@brutalist/mcp 0.9.3 → 1.0.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.
Files changed (45) hide show
  1. package/README.md +12 -6
  2. package/dist/brutalist-server.d.ts +13 -4
  3. package/dist/brutalist-server.d.ts.map +1 -1
  4. package/dist/brutalist-server.js +357 -151
  5. package/dist/brutalist-server.js.map +1 -1
  6. package/dist/cli-agents.d.ts +1 -1
  7. package/dist/cli-agents.d.ts.map +1 -1
  8. package/dist/cli-agents.js +55 -47
  9. package/dist/cli-agents.js.map +1 -1
  10. package/dist/domains/argument-space.d.ts +3 -3
  11. package/dist/domains/argument-space.js +9 -9
  12. package/dist/domains/argument-space.js.map +1 -1
  13. package/dist/domains/critique-domain.d.ts +12 -0
  14. package/dist/domains/critique-domain.d.ts.map +1 -1
  15. package/dist/domains/critique-domain.js +12 -1
  16. package/dist/domains/critique-domain.js.map +1 -1
  17. package/dist/generators/tool-generator.d.ts.map +1 -1
  18. package/dist/generators/tool-generator.js +5 -5
  19. package/dist/generators/tool-generator.js.map +1 -1
  20. package/dist/handlers/tool-handler.d.ts.map +1 -1
  21. package/dist/handlers/tool-handler.js +18 -10
  22. package/dist/handlers/tool-handler.js.map +1 -1
  23. package/dist/registry/domains.d.ts +10 -0
  24. package/dist/registry/domains.d.ts.map +1 -1
  25. package/dist/registry/domains.js +153 -11
  26. package/dist/registry/domains.js.map +1 -1
  27. package/dist/system-prompts.d.ts +8 -0
  28. package/dist/system-prompts.d.ts.map +1 -0
  29. package/dist/system-prompts.js +596 -0
  30. package/dist/system-prompts.js.map +1 -0
  31. package/dist/tool-definitions.d.ts +20 -1
  32. package/dist/tool-definitions.d.ts.map +1 -1
  33. package/dist/tool-definitions.js +42 -213
  34. package/dist/tool-definitions.js.map +1 -1
  35. package/dist/tool-router.d.ts +12 -0
  36. package/dist/tool-router.d.ts.map +1 -0
  37. package/dist/tool-router.js +59 -0
  38. package/dist/tool-router.js.map +1 -0
  39. package/dist/types/brutalist.d.ts +1 -0
  40. package/dist/types/brutalist.d.ts.map +1 -1
  41. package/dist/types/tool-config.d.ts +4 -3
  42. package/dist/types/tool-config.d.ts.map +1 -1
  43. package/dist/types/tool-config.js +7 -6
  44. package/dist/types/tool-config.js.map +1 -1
  45. package/package.json +1 -1
@@ -1,217 +1,46 @@
1
- import { z } from 'zod';
1
+ import { generateAllToolConfigs, getDomain, generateToolConfig, DOMAINS } from './registry/domains.js';
2
2
  /**
3
- * All brutalist tool configurations
3
+ * Tool configurations - now generated from the domain registry.
4
+ * This maintains backwards compatibility while eliminating duplication.
5
+ *
6
+ * LAZY LOADING: Configs are generated on first access and cached.
4
7
  */
5
- export const TOOL_CONFIGS = [
6
- {
7
- name: "roast_codebase",
8
- description: "Deploy brutal AI critics to systematically destroy your entire codebase. These AI agents will navigate your directories, read your actual files, and find every architectural disaster, security vulnerability, and maintainability nightmare lurking in your project. They treat this like code that will kill people if it fails.",
9
- analysisType: "codebase",
10
- systemPrompt: "You are a battle-scarred principal engineer who has debugged production disasters for 15 years. IMPORTANT: You have READ-ONLY filesystem access. You can read and analyze files but MUST NOT write, modify, delete, or execute any code. Find security holes, performance bottlenecks, and maintainability nightmares by reading this codebase. Be brutal about what's broken but specific about what would actually work. Treat this like code that will kill people if it fails.",
11
- schemaExtensions: {
12
- targetPath: z.string().describe("Directory path to your codebase (NOT a single file - analyze the entire project)")
13
- },
14
- cacheKeyFields: ['targetPath', 'context', 'models', 'preferredCLI'],
15
- primaryArgField: 'targetPath'
16
- },
17
- {
18
- name: "roast_file_structure",
19
- description: "Deploy brutal AI critics to systematically destroy your file organization. These agents will navigate your actual directory structure and expose every organizational disaster, naming convention failure, and structural nightmare that makes your codebase unmaintainable.",
20
- analysisType: "fileStructure",
21
- systemPrompt: "You are a brutal file organization critic. IMPORTANT: You have READ-ONLY access to the filesystem. You can read directory structures and file names but MUST NOT modify, move, rename, or delete anything. Every poorly named file, every misplaced module, every violation of separation of concerns is a personal insult. Find the chaos in this file structure and explain why it will cause maintenance nightmares.",
22
- schemaExtensions: {
23
- targetPath: z.string().describe("Directory path to analyze"),
24
- depth: z.number().optional().describe("Maximum directory depth to analyze (default: 3)")
25
- },
26
- cacheKeyFields: ['targetPath', 'depth', 'context'],
27
- primaryArgField: 'targetPath',
28
- contextBuilder: (args) => `Project structure analysis (depth: ${args.depth || 3}). ${args.context || ''}`
29
- },
30
- {
31
- name: "roast_dependencies",
32
- description: "Deploy brutal AI critics to systematically destroy your dependency management. These agents will read your actual package files, analyze version conflicts, and expose every security vulnerability and compatibility nightmare in your dependency tree.",
33
- analysisType: "dependencies",
34
- systemPrompt: "You are a dependency management nightmare detector. IMPORTANT: You have READ-ONLY filesystem access. You can read package files and analyze dependencies but MUST NOT modify, install, or update any packages. Find every security vulnerability, version conflict, unmaintained package, and bloated dependency. Explain why this dependency tree will collapse in production.",
35
- schemaExtensions: {
36
- targetPath: z.string().describe("Path to package file (package.json, requirements.txt, Cargo.toml, etc.)"),
37
- includeDevDeps: z.boolean().optional().describe("Include development dependencies in analysis (default: true)")
38
- },
39
- cacheKeyFields: ['targetPath', 'includeDevDeps', 'context'],
40
- primaryArgField: 'targetPath',
41
- contextBuilder: (args) => `Dependency analysis${args.includeDevDeps === false ? ' (production only)' : ''}. ${args.context || ''}`
42
- },
43
- {
44
- name: "roast_git_history",
45
- description: "Deploy brutal AI critics to systematically destroy your git history and development practices. These agents will analyze your actual commit history, branching strategy, and code evolution to expose every workflow disaster and collaboration nightmare.",
46
- analysisType: "gitHistory",
47
- systemPrompt: "You are a git history forensics expert who has seen every version control disaster. IMPORTANT: You have READ-ONLY access to the git repository. You can read commit history, branches, and logs but MUST NOT commit, push, merge, or modify the repository. Find the terrible commit messages, the force pushes, the merge conflicts, the development workflow failures. Explain why this git history shows a team in chaos.",
48
- schemaExtensions: {
49
- targetPath: z.string().describe("Git repository path to analyze"),
50
- commitRange: z.string().optional().describe("Commit range to analyze (e.g., 'HEAD~10..HEAD', default: last 20 commits)")
51
- },
52
- cacheKeyFields: ['targetPath', 'commitRange', 'context'],
53
- primaryArgField: 'targetPath',
54
- contextBuilder: (args) => `Git history analysis${args.commitRange ? ` for ${args.commitRange}` : ' (last 20 commits)'}. ${args.context || ''}`
55
- },
56
- {
57
- name: "roast_test_coverage",
58
- description: "Deploy brutal AI critics to systematically destroy your testing strategy. These agents will analyze your actual test files, run coverage reports, and expose every testing gap and quality assurance nightmare that will let bugs slip into production.",
59
- analysisType: "testCoverage",
60
- systemPrompt: "You are a QA engineer who has seen production disasters caused by inadequate testing. IMPORTANT: You have READ-ONLY filesystem access. You can read test files and analyze coverage but MUST NOT run tests, modify test files, or execute any code. Find the untested code paths, the missing edge cases, the brittle tests, the false confidence. Explain why this testing strategy guarantees production failures.",
61
- schemaExtensions: {
62
- targetPath: z.string().describe("Path to test directory or test configuration file"),
63
- runCoverage: z.boolean().optional().describe("Attempt to run coverage analysis (default: true)")
64
- },
65
- cacheKeyFields: ['targetPath', 'runCoverage', 'context'],
66
- primaryArgField: 'targetPath',
67
- contextBuilder: (args) => `Test coverage analysis${args.runCoverage === false ? ' (static analysis only)' : ''}. ${args.context || ''}`
68
- },
69
- {
70
- name: "roast_idea",
71
- description: "Deploy brutal AI critics to systematically destroy ANY idea - business, technical, creative, or otherwise. These critics understand the gap between imagination and reality, finding where your concept will encounter the immovable forces of the world. They are harsh about delusions but wise about what might actually survive.",
72
- analysisType: "idea",
73
- systemPrompt: "You are a brutal reality-checker who has watched a thousand startups die and brilliant ideas fail. Find every flaw in feasibility, every market delusion, every technical impossibility, every human factor that will kill this idea. After destroying it, grudgingly admit what tiny kernel might actually work.",
74
- schemaExtensions: {
75
- idea: z.string().describe("ANY idea to analyze and demolish - business, technical, creative, or otherwise"),
76
- targetPath: z.string().describe("Directory context for CLI execution (can be '.' for current directory)"),
77
- resources: z.string().optional().describe("Available resources (budget, team, time, skills)"),
78
- timeline: z.string().optional().describe("Expected timeline or deadline")
79
- },
80
- cacheKeyFields: ['idea', 'targetPath', 'resources', 'timeline', 'context'],
81
- primaryArgField: 'idea',
82
- contextBuilder: (args) => {
83
- let ctx = args.context || '';
84
- if (args.resources)
85
- ctx += ` Resources: ${args.resources}.`;
86
- if (args.timeline)
87
- ctx += ` Timeline: ${args.timeline}.`;
88
- return ctx.trim();
89
- }
90
- },
91
- {
92
- name: "roast_architecture",
93
- description: "Deploy brutal AI critics to systematically destroy your system architecture. These critics have watched elegant designs collapse under real load, identifying every bottleneck, cost explosion, and scaling failure that will destroy your system. They are ruthless about why this won't survive production.",
94
- analysisType: "architecture",
95
- systemPrompt: "You are an architect who has watched beautiful systems die under load. Find every single point of failure, every scaling bottleneck, every cost explosion, every complexity trap. Explain why this architecture will crumble when it meets reality.",
96
- schemaExtensions: {
97
- architecture: z.string().describe("Architecture description, diagram, or design document"),
98
- targetPath: z.string().describe("Directory context for CLI execution (can be '.' for current directory)"),
99
- scale: z.string().optional().describe("Expected scale/load (users, requests, data)"),
100
- constraints: z.string().optional().describe("Budget, timeline, or technical constraints"),
101
- deployment: z.string().optional().describe("Deployment environment and strategy")
102
- },
103
- cacheKeyFields: ['architecture', 'targetPath', 'scale', 'constraints', 'deployment', 'context'],
104
- primaryArgField: 'architecture',
105
- contextBuilder: (args) => {
106
- let ctx = args.context || '';
107
- if (args.scale)
108
- ctx += ` Scale: ${args.scale}.`;
109
- if (args.constraints)
110
- ctx += ` Constraints: ${args.constraints}.`;
111
- if (args.deployment)
112
- ctx += ` Deployment: ${args.deployment}.`;
113
- return ctx.trim();
114
- }
115
- },
116
- {
117
- name: "roast_research",
118
- description: "Deploy brutal AI critics to systematically demolish your research methodology. These critics are supremely jaded peer reviewers who have rejected thousands of papers and watched countless studies fail to replicate. They find every statistical flaw, sampling bias, and reproducibility nightmare.",
119
- analysisType: "research",
120
- systemPrompt: "You are the harshest peer reviewer in academia. Find every methodological flaw, every statistical error, every sampling bias, every p-hacking attempt, every reproducibility crisis waiting to happen. Demolish this research with the fury of someone who has seen too much bad science.",
121
- schemaExtensions: {
122
- research: z.string().describe("Research description, methodology, or paper draft"),
123
- targetPath: z.string().describe("Directory context for CLI execution (can be '.' for current directory)"),
124
- field: z.string().optional().describe("Research field (ML, systems, theory, etc.)"),
125
- claims: z.string().optional().describe("Main claims or contributions"),
126
- data: z.string().optional().describe("Data sources, datasets, or experimental setup")
127
- },
128
- cacheKeyFields: ['research', 'targetPath', 'field', 'claims', 'data', 'context'],
129
- primaryArgField: 'research',
130
- contextBuilder: (args) => {
131
- let ctx = args.context || '';
132
- if (args.field)
133
- ctx += ` Field: ${args.field}.`;
134
- if (args.claims)
135
- ctx += ` Claims: ${args.claims}.`;
136
- if (args.data)
137
- ctx += ` Data: ${args.data}.`;
138
- return ctx.trim();
139
- }
140
- },
141
- {
142
- name: "roast_security",
143
- description: "Deploy brutal AI critics to systematically annihilate your security design. These critics are battle-hardened penetration testers who find every authentication bypass, injection vulnerability, privilege escalation path, and social engineering opportunity that real attackers will exploit.",
144
- analysisType: "security",
145
- systemPrompt: "You are a penetration tester who has broken into everything. Find every authentication weakness, every injection point, every privilege escalation, every side channel, every social engineering vector. Explain how attackers will destroy this system.",
146
- schemaExtensions: {
147
- system: z.string().describe("System, application, or security design to analyze"),
148
- targetPath: z.string().describe("Directory context for CLI execution (can be '.' for current directory)"),
149
- assets: z.string().optional().describe("Critical assets or data to protect"),
150
- threatModel: z.string().optional().describe("Known threats or attack vectors to consider"),
151
- compliance: z.string().optional().describe("Compliance requirements (GDPR, HIPAA, etc.)")
152
- },
153
- cacheKeyFields: ['system', 'targetPath', 'assets', 'threatModel', 'compliance', 'context'],
154
- primaryArgField: 'system',
155
- contextBuilder: (args) => {
156
- let ctx = args.context || '';
157
- if (args.assets)
158
- ctx += ` Assets: ${args.assets}.`;
159
- if (args.threatModel)
160
- ctx += ` Threats: ${args.threatModel}.`;
161
- if (args.compliance)
162
- ctx += ` Compliance: ${args.compliance}.`;
163
- return ctx.trim();
164
- }
165
- },
166
- {
167
- name: "roast_product",
168
- description: "Deploy brutal AI critics to systematically eviscerate your product concept. These critics are product veterans who understand why users really abandon things, finding every usability disaster, adoption barrier, and workflow failure that will drive users away in seconds.",
169
- analysisType: "product",
170
- systemPrompt: "You are a product critic who has watched thousands of products die. Find every UX disaster, every adoption barrier, every workflow failure, every assumption about user behavior that is wrong. Explain why users will abandon this in seconds.",
171
- schemaExtensions: {
172
- product: z.string().describe("Product description, features, or user experience to analyze"),
173
- targetPath: z.string().describe("Directory context for CLI execution (can be '.' for current directory)"),
174
- users: z.string().optional().describe("Target users or user personas"),
175
- competition: z.string().optional().describe("Competitive landscape or alternatives"),
176
- metrics: z.string().optional().describe("Success metrics or KPIs")
177
- },
178
- cacheKeyFields: ['product', 'targetPath', 'users', 'competition', 'metrics', 'context'],
179
- primaryArgField: 'product',
180
- contextBuilder: (args) => {
181
- let ctx = args.context || '';
182
- if (args.users)
183
- ctx += ` Users: ${args.users}.`;
184
- if (args.competition)
185
- ctx += ` Competition: ${args.competition}.`;
186
- if (args.metrics)
187
- ctx += ` Metrics: ${args.metrics}.`;
188
- return ctx.trim();
189
- }
190
- },
191
- {
192
- name: "roast_infrastructure",
193
- description: "Deploy brutal AI critics to systematically obliterate your infrastructure design. These critics are grizzled site reliability engineers who find every single point of failure, scaling bottleneck, and operational nightmare that will cause outages when you least expect them.",
194
- analysisType: "infrastructure",
195
- systemPrompt: "You are an SRE who has been paged at 3 AM too many times. Find every single point of failure, every missing redundancy, every scaling cliff, every operational nightmare. Explain why this infrastructure will fail catastrophically.",
196
- schemaExtensions: {
197
- infrastructure: z.string().describe("Infrastructure setup, deployment strategy, or operations plan"),
198
- targetPath: z.string().describe("Directory context for CLI execution (can be '.' for current directory)"),
199
- scale: z.string().optional().describe("Expected scale and load patterns"),
200
- sla: z.string().optional().describe("SLA requirements or uptime targets"),
201
- budget: z.string().optional().describe("Infrastructure budget or cost constraints")
202
- },
203
- cacheKeyFields: ['infrastructure', 'targetPath', 'scale', 'sla', 'budget', 'context'],
204
- primaryArgField: 'infrastructure',
205
- contextBuilder: (args) => {
206
- let ctx = args.context || '';
207
- if (args.scale)
208
- ctx += ` Scale: ${args.scale}.`;
209
- if (args.sla)
210
- ctx += ` SLA: ${args.sla}.`;
211
- if (args.budget)
212
- ctx += ` Budget: ${args.budget}.`;
213
- return ctx.trim();
214
- }
8
+ let _cachedToolConfigs = null;
9
+ /**
10
+ * Get all tool configurations.
11
+ * Uses lazy loading - configs are generated on first access and cached.
12
+ */
13
+ export function getToolConfigs() {
14
+ if (!_cachedToolConfigs) {
15
+ _cachedToolConfigs = generateAllToolConfigs();
215
16
  }
216
- ];
17
+ return _cachedToolConfigs;
18
+ }
19
+ /**
20
+ * Get a single tool configuration by domain ID (e.g., 'codebase', 'security').
21
+ * More efficient when you only need one tool.
22
+ */
23
+ export function getToolConfigByDomain(domainId) {
24
+ const domain = getDomain(domainId);
25
+ if (!domain)
26
+ return undefined;
27
+ return generateToolConfig(domain);
28
+ }
29
+ /**
30
+ * Get available domain IDs.
31
+ */
32
+ export function getAvailableDomains() {
33
+ return Object.values(DOMAINS).map(d => d.id);
34
+ }
35
+ /**
36
+ * Clear cached configs (for testing or dynamic reload).
37
+ */
38
+ export function clearToolConfigCache() {
39
+ _cachedToolConfigs = null;
40
+ }
41
+ /**
42
+ * @deprecated Use getToolConfigs() for lazy loading.
43
+ * This eager export is kept for backwards compatibility.
44
+ */
45
+ export const TOOL_CONFIGS = generateAllToolConfigs();
217
46
  //# sourceMappingURL=tool-definitions.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-definitions.js","sourceRoot":"","sources":["../src/tool-definitions.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"tool-definitions.js","sourceRoot":"","sources":["../src/tool-definitions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,sBAAsB,EAAE,SAAS,EAAE,kBAAkB,EAAE,OAAO,EAAE,MAAM,uBAAuB,CAAC;AAGvG;;;;;GAKG;AACH,IAAI,kBAAkB,GAAwB,IAAI,CAAC;AAEnD;;;GAGG;AACH,MAAM,UAAU,cAAc;IAC5B,IAAI,CAAC,kBAAkB,EAAE,CAAC;QACxB,kBAAkB,GAAG,sBAAsB,EAAE,CAAC;IAChD,CAAC;IACD,OAAO,kBAAkB,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,qBAAqB,CAAC,QAAgB;IACpD,MAAM,MAAM,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC;IACnC,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC9B,OAAO,kBAAkB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,OAAO,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB;IAClC,kBAAkB,GAAG,IAAI,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,sBAAsB,EAAE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { ToolConfig } from './types/tool-config.js';
2
+ /**
3
+ * Filter tools by intent string.
4
+ * Returns top 3 most relevant tools, or all tools if no intent provided.
5
+ */
6
+ export declare function filterToolsByIntent(intent?: string): ToolConfig[];
7
+ /**
8
+ * Get domain IDs that match an intent.
9
+ * Useful for logging and debugging.
10
+ */
11
+ export declare function getMatchingDomainIds(intent: string): string[];
12
+ //# sourceMappingURL=tool-router.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-router.d.ts","sourceRoot":"","sources":["../src/tool-router.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AA6BpD;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,UAAU,EAAE,CA2BjE;AAED;;;GAGG;AACH,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,EAAE,CAG7D"}
@@ -0,0 +1,59 @@
1
+ import { DOMAINS, generateToolConfig } from './registry/domains.js';
2
+ import { getToolConfigs } from './tool-definitions.js';
3
+ /**
4
+ * Calculate relevance score for a domain based on intent keywords
5
+ */
6
+ function calculateRelevance(domain, intentWords) {
7
+ let score = 0;
8
+ // Check keywords
9
+ for (const keyword of domain.keywords) {
10
+ for (const word of intentWords) {
11
+ if (keyword.includes(word) || word.includes(keyword)) {
12
+ score += 2; // Strong match
13
+ }
14
+ }
15
+ }
16
+ // Check domain name and description
17
+ const domainText = `${domain.name} ${domain.description}`.toLowerCase();
18
+ for (const word of intentWords) {
19
+ if (domainText.includes(word)) {
20
+ score += 1; // Weak match
21
+ }
22
+ }
23
+ return score;
24
+ }
25
+ /**
26
+ * Filter tools by intent string.
27
+ * Returns top 3 most relevant tools, or all tools if no intent provided.
28
+ */
29
+ export function filterToolsByIntent(intent) {
30
+ if (!intent || intent.trim() === '') {
31
+ return getToolConfigs();
32
+ }
33
+ const intentLower = intent.toLowerCase();
34
+ const intentWords = intentLower.split(/\s+/).filter(w => w.length > 2);
35
+ // Score each domain
36
+ const scored = Object.values(DOMAINS).map(domain => ({
37
+ domain,
38
+ score: calculateRelevance(domain, intentWords)
39
+ }));
40
+ // Sort by score descending
41
+ scored.sort((a, b) => b.score - a.score);
42
+ // Take top 3 with score > 0, or return all if no matches
43
+ const topMatches = scored.filter(s => s.score > 0).slice(0, 3);
44
+ if (topMatches.length === 0) {
45
+ // No matches - return all tools
46
+ return getToolConfigs();
47
+ }
48
+ // Generate configs for matched domains
49
+ return topMatches.map(s => generateToolConfig(s.domain));
50
+ }
51
+ /**
52
+ * Get domain IDs that match an intent.
53
+ * Useful for logging and debugging.
54
+ */
55
+ export function getMatchingDomainIds(intent) {
56
+ const filtered = filterToolsByIntent(intent);
57
+ return filtered.map(t => t.name.replace('roast_', ''));
58
+ }
59
+ //# sourceMappingURL=tool-router.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"tool-router.js","sourceRoot":"","sources":["../src/tool-router.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAa,kBAAkB,EAAE,MAAM,uBAAuB,CAAC;AAE/E,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAEvD;;GAEG;AACH,SAAS,kBAAkB,CAAC,MAA4C,EAAE,WAAqB;IAC7F,IAAI,KAAK,GAAG,CAAC,CAAC;IAEd,iBAAiB;IACjB,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,IAAI,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACrD,KAAK,IAAI,CAAC,CAAC,CAAC,eAAe;YAC7B,CAAC;QACH,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,MAAM,UAAU,GAAG,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC,WAAW,EAAE,CAAC;IACxE,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;QAC/B,IAAI,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;YAC9B,KAAK,IAAI,CAAC,CAAC,CAAC,aAAa;QAC3B,CAAC;IACH,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,MAAe;IACjD,IAAI,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,EAAE,KAAK,EAAE,EAAE,CAAC;QACpC,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,WAAW,EAAE,CAAC;IACzC,MAAM,WAAW,GAAG,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAEvE,oBAAoB;IACpB,MAAM,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC;QACnD,MAAM;QACN,KAAK,EAAE,kBAAkB,CAAC,MAAM,EAAE,WAAW,CAAC;KAC/C,CAAC,CAAC,CAAC;IAEJ,2BAA2B;IAC3B,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC;IAEzC,yDAAyD;IACzD,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;IAE/D,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,gCAAgC;QAChC,OAAO,cAAc,EAAE,CAAC;IAC1B,CAAC;IAED,uCAAuC;IACvC,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,kBAAkB,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC;AAC3D,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,oBAAoB,CAAC,MAAc;IACjD,MAAM,QAAQ,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAC7C,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;AACzD,CAAC"}
@@ -65,6 +65,7 @@ export interface BrutalistResponse {
65
65
  error?: string;
66
66
  analysisType?: string;
67
67
  targetPath?: string;
68
+ topic?: string;
68
69
  executionSummary?: {
69
70
  totalCLIs: number;
70
71
  successfulCLIs: number;
@@ -1 +1 @@
1
- {"version":3,"file":"brutalist.d.ts","sourceRoot":"","sources":["../../src/types/brutalist.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brutalist.d.ts","sourceRoot":"","sources":["../../src/types/brutalist.ts"],"names":[],"mappings":"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"}
@@ -10,8 +10,8 @@ export interface ToolConfig {
10
10
  description: string;
11
11
  /** Analysis type for CLI orchestrator */
12
12
  analysisType: BrutalistPromptType;
13
- /** System prompt for the brutal AI critics */
14
- systemPrompt: string;
13
+ /** @deprecated System prompts now live in system-prompts.ts and are retrieved at execution time */
14
+ systemPrompt?: string;
15
15
  /** Tool-specific schema extensions beyond base parameters */
16
16
  schemaExtensions: ZodRawShape;
17
17
  /** Fields to include in cache key generation */
@@ -27,7 +27,7 @@ export interface ToolConfig {
27
27
  export declare const BASE_ROAST_SCHEMA: {
28
28
  context: z.ZodOptional<z.ZodString>;
29
29
  workingDirectory: z.ZodOptional<z.ZodString>;
30
- preferredCLI: z.ZodOptional<z.ZodEnum<["claude", "codex", "gemini"]>>;
30
+ clis: z.ZodOptional<z.ZodArray<z.ZodEnum<["claude", "codex", "gemini"]>, "many">>;
31
31
  verbose: z.ZodOptional<z.ZodBoolean>;
32
32
  models: z.ZodOptional<z.ZodObject<{
33
33
  claude: z.ZodOptional<z.ZodString>;
@@ -46,6 +46,7 @@ export declare const BASE_ROAST_SCHEMA: {
46
46
  limit: z.ZodOptional<z.ZodNumber>;
47
47
  cursor: z.ZodOptional<z.ZodString>;
48
48
  context_id: z.ZodOptional<z.ZodString>;
49
+ resume: z.ZodOptional<z.ZodBoolean>;
49
50
  force_refresh: z.ZodOptional<z.ZodBoolean>;
50
51
  };
51
52
  //# sourceMappingURL=tool-config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"tool-config.d.ts","sourceRoot":"","sources":["../../src/types/tool-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,yCAAyC;IACzC,YAAY,EAAE,mBAAmB,CAAC;IAElC,8CAA8C;IAC9C,YAAY,EAAE,MAAM,CAAC;IAErB,6DAA6D;IAC7D,gBAAgB,EAAE,WAAW,CAAC;IAE9B,gDAAgD;IAChD,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,sCAAsC;IACtC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;IAEvC,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;CAoB7B,CAAC"}
1
+ {"version":3,"file":"tool-config.d.ts","sourceRoot":"","sources":["../../src/types/tool-config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,WAAW,EAAE,MAAM,KAAK,CAAC;AACrC,OAAO,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAEvD;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,yCAAyC;IACzC,IAAI,EAAE,MAAM,CAAC;IAEb,sCAAsC;IACtC,WAAW,EAAE,MAAM,CAAC;IAEpB,yCAAyC;IACzC,YAAY,EAAE,mBAAmB,CAAC;IAElC,mGAAmG;IACnG,YAAY,CAAC,EAAE,MAAM,CAAC;IAEtB,6DAA6D;IAC7D,gBAAgB,EAAE,WAAW,CAAC;IAE9B,gDAAgD;IAChD,cAAc,EAAE,MAAM,EAAE,CAAC;IAEzB,sCAAsC;IACtC,cAAc,CAAC,EAAE,CAAC,IAAI,EAAE,GAAG,KAAK,MAAM,CAAC;IAEvC,2DAA2D;IAC3D,eAAe,EAAE,MAAM,CAAC;CACzB;AAED;;GAEG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;CAqB7B,CAAC"}
@@ -6,7 +6,7 @@ export const BASE_ROAST_SCHEMA = {
6
6
  // Context and execution parameters
7
7
  context: z.string().optional().describe("Additional context about the analysis"),
8
8
  workingDirectory: z.string().optional().describe("Working directory to execute from"),
9
- preferredCLI: z.enum(["claude", "codex", "gemini"]).optional().describe("Preferred CLI agent to use (default: use all available CLIs)"),
9
+ clis: z.array(z.enum(["claude", "codex", "gemini"])).min(1).max(3).optional().describe("CLI agents to use (default: all available). Example: ['claude', 'gemini']"),
10
10
  verbose: z.boolean().optional().describe("Include detailed execution information in output (default: false)"),
11
11
  // Model selection - defaults prioritize frontier models with high capacity
12
12
  models: z.object({
@@ -14,11 +14,12 @@ export const BASE_ROAST_SCHEMA = {
14
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
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
- // Pagination parameters for large responses
18
- offset: z.number().min(0).optional().describe("Character offset for response pagination (default: 0)"),
19
- limit: z.number().min(1000).max(100000).optional().describe("Maximum characters per response chunk (default: 90000, max: 100000)"),
20
- cursor: z.string().optional().describe("Pagination cursor from previous response (alternative to offset/limit)"),
17
+ // Pagination and conversation continuation
18
+ offset: z.number().min(0).optional().describe("Pagination offset (default: 0)"),
19
+ limit: z.number().min(1000).max(100000).optional().describe("Max chars/chunk (default: 90000)"),
20
+ cursor: z.string().optional().describe("Pagination cursor"),
21
21
  context_id: z.string().optional().describe("Context ID from previous response to resume the conversation"),
22
- force_refresh: z.boolean().optional().describe("Force re-analysis even if cached result exists (default: false)")
22
+ resume: z.boolean().optional().describe("Continue conversation with history injection (requires context_id)"),
23
+ force_refresh: z.boolean().optional().describe("Ignore cache")
23
24
  };
24
25
  //# sourceMappingURL=tool-config.js.map
@@ -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,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"}
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,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2EAA2E,CAAC;IACnK,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,2CAA2C;IAC3C,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IAC/E,KAAK,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kCAAkC,CAAC;IAC/F,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mBAAmB,CAAC;IAC3D,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IAC1G,MAAM,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oEAAoE,CAAC;IAC7G,aAAa,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,cAAc,CAAC;CAC/D,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@brutalist/mcp",
3
- "version": "0.9.3",
3
+ "version": "1.0.0",
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",