mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-16 06:02:42 +00:00
Add ctx.ui.theme getter for styling status text with theme colors
- Add theme property to HookUIContext interface - Implement in interactive, RPC, and no-op contexts - Add status-line.ts example hook - Document styling with theme colors in hooks.md
This commit is contained in:
parent
48ca55ab3c
commit
dccdf91b8c
11 changed files with 96 additions and 2 deletions
|
|
@ -14,6 +14,7 @@ import * as path from "node:path";
|
|||
import { fileURLToPath } from "node:url";
|
||||
import { createJiti } from "jiti";
|
||||
import { getAgentDir, isBunBinary } from "../../config.js";
|
||||
import { theme } from "../../modes/interactive/theme/theme.js";
|
||||
import type { ExecOptions } from "../exec.js";
|
||||
import { execCommand } from "../exec.js";
|
||||
import type { HookUIContext } from "../hooks/types.js";
|
||||
|
|
@ -94,6 +95,9 @@ function createNoOpUIContext(): HookUIContext {
|
|||
custom: async () => undefined as never,
|
||||
setEditorText: () => {},
|
||||
getEditorText: () => "",
|
||||
get theme() {
|
||||
return theme;
|
||||
},
|
||||
};
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -1074,7 +1074,12 @@
|
|||
highlighted = escapeHtml(code);
|
||||
}
|
||||
} else {
|
||||
highlighted = escapeHtml(code);
|
||||
// Auto-detect language if not specified
|
||||
try {
|
||||
highlighted = hljs.highlightAuto(code).value;
|
||||
} catch {
|
||||
highlighted = escapeHtml(code);
|
||||
}
|
||||
}
|
||||
return `<pre><code class="hljs">${highlighted}</code></pre>`;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -4,6 +4,7 @@
|
|||
|
||||
import type { AgentMessage } from "@mariozechner/pi-agent-core";
|
||||
import type { Model } from "@mariozechner/pi-ai";
|
||||
import { theme } from "../../modes/interactive/theme/theme.js";
|
||||
import type { ModelRegistry } from "../model-registry.js";
|
||||
import type { SessionManager } from "../session-manager.js";
|
||||
import type { AppendEntryHandler, LoadedHook, SendMessageHandler } from "./loader.js";
|
||||
|
|
@ -43,6 +44,9 @@ const noOpUIContext: HookUIContext = {
|
|||
custom: async () => undefined as never,
|
||||
setEditorText: () => {},
|
||||
getEditorText: () => "",
|
||||
get theme() {
|
||||
return theme;
|
||||
},
|
||||
};
|
||||
|
||||
/**
|
||||
|
|
|
|||
|
|
@ -112,6 +112,16 @@ export interface HookUIContext {
|
|||
* @returns Current editor text
|
||||
*/
|
||||
getEditorText(): string;
|
||||
|
||||
/**
|
||||
* Get the current theme for styling text with ANSI codes.
|
||||
* Use theme.fg() and theme.bg() to style status text.
|
||||
*
|
||||
* @example
|
||||
* const theme = ctx.ui.theme;
|
||||
* ctx.ui.setStatus("my-hook", theme.fg("success", "✓") + " Ready");
|
||||
*/
|
||||
readonly theme: Theme;
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue