dsh-ssh-tui 0.8.1 → 0.8.2

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 (93) hide show
  1. package/CHANGELOG.md +158 -0
  2. package/README.en.md +118 -15
  3. package/README.md +78 -13
  4. package/docs/release-notes-0.7.4.md +91 -0
  5. package/docs/release-notes-0.8.0.md +56 -0
  6. package/docs/release-notes-0.8.1.md +79 -0
  7. package/docs/release-notes-0.8.2-rc.1.md +159 -0
  8. package/docs/release-notes-0.8.2.md +62 -0
  9. package/docs/screenshots/reconnect.gif +0 -0
  10. package/docs/terminals.md +23 -0
  11. package/docs/windows.md +13 -0
  12. package/lib/approval-state.js +148 -0
  13. package/lib/approval-state.js.map +1 -0
  14. package/lib/auth-failure.js +38 -0
  15. package/lib/auth-failure.js.map +1 -1
  16. package/lib/color-depth.js +26 -0
  17. package/lib/color-depth.js.map +1 -1
  18. package/lib/copy-text.js +30 -8
  19. package/lib/copy-text.js.map +1 -1
  20. package/lib/dialogs.js +81 -0
  21. package/lib/dialogs.js.map +1 -1
  22. package/lib/display-sock.js +138 -23
  23. package/lib/display-sock.js.map +1 -1
  24. package/lib/footer-accents.js +28 -0
  25. package/lib/footer-accents.js.map +1 -0
  26. package/lib/footer-budget.js +328 -0
  27. package/lib/footer-budget.js.map +1 -0
  28. package/lib/footer-format.js +433 -0
  29. package/lib/footer-format.js.map +1 -0
  30. package/lib/footer-layout.js +407 -0
  31. package/lib/footer-layout.js.map +1 -0
  32. package/lib/footer-meters.js +185 -0
  33. package/lib/footer-meters.js.map +1 -0
  34. package/lib/footer.js +19 -558
  35. package/lib/footer.js.map +1 -1
  36. package/lib/i18n/en.js +65 -5
  37. package/lib/i18n/en.js.map +1 -1
  38. package/lib/i18n/zh.js +67 -5
  39. package/lib/i18n/zh.js.map +1 -1
  40. package/lib/paint.js +53 -8
  41. package/lib/paint.js.map +1 -1
  42. package/lib/plan-projection.js +291 -0
  43. package/lib/plan-projection.js.map +1 -0
  44. package/lib/plan.js +50 -0
  45. package/lib/plan.js.map +1 -1
  46. package/lib/question-state.js +83 -0
  47. package/lib/question-state.js.map +1 -0
  48. package/lib/representation.js +283 -0
  49. package/lib/representation.js.map +1 -0
  50. package/lib/screen.js +105 -0
  51. package/lib/screen.js.map +1 -0
  52. package/lib/selection.js +5 -3
  53. package/lib/selection.js.map +1 -1
  54. package/lib/startup.js +49 -0
  55. package/lib/startup.js.map +1 -1
  56. package/lib/stats.js +101 -3
  57. package/lib/stats.js.map +1 -1
  58. package/lib/term-text.js +154 -55
  59. package/lib/term-text.js.map +1 -1
  60. package/lib/theme.js +20 -3
  61. package/lib/theme.js.map +1 -1
  62. package/lib/throughput.js +305 -0
  63. package/lib/throughput.js.map +1 -0
  64. package/lib/tool-present.js +57 -7
  65. package/lib/tool-present.js.map +1 -1
  66. package/lib/tui.js +3776 -1105
  67. package/lib/tui.js.map +1 -1
  68. package/lib/types/approval-state.d.ts +75 -0
  69. package/lib/types/auth-failure.d.ts +25 -0
  70. package/lib/types/color-depth.d.ts +21 -0
  71. package/lib/types/copy-text.d.ts +18 -1
  72. package/lib/types/dialogs.d.ts +111 -1
  73. package/lib/types/display-sock.d.ts +15 -0
  74. package/lib/types/footer-accents.d.ts +22 -0
  75. package/lib/types/footer-budget.d.ts +204 -0
  76. package/lib/types/footer-format.d.ts +221 -0
  77. package/lib/types/footer-layout.d.ts +292 -0
  78. package/lib/types/footer-meters.d.ts +151 -0
  79. package/lib/types/footer.d.ts +19 -269
  80. package/lib/types/paint.d.ts +48 -0
  81. package/lib/types/plan-projection.d.ts +162 -0
  82. package/lib/types/plan.d.ts +13 -0
  83. package/lib/types/question-state.d.ts +96 -0
  84. package/lib/types/representation.d.ts +498 -0
  85. package/lib/types/screen.d.ts +126 -0
  86. package/lib/types/startup.d.ts +24 -0
  87. package/lib/types/stats.d.ts +64 -1
  88. package/lib/types/term-text.d.ts +45 -1
  89. package/lib/types/throughput.d.ts +163 -0
  90. package/lib/types/tool-present.d.ts +41 -0
  91. package/lib/types/transcript-types.d.ts +63 -2
  92. package/lib/types/tui.d.ts +862 -11
  93. package/package.json +16 -6
package/lib/paint.js CHANGED
@@ -91,6 +91,34 @@ export function paintIntervalForRtt(rttMs) {
91
91
  return 250;
92
92
  return 400;
93
93
  }
94
+ /** The redraw budget a drag assumes on a link whose round trip was never measured. */
95
+ export const RESIZE_UNKNOWN_LINK_BUDGET_MS = 200;
96
+ /**
97
+ * How long one frame takes to reach the terminal, for pacing a drag.
98
+ *
99
+ * Two of the four sources are an *answer*: `paintIntervalForRtt` already turned a
100
+ * measured round trip into a cadence, and an explicit `DSH_TUI_PAINT_MS` is the
101
+ * user's own. The other two are not, and they are not the same kind of guess:
102
+ *
103
+ * - a local TTY's cadence is a constant about a link that is not a link, so it is
104
+ * used as it stands;
105
+ * - an **unprobed** link's interval is the SSH default — a number nobody measured
106
+ * — and pacing frames by it composes them faster than the link can deliver them,
107
+ * which queues stale geometries behind each other and reads as a drag that
108
+ * freezes and jumps. That case gets a deliberately slow budget instead.
109
+ *
110
+ * Nothing here claims a round trip: the status row keeps painting `SSH ○○○○ 160ms`
111
+ * when the probe never answered, and this budget stays an internal pacing floor.
112
+ * @param link - which kind of link the session is on.
113
+ * @param source - where the cadence came from.
114
+ * @param intervalMs - the cadence in force.
115
+ * @returns milliseconds one frame needs, at least.
116
+ */
117
+ export function linkRedrawBudgetMs(link, source, intervalMs) {
118
+ if (link === 'ssh' && source === 'unprobed')
119
+ return RESIZE_UNKNOWN_LINK_BUDGET_MS;
120
+ return intervalMs;
121
+ }
94
122
  /**
95
123
  * How many measurements the link's reported round-trip is taken over.
96
124
  *
@@ -254,15 +282,22 @@ export function composePaintFrame(options) {
254
282
  // higher of the two chrome starts so leftover tool-body glyphs cannot sit
255
283
  // on the prompt.
256
284
  const dirtyChromeStart = Math.min(chromeStart, previousChromeStart);
285
+ // A partial frame keeps every row above `dirtyFrom` as it is, on the screen and
286
+ // in the comparison: it must not clear, and it must not treat the rows it is
287
+ // leaving alone as size-changed dirt either.
288
+ const partial = options.dirtyFrom !== undefined;
289
+ const dirtyFrom = options.dirtyFrom ?? 0;
257
290
  let out = '\x1b[?25l';
258
- const prev = sizeChanged ? [] : previousRows;
259
- if (sizeChanged)
291
+ const prev = sizeChanged && !partial ? [] : previousRows;
292
+ if (sizeChanged && !partial)
260
293
  out += '\x1b[H\x1b[J';
261
294
  // Never address row height+1: that scrolls the SSH viewport and leaves
262
295
  // thinking/tool/assistant glyphs sitting on the next card.
263
296
  const rowCount = Math.min(height, paintRows.length);
264
297
  const dirty = [];
265
298
  for (let index = 0; index < rowCount; index += 1) {
299
+ if (index < dirtyFrom)
300
+ continue;
266
301
  const current = paintRows[index] ?? '';
267
302
  if (current === prev[index] && !(chromeChanged && index >= dirtyChromeStart))
268
303
  continue;
@@ -277,6 +312,16 @@ export function composePaintFrame(options) {
277
312
  const deferred = [];
278
313
  let rows = '';
279
314
  let used = out.length;
315
+ // Where the caret belongs when this frame is done (the composer's own caret). A
316
+ // terminal draws an IME composition *where the caret is*, and writing a row parks
317
+ // the caret at the end of that row's text — so a frame that repaints the live
318
+ // region above the input box left the pre-edit flashing at the end of the
319
+ // processing row (Windows Terminal, reported twice). While the composer owns the
320
+ // caret, every row that is not the caret's own row hands it straight back. The
321
+ // moves cost a few bytes each and are what keeps the composition in one place.
322
+ const caretRow = Math.min(height, Math.max(1, options.cursorRow));
323
+ const caretColumn = Math.min(width, Math.max(1, options.cursorColumn));
324
+ const caret = options.hideCursor === true ? '' : `\x1b[${caretRow};${caretColumn}H`;
280
325
  for (const index of order) {
281
326
  // Pin first, then pad: the padder measures with `visibleWidth`, which does
282
327
  // not know that a symbol like ⚠ will gain a variation selector and a
@@ -290,15 +335,17 @@ export function composePaintFrame(options) {
290
335
  deferred.push(index);
291
336
  continue;
292
337
  }
293
- rows += row;
338
+ rows += index + 1 === caretRow ? row : row + caret;
294
339
  used += row.length;
295
340
  painted.push(index);
296
341
  }
297
- if (rowCount < height && (sizeChanged || previousRows.length !== paintRows.length)) {
342
+ // Never on a partial frame: erasing below the content would take the rows this
343
+ // frame was written to leave alone.
344
+ if (!partial && rowCount < height && (sizeChanged || previousRows.length !== paintRows.length)) {
298
345
  rows += `\x1b[${rowCount + 1};1H\x1b[J`;
299
346
  }
300
347
  painted.sort((left, right) => left - right);
301
- const paintedAny = painted.length > 0 || sizeChanged;
348
+ const paintedAny = painted.length > 0 || (sizeChanged && !partial);
302
349
  if (!paintedAny && options.hideCursor === true) {
303
350
  return { output: '', painted, deferred, resume: undefined, bytes: 0 };
304
351
  }
@@ -320,13 +367,11 @@ export function composePaintFrame(options) {
320
367
  if (painted.length > 2)
321
368
  out = `\x1b[?2026h${out}\x1b[?2026l`;
322
369
  if (options.hideCursor !== true) {
323
- const cursorRow = Math.min(height, Math.max(1, options.cursorRow));
324
370
  // Column `width + 1` (and writing into the last cell then parking past
325
371
  // it) trips DEC auto-margin: the hardware cursor wraps onto the next
326
372
  // row and the caret punches through the last glyph. Keep the caret on
327
373
  // this row, in a real cell.
328
- const cursorColumn = Math.min(width, Math.max(1, options.cursorColumn));
329
- out += `\x1b[${cursorRow};${cursorColumn}H\x1b[?25h`;
374
+ out += `${caret}\x1b[?25h`;
330
375
  }
331
376
  return {
332
377
  output: out,
package/lib/paint.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"paint.js","sourceRoot":"","sources":["../src/paint.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"paint.js","sourceRoot":"","sources":["../src/paint.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,291 @@
1
+ import { parsePlanTodos } from './plan.js';
2
+ const PLAN_TOOL = 'exit_plan_mode';
3
+ /**
4
+ * The harness's own refusal sentences for a plan review.
5
+ *
6
+ * Matched exactly, because they are the *only* durable evidence that a review was
7
+ * refused rather than never asked: `keep planning` (with or without feedback) and the
8
+ * dismissal that happens when the reader speaks instead of answering.
9
+ */
10
+ export function reviewRefusal(text) {
11
+ if (text.includes('dismissed the plan review'))
12
+ return { outcome: 'dismissed' };
13
+ if (!text.includes('chose to keep planning'))
14
+ return undefined;
15
+ const match = /their feedback:\s*(.*)$/u.exec(text);
16
+ const feedback = match?.[1]?.trim() ?? '';
17
+ return { outcome: 'rejected', ...(feedback === '' ? {} : { feedback }) };
18
+ }
19
+ /** The plan markdown a call carried, when the arguments are readable. */
20
+ function planBodyOf(args) {
21
+ const parsed = typeof args === 'string' ? safeParse(args) : args;
22
+ if (parsed === undefined || typeof parsed !== 'object' || parsed === null)
23
+ return undefined;
24
+ const plan = parsed.plan;
25
+ return typeof plan === 'string' && plan.trim() !== '' ? plan : undefined;
26
+ }
27
+ function safeParse(text) {
28
+ try {
29
+ return JSON.parse(text);
30
+ }
31
+ catch {
32
+ return undefined;
33
+ }
34
+ }
35
+ /** The text one tool result carries, joined. */
36
+ function resultText(data) {
37
+ const content = data?.message?.content;
38
+ if (!Array.isArray(content))
39
+ return '';
40
+ return content
41
+ .map(block => (typeof block === 'object' && block !== null && typeof block.text === 'string'
42
+ ? String(block.text)
43
+ : ''))
44
+ .join('');
45
+ }
46
+ /** Whether the result is an error, either way the harness can say it. */
47
+ function resultFailed(data) {
48
+ if (data?.error !== undefined)
49
+ return true;
50
+ return data?.message?.isError === true;
51
+ }
52
+ function allCompleted(steps) {
53
+ return steps.length > 0 && steps.every(step => step.status === 'completed');
54
+ }
55
+ /**
56
+ * Fold the durable events of one session into its plan artifacts.
57
+ *
58
+ * Deterministic by construction: ids are derived from event `seq` alone, and every
59
+ * decision reads only events that precede it. The same log (live or replayed) folds
60
+ * to the same list, which is what lets one artifact feed the transcript, the dock and
61
+ * the review Surface without any of them keeping state.
62
+ *
63
+ * @param events - the session's events, in order. Unknown types are ignored.
64
+ * @param options - `live` marks a fold whose last events come from a running Host, so
65
+ * an unresolved review may be called `reviewing`; a replay leaves it `unknown`.
66
+ * @returns every artifact the session accounts for, oldest first.
67
+ */
68
+ export function foldPlanArtifacts(events, options = {}) {
69
+ const artifacts = [];
70
+ let open;
71
+ let modeActive = false;
72
+ let pendingCommandId;
73
+ let pendingWanted;
74
+ // The current event's anchors: a real `seq` when the log has one, otherwise its
75
+ // position in the log (a distinct namespace, so the two can never collide).
76
+ let anchor = 0;
77
+ let anchorId = '0';
78
+ const close = (state, provenance = 'inferred') => {
79
+ if (open === undefined)
80
+ return;
81
+ if (state !== undefined) {
82
+ open.state = state;
83
+ open.provenance = provenance;
84
+ }
85
+ // The anchor, not the raw `seq`: a log without sequence numbers still closes its
86
+ // artifacts (an undefined `closedSeq` read as "still open" and kept a finished
87
+ // plan in the dock).
88
+ open.closedSeq = anchor;
89
+ open = undefined;
90
+ };
91
+ const openArtifact = (openedBy) => {
92
+ const artifact = {
93
+ id: `plan@${anchorId}`,
94
+ openedBy,
95
+ openSeq: anchor,
96
+ state: 'draft',
97
+ provenance: 'durable',
98
+ steps: [],
99
+ revisions: [],
100
+ active: openedBy === 'plan-mode',
101
+ pending: false,
102
+ };
103
+ artifacts.push(artifact);
104
+ return artifact;
105
+ };
106
+ for (const [index, event] of events.entries()) {
107
+ const seq = typeof event.seq === 'number' ? event.seq : undefined;
108
+ // Events without a `seq` (a harness that omits it, a hand-written fixture) still
109
+ // need distinct, replay-stable anchors: the position in the log is exactly that,
110
+ // as long as it never collides with a real sequence number — hence the separate
111
+ // `#` namespace rather than a bare index.
112
+ anchor = seq ?? index;
113
+ anchorId = seq === undefined ? `#${index}` : String(seq);
114
+ const data = event.data;
115
+ switch (event.type) {
116
+ case 'plan/mode': {
117
+ const active = data?.active === true;
118
+ modeActive = active;
119
+ pendingCommandId = undefined;
120
+ pendingWanted = undefined;
121
+ if (active) {
122
+ if (open === undefined)
123
+ open = openArtifact('plan-mode');
124
+ open.active = true;
125
+ open.pending = false;
126
+ open.state = open.state === 'draft' ? 'draft' : open.state;
127
+ open.provenance = 'durable';
128
+ }
129
+ else if (open !== undefined) {
130
+ open.active = false;
131
+ open.pending = false;
132
+ // Leaving plan mode is not "completed" and not "abandoned" on its own: with
133
+ // an approved review behind it the plan is being carried out, and with a
134
+ // refusal behind it the reader kept planning. Only a plan nobody approved
135
+ // and nobody finished is abandoned — and that reading says so.
136
+ if (open.review?.outcome === 'approved') {
137
+ open.state = allCompleted(open.steps) ? 'completed' : 'executing';
138
+ open.provenance = allCompleted(open.steps) ? 'inferred' : 'durable';
139
+ }
140
+ else if (open.review?.outcome === 'rejected' || open.review?.outcome === 'dismissed') {
141
+ open.state = 'rejected';
142
+ open.provenance = 'durable';
143
+ close();
144
+ }
145
+ else if (allCompleted(open.steps)) {
146
+ open.state = 'completed';
147
+ open.provenance = 'inferred';
148
+ close('completed', 'inferred');
149
+ }
150
+ else {
151
+ open.state = 'abandoned';
152
+ open.provenance = 'inferred';
153
+ close('abandoned', 'inferred');
154
+ }
155
+ }
156
+ break;
157
+ }
158
+ case 'command/run': {
159
+ if (String(data?.name ?? '') !== 'plan')
160
+ break;
161
+ if (data?.args === undefined)
162
+ break;
163
+ pendingCommandId = String(data?.commandId ?? '');
164
+ pendingWanted = String(data.args).trim() !== 'off';
165
+ if (open !== undefined) {
166
+ open.pending = pendingWanted !== modeActive;
167
+ }
168
+ break;
169
+ }
170
+ case 'command/done': {
171
+ if (pendingCommandId === undefined || String(data?.commandId ?? '') !== pendingCommandId)
172
+ break;
173
+ const succeeded = data?.kind === 'success';
174
+ const wanted = pendingWanted;
175
+ pendingCommandId = undefined;
176
+ pendingWanted = undefined;
177
+ if (open !== undefined && wanted !== undefined)
178
+ open.pending = succeeded && wanted !== modeActive;
179
+ break;
180
+ }
181
+ case 'todo/write': {
182
+ const steps = parsePlanTodos(data?.todos);
183
+ if (steps.length === 0)
184
+ break;
185
+ const artifact = open ?? openArtifact('todos');
186
+ artifact.revisions.push({ id: `${artifact.id}#${anchorId}`, seq: anchor, steps });
187
+ artifact.steps = steps;
188
+ if (allCompleted(steps) && !artifact.active) {
189
+ // The list is done and plan mode is not holding it: the next write is a new
190
+ // plan, so this artifact closes here. Re-opening it (which this did, by
191
+ // assigning `open` unconditionally) merged every later list into the first
192
+ // plan — the "two plans in one session" case the projection exists for.
193
+ artifact.state = 'completed';
194
+ artifact.provenance = 'inferred';
195
+ close('completed', 'inferred');
196
+ }
197
+ else {
198
+ if (artifact.state === 'draft') {
199
+ artifact.state = artifact.active ? 'draft' : 'executing';
200
+ artifact.provenance = artifact.active ? 'durable' : 'inferred';
201
+ }
202
+ if (allCompleted(steps)) {
203
+ artifact.state = 'completed';
204
+ artifact.provenance = 'inferred';
205
+ }
206
+ open = artifact;
207
+ }
208
+ break;
209
+ }
210
+ case 'tool/call': {
211
+ if (String(data?.name ?? '') !== PLAN_TOOL)
212
+ break;
213
+ const body = planBodyOf(data?.arguments);
214
+ const callId = String(data?.callId ?? '');
215
+ const artifact = open ?? openArtifact('todos');
216
+ const review = {
217
+ id: callId === '' ? `review@${anchorId}` : callId,
218
+ seq: anchor,
219
+ body: body ?? artifact.body ?? '',
220
+ outcome: (event.live ?? options.live) === true ? 'pending' : 'unknown',
221
+ };
222
+ artifact.review = review;
223
+ if (body !== undefined)
224
+ artifact.body = body;
225
+ artifact.state = (event.live ?? options.live) === true ? 'reviewing' : 'unknown';
226
+ artifact.provenance = 'durable';
227
+ open = artifact;
228
+ break;
229
+ }
230
+ case 'tool/result': {
231
+ const callId = String(data?.message?.source?.callId ?? '');
232
+ const artifact = artifacts.findLast(candidate => candidate.review?.id === callId);
233
+ if (artifact?.review === undefined)
234
+ break;
235
+ if (resultFailed(data)) {
236
+ const refusal = reviewRefusal(`${resultText(data)} ${String(data?.error?.message ?? '')}`);
237
+ artifact.review.outcome = refusal?.outcome ?? 'unknown';
238
+ if (refusal?.feedback !== undefined)
239
+ artifact.review.feedback = refusal.feedback;
240
+ artifact.state = refusal === undefined ? 'unknown' : 'rejected';
241
+ artifact.provenance = refusal === undefined ? 'inferred' : 'durable';
242
+ }
243
+ else {
244
+ artifact.review.outcome = 'approved';
245
+ artifact.state = allCompleted(artifact.steps) ? 'completed' : 'approved';
246
+ artifact.provenance = 'durable';
247
+ }
248
+ break;
249
+ }
250
+ default:
251
+ break;
252
+ }
253
+ }
254
+ // The fold is over: whatever is still open is the artifact a reader is looking at.
255
+ for (const artifact of artifacts) {
256
+ if (artifact === open)
257
+ continue;
258
+ artifact.active = false;
259
+ }
260
+ if (open !== undefined)
261
+ open.active = modeActive;
262
+ return artifacts;
263
+ }
264
+ /** The artifact a workspace should dock: the newest one that is still live. */
265
+ export function livePlanArtifact(artifacts) {
266
+ return artifacts.findLast(artifact => artifactIsLive(artifact));
267
+ }
268
+ /**
269
+ * Whether the artifact still describes work in progress.
270
+ *
271
+ * The same question `planIsLive` asked of a row, asked of the projection instead:
272
+ * plan mode on, a switch queued, a step not finished, or a review awaiting its
273
+ * answer. Everything else is history, and history belongs in the transcript.
274
+ */
275
+ export function artifactIsLive(artifact) {
276
+ if (artifact.closedSeq !== undefined)
277
+ return false;
278
+ if (artifact.active || artifact.pending)
279
+ return true;
280
+ if (artifact.review?.outcome === 'pending')
281
+ return true;
282
+ return artifact.steps.some(step => step.status !== 'completed');
283
+ }
284
+ /** `3/7`-style progress over the latest revision. */
285
+ export function artifactProgress(artifact) {
286
+ const total = artifact.steps.length;
287
+ const done = artifact.steps.filter(step => step.status === 'completed').length;
288
+ const current = artifact.steps.find(step => step.status === 'in_progress');
289
+ return current === undefined ? { done, total } : { done, total, current };
290
+ }
291
+ //# sourceMappingURL=plan-projection.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"plan-projection.js","sourceRoot":"","sources":["../src/plan-projection.ts"],"names":[],"mappings":"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"}
package/lib/plan.js CHANGED
@@ -399,6 +399,56 @@ export function askSummary(value) {
399
399
  : t('question.waiting');
400
400
  return questions.length > 1 ? t('ask.multi', { text, count: questions.length }) : text;
401
401
  }
402
+ /**
403
+ * The questions one `ask_user_question` call recorded, for the durable fold.
404
+ *
405
+ * The Session's own reader (`questionsOf` in `@deepseek-ai/dsh-user-questions`)
406
+ * validates against the tool's schema and returns nothing when it does not match.
407
+ * This one only has to be faithful enough to draw a card from a log entry this
408
+ * process did not witness, so it takes the fields it can use and drops the rest
409
+ * rather than refusing the whole call.
410
+ * @param value - the tool call's arguments, raw JSON or already parsed.
411
+ * @returns the questions, or an empty list when the shape is unusable.
412
+ */
413
+ export function askQuestions(value) {
414
+ const root = typeof value === 'string' ? parseJsonArgs(value) : value;
415
+ const questions = root !== null && typeof root === 'object' && !Array.isArray(root)
416
+ ? root.questions
417
+ : undefined;
418
+ if (!Array.isArray(questions))
419
+ return [];
420
+ const out = [];
421
+ for (const entry of questions) {
422
+ if (typeof entry !== 'object' || entry === null)
423
+ continue;
424
+ const item = entry;
425
+ if (typeof item.id !== 'string' || typeof item.question !== 'string')
426
+ continue;
427
+ const options = Array.isArray(item.options)
428
+ ? item.options.flatMap((option) => {
429
+ if (typeof option !== 'object' || option === null)
430
+ return [];
431
+ const shape = option;
432
+ if (typeof shape.label !== 'string')
433
+ return [];
434
+ return [{
435
+ label: shape.label,
436
+ ...(typeof shape.description === 'string' ? { description: shape.description } : {}),
437
+ }];
438
+ })
439
+ : undefined;
440
+ const multi = item.multi_select === true || item.multiSelect === true;
441
+ out.push({
442
+ id: item.id,
443
+ question: item.question,
444
+ ...(typeof item.header === 'string' ? { header: item.header } : {}),
445
+ ...(typeof item.detail === 'string' ? { detail: item.detail } : {}),
446
+ ...(options === undefined ? {} : { options }),
447
+ ...(multi ? { multiSelect: true } : {}),
448
+ });
449
+ }
450
+ return out;
451
+ }
402
452
  /** First non-empty line, collapsed to a single scan line. */
403
453
  export function firstDisplayLine(text) {
404
454
  return text.replace(/\s+/gu, ' ').trim();