arch-dotfiles/.pi/agent/extensions/clipboard-images.ts

39 lines
1.4 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* Clipboard Image Labels
*
* Adds [Image #N] labels to messages that include pasted images,
* matching the Claude Code / Codex visual style.
*
* Usage:
* - Paste: Ctrl+V (Alt+V on Windows)
* - Drag: drag any image file onto the terminal
*
* When images are detected, [Image #1], [Image #2], … labels are
* appended to the message text so they appear in the conversation
* history and are visible to the LLM alongside the actual image data.
*
* A small notification confirms how many images were attached.
*/
import type { ExtensionAPI } from "@mariozechner/pi-coding-agent";
export default function (pi: ExtensionAPI) {
pi.on("input", async (event, ctx) => {
// Nothing to do when no images are attached
if (!event.images || event.images.length === 0) {
return { action: "continue" };
}
// Build [Image #N] labels one per attached image
const labels = event.images.map((_img, i) => `[Image #${i + 1}]`).join(" ");
// Append labels after any typed text (or use them alone if no text)
const newText = event.text?.trim() ? `${event.text.trim()}\n\n${labels}` : labels;
// Brief confirmation so the user knows the paste registered
const count = event.images.length;
ctx.ui.notify(`📎 ${count} image${count > 1 ? "s" : ""} attached`, "info");
// Transform keeps the original images intact; only the text changes
return { action: "transform", text: newText };
});
}