@wrongstack/tui 0.265.1 → 0.268.0

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/README.md CHANGED
@@ -70,9 +70,21 @@ process.exit(exitCode);
70
70
  | `↑` / `↓` | History navigation when buffer empty |
71
71
  | `@` | File picker |
72
72
  | `/` (at start) | Slash command picker |
73
- | `Ctrl+G` | Toggle agents monitor overlay |
74
- | `Ctrl+S` | Edit autonomy settings (default mode + auto-proceed delay); also `/settings` |
75
- | `Esc` | Close any picker / dialog / agents monitor |
73
+ | `?` (empty prompt) | Keyboard shortcuts help overlay |
74
+ | `F1` | Project switcher (also `/project`) |
75
+ | `Ctrl+F` / `F2` | Toggle fleet orchestration monitor |
76
+ | `Ctrl+G` / `F3` | Toggle agents live monitor |
77
+ | `Ctrl+T` / `F4` | Toggle worktree monitor |
78
+ | `F5` | Toggle plan panel |
79
+ | `F6` | Toggle todos monitor overlay |
80
+ | `F7` | Toggle queue panel |
81
+ | `F8` | Toggle process list overlay |
82
+ | `F9` | Toggle goal panel |
83
+ | `F10` | Toggle live sessions panel |
84
+ | `F11` | Toggle coordinator monitor |
85
+ | `F12` | Open status line picker |
86
+ | `Ctrl+S` | Edit autonomy/settings defaults; also `/settings` |
87
+ | `Esc` | Close any picker / dialog / monitor / panel |
76
88
  | `Ctrl+L` | Clear screen (TUI keeps state — equivalent to scrolling) |
77
89
 
78
90
  ## Options worth knowing
@@ -95,8 +107,7 @@ State is a single `useReducer` `State` shape with discriminated-union `Action`s.
95
107
 
96
108
  ## React Version
97
109
 
98
- TUI remains on React 18 because ink v5 does not yet fully support React 19.
99
- WebUI uses React 19. This is a known divergence tracked in this codebase.
110
+ TUI uses React 19 with Ink 7, matching the package dependencies in this workspace.
100
111
 
101
112
  ## License
102
113
 
package/dist/index.d.ts CHANGED
@@ -125,6 +125,16 @@ interface ProviderOption {
125
125
  modelsLabel?: string | undefined;
126
126
  }
127
127
 
128
+ /** Context window mode options — cyclable via ←/→. */
129
+ declare const CONTEXT_MODES: readonly ["balanced", "frugal", "deep", "archival"];
130
+ type ContextMode = (typeof CONTEXT_MODES)[number];
131
+ declare const STATUSLINE_MODES: readonly ["minimum", "detailed"];
132
+ type StatuslineMode = (typeof STATUSLINE_MODES)[number];
133
+ declare const REASONING_EFFORTS: readonly ["none", "minimal", "low", "medium", "high", "xhigh", "max"];
134
+ type ReasoningEffort = (typeof REASONING_EFFORTS)[number];
135
+ declare const CACHE_TTLS: readonly ["default", "5m", "1h"];
136
+ type CacheTtl = (typeof CACHE_TTLS)[number];
137
+
128
138
  /** Thin view over a SessionSummary for the resume picker. */
129
139
  interface ResumeSessionEntry {
130
140
  id: string;
@@ -159,6 +169,8 @@ type Settings = {
159
169
  allowOutsideProjectRoot: boolean;
160
170
  contextAutoCompact: boolean;
161
171
  contextStrategy: 'hybrid' | 'intelligent' | 'selective';
172
+ contextMode: ContextMode;
173
+ maxConcurrent: number;
162
174
  logLevel: 'error' | 'warn' | 'info' | 'debug' | 'trace';
163
175
  auditLevel: 'minimal' | 'standard' | 'full';
164
176
  indexOnStart: boolean;
@@ -173,6 +185,16 @@ type Settings = {
173
185
  enhanceLanguage: 'original' | 'english';
174
186
  /** Raw SSE stream debugging — hex-dump every byte received from providers. */
175
187
  debugStream: boolean;
188
+ /** Statusline density mode. Defaults to detailed. */
189
+ statuslineMode: StatuslineMode;
190
+ /** Reasoning mode: auto (provider default) | on | off. */
191
+ reasoningMode: 'auto' | 'on' | 'off';
192
+ /** Reasoning effort level. */
193
+ reasoningEffort: ReasoningEffort;
194
+ /** Preserve thinking across turns. */
195
+ reasoningPreserve: boolean;
196
+ /** Prompt cache TTL. */
197
+ cacheTtl: CacheTtl;
176
198
  /** Where to persist settings: 'global' or 'project'. */
177
199
  configScope: 'global' | 'project';
178
200
  /** Full mouse mode: in-app managed scroll + clickable UI (SGR tracking on). */
@@ -257,6 +279,8 @@ interface RunTuiOptions {
257
279
  effectiveMaxContext?: number | undefined;
258
280
  /** Absolute project root for goal.json loading. */
259
281
  projectRoot?: string | undefined;
282
+ /** Full app config, used for HQ client publishing settings. */
283
+ appConfig?: _wrongstack_core.Config | undefined;
260
284
  /**
261
285
  * Terminal title animation on/off. Defaults to true. When false, the
262
286
  * OSC-0 window/tab title stays static (the app name only, no spinner).
@@ -363,6 +387,12 @@ interface RunTuiOptions {
363
387
  */
364
388
  statuslineHiddenItems: Array<'todos' | 'plan' | 'tasks' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost' | 'working_dir'>;
365
389
  setStatuslineHiddenItems: (items: Array<'todos' | 'plan' | 'tasks' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost' | 'working_dir'>) => void;
390
+ /**
391
+ * Atomically updates in-memory state AND persists to
392
+ * ~/.wrongstack/statusline.json. Used by the statusline picker to
393
+ * make each toggle immediately durable.
394
+ */
395
+ saveStatuslineHiddenItems: (items: Array<'todos' | 'plan' | 'tasks' | 'fleet' | 'git' | 'elapsed' | 'context' | 'cost' | 'working_dir'>) => Promise<void>;
366
396
  /**
367
397
  * Controller for the agents monitor overlay. App installs a dispatch-backed
368
398
  * setter on mount so the `/agents on|off` slash command can toggle the
@@ -372,6 +402,14 @@ interface RunTuiOptions {
372
402
  visible: boolean;
373
403
  setVisible: (visible: boolean) => void;
374
404
  } | undefined;
405
+ /**
406
+ * Mutable ref for opening TUI panels from slash commands. The slash commands
407
+ * call `onPanelOpen.current(action)` to open panels. The App sets
408
+ * `onPanelOpen.current` to its actual dispatch function on mount.
409
+ */
410
+ onPanelOpen?: {
411
+ current: ((action: string) => boolean) | null;
412
+ } | undefined;
375
413
  /**
376
414
  * If set, the App boots straight into goal mode — the text is wrapped
377
415
  * in the GOAL preamble and submitted as the first turn. Lets users
@@ -533,6 +571,40 @@ interface RunTuiOptions {
533
571
  onCoordinatorStart?: ((goal?: string) => void) | undefined;
534
572
  /** Stop the AutonomousCoordinator loop. */
535
573
  onCoordinatorStop?: (() => void) | undefined;
574
+ /** List pending coordinator tasks claimable by this terminal. */
575
+ onCoordinatorTasks?: (() => Promise<Array<{
576
+ id: string;
577
+ title: string;
578
+ priority: string;
579
+ tags: string[];
580
+ }> | null>) | undefined;
581
+ /** Claim a coordinator task. Returns description on success. */
582
+ onCoordinatorClaim?: ((taskId: string) => Promise<string | null | {
583
+ description: string;
584
+ }>) | undefined;
585
+ /** Mark a claimed task as completed. */
586
+ onCoordinatorComplete?: ((taskId: string, result?: string) => Promise<string | null>) | undefined;
587
+ /** Mark a claimed task as failed. */
588
+ onCoordinatorFail?: ((taskId: string, error: string) => Promise<string | null>) | undefined;
589
+ /** Get coordinator stats for status display. */
590
+ onCoordinatorStatus?: (() => Promise<{
591
+ goals: {
592
+ total: number;
593
+ done: number;
594
+ pending: number;
595
+ failed: number;
596
+ };
597
+ dag: {
598
+ running: number;
599
+ ready: number;
600
+ done: number;
601
+ failed: number;
602
+ };
603
+ auction: {
604
+ pending: number;
605
+ inProgress: number;
606
+ };
607
+ } | null>) | undefined;
536
608
  }
537
609
  declare function runTui(opts: RunTuiOptions): Promise<number>;
538
610