@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,304 @@
1
+ "use strict";
2
+ /**
3
+ * AI SDK Stream Adapter
4
+ *
5
+ * This module provides an adapter that handles AI SDK streaming events
6
+ * and formats them appropriately for TTY rendering using streamtty.
7
+ */
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.AISDKStreamAdapter = void 0;
10
+ const stream_protocol_1 = require("./stream-protocol");
11
+ class AISDKStreamAdapter {
12
+ renderer;
13
+ options;
14
+ constructor(renderer, options = {}) {
15
+ this.renderer = renderer;
16
+ this.options = {
17
+ parseIncompleteMarkdown: true,
18
+ syntaxHighlight: true,
19
+ formatToolCalls: true,
20
+ showThinking: true,
21
+ maxToolResultLength: 200,
22
+ renderTimestamps: false,
23
+ ...options
24
+ };
25
+ }
26
+ /**
27
+ * Handle a stream of AI SDK events
28
+ */
29
+ async *handleAISDKStream(stream) {
30
+ for await (const event of stream) {
31
+ await this.processEvent(event);
32
+ yield;
33
+ }
34
+ }
35
+ /**
36
+ * Process a single stream event
37
+ */
38
+ async processEvent(event) {
39
+ // Validate event
40
+ if (!stream_protocol_1.StreamProtocol.validateEvent(event)) {
41
+ console.warn('Invalid stream event:', event);
42
+ return;
43
+ }
44
+ // Check if event should be rendered
45
+ if (!stream_protocol_1.StreamProtocol.shouldRenderEvent(event, this.options)) {
46
+ return;
47
+ }
48
+ // Transform and process event
49
+ const transformedEvent = stream_protocol_1.StreamProtocol.transformEvent(event);
50
+ await this.renderEvent(transformedEvent);
51
+ }
52
+ /**
53
+ * Render a validated stream event
54
+ */
55
+ async renderEvent(event) {
56
+ switch (event.type) {
57
+ case 'text_delta':
58
+ await this.renderTextDelta(event);
59
+ break;
60
+ case 'tool_call':
61
+ await this.renderToolCall(event);
62
+ break;
63
+ case 'tool_result':
64
+ await this.renderToolResult(event);
65
+ break;
66
+ case 'thinking':
67
+ case 'reasoning':
68
+ await this.renderThinking(event);
69
+ break;
70
+ case 'status':
71
+ case 'step':
72
+ await this.renderStatus(event);
73
+ break;
74
+ case 'error':
75
+ await this.renderError(event);
76
+ break;
77
+ case 'start':
78
+ await this.renderStart(event);
79
+ break;
80
+ case 'complete':
81
+ await this.renderComplete(event);
82
+ break;
83
+ }
84
+ }
85
+ /**
86
+ * Render text delta events (streaming text)
87
+ */
88
+ async renderTextDelta(event) {
89
+ if (event.content) {
90
+ this.renderer.stream(event.content);
91
+ }
92
+ }
93
+ /**
94
+ * Render tool call events
95
+ */
96
+ async renderToolCall(event) {
97
+ if (!this.options.formatToolCalls) {
98
+ return;
99
+ }
100
+ const formatted = this.formatToolCall(event);
101
+ this.renderer.stream(formatted);
102
+ }
103
+ /**
104
+ * Format a tool call event for display
105
+ */
106
+ formatToolCall(event) {
107
+ const timestamp = this.options.renderTimestamps && event.metadata?.timestamp
108
+ ? `[${new Date(event.metadata.timestamp).toLocaleTimeString()}] `
109
+ : '';
110
+ const toolIcon = this.getToolIcon(event.toolName);
111
+ const formattedArgs = this.formatToolArgs(event.toolArgs);
112
+ return `\n\n${timestamp}${toolIcon} **${event.toolName}**\n\`\`\`json\n${formattedArgs}\n\`\`\`\n\n`;
113
+ }
114
+ /**
115
+ * Render tool result events
116
+ */
117
+ async renderToolResult(event) {
118
+ const formatted = this.formatToolResult(event);
119
+ this.renderer.stream(formatted);
120
+ }
121
+ /**
122
+ * Format a tool result event for display
123
+ */
124
+ formatToolResult(event) {
125
+ const timestamp = this.options.renderTimestamps && event.metadata?.timestamp
126
+ ? `[${new Date(event.metadata.timestamp).toLocaleTimeString()}] `
127
+ : '';
128
+ const resultPreview = this.formatToolResultContent(event.toolResult);
129
+ const truncated = this.truncateContent(resultPreview, this.options.maxToolResultLength);
130
+ return `\n${timestamp}✓ **Result**: ${truncated}\n\n`;
131
+ }
132
+ /**
133
+ * Format tool result content for display
134
+ */
135
+ formatToolResultContent(result) {
136
+ if (typeof result === 'string') {
137
+ return result;
138
+ }
139
+ if (typeof result === 'object' && result !== null) {
140
+ try {
141
+ return JSON.stringify(result, null, 2);
142
+ }
143
+ catch {
144
+ return String(result);
145
+ }
146
+ }
147
+ return String(result);
148
+ }
149
+ /**
150
+ * Truncate content to specified length
151
+ */
152
+ truncateContent(content, maxLength) {
153
+ if (content.length <= maxLength) {
154
+ return content;
155
+ }
156
+ return content.slice(0, maxLength) + '...';
157
+ }
158
+ /**
159
+ * Render thinking/reasoning events
160
+ */
161
+ async renderThinking(event) {
162
+ if (!this.options.showThinking || !event.content) {
163
+ return;
164
+ }
165
+ const formatted = this.formatThinking(event);
166
+ this.renderer.stream(formatted);
167
+ }
168
+ /**
169
+ * Format thinking events for display
170
+ */
171
+ formatThinking(event) {
172
+ const timestamp = this.options.renderTimestamps && event.metadata?.timestamp
173
+ ? `[${new Date(event.metadata.timestamp).toLocaleTimeString()}] `
174
+ : '';
175
+ const icon = event.type === 'reasoning' ? '⚡' : '💭';
176
+ return `\n${timestamp}> ${icon} *${event.content}*\n\n`;
177
+ }
178
+ /**
179
+ * Render status events
180
+ */
181
+ async renderStatus(event) {
182
+ const formatted = this.formatStatus(event);
183
+ this.renderer.stream(formatted);
184
+ }
185
+ /**
186
+ * Format status events for display
187
+ */
188
+ formatStatus(event) {
189
+ const timestamp = this.options.renderTimestamps && event.metadata?.timestamp
190
+ ? `[${new Date(event.metadata.timestamp).toLocaleTimeString()}] `
191
+ : '';
192
+ const status = event.metadata?.status || 'info';
193
+ const icon = this.getStatusIcon(status);
194
+ return `\n${timestamp}${icon} **${event.content}**\n\n`;
195
+ }
196
+ /**
197
+ * Render error events
198
+ */
199
+ async renderError(event) {
200
+ const formatted = this.formatError(event);
201
+ this.renderer.stream(formatted);
202
+ }
203
+ /**
204
+ * Format error events for display
205
+ */
206
+ formatError(event) {
207
+ const timestamp = this.options.renderTimestamps && event.metadata?.timestamp
208
+ ? `[${new Date(event.metadata.timestamp).toLocaleTimeString()}] `
209
+ : '';
210
+ const code = event.metadata?.code ? ` (${event.metadata.code})` : '';
211
+ return `\n${timestamp}❌ **Error**${code}: ${event.content}\n\n`;
212
+ }
213
+ /**
214
+ * Render start events
215
+ */
216
+ async renderStart(event) {
217
+ const timestamp = this.options.renderTimestamps && event.metadata?.timestamp
218
+ ? `[${new Date(event.metadata.timestamp).toLocaleTimeString()}] `
219
+ : '';
220
+ this.renderer.stream(`\n${timestamp}🚀 **Starting**...\n\n`);
221
+ }
222
+ /**
223
+ * Render complete events
224
+ */
225
+ async renderComplete(event) {
226
+ const timestamp = this.options.renderTimestamps && event.metadata?.timestamp
227
+ ? `[${new Date(event.metadata.timestamp).toLocaleTimeString()}] `
228
+ : '';
229
+ this.renderer.stream(`\n${timestamp}✅ **Complete**\n\n`);
230
+ }
231
+ /**
232
+ * Get appropriate icon for tool name
233
+ */
234
+ getToolIcon(toolName) {
235
+ const iconMap = {
236
+ 'read_file': '📖',
237
+ 'write_file': '✏️',
238
+ 'edit_file': '🔧',
239
+ 'search': '🔍',
240
+ 'run_command': '⚡',
241
+ 'web_search': '🌐',
242
+ 'create_file': '📄',
243
+ 'delete_file': '🗑️',
244
+ 'list_files': '📁',
245
+ 'grep': '🔎',
246
+ 'git': '🌿',
247
+ 'npm': '📦',
248
+ 'docker': '🐳',
249
+ 'default': '🔧'
250
+ };
251
+ // Try exact match first
252
+ if (iconMap[toolName]) {
253
+ return iconMap[toolName];
254
+ }
255
+ // Try partial matches
256
+ for (const [key, icon] of Object.entries(iconMap)) {
257
+ if (toolName.includes(key)) {
258
+ return icon;
259
+ }
260
+ }
261
+ return iconMap.default;
262
+ }
263
+ /**
264
+ * Get appropriate icon for status
265
+ */
266
+ getStatusIcon(status) {
267
+ const iconMap = {
268
+ 'pending': '⏳',
269
+ 'running': '🔄',
270
+ 'completed': '✅',
271
+ 'failed': '❌',
272
+ 'info': 'ℹ️',
273
+ 'warning': '⚠️',
274
+ 'success': '✅',
275
+ 'error': '❌'
276
+ };
277
+ return iconMap[status] || iconMap.info;
278
+ }
279
+ /**
280
+ * Format tool arguments for display
281
+ */
282
+ formatToolArgs(args) {
283
+ try {
284
+ return JSON.stringify(args, null, 2);
285
+ }
286
+ catch {
287
+ return String(args);
288
+ }
289
+ }
290
+ /**
291
+ * Update adapter options
292
+ */
293
+ updateOptions(options) {
294
+ this.options = { ...this.options, ...options };
295
+ }
296
+ /**
297
+ * Get current options
298
+ */
299
+ getOptions() {
300
+ return { ...this.options };
301
+ }
302
+ }
303
+ exports.AISDKStreamAdapter = AISDKStreamAdapter;
304
+ //# sourceMappingURL=ai-sdk-adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ai-sdk-adapter.js","sourceRoot":"","sources":["../src/ai-sdk-adapter.ts"],"names":[],"mappings":"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"}
package/dist/cli.d.ts ADDED
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=cli.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":""}
package/dist/cli.js ADDED
@@ -0,0 +1,188 @@
1
+ #!/usr/bin/env node
2
+ "use strict";
3
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
4
+ if (k2 === undefined) k2 = k;
5
+ var desc = Object.getOwnPropertyDescriptor(m, k);
6
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
7
+ desc = { enumerable: true, get: function() { return m[k]; } };
8
+ }
9
+ Object.defineProperty(o, k2, desc);
10
+ }) : (function(o, m, k, k2) {
11
+ if (k2 === undefined) k2 = k;
12
+ o[k2] = m[k];
13
+ }));
14
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
15
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
16
+ }) : function(o, v) {
17
+ o["default"] = v;
18
+ });
19
+ var __importStar = (this && this.__importStar) || (function () {
20
+ var ownKeys = function(o) {
21
+ ownKeys = Object.getOwnPropertyNames || function (o) {
22
+ var ar = [];
23
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
24
+ return ar;
25
+ };
26
+ return ownKeys(o);
27
+ };
28
+ return function (mod) {
29
+ if (mod && mod.__esModule) return mod;
30
+ var result = {};
31
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
32
+ __setModuleDefault(result, mod);
33
+ return result;
34
+ };
35
+ })();
36
+ Object.defineProperty(exports, "__esModule", { value: true });
37
+ const index_1 = require("./index");
38
+ const fs = __importStar(require("fs"));
39
+ const path = __importStar(require("path"));
40
+ const args = process.argv.slice(2);
41
+ function showHelp() {
42
+ console.log(`
43
+ Streamtty - TTY Markdown Streaming Renderer
44
+
45
+ Usage:
46
+ streamtty [options] [file]
47
+
48
+ Options:
49
+ -h, --help Show this help message
50
+ -v, --version Show version
51
+ -s, --stream Enable streaming mode (simulates AI-like streaming)
52
+ --no-incomplete Disable incomplete markdown parsing
53
+ --no-syntax Disable syntax highlighting
54
+ --no-scroll Disable auto-scroll
55
+ -w, --width <number> Set max width (default: 120)
56
+
57
+ Examples:
58
+ streamtty document.md # Render markdown file
59
+ streamtty -s document.md # Render with streaming simulation
60
+ cat README.md | streamtty # Read from stdin
61
+ echo "# Hello **World**" | streamtty # Quick render
62
+
63
+ Keyboard Controls:
64
+ ↑/k Scroll up
65
+ ↓/j Scroll down
66
+ PageUp Scroll page up
67
+ PageDown Scroll page down
68
+ Home/g Go to top
69
+ End/G Go to bottom
70
+ q/Esc Quit
71
+ `);
72
+ }
73
+ function showVersion() {
74
+ const packageJson = JSON.parse(fs.readFileSync(path.join(__dirname, '../package.json'), 'utf-8'));
75
+ console.log(`streamtty v${packageJson.version}`);
76
+ }
77
+ async function main() {
78
+ // Parse args
79
+ const options = {
80
+ stream: false,
81
+ parseIncomplete: true,
82
+ syntaxHighlight: true,
83
+ autoScroll: true,
84
+ maxWidth: 120,
85
+ file: null,
86
+ };
87
+ for (let i = 0; i < args.length; i++) {
88
+ const arg = args[i];
89
+ switch (arg) {
90
+ case '-h':
91
+ case '--help':
92
+ showHelp();
93
+ process.exit(0);
94
+ break;
95
+ case '-v':
96
+ case '--version':
97
+ showVersion();
98
+ process.exit(0);
99
+ break;
100
+ case '-s':
101
+ case '--stream':
102
+ options.stream = true;
103
+ break;
104
+ case '--no-incomplete':
105
+ options.parseIncomplete = false;
106
+ break;
107
+ case '--no-syntax':
108
+ options.syntaxHighlight = false;
109
+ break;
110
+ case '--no-scroll':
111
+ options.autoScroll = false;
112
+ break;
113
+ case '-w':
114
+ case '--width':
115
+ i++;
116
+ options.maxWidth = parseInt(args[i], 10);
117
+ break;
118
+ default:
119
+ if (!arg.startsWith('-')) {
120
+ options.file = arg;
121
+ }
122
+ }
123
+ }
124
+ // Read content
125
+ let content;
126
+ if (options.file) {
127
+ // Read from file
128
+ try {
129
+ content = fs.readFileSync(options.file, 'utf-8');
130
+ }
131
+ catch (error) {
132
+ console.error(`Error reading file: ${options.file}`);
133
+ process.exit(1);
134
+ }
135
+ }
136
+ else if (!process.stdin.isTTY) {
137
+ // Read from stdin
138
+ const chunks = [];
139
+ for await (const chunk of process.stdin) {
140
+ chunks.push(chunk);
141
+ }
142
+ content = Buffer.concat(chunks).toString('utf-8');
143
+ }
144
+ else {
145
+ // No input provided
146
+ console.error('Error: No input provided. Use --help for usage information.');
147
+ process.exit(1);
148
+ }
149
+ // Create Streamtty instance
150
+ const streamtty = new index_1.Streamtty({
151
+ parseIncompleteMarkdown: options.parseIncomplete,
152
+ syntaxHighlight: options.syntaxHighlight,
153
+ autoScroll: options.autoScroll,
154
+ maxWidth: options.maxWidth,
155
+ });
156
+ // Render content
157
+ if (options.stream) {
158
+ // Simulate streaming
159
+ let index = 0;
160
+ const streamInterval = setInterval(() => {
161
+ if (index < content.length) {
162
+ const chunkSize = Math.floor(Math.random() * 10) + 1;
163
+ const chunk = content.slice(index, index + chunkSize);
164
+ streamtty.stream(chunk);
165
+ index += chunkSize;
166
+ }
167
+ else {
168
+ clearInterval(streamInterval);
169
+ }
170
+ }, 50);
171
+ // Handle cleanup
172
+ process.on('SIGINT', () => {
173
+ clearInterval(streamInterval);
174
+ streamtty.destroy();
175
+ process.exit(0);
176
+ });
177
+ }
178
+ else {
179
+ // Render all at once
180
+ streamtty.setContent(content);
181
+ }
182
+ }
183
+ // Run CLI
184
+ main().catch(error => {
185
+ console.error('Fatal error:', error);
186
+ process.exit(1);
187
+ });
188
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,131 @@
1
+ /**
2
+ * Comprehensive Error Handling
3
+ *
4
+ * This module provides enterprise-level error handling for streamtty,
5
+ * including custom error classes, graceful degradation, and safe rendering.
6
+ */
7
+ import { StreamEvent } from './types/stream-events';
8
+ /**
9
+ * Base error class for all streamtty errors
10
+ */
11
+ export declare class StreamttyError extends Error {
12
+ readonly code: string;
13
+ readonly timestamp: number;
14
+ readonly context?: Record<string, any>;
15
+ constructor(message: string, code?: string, context?: Record<string, any>);
16
+ }
17
+ /**
18
+ * Parser-related errors
19
+ */
20
+ export declare class StreamttyParseError extends StreamttyError {
21
+ readonly chunk?: string;
22
+ readonly position?: number;
23
+ constructor(message: string, chunk?: string, position?: number, context?: Record<string, any>);
24
+ }
25
+ /**
26
+ * Renderer-related errors
27
+ */
28
+ export declare class StreamttyRenderError extends StreamttyError {
29
+ readonly tokens?: any[];
30
+ readonly renderContext?: Record<string, any>;
31
+ constructor(message: string, tokens?: any[], renderContext?: Record<string, any>, context?: Record<string, any>);
32
+ }
33
+ /**
34
+ * AI SDK adapter errors
35
+ */
36
+ export declare class StreamttyAISDKError extends StreamttyError {
37
+ readonly event?: StreamEvent;
38
+ readonly adapterContext?: Record<string, any>;
39
+ constructor(message: string, event?: StreamEvent, adapterContext?: Record<string, any>, context?: Record<string, any>);
40
+ }
41
+ /**
42
+ * Configuration errors
43
+ */
44
+ export declare class StreamttyConfigError extends StreamttyError {
45
+ readonly option?: string;
46
+ readonly value?: any;
47
+ constructor(message: string, option?: string, value?: any, context?: Record<string, any>);
48
+ }
49
+ /**
50
+ * Blessed/TTY related errors
51
+ */
52
+ export declare class StreamttyTTYError extends StreamttyError {
53
+ readonly ttyOperation?: string;
54
+ readonly blessedContext?: Record<string, any>;
55
+ constructor(message: string, ttyOperation?: string, blessedContext?: Record<string, any>, context?: Record<string, any>);
56
+ }
57
+ /**
58
+ * Performance-related errors
59
+ */
60
+ export declare class StreamttyPerformanceError extends StreamttyError {
61
+ readonly operation?: string;
62
+ readonly duration?: number;
63
+ readonly threshold?: number;
64
+ constructor(message: string, operation?: string, duration?: number, threshold?: number, context?: Record<string, any>);
65
+ }
66
+ /**
67
+ * Error handler interface
68
+ */
69
+ export interface ErrorHandler {
70
+ handle(error: Error, context?: Record<string, any>): void | Promise<void>;
71
+ shouldRetry(error: Error, attempt: number): boolean;
72
+ shouldFallback(error: Error): boolean;
73
+ }
74
+ /**
75
+ * Default error handler implementation
76
+ */
77
+ export declare class DefaultErrorHandler implements ErrorHandler {
78
+ private maxRetries;
79
+ private fallbackEnabled;
80
+ constructor(options?: {
81
+ maxRetries?: number;
82
+ fallbackEnabled?: boolean;
83
+ });
84
+ handle(error: Error, context?: Record<string, any>): void;
85
+ shouldRetry(error: Error, attempt: number): boolean;
86
+ shouldFallback(error: Error): boolean;
87
+ private formatErrorInfo;
88
+ private isCriticalError;
89
+ private isWarning;
90
+ }
91
+ /**
92
+ * Safe operation wrapper
93
+ */
94
+ export declare class SafeOperation {
95
+ private errorHandler;
96
+ private retryCount;
97
+ constructor(errorHandler?: ErrorHandler);
98
+ /**
99
+ * Execute an operation with error handling and retry logic
100
+ */
101
+ execute<T>(operation: () => Promise<T>, context?: Record<string, any>): Promise<T | null>;
102
+ /**
103
+ * Execute with fallback
104
+ */
105
+ private executeFallback;
106
+ private fallbackRender;
107
+ private fallbackAISDK;
108
+ private delay;
109
+ }
110
+ /**
111
+ * Error recovery utilities
112
+ */
113
+ export declare class ErrorRecovery {
114
+ /**
115
+ * Attempt to recover from a parsing error
116
+ */
117
+ static recoverFromParseError(error: StreamttyParseError, content: string): string;
118
+ /**
119
+ * Attempt to recover from a render error
120
+ */
121
+ static recoverFromRenderError(error: StreamttyRenderError, content: string): string;
122
+ /**
123
+ * Attempt to recover from an AI SDK error
124
+ */
125
+ static recoverFromAISDKError(error: StreamttyAISDKError): string;
126
+ }
127
+ /**
128
+ * Global error handler setup
129
+ */
130
+ export declare function setupGlobalErrorHandling(): void;
131
+ //# sourceMappingURL=errors.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.d.ts","sourceRoot":"","sources":["../src/errors.ts"],"names":[],"mappings":"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"}