@nicomatt69/streamdown-tty 2.1.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 (115) hide show
  1. package/CHANGELOG.md +113 -0
  2. package/LICENSE +21 -0
  3. package/README.md +287 -0
  4. package/dist/adapters/index.d.ts +185 -0
  5. package/dist/adapters/index.d.ts.map +1 -0
  6. package/dist/ai-sdk-adapter.d.ts +113 -0
  7. package/dist/ai-sdk-adapter.d.ts.map +1 -0
  8. package/dist/cli.d.ts +3 -0
  9. package/dist/cli.d.ts.map +1 -0
  10. package/dist/core/index.d.ts +209 -0
  11. package/dist/core/index.d.ts.map +1 -0
  12. package/dist/core/math-renderer.d.ts +40 -0
  13. package/dist/core/math-renderer.d.ts.map +1 -0
  14. package/dist/core/parser.d.ts +139 -0
  15. package/dist/core/parser.d.ts.map +1 -0
  16. package/dist/core/protocol.d.ts +319 -0
  17. package/dist/core/protocol.d.ts.map +1 -0
  18. package/dist/core/remend-tty.d.ts +68 -0
  19. package/dist/core/remend-tty.d.ts.map +1 -0
  20. package/dist/core/renderer.d.ts +286 -0
  21. package/dist/core/renderer.d.ts.map +1 -0
  22. package/dist/errors.d.ts +131 -0
  23. package/dist/errors.d.ts.map +1 -0
  24. package/dist/events.d.ts +185 -0
  25. package/dist/events.d.ts.map +1 -0
  26. package/dist/index.d.ts +39 -0
  27. package/dist/index.d.ts.map +1 -0
  28. package/dist/index.js +12921 -0
  29. package/dist/parser/streaming-parser.d.ts +81 -0
  30. package/dist/parser/streaming-parser.d.ts.map +1 -0
  31. package/dist/performance.d.ts +139 -0
  32. package/dist/performance.d.ts.map +1 -0
  33. package/dist/plugins/index.d.ts +6 -0
  34. package/dist/plugins/index.d.ts.map +1 -0
  35. package/dist/plugins/plugin-system-inline.d.ts +116 -0
  36. package/dist/plugins/plugin-system-inline.d.ts.map +1 -0
  37. package/dist/plugins/plugin-system.d.ts +65 -0
  38. package/dist/plugins/plugin-system.d.ts.map +1 -0
  39. package/dist/plugins/rehype/harden.d.ts +15 -0
  40. package/dist/plugins/rehype/harden.d.ts.map +1 -0
  41. package/dist/plugins/rehype/index.d.ts +5 -0
  42. package/dist/plugins/rehype/index.d.ts.map +1 -0
  43. package/dist/plugins/remark/index.d.ts +6 -0
  44. package/dist/plugins/remark/index.d.ts.map +1 -0
  45. package/dist/plugins/remark/math.d.ts +7 -0
  46. package/dist/plugins/remark/math.d.ts.map +1 -0
  47. package/dist/plugins/remark/mermaid.d.ts +7 -0
  48. package/dist/plugins/remark/mermaid.d.ts.map +1 -0
  49. package/dist/plugins/types.d.ts +72 -0
  50. package/dist/plugins/types.d.ts.map +1 -0
  51. package/dist/renderer/ansi-renderer.d.ts +76 -0
  52. package/dist/renderer/ansi-renderer.d.ts.map +1 -0
  53. package/dist/renderers/index.d.ts +7 -0
  54. package/dist/renderers/index.d.ts.map +1 -0
  55. package/dist/renderers/math-renderer.d.ts +49 -0
  56. package/dist/renderers/math-renderer.d.ts.map +1 -0
  57. package/dist/renderers/mermaid-ascii.d.ts +14 -0
  58. package/dist/renderers/mermaid-ascii.d.ts.map +1 -0
  59. package/dist/renderers/mermaid-renderer.d.ts +79 -0
  60. package/dist/renderers/mermaid-renderer.d.ts.map +1 -0
  61. package/dist/renderers/shiki-ansi.d.ts +48 -0
  62. package/dist/renderers/shiki-ansi.d.ts.map +1 -0
  63. package/dist/renderers/table-ascii.d.ts +30 -0
  64. package/dist/renderers/table-ascii.d.ts.map +1 -0
  65. package/dist/renderers/unicode-math.d.ts +29 -0
  66. package/dist/renderers/unicode-math.d.ts.map +1 -0
  67. package/dist/security/ansi-sanitizer.d.ts +71 -0
  68. package/dist/security/ansi-sanitizer.d.ts.map +1 -0
  69. package/dist/security/chunk-processor.d.ts +81 -0
  70. package/dist/security/chunk-processor.d.ts.map +1 -0
  71. package/dist/security/index.d.ts +6 -0
  72. package/dist/security/index.d.ts.map +1 -0
  73. package/dist/security/input-validator.d.ts +55 -0
  74. package/dist/security/input-validator.d.ts.map +1 -0
  75. package/dist/stream-protocol.d.ts +61 -0
  76. package/dist/stream-protocol.d.ts.map +1 -0
  77. package/dist/streamdown-compat.d.ts +72 -0
  78. package/dist/streamdown-compat.d.ts.map +1 -0
  79. package/dist/streaming/stream-stats.d.ts +97 -0
  80. package/dist/streaming/stream-stats.d.ts.map +1 -0
  81. package/dist/streaming-integration.d.ts +71 -0
  82. package/dist/streaming-integration.d.ts.map +1 -0
  83. package/dist/themes/index.d.ts +59 -0
  84. package/dist/themes/index.d.ts.map +1 -0
  85. package/dist/types/index.d.ts +168 -0
  86. package/dist/types/index.d.ts.map +1 -0
  87. package/dist/types/plugin-types.d.ts +5 -0
  88. package/dist/types/plugin-types.d.ts.map +1 -0
  89. package/dist/types/stream-events.d.ts +71 -0
  90. package/dist/types/stream-events.d.ts.map +1 -0
  91. package/dist/utils/blessed-syntax-highlighter.d.ts +124 -0
  92. package/dist/utils/blessed-syntax-highlighter.d.ts.map +1 -0
  93. package/dist/utils/enhanced-table-renderer.d.ts +77 -0
  94. package/dist/utils/enhanced-table-renderer.d.ts.map +1 -0
  95. package/dist/utils/formatting.d.ts +100 -0
  96. package/dist/utils/formatting.d.ts.map +1 -0
  97. package/dist/utils/index.d.ts +5 -0
  98. package/dist/utils/index.d.ts.map +1 -0
  99. package/dist/utils/math-unicode-renderer.d.ts +38 -0
  100. package/dist/utils/math-unicode-renderer.d.ts.map +1 -0
  101. package/dist/utils/mermaid-ascii-renderer.d.ts +20 -0
  102. package/dist/utils/mermaid-ascii-renderer.d.ts.map +1 -0
  103. package/dist/utils/mermaid-ascii.d.ts +53 -0
  104. package/dist/utils/mermaid-ascii.d.ts.map +1 -0
  105. package/dist/utils/shiki-ansi-renderer.d.ts +29 -0
  106. package/dist/utils/shiki-ansi-renderer.d.ts.map +1 -0
  107. package/dist/utils/syntax-highlighter.d.ts +87 -0
  108. package/dist/utils/syntax-highlighter.d.ts.map +1 -0
  109. package/dist/utils/table-formatter-inline.d.ts +37 -0
  110. package/dist/utils/table-formatter-inline.d.ts.map +1 -0
  111. package/dist/utils/table.d.ts +35 -0
  112. package/dist/utils/table.d.ts.map +1 -0
  113. package/dist/widgets/stream-indicator.d.ts +130 -0
  114. package/dist/widgets/stream-indicator.d.ts.map +1 -0
  115. package/package.json +129 -0
@@ -0,0 +1,319 @@
1
+ /**
2
+ * Standard Stream Protocol for CLI Agents
3
+ *
4
+ * A universal protocol for streaming markdown content from AI models
5
+ * to terminal interfaces. Compatible with:
6
+ * - Anthropic Claude API
7
+ * - OpenAI API
8
+ * - Vercel AI SDK
9
+ * - Custom AI implementations
10
+ *
11
+ * Features:
12
+ * - Unified event system
13
+ * - Tool call handling
14
+ * - Thinking/reasoning blocks
15
+ * - Progress tracking
16
+ * - Error handling
17
+ * - Backpressure support
18
+ *
19
+ * @module protocol
20
+ */
21
+ /**
22
+ * Stream event types
23
+ */
24
+ export type StreamEventType = 'start' | 'text' | 'tool_start' | 'tool_input' | 'tool_end' | 'thinking_start' | 'thinking' | 'thinking_end' | 'code_start' | 'code' | 'code_end' | 'error' | 'complete' | 'abort' | 'progress' | 'metadata';
25
+ /**
26
+ * Base stream event
27
+ */
28
+ export interface StreamEvent {
29
+ type: StreamEventType;
30
+ timestamp: number;
31
+ id?: string;
32
+ }
33
+ /**
34
+ * Start event - marks beginning of stream
35
+ */
36
+ export interface StartEvent extends StreamEvent {
37
+ type: 'start';
38
+ model?: string;
39
+ conversationId?: string;
40
+ metadata?: Record<string, unknown>;
41
+ }
42
+ /**
43
+ * Text delta event - streaming text content
44
+ */
45
+ export interface TextEvent extends StreamEvent {
46
+ type: 'text';
47
+ content: string;
48
+ /** Whether this is markdown content */
49
+ markdown?: boolean;
50
+ }
51
+ /**
52
+ * Tool call start event
53
+ */
54
+ export interface ToolStartEvent extends StreamEvent {
55
+ type: 'tool_start';
56
+ toolId: string;
57
+ toolName: string;
58
+ }
59
+ /**
60
+ * Tool call input streaming event
61
+ */
62
+ export interface ToolInputEvent extends StreamEvent {
63
+ type: 'tool_input';
64
+ toolId: string;
65
+ input: string;
66
+ /** Accumulated input so far */
67
+ accumulated?: string;
68
+ }
69
+ /**
70
+ * Tool call end event
71
+ */
72
+ export interface ToolEndEvent extends StreamEvent {
73
+ type: 'tool_end';
74
+ toolId: string;
75
+ result?: unknown;
76
+ error?: string;
77
+ durationMs?: number;
78
+ }
79
+ /**
80
+ * Thinking/reasoning start event
81
+ */
82
+ export interface ThinkingStartEvent extends StreamEvent {
83
+ type: 'thinking_start';
84
+ thinkingId?: string;
85
+ }
86
+ /**
87
+ * Thinking content event
88
+ */
89
+ export interface ThinkingEvent extends StreamEvent {
90
+ type: 'thinking';
91
+ content: string;
92
+ }
93
+ /**
94
+ * Thinking end event
95
+ */
96
+ export interface ThinkingEndEvent extends StreamEvent {
97
+ type: 'thinking_end';
98
+ thinkingId?: string;
99
+ durationMs?: number;
100
+ }
101
+ /**
102
+ * Code streaming start event
103
+ */
104
+ export interface CodeStartEvent extends StreamEvent {
105
+ type: 'code_start';
106
+ language?: string;
107
+ filename?: string;
108
+ }
109
+ /**
110
+ * Code content event
111
+ */
112
+ export interface CodeEvent extends StreamEvent {
113
+ type: 'code';
114
+ content: string;
115
+ }
116
+ /**
117
+ * Code end event
118
+ */
119
+ export interface CodeEndEvent extends StreamEvent {
120
+ type: 'code_end';
121
+ }
122
+ /**
123
+ * Error event
124
+ */
125
+ export interface ErrorEvent extends StreamEvent {
126
+ type: 'error';
127
+ error: Error | string;
128
+ code?: string;
129
+ recoverable?: boolean;
130
+ }
131
+ /**
132
+ * Stream complete event
133
+ */
134
+ export interface CompleteEvent extends StreamEvent {
135
+ type: 'complete';
136
+ stats?: StreamStats;
137
+ usage?: TokenUsage;
138
+ }
139
+ /**
140
+ * Stream abort event
141
+ */
142
+ export interface AbortEvent extends StreamEvent {
143
+ type: 'abort';
144
+ reason?: string;
145
+ }
146
+ /**
147
+ * Progress event
148
+ */
149
+ export interface ProgressEvent extends StreamEvent {
150
+ type: 'progress';
151
+ current: number;
152
+ total?: number;
153
+ message?: string;
154
+ }
155
+ /**
156
+ * Metadata event
157
+ */
158
+ export interface MetadataEvent extends StreamEvent {
159
+ type: 'metadata';
160
+ key: string;
161
+ value: unknown;
162
+ }
163
+ /**
164
+ * Union type for all events
165
+ */
166
+ export type AnyStreamEvent = StartEvent | TextEvent | ToolStartEvent | ToolInputEvent | ToolEndEvent | ThinkingStartEvent | ThinkingEvent | ThinkingEndEvent | CodeStartEvent | CodeEvent | CodeEndEvent | ErrorEvent | CompleteEvent | AbortEvent | ProgressEvent | MetadataEvent;
167
+ /**
168
+ * Stream statistics
169
+ */
170
+ export interface StreamStats {
171
+ startTime: number;
172
+ endTime: number;
173
+ durationMs: number;
174
+ bytesReceived: number;
175
+ chunksReceived: number;
176
+ tokensGenerated?: number;
177
+ toolCalls?: number;
178
+ }
179
+ /**
180
+ * Token usage information
181
+ */
182
+ export interface TokenUsage {
183
+ promptTokens?: number;
184
+ completionTokens?: number;
185
+ totalTokens?: number;
186
+ cacheReadTokens?: number;
187
+ cacheWriteTokens?: number;
188
+ }
189
+ /**
190
+ * Event handler type
191
+ */
192
+ export type StreamEventHandler<T extends AnyStreamEvent = AnyStreamEvent> = (event: T) => void | Promise<void>;
193
+ /**
194
+ * Stream protocol options
195
+ */
196
+ export interface StreamProtocolOptions {
197
+ /** Handler for all events */
198
+ onEvent?: StreamEventHandler;
199
+ /** Handler for text events only */
200
+ onText?: StreamEventHandler<TextEvent>;
201
+ /** Handler for tool events */
202
+ onTool?: StreamEventHandler<ToolStartEvent | ToolInputEvent | ToolEndEvent>;
203
+ /** Handler for thinking events */
204
+ onThinking?: StreamEventHandler<ThinkingStartEvent | ThinkingEvent | ThinkingEndEvent>;
205
+ /** Handler for errors */
206
+ onError?: StreamEventHandler<ErrorEvent>;
207
+ /** Handler for completion */
208
+ onComplete?: StreamEventHandler<CompleteEvent>;
209
+ /** Buffer size for backpressure */
210
+ bufferSize?: number;
211
+ /** Debounce interval in ms */
212
+ debounceMs?: number;
213
+ }
214
+ /**
215
+ * Stream Protocol Handler
216
+ *
217
+ * Central event bus for managing stream events
218
+ */
219
+ export declare class StreamProtocol {
220
+ private options;
221
+ private handlers;
222
+ private eventBuffer;
223
+ private stats;
224
+ private isComplete;
225
+ private abortController;
226
+ constructor(options?: StreamProtocolOptions);
227
+ /**
228
+ * Register event handler
229
+ */
230
+ on<T extends StreamEventType>(type: T | 'all', handler: StreamEventHandler): () => void;
231
+ /**
232
+ * Remove event handler
233
+ */
234
+ off(type: StreamEventType | 'all', handler: StreamEventHandler): void;
235
+ /**
236
+ * Emit an event
237
+ */
238
+ emit(event: AnyStreamEvent): Promise<void>;
239
+ /**
240
+ * Start the stream
241
+ */
242
+ start(metadata?: Record<string, unknown>): Promise<void>;
243
+ /**
244
+ * Emit text content
245
+ */
246
+ text(content: string, markdown?: boolean): Promise<void>;
247
+ /**
248
+ * Start a tool call
249
+ */
250
+ toolStart(toolName: string, toolId?: string): Promise<string>;
251
+ /**
252
+ * Stream tool input
253
+ */
254
+ toolInput(toolId: string, input: string, accumulated?: string): Promise<void>;
255
+ /**
256
+ * End a tool call
257
+ */
258
+ toolEnd(toolId: string, result?: unknown, error?: string): Promise<void>;
259
+ /**
260
+ * Start thinking/reasoning
261
+ */
262
+ thinkingStart(thinkingId?: string): Promise<string>;
263
+ /**
264
+ * Stream thinking content
265
+ */
266
+ thinking(content: string): Promise<void>;
267
+ /**
268
+ * End thinking
269
+ */
270
+ thinkingEnd(thinkingId?: string): Promise<void>;
271
+ /**
272
+ * Emit error
273
+ */
274
+ error(error: Error | string, code?: string, recoverable?: boolean): Promise<void>;
275
+ /**
276
+ * Complete the stream
277
+ */
278
+ complete(usage?: TokenUsage): Promise<void>;
279
+ /**
280
+ * Abort the stream
281
+ */
282
+ abort(reason?: string): Promise<void>;
283
+ /**
284
+ * Get abort signal
285
+ */
286
+ get signal(): AbortSignal | undefined;
287
+ /**
288
+ * Get current stats
289
+ */
290
+ getStats(): StreamStats;
291
+ /**
292
+ * Get event buffer
293
+ */
294
+ getBuffer(): AnyStreamEvent[];
295
+ /**
296
+ * Check if stream is complete
297
+ */
298
+ get completed(): boolean;
299
+ /**
300
+ * Clear handlers and reset state
301
+ */
302
+ reset(): void;
303
+ }
304
+ /**
305
+ * Create stream protocol with async iterator support
306
+ */
307
+ export declare function createStreamProtocol(options?: StreamProtocolOptions): StreamProtocol;
308
+ /**
309
+ * Convert async iterable to stream protocol events
310
+ */
311
+ export declare function streamToProtocol(stream: AsyncIterable<string>, protocol: StreamProtocol): AsyncGenerator<string>;
312
+ /**
313
+ * Create event emitter from stream
314
+ */
315
+ export declare function createEventEmitter(stream: AsyncIterable<AnyStreamEvent>): {
316
+ subscribe: (handler: StreamEventHandler) => () => void;
317
+ start: () => Promise<void>;
318
+ };
319
+ //# sourceMappingURL=protocol.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/core/protocol.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,68 @@
1
+ /**
2
+ * Remend-TTY - Self-healing Markdown for Terminal Streaming
3
+ *
4
+ * A zero-dependency implementation inspired by Vercel's remend package,
5
+ * optimized for TTY/ANSI terminal output.
6
+ *
7
+ * Features:
8
+ * - Auto-closes incomplete markdown syntax during streaming
9
+ * - Context-aware (respects code blocks, math blocks, nested formatting)
10
+ * - Performance-first (no regex allocations, string pooling)
11
+ * - Zero dependencies
12
+ *
13
+ * @module remend-tty
14
+ * @author Streamdown-TTY
15
+ * @license MIT
16
+ */
17
+ export interface RemendOptions {
18
+ /** Enable code block context awareness */
19
+ respectCodeBlocks?: boolean;
20
+ /** Enable math block context awareness */
21
+ respectMathBlocks?: boolean;
22
+ /** Enable thinking block context awareness */
23
+ respectThinkingBlocks?: boolean;
24
+ /** Custom incomplete link placeholder */
25
+ incompleteLinkPlaceholder?: string;
26
+ /** Custom incomplete image placeholder */
27
+ incompleteImagePlaceholder?: string;
28
+ /** Maximum input length (DoS protection) */
29
+ maxLength?: number;
30
+ }
31
+ export interface RemendResult {
32
+ /** The healed markdown string */
33
+ output: string;
34
+ /** Whether any healing was applied */
35
+ wasHealed: boolean;
36
+ /** List of applied fixes */
37
+ fixes: RemendFix[];
38
+ /** Processing time in ms */
39
+ processingTimeMs: number;
40
+ }
41
+ export interface RemendFix {
42
+ type: RemendFixType;
43
+ position: number;
44
+ original: string;
45
+ fixed: string;
46
+ }
47
+ export type RemendFixType = 'bold' | 'italic' | 'bold-italic' | 'code-inline' | 'code-block' | 'link' | 'image' | 'strikethrough' | 'math-inline' | 'math-block' | 'heading' | 'blockquote' | 'thinking';
48
+ /**
49
+ * Main healing function - auto-closes incomplete markdown syntax
50
+ */
51
+ export declare function remendTTY(input: string, options?: RemendOptions): string;
52
+ /**
53
+ * Detailed healing function with diagnostics
54
+ */
55
+ export declare function remendTTYDetailed(input: string, options?: RemendOptions): RemendResult;
56
+ /**
57
+ * Clear the healing cache
58
+ */
59
+ export declare function clearRemendCache(): void;
60
+ /**
61
+ * Get cache statistics
62
+ */
63
+ export declare function getRemendCacheStats(): {
64
+ size: number;
65
+ maxSize: number;
66
+ };
67
+ export default remendTTY;
68
+ //# sourceMappingURL=remend-tty.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remend-tty.d.ts","sourceRoot":"","sources":["../../src/core/remend-tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8CAA8C;IAC9C,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,yCAAyC;IACzC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,0CAA0C;IAC1C,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,QAAQ,GACR,aAAa,GACb,aAAa,GACb,YAAY,GACZ,MAAM,GACN,OAAO,GACP,eAAe,GACf,aAAa,GACb,YAAY,GACZ,SAAS,GACT,YAAY,GACZ,UAAU,CAAC;AAyBf;;GAEG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,YAAY,CAoId;AAyaD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAKvE;AAGD,eAAe,SAAS,CAAC"}
@@ -0,0 +1,286 @@
1
+ /**
2
+ * Zero-Dependency ANSI Renderer for TTY
3
+ *
4
+ * A universal terminal renderer that outputs pure ANSI escape sequences.
5
+ * Compatible with all terminal emulators and TTY devices.
6
+ *
7
+ * Features:
8
+ * - Zero dependencies
9
+ * - Pure ANSI escape codes
10
+ * - Cross-platform (Node, Bun, Deno, Browser terminals)
11
+ * - Object pooling for performance
12
+ * - Customizable themes
13
+ * - Memoized rendering
14
+ *
15
+ * @module renderer
16
+ */
17
+ import type { Token } from './parser.js';
18
+ /**
19
+ * ANSI escape codes
20
+ */
21
+ export declare const ANSI: {
22
+ readonly reset: "\u001B[0m";
23
+ readonly bold: "\u001B[1m";
24
+ readonly dim: "\u001B[2m";
25
+ readonly italic: "\u001B[3m";
26
+ readonly underline: "\u001B[4m";
27
+ readonly blink: "\u001B[5m";
28
+ readonly inverse: "\u001B[7m";
29
+ readonly hidden: "\u001B[8m";
30
+ readonly strikethrough: "\u001B[9m";
31
+ readonly black: "\u001B[30m";
32
+ readonly red: "\u001B[31m";
33
+ readonly green: "\u001B[32m";
34
+ readonly yellow: "\u001B[33m";
35
+ readonly blue: "\u001B[34m";
36
+ readonly magenta: "\u001B[35m";
37
+ readonly cyan: "\u001B[36m";
38
+ readonly white: "\u001B[37m";
39
+ readonly default: "\u001B[39m";
40
+ readonly brightBlack: "\u001B[90m";
41
+ readonly brightRed: "\u001B[91m";
42
+ readonly brightGreen: "\u001B[92m";
43
+ readonly brightYellow: "\u001B[93m";
44
+ readonly brightBlue: "\u001B[94m";
45
+ readonly brightMagenta: "\u001B[95m";
46
+ readonly brightCyan: "\u001B[96m";
47
+ readonly brightWhite: "\u001B[97m";
48
+ readonly bgBlack: "\u001B[40m";
49
+ readonly bgRed: "\u001B[41m";
50
+ readonly bgGreen: "\u001B[42m";
51
+ readonly bgYellow: "\u001B[43m";
52
+ readonly bgBlue: "\u001B[44m";
53
+ readonly bgMagenta: "\u001B[45m";
54
+ readonly bgCyan: "\u001B[46m";
55
+ readonly bgWhite: "\u001B[47m";
56
+ readonly bgDefault: "\u001B[49m";
57
+ readonly bgBrightBlack: "\u001B[100m";
58
+ readonly bgBrightRed: "\u001B[101m";
59
+ readonly bgBrightGreen: "\u001B[102m";
60
+ readonly bgBrightYellow: "\u001B[103m";
61
+ readonly bgBrightBlue: "\u001B[104m";
62
+ readonly bgBrightMagenta: "\u001B[105m";
63
+ readonly bgBrightCyan: "\u001B[106m";
64
+ readonly bgBrightWhite: "\u001B[107m";
65
+ readonly cursorUp: (n?: number) => string;
66
+ readonly cursorDown: (n?: number) => string;
67
+ readonly cursorForward: (n?: number) => string;
68
+ readonly cursorBack: (n?: number) => string;
69
+ readonly cursorPosition: (row: number, col: number) => string;
70
+ readonly cursorHome: "\u001B[H";
71
+ readonly cursorSave: "\u001B[s";
72
+ readonly cursorRestore: "\u001B[u";
73
+ readonly cursorHide: "\u001B[?25l";
74
+ readonly cursorShow: "\u001B[?25h";
75
+ readonly eraseScreen: "\u001B[2J";
76
+ readonly eraseScreenEnd: "\u001B[0J";
77
+ readonly eraseScreenStart: "\u001B[1J";
78
+ readonly eraseLine: "\u001B[2K";
79
+ readonly eraseLineEnd: "\u001B[0K";
80
+ readonly eraseLineStart: "\u001B[1K";
81
+ readonly fg256: (code: number) => string;
82
+ readonly bg256: (code: number) => string;
83
+ readonly fgRgb: (r: number, g: number, b: number) => string;
84
+ readonly bgRgb: (r: number, g: number, b: number) => string;
85
+ };
86
+ /**
87
+ * Style definition
88
+ */
89
+ export interface ANSIStyle {
90
+ fg?: keyof typeof FG_COLORS | string;
91
+ bg?: keyof typeof BG_COLORS | string;
92
+ bold?: boolean;
93
+ dim?: boolean;
94
+ italic?: boolean;
95
+ underline?: boolean;
96
+ strikethrough?: boolean;
97
+ inverse?: boolean;
98
+ }
99
+ declare const FG_COLORS: Record<string, string>;
100
+ declare const BG_COLORS: Record<string, string>;
101
+ /**
102
+ * Theme definition
103
+ */
104
+ export interface Theme {
105
+ name: string;
106
+ heading1: ANSIStyle;
107
+ heading2: ANSIStyle;
108
+ heading3: ANSIStyle;
109
+ heading4: ANSIStyle;
110
+ heading5: ANSIStyle;
111
+ heading6: ANSIStyle;
112
+ paragraph: ANSIStyle;
113
+ strong: ANSIStyle;
114
+ em: ANSIStyle;
115
+ code: ANSIStyle;
116
+ codeBlock: ANSIStyle;
117
+ codeBlockBorder: ANSIStyle;
118
+ codeBlockLang: ANSIStyle;
119
+ blockquote: ANSIStyle;
120
+ blockquoteBorder: ANSIStyle;
121
+ link: ANSIStyle;
122
+ image: ANSIStyle;
123
+ list: ANSIStyle;
124
+ listBullet: ANSIStyle;
125
+ task: ANSIStyle;
126
+ taskChecked: ANSIStyle;
127
+ taskUnchecked: ANSIStyle;
128
+ table: ANSIStyle;
129
+ tableHeader: ANSIStyle;
130
+ tableBorder: ANSIStyle;
131
+ hr: ANSIStyle;
132
+ del: ANSIStyle;
133
+ mathInline: ANSIStyle;
134
+ mathBlock: ANSIStyle;
135
+ thinking: ANSIStyle;
136
+ thinkingBorder: ANSIStyle;
137
+ mermaid: ANSIStyle;
138
+ incomplete: ANSIStyle;
139
+ }
140
+ /**
141
+ * Default dark theme
142
+ */
143
+ export declare const darkTheme: Theme;
144
+ /**
145
+ * Light theme
146
+ */
147
+ export declare const lightTheme: Theme;
148
+ /**
149
+ * Renderer options
150
+ */
151
+ export interface RendererOptions {
152
+ /** Theme to use */
153
+ theme?: Theme | 'dark' | 'light';
154
+ /** Maximum width for wrapping */
155
+ maxWidth?: number;
156
+ /** Show line numbers in code blocks */
157
+ lineNumbers?: boolean;
158
+ /** Custom code highlighter */
159
+ highlighter?: (code: string, lang: string) => string;
160
+ /** Custom math renderer */
161
+ mathRenderer?: (math: string, block: boolean) => string;
162
+ /** Custom mermaid renderer */
163
+ mermaidRenderer?: (code: string) => string | Promise<string>;
164
+ /** Word wrap long lines */
165
+ wordWrap?: boolean;
166
+ /** Indent size for nested elements */
167
+ indentSize?: number;
168
+ }
169
+ /**
170
+ * Apply style to text
171
+ */
172
+ export declare function applyStyle(text: string, style: ANSIStyle): string;
173
+ /**
174
+ * Strip ANSI codes from text
175
+ */
176
+ export declare function stripAnsi(text: string): string;
177
+ /**
178
+ * Get visible length (excluding ANSI codes)
179
+ */
180
+ export declare function visibleLength(text: string): number;
181
+ /**
182
+ * Word wrap text
183
+ */
184
+ export declare function wordWrap(text: string, maxWidth: number): string[];
185
+ /**
186
+ * Zero-dependency ANSI renderer
187
+ */
188
+ export declare class ANSIRenderer {
189
+ private options;
190
+ private theme;
191
+ constructor(options?: RendererOptions);
192
+ /**
193
+ * Render tokens to ANSI string
194
+ */
195
+ render(tokens: Token[]): string;
196
+ /**
197
+ * Render tokens to output stream
198
+ */
199
+ renderToStream(tokens: Token[], stream: NodeJS.WritableStream): void;
200
+ /**
201
+ * Render a single token
202
+ */
203
+ private renderToken;
204
+ /**
205
+ * Render heading
206
+ */
207
+ private renderHeading;
208
+ /**
209
+ * Render paragraph
210
+ */
211
+ private renderParagraph;
212
+ /**
213
+ * Render text
214
+ */
215
+ private renderText;
216
+ /**
217
+ * Render code block
218
+ */
219
+ private renderCodeBlock;
220
+ /**
221
+ * Render blockquote
222
+ */
223
+ private renderBlockquote;
224
+ /**
225
+ * Render list
226
+ */
227
+ private renderList;
228
+ /**
229
+ * Render list item
230
+ */
231
+ private renderListItem;
232
+ /**
233
+ * Render task list item
234
+ */
235
+ private renderTask;
236
+ /**
237
+ * Render link
238
+ */
239
+ private renderLink;
240
+ /**
241
+ * Render image
242
+ */
243
+ private renderImage;
244
+ /**
245
+ * Render table
246
+ */
247
+ private renderTable;
248
+ /**
249
+ * Pad cell content for alignment
250
+ */
251
+ private padCell;
252
+ /**
253
+ * Render horizontal rule
254
+ */
255
+ private renderHorizontalRule;
256
+ /**
257
+ * Render math block
258
+ */
259
+ private renderMathBlock;
260
+ /**
261
+ * Render mermaid diagram
262
+ */
263
+ private renderMermaid;
264
+ /**
265
+ * Render thinking block
266
+ */
267
+ private renderThinking;
268
+ /**
269
+ * Default code highlighter (basic keyword highlighting)
270
+ */
271
+ private defaultHighlighter;
272
+ /**
273
+ * Default math renderer (passthrough)
274
+ */
275
+ private defaultMathRenderer;
276
+ /**
277
+ * Default mermaid renderer (ASCII representation)
278
+ */
279
+ private defaultMermaidRenderer;
280
+ /**
281
+ * Clear render cache
282
+ */
283
+ static clearCache(): void;
284
+ }
285
+ export default ANSIRenderer;
286
+ //# sourceMappingURL=renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/core/renderer.ts"],"names":[],"mappings":"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"}