302e9b45ab
Co-authored-by: Luke Parker <10430890+Hona@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <219766164+opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Aarav Sareen <96787824+arvsrn@users.noreply.github.com> Co-authored-by: Brendan Allan <14191578+Brendonovich@users.noreply.github.com> Co-authored-by: opencode-agent[bot] <opencode-agent[bot]@users.noreply.github.com> Co-authored-by: Aiden Cline <rekram1-node@users.noreply.github.com> Co-authored-by: opencode <opencode@sst.dev> Co-authored-by: Jay <53023+jayair@users.noreply.github.com> Co-authored-by: David Hill <1879069+iamdavidhill@users.noreply.github.com> Co-authored-by: BB84 <110078428+BB-84C@users.noreply.github.com> Co-authored-by: Aiden Cline <aidenpcline@gmail.com> Co-authored-by: Dax <mail@thdxr.com> Co-authored-by: Brendan Allan <git@brendonovich.dev> Co-authored-by: Jay V <air@live.ca> Co-authored-by: Adam <2363879+adamdotdevin@users.noreply.github.com> Co-authored-by: Aiden Cline <63023139+rekram1-node@users.noreply.github.com> Co-authored-by: Dustin Deus <deusdustin@gmail.com> Co-authored-by: Frank <frank@anoma.ly> Co-authored-by: usrnk1 <7547651+usrnk1@users.noreply.github.com> Co-authored-by: Jack <jack@anoma.ly> Co-authored-by: Sebastian <hasta84@gmail.com> Co-authored-by: Jérôme Benoit <jerome.benoit@sap.com> Co-authored-by: Test User <test@test.com> Co-authored-by: Simon Klee <hello@simonklee.dk> Co-authored-by: Rahul A Mistry <149420892+ProdigyRahul@users.noreply.github.com> Co-authored-by: Qiping Li <liqiping1991@gmail.com> Co-authored-by: liqiping <liqiping@msh.team> Co-authored-by: OpeOginni <107570612+OpeOginni@users.noreply.github.com> Co-authored-by: Matthias Reso <13337103+mreso@users.noreply.github.com> Co-authored-by: tobwen <1864057+tobwen@users.noreply.github.com> Co-authored-by: Daniel Polito <danielbpolito@gmail.com> Co-authored-by: opencode <noreply@opencode.ai> Co-authored-by: Devin R Leopold <devin.leopold@gmail.com> Co-authored-by: Zach Bruggeman <mail@bruggie.com> Co-authored-by: Zach Bruggeman <zbruggeman@ramp.com> Co-authored-by: Kit Langton <kit.langton@gmail.com> Co-authored-by: David Siewert <david1gruppenplan@gmail.com> Co-authored-by: Andrei Dziahel <develop7@develop7.info> Co-authored-by: adityachaudhary99 <adityaachaudhary2003@gmail.com> Co-authored-by: Vladimir Glafirov <vglafirov@gitlab.com> Co-authored-by: Matt Carey <mcarey@cloudflare.com>
35 lines
1.3 KiB
TypeScript
35 lines
1.3 KiB
TypeScript
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:") && !inline(part)
|
|
}
|
|
|
|
export function inline(part: FilePart) {
|
|
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()
|
|
}
|