@brutalist/mcp 1.8.0 → 1.9.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/README.md +26 -0
- package/dist/brutalist-server.d.ts +31 -9
- package/dist/brutalist-server.d.ts.map +1 -1
- package/dist/brutalist-server.js +107 -673
- package/dist/brutalist-server.js.map +1 -1
- package/dist/cli-adapters/claude-adapter.d.ts +25 -0
- package/dist/cli-adapters/claude-adapter.d.ts.map +1 -0
- package/dist/cli-adapters/claude-adapter.js +245 -0
- package/dist/cli-adapters/claude-adapter.js.map +1 -0
- package/dist/cli-adapters/codex-adapter.d.ts +23 -0
- package/dist/cli-adapters/codex-adapter.d.ts.map +1 -0
- package/dist/cli-adapters/codex-adapter.js +173 -0
- package/dist/cli-adapters/codex-adapter.js.map +1 -0
- package/dist/cli-adapters/gemini-adapter.d.ts +50 -0
- package/dist/cli-adapters/gemini-adapter.d.ts.map +1 -0
- package/dist/cli-adapters/gemini-adapter.js +196 -0
- package/dist/cli-adapters/gemini-adapter.js.map +1 -0
- package/dist/cli-adapters/index.d.ts +75 -0
- package/dist/cli-adapters/index.d.ts.map +1 -0
- package/dist/cli-adapters/index.js +29 -0
- package/dist/cli-adapters/index.js.map +1 -0
- package/dist/cli-adapters/shared.d.ts +12 -0
- package/dist/cli-adapters/shared.d.ts.map +1 -0
- package/dist/cli-adapters/shared.js +99 -0
- package/dist/cli-adapters/shared.js.map +1 -0
- package/dist/cli-agents.d.ts +64 -2
- package/dist/cli-agents.d.ts.map +1 -1
- package/dist/cli-agents.js +417 -401
- package/dist/cli-agents.js.map +1 -1
- package/dist/debate/constitutional.d.ts +27 -0
- package/dist/debate/constitutional.d.ts.map +1 -0
- package/dist/debate/constitutional.js +74 -0
- package/dist/debate/constitutional.js.map +1 -0
- package/dist/debate/debate-orchestrator.d.ts +154 -0
- package/dist/debate/debate-orchestrator.d.ts.map +1 -0
- package/dist/debate/debate-orchestrator.js +699 -0
- package/dist/debate/debate-orchestrator.js.map +1 -0
- package/dist/debate/index.d.ts +18 -0
- package/dist/debate/index.d.ts.map +1 -0
- package/dist/debate/index.js +18 -0
- package/dist/debate/index.js.map +1 -0
- package/dist/debate/refusal-detection.d.ts +27 -0
- package/dist/debate/refusal-detection.d.ts.map +1 -0
- package/dist/debate/refusal-detection.js +62 -0
- package/dist/debate/refusal-detection.js.map +1 -0
- package/dist/debate/synthesis.d.ts +22 -0
- package/dist/debate/synthesis.d.ts.map +1 -0
- package/dist/debate/synthesis.js +117 -0
- package/dist/debate/synthesis.js.map +1 -0
- package/dist/logger.d.ts +204 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +398 -18
- package/dist/logger.js.map +1 -1
- package/dist/metrics/counter.d.ts +24 -0
- package/dist/metrics/counter.d.ts.map +1 -0
- package/dist/metrics/counter.js +60 -0
- package/dist/metrics/counter.js.map +1 -0
- package/dist/metrics/histogram.d.ts +42 -0
- package/dist/metrics/histogram.d.ts.map +1 -0
- package/dist/metrics/histogram.js +114 -0
- package/dist/metrics/histogram.js.map +1 -0
- package/dist/metrics/index.d.ts +26 -0
- package/dist/metrics/index.d.ts.map +1 -0
- package/dist/metrics/index.js +22 -0
- package/dist/metrics/index.js.map +1 -0
- package/dist/metrics/registry.d.ts +96 -0
- package/dist/metrics/registry.d.ts.map +1 -0
- package/dist/metrics/registry.js +113 -0
- package/dist/metrics/registry.js.map +1 -0
- package/dist/metrics/safe-metric.d.ts +25 -0
- package/dist/metrics/safe-metric.d.ts.map +1 -0
- package/dist/metrics/safe-metric.js +41 -0
- package/dist/metrics/safe-metric.js.map +1 -0
- package/dist/metrics/types.d.ts +82 -0
- package/dist/metrics/types.d.ts.map +1 -0
- package/dist/metrics/types.js +121 -0
- package/dist/metrics/types.js.map +1 -0
- package/dist/registry/argument-spaces.d.ts.map +1 -1
- package/dist/registry/argument-spaces.js +20 -0
- package/dist/registry/argument-spaces.js.map +1 -1
- package/dist/registry/domains.d.ts.map +1 -1
- package/dist/registry/domains.js +17 -1
- package/dist/registry/domains.js.map +1 -1
- package/dist/streaming/circuit-breaker.d.ts +13 -1
- package/dist/streaming/circuit-breaker.d.ts.map +1 -1
- package/dist/streaming/circuit-breaker.js +13 -1
- package/dist/streaming/circuit-breaker.js.map +1 -1
- package/dist/streaming/intelligent-buffer.d.ts +13 -1
- package/dist/streaming/intelligent-buffer.d.ts.map +1 -1
- package/dist/streaming/intelligent-buffer.js +13 -1
- package/dist/streaming/intelligent-buffer.js.map +1 -1
- package/dist/streaming/output-parser.d.ts +16 -2
- package/dist/streaming/output-parser.d.ts.map +1 -1
- package/dist/streaming/output-parser.js +16 -2
- package/dist/streaming/output-parser.js.map +1 -1
- package/dist/streaming/progress-tracker.d.ts +14 -1
- package/dist/streaming/progress-tracker.d.ts.map +1 -1
- package/dist/streaming/progress-tracker.js +14 -1
- package/dist/streaming/progress-tracker.js.map +1 -1
- package/dist/streaming/session-manager.d.ts +14 -1
- package/dist/streaming/session-manager.d.ts.map +1 -1
- package/dist/streaming/session-manager.js +14 -1
- package/dist/streaming/session-manager.js.map +1 -1
- package/dist/streaming/sse-transport.d.ts +12 -1
- package/dist/streaming/sse-transport.d.ts.map +1 -1
- package/dist/streaming/sse-transport.js +12 -1
- package/dist/streaming/sse-transport.js.map +1 -1
- package/dist/streaming/streaming-orchestrator.d.ts +15 -1
- package/dist/streaming/streaming-orchestrator.d.ts.map +1 -1
- package/dist/streaming/streaming-orchestrator.js +15 -1
- package/dist/streaming/streaming-orchestrator.js.map +1 -1
- package/dist/system-prompts.d.ts.map +1 -1
- package/dist/system-prompts.js +490 -4
- package/dist/system-prompts.js.map +1 -1
- package/dist/tool-definitions-generated.d.ts.map +1 -1
- package/dist/tool-definitions-generated.js +3 -1
- package/dist/tool-definitions-generated.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -210,6 +210,8 @@ Features:
|
|
|
210
210
|
| `roast_security` | Attack vectors, authentication, authorization |
|
|
211
211
|
| `roast_product` | UX, adoption barriers, user needs |
|
|
212
212
|
| `roast_infrastructure` | Reliability, scaling, operational overhead |
|
|
213
|
+
| `roast_design` | Perceptual craft, typography, affordances (Playwright for live UIs) |
|
|
214
|
+
| `roast_legal` | Authority, application, adversary, procedure, interpretation, risk |
|
|
213
215
|
|
|
214
216
|
### Utilities
|
|
215
217
|
|
|
@@ -244,6 +246,30 @@ Different agents have different strengths:
|
|
|
244
246
|
- **Security**: Codex, Claude, Gemini
|
|
245
247
|
- **Research**: Claude, Gemini, Codex
|
|
246
248
|
|
|
249
|
+
### Verification-Heavy Domains
|
|
250
|
+
|
|
251
|
+
`legal`, `research`, and `security` ship with a mandatory verification protocol. Before citing any external authority (case, statute, study, CVE, advisory), agents must invoke their native web tools, lift a verbatim quote from the source, and tag the citation with one of:
|
|
252
|
+
|
|
253
|
+
- `[VERIFIED: <url> | "<verbatim quote supporting the attribution>"]`
|
|
254
|
+
- `[SUPPLIED: <location> | "<verbatim quote from supplied materials>"]`
|
|
255
|
+
- `[UNVERIFIED: <reason>]` — verification failed; no quote
|
|
256
|
+
|
|
257
|
+
Untagged citations are a protocol violation. The "state doctrine without a cite" fallback is conditional on a failed web lookup, not a parallel option. Consumers of the critique can spot-check citations by fetching the URL and grepping for the quoted string.
|
|
258
|
+
|
|
259
|
+
### Gemini Frontier Model Rotation
|
|
260
|
+
|
|
261
|
+
For Gemini, the server pins `gemini-3.1-pro-preview` as the default to prevent the CLI's Auto router from downselecting to `gemini-2.5-flash-lite` under verification load. When the preview tier is saturated (429 / "No capacity available"), the orchestrator automatically rotates through the frontier chain:
|
|
262
|
+
|
|
263
|
+
1. `gemini-3.1-pro-preview` (newest frontier)
|
|
264
|
+
2. `gemini-3-pro-preview` (previous frontier)
|
|
265
|
+
3. `gemini-2.5-pro` (stable last-gen frontier)
|
|
266
|
+
|
|
267
|
+
Overrides:
|
|
268
|
+
- Per-call: `roast(..., models={gemini: "gemini-2.5-flash"})` — caller chooses, no rotation.
|
|
269
|
+
- Per-environment: `BRUTALIST_GEMINI_MODEL=gemini-2.5-pro` — operator chooses, no rotation.
|
|
270
|
+
|
|
271
|
+
Rotation only fires on saturation signals (rate/usage/quota). Non-saturation failures (auth, subprocess, prompt errors) abort rotation immediately.
|
|
272
|
+
|
|
247
273
|
## Why Multiple Perspectives
|
|
248
274
|
|
|
249
275
|
Each CLI agent brings a different approach to analysis:
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { McpServer } from "@modelcontextprotocol/sdk/server/mcp.js";
|
|
2
|
+
import type { MetricsRegistry } from './metrics/index.js';
|
|
2
3
|
import { BrutalistServerConfig } from './types/brutalist.js';
|
|
3
4
|
/**
|
|
4
5
|
* BrutalistServer - Composition root for the Brutalist MCP Server
|
|
@@ -8,15 +9,38 @@ import { BrutalistServerConfig } from './types/brutalist.js';
|
|
|
8
9
|
* - ResponseFormatter: Handles all response formatting and pagination
|
|
9
10
|
* - HttpTransport: Manages HTTP server and CORS
|
|
10
11
|
* - ToolHandler: Handles roast tool execution, caching, and conversation continuation
|
|
12
|
+
* - DebateOrchestrator: Debate orchestration with 3-tier escalation (src/debate/)
|
|
11
13
|
*/
|
|
12
14
|
export declare class BrutalistServer {
|
|
13
15
|
server: McpServer;
|
|
14
16
|
config: BrutalistServerConfig;
|
|
15
|
-
private
|
|
17
|
+
private _cliOrchestrator;
|
|
16
18
|
private responseCache;
|
|
17
19
|
private formatter;
|
|
18
20
|
private toolHandler;
|
|
21
|
+
private debateOrchestrator;
|
|
19
22
|
private httpTransport?;
|
|
23
|
+
/**
|
|
24
|
+
* Observability: a single MetricsRegistry per BrutalistServer instance
|
|
25
|
+
* (not a module-level singleton — two BrutalistServers produce two
|
|
26
|
+
* independent registries, which keeps tests deterministic). Shared
|
|
27
|
+
* with DebateOrchestrator and CLIAgentOrchestrator; consumed by the
|
|
28
|
+
* streaming fan-out at handleStreamingEvent.
|
|
29
|
+
*/
|
|
30
|
+
protected readonly metrics: MetricsRegistry;
|
|
31
|
+
/**
|
|
32
|
+
* Per-subsystem scoped loggers bound at construction time. The module
|
|
33
|
+
* label is fixed at construction; sub-call sites narrow the operation
|
|
34
|
+
* label via `.forOperation(...)`. Bindings:
|
|
35
|
+
* - cliLog → module='cli-orchestrator', operation='spawn'
|
|
36
|
+
* - streamingLog → module='streaming', operation='dispatch'
|
|
37
|
+
* The debate scoped log is constructed inline at the DebateOrchestrator
|
|
38
|
+
* call site below (module='debate', operation='orchestrate').
|
|
39
|
+
*/
|
|
40
|
+
private readonly cliLog;
|
|
41
|
+
private readonly streamingLog;
|
|
42
|
+
private get cliOrchestrator();
|
|
43
|
+
private set cliOrchestrator(value);
|
|
20
44
|
private activeSessions;
|
|
21
45
|
private readonly MAX_SESSIONS;
|
|
22
46
|
private readonly SESSION_TTL_MS;
|
|
@@ -62,18 +86,16 @@ export declare class BrutalistServer {
|
|
|
62
86
|
*/
|
|
63
87
|
private handleUnifiedRoast;
|
|
64
88
|
/**
|
|
65
|
-
*
|
|
66
|
-
*
|
|
89
|
+
* Thin delegation to DebateOrchestrator.handleDebateToolExecution().
|
|
90
|
+
* Preserved as a method on BrutalistServer so that existing tests using
|
|
91
|
+
* `(server as any).handleDebateToolExecution(...)` continue to work.
|
|
67
92
|
*/
|
|
68
93
|
private handleDebateToolExecution;
|
|
69
94
|
/**
|
|
70
|
-
*
|
|
71
|
-
*
|
|
95
|
+
* Thin delegation to DebateOrchestrator.executeCLIDebate().
|
|
96
|
+
* Preserved as a method on BrutalistServer so that existing tests using
|
|
97
|
+
* `(server as any).executeCLIDebate(...)` continue to work.
|
|
72
98
|
*/
|
|
73
99
|
private executeCLIDebate;
|
|
74
|
-
/**
|
|
75
|
-
* Synthesize debate results into formatted output
|
|
76
|
-
*/
|
|
77
|
-
private synthesizeDebate;
|
|
78
100
|
}
|
|
79
101
|
//# sourceMappingURL=brutalist-server.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"brutalist-server.d.ts","sourceRoot":"","sources":["../src/brutalist-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;
|
|
1
|
+
{"version":3,"file":"brutalist-server.d.ts","sourceRoot":"","sources":["../src/brutalist-server.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,yCAAyC,CAAC;AAYpE,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,oBAAoB,CAAC;AAG1D,OAAO,EACL,qBAAqB,EAGtB,MAAM,sBAAsB,CAAC;AAiB9B;;;;;;;;;GASG;AACH,qBAAa,eAAe;IACnB,MAAM,EAAE,SAAS,CAAC;IAClB,MAAM,EAAE,qBAAqB,CAAC;IAKrC,OAAO,CAAC,gBAAgB,CAAwB;IAChD,OAAO,CAAC,aAAa,CAAgB;IAGrC,OAAO,CAAC,SAAS,CAAoB;IACrC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,kBAAkB,CAAsB;IAChD,OAAO,CAAC,aAAa,CAAC,CAAgB;IAEtC;;;;;;OAMG;IACH,SAAS,CAAC,QAAQ,CAAC,OAAO,EAAE,eAAe,CAA2B;IAEtE;;;;;;;;OAQG;IACH,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAe;IACtC,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAE5C,OAAO,KAAK,eAAe,GAE1B;IACD,OAAO,KAAK,eAAe,QAK1B;IAGD,OAAO,CAAC,cAAc,CAIjB;IAGL,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAS;IACtC,OAAO,CAAC,QAAQ,CAAC,cAAc,CAAuB;IACtD,OAAO,CAAC,mBAAmB,CAAC,CAAiB;gBAEjC,MAAM,GAAE,qBAA0B;IAsFxC,KAAK;YAeG,gBAAgB;YAMhB,eAAe;IActB,aAAa,IAAI,MAAM,GAAG,SAAS;IAK7B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAMlC;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAc5B;;;OAGG;IACI,qBAAqB,IAAI,IAAI;IAcvB,OAAO,IAAI,OAAO,CAAC,IAAI,CAAC;IAkBrC;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAgF1B;IAEF;;OAEG;IACH,OAAO,CAAC,oBAAoB,CAyC1B;IAEF;;;;;;OAMG;IACH,OAAO,CAAC,aAAa;IASrB;;OAEG;IACH,OAAO,CAAC,oBAAoB;IAwO5B;;OAEG;YACW,kBAAkB;IA2EhC;;;;OAIG;YACW,yBAAyB;IAIvC;;;;OAIG;YACW,gBAAgB;CAG/B"}
|