askme-cli
Version:
askme-cli MCP server that collects user's next plan or confirmation through terminal window
86 lines • 2.58 kB
JavaScript
/**
* Detect image MIME type
*/
export function detectImageMimeType(buffer) {
// PNG signature
if (buffer
.subarray(0, 8)
.equals(Buffer.from([0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a]))) {
return "image/png";
}
// JPEG signature
if (buffer.subarray(0, 3).equals(Buffer.from([0xff, 0xd8, 0xff]))) {
return "image/jpeg";
}
// GIF signature
if (buffer.subarray(0, 6).equals(Buffer.from("GIF87a")) ||
buffer.subarray(0, 6).equals(Buffer.from("GIF89a"))) {
return "image/gif";
}
// Default to PNG
return "image/png";
}
/**
* Convert image Buffer to Base64 data URL
*/
export function bufferToBase64DataUrl(buffer, mimeType) {
const base64Data = buffer.toString("base64");
return `data:${mimeType};base64,${base64Data}`;
}
/**
* Generate next image ID
*/
export function generateImageId(existingImages) {
const existingIds = existingImages.map((img) => img.id);
let counter = 1;
while (existingIds.includes(`Image #${counter}`)) {
counter++;
}
return `Image #${counter}`;
}
/**
* Create image attachment object
*/
export function createImageAttachment(buffer, existingImages) {
const mimeType = detectImageMimeType(buffer);
const id = generateImageId(existingImages);
const base64DataUrl = bufferToBase64DataUrl(buffer, mimeType);
return {
id,
data: base64DataUrl, // Use Base64 data URL
mimeType,
size: buffer.length,
placeholder: `[${id}]`,
};
}
/**
* Insert image placeholder in text (auto add space for easy input)
*/
export function insertImagePlaceholder(text, cursorPosition, placeholder) {
const beforeCursor = text.slice(0, cursorPosition);
const afterCursor = text.slice(cursorPosition);
// Add space after placeholder for easy user input
const placeholderWithSpace = placeholder + " ";
const newText = beforeCursor + placeholderWithSpace + afterCursor;
const newCursorPosition = cursorPosition + placeholderWithSpace.length;
return {
newText,
newCursorPosition,
};
}
/**
* Parse image placeholders from text
*/
export function parseImagePlaceholders(text) {
const placeholderRegex = /\[Image #\d+\]/g;
const matches = text.match(placeholderRegex);
return matches || [];
}
/**
* Extract pure Base64 data from Base64 data URL
*/
export function extractBase64FromDataUrl(dataUrl) {
const parts = dataUrl.split(",");
return parts.length > 1 ? parts[1] : dataUrl;
}
//# sourceMappingURL=image.js.map