@nicomatt69/streamtty 0.0.1

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 (199) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +471 -0
  3. package/dist/ai-sdk-adapter.d.ts +113 -0
  4. package/dist/ai-sdk-adapter.d.ts.map +1 -0
  5. package/dist/ai-sdk-adapter.js +304 -0
  6. package/dist/ai-sdk-adapter.js.map +1 -0
  7. package/dist/cli.d.ts +3 -0
  8. package/dist/cli.d.ts.map +1 -0
  9. package/dist/cli.js +188 -0
  10. package/dist/cli.js.map +1 -0
  11. package/dist/errors.d.ts +131 -0
  12. package/dist/errors.d.ts.map +1 -0
  13. package/dist/errors.js +346 -0
  14. package/dist/errors.js.map +1 -0
  15. package/dist/events.d.ts +185 -0
  16. package/dist/events.d.ts.map +1 -0
  17. package/dist/events.js +350 -0
  18. package/dist/events.js.map +1 -0
  19. package/dist/index.d.ts +117 -0
  20. package/dist/index.d.ts.map +1 -0
  21. package/dist/index.js +323 -0
  22. package/dist/index.js.map +1 -0
  23. package/dist/parser/streaming-parser.d.ts +81 -0
  24. package/dist/parser/streaming-parser.d.ts.map +1 -0
  25. package/dist/parser/streaming-parser.js +522 -0
  26. package/dist/parser/streaming-parser.js.map +1 -0
  27. package/dist/performance.d.ts +139 -0
  28. package/dist/performance.d.ts.map +1 -0
  29. package/dist/performance.js +401 -0
  30. package/dist/performance.js.map +1 -0
  31. package/dist/plugins/index.d.ts +6 -0
  32. package/dist/plugins/index.d.ts.map +1 -0
  33. package/dist/plugins/index.js +22 -0
  34. package/dist/plugins/index.js.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-inline.js +289 -0
  38. package/dist/plugins/plugin-system-inline.js.map +1 -0
  39. package/dist/plugins/plugin-system.d.ts +65 -0
  40. package/dist/plugins/plugin-system.d.ts.map +1 -0
  41. package/dist/plugins/plugin-system.js +202 -0
  42. package/dist/plugins/plugin-system.js.map +1 -0
  43. package/dist/plugins/rehype/harden.d.ts +15 -0
  44. package/dist/plugins/rehype/harden.d.ts.map +1 -0
  45. package/dist/plugins/rehype/harden.js +71 -0
  46. package/dist/plugins/rehype/harden.js.map +1 -0
  47. package/dist/plugins/rehype/index.d.ts +5 -0
  48. package/dist/plugins/rehype/index.d.ts.map +1 -0
  49. package/dist/plugins/rehype/index.js +21 -0
  50. package/dist/plugins/rehype/index.js.map +1 -0
  51. package/dist/plugins/remark/index.d.ts +6 -0
  52. package/dist/plugins/remark/index.d.ts.map +1 -0
  53. package/dist/plugins/remark/index.js +22 -0
  54. package/dist/plugins/remark/index.js.map +1 -0
  55. package/dist/plugins/remark/math.d.ts +7 -0
  56. package/dist/plugins/remark/math.d.ts.map +1 -0
  57. package/dist/plugins/remark/math.js +22 -0
  58. package/dist/plugins/remark/math.js.map +1 -0
  59. package/dist/plugins/remark/mermaid.d.ts +7 -0
  60. package/dist/plugins/remark/mermaid.d.ts.map +1 -0
  61. package/dist/plugins/remark/mermaid.js +19 -0
  62. package/dist/plugins/remark/mermaid.js.map +1 -0
  63. package/dist/plugins/types.d.ts +72 -0
  64. package/dist/plugins/types.d.ts.map +1 -0
  65. package/dist/plugins/types.js +3 -0
  66. package/dist/plugins/types.js.map +1 -0
  67. package/dist/renderer/blessed-renderer.d.ts +92 -0
  68. package/dist/renderer/blessed-renderer.d.ts.map +1 -0
  69. package/dist/renderer/blessed-renderer.js +610 -0
  70. package/dist/renderer/blessed-renderer.js.map +1 -0
  71. package/dist/renderers/index.d.ts +7 -0
  72. package/dist/renderers/index.d.ts.map +1 -0
  73. package/dist/renderers/index.js +21 -0
  74. package/dist/renderers/index.js.map +1 -0
  75. package/dist/renderers/math-renderer.d.ts +49 -0
  76. package/dist/renderers/math-renderer.d.ts.map +1 -0
  77. package/dist/renderers/math-renderer.js +193 -0
  78. package/dist/renderers/math-renderer.js.map +1 -0
  79. package/dist/renderers/mermaid-ascii.d.ts +14 -0
  80. package/dist/renderers/mermaid-ascii.d.ts.map +1 -0
  81. package/dist/renderers/mermaid-ascii.js +260 -0
  82. package/dist/renderers/mermaid-ascii.js.map +1 -0
  83. package/dist/renderers/mermaid-renderer.d.ts +79 -0
  84. package/dist/renderers/mermaid-renderer.d.ts.map +1 -0
  85. package/dist/renderers/mermaid-renderer.js +298 -0
  86. package/dist/renderers/mermaid-renderer.js.map +1 -0
  87. package/dist/renderers/shiki-ansi.d.ts +48 -0
  88. package/dist/renderers/shiki-ansi.d.ts.map +1 -0
  89. package/dist/renderers/shiki-ansi.js +206 -0
  90. package/dist/renderers/shiki-ansi.js.map +1 -0
  91. package/dist/renderers/table-ascii.d.ts +30 -0
  92. package/dist/renderers/table-ascii.d.ts.map +1 -0
  93. package/dist/renderers/table-ascii.js +243 -0
  94. package/dist/renderers/table-ascii.js.map +1 -0
  95. package/dist/renderers/table-renderer.d.ts +49 -0
  96. package/dist/renderers/table-renderer.d.ts.map +1 -0
  97. package/dist/renderers/table-renderer.js +224 -0
  98. package/dist/renderers/table-renderer.js.map +1 -0
  99. package/dist/renderers/unicode-math.d.ts +29 -0
  100. package/dist/renderers/unicode-math.d.ts.map +1 -0
  101. package/dist/renderers/unicode-math.js +181 -0
  102. package/dist/renderers/unicode-math.js.map +1 -0
  103. package/dist/security/ansi-sanitizer.d.ts +71 -0
  104. package/dist/security/ansi-sanitizer.d.ts.map +1 -0
  105. package/dist/security/ansi-sanitizer.js +275 -0
  106. package/dist/security/ansi-sanitizer.js.map +1 -0
  107. package/dist/security/chunk-processor.d.ts +81 -0
  108. package/dist/security/chunk-processor.d.ts.map +1 -0
  109. package/dist/security/chunk-processor.js +297 -0
  110. package/dist/security/chunk-processor.js.map +1 -0
  111. package/dist/security/index.d.ts +6 -0
  112. package/dist/security/index.d.ts.map +1 -0
  113. package/dist/security/index.js +22 -0
  114. package/dist/security/index.js.map +1 -0
  115. package/dist/security/input-validator.d.ts +55 -0
  116. package/dist/security/input-validator.d.ts.map +1 -0
  117. package/dist/security/input-validator.js +201 -0
  118. package/dist/security/input-validator.js.map +1 -0
  119. package/dist/stream-protocol.d.ts +61 -0
  120. package/dist/stream-protocol.d.ts.map +1 -0
  121. package/dist/stream-protocol.js +214 -0
  122. package/dist/stream-protocol.js.map +1 -0
  123. package/dist/streamdown-compat.d.ts +74 -0
  124. package/dist/streamdown-compat.d.ts.map +1 -0
  125. package/dist/streamdown-compat.js +241 -0
  126. package/dist/streamdown-compat.js.map +1 -0
  127. package/dist/streaming/stream-stats.d.ts +97 -0
  128. package/dist/streaming/stream-stats.d.ts.map +1 -0
  129. package/dist/streaming/stream-stats.js +217 -0
  130. package/dist/streaming/stream-stats.js.map +1 -0
  131. package/dist/streaming-integration.d.ts +71 -0
  132. package/dist/streaming-integration.d.ts.map +1 -0
  133. package/dist/streaming-integration.js +194 -0
  134. package/dist/streaming-integration.js.map +1 -0
  135. package/dist/themes/index.d.ts +59 -0
  136. package/dist/themes/index.d.ts.map +1 -0
  137. package/dist/themes/index.js +122 -0
  138. package/dist/themes/index.js.map +1 -0
  139. package/dist/types/index.d.ts +222 -0
  140. package/dist/types/index.d.ts.map +1 -0
  141. package/dist/types/index.js +3 -0
  142. package/dist/types/index.js.map +1 -0
  143. package/dist/types/plugin-types.d.ts +5 -0
  144. package/dist/types/plugin-types.d.ts.map +1 -0
  145. package/dist/types/plugin-types.js +6 -0
  146. package/dist/types/plugin-types.js.map +1 -0
  147. package/dist/types/stream-events.d.ts +71 -0
  148. package/dist/types/stream-events.d.ts.map +1 -0
  149. package/dist/types/stream-events.js +10 -0
  150. package/dist/types/stream-events.js.map +1 -0
  151. package/dist/utils/blessed-syntax-highlighter.d.ts +124 -0
  152. package/dist/utils/blessed-syntax-highlighter.d.ts.map +1 -0
  153. package/dist/utils/blessed-syntax-highlighter.js +440 -0
  154. package/dist/utils/blessed-syntax-highlighter.js.map +1 -0
  155. package/dist/utils/enhanced-table-renderer.d.ts +77 -0
  156. package/dist/utils/enhanced-table-renderer.d.ts.map +1 -0
  157. package/dist/utils/enhanced-table-renderer.js +376 -0
  158. package/dist/utils/enhanced-table-renderer.js.map +1 -0
  159. package/dist/utils/formatting.d.ts +100 -0
  160. package/dist/utils/formatting.d.ts.map +1 -0
  161. package/dist/utils/formatting.js +220 -0
  162. package/dist/utils/formatting.js.map +1 -0
  163. package/dist/utils/index.d.ts +5 -0
  164. package/dist/utils/index.d.ts.map +1 -0
  165. package/dist/utils/index.js +21 -0
  166. package/dist/utils/index.js.map +1 -0
  167. package/dist/utils/math-unicode-renderer.d.ts +38 -0
  168. package/dist/utils/math-unicode-renderer.d.ts.map +1 -0
  169. package/dist/utils/math-unicode-renderer.js +380 -0
  170. package/dist/utils/math-unicode-renderer.js.map +1 -0
  171. package/dist/utils/mermaid-ascii-renderer.d.ts +20 -0
  172. package/dist/utils/mermaid-ascii-renderer.d.ts.map +1 -0
  173. package/dist/utils/mermaid-ascii-renderer.js +325 -0
  174. package/dist/utils/mermaid-ascii-renderer.js.map +1 -0
  175. package/dist/utils/mermaid-ascii.d.ts +53 -0
  176. package/dist/utils/mermaid-ascii.d.ts.map +1 -0
  177. package/dist/utils/mermaid-ascii.js +181 -0
  178. package/dist/utils/mermaid-ascii.js.map +1 -0
  179. package/dist/utils/shiki-ansi-renderer.d.ts +29 -0
  180. package/dist/utils/shiki-ansi-renderer.d.ts.map +1 -0
  181. package/dist/utils/shiki-ansi-renderer.js +354 -0
  182. package/dist/utils/shiki-ansi-renderer.js.map +1 -0
  183. package/dist/utils/syntax-highlighter.d.ts +87 -0
  184. package/dist/utils/syntax-highlighter.d.ts.map +1 -0
  185. package/dist/utils/syntax-highlighter.js +265 -0
  186. package/dist/utils/syntax-highlighter.js.map +1 -0
  187. package/dist/utils/table-formatter-inline.d.ts +37 -0
  188. package/dist/utils/table-formatter-inline.d.ts.map +1 -0
  189. package/dist/utils/table-formatter-inline.js +337 -0
  190. package/dist/utils/table-formatter-inline.js.map +1 -0
  191. package/dist/utils/table.d.ts +35 -0
  192. package/dist/utils/table.d.ts.map +1 -0
  193. package/dist/utils/table.js +197 -0
  194. package/dist/utils/table.js.map +1 -0
  195. package/dist/widgets/stream-indicator.d.ts +130 -0
  196. package/dist/widgets/stream-indicator.d.ts.map +1 -0
  197. package/dist/widgets/stream-indicator.js +276 -0
  198. package/dist/widgets/stream-indicator.js.map +1 -0
  199. package/package.json +75 -0
@@ -0,0 +1,522 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.StreamingMarkdownParser = void 0;
4
+ const marked_1 = require("marked");
5
+ class StreamingMarkdownParser {
6
+ buffer = '';
7
+ tokens = [];
8
+ parseIncomplete;
9
+ constructor(parseIncomplete = true) {
10
+ this.parseIncomplete = parseIncomplete;
11
+ // Configure marked for GFM
12
+ marked_1.marked.setOptions({
13
+ gfm: true,
14
+ breaks: true,
15
+ });
16
+ }
17
+ /**
18
+ * Add chunk to buffer and parse
19
+ */
20
+ addChunk(chunk) {
21
+ // Decode HTML entities and preprocess custom tags
22
+ const processedChunk = this.preprocessText(chunk);
23
+ this.buffer += processedChunk;
24
+ return this.parse();
25
+ }
26
+ /**
27
+ * Preprocess text to handle HTML entities and custom tags
28
+ * NOTE: ANSI codes are preserved for terminal color rendering
29
+ */
30
+ preprocessText(text) {
31
+ let processed = text;
32
+ // DO NOT strip ANSI codes - they're needed for terminal colors!
33
+ // Blessed and terminal renderers handle ANSI codes natively.
34
+ // Removing them causes color codes to appear as raw text patterns.
35
+ // Decode HTML entities - more comprehensive list
36
+ processed = processed.replace(/'/g, "'");
37
+ processed = processed.replace(/"/g, '"');
38
+ processed = processed.replace(/&/g, '&');
39
+ processed = processed.replace(/&lt;/g, '<');
40
+ processed = processed.replace(/&gt;/g, '>');
41
+ processed = processed.replace(/&nbsp;/g, ' ');
42
+ processed = processed.replace(/&#x27;/g, "'");
43
+ processed = processed.replace(/&#x2F;/g, '/');
44
+ processed = processed.replace(/&#x60;/g, '`');
45
+ // Decode numeric HTML entities
46
+ processed = processed.replace(/&#(\d+);/g, (match, num) => {
47
+ return String.fromCharCode(parseInt(num, 10));
48
+ });
49
+ // Decode hex HTML entities
50
+ processed = processed.replace(/&#x([a-fA-F0-9]+);/g, (match, hex) => {
51
+ return String.fromCharCode(parseInt(hex, 16));
52
+ });
53
+ // Convert custom {italic} tags to underline format (since terminals don't reliably support italic)
54
+ // We'll handle this in the renderer as underlined text
55
+ processed = processed.replace(/\{italic\}(.*?)\{\/italic\}/g, '_$1_');
56
+ return processed;
57
+ }
58
+ /**
59
+ * Parse current buffer for blessed rendering
60
+ */
61
+ parse() {
62
+ try {
63
+ const markedTokens = marked_1.marked.lexer(this.buffer);
64
+ // Process tokens with mermaid detection
65
+ const processedTokens = this.processTokensWithDiagramDetection(markedTokens);
66
+ this.tokens = this.convertTokens(processedTokens);
67
+ // Handle incomplete markdown if enabled
68
+ if (this.parseIncomplete) {
69
+ this.handleIncompleteMarkdown();
70
+ }
71
+ return this.tokens;
72
+ }
73
+ catch (error) {
74
+ // If parsing fails (incomplete markdown), try to parse what we can
75
+ return this.parsePartial();
76
+ }
77
+ }
78
+ /**
79
+ * Process tokens with enhanced diagram detection
80
+ */
81
+ processTokensWithDiagramDetection(tokens) {
82
+ const processedTokens = [];
83
+ for (const token of tokens) {
84
+ // Check for mermaid code blocks
85
+ if (token.type === 'code' && token.lang === 'mermaid') {
86
+ // Convert to mermaid token type
87
+ processedTokens.push({
88
+ ...token,
89
+ type: 'mermaid',
90
+ text: token.text || token.raw
91
+ });
92
+ }
93
+ else if (token.type === 'code' && this.looksLikeMermaidCode(token.text || token.raw)) {
94
+ // Auto-detect mermaid in unlabeled code blocks
95
+ processedTokens.push({
96
+ ...token,
97
+ type: 'mermaid',
98
+ text: token.text || token.raw
99
+ });
100
+ }
101
+ else {
102
+ processedTokens.push(token);
103
+ }
104
+ }
105
+ return this.processInlineTokens(processedTokens);
106
+ }
107
+ /**
108
+ * Check if code looks like mermaid syntax
109
+ */
110
+ looksLikeMermaidCode(code) {
111
+ if (!code)
112
+ return false;
113
+ const mermaidKeywords = [
114
+ 'graph', 'flowchart', 'sequenceDiagram', 'classDiagram',
115
+ 'stateDiagram', 'journey', 'gantt', 'pie', 'gitgraph'
116
+ ];
117
+ const trimmed = code.trim().toLowerCase();
118
+ return mermaidKeywords.some(keyword => trimmed.startsWith(keyword.toLowerCase()));
119
+ }
120
+ /**
121
+ * Convert table token to markdown format
122
+ */
123
+ convertTableTokenToMarkdown(token) {
124
+ try {
125
+ if (!token.header || !token.rows) {
126
+ return token.raw || '[Invalid Table]';
127
+ }
128
+ const lines = [];
129
+ // Build header
130
+ const headerCells = token.header.map((cell) => cell.text || cell.content || String(cell));
131
+ lines.push('| ' + headerCells.join(' | ') + ' |');
132
+ // Build separator
133
+ const separatorCells = headerCells.map(() => '---');
134
+ lines.push('| ' + separatorCells.join(' | ') + ' |');
135
+ // Build rows
136
+ if (token.rows && Array.isArray(token.rows)) {
137
+ for (const row of token.rows) {
138
+ if (Array.isArray(row)) {
139
+ const rowCells = row.map((cell) => cell.text || cell.content || String(cell));
140
+ lines.push('| ' + rowCells.join(' | ') + ' |');
141
+ }
142
+ }
143
+ }
144
+ return lines.join('\n');
145
+ }
146
+ catch (error) {
147
+ console.warn('Error converting table token:', error);
148
+ return token.raw || '[Table Conversion Error]';
149
+ }
150
+ }
151
+ /**
152
+ * Parse inline formatting from text that wasn't processed by marked.js
153
+ */
154
+ parseInlineFromText(text) {
155
+ const tokens = [];
156
+ // Regular expressions for different inline elements
157
+ // Using more reliable patterns to avoid catastrophic backtracking
158
+ const patterns = [
159
+ { regex: /\*\*([^*]+)\*\*/g, type: 'strong' },
160
+ { regex: /__([^_]+)__/g, type: 'strong' },
161
+ { regex: /\*([^*]+)\*/g, type: 'em' },
162
+ { regex: /_([^_]+)_/g, type: 'em' },
163
+ { regex: /`([^`]+)`/g, type: 'codespan' },
164
+ { regex: /\[([^\]]+)\]\(([^)]+)\)/g, type: 'link' },
165
+ { regex: /~~([^~]+)~~/g, type: 'del' },
166
+ ];
167
+ // Find all matches and their positions
168
+ const matches = [];
169
+ for (const pattern of patterns) {
170
+ let match;
171
+ while ((match = pattern.regex.exec(text)) !== null) {
172
+ matches.push({
173
+ type: pattern.type,
174
+ content: match[1] || match[0],
175
+ start: match.index,
176
+ end: match.index + match[0].length
177
+ });
178
+ }
179
+ }
180
+ // Sort matches by position
181
+ matches.sort((a, b) => a.start - b.start);
182
+ // Build tokens
183
+ let lastEnd = 0;
184
+ for (const match of matches) {
185
+ // Add text before this match
186
+ if (match.start > lastEnd) {
187
+ const textContent = text.slice(lastEnd, match.start);
188
+ if (textContent.trim()) {
189
+ tokens.push({
190
+ type: 'text',
191
+ raw: textContent,
192
+ text: textContent
193
+ });
194
+ }
195
+ }
196
+ // Add the formatted token
197
+ tokens.push({
198
+ type: match.type,
199
+ raw: text.slice(match.start, match.end),
200
+ text: match.content
201
+ });
202
+ lastEnd = match.end;
203
+ }
204
+ // Add remaining text
205
+ if (lastEnd < text.length) {
206
+ const textContent = text.slice(lastEnd);
207
+ if (textContent.trim()) {
208
+ tokens.push({
209
+ type: 'text',
210
+ raw: textContent,
211
+ text: textContent
212
+ });
213
+ }
214
+ }
215
+ return tokens;
216
+ }
217
+ /**
218
+ * Process tokens to extract inline formatting
219
+ */
220
+ processInlineTokens(tokens) {
221
+ const processedTokens = [];
222
+ for (const token of tokens) {
223
+ if (token.type === 'paragraph') {
224
+ const paragraph = token;
225
+ if (paragraph.tokens && paragraph.tokens.length > 0) {
226
+ // Flatten paragraph tokens to get inline elements
227
+ const flattenedTokens = this.flattenInlineTokens(paragraph.tokens);
228
+ processedTokens.push(...flattenedTokens);
229
+ }
230
+ else {
231
+ // If no tokens, try to parse inline formatting from raw text
232
+ const inlineTokens = this.parseInlineFromText(paragraph.text || paragraph.raw || '');
233
+ if (inlineTokens.length > 0) {
234
+ processedTokens.push(...inlineTokens);
235
+ }
236
+ else {
237
+ processedTokens.push(token);
238
+ }
239
+ }
240
+ }
241
+ else if (token.type === 'blockquote') {
242
+ const blockquote = token;
243
+ if (blockquote.tokens && blockquote.tokens.length > 0) {
244
+ // Process blockquote tokens
245
+ const processedBlockquoteTokens = this.processInlineTokens(blockquote.tokens);
246
+ processedTokens.push(...processedBlockquoteTokens);
247
+ }
248
+ else {
249
+ processedTokens.push(token);
250
+ }
251
+ }
252
+ else {
253
+ processedTokens.push(token);
254
+ }
255
+ }
256
+ return processedTokens;
257
+ }
258
+ /**
259
+ * Flatten inline tokens recursively
260
+ */
261
+ flattenInlineTokens(tokens) {
262
+ const flattened = [];
263
+ for (const token of tokens) {
264
+ if (token.type === 'em' || token.type === 'strong' || token.type === 'codespan' || token.type === 'link' || token.type === 'del' || token.type === 'text') {
265
+ flattened.push(token);
266
+ }
267
+ else if ('tokens' in token && token.tokens && token.tokens.length > 0) {
268
+ // Recursively flatten nested tokens
269
+ flattened.push(...this.flattenInlineTokens(token.tokens));
270
+ }
271
+ else {
272
+ flattened.push(token);
273
+ }
274
+ }
275
+ return flattened;
276
+ }
277
+ /**
278
+ * Parse partial/incomplete markdown
279
+ */
280
+ parsePartial() {
281
+ const tokens = [];
282
+ const lines = this.buffer.split('\n');
283
+ for (const line of lines) {
284
+ if (!line.trim())
285
+ continue;
286
+ // Try to identify incomplete patterns
287
+ const token = this.parseIncompleteLine(line);
288
+ tokens.push(token);
289
+ }
290
+ return tokens;
291
+ }
292
+ /**
293
+ * Parse a single line that might be incomplete
294
+ */
295
+ parseIncompleteLine(line) {
296
+ // Heading (incomplete or complete)
297
+ if (/^#{1,6}\s/.test(line)) {
298
+ const depth = line.match(/^(#{1,6})/)?.[1].length || 1;
299
+ return {
300
+ type: 'heading',
301
+ content: line.replace(/^#{1,6}\s/, ''),
302
+ depth,
303
+ incomplete: !line.includes('\n'),
304
+ };
305
+ }
306
+ // Code block (incomplete)
307
+ if (line.startsWith('```')) {
308
+ const lang = line.replace('```', '').trim();
309
+ return {
310
+ type: 'codeblock',
311
+ content: '',
312
+ lang: lang || 'text',
313
+ incomplete: true,
314
+ };
315
+ }
316
+ // Blockquote
317
+ if (line.startsWith('>')) {
318
+ return {
319
+ type: 'blockquote',
320
+ content: line.replace(/^>\s*/, ''),
321
+ incomplete: !line.includes('\n'),
322
+ };
323
+ }
324
+ // List item
325
+ if (/^[-*+]\s/.test(line) || /^\d+\.\s/.test(line)) {
326
+ const ordered = /^\d+\./.test(line);
327
+ return {
328
+ type: 'listitem',
329
+ content: line.replace(/^[-*+\d.]\s*/, ''),
330
+ ordered,
331
+ incomplete: !line.includes('\n'),
332
+ };
333
+ }
334
+ // Default to text with inline formatting
335
+ return this.parseInlineFormatting(line);
336
+ }
337
+ /**
338
+ * Handle incomplete markdown patterns
339
+ */
340
+ handleIncompleteMarkdown() {
341
+ const lastToken = this.tokens[this.tokens.length - 1];
342
+ if (!lastToken)
343
+ return;
344
+ // Check if buffer ends with incomplete patterns
345
+ // Using more efficient regex patterns to avoid backtracking
346
+ const patterns = [
347
+ { regex: /\*\*[^*\n]{1,100}$/, type: 'strong' },
348
+ { regex: /\*[^*\n]{1,100}$/, type: 'em' },
349
+ { regex: /`[^`\n]{1,500}$/, type: 'code' },
350
+ { regex: /\[[^\]\n]{1,200}$/, type: 'link' },
351
+ { regex: /^#{1,6}\s[^\n]{1,200}$/, type: 'heading' },
352
+ ];
353
+ for (const pattern of patterns) {
354
+ if (pattern.regex.test(this.buffer)) {
355
+ // Mark as incomplete
356
+ if (lastToken.content) {
357
+ lastToken.incomplete = true;
358
+ }
359
+ }
360
+ }
361
+ }
362
+ /**
363
+ * Parse inline formatting (bold, italic, code, links)
364
+ */
365
+ parseInlineFormatting(text) {
366
+ // This is a simplified version - in production you'd want more robust parsing
367
+ let content = text;
368
+ let incomplete = false;
369
+ // Check for incomplete patterns with bounded quantifiers
370
+ if (/\*\*[^*\n]{1,100}$/.test(text) || /\*[^*\n]{1,100}$/.test(text) || /`[^`\n]{1,500}$/.test(text)) {
371
+ incomplete = true;
372
+ }
373
+ return {
374
+ type: 'text',
375
+ content,
376
+ incomplete,
377
+ };
378
+ }
379
+ /**
380
+ * Convert marked tokens to our format
381
+ */
382
+ convertTokens(markedTokens) {
383
+ const tokens = [];
384
+ for (const token of markedTokens) {
385
+ const converted = this.convertToken(token);
386
+ if (converted) {
387
+ if (Array.isArray(converted)) {
388
+ tokens.push(...converted);
389
+ }
390
+ else {
391
+ tokens.push(converted);
392
+ }
393
+ }
394
+ }
395
+ return tokens;
396
+ }
397
+ /**
398
+ * Convert a single marked token
399
+ */
400
+ convertToken(token) {
401
+ switch (token.type) {
402
+ case 'heading':
403
+ return {
404
+ type: 'heading',
405
+ content: token.text,
406
+ depth: token.depth,
407
+ raw: token.raw,
408
+ };
409
+ case 'paragraph':
410
+ // Paragraph tokens are now processed separately, so this should not happen
411
+ return {
412
+ type: 'paragraph',
413
+ content: token.text,
414
+ raw: token.raw,
415
+ };
416
+ case 'strong':
417
+ return {
418
+ type: 'strong',
419
+ content: token.text,
420
+ raw: token.raw,
421
+ };
422
+ case 'em':
423
+ return {
424
+ type: 'em',
425
+ content: token.text,
426
+ raw: token.raw,
427
+ };
428
+ case 'codespan':
429
+ return {
430
+ type: 'code',
431
+ content: token.text,
432
+ raw: token.raw,
433
+ };
434
+ case 'link':
435
+ const link = token;
436
+ return {
437
+ type: 'link',
438
+ content: link.text,
439
+ raw: token.raw,
440
+ };
441
+ case 'del':
442
+ return {
443
+ type: 'del',
444
+ content: token.text,
445
+ raw: token.raw,
446
+ };
447
+ case 'text':
448
+ return {
449
+ type: 'text',
450
+ content: token.text,
451
+ raw: token.raw,
452
+ };
453
+ case 'code':
454
+ return {
455
+ type: 'codeblock',
456
+ content: token.text,
457
+ lang: token.lang || 'text',
458
+ raw: token.raw,
459
+ };
460
+ case 'mermaid':
461
+ return {
462
+ type: 'mermaid',
463
+ content: token.text || token.raw,
464
+ raw: token.raw,
465
+ };
466
+ case 'blockquote':
467
+ const blockquote = token;
468
+ return blockquote.tokens.map((t) => this.convertToken(t)).flat().filter(Boolean);
469
+ case 'list':
470
+ const list = token;
471
+ return list.items.map((item, index) => ({
472
+ type: 'listitem',
473
+ content: item.text,
474
+ ordered: list.ordered,
475
+ depth: 0,
476
+ raw: item.raw,
477
+ }));
478
+ case 'hr':
479
+ return {
480
+ type: 'hr',
481
+ content: '',
482
+ raw: token.raw,
483
+ };
484
+ case 'table':
485
+ // Convert table token to markdown format for enhanced renderer
486
+ return {
487
+ type: 'table',
488
+ content: this.convertTableTokenToMarkdown(token),
489
+ raw: token.raw,
490
+ };
491
+ case 'space':
492
+ return null;
493
+ default:
494
+ return {
495
+ type: 'text',
496
+ content: token.text || token.raw || '',
497
+ raw: token.raw,
498
+ };
499
+ }
500
+ }
501
+ /**
502
+ * Clear buffer
503
+ */
504
+ clear() {
505
+ this.buffer = '';
506
+ this.tokens = [];
507
+ }
508
+ /**
509
+ * Get current buffer
510
+ */
511
+ getBuffer() {
512
+ return this.buffer;
513
+ }
514
+ /**
515
+ * Get current tokens
516
+ */
517
+ getTokens() {
518
+ return this.tokens;
519
+ }
520
+ }
521
+ exports.StreamingMarkdownParser = StreamingMarkdownParser;
522
+ //# sourceMappingURL=streaming-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-parser.js","sourceRoot":"","sources":["../../src/parser/streaming-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,139 @@
1
+ /**
2
+ * Performance Monitoring
3
+ *
4
+ * This module provides lightweight performance tracking for streamtty operations,
5
+ * including parse/render times, memory usage, and performance warnings.
6
+ */
7
+ import { StreamttyEventEmitter } from './events';
8
+ export interface PerformanceMetrics {
9
+ operation: string;
10
+ startTime: number;
11
+ endTime?: number;
12
+ duration?: number;
13
+ memoryBefore?: NodeJS.MemoryUsage;
14
+ memoryAfter?: NodeJS.MemoryUsage;
15
+ memoryDelta?: NodeJS.MemoryUsage;
16
+ metadata?: Record<string, any>;
17
+ }
18
+ export interface PerformanceThresholds {
19
+ parseTime: number;
20
+ renderTime: number;
21
+ memoryUsage: number;
22
+ chunkSize: number;
23
+ tokenCount: number;
24
+ }
25
+ export interface PerformanceConfig {
26
+ enabled: boolean;
27
+ thresholds: PerformanceThresholds;
28
+ sampleRate: number;
29
+ maxHistorySize: number;
30
+ enableWarnings: boolean;
31
+ enableMemoryTracking: boolean;
32
+ }
33
+ export declare class PerformanceMonitor {
34
+ private config;
35
+ private metrics;
36
+ private activeOperations;
37
+ private eventEmitter;
38
+ private sampleCounter;
39
+ constructor(config?: Partial<PerformanceConfig>, eventEmitter?: StreamttyEventEmitter);
40
+ /**
41
+ * Start timing an operation
42
+ */
43
+ startOperation(operation: string, metadata?: Record<string, any>): string;
44
+ /**
45
+ * End timing an operation
46
+ */
47
+ endOperation(operationId: string): PerformanceMetrics | null;
48
+ /**
49
+ * Measure a function execution
50
+ */
51
+ measure<T>(operation: string, fn: () => Promise<T>, metadata?: Record<string, any>): Promise<T>;
52
+ /**
53
+ * Measure synchronous function execution
54
+ */
55
+ measureSync<T>(operation: string, fn: () => T, metadata?: Record<string, any>): T;
56
+ /**
57
+ * Get performance statistics
58
+ */
59
+ getStats(operation?: string): {
60
+ totalOperations: number;
61
+ averageDuration: number;
62
+ minDuration: number;
63
+ maxDuration: number;
64
+ slowOperations: number;
65
+ memoryUsage: {
66
+ current: NodeJS.MemoryUsage;
67
+ peak: number;
68
+ average: number;
69
+ };
70
+ recentMetrics: PerformanceMetrics[];
71
+ };
72
+ /**
73
+ * Get operation breakdown
74
+ */
75
+ getOperationBreakdown(): Record<string, {
76
+ count: number;
77
+ averageDuration: number;
78
+ totalDuration: number;
79
+ slowCount: number;
80
+ }>;
81
+ /**
82
+ * Clear metrics history
83
+ */
84
+ clearMetrics(): void;
85
+ /**
86
+ * Update configuration
87
+ */
88
+ updateConfig(config: Partial<PerformanceConfig>): void;
89
+ /**
90
+ * Get current configuration
91
+ */
92
+ getConfig(): PerformanceConfig;
93
+ /**
94
+ * Check if operation should be sampled
95
+ */
96
+ private shouldSample;
97
+ /**
98
+ * Add metric to history
99
+ */
100
+ private addMetric;
101
+ /**
102
+ * Check if operation exceeds thresholds
103
+ */
104
+ private checkThresholds;
105
+ /**
106
+ * Check if operation is slow
107
+ */
108
+ private isSlowOperation;
109
+ /**
110
+ * Get threshold for operation type
111
+ */
112
+ private getThresholdForOperation;
113
+ }
114
+ /**
115
+ * Performance utilities
116
+ */
117
+ export declare class PerformanceUtils {
118
+ /**
119
+ * Format duration in human-readable format
120
+ */
121
+ static formatDuration(ms: number): string;
122
+ /**
123
+ * Format memory usage in human-readable format
124
+ */
125
+ static formatMemory(bytes: number): string;
126
+ /**
127
+ * Create a performance report
128
+ */
129
+ static createReport(monitor: PerformanceMonitor): string;
130
+ }
131
+ /**
132
+ * Global performance monitor instance
133
+ */
134
+ export declare const globalPerformanceMonitor: PerformanceMonitor;
135
+ /**
136
+ * Decorator for automatic performance tracking
137
+ */
138
+ export declare function trackPerformance(operation: string, metadata?: Record<string, any>): (target: any, propertyKey: string, descriptor: PropertyDescriptor) => PropertyDescriptor;
139
+ //# sourceMappingURL=performance.d.ts.map