@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,113 @@
1
+ /**
2
+ * AI SDK Stream Adapter
3
+ *
4
+ * This module provides an adapter that handles AI SDK streaming events
5
+ * and formats them appropriately for TTY rendering using streamtty.
6
+ */
7
+ import { StreamEvent, StreamEventOptions } from './types/stream-events.js';
8
+ export interface AISDKStreamAdapterOptions extends StreamEventOptions {
9
+ maxToolResultLength?: number;
10
+ formatToolCalls?: boolean;
11
+ showThinking?: boolean;
12
+ renderTimestamps?: boolean;
13
+ }
14
+ export declare class AISDKStreamAdapter {
15
+ private renderer;
16
+ private options;
17
+ constructor(renderer: {
18
+ stream: (content: string) => void;
19
+ }, options?: AISDKStreamAdapterOptions);
20
+ /**
21
+ * Handle a stream of AI SDK events
22
+ */
23
+ handleAISDKStream(stream: AsyncGenerator<StreamEvent>): AsyncGenerator<void>;
24
+ /**
25
+ * Process a single stream event
26
+ */
27
+ processEvent(event: StreamEvent): Promise<void>;
28
+ /**
29
+ * Render a validated stream event
30
+ */
31
+ private renderEvent;
32
+ /**
33
+ * Render text delta events (streaming text)
34
+ */
35
+ private renderTextDelta;
36
+ /**
37
+ * Render tool call events
38
+ */
39
+ private renderToolCall;
40
+ /**
41
+ * Format a tool call event for display
42
+ */
43
+ private formatToolCall;
44
+ /**
45
+ * Render tool result events
46
+ */
47
+ private renderToolResult;
48
+ /**
49
+ * Format a tool result event for display
50
+ */
51
+ private formatToolResult;
52
+ /**
53
+ * Format tool result content for display
54
+ */
55
+ private formatToolResultContent;
56
+ /**
57
+ * Truncate content to specified length
58
+ */
59
+ private truncateContent;
60
+ /**
61
+ * Render thinking/reasoning events
62
+ */
63
+ private renderThinking;
64
+ /**
65
+ * Format thinking events for display
66
+ */
67
+ private formatThinking;
68
+ /**
69
+ * Render status events
70
+ */
71
+ private renderStatus;
72
+ /**
73
+ * Format status events for display
74
+ */
75
+ private formatStatus;
76
+ /**
77
+ * Render error events
78
+ */
79
+ private renderError;
80
+ /**
81
+ * Format error events for display
82
+ */
83
+ private formatError;
84
+ /**
85
+ * Render start events
86
+ */
87
+ private renderStart;
88
+ /**
89
+ * Render complete events
90
+ */
91
+ private renderComplete;
92
+ /**
93
+ * Get appropriate icon for tool name
94
+ */
95
+ private getToolIcon;
96
+ /**
97
+ * Get appropriate icon for status
98
+ */
99
+ private getStatusIcon;
100
+ /**
101
+ * Format tool arguments for display
102
+ */
103
+ private formatToolArgs;
104
+ /**
105
+ * Update adapter options
106
+ */
107
+ updateOptions(options: Partial<AISDKStreamAdapterOptions>): void;
108
+ /**
109
+ * Get current options
110
+ */
111
+ getOptions(): AISDKStreamAdapterOptions;
112
+ }
113
+ //# sourceMappingURL=ai-sdk-adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk-adapter.d.ts","sourceRoot":"","sources":["../src/ai-sdk-adapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EACL,WAAW,EAEX,kBAAkB,EAOnB,MAAM,0BAA0B,CAAA;AAGjC,MAAM,WAAW,yBAA0B,SAAQ,kBAAkB;IACnE,mBAAmB,CAAC,EAAE,MAAM,CAAA;IAC5B,eAAe,CAAC,EAAE,OAAO,CAAA;IACzB,YAAY,CAAC,EAAE,OAAO,CAAA;IACtB,gBAAgB,CAAC,EAAE,OAAO,CAAA;CAC3B;AAED,qBAAa,kBAAkB;IAI3B,OAAO,CAAC,QAAQ;IAHlB,OAAO,CAAC,OAAO,CAAqC;gBAG1C,QAAQ,EAAE;QAAE,MAAM,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAA;KAAE,EACvD,OAAO,GAAE,yBAA8B;IAazC;;OAEG;IACI,iBAAiB,CACtB,MAAM,EAAE,cAAc,CAAC,WAAW,CAAC,GAClC,cAAc,CAAC,IAAI,CAAC;IAOvB;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAiBrD;;OAEG;YACW,WAAW;IA+BzB;;OAEG;YACW,eAAe;IAM7B;;OAEG;YACW,cAAc;IAS5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAWtB;;OAEG;YACW,gBAAgB;IAK9B;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAWxB;;OAEG;IACH,OAAO,CAAC,uBAAuB;IAgB/B;;OAEG;IACH,OAAO,CAAC,eAAe;IAQvB;;OAEG;YACW,cAAc;IAS5B;;OAEG;IACH,OAAO,CAAC,cAAc;IAUtB;;OAEG;YACW,YAAY;IAK1B;;OAEG;IACH,OAAO,CAAC,YAAY;IAWpB;;OAEG;YACW,WAAW;IAKzB;;OAEG;IACH,OAAO,CAAC,WAAW;IAUnB;;OAEG;YACW,WAAW;IAQzB;;OAEG;YACW,cAAc;IAQ5B;;OAEG;IACH,OAAO,CAAC,WAAW;IAiCnB;;OAEG;IACH,OAAO,CAAC,aAAa;IAerB;;OAEG;IACH,OAAO,CAAC,cAAc;IAQtB;;OAEG;IACH,aAAa,CAAC,OAAO,EAAE,OAAO,CAAC,yBAAyB,CAAC,GAAG,IAAI;IAIhE;;OAEG;IACH,UAAU,IAAI,yBAAyB;CAGxC"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
@@ -0,0 +1,209 @@
1
+ /**
2
+ * Streamdown-TTY Enterprise
3
+ *
4
+ * The main entry point for enterprise-grade markdown streaming in terminals.
5
+ * Drop-in compatible with Vercel's Streamdown, optimized for TTY/ANSI output.
6
+ *
7
+ * Features:
8
+ * - Zero-dependency core (parser + renderer)
9
+ * - Self-healing markdown (remend-tty)
10
+ * - Universal stream protocol
11
+ * - Cross-runtime support (Node, Bun, Deno, Browser terminals)
12
+ * - AI SDK adapters (Anthropic, OpenAI, Vercel AI)
13
+ * - Performance optimized (object pooling, memoization, LRU cache)
14
+ * - Theme support (dark, light, custom)
15
+ * - Security hardening (ANSI sanitization)
16
+ *
17
+ * @module streamdown-tty
18
+ * @author NikCLI
19
+ * @license MIT
20
+ */
21
+ import { StreamingParser, type Token, type ParserOptions } from './parser.js';
22
+ import { ANSIRenderer, type RendererOptions, type Theme, darkTheme, lightTheme, ANSI } from './renderer.js';
23
+ import { StreamProtocol, createStreamProtocol, type StreamProtocolOptions, type AnyStreamEvent, type StreamStats } from './protocol.js';
24
+ import { remendTTY, remendTTYDetailed, clearRemendCache, type RemendOptions, type RemendResult } from './remend-tty.js';
25
+ /**
26
+ * Streamdown-TTY options
27
+ */
28
+ export interface StreamdownTTYOptions {
29
+ /** Output stream (defaults to process.stdout) */
30
+ output?: NodeJS.WritableStream;
31
+ /** Parser options */
32
+ parser?: ParserOptions;
33
+ /** Renderer options */
34
+ renderer?: RendererOptions;
35
+ /** Protocol options for event handling */
36
+ protocol?: StreamProtocolOptions;
37
+ /** Remend (self-healing) options */
38
+ remend?: RemendOptions;
39
+ /** Theme ('dark', 'light', or custom Theme object) */
40
+ theme?: 'dark' | 'light' | Theme;
41
+ /** Maximum width for rendering */
42
+ maxWidth?: number;
43
+ /** Enable syntax highlighting */
44
+ syntaxHighlight?: boolean;
45
+ /** Show line numbers in code blocks */
46
+ lineNumbers?: boolean;
47
+ /** Enable GFM (GitHub Flavored Markdown) */
48
+ gfm?: boolean;
49
+ /** Enable math rendering */
50
+ math?: boolean;
51
+ /** Enable mermaid diagram detection */
52
+ mermaid?: boolean;
53
+ /** Enable thinking block parsing */
54
+ thinking?: boolean;
55
+ /** Auto-heal incomplete markdown */
56
+ autoHeal?: boolean;
57
+ /** Render debounce interval in ms */
58
+ debounceMs?: number;
59
+ /** Custom code highlighter */
60
+ highlighter?: (code: string, lang: string) => string;
61
+ /** Custom math renderer */
62
+ mathRenderer?: (math: string, block: boolean) => string;
63
+ /** Custom mermaid renderer */
64
+ mermaidRenderer?: (code: string) => string | Promise<string>;
65
+ }
66
+ /**
67
+ * AI-specific options for streaming
68
+ */
69
+ export interface AIOptions {
70
+ parseIncompleteMarkdown: boolean;
71
+ syntaxHighlight: boolean;
72
+ formatToolCalls: boolean;
73
+ showThinking: boolean;
74
+ maxToolResultLength: number;
75
+ renderTimestamps: boolean;
76
+ }
77
+ /**
78
+ * Main Streamdown-TTY class
79
+ */
80
+ export declare class StreamdownTTY {
81
+ private parser;
82
+ private renderer;
83
+ private protocol;
84
+ private output;
85
+ private options;
86
+ private aiOptions;
87
+ private state;
88
+ private renderTimeout;
89
+ constructor(options?: StreamdownTTYOptions);
90
+ /**
91
+ * Get terminal width
92
+ */
93
+ private getTerminalWidth;
94
+ /**
95
+ * Setup protocol event handlers
96
+ */
97
+ private setupProtocolHandlers;
98
+ /**
99
+ * Stream a chunk of markdown content
100
+ */
101
+ stream(chunk: string): Promise<void>;
102
+ /**
103
+ * Set complete markdown content (replaces buffer)
104
+ */
105
+ setContent(markdown: string): void;
106
+ /**
107
+ * Schedule a debounced render
108
+ */
109
+ private scheduleRender;
110
+ /**
111
+ * Render current content
112
+ */
113
+ render(): void;
114
+ /**
115
+ * Render and return string (no output)
116
+ */
117
+ renderToString(markdown?: string): string;
118
+ /**
119
+ * Process AI stream (async generator)
120
+ */
121
+ processStream(stream: AsyncIterable<string>): Promise<StreamStats>;
122
+ /**
123
+ * Process stream with protocol events
124
+ */
125
+ processStreamWithEvents(stream: AsyncIterable<string>): AsyncGenerator<AnyStreamEvent>;
126
+ /**
127
+ * Get current buffer content
128
+ */
129
+ getContent(): string;
130
+ /**
131
+ * Get current tokens
132
+ */
133
+ getTokens(): Token[];
134
+ /**
135
+ * Get protocol instance for advanced usage
136
+ */
137
+ getProtocol(): StreamProtocol;
138
+ /**
139
+ * Get parser instance
140
+ */
141
+ getParser(): StreamingParser;
142
+ /**
143
+ * Get renderer instance
144
+ */
145
+ getRenderer(): ANSIRenderer;
146
+ /**
147
+ * Check if currently streaming
148
+ */
149
+ isStreaming(): boolean;
150
+ /**
151
+ * Clear content and reset state
152
+ */
153
+ clear(): void;
154
+ /**
155
+ * Complete streaming and final render
156
+ */
157
+ complete(): void;
158
+ /**
159
+ * Abort streaming
160
+ */
161
+ abort(): void;
162
+ /**
163
+ * Destroy instance and cleanup
164
+ */
165
+ destroy(): void;
166
+ /**
167
+ * Stream a single event (AI SDK compatibility)
168
+ */
169
+ streamEvent(event: AnyStreamEvent): Promise<void>;
170
+ /**
171
+ * Stream events from an async generator (AI SDK compatibility)
172
+ */
173
+ streamEvents(events: AsyncGenerator<AnyStreamEvent>): Promise<void>;
174
+ /**
175
+ * Handle AI SDK stream (AI SDK compatibility)
176
+ */
177
+ handleAISDKStream(stream: AsyncGenerator<AnyStreamEvent>): AsyncGenerator<void>;
178
+ /**
179
+ * Update AI-specific options
180
+ */
181
+ updateAIOptions(options: Partial<AIOptions>): void;
182
+ /**
183
+ * Get current AI-specific options
184
+ */
185
+ getAIOptions(): AIOptions;
186
+ /**
187
+ * Get the output stream
188
+ */
189
+ getOutput(): NodeJS.WritableStream;
190
+ }
191
+ /**
192
+ * Quick render markdown to ANSI string
193
+ */
194
+ export declare function render(markdown: string, options?: StreamdownTTYOptions): string;
195
+ /**
196
+ * Quick stream markdown to output
197
+ */
198
+ export declare function stream(source: AsyncIterable<string> | string, options?: StreamdownTTYOptions): Promise<StreamStats | void>;
199
+ /**
200
+ * Heal incomplete markdown
201
+ */
202
+ export declare function heal(markdown: string, options?: RemendOptions): string;
203
+ /**
204
+ * Heal with detailed diagnostics
205
+ */
206
+ export declare function healDetailed(markdown: string, options?: RemendOptions): RemendResult;
207
+ export { StreamingParser, type Token, type ParserOptions, ANSIRenderer, type RendererOptions, type Theme, darkTheme, lightTheme, ANSI, StreamProtocol, createStreamProtocol, type StreamProtocolOptions, type AnyStreamEvent, type StreamStats, remendTTY, remendTTYDetailed, clearRemendCache, type RemendOptions, type RemendResult, };
208
+ export default StreamdownTTY;
209
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,40 @@
1
+ /**
2
+ * LaTeX Math to Unicode Renderer for TTY
3
+ *
4
+ * Converts LaTeX math expressions to Unicode characters
5
+ * for beautiful terminal rendering without external dependencies.
6
+ *
7
+ * Supports:
8
+ * - Greek letters (α, β, γ, δ, etc.)
9
+ * - Mathematical operators (∑, ∏, ∫, √, etc.)
10
+ * - Subscripts and superscripts
11
+ * - Fractions (approximate)
12
+ * - Common symbols
13
+ *
14
+ * @module math-renderer
15
+ */
16
+ /**
17
+ * Renderer options
18
+ */
19
+ export interface MathRendererOptions {
20
+ /** Use Unicode fractions when possible */
21
+ unicodeFractions?: boolean;
22
+ /** Show original LaTeX on parse failure */
23
+ fallbackToLatex?: boolean;
24
+ /** Maximum recursion depth */
25
+ maxDepth?: number;
26
+ }
27
+ /**
28
+ * Render LaTeX math to Unicode
29
+ */
30
+ export declare function renderMathToUnicode(latex: string, options?: MathRendererOptions): string;
31
+ /**
32
+ * Render math block with box
33
+ */
34
+ export declare function renderMathBlock(latex: string, options?: MathRendererOptions): string;
35
+ /**
36
+ * Create math renderer function for use with StreamdownTTY
37
+ */
38
+ export declare function createMathRenderer(options?: MathRendererOptions): (math: string, block: boolean) => string;
39
+ export default renderMathToUnicode;
40
+ //# sourceMappingURL=math-renderer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"math-renderer.d.ts","sourceRoot":"","sources":["../../src/core/math-renderer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAwJH;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,OAAO,CAAC;IAC3B,2CAA2C;IAC3C,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,8BAA8B;IAC9B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AA4DD;;GAEG;AACH,wBAAgB,mBAAmB,CACjC,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,MAAM,CA0KR;AAED;;GAEG;AACH,wBAAgB,eAAe,CAC7B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,mBAAwB,GAChC,MAAM,CAUR;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAChC,OAAO,GAAE,mBAAwB,GAChC,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,KAAK,MAAM,CAO1C;AAED,eAAe,mBAAmB,CAAC"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Zero-Dependency Streaming Markdown Parser for TTY
3
+ *
4
+ * A lightweight, high-performance markdown parser designed for terminal output.
5
+ * No external dependencies - pure TypeScript.
6
+ *
7
+ * Features:
8
+ * - Streaming-optimized with incremental parsing
9
+ * - Integrated remend-tty for self-healing
10
+ * - GFM support (tables, task lists, strikethrough)
11
+ * - Context-aware parsing (code blocks, math, thinking)
12
+ * - Object pooling for performance
13
+ *
14
+ * @module parser
15
+ */
16
+ import { type RemendOptions } from './remend-tty.js';
17
+ export interface Token {
18
+ type: TokenType;
19
+ content: string;
20
+ raw: string;
21
+ depth?: number;
22
+ lang?: string;
23
+ ordered?: boolean;
24
+ checked?: boolean;
25
+ url?: string;
26
+ alt?: string;
27
+ title?: string;
28
+ align?: ('left' | 'center' | 'right' | null)[];
29
+ header?: string[];
30
+ rows?: string[][];
31
+ incomplete?: boolean;
32
+ children?: Token[];
33
+ meta?: Record<string, unknown>;
34
+ }
35
+ export type TokenType = 'heading' | 'paragraph' | 'text' | 'strong' | 'em' | 'code' | 'codeblock' | 'blockquote' | 'list' | 'listitem' | 'task' | 'link' | 'image' | 'table' | 'hr' | 'br' | 'del' | 'math-inline' | 'math-block' | 'mermaid' | 'thinking' | 'html' | 'newline';
36
+ export interface ParserOptions {
37
+ /** Enable GFM extensions */
38
+ gfm?: boolean;
39
+ /** Enable math parsing */
40
+ math?: boolean;
41
+ /** Enable mermaid detection */
42
+ mermaid?: boolean;
43
+ /** Enable thinking block parsing */
44
+ thinking?: boolean;
45
+ /** Enable self-healing with remend */
46
+ autoHeal?: boolean;
47
+ /** Remend options */
48
+ remendOptions?: RemendOptions;
49
+ /** Preserve whitespace */
50
+ preserveWhitespace?: boolean;
51
+ }
52
+ /**
53
+ * Zero-dependency streaming markdown parser
54
+ */
55
+ export declare class StreamingParser {
56
+ private buffer;
57
+ private tokens;
58
+ private options;
59
+ private lastParsedLength;
60
+ constructor(options?: ParserOptions);
61
+ /**
62
+ * Add a chunk of markdown and return updated tokens
63
+ */
64
+ addChunk(chunk: string): Token[];
65
+ /**
66
+ * Set complete content
67
+ */
68
+ setContent(content: string): Token[];
69
+ /**
70
+ * Parse the current buffer
71
+ */
72
+ parse(): Token[];
73
+ /**
74
+ * Parse block-level elements
75
+ */
76
+ private parseBlocks;
77
+ /**
78
+ * Parse thinking block
79
+ */
80
+ private parseThinkingBlock;
81
+ /**
82
+ * Parse code block
83
+ */
84
+ private parseCodeBlock;
85
+ /**
86
+ * Check if code looks like mermaid
87
+ */
88
+ private isMermaidCode;
89
+ /**
90
+ * Parse math block
91
+ */
92
+ private parseMathBlock;
93
+ /**
94
+ * Parse heading
95
+ */
96
+ private parseHeading;
97
+ /**
98
+ * Parse blockquote
99
+ */
100
+ private parseBlockquote;
101
+ /**
102
+ * Parse list
103
+ */
104
+ private parseList;
105
+ /**
106
+ * Parse table (GFM)
107
+ */
108
+ private parseTable;
109
+ /**
110
+ * Parse a table row
111
+ */
112
+ private parseTableRow;
113
+ /**
114
+ * Parse table alignments from separator row
115
+ */
116
+ private parseTableAlignments;
117
+ /**
118
+ * Parse paragraph with inline elements
119
+ */
120
+ private parseParagraph;
121
+ /**
122
+ * Parse inline elements
123
+ */
124
+ parseInline(text: string): Token[];
125
+ /**
126
+ * Get current buffer
127
+ */
128
+ getBuffer(): string;
129
+ /**
130
+ * Get current tokens
131
+ */
132
+ getTokens(): Token[];
133
+ /**
134
+ * Clear the parser state
135
+ */
136
+ clear(): void;
137
+ }
138
+ export default StreamingParser;
139
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/core/parser.ts"],"names":[],"mappings":"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"}