@narumitw/pi-statusline 0.49.0 → 0.49.3
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 +10 -5
- package/dist/chunks/chunk-6BDIM4OT.ts +776 -0
- package/dist/chunks/chunk-6BDIM4OT.ts.map +7 -0
- package/dist/chunks/commands-FUT5RTFK.ts +774 -0
- package/dist/chunks/commands-FUT5RTFK.ts.map +7 -0
- package/dist/statusline.ts +1144 -0
- package/dist/statusline.ts.map +7 -0
- package/package.json +10 -6
- package/src/index.ts +1 -1
- package/src/ansi.ts +0 -26
- package/src/commands.ts +0 -929
- package/src/directory.ts +0 -54
- package/src/extension-status.ts +0 -323
- package/src/git-status.ts +0 -148
- package/src/information-profiles.ts +0 -40
- package/src/powerline.ts +0 -170
- package/src/presets/candy.ts +0 -9
- package/src/presets/create-ramp.ts +0 -41
- package/src/presets/custom.ts +0 -11
- package/src/presets/forest.ts +0 -9
- package/src/presets/index.ts +0 -55
- package/src/presets/mono.ts +0 -9
- package/src/presets/neon.ts +0 -9
- package/src/presets/ocean.ts +0 -9
- package/src/presets/sunset.ts +0 -9
- package/src/presets/tokyo-night.ts +0 -13
- package/src/presets/types.ts +0 -12
- package/src/render.ts +0 -357
- package/src/settings.ts +0 -702
- package/src/statusline.ts +0 -353
- package/src/terminal.ts +0 -60
- package/src/types.ts +0 -88
- package/src/usage.ts +0 -53
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../src/command-contract.ts", "../../src/types.ts", "../../src/presets/create-ramp.ts", "../../src/presets/candy.ts", "../../src/presets/custom.ts", "../../src/presets/forest.ts", "../../src/presets/mono.ts", "../../src/presets/neon.ts", "../../src/presets/ocean.ts", "../../src/presets/sunset.ts", "../../src/presets/tokyo-night.ts", "../../src/presets/index.ts", "../../src/information-profiles.ts", "../../src/settings.ts"],
|
|
4
|
+
"sourcesContent": ["import type { AutocompleteItem } from \"@earendil-works/pi-tui\";\n\nexport const STATUSLINE_SUBCOMMANDS: readonly AutocompleteItem[] = [\n\t{ value: \"settings\", label: \"settings\", description: \"Edit pi-statusline.json\" },\n\t{ value: \"status\", label: \"status\", description: \"Show effective statusline settings\" },\n\t{ value: \"help\", label: \"help\", description: \"Show configuration help\" },\n];\n\nexport function completeStatuslineArguments(prefix: string): AutocompleteItem[] | null {\n\tconst normalized = prefix.trim().toLowerCase();\n\tconst matches = STATUSLINE_SUBCOMMANDS.filter((item) => item.value.startsWith(normalized));\n\treturn matches.length > 0 ? [...matches] : null;\n}\n", "import type { ThemeColor } from \"@earendil-works/pi-coding-agent\";\n\nexport const SEGMENT_NAMES = [\n\t\"brand\",\n\t\"provider\",\n\t\"model\",\n\t\"thinking\",\n\t\"cwd\",\n\t\"branch\",\n\t\"tools\",\n\t\"context\",\n\t\"tokens\",\n\t\"cache\",\n\t\"cost\",\n\t\"time\",\n\t\"turn\",\n] as const;\nexport type SegmentName = (typeof SEGMENT_NAMES)[number];\n\nexport const LINE_BREAK_SEGMENT_NAME = \"line_break\" as const;\nexport type ConfigSegmentName = SegmentName | typeof LINE_BREAK_SEGMENT_NAME;\n\nexport const PALETTE_NAMES = [\n\t\"tokyo-night\",\n\t\"ocean\",\n\t\"sunset\",\n\t\"forest\",\n\t\"candy\",\n\t\"neon\",\n\t\"mono\",\n] as const;\nexport type PaletteName = (typeof PALETTE_NAMES)[number];\n\nexport const PALETTE_PRESET_NAMES = [...PALETTE_NAMES, \"custom\"] as const;\nexport type PalettePreset = (typeof PALETTE_PRESET_NAMES)[number];\n\nexport const DENSITIES = [\"compact\", \"cozy\"] as const;\nexport type Density = (typeof DENSITIES)[number];\n\nexport const SEPARATOR_NAMES = [\"none\", \"dot\", \"bar\", \"powerline\", \"round\"] as const;\nexport type SeparatorName = (typeof SEPARATOR_NAMES)[number];\n\nexport const TRUNCATION_DIRECTIONS = [\"start\", \"middle\", \"end\"] as const;\nexport type TruncationDirection = (typeof TRUNCATION_DIRECTIONS)[number];\n\nexport type PowerlineBlockName = \"header\" | \"directory\" | \"git\" | \"runtime\" | \"meter\";\n\nexport interface SegmentTextConfig {\n\tprefix: string;\n\tsuffix: string;\n}\n\nexport interface ModelSegmentTextConfig extends SegmentTextConfig {\n\ttruncationLength: number;\n\ttruncationSymbol: string;\n\ttruncationDirection: TruncationDirection;\n}\n\nexport interface SegmentPaletteColor {\n\tfg?: string;\n\tbg?: string;\n}\n\nexport type SegmentPalette = Partial<Record<SegmentName, SegmentPaletteColor>>;\n\nexport interface StatuslineConfig {\n\tpalettePreset: PalettePreset;\n\tpalette: SegmentPalette;\n\tdensity: Density;\n\tseparator: SeparatorName;\n\tsegments: ConfigSegmentName[];\n\tsegmentText: Record<SegmentName, SegmentTextConfig> & { model: ModelSegmentTextConfig };\n\textensionStatusIcons: Record<string, string>;\n}\n\nexport interface RenderSegment {\n\tname: SegmentName;\n\ttext: string;\n\tcolor: ThemeColor;\n\tblock: PowerlineBlockName;\n\temphasis?: boolean;\n}\n\nexport interface RenderLineBreak {\n\tname: typeof LINE_BREAK_SEGMENT_NAME;\n}\n\nexport type RenderItem = RenderSegment | RenderLineBreak;\n", "import type { PowerlineBlockName } from \"../types.js\";\nimport type { PowerlinePreset } from \"./types.js\";\n\nconst BLOCK_NAMES: PowerlineBlockName[] = [\"header\", \"directory\", \"git\", \"runtime\", \"meter\"];\n\ntype PaletteRamp = readonly [string, string, string, string, string];\n\nexport function createRampPreset(backgrounds: PaletteRamp): PowerlinePreset {\n\treturn {\n\t\tlead: backgrounds[0],\n\t\tblocks: Object.fromEntries(\n\t\t\tBLOCK_NAMES.map((block, index) => {\n\t\t\t\tconst background = backgrounds[index];\n\t\t\t\treturn [block, { fg: contrastColor(background), bg: background }];\n\t\t\t}),\n\t\t) as Record<PowerlineBlockName, { fg: string; bg: string }>,\n\t\textensionSeparator: backgrounds[2],\n\t};\n}\n\nfunction contrastColor(hex: string): string {\n\tconst background = relativeLuminance(hex);\n\tconst dark = relativeLuminance(\"#090c0c\");\n\tconst light = relativeLuminance(\"#f0f0f0\");\n\treturn contrastRatio(background, dark) >= contrastRatio(background, light)\n\t\t? \"#090c0c\"\n\t\t: \"#f0f0f0\";\n}\n\nfunction contrastRatio(left: number, right: number): number {\n\treturn (Math.max(left, right) + 0.05) / (Math.min(left, right) + 0.05);\n}\n\nfunction relativeLuminance(hex: string): number {\n\tconst normalized = hex.slice(1);\n\tconst channels = [0, 2, 4].map((offset) => {\n\t\tconst value = Number.parseInt(normalized.slice(offset, offset + 2), 16) / 255;\n\t\treturn value <= 0.04045 ? value / 12.92 : ((value + 0.055) / 1.055) ** 2.4;\n\t});\n\treturn 0.2126 * (channels[0] ?? 0) + 0.7152 * (channels[1] ?? 0) + 0.0722 * (channels[2] ?? 0);\n}\n", "import { createRampPreset } from \"./create-ramp.js\";\n\nexport const CANDY_PRESET = createRampPreset([\n\t\"#f5c2e7\",\n\t\"#cba6f7\",\n\t\"#89b4fa\",\n\t\"#745f9a\",\n\t\"#403a5c\",\n]);\n", "import type { PowerlinePreset } from \"./types.js\";\n\nexport const CUSTOM_PRESET: PowerlinePreset = {\n\tblocks: {\n\t\theader: {},\n\t\tdirectory: {},\n\t\tgit: {},\n\t\truntime: {},\n\t\tmeter: {},\n\t},\n};\n", "import { createRampPreset } from \"./create-ramp.js\";\n\nexport const FOREST_PRESET = createRampPreset([\n\t\"#a7c080\",\n\t\"#83c092\",\n\t\"#5f9f75\",\n\t\"#3f6f55\",\n\t\"#293f35\",\n]);\n", "import { createRampPreset } from \"./create-ramp.js\";\n\nexport const MONO_PRESET = createRampPreset([\n\t\"#d4d4d4\",\n\t\"#a3a3a3\",\n\t\"#686868\",\n\t\"#404040\",\n\t\"#262626\",\n]);\n", "import { createRampPreset } from \"./create-ramp.js\";\n\nexport const NEON_PRESET = createRampPreset([\n\t\"#39ff14\",\n\t\"#00f5ff\",\n\t\"#ff4fd8\",\n\t\"#7a2cf3\",\n\t\"#29134f\",\n]);\n", "import { createRampPreset } from \"./create-ramp.js\";\n\nexport const OCEAN_PRESET = createRampPreset([\n\t\"#7dcfff\",\n\t\"#4f9fba\",\n\t\"#2d6f88\",\n\t\"#23475b\",\n\t\"#182b3a\",\n]);\n", "import { createRampPreset } from \"./create-ramp.js\";\n\nexport const SUNSET_PRESET = createRampPreset([\n\t\"#ffcf70\",\n\t\"#f59e6f\",\n\t\"#dc718a\",\n\t\"#8f5b78\",\n\t\"#493447\",\n]);\n", "import type { PowerlinePreset } from \"./types.js\";\n\nexport const TOKYO_NIGHT_PRESET: PowerlinePreset = {\n\tlead: \"#a3aed2\",\n\tblocks: {\n\t\theader: { fg: \"#090c0c\", bg: \"#a3aed2\" },\n\t\tdirectory: { fg: \"#e3e5e5\", bg: \"#769ff0\" },\n\t\tgit: { fg: \"#769ff0\", bg: \"#394260\" },\n\t\truntime: { fg: \"#769ff0\", bg: \"#212736\" },\n\t\tmeter: { fg: \"#a0a9cb\", bg: \"#1d2230\" },\n\t},\n\textensionSeparator: \"#394260\",\n};\n", "import {\n\ttype PaletteName,\n\ttype PalettePreset,\n\ttype PowerlineBlockName,\n\tSEGMENT_NAMES,\n\ttype SegmentName,\n\ttype SegmentPalette,\n} from \"../types.js\";\nimport { CANDY_PRESET } from \"./candy.js\";\nimport { CUSTOM_PRESET } from \"./custom.js\";\nimport { FOREST_PRESET } from \"./forest.js\";\nimport { MONO_PRESET } from \"./mono.js\";\nimport { NEON_PRESET } from \"./neon.js\";\nimport { OCEAN_PRESET } from \"./ocean.js\";\nimport { SUNSET_PRESET } from \"./sunset.js\";\nimport { TOKYO_NIGHT_PRESET } from \"./tokyo-night.js\";\nimport type { PowerlinePreset } from \"./types.js\";\n\nconst PRESETS = {\n\t\"tokyo-night\": TOKYO_NIGHT_PRESET,\n\tocean: OCEAN_PRESET,\n\tsunset: SUNSET_PRESET,\n\tforest: FOREST_PRESET,\n\tcandy: CANDY_PRESET,\n\tneon: NEON_PRESET,\n\tmono: MONO_PRESET,\n\tcustom: CUSTOM_PRESET,\n} satisfies Record<PalettePreset, PowerlinePreset>;\n\nconst SEGMENT_BLOCKS: Record<SegmentName, PowerlineBlockName> = {\n\tbrand: \"header\",\n\tprovider: \"header\",\n\tmodel: \"header\",\n\tthinking: \"header\",\n\tcwd: \"directory\",\n\tbranch: \"git\",\n\ttools: \"runtime\",\n\tcontext: \"runtime\",\n\ttokens: \"runtime\",\n\tcache: \"runtime\",\n\tcost: \"meter\",\n\ttime: \"meter\",\n\tturn: \"meter\",\n};\n\nexport function resolvePreset(preset: PalettePreset): PowerlinePreset {\n\treturn PRESETS[preset];\n}\n\nexport function segmentPaletteForPreset(preset: PaletteName): SegmentPalette {\n\tconst blocks = PRESETS[preset].blocks;\n\treturn Object.fromEntries(\n\t\tSEGMENT_NAMES.map((name) => [name, { ...blocks[SEGMENT_BLOCKS[name]] }]),\n\t) as SegmentPalette;\n}\n", "import type { ConfigSegmentName, SegmentName } from \"./types.js\";\n\nexport const INFORMATION_PROFILE_NAMES = [\"minimal\", \"balanced\", \"detailed\"] as const;\nexport type InformationProfileName = (typeof INFORMATION_PROFILE_NAMES)[number];\nexport type InformationProfile = InformationProfileName | \"custom\";\n\nexport const INFORMATION_PROFILES: Readonly<\n\tRecord<InformationProfileName, readonly SegmentName[]>\n> = {\n\tminimal: [\"model\", \"cwd\", \"branch\", \"context\"],\n\tbalanced: [\"model\", \"thinking\", \"cwd\", \"branch\", \"tools\", \"context\", \"time\"],\n\tdetailed: [\n\t\t\"provider\",\n\t\t\"model\",\n\t\t\"thinking\",\n\t\t\"cwd\",\n\t\t\"branch\",\n\t\t\"tools\",\n\t\t\"context\",\n\t\t\"tokens\",\n\t\t\"cache\",\n\t\t\"cost\",\n\t\t\"time\",\n\t],\n};\n\nexport function inferInformationProfile(\n\tsegments: readonly ConfigSegmentName[],\n): InformationProfile {\n\tfor (const name of INFORMATION_PROFILE_NAMES) {\n\t\tconst profile = INFORMATION_PROFILES[name];\n\t\tif (\n\t\t\tsegments.length === profile.length &&\n\t\t\tsegments.every((segment, index) => segment === profile[index])\n\t\t) {\n\t\t\treturn name;\n\t\t}\n\t}\n\treturn \"custom\";\n}\n", "import { randomUUID } from \"node:crypto\";\nimport { lstatSync, mkdirSync, readFileSync, renameSync, rmSync, writeFileSync } from \"node:fs\";\nimport { dirname, join } from \"node:path\";\nimport { getAgentDir } from \"@earendil-works/pi-coding-agent\";\nimport { INFORMATION_PROFILES } from \"./information-profiles.js\";\nimport { segmentPaletteForPreset } from \"./presets/index.js\";\nimport {\n\ttype ConfigSegmentName,\n\tDENSITIES,\n\tLINE_BREAK_SEGMENT_NAME,\n\tPALETTE_NAMES,\n\tPALETTE_PRESET_NAMES,\n\ttype PaletteName,\n\tSEGMENT_NAMES,\n\tSEPARATOR_NAMES,\n\ttype SegmentName,\n\ttype SegmentPalette,\n\ttype StatuslineConfig,\n\tTRUNCATION_DIRECTIONS,\n} from \"./types.js\";\n\nexport const SETTINGS_FILE_NAME = \"pi-statusline.json\";\nconst LEGACY_SETTINGS_FILE_NAME = \"pi-statusline-settings.json\";\n\nconst DEFAULT_DOCUMENT_EXTENSION_STATUS_ICONS: Record<string, string> = {\n\taccounts: \"\uD83D\uDC64\",\n\tcaffeinate: \"\uD83D\uDC8A\",\n\t\"chrome-devtools\": \"\uD83C\uDF10\",\n\tfirecrawl: \"\uD83D\uDD25\",\n\t\"github-pr\": \"\uD83D\uDD0E\",\n\tgoal: \"\uD83C\uDFAF\",\n\t\"google-genai\": \"\u2728\",\n\tlsp: \"\uD83E\uDDF0\",\n\t\"plan-mode\": \"\uD83D\uDCDD\",\n\tretry: \"\uD83D\uDD01\",\n\tsubagents: \"\uD83E\uDDD1\u200D\uD83E\uDD1D\u200D\uD83E\uDDD1\",\n\tsync: \"\uD83D\uDD04\",\n\tusage: \"\uD83D\uDCCA\",\n};\n\nexport const DEFAULT_EXTENSION_STATUS_ICONS: Record<string, string> = {\n\t...DEFAULT_DOCUMENT_EXTENSION_STATUS_ICONS,\n\t\"codex-usage\": \"\uD83D\uDCCA\",\n\tpisync: \"\uD83D\uDD04\",\n\t\"unknown-error-retry\": \"\uD83D\uDD01\",\n};\n\nconst LEGACY_STATUS_ICON_KEYS = {\n\tpisync: \"sync\",\n\t\"unknown-error-retry\": \"retry\",\n} as const;\n\nconst DEFAULT_SEGMENTS: SegmentName[] = [...INFORMATION_PROFILES.balanced];\n\nexport const DEFAULT_STATUSLINE_CONFIG: StatuslineConfig = {\n\tpalettePreset: \"tokyo-night\",\n\tpalette: segmentPaletteForPreset(\"tokyo-night\"),\n\tdensity: \"compact\",\n\tseparator: \"none\",\n\tsegments: DEFAULT_SEGMENTS,\n\tsegmentText: {\n\t\tbrand: { prefix: \"\", suffix: \"\" },\n\t\tprovider: { prefix: \"\uD83D\uDD0C \", suffix: \"\" },\n\t\tmodel: {\n\t\t\tprefix: \"\uD83E\uDD16 \",\n\t\t\tsuffix: \"\",\n\t\t\ttruncationLength: 36,\n\t\t\ttruncationSymbol: \"\u2026\",\n\t\t\ttruncationDirection: \"start\",\n\t\t},\n\t\tthinking: { prefix: \"\uD83E\uDDE0 \", suffix: \"\" },\n\t\tcwd: { prefix: \"\uD83D\uDCC1 \", suffix: \"\" },\n\t\tbranch: { prefix: \"\uD83C\uDF3F \", suffix: \"\" },\n\t\ttools: { prefix: \"\", suffix: \"\" },\n\t\tcontext: { prefix: \"\uD83E\uDE9F ctx \", suffix: \"\" },\n\t\ttokens: { prefix: \"\uD83D\uDD22 \", suffix: \"\" },\n\t\tcache: { prefix: \"\uD83D\uDCE6 \", suffix: \"\" },\n\t\tcost: { prefix: \"\uD83D\uDCB8 $\", suffix: \"\" },\n\t\ttime: { prefix: \"\uD83D\uDD52 \", suffix: \"\" },\n\t\tturn: { prefix: \"\uD83D\uDD01 #\", suffix: \"\" },\n\t},\n\textensionStatusIcons: DEFAULT_EXTENSION_STATUS_ICONS,\n};\n\nconst DEFAULT_STATUSLINE_DOCUMENT_CONFIG = {\n\tpalettePreset: DEFAULT_STATUSLINE_CONFIG.palettePreset,\n\tdensity: DEFAULT_STATUSLINE_CONFIG.density,\n\tseparator: DEFAULT_STATUSLINE_CONFIG.separator,\n\tsegments: DEFAULT_SEGMENTS,\n\tsegmentText: DEFAULT_STATUSLINE_CONFIG.segmentText,\n\textensionStatusIcons: DEFAULT_DOCUMENT_EXTENSION_STATUS_ICONS,\n} satisfies Omit<StatuslineConfig, \"palette\">;\n\nexport const DEFAULT_STATUSLINE_DOCUMENT = `${JSON.stringify(\n\tDEFAULT_STATUSLINE_DOCUMENT_CONFIG,\n\tnull,\n\t\"\\t\",\n)}\\n`;\n\nexport interface StatuslineConfigDiagnostic {\n\tseverity: \"warning\" | \"error\";\n\tcode: \"unknown\" | \"invalid\" | \"parse\" | \"io\";\n\tpath: string;\n\tmessage: string;\n}\n\nexport interface LoadedStatuslineSettings {\n\tconfig: StatuslineConfig;\n\tsource: \"built-in\" | \"user\";\n\tsettingsPath: string;\n\trawDocument?: string;\n\tfileIdentity?: { dev: number; ino: number };\n\tdiagnostics: StatuslineConfigDiagnostic[];\n}\n\ninterface AtomicFileSystem {\n\tmkdirSync: typeof mkdirSync;\n\twriteFileSync: typeof writeFileSync;\n\trenameSync: typeof renameSync;\n\trmSync: typeof rmSync;\n}\n\nlet pendingSettingsNotice: string | undefined;\n\nexport function settingsFilePath(agentDir = getAgentDir()): string {\n\treturn join(agentDir, SETTINGS_FILE_NAME);\n}\n\nexport function createDefaultConfig(): StatuslineConfig {\n\treturn cloneConfig(DEFAULT_STATUSLINE_CONFIG);\n}\n\nexport function normalizeStatuslineConfig(value: unknown): {\n\tconfig: StatuslineConfig;\n\tdiagnostics: StatuslineConfigDiagnostic[];\n} {\n\tconst config = createDefaultConfig();\n\tconst diagnostics: StatuslineConfigDiagnostic[] = [];\n\tif (!isRecord(value)) {\n\t\treturn {\n\t\t\tconfig,\n\t\t\tdiagnostics: [invalidDiagnostic(\"\", \"Settings must contain a JSON object\", \"error\")],\n\t\t};\n\t}\n\tconst knownRoot = new Set([\n\t\t\"palettePreset\",\n\t\t\"palette\",\n\t\t\"density\",\n\t\t\"separator\",\n\t\t\"segments\",\n\t\t\"segmentText\",\n\t\t\"extensionStatusIcons\",\n\t]);\n\tfor (const key of Object.keys(value)) {\n\t\tif (!knownRoot.has(key)) diagnostics.push(unknownDiagnostic(key));\n\t}\n\n\tnormalizePalette(value.palette, config, diagnostics);\n\tnormalizeEnum(value, \"palettePreset\", PALETTE_PRESET_NAMES, config, diagnostics);\n\tif (!isRecord(value.palette) && isPaletteName(config.palettePreset)) {\n\t\tconfig.palette = segmentPaletteForPreset(config.palettePreset);\n\t}\n\tnormalizeEnum(value, \"density\", DENSITIES, config, diagnostics);\n\tnormalizeEnum(value, \"separator\", SEPARATOR_NAMES, config, diagnostics);\n\n\tif (value.segments !== undefined) {\n\t\tif (!Array.isArray(value.segments)) {\n\t\t\tdiagnostics.push(invalidDiagnostic(\"segments\", \"Expected an array of segment names\"));\n\t\t} else {\n\t\t\tconst segments: ConfigSegmentName[] = [];\n\t\t\tconst seen = new Set<SegmentName>();\n\t\t\tfor (const [index, item] of value.segments.entries()) {\n\t\t\t\tconst path = `segments[${index}]`;\n\t\t\t\tif (typeof item !== \"string\" || !isConfigSegmentName(item)) {\n\t\t\t\t\tdiagnostics.push(invalidDiagnostic(path, \"Unknown or non-string segment name\"));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (item === LINE_BREAK_SEGMENT_NAME) {\n\t\t\t\t\tif (segments.at(-1) === LINE_BREAK_SEGMENT_NAME) {\n\t\t\t\t\t\tdiagnostics.push(\n\t\t\t\t\t\t\tinvalidDiagnostic(path, \"Consecutive line_break segments are not allowed\"),\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tsegments.push(item);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (seen.has(item)) {\n\t\t\t\t\tdiagnostics.push(invalidDiagnostic(path, `Duplicate segment ${JSON.stringify(item)}`));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tseen.add(item);\n\t\t\t\tsegments.push(item);\n\t\t\t}\n\t\t\tconfig.segments = segments;\n\t\t}\n\t}\n\n\tif (value.segmentText !== undefined) {\n\t\tif (!isRecord(value.segmentText)) {\n\t\t\tdiagnostics.push(invalidDiagnostic(\"segmentText\", \"Expected an object\"));\n\t\t} else {\n\t\t\tfor (const [name, presentation] of Object.entries(value.segmentText)) {\n\t\t\t\tconst path = `segmentText.${name}`;\n\t\t\t\tif (!isSegmentName(name)) {\n\t\t\t\t\tdiagnostics.push(unknownDiagnostic(path));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!isRecord(presentation)) {\n\t\t\t\t\tdiagnostics.push(invalidDiagnostic(path, \"Expected an object\"));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst knownFields = new Set([\n\t\t\t\t\t\"prefix\",\n\t\t\t\t\t\"suffix\",\n\t\t\t\t\t...(name === \"model\"\n\t\t\t\t\t\t? [\"truncationLength\", \"truncationSymbol\", \"truncationDirection\"]\n\t\t\t\t\t\t: []),\n\t\t\t\t]);\n\t\t\t\tfor (const key of Object.keys(presentation)) {\n\t\t\t\t\tif (!knownFields.has(key)) diagnostics.push(unknownDiagnostic(`${path}.${key}`));\n\t\t\t\t}\n\t\t\t\tfor (const field of [\"prefix\", \"suffix\"] as const) {\n\t\t\t\t\tconst fieldValue = presentation[field];\n\t\t\t\t\tif (fieldValue === undefined) continue;\n\t\t\t\t\tif (!isSafeSegmentText(fieldValue, `${path}.${field}`, diagnostics)) continue;\n\t\t\t\t\tconfig.segmentText[name][field] = fieldValue;\n\t\t\t\t}\n\t\t\t\tif (name === \"model\") {\n\t\t\t\t\tnormalizeModelTruncation(presentation, config, diagnostics);\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tif (value.extensionStatusIcons !== undefined) {\n\t\tif (!isRecord(value.extensionStatusIcons)) {\n\t\t\tdiagnostics.push(invalidDiagnostic(\"extensionStatusIcons\", \"Expected an object\"));\n\t\t} else {\n\t\t\tfor (const [key, icon] of Object.entries(value.extensionStatusIcons)) {\n\t\t\t\tif (typeof icon !== \"string\") {\n\t\t\t\t\tdiagnostics.push(invalidDiagnostic(`extensionStatusIcons.${key}`, \"Expected a string\"));\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tObject.defineProperty(config.extensionStatusIcons, key, {\n\t\t\t\t\tvalue: icon,\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t});\n\t\t\t}\n\t\t\tfor (const [legacyKey, canonicalKey] of Object.entries(LEGACY_STATUS_ICON_KEYS)) {\n\t\t\t\tconst legacyIcon = Object.hasOwn(value.extensionStatusIcons, legacyKey)\n\t\t\t\t\t? value.extensionStatusIcons[legacyKey]\n\t\t\t\t\t: undefined;\n\t\t\t\tconst canonicalIcon = Object.hasOwn(value.extensionStatusIcons, canonicalKey)\n\t\t\t\t\t? value.extensionStatusIcons[canonicalKey]\n\t\t\t\t\t: undefined;\n\t\t\t\tconst targetKey = typeof canonicalIcon === \"string\" ? legacyKey : canonicalKey;\n\t\t\t\tconst inheritedIcon =\n\t\t\t\t\ttypeof canonicalIcon === \"string\"\n\t\t\t\t\t\t? canonicalIcon\n\t\t\t\t\t\t: typeof legacyIcon === \"string\"\n\t\t\t\t\t\t\t? legacyIcon\n\t\t\t\t\t\t\t: undefined;\n\t\t\t\tif (inheritedIcon === undefined) continue;\n\t\t\t\tObject.defineProperty(config.extensionStatusIcons, targetKey, {\n\t\t\t\t\tvalue: inheritedIcon,\n\t\t\t\t\tenumerable: true,\n\t\t\t\t\tconfigurable: true,\n\t\t\t\t\twritable: true,\n\t\t\t\t});\n\t\t\t}\n\t\t}\n\t}\n\n\treturn { config, diagnostics };\n}\n\nexport function loadStatuslineSettings(settingsPath: string): LoadedStatuslineSettings {\n\tlet rawDocument: string;\n\ttry {\n\t\trawDocument = readFileSync(settingsPath, \"utf8\");\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\" && !pathExists(settingsPath)) {\n\t\t\treturn builtInSettings(settingsPath);\n\t\t}\n\t\treturn builtInSettings(settingsPath, [\n\t\t\tdiagnostic(\"error\", \"io\", \"\", `Unable to read settings: ${formatError(error)}`),\n\t\t]);\n\t}\n\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(rawDocument);\n\t} catch (error) {\n\t\treturn {\n\t\t\t...builtInSettings(settingsPath, [\n\t\t\t\tdiagnostic(\"error\", \"parse\", \"\", `Unable to parse JSON: ${formatError(error)}`),\n\t\t\t]),\n\t\t\trawDocument,\n\t\t};\n\t}\n\tconst normalized = normalizeStatuslineConfig(parsed);\n\treturn {\n\t\tconfig: normalized.config,\n\t\tsource: normalized.diagnostics.some((item) => item.severity === \"error\") ? \"built-in\" : \"user\",\n\t\tsettingsPath,\n\t\trawDocument,\n\t\tdiagnostics: normalized.diagnostics,\n\t};\n}\n\nexport function loadStatuslineSettingsForAgent(agentDir = getAgentDir()): LoadedStatuslineSettings {\n\tpendingSettingsNotice = undefined;\n\tconst canonicalPath = settingsFilePath(agentDir);\n\tconst legacyPath = join(agentDir, LEGACY_SETTINGS_FILE_NAME);\n\tconst canonical = loadStatuslineSettings(canonicalPath);\n\tif (!isMissingStatuslineSettings(canonical)) {\n\t\tif (!isMissingStatuslineSettings(loadStatuslineSettings(legacyPath))) {\n\t\t\tpendingSettingsNotice = `${LEGACY_SETTINGS_FILE_NAME} ignored because ${SETTINGS_FILE_NAME} takes precedence.`;\n\t\t}\n\t\treturn canonical;\n\t}\n\tconst legacy = loadStatuslineSettings(legacyPath);\n\treturn isMissingStatuslineSettings(legacy)\n\t\t? canonical\n\t\t: migrateLegacySettings(canonicalPath, legacy);\n}\n\nfunction migrateLegacySettings(\n\tcanonicalPath: string,\n\tlegacy: LoadedStatuslineSettings,\n): LoadedStatuslineSettings {\n\tconst racedCanonical = loadStatuslineSettings(canonicalPath);\n\tif (!isMissingStatuslineSettings(racedCanonical)) {\n\t\tpendingSettingsNotice = `${LEGACY_SETTINGS_FILE_NAME} ignored because ${SETTINGS_FILE_NAME} was created concurrently.`;\n\t\treturn racedCanonical;\n\t}\n\tif (\n\t\tlegacy.source !== \"user\" ||\n\t\tlegacy.rawDocument === undefined ||\n\t\tblockingDiagnostics(legacy.diagnostics).length > 0\n\t) {\n\t\tpendingSettingsNotice = `${LEGACY_SETTINGS_FILE_NAME} is invalid and was ignored.`;\n\t\treturn legacy;\n\t}\n\tpendingSettingsNotice = `Using legacy ${LEGACY_SETTINGS_FILE_NAME}; rename it to ${SETTINGS_FILE_NAME}. Future saves write ${SETTINGS_FILE_NAME} without modifying the legacy file.`;\n\treturn legacy;\n}\n\nfunction isMissingStatuslineSettings(settings: LoadedStatuslineSettings): boolean {\n\treturn (\n\t\tsettings.source === \"built-in\" &&\n\t\tsettings.rawDocument === undefined &&\n\t\tsettings.diagnostics.length === 0\n\t);\n}\n\nexport function saveStatuslineSettingsDocument(\n\tsettingsPath: string,\n\trawDocument: string,\n\toverrides: Partial<AtomicFileSystem> = {},\n): LoadedStatuslineSettings {\n\tlet parsed: unknown;\n\ttry {\n\t\tparsed = JSON.parse(rawDocument);\n\t} catch (error) {\n\t\tthrow new Error(`Unable to parse JSON: ${formatError(error)}`);\n\t}\n\tconst normalized = normalizeStatuslineConfig(parsed);\n\tconst blocking = blockingDiagnostics(normalized.diagnostics);\n\tif (blocking.length > 0) {\n\t\tthrow new Error(blocking.map((item) => `${item.path || \"root\"}: ${item.message}`).join(\"\\n\"));\n\t}\n\n\tconst fs = { mkdirSync, writeFileSync, renameSync, rmSync, ...overrides };\n\tconst replaceExisting = pathEntryExists(settingsPath);\n\tconst temporaryPath = temporarySettingsPath(settingsPath);\n\tlet fileIdentity: { dev: number; ino: number } | undefined;\n\ttry {\n\t\tfs.mkdirSync(dirname(settingsPath), { recursive: true });\n\t\tfs.writeFileSync(temporaryPath, rawDocument, { encoding: \"utf8\", flag: \"wx\" });\n\t\tconst info = lstatSync(temporaryPath);\n\t\tfileIdentity = { dev: info.dev, ino: info.ino };\n\t\tif (!replaceExisting && pathEntryExists(settingsPath)) {\n\t\t\tthrow new Error(`${SETTINGS_FILE_NAME} was created concurrently; reopen settings and retry.`);\n\t\t}\n\t\tfs.renameSync(temporaryPath, settingsPath);\n\t} finally {\n\t\tremoveTemporaryFile(fs.rmSync, temporaryPath);\n\t}\n\treturn {\n\t\tconfig: normalized.config,\n\t\tsource: \"user\",\n\t\tsettingsPath,\n\t\trawDocument,\n\t\t...(fileIdentity ? { fileIdentity } : {}),\n\t\tdiagnostics: normalized.diagnostics,\n\t};\n}\n\nexport function removeStatuslineSettingsDocumentIfMatches(\n\tsettingsPath: string,\n\texpectedRawDocument: string,\n\texpectedIdentity: { dev: number; ino: number },\n): void {\n\tconst quarantinePath = join(\n\t\tdirname(settingsPath),\n\t\t`.${SETTINGS_FILE_NAME}.${randomUUID()}.rollback`,\n\t);\n\tconst before = lstatSync(settingsPath);\n\tif (before.dev !== expectedIdentity.dev || before.ino !== expectedIdentity.ino) {\n\t\tthrow new Error(\"Statusline settings changed concurrently; the newer file was preserved\");\n\t}\n\trenameSync(settingsPath, quarantinePath);\n\tconst quarantined = lstatSync(quarantinePath);\n\tconst quarantinedSavedFile =\n\t\tquarantined.isFile() &&\n\t\t!quarantined.isSymbolicLink() &&\n\t\tquarantined.dev === expectedIdentity.dev &&\n\t\tquarantined.ino === expectedIdentity.ino;\n\tif (quarantinedSavedFile && readFileSync(quarantinePath, \"utf8\") === expectedRawDocument) {\n\t\trmSync(quarantinePath);\n\t\treturn;\n\t}\n\tif (quarantinedSavedFile && !pathEntryExists(settingsPath)) {\n\t\ttry {\n\t\t\trenameSync(quarantinePath, settingsPath);\n\t\t} catch {\n\t\t\t// Keep the quarantine for recovery when its atomic restoration fails.\n\t\t}\n\t}\n\tthrow new Error(\"Statusline settings changed concurrently; the newer file was preserved\");\n}\n\nexport function consumeStatuslineSettingsNotice(): string | undefined {\n\tconst notice = pendingSettingsNotice;\n\tpendingSettingsNotice = undefined;\n\treturn notice;\n}\n\nexport function readStatuslineSettings(settingsPath?: string): StatuslineConfig {\n\treturn settingsPath\n\t\t? loadStatuslineSettings(settingsPath).config\n\t\t: loadStatuslineSettingsForAgent().config;\n}\n\nexport function normalizeStatuslineSettings(value: unknown): StatuslineConfig {\n\treturn normalizeStatuslineConfig(value).config;\n}\n\nfunction normalizePalette(\n\tvalue: unknown,\n\tconfig: StatuslineConfig,\n\tdiagnostics: StatuslineConfigDiagnostic[],\n) {\n\tif (value === undefined) return;\n\tif (typeof value === \"string\") {\n\t\tif (!(PALETTE_NAMES as readonly string[]).includes(value)) {\n\t\t\tdiagnostics.push(\n\t\t\t\tinvalidDiagnostic(\n\t\t\t\t\t\"palette\",\n\t\t\t\t\t`Expected a palette object or one of: ${PALETTE_NAMES.join(\", \")}`,\n\t\t\t\t),\n\t\t\t);\n\t\t\treturn;\n\t\t}\n\t\tconfig.palettePreset = value as (typeof PALETTE_NAMES)[number];\n\t\treturn;\n\t}\n\tif (!isRecord(value)) {\n\t\tdiagnostics.push(invalidDiagnostic(\"palette\", \"Expected a palette object\"));\n\t\treturn;\n\t}\n\n\tconst palette: SegmentPalette = {};\n\tconfig.palette = palette;\n\tfor (const [name, colors] of Object.entries(value)) {\n\t\tconst path = `palette.${name}`;\n\t\tif (!isSegmentName(name)) {\n\t\t\tdiagnostics.push(unknownDiagnostic(path));\n\t\t\tcontinue;\n\t\t}\n\t\tif (!isRecord(colors)) {\n\t\t\tdiagnostics.push(invalidDiagnostic(path, \"Expected an object\"));\n\t\t\tcontinue;\n\t\t}\n\t\tconst normalizedColors: NonNullable<SegmentPalette[SegmentName]> = {};\n\t\tpalette[name] = normalizedColors;\n\t\tfor (const [field, color] of Object.entries(colors)) {\n\t\t\tconst colorPath = `${path}.${field}`;\n\t\t\tif (field !== \"fg\" && field !== \"bg\") {\n\t\t\t\tdiagnostics.push(unknownDiagnostic(colorPath));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif (typeof color !== \"string\" || !/^#[0-9a-f]{6}$/iu.test(color)) {\n\t\t\t\tdiagnostics.push(invalidDiagnostic(colorPath, \"Expected a full #RRGGBB hexadecimal color\"));\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tnormalizedColors[field] = color.toLowerCase();\n\t\t}\n\t}\n\tconfig.palette = palette;\n\tconfig.palettePreset = \"custom\";\n}\n\nfunction normalizeModelTruncation(\n\tpresentation: Record<string, unknown>,\n\tconfig: StatuslineConfig,\n\tdiagnostics: StatuslineConfigDiagnostic[],\n) {\n\tconst path = \"segmentText.model\";\n\tconst length = presentation.truncationLength;\n\tif (length !== undefined) {\n\t\tif (typeof length !== \"number\" || !Number.isInteger(length) || length < 0 || length > 1000) {\n\t\t\tdiagnostics.push(\n\t\t\t\tinvalidDiagnostic(`${path}.truncationLength`, \"Expected an integer from 0 through 1000\"),\n\t\t\t);\n\t\t} else config.segmentText.model.truncationLength = length;\n\t}\n\n\tconst symbol = presentation.truncationSymbol;\n\tif (symbol !== undefined && isSafeSegmentText(symbol, `${path}.truncationSymbol`, diagnostics)) {\n\t\tconfig.segmentText.model.truncationSymbol = symbol;\n\t}\n\n\tconst direction = presentation.truncationDirection;\n\tif (direction !== undefined) {\n\t\tif (\n\t\t\ttypeof direction !== \"string\" ||\n\t\t\t!TRUNCATION_DIRECTIONS.includes(direction as (typeof TRUNCATION_DIRECTIONS)[number])\n\t\t) {\n\t\t\tdiagnostics.push(\n\t\t\t\tinvalidDiagnostic(\n\t\t\t\t\t`${path}.truncationDirection`,\n\t\t\t\t\t`Expected one of: ${TRUNCATION_DIRECTIONS.join(\", \")}`,\n\t\t\t\t),\n\t\t\t);\n\t\t} else {\n\t\t\tconfig.segmentText.model.truncationDirection =\n\t\t\t\tdirection as (typeof TRUNCATION_DIRECTIONS)[number];\n\t\t}\n\t}\n}\n\nfunction isSafeSegmentText(\n\tvalue: unknown,\n\tpath: string,\n\tdiagnostics: StatuslineConfigDiagnostic[],\n): value is string {\n\tif (typeof value !== \"string\") {\n\t\tdiagnostics.push(invalidDiagnostic(path, \"Expected a string\"));\n\t\treturn false;\n\t}\n\tif (/[\\r\\n\\u2028\\u2029]/u.test(value)) {\n\t\tdiagnostics.push(invalidDiagnostic(path, \"Line breaks are not allowed; use line_break\"));\n\t\treturn false;\n\t}\n\tif (hasControlCharacter(value)) {\n\t\tdiagnostics.push(invalidDiagnostic(path, \"Control characters are not allowed\"));\n\t\treturn false;\n\t}\n\treturn true;\n}\n\nfunction normalizeEnum<\n\tK extends \"palettePreset\" | \"density\" | \"separator\",\n\tT extends StatuslineConfig[K],\n>(\n\tvalue: Record<string, unknown>,\n\tfield: K,\n\taccepted: readonly T[],\n\tconfig: StatuslineConfig,\n\tdiagnostics: StatuslineConfigDiagnostic[],\n) {\n\tconst candidate = value[field];\n\tif (candidate === undefined) return;\n\tif (typeof candidate !== \"string\" || !accepted.includes(candidate as T)) {\n\t\tdiagnostics.push(\n\t\t\tinvalidDiagnostic(field, `Expected one of: ${accepted.map(String).join(\", \")}`),\n\t\t);\n\t\treturn;\n\t}\n\tconfig[field] = candidate as StatuslineConfig[K];\n}\n\nfunction cloneSegmentPalette(palette: SegmentPalette): SegmentPalette {\n\treturn Object.fromEntries(\n\t\tObject.entries(palette).map(([name, colors]) => [name, { ...colors }]),\n\t) as SegmentPalette;\n}\n\nfunction cloneConfig(config: StatuslineConfig): StatuslineConfig {\n\treturn {\n\t\t...config,\n\t\tpalette: cloneSegmentPalette(config.palette),\n\t\tsegments: [...config.segments],\n\t\tsegmentText: Object.fromEntries(\n\t\t\tSEGMENT_NAMES.map((name) => [name, { ...config.segmentText[name] }]),\n\t\t) as StatuslineConfig[\"segmentText\"],\n\t\textensionStatusIcons: { ...config.extensionStatusIcons },\n\t};\n}\n\nfunction builtInSettings(\n\tsettingsPath: string,\n\tdiagnostics: StatuslineConfigDiagnostic[] = [],\n): LoadedStatuslineSettings {\n\treturn {\n\t\tconfig: createDefaultConfig(),\n\t\tsource: \"built-in\",\n\t\tsettingsPath,\n\t\tdiagnostics,\n\t};\n}\n\nfunction hasControlCharacter(value: string): boolean {\n\tfor (const character of value) {\n\t\tconst codePoint = character.codePointAt(0) ?? 0;\n\t\tif (codePoint <= 0x1f || (codePoint >= 0x7f && codePoint <= 0x9f)) return true;\n\t}\n\treturn false;\n}\n\nfunction isRecord(value: unknown): value is Record<string, unknown> {\n\treturn typeof value === \"object\" && value !== null && !Array.isArray(value);\n}\n\nfunction isConfigSegmentName(value: string): value is ConfigSegmentName {\n\treturn value === LINE_BREAK_SEGMENT_NAME || isSegmentName(value);\n}\n\nfunction isPaletteName(value: StatuslineConfig[\"palettePreset\"]): value is PaletteName {\n\treturn (PALETTE_NAMES as readonly StatuslineConfig[\"palettePreset\"][]).includes(value);\n}\n\nfunction isSegmentName(value: string): value is SegmentName {\n\treturn (SEGMENT_NAMES as readonly string[]).includes(value);\n}\n\nfunction blockingDiagnostics(\n\tdiagnostics: readonly StatuslineConfigDiagnostic[],\n): StatuslineConfigDiagnostic[] {\n\treturn diagnostics.filter((item) => item.code !== \"unknown\");\n}\n\nfunction unknownDiagnostic(path: string): StatuslineConfigDiagnostic {\n\treturn diagnostic(\"warning\", \"unknown\", path, `Unknown setting ${JSON.stringify(path)}`);\n}\n\nfunction invalidDiagnostic(\n\tpath: string,\n\tmessage: string,\n\tseverity: StatuslineConfigDiagnostic[\"severity\"] = \"warning\",\n): StatuslineConfigDiagnostic {\n\treturn diagnostic(severity, \"invalid\", path, message);\n}\n\nfunction diagnostic(\n\tseverity: StatuslineConfigDiagnostic[\"severity\"],\n\tcode: StatuslineConfigDiagnostic[\"code\"],\n\tpath: string,\n\tmessage: string,\n): StatuslineConfigDiagnostic {\n\treturn { severity, code, path, message };\n}\n\nfunction temporarySettingsPath(settingsPath: string): string {\n\treturn join(dirname(settingsPath), `.${SETTINGS_FILE_NAME}.${randomUUID()}.tmp`);\n}\n\nfunction removeTemporaryFile(remove: typeof rmSync, temporaryPath: string) {\n\ttry {\n\t\tremove(temporaryPath, { force: true });\n\t} catch {\n\t\t// Best-effort cleanup must not replace the original operation result.\n\t}\n}\n\nfunction pathExists(path: string): boolean {\n\ttry {\n\t\tlstatSync(path);\n\t\treturn true;\n\t} catch {\n\t\treturn false;\n\t}\n}\n\nfunction pathEntryExists(path: string): boolean {\n\ttry {\n\t\tlstatSync(path);\n\t\treturn true;\n\t} catch (error) {\n\t\tif ((error as NodeJS.ErrnoException).code === \"ENOENT\") return false;\n\t\tthrow error;\n\t}\n}\n\nfunction formatError(error: unknown): string {\n\treturn error instanceof Error ? error.message : String(error);\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": []
|
|
7
|
+
}
|