diff --git a/.changeset/bright-orcas-render.md b/.changeset/bright-orcas-render.md new file mode 100644 index 00000000000..fb85782f361 --- /dev/null +++ b/.changeset/bright-orcas-render.md @@ -0,0 +1,5 @@ +--- +"@moonshot-ai/pi-tui": patch +--- + +Recognize Orca terminals that advertise Kitty inline-image support. diff --git a/.changeset/calm-images-display.md b/.changeset/calm-images-display.md new file mode 100644 index 00000000000..af84bdc46bf --- /dev/null +++ b/.changeset/calm-images-display.md @@ -0,0 +1,5 @@ +--- +"@moonshot-ai/kimi-code": patch +--- + +Display inline images when Orca explicitly advertises Kitty graphics support. diff --git a/packages/pi-tui/src/terminal-image.ts b/packages/pi-tui/src/terminal-image.ts index 9a72c493802..c79e22d9162 100644 --- a/packages/pi-tui/src/terminal-image.ts +++ b/packages/pi-tui/src/terminal-image.ts @@ -98,6 +98,12 @@ function detectCapabilitiesFromEnvironment(tmuxForwardsHyperlink: () => boolean) return { images: "kitty", trueColor: true, hyperlinks: true }; } + // Orca advertises Kitty graphics support through ORCA_IMAGE_PROTOCOL. Check it before + // outer-terminal detection because variables like KITTY_WINDOW_ID can leak into its panes. + if (termProgram === "orca" && process.env['ORCA_IMAGE_PROTOCOL'] === "kitty") { + return { images: "kitty", trueColor: true, hyperlinks: true }; + } + if (process.env['KITTY_WINDOW_ID'] || termProgram === "kitty") { return { images: "kitty", trueColor: true, hyperlinks: true }; } diff --git a/packages/pi-tui/test/terminal-image.test.ts b/packages/pi-tui/test/terminal-image.test.ts index 6fd05f43dfc..1554b89221a 100644 --- a/packages/pi-tui/test/terminal-image.test.ts +++ b/packages/pi-tui/test/terminal-image.test.ts @@ -34,6 +34,7 @@ import { visibleWidth } from "../src/utils.ts"; const ENV_KEYS = [ "TERM", "TERM_PROGRAM", + "ORCA_IMAGE_PROTOCOL", "TERMINAL_EMULATOR", "COLORTERM", "TMUX", @@ -343,6 +344,21 @@ describe("detectCapabilities", () => { }); }); + it("keeps images disabled for Orca without an image capability signal", () => { + withEnv({ TERM_PROGRAM: "Orca" }, () => { + assert.strictEqual(detectCapabilities().images, null); + }); + }); + + it("enables images and hyperlinks for Orca advertising Kitty support", () => { + withEnv({ TERM_PROGRAM: "Orca", ORCA_IMAGE_PROTOCOL: "kitty" }, () => { + const caps = detectCapabilities(); + assert.strictEqual(caps.images, "kitty"); + assert.strictEqual(caps.trueColor, true); + assert.strictEqual(caps.hyperlinks, true); + }); + }); + it("enables hyperlinks for Ghostty", () => { withEnv({ TERM_PROGRAM: "ghostty" }, () => { const caps = detectCapabilities();