@specverse/engines 6.3.1 → 6.4.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/ai/analyse-runner.d.ts +14 -0
- package/dist/ai/analyse-runner.d.ts.map +1 -1
- package/dist/ai/analyse-runner.js +65 -1
- package/dist/ai/analyse-runner.js.map +1 -1
- package/dist/analyse-prepass/index.d.ts +31 -1
- package/dist/analyse-prepass/index.d.ts.map +1 -1
- package/dist/analyse-prepass/index.js +85 -0
- package/dist/analyse-prepass/index.js.map +1 -1
- package/dist/inference/quint-gen/index.d.ts +64 -0
- package/dist/inference/quint-gen/index.d.ts.map +1 -0
- package/dist/inference/quint-gen/index.js +326 -0
- package/dist/inference/quint-gen/index.js.map +1 -0
- package/dist/inference/quint-gen/runner.d.ts +36 -0
- package/dist/inference/quint-gen/runner.d.ts.map +1 -0
- package/dist/inference/quint-gen/runner.js +79 -0
- package/dist/inference/quint-gen/runner.js.map +1 -0
- package/package.json +11 -2
|
@@ -18,6 +18,20 @@ export interface RunAnalyseOptions {
|
|
|
18
18
|
autoFacts?: boolean;
|
|
19
19
|
/** Run verify-analyse after the draft pass. */
|
|
20
20
|
verify?: boolean;
|
|
21
|
+
/**
|
|
22
|
+
* Run the Quint 5b deterministic gate after verify-analyse — generates
|
|
23
|
+
* a per-spec Quint module from the spec's lifecycles + behavior pre-
|
|
24
|
+
* conditions and runs `quint typecheck` against it. Skips cleanly when
|
|
25
|
+
* the quint CLI isn't on PATH. See TODO #31 + the design plan at
|
|
26
|
+
* `docs/plans/2026-04-30-DETERMINISTIC-VERIFICATION-GATES.md`.
|
|
27
|
+
*/
|
|
28
|
+
verifyBehavior?: boolean;
|
|
29
|
+
/**
|
|
30
|
+
* When true, a Quint typecheck failure aborts the workflow rather than
|
|
31
|
+
* emitting a warning. Default false (the gate is informational unless
|
|
32
|
+
* caller opts into strict mode). Implies `verifyBehavior: true`.
|
|
33
|
+
*/
|
|
34
|
+
strictBehavior?: boolean;
|
|
21
35
|
/** Materialize project/ via `spv init` + `spv realize all`. */
|
|
22
36
|
realize?: boolean;
|
|
23
37
|
/** Pre-resolved LanguageModel (for cross-call session caching). */
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyse-runner.d.ts","sourceRoot":"","sources":["../../src/ai/analyse-runner.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAGL,KAAK,WAAW,EAAE,KAAK,YAAY,EACpC,MAAM,gBAAgB,CAAC;AAiBxB,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC;IACjC,aAAa,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,OAAO,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAqCD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,
|
|
1
|
+
{"version":3,"file":"analyse-runner.d.ts","sourceRoot":"","sources":["../../src/ai/analyse-runner.ts"],"names":[],"mappings":"AA2BA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAGL,KAAK,WAAW,EAAE,KAAK,YAAY,EACpC,MAAM,gBAAgB,CAAC;AAiBxB,MAAM,WAAW,iBAAiB;IAChC;;;;OAIG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB;;;OAGG;IACH,SAAS,EAAE,MAAM,CAAC;IAClB,gEAAgE;IAChE,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,6EAA6E;IAC7E,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,+CAA+C;IAC/C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;;;;OAMG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB;;;;OAIG;IACH,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB;;;;OAIG;IACH,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,wCAAwC;IACxC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,mEAAmE;IACnE,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,yEAAyE;IACzE,aAAa,EAAE,MAAM,CAAC;IACtB,qEAAqE;IACrE,UAAU,EAAE,OAAO,GAAG,UAAU,CAAC;IACjC,aAAa,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,MAAM,EAAE,MAAM,CAAA;KAAE,CAAC;IAC/C,OAAO,EAAE;QAAE,EAAE,EAAE,OAAO,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,CAAC;IAChD,eAAe,EAAE,MAAM,CAAC;IACxB,gBAAgB,EAAE,MAAM,CAAC;IACzB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,WAAW,CAAC;IACtB,YAAY,EAAE,OAAO,CAAC;IACtB,oBAAoB,EAAE,OAAO,CAAC;CAC/B;AAqCD;;;;GAIG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAuRnF"}
|
|
@@ -91,12 +91,17 @@ export async function runAnalyse(opts) {
|
|
|
91
91
|
// or runPrepass on sourceDir (--auto-facts). Manual wins if both passed.
|
|
92
92
|
let factsContent = '';
|
|
93
93
|
let factsSource = null;
|
|
94
|
+
let methodFactsContent = '';
|
|
94
95
|
if (opts.autoFacts && !opts.factsPath) {
|
|
95
|
-
const { runPrepass, formatFactsAsMarkdown } = await import('./../analyse-prepass/index.js');
|
|
96
|
+
const { runPrepass, formatFactsAsMarkdown, formatMethodFactsAsMarkdown } = await import('./../analyse-prepass/index.js');
|
|
96
97
|
const facts = await runPrepass(opts.sourceDir);
|
|
97
98
|
factsContent = formatFactsAsMarkdown(facts);
|
|
99
|
+
methodFactsContent = formatMethodFactsAsMarkdown(facts.methodFactSheets);
|
|
98
100
|
factsSource = `auto (${facts.meta.backend}, adapters: ${facts.meta.adaptersRun.join(', ') || 'none'})`;
|
|
99
101
|
writeFileSync(join(factsDir(opts.outputDir), 'facts.md'), factsContent);
|
|
102
|
+
if (methodFactsContent) {
|
|
103
|
+
writeFileSync(join(factsDir(opts.outputDir), 'method-facts.md'), methodFactsContent);
|
|
104
|
+
}
|
|
100
105
|
try {
|
|
101
106
|
writeFileSync(join(factsDir(opts.outputDir), 'facts.json'), JSON.stringify(facts, null, 2));
|
|
102
107
|
}
|
|
@@ -215,6 +220,8 @@ export async function runAnalyse(opts) {
|
|
|
215
220
|
draft: draftSpec,
|
|
216
221
|
structuralFacts: factsContent ||
|
|
217
222
|
'(no structural facts available — extract-facts pre-pass was not run)',
|
|
223
|
+
methodFacts: methodFactsContent ||
|
|
224
|
+
'(no method fact sheets available — backend did not extract per-method facts)',
|
|
218
225
|
},
|
|
219
226
|
model,
|
|
220
227
|
timeoutMs: opts.timeoutMs ?? 15 * 60_000,
|
|
@@ -234,6 +241,63 @@ export async function runAnalyse(opts) {
|
|
|
234
241
|
}
|
|
235
242
|
catch { /* fallback: keep draft as final */ }
|
|
236
243
|
}
|
|
244
|
+
// 5b. Quint deterministic gate (TODO #31). Optional — opt in via
|
|
245
|
+
// `verifyBehavior: true`. The actual gate runs as JS-side value-level
|
|
246
|
+
// invariant checks (states unique, transitions reference declared states,
|
|
247
|
+
// behavior-requires reference real states). The generated Quint module is
|
|
248
|
+
// also written to `verify.qnt` and run through `quint typecheck` as a
|
|
249
|
+
// syntax/type sanity check on the generator itself; both signals are
|
|
250
|
+
// logged to `verify-behavior.txt`. With `strictBehavior: true`, any JS
|
|
251
|
+
// violation aborts the workflow. Skips cleanly when there are no
|
|
252
|
+
// lifecycles in the spec. See
|
|
253
|
+
// docs/plans/2026-04-30-DETERMINISTIC-VERIFICATION-GATES.md.
|
|
254
|
+
if (opts.verifyBehavior) {
|
|
255
|
+
try {
|
|
256
|
+
const { generateQuintFromSpec } = await import('./../inference/quint-gen/index.js');
|
|
257
|
+
const { runQuintTypecheck, formatQuintResult } = await import('./../inference/quint-gen/runner.js');
|
|
258
|
+
const yaml = await import('js-yaml');
|
|
259
|
+
const parsed = yaml.load(finalSpec);
|
|
260
|
+
const quintGen = generateQuintFromSpec(parsed);
|
|
261
|
+
const lines = [];
|
|
262
|
+
lines.push(`Quint 5b deterministic gate — ${quintGen.modelCount} model(s), ${quintGen.behaviorPreconditionCount} behavior precondition(s)`);
|
|
263
|
+
if (quintGen.skipped) {
|
|
264
|
+
lines.push(`Skipped: ${quintGen.skipReason}`);
|
|
265
|
+
}
|
|
266
|
+
else {
|
|
267
|
+
const qntPath = join(opts.outputDir, 'verify.qnt');
|
|
268
|
+
writeFileSync(qntPath, quintGen.content);
|
|
269
|
+
// Sanity check the generated Quint syntax (best-effort; skips if quint not installed)
|
|
270
|
+
const typecheckResult = runQuintTypecheck(qntPath);
|
|
271
|
+
lines.push('');
|
|
272
|
+
lines.push('--- Generator syntax sanity check (quint typecheck) ---');
|
|
273
|
+
lines.push(formatQuintResult(typecheckResult, qntPath));
|
|
274
|
+
// Value-level invariant violations — the actual gate
|
|
275
|
+
lines.push('');
|
|
276
|
+
lines.push('--- Lifecycle invariant violations (the actual gate) ---');
|
|
277
|
+
if (quintGen.violations.length === 0) {
|
|
278
|
+
lines.push(`No violations. All ${quintGen.modelCount} model lifecycle(s) cleanly typecheck.`);
|
|
279
|
+
}
|
|
280
|
+
else {
|
|
281
|
+
lines.push(`${quintGen.violations.length} violation(s):`);
|
|
282
|
+
for (const v of quintGen.violations) {
|
|
283
|
+
lines.push(` - [${v.kind}] ${v.message}`);
|
|
284
|
+
}
|
|
285
|
+
}
|
|
286
|
+
writeFileSync(join(opts.outputDir, 'verify-behavior.txt'), lines.join('\n'));
|
|
287
|
+
if (quintGen.violations.length > 0 && opts.strictBehavior) {
|
|
288
|
+
throw new Error(`Quint 5b gate failed (--strict-behavior, ${quintGen.violations.length} violations): ${quintGen.violations[0].message}`);
|
|
289
|
+
}
|
|
290
|
+
}
|
|
291
|
+
if (quintGen.skipped) {
|
|
292
|
+
writeFileSync(join(opts.outputDir, 'verify-behavior.txt'), lines.join('\n'));
|
|
293
|
+
}
|
|
294
|
+
}
|
|
295
|
+
catch (err) {
|
|
296
|
+
if (opts.strictBehavior)
|
|
297
|
+
throw err;
|
|
298
|
+
writeFileSync(join(opts.outputDir, 'verify-behavior.txt'), `Quint 5b gate errored (non-strict): ${err?.message ?? String(err)}`);
|
|
299
|
+
}
|
|
300
|
+
}
|
|
237
301
|
// 6. Final validation.
|
|
238
302
|
const finalSpecPath = join(specsDir(opts.outputDir), 'main.specly');
|
|
239
303
|
const validateFinal = runValidate(finalSpecPath);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"analyse-runner.js","sourceRoot":"","sources":["../../src/ai/analyse-runner.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"analyse-runner.js","sourceRoot":"","sources":["../../src/ai/analyse-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -17,7 +17,7 @@ export type { StructuralPrepass, Symbol, Import, Capabilities, FileFilter, Class
|
|
|
17
17
|
export { GrepOnlyBackend, CodeGraphBackend, GitNexusBackend, selectBackend, type BackendName, } from './backends/index.js';
|
|
18
18
|
export { extractTypeScriptPrisma, type PrismaFacts, type PrismaEntity, type PrismaField, type PrismaRelation, } from './adapters/index.js';
|
|
19
19
|
import { type BackendName } from './backends/index.js';
|
|
20
|
-
import type { StructuralPrepass } from './interface.js';
|
|
20
|
+
import type { StructuralPrepass, MethodFactSheet } from './interface.js';
|
|
21
21
|
import type { ComponentSuggestion } from './community-detection.js';
|
|
22
22
|
export type { ComponentSuggestion } from './community-detection.js';
|
|
23
23
|
export interface SpecVerseFacts {
|
|
@@ -55,6 +55,14 @@ export interface SpecVerseFacts {
|
|
|
55
55
|
* `specverse-self/docs/proposals/COMPONENT-SUGGESTION-FROM-MODEL-GRAPH.md`.
|
|
56
56
|
*/
|
|
57
57
|
suggestedComponents?: ComponentSuggestion[];
|
|
58
|
+
/**
|
|
59
|
+
* Optional per-method fact sheets for entry-point methods (controllers,
|
|
60
|
+
* services). Populated when `gatherMethodFacts !== false` in options.
|
|
61
|
+
* Used by the verify-analyse prompt to cross-check analysed `behaviors[].steps`
|
|
62
|
+
* against what source methods actually do (events emitted / dbWrites /
|
|
63
|
+
* external calls / async boundaries). See TODO #32.
|
|
64
|
+
*/
|
|
65
|
+
methodFactSheets?: MethodFactSheet[];
|
|
58
66
|
}
|
|
59
67
|
export interface RunPrepassOptions {
|
|
60
68
|
/** Backend to use; defaults to 'auto' (CodeGraph if available, else grep-only). */
|
|
@@ -65,6 +73,16 @@ export interface RunPrepassOptions {
|
|
|
65
73
|
adapters?: Array<'typescript-prisma'>;
|
|
66
74
|
/** Run model-graph community detection to suggest component boundaries. Default true. */
|
|
67
75
|
suggestComponents?: boolean;
|
|
76
|
+
/**
|
|
77
|
+
* Gather per-method fact sheets for entry-point methods (heuristic:
|
|
78
|
+
* methods on `*Controller` / `*Service` classes, capped at `methodFactsCap`
|
|
79
|
+
* total to keep prompt context bounded). Default true. Set to false to
|
|
80
|
+
* skip — backends that don't implement deep `getMethodDetails` (or
|
|
81
|
+
* codebases with no class structure) just produce an empty list.
|
|
82
|
+
*/
|
|
83
|
+
gatherMethodFacts?: boolean;
|
|
84
|
+
/** Maximum number of method fact sheets to gather. Default 30. */
|
|
85
|
+
methodFactsCap?: number;
|
|
68
86
|
}
|
|
69
87
|
/**
|
|
70
88
|
* Run the structural pre-pass on a source directory.
|
|
@@ -84,4 +102,16 @@ export declare function runPrepass(sourceDir: string, options?: RunPrepassOption
|
|
|
84
102
|
* experiments).
|
|
85
103
|
*/
|
|
86
104
|
export declare function formatFactsAsMarkdown(facts: SpecVerseFacts): string;
|
|
105
|
+
/**
|
|
106
|
+
* Format the per-method fact-sheet list as a markdown block suitable for
|
|
107
|
+
* injection into the verify-analyse prompt as `methodFacts`. Each method
|
|
108
|
+
* gets a compact entry showing its signature + the deterministic facts
|
|
109
|
+
* (calls / emits / dbWrites / externalCalls / throws / asyncBoundaries /
|
|
110
|
+
* branchPoints) that the LLM can cross-check the analysed `steps:`
|
|
111
|
+
* against. Body text is excluded — keeps the block small enough to fit
|
|
112
|
+
* inside one verify-analyse call without paginating.
|
|
113
|
+
*
|
|
114
|
+
* TODO #32 — surfaces what `runPrepass` already computes but didn't expose.
|
|
115
|
+
*/
|
|
116
|
+
export declare function formatMethodFactsAsMarkdown(sheets: MethodFactSheet[] | undefined): string;
|
|
87
117
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyse-prepass/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,YAAY,EACV,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analyse-prepass/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AACH,YAAY,EACV,iBAAiB,EACjB,MAAM,EACN,MAAM,EACN,YAAY,EACZ,UAAU,EACV,WAAW,EACX,YAAY,EACZ,eAAe,EACf,WAAW,EACX,eAAe,GAChB,MAAM,gBAAgB,CAAC;AAExB,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,KAAK,WAAW,GACjB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,uBAAuB,EACvB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,cAAc,GACpB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAiB,KAAK,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAEtE,OAAO,KAAK,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AAEzE,OAAO,KAAK,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,YAAY,EAAE,mBAAmB,EAAE,MAAM,0BAA0B,CAAC;AAEpE,MAAM,WAAW,cAAc;IAC7B,4CAA4C;IAC5C,QAAQ,EAAE,KAAK,CAAC;QACd,IAAI,EAAE,MAAM,CAAC;QACb,QAAQ,EAAE,MAAM,CAAC;QACjB,eAAe,EAAE,MAAM,CAAC;KACzB,CAAC,CAAC;IACH,+CAA+C;IAC/C,aAAa,EAAE,KAAK,CAAC;QACnB,IAAI,EAAE,MAAM,CAAC;QACb,EAAE,EAAE,MAAM,CAAC;QACX,IAAI,EAAE,WAAW,GAAG,SAAS,GAAG,QAAQ,GAAG,YAAY,CAAC;QACxD,OAAO,CAAC,EAAE,OAAO,CAAC;KACnB,CAAC,CAAC;IACH,kFAAkF;IAClF,UAAU,EAAE,KAAK,CAAC;QAChB,KAAK,EAAE,MAAM,CAAC;QACd,KAAK,EAAE,MAAM,CAAC;QACd,MAAM,EAAE,MAAM,EAAE,CAAC;KAClB,CAAC,CAAC;IACH,+DAA+D;IAC/D,IAAI,EAAE;QACJ,OAAO,EAAE,MAAM,CAAC;QAChB,mBAAmB,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC7C,WAAW,EAAE,MAAM,EAAE,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC;QAClB,UAAU,EAAE,MAAM,CAAC;KACpB,CAAC;IACF;;;;;OAKG;IACH,mBAAmB,CAAC,EAAE,mBAAmB,EAAE,CAAC;IAC5C;;;;;;OAMG;IACH,gBAAgB,CAAC,EAAE,eAAe,EAAE,CAAC;CACtC;AAED,MAAM,WAAW,iBAAiB;IAChC,mFAAmF;IACnF,OAAO,CAAC,EAAE,WAAW,CAAC;IACtB,qEAAqE;IACrE,OAAO,CAAC,EAAE,iBAAiB,CAAC;IAC5B,kFAAkF;IAClF,QAAQ,CAAC,EAAE,KAAK,CAAC,mBAAmB,CAAC,CAAC;IACtC,yFAAyF;IACzF,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B;;;;;;OAMG;IACH,iBAAiB,CAAC,EAAE,OAAO,CAAC;IAC5B,kEAAkE;IAClE,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED;;;;;;;;;GASG;AACH,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,GAAE,iBAAsB,GAAG,OAAO,CAAC,cAAc,CAAC,CAgJ5G;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CAAC,KAAK,EAAE,cAAc,GAAG,MAAM,CA+CnE;AAED;;;;;;;;;;GAUG;AACH,wBAAgB,2BAA2B,CAAC,MAAM,EAAE,eAAe,EAAE,GAAG,SAAS,GAAG,MAAM,CAgCzF"}
|
|
@@ -114,6 +114,40 @@ export async function runPrepass(sourceDir, options = {}) {
|
|
|
114
114
|
}
|
|
115
115
|
}
|
|
116
116
|
}
|
|
117
|
+
// ── Per-method fact sheets (TODO #32) ──
|
|
118
|
+
// Gather MethodFactSheet records for entry-point methods only — heuristic:
|
|
119
|
+
// methods on classes whose name ends in `Controller` or `Service`. Capped
|
|
120
|
+
// at `methodFactsCap` (default 30) to keep prompt context bounded.
|
|
121
|
+
// Backends that can't extract method details just return null and we skip
|
|
122
|
+
// — the field comes back as an empty list, no error.
|
|
123
|
+
if (options.gatherMethodFacts !== false) {
|
|
124
|
+
const cap = options.methodFactsCap ?? 30;
|
|
125
|
+
const sheets = [];
|
|
126
|
+
try {
|
|
127
|
+
const methods = await prepass.listMethods();
|
|
128
|
+
const entryPoints = methods.filter((m) => {
|
|
129
|
+
const className = m.qualifiedName.split('.')[0];
|
|
130
|
+
return /Controller$|Service$/.test(className);
|
|
131
|
+
});
|
|
132
|
+
// Stable order — sort by qualifiedName so re-runs produce identical output
|
|
133
|
+
entryPoints.sort((a, b) => a.qualifiedName.localeCompare(b.qualifiedName));
|
|
134
|
+
for (const method of entryPoints.slice(0, cap)) {
|
|
135
|
+
try {
|
|
136
|
+
const sheet = await prepass.getMethodDetails(method.qualifiedName);
|
|
137
|
+
if (sheet)
|
|
138
|
+
sheets.push(sheet);
|
|
139
|
+
}
|
|
140
|
+
catch {
|
|
141
|
+
// Skip individual method failures — partial results are still useful.
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
catch {
|
|
146
|
+
// Backend doesn't support listMethods deeply — skip silently.
|
|
147
|
+
}
|
|
148
|
+
if (sheets.length > 0)
|
|
149
|
+
facts.methodFactSheets = sheets;
|
|
150
|
+
}
|
|
117
151
|
facts.meta.durationMs = Date.now() - start;
|
|
118
152
|
return facts;
|
|
119
153
|
}
|
|
@@ -166,4 +200,55 @@ export function formatFactsAsMarkdown(facts) {
|
|
|
166
200
|
}
|
|
167
201
|
return lines.join('\n');
|
|
168
202
|
}
|
|
203
|
+
/**
|
|
204
|
+
* Format the per-method fact-sheet list as a markdown block suitable for
|
|
205
|
+
* injection into the verify-analyse prompt as `methodFacts`. Each method
|
|
206
|
+
* gets a compact entry showing its signature + the deterministic facts
|
|
207
|
+
* (calls / emits / dbWrites / externalCalls / throws / asyncBoundaries /
|
|
208
|
+
* branchPoints) that the LLM can cross-check the analysed `steps:`
|
|
209
|
+
* against. Body text is excluded — keeps the block small enough to fit
|
|
210
|
+
* inside one verify-analyse call without paginating.
|
|
211
|
+
*
|
|
212
|
+
* TODO #32 — surfaces what `runPrepass` already computes but didn't expose.
|
|
213
|
+
*/
|
|
214
|
+
export function formatMethodFactsAsMarkdown(sheets) {
|
|
215
|
+
if (!sheets || sheets.length === 0)
|
|
216
|
+
return '';
|
|
217
|
+
const lines = [];
|
|
218
|
+
lines.push('# Method-level facts extracted from source');
|
|
219
|
+
lines.push('');
|
|
220
|
+
lines.push('These facts are deterministic — extracted from AST analysis of');
|
|
221
|
+
lines.push('method bodies. Use to cross-check the analysed `behaviors[].steps:`');
|
|
222
|
+
lines.push('against what the source method actually does.');
|
|
223
|
+
lines.push('');
|
|
224
|
+
for (const m of sheets) {
|
|
225
|
+
lines.push(`## ${m.qualifiedName} (${m.filePath}:${m.startLine}-${m.endLine})`);
|
|
226
|
+
if (m.signature)
|
|
227
|
+
lines.push(`- Signature: \`${m.signature}\``);
|
|
228
|
+
if (m.calls?.length)
|
|
229
|
+
lines.push(`- Calls: ${m.calls.map((c) => c.qualifiedName || c.name).slice(0, 12).join(', ')}${m.calls.length > 12 ? ', …' : ''}`);
|
|
230
|
+
if (m.emits?.length)
|
|
231
|
+
lines.push(`- Emits: ${m.emits.join(', ')}`);
|
|
232
|
+
if (m.dbWrites?.length) {
|
|
233
|
+
const writes = m.dbWrites.map((w) => `${w.entity}.${w.op}${w.field ? `(${w.field})` : ''}`);
|
|
234
|
+
lines.push(`- DbWrites: ${writes.join(', ')}`);
|
|
235
|
+
}
|
|
236
|
+
if (m.externalCalls?.length) {
|
|
237
|
+
const ec = m.externalCalls.map((c) => `${c.kind}${c.target ? ` ${c.target}` : ''}`);
|
|
238
|
+
lines.push(`- ExternalCalls: ${ec.join(', ')}`);
|
|
239
|
+
}
|
|
240
|
+
if (m.throws?.length)
|
|
241
|
+
lines.push(`- Throws: ${m.throws.join(', ')}`);
|
|
242
|
+
if (m.asyncBoundaries?.length) {
|
|
243
|
+
const counts = new Map();
|
|
244
|
+
for (const ab of m.asyncBoundaries)
|
|
245
|
+
counts.set(ab.type, (counts.get(ab.type) || 0) + 1);
|
|
246
|
+
lines.push(`- AsyncBoundaries: ${[...counts.entries()].map(([k, v]) => `${v} ${k}`).join(' + ')}`);
|
|
247
|
+
}
|
|
248
|
+
if (m.branchPoints)
|
|
249
|
+
lines.push(`- BranchPoints: ${m.branchPoints}`);
|
|
250
|
+
lines.push('');
|
|
251
|
+
}
|
|
252
|
+
return lines.join('\n');
|
|
253
|
+
}
|
|
169
254
|
//# sourceMappingURL=index.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyse-prepass/index.ts"],"names":[],"mappings":"AA4BA,OAAO,EACL,eAAe,EACf,gBAAgB,EAChB,eAAe,EACf,aAAa,GAEd,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EACL,uBAAuB,GAKxB,MAAM,qBAAqB,CAAC;AAE7B,OAAO,EAAE,aAAa,EAAoB,MAAM,qBAAqB,CAAC;AACtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAC;AAE9D,OAAO,EAAE,2BAA2B,EAAE,MAAM,0BAA0B,CAAC;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/analyse-prepass/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quint generator — emits a per-spec `.qnt` file that asserts lifecycle
|
|
3
|
+
* reachability and behavior precondition validity. v1 of TODO #31.
|
|
4
|
+
*
|
|
5
|
+
* v1 scope (deliberately narrow — see
|
|
6
|
+
* `specverse-self/docs/plans/2026-04-30-DETERMINISTIC-VERIFICATION-GATES.md`):
|
|
7
|
+
* - For each model with a `lifecycles:` block, generate a Quint state
|
|
8
|
+
* machine asserting:
|
|
9
|
+
* 1. States are unique within the lifecycle.
|
|
10
|
+
* 2. Transitions reference declared states only.
|
|
11
|
+
* 3. There is at least one initial state (no incoming transition,
|
|
12
|
+
* or explicitly named in the spec).
|
|
13
|
+
* 4. Behaviors with `requires:` clauses naming a state reference
|
|
14
|
+
* a real state.
|
|
15
|
+
*
|
|
16
|
+
* Out of scope for v1:
|
|
17
|
+
* - Cross-model invariants (e.g. Order belongs to Customer).
|
|
18
|
+
* - Full behavior pre/post encoding as transition guards.
|
|
19
|
+
* - Quint-driven simulation (`run` actions with assertions).
|
|
20
|
+
*
|
|
21
|
+
* Output is a single Quint module per spec with one sub-module per model
|
|
22
|
+
* that has a lifecycle. The runner subprocess (`./runner.ts`) executes
|
|
23
|
+
* `quint typecheck` against the generated file; reachability/transition
|
|
24
|
+
* errors come back as line-numbered Quint diagnostics.
|
|
25
|
+
*/
|
|
26
|
+
export interface QuintGenResult {
|
|
27
|
+
/** Quint module text. Empty when `skipped: true`. */
|
|
28
|
+
content: string;
|
|
29
|
+
/** Number of models that contributed lifecycle invariants. */
|
|
30
|
+
modelCount: number;
|
|
31
|
+
/** Number of behaviors whose `requires:` clauses reference lifecycle states. */
|
|
32
|
+
behaviorPreconditionCount: number;
|
|
33
|
+
/** True when the spec has no lifecycle blocks at all (nothing to verify). */
|
|
34
|
+
skipped: boolean;
|
|
35
|
+
/** Reason for skipping (when skipped=true). */
|
|
36
|
+
skipReason?: string;
|
|
37
|
+
/**
|
|
38
|
+
* Deterministic invariant check results. The Quint typecheck (runner.ts)
|
|
39
|
+
* validates that the generated module is syntactically and type-correct;
|
|
40
|
+
* THIS field carries the value-level checks (states unique, transitions
|
|
41
|
+
* reference declared states, etc.) which Quint's typecheck cannot evaluate.
|
|
42
|
+
*/
|
|
43
|
+
violations: QuintViolation[];
|
|
44
|
+
}
|
|
45
|
+
export interface QuintViolation {
|
|
46
|
+
/** Which model + lifecycle the violation belongs to. */
|
|
47
|
+
modelName: string;
|
|
48
|
+
lifecycleName: string;
|
|
49
|
+
/** One of: states-not-unique, transition-references-unknown-state, behavior-requires-unknown-state. */
|
|
50
|
+
kind: 'states-not-unique' | 'transition-references-unknown-state' | 'behavior-requires-unknown-state' | 'no-states-declared';
|
|
51
|
+
/** Human-readable explanation suitable for retry-prompt feedback. */
|
|
52
|
+
message: string;
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* Generate a Quint specification from a SpecVerse spec. Walks every
|
|
56
|
+
* component's models, collects lifecycle declarations, and emits Quint
|
|
57
|
+
* `module` text encoding the four v1 invariants.
|
|
58
|
+
*
|
|
59
|
+
* The spec parameter accepts either the parsed AST (with components: array)
|
|
60
|
+
* or an inferred-spec object (flat models map). The function probes shape
|
|
61
|
+
* and adapts.
|
|
62
|
+
*/
|
|
63
|
+
export declare function generateQuintFromSpec(spec: any): QuintGenResult;
|
|
64
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/inference/quint-gen/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,MAAM,WAAW,cAAc;IAC7B,qDAAqD;IACrD,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,gFAAgF;IAChF,yBAAyB,EAAE,MAAM,CAAC;IAClC,6EAA6E;IAC7E,OAAO,EAAE,OAAO,CAAC;IACjB,+CAA+C;IAC/C,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB;;;;;OAKG;IACH,UAAU,EAAE,cAAc,EAAE,CAAC;CAC9B;AAED,MAAM,WAAW,cAAc;IAC7B,wDAAwD;IACxD,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,uGAAuG;IACvG,IAAI,EAAE,mBAAmB,GAAG,qCAAqC,GAAG,iCAAiC,GAAG,oBAAoB,CAAC;IAC7H,qEAAqE;IACrE,OAAO,EAAE,MAAM,CAAC;CACjB;AAoBD;;;;;;;;GAQG;AACH,wBAAgB,qBAAqB,CAAC,IAAI,EAAE,GAAG,GAAG,cAAc,CA2K/D"}
|
|
@@ -0,0 +1,326 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quint generator — emits a per-spec `.qnt` file that asserts lifecycle
|
|
3
|
+
* reachability and behavior precondition validity. v1 of TODO #31.
|
|
4
|
+
*
|
|
5
|
+
* v1 scope (deliberately narrow — see
|
|
6
|
+
* `specverse-self/docs/plans/2026-04-30-DETERMINISTIC-VERIFICATION-GATES.md`):
|
|
7
|
+
* - For each model with a `lifecycles:` block, generate a Quint state
|
|
8
|
+
* machine asserting:
|
|
9
|
+
* 1. States are unique within the lifecycle.
|
|
10
|
+
* 2. Transitions reference declared states only.
|
|
11
|
+
* 3. There is at least one initial state (no incoming transition,
|
|
12
|
+
* or explicitly named in the spec).
|
|
13
|
+
* 4. Behaviors with `requires:` clauses naming a state reference
|
|
14
|
+
* a real state.
|
|
15
|
+
*
|
|
16
|
+
* Out of scope for v1:
|
|
17
|
+
* - Cross-model invariants (e.g. Order belongs to Customer).
|
|
18
|
+
* - Full behavior pre/post encoding as transition guards.
|
|
19
|
+
* - Quint-driven simulation (`run` actions with assertions).
|
|
20
|
+
*
|
|
21
|
+
* Output is a single Quint module per spec with one sub-module per model
|
|
22
|
+
* that has a lifecycle. The runner subprocess (`./runner.ts`) executes
|
|
23
|
+
* `quint typecheck` against the generated file; reachability/transition
|
|
24
|
+
* errors come back as line-numbered Quint diagnostics.
|
|
25
|
+
*/
|
|
26
|
+
/**
|
|
27
|
+
* Generate a Quint specification from a SpecVerse spec. Walks every
|
|
28
|
+
* component's models, collects lifecycle declarations, and emits Quint
|
|
29
|
+
* `module` text encoding the four v1 invariants.
|
|
30
|
+
*
|
|
31
|
+
* The spec parameter accepts either the parsed AST (with components: array)
|
|
32
|
+
* or an inferred-spec object (flat models map). The function probes shape
|
|
33
|
+
* and adapts.
|
|
34
|
+
*/
|
|
35
|
+
export function generateQuintFromSpec(spec) {
|
|
36
|
+
const allModels = [];
|
|
37
|
+
// Two shapes to support: AST (components array) and flat (models map).
|
|
38
|
+
if (Array.isArray(spec?.components)) {
|
|
39
|
+
for (const comp of spec.components) {
|
|
40
|
+
const models = normalizeModels(comp.models);
|
|
41
|
+
allModels.push(...models);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
else if (spec?.components && typeof spec.components === 'object') {
|
|
45
|
+
for (const comp of Object.values(spec.components)) {
|
|
46
|
+
const models = normalizeModels(comp.models);
|
|
47
|
+
allModels.push(...models);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
else if (spec?.models) {
|
|
51
|
+
allModels.push(...normalizeModels(spec.models));
|
|
52
|
+
}
|
|
53
|
+
const modelsWithLifecycles = allModels.filter((m) => {
|
|
54
|
+
const lc = m.lifecycles;
|
|
55
|
+
if (!lc)
|
|
56
|
+
return false;
|
|
57
|
+
if (Array.isArray(lc))
|
|
58
|
+
return lc.length > 0;
|
|
59
|
+
return Object.keys(lc).length > 0;
|
|
60
|
+
});
|
|
61
|
+
if (modelsWithLifecycles.length === 0) {
|
|
62
|
+
return { content: '', modelCount: 0, behaviorPreconditionCount: 0, skipped: true, skipReason: 'no models with lifecycles', violations: [] };
|
|
63
|
+
}
|
|
64
|
+
const lines = [];
|
|
65
|
+
lines.push('// Auto-generated by @specverse/engines/inference/quint-gen');
|
|
66
|
+
lines.push('// v1 — lifecycle reachability + transition validity + behavior-requires validity');
|
|
67
|
+
lines.push('// See docs/plans/2026-04-30-DETERMINISTIC-VERIFICATION-GATES.md');
|
|
68
|
+
lines.push('');
|
|
69
|
+
let behaviorPreconditionCount = 0;
|
|
70
|
+
const violations = [];
|
|
71
|
+
for (const model of modelsWithLifecycles) {
|
|
72
|
+
const lifecycles = normalizeLifecycles(model.lifecycles);
|
|
73
|
+
for (const [lcName, lc] of Object.entries(lifecycles)) {
|
|
74
|
+
const states = collectStates(lc);
|
|
75
|
+
if (states.length === 0) {
|
|
76
|
+
violations.push({
|
|
77
|
+
modelName: model.name,
|
|
78
|
+
lifecycleName: lcName,
|
|
79
|
+
kind: 'no-states-declared',
|
|
80
|
+
message: `${model.name}.${lcName}: no states declared (need either flow: "a -> b" or states: [...] + transitions: {...})`,
|
|
81
|
+
});
|
|
82
|
+
continue;
|
|
83
|
+
}
|
|
84
|
+
// Value-level invariant checks — Quint's typecheck only validates types,
|
|
85
|
+
// not predicate values, so these run in JS as the actual gate.
|
|
86
|
+
const stateSet = new Set(states);
|
|
87
|
+
// Duplicate detection — `states` is already deduplicated; check the
|
|
88
|
+
// source `lc.states` array directly for repeated entries.
|
|
89
|
+
if (Array.isArray(lc.states)) {
|
|
90
|
+
const seen = new Set();
|
|
91
|
+
const dupes = [];
|
|
92
|
+
for (const s of lc.states) {
|
|
93
|
+
if (seen.has(s) && !dupes.includes(s))
|
|
94
|
+
dupes.push(s);
|
|
95
|
+
seen.add(s);
|
|
96
|
+
}
|
|
97
|
+
if (dupes.length > 0) {
|
|
98
|
+
violations.push({
|
|
99
|
+
modelName: model.name,
|
|
100
|
+
lifecycleName: lcName,
|
|
101
|
+
kind: 'states-not-unique',
|
|
102
|
+
message: `${model.name}.${lcName}: duplicate states declared: ${dupes.join(', ')}`,
|
|
103
|
+
});
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
const transitionsRaw = collectTransitions(lc);
|
|
107
|
+
for (const t of transitionsRaw) {
|
|
108
|
+
if (!stateSet.has(t.from)) {
|
|
109
|
+
violations.push({
|
|
110
|
+
modelName: model.name,
|
|
111
|
+
lifecycleName: lcName,
|
|
112
|
+
kind: 'transition-references-unknown-state',
|
|
113
|
+
message: `${model.name}.${lcName}.transitions.${t.name}: source state "${t.from}" not declared (states: [${states.join(', ')}])`,
|
|
114
|
+
});
|
|
115
|
+
}
|
|
116
|
+
if (!stateSet.has(t.to)) {
|
|
117
|
+
violations.push({
|
|
118
|
+
modelName: model.name,
|
|
119
|
+
lifecycleName: lcName,
|
|
120
|
+
kind: 'transition-references-unknown-state',
|
|
121
|
+
message: `${model.name}.${lcName}.transitions.${t.name}: target state "${t.to}" not declared (states: [${states.join(', ')}])`,
|
|
122
|
+
});
|
|
123
|
+
}
|
|
124
|
+
}
|
|
125
|
+
const moduleId = sanitizeIdent(`${model.name}_${lcName}`);
|
|
126
|
+
lines.push(`module ${moduleId} {`);
|
|
127
|
+
lines.push(` // States declared for ${model.name}.${lcName}`);
|
|
128
|
+
lines.push(` pure val states: Set[str] = Set(${states.map((s) => `"${s}"`).join(', ')})`);
|
|
129
|
+
lines.push('');
|
|
130
|
+
// Invariant 1 — states are unique. Implied by Set construction; we
|
|
131
|
+
// additionally check that the COUNT matches the literal-list length so
|
|
132
|
+
// duplicates in the source spec surface as a typecheck failure.
|
|
133
|
+
lines.push(` pure val statesUnique: bool = states.size() == ${states.length}`);
|
|
134
|
+
lines.push('');
|
|
135
|
+
// Invariant 2 — transitions reference declared states only.
|
|
136
|
+
const transitions = collectTransitions(lc);
|
|
137
|
+
if (transitions.length > 0) {
|
|
138
|
+
const transitionsExpr = transitions
|
|
139
|
+
.map(({ name, from, to }) => `("${name}", "${from}", "${to}")`)
|
|
140
|
+
.join(', ');
|
|
141
|
+
lines.push(` pure val transitions: Set[(str, str, str)] = Set(${transitionsExpr})`);
|
|
142
|
+
lines.push(` pure val transitionStatesValid: bool = transitions.forall(t => states.contains(t._2) and states.contains(t._3))`);
|
|
143
|
+
lines.push('');
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
lines.push(' pure val transitions: Set[(str, str, str)] = Set()');
|
|
147
|
+
lines.push(' pure val transitionStatesValid: bool = true');
|
|
148
|
+
lines.push('');
|
|
149
|
+
}
|
|
150
|
+
// Invariant 3 — initial state exists. Heuristic: take the first state
|
|
151
|
+
// in `flow:` declarations, OR any state with no incoming transition.
|
|
152
|
+
const initialState = inferInitial(states, transitions);
|
|
153
|
+
if (initialState) {
|
|
154
|
+
lines.push(` pure val initialState: str = "${initialState}"`);
|
|
155
|
+
lines.push(` pure val initialIsDeclared: bool = states.contains(initialState)`);
|
|
156
|
+
}
|
|
157
|
+
else {
|
|
158
|
+
lines.push(' pure val initialIsDeclared: bool = states.size() > 0');
|
|
159
|
+
}
|
|
160
|
+
lines.push('');
|
|
161
|
+
// Invariant 4 — behavior preconditions referencing this lifecycle's
|
|
162
|
+
// states must reference real states. We extract state references from
|
|
163
|
+
// `requires:` clauses heuristically (look for any of the lifecycle's
|
|
164
|
+
// state names appearing as words in the requires text).
|
|
165
|
+
// The Quint module records the references for documentation; the
|
|
166
|
+
// VALUE-level check happens here.
|
|
167
|
+
const behaviorRefs = collectBehaviorStateReferences(model.behaviors, states);
|
|
168
|
+
if (behaviorRefs.declared.length > 0) {
|
|
169
|
+
behaviorPreconditionCount += behaviorRefs.declared.length;
|
|
170
|
+
const refsExpr = behaviorRefs.declared.map((r) => `"${r}"`).join(', ');
|
|
171
|
+
lines.push(` pure val behaviorRequiredStates: Set[str] = Set(${refsExpr})`);
|
|
172
|
+
lines.push(` pure val behaviorRequiresValid: bool = behaviorRequiredStates.forall(s => states.contains(s))`);
|
|
173
|
+
lines.push('');
|
|
174
|
+
}
|
|
175
|
+
// behavior-requires that name a NON-state token (e.g. "Booking is in
|
|
176
|
+
// confirmd") get flagged here. Heuristic: any token that LOOKS like
|
|
177
|
+
// a state name (matches the case style of declared states) but isn't
|
|
178
|
+
// in stateSet is a likely typo.
|
|
179
|
+
for (const unknown of behaviorRefs.unknown) {
|
|
180
|
+
violations.push({
|
|
181
|
+
modelName: model.name,
|
|
182
|
+
lifecycleName: lcName,
|
|
183
|
+
kind: 'behavior-requires-unknown-state',
|
|
184
|
+
message: `${model.name}.behaviors: requires-clause names state "${unknown}" not in ${lcName} (declared: [${states.join(', ')}])`,
|
|
185
|
+
});
|
|
186
|
+
}
|
|
187
|
+
lines.push('}');
|
|
188
|
+
lines.push('');
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
content: lines.join('\n'),
|
|
193
|
+
modelCount: modelsWithLifecycles.length,
|
|
194
|
+
behaviorPreconditionCount,
|
|
195
|
+
skipped: false,
|
|
196
|
+
violations,
|
|
197
|
+
};
|
|
198
|
+
}
|
|
199
|
+
// ── helpers ──
|
|
200
|
+
function normalizeModels(modelsRaw) {
|
|
201
|
+
if (!modelsRaw)
|
|
202
|
+
return [];
|
|
203
|
+
if (Array.isArray(modelsRaw))
|
|
204
|
+
return modelsRaw;
|
|
205
|
+
return Object.entries(modelsRaw).map(([name, body]) => ({ name, ...body }));
|
|
206
|
+
}
|
|
207
|
+
function normalizeLifecycles(lc) {
|
|
208
|
+
if (Array.isArray(lc)) {
|
|
209
|
+
const out = {};
|
|
210
|
+
for (const item of lc) {
|
|
211
|
+
if (item.name)
|
|
212
|
+
out[item.name] = item;
|
|
213
|
+
}
|
|
214
|
+
return out;
|
|
215
|
+
}
|
|
216
|
+
return lc;
|
|
217
|
+
}
|
|
218
|
+
function collectStates(lc) {
|
|
219
|
+
// States come from EXPLICIT declarations only — `states: [...]` array OR
|
|
220
|
+
// `flow:` chain. Transition targets are NOT inferred into the state set:
|
|
221
|
+
// a typo in a transition target should fail the transitionStatesValid
|
|
222
|
+
// invariant, not get silently auto-added as a "real" state.
|
|
223
|
+
const set = new Set();
|
|
224
|
+
if (Array.isArray(lc.states)) {
|
|
225
|
+
for (const s of lc.states)
|
|
226
|
+
set.add(s);
|
|
227
|
+
}
|
|
228
|
+
if (typeof lc.flow === 'string') {
|
|
229
|
+
for (const part of lc.flow.split('->').map((s) => s.trim()).filter(Boolean)) {
|
|
230
|
+
set.add(part);
|
|
231
|
+
}
|
|
232
|
+
}
|
|
233
|
+
return [...set];
|
|
234
|
+
}
|
|
235
|
+
function collectTransitions(lc) {
|
|
236
|
+
const out = [];
|
|
237
|
+
if (lc.transitions && typeof lc.transitions === 'object') {
|
|
238
|
+
for (const [name, arrow] of Object.entries(lc.transitions)) {
|
|
239
|
+
if (typeof arrow !== 'string')
|
|
240
|
+
continue;
|
|
241
|
+
const [from, to] = arrow.split('->').map((s) => s.trim());
|
|
242
|
+
if (from && to)
|
|
243
|
+
out.push({ name, from, to });
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
if (typeof lc.flow === 'string') {
|
|
247
|
+
const states = lc.flow.split('->').map((s) => s.trim()).filter(Boolean);
|
|
248
|
+
for (let i = 0; i < states.length - 1; i++) {
|
|
249
|
+
out.push({ name: `step${i + 1}`, from: states[i], to: states[i + 1] });
|
|
250
|
+
}
|
|
251
|
+
}
|
|
252
|
+
return out;
|
|
253
|
+
}
|
|
254
|
+
function inferInitial(states, transitions) {
|
|
255
|
+
if (states.length === 0)
|
|
256
|
+
return null;
|
|
257
|
+
const targets = new Set(transitions.map((t) => t.to));
|
|
258
|
+
const sources = states.filter((s) => !targets.has(s));
|
|
259
|
+
if (sources.length === 1)
|
|
260
|
+
return sources[0];
|
|
261
|
+
return states[0]; // fallback
|
|
262
|
+
}
|
|
263
|
+
function collectBehaviorStateReferences(behaviors, states) {
|
|
264
|
+
if (!behaviors)
|
|
265
|
+
return { declared: [], unknown: [] };
|
|
266
|
+
const map = Array.isArray(behaviors)
|
|
267
|
+
? Object.fromEntries(behaviors.map((b) => [b.name || '', b]))
|
|
268
|
+
: behaviors;
|
|
269
|
+
const stateSet = new Set(states);
|
|
270
|
+
const declared = new Set();
|
|
271
|
+
const unknown = new Set();
|
|
272
|
+
// "is in <state>" / "transitions to <state>" / "after <state>" — common
|
|
273
|
+
// requires-clause patterns. Capture the token after these phrases and
|
|
274
|
+
// check it against the lifecycle's declared states.
|
|
275
|
+
const phrasePatterns = [
|
|
276
|
+
/\bis\s+(?:in|at)\s+(\w+)/gi,
|
|
277
|
+
/\btransitions?\s+(?:to|from)\s+(\w+)/gi,
|
|
278
|
+
/\bafter\s+(\w+)/gi,
|
|
279
|
+
/\bbefore\s+(\w+)/gi,
|
|
280
|
+
/\b(?:in|when)\s+state\s+(\w+)/gi,
|
|
281
|
+
];
|
|
282
|
+
for (const b of Object.values(map)) {
|
|
283
|
+
const requires = b?.requires;
|
|
284
|
+
if (!requires)
|
|
285
|
+
continue;
|
|
286
|
+
const list = Array.isArray(requires) ? requires : [requires];
|
|
287
|
+
for (const clause of list) {
|
|
288
|
+
if (typeof clause !== 'string')
|
|
289
|
+
continue;
|
|
290
|
+
for (const pattern of phrasePatterns) {
|
|
291
|
+
let m;
|
|
292
|
+
const re = new RegExp(pattern.source, pattern.flags);
|
|
293
|
+
while ((m = re.exec(clause)) !== null) {
|
|
294
|
+
const token = m[1];
|
|
295
|
+
if (!token)
|
|
296
|
+
continue;
|
|
297
|
+
if (stateSet.has(token))
|
|
298
|
+
declared.add(token);
|
|
299
|
+
else if (looksLikeStateName(token, states))
|
|
300
|
+
unknown.add(token);
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
// Also: direct name mentions (legacy heuristic)
|
|
304
|
+
for (const state of stateSet) {
|
|
305
|
+
const re = new RegExp(`\\b${state.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\$&')}\\b`);
|
|
306
|
+
if (re.test(clause))
|
|
307
|
+
declared.add(state);
|
|
308
|
+
}
|
|
309
|
+
}
|
|
310
|
+
}
|
|
311
|
+
return { declared: [...declared], unknown: [...unknown] };
|
|
312
|
+
}
|
|
313
|
+
/** Heuristic: a candidate string "looks like" a state name when it matches
|
|
314
|
+
* the case-style of the declared states (snake_case or single-word). */
|
|
315
|
+
function looksLikeStateName(token, states) {
|
|
316
|
+
if (states.length === 0)
|
|
317
|
+
return false;
|
|
318
|
+
const allSnakeCase = states.every((s) => /^[a-z][a-z0-9_]*$/.test(s));
|
|
319
|
+
if (allSnakeCase)
|
|
320
|
+
return /^[a-z][a-z0-9_]*$/.test(token);
|
|
321
|
+
return /^[a-z][a-zA-Z0-9_]*$/.test(token);
|
|
322
|
+
}
|
|
323
|
+
function sanitizeIdent(s) {
|
|
324
|
+
return s.replace(/[^A-Za-z0-9_]/g, '_').replace(/^[0-9]/, '_$&');
|
|
325
|
+
}
|
|
326
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/inference/quint-gen/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quint subprocess runner — mirrors the `validateBundle v2` pattern at
|
|
3
|
+
* `engines/src/bundles/validate.ts:459-504`. Probes `quint --version`
|
|
4
|
+
* once; skips cleanly if the binary isn't on PATH; runs `quint typecheck`
|
|
5
|
+
* with a 15s per-file timeout; returns a structured result.
|
|
6
|
+
*
|
|
7
|
+
* Used by `analyse-runner.ts` to validate the per-spec Quint module
|
|
8
|
+
* generated by `./index.ts`. Failed typecheck = lifecycle inconsistency
|
|
9
|
+
* the LLM didn't catch.
|
|
10
|
+
*/
|
|
11
|
+
export interface QuintRunResult {
|
|
12
|
+
status: 'pass' | 'fail' | 'skip';
|
|
13
|
+
/** Reason for skip (e.g. 'quint binary not on PATH'). Only set when status==='skip'. */
|
|
14
|
+
skipReason?: string;
|
|
15
|
+
/** One entry per typecheck error, slice-truncated to 400 chars. Empty when status==='pass'. */
|
|
16
|
+
errors: string[];
|
|
17
|
+
/** Wall-clock duration of the entire run. */
|
|
18
|
+
durationMs: number;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Run `quint typecheck` against a single Quint file path. Returns a
|
|
22
|
+
* structured result that the analyse-runner formats into a
|
|
23
|
+
* `verify-behavior.txt` log alongside `verify.txt`.
|
|
24
|
+
*
|
|
25
|
+
* Skip semantics: when the `quint` CLI isn't installed (common on user
|
|
26
|
+
* machines), we skip without failing — Quint is an opt-in formal layer,
|
|
27
|
+
* not a hard dependency.
|
|
28
|
+
*/
|
|
29
|
+
export declare function runQuintTypecheck(filePath: string): QuintRunResult;
|
|
30
|
+
/**
|
|
31
|
+
* Format a `QuintRunResult` as a human-readable text block suitable for
|
|
32
|
+
* writing to `verify-behavior.txt` in the run output dir, OR feeding back
|
|
33
|
+
* to the LLM as an error message in a retry prompt.
|
|
34
|
+
*/
|
|
35
|
+
export declare function formatQuintResult(result: QuintRunResult, sourceFilePath?: string): string;
|
|
36
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../src/inference/quint-gen/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,MAAM,WAAW,cAAc;IAC7B,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,wFAAwF;IACxF,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,+FAA+F;IAC/F,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,6CAA6C;IAC7C,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;;;GAQG;AACH,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,MAAM,GAAG,cAAc,CAqClE;AAED;;;;GAIG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,cAAc,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,MAAM,CAezF"}
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Quint subprocess runner — mirrors the `validateBundle v2` pattern at
|
|
3
|
+
* `engines/src/bundles/validate.ts:459-504`. Probes `quint --version`
|
|
4
|
+
* once; skips cleanly if the binary isn't on PATH; runs `quint typecheck`
|
|
5
|
+
* with a 15s per-file timeout; returns a structured result.
|
|
6
|
+
*
|
|
7
|
+
* Used by `analyse-runner.ts` to validate the per-spec Quint module
|
|
8
|
+
* generated by `./index.ts`. Failed typecheck = lifecycle inconsistency
|
|
9
|
+
* the LLM didn't catch.
|
|
10
|
+
*/
|
|
11
|
+
import { spawnSync } from 'child_process';
|
|
12
|
+
/**
|
|
13
|
+
* Run `quint typecheck` against a single Quint file path. Returns a
|
|
14
|
+
* structured result that the analyse-runner formats into a
|
|
15
|
+
* `verify-behavior.txt` log alongside `verify.txt`.
|
|
16
|
+
*
|
|
17
|
+
* Skip semantics: when the `quint` CLI isn't installed (common on user
|
|
18
|
+
* machines), we skip without failing — Quint is an opt-in formal layer,
|
|
19
|
+
* not a hard dependency.
|
|
20
|
+
*/
|
|
21
|
+
export function runQuintTypecheck(filePath) {
|
|
22
|
+
const start = Date.now();
|
|
23
|
+
// Probe quint availability once. Match the validateBundle v2 pattern.
|
|
24
|
+
const probe = spawnSync('quint', ['--version'], { encoding: 'utf8' });
|
|
25
|
+
if (probe.error || probe.status !== 0) {
|
|
26
|
+
return {
|
|
27
|
+
status: 'skip',
|
|
28
|
+
skipReason: 'quint CLI not on PATH (install via `npm install -g @informalsystems/quint`)',
|
|
29
|
+
errors: [],
|
|
30
|
+
durationMs: Date.now() - start,
|
|
31
|
+
};
|
|
32
|
+
}
|
|
33
|
+
const res = spawnSync('quint', ['typecheck', filePath], {
|
|
34
|
+
encoding: 'utf8',
|
|
35
|
+
timeout: 15000,
|
|
36
|
+
});
|
|
37
|
+
if (res.status !== 0) {
|
|
38
|
+
const raw = (res.stderr || res.stdout || '').trim();
|
|
39
|
+
// Truncate per-error to 400 chars (slightly more than validateBundle v2's
|
|
40
|
+
// 200; per-spec lifecycles can accumulate multiple errors at once and we
|
|
41
|
+
// want the LLM's retry to see context).
|
|
42
|
+
const errors = raw.split(/\n\n+/).map((e) => e.slice(0, 400)).filter(Boolean);
|
|
43
|
+
return {
|
|
44
|
+
status: 'fail',
|
|
45
|
+
errors,
|
|
46
|
+
durationMs: Date.now() - start,
|
|
47
|
+
};
|
|
48
|
+
}
|
|
49
|
+
return {
|
|
50
|
+
status: 'pass',
|
|
51
|
+
errors: [],
|
|
52
|
+
durationMs: Date.now() - start,
|
|
53
|
+
};
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Format a `QuintRunResult` as a human-readable text block suitable for
|
|
57
|
+
* writing to `verify-behavior.txt` in the run output dir, OR feeding back
|
|
58
|
+
* to the LLM as an error message in a retry prompt.
|
|
59
|
+
*/
|
|
60
|
+
export function formatQuintResult(result, sourceFilePath) {
|
|
61
|
+
const lines = [];
|
|
62
|
+
lines.push(`Quint 5b deterministic gate — status: ${result.status} (${result.durationMs}ms)`);
|
|
63
|
+
if (sourceFilePath)
|
|
64
|
+
lines.push(`Source: ${sourceFilePath}`);
|
|
65
|
+
if (result.status === 'skip') {
|
|
66
|
+
lines.push(`Skipped: ${result.skipReason ?? 'unknown'}`);
|
|
67
|
+
}
|
|
68
|
+
else if (result.status === 'fail') {
|
|
69
|
+
lines.push('Errors:');
|
|
70
|
+
for (const err of result.errors) {
|
|
71
|
+
lines.push(` - ${err.replace(/\n/g, '\n ')}`);
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
else {
|
|
75
|
+
lines.push('All lifecycle invariants typecheck cleanly.');
|
|
76
|
+
}
|
|
77
|
+
return lines.join('\n');
|
|
78
|
+
}
|
|
79
|
+
//# sourceMappingURL=runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.js","sourceRoot":"","sources":["../../../src/inference/quint-gen/runner.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAY1C;;;;;;;;GAQG;AACH,MAAM,UAAU,iBAAiB,CAAC,QAAgB;IAChD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;IAEzB,sEAAsE;IACtE,MAAM,KAAK,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,QAAQ,EAAE,MAAM,EAAE,CAAC,CAAC;IACtE,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtC,OAAO;YACL,MAAM,EAAE,MAAM;YACd,UAAU,EAAE,6EAA6E;YACzF,MAAM,EAAE,EAAE;YACV,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC/B,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,CAAC,OAAO,EAAE,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE;QACtD,QAAQ,EAAE,MAAM;QAChB,OAAO,EAAE,KAAK;KACf,CAAC,CAAC;IAEH,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACrB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC;QACpD,0EAA0E;QAC1E,yEAAyE;QACzE,wCAAwC;QACxC,MAAM,MAAM,GAAG,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC9E,OAAO;YACL,MAAM,EAAE,MAAM;YACd,MAAM;YACN,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;SAC/B,CAAC;IACJ,CAAC;IAED,OAAO;QACL,MAAM,EAAE,MAAM;QACd,MAAM,EAAE,EAAE;QACV,UAAU,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,KAAK;KAC/B,CAAC;AACJ,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAAsB,EAAE,cAAuB;IAC/E,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,KAAK,CAAC,IAAI,CAAC,yCAAyC,MAAM,CAAC,MAAM,KAAK,MAAM,CAAC,UAAU,KAAK,CAAC,CAAC;IAC9F,IAAI,cAAc;QAAE,KAAK,CAAC,IAAI,CAAC,WAAW,cAAc,EAAE,CAAC,CAAC;IAC5D,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC7B,KAAK,CAAC,IAAI,CAAC,YAAY,MAAM,CAAC,UAAU,IAAI,SAAS,EAAE,CAAC,CAAC;IAC3D,CAAC;SAAM,IAAI,MAAM,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QACpC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;QACtB,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;YAChC,KAAK,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,OAAO,CAAC,KAAK,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAC;QACpD,CAAC;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CAAC,IAAI,CAAC,6CAA6C,CAAC,CAAC;IAC5D,CAAC;IACD,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@specverse/engines",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.4.0",
|
|
4
4
|
"description": "SpecVerse toolchain — parser, inference, realize, generators, AI, registry, bundles",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -19,6 +19,14 @@
|
|
|
19
19
|
"types": "./dist/inference/index.d.ts",
|
|
20
20
|
"import": "./dist/inference/index.js"
|
|
21
21
|
},
|
|
22
|
+
"./inference/quint-gen": {
|
|
23
|
+
"types": "./dist/inference/quint-gen/index.d.ts",
|
|
24
|
+
"import": "./dist/inference/quint-gen/index.js"
|
|
25
|
+
},
|
|
26
|
+
"./inference/quint-gen/runner": {
|
|
27
|
+
"types": "./dist/inference/quint-gen/runner.d.ts",
|
|
28
|
+
"import": "./dist/inference/quint-gen/runner.js"
|
|
29
|
+
},
|
|
22
30
|
"./analyse-prepass": {
|
|
23
31
|
"types": "./dist/analyse-prepass/index.d.ts",
|
|
24
32
|
"import": "./dist/analyse-prepass/index.js"
|
|
@@ -53,7 +61,8 @@
|
|
|
53
61
|
"@ai-sdk/anthropic": "^3.0.71",
|
|
54
62
|
"@ai-sdk/openai-compatible": "^2.0.41",
|
|
55
63
|
"@ai-sdk/provider": "^3.0.8",
|
|
56
|
-
"@specverse/assets": "^1.
|
|
64
|
+
"@specverse/assets": "^1.6.0",
|
|
65
|
+
"@specverse/engines": "^6.4.0",
|
|
57
66
|
"@specverse/entities": "^5.1.0",
|
|
58
67
|
"@specverse/runtime": "^5.0.1",
|
|
59
68
|
"@specverse/types": "^5.1.0",
|