pi-fabric 0.94.0 → 0.95.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (31) hide show
  1. package/README.md +1 -0
  2. package/dist/chunks/{chunk-DBLT6J5B.js → chunk-3DUX4PXZ.js} +2 -2
  3. package/dist/chunks/{chunk-7VCPGNDY.js → chunk-CRU563MT.js} +2 -2
  4. package/dist/chunks/{chunk-H6RSDEWW.js → chunk-EY57KW52.js} +5 -5
  5. package/dist/chunks/{chunk-RTXZHKMS.js → chunk-QNMQJNXE.js} +7 -3
  6. package/dist/chunks/chunk-QNMQJNXE.js.map +7 -0
  7. package/dist/chunks/{chunk-7VAZ4N43.js → chunk-V3PIO7QL.js} +2 -2
  8. package/dist/chunks/{chunk-HCBV735P.js → chunk-YYL3APFD.js} +2 -2
  9. package/dist/components/configuration.js +3 -3
  10. package/dist/fabric-runtime-state.js +4 -4
  11. package/dist/index.js +6 -6
  12. package/dist/residency/host.js +4 -4
  13. package/dist/residency/pi-entry.js +4 -4
  14. package/dist/runtime/monty-runtime.js +2 -2
  15. package/dist/ui/conversation.js +1 -1
  16. package/dist/ui/dashboard.js +2 -2
  17. package/dist/ui/highlight.d.ts.map +1 -1
  18. package/dist/ui/languages/bend.d.ts +4 -0
  19. package/dist/ui/languages/bend.d.ts.map +1 -0
  20. package/dist/ui/languages/bend.js +73 -0
  21. package/dist/ui/languages/bend.js.map +7 -0
  22. package/dist/ui/settings.js +2 -2
  23. package/dist/ui/shiki-catalog.d.ts +2 -1
  24. package/dist/ui/shiki-catalog.d.ts.map +1 -1
  25. package/package.json +1 -1
  26. package/dist/chunks/chunk-RTXZHKMS.js.map +0 -7
  27. /package/dist/chunks/{chunk-DBLT6J5B.js.map → chunk-3DUX4PXZ.js.map} +0 -0
  28. /package/dist/chunks/{chunk-7VCPGNDY.js.map → chunk-CRU563MT.js.map} +0 -0
  29. /package/dist/chunks/{chunk-H6RSDEWW.js.map → chunk-EY57KW52.js.map} +0 -0
  30. /package/dist/chunks/{chunk-7VAZ4N43.js.map → chunk-V3PIO7QL.js.map} +0 -0
  31. /package/dist/chunks/{chunk-HCBV735P.js.map → chunk-YYL3APFD.js.map} +0 -0
package/README.md CHANGED
@@ -133,6 +133,7 @@ Fabric includes a live activity surface in Pi:
133
133
  - A compact widget above the chat (like `pi-supervisor`) whose header follows the current phase while its rows show active/completed agents, active actors, and their recent nested tool or code-change activity.
134
134
  - `/fabric` (or `/fabric dashboard`): opens the **Activity** and **Topology** views. The user-facing Pi session appears as **Main**. You can queue or steer participants and inspect the project topology.
135
135
  - `/fabric settings`: mirrors Pi's `/settings` and writes changes to `fabric.json`. TUI hosts get the searchable settings component; RPC hosts get the same nested sections, value/input/model pickers, list editors, and project/global save scopes through native dialog primitives.
136
+ - Code previews automatically highlight `.bend` files using Bend 2 syntax, including laws and proof terms. The grammar loads only when needed, with no Bend installation required.
136
137
  - `Tool display` (`compact` by default, or `full`) is configured under `/fabric settings` → **UI**; compact elevates the declared display intent, hides the outer program, and applies to the current transcript immediately. Pi's tool-expand keybinding (`ctrl+o` by default) expands a compact card to the full transcript.
137
138
 
138
139
  See the [interface & commands reference](docs/interface.md) for every view, keybinding, and slash command.
@@ -28,7 +28,7 @@ import {
28
28
  DEFAULT_FABRIC_CONFIG,
29
29
  MAX_AGENT_TIMEOUT_MS,
30
30
  MIN_AGENT_TIMEOUT_MS
31
- } from "./chunk-H6RSDEWW.js";
31
+ } from "./chunk-EY57KW52.js";
32
32
  import {
33
33
  ownedStat,
34
34
  processAlive
@@ -7539,4 +7539,4 @@ export {
7539
7539
  agentParticipantRecords,
7540
7540
  actorParticipantRecord
7541
7541
  };
7542
- //# sourceMappingURL=chunk-DBLT6J5B.js.map
7542
+ //# sourceMappingURL=chunk-3DUX4PXZ.js.map
@@ -9,7 +9,7 @@ import {
9
9
  agentParticipantRecords,
10
10
  loadModelUsage,
11
11
  useBudgetLedger
12
- } from "./chunk-DBLT6J5B.js";
12
+ } from "./chunk-3DUX4PXZ.js";
13
13
  import {
14
14
  RESIDENT_HOST_FORMAT,
15
15
  residentDeliveryPrefix,
@@ -691,4 +691,4 @@ if (isMain) {
691
691
  export {
692
692
  runResidentHostFromConfigPath
693
693
  };
694
- //# sourceMappingURL=chunk-7VCPGNDY.js.map
694
+ //# sourceMappingURL=chunk-CRU563MT.js.map
@@ -1,11 +1,11 @@
1
- import {
2
- defaultCodePreviewSettings,
3
- normalizeCodePreviewSettings
4
- } from "./chunk-OKOHRXGF.js";
5
1
  import {
6
2
  closeScratch,
7
3
  createScratch
8
4
  } from "./chunk-RAO6TQFP.js";
5
+ import {
6
+ defaultCodePreviewSettings,
7
+ normalizeCodePreviewSettings
8
+ } from "./chunk-OKOHRXGF.js";
9
9
  import {
10
10
  renameAtomic
11
11
  } from "./chunk-KAD7UWT2.js";
@@ -1499,4 +1499,4 @@ export {
1499
1499
  loadFabricConfig,
1500
1500
  saveFabricConfig
1501
1501
  };
1502
- //# sourceMappingURL=chunk-H6RSDEWW.js.map
1502
+ //# sourceMappingURL=chunk-EY57KW52.js.map
@@ -11,7 +11,10 @@ import { createRequire } from "node:module";
11
11
  var require2 = createRequire(import.meta.url);
12
12
  var languages;
13
13
  var themeTypes;
14
- var shikiLanguages = () => languages ??= require2("shiki/langs").bundledLanguages;
14
+ var shikiLanguages = () => languages ??= {
15
+ ...require2("shiki/langs").bundledLanguages,
16
+ bend: () => import("../ui/languages/bend.js")
17
+ };
15
18
  var shikiThemeType = (id) => {
16
19
  themeTypes ??= new Map(require2("shiki/themes").bundledThemesInfo.map((theme) => [theme.id, theme.type]));
17
20
  return themeTypes.get(id);
@@ -195,6 +198,7 @@ var EXTENSION_ALIASES = /* @__PURE__ */ new Map([
195
198
  [".html", "html"],
196
199
  [".htm", "html"],
197
200
  [".py", "python"],
201
+ [".bend", "bend"],
198
202
  [".rs", "rust"],
199
203
  [".go", "go"],
200
204
  [".rb", "ruby"],
@@ -498,7 +502,7 @@ var requestLanguageLoad = (lang, invalidate) => {
498
502
  if (!instance) return;
499
503
  pendingLanguages.add(lang);
500
504
  const generation = highlighterGeneration;
501
- void instance.loadLanguage(lang).then(() => {
505
+ void instance.loadLanguage(shikiLanguages()[lang]).then(() => {
502
506
  if (generation !== highlighterGeneration) return;
503
507
  loadedLanguages.add(lang);
504
508
  const callbacks = languageLoadCallbacks.get(lang);
@@ -783,4 +787,4 @@ export {
783
787
  highlightFileLines,
784
788
  highlightSourceLines
785
789
  };
786
- //# sourceMappingURL=chunk-RTXZHKMS.js.map
790
+ //# sourceMappingURL=chunk-QNMQJNXE.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ui/highlight.ts", "../../src/ui/shiki-catalog.ts", "../../src/ui/shiki-theme.ts", "../../src/ui/shiki-language.ts"],
4
+ "sourcesContent": ["import { readFileSync, statSync } from \"node:fs\";\nimport { basename, extname } from \"node:path\";\nimport { shikiLanguages, shikiThemeType } from \"./shiki-catalog.js\";\nimport type { GrammarState, Highlighter } from \"shiki\";\nimport { resolveShikiTheme, type ShikiThemeVariant } from \"./code-preview.js\";\nimport { resolveShikiThemeObject } from \"./shiki-theme.js\";\nimport { resolveShikiLanguageObjects } from \"./shiki-language.js\";\n\nconst configuredMaxHighlightChars = Number.parseInt(\n process.env.CODE_PREVIEW_MAX_HIGHLIGHT_CHARS ?? \"\",\n 10,\n);\nconst MAX_HIGHLIGHT_CHARS =\n Number.isFinite(configuredMaxHighlightChars) && configuredMaxHighlightChars > 0\n ? configuredMaxHighlightChars\n : 80_000;\nconst configuredFileHighlightMaxSourceChars = Number.parseInt(\n process.env.CODE_PREVIEW_FILE_HIGHLIGHT_MAX_CHARS ?? \"\",\n 10,\n);\n// Files larger than this never enter full-file tokenization; their previews\n// fall back to per-run tokenization. Bounds worst-case background work.\nconst FILE_HIGHLIGHT_MAX_SOURCE_CHARS =\n Number.isFinite(configuredFileHighlightMaxSourceChars) &&\n configuredFileHighlightMaxSourceChars > 0\n ? configuredFileHighlightMaxSourceChars\n : 200_000;\n// One background slice covers ~5-10ms of shiki work on heavy grammars\n// (measured ~106ms for a 1.3k-line TS file), keeping each event-loop tick\n// well under one frame.\nconst FILE_HIGHLIGHT_TICK_LINE_BUDGET = 96;\nconst FILE_HIGHLIGHT_TICK_CHAR_BUDGET = 16_000;\nconst FILE_HIGHLIGHT_ENTRY_LIMIT = 24;\nconst FILE_HIGHLIGHT_CHAR_LIMIT = 4_000_000;\nconst CACHE_LIMIT = 192;\nconst CACHE_CHAR_LIMIT = 4_000_000;\nconst PRELOADED_LANGUAGES = [\n \"bash\",\n \"typescript\",\n \"tsx\",\n \"javascript\",\n \"jsx\",\n \"json\",\n \"markdown\",\n \"yaml\",\n \"toml\",\n \"css\",\n] as const;\n\nconst LANGUAGE_ALIASES = new Map<string, string>([\n [\"sh\", \"bash\"],\n [\"shell\", \"bash\"],\n [\"zsh\", \"bash\"],\n [\"ts\", \"typescript\"],\n [\"js\", \"javascript\"],\n [\"md\", \"markdown\"],\n [\"yml\", \"yaml\"],\n [\"py\", \"python\"],\n [\"rs\", \"rust\"],\n [\"rb\", \"ruby\"],\n [\"cs\", \"csharp\"],\n [\"fs\", \"fsharp\"],\n [\"ps1\", \"powershell\"],\n]);\n\nconst EXACT_BASENAMES = new Map<string, string>([\n [\"dockerfile\", \"dockerfile\"],\n [\"makefile\", \"makefile\"],\n [\"gnumakefile\", \"makefile\"],\n [\"justfile\", \"makefile\"],\n [\"procfile\", \"shellscript\"],\n [\"gemfile\", \"ruby\"],\n [\"rakefile\", \"ruby\"],\n [\"cargo.lock\", \"toml\"],\n [\"package-lock.json\", \"json\"],\n [\"composer.lock\", \"json\"],\n [\"pnpm-lock.yaml\", \"yaml\"],\n [\"pnpm-lock.yml\", \"yaml\"],\n [\"yarn.lock\", \"yaml\"],\n]);\n\nconst EXTENSION_ALIASES = new Map<string, string>([\n [\".ts\", \"typescript\"],\n [\".tsx\", \"tsx\"],\n [\".js\", \"javascript\"],\n [\".jsx\", \"jsx\"],\n [\".mjs\", \"javascript\"],\n [\".cjs\", \"javascript\"],\n [\".json\", \"json\"],\n [\".md\", \"markdown\"],\n [\".markdown\", \"markdown\"],\n [\".yml\", \"yaml\"],\n [\".yaml\", \"yaml\"],\n [\".toml\", \"toml\"],\n [\".sh\", \"bash\"],\n [\".bash\", \"bash\"],\n [\".zsh\", \"bash\"],\n [\".css\", \"css\"],\n [\".html\", \"html\"],\n [\".htm\", \"html\"],\n [\".py\", \"python\"],\n [\".bend\", \"bend\"],\n [\".rs\", \"rust\"],\n [\".go\", \"go\"],\n [\".rb\", \"ruby\"],\n [\".php\", \"php\"],\n [\".sql\", \"sql\"],\n [\".xml\", \"xml\"],\n [\".svg\", \"xml\"],\n [\".vue\", \"vue\"],\n [\".svelte\", \"svelte\"],\n [\".c\", \"c\"],\n [\".h\", \"c\"],\n [\".cpp\", \"cpp\"],\n [\".cc\", \"cpp\"],\n [\".hpp\", \"cpp\"],\n [\".java\", \"java\"],\n [\".kt\", \"kotlin\"],\n [\".swift\", \"swift\"],\n [\".lua\", \"lua\"],\n [\".r\", \"r\"],\n [\".scala\", \"scala\"],\n [\".clj\", \"clojure\"],\n [\".ex\", \"elixir\"],\n [\".exs\", \"elixir\"],\n [\".erl\", \"erlang\"],\n [\".hs\", \"haskell\"],\n [\".ml\", \"ocaml\"],\n [\".fs\", \"fsharp\"],\n [\".fsx\", \"fsharp\"],\n [\".cs\", \"csharp\"],\n [\".ps1\", \"powershell\"],\n [\".graphql\", \"graphql\"],\n [\".prisma\", \"prisma\"],\n [\".dockerfile\", \"dockerfile\"],\n]);\n\nconst LOW_CONTRAST_FALLBACK = \"\\x1b[38;2;139;148;158m\";\n\nlet highlighter: Highlighter | undefined;\nlet readyTheme: string | undefined;\nlet initializingTheme: string | undefined;\nlet initVersion = 0;\nlet highlighterGeneration = 0;\nlet themePreference = \"auto\";\nlet observedVariant: ShikiThemeVariant = \"dark\";\nlet currentTheme = resolveShikiTheme(themePreference, observedVariant);\nlet enabled = true;\nconst loadedLanguages = new Set<string>();\nconst pendingLanguages = new Set<string>();\nconst languageLoadCallbacks = new Map<string, Set<() => void>>();\nconst highlighterReadyCallbacks = new Set<() => void>();\nconst renderCache = new Map<string, { value: string[]; size: number }>();\nlet renderCacheChars = 0;\n\nconst hashString = (value: string): number => {\n let hash = 5381;\n for (let index = 0; index < value.length; index++) {\n hash = ((hash << 5) + hash + value.charCodeAt(index)) | 0;\n }\n return hash;\n};\n\nconst escapeControlChars = (text: string): string =>\n text\n .replace(/\\x1b/g, \"\u241B\")\n .replace(/\\r/g, \"\u240D\")\n .replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f-\\x9f]/g, \"\uFFFD\");\n\nconst normalizeLanguage = (language: string): string => {\n const normalized = language.toLowerCase();\n return LANGUAGE_ALIASES.get(normalized) ?? normalized;\n};\n\ninterface Rgb {\n r: number;\n g: number;\n b: number;\n}\n\nconst ANSI_16_RGB: readonly Rgb[] = [\n { r: 0, g: 0, b: 0 },\n { r: 205, g: 49, b: 49 },\n { r: 13, g: 161, b: 13 },\n { r: 229, g: 165, b: 10 },\n { r: 36, g: 114, b: 200 },\n { r: 188, g: 63, b: 188 },\n { r: 17, g: 168, b: 205 },\n { r: 229, g: 229, b: 229 },\n { r: 102, g: 102, b: 102 },\n { r: 241, g: 76, b: 76 },\n { r: 35, g: 209, b: 139 },\n { r: 245, g: 245, b: 67 },\n { r: 59, g: 142, b: 234 },\n { r: 214, g: 112, b: 214 },\n { r: 41, g: 184, b: 219 },\n { r: 255, g: 255, b: 255 },\n];\n\nexport const ansi256ToRgb = (index: number): Rgb => {\n if (index < 16) return ANSI_16_RGB[Math.max(0, index)] ?? { r: 0, g: 0, b: 0 };\n if (index < 232) {\n const cube = index - 16;\n const channel = (value: number): number => (value === 0 ? 0 : 55 + 40 * value);\n return {\n r: channel(Math.floor(cube / 36)),\n g: channel(Math.floor((cube % 36) / 6)),\n b: channel(cube % 6),\n };\n }\n const gray = 8 + 10 * (Math.min(index, 255) - 232);\n return { r: gray, g: gray, b: gray };\n};\n\nconst parseAnsiBgColor = (sequence: string): Rgb | undefined => {\n const truecolor = sequence.match(/\\x1b\\[4?8;2;(\\d+);(\\d+);(\\d+)m/);\n if (truecolor) {\n return { r: Number(truecolor[1]), g: Number(truecolor[2]), b: Number(truecolor[3]) };\n }\n const indexed = sequence.match(/\\x1b\\[4?8;5;(\\d+)m/);\n if (indexed) return ansi256ToRgb(Number(indexed[1]));\n return undefined;\n};\n\nconst relativeLuminance = ({ r, g, b }: Rgb): number =>\n (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;\n\n/** Minimal structural view of Pi's active theme, as handed to renderers. */\nexport interface PiThemeLike {\n name?: string;\n getBgAnsi?(color: \"userMessageBg\"): string;\n}\n\n/**\n * Classify Pi's active theme as a light or dark variant. Named built-ins are\n * matched directly, custom themes fall back to the luminance of Pi's message\n * background color, and as a last resort COLORFGBG provides a terminal hint.\n */\nexport const classifyPiTheme = (\n theme: PiThemeLike | undefined,\n env: NodeJS.ProcessEnv = process.env,\n): ShikiThemeVariant | undefined => {\n const name = theme?.name?.trim().toLowerCase();\n if (name === \"light\") return \"light\";\n if (name === \"dark\") return \"dark\";\n const background = theme?.getBgAnsi\n ? parseAnsiBgColor(theme.getBgAnsi(\"userMessageBg\"))\n : undefined;\n if (background) return relativeLuminance(background) >= 0.5 ? \"light\" : \"dark\";\n const colorFgBg = env.COLORFGBG;\n if (colorFgBg) {\n const index = colorFgBg\n .split(\";\")\n .map((part) => Number.parseInt(part, 10))\n .filter((part) => Number.isInteger(part) && part >= 0 && part <= 255)\n .at(-1);\n if (index !== undefined) {\n return relativeLuminance(ansi256ToRgb(index)) >= 0.5 ? \"light\" : \"dark\";\n }\n }\n return undefined;\n};\n\nconst syncEffectiveTheme = (preference: string, variant: ShikiThemeVariant): boolean => {\n themePreference = preference;\n observedVariant = variant;\n const effective = resolveShikiTheme(preference, variant);\n if (effective === currentTheme) return false;\n currentTheme = effective;\n renderCache.clear();\n renderCacheChars = 0;\n resetFileHighlighting();\n if (enabled && (highlighter || initializingTheme)) {\n void initHighlighting(effective, true);\n }\n return true;\n};\n\n/**\n * Adopt the variant of the pi theme instance handed to a renderer. When the\n * configured preference follows the variant (\"auto\" or a \"light/dark\" pair),\n * the effective shiki theme swaps as Pi auto-switches.\n */\nexport function observePiTheme(theme: PiThemeLike | undefined): void {\n const variant = classifyPiTheme(theme);\n if (variant) syncEffectiveTheme(themePreference, variant);\n}\n\n/** The shiki theme currently used for rendering (after variant resolution). */\nexport const effectiveShikiTheme = (): string => currentTheme;\n\n/** Whether the effective shiki theme is a light theme. */\nexport const effectiveShikiThemeIsLight = (): boolean =>\n shikiThemeType(currentTheme) === \"light\";\n\n/** Pi's most recently observed theme variant. */\nexport const observedThemeVariant = (): ShikiThemeVariant => observedVariant;\n\n/** Resolve a shiki language id from a file path, or undefined if unsupported. */\nexport function languageFromPath(filePath: string | undefined): string | undefined {\n if (!filePath) return undefined;\n const name = basename(filePath).toLowerCase();\n if (name.startsWith(\".env\")) {\n const candidate = \"dotenv\";\n return candidate in shikiLanguages() ? candidate : undefined;\n }\n if (name === \"dockerfile\" || name.startsWith(\"dockerfile.\")) {\n return \"dockerfile\" in shikiLanguages() ? \"dockerfile\" : undefined;\n }\n const exact = EXACT_BASENAMES.get(name);\n if (exact && exact in shikiLanguages()) return exact;\n const byExt = EXTENSION_ALIASES.get(extname(name));\n return byExt && byExt in shikiLanguages() ? byExt : undefined;\n}\n\n/** Configure highlighting without loading Shiki until the first code preview needs it. */\nexport function configureHighlighting(themePreferenceValue: string, syntaxEnabled = true): void {\n const preference = themePreferenceValue.trim() || \"auto\";\n const wasEnabled = enabled;\n enabled = syntaxEnabled;\n if (!enabled) {\n themePreference = preference;\n currentTheme = resolveShikiTheme(preference, observedVariant);\n initVersion++;\n initializingTheme = undefined;\n highlighter?.dispose();\n highlighter = undefined;\n readyTheme = undefined;\n highlighterGeneration++;\n loadedLanguages.clear();\n pendingLanguages.clear();\n languageLoadCallbacks.clear();\n highlighterReadyCallbacks.clear();\n renderCache.clear();\n renderCacheChars = 0;\n resetFileHighlighting();\n return;\n }\n const themeChanged = syncEffectiveTheme(preference, observedVariant);\n // syncEffectiveTheme already rebuilds eagerly on a real theme swap and\n // highlightCode's requestInit lazily covers a never-initialized highlighter;\n // the only remaining case that needs an explicit init is re-enabling after\n // a disable disposed the highlighter. Rebuilding unconditionally here cost\n // a full 10-grammar shiki init (~80-260ms of main-thread work) on every\n // /fabric settings save even when nothing display-related had changed.\n if (!themeChanged && !wasEnabled && !highlighter && !initializingTheme) {\n void initHighlighting(currentTheme, syntaxEnabled);\n }\n}\n\n/** Initialize (or reinitialize) the shared shiki highlighter. Fire-and-forget safe. */\nexport async function initHighlighting(theme: string, syntaxEnabled = true): Promise<void> {\n currentTheme = theme;\n enabled = syntaxEnabled;\n if (!enabled) return;\n const version = ++initVersion;\n initializingTheme = theme;\n try {\n const { createHighlighter } = await import(\"shiki\");\n // Resolve the theme object from pi-fabric's own module graph and hand\n // createHighlighter the *object*, not a bare id string. Shiki's internal\n // lazy `import(\"@shikijs/themes/<id>)` for string ids cannot be resolved\n // inside Pi's extension host (issue #46); passing the object sidesteps it.\n const themeObject = await resolveShikiThemeObject(theme);\n if (!themeObject) {\n throw new Error(`Unknown shiki theme: ${theme}`);\n }\n const next = await createHighlighter({\n themes: [themeObject],\n langs: await resolveShikiLanguageObjects(PRELOADED_LANGUAGES),\n });\n if (version !== initVersion) {\n next.dispose();\n return;\n }\n highlighter?.dispose();\n highlighter = next;\n resetFileHighlighting();\n readyTheme = theme;\n initializingTheme = undefined;\n highlighterGeneration++;\n loadedLanguages.clear();\n for (const lang of PRELOADED_LANGUAGES) loadedLanguages.add(lang);\n notifyReady();\n } catch (error) {\n if (version !== initVersion) return;\n initializingTheme = undefined;\n console.warn(\"[pi-fabric] Shiki failed to initialize; previews will be plain text.\", error);\n highlighter?.dispose();\n highlighter = undefined;\n readyTheme = undefined;\n highlighterGeneration++;\n loadedLanguages.clear();\n highlighterReadyCallbacks.clear();\n }\n}\n\nconst shouldSkipHighlight = (text: string): boolean => text.length > MAX_HIGHLIGHT_CHARS;\n\nconst ansiFg = (hex: string): string => {\n const clean = hex.replace(/^#/, \"\").slice(0, 6);\n const n = Number.parseInt(clean, 16);\n return Number.isFinite(n)\n ? `\\x1b[38;2;${(n >> 16) & 255};${(n >> 8) & 255};${n & 255}m`\n : \"\";\n};\n\nconst ansiFromToken = (token: { content: string; color?: string; fontStyle?: number }): string => {\n let open = token.color ? ansiFg(token.color) : \"\";\n let close = token.color ? \"\\x1b[39m\" : \"\";\n const fontStyle = token.fontStyle ?? 0;\n if (fontStyle & 2) {\n open += \"\\x1b[1m\";\n close = \"\\x1b[22m\" + close;\n }\n if (fontStyle & 1) {\n open += \"\\x1b[3m\";\n close = \"\\x1b[23m\" + close;\n }\n if (fontStyle & 4) {\n open += \"\\x1b[4m\";\n close = \"\\x1b[24m\" + close;\n }\n return open + escapeControlChars(token.content) + close;\n};\n\nconst isLowContrastFg = (params: string): boolean => {\n if (params === \"30\" || params === \"90\" || params === \"38;5;0\" || params === \"38;5;8\") return true;\n if (!params.startsWith(\"38;2;\")) return false;\n const parts = params.split(\";\").map(Number);\n const r = parts[2];\n const g = parts[3];\n const b = parts[4];\n if (r === undefined || g === undefined || b === undefined) return false;\n if (!Number.isFinite(r) || !Number.isFinite(g) || !Number.isFinite(b)) return false;\n const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;\n return luminance < 72;\n};\n\nconst normalizeContrast = (ansi: string): string => {\n if (shikiThemeType(currentTheme) === \"light\") return ansi;\n return ansi.replace(/\\x1b\\[([0-9;]*)m/g, (seq, params: string) =>\n isLowContrastFg(params) ? LOW_CONTRAST_FALLBACK : seq,\n );\n};\n\nconst cacheRendered = (key: string, value: string[]): void => {\n const size = value.reduce((total, line) => total + line.length, 0);\n renderCache.set(key, { value, size });\n renderCacheChars += size;\n while (renderCache.size > CACHE_LIMIT || renderCacheChars > CACHE_CHAR_LIMIT) {\n const first = renderCache.keys().next().value;\n if (first === undefined) break;\n const cached = renderCache.get(first);\n if (cached) renderCacheChars -= cached.size;\n renderCache.delete(first);\n }\n};\n\nconst requestInit = (invalidate?: () => void): void => {\n if (invalidate) highlighterReadyCallbacks.add(invalidate);\n if (initializingTheme === currentTheme) return;\n void initHighlighting(currentTheme, enabled);\n};\n\nconst notifyReady = (): void => {\n const callbacks = [...highlighterReadyCallbacks];\n highlighterReadyCallbacks.clear();\n for (const callback of callbacks) {\n try {\n callback();\n } catch {\n // A stale invalidate callback is harmless.\n }\n }\n};\n\nconst requestLanguageLoad = (lang: string, invalidate?: () => void): void => {\n if (invalidate) {\n const callbacks = languageLoadCallbacks.get(lang) ?? new Set();\n callbacks.add(invalidate);\n languageLoadCallbacks.set(lang, callbacks);\n }\n if (pendingLanguages.has(lang)) return;\n const instance = highlighter;\n if (!instance) return;\n pendingLanguages.add(lang);\n const generation = highlighterGeneration;\n void instance\n // Pass the catalog loader, not an id: locally supplied grammars are not\n // part of Shiki's built-in language registry.\n .loadLanguage(shikiLanguages()[lang]!)\n .then(() => {\n if (generation !== highlighterGeneration) return;\n loadedLanguages.add(lang);\n const callbacks = languageLoadCallbacks.get(lang);\n languageLoadCallbacks.delete(lang);\n for (const callback of callbacks ?? []) {\n try {\n callback();\n } catch {\n // Stale invalidate; ignore.\n }\n }\n })\n .catch(() => {\n if (generation === highlighterGeneration) languageLoadCallbacks.delete(lang);\n })\n .finally(() => {\n if (generation === highlighterGeneration) pendingLanguages.delete(lang);\n });\n};\n\n/**\n * Highlight `text` as `lang`, returning per-line truecolor ANSI strings that match\n * pi-code-previews' rendering (same shiki theme + token conversion). Returns null\n * when highlighting is disabled, the language is unsupported, the highlighter is\n * not yet ready, or the content is too large. Pass `invalidate` to request a\n * re-render once the highlighter/language becomes ready.\n */\nexport function highlightCode(\n text: string,\n lang: string,\n invalidate?: () => void,\n): string[] | null {\n if (!enabled || !lang || shouldSkipHighlight(text)) return null;\n // A variant flip restarts initialization with the new theme; while it is in\n // flight the old highlighter cannot serve the current theme. Register the\n // invalidate so the preview repaints once the swap completes.\n if (!highlighter || readyTheme !== currentTheme) {\n requestInit(invalidate);\n return null;\n }\n const shikiLang = normalizeLanguage(lang);\n if (!(shikiLang in shikiLanguages())) return null;\n const cacheKey = `${currentTheme}\\0${shikiLang}\\0${text.length}\\0${hashString(text)}`;\n const cached = renderCache.get(cacheKey);\n if (cached) {\n renderCache.delete(cacheKey);\n renderCache.set(cacheKey, cached);\n return cached.value;\n }\n if (!loadedLanguages.has(shikiLang)) {\n requestLanguageLoad(shikiLang, invalidate);\n return null;\n }\n try {\n const tokens = highlighter.codeToTokensBase(text, {\n lang: shikiLang as never,\n theme: currentTheme as never,\n });\n const rendered = tokens.map((line) =>\n normalizeContrast(line.map(ansiFromToken).join(\"\")),\n );\n cacheRendered(cacheKey, rendered);\n return rendered;\n } catch {\n return null;\n }\n}\n\ninterface FileHighlightWaiter {\n to: number;\n invalidate: () => void;\n}\n\ninterface FileHighlightEntry {\n highlighter: Highlighter;\n lang: string;\n // Present only for disk-backed entries; virtual documents omit both.\n mtimeMs?: number;\n size?: number;\n sourceLines: string[];\n lines: string[];\n state: GrammarState | undefined;\n target: number;\n waiters: FileHighlightWaiter[];\n stale: boolean;\n chars: number;\n}\n\nexport interface FileHighlightLine {\n raw: string;\n ansi: string;\n}\n\nconst fileHighlightCache = new Map<string, FileHighlightEntry>();\nlet fileHighlightChars = 0;\nconst fileHighlightQueue: FileHighlightEntry[] = [];\nlet fileHighlightQueueScheduled = false;\n\nconst expandFileLineTabs = (text: string): string => text.replace(/\\t/g, \" \");\n\nconst dropFileHighlightEntry = (key: string, entry: FileHighlightEntry): void => {\n if (fileHighlightCache.get(key) !== entry) return;\n entry.stale = true;\n entry.waiters = [];\n fileHighlightCache.delete(key);\n fileHighlightChars -= entry.chars;\n};\n\nconst evictFileHighlightCache = (): void => {\n while (\n fileHighlightCache.size > FILE_HIGHLIGHT_ENTRY_LIMIT ||\n fileHighlightChars > FILE_HIGHLIGHT_CHAR_LIMIT\n ) {\n const oldestKey = fileHighlightCache.keys().next().value;\n if (oldestKey === undefined) break;\n const oldest = fileHighlightCache.get(oldestKey);\n if (oldest) dropFileHighlightEntry(oldestKey, oldest);\n else fileHighlightCache.delete(oldestKey);\n }\n};\n\nconst resetFileHighlighting = (): void => {\n for (const [, entry] of fileHighlightCache) {\n entry.stale = true;\n entry.waiters = [];\n }\n fileHighlightCache.clear();\n fileHighlightQueue.length = 0;\n fileHighlightChars = 0;\n};\n\nconst fireSatisfiedWaiters = (entry: FileHighlightEntry): void => {\n const covered = entry.lines.length;\n const ready = new Set<() => void>();\n const remaining: FileHighlightWaiter[] = [];\n for (const waiter of entry.waiters) {\n if (waiter.to <= covered) ready.add(waiter.invalidate);\n else remaining.push(waiter);\n }\n entry.waiters = remaining;\n if (ready.size === 0) return;\n queueMicrotask(() => {\n for (const invalidate of ready) {\n try {\n invalidate();\n } catch {\n // A stale invalidate callback is harmless.\n }\n }\n });\n};\n\nconst advanceFileHighlight = (entry: FileHighlightEntry): void => {\n const instance = highlighter;\n if (!instance || readyTheme !== currentTheme || instance !== entry.highlighter) {\n entry.stale = true;\n return;\n }\n const start = entry.lines.length;\n const hardEnd = Math.min(entry.target, entry.sourceLines.length);\n let end = start;\n let chars = 0;\n const maxEnd = Math.min(start + FILE_HIGHLIGHT_TICK_LINE_BUDGET, hardEnd);\n while (end < maxEnd && chars <= FILE_HIGHLIGHT_TICK_CHAR_BUDGET) {\n chars += (entry.sourceLines[end]?.length ?? 0) + 1;\n end++;\n }\n if (end <= start) return;\n try {\n const tokens = instance.codeToTokensBase(entry.sourceLines.slice(start, end).join(\"\\n\"), {\n lang: entry.lang as never,\n theme: currentTheme as never,\n ...(entry.state ? { grammarState: entry.state } : {}),\n });\n const rendered = tokens.map((line) =>\n normalizeContrast(line.map(ansiFromToken).join(\"\")),\n );\n entry.state = instance.getLastGrammarState(tokens as never);\n entry.lines.push(...rendered);\n const delta = rendered.reduce((total, line) => total + line.length, 0);\n entry.chars += delta;\n fileHighlightChars += delta;\n } catch {\n entry.stale = true;\n }\n};\n\nconst pumpFileHighlightQueue = (): void => {\n fileHighlightQueueScheduled = false;\n let entry = fileHighlightQueue.shift();\n while (\n entry !== undefined &&\n (entry.stale ||\n entry.highlighter !== highlighter ||\n entry.lines.length >= Math.min(entry.target, entry.sourceLines.length))\n ) {\n if (entry.waiters.length > 0) fireSatisfiedWaiters(entry);\n entry = fileHighlightQueue.shift();\n }\n if (!entry) return;\n advanceFileHighlight(entry);\n if (!entry.stale) {\n fireSatisfiedWaiters(entry);\n // Coverage only progresses while something on screen waits for it; an\n // entry with no waiters parks so idle state never burns CPU.\n if (entry.waiters.length > 0) fileHighlightQueue.push(entry);\n }\n if (fileHighlightQueue.length > 0) {\n fileHighlightQueueScheduled = true;\n setImmediate(pumpFileHighlightQueue);\n }\n};\n\nconst scheduleFileHighlight = (entry: FileHighlightEntry): void => {\n if (!fileHighlightQueue.includes(entry)) fileHighlightQueue.push(entry);\n if (fileHighlightQueueScheduled) return;\n fileHighlightQueueScheduled = true;\n setImmediate(pumpFileHighlightQueue);\n};\n\n/**\n * Highlight a line range of an on-disk file with full grammar state, returning\n * per-line { raw, ansi } entries for 0-based [from, to). `raw` is the\n * tab-expanded source line so callers can verify the rendered content still\n * matches the file. Returns null while coverage has not reached `to` (or when\n * the file is unusable); passing `invalidate` repaints as soon as the range is\n * covered and pumps bounded background tokenization \u2014 parked shiki\n * GrammarState, one ~5-10ms slice per event-loop tick, work only while\n * waiters exist.\n */\nexport function highlightFileLines(\n filePath: string,\n lang: string,\n from: number,\n to: number,\n invalidate?: () => void,\n): FileHighlightLine[] | null {\n if (!enabled || !lang || !filePath || to <= from || from < 0) return null;\n if (!highlighter || readyTheme !== currentTheme) {\n requestInit(invalidate);\n return null;\n }\n const shikiLang = normalizeLanguage(lang);\n if (!(shikiLang in shikiLanguages())) return null;\n if (!loadedLanguages.has(shikiLang)) {\n requestLanguageLoad(shikiLang, invalidate);\n return null;\n }\n let stat;\n try {\n stat = statSync(filePath);\n } catch {\n return null;\n }\n if (!stat.isFile() || stat.size > FILE_HIGHLIGHT_MAX_SOURCE_CHARS) return null;\n const key = `${currentTheme}\\0${shikiLang}\\0${filePath}`;\n let entry = fileHighlightCache.get(key);\n if (entry && (entry.mtimeMs !== stat.mtimeMs || entry.size !== stat.size)) {\n dropFileHighlightEntry(key, entry);\n entry = undefined;\n }\n if (!entry) {\n let text: string;\n try {\n text = readFileSync(filePath, \"utf8\");\n } catch {\n return null;\n }\n if (text.includes(\"\\0\")) return null;\n const sourceLines = text\n .replace(/\\r\\n?/g, \"\\n\")\n .split(\"\\n\")\n .map(expandFileLineTabs);\n entry = {\n highlighter,\n lang: shikiLang,\n mtimeMs: stat.mtimeMs,\n size: stat.size,\n sourceLines,\n lines: [],\n state: undefined,\n target: 0,\n waiters: [],\n stale: false,\n chars: sourceLines.reduce((total, line) => total + line.length, 0),\n };\n fileHighlightCache.set(key, entry);\n fileHighlightChars += entry.chars;\n evictFileHighlightCache();\n if (entry.stale) {\n // Evicted immediately by the char budget; treat as unusable.\n entry.waiters = [];\n return null;\n }\n } else {\n fileHighlightCache.delete(key);\n fileHighlightCache.set(key, entry);\n }\n return fileHighlightRange(entry, from, to, invalidate);\n}\n\n/**\n * Highlight a line range of an in-memory document with full grammar state.\n * Shares the disk-backed pump, cache, and budgets; the caller supplies the\n * cache identity via `cacheKey` (already namespaced by theme + language) and\n * the tab-expanded source lines. Returns null while coverage has not reached\n * `to`; passing `invalidate` repaints as soon as the range is covered.\n */\nexport function highlightSourceLines(\n cacheKey: string,\n sourceLines: string[],\n lang: string,\n from: number,\n to: number,\n invalidate?: () => void,\n): FileHighlightLine[] | null {\n if (!enabled || !lang || !cacheKey || to <= from || from < 0) return null;\n if (!highlighter || readyTheme !== currentTheme) {\n requestInit(invalidate);\n return null;\n }\n const shikiLang = normalizeLanguage(lang);\n if (!(shikiLang in shikiLanguages())) return null;\n if (!loadedLanguages.has(shikiLang)) {\n requestLanguageLoad(shikiLang, invalidate);\n return null;\n }\n let entry = fileHighlightCache.get(cacheKey);\n if (!entry) {\n entry = {\n highlighter,\n lang: shikiLang,\n sourceLines,\n lines: [],\n state: undefined,\n target: 0,\n waiters: [],\n stale: false,\n chars: sourceLines.reduce((total, line) => total + line.length, 0),\n };\n fileHighlightCache.set(cacheKey, entry);\n fileHighlightChars += entry.chars;\n evictFileHighlightCache();\n if (entry.stale) {\n entry.waiters = [];\n return null;\n }\n } else {\n fileHighlightCache.delete(cacheKey);\n fileHighlightCache.set(cacheKey, entry);\n }\n return fileHighlightRange(entry, from, to, invalidate);\n}\n\nconst fileHighlightRange = (\n entry: FileHighlightEntry,\n from: number,\n to: number,\n invalidate?: () => void,\n): FileHighlightLine[] | null => {\n const total = entry.sourceLines.length;\n if (from >= total) return null;\n const clampedTo = Math.max(Math.min(to, total), Math.min(from, total));\n entry.target = Math.max(entry.target, clampedTo);\n if (invalidate && entry.lines.length < clampedTo) {\n entry.waiters = entry.waiters.filter((waiter) => waiter.invalidate !== invalidate);\n entry.waiters.push({ to: clampedTo, invalidate });\n scheduleFileHighlight(entry);\n }\n // Coverage past EOF: serve the existing lines rather than wait forever on a\n // target that can never be reached.\n if (entry.lines.length < clampedTo) return null;\n const out: FileHighlightLine[] = [];\n for (let index = from; index < Math.min(to, total); index++) {\n out.push({ raw: entry.sourceLines[index] ?? \"\", ansi: entry.lines[index] ?? \"\" });\n }\n return out;\n};\n", "import { createRequire } from \"node:module\";\nimport type { DynamicImportLanguageRegistration } from \"shiki\";\n\n// Render callbacks are synchronous. Resolve optional catalogs on the first\n// preview, not while loading the extension (even metadata has a static graph).\nconst require = createRequire(import.meta.url);\nlet languages: Record<string, DynamicImportLanguageRegistration> | undefined;\nlet themeTypes: Map<string, \"light\" | \"dark\"> | undefined;\n\nexport const shikiLanguages = (): Record<string, DynamicImportLanguageRegistration> =>\n languages ??= {\n ...(require(\"shiki/langs\") as typeof import(\"shiki/langs\")).bundledLanguages,\n bend: () => import(\"./languages/bend.js\"),\n };\n\nexport const shikiThemeType = (id: string): \"light\" | \"dark\" | undefined => {\n themeTypes ??= new Map((require(\"shiki/themes\") as typeof import(\"shiki/themes\")).bundledThemesInfo.map(theme => [theme.id, theme.type]));\n return themeTypes.get(id);\n};\n", "import type { ThemeRegistration } from \"shiki\";\n\n// Theme resolution for issue #46.\n//\n// Pi's extension host cannot resolve shiki's internal lazy\n// `import(\"@shikijs/themes/<id>)` (triggered when createHighlighter is handed\n// a bare theme *id string*), so previews fell back to plain text. We resolve\n// each theme object from pi-fabric's own module graph with static imports and\n// hand createHighlighter the *object*, so shiki never performs that\n// host-fragile subpath import at runtime.\n//\n// Each entry is a static dynamic import so the module is only fetched when a\n// theme is actually selected, and so vitest can intercept it.\n\nconst THEME_IMPORTS = {\n \"andromeeda\": () => import(\"@shikijs/themes/andromeeda\"),\n \"aurora-x\": () => import(\"@shikijs/themes/aurora-x\"),\n \"ayu-dark\": () => import(\"@shikijs/themes/ayu-dark\"),\n \"ayu-light\": () => import(\"@shikijs/themes/ayu-light\"),\n \"ayu-mirage\": () => import(\"@shikijs/themes/ayu-mirage\"),\n \"catppuccin-frappe\": () => import(\"@shikijs/themes/catppuccin-frappe\"),\n \"catppuccin-latte\": () => import(\"@shikijs/themes/catppuccin-latte\"),\n \"catppuccin-macchiato\": () => import(\"@shikijs/themes/catppuccin-macchiato\"),\n \"catppuccin-mocha\": () => import(\"@shikijs/themes/catppuccin-mocha\"),\n \"dark-plus\": () => import(\"@shikijs/themes/dark-plus\"),\n \"dracula\": () => import(\"@shikijs/themes/dracula\"),\n \"dracula-soft\": () => import(\"@shikijs/themes/dracula-soft\"),\n \"everforest-dark\": () => import(\"@shikijs/themes/everforest-dark\"),\n \"everforest-light\": () => import(\"@shikijs/themes/everforest-light\"),\n \"github-dark\": () => import(\"@shikijs/themes/github-dark\"),\n \"github-dark-default\": () => import(\"@shikijs/themes/github-dark-default\"),\n \"github-dark-dimmed\": () => import(\"@shikijs/themes/github-dark-dimmed\"),\n \"github-dark-high-contrast\": () =>\n import(\"@shikijs/themes/github-dark-high-contrast\"),\n \"github-light\": () => import(\"@shikijs/themes/github-light\"),\n \"github-light-default\": () => import(\"@shikijs/themes/github-light-default\"),\n \"github-light-high-contrast\": () =>\n import(\"@shikijs/themes/github-light-high-contrast\"),\n \"gruvbox-dark-hard\": () => import(\"@shikijs/themes/gruvbox-dark-hard\"),\n \"gruvbox-dark-medium\": () => import(\"@shikijs/themes/gruvbox-dark-medium\"),\n \"gruvbox-dark-soft\": () => import(\"@shikijs/themes/gruvbox-dark-soft\"),\n \"gruvbox-light-hard\": () => import(\"@shikijs/themes/gruvbox-light-hard\"),\n \"gruvbox-light-medium\": () => import(\"@shikijs/themes/gruvbox-light-medium\"),\n \"gruvbox-light-soft\": () => import(\"@shikijs/themes/gruvbox-light-soft\"),\n \"horizon\": () => import(\"@shikijs/themes/horizon\"),\n \"horizon-bright\": () => import(\"@shikijs/themes/horizon-bright\"),\n \"houston\": () => import(\"@shikijs/themes/houston\"),\n \"kanagawa-dragon\": () => import(\"@shikijs/themes/kanagawa-dragon\"),\n \"kanagawa-lotus\": () => import(\"@shikijs/themes/kanagawa-lotus\"),\n \"kanagawa-wave\": () => import(\"@shikijs/themes/kanagawa-wave\"),\n \"laserwave\": () => import(\"@shikijs/themes/laserwave\"),\n \"light-plus\": () => import(\"@shikijs/themes/light-plus\"),\n \"material-theme\": () => import(\"@shikijs/themes/material-theme\"),\n \"material-theme-darker\": () => import(\"@shikijs/themes/material-theme-darker\"),\n \"material-theme-lighter\": () => import(\"@shikijs/themes/material-theme-lighter\"),\n \"material-theme-ocean\": () => import(\"@shikijs/themes/material-theme-ocean\"),\n \"material-theme-palenight\": () =>\n import(\"@shikijs/themes/material-theme-palenight\"),\n \"min-dark\": () => import(\"@shikijs/themes/min-dark\"),\n \"min-light\": () => import(\"@shikijs/themes/min-light\"),\n \"monokai\": () => import(\"@shikijs/themes/monokai\"),\n \"night-owl\": () => import(\"@shikijs/themes/night-owl\"),\n \"night-owl-light\": () => import(\"@shikijs/themes/night-owl-light\"),\n \"nord\": () => import(\"@shikijs/themes/nord\"),\n \"one-dark-pro\": () => import(\"@shikijs/themes/one-dark-pro\"),\n \"one-light\": () => import(\"@shikijs/themes/one-light\"),\n \"plastic\": () => import(\"@shikijs/themes/plastic\"),\n \"poimandres\": () => import(\"@shikijs/themes/poimandres\"),\n \"red\": () => import(\"@shikijs/themes/red\"),\n \"rose-pine\": () => import(\"@shikijs/themes/rose-pine\"),\n \"rose-pine-dawn\": () => import(\"@shikijs/themes/rose-pine-dawn\"),\n \"rose-pine-moon\": () => import(\"@shikijs/themes/rose-pine-moon\"),\n \"slack-dark\": () => import(\"@shikijs/themes/slack-dark\"),\n \"slack-ochin\": () => import(\"@shikijs/themes/slack-ochin\"),\n \"snazzy-light\": () => import(\"@shikijs/themes/snazzy-light\"),\n \"solarized-dark\": () => import(\"@shikijs/themes/solarized-dark\"),\n \"solarized-light\": () => import(\"@shikijs/themes/solarized-light\"),\n \"synthwave-84\": () => import(\"@shikijs/themes/synthwave-84\"),\n \"tokyo-night\": () => import(\"@shikijs/themes/tokyo-night\"),\n \"vesper\": () => import(\"@shikijs/themes/vesper\"),\n \"vitesse-black\": () => import(\"@shikijs/themes/vitesse-black\"),\n \"vitesse-dark\": () => import(\"@shikijs/themes/vitesse-dark\"),\n \"vitesse-light\": () => import(\"@shikijs/themes/vitesse-light\"),\n} as const satisfies Record<string, () => Promise<{ default: ThemeRegistration }>>;\n\n/**\n * Resolve a shiki theme id to its loaded theme object. Returns undefined when\n * the id is not a bundled shiki theme, so callers can fall back gracefully.\n */\nexport async function resolveShikiThemeObject(\n themeId: string,\n): Promise<ThemeRegistration | undefined> {\n const loader = THEME_IMPORTS[themeId as keyof typeof THEME_IMPORTS];\n if (!loader) return undefined;\n const mod = await loader();\n return mod.default;\n}\n", "import type { LanguageRegistration } from \"shiki\";\n\n// Resolve bundled language grammars through pi-fabric's dependency graph.\n// Shiki's own lazy imports are not resolvable from Pi's jiti extension host.\nconst LANGUAGE_IMPORTS = {\n bash: () => import(\"@shikijs/langs/shellscript\"),\n typescript: () => import(\"@shikijs/langs/typescript\"),\n tsx: () => import(\"@shikijs/langs/tsx\"),\n javascript: () => import(\"@shikijs/langs/javascript\"),\n jsx: () => import(\"@shikijs/langs/jsx\"),\n json: () => import(\"@shikijs/langs/json\"),\n markdown: () => import(\"@shikijs/langs/markdown\"),\n yaml: () => import(\"@shikijs/langs/yaml\"),\n toml: () => import(\"@shikijs/langs/toml\"),\n css: () => import(\"@shikijs/langs/css\"),\n} as const satisfies Record<\n string,\n () => Promise<{ default: LanguageRegistration[] }>\n>;\n\n/**\n * Resolve the language registrations used during highlighter initialization.\n * Passing objects prevents Shiki from issuing host-fragile lazy imports.\n */\nexport async function resolveShikiLanguageObjects(\n languageIds: readonly string[],\n): Promise<LanguageRegistration[]> {\n const modules = await Promise.all(\n languageIds.map(async (languageId) => {\n const loader = LANGUAGE_IMPORTS[languageId as keyof typeof LANGUAGE_IMPORTS];\n if (!loader) throw new Error(`Unsupported preloaded Shiki language: ${languageId}`);\n return loader();\n }),\n );\n return modules.flatMap((module) => module.default);\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["require"]
7
+ }
@@ -8,7 +8,7 @@ import {
8
8
  observePiTheme,
9
9
  observedThemeVariant,
10
10
  shikiLanguages
11
- } from "./chunk-RTXZHKMS.js";
11
+ } from "./chunk-QNMQJNXE.js";
12
12
  import {
13
13
  countContentLines,
14
14
  countNewlines,
@@ -4236,4 +4236,4 @@ export {
4236
4236
  formatJsonAsYaml,
4237
4237
  formatFabricValue
4238
4238
  };
4239
- //# sourceMappingURL=chunk-7VAZ4N43.js.map
4239
+ //# sourceMappingURL=chunk-V3PIO7QL.js.map
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  writeJsonAtomic
3
- } from "./chunk-H6RSDEWW.js";
3
+ } from "./chunk-EY57KW52.js";
4
4
  import {
5
5
  stableJsonHash
6
6
  } from "./chunk-3YZUQESG.js";
@@ -131,4 +131,4 @@ export {
131
131
  FabricComponentConfiguration,
132
132
  watchComponentConfiguration
133
133
  };
134
- //# sourceMappingURL=chunk-HCBV735P.js.map
134
+ //# sourceMappingURL=chunk-YYL3APFD.js.map
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  FabricComponentConfiguration,
3
3
  watchComponentConfiguration
4
- } from "../chunks/chunk-HCBV735P.js";
5
- import "../chunks/chunk-H6RSDEWW.js";
6
- import "../chunks/chunk-OKOHRXGF.js";
4
+ } from "../chunks/chunk-YYL3APFD.js";
5
+ import "../chunks/chunk-EY57KW52.js";
7
6
  import "../chunks/chunk-RAO6TQFP.js";
7
+ import "../chunks/chunk-OKOHRXGF.js";
8
8
  import "../chunks/chunk-KAD7UWT2.js";
9
9
  import "../chunks/chunk-A4VP7HDF.js";
10
10
  import "../chunks/chunk-MGWQOKBV.js";
@@ -12,7 +12,7 @@ import {
12
12
  componentEntries,
13
13
  validateComponentConfig,
14
14
  watchComponentConfiguration
15
- } from "./chunks/chunk-HCBV735P.js";
15
+ } from "./chunks/chunk-YYL3APFD.js";
16
16
  import {
17
17
  WorkerMemoryProvider
18
18
  } from "./chunks/chunk-EBWMC3OO.js";
@@ -145,7 +145,7 @@ import {
145
145
  snapshotHandoffSession,
146
146
  thinkingTransferPolicy,
147
147
  withInheritedSessionPins
148
- } from "./chunks/chunk-DBLT6J5B.js";
148
+ } from "./chunks/chunk-3DUX4PXZ.js";
149
149
  import {
150
150
  executeFile,
151
151
  processIsAlive,
@@ -179,9 +179,9 @@ import {
179
179
  loadFabricConfig,
180
180
  raceShellHang,
181
181
  trackShellOperations
182
- } from "./chunks/chunk-H6RSDEWW.js";
183
- import "./chunks/chunk-OKOHRXGF.js";
182
+ } from "./chunks/chunk-EY57KW52.js";
184
183
  import "./chunks/chunk-RAO6TQFP.js";
184
+ import "./chunks/chunk-OKOHRXGF.js";
185
185
  import {
186
186
  fabricExecTitleHintCached
187
187
  } from "./chunks/chunk-Q5BMTL6A.js";
package/dist/index.js CHANGED
@@ -31,12 +31,12 @@ import {
31
31
  singleCallProgressLine,
32
32
  spinnerFrame,
33
33
  updateSpinner
34
- } from "./chunks/chunk-7VAZ4N43.js";
34
+ } from "./chunks/chunk-V3PIO7QL.js";
35
35
  import {
36
36
  configureHighlighting,
37
37
  highlightCode,
38
38
  observePiTheme
39
- } from "./chunks/chunk-RTXZHKMS.js";
39
+ } from "./chunks/chunk-QNMQJNXE.js";
40
40
  import {
41
41
  activeStatuses,
42
42
  isActiveStatus,
@@ -210,14 +210,14 @@ import {
210
210
  loadFabricConfig,
211
211
  loadFabricConfigForScope,
212
212
  saveFabricConfig
213
- } from "./chunks/chunk-H6RSDEWW.js";
214
- import {
215
- defaultCodePreviewSettings
216
- } from "./chunks/chunk-OKOHRXGF.js";
213
+ } from "./chunks/chunk-EY57KW52.js";
217
214
  import {
218
215
  closeScratch,
219
216
  createScratch
220
217
  } from "./chunks/chunk-RAO6TQFP.js";
218
+ import {
219
+ defaultCodePreviewSettings
220
+ } from "./chunks/chunk-OKOHRXGF.js";
221
221
  import {
222
222
  compactAtConfiguredThreshold,
223
223
  fabricExecTitleHintCached,
@@ -1,8 +1,8 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  runResidentHostFromConfigPath
4
- } from "../chunks/chunk-7VCPGNDY.js";
5
- import "../chunks/chunk-DBLT6J5B.js";
4
+ } from "../chunks/chunk-CRU563MT.js";
5
+ import "../chunks/chunk-3DUX4PXZ.js";
6
6
  import "../chunks/chunk-7BG5COXB.js";
7
7
  import "../chunks/chunk-VPPIJRNZ.js";
8
8
  import "../chunks/chunk-PM5I335G.js";
@@ -10,9 +10,9 @@ import "../chunks/chunk-TX6E5W7H.js";
10
10
  import "../chunks/chunk-YV2PHCDB.js";
11
11
  import "../chunks/chunk-PXAICAUT.js";
12
12
  import "../chunks/chunk-CGPK5WHX.js";
13
- import "../chunks/chunk-H6RSDEWW.js";
14
- import "../chunks/chunk-OKOHRXGF.js";
13
+ import "../chunks/chunk-EY57KW52.js";
15
14
  import "../chunks/chunk-RAO6TQFP.js";
15
+ import "../chunks/chunk-OKOHRXGF.js";
16
16
  import "../chunks/chunk-Q5BMTL6A.js";
17
17
  import "../chunks/chunk-SZUXWOO7.js";
18
18
  import "../chunks/chunk-KAD7UWT2.js";
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  runResidentHostFromConfigPath
3
- } from "../chunks/chunk-7VCPGNDY.js";
4
- import "../chunks/chunk-DBLT6J5B.js";
3
+ } from "../chunks/chunk-CRU563MT.js";
4
+ import "../chunks/chunk-3DUX4PXZ.js";
5
5
  import "../chunks/chunk-7BG5COXB.js";
6
6
  import "../chunks/chunk-VPPIJRNZ.js";
7
7
  import "../chunks/chunk-PM5I335G.js";
@@ -9,9 +9,9 @@ import "../chunks/chunk-TX6E5W7H.js";
9
9
  import "../chunks/chunk-YV2PHCDB.js";
10
10
  import "../chunks/chunk-PXAICAUT.js";
11
11
  import "../chunks/chunk-CGPK5WHX.js";
12
- import "../chunks/chunk-H6RSDEWW.js";
13
- import "../chunks/chunk-OKOHRXGF.js";
12
+ import "../chunks/chunk-EY57KW52.js";
14
13
  import "../chunks/chunk-RAO6TQFP.js";
14
+ import "../chunks/chunk-OKOHRXGF.js";
15
15
  import "../chunks/chunk-Q5BMTL6A.js";
16
16
  import "../chunks/chunk-SZUXWOO7.js";
17
17
  import "../chunks/chunk-KAD7UWT2.js";
@@ -12,9 +12,9 @@ import {
12
12
  } from "../chunks/chunk-7TB7NXSL.js";
13
13
  import {
14
14
  MAX_EXECUTOR_TIMEOUT_MS
15
- } from "../chunks/chunk-H6RSDEWW.js";
16
- import "../chunks/chunk-OKOHRXGF.js";
15
+ } from "../chunks/chunk-EY57KW52.js";
17
16
  import "../chunks/chunk-RAO6TQFP.js";
17
+ import "../chunks/chunk-OKOHRXGF.js";
18
18
  import "../chunks/chunk-KAD7UWT2.js";
19
19
  import "../chunks/chunk-A4VP7HDF.js";
20
20
  import "../chunks/chunk-MGWQOKBV.js";
@@ -9,7 +9,7 @@ import {
9
9
  } from "../chunks/chunk-5SU3YXBS.js";
10
10
  import {
11
11
  highlightCode
12
- } from "../chunks/chunk-RTXZHKMS.js";
12
+ } from "../chunks/chunk-QNMQJNXE.js";
13
13
  import {
14
14
  isActiveStatus
15
15
  } from "../chunks/chunk-AAHHYDTO.js";
@@ -14,12 +14,12 @@ import {
14
14
  renderBoundedLines,
15
15
  renderCoreToolBody,
16
16
  spinnerFrame
17
- } from "../chunks/chunk-7VAZ4N43.js";
17
+ } from "../chunks/chunk-V3PIO7QL.js";
18
18
  import {
19
19
  highlightCode,
20
20
  highlightFileLines,
21
21
  languageFromPath
22
- } from "../chunks/chunk-RTXZHKMS.js";
22
+ } from "../chunks/chunk-QNMQJNXE.js";
23
23
  import {
24
24
  isActiveStatus,
25
25
  orderAgentsByCreation
@@ -1 +1 @@
1
- {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/ui/highlight.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AAyK9E,UAAU,GAAG;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAqBD,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,GAa5C,CAAC;AAeF,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC;CAC5C;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,WAAW,GAAG,SAAS,EAC9B,MAAK,MAAM,CAAC,UAAwB,KACnC,iBAAiB,GAAG,SAoBtB,CAAC;AAiBF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAGnE;AAED,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,QAAO,MAAsB,CAAC;AAE9D,0DAA0D;AAC1D,eAAO,MAAM,0BAA0B,QAAO,OACJ,CAAC;AAE3C,iDAAiD;AACjD,eAAO,MAAM,oBAAoB,QAAO,iBAAoC,CAAC;AAE7E,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAcjF;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,oBAAoB,EAAE,MAAM,EAAE,aAAa,UAAO,GAAG,IAAI,CAgC9F;AAED,uFAAuF;AACvF,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CzF;AAoHD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,MAAM,EAAE,GAAG,IAAI,CAmCjB;AAsBD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAiID;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,iBAAiB,EAAE,GAAG,IAAI,CA+D5B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EAAE,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,iBAAiB,EAAE,GAAG,IAAI,CAqC5B"}
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../src/ui/highlight.ts"],"names":[],"mappings":"AAIA,OAAO,EAAqB,KAAK,iBAAiB,EAAE,MAAM,mBAAmB,CAAC;AA0K9E,UAAU,GAAG;IACX,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;IACV,CAAC,EAAE,MAAM,CAAC;CACX;AAqBD,eAAO,MAAM,YAAY,GAAI,OAAO,MAAM,KAAG,GAa5C,CAAC;AAeF,4EAA4E;AAC5E,MAAM,WAAW,WAAW;IAC1B,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,CAAC,KAAK,EAAE,eAAe,GAAG,MAAM,CAAC;CAC5C;AAED;;;;GAIG;AACH,eAAO,MAAM,eAAe,GAC1B,OAAO,WAAW,GAAG,SAAS,EAC9B,MAAK,MAAM,CAAC,UAAwB,KACnC,iBAAiB,GAAG,SAoBtB,CAAC;AAiBF;;;;GAIG;AACH,wBAAgB,cAAc,CAAC,KAAK,EAAE,WAAW,GAAG,SAAS,GAAG,IAAI,CAGnE;AAED,+EAA+E;AAC/E,eAAO,MAAM,mBAAmB,QAAO,MAAsB,CAAC;AAE9D,0DAA0D;AAC1D,eAAO,MAAM,0BAA0B,QAAO,OACJ,CAAC;AAE3C,iDAAiD;AACjD,eAAO,MAAM,oBAAoB,QAAO,iBAAoC,CAAC;AAE7E,iFAAiF;AACjF,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,GAAG,MAAM,GAAG,SAAS,CAcjF;AAED,0FAA0F;AAC1F,wBAAgB,qBAAqB,CAAC,oBAAoB,EAAE,MAAM,EAAE,aAAa,UAAO,GAAG,IAAI,CAgC9F;AAED,uFAAuF;AACvF,wBAAsB,gBAAgB,CAAC,KAAK,EAAE,MAAM,EAAE,aAAa,UAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CA4CzF;AAsHD;;;;;;GAMG;AACH,wBAAgB,aAAa,CAC3B,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,MAAM,EAAE,GAAG,IAAI,CAmCjB;AAsBD,MAAM,WAAW,iBAAiB;IAChC,GAAG,EAAE,MAAM,CAAC;IACZ,IAAI,EAAE,MAAM,CAAC;CACd;AAiID;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,iBAAiB,EAAE,GAAG,IAAI,CA+D5B;AAED;;;;;;GAMG;AACH,wBAAgB,oBAAoB,CAClC,QAAQ,EAAE,MAAM,EAChB,WAAW,EAAE,MAAM,EAAE,EACrB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,MAAM,EACZ,EAAE,EAAE,MAAM,EACV,UAAU,CAAC,EAAE,MAAM,IAAI,GACtB,iBAAiB,EAAE,GAAG,IAAI,CAqC5B"}
@@ -0,0 +1,4 @@
1
+ import type { LanguageRegistration } from "shiki";
2
+ declare const _default: LanguageRegistration[];
3
+ export default _default;
4
+ //# sourceMappingURL=bend.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bend.d.ts","sourceRoot":"","sources":["../../../src/ui/languages/bend.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,OAAO,CAAC;;AAwElD,wBAAsB"}
@@ -0,0 +1,73 @@
1
+ // src/ui/languages/bend.ts
2
+ var bend = {
3
+ name: "bend",
4
+ displayName: "Bend",
5
+ scopeName: "source.bend",
6
+ repository: {},
7
+ patterns: [
8
+ { name: "comment.line.number-sign.bend", match: "#.*$" },
9
+ {
10
+ name: "string.quoted.double.bend",
11
+ begin: '"',
12
+ end: '"',
13
+ patterns: [{ name: "constant.character.escape.bend", match: String.raw`\\.` }]
14
+ },
15
+ {
16
+ name: "string.quoted.single.bend",
17
+ begin: "'",
18
+ end: "'|$",
19
+ patterns: [{ name: "constant.character.escape.bend", match: String.raw`\\.` }]
20
+ },
21
+ {
22
+ match: String.raw`\b(def|law)(\s+)([A-Za-z_][\w.]*\??)`,
23
+ captures: {
24
+ 1: { name: "keyword.declaration.bend" },
25
+ 3: { name: "entity.name.function.bend" }
26
+ }
27
+ },
28
+ {
29
+ match: String.raw`\b(type)(\s+)([A-Za-z_][\w.]*)`,
30
+ captures: {
31
+ 1: { name: "keyword.declaration.bend" },
32
+ 3: { name: "entity.name.type.bend" }
33
+ }
34
+ },
35
+ { name: "storage.modifier.bend", match: String.raw`@unsafe\b` },
36
+ { name: "variable.other.hole.bend", match: String.raw`\?[A-Za-z_][\w.]*` },
37
+ {
38
+ name: "keyword.control.bend",
39
+ match: String.raw`\b(?:import|as|is|match|case|do|return|for|exs|where)\b`
40
+ },
41
+ { name: "constant.numeric.quantity.bend", match: String.raw`&[012]\b` },
42
+ {
43
+ name: "constant.numeric.bend",
44
+ match: String.raw`\b(?:0[xX][\da-fA-F_]+|0[bB][01_]+|\d[\d_]*(?:\.\d[\d_]*)?(?:[eE][+-]?\d[\d_]*)?n?)\b`
45
+ },
46
+ {
47
+ name: "support.type.bend",
48
+ match: String.raw`\b(?:Type|Data|Kind|Quant|Nat|U32|F32|Char|String)\b(?!\.)`
49
+ },
50
+ {
51
+ name: "entity.name.function.bend",
52
+ match: String.raw`\b[A-Za-z_][\w.]*\??(?=!?\s*\()`
53
+ },
54
+ {
55
+ name: "constant.other.constructor.bend",
56
+ match: String.raw`\b[A-Za-z_][\w.]*(?=\s*\{)`
57
+ },
58
+ { name: "entity.name.type.bend", match: String.raw`\b[A-Z][\w.]*` },
59
+ {
60
+ name: "keyword.operator.bend",
61
+ match: String.raw`<&>|<>|->|=>|<-|==|!=|<=|>=|<<|>>|&&|\|\||\+\+|\.[&|^]\.|[-+*/%=&|^!~@<>]`
62
+ },
63
+ { name: "punctuation.section.bend", match: String.raw`[()\[\]{}]` },
64
+ { name: "punctuation.separator.bend", match: "[,;:]" },
65
+ // Consume whole dotted names so a suffix such as IO.return is not a keyword.
66
+ { name: "variable.other.readwrite.bend", match: String.raw`\b[A-Za-z_][\w.]*\??` }
67
+ ]
68
+ };
69
+ var bend_default = [bend];
70
+ export {
71
+ bend_default as default
72
+ };
73
+ //# sourceMappingURL=bend.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/ui/languages/bend.ts"],
4
+ "sourcesContent": ["import type { LanguageRegistration } from \"shiki\";\n\n// Bend 2 surface syntax: https://github.com/bendlang/bend/blob/main/guide/GUIDE.md\n// Kept independent of Python/Bend 1: laws, quantities, and proof terms are native.\nconst bend: LanguageRegistration = {\n name: \"bend\",\n displayName: \"Bend\",\n scopeName: \"source.bend\",\n repository: {},\n patterns: [\n { name: \"comment.line.number-sign.bend\", match: \"#.*$\" },\n {\n name: \"string.quoted.double.bend\",\n begin: '\"',\n end: '\"',\n patterns: [{ name: \"constant.character.escape.bend\", match: String.raw`\\\\.` }],\n },\n {\n name: \"string.quoted.single.bend\",\n begin: \"'\",\n end: \"'|$\",\n patterns: [{ name: \"constant.character.escape.bend\", match: String.raw`\\\\.` }],\n },\n {\n match: String.raw`\\b(def|law)(\\s+)([A-Za-z_][\\w.]*\\??)`,\n captures: {\n 1: { name: \"keyword.declaration.bend\" },\n 3: { name: \"entity.name.function.bend\" },\n },\n },\n {\n match: String.raw`\\b(type)(\\s+)([A-Za-z_][\\w.]*)`,\n captures: {\n 1: { name: \"keyword.declaration.bend\" },\n 3: { name: \"entity.name.type.bend\" },\n },\n },\n { name: \"storage.modifier.bend\", match: String.raw`@unsafe\\b` },\n { name: \"variable.other.hole.bend\", match: String.raw`\\?[A-Za-z_][\\w.]*` },\n {\n name: \"keyword.control.bend\",\n match: String.raw`\\b(?:import|as|is|match|case|do|return|for|exs|where)\\b`,\n },\n { name: \"constant.numeric.quantity.bend\", match: String.raw`&[012]\\b` },\n {\n name: \"constant.numeric.bend\",\n match: String.raw`\\b(?:0[xX][\\da-fA-F_]+|0[bB][01_]+|\\d[\\d_]*(?:\\.\\d[\\d_]*)?(?:[eE][+-]?\\d[\\d_]*)?n?)\\b`,\n },\n {\n name: \"support.type.bend\",\n match: String.raw`\\b(?:Type|Data|Kind|Quant|Nat|U32|F32|Char|String)\\b(?!\\.)`,\n },\n {\n name: \"entity.name.function.bend\",\n match: String.raw`\\b[A-Za-z_][\\w.]*\\??(?=!?\\s*\\()`,\n },\n {\n name: \"constant.other.constructor.bend\",\n match: String.raw`\\b[A-Za-z_][\\w.]*(?=\\s*\\{)`,\n },\n { name: \"entity.name.type.bend\", match: String.raw`\\b[A-Z][\\w.]*` },\n {\n name: \"keyword.operator.bend\",\n match: String.raw`<&>|<>|->|=>|<-|==|!=|<=|>=|<<|>>|&&|\\|\\||\\+\\+|\\.[&|^]\\.|[-+*/%=&|^!~@<>]`,\n },\n { name: \"punctuation.section.bend\", match: String.raw`[()\\[\\]{}]` },\n { name: \"punctuation.separator.bend\", match: \"[,;:]\" },\n // Consume whole dotted names so a suffix such as IO.return is not a keyword.\n { name: \"variable.other.readwrite.bend\", match: String.raw`\\b[A-Za-z_][\\w.]*\\??` },\n ],\n};\n\nexport default [bend];\n"],
5
+ "mappings": ";AAIA,IAAM,OAA6B;AAAA,EACjC,MAAM;AAAA,EACN,aAAa;AAAA,EACb,WAAW;AAAA,EACX,YAAY,CAAC;AAAA,EACb,UAAU;AAAA,IACR,EAAE,MAAM,iCAAiC,OAAO,OAAO;AAAA,IACvD;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL,UAAU,CAAC,EAAE,MAAM,kCAAkC,OAAO,OAAO,SAAS,CAAC;AAAA,IAC/E;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO;AAAA,MACP,KAAK;AAAA,MACL,UAAU,CAAC,EAAE,MAAM,kCAAkC,OAAO,OAAO,SAAS,CAAC;AAAA,IAC/E;AAAA,IACA;AAAA,MACE,OAAO,OAAO;AAAA,MACd,UAAU;AAAA,QACR,GAAG,EAAE,MAAM,2BAA2B;AAAA,QACtC,GAAG,EAAE,MAAM,4BAA4B;AAAA,MACzC;AAAA,IACF;AAAA,IACA;AAAA,MACE,OAAO,OAAO;AAAA,MACd,UAAU;AAAA,QACR,GAAG,EAAE,MAAM,2BAA2B;AAAA,QACtC,GAAG,EAAE,MAAM,wBAAwB;AAAA,MACrC;AAAA,IACF;AAAA,IACA,EAAE,MAAM,yBAAyB,OAAO,OAAO,eAAe;AAAA,IAC9D,EAAE,MAAM,4BAA4B,OAAO,OAAO,uBAAuB;AAAA,IACzE;AAAA,MACE,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,IAChB;AAAA,IACA,EAAE,MAAM,kCAAkC,OAAO,OAAO,cAAc;AAAA,IACtE;AAAA,MACE,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,IAChB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,IAChB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,IAChB;AAAA,IACA;AAAA,MACE,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,IAChB;AAAA,IACA,EAAE,MAAM,yBAAyB,OAAO,OAAO,mBAAmB;AAAA,IAClE;AAAA,MACE,MAAM;AAAA,MACN,OAAO,OAAO;AAAA,IAChB;AAAA,IACA,EAAE,MAAM,4BAA4B,OAAO,OAAO,gBAAgB;AAAA,IAClE,EAAE,MAAM,8BAA8B,OAAO,QAAQ;AAAA;AAAA,IAErD,EAAE,MAAM,iCAAiC,OAAO,OAAO,0BAA0B;AAAA,EACnF;AACF;AAEA,IAAO,eAAQ,CAAC,IAAI;",
6
+ "names": []
7
+ }
@@ -28,9 +28,9 @@ import {
28
28
  loadFabricConfigForScope,
29
29
  maxExecutorMemoryLimitBytes,
30
30
  saveFabricConfig
31
- } from "../chunks/chunk-H6RSDEWW.js";
32
- import "../chunks/chunk-OKOHRXGF.js";
31
+ } from "../chunks/chunk-EY57KW52.js";
33
32
  import "../chunks/chunk-RAO6TQFP.js";
33
+ import "../chunks/chunk-OKOHRXGF.js";
34
34
  import "../chunks/chunk-KAD7UWT2.js";
35
35
  import "../chunks/chunk-A4VP7HDF.js";
36
36
  import {
@@ -1,3 +1,4 @@
1
- export declare const shikiLanguages: () => typeof import("shiki/langs")["bundledLanguages"];
1
+ import type { DynamicImportLanguageRegistration } from "shiki";
2
+ export declare const shikiLanguages: () => Record<string, DynamicImportLanguageRegistration>;
2
3
  export declare const shikiThemeType: (id: string) => "light" | "dark" | undefined;
3
4
  //# sourceMappingURL=shiki-catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"shiki-catalog.d.ts","sourceRoot":"","sources":["../../src/ui/shiki-catalog.ts"],"names":[],"mappings":"AAQA,eAAO,MAAM,cAAc,QAAO,cAAc,aAAa,CAAC,CAAC,kBAAkB,CACQ,CAAC;AAE1F,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,OAAO,GAAG,MAAM,GAAG,SAG9D,CAAC"}
1
+ {"version":3,"file":"shiki-catalog.d.ts","sourceRoot":"","sources":["../../src/ui/shiki-catalog.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,iCAAiC,EAAE,MAAM,OAAO,CAAC;AAQ/D,eAAO,MAAM,cAAc,QAAO,MAAM,CAAC,MAAM,EAAE,iCAAiC,CAI/E,CAAC;AAEJ,eAAO,MAAM,cAAc,GAAI,IAAI,MAAM,KAAG,OAAO,GAAG,MAAM,GAAG,SAG9D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-fabric",
3
- "version": "0.94.0",
3
+ "version": "0.95.0",
4
4
  "description": "A programmable tool and agent runtime for Pi",
5
5
  "type": "module",
6
6
  "main": "./dist/index.js",
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../src/ui/highlight.ts", "../../src/ui/shiki-catalog.ts", "../../src/ui/shiki-theme.ts", "../../src/ui/shiki-language.ts"],
4
- "sourcesContent": ["import { readFileSync, statSync } from \"node:fs\";\nimport { basename, extname } from \"node:path\";\nimport { shikiLanguages, shikiThemeType } from \"./shiki-catalog.js\";\nimport type { GrammarState, Highlighter } from \"shiki\";\nimport { resolveShikiTheme, type ShikiThemeVariant } from \"./code-preview.js\";\nimport { resolveShikiThemeObject } from \"./shiki-theme.js\";\nimport { resolveShikiLanguageObjects } from \"./shiki-language.js\";\n\nconst configuredMaxHighlightChars = Number.parseInt(\n process.env.CODE_PREVIEW_MAX_HIGHLIGHT_CHARS ?? \"\",\n 10,\n);\nconst MAX_HIGHLIGHT_CHARS =\n Number.isFinite(configuredMaxHighlightChars) && configuredMaxHighlightChars > 0\n ? configuredMaxHighlightChars\n : 80_000;\nconst configuredFileHighlightMaxSourceChars = Number.parseInt(\n process.env.CODE_PREVIEW_FILE_HIGHLIGHT_MAX_CHARS ?? \"\",\n 10,\n);\n// Files larger than this never enter full-file tokenization; their previews\n// fall back to per-run tokenization. Bounds worst-case background work.\nconst FILE_HIGHLIGHT_MAX_SOURCE_CHARS =\n Number.isFinite(configuredFileHighlightMaxSourceChars) &&\n configuredFileHighlightMaxSourceChars > 0\n ? configuredFileHighlightMaxSourceChars\n : 200_000;\n// One background slice covers ~5-10ms of shiki work on heavy grammars\n// (measured ~106ms for a 1.3k-line TS file), keeping each event-loop tick\n// well under one frame.\nconst FILE_HIGHLIGHT_TICK_LINE_BUDGET = 96;\nconst FILE_HIGHLIGHT_TICK_CHAR_BUDGET = 16_000;\nconst FILE_HIGHLIGHT_ENTRY_LIMIT = 24;\nconst FILE_HIGHLIGHT_CHAR_LIMIT = 4_000_000;\nconst CACHE_LIMIT = 192;\nconst CACHE_CHAR_LIMIT = 4_000_000;\nconst PRELOADED_LANGUAGES = [\n \"bash\",\n \"typescript\",\n \"tsx\",\n \"javascript\",\n \"jsx\",\n \"json\",\n \"markdown\",\n \"yaml\",\n \"toml\",\n \"css\",\n] as const;\n\nconst LANGUAGE_ALIASES = new Map<string, string>([\n [\"sh\", \"bash\"],\n [\"shell\", \"bash\"],\n [\"zsh\", \"bash\"],\n [\"ts\", \"typescript\"],\n [\"js\", \"javascript\"],\n [\"md\", \"markdown\"],\n [\"yml\", \"yaml\"],\n [\"py\", \"python\"],\n [\"rs\", \"rust\"],\n [\"rb\", \"ruby\"],\n [\"cs\", \"csharp\"],\n [\"fs\", \"fsharp\"],\n [\"ps1\", \"powershell\"],\n]);\n\nconst EXACT_BASENAMES = new Map<string, string>([\n [\"dockerfile\", \"dockerfile\"],\n [\"makefile\", \"makefile\"],\n [\"gnumakefile\", \"makefile\"],\n [\"justfile\", \"makefile\"],\n [\"procfile\", \"shellscript\"],\n [\"gemfile\", \"ruby\"],\n [\"rakefile\", \"ruby\"],\n [\"cargo.lock\", \"toml\"],\n [\"package-lock.json\", \"json\"],\n [\"composer.lock\", \"json\"],\n [\"pnpm-lock.yaml\", \"yaml\"],\n [\"pnpm-lock.yml\", \"yaml\"],\n [\"yarn.lock\", \"yaml\"],\n]);\n\nconst EXTENSION_ALIASES = new Map<string, string>([\n [\".ts\", \"typescript\"],\n [\".tsx\", \"tsx\"],\n [\".js\", \"javascript\"],\n [\".jsx\", \"jsx\"],\n [\".mjs\", \"javascript\"],\n [\".cjs\", \"javascript\"],\n [\".json\", \"json\"],\n [\".md\", \"markdown\"],\n [\".markdown\", \"markdown\"],\n [\".yml\", \"yaml\"],\n [\".yaml\", \"yaml\"],\n [\".toml\", \"toml\"],\n [\".sh\", \"bash\"],\n [\".bash\", \"bash\"],\n [\".zsh\", \"bash\"],\n [\".css\", \"css\"],\n [\".html\", \"html\"],\n [\".htm\", \"html\"],\n [\".py\", \"python\"],\n [\".rs\", \"rust\"],\n [\".go\", \"go\"],\n [\".rb\", \"ruby\"],\n [\".php\", \"php\"],\n [\".sql\", \"sql\"],\n [\".xml\", \"xml\"],\n [\".svg\", \"xml\"],\n [\".vue\", \"vue\"],\n [\".svelte\", \"svelte\"],\n [\".c\", \"c\"],\n [\".h\", \"c\"],\n [\".cpp\", \"cpp\"],\n [\".cc\", \"cpp\"],\n [\".hpp\", \"cpp\"],\n [\".java\", \"java\"],\n [\".kt\", \"kotlin\"],\n [\".swift\", \"swift\"],\n [\".lua\", \"lua\"],\n [\".r\", \"r\"],\n [\".scala\", \"scala\"],\n [\".clj\", \"clojure\"],\n [\".ex\", \"elixir\"],\n [\".exs\", \"elixir\"],\n [\".erl\", \"erlang\"],\n [\".hs\", \"haskell\"],\n [\".ml\", \"ocaml\"],\n [\".fs\", \"fsharp\"],\n [\".fsx\", \"fsharp\"],\n [\".cs\", \"csharp\"],\n [\".ps1\", \"powershell\"],\n [\".graphql\", \"graphql\"],\n [\".prisma\", \"prisma\"],\n [\".dockerfile\", \"dockerfile\"],\n]);\n\nconst LOW_CONTRAST_FALLBACK = \"\\x1b[38;2;139;148;158m\";\n\nlet highlighter: Highlighter | undefined;\nlet readyTheme: string | undefined;\nlet initializingTheme: string | undefined;\nlet initVersion = 0;\nlet highlighterGeneration = 0;\nlet themePreference = \"auto\";\nlet observedVariant: ShikiThemeVariant = \"dark\";\nlet currentTheme = resolveShikiTheme(themePreference, observedVariant);\nlet enabled = true;\nconst loadedLanguages = new Set<string>();\nconst pendingLanguages = new Set<string>();\nconst languageLoadCallbacks = new Map<string, Set<() => void>>();\nconst highlighterReadyCallbacks = new Set<() => void>();\nconst renderCache = new Map<string, { value: string[]; size: number }>();\nlet renderCacheChars = 0;\n\nconst hashString = (value: string): number => {\n let hash = 5381;\n for (let index = 0; index < value.length; index++) {\n hash = ((hash << 5) + hash + value.charCodeAt(index)) | 0;\n }\n return hash;\n};\n\nconst escapeControlChars = (text: string): string =>\n text\n .replace(/\\x1b/g, \"\u241B\")\n .replace(/\\r/g, \"\u240D\")\n .replace(/[\\x00-\\x08\\x0b\\x0c\\x0e-\\x1f\\x7f-\\x9f]/g, \"\uFFFD\");\n\nconst normalizeLanguage = (language: string): string => {\n const normalized = language.toLowerCase();\n return LANGUAGE_ALIASES.get(normalized) ?? normalized;\n};\n\ninterface Rgb {\n r: number;\n g: number;\n b: number;\n}\n\nconst ANSI_16_RGB: readonly Rgb[] = [\n { r: 0, g: 0, b: 0 },\n { r: 205, g: 49, b: 49 },\n { r: 13, g: 161, b: 13 },\n { r: 229, g: 165, b: 10 },\n { r: 36, g: 114, b: 200 },\n { r: 188, g: 63, b: 188 },\n { r: 17, g: 168, b: 205 },\n { r: 229, g: 229, b: 229 },\n { r: 102, g: 102, b: 102 },\n { r: 241, g: 76, b: 76 },\n { r: 35, g: 209, b: 139 },\n { r: 245, g: 245, b: 67 },\n { r: 59, g: 142, b: 234 },\n { r: 214, g: 112, b: 214 },\n { r: 41, g: 184, b: 219 },\n { r: 255, g: 255, b: 255 },\n];\n\nexport const ansi256ToRgb = (index: number): Rgb => {\n if (index < 16) return ANSI_16_RGB[Math.max(0, index)] ?? { r: 0, g: 0, b: 0 };\n if (index < 232) {\n const cube = index - 16;\n const channel = (value: number): number => (value === 0 ? 0 : 55 + 40 * value);\n return {\n r: channel(Math.floor(cube / 36)),\n g: channel(Math.floor((cube % 36) / 6)),\n b: channel(cube % 6),\n };\n }\n const gray = 8 + 10 * (Math.min(index, 255) - 232);\n return { r: gray, g: gray, b: gray };\n};\n\nconst parseAnsiBgColor = (sequence: string): Rgb | undefined => {\n const truecolor = sequence.match(/\\x1b\\[4?8;2;(\\d+);(\\d+);(\\d+)m/);\n if (truecolor) {\n return { r: Number(truecolor[1]), g: Number(truecolor[2]), b: Number(truecolor[3]) };\n }\n const indexed = sequence.match(/\\x1b\\[4?8;5;(\\d+)m/);\n if (indexed) return ansi256ToRgb(Number(indexed[1]));\n return undefined;\n};\n\nconst relativeLuminance = ({ r, g, b }: Rgb): number =>\n (0.2126 * r + 0.7152 * g + 0.0722 * b) / 255;\n\n/** Minimal structural view of Pi's active theme, as handed to renderers. */\nexport interface PiThemeLike {\n name?: string;\n getBgAnsi?(color: \"userMessageBg\"): string;\n}\n\n/**\n * Classify Pi's active theme as a light or dark variant. Named built-ins are\n * matched directly, custom themes fall back to the luminance of Pi's message\n * background color, and as a last resort COLORFGBG provides a terminal hint.\n */\nexport const classifyPiTheme = (\n theme: PiThemeLike | undefined,\n env: NodeJS.ProcessEnv = process.env,\n): ShikiThemeVariant | undefined => {\n const name = theme?.name?.trim().toLowerCase();\n if (name === \"light\") return \"light\";\n if (name === \"dark\") return \"dark\";\n const background = theme?.getBgAnsi\n ? parseAnsiBgColor(theme.getBgAnsi(\"userMessageBg\"))\n : undefined;\n if (background) return relativeLuminance(background) >= 0.5 ? \"light\" : \"dark\";\n const colorFgBg = env.COLORFGBG;\n if (colorFgBg) {\n const index = colorFgBg\n .split(\";\")\n .map((part) => Number.parseInt(part, 10))\n .filter((part) => Number.isInteger(part) && part >= 0 && part <= 255)\n .at(-1);\n if (index !== undefined) {\n return relativeLuminance(ansi256ToRgb(index)) >= 0.5 ? \"light\" : \"dark\";\n }\n }\n return undefined;\n};\n\nconst syncEffectiveTheme = (preference: string, variant: ShikiThemeVariant): boolean => {\n themePreference = preference;\n observedVariant = variant;\n const effective = resolveShikiTheme(preference, variant);\n if (effective === currentTheme) return false;\n currentTheme = effective;\n renderCache.clear();\n renderCacheChars = 0;\n resetFileHighlighting();\n if (enabled && (highlighter || initializingTheme)) {\n void initHighlighting(effective, true);\n }\n return true;\n};\n\n/**\n * Adopt the variant of the pi theme instance handed to a renderer. When the\n * configured preference follows the variant (\"auto\" or a \"light/dark\" pair),\n * the effective shiki theme swaps as Pi auto-switches.\n */\nexport function observePiTheme(theme: PiThemeLike | undefined): void {\n const variant = classifyPiTheme(theme);\n if (variant) syncEffectiveTheme(themePreference, variant);\n}\n\n/** The shiki theme currently used for rendering (after variant resolution). */\nexport const effectiveShikiTheme = (): string => currentTheme;\n\n/** Whether the effective shiki theme is a light theme. */\nexport const effectiveShikiThemeIsLight = (): boolean =>\n shikiThemeType(currentTheme) === \"light\";\n\n/** Pi's most recently observed theme variant. */\nexport const observedThemeVariant = (): ShikiThemeVariant => observedVariant;\n\n/** Resolve a shiki language id from a file path, or undefined if unsupported. */\nexport function languageFromPath(filePath: string | undefined): string | undefined {\n if (!filePath) return undefined;\n const name = basename(filePath).toLowerCase();\n if (name.startsWith(\".env\")) {\n const candidate = \"dotenv\";\n return candidate in shikiLanguages() ? candidate : undefined;\n }\n if (name === \"dockerfile\" || name.startsWith(\"dockerfile.\")) {\n return \"dockerfile\" in shikiLanguages() ? \"dockerfile\" : undefined;\n }\n const exact = EXACT_BASENAMES.get(name);\n if (exact && exact in shikiLanguages()) return exact;\n const byExt = EXTENSION_ALIASES.get(extname(name));\n return byExt && byExt in shikiLanguages() ? byExt : undefined;\n}\n\n/** Configure highlighting without loading Shiki until the first code preview needs it. */\nexport function configureHighlighting(themePreferenceValue: string, syntaxEnabled = true): void {\n const preference = themePreferenceValue.trim() || \"auto\";\n const wasEnabled = enabled;\n enabled = syntaxEnabled;\n if (!enabled) {\n themePreference = preference;\n currentTheme = resolveShikiTheme(preference, observedVariant);\n initVersion++;\n initializingTheme = undefined;\n highlighter?.dispose();\n highlighter = undefined;\n readyTheme = undefined;\n highlighterGeneration++;\n loadedLanguages.clear();\n pendingLanguages.clear();\n languageLoadCallbacks.clear();\n highlighterReadyCallbacks.clear();\n renderCache.clear();\n renderCacheChars = 0;\n resetFileHighlighting();\n return;\n }\n const themeChanged = syncEffectiveTheme(preference, observedVariant);\n // syncEffectiveTheme already rebuilds eagerly on a real theme swap and\n // highlightCode's requestInit lazily covers a never-initialized highlighter;\n // the only remaining case that needs an explicit init is re-enabling after\n // a disable disposed the highlighter. Rebuilding unconditionally here cost\n // a full 10-grammar shiki init (~80-260ms of main-thread work) on every\n // /fabric settings save even when nothing display-related had changed.\n if (!themeChanged && !wasEnabled && !highlighter && !initializingTheme) {\n void initHighlighting(currentTheme, syntaxEnabled);\n }\n}\n\n/** Initialize (or reinitialize) the shared shiki highlighter. Fire-and-forget safe. */\nexport async function initHighlighting(theme: string, syntaxEnabled = true): Promise<void> {\n currentTheme = theme;\n enabled = syntaxEnabled;\n if (!enabled) return;\n const version = ++initVersion;\n initializingTheme = theme;\n try {\n const { createHighlighter } = await import(\"shiki\");\n // Resolve the theme object from pi-fabric's own module graph and hand\n // createHighlighter the *object*, not a bare id string. Shiki's internal\n // lazy `import(\"@shikijs/themes/<id>)` for string ids cannot be resolved\n // inside Pi's extension host (issue #46); passing the object sidesteps it.\n const themeObject = await resolveShikiThemeObject(theme);\n if (!themeObject) {\n throw new Error(`Unknown shiki theme: ${theme}`);\n }\n const next = await createHighlighter({\n themes: [themeObject],\n langs: await resolveShikiLanguageObjects(PRELOADED_LANGUAGES),\n });\n if (version !== initVersion) {\n next.dispose();\n return;\n }\n highlighter?.dispose();\n highlighter = next;\n resetFileHighlighting();\n readyTheme = theme;\n initializingTheme = undefined;\n highlighterGeneration++;\n loadedLanguages.clear();\n for (const lang of PRELOADED_LANGUAGES) loadedLanguages.add(lang);\n notifyReady();\n } catch (error) {\n if (version !== initVersion) return;\n initializingTheme = undefined;\n console.warn(\"[pi-fabric] Shiki failed to initialize; previews will be plain text.\", error);\n highlighter?.dispose();\n highlighter = undefined;\n readyTheme = undefined;\n highlighterGeneration++;\n loadedLanguages.clear();\n highlighterReadyCallbacks.clear();\n }\n}\n\nconst shouldSkipHighlight = (text: string): boolean => text.length > MAX_HIGHLIGHT_CHARS;\n\nconst ansiFg = (hex: string): string => {\n const clean = hex.replace(/^#/, \"\").slice(0, 6);\n const n = Number.parseInt(clean, 16);\n return Number.isFinite(n)\n ? `\\x1b[38;2;${(n >> 16) & 255};${(n >> 8) & 255};${n & 255}m`\n : \"\";\n};\n\nconst ansiFromToken = (token: { content: string; color?: string; fontStyle?: number }): string => {\n let open = token.color ? ansiFg(token.color) : \"\";\n let close = token.color ? \"\\x1b[39m\" : \"\";\n const fontStyle = token.fontStyle ?? 0;\n if (fontStyle & 2) {\n open += \"\\x1b[1m\";\n close = \"\\x1b[22m\" + close;\n }\n if (fontStyle & 1) {\n open += \"\\x1b[3m\";\n close = \"\\x1b[23m\" + close;\n }\n if (fontStyle & 4) {\n open += \"\\x1b[4m\";\n close = \"\\x1b[24m\" + close;\n }\n return open + escapeControlChars(token.content) + close;\n};\n\nconst isLowContrastFg = (params: string): boolean => {\n if (params === \"30\" || params === \"90\" || params === \"38;5;0\" || params === \"38;5;8\") return true;\n if (!params.startsWith(\"38;2;\")) return false;\n const parts = params.split(\";\").map(Number);\n const r = parts[2];\n const g = parts[3];\n const b = parts[4];\n if (r === undefined || g === undefined || b === undefined) return false;\n if (!Number.isFinite(r) || !Number.isFinite(g) || !Number.isFinite(b)) return false;\n const luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;\n return luminance < 72;\n};\n\nconst normalizeContrast = (ansi: string): string => {\n if (shikiThemeType(currentTheme) === \"light\") return ansi;\n return ansi.replace(/\\x1b\\[([0-9;]*)m/g, (seq, params: string) =>\n isLowContrastFg(params) ? LOW_CONTRAST_FALLBACK : seq,\n );\n};\n\nconst cacheRendered = (key: string, value: string[]): void => {\n const size = value.reduce((total, line) => total + line.length, 0);\n renderCache.set(key, { value, size });\n renderCacheChars += size;\n while (renderCache.size > CACHE_LIMIT || renderCacheChars > CACHE_CHAR_LIMIT) {\n const first = renderCache.keys().next().value;\n if (first === undefined) break;\n const cached = renderCache.get(first);\n if (cached) renderCacheChars -= cached.size;\n renderCache.delete(first);\n }\n};\n\nconst requestInit = (invalidate?: () => void): void => {\n if (invalidate) highlighterReadyCallbacks.add(invalidate);\n if (initializingTheme === currentTheme) return;\n void initHighlighting(currentTheme, enabled);\n};\n\nconst notifyReady = (): void => {\n const callbacks = [...highlighterReadyCallbacks];\n highlighterReadyCallbacks.clear();\n for (const callback of callbacks) {\n try {\n callback();\n } catch {\n // A stale invalidate callback is harmless.\n }\n }\n};\n\nconst requestLanguageLoad = (lang: string, invalidate?: () => void): void => {\n if (invalidate) {\n const callbacks = languageLoadCallbacks.get(lang) ?? new Set();\n callbacks.add(invalidate);\n languageLoadCallbacks.set(lang, callbacks);\n }\n if (pendingLanguages.has(lang)) return;\n const instance = highlighter;\n if (!instance) return;\n pendingLanguages.add(lang);\n const generation = highlighterGeneration;\n void instance\n .loadLanguage(lang as never)\n .then(() => {\n if (generation !== highlighterGeneration) return;\n loadedLanguages.add(lang);\n const callbacks = languageLoadCallbacks.get(lang);\n languageLoadCallbacks.delete(lang);\n for (const callback of callbacks ?? []) {\n try {\n callback();\n } catch {\n // Stale invalidate; ignore.\n }\n }\n })\n .catch(() => {\n if (generation === highlighterGeneration) languageLoadCallbacks.delete(lang);\n })\n .finally(() => {\n if (generation === highlighterGeneration) pendingLanguages.delete(lang);\n });\n};\n\n/**\n * Highlight `text` as `lang`, returning per-line truecolor ANSI strings that match\n * pi-code-previews' rendering (same shiki theme + token conversion). Returns null\n * when highlighting is disabled, the language is unsupported, the highlighter is\n * not yet ready, or the content is too large. Pass `invalidate` to request a\n * re-render once the highlighter/language becomes ready.\n */\nexport function highlightCode(\n text: string,\n lang: string,\n invalidate?: () => void,\n): string[] | null {\n if (!enabled || !lang || shouldSkipHighlight(text)) return null;\n // A variant flip restarts initialization with the new theme; while it is in\n // flight the old highlighter cannot serve the current theme. Register the\n // invalidate so the preview repaints once the swap completes.\n if (!highlighter || readyTheme !== currentTheme) {\n requestInit(invalidate);\n return null;\n }\n const shikiLang = normalizeLanguage(lang);\n if (!(shikiLang in shikiLanguages())) return null;\n const cacheKey = `${currentTheme}\\0${shikiLang}\\0${text.length}\\0${hashString(text)}`;\n const cached = renderCache.get(cacheKey);\n if (cached) {\n renderCache.delete(cacheKey);\n renderCache.set(cacheKey, cached);\n return cached.value;\n }\n if (!loadedLanguages.has(shikiLang)) {\n requestLanguageLoad(shikiLang, invalidate);\n return null;\n }\n try {\n const tokens = highlighter.codeToTokensBase(text, {\n lang: shikiLang as never,\n theme: currentTheme as never,\n });\n const rendered = tokens.map((line) =>\n normalizeContrast(line.map(ansiFromToken).join(\"\")),\n );\n cacheRendered(cacheKey, rendered);\n return rendered;\n } catch {\n return null;\n }\n}\n\ninterface FileHighlightWaiter {\n to: number;\n invalidate: () => void;\n}\n\ninterface FileHighlightEntry {\n highlighter: Highlighter;\n lang: string;\n // Present only for disk-backed entries; virtual documents omit both.\n mtimeMs?: number;\n size?: number;\n sourceLines: string[];\n lines: string[];\n state: GrammarState | undefined;\n target: number;\n waiters: FileHighlightWaiter[];\n stale: boolean;\n chars: number;\n}\n\nexport interface FileHighlightLine {\n raw: string;\n ansi: string;\n}\n\nconst fileHighlightCache = new Map<string, FileHighlightEntry>();\nlet fileHighlightChars = 0;\nconst fileHighlightQueue: FileHighlightEntry[] = [];\nlet fileHighlightQueueScheduled = false;\n\nconst expandFileLineTabs = (text: string): string => text.replace(/\\t/g, \" \");\n\nconst dropFileHighlightEntry = (key: string, entry: FileHighlightEntry): void => {\n if (fileHighlightCache.get(key) !== entry) return;\n entry.stale = true;\n entry.waiters = [];\n fileHighlightCache.delete(key);\n fileHighlightChars -= entry.chars;\n};\n\nconst evictFileHighlightCache = (): void => {\n while (\n fileHighlightCache.size > FILE_HIGHLIGHT_ENTRY_LIMIT ||\n fileHighlightChars > FILE_HIGHLIGHT_CHAR_LIMIT\n ) {\n const oldestKey = fileHighlightCache.keys().next().value;\n if (oldestKey === undefined) break;\n const oldest = fileHighlightCache.get(oldestKey);\n if (oldest) dropFileHighlightEntry(oldestKey, oldest);\n else fileHighlightCache.delete(oldestKey);\n }\n};\n\nconst resetFileHighlighting = (): void => {\n for (const [, entry] of fileHighlightCache) {\n entry.stale = true;\n entry.waiters = [];\n }\n fileHighlightCache.clear();\n fileHighlightQueue.length = 0;\n fileHighlightChars = 0;\n};\n\nconst fireSatisfiedWaiters = (entry: FileHighlightEntry): void => {\n const covered = entry.lines.length;\n const ready = new Set<() => void>();\n const remaining: FileHighlightWaiter[] = [];\n for (const waiter of entry.waiters) {\n if (waiter.to <= covered) ready.add(waiter.invalidate);\n else remaining.push(waiter);\n }\n entry.waiters = remaining;\n if (ready.size === 0) return;\n queueMicrotask(() => {\n for (const invalidate of ready) {\n try {\n invalidate();\n } catch {\n // A stale invalidate callback is harmless.\n }\n }\n });\n};\n\nconst advanceFileHighlight = (entry: FileHighlightEntry): void => {\n const instance = highlighter;\n if (!instance || readyTheme !== currentTheme || instance !== entry.highlighter) {\n entry.stale = true;\n return;\n }\n const start = entry.lines.length;\n const hardEnd = Math.min(entry.target, entry.sourceLines.length);\n let end = start;\n let chars = 0;\n const maxEnd = Math.min(start + FILE_HIGHLIGHT_TICK_LINE_BUDGET, hardEnd);\n while (end < maxEnd && chars <= FILE_HIGHLIGHT_TICK_CHAR_BUDGET) {\n chars += (entry.sourceLines[end]?.length ?? 0) + 1;\n end++;\n }\n if (end <= start) return;\n try {\n const tokens = instance.codeToTokensBase(entry.sourceLines.slice(start, end).join(\"\\n\"), {\n lang: entry.lang as never,\n theme: currentTheme as never,\n ...(entry.state ? { grammarState: entry.state } : {}),\n });\n const rendered = tokens.map((line) =>\n normalizeContrast(line.map(ansiFromToken).join(\"\")),\n );\n entry.state = instance.getLastGrammarState(tokens as never);\n entry.lines.push(...rendered);\n const delta = rendered.reduce((total, line) => total + line.length, 0);\n entry.chars += delta;\n fileHighlightChars += delta;\n } catch {\n entry.stale = true;\n }\n};\n\nconst pumpFileHighlightQueue = (): void => {\n fileHighlightQueueScheduled = false;\n let entry = fileHighlightQueue.shift();\n while (\n entry !== undefined &&\n (entry.stale ||\n entry.highlighter !== highlighter ||\n entry.lines.length >= Math.min(entry.target, entry.sourceLines.length))\n ) {\n if (entry.waiters.length > 0) fireSatisfiedWaiters(entry);\n entry = fileHighlightQueue.shift();\n }\n if (!entry) return;\n advanceFileHighlight(entry);\n if (!entry.stale) {\n fireSatisfiedWaiters(entry);\n // Coverage only progresses while something on screen waits for it; an\n // entry with no waiters parks so idle state never burns CPU.\n if (entry.waiters.length > 0) fileHighlightQueue.push(entry);\n }\n if (fileHighlightQueue.length > 0) {\n fileHighlightQueueScheduled = true;\n setImmediate(pumpFileHighlightQueue);\n }\n};\n\nconst scheduleFileHighlight = (entry: FileHighlightEntry): void => {\n if (!fileHighlightQueue.includes(entry)) fileHighlightQueue.push(entry);\n if (fileHighlightQueueScheduled) return;\n fileHighlightQueueScheduled = true;\n setImmediate(pumpFileHighlightQueue);\n};\n\n/**\n * Highlight a line range of an on-disk file with full grammar state, returning\n * per-line { raw, ansi } entries for 0-based [from, to). `raw` is the\n * tab-expanded source line so callers can verify the rendered content still\n * matches the file. Returns null while coverage has not reached `to` (or when\n * the file is unusable); passing `invalidate` repaints as soon as the range is\n * covered and pumps bounded background tokenization \u2014 parked shiki\n * GrammarState, one ~5-10ms slice per event-loop tick, work only while\n * waiters exist.\n */\nexport function highlightFileLines(\n filePath: string,\n lang: string,\n from: number,\n to: number,\n invalidate?: () => void,\n): FileHighlightLine[] | null {\n if (!enabled || !lang || !filePath || to <= from || from < 0) return null;\n if (!highlighter || readyTheme !== currentTheme) {\n requestInit(invalidate);\n return null;\n }\n const shikiLang = normalizeLanguage(lang);\n if (!(shikiLang in shikiLanguages())) return null;\n if (!loadedLanguages.has(shikiLang)) {\n requestLanguageLoad(shikiLang, invalidate);\n return null;\n }\n let stat;\n try {\n stat = statSync(filePath);\n } catch {\n return null;\n }\n if (!stat.isFile() || stat.size > FILE_HIGHLIGHT_MAX_SOURCE_CHARS) return null;\n const key = `${currentTheme}\\0${shikiLang}\\0${filePath}`;\n let entry = fileHighlightCache.get(key);\n if (entry && (entry.mtimeMs !== stat.mtimeMs || entry.size !== stat.size)) {\n dropFileHighlightEntry(key, entry);\n entry = undefined;\n }\n if (!entry) {\n let text: string;\n try {\n text = readFileSync(filePath, \"utf8\");\n } catch {\n return null;\n }\n if (text.includes(\"\\0\")) return null;\n const sourceLines = text\n .replace(/\\r\\n?/g, \"\\n\")\n .split(\"\\n\")\n .map(expandFileLineTabs);\n entry = {\n highlighter,\n lang: shikiLang,\n mtimeMs: stat.mtimeMs,\n size: stat.size,\n sourceLines,\n lines: [],\n state: undefined,\n target: 0,\n waiters: [],\n stale: false,\n chars: sourceLines.reduce((total, line) => total + line.length, 0),\n };\n fileHighlightCache.set(key, entry);\n fileHighlightChars += entry.chars;\n evictFileHighlightCache();\n if (entry.stale) {\n // Evicted immediately by the char budget; treat as unusable.\n entry.waiters = [];\n return null;\n }\n } else {\n fileHighlightCache.delete(key);\n fileHighlightCache.set(key, entry);\n }\n return fileHighlightRange(entry, from, to, invalidate);\n}\n\n/**\n * Highlight a line range of an in-memory document with full grammar state.\n * Shares the disk-backed pump, cache, and budgets; the caller supplies the\n * cache identity via `cacheKey` (already namespaced by theme + language) and\n * the tab-expanded source lines. Returns null while coverage has not reached\n * `to`; passing `invalidate` repaints as soon as the range is covered.\n */\nexport function highlightSourceLines(\n cacheKey: string,\n sourceLines: string[],\n lang: string,\n from: number,\n to: number,\n invalidate?: () => void,\n): FileHighlightLine[] | null {\n if (!enabled || !lang || !cacheKey || to <= from || from < 0) return null;\n if (!highlighter || readyTheme !== currentTheme) {\n requestInit(invalidate);\n return null;\n }\n const shikiLang = normalizeLanguage(lang);\n if (!(shikiLang in shikiLanguages())) return null;\n if (!loadedLanguages.has(shikiLang)) {\n requestLanguageLoad(shikiLang, invalidate);\n return null;\n }\n let entry = fileHighlightCache.get(cacheKey);\n if (!entry) {\n entry = {\n highlighter,\n lang: shikiLang,\n sourceLines,\n lines: [],\n state: undefined,\n target: 0,\n waiters: [],\n stale: false,\n chars: sourceLines.reduce((total, line) => total + line.length, 0),\n };\n fileHighlightCache.set(cacheKey, entry);\n fileHighlightChars += entry.chars;\n evictFileHighlightCache();\n if (entry.stale) {\n entry.waiters = [];\n return null;\n }\n } else {\n fileHighlightCache.delete(cacheKey);\n fileHighlightCache.set(cacheKey, entry);\n }\n return fileHighlightRange(entry, from, to, invalidate);\n}\n\nconst fileHighlightRange = (\n entry: FileHighlightEntry,\n from: number,\n to: number,\n invalidate?: () => void,\n): FileHighlightLine[] | null => {\n const total = entry.sourceLines.length;\n if (from >= total) return null;\n const clampedTo = Math.max(Math.min(to, total), Math.min(from, total));\n entry.target = Math.max(entry.target, clampedTo);\n if (invalidate && entry.lines.length < clampedTo) {\n entry.waiters = entry.waiters.filter((waiter) => waiter.invalidate !== invalidate);\n entry.waiters.push({ to: clampedTo, invalidate });\n scheduleFileHighlight(entry);\n }\n // Coverage past EOF: serve the existing lines rather than wait forever on a\n // target that can never be reached.\n if (entry.lines.length < clampedTo) return null;\n const out: FileHighlightLine[] = [];\n for (let index = from; index < Math.min(to, total); index++) {\n out.push({ raw: entry.sourceLines[index] ?? \"\", ansi: entry.lines[index] ?? \"\" });\n }\n return out;\n};\n", "import { createRequire } from \"node:module\";\n\n// Render callbacks are synchronous. Resolve optional catalogs on the first\n// preview, not while loading the extension (even metadata has a static graph).\nconst require = createRequire(import.meta.url);\nlet languages: typeof import(\"shiki/langs\")[\"bundledLanguages\"] | undefined;\nlet themeTypes: Map<string, \"light\" | \"dark\"> | undefined;\n\nexport const shikiLanguages = (): typeof import(\"shiki/langs\")[\"bundledLanguages\"] =>\n languages ??= (require(\"shiki/langs\") as typeof import(\"shiki/langs\")).bundledLanguages;\n\nexport const shikiThemeType = (id: string): \"light\" | \"dark\" | undefined => {\n themeTypes ??= new Map((require(\"shiki/themes\") as typeof import(\"shiki/themes\")).bundledThemesInfo.map(theme => [theme.id, theme.type]));\n return themeTypes.get(id);\n};\n", "import type { ThemeRegistration } from \"shiki\";\n\n// Theme resolution for issue #46.\n//\n// Pi's extension host cannot resolve shiki's internal lazy\n// `import(\"@shikijs/themes/<id>)` (triggered when createHighlighter is handed\n// a bare theme *id string*), so previews fell back to plain text. We resolve\n// each theme object from pi-fabric's own module graph with static imports and\n// hand createHighlighter the *object*, so shiki never performs that\n// host-fragile subpath import at runtime.\n//\n// Each entry is a static dynamic import so the module is only fetched when a\n// theme is actually selected, and so vitest can intercept it.\n\nconst THEME_IMPORTS = {\n \"andromeeda\": () => import(\"@shikijs/themes/andromeeda\"),\n \"aurora-x\": () => import(\"@shikijs/themes/aurora-x\"),\n \"ayu-dark\": () => import(\"@shikijs/themes/ayu-dark\"),\n \"ayu-light\": () => import(\"@shikijs/themes/ayu-light\"),\n \"ayu-mirage\": () => import(\"@shikijs/themes/ayu-mirage\"),\n \"catppuccin-frappe\": () => import(\"@shikijs/themes/catppuccin-frappe\"),\n \"catppuccin-latte\": () => import(\"@shikijs/themes/catppuccin-latte\"),\n \"catppuccin-macchiato\": () => import(\"@shikijs/themes/catppuccin-macchiato\"),\n \"catppuccin-mocha\": () => import(\"@shikijs/themes/catppuccin-mocha\"),\n \"dark-plus\": () => import(\"@shikijs/themes/dark-plus\"),\n \"dracula\": () => import(\"@shikijs/themes/dracula\"),\n \"dracula-soft\": () => import(\"@shikijs/themes/dracula-soft\"),\n \"everforest-dark\": () => import(\"@shikijs/themes/everforest-dark\"),\n \"everforest-light\": () => import(\"@shikijs/themes/everforest-light\"),\n \"github-dark\": () => import(\"@shikijs/themes/github-dark\"),\n \"github-dark-default\": () => import(\"@shikijs/themes/github-dark-default\"),\n \"github-dark-dimmed\": () => import(\"@shikijs/themes/github-dark-dimmed\"),\n \"github-dark-high-contrast\": () =>\n import(\"@shikijs/themes/github-dark-high-contrast\"),\n \"github-light\": () => import(\"@shikijs/themes/github-light\"),\n \"github-light-default\": () => import(\"@shikijs/themes/github-light-default\"),\n \"github-light-high-contrast\": () =>\n import(\"@shikijs/themes/github-light-high-contrast\"),\n \"gruvbox-dark-hard\": () => import(\"@shikijs/themes/gruvbox-dark-hard\"),\n \"gruvbox-dark-medium\": () => import(\"@shikijs/themes/gruvbox-dark-medium\"),\n \"gruvbox-dark-soft\": () => import(\"@shikijs/themes/gruvbox-dark-soft\"),\n \"gruvbox-light-hard\": () => import(\"@shikijs/themes/gruvbox-light-hard\"),\n \"gruvbox-light-medium\": () => import(\"@shikijs/themes/gruvbox-light-medium\"),\n \"gruvbox-light-soft\": () => import(\"@shikijs/themes/gruvbox-light-soft\"),\n \"horizon\": () => import(\"@shikijs/themes/horizon\"),\n \"horizon-bright\": () => import(\"@shikijs/themes/horizon-bright\"),\n \"houston\": () => import(\"@shikijs/themes/houston\"),\n \"kanagawa-dragon\": () => import(\"@shikijs/themes/kanagawa-dragon\"),\n \"kanagawa-lotus\": () => import(\"@shikijs/themes/kanagawa-lotus\"),\n \"kanagawa-wave\": () => import(\"@shikijs/themes/kanagawa-wave\"),\n \"laserwave\": () => import(\"@shikijs/themes/laserwave\"),\n \"light-plus\": () => import(\"@shikijs/themes/light-plus\"),\n \"material-theme\": () => import(\"@shikijs/themes/material-theme\"),\n \"material-theme-darker\": () => import(\"@shikijs/themes/material-theme-darker\"),\n \"material-theme-lighter\": () => import(\"@shikijs/themes/material-theme-lighter\"),\n \"material-theme-ocean\": () => import(\"@shikijs/themes/material-theme-ocean\"),\n \"material-theme-palenight\": () =>\n import(\"@shikijs/themes/material-theme-palenight\"),\n \"min-dark\": () => import(\"@shikijs/themes/min-dark\"),\n \"min-light\": () => import(\"@shikijs/themes/min-light\"),\n \"monokai\": () => import(\"@shikijs/themes/monokai\"),\n \"night-owl\": () => import(\"@shikijs/themes/night-owl\"),\n \"night-owl-light\": () => import(\"@shikijs/themes/night-owl-light\"),\n \"nord\": () => import(\"@shikijs/themes/nord\"),\n \"one-dark-pro\": () => import(\"@shikijs/themes/one-dark-pro\"),\n \"one-light\": () => import(\"@shikijs/themes/one-light\"),\n \"plastic\": () => import(\"@shikijs/themes/plastic\"),\n \"poimandres\": () => import(\"@shikijs/themes/poimandres\"),\n \"red\": () => import(\"@shikijs/themes/red\"),\n \"rose-pine\": () => import(\"@shikijs/themes/rose-pine\"),\n \"rose-pine-dawn\": () => import(\"@shikijs/themes/rose-pine-dawn\"),\n \"rose-pine-moon\": () => import(\"@shikijs/themes/rose-pine-moon\"),\n \"slack-dark\": () => import(\"@shikijs/themes/slack-dark\"),\n \"slack-ochin\": () => import(\"@shikijs/themes/slack-ochin\"),\n \"snazzy-light\": () => import(\"@shikijs/themes/snazzy-light\"),\n \"solarized-dark\": () => import(\"@shikijs/themes/solarized-dark\"),\n \"solarized-light\": () => import(\"@shikijs/themes/solarized-light\"),\n \"synthwave-84\": () => import(\"@shikijs/themes/synthwave-84\"),\n \"tokyo-night\": () => import(\"@shikijs/themes/tokyo-night\"),\n \"vesper\": () => import(\"@shikijs/themes/vesper\"),\n \"vitesse-black\": () => import(\"@shikijs/themes/vitesse-black\"),\n \"vitesse-dark\": () => import(\"@shikijs/themes/vitesse-dark\"),\n \"vitesse-light\": () => import(\"@shikijs/themes/vitesse-light\"),\n} as const satisfies Record<string, () => Promise<{ default: ThemeRegistration }>>;\n\n/**\n * Resolve a shiki theme id to its loaded theme object. Returns undefined when\n * the id is not a bundled shiki theme, so callers can fall back gracefully.\n */\nexport async function resolveShikiThemeObject(\n themeId: string,\n): Promise<ThemeRegistration | undefined> {\n const loader = THEME_IMPORTS[themeId as keyof typeof THEME_IMPORTS];\n if (!loader) return undefined;\n const mod = await loader();\n return mod.default;\n}\n", "import type { LanguageRegistration } from \"shiki\";\n\n// Resolve bundled language grammars through pi-fabric's dependency graph.\n// Shiki's own lazy imports are not resolvable from Pi's jiti extension host.\nconst LANGUAGE_IMPORTS = {\n bash: () => import(\"@shikijs/langs/shellscript\"),\n typescript: () => import(\"@shikijs/langs/typescript\"),\n tsx: () => import(\"@shikijs/langs/tsx\"),\n javascript: () => import(\"@shikijs/langs/javascript\"),\n jsx: () => import(\"@shikijs/langs/jsx\"),\n json: () => import(\"@shikijs/langs/json\"),\n markdown: () => import(\"@shikijs/langs/markdown\"),\n yaml: () => import(\"@shikijs/langs/yaml\"),\n toml: () => import(\"@shikijs/langs/toml\"),\n css: () => import(\"@shikijs/langs/css\"),\n} as const satisfies Record<\n string,\n () => Promise<{ default: LanguageRegistration[] }>\n>;\n\n/**\n * Resolve the language registrations used during highlighter initialization.\n * Passing objects prevents Shiki from issuing host-fragile lazy imports.\n */\nexport async function resolveShikiLanguageObjects(\n languageIds: readonly string[],\n): Promise<LanguageRegistration[]> {\n const modules = await Promise.all(\n languageIds.map(async (languageId) => {\n const loader = LANGUAGE_IMPORTS[languageId as keyof typeof LANGUAGE_IMPORTS];\n if (!loader) throw new Error(`Unsupported preloaded Shiki language: ${languageId}`);\n return loader();\n }),\n );\n return modules.flatMap((module) => module.default);\n}\n"],
5
- "mappings": "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",
6
- "names": ["require"]
7
- }