@oh-my-pi/pi-tui 18.13.2 → 18.14.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.
Files changed (245) hide show
  1. package/CHANGELOG.md +40 -54
  2. package/README.md +34 -34
  3. package/dist/types/app-keybindings.d.ts +15 -0
  4. package/dist/types/apps/session-picker.d.ts +5 -0
  5. package/dist/types/charts/chart-plan.d.ts +9 -7
  6. package/dist/types/chat/assistant-message.d.ts +15 -3
  7. package/dist/types/chat/bash-execution.d.ts +2 -0
  8. package/dist/types/chat/display-preferences.d.ts +2 -0
  9. package/dist/types/chat/extension-types.d.ts +31 -0
  10. package/dist/types/chat/reply-write.d.ts +48 -0
  11. package/dist/types/chat/table-chart.d.ts +4 -3
  12. package/dist/types/chat/tool-execution.d.ts +1 -2
  13. package/dist/types/chat/transcript-outline.d.ts +7 -0
  14. package/dist/types/chat/transcript-render-helpers.d.ts +2 -0
  15. package/dist/types/chrome/index.d.ts +1 -0
  16. package/dist/types/chrome/transcript-notice.d.ts +35 -0
  17. package/dist/types/chrome/transcript-status.d.ts +20 -8
  18. package/dist/types/components/editor.d.ts +8 -0
  19. package/dist/types/components/markdown.d.ts +7 -0
  20. package/dist/types/native/blobs.d.ts +2 -1
  21. package/dist/types/native/picker.d.ts +3 -3
  22. package/dist/types/overlays/annotation-overlay.d.ts +7 -1
  23. package/dist/types/overlays/annotation-types.d.ts +28 -0
  24. package/dist/types/overlays/login-dialog.d.ts +5 -1
  25. package/dist/types/overlays/model-browser.d.ts +10 -1
  26. package/dist/types/overlays/oauth-selector.d.ts +23 -0
  27. package/dist/types/overlays/plan-review-overlay.d.ts +2 -0
  28. package/dist/types/overlays/rewind-selector.d.ts +1 -1
  29. package/dist/types/overlays/session-selector.d.ts +22 -2
  30. package/dist/types/prompt/composer.d.ts +41 -4
  31. package/dist/types/prompt/interactive-context-helpers.d.ts +10 -3
  32. package/dist/types/prompt/welcome.d.ts +6 -2
  33. package/dist/types/render/extension-links.d.ts +65 -0
  34. package/dist/types/render/hyperlink.d.ts +25 -7
  35. package/dist/types/render/index.d.ts +1 -0
  36. package/dist/types/setup/scenes/model.d.ts +1 -1
  37. package/dist/types/setup/scenes/outro.d.ts +5 -4
  38. package/dist/types/setup/scenes/sign-in.d.ts +13 -8
  39. package/dist/types/setup/scenes/splash.d.ts +4 -4
  40. package/dist/types/setup/scenes/types.d.ts +16 -1
  41. package/dist/types/setup/startup-splash.d.ts +1 -1
  42. package/dist/types/setup/wizard-overlay.d.ts +11 -7
  43. package/dist/types/setup/wizard.d.ts +5 -1
  44. package/dist/types/status-line/component.d.ts +1 -1
  45. package/dist/types/status-line/context-usage.d.ts +28 -6
  46. package/dist/types/status-line/host.d.ts +6 -2
  47. package/dist/types/theme/theme.d.ts +0 -23
  48. package/dist/types/tools/bash-interactive.d.ts +6 -0
  49. package/dist/types/tools/bash.d.ts +2 -0
  50. package/dist/types/tools/default-renderer.d.ts +6 -4
  51. package/dist/types/tools/irc.d.ts +6 -0
  52. package/dist/types/tools/json-tree.d.ts +23 -4
  53. package/dist/types/tools/lsp.d.ts +2 -0
  54. package/dist/types/tools/mcp.d.ts +6 -5
  55. package/dist/types/tools/native-view.d.ts +1 -1
  56. package/dist/types/tools/renderer.d.ts +2 -0
  57. package/dist/types/tools/streaming-output.d.ts +11 -0
  58. package/dist/types/tools/task.d.ts +9 -1
  59. package/dist/types/tools/url-scheme-host.d.ts +17 -0
  60. package/dist/types/tools/yield.d.ts +1 -1
  61. package/dist/types/tui.d.ts +7 -2
  62. package/package.json +10 -15
  63. package/src/app-keybindings.ts +15 -0
  64. package/src/apps/session-picker.ts +7 -0
  65. package/src/charts/chart-plan.ts +20 -50
  66. package/src/chat/advisor-message.ts +2 -0
  67. package/src/chat/assistant-message.ts +137 -19
  68. package/src/chat/background-tan-message.ts +4 -0
  69. package/src/chat/bash-execution.ts +6 -0
  70. package/src/chat/chat-transcript-builder.ts +58 -28
  71. package/src/chat/compaction-summary-message.ts +2 -1
  72. package/src/chat/display-preferences.ts +3 -0
  73. package/src/chat/extension-types.ts +34 -0
  74. package/src/chat/reply-write.ts +127 -0
  75. package/src/chat/table-chart.ts +10 -4
  76. package/src/chat/tool-execution.ts +20 -13
  77. package/src/chat/transcript-outline.ts +27 -0
  78. package/src/chat/transcript-render-helpers.ts +66 -24
  79. package/src/chrome/index.ts +1 -0
  80. package/src/chrome/transcript-notice.ts +83 -0
  81. package/src/chrome/transcript-status.ts +29 -29
  82. package/src/components/editor.ts +10 -1
  83. package/src/components/markdown.ts +116 -6
  84. package/src/hotkeys-markdown.ts +1 -0
  85. package/src/native/backend.ts +5 -66
  86. package/src/native/blobs.ts +3 -2
  87. package/src/native/picker.ts +3 -3
  88. package/src/overlays/advisor-config.ts +1 -10
  89. package/src/overlays/annotation-overlay.ts +125 -37
  90. package/src/overlays/annotation-types.ts +24 -0
  91. package/src/overlays/hook-selector.ts +2 -2
  92. package/src/overlays/login-dialog.ts +31 -5
  93. package/src/overlays/model-browser.ts +37 -0
  94. package/src/overlays/model-hub.ts +1 -7
  95. package/src/overlays/model-picker.ts +1 -10
  96. package/src/overlays/oauth-selector.ts +44 -6
  97. package/src/overlays/plan-review-overlay.ts +13 -2
  98. package/src/overlays/rewind-selector.ts +29 -12
  99. package/src/overlays/session-selector.ts +305 -39
  100. package/src/overlays/usage-dashboard.ts +5 -12
  101. package/src/prompt/composer.ts +213 -5
  102. package/src/prompt/custom-editor.ts +6 -1
  103. package/src/prompt/emoji-autocomplete.ts +0 -2
  104. package/src/prompt/interactive-context-helpers.ts +29 -4
  105. package/src/prompt/welcome.ts +31 -45
  106. package/src/render/extension-links.ts +214 -0
  107. package/src/render/hyperlink.ts +65 -9
  108. package/src/render/index.ts +1 -0
  109. package/src/setup/scenes/composer.ts +2 -0
  110. package/src/setup/scenes/glyph.ts +2 -0
  111. package/src/setup/scenes/model.ts +192 -29
  112. package/src/setup/scenes/outro.ts +30 -17
  113. package/src/setup/scenes/sign-in.ts +196 -400
  114. package/src/setup/scenes/splash.ts +25 -21
  115. package/src/setup/scenes/theme.ts +2 -0
  116. package/src/setup/scenes/types.ts +18 -1
  117. package/src/setup/startup-splash.ts +8 -7
  118. package/src/setup/wizard-overlay.ts +164 -33
  119. package/src/setup/wizard.ts +11 -2
  120. package/src/status-line/component.ts +4 -10
  121. package/src/status-line/context-usage.ts +72 -21
  122. package/src/status-line/host.ts +6 -2
  123. package/src/terminal.ts +24 -2
  124. package/src/theme/defaults.json +1 -0
  125. package/src/theme/loader.ts +1 -1
  126. package/src/theme/theme.ts +2 -75
  127. package/src/tools/bash-interactive.ts +6 -1
  128. package/src/tools/bash.ts +2 -0
  129. package/src/tools/default-renderer.ts +9 -6
  130. package/src/tools/eval.ts +14 -4
  131. package/src/tools/irc.ts +6 -0
  132. package/src/tools/job-widget.ts +13 -1
  133. package/src/tools/json-tree.ts +132 -42
  134. package/src/tools/lsp.ts +36 -15
  135. package/src/tools/mcp.ts +20 -12
  136. package/src/tools/native-view.ts +1 -1
  137. package/src/tools/renderer.ts +2 -0
  138. package/src/tools/streaming-output.ts +41 -0
  139. package/src/tools/task.ts +59 -17
  140. package/src/tools/url-scheme-host.ts +21 -0
  141. package/src/tools/yield.ts +18 -9
  142. package/src/tui.ts +43 -15
  143. package/THIRD-PARTY-NOTICES.txt +0 -22901
  144. package/dist/types/theme/defaults/index.d.ts +0 -10289
  145. package/src/theme/defaults/alabaster.json +0 -103
  146. package/src/theme/defaults/amethyst.json +0 -106
  147. package/src/theme/defaults/anthracite.json +0 -103
  148. package/src/theme/defaults/basalt.json +0 -101
  149. package/src/theme/defaults/birch.json +0 -105
  150. package/src/theme/defaults/dark-abyss.json +0 -101
  151. package/src/theme/defaults/dark-arctic.json +0 -114
  152. package/src/theme/defaults/dark-aurora.json +0 -105
  153. package/src/theme/defaults/dark-catppuccin.json +0 -117
  154. package/src/theme/defaults/dark-cavern.json +0 -101
  155. package/src/theme/defaults/dark-celestial.json +0 -116
  156. package/src/theme/defaults/dark-copper.json +0 -105
  157. package/src/theme/defaults/dark-cosmos.json +0 -100
  158. package/src/theme/defaults/dark-cyberpunk.json +0 -112
  159. package/src/theme/defaults/dark-dracula.json +0 -108
  160. package/src/theme/defaults/dark-eclipse.json +0 -101
  161. package/src/theme/defaults/dark-ember.json +0 -105
  162. package/src/theme/defaults/dark-equinox.json +0 -100
  163. package/src/theme/defaults/dark-forest.json +0 -106
  164. package/src/theme/defaults/dark-github.json +0 -115
  165. package/src/theme/defaults/dark-gruvbox.json +0 -122
  166. package/src/theme/defaults/dark-lavender.json +0 -105
  167. package/src/theme/defaults/dark-lunar.json +0 -99
  168. package/src/theme/defaults/dark-midnight.json +0 -105
  169. package/src/theme/defaults/dark-monochrome.json +0 -104
  170. package/src/theme/defaults/dark-monokai.json +0 -108
  171. package/src/theme/defaults/dark-nebula.json +0 -100
  172. package/src/theme/defaults/dark-neon-noir.json +0 -110
  173. package/src/theme/defaults/dark-nord.json +0 -108
  174. package/src/theme/defaults/dark-ocean.json +0 -111
  175. package/src/theme/defaults/dark-one.json +0 -110
  176. package/src/theme/defaults/dark-poimandres.json +0 -125
  177. package/src/theme/defaults/dark-rainforest.json +0 -101
  178. package/src/theme/defaults/dark-reef.json +0 -101
  179. package/src/theme/defaults/dark-retro.json +0 -102
  180. package/src/theme/defaults/dark-rose-pine.json +0 -106
  181. package/src/theme/defaults/dark-sakura.json +0 -105
  182. package/src/theme/defaults/dark-slate.json +0 -105
  183. package/src/theme/defaults/dark-solarized.json +0 -107
  184. package/src/theme/defaults/dark-solstice.json +0 -100
  185. package/src/theme/defaults/dark-starfall.json +0 -101
  186. package/src/theme/defaults/dark-sunset.json +0 -109
  187. package/src/theme/defaults/dark-swamp.json +0 -100
  188. package/src/theme/defaults/dark-synthwave.json +0 -113
  189. package/src/theme/defaults/dark-taiga.json +0 -101
  190. package/src/theme/defaults/dark-terminal.json +0 -105
  191. package/src/theme/defaults/dark-tokyo-night.json +0 -111
  192. package/src/theme/defaults/dark-tundra.json +0 -101
  193. package/src/theme/defaults/dark-twilight.json +0 -101
  194. package/src/theme/defaults/dark-volcanic.json +0 -101
  195. package/src/theme/defaults/graphite.json +0 -102
  196. package/src/theme/defaults/index.ts +0 -203
  197. package/src/theme/defaults/light-arctic.json +0 -117
  198. package/src/theme/defaults/light-aurora-day.json +0 -101
  199. package/src/theme/defaults/light-canyon.json +0 -101
  200. package/src/theme/defaults/light-catppuccin.json +0 -116
  201. package/src/theme/defaults/light-cirrus.json +0 -100
  202. package/src/theme/defaults/light-coral.json +0 -105
  203. package/src/theme/defaults/light-cyberpunk.json +0 -106
  204. package/src/theme/defaults/light-dawn.json +0 -100
  205. package/src/theme/defaults/light-dunes.json +0 -101
  206. package/src/theme/defaults/light-eucalyptus.json +0 -105
  207. package/src/theme/defaults/light-forest.json +0 -110
  208. package/src/theme/defaults/light-frost.json +0 -105
  209. package/src/theme/defaults/light-github.json +0 -125
  210. package/src/theme/defaults/light-glacier.json +0 -101
  211. package/src/theme/defaults/light-gruvbox.json +0 -118
  212. package/src/theme/defaults/light-haze.json +0 -100
  213. package/src/theme/defaults/light-honeycomb.json +0 -105
  214. package/src/theme/defaults/light-lagoon.json +0 -101
  215. package/src/theme/defaults/light-lavender.json +0 -105
  216. package/src/theme/defaults/light-meadow.json +0 -101
  217. package/src/theme/defaults/light-mint.json +0 -105
  218. package/src/theme/defaults/light-monochrome.json +0 -111
  219. package/src/theme/defaults/light-ocean.json +0 -109
  220. package/src/theme/defaults/light-one.json +0 -109
  221. package/src/theme/defaults/light-opal.json +0 -101
  222. package/src/theme/defaults/light-orchard.json +0 -101
  223. package/src/theme/defaults/light-paper.json +0 -105
  224. package/src/theme/defaults/light-poimandres.json +0 -125
  225. package/src/theme/defaults/light-prism.json +0 -100
  226. package/src/theme/defaults/light-retro.json +0 -108
  227. package/src/theme/defaults/light-sand.json +0 -105
  228. package/src/theme/defaults/light-savanna.json +0 -101
  229. package/src/theme/defaults/light-solarized.json +0 -112
  230. package/src/theme/defaults/light-soleil.json +0 -100
  231. package/src/theme/defaults/light-sunset.json +0 -109
  232. package/src/theme/defaults/light-synthwave.json +0 -108
  233. package/src/theme/defaults/light-tokyo-night.json +0 -121
  234. package/src/theme/defaults/light-wetland.json +0 -101
  235. package/src/theme/defaults/light-zenith.json +0 -99
  236. package/src/theme/defaults/limestone.json +0 -104
  237. package/src/theme/defaults/mahogany.json +0 -107
  238. package/src/theme/defaults/marble.json +0 -103
  239. package/src/theme/defaults/obsidian.json +0 -101
  240. package/src/theme/defaults/onyx.json +0 -101
  241. package/src/theme/defaults/pearl.json +0 -103
  242. package/src/theme/defaults/porcelain.json +0 -101
  243. package/src/theme/defaults/quartz.json +0 -106
  244. package/src/theme/defaults/sandstone.json +0 -105
  245. package/src/theme/defaults/titanium.json +0 -100
@@ -1,10 +1,15 @@
1
1
  import { type SgrMouseEvent } from "../../mouse.js";
2
- import type { NativeNode } from "../../native/node.js";
3
- import type { SetupScene, SetupSceneController, SetupSceneHost } from "./types.js";
2
+ import type { DescribeContext, NativeNode } from "../../native/node.js";
3
+ import { type SetupScene, type SetupSceneController, type SetupSceneHost } from "./types.js";
4
4
  /**
5
5
  * "Sign in" scene: lets the user authenticate one or more model providers via
6
6
  * OAuth. It never auto-advances the wizard — the user may sign in to several
7
- * providers and then continue with Esc.
7
+ * providers and then leave the step with Esc.
8
+ *
9
+ * Picking is the provider selector (natively a setup sheet: Skip/Continue on
10
+ * Esc, Sign in on Enter); signing in is the app's {@link LoginDialogComponent},
11
+ * driven like `/login` drives it: natively its own sheet over the setup page,
12
+ * in the cell grid drawn in the wizard body in place of the selector.
8
13
  */
9
14
  export declare class SignInScene implements SetupSceneController {
10
15
  #private;
@@ -14,15 +19,15 @@ export declare class SignInScene implements SetupSceneController {
14
19
  dispose(): void;
15
20
  invalidate(): void;
16
21
  handleInput(data: string): void;
17
- /** Forward mouse to the provider selector; pointer is inert during an active login or code prompt. */
22
+ /** Forward mouse to the provider selector; the login dialog takes keys only. */
18
23
  routeMouse(event: SgrMouseEvent, line: number, col: number): void;
19
24
  render(width: number, maxLines?: number): readonly string[];
20
25
  /**
21
- * Picking: intro, the provider selector (describes itself) and the last
22
- * outcome. Signing in: a spinner heading, the login link (with the full
23
- * URL once, char-wrapped), any code prompt and the flow's progress lines.
26
+ * Signing in: the login dialog (its own sheet). Picking: the provider
27
+ * selector, which presents the setup sheet where the terminal draws
28
+ * pickers; elsewhere it is an inline card under the lead and the outcome.
24
29
  */
25
- describe(): NativeNode;
30
+ describe(cx: DescribeContext): NativeNode;
26
31
  }
27
32
  /** Onboarding scene for provider sign-in. */
28
33
  export declare const providersSetupScene: SetupScene;
@@ -11,9 +11,9 @@ export declare function renderStarfield(width: number, height: number, frame: nu
11
11
  */
12
12
  export declare function renderSetupSplash(width: number, height: number, elapsedMs: number): string[];
13
13
  /**
14
- * Native splash: the 2x brand mark with a terminal-clocked shimmer, the
15
- * wordmark, and the skip hint pinned to the bottom. The water and starfield
16
- * are cell paintings with no semantic counterpart. A click on the splash
17
- * sends the `skip` action.
14
+ * Native splash: omp's lockup as the welcome draws it (the builtin mark
15
+ * drawing on beside the wordmark and version), centered, and a quiet Enter
16
+ * hint pinned to the bottom. The water and starfield are cell paintings with
17
+ * no semantic counterpart. A click anywhere sends `skip`.
18
18
  */
19
19
  export declare function describeSetupSplash(): NativeNode;
@@ -42,7 +42,6 @@ export interface SetupHost extends SetupUiHost {
42
42
  saveColorBlindMode(enabled: boolean): void;
43
43
  saveTheme(mode: "dark" | "light", name: string): void;
44
44
  captureBrowserSession(request: OAuthBrowserSessionRequest, signal?: AbortSignal): Promise<string>;
45
- copyToClipboard(text: string): Promise<void>;
46
45
  openInBrowser(url: string): void;
47
46
  markComplete(version: number): Promise<void>;
48
47
  playWelcomeIntro(): void;
@@ -80,11 +79,27 @@ export interface SetupSceneController extends Component {
80
79
  */
81
80
  routeMouse?(event: SgrMouseEvent, line: number, col: number): void;
82
81
  }
82
+ /**
83
+ * Role of the sheet (`picker` or `overlay`) an interactive scene presents in a
84
+ * TSP terminal. The terminal's setup stylesheet seats it under the wizard's
85
+ * brand and stepper instead of floating it over a dimmed page.
86
+ */
87
+ export declare const SETUP_SHEET_ROLE = "omp.setup.sheet";
88
+ /** Surface role of the setup page (wizard and startup splash) in a TSP terminal. */
89
+ export declare const SETUP_SURFACE_ROLE = "omp.app.setup";
83
90
  /** Versioned onboarding scene definition. */
84
91
  export interface SetupScene {
85
92
  id: string;
86
93
  title: string;
94
+ /** Short label for the wizard's stepper (`Sign in`, `Model`). */
95
+ step: string;
87
96
  minVersion: number;
97
+ /**
98
+ * Configures something only the cell-grid renderer draws (glyphs, composer
99
+ * shape, theme). A TSP terminal draws those itself, so the wizard skips the
100
+ * scene while a native surface is live.
101
+ */
102
+ ansiOnly?: boolean;
88
103
  shouldRun?(ctx: SetupHost): boolean | Promise<boolean>;
89
104
  mount(host: SetupSceneHost): SetupSceneController;
90
105
  }
@@ -1,4 +1,4 @@
1
- import type { SetupUiHost } from "./scenes/types.js";
1
+ import { type SetupUiHost } from "./scenes/types.js";
2
2
  /** Timing controls for the standalone startup animation. */
3
3
  export interface RunStartupSplashOptions {
4
4
  readonly durationMs?: number;
@@ -1,7 +1,9 @@
1
1
  import { type Component, type OverlayFocusOwner } from "../tui.js";
2
- import type { NativeNode, NativeUiEvent } from "../native/node.js";
2
+ import type { DescribeContext, NativeNode, NativeScreen, NativeUiEvent } from "../native/node.js";
3
3
  import type { SetupHost } from "./scenes/types.js";
4
- import type { SetupScene } from "./scenes/types.js";
4
+ import { type SetupScene } from "./scenes/types.js";
5
+ /** Whether `scene` is asked under the current renderer: a TSP surface draws `ansiOnly` settings itself. */
6
+ export declare function setupSceneApplies(scene: SetupScene): boolean;
5
7
  /** Fullscreen onboarding presentation with scene focus and mouse routing. */
6
8
  export declare class SetupWizardComponent implements Component, OverlayFocusOwner {
7
9
  #private;
@@ -14,12 +16,14 @@ export declare class SetupWizardComponent implements Component, OverlayFocusOwne
14
16
  ownsOverlayFocusTarget(component: Component): boolean;
15
17
  handleInput(data: string): void;
16
18
  render(width: number): readonly string[];
19
+ /** The wizard is a page of its own: a screen surface styled by {@link SETUP_SURFACE_ROLE}. */
20
+ describeScreen(_cx: DescribeContext): NativeScreen;
17
21
  /**
18
- * Fullscreen description: splash, the active scene inside the wizard
19
- * frame (brand header, step counter, title, footer hints), or the outro.
20
- * The splash→scene dissolve is a row effect with no native counterpart, so
21
- * a transition describes as the scene.
22
+ * Fullscreen description: splash, the active scene under the setup
23
+ * header (brand, stepper, Exit setup), or the outro. The splash→scene
24
+ * dissolve is a row effect with no native counterpart, so a transition
25
+ * describes as the scene.
22
26
  */
23
- describe(): NativeNode;
27
+ describe(cx: DescribeContext): NativeNode;
24
28
  handleNativeEvent(event: NativeUiEvent): void;
25
29
  }
@@ -21,5 +21,9 @@ export interface RunSetupWizardOptions {
21
21
  markComplete?: boolean;
22
22
  playWelcomeIntro?: boolean;
23
23
  }
24
- /** Own the fullscreen setup overlay until its scenes and outro finish. */
24
+ /**
25
+ * Own the fullscreen setup overlay until its scenes and outro finish. When
26
+ * none of `scenes` applies to the current renderer (a TSP surface skips
27
+ * `ansiOnly` ones) nothing is shown, but completion is still persisted.
28
+ */
25
29
  export declare function runSetupWizard(ctx: SetupHost, scenes?: readonly SetupScene[], options?: RunSetupWizardOptions): Promise<void>;
@@ -111,7 +111,7 @@ export declare class StatusLineComponent<TSession extends StatusLineSession = St
111
111
  setRecording(recording: boolean): void;
112
112
  /** Set the callback that presents detected Codex reset celebrations, or clear it with `undefined`. */
113
113
  setCodexResetFireworksHandler(handler: ((event: CodexResetFireworksEvent) => void) | undefined): void;
114
- /** Set the callback that presents the first pool-wide saved-reset expiry warning, or clear it with `undefined`. */
114
+ /** Set the callback that presents pool-wide saved-reset expiry warnings, or clear it with `undefined`. */
115
115
  setResetExpiryNoticeHandler(handler: ((notice: string) => void) | undefined): void;
116
116
  setHookStatus(key: string, text: string | undefined): void;
117
117
  watchBranch(onBranchChange: () => void): void;
@@ -98,6 +98,11 @@ export interface NonMessageTokenSource {
98
98
  readonly state?: {
99
99
  readonly tools?: readonly ContextTool[];
100
100
  };
101
+ /**
102
+ * Whether requests to `model` ship description-stripped tool specs because
103
+ * the catalog rides in the system prompt (`Agent.prunesToolDescriptions`).
104
+ */
105
+ prunesToolDescriptions?(model: Model | undefined): boolean;
101
106
  };
102
107
  readonly skills?: readonly ContextSkill[];
103
108
  /** Provider-facing, session-frozen descriptions when available. */
@@ -131,24 +136,41 @@ export interface ToolSchemaFragments {
131
136
  /** Why serialization stopped; the schema or examples after that point are missing from `fragments`. */
132
137
  readonly schemaError?: string;
133
138
  }
139
+ /** How {@link toolSchemaFragments} renders one tool definition. */
140
+ export interface ToolSchemaFragmentOptions {
141
+ /** Also return `display`: the same fragments with the schema JSON indented by this many spaces. */
142
+ displayIndent?: number;
143
+ /**
144
+ * Mirror `normalizeTools({ pruneDescriptions: true })`: the wire spec is the
145
+ * name plus the description-stripped schema, with no description or examples.
146
+ */
147
+ pruneDescriptions?: boolean;
148
+ }
134
149
  /**
135
150
  * Provider-visible text of one tool definition. `displayIndent` additionally
136
151
  * returns `display`, the same fragments with the schema JSON indented, from
137
152
  * the same schema conversion.
138
153
  */
139
- export declare function toolSchemaFragments(tool: ContextTool, displayIndent?: number): ToolSchemaFragments;
154
+ export declare function toolSchemaFragments(tool: ContextTool, options?: ToolSchemaFragmentOptions): ToolSchemaFragments;
155
+ /** Inputs that select which tool-schema estimate applies, beyond the roster and tokenizer. */
156
+ export interface ToolSchemaEstimateOptions {
157
+ /** Caller settings/source revision; a change invalidates the cached estimate. */
158
+ sourceRevision?: number;
159
+ /** Count the description-stripped specs sent when the catalog rides in the system prompt. */
160
+ pruneDescriptions?: boolean;
161
+ }
140
162
  /**
141
163
  * Estimate provider-visible tool-schema tokens.
142
164
  *
143
165
  * Results are cached by roster-array identity, tokenizer identity, the
144
- * caller-supplied settings/source revision, and the roster's explicit dynamic
145
- * metadata revision. Callers whose descriptions or schemas are live getters
146
- * must either advance `sourceRevision` or call
166
+ * caller-supplied settings/source revision, the prune mode, and the roster's
167
+ * explicit dynamic metadata revision. Callers whose descriptions or schemas are
168
+ * live getters must either advance `sourceRevision` or call
147
169
  * {@link invalidateToolSchemaMetadata} when those inputs change.
148
170
  */
149
- export declare function estimateToolSchemaTokens(tools: ToolSchemaSource, tokenizer: Tokenizer, sourceRevision?: number): number;
171
+ export declare function estimateToolSchemaTokens(tools: ToolSchemaSource, tokenizer: Tokenizer, options?: ToolSchemaEstimateOptions): number;
150
172
  /** Count schemas carried on every request, excluding server-side deferred catalogs. */
151
- export declare function estimateContextToolSchemaTokens(tools: ToolSchemaSource, tokenizer: Tokenizer, model: Model | undefined, sourceRevision?: number): number;
173
+ export declare function estimateContextToolSchemaTokens(tools: ToolSchemaSource, tokenizer: Tokenizer, model: Model | undefined, options?: ToolSchemaEstimateOptions): number;
152
174
  export declare function computeNonMessageTokens(session: NonMessageTokenSource, tokenizer: Tokenizer, sourceRevision?: number): number;
153
175
  /**
154
176
  * Shared helper for the four non-message token totals used by
@@ -132,8 +132,12 @@ export interface StatusLineHost<TSession extends StatusLineSession = StatusLineS
132
132
  calculateTokensPerSecond(messages: readonly AgentMessage[], isStreaming: boolean): number | null;
133
133
  limitMatchesActiveAccount(report: UsageReport, limit: UsageLimit, identity: StatusAccountIdentity): boolean;
134
134
  classifyResetExpiry?(report: UsageReport, nowMs: number): StatusResetExpiry | undefined;
135
- /** One-line warning for saved resets anywhere in the pool that expire within 24 hours. */
136
- resetExpiryNotice?(reports: readonly UsageReport[], nowMs: number): string | undefined;
135
+ /**
136
+ * One-line warning for saved resets anywhere in the pool that are about to expire.
137
+ * The host owns deduplication: a returned warning counts as shown, so each saved
138
+ * reset is warned about once, not once per refresh or conversation.
139
+ */
140
+ resetExpiryNotice?(session: TSession, reports: readonly UsageReport[], nowMs: number): string | undefined;
137
141
  computeCompactionBoundaries(session: TSession, contextWindow: number, model?: Model): CompactionBoundaries | null;
138
142
  }
139
143
  export interface FooterHost {
@@ -114,29 +114,6 @@ export declare function stopThemeWatcher(): void;
114
114
  * Used by HTML export to generate CSS custom properties.
115
115
  */
116
116
  export declare function getResolvedThemeColors(themeName?: string): Promise<Record<string, string>>;
117
- /** One appearance variant of {@link NativeThemePalette}: token name → `#rrggbb`. */
118
- export type NativeThemeVariant = Record<string, string>;
119
- /** omp's resolved theme for a Tern Surface Protocol terminal (the `t` verb body minus `sf`). */
120
- export interface NativeThemePalette {
121
- dark?: NativeThemeVariant;
122
- light?: NativeThemeVariant;
123
- name: {
124
- dark?: string;
125
- light?: string;
126
- };
127
- }
128
- /**
129
- * Cheap identity of everything {@link getNativeThemePalette} depends on;
130
- * recompute the palette only when it changes.
131
- */
132
- export declare function getNativeThemePaletteKey(): string;
133
- /**
134
- * omp's theme for a native surface: with auto theme, the configured dark and
135
- * light themes; otherwise (or while the theme selector previews one) the
136
- * active theme under its own appearance only. Themes without a loadable
137
- * definition (in-memory instances) contribute nothing.
138
- */
139
- export declare function getNativeThemePalette(): NativeThemePalette;
140
117
  /**
141
118
  * Check if a theme is a "light" theme by analyzing its status-line background
142
119
  * luminance. Loads theme JSON synchronously (built-in or custom file on disk)
@@ -6,6 +6,12 @@ import type { Theme } from "../theme/theme.js";
6
6
  export interface BashInteractiveTerminalBackend {
7
7
  resize(columns: number, rows: number): void;
8
8
  }
9
+ /**
10
+ * Translates a TUI key event into the bytes a terminal would send to a PTY
11
+ * child; key releases encode to "". Shared by the agent `pty` console and
12
+ * `!` commands (`BashExecutionComponent.encodePtyInput`).
13
+ */
14
+ export declare function normalizeInputForPty(data: string, applicationCursorKeysMode: boolean): string;
9
15
  /** Interactive terminal overlay driven by an external PTY controller. */
10
16
  export declare class BashInteractiveOverlayComponent implements Component {
11
17
  #private;
@@ -24,6 +24,8 @@ export interface BashToolDetails {
24
24
  exitCode?: number;
25
25
  /** True when the command was killed by its timeout deadline (not a failure). */
26
26
  timedOut?: boolean;
27
+ /** Text the command wrote to `out://`, oldest first; transcripts draw each as a reply after the call. */
28
+ replies?: string[];
27
29
  /** Live ACP update only; completed results refer to released terminals. */
28
30
  terminalId?: string;
29
31
  service?: {
@@ -22,10 +22,12 @@ export interface DefaultToolRenderInput {
22
22
  export declare function formatDefaultToolExecution(input: DefaultToolRenderInput, contentWidth: number, uiTheme: Theme): string;
23
23
  /**
24
24
  * TSP view of the generic fallback card: the tool label with a one-line args
25
- * summary as the head target; the result as a JSON tree or raw `ansi` output.
26
- * The complete output goes over the wire — the card-level disclosure clamp the
27
- * terminal applies is the only bound, so an expanded card keeps every row. JSON
28
- * the tree's depth, node or scalar caps would cut keeps the raw path instead.
25
+ * summary as the head target; the result as JSON (the host's `json` viewer,
26
+ * else a JSON tree) or raw `ansi` output. The complete output goes over the
27
+ * wire — the card-level disclosure clamp the terminal applies is the only
28
+ * bound, so an expanded card keeps every row. The `json` viewer never cuts;
29
+ * JSON the fallback tree's depth, node or scalar caps would cut keeps the raw
30
+ * path instead.
29
31
  */
30
32
  export declare function describeDefaultToolExecution(input: DefaultToolRenderInput): NativeToolView;
31
33
  /** Render the generic fallback as the state-tinted card used by direct custom tools. */
@@ -25,6 +25,12 @@ export interface IrcMessage {
25
25
  * the broadcaster, mostly to say the message was not for it.
26
26
  */
27
27
  broadcast?: boolean;
28
+ /**
29
+ * Interim acknowledgement or progress on something the recipient asked
30
+ * (`agent://<id>?progress`): it neither answers that request nor asks one,
31
+ * so the recipient's `wait` keeps waiting for the actual reply.
32
+ */
33
+ progress?: boolean;
28
34
  }
29
35
  /** Delivery outcome for one peer recipient. */
30
36
  export interface IrcDeliveryReceipt {
@@ -12,6 +12,8 @@ export declare const JSON_TREE_MAX_LINES_EXPANDED = 200;
12
12
  export declare const JSON_TREE_SCALAR_LEN_COLLAPSED = 60;
13
13
  /** Maximum expanded JSON scalar width. */
14
14
  export declare const JSON_TREE_SCALAR_LEN_EXPANDED = 2000;
15
+ /** Characters a container's one-line form may take before a JSON tree lists its entries instead. */
16
+ export declare const JSON_TREE_INLINE_LEN = 60;
15
17
  /** Sanitization, string summary, and budgeting policy for inline JSON. */
16
18
  export interface InlineFormatOptions {
17
19
  sanitizeText?: (text: string) => string;
@@ -46,7 +48,8 @@ export interface JsonTreeRenderOptions {
46
48
  rootConnectors?: "hooked" | "siblings";
47
49
  }
48
50
  /**
49
- * Render a JSON value as bounded tree lines. The positional form remains the
51
+ * Render a JSON value as bounded tree lines, containers that fit
52
+ * {@link JSON_TREE_INLINE_LEN} on one row. The positional form remains the
50
53
  * public tool-renderer contract; the options form exposes sanitization and root
51
54
  * connector policy for specialized adapters such as nested task output.
52
55
  */
@@ -74,8 +77,24 @@ export interface JsonTreeDescribeOptions {
74
77
  onTruncated?: () => void;
75
78
  }
76
79
  /**
77
- * TSP `tree` of a JSON value: containers become expandable nodes labelled with
78
- * their key and size, scalars become `key: value` leaves styled by type.
79
- * Bounded by depth, node count and scalar length; no width math.
80
+ * TSP `tree` of a JSON value: containers that fit {@link JSON_TREE_INLINE_LEN}
81
+ * become `key: [1, "a"]` leaves, larger ones expandable nodes labelled with
82
+ * their key and size, scalars `key: value` leaves styled by type. Bounded by
83
+ * depth, node count and scalar length; no width math.
80
84
  */
81
85
  export declare function describeJsonTree(value: unknown, options?: JsonTreeDescribeOptions): NativeNode;
86
+ /** Options of {@link describeJsonValue}: the `json` node's own, plus the fallback tree's. */
87
+ export interface JsonValueDescribeOptions extends JsonTreeDescribeOptions {
88
+ /** The host draws the `json` kind (`cx.supports("json")`). */
89
+ native?: boolean;
90
+ /** `json` node: container levels expanded below the top-level entries (default 0). */
91
+ open?: number;
92
+ }
93
+ /**
94
+ * A JSON value for a TSP host: the terminal's own `json` viewer when it draws
95
+ * the kind, which folds and previews containers itself and never cuts (so
96
+ * `onTruncated` never fires), else {@link describeJsonTree} with the same
97
+ * options. Root keys the tree would hide are left out of the sent value too;
98
+ * strings are sanitized like the tree's labels.
99
+ */
100
+ export declare function describeJsonValue(value: unknown, options?: JsonValueDescribeOptions): NativeNode;
@@ -31,6 +31,8 @@ export interface FileDiagnosticsResult {
31
31
  summary: string;
32
32
  /** Whether there are any errors (severity 1) */
33
33
  errored: boolean;
34
+ /** Servers that sent no fresh report in time: the file is unverified for them, not clean. */
35
+ unreported?: string[];
34
36
  /** Whether the file was formatted */
35
37
  formatter?: FileFormatResult;
36
38
  }
@@ -23,11 +23,12 @@ export declare function renderMCPResult(result: {
23
23
  isError?: boolean;
24
24
  }, options: RenderResultOptions, theme: Theme, args?: Record<string, unknown>): Component;
25
25
  /** Native MCP call view: the head plus the folded args, inline while pending. */
26
- export declare function describeMCPCall(args: Record<string, unknown>, label: string): NativeToolView;
26
+ export declare function describeMCPCall(args: Record<string, unknown>, label: string, options?: RenderResultOptions): NativeToolView;
27
27
  /**
28
- * Native MCP result view: JSON output as a JSON tree, Markdown when the
29
- * preference is on, otherwise the raw text as tool output; the folded Args
30
- * section follows, so the collapsed preview still leads with the output.
28
+ * Native MCP result view: JSON output as the host's `json` viewer (when it
29
+ * draws one) or a JSON tree, Markdown when the preference is on, otherwise
30
+ * the raw text as tool output; the folded Args section follows, so the
31
+ * collapsed preview still leads with the output.
31
32
  */
32
33
  export declare function describeMCPResult(result: {
33
34
  content: Array<{
@@ -36,7 +37,7 @@ export declare function describeMCPResult(result: {
36
37
  }>;
37
38
  details?: MCPToolDetails;
38
39
  isError?: boolean;
39
- }, _options: RenderResultOptions, args?: Record<string, unknown>): NativeToolView | undefined;
40
+ }, options: RenderResultOptions, args?: Record<string, unknown>): NativeToolView | undefined;
40
41
  import type { OutputMeta } from "./output-meta.js";
41
42
  /** Set whether plain MCP text results render as Markdown. */
42
43
  export declare function setMcpRenderMarkdownResults(enabled: boolean): void;
@@ -6,7 +6,7 @@ import { type OutputMeta } from "./output-meta.js";
6
6
  import type { NativeToolHead, NativeToolView, ToolRenderResult } from "./renderer.js";
7
7
  /** A path for native heads: relative to the working directory when inside it, else `~`-shortened. */
8
8
  export declare function displayPath(filePath: string): string;
9
- /** `file://` link for a head's path target, when the path is absolute. */
9
+ /** Configured file link for a head's path target, when the path is absolute. */
10
10
  export declare function fileHref(filePath: string | undefined): string | undefined;
11
11
  /** Diff stats as one head `meta` string, `+8 −1` (U+2212 minus), or undefined when nothing changed. */
12
12
  export declare function diffStatsMeta(added: number, removed: number): string | undefined;
@@ -36,6 +36,8 @@ export interface RenderResultOptions {
36
36
  cancelled?: boolean;
37
37
  /** The native host shows files by path (`cx.supports("media")`). Native describe hooks only. */
38
38
  media?: boolean;
39
+ /** The native host draws raw JSON values (`cx.supports("json")`). Native describe hooks only. */
40
+ json?: boolean;
39
41
  }
40
42
  /** Render options for a result, plus the tool-specific context the transcript threads through. */
41
43
  export type RenderResultContextOptions = RenderResultOptions & {
@@ -177,6 +177,17 @@ export declare function truncateLineBytes(line: string, maxBytes?: number): {
177
177
  text: string;
178
178
  wasTruncated: boolean;
179
179
  };
180
+ /**
181
+ * Where `text` shows in `output` written through an {@link OutputSink} with
182
+ * `maxColumns`, searching from `from`: each of its lines whole, or, where the
183
+ * cap cut the output line, a head of it and `…` ending that output line.
184
+ * Only the first line can be cut short of its first 16 characters (after
185
+ * other text on its output line); such text is not found.
186
+ */
187
+ export declare function findColumnCapped(output: string, text: string, from?: number): {
188
+ start: number;
189
+ end: number;
190
+ } | undefined;
180
191
  /** Shared helper to build a no-truncation result. */
181
192
  export declare function noTruncResult(content: string, totalLines?: number, totalBytes?: number): TruncationResult;
182
193
  /**
@@ -106,8 +106,9 @@ export interface TaskItem {
106
106
  sourceSession?: string;
107
107
  /** Optional model selector override for the historical source session. */
108
108
  model?: string | string[];
109
- /** The work; required by the schema. */
109
+ /** Inline instructions; exactly one of task or taskFile is required. */
110
110
  task?: string;
111
+ taskFile?: string;
111
112
  /** How open-ended the work is; required by the schema and the child's sole `auto` thinking classification input. */
112
113
  solutionSpace?: string;
113
114
  /** Per-spawn thinking effort: lowest/middle/highest level the resolved model supports. Overrides the agent's default selector (e.g. `auto`). */
@@ -138,6 +139,8 @@ export interface TaskParams {
138
139
  model?: string | string[];
139
140
  /** The work (flat form). */
140
141
  task?: string;
142
+ /** Absolute path or local:// URL to a UTF-8 file (flat form), mutually exclusive with task. */
143
+ taskFile?: string;
141
144
  /** How open-ended the work is (flat form); see {@link TaskItem.solutionSpace}. */
142
145
  solutionSpace?: string;
143
146
  /** Per-spawn thinking effort (flat form): lowest/middle/highest level the resolved model supports. */
@@ -213,6 +216,9 @@ export interface AgentProgress {
213
216
  status: "pending" | "running" | "completed" | "failed" | "aborted";
214
217
  task: string;
215
218
  assignment?: string;
219
+ taskFile?: string;
220
+ /** SHA-256 of the exact task file bytes before decoding and trimming. */
221
+ taskFileSha256?: string;
216
222
  description?: string;
217
223
  lastIntent?: string;
218
224
  currentTool?: string;
@@ -320,6 +326,8 @@ export interface SingleResult {
320
326
  agentSource: AgentSource;
321
327
  task: string;
322
328
  assignment?: string;
329
+ taskFile?: string;
330
+ taskFileSha256?: string;
323
331
  description?: string;
324
332
  lastIntent?: string;
325
333
  exitCode: number;
@@ -4,6 +4,15 @@
4
4
  * selector peeling and transcript renderers consult it instead of hardcoding
5
5
  * scheme names.
6
6
  */
7
+ /**
8
+ * Mutation class of a writable scheme; drives plan-mode and device-only `write` gates.
9
+ * - `workspace`: mutates user/external state; blocked in plan mode and device-only sessions.
10
+ * - `sandbox`: session scratch space (local://); allowed in plan mode and device-only sessions.
11
+ * - `coordination`: peer messaging (agent://); always allowed. `SchemeWritePolicy.cancels` grants the same per URL.
12
+ * - `device`: tool-device dispatch (xd://); always allowed, the device enforces its own policy.
13
+ * - `reply`: a message to the user (out://); always allowed, and transcripts draw the content as assistant prose.
14
+ */
15
+ export type SchemeWriteScope = "workspace" | "sandbox" | "coordination" | "device" | "reply";
7
16
  /** Renderer-relevant subset of a registered scheme's declared spec. */
8
17
  export interface InternalUrlSchemeSpec {
9
18
  /** `lines`: a trailing `:<selector>` chain is a read selector; `none`/`opaque`: never peel. */
@@ -12,16 +21,24 @@ export interface InternalUrlSchemeSpec {
12
21
  readonly portAuthority?: boolean;
13
22
  /** Read cards collapse into the compact read group like plain files instead of expanding. */
14
23
  readonly compactTranscript?: boolean;
24
+ /** Write policy; absent on read-only schemes. Transcripts draw `reply`-scoped writes as assistant prose. */
25
+ readonly write?: {
26
+ readonly scope: SchemeWriteScope;
27
+ };
15
28
  }
16
29
  /** Scheme registry capabilities installed by the internal URL host. */
17
30
  export interface InternalUrlSchemeHost {
18
31
  /** Declared spec of a registered scheme (case-insensitive); undefined when unregistered. */
19
32
  spec(scheme: string): InternalUrlSchemeSpec | undefined;
33
+ /** Declared specs of every registered scheme, keyed by lowercased scheme. */
34
+ specs(): ReadonlyMap<string, InternalUrlSchemeSpec>;
20
35
  }
21
36
  /** Install the scheme registry. Until one is installed, no URL counts as an internal scheme. */
22
37
  export declare function setInternalUrlSchemeHost(host: InternalUrlSchemeHost): void;
23
38
  /** Declared spec of `scheme`; undefined when it is unregistered or no host is installed. */
24
39
  export declare function internalUrlSchemeSpec(scheme: string): InternalUrlSchemeSpec | undefined;
40
+ /** Declared specs of every registered scheme, keyed by lowercased scheme; empty when no host is installed. */
41
+ export declare function internalUrlSchemeSpecs(): ReadonlyMap<string, InternalUrlSchemeSpec>;
25
42
  /** Split a hierarchical `scheme://rest` URL into its lowercased scheme and the text after `://`. */
26
43
  export declare function splitUrlScheme(input: string): {
27
44
  scheme: string;
@@ -15,7 +15,7 @@ export declare const yieldToolRenderer: {
15
15
  renderCall(args: YieldRenderArgs, options: RenderResultOptions, theme: Theme): Component;
16
16
  renderResult(result: ToolRenderResult<YieldItem>, options: RenderResultContextOptions, theme: Theme, args?: YieldRenderArgs): Component;
17
17
  describeCall(args: YieldRenderArgs, options: RenderResultOptions): NativeToolView;
18
- describeResult(result: ToolRenderResult<YieldItem>, _options: RenderResultContextOptions, args?: YieldRenderArgs): NativeToolView;
18
+ describeResult(result: ToolRenderResult<YieldItem>, options: RenderResultContextOptions, args?: YieldRenderArgs): NativeToolView;
19
19
  mergeCallAndResult: true;
20
20
  animatedPendingPreview: true;
21
21
  };
@@ -80,7 +80,9 @@ export interface TUIStartOptions {
80
80
  * switches to raw input and replays the kernel-buffered keystrokes.
81
81
  *
82
82
  * A terminal expected to speak TSP needs raw input from the start, so it
83
- * gets it; its keystrokes are held instead (TSP events and the cell-size
83
+ * gets it. Plain typing (printable text, Backspace) still edits the focused
84
+ * component live, as the kernel echo shows it elsewhere; the first other key
85
+ * and every key after it are held instead (TSP events and the cell-size
84
86
  * reply still apply) until {@link TUI.releaseHeldInput} replays them.
85
87
  */
86
88
  deferInput?: boolean;
@@ -507,7 +509,10 @@ export declare class TUI extends Container {
507
509
  * never come.
508
510
  */
509
511
  addStartListener(listener: StartListener): () => void;
510
- addInputListener(listener: InputListener): () => void;
512
+ /** Registers a key listener; `prepend` gives a foreground input owner first refusal over global shortcuts. */
513
+ addInputListener(listener: InputListener, options?: {
514
+ prepend?: boolean;
515
+ }): () => void;
511
516
  removeInputListener(listener: InputListener): void;
512
517
  stop(): void;
513
518
  /**
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "type": "module",
3
3
  "name": "@oh-my-pi/pi-tui",
4
- "version": "18.13.2",
4
+ "version": "18.14.0",
5
5
  "description": "Terminal User Interface library with differential rendering for efficient text-based applications",
6
6
  "homepage": "https://omp.sh",
7
7
  "author": {
@@ -41,27 +41,26 @@
41
41
  "gen:glyphs": "bun scripts/gen-glyphs.ts"
42
42
  },
43
43
  "dependencies": {
44
- "@oh-my-pi/omptype": "18.13.2",
45
- "@oh-my-pi/pi-agent-core": "18.13.2",
46
- "@oh-my-pi/pi-ai": "18.13.2",
47
- "@oh-my-pi/pi-catalog": "18.13.2",
48
- "@oh-my-pi/pi-natives": "18.13.2",
49
- "@oh-my-pi/pi-utils": "18.13.2",
50
- "@oh-my-pi/pi-wire": "18.13.2",
51
- "@oh-my-pi/snapcompact": "18.13.2"
44
+ "@oh-my-pi/omptype": "18.14.0",
45
+ "@oh-my-pi/pi-agent-core": "18.14.0",
46
+ "@oh-my-pi/pi-ai": "18.14.0",
47
+ "@oh-my-pi/pi-catalog": "18.14.0",
48
+ "@oh-my-pi/pi-natives": "18.14.0",
49
+ "@oh-my-pi/pi-utils": "18.14.0",
50
+ "@oh-my-pi/pi-wire": "18.14.0",
51
+ "@oh-my-pi/snapcompact": "18.14.0"
52
52
  },
53
53
  "devDependencies": {
54
54
  "kitty-vt-wasm": "^0.2.0"
55
55
  },
56
56
  "engines": {
57
- "bun": ">=1.3.14"
57
+ "bun": ">=1.4.4"
58
58
  },
59
59
  "files": [
60
60
  "src",
61
61
  "README.md",
62
62
  "CHANGELOG.md",
63
63
  "LICENSE",
64
- "THIRD-PARTY-NOTICES.txt",
65
64
  "dist/types"
66
65
  ],
67
66
  "exports": {
@@ -73,10 +72,6 @@
73
72
  "types": "./dist/types/theme/index.d.ts",
74
73
  "import": "./src/theme/index.ts"
75
74
  },
76
- "./theme/defaults": {
77
- "types": "./dist/types/theme/defaults/index.d.ts",
78
- "import": "./src/theme/defaults/index.ts"
79
- },
80
75
  "./theme/*": {
81
76
  "types": "./dist/types/theme/*.d.ts",
82
77
  "import": "./src/theme/*.ts"