@brutalist/mcp 0.7.0 → 0.9.3
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/README.md +22 -1
- package/dist/brutalist-server.d.ts +46 -16
- package/dist/brutalist-server.d.ts.map +1 -1
- package/dist/brutalist-server.js +223 -611
- package/dist/brutalist-server.js.map +1 -1
- package/dist/cli-agents.d.ts +11 -9
- package/dist/cli-agents.d.ts.map +1 -1
- package/dist/cli-agents.js +239 -155
- package/dist/cli-agents.js.map +1 -1
- package/dist/domains/argument-space.d.ts +9 -0
- package/dist/domains/argument-space.d.ts.map +1 -1
- package/dist/domains/argument-space.js +27 -20
- package/dist/domains/argument-space.js.map +1 -1
- package/dist/formatting/response-formatter.d.ts +43 -0
- package/dist/formatting/response-formatter.d.ts.map +1 -0
- package/dist/formatting/response-formatter.js +277 -0
- package/dist/formatting/response-formatter.js.map +1 -0
- package/dist/generators/tool-generator.d.ts.map +1 -1
- package/dist/generators/tool-generator.js +3 -1
- package/dist/generators/tool-generator.js.map +1 -1
- package/dist/handlers/tool-handler.d.ts +33 -0
- package/dist/handlers/tool-handler.d.ts.map +1 -0
- package/dist/handlers/tool-handler.js +299 -0
- package/dist/handlers/tool-handler.js.map +1 -0
- package/dist/registry/argument-spaces.js +17 -17
- package/dist/registry/argument-spaces.js.map +1 -1
- package/dist/transport/http-transport.d.ts +40 -0
- package/dist/transport/http-transport.d.ts.map +1 -0
- package/dist/transport/http-transport.js +182 -0
- package/dist/transport/http-transport.js.map +1 -0
- package/dist/types/tool-config.d.ts +3 -3
- package/dist/types/tool-config.js +2 -2
- package/dist/types/tool-config.js.map +1 -1
- package/dist/utils.d.ts +1 -1
- package/dist/utils.d.ts.map +1 -1
- package/dist/utils.js +13 -6
- package/dist/utils.js.map +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"http-transport.js","sourceRoot":"","sources":["../../src/transport/http-transport.ts"],"names":[],"mappings":"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"}
|
|
@@ -32,15 +32,15 @@ export declare const BASE_ROAST_SCHEMA: {
|
|
|
32
32
|
models: z.ZodOptional<z.ZodObject<{
|
|
33
33
|
claude: z.ZodOptional<z.ZodString>;
|
|
34
34
|
codex: z.ZodOptional<z.ZodString>;
|
|
35
|
-
gemini: z.ZodOptional<z.
|
|
35
|
+
gemini: z.ZodOptional<z.ZodString>;
|
|
36
36
|
}, "strip", z.ZodTypeAny, {
|
|
37
37
|
claude?: string | undefined;
|
|
38
38
|
codex?: string | undefined;
|
|
39
|
-
gemini?:
|
|
39
|
+
gemini?: string | undefined;
|
|
40
40
|
}, {
|
|
41
41
|
claude?: string | undefined;
|
|
42
42
|
codex?: string | undefined;
|
|
43
|
-
gemini?:
|
|
43
|
+
gemini?: string | undefined;
|
|
44
44
|
}>>;
|
|
45
45
|
offset: z.ZodOptional<z.ZodNumber>;
|
|
46
46
|
limit: z.ZodOptional<z.ZodNumber>;
|
|
@@ -11,8 +11,8 @@ export const BASE_ROAST_SCHEMA = {
|
|
|
11
11
|
// Model selection - defaults prioritize frontier models with high capacity
|
|
12
12
|
models: z.object({
|
|
13
13
|
claude: z.string().optional().describe("Claude model: opus (recommended), sonnet, haiku, or full name like claude-opus-4-1-20250805. Default: user's configured model"),
|
|
14
|
-
codex: z.string().optional().describe("Codex model: gpt-5-codex (recommended), gpt-5,
|
|
15
|
-
gemini: z.
|
|
14
|
+
codex: z.string().optional().describe("Codex model: gpt-5.1-codex-max (recommended), gpt-5.1-codex, gpt-5.1-codex-mini, gpt-5-codex, gpt-5, o4-mini. Default: gpt-5.1-codex-max"),
|
|
15
|
+
gemini: z.string().optional().describe("Gemini model: gemini-3-pro-preview (recommended), gemini-2.5-pro, gemini-2.5-flash, gemini-2.5-flash-lite. Default: gemini-3-pro-preview")
|
|
16
16
|
}).optional().describe("Specific models to use for each CLI agent - defaults use frontier models with highest capacity"),
|
|
17
17
|
// Pagination parameters for large responses
|
|
18
18
|
offset: z.number().min(0).optional().describe("Character offset for response pagination (default: 0)"),
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"tool-config.js","sourceRoot":"","sources":["../../src/types/tool-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAe,MAAM,KAAK,CAAC;AAgCrC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,mCAAmC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAChF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACrF,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IACvI,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;IAE7G,2EAA2E;IAC3E,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+HAA+H,CAAC;QACvK,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,
|
|
1
|
+
{"version":3,"file":"tool-config.js","sourceRoot":"","sources":["../../src/types/tool-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAe,MAAM,KAAK,CAAC;AAgCrC;;GAEG;AACH,MAAM,CAAC,MAAM,iBAAiB,GAAG;IAC/B,mCAAmC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uCAAuC,CAAC;IAChF,gBAAgB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mCAAmC,CAAC;IACrF,YAAY,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IACvI,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mEAAmE,CAAC;IAE7G,2EAA2E;IAC3E,MAAM,EAAE,CAAC,CAAC,MAAM,CAAC;QACf,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+HAA+H,CAAC;QACvK,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0IAA0I,CAAC;QACjL,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,0IAA0I,CAAC;KACnL,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gGAAgG,CAAC;IAExH,4CAA4C;IAC5C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,uDAAuD,CAAC;IACtG,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,qEAAqE,CAAC;IAClI,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wEAAwE,CAAC;IAChH,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IAC1G,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iEAAiE,CAAC;CAClH,CAAC"}
|
package/dist/utils.d.ts
CHANGED
|
@@ -7,5 +7,5 @@
|
|
|
7
7
|
* @returns The resolved, validated absolute path.
|
|
8
8
|
* @throws Error if the path is outside the project root or does not exist (if mustExist is true).
|
|
9
9
|
*/
|
|
10
|
-
export declare function resolveAndValidatePath(projectRoot: string, userPath: string, mustExist?: boolean): string
|
|
10
|
+
export declare function resolveAndValidatePath(projectRoot: string, userPath: string, mustExist?: boolean): Promise<string>;
|
|
11
11
|
//# sourceMappingURL=utils.d.ts.map
|
package/dist/utils.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAGA;;;;;;;;GAQG;AACH,wBAAsB,sBAAsB,CAC1C,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,SAAS,GAAE,OAAe,GACzB,OAAO,CAAC,MAAM,CAAC,CA6CjB"}
|
package/dist/utils.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { resolve, sep } from 'path';
|
|
2
|
-
import {
|
|
2
|
+
import { promises as fs } from 'fs';
|
|
3
3
|
/**
|
|
4
4
|
* Resolves a given path and validates that it is within the allowed project root.
|
|
5
5
|
* Prevents path traversal attacks.
|
|
@@ -9,12 +9,12 @@ import { realpathSync, existsSync } from 'fs';
|
|
|
9
9
|
* @returns The resolved, validated absolute path.
|
|
10
10
|
* @throws Error if the path is outside the project root or does not exist (if mustExist is true).
|
|
11
11
|
*/
|
|
12
|
-
export function resolveAndValidatePath(projectRoot, userPath, mustExist = false) {
|
|
12
|
+
export async function resolveAndValidatePath(projectRoot, userPath, mustExist = false) {
|
|
13
13
|
// Check for null byte injection before any path operations
|
|
14
14
|
if (userPath.includes('\0')) {
|
|
15
15
|
throw new Error(`Path traversal detected`);
|
|
16
16
|
}
|
|
17
|
-
const absoluteProjectRoot =
|
|
17
|
+
const absoluteProjectRoot = await fs.realpath(projectRoot);
|
|
18
18
|
// For absolute paths, check if they start outside project root immediately
|
|
19
19
|
if (resolve(userPath) === userPath) { // userPath is absolute
|
|
20
20
|
if (!userPath.startsWith(absoluteProjectRoot + sep) && userPath !== absoluteProjectRoot) {
|
|
@@ -23,10 +23,17 @@ export function resolveAndValidatePath(projectRoot, userPath, mustExist = false)
|
|
|
23
23
|
}
|
|
24
24
|
const resolvedPath = resolve(absoluteProjectRoot, userPath);
|
|
25
25
|
let absoluteResolvedPath;
|
|
26
|
-
|
|
26
|
+
let pathExists = false;
|
|
27
|
+
try {
|
|
28
|
+
await fs.access(resolvedPath);
|
|
29
|
+
pathExists = true;
|
|
30
|
+
}
|
|
31
|
+
catch {
|
|
32
|
+
pathExists = false;
|
|
33
|
+
}
|
|
27
34
|
if (pathExists) {
|
|
28
|
-
// Use
|
|
29
|
-
absoluteResolvedPath =
|
|
35
|
+
// Use fs.realpath to resolve symlinks and detect traversal for existing paths
|
|
36
|
+
absoluteResolvedPath = await fs.realpath(resolvedPath);
|
|
30
37
|
}
|
|
31
38
|
else {
|
|
32
39
|
// For non-existent paths, use logical resolution for traversal detection
|
package/dist/utils.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,GAAG,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"utils.js","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,GAAG,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,QAAQ,IAAI,EAAE,EAAE,MAAM,IAAI,CAAC;AAEpC;;;;;;;;GAQG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,WAAmB,EACnB,QAAgB,EAChB,YAAqB,KAAK;IAE1B,2DAA2D;IAC3D,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,MAAM,mBAAmB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC;IAE3D,2EAA2E;IAC3E,IAAI,OAAO,CAAC,QAAQ,CAAC,KAAK,QAAQ,EAAE,CAAC,CAAC,uBAAuB;QAC3D,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,mBAAmB,GAAG,GAAG,CAAC,IAAI,QAAQ,KAAK,mBAAmB,EAAE,CAAC;YACxF,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;QAC7C,CAAC;IACH,CAAC;IAED,MAAM,YAAY,GAAG,OAAO,CAAC,mBAAmB,EAAE,QAAQ,CAAC,CAAC;IAE5D,IAAI,oBAA4B,CAAC;IACjC,IAAI,UAAU,GAAG,KAAK,CAAC;IAEvB,IAAI,CAAC;QACH,MAAM,EAAE,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC;QAC9B,UAAU,GAAG,IAAI,CAAC;IACpB,CAAC;IAAC,MAAM,CAAC;QACP,UAAU,GAAG,KAAK,CAAC;IACrB,CAAC;IAED,IAAI,UAAU,EAAE,CAAC;QACf,8EAA8E;QAC9E,oBAAoB,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC,CAAC;IACzD,CAAC;SAAM,CAAC;QACN,yEAAyE;QACzE,oBAAoB,GAAG,YAAY,CAAC;IACtC,CAAC;IAED,6DAA6D;IAC7D,IAAI,CAAC,oBAAoB,CAAC,UAAU,CAAC,mBAAmB,GAAG,GAAG,CAAC,IAAI,oBAAoB,KAAK,mBAAmB,EAAE,CAAC;QAChH,MAAM,IAAI,KAAK,CAAC,yBAAyB,CAAC,CAAC;IAC7C,CAAC;IAED,IAAI,SAAS,IAAI,CAAC,UAAU,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,wBAAwB,QAAQ,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,OAAO,oBAAoB,CAAC;AAC9B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@brutalist/mcp",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.9.3",
|
|
4
4
|
"description": "Deploy Claude, Codex & Gemini CLI agents to demolish your work before users do. Real file analysis. Brutal honesty. Now with conversation continuation & intelligent pagination.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|