theme: update to kimiko-sakura and enable quiet startup; add SYSTEM.md and kimiko-ui extension
This commit is contained in:
68
extensions/kimiko-ui.ts
Normal file
68
extensions/kimiko-ui.ts
Normal file
@@ -0,0 +1,68 @@
|
|||||||
|
import type { ExtensionAPI, Theme, ThemeColor } from "@earendil-works/pi-coding-agent";
|
||||||
|
import { truncateToWidth, visibleWidth } from "@earendil-works/pi-tui";
|
||||||
|
|
||||||
|
const KIMIKO_ART = [
|
||||||
|
"██╗ ██╗██╗███╗ ███╗██╗██╗ ██╗ ██████╗",
|
||||||
|
"██║ ██╔╝██║████╗ ████║██║██║ ██╔╝██╔═══██╗",
|
||||||
|
"█████╔╝ ██║██╔████╔██║██║█████╔╝ ██║ ██║",
|
||||||
|
"██╔═██╗ ██║██║╚██╔╝██║██║██╔═██╗ ██║ ██║",
|
||||||
|
"██║ ██╗██║██║ ╚═╝ ██║██║██║ ██╗╚██████╔╝",
|
||||||
|
"╚═╝ ╚═╝╚═╝╚═╝ ╚═╝╚═╝╚═╝ ╚═╝ ╚═════╝",
|
||||||
|
] as const;
|
||||||
|
|
||||||
|
const ART_COLORS: readonly ThemeColor[] = [
|
||||||
|
"borderAccent",
|
||||||
|
"mdHeading",
|
||||||
|
"accent",
|
||||||
|
"accent",
|
||||||
|
"customMessageLabel",
|
||||||
|
"border",
|
||||||
|
];
|
||||||
|
|
||||||
|
const MIN_ART_WIDTH = Math.max(...KIMIKO_ART.map((line) => visibleWidth(line)));
|
||||||
|
|
||||||
|
function center(line: string, width: number): string {
|
||||||
|
if (width <= 0) return "";
|
||||||
|
|
||||||
|
const clipped = truncateToWidth(line, width, "");
|
||||||
|
const padding = Math.max(0, Math.floor((width - visibleWidth(clipped)) / 2));
|
||||||
|
return `${" ".repeat(padding)}${clipped}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
function renderHeader(theme: Theme, width: number): string[] {
|
||||||
|
const blossom = theme.fg("accent", "✿");
|
||||||
|
|
||||||
|
if (width < MIN_ART_WIDTH) {
|
||||||
|
return [
|
||||||
|
"",
|
||||||
|
center(`${blossom} ${theme.fg("accent", theme.bold("K I M I K O"))} ${blossom}`, width),
|
||||||
|
center(theme.fg("muted", "personal assistant"), width),
|
||||||
|
"",
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
const ornament = theme.fg("dim", "· ── ") + blossom + theme.fg("dim", " ── ·");
|
||||||
|
const art = KIMIKO_ART.map((line, index) =>
|
||||||
|
center(theme.fg(ART_COLORS[index]!, theme.bold(line)), width),
|
||||||
|
);
|
||||||
|
const subtitle =
|
||||||
|
theme.fg("muted", "personal assistant") +
|
||||||
|
theme.fg("dim", " • blooming locally");
|
||||||
|
|
||||||
|
return ["", center(ornament, width), ...art, center(subtitle, width), ""];
|
||||||
|
}
|
||||||
|
|
||||||
|
export default function kimikoUi(pi: ExtensionAPI) {
|
||||||
|
pi.on("session_start", (_event, ctx) => {
|
||||||
|
if (ctx.mode !== "tui") return;
|
||||||
|
|
||||||
|
// Replace Pi's built-in logo and keybinding hints. The separate loaded-resources
|
||||||
|
// section is suppressed by quietStartup in this instance's settings.json.
|
||||||
|
ctx.ui.setHeader((_tui, theme) => ({
|
||||||
|
render(width: number): string[] {
|
||||||
|
return renderHeader(theme, width);
|
||||||
|
},
|
||||||
|
invalidate() {},
|
||||||
|
}));
|
||||||
|
});
|
||||||
|
}
|
||||||
@@ -3,7 +3,8 @@
|
|||||||
"enableInstallTelemetry": false,
|
"enableInstallTelemetry": false,
|
||||||
"packages": [],
|
"packages": [],
|
||||||
"lastChangelogVersion": "0.81.1",
|
"lastChangelogVersion": "0.81.1",
|
||||||
"theme": "dark",
|
"theme": "kimiko-sakura",
|
||||||
|
"quietStartup": true,
|
||||||
"defaultProvider": "omlx",
|
"defaultProvider": "omlx",
|
||||||
"defaultModel": "Ternary-Bonsai-27B-mlx-2bit"
|
"defaultModel": "Ternary-Bonsai-27B-mlx-2bit"
|
||||||
}
|
}
|
||||||
|
|||||||
98
themes/kimiko-sakura.json
Normal file
98
themes/kimiko-sakura.json
Normal file
@@ -0,0 +1,98 @@
|
|||||||
|
{
|
||||||
|
"$schema": "https://raw.githubusercontent.com/earendil-works/pi/main/packages/coding-agent/src/modes/interactive/theme/theme-schema.json",
|
||||||
|
"name": "kimiko-sakura",
|
||||||
|
"vars": {
|
||||||
|
"ink": "#210d1e",
|
||||||
|
"deepPlum": "#2d172a",
|
||||||
|
"plum": "#381d33",
|
||||||
|
"raisedPlum": "#41233a",
|
||||||
|
"softPlum": "#5f3550",
|
||||||
|
"mutedPlum": "#7a4b66",
|
||||||
|
"berry": "#ae3664",
|
||||||
|
"rose": "#ce507d",
|
||||||
|
"hotPink": "#e6679a",
|
||||||
|
"sakura": "#f174a8",
|
||||||
|
"blossom": "#f785b5",
|
||||||
|
"blush": "#fa9dc6",
|
||||||
|
"petal": "#fbb4d5",
|
||||||
|
"palePetal": "#fdc4de",
|
||||||
|
"whitePetal": "#fedeec",
|
||||||
|
"mutedText": "#c99ab3",
|
||||||
|
"lavender": "#d9a7e8",
|
||||||
|
"mint": "#9ed9bc",
|
||||||
|
"aqua": "#9ed9d5",
|
||||||
|
"gold": "#f3c987",
|
||||||
|
"coral": "#ff7185",
|
||||||
|
"selectedBg": "#5f3550",
|
||||||
|
"userMsgBg": "#381d33",
|
||||||
|
"customMsgBg": "#41233a",
|
||||||
|
"toolPendingBg": "#302039",
|
||||||
|
"toolSuccessBg": "#22352f",
|
||||||
|
"toolErrorBg": "#43202c"
|
||||||
|
},
|
||||||
|
"colors": {
|
||||||
|
"accent": "sakura",
|
||||||
|
"border": "rose",
|
||||||
|
"borderAccent": "petal",
|
||||||
|
"borderMuted": "softPlum",
|
||||||
|
"success": "mint",
|
||||||
|
"error": "coral",
|
||||||
|
"warning": "gold",
|
||||||
|
"muted": "mutedText",
|
||||||
|
"dim": "mutedPlum",
|
||||||
|
"text": "whitePetal",
|
||||||
|
"thinkingText": "mutedText",
|
||||||
|
|
||||||
|
"selectedBg": "selectedBg",
|
||||||
|
"userMessageBg": "userMsgBg",
|
||||||
|
"userMessageText": "whitePetal",
|
||||||
|
"customMessageBg": "customMsgBg",
|
||||||
|
"customMessageText": "whitePetal",
|
||||||
|
"customMessageLabel": "blossom",
|
||||||
|
"toolPendingBg": "toolPendingBg",
|
||||||
|
"toolSuccessBg": "toolSuccessBg",
|
||||||
|
"toolErrorBg": "toolErrorBg",
|
||||||
|
"toolTitle": "palePetal",
|
||||||
|
"toolOutput": "mutedText",
|
||||||
|
|
||||||
|
"mdHeading": "petal",
|
||||||
|
"mdLink": "sakura",
|
||||||
|
"mdLinkUrl": "mutedPlum",
|
||||||
|
"mdCode": "blossom",
|
||||||
|
"mdCodeBlock": "palePetal",
|
||||||
|
"mdCodeBlockBorder": "berry",
|
||||||
|
"mdQuote": "mutedText",
|
||||||
|
"mdQuoteBorder": "rose",
|
||||||
|
"mdHr": "softPlum",
|
||||||
|
"mdListBullet": "hotPink",
|
||||||
|
|
||||||
|
"toolDiffAdded": "mint",
|
||||||
|
"toolDiffRemoved": "coral",
|
||||||
|
"toolDiffContext": "mutedText",
|
||||||
|
|
||||||
|
"syntaxComment": "#a77891",
|
||||||
|
"syntaxKeyword": "sakura",
|
||||||
|
"syntaxFunction": "palePetal",
|
||||||
|
"syntaxVariable": "blossom",
|
||||||
|
"syntaxString": "mint",
|
||||||
|
"syntaxNumber": "lavender",
|
||||||
|
"syntaxType": "gold",
|
||||||
|
"syntaxOperator": "blush",
|
||||||
|
"syntaxPunctuation": "mutedText",
|
||||||
|
|
||||||
|
"thinkingOff": "softPlum",
|
||||||
|
"thinkingMinimal": "mutedPlum",
|
||||||
|
"thinkingLow": "berry",
|
||||||
|
"thinkingMedium": "rose",
|
||||||
|
"thinkingHigh": "hotPink",
|
||||||
|
"thinkingXhigh": "blossom",
|
||||||
|
"thinkingMax": "whitePetal",
|
||||||
|
|
||||||
|
"bashMode": "gold"
|
||||||
|
},
|
||||||
|
"export": {
|
||||||
|
"pageBg": "ink",
|
||||||
|
"cardBg": "deepPlum",
|
||||||
|
"infoBg": "raisedPlum"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user