@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.
- package/LICENSE +21 -0
- package/README.md +471 -0
- package/dist/ai-sdk-adapter.d.ts +113 -0
- package/dist/ai-sdk-adapter.d.ts.map +1 -0
- package/dist/ai-sdk-adapter.js +304 -0
- package/dist/ai-sdk-adapter.js.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +188 -0
- package/dist/cli.js.map +1 -0
- package/dist/errors.d.ts +131 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/errors.js +346 -0
- package/dist/errors.js.map +1 -0
- package/dist/events.d.ts +185 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/events.js +350 -0
- package/dist/events.js.map +1 -0
- package/dist/index.d.ts +117 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +323 -0
- package/dist/index.js.map +1 -0
- package/dist/parser/streaming-parser.d.ts +81 -0
- package/dist/parser/streaming-parser.d.ts.map +1 -0
- package/dist/parser/streaming-parser.js +522 -0
- package/dist/parser/streaming-parser.js.map +1 -0
- package/dist/performance.d.ts +139 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/performance.js +401 -0
- package/dist/performance.js.map +1 -0
- package/dist/plugins/index.d.ts +6 -0
- package/dist/plugins/index.d.ts.map +1 -0
- package/dist/plugins/index.js +22 -0
- package/dist/plugins/index.js.map +1 -0
- package/dist/plugins/plugin-system-inline.d.ts +116 -0
- package/dist/plugins/plugin-system-inline.d.ts.map +1 -0
- package/dist/plugins/plugin-system-inline.js +289 -0
- package/dist/plugins/plugin-system-inline.js.map +1 -0
- package/dist/plugins/plugin-system.d.ts +65 -0
- package/dist/plugins/plugin-system.d.ts.map +1 -0
- package/dist/plugins/plugin-system.js +202 -0
- package/dist/plugins/plugin-system.js.map +1 -0
- package/dist/plugins/rehype/harden.d.ts +15 -0
- package/dist/plugins/rehype/harden.d.ts.map +1 -0
- package/dist/plugins/rehype/harden.js +71 -0
- package/dist/plugins/rehype/harden.js.map +1 -0
- package/dist/plugins/rehype/index.d.ts +5 -0
- package/dist/plugins/rehype/index.d.ts.map +1 -0
- package/dist/plugins/rehype/index.js +21 -0
- package/dist/plugins/rehype/index.js.map +1 -0
- package/dist/plugins/remark/index.d.ts +6 -0
- package/dist/plugins/remark/index.d.ts.map +1 -0
- package/dist/plugins/remark/index.js +22 -0
- package/dist/plugins/remark/index.js.map +1 -0
- package/dist/plugins/remark/math.d.ts +7 -0
- package/dist/plugins/remark/math.d.ts.map +1 -0
- package/dist/plugins/remark/math.js +22 -0
- package/dist/plugins/remark/math.js.map +1 -0
- package/dist/plugins/remark/mermaid.d.ts +7 -0
- package/dist/plugins/remark/mermaid.d.ts.map +1 -0
- package/dist/plugins/remark/mermaid.js +19 -0
- package/dist/plugins/remark/mermaid.js.map +1 -0
- package/dist/plugins/types.d.ts +72 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/plugins/types.js +3 -0
- package/dist/plugins/types.js.map +1 -0
- package/dist/renderer/blessed-renderer.d.ts +92 -0
- package/dist/renderer/blessed-renderer.d.ts.map +1 -0
- package/dist/renderer/blessed-renderer.js +610 -0
- package/dist/renderer/blessed-renderer.js.map +1 -0
- package/dist/renderers/index.d.ts +7 -0
- package/dist/renderers/index.d.ts.map +1 -0
- package/dist/renderers/index.js +21 -0
- package/dist/renderers/index.js.map +1 -0
- package/dist/renderers/math-renderer.d.ts +49 -0
- package/dist/renderers/math-renderer.d.ts.map +1 -0
- package/dist/renderers/math-renderer.js +193 -0
- package/dist/renderers/math-renderer.js.map +1 -0
- package/dist/renderers/mermaid-ascii.d.ts +14 -0
- package/dist/renderers/mermaid-ascii.d.ts.map +1 -0
- package/dist/renderers/mermaid-ascii.js +260 -0
- package/dist/renderers/mermaid-ascii.js.map +1 -0
- package/dist/renderers/mermaid-renderer.d.ts +79 -0
- package/dist/renderers/mermaid-renderer.d.ts.map +1 -0
- package/dist/renderers/mermaid-renderer.js +298 -0
- package/dist/renderers/mermaid-renderer.js.map +1 -0
- package/dist/renderers/shiki-ansi.d.ts +48 -0
- package/dist/renderers/shiki-ansi.d.ts.map +1 -0
- package/dist/renderers/shiki-ansi.js +206 -0
- package/dist/renderers/shiki-ansi.js.map +1 -0
- package/dist/renderers/table-ascii.d.ts +30 -0
- package/dist/renderers/table-ascii.d.ts.map +1 -0
- package/dist/renderers/table-ascii.js +243 -0
- package/dist/renderers/table-ascii.js.map +1 -0
- package/dist/renderers/table-renderer.d.ts +49 -0
- package/dist/renderers/table-renderer.d.ts.map +1 -0
- package/dist/renderers/table-renderer.js +224 -0
- package/dist/renderers/table-renderer.js.map +1 -0
- package/dist/renderers/unicode-math.d.ts +29 -0
- package/dist/renderers/unicode-math.d.ts.map +1 -0
- package/dist/renderers/unicode-math.js +181 -0
- package/dist/renderers/unicode-math.js.map +1 -0
- package/dist/security/ansi-sanitizer.d.ts +71 -0
- package/dist/security/ansi-sanitizer.d.ts.map +1 -0
- package/dist/security/ansi-sanitizer.js +275 -0
- package/dist/security/ansi-sanitizer.js.map +1 -0
- package/dist/security/chunk-processor.d.ts +81 -0
- package/dist/security/chunk-processor.d.ts.map +1 -0
- package/dist/security/chunk-processor.js +297 -0
- package/dist/security/chunk-processor.js.map +1 -0
- package/dist/security/index.d.ts +6 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/index.js +22 -0
- package/dist/security/index.js.map +1 -0
- package/dist/security/input-validator.d.ts +55 -0
- package/dist/security/input-validator.d.ts.map +1 -0
- package/dist/security/input-validator.js +201 -0
- package/dist/security/input-validator.js.map +1 -0
- package/dist/stream-protocol.d.ts +61 -0
- package/dist/stream-protocol.d.ts.map +1 -0
- package/dist/stream-protocol.js +214 -0
- package/dist/stream-protocol.js.map +1 -0
- package/dist/streamdown-compat.d.ts +74 -0
- package/dist/streamdown-compat.d.ts.map +1 -0
- package/dist/streamdown-compat.js +241 -0
- package/dist/streamdown-compat.js.map +1 -0
- package/dist/streaming/stream-stats.d.ts +97 -0
- package/dist/streaming/stream-stats.d.ts.map +1 -0
- package/dist/streaming/stream-stats.js +217 -0
- package/dist/streaming/stream-stats.js.map +1 -0
- package/dist/streaming-integration.d.ts +71 -0
- package/dist/streaming-integration.d.ts.map +1 -0
- package/dist/streaming-integration.js +194 -0
- package/dist/streaming-integration.js.map +1 -0
- package/dist/themes/index.d.ts +59 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/themes/index.js +122 -0
- package/dist/themes/index.js.map +1 -0
- package/dist/types/index.d.ts +222 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +3 -0
- package/dist/types/index.js.map +1 -0
- package/dist/types/plugin-types.d.ts +5 -0
- package/dist/types/plugin-types.d.ts.map +1 -0
- package/dist/types/plugin-types.js +6 -0
- package/dist/types/plugin-types.js.map +1 -0
- package/dist/types/stream-events.d.ts +71 -0
- package/dist/types/stream-events.d.ts.map +1 -0
- package/dist/types/stream-events.js +10 -0
- package/dist/types/stream-events.js.map +1 -0
- package/dist/utils/blessed-syntax-highlighter.d.ts +124 -0
- package/dist/utils/blessed-syntax-highlighter.d.ts.map +1 -0
- package/dist/utils/blessed-syntax-highlighter.js +440 -0
- package/dist/utils/blessed-syntax-highlighter.js.map +1 -0
- package/dist/utils/enhanced-table-renderer.d.ts +77 -0
- package/dist/utils/enhanced-table-renderer.d.ts.map +1 -0
- package/dist/utils/enhanced-table-renderer.js +376 -0
- package/dist/utils/enhanced-table-renderer.js.map +1 -0
- package/dist/utils/formatting.d.ts +100 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/formatting.js +220 -0
- package/dist/utils/formatting.js.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.map +1 -0
- package/dist/utils/index.js +21 -0
- package/dist/utils/index.js.map +1 -0
- package/dist/utils/math-unicode-renderer.d.ts +38 -0
- package/dist/utils/math-unicode-renderer.d.ts.map +1 -0
- package/dist/utils/math-unicode-renderer.js +380 -0
- package/dist/utils/math-unicode-renderer.js.map +1 -0
- package/dist/utils/mermaid-ascii-renderer.d.ts +20 -0
- package/dist/utils/mermaid-ascii-renderer.d.ts.map +1 -0
- package/dist/utils/mermaid-ascii-renderer.js +325 -0
- package/dist/utils/mermaid-ascii-renderer.js.map +1 -0
- package/dist/utils/mermaid-ascii.d.ts +53 -0
- package/dist/utils/mermaid-ascii.d.ts.map +1 -0
- package/dist/utils/mermaid-ascii.js +181 -0
- package/dist/utils/mermaid-ascii.js.map +1 -0
- package/dist/utils/shiki-ansi-renderer.d.ts +29 -0
- package/dist/utils/shiki-ansi-renderer.d.ts.map +1 -0
- package/dist/utils/shiki-ansi-renderer.js +354 -0
- package/dist/utils/shiki-ansi-renderer.js.map +1 -0
- package/dist/utils/syntax-highlighter.d.ts +87 -0
- package/dist/utils/syntax-highlighter.d.ts.map +1 -0
- package/dist/utils/syntax-highlighter.js +265 -0
- package/dist/utils/syntax-highlighter.js.map +1 -0
- package/dist/utils/table-formatter-inline.d.ts +37 -0
- package/dist/utils/table-formatter-inline.d.ts.map +1 -0
- package/dist/utils/table-formatter-inline.js +337 -0
- package/dist/utils/table-formatter-inline.js.map +1 -0
- package/dist/utils/table.d.ts +35 -0
- package/dist/utils/table.d.ts.map +1 -0
- package/dist/utils/table.js +197 -0
- package/dist/utils/table.js.map +1 -0
- package/dist/widgets/stream-indicator.d.ts +130 -0
- package/dist/widgets/stream-indicator.d.ts.map +1 -0
- package/dist/widgets/stream-indicator.js +276 -0
- package/dist/widgets/stream-indicator.js.map +1 -0
- 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(/</g, '<');
|
|
40
|
+
processed = processed.replace(/>/g, '>');
|
|
41
|
+
processed = processed.replace(/ /g, ' ');
|
|
42
|
+
processed = processed.replace(/'/g, "'");
|
|
43
|
+
processed = processed.replace(///g, '/');
|
|
44
|
+
processed = processed.replace(/`/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
|