@kenkaiiii/ggcoder 4.3.13 → 4.3.15

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (121) hide show
  1. package/dist/cli.js.map +1 -1
  2. package/dist/config.d.ts +2 -1
  3. package/dist/config.d.ts.map +1 -1
  4. package/dist/config.js +13 -1
  5. package/dist/config.js.map +1 -1
  6. package/dist/core/settings-manager.d.ts +4 -0
  7. package/dist/core/settings-manager.d.ts.map +1 -1
  8. package/dist/core/settings-manager.js +11 -1
  9. package/dist/core/settings-manager.js.map +1 -1
  10. package/dist/tools/bash.d.ts.map +1 -1
  11. package/dist/tools/bash.js +8 -1
  12. package/dist/tools/bash.js.map +1 -1
  13. package/dist/ui/App.d.ts +2 -0
  14. package/dist/ui/App.d.ts.map +1 -1
  15. package/dist/ui/App.js +69 -57
  16. package/dist/ui/App.js.map +1 -1
  17. package/dist/ui/components/ActivityIndicator.d.ts +3 -1
  18. package/dist/ui/components/ActivityIndicator.d.ts.map +1 -1
  19. package/dist/ui/components/ActivityIndicator.js +4 -1
  20. package/dist/ui/components/ActivityIndicator.js.map +1 -1
  21. package/dist/ui/components/DiffFrame.d.ts +10 -0
  22. package/dist/ui/components/DiffFrame.d.ts.map +1 -0
  23. package/dist/ui/components/DiffFrame.js +13 -0
  24. package/dist/ui/components/DiffFrame.js.map +1 -0
  25. package/dist/ui/components/Footer.d.ts +2 -1
  26. package/dist/ui/components/Footer.d.ts.map +1 -1
  27. package/dist/ui/components/Footer.js +4 -1
  28. package/dist/ui/components/Footer.js.map +1 -1
  29. package/dist/ui/components/InputArea.d.ts.map +1 -1
  30. package/dist/ui/components/InputArea.js +297 -8
  31. package/dist/ui/components/InputArea.js.map +1 -1
  32. package/dist/ui/components/Markdown.d.ts +1 -1
  33. package/dist/ui/components/Markdown.d.ts.map +1 -1
  34. package/dist/ui/components/Markdown.js +18 -213
  35. package/dist/ui/components/Markdown.js.map +1 -1
  36. package/dist/ui/components/Ratchet.d.ts.map +1 -1
  37. package/dist/ui/components/Ratchet.js +9 -2
  38. package/dist/ui/components/Ratchet.js.map +1 -1
  39. package/dist/ui/components/ThemeSelector.d.ts +9 -0
  40. package/dist/ui/components/ThemeSelector.d.ts.map +1 -0
  41. package/dist/ui/components/ThemeSelector.js +25 -0
  42. package/dist/ui/components/ThemeSelector.js.map +1 -0
  43. package/dist/ui/components/ToolExecution.d.ts +2 -0
  44. package/dist/ui/components/ToolExecution.d.ts.map +1 -1
  45. package/dist/ui/components/ToolExecution.js +34 -15
  46. package/dist/ui/components/ToolExecution.js.map +1 -1
  47. package/dist/ui/components/ToolGroupExecution.d.ts +3 -2
  48. package/dist/ui/components/ToolGroupExecution.d.ts.map +1 -1
  49. package/dist/ui/components/ToolGroupExecution.js +68 -51
  50. package/dist/ui/components/ToolGroupExecution.js.map +1 -1
  51. package/dist/ui/hooks/useAgentLoop.d.ts +2 -0
  52. package/dist/ui/hooks/useAgentLoop.d.ts.map +1 -1
  53. package/dist/ui/hooks/useAgentLoop.js +1 -0
  54. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  55. package/dist/ui/hooks/useDoublePress.d.ts +8 -0
  56. package/dist/ui/hooks/useDoublePress.d.ts.map +1 -0
  57. package/dist/ui/hooks/useDoublePress.js +44 -0
  58. package/dist/ui/hooks/useDoublePress.js.map +1 -0
  59. package/dist/ui/live-item-flush.d.ts +4 -0
  60. package/dist/ui/live-item-flush.d.ts.map +1 -1
  61. package/dist/ui/live-item-flush.js +36 -0
  62. package/dist/ui/live-item-flush.js.map +1 -1
  63. package/dist/ui/render.d.ts +2 -1
  64. package/dist/ui/render.d.ts.map +1 -1
  65. package/dist/ui/render.js +9 -3
  66. package/dist/ui/render.js.map +1 -1
  67. package/dist/ui/stores/create-store.d.ts +15 -0
  68. package/dist/ui/stores/create-store.d.ts.map +1 -0
  69. package/dist/ui/stores/create-store.js +30 -0
  70. package/dist/ui/stores/create-store.js.map +1 -0
  71. package/dist/ui/stores/index.d.ts +3 -0
  72. package/dist/ui/stores/index.d.ts.map +1 -0
  73. package/dist/ui/stores/index.js +3 -0
  74. package/dist/ui/stores/index.js.map +1 -0
  75. package/dist/ui/stores/taskbar-store.d.ts +19 -0
  76. package/dist/ui/stores/taskbar-store.d.ts.map +1 -0
  77. package/dist/ui/stores/taskbar-store.js +59 -0
  78. package/dist/ui/stores/taskbar-store.js.map +1 -0
  79. package/dist/ui/theme/dark-ansi.json +48 -0
  80. package/dist/ui/theme/dark-daltonized.json +48 -0
  81. package/dist/ui/theme/dark.json +22 -1
  82. package/dist/ui/theme/detect-theme.d.ts +12 -8
  83. package/dist/ui/theme/detect-theme.d.ts.map +1 -1
  84. package/dist/ui/theme/detect-theme.js +43 -18
  85. package/dist/ui/theme/detect-theme.js.map +1 -1
  86. package/dist/ui/theme/light-ansi.json +48 -0
  87. package/dist/ui/theme/light-daltonized.json +48 -0
  88. package/dist/ui/theme/light.json +44 -23
  89. package/dist/ui/theme/theme.d.ts +27 -1
  90. package/dist/ui/theme/theme.d.ts.map +1 -1
  91. package/dist/ui/theme/theme.js +24 -1
  92. package/dist/ui/theme/theme.js.map +1 -1
  93. package/dist/ui/utils/highlight.d.ts +1 -1
  94. package/dist/ui/utils/highlight.d.ts.map +1 -1
  95. package/dist/ui/utils/highlight.js +24 -4
  96. package/dist/ui/utils/highlight.js.map +1 -1
  97. package/dist/ui/utils/hyperlink.d.ts +11 -0
  98. package/dist/ui/utils/hyperlink.d.ts.map +1 -0
  99. package/dist/ui/utils/hyperlink.js +27 -0
  100. package/dist/ui/utils/hyperlink.js.map +1 -0
  101. package/dist/ui/utils/markdown-cache.d.ts +5 -6
  102. package/dist/ui/utils/markdown-cache.d.ts.map +1 -1
  103. package/dist/ui/utils/markdown-cache.js +5 -5
  104. package/dist/ui/utils/markdown-cache.js.map +1 -1
  105. package/dist/ui/utils/signal.d.ts +21 -0
  106. package/dist/ui/utils/signal.d.ts.map +1 -0
  107. package/dist/ui/utils/signal.js +30 -0
  108. package/dist/ui/utils/signal.js.map +1 -0
  109. package/dist/ui/utils/supports-hyperlinks.d.ts +6 -0
  110. package/dist/ui/utils/supports-hyperlinks.d.ts.map +1 -0
  111. package/dist/ui/utils/supports-hyperlinks.js +52 -0
  112. package/dist/ui/utils/supports-hyperlinks.js.map +1 -0
  113. package/dist/ui/utils/sync-output.d.ts +16 -0
  114. package/dist/ui/utils/sync-output.d.ts.map +1 -0
  115. package/dist/ui/utils/sync-output.js +70 -0
  116. package/dist/ui/utils/sync-output.js.map +1 -0
  117. package/dist/ui/utils/token-to-ansi.d.ts +9 -0
  118. package/dist/ui/utils/token-to-ansi.d.ts.map +1 -0
  119. package/dist/ui/utils/token-to-ansi.js +305 -0
  120. package/dist/ui/utils/token-to-ansi.js.map +1 -0
  121. package/package.json +3 -3
@@ -1,12 +1,16 @@
1
+ import type { ThemeName } from "./theme.js";
1
2
  /**
2
- * Detect whether the terminal uses a dark or light background.
3
+ * Detect the best theme for the current terminal.
3
4
  *
4
- * Detection chain (first match wins):
5
- * 1. VSCODE_THEME_KIND env var (VS Code integrated terminal)
6
- * 2. macOS system dark mode (defaults read -g AppleInterfaceStyle)
7
- * 3. OSC 11 escape sequence query (most modern terminals)
8
- * 4. COLORFGBG env var (rxvt, some other terminals)
9
- * 5. Default to "dark"
5
+ * Detection chain for base theme (first match wins):
6
+ * 1. FORCE_THEME env var (explicit override with any ThemeName)
7
+ * 2. VSCODE_THEME_KIND env var (VS Code integrated terminal)
8
+ * 3. macOS system dark mode (defaults read -g AppleInterfaceStyle)
9
+ * 4. OSC 11 escape sequence query (most modern terminals)
10
+ * 5. COLORFGBG env var (rxvt, some other terminals)
11
+ * 6. Default to "dark"
12
+ *
13
+ * Auto-selects ANSI fallback variant when truecolor is not supported.
10
14
  */
11
- export declare function detectTheme(): Promise<"dark" | "light">;
15
+ export declare function detectTheme(): Promise<ThemeName>;
12
16
  //# sourceMappingURL=detect-theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"detect-theme.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/detect-theme.ts"],"names":[],"mappings":"AAEA;;;;;;;;;GASG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,MAAM,GAAG,OAAO,CAAC,CAuC7D"}
1
+ {"version":3,"file":"detect-theme.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/detect-theme.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C;;;;;;;;;;;;GAYG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,SAAS,CAAC,CAmDtD"}
@@ -1,15 +1,24 @@
1
1
  import { execFileSync } from "node:child_process";
2
+ import chalk from "chalk";
2
3
  /**
3
- * Detect whether the terminal uses a dark or light background.
4
+ * Detect the best theme for the current terminal.
4
5
  *
5
- * Detection chain (first match wins):
6
- * 1. VSCODE_THEME_KIND env var (VS Code integrated terminal)
7
- * 2. macOS system dark mode (defaults read -g AppleInterfaceStyle)
8
- * 3. OSC 11 escape sequence query (most modern terminals)
9
- * 4. COLORFGBG env var (rxvt, some other terminals)
10
- * 5. Default to "dark"
6
+ * Detection chain for base theme (first match wins):
7
+ * 1. FORCE_THEME env var (explicit override with any ThemeName)
8
+ * 2. VSCODE_THEME_KIND env var (VS Code integrated terminal)
9
+ * 3. macOS system dark mode (defaults read -g AppleInterfaceStyle)
10
+ * 4. OSC 11 escape sequence query (most modern terminals)
11
+ * 5. COLORFGBG env var (rxvt, some other terminals)
12
+ * 6. Default to "dark"
13
+ *
14
+ * Auto-selects ANSI fallback variant when truecolor is not supported.
11
15
  */
12
16
  export async function detectTheme() {
17
+ // 0. Explicit override
18
+ const forceTheme = process.env["FORCE_THEME"];
19
+ if (forceTheme && isValidThemeName(forceTheme)) {
20
+ return forceTheme;
21
+ }
13
22
  // 1. VS Code sets this reliably
14
23
  const vscodeTheme = process.env["VSCODE_THEME_KIND"];
15
24
  if (vscodeTheme) {
@@ -31,21 +40,37 @@ export async function detectTheme() {
31
40
  }
32
41
  }
33
42
  // 3. OSC 11 — query actual terminal background color
34
- const osc = await queryOSC11();
35
- if (osc !== null)
36
- return osc;
43
+ let base = await queryOSC11();
37
44
  // 4. COLORFGBG — "fg;bg" ANSI color indices
38
- const colorfgbg = process.env["COLORFGBG"];
39
- if (colorfgbg) {
40
- const parts = colorfgbg.split(";");
41
- const bg = parseInt(parts[parts.length - 1], 10);
42
- if (!isNaN(bg)) {
43
- // ANSI colors: 0-6 and 8 are dark, 7 and 9-15 are light
44
- return bg === 7 || (bg >= 9 && bg <= 15) ? "light" : "dark";
45
+ if (base === null) {
46
+ const colorfgbg = process.env["COLORFGBG"];
47
+ if (colorfgbg) {
48
+ const parts = colorfgbg.split(";");
49
+ const bg = parseInt(parts[parts.length - 1], 10);
50
+ if (!isNaN(bg)) {
51
+ base = bg === 7 || (bg >= 9 && bg <= 15) ? "light" : "dark";
52
+ }
45
53
  }
46
54
  }
47
55
  // 5. Default
48
- return "dark";
56
+ if (base === null)
57
+ base = "dark";
58
+ // Auto-select ANSI variant for terminals without truecolor support
59
+ if (chalk.level < 3) {
60
+ return `${base}-ansi`;
61
+ }
62
+ return base;
63
+ }
64
+ const VALID_THEMES = new Set([
65
+ "dark",
66
+ "light",
67
+ "dark-ansi",
68
+ "light-ansi",
69
+ "dark-daltonized",
70
+ "light-daltonized",
71
+ ]);
72
+ function isValidThemeName(name) {
73
+ return VALID_THEMES.has(name);
49
74
  }
50
75
  /**
51
76
  * Send OSC 11 query to the terminal and parse the background color response.
@@ -1 +1 @@
1
- {"version":3,"file":"detect-theme.js","sourceRoot":"","sources":["../../../src/ui/theme/detect-theme.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detect-theme.js","sourceRoot":"","sources":["../../../src/ui/theme/detect-theme.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "light-ansi",
3
+ "primary": "#55ffff",
4
+ "secondary": "#ff55ff",
5
+ "success": "#55ff55",
6
+ "error": "#ff5555",
7
+ "warning": "#ffff55",
8
+ "text": "#ffffff",
9
+ "textDim": "#aaaaaa",
10
+ "textMuted": "#aaaaaa",
11
+ "secondaryText": "#aaaaaa",
12
+ "border": "#555555",
13
+ "background": "",
14
+ "accent": "#55ffff",
15
+ "toolName": "#55ffff",
16
+ "toolSuccess": "#55ff55",
17
+ "toolError": "#ff5555",
18
+ "diffAdded": "#55ff55",
19
+ "diffRemoved": "#ff5555",
20
+ "diffContext": "#aaaaaa",
21
+ "diffAddedDimmed": "#55ff55",
22
+ "diffRemovedDimmed": "#ff5555",
23
+ "diffAddedWord": "#55ff55",
24
+ "diffRemovedWord": "#ff5555",
25
+ "diffAddedWordDimmed": "#55ff55",
26
+ "diffRemovedWordDimmed": "#ff5555",
27
+ "spinnerColor": "#55ffff",
28
+ "claude": "#ff5555",
29
+ "claudeShimmer": "#ff5555",
30
+ "permission": "#55ffff",
31
+ "permissionShimmer": "#55ffff",
32
+ "inputPrompt": "#55ffff",
33
+ "footerText": "#aaaaaa",
34
+ "commandColor": "#ff55ff",
35
+ "planPrimary": "#ffff55",
36
+ "planBorder": "#ffff55",
37
+ "subtle": "#555555",
38
+ "link": "#55ffff",
39
+ "code": "#ffff55",
40
+ "subagent1": "#ff5555",
41
+ "subagent2": "#55ffff",
42
+ "subagent3": "#55ff55",
43
+ "subagent4": "#ffff55",
44
+ "subagent5": "#ff55ff",
45
+ "subagent6": "#ff5555",
46
+ "subagent7": "#ff55ff",
47
+ "subagent8": "#55ffff"
48
+ }
@@ -0,0 +1,48 @@
1
+ {
2
+ "name": "light-daltonized",
3
+ "primary": "#93c5fd",
4
+ "secondary": "#c4b5fd",
5
+ "success": "#93c5fd",
6
+ "error": "#fbbf24",
7
+ "warning": "#fbbf24",
8
+ "text": "#e5e7eb",
9
+ "textDim": "#6b7280",
10
+ "textMuted": "#9ca3af",
11
+ "secondaryText": "#999999",
12
+ "border": "#374151",
13
+ "background": "",
14
+ "accent": "#a5b4fc",
15
+ "toolName": "#93c5fd",
16
+ "toolSuccess": "#93c5fd",
17
+ "toolError": "#fbbf24",
18
+ "diffAdded": "#93c5fd",
19
+ "diffRemoved": "#fbbf24",
20
+ "diffContext": "#6b7280",
21
+ "diffAddedDimmed": "#bfdbfe",
22
+ "diffRemovedDimmed": "#fde68a",
23
+ "diffAddedWord": "#60a5fa",
24
+ "diffRemovedWord": "#f59e0b",
25
+ "diffAddedWordDimmed": "#93c5fd",
26
+ "diffRemovedWordDimmed": "#fbbf24",
27
+ "spinnerColor": "#93c5fd",
28
+ "claude": "#fb923c",
29
+ "claudeShimmer": "#fdba74",
30
+ "permission": "#a5b4fc",
31
+ "permissionShimmer": "#c7d2fe",
32
+ "inputPrompt": "#93c5fd",
33
+ "footerText": "#6b7280",
34
+ "commandColor": "#a5b4fc",
35
+ "planPrimary": "#fbbf24",
36
+ "planBorder": "#f59e0b",
37
+ "subtle": "#4b5563",
38
+ "link": "#93c5fd",
39
+ "code": "#fbbf24",
40
+ "subagent1": "#fbbf24",
41
+ "subagent2": "#93c5fd",
42
+ "subagent3": "#a5b4fc",
43
+ "subagent4": "#c4b5fd",
44
+ "subagent5": "#c084fc",
45
+ "subagent6": "#fb923c",
46
+ "subagent7": "#a5b4fc",
47
+ "subagent8": "#22d3ee"
48
+ }
@@ -1,27 +1,48 @@
1
1
  {
2
2
  "name": "light",
3
- "primary": "#2563eb",
4
- "secondary": "#7c3aed",
5
- "success": "#16a34a",
6
- "error": "#dc2626",
7
- "warning": "#d97706",
8
- "text": "#1f2937",
9
- "textDim": "#9ca3af",
10
- "textMuted": "#6b7280",
11
- "border": "#d1d5db",
3
+ "primary": "#93c5fd",
4
+ "secondary": "#c4b5fd",
5
+ "success": "#4ade80",
6
+ "error": "#f87171",
7
+ "warning": "#fbbf24",
8
+ "text": "#e5e7eb",
9
+ "textDim": "#6b7280",
10
+ "textMuted": "#9ca3af",
11
+ "secondaryText": "#999999",
12
+ "border": "#374151",
12
13
  "background": "",
13
- "accent": "#4f46e5",
14
- "toolName": "#2563eb",
15
- "toolSuccess": "#16a34a",
16
- "toolError": "#dc2626",
17
- "diffAdded": "#16a34a",
18
- "diffRemoved": "#dc2626",
19
- "diffContext": "#9ca3af",
20
- "spinnerColor": "#2563eb",
21
- "inputPrompt": "#2563eb",
22
- "footerText": "#9ca3af",
23
- "commandColor": "#4f46e5",
24
- "planPrimary": "#d97706",
25
- "planBorder": "#b45309",
26
- "subtle": "#d1d5db"
14
+ "accent": "#a5b4fc",
15
+ "toolName": "#93c5fd",
16
+ "toolSuccess": "#4ade80",
17
+ "toolError": "#f87171",
18
+ "diffAdded": "#4ade80",
19
+ "diffRemoved": "#f87171",
20
+ "diffContext": "#6b7280",
21
+ "diffAddedDimmed": "#69db7c",
22
+ "diffRemovedDimmed": "#ffa8b4",
23
+ "diffAddedWord": "#86efac",
24
+ "diffRemovedWord": "#fca5a5",
25
+ "diffAddedWordDimmed": "#6ee7b7",
26
+ "diffRemovedWordDimmed": "#fda4af",
27
+ "spinnerColor": "#93c5fd",
28
+ "claude": "#fb923c",
29
+ "claudeShimmer": "#fdba74",
30
+ "permission": "#a5b4fc",
31
+ "permissionShimmer": "#c7d2fe",
32
+ "inputPrompt": "#93c5fd",
33
+ "footerText": "#6b7280",
34
+ "commandColor": "#a5b4fc",
35
+ "planPrimary": "#fbbf24",
36
+ "planBorder": "#f59e0b",
37
+ "subtle": "#4b5563",
38
+ "link": "#93c5fd",
39
+ "code": "#fbbf24",
40
+ "subagent1": "#f87171",
41
+ "subagent2": "#93c5fd",
42
+ "subagent3": "#4ade80",
43
+ "subagent4": "#fbbf24",
44
+ "subagent5": "#c4b5fd",
45
+ "subagent6": "#fb923c",
46
+ "subagent7": "#f472b6",
47
+ "subagent8": "#22d3ee"
27
48
  }
@@ -1,6 +1,7 @@
1
1
  import darkTheme from "./dark.json";
2
2
  export type Theme = typeof darkTheme;
3
- export declare function loadTheme(name: "dark" | "light"): Theme;
3
+ export type ThemeName = "dark" | "light" | "dark-ansi" | "light-ansi" | "dark-daltonized" | "light-daltonized";
4
+ export declare function loadTheme(name: ThemeName): Theme;
4
5
  export declare const ThemeContext: import("react").Context<{
5
6
  name: string;
6
7
  primary: string;
@@ -11,6 +12,7 @@ export declare const ThemeContext: import("react").Context<{
11
12
  text: string;
12
13
  textDim: string;
13
14
  textMuted: string;
15
+ secondaryText: string;
14
16
  border: string;
15
17
  background: string;
16
18
  accent: string;
@@ -20,13 +22,37 @@ export declare const ThemeContext: import("react").Context<{
20
22
  diffAdded: string;
21
23
  diffRemoved: string;
22
24
  diffContext: string;
25
+ diffAddedDimmed: string;
26
+ diffRemovedDimmed: string;
27
+ diffAddedWord: string;
28
+ diffRemovedWord: string;
29
+ diffAddedWordDimmed: string;
30
+ diffRemovedWordDimmed: string;
23
31
  spinnerColor: string;
32
+ claude: string;
33
+ claudeShimmer: string;
34
+ permission: string;
35
+ permissionShimmer: string;
24
36
  inputPrompt: string;
25
37
  footerText: string;
26
38
  commandColor: string;
27
39
  planPrimary: string;
28
40
  planBorder: string;
29
41
  subtle: string;
42
+ link: string;
43
+ code: string;
44
+ subagent1: string;
45
+ subagent2: string;
46
+ subagent3: string;
47
+ subagent4: string;
48
+ subagent5: string;
49
+ subagent6: string;
50
+ subagent7: string;
51
+ subagent8: string;
30
52
  }>;
53
+ /** Callback to switch theme at runtime. Null when not inside ThemeProvider. */
54
+ export declare const SetThemeContext: import("react").Context<((name: ThemeName) => void) | null>;
31
55
  export declare function useTheme(): Theme;
56
+ /** Returns a function to switch themes at runtime. Returns null if not available. */
57
+ export declare function useSetTheme(): ((name: ThemeName) => void) | null;
32
58
  //# sourceMappingURL=theme.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAuB;AAG1D,MAAM,MAAM,KAAK,GAAG,OAAO,SAAS,CAAC;AAErC,wBAAgB,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,GAAG,KAAK,CAEvD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;EAAkC,CAAC;AAE5D,wBAAgB,QAAQ,IAAI,KAAK,CAEhC"}
1
+ {"version":3,"file":"theme.d.ts","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AACA,OAAO,SAAS,MAAM,aAAa,CAAuB;AAO1D,MAAM,MAAM,KAAK,GAAG,OAAO,SAAS,CAAC;AAErC,MAAM,MAAM,SAAS,GACjB,MAAM,GACN,OAAO,GACP,WAAW,GACX,YAAY,GACZ,iBAAiB,GACjB,kBAAkB,CAAC;AAEvB,wBAAgB,SAAS,CAAC,IAAI,EAAE,SAAS,GAAG,KAAK,CAehD;AAED,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAAkC,CAAC;AAE5D,+EAA+E;AAC/E,eAAO,MAAM,eAAe,kCAAyB,SAAS,KAAK,IAAI,SAAe,CAAC;AAEvF,wBAAgB,QAAQ,IAAI,KAAK,CAEhC;AAED,qFAAqF;AACrF,wBAAgB,WAAW,IAAI,CAAC,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAC,GAAG,IAAI,CAEhE"}
@@ -1,11 +1,34 @@
1
1
  import { createContext, useContext } from "react";
2
2
  import darkTheme from "./dark.json" with { type: "json" };
3
3
  import lightTheme from "./light.json" with { type: "json" };
4
+ import darkAnsiTheme from "./dark-ansi.json" with { type: "json" };
5
+ import lightAnsiTheme from "./light-ansi.json" with { type: "json" };
6
+ import darkDaltonizedTheme from "./dark-daltonized.json" with { type: "json" };
7
+ import lightDaltonizedTheme from "./light-daltonized.json" with { type: "json" };
4
8
  export function loadTheme(name) {
5
- return name === "light" ? lightTheme : darkTheme;
9
+ switch (name) {
10
+ case "light":
11
+ return lightTheme;
12
+ case "dark-ansi":
13
+ return darkAnsiTheme;
14
+ case "light-ansi":
15
+ return lightAnsiTheme;
16
+ case "dark-daltonized":
17
+ return darkDaltonizedTheme;
18
+ case "light-daltonized":
19
+ return lightDaltonizedTheme;
20
+ default:
21
+ return darkTheme;
22
+ }
6
23
  }
7
24
  export const ThemeContext = createContext(darkTheme);
25
+ /** Callback to switch theme at runtime. Null when not inside ThemeProvider. */
26
+ export const SetThemeContext = createContext(null);
8
27
  export function useTheme() {
9
28
  return useContext(ThemeContext);
10
29
  }
30
+ /** Returns a function to switch themes at runtime. Returns null if not available. */
31
+ export function useSetTheme() {
32
+ return useContext(SetThemeContext);
33
+ }
11
34
  //# sourceMappingURL=theme.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,SAAS,MAAM,aAAa,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1D,OAAO,UAAU,MAAM,cAAc,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAI5D,MAAM,UAAU,SAAS,CAAC,IAAsB;IAC9C,OAAO,IAAI,KAAK,OAAO,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;AACnD,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAQ,SAAS,CAAC,CAAC;AAE5D,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC"}
1
+ {"version":3,"file":"theme.js","sourceRoot":"","sources":["../../../src/ui/theme/theme.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,MAAM,OAAO,CAAC;AAClD,OAAO,SAAS,MAAM,aAAa,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC1D,OAAO,UAAU,MAAM,cAAc,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC5D,OAAO,aAAa,MAAM,kBAAkB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACnE,OAAO,cAAc,MAAM,mBAAmB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AACrE,OAAO,mBAAmB,MAAM,wBAAwB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAC/E,OAAO,oBAAoB,MAAM,yBAAyB,CAAC,OAAO,IAAI,EAAE,MAAM,EAAE,CAAC;AAYjF,MAAM,UAAU,SAAS,CAAC,IAAe;IACvC,QAAQ,IAAI,EAAE,CAAC;QACb,KAAK,OAAO;YACV,OAAO,UAAU,CAAC;QACpB,KAAK,WAAW;YACd,OAAO,aAAa,CAAC;QACvB,KAAK,YAAY;YACf,OAAO,cAAc,CAAC;QACxB,KAAK,iBAAiB;YACpB,OAAO,mBAAmB,CAAC;QAC7B,KAAK,kBAAkB;YACrB,OAAO,oBAAoB,CAAC;QAC9B;YACE,OAAO,SAAS,CAAC;IACrB,CAAC;AACH,CAAC;AAED,MAAM,CAAC,MAAM,YAAY,GAAG,aAAa,CAAQ,SAAS,CAAC,CAAC;AAE5D,+EAA+E;AAC/E,MAAM,CAAC,MAAM,eAAe,GAAG,aAAa,CAAqC,IAAI,CAAC,CAAC;AAEvF,MAAM,UAAU,QAAQ;IACtB,OAAO,UAAU,CAAC,YAAY,CAAC,CAAC;AAClC,CAAC;AAED,qFAAqF;AACrF,MAAM,UAAU,WAAW;IACzB,OAAO,UAAU,CAAC,eAAe,CAAC,CAAC;AACrC,CAAC"}
@@ -2,7 +2,7 @@
2
2
  export declare function langFromPath(filePath: string): string | undefined;
3
3
  /**
4
4
  * Syntax-highlight code. Returns ANSI string.
5
- * Falls back to raw code if language unknown.
5
+ * Falls back to raw code if the highlighter hasn't loaded yet or language is unknown.
6
6
  */
7
7
  export declare function highlightCode(code: string, language?: string): string;
8
8
  //# sourceMappingURL=highlight.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/highlight.ts"],"names":[],"mappings":"AA+BA,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGjE;AAED;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CAOrE"}
1
+ {"version":3,"file":"highlight.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/highlight.ts"],"names":[],"mappings":"AA8BA,gDAAgD;AAChD,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAGjE;AA4BD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,GAAG,MAAM,CASrE"}
@@ -1,4 +1,3 @@
1
- import { highlight, supportsLanguage } from "cli-highlight";
2
1
  import path from "node:path";
3
2
  /** Map file extension to cli-highlight language name */
4
3
  const EXT_TO_LANG = {
@@ -32,15 +31,36 @@ export function langFromPath(filePath) {
32
31
  const ext = path.extname(filePath).replace(/^\./, "").toLowerCase();
33
32
  return EXT_TO_LANG[ext];
34
33
  }
34
+ // Lazy-load cli-highlight so it doesn't block initial render.
35
+ // First call returns plain text; subsequent calls use the loaded highlighter.
36
+ let hlModule;
37
+ let loadAttempted = false;
38
+ function ensureLoaded() {
39
+ if (hlModule)
40
+ return hlModule;
41
+ if (loadAttempted)
42
+ return undefined;
43
+ loadAttempted = true;
44
+ // Kick off async load for next call
45
+ import("cli-highlight").then((m) => {
46
+ hlModule = m;
47
+ }, () => {
48
+ // Failed to load — will fall back to plain text permanently
49
+ });
50
+ return undefined;
51
+ }
35
52
  /**
36
53
  * Syntax-highlight code. Returns ANSI string.
37
- * Falls back to raw code if language unknown.
54
+ * Falls back to raw code if the highlighter hasn't loaded yet or language is unknown.
38
55
  */
39
56
  export function highlightCode(code, language) {
40
- if (!language || !supportsLanguage(language))
57
+ if (!language)
58
+ return code;
59
+ const hl = ensureLoaded();
60
+ if (!hl || !hl.supportsLanguage(language))
41
61
  return code;
42
62
  try {
43
- return highlight(code, { language, ignoreIllegals: true });
63
+ return hl.highlight(code, { language, ignoreIllegals: true });
44
64
  }
45
65
  catch {
46
66
  return code;
@@ -1 +1 @@
1
- {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../src/ui/utils/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAC5D,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,wDAAwD;AACxD,MAAM,WAAW,GAA2B;IAC1C,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAiB;IAC3D,IAAI,CAAC,QAAQ,IAAI,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IAC1D,IAAI,CAAC;QACH,OAAO,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"highlight.js","sourceRoot":"","sources":["../../../src/ui/utils/highlight.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,WAAW,CAAC;AAE7B,wDAAwD;AACxD,MAAM,WAAW,GAA2B;IAC1C,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,YAAY;IAChB,GAAG,EAAE,YAAY;IACjB,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,MAAM;IACV,EAAE,EAAE,IAAI;IACR,IAAI,EAAE,MAAM;IACZ,EAAE,EAAE,QAAQ;IACZ,EAAE,EAAE,MAAM;IACV,GAAG,EAAE,MAAM;IACX,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,MAAM;IACX,EAAE,EAAE,UAAU;IACd,IAAI,EAAE,KAAK;IACX,GAAG,EAAE,KAAK;IACV,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,MAAM;IACZ,GAAG,EAAE,KAAK;IACV,IAAI,EAAE,KAAK;IACX,UAAU,EAAE,YAAY;CACzB,CAAC;AAEF,gDAAgD;AAChD,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC,WAAW,EAAE,CAAC;IACpE,OAAO,WAAW,CAAC,GAAG,CAAC,CAAC;AAC1B,CAAC;AAOD,8DAA8D;AAC9D,8EAA8E;AAC9E,IAAI,QAAqC,CAAC;AAC1C,IAAI,aAAa,GAAG,KAAK,CAAC;AAE1B,SAAS,YAAY;IACnB,IAAI,QAAQ;QAAE,OAAO,QAAQ,CAAC;IAC9B,IAAI,aAAa;QAAE,OAAO,SAAS,CAAC;IACpC,aAAa,GAAG,IAAI,CAAC;IACrB,oCAAoC;IACpC,MAAM,CAAC,eAAe,CAAC,CAAC,IAAI,CAC1B,CAAC,CAAC,EAAE,EAAE;QACJ,QAAQ,GAAG,CAAC,CAAC;IACf,CAAC,EACD,GAAG,EAAE;QACH,4DAA4D;IAC9D,CAAC,CACF,CAAC;IACF,OAAO,SAAS,CAAC;AACnB,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,aAAa,CAAC,IAAY,EAAE,QAAiB;IAC3D,IAAI,CAAC,QAAQ;QAAE,OAAO,IAAI,CAAC;IAC3B,MAAM,EAAE,GAAG,YAAY,EAAE,CAAC;IAC1B,IAAI,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,gBAAgB,CAAC,QAAQ,CAAC;QAAE,OAAO,IAAI,CAAC;IACvD,IAAI,CAAC;QACH,OAAO,EAAE,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,QAAQ,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;IAChE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * Create a clickable hyperlink using OSC 8 escape sequences.
3
+ * Falls back to plain URL if the terminal doesn't support hyperlinks.
4
+ *
5
+ * @param url - The URL to link to
6
+ * @param content - Optional content to display as the link text.
7
+ * If provided and hyperlinks are supported, this text is shown as a clickable link.
8
+ * If hyperlinks are not supported, content is ignored and only the URL is shown.
9
+ */
10
+ export declare function createHyperlink(url: string, content?: string): string;
11
+ //# sourceMappingURL=hyperlink.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperlink.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/hyperlink.ts"],"names":[],"mappings":"AASA;;;;;;;;GAQG;AACH,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,GAAG,MAAM,CAUrE"}
@@ -0,0 +1,27 @@
1
+ import chalk from "chalk";
2
+ import { supportsHyperlinks } from "./supports-hyperlinks.js";
3
+ // OSC 8 hyperlink escape sequences
4
+ // Format: \e]8;;URL\e\\TEXT\e]8;;\e\\
5
+ // Using \x07 (BEL) as terminator which is more widely supported
6
+ const OSC8_START = "\x1b]8;;";
7
+ const OSC8_END = "\x07";
8
+ /**
9
+ * Create a clickable hyperlink using OSC 8 escape sequences.
10
+ * Falls back to plain URL if the terminal doesn't support hyperlinks.
11
+ *
12
+ * @param url - The URL to link to
13
+ * @param content - Optional content to display as the link text.
14
+ * If provided and hyperlinks are supported, this text is shown as a clickable link.
15
+ * If hyperlinks are not supported, content is ignored and only the URL is shown.
16
+ */
17
+ export function createHyperlink(url, content) {
18
+ if (!supportsHyperlinks()) {
19
+ return url;
20
+ }
21
+ // Apply basic ANSI blue color — wrap-ansi preserves this across line breaks.
22
+ // RGB colors (like theme colors) are NOT preserved by wrap-ansi with OSC 8.
23
+ const displayText = content ?? url;
24
+ const coloredText = chalk.blue(displayText);
25
+ return `${OSC8_START}${url}${OSC8_END}${coloredText}${OSC8_START}${OSC8_END}`;
26
+ }
27
+ //# sourceMappingURL=hyperlink.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"hyperlink.js","sourceRoot":"","sources":["../../../src/ui/utils/hyperlink.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAE,MAAM,0BAA0B,CAAC;AAE9D,mCAAmC;AACnC,sCAAsC;AACtC,gEAAgE;AAChE,MAAM,UAAU,GAAG,UAAU,CAAC;AAC9B,MAAM,QAAQ,GAAG,MAAM,CAAC;AAExB;;;;;;;;GAQG;AACH,MAAM,UAAU,eAAe,CAAC,GAAW,EAAE,OAAgB;IAC3D,IAAI,CAAC,kBAAkB,EAAE,EAAE,CAAC;QAC1B,OAAO,GAAG,CAAC;IACb,CAAC;IAED,6EAA6E;IAC7E,4EAA4E;IAC5E,MAAM,WAAW,GAAG,OAAO,IAAI,GAAG,CAAC;IACnC,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;IAC5C,OAAO,GAAG,UAAU,GAAG,GAAG,GAAG,QAAQ,GAAG,WAAW,GAAG,UAAU,GAAG,QAAQ,EAAE,CAAC;AAChF,CAAC"}
@@ -1,12 +1,11 @@
1
- import type { Token } from "marked";
2
- /** Simple LRU cache for parsed markdown tokens. */
3
- declare class MarkdownLRUCache {
1
+ /** Simple LRU cache for rendered markdown ANSI strings. */
2
+ declare class MarkdownAnsiCache {
4
3
  private cache;
5
- get(body: string): Token[] | undefined;
6
- set(body: string, tokens: Token[]): void;
4
+ get(body: string): string | undefined;
5
+ set(body: string, ansi: string): void;
7
6
  private hash;
8
7
  }
9
- export declare const markdownTokenCache: MarkdownLRUCache;
8
+ export declare const markdownAnsiCache: MarkdownAnsiCache;
10
9
  export declare function containsMarkdownSyntax(text: string): boolean;
11
10
  export {};
12
11
  //# sourceMappingURL=markdown-cache.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-cache.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/markdown-cache.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAIpC,mDAAmD;AACnD,cAAM,gBAAgB;IACpB,OAAO,CAAC,KAAK,CAA8B;IAE3C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,KAAK,EAAE,GAAG,SAAS;IAUtC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,GAAG,IAAI;IAYxC,OAAO,CAAC,IAAI;CAGb;AAED,eAAO,MAAM,kBAAkB,kBAAyB,CAAC;AASzD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI5D"}
1
+ {"version":3,"file":"markdown-cache.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/markdown-cache.ts"],"names":[],"mappings":"AAIA,2DAA2D;AAC3D,cAAM,iBAAiB;IACrB,OAAO,CAAC,KAAK,CAA6B;IAE1C,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS;IAUrC,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,IAAI;IAYrC,OAAO,CAAC,IAAI;CAGb;AAED,eAAO,MAAM,iBAAiB,mBAA0B,CAAC;AASzD,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAI5D"}
@@ -1,7 +1,7 @@
1
1
  import { createHash } from "node:crypto";
2
2
  const MAX_SIZE = 500;
3
- /** Simple LRU cache for parsed markdown tokens. */
4
- class MarkdownLRUCache {
3
+ /** Simple LRU cache for rendered markdown ANSI strings. */
4
+ class MarkdownAnsiCache {
5
5
  cache = new Map();
6
6
  get(body) {
7
7
  const key = this.hash(body);
@@ -13,11 +13,11 @@ class MarkdownLRUCache {
13
13
  this.cache.set(key, entry);
14
14
  return entry;
15
15
  }
16
- set(body, tokens) {
16
+ set(body, ansi) {
17
17
  const key = this.hash(body);
18
18
  // Delete first to reset insertion order
19
19
  this.cache.delete(key);
20
- this.cache.set(key, tokens);
20
+ this.cache.set(key, ansi);
21
21
  // Evict oldest if over capacity
22
22
  if (this.cache.size > MAX_SIZE) {
23
23
  const oldest = this.cache.keys().next().value;
@@ -28,7 +28,7 @@ class MarkdownLRUCache {
28
28
  return createHash("sha256").update(body).digest("hex");
29
29
  }
30
30
  }
31
- export const markdownTokenCache = new MarkdownLRUCache();
31
+ export const markdownAnsiCache = new MarkdownAnsiCache();
32
32
  /**
33
33
  * Check whether text contains markdown syntax worth parsing.
34
34
  * If it doesn't, the caller can skip marked.lexer() entirely.
@@ -1 +1 @@
1
- {"version":3,"file":"markdown-cache.js","sourceRoot":"","sources":["../../../src/ui/utils/markdown-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAGzC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,mDAAmD;AACnD,MAAM,gBAAgB;IACZ,KAAK,GAAG,IAAI,GAAG,EAAmB,CAAC;IAE3C,GAAG,CAAC,IAAY;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,mCAAmC;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,MAAe;QAC/B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,wCAAwC;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,MAAM,CAAC,CAAC;QAC5B,gCAAgC;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,IAAY;QACvB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,kBAAkB,GAAG,IAAI,gBAAgB,EAAE,CAAC;AAEzD;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AAEjE,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,iDAAiD;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC"}
1
+ {"version":3,"file":"markdown-cache.js","sourceRoot":"","sources":["../../../src/ui/utils/markdown-cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,MAAM,QAAQ,GAAG,GAAG,CAAC;AAErB,2DAA2D;AAC3D,MAAM,iBAAiB;IACb,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IAE1C,GAAG,CAAC,IAAY;QACd,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QAClC,IAAI,CAAC,KAAK;YAAE,OAAO,SAAS,CAAC;QAC7B,mCAAmC;QACnC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;QAC3B,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,IAAY,EAAE,IAAY;QAC5B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAC5B,wCAAwC;QACxC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;QAC1B,gCAAgC;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,QAAQ,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,CAAC,KAAM,CAAC;YAC/C,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAC5B,CAAC;IACH,CAAC;IAEO,IAAI,CAAC,IAAY;QACvB,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IACzD,CAAC;CACF;AAED,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,EAAE,CAAC;AAEzD;;;;GAIG;AACH,MAAM,kBAAkB,GAAG,qCAAqC,CAAC;AAEjE,MAAM,UAAU,sBAAsB,CAAC,IAAY;IACjD,iDAAiD;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAC7D,OAAO,kBAAkB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,21 @@
1
+ /**
2
+ * Tiny listener-set primitive for pure event signals (no stored state).
3
+ *
4
+ * Use this when subscribers only need to know "something happened",
5
+ * not "what is the current value".
6
+ *
7
+ * Usage:
8
+ * const changed = createSignal()
9
+ * const unsub = changed.subscribe(() => console.log("changed"))
10
+ * changed.emit()
11
+ */
12
+ export interface Signal<Args extends unknown[] = []> {
13
+ /** Subscribe a listener. Returns an unsubscribe function. */
14
+ subscribe: (listener: (...args: Args) => void) => () => void;
15
+ /** Call all subscribed listeners with the given arguments. */
16
+ emit: (...args: Args) => void;
17
+ /** Remove all listeners. */
18
+ clear: () => void;
19
+ }
20
+ export declare function createSignal<Args extends unknown[] = []>(): Signal<Args>;
21
+ //# sourceMappingURL=signal.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"signal.d.ts","sourceRoot":"","sources":["../../../src/ui/utils/signal.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,MAAM,WAAW,MAAM,CAAC,IAAI,SAAS,OAAO,EAAE,GAAG,EAAE;IACjD,6DAA6D;IAC7D,SAAS,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,KAAK,MAAM,IAAI,CAAC;IAC7D,8DAA8D;IAC9D,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,KAAK,IAAI,CAAC;IAC9B,4BAA4B;IAC5B,KAAK,EAAE,MAAM,IAAI,CAAC;CACnB;AAED,wBAAgB,YAAY,CAAC,IAAI,SAAS,OAAO,EAAE,GAAG,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC,CAgBxE"}