@oh-my-pi/pi-tui 18.8.7 → 18.8.9
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/CHANGELOG.md +52 -86
- package/dist/types/charts/chart-plan.d.ts +11 -5
- package/dist/types/charts/chart-svg.d.ts +11 -7
- package/dist/types/charts/table-data.d.ts +6 -1
- package/dist/types/chat/execution-shared.d.ts +6 -5
- package/dist/types/keybinding-matchers.d.ts +3 -0
- package/dist/types/kitty-graphics.d.ts +2 -2
- package/dist/types/multiplexers/cmux.d.ts +16 -0
- package/dist/types/multiplexers/herdr.d.ts +26 -0
- package/dist/types/multiplexers/notify.d.ts +13 -0
- package/dist/types/multiplexers/orca.d.ts +12 -0
- package/dist/types/multiplexers/screen.d.ts +9 -0
- package/dist/types/multiplexers/tmux.d.ts +29 -0
- package/dist/types/multiplexers/types.d.ts +100 -0
- package/dist/types/multiplexers/wmux.d.ts +12 -0
- package/dist/types/multiplexers/zellij.d.ts +12 -0
- package/dist/types/overlays/annotation-overlay.d.ts +12 -0
- package/dist/types/overlays/annotation-types.d.ts +2 -0
- package/dist/types/overlays/hook-selector.d.ts +9 -4
- package/dist/types/overlays/model-browser.d.ts +2 -2
- package/dist/types/overlays/model-hub.d.ts +21 -4
- package/dist/types/overlays/session-observer-registry.d.ts +2 -0
- package/dist/types/overlays/usage-dashboard.d.ts +3 -1
- package/dist/types/status-line/types.d.ts +3 -3
- package/dist/types/terminal-capabilities.d.ts +24 -32
- package/dist/types/terminal-multiplexer.d.ts +127 -14
- package/dist/types/terminal.d.ts +5 -4
- package/dist/types/theme/symbols.d.ts +1 -1
- package/dist/types/tmux.d.ts +1 -4
- package/dist/types/tools/eval.d.ts +1 -1
- package/dist/types/tools/native-view.d.ts +47 -0
- package/dist/types/tools/renderer.d.ts +15 -2
- package/dist/types/tui.d.ts +20 -0
- package/dist/types/vim.d.ts +19 -5
- package/package.json +9 -9
- package/src/charts/chart-plan.ts +152 -12
- package/src/charts/chart-svg.ts +479 -126
- package/src/charts/table-data.ts +43 -8
- package/src/chat/execution-shared.ts +42 -25
- package/src/chat/svg-figure.ts +45 -8
- package/src/chat/tool-execution.ts +9 -2
- package/src/components/editor.ts +182 -5
- package/src/keybinding-matchers.ts +6 -2
- package/src/kitty-graphics.ts +4 -4
- package/src/multiplexers/cmux.ts +29 -0
- package/src/multiplexers/herdr.ts +64 -0
- package/src/multiplexers/notify.ts +24 -0
- package/src/multiplexers/orca.ts +16 -0
- package/src/multiplexers/screen.ts +15 -0
- package/src/multiplexers/tmux.ts +40 -0
- package/src/multiplexers/types.ts +110 -0
- package/src/multiplexers/wmux.ts +16 -0
- package/src/multiplexers/zellij.ts +24 -0
- package/src/overlays/agent-hub.ts +7 -3
- package/src/overlays/annotation-overlay.ts +87 -6
- package/src/overlays/annotation-types.ts +2 -0
- package/src/overlays/hook-selector.ts +12 -5
- package/src/overlays/model-browser.ts +3 -3
- package/src/overlays/model-hub.ts +107 -27
- package/src/overlays/session-observer-registry.ts +10 -2
- package/src/overlays/usage-dashboard.ts +70 -23
- package/src/prompt/composer.ts +1 -0
- package/src/status-line/component.ts +12 -8
- package/src/status-line/segments.ts +10 -11
- package/src/status-line/types.ts +3 -3
- package/src/terminal-capabilities.ts +65 -181
- package/src/terminal-multiplexer.ts +112 -33
- package/src/terminal.ts +34 -28
- package/src/theme/session-color.ts +1 -7
- package/src/theme/symbols.ts +5 -0
- package/src/theme/theme.ts +7 -4
- package/src/tmux.ts +4 -11
- package/src/tools/bash.ts +82 -31
- package/src/tools/eval.ts +149 -123
- package/src/tools/native-view.ts +102 -1
- package/src/tools/renderer.ts +15 -2
- package/src/tui.ts +86 -12
- package/src/vim.ts +333 -18
package/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,57 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [18.8.9] - 2026-10-10
|
|
6
|
+
|
|
7
|
+
### Breaking Changes
|
|
8
|
+
|
|
9
|
+
- Removed the `isInsideTmux()`, `isInsideZellij()`, and `isInsideHerdr()` exports; use `hasTerminalMultiplexerSession("tmux" | "zellij" | "herdr", env)` instead ([#13620](https://github.com/can1357/oh-my-pi/pull/13620) by [@anatoli-tsinovoy](https://github.com/anatoli-tsinovoy))
|
|
10
|
+
|
|
11
|
+
### Added
|
|
12
|
+
|
|
13
|
+
- `classifyTerminalMultiplexer()` reports `"orca"` inside Orca terminals while `isInsideTerminalMultiplexer()` stays false there, so Orca keeps the direct-terminal render path; `TERMINAL_MULTIPLEXER_ENV_KEYS` lists every environment variable multiplexer detection reads ([#13620](https://github.com/can1357/oh-my-pi/pull/13620) by [@anatoli-tsinovoy](https://github.com/anatoli-tsinovoy))
|
|
14
|
+
- Added `terminalMultiplexerSessions()`, `terminalMultiplexerForTerm()`, `classifyTerminalMultiplexerModule()`, and `routeTerminalMultiplexerNotification()`, driven by one multiplexer registry that now owns notification routing and per-multiplexer capability overrides ([#13620](https://github.com/can1357/oh-my-pi/pull/13620) by [@anatoli-tsinovoy](https://github.com/anatoli-tsinovoy))
|
|
15
|
+
- Added `change` and `progress` table-chart kinds with `ChartSpec.baseline` and `TableColumn.scores`: a before/after table whose rows have their own units charts each metric as a factor of the baseline column (rows without two numbers are named in the caption), and `analyzeTable` reads whole-number scores (`12/12`, `154/160`) as the percent of their total, keeping `a / b` pairs and lists as written
|
|
16
|
+
|
|
17
|
+
### Changed
|
|
18
|
+
|
|
19
|
+
- `StatusLineComponent.describeComposerFacts()` includes the configured `git` segment among the composer's facts (branch and status, the `status.git` click action, pinned so it outlasts the other facts) instead of leaving the branch to Tern's pane header ([#15220](https://github.com/can1357/oh-my-pi/pull/15220) by [@H4vC](https://github.com/H4vC))
|
|
20
|
+
- Small-multiple table charts with more than three panels and at most six categories draw as bands of per-metric panels with a color legend, and `worthCharting` counts their panels like categories
|
|
21
|
+
- Table charts take the look of Apple's charts and Tern: a UI sans, hairline gridlines, rounded bars and cells, smooth lines over a soft area fill, dot legends, left-aligned category labels that never run off the edge, and axes labeled in one unit (`0, 5k, 10k`)
|
|
22
|
+
- Line charts whose series differ 8× or more in size stack panels on their own axes instead of flattening the smaller lines, and their end labels no longer overlap
|
|
23
|
+
- SVG figure series colors `--c1`…`--c6` are an even-weight palette led by the theme accent's hue instead of syntax colors
|
|
24
|
+
|
|
25
|
+
### Fixed
|
|
26
|
+
|
|
27
|
+
- Fixed `parseCell` throwing on table cells such as `3 constructor` or `2 valueOf calls`, and reading a `constructor` cell as a missing value
|
|
28
|
+
|
|
29
|
+
## [18.8.8] - 2026-10-10
|
|
30
|
+
|
|
31
|
+
### Breaking Changes
|
|
32
|
+
|
|
33
|
+
- `ModelHubCallbacks.onCompactionPointChange` now receives a `confirmed` flag and returns a `CompactionPointChangeResult` (`{ kind: "error" }` or `{ kind: "confirm" }`) instead of an error string; a `confirm` result shows a warning that a second Enter on the same input accepts ([#15048](https://github.com/can1357/oh-my-pi/pull/15048) by [@H4vC](https://github.com/H4vC))
|
|
34
|
+
- `ModelCompactionPoint.percent` is replaced by `basis`, a short explanation of why the model compacts there (`fixed`, `85% of 400K base`, `80% of window`) that the model hub preview shows next to the trigger ([#15065](https://github.com/can1357/oh-my-pi/pull/15065) by [@H4vC](https://github.com/H4vC))
|
|
35
|
+
|
|
36
|
+
### Added
|
|
37
|
+
|
|
38
|
+
- Added an `inline` option to `HookSelectorComponent` that keeps a selector in the composer slot in Tern instead of opening it as a sheet over the screen ([#15058](https://github.com/can1357/oh-my-pi/pull/15058) by [@H4vC](https://github.com/H4vC))
|
|
39
|
+
- Added `ModelHubCallbacks.previewCompactionPoint`, whose line the compaction limit field shows while you type instead of the input syntax ([#15065](https://github.com/can1357/oh-my-pi/pull/15065) by [@H4vC](https://github.com/H4vC))
|
|
40
|
+
- Added Vim find and till motions (`f`, `F`, `t`, `T`) in the prompt editor, with `;` and `,` to repeat them ([#15100](https://github.com/can1357/oh-my-pi/pull/15100) by [@Shadorain](https://github.com/Shadorain))
|
|
41
|
+
- Added Vim replace (`r`, `R`) in the prompt editor ([#15100](https://github.com/can1357/oh-my-pi/pull/15100) by [@Shadorain](https://github.com/Shadorain))
|
|
42
|
+
- Added Vim bracket and quote matching (`%`), paragraph motions (`{`, `}`), line join (`J`), and indent (`>>`, `<<`) in the prompt editor ([#15100](https://github.com/can1357/oh-my-pi/pull/15100) by [@Shadorain](https://github.com/Shadorain))
|
|
43
|
+
- Added an external-editor key (Ctrl+G by default) to the annotation overlay for the note draft and, when the host provides `onExternalEditor`, the source being annotated; an edited text source is returned as `editedText` on the paste result ([#15151](https://github.com/can1357/oh-my-pi/pull/15151) by [@Shadorain](https://github.com/Shadorain))
|
|
44
|
+
- Added `TUI.releaseHeldInput()`: on a terminal expected to speak TSP, a `deferInput` start now holds keystrokes (TSP events and the cell-size reply still apply; Ctrl+C/Ctrl+D release early) until the app calls it once its session is wired; such terminals also skip the sixel probe ([#15120](https://github.com/can1357/oh-my-pi/pull/15120) by [@H4vC](https://github.com/H4vC))
|
|
45
|
+
- Added `TUI.replaceHeldFocus(previous, next)`, which `Composer.setEditor()` calls so a swapped-in editor inherits held startup keys; only keys for the start-time focus owner are now held, and a dialog that takes focus gets its input live ([#15122](https://github.com/can1357/oh-my-pi/pull/15122) by [@H4vC](https://github.com/H4vC))
|
|
46
|
+
- Added `RenderResultOptions.elapsedMs` and `cancelled`, `NativeToolHead.command` and `NativeToolView.preview: "children"` for native describe hooks
|
|
47
|
+
|
|
48
|
+
### Changed
|
|
49
|
+
|
|
50
|
+
- Tern draws each bash run, eval cell and `!`/`$` run as one box: the command or code, its output, status lines and a foot with state, time and facts; images sit below the box and the bash head shows the intent instead of the command
|
|
51
|
+
|
|
52
|
+
### Fixed
|
|
53
|
+
|
|
54
|
+
- Fixed the Agents hub Time column rewinding and freezing for running subagents between progress updates ([#15140](https://github.com/can1357/oh-my-pi/pull/15140) by [@H4vC](https://github.com/H4vC))
|
|
55
|
+
|
|
5
56
|
## [18.8.7] - 2026-10-09
|
|
6
57
|
|
|
7
58
|
### Added
|
|
@@ -2955,89 +3006,4 @@ Initial release under @oh-my-pi scope. See previous releases at [badlogic/pi-mon
|
|
|
2955
3006
|
- Added undo support to Editor with Ctrl+- hotkey. Undo coalesces consecutive word characters into one unit (fish-style). ([#831](https://github.com/badlogic/pi-mono/pull/831) by [@Perlence](https://github.com/Perlence))
|
|
2956
3007
|
- Added legacy terminal support for Ctrl+symbol keys (Ctrl+\, Ctrl+], Ctrl+-) and their Ctrl+Alt variants. ([#831](https://github.com/badlogic/pi-mono/pull/831) by [@Perlence](https://github.com/Perlence))
|
|
2957
3008
|
|
|
2958
|
-
|
|
2959
|
-
|
|
2960
|
-
### Added
|
|
2961
|
-
|
|
2962
|
-
- Added `showHardwareCursor` getter and setter to control cursor visibility while keeping IME positioning active. ([#800](https://github.com/badlogic/pi-mono/pull/800) by [@ghoulr](https://github.com/ghoulr))
|
|
2963
|
-
- Added Emacs-style kill ring editing with yank and yank-pop keybindings. ([#810](https://github.com/badlogic/pi-mono/pull/810) by [@Perlence](https://github.com/Perlence))
|
|
2964
|
-
- Added legacy Alt+letter handling and Alt+D delete word forward support in the editor keymap. ([#810](https://github.com/badlogic/pi-mono/pull/810) by [@Perlence](https://github.com/Perlence))
|
|
2965
|
-
|
|
2966
|
-
## [0.48.0] - 2026-01-16
|
|
2967
|
-
|
|
2968
|
-
### Added
|
|
2969
|
-
|
|
2970
|
-
- `EditorOptions` with optional `paddingX` for horizontal content padding, plus `getPaddingX()`/`setPaddingX()` methods ([#791](https://github.com/badlogic/pi-mono/pull/791) by [@ferologics](https://github.com/ferologics))
|
|
2971
|
-
|
|
2972
|
-
### Changed
|
|
2973
|
-
|
|
2974
|
-
- Hardware cursor is now disabled by default for better terminal compatibility. Set `PI_HARDWARE_CURSOR=1` to enable (replaces `PI_NO_HARDWARE_CURSOR=1` which disabled it).
|
|
2975
|
-
|
|
2976
|
-
### Fixed
|
|
2977
|
-
|
|
2978
|
-
- Decode Kitty CSI-u printable sequences in the editor so shifted symbol keys (e.g., `@`, `?`) work in terminals that enable Kitty keyboard protocol ([#779](https://github.com/badlogic/pi-mono/pull/779) by [@iamd3vil](https://github.com/iamd3vil))
|
|
2979
|
-
|
|
2980
|
-
## [0.47.0] - 2026-01-16
|
|
2981
|
-
|
|
2982
|
-
### Breaking Changes
|
|
2983
|
-
|
|
2984
|
-
- `Editor` constructor now requires `TUI` as first parameter: `new Editor(tui, theme)`. This enables automatic vertical scrolling when content exceeds terminal height. ([#732](https://github.com/badlogic/pi-mono/issues/732))
|
|
2985
|
-
|
|
2986
|
-
### Added
|
|
2987
|
-
|
|
2988
|
-
- Hardware cursor positioning for IME support in `Editor` and `Input` components. The terminal cursor now follows the text cursor position, enabling proper IME candidate window placement for CJK input. ([#719](https://github.com/badlogic/pi-mono/pull/719))
|
|
2989
|
-
- `Focusable` interface for components that need hardware cursor positioning. Implement `focused: boolean` and emit `CURSOR_MARKER` in render output when focused.
|
|
2990
|
-
- `CURSOR_MARKER` constant and `isFocusable()` type guard exported from the package
|
|
2991
|
-
- Editor now supports Page Up/Down keys (Fn+Up/Down on MacBook) for scrolling through large content ([#732](https://github.com/badlogic/pi-mono/issues/732))
|
|
2992
|
-
- Expanded keymap coverage for terminal compatibility: added support for Home/End keys in tmux, additional modifier combinations, and improved key sequence parsing ([#752](https://github.com/badlogic/pi-mono/pull/752) by [@richardgill](https://github.com/richardgill))
|
|
2993
|
-
|
|
2994
|
-
### Fixed
|
|
2995
|
-
|
|
2996
|
-
- Editor no longer corrupts terminal display when text exceeds screen height. Content now scrolls vertically with indicators showing lines above/below the viewport. Max height is 30% of terminal (minimum 5 lines). ([#732](https://github.com/badlogic/pi-mono/issues/732))
|
|
2997
|
-
- `visibleWidth()` and `extractAnsiCode()` now handle APC escape sequences (`ESC _ ... BEL`), fixing width calculation and string slicing for strings containing cursor markers
|
|
2998
|
-
- SelectList now handles multi-line descriptions by replacing newlines with spaces ([#728](https://github.com/badlogic/pi-mono/pull/728) by [@richardgill](https://github.com/richardgill))
|
|
2999
|
-
|
|
3000
|
-
## [0.46.0] - 2026-01-15
|
|
3001
|
-
|
|
3002
|
-
### Fixed
|
|
3003
|
-
|
|
3004
|
-
- Keyboard shortcuts (Ctrl+C, Ctrl+D, etc.) now work on non-Latin keyboard layouts (Russian, Ukrainian, Bulgarian, etc.) in terminals supporting Kitty keyboard protocol with alternate key reporting ([#718](https://github.com/badlogic/pi-mono/pull/718) by [@dannote](https://github.com/dannote))
|
|
3005
|
-
|
|
3006
|
-
## [0.45.6] - 2026-01-13
|
|
3007
|
-
|
|
3008
|
-
### Added
|
|
3009
|
-
|
|
3010
|
-
- `OverlayOptions` API for overlay positioning and sizing with CSS-like values: `width`, `maxHeight`, `row`, `col` accept numbers (absolute) or percentage strings (e.g., `"50%"`). Also supports `minWidth`, `anchor`, `offsetX`, `offsetY`, `margin`. ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
|
|
3011
|
-
- `OverlayOptions.visible` callback for responsive overlays - receives terminal dimensions, return false to hide ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
|
|
3012
|
-
- `showOverlay()` now returns `OverlayHandle` with `hide()`, `setHidden(boolean)`, `isHidden()` for programmatic visibility control ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
|
|
3013
|
-
- New exported types: `OverlayAnchor`, `OverlayHandle`, `OverlayMargin`, `OverlayOptions`, `SizeValue` ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
|
|
3014
|
-
- `truncateToWidth()` now accepts optional `pad` parameter to pad result with spaces to exactly `maxWidth` ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
|
|
3015
|
-
|
|
3016
|
-
### Fixed
|
|
3017
|
-
|
|
3018
|
-
- Overlay compositing crash when rendered lines exceed terminal width due to complex ANSI/OSC sequences (e.g., hyperlinks in subagent output) ([#667](https://github.com/badlogic/pi-mono/pull/667) by [@nicobailon](https://github.com/nicobailon))
|
|
3019
|
-
|
|
3020
|
-
## [0.44.0] - 2026-01-12
|
|
3021
|
-
|
|
3022
|
-
### Added
|
|
3023
|
-
|
|
3024
|
-
- `SettingsListOptions` with `enableSearch` for fuzzy filtering in `SettingsList` ([#643](https://github.com/badlogic/pi-mono/pull/643) by [@ninlds](https://github.com/ninlds))
|
|
3025
|
-
- `pageUp` and `pageDown` key support with `selectPageUp`/`selectPageDown` editor actions ([#662](https://github.com/badlogic/pi-mono/pull/662) by [@aliou](https://github.com/aliou))
|
|
3026
|
-
|
|
3027
|
-
### Fixed
|
|
3028
|
-
|
|
3029
|
-
- Numbered list items showing "1." for all items when code blocks break list continuity ([#660](https://github.com/badlogic/pi-mono/pull/660) by [@ogulcancelik](https://github.com/ogulcancelik))
|
|
3030
|
-
|
|
3031
|
-
## [0.43.0] - 2026-01-11
|
|
3032
|
-
|
|
3033
|
-
### Added
|
|
3034
|
-
|
|
3035
|
-
- `fuzzyFilter()` and `fuzzyMatch()` utilities for fuzzy text matching
|
|
3036
|
-
- Slash command autocomplete now uses fuzzy matching instead of prefix matching
|
|
3037
|
-
|
|
3038
|
-
### Fixed
|
|
3039
|
-
|
|
3040
|
-
- Cursor now moves to end of content on exit, preventing status line from being overwritten ([#629](https://github.com/badlogic/pi-mono/pull/629) by [@tallshort](https://github.com/tallshort))
|
|
3041
|
-
- Reset ANSI styles after each rendered line to prevent style leakage
|
|
3042
|
-
|
|
3043
|
-
Older entries are archived in [packages/tui/CHANGELOG.md@4787659281ba](https://github.com/can1357/oh-my-pi/blob/4787659281ba47f5a3707bbf5ee61742e9373c42/packages/tui/CHANGELOG.md).
|
|
3009
|
+
Older entries are archived in [packages/tui/CHANGELOG.md@110bcbdfe908](https://github.com/can1357/oh-my-pi/blob/110bcbdfe908cbe2978e7607d4f2fe64a0c13de0/packages/tui/CHANGELOG.md).
|
|
@@ -24,14 +24,16 @@ import { type Dimension, type TableAnalysis } from "./table-data.js";
|
|
|
24
24
|
* - `share`: parts of a whole (percentages summing to 100).
|
|
25
25
|
* - `diverging`: signed changes around zero.
|
|
26
26
|
* - `scatter`: two continuous measures per item.
|
|
27
|
+
* - `change`: metrics in different units against a baseline column (before/after), as factors.
|
|
28
|
+
* - `progress`: scores out of a total (`12/12`), as filled tracks.
|
|
27
29
|
*/
|
|
28
|
-
export type ChartKind = "bar" | "paired" | "grouped" | "line" | "heatmap" | "multiples" | "share" | "diverging" | "scatter";
|
|
30
|
+
export type ChartKind = "bar" | "paired" | "grouped" | "line" | "heatmap" | "multiples" | "share" | "diverging" | "scatter" | "change" | "progress";
|
|
29
31
|
/** What to draw from a table: the kind, the column naming each category, and the columns plotted. */
|
|
30
32
|
export interface ChartPlan {
|
|
31
33
|
readonly kind: ChartKind;
|
|
32
34
|
/** Column naming each category (or holding the x values of a line); rows are numbered without one. */
|
|
33
35
|
readonly label: number | undefined;
|
|
34
|
-
/** Plotted columns, in order. */
|
|
36
|
+
/** Plotted columns, in order; a `change` measures the rest against the first (or its `a → b` cells). */
|
|
35
37
|
readonly series: readonly number[];
|
|
36
38
|
/** Each data row is its own series (a metric with its own unit) and the plotted columns are the categories. */
|
|
37
39
|
readonly transpose: boolean;
|
|
@@ -73,6 +75,8 @@ export interface ChartSpec {
|
|
|
73
75
|
readonly caption?: string;
|
|
74
76
|
/** Name of the category axis (the label column's header). */
|
|
75
77
|
readonly axis: string;
|
|
78
|
+
/** What a `change` measures against (its baseline column); its points are factors of it. */
|
|
79
|
+
readonly baseline?: string;
|
|
76
80
|
}
|
|
77
81
|
/** The local best guess at a chart for `table`, or `undefined` when no chart fits. */
|
|
78
82
|
export declare function planChart(table: TableAnalysis): ChartPlan | undefined;
|
|
@@ -85,8 +89,10 @@ export declare function planChart(table: TableAnalysis): ChartPlan | undefined;
|
|
|
85
89
|
export declare function buildChart(table: TableAnalysis, plan: ChartPlan): ChartSpec | undefined;
|
|
86
90
|
/**
|
|
87
91
|
* Whether a chart of `spec` reads faster than its table: at least four
|
|
88
|
-
* categories, and either nine plotted values or a
|
|
89
|
-
* On a model-judged sample of assistant tables this
|
|
90
|
-
* tables a chart clearly helped while rejecting most two-
|
|
92
|
+
* categories (or small-multiple panels), and either nine plotted values or a
|
|
93
|
+
* 3× spread within a series. On a model-judged sample of assistant tables this
|
|
94
|
+
* gate kept 85% of the tables a chart clearly helped while rejecting most two-
|
|
95
|
+
* and three-row ones. A `change` needs three metrics and one moving by
|
|
96
|
+
* {@link NOTABLE_FACTOR} either way: its factors are what the table lacks.
|
|
91
97
|
*/
|
|
92
98
|
export declare function worthCharting(spec: ChartSpec): boolean;
|
|
@@ -6,10 +6,12 @@
|
|
|
6
6
|
* so the host resolves them against the live theme (`prepareSvg`) for both
|
|
7
7
|
* the rasterized terminal image and the native TSP blob.
|
|
8
8
|
*
|
|
9
|
-
*
|
|
10
|
-
*
|
|
11
|
-
* and
|
|
12
|
-
*
|
|
9
|
+
* Styled after Apple's charts and Tern's UI: a UI sans (Geist where Tern
|
|
10
|
+
* provides it), muted labels, hairline gridlines that recede behind the
|
|
11
|
+
* marks, bars and cells with rounded corners, smooth lines over a soft area
|
|
12
|
+
* fill, dot legends. 13-unit labels land near the terminal's own glyph size
|
|
13
|
+
* at 16 user units per row; bolded table cells draw at full strength while
|
|
14
|
+
* their neighbours recede.
|
|
13
15
|
*/
|
|
14
16
|
import type { ChartSpec } from "./chart-plan.js";
|
|
15
17
|
import type { Dimension } from "./table-data.js";
|
|
@@ -24,7 +26,9 @@ export declare function renderChartSvg(spec: ChartSpec): ChartSvg;
|
|
|
24
26
|
/** One-line description of the chart, for screen readers and terminals that show the alt text. */
|
|
25
27
|
export declare function chartAlt(spec: ChartSpec): string;
|
|
26
28
|
/**
|
|
27
|
-
* A value in base units as an axis label: durations and sizes in the unit
|
|
28
|
-
*
|
|
29
|
+
* A value in base units as an axis label: durations and sizes in the unit,
|
|
30
|
+
* counts compacted under the suffix (`12k`, `3.4M`), that `magnitude` reads
|
|
31
|
+
* best in — the value's own size by default, an axis' largest tick to keep
|
|
32
|
+
* its labels in one unit.
|
|
29
33
|
*/
|
|
30
|
-
export declare function formatValue(value: number, dim: Dimension, unit: string): string;
|
|
34
|
+
export declare function formatValue(value: number, dim: Dimension, unit: string, magnitude?: number): string;
|
|
@@ -42,7 +42,10 @@ export interface NumberCell {
|
|
|
42
42
|
readonly toFigure?: string;
|
|
43
43
|
/** `a–b`: `b`, in the same base units. */
|
|
44
44
|
readonly upper?: number;
|
|
45
|
-
/**
|
|
45
|
+
/**
|
|
46
|
+
* `a/b`: `b`. {@link analyzeTable} reads a score (`12/12`, `154/160`) as the
|
|
47
|
+
* percent of `b` reached; a pair (`85 / 147` under `Edit / read calls`) keeps `a`.
|
|
48
|
+
*/
|
|
46
49
|
readonly denominator?: number;
|
|
47
50
|
}
|
|
48
51
|
/** A cell that is not a quantity. */
|
|
@@ -70,6 +73,8 @@ export interface TableColumn {
|
|
|
70
73
|
readonly unit: string;
|
|
71
74
|
/** Numeric cells disagree on dimension (a metric-per-row table). */
|
|
72
75
|
readonly mixed: boolean;
|
|
76
|
+
/** Numeric cells are mostly scores out of a total (`12/12`), read as percent of it. */
|
|
77
|
+
readonly scores: boolean;
|
|
73
78
|
/** Every numeric data cell holds the same value: an echoed setting, not a measure. */
|
|
74
79
|
readonly constant: boolean;
|
|
75
80
|
/** Share of numeric cells written with an explicit sign. */
|
|
@@ -78,7 +78,7 @@ export interface ExecutionToolInput {
|
|
|
78
78
|
/** Tool name for the head icon (`bash`, `eval`). */
|
|
79
79
|
readonly name: string;
|
|
80
80
|
readonly title: string;
|
|
81
|
-
/** The command / cell source
|
|
81
|
+
/** The command / cell source: the run box's input and the head's Copy command. */
|
|
82
82
|
readonly command: string;
|
|
83
83
|
readonly lang: string;
|
|
84
84
|
/** Excluded from context (`!!`/`$$`). */
|
|
@@ -96,10 +96,11 @@ export interface ExecutionToolInput {
|
|
|
96
96
|
readonly artifactError?: OutputArtifactError;
|
|
97
97
|
}
|
|
98
98
|
/**
|
|
99
|
-
* A user `!`/`$` run as the agent's `tool` frame (§6.6):
|
|
100
|
-
*
|
|
101
|
-
*
|
|
102
|
-
*
|
|
99
|
+
* A user `!`/`$` run as the agent's `tool` frame (§6.6): a head with a `you`
|
|
100
|
+
* badge (plus `not sent` when excluded from context) and the command for Copy
|
|
101
|
+
* command; the body is one run box — the source, the output as an `ansi` mini
|
|
102
|
+
* terminal following its tail, and the foot (state, time, truncation) — with
|
|
103
|
+
* any images below it. Timer, exit chip and cancelled note stay head data.
|
|
103
104
|
*/
|
|
104
105
|
export declare function describeExecutionTool(input: ExecutionToolInput): NativeNode;
|
|
105
106
|
/**
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import type { KeyId } from "./app-keybindings.js";
|
|
1
2
|
/**
|
|
2
3
|
* Match the coding-agent interrupt key.
|
|
3
4
|
*
|
|
@@ -18,6 +19,8 @@ export declare function matchesSelectDown(data: string): boolean;
|
|
|
18
19
|
export declare function matchesSelectPageUp(data: string): boolean;
|
|
19
20
|
/** Match the generic selector page-down keybinding. */
|
|
20
21
|
export declare function matchesSelectPageDown(data: string): boolean;
|
|
22
|
+
/** Effective external-editor key: the first bound key, or Ctrl+G when unbound. */
|
|
23
|
+
export declare function appExternalEditorKey(): KeyId;
|
|
21
24
|
/** Match the external-editor keybinding, falling back to Ctrl+G when unbound. */
|
|
22
25
|
export declare function matchesAppExternalEditor(data: string): boolean;
|
|
23
26
|
/**
|
|
@@ -30,8 +30,8 @@ export interface KittyGraphicsFeatures {
|
|
|
30
30
|
* cannot use cursor-positioned placements because the outer terminal does not
|
|
31
31
|
* know pane scroll/reflow state. An explicit `PI_FORCE_IMAGE_PROTOCOL=kitty`
|
|
32
32
|
* opts into placeholders under any multiplexer — matching `timg -pk`.
|
|
33
|
-
* Automatic
|
|
34
|
-
* that
|
|
33
|
+
* Automatic fallback stays off inside multiplexers whose pane marker does not
|
|
34
|
+
* prove that a Kitty renderer is enabled (Herdr's is experimental).
|
|
35
35
|
*
|
|
36
36
|
* `PI_NO_KITTY_PLACEHOLDERS=1` and `PI_KITTY_PLACEHOLDERS=0` remain hard
|
|
37
37
|
* opt-outs; `PI_KITTY_PLACEHOLDERS=1` explicitly opts in anywhere else.
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export declare const cmuxMultiplexer: {
|
|
2
|
+
readonly id: "cmux";
|
|
3
|
+
readonly precedence: "session";
|
|
4
|
+
readonly sessionEnvKeys: readonly ["CMUX_WORKSPACE_ID", "CMUX_SURFACE_ID", "CMUX_REMOTE_TRANSPORT"];
|
|
5
|
+
readonly ownsScreenGrid: true;
|
|
6
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Workspace/socket state alone is not enough: only the injected surface UUID
|
|
9
|
+
* identifies the pane that should receive the notification. Without a valid
|
|
10
|
+
* surface, or without the binary, delivery falls through unchanged.
|
|
11
|
+
*/
|
|
12
|
+
readonly notifier: {
|
|
13
|
+
readonly tier: "surface";
|
|
14
|
+
readonly send: ({ message, env }: import("./types.js").TerminalMultiplexerNotificationRequest) => boolean;
|
|
15
|
+
};
|
|
16
|
+
};
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
export declare const herdrMultiplexer: {
|
|
2
|
+
readonly id: "herdr";
|
|
3
|
+
readonly precedence: "session";
|
|
4
|
+
readonly sessionEnvKeys: readonly ["HERDR_ENV", "HERDR_PANE_ID", "HERDR_TAB_ID", "HERDR_WORKSPACE_ID"];
|
|
5
|
+
readonly ownsScreenGrid: true;
|
|
6
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
7
|
+
/**
|
|
8
|
+
* Herdr multiplexes panes like tmux but swallows bare OSC 9 / OSC 99 and has
|
|
9
|
+
* no DCS passthrough envelope, and its bell relay does not flag a
|
|
10
|
+
* backgrounded tab — so without its CLI a backgrounded pane gets no signal
|
|
11
|
+
* at all that the agent finished or is waiting for input.
|
|
12
|
+
*
|
|
13
|
+
* `sound` maps the notification kind onto what Herdr offers: a question
|
|
14
|
+
* waiting on the user and a turn that stopped with an error both need the
|
|
15
|
+
* human and ring `request`, a settled turn rings `done`, anything else stays
|
|
16
|
+
* silent. The exact pane ID addresses the CLI call; without a valid one, or
|
|
17
|
+
* without the binary, delivery falls through.
|
|
18
|
+
*/
|
|
19
|
+
readonly notifier: {
|
|
20
|
+
readonly tier: "pane";
|
|
21
|
+
readonly send: ({ message, env }: import("./types.js").TerminalMultiplexerNotificationRequest) => boolean;
|
|
22
|
+
};
|
|
23
|
+
readonly hyperlinks: "render";
|
|
24
|
+
readonly honorsSynchronizedOutput: true;
|
|
25
|
+
readonly imagesRequireOverride: true;
|
|
26
|
+
};
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
import type { TerminalNotification } from "../terminal-capabilities.js";
|
|
2
|
+
/** Title for out-of-band multiplexer notifications that carry none of their own. */
|
|
3
|
+
export declare const DEFAULT_NOTIFICATION_TITLE = "omp";
|
|
4
|
+
/** Title and body for an out-of-band multiplexer notification (cmux, Herdr). */
|
|
5
|
+
export declare function notificationTitleAndBody(message: string | TerminalNotification): {
|
|
6
|
+
title: string;
|
|
7
|
+
body: string;
|
|
8
|
+
};
|
|
9
|
+
/**
|
|
10
|
+
* Start a notifier CLI without waiting for or pinning it. Returns false when
|
|
11
|
+
* the binary cannot be spawned, which leaves delivery to the terminal fallback.
|
|
12
|
+
*/
|
|
13
|
+
export declare function spawnNotifier(cmd: string[]): boolean;
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Orca is an xterm.js-based IDE whose terminals expose paired pane/worktree IDs.
|
|
3
|
+
* It is recognized for launches, but it ranks below nested multiplexers and keeps
|
|
4
|
+
* the direct-terminal render path it used before it was recognized.
|
|
5
|
+
*/
|
|
6
|
+
export declare const orcaMultiplexer: {
|
|
7
|
+
readonly id: "orca";
|
|
8
|
+
readonly precedence: "outerApp";
|
|
9
|
+
readonly sessionEnvKeys: readonly ["ORCA_PANE_KEY", "ORCA_WORKTREE_ID"];
|
|
10
|
+
readonly ownsScreenGrid: false;
|
|
11
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
12
|
+
};
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export declare const screenMultiplexer: {
|
|
2
|
+
readonly id: "screen";
|
|
3
|
+
readonly precedence: "session";
|
|
4
|
+
readonly sessionEnvKeys: readonly ["STY"];
|
|
5
|
+
readonly termPrefix: "screen";
|
|
6
|
+
readonly ownsScreenGrid: true;
|
|
7
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
8
|
+
readonly hyperlinks: "drop";
|
|
9
|
+
};
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
/** Wrap a control sequence in tmux's DCS passthrough envelope. */
|
|
2
|
+
export declare function wrapTmuxPassthrough(payload: string): string;
|
|
3
|
+
export declare const tmuxMultiplexer: {
|
|
4
|
+
readonly id: "tmux";
|
|
5
|
+
readonly precedence: "session";
|
|
6
|
+
readonly sessionEnvKeys: readonly ["TMUX"];
|
|
7
|
+
readonly termPrefix: "tmux";
|
|
8
|
+
readonly ownsScreenGrid: true;
|
|
9
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
10
|
+
readonly notifier: {
|
|
11
|
+
readonly tier: "inBand";
|
|
12
|
+
readonly send: ({ sequence, write }: import("./types.js").TerminalMultiplexerNotificationRequest) => boolean;
|
|
13
|
+
};
|
|
14
|
+
readonly hyperlinks: {
|
|
15
|
+
readonly forward: {
|
|
16
|
+
readonly termProgram: "tmux";
|
|
17
|
+
readonly major: 3;
|
|
18
|
+
readonly minor: 4;
|
|
19
|
+
};
|
|
20
|
+
};
|
|
21
|
+
readonly backgroundColorCache: {
|
|
22
|
+
readonly passthrough: typeof wrapTmuxPassthrough;
|
|
23
|
+
readonly settleMs: 100;
|
|
24
|
+
};
|
|
25
|
+
readonly expandsRepPadding: true;
|
|
26
|
+
readonly expiresSynchronizedOutput: true;
|
|
27
|
+
readonly altRestoreEndsSynchronizedOutput: true;
|
|
28
|
+
readonly growsBeforeSigwinch: true;
|
|
29
|
+
};
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
import type { TerminalNotification } from "../terminal-capabilities.js";
|
|
2
|
+
/**
|
|
3
|
+
* Classification tier. `session` markers outrank the TERM fallback; `outerApp`
|
|
4
|
+
* hosts rank below it so a multiplexer nested inside them still wins.
|
|
5
|
+
*/
|
|
6
|
+
export type TerminalMultiplexerPrecedence = "session" | "outerApp";
|
|
7
|
+
/**
|
|
8
|
+
* Notification delivery tier, tried in this order so the innermost target wins:
|
|
9
|
+
* a `pane` notifier addresses the exact pane through the multiplexer's CLI, a
|
|
10
|
+
* `surface` notifier addresses the containing app surface, and an `inBand`
|
|
11
|
+
* notifier rewrites the terminal's own notification sequence.
|
|
12
|
+
*/
|
|
13
|
+
export type TerminalMultiplexerNotificationTier = "pane" | "surface" | "inBand";
|
|
14
|
+
/** One notification offered to a multiplexer notifier. */
|
|
15
|
+
export interface TerminalMultiplexerNotificationRequest {
|
|
16
|
+
readonly message: string | TerminalNotification;
|
|
17
|
+
readonly env: NodeJS.ProcessEnv;
|
|
18
|
+
/** The host terminal's formatted OSC notification, or `null` when it notifies with a bare BEL. */
|
|
19
|
+
readonly sequence: string | null;
|
|
20
|
+
/** Write a sequence through the active terminal. */
|
|
21
|
+
write(data: string): void;
|
|
22
|
+
}
|
|
23
|
+
export interface TerminalMultiplexerNotifier {
|
|
24
|
+
readonly tier: TerminalMultiplexerNotificationTier;
|
|
25
|
+
/** Deliver the notification. `false` leaves it to the next notifier and then the terminal fallback. */
|
|
26
|
+
send(request: TerminalMultiplexerNotificationRequest): boolean;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* OSC 8 handling inside a multiplexer session:
|
|
30
|
+
* - `render`: the multiplexer draws and opens links itself, so links work
|
|
31
|
+
* whatever the outer terminal supports, unless another session with a
|
|
32
|
+
* hyperlink policy sits in the path.
|
|
33
|
+
* - `drop`: never forwards OSC 8; its session anywhere in the path disables links.
|
|
34
|
+
* - `forward`: forwards OSC 8 once it self-reports (`TERM_PROGRAM`/`TERM_PROGRAM_VERSION`)
|
|
35
|
+
* at least `major.minor`; older or unreported versions stay off.
|
|
36
|
+
*/
|
|
37
|
+
export type TerminalMultiplexerHyperlinks = "render" | "drop" | {
|
|
38
|
+
readonly forward: {
|
|
39
|
+
/** Lowercase `TERM_PROGRAM` the multiplexer sets inside its panes. */
|
|
40
|
+
readonly termProgram: string;
|
|
41
|
+
readonly major: number;
|
|
42
|
+
readonly minor: number;
|
|
43
|
+
};
|
|
44
|
+
};
|
|
45
|
+
/** A multiplexer that answers OSC 11 from a cached copy of the outer terminal's background color. */
|
|
46
|
+
export interface TerminalMultiplexerBackgroundColorCache {
|
|
47
|
+
/** Wrap a query so it reaches the outer terminal and refreshes the cache. */
|
|
48
|
+
passthrough(query: string): string;
|
|
49
|
+
/** How long the multiplexer needs to store the outer reply before the cache is re-read. */
|
|
50
|
+
readonly settleMs: number;
|
|
51
|
+
}
|
|
52
|
+
/** Everything omp needs to recognize one terminal multiplexer and adapt to it. */
|
|
53
|
+
export interface TerminalMultiplexerModule<Id extends string = string> {
|
|
54
|
+
readonly id: Id;
|
|
55
|
+
readonly precedence: TerminalMultiplexerPrecedence;
|
|
56
|
+
/** Every environment variable `isInside()` reads. */
|
|
57
|
+
readonly sessionEnvKeys: readonly string[];
|
|
58
|
+
/** Lowercase TERM prefix that identifies the multiplexer when its session markers were stripped. */
|
|
59
|
+
readonly termPrefix?: string;
|
|
60
|
+
/**
|
|
61
|
+
* Whether the multiplexer owns the screen grid. When true, rendering takes the
|
|
62
|
+
* multiplexer path (no scrollback rebuild, anchored resize, skipped probes).
|
|
63
|
+
*/
|
|
64
|
+
readonly ownsScreenGrid: boolean;
|
|
65
|
+
isInside(env?: NodeJS.ProcessEnv): boolean;
|
|
66
|
+
/** Routes notifications the multiplexer would otherwise swallow. */
|
|
67
|
+
readonly notifier?: TerminalMultiplexerNotifier;
|
|
68
|
+
/** OSC 8 policy inside a session; unset defers to the outer terminal. */
|
|
69
|
+
readonly hyperlinks?: TerminalMultiplexerHyperlinks;
|
|
70
|
+
/**
|
|
71
|
+
* The pane's VTE honors DEC 2026 even when DECRQM is unanswered or reports
|
|
72
|
+
* the mode unrecognized (status 0): synchronized output starts on inside a
|
|
73
|
+
* session, and an unrecognized report does not turn it off.
|
|
74
|
+
*/
|
|
75
|
+
readonly honorsSynchronizedOutput?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* The session does not reveal whether its client renders graphics while
|
|
78
|
+
* outer-terminal identity variables leak in, so images and Kitty
|
|
79
|
+
* placeholders stay off unless the user forces them.
|
|
80
|
+
*/
|
|
81
|
+
readonly imagesRequireOverride?: boolean;
|
|
82
|
+
/** Platforms where the multiplexer breaks OSC 11 passthrough, so host appearance is used instead. */
|
|
83
|
+
readonly backgroundQueryBrokenOn?: readonly NodeJS.Platform[];
|
|
84
|
+
/** Present when OSC 11 replies come from a cache an explicit refresh must update first. */
|
|
85
|
+
readonly backgroundColorCache?: TerminalMultiplexerBackgroundColorCache;
|
|
86
|
+
/** Expands REP into identical styled cells, so destructive replays REP-encode their padding. */
|
|
87
|
+
readonly expandsRepPadding?: boolean;
|
|
88
|
+
/** Expires a synchronized update after a deadline, so large rebuild replays renew DEC 2026 as they stream. */
|
|
89
|
+
readonly expiresSynchronizedOutput?: boolean;
|
|
90
|
+
/**
|
|
91
|
+
* Restoring the alternate buffer schedules a redraw that ends a synchronized
|
|
92
|
+
* update early, so a synchronized resize rebuild stays on the main buffer.
|
|
93
|
+
*/
|
|
94
|
+
readonly altRestoreEndsSynchronizedOutput?: boolean;
|
|
95
|
+
/**
|
|
96
|
+
* May grow its grid before SIGWINCH reaches the app, so a rebuild-mode grow
|
|
97
|
+
* whose full viewport no longer reaches the bottom replays history.
|
|
98
|
+
*/
|
|
99
|
+
readonly growsBeforeSigwinch?: boolean;
|
|
100
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* wmux is a Windows multiplexer (Electron + xterm.js) modeled on cmux/herdr that
|
|
3
|
+
* repaints its pane in place. WMUX_CLI / WMUX_PIPE are CLI path overrides and can
|
|
4
|
+
* be set outside a wmux terminal.
|
|
5
|
+
*/
|
|
6
|
+
export declare const wmuxMultiplexer: {
|
|
7
|
+
readonly id: "wmux";
|
|
8
|
+
readonly precedence: "session";
|
|
9
|
+
readonly sessionEnvKeys: readonly ["WMUX", "WMUX_SURFACE_ID"];
|
|
10
|
+
readonly ownsScreenGrid: true;
|
|
11
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
12
|
+
};
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const zellijMultiplexer: {
|
|
2
|
+
readonly id: "zellij";
|
|
3
|
+
readonly precedence: "session";
|
|
4
|
+
readonly sessionEnvKeys: readonly ["ZELLIJ"];
|
|
5
|
+
readonly ownsScreenGrid: true;
|
|
6
|
+
readonly isInside: (env?: NodeJS.ProcessEnv) => boolean;
|
|
7
|
+
readonly notifier: {
|
|
8
|
+
readonly tier: "inBand";
|
|
9
|
+
readonly send: ({ sequence, write }: import("./types.js").TerminalMultiplexerNotificationRequest) => boolean;
|
|
10
|
+
};
|
|
11
|
+
readonly backgroundQueryBrokenOn: readonly ["darwin"];
|
|
12
|
+
};
|
|
@@ -10,6 +10,8 @@ export interface AnnotationOverlayCallbacks {
|
|
|
10
10
|
onWarning?(message: string): void;
|
|
11
11
|
/** Open the draft in the host's editor and invoke `commit` with its result. */
|
|
12
12
|
onAnnotationExternalEditor?(draft: string, commit: (text: string | null) => void): void | Promise<void>;
|
|
13
|
+
/** Open the current source in the host's editor. The overlay stays open. */
|
|
14
|
+
onExternalEditor?(): void | Promise<void>;
|
|
13
15
|
}
|
|
14
16
|
export interface CodeReviewOverlayCallbacks extends AnnotationOverlayCallbacks {
|
|
15
17
|
onComplete(result: CodeReviewOverlayResult | undefined): void;
|
|
@@ -29,6 +31,16 @@ export declare class AnnotationOverlay implements Focusable {
|
|
|
29
31
|
dispose(): void;
|
|
30
32
|
getAnnotations(): CodeReviewAnnotation[];
|
|
31
33
|
getTextAnnotations(): TextReviewAnnotation[];
|
|
34
|
+
/** Repo-relative path of the diff file under the cursor, if this is a code review. */
|
|
35
|
+
reviewFilePath(): string | undefined;
|
|
36
|
+
/** Current text-source bytes, including edits applied by {@link replaceTextSource}. */
|
|
37
|
+
textSourceText(): string | undefined;
|
|
38
|
+
/**
|
|
39
|
+
* Replace the text under review. Line notes whose quote still sits on the
|
|
40
|
+
* same row stay; a quote that moved to exactly one row is retargeted;
|
|
41
|
+
* every other line note is dropped. Returns how many were dropped.
|
|
42
|
+
*/
|
|
43
|
+
replaceTextSource(text: string): number;
|
|
32
44
|
handleInput(data: string): void;
|
|
33
45
|
describe(): NativeNode;
|
|
34
46
|
handleNativeEvent(event: NativeUiEvent): void;
|
|
@@ -57,6 +57,10 @@ export interface HookSelectorOptions {
|
|
|
57
57
|
/** Number of leading options (original order) that receive a selection
|
|
58
58
|
* marker. Defaults to every option when {@link selectionMarker} is set. */
|
|
59
59
|
markableCount?: number;
|
|
60
|
+
/** Describe as a card in the dock (the composer slot) instead of a picker
|
|
61
|
+
* sheet, so dock content above it (e.g. a `/omfg` candidate rule) stays
|
|
62
|
+
* visible and the transcript stays scrollable on native surfaces. */
|
|
63
|
+
inline?: boolean;
|
|
60
64
|
}
|
|
61
65
|
export interface HookSelectorOption {
|
|
62
66
|
label: string;
|
|
@@ -70,10 +74,11 @@ export declare class HookSelectorComponent extends OverlayPanel {
|
|
|
70
74
|
render(width: number): readonly string[];
|
|
71
75
|
dispose(): void;
|
|
72
76
|
/**
|
|
73
|
-
* A plain option list is a picker sheet. Otherwise
|
|
74
|
-
* title (plus the countdown `elapsed` when a
|
|
75
|
-
* lines, the slider as `tabs`, the options as
|
|
76
|
-
* option index, the search query while typing,
|
|
77
|
+
* A plain option list is a picker sheet. Otherwise (inline, slider, or
|
|
78
|
+
* countdown) a card headed by the title (plus the countdown `elapsed` when a
|
|
79
|
+
* timeout runs), the extra title lines, the slider as `tabs`, the options as
|
|
80
|
+
* a `list` keyed by original option index, the search query while typing,
|
|
81
|
+
* and the key hints.
|
|
77
82
|
*/
|
|
78
83
|
describe(cx: DescribeContext): NativeNode;
|
|
79
84
|
/** Pointer pick of an option does what highlighting it and pressing Enter does; a tab pick moves the slider. */
|
|
@@ -41,8 +41,8 @@ export interface ResolvedModelRoleValue {
|
|
|
41
41
|
export interface ModelCompactionPoint {
|
|
42
42
|
/** Context tokens that trigger auto-compaction; undefined when auto-compaction is off or the window is unknown. */
|
|
43
43
|
tokens: number | undefined;
|
|
44
|
-
/**
|
|
45
|
-
|
|
44
|
+
/** Why it triggers there, in a few words: `fixed`, `85% of 400K base`, `80% of window`. */
|
|
45
|
+
basis?: string;
|
|
46
46
|
/** What sets it: the matching `compaction.modelThresholds` key, `global`, or `default`. */
|
|
47
47
|
source: string;
|
|
48
48
|
/** The model's own exact entry as editable text (`90k`, `80%`); absent when it has none. */
|