@brutalist/mcp 0.6.0 → 0.6.2

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 (71) hide show
  1. package/README.md +3 -1
  2. package/dist/brutalist-server.d.ts +5 -0
  3. package/dist/brutalist-server.d.ts.map +1 -1
  4. package/dist/brutalist-server.js +295 -92
  5. package/dist/brutalist-server.js.map +1 -1
  6. package/dist/cli-agents.d.ts +7 -3
  7. package/dist/cli-agents.d.ts.map +1 -1
  8. package/dist/cli-agents.js +316 -56
  9. package/dist/cli-agents.js.map +1 -1
  10. package/dist/streaming/circuit-breaker.d.ts +186 -0
  11. package/dist/streaming/circuit-breaker.d.ts.map +1 -0
  12. package/dist/streaming/circuit-breaker.js +463 -0
  13. package/dist/streaming/circuit-breaker.js.map +1 -0
  14. package/dist/streaming/intelligent-buffer.d.ts +141 -0
  15. package/dist/streaming/intelligent-buffer.d.ts.map +1 -0
  16. package/dist/streaming/intelligent-buffer.js +555 -0
  17. package/dist/streaming/intelligent-buffer.js.map +1 -0
  18. package/dist/streaming/output-parser.d.ts +89 -0
  19. package/dist/streaming/output-parser.d.ts.map +1 -0
  20. package/dist/streaming/output-parser.js +349 -0
  21. package/dist/streaming/output-parser.js.map +1 -0
  22. package/dist/streaming/progress-tracker.d.ts +149 -0
  23. package/dist/streaming/progress-tracker.d.ts.map +1 -0
  24. package/dist/streaming/progress-tracker.js +519 -0
  25. package/dist/streaming/progress-tracker.js.map +1 -0
  26. package/dist/streaming/session-manager.d.ts +238 -0
  27. package/dist/streaming/session-manager.d.ts.map +1 -0
  28. package/dist/streaming/session-manager.js +546 -0
  29. package/dist/streaming/session-manager.js.map +1 -0
  30. package/dist/streaming/sse-transport.d.ts +95 -0
  31. package/dist/streaming/sse-transport.d.ts.map +1 -0
  32. package/dist/streaming/sse-transport.js +319 -0
  33. package/dist/streaming/sse-transport.js.map +1 -0
  34. package/dist/streaming/streaming-orchestrator.d.ts +153 -0
  35. package/dist/streaming/streaming-orchestrator.d.ts.map +1 -0
  36. package/dist/streaming/streaming-orchestrator.js +436 -0
  37. package/dist/streaming/streaming-orchestrator.js.map +1 -0
  38. package/dist/test-utils/process-manager.d.ts +61 -0
  39. package/dist/test-utils/process-manager.d.ts.map +1 -0
  40. package/dist/test-utils/process-manager.js +262 -0
  41. package/dist/test-utils/process-manager.js.map +1 -0
  42. package/dist/test-utils/server-harness.d.ts +73 -0
  43. package/dist/test-utils/server-harness.d.ts.map +1 -0
  44. package/dist/test-utils/server-harness.js +297 -0
  45. package/dist/test-utils/server-harness.js.map +1 -0
  46. package/dist/test-utils/streaming-fuzz.d.ts +57 -0
  47. package/dist/test-utils/streaming-fuzz.d.ts.map +1 -0
  48. package/dist/test-utils/streaming-fuzz.js +287 -0
  49. package/dist/test-utils/streaming-fuzz.js.map +1 -0
  50. package/dist/test-utils/test-isolation.d.ts +70 -0
  51. package/dist/test-utils/test-isolation.d.ts.map +1 -0
  52. package/dist/test-utils/test-isolation.js +193 -0
  53. package/dist/test-utils/test-isolation.js.map +1 -0
  54. package/dist/tool-definitions.d.ts.map +1 -1
  55. package/dist/tool-definitions.js +12 -6
  56. package/dist/tool-definitions.js.map +1 -1
  57. package/dist/types/brutalist.d.ts +3 -3
  58. package/dist/types/brutalist.d.ts.map +1 -1
  59. package/dist/types/tool-config.d.ts +0 -1
  60. package/dist/types/tool-config.d.ts.map +1 -1
  61. package/dist/types/tool-config.js +0 -1
  62. package/dist/types/tool-config.js.map +1 -1
  63. package/dist/utils/pagination.d.ts +3 -3
  64. package/dist/utils/pagination.d.ts.map +1 -1
  65. package/dist/utils/pagination.js +24 -6
  66. package/dist/utils/pagination.js.map +1 -1
  67. package/dist/utils/response-cache.d.ts +23 -7
  68. package/dist/utils/response-cache.d.ts.map +1 -1
  69. package/dist/utils/response-cache.js +202 -62
  70. package/dist/utils/response-cache.js.map +1 -1
  71. package/package.json +13 -3
@@ -0,0 +1,349 @@
1
+ import { logger } from '../logger.js';
2
+ /**
3
+ * Advanced semantic output parser with boundary detection and content classification
4
+ *
5
+ * Key features:
6
+ * - State machine tracking for CLI phases
7
+ * - Sentence/paragraph boundary detection
8
+ * - Content classification (findings vs debug info)
9
+ * - Streaming tokenization with incomplete sentence handling
10
+ * - Memory-efficient circular buffering
11
+ */
12
+ export class SemanticOutputParser {
13
+ buffer = '';
14
+ state;
15
+ // Boundary detection patterns for clean chunking
16
+ BOUNDARY_PATTERNS = {
17
+ sentence: /([.!?]+)\s+(?=[A-Z])/g,
18
+ paragraph: /\n\s*\n/g,
19
+ codeBlock: /```[\s\S]*?```/g,
20
+ listItem: /^\s*[-*+]\s+/gm,
21
+ numberedItem: /^\s*\d+\.\s+/gm
22
+ };
23
+ // Content classification patterns
24
+ CLASSIFICATION_PATTERNS = {
25
+ finding: {
26
+ critical: /\b(CRITICAL|SECURITY|VULNERABILITY|EXPLOIT|DANGEROUS)\b/i,
27
+ high: /\b(ERROR|WARNING|ISSUE|PROBLEM|BUG|FAIL)\b/i,
28
+ medium: /\b(CONCERN|RISK|POTENTIAL|IMPROVE|OPTIMIZE)\b/i,
29
+ low: /\b(SUGGESTION|CONSIDER|MINOR|STYLE)\b/i,
30
+ info: /\b(INFO|NOTE|TIP|FOUND|DETECTED)\b/i
31
+ },
32
+ progress: /\b(ANALYZING|SCANNING|PROCESSING|CHECKING|LOADING)\b/i,
33
+ debug: /\b(DEBUG|TRACE|VERBOSE|LOG)\b/i,
34
+ error: /\b(FAILED|CRASHED|TIMEOUT|EXCEPTION)\b/i,
35
+ milestone: /\b(COMPLETED?|FINISHED|DONE|SUCCESS|STARTED?)\b/i
36
+ };
37
+ // Phase transition patterns
38
+ PHASE_PATTERNS = {
39
+ starting: /\b(starting|initializing|beginning|loading)\b/i,
40
+ thinking: /\b(thinking|considering|planning|preparing)\b/i,
41
+ analyzing: /\b(analyzing|examining|reviewing|checking)\b/i,
42
+ outputting: /\b(found|detected|identified|discovered)\b/i,
43
+ complete: /\b(complete|finished|done|analysis complete)\b/i
44
+ };
45
+ constructor(agent, sessionId) {
46
+ this.state = {
47
+ phase: 'starting',
48
+ agent,
49
+ sessionId,
50
+ bufferSize: 0,
51
+ processedChunks: 0,
52
+ lastEventTime: Date.now()
53
+ };
54
+ }
55
+ /**
56
+ * Parse incoming CLI output chunk into semantic streaming events
57
+ */
58
+ parse(chunk, agent) {
59
+ if (!chunk || chunk.trim().length === 0) {
60
+ return [];
61
+ }
62
+ this.buffer += chunk;
63
+ this.state.bufferSize = this.buffer.length;
64
+ this.state.processedChunks++;
65
+ this.state.lastEventTime = Date.now();
66
+ const events = [];
67
+ // Update parser state based on content
68
+ this.updatePhase(chunk);
69
+ // Extract complete semantic units
70
+ const boundaries = this.detectBoundaries(this.buffer);
71
+ for (const segment of boundaries.complete) {
72
+ const event = this.createEventFromSegment(segment, agent);
73
+ if (event) {
74
+ events.push(event);
75
+ }
76
+ }
77
+ // Keep remaining incomplete content in buffer
78
+ this.buffer = boundaries.remaining;
79
+ this.state.bufferSize = this.buffer.length;
80
+ // Prevent buffer overflow
81
+ if (this.buffer.length > 8192) { // 8KB limit
82
+ logger.warn(`Parser buffer overflow for ${agent}, flushing incomplete content`);
83
+ const flushEvents = this.flush();
84
+ events.push(...flushEvents);
85
+ }
86
+ return events;
87
+ }
88
+ /**
89
+ * Flush any remaining content as final events
90
+ */
91
+ flush() {
92
+ if (!this.buffer.trim()) {
93
+ return [];
94
+ }
95
+ logger.debug(`Flushing remaining ${this.buffer.length} chars for ${this.state.agent}`);
96
+ const event = this.createEventFromSegment(this.buffer, this.state.agent);
97
+ this.buffer = '';
98
+ this.state.bufferSize = 0;
99
+ this.state.phase = 'complete';
100
+ return event ? [event] : [];
101
+ }
102
+ /**
103
+ * Get current parser state
104
+ */
105
+ getState() {
106
+ return { ...this.state };
107
+ }
108
+ /**
109
+ * Reset parser to initial state
110
+ */
111
+ reset() {
112
+ this.buffer = '';
113
+ this.state = {
114
+ phase: 'starting',
115
+ agent: this.state.agent,
116
+ sessionId: this.state.sessionId,
117
+ bufferSize: 0,
118
+ processedChunks: 0,
119
+ lastEventTime: Date.now()
120
+ };
121
+ }
122
+ /**
123
+ * Detect semantic boundaries in text for clean chunking
124
+ */
125
+ detectBoundaries(text) {
126
+ const complete = [];
127
+ let remaining = text;
128
+ // First, extract complete code blocks (highest priority)
129
+ const codeBlocks = [];
130
+ remaining = remaining.replace(this.BOUNDARY_PATTERNS.codeBlock, (match) => {
131
+ codeBlocks.push(match);
132
+ return '\n__CODE_BLOCK__\n';
133
+ });
134
+ // Extract complete paragraphs
135
+ const paragraphs = remaining.split(this.BOUNDARY_PATTERNS.paragraph);
136
+ for (let i = 0; i < paragraphs.length - 1; i++) {
137
+ const paragraph = paragraphs[i].trim();
138
+ if (paragraph) {
139
+ // Restore code blocks
140
+ const restored = this.restoreCodeBlocks(paragraph, codeBlocks);
141
+ complete.push(restored);
142
+ }
143
+ }
144
+ // Check if last paragraph is complete (ends with sentence boundary)
145
+ const lastParagraph = paragraphs[paragraphs.length - 1];
146
+ if (lastParagraph && this.isCompleteSentence(lastParagraph)) {
147
+ const restored = this.restoreCodeBlocks(lastParagraph.trim(), codeBlocks);
148
+ complete.push(restored);
149
+ remaining = '';
150
+ }
151
+ else {
152
+ remaining = this.restoreCodeBlocks(lastParagraph || '', codeBlocks);
153
+ }
154
+ return { complete, remaining };
155
+ }
156
+ /**
157
+ * Check if text ends with complete sentence
158
+ */
159
+ isCompleteSentence(text) {
160
+ const trimmed = text.trim();
161
+ return /[.!?]$/.test(trimmed) || /```\s*$/.test(trimmed);
162
+ }
163
+ /**
164
+ * Restore code blocks in text
165
+ */
166
+ restoreCodeBlocks(text, codeBlocks) {
167
+ let index = 0;
168
+ return text.replace(/\n__CODE_BLOCK__\n/g, () => {
169
+ return codeBlocks[index++] || '';
170
+ });
171
+ }
172
+ /**
173
+ * Update parser phase based on content analysis
174
+ */
175
+ updatePhase(content) {
176
+ for (const [phase, pattern] of Object.entries(this.PHASE_PATTERNS)) {
177
+ if (pattern.test(content)) {
178
+ this.state.phase = phase;
179
+ break;
180
+ }
181
+ }
182
+ }
183
+ /**
184
+ * Create streaming event from text segment
185
+ */
186
+ createEventFromSegment(segment, agent) {
187
+ const trimmed = segment.trim();
188
+ if (!trimmed) {
189
+ return null;
190
+ }
191
+ const classification = this.classifyContent(trimmed);
192
+ // Filter out low-value debug content
193
+ if (classification.type === 'debug' && classification.confidence < 0.5) {
194
+ return null;
195
+ }
196
+ // Determine event type based on classification
197
+ let eventType = 'agent_progress';
198
+ if (classification.type === 'finding') {
199
+ eventType = 'agent_progress'; // Findings are progress updates with metadata
200
+ }
201
+ else if (classification.type === 'error') {
202
+ eventType = 'agent_error';
203
+ }
204
+ else if (classification.type === 'milestone') {
205
+ eventType = this.state.phase === 'complete' ? 'agent_complete' : 'agent_progress';
206
+ }
207
+ return {
208
+ type: eventType,
209
+ agent: agent,
210
+ content: trimmed,
211
+ timestamp: Date.now(),
212
+ sessionId: this.state.sessionId,
213
+ metadata: {
214
+ phase: this.state.phase,
215
+ severity: classification.severity,
216
+ contentType: classification.type,
217
+ confidence: classification.confidence,
218
+ bufferSize: this.state.bufferSize,
219
+ processedChunks: this.state.processedChunks
220
+ }
221
+ };
222
+ }
223
+ /**
224
+ * Classify content to determine event type and severity
225
+ */
226
+ classifyContent(content) {
227
+ // Check for findings with severity
228
+ for (const [severity, pattern] of Object.entries(this.CLASSIFICATION_PATTERNS.finding)) {
229
+ if (pattern.test(content)) {
230
+ return {
231
+ type: 'finding',
232
+ severity: severity,
233
+ confidence: 0.9
234
+ };
235
+ }
236
+ }
237
+ // Check for other content types
238
+ if (this.CLASSIFICATION_PATTERNS.progress.test(content)) {
239
+ return { type: 'progress', confidence: 0.8 };
240
+ }
241
+ if (this.CLASSIFICATION_PATTERNS.error.test(content)) {
242
+ return { type: 'error', confidence: 0.9 };
243
+ }
244
+ if (this.CLASSIFICATION_PATTERNS.milestone.test(content)) {
245
+ return { type: 'milestone', confidence: 0.7 };
246
+ }
247
+ if (this.CLASSIFICATION_PATTERNS.debug.test(content)) {
248
+ return { type: 'debug', confidence: 0.6 };
249
+ }
250
+ // Default classification
251
+ return { type: 'progress', confidence: 0.5 };
252
+ }
253
+ }
254
+ /**
255
+ * Factory for creating parsers optimized for different CLI agents
256
+ */
257
+ export class ParserFactory {
258
+ /**
259
+ * Create parser optimized for specific CLI agent
260
+ */
261
+ static createParser(agent, sessionId) {
262
+ switch (agent) {
263
+ case 'claude':
264
+ return new ClaudeOptimizedParser(agent, sessionId);
265
+ case 'codex':
266
+ return new CodexOptimizedParser(agent, sessionId);
267
+ case 'gemini':
268
+ return new GeminiOptimizedParser(agent, sessionId);
269
+ default:
270
+ return new SemanticOutputParser(agent, sessionId);
271
+ }
272
+ }
273
+ }
274
+ /**
275
+ * Claude-optimized parser (handles thinking blocks and stream-json format)
276
+ */
277
+ class ClaudeOptimizedParser extends SemanticOutputParser {
278
+ CLAUDE_PATTERNS = {
279
+ thinking: /<thinking>[\s\S]*?<\/thinking>/g,
280
+ streamJson: /^data: (.+)$/gm
281
+ };
282
+ parse(chunk, agent) {
283
+ // Handle Claude's stream-json format
284
+ let processedChunk = chunk;
285
+ const streamJsonMatches = chunk.match(this.CLAUDE_PATTERNS.streamJson);
286
+ if (streamJsonMatches) {
287
+ processedChunk = streamJsonMatches
288
+ .map(match => {
289
+ try {
290
+ const jsonStr = match.replace(/^data: /, '');
291
+ const data = JSON.parse(jsonStr);
292
+ return data.content || '';
293
+ }
294
+ catch {
295
+ return '';
296
+ }
297
+ })
298
+ .join(' ');
299
+ }
300
+ // Remove thinking blocks (internal reasoning)
301
+ processedChunk = processedChunk.replace(this.CLAUDE_PATTERNS.thinking, '');
302
+ return super.parse(processedChunk, agent);
303
+ }
304
+ }
305
+ /**
306
+ * Codex-optimized parser (handles JSON structured output)
307
+ */
308
+ class CodexOptimizedParser extends SemanticOutputParser {
309
+ parse(chunk, agent) {
310
+ // Codex outputs structured JSON, extract assistant messages
311
+ try {
312
+ const lines = chunk.split('\n').filter(line => line.trim());
313
+ let extractedContent = '';
314
+ for (const line of lines) {
315
+ try {
316
+ const data = JSON.parse(line);
317
+ if (data.type === 'assistant' && data.content) {
318
+ extractedContent += data.content + '\n';
319
+ }
320
+ }
321
+ catch {
322
+ // Not JSON, treat as raw text
323
+ extractedContent += line + '\n';
324
+ }
325
+ }
326
+ return super.parse(extractedContent, agent);
327
+ }
328
+ catch {
329
+ // Fallback to regular parsing
330
+ return super.parse(chunk, agent);
331
+ }
332
+ }
333
+ }
334
+ /**
335
+ * Gemini-optimized parser (handles markdown and structured output)
336
+ */
337
+ class GeminiOptimizedParser extends SemanticOutputParser {
338
+ GEMINI_PATTERNS = {
339
+ metadata: /^(\*\*|##|\s*-\s*)/gm,
340
+ thinking: /\[THINKING:[\s\S]*?\]/g
341
+ };
342
+ parse(chunk, agent) {
343
+ // Remove Gemini's thinking annotations
344
+ let processedChunk = chunk.replace(this.GEMINI_PATTERNS.thinking, '');
345
+ // Gemini often uses markdown formatting, preserve structure
346
+ return super.parse(processedChunk, agent);
347
+ }
348
+ }
349
+ //# sourceMappingURL=output-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"output-parser.js","sourceRoot":"","sources":["../../src/streaming/output-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,149 @@
1
+ import { EventEmitter } from 'events';
2
+ import { StreamingEvent } from '../cli-agents.js';
3
+ /**
4
+ * Analysis progress phases with detailed milestones
5
+ */
6
+ export declare enum AnalysisPhase {
7
+ INITIALIZING = "initializing",
8
+ COLLECTING_DATA = "collecting_data",
9
+ ANALYZING = "analyzing",
10
+ PROCESSING_RESULTS = "processing_results",
11
+ GENERATING_REPORT = "generating_report",
12
+ COMPLETE = "complete",
13
+ ERROR = "error"
14
+ }
15
+ /**
16
+ * Progress milestone definition
17
+ */
18
+ export interface ProgressMilestone {
19
+ id: string;
20
+ phase: AnalysisPhase;
21
+ name: string;
22
+ description: string;
23
+ estimatedDuration?: number;
24
+ weight: number;
25
+ dependencies?: string[];
26
+ optional?: boolean;
27
+ }
28
+ /**
29
+ * Progress state tracking
30
+ */
31
+ export interface ProgressState {
32
+ currentPhase: AnalysisPhase;
33
+ overallProgress: number;
34
+ phaseProgress: number;
35
+ completedMilestones: Set<string>;
36
+ currentMilestone?: ProgressMilestone;
37
+ startTime: number;
38
+ lastUpdate: number;
39
+ estimatedCompletion?: number;
40
+ errors: string[];
41
+ }
42
+ /**
43
+ * Progress event emitted for tracking
44
+ */
45
+ export interface ProgressEvent {
46
+ type: 'milestone_started' | 'milestone_completed' | 'phase_changed' | 'progress_updated' | 'analysis_complete' | 'analysis_error';
47
+ sessionId: string;
48
+ timestamp: number;
49
+ phase: AnalysisPhase;
50
+ milestone?: ProgressMilestone;
51
+ progress: {
52
+ overall: number;
53
+ phase: number;
54
+ };
55
+ estimatedCompletion?: number;
56
+ metadata?: Record<string, any>;
57
+ }
58
+ /**
59
+ * Analysis type-specific milestone definitions
60
+ */
61
+ export declare const ANALYSIS_MILESTONES: Record<string, ProgressMilestone[]>;
62
+ /**
63
+ * Progress milestone system with intelligent phase detection
64
+ *
65
+ * Features:
66
+ * - Dynamic milestone tracking based on analysis type
67
+ * - Intelligent progress estimation with dependencies
68
+ * - Phase transition detection from CLI output
69
+ * - ETA calculation with adaptive learning
70
+ * - Progress events for real-time updates
71
+ */
72
+ export declare class ProgressTracker extends EventEmitter {
73
+ private state;
74
+ private milestones;
75
+ private sessionId;
76
+ private analysisType;
77
+ private readonly PHASE_PATTERNS;
78
+ private readonly MILESTONE_TRIGGERS;
79
+ constructor(sessionId: string, analysisType: string);
80
+ /**
81
+ * Process streaming event and update progress
82
+ */
83
+ processEvent(event: StreamingEvent): void;
84
+ /**
85
+ * Detect current phase from CLI output content
86
+ */
87
+ private detectPhaseFromContent;
88
+ /**
89
+ * Detect milestone completion from content
90
+ */
91
+ private detectMilestonesFromContent;
92
+ /**
93
+ * Transition to new phase
94
+ */
95
+ private transitionToPhase;
96
+ /**
97
+ * Complete a milestone
98
+ */
99
+ private completeMilestone;
100
+ /**
101
+ * Check if milestone dependencies are met
102
+ */
103
+ private areDependenciesMet;
104
+ /**
105
+ * Check if milestone should be auto-completed
106
+ */
107
+ private shouldAutoCompleteMilestone;
108
+ /**
109
+ * Auto-complete milestones from previous phases
110
+ */
111
+ private autoCompletePreviousPhaseMilestones;
112
+ /**
113
+ * Update progress calculations
114
+ */
115
+ private updateProgress;
116
+ /**
117
+ * Update estimated completion time
118
+ */
119
+ private updateEstimatedCompletion;
120
+ /**
121
+ * Handle error in analysis
122
+ */
123
+ private handleError;
124
+ /**
125
+ * Mark analysis as complete
126
+ */
127
+ markComplete(): void;
128
+ /**
129
+ * Emit progress event
130
+ */
131
+ private emitProgressEvent;
132
+ /**
133
+ * Get current progress state
134
+ */
135
+ getState(): ProgressState;
136
+ /**
137
+ * Get progress summary for display
138
+ */
139
+ getProgressSummary(): {
140
+ phase: string;
141
+ overallProgress: number;
142
+ phaseProgress: number;
143
+ currentMilestone?: string;
144
+ estimatedTimeRemaining?: number;
145
+ completedMilestones: number;
146
+ totalMilestones: number;
147
+ };
148
+ }
149
+ //# sourceMappingURL=progress-tracker.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"progress-tracker.d.ts","sourceRoot":"","sources":["../../src/streaming/progress-tracker.ts"],"names":[],"mappings":"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"}