feat(kimi-code): integrate vendored @moonshot-ai/pi-tui

Replace the npm @earendil-works/pi-tui dependency with the vendored @moonshot-ai/pi-tui workspace package so the fork can be modified locally.

- Point apps/kimi-code imports and native-deps at @moonshot-ai/pi-tui.

- Make pi-tui source-first (exports -> src, publishConfig.exports -> dist, mirroring node-sdk) and strict-clean: bracket access for process.env / named capture groups, an override modifier, and non-null assertions for noUncheckedIndexedAccess.

- Bump the root tsconfig target to ES2024 and enable allowImportingTsExtensions (needed for pi-tui's /v regex and .ts imports, which node --test requires).

- Add packages/pi-tui to flake.nix workspaces and exclude the vendored source from oxlint.
This commit is contained in:
liruifengv 2026-06-29 21:21:36 +08:00
parent 63e7b988f0
commit 86540ca2d7
144 changed files with 321 additions and 1259 deletions

View file

@ -150,6 +150,7 @@
"node_modules/",
"apps/*/scripts/",
"docs/smoke-archive/",
"packages/pi-tui/",
"*.generated.ts"
]
}

View file

@ -79,13 +79,13 @@
"node-pty": "^1.1.0"
},
"devDependencies": {
"@earendil-works/pi-tui": "^0.78.1",
"@moonshot-ai/acp-adapter": "workspace:^",
"@moonshot-ai/kimi-code-oauth": "workspace:^",
"@moonshot-ai/kimi-code-sdk": "workspace:^",
"@moonshot-ai/kimi-telemetry": "workspace:^",
"@moonshot-ai/kimi-web": "workspace:^",
"@moonshot-ai/migration-legacy": "workspace:^",
"@moonshot-ai/pi-tui": "workspace:^",
"@moonshot-ai/server": "workspace:^",
"@moonshot-ai/vis-server": "workspace:^",
"@moonshot-ai/vis-web": "workspace:*",

View file

@ -75,7 +75,7 @@ export const nativeDeps = Object.freeze([
},
{
id: 'pi-tui',
name: () => '@earendil-works/pi-tui',
name: () => '@moonshot-ai/pi-tui',
// pi-tui's JS is bundled into main.cjs, so only the platform-specific
// native helper (.node under native/) ships alongside the binary — its
// dist/ JS is intentionally NOT collected (it stays in the bundle). This

View file

@ -11,7 +11,7 @@
* This file implements the ask, progress, and result phases. `beginMigration`
* drives the real runMigration flow (injectable for tests).
*/
import { Container, matchesKey, Key, truncateToWidth, type Focusable } from '@earendil-works/pi-tui';
import { Container, matchesKey, Key, truncateToWidth, type Focusable } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import type { ColorPalette } from '#/tui/theme/colors';

View file

@ -42,7 +42,7 @@ export function installNativeModuleHook(): void {
PI_TUI_NATIVE_PATTERN.test(request) &&
!existsSync(request)
) {
const pkgRoot = getNativePackageRoot('@earendil-works/pi-tui');
const pkgRoot = getNativePackageRoot('@moonshot-ai/pi-tui');
if (pkgRoot !== null) {
const match = request.match(PI_TUI_NATIVE_PATTERN);
if (match !== null) {

View file

@ -3,7 +3,7 @@ import { dirname, join } from 'node:path';
import { getEmbeddedNativeAssetManifest, getNativePackageRoot } from './native-assets';
const smokePackages = ['@mariozechner/clipboard', '@earendil-works/pi-tui'];
const smokePackages = ['@mariozechner/clipboard', '@moonshot-ai/pi-tui'];
// Verify pi-tui's native helper can actually be loaded through the module hook.
// pi-tui computes native helper paths from process.execPath and require()s them;

View file

@ -1,4 +1,4 @@
import type { AutocompleteItem } from '@earendil-works/pi-tui';
import type { AutocompleteItem } from '@moonshot-ai/pi-tui';
/**
* A completable token (subcommand or flag) for a slash command's argument

View file

@ -1,4 +1,4 @@
import type { Component, Focusable } from '@earendil-works/pi-tui';
import type { Component, Focusable } from '@moonshot-ai/pi-tui';
import type { DeviceAuthorization } from '@moonshot-ai/kimi-code-oauth';
import type { KimiHarness, Session } from '@moonshot-ai/kimi-code-sdk';

View file

@ -2,7 +2,7 @@ import { readdirSync, statSync } from 'node:fs';
import { homedir } from 'node:os';
import { basename, dirname, join, relative, resolve } from 'pathe';
import type { AutocompleteItem } from '@earendil-works/pi-tui';
import type { AutocompleteItem } from '@moonshot-ai/pi-tui';
import { completeLeadingArg, type ArgCompletionSpec } from './complete-args';
import type { KimiSlashCommand, SlashCommandAvailability } from './types';

View file

@ -1,4 +1,4 @@
import type { AutocompleteItem, SlashCommand } from '@earendil-works/pi-tui';
import type { AutocompleteItem, SlashCommand } from '@moonshot-ai/pi-tui';
import type { FlagId } from '@moonshot-ai/kimi-code-sdk';
export type SlashCommandAvailability = 'always' | 'idle-only';

View file

@ -1,4 +1,4 @@
import type { Component } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import type { ContextMessage } from '@moonshot-ai/kimi-code-sdk';
import { isKimiError } from '@moonshot-ai/kimi-code-sdk';

View file

@ -1,5 +1,5 @@
import type { Component } from '@earendil-works/pi-tui';
import { visibleWidth, wrapTextWithAnsi } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { visibleWidth, wrapTextWithAnsi } from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
import type { BannerState } from '#/tui/types';

View file

@ -6,8 +6,8 @@
* active palette so theme switches take effect on the next render.
*/
import type { Component } from '@earendil-works/pi-tui';
import { truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { truncateToWidth, visibleWidth } from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';

View file

@ -6,8 +6,8 @@
* Line 2: context: XX.X% (tokens/max)
*/
import type { Component } from '@earendil-works/pi-tui';
import { truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { truncateToWidth, visibleWidth } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { ALL_TIPS, type ToolbarTip } from '#/tui/constant/tips';

View file

@ -9,8 +9,8 @@
* the edge and adding them would just churn the diff renderer.
*/
import { Container } from '@earendil-works/pi-tui';
import type { Component } from '@earendil-works/pi-tui';
import { Container } from '@moonshot-ai/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { isRenderCacheEnabled } from '#/tui/utils/render-cache';

View file

@ -1,5 +1,5 @@
import { Text, visibleWidth } from '@earendil-works/pi-tui';
import type { TUI } from '@earendil-works/pi-tui';
import { Text, visibleWidth } from '@moonshot-ai/pi-tui';
import type { TUI } from '@moonshot-ai/pi-tui';
import {
BRAILLE_SPINNER_FRAMES,

View file

@ -9,8 +9,8 @@
* is issued.
*/
import type { Component } from '@earendil-works/pi-tui';
import { truncateToWidth } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { truncateToWidth } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { currentTheme } from '#/tui/theme';

View file

@ -3,8 +3,8 @@
* Renders a round-bordered box with the logo, session, model, and version.
*/
import type { Component } from '@earendil-works/pi-tui';
import { truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { truncateToWidth, visibleWidth } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { isRainbowDancing, renderDanceWelcomeHeader } from '#/tui/easter-eggs/dance';

View file

@ -6,7 +6,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';

View file

@ -14,7 +14,7 @@ import {
truncateToWidth,
visibleWidth,
wrapTextWithAnsi,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
import { highlightLines, langFromPath } from '#/tui/components/media/code-highlight';
import { renderDiffLinesClustered } from '#/tui/components/media/diff-preview';

View file

@ -24,7 +24,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { highlightLines, langFromPath } from '#/tui/components/media/code-highlight';
import { renderDiffLines } from '#/tui/components/media/diff-preview';

View file

@ -15,7 +15,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { CURRENT_MARK, SELECT_POINTER } from '#/tui/constant/symbols';
import { currentTheme, type ColorToken } from '#/tui/theme';
import { printableChar } from '#/tui/utils/printable-key';

View file

@ -13,8 +13,8 @@
* reads the same "work in progress" signal across the UI.
*/
import { Container, Text, Spacer } from '@earendil-works/pi-tui';
import type { TUI } from '@earendil-works/pi-tui';
import { Container, Text, Spacer } from '@moonshot-ai/pi-tui';
import type { TUI } from '@moonshot-ai/pi-tui';
import { STATUS_BULLET } from '#/tui/constant/symbols';
import { currentTheme } from '#/tui/theme';

View file

@ -17,7 +17,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';

View file

@ -5,7 +5,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import type { ExperimentalFeatureState } from '@moonshot-ai/kimi-code-sdk';
import { SELECT_POINTER } from '#/tui/constant/symbols';

View file

@ -19,7 +19,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
export type FeedbackInputDialogResult =

View file

@ -6,7 +6,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { SELECT_POINTER } from '#/tui/constant/symbols';

View file

@ -15,7 +15,7 @@ import {
decodeKittyPrintable,
type Focusable,
truncateToWidth,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
export interface KeyboardShortcut {

View file

@ -6,7 +6,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { DEFAULT_OAUTH_PROVIDER_NAME, PRODUCT_NAME } from '#/constant/app';
import { CURRENT_MARK, SELECT_POINTER } from '#/tui/constant/symbols';

View file

@ -6,7 +6,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import type { PluginInfo, PluginMcpServerInfo, PluginSummary } from '@moonshot-ai/kimi-code-sdk';
import chalk from 'chalk';

View file

@ -42,7 +42,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { DEFAULT_OAUTH_PROVIDER_NAME } from '#/constant/app';
import { CURRENT_MARK, SELECT_POINTER } from '#/tui/constant/symbols';

View file

@ -15,7 +15,7 @@ import {
truncateToWidth,
visibleWidth,
wrapTextWithAnsi,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
import type {

View file

@ -9,7 +9,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { formatSessionLabel } from '#/migration/index';
import { CURRENT_MARK, SELECT_POINTER } from '#/tui/constant/symbols';
import { currentTheme } from '#/tui/theme';

View file

@ -5,7 +5,7 @@ import {
visibleWidth,
type Component,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { SELECT_POINTER } from '#/tui/constant/symbols';
import { currentTheme } from '#/tui/theme';

View file

@ -20,7 +20,7 @@ import {
matchesKey,
truncateToWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
import { renderTabStrip } from '#/tui/utils/tab-strip';

View file

@ -17,7 +17,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import type { BackgroundTaskInfo, BackgroundTaskStatus } from '@moonshot-ai/kimi-code-sdk';
import { currentTheme } from '#/tui/theme';

View file

@ -21,7 +21,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import type { BackgroundTaskInfo, BackgroundTaskStatus } from '@moonshot-ai/kimi-code-sdk';
import { SELECT_POINTER } from '@/tui/constant/symbols';

View file

@ -5,7 +5,7 @@ import {
truncateToWidth,
visibleWidth,
type Focusable,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { SELECT_POINTER } from '#/tui/constant/symbols';
import { currentTheme } from '#/tui/theme';

View file

@ -11,7 +11,7 @@ import {
visibleWidth,
type SelectItem,
type TUI,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
import { createEditorTheme } from '#/tui/theme/pi-tui-theme';

View file

@ -8,7 +8,7 @@ import {
type AutocompleteProvider,
type AutocompleteSuggestions,
type SlashCommand,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
const PATH_DELIMITERS = new Set([' ', '\t', '"', "'", '=']);
const MAX_FALLBACK_SCAN = 2000;

View file

@ -6,7 +6,7 @@ import {
type SelectItem,
type SelectListLayoutOptions,
type SelectListTheme,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
// Mirror pi-tui's private select-list layout constants
// (dist/components/select-list.js); keep in sync when bumping pi-tui.

View file

@ -12,7 +12,7 @@
* the viewport; pi-tui handles proportional scaling internally.
*/
import { Container, Image, Text, type ImageTheme, getCapabilities } from '@earendil-works/pi-tui';
import { Container, Image, Text, type ImageTheme, getCapabilities } from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
import type { ImageAttachment } from '#/tui/utils/image-attachment-store';

View file

@ -15,8 +15,8 @@
* - Ungrouping is not implemented. Once formed, a group stays grouped.
*/
import type { TUI } from '@earendil-works/pi-tui';
import { Container, Spacer, Text } from '@earendil-works/pi-tui';
import type { TUI } from '@moonshot-ai/pi-tui';
import { Container, Spacer, Text } from '@moonshot-ai/pi-tui';
import { STATUS_BULLET } from '#/tui/constant/symbols';
import { currentTheme } from '#/tui/theme';

View file

@ -1,4 +1,4 @@
import { truncateToWidth, visibleWidth, type Component } from '@earendil-works/pi-tui';
import { truncateToWidth, visibleWidth, type Component } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import {

View file

@ -5,7 +5,7 @@
* to align after the bullet.
*/
import { Container, Markdown, truncateToWidth, visibleWidth, type Component } from '@earendil-works/pi-tui';
import { Container, Markdown, truncateToWidth, visibleWidth, type Component } from '@moonshot-ai/pi-tui';
import { MESSAGE_INDENT } from '#/tui/constant/rendering';
import { STATUS_BULLET } from '#/tui/constant/symbols';

View file

@ -1,4 +1,4 @@
import { Text, truncateToWidth, type Component } from '@earendil-works/pi-tui';
import { Text, truncateToWidth, type Component } from '@moonshot-ai/pi-tui';
import { MESSAGE_INDENT } from '#/tui/constant/rendering';
import { FAILURE_MARK, STATUS_BULLET } from '#/tui/constant/symbols';

View file

@ -1,5 +1,5 @@
import type { Component } from '@earendil-works/pi-tui';
import { Spacer, Text, visibleWidth } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { Spacer, Text, visibleWidth } from '@moonshot-ai/pi-tui';
import { STATUS_BULLET } from '#/tui/constant/symbols';
import { currentTheme } from '#/tui/theme';

View file

@ -7,7 +7,7 @@
* the richer completion card (the `/goal` box), not this marker.
*/
import { truncateToWidth, type Component } from '@earendil-works/pi-tui';
import { truncateToWidth, type Component } from '@moonshot-ai/pi-tui';
import type { GoalChange } from '@moonshot-ai/kimi-code-sdk';
import { STATUS_BULLET } from '#/tui/constant/symbols';

View file

@ -19,7 +19,7 @@ import {
visibleWidth,
wrapTextWithAnsi,
type Component,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import type { GoalSnapshot, GoalStatus } from '@moonshot-ai/kimi-code-sdk';
import { MESSAGE_INDENT } from '#/tui/constant/rendering';

View file

@ -7,7 +7,7 @@
import path from 'node:path';
import { pathToFileURL } from 'node:url';
import { Markdown, truncateToWidth, visibleWidth, type Component, type MarkdownTheme } from '@earendil-works/pi-tui';
import { Markdown, truncateToWidth, visibleWidth, type Component, type MarkdownTheme } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { toTerminalHyperlink } from '#/utils/terminal-hyperlink';

View file

@ -20,8 +20,8 @@
* src/missing.ts · failed
*/
import type { TUI } from '@earendil-works/pi-tui';
import { Container, Spacer, Text } from '@earendil-works/pi-tui';
import type { TUI } from '@moonshot-ai/pi-tui';
import { Container, Spacer, Text } from '@moonshot-ai/pi-tui';
import { STATUS_BULLET } from '#/tui/constant/symbols';
import { currentTheme } from '#/tui/theme';

View file

@ -1,5 +1,5 @@
import type { Component } from '@earendil-works/pi-tui';
import { Container, Text } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { Container, Text } from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
import type { ToolCallBlockData, ToolResultBlockData } from '#/tui/types';

View file

@ -1,4 +1,4 @@
import { Container, Text } from '@earendil-works/pi-tui';
import { Container, Text } from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';

View file

@ -12,7 +12,7 @@
* metadata.
*/
import { Container, Text, Spacer } from '@earendil-works/pi-tui';
import { Container, Text, Spacer } from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
import type { SkillActivationTrigger } from '#/tui/types';

View file

@ -1,4 +1,4 @@
import { Container, Spacer, Text } from '@earendil-works/pi-tui';
import { Container, Spacer, Text } from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';
import type { ColorToken } from '#/tui/theme';

View file

@ -1,4 +1,4 @@
import type { Component } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';

View file

@ -1,4 +1,4 @@
import { truncateToWidth, type Component } from '@earendil-works/pi-tui';
import { truncateToWidth, type Component } from '@moonshot-ai/pi-tui';
import { STATUS_BULLET } from '#/tui/constant/symbols';
import { currentTheme } from '#/tui/theme';

View file

@ -5,7 +5,7 @@
* Supports expand/collapse via Ctrl+O (shared with tool output).
*/
import { Text, truncateToWidth, type Component, type TUI } from '@earendil-works/pi-tui';
import { Text, truncateToWidth, type Component, type TUI } from '@moonshot-ai/pi-tui';
import {
BRAILLE_SPINNER_FRAMES,

View file

@ -5,8 +5,8 @@
import { isAbsolute, relative, sep } from 'node:path';
import { Container, Spacer, Text, truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
import type { Component, TUI } from '@earendil-works/pi-tui';
import { Container, Spacer, Text, truncateToWidth, visibleWidth } from '@moonshot-ai/pi-tui';
import type { Component, TUI } from '@moonshot-ai/pi-tui';
import { highlightLines, langFromPath } from '#/tui/components/media/code-highlight';
import { renderDiffLinesClustered } from '#/tui/components/media/diff-preview';
import {

View file

@ -1,4 +1,4 @@
import { Text } from '@earendil-works/pi-tui';
import { Text } from '@moonshot-ai/pi-tui';
import { STATUS_BULLET } from '#/tui/constant/symbols';
import { currentTheme } from '#/tui/theme';

View file

@ -13,8 +13,8 @@
* message.
*/
import type { Component } from '@earendil-works/pi-tui';
import { Text } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { Text } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import type { ChipProvider } from './chip';

View file

@ -10,8 +10,8 @@
* sees the actual error message, not a synthetic summary.
*/
import type { Component } from '@earendil-works/pi-tui';
import { Text } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { Text } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { renderTruncated } from './truncated';

View file

@ -1,4 +1,4 @@
import { Text, truncateToWidth, type Component } from '@earendil-works/pi-tui';
import { Text, truncateToWidth, type Component } from '@moonshot-ai/pi-tui';
import { currentTheme } from '#/tui/theme';

View file

@ -1,4 +1,4 @@
import type { Component } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { RESULT_PREVIEW_LINES } from '#/tui/constant/rendering';
import type { ToolCallBlockData, ToolResultBlockData } from '#/tui/types';

View file

@ -4,8 +4,8 @@
* the pattern stays consistent across command-triggered panels.
*/
import type { Component } from '@earendil-works/pi-tui';
import { truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { truncateToWidth, visibleWidth } from '@moonshot-ai/pi-tui';
import type { SessionUsage, TokenUsage } from '@moonshot-ai/kimi-code-sdk';
import {

View file

@ -2,7 +2,7 @@
* Renders a user message in the transcript.
*/
import { Spacer, Text, truncateToWidth, visibleWidth, type Component } from '@earendil-works/pi-tui';
import { Spacer, Text, truncateToWidth, visibleWidth, type Component } from '@moonshot-ai/pi-tui';
import { ImageThumbnail } from '#/tui/components/media/image-thumbnail';
import { USER_MESSAGE_BULLET } from '#/tui/constant/symbols';

View file

@ -1,4 +1,4 @@
import { Container, Spacer } from '@earendil-works/pi-tui';
import { Container, Spacer } from '@moonshot-ai/pi-tui';
import type { MoonLoader } from '#/tui/components/chrome/moon-loader';

View file

@ -1,10 +1,10 @@
import type { Component, MarkdownTheme } from '@earendil-works/pi-tui';
import type { Component, MarkdownTheme } from '@moonshot-ai/pi-tui';
import {
Markdown,
Text,
truncateToWidth,
visibleWidth,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { THINKING_PREVIEW_LINES } from '../../constant/rendering';

View file

@ -1,4 +1,4 @@
import { Container, truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
import { Container, truncateToWidth, visibleWidth } from '@moonshot-ai/pi-tui';
import { SELECT_POINTER } from '../../constant/symbols';
import type { QueuedMessage } from '../../types';

View file

@ -1,4 +1,4 @@
import { Spacer } from '@earendil-works/pi-tui';
import { Spacer } from '@moonshot-ai/pi-tui';
import type {
Event,
KimiHarness,

View file

@ -1,4 +1,4 @@
import type { TUI } from '@earendil-works/pi-tui';
import type { TUI } from '@moonshot-ai/pi-tui';
import { clipboardHasImage } from '#/utils/clipboard/clipboard-has-image';

View file

@ -1,4 +1,4 @@
import type { Component, Focusable } from '@earendil-works/pi-tui';
import type { Component, Focusable } from '@moonshot-ai/pi-tui';
import type {
AgentStatusUpdatedEvent,
AssistantDeltaEvent,

View file

@ -2,7 +2,7 @@ import type {
BackgroundTaskInfo,
Event,
} from '@moonshot-ai/kimi-code-sdk';
import type { Component } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import {
AgentSwarmProgressComponent,

View file

@ -1,5 +1,5 @@
import type { BackgroundTaskInfo, Session } from '@moonshot-ai/kimi-code-sdk';
import type { Component, ProcessTerminal, TUI } from '@earendil-works/pi-tui';
import type { Component, ProcessTerminal, TUI } from '@moonshot-ai/pi-tui';
import { TaskOutputViewer } from '../components/dialogs/task-output-viewer';
import { TasksBrowserApp, type TasksFilter } from '../components/dialogs/tasks-browser';

View file

@ -10,7 +10,7 @@
*/
import chalk from 'chalk';
import { truncateToWidth, visibleWidth } from '@earendil-works/pi-tui';
import { truncateToWidth, visibleWidth } from '@moonshot-ai/pi-tui';
import type { SlashCommandHost } from '../commands/dispatch';
import type { ParsedSlashInput } from '../commands/types';

View file

@ -7,7 +7,7 @@ import {
type Focusable,
getCapabilities,
Spacer,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import type { DeviceAuthorization } from '@moonshot-ai/kimi-code-oauth';
import type {
ApprovalRequest,

View file

@ -8,7 +8,7 @@
* instances reads the *current* palette via the singleton.
*/
import type { MarkdownTheme, EditorTheme } from '@earendil-works/pi-tui';
import type { MarkdownTheme, EditorTheme } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { highlight, supportsLanguage } from 'cli-highlight';

View file

@ -2,7 +2,7 @@ import {
Container,
ProcessTerminal,
TUI,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { FooterComponent } from './components/chrome/footer';
import { GutterContainer } from './components/chrome/gutter-container';

View file

@ -20,7 +20,7 @@
* `tui/components/**` and rejects bare-literal comparisons.
*/
import { decodeKittyPrintable } from '@earendil-works/pi-tui';
import { decodeKittyPrintable } from '@moonshot-ai/pi-tui';
export function printableChar(data: string): string {
return decodeKittyPrintable(data) ?? data;

View file

@ -8,7 +8,7 @@
* everywhere: /, PgUp/PgDn, and search editing.
*/
import { fuzzyFilter, Key, matchesKey } from '@earendil-works/pi-tui';
import { fuzzyFilter, Key, matchesKey } from '@moonshot-ai/pi-tui';
import { pageView, type PageView } from './paging';
import { isPrintableChar, printableChar } from './printable-key';

View file

@ -8,7 +8,7 @@
* visible, framed by `<`/`>` markers.
*/
import { visibleWidth } from '@earendil-works/pi-tui';
import { visibleWidth } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import type { ColorPalette } from '#/tui/theme/colors';

View file

@ -1,4 +1,4 @@
import type { Terminal } from '@earendil-works/pi-tui';
import type { Terminal } from '@moonshot-ai/pi-tui';
import { BEL, ESC, MAX_TERMINAL_NOTIFICATION_MESSAGE_LENGTH, ST } from '#/tui/constant/terminal';
import type { TUIState } from '#/tui/tui-state';

View file

@ -1,4 +1,4 @@
import type { Component } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import type { TranscriptEntry } from '../types';

View file

@ -41,7 +41,7 @@ describe('resolveTargetDeps', () => {
const names = deps.map((d) => d.resolvedName);
expect(names).toContain('@mariozechner/clipboard');
expect(names).toContain('@mariozechner/clipboard-darwin-arm64');
expect(names).toContain('@earendil-works/pi-tui');
expect(names).toContain('@moonshot-ai/pi-tui');
});
it('picks the right clipboard subpackage per target', () => {
@ -58,17 +58,17 @@ describe('resolveTargetDeps', () => {
it('encodes pi-tui native file path per target', () => {
const linuxPiTui = resolveTargetDeps('linux-arm64').find(
(d) => d.resolvedName === '@earendil-works/pi-tui',
(d) => d.resolvedName === '@moonshot-ai/pi-tui',
);
expect(linuxPiTui?.nativeFileRelatives).toEqual([]);
const macPiTui = resolveTargetDeps('darwin-x64').find(
(d) => d.resolvedName === '@earendil-works/pi-tui',
(d) => d.resolvedName === '@moonshot-ai/pi-tui',
);
expect(macPiTui?.nativeFileRelatives).toEqual([
'native/darwin/prebuilds/darwin-x64/darwin-modifiers.node',
]);
const winArmPiTui = resolveTargetDeps('win32-arm64').find(
(d) => d.resolvedName === '@earendil-works/pi-tui',
(d) => d.resolvedName === '@moonshot-ai/pi-tui',
);
expect(winArmPiTui?.nativeFileRelatives).toEqual([
'native/win32/prebuilds/win32-arm64/win32-console-mode.node',

View file

@ -1,6 +1,6 @@
import chalk from 'chalk';
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
import { visibleWidth } from '@earendil-works/pi-tui';
import { visibleWidth } from '@moonshot-ai/pi-tui';
import { BannerComponent } from '#/tui/components/chrome/banner';
import { currentTheme } from '#/tui/theme';

View file

@ -1,4 +1,4 @@
import { visibleWidth } from '@earendil-works/pi-tui';
import { visibleWidth } from '@moonshot-ai/pi-tui';
import { describe, expect, it } from 'vitest';
import { DeviceCodeBoxComponent } from '#/tui/components/chrome/device-code-box';

View file

@ -1,4 +1,4 @@
import type { Component } from '@earendil-works/pi-tui';
import type { Component } from '@moonshot-ai/pi-tui';
import { describe, expect, it, vi } from 'vitest';
import { GutterContainer } from '#/tui/components/chrome/gutter-container';

View file

@ -1,4 +1,4 @@
import type { TUI } from '@earendil-works/pi-tui';
import type { TUI } from '@moonshot-ai/pi-tui';
import { afterEach, describe, expect, it } from 'vitest';
import { MoonLoader } from '#/tui/components/chrome/moon-loader';

View file

@ -1,4 +1,4 @@
import { visibleWidth } from '@earendil-works/pi-tui';
import { visibleWidth } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { afterEach, beforeEach, describe, expect, it } from 'vitest';

View file

@ -1,4 +1,4 @@
import { visibleWidth } from '@earendil-works/pi-tui';
import { visibleWidth } from '@moonshot-ai/pi-tui';
import { describe, expect, it } from 'vitest';
import { ApiKeyInputDialogComponent } from '#/tui/components/dialogs/api-key-input-dialog';

View file

@ -1,4 +1,4 @@
import { CURSOR_MARKER } from '@earendil-works/pi-tui';
import { CURSOR_MARKER } from '@moonshot-ai/pi-tui';
import { describe, expect, it } from 'vitest';
import { ApprovalPanelComponent } from '#/tui/components/dialogs/approval-panel';

View file

@ -1,4 +1,4 @@
import type { Terminal } from '@earendil-works/pi-tui';
import type { Terminal } from '@moonshot-ai/pi-tui';
import { describe, expect, it } from 'vitest';
import {

View file

@ -1,4 +1,4 @@
import { visibleWidth } from '@earendil-works/pi-tui';
import { visibleWidth } from '@moonshot-ai/pi-tui';
import { describe, expect, it, vi } from 'vitest';
import {

View file

@ -1,4 +1,4 @@
import { visibleWidth } from '@earendil-works/pi-tui';
import { visibleWidth } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { beforeAll, describe, expect, it } from 'vitest';

View file

@ -1,4 +1,4 @@
import { visibleWidth } from '@earendil-works/pi-tui';
import { visibleWidth } from '@moonshot-ai/pi-tui';
import { describe, expect, it, vi } from 'vitest';
import {

View file

@ -1,5 +1,5 @@
import type { ModelAlias } from '@moonshot-ai/kimi-code-sdk';
import { visibleWidth } from '@earendil-works/pi-tui';
import { visibleWidth } from '@moonshot-ai/pi-tui';
import { describe, expect, it, vi } from 'vitest';
import { ModelSelectorComponent } from '#/tui/components/dialogs/model-selector';

View file

@ -1,4 +1,4 @@
import { CURSOR_MARKER } from '@earendil-works/pi-tui';
import { CURSOR_MARKER } from '@moonshot-ai/pi-tui';
import chalk from 'chalk';
import { beforeAll, describe, expect, it } from 'vitest';

View file

@ -1,4 +1,4 @@
import { visibleWidth } from '@earendil-works/pi-tui';
import { visibleWidth } from '@moonshot-ai/pi-tui';
import { afterEach, describe, expect, it, vi } from 'vitest';
import { SessionPickerComponent } from '#/tui/components/dialogs/session-picker';

View file

@ -3,7 +3,7 @@ import type {
AutocompleteProvider,
AutocompleteSuggestions,
TUI,
} from '@earendil-works/pi-tui';
} from '@moonshot-ai/pi-tui';
import { describe, expect, it, vi } from 'vitest';
import { CustomEditor } from '#/tui/components/editor/custom-editor';

View file

@ -1,4 +1,4 @@
import { visibleWidth, type SelectItem, type SelectListTheme } from '@earendil-works/pi-tui';
import { visibleWidth, type SelectItem, type SelectListTheme } from '@moonshot-ai/pi-tui';
import { describe, expect, it } from 'vitest';
import { WrappingSelectList } from '#/tui/components/editor/wrapping-select-list';

Some files were not shown because too many files have changed in this diff Show more