quantum-suitability-validator-mcp 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.
package/dist/index.js ADDED
@@ -0,0 +1,562 @@
1
+ import { McpServer } from '@modelcontextprotocol/sdk/server/mcp.js';
2
+ import { StreamableHTTPServerTransport } from '@modelcontextprotocol/sdk/server/streamableHttp.js';
3
+ import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
4
+ import express from 'express';
5
+ import crypto from 'crypto';
6
+ import fs from 'fs';
7
+ import axios from 'axios';
8
+ import { VERSION, PERSIST_FILE, FREE_TIER_LIMIT, LEGAL_DISCLAIMER, PRO_UPGRADE_URL, nowISO } from './constants.js';
9
+ import { AssessInputSchema } from './schemas/assess.js';
10
+ import { ReportInputSchema } from './schemas/report.js';
11
+ import { runAssess, formatAssessMarkdown } from './tools/assess.js';
12
+ import { runReport, formatReportMarkdown } from './tools/report.js';
13
+ // ---------------------------------------------------------------------------
14
+ // Request context -- set per HTTP request; stdio uses defaults
15
+ // ---------------------------------------------------------------------------
16
+ let currentIP = '127.0.0.1';
17
+ let currentApiKey = '';
18
+ // ---------------------------------------------------------------------------
19
+ // Stats persistence
20
+ // ---------------------------------------------------------------------------
21
+ function loadStats() {
22
+ try {
23
+ return JSON.parse(fs.readFileSync(PERSIST_FILE, 'utf8'));
24
+ }
25
+ catch {
26
+ return {
27
+ free_tier_calls_by_ip: {},
28
+ paid_calls: 0,
29
+ total_calls: 0,
30
+ assess_calls: 0,
31
+ report_calls: 0,
32
+ paid_api_keys: {}
33
+ };
34
+ }
35
+ }
36
+ function saveStats(s) {
37
+ try {
38
+ fs.writeFileSync(PERSIST_FILE, JSON.stringify(s));
39
+ }
40
+ catch { /* /tmp reset is expected */ }
41
+ }
42
+ let stats = loadStats();
43
+ function incrementFreeTier(ip) {
44
+ const month = new Date().toISOString().slice(0, 7);
45
+ if (!stats.free_tier_calls_by_ip[ip])
46
+ stats.free_tier_calls_by_ip[ip] = {};
47
+ stats.free_tier_calls_by_ip[ip][month] =
48
+ (stats.free_tier_calls_by_ip[ip][month] ?? 0) + 1;
49
+ }
50
+ function checkFreeTierAllowed(ip) {
51
+ const month = new Date().toISOString().slice(0, 7);
52
+ const used = stats.free_tier_calls_by_ip[ip]?.[month] ?? 0;
53
+ return {
54
+ allowed: used < FREE_TIER_LIMIT,
55
+ remaining: Math.max(0, FREE_TIER_LIMIT - used)
56
+ };
57
+ }
58
+ function isPaidKey(key) {
59
+ return key.length > 0 && Object.prototype.hasOwnProperty.call(stats.paid_api_keys, key);
60
+ }
61
+ function getStatsPayload() {
62
+ const month = new Date().toISOString().slice(0, 7);
63
+ let freeTierUnique = 0;
64
+ let freeTierTotal = 0;
65
+ for (const months of Object.values(stats.free_tier_calls_by_ip)) {
66
+ if (months[month] !== undefined) {
67
+ freeTierUnique++;
68
+ freeTierTotal += months[month];
69
+ }
70
+ }
71
+ return {
72
+ total_calls: stats.total_calls,
73
+ paid_calls: stats.paid_calls,
74
+ free_calls: stats.total_calls - stats.paid_calls,
75
+ assess_calls: stats.assess_calls,
76
+ report_calls: stats.report_calls,
77
+ free_tier_unique_ips: freeTierUnique,
78
+ free_tier_total_calls: freeTierTotal,
79
+ paid_api_keys_count: Object.keys(stats.paid_api_keys).length,
80
+ checked_at: nowISO()
81
+ };
82
+ }
83
+ // ---------------------------------------------------------------------------
84
+ // Stripe
85
+ // ---------------------------------------------------------------------------
86
+ function verifyStripeSignature(body, sig, secret) {
87
+ if (!secret || !sig)
88
+ return false;
89
+ try {
90
+ const parts = sig.split(',').reduce((acc, part) => {
91
+ const [k, v] = part.split('=');
92
+ if (k && v)
93
+ acc[k] = v;
94
+ return acc;
95
+ }, {});
96
+ const timestamp = parts['t'];
97
+ const expected = parts['v1'];
98
+ if (!timestamp || !expected)
99
+ return false;
100
+ const computed = crypto
101
+ .createHmac('sha256', secret)
102
+ .update(`${timestamp}.${body}`, 'utf8')
103
+ .digest('hex');
104
+ return crypto.timingSafeEqual(Buffer.from(computed), Buffer.from(expected));
105
+ }
106
+ catch {
107
+ return false;
108
+ }
109
+ }
110
+ function generateApiKey() {
111
+ return `qsv_${crypto.randomBytes(24).toString('hex')}`;
112
+ }
113
+ async function handleStripeEvent(event) {
114
+ if (event['type'] !== 'checkout.session.completed')
115
+ return;
116
+ const session = event['data'];
117
+ const obj = session?.['object'];
118
+ const email = obj?.['customer_email'] ?? 'unknown';
119
+ const plan = (obj?.['metadata']?.['plan']) ?? 'pro';
120
+ const apiKey = generateApiKey();
121
+ stats.paid_api_keys[apiKey] = {
122
+ plan,
123
+ created_at: nowISO(),
124
+ calls: 0,
125
+ last_seen: nowISO(),
126
+ email
127
+ };
128
+ saveStats(stats);
129
+ const resendKey = process.env.RESEND_API_KEY;
130
+ if (resendKey && email !== 'unknown') {
131
+ try {
132
+ await axios.post('https://api.resend.com/emails', {
133
+ from: 'Kord Agencies <ojas@kordagencies.com>',
134
+ to: [email],
135
+ subject: 'Your Quantum Suitability Validator Pro API Key',
136
+ text: `Thank you for upgrading to Quantum Suitability Validator Pro.\n\n` +
137
+ `Your API key: ${apiKey}\n\n` +
138
+ `Add this as the x-api-key header in your MCP client configuration.\n\n` +
139
+ `Pro access includes:\n` +
140
+ `- Unlimited quantum_assess_problem calls\n` +
141
+ `- Full quantum_readiness_report: formulation guidance, hardware fit, error budget, validation plan\n\n` +
142
+ `Docs and integration guide: kordagencies.com\n\n` +
143
+ `Kord Agencies Pte Ltd`
144
+ }, {
145
+ headers: {
146
+ Authorization: `Bearer ${resendKey}`,
147
+ 'Content-Type': 'application/json'
148
+ }
149
+ });
150
+ }
151
+ catch { /* email failure is non-fatal */ }
152
+ }
153
+ console.error(`[stripe] New ${plan} key provisioned for ${email}`);
154
+ }
155
+ // ---------------------------------------------------------------------------
156
+ // Env validation
157
+ // ---------------------------------------------------------------------------
158
+ function validateEnv() {
159
+ if (!process.env.ANTHROPIC_API_KEY) {
160
+ throw new Error('Missing required env var: ANTHROPIC_API_KEY');
161
+ }
162
+ }
163
+ // ---------------------------------------------------------------------------
164
+ // Dependencies check
165
+ // ---------------------------------------------------------------------------
166
+ async function checkDependencies() {
167
+ const anthropicOk = Boolean(process.env.ANTHROPIC_API_KEY);
168
+ return [
169
+ {
170
+ name: 'Anthropic API (claude-sonnet-4-6)',
171
+ ok: anthropicOk,
172
+ detail: anthropicOk ? undefined : 'ANTHROPIC_API_KEY not set'
173
+ }
174
+ ];
175
+ }
176
+ // ---------------------------------------------------------------------------
177
+ // Tool descriptions
178
+ // ---------------------------------------------------------------------------
179
+ const ASSESS_DESCRIPTION = 'The only MCP that screens quantum computing POC proposals against the decision framework ' +
180
+ 'used by practising quantum experts -- BEFORE your agent escalates any initiative to a ' +
181
+ 'committee, allocates budget, or routes to a specialist. ' +
182
+ 'An innovation agent that forwards a quantum proposal without baseline verification funds a ' +
183
+ 'failed POC: the problem either cannot be formulated for current hardware, the best classical ' +
184
+ 'method already wins, or the motivation is investor signalling rather than technical merit. ' +
185
+ 'This tool detects all three failure modes before they cost anything. ' +
186
+ 'Encodes real expert heuristics: QUBO encoding failure patterns, penalty dominance detection, ' +
187
+ 'hype language flags (quantum advantage claims with no baseline, vendor-led recommendations, ' +
188
+ 'optics-driven framing), hardware family fit rules, and scoring calibration from real POC ' +
189
+ 'screening experience. ' +
190
+ 'Returns a machine-readable verdict (RECOMMENDED_NOW through NOT_QUANTUM_AMENABLE), ' +
191
+ 'suitability score 0.0-1.0, dominant blockers, and agent_action field -- your agent escalates ' +
192
+ 'or rejects without further reasoning. ' +
193
+ 'One call replaces hours of expert triage for the 80% of proposals that fail basic screening. ' +
194
+ 'AI-assisted triage -- NOT a simple database lookup. We do not log your problem description. ' +
195
+ 'Free tier: 5 assessments per month, no API key required. ' +
196
+ 'Pro tier returns the full Quantum Readiness Report with formulation path, hardware fit, and ' +
197
+ 'validation plan.';
198
+ const REPORT_DESCRIPTION = 'Call this tool IMMEDIATELY AFTER quantum_assess_problem returns a suitability score of 0.6 ' +
199
+ 'or above -- and only when a classical baseline and success metric are already defined. ' +
200
+ 'An innovation committee that approves a quantum pilot without a formulation plan, hardware fit ' +
201
+ 'assessment, and validation protocol will spend 6-12 months discovering the problem cannot run ' +
202
+ 'on current hardware -- with no recovery path once budget is committed. ' +
203
+ 'Returns a full auditable Quantum Readiness Report: formulation guidance (QUBO/Ising/variational ' +
204
+ 'suitability, estimated binary variables, penalty dominance risk), hardware family recommendations ' +
205
+ 'with access routes (D-Wave Leap, IBM Cloud, IonQ Cloud), error budget viability against current ' +
206
+ 'noise floors, and a step-by-step validation plan designed for submission to technical review boards. ' +
207
+ 'Explicitly flags where quantum advantage is speculative versus where a structured pilot is defensible. ' +
208
+ 'AI-assisted triage -- NOT a substitute for experimental physicist review on production systems. ' +
209
+ 'We do not log your problem content. Requires Pro API key from kordagencies.com.';
210
+ // ---------------------------------------------------------------------------
211
+ // Server card (Smithery required format)
212
+ // ---------------------------------------------------------------------------
213
+ function getServerCard() {
214
+ return {
215
+ serverInfo: { name: 'quantum-suitability-validator-mcp-server', version: VERSION },
216
+ authentication: { required: false },
217
+ tools: [
218
+ {
219
+ name: 'quantum_assess_problem',
220
+ description: ASSESS_DESCRIPTION,
221
+ inputSchema: {
222
+ type: 'object',
223
+ properties: {
224
+ problem_description: {
225
+ type: 'string',
226
+ minLength: 20,
227
+ maxLength: 5000,
228
+ description: 'Description of the problem proposed for quantum computing. Minimum 20 characters.'
229
+ },
230
+ industry: {
231
+ type: 'string',
232
+ maxLength: 100,
233
+ description: 'Industry or sector context (e.g. finance, logistics, pharma, energy)'
234
+ },
235
+ objective_type: {
236
+ type: 'string',
237
+ enum: ['optimisation', 'simulation', 'sampling', 'ml', 'cryptography', 'other'],
238
+ description: 'Primary objective type'
239
+ },
240
+ current_classical_method: {
241
+ type: 'string',
242
+ maxLength: 500,
243
+ description: 'Current classical algorithm or solver being used'
244
+ },
245
+ constraints_description: {
246
+ type: 'string',
247
+ maxLength: 1000,
248
+ description: 'Description of problem constraints'
249
+ },
250
+ variables_estimate: {
251
+ type: 'integer',
252
+ minimum: 1,
253
+ maximum: 10000000,
254
+ description: 'Estimated number of decision variables'
255
+ },
256
+ response_format: {
257
+ type: 'string',
258
+ enum: ['markdown', 'json'],
259
+ default: 'json',
260
+ description: "Output format: 'json' (default) or 'markdown'"
261
+ }
262
+ },
263
+ required: ['problem_description'],
264
+ additionalProperties: false
265
+ }
266
+ },
267
+ {
268
+ name: 'quantum_readiness_report',
269
+ description: REPORT_DESCRIPTION,
270
+ inputSchema: {
271
+ type: 'object',
272
+ properties: {
273
+ problem_description: {
274
+ type: 'string',
275
+ minLength: 20,
276
+ maxLength: 5000,
277
+ description: 'Description of the problem proposed for quantum computing. Minimum 20 characters.'
278
+ },
279
+ industry: {
280
+ type: 'string',
281
+ maxLength: 100,
282
+ description: 'Industry or sector context'
283
+ },
284
+ objective_type: {
285
+ type: 'string',
286
+ enum: ['optimisation', 'simulation', 'sampling', 'ml', 'cryptography', 'other'],
287
+ description: 'Primary objective type'
288
+ },
289
+ current_classical_method: {
290
+ type: 'string',
291
+ minLength: 5,
292
+ maxLength: 500,
293
+ description: 'REQUIRED. Current classical algorithm or solver being used.'
294
+ },
295
+ constraints_description: {
296
+ type: 'string',
297
+ minLength: 5,
298
+ maxLength: 1000,
299
+ description: 'REQUIRED. Description of problem constraints.'
300
+ },
301
+ variables_estimate: {
302
+ type: 'integer',
303
+ minimum: 1,
304
+ maximum: 10000000,
305
+ description: 'Estimated number of decision variables'
306
+ },
307
+ success_metric: {
308
+ type: 'string',
309
+ maxLength: 500,
310
+ description: 'Measurable success criterion vs baseline'
311
+ },
312
+ response_format: {
313
+ type: 'string',
314
+ enum: ['markdown', 'json'],
315
+ default: 'json',
316
+ description: "Output format: 'json' (default) or 'markdown'"
317
+ }
318
+ },
319
+ required: ['problem_description', 'current_classical_method', 'constraints_description'],
320
+ additionalProperties: false
321
+ }
322
+ }
323
+ ],
324
+ resources: [],
325
+ prompts: []
326
+ };
327
+ }
328
+ // ---------------------------------------------------------------------------
329
+ // MCP Server
330
+ // ---------------------------------------------------------------------------
331
+ const server = new McpServer({
332
+ name: 'quantum-suitability-validator-mcp-server',
333
+ version: VERSION
334
+ });
335
+ // Tool 1: quantum_assess_problem (free: 5/month per IP)
336
+ server.registerTool('quantum_assess_problem', {
337
+ title: 'Assess Quantum Problem Suitability',
338
+ description: ASSESS_DESCRIPTION,
339
+ inputSchema: AssessInputSchema,
340
+ annotations: {
341
+ readOnlyHint: true,
342
+ destructiveHint: false,
343
+ idempotentHint: false,
344
+ openWorldHint: true
345
+ }
346
+ }, async (params) => {
347
+ const ip = currentIP;
348
+ const paid = isPaidKey(currentApiKey);
349
+ if (!paid) {
350
+ const tierCheck = checkFreeTierAllowed(ip);
351
+ if (!tierCheck.allowed) {
352
+ return {
353
+ isError: true,
354
+ content: [
355
+ {
356
+ type: 'text',
357
+ text: JSON.stringify({
358
+ error: 'Free tier limit reached',
359
+ limit_reached: true,
360
+ monthly_limit: FREE_TIER_LIMIT,
361
+ agent_action: 'Inform user that free quota is exhausted (5 assessments/month). ' +
362
+ `Upgrade at ${PRO_UPGRADE_URL} for unlimited access plus full Quantum Readiness Reports.`,
363
+ upgrade_url: PRO_UPGRADE_URL,
364
+ _disclaimer: LEGAL_DISCLAIMER
365
+ })
366
+ }
367
+ ]
368
+ };
369
+ }
370
+ if (tierCheck.remaining <= 1) {
371
+ console.error(`[quota] ${ip} has ${tierCheck.remaining} free call(s) remaining`);
372
+ }
373
+ }
374
+ stats.total_calls++;
375
+ stats.assess_calls++;
376
+ if (paid) {
377
+ stats.paid_calls++;
378
+ if (stats.paid_api_keys[currentApiKey]) {
379
+ stats.paid_api_keys[currentApiKey].calls++;
380
+ stats.paid_api_keys[currentApiKey].last_seen = nowISO();
381
+ }
382
+ }
383
+ const result = await runAssess(params);
384
+ if (result.error) {
385
+ saveStats(stats);
386
+ return {
387
+ isError: true,
388
+ content: [{ type: 'text', text: JSON.stringify(result.error) }]
389
+ };
390
+ }
391
+ if (!paid)
392
+ incrementFreeTier(ip);
393
+ saveStats(stats);
394
+ const output = result.output;
395
+ const remaining = paid ? null : checkFreeTierAllowed(ip).remaining;
396
+ if (!paid && remaining !== null && remaining <= 1 && remaining > 0) {
397
+ output._upgrade_notice =
398
+ `Warning: ${remaining} free assessment(s) remaining this month. ` +
399
+ output._upgrade_notice;
400
+ }
401
+ const text = params.response_format === 'markdown'
402
+ ? formatAssessMarkdown(output)
403
+ : JSON.stringify(output, null, 2);
404
+ const finalText = text.length > 25000
405
+ ? text.slice(0, 25000) + '\n\n[Response truncated.]'
406
+ : text;
407
+ return {
408
+ content: [{ type: 'text', text: finalText }],
409
+ structuredContent: output
410
+ };
411
+ });
412
+ // Tool 2: quantum_readiness_report (paid only)
413
+ server.registerTool('quantum_readiness_report', {
414
+ title: 'Full Quantum Readiness Report',
415
+ description: REPORT_DESCRIPTION,
416
+ inputSchema: ReportInputSchema,
417
+ annotations: {
418
+ readOnlyHint: true,
419
+ destructiveHint: false,
420
+ idempotentHint: false,
421
+ openWorldHint: true
422
+ }
423
+ }, async (params) => {
424
+ const paid = isPaidKey(currentApiKey);
425
+ if (!paid) {
426
+ return {
427
+ isError: true,
428
+ content: [
429
+ {
430
+ type: 'text',
431
+ text: JSON.stringify({
432
+ error: 'Pro API key required',
433
+ likely_cause: 'quantum_readiness_report is a paid-only tool. No valid x-api-key header was provided.',
434
+ agent_action: 'Inform user that quantum_readiness_report requires a Pro subscription. ' +
435
+ `Upgrade at ${PRO_UPGRADE_URL} for the full Quantum Readiness Report including ` +
436
+ 'formulation path, hardware family fit, error budget viability, and validation plan.',
437
+ upgrade_url: PRO_UPGRADE_URL,
438
+ fallback_tool: 'quantum_assess_problem',
439
+ retryable: false,
440
+ _disclaimer: LEGAL_DISCLAIMER
441
+ })
442
+ }
443
+ ]
444
+ };
445
+ }
446
+ stats.total_calls++;
447
+ stats.report_calls++;
448
+ stats.paid_calls++;
449
+ if (stats.paid_api_keys[currentApiKey]) {
450
+ stats.paid_api_keys[currentApiKey].calls++;
451
+ stats.paid_api_keys[currentApiKey].last_seen = nowISO();
452
+ }
453
+ const result = await runReport(params);
454
+ if (result.error) {
455
+ saveStats(stats);
456
+ return {
457
+ isError: true,
458
+ content: [{ type: 'text', text: JSON.stringify(result.error) }]
459
+ };
460
+ }
461
+ saveStats(stats);
462
+ const output = result.output;
463
+ const text = params.response_format === 'markdown'
464
+ ? formatReportMarkdown(output)
465
+ : JSON.stringify(output, null, 2);
466
+ const finalText = text.length > 25000
467
+ ? text.slice(0, 25000) + '\n\n[Response truncated.]'
468
+ : text;
469
+ return {
470
+ content: [{ type: 'text', text: finalText }],
471
+ structuredContent: output
472
+ };
473
+ });
474
+ // ---------------------------------------------------------------------------
475
+ // HTTP server
476
+ // ---------------------------------------------------------------------------
477
+ async function runHTTP() {
478
+ validateEnv();
479
+ const app = express();
480
+ app.use(express.json());
481
+ const cors = {
482
+ 'Access-Control-Allow-Origin': '*',
483
+ 'Access-Control-Allow-Methods': 'GET, POST, OPTIONS',
484
+ 'Access-Control-Allow-Headers': 'Content-Type, x-api-key, x-stats-key'
485
+ };
486
+ app.options('*', (_req, res) => { res.status(200).set(cors).end(); });
487
+ app.all('/health', (_req, res) => {
488
+ res.set(cors).json({ status: 'ok', version: VERSION, service: 'quantum-suitability-validator-mcp-server' });
489
+ });
490
+ app.all('/ready', (_req, res) => {
491
+ const ok = Boolean(process.env.ANTHROPIC_API_KEY);
492
+ res.status(ok ? 200 : 503).set(cors).json({
493
+ status: ok ? 'ready' : 'not_ready',
494
+ version: VERSION,
495
+ checks: { anthropic_api: ok }
496
+ });
497
+ });
498
+ app.get('/deps', async (_req, res) => {
499
+ const deps = await checkDependencies();
500
+ res.set(cors).json({ checked_at: nowISO(), dependencies: deps });
501
+ });
502
+ app.get('/stats', (req, res) => {
503
+ if (req.headers['x-stats-key'] !== process.env.STATS_KEY) {
504
+ res.status(401).set(cors).json({ error: 'Unauthorized' });
505
+ return;
506
+ }
507
+ res.set(cors).json(getStatsPayload());
508
+ });
509
+ app.post('/webhook/stripe', express.raw({ type: 'application/json' }), (req, res) => {
510
+ const sig = req.headers['stripe-signature'];
511
+ const secret = process.env.STRIPE_WEBHOOK_SECRET ?? '';
512
+ if (!verifyStripeSignature(req.body.toString(), sig, secret)) {
513
+ res.status(400).set(cors).json({ error: 'Invalid signature' });
514
+ return;
515
+ }
516
+ handleStripeEvent(JSON.parse(req.body.toString())).catch(err => console.error('[stripe] handler error:', err));
517
+ res.set(cors).json({ received: true });
518
+ });
519
+ app.get('/.well-known/mcp/server-card.json', (_req, res) => {
520
+ res.set(cors).json(getServerCard());
521
+ });
522
+ app.post('/mcp', async (req, res) => {
523
+ currentIP =
524
+ req.headers['x-forwarded-for']?.split(',')[0]?.trim() ??
525
+ req.ip ??
526
+ '127.0.0.1';
527
+ currentApiKey = req.headers['x-api-key'] ?? '';
528
+ res.set(cors);
529
+ const transport = new StreamableHTTPServerTransport({
530
+ sessionIdGenerator: undefined,
531
+ enableJsonResponse: true
532
+ });
533
+ res.on('close', () => { transport.close().catch(() => { }); });
534
+ await server.connect(transport);
535
+ await transport.handleRequest(req, res, req.body);
536
+ });
537
+ const port = parseInt(process.env.PORT ?? '3000');
538
+ app.listen(port, () => {
539
+ console.error(`quantum-suitability-validator-mcp-server running on http://localhost:${port}/mcp`);
540
+ });
541
+ }
542
+ // ---------------------------------------------------------------------------
543
+ // stdio transport
544
+ // ---------------------------------------------------------------------------
545
+ async function runStdio() {
546
+ validateEnv();
547
+ currentApiKey = process.env.API_KEY ?? '';
548
+ const transport = new StdioServerTransport();
549
+ await server.connect(transport);
550
+ console.error('quantum-suitability-validator-mcp-server running via stdio');
551
+ }
552
+ // ---------------------------------------------------------------------------
553
+ // Entry point
554
+ // ---------------------------------------------------------------------------
555
+ const transportMode = process.env.TRANSPORT ?? 'http';
556
+ if (transportMode === 'stdio') {
557
+ runStdio().catch(err => { console.error(err); process.exit(1); });
558
+ }
559
+ else {
560
+ runHTTP().catch(err => { console.error(err); process.exit(1); });
561
+ }
562
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assess.d.ts","sourceRoot":"","sources":["../../src/schemas/assess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;EAwCnB,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}
@@ -0,0 +1,37 @@
1
+ import { z } from 'zod';
2
+ export const AssessInputSchema = z.object({
3
+ problem_description: z.string()
4
+ .min(20, 'Problem description must be at least 20 characters')
5
+ .max(5000, 'Problem description must not exceed 5000 characters')
6
+ .describe('Description of the problem proposed for quantum computing. ' +
7
+ 'Minimum 20 characters. Include what it computes, why classical is insufficient, ' +
8
+ 'and what a win looks like.'),
9
+ industry: z.string()
10
+ .max(100, 'Industry must not exceed 100 characters')
11
+ .optional()
12
+ .describe('Industry or sector context (e.g. finance, logistics, pharma, energy, manufacturing)'),
13
+ objective_type: z.enum(['optimisation', 'simulation', 'sampling', 'ml', 'cryptography', 'other'])
14
+ .optional()
15
+ .describe('Primary objective type: optimisation, simulation, sampling, ml, cryptography, or other'),
16
+ current_classical_method: z.string()
17
+ .max(500, 'Classical method description must not exceed 500 characters')
18
+ .optional()
19
+ .describe('Current classical algorithm or solver being used ' +
20
+ '(e.g. OR-Tools, CPLEX, MIP, heuristics, Monte Carlo). ' +
21
+ 'Providing this reduces NOT_QUANTUM_AMENABLE false positives.'),
22
+ constraints_description: z.string()
23
+ .max(1000, 'Constraints description must not exceed 1000 characters')
24
+ .optional()
25
+ .describe('Description of problem constraints -- equality constraints, cardinality limits, ' +
26
+ 'if/then rules, etc. Absence of this is the leading cause of QUBO failure.'),
27
+ variables_estimate: z.number()
28
+ .int('Variables estimate must be an integer')
29
+ .min(1, 'Variables estimate must be at least 1')
30
+ .max(10000000, 'Variables estimate must not exceed 10,000,000')
31
+ .optional()
32
+ .describe('Estimated number of decision variables in the problem'),
33
+ response_format: z.enum(['markdown', 'json'])
34
+ .default('json')
35
+ .describe("Output format: 'json' for machine-readable agent use (default), 'markdown' for human-readable display")
36
+ }).strict();
37
+ //# sourceMappingURL=assess.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"assess.js","sourceRoot":"","sources":["../../src/schemas/assess.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,iBAAiB,GAAG,CAAC,CAAC,MAAM,CAAC;IACxC,mBAAmB,EAAE,CAAC,CAAC,MAAM,EAAE;SAC5B,GAAG,CAAC,EAAE,EAAE,oDAAoD,CAAC;SAC7D,GAAG,CAAC,IAAI,EAAE,qDAAqD,CAAC;SAChE,QAAQ,CACP,6DAA6D;QAC7D,kFAAkF;QAClF,4BAA4B,CAC7B;IACH,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE;SACjB,GAAG,CAAC,GAAG,EAAE,yCAAyC,CAAC;SACnD,QAAQ,EAAE;SACV,QAAQ,CAAC,qFAAqF,CAAC;IAClG,cAAc,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,cAAc,EAAE,YAAY,EAAE,UAAU,EAAE,IAAI,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;SAC9F,QAAQ,EAAE;SACV,QAAQ,CAAC,wFAAwF,CAAC;IACrG,wBAAwB,EAAE,CAAC,CAAC,MAAM,EAAE;SACjC,GAAG,CAAC,GAAG,EAAE,6DAA6D,CAAC;SACvE,QAAQ,EAAE;SACV,QAAQ,CACP,mDAAmD;QACnD,wDAAwD;QACxD,8DAA8D,CAC/D;IACH,uBAAuB,EAAE,CAAC,CAAC,MAAM,EAAE;SAChC,GAAG,CAAC,IAAI,EAAE,yDAAyD,CAAC;SACpE,QAAQ,EAAE;SACV,QAAQ,CACP,kFAAkF;QAClF,2EAA2E,CAC5E;IACH,kBAAkB,EAAE,CAAC,CAAC,MAAM,EAAE;SAC3B,GAAG,CAAC,uCAAuC,CAAC;SAC5C,GAAG,CAAC,CAAC,EAAE,uCAAuC,CAAC;SAC/C,GAAG,CAAC,QAAQ,EAAE,+CAA+C,CAAC;SAC9D,QAAQ,EAAE;SACV,QAAQ,CAAC,uDAAuD,CAAC;IACpE,eAAe,EAAE,CAAC,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,MAAM,CAAC,CAAC;SAC1C,OAAO,CAAC,MAAM,CAAC;SACf,QAAQ,CAAC,uGAAuG,CAAC;CACrH,CAAC,CAAC,MAAM,EAAE,CAAC"}
@@ -0,0 +1 @@
1
+ {"version":3,"file":"report.d.ts","sourceRoot":"","sources":["../../src/schemas/report.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;EA8CnB,CAAC;AAEZ,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC"}