@wrongstack/tui 0.286.0 → 0.289.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 +48 -8
- package/dist/app-initial-state.d.ts +19 -2
- package/dist/app-initial-state.d.ts.map +1 -1
- package/dist/app-props.d.ts +618 -0
- package/dist/app-props.d.ts.map +1 -0
- package/dist/app-reducer.d.ts.map +1 -1
- package/dist/app-state.d.ts +63 -12
- package/dist/app-state.d.ts.map +1 -1
- package/dist/app.d.ts +5 -587
- package/dist/app.d.ts.map +1 -1
- package/dist/components/agents-monitor.d.ts +21 -34
- package/dist/components/agents-monitor.d.ts.map +1 -1
- package/dist/components/auth-panel.d.ts.map +1 -1
- package/dist/components/composer-status-chip.d.ts +55 -0
- package/dist/components/composer-status-chip.d.ts.map +1 -0
- package/dist/components/context-panel.d.ts +25 -0
- package/dist/components/context-panel.d.ts.map +1 -0
- package/dist/components/coordinator-panel.d.ts.map +1 -1
- package/dist/components/cron-jobs.d.ts +24 -0
- package/dist/components/cron-jobs.d.ts.map +1 -0
- package/dist/components/enhance-panel.d.ts +43 -18
- package/dist/components/enhance-panel.d.ts.map +1 -1
- package/dist/components/f-key-picker.d.ts.map +1 -1
- package/dist/components/fleet-monitor.d.ts.map +1 -1
- package/dist/components/fleet-panel.d.ts +11 -7
- package/dist/components/fleet-panel.d.ts.map +1 -1
- package/dist/components/goal-kanban-panel.d.ts +14 -0
- package/dist/components/goal-kanban-panel.d.ts.map +1 -0
- package/dist/components/goal-panel.d.ts.map +1 -1
- package/dist/components/history/banner.d.ts +3 -6
- package/dist/components/history/banner.d.ts.map +1 -1
- package/dist/components/history/entry.d.ts +6 -1
- package/dist/components/history/entry.d.ts.map +1 -1
- package/dist/components/history/index.d.ts +2 -2
- package/dist/components/history/index.d.ts.map +1 -1
- package/dist/components/history/replay.d.ts +14 -38
- package/dist/components/history/replay.d.ts.map +1 -1
- package/dist/components/history/tool-card.d.ts +20 -0
- package/dist/components/history/tool-card.d.ts.map +1 -0
- package/dist/components/history/types.d.ts +16 -0
- package/dist/components/history/types.d.ts.map +1 -1
- package/dist/components/history/utils.d.ts.map +1 -1
- package/dist/components/history.d.ts +1 -1
- package/dist/components/history.d.ts.map +1 -1
- package/dist/components/input.d.ts +24 -1
- package/dist/components/input.d.ts.map +1 -1
- package/dist/components/kanban-panel.d.ts +4 -1
- package/dist/components/kanban-panel.d.ts.map +1 -1
- package/dist/components/monitor-shell.d.ts +48 -0
- package/dist/components/monitor-shell.d.ts.map +1 -0
- package/dist/components/phase-panel.d.ts +1 -1
- package/dist/components/plan-panel.d.ts +1 -1
- package/dist/components/plan-panel.d.ts.map +1 -1
- package/dist/components/powerline-rail.d.ts +16 -0
- package/dist/components/powerline-rail.d.ts.map +1 -0
- package/dist/components/process-list.d.ts.map +1 -1
- package/dist/components/project-picker.d.ts +2 -1
- package/dist/components/project-picker.d.ts.map +1 -1
- package/dist/components/queue-panel.d.ts.map +1 -1
- package/dist/components/refine-failure-panel.d.ts +47 -0
- package/dist/components/refine-failure-panel.d.ts.map +1 -0
- package/dist/components/scrollable-history.d.ts +1 -1
- package/dist/components/scrollable-history.d.ts.map +1 -1
- package/dist/components/sessions-panel.d.ts.map +1 -1
- package/dist/components/settings-picker.d.ts +5 -2
- package/dist/components/settings-picker.d.ts.map +1 -1
- package/dist/components/status-bar-chips.d.ts +33 -0
- package/dist/components/status-bar-chips.d.ts.map +1 -0
- package/dist/components/status-bar.d.ts +58 -25
- package/dist/components/status-bar.d.ts.map +1 -1
- package/dist/components/statusline-detail-panel.d.ts +10 -0
- package/dist/components/statusline-detail-panel.d.ts.map +1 -0
- package/dist/components/statusline-picker.d.ts +4 -4
- package/dist/components/statusline-picker.d.ts.map +1 -1
- package/dist/components/todos-monitor.d.ts.map +1 -1
- package/dist/components/worktree-monitor.d.ts +1 -1
- package/dist/components/worktree-monitor.d.ts.map +1 -1
- package/dist/components/worktree-panel.d.ts +1 -1
- package/dist/context-slash.d.ts +75 -0
- package/dist/context-slash.d.ts.map +1 -0
- package/dist/cron-slash.d.ts +33 -0
- package/dist/cron-slash.d.ts.map +1 -0
- package/dist/esc-close-panels.d.ts +42 -0
- package/dist/esc-close-panels.d.ts.map +1 -0
- package/dist/f-key-panels.d.ts +14 -1
- package/dist/f-key-panels.d.ts.map +1 -1
- package/dist/height-cache.d.ts +124 -0
- package/dist/height-cache.d.ts.map +1 -0
- package/dist/hooks/use-auth-panel.d.ts +2 -0
- package/dist/hooks/use-auth-panel.d.ts.map +1 -1
- package/dist/hooks/use-director-fleet-bridge.d.ts +6 -1
- package/dist/hooks/use-director-fleet-bridge.d.ts.map +1 -1
- package/dist/hooks/use-fleet-generation-gate.d.ts +37 -0
- package/dist/hooks/use-fleet-generation-gate.d.ts.map +1 -0
- package/dist/hooks/use-live-todos.d.ts +4 -0
- package/dist/hooks/use-live-todos.d.ts.map +1 -0
- package/dist/hooks/use-session-interrupt-controller.d.ts +44 -0
- package/dist/hooks/use-session-interrupt-controller.d.ts.map +1 -0
- package/dist/hooks/use-subagent-events.d.ts +3 -1
- package/dist/hooks/use-subagent-events.d.ts.map +1 -1
- package/dist/hooks/use-tui-activity.d.ts +28 -0
- package/dist/hooks/use-tui-activity.d.ts.map +1 -0
- package/dist/hooks/use-tui-event-bridge.d.ts +9 -3
- package/dist/hooks/use-tui-event-bridge.d.ts.map +1 -1
- package/dist/index.d.ts +7 -7
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +21439 -16063
- package/dist/index.js.map +4 -4
- package/dist/memory-slash.d.ts +15 -0
- package/dist/memory-slash.d.ts.map +1 -0
- package/dist/on-panel-open.d.ts +1 -1
- package/dist/on-panel-open.d.ts.map +1 -1
- package/dist/reducers/helpers.d.ts +1 -1
- package/dist/reducers/helpers.d.ts.map +1 -1
- package/dist/run-tui.d.ts +27 -2
- package/dist/run-tui.d.ts.map +1 -1
- package/dist/running-tools.d.ts +9 -0
- package/dist/running-tools.d.ts.map +1 -0
- package/dist/slash-command-search.d.ts +5 -0
- package/dist/slash-command-search.d.ts.map +1 -1
- package/dist/submit-history.d.ts.map +1 -1
- package/dist/terminal-width.d.ts +36 -0
- package/dist/terminal-width.d.ts.map +1 -0
- package/dist/theme.d.ts +50 -0
- package/dist/theme.d.ts.map +1 -1
- package/dist/tool-glyph.d.ts +1 -4
- package/dist/tool-glyph.d.ts.map +1 -1
- package/dist/ui-glyphs.d.ts +45 -0
- package/dist/ui-glyphs.d.ts.map +1 -0
- package/package.json +6 -6
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import type { EventBus, TokenCounter,
|
|
1
|
+
import type { AutonomyStage, EventBus, TokenCounter, TokenSavingTier } from '@wrongstack/core';
|
|
2
2
|
import type React from 'react';
|
|
3
|
-
import type { ChipMeta, StatuslineItem } from './statusline-picker.js';
|
|
4
|
-
import type { StatuslineMode } from './settings-picker.js';
|
|
5
3
|
import type { GitInfo } from '../git-info.js';
|
|
6
4
|
import { type AnimationStyle } from './animation-style.js';
|
|
5
|
+
import type { StatuslineMode } from './settings-picker.js';
|
|
6
|
+
import type { ChipMeta, StatuslineItem } from './statusline-picker.js';
|
|
7
7
|
/**
|
|
8
8
|
* Head-truncate a chip's free-text payload (branch, path, project name) with a
|
|
9
9
|
* trailing ellipsis so one long value can't blow out the line width. Mirrors
|
|
@@ -25,6 +25,12 @@ export declare function nodeText(node: React.ReactNode): string;
|
|
|
25
25
|
* an empty line). Pure + exported for testing.
|
|
26
26
|
*/
|
|
27
27
|
export declare function planChipFit(widths: number[], budget: number, sepCost?: number): number;
|
|
28
|
+
/**
|
|
29
|
+
* Render a status-bar chip line: separator-join the chips that fit within
|
|
30
|
+
* `budget`, and append a dim `+N` marker when lower-priority chips were dropped
|
|
31
|
+
* so the line never wraps (a wrapped status bar shifts Ink's layout and strands
|
|
32
|
+
* the input row in scrollback).
|
|
33
|
+
*/
|
|
28
34
|
/** Minimum terminal width before we switch to ultra-compact mode. Exported so
|
|
29
35
|
* the TUI mouse hit-test can skip the model-chip click in compact mode (where
|
|
30
36
|
* line 1 uses a different layout than `statusBarModelSpan` assumes). */
|
|
@@ -135,9 +141,16 @@ export interface MailboxStatus {
|
|
|
135
141
|
export interface StatusBarProps {
|
|
136
142
|
model: string;
|
|
137
143
|
/**
|
|
138
|
-
*
|
|
139
|
-
*
|
|
140
|
-
*
|
|
144
|
+
* Provider identifier shown alongside `model` as `provider/model` in the
|
|
145
|
+
* status line. When omitted, only `model` is displayed (backward compat
|
|
146
|
+
* for callers that pass a combined string).
|
|
147
|
+
*/
|
|
148
|
+
provider?: string | undefined;
|
|
149
|
+
/**
|
|
150
|
+
* App version string (e.g. "0.7.0"). Previously rendered a `WS v{version}`
|
|
151
|
+
* chip at the head of line 1. Now shown in the composer top rail instead
|
|
152
|
+
* (`WRONGSTACK v{version}`). Kept in the interface for callers that may
|
|
153
|
+
* use `version` in derived props — no longer rendered by StatusBar itself.
|
|
141
154
|
*/
|
|
142
155
|
version?: string | undefined;
|
|
143
156
|
state: 'idle' | 'running' | 'streaming' | 'aborting';
|
|
@@ -155,10 +168,18 @@ export interface StatusBarProps {
|
|
|
155
168
|
hint?: string | undefined;
|
|
156
169
|
queueCount?: number | undefined;
|
|
157
170
|
yolo?: boolean | undefined;
|
|
158
|
-
/**
|
|
159
|
-
*
|
|
160
|
-
*
|
|
171
|
+
/**
|
|
172
|
+
* Session start timestamp (ms). Used by StatuslineDetailPanel for its
|
|
173
|
+
* elapsed-time display. StatusBar itself no longer renders this chip
|
|
174
|
+
* (working time and fleet time are tracked separately).
|
|
175
|
+
*/
|
|
161
176
|
startedAt?: number | undefined;
|
|
177
|
+
/**
|
|
178
|
+
* Fleet working time in ms — the total time background subagents have been
|
|
179
|
+
* active. Only ticks up while fleet.running > 0. Rendered as a chip on the
|
|
180
|
+
* status bar so the user can see how long background work has been running.
|
|
181
|
+
*/
|
|
182
|
+
fleetWorkingTime?: number | undefined;
|
|
162
183
|
todos?: TodoCounts | undefined;
|
|
163
184
|
/**
|
|
164
185
|
* Plan board counts surfaced as a chip on line 2. Distinct from
|
|
@@ -282,7 +303,7 @@ export interface StatusBarProps {
|
|
|
282
303
|
/**
|
|
283
304
|
* Seconds remaining in the prompt-refinement auto-send countdown.
|
|
284
305
|
* When non-null, replaces the old in-panel timer display with a
|
|
285
|
-
* line-3 chip like
|
|
306
|
+
* line-3 chip like `◴ refinement ready · send in 5s` so the countdown never
|
|
286
307
|
* causes blank entries in the chat scrollback.
|
|
287
308
|
*/
|
|
288
309
|
enhanceCountdown?: number | null | undefined;
|
|
@@ -323,37 +344,41 @@ export interface StatusBarProps {
|
|
|
323
344
|
}
|
|
324
345
|
/**
|
|
325
346
|
* Two-line status bar. The first line stays compact and shows the
|
|
326
|
-
*
|
|
327
|
-
*
|
|
347
|
+
* workspace route followed by provider/model, context, tokens, cost, queue,
|
|
348
|
+
* and other runtime essentials. The second line opts in only when there's actually something
|
|
328
349
|
* to show — git branch, elapsed time, todo counts, YOLO marker — so a
|
|
329
350
|
* vanilla session keeps the original single-line footprint.
|
|
330
351
|
*/
|
|
331
|
-
export declare function StatusBar({ model,
|
|
352
|
+
export declare function StatusBar({ model, provider, state, thinkingWord, thinkingAnimationStyle, tokenCounter, hint, queueCount, yolo, autonomy, fleetWorkingTime, todos, plan, tasks, fleet, fleetAgents, git, subagentCount, brain, projectName, workingDir, processCount, context, contextStrategy, hiddenItems, mode, events, sessionId, eternalStage, goalSummary, indexState, breakerCountdown, modeLabel, debugStreamStats, enhanceCountdown, nextStepsAutoSubmitCountdown, nextStepsAutoSubmitLabel, autoProceedCountdown, sessionCount, mailbox, tokenSavingMode, toolCount, visibleChips, sideEffectCount, }: StatusBarProps): React.ReactElement;
|
|
332
353
|
/**
|
|
333
|
-
* 0-based column span (offset from the box's left edge
|
|
334
|
-
*
|
|
335
|
-
*
|
|
336
|
-
*
|
|
337
|
-
* `● {stateLabel}` + `│`, then the model.
|
|
354
|
+
* 0-based column span (offset from the box's left edge) of the
|
|
355
|
+
* `{provider}/{model}` chip on status-bar line 1. The TUI mouse handler uses
|
|
356
|
+
* it to open the model picker. This mirrors the visible workspace prefix:
|
|
357
|
+
* YOLO/autonomy, project, working directory, then provider/model.
|
|
338
358
|
*/
|
|
339
359
|
export declare function statusBarModelSpan(opts: {
|
|
340
|
-
version?: string | undefined;
|
|
341
|
-
state: 'idle' | 'running' | 'streaming' | 'aborting';
|
|
342
|
-
fleetRunning?: number | undefined;
|
|
343
|
-
thinkingWord?: string | undefined;
|
|
344
360
|
model: string;
|
|
361
|
+
provider?: string | undefined;
|
|
362
|
+
yolo?: boolean | undefined;
|
|
363
|
+
autonomy?: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel' | undefined;
|
|
364
|
+
projectName?: string | undefined;
|
|
365
|
+
workingDir?: string | undefined;
|
|
366
|
+
projectHidden?: boolean | undefined;
|
|
367
|
+
workingDirHidden?: boolean | undefined;
|
|
368
|
+
monochrome?: boolean | undefined;
|
|
345
369
|
}): {
|
|
346
370
|
start: number;
|
|
347
371
|
len: number;
|
|
348
372
|
};
|
|
349
373
|
/**
|
|
350
|
-
* 0-based column span of the
|
|
351
|
-
*
|
|
352
|
-
*
|
|
374
|
+
* 0-based column span of the autonomy chip on status-bar line 1, or null when
|
|
375
|
+
* autonomy is off/unset. Mirrors both colored (`∞ MODE`) and monochrome
|
|
376
|
+
* (`MODE`) Powerline rendering, including an optional leading YOLO segment.
|
|
353
377
|
*/
|
|
354
378
|
export declare function statusBarAutonomySpan(opts: {
|
|
355
379
|
yolo?: boolean | undefined;
|
|
356
380
|
autonomy?: 'off' | 'suggest' | 'auto' | 'eternal' | 'eternal-parallel' | undefined;
|
|
381
|
+
monochrome?: boolean | undefined;
|
|
357
382
|
}): {
|
|
358
383
|
start: number;
|
|
359
384
|
len: number;
|
|
@@ -373,6 +398,14 @@ export declare function stateChip(state: 'idle' | 'running' | 'streaming' | 'abo
|
|
|
373
398
|
color: string;
|
|
374
399
|
};
|
|
375
400
|
export declare function renderProgress(ratio: number, width: number): string;
|
|
401
|
+
/**
|
|
402
|
+
* Bracket-style context meter, e.g. `[00o.......]`.
|
|
403
|
+
*
|
|
404
|
+
* Renders a fixed-width progress bar inside square brackets. `0` marks filled
|
|
405
|
+
* cells, `o` is the boundary marker at the edge of used space, and `.` marks
|
|
406
|
+
* remaining cells. The marker disappears at 0% (bar is all `.`) and at 100%
|
|
407
|
+
* (bar is all `0`).
|
|
408
|
+
*/
|
|
376
409
|
export declare function renderMeter(ratio: number, width: number): string;
|
|
377
410
|
export declare function fmtElapsed(ms: number): string;
|
|
378
411
|
//# sourceMappingURL=status-bar.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"status-bar.d.ts","sourceRoot":"","sources":["../../src/components/status-bar.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"status-bar.d.ts","sourceRoot":"","sources":["../../src/components/status-bar.tsx"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type React from 'react';
|
|
2
|
+
import { type StatusBarProps } from './status-bar.js';
|
|
3
|
+
/**
|
|
4
|
+
* Detailed status panel showing all status line information in a structured
|
|
5
|
+
* read-only view. Toggle via F12 picker's detail option or Esc to close.
|
|
6
|
+
*/
|
|
7
|
+
export declare function StatuslineDetailPanel(props: StatusBarProps & {
|
|
8
|
+
onClose: () => void;
|
|
9
|
+
}): React.ReactElement;
|
|
10
|
+
//# sourceMappingURL=statusline-detail-panel.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"statusline-detail-panel.d.ts","sourceRoot":"","sources":["../../src/components/statusline-detail-panel.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAU/B,OAAO,EAAyC,KAAK,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAW7F;;;GAGG;AACH,wBAAgB,qBAAqB,CACnC,KAAK,EAAE,cAAc,GAAG;IAAE,OAAO,EAAE,MAAM,IAAI,CAAA;CAAE,GAC9C,KAAK,CAAC,YAAY,CAgMpB"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import type React from 'react';
|
|
2
2
|
/** All possible statusline chip keys. */
|
|
3
|
-
export type StatuslineItem = 'version' | 'state' | 'model' | 'tokens' | 'cache' | 'queue' | 'processes' | 'hint' | 'index' | 'breaker' | 'todos' | 'plan' | 'tasks' | 'fleet' | 'fleet_agents' | 'git' | 'elapsed' | 'context' | 'cost' | 'working_dir' | 'project' | 'yolo' | 'autonomy' | 'eternal_stage' | 'goal' | 'mode' | 'auto_proceed' | 'sessions' | 'tools' | 'token_saving' | 'brain' | 'mailbox' | 'enhance' | 'debug_stream' | 'next_steps';
|
|
3
|
+
export type StatuslineItem = 'version' | 'state' | 'model' | 'tokens' | 'cache' | 'queue' | 'processes' | 'hint' | 'index' | 'breaker' | 'todos' | 'plan' | 'tasks' | 'fleet' | 'fleet_agents' | 'git' | 'elapsed' | 'context' | 'cost' | 'working_dir' | 'project' | 'yolo' | 'autonomy' | 'eternal_stage' | 'goal' | 'mode' | 'auto_proceed' | 'sessions' | 'time' | 'tools' | 'token_saving' | 'brain' | 'mailbox' | 'enhance' | 'debug_stream' | 'next_steps';
|
|
4
4
|
/**
|
|
5
5
|
* Metadata for a temporarily-visible chip (one that appeared due to data,
|
|
6
6
|
* not user toggle). Tracked so the chip can auto-expire.
|
|
@@ -30,9 +30,9 @@ export declare function getExpiresInLabel(meta: ChipMeta, now?: number): string
|
|
|
30
30
|
/**
|
|
31
31
|
* Which TUI status bar line each chip appears on. Used to group chips
|
|
32
32
|
* visually in the picker. MUST mirror the actual render lines in
|
|
33
|
-
* `status-bar.tsx`: line 1 = runtime
|
|
34
|
-
* line 3 = active work
|
|
35
|
-
*
|
|
33
|
+
* `status-bar.tsx`: line 1 = workspace + runtime chips, line 2 = session context,
|
|
34
|
+
* line 3 = active work + connectivity. Exported so the navigation-order
|
|
35
|
+
* test guards against drift instead of duplicating it.
|
|
36
36
|
*/
|
|
37
37
|
export declare const ITEM_LINE: Record<StatuslineItem, number>;
|
|
38
38
|
export interface StatuslinePickerProps {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"statusline-picker.d.ts","sourceRoot":"","sources":["../../src/components/statusline-picker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"statusline-picker.d.ts","sourceRoot":"","sources":["../../src/components/statusline-picker.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAK/B,yCAAyC;AACzC,MAAM,MAAM,cAAc,GACtB,SAAS,GACT,OAAO,GACP,OAAO,GACP,QAAQ,GACR,OAAO,GACP,OAAO,GACP,WAAW,GACX,MAAM,GACN,OAAO,GACP,SAAS,GACT,OAAO,GACP,MAAM,GACN,OAAO,GACP,OAAO,GACP,cAAc,GACd,KAAK,GACL,SAAS,GACT,SAAS,GACT,MAAM,GACN,aAAa,GACb,SAAS,GACT,MAAM,GACN,UAAU,GACV,eAAe,GACf,MAAM,GACN,MAAM,GACN,cAAc,GACd,UAAU,GACV,MAAM,GACN,OAAO,GACP,cAAc,GACd,OAAO,GACP,SAAS,GACT,SAAS,GACT,cAAc,GACd,YAAY,CAAC;AAEjB;;;GAGG;AACH,MAAM,WAAW,QAAQ;IACvB,GAAG,EAAE,cAAc,CAAC;IACpB,mDAAmD;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB;;;OAGG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,iEAAiE;AACjE,eAAO,MAAM,8BAA8B,IAAI,CAAC;AAEhD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAa,GAAG,OAAO,CAIvE;AAED;;;GAGG;AACH,wBAAgB,iBAAiB,CAAC,IAAI,EAAE,QAAQ,EAAE,GAAG,SAAa,GAAG,MAAM,GAAG,IAAI,CAOjF;AA0CD;;;;;;GAMG;AACH,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,cAAc,EAAE,MAAM,CAyCpD,CAAC;AAEF,MAAM,WAAW,qBAAqB;IACpC,2BAA2B;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,iCAAiC;IACjC,WAAW,EAAE,cAAc,EAAE,CAAC;IAC9B,0DAA0D;IAC1D,YAAY,CAAC,EAAE,QAAQ,EAAE,GAAG,SAAS,CAAC;IACtC,8CAA8C;IAC9C,IAAI,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC3B;AAED,yCAAyC;AACzC,eAAO,MAAM,sBAAsB,QAAgC,CAAC;AAEpE,kIAAkI;AAClI,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAwC5C,CAAC;AAEF,kGAAkG;AAClG,eAAO,MAAM,gBAAgB,EAAE,cAAc,EAAoD,CAAC;AAalG,wBAAgB,gBAAgB,CAAC,EAC/B,KAAK,EACL,WAAW,EACX,YAAiB,EACjB,IAAI,GACL,EAAE,qBAAqB,GAAG,KAAK,CAAC,YAAY,CAmI5C"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"todos-monitor.d.ts","sourceRoot":"","sources":["../../src/components/todos-monitor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"todos-monitor.d.ts","sourceRoot":"","sources":["../../src/components/todos-monitor.tsx"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAc/B;;;;;;GAMG;AACH,wBAAgB,YAAY,CAAC,EAAE,KAAK,EAAE,EAAE;IAAE,KAAK,EAAE,QAAQ,EAAE,CAAA;CAAE,GAAG,KAAK,CAAC,YAAY,CAoIjF"}
|
|
@@ -6,7 +6,7 @@ export declare function isWorktreeMonitorCloseKey(input: string, key: {
|
|
|
6
6
|
}): boolean;
|
|
7
7
|
/**
|
|
8
8
|
* Full-screen Worktree monitor overlay (Ctrl+T to open, Ctrl+T to close).
|
|
9
|
-
* Shows each
|
|
9
|
+
* Shows each Goal worktree: branch, base→branch, owner phase, diff stats,
|
|
10
10
|
* and conflict files for any worktree left in needs-review.
|
|
11
11
|
*
|
|
12
12
|
* Prunes merged/failed worktrees older than TERMINAL_TTL_MS to prevent
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"worktree-monitor.d.ts","sourceRoot":"","sources":["../../src/components/worktree-monitor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;
|
|
1
|
+
{"version":3,"file":"worktree-monitor.d.ts","sourceRoot":"","sources":["../../src/components/worktree-monitor.tsx"],"names":[],"mappings":"AACA,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC;AAG/B,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAiCvD,wBAAgB,yBAAyB,CACvC,KAAK,EAAE,MAAM,EACb,GAAG,EAAE;IAAE,MAAM,CAAC,EAAE,OAAO,GAAG,SAAS,CAAC;IAAC,IAAI,CAAC,EAAE,OAAO,GAAG,SAAS,CAAA;CAAE,GAChE,OAAO,CAET;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAAC,EAC9B,SAAS,EACT,UAAU,EACV,OAAO,EACP,OAAO,GACR,EAAE;IACD,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,GAAG;QAAE,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAA;KAAE,CAAC,CAAC;IAC7E,UAAU,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,IAAI,CAAC;CACrB,GAAG,KAAK,CAAC,YAAY,CA2IrB"}
|
|
@@ -10,7 +10,7 @@ export interface WorktreeRow {
|
|
|
10
10
|
conflictFiles?: string[] | undefined;
|
|
11
11
|
}
|
|
12
12
|
/**
|
|
13
|
-
* Worktree sidebar panel — shown beside the
|
|
13
|
+
* Worktree sidebar panel — shown beside the Goal PhasePanel when git
|
|
14
14
|
* worktree isolation is active. One compact row per worktree (branch, owner
|
|
15
15
|
* phase, diff stats, status). Always visible while live; details on Ctrl+T.
|
|
16
16
|
*/
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
import type { MemoryStore, SlashCommand } from '@wrongstack/core';
|
|
2
|
+
import type { GitInfo } from './git-info.js';
|
|
3
|
+
export interface ContextSlashDeps {
|
|
4
|
+
cwd: string;
|
|
5
|
+
getProvider: () => string;
|
|
6
|
+
getModel: () => string;
|
|
7
|
+
getModeLabel: () => string;
|
|
8
|
+
getGitInfo: () => GitInfo | null;
|
|
9
|
+
getFleet: () => {
|
|
10
|
+
total: number;
|
|
11
|
+
running: number;
|
|
12
|
+
entries: Array<{
|
|
13
|
+
name: string;
|
|
14
|
+
status: string;
|
|
15
|
+
currentTool: string | undefined;
|
|
16
|
+
ctxPct: number | undefined;
|
|
17
|
+
}>;
|
|
18
|
+
};
|
|
19
|
+
getLeader: () => {
|
|
20
|
+
iterations: number;
|
|
21
|
+
toolCalls: number;
|
|
22
|
+
startedAt: number;
|
|
23
|
+
status: string;
|
|
24
|
+
currentTool: {
|
|
25
|
+
name: string;
|
|
26
|
+
startedAt: number;
|
|
27
|
+
} | undefined;
|
|
28
|
+
ctxPct: number | undefined;
|
|
29
|
+
ctxTokens: number | undefined;
|
|
30
|
+
ctxMaxTokens: number | undefined;
|
|
31
|
+
};
|
|
32
|
+
getUptime: () => string;
|
|
33
|
+
/** Terminal width in columns. */
|
|
34
|
+
terminalWidth: number;
|
|
35
|
+
/** Optional super memory store for stats. */
|
|
36
|
+
memoryStats: (() => Promise<{
|
|
37
|
+
total: number;
|
|
38
|
+
byKind: Record<string, number>;
|
|
39
|
+
edges: number;
|
|
40
|
+
byStatus: Record<string, number>;
|
|
41
|
+
} | null>) | undefined;
|
|
42
|
+
/** Optional panel-open bridge for dispatching TUI panels from the slash command. */
|
|
43
|
+
onPanelOpen?: {
|
|
44
|
+
current: ((action: string) => boolean) | null;
|
|
45
|
+
} | undefined;
|
|
46
|
+
}
|
|
47
|
+
/** Adapt the optional extended memory-store surface to context dashboard stats. */
|
|
48
|
+
export declare function createContextMemoryStatsGetter(memoryStore: MemoryStore | undefined): ContextSlashDeps['memoryStats'];
|
|
49
|
+
/**
|
|
50
|
+
* Render a sparkbar: `▓` chars proportional to `value / total`.
|
|
51
|
+
* At least 1 block when value > 0, max 10. Empty when value is 0.
|
|
52
|
+
*/
|
|
53
|
+
export declare function sparkbar(value: number, total: number): string;
|
|
54
|
+
/**
|
|
55
|
+
* Render a proportional context-window bar using `█` foreground + `░` background
|
|
56
|
+
* characters. The bar is `width` characters wide and includes a percentage label.
|
|
57
|
+
*/
|
|
58
|
+
export declare function contextBar(pct: number, width: number): string;
|
|
59
|
+
export declare function createContextSlashCommand(deps: ContextSlashDeps): SlashCommand;
|
|
60
|
+
/**
|
|
61
|
+
* Pure render of the full context dashboard. Exported so tests can drive it with
|
|
62
|
+
* known deps without mounting Ink or registering a real slash command.
|
|
63
|
+
*/
|
|
64
|
+
export declare function renderContext(deps: ContextSlashDeps, memoryData: {
|
|
65
|
+
total: number;
|
|
66
|
+
byKind: Record<string, number>;
|
|
67
|
+
edges: number;
|
|
68
|
+
byStatus: Record<string, number>;
|
|
69
|
+
} | null): string;
|
|
70
|
+
/**
|
|
71
|
+
* Pure render of the expanded context-window view (shown by `/context window`).
|
|
72
|
+
* Exported so tests can drive it directly with known deps.
|
|
73
|
+
*/
|
|
74
|
+
export declare function renderContextWindowExpanded(deps: ContextSlashDeps): string;
|
|
75
|
+
//# sourceMappingURL=context-slash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"context-slash.d.ts","sourceRoot":"","sources":["../src/context-slash.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAClE,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAI7C,MAAM,WAAW,gBAAgB;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,WAAW,EAAE,MAAM,MAAM,CAAC;IAC1B,QAAQ,EAAE,MAAM,MAAM,CAAC;IACvB,YAAY,EAAE,MAAM,MAAM,CAAC;IAC3B,UAAU,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC;IACjC,QAAQ,EAAE,MAAM;QACd,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,MAAM,CAAC;QAChB,OAAO,EAAE,KAAK,CAAC;YACb,IAAI,EAAE,MAAM,CAAC;YACb,MAAM,EAAE,MAAM,CAAC;YACf,WAAW,EAAE,MAAM,GAAG,SAAS,CAAC;YAChC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;SAC5B,CAAC,CAAC;KACJ,CAAC;IACF,SAAS,EAAE,MAAM;QACf,UAAU,EAAE,MAAM,CAAC;QACnB,SAAS,EAAE,MAAM,CAAC;QAClB,SAAS,EAAE,MAAM,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,WAAW,EAAE;YAAE,IAAI,EAAE,MAAM,CAAC;YAAC,SAAS,EAAE,MAAM,CAAA;SAAE,GAAG,SAAS,CAAC;QAC7D,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC;QAC3B,SAAS,EAAE,MAAM,GAAG,SAAS,CAAC;QAC9B,YAAY,EAAE,MAAM,GAAG,SAAS,CAAC;KAClC,CAAC;IACF,SAAS,EAAE,MAAM,MAAM,CAAC;IACxB,iCAAiC;IACjC,aAAa,EAAE,MAAM,CAAC;IACtB,6CAA6C;IAC7C,WAAW,EACP,CAAC,MAAM,OAAO,CAAC;QACb,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAC/B,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAClC,GAAG,IAAI,CAAC,CAAC,GACV,SAAS,CAAC;IACd,oFAAoF;IACpF,WAAW,CAAC,EAAE;QAAE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,MAAM,KAAK,OAAO,CAAC,GAAG,IAAI,CAAA;KAAE,GAAG,SAAS,CAAC;CAC7E;AAID,mFAAmF;AACnF,wBAAgB,8BAA8B,CAC5C,WAAW,EAAE,WAAW,GAAG,SAAS,GACnC,gBAAgB,CAAC,aAAa,CAAC,CAkBjC;AAID;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAK7D;AAID;;;GAGG;AACH,wBAAgB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAW7D;AAID,wBAAgB,yBAAyB,CAAC,IAAI,EAAE,gBAAgB,GAAG,YAAY,CA4C9E;AAID;;;GAGG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,gBAAgB,EACtB,UAAU,EAAE;IACV,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAC/B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAClC,GAAG,IAAI,GACP,MAAM,CAmDR;AAiED;;;GAGG;AACH,wBAAgB,2BAA2B,CAAC,IAAI,EAAE,gBAAgB,GAAG,MAAM,CAmR1E"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `/cron` — List all scheduled cron jobs from the cron plugin.
|
|
3
|
+
*
|
|
4
|
+
* Reads the cron job list via a getter callback wired to the agent's
|
|
5
|
+
* `cron_list` tool at registration time. Renders a formatted table of
|
|
6
|
+
* job names, intervals, actions, run counts, and overdue status.
|
|
7
|
+
*/
|
|
8
|
+
import type { Agent, SlashCommand } from '@wrongstack/core';
|
|
9
|
+
export interface CronJobView {
|
|
10
|
+
name: string;
|
|
11
|
+
intervalMs: number;
|
|
12
|
+
action: string;
|
|
13
|
+
enabled: boolean;
|
|
14
|
+
lastRun: string | null;
|
|
15
|
+
nextRun: string;
|
|
16
|
+
runCount: number;
|
|
17
|
+
overdue: boolean;
|
|
18
|
+
}
|
|
19
|
+
export interface CronListResult {
|
|
20
|
+
ok: boolean;
|
|
21
|
+
count: number;
|
|
22
|
+
maxConcurrent: number;
|
|
23
|
+
jobs: CronJobView[];
|
|
24
|
+
error?: string | undefined;
|
|
25
|
+
}
|
|
26
|
+
export interface CronSlashDeps {
|
|
27
|
+
getCronJobs: () => Promise<CronListResult>;
|
|
28
|
+
}
|
|
29
|
+
/** Build the shared cron-list loader used by both the slash command and panel. */
|
|
30
|
+
export declare function createCronJobsGetter(agent: Pick<Agent, 'ctx' | 'tools'>): () => Promise<CronListResult>;
|
|
31
|
+
export declare function createCronSlashCommand(deps: CronSlashDeps): SlashCommand;
|
|
32
|
+
export declare function renderCronList(result: CronListResult): string;
|
|
33
|
+
//# sourceMappingURL=cron-slash.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"cron-slash.d.ts","sourceRoot":"","sources":["../src/cron-slash.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AACH,OAAO,KAAK,EAAE,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAI5D,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,OAAO,CAAC;IACjB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAC;IACvB,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,aAAa,EAAE,MAAM,CAAC;IACtB,IAAI,EAAE,WAAW,EAAE,CAAC;IACpB,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,OAAO,CAAC,cAAc,CAAC,CAAC;CAC5C;AAED,kFAAkF;AAClF,wBAAgB,oBAAoB,CAClC,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,KAAK,GAAG,OAAO,CAAC,GAClC,MAAM,OAAO,CAAC,cAAc,CAAC,CAqB/B;AASD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,aAAa,GAAG,YAAY,CAkBxE;AAqCD,wBAAgB,cAAc,CAAC,MAAM,EAAE,cAAc,GAAG,MAAM,CAqC7D"}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Data-driven table of panels/pickers that should close when the user presses
|
|
3
|
+
* Esc. Replaces a hand-maintained `if/if/if` cascade in `app.tsx` that was
|
|
4
|
+
* prone to drift — every new panel had to be added in two places (here and
|
|
5
|
+
* `closePanels`) and several were forgotten.
|
|
6
|
+
*
|
|
7
|
+
* The table is checked in priority order (first match wins). In practice only
|
|
8
|
+
* one panel is open at a time because `closePanels()` enforces mutual
|
|
9
|
+
* exclusivity on open.
|
|
10
|
+
*
|
|
11
|
+
* Panels that own their own Esc handler via a child `useInput` are
|
|
12
|
+
* intentionally absent. Dispatching the toggle from the parent too would
|
|
13
|
+
* double-fire on a single keypress and immediately re-open the panel.
|
|
14
|
+
*
|
|
15
|
+
* Excluded panels (own their own Esc):
|
|
16
|
+
* - worktreeMonitor — `isWorktreeMonitorCloseKey` in WorktreeMonitor.tsx
|
|
17
|
+
* - goalRun monitor — PhaseMonitor owns Esc via its own useInput
|
|
18
|
+
* - kanbanPanel — `key.escape || 'q' → onClose` in KanbanPanel.tsx
|
|
19
|
+
* - goalKanbanPanel — `key.escape || 'q' → onClose` in GoalKanbanPanel.tsx
|
|
20
|
+
*
|
|
21
|
+
* Several entries below are also caught by earlier handlers (tryPickerKey for
|
|
22
|
+
* settings/project, the helpOpen block, the F10 sessions block). They remain
|
|
23
|
+
* in the table as a safety net in case those earlier handlers change.
|
|
24
|
+
*/
|
|
25
|
+
import type { Action, State } from './app-reducer.js';
|
|
26
|
+
export interface EscCloseEntry {
|
|
27
|
+
/** Human-readable name for debugging and tests. */
|
|
28
|
+
name: string;
|
|
29
|
+
/** Whether this panel is currently open. */
|
|
30
|
+
isOpen: (state: State) => boolean;
|
|
31
|
+
/** The action to dispatch to close it (payload-free toggle or close). */
|
|
32
|
+
close: Action;
|
|
33
|
+
}
|
|
34
|
+
export declare const ESC_CLOSE_PANELS: readonly EscCloseEntry[];
|
|
35
|
+
/**
|
|
36
|
+
* Find the first open panel in the Esc-close table and return its close action.
|
|
37
|
+
* Returns `null` when no panel is open. Called from the app-level `handleKey`
|
|
38
|
+
* when Esc is pressed and no earlier handler (tryPickerKey, helpOverlay block,
|
|
39
|
+
* F-key toggles, busy-interrupt) has consumed the key.
|
|
40
|
+
*/
|
|
41
|
+
export declare function escCloseAction(state: State): Action | null;
|
|
42
|
+
//# sourceMappingURL=esc-close-panels.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"esc-close-panels.d.ts","sourceRoot":"","sources":["../src/esc-close-panels.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AAEtD,MAAM,WAAW,aAAa;IAC5B,mDAAmD;IACnD,IAAI,EAAE,MAAM,CAAC;IACb,4CAA4C;IAC5C,MAAM,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,OAAO,CAAC;IAClC,yEAAyE;IACzE,KAAK,EAAE,MAAM,CAAC;CACf;AAED,eAAO,MAAM,gBAAgB,EAAE,SAAS,aAAa,EAoBpD,CAAC;AAEF;;;;;GAKG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,IAAI,CAK1D"}
|
package/dist/f-key-panels.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import type { Action } from './app-reducer.js';
|
|
2
2
|
import type { StatuslineItem } from './components/statusline-picker.js';
|
|
3
|
-
export type FKeyPanelAction = 'projectPickerOpen' | 'toggleMonitor' | 'toggleAgentsMonitor' | 'toggleWorktreeMonitor' | 'togglePlanPanel' | 'toggleTodosMonitor' | 'toggleQueuePanel' | 'toggleProcessList' | 'toggleGoalPanel' | 'toggleSessionsPanel' | 'toggleCoordinatorMonitor' | 'statuslineOpen';
|
|
3
|
+
export type FKeyPanelAction = 'projectPickerOpen' | 'toggleMonitor' | 'toggleAgentsMonitor' | 'toggleWorktreeMonitor' | 'togglePlanPanel' | 'toggleTodosMonitor' | 'toggleQueuePanel' | 'toggleProcessList' | 'toggleGoalPanel' | 'toggleSessionsPanel' | 'toggleCoordinatorMonitor' | 'toggleCronMonitor' | 'statuslineOpen';
|
|
4
|
+
/** Host-side action keys that require work beyond a reducer dispatch. */
|
|
5
|
+
export type FKeyHostAction = 'openProjectPicker' | 'loadLiveSessions' | 'openStatuslinePicker';
|
|
4
6
|
/** A single F-key panel entry shared by the picker, help overlay, and tests. */
|
|
5
7
|
export interface FKeyPanelEntry {
|
|
6
8
|
key: number;
|
|
@@ -10,6 +12,11 @@ export interface FKeyPanelEntry {
|
|
|
10
12
|
helpKeys: string;
|
|
11
13
|
/** Short user-facing description for the help overlay. */
|
|
12
14
|
helpDescription: string;
|
|
15
|
+
/** Optional Ctrl+letter chord alias (e.g. 'f' for Ctrl+F → F2). */
|
|
16
|
+
ctrlAlias?: string | undefined;
|
|
17
|
+
/** When present, this entry needs host-side work instead of (or in addition
|
|
18
|
+
* to) a direct reducer dispatch. The caller resolves these. */
|
|
19
|
+
hostAction?: FKeyHostAction | undefined;
|
|
13
20
|
}
|
|
14
21
|
/** All 12 F-key panels in order. */
|
|
15
22
|
export declare const F_KEY_PANEL_ENTRIES: readonly FKeyPanelEntry[];
|
|
@@ -36,6 +43,12 @@ type FKeyDispatchAction = Extract<Action, {
|
|
|
36
43
|
} | {
|
|
37
44
|
type: 'statuslineOpen';
|
|
38
45
|
}>;
|
|
46
|
+
/**
|
|
47
|
+
* Find the F-key panel entry matching the pressed key — either a plain
|
|
48
|
+
* function key (1–12) or a Ctrl+letter chord alias. Returns null if no
|
|
49
|
+
* entry matches.
|
|
50
|
+
*/
|
|
51
|
+
export declare function fKeyEntryFor(fn: number | undefined, ctrl: boolean | undefined, input: string): FKeyPanelEntry | null;
|
|
39
52
|
/**
|
|
40
53
|
* Convert a picker entry into the reducer action it can dispatch directly.
|
|
41
54
|
* Returns null for entries that need host-side work before dispatching, such as
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"f-key-panels.d.ts","sourceRoot":"","sources":["../src/f-key-panels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,MAAM,eAAe,GACvB,mBAAmB,GACnB,eAAe,GACf,qBAAqB,GACrB,uBAAuB,GACvB,iBAAiB,GACjB,oBAAoB,GACpB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,qBAAqB,GACrB,0BAA0B,GAC1B,gBAAgB,CAAC;AAErB,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"f-key-panels.d.ts","sourceRoot":"","sources":["../src/f-key-panels.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,mCAAmC,CAAC;AAExE,MAAM,MAAM,eAAe,GACvB,mBAAmB,GACnB,eAAe,GACf,qBAAqB,GACrB,uBAAuB,GACvB,iBAAiB,GACjB,oBAAoB,GACpB,kBAAkB,GAClB,mBAAmB,GACnB,iBAAiB,GACjB,qBAAqB,GACrB,0BAA0B,GAC1B,mBAAmB,GACnB,gBAAgB,CAAC;AAErB,yEAAyE;AACzE,MAAM,MAAM,cAAc,GAAG,mBAAmB,GAAG,kBAAkB,GAAG,sBAAsB,CAAC;AAE/F,gFAAgF;AAChF,MAAM,WAAW,cAAc;IAC7B,GAAG,EAAE,MAAM,CAAC;IACZ,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,eAAe,CAAC;IACxB,kFAAkF;IAClF,QAAQ,EAAE,MAAM,CAAC;IACjB,0DAA0D;IAC1D,eAAe,EAAE,MAAM,CAAC;IACxB,mEAAmE;IACnE,SAAS,CAAC,EAAE,MAAM,GAAG,SAAS,CAAC;IAC/B;oEACgE;IAChE,UAAU,CAAC,EAAE,cAAc,GAAG,SAAS,CAAC;CACzC;AAED,oCAAoC;AACpC,eAAO,MAAM,mBAAmB,EAAE,SAAS,cAAc,EA2FxD,CAAC;AAEF,KAAK,kBAAkB,GAAG,OAAO,CAC/B,MAAM,EACJ;IAAE,IAAI,EAAE,eAAe,CAAA;CAAE,GACzB;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,uBAAuB,CAAA;CAAE,GACjC;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,oBAAoB,CAAA;CAAE,GAC9B;IAAE,IAAI,EAAE,kBAAkB,CAAA;CAAE,GAC5B;IAAE,IAAI,EAAE,mBAAmB,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,iBAAiB,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,qBAAqB,CAAA;CAAE,GAC/B;IAAE,IAAI,EAAE,0BAA0B,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,gBAAgB,CAAA;CAAE,CAC7B,CAAC;AAgBF;;;;GAIG;AACH,wBAAgB,YAAY,CAC1B,EAAE,EAAE,MAAM,GAAG,SAAS,EACtB,IAAI,EAAE,OAAO,GAAG,SAAS,EACzB,KAAK,EAAE,MAAM,GACZ,cAAc,GAAG,IAAI,CAQvB;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAChC,KAAK,EAAE,cAAc,EACrB,WAAW,GAAE,SAAS,cAAc,EAAO,GAC1C,kBAAkB,GAAG,IAAI,CAS3B"}
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Entry height cache for the scrollable history viewport.
|
|
3
|
+
*
|
|
4
|
+
* Associates each history entry's stable `id` with its measured row height
|
|
5
|
+
* and maintains a prefix-sum array so `accumulatedHeight(index)` is O(1) —
|
|
6
|
+
* essential for the binary-search-based window computation in the virtual
|
|
7
|
+
* scroll viewport.
|
|
8
|
+
*
|
|
9
|
+
* This module is pure TypeScript — no React, no Ink, no DOM dependencies.
|
|
10
|
+
* It can be unit-tested without mounting components.
|
|
11
|
+
*/
|
|
12
|
+
/**
|
|
13
|
+
* Default height (in terminal rows) assumed for an entry before its first
|
|
14
|
+
* measurement. 3 rows is a reasonable floor for a single-line entry
|
|
15
|
+
* (border + content + margin) and prevents a flash of zero-height spacers
|
|
16
|
+
* during the first render pass.
|
|
17
|
+
*/
|
|
18
|
+
export declare const DEFAULT_ENTRY_HEIGHT = 3;
|
|
19
|
+
/**
|
|
20
|
+
* Prefix-sum-based height cache for history entries.
|
|
21
|
+
*
|
|
22
|
+
* Stores measured heights keyed by entry `id` and keeps a parallel prefix-sum
|
|
23
|
+
* array for O(1) range-height queries and O(log n) scroll-offset-to-entry-index
|
|
24
|
+
* resolution.
|
|
25
|
+
*
|
|
26
|
+
* Threading note: this class is designed for single-threaded use within one
|
|
27
|
+
* React render cycle. It is NOT thread-safe.
|
|
28
|
+
*/
|
|
29
|
+
export declare class EntryHeightCache {
|
|
30
|
+
/** id → measured height in terminal rows */
|
|
31
|
+
private readonly heights;
|
|
32
|
+
/**
|
|
33
|
+
* Prefix-sum of heights in insertion order. `prefix[i]` = sum of heights
|
|
34
|
+
* for entries with index < i. Rebuilt on every `record()` call.
|
|
35
|
+
* `prefix[0]` is always 0. Invariant: `prefix.length === this.ids.length + 1`.
|
|
36
|
+
*/
|
|
37
|
+
private prefix;
|
|
38
|
+
/** Ordered entry ids matching the prefix-sum positions. */
|
|
39
|
+
private ids;
|
|
40
|
+
/**
|
|
41
|
+
* Record or update the measured height for an entry.
|
|
42
|
+
* Rebuilds the prefix-sum — O(n) where n = distinct entries ever measured.
|
|
43
|
+
* In practice n is the number of entries in the session (hundreds to low
|
|
44
|
+
* thousands), and rebuild happens once per entry per render cycle.
|
|
45
|
+
*
|
|
46
|
+
* Returns `true` when the height changed (new or different from last record).
|
|
47
|
+
*/
|
|
48
|
+
record(id: number, height: number): boolean;
|
|
49
|
+
/**
|
|
50
|
+
* Total height in rows of all measured entries.
|
|
51
|
+
* O(1) — returns the last prefix-sum entry.
|
|
52
|
+
*/
|
|
53
|
+
totalHeight(): number;
|
|
54
|
+
/**
|
|
55
|
+
* Accumulated row height of entries with index < `entryIndex`.
|
|
56
|
+
* `accumulatedHeight(0)` = 0. Throws when `entryIndex > ids.length`.
|
|
57
|
+
* O(1) via prefix-sum lookup.
|
|
58
|
+
*/
|
|
59
|
+
accumulatedHeight(entryIndex: number): number;
|
|
60
|
+
/**
|
|
61
|
+
* Look up the measured height for a single entry id.
|
|
62
|
+
* Returns `undefined` when the entry has never been measured.
|
|
63
|
+
*/
|
|
64
|
+
getHeight(id: number): number | undefined;
|
|
65
|
+
/**
|
|
66
|
+
* Number of entries currently tracked.
|
|
67
|
+
*/
|
|
68
|
+
get size(): number;
|
|
69
|
+
/**
|
|
70
|
+
* Find the entry index whose accumulated range contains the given
|
|
71
|
+
* vertical `rowOffset` from the top of all content.
|
|
72
|
+
*
|
|
73
|
+
* Binary search on the prefix-sum array. O(log n).
|
|
74
|
+
* Returns `0` for offsets at or before the first entry.
|
|
75
|
+
* Returns `ids.length` for offsets past the last entry.
|
|
76
|
+
*/
|
|
77
|
+
entryIndexAtOffset(rowOffset: number): number;
|
|
78
|
+
/**
|
|
79
|
+
* Remove all cached heights and reset to empty state.
|
|
80
|
+
*/
|
|
81
|
+
clear(): void;
|
|
82
|
+
/** Rebuild the prefix-sum array from current heights in insertion order. */
|
|
83
|
+
private rebuild;
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Compute the visible window slice for a virtual-scrolled entry list.
|
|
87
|
+
*
|
|
88
|
+
* Given the total measured content, viewport size, scroll offset, and entry
|
|
89
|
+
* array, determines which entries to render and how tall the top/bottom spacer
|
|
90
|
+
* elements should be.
|
|
91
|
+
*
|
|
92
|
+
* All measurements are in terminal rows.
|
|
93
|
+
*
|
|
94
|
+
* Returns a result with `startIdx`, `endIdx`, `spacerAbove`, and `spacerBelow`
|
|
95
|
+
* that the caller uses to render only the visible window.
|
|
96
|
+
*/
|
|
97
|
+
export interface ComputeWindowResult {
|
|
98
|
+
/** Index of the first entry to render (inclusive). */
|
|
99
|
+
startIdx: number;
|
|
100
|
+
/** Index of the last entry to render (exclusive, like Array.slice end). */
|
|
101
|
+
endIdx: number;
|
|
102
|
+
/** Row height of the spacer above the visible window. 0 when at top. */
|
|
103
|
+
spacerAbove: number;
|
|
104
|
+
/** Row height of the spacer below the visible window. 0 when at bottom. */
|
|
105
|
+
spacerBelow: number;
|
|
106
|
+
/** Total content height measured. */
|
|
107
|
+
totalHeight: number;
|
|
108
|
+
/** Whether the computed window differs from a flat render of all entries. */
|
|
109
|
+
windowed: boolean;
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Compute which entries should be rendered in a virtual-scrolled viewport.
|
|
113
|
+
*
|
|
114
|
+
* Pure function — no side effects, no state mutations. Exported for testing.
|
|
115
|
+
*
|
|
116
|
+
* @param totalHeight - Total measured height of all entries in rows.
|
|
117
|
+
* @param viewportRows - Number of visible rows in the viewport.
|
|
118
|
+
* @param scrollOffset - Rows scrolled up from the bottom (0 = pinned to newest).
|
|
119
|
+
* @param entryCount - Total number of entries.
|
|
120
|
+
* @param cache - EntryHeightCache with measured heights.
|
|
121
|
+
* @returns A {@link ComputeWindowResult} describing the visible slice.
|
|
122
|
+
*/
|
|
123
|
+
export declare function computeWindow(totalHeight: number, viewportRows: number, scrollOffset: number, entryCount: number, cache: EntryHeightCache): ComputeWindowResult;
|
|
124
|
+
//# sourceMappingURL=height-cache.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"height-cache.d.ts","sourceRoot":"","sources":["../src/height-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH;;;;;GAKG;AACH,eAAO,MAAM,oBAAoB,IAAI,CAAC;AAEtC;;;;;;;;;GASG;AACH,qBAAa,gBAAgB;IAC3B,4CAA4C;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAA6B;IAErD;;;;OAIG;IACH,OAAO,CAAC,MAAM,CAAiB;IAE/B,2DAA2D;IAC3D,OAAO,CAAC,GAAG,CAAgB;IAE3B;;;;;;;OAOG;IACH,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAY1C;IAED;;;OAGG;IACH,WAAW,IAAI,MAAM,CAEpB;IAED;;;;OAIG;IACH,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAM5C;IAED;;;OAGG;IACH,SAAS,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAExC;IAED;;OAEG;IACH,IAAI,IAAI,IAAI,MAAM,CAEjB;IAED;;;;;;;OAOG;IACH,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAkB5C;IAED;;OAEG;IACH,KAAK,IAAI,IAAI,CAIZ;IAID,4EAA4E;IAC5E,OAAO,CAAC,OAAO;CAQhB;AAED;;;;;;;;;;;GAWG;AACH,MAAM,WAAW,mBAAmB;IAClC,sDAAsD;IACtD,QAAQ,EAAE,MAAM,CAAC;IACjB,2EAA2E;IAC3E,MAAM,EAAE,MAAM,CAAC;IACf,wEAAwE;IACxE,WAAW,EAAE,MAAM,CAAC;IACpB,2EAA2E;IAC3E,WAAW,EAAE,MAAM,CAAC;IACpB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,6EAA6E;IAC7E,QAAQ,EAAE,OAAO,CAAC;CACnB;AAUD;;;;;;;;;;;GAWG;AACH,wBAAgB,aAAa,CAC3B,WAAW,EAAE,MAAM,EACnB,YAAY,EAAE,MAAM,EACpB,YAAY,EAAE,MAAM,EACpB,UAAU,EAAE,MAAM,EAClB,KAAK,EAAE,gBAAgB,GACtB,mBAAmB,CA4DrB"}
|
|
@@ -33,6 +33,8 @@ export interface AuthPanelController {
|
|
|
33
33
|
* close the panel.
|
|
34
34
|
*/
|
|
35
35
|
onAuthCtrlC: () => void;
|
|
36
|
+
/** Open the existing masked modal for a slash-command secret prompt. */
|
|
37
|
+
readSecret: (label: string) => Promise<string>;
|
|
36
38
|
}
|
|
37
39
|
export declare function useAuthPanel(opts: UseAuthPanelOptions): AuthPanelController;
|
|
38
40
|
//# sourceMappingURL=use-auth-panel.d.ts.map
|