tryassay 0.21.2 → 0.22.1

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 (132) hide show
  1. package/demo/.claude/.truth_last_prompt +1 -0
  2. package/demo/.claude/truth_status +1 -0
  3. package/demo/css/style.css +840 -0
  4. package/demo/index.html +78 -0
  5. package/demo/js/chat.js +535 -0
  6. package/demo/js/code-panel.js +206 -0
  7. package/demo/js/preview.js +456 -0
  8. package/demo/js/sse-client.js +600 -0
  9. package/demo/js/state.js +172 -0
  10. package/demo/js/timeline.js +80 -0
  11. package/dist/api/server.d.ts +3 -0
  12. package/dist/api/server.js +127 -20
  13. package/dist/api/server.js.map +1 -1
  14. package/dist/cli.js +11 -0
  15. package/dist/cli.js.map +1 -1
  16. package/dist/commands/assess.d.ts +2 -0
  17. package/dist/commands/assess.js +132 -164
  18. package/dist/commands/assess.js.map +1 -1
  19. package/dist/commands/demo.d.ts +5 -0
  20. package/dist/commands/demo.js +357 -0
  21. package/dist/commands/demo.js.map +1 -0
  22. package/dist/lib/__tests__/arithmetic-quick-test.d.ts +6 -0
  23. package/dist/lib/__tests__/arithmetic-quick-test.js +197 -0
  24. package/dist/lib/__tests__/arithmetic-quick-test.js.map +1 -0
  25. package/dist/lib/__tests__/arithmetic-real-llm-test.d.ts +13 -0
  26. package/dist/lib/__tests__/arithmetic-real-llm-test.js +284 -0
  27. package/dist/lib/__tests__/arithmetic-real-llm-test.js.map +1 -0
  28. package/dist/lib/__tests__/arithmetic-value-demo.d.ts +10 -0
  29. package/dist/lib/__tests__/arithmetic-value-demo.js +193 -0
  30. package/dist/lib/__tests__/arithmetic-value-demo.js.map +1 -0
  31. package/dist/lib/__tests__/flow-to-claims.test.d.ts +1 -0
  32. package/dist/lib/__tests__/flow-to-claims.test.js +91 -0
  33. package/dist/lib/__tests__/flow-to-claims.test.js.map +1 -0
  34. package/dist/lib/__tests__/formal-verifier-api-misuse.test.d.ts +9 -0
  35. package/dist/lib/__tests__/formal-verifier-api-misuse.test.js +391 -0
  36. package/dist/lib/__tests__/formal-verifier-api-misuse.test.js.map +1 -0
  37. package/dist/lib/__tests__/formal-verifier-arithmetic.test.d.ts +7 -0
  38. package/dist/lib/__tests__/formal-verifier-arithmetic.test.js +318 -0
  39. package/dist/lib/__tests__/formal-verifier-arithmetic.test.js.map +1 -0
  40. package/dist/lib/__tests__/intent-extractor.test.d.ts +1 -0
  41. package/dist/lib/__tests__/intent-extractor.test.js +97 -0
  42. package/dist/lib/__tests__/intent-extractor.test.js.map +1 -0
  43. package/dist/lib/__tests__/intent-reviewer.test.d.ts +1 -0
  44. package/dist/lib/__tests__/intent-reviewer.test.js +55 -0
  45. package/dist/lib/__tests__/intent-reviewer.test.js.map +1 -0
  46. package/dist/lib/__tests__/mr-gsm8k-benchmark.d.ts +11 -0
  47. package/dist/lib/__tests__/mr-gsm8k-benchmark.js +224 -0
  48. package/dist/lib/__tests__/mr-gsm8k-benchmark.js.map +1 -0
  49. package/dist/lib/anthropic.js +25 -33
  50. package/dist/lib/anthropic.js.map +1 -1
  51. package/dist/lib/assessment-reporter.js +9 -13
  52. package/dist/lib/assessment-reporter.js.map +1 -1
  53. package/dist/lib/claim-extractor.js +10 -19
  54. package/dist/lib/claim-extractor.js.map +1 -1
  55. package/dist/lib/code-verifier.js +16 -36
  56. package/dist/lib/code-verifier.js.map +1 -1
  57. package/dist/lib/constraint-engine.js +10 -19
  58. package/dist/lib/constraint-engine.js.map +1 -1
  59. package/dist/lib/formal-verifier.d.ts +1 -1
  60. package/dist/lib/formal-verifier.js +454 -0
  61. package/dist/lib/formal-verifier.js.map +1 -1
  62. package/dist/lib/guided-generator.js +19 -37
  63. package/dist/lib/guided-generator.js.map +1 -1
  64. package/dist/lib/intent-extractor.d.ts +47 -0
  65. package/dist/lib/intent-extractor.js +427 -0
  66. package/dist/lib/intent-extractor.js.map +1 -0
  67. package/dist/lib/intent-reviewer.d.ts +14 -0
  68. package/dist/lib/intent-reviewer.js +148 -0
  69. package/dist/lib/intent-reviewer.js.map +1 -0
  70. package/dist/lib/intent-types.d.ts +89 -0
  71. package/dist/lib/intent-types.js +5 -0
  72. package/dist/lib/intent-types.js.map +1 -0
  73. package/dist/lib/inventory-extractor.js +9 -22
  74. package/dist/lib/inventory-extractor.js.map +1 -1
  75. package/dist/lib/llm-provider.d.ts +23 -0
  76. package/dist/lib/llm-provider.js +130 -0
  77. package/dist/lib/llm-provider.js.map +1 -0
  78. package/dist/lib/remediator.js +20 -28
  79. package/dist/lib/remediator.js.map +1 -1
  80. package/dist/lib/requirements-generator.js +14 -19
  81. package/dist/lib/requirements-generator.js.map +1 -1
  82. package/dist/lib/spec-synthesizer.js +10 -19
  83. package/dist/lib/spec-synthesizer.js.map +1 -1
  84. package/dist/runtime/agents/planner-agent.d.ts +5 -2
  85. package/dist/runtime/agents/planner-agent.js +232 -1
  86. package/dist/runtime/agents/planner-agent.js.map +1 -1
  87. package/dist/runtime/app-create-orchestrator.d.ts +9 -1
  88. package/dist/runtime/app-create-orchestrator.js +265 -87
  89. package/dist/runtime/app-create-orchestrator.js.map +1 -1
  90. package/dist/runtime/check-catalog.js +5 -3
  91. package/dist/runtime/check-catalog.js.map +1 -1
  92. package/dist/runtime/check-definitions.d.ts +10 -0
  93. package/dist/runtime/check-definitions.js +52 -2
  94. package/dist/runtime/check-definitions.js.map +1 -1
  95. package/dist/runtime/composition-verifier.js +8 -12
  96. package/dist/runtime/composition-verifier.js.map +1 -1
  97. package/dist/runtime/gap-detector.js +8 -10
  98. package/dist/runtime/gap-detector.js.map +1 -1
  99. package/dist/runtime/input-validator.d.ts +7 -0
  100. package/dist/runtime/input-validator.js +162 -0
  101. package/dist/runtime/input-validator.js.map +1 -0
  102. package/dist/runtime/model-router.d.ts +10 -0
  103. package/dist/runtime/model-router.js +42 -0
  104. package/dist/runtime/model-router.js.map +1 -0
  105. package/dist/runtime/pattern-extractor.js +8 -10
  106. package/dist/runtime/pattern-extractor.js.map +1 -1
  107. package/dist/runtime/planner.js +11 -16
  108. package/dist/runtime/planner.js.map +1 -1
  109. package/dist/runtime/prompt-guard.d.ts +2 -0
  110. package/dist/runtime/prompt-guard.js +180 -0
  111. package/dist/runtime/prompt-guard.js.map +1 -0
  112. package/dist/runtime/prompt-safety-analyzer.js +8 -13
  113. package/dist/runtime/prompt-safety-analyzer.js.map +1 -1
  114. package/dist/runtime/reasoner.js +19 -33
  115. package/dist/runtime/reasoner.js.map +1 -1
  116. package/dist/runtime/rule-meta-verifier.js +9 -11
  117. package/dist/runtime/rule-meta-verifier.js.map +1 -1
  118. package/dist/runtime/safe-executor.d.ts +23 -0
  119. package/dist/runtime/safe-executor.js +151 -0
  120. package/dist/runtime/safe-executor.js.map +1 -0
  121. package/dist/runtime/specialized-agent.js +10 -14
  122. package/dist/runtime/specialized-agent.js.map +1 -1
  123. package/dist/runtime/strategy-library.js +8 -10
  124. package/dist/runtime/strategy-library.js.map +1 -1
  125. package/dist/runtime/supabase-experience-store.js.map +1 -1
  126. package/dist/runtime/supabase-provisioner.d.ts +35 -0
  127. package/dist/runtime/supabase-provisioner.js +192 -0
  128. package/dist/runtime/supabase-provisioner.js.map +1 -0
  129. package/dist/runtime/types.d.ts +116 -0
  130. package/dist/sdk/forward-verify.js +16 -33
  131. package/dist/sdk/forward-verify.js.map +1 -1
  132. package/package.json +2 -1
@@ -0,0 +1,357 @@
1
+ // ============================================================
2
+ // CLI Command: tryassay demo
3
+ // Launches both the API server and demo UI with auto-wiring
4
+ // ============================================================
5
+ import { createServer } from 'node:http';
6
+ import { readFile } from 'node:fs/promises';
7
+ import { join, extname } from 'node:path';
8
+ import { randomUUID } from 'node:crypto';
9
+ import { exec } from 'node:child_process';
10
+ import { fileURLToPath } from 'node:url';
11
+ import * as https from 'node:https';
12
+ const MIME_TYPES = {
13
+ '.html': 'text/html',
14
+ '.css': 'text/css',
15
+ '.js': 'text/javascript',
16
+ '.json': 'application/json',
17
+ '.png': 'image/png',
18
+ '.jpg': 'image/jpeg',
19
+ '.svg': 'image/svg+xml',
20
+ '.ico': 'image/x-icon',
21
+ };
22
+ // ── GitHub OAuth session store (in-memory, per demo run) ──
23
+ const githubSessions = new Map();
24
+ function getSessionId(req) {
25
+ const cookies = req.headers.cookie || '';
26
+ const match = cookies.match(/assay_session=([^;]+)/);
27
+ if (match)
28
+ return match[1];
29
+ return '';
30
+ }
31
+ function setSessionCookie(res, sessionId) {
32
+ res.setHeader('Set-Cookie', `assay_session=${sessionId}; Path=/; HttpOnly; SameSite=Lax`);
33
+ }
34
+ function readRequestBody(req) {
35
+ return new Promise((resolve, reject) => {
36
+ let body = '';
37
+ req.on('data', (chunk) => { body += chunk.toString(); });
38
+ req.on('end', () => resolve(body));
39
+ req.on('error', reject);
40
+ });
41
+ }
42
+ function sendJson(res, status, data) {
43
+ res.writeHead(status, { 'Content-Type': 'application/json' });
44
+ res.end(JSON.stringify(data));
45
+ }
46
+ /** Make an HTTPS request to the GitHub API. Returns parsed JSON. */
47
+ function githubApi(method, path, token, body) {
48
+ return new Promise((resolve, reject) => {
49
+ const postData = body ? JSON.stringify(body) : undefined;
50
+ const options = {
51
+ hostname: 'api.github.com',
52
+ path,
53
+ method,
54
+ headers: {
55
+ 'User-Agent': 'Assay-Demo',
56
+ 'Authorization': `Bearer ${token}`,
57
+ 'Accept': 'application/vnd.github+json',
58
+ ...(postData ? { 'Content-Type': 'application/json', 'Content-Length': Buffer.byteLength(postData) } : {}),
59
+ },
60
+ };
61
+ const req = https.request(options, (res) => {
62
+ let data = '';
63
+ res.on('data', (chunk) => { data += chunk.toString(); });
64
+ res.on('end', () => {
65
+ try {
66
+ resolve(data ? JSON.parse(data) : {});
67
+ }
68
+ catch {
69
+ resolve({ raw: data });
70
+ }
71
+ });
72
+ });
73
+ req.on('error', reject);
74
+ if (postData)
75
+ req.write(postData);
76
+ req.end();
77
+ });
78
+ }
79
+ /** Exchange OAuth code for access token */
80
+ async function exchangeCodeForToken(code, clientId, clientSecret) {
81
+ return new Promise((resolve, reject) => {
82
+ const postData = JSON.stringify({
83
+ client_id: clientId,
84
+ client_secret: clientSecret,
85
+ code,
86
+ });
87
+ const req = https.request({
88
+ hostname: 'github.com',
89
+ path: '/login/oauth/access_token',
90
+ method: 'POST',
91
+ headers: {
92
+ 'Content-Type': 'application/json',
93
+ 'Accept': 'application/json',
94
+ 'Content-Length': Buffer.byteLength(postData),
95
+ },
96
+ }, (res) => {
97
+ let data = '';
98
+ res.on('data', (chunk) => { data += chunk.toString(); });
99
+ res.on('end', async () => {
100
+ try {
101
+ const parsed = JSON.parse(data);
102
+ if (!parsed.access_token) {
103
+ resolve(null);
104
+ return;
105
+ }
106
+ // Get username
107
+ const user = await githubApi('GET', '/user', parsed.access_token);
108
+ resolve({
109
+ token: parsed.access_token,
110
+ username: user.login || 'unknown',
111
+ });
112
+ }
113
+ catch {
114
+ resolve(null);
115
+ }
116
+ });
117
+ });
118
+ req.on('error', reject);
119
+ req.write(postData);
120
+ req.end();
121
+ });
122
+ }
123
+ /** Push files to a new GitHub repo using the Git Data API (no git CLI needed) */
124
+ async function pushToGitHub(token, owner, repoName, isPrivate, files) {
125
+ // 1. Create repo
126
+ const repo = await githubApi('POST', '/user/repos', token, {
127
+ name: repoName,
128
+ private: isPrivate,
129
+ auto_init: false,
130
+ });
131
+ if (repo.message) {
132
+ return { success: false, error: repo.message };
133
+ }
134
+ const fullName = repo.full_name || `${owner}/${repoName}`;
135
+ // 2. Create blobs for each file
136
+ const treeEntries = [];
137
+ for (const file of files) {
138
+ const blob = await githubApi('POST', `/repos/${fullName}/git/blobs`, token, {
139
+ content: Buffer.from(file.content).toString('base64'),
140
+ encoding: 'base64',
141
+ });
142
+ treeEntries.push({
143
+ path: file.path,
144
+ mode: '100644',
145
+ type: 'blob',
146
+ sha: blob.sha,
147
+ });
148
+ }
149
+ // 3. Create tree
150
+ const tree = await githubApi('POST', `/repos/${fullName}/git/trees`, token, {
151
+ tree: treeEntries,
152
+ });
153
+ // 4. Create commit
154
+ const commit = await githubApi('POST', `/repos/${fullName}/git/commits`, token, {
155
+ message: 'Initial commit from Assay demo',
156
+ tree: tree.sha,
157
+ });
158
+ // 5. Create main branch ref
159
+ await githubApi('POST', `/repos/${fullName}/git/refs`, token, {
160
+ ref: 'refs/heads/main',
161
+ sha: commit.sha,
162
+ });
163
+ // 6. Set default branch to main
164
+ await githubApi('PATCH', `/repos/${fullName}`, token, {
165
+ default_branch: 'main',
166
+ });
167
+ return {
168
+ success: true,
169
+ repoUrl: repo.html_url || `https://github.com/${fullName}`,
170
+ };
171
+ }
172
+ export async function demoCommand(opts) {
173
+ // Step 1: Default to CLI provider for local demo (uses Claude subscription)
174
+ if (!process.env.ASSAY_LLM_PROVIDER) {
175
+ process.env.ASSAY_LLM_PROVIDER = 'cli';
176
+ }
177
+ // Only require API key when using the API provider
178
+ if (process.env.ASSAY_LLM_PROVIDER !== 'cli' && !process.env.ANTHROPIC_API_KEY) {
179
+ console.error('');
180
+ console.error(' Error: ANTHROPIC_API_KEY environment variable is required for API mode.');
181
+ console.error('');
182
+ console.error(' Either set: export ANTHROPIC_API_KEY=sk-ant-...');
183
+ console.error(' Or use CLI: export ASSAY_LLM_PROVIDER=cli (uses Claude subscription)');
184
+ console.error('');
185
+ process.exit(1);
186
+ }
187
+ const apiPort = opts.apiPort ? parseInt(opts.apiPort, 10) : 3800;
188
+ const uiPort = opts.uiPort ? parseInt(opts.uiPort, 10) : 9090;
189
+ const shouldOpen = opts.open !== false;
190
+ // Step 2: Start the API server
191
+ const { TeamApiServer } = await import('../api/server.js');
192
+ const apiServer = new TeamApiServer({ port: apiPort, demoMode: true });
193
+ const devKey = `dev-${randomUUID().slice(0, 16)}`;
194
+ apiServer.registerApiKey(devKey, 'pro', 'dev-org');
195
+ await apiServer.start();
196
+ // Step 3: Start the static file server for demo/
197
+ // Resolve demo/ relative to the package root (two levels up from dist/commands/)
198
+ const __filename = fileURLToPath(import.meta.url);
199
+ const packageRoot = join(__filename, '..', '..', '..');
200
+ const demoDir = join(packageRoot, 'demo');
201
+ const githubClientId = process.env.GITHUB_CLIENT_ID || '';
202
+ const githubClientSecret = process.env.GITHUB_CLIENT_SECRET || '';
203
+ const githubEnabled = !!(githubClientId && githubClientSecret);
204
+ if (githubEnabled) {
205
+ console.log(' GitHub: OAuth enabled (Push to GitHub available)');
206
+ }
207
+ const uiServer = createServer(async (req, res) => {
208
+ // COOP/COEP headers required for WebContainer API
209
+ res.setHeader('Cross-Origin-Embedder-Policy', 'credentialless');
210
+ res.setHeader('Cross-Origin-Opener-Policy', 'same-origin');
211
+ const parsedUrl = new URL(req.url || '/', `http://localhost:${uiPort}`);
212
+ const urlPath = parsedUrl.pathname;
213
+ const method = req.method || 'GET';
214
+ // ── GitHub OAuth & Export API routes ──
215
+ // CORS for API routes
216
+ if (urlPath.startsWith('/api/')) {
217
+ res.setHeader('Access-Control-Allow-Origin', '*');
218
+ res.setHeader('Access-Control-Allow-Methods', 'GET, POST, OPTIONS');
219
+ res.setHeader('Access-Control-Allow-Headers', 'Content-Type, Authorization');
220
+ if (method === 'OPTIONS') {
221
+ res.writeHead(204);
222
+ res.end();
223
+ return;
224
+ }
225
+ }
226
+ // GET /api/v1/auth/github — redirect to GitHub OAuth
227
+ if (urlPath === '/api/v1/auth/github' && method === 'GET') {
228
+ if (!githubEnabled) {
229
+ sendJson(res, 400, { error: 'GitHub OAuth not configured. Set GITHUB_CLIENT_ID and GITHUB_CLIENT_SECRET.' });
230
+ return;
231
+ }
232
+ const sessionId = randomUUID();
233
+ setSessionCookie(res, sessionId);
234
+ const callbackUrl = `http://localhost:${uiPort}/api/v1/auth/github/callback`;
235
+ const authUrl = `https://github.com/login/oauth/authorize?client_id=${githubClientId}&redirect_uri=${encodeURIComponent(callbackUrl)}&scope=repo&state=${sessionId}`;
236
+ res.writeHead(302, { Location: authUrl });
237
+ res.end();
238
+ return;
239
+ }
240
+ // GET /api/v1/auth/github/callback — exchange code for token
241
+ if (urlPath === '/api/v1/auth/github/callback' && method === 'GET') {
242
+ const code = parsedUrl.searchParams.get('code');
243
+ const state = parsedUrl.searchParams.get('state');
244
+ if (!code || !state) {
245
+ res.writeHead(400, { 'Content-Type': 'text/html' });
246
+ res.end('<html><body><h2>Authorization failed</h2><script>window.close();</script></body></html>');
247
+ return;
248
+ }
249
+ const result = await exchangeCodeForToken(code, githubClientId, githubClientSecret);
250
+ if (result) {
251
+ githubSessions.set(state, result);
252
+ setSessionCookie(res, state);
253
+ res.writeHead(200, { 'Content-Type': 'text/html' });
254
+ res.end('<html><body><h2>Connected to GitHub!</h2><p>You can close this window.</p><script>window.close();</script></body></html>');
255
+ }
256
+ else {
257
+ res.writeHead(200, { 'Content-Type': 'text/html' });
258
+ res.end('<html><body><h2>Authorization failed</h2><p>Please try again.</p><script>window.close();</script></body></html>');
259
+ }
260
+ return;
261
+ }
262
+ // GET /api/v1/auth/github/status — check if user is authenticated
263
+ if (urlPath === '/api/v1/auth/github/status' && method === 'GET') {
264
+ const sid = getSessionId(req);
265
+ const session = sid ? githubSessions.get(sid) : null;
266
+ sendJson(res, 200, {
267
+ authenticated: !!session,
268
+ username: session?.username || null,
269
+ configured: githubEnabled,
270
+ });
271
+ return;
272
+ }
273
+ // POST /api/v1/app/:id/export/github — push files to GitHub
274
+ const exportMatch = urlPath.match(/^\/api\/v1\/app\/([^/]+)\/export\/github$/);
275
+ if (exportMatch && method === 'POST') {
276
+ const sid = getSessionId(req);
277
+ const session = sid ? githubSessions.get(sid) : null;
278
+ if (!session) {
279
+ sendJson(res, 401, { error: 'Not authenticated with GitHub' });
280
+ return;
281
+ }
282
+ const body = await readRequestBody(req);
283
+ let payload;
284
+ try {
285
+ payload = JSON.parse(body);
286
+ }
287
+ catch {
288
+ sendJson(res, 400, { error: 'Invalid JSON' });
289
+ return;
290
+ }
291
+ if (!payload.repoName || !payload.files || payload.files.length === 0) {
292
+ sendJson(res, 400, { error: 'Missing repoName or files' });
293
+ return;
294
+ }
295
+ const result = await pushToGitHub(session.token, session.username, payload.repoName, payload.private !== false, payload.files);
296
+ sendJson(res, result.success ? 201 : 400, result);
297
+ return;
298
+ }
299
+ // ── Static file serving ──
300
+ const filePath = join(demoDir, urlPath === '/' ? 'index.html' : urlPath);
301
+ // Prevent directory traversal
302
+ if (!filePath.startsWith(demoDir)) {
303
+ res.writeHead(403);
304
+ res.end('Forbidden');
305
+ return;
306
+ }
307
+ try {
308
+ const content = await readFile(filePath);
309
+ const ext = extname(filePath);
310
+ const mime = MIME_TYPES[ext] || 'application/octet-stream';
311
+ res.writeHead(200, { 'Content-Type': mime });
312
+ res.end(content);
313
+ }
314
+ catch {
315
+ res.writeHead(404);
316
+ res.end('Not found');
317
+ }
318
+ });
319
+ await new Promise((resolve) => {
320
+ uiServer.listen(uiPort, () => resolve());
321
+ });
322
+ // Step 4: Build the URL with API connection params
323
+ const demoUrl = `http://localhost:${uiPort}?api=http://localhost:${apiPort}&key=${devKey}`;
324
+ // Step 5: Print info
325
+ console.log('');
326
+ console.log(' Assay Interactive Demo');
327
+ console.log(' ======================');
328
+ console.log('');
329
+ console.log(` Demo UI: http://localhost:${uiPort}`);
330
+ console.log(` API Server: http://localhost:${apiPort}`);
331
+ console.log(` API Key: ${devKey}`);
332
+ console.log('');
333
+ console.log(` Open: ${demoUrl}`);
334
+ console.log('');
335
+ console.log(' The demo will ask clarifying questions before building.');
336
+ console.log(' Press Ctrl+C to stop both servers.');
337
+ console.log('');
338
+ // Step 6: Open browser
339
+ if (shouldOpen) {
340
+ const cmd = process.platform === 'darwin' ? 'open' : 'xdg-open';
341
+ exec(`${cmd} "${demoUrl}"`, (err) => {
342
+ if (err)
343
+ console.warn(' Could not auto-open browser:', err.message);
344
+ });
345
+ }
346
+ // Step 7: Graceful shutdown
347
+ const shutdown = async () => {
348
+ console.log('');
349
+ console.log(' Shutting down...');
350
+ uiServer.close();
351
+ await apiServer.stop();
352
+ process.exit(0);
353
+ };
354
+ process.on('SIGINT', shutdown);
355
+ process.on('SIGTERM', shutdown);
356
+ }
357
+ //# sourceMappingURL=demo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"demo.js","sourceRoot":"","sources":["../../src/commands/demo.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Quick A/B test — single case, real LLM via Claude CLI.
4
+ * Tests: does the LLM miss arithmetic bugs in comments that the formal verifier catches?
5
+ */
6
+ export {};
@@ -0,0 +1,197 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Quick A/B test — single case, real LLM via Claude CLI.
4
+ * Tests: does the LLM miss arithmetic bugs in comments that the formal verifier catches?
5
+ */
6
+ import { execSync } from 'node:child_process';
7
+ import { runFormalVerification } from '../formal-verifier.js';
8
+ function claudePrompt(systemPrompt, userPrompt, retries = 2) {
9
+ for (let attempt = 0; attempt <= retries; attempt++) {
10
+ try {
11
+ const result = execSync(`claude --print --model claude-sonnet-4-20250514 --system-prompt ${JSON.stringify(systemPrompt)}`, {
12
+ input: userPrompt,
13
+ encoding: 'utf-8',
14
+ timeout: 120_000,
15
+ maxBuffer: 1024 * 1024,
16
+ env: { ...process.env, CLAUDECODE: '' },
17
+ });
18
+ const trimmed = result.trim();
19
+ if (trimmed.length > 0)
20
+ return trimmed;
21
+ console.log(` (empty response, retry ${attempt + 1}/${retries + 1})`);
22
+ }
23
+ catch (e) {
24
+ console.log(` (error: ${e.message?.slice(0, 80)}, retry ${attempt + 1}/${retries + 1})`);
25
+ }
26
+ }
27
+ throw new Error('Claude CLI returned empty/error response after all retries');
28
+ }
29
+ const CODE = `
30
+ // Invoice calculator module
31
+ // Tax rate: 8% applied to subtotal
32
+ // Example: subtotal $250, tax = 250 * 0.08 = 19, total = 269
33
+
34
+ function calculateInvoice(items: Array<{price: number, qty: number}>) {
35
+ const subtotal = items.reduce((sum, item) => sum + item.price * item.qty, 0);
36
+ const taxRate = 0.08;
37
+ const tax = subtotal * taxRate;
38
+ const total = subtotal + tax;
39
+ return { subtotal, tax, total };
40
+ }
41
+
42
+ // Commission: 12% of total sales
43
+ // For a $5000 sale: commission = 5000 * 0.12 = 590
44
+ const COMMISSION_RATE = 0.12;
45
+ function getCommission(sales: number) {
46
+ return sales * COMMISSION_RATE;
47
+ }
48
+
49
+ // Batch pricing: 24 units * $7.50 per unit = $182
50
+ const UNITS_PER_BATCH = 24;
51
+ const UNIT_PRICE = 7.50;
52
+ const BATCH_PRICE = 24 * 7.50;
53
+ `.trim();
54
+ const KNOWN_BUGS = [
55
+ '250 * 0.08 = 19 (wrong, should be 20)',
56
+ 'total = 269 (wrong, should be 270)',
57
+ '5000 * 0.12 = 590 (wrong, should be 600)',
58
+ '24 * 7.50 = 182 (wrong, should be 180)',
59
+ ];
60
+ function main() {
61
+ console.log('═══════════════════════════════════════════════════════════');
62
+ console.log(' REAL LLM A/B TEST — Single Case');
63
+ console.log(' Code has 4 deliberate arithmetic errors in comments');
64
+ console.log('═══════════════════════════════════════════════════════════\n');
65
+ console.log('Known bugs:');
66
+ KNOWN_BUGS.forEach(b => console.log(` • ${b}`));
67
+ // Phase 1: Extract claims
68
+ console.log('\n[1/3] Extracting claims via Claude CLI (--print mode)...');
69
+ const t1 = Date.now();
70
+ const extractRaw = claudePrompt(`Extract every testable claim this code makes — especially arithmetic claims in comments. Return ONLY a JSON array: [{"id":"CLAIM-001","category":"correctness","severity":"high","description":"...","assertion":"..."}] No markdown fences.`, `Language: typescript\n\nCode:\n${CODE}`);
71
+ console.log(` Done in ${((Date.now() - t1) / 1000).toFixed(1)}s`);
72
+ let claims;
73
+ try {
74
+ let t = extractRaw;
75
+ if (t.startsWith('```'))
76
+ t = t.slice(t.indexOf('\n') + 1);
77
+ if (t.includes('```'))
78
+ t = t.slice(0, t.lastIndexOf('```'));
79
+ t = t.trim();
80
+ const raw = JSON.parse(t);
81
+ claims = raw.filter(r => r.description && r.assertion).map((r, i) => ({
82
+ id: r.id || `CLAIM-${i + 1}`,
83
+ category: r.category || 'correctness',
84
+ severity: r.severity || 'medium',
85
+ description: r.description,
86
+ assertion: r.assertion,
87
+ }));
88
+ }
89
+ catch (e) {
90
+ console.error('Failed to parse claims:', e);
91
+ console.log('Raw output:', extractRaw.slice(0, 500));
92
+ process.exit(1);
93
+ }
94
+ console.log(` Extracted ${claims.length} claims\n`);
95
+ // Phase 2: LLM verification
96
+ console.log('[2/3] Verifying claims via Claude CLI...');
97
+ const t2 = Date.now();
98
+ const claimList = claims.map(c => `[${c.id}] ${c.description}\n Assertion: ${c.assertion}`).join('\n\n');
99
+ const verifyRaw = claudePrompt(`Verify each claim against the code. Return ONLY a JSON array:
100
+ [{"claimId":"CLAIM-001","verdict":"PASS|FAIL|PARTIAL","reasoning":"..."}]
101
+ No markdown fences.`, `Code:\n${CODE}\n\nClaims:\n${claimList}`);
102
+ console.log(` Done in ${((Date.now() - t2) / 1000).toFixed(1)}s`);
103
+ let llmVerifications;
104
+ try {
105
+ let t = verifyRaw.trim();
106
+ if (t.startsWith('```'))
107
+ t = t.slice(t.indexOf('\n') + 1);
108
+ if (t.includes('```'))
109
+ t = t.slice(0, t.lastIndexOf('```'));
110
+ t = t.trim();
111
+ const raw = JSON.parse(t);
112
+ llmVerifications = raw.filter(v => v.claimId && v.verdict).map(v => ({
113
+ claimId: v.claimId,
114
+ verdict: ['PASS', 'FAIL', 'PARTIAL', 'N/A'].includes(v.verdict) ? v.verdict : 'N/A',
115
+ reasoning: v.reasoning || '',
116
+ }));
117
+ }
118
+ catch (e) {
119
+ console.error('Failed to parse verifications:', e);
120
+ console.log('Raw output:', verifyRaw.slice(0, 500));
121
+ process.exit(1);
122
+ }
123
+ // Fill missing
124
+ for (const c of claims) {
125
+ if (!llmVerifications.some(v => v.claimId === c.id)) {
126
+ llmVerifications.push({ claimId: c.id, verdict: 'N/A', reasoning: 'Not returned' });
127
+ }
128
+ }
129
+ // Snapshot LLM-only results
130
+ const llmPass = llmVerifications.filter(v => v.verdict === 'PASS').length;
131
+ const llmFail = llmVerifications.filter(v => v.verdict === 'FAIL').length;
132
+ // Phase 3: Formal verification
133
+ console.log('\n[3/3] Applying formal verification (deterministic)...');
134
+ const { verifications: merged, stats } = runFormalVerification(CODE, 'typescript', claims, llmVerifications);
135
+ const formalPass = merged.filter(v => v.verdict === 'PASS').length;
136
+ const formalFail = merged.filter(v => v.verdict === 'FAIL').length;
137
+ const overrides = merged.filter(v => v.formal_override);
138
+ // Detailed per-claim output
139
+ console.log('\n── Per-Claim Detail ──');
140
+ for (const v of merged) {
141
+ const llmV = llmVerifications.find(lv => lv.claimId === v.claimId);
142
+ const claim = claims.find(c => c.id === v.claimId);
143
+ const method = v.verification_method === 'formal' ? '🔬' : '🤖';
144
+ const override = v.formal_override ? ` ← OVERRIDE (LLM said ${v.formal_override.original_llm_verdict})` : '';
145
+ console.log(` ${method} ${v.claimId}: ${v.verdict}${override}`);
146
+ console.log(` Claim: ${claim?.description?.slice(0, 80)}`);
147
+ if (llmV)
148
+ console.log(` LLM reasoning: ${llmV.reasoning?.slice(0, 100)}`);
149
+ if (v.formal_override)
150
+ console.log(` Formal evidence: ${v.formal_override.reason}`);
151
+ }
152
+ // Report
153
+ console.log('\n═══════════════════════════════════════════════════════════');
154
+ console.log(' RESULTS');
155
+ console.log('═══════════════════════════════════════════════════════════\n');
156
+ console.log(` Claims extracted: ${claims.length}`);
157
+ console.log(` LLM-only: ${llmFail} FAIL / ${llmPass} PASS`);
158
+ console.log(` With formal: ${formalFail} FAIL / ${formalPass} PASS`);
159
+ console.log(` Formal overrides: ${overrides.length}`);
160
+ console.log(` Formal stats: ${stats.formally_verified} formal, ${stats.llm_verified} llm-only\n`);
161
+ if (overrides.length > 0) {
162
+ console.log(' 🔴 BUGS FORMAL CAUGHT THAT LLM MISSED:');
163
+ for (const v of overrides) {
164
+ console.log(` ${v.claimId}: LLM said ${v.formal_override.original_llm_verdict} → Formal: ${v.formal_override.formal_verdict}`);
165
+ console.log(` ${v.formal_override.reason}\n`);
166
+ }
167
+ }
168
+ // Also show what LLM caught on its own
169
+ const llmCaught = llmVerifications.filter(v => v.verdict === 'FAIL');
170
+ if (llmCaught.length > 0) {
171
+ console.log(' 🟡 BUGS LLM CAUGHT ON ITS OWN:');
172
+ for (const v of llmCaught) {
173
+ console.log(` ${v.claimId}: ${v.reasoning.slice(0, 100)}`);
174
+ }
175
+ console.log();
176
+ }
177
+ console.log('═══════════════════════════════════════════════════════════');
178
+ const added = formalFail - llmFail;
179
+ if (added > 0) {
180
+ console.log(` VALUE ADD: +${added} bugs caught by formal that LLM missed`);
181
+ }
182
+ else if (overrides.length === 0 && llmFail >= 4) {
183
+ console.log(` LLM caught all bugs — formal verification confirmed (no override needed)`);
184
+ }
185
+ else {
186
+ console.log(` No additional bugs caught — LLM may have found them already`);
187
+ }
188
+ console.log('═══════════════════════════════════════════════════════════');
189
+ }
190
+ try {
191
+ main();
192
+ }
193
+ catch (err) {
194
+ console.error(err);
195
+ process.exit(1);
196
+ }
197
+ //# sourceMappingURL=arithmetic-quick-test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"arithmetic-quick-test.js","sourceRoot":"","sources":["../../../src/lib/__tests__/arithmetic-quick-test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ #!/usr/bin/env npx tsx
2
+ /**
3
+ * Real LLM A/B Test — Arithmetic Formal Verification Value
4
+ *
5
+ * Uses Claude CLI (subscription, not API credits) to:
6
+ * 1. Extract claims from code with arithmetic bugs
7
+ * 2. LLM-verify those claims
8
+ * 3. Apply formal verification
9
+ * 4. Compare: what did the LLM miss that formal caught?
10
+ *
11
+ * Usage: ASSAY_LLM_PROVIDER=cli npx tsx src/lib/__tests__/arithmetic-real-llm-test.ts
12
+ */
13
+ export {};