@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,217 @@
1
+ "use strict";
2
+ /**
3
+ * Stream Statistics Tracker
4
+ * Lightweight metrics for streaming progress
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.StreamProcessor = exports.StreamStatsTracker = void 0;
8
+ /**
9
+ * Track streaming statistics without overhead
10
+ */
11
+ class StreamStatsTracker {
12
+ startTime = 0;
13
+ stats;
14
+ lastUpdateTime = 0;
15
+ sampleWindow = []; // Last 10 throughput samples
16
+ constructor() {
17
+ this.startTime = Date.now();
18
+ this.stats = {
19
+ chunksReceived: 0,
20
+ bytesReceived: 0,
21
+ tokensGenerated: 0,
22
+ elapsedMs: 0,
23
+ throughputBytesPerSec: 0,
24
+ parseErrors: 0,
25
+ };
26
+ }
27
+ /**
28
+ * Record a processed chunk
29
+ */
30
+ recordChunk(bytes, tokens = 0) {
31
+ this.stats.chunksReceived++;
32
+ this.stats.bytesReceived += bytes;
33
+ this.stats.tokensGenerated += tokens;
34
+ this.updateMetrics();
35
+ }
36
+ /**
37
+ * Record parse error
38
+ */
39
+ recordError() {
40
+ this.stats.parseErrors++;
41
+ }
42
+ /**
43
+ * Update calculated metrics
44
+ */
45
+ updateMetrics() {
46
+ this.stats.elapsedMs = Date.now() - this.startTime;
47
+ // Calculate throughput only every 100ms to avoid jitter
48
+ if (Date.now() - this.lastUpdateTime >= 100) {
49
+ const seconds = this.stats.elapsedMs / 1000;
50
+ if (seconds > 0) {
51
+ this.stats.throughputBytesPerSec = this.stats.bytesReceived / seconds;
52
+ // Keep sample window
53
+ this.sampleWindow.push(this.stats.throughputBytesPerSec);
54
+ if (this.sampleWindow.length > 10) {
55
+ this.sampleWindow.shift();
56
+ }
57
+ }
58
+ this.lastUpdateTime = Date.now();
59
+ }
60
+ }
61
+ /**
62
+ * Get current stats
63
+ */
64
+ getStats() {
65
+ this.updateMetrics();
66
+ return { ...this.stats };
67
+ }
68
+ /**
69
+ * Get formatted progress string
70
+ */
71
+ getProgressString(total) {
72
+ const stats = this.getStats();
73
+ const elapsedSec = (stats.elapsedMs / 1000).toFixed(1);
74
+ if (total) {
75
+ const pct = Math.round((stats.bytesReceived / total) * 100);
76
+ const remaining = total - stats.bytesReceived;
77
+ const eta = stats.throughputBytesPerSec > 0
78
+ ? ((remaining / stats.throughputBytesPerSec) / 1000).toFixed(1)
79
+ : '?';
80
+ return `${pct}% • ${this.formatBytes(stats.bytesReceived)}/${this.formatBytes(total)} • ${elapsedSec}s • ETA ${eta}s`;
81
+ }
82
+ const throughput = this.formatBytes(stats.throughputBytesPerSec);
83
+ return `${this.formatBytes(stats.bytesReceived)} • ${throughput}/s • ${elapsedSec}s`;
84
+ }
85
+ /**
86
+ * Get compact progress bar
87
+ */
88
+ getProgressBar(width = 20, total) {
89
+ if (!total)
90
+ return '░'.repeat(width);
91
+ const pct = Math.min(1, this.stats.bytesReceived / total);
92
+ const filled = Math.round(pct * width);
93
+ return '█'.repeat(filled) + '░'.repeat(width - filled);
94
+ }
95
+ /**
96
+ * Format bytes to human readable
97
+ */
98
+ formatBytes(bytes) {
99
+ if (bytes === 0)
100
+ return '0 B';
101
+ const units = ['B', 'KB', 'MB', 'GB'];
102
+ let size = bytes;
103
+ let unitIdx = 0;
104
+ while (size >= 1024 && unitIdx < units.length - 1) {
105
+ size /= 1024;
106
+ unitIdx++;
107
+ }
108
+ return size.toFixed(1) + ' ' + units[unitIdx];
109
+ }
110
+ /**
111
+ * Reset tracker
112
+ */
113
+ reset() {
114
+ this.startTime = Date.now();
115
+ this.stats = {
116
+ chunksReceived: 0,
117
+ bytesReceived: 0,
118
+ tokensGenerated: 0,
119
+ elapsedMs: 0,
120
+ throughputBytesPerSec: 0,
121
+ parseErrors: 0,
122
+ };
123
+ this.lastUpdateTime = 0;
124
+ this.sampleWindow = [];
125
+ }
126
+ /**
127
+ * Get estimated time remaining
128
+ */
129
+ getETA(total) {
130
+ if (this.stats.throughputBytesPerSec === 0)
131
+ return 'calculating...';
132
+ const remaining = total - this.stats.bytesReceived;
133
+ const secRemaining = remaining / this.stats.throughputBytesPerSec;
134
+ if (secRemaining < 60) {
135
+ return `${Math.round(secRemaining)}s`;
136
+ }
137
+ else if (secRemaining < 3600) {
138
+ const min = Math.floor(secRemaining / 60);
139
+ const sec = Math.round(secRemaining % 60);
140
+ return `${min}m ${sec}s`;
141
+ }
142
+ else {
143
+ const hours = Math.floor(secRemaining / 3600);
144
+ const min = Math.floor((secRemaining % 3600) / 60);
145
+ return `${hours}h ${min}m`;
146
+ }
147
+ }
148
+ /**
149
+ * Get average throughput
150
+ */
151
+ getAverageThroughput() {
152
+ if (this.sampleWindow.length === 0)
153
+ return 0;
154
+ const sum = this.sampleWindow.reduce((a, b) => a + b, 0);
155
+ return sum / this.sampleWindow.length;
156
+ }
157
+ }
158
+ exports.StreamStatsTracker = StreamStatsTracker;
159
+ /**
160
+ * Stream processor with stats
161
+ */
162
+ class StreamProcessor {
163
+ tracker = new StreamStatsTracker();
164
+ reporter;
165
+ reportInterval = null;
166
+ totalBytes;
167
+ constructor(reporter, totalBytes) {
168
+ this.reporter = reporter;
169
+ this.totalBytes = totalBytes;
170
+ }
171
+ /**
172
+ * Process chunk with tracking
173
+ */
174
+ async processChunk(chunk, processor) {
175
+ const bytes = Buffer.byteLength(chunk, 'utf-8');
176
+ try {
177
+ await processor(chunk);
178
+ this.tracker.recordChunk(bytes);
179
+ if (this.reporter?.onProgress) {
180
+ const stats = this.tracker.getStats();
181
+ const msg = this.tracker.getProgressString(this.totalBytes);
182
+ this.reporter.onProgress(stats, msg);
183
+ }
184
+ }
185
+ catch (error) {
186
+ this.tracker.recordError();
187
+ if (this.reporter?.onError) {
188
+ this.reporter.onError(error);
189
+ }
190
+ }
191
+ }
192
+ /**
193
+ * Get stats
194
+ */
195
+ getStats() {
196
+ return this.tracker.getStats();
197
+ }
198
+ /**
199
+ * Complete processing
200
+ */
201
+ complete() {
202
+ if (this.reportInterval) {
203
+ clearInterval(this.reportInterval);
204
+ }
205
+ if (this.reporter?.onComplete) {
206
+ this.reporter.onComplete(this.tracker.getStats());
207
+ }
208
+ }
209
+ /**
210
+ * Reset
211
+ */
212
+ reset() {
213
+ this.tracker.reset();
214
+ }
215
+ }
216
+ exports.StreamProcessor = StreamProcessor;
217
+ //# sourceMappingURL=stream-stats.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"stream-stats.js","sourceRoot":"","sources":["../../src/streaming/stream-stats.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,71 @@
1
+ /**
2
+ * Streaming integration layer
3
+ * Combines all inline renderers and security for seamless streaming
4
+ */
5
+ import { ParsedToken, RenderContext } from './types';
6
+ /**
7
+ * Process token with all enhancements
8
+ * This is called during rendering to apply inline rendering
9
+ */
10
+ export declare function enhanceToken(token: ParsedToken, context: RenderContext): ParsedToken;
11
+ /**
12
+ * Process all tokens with enhancements
13
+ */
14
+ export declare function enhanceTokens(tokens: ParsedToken[], context: RenderContext): ParsedToken[];
15
+ /**
16
+ * Stream chunk processor with full pipeline
17
+ * Validates → Sanitizes → Returns processed chunk
18
+ */
19
+ export declare function processStreamChunk(chunk: string, enableSecurity?: boolean): {
20
+ valid: boolean;
21
+ chunk: string;
22
+ error?: string;
23
+ };
24
+ /**
25
+ * Streaming state tracker (inline in main class)
26
+ */
27
+ export interface StreamingState {
28
+ isStreaming: boolean;
29
+ chunkCount: number;
30
+ byteCount: number;
31
+ startTime: number;
32
+ lastChunkTime: number;
33
+ errorCount: number;
34
+ spinnerIndex: number;
35
+ }
36
+ /**
37
+ * Initialize streaming state
38
+ */
39
+ export declare function initializeStreamingState(): StreamingState;
40
+ /**
41
+ * Get streaming status string with spinner and stats
42
+ */
43
+ export declare function getStreamingStatus(state: StreamingState): string;
44
+ /**
45
+ * Update streaming state with chunk
46
+ */
47
+ export declare function updateStreamingState(state: StreamingState, chunk: string): StreamingState;
48
+ /**
49
+ * Mark streaming as complete
50
+ */
51
+ export declare function completeStreaming(state: StreamingState): {
52
+ isStreaming: boolean;
53
+ totalBytes: number;
54
+ totalChunks: number;
55
+ durationMs: number;
56
+ avgBytesPerSec: number;
57
+ message: string;
58
+ };
59
+ /**
60
+ * Format duration nicely
61
+ */
62
+ export declare function formatDuration(ms: number): string;
63
+ /**
64
+ * Format bytes nicely
65
+ */
66
+ export declare function formatBytes(bytes: number): string;
67
+ /**
68
+ * Format throughput
69
+ */
70
+ export declare function formatThroughput(bytesPerSec: number): string;
71
+ //# sourceMappingURL=streaming-integration.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-integration.d.ts","sourceRoot":"","sources":["../src/streaming-integration.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAMH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AAEpD;;;GAGG;AACH,wBAAgB,YAAY,CAAC,KAAK,EAAE,WAAW,EAAE,OAAO,EAAE,aAAa,GAAG,WAAW,CA8CpF;AAED;;GAEG;AACH,wBAAgB,aAAa,CAC3B,MAAM,EAAE,WAAW,EAAE,EACrB,OAAO,EAAE,aAAa,GACrB,WAAW,EAAE,CAEf;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,MAAM,EAAE,cAAc,GAAE,OAAc,GAAG;IACjF,KAAK,EAAE,OAAO,CAAA;IACd,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,CAAC,EAAE,MAAM,CAAA;CACf,CAoBA;AAED;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,WAAW,EAAE,OAAO,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,SAAS,EAAE,MAAM,CAAA;IACjB,SAAS,EAAE,MAAM,CAAA;IACjB,aAAa,EAAE,MAAM,CAAA;IACrB,UAAU,EAAE,MAAM,CAAA;IAClB,YAAY,EAAE,MAAM,CAAA;CACrB;AAED;;GAEG;AACH,wBAAgB,wBAAwB,IAAI,cAAc,CAUzD;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CAoBhE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,GAAG,cAAc,CAczF;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,cAAc,GAAG;IACxD,WAAW,EAAE,OAAO,CAAA;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,WAAW,EAAE,MAAM,CAAA;IACnB,UAAU,EAAE,MAAM,CAAA;IAClB,cAAc,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,MAAM,CAAA;CAChB,CAsBA;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,CAQjD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAMjD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D"}
@@ -0,0 +1,194 @@
1
+ "use strict";
2
+ /**
3
+ * Streaming integration layer
4
+ * Combines all inline renderers and security for seamless streaming
5
+ */
6
+ Object.defineProperty(exports, "__esModule", { value: true });
7
+ exports.enhanceToken = enhanceToken;
8
+ exports.enhanceTokens = enhanceTokens;
9
+ exports.processStreamChunk = processStreamChunk;
10
+ exports.initializeStreamingState = initializeStreamingState;
11
+ exports.getStreamingStatus = getStreamingStatus;
12
+ exports.updateStreamingState = updateStreamingState;
13
+ exports.completeStreaming = completeStreaming;
14
+ exports.formatDuration = formatDuration;
15
+ exports.formatBytes = formatBytes;
16
+ exports.formatThroughput = formatThroughput;
17
+ const unicode_math_1 = require("./renderers/unicode-math");
18
+ const mermaid_ascii_1 = require("./renderers/mermaid-ascii");
19
+ const table_ascii_1 = require("./renderers/table-ascii");
20
+ const chunk_processor_1 = require("./security/chunk-processor");
21
+ /**
22
+ * Process token with all enhancements
23
+ * This is called during rendering to apply inline rendering
24
+ */
25
+ function enhanceToken(token, context) {
26
+ // Math tokens: render to unicode
27
+ if (token.type === 'math-inline') {
28
+ return {
29
+ ...token,
30
+ content: (0, unicode_math_1.renderMathToUnicode)(token.content || token.raw || '', true),
31
+ };
32
+ }
33
+ if (token.type === 'math-block') {
34
+ return {
35
+ ...token,
36
+ content: (0, unicode_math_1.renderMathBlock)(token.content || token.raw || ''),
37
+ };
38
+ }
39
+ // Mermaid tokens: render to ASCII
40
+ if (token.type === 'mermaid') {
41
+ return {
42
+ ...token,
43
+ content: (0, mermaid_ascii_1.renderMermaidToASCII)(token.content || token.raw || ''),
44
+ };
45
+ }
46
+ // Table tokens: render to ASCII
47
+ if (token.type === 'table') {
48
+ const tableContent = token.content || token.raw || '';
49
+ if ((0, table_ascii_1.isMarkdownTable)(tableContent)) {
50
+ return {
51
+ ...token,
52
+ content: (0, table_ascii_1.renderMarkdownTableToASCII)(tableContent),
53
+ };
54
+ }
55
+ }
56
+ // Process math in regular paragraphs
57
+ if (token.type === 'paragraph' || token.type === 'text') {
58
+ if ((token.content || '').includes('$')) {
59
+ return {
60
+ ...token,
61
+ content: (0, unicode_math_1.processMathInText)(token.content || ''),
62
+ };
63
+ }
64
+ }
65
+ return token;
66
+ }
67
+ /**
68
+ * Process all tokens with enhancements
69
+ */
70
+ function enhanceTokens(tokens, context) {
71
+ return tokens.map(token => enhanceToken(token, context));
72
+ }
73
+ /**
74
+ * Stream chunk processor with full pipeline
75
+ * Validates → Sanitizes → Returns processed chunk
76
+ */
77
+ function processStreamChunk(chunk, enableSecurity = true) {
78
+ if (!chunk) {
79
+ return { valid: false, chunk: '', error: 'Empty chunk' };
80
+ }
81
+ if (enableSecurity) {
82
+ const result = (0, chunk_processor_1.processChunk)(chunk);
83
+ if (!result.valid) {
84
+ return { valid: false, chunk: '', error: result.error };
85
+ }
86
+ return { valid: true, chunk: result.sanitized || chunk };
87
+ }
88
+ // Basic validation only
89
+ const validation = (0, chunk_processor_1.validateChunk)(chunk);
90
+ if (!validation.valid) {
91
+ return { valid: false, chunk: '', error: validation.error };
92
+ }
93
+ return { valid: true, chunk };
94
+ }
95
+ /**
96
+ * Initialize streaming state
97
+ */
98
+ function initializeStreamingState() {
99
+ return {
100
+ isStreaming: false,
101
+ chunkCount: 0,
102
+ byteCount: 0,
103
+ startTime: 0,
104
+ lastChunkTime: 0,
105
+ errorCount: 0,
106
+ spinnerIndex: 0,
107
+ };
108
+ }
109
+ /**
110
+ * Get streaming status string with spinner and stats
111
+ */
112
+ function getStreamingStatus(state) {
113
+ if (!state.isStreaming) {
114
+ return '';
115
+ }
116
+ const spinner = ['⠋', '⠙', '⠹', '⠸', '⠼', '⠴', '⠦', '⠧', '⠇', '⠏'];
117
+ const spinnerChar = spinner[state.spinnerIndex % spinner.length];
118
+ const elapsed = Math.max(1, Date.now() - state.startTime);
119
+ const elapsedSec = (elapsed / 1000).toFixed(1);
120
+ const bytesPerSec = state.byteCount / (elapsed / 1000);
121
+ const byteDisplay = state.byteCount > 1024 * 1024
122
+ ? `${(state.byteCount / 1024 / 1024).toFixed(1)}MB`
123
+ : state.byteCount > 1024
124
+ ? `${(state.byteCount / 1024).toFixed(1)}KB`
125
+ : `${state.byteCount}B`;
126
+ return `${spinnerChar} Streaming: ${byteDisplay} @ ${bytesPerSec.toFixed(0)}B/s (${elapsedSec}s)`;
127
+ }
128
+ /**
129
+ * Update streaming state with chunk
130
+ */
131
+ function updateStreamingState(state, chunk) {
132
+ const newState = { ...state };
133
+ if (!newState.isStreaming) {
134
+ newState.isStreaming = true;
135
+ newState.startTime = Date.now();
136
+ }
137
+ newState.chunkCount++;
138
+ newState.byteCount += Buffer.byteLength(chunk, 'utf-8');
139
+ newState.lastChunkTime = Date.now();
140
+ newState.spinnerIndex++;
141
+ return newState;
142
+ }
143
+ /**
144
+ * Mark streaming as complete
145
+ */
146
+ function completeStreaming(state) {
147
+ const durationMs = Date.now() - state.startTime;
148
+ const durationSec = Math.max(0.1, durationMs / 1000);
149
+ const avgBytesPerSec = state.byteCount / durationSec;
150
+ const byteDisplay = state.byteCount > 1024 * 1024
151
+ ? `${(state.byteCount / 1024 / 1024).toFixed(2)}MB`
152
+ : state.byteCount > 1024
153
+ ? `${(state.byteCount / 1024).toFixed(2)}KB`
154
+ : `${state.byteCount}B`;
155
+ const message = `✓ Stream complete: ${byteDisplay} in ${(durationSec).toFixed(1)}s @ ${avgBytesPerSec.toFixed(0)}B/s [${state.chunkCount} chunks]`;
156
+ return {
157
+ isStreaming: false,
158
+ totalBytes: state.byteCount,
159
+ totalChunks: state.chunkCount,
160
+ durationMs,
161
+ avgBytesPerSec,
162
+ message,
163
+ };
164
+ }
165
+ /**
166
+ * Format duration nicely
167
+ */
168
+ function formatDuration(ms) {
169
+ if (ms < 1000) {
170
+ return `${ms}ms`;
171
+ }
172
+ if (ms < 60000) {
173
+ return `${(ms / 1000).toFixed(1)}s`;
174
+ }
175
+ return `${(ms / 60000).toFixed(1)}m`;
176
+ }
177
+ /**
178
+ * Format bytes nicely
179
+ */
180
+ function formatBytes(bytes) {
181
+ if (bytes === 0)
182
+ return '0B';
183
+ const k = 1024;
184
+ const sizes = ['B', 'KB', 'MB', 'GB'];
185
+ const i = Math.floor(Math.log(bytes) / Math.log(k));
186
+ return `${(bytes / Math.pow(k, i)).toFixed(2)}${sizes[i]}`;
187
+ }
188
+ /**
189
+ * Format throughput
190
+ */
191
+ function formatThroughput(bytesPerSec) {
192
+ return `${formatBytes(bytesPerSec)}/s`;
193
+ }
194
+ //# sourceMappingURL=streaming-integration.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"streaming-integration.js","sourceRoot":"","sources":["../src/streaming-integration.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,59 @@
1
+ import { MarkdownStyles } from '../types';
2
+ /**
3
+ * TTY Theme configuration
4
+ */
5
+ export interface TTYTheme {
6
+ name: string;
7
+ markdown: MarkdownStyles;
8
+ syntax: SyntaxTheme;
9
+ ui: UITheme;
10
+ }
11
+ /**
12
+ * Syntax highlighting theme colors
13
+ */
14
+ export interface SyntaxTheme {
15
+ keyword: string;
16
+ string: string;
17
+ comment: string;
18
+ number: string;
19
+ function: string;
20
+ variable: string;
21
+ type: string;
22
+ operator: string;
23
+ }
24
+ /**
25
+ * UI theme colors
26
+ */
27
+ export interface UITheme {
28
+ border: string;
29
+ background?: string;
30
+ foreground: string;
31
+ accent: string;
32
+ error: string;
33
+ warning: string;
34
+ success: string;
35
+ }
36
+ /**
37
+ * Light theme
38
+ */
39
+ export declare const lightTheme: TTYTheme;
40
+ /**
41
+ * Dark theme (default)
42
+ */
43
+ export declare const darkTheme: TTYTheme;
44
+ /**
45
+ * Get theme by name
46
+ */
47
+ export declare function getTheme(name: 'light' | 'dark' | 'auto'): TTYTheme;
48
+ /**
49
+ * Detect theme from environment
50
+ */
51
+ export declare function detectTheme(): TTYTheme;
52
+ /**
53
+ * Available themes
54
+ */
55
+ export declare const themes: {
56
+ light: TTYTheme;
57
+ dark: TTYTheme;
58
+ };
59
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/themes/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAE1C;;GAEG;AACH,MAAM,WAAW,QAAQ;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,cAAc,CAAC;IACzB,MAAM,EAAE,WAAW,CAAC;IACpB,EAAE,EAAE,OAAO,CAAC;CACf;AAED;;GAEG;AACH,MAAM,WAAW,WAAW;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;CACpB;AAED;;GAEG;AACH,MAAM,WAAW,OAAO;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,UAAU,EAAE,QAyCxB,CAAC;AAEF;;GAEG;AACH,eAAO,MAAM,SAAS,EAAE,QAwCvB,CAAC;AAEF;;GAEG;AACH,wBAAgB,QAAQ,CAAC,IAAI,EAAE,OAAO,GAAG,MAAM,GAAG,MAAM,GAAG,QAAQ,CAMlE;AAED;;GAEG;AACH,wBAAgB,WAAW,IAAI,QAAQ,CAOtC;AAED;;GAEG;AACH,eAAO,MAAM,MAAM;;;CAGlB,CAAC"}