@wrongstack/tui 0.313.1 → 0.316.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/dist/app-action-type.d.ts +56 -0
  2. package/dist/app-initial-state.d.ts +2 -1
  3. package/dist/app-props.d.ts +45 -2
  4. package/dist/app-settings-type.d.ts +7 -0
  5. package/dist/app-state-core-types.d.ts +18 -0
  6. package/dist/app-state.d.ts +42 -0
  7. package/dist/app-status-region.d.ts +1 -1
  8. package/dist/app-view-contract.d.ts +2 -1
  9. package/dist/app-view-pickers.d.ts +2 -1
  10. package/dist/app-view-sidebar.d.ts +2 -1
  11. package/dist/brain-panel-model.d.ts +0 -2
  12. package/dist/checkpoint-retention.d.ts +2 -3
  13. package/dist/components/agents-monitor.d.ts +3 -3
  14. package/dist/components/auth-panel.d.ts +2 -1
  15. package/dist/components/brain-decision-prompt.d.ts +2 -1
  16. package/dist/components/clear-confirm-panel.d.ts +4 -3
  17. package/dist/components/composer-status-chip.d.ts +3 -2
  18. package/dist/components/confirm-prompt.d.ts +2 -1
  19. package/dist/components/context-panel.d.ts +2 -1
  20. package/dist/components/continue-confirm-panel.d.ts +3 -2
  21. package/dist/components/coordinator-panel.d.ts +2 -1
  22. package/dist/components/cron-jobs.d.ts +2 -1
  23. package/dist/components/design-picker.d.ts +2 -1
  24. package/dist/components/enhance-panel.d.ts +4 -3
  25. package/dist/components/esc-confirm-prompt.d.ts +2 -1
  26. package/dist/components/exit-confirm-panel.d.ts +3 -2
  27. package/dist/components/f-key-picker.d.ts +1 -2
  28. package/dist/components/fallback-overlay.d.ts +2 -1
  29. package/dist/components/fleet-monitor.d.ts +2 -1
  30. package/dist/components/fleet-panel.d.ts +4 -4
  31. package/dist/components/goal-kanban-panel.d.ts +2 -1
  32. package/dist/components/help-overlay.d.ts +2 -1
  33. package/dist/components/help-panel.d.ts +2 -1
  34. package/dist/components/history/code-block-diff-helpers.d.ts +1 -6
  35. package/dist/components/history/code-block.d.ts +0 -2
  36. package/dist/components/history/copy-registry.d.ts +2 -1
  37. package/dist/components/history/index.d.ts +2 -2
  38. package/dist/components/history/replay.d.ts +2 -1
  39. package/dist/components/history/sage-memory-block.d.ts +0 -6
  40. package/dist/components/history/scroll-controller-types.d.ts +7 -12
  41. package/dist/components/history/selection-band-store.d.ts +3 -2
  42. package/dist/components/history/selection-helpers.d.ts +24 -65
  43. package/dist/components/history/tool-card.d.ts +2 -1
  44. package/dist/components/history/tool-group.d.ts +0 -7
  45. package/dist/components/history/use-history-controller.d.ts +2 -1
  46. package/dist/components/history/utils.d.ts +1 -1
  47. package/dist/components/history/wrap-geometry.d.ts +18 -125
  48. package/dist/components/history.d.ts +1 -1
  49. package/dist/components/kanban-panel.d.ts +7 -25
  50. package/dist/components/live-activity-strip.d.ts +2 -1
  51. package/dist/components/mailbox-panel.d.ts +2 -1
  52. package/dist/components/mcp-picker.d.ts +2 -1
  53. package/dist/components/mode-picker.d.ts +2 -1
  54. package/dist/components/model-picker.d.ts +2 -1
  55. package/dist/components/monitor-shell.d.ts +3 -2
  56. package/dist/components/phase-monitor.d.ts +2 -1
  57. package/dist/components/plan-panel.d.ts +3 -2
  58. package/dist/components/plugin-picker.d.ts +2 -1
  59. package/dist/components/powerline-rail.d.ts +2 -1
  60. package/dist/components/project-picker.d.ts +2 -1
  61. package/dist/components/prompt-picker.d.ts +2 -1
  62. package/dist/components/refine-countdown-panel.d.ts +3 -2
  63. package/dist/components/refine-failure-panel.d.ts +2 -1
  64. package/dist/components/resource-menu.d.ts +2 -1
  65. package/dist/components/resume-picker.d.ts +2 -1
  66. package/dist/components/scrollable-history.d.ts +2 -2
  67. package/dist/components/send-mode-picker.d.ts +3 -2
  68. package/dist/components/sessions-panel.d.ts +2 -1
  69. package/dist/components/settings-picker-filter.d.ts +2 -1
  70. package/dist/components/settings-picker.d.ts +3 -1
  71. package/dist/components/shadow-panel.d.ts +2 -1
  72. package/dist/components/shell-command-warning.d.ts +2 -1
  73. package/dist/components/sidebar-content.d.ts +4 -9
  74. package/dist/components/sidebar-panel-frame.d.ts +2 -13
  75. package/dist/components/sidebar.d.ts +2 -1
  76. package/dist/components/skill-picker.d.ts +2 -1
  77. package/dist/components/slash-confirm-panel.d.ts +3 -2
  78. package/dist/components/slash-menu.d.ts +2 -1
  79. package/dist/components/status-bar-format.d.ts +2 -0
  80. package/dist/components/status-bar-icons.d.ts +4 -0
  81. package/dist/components/status-bar-rails.d.ts +19 -6
  82. package/dist/components/status-bar-types.d.ts +18 -0
  83. package/dist/components/status-bar.d.ts +17 -7
  84. package/dist/components/status-line-registry.d.ts +62 -0
  85. package/dist/components/statusline-picker.d.ts +5 -27
  86. package/dist/components/theme-picker.d.ts +2 -1
  87. package/dist/components/theme-preview.d.ts +2 -1
  88. package/dist/components/tools-picker.d.ts +2 -1
  89. package/dist/components/topic-check-panel.d.ts +2 -1
  90. package/dist/connections-slash.d.ts +2 -1
  91. package/dist/context-fill.d.ts +4 -3
  92. package/dist/context-slash.d.ts +3 -2
  93. package/dist/cron-slash.d.ts +2 -1
  94. package/dist/esc-close-panels.d.ts +2 -1
  95. package/dist/f-key-panels.d.ts +1 -1
  96. package/dist/git-info.d.ts +22 -3
  97. package/dist/height-cache.d.ts +2 -8
  98. package/dist/history-entry.d.ts +4 -3
  99. package/dist/history-retention.d.ts +16 -6
  100. package/dist/hit-test.d.ts +2 -1
  101. package/dist/hooks/subagent-history-format.d.ts +2 -1
  102. package/dist/hooks/use-app-session-state.d.ts +2 -1
  103. package/dist/hooks/use-auth-panel.d.ts +2 -1
  104. package/dist/hooks/use-brain-panel.d.ts +2 -1
  105. package/dist/hooks/use-chip-staleness-guard.d.ts +4 -3
  106. package/dist/hooks/use-core-tui-commands.d.ts +1 -1
  107. package/dist/hooks/use-director-fleet-bridge.d.ts +2 -4
  108. package/dist/hooks/use-exit-command.d.ts +1 -1
  109. package/dist/hooks/use-file-search.d.ts +3 -7
  110. package/dist/hooks/use-fleet-generation-gate.d.ts +2 -1
  111. package/dist/hooks/use-git-session-status.d.ts +1 -1
  112. package/dist/hooks/use-history-archive.d.ts +3 -2
  113. package/dist/hooks/use-input-history-persistence.d.ts +2 -1
  114. package/dist/hooks/use-mode-picker.d.ts +2 -1
  115. package/dist/hooks/use-model-pick.d.ts +2 -1
  116. package/dist/hooks/use-next-steps-auto-submit.d.ts +2 -2
  117. package/dist/hooks/use-panel-controllers.d.ts +3 -1
  118. package/dist/hooks/use-paste-handling.d.ts +2 -1
  119. package/dist/hooks/use-prompt-picker.d.ts +4 -3
  120. package/dist/hooks/use-session-rewind.d.ts +2 -1
  121. package/dist/hooks/use-shadow-panel.d.ts +2 -1
  122. package/dist/hooks/use-sidebar-panel-data.d.ts +4 -3
  123. package/dist/hooks/use-status-sync-interval.d.ts +2 -1
  124. package/dist/hooks/use-statusline-hidden-sync.d.ts +2 -1
  125. package/dist/hooks/use-statusline-state.d.ts +9 -3
  126. package/dist/hooks/use-stream-chip-expiration.d.ts +3 -2
  127. package/dist/hooks/use-terminal-size.d.ts +3 -2
  128. package/dist/hooks/use-theme-picker-handler.d.ts +2 -1
  129. package/dist/hooks/use-tui-activity.d.ts +2 -1
  130. package/dist/hooks/use-tui-controllers.d.ts +2 -1
  131. package/dist/hooks/use-tui-environment-state.d.ts +7 -5
  132. package/dist/hooks/use-tui-event-bridge.d.ts +1 -1
  133. package/dist/index.js +8509 -8341
  134. package/dist/ink.d.ts +1 -1
  135. package/dist/input-editing.d.ts +2 -1
  136. package/dist/input-tokens.d.ts +2 -1
  137. package/dist/input-validation/action-types.d.ts +1 -1
  138. package/dist/input-validation.d.ts +4 -4
  139. package/dist/kanban-slash.d.ts +8 -32
  140. package/dist/layout-store.d.ts +2 -1
  141. package/dist/markdown-table.d.ts +1 -3
  142. package/dist/memory-context-monitor.d.ts +3 -2
  143. package/dist/memory-lifecycle-entry.d.ts +2 -1
  144. package/dist/memory-slash-format.d.ts +0 -1
  145. package/dist/mouse.d.ts +3 -2
  146. package/dist/overlay-key-router.d.ts +5 -4
  147. package/dist/paste-accumulator.d.ts +3 -2
  148. package/dist/prompt-refinement-start.d.ts +1 -1
  149. package/dist/reducers/composer.d.ts +1 -1
  150. package/dist/reducers/conversation.d.ts +1 -1
  151. package/dist/reducers/helpers.d.ts +16 -3
  152. package/dist/resume-load.d.ts +131 -0
  153. package/dist/run-blocks-controller.d.ts +2 -1
  154. package/dist/run-tui-client-registration.d.ts +3 -2
  155. package/dist/run-tui-options.d.ts +35 -2
  156. package/dist/run-tui-teardown.d.ts +2 -1
  157. package/dist/run-tui-title-controller.d.ts +2 -1
  158. package/dist/scroll-anchor.d.ts +2 -4
  159. package/dist/slash-command-lifecycle.d.ts +2 -1
  160. package/dist/submit-history.d.ts +2 -1
  161. package/dist/submit-prompt-refinement.d.ts +3 -2
  162. package/dist/terminal-title.d.ts +2 -1
  163. package/dist/theme.d.ts +2 -2
  164. package/dist/token-previews.d.ts +2 -1
  165. package/dist/tui-host-capabilities.d.ts +1 -1
  166. package/dist/tui-memory-counters.d.ts +2 -1
  167. package/dist/ui-contracts.d.ts +1 -1
  168. package/dist/ui-glyphs.d.ts +3 -1
  169. package/dist/workbench-slash.d.ts +2 -1
  170. package/package.json +9 -9
  171. package/dist/react-children-flatten.d.ts +0 -28
@@ -256,6 +256,60 @@ export type Action = {
256
256
  type: 'resumePickerError';
257
257
  text: string;
258
258
  }
259
+ /**
260
+ * Release the post-resume auto-proceed hold.
261
+ *
262
+ * Dispatched by the manual submit path only. The hold exists so a resumed
263
+ * session's restored todo board cannot arm an automatic turn before the user
264
+ * has done anything; sending a message IS that something.
265
+ */
266
+ | {
267
+ type: 'autoProceedRelease';
268
+ }
269
+ /**
270
+ * Begin a `/resume`: wipe the screen to a clean slate (banner only, exactly
271
+ * like `/clear`) and put the live progress block in its place.
272
+ *
273
+ * The wipe is the point. Leaving the previous conversation on screen while a
274
+ * different one loaded meant the user could not tell whether anything was
275
+ * happening, or which session they were looking at once it did.
276
+ */
277
+ | {
278
+ type: 'resumeLoadStart';
279
+ sessionId: string;
280
+ label: string;
281
+ }
282
+ /**
283
+ * Advance the progress block. Every field is optional so the same action
284
+ * serves the spinner ticker (nothing but a frame bump), the byte-progress
285
+ * sink, and the host's stage reports.
286
+ */
287
+ | {
288
+ type: 'resumeLoadTick';
289
+ loadedBytes?: number | undefined;
290
+ totalBytes?: number | undefined;
291
+ /** Human-readable stage line to push onto the rolling log. */
292
+ note?: string | undefined;
293
+ }
294
+ /**
295
+ * Commit one batch of the replayed transcript.
296
+ *
297
+ * The first batch flips the phase and clears the progress block, so the
298
+ * transcript streams into a screen that holds nothing else. `done` finishes
299
+ * the resume and applies the context snapshot.
300
+ */
301
+ | {
302
+ type: 'resumeStreamChunk';
303
+ entries: HistoryEntry[];
304
+ /** Total entries in the replay, for the batch counter. */
305
+ total: number;
306
+ done?: boolean | undefined;
307
+ contextSnapshot?: ContextSnapshot | undefined;
308
+ }
309
+ /** Abandon an in-flight resume (failure, or a second resume superseding it). */
310
+ | {
311
+ type: 'resumeLoadAbort';
312
+ }
259
313
  /** Replace all history entries with the given hydrated entries from a resumed session. */
260
314
  | {
261
315
  type: 'replaceHistory';
@@ -315,6 +369,8 @@ export type Action = {
315
369
  statuslineMode: StatuslineMode;
316
370
  reasoningMode: 'auto' | 'on' | 'off';
317
371
  reasoningEffort: ReasoningEffort;
372
+ /** Documented effort levels of the active model (absent = undocumented). */
373
+ reasoningEffortLevels?: string[] | undefined;
318
374
  reasoningPreserve: boolean;
319
375
  thinkingWord: string;
320
376
  cacheTtl: CacheTtl;
@@ -25,7 +25,7 @@ export declare function buildRestoredEntries(messages: Message[] | undefined, re
25
25
  * listCheckpoints` builds its counts the same way.
26
26
  */
27
27
  export declare function buildRestoredCheckpoints(restoredEvents?: SessionEvent[] | undefined): State['checkpoints'];
28
- export interface CreateInitialStateOptions {
28
+ interface CreateInitialStateOptions {
29
29
  banner: boolean;
30
30
  appVersion?: string | undefined;
31
31
  provider?: string | undefined;
@@ -66,4 +66,5 @@ export interface CreateInitialStateOptions {
66
66
  initialFleetChat?: FleetChatVerbosity | undefined;
67
67
  }
68
68
  export declare function createInitialState(options: CreateInitialStateOptions): State;
69
+ export {};
69
70
  //# sourceMappingURL=app-initial-state.d.ts.map
@@ -2,8 +2,9 @@ import type { Agent } from '@wrongstack/core/agent';
2
2
  import type { CoordinatorEvent, Director } from '@wrongstack/core/coordination';
3
3
  import type { EventBus } from '@wrongstack/core/kernel';
4
4
  import type { SlashCommandRegistry } from '@wrongstack/core/registry';
5
+ import type { StatuslineLines } from '@wrongstack/core/statusline';
5
6
  import type { QueueStore } from '@wrongstack/core/storage';
6
- import type { AttachmentStore, AutonomyStage, ConfigStore, ContextSnapshot, FleetChatVerbosity, Message, SkillLoader, TokenCounter, TokenSavingTier } from '@wrongstack/core/types';
7
+ import type { AttachmentStore, AutonomyStage, ConfigStore, ContextSnapshot, FleetChatVerbosity, Message, SessionLoadProgress, SkillLoader, TokenCounter, TokenSavingTier } from '@wrongstack/core/types';
7
8
  import type { VisionAdapters } from '@wrongstack/runtime/vision';
8
9
  import type { SddLifecycleResult, SddRunControl } from '@wrongstack/sdd';
9
10
  import type React from 'react';
@@ -118,6 +119,12 @@ export interface AppProps {
118
119
  * field, exactly as before.
119
120
  */
120
121
  getEnhancerReasoning?: ((providerId?: string, modelId?: string) => import('@wrongstack/core/types').ReasoningRequest | undefined | Promise<import('@wrongstack/core/types').ReasoningRequest | undefined>) | undefined;
122
+ /**
123
+ * Effort levels the ACTIVE model documents (models.dev reasoningConfig),
124
+ * for the model-aware /settings reasoning-effort cycle (WebUI parity).
125
+ * Undefined = vocabulary undocumented; the picker cycles the full set.
126
+ */
127
+ getActiveModelReasoningEffortLevels?: (() => string[] | undefined) | undefined;
121
128
  /**
122
129
  * Build a Provider for a (providerId, modelId) pair WITHOUT switching the
123
130
  * session — used to retry a failed refinement on the fallback/another model
@@ -424,7 +431,14 @@ export interface AppProps {
424
431
  * `replaceHistory` dispatch, so the user sees the prior conversation
425
432
  * exactly as it appeared during live interaction.
426
433
  */
427
- onResumeSession?: ((sessionId: string) => Promise<{
434
+ onResumeSession?: ((sessionId: string, onLoadProgress?: (progress: SessionLoadProgress) => void,
435
+ /**
436
+ * Live stage names as each step of the resume begins (`resolve_id`,
437
+ * `open_journal`, `swap_writer`, …). Drives the rolling rows of the
438
+ * resume loading block, so the screen reports what is actually
439
+ * happening instead of a spinner over an unexplained multi-second wait.
440
+ */
441
+ onStage?: (stage: string) => void) => Promise<{
428
442
  entries: HistoryEntry[];
429
443
  nextId: number;
430
444
  sessionId: string;
@@ -438,6 +452,28 @@ export interface AppProps {
438
452
  * event lands.
439
453
  */
440
454
  contextSnapshot?: ContextSnapshot | undefined;
455
+ /**
456
+ * `false` when the transcript loaded but the session was NOT claimed
457
+ * for writing — another process owns it, or the claim lapsed. The
458
+ * conversation is still shown (read-only); the agent keeps writing to
459
+ * the session it was already in. Treated as present-but-true by hosts
460
+ * that predate the field.
461
+ */
462
+ attached?: boolean | undefined;
463
+ /**
464
+ * Non-fatal problems to print alongside the replayed transcript
465
+ * (sidecars that did not re-point, a provider that is gone). These no
466
+ * longer abort a resume, so they have to be visible somewhere.
467
+ */
468
+ warnings?: string[] | undefined;
469
+ /**
470
+ * `<nextsteps>` parsed from the resumed session's final assistant turn.
471
+ *
472
+ * OFFERED, never executed: the resume lists them and stops. Empty when
473
+ * the session did not end on a next-steps block, when it has open todos
474
+ * (the board keeps precedence), or when the transcript is read-only.
475
+ */
476
+ nextSteps?: string[] | undefined;
441
477
  } | null>) | undefined;
442
478
  /**
443
479
  * List recent session summaries for the /resume picker. The host reads
@@ -540,6 +576,13 @@ export interface AppProps {
540
576
  * statusline picker so each toggle is immediately durable.
541
577
  */
542
578
  saveStatuslineHiddenItems: (items: StatuslineItem[]) => Promise<void>;
579
+ /**
580
+ * Per-chip statusline line assignment (statusline.json schema v2).
581
+ * Optional: hosts that don't load it keep the core contract defaults.
582
+ */
583
+ statuslineLines?: StatuslineLines | undefined;
584
+ setStatuslineLines?: (lines: StatuslineLines) => void;
585
+ saveStatuslineLines?: (lines: StatuslineLines) => Promise<void>;
543
586
  /**
544
587
  * Controller for the agents monitor overlay. App installs a dispatch-backed
545
588
  * setter on mount so the `/agents on|off` slash command can toggle the
@@ -97,6 +97,13 @@ export type Settings = {
97
97
  cacheTtl: CacheTtl;
98
98
  /** Where to persist settings: 'global' or 'project'. */
99
99
  configScope: 'global' | 'project';
100
+ /**
101
+ * Active system-prompt variant (Lite / Standard / Pro). Read-only display
102
+ * data sourced from `config.systemPrompt.variant` — selection happens in
103
+ * the CLI boot menu (persistSystemPromptVariant), not the TUI picker, so
104
+ * there is no saveSettings counterpart.
105
+ */
106
+ systemPromptVariant?: 'lite' | 'default' | 'pro' | undefined;
100
107
  animationStyle: 'rainbow' | 'wave' | 'pulse' | 'dots' | 'breathe' | 'static' | 'cycle';
101
108
  /** When true, read tool includes codebase-index symbols alongside file content. */
102
109
  readSymbols: boolean;
@@ -40,6 +40,24 @@ export interface ResumeSessionEntry {
40
40
  outcome?: 'completed' | 'error' | 'timeout' | 'aborted' | undefined;
41
41
  /** The current session — marked so the picker can disallow resuming into itself. */
42
42
  isCurrent?: boolean | undefined;
43
+ /**
44
+ * Another process is writing this session RIGHT NOW.
45
+ *
46
+ * Taken from the cross-process `SessionRegistry` at listing time, so it
47
+ * covers every surface that claims a session lease — another `wstack --tui`,
48
+ * a WebUI server, SimpleUI, a plain REPL. Two processes appending to one
49
+ * journal interleave their turns and corrupt the transcript, so the picker
50
+ * refuses these outright rather than letting the host's reservation fail
51
+ * seconds into a multi-hundred-MB read.
52
+ *
53
+ * The F10 sessions panel has always had this (it lists live sessions and
54
+ * checks `pid`); the `/resume` picker was built off session SUMMARIES, which
55
+ * carry no liveness at all, so it had no way to know.
56
+ */
57
+ live?: {
58
+ pid: number;
59
+ clientType?: string | undefined;
60
+ } | undefined;
43
61
  }
44
62
  export type DraftEntry = HistoryEntry extends infer T ? T extends {
45
63
  id: number;
@@ -6,6 +6,8 @@ import type { AuthPanelState } from './auth-panel-model.js';
6
6
  import type { BrainLogEntry, BrainRiskLevel } from './brain-contracts.js';
7
7
  import type { BrainPanelSettings } from './brain-panel-model.js';
8
8
  import type { HistoryEntry } from './history-entry.js';
9
+ import type { TuiHistoryBudget } from './history-retention.js';
10
+ import type { ResumeLoadState } from './resume-load.js';
9
11
  import type { AuditLevel, CacheTtl, CompactorStrategy, ContextMode, LogLevel, ReasoningEffort, SettingsMode, StatuslineMode } from './settings-contracts.js';
10
12
  import type { AutonomyOption, ChipMeta, HelpEntry, LiveSessionEntry, McpPickerItem, ModeOption, PanelPositionMap, PluginPickerItem, ProjectPickerItem, PromptPickEntry, ProviderOption, RefineFailureDecision, RefineFailureModel, ResourceMenuAction, ResourceMenuSnapshot, SendMode, ShadowState, StatuslineItem, ToolPickerItem, WorktreeRow } from './ui-contracts.js';
11
13
  export type { Settings } from './app-settings-type.js';
@@ -23,6 +25,40 @@ export type State = {
23
25
  * compatibility and the legacy standalone History renderer.
24
26
  */
25
27
  historyGen: number;
28
+ /**
29
+ * Retention budget applied to `entries` on every history mutation.
30
+ *
31
+ * `undefined` = the live defaults. A session resume widens it (see
32
+ * `TUI_RESUME_HISTORY_BUDGET`) and the widened budget must PERSIST: the very
33
+ * next `addEntry` — the "Resumed session …" line itself — re-runs retention,
34
+ * so a budget that only applied to the `replaceHistory` dispatch would trim
35
+ * the transcript back one tick later and look like the resume never loaded.
36
+ */
37
+ historyBudget: TuiHistoryBudget | undefined;
38
+ /**
39
+ * Auto-proceed is armed only after the user has sent something.
40
+ *
41
+ * A resume restores the session's todo board, and the auto-proceed selector
42
+ * treats any open todo as grounded work — so resuming a session with an
43
+ * unfinished board silently started a turn on a countdown, without the user
44
+ * ever pressing anything. A resume must land in a waiting state: show the
45
+ * conversation, then stop.
46
+ *
47
+ * This holds only the ARMING. Autonomy itself is the user's setting and is
48
+ * never touched here — the hold clears on the next manual submit, exactly
49
+ * like the consecutive-turn cap does.
50
+ */
51
+ autoProceedHold: boolean;
52
+ /**
53
+ * Live `/resume` progress, or null when no resume is in flight.
54
+ *
55
+ * Set for the whole operation: the seconds spent reading the journal (during
56
+ * which the transcript is empty and this is the only thing on screen) and the
57
+ * streaming replay that follows. The block itself is rendered as a normal
58
+ * history entry — this is the model behind it, kept in state so the spinner
59
+ * ticker and the chunk pump have one authority to read.
60
+ */
61
+ resumeLoad: ResumeLoadState | null;
26
62
  buffer: string;
27
63
  cursor: number;
28
64
  streamingText: string;
@@ -283,6 +319,12 @@ export type State = {
283
319
  reasoningMode: 'auto' | 'on' | 'off';
284
320
  /** Reasoning effort level. */
285
321
  reasoningEffort: ReasoningEffort;
322
+ /**
323
+ * Effort levels the ACTIVE model documents (models.dev reasoningConfig),
324
+ * injected by the host at /settings-open time. Absent = vocabulary
325
+ * undocumented; the effort cycle then covers the full canonical set.
326
+ */
327
+ reasoningEffortLevels?: string[] | undefined;
286
328
  /** Preserve thinking across turns. */
287
329
  reasoningPreserve: boolean;
288
330
  /** Single word shown in the TUI rainbow working-state chip. */
@@ -1,7 +1,7 @@
1
1
  import type React from 'react';
2
2
  import type { AppViewProps } from './app-view-contract.js';
3
3
  export { resolveAgentSwarmPanelVisibility } from './app-ui-state.js';
4
- export interface AppStatusRegionProps extends AppViewProps {
4
+ interface AppStatusRegionProps extends AppViewProps {
5
5
  /** Optional column width cap for the status bar (when beside a sidebar). */
6
6
  mainColumnWidth?: number | undefined;
7
7
  }
@@ -14,7 +14,7 @@ import type { useTuiActivity } from './hooks/use-tui-activity.js';
14
14
  import type { useTuiEnvironmentState } from './hooks/use-tui-environment-state.js';
15
15
  import type { DOMElement } from './ink.js';
16
16
  import type { StatuslineMode } from './settings-contracts.js';
17
- export interface AppViewRuntime {
17
+ interface AppViewRuntime {
18
18
  state: State;
19
19
  dispatch: Dispatch<Action>;
20
20
  activity: ReturnType<typeof useTuiActivity>;
@@ -96,4 +96,5 @@ export interface AppViewProps {
96
96
  host: AppProps;
97
97
  runtime: AppViewRuntime;
98
98
  }
99
+ export {};
99
100
  //# sourceMappingURL=app-view-contract.d.ts.map
@@ -1,7 +1,7 @@
1
1
  import type React from 'react';
2
2
  import type { AppViewProps } from './app-view-contract.js';
3
3
  import type { PanelId } from './ui-contracts.js';
4
- export interface AppViewPickersProps {
4
+ interface AppViewPickersProps {
5
5
  host: AppViewProps['host'];
6
6
  runtime: AppViewProps['runtime'];
7
7
  mainColumnWidth: number;
@@ -10,4 +10,5 @@ export interface AppViewPickersProps {
10
10
  panelPositions: Record<PanelId, 'bottom' | 'sidebar'>;
11
11
  }
12
12
  export declare function AppViewPickers({ host, runtime, mainColumnWidth, pickerMaxRows, routedToSidebar, panelPositions, }: AppViewPickersProps): React.ReactElement;
13
+ export {};
13
14
  //# sourceMappingURL=app-view-pickers.d.ts.map
@@ -3,7 +3,7 @@ import type { AppViewProps } from './app-view-contract.js';
3
3
  import type { usePlanPanelData } from './components/plan-panel.js';
4
4
  import type { useSidebarConnections, useSidebarKanban, useSidebarProcessList, useSidebarWrongProxy } from './hooks/use-sidebar-panel-data.js';
5
5
  import type { PanelId } from './ui-contracts.js';
6
- export interface AppViewSidebarProps {
6
+ interface AppViewSidebarProps {
7
7
  host: AppViewProps['host'];
8
8
  runtime: AppViewProps['runtime'];
9
9
  sidebarWidth: number;
@@ -24,4 +24,5 @@ export interface AppViewSidebarProps {
24
24
  sidebarWrongProxyData: ReturnType<typeof useSidebarWrongProxy>;
25
25
  }
26
26
  export declare function AppViewSidebar({ host, runtime, sidebarWidth, sidebarContentWidth, sidebarSlotVisible, hiddenSidebarPanelCount, sidebarProcessData, sidebarConnectionsData, sidebarKanbanData, sidebarPlanData, sidebarWrongProxyEnabled, sidebarWrongProxyData, }: AppViewSidebarProps): React.ReactElement | null;
27
+ export {};
27
28
  //# sourceMappingURL=app-view-sidebar.d.ts.map
@@ -254,8 +254,6 @@ export type BrainPanelRow = {
254
254
  * skipped by the adjust/enter handlers — there is nothing to write back.
255
255
  */
256
256
  export declare const BRAIN_READONLY_ROW_KINDS: ReadonlySet<BrainPanelRow['kind']>;
257
- /** Heuristic rows, in display order. */
258
- export declare const BRAIN_HEURISTIC_KEYS: readonly BrainHeuristicKey[];
259
257
  /**
260
258
  * Derive the selectable rows for a settings snapshot.
261
259
  *
@@ -15,9 +15,7 @@ import type { State } from './app-state.js';
15
15
  export type CheckpointEntry = State['checkpoints'][number];
16
16
  /** Default maximum number of retained checkpoints. */
17
17
  export declare const TUI_CHECKPOINTS_MAX_ENTRIES = 200;
18
- /** Default maximum serialized bytes across all retained checkpoints. */
19
- export declare const TUI_CHECKPOINTS_MAX_BYTES: number;
20
- export interface CheckpointBudget {
18
+ interface CheckpointBudget {
21
19
  maxEntries?: number | undefined;
22
20
  maxBytes?: number | undefined;
23
21
  }
@@ -32,4 +30,5 @@ export interface CheckpointBudget {
32
30
  * reducer callers can bail out without scheduling another render.
33
31
  */
34
32
  export declare function retainCheckpoints(checkpoints: CheckpointEntry[], budget?: CheckpointBudget): CheckpointEntry[];
33
+ export {};
35
34
  //# sourceMappingURL=checkpoint-retention.d.ts.map
@@ -3,14 +3,14 @@ import type { AgentTimelineEntry } from '@wrongstack/core/coordination';
3
3
  import type { AgentTranscriptReader } from '../ui-contracts.js';
4
4
  export type { AgentTranscriptReader } from '../ui-contracts.js';
5
5
  import type { FleetEntry } from '../app-state.js';
6
- import type { HistoryEntry } from './history/types.js';
6
+ import type { HistoryEntry } from './history.js';
7
7
  /**
8
8
  * Narrow read-only view of per-subagent transcripts. AgentMonitorService
9
9
  * (created in the CLI host) satisfies this structurally; the TUI never
10
10
  * imports from @wrongstack/cli. `getTranscript` returns entries NEWEST
11
11
  * FIRST (mirroring AgentMonitorService.getTranscript).
12
12
  */
13
- export interface AgentsMonitorProps {
13
+ interface AgentsMonitorProps {
14
14
  entries: Record<string, FleetEntry>;
15
15
  totalCost: number;
16
16
  leaderCost?: number | undefined;
@@ -24,7 +24,7 @@ export interface AgentsMonitorProps {
24
24
  leaderTranscript?: (() => AgentTimelineEntry[]) | undefined;
25
25
  fullscreen?: boolean | undefined;
26
26
  }
27
- export { EMPTY_AGENTS_CLOSE_DELAY_MS, IDLE_HIDE_MS, TRANSCRIPT_FETCH_LIMIT, TRANSCRIPT_ROWS, } from './agents-monitor-constants.js';
27
+ export { EMPTY_AGENTS_CLOSE_DELAY_MS, IDLE_HIDE_MS } from './agents-monitor-constants.js';
28
28
  /**
29
29
  * Select the agents the live monitor should render. Only actively-running
30
30
  * subagents are detail-worthy; idle workers are retained by the coordinator for
@@ -1,6 +1,6 @@
1
1
  import type React from 'react';
2
2
  import { type AuthPanelState } from './auth-panel-model.js';
3
- export interface AuthPanelProps {
3
+ interface AuthPanelProps {
4
4
  panel: AuthPanelState;
5
5
  }
6
6
  export declare function formatExpiry(expiresAt: string | undefined): {
@@ -11,4 +11,5 @@ export declare function isAuthFlowUrlLine(line: string): boolean;
11
11
  /** Keep the newest authorize URL pinned even as later status lines arrive. */
12
12
  export declare function latestAuthFlowUrl(lines: readonly string[]): string | undefined;
13
13
  export declare function AuthPanel({ panel }: AuthPanelProps): React.ReactElement;
14
+ export {};
14
15
  //# sourceMappingURL=auth-panel.d.ts.map
@@ -6,7 +6,7 @@ export interface BrainDecisionPromptOption {
6
6
  consequence?: string | undefined;
7
7
  recommended?: boolean | undefined;
8
8
  }
9
- export interface BrainDecisionPromptProps {
9
+ interface BrainDecisionPromptProps {
10
10
  requestId: string;
11
11
  source: string;
12
12
  risk: 'low' | 'medium' | 'high' | 'critical' | string;
@@ -25,4 +25,5 @@ export interface BrainDecisionPromptProps {
25
25
  * maps A/B/C (or 1/2/3) to the matching option and Esc/D to a safe denial.
26
26
  */
27
27
  export declare function BrainDecisionPrompt({ requestId, source, risk, question, context, options, onAnswer, }: BrainDecisionPromptProps): React.ReactElement;
28
+ export {};
28
29
  //# sourceMappingURL=brain-decision-prompt.d.ts.map
@@ -1,10 +1,10 @@
1
1
  import type React from 'react';
2
- export interface ClearConfirmPanelProps {
2
+ interface ClearConfirmPanelProps {
3
3
  leaderActive: boolean;
4
4
  subagentCount: number;
5
5
  value: string;
6
6
  }
7
- export interface ClearConfirmationKey {
7
+ interface ClearConfirmationKey {
8
8
  escape?: boolean | undefined;
9
9
  return?: boolean | undefined;
10
10
  backspace?: boolean | undefined;
@@ -12,7 +12,7 @@ export interface ClearConfirmationKey {
12
12
  ctrl?: boolean | undefined;
13
13
  meta?: boolean | undefined;
14
14
  }
15
- export type ClearConfirmationKeyResult = {
15
+ type ClearConfirmationKeyResult = {
16
16
  decision: true | false;
17
17
  value: string;
18
18
  } | {
@@ -32,4 +32,5 @@ export declare function clearConfirmationKeyResult(value: string, input: string,
32
32
  * rendered inside the panel so keystrokes can never appear to disappear.
33
33
  */
34
34
  export declare function ClearConfirmPanel({ leaderActive, subagentCount, value, }: ClearConfirmPanelProps): React.ReactElement;
35
+ export {};
35
36
  //# sourceMappingURL=clear-confirm-panel.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import type React from 'react';
2
2
  import { type AnimationStyle } from './animation-style.js';
3
- export interface ComposerActivityIconProps {
3
+ interface ComposerActivityIconProps {
4
4
  status: ComposerStatus;
5
5
  /** Glyph shown when the agent is idle (the flat brand mark). */
6
6
  idleGlyph: string;
@@ -52,7 +52,7 @@ export declare function composerStatusFromState(opts: {
52
52
  * Pure + exported for testing.
53
53
  */
54
54
  export declare function composerStatusReservedWidth(status: ComposerStatus): number;
55
- export interface ComposerStatusChipProps {
55
+ interface ComposerStatusChipProps {
56
56
  status: ComposerStatus;
57
57
  /** Animation style for the working state (`'cycle'` rotates the variants). */
58
58
  animationStyle: AnimationStyle | 'cycle';
@@ -65,4 +65,5 @@ export interface ComposerStatusChipProps {
65
65
  * flat text for idle/confirm/aborting/queued and an animated working word.
66
66
  */
67
67
  export declare function ComposerStatusChip({ status, animationStyle, reservedWidth, }: ComposerStatusChipProps): React.ReactElement;
68
+ export {};
68
69
  //# sourceMappingURL=composer-status-chip.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import React from 'react';
2
2
  export type ConfirmDecision = 'yes' | 'no' | 'always' | 'deny';
3
- export interface ConfirmPromptProps {
3
+ interface ConfirmPromptProps {
4
4
  toolName: string;
5
5
  input: unknown;
6
6
  suggestedPattern: string;
@@ -38,4 +38,5 @@ export declare function confirmButtonSegments(suggestedPattern: string): Array<{
38
38
  */
39
39
  export declare function payloadDiff(input: unknown): string;
40
40
  export declare function ConfirmPrompt({ toolName, input, suggestedPattern, onDecision, onEnableYolo, destructive, boundaryReason, }: ConfirmPromptProps): React.ReactElement;
41
+ export {};
41
42
  //# sourceMappingURL=confirm-prompt.d.ts.map
@@ -64,9 +64,10 @@ export interface ContextPanelData {
64
64
  leaderStatus: string;
65
65
  memoryContext: MemoryContextMonitorState;
66
66
  }
67
- export interface ContextPanelProps {
67
+ interface ContextPanelProps {
68
68
  data: ContextPanelData;
69
69
  onClose: () => void;
70
70
  }
71
71
  export declare function ContextPanel({ data, onClose }: ContextPanelProps): React.ReactElement;
72
+ export {};
72
73
  //# sourceMappingURL=context-panel.d.ts.map
@@ -1,12 +1,12 @@
1
1
  import React from 'react';
2
- export type ContinueDecision = 'proceed' | 'edit' | 'cancel';
2
+ type ContinueDecision = 'proceed' | 'edit' | 'cancel';
3
3
  /**
4
4
  * Return the visible auto-proceed countdown in seconds, or null when the user
5
5
  * must make an explicit choice. Keeping this as a tiny pure helper gives tests
6
6
  * a stable contract without driving Ink timers.
7
7
  */
8
8
  export declare function continueAutoProceedSeconds(grounded: boolean, delayMs: number): number | null;
9
- export interface ContinueConfirmPanelProps {
9
+ interface ContinueConfirmPanelProps {
10
10
  /** One-line summary of what "continue" resolved to. */
11
11
  label: string;
12
12
  /** The full instruction that will be sent in place of the bare "continue". */
@@ -44,4 +44,5 @@ export interface ContinueConfirmPanelProps {
44
44
  * `onDecision` is guarded by the caller so only the first decision wins.
45
45
  */
46
46
  export declare function ContinueConfirmPanel({ label, instruction, source, grounded, delayMs, onDecision, }: ContinueConfirmPanelProps): React.ReactElement;
47
+ export {};
47
48
  //# sourceMappingURL=continue-confirm-panel.d.ts.map
@@ -1,7 +1,7 @@
1
1
  /** F11 — project-level AutonomousCoordinator monitor. */
2
2
  import type React from 'react';
3
3
  import type { State } from '../app-state.js';
4
- export interface CoordinatorPanelProps {
4
+ interface CoordinatorPanelProps {
5
5
  coordinator: State['coordinator'];
6
6
  /** 1s clock tick so elapsed times stay live. */
7
7
  nowTick: number;
@@ -9,4 +9,5 @@ export interface CoordinatorPanelProps {
9
9
  onClose: () => void;
10
10
  }
11
11
  export declare function CoordinatorPanel({ coordinator, nowTick, onClose, }: CoordinatorPanelProps): React.ReactElement;
12
+ export {};
12
13
  //# sourceMappingURL=coordinator-panel.d.ts.map
@@ -28,10 +28,11 @@ export interface CronListResult {
28
28
  jobs: CronJobView[];
29
29
  error?: string | undefined;
30
30
  }
31
- export interface CronJobsMonitorProps {
31
+ interface CronJobsMonitorProps {
32
32
  /** Async callback that returns the current cron list (wired to cron_list tool). */
33
33
  getCronJobs: () => Promise<CronListResult>;
34
34
  onCancel?: ((name: string) => Promise<string | null>) | undefined;
35
35
  }
36
36
  export declare function CronJobsMonitor({ getCronJobs, onCancel, }: CronJobsMonitorProps): React.ReactElement;
37
+ export {};
37
38
  //# sourceMappingURL=cron-jobs.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import type { DesignKitEntry } from '@wrongstack/core/types';
2
2
  import type React from 'react';
3
- export interface DesignPickerProps {
3
+ interface DesignPickerProps {
4
4
  kits: DesignKitEntry[];
5
5
  selected: number;
6
6
  stack: string;
@@ -14,4 +14,5 @@ export interface DesignPickerProps {
14
14
  * navigable on small terminals.
15
15
  */
16
16
  export declare function DesignPicker({ kits, selected, stack }: DesignPickerProps): React.ReactElement;
17
+ export {};
17
18
  //# sourceMappingURL=design-picker.d.ts.map
@@ -1,6 +1,6 @@
1
1
  import type React from 'react';
2
- export type EnhanceDecision = 'refined' | 'english' | 'original' | 'edit' | 'retry' | 'cancel';
3
- export interface RefiningPanelProps {
2
+ type EnhanceDecision = 'refined' | 'english' | 'original' | 'edit' | 'retry' | 'cancel';
3
+ interface RefiningPanelProps {
4
4
  /** Prompt currently being rewritten. */
5
5
  original: string;
6
6
  /** Time spent in the refiner request so far. */
@@ -12,7 +12,7 @@ export interface RefiningPanelProps {
12
12
  /** Model name running the refinement (e.g. "gpt-4o"). */
13
13
  model?: string | undefined;
14
14
  }
15
- export interface EnhancePanelProps {
15
+ interface EnhancePanelProps {
16
16
  /** The user's original message. */
17
17
  original: string;
18
18
  /** Refined in the user's original language. */
@@ -58,4 +58,5 @@ export declare function RefiningPanel({ original, elapsedMs, pulseFrame, provide
58
58
  * mode while still making auto-send behavior explicit.
59
59
  */
60
60
  export declare function EnhancePanel({ original, refined, english, durationMs, delayMs, enhanceLanguage, onDecision, onTick, providerId, model, }: EnhancePanelProps): React.ReactElement;
61
+ export {};
61
62
  //# sourceMappingURL=enhance-panel.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
- export interface EscConfirmPromptProps {
2
+ interface EscConfirmPromptProps {
3
3
  runningTools: string[];
4
4
  subagentCount: number;
5
5
  onConfirm: () => void;
@@ -14,4 +14,5 @@ export interface EscConfirmPromptProps {
14
14
  * - n / Esc → cancel, let the agent continue
15
15
  */
16
16
  export declare function EscConfirmPrompt({ runningTools, subagentCount, onConfirm, onCancel, }: EscConfirmPromptProps): React.ReactElement;
17
+ export {};
17
18
  //# sourceMappingURL=esc-confirm-prompt.d.ts.map
@@ -1,5 +1,5 @@
1
1
  import type React from 'react';
2
- export interface ExitConfirmPanelProps {
2
+ interface ExitConfirmPanelProps {
3
3
  leaderActive: boolean;
4
4
  subagentCount: number;
5
5
  backgroundCount?: number | undefined;
@@ -8,7 +8,7 @@ export interface ExitConfirmationKey {
8
8
  escape?: boolean | undefined;
9
9
  return?: boolean | undefined;
10
10
  }
11
- export type ExitConfirmationDecision = true | false | null;
11
+ type ExitConfirmationDecision = true | false | null;
12
12
  /**
13
13
  * Deterministic keyboard state machine shared by the App input router and
14
14
  * regression tests. Returning `null` means "keep waiting" — the panel
@@ -26,4 +26,5 @@ export declare function exitConfirmationDecision(input: string, key: ExitConfirm
26
26
  * before they press Enter.
27
27
  */
28
28
  export declare function ExitConfirmPanel({ leaderActive, subagentCount, backgroundCount, }: ExitConfirmPanelProps): React.ReactElement;
29
+ export {};
29
30
  //# sourceMappingURL=exit-confirm-panel.d.ts.map
@@ -1,7 +1,6 @@
1
1
  import type React from 'react';
2
2
  export { F_KEY_PANEL_ENTRIES as F_KEY_ENTRIES } from '../f-key-panels.js';
3
- export type { FKeyPanelEntry as FKeyEntry } from '../f-key-panels.js';
4
- export interface FKeyPickerProps {
3
+ interface FKeyPickerProps {
5
4
  selected: number;
6
5
  }
7
6
  /**
@@ -3,7 +3,7 @@ export interface FallbackCandidate {
3
3
  providerId: string;
4
4
  model: string;
5
5
  }
6
- export interface FallbackOverlayProps {
6
+ interface FallbackOverlayProps {
7
7
  requestId: string;
8
8
  from: {
9
9
  providerId: string;
@@ -35,4 +35,5 @@ export interface FallbackOverlayProps {
35
35
  * is already visible elsewhere.
36
36
  */
37
37
  export declare function FallbackOverlay({ from, status, candidates, autoSwitchSeconds, selected, onChoose, onMove, }: FallbackOverlayProps): React.ReactElement;
38
+ export {};
38
39
  //# sourceMappingURL=fallback-overlay.d.ts.map