@wrongstack/tui 1.0.29 → 1.0.32

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,215 @@
1
+ import type { AutonomyStage } from '@wrongstack/core/types';
2
+ import type { SddBoardSnapshot } from '@wrongstack/sdd';
3
+ import type { State } from './app-state.js';
4
+ import type { GoalSummary } from './app-state-core-types.js';
5
+ import type { FleetEntry } from './app-state-fleet.js';
6
+ import type { AutonomyOption, ShadowState, WorktreeRow } from './ui-contracts.js';
7
+ export type AppActionWorkflows = {
8
+ type: 'autonomyPickerOpen';
9
+ options: AutonomyOption[];
10
+ } | {
11
+ type: 'autonomyPickerClose';
12
+ } | {
13
+ type: 'autonomyPickerMove';
14
+ delta: number;
15
+ } | {
16
+ type: 'autonomyPickerHint';
17
+ text?: string | undefined;
18
+ } | {
19
+ type: 'shadowOpen';
20
+ shadow: ShadowState;
21
+ } | {
22
+ type: 'shadowClose';
23
+ } | {
24
+ type: 'shadowUpdate';
25
+ shadow: ShadowState;
26
+ } | {
27
+ type: 'shadowHint';
28
+ text?: string | undefined;
29
+ } | {
30
+ type: 'bugHuntContinueOpen';
31
+ info: NonNullable<State['bugHuntContinue']>;
32
+ } | {
33
+ type: 'bugHuntContinueClose';
34
+ } | {
35
+ type: 'bugHuntRunningOpen';
36
+ info: NonNullable<State['bugHuntRunning']>;
37
+ } | {
38
+ type: 'bugHuntRunningClose';
39
+ } | {
40
+ type: 'fleetSeed';
41
+ entries: FleetEntry[];
42
+ cost: number;
43
+ } | {
44
+ type: 'fleetSpawn';
45
+ id: string;
46
+ name?: string | undefined;
47
+ provider?: string | undefined;
48
+ model?: string | undefined;
49
+ transcriptPath?: string | undefined;
50
+ } | {
51
+ type: 'fleetStart';
52
+ id: string;
53
+ taskId?: string | undefined;
54
+ } | {
55
+ type: 'fleetDelta';
56
+ id: string;
57
+ text: string;
58
+ } | {
59
+ type: 'fleetMessage';
60
+ id: string;
61
+ text: string;
62
+ } | {
63
+ type: 'fleetTool';
64
+ id: string;
65
+ name?: string | undefined;
66
+ ok?: boolean | undefined;
67
+ durationMs?: number | undefined;
68
+ outputBytes?: number | undefined;
69
+ outputLines?: number | undefined;
70
+ } | {
71
+ type: 'fleetToolStart';
72
+ id: string;
73
+ name: string;
74
+ } | {
75
+ type: 'fleetToolEnd';
76
+ id: string;
77
+ } | {
78
+ type: 'fleetUsage';
79
+ id: string;
80
+ input: number;
81
+ output: number;
82
+ cacheRead: number;
83
+ cacheWrite: number;
84
+ } | {
85
+ type: 'fleetDone';
86
+ id: string;
87
+ status: FleetEntry['status'];
88
+ iterations: number;
89
+ toolCalls: number;
90
+ /** Human-readable failure reason, e.g. "provider_auth", "rate_limit", "timeout". */
91
+ failureReason?: string | undefined;
92
+ } | {
93
+ type: 'fleetRemove';
94
+ id: string;
95
+ } | {
96
+ type: 'fleetBudgetWarning';
97
+ id: string;
98
+ kind: string;
99
+ used: number;
100
+ limit: number;
101
+ } | {
102
+ type: 'fleetBudgetExtended';
103
+ id: string;
104
+ totalExtensions: number;
105
+ } | {
106
+ type: 'fleetCtxPct';
107
+ id: string;
108
+ load: number;
109
+ tokens: number;
110
+ maxContext: number;
111
+ /** Estimated USD cost of the context tokens (optional — computed when pricing known). */
112
+ ctxCost?: number | undefined;
113
+ } | {
114
+ type: 'fleetCost';
115
+ cost: number;
116
+ input?: number | undefined;
117
+ output?: number | undefined;
118
+ /** Per-subagent usage keyed by subagent id (from the director snapshot). */
119
+ perAgent?: Record<string, {
120
+ cost: number;
121
+ }>;
122
+ } | {
123
+ type: 'fleetConcurrency';
124
+ n: number;
125
+ } | {
126
+ type: 'eternalStage';
127
+ stage: AutonomyStage;
128
+ } | {
129
+ type: 'goalSummary';
130
+ summary: GoalSummary;
131
+ } | {
132
+ type: 'goalRunInit';
133
+ title: string;
134
+ } | {
135
+ type: 'goalRunPhaseUpdate';
136
+ phaseId: string;
137
+ name: string;
138
+ status: string;
139
+ completedTasks: number;
140
+ totalTasks: number;
141
+ startedAt?: number | undefined;
142
+ } | {
143
+ type: 'goalRunRunningPhases';
144
+ phaseIds: string[];
145
+ } | {
146
+ type: 'goalRunElapsed';
147
+ ms: number;
148
+ } | {
149
+ type: 'goalRunTaskActive';
150
+ phaseId: string;
151
+ taskId: string;
152
+ title: string;
153
+ agent?: string | undefined;
154
+ /** True when the task starts, false when it completes/fails. */
155
+ active: boolean;
156
+ } | {
157
+ /** A task finished successfully; the reducer owns the count arithmetic. */
158
+ type: 'goalRunTaskCompleted';
159
+ phaseId: string;
160
+ taskId: string;
161
+ } | {
162
+ /** Attach the assigned agent to an already-active task (reducer-owned). */
163
+ type: 'goalRunTaskAgent';
164
+ phaseId: string;
165
+ taskId: string;
166
+ agent?: string | undefined;
167
+ } | {
168
+ type: 'goalRunMonitorToggle';
169
+ } | {
170
+ type: 'goalRunReset';
171
+ } | {
172
+ type: 'sddBoardSnapshot';
173
+ snapshot: SddBoardSnapshot;
174
+ } | {
175
+ type: 'sddBoardFocusNext';
176
+ } | {
177
+ type: 'sddBoardFocusPrev';
178
+ } | {
179
+ type: 'worktreeUpsert';
180
+ handleId: string;
181
+ row: Partial<WorktreeRow & {
182
+ baseBranch?: string | undefined;
183
+ }>;
184
+ baseBranch?: string | undefined;
185
+ } | {
186
+ type: 'worktreeRemove';
187
+ handleId: string;
188
+ } | {
189
+ type: 'collabBugFound';
190
+ sessionId: string;
191
+ bugId: string;
192
+ severity: string;
193
+ description: string;
194
+ } | {
195
+ type: 'collabPlanEmitted';
196
+ sessionId: string;
197
+ planId: string;
198
+ riskScore: string;
199
+ phaseCount: number;
200
+ } | {
201
+ type: 'collabEvalComplete';
202
+ sessionId: string;
203
+ evalId: string;
204
+ verdict: string;
205
+ score: number;
206
+ } | {
207
+ type: 'collabSessionDone';
208
+ sessionId: string;
209
+ verdict: 'approve' | 'needs_revision' | 'reject';
210
+ } | {
211
+ type: 'collabSubagentSpawned';
212
+ subagentId: string;
213
+ role: string;
214
+ };
215
+ //# sourceMappingURL=app-action-workflows.d.ts.map
@@ -0,0 +1,8 @@
1
+ import type { ReactNode } from 'react';
2
+ /** Main chat column beside the independent sidebar viewport. */
3
+ export declare function AppMainColumn({ width, rows, children, }: {
4
+ width: number;
5
+ rows: number;
6
+ children: ReactNode;
7
+ }): import("react").JSX.Element;
8
+ //# sourceMappingURL=app-main-column.d.ts.map
@@ -107,7 +107,7 @@ export type Settings = {
107
107
  * the CLI boot menu (persistSystemPromptVariant), not the TUI picker, so
108
108
  * there is no saveSettings counterpart.
109
109
  */
110
- systemPromptVariant?: 'lite' | 'default' | 'pro' | undefined;
110
+ systemPromptVariant?: 'lite' | 'default' | 'pro' | 'scout' | undefined;
111
111
  animationStyle: 'rainbow' | 'wave' | 'pulse' | 'dots' | 'breathe' | 'static' | 'cycle';
112
112
  /** When true, read tool includes codebase-index symbols alongside file content. */
113
113
  readSymbols: boolean;
@@ -250,7 +250,17 @@ export type State = PanelState & {
250
250
  currentRound: number;
251
251
  totalRounds?: number | undefined;
252
252
  } | null;
253
- /** Incremented on /clear so the context chip re-reads from agent.ctx tokens. */
253
+ /**
254
+ * Monotonic re-arm key for the context chip: the statusline and `/context`
255
+ * read it so they can re-derive their numbers instead of keeping whatever
256
+ * they last rendered.
257
+ *
258
+ * Bumped by `resetContextChip` (dialogs.ts), by `/clear`, and on BOTH
259
+ * /resume completion branches — with a `contextSnapshot` (reducers/composer.ts)
260
+ * and without one. The no-snapshot branch still bumps so the chip stops
261
+ * showing the previous session's tokens rather than sitting on a value that
262
+ * described a conversation the user already left.
263
+ */
254
264
  contextChipVersion: number;
255
265
  /** Live fleet state: per-subagent entries from FleetBus events. Keyed by subagentId. */
256
266
  fleet: Record<string, FleetEntry>;
@@ -1,6 +1,7 @@
1
1
  import type React from 'react';
2
2
  import type { AppViewProps } from './app-view-contract.js';
3
3
  import type { usePlanPanelData } from './components/plan-panel.js';
4
+ import type { QuotaCardModel } from './components/sidebar-quota-model.js';
4
5
  import type { useSidebarConnections, useSidebarKanban, useSidebarProcessList, useSidebarWrongProxy } from './hooks/use-sidebar-panel-data.js';
5
6
  import type { PanelId } from './ui-contracts.js';
6
7
  interface AppViewSidebarProps {
@@ -30,7 +31,9 @@ interface AppViewSidebarProps {
30
31
  /** Live probe data from `useSidebarWrongProxy`. `null` while the panel
31
32
  * is bootstrapping or the daemon URL hasn't produced a response yet. */
32
33
  sidebarWrongProxyData: ReturnType<typeof useSidebarWrongProxy>;
34
+ /** PLAN QUOTA card for the active provider/model (`useProviderQuotaCard`). */
35
+ sidebarQuotaCard?: QuotaCardModel | undefined;
33
36
  }
34
- export declare function AppViewSidebar({ host, runtime, sidebarWidth, sidebarContentWidth, sidebarScrollOffset, sidebarMaxScroll, sidebarSlotVisible, hiddenSidebarPanelCount, sidebarProcessData, sidebarConnectionsData, sidebarKanbanData, sidebarPlanData, sidebarWrongProxyEnabled, sidebarWrongProxyData, }: AppViewSidebarProps): React.ReactElement | null;
37
+ export declare function AppViewSidebar({ host, runtime, sidebarWidth, sidebarContentWidth, sidebarScrollOffset, sidebarMaxScroll, sidebarSlotVisible, hiddenSidebarPanelCount, sidebarProcessData, sidebarConnectionsData, sidebarKanbanData, sidebarPlanData, sidebarWrongProxyEnabled, sidebarWrongProxyData, sidebarQuotaCard, }: AppViewSidebarProps): React.ReactElement | null;
35
38
  export {};
36
39
  //# sourceMappingURL=app-view-sidebar.d.ts.map
@@ -1,19 +1,3 @@
1
- /**
2
- * tool-group — Consecutive same-tool entries grouped under a single header.
3
- *
4
- * Instead of rendering N separate tool cards for N consecutive `read` (or
5
- * `bash`, `grep`, …) calls, this module collapses them into one visual group:
6
- *
7
- * ╭─ ◆ read ×5 · 0.5s
8
- * │ [1] path/to/a.ts …
9
- * │ [2] path/to/b.tsx …
10
- * │ …
11
- * ╰──────────────────────────────────────────
12
- *
13
- * The group header carries a count badge and aggregated stats; each sub-entry
14
- * keeps its own arg preview, output, diff, and timing. Non-tool entries and
15
- * isolated tool entries pass through unchanged.
16
- */
17
1
  import type React from 'react';
18
2
  import type { ToolResultViewMode } from '../../tool-result-view-mode.js';
19
3
  import type { HistoryEntry } from './types.js';
@@ -7,6 +7,7 @@ import type { FleetEntry } from '../app-state-fleet.js';
7
7
  import type { HeapSample } from '../heap-watchdog.js';
8
8
  import type { PanelId } from '../ui-contracts.js';
9
9
  import type { LiveSessionEntry } from './sessions-panel.js';
10
+ import type { QuotaCardModel } from './sidebar-quota-model.js';
10
11
  interface SidebarContentProps {
11
12
  /** Live context window data from useStatusbarViewModel. */
12
13
  contextWindow: {
@@ -21,6 +22,12 @@ interface SidebarContentProps {
21
22
  * the spend is hitting the prompt cache without opening `/context`.
22
23
  */
23
24
  cacheStats?: CacheStats | undefined;
25
+ /**
26
+ * Subscription quota of the active provider, narrowed to the active model,
27
+ * plus one row per other provider that has reported. Absent — and the card
28
+ * not rendered — when no provider meters a plan (API-key sessions).
29
+ */
30
+ quota?: QuotaCardModel | undefined;
24
31
  /** Fleet entries (leader + subagents) from useStatusbarViewModel. */
25
32
  entries: Record<string, FleetEntry>;
26
33
  /** Fleet counts summary. */
@@ -80,6 +87,6 @@ interface SidebarContentProps {
80
87
  */
81
88
  effectiveSidebarRoutes?: ReadonlySet<PanelId> | undefined;
82
89
  }
83
- export declare function SidebarContent({ contextWindow, contextBreakdown, cacheStats, entries, fleetCounts, provider, model, themeName, width, scrollOffset, focused, todos, showSwarmSection, liveSessions, resumeSessions, currentSessionId, processMemory, cpuPercent, cpuHistory, rssHistory, heapHistory, totalMem, effectiveSidebarRoutes, }: SidebarContentProps): React.ReactElement;
90
+ export declare function SidebarContent({ contextWindow, contextBreakdown, cacheStats, quota, entries, fleetCounts, provider, model, themeName, width, scrollOffset, focused, todos, showSwarmSection, liveSessions, resumeSessions, currentSessionId, processMemory, cpuPercent, cpuHistory, rssHistory, heapHistory, totalMem, effectiveSidebarRoutes, }: SidebarContentProps): React.ReactElement;
84
91
  export { contextSpectrum, isCurrentSession } from './sidebar-presentation.js';
85
92
  //# sourceMappingURL=sidebar-content.d.ts.map
@@ -0,0 +1,59 @@
1
+ import { type ProviderQuotaSnapshot } from '@wrongstack/core/quota';
2
+ export type QuotaSeverity = 'ok' | 'warn' | 'critical';
3
+ export interface QuotaWindowRow {
4
+ kind: 'window';
5
+ label: string;
6
+ usedPercent: number;
7
+ resetIn?: string | undefined;
8
+ reached: boolean;
9
+ severity: QuotaSeverity;
10
+ }
11
+ export type QuotaCardRow = {
12
+ kind: 'provider';
13
+ providerId: string;
14
+ planLabel?: string | undefined;
15
+ } | {
16
+ kind: 'meter';
17
+ title: string;
18
+ } | QuotaWindowRow | {
19
+ kind: 'pace';
20
+ exhaustsIn: string;
21
+ } | {
22
+ kind: 'credits';
23
+ text: string;
24
+ empty: boolean;
25
+ } | {
26
+ kind: 'other';
27
+ providerId: string;
28
+ label: string;
29
+ usedPercent: number;
30
+ reached: boolean;
31
+ severity: QuotaSeverity;
32
+ } | {
33
+ kind: 'more';
34
+ count: number;
35
+ };
36
+ export interface QuotaCardModel {
37
+ /**
38
+ * Header badge: the most-consumed window among the ones this card actually
39
+ * renders, else of anyone. It must name a window in {@link rows} — the badge
40
+ * is the first thing read, and a card whose headline is a folded-away bucket
41
+ * contradicts its own body (and colours itself from that hidden window).
42
+ */
43
+ headline?: {
44
+ label: string;
45
+ usedPercent: number;
46
+ reached: boolean;
47
+ severity: QuotaSeverity;
48
+ };
49
+ /** At most {@link SIDEBAR_QUOTA_BODY_ROWS} rows. */
50
+ rows: QuotaCardRow[];
51
+ }
52
+ /**
53
+ * Build the card for `activeProviderId` running `activeModel`.
54
+ *
55
+ * Returns undefined when no provider has reported anything — the card is not
56
+ * rendered at all for API-key sessions, which have no plan to meter.
57
+ */
58
+ export declare function buildQuotaCardModel(snapshots: readonly ProviderQuotaSnapshot[], activeProviderId: string | undefined, activeModel: string | undefined, now?: number, budget?: number): QuotaCardModel | undefined;
59
+ //# sourceMappingURL=sidebar-quota-model.d.ts.map
@@ -0,0 +1,7 @@
1
+ import type React from 'react';
2
+ import type { QuotaCardModel } from './sidebar-quota-model.js';
3
+ export declare function QuotaCard({ quota, innerWidth, }: {
4
+ quota: QuotaCardModel;
5
+ innerWidth: number;
6
+ }): React.ReactElement;
7
+ //# sourceMappingURL=sidebar-quota.d.ts.map
@@ -39,6 +39,7 @@ export declare const STATUSLINE_ICONS: {
39
39
  readonly tools: string;
40
40
  readonly version: string;
41
41
  readonly working_dir: string;
42
+ readonly sandbox: string;
42
43
  readonly yolo: string;
43
44
  };
44
45
  export declare const COMPACT_THRESHOLD = 50;
@@ -100,7 +100,7 @@ export interface StatusBarRailBuildParams {
100
100
  /** Pre-built memory-context chips for the async rail. */
101
101
  memoryDetailChips: RailSpanEntry[];
102
102
  /** Active system-prompt variant (Lite / Standard / Pro) — identity chip. */
103
- promptVariant?: 'lite' | 'default' | 'pro' | undefined;
103
+ promptVariant?: 'lite' | 'default' | 'pro' | 'scout' | undefined;
104
104
  }
105
105
  /**
106
106
  * Translate a chip's density setting into the level bounds the rail fitter
@@ -360,7 +360,7 @@ export interface StatusBarProps {
360
360
  * line 1 (workspace & identity) so the session's prompt density is visible
361
361
  * at a glance. Sourced from `config.systemPrompt.variant`.
362
362
  */
363
- promptVariant?: 'lite' | 'default' | 'pro' | undefined;
363
+ promptVariant?: 'lite' | 'default' | 'pro' | 'scout' | undefined;
364
364
  /**
365
365
  * Live debug-stream telemetry — pushed into the TUI reducer by the
366
366
  * throttled callback from stream-debug-state.ts. When non-null, renders
@@ -0,0 +1,176 @@
1
+ import type { AppProps } from './app-props.js';
2
+ export declare function resolveControllerProps(props: AppProps): {
3
+ agent: import("@wrongstack/core/agent").Agent;
4
+ slashRegistry: import("@wrongstack/core/registry").SlashCommandRegistry;
5
+ secretInputController: {
6
+ readSecret(prompt: string): Promise<string>;
7
+ readText?(prompt: string): Promise<string>;
8
+ } | undefined;
9
+ attachments: import("@wrongstack/core/types").AttachmentStore;
10
+ events: import("@wrongstack/core/kernel").EventBus;
11
+ tokenCounter: import("@wrongstack/core/types").TokenCounter | undefined;
12
+ model: string;
13
+ banner: boolean;
14
+ queueStore: import("@wrongstack/core/storage").QueueStore | undefined;
15
+ queueStoreFor: ((sessionId: string) => import("@wrongstack/core/storage").QueueStore | undefined) | undefined;
16
+ onQueueChange: ((items: string[]) => void) | undefined;
17
+ yolo: boolean;
18
+ chime: boolean;
19
+ confirmExit: boolean;
20
+ titleController: {
21
+ setEnabled: (on: boolean) => void;
22
+ setModel: (model: string) => void;
23
+ } | undefined;
24
+ mouse: boolean;
25
+ capability: import("@wrongstack/core/utils").TerminalCapability | undefined;
26
+ enhanceEnabled: boolean;
27
+ enhanceController: {
28
+ enabled: boolean;
29
+ setEnabled: (enabled: boolean) => void;
30
+ } | undefined;
31
+ midRunSendPicker: boolean;
32
+ enhanceDelayMs: number;
33
+ getAutonomy: (() => 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel') | undefined;
34
+ getEternalEngine: (() => import('@wrongstack/core/execution').EternalAutonomyEngine | null) | undefined;
35
+ getParallelEngine: (() => import('@wrongstack/core/execution').ParallelEternalEngine | null) | undefined;
36
+ getSddRun: (() => import("@wrongstack/sdd").SddRunControl | null) | undefined;
37
+ subscribeGoal: ((handler: (event: string, payload: unknown) => void) => () => void) | undefined;
38
+ appVersion: string | undefined;
39
+ provider: string | undefined;
40
+ family: string | undefined;
41
+ keyTail: string | undefined;
42
+ profile: string | undefined;
43
+ profileConfigPath: string | undefined;
44
+ autonomyAgents: import("./history-entry.js").AutonomyAgentStatus[] | undefined;
45
+ toolCount: number | undefined;
46
+ getPickableProviders: (() => Promise<import("./ui-contracts.js").ProviderOption[]>) | undefined;
47
+ switchProviderAndModel: ((providerId: string, modelId: string) => string | null | Promise<string | null>) | undefined;
48
+ getSettings: (() => import("./app-settings-type.js").Settings) | undefined;
49
+ saveSettings: ((s: import("./app-settings-type.js").Settings) => string | null | Promise<string | null>) | undefined;
50
+ getPluginItems: (() => import("./ui-contracts.js").PluginPickerItem[]) | undefined;
51
+ onPluginToggle: ((name: string) => Promise<{
52
+ items: import("./ui-contracts.js").PluginPickerItem[];
53
+ message?: string | undefined;
54
+ error?: string | undefined;
55
+ }>) | undefined;
56
+ getMcpServers: (() => import("./ui-contracts.js").McpPickerItem[]) | undefined;
57
+ onMcpToggle: ((name: string) => Promise<{
58
+ items: import("./ui-contracts.js").McpPickerItem[];
59
+ message?: string | undefined;
60
+ error?: string | undefined;
61
+ }>) | undefined;
62
+ onMcpRestart: ((name: string) => Promise<{
63
+ items: import("./ui-contracts.js").McpPickerItem[];
64
+ message?: string | undefined;
65
+ error?: string | undefined;
66
+ }>) | undefined;
67
+ getToolsItems: (() => import("./ui-contracts.js").ToolPickerItem[]) | undefined;
68
+ onToolToggle: ((name: string) => Promise<{
69
+ items: import("./ui-contracts.js").ToolPickerItem[];
70
+ message?: string | undefined;
71
+ error?: string | undefined;
72
+ }>) | undefined;
73
+ getBrainData: (() => {
74
+ riskLevel: import("./brain-contracts.js").BrainRiskLevel;
75
+ log: Array<{
76
+ kind: string;
77
+ question: string;
78
+ outcome: string;
79
+ age: string;
80
+ }>;
81
+ }) | undefined;
82
+ onBrainRiskLevel: ((level: import("./brain-contracts.js").BrainRiskLevel) => string | undefined) | undefined;
83
+ brainPanelHost: import("./brain-panel-model.js").BrainPanelHost | undefined;
84
+ subagentModelsHost: import("./subagent-models-panel-model.js").SubagentModelsPanelHost | undefined;
85
+ getShadowData: (() => {
86
+ activeId: string | null;
87
+ running: boolean;
88
+ model: string;
89
+ intervalMs: number;
90
+ }) | undefined;
91
+ onShadowStart: (() => Promise<string | undefined>) | undefined;
92
+ onShadowStop: (() => Promise<string | undefined>) | undefined;
93
+ authHost: import("./auth-panel-model.js").AuthPanelHost | undefined;
94
+ getSuggestions: (() => string[]) | undefined;
95
+ getAutoSuggestions: (() => string[]) | undefined;
96
+ autonomyNextPrompt: string | undefined;
97
+ setSuggestions: ((steps: string[]) => void) | undefined;
98
+ switchAutonomy: ((mode: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel') => string | null) | undefined;
99
+ effectiveMaxContext: number | undefined;
100
+ onExit: (code: number) => void;
101
+ director: import("@wrongstack/core/coordination").Director | null;
102
+ getDirector: (() => import("@wrongstack/core/coordination").Director | null) | undefined;
103
+ onClearHistory: ((dispatch: React.Dispatch<{
104
+ type: 'clearHistory';
105
+ model?: string | undefined;
106
+ provider?: string | undefined;
107
+ } | {
108
+ type: 'resetContextChip';
109
+ } | {
110
+ type: 'streamReset';
111
+ } | {
112
+ type: 'toolStreamClear';
113
+ }>) => void) | undefined;
114
+ listSessions: ((limit?: number) => Promise<import("./app-state-core-types.js").ResumeSessionEntry[]>) | undefined;
115
+ fleetStreamController: {
116
+ mode: import("@wrongstack/core/types").FleetChatVerbosity;
117
+ setMode: (mode: import("@wrongstack/core/types").FleetChatVerbosity) => void;
118
+ } | undefined;
119
+ interruptController: import("./hooks/use-session-interrupt-controller.js").SessionInterruptController | undefined;
120
+ statuslineHiddenItems: import("@wrongstack/core/statusline").StatuslineItem[];
121
+ setStatuslineHiddenItems: (items: import("./ui-contracts.js").StatuslineItem[]) => void;
122
+ saveStatuslineHiddenItems: (items: import("./ui-contracts.js").StatuslineItem[]) => Promise<void>;
123
+ statuslineLines: Partial<Record<import("@wrongstack/core/statusline").StatuslineItem, import("@wrongstack/core/statusline").StatuslineLine>> | undefined;
124
+ setStatuslineLines: ((lines: import("@wrongstack/core/statusline").StatuslineLines) => void) | undefined;
125
+ saveStatuslineLines: ((lines: import("@wrongstack/core/statusline").StatuslineLines) => Promise<void>) | undefined;
126
+ statuslineDensities: Partial<Record<import("@wrongstack/core/statusline").StatuslineItem, import("@wrongstack/core/statusline").StatuslineDensity>> | undefined;
127
+ setStatuslineDensities: ((densities: import("@wrongstack/core/statusline").StatuslineDensities) => void) | undefined;
128
+ saveStatuslineDensities: ((densities: import("@wrongstack/core/statusline").StatuslineDensities) => Promise<void>) | undefined;
129
+ statuslineOrder: import("@wrongstack/core/statusline").StatuslineOrder | undefined;
130
+ setStatuslineOrder: ((order: import("@wrongstack/core/statusline").StatuslineOrder) => void) | undefined;
131
+ saveStatuslineOrder: ((order: import("@wrongstack/core/statusline").StatuslineOrder) => Promise<void>) | undefined;
132
+ agentsMonitorController: {
133
+ visible: boolean;
134
+ setVisible: (visible: boolean) => void;
135
+ } | undefined;
136
+ initialGoal: string | undefined;
137
+ initialAsk: string | undefined;
138
+ sessionsDir: string | undefined;
139
+ modeLabel: string | undefined;
140
+ getModeLabel: (() => string) | undefined;
141
+ getModes: (() => Promise<{
142
+ modes: import('@wrongstack/core/types').Mode[];
143
+ activeId: string | null;
144
+ }>) | undefined;
145
+ registerDebugStreamCallback: ((cb: (stats: {
146
+ chunkCount: number;
147
+ lastChunkSize: number;
148
+ lastDeltaMs: number;
149
+ totalBytes: number;
150
+ lastChunkAt: string;
151
+ }) => void) => void) | undefined;
152
+ restoreDebugStreamCallback: (() => void) | undefined;
153
+ restoredMessages: import("@wrongstack/core/types").Message[] | undefined;
154
+ restoredToolCalls: {
155
+ name: string;
156
+ id: string;
157
+ durationMs: number;
158
+ ok: boolean;
159
+ outputBytes?: number | undefined;
160
+ outputTokens?: number | undefined;
161
+ outputLines?: number | undefined;
162
+ }[] | undefined;
163
+ restoredEvents: import("@wrongstack/core/types").SessionEvent[] | undefined;
164
+ getProjectPickerItems: (() => Promise<import('./ui-contracts.js').ProjectPickerItem[]>) | undefined;
165
+ getLiveSessions: (() => Promise<import('./ui-contracts.js').LiveSessionEntry[]>) | undefined;
166
+ initialAgentsMonitorOpen: boolean | undefined;
167
+ onPanelOpen: {
168
+ current: ((action: string) => boolean) | null;
169
+ } | undefined;
170
+ subscribeCoordinatorEvents: ((fn: (event: import("@wrongstack/core/coordination").CoordinatorEvent) => void) => () => void) | undefined;
171
+ coordinatorRunning: boolean;
172
+ clientId: string | undefined;
173
+ memoryStore: import("@wrongstack/core/types").MemoryPort | undefined;
174
+ configStore: import("@wrongstack/core/types").ConfigStore | undefined;
175
+ };
176
+ //# sourceMappingURL=controller-props.d.ts.map
@@ -16,6 +16,7 @@
16
16
  * to move one digit. The value is recomputed whenever a new reading lands,
17
17
  * which is exactly when it can have meaningfully changed.
18
18
  */
19
+ import { type QuotaCardModel } from '../components/sidebar-quota-model.js';
19
20
  /** What the chip renders. Absent until some provider has reported. */
20
21
  export interface ProviderQuotaChip {
21
22
  /** Provider that reported this window, e.g. `openai-codex`. */
@@ -34,4 +35,13 @@ export interface ProviderQuotaChip {
34
35
  exhaustsIn?: string | undefined;
35
36
  }
36
37
  export declare function useProviderQuota(): ProviderQuotaChip | undefined;
38
+ /**
39
+ * The sidebar PLAN QUOTA card for the active provider and model.
40
+ *
41
+ * Same push-only contract as {@link useProviderQuota}: recomputed when a new
42
+ * reading lands or the active provider/model changes, never on a timer. While
43
+ * `enabled` is false (no sidebar on screen) it holds nothing and subscribes to
44
+ * nothing.
45
+ */
46
+ export declare function useProviderQuotaCard(enabled: boolean, providerId: string | undefined, model: string | undefined): QuotaCardModel | undefined;
37
47
  //# sourceMappingURL=use-provider-quota.d.ts.map
@@ -1,11 +1,11 @@
1
1
  import type { TuiSlashCommandOptions } from './tui-slash-command-options.js';
2
2
  /**
3
- * Resource-domain slash commands (/skill, the seven operational resource-menu
4
- * browsers fallback/tier/profile/provider-status/memory/worktree/git, and
3
+ * Resource-domain slash commands (/skill, operational resource-menu
4
+ * browsers fallback/tier/profile/provider-status/provider-quota/memory/worktree/git, and
5
5
  * cron/prompts), moved verbatim from useTuiSlashCommands (decomposition
6
- * Phase 2 — docs/decomposition-plan.md). Registers at pinned positions
7
- * 12–21 (tests/slash-registration-enumeration.test.ts), between the session
8
- * slice's 'mid' part (10–11) and the settings slice's 'appearance' part (22).
6
+ * Phase 2 — docs/decomposition-plan.md). Registration order is pinned by
7
+ * tests/slash-registration-enumeration.test.ts, between the session slice's
8
+ * 'mid' part and the settings slice's 'appearance' part.
9
9
  */
10
10
  export declare function useResourceSlashCommands(deps: TuiSlashCommandOptions): void;
11
11
  //# sourceMappingURL=use-resource-slash-commands.d.ts.map