@brutalist/mcp 0.4.3 → 0.5.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.
@@ -2,6 +2,8 @@ export interface BrutalistServerConfig {
2
2
  workingDirectory?: string;
3
3
  defaultTimeout?: number;
4
4
  enableSandbox?: boolean;
5
+ transport?: 'stdio' | 'http';
6
+ httpPort?: number;
5
7
  }
6
8
  export interface CLIAgentResponse {
7
9
  agent: 'claude' | 'codex' | 'gemini';
@@ -43,4 +45,51 @@ export interface ChildProcessError extends Error {
43
45
  stdout?: string;
44
46
  stderr?: string;
45
47
  }
48
+ export interface PaginationParams {
49
+ offset?: number;
50
+ limit?: number;
51
+ cursor?: string;
52
+ }
53
+ export interface PaginationMetadata {
54
+ total: number;
55
+ offset: number;
56
+ limit: number;
57
+ hasMore: boolean;
58
+ nextCursor?: string;
59
+ chunkIndex: number;
60
+ totalChunks: number;
61
+ }
62
+ export interface PaginatedResponse<T = string> {
63
+ data: T;
64
+ pagination: PaginationMetadata;
65
+ summary?: string;
66
+ }
67
+ export interface ResponseChunk {
68
+ content: string;
69
+ startOffset: number;
70
+ endOffset: number;
71
+ metadata: {
72
+ isComplete: boolean;
73
+ truncated: boolean;
74
+ originalLength: number;
75
+ };
76
+ }
77
+ export interface BrutalistResponse {
78
+ success: boolean;
79
+ responses: CLIAgentResponse[];
80
+ synthesis?: string;
81
+ error?: string;
82
+ analysisType?: string;
83
+ targetPath?: string;
84
+ executionSummary?: {
85
+ totalCLIs: number;
86
+ successfulCLIs: number;
87
+ failedCLIs: number;
88
+ totalExecutionTime: number;
89
+ selectedCLI?: string;
90
+ selectionMethod?: string;
91
+ };
92
+ pagination?: PaginationMetadata;
93
+ fullResponseAvailable?: boolean;
94
+ }
46
95
  //# sourceMappingURL=brutalist.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"brutalist.d.ts","sourceRoot":"","sources":["../../src/types/brutalist.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,qBAAqB;IACpC,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC;IACrC,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,aAAa,EAAE,MAAM,CAAC;IACtB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,OAAO,CAAC;IACjB,SAAS,EAAE,gBAAgB,EAAE,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,gBAAgB,CAAC,EAAE;QACjB,SAAS,EAAE,MAAM,CAAC;QAClB,cAAc,EAAE,MAAM,CAAC;QACvB,UAAU,EAAE,MAAM,CAAC;QACnB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;CACH;AAED,MAAM,WAAW,YAAY;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB,MAAM,CAAC,EAAE,CAAC,QAAQ,GAAG,OAAO,GAAG,QAAQ,CAAC,EAAE,CAAC;CAC5C;AAED,MAAM,WAAW,iBAAkB,SAAQ,KAAK;IAC9C,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB"}
1
+ {"version":3,"file":"brutalist.d.ts","sourceRoot":"","sources":["../../src/types/brutalist.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
1
+ import { PaginationParams, PaginationMetadata, ResponseChunk, PaginatedResponse } from '../types/brutalist.js';
2
+ export declare const PAGINATION_DEFAULTS: {
3
+ readonly DEFAULT_LIMIT: 25000;
4
+ readonly MAX_LIMIT: 100000;
5
+ readonly MIN_LIMIT: 1000;
6
+ readonly CHUNK_OVERLAP: 200;
7
+ };
8
+ /**
9
+ * Calculates token count approximation (rough estimate: 1 token ≈ 4 characters)
10
+ */
11
+ export declare function estimateTokenCount(text: string): number;
12
+ /**
13
+ * Smart text chunking that preserves sentence boundaries and adds overlap
14
+ */
15
+ export declare class ResponseChunker {
16
+ private readonly chunkSize;
17
+ private readonly overlap;
18
+ constructor(chunkSize?: 25000, overlap?: 200);
19
+ /**
20
+ * Split text into chunks with smart boundary detection
21
+ */
22
+ chunkText(text: string): ResponseChunk[];
23
+ /**
24
+ * Find intelligent breakpoint that preserves readability
25
+ */
26
+ private findSmartBreakpoint;
27
+ }
28
+ /**
29
+ * Create pagination metadata for a response
30
+ */
31
+ export declare function createPaginationMetadata(totalLength: number, params: PaginationParams, chunkSize?: number): PaginationMetadata;
32
+ /**
33
+ * Extract pagination parameters from tool arguments
34
+ */
35
+ export declare function extractPaginationParams(args: Record<string, unknown>): PaginationParams;
36
+ /**
37
+ * Parse cursor string to extract pagination state
38
+ */
39
+ export declare function parseCursor(cursor: string): Partial<PaginationParams>;
40
+ /**
41
+ * Create a paginated response with proper metadata
42
+ */
43
+ export declare function createPaginatedResponse<T = string>(data: T, pagination: PaginationMetadata, summary?: string): PaginatedResponse<T>;
44
+ /**
45
+ * Format pagination status for user display
46
+ */
47
+ export declare function formatPaginationStatus(pagination: PaginationMetadata): string;
48
+ //# sourceMappingURL=pagination.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.d.ts","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"AACA,OAAO,EACL,gBAAgB,EAChB,kBAAkB,EAClB,aAAa,EACb,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAG/B,eAAO,MAAM,mBAAmB;;;;;CAKtB,CAAC;AAEX;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,qBAAa,eAAe;IAC1B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAS;IACnC,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAS;gBAErB,SAAS,QAAoC,EAAE,OAAO,MAAoC;IAKtG;;OAEG;IACI,SAAS,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,EAAE;IA+C/C;;OAEG;IACH,OAAO,CAAC,mBAAmB;CA4B5B;AAED;;GAEG;AACH,wBAAgB,wBAAwB,CACtC,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,gBAAgB,EACxB,SAAS,GAAE,MAA0C,GACpD,kBAAkB,CAiBpB;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,gBAAgB,CAQvF;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAiBrE;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,CAAC,GAAG,MAAM,EAChD,IAAI,EAAE,CAAC,EACP,UAAU,EAAE,kBAAkB,EAC9B,OAAO,CAAC,EAAE,MAAM,GACf,iBAAiB,CAAC,CAAC,CAAC,CAMtB;AAED;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,UAAU,EAAE,kBAAkB,GAAG,MAAM,CAa7E"}
@@ -0,0 +1,171 @@
1
+ import { logger } from '../logger.js';
2
+ // Default pagination configuration
3
+ export const PAGINATION_DEFAULTS = {
4
+ DEFAULT_LIMIT: 25000, // 25K tokens - matches Claude Code default
5
+ MAX_LIMIT: 100000, // 100K tokens - reasonable upper bound
6
+ MIN_LIMIT: 1000, // 1K tokens - minimum meaningful chunk
7
+ CHUNK_OVERLAP: 200 // Character overlap between chunks for context
8
+ };
9
+ /**
10
+ * Calculates token count approximation (rough estimate: 1 token ≈ 4 characters)
11
+ */
12
+ export function estimateTokenCount(text) {
13
+ return Math.ceil(text.length / 4);
14
+ }
15
+ /**
16
+ * Smart text chunking that preserves sentence boundaries and adds overlap
17
+ */
18
+ export class ResponseChunker {
19
+ chunkSize;
20
+ overlap;
21
+ constructor(chunkSize = PAGINATION_DEFAULTS.DEFAULT_LIMIT, overlap = PAGINATION_DEFAULTS.CHUNK_OVERLAP) {
22
+ this.chunkSize = Math.max(chunkSize, PAGINATION_DEFAULTS.MIN_LIMIT);
23
+ this.overlap = Math.min(overlap, Math.floor(chunkSize * 0.1)); // Max 10% overlap
24
+ }
25
+ /**
26
+ * Split text into chunks with smart boundary detection
27
+ */
28
+ chunkText(text) {
29
+ if (text.length <= this.chunkSize) {
30
+ return [{
31
+ content: text,
32
+ startOffset: 0,
33
+ endOffset: text.length,
34
+ metadata: {
35
+ isComplete: true,
36
+ truncated: false,
37
+ originalLength: text.length
38
+ }
39
+ }];
40
+ }
41
+ const chunks = [];
42
+ let currentOffset = 0;
43
+ while (currentOffset < text.length) {
44
+ const endOffset = Math.min(currentOffset + this.chunkSize, text.length);
45
+ let chunkEnd = endOffset;
46
+ // Smart boundary detection - prefer paragraph, then sentence, then word breaks
47
+ if (endOffset < text.length) {
48
+ chunkEnd = this.findSmartBreakpoint(text, currentOffset, endOffset);
49
+ }
50
+ const chunkContent = text.substring(currentOffset, chunkEnd);
51
+ chunks.push({
52
+ content: chunkContent,
53
+ startOffset: currentOffset,
54
+ endOffset: chunkEnd,
55
+ metadata: {
56
+ isComplete: chunkEnd === text.length,
57
+ truncated: chunkEnd < endOffset,
58
+ originalLength: text.length
59
+ }
60
+ });
61
+ // Move to next chunk with overlap (except for last chunk)
62
+ currentOffset = chunkEnd - (chunkEnd === text.length ? 0 : this.overlap);
63
+ }
64
+ logger.debug(`Chunked ${text.length} chars into ${chunks.length} chunks (size: ${this.chunkSize}, overlap: ${this.overlap})`);
65
+ return chunks;
66
+ }
67
+ /**
68
+ * Find intelligent breakpoint that preserves readability
69
+ */
70
+ findSmartBreakpoint(text, start, idealEnd) {
71
+ const searchRange = Math.min(500, Math.floor(this.chunkSize * 0.1)); // Search within 10% of chunk size
72
+ const minEnd = Math.max(start + this.chunkSize - searchRange, idealEnd - searchRange);
73
+ // Try to find paragraph break (double newline)
74
+ for (let i = idealEnd; i >= minEnd; i--) {
75
+ if (text.substring(i - 2, i) === '\n\n') {
76
+ return i;
77
+ }
78
+ }
79
+ // Try to find sentence break
80
+ for (let i = idealEnd; i >= minEnd; i--) {
81
+ if (/[.!?]\s/.test(text.substring(i - 2, i))) {
82
+ return i;
83
+ }
84
+ }
85
+ // Try to find word boundary
86
+ for (let i = idealEnd; i >= minEnd; i--) {
87
+ if (/\s/.test(text[i])) {
88
+ return i + 1;
89
+ }
90
+ }
91
+ // Fallback to ideal end if no good boundary found
92
+ return idealEnd;
93
+ }
94
+ }
95
+ /**
96
+ * Create pagination metadata for a response
97
+ */
98
+ export function createPaginationMetadata(totalLength, params, chunkSize = PAGINATION_DEFAULTS.DEFAULT_LIMIT) {
99
+ const offset = params.offset || 0;
100
+ const limit = Math.min(params.limit || PAGINATION_DEFAULTS.DEFAULT_LIMIT, PAGINATION_DEFAULTS.MAX_LIMIT);
101
+ const totalChunks = Math.ceil(totalLength / chunkSize);
102
+ const currentChunk = Math.floor(offset / chunkSize) + 1;
103
+ const hasMore = offset + limit < totalLength;
104
+ return {
105
+ total: totalLength,
106
+ offset,
107
+ limit,
108
+ hasMore,
109
+ nextCursor: hasMore ? `offset:${offset + limit}` : undefined,
110
+ chunkIndex: currentChunk,
111
+ totalChunks
112
+ };
113
+ }
114
+ /**
115
+ * Extract pagination parameters from tool arguments
116
+ */
117
+ export function extractPaginationParams(args) {
118
+ return {
119
+ offset: typeof args.offset === 'number' ? Math.max(0, args.offset) : 0,
120
+ limit: typeof args.limit === 'number'
121
+ ? Math.min(Math.max(args.limit, PAGINATION_DEFAULTS.MIN_LIMIT), PAGINATION_DEFAULTS.MAX_LIMIT)
122
+ : PAGINATION_DEFAULTS.DEFAULT_LIMIT,
123
+ cursor: typeof args.cursor === 'string' ? args.cursor : undefined
124
+ };
125
+ }
126
+ /**
127
+ * Parse cursor string to extract pagination state
128
+ */
129
+ export function parseCursor(cursor) {
130
+ try {
131
+ if (cursor.startsWith('offset:')) {
132
+ const offset = parseInt(cursor.substring(7), 10);
133
+ return isNaN(offset) ? {} : { offset };
134
+ }
135
+ // Support JSON cursor format for future extensibility
136
+ const parsed = JSON.parse(cursor);
137
+ return {
138
+ offset: typeof parsed.offset === 'number' ? parsed.offset : undefined,
139
+ limit: typeof parsed.limit === 'number' ? parsed.limit : undefined
140
+ };
141
+ }
142
+ catch {
143
+ logger.warn(`Invalid cursor format: ${cursor}`);
144
+ return {};
145
+ }
146
+ }
147
+ /**
148
+ * Create a paginated response with proper metadata
149
+ */
150
+ export function createPaginatedResponse(data, pagination, summary) {
151
+ return {
152
+ data,
153
+ pagination,
154
+ summary
155
+ };
156
+ }
157
+ /**
158
+ * Format pagination status for user display
159
+ */
160
+ export function formatPaginationStatus(pagination) {
161
+ const { chunkIndex, totalChunks, offset, total, hasMore } = pagination;
162
+ if (totalChunks === 1) {
163
+ return `Complete response (${total.toLocaleString()} characters)`;
164
+ }
165
+ const endOffset = Math.min(offset + pagination.limit, total);
166
+ const progress = `${chunkIndex}/${totalChunks}`;
167
+ const range = `chars ${offset.toLocaleString()}-${endOffset.toLocaleString()} of ${total.toLocaleString()}`;
168
+ const next = hasMore ? ' • Use offset parameter to continue' : ' • Complete';
169
+ return `Part ${progress}: ${range}${next}`;
170
+ }
171
+ //# sourceMappingURL=pagination.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pagination.js","sourceRoot":"","sources":["../../src/utils/pagination.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@brutalist/mcp",
3
- "version": "0.4.3",
4
- "description": "Deploy Claude, Codex & Gemini CLI agents to demolish your work before users do. Real file analysis. Brutal honesty.",
3
+ "version": "0.5.0",
4
+ "description": "Deploy Claude, Codex & Gemini CLI agents to demolish your work before users do. Real file analysis. Brutal honesty. Now with intelligent pagination.",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
7
7
  "bin": {
@@ -51,7 +51,11 @@
51
51
  "production-ready",
52
52
  "honest-ai",
53
53
  "no-lies",
54
- "disaster-prevention"
54
+ "disaster-prevention",
55
+ "pagination",
56
+ "chunking",
57
+ "token-limit",
58
+ "large-responses"
55
59
  ],
56
60
  "author": "Claude Code",
57
61
  "license": "MIT",
@@ -70,15 +74,20 @@
70
74
  "node": ">=16.0.0"
71
75
  },
72
76
  "dependencies": {
73
- "@modelcontextprotocol/sdk": "^1.9.0",
77
+ "@modelcontextprotocol/sdk": "^1.18.1",
74
78
  "zod": "^3.24.2"
75
79
  },
76
80
  "devDependencies": {
81
+ "@types/express": "^5.0.3",
77
82
  "@types/jest": "^30.0.0",
78
83
  "@types/node": "^20.17.28",
84
+ "@types/node-fetch": "^2.6.13",
85
+ "@types/ws": "^8.18.1",
79
86
  "dotenv": "^17.2.2",
80
87
  "jest": "^30.1.3",
88
+ "node-fetch": "^3.3.2",
81
89
  "ts-jest": "^29.4.2",
82
- "typescript": "^5.8.2"
90
+ "typescript": "^5.8.2",
91
+ "ws": "^8.18.3"
83
92
  }
84
93
  }