/
Alex_Ural
/
opencode
Обзор
Документация
Войти
/
Alex_Ural
/
opencode
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
Аналитика
Безопасность
dev
packages/session-ui/src/components/message-file.ts
35 строк
1 KB
Aarav Sareen
feat(app): redesign attachment cards (#35945)
13 июл 2026, 13:04
Не верифицирован
13 июл 2026, 13:04
b4e49d5
Код
Авторство
О чём код?
import { bundledLanguagesInfo } from "shiki" import { getFilename } from "@opencode-ai/core/util/path" import type { FilePart } from "@opencode-ai/sdk/v2" export function attached(part: FilePart) { return part.url.startsWith("data:") } export function inline(part: FilePart) { if (attached(part)) return false return part.source?.text?.start !== undefined && part.source?.text?.end !== undefined } export function kind(part: FilePart) { return part.mime.startsWith("image/") ? "image" : "file" } // language metadata only; grammars stay behind shiki's lazy imports const LANGUAGE_NAMES = new Map<string, string>( bundledLanguagesInfo.flatMap((info) => [info.id, ...(info.aliases ?? [])].map((alias) => [alias, info.name] as [string, string]), ), ) // attachments carry text/plain for all text files, so the label comes from the extension; // filename may be an absolute path, so extract the basename before looking for one export function typeLabel(filename: string, mime: string) { if (mime === "application/pdf") return "PDF" const base = getFilename(filename) // idx 0 is a dotfile like .gitignore, not an extension const idx = base.lastIndexOf(".") const suffix = idx <= 0 ? "" : base.slice(idx + 1).toLowerCase() if (!suffix) return "File" return LANGUAGE_NAMES.get(suffix) ?? suffix.toUpperCase() }