@kenkaiiii/ggcoder 5.75.0 → 5.76.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (137) hide show
  1. package/README.md +56 -40
  2. package/dist/app-sidecar/auth-routes.js +4 -1
  3. package/dist/app-sidecar/auth-routes.js.map +1 -1
  4. package/dist/app-sidecar/repo-polls.d.ts +18 -0
  5. package/dist/app-sidecar/repo-polls.js +45 -0
  6. package/dist/app-sidecar/repo-polls.js.map +1 -0
  7. package/dist/app-sidecar/route-context.d.ts +2 -0
  8. package/dist/app-sidecar.js +65 -63
  9. package/dist/app-sidecar.js.map +1 -1
  10. package/dist/chat-agents/jiwa.js +2 -0
  11. package/dist/chat-agents/jiwa.js.map +1 -1
  12. package/dist/chat-agents/memory.js +2 -0
  13. package/dist/chat-agents/memory.js.map +1 -1
  14. package/dist/cli/auth.js +13 -9
  15. package/dist/cli/auth.js.map +1 -1
  16. package/dist/cli.js +8 -9
  17. package/dist/cli.js.map +1 -1
  18. package/dist/core/checklist-prompt.d.ts +9 -2
  19. package/dist/core/checklist-prompt.js +26 -7
  20. package/dist/core/checklist-prompt.js.map +1 -1
  21. package/dist/core/checklist-snapshot.js +1 -1
  22. package/dist/core/checklist-snapshot.js.map +1 -1
  23. package/dist/core/checklist-store.d.ts +5 -1
  24. package/dist/core/checklist-store.js +35 -4
  25. package/dist/core/checklist-store.js.map +1 -1
  26. package/dist/core/event-bus.d.ts +1 -1
  27. package/dist/core/event-bus.js +39 -13
  28. package/dist/core/event-bus.js.map +1 -1
  29. package/dist/core/extensions/plugin-bundles.js +4 -2
  30. package/dist/core/extensions/plugin-bundles.js.map +1 -1
  31. package/dist/core/hashline.d.ts +10 -8
  32. package/dist/core/hashline.js.map +1 -1
  33. package/dist/core/mcp/client.js +2 -0
  34. package/dist/core/mcp/client.js.map +1 -1
  35. package/dist/core/mcp/loopback.d.ts +2 -2
  36. package/dist/core/mcp/loopback.js +2 -2
  37. package/dist/core/mcp/shared-pool.js +4 -3
  38. package/dist/core/mcp/shared-pool.js.map +1 -1
  39. package/dist/core/persistent-shell.js +2 -1
  40. package/dist/core/persistent-shell.js.map +1 -1
  41. package/dist/core/process-manager.js +9 -1
  42. package/dist/core/process-manager.js.map +1 -1
  43. package/dist/core/project-health-scan.d.ts +109 -0
  44. package/dist/core/project-health-scan.js +673 -0
  45. package/dist/core/project-health-scan.js.map +1 -0
  46. package/dist/core/project-health-score.d.ts +41 -0
  47. package/dist/core/project-health-score.js +257 -0
  48. package/dist/core/project-health-score.js.map +1 -0
  49. package/dist/core/prompt-commands.js +15 -2
  50. package/dist/core/prompt-commands.js.map +1 -1
  51. package/dist/core/session-manager.js.map +1 -1
  52. package/dist/core/session-storage.d.ts +1 -0
  53. package/dist/core/session-storage.js +1 -1
  54. package/dist/core/session-storage.js.map +1 -1
  55. package/dist/core/subagent-manager.js +11 -6
  56. package/dist/core/subagent-manager.js.map +1 -1
  57. package/dist/core/subagent-receipt.js +3 -4
  58. package/dist/core/subagent-receipt.js.map +1 -1
  59. package/dist/core/ui-adoption.js +2 -0
  60. package/dist/core/ui-adoption.js.map +1 -1
  61. package/dist/core/ui-registry.js +5 -4
  62. package/dist/core/ui-registry.js.map +1 -1
  63. package/dist/core/verification-gate.js +4 -2
  64. package/dist/core/verification-gate.js.map +1 -1
  65. package/dist/core/verify-commands.js +2 -3
  66. package/dist/core/verify-commands.js.map +1 -1
  67. package/dist/modes/agent-home-mode.js +1 -4
  68. package/dist/modes/agent-home-mode.js.map +1 -1
  69. package/dist/modes/subagent-worker-mode.js +13 -8
  70. package/dist/modes/subagent-worker-mode.js.map +1 -1
  71. package/dist/tools/checklist.d.ts +5 -4
  72. package/dist/tools/checklist.js +17 -4
  73. package/dist/tools/checklist.js.map +1 -1
  74. package/dist/tools/edit.js +27 -1
  75. package/dist/tools/edit.js.map +1 -1
  76. package/dist/tools/grep.js +3 -2
  77. package/dist/tools/grep.js.map +1 -1
  78. package/dist/tools/index.js +7 -5
  79. package/dist/tools/index.js.map +1 -1
  80. package/dist/ui/App.js +20 -26
  81. package/dist/ui/App.js.map +1 -1
  82. package/dist/ui/components/InputArea.js +0 -2
  83. package/dist/ui/components/InputArea.js.map +1 -1
  84. package/dist/ui/components/ToolExecution.js +4 -3
  85. package/dist/ui/components/ToolExecution.js.map +1 -1
  86. package/dist/ui/hooks/useAgentLoop.js +7 -6
  87. package/dist/ui/hooks/useAgentLoop.js.map +1 -1
  88. package/dist/ui/sessions.js +1 -5
  89. package/dist/ui/sessions.js.map +1 -1
  90. package/dist/ui/utils/highlight.d.ts +0 -5
  91. package/dist/ui/utils/highlight.js +3 -49
  92. package/dist/ui/utils/highlight.js.map +1 -1
  93. package/dist/ui/utils/markdown-renderer.d.ts +6 -0
  94. package/dist/ui/utils/markdown-renderer.js +21 -5
  95. package/dist/ui/utils/markdown-renderer.js.map +1 -1
  96. package/dist/utils/process.js +3 -3
  97. package/dist/utils/process.js.map +1 -1
  98. package/dist/utils/shared-poll.d.ts +37 -0
  99. package/dist/utils/shared-poll.js +104 -0
  100. package/dist/utils/shared-poll.js.map +1 -0
  101. package/package.json +5 -8
  102. package/dist/core/file-lock.d.ts +0 -1
  103. package/dist/core/file-lock.js +0 -3
  104. package/dist/core/file-lock.js.map +0 -1
  105. package/dist/core/oauth/pkce.d.ts +0 -1
  106. package/dist/core/oauth/pkce.js +0 -3
  107. package/dist/core/oauth/pkce.js.map +0 -1
  108. package/dist/ui/activity-phrases.d.ts +0 -10
  109. package/dist/ui/activity-phrases.js +0 -184
  110. package/dist/ui/activity-phrases.js.map +0 -1
  111. package/dist/ui/components/PlanApproval.d.ts +0 -8
  112. package/dist/ui/components/PlanApproval.js +0 -60
  113. package/dist/ui/components/PlanApproval.js.map +0 -1
  114. package/dist/ui/components/PlanBanner.d.ts +0 -6
  115. package/dist/ui/components/PlanBanner.js +0 -31
  116. package/dist/ui/components/PlanBanner.js.map +0 -1
  117. package/dist/ui/components/PlanProgress.d.ts +0 -7
  118. package/dist/ui/components/PlanProgress.js +0 -30
  119. package/dist/ui/components/PlanProgress.js.map +0 -1
  120. package/dist/ui/hooks/useMinDisplayTime.d.ts +0 -10
  121. package/dist/ui/hooks/useMinDisplayTime.js +0 -34
  122. package/dist/ui/hooks/useMinDisplayTime.js.map +0 -1
  123. package/dist/ui/hooks/useSessionManager.d.ts +0 -12
  124. package/dist/ui/hooks/useSessionManager.js +0 -43
  125. package/dist/ui/hooks/useSessionManager.js.map +0 -1
  126. package/dist/ui/hooks/useSlashCommands.d.ts +0 -6
  127. package/dist/ui/hooks/useSlashCommands.js +0 -11
  128. package/dist/ui/hooks/useSlashCommands.js.map +0 -1
  129. package/dist/ui/terminal-history-spacing.d.ts +0 -1
  130. package/dist/ui/terminal-history-spacing.js +0 -2
  131. package/dist/ui/terminal-history-spacing.js.map +0 -1
  132. package/dist/ui/utils/markdown-cache.d.ts +0 -10
  133. package/dist/ui/utils/markdown-cache.js +0 -58
  134. package/dist/ui/utils/markdown-cache.js.map +0 -1
  135. package/dist/ui/utils/token-to-ansi.d.ts +0 -8
  136. package/dist/ui/utils/token-to-ansi.js +0 -323
  137. package/dist/ui/utils/token-to-ansi.js.map +0 -1
@@ -1,58 +0,0 @@
1
- const MAX_SIZE = 500;
2
- /**
3
- * cyrb53 — fast 53-bit non-cryptographic string hash.
4
- * ~50–100× faster than SHA-256 for cache keying. Collision risk is
5
- * negligible at our 500-entry working set.
6
- * https://stackoverflow.com/a/52171480
7
- */
8
- function cyrb53(str, seed = 0) {
9
- let h1 = 0xdeadbeef ^ seed;
10
- let h2 = 0x41c6ce57 ^ seed;
11
- for (let i = 0; i < str.length; i++) {
12
- const ch = str.charCodeAt(i);
13
- h1 = Math.imul(h1 ^ ch, 2654435761);
14
- h2 = Math.imul(h2 ^ ch, 1597334677);
15
- }
16
- h1 = Math.imul(h1 ^ (h1 >>> 16), 2246822507) ^ Math.imul(h2 ^ (h2 >>> 13), 3266489909);
17
- h2 = Math.imul(h2 ^ (h2 >>> 16), 2246822507) ^ Math.imul(h1 ^ (h1 >>> 13), 3266489909);
18
- return (4294967296 * (2097151 & h2) + (h1 >>> 0)).toString(36);
19
- }
20
- /** LRU cache for rendered markdown ANSI strings, scoped by theme + width. */
21
- class MarkdownAnsiCache {
22
- cache = new Map();
23
- get(body, themeName, columns) {
24
- const key = this.key(body, themeName, columns);
25
- const entry = this.cache.get(key);
26
- if (!entry)
27
- return undefined;
28
- // Move to end (most recently used)
29
- this.cache.delete(key);
30
- this.cache.set(key, entry);
31
- return entry;
32
- }
33
- set(body, themeName, columns, ansi) {
34
- const key = this.key(body, themeName, columns);
35
- this.cache.delete(key);
36
- this.cache.set(key, ansi);
37
- if (this.cache.size > MAX_SIZE) {
38
- const oldest = this.cache.keys().next().value;
39
- this.cache.delete(oldest);
40
- }
41
- }
42
- key(body, themeName, columns) {
43
- return `${themeName}:${columns}:${cyrb53(body)}`;
44
- }
45
- }
46
- export const markdownAnsiCache = new MarkdownAnsiCache();
47
- /**
48
- * Check whether text contains markdown syntax worth parsing.
49
- * If it doesn't, the caller can skip marked.lexer() entirely.
50
- * Matches Claude Code's MD_SYNTAX_RE patterns.
51
- */
52
- const MARKDOWN_SYNTAX_RE = /[#*`|[>\-_~]|\n\n|^\d+\. |\n\d+\. /m;
53
- export function containsMarkdownSyntax(text) {
54
- // Only check the first 500 chars for performance
55
- const sample = text.length > 500 ? text.slice(0, 500) : text;
56
- return MARKDOWN_SYNTAX_RE.test(sample);
57
- }
58
- //# sourceMappingURL=markdown-cache.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"markdown-cache.js","sourceRoot":"","sources":["../../../src/ui/utils/markdown-cache.ts"],"names":[],"mappings":"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"}
@@ -1,8 +0,0 @@
1
- import { type Token } from "marked";
2
- import type { Theme } from "../theme/theme.js";
3
- /**
4
- * Convert an array of marked block-level tokens into a single ANSI string.
5
- * Each block is separated by a blank line. The result can be passed directly
6
- * to Ink's `<Text>`.
7
- */
8
- export declare function tokensToAnsi(tokens: Token[], theme: Theme, columns: number): string;
@@ -1,323 +0,0 @@
1
- import chalk from "chalk";
2
- import { marked } from "marked";
3
- import wrapAnsi from "wrap-ansi";
4
- import { highlightCode } from "./highlight.js";
5
- import { fitToWidth, centerToWidth, plainTextLength, wrapPlainTextLines } from "./table-text.js";
6
- import { createHyperlink } from "./hyperlink.js";
7
- import { supportsHyperlinks } from "./supports-hyperlinks.js";
8
- // ── Marked configuration ──────────────────────────────────
9
- // Disable del (strikethrough) tokenizer — `~` is commonly used for
10
- // "approximate" in LLM output and causes false strikethrough parsing.
11
- let markedConfigured = false;
12
- function configureMarked() {
13
- if (markedConfigured)
14
- return;
15
- markedConfigured = true;
16
- marked.use({
17
- extensions: [
18
- {
19
- name: "del",
20
- level: "inline",
21
- start: () => -1, // never matches
22
- tokenizer: () => undefined,
23
- },
24
- ],
25
- });
26
- }
27
- // ── Helpers ───────────────────────────────────────────────
28
- /** Prepend a prefix to every line in a string. */
29
- function prefixLines(text, prefix) {
30
- return text
31
- .split("\n")
32
- .map((line) => prefix + line)
33
- .join("\n");
34
- }
35
- /** Convert number to lowercase letter (1→a, 2→b, ..., 27→aa). */
36
- function numberToLetter(n) {
37
- let result = "";
38
- while (n > 0) {
39
- n--;
40
- result = String.fromCharCode(97 + (n % 26)) + result;
41
- n = Math.floor(n / 26);
42
- }
43
- return result;
44
- }
45
- /** Convert number to lowercase roman numeral. */
46
- function numberToRoman(n) {
47
- const vals = [1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1];
48
- const syms = ["m", "cm", "d", "cd", "c", "xc", "l", "xl", "x", "ix", "v", "iv", "i"];
49
- let result = "";
50
- for (let i = 0; i < vals.length; i++) {
51
- while (n >= vals[i]) {
52
- result += syms[i];
53
- n -= vals[i];
54
- }
55
- }
56
- return result;
57
- }
58
- /** Get formatted list number by depth (numeric → alpha → roman → numeric). */
59
- function getListNumber(depth, n) {
60
- switch (depth) {
61
- case 0:
62
- case 1:
63
- return n.toString();
64
- case 2:
65
- return numberToLetter(n);
66
- case 3:
67
- return numberToRoman(n);
68
- default:
69
- return n.toString();
70
- }
71
- }
72
- /** Replace owner/repo#123 with clickable GitHub links (OSC 8 when supported). */
73
- const ISSUE_REF_PATTERN = /(^|[^\w./-])([A-Za-z0-9][\w-]*\/[A-Za-z0-9][\w.-]*)#(\d+)\b/g;
74
- function linkifyIssueReferences(text) {
75
- if (!supportsHyperlinks())
76
- return text;
77
- return text.replace(ISSUE_REF_PATTERN, (_match, prefix, repo, num) => {
78
- return `${prefix}${createHyperlink(`https://github.com/${repo}/issues/${num}`, `${repo}#${num}`)}`;
79
- });
80
- }
81
- // ── Main API ──────────────────────────────────────────────
82
- /**
83
- * Convert an array of marked block-level tokens into a single ANSI string.
84
- * Each block is separated by a blank line. The result can be passed directly
85
- * to Ink's `<Text>`.
86
- */
87
- export function tokensToAnsi(tokens, theme, columns) {
88
- configureMarked();
89
- return tokens
90
- .map((t, i) => tokenToAnsi(t, theme, 0, undefined, undefined, columns, i > 0))
91
- .join("")
92
- .trim();
93
- }
94
- function tokenToAnsi(token, theme, depth, orderedIndex, parent, columns, addGap) {
95
- const gap = addGap ? "\n" : "";
96
- switch (token.type) {
97
- case "heading": {
98
- const heading = token;
99
- const inline = inlineToAnsi(heading.tokens ?? [], theme);
100
- switch (heading.depth) {
101
- case 1:
102
- return gap + chalk.bold.italic.underline(inline);
103
- default:
104
- return gap + chalk.bold(inline);
105
- }
106
- }
107
- case "paragraph": {
108
- const inline = inlineToAnsi(token.tokens ?? [], theme);
109
- return gap + wrapAnsi(inline, Math.max(10, columns), { hard: true, wordWrap: true });
110
- }
111
- case "list": {
112
- const list = token;
113
- const items = list.items.map((item, idx) => {
114
- const startNum = Number(list.start ?? 1) + idx;
115
- const bullet = list.ordered ? `${getListNumber(depth, startNum)}. ` : "- ";
116
- const indent = " ".repeat(depth);
117
- const content = item.tokens
118
- .map((t) => {
119
- if (t.type === "text" && "tokens" in t && t.tokens) {
120
- return inlineToAnsi(t.tokens, theme);
121
- }
122
- if (t.type === "list") {
123
- return "\n" + tokenToAnsi(t, theme, depth + 1, undefined, token, columns, false);
124
- }
125
- if (t.type === "text") {
126
- return linkifyIssueReferences(t.raw);
127
- }
128
- return tokenToAnsi(t, theme, depth + 1, undefined, token, columns, false);
129
- })
130
- .join("");
131
- const prefix = indent + bullet;
132
- const continuationPrefix = " ".repeat(prefix.length);
133
- const wrapped = wrapAnsi(content, Math.max(10, columns - prefix.length), {
134
- hard: true,
135
- wordWrap: true,
136
- });
137
- return wrapped
138
- .split("\n")
139
- .map((line, lineIndex) => `${lineIndex === 0 ? prefix : continuationPrefix}${line}`)
140
- .join("\n");
141
- });
142
- return gap + items.join("\n");
143
- }
144
- case "code": {
145
- const code = token;
146
- const lang = code.lang ?? "";
147
- const raw = code.text;
148
- const gutter = chalk.hex(theme.border)("\u258E ");
149
- if (!lang) {
150
- return gap + prefixLines(raw, gutter);
151
- }
152
- const header = chalk.dim.italic(lang);
153
- const highlighted = highlightCode(raw, lang);
154
- return gap + gutter + header + "\n" + prefixLines(highlighted, gutter);
155
- }
156
- case "blockquote": {
157
- const bq = token;
158
- // Pre-wrap paragraph content to fit `columns - 2` (accounting for the
159
- // "\u2502 " gutter). Without this, long one-line blockquotes get truncated by
160
- // Ink's Text wrap when nested ANSI codes confuse its width calculation.
161
- const barWidth = 2;
162
- const wrapWidth = Math.max(20, columns - barWidth);
163
- const inner = (bq.tokens ?? [])
164
- .map((t) => {
165
- if (t.type === "paragraph") {
166
- const para = chalk.italic.hex(theme.textMuted)(inlineToAnsi(t.tokens ?? [], theme, theme.textMuted));
167
- return wrapAnsi(para, wrapWidth, { hard: true, wordWrap: true });
168
- }
169
- return tokenToAnsi(t, theme, depth, undefined, token, columns, false);
170
- })
171
- .join("\n");
172
- const bar = chalk.hex(theme.accent)("\u2502 ");
173
- return gap + prefixLines(inner, bar);
174
- }
175
- case "table": {
176
- const table = token;
177
- const numCols = table.header.length;
178
- // Calculate natural column widths
179
- const naturalWidths = table.header.map((cell, ci) => {
180
- const headerLen = plainTextLength(cell.tokens);
181
- const rowMax = table.rows.reduce((max, row) => Math.max(max, plainTextLength(row[ci]?.tokens ?? [])), 0);
182
- return Math.max(headerLen, rowMax, 3);
183
- });
184
- // Cap to fit terminal
185
- const overhead = numCols * 3 + 1; // "| " per col + trailing " |"
186
- const availableForContent = columns - overhead;
187
- const totalNatural = naturalWidths.reduce((a, b) => a + b, 0);
188
- let colWidths;
189
- if (totalNatural <= availableForContent) {
190
- colWidths = naturalWidths;
191
- }
192
- else {
193
- colWidths = [...naturalWidths];
194
- let remaining = availableForContent;
195
- const locked = new Set();
196
- while (locked.size < numCols) {
197
- const unlocked = colWidths.filter((_, i) => !locked.has(i));
198
- const fair = Math.floor(remaining / unlocked.length);
199
- let changed = false;
200
- for (let i = 0; i < colWidths.length; i++) {
201
- if (locked.has(i))
202
- continue;
203
- if (colWidths[i] <= fair) {
204
- locked.add(i);
205
- remaining -= colWidths[i];
206
- changed = true;
207
- }
208
- }
209
- if (!changed) {
210
- const unlockedIdxs = colWidths.map((_, i) => i).filter((i) => !locked.has(i));
211
- const each = Math.floor(remaining / unlockedIdxs.length);
212
- let leftover = remaining - each * unlockedIdxs.length;
213
- for (const i of unlockedIdxs) {
214
- colWidths[i] = each + (leftover > 0 ? 1 : 0);
215
- if (leftover > 0)
216
- leftover--;
217
- }
218
- break;
219
- }
220
- }
221
- }
222
- // Box-drawing table with multi-line cell wrapping
223
- const hLine = (left, mid, right) => left + colWidths.map((w) => "\u2501".repeat(w + 2)).join(mid) + right;
224
- // Pre-wrap cells into lines of exactly colWidths[ci] chars
225
- const wrapCell = (tokens, ci) => wrapPlainTextLines(tokens, colWidths[ci]).map((l) => fitToWidth(l, colWidths[ci]));
226
- const wrapCellCenter = (tokens, ci) => wrapPlainTextLines(tokens, colWidths[ci]).map((l) => centerToWidth(l, colWidths[ci]));
227
- const headerWrapped = table.header.map((cell, ci) => wrapCellCenter(cell.tokens, ci));
228
- const headerLineCount = Math.max(1, ...headerWrapped.map((lines) => lines.length));
229
- const bodyWrapped = table.rows.map((row) => row.map((cell, ci) => wrapCell(cell.tokens, ci)));
230
- const bodyLineCounts = bodyWrapped.map((row) => Math.max(1, ...row.map((lines) => lines.length)));
231
- const buildRowLine = (wrappedCells, lineIdx) => {
232
- let row = "";
233
- for (let ci = 0; ci < wrappedCells.length; ci++) {
234
- const cell = wrappedCells[ci][lineIdx] ?? fitToWidth("", colWidths[ci]);
235
- row += "\u2503 " + cell + " ";
236
- }
237
- row += "\u2503";
238
- return row;
239
- };
240
- const lines = [];
241
- // Top border
242
- lines.push(hLine("\u250F", "\u2533", "\u2513"));
243
- // Header lines
244
- for (let li = 0; li < headerLineCount; li++) {
245
- lines.push(chalk.bold(buildRowLine(headerWrapped, li)));
246
- }
247
- // Header/body separator
248
- lines.push(hLine("\u2523", "\u254B", "\u252B"));
249
- // Body rows
250
- for (let ri = 0; ri < bodyWrapped.length; ri++) {
251
- for (let li = 0; li < bodyLineCounts[ri]; li++) {
252
- lines.push(buildRowLine(bodyWrapped[ri], li));
253
- }
254
- // Row separator (between rows, not after last)
255
- if (ri < bodyWrapped.length - 1) {
256
- lines.push(hLine("\u2523", "\u254B", "\u252B"));
257
- }
258
- }
259
- // Bottom border
260
- lines.push(hLine("\u2517", "\u253B", "\u251B"));
261
- return gap + lines.join("\n");
262
- }
263
- case "hr":
264
- return gap + "---";
265
- case "space":
266
- return "";
267
- case "html":
268
- case "def":
269
- return "";
270
- default:
271
- if ("raw" in token && typeof token.raw === "string") {
272
- return gap + token.raw;
273
- }
274
- return "";
275
- }
276
- }
277
- function inlineToAnsi(tokens, theme, _parentColor) {
278
- return tokens
279
- .map((token) => {
280
- switch (token.type) {
281
- case "strong":
282
- return chalk.bold(inlineToAnsi(token.tokens ?? [], theme));
283
- case "em":
284
- return chalk.italic(inlineToAnsi(token.tokens ?? [], theme));
285
- case "codespan":
286
- return chalk.hex(theme.code)(token.text);
287
- case "del":
288
- return chalk.strikethrough.hex(theme.textDim)(token.text);
289
- case "link": {
290
- const link = token;
291
- if (link.href.startsWith("mailto:")) {
292
- return link.href.replace(/^mailto:/, "");
293
- }
294
- // Use OSC 8 clickable hyperlinks when supported
295
- const linkText = link.text || link.href;
296
- if (linkText !== link.href) {
297
- return createHyperlink(link.href, linkText);
298
- }
299
- return createHyperlink(link.href);
300
- }
301
- case "image":
302
- return token.href;
303
- case "text": {
304
- const textToken = token;
305
- if ("tokens" in textToken && textToken.tokens) {
306
- return inlineToAnsi(textToken.tokens, theme);
307
- }
308
- return linkifyIssueReferences(textToken.raw);
309
- }
310
- case "escape":
311
- return token.text;
312
- case "br":
313
- return "\n";
314
- default:
315
- if ("raw" in token && typeof token.raw === "string") {
316
- return token.raw;
317
- }
318
- return "";
319
- }
320
- })
321
- .join("");
322
- }
323
- //# sourceMappingURL=token-to-ansi.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"token-to-ansi.js","sourceRoot":"","sources":["../../../src/ui/utils/token-to-ansi.ts"],"names":[],"mappings":"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"}