moderado 0.4.33 → 0.4.46

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 (109) hide show
  1. package/README.md +14 -9
  2. package/dist/commands/chat.d.ts +7 -70
  3. package/dist/commands/chat.d.ts.map +1 -1
  4. package/dist/commands/chat.js +305 -456
  5. package/dist/commands/chat.js.map +1 -1
  6. package/dist/commands/chat_meta.d.ts +36 -0
  7. package/dist/commands/chat_meta.d.ts.map +1 -0
  8. package/dist/commands/chat_meta.js +102 -0
  9. package/dist/commands/chat_meta.js.map +1 -0
  10. package/dist/commands/chat_outcome.d.ts +31 -0
  11. package/dist/commands/chat_outcome.d.ts.map +1 -0
  12. package/dist/commands/chat_outcome.js +70 -0
  13. package/dist/commands/chat_outcome.js.map +1 -0
  14. package/dist/commands/chat_search.d.ts +24 -0
  15. package/dist/commands/chat_search.d.ts.map +1 -0
  16. package/dist/commands/chat_search.js +61 -0
  17. package/dist/commands/chat_search.js.map +1 -0
  18. package/dist/commands/chat_slash.d.ts +17 -0
  19. package/dist/commands/chat_slash.d.ts.map +1 -0
  20. package/dist/commands/chat_slash.js +108 -0
  21. package/dist/commands/chat_slash.js.map +1 -0
  22. package/dist/commands/run.d.ts.map +1 -1
  23. package/dist/commands/run.js +25 -1
  24. package/dist/commands/run.js.map +1 -1
  25. package/dist/config.d.ts +1 -1
  26. package/dist/config.d.ts.map +1 -1
  27. package/dist/config.js +18 -2
  28. package/dist/config.js.map +1 -1
  29. package/dist/diagnostic_log.d.ts.map +1 -1
  30. package/dist/diagnostic_log.js +1 -0
  31. package/dist/diagnostic_log.js.map +1 -1
  32. package/dist/http_shutdown.d.ts +22 -0
  33. package/dist/http_shutdown.d.ts.map +1 -0
  34. package/dist/http_shutdown.js +36 -0
  35. package/dist/http_shutdown.js.map +1 -0
  36. package/dist/index.d.ts.map +1 -1
  37. package/dist/index.js +16 -1
  38. package/dist/index.js.map +1 -1
  39. package/dist/self_update.d.ts +6 -0
  40. package/dist/self_update.d.ts.map +1 -1
  41. package/dist/self_update.js +17 -1
  42. package/dist/self_update.js.map +1 -1
  43. package/dist/sessions.d.ts.map +1 -1
  44. package/dist/sessions.js +5 -1
  45. package/dist/sessions.js.map +1 -1
  46. package/dist/transcript.d.ts +19 -0
  47. package/dist/transcript.d.ts.map +1 -0
  48. package/dist/transcript.js +76 -0
  49. package/dist/transcript.js.map +1 -0
  50. package/dist/turn_summary.d.ts +76 -0
  51. package/dist/turn_summary.d.ts.map +1 -0
  52. package/dist/turn_summary.js +305 -0
  53. package/dist/turn_summary.js.map +1 -0
  54. package/dist/ui/box.d.ts +19 -0
  55. package/dist/ui/box.d.ts.map +1 -1
  56. package/dist/ui/box.js +119 -12
  57. package/dist/ui/box.js.map +1 -1
  58. package/dist/ui/chart.d.ts +2 -0
  59. package/dist/ui/chart.d.ts.map +1 -0
  60. package/dist/ui/chart.js +97 -0
  61. package/dist/ui/chart.js.map +1 -0
  62. package/dist/ui/composer.d.ts +80 -0
  63. package/dist/ui/composer.d.ts.map +1 -0
  64. package/dist/ui/composer.js +762 -0
  65. package/dist/ui/composer.js.map +1 -0
  66. package/dist/ui/help_content.d.ts +1 -1
  67. package/dist/ui/help_content.d.ts.map +1 -1
  68. package/dist/ui/help_content.js +4 -2
  69. package/dist/ui/help_content.js.map +1 -1
  70. package/dist/ui/model_selector.d.ts +1 -0
  71. package/dist/ui/model_selector.d.ts.map +1 -1
  72. package/dist/ui/model_selector.js +61 -18
  73. package/dist/ui/model_selector.js.map +1 -1
  74. package/dist/ui/popup.d.ts.map +1 -1
  75. package/dist/ui/popup.js +13 -0
  76. package/dist/ui/popup.js.map +1 -1
  77. package/dist/ui/provider_connect.d.ts +8 -0
  78. package/dist/ui/provider_connect.d.ts.map +1 -1
  79. package/dist/ui/provider_connect.js +81 -23
  80. package/dist/ui/provider_connect.js.map +1 -1
  81. package/dist/ui/renderer.d.ts +49 -4
  82. package/dist/ui/renderer.d.ts.map +1 -1
  83. package/dist/ui/renderer.js +167 -31
  84. package/dist/ui/renderer.js.map +1 -1
  85. package/dist/ui/terminal_approval.d.ts +21 -0
  86. package/dist/ui/terminal_approval.d.ts.map +1 -1
  87. package/dist/ui/terminal_approval.js +145 -47
  88. package/dist/ui/terminal_approval.js.map +1 -1
  89. package/dist/ui/welcome.d.ts +234 -69
  90. package/dist/ui/welcome.d.ts.map +1 -1
  91. package/dist/ui/welcome.js +588 -693
  92. package/dist/ui/welcome.js.map +1 -1
  93. package/dist/vendor/providers/presets.d.ts +16 -0
  94. package/dist/vendor/providers/presets.d.ts.map +1 -1
  95. package/dist/vendor/providers/presets.js +13 -0
  96. package/dist/vendor/providers/presets.js.map +1 -1
  97. package/dist/vendor/tools/checkpoints.js +5 -5
  98. package/dist/vendor/tools/checkpoints.js.map +1 -1
  99. package/dist/vendor/tools/jail.d.ts +8 -0
  100. package/dist/vendor/tools/jail.d.ts.map +1 -1
  101. package/dist/vendor/tools/jail.js +13 -2
  102. package/dist/vendor/tools/jail.js.map +1 -1
  103. package/dist/vendor/tools/tools/apply_patch.d.ts.map +1 -1
  104. package/dist/vendor/tools/tools/apply_patch.js +6 -3
  105. package/dist/vendor/tools/tools/apply_patch.js.map +1 -1
  106. package/dist/vendor/tools/tools/git_diff.d.ts.map +1 -1
  107. package/dist/vendor/tools/tools/git_diff.js +5 -3
  108. package/dist/vendor/tools/tools/git_diff.js.map +1 -1
  109. package/package.json +24 -7
@@ -15,6 +15,14 @@ export interface WelcomeLayoutOptions {
15
15
  /** When set, render the full chat window (question row 1 + answer) instead of the logo header. */
16
16
  chatQuestion?: string;
17
17
  chatAnswer?: string;
18
+ /** Rows the answer is scrolled up from its tail; 0 is the live view. */
19
+ chatAnswerOffset?: number;
20
+ /**
21
+ * Live activity for this turn. When set, the status row carries the current
22
+ * phase and the transcript below it starts with the activity log, so a full
23
+ * frame repaint shows the same thing the incremental paints do.
24
+ */
25
+ chatActivity?: ChatActivityBlock;
18
26
  chatThoughtTime?: number;
19
27
  /** Settled turn completed successfully — render the "✔ Done" status marker. */
20
28
  chatTaskDone?: boolean;
@@ -31,8 +39,25 @@ export interface WelcomeLayoutOptions {
31
39
  export declare const MODERADO_ASCII_LOGO: string[];
32
40
  export declare const COMMAND_HINT = "\u001B[38;5;242mUse \u001B[38;5;75m/\u001B[38;5;242m for slash commands, \u001B[38;5;75m@\u001B[38;5;242m for file mentions\u001B[0m";
33
41
  export declare function stripAnsi(str: string): string;
42
+ /**
43
+ * SGR mouse report, e.g. "\x1b[<0;12;5M" for a primary-button press on column 12
44
+ * of row 5. readline splits that escape into several keypress events ("0", ";",
45
+ * "5", "M"), so the raw data chunk is parsed instead of the derived keystrokes.
46
+ *
47
+ * These live here rather than in the composer because enabling and disabling
48
+ * mouse reporting is terminal state: `exitCleanly` has to turn it off too.
49
+ */
50
+ export declare const MOUSE_REPORT_PATTERN: RegExp;
51
+ export declare const MOUSE_REPORT_ON = "\u001B[?1000h\u001B[?1006h";
52
+ export declare const MOUSE_REPORT_OFF = "\u001B[?1000l\u001B[?1006l";
53
+ export declare function composerInputWindow(input: string, caret: number, width: number): {
54
+ text: string;
55
+ caretColumn: number;
56
+ };
34
57
  /** Card width: nearly full terminal width, like OpenCode/Cline. */
35
58
  export declare function getWelcomeCardWidth(width?: number): number;
59
+ /** Chat fills the available columns; the startup Welcome card keeps its own width. */
60
+ export declare function getChatCardWidth(width?: number): number;
36
61
  /** Left indent that centers a block of `blockWidth` visible columns on the terminal. */
37
62
  export declare function getWelcomeIndent(blockWidth: number, width?: number): number;
38
63
  /**
@@ -47,6 +72,59 @@ export declare function getChatAnswerArea(width?: number): {
47
72
  startColumn: number;
48
73
  wrapWidth: number;
49
74
  };
75
+ /** The chat header is a single compact brand row. */
76
+ export declare const CHAT_HEADER_ROWS = 1;
77
+ /** Rows the composer card occupies: blank surface, input, blank surface, mode, workspace. */
78
+ export declare const CHAT_COMPOSER_ROWS = 5;
79
+ export interface ChatLayout {
80
+ area: ReturnType<typeof getChatAnswerArea>;
81
+ questionTop: number;
82
+ questionRows: number;
83
+ statusRow: number;
84
+ answerTop: number;
85
+ answerRows: number;
86
+ composerTop: number;
87
+ /** Real viewport width used to size the chat card. */
88
+ terminalWidth: number;
89
+ }
90
+ /**
91
+ * Fixed row geometry for the chat window. The answer area is bounded by the
92
+ * composer: a long answer is windowed instead of pushing the input card, the
93
+ * mode row, and the workspace row off screen (or painting over them).
94
+ */
95
+ export declare function getChatLayout(width?: number, height?: number, question?: string, composerRows?: number): ChatLayout;
96
+ /** Rows the composer card occupies for a given layout, including any queued-commands box. */
97
+ export declare function getChatComposerRows(options: WelcomeLayoutOptions): number;
98
+ /**
99
+ * Wrap an answer for the card, marking the turn summary as it goes.
100
+ *
101
+ * The fence has to be resolved *before* wrapping, not after: a summary line that
102
+ * wraps would lose its marker on the continuation, and a block whose opening
103
+ * marker scrolled off the top would stop being styled exactly when it is
104
+ * longest. Every wrapped line inside the fence carries `SUMMARY_MARK`, so the
105
+ * renderer can tint any row on its own.
106
+ */
107
+ export declare function wrapAnswerLines(text: string, textWidth: number): string[];
108
+ /**
109
+ * Window the answer around an offset, measured in rows scrolled up from the
110
+ * tail. `offset = 0` is the live view (newest rows). One row is reserved for the
111
+ * "earlier lines hidden" note whenever anything is above the window.
112
+ */
113
+ export declare function windowChatAnswerAt(text: string, maxRows: number, textWidth: number, offsetFromBottom?: number): {
114
+ lines: string[];
115
+ hiddenAbove: number;
116
+ hiddenBelow: number;
117
+ };
118
+ /**
119
+ * Style one answer row.
120
+ *
121
+ * Inside the turn-summary fence every row becomes a band: a rail in the accent
122
+ * colour, a tinted background that reaches the right edge of the card, and
123
+ * headings in warm bold. This is what makes the report read as a different kind
124
+ * of thing from the prose above it, rather than three more paragraphs.
125
+ */
126
+ export declare function renderAnswerLine(line: string, textWidth: number): string;
127
+ export declare function chatAnswerOverflowNote(hidden: number): string;
50
128
  export declare function renderQueuedCommandsBox(commands: readonly string[], width: number): string[];
51
129
  export declare function renderWelcomeCard(options: WelcomeLayoutOptions): string;
52
130
  export interface SlashCommand {
@@ -59,6 +137,8 @@ export declare function selectCommandCandidate(input: string, currentIndex: numb
59
137
  export declare function renderSuggestionsBox(commands: SlashCommand[], width?: number, selectedIndex?: number): string[];
60
138
  export declare function renderMentionSuggestionsBox(files: string[], selectedIndex?: number, width?: number): string[];
61
139
  export declare function renderModeradoHeader(width?: number): string;
140
+ /** Compact wordmark used after the welcome screen transitions into chat. */
141
+ export declare function renderChatHeader(width?: number): string;
62
142
  /** Word-wrap plain text to `maxWidth` visible columns, hard-breaking long words. */
63
143
  export declare function wrapText(text: string, maxWidth: number): string[];
64
144
  /**
@@ -67,8 +147,12 @@ export declare function wrapText(text: string, maxWidth: number): string[];
67
147
  * same input card as the welcome window at the bottom.
68
148
  */
69
149
  export declare function renderChatScreen(options: WelcomeLayoutOptions, height?: number): string;
70
- /** Place the terminal cursor on the first row of the bottom composer. */
71
- export declare function renderChatComposerCursor(options: Pick<WelcomeLayoutOptions, 'width'>, inputLength: number): string;
150
+ /**
151
+ * Place the terminal cursor on the input row. Passing the layout's
152
+ * `composerTop` addresses the row absolutely, which stays correct when a
153
+ * queued-commands box grows the card; the relative form is the legacy path.
154
+ */
155
+ export declare function renderChatComposerCursor(options: Pick<WelcomeLayoutOptions, 'width'>, inputLength: number, composerTop?: number): string;
72
156
  export declare function navigateQuestionHistory(history: string[], direction: -1 | 1, index: number, draft: string): {
73
157
  input: string;
74
158
  index: number;
@@ -77,30 +161,154 @@ export declare function navigateQuestionHistory(history: string[], direction: -1
77
161
  export interface ChatActivity {
78
162
  /** Leading glyph: a spinner frame while the turn runs, a check when it settles. */
79
163
  glyph: string;
80
- /** What the agent is doing right now, for example `Running run_command`. */
164
+ /** What the agent is doing right now, for example `Editing src/app.ts`. */
81
165
  label: string;
166
+ /**
167
+ * The newest reasoning text, already collapsed to one line. Only the tail is
168
+ * painted — enough to show the model is working through something, without
169
+ * turning the status row into a transcript.
170
+ */
171
+ reasoning?: string;
172
+ /**
173
+ * Replaces the turn clock on the row. Used while waiting on the model, where
174
+ * "no output for 30s" says more than the total turn time.
175
+ */
176
+ elapsedLabel?: string;
82
177
  }
178
+ /** Silence before the row admits it is waiting on the model. */
179
+ export declare const WAIT_NOTICE_AFTER_MS = 10000;
180
+ /** How often that notice is refreshed while the wait continues. */
181
+ export declare const WAIT_NOTICE_REPEAT_MS = 20000;
182
+ export interface WaitNotice {
183
+ /** Phase label for the row. */
184
+ label: string;
185
+ /** Clock replacement; only set once the wait has been re-announced. */
186
+ elapsedLabel?: string;
187
+ }
188
+ /**
189
+ * What to say while the model has produced nothing.
190
+ *
191
+ * Silent for the first ten seconds — that is normal inference. After that the
192
+ * row says it is waiting, and re-announces every twenty seconds with the length
193
+ * of the silence, so a long wait never looks like a hung process. The bucket is
194
+ * quantised so the line changes on that cadence instead of every second.
195
+ */
196
+ export declare function describeWait(silentForMs: number): WaitNotice | undefined;
197
+ /**
198
+ * Elapsed time as a short label: `8s`, `1m 04s`.
199
+ *
200
+ * This replaced the step counter. `Step 1/25` was true for minutes at a time
201
+ * while one inference ran, so it measured the engine's internal loop rather
202
+ * than anything the person waiting could act on.
203
+ */
204
+ export declare function formatElapsed(seconds: number): string;
205
+ /**
206
+ * Shorten the middle of a label, keeping the head (the verb) and the tail (the
207
+ * filename, which is the part a person actually reads). Measured in terminal
208
+ * cells, not code units, so a CJK path cannot overflow the card.
209
+ */
210
+ export declare function elideMiddle(text: string, max: number): string;
211
+ /**
212
+ * Shorten the engine's progress sentence into a phase the user can follow.
213
+ *
214
+ * The status row is the only thing moving during a long, silent inference — the
215
+ * reasoning stream is deliberately not displayed — so it names what the agent is
216
+ * doing instead of repeating the step counter.
217
+ */
218
+ export declare function describeActivity(status: string): string;
219
+ /**
220
+ * Name the work a tool call is about to do, from its parameters.
221
+ *
222
+ * `Running read_file` told the person nothing they could not already see; the
223
+ * path does. This is the part of the status row that keeps moving during a long
224
+ * coding turn, so it carries the real target.
225
+ */
226
+ export declare function describeToolActivity(toolName: string, parameters?: Record<string, unknown>): string;
83
227
  /**
84
228
  * Update the fixed chat elapsed-time row without repainting the terminal.
85
229
  * With an activity, the row is a live "still running" indicator that stays
86
230
  * visible after text starts streaming and during silent tool execution.
87
231
  */
88
- export declare function renderChatThoughtTimeUpdate(thoughtTime: number, taskStep?: {
89
- step: number;
90
- maxSteps: number;
91
- }, width?: number, activity?: ChatActivity): string;
92
- export interface ChatAnswerPosition {
93
- row: number;
94
- column: number;
232
+ export declare function renderChatThoughtTimeUpdate(thoughtTime: number, width?: number, activity?: ChatActivity, row?: number): string;
233
+ /** One tool call in the live activity log. */
234
+ export interface ActivityEntry {
235
+ /** `⠼` while running, `✔` done, `✖` failed, `⊘` denied. */
236
+ glyph: string;
237
+ /** Already humanised: `Reading src/ui/welcome.ts`, not `read_file`. */
238
+ label: string;
239
+ tone: 'active' | 'done' | 'failed';
95
240
  }
241
+ /** Everything the live activity block needs for one frame. */
242
+ export interface ChatActivityBlock {
243
+ glyph: string;
244
+ label: string;
245
+ /** Newest reasoning tail, wrapped over as many rows as it can fill. */
246
+ reasoning?: string;
247
+ /** Replaces the turn clock while waiting on the model. */
248
+ elapsedLabel?: string;
249
+ /** Oldest first; the newest entry sits closest to the current phase. */
250
+ history?: ActivityEntry[];
251
+ }
252
+ /**
253
+ * Cells the transcript may use on this layout.
254
+ *
255
+ * The card has a 70-column floor, the terminal does not: on a narrow window the
256
+ * transcript still has to stop at the screen edge, not at the card's. Wrapping
257
+ * to the card width and painting anyway is what let a long row spill past the
258
+ * right border of the frame, so the wrap width is the narrower of the two and
259
+ * every row is clamped to it.
260
+ */
261
+ export declare function getChatTranscriptWidth(layout: ChatLayout): number;
96
262
  /**
97
- * Write one streamed fragment into the answer area without repainting the chat
98
- * frame. Wrapped lines return to `startColumn` so the answer keeps the same
99
- * columns as the composer card instead of stretching across the terminal.
263
+ * Rows of the live turn transcript: the activity log first, the answer after.
264
+ *
265
+ * This is the Cline model. Cline keeps one scrollable list where every action
266
+ * and every message is a row, the newest pinned to the bottom and the rest
267
+ * reachable by scrolling. Merging the two here is what fixes "the output
268
+ * becomes one line again": the activity log used to be a separate block that
269
+ * handed its rows back the moment the first token streamed, so a long fix
270
+ * explanation left nothing on screen but a single clipped status row — exactly
271
+ * when there was most to read.
272
+ *
273
+ * The log and the answer now share the window, so the record of what the agent
274
+ * did and the answer it produced are read in one place and scroll together.
100
275
  */
101
- export declare function renderChatAnswerDelta(delta: string, start: ChatAnswerPosition, width: number, startColumn?: number): ChatAnswerPosition & {
102
- sequence: string;
276
+ export declare function buildChatTranscriptRows(activity: ChatActivityBlock | undefined, answer: string, textWidth: number): {
277
+ rows: string[];
278
+ answerStart: number;
103
279
  };
280
+ /**
281
+ * Window the transcript around an offset, measured in rows scrolled up from the
282
+ * tail. `offset = 0` is the live view (newest rows). One row is reserved for
283
+ * the "earlier lines hidden" note whenever anything is above the window.
284
+ */
285
+ export declare function windowChatTranscriptAt(rows: readonly string[], maxRows: number, offsetFromBottom?: number): {
286
+ lines: string[];
287
+ hiddenAbove: number;
288
+ hiddenBelow: number;
289
+ };
290
+ /** Rows the transcript occupies for a layout; 0 when the viewport is tiny. */
291
+ export declare function getChatTranscriptRows(layout: ChatLayout): number;
292
+ /**
293
+ * Paint the pinned phase header on the status row.
294
+ *
295
+ * One row, always: the phase and its clock. Everything it used to squeeze into
296
+ * that row now lives in the transcript below it.
297
+ */
298
+ export declare function renderChatTranscriptHeader(activity: ChatActivityBlock, layout: ChatLayout, thoughtTime: number): string;
299
+ /**
300
+ * Repaint the transcript in place: exactly the rows the layout reserves,
301
+ * between the status row and the composer. The window scrolls (oldest rows
302
+ * leave first) instead of writing over the composer, so a long turn can never
303
+ * damage the bottom rows. The cursor is saved and restored, so the caller keeps
304
+ * its position on the input line.
305
+ *
306
+ * Unlike the answer window it replaced, this never gives its rows up: the log
307
+ * and the answer are one list, so the newest rows stay on screen and the rest
308
+ * is one PgUp away. Every row is clamped to the card in terminal cells, so a
309
+ * wide CJK glyph or a long path cannot push a row past the right border.
310
+ */
311
+ export declare function renderChatTranscriptWindow(activity: ChatActivityBlock | undefined, answer: string, layout: ChatLayout, offsetFromBottom?: number): string;
104
312
  export declare function renderFullWelcomeScreen(options: WelcomeLayoutOptions, height?: number): string;
105
313
  /** Keep the initial welcome screen centered as the terminal viewport changes. */
106
314
  export declare function getWelcomeBottomPadding(options: WelcomeLayoutOptions, height?: number): number;
@@ -117,60 +325,17 @@ export declare function renderExitMessage(message: string): string;
117
325
  * screen buffer, disable raw mode, fully clear the OS terminal, print the
118
326
  * farewell message, and terminate the process.
119
327
  */
120
- export declare function exitCleanly(message: string): never;
121
- export interface InteractiveTurnResult {
122
- text: string;
123
- mode: 'Plan' | 'Execute';
124
- autoApprove: boolean;
125
- workflowAction?: 'build';
126
- }
127
- export interface PromptInteractiveTurnOptions {
128
- model: string;
129
- getProviderName?: () => string | undefined;
130
- tokens: number;
131
- cost: string;
132
- usageAvailable?: boolean;
133
- usageEstimated?: boolean;
134
- workspace: string;
135
- version?: string;
136
- initialMode?: 'Plan' | 'Execute';
137
- initialAutoApprove?: boolean;
138
- isFirstTurn?: boolean;
139
- signal?: AbortSignal;
140
- /** Previous turn's question/answer — when question is set, render the full chat window (no logo). */
141
- chatQuestion?: string;
142
- chatAnswer?: string;
143
- chatThoughtTime?: number;
144
- chatTaskDone?: boolean;
145
- outputTokenRate?: number;
146
- tokenUsage?: UsageEvent;
147
- questionHistory?: string[];
148
- /**
149
- * Called when user selects a model via /model. Receives a `drawFrame`
150
- * callback that composites popup content as a floating layer on top of the
151
- * main TUI window (background stays as-is). The callback owns the selection
152
- * UI and returns the new model id, or undefined if cancelled.
153
- */
154
- onModelSelect?: (drawFrame: (popupLines: string[]) => void) => Promise<string | undefined>;
155
- /** Returns a queued prompt that should start immediately after a popup closes. */
156
- takeAutoContinuePrompt?: () => string | undefined;
157
- /** Called when user issues /connect. Returns the model label to display. */
158
- onConnect?: (drawFrame: (popupLines: string[]) => void) => Promise<string | undefined>;
159
- /** Called when user issues /clear so caller can reset conversation history. */
160
- onClear?: () => void;
161
- onExit?: () => string;
162
- onMcp?: (command: string, drawFrame: (popupLines: string[]) => void) => Promise<void>;
163
- onSession?: (command: string, drawFrame: (popupLines: string[]) => void) => Promise<void>;
164
- onQueue?: (command: string, drawFrame: (popupLines: string[]) => void) => Promise<void>;
165
- onBtw?: (command: string, drawFrame: (popupLines: string[], options?: {
166
- waitDismiss?: boolean;
167
- }) => void | Promise<void>, signal?: AbortSignal) => Promise<void>;
168
- onWorkflow?: (command: string, drawFrame: (popupLines: string[]) => void) => Promise<'build' | undefined>;
169
- onInit?: (drawFrame: (popupLines: string[]) => void) => Promise<void>;
170
- onMentionComplete?: (token: string) => Promise<string[]>;
171
- queuedCommands?: readonly string[];
172
- }
173
- export declare function promptInteractiveTurn(options: PromptInteractiveTurnOptions): Promise<InteractiveTurnResult>;
328
+ /**
329
+ * Exit Moderado cleanly: restore cursor visibility & style, leave the alternate
330
+ * screen buffer, disable raw mode, fully clear the OS terminal, print the
331
+ * farewell message, and let the process end.
332
+ *
333
+ * A hard `process.exit()` here would race the Windows console handle and, with
334
+ * an open undici pool, abort inside libuv (`win/async.c:94`). The farewell is
335
+ * written synchronously, connections are closed, and the returned promise never
336
+ * settles so callers stop while the event loop drains.
337
+ */
338
+ export declare function exitCleanly(message: string): Promise<never>;
174
339
  /** A cumulative task snapshot; a request ending does not mean the task ended. */
175
340
  export declare function formatTokenUsage(event: UsageEvent): string;
176
341
  /** Update only the chat status row, preserving the answer/composer cursor. */
@@ -1 +1 @@
1
- {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/ui/welcome.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"welcome.d.ts","sourceRoot":"","sources":["../../src/ui/welcome.ts"],"names":[],"mappings":"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"}