@nicomatt69/streamdown-tty 2.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +113 -0
- package/LICENSE +21 -0
- package/README.md +287 -0
- package/dist/adapters/index.d.ts +185 -0
- package/dist/adapters/index.d.ts.map +1 -0
- package/dist/ai-sdk-adapter.d.ts +113 -0
- package/dist/ai-sdk-adapter.d.ts.map +1 -0
- package/dist/cli.d.ts +3 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/core/index.d.ts +209 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/math-renderer.d.ts +40 -0
- package/dist/core/math-renderer.d.ts.map +1 -0
- package/dist/core/parser.d.ts +139 -0
- package/dist/core/parser.d.ts.map +1 -0
- package/dist/core/protocol.d.ts +319 -0
- package/dist/core/protocol.d.ts.map +1 -0
- package/dist/core/remend-tty.d.ts +68 -0
- package/dist/core/remend-tty.d.ts.map +1 -0
- package/dist/core/renderer.d.ts +286 -0
- package/dist/core/renderer.d.ts.map +1 -0
- package/dist/errors.d.ts +131 -0
- package/dist/errors.d.ts.map +1 -0
- package/dist/events.d.ts +185 -0
- package/dist/events.d.ts.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +12921 -0
- package/dist/parser/streaming-parser.d.ts +81 -0
- package/dist/parser/streaming-parser.d.ts.map +1 -0
- package/dist/performance.d.ts +139 -0
- package/dist/performance.d.ts.map +1 -0
- package/dist/plugins/index.d.ts +6 -0
- package/dist/plugins/index.d.ts.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.d.ts +65 -0
- package/dist/plugins/plugin-system.d.ts.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/index.d.ts +5 -0
- package/dist/plugins/rehype/index.d.ts.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/math.d.ts +7 -0
- package/dist/plugins/remark/math.d.ts.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/types.d.ts +72 -0
- package/dist/plugins/types.d.ts.map +1 -0
- package/dist/renderer/ansi-renderer.d.ts +76 -0
- package/dist/renderer/ansi-renderer.d.ts.map +1 -0
- package/dist/renderers/index.d.ts +7 -0
- package/dist/renderers/index.d.ts.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/mermaid-ascii.d.ts +14 -0
- package/dist/renderers/mermaid-ascii.d.ts.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/shiki-ansi.d.ts +48 -0
- package/dist/renderers/shiki-ansi.d.ts.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/unicode-math.d.ts +29 -0
- package/dist/renderers/unicode-math.d.ts.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/chunk-processor.d.ts +81 -0
- package/dist/security/chunk-processor.d.ts.map +1 -0
- package/dist/security/index.d.ts +6 -0
- package/dist/security/index.d.ts.map +1 -0
- package/dist/security/input-validator.d.ts +55 -0
- package/dist/security/input-validator.d.ts.map +1 -0
- package/dist/stream-protocol.d.ts +61 -0
- package/dist/stream-protocol.d.ts.map +1 -0
- package/dist/streamdown-compat.d.ts +72 -0
- package/dist/streamdown-compat.d.ts.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-integration.d.ts +71 -0
- package/dist/streaming-integration.d.ts.map +1 -0
- package/dist/themes/index.d.ts +59 -0
- package/dist/themes/index.d.ts.map +1 -0
- package/dist/types/index.d.ts +168 -0
- package/dist/types/index.d.ts.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/stream-events.d.ts +71 -0
- package/dist/types/stream-events.d.ts.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/enhanced-table-renderer.d.ts +77 -0
- package/dist/utils/enhanced-table-renderer.d.ts.map +1 -0
- package/dist/utils/formatting.d.ts +100 -0
- package/dist/utils/formatting.d.ts.map +1 -0
- package/dist/utils/index.d.ts +5 -0
- package/dist/utils/index.d.ts.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/mermaid-ascii-renderer.d.ts +20 -0
- package/dist/utils/mermaid-ascii-renderer.d.ts.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/shiki-ansi-renderer.d.ts +29 -0
- package/dist/utils/shiki-ansi-renderer.d.ts.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/table-formatter-inline.d.ts +37 -0
- package/dist/utils/table-formatter-inline.d.ts.map +1 -0
- package/dist/utils/table.d.ts +35 -0
- package/dist/utils/table.d.ts.map +1 -0
- package/dist/widgets/stream-indicator.d.ts +130 -0
- package/dist/widgets/stream-indicator.d.ts.map +1 -0
- package/package.json +129 -0
|
@@ -0,0 +1,319 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Standard Stream Protocol for CLI Agents
|
|
3
|
+
*
|
|
4
|
+
* A universal protocol for streaming markdown content from AI models
|
|
5
|
+
* to terminal interfaces. Compatible with:
|
|
6
|
+
* - Anthropic Claude API
|
|
7
|
+
* - OpenAI API
|
|
8
|
+
* - Vercel AI SDK
|
|
9
|
+
* - Custom AI implementations
|
|
10
|
+
*
|
|
11
|
+
* Features:
|
|
12
|
+
* - Unified event system
|
|
13
|
+
* - Tool call handling
|
|
14
|
+
* - Thinking/reasoning blocks
|
|
15
|
+
* - Progress tracking
|
|
16
|
+
* - Error handling
|
|
17
|
+
* - Backpressure support
|
|
18
|
+
*
|
|
19
|
+
* @module protocol
|
|
20
|
+
*/
|
|
21
|
+
/**
|
|
22
|
+
* Stream event types
|
|
23
|
+
*/
|
|
24
|
+
export type StreamEventType = 'start' | 'text' | 'tool_start' | 'tool_input' | 'tool_end' | 'thinking_start' | 'thinking' | 'thinking_end' | 'code_start' | 'code' | 'code_end' | 'error' | 'complete' | 'abort' | 'progress' | 'metadata';
|
|
25
|
+
/**
|
|
26
|
+
* Base stream event
|
|
27
|
+
*/
|
|
28
|
+
export interface StreamEvent {
|
|
29
|
+
type: StreamEventType;
|
|
30
|
+
timestamp: number;
|
|
31
|
+
id?: string;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Start event - marks beginning of stream
|
|
35
|
+
*/
|
|
36
|
+
export interface StartEvent extends StreamEvent {
|
|
37
|
+
type: 'start';
|
|
38
|
+
model?: string;
|
|
39
|
+
conversationId?: string;
|
|
40
|
+
metadata?: Record<string, unknown>;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Text delta event - streaming text content
|
|
44
|
+
*/
|
|
45
|
+
export interface TextEvent extends StreamEvent {
|
|
46
|
+
type: 'text';
|
|
47
|
+
content: string;
|
|
48
|
+
/** Whether this is markdown content */
|
|
49
|
+
markdown?: boolean;
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Tool call start event
|
|
53
|
+
*/
|
|
54
|
+
export interface ToolStartEvent extends StreamEvent {
|
|
55
|
+
type: 'tool_start';
|
|
56
|
+
toolId: string;
|
|
57
|
+
toolName: string;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Tool call input streaming event
|
|
61
|
+
*/
|
|
62
|
+
export interface ToolInputEvent extends StreamEvent {
|
|
63
|
+
type: 'tool_input';
|
|
64
|
+
toolId: string;
|
|
65
|
+
input: string;
|
|
66
|
+
/** Accumulated input so far */
|
|
67
|
+
accumulated?: string;
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Tool call end event
|
|
71
|
+
*/
|
|
72
|
+
export interface ToolEndEvent extends StreamEvent {
|
|
73
|
+
type: 'tool_end';
|
|
74
|
+
toolId: string;
|
|
75
|
+
result?: unknown;
|
|
76
|
+
error?: string;
|
|
77
|
+
durationMs?: number;
|
|
78
|
+
}
|
|
79
|
+
/**
|
|
80
|
+
* Thinking/reasoning start event
|
|
81
|
+
*/
|
|
82
|
+
export interface ThinkingStartEvent extends StreamEvent {
|
|
83
|
+
type: 'thinking_start';
|
|
84
|
+
thinkingId?: string;
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* Thinking content event
|
|
88
|
+
*/
|
|
89
|
+
export interface ThinkingEvent extends StreamEvent {
|
|
90
|
+
type: 'thinking';
|
|
91
|
+
content: string;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Thinking end event
|
|
95
|
+
*/
|
|
96
|
+
export interface ThinkingEndEvent extends StreamEvent {
|
|
97
|
+
type: 'thinking_end';
|
|
98
|
+
thinkingId?: string;
|
|
99
|
+
durationMs?: number;
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Code streaming start event
|
|
103
|
+
*/
|
|
104
|
+
export interface CodeStartEvent extends StreamEvent {
|
|
105
|
+
type: 'code_start';
|
|
106
|
+
language?: string;
|
|
107
|
+
filename?: string;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Code content event
|
|
111
|
+
*/
|
|
112
|
+
export interface CodeEvent extends StreamEvent {
|
|
113
|
+
type: 'code';
|
|
114
|
+
content: string;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Code end event
|
|
118
|
+
*/
|
|
119
|
+
export interface CodeEndEvent extends StreamEvent {
|
|
120
|
+
type: 'code_end';
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* Error event
|
|
124
|
+
*/
|
|
125
|
+
export interface ErrorEvent extends StreamEvent {
|
|
126
|
+
type: 'error';
|
|
127
|
+
error: Error | string;
|
|
128
|
+
code?: string;
|
|
129
|
+
recoverable?: boolean;
|
|
130
|
+
}
|
|
131
|
+
/**
|
|
132
|
+
* Stream complete event
|
|
133
|
+
*/
|
|
134
|
+
export interface CompleteEvent extends StreamEvent {
|
|
135
|
+
type: 'complete';
|
|
136
|
+
stats?: StreamStats;
|
|
137
|
+
usage?: TokenUsage;
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Stream abort event
|
|
141
|
+
*/
|
|
142
|
+
export interface AbortEvent extends StreamEvent {
|
|
143
|
+
type: 'abort';
|
|
144
|
+
reason?: string;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Progress event
|
|
148
|
+
*/
|
|
149
|
+
export interface ProgressEvent extends StreamEvent {
|
|
150
|
+
type: 'progress';
|
|
151
|
+
current: number;
|
|
152
|
+
total?: number;
|
|
153
|
+
message?: string;
|
|
154
|
+
}
|
|
155
|
+
/**
|
|
156
|
+
* Metadata event
|
|
157
|
+
*/
|
|
158
|
+
export interface MetadataEvent extends StreamEvent {
|
|
159
|
+
type: 'metadata';
|
|
160
|
+
key: string;
|
|
161
|
+
value: unknown;
|
|
162
|
+
}
|
|
163
|
+
/**
|
|
164
|
+
* Union type for all events
|
|
165
|
+
*/
|
|
166
|
+
export type AnyStreamEvent = StartEvent | TextEvent | ToolStartEvent | ToolInputEvent | ToolEndEvent | ThinkingStartEvent | ThinkingEvent | ThinkingEndEvent | CodeStartEvent | CodeEvent | CodeEndEvent | ErrorEvent | CompleteEvent | AbortEvent | ProgressEvent | MetadataEvent;
|
|
167
|
+
/**
|
|
168
|
+
* Stream statistics
|
|
169
|
+
*/
|
|
170
|
+
export interface StreamStats {
|
|
171
|
+
startTime: number;
|
|
172
|
+
endTime: number;
|
|
173
|
+
durationMs: number;
|
|
174
|
+
bytesReceived: number;
|
|
175
|
+
chunksReceived: number;
|
|
176
|
+
tokensGenerated?: number;
|
|
177
|
+
toolCalls?: number;
|
|
178
|
+
}
|
|
179
|
+
/**
|
|
180
|
+
* Token usage information
|
|
181
|
+
*/
|
|
182
|
+
export interface TokenUsage {
|
|
183
|
+
promptTokens?: number;
|
|
184
|
+
completionTokens?: number;
|
|
185
|
+
totalTokens?: number;
|
|
186
|
+
cacheReadTokens?: number;
|
|
187
|
+
cacheWriteTokens?: number;
|
|
188
|
+
}
|
|
189
|
+
/**
|
|
190
|
+
* Event handler type
|
|
191
|
+
*/
|
|
192
|
+
export type StreamEventHandler<T extends AnyStreamEvent = AnyStreamEvent> = (event: T) => void | Promise<void>;
|
|
193
|
+
/**
|
|
194
|
+
* Stream protocol options
|
|
195
|
+
*/
|
|
196
|
+
export interface StreamProtocolOptions {
|
|
197
|
+
/** Handler for all events */
|
|
198
|
+
onEvent?: StreamEventHandler;
|
|
199
|
+
/** Handler for text events only */
|
|
200
|
+
onText?: StreamEventHandler<TextEvent>;
|
|
201
|
+
/** Handler for tool events */
|
|
202
|
+
onTool?: StreamEventHandler<ToolStartEvent | ToolInputEvent | ToolEndEvent>;
|
|
203
|
+
/** Handler for thinking events */
|
|
204
|
+
onThinking?: StreamEventHandler<ThinkingStartEvent | ThinkingEvent | ThinkingEndEvent>;
|
|
205
|
+
/** Handler for errors */
|
|
206
|
+
onError?: StreamEventHandler<ErrorEvent>;
|
|
207
|
+
/** Handler for completion */
|
|
208
|
+
onComplete?: StreamEventHandler<CompleteEvent>;
|
|
209
|
+
/** Buffer size for backpressure */
|
|
210
|
+
bufferSize?: number;
|
|
211
|
+
/** Debounce interval in ms */
|
|
212
|
+
debounceMs?: number;
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Stream Protocol Handler
|
|
216
|
+
*
|
|
217
|
+
* Central event bus for managing stream events
|
|
218
|
+
*/
|
|
219
|
+
export declare class StreamProtocol {
|
|
220
|
+
private options;
|
|
221
|
+
private handlers;
|
|
222
|
+
private eventBuffer;
|
|
223
|
+
private stats;
|
|
224
|
+
private isComplete;
|
|
225
|
+
private abortController;
|
|
226
|
+
constructor(options?: StreamProtocolOptions);
|
|
227
|
+
/**
|
|
228
|
+
* Register event handler
|
|
229
|
+
*/
|
|
230
|
+
on<T extends StreamEventType>(type: T | 'all', handler: StreamEventHandler): () => void;
|
|
231
|
+
/**
|
|
232
|
+
* Remove event handler
|
|
233
|
+
*/
|
|
234
|
+
off(type: StreamEventType | 'all', handler: StreamEventHandler): void;
|
|
235
|
+
/**
|
|
236
|
+
* Emit an event
|
|
237
|
+
*/
|
|
238
|
+
emit(event: AnyStreamEvent): Promise<void>;
|
|
239
|
+
/**
|
|
240
|
+
* Start the stream
|
|
241
|
+
*/
|
|
242
|
+
start(metadata?: Record<string, unknown>): Promise<void>;
|
|
243
|
+
/**
|
|
244
|
+
* Emit text content
|
|
245
|
+
*/
|
|
246
|
+
text(content: string, markdown?: boolean): Promise<void>;
|
|
247
|
+
/**
|
|
248
|
+
* Start a tool call
|
|
249
|
+
*/
|
|
250
|
+
toolStart(toolName: string, toolId?: string): Promise<string>;
|
|
251
|
+
/**
|
|
252
|
+
* Stream tool input
|
|
253
|
+
*/
|
|
254
|
+
toolInput(toolId: string, input: string, accumulated?: string): Promise<void>;
|
|
255
|
+
/**
|
|
256
|
+
* End a tool call
|
|
257
|
+
*/
|
|
258
|
+
toolEnd(toolId: string, result?: unknown, error?: string): Promise<void>;
|
|
259
|
+
/**
|
|
260
|
+
* Start thinking/reasoning
|
|
261
|
+
*/
|
|
262
|
+
thinkingStart(thinkingId?: string): Promise<string>;
|
|
263
|
+
/**
|
|
264
|
+
* Stream thinking content
|
|
265
|
+
*/
|
|
266
|
+
thinking(content: string): Promise<void>;
|
|
267
|
+
/**
|
|
268
|
+
* End thinking
|
|
269
|
+
*/
|
|
270
|
+
thinkingEnd(thinkingId?: string): Promise<void>;
|
|
271
|
+
/**
|
|
272
|
+
* Emit error
|
|
273
|
+
*/
|
|
274
|
+
error(error: Error | string, code?: string, recoverable?: boolean): Promise<void>;
|
|
275
|
+
/**
|
|
276
|
+
* Complete the stream
|
|
277
|
+
*/
|
|
278
|
+
complete(usage?: TokenUsage): Promise<void>;
|
|
279
|
+
/**
|
|
280
|
+
* Abort the stream
|
|
281
|
+
*/
|
|
282
|
+
abort(reason?: string): Promise<void>;
|
|
283
|
+
/**
|
|
284
|
+
* Get abort signal
|
|
285
|
+
*/
|
|
286
|
+
get signal(): AbortSignal | undefined;
|
|
287
|
+
/**
|
|
288
|
+
* Get current stats
|
|
289
|
+
*/
|
|
290
|
+
getStats(): StreamStats;
|
|
291
|
+
/**
|
|
292
|
+
* Get event buffer
|
|
293
|
+
*/
|
|
294
|
+
getBuffer(): AnyStreamEvent[];
|
|
295
|
+
/**
|
|
296
|
+
* Check if stream is complete
|
|
297
|
+
*/
|
|
298
|
+
get completed(): boolean;
|
|
299
|
+
/**
|
|
300
|
+
* Clear handlers and reset state
|
|
301
|
+
*/
|
|
302
|
+
reset(): void;
|
|
303
|
+
}
|
|
304
|
+
/**
|
|
305
|
+
* Create stream protocol with async iterator support
|
|
306
|
+
*/
|
|
307
|
+
export declare function createStreamProtocol(options?: StreamProtocolOptions): StreamProtocol;
|
|
308
|
+
/**
|
|
309
|
+
* Convert async iterable to stream protocol events
|
|
310
|
+
*/
|
|
311
|
+
export declare function streamToProtocol(stream: AsyncIterable<string>, protocol: StreamProtocol): AsyncGenerator<string>;
|
|
312
|
+
/**
|
|
313
|
+
* Create event emitter from stream
|
|
314
|
+
*/
|
|
315
|
+
export declare function createEventEmitter(stream: AsyncIterable<AnyStreamEvent>): {
|
|
316
|
+
subscribe: (handler: StreamEventHandler) => () => void;
|
|
317
|
+
start: () => Promise<void>;
|
|
318
|
+
};
|
|
319
|
+
//# sourceMappingURL=protocol.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"protocol.d.ts","sourceRoot":"","sources":["../../src/core/protocol.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Remend-TTY - Self-healing Markdown for Terminal Streaming
|
|
3
|
+
*
|
|
4
|
+
* A zero-dependency implementation inspired by Vercel's remend package,
|
|
5
|
+
* optimized for TTY/ANSI terminal output.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Auto-closes incomplete markdown syntax during streaming
|
|
9
|
+
* - Context-aware (respects code blocks, math blocks, nested formatting)
|
|
10
|
+
* - Performance-first (no regex allocations, string pooling)
|
|
11
|
+
* - Zero dependencies
|
|
12
|
+
*
|
|
13
|
+
* @module remend-tty
|
|
14
|
+
* @author Streamdown-TTY
|
|
15
|
+
* @license MIT
|
|
16
|
+
*/
|
|
17
|
+
export interface RemendOptions {
|
|
18
|
+
/** Enable code block context awareness */
|
|
19
|
+
respectCodeBlocks?: boolean;
|
|
20
|
+
/** Enable math block context awareness */
|
|
21
|
+
respectMathBlocks?: boolean;
|
|
22
|
+
/** Enable thinking block context awareness */
|
|
23
|
+
respectThinkingBlocks?: boolean;
|
|
24
|
+
/** Custom incomplete link placeholder */
|
|
25
|
+
incompleteLinkPlaceholder?: string;
|
|
26
|
+
/** Custom incomplete image placeholder */
|
|
27
|
+
incompleteImagePlaceholder?: string;
|
|
28
|
+
/** Maximum input length (DoS protection) */
|
|
29
|
+
maxLength?: number;
|
|
30
|
+
}
|
|
31
|
+
export interface RemendResult {
|
|
32
|
+
/** The healed markdown string */
|
|
33
|
+
output: string;
|
|
34
|
+
/** Whether any healing was applied */
|
|
35
|
+
wasHealed: boolean;
|
|
36
|
+
/** List of applied fixes */
|
|
37
|
+
fixes: RemendFix[];
|
|
38
|
+
/** Processing time in ms */
|
|
39
|
+
processingTimeMs: number;
|
|
40
|
+
}
|
|
41
|
+
export interface RemendFix {
|
|
42
|
+
type: RemendFixType;
|
|
43
|
+
position: number;
|
|
44
|
+
original: string;
|
|
45
|
+
fixed: string;
|
|
46
|
+
}
|
|
47
|
+
export type RemendFixType = 'bold' | 'italic' | 'bold-italic' | 'code-inline' | 'code-block' | 'link' | 'image' | 'strikethrough' | 'math-inline' | 'math-block' | 'heading' | 'blockquote' | 'thinking';
|
|
48
|
+
/**
|
|
49
|
+
* Main healing function - auto-closes incomplete markdown syntax
|
|
50
|
+
*/
|
|
51
|
+
export declare function remendTTY(input: string, options?: RemendOptions): string;
|
|
52
|
+
/**
|
|
53
|
+
* Detailed healing function with diagnostics
|
|
54
|
+
*/
|
|
55
|
+
export declare function remendTTYDetailed(input: string, options?: RemendOptions): RemendResult;
|
|
56
|
+
/**
|
|
57
|
+
* Clear the healing cache
|
|
58
|
+
*/
|
|
59
|
+
export declare function clearRemendCache(): void;
|
|
60
|
+
/**
|
|
61
|
+
* Get cache statistics
|
|
62
|
+
*/
|
|
63
|
+
export declare function getRemendCacheStats(): {
|
|
64
|
+
size: number;
|
|
65
|
+
maxSize: number;
|
|
66
|
+
};
|
|
67
|
+
export default remendTTY;
|
|
68
|
+
//# sourceMappingURL=remend-tty.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"remend-tty.d.ts","sourceRoot":"","sources":["../../src/core/remend-tty.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;GAeG;AAEH,MAAM,WAAW,aAAa;IAC5B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,0CAA0C;IAC1C,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,8CAA8C;IAC9C,qBAAqB,CAAC,EAAE,OAAO,CAAC;IAChC,yCAAyC;IACzC,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,0CAA0C;IAC1C,0BAA0B,CAAC,EAAE,MAAM,CAAC;IACpC,4CAA4C;IAC5C,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,YAAY;IAC3B,iCAAiC;IACjC,MAAM,EAAE,MAAM,CAAC;IACf,sCAAsC;IACtC,SAAS,EAAE,OAAO,CAAC;IACnB,4BAA4B;IAC5B,KAAK,EAAE,SAAS,EAAE,CAAC;IACnB,4BAA4B;IAC5B,gBAAgB,EAAE,MAAM,CAAC;CAC1B;AAED,MAAM,WAAW,SAAS;IACxB,IAAI,EAAE,aAAa,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;CACf;AAED,MAAM,MAAM,aAAa,GACrB,MAAM,GACN,QAAQ,GACR,aAAa,GACb,aAAa,GACb,YAAY,GACZ,MAAM,GACN,OAAO,GACP,eAAe,GACf,aAAa,GACb,YAAY,GACZ,SAAS,GACT,YAAY,GACZ,UAAU,CAAC;AAyBf;;GAEG;AACH,wBAAgB,SAAS,CACvB,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,MAAM,CAGR;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,aAAkB,GAC1B,YAAY,CAoId;AAyaD;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAEvC;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,MAAM,CAAA;CAAE,CAKvE;AAGD,eAAe,SAAS,CAAC"}
|
|
@@ -0,0 +1,286 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Zero-Dependency ANSI Renderer for TTY
|
|
3
|
+
*
|
|
4
|
+
* A universal terminal renderer that outputs pure ANSI escape sequences.
|
|
5
|
+
* Compatible with all terminal emulators and TTY devices.
|
|
6
|
+
*
|
|
7
|
+
* Features:
|
|
8
|
+
* - Zero dependencies
|
|
9
|
+
* - Pure ANSI escape codes
|
|
10
|
+
* - Cross-platform (Node, Bun, Deno, Browser terminals)
|
|
11
|
+
* - Object pooling for performance
|
|
12
|
+
* - Customizable themes
|
|
13
|
+
* - Memoized rendering
|
|
14
|
+
*
|
|
15
|
+
* @module renderer
|
|
16
|
+
*/
|
|
17
|
+
import type { Token } from './parser.js';
|
|
18
|
+
/**
|
|
19
|
+
* ANSI escape codes
|
|
20
|
+
*/
|
|
21
|
+
export declare const ANSI: {
|
|
22
|
+
readonly reset: "\u001B[0m";
|
|
23
|
+
readonly bold: "\u001B[1m";
|
|
24
|
+
readonly dim: "\u001B[2m";
|
|
25
|
+
readonly italic: "\u001B[3m";
|
|
26
|
+
readonly underline: "\u001B[4m";
|
|
27
|
+
readonly blink: "\u001B[5m";
|
|
28
|
+
readonly inverse: "\u001B[7m";
|
|
29
|
+
readonly hidden: "\u001B[8m";
|
|
30
|
+
readonly strikethrough: "\u001B[9m";
|
|
31
|
+
readonly black: "\u001B[30m";
|
|
32
|
+
readonly red: "\u001B[31m";
|
|
33
|
+
readonly green: "\u001B[32m";
|
|
34
|
+
readonly yellow: "\u001B[33m";
|
|
35
|
+
readonly blue: "\u001B[34m";
|
|
36
|
+
readonly magenta: "\u001B[35m";
|
|
37
|
+
readonly cyan: "\u001B[36m";
|
|
38
|
+
readonly white: "\u001B[37m";
|
|
39
|
+
readonly default: "\u001B[39m";
|
|
40
|
+
readonly brightBlack: "\u001B[90m";
|
|
41
|
+
readonly brightRed: "\u001B[91m";
|
|
42
|
+
readonly brightGreen: "\u001B[92m";
|
|
43
|
+
readonly brightYellow: "\u001B[93m";
|
|
44
|
+
readonly brightBlue: "\u001B[94m";
|
|
45
|
+
readonly brightMagenta: "\u001B[95m";
|
|
46
|
+
readonly brightCyan: "\u001B[96m";
|
|
47
|
+
readonly brightWhite: "\u001B[97m";
|
|
48
|
+
readonly bgBlack: "\u001B[40m";
|
|
49
|
+
readonly bgRed: "\u001B[41m";
|
|
50
|
+
readonly bgGreen: "\u001B[42m";
|
|
51
|
+
readonly bgYellow: "\u001B[43m";
|
|
52
|
+
readonly bgBlue: "\u001B[44m";
|
|
53
|
+
readonly bgMagenta: "\u001B[45m";
|
|
54
|
+
readonly bgCyan: "\u001B[46m";
|
|
55
|
+
readonly bgWhite: "\u001B[47m";
|
|
56
|
+
readonly bgDefault: "\u001B[49m";
|
|
57
|
+
readonly bgBrightBlack: "\u001B[100m";
|
|
58
|
+
readonly bgBrightRed: "\u001B[101m";
|
|
59
|
+
readonly bgBrightGreen: "\u001B[102m";
|
|
60
|
+
readonly bgBrightYellow: "\u001B[103m";
|
|
61
|
+
readonly bgBrightBlue: "\u001B[104m";
|
|
62
|
+
readonly bgBrightMagenta: "\u001B[105m";
|
|
63
|
+
readonly bgBrightCyan: "\u001B[106m";
|
|
64
|
+
readonly bgBrightWhite: "\u001B[107m";
|
|
65
|
+
readonly cursorUp: (n?: number) => string;
|
|
66
|
+
readonly cursorDown: (n?: number) => string;
|
|
67
|
+
readonly cursorForward: (n?: number) => string;
|
|
68
|
+
readonly cursorBack: (n?: number) => string;
|
|
69
|
+
readonly cursorPosition: (row: number, col: number) => string;
|
|
70
|
+
readonly cursorHome: "\u001B[H";
|
|
71
|
+
readonly cursorSave: "\u001B[s";
|
|
72
|
+
readonly cursorRestore: "\u001B[u";
|
|
73
|
+
readonly cursorHide: "\u001B[?25l";
|
|
74
|
+
readonly cursorShow: "\u001B[?25h";
|
|
75
|
+
readonly eraseScreen: "\u001B[2J";
|
|
76
|
+
readonly eraseScreenEnd: "\u001B[0J";
|
|
77
|
+
readonly eraseScreenStart: "\u001B[1J";
|
|
78
|
+
readonly eraseLine: "\u001B[2K";
|
|
79
|
+
readonly eraseLineEnd: "\u001B[0K";
|
|
80
|
+
readonly eraseLineStart: "\u001B[1K";
|
|
81
|
+
readonly fg256: (code: number) => string;
|
|
82
|
+
readonly bg256: (code: number) => string;
|
|
83
|
+
readonly fgRgb: (r: number, g: number, b: number) => string;
|
|
84
|
+
readonly bgRgb: (r: number, g: number, b: number) => string;
|
|
85
|
+
};
|
|
86
|
+
/**
|
|
87
|
+
* Style definition
|
|
88
|
+
*/
|
|
89
|
+
export interface ANSIStyle {
|
|
90
|
+
fg?: keyof typeof FG_COLORS | string;
|
|
91
|
+
bg?: keyof typeof BG_COLORS | string;
|
|
92
|
+
bold?: boolean;
|
|
93
|
+
dim?: boolean;
|
|
94
|
+
italic?: boolean;
|
|
95
|
+
underline?: boolean;
|
|
96
|
+
strikethrough?: boolean;
|
|
97
|
+
inverse?: boolean;
|
|
98
|
+
}
|
|
99
|
+
declare const FG_COLORS: Record<string, string>;
|
|
100
|
+
declare const BG_COLORS: Record<string, string>;
|
|
101
|
+
/**
|
|
102
|
+
* Theme definition
|
|
103
|
+
*/
|
|
104
|
+
export interface Theme {
|
|
105
|
+
name: string;
|
|
106
|
+
heading1: ANSIStyle;
|
|
107
|
+
heading2: ANSIStyle;
|
|
108
|
+
heading3: ANSIStyle;
|
|
109
|
+
heading4: ANSIStyle;
|
|
110
|
+
heading5: ANSIStyle;
|
|
111
|
+
heading6: ANSIStyle;
|
|
112
|
+
paragraph: ANSIStyle;
|
|
113
|
+
strong: ANSIStyle;
|
|
114
|
+
em: ANSIStyle;
|
|
115
|
+
code: ANSIStyle;
|
|
116
|
+
codeBlock: ANSIStyle;
|
|
117
|
+
codeBlockBorder: ANSIStyle;
|
|
118
|
+
codeBlockLang: ANSIStyle;
|
|
119
|
+
blockquote: ANSIStyle;
|
|
120
|
+
blockquoteBorder: ANSIStyle;
|
|
121
|
+
link: ANSIStyle;
|
|
122
|
+
image: ANSIStyle;
|
|
123
|
+
list: ANSIStyle;
|
|
124
|
+
listBullet: ANSIStyle;
|
|
125
|
+
task: ANSIStyle;
|
|
126
|
+
taskChecked: ANSIStyle;
|
|
127
|
+
taskUnchecked: ANSIStyle;
|
|
128
|
+
table: ANSIStyle;
|
|
129
|
+
tableHeader: ANSIStyle;
|
|
130
|
+
tableBorder: ANSIStyle;
|
|
131
|
+
hr: ANSIStyle;
|
|
132
|
+
del: ANSIStyle;
|
|
133
|
+
mathInline: ANSIStyle;
|
|
134
|
+
mathBlock: ANSIStyle;
|
|
135
|
+
thinking: ANSIStyle;
|
|
136
|
+
thinkingBorder: ANSIStyle;
|
|
137
|
+
mermaid: ANSIStyle;
|
|
138
|
+
incomplete: ANSIStyle;
|
|
139
|
+
}
|
|
140
|
+
/**
|
|
141
|
+
* Default dark theme
|
|
142
|
+
*/
|
|
143
|
+
export declare const darkTheme: Theme;
|
|
144
|
+
/**
|
|
145
|
+
* Light theme
|
|
146
|
+
*/
|
|
147
|
+
export declare const lightTheme: Theme;
|
|
148
|
+
/**
|
|
149
|
+
* Renderer options
|
|
150
|
+
*/
|
|
151
|
+
export interface RendererOptions {
|
|
152
|
+
/** Theme to use */
|
|
153
|
+
theme?: Theme | 'dark' | 'light';
|
|
154
|
+
/** Maximum width for wrapping */
|
|
155
|
+
maxWidth?: number;
|
|
156
|
+
/** Show line numbers in code blocks */
|
|
157
|
+
lineNumbers?: boolean;
|
|
158
|
+
/** Custom code highlighter */
|
|
159
|
+
highlighter?: (code: string, lang: string) => string;
|
|
160
|
+
/** Custom math renderer */
|
|
161
|
+
mathRenderer?: (math: string, block: boolean) => string;
|
|
162
|
+
/** Custom mermaid renderer */
|
|
163
|
+
mermaidRenderer?: (code: string) => string | Promise<string>;
|
|
164
|
+
/** Word wrap long lines */
|
|
165
|
+
wordWrap?: boolean;
|
|
166
|
+
/** Indent size for nested elements */
|
|
167
|
+
indentSize?: number;
|
|
168
|
+
}
|
|
169
|
+
/**
|
|
170
|
+
* Apply style to text
|
|
171
|
+
*/
|
|
172
|
+
export declare function applyStyle(text: string, style: ANSIStyle): string;
|
|
173
|
+
/**
|
|
174
|
+
* Strip ANSI codes from text
|
|
175
|
+
*/
|
|
176
|
+
export declare function stripAnsi(text: string): string;
|
|
177
|
+
/**
|
|
178
|
+
* Get visible length (excluding ANSI codes)
|
|
179
|
+
*/
|
|
180
|
+
export declare function visibleLength(text: string): number;
|
|
181
|
+
/**
|
|
182
|
+
* Word wrap text
|
|
183
|
+
*/
|
|
184
|
+
export declare function wordWrap(text: string, maxWidth: number): string[];
|
|
185
|
+
/**
|
|
186
|
+
* Zero-dependency ANSI renderer
|
|
187
|
+
*/
|
|
188
|
+
export declare class ANSIRenderer {
|
|
189
|
+
private options;
|
|
190
|
+
private theme;
|
|
191
|
+
constructor(options?: RendererOptions);
|
|
192
|
+
/**
|
|
193
|
+
* Render tokens to ANSI string
|
|
194
|
+
*/
|
|
195
|
+
render(tokens: Token[]): string;
|
|
196
|
+
/**
|
|
197
|
+
* Render tokens to output stream
|
|
198
|
+
*/
|
|
199
|
+
renderToStream(tokens: Token[], stream: NodeJS.WritableStream): void;
|
|
200
|
+
/**
|
|
201
|
+
* Render a single token
|
|
202
|
+
*/
|
|
203
|
+
private renderToken;
|
|
204
|
+
/**
|
|
205
|
+
* Render heading
|
|
206
|
+
*/
|
|
207
|
+
private renderHeading;
|
|
208
|
+
/**
|
|
209
|
+
* Render paragraph
|
|
210
|
+
*/
|
|
211
|
+
private renderParagraph;
|
|
212
|
+
/**
|
|
213
|
+
* Render text
|
|
214
|
+
*/
|
|
215
|
+
private renderText;
|
|
216
|
+
/**
|
|
217
|
+
* Render code block
|
|
218
|
+
*/
|
|
219
|
+
private renderCodeBlock;
|
|
220
|
+
/**
|
|
221
|
+
* Render blockquote
|
|
222
|
+
*/
|
|
223
|
+
private renderBlockquote;
|
|
224
|
+
/**
|
|
225
|
+
* Render list
|
|
226
|
+
*/
|
|
227
|
+
private renderList;
|
|
228
|
+
/**
|
|
229
|
+
* Render list item
|
|
230
|
+
*/
|
|
231
|
+
private renderListItem;
|
|
232
|
+
/**
|
|
233
|
+
* Render task list item
|
|
234
|
+
*/
|
|
235
|
+
private renderTask;
|
|
236
|
+
/**
|
|
237
|
+
* Render link
|
|
238
|
+
*/
|
|
239
|
+
private renderLink;
|
|
240
|
+
/**
|
|
241
|
+
* Render image
|
|
242
|
+
*/
|
|
243
|
+
private renderImage;
|
|
244
|
+
/**
|
|
245
|
+
* Render table
|
|
246
|
+
*/
|
|
247
|
+
private renderTable;
|
|
248
|
+
/**
|
|
249
|
+
* Pad cell content for alignment
|
|
250
|
+
*/
|
|
251
|
+
private padCell;
|
|
252
|
+
/**
|
|
253
|
+
* Render horizontal rule
|
|
254
|
+
*/
|
|
255
|
+
private renderHorizontalRule;
|
|
256
|
+
/**
|
|
257
|
+
* Render math block
|
|
258
|
+
*/
|
|
259
|
+
private renderMathBlock;
|
|
260
|
+
/**
|
|
261
|
+
* Render mermaid diagram
|
|
262
|
+
*/
|
|
263
|
+
private renderMermaid;
|
|
264
|
+
/**
|
|
265
|
+
* Render thinking block
|
|
266
|
+
*/
|
|
267
|
+
private renderThinking;
|
|
268
|
+
/**
|
|
269
|
+
* Default code highlighter (basic keyword highlighting)
|
|
270
|
+
*/
|
|
271
|
+
private defaultHighlighter;
|
|
272
|
+
/**
|
|
273
|
+
* Default math renderer (passthrough)
|
|
274
|
+
*/
|
|
275
|
+
private defaultMathRenderer;
|
|
276
|
+
/**
|
|
277
|
+
* Default mermaid renderer (ASCII representation)
|
|
278
|
+
*/
|
|
279
|
+
private defaultMermaidRenderer;
|
|
280
|
+
/**
|
|
281
|
+
* Clear render cache
|
|
282
|
+
*/
|
|
283
|
+
static clearCache(): void;
|
|
284
|
+
}
|
|
285
|
+
export default ANSIRenderer;
|
|
286
|
+
//# sourceMappingURL=renderer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"renderer.d.ts","sourceRoot":"","sources":["../../src/core/renderer.ts"],"names":[],"mappings":"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"}
|