@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.
- package/dist/app-action-runtime.d.ts +503 -0
- package/dist/app-action-services.d.ts +175 -0
- package/dist/app-action-settings.d.ts +331 -0
- package/dist/app-action-type.d.ts +5 -1430
- package/dist/app-action-workflows.d.ts +215 -0
- package/dist/app-main-column.d.ts +8 -0
- package/dist/app-settings-type.d.ts +1 -1
- package/dist/app-state.d.ts +11 -1
- package/dist/app-view-sidebar.d.ts +4 -1
- package/dist/components/history/tool-group.d.ts +0 -16
- package/dist/components/sidebar-content.d.ts +8 -1
- package/dist/components/sidebar-quota-model.d.ts +59 -0
- package/dist/components/sidebar-quota.d.ts +7 -0
- package/dist/components/status-bar-icons.d.ts +1 -0
- package/dist/components/status-bar-rails-common.d.ts +1 -1
- package/dist/components/status-bar-types.d.ts +1 -1
- package/dist/controller-props.d.ts +176 -0
- package/dist/hooks/use-provider-quota.d.ts +10 -0
- package/dist/hooks/use-resource-slash-commands.d.ts +5 -5
- package/dist/index.js +5546 -4871
- package/dist/reducers/settings-sidebar-hint.d.ts +8 -0
- package/dist/reducers/settings-value-actions.d.ts +8 -0
- package/dist/reducers/settings-value-cycle.d.ts +7 -0
- package/dist/reducers/settings-values.d.ts +2 -7
- package/dist/running-tools.d.ts +0 -4
- package/dist/ui-contracts.d.ts +10 -1
- package/dist/use-controller-panel-hooks.d.ts +62 -0
- package/package.json +7 -7
|
@@ -1,1434 +1,9 @@
|
|
|
1
|
-
import type {
|
|
2
|
-
import type {
|
|
3
|
-
import type {
|
|
4
|
-
import type {
|
|
5
|
-
|
|
6
|
-
import type { FleetEntry } from './app-state-fleet.js';
|
|
7
|
-
import type { AuthCatalogRow, AuthConfirmAction, AuthFormFieldId, AuthFormState, AuthLocalPresetRow, AuthPanelView, AuthProviderRow } from './auth-panel-model.js';
|
|
8
|
-
import type { BrainLogEntry, BrainRiskLevel } from './brain-contracts.js';
|
|
9
|
-
import type { BrainPanelSettings } from './brain-panel-model.js';
|
|
10
|
-
import type { StatuslineItem } from './components/statusline-picker.js';
|
|
11
|
-
import type { HistoryEntry } from './history-entry.js';
|
|
12
|
-
import type { AuditLevel, CacheTtl, CompactorStrategy, ContextMode, LogLevel, ReasoningEffort, SettingsMode, SettingsPickerPatch, StatuslineMode, ToolResultViewMode } from './settings-contracts.js';
|
|
13
|
-
import type { AutonomyOption, ChipMeta, HelpEntry, LiveSessionEntry, McpPickerItem, ModeOption, PluginPickerItem, ProjectPickerItem, PromptPickEntry, ProviderOption, ResourceMenuAction, ResourceMenuSnapshot, ShadowState, SubagentLaneView, SubagentRoleView, ToolPickerItem, WorktreeRow } from './ui-contracts.js';
|
|
14
|
-
export type Action = {
|
|
15
|
-
type: 'addEntry';
|
|
16
|
-
entry: DraftEntry;
|
|
17
|
-
} | {
|
|
18
|
-
type: 'archiveLoaded';
|
|
19
|
-
entries: HistoryEntry[];
|
|
20
|
-
} | {
|
|
21
|
-
type: 'startArchiveLoad';
|
|
22
|
-
} | {
|
|
23
|
-
type: 'compactHistory';
|
|
24
|
-
} | {
|
|
25
|
-
type: 'setBuffer';
|
|
26
|
-
buffer: string;
|
|
27
|
-
cursor: number;
|
|
28
|
-
} | {
|
|
29
|
-
type: 'clearInput';
|
|
30
|
-
}
|
|
31
|
-
/**
|
|
32
|
-
* Flip the composer into bash mode (`!` pressed on an empty draft): the
|
|
33
|
-
* input becomes a shell-command line and Enter runs it via the `!` path.
|
|
34
|
-
*/
|
|
35
|
-
| {
|
|
36
|
-
type: 'bashModeEnter';
|
|
37
|
-
}
|
|
38
|
-
/** Leave bash mode and restore the normal chat composer. */
|
|
39
|
-
| {
|
|
40
|
-
type: 'bashModeExit';
|
|
41
|
-
} | {
|
|
42
|
-
type: 'clearHistory';
|
|
43
|
-
model?: string | undefined;
|
|
44
|
-
provider?: string | undefined;
|
|
45
|
-
cwd?: string | undefined;
|
|
46
|
-
sessionId?: string | undefined;
|
|
47
|
-
/**
|
|
48
|
-
* Tells the reducer the boot-time restored transcript source has been
|
|
49
|
-
* discarded (e.g. by `/clear`). When explicitly `null` (not just
|
|
50
|
-
* omitted), the reducer resets the resume-derived state slice to the
|
|
51
|
-
* fresh values `createInitialState` would have produced with no
|
|
52
|
-
* restored entries: `historyBudget = undefined`, `autoProceedHold = false`,
|
|
53
|
-
* and `nextId` re-seeded from the surviving banner only. Pass
|
|
54
|
-
* `undefined` to leave the resume slice intact (existing behavior for
|
|
55
|
-
* `session.rewound` / `project.switched`).
|
|
56
|
-
*/
|
|
57
|
-
restoredMessages?: readonly unknown[] | null | undefined;
|
|
58
|
-
restoredToolCalls?: readonly unknown[] | null | undefined;
|
|
59
|
-
restoredEvents?: readonly unknown[] | null | undefined;
|
|
60
|
-
/**
|
|
61
|
-
* Keep the checkpoint list. A rewind clears the screen but the
|
|
62
|
-
* checkpoints up to its target still belong to this conversation.
|
|
63
|
-
*/
|
|
64
|
-
keepCheckpoints?: boolean | undefined;
|
|
65
|
-
} | {
|
|
66
|
-
type: 'streamDelta';
|
|
67
|
-
delta: string;
|
|
68
|
-
} | {
|
|
69
|
-
type: 'streamReset';
|
|
70
|
-
} | {
|
|
71
|
-
type: 'status';
|
|
72
|
-
status: State['status'];
|
|
73
|
-
} | {
|
|
74
|
-
type: 'interrupt';
|
|
75
|
-
} | {
|
|
76
|
-
type: 'resetInterrupts';
|
|
77
|
-
}
|
|
78
|
-
/**
|
|
79
|
-
* User pressed Esc mid-iteration — flag the next message for steering
|
|
80
|
-
* AND stash a context snapshot so the preamble can tell the model
|
|
81
|
-
* exactly what it was doing.
|
|
82
|
-
*/
|
|
83
|
-
| {
|
|
84
|
-
type: 'steerStart';
|
|
85
|
-
snapshot: State['steerSnapshot'];
|
|
86
|
-
}
|
|
87
|
-
/** Submit handler consumed the steering flag; reset. */
|
|
88
|
-
| {
|
|
89
|
-
type: 'steerConsume';
|
|
90
|
-
} | {
|
|
91
|
-
type: 'hint';
|
|
92
|
-
text: string;
|
|
93
|
-
} | {
|
|
94
|
-
type: 'copiedNotice';
|
|
95
|
-
text: string;
|
|
96
|
-
entryId: number | null;
|
|
97
|
-
} | {
|
|
98
|
-
type: 'inspectOverlayOpen';
|
|
99
|
-
entryId: number;
|
|
100
|
-
entryIds?: readonly number[] | undefined;
|
|
101
|
-
} | {
|
|
102
|
-
type: 'inspectOverlayClose';
|
|
103
|
-
} | {
|
|
104
|
-
type: 'inspectOverlayScroll';
|
|
105
|
-
delta: number;
|
|
106
|
-
}
|
|
107
|
-
/** Open the transcript search bar, optionally with a prefilled query. */
|
|
108
|
-
| {
|
|
109
|
-
type: 'chatSearchOpen';
|
|
110
|
-
query?: string | undefined;
|
|
111
|
-
includeReasoning: boolean;
|
|
112
|
-
} | {
|
|
113
|
-
type: 'chatSearchSetQuery';
|
|
114
|
-
query: string;
|
|
115
|
-
includeReasoning: boolean;
|
|
116
|
-
}
|
|
117
|
-
/** Move the selection: -1 = older match, +1 = newer match (wraps). */
|
|
118
|
-
| {
|
|
119
|
-
type: 'chatSearchStep';
|
|
120
|
-
delta: -1 | 1;
|
|
121
|
-
includeReasoning: boolean;
|
|
122
|
-
} | {
|
|
123
|
-
type: 'chatSearchClose';
|
|
124
|
-
}
|
|
125
|
-
/** Alt+↑ / Alt+↓: jump to the previous / next user message. */
|
|
126
|
-
| {
|
|
127
|
-
type: 'messageJump';
|
|
128
|
-
direction: -1 | 1;
|
|
129
|
-
} | {
|
|
130
|
-
type: 'messageJumpClear';
|
|
131
|
-
} | {
|
|
132
|
-
type: 'brainStatus';
|
|
133
|
-
state: State['brain']['state'];
|
|
134
|
-
source?: string | undefined;
|
|
135
|
-
risk?: State['brain']['risk'] | undefined;
|
|
136
|
-
summary?: string | undefined;
|
|
137
|
-
} | {
|
|
138
|
-
type: 'brainPromptSet';
|
|
139
|
-
prompt: NonNullable<State['brainPrompt']>;
|
|
140
|
-
} | {
|
|
141
|
-
type: 'brainPromptClear';
|
|
142
|
-
} | {
|
|
143
|
-
type: 'pickerOpen';
|
|
144
|
-
query: string;
|
|
145
|
-
} | {
|
|
146
|
-
type: 'pickerClose';
|
|
147
|
-
} | {
|
|
148
|
-
type: 'pickerSetMatches';
|
|
149
|
-
query: string;
|
|
150
|
-
matches: string[];
|
|
151
|
-
} | {
|
|
152
|
-
type: 'pickerMove';
|
|
153
|
-
delta: number;
|
|
154
|
-
} | {
|
|
155
|
-
type: 'toolStarted';
|
|
156
|
-
id: string;
|
|
157
|
-
name: string;
|
|
158
|
-
} | {
|
|
159
|
-
type: 'toolEnded';
|
|
160
|
-
id?: string | undefined;
|
|
161
|
-
name?: string | undefined;
|
|
162
|
-
} | {
|
|
163
|
-
type: 'toolStreamAppend';
|
|
164
|
-
toolUseId: string;
|
|
165
|
-
name: string;
|
|
166
|
-
text: string;
|
|
167
|
-
startedAt: number;
|
|
168
|
-
} | {
|
|
169
|
-
type: 'toolStreamClear';
|
|
170
|
-
toolUseId?: string | undefined;
|
|
171
|
-
name?: string | undefined;
|
|
172
|
-
} | {
|
|
173
|
-
type: 'enqueue';
|
|
174
|
-
item: Omit<QueueItem, 'id'>;
|
|
175
|
-
} | {
|
|
176
|
-
type: 'dequeueFirst';
|
|
177
|
-
} | {
|
|
178
|
-
type: 'queueClear';
|
|
179
|
-
} | {
|
|
180
|
-
type: 'queueDelete';
|
|
181
|
-
positions: number[];
|
|
182
|
-
} | {
|
|
183
|
-
type: 'queueToggleRefine';
|
|
184
|
-
position: number;
|
|
185
|
-
} | {
|
|
186
|
-
type: 'slashPickerOpen';
|
|
187
|
-
query: string;
|
|
188
|
-
matches: SlashCommandMatch[];
|
|
189
|
-
} | {
|
|
190
|
-
type: 'slashPickerClose';
|
|
191
|
-
} | {
|
|
192
|
-
type: 'slashPickerMove';
|
|
193
|
-
delta: number;
|
|
194
|
-
} | {
|
|
195
|
-
type: 'modelPickerOpen';
|
|
196
|
-
providers: ProviderOption[];
|
|
197
|
-
purpose?: 'switch' | 'pick' | undefined;
|
|
198
|
-
title?: string | undefined;
|
|
199
|
-
} | {
|
|
200
|
-
type: 'modelPickerClose';
|
|
201
|
-
} | {
|
|
202
|
-
type: 'modelPickerMove';
|
|
203
|
-
delta: number;
|
|
204
|
-
} | {
|
|
205
|
-
type: 'modelPickerPickProvider';
|
|
206
|
-
providerId: string;
|
|
207
|
-
models: string[];
|
|
208
|
-
} | {
|
|
209
|
-
type: 'modelPickerBack';
|
|
210
|
-
} | {
|
|
211
|
-
type: 'modelPickerHint';
|
|
212
|
-
text?: string | undefined;
|
|
213
|
-
}
|
|
214
|
-
/** Update the search filter in step 2. */
|
|
215
|
-
| {
|
|
216
|
-
type: 'modelPickerSearch';
|
|
217
|
-
query: string;
|
|
218
|
-
}
|
|
219
|
-
/** ←/→ on the focused model row: cycle its reasoning-effort choice. */
|
|
220
|
-
| {
|
|
221
|
-
type: 'modelPickerEffort';
|
|
222
|
-
delta: number;
|
|
223
|
-
}
|
|
224
|
-
/** Per-session subagent model lanes — opened by `/subagent-models`. */
|
|
225
|
-
| {
|
|
226
|
-
type: 'subagentModelsOpen';
|
|
227
|
-
lanes: SubagentLaneView[];
|
|
228
|
-
roles: SubagentRoleView[];
|
|
229
|
-
enabled: boolean;
|
|
230
|
-
lock: boolean;
|
|
231
|
-
followSessionModel: boolean;
|
|
232
|
-
sessionTarget: string;
|
|
233
|
-
} | {
|
|
234
|
-
type: 'subagentModelsClose';
|
|
235
|
-
} | {
|
|
236
|
-
type: 'subagentModelsMove';
|
|
237
|
-
delta: number;
|
|
238
|
-
} | {
|
|
239
|
-
type: 'subagentModelsUpdate';
|
|
240
|
-
lanes: SubagentLaneView[];
|
|
241
|
-
roles: SubagentRoleView[];
|
|
242
|
-
enabled: boolean;
|
|
243
|
-
lock: boolean;
|
|
244
|
-
followSessionModel: boolean;
|
|
245
|
-
sessionTarget: string;
|
|
246
|
-
} | {
|
|
247
|
-
type: 'subagentModelsHint';
|
|
248
|
-
text?: string | undefined;
|
|
249
|
-
} | {
|
|
250
|
-
type: 'autonomyPickerOpen';
|
|
251
|
-
options: AutonomyOption[];
|
|
252
|
-
} | {
|
|
253
|
-
type: 'autonomyPickerClose';
|
|
254
|
-
} | {
|
|
255
|
-
type: 'autonomyPickerMove';
|
|
256
|
-
delta: number;
|
|
257
|
-
} | {
|
|
258
|
-
type: 'autonomyPickerHint';
|
|
259
|
-
text?: string | undefined;
|
|
260
|
-
}
|
|
261
|
-
/** Theme picker — opened by `/theme`. Selecting a row swaps the palette and
|
|
262
|
-
* persists the choice via the ConfigStore bridge from the host. */
|
|
263
|
-
| {
|
|
264
|
-
type: 'themePickerOpen';
|
|
265
|
-
selected?: number;
|
|
266
|
-
} | {
|
|
267
|
-
type: 'themePickerClose';
|
|
268
|
-
} | {
|
|
269
|
-
type: 'themePickerMove';
|
|
270
|
-
delta: number;
|
|
271
|
-
} | {
|
|
272
|
-
type: 'themePickerHint';
|
|
273
|
-
text?: string | undefined;
|
|
274
|
-
} | {
|
|
275
|
-
type: 'themePickerFilter';
|
|
276
|
-
text: string;
|
|
277
|
-
} | {
|
|
278
|
-
type: 'themePickerFilterMode';
|
|
279
|
-
on: boolean;
|
|
280
|
-
} | {
|
|
281
|
-
type: 'themePickerPreview';
|
|
282
|
-
on: boolean;
|
|
283
|
-
} | {
|
|
284
|
-
type: 'themePickerUndo';
|
|
285
|
-
} | {
|
|
286
|
-
type: 'themePickerSwapPrevious';
|
|
287
|
-
} | {
|
|
288
|
-
type: 'skillPickerOpen';
|
|
289
|
-
entries: SkillEntry[];
|
|
290
|
-
mention?: import('@wrongstack/core/skill-mentions').SkillMention | undefined;
|
|
291
|
-
} | {
|
|
292
|
-
type: 'skillMentionResults';
|
|
293
|
-
entries: SkillEntry[];
|
|
294
|
-
hint?: string | undefined;
|
|
295
|
-
mention: import('@wrongstack/core/skill-mentions').SkillMention;
|
|
296
|
-
} | {
|
|
297
|
-
type: 'skillPickerClose';
|
|
298
|
-
} | {
|
|
299
|
-
type: 'skillPickerMove';
|
|
300
|
-
delta: number;
|
|
301
|
-
} | {
|
|
302
|
-
type: 'skillPickerHint';
|
|
303
|
-
text?: string | undefined;
|
|
304
|
-
} | {
|
|
305
|
-
type: 'resourceMenuOpen';
|
|
306
|
-
snapshot: ResourceMenuSnapshot;
|
|
307
|
-
} | {
|
|
308
|
-
type: 'resourceMenuClose';
|
|
309
|
-
} | {
|
|
310
|
-
type: 'resourceMenuMove';
|
|
311
|
-
delta: number;
|
|
312
|
-
} | {
|
|
313
|
-
type: 'resourceMenuHint';
|
|
314
|
-
text?: string | undefined;
|
|
315
|
-
} | {
|
|
316
|
-
type: 'resourceMenuFilter';
|
|
317
|
-
filter: string;
|
|
318
|
-
active: boolean;
|
|
319
|
-
} | {
|
|
320
|
-
type: 'resourceMenuConfirm';
|
|
321
|
-
action?: ResourceMenuAction | undefined;
|
|
322
|
-
} | {
|
|
323
|
-
type: 'modePickerOpen';
|
|
324
|
-
modes: ModeOption[];
|
|
325
|
-
} | {
|
|
326
|
-
type: 'modePickerClose';
|
|
327
|
-
} | {
|
|
328
|
-
type: 'modePickerMove';
|
|
329
|
-
delta: number;
|
|
330
|
-
} | {
|
|
331
|
-
type: 'modePickerHint';
|
|
332
|
-
text?: string | undefined;
|
|
333
|
-
} | {
|
|
334
|
-
type: 'designPickerOpen';
|
|
335
|
-
kits: DesignKitEntry[];
|
|
336
|
-
} | {
|
|
337
|
-
type: 'designPickerClose';
|
|
338
|
-
} | {
|
|
339
|
-
type: 'designPickerMove';
|
|
340
|
-
delta: number;
|
|
341
|
-
} | {
|
|
342
|
-
type: 'designPickerStack';
|
|
343
|
-
stack: string;
|
|
344
|
-
} | {
|
|
345
|
-
type: 'promptPickerOpen';
|
|
346
|
-
all: PromptPickEntry[];
|
|
347
|
-
categories: string[];
|
|
348
|
-
recentSlugs: string[];
|
|
349
|
-
} | {
|
|
350
|
-
type: 'promptPickerClose';
|
|
351
|
-
} | {
|
|
352
|
-
type: 'promptPickerMove';
|
|
353
|
-
delta: number;
|
|
354
|
-
} | {
|
|
355
|
-
type: 'promptPickerCategory';
|
|
356
|
-
delta: number;
|
|
357
|
-
} | {
|
|
358
|
-
type: 'resumePickerOpen';
|
|
359
|
-
sessions: ResumeSessionEntry[];
|
|
360
|
-
} | {
|
|
361
|
-
type: 'resumePickerClose';
|
|
362
|
-
} | {
|
|
363
|
-
type: 'resumePickerMove';
|
|
364
|
-
delta: number;
|
|
365
|
-
} | {
|
|
366
|
-
type: 'resumePickerBusy';
|
|
367
|
-
on: boolean;
|
|
368
|
-
} | {
|
|
369
|
-
type: 'resumePickerHint';
|
|
370
|
-
text?: string | undefined;
|
|
371
|
-
} | {
|
|
372
|
-
type: 'resumePickerError';
|
|
373
|
-
text: string;
|
|
374
|
-
}
|
|
375
|
-
/**
|
|
376
|
-
* Release the post-resume auto-proceed hold.
|
|
377
|
-
*
|
|
378
|
-
* Dispatched by the manual submit path only. The hold exists so a resumed
|
|
379
|
-
* session's restored todo board cannot arm an automatic turn before the user
|
|
380
|
-
* has done anything; sending a message IS that something.
|
|
381
|
-
*/
|
|
382
|
-
| {
|
|
383
|
-
type: 'autoProceedRelease';
|
|
384
|
-
}
|
|
385
|
-
/**
|
|
386
|
-
* Begin a `/resume`: wipe the screen to a clean slate (banner only, exactly
|
|
387
|
-
* like `/clear`) and put the live progress block in its place.
|
|
388
|
-
*
|
|
389
|
-
* The wipe is the point. Leaving the previous conversation on screen while a
|
|
390
|
-
* different one loaded meant the user could not tell whether anything was
|
|
391
|
-
* happening, or which session they were looking at once it did.
|
|
392
|
-
*/
|
|
393
|
-
| {
|
|
394
|
-
type: 'resumeLoadStart';
|
|
395
|
-
sessionId: string;
|
|
396
|
-
label: string;
|
|
397
|
-
}
|
|
398
|
-
/**
|
|
399
|
-
* Advance the progress block. Every field is optional so the same action
|
|
400
|
-
* serves the spinner ticker (nothing but a frame bump), the byte-progress
|
|
401
|
-
* sink, and the host's stage reports.
|
|
402
|
-
*
|
|
403
|
-
* `sessionId` attributes the tick to its runResume chain: after a
|
|
404
|
-
* cross-path start is rejected, the SUPERSEDED chain keeps ticking with the
|
|
405
|
-
* other session's byte counts, and the reducer drops those instead of
|
|
406
|
-
* mutating the winning load. Unstamped ticks keep legacy semantics.
|
|
407
|
-
*/
|
|
408
|
-
| {
|
|
409
|
-
type: 'resumeLoadTick';
|
|
410
|
-
sessionId?: string | undefined;
|
|
411
|
-
loadedBytes?: number | undefined;
|
|
412
|
-
totalBytes?: number | undefined;
|
|
413
|
-
/** Human-readable stage line to push onto the rolling log. */
|
|
414
|
-
note?: string | undefined;
|
|
415
|
-
}
|
|
416
|
-
/**
|
|
417
|
-
* Commit one batch of the replayed transcript.
|
|
418
|
-
*
|
|
419
|
-
* The first batch flips the phase and clears the progress block, so the
|
|
420
|
-
* transcript streams into a screen that holds nothing else. `done` finishes
|
|
421
|
-
* the resume and applies the context snapshot.
|
|
422
|
-
*/
|
|
423
|
-
| {
|
|
424
|
-
type: 'resumeStreamChunk';
|
|
425
|
-
/**
|
|
426
|
-
* Session the chunk belongs to. Stamped by the runResume chain so the
|
|
427
|
-
* reducer can drop a SUPERSEDED run's terminating `done` chunk instead
|
|
428
|
-
* of settling the winning load with another session's transcript.
|
|
429
|
-
* Unstamped chunks keep legacy semantics.
|
|
430
|
-
*/
|
|
431
|
-
sessionId?: string | undefined;
|
|
432
|
-
entries: HistoryEntry[];
|
|
433
|
-
/** Total entries in the replay, for the batch counter. */
|
|
434
|
-
total: number;
|
|
435
|
-
done?: boolean | undefined;
|
|
436
|
-
/** Keep input gated until replay effects and suggestion restoration settle. */
|
|
437
|
-
holdUntilSettled?: boolean | undefined;
|
|
438
|
-
/** Actual attached session metadata; absent for read-only replay. */
|
|
439
|
-
banner?: {
|
|
440
|
-
sessionId: string;
|
|
441
|
-
cwd?: string | undefined;
|
|
442
|
-
model?: string | undefined;
|
|
443
|
-
provider?: string | undefined;
|
|
444
|
-
} | undefined;
|
|
445
|
-
contextSnapshot?: ContextSnapshot | undefined;
|
|
446
|
-
}
|
|
447
|
-
/**
|
|
448
|
-
* Abandon an in-flight resume (failure, or a second resume superseding it).
|
|
449
|
-
* `sessionId` attributes the abort to its runResume chain: a SUPERSEDED
|
|
450
|
-
* chain's abort must not cancel the winning load. Unstamped aborts keep
|
|
451
|
-
* legacy semantics.
|
|
452
|
-
*/
|
|
453
|
-
| {
|
|
454
|
-
type: 'resumeLoadAbort';
|
|
455
|
-
sessionId?: string | undefined;
|
|
456
|
-
}
|
|
457
|
-
/** Replace all history entries with the given hydrated entries from a resumed session. */
|
|
458
|
-
| {
|
|
459
|
-
type: 'replaceHistory';
|
|
460
|
-
entries: HistoryEntry[];
|
|
461
|
-
nextId: number;
|
|
462
|
-
/**
|
|
463
|
-
* Optional context-window snapshot forwarded from the host's
|
|
464
|
-
* `onResumeSession` return. When present, the reducer writes
|
|
465
|
-
* `tokens` to `state.leader.ctxTokens` and bumps
|
|
466
|
-
* `state.contextChipVersion` so the statusline chip and `/context`
|
|
467
|
-
* panel reflect the rebuilt context immediately, instead of staying
|
|
468
|
-
* at zero until the next ctx.pct event.
|
|
469
|
-
*/
|
|
470
|
-
contextSnapshot?: ContextSnapshot | undefined;
|
|
471
|
-
} | {
|
|
472
|
-
type: 'settingsOpen';
|
|
473
|
-
mode: SettingsMode;
|
|
474
|
-
delayMs: number;
|
|
475
|
-
titleAnimation: boolean;
|
|
476
|
-
yolo: boolean;
|
|
477
|
-
fleetChat: FleetChatVerbosity;
|
|
478
|
-
chime: boolean;
|
|
479
|
-
confirmExit: boolean;
|
|
480
|
-
nextPrediction: boolean;
|
|
481
|
-
featureMcp: boolean;
|
|
482
|
-
featurePlugins: boolean;
|
|
483
|
-
featureMemory: boolean;
|
|
484
|
-
featureSkills: boolean;
|
|
485
|
-
featureModelsRegistry: boolean;
|
|
486
|
-
featureToolCoach: boolean;
|
|
487
|
-
tokenSavingTier: TokenSavingTier;
|
|
488
|
-
allowOutsideProjectRoot: boolean;
|
|
489
|
-
contextAutoCompact: boolean;
|
|
490
|
-
contextStrategy: CompactorStrategy;
|
|
491
|
-
contextMode: ContextMode;
|
|
492
|
-
maxConcurrent: number;
|
|
493
|
-
logLevel: LogLevel;
|
|
494
|
-
auditLevel: AuditLevel;
|
|
495
|
-
indexOnStart: boolean;
|
|
496
|
-
multiDiffSummaryThreshold: number;
|
|
497
|
-
/**
|
|
498
|
-
* Animation style for the working/thinking chip in the status bar.
|
|
499
|
-
* One of the renderable styles plus the meta-mode `'cycle'`. Persisted
|
|
500
|
-
* to disk on every ←/→ change in `/settings`.
|
|
501
|
-
*/
|
|
502
|
-
animationStyle: 'rainbow' | 'wave' | 'pulse' | 'dots' | 'breathe' | 'static' | 'cycle';
|
|
503
|
-
/**
|
|
504
|
-
* Persisted row index for where to land when the picker reopens.
|
|
505
|
-
* See `Settings.lastSettingsField`.
|
|
506
|
-
*/
|
|
507
|
-
lastSettingsField: number;
|
|
508
|
-
maxIterations: number;
|
|
509
|
-
autoProceedMaxIterations: number;
|
|
510
|
-
enhanceDelayMs: number;
|
|
511
|
-
enhanceEnabled: boolean;
|
|
512
|
-
enhanceLanguage: 'original' | 'english';
|
|
513
|
-
debugStream: boolean;
|
|
514
|
-
statuslineMode: StatuslineMode;
|
|
515
|
-
reasoningMode: 'auto' | 'on' | 'off';
|
|
516
|
-
reasoningEffort: ReasoningEffort;
|
|
517
|
-
/** Documented effort levels of the active model (absent = undocumented). */
|
|
518
|
-
reasoningEffortLevels?: string[] | undefined;
|
|
519
|
-
reasoningPreserve: boolean;
|
|
520
|
-
thinkingWord: string;
|
|
521
|
-
cacheTtl: CacheTtl;
|
|
522
|
-
configScope: 'global' | 'project';
|
|
523
|
-
breakerEnabled: boolean;
|
|
524
|
-
breakerAutoKillResetMs: number;
|
|
525
|
-
showModelReasoning: boolean;
|
|
526
|
-
toolResultViewMode: ToolResultViewMode;
|
|
527
|
-
showAgentSwarmPanel: import('./app-settings-type.js').AgentSwarmPanelMode;
|
|
528
|
-
showSidebar?: boolean | undefined;
|
|
529
|
-
panelPositions: import('./ui-contracts.js').PanelPositionMap;
|
|
530
|
-
readSymbols: boolean;
|
|
531
|
-
showSageMemoryInject: boolean;
|
|
532
|
-
sageMemoryInjectThreshold: number;
|
|
533
|
-
nextStepsTool: boolean;
|
|
534
|
-
/**
|
|
535
|
-
* WrongProxy / WrongTrace: master switch + configurable URL
|
|
536
|
-
* (default http://localhost:3444). Mirrors `Settings.wrongProxy*`
|
|
537
|
-
* and `SettingsPickerPatch.wrongProxy*`. Both fields land in
|
|
538
|
-
* the Integrations section of the picker; the runtime probe
|
|
539
|
-
* reads the values via the TUI settings adapter (see
|
|
540
|
-
* `packages/cli/boot/tui-settings-adapter.ts`).
|
|
541
|
-
*/
|
|
542
|
-
wrongProxyEnabled: boolean;
|
|
543
|
-
wrongProxyUrl: string;
|
|
544
|
-
} | {
|
|
545
|
-
type: 'settingsClose';
|
|
546
|
-
} | {
|
|
547
|
-
type: 'settingsFieldMove';
|
|
548
|
-
delta: number;
|
|
549
|
-
} | {
|
|
550
|
-
type: 'settingsFieldSet';
|
|
551
|
-
field: number;
|
|
552
|
-
} | {
|
|
553
|
-
type: 'settingsValueChange';
|
|
554
|
-
delta: number;
|
|
555
|
-
}
|
|
556
|
-
/**
|
|
557
|
-
* Set a settings value directly from a typed patch (used by the
|
|
558
|
-
* `/settings <chord> <value>` slash command). The patch is produced
|
|
559
|
-
* by `resolveSettingsFieldValue` in settings-picker.tsx and validated
|
|
560
|
-
* before dispatch, so the reducer just spreads it.
|
|
561
|
-
*/
|
|
562
|
-
| {
|
|
563
|
-
type: 'settingsValueSet';
|
|
564
|
-
patch: SettingsPickerPatch;
|
|
565
|
-
} | {
|
|
566
|
-
type: 'toolResultViewSet';
|
|
567
|
-
entryIds: readonly number[];
|
|
568
|
-
mode: ToolResultViewMode;
|
|
569
|
-
}
|
|
570
|
-
/**
|
|
571
|
-
* Update the live row-search filter. Empty string clears the filter.
|
|
572
|
-
* Setting any non-empty value while the filter is empty also implicitly
|
|
573
|
-
* activates filter mode (the picker renders only matching rows).
|
|
574
|
-
*/
|
|
575
|
-
| {
|
|
576
|
-
type: 'settingsFilterSet';
|
|
577
|
-
filter: string;
|
|
578
|
-
} | {
|
|
579
|
-
type: 'settingsHint';
|
|
580
|
-
text?: string | undefined;
|
|
581
|
-
}
|
|
582
|
-
/** Begin free-text editing of the thinking word (Enter on its row). */
|
|
583
|
-
| {
|
|
584
|
-
type: 'settingsThinkingEditStart';
|
|
585
|
-
}
|
|
586
|
-
/** Replace the in-progress thinking-word draft with the given buffer. */
|
|
587
|
-
| {
|
|
588
|
-
type: 'settingsThinkingEditChange';
|
|
589
|
-
draft: string;
|
|
590
|
-
}
|
|
591
|
-
/** Commit the draft as the new thinking word (validated in the reducer). */
|
|
592
|
-
| {
|
|
593
|
-
type: 'settingsThinkingEditCommit';
|
|
594
|
-
}
|
|
595
|
-
/** Discard the draft and leave edit mode without changing the word. */
|
|
596
|
-
| {
|
|
597
|
-
type: 'settingsThinkingEditCancel';
|
|
598
|
-
}
|
|
599
|
-
/** Begin free-text editing of the WrongProxy URL (Enter on its row). */
|
|
600
|
-
| {
|
|
601
|
-
type: 'settingsWrongProxyUrlEditStart';
|
|
602
|
-
}
|
|
603
|
-
/** Replace the in-progress WrongProxy URL draft with the given buffer. */
|
|
604
|
-
| {
|
|
605
|
-
type: 'settingsWrongProxyUrlEditChange';
|
|
606
|
-
draft: string;
|
|
607
|
-
}
|
|
608
|
-
/** Commit the draft as the new WrongProxy URL (validated in the reducer). */
|
|
609
|
-
| {
|
|
610
|
-
type: 'settingsWrongProxyUrlEditCommit';
|
|
611
|
-
}
|
|
612
|
-
/** Discard the draft and leave edit mode without changing the URL. */
|
|
613
|
-
| {
|
|
614
|
-
type: 'settingsWrongProxyUrlEditCancel';
|
|
615
|
-
} | {
|
|
616
|
-
type: 'statuslineOpen';
|
|
617
|
-
hiddenItems: StatuslineItem[];
|
|
618
|
-
lines?: StatuslineLines | undefined;
|
|
619
|
-
densities?: StatuslineDensities | undefined;
|
|
620
|
-
order?: StatuslineOrder | undefined;
|
|
621
|
-
} | {
|
|
622
|
-
type: 'statuslineClose';
|
|
623
|
-
} | {
|
|
624
|
-
type: 'statuslineFieldMove';
|
|
625
|
-
delta: number;
|
|
626
|
-
} | {
|
|
627
|
-
type: 'statuslineFieldSet';
|
|
628
|
-
field: number;
|
|
629
|
-
} | {
|
|
630
|
-
type: 'statuslineToggle';
|
|
631
|
-
item: StatuslineItem;
|
|
632
|
-
}
|
|
633
|
-
/** Move a chip to another rail (1-4). */
|
|
634
|
-
| {
|
|
635
|
-
type: 'statuslineSetLine';
|
|
636
|
-
item: StatuslineItem;
|
|
637
|
-
line: StatuslineLine;
|
|
638
|
-
}
|
|
639
|
-
/** Shift a chip one rail up/down, wrapping within 1-4. */
|
|
640
|
-
| {
|
|
641
|
-
type: 'statuslineMoveLine';
|
|
642
|
-
item: StatuslineItem;
|
|
643
|
-
delta: number;
|
|
644
|
-
}
|
|
645
|
-
/** Move a chip earlier/later within its effective rail. */
|
|
646
|
-
| {
|
|
647
|
-
type: 'statuslineMoveOrder';
|
|
648
|
-
item: StatuslineItem;
|
|
649
|
-
delta: number;
|
|
650
|
-
}
|
|
651
|
-
/** Cycle or set a chip's density pin (auto → full → short → micro). */
|
|
652
|
-
| {
|
|
653
|
-
type: 'statuslineSetDensity';
|
|
654
|
-
item: StatuslineItem;
|
|
655
|
-
density?: StatuslineDensity | undefined;
|
|
656
|
-
}
|
|
657
|
-
/** Turn every chip on the given rail on or off in one keystroke. */
|
|
658
|
-
| {
|
|
659
|
-
type: 'statuslineToggleLine';
|
|
660
|
-
line: StatuslineLine;
|
|
661
|
-
}
|
|
662
|
-
/** Restore default lines, order and densities (chip visibility untouched). */
|
|
663
|
-
| {
|
|
664
|
-
type: 'statuslineResetLayout';
|
|
665
|
-
}
|
|
666
|
-
/** Enter/leave `/` filter capture, or replace the filter text. */
|
|
667
|
-
| {
|
|
668
|
-
type: 'statuslineFilter';
|
|
669
|
-
text?: string | undefined;
|
|
670
|
-
filtering?: boolean | undefined;
|
|
671
|
-
} | {
|
|
672
|
-
type: 'statuslineHint';
|
|
673
|
-
text?: string | undefined;
|
|
674
|
-
}
|
|
675
|
-
/**
|
|
676
|
-
* A chip became visible due to data arriving (e.g., brain decision made,
|
|
677
|
-
* mailbox messages arrived). Adds it to visibleChips with optional expiration.
|
|
678
|
-
* If the chip is already in visibleChips, resets its shownAt timestamp.
|
|
679
|
-
*/
|
|
680
|
-
| {
|
|
681
|
-
type: 'statuslineChipShow';
|
|
682
|
-
key: StatuslineItem;
|
|
683
|
-
expiresIn?: number;
|
|
684
|
-
}
|
|
685
|
-
/**
|
|
686
|
-
* Immediately remove a chip from visibleChips. Used when a stream ends
|
|
687
|
-
* (brain, mailbox, enhance, debug_stream) so it disappears right away
|
|
688
|
-
* even if it hasn't expired yet.
|
|
689
|
-
*/
|
|
690
|
-
| {
|
|
691
|
-
type: 'statuslineChipExpire';
|
|
692
|
-
key: StatuslineItem;
|
|
693
|
-
}
|
|
694
|
-
/**
|
|
695
|
-
* Sync visibleChips from the parent (e.g., after /statusline reset).
|
|
696
|
-
* Replaces the entire visibleChips array.
|
|
697
|
-
*/
|
|
698
|
-
| {
|
|
699
|
-
type: 'statuslineVisibleChipsSync';
|
|
700
|
-
visibleChips: ChipMeta[];
|
|
701
|
-
} | {
|
|
702
|
-
type: 'pluginPickerOpen';
|
|
703
|
-
items?: PluginPickerItem[] | undefined;
|
|
704
|
-
} | {
|
|
705
|
-
type: 'pluginPickerClose';
|
|
706
|
-
} | {
|
|
707
|
-
type: 'pluginPickerMove';
|
|
708
|
-
delta: number;
|
|
709
|
-
} | {
|
|
710
|
-
type: 'pluginPickerSetItems';
|
|
711
|
-
items: PluginPickerItem[];
|
|
712
|
-
} | {
|
|
713
|
-
type: 'pluginPickerBusy';
|
|
714
|
-
busy: boolean;
|
|
715
|
-
} | {
|
|
716
|
-
type: 'pluginPickerHint';
|
|
717
|
-
text?: string | undefined;
|
|
718
|
-
} | {
|
|
719
|
-
type: 'mcpPickerOpen';
|
|
720
|
-
items?: McpPickerItem[] | undefined;
|
|
721
|
-
} | {
|
|
722
|
-
type: 'mcpPickerClose';
|
|
723
|
-
} | {
|
|
724
|
-
type: 'mcpPickerMove';
|
|
725
|
-
delta: number;
|
|
726
|
-
} | {
|
|
727
|
-
type: 'mcpPickerSetItems';
|
|
728
|
-
items: McpPickerItem[];
|
|
729
|
-
} | {
|
|
730
|
-
type: 'mcpPickerBusy';
|
|
731
|
-
busy: boolean;
|
|
732
|
-
} | {
|
|
733
|
-
type: 'mcpPickerHint';
|
|
734
|
-
text?: string | undefined;
|
|
735
|
-
} | {
|
|
736
|
-
type: 'toolsPickerOpen';
|
|
737
|
-
items?: ToolPickerItem[] | undefined;
|
|
738
|
-
} | {
|
|
739
|
-
type: 'toolsPickerClose';
|
|
740
|
-
} | {
|
|
741
|
-
type: 'toolsPickerMove';
|
|
742
|
-
delta: number;
|
|
743
|
-
} | {
|
|
744
|
-
type: 'toolsPickerSetItems';
|
|
745
|
-
items: ToolPickerItem[];
|
|
746
|
-
} | {
|
|
747
|
-
type: 'toolsPickerToggle';
|
|
748
|
-
} | {
|
|
749
|
-
type: 'toolsPickerBusy';
|
|
750
|
-
busy: boolean;
|
|
751
|
-
} | {
|
|
752
|
-
type: 'toolsPickerHint';
|
|
753
|
-
text?: string | undefined;
|
|
754
|
-
} | {
|
|
755
|
-
type: 'toolsPickerFilter';
|
|
756
|
-
filter: string;
|
|
757
|
-
} | {
|
|
758
|
-
type: 'brainOpen';
|
|
759
|
-
riskLevel: BrainRiskLevel;
|
|
760
|
-
log: BrainLogEntry[];
|
|
761
|
-
settings?: BrainPanelSettings | undefined;
|
|
762
|
-
} | {
|
|
763
|
-
type: 'brainClose';
|
|
764
|
-
} | {
|
|
765
|
-
type: 'brainMove';
|
|
766
|
-
delta: number;
|
|
767
|
-
} | {
|
|
768
|
-
type: 'brainRiskChange';
|
|
769
|
-
delta: number;
|
|
770
|
-
} | {
|
|
771
|
-
type: 'brainSetLog';
|
|
772
|
-
log: BrainLogEntry[];
|
|
773
|
-
} | {
|
|
774
|
-
type: 'brainHint';
|
|
775
|
-
text?: string | undefined;
|
|
776
|
-
} | {
|
|
777
|
-
type: 'brainSettingsLoaded';
|
|
778
|
-
settings: BrainPanelSettings;
|
|
779
|
-
} | {
|
|
780
|
-
type: 'brainView';
|
|
781
|
-
view: 'settings' | 'log';
|
|
782
|
-
} | {
|
|
783
|
-
type: 'brainRowMove';
|
|
784
|
-
delta: number;
|
|
785
|
-
} | {
|
|
786
|
-
type: 'brainBusy';
|
|
787
|
-
busy: boolean;
|
|
788
|
-
} | {
|
|
789
|
-
type: 'helpOpen';
|
|
790
|
-
entries: HelpEntry[];
|
|
791
|
-
} | {
|
|
792
|
-
type: 'helpClose';
|
|
793
|
-
} | {
|
|
794
|
-
type: 'helpMove';
|
|
795
|
-
delta: number;
|
|
796
|
-
} | {
|
|
797
|
-
type: 'helpFilter';
|
|
798
|
-
filter: string;
|
|
799
|
-
} | {
|
|
800
|
-
type: 'helpHint';
|
|
801
|
-
text?: string | undefined;
|
|
802
|
-
} | {
|
|
803
|
-
type: 'helpScrollDetail';
|
|
804
|
-
delta: number;
|
|
805
|
-
} | {
|
|
806
|
-
type: 'shadowOpen';
|
|
807
|
-
shadow: ShadowState;
|
|
808
|
-
} | {
|
|
809
|
-
type: 'shadowClose';
|
|
810
|
-
} | {
|
|
811
|
-
type: 'shadowUpdate';
|
|
812
|
-
shadow: ShadowState;
|
|
813
|
-
} | {
|
|
814
|
-
type: 'shadowHint';
|
|
815
|
-
text?: string | undefined;
|
|
816
|
-
} | {
|
|
817
|
-
type: 'authOpen';
|
|
818
|
-
view?: Extract<AuthPanelView, 'list' | 'oauth'> | undefined;
|
|
819
|
-
providers?: AuthProviderRow[] | undefined;
|
|
820
|
-
presets?: AuthLocalPresetRow[] | undefined;
|
|
821
|
-
oauthStrategies?: import('./auth-panel-model.js').AuthOAuthStrategyRow[] | undefined;
|
|
822
|
-
} | {
|
|
823
|
-
type: 'authClose';
|
|
824
|
-
} | {
|
|
825
|
-
type: 'authProviders';
|
|
826
|
-
providers: AuthProviderRow[];
|
|
827
|
-
} | {
|
|
828
|
-
type: 'authCatalog';
|
|
829
|
-
catalog: AuthCatalogRow[];
|
|
830
|
-
} | {
|
|
831
|
-
type: 'authView';
|
|
832
|
-
view: AuthPanelView;
|
|
833
|
-
providerId?: string | undefined;
|
|
834
|
-
} | {
|
|
835
|
-
type: 'authMove';
|
|
836
|
-
delta: number;
|
|
837
|
-
} | {
|
|
838
|
-
type: 'authBusy';
|
|
839
|
-
busy: boolean;
|
|
840
|
-
} | {
|
|
841
|
-
type: 'authHint';
|
|
842
|
-
text?: string | undefined;
|
|
843
|
-
} | {
|
|
844
|
-
type: 'authFilter';
|
|
845
|
-
filter: string;
|
|
846
|
-
} | {
|
|
847
|
-
type: 'authFlowStart';
|
|
848
|
-
title: string;
|
|
849
|
-
} | {
|
|
850
|
-
type: 'authFlowLog';
|
|
851
|
-
line: string;
|
|
852
|
-
} | {
|
|
853
|
-
type: 'authFlowDone';
|
|
854
|
-
ok: boolean;
|
|
855
|
-
message?: string | undefined;
|
|
856
|
-
} | {
|
|
857
|
-
type: 'authPromptStart';
|
|
858
|
-
label: string;
|
|
859
|
-
masked: boolean;
|
|
860
|
-
} | {
|
|
861
|
-
type: 'authPromptChange';
|
|
862
|
-
draft: string;
|
|
863
|
-
} | {
|
|
864
|
-
type: 'authPromptEnd';
|
|
865
|
-
} | {
|
|
866
|
-
type: 'authConfirmStart';
|
|
867
|
-
question: string;
|
|
868
|
-
action: AuthConfirmAction;
|
|
869
|
-
} | {
|
|
870
|
-
type: 'authConfirmEnd';
|
|
871
|
-
} | {
|
|
872
|
-
type: 'authFormStart';
|
|
873
|
-
form: AuthFormState;
|
|
874
|
-
} | {
|
|
875
|
-
type: 'authFormChange';
|
|
876
|
-
field: AuthFormFieldId;
|
|
877
|
-
value: string;
|
|
878
|
-
} | {
|
|
879
|
-
type: 'authFormCancel';
|
|
880
|
-
} | {
|
|
881
|
-
type: 'projectPickerOpen';
|
|
882
|
-
items: ProjectPickerItem[];
|
|
883
|
-
} | {
|
|
884
|
-
type: 'projectPickerClose';
|
|
885
|
-
} | {
|
|
886
|
-
type: 'projectPickerMove';
|
|
887
|
-
delta: number;
|
|
888
|
-
} | {
|
|
889
|
-
type: 'projectPickerFilter';
|
|
890
|
-
filter: string;
|
|
891
|
-
} | {
|
|
892
|
-
type: 'projectPickerHint';
|
|
893
|
-
text?: string | undefined;
|
|
894
|
-
} | {
|
|
895
|
-
type: 'fKeyPickerOpen';
|
|
896
|
-
} | {
|
|
897
|
-
type: 'fKeyPickerClose';
|
|
898
|
-
} | {
|
|
899
|
-
type: 'fKeyPickerMove';
|
|
900
|
-
delta: number;
|
|
901
|
-
} | {
|
|
902
|
-
type: 'historyPush';
|
|
903
|
-
text: string;
|
|
904
|
-
} | {
|
|
905
|
-
type: 'historyUp';
|
|
906
|
-
} | {
|
|
907
|
-
type: 'historyDown';
|
|
908
|
-
} | {
|
|
909
|
-
type: 'setInputHistory';
|
|
910
|
-
entries: string[];
|
|
911
|
-
} | {
|
|
912
|
-
type: 'clearInputHistory';
|
|
913
|
-
} | {
|
|
914
|
-
type: 'confirmOpen';
|
|
915
|
-
info: State['confirmQueue'][0];
|
|
916
|
-
} | {
|
|
917
|
-
type: 'confirmClose';
|
|
918
|
-
} | {
|
|
919
|
-
type: 'confirmResolved';
|
|
920
|
-
toolUseId: string;
|
|
921
|
-
} | {
|
|
922
|
-
type: 'confirmClearAll';
|
|
923
|
-
} | {
|
|
924
|
-
type: 'shellCommandWarningOpen';
|
|
925
|
-
info: NonNullable<State['shellCommandWarning']>;
|
|
926
|
-
} | {
|
|
927
|
-
type: 'shellCommandWarningClose';
|
|
928
|
-
} | {
|
|
929
|
-
type: 'enhanceOpen';
|
|
930
|
-
info: NonNullable<State['enhance']>;
|
|
931
|
-
} | {
|
|
932
|
-
type: 'enhanceClose';
|
|
933
|
-
} | {
|
|
934
|
-
type: 'enhanceSet';
|
|
935
|
-
enabled: boolean;
|
|
936
|
-
} | {
|
|
937
|
-
type: 'enhanceBusy';
|
|
938
|
-
on: boolean;
|
|
939
|
-
} | {
|
|
940
|
-
type: 'topicCheckBusy';
|
|
941
|
-
on: boolean;
|
|
942
|
-
} | {
|
|
943
|
-
type: 'refineCountdownOpen';
|
|
944
|
-
info: NonNullable<State['refineCountdown']>;
|
|
945
|
-
}
|
|
946
|
-
/**
|
|
947
|
-
* `info` scopes the close to the countdown the caller opened. A refine flow
|
|
948
|
-
* that was superseded by a newer countdown must not tear the newer one down
|
|
949
|
-
* when it finally unwinds; omitting `info` closes unconditionally.
|
|
950
|
-
*/
|
|
951
|
-
| {
|
|
952
|
-
type: 'refineCountdownClose';
|
|
953
|
-
info?: NonNullable<State['refineCountdown']>;
|
|
954
|
-
} | {
|
|
955
|
-
type: 'refineFailureOpen';
|
|
956
|
-
info: NonNullable<State['refineFailure']>;
|
|
957
|
-
} | {
|
|
958
|
-
type: 'refineFailureClose';
|
|
959
|
-
} | {
|
|
960
|
-
type: 'continueConfirmOpen';
|
|
961
|
-
info: NonNullable<State['continueConfirm']>;
|
|
962
|
-
} | {
|
|
963
|
-
type: 'continueConfirmClose';
|
|
964
|
-
} | {
|
|
965
|
-
type: 'bugHuntContinueOpen';
|
|
966
|
-
info: NonNullable<State['bugHuntContinue']>;
|
|
967
|
-
} | {
|
|
968
|
-
type: 'bugHuntContinueClose';
|
|
969
|
-
} | {
|
|
970
|
-
type: 'bugHuntRunningOpen';
|
|
971
|
-
info: NonNullable<State['bugHuntRunning']>;
|
|
972
|
-
} | {
|
|
973
|
-
type: 'bugHuntRunningClose';
|
|
974
|
-
} | {
|
|
975
|
-
type: 'clearConfirmOpen';
|
|
976
|
-
info: NonNullable<State['clearConfirm']>;
|
|
977
|
-
} | {
|
|
978
|
-
type: 'clearConfirmSetValue';
|
|
979
|
-
value: string;
|
|
980
|
-
} | {
|
|
981
|
-
type: 'clearConfirmClose';
|
|
982
|
-
} | {
|
|
983
|
-
type: 'exitConfirmOpen';
|
|
984
|
-
info: NonNullable<State['exitConfirm']>;
|
|
985
|
-
} | {
|
|
986
|
-
type: 'exitConfirmClose';
|
|
987
|
-
} | {
|
|
988
|
-
type: 'slashConfirmOpen';
|
|
989
|
-
info: NonNullable<State['slashConfirm']>;
|
|
990
|
-
} | {
|
|
991
|
-
type: 'slashConfirmClose';
|
|
992
|
-
}
|
|
993
|
-
/**
|
|
994
|
-
* Open the ESC-interrupt confirmation dialog with a context snapshot.
|
|
995
|
-
* Fired when Esc is pressed mid-iteration and `confirmExit` is enabled.
|
|
996
|
-
* The snapshot is replayed into `steerStart` on confirmation so the
|
|
997
|
-
* STEERING preamble can describe the interrupted state to the LLM.
|
|
998
|
-
*/
|
|
999
|
-
| {
|
|
1000
|
-
type: 'escConfirmOpen';
|
|
1001
|
-
snapshot: NonNullable<State['steerSnapshot']>;
|
|
1002
|
-
}
|
|
1003
|
-
/** Dismiss the ESC-interrupt confirmation (user cancelled). */
|
|
1004
|
-
| {
|
|
1005
|
-
type: 'escConfirmClose';
|
|
1006
|
-
}
|
|
1007
|
-
/** Open the fallback model overlay (provider.fallback_pending received). */
|
|
1008
|
-
| {
|
|
1009
|
-
type: 'fallbackOverlayOpen';
|
|
1010
|
-
info: NonNullable<State['fallbackOverlay']>;
|
|
1011
|
-
}
|
|
1012
|
-
/** Move the fallback overlay selection (wraps). */
|
|
1013
|
-
| {
|
|
1014
|
-
type: 'fallbackOverlayMove';
|
|
1015
|
-
delta: number;
|
|
1016
|
-
}
|
|
1017
|
-
/** Close the fallback overlay (choice made or auto-switched). */
|
|
1018
|
-
| {
|
|
1019
|
-
type: 'fallbackOverlayClose';
|
|
1020
|
-
}
|
|
1021
|
-
/** Open the mid-run send-mode picker with the resolved message + resolver. */
|
|
1022
|
-
| {
|
|
1023
|
-
type: 'sendModePickerOpen';
|
|
1024
|
-
info: NonNullable<State['sendModePicker']>;
|
|
1025
|
-
}
|
|
1026
|
-
/** Move the send-mode highlight (wraps). */
|
|
1027
|
-
| {
|
|
1028
|
-
type: 'sendModePickerMove';
|
|
1029
|
-
delta: number;
|
|
1030
|
-
}
|
|
1031
|
-
/** Close the send-mode picker. */
|
|
1032
|
-
| {
|
|
1033
|
-
type: 'sendModePickerClose';
|
|
1034
|
-
} | {
|
|
1035
|
-
type: 'resetContextChip';
|
|
1036
|
-
} | {
|
|
1037
|
-
type: 'fleetSeed';
|
|
1038
|
-
entries: FleetEntry[];
|
|
1039
|
-
cost: number;
|
|
1040
|
-
} | {
|
|
1041
|
-
type: 'fleetSpawn';
|
|
1042
|
-
id: string;
|
|
1043
|
-
name?: string | undefined;
|
|
1044
|
-
provider?: string | undefined;
|
|
1045
|
-
model?: string | undefined;
|
|
1046
|
-
transcriptPath?: string | undefined;
|
|
1047
|
-
} | {
|
|
1048
|
-
type: 'fleetStart';
|
|
1049
|
-
id: string;
|
|
1050
|
-
taskId?: string | undefined;
|
|
1051
|
-
} | {
|
|
1052
|
-
type: 'fleetDelta';
|
|
1053
|
-
id: string;
|
|
1054
|
-
text: string;
|
|
1055
|
-
} | {
|
|
1056
|
-
type: 'fleetMessage';
|
|
1057
|
-
id: string;
|
|
1058
|
-
text: string;
|
|
1059
|
-
} | {
|
|
1060
|
-
type: 'fleetTool';
|
|
1061
|
-
id: string;
|
|
1062
|
-
name?: string | undefined;
|
|
1063
|
-
ok?: boolean | undefined;
|
|
1064
|
-
durationMs?: number | undefined;
|
|
1065
|
-
outputBytes?: number | undefined;
|
|
1066
|
-
outputLines?: number | undefined;
|
|
1067
|
-
}
|
|
1068
|
-
/** tool.started: pin the current tool name for status display. */
|
|
1069
|
-
| {
|
|
1070
|
-
type: 'fleetToolStart';
|
|
1071
|
-
id: string;
|
|
1072
|
-
name: string;
|
|
1073
|
-
}
|
|
1074
|
-
/** tool.executed: clear the current tool (paired with fleetTool). */
|
|
1075
|
-
| {
|
|
1076
|
-
type: 'fleetToolEnd';
|
|
1077
|
-
id: string;
|
|
1078
|
-
} | {
|
|
1079
|
-
type: 'fleetUsage';
|
|
1080
|
-
id: string;
|
|
1081
|
-
input: number;
|
|
1082
|
-
output: number;
|
|
1083
|
-
cacheRead: number;
|
|
1084
|
-
cacheWrite: number;
|
|
1085
|
-
} | {
|
|
1086
|
-
type: 'fleetDone';
|
|
1087
|
-
id: string;
|
|
1088
|
-
status: FleetEntry['status'];
|
|
1089
|
-
iterations: number;
|
|
1090
|
-
toolCalls: number;
|
|
1091
|
-
/** Human-readable failure reason, e.g. "provider_auth", "rate_limit", "timeout". */
|
|
1092
|
-
failureReason?: string | undefined;
|
|
1093
|
-
} | {
|
|
1094
|
-
type: 'fleetRemove';
|
|
1095
|
-
id: string;
|
|
1096
|
-
} | {
|
|
1097
|
-
type: 'fleetBudgetWarning';
|
|
1098
|
-
id: string;
|
|
1099
|
-
kind: string;
|
|
1100
|
-
used: number;
|
|
1101
|
-
limit: number;
|
|
1102
|
-
} | {
|
|
1103
|
-
type: 'fleetBudgetExtended';
|
|
1104
|
-
id: string;
|
|
1105
|
-
totalExtensions: number;
|
|
1106
|
-
} | {
|
|
1107
|
-
type: 'fleetCtxPct';
|
|
1108
|
-
id: string;
|
|
1109
|
-
load: number;
|
|
1110
|
-
tokens: number;
|
|
1111
|
-
maxContext: number;
|
|
1112
|
-
/** Estimated USD cost of the context tokens (optional — computed when pricing known). */
|
|
1113
|
-
ctxCost?: number | undefined;
|
|
1114
|
-
} | {
|
|
1115
|
-
type: 'fleetCost';
|
|
1116
|
-
cost: number;
|
|
1117
|
-
input?: number | undefined;
|
|
1118
|
-
output?: number | undefined;
|
|
1119
|
-
/** Per-subagent usage keyed by subagent id (from the director snapshot). */
|
|
1120
|
-
perAgent?: Record<string, {
|
|
1121
|
-
cost: number;
|
|
1122
|
-
}>;
|
|
1123
|
-
}
|
|
1124
|
-
/** Runtime concurrency ceiling change from CLI /fleet concurrency <n>. */
|
|
1125
|
-
| {
|
|
1126
|
-
type: 'fleetConcurrency';
|
|
1127
|
-
n: number;
|
|
1128
|
-
} | {
|
|
1129
|
-
type: 'leaderIterStart';
|
|
1130
|
-
} | {
|
|
1131
|
-
type: 'leaderIterEnd';
|
|
1132
|
-
} | {
|
|
1133
|
-
type: 'leaderToolStart';
|
|
1134
|
-
name: string;
|
|
1135
|
-
} | {
|
|
1136
|
-
type: 'leaderToolEnd';
|
|
1137
|
-
name: string;
|
|
1138
|
-
ok?: boolean | undefined;
|
|
1139
|
-
durationMs?: number | undefined;
|
|
1140
|
-
} | {
|
|
1141
|
-
type: 'leaderCtxPct';
|
|
1142
|
-
load: number;
|
|
1143
|
-
tokens: number;
|
|
1144
|
-
maxContext: number;
|
|
1145
|
-
} | {
|
|
1146
|
-
type: 'setFleetChat';
|
|
1147
|
-
mode: FleetChatVerbosity;
|
|
1148
|
-
} | {
|
|
1149
|
-
type: 'toggleMonitor';
|
|
1150
|
-
} | {
|
|
1151
|
-
type: 'toggleAgentsMonitor';
|
|
1152
|
-
} | {
|
|
1153
|
-
type: 'toggleHelp';
|
|
1154
|
-
} | {
|
|
1155
|
-
type: 'toggleTodosMonitor';
|
|
1156
|
-
} | {
|
|
1157
|
-
type: 'toggleQueuePanel';
|
|
1158
|
-
} | {
|
|
1159
|
-
type: 'checkpointReceived';
|
|
1160
|
-
cp: State['checkpoints'][0];
|
|
1161
|
-
}
|
|
1162
|
-
/** `selected` preselects a row (a message picked with Alt+↑); default the newest. */
|
|
1163
|
-
| {
|
|
1164
|
-
type: 'rewindOverlayOpen';
|
|
1165
|
-
selected?: number | undefined;
|
|
1166
|
-
} | {
|
|
1167
|
-
type: 'rewindOverlayClose';
|
|
1168
|
-
}
|
|
1169
|
-
/** Fork the session at a checkpoint and switch to the fork. */
|
|
1170
|
-
| {
|
|
1171
|
-
type: 'checkpointFork';
|
|
1172
|
-
promptIndex: number;
|
|
1173
|
-
} | {
|
|
1174
|
-
type: 'forkRequestDone';
|
|
1175
|
-
} | {
|
|
1176
|
-
type: 'rewindOverlayMove';
|
|
1177
|
-
delta: number;
|
|
1178
|
-
} | {
|
|
1179
|
-
type: 'sessionRewound';
|
|
1180
|
-
toPromptIndex: number;
|
|
1181
|
-
} | {
|
|
1182
|
-
type: 'eternalStage';
|
|
1183
|
-
stage: AutonomyStage;
|
|
1184
|
-
} | {
|
|
1185
|
-
type: 'goalSummary';
|
|
1186
|
-
summary: GoalSummary;
|
|
1187
|
-
} | {
|
|
1188
|
-
type: 'goalRunInit';
|
|
1189
|
-
title: string;
|
|
1190
|
-
} | {
|
|
1191
|
-
type: 'goalRunPhaseUpdate';
|
|
1192
|
-
phaseId: string;
|
|
1193
|
-
name: string;
|
|
1194
|
-
status: string;
|
|
1195
|
-
completedTasks: number;
|
|
1196
|
-
totalTasks: number;
|
|
1197
|
-
startedAt?: number | undefined;
|
|
1198
|
-
} | {
|
|
1199
|
-
type: 'goalRunRunningPhases';
|
|
1200
|
-
phaseIds: string[];
|
|
1201
|
-
} | {
|
|
1202
|
-
type: 'goalRunElapsed';
|
|
1203
|
-
ms: number;
|
|
1204
|
-
} | {
|
|
1205
|
-
type: 'goalRunTaskActive';
|
|
1206
|
-
phaseId: string;
|
|
1207
|
-
taskId: string;
|
|
1208
|
-
title: string;
|
|
1209
|
-
agent?: string | undefined;
|
|
1210
|
-
/** True when the task starts, false when it completes/fails. */
|
|
1211
|
-
active: boolean;
|
|
1212
|
-
} | {
|
|
1213
|
-
/** A task finished successfully; the reducer owns the count arithmetic. */
|
|
1214
|
-
type: 'goalRunTaskCompleted';
|
|
1215
|
-
phaseId: string;
|
|
1216
|
-
taskId: string;
|
|
1217
|
-
} | {
|
|
1218
|
-
/** Attach the assigned agent to an already-active task (reducer-owned). */
|
|
1219
|
-
type: 'goalRunTaskAgent';
|
|
1220
|
-
phaseId: string;
|
|
1221
|
-
taskId: string;
|
|
1222
|
-
agent?: string | undefined;
|
|
1223
|
-
} | {
|
|
1224
|
-
type: 'goalRunMonitorToggle';
|
|
1225
|
-
} | {
|
|
1226
|
-
type: 'goalRunReset';
|
|
1227
|
-
} | {
|
|
1228
|
-
type: 'sddBoardSnapshot';
|
|
1229
|
-
snapshot: SddBoardSnapshot;
|
|
1230
|
-
} | {
|
|
1231
|
-
type: 'toggleSddBoardMonitor';
|
|
1232
|
-
} | {
|
|
1233
|
-
type: 'sddBoardFocusNext';
|
|
1234
|
-
} | {
|
|
1235
|
-
type: 'sddBoardFocusPrev';
|
|
1236
|
-
} | {
|
|
1237
|
-
type: 'worktreeUpsert';
|
|
1238
|
-
handleId: string;
|
|
1239
|
-
row: Partial<WorktreeRow & {
|
|
1240
|
-
baseBranch?: string | undefined;
|
|
1241
|
-
}>;
|
|
1242
|
-
baseBranch?: string | undefined;
|
|
1243
|
-
} | {
|
|
1244
|
-
type: 'worktreeRemove';
|
|
1245
|
-
handleId: string;
|
|
1246
|
-
} | {
|
|
1247
|
-
type: 'toggleWorktreeMonitor';
|
|
1248
|
-
}
|
|
1249
|
-
/** ScrollableHistory reports whether the viewport is scrolled up. */
|
|
1250
|
-
| {
|
|
1251
|
-
type: 'setHistoryScrolled';
|
|
1252
|
-
scrolled: boolean;
|
|
1253
|
-
}
|
|
1254
|
-
/** Report the computed viewport height. */
|
|
1255
|
-
| {
|
|
1256
|
-
type: 'setViewportRows';
|
|
1257
|
-
rows: number;
|
|
1258
|
-
}
|
|
1259
|
-
/**
|
|
1260
|
-
* Fold a batch of fleet/display actions through the reducer in ONE pass so
|
|
1261
|
-
* a 150ms burst of subagent events produces a single React render instead
|
|
1262
|
-
* of one per event. Order-preserving; only high-frequency display events
|
|
1263
|
-
* are batched (correctness-sensitive events stay immediate).
|
|
1264
|
-
*/
|
|
1265
|
-
| {
|
|
1
|
+
import type { AppActionRuntime } from './app-action-runtime.js';
|
|
2
|
+
import type { AppActionServices } from './app-action-services.js';
|
|
3
|
+
import type { AppActionSettings } from './app-action-settings.js';
|
|
4
|
+
import type { AppActionWorkflows } from './app-action-workflows.js';
|
|
5
|
+
export type Action = AppActionRuntime | AppActionSettings | AppActionServices | AppActionWorkflows | {
|
|
1266
6
|
type: 'fleetBatch';
|
|
1267
7
|
actions: Action[];
|
|
1268
|
-
}
|
|
1269
|
-
/** BugHunter emitted a bug.found event on the FleetBus. */
|
|
1270
|
-
| {
|
|
1271
|
-
type: 'collabBugFound';
|
|
1272
|
-
sessionId: string;
|
|
1273
|
-
bugId: string;
|
|
1274
|
-
severity: string;
|
|
1275
|
-
description: string;
|
|
1276
|
-
}
|
|
1277
|
-
/** RefactorPlanner emitted a refactor.plan event on the FleetBus. */
|
|
1278
|
-
| {
|
|
1279
|
-
type: 'collabPlanEmitted';
|
|
1280
|
-
sessionId: string;
|
|
1281
|
-
planId: string;
|
|
1282
|
-
riskScore: string;
|
|
1283
|
-
phaseCount: number;
|
|
1284
|
-
}
|
|
1285
|
-
/** Critic emitted a critic.evaluation event on the FleetBus. */
|
|
1286
|
-
| {
|
|
1287
|
-
type: 'collabEvalComplete';
|
|
1288
|
-
sessionId: string;
|
|
1289
|
-
evalId: string;
|
|
1290
|
-
verdict: string;
|
|
1291
|
-
score: number;
|
|
1292
|
-
}
|
|
1293
|
-
/** Collab session completed — overall verdict is available. */
|
|
1294
|
-
| {
|
|
1295
|
-
type: 'collabSessionDone';
|
|
1296
|
-
sessionId: string;
|
|
1297
|
-
verdict: 'approve' | 'needs_revision' | 'reject';
|
|
1298
|
-
}
|
|
1299
|
-
/** A collab subagent (bug-hunter / refactor-planner / critic) was spawned. */
|
|
1300
|
-
| {
|
|
1301
|
-
type: 'collabSubagentSpawned';
|
|
1302
|
-
subagentId: string;
|
|
1303
|
-
role: string;
|
|
1304
|
-
}
|
|
1305
|
-
/** Toggle the process list overlay (F8). */
|
|
1306
|
-
| {
|
|
1307
|
-
type: 'toggleProcessList';
|
|
1308
|
-
}
|
|
1309
|
-
/** Toggle the cron jobs monitor. */
|
|
1310
|
-
| {
|
|
1311
|
-
type: 'toggleCronMonitor';
|
|
1312
|
-
}
|
|
1313
|
-
/** Toggle the audit (side effects) panel. */
|
|
1314
|
-
| {
|
|
1315
|
-
type: 'toggleAuditPanel';
|
|
1316
|
-
}
|
|
1317
|
-
/** Toggle the plan panel (F5). */
|
|
1318
|
-
| {
|
|
1319
|
-
type: 'togglePlanPanel';
|
|
1320
|
-
}
|
|
1321
|
-
/** Close every open panel/monitor/overlay at once. */
|
|
1322
|
-
| {
|
|
1323
|
-
type: 'closeAllPanels';
|
|
1324
|
-
}
|
|
1325
|
-
/** Toggle keyboard focus between input and the right sidebar. */
|
|
1326
|
-
| {
|
|
1327
|
-
type: 'toggleSidebarFocus';
|
|
1328
|
-
}
|
|
1329
|
-
/** Scroll the sidebar content by delta rows (clamped to >=0). */
|
|
1330
|
-
| {
|
|
1331
|
-
type: 'sidebarScroll';
|
|
1332
|
-
delta: number;
|
|
1333
|
-
viewportHeight?: number | undefined;
|
|
1334
|
-
/**
|
|
1335
|
-
* Rows occupied by routed twin panels (Todos / Plan / Kanban / …)
|
|
1336
|
-
* mounted above `SidebarContent` inside `RightSidebar`. Subtracted
|
|
1337
|
-
* from `viewportHeight` so the scroll clamp matches the actual
|
|
1338
|
-
* viewport the user can scroll through. Defaults to 0 (no twins
|
|
1339
|
-
* mounted) when omitted so existing call sites stay correct.
|
|
1340
|
-
*/
|
|
1341
|
-
sidebarTwinRowCount?: number | undefined;
|
|
1342
|
-
/**
|
|
1343
|
-
* Whether the swarm panel is on the sidebar using the effective
|
|
1344
|
-
* source (picker draft when the picker is open, persisted
|
|
1345
|
-
* `liveSettings` otherwise — see `app-view.tsx`). Drives the
|
|
1346
|
-
* mission-queue reservation in `computeMaxSidebarScroll`; without
|
|
1347
|
-
* this field the reducer only sees the picker draft and under-
|
|
1348
|
-
* reserves the mission card when a config-only 'sidebar' swarm
|
|
1349
|
-
* mode is persisted but the picker has never been opened.
|
|
1350
|
-
*/
|
|
1351
|
-
effectiveSwarmOnSidebar?: boolean | undefined;
|
|
1352
|
-
}
|
|
1353
|
-
/** Reset sidebar scroll offset to 0. */
|
|
1354
|
-
| {
|
|
1355
|
-
type: 'sidebarScrollReset';
|
|
1356
|
-
}
|
|
1357
|
-
/** Jump the sidebar scroll to an absolute offset (scrollbar press/drag). */
|
|
1358
|
-
| {
|
|
1359
|
-
type: 'sidebarScrollSet';
|
|
1360
|
-
/** Absolute offset in rows from the content top; clamped to [0, max]. */
|
|
1361
|
-
offset: number;
|
|
1362
|
-
viewportHeight?: number | undefined;
|
|
1363
|
-
/** See the `sidebarScroll` twin field — identical clamp semantics. */
|
|
1364
|
-
sidebarTwinRowCount?: number | undefined;
|
|
1365
|
-
/** See the `sidebarScroll` twin field — identical clamp semantics. */
|
|
1366
|
-
effectiveSwarmOnSidebar?: boolean | undefined;
|
|
1367
|
-
} | {
|
|
1368
|
-
type: 'toggleKanbanPanel';
|
|
1369
|
-
} | {
|
|
1370
|
-
type: 'toggleGoalPanel';
|
|
1371
|
-
} | {
|
|
1372
|
-
type: 'toggleGoalKanbanPanel';
|
|
1373
|
-
} | {
|
|
1374
|
-
type: 'toggleContextPanel';
|
|
1375
|
-
} | {
|
|
1376
|
-
type: 'toggleConnectionsPanel';
|
|
1377
|
-
} | {
|
|
1378
|
-
type: 'toggleSessionsPanel';
|
|
1379
|
-
} | {
|
|
1380
|
-
type: 'sessionsPanelSet';
|
|
1381
|
-
sessions: LiveSessionEntry[];
|
|
1382
|
-
} | {
|
|
1383
|
-
type: 'sessionsPanelMove';
|
|
1384
|
-
delta: number;
|
|
1385
|
-
} | {
|
|
1386
|
-
type: 'sessionsPanelBusy';
|
|
1387
|
-
on: boolean;
|
|
1388
|
-
} | {
|
|
1389
|
-
type: 'sessionResumeConfirmSet';
|
|
1390
|
-
sessionId: string;
|
|
1391
|
-
sessionName: string;
|
|
1392
|
-
} | {
|
|
1393
|
-
type: 'sessionResumeConfirmClear';
|
|
1394
|
-
}
|
|
1395
|
-
/** Push throttled debug-stream telemetry from the provider's chunk callback. */
|
|
1396
|
-
| {
|
|
1397
|
-
type: 'debugStreamStats';
|
|
1398
|
-
chunkCount: number;
|
|
1399
|
-
lastChunkSize: number;
|
|
1400
|
-
lastDeltaMs: number;
|
|
1401
|
-
totalBytes: number;
|
|
1402
|
-
lastChunkAt: string;
|
|
1403
|
-
}
|
|
1404
|
-
/** Clear debug-stream stats (fired on stream reset / idle). */
|
|
1405
|
-
| {
|
|
1406
|
-
type: 'debugStreamStatsClear';
|
|
1407
|
-
}
|
|
1408
|
-
/** Auto-proceed countdown tick. Upserts the countdown; 0 clears it. */
|
|
1409
|
-
| {
|
|
1410
|
-
type: 'countdownTick';
|
|
1411
|
-
remainingSeconds: number;
|
|
1412
|
-
}
|
|
1413
|
-
/** Auto-proceed countdown ended (completed or aborted). */
|
|
1414
|
-
| {
|
|
1415
|
-
type: 'countdownEnded';
|
|
1416
|
-
}
|
|
1417
|
-
/** Coordinator emitted a live event. */
|
|
1418
|
-
| {
|
|
1419
|
-
type: 'coordinatorEvent';
|
|
1420
|
-
event: {
|
|
1421
|
-
type: string;
|
|
1422
|
-
goalId?: string | undefined;
|
|
1423
|
-
taskId?: string | undefined;
|
|
1424
|
-
knowledgeId?: string | undefined;
|
|
1425
|
-
title?: string | undefined;
|
|
1426
|
-
text?: string | undefined;
|
|
1427
|
-
participants?: string[] | undefined;
|
|
1428
|
-
};
|
|
1429
|
-
}
|
|
1430
|
-
/** Toggle the coordinator monitor overlay. */
|
|
1431
|
-
| {
|
|
1432
|
-
type: 'toggleCoordinatorMonitor';
|
|
1433
8
|
};
|
|
1434
9
|
//# sourceMappingURL=app-action-type.d.ts.map
|