@oh-my-pi/pi-coding-agent 15.6.0 → 15.7.1
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 +35 -0
- package/dist/types/capability/rule-buckets.d.ts +30 -0
- package/dist/types/capability/rule.d.ts +7 -0
- package/dist/types/cli/completion-gen.d.ts +80 -0
- package/dist/types/commands/complete.d.ts +6 -0
- package/dist/types/commands/completions.d.ts +13 -0
- package/dist/types/commands/setup.d.ts +10 -1
- package/dist/types/config/settings-schema.d.ts +170 -10
- package/dist/types/discovery/builtin-defaults.d.ts +1 -0
- package/dist/types/discovery/builtin-rules/index.d.ts +7 -0
- package/dist/types/discovery/index.d.ts +1 -0
- package/dist/types/edit/hashline/block-resolver.d.ts +9 -0
- package/dist/types/edit/hashline/index.d.ts +1 -0
- package/dist/types/eval/py/kernel.d.ts +3 -0
- package/dist/types/eval/py/runtime.d.ts +11 -1
- package/dist/types/export/html/template.generated.d.ts +1 -1
- package/dist/types/main.d.ts +1 -0
- package/dist/types/modes/components/index.d.ts +1 -0
- package/dist/types/modes/components/segment-track.d.ts +22 -0
- package/dist/types/modes/components/welcome.d.ts +21 -0
- package/dist/types/modes/interactive-mode.d.ts +3 -2
- package/dist/types/modes/setup-wizard/index.d.ts +16 -0
- package/dist/types/modes/setup-wizard/scenes/glyph.d.ts +2 -0
- package/dist/types/modes/setup-wizard/scenes/outro.d.ts +2 -0
- package/dist/types/modes/setup-wizard/scenes/providers.d.ts +2 -0
- package/dist/types/modes/setup-wizard/scenes/sign-in.d.ts +19 -0
- package/dist/types/modes/setup-wizard/scenes/splash.d.ts +11 -0
- package/dist/types/modes/setup-wizard/scenes/theme.d.ts +2 -0
- package/dist/types/modes/setup-wizard/scenes/types.d.ts +43 -0
- package/dist/types/modes/setup-wizard/scenes/web-search.d.ts +19 -0
- package/dist/types/modes/setup-wizard/wizard-overlay.d.ts +14 -0
- package/dist/types/modes/theme/shimmer.d.ts +2 -0
- package/dist/types/modes/theme/theme.d.ts +11 -0
- package/dist/types/modes/types.d.ts +5 -1
- package/dist/types/tiny/device.d.ts +78 -0
- package/dist/types/tiny/dtype.d.ts +85 -0
- package/dist/types/tiny/models.d.ts +6 -6
- package/dist/types/tiny/text.d.ts +15 -0
- package/dist/types/tiny/title-client.d.ts +8 -0
- package/dist/types/tools/bash.d.ts +0 -1
- package/dist/types/tools/eval.d.ts +1 -1
- package/dist/types/tools/index.d.ts +0 -1
- package/dist/types/tui/code-cell.d.ts +2 -0
- package/dist/types/tui/output-block.d.ts +17 -0
- package/package.json +9 -9
- package/src/capability/rule-buckets.ts +64 -0
- package/src/capability/rule.ts +8 -0
- package/src/cli/completion-gen.ts +550 -0
- package/src/cli/setup-cli.ts +5 -3
- package/src/cli-commands.ts +2 -0
- package/src/cli.ts +1 -7
- package/src/commands/complete.ts +66 -0
- package/src/commands/completions.ts +60 -0
- package/src/commands/setup.ts +29 -4
- package/src/config/settings-schema.ts +70 -11
- package/src/discovery/builtin-defaults.ts +39 -0
- package/src/discovery/builtin-rules/index.ts +48 -0
- package/src/discovery/builtin-rules/rs-box-leak.md +48 -0
- package/src/discovery/builtin-rules/rs-future-prelude.md +23 -0
- package/src/discovery/builtin-rules/rs-lazylock.md +51 -0
- package/src/discovery/builtin-rules/rs-match-ergonomics.md +67 -0
- package/src/discovery/builtin-rules/rs-parking-lot.md +44 -0
- package/src/discovery/builtin-rules/rs-result-type.md +19 -0
- package/src/discovery/builtin-rules/ts-bare-catch.md +38 -0
- package/src/discovery/builtin-rules/ts-import-type.md +42 -0
- package/src/discovery/builtin-rules/ts-no-any.md +56 -0
- package/src/discovery/builtin-rules/ts-no-dynamic-import.md +39 -0
- package/src/discovery/builtin-rules/ts-no-return-type.md +45 -0
- package/src/discovery/builtin-rules/ts-no-tiny-functions.md +50 -0
- package/src/discovery/builtin-rules/ts-promise-with-resolvers.md +65 -0
- package/src/discovery/builtin-rules/ts-set-map.md +28 -0
- package/src/discovery/index.ts +1 -0
- package/src/edit/hashline/block-resolver.ts +14 -0
- package/src/edit/hashline/diff.ts +4 -1
- package/src/edit/hashline/execute.ts +2 -1
- package/src/edit/hashline/index.ts +1 -0
- package/src/eval/py/kernel.ts +37 -15
- package/src/eval/py/runtime.ts +57 -28
- package/src/export/html/template.generated.ts +1 -1
- package/src/export/html/template.js +0 -12
- package/src/export/ttsr.ts +2 -0
- package/src/internal-urls/docs-index.generated.ts +7 -8
- package/src/main.ts +18 -1
- package/src/modes/components/hook-selector.ts +15 -17
- package/src/modes/components/index.ts +1 -0
- package/src/modes/components/segment-track.ts +52 -0
- package/src/modes/components/tips.txt +2 -1
- package/src/modes/components/tool-execution.ts +5 -1
- package/src/modes/components/welcome.ts +47 -42
- package/src/modes/controllers/input-controller.ts +12 -21
- package/src/modes/interactive-mode.ts +17 -5
- package/src/modes/setup-wizard/index.ts +88 -0
- package/src/modes/setup-wizard/scenes/glyph.ts +96 -0
- package/src/modes/setup-wizard/scenes/outro.ts +35 -0
- package/src/modes/setup-wizard/scenes/providers.ts +69 -0
- package/src/modes/setup-wizard/scenes/sign-in.ts +193 -0
- package/src/modes/setup-wizard/scenes/splash.ts +201 -0
- package/src/modes/setup-wizard/scenes/theme.ts +299 -0
- package/src/modes/setup-wizard/scenes/types.ts +48 -0
- package/src/modes/setup-wizard/scenes/web-search.ts +128 -0
- package/src/modes/setup-wizard/wizard-overlay.ts +275 -0
- package/src/modes/theme/shimmer.ts +5 -0
- package/src/modes/theme/theme.ts +44 -20
- package/src/modes/types.ts +6 -1
- package/src/prompts/system/orchestrate-notice.md +1 -1
- package/src/prompts/tools/read.md +4 -0
- package/src/sdk.ts +5 -15
- package/src/slash-commands/builtin-registry.ts +8 -0
- package/src/tiny/device.ts +117 -0
- package/src/tiny/dtype.ts +101 -0
- package/src/tiny/models.ts +7 -6
- package/src/tiny/text.ts +36 -1
- package/src/tiny/title-client.ts +58 -3
- package/src/tiny/worker.ts +93 -29
- package/src/tools/bash.ts +16 -13
- package/src/tools/eval.ts +9 -4
- package/src/tools/index.ts +0 -11
- package/src/tools/read.ts +1 -0
- package/src/tools/renderers.ts +0 -2
- package/src/tui/code-cell.ts +6 -1
- package/src/tui/output-block.ts +199 -38
- package/dist/types/tools/recipe/index.d.ts +0 -46
- package/dist/types/tools/recipe/render.d.ts +0 -36
- package/dist/types/tools/recipe/runner.d.ts +0 -60
- package/dist/types/tools/recipe/runners/cargo.d.ts +0 -16
- package/dist/types/tools/recipe/runners/index.d.ts +0 -2
- package/dist/types/tools/recipe/runners/just.d.ts +0 -2
- package/dist/types/tools/recipe/runners/make.d.ts +0 -2
- package/dist/types/tools/recipe/runners/pkg.d.ts +0 -2
- package/dist/types/tools/recipe/runners/task.d.ts +0 -2
- package/src/prompts/tools/recipe.md +0 -16
- package/src/tools/recipe/index.ts +0 -81
- package/src/tools/recipe/render.ts +0 -19
- package/src/tools/recipe/runner.ts +0 -219
- package/src/tools/recipe/runners/cargo.ts +0 -131
- package/src/tools/recipe/runners/index.ts +0 -8
- package/src/tools/recipe/runners/just.ts +0 -73
- package/src/tools/recipe/runners/make.ts +0 -101
- package/src/tools/recipe/runners/pkg.ts +0 -167
- package/src/tools/recipe/runners/task.ts +0 -72
package/dist/types/main.d.ts
CHANGED
|
@@ -44,6 +44,7 @@ interface RunRootCommandDependencies {
|
|
|
44
44
|
discoverAuthStorage?: typeof discoverAuthStorage;
|
|
45
45
|
runAcpMode?: typeof runAcpMode;
|
|
46
46
|
settings?: Settings;
|
|
47
|
+
forceSetupWizard?: boolean;
|
|
47
48
|
}
|
|
48
49
|
export declare function runRootCommand(parsed: Args, rawArgs: string[], deps?: RunRootCommandDependencies): Promise<void>;
|
|
49
50
|
export declare function main(args: string[]): Promise<void>;
|
|
@@ -19,6 +19,7 @@ export * from "./model-selector";
|
|
|
19
19
|
export * from "./oauth-selector";
|
|
20
20
|
export * from "./queue-mode-selector";
|
|
21
21
|
export * from "./read-tool-group";
|
|
22
|
+
export * from "./segment-track";
|
|
22
23
|
export * from "./session-selector";
|
|
23
24
|
export * from "./settings-selector";
|
|
24
25
|
export * from "./show-images-selector";
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Shared renderer for a horizontal row of colored "segments" styled after the
|
|
3
|
+
* status line: each segment shows in its own accent, the active one is filled
|
|
4
|
+
* as a powerline chip (its accent as the background, a luminance-matched label,
|
|
5
|
+
* flanked by triangle caps) and the rest are plain colored labels joined by a
|
|
6
|
+
* thin separator.
|
|
7
|
+
*
|
|
8
|
+
* Used by the plan-mode model-tier slider ({@link HookSelectorComponent}) and
|
|
9
|
+
* the ctrl+p role-cycle status so both surfaces read identically.
|
|
10
|
+
*/
|
|
11
|
+
import { type ThemeColor } from "../theme/theme";
|
|
12
|
+
export interface TrackSegment {
|
|
13
|
+
label: string;
|
|
14
|
+
/** Theme color for the segment; defaults to `accent`. */
|
|
15
|
+
color?: ThemeColor;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Render `segments` as a colored chip track with `activeIndex` filled. Returns
|
|
19
|
+
* a single line of styled text with no surrounding caption or arrows — callers
|
|
20
|
+
* frame it as they need.
|
|
21
|
+
*/
|
|
22
|
+
export declare function renderSegmentTrack(segments: TrackSegment[], activeIndex: number): string;
|
|
@@ -32,3 +32,24 @@ export declare class WelcomeComponent implements Component {
|
|
|
32
32
|
setLspServers(servers: LspServerInfo[]): void;
|
|
33
33
|
render(termWidth: number): string[];
|
|
34
34
|
}
|
|
35
|
+
export declare const PI_LOGO: string[];
|
|
36
|
+
export interface ShineConfig {
|
|
37
|
+
/** Overall opacity of the shine overlay, in [0, 1]. */
|
|
38
|
+
strength: number;
|
|
39
|
+
/** Center of the shine band along the diagonal, in [0, 1]. */
|
|
40
|
+
pos: number;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Resolve the gradient SGR foreground escape for a normalized position `t`
|
|
44
|
+
* (0..1) along the diagonal, compositing the optional sliding shine highlight.
|
|
45
|
+
* Shared by {@link gradientLogo} and the setup splash so both stay
|
|
46
|
+
* color-identical (truecolor when available, 256-color ramp otherwise).
|
|
47
|
+
*/
|
|
48
|
+
export declare function gradientEscape(t: number, shine?: ShineConfig): string;
|
|
49
|
+
/**
|
|
50
|
+
* Apply a multi-stop diagonal gradient (bottom-left → top-right) plus an
|
|
51
|
+
* optional sliding shine band across multi-line art. `phase` (0..1) shifts the
|
|
52
|
+
* gradient along the diagonal, wrapping at 1. When `shine` is provided, a soft
|
|
53
|
+
* white highlight is composited on top, centered at `shine.pos`.
|
|
54
|
+
*/
|
|
55
|
+
export declare function gradientLogo(lines: readonly string[], phase?: number, shine?: ShineConfig): string[];
|
|
@@ -25,7 +25,7 @@ import type { ToolExecutionHandle } from "./components/tool-execution";
|
|
|
25
25
|
import { type LoopLimitRuntime } from "./loop-limit";
|
|
26
26
|
import { OAuthManualInputManager } from "./oauth-manual-input";
|
|
27
27
|
import type { Theme } from "./theme/theme";
|
|
28
|
-
import type { CompactionQueuedMessage, InteractiveModeContext, SubmittedUserInput, TodoItem, TodoPhase } from "./types";
|
|
28
|
+
import type { CompactionQueuedMessage, InteractiveModeContext, InteractiveModeInitOptions, SubmittedUserInput, TodoItem, TodoPhase } from "./types";
|
|
29
29
|
/** Options for creating an InteractiveMode instance (for future API use) */
|
|
30
30
|
export interface InteractiveModeOptions {
|
|
31
31
|
/** Providers that were migrated during startup */
|
|
@@ -106,7 +106,8 @@ export declare class InteractiveMode implements InteractiveModeContext {
|
|
|
106
106
|
readonly lspServers: LspStartupServerInfo[] | undefined;
|
|
107
107
|
mcpManager?: import("../mcp").MCPManager;
|
|
108
108
|
constructor(session: AgentSession, version: string, changelogMarkdown?: string | undefined, setToolUIContext?: (uiContext: ExtensionUIContext, hasUI: boolean) => void, lspServers?: LspStartupServerInfo[] | undefined, mcpManager?: import("../mcp").MCPManager, eventBus?: EventBus);
|
|
109
|
-
|
|
109
|
+
playWelcomeIntro(): void;
|
|
110
|
+
init(options?: InteractiveModeInitOptions): Promise<void>;
|
|
110
111
|
/** Reload slash commands and autocomplete for the provided working directory. */
|
|
111
112
|
refreshSlashCommandState(cwd?: string): Promise<void>;
|
|
112
113
|
getUserInput(): Promise<SubmittedUserInput>;
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Settings } from "../../config/settings";
|
|
2
|
+
import type { InteractiveModeContext } from "../types";
|
|
3
|
+
import type { SetupScene } from "./scenes/types";
|
|
4
|
+
export type { SetupScene, SetupSceneController, SetupSceneHost, SetupSceneResult } from "./scenes/types";
|
|
5
|
+
export declare const ALL_SCENES: readonly [SetupScene, SetupScene, SetupScene];
|
|
6
|
+
export declare const CURRENT_SETUP_VERSION: number;
|
|
7
|
+
export interface SetupSceneSelectionOptions {
|
|
8
|
+
resuming?: boolean;
|
|
9
|
+
isTTY?: boolean;
|
|
10
|
+
skipEnv?: string;
|
|
11
|
+
setupWizardEnabled?: boolean;
|
|
12
|
+
force?: boolean;
|
|
13
|
+
}
|
|
14
|
+
export declare function selectSetupScenes(storedVersion: number, scenes: readonly SetupScene[], ctx?: InteractiveModeContext, options?: SetupSceneSelectionOptions): Promise<SetupScene[]>;
|
|
15
|
+
export declare function markSetupWizardComplete(settings: Settings, version?: number): Promise<void>;
|
|
16
|
+
export declare function runSetupWizard(ctx: InteractiveModeContext, scenes?: readonly SetupScene[]): Promise<void>;
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SetupSceneHost, SetupTab } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* "Sign in" panel: lets the user authenticate one or more model providers via
|
|
4
|
+
* OAuth. Unlike a standalone scene it never auto-advances the wizard — the user
|
|
5
|
+
* may sign in to several providers and then continue with Esc.
|
|
6
|
+
*/
|
|
7
|
+
export declare class SignInTab implements SetupTab {
|
|
8
|
+
#private;
|
|
9
|
+
private readonly host;
|
|
10
|
+
readonly id = "sign-in";
|
|
11
|
+
readonly label = "Sign in";
|
|
12
|
+
constructor(host: SetupSceneHost);
|
|
13
|
+
/** Modal while an OAuth flow is running so the scene won't switch tabs or finish. */
|
|
14
|
+
get modal(): boolean;
|
|
15
|
+
dispose(): void;
|
|
16
|
+
invalidate(): void;
|
|
17
|
+
handleInput(data: string): void;
|
|
18
|
+
render(width: number): string[];
|
|
19
|
+
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export declare const SETUP_SPLASH_MS = 2600;
|
|
2
|
+
export declare const SETUP_TICK_MS = 33;
|
|
3
|
+
export declare function renderStarfield(width: number, height: number, frame: number): string[];
|
|
4
|
+
/**
|
|
5
|
+
* Animated setup splash, in the spirit of the omp landing page: the brand π
|
|
6
|
+
* mark rendered with the live diagonal gradient + shine sweep, rising out of a
|
|
7
|
+
* rippling, gradient-lit water surface, under a faint twinkling starfield. The
|
|
8
|
+
* mark and water share one continuous gradient so the sweep reads across the
|
|
9
|
+
* whole scene; the water surface drifts each frame.
|
|
10
|
+
*/
|
|
11
|
+
export declare function renderSetupSplash(width: number, height: number, elapsedMs: number): string[];
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import type { Component } from "@oh-my-pi/pi-tui";
|
|
2
|
+
import type { InteractiveModeContext } from "../../types";
|
|
3
|
+
export type SetupSceneResult = "done" | "skipped";
|
|
4
|
+
export interface SetupSceneHost {
|
|
5
|
+
ctx: InteractiveModeContext;
|
|
6
|
+
requestRender(): void;
|
|
7
|
+
finish(result: SetupSceneResult): void;
|
|
8
|
+
setFocus(component: Component | null): void;
|
|
9
|
+
restoreFocus(): void;
|
|
10
|
+
}
|
|
11
|
+
export interface SetupSceneController extends Component {
|
|
12
|
+
title: string;
|
|
13
|
+
subtitle?: string;
|
|
14
|
+
onMount?(): void | Promise<void>;
|
|
15
|
+
onUnmount?(): void;
|
|
16
|
+
dispose?(): void;
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* A single panel inside a tabbed setup scene. The host scene owns the tab bar
|
|
20
|
+
* and forwards rendering/input to the active tab.
|
|
21
|
+
*/
|
|
22
|
+
export interface SetupTab {
|
|
23
|
+
readonly id: string;
|
|
24
|
+
readonly label: string;
|
|
25
|
+
/**
|
|
26
|
+
* While `true` the tab owns all keyboard input (e.g. an in-progress OAuth
|
|
27
|
+
* login). The parent scene MUST NOT switch tabs or finish while modal.
|
|
28
|
+
*/
|
|
29
|
+
readonly modal: boolean;
|
|
30
|
+
render(width: number): string[];
|
|
31
|
+
handleInput(data: string): void;
|
|
32
|
+
invalidate(): void;
|
|
33
|
+
/** Called when the tab becomes active (including initial mount). */
|
|
34
|
+
onActivate?(): void;
|
|
35
|
+
dispose(): void;
|
|
36
|
+
}
|
|
37
|
+
export interface SetupScene {
|
|
38
|
+
id: string;
|
|
39
|
+
title: string;
|
|
40
|
+
minVersion: number;
|
|
41
|
+
shouldRun?(ctx: InteractiveModeContext): boolean | Promise<boolean>;
|
|
42
|
+
mount(host: SetupSceneHost): SetupSceneController;
|
|
43
|
+
}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import type { SetupSceneHost, SetupTab } from "./types";
|
|
2
|
+
/**
|
|
3
|
+
* "Web search" panel: picks the provider the web_search tool should prefer and
|
|
4
|
+
* reports whether the highlighted provider is ready to use given current
|
|
5
|
+
* credentials (env keys or OAuth sign-ins from the Sign in tab).
|
|
6
|
+
*/
|
|
7
|
+
export declare class WebSearchTab implements SetupTab {
|
|
8
|
+
#private;
|
|
9
|
+
private readonly host;
|
|
10
|
+
readonly id = "web-search";
|
|
11
|
+
readonly label = "Web search";
|
|
12
|
+
readonly modal = false;
|
|
13
|
+
constructor(host: SetupSceneHost);
|
|
14
|
+
onActivate(): void;
|
|
15
|
+
handleInput(data: string): void;
|
|
16
|
+
invalidate(): void;
|
|
17
|
+
dispose(): void;
|
|
18
|
+
render(width: number): string[];
|
|
19
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { type Component } from "@oh-my-pi/pi-tui";
|
|
2
|
+
import type { InteractiveModeContext } from "../types";
|
|
3
|
+
import type { SetupScene } from "./scenes/types";
|
|
4
|
+
export declare class SetupWizardComponent implements Component {
|
|
5
|
+
#private;
|
|
6
|
+
readonly ctx: InteractiveModeContext;
|
|
7
|
+
readonly scenes: readonly SetupScene[];
|
|
8
|
+
constructor(ctx: InteractiveModeContext, scenes: readonly SetupScene[]);
|
|
9
|
+
run(): Promise<void>;
|
|
10
|
+
dispose(): void;
|
|
11
|
+
invalidate(): void;
|
|
12
|
+
handleInput(data: string): void;
|
|
13
|
+
render(width: number): string[];
|
|
14
|
+
}
|
|
@@ -20,6 +20,8 @@ export interface ShimmerSegment {
|
|
|
20
20
|
palette?: ShimmerPalette;
|
|
21
21
|
}
|
|
22
22
|
export declare const DEFAULT_SHIMMER_PALETTE: ShimmerPalette;
|
|
23
|
+
/** Whether shimmer animations are active (any mode other than `disabled`). */
|
|
24
|
+
export declare function shimmerEnabled(): boolean;
|
|
23
25
|
/**
|
|
24
26
|
* Apply a shimmer sweep across one or more segments, treating them as a
|
|
25
27
|
* single continuous string for band positioning. Each segment can supply
|
|
@@ -27,6 +27,17 @@ export declare class Theme {
|
|
|
27
27
|
inverse(text: string): string;
|
|
28
28
|
getFgAnsi(color: ThemeColor): string;
|
|
29
29
|
getBgAnsi(color: ThemeBg): string;
|
|
30
|
+
/**
|
|
31
|
+
* Foreground ANSI for text drawn **on top of** `fillColor` used as a solid
|
|
32
|
+
* background (e.g. a powerline chip). Picks near-black or near-white by the
|
|
33
|
+
* fill's perceived luminance (Rec. 601 luma) so the label stays legible on
|
|
34
|
+
* both bright and dark fills, across light and dark themes.
|
|
35
|
+
*
|
|
36
|
+
* Reads the RGB out of the already-resolved truecolor escape; when the fill
|
|
37
|
+
* is encoded as a 256-palette index (limited terminals) the RGB is
|
|
38
|
+
* unavailable, so it falls back to the theme `text` color.
|
|
39
|
+
*/
|
|
40
|
+
getContrastFgAnsi(fillColor: ThemeColor): string;
|
|
30
41
|
getColorMode(): ColorMode;
|
|
31
42
|
getThinkingBorderColor(level: ThinkingLevel | Effort): (str: string) => string;
|
|
32
43
|
getBashModeBorderColor(): (str: string) => string;
|
|
@@ -47,6 +47,9 @@ export type TodoPhase = {
|
|
|
47
47
|
name: string;
|
|
48
48
|
tasks: TodoItem[];
|
|
49
49
|
};
|
|
50
|
+
export interface InteractiveModeInitOptions {
|
|
51
|
+
suppressWelcomeIntro?: boolean;
|
|
52
|
+
}
|
|
50
53
|
export interface InteractiveModeContext {
|
|
51
54
|
ui: TUI;
|
|
52
55
|
chatContainer: Container;
|
|
@@ -111,7 +114,8 @@ export interface InteractiveModeContext {
|
|
|
111
114
|
skillCommands: Map<string, string>;
|
|
112
115
|
oauthManualInput: OAuthManualInputManager;
|
|
113
116
|
todoPhases: TodoPhase[];
|
|
114
|
-
init(): Promise<void>;
|
|
117
|
+
init(options?: InteractiveModeInitOptions): Promise<void>;
|
|
118
|
+
playWelcomeIntro(): void;
|
|
115
119
|
shutdown(): Promise<void>;
|
|
116
120
|
checkShutdownRequested(): Promise<void>;
|
|
117
121
|
setToolUIContext(uiContext: ExtensionUIContext, hasUI: boolean): void;
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
import type { DeviceType } from "@huggingface/transformers";
|
|
2
|
+
export type TinyModelDevice = DeviceType;
|
|
3
|
+
export interface TinyModelDevicePreference {
|
|
4
|
+
device: TinyModelDevice;
|
|
5
|
+
raw: string | undefined;
|
|
6
|
+
}
|
|
7
|
+
export declare function normalizeTinyModelDevice(value: string | undefined): TinyModelDevice | undefined;
|
|
8
|
+
export declare function resolveTinyModelDevicePreference(value?: string | undefined): TinyModelDevicePreference;
|
|
9
|
+
export declare function tinyModelDeviceLoadOrder(preference: TinyModelDevicePreference): readonly TinyModelDevice[];
|
|
10
|
+
/** Sentinel `providers.tinyModelDevice` value meaning "use the built-in platform default". */
|
|
11
|
+
export declare const TINY_MODEL_DEVICE_DEFAULT = "default";
|
|
12
|
+
/** Accepted values for the `providers.tinyModelDevice` setting (validation + UI). */
|
|
13
|
+
export declare const TINY_MODEL_DEVICE_SETTING_VALUES: readonly ["default", "gpu", "cpu", "metal", "webgpu", "cuda", "dml", "coreml", "auto", "wasm", "webnn", "webnn-gpu", "webnn-cpu", "webnn-npu"];
|
|
14
|
+
/** Submenu metadata for the `providers.tinyModelDevice` setting. */
|
|
15
|
+
export declare const TINY_MODEL_DEVICE_SETTING_OPTIONS: readonly [{
|
|
16
|
+
readonly value: "default";
|
|
17
|
+
readonly label: "Default";
|
|
18
|
+
readonly description: "DirectML on Windows, CUDA on Linux x64, CPU elsewhere";
|
|
19
|
+
}, {
|
|
20
|
+
readonly value: "gpu";
|
|
21
|
+
readonly label: "GPU";
|
|
22
|
+
readonly description: "Accelerated provider (WebGPU/Metal, CUDA, or DirectML)";
|
|
23
|
+
}, {
|
|
24
|
+
readonly value: "cpu";
|
|
25
|
+
readonly label: "CPU";
|
|
26
|
+
readonly description: "CPU-only inference";
|
|
27
|
+
}, {
|
|
28
|
+
readonly value: "metal";
|
|
29
|
+
readonly label: "Metal";
|
|
30
|
+
readonly description: "WebGPU alias for Apple GPUs";
|
|
31
|
+
}, {
|
|
32
|
+
readonly value: "webgpu";
|
|
33
|
+
readonly label: "WebGPU";
|
|
34
|
+
readonly description: "WebGPU/Metal backend";
|
|
35
|
+
}, {
|
|
36
|
+
readonly value: "cuda";
|
|
37
|
+
readonly label: "CUDA";
|
|
38
|
+
readonly description: "NVIDIA CUDA (Linux x64)";
|
|
39
|
+
}, {
|
|
40
|
+
readonly value: "dml";
|
|
41
|
+
readonly label: "DirectML";
|
|
42
|
+
readonly description: "DirectML backend (Windows)";
|
|
43
|
+
}, {
|
|
44
|
+
readonly value: "coreml";
|
|
45
|
+
readonly label: "CoreML";
|
|
46
|
+
readonly description: "Apple CoreML (opt-in; can fail to load)";
|
|
47
|
+
}, {
|
|
48
|
+
readonly value: "auto";
|
|
49
|
+
readonly label: "Auto";
|
|
50
|
+
readonly description: "Let ONNX Runtime choose a provider";
|
|
51
|
+
}, {
|
|
52
|
+
readonly value: "wasm";
|
|
53
|
+
readonly label: "WASM";
|
|
54
|
+
readonly description: "WebAssembly backend";
|
|
55
|
+
}, {
|
|
56
|
+
readonly value: "webnn";
|
|
57
|
+
readonly label: "WebNN";
|
|
58
|
+
readonly description: "WebNN backend";
|
|
59
|
+
}, {
|
|
60
|
+
readonly value: "webnn-gpu";
|
|
61
|
+
readonly label: "WebNN GPU";
|
|
62
|
+
readonly description: "WebNN GPU device";
|
|
63
|
+
}, {
|
|
64
|
+
readonly value: "webnn-cpu";
|
|
65
|
+
readonly label: "WebNN CPU";
|
|
66
|
+
readonly description: "WebNN CPU device";
|
|
67
|
+
}, {
|
|
68
|
+
readonly value: "webnn-npu";
|
|
69
|
+
readonly label: "WebNN NPU";
|
|
70
|
+
readonly description: "WebNN NPU device";
|
|
71
|
+
}];
|
|
72
|
+
/**
|
|
73
|
+
* Map a `providers.tinyModelDevice` setting value onto a `PI_TINY_DEVICE` env
|
|
74
|
+
* value for the worker. Returns `undefined` for the default sentinel so the
|
|
75
|
+
* worker keeps its built-in platform default; the worker still validates the
|
|
76
|
+
* forwarded value via {@link normalizeTinyModelDevice}.
|
|
77
|
+
*/
|
|
78
|
+
export declare function tinyModelDeviceSettingToEnv(value: string | undefined): string | undefined;
|
|
@@ -0,0 +1,85 @@
|
|
|
1
|
+
import type { DataType } from "@huggingface/transformers";
|
|
2
|
+
/** ONNX quantization / precision for local tiny models (transformers.js `dtype`). */
|
|
3
|
+
export type TinyModelDtype = DataType;
|
|
4
|
+
/**
|
|
5
|
+
* Validate and canonicalize a `PI_TINY_DTYPE` value. Returns `undefined` when
|
|
6
|
+
* unset/blank so callers fall back to the per-model spec dtype, and throws on an
|
|
7
|
+
* unrecognized value so a misconfiguration fails loudly instead of silently
|
|
8
|
+
* loading a different precision than requested.
|
|
9
|
+
*/
|
|
10
|
+
export declare function normalizeTinyModelDtype(value: string | undefined): TinyModelDtype | undefined;
|
|
11
|
+
/**
|
|
12
|
+
* Resolve the `PI_TINY_DTYPE` override. `undefined` means "use the per-model spec
|
|
13
|
+
* dtype" (currently `q4` for every shipped model); a concrete value overrides the
|
|
14
|
+
* precision for whichever local tiny model loads.
|
|
15
|
+
*/
|
|
16
|
+
export declare function resolveTinyModelDtypeOverride(value?: string | undefined): TinyModelDtype | undefined;
|
|
17
|
+
/** Sentinel `providers.tinyModelDtype` value meaning "use each model's shipped dtype". */
|
|
18
|
+
export declare const TINY_MODEL_DTYPE_DEFAULT = "default";
|
|
19
|
+
/** Accepted values for the `providers.tinyModelDtype` setting (validation + UI). */
|
|
20
|
+
export declare const TINY_MODEL_DTYPE_SETTING_VALUES: readonly ["default", "q4", "q4f16", "q8", "fp16", "fp32", "int8", "uint8", "bnb4", "q2", "q2f16", "q1", "q1f16", "auto"];
|
|
21
|
+
/** Submenu metadata for the `providers.tinyModelDtype` setting. */
|
|
22
|
+
export declare const TINY_MODEL_DTYPE_SETTING_OPTIONS: readonly [{
|
|
23
|
+
readonly value: "default";
|
|
24
|
+
readonly label: "Default";
|
|
25
|
+
readonly description: "Each model's shipped dtype (currently q4)";
|
|
26
|
+
}, {
|
|
27
|
+
readonly value: "q4";
|
|
28
|
+
readonly label: "q4";
|
|
29
|
+
readonly description: "4-bit weights; smallest and fastest";
|
|
30
|
+
}, {
|
|
31
|
+
readonly value: "q4f16";
|
|
32
|
+
readonly label: "q4f16";
|
|
33
|
+
readonly description: "4-bit weights with fp16 activations";
|
|
34
|
+
}, {
|
|
35
|
+
readonly value: "q8";
|
|
36
|
+
readonly label: "q8";
|
|
37
|
+
readonly description: "8-bit quantization";
|
|
38
|
+
}, {
|
|
39
|
+
readonly value: "fp16";
|
|
40
|
+
readonly label: "fp16";
|
|
41
|
+
readonly description: "16-bit float; higher fidelity, larger";
|
|
42
|
+
}, {
|
|
43
|
+
readonly value: "fp32";
|
|
44
|
+
readonly label: "fp32";
|
|
45
|
+
readonly description: "Full precision; largest and slowest";
|
|
46
|
+
}, {
|
|
47
|
+
readonly value: "int8";
|
|
48
|
+
readonly label: "int8";
|
|
49
|
+
readonly description: "Signed 8-bit integer";
|
|
50
|
+
}, {
|
|
51
|
+
readonly value: "uint8";
|
|
52
|
+
readonly label: "uint8";
|
|
53
|
+
readonly description: "Unsigned 8-bit integer";
|
|
54
|
+
}, {
|
|
55
|
+
readonly value: "bnb4";
|
|
56
|
+
readonly label: "bnb4";
|
|
57
|
+
readonly description: "bitsandbytes 4-bit";
|
|
58
|
+
}, {
|
|
59
|
+
readonly value: "q2";
|
|
60
|
+
readonly label: "q2";
|
|
61
|
+
readonly description: "2-bit weights";
|
|
62
|
+
}, {
|
|
63
|
+
readonly value: "q2f16";
|
|
64
|
+
readonly label: "q2f16";
|
|
65
|
+
readonly description: "2-bit weights with fp16 activations";
|
|
66
|
+
}, {
|
|
67
|
+
readonly value: "q1";
|
|
68
|
+
readonly label: "q1";
|
|
69
|
+
readonly description: "1-bit weights";
|
|
70
|
+
}, {
|
|
71
|
+
readonly value: "q1f16";
|
|
72
|
+
readonly label: "q1f16";
|
|
73
|
+
readonly description: "1-bit weights with fp16 activations";
|
|
74
|
+
}, {
|
|
75
|
+
readonly value: "auto";
|
|
76
|
+
readonly label: "Auto";
|
|
77
|
+
readonly description: "Let transformers.js choose per device";
|
|
78
|
+
}];
|
|
79
|
+
/**
|
|
80
|
+
* Map a `providers.tinyModelDtype` setting value onto a `PI_TINY_DTYPE` env value
|
|
81
|
+
* for the worker. Returns `undefined` for the default sentinel so the worker keeps
|
|
82
|
+
* each model's shipped dtype; the worker still validates the forwarded value via
|
|
83
|
+
* {@link normalizeTinyModelDtype}.
|
|
84
|
+
*/
|
|
85
|
+
export declare function tinyModelDtypeSettingToEnv(value: string | undefined): string | undefined;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/** Default session-title model: the online pi/smol path (no local download /
|
|
1
|
+
/** Default session-title model: the online pi/smol path (no local download / on-device inference). */
|
|
2
2
|
export declare const ONLINE_TINY_TITLE_MODEL_KEY = "online";
|
|
3
3
|
/** Local model the `tiny-models` CLI downloads when none is named. Not the session-title default — that is {@link ONLINE_TINY_TITLE_MODEL_KEY}. */
|
|
4
4
|
export declare const DEFAULT_TINY_TITLE_LOCAL_MODEL_KEY = "lfm2-700m";
|
|
@@ -16,7 +16,7 @@ export declare const TINY_TITLE_LOCAL_MODELS: readonly [{
|
|
|
16
16
|
readonly dtype: "q4";
|
|
17
17
|
readonly label: "LFM2 350M";
|
|
18
18
|
readonly description: "Recommended local model; best speed/quality balance, about 212 MB cached.";
|
|
19
|
-
readonly contextNote: "Best local default from the
|
|
19
|
+
readonly contextNote: "Best local default from the title-generation spike.";
|
|
20
20
|
}, {
|
|
21
21
|
readonly key: "qwen3-0.6b";
|
|
22
22
|
readonly repo: "onnx-community/Qwen3-0.6B-ONNX";
|
|
@@ -67,7 +67,7 @@ export declare const DEFAULT_MEMORY_LOCAL_MODEL_KEY = "qwen3-1.7b";
|
|
|
67
67
|
/**
|
|
68
68
|
* Local models for Mnemosyne memory tasks (fact extraction + consolidation).
|
|
69
69
|
* These are larger (1B-1.7B) than the title models: structured extraction and
|
|
70
|
-
* faithful summarization need more capacity than 3-6 word titles. All q4
|
|
70
|
+
* faithful summarization need more capacity than 3-6 word titles. All q4.
|
|
71
71
|
* Ranking/recipe rationale lives in docs/local-models.md.
|
|
72
72
|
*/
|
|
73
73
|
export declare const TINY_MEMORY_LOCAL_MODELS: readonly [{
|
|
@@ -76,7 +76,7 @@ export declare const TINY_MEMORY_LOCAL_MODELS: readonly [{
|
|
|
76
76
|
readonly dtype: "q4";
|
|
77
77
|
readonly label: "Qwen3 1.7B";
|
|
78
78
|
readonly description: "Recommended; most disciplined extraction (ignores chit-chat), good consolidation, about 1.1 GB cached.";
|
|
79
|
-
readonly contextNote: "Best single-model pick for memory from the
|
|
79
|
+
readonly contextNote: "Best single-model pick for memory from the local experiment.";
|
|
80
80
|
}, {
|
|
81
81
|
readonly key: "gemma-3-1b";
|
|
82
82
|
readonly repo: "onnx-community/gemma-3-1b-it-ONNX";
|
|
@@ -125,7 +125,7 @@ export declare const TINY_LOCAL_MODELS: readonly [{
|
|
|
125
125
|
readonly dtype: "q4";
|
|
126
126
|
readonly label: "LFM2 350M";
|
|
127
127
|
readonly description: "Recommended local model; best speed/quality balance, about 212 MB cached.";
|
|
128
|
-
readonly contextNote: "Best local default from the
|
|
128
|
+
readonly contextNote: "Best local default from the title-generation spike.";
|
|
129
129
|
}, {
|
|
130
130
|
readonly key: "qwen3-0.6b";
|
|
131
131
|
readonly repo: "onnx-community/Qwen3-0.6B-ONNX";
|
|
@@ -160,7 +160,7 @@ export declare const TINY_LOCAL_MODELS: readonly [{
|
|
|
160
160
|
readonly dtype: "q4";
|
|
161
161
|
readonly label: "Qwen3 1.7B";
|
|
162
162
|
readonly description: "Recommended; most disciplined extraction (ignores chit-chat), good consolidation, about 1.1 GB cached.";
|
|
163
|
-
readonly contextNote: "Best single-model pick for memory from the
|
|
163
|
+
readonly contextNote: "Best single-model pick for memory from the local experiment.";
|
|
164
164
|
}, {
|
|
165
165
|
readonly key: "gemma-3-1b";
|
|
166
166
|
readonly repo: "onnx-community/gemma-3-1b-it-ONNX";
|
|
@@ -1,4 +1,19 @@
|
|
|
1
1
|
export declare const MAX_TITLE_INPUT_CHARS = 2000;
|
|
2
2
|
export declare function truncateTitleInput(message: string): string;
|
|
3
|
+
/**
|
|
4
|
+
* Strip fenced code blocks from a message before titling.
|
|
5
|
+
*
|
|
6
|
+
* Small title models latch onto literal text inside code blocks — e.g. a pasted
|
|
7
|
+
* UI mockup containing "Welcome to Claude Code v2.1.158" yields that string as
|
|
8
|
+
* the title instead of the surrounding intent. Removing fenced blocks leaves the
|
|
9
|
+
* prose that actually describes the task. Inline code (single backticks) is kept
|
|
10
|
+
* — it is short, high-signal context like `/login`.
|
|
11
|
+
*
|
|
12
|
+
* Falls back to the original message when stripping leaves too little to title
|
|
13
|
+
* (a message that is essentially just a code block).
|
|
14
|
+
*/
|
|
15
|
+
export declare function stripCodeBlocks(message: string): string;
|
|
16
|
+
/** Prepare a raw user message for titling: drop code blocks, then bound length. */
|
|
17
|
+
export declare function prepareTitleInput(message: string): string;
|
|
3
18
|
export declare function formatTitleUserMessage(message: string): string;
|
|
4
19
|
export declare function normalizeGeneratedTitle(value: string | null | undefined): string | null;
|
|
@@ -3,6 +3,14 @@ export interface TinyTitleDownloadOptions {
|
|
|
3
3
|
signal?: AbortSignal;
|
|
4
4
|
onProgress?: (event: TinyTitleProgressEvent) => void;
|
|
5
5
|
}
|
|
6
|
+
/**
|
|
7
|
+
* Decide which `PI_TINY_DEVICE` / `PI_TINY_DTYPE` vars to overlay onto the worker
|
|
8
|
+
* env. A present env var wins (left untouched); otherwise the mapped persisted
|
|
9
|
+
* setting is used. Returns only the keys to add — never the default sentinel.
|
|
10
|
+
* Pure for testability; see {@link tinyWorkerEnv} for the spawn-time glue.
|
|
11
|
+
* @internal
|
|
12
|
+
*/
|
|
13
|
+
export declare function tinyWorkerEnvOverlay(env: Record<string, string | undefined>, deviceSetting: string | undefined, dtypeSetting: string | undefined): Record<string, string>;
|
|
6
14
|
export declare function createTinyTitleWorker(): Worker;
|
|
7
15
|
export declare class TinyTitleClient {
|
|
8
16
|
#private;
|
|
@@ -101,7 +101,6 @@ export interface ShellRendererConfig<TArgs> {
|
|
|
101
101
|
resolveEnv?: (args: TArgs | undefined) => Record<string, string> | undefined;
|
|
102
102
|
}
|
|
103
103
|
export declare function getBashEnvForDisplay(args: BashRenderArgs): Record<string, string> | undefined;
|
|
104
|
-
export declare function formatBashCommand(args: BashRenderArgs): string;
|
|
105
104
|
/**
|
|
106
105
|
* Returns the bash command formatted for the result body: the dim `$ cd … &&`
|
|
107
106
|
* prefix joined with syntax-highlighted command lines. The prefix is applied
|
|
@@ -94,7 +94,7 @@ interface EvalRenderContext {
|
|
|
94
94
|
timeout?: number;
|
|
95
95
|
}
|
|
96
96
|
export declare const evalToolRenderer: {
|
|
97
|
-
renderCall(args: EvalRenderArgs,
|
|
97
|
+
renderCall(args: EvalRenderArgs, options: RenderResultOptions, uiTheme: Theme): Component;
|
|
98
98
|
renderResult(result: {
|
|
99
99
|
content: Array<{
|
|
100
100
|
type: string;
|
|
@@ -46,7 +46,6 @@ export * from "./memory-recall";
|
|
|
46
46
|
export * from "./memory-reflect";
|
|
47
47
|
export * from "./memory-retain";
|
|
48
48
|
export * from "./read";
|
|
49
|
-
export * from "./recipe";
|
|
50
49
|
export * from "./render-mermaid";
|
|
51
50
|
export * from "./report-tool-issue";
|
|
52
51
|
export * from "./resolve";
|
|
@@ -12,6 +12,8 @@ export interface CodeCellOptions {
|
|
|
12
12
|
outputMaxLines?: number;
|
|
13
13
|
codeMaxLines?: number;
|
|
14
14
|
expanded?: boolean;
|
|
15
|
+
/** Animate the cell border with a sweeping segment while pending/running. */
|
|
16
|
+
animate?: boolean;
|
|
15
17
|
width: number;
|
|
16
18
|
}
|
|
17
19
|
export declare function renderCodeCell(options: CodeCellOptions, theme: Theme): string[];
|
|
@@ -10,7 +10,24 @@ export interface OutputBlockOptions {
|
|
|
10
10
|
}>;
|
|
11
11
|
width: number;
|
|
12
12
|
applyBg?: boolean;
|
|
13
|
+
/** Animate the border with a sweeping dark segment (pending/running state). */
|
|
14
|
+
animate?: boolean;
|
|
13
15
|
}
|
|
16
|
+
/**
|
|
17
|
+
* Monotonic frame counter for animated borders. Quantized coarse enough to
|
|
18
|
+
* coalesce multiple render passes inside one frame, fine enough to advance on
|
|
19
|
+
* every spinner interval so cached blocks re-render while the segment travels.
|
|
20
|
+
*/
|
|
21
|
+
export declare function borderShimmerTick(): number;
|
|
22
|
+
/**
|
|
23
|
+
* Perimeter index of the moving segment's head for a box of inner width `W` and
|
|
24
|
+
* height `H` at time `now`. The lap is split across the four edges in proportion
|
|
25
|
+
* to their length (so the average speed is uniform) and each edge is eased, for a
|
|
26
|
+
* deliberate, non-linear glide that slows at every corner. Position is derived
|
|
27
|
+
* from the wall clock against a fixed lap duration, so a perimeter change (new
|
|
28
|
+
* row / resize) shifts the head by at most a cell or two — no reset.
|
|
29
|
+
*/
|
|
30
|
+
export declare function borderSegmentHead(W: number, H: number, now: number): number;
|
|
14
31
|
export declare function renderOutputBlock(options: OutputBlockOptions, theme: Theme): string[];
|
|
15
32
|
/**
|
|
16
33
|
* Cached wrapper around `renderOutputBlock`.
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"type": "module",
|
|
3
3
|
"name": "@oh-my-pi/pi-coding-agent",
|
|
4
|
-
"version": "15.
|
|
4
|
+
"version": "15.7.1",
|
|
5
5
|
"description": "Coding agent CLI with read, bash, edit, write tools and session management",
|
|
6
6
|
"homepage": "https://omp.sh",
|
|
7
7
|
"author": "Can Boluk",
|
|
@@ -47,14 +47,14 @@
|
|
|
47
47
|
"@agentclientprotocol/sdk": "0.22.1",
|
|
48
48
|
"@babel/parser": "^7.29.7",
|
|
49
49
|
"@mozilla/readability": "^0.6.0",
|
|
50
|
-
"@oh-my-pi/hashline": "15.
|
|
51
|
-
"@oh-my-pi/omp-stats": "15.
|
|
52
|
-
"@oh-my-pi/pi-agent-core": "15.
|
|
53
|
-
"@oh-my-pi/pi-ai": "15.
|
|
54
|
-
"@oh-my-pi/pi-mnemosyne": "15.
|
|
55
|
-
"@oh-my-pi/pi-natives": "15.
|
|
56
|
-
"@oh-my-pi/pi-tui": "15.
|
|
57
|
-
"@oh-my-pi/pi-utils": "15.
|
|
50
|
+
"@oh-my-pi/hashline": "15.7.1",
|
|
51
|
+
"@oh-my-pi/omp-stats": "15.7.1",
|
|
52
|
+
"@oh-my-pi/pi-agent-core": "15.7.1",
|
|
53
|
+
"@oh-my-pi/pi-ai": "15.7.1",
|
|
54
|
+
"@oh-my-pi/pi-mnemosyne": "15.7.1",
|
|
55
|
+
"@oh-my-pi/pi-natives": "15.7.1",
|
|
56
|
+
"@oh-my-pi/pi-tui": "15.7.1",
|
|
57
|
+
"@oh-my-pi/pi-utils": "15.7.1",
|
|
58
58
|
"@puppeteer/browsers": "^3.0.4",
|
|
59
59
|
"@types/turndown": "5.0.6",
|
|
60
60
|
"@xterm/headless": "^6.0.0",
|