tg-claude 0.3.2 → 0.3.4
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/package.json +2 -3
- package/dist/claude/ClaudeProcess.d.ts +0 -83
- package/dist/claude/ClaudeProcess.d.ts.map +0 -1
- package/dist/claude/ClaudeProcess.js +0 -283
- package/dist/claude/ClaudeProcess.js.map +0 -1
- package/dist/claude/EventAdapter.d.ts +0 -45
- package/dist/claude/EventAdapter.d.ts.map +0 -1
- package/dist/claude/EventAdapter.js +0 -138
- package/dist/claude/EventAdapter.js.map +0 -1
- package/dist/claude/index.d.ts +0 -10
- package/dist/claude/index.d.ts.map +0 -1
- package/dist/claude/index.js +0 -9
- package/dist/claude/index.js.map +0 -1
- package/dist/claude/types.d.ts +0 -244
- package/dist/claude/types.d.ts.map +0 -1
- package/dist/claude/types.js +0 -8
- package/dist/claude/types.js.map +0 -1
- package/dist/env.d.ts +0 -21
- package/dist/env.d.ts.map +0 -1
- package/dist/env.js +0 -49
- package/dist/env.js.map +0 -1
- package/dist/index.d.ts +0 -2
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js +0 -433
- package/dist/index.js.map +0 -1
- package/dist/parser/AnsiStripper.d.ts +0 -54
- package/dist/parser/AnsiStripper.d.ts.map +0 -1
- package/dist/parser/AnsiStripper.js +0 -115
- package/dist/parser/AnsiStripper.js.map +0 -1
- package/dist/parser/OptionExtractor.d.ts +0 -31
- package/dist/parser/OptionExtractor.d.ts.map +0 -1
- package/dist/parser/OptionExtractor.js +0 -91
- package/dist/parser/OptionExtractor.js.map +0 -1
- package/dist/parser/OutputParser.d.ts +0 -121
- package/dist/parser/OutputParser.d.ts.map +0 -1
- package/dist/parser/OutputParser.js +0 -306
- package/dist/parser/OutputParser.js.map +0 -1
- package/dist/parser/PromptDetector.d.ts +0 -20
- package/dist/parser/PromptDetector.d.ts.map +0 -1
- package/dist/parser/PromptDetector.js +0 -68
- package/dist/parser/PromptDetector.js.map +0 -1
- package/dist/parser/index.d.ts +0 -7
- package/dist/parser/index.d.ts.map +0 -1
- package/dist/parser/index.js +0 -5
- package/dist/parser/index.js.map +0 -1
- package/dist/parser/types.d.ts +0 -73
- package/dist/parser/types.d.ts.map +0 -1
- package/dist/parser/types.js +0 -2
- package/dist/parser/types.js.map +0 -1
- package/dist/pty/OutputBuffer.d.ts +0 -39
- package/dist/pty/OutputBuffer.d.ts.map +0 -1
- package/dist/pty/OutputBuffer.js +0 -55
- package/dist/pty/OutputBuffer.js.map +0 -1
- package/dist/pty/PtyProcess.d.ts +0 -47
- package/dist/pty/PtyProcess.d.ts.map +0 -1
- package/dist/pty/PtyProcess.js +0 -94
- package/dist/pty/PtyProcess.js.map +0 -1
- package/dist/pty/PtyService.d.ts +0 -55
- package/dist/pty/PtyService.d.ts.map +0 -1
- package/dist/pty/PtyService.js +0 -115
- package/dist/pty/PtyService.js.map +0 -1
- package/dist/pty/index.d.ts +0 -5
- package/dist/pty/index.d.ts.map +0 -1
- package/dist/pty/index.js +0 -4
- package/dist/pty/index.js.map +0 -1
- package/dist/pty/types.d.ts +0 -36
- package/dist/pty/types.d.ts.map +0 -1
- package/dist/pty/types.js +0 -2
- package/dist/pty/types.js.map +0 -1
- package/dist/router/BoundedQueue.d.ts +0 -57
- package/dist/router/BoundedQueue.d.ts.map +0 -1
- package/dist/router/BoundedQueue.js +0 -86
- package/dist/router/BoundedQueue.js.map +0 -1
- package/dist/router/EventRouter.d.ts +0 -103
- package/dist/router/EventRouter.d.ts.map +0 -1
- package/dist/router/EventRouter.js +0 -169
- package/dist/router/EventRouter.js.map +0 -1
- package/dist/router/index.d.ts +0 -13
- package/dist/router/index.d.ts.map +0 -1
- package/dist/router/index.js +0 -12
- package/dist/router/index.js.map +0 -1
- package/dist/router/types.d.ts +0 -104
- package/dist/router/types.d.ts.map +0 -1
- package/dist/router/types.js +0 -6
- package/dist/router/types.js.map +0 -1
- package/dist/setup/envWriter.d.ts +0 -22
- package/dist/setup/envWriter.d.ts.map +0 -1
- package/dist/setup/envWriter.js +0 -68
- package/dist/setup/envWriter.js.map +0 -1
- package/dist/setup/index.d.ts +0 -4
- package/dist/setup/index.d.ts.map +0 -1
- package/dist/setup/index.js +0 -4
- package/dist/setup/index.js.map +0 -1
- package/dist/setup/validators.d.ts +0 -22
- package/dist/setup/validators.d.ts.map +0 -1
- package/dist/setup/validators.js +0 -47
- package/dist/setup/validators.js.map +0 -1
- package/dist/setup/wizard.d.ts +0 -7
- package/dist/setup/wizard.d.ts.map +0 -1
- package/dist/setup/wizard.js +0 -56
- package/dist/setup/wizard.js.map +0 -1
- package/dist/telegram/TelegramBot.d.ts +0 -163
- package/dist/telegram/TelegramBot.d.ts.map +0 -1
- package/dist/telegram/TelegramBot.js +0 -634
- package/dist/telegram/TelegramBot.js.map +0 -1
- package/dist/telegram/index.d.ts +0 -7
- package/dist/telegram/index.d.ts.map +0 -1
- package/dist/telegram/index.js +0 -6
- package/dist/telegram/index.js.map +0 -1
- package/dist/telegram/types.d.ts +0 -30
- package/dist/telegram/types.d.ts.map +0 -1
- package/dist/telegram/types.js +0 -5
- package/dist/telegram/types.js.map +0 -1
- package/dist/terminal/TerminalInterface.d.ts +0 -61
- package/dist/terminal/TerminalInterface.d.ts.map +0 -1
- package/dist/terminal/TerminalInterface.js +0 -218
- package/dist/terminal/TerminalInterface.js.map +0 -1
- package/dist/terminal/index.d.ts +0 -3
- package/dist/terminal/index.d.ts.map +0 -1
- package/dist/terminal/index.js +0 -2
- package/dist/terminal/index.js.map +0 -1
- package/dist/terminal/types.d.ts +0 -17
- package/dist/terminal/types.d.ts.map +0 -1
- package/dist/terminal/types.js +0 -2
- package/dist/terminal/types.js.map +0 -1
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Extracts numbered options from Claude Code prompt output.
|
|
3
|
-
* Handles various formats: "1. Text", "> 1. Text", "❯ 1. Text"
|
|
4
|
-
* Also handles TUI-style output where options may not be on separate lines.
|
|
5
|
-
*/
|
|
6
|
-
export class OptionExtractor {
|
|
7
|
-
// Pattern to match option lines with optional cursor marker
|
|
8
|
-
// Groups: (1) cursor marker, (2) option number, (3) option text
|
|
9
|
-
static OPTION_PATTERN = /^\s*([❯>]?)\s*(\d+)\.\s+(.+)$/;
|
|
10
|
-
// Global pattern for extracting options from anywhere in text
|
|
11
|
-
// Matches: optional cursor (❯ or >) followed by number, dot, and text
|
|
12
|
-
// The text ends at the next option, end of string, or common delimiters
|
|
13
|
-
static GLOBAL_OPTION_PATTERN = /([❯>]?)\s*(\d+)\.\s+([A-Za-z][^❯>\d]*?)(?=\s*[❯>]?\s*\d+\.|$|\s{3,}|Enter|Esc|↵)/g;
|
|
14
|
-
/**
|
|
15
|
-
* Extract all options from text.
|
|
16
|
-
* First tries line-by-line extraction, then falls back to global pattern.
|
|
17
|
-
* @param text - Cleaned text (ANSI stripped)
|
|
18
|
-
* @returns Array of PromptOption, empty if no options found
|
|
19
|
-
*/
|
|
20
|
-
extract(text) {
|
|
21
|
-
// First try line-by-line extraction
|
|
22
|
-
const lineOptions = this.extractFromLines(text);
|
|
23
|
-
if (lineOptions.length > 0) {
|
|
24
|
-
return lineOptions;
|
|
25
|
-
}
|
|
26
|
-
// Fall back to global extraction for TUI-style output
|
|
27
|
-
return this.extractGlobal(text);
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Extract options line by line (original approach).
|
|
31
|
-
*/
|
|
32
|
-
extractFromLines(text) {
|
|
33
|
-
const options = [];
|
|
34
|
-
const lines = text.split('\n');
|
|
35
|
-
for (const line of lines) {
|
|
36
|
-
const match = OptionExtractor.OPTION_PATTERN.exec(line);
|
|
37
|
-
if (match) {
|
|
38
|
-
const [, cursor, indexStr, optionText] = match;
|
|
39
|
-
options.push({
|
|
40
|
-
index: parseInt(indexStr, 10),
|
|
41
|
-
text: optionText.trim(),
|
|
42
|
-
selected: cursor === '❯' || cursor === '>',
|
|
43
|
-
});
|
|
44
|
-
}
|
|
45
|
-
}
|
|
46
|
-
return options;
|
|
47
|
-
}
|
|
48
|
-
/**
|
|
49
|
-
* Extract options using global regex (for TUI output without proper line breaks).
|
|
50
|
-
*/
|
|
51
|
-
extractGlobal(text) {
|
|
52
|
-
const options = [];
|
|
53
|
-
const seen = new Set();
|
|
54
|
-
// Reset lastIndex for global regex
|
|
55
|
-
OptionExtractor.GLOBAL_OPTION_PATTERN.lastIndex = 0;
|
|
56
|
-
let match;
|
|
57
|
-
while ((match = OptionExtractor.GLOBAL_OPTION_PATTERN.exec(text)) !== null) {
|
|
58
|
-
const [, cursor, indexStr, optionText] = match;
|
|
59
|
-
const index = parseInt(indexStr, 10);
|
|
60
|
-
// Skip duplicates (same option might appear multiple times in TUI refresh)
|
|
61
|
-
if (seen.has(index))
|
|
62
|
-
continue;
|
|
63
|
-
seen.add(index);
|
|
64
|
-
const trimmedText = optionText.trim();
|
|
65
|
-
// Skip if text is too short or looks like garbage
|
|
66
|
-
if (trimmedText.length < 2)
|
|
67
|
-
continue;
|
|
68
|
-
options.push({
|
|
69
|
-
index,
|
|
70
|
-
text: trimmedText,
|
|
71
|
-
selected: cursor === '❯' || cursor === '>',
|
|
72
|
-
});
|
|
73
|
-
}
|
|
74
|
-
// Sort by index
|
|
75
|
-
return options.sort((a, b) => a.index - b.index);
|
|
76
|
-
}
|
|
77
|
-
/**
|
|
78
|
-
* Check if text contains any extractable options.
|
|
79
|
-
* @param text - Cleaned text (ANSI stripped)
|
|
80
|
-
*/
|
|
81
|
-
hasOptions(text) {
|
|
82
|
-
// Check line by line first
|
|
83
|
-
const hasLineOptions = text.split('\n').some(line => OptionExtractor.OPTION_PATTERN.test(line));
|
|
84
|
-
if (hasLineOptions)
|
|
85
|
-
return true;
|
|
86
|
-
// Fall back to global check
|
|
87
|
-
OptionExtractor.GLOBAL_OPTION_PATTERN.lastIndex = 0;
|
|
88
|
-
return OptionExtractor.GLOBAL_OPTION_PATTERN.test(text);
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=OptionExtractor.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OptionExtractor.js","sourceRoot":"","sources":["../../src/parser/OptionExtractor.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,121 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'node:events';
|
|
2
|
-
import type { ClaudeStatus, PromptEventHandler, CompletionEventHandler } from './types.js';
|
|
3
|
-
export interface OutputParserOptions {
|
|
4
|
-
/** Idle timeout in ms before confirming blocking state (default: 500) */
|
|
5
|
-
idleTimeoutMs?: number;
|
|
6
|
-
/** Completion timeout in ms (default: 1000, longer than idle for fewer false positives) */
|
|
7
|
-
completionTimeoutMs?: number;
|
|
8
|
-
/** Number of recent chunks to analyze for prompts (default: 50) */
|
|
9
|
-
recentChunksCount?: number;
|
|
10
|
-
/** Max raw context chars to include in event (default: 2000) */
|
|
11
|
-
maxRawContext?: number;
|
|
12
|
-
/** Enable debug logging (default: false) */
|
|
13
|
-
debug?: boolean;
|
|
14
|
-
}
|
|
15
|
-
/**
|
|
16
|
-
* Orchestrates the parsing pipeline: raw -> stripped -> analyzed -> events.
|
|
17
|
-
* Uses idle timeout to confirm blocking state before emitting prompt events.
|
|
18
|
-
*
|
|
19
|
-
* @emits 'prompt' - PromptEvent when blocking prompt detected and confirmed
|
|
20
|
-
*/
|
|
21
|
-
export declare class OutputParser extends EventEmitter {
|
|
22
|
-
private readonly stripper;
|
|
23
|
-
private readonly detector;
|
|
24
|
-
private readonly extractor;
|
|
25
|
-
private readonly options;
|
|
26
|
-
private buffer;
|
|
27
|
-
private idleTimer;
|
|
28
|
-
private completionTimer;
|
|
29
|
-
private pendingPrompt;
|
|
30
|
-
private lastEmittedHash;
|
|
31
|
-
private status;
|
|
32
|
-
private workStartTime;
|
|
33
|
-
/** Prevents re-completion until resetForNewWork() is called */
|
|
34
|
-
private completionFired;
|
|
35
|
-
constructor(options?: OutputParserOptions);
|
|
36
|
-
private log;
|
|
37
|
-
/**
|
|
38
|
-
* Process incoming data from PTY.
|
|
39
|
-
* Call this from PtyProcess onData handler.
|
|
40
|
-
* @param raw - Raw string from PTY
|
|
41
|
-
*/
|
|
42
|
-
onData(raw: string): void;
|
|
43
|
-
/**
|
|
44
|
-
* Get recent cleaned text for analysis.
|
|
45
|
-
*/
|
|
46
|
-
private getRecentText;
|
|
47
|
-
/**
|
|
48
|
-
* Get recent raw text for context.
|
|
49
|
-
*/
|
|
50
|
-
private getRecentRaw;
|
|
51
|
-
/**
|
|
52
|
-
* Check if recent output matches prompt patterns.
|
|
53
|
-
* Does NOT emit yet - waits for idle confirmation.
|
|
54
|
-
*/
|
|
55
|
-
private checkForPrompt;
|
|
56
|
-
/**
|
|
57
|
-
* Reset the idle timer. Called on every data chunk.
|
|
58
|
-
*/
|
|
59
|
-
private resetIdleTimer;
|
|
60
|
-
/**
|
|
61
|
-
* Reset the completion timer. Called on every data chunk.
|
|
62
|
-
* Separate from idle timer - completion fires later to confirm truly idle.
|
|
63
|
-
*/
|
|
64
|
-
private resetCompletionTimer;
|
|
65
|
-
/**
|
|
66
|
-
* Simple hash of prompt content for deduplication.
|
|
67
|
-
*/
|
|
68
|
-
private hashPrompt;
|
|
69
|
-
/**
|
|
70
|
-
* Called when output has been idle for the configured timeout.
|
|
71
|
-
* If there's a pending prompt, emit it now (unless duplicate).
|
|
72
|
-
*/
|
|
73
|
-
private onIdle;
|
|
74
|
-
/**
|
|
75
|
-
* Called when completion timeout fires.
|
|
76
|
-
* Only emits completion if we were actively working and no pending prompt.
|
|
77
|
-
*/
|
|
78
|
-
private onCompletionTimeout;
|
|
79
|
-
/**
|
|
80
|
-
* Check if a line is TUI decoration (box-drawing, status bar, etc.)
|
|
81
|
-
*/
|
|
82
|
-
private isTuiDecoration;
|
|
83
|
-
/**
|
|
84
|
-
* Extract summary from recent output (last meaningful lines).
|
|
85
|
-
*/
|
|
86
|
-
private extractSummary;
|
|
87
|
-
/**
|
|
88
|
-
* Register a handler for prompt events.
|
|
89
|
-
* @param handler - Function to call when prompt detected
|
|
90
|
-
*/
|
|
91
|
-
onPrompt(handler: PromptEventHandler): void;
|
|
92
|
-
/**
|
|
93
|
-
* Register a handler for completion events.
|
|
94
|
-
* @param handler - Function to call when Claude finishes working
|
|
95
|
-
*/
|
|
96
|
-
onCompletion(handler: CompletionEventHandler): void;
|
|
97
|
-
/**
|
|
98
|
-
* Clear the parser buffer and cancel any pending prompt.
|
|
99
|
-
* Call this when session ends or resets.
|
|
100
|
-
*/
|
|
101
|
-
reset(): void;
|
|
102
|
-
/**
|
|
103
|
-
* Reset parser state after user responds to prompt.
|
|
104
|
-
* Call this after writing response to PTY so next work cycle is tracked fresh.
|
|
105
|
-
*/
|
|
106
|
-
resetForNewWork(): void;
|
|
107
|
-
/**
|
|
108
|
-
* Clear the deduplication hash to allow re-detecting the same prompt.
|
|
109
|
-
* Useful when user has responded and new prompts should be detected.
|
|
110
|
-
*/
|
|
111
|
-
clearDeduplication(): void;
|
|
112
|
-
/**
|
|
113
|
-
* Get the current buffer length (for debugging).
|
|
114
|
-
*/
|
|
115
|
-
get bufferLength(): number;
|
|
116
|
-
/**
|
|
117
|
-
* Get the current Claude status.
|
|
118
|
-
*/
|
|
119
|
-
get currentStatus(): ClaudeStatus;
|
|
120
|
-
}
|
|
121
|
-
//# sourceMappingURL=OutputParser.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OutputParser.d.ts","sourceRoot":"","sources":["../../src/parser/OutputParser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,KAAK,EAA6C,YAAY,EAAE,kBAAkB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAKtI,MAAM,WAAW,mBAAmB;IAClC,yEAAyE;IACzE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,2FAA2F;IAC3F,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,mEAAmE;IACnE,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,gEAAgE;IAChE,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,4CAA4C;IAC5C,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,YAAY;IAC5C,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAe;IACxC,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAiB;IAC1C,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAkB;IAC5C,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAgC;IAExD,OAAO,CAAC,MAAM,CAAqB;IACnC,OAAO,CAAC,SAAS,CAA+B;IAChD,OAAO,CAAC,eAAe,CAA+B;IACtD,OAAO,CAAC,aAAa,CAA+C;IACpE,OAAO,CAAC,eAAe,CAAuB;IAC9C,OAAO,CAAC,MAAM,CAAwB;IACtC,OAAO,CAAC,aAAa,CAAuB;IAC5C,+DAA+D;IAC/D,OAAO,CAAC,eAAe,CAAS;gBAEpB,OAAO,GAAE,mBAAwB;IAc7C,OAAO,CAAC,GAAG;IAMX;;;;OAIG;IACH,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,IAAI;IAsBzB;;OAEG;IACH,OAAO,CAAC,aAAa;IAKrB;;OAEG;IACH,OAAO,CAAC,YAAY;IAUpB;;;OAGG;IACH,OAAO,CAAC,cAAc;IAqBtB;;OAEG;IACH,OAAO,CAAC,cAAc;IAOtB;;;OAGG;IACH,OAAO,CAAC,oBAAoB;IAO5B;;OAEG;IACH,OAAO,CAAC,UAAU;IAIlB;;;OAGG;IACH,OAAO,CAAC,MAAM;IAiCd;;;OAGG;IACH,OAAO,CAAC,mBAAmB;IA+B3B;;OAEG;IACH,OAAO,CAAC,eAAe;IAmCvB;;OAEG;IACH,OAAO,CAAC,cAAc;IAatB;;;OAGG;IACH,QAAQ,CAAC,OAAO,EAAE,kBAAkB,GAAG,IAAI;IAI3C;;;OAGG;IACH,YAAY,CAAC,OAAO,EAAE,sBAAsB,GAAG,IAAI;IAInD;;;OAGG;IACH,KAAK,IAAI,IAAI;IAiBb;;;OAGG;IACH,eAAe,IAAI,IAAI;IAOvB;;;OAGG;IACH,kBAAkB,IAAI,IAAI;IAI1B;;OAEG;IACH,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED;;OAEG;IACH,IAAI,aAAa,IAAI,YAAY,CAEhC;CACF"}
|
|
@@ -1,306 +0,0 @@
|
|
|
1
|
-
import { EventEmitter } from 'node:events';
|
|
2
|
-
import { AnsiStripper } from './AnsiStripper.js';
|
|
3
|
-
import { PromptDetector } from './PromptDetector.js';
|
|
4
|
-
import { OptionExtractor } from './OptionExtractor.js';
|
|
5
|
-
/**
|
|
6
|
-
* Orchestrates the parsing pipeline: raw -> stripped -> analyzed -> events.
|
|
7
|
-
* Uses idle timeout to confirm blocking state before emitting prompt events.
|
|
8
|
-
*
|
|
9
|
-
* @emits 'prompt' - PromptEvent when blocking prompt detected and confirmed
|
|
10
|
-
*/
|
|
11
|
-
export class OutputParser extends EventEmitter {
|
|
12
|
-
stripper;
|
|
13
|
-
detector;
|
|
14
|
-
extractor;
|
|
15
|
-
options;
|
|
16
|
-
buffer = [];
|
|
17
|
-
idleTimer = null;
|
|
18
|
-
completionTimer = null;
|
|
19
|
-
pendingPrompt = null;
|
|
20
|
-
lastEmittedHash = null;
|
|
21
|
-
status = 'idle';
|
|
22
|
-
workStartTime = null;
|
|
23
|
-
/** Prevents re-completion until resetForNewWork() is called */
|
|
24
|
-
completionFired = false;
|
|
25
|
-
constructor(options = {}) {
|
|
26
|
-
super();
|
|
27
|
-
this.stripper = new AnsiStripper();
|
|
28
|
-
this.detector = new PromptDetector();
|
|
29
|
-
this.extractor = new OptionExtractor();
|
|
30
|
-
this.options = {
|
|
31
|
-
idleTimeoutMs: options.idleTimeoutMs ?? 500,
|
|
32
|
-
completionTimeoutMs: options.completionTimeoutMs ?? 1000,
|
|
33
|
-
recentChunksCount: options.recentChunksCount ?? 50,
|
|
34
|
-
maxRawContext: options.maxRawContext ?? 2000,
|
|
35
|
-
debug: options.debug ?? false,
|
|
36
|
-
};
|
|
37
|
-
}
|
|
38
|
-
log(...args) {
|
|
39
|
-
if (this.options.debug) {
|
|
40
|
-
console.log('[PARSER DEBUG]', ...args);
|
|
41
|
-
}
|
|
42
|
-
}
|
|
43
|
-
/**
|
|
44
|
-
* Process incoming data from PTY.
|
|
45
|
-
* Call this from PtyProcess onData handler.
|
|
46
|
-
* @param raw - Raw string from PTY
|
|
47
|
-
*/
|
|
48
|
-
onData(raw) {
|
|
49
|
-
// Transition to working on any output, but NOT if we already completed
|
|
50
|
-
// (prevents re-completion from trivial terminal output while idle)
|
|
51
|
-
if (this.status !== 'working' && !this.completionFired) {
|
|
52
|
-
this.status = 'working';
|
|
53
|
-
this.workStartTime = Date.now();
|
|
54
|
-
this.log('Status -> working');
|
|
55
|
-
}
|
|
56
|
-
const chunk = this.stripper.parse(raw);
|
|
57
|
-
this.buffer.push(chunk);
|
|
58
|
-
// Trim buffer to prevent unbounded growth
|
|
59
|
-
if (this.buffer.length > this.options.recentChunksCount * 2) {
|
|
60
|
-
this.buffer = this.buffer.slice(-this.options.recentChunksCount);
|
|
61
|
-
}
|
|
62
|
-
this.resetIdleTimer();
|
|
63
|
-
this.resetCompletionTimer();
|
|
64
|
-
this.checkForPrompt();
|
|
65
|
-
}
|
|
66
|
-
/**
|
|
67
|
-
* Get recent cleaned text for analysis.
|
|
68
|
-
*/
|
|
69
|
-
getRecentText() {
|
|
70
|
-
const recentChunks = this.buffer.slice(-this.options.recentChunksCount);
|
|
71
|
-
return recentChunks.map(c => c.text).join('');
|
|
72
|
-
}
|
|
73
|
-
/**
|
|
74
|
-
* Get recent raw text for context.
|
|
75
|
-
*/
|
|
76
|
-
getRecentRaw() {
|
|
77
|
-
const recentChunks = this.buffer.slice(-this.options.recentChunksCount);
|
|
78
|
-
const raw = recentChunks.map(c => c.raw).join('');
|
|
79
|
-
// Trim to max length
|
|
80
|
-
if (raw.length > this.options.maxRawContext) {
|
|
81
|
-
return raw.slice(-this.options.maxRawContext);
|
|
82
|
-
}
|
|
83
|
-
return raw;
|
|
84
|
-
}
|
|
85
|
-
/**
|
|
86
|
-
* Check if recent output matches prompt patterns.
|
|
87
|
-
* Does NOT emit yet - waits for idle confirmation.
|
|
88
|
-
*/
|
|
89
|
-
checkForPrompt() {
|
|
90
|
-
const recentText = this.getRecentText();
|
|
91
|
-
const hasPattern = this.detector.hasPromptPattern(recentText);
|
|
92
|
-
this.log(`checkForPrompt: hasPattern=${hasPattern}, textLength=${recentText.length}`);
|
|
93
|
-
if (this.options.debug && hasPattern) {
|
|
94
|
-
this.log('Pattern matched! Recent text (last 500 chars):', recentText.slice(-500));
|
|
95
|
-
}
|
|
96
|
-
if (hasPattern) {
|
|
97
|
-
// Store pending prompt - will emit on idle
|
|
98
|
-
this.pendingPrompt = {
|
|
99
|
-
type: 'blocking-prompt',
|
|
100
|
-
question: this.detector.extractQuestion(recentText),
|
|
101
|
-
options: this.extractor.extract(recentText),
|
|
102
|
-
rawContext: this.getRecentRaw(),
|
|
103
|
-
};
|
|
104
|
-
this.log('Pending prompt set:', this.pendingPrompt.question, 'options:', this.pendingPrompt.options.length);
|
|
105
|
-
}
|
|
106
|
-
}
|
|
107
|
-
/**
|
|
108
|
-
* Reset the idle timer. Called on every data chunk.
|
|
109
|
-
*/
|
|
110
|
-
resetIdleTimer() {
|
|
111
|
-
if (this.idleTimer) {
|
|
112
|
-
clearTimeout(this.idleTimer);
|
|
113
|
-
}
|
|
114
|
-
this.idleTimer = setTimeout(() => this.onIdle(), this.options.idleTimeoutMs);
|
|
115
|
-
}
|
|
116
|
-
/**
|
|
117
|
-
* Reset the completion timer. Called on every data chunk.
|
|
118
|
-
* Separate from idle timer - completion fires later to confirm truly idle.
|
|
119
|
-
*/
|
|
120
|
-
resetCompletionTimer() {
|
|
121
|
-
if (this.completionTimer) {
|
|
122
|
-
clearTimeout(this.completionTimer);
|
|
123
|
-
}
|
|
124
|
-
this.completionTimer = setTimeout(() => this.onCompletionTimeout(), this.options.completionTimeoutMs);
|
|
125
|
-
}
|
|
126
|
-
/**
|
|
127
|
-
* Simple hash of prompt content for deduplication.
|
|
128
|
-
*/
|
|
129
|
-
hashPrompt(prompt) {
|
|
130
|
-
return `${prompt.question}::${prompt.options.map(o => `${o.index}:${o.text}`).join('|')}`;
|
|
131
|
-
}
|
|
132
|
-
/**
|
|
133
|
-
* Called when output has been idle for the configured timeout.
|
|
134
|
-
* If there's a pending prompt, emit it now (unless duplicate).
|
|
135
|
-
*/
|
|
136
|
-
onIdle() {
|
|
137
|
-
this.idleTimer = null;
|
|
138
|
-
this.log('onIdle called, pendingPrompt:', this.pendingPrompt ? 'yes' : 'no');
|
|
139
|
-
if (this.pendingPrompt) {
|
|
140
|
-
const hash = this.hashPrompt(this.pendingPrompt);
|
|
141
|
-
// Skip if this is the same prompt we just emitted
|
|
142
|
-
if (hash === this.lastEmittedHash) {
|
|
143
|
-
this.log('Skipping duplicate prompt');
|
|
144
|
-
this.pendingPrompt = null;
|
|
145
|
-
return;
|
|
146
|
-
}
|
|
147
|
-
// Update status to blocking
|
|
148
|
-
this.status = 'blocking';
|
|
149
|
-
this.log('Status -> blocking');
|
|
150
|
-
const event = {
|
|
151
|
-
...this.pendingPrompt,
|
|
152
|
-
timestamp: Date.now(),
|
|
153
|
-
};
|
|
154
|
-
this.pendingPrompt = null;
|
|
155
|
-
this.lastEmittedHash = hash;
|
|
156
|
-
// Clear buffer after emission to prevent re-detection
|
|
157
|
-
this.buffer = [];
|
|
158
|
-
this.log('Emitting prompt event:', event.question);
|
|
159
|
-
this.emit('prompt', event);
|
|
160
|
-
}
|
|
161
|
-
}
|
|
162
|
-
/**
|
|
163
|
-
* Called when completion timeout fires.
|
|
164
|
-
* Only emits completion if we were actively working and no pending prompt.
|
|
165
|
-
*/
|
|
166
|
-
onCompletionTimeout() {
|
|
167
|
-
this.completionTimer = null;
|
|
168
|
-
// Only complete if we were actively working
|
|
169
|
-
if (this.status !== 'working') {
|
|
170
|
-
this.log(`Completion timeout ignored, status=${this.status}`);
|
|
171
|
-
return;
|
|
172
|
-
}
|
|
173
|
-
// If there's a pending prompt, don't complete (prompt handler will fire)
|
|
174
|
-
if (this.pendingPrompt) {
|
|
175
|
-
this.log('Completion timeout ignored, pending prompt');
|
|
176
|
-
return;
|
|
177
|
-
}
|
|
178
|
-
this.status = 'completed';
|
|
179
|
-
this.completionFired = true; // Prevent re-completion until explicit reset
|
|
180
|
-
this.log('Status -> completed (completion locked)');
|
|
181
|
-
const event = {
|
|
182
|
-
type: 'completion',
|
|
183
|
-
summary: this.extractSummary(),
|
|
184
|
-
duration: this.workStartTime ? Date.now() - this.workStartTime : undefined,
|
|
185
|
-
timestamp: Date.now(),
|
|
186
|
-
};
|
|
187
|
-
this.workStartTime = null;
|
|
188
|
-
this.log('Emitting completion event');
|
|
189
|
-
this.emit('completion', event);
|
|
190
|
-
}
|
|
191
|
-
/**
|
|
192
|
-
* Check if a line is TUI decoration (box-drawing, status bar, etc.)
|
|
193
|
-
*/
|
|
194
|
-
isTuiDecoration(line) {
|
|
195
|
-
// Box-drawing characters (used for borders)
|
|
196
|
-
const boxChars = /^[─│┌┐└┘├┤┬┴┼━┃┏┓┗┛┣┫┳┻╋═║╔╗╚╝╠╣╦╩╬\-_\s]+$/;
|
|
197
|
-
if (boxChars.test(line))
|
|
198
|
-
return true;
|
|
199
|
-
// Status bar: "N files +X -Y" (flexible whitespace)
|
|
200
|
-
if (/^\d+\s*files?\s*[+-]\d+\s*[+-]\d+/.test(line))
|
|
201
|
-
return true;
|
|
202
|
-
// Empty prompt marker
|
|
203
|
-
if (line === '❯' || line === '>' || line === '●' || line === '·')
|
|
204
|
-
return true;
|
|
205
|
-
// TUI status messages
|
|
206
|
-
const tuiPatterns = [
|
|
207
|
-
/esc to (interrupt|cancel)/i,
|
|
208
|
-
/contemplating/i,
|
|
209
|
-
/thinking/i,
|
|
210
|
-
/checking for updates/i,
|
|
211
|
-
/shift\+tab to cycle/i,
|
|
212
|
-
/tab to add/i,
|
|
213
|
-
/don't ask on/i,
|
|
214
|
-
];
|
|
215
|
-
for (const pattern of tuiPatterns) {
|
|
216
|
-
if (pattern.test(line))
|
|
217
|
-
return true;
|
|
218
|
-
}
|
|
219
|
-
// Very short fragments (likely partial/corrupted)
|
|
220
|
-
if (line.length < 4)
|
|
221
|
-
return true;
|
|
222
|
-
// Lines that are mostly non-alphanumeric (decorative)
|
|
223
|
-
const alphanumCount = (line.match(/[a-zA-Z0-9]/g) || []).length;
|
|
224
|
-
if (line.length > 10 && alphanumCount / line.length < 0.3)
|
|
225
|
-
return true;
|
|
226
|
-
return false;
|
|
227
|
-
}
|
|
228
|
-
/**
|
|
229
|
-
* Extract summary from recent output (last meaningful lines).
|
|
230
|
-
*/
|
|
231
|
-
extractSummary() {
|
|
232
|
-
const text = this.getRecentText();
|
|
233
|
-
// Get last meaningful lines, filtering out TUI decorations
|
|
234
|
-
const lines = text.split('\n')
|
|
235
|
-
.map(l => l.trim())
|
|
236
|
-
.filter(l => l.length > 0)
|
|
237
|
-
.filter(l => !this.isTuiDecoration(l));
|
|
238
|
-
// Return last 5 meaningful lines, max 300 chars
|
|
239
|
-
const summary = lines.slice(-5).join('\n');
|
|
240
|
-
return summary.length > 300 ? '...' + summary.slice(-300) : summary;
|
|
241
|
-
}
|
|
242
|
-
/**
|
|
243
|
-
* Register a handler for prompt events.
|
|
244
|
-
* @param handler - Function to call when prompt detected
|
|
245
|
-
*/
|
|
246
|
-
onPrompt(handler) {
|
|
247
|
-
this.on('prompt', handler);
|
|
248
|
-
}
|
|
249
|
-
/**
|
|
250
|
-
* Register a handler for completion events.
|
|
251
|
-
* @param handler - Function to call when Claude finishes working
|
|
252
|
-
*/
|
|
253
|
-
onCompletion(handler) {
|
|
254
|
-
this.on('completion', handler);
|
|
255
|
-
}
|
|
256
|
-
/**
|
|
257
|
-
* Clear the parser buffer and cancel any pending prompt.
|
|
258
|
-
* Call this when session ends or resets.
|
|
259
|
-
*/
|
|
260
|
-
reset() {
|
|
261
|
-
this.buffer = [];
|
|
262
|
-
this.pendingPrompt = null;
|
|
263
|
-
this.lastEmittedHash = null;
|
|
264
|
-
this.status = 'idle';
|
|
265
|
-
this.workStartTime = null;
|
|
266
|
-
this.completionFired = false;
|
|
267
|
-
if (this.idleTimer) {
|
|
268
|
-
clearTimeout(this.idleTimer);
|
|
269
|
-
this.idleTimer = null;
|
|
270
|
-
}
|
|
271
|
-
if (this.completionTimer) {
|
|
272
|
-
clearTimeout(this.completionTimer);
|
|
273
|
-
this.completionTimer = null;
|
|
274
|
-
}
|
|
275
|
-
}
|
|
276
|
-
/**
|
|
277
|
-
* Reset parser state after user responds to prompt.
|
|
278
|
-
* Call this after writing response to PTY so next work cycle is tracked fresh.
|
|
279
|
-
*/
|
|
280
|
-
resetForNewWork() {
|
|
281
|
-
this.status = 'idle';
|
|
282
|
-
this.workStartTime = null;
|
|
283
|
-
this.completionFired = false; // Allow new completion after user interaction
|
|
284
|
-
this.log('Reset for new work, status -> idle, completion unlocked');
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Clear the deduplication hash to allow re-detecting the same prompt.
|
|
288
|
-
* Useful when user has responded and new prompts should be detected.
|
|
289
|
-
*/
|
|
290
|
-
clearDeduplication() {
|
|
291
|
-
this.lastEmittedHash = null;
|
|
292
|
-
}
|
|
293
|
-
/**
|
|
294
|
-
* Get the current buffer length (for debugging).
|
|
295
|
-
*/
|
|
296
|
-
get bufferLength() {
|
|
297
|
-
return this.buffer.length;
|
|
298
|
-
}
|
|
299
|
-
/**
|
|
300
|
-
* Get the current Claude status.
|
|
301
|
-
*/
|
|
302
|
-
get currentStatus() {
|
|
303
|
-
return this.status;
|
|
304
|
-
}
|
|
305
|
-
}
|
|
306
|
-
//# sourceMappingURL=OutputParser.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"OutputParser.js","sourceRoot":"","sources":["../../src/parser/OutputParser.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Detects Claude Code blocking prompts using pattern matching.
|
|
3
|
-
* Requires multiple signals to avoid false positives.
|
|
4
|
-
*/
|
|
5
|
-
export declare class PromptDetector {
|
|
6
|
-
private static readonly PATTERNS;
|
|
7
|
-
/**
|
|
8
|
-
* Check if text contains patterns indicating a blocking prompt.
|
|
9
|
-
* Returns true only if multiple signals are present.
|
|
10
|
-
* @param text - Cleaned text (ANSI stripped)
|
|
11
|
-
*/
|
|
12
|
-
hasPromptPattern(text: string): boolean;
|
|
13
|
-
/**
|
|
14
|
-
* Extract the question/prompt text from the output.
|
|
15
|
-
* Looks for the last meaningful line before options or footer.
|
|
16
|
-
* @param text - Cleaned text (ANSI stripped)
|
|
17
|
-
*/
|
|
18
|
-
extractQuestion(text: string): string;
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=PromptDetector.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PromptDetector.d.ts","sourceRoot":"","sources":["../../src/parser/PromptDetector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,qBAAa,cAAc;IAEzB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAe9B;IAEF;;;;OAIG;IACH,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO;IAYvC;;;;OAIG;IACH,eAAe,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM;CA6BtC"}
|
|
@@ -1,68 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Detects Claude Code blocking prompts using pattern matching.
|
|
3
|
-
* Requires multiple signals to avoid false positives.
|
|
4
|
-
*/
|
|
5
|
-
export class PromptDetector {
|
|
6
|
-
// Patterns derived from Claude Code TUI output
|
|
7
|
-
static PATTERNS = {
|
|
8
|
-
// Numbered option line: " 1. Option text" or "> 1. Option text" or "❯ 1. Option text"
|
|
9
|
-
numberedOption: /^\s*[❯>\s]*\s*\d+\.\s+.+$/m,
|
|
10
|
-
// Footer hints that indicate interactive prompt
|
|
11
|
-
confirmFooter: /enter to confirm|esc to cancel|↵ to confirm|y\/n|\[y\/n\]|press enter/i,
|
|
12
|
-
// Question ending (common in freeform prompts)
|
|
13
|
-
questionEnding: /\?\s*$/m,
|
|
14
|
-
// "Do you want to..." pattern
|
|
15
|
-
proceedQuestion: /do you (want|wish) to (proceed|continue|run|execute)\??/i,
|
|
16
|
-
// Permission-style prompts
|
|
17
|
-
allowQuestion: /allow|approve|permit|grant/i,
|
|
18
|
-
};
|
|
19
|
-
/**
|
|
20
|
-
* Check if text contains patterns indicating a blocking prompt.
|
|
21
|
-
* Returns true only if multiple signals are present.
|
|
22
|
-
* @param text - Cleaned text (ANSI stripped)
|
|
23
|
-
*/
|
|
24
|
-
hasPromptPattern(text) {
|
|
25
|
-
const hasOptions = PromptDetector.PATTERNS.numberedOption.test(text);
|
|
26
|
-
const hasFooter = PromptDetector.PATTERNS.confirmFooter.test(text);
|
|
27
|
-
const hasQuestion = PromptDetector.PATTERNS.questionEnding.test(text);
|
|
28
|
-
const hasProceed = PromptDetector.PATTERNS.proceedQuestion.test(text);
|
|
29
|
-
const hasAllow = PromptDetector.PATTERNS.allowQuestion.test(text);
|
|
30
|
-
// Require at least: (options OR question/proceed/allow) AND footer
|
|
31
|
-
const hasPromptContent = hasOptions || hasQuestion || hasProceed || hasAllow;
|
|
32
|
-
return hasPromptContent && hasFooter;
|
|
33
|
-
}
|
|
34
|
-
/**
|
|
35
|
-
* Extract the question/prompt text from the output.
|
|
36
|
-
* Looks for the last meaningful line before options or footer.
|
|
37
|
-
* @param text - Cleaned text (ANSI stripped)
|
|
38
|
-
*/
|
|
39
|
-
extractQuestion(text) {
|
|
40
|
-
const lines = text.split('\n').map(l => l.trim()).filter(l => l.length > 0);
|
|
41
|
-
// Find lines that look like questions (end with ? or contain key phrases)
|
|
42
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
43
|
-
const line = lines[i];
|
|
44
|
-
// Skip option lines
|
|
45
|
-
if (/^\s*[❯>\s]*\s*\d+\.\s+/.test(line))
|
|
46
|
-
continue;
|
|
47
|
-
// Skip footer hints
|
|
48
|
-
if (PromptDetector.PATTERNS.confirmFooter.test(line))
|
|
49
|
-
continue;
|
|
50
|
-
// Found a potential question
|
|
51
|
-
if (line.endsWith('?') ||
|
|
52
|
-
PromptDetector.PATTERNS.proceedQuestion.test(line) ||
|
|
53
|
-
PromptDetector.PATTERNS.allowQuestion.test(line)) {
|
|
54
|
-
return line;
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
// Fallback: return last non-footer, non-option line
|
|
58
|
-
for (let i = lines.length - 1; i >= 0; i--) {
|
|
59
|
-
const line = lines[i];
|
|
60
|
-
if (!/^\s*[❯>\s]*\s*\d+\.\s+/.test(line) &&
|
|
61
|
-
!PromptDetector.PATTERNS.confirmFooter.test(line)) {
|
|
62
|
-
return line;
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
return 'Input required';
|
|
66
|
-
}
|
|
67
|
-
}
|
|
68
|
-
//# sourceMappingURL=PromptDetector.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"PromptDetector.js","sourceRoot":"","sources":["../../src/parser/PromptDetector.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,MAAM,OAAO,cAAc;IACzB,+CAA+C;IACvC,MAAM,CAAU,QAAQ,GAAG;QACjC,uFAAuF;QACvF,cAAc,EAAE,4BAA4B;QAE5C,gDAAgD;QAChD,aAAa,EAAE,wEAAwE;QAEvF,+CAA+C;QAC/C,cAAc,EAAE,SAAS;QAEzB,8BAA8B;QAC9B,eAAe,EAAE,0DAA0D;QAE3E,2BAA2B;QAC3B,aAAa,EAAE,6BAA6B;KAC7C,CAAC;IAEF;;;;OAIG;IACH,gBAAgB,CAAC,IAAY;QAC3B,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACrE,MAAM,SAAS,GAAG,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACnE,MAAM,WAAW,GAAG,cAAc,CAAC,QAAQ,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,UAAU,GAAG,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACtE,MAAM,QAAQ,GAAG,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QAElE,mEAAmE;QACnE,MAAM,gBAAgB,GAAG,UAAU,IAAI,WAAW,IAAI,UAAU,IAAI,QAAQ,CAAC;QAC7E,OAAO,gBAAgB,IAAI,SAAS,CAAC;IACvC,CAAC;IAED;;;;OAIG;IACH,eAAe,CAAC,IAAY;QAC1B,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAE5E,0EAA0E;QAC1E,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,oBAAoB;YACpB,IAAI,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAClD,oBAAoB;YACpB,IAAI,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC;gBAAE,SAAS;YAC/D,6BAA6B;YAC7B,IAAI,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC;gBAClB,cAAc,CAAC,QAAQ,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC;gBAClD,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,oDAAoD;QACpD,KAAK,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YAC3C,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;YACtB,IAAI,CAAC,wBAAwB,CAAC,IAAI,CAAC,IAAI,CAAC;gBACpC,CAAC,cAAc,CAAC,QAAQ,CAAC,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;gBACtD,OAAO,IAAI,CAAC;YACd,CAAC;QACH,CAAC;QAED,OAAO,gBAAgB,CAAC;IAC1B,CAAC"}
|
package/dist/parser/index.d.ts
DELETED
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
export { AnsiStripper } from './AnsiStripper.js';
|
|
2
|
-
export { PromptDetector } from './PromptDetector.js';
|
|
3
|
-
export { OptionExtractor } from './OptionExtractor.js';
|
|
4
|
-
export { OutputParser } from './OutputParser.js';
|
|
5
|
-
export type { OutputParserOptions } from './OutputParser.js';
|
|
6
|
-
export type { ParsedChunk, PromptOption, PromptEvent, ParserEvent, ParserEventHandler, } from './types.js';
|
|
7
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,YAAY,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AAC7D,YAAY,EACV,WAAW,EACX,YAAY,EACZ,WAAW,EACX,WAAW,EACX,kBAAkB,GACnB,MAAM,YAAY,CAAC"}
|
package/dist/parser/index.js
DELETED
package/dist/parser/index.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/parser/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC;AACjD,OAAO,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AACrD,OAAO,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,mBAAmB,CAAC"}
|