@wrongstack/tui 1.0.28 → 1.0.32

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.
@@ -0,0 +1,503 @@
1
+ import type { ContextSnapshot, DesignKitEntry, FleetChatVerbosity } from '@wrongstack/core/types';
2
+ import type { State } from './app-state.js';
3
+ import type { DraftEntry, QueueItem, ResumeSessionEntry, SlashCommandMatch } from './app-state-core-types.js';
4
+ import type { HistoryEntry } from './history-entry.js';
5
+ import type { HelpEntry, PluginPickerItem, ProjectPickerItem } from './ui-contracts.js';
6
+ export type AppActionRuntime = {
7
+ type: 'addEntry';
8
+ entry: DraftEntry;
9
+ } | {
10
+ type: 'archiveLoaded';
11
+ entries: HistoryEntry[];
12
+ } | {
13
+ type: 'startArchiveLoad';
14
+ } | {
15
+ type: 'compactHistory';
16
+ } | {
17
+ type: 'setBuffer';
18
+ buffer: string;
19
+ cursor: number;
20
+ } | {
21
+ type: 'clearInput';
22
+ } | {
23
+ type: 'bashModeEnter';
24
+ } | {
25
+ type: 'bashModeExit';
26
+ } | {
27
+ type: 'clearHistory';
28
+ model?: string | undefined;
29
+ provider?: string | undefined;
30
+ cwd?: string | undefined;
31
+ sessionId?: string | undefined;
32
+ /**
33
+ * Tells the reducer the boot-time restored transcript source has been
34
+ * discarded (e.g. by `/clear`). When explicitly `null` (not just
35
+ * omitted), the reducer resets the resume-derived state slice to the
36
+ * fresh values `createInitialState` would have produced with no
37
+ * restored entries: `historyBudget = undefined`, `autoProceedHold = false`,
38
+ * and `nextId` re-seeded from the surviving banner only. Pass
39
+ * `undefined` to leave the resume slice intact (existing behavior for
40
+ * `session.rewound` / `project.switched`).
41
+ */
42
+ restoredMessages?: readonly unknown[] | null | undefined;
43
+ restoredToolCalls?: readonly unknown[] | null | undefined;
44
+ restoredEvents?: readonly unknown[] | null | undefined;
45
+ /**
46
+ * Keep the checkpoint list. A rewind clears the screen but the
47
+ * checkpoints up to its target still belong to this conversation.
48
+ */
49
+ keepCheckpoints?: boolean | undefined;
50
+ } | {
51
+ type: 'streamDelta';
52
+ delta: string;
53
+ } | {
54
+ type: 'streamReset';
55
+ } | {
56
+ type: 'status';
57
+ status: State['status'];
58
+ } | {
59
+ type: 'interrupt';
60
+ } | {
61
+ type: 'resetInterrupts';
62
+ } | {
63
+ type: 'steerStart';
64
+ snapshot: State['steerSnapshot'];
65
+ } | {
66
+ type: 'steerConsume';
67
+ } | {
68
+ type: 'hint';
69
+ text: string;
70
+ } | {
71
+ type: 'copiedNotice';
72
+ text: string;
73
+ entryId: number | null;
74
+ } | {
75
+ type: 'inspectOverlayOpen';
76
+ entryId: number;
77
+ entryIds?: readonly number[] | undefined;
78
+ } | {
79
+ type: 'inspectOverlayClose';
80
+ } | {
81
+ type: 'inspectOverlayScroll';
82
+ delta: number;
83
+ } | {
84
+ type: 'chatSearchOpen';
85
+ query?: string | undefined;
86
+ includeReasoning: boolean;
87
+ } | {
88
+ type: 'chatSearchSetQuery';
89
+ query: string;
90
+ includeReasoning: boolean;
91
+ } | {
92
+ type: 'chatSearchStep';
93
+ delta: -1 | 1;
94
+ includeReasoning: boolean;
95
+ } | {
96
+ type: 'chatSearchClose';
97
+ } | {
98
+ type: 'messageJump';
99
+ direction: -1 | 1;
100
+ } | {
101
+ type: 'messageJumpClear';
102
+ } | {
103
+ type: 'pickerOpen';
104
+ query: string;
105
+ } | {
106
+ type: 'pickerClose';
107
+ } | {
108
+ type: 'pickerSetMatches';
109
+ query: string;
110
+ matches: string[];
111
+ } | {
112
+ type: 'pickerMove';
113
+ delta: number;
114
+ } | {
115
+ type: 'enqueue';
116
+ item: Omit<QueueItem, 'id'>;
117
+ } | {
118
+ type: 'dequeueFirst';
119
+ } | {
120
+ type: 'queueClear';
121
+ } | {
122
+ type: 'queueDelete';
123
+ positions: number[];
124
+ } | {
125
+ type: 'queueToggleRefine';
126
+ position: number;
127
+ } | {
128
+ type: 'slashPickerOpen';
129
+ query: string;
130
+ matches: SlashCommandMatch[];
131
+ } | {
132
+ type: 'slashPickerClose';
133
+ } | {
134
+ type: 'slashPickerMove';
135
+ delta: number;
136
+ } | {
137
+ type: 'designPickerOpen';
138
+ kits: DesignKitEntry[];
139
+ } | {
140
+ type: 'designPickerClose';
141
+ } | {
142
+ type: 'designPickerMove';
143
+ delta: number;
144
+ } | {
145
+ type: 'designPickerStack';
146
+ stack: string;
147
+ } | {
148
+ type: 'resumePickerOpen';
149
+ sessions: ResumeSessionEntry[];
150
+ } | {
151
+ type: 'resumePickerClose';
152
+ } | {
153
+ type: 'resumePickerMove';
154
+ delta: number;
155
+ } | {
156
+ type: 'resumePickerBusy';
157
+ on: boolean;
158
+ } | {
159
+ type: 'resumePickerHint';
160
+ text?: string | undefined;
161
+ } | {
162
+ type: 'resumePickerError';
163
+ text: string;
164
+ } | {
165
+ type: 'autoProceedRelease';
166
+ } | {
167
+ type: 'resumeLoadStart';
168
+ sessionId: string;
169
+ label: string;
170
+ } | {
171
+ type: 'resumeLoadTick';
172
+ sessionId?: string | undefined;
173
+ loadedBytes?: number | undefined;
174
+ totalBytes?: number | undefined;
175
+ /** Human-readable stage line to push onto the rolling log. */
176
+ note?: string | undefined;
177
+ } | {
178
+ type: 'resumeStreamChunk';
179
+ /**
180
+ * Session the chunk belongs to. Stamped by the runResume chain so the
181
+ * reducer can drop a SUPERSEDED run's terminating `done` chunk instead
182
+ * of settling the winning load with another session's transcript.
183
+ * Unstamped chunks keep legacy semantics.
184
+ */
185
+ sessionId?: string | undefined;
186
+ entries: HistoryEntry[];
187
+ /** Total entries in the replay, for the batch counter. */
188
+ total: number;
189
+ done?: boolean | undefined;
190
+ /** Keep input gated until replay effects and suggestion restoration settle. */
191
+ holdUntilSettled?: boolean | undefined;
192
+ /** Actual attached session metadata; absent for read-only replay. */
193
+ banner?: {
194
+ sessionId: string;
195
+ cwd?: string | undefined;
196
+ model?: string | undefined;
197
+ provider?: string | undefined;
198
+ } | undefined;
199
+ contextSnapshot?: ContextSnapshot | undefined;
200
+ } | {
201
+ type: 'resumeLoadAbort';
202
+ sessionId?: string | undefined;
203
+ } | {
204
+ type: 'replaceHistory';
205
+ entries: HistoryEntry[];
206
+ nextId: number;
207
+ /**
208
+ * Optional context-window snapshot forwarded from the host's
209
+ * `onResumeSession` return. When present, the reducer writes
210
+ * `tokens` to `state.leader.ctxTokens` and bumps
211
+ * `state.contextChipVersion` so the statusline chip and `/context`
212
+ * panel reflect the rebuilt context immediately, instead of staying
213
+ * at zero until the next ctx.pct event.
214
+ */
215
+ contextSnapshot?: ContextSnapshot | undefined;
216
+ } | {
217
+ type: 'pluginPickerOpen';
218
+ items?: PluginPickerItem[] | undefined;
219
+ } | {
220
+ type: 'pluginPickerClose';
221
+ } | {
222
+ type: 'pluginPickerMove';
223
+ delta: number;
224
+ } | {
225
+ type: 'pluginPickerSetItems';
226
+ items: PluginPickerItem[];
227
+ } | {
228
+ type: 'pluginPickerBusy';
229
+ busy: boolean;
230
+ } | {
231
+ type: 'pluginPickerHint';
232
+ text?: string | undefined;
233
+ } | {
234
+ type: 'helpOpen';
235
+ entries: HelpEntry[];
236
+ } | {
237
+ type: 'helpClose';
238
+ } | {
239
+ type: 'helpMove';
240
+ delta: number;
241
+ } | {
242
+ type: 'helpFilter';
243
+ filter: string;
244
+ } | {
245
+ type: 'helpHint';
246
+ text?: string | undefined;
247
+ } | {
248
+ type: 'helpScrollDetail';
249
+ delta: number;
250
+ } | {
251
+ type: 'projectPickerOpen';
252
+ items: ProjectPickerItem[];
253
+ } | {
254
+ type: 'projectPickerClose';
255
+ } | {
256
+ type: 'projectPickerMove';
257
+ delta: number;
258
+ } | {
259
+ type: 'projectPickerFilter';
260
+ filter: string;
261
+ } | {
262
+ type: 'projectPickerHint';
263
+ text?: string | undefined;
264
+ } | {
265
+ type: 'fKeyPickerOpen';
266
+ } | {
267
+ type: 'fKeyPickerClose';
268
+ } | {
269
+ type: 'fKeyPickerMove';
270
+ delta: number;
271
+ } | {
272
+ type: 'setInputHistory';
273
+ entries: string[];
274
+ } | {
275
+ type: 'clearInputHistory';
276
+ } | {
277
+ type: 'confirmOpen';
278
+ info: State['confirmQueue'][0];
279
+ } | {
280
+ type: 'confirmClose';
281
+ } | {
282
+ type: 'confirmResolved';
283
+ toolUseId: string;
284
+ } | {
285
+ type: 'confirmClearAll';
286
+ } | {
287
+ type: 'shellCommandWarningOpen';
288
+ info: NonNullable<State['shellCommandWarning']>;
289
+ } | {
290
+ type: 'shellCommandWarningClose';
291
+ } | {
292
+ type: 'enhanceOpen';
293
+ info: NonNullable<State['enhance']>;
294
+ } | {
295
+ type: 'enhanceClose';
296
+ } | {
297
+ type: 'enhanceSet';
298
+ enabled: boolean;
299
+ } | {
300
+ type: 'enhanceBusy';
301
+ on: boolean;
302
+ } | {
303
+ type: 'topicCheckBusy';
304
+ on: boolean;
305
+ } | {
306
+ type: 'refineCountdownOpen';
307
+ info: NonNullable<State['refineCountdown']>;
308
+ } | {
309
+ type: 'refineCountdownClose';
310
+ info?: NonNullable<State['refineCountdown']>;
311
+ } | {
312
+ type: 'refineFailureOpen';
313
+ info: NonNullable<State['refineFailure']>;
314
+ } | {
315
+ type: 'refineFailureClose';
316
+ } | {
317
+ type: 'continueConfirmOpen';
318
+ info: NonNullable<State['continueConfirm']>;
319
+ } | {
320
+ type: 'continueConfirmClose';
321
+ } | {
322
+ type: 'clearConfirmOpen';
323
+ info: NonNullable<State['clearConfirm']>;
324
+ } | {
325
+ type: 'clearConfirmSetValue';
326
+ value: string;
327
+ } | {
328
+ type: 'clearConfirmClose';
329
+ } | {
330
+ type: 'exitConfirmOpen';
331
+ info: NonNullable<State['exitConfirm']>;
332
+ } | {
333
+ type: 'exitConfirmClose';
334
+ } | {
335
+ type: 'slashConfirmOpen';
336
+ info: NonNullable<State['slashConfirm']>;
337
+ } | {
338
+ type: 'slashConfirmClose';
339
+ } | {
340
+ type: 'escConfirmOpen';
341
+ snapshot: NonNullable<State['steerSnapshot']>;
342
+ } | {
343
+ type: 'escConfirmClose';
344
+ } | {
345
+ type: 'fallbackOverlayOpen';
346
+ info: NonNullable<State['fallbackOverlay']>;
347
+ } | {
348
+ type: 'fallbackOverlayMove';
349
+ delta: number;
350
+ } | {
351
+ type: 'fallbackOverlayClose';
352
+ } | {
353
+ type: 'sendModePickerOpen';
354
+ info: NonNullable<State['sendModePicker']>;
355
+ } | {
356
+ type: 'sendModePickerMove';
357
+ delta: number;
358
+ } | {
359
+ type: 'sendModePickerClose';
360
+ } | {
361
+ type: 'resetContextChip';
362
+ } | {
363
+ type: 'leaderIterStart';
364
+ } | {
365
+ type: 'leaderIterEnd';
366
+ } | {
367
+ type: 'leaderToolStart';
368
+ name: string;
369
+ } | {
370
+ type: 'leaderToolEnd';
371
+ name: string;
372
+ ok?: boolean | undefined;
373
+ durationMs?: number | undefined;
374
+ } | {
375
+ type: 'leaderCtxPct';
376
+ load: number;
377
+ tokens: number;
378
+ maxContext: number;
379
+ } | {
380
+ type: 'setFleetChat';
381
+ mode: FleetChatVerbosity;
382
+ } | {
383
+ type: 'toggleMonitor';
384
+ } | {
385
+ type: 'toggleAgentsMonitor';
386
+ } | {
387
+ type: 'toggleHelp';
388
+ } | {
389
+ type: 'toggleTodosMonitor';
390
+ } | {
391
+ type: 'toggleQueuePanel';
392
+ } | {
393
+ type: 'checkpointReceived';
394
+ cp: State['checkpoints'][0];
395
+ } | {
396
+ type: 'rewindOverlayOpen';
397
+ selected?: number | undefined;
398
+ } | {
399
+ type: 'rewindOverlayClose';
400
+ } | {
401
+ type: 'checkpointFork';
402
+ promptIndex: number;
403
+ } | {
404
+ type: 'forkRequestDone';
405
+ } | {
406
+ type: 'rewindOverlayMove';
407
+ delta: number;
408
+ } | {
409
+ type: 'toggleSddBoardMonitor';
410
+ } | {
411
+ type: 'toggleWorktreeMonitor';
412
+ } | {
413
+ type: 'setHistoryScrolled';
414
+ scrolled: boolean;
415
+ } | {
416
+ type: 'setViewportRows';
417
+ rows: number;
418
+ } | {
419
+ type: 'toggleProcessList';
420
+ } | {
421
+ type: 'toggleCronMonitor';
422
+ } | {
423
+ type: 'toggleAuditPanel';
424
+ } | {
425
+ type: 'togglePlanPanel';
426
+ } | {
427
+ type: 'closeAllPanels';
428
+ } | {
429
+ type: 'toggleSidebarFocus';
430
+ } | {
431
+ type: 'sidebarScroll';
432
+ delta: number;
433
+ viewportHeight?: number | undefined;
434
+ /**
435
+ * Rows occupied by routed twin panels (Todos / Plan / Kanban / …)
436
+ * mounted above `SidebarContent` inside `RightSidebar`. Subtracted
437
+ * from `viewportHeight` so the scroll clamp matches the actual
438
+ * viewport the user can scroll through. Defaults to 0 (no twins
439
+ * mounted) when omitted so existing call sites stay correct.
440
+ */
441
+ sidebarTwinRowCount?: number | undefined;
442
+ /**
443
+ * Whether the swarm panel is on the sidebar using the effective
444
+ * source (picker draft when the picker is open, persisted
445
+ * `liveSettings` otherwise — see `app-view.tsx`). Drives the
446
+ * mission-queue reservation in `computeMaxSidebarScroll`; without
447
+ * this field the reducer only sees the picker draft and under-
448
+ * reserves the mission card when a config-only 'sidebar' swarm
449
+ * mode is persisted but the picker has never been opened.
450
+ */
451
+ effectiveSwarmOnSidebar?: boolean | undefined;
452
+ } | {
453
+ type: 'sidebarScrollReset';
454
+ } | {
455
+ type: 'sidebarScrollSet';
456
+ /** Absolute offset in rows from the content top; clamped to [0, max]. */
457
+ offset: number;
458
+ viewportHeight?: number | undefined;
459
+ /** See the `sidebarScroll` twin field — identical clamp semantics. */
460
+ sidebarTwinRowCount?: number | undefined;
461
+ /** See the `sidebarScroll` twin field — identical clamp semantics. */
462
+ effectiveSwarmOnSidebar?: boolean | undefined;
463
+ } | {
464
+ type: 'toggleKanbanPanel';
465
+ } | {
466
+ type: 'toggleGoalPanel';
467
+ } | {
468
+ type: 'toggleGoalKanbanPanel';
469
+ } | {
470
+ type: 'toggleContextPanel';
471
+ } | {
472
+ type: 'toggleConnectionsPanel';
473
+ } | {
474
+ type: 'toggleSessionsPanel';
475
+ } | {
476
+ type: 'debugStreamStats';
477
+ chunkCount: number;
478
+ lastChunkSize: number;
479
+ lastDeltaMs: number;
480
+ totalBytes: number;
481
+ lastChunkAt: string;
482
+ } | {
483
+ type: 'debugStreamStatsClear';
484
+ } | {
485
+ type: 'countdownTick';
486
+ remainingSeconds: number;
487
+ } | {
488
+ type: 'countdownEnded';
489
+ } | {
490
+ type: 'coordinatorEvent';
491
+ event: {
492
+ type: string;
493
+ goalId?: string | undefined;
494
+ taskId?: string | undefined;
495
+ knowledgeId?: string | undefined;
496
+ title?: string | undefined;
497
+ text?: string | undefined;
498
+ participants?: string[] | undefined;
499
+ };
500
+ } | {
501
+ type: 'toggleCoordinatorMonitor';
502
+ };
503
+ //# sourceMappingURL=app-action-runtime.d.ts.map
@@ -0,0 +1,175 @@
1
+ import type { SkillEntry } from '@wrongstack/core/types';
2
+ import type { ToolResultViewMode } from './settings-contracts.js';
3
+ import type { LiveSessionEntry, McpPickerItem, ModeOption, PromptPickEntry, ProviderOption, ResourceMenuAction, ResourceMenuSnapshot, ToolPickerItem } from './ui-contracts.js';
4
+ export type AppActionServices = {
5
+ type: 'toolStarted';
6
+ id: string;
7
+ name: string;
8
+ } | {
9
+ type: 'toolEnded';
10
+ id?: string | undefined;
11
+ name?: string | undefined;
12
+ } | {
13
+ type: 'toolStreamAppend';
14
+ toolUseId: string;
15
+ name: string;
16
+ text: string;
17
+ startedAt: number;
18
+ } | {
19
+ type: 'toolStreamClear';
20
+ toolUseId?: string | undefined;
21
+ name?: string | undefined;
22
+ } | {
23
+ type: 'modelPickerOpen';
24
+ providers: ProviderOption[];
25
+ purpose?: 'switch' | 'pick' | undefined;
26
+ title?: string | undefined;
27
+ } | {
28
+ type: 'modelPickerClose';
29
+ } | {
30
+ type: 'modelPickerMove';
31
+ delta: number;
32
+ } | {
33
+ type: 'modelPickerPickProvider';
34
+ providerId: string;
35
+ models: string[];
36
+ } | {
37
+ type: 'modelPickerBack';
38
+ } | {
39
+ type: 'modelPickerHint';
40
+ text?: string | undefined;
41
+ } | {
42
+ type: 'modelPickerSearch';
43
+ query: string;
44
+ } | {
45
+ type: 'modelPickerEffort';
46
+ delta: number;
47
+ } | {
48
+ type: 'skillPickerOpen';
49
+ entries: SkillEntry[];
50
+ mention?: import('@wrongstack/core/skill-mentions').SkillMention | undefined;
51
+ } | {
52
+ type: 'skillMentionResults';
53
+ entries: SkillEntry[];
54
+ hint?: string | undefined;
55
+ mention: import('@wrongstack/core/skill-mentions').SkillMention;
56
+ } | {
57
+ type: 'skillPickerClose';
58
+ } | {
59
+ type: 'skillPickerMove';
60
+ delta: number;
61
+ } | {
62
+ type: 'skillPickerHint';
63
+ text?: string | undefined;
64
+ } | {
65
+ type: 'resourceMenuOpen';
66
+ snapshot: ResourceMenuSnapshot;
67
+ } | {
68
+ type: 'resourceMenuClose';
69
+ } | {
70
+ type: 'resourceMenuMove';
71
+ delta: number;
72
+ } | {
73
+ type: 'resourceMenuHint';
74
+ text?: string | undefined;
75
+ } | {
76
+ type: 'resourceMenuFilter';
77
+ filter: string;
78
+ active: boolean;
79
+ } | {
80
+ type: 'resourceMenuConfirm';
81
+ action?: ResourceMenuAction | undefined;
82
+ } | {
83
+ type: 'modePickerOpen';
84
+ modes: ModeOption[];
85
+ } | {
86
+ type: 'modePickerClose';
87
+ } | {
88
+ type: 'modePickerMove';
89
+ delta: number;
90
+ } | {
91
+ type: 'modePickerHint';
92
+ text?: string | undefined;
93
+ } | {
94
+ type: 'promptPickerOpen';
95
+ all: PromptPickEntry[];
96
+ categories: string[];
97
+ recentSlugs: string[];
98
+ } | {
99
+ type: 'promptPickerClose';
100
+ } | {
101
+ type: 'promptPickerMove';
102
+ delta: number;
103
+ } | {
104
+ type: 'promptPickerCategory';
105
+ delta: number;
106
+ } | {
107
+ type: 'toolResultViewSet';
108
+ entryIds: readonly number[];
109
+ mode: ToolResultViewMode;
110
+ } | {
111
+ type: 'mcpPickerOpen';
112
+ items?: McpPickerItem[] | undefined;
113
+ } | {
114
+ type: 'mcpPickerClose';
115
+ } | {
116
+ type: 'mcpPickerMove';
117
+ delta: number;
118
+ } | {
119
+ type: 'mcpPickerSetItems';
120
+ items: McpPickerItem[];
121
+ } | {
122
+ type: 'mcpPickerBusy';
123
+ busy: boolean;
124
+ } | {
125
+ type: 'mcpPickerHint';
126
+ text?: string | undefined;
127
+ } | {
128
+ type: 'toolsPickerOpen';
129
+ items?: ToolPickerItem[] | undefined;
130
+ } | {
131
+ type: 'toolsPickerClose';
132
+ } | {
133
+ type: 'toolsPickerMove';
134
+ delta: number;
135
+ } | {
136
+ type: 'toolsPickerSetItems';
137
+ items: ToolPickerItem[];
138
+ } | {
139
+ type: 'toolsPickerToggle';
140
+ } | {
141
+ type: 'toolsPickerBusy';
142
+ busy: boolean;
143
+ } | {
144
+ type: 'toolsPickerHint';
145
+ text?: string | undefined;
146
+ } | {
147
+ type: 'toolsPickerFilter';
148
+ filter: string;
149
+ } | {
150
+ type: 'historyPush';
151
+ text: string;
152
+ } | {
153
+ type: 'historyUp';
154
+ } | {
155
+ type: 'historyDown';
156
+ } | {
157
+ type: 'sessionRewound';
158
+ toPromptIndex: number;
159
+ } | {
160
+ type: 'sessionsPanelSet';
161
+ sessions: LiveSessionEntry[];
162
+ } | {
163
+ type: 'sessionsPanelMove';
164
+ delta: number;
165
+ } | {
166
+ type: 'sessionsPanelBusy';
167
+ on: boolean;
168
+ } | {
169
+ type: 'sessionResumeConfirmSet';
170
+ sessionId: string;
171
+ sessionName: string;
172
+ } | {
173
+ type: 'sessionResumeConfirmClear';
174
+ };
175
+ //# sourceMappingURL=app-action-services.d.ts.map