tryassay 0.22.0 → 0.22.2
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/demo/css/style.css +495 -836
- package/demo/index.html +40 -184
- package/demo/js/chat.js +385 -142
- package/demo/js/preview.js +456 -0
- package/demo/js/sse-client.js +262 -135
- package/demo/js/state.js +11 -1
- package/demo/js/timeline.js +57 -371
- package/dist/api/server.d.ts +2 -0
- package/dist/api/server.js +63 -19
- package/dist/api/server.js.map +1 -1
- package/dist/cli.js +2 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/assess.d.ts +2 -0
- package/dist/commands/assess.js +132 -164
- package/dist/commands/assess.js.map +1 -1
- package/dist/commands/demo.js +259 -9
- package/dist/commands/demo.js.map +1 -1
- package/dist/lib/__tests__/arithmetic-quick-test.d.ts +6 -0
- package/dist/lib/__tests__/arithmetic-quick-test.js +197 -0
- package/dist/lib/__tests__/arithmetic-quick-test.js.map +1 -0
- package/dist/lib/__tests__/arithmetic-real-llm-test.d.ts +13 -0
- package/dist/lib/__tests__/arithmetic-real-llm-test.js +284 -0
- package/dist/lib/__tests__/arithmetic-real-llm-test.js.map +1 -0
- package/dist/lib/__tests__/arithmetic-value-demo.d.ts +10 -0
- package/dist/lib/__tests__/arithmetic-value-demo.js +193 -0
- package/dist/lib/__tests__/arithmetic-value-demo.js.map +1 -0
- package/dist/lib/__tests__/flow-to-claims.test.d.ts +1 -0
- package/dist/lib/__tests__/flow-to-claims.test.js +91 -0
- package/dist/lib/__tests__/flow-to-claims.test.js.map +1 -0
- package/dist/lib/__tests__/formal-verifier-api-misuse.test.d.ts +9 -0
- package/dist/lib/__tests__/formal-verifier-api-misuse.test.js +391 -0
- package/dist/lib/__tests__/formal-verifier-api-misuse.test.js.map +1 -0
- package/dist/lib/__tests__/formal-verifier-arithmetic.test.d.ts +7 -0
- package/dist/lib/__tests__/formal-verifier-arithmetic.test.js +318 -0
- package/dist/lib/__tests__/formal-verifier-arithmetic.test.js.map +1 -0
- package/dist/lib/__tests__/intent-extractor.test.d.ts +1 -0
- package/dist/lib/__tests__/intent-extractor.test.js +97 -0
- package/dist/lib/__tests__/intent-extractor.test.js.map +1 -0
- package/dist/lib/__tests__/intent-reviewer.test.d.ts +1 -0
- package/dist/lib/__tests__/intent-reviewer.test.js +55 -0
- package/dist/lib/__tests__/intent-reviewer.test.js.map +1 -0
- package/dist/lib/__tests__/mr-gsm8k-benchmark.d.ts +11 -0
- package/dist/lib/__tests__/mr-gsm8k-benchmark.js +224 -0
- package/dist/lib/__tests__/mr-gsm8k-benchmark.js.map +1 -0
- package/dist/lib/anthropic.js +25 -33
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/assessment-reporter.js +9 -13
- package/dist/lib/assessment-reporter.js.map +1 -1
- package/dist/lib/claim-extractor.js +10 -19
- package/dist/lib/claim-extractor.js.map +1 -1
- package/dist/lib/code-verifier.js +16 -36
- package/dist/lib/code-verifier.js.map +1 -1
- package/dist/lib/constraint-engine.js +10 -19
- package/dist/lib/constraint-engine.js.map +1 -1
- package/dist/lib/formal-verifier.d.ts +1 -1
- package/dist/lib/formal-verifier.js +454 -0
- package/dist/lib/formal-verifier.js.map +1 -1
- package/dist/lib/guided-generator.js +19 -37
- package/dist/lib/guided-generator.js.map +1 -1
- package/dist/lib/intent-extractor.d.ts +47 -0
- package/dist/lib/intent-extractor.js +432 -0
- package/dist/lib/intent-extractor.js.map +1 -0
- package/dist/lib/intent-reviewer.d.ts +14 -0
- package/dist/lib/intent-reviewer.js +148 -0
- package/dist/lib/intent-reviewer.js.map +1 -0
- package/dist/lib/intent-types.d.ts +89 -0
- package/dist/lib/intent-types.js +5 -0
- package/dist/lib/intent-types.js.map +1 -0
- package/dist/lib/inventory-extractor.js +9 -22
- package/dist/lib/inventory-extractor.js.map +1 -1
- package/dist/lib/llm-provider.d.ts +23 -0
- package/dist/lib/llm-provider.js +130 -0
- package/dist/lib/llm-provider.js.map +1 -0
- package/dist/lib/remediator.js +20 -28
- package/dist/lib/remediator.js.map +1 -1
- package/dist/lib/requirements-generator.js +14 -19
- package/dist/lib/requirements-generator.js.map +1 -1
- package/dist/lib/spec-synthesizer.js +10 -19
- package/dist/lib/spec-synthesizer.js.map +1 -1
- package/dist/runtime/app-create-orchestrator.d.ts +5 -1
- package/dist/runtime/app-create-orchestrator.js +114 -39
- package/dist/runtime/app-create-orchestrator.js.map +1 -1
- package/dist/runtime/check-catalog.js +5 -3
- package/dist/runtime/check-catalog.js.map +1 -1
- package/dist/runtime/check-definitions.d.ts +10 -0
- package/dist/runtime/check-definitions.js +52 -2
- package/dist/runtime/check-definitions.js.map +1 -1
- package/dist/runtime/composition-verifier.js +8 -12
- package/dist/runtime/composition-verifier.js.map +1 -1
- package/dist/runtime/gap-detector.js +8 -10
- package/dist/runtime/gap-detector.js.map +1 -1
- package/dist/runtime/input-validator.d.ts +7 -0
- package/dist/runtime/input-validator.js +162 -0
- package/dist/runtime/input-validator.js.map +1 -0
- package/dist/runtime/model-router.d.ts +10 -0
- package/dist/runtime/model-router.js +42 -0
- package/dist/runtime/model-router.js.map +1 -0
- package/dist/runtime/pattern-extractor.js +8 -10
- package/dist/runtime/pattern-extractor.js.map +1 -1
- package/dist/runtime/planner.js +11 -16
- package/dist/runtime/planner.js.map +1 -1
- package/dist/runtime/prompt-guard.d.ts +2 -0
- package/dist/runtime/prompt-guard.js +180 -0
- package/dist/runtime/prompt-guard.js.map +1 -0
- package/dist/runtime/prompt-safety-analyzer.js +8 -13
- package/dist/runtime/prompt-safety-analyzer.js.map +1 -1
- package/dist/runtime/reasoner.js +19 -33
- package/dist/runtime/reasoner.js.map +1 -1
- package/dist/runtime/rule-meta-verifier.js +9 -11
- package/dist/runtime/rule-meta-verifier.js.map +1 -1
- package/dist/runtime/safe-executor.d.ts +23 -0
- package/dist/runtime/safe-executor.js +151 -0
- package/dist/runtime/safe-executor.js.map +1 -0
- package/dist/runtime/specialized-agent.js +10 -14
- package/dist/runtime/specialized-agent.js.map +1 -1
- package/dist/runtime/strategy-library.js +8 -10
- package/dist/runtime/strategy-library.js.map +1 -1
- package/dist/runtime/supabase-experience-store.js.map +1 -1
- package/dist/runtime/supabase-provisioner.d.ts +35 -0
- package/dist/runtime/supabase-provisioner.js +192 -0
- package/dist/runtime/supabase-provisioner.js.map +1 -0
- package/dist/runtime/types.d.ts +88 -0
- package/dist/sdk/forward-verify.js +16 -33
- package/dist/sdk/forward-verify.js.map +1 -1
- package/package.json +1 -1
- package/demo/data/demo-events.json +0 -103
- package/demo/js/demo-mode.js +0 -107
- package/demo/js/orb.js +0 -634
- package/demo/js/question-cards.js +0 -207
- package/demo/js/voice.js +0 -154
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"supabase-experience-store.js","sourceRoot":"","sources":["../../src/runtime/supabase-experience-store.ts"],"names":[],"mappings":"AAAA,+DAA+D;AAC/D,2DAA2D;AAC3D,mEAAmE;AACnE,yDAAyD;AACzD,+DAA+D;AAE/D,OAAO,EAAE,YAAY,EAAkB,MAAM,uBAAuB,CAAC;
|
|
1
|
+
{"version":3,"file":"supabase-experience-store.js","sourceRoot":"","sources":["../../src/runtime/supabase-experience-store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import type { SupabaseProvisionResult } from './types.js';
|
|
2
|
+
export interface SupabaseProvisionerConfig {
|
|
3
|
+
readonly orgId: string;
|
|
4
|
+
readonly region: string;
|
|
5
|
+
readonly projectName: string;
|
|
6
|
+
readonly maxWaitMs?: number;
|
|
7
|
+
readonly pollIntervalMs?: number;
|
|
8
|
+
}
|
|
9
|
+
export interface MigrationResult {
|
|
10
|
+
readonly success: boolean;
|
|
11
|
+
readonly error?: string;
|
|
12
|
+
}
|
|
13
|
+
export declare class SupabaseProvisioner {
|
|
14
|
+
private readonly orgId;
|
|
15
|
+
private readonly region;
|
|
16
|
+
private readonly projectName;
|
|
17
|
+
private readonly maxWaitMs;
|
|
18
|
+
private readonly pollIntervalMs;
|
|
19
|
+
constructor(config: SupabaseProvisionerConfig);
|
|
20
|
+
/**
|
|
21
|
+
* Provision a new Supabase project:
|
|
22
|
+
* 1. Create project via CLI
|
|
23
|
+
* 2. Poll until ACTIVE_HEALTHY
|
|
24
|
+
* 3. Retrieve API keys
|
|
25
|
+
*/
|
|
26
|
+
provision(): Promise<SupabaseProvisionResult>;
|
|
27
|
+
/**
|
|
28
|
+
* Link project and push migrations from the generated app's supabase/ directory.
|
|
29
|
+
*/
|
|
30
|
+
pushMigrations(projectPath: string, projectRef: string): MigrationResult;
|
|
31
|
+
/** Generate a cryptographically secure password. */
|
|
32
|
+
generatePassword(): string;
|
|
33
|
+
private waitForHealthy;
|
|
34
|
+
private sleep;
|
|
35
|
+
}
|
|
@@ -0,0 +1,192 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// Supabase Auto-Provisioner
|
|
3
|
+
// Creates a real Supabase project via CLI, waits for readiness,
|
|
4
|
+
// retrieves API keys, and optionally pushes migrations.
|
|
5
|
+
// Pure CLI calls — no LLM involvement, cannot hallucinate.
|
|
6
|
+
// Uses SafeExecutor — arguments never touch a shell parser.
|
|
7
|
+
// ============================================================
|
|
8
|
+
import { randomBytes } from 'node:crypto';
|
|
9
|
+
import { safeExecSync } from './safe-executor.js';
|
|
10
|
+
export class SupabaseProvisioner {
|
|
11
|
+
orgId;
|
|
12
|
+
region;
|
|
13
|
+
projectName;
|
|
14
|
+
maxWaitMs;
|
|
15
|
+
pollIntervalMs;
|
|
16
|
+
constructor(config) {
|
|
17
|
+
this.orgId = config.orgId;
|
|
18
|
+
this.region = config.region;
|
|
19
|
+
this.projectName = config.projectName;
|
|
20
|
+
this.maxWaitMs = config.maxWaitMs ?? 120_000;
|
|
21
|
+
this.pollIntervalMs = config.pollIntervalMs ?? 5_000;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Provision a new Supabase project:
|
|
25
|
+
* 1. Create project via CLI
|
|
26
|
+
* 2. Poll until ACTIVE_HEALTHY
|
|
27
|
+
* 3. Retrieve API keys
|
|
28
|
+
*/
|
|
29
|
+
async provision() {
|
|
30
|
+
const start = Date.now();
|
|
31
|
+
const dbPassword = this.generatePassword();
|
|
32
|
+
try {
|
|
33
|
+
// Step 1: Create the project
|
|
34
|
+
const createResult = safeExecSync('supabase', [
|
|
35
|
+
'projects', 'create', this.projectName,
|
|
36
|
+
'--org-id', this.orgId,
|
|
37
|
+
'--region', this.region,
|
|
38
|
+
'--db-password', dbPassword,
|
|
39
|
+
'-o', 'json',
|
|
40
|
+
]);
|
|
41
|
+
if (createResult.exitCode !== 0) {
|
|
42
|
+
return {
|
|
43
|
+
status: 'failed',
|
|
44
|
+
error: `supabase projects create failed (exit ${createResult.exitCode}): ${createResult.stderr || createResult.stdout}`,
|
|
45
|
+
dbPassword,
|
|
46
|
+
durationMs: Date.now() - start,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
const createOutput = createResult.stdout;
|
|
50
|
+
let projectRef;
|
|
51
|
+
try {
|
|
52
|
+
const parsed = JSON.parse(createOutput);
|
|
53
|
+
projectRef = parsed.id ?? parsed.ref;
|
|
54
|
+
if (!projectRef) {
|
|
55
|
+
throw new Error(`No project ID in create output: ${createOutput.slice(0, 200)}`);
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
catch (parseErr) {
|
|
59
|
+
// Some CLI versions output the ref directly or in a different format
|
|
60
|
+
const refMatch = createOutput.match(/[a-z]{20,}/);
|
|
61
|
+
if (refMatch) {
|
|
62
|
+
projectRef = refMatch[0];
|
|
63
|
+
}
|
|
64
|
+
else {
|
|
65
|
+
return {
|
|
66
|
+
status: 'failed',
|
|
67
|
+
error: `Failed to parse project create output: ${parseErr instanceof Error ? parseErr.message : String(parseErr)}`,
|
|
68
|
+
dbPassword,
|
|
69
|
+
durationMs: Date.now() - start,
|
|
70
|
+
};
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
// Step 2: Wait for project to become ACTIVE_HEALTHY
|
|
74
|
+
const healthy = await this.waitForHealthy(projectRef);
|
|
75
|
+
if (!healthy) {
|
|
76
|
+
return {
|
|
77
|
+
status: 'failed',
|
|
78
|
+
projectRef,
|
|
79
|
+
error: `Project ${projectRef} did not reach ACTIVE_HEALTHY within ${this.maxWaitMs}ms`,
|
|
80
|
+
dbPassword,
|
|
81
|
+
durationMs: Date.now() - start,
|
|
82
|
+
};
|
|
83
|
+
}
|
|
84
|
+
// Step 3: Retrieve API keys
|
|
85
|
+
const keysResult = safeExecSync('supabase', [
|
|
86
|
+
'projects', 'api-keys',
|
|
87
|
+
'--project-ref', projectRef,
|
|
88
|
+
'-o', 'json',
|
|
89
|
+
]);
|
|
90
|
+
if (keysResult.exitCode !== 0) {
|
|
91
|
+
return {
|
|
92
|
+
status: 'failed',
|
|
93
|
+
projectRef,
|
|
94
|
+
error: `Failed to retrieve API keys (exit ${keysResult.exitCode}): ${keysResult.stderr}`,
|
|
95
|
+
dbPassword,
|
|
96
|
+
durationMs: Date.now() - start,
|
|
97
|
+
};
|
|
98
|
+
}
|
|
99
|
+
let anonKey;
|
|
100
|
+
let serviceRoleKey;
|
|
101
|
+
try {
|
|
102
|
+
const keys = JSON.parse(keysResult.stdout);
|
|
103
|
+
for (const key of keys) {
|
|
104
|
+
if (key.name === 'anon')
|
|
105
|
+
anonKey = key.api_key;
|
|
106
|
+
if (key.name === 'service_role')
|
|
107
|
+
serviceRoleKey = key.api_key;
|
|
108
|
+
}
|
|
109
|
+
}
|
|
110
|
+
catch {
|
|
111
|
+
return {
|
|
112
|
+
status: 'failed',
|
|
113
|
+
projectRef,
|
|
114
|
+
error: `Failed to parse API keys output: ${keysResult.stdout.slice(0, 200)}`,
|
|
115
|
+
dbPassword,
|
|
116
|
+
durationMs: Date.now() - start,
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
const url = `https://${projectRef}.supabase.co`;
|
|
120
|
+
return {
|
|
121
|
+
status: 'success',
|
|
122
|
+
projectRef,
|
|
123
|
+
url,
|
|
124
|
+
anonKey,
|
|
125
|
+
serviceRoleKey,
|
|
126
|
+
dbPassword,
|
|
127
|
+
durationMs: Date.now() - start,
|
|
128
|
+
};
|
|
129
|
+
}
|
|
130
|
+
catch (err) {
|
|
131
|
+
return {
|
|
132
|
+
status: 'failed',
|
|
133
|
+
error: err instanceof Error ? err.message : String(err),
|
|
134
|
+
dbPassword,
|
|
135
|
+
durationMs: Date.now() - start,
|
|
136
|
+
};
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
/**
|
|
140
|
+
* Link project and push migrations from the generated app's supabase/ directory.
|
|
141
|
+
*/
|
|
142
|
+
pushMigrations(projectPath, projectRef) {
|
|
143
|
+
const linkResult = safeExecSync('supabase', [
|
|
144
|
+
'link', '--project-ref', projectRef, '--workdir', projectPath,
|
|
145
|
+
], { timeout: 30_000 });
|
|
146
|
+
if (linkResult.exitCode !== 0) {
|
|
147
|
+
return {
|
|
148
|
+
success: false,
|
|
149
|
+
error: `supabase link failed (exit ${linkResult.exitCode}): ${linkResult.stderr || linkResult.stdout}`,
|
|
150
|
+
};
|
|
151
|
+
}
|
|
152
|
+
const pushResult = safeExecSync('supabase', [
|
|
153
|
+
'db', 'push', '--workdir', projectPath,
|
|
154
|
+
], { timeout: 60_000 });
|
|
155
|
+
if (pushResult.exitCode !== 0) {
|
|
156
|
+
return {
|
|
157
|
+
success: false,
|
|
158
|
+
error: `supabase db push failed (exit ${pushResult.exitCode}): ${pushResult.stderr || pushResult.stdout}`,
|
|
159
|
+
};
|
|
160
|
+
}
|
|
161
|
+
return { success: true };
|
|
162
|
+
}
|
|
163
|
+
/** Generate a cryptographically secure password. */
|
|
164
|
+
generatePassword() {
|
|
165
|
+
return randomBytes(24).toString('base64url');
|
|
166
|
+
}
|
|
167
|
+
// ── Private ──────────────────────────────────────────────────
|
|
168
|
+
async waitForHealthy(projectRef) {
|
|
169
|
+
const deadline = Date.now() + this.maxWaitMs;
|
|
170
|
+
while (Date.now() < deadline) {
|
|
171
|
+
try {
|
|
172
|
+
const result = safeExecSync('supabase', ['projects', 'list', '-o', 'json']);
|
|
173
|
+
if (result.exitCode === 0) {
|
|
174
|
+
const projects = JSON.parse(result.stdout);
|
|
175
|
+
const project = projects.find((p) => p.id === projectRef || p.ref === projectRef);
|
|
176
|
+
if (project?.status === 'ACTIVE_HEALTHY') {
|
|
177
|
+
return true;
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
// CLI error during poll — keep trying
|
|
183
|
+
}
|
|
184
|
+
await this.sleep(this.pollIntervalMs);
|
|
185
|
+
}
|
|
186
|
+
return false;
|
|
187
|
+
}
|
|
188
|
+
sleep(ms) {
|
|
189
|
+
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
//# sourceMappingURL=supabase-provisioner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"supabase-provisioner.js","sourceRoot":"","sources":["../../src/runtime/supabase-provisioner.ts"],"names":[],"mappings":"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"}
|
package/dist/runtime/types.d.ts
CHANGED
|
@@ -1413,6 +1413,10 @@ export type AppCreatePhase = {
|
|
|
1413
1413
|
readonly attempt: number;
|
|
1414
1414
|
readonly maxAttempts: number;
|
|
1415
1415
|
readonly failureCount: number;
|
|
1416
|
+
} | {
|
|
1417
|
+
readonly phase: 'provisioning_supabase';
|
|
1418
|
+
} | {
|
|
1419
|
+
readonly phase: 'supabase_migrations';
|
|
1416
1420
|
} | {
|
|
1417
1421
|
readonly phase: 'cross_verifying';
|
|
1418
1422
|
} | {
|
|
@@ -1532,6 +1536,22 @@ export interface AppCreateOptions {
|
|
|
1532
1536
|
readonly autoApprove?: boolean;
|
|
1533
1537
|
readonly skipFunctionalTesting?: boolean;
|
|
1534
1538
|
readonly skipPlanQuestions?: boolean;
|
|
1539
|
+
readonly supabaseOrgId?: string;
|
|
1540
|
+
readonly supabaseRegion?: string;
|
|
1541
|
+
readonly documents?: ReadonlyArray<{
|
|
1542
|
+
readonly name: string;
|
|
1543
|
+
readonly content: string;
|
|
1544
|
+
}>;
|
|
1545
|
+
}
|
|
1546
|
+
export interface SupabaseProvisionResult {
|
|
1547
|
+
readonly status: 'success' | 'failed';
|
|
1548
|
+
readonly projectRef?: string;
|
|
1549
|
+
readonly url?: string;
|
|
1550
|
+
readonly anonKey?: string;
|
|
1551
|
+
readonly serviceRoleKey?: string;
|
|
1552
|
+
readonly dbPassword?: string;
|
|
1553
|
+
readonly error?: string;
|
|
1554
|
+
readonly durationMs: number;
|
|
1535
1555
|
}
|
|
1536
1556
|
export interface PlanQuestionOption {
|
|
1537
1557
|
label: string;
|
|
@@ -1691,6 +1711,10 @@ export interface ConditionalPresenceStrategy {
|
|
|
1691
1711
|
readonly fileGlob: string;
|
|
1692
1712
|
readonly conditionPattern: string;
|
|
1693
1713
|
readonly requiredPattern: string;
|
|
1714
|
+
/** When 'project', requiredPattern is checked across ALL matching files, not per-file.
|
|
1715
|
+
* This handles cases like shared Suspense boundaries wrapping multiple lazy imports.
|
|
1716
|
+
* Default: 'file'. */
|
|
1717
|
+
readonly requiredScope?: 'file' | 'project';
|
|
1694
1718
|
}
|
|
1695
1719
|
/** A file-path reference extracted from code must point to an existing file. */
|
|
1696
1720
|
export interface FileReferenceStrategy {
|
|
@@ -1723,3 +1747,67 @@ export interface CheckLoopResult {
|
|
|
1723
1747
|
readonly duplicatesSkipped: number;
|
|
1724
1748
|
readonly classificationErrors: number;
|
|
1725
1749
|
}
|
|
1750
|
+
export type AllowedBinary = 'supabase' | 'npm' | 'npx' | 'node' | 'git' | 'tsc' | 'claude';
|
|
1751
|
+
export interface SafeExecResult {
|
|
1752
|
+
readonly stdout: string;
|
|
1753
|
+
readonly stderr: string;
|
|
1754
|
+
readonly exitCode: number | null;
|
|
1755
|
+
readonly timedOut: boolean;
|
|
1756
|
+
readonly durationMs: number;
|
|
1757
|
+
}
|
|
1758
|
+
export interface SafeExecOptions {
|
|
1759
|
+
readonly cwd?: string;
|
|
1760
|
+
readonly timeout?: number;
|
|
1761
|
+
readonly maxBuffer?: number;
|
|
1762
|
+
readonly env?: Record<string, string | undefined>;
|
|
1763
|
+
}
|
|
1764
|
+
export interface SafeSpawnOptions {
|
|
1765
|
+
readonly cwd?: string;
|
|
1766
|
+
readonly env?: Record<string, string | undefined>;
|
|
1767
|
+
readonly stdio?: readonly ('pipe' | 'ignore' | 'inherit')[];
|
|
1768
|
+
}
|
|
1769
|
+
export interface ValidationResult {
|
|
1770
|
+
readonly valid: boolean;
|
|
1771
|
+
readonly errors: readonly ValidationError[];
|
|
1772
|
+
readonly sanitized: AppDescription | null;
|
|
1773
|
+
}
|
|
1774
|
+
export interface ValidationError {
|
|
1775
|
+
readonly field: string;
|
|
1776
|
+
readonly message: string;
|
|
1777
|
+
readonly value?: unknown;
|
|
1778
|
+
}
|
|
1779
|
+
export type InjectionCategory = 'role_override' | 'system_impersonation' | 'instruction_override' | 'encoding_evasion' | 'delimiter_escape';
|
|
1780
|
+
export interface InjectionFinding {
|
|
1781
|
+
readonly category: InjectionCategory;
|
|
1782
|
+
readonly pattern: string;
|
|
1783
|
+
readonly match: string;
|
|
1784
|
+
readonly severity: 'high' | 'medium' | 'low';
|
|
1785
|
+
readonly weight: number;
|
|
1786
|
+
}
|
|
1787
|
+
export interface PromptGuardResult {
|
|
1788
|
+
readonly clean: boolean;
|
|
1789
|
+
readonly score: number;
|
|
1790
|
+
readonly findings: readonly InjectionFinding[];
|
|
1791
|
+
readonly action: 'allow' | 'warn' | 'block';
|
|
1792
|
+
}
|
|
1793
|
+
export type TaskCategory = 'scaffolding' | 'code_generation' | 'verification' | 'planning' | 'repair' | 'testing';
|
|
1794
|
+
export type ModelTier = 'fast' | 'standard' | 'advanced';
|
|
1795
|
+
export type LLMProviderType = 'api' | 'cli';
|
|
1796
|
+
export interface LLMCompletionOptions {
|
|
1797
|
+
readonly model: string;
|
|
1798
|
+
readonly systemPrompt: string;
|
|
1799
|
+
readonly userPrompt: string;
|
|
1800
|
+
readonly maxTokens?: number;
|
|
1801
|
+
readonly temperature?: number;
|
|
1802
|
+
}
|
|
1803
|
+
export interface LLMResult {
|
|
1804
|
+
readonly content: string;
|
|
1805
|
+
readonly inputTokens: number | null;
|
|
1806
|
+
readonly outputTokens: number | null;
|
|
1807
|
+
readonly provider: LLMProviderType;
|
|
1808
|
+
readonly durationMs: number;
|
|
1809
|
+
}
|
|
1810
|
+
export interface LLMProvider {
|
|
1811
|
+
readonly type: LLMProviderType;
|
|
1812
|
+
complete(opts: LLMCompletionOptions): Promise<LLMResult>;
|
|
1813
|
+
}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MODEL } from '../lib/anthropic.js';
|
|
2
|
+
import { getProvider } from '../lib/llm-provider.js';
|
|
2
3
|
import { runFormalVerification, } from '../lib/formal-verifier.js';
|
|
3
4
|
// ── System Prompts (ported from api/v1/forward.ts) ───────────
|
|
4
5
|
const EXTRACTION_SYSTEM = `You are a code quality auditor. Given source code, extract every testable claim the code makes about its behavior.
|
|
@@ -117,23 +118,14 @@ function forwardVerificationToClaimVerification(v) {
|
|
|
117
118
|
}
|
|
118
119
|
// ── Phase 1: Extract Claims ──────────────────────────────────
|
|
119
120
|
export async function extractCodeClaims(code, language, context) {
|
|
120
|
-
const client = getClient();
|
|
121
121
|
const contextBlock = context ? `\n\nAdditional context:\n${context}` : '';
|
|
122
|
-
const response = await
|
|
122
|
+
const response = await getProvider().complete({
|
|
123
123
|
model: MODEL,
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
{
|
|
128
|
-
role: 'user',
|
|
129
|
-
content: `Language: ${language}\n\nCode:\n${code}${contextBlock}`,
|
|
130
|
-
},
|
|
131
|
-
],
|
|
124
|
+
maxTokens: 16_000,
|
|
125
|
+
systemPrompt: EXTRACTION_SYSTEM,
|
|
126
|
+
userPrompt: `Language: ${language}\n\nCode:\n${code}${contextBlock}`,
|
|
132
127
|
});
|
|
133
|
-
const text = response.content
|
|
134
|
-
.filter((block) => block.type === 'text')
|
|
135
|
-
.map(block => block.text)
|
|
136
|
-
.join('');
|
|
128
|
+
const text = response.content;
|
|
137
129
|
const rawClaims = safeParseArray(text);
|
|
138
130
|
const claims = [];
|
|
139
131
|
for (let i = 0; i < rawClaims.length; i++) {
|
|
@@ -143,31 +135,22 @@ export async function extractCodeClaims(code, language, context) {
|
|
|
143
135
|
}
|
|
144
136
|
return {
|
|
145
137
|
claims,
|
|
146
|
-
inputTokens: response.
|
|
147
|
-
outputTokens: response.
|
|
138
|
+
inputTokens: response.inputTokens ?? 0,
|
|
139
|
+
outputTokens: response.outputTokens ?? 0,
|
|
148
140
|
};
|
|
149
141
|
}
|
|
150
142
|
// ── Phase 2: Verify Claims ───────────────────────────────────
|
|
151
143
|
export async function verifyCodeClaims(code, language, claims) {
|
|
152
|
-
const client = getClient();
|
|
153
144
|
const claimList = claims
|
|
154
145
|
.map(c => `[${c.id}] (${c.category}, ${c.severity}) ${c.description}\n Assertion: ${c.assertion}`)
|
|
155
146
|
.join('\n\n');
|
|
156
|
-
const response = await
|
|
147
|
+
const response = await getProvider().complete({
|
|
157
148
|
model: MODEL,
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
{
|
|
162
|
-
role: 'user',
|
|
163
|
-
content: `Language: ${language}\n\nCode:\n${code}\n\nClaims to verify:\n${claimList}`,
|
|
164
|
-
},
|
|
165
|
-
],
|
|
149
|
+
maxTokens: 16_000,
|
|
150
|
+
systemPrompt: VERIFICATION_SYSTEM,
|
|
151
|
+
userPrompt: `Language: ${language}\n\nCode:\n${code}\n\nClaims to verify:\n${claimList}`,
|
|
166
152
|
});
|
|
167
|
-
const text = response.content
|
|
168
|
-
.filter((block) => block.type === 'text')
|
|
169
|
-
.map(block => block.text)
|
|
170
|
-
.join('');
|
|
153
|
+
const text = response.content;
|
|
171
154
|
const rawVerifications = safeParseArray(text);
|
|
172
155
|
const validVerdicts = ['PASS', 'PARTIAL', 'FAIL', 'N/A'];
|
|
173
156
|
const verifications = rawVerifications
|
|
@@ -181,8 +164,8 @@ export async function verifyCodeClaims(code, language, claims) {
|
|
|
181
164
|
}));
|
|
182
165
|
return {
|
|
183
166
|
verifications,
|
|
184
|
-
inputTokens: response.
|
|
185
|
-
outputTokens: response.
|
|
167
|
+
inputTokens: response.inputTokens ?? 0,
|
|
168
|
+
outputTokens: response.outputTokens ?? 0,
|
|
186
169
|
};
|
|
187
170
|
}
|
|
188
171
|
// ── Phase 2.5: Formal Verification ───────────────────────────
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"forward-verify.js","sourceRoot":"","sources":["../../src/sdk/forward-verify.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"forward-verify.js","sourceRoot":"","sources":["../../src/sdk/forward-verify.ts"],"names":[],"mappings":"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"}
|