tryassay 0.34.0 → 0.35.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/dist/bayesian/__tests__/bas-calculator.test.d.ts +1 -0
- package/dist/bayesian/__tests__/bas-calculator.test.js +63 -0
- package/dist/bayesian/__tests__/bas-calculator.test.js.map +1 -0
- package/dist/bayesian/__tests__/structural-entropy.test.d.ts +1 -0
- package/dist/bayesian/__tests__/structural-entropy.test.js +21 -0
- package/dist/bayesian/__tests__/structural-entropy.test.js.map +1 -0
- package/dist/bayesian/bas-calculator.d.ts +41 -0
- package/dist/bayesian/bas-calculator.js +198 -0
- package/dist/bayesian/bas-calculator.js.map +1 -0
- package/dist/bayesian/index.d.ts +3 -0
- package/dist/bayesian/index.js +3 -0
- package/dist/bayesian/index.js.map +1 -0
- package/dist/bayesian/structural-entropy.d.ts +12 -0
- package/dist/bayesian/structural-entropy.js +37 -0
- package/dist/bayesian/structural-entropy.js.map +1 -0
- package/dist/bayesian/types.d.ts +37 -0
- package/dist/bayesian/types.js +6 -0
- package/dist/bayesian/types.js.map +1 -0
- package/dist/cli.js +28 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/__tests__/assess-formal.test.d.ts +1 -0
- package/dist/commands/__tests__/assess-formal.test.js +72 -0
- package/dist/commands/__tests__/assess-formal.test.js.map +1 -0
- package/dist/commands/activate.d.ts +1 -0
- package/dist/commands/activate.js +48 -0
- package/dist/commands/activate.js.map +1 -0
- package/dist/commands/assess.js +100 -5
- package/dist/commands/assess.js.map +1 -1
- package/dist/commands/bas-score.d.ts +13 -0
- package/dist/commands/bas-score.js +310 -0
- package/dist/commands/bas-score.js.map +1 -0
- package/dist/commands/bounty-watch.js.map +1 -1
- package/dist/commands/hunt.js +32 -0
- package/dist/commands/hunt.js.map +1 -1
- package/dist/commands/runtime.js +11 -10
- package/dist/commands/runtime.js.map +1 -1
- package/dist/commands/stream-verify.d.ts +16 -0
- package/dist/commands/stream-verify.js +228 -0
- package/dist/commands/stream-verify.js.map +1 -0
- package/dist/commands/watch.js.map +1 -1
- package/dist/hunt/__tests__/deep-dive.test.js.map +1 -1
- package/dist/hunt/__tests__/e2e.test.js.map +1 -1
- package/dist/hunt/__tests__/finding-to-template.test.js +10 -1
- package/dist/hunt/__tests__/finding-to-template.test.js.map +1 -1
- package/dist/hunt/__tests__/orchestrator.test.js.map +1 -1
- package/dist/hunt/__tests__/templates.test.js +2 -2
- package/dist/hunt/__tests__/triage.test.js.map +1 -1
- package/dist/hunt/deep-dive.js +7 -7
- package/dist/hunt/deep-dive.js.map +1 -1
- package/dist/hunt/parse-utils.d.ts +1 -1
- package/dist/hunt/state.js.map +1 -1
- package/dist/hunt/templates/injection.js +1 -1
- package/dist/hunt/templates/injection.js.map +1 -1
- package/dist/hunt/triage.js +5 -5
- package/dist/hunt/triage.js.map +1 -1
- package/dist/lib/__tests__/arithmetic-quick-test.js +10 -9
- package/dist/lib/__tests__/arithmetic-quick-test.js.map +1 -1
- package/dist/lib/__tests__/arithmetic-real-llm-test.js +8 -8
- package/dist/lib/__tests__/arithmetic-real-llm-test.js.map +1 -1
- package/dist/lib/__tests__/formal-verifier-behavioral.test.d.ts +18 -0
- package/dist/lib/__tests__/formal-verifier-behavioral.test.js +576 -0
- package/dist/lib/__tests__/formal-verifier-behavioral.test.js.map +1 -0
- package/dist/lib/__tests__/formal-verifier-claimless-async.test.d.ts +1 -0
- package/dist/lib/__tests__/formal-verifier-claimless-async.test.js +154 -0
- package/dist/lib/__tests__/formal-verifier-claimless-async.test.js.map +1 -0
- package/dist/lib/__tests__/formal-verifier-claimless-quality.test.d.ts +1 -0
- package/dist/lib/__tests__/formal-verifier-claimless-quality.test.js +121 -0
- package/dist/lib/__tests__/formal-verifier-claimless-quality.test.js.map +1 -0
- package/dist/lib/__tests__/formal-verifier-claimless-realworld.test.d.ts +1 -0
- package/dist/lib/__tests__/formal-verifier-claimless-realworld.test.js +119 -0
- package/dist/lib/__tests__/formal-verifier-claimless-realworld.test.js.map +1 -0
- package/dist/lib/__tests__/formal-verifier-claimless.test.d.ts +1 -0
- package/dist/lib/__tests__/formal-verifier-claimless.test.js +667 -0
- package/dist/lib/__tests__/formal-verifier-claimless.test.js.map +1 -0
- package/dist/lib/__tests__/mr-gsm8k-benchmark.js +6 -6
- package/dist/lib/__tests__/mr-gsm8k-benchmark.js.map +1 -1
- package/dist/lib/__tests__/pr-harvester.test.js.map +1 -1
- package/dist/lib/assessment-reporter.d.ts +1 -1
- package/dist/lib/assessment-reporter.js +2 -1
- package/dist/lib/assessment-reporter.js.map +1 -1
- package/dist/lib/chain-analyzer.d.ts +4 -3
- package/dist/lib/chain-analyzer.js.map +1 -1
- package/dist/lib/formal-verifier.d.ts +20 -1
- package/dist/lib/formal-verifier.js +1180 -23
- package/dist/lib/formal-verifier.js.map +1 -1
- package/dist/lib/issue-reporter.d.ts +2 -1
- package/dist/lib/issue-reporter.js.map +1 -1
- package/dist/lib/remediation-generator.js.map +1 -1
- package/dist/lib/report-generator.js.map +1 -1
- package/dist/lib/rule-harvester/ground-truth.js +13 -2
- package/dist/lib/rule-harvester/ground-truth.js.map +1 -1
- package/dist/lib/rule-harvester/scanner.d.ts +1 -1
- package/dist/lib/user-config.d.ts +1 -0
- package/dist/lib/user-config.js.map +1 -1
- package/dist/realtime/__tests__/entropy-detector.test.d.ts +1 -0
- package/dist/realtime/__tests__/entropy-detector.test.js +200 -0
- package/dist/realtime/__tests__/entropy-detector.test.js.map +1 -0
- package/dist/realtime/__tests__/entropy-live-demo.d.ts +1 -0
- package/dist/realtime/__tests__/entropy-live-demo.js +103 -0
- package/dist/realtime/__tests__/entropy-live-demo.js.map +1 -0
- package/dist/realtime/__tests__/entropy-live.d.ts +8 -0
- package/dist/realtime/__tests__/entropy-live.js +114 -0
- package/dist/realtime/__tests__/entropy-live.js.map +1 -0
- package/dist/realtime/__tests__/streaming-checks.test.js +3 -4
- package/dist/realtime/__tests__/streaming-checks.test.js.map +1 -1
- package/dist/realtime/entropy-detector.d.ts +143 -0
- package/dist/realtime/entropy-detector.js +504 -0
- package/dist/realtime/entropy-detector.js.map +1 -0
- package/dist/realtime/mcp-server.d.ts +7 -1
- package/dist/realtime/mcp-server.js +378 -2
- package/dist/realtime/mcp-server.js.map +1 -1
- package/dist/realtime/stream-interceptor.d.ts +28 -0
- package/dist/realtime/stream-interceptor.js +204 -0
- package/dist/realtime/stream-interceptor.js.map +1 -1
- package/dist/realtime/streaming-checks.js +28 -0
- package/dist/realtime/streaming-checks.js.map +1 -1
- package/dist/realtime/streaming-verifier.d.ts +45 -0
- package/dist/realtime/streaming-verifier.js +98 -5
- package/dist/realtime/streaming-verifier.js.map +1 -1
- package/dist/realtime/types.d.ts +56 -0
- package/dist/runtime/agents/research-agent.js +10 -1
- package/dist/runtime/agents/research-agent.js.map +1 -1
- package/dist/runtime/agents/test-agent.js +10 -7
- package/dist/runtime/agents/test-agent.js.map +1 -1
- package/dist/runtime/composition-verifier.js +13 -3
- package/dist/runtime/composition-verifier.js.map +1 -1
- package/dist/runtime/fs-helpers.js.map +1 -1
- package/dist/runtime/prompt-safety-analyzer.js.map +1 -1
- package/dist/sdk/verified-generate.js.map +1 -1
- package/dist/types.d.ts +14 -0
- package/package.json +3 -2
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Server for Assay real-time verification.
|
|
3
3
|
*
|
|
4
|
-
* Exposes
|
|
4
|
+
* Exposes tools over stdio transport:
|
|
5
5
|
* - verify_code: One-shot verification of a code snippet
|
|
6
6
|
* - verify_and_fix: Verify code and return fix suggestions
|
|
7
|
+
* - stream_verify: BAS-guided verification with optional logprobs
|
|
8
|
+
* - get_annotations: Cached annotations from last stream_verify
|
|
9
|
+
* - configure: Set BAS thresholds
|
|
10
|
+
*
|
|
11
|
+
* Resources:
|
|
12
|
+
* - assay://bas_heatmap: Per-token BAS scores (unstable, debugging)
|
|
7
13
|
*
|
|
8
14
|
* Usage with Claude Code:
|
|
9
15
|
* npx tryassay mcp
|
|
@@ -1,9 +1,15 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* MCP Server for Assay real-time verification.
|
|
3
3
|
*
|
|
4
|
-
* Exposes
|
|
4
|
+
* Exposes tools over stdio transport:
|
|
5
5
|
* - verify_code: One-shot verification of a code snippet
|
|
6
6
|
* - verify_and_fix: Verify code and return fix suggestions
|
|
7
|
+
* - stream_verify: BAS-guided verification with optional logprobs
|
|
8
|
+
* - get_annotations: Cached annotations from last stream_verify
|
|
9
|
+
* - configure: Set BAS thresholds
|
|
10
|
+
*
|
|
11
|
+
* Resources:
|
|
12
|
+
* - assay://bas_heatmap: Per-token BAS scores (unstable, debugging)
|
|
7
13
|
*
|
|
8
14
|
* Usage with Claude Code:
|
|
9
15
|
* npx tryassay mcp
|
|
@@ -13,8 +19,22 @@
|
|
|
13
19
|
*/
|
|
14
20
|
import { Server } from '@modelcontextprotocol/sdk/server/index.js';
|
|
15
21
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
16
|
-
import { CallToolRequestSchema, ListToolsRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
22
|
+
import { CallToolRequestSchema, ListToolsRequestSchema, ListResourcesRequestSchema, ReadResourceRequestSchema, } from '@modelcontextprotocol/sdk/types.js';
|
|
17
23
|
import { StreamingVerifier } from './streaming-verifier.js';
|
|
24
|
+
import { EntropyDetector } from './entropy-detector.js';
|
|
25
|
+
import { BASCalculator } from '../bayesian/bas-calculator.js';
|
|
26
|
+
import { learnFromFinding } from '../lib/learned-rules/index.js';
|
|
27
|
+
// ── Server state (cached between calls) ─────────────────────
|
|
28
|
+
let lastAnnotations = [];
|
|
29
|
+
let lastBASHeatmap = [];
|
|
30
|
+
let basConfig = {
|
|
31
|
+
greenThreshold: 0.3,
|
|
32
|
+
redThreshold: 0.7,
|
|
33
|
+
weights: {
|
|
34
|
+
weights: [0.35, 0.25, -0.30, -0.10, 0.20, 0.15, 0.10, 0.20],
|
|
35
|
+
intercept: -0.5,
|
|
36
|
+
},
|
|
37
|
+
};
|
|
18
38
|
// ── Core verification logic ─────────────────────────────────
|
|
19
39
|
function verifyCode(code, language, projectPath) {
|
|
20
40
|
const verifier = new StreamingVerifier({
|
|
@@ -62,6 +82,151 @@ function buildFixInstructions(findings) {
|
|
|
62
82
|
lines.push('Apply the fixes above and re-verify to confirm resolution.');
|
|
63
83
|
return lines.join('\n');
|
|
64
84
|
}
|
|
85
|
+
// ── BAS-guided stream verification ──────────────────────────
|
|
86
|
+
function streamVerify(code, language, logprobs) {
|
|
87
|
+
const hasLogprobs = logprobs && logprobs.length > 0;
|
|
88
|
+
const mode = hasLogprobs ? 'bas-guided' : 'formal-only';
|
|
89
|
+
// Compute per-token BAS if logprobs provided
|
|
90
|
+
let basScores = [];
|
|
91
|
+
const perTokenHeatmap = [];
|
|
92
|
+
if (hasLogprobs) {
|
|
93
|
+
const calculator = new BASCalculator(basConfig);
|
|
94
|
+
calculator.setLanguage(language);
|
|
95
|
+
for (let i = 0; i < logprobs.length; i++) {
|
|
96
|
+
const lp = logprobs[i];
|
|
97
|
+
const tokenInput = {
|
|
98
|
+
token: lp.token,
|
|
99
|
+
topLogprobs: lp.top_logprobs.map(t => ({
|
|
100
|
+
token: t.token,
|
|
101
|
+
logprob: t.logprob,
|
|
102
|
+
})),
|
|
103
|
+
};
|
|
104
|
+
const result = calculator.processToken(tokenInput);
|
|
105
|
+
basScores.push(result);
|
|
106
|
+
perTokenHeatmap.push({
|
|
107
|
+
index: i,
|
|
108
|
+
token: lp.token,
|
|
109
|
+
score: Math.round(result.score * 1000) / 1000,
|
|
110
|
+
depth: result.depth,
|
|
111
|
+
});
|
|
112
|
+
}
|
|
113
|
+
}
|
|
114
|
+
// Create verifier with adaptive depth when BAS is available
|
|
115
|
+
const entropyDetector = hasLogprobs
|
|
116
|
+
? new EntropyDetector({ useLegacyDynamics: false, basConfig })
|
|
117
|
+
: undefined;
|
|
118
|
+
const verifier = new StreamingVerifier({
|
|
119
|
+
language,
|
|
120
|
+
adaptiveDepth: hasLogprobs,
|
|
121
|
+
entropyDetector,
|
|
122
|
+
});
|
|
123
|
+
// If we have logprobs, feed them to the entropy detector before pushing code
|
|
124
|
+
if (hasLogprobs && entropyDetector && logprobs) {
|
|
125
|
+
for (const lp of logprobs) {
|
|
126
|
+
entropyDetector.pushToken({
|
|
127
|
+
token: lp.token,
|
|
128
|
+
logprob: lp.top_logprobs[0]?.logprob ?? 0,
|
|
129
|
+
topLogprobs: lp.top_logprobs.map(t => ({
|
|
130
|
+
token: t.token,
|
|
131
|
+
logprob: t.logprob,
|
|
132
|
+
})),
|
|
133
|
+
});
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
// Push code through the verifier
|
|
137
|
+
verifier.push(code);
|
|
138
|
+
verifier.flush();
|
|
139
|
+
const rawFindings = verifier.getFindings();
|
|
140
|
+
const stats = verifier.getStats();
|
|
141
|
+
const findings = rawFindings.map((f) => ({
|
|
142
|
+
checkName: f.checkName,
|
|
143
|
+
severity: f.severity,
|
|
144
|
+
evidence: f.evidence,
|
|
145
|
+
suggestion: f.suggestion,
|
|
146
|
+
}));
|
|
147
|
+
// Build annotations with line numbers
|
|
148
|
+
const codeLines = code.split('\n');
|
|
149
|
+
const annotations = rawFindings.map((f) => {
|
|
150
|
+
// Find line number from code unit offset
|
|
151
|
+
const offset = f.codeUnit.startOffset;
|
|
152
|
+
let line = 1;
|
|
153
|
+
let pos = 0;
|
|
154
|
+
for (let i = 0; i < codeLines.length; i++) {
|
|
155
|
+
pos += codeLines[i].length + 1; // +1 for newline
|
|
156
|
+
if (pos > offset) {
|
|
157
|
+
line = i + 1;
|
|
158
|
+
break;
|
|
159
|
+
}
|
|
160
|
+
}
|
|
161
|
+
return {
|
|
162
|
+
line,
|
|
163
|
+
severity: f.severity,
|
|
164
|
+
message: f.evidence,
|
|
165
|
+
checkName: f.checkName,
|
|
166
|
+
depth: f.entropyContext?.verificationDepth,
|
|
167
|
+
};
|
|
168
|
+
});
|
|
169
|
+
// Cache for get_annotations and bas_heatmap
|
|
170
|
+
lastAnnotations = annotations;
|
|
171
|
+
lastBASHeatmap = perTokenHeatmap;
|
|
172
|
+
// Compute BAS summary
|
|
173
|
+
const basSummary = hasLogprobs && basScores.length > 0
|
|
174
|
+
? {
|
|
175
|
+
meanScore: Math.round((basScores.reduce((sum, s) => sum + s.score, 0) / basScores.length) * 1000) / 1000,
|
|
176
|
+
tokenCount: basScores.length,
|
|
177
|
+
depthDistribution: {
|
|
178
|
+
green: basScores.filter(s => s.depth === 'green').length,
|
|
179
|
+
amber: basScores.filter(s => s.depth === 'amber').length,
|
|
180
|
+
red: basScores.filter(s => s.depth === 'red').length,
|
|
181
|
+
},
|
|
182
|
+
}
|
|
183
|
+
: undefined;
|
|
184
|
+
return {
|
|
185
|
+
mode,
|
|
186
|
+
findings,
|
|
187
|
+
annotations,
|
|
188
|
+
bas: basSummary,
|
|
189
|
+
stats: {
|
|
190
|
+
unitsProcessed: stats.unitsProcessed,
|
|
191
|
+
checksRun: stats.checksRun,
|
|
192
|
+
findings: stats.findings,
|
|
193
|
+
avgLatencyMs: Math.round(stats.avgLatencyMs * 100) / 100,
|
|
194
|
+
},
|
|
195
|
+
clean: findings.length === 0,
|
|
196
|
+
};
|
|
197
|
+
}
|
|
198
|
+
// ── Auto-learn from findings ─────────────────────────────────
|
|
199
|
+
/**
|
|
200
|
+
* Convert MCP verification findings into learned rules.
|
|
201
|
+
* Runs async — doesn't block the response to Claude Code.
|
|
202
|
+
*/
|
|
203
|
+
function autoLearnFromFindings(findings, code, language, projectPath) {
|
|
204
|
+
if (findings.length === 0)
|
|
205
|
+
return;
|
|
206
|
+
const root = projectPath || process.cwd();
|
|
207
|
+
for (const finding of findings) {
|
|
208
|
+
const input = {
|
|
209
|
+
claim: {
|
|
210
|
+
id: `mcp-${Date.now()}-${finding.checkName}`,
|
|
211
|
+
category: finding.checkName,
|
|
212
|
+
severity: finding.severity,
|
|
213
|
+
description: finding.evidence,
|
|
214
|
+
assertion: `Code should not contain: ${finding.checkName}`,
|
|
215
|
+
},
|
|
216
|
+
verification: {
|
|
217
|
+
verdict: 'FAIL',
|
|
218
|
+
reasoning: finding.evidence,
|
|
219
|
+
evidence: finding.suggestion,
|
|
220
|
+
},
|
|
221
|
+
code,
|
|
222
|
+
language,
|
|
223
|
+
filePath: 'mcp-verified-code',
|
|
224
|
+
};
|
|
225
|
+
learnFromFinding(root, input).catch(() => {
|
|
226
|
+
// Silently ignore learning failures — don't break the MCP response
|
|
227
|
+
});
|
|
228
|
+
}
|
|
229
|
+
}
|
|
65
230
|
// ── MCP Server ──────────────────────────────────────────────
|
|
66
231
|
export async function startMcpServer() {
|
|
67
232
|
const server = new Server({
|
|
@@ -70,6 +235,7 @@ export async function startMcpServer() {
|
|
|
70
235
|
}, {
|
|
71
236
|
capabilities: {
|
|
72
237
|
tools: {},
|
|
238
|
+
resources: {},
|
|
73
239
|
},
|
|
74
240
|
});
|
|
75
241
|
// List available tools
|
|
@@ -119,8 +285,118 @@ export async function startMcpServer() {
|
|
|
119
285
|
required: ['code', 'language'],
|
|
120
286
|
},
|
|
121
287
|
},
|
|
288
|
+
{
|
|
289
|
+
name: 'stream_verify',
|
|
290
|
+
description: 'BAS-guided verification of a code block. If logprobs are provided, computes Bayesian Anomaly Scores to route verification depth (GREEN=skip, AMBER=defer, RED=immediate). Without logprobs, runs all formal checks (formal-only mode). Returns findings, annotations, and BAS summary.',
|
|
291
|
+
inputSchema: {
|
|
292
|
+
type: 'object',
|
|
293
|
+
properties: {
|
|
294
|
+
code: {
|
|
295
|
+
type: 'string',
|
|
296
|
+
description: 'The code block to verify',
|
|
297
|
+
},
|
|
298
|
+
language: {
|
|
299
|
+
type: 'string',
|
|
300
|
+
enum: ['typescript', 'python', 'javascript'],
|
|
301
|
+
description: 'Language of the code',
|
|
302
|
+
},
|
|
303
|
+
logprobs: {
|
|
304
|
+
type: 'array',
|
|
305
|
+
description: 'Optional per-token logprob data from the LLM provider. Each item contains the token and its top logprob alternatives.',
|
|
306
|
+
items: {
|
|
307
|
+
type: 'object',
|
|
308
|
+
properties: {
|
|
309
|
+
token: { type: 'string', description: 'The token text' },
|
|
310
|
+
top_logprobs: {
|
|
311
|
+
type: 'array',
|
|
312
|
+
description: 'Top logprob alternatives',
|
|
313
|
+
items: {
|
|
314
|
+
type: 'object',
|
|
315
|
+
properties: {
|
|
316
|
+
token: { type: 'string' },
|
|
317
|
+
logprob: { type: 'number' },
|
|
318
|
+
},
|
|
319
|
+
required: ['token', 'logprob'],
|
|
320
|
+
},
|
|
321
|
+
},
|
|
322
|
+
},
|
|
323
|
+
required: ['token', 'top_logprobs'],
|
|
324
|
+
},
|
|
325
|
+
},
|
|
326
|
+
},
|
|
327
|
+
required: ['code', 'language'],
|
|
328
|
+
},
|
|
329
|
+
},
|
|
330
|
+
{
|
|
331
|
+
name: 'get_annotations',
|
|
332
|
+
description: 'Returns cached verification annotations from the last stream_verify call. Each annotation includes line number, severity, message, and check name.',
|
|
333
|
+
inputSchema: {
|
|
334
|
+
type: 'object',
|
|
335
|
+
properties: {},
|
|
336
|
+
},
|
|
337
|
+
},
|
|
338
|
+
{
|
|
339
|
+
name: 'configure',
|
|
340
|
+
description: 'Configure BAS thresholds for adaptive verification depth routing. Scores below greenThreshold are skipped (GREEN), above redThreshold get immediate checks (RED), between is deferred (AMBER).',
|
|
341
|
+
inputSchema: {
|
|
342
|
+
type: 'object',
|
|
343
|
+
properties: {
|
|
344
|
+
greenThreshold: {
|
|
345
|
+
type: 'number',
|
|
346
|
+
description: 'BAS score below which verification is skipped (default: 0.3)',
|
|
347
|
+
},
|
|
348
|
+
redThreshold: {
|
|
349
|
+
type: 'number',
|
|
350
|
+
description: 'BAS score above which verification runs immediately (default: 0.7)',
|
|
351
|
+
},
|
|
352
|
+
},
|
|
353
|
+
},
|
|
354
|
+
},
|
|
122
355
|
],
|
|
123
356
|
}));
|
|
357
|
+
// List available resources
|
|
358
|
+
server.setRequestHandler(ListResourcesRequestSchema, async () => ({
|
|
359
|
+
resources: [
|
|
360
|
+
{
|
|
361
|
+
uri: 'assay://bas_heatmap',
|
|
362
|
+
name: 'BAS Heatmap',
|
|
363
|
+
description: '[UNSTABLE] Per-token Bayesian Anomaly Scores from the last stream_verify call. Debugging tool — format may change.',
|
|
364
|
+
mimeType: 'application/json',
|
|
365
|
+
},
|
|
366
|
+
],
|
|
367
|
+
}));
|
|
368
|
+
// Read resources
|
|
369
|
+
server.setRequestHandler(ReadResourceRequestSchema, async (request) => {
|
|
370
|
+
const { uri } = request.params;
|
|
371
|
+
if (uri === 'assay://bas_heatmap') {
|
|
372
|
+
return {
|
|
373
|
+
contents: [
|
|
374
|
+
{
|
|
375
|
+
uri: 'assay://bas_heatmap',
|
|
376
|
+
mimeType: 'application/json',
|
|
377
|
+
text: JSON.stringify({
|
|
378
|
+
_warning: 'UNSTABLE — format may change between versions',
|
|
379
|
+
tokenCount: lastBASHeatmap.length,
|
|
380
|
+
tokens: lastBASHeatmap,
|
|
381
|
+
thresholds: {
|
|
382
|
+
green: basConfig.greenThreshold,
|
|
383
|
+
red: basConfig.redThreshold,
|
|
384
|
+
},
|
|
385
|
+
}, null, 2),
|
|
386
|
+
},
|
|
387
|
+
],
|
|
388
|
+
};
|
|
389
|
+
}
|
|
390
|
+
return {
|
|
391
|
+
contents: [
|
|
392
|
+
{
|
|
393
|
+
uri,
|
|
394
|
+
mimeType: 'text/plain',
|
|
395
|
+
text: JSON.stringify({ error: `Unknown resource: ${uri}` }),
|
|
396
|
+
},
|
|
397
|
+
],
|
|
398
|
+
};
|
|
399
|
+
});
|
|
124
400
|
// Handle tool calls
|
|
125
401
|
server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
126
402
|
const { name, arguments: args } = request.params;
|
|
@@ -142,6 +418,7 @@ export async function startMcpServer() {
|
|
|
142
418
|
};
|
|
143
419
|
}
|
|
144
420
|
const result = verifyCode(code, language, projectPath);
|
|
421
|
+
autoLearnFromFindings(result.findings, code, language, projectPath);
|
|
145
422
|
return {
|
|
146
423
|
content: [
|
|
147
424
|
{
|
|
@@ -169,6 +446,7 @@ export async function startMcpServer() {
|
|
|
169
446
|
};
|
|
170
447
|
}
|
|
171
448
|
const verifyResult = verifyCode(code, language, projectPath);
|
|
449
|
+
autoLearnFromFindings(verifyResult.findings, code, language, projectPath);
|
|
172
450
|
const fixInstructions = buildFixInstructions(verifyResult.findings);
|
|
173
451
|
const result = {
|
|
174
452
|
...verifyResult,
|
|
@@ -183,6 +461,104 @@ export async function startMcpServer() {
|
|
|
183
461
|
],
|
|
184
462
|
};
|
|
185
463
|
}
|
|
464
|
+
if (name === 'stream_verify') {
|
|
465
|
+
const code = args?.code;
|
|
466
|
+
const language = args?.language;
|
|
467
|
+
const logprobs = args?.logprobs;
|
|
468
|
+
if (!code || !language) {
|
|
469
|
+
return {
|
|
470
|
+
content: [
|
|
471
|
+
{
|
|
472
|
+
type: 'text',
|
|
473
|
+
text: JSON.stringify({
|
|
474
|
+
error: 'Both "code" and "language" are required',
|
|
475
|
+
}),
|
|
476
|
+
},
|
|
477
|
+
],
|
|
478
|
+
isError: true,
|
|
479
|
+
};
|
|
480
|
+
}
|
|
481
|
+
const result = streamVerify(code, language, logprobs);
|
|
482
|
+
autoLearnFromFindings(result.findings, code, language);
|
|
483
|
+
return {
|
|
484
|
+
content: [
|
|
485
|
+
{
|
|
486
|
+
type: 'text',
|
|
487
|
+
text: JSON.stringify(result, null, 2),
|
|
488
|
+
},
|
|
489
|
+
],
|
|
490
|
+
};
|
|
491
|
+
}
|
|
492
|
+
if (name === 'get_annotations') {
|
|
493
|
+
return {
|
|
494
|
+
content: [
|
|
495
|
+
{
|
|
496
|
+
type: 'text',
|
|
497
|
+
text: JSON.stringify({
|
|
498
|
+
count: lastAnnotations.length,
|
|
499
|
+
annotations: lastAnnotations,
|
|
500
|
+
}, null, 2),
|
|
501
|
+
},
|
|
502
|
+
],
|
|
503
|
+
};
|
|
504
|
+
}
|
|
505
|
+
if (name === 'configure') {
|
|
506
|
+
const greenThreshold = args?.greenThreshold;
|
|
507
|
+
const redThreshold = args?.redThreshold;
|
|
508
|
+
if (greenThreshold !== undefined) {
|
|
509
|
+
if (greenThreshold < 0 || greenThreshold > 1) {
|
|
510
|
+
return {
|
|
511
|
+
content: [
|
|
512
|
+
{
|
|
513
|
+
type: 'text',
|
|
514
|
+
text: JSON.stringify({ error: 'greenThreshold must be between 0 and 1' }),
|
|
515
|
+
},
|
|
516
|
+
],
|
|
517
|
+
isError: true,
|
|
518
|
+
};
|
|
519
|
+
}
|
|
520
|
+
basConfig.greenThreshold = greenThreshold;
|
|
521
|
+
}
|
|
522
|
+
if (redThreshold !== undefined) {
|
|
523
|
+
if (redThreshold < 0 || redThreshold > 1) {
|
|
524
|
+
return {
|
|
525
|
+
content: [
|
|
526
|
+
{
|
|
527
|
+
type: 'text',
|
|
528
|
+
text: JSON.stringify({ error: 'redThreshold must be between 0 and 1' }),
|
|
529
|
+
},
|
|
530
|
+
],
|
|
531
|
+
isError: true,
|
|
532
|
+
};
|
|
533
|
+
}
|
|
534
|
+
basConfig.redThreshold = redThreshold;
|
|
535
|
+
}
|
|
536
|
+
if (basConfig.greenThreshold >= basConfig.redThreshold) {
|
|
537
|
+
return {
|
|
538
|
+
content: [
|
|
539
|
+
{
|
|
540
|
+
type: 'text',
|
|
541
|
+
text: JSON.stringify({
|
|
542
|
+
error: 'greenThreshold must be less than redThreshold',
|
|
543
|
+
}),
|
|
544
|
+
},
|
|
545
|
+
],
|
|
546
|
+
isError: true,
|
|
547
|
+
};
|
|
548
|
+
}
|
|
549
|
+
return {
|
|
550
|
+
content: [
|
|
551
|
+
{
|
|
552
|
+
type: 'text',
|
|
553
|
+
text: JSON.stringify({
|
|
554
|
+
message: 'Configuration updated',
|
|
555
|
+
greenThreshold: basConfig.greenThreshold,
|
|
556
|
+
redThreshold: basConfig.redThreshold,
|
|
557
|
+
}, null, 2),
|
|
558
|
+
},
|
|
559
|
+
],
|
|
560
|
+
};
|
|
561
|
+
}
|
|
186
562
|
return {
|
|
187
563
|
content: [
|
|
188
564
|
{
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/realtime/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"mcp-server.js","sourceRoot":"","sources":["../../src/realtime/mcp-server.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,6 +7,7 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Phase 2, Milestone 3 of the 10x roadmap.
|
|
9
9
|
*/
|
|
10
|
+
import type { EntropyDetectorOptions } from './entropy-detector.js';
|
|
10
11
|
import type { CheckSeverity, StreamingVerifierStats, VerificationEvent } from './types.js';
|
|
11
12
|
export interface VerifiedStreamOptions {
|
|
12
13
|
/** Anthropic API key (falls back to ANTHROPIC_API_KEY env) */
|
|
@@ -36,6 +37,15 @@ export interface VerifiedStreamOptions {
|
|
|
36
37
|
autoCorrect?: boolean;
|
|
37
38
|
/** Min severity for auto-correction. Default: 'high' */
|
|
38
39
|
minCorrectionSeverity?: CheckSeverity;
|
|
40
|
+
/**
|
|
41
|
+
* LLM provider. Default: 'anthropic'.
|
|
42
|
+
* Use 'openai' for logprob-based entropy hallucination detection.
|
|
43
|
+
*/
|
|
44
|
+
provider?: 'anthropic' | 'openai';
|
|
45
|
+
/** OpenAI API key (falls back to OPENAI_API_KEY env). Required when provider='openai'. */
|
|
46
|
+
openaiApiKey?: string;
|
|
47
|
+
/** Entropy detector options. Only active when provider='openai'. */
|
|
48
|
+
entropyDetector?: EntropyDetectorOptions;
|
|
39
49
|
}
|
|
40
50
|
export interface VerifiedStreamResult {
|
|
41
51
|
/** The full generated text */
|
|
@@ -51,12 +61,30 @@ export interface VerifiedStreamResult {
|
|
|
51
61
|
outputTokens: number;
|
|
52
62
|
/** Total wall time */
|
|
53
63
|
durationMs: number;
|
|
64
|
+
/**
|
|
65
|
+
* Collected per-token logprob data from the provider stream.
|
|
66
|
+
* Present when provider supports logprobs (e.g., OpenAI), undefined otherwise.
|
|
67
|
+
* Can be passed to BAS calculator or stream_verify MCP tool for analysis.
|
|
68
|
+
*/
|
|
69
|
+
collectedLogprobs?: Array<{
|
|
70
|
+
token: string;
|
|
71
|
+
top_logprobs: Array<{
|
|
72
|
+
token: string;
|
|
73
|
+
logprob: number;
|
|
74
|
+
}>;
|
|
75
|
+
}>;
|
|
54
76
|
}
|
|
55
77
|
/**
|
|
56
78
|
* Create and run a verified stream using the Anthropic API.
|
|
57
79
|
* Returns when generation is complete.
|
|
58
80
|
*/
|
|
59
81
|
export declare function createVerifiedStream(options: VerifiedStreamOptions): Promise<VerifiedStreamResult>;
|
|
82
|
+
/**
|
|
83
|
+
* Create a verified stream using the specified provider.
|
|
84
|
+
* - provider='anthropic' (default): pattern checks only
|
|
85
|
+
* - provider='openai': pattern checks + entropy hallucination detection
|
|
86
|
+
*/
|
|
87
|
+
export declare function createVerifiedStreamAuto(options: VerifiedStreamOptions): Promise<VerifiedStreamResult>;
|
|
60
88
|
/**
|
|
61
89
|
* Simulate a verified stream by pushing an array of token strings through
|
|
62
90
|
* the verification pipeline. Same logic as createVerifiedStream but without
|