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.
- package/README.md +1 -0
- package/dist/chunks/{chunk-DBLT6J5B.js → chunk-3DUX4PXZ.js} +2 -2
- package/dist/chunks/{chunk-7VCPGNDY.js → chunk-CRU563MT.js} +2 -2
- package/dist/chunks/{chunk-H6RSDEWW.js → chunk-EY57KW52.js} +5 -5
- package/dist/chunks/{chunk-RTXZHKMS.js → chunk-QNMQJNXE.js} +7 -3
- package/dist/chunks/chunk-QNMQJNXE.js.map +7 -0
- package/dist/chunks/{chunk-7VAZ4N43.js → chunk-V3PIO7QL.js} +2 -2
- package/dist/chunks/{chunk-HCBV735P.js → chunk-YYL3APFD.js} +2 -2
- package/dist/components/configuration.js +3 -3
- package/dist/fabric-runtime-state.js +4 -4
- package/dist/index.js +6 -6
- package/dist/residency/host.js +4 -4
- package/dist/residency/pi-entry.js +4 -4
- package/dist/runtime/monty-runtime.js +2 -2
- package/dist/ui/conversation.js +1 -1
- package/dist/ui/dashboard.js +2 -2
- package/dist/ui/highlight.d.ts.map +1 -1
- package/dist/ui/languages/bend.d.ts +4 -0
- package/dist/ui/languages/bend.d.ts.map +1 -0
- package/dist/ui/languages/bend.js +73 -0
- package/dist/ui/languages/bend.js.map +7 -0
- package/dist/ui/settings.js +2 -2
- package/dist/ui/shiki-catalog.d.ts +2 -1
- package/dist/ui/shiki-catalog.d.ts.map +1 -1
- package/package.json +1 -1
- package/dist/chunks/chunk-RTXZHKMS.js.map +0 -7
- /package/dist/chunks/{chunk-DBLT6J5B.js.map → chunk-3DUX4PXZ.js.map} +0 -0
- /package/dist/chunks/{chunk-7VCPGNDY.js.map → chunk-CRU563MT.js.map} +0 -0
- /package/dist/chunks/{chunk-H6RSDEWW.js.map → chunk-EY57KW52.js.map} +0 -0
- /package/dist/chunks/{chunk-7VAZ4N43.js.map → chunk-V3PIO7QL.js.map} +0 -0
- /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-
|
|
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-
|
|
7542
|
+
//# sourceMappingURL=chunk-3DUX4PXZ.js.map
|
|
@@ -9,7 +9,7 @@ import {
|
|
|
9
9
|
agentParticipantRecords,
|
|
10
10
|
loadModelUsage,
|
|
11
11
|
useBudgetLedger
|
|
12
|
-
} from "./chunk-
|
|
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-
|
|
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-
|
|
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 ??=
|
|
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-
|
|
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-
|
|
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-
|
|
4239
|
+
//# sourceMappingURL=chunk-V3PIO7QL.js.map
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import {
|
|
2
2
|
writeJsonAtomic
|
|
3
|
-
} from "./chunk-
|
|
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-
|
|
134
|
+
//# sourceMappingURL=chunk-YYL3APFD.js.map
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
import {
|
|
2
2
|
FabricComponentConfiguration,
|
|
3
3
|
watchComponentConfiguration
|
|
4
|
-
} from "../chunks/chunk-
|
|
5
|
-
import "../chunks/chunk-
|
|
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-
|
|
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-
|
|
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-
|
|
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-
|
|
34
|
+
} from "./chunks/chunk-V3PIO7QL.js";
|
|
35
35
|
import {
|
|
36
36
|
configureHighlighting,
|
|
37
37
|
highlightCode,
|
|
38
38
|
observePiTheme
|
|
39
|
-
} from "./chunks/chunk-
|
|
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-
|
|
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,
|
package/dist/residency/host.js
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
runResidentHostFromConfigPath
|
|
4
|
-
} from "../chunks/chunk-
|
|
5
|
-
import "../chunks/chunk-
|
|
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-
|
|
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-
|
|
4
|
-
import "../chunks/chunk-
|
|
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-
|
|
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-
|
|
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";
|
package/dist/ui/conversation.js
CHANGED
package/dist/ui/dashboard.js
CHANGED
|
@@ -14,12 +14,12 @@ import {
|
|
|
14
14
|
renderBoundedLines,
|
|
15
15
|
renderCoreToolBody,
|
|
16
16
|
spinnerFrame
|
|
17
|
-
} from "../chunks/chunk-
|
|
17
|
+
} from "../chunks/chunk-V3PIO7QL.js";
|
|
18
18
|
import {
|
|
19
19
|
highlightCode,
|
|
20
20
|
highlightFileLines,
|
|
21
21
|
languageFromPath
|
|
22
|
-
} from "../chunks/chunk-
|
|
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;
|
|
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 @@
|
|
|
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
|
+
}
|
package/dist/ui/settings.js
CHANGED
|
@@ -28,9 +28,9 @@ import {
|
|
|
28
28
|
loadFabricConfigForScope,
|
|
29
29
|
maxExecutorMemoryLimitBytes,
|
|
30
30
|
saveFabricConfig
|
|
31
|
-
} from "../chunks/chunk-
|
|
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
|
-
|
|
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":"
|
|
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,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
|
-
}
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|