@specverse/engines 6.0.11 → 6.0.13
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 +64 -0
- package/dist/ai/analyse-runner.d.ts.map +1 -0
- package/dist/ai/analyse-runner.js +248 -0
- package/dist/ai/analyse-runner.js.map +1 -0
- package/dist/ai/create-runner.d.ts +52 -0
- package/dist/ai/create-runner.d.ts.map +1 -0
- package/dist/ai/create-runner.js +173 -0
- package/dist/ai/create-runner.js.map +1 -0
- package/dist/ai/index.d.ts +6 -0
- package/dist/ai/index.d.ts.map +1 -1
- package/dist/ai/index.js +12 -0
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/prompt-runner.d.ts +66 -0
- package/dist/ai/prompt-runner.d.ts.map +1 -0
- package/dist/ai/prompt-runner.js +143 -0
- package/dist/ai/prompt-runner.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
import type { LanguageModel } from 'ai';
|
|
2
|
+
import { type RunManifest, type RunCaseEntry } from './run-paths.js';
|
|
3
|
+
export interface RunAnalyseOptions {
|
|
4
|
+
/**
|
|
5
|
+
* Path to the source under analysis. The runner does NOT copy this into
|
|
6
|
+
* outputDir/input/ — that's the caller's responsibility (the harness has
|
|
7
|
+
* its own corpus-shape conventions; CLI commands will copy explicitly).
|
|
8
|
+
*/
|
|
9
|
+
sourceDir: string;
|
|
10
|
+
/**
|
|
11
|
+
* Where to write the structured run output (input/, facts/, prompts/,
|
|
12
|
+
* llm-output/, specs/, project/).
|
|
13
|
+
*/
|
|
14
|
+
outputDir: string;
|
|
15
|
+
/** Pre-extracted facts file injected as the prompt preamble. */
|
|
16
|
+
factsPath?: string;
|
|
17
|
+
/** Auto-extract facts via `runPrepass` before calling the analyse prompt. */
|
|
18
|
+
autoFacts?: boolean;
|
|
19
|
+
/** Run verify-analyse after the draft pass. */
|
|
20
|
+
verify?: boolean;
|
|
21
|
+
/** Materialize project/ via `spv init` + `spv realize all`. */
|
|
22
|
+
realize?: boolean;
|
|
23
|
+
/** Pre-resolved LanguageModel (for cross-call session caching). */
|
|
24
|
+
model?: LanguageModel;
|
|
25
|
+
/** Per-call timeout. Default 15 min. */
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
/** Identity fields recorded in manifest. */
|
|
28
|
+
prompt?: string;
|
|
29
|
+
providerId?: string;
|
|
30
|
+
modelId?: string;
|
|
31
|
+
experimentRunId?: string;
|
|
32
|
+
caseName?: string;
|
|
33
|
+
/** Loose case meta for the manifest (kind: 'analyse' is fixed). */
|
|
34
|
+
caseMeta?: RunCaseEntry;
|
|
35
|
+
}
|
|
36
|
+
export interface RunAnalyseResult {
|
|
37
|
+
outputDir: string;
|
|
38
|
+
draftSpecPath: string;
|
|
39
|
+
/** Canonical spec path = outputDir/specs/main.specly. Always present. */
|
|
40
|
+
finalSpecPath: string;
|
|
41
|
+
/** Stage that produced the canonical spec ("draft" if no verify). */
|
|
42
|
+
finalStage: 'draft' | 'verified';
|
|
43
|
+
validateFinal: {
|
|
44
|
+
ok: boolean;
|
|
45
|
+
errors: string;
|
|
46
|
+
};
|
|
47
|
+
realize: {
|
|
48
|
+
ok: boolean;
|
|
49
|
+
error?: string;
|
|
50
|
+
} | null;
|
|
51
|
+
draftDurationMs: number;
|
|
52
|
+
verifyDurationMs: number;
|
|
53
|
+
wallTimeMs: number;
|
|
54
|
+
manifest: RunManifest;
|
|
55
|
+
draftRetried: boolean;
|
|
56
|
+
validateAfterDraftOk: boolean;
|
|
57
|
+
}
|
|
58
|
+
/**
|
|
59
|
+
* Execute the full analyse pipeline against a source directory and write
|
|
60
|
+
* the structured run output. Returns paths + status; caller composes
|
|
61
|
+
* scoring / README finalization separately.
|
|
62
|
+
*/
|
|
63
|
+
export declare function runAnalyse(opts: RunAnalyseOptions): Promise<RunAnalyseResult>;
|
|
64
|
+
//# sourceMappingURL=analyse-runner.d.ts.map
|
|
@@ -0,0 +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;AAIxB,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,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,CAuLnF"}
|
|
@@ -0,0 +1,248 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `runAnalyse()` — high-level orchestrator for analysing a source codebase
|
|
3
|
+
* into a SpecVerse spec.
|
|
4
|
+
*
|
|
5
|
+
* Public API for `spv ai analyse` (TODO #21 phase 4) and the eval harness.
|
|
6
|
+
* One call, full pipeline:
|
|
7
|
+
*
|
|
8
|
+
* 1. (optional) inject pre-extracted structural facts via runPrepass
|
|
9
|
+
* 2. assemble + call the analyse prompt → specs/draft.specly + main.specly
|
|
10
|
+
* 3. spv validate; if invalid, retry once with the parser error fed back
|
|
11
|
+
* 4. (optional) verify-analyse pass → specs/verified.specly + main.specly
|
|
12
|
+
* 5. spv validate; record validate.txt
|
|
13
|
+
* 6. (optional) materialize project/ via spv init + spv realize
|
|
14
|
+
*
|
|
15
|
+
* Caller responsibilities:
|
|
16
|
+
* - Materialize source into `inputDir` (or just point to an existing dir)
|
|
17
|
+
* - Decide where outputs go via `outputDir`
|
|
18
|
+
* - Score against expected_* fields if running eval
|
|
19
|
+
* - Compose final README + manifest with caseMeta + score
|
|
20
|
+
*
|
|
21
|
+
* The runner returns enough information for the caller to compose those
|
|
22
|
+
* artifacts. It writes manifest.json itself with what it knows; callers
|
|
23
|
+
* can re-write it with additional fields after scoring.
|
|
24
|
+
*/
|
|
25
|
+
import { writeFileSync, readFileSync, existsSync, rmSync, cpSync } from 'fs';
|
|
26
|
+
import { join } from 'path';
|
|
27
|
+
import { execSync, spawnSync } from 'child_process';
|
|
28
|
+
import { promptsDir, llmOutputDir, factsDir, specsDir, ensureSubdirs, writeStageSpec, writeProjectReadme, writeManifest, } from './run-paths.js';
|
|
29
|
+
import { runPrompt, extractSpec } from './prompt-runner.js';
|
|
30
|
+
import { resolveModel, resolveProviderId } from './model-resolver.js';
|
|
31
|
+
function runValidate(specPath) {
|
|
32
|
+
const result = spawnSync('spv', ['validate', specPath], {
|
|
33
|
+
encoding: 'utf8',
|
|
34
|
+
timeout: 30_000,
|
|
35
|
+
});
|
|
36
|
+
if (result.status === 0)
|
|
37
|
+
return { ok: true, errors: '' };
|
|
38
|
+
const errors = (result.stderr || '') + (result.stdout || '');
|
|
39
|
+
return { ok: false, errors: errors.trim() };
|
|
40
|
+
}
|
|
41
|
+
async function realizeProject(outputDir) {
|
|
42
|
+
const projectPath = join(outputDir, 'project');
|
|
43
|
+
const mainSpec = join(specsDir(outputDir), 'main.specly');
|
|
44
|
+
if (!existsSync(mainSpec))
|
|
45
|
+
return { ok: false, error: 'specs/main.specly missing' };
|
|
46
|
+
if (existsSync(projectPath))
|
|
47
|
+
rmSync(projectPath, { recursive: true, force: true });
|
|
48
|
+
try {
|
|
49
|
+
execSync(`spv init project --template default`, {
|
|
50
|
+
cwd: outputDir, stdio: 'pipe', timeout: 60_000,
|
|
51
|
+
});
|
|
52
|
+
}
|
|
53
|
+
catch (err) {
|
|
54
|
+
return { ok: false, error: `spv init failed: ${err.message}` };
|
|
55
|
+
}
|
|
56
|
+
cpSync(mainSpec, join(projectPath, 'specs', 'main.specly'));
|
|
57
|
+
try {
|
|
58
|
+
execSync(`spv realize all specs/main.specly`, {
|
|
59
|
+
cwd: projectPath, stdio: 'pipe', timeout: 15 * 60_000,
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
catch (err) {
|
|
63
|
+
const e = err;
|
|
64
|
+
const stderr = e.stderr ? String(e.stderr).slice(0, 500) : '';
|
|
65
|
+
return { ok: false, error: `spv realize failed: ${stderr || e.message}` };
|
|
66
|
+
}
|
|
67
|
+
return { ok: true };
|
|
68
|
+
}
|
|
69
|
+
/**
|
|
70
|
+
* Execute the full analyse pipeline against a source directory and write
|
|
71
|
+
* the structured run output. Returns paths + status; caller composes
|
|
72
|
+
* scoring / README finalization separately.
|
|
73
|
+
*/
|
|
74
|
+
export async function runAnalyse(opts) {
|
|
75
|
+
const startedAt = new Date().toISOString();
|
|
76
|
+
const t0 = Date.now();
|
|
77
|
+
ensureSubdirs(opts.outputDir);
|
|
78
|
+
// 1. Resolve facts content (if any). Two sources: --facts <path> (manual)
|
|
79
|
+
// or runPrepass on sourceDir (--auto-facts). Manual wins if both passed.
|
|
80
|
+
let factsContent = '';
|
|
81
|
+
let factsSource = null;
|
|
82
|
+
if (opts.autoFacts && !opts.factsPath) {
|
|
83
|
+
const { runPrepass, formatFactsAsMarkdown } = await import('./../analyse-prepass/index.js');
|
|
84
|
+
const facts = await runPrepass(opts.sourceDir);
|
|
85
|
+
factsContent = formatFactsAsMarkdown(facts);
|
|
86
|
+
factsSource = `auto (${facts.meta.backend}, adapters: ${facts.meta.adaptersRun.join(', ') || 'none'})`;
|
|
87
|
+
writeFileSync(join(factsDir(opts.outputDir), 'facts.md'), factsContent);
|
|
88
|
+
try {
|
|
89
|
+
writeFileSync(join(factsDir(opts.outputDir), 'facts.json'), JSON.stringify(facts, null, 2));
|
|
90
|
+
}
|
|
91
|
+
catch { /* non-serializable; skip */ }
|
|
92
|
+
}
|
|
93
|
+
else if (opts.factsPath) {
|
|
94
|
+
factsContent = readFileSync(opts.factsPath, 'utf8');
|
|
95
|
+
factsSource = `manual (${opts.factsPath})`;
|
|
96
|
+
writeFileSync(join(factsDir(opts.outputDir), 'facts.md'), factsContent);
|
|
97
|
+
}
|
|
98
|
+
const userPrefix = factsContent
|
|
99
|
+
? 'Before reading the source, here is a deterministic structural\n' +
|
|
100
|
+
'inventory extracted from the source (NOT LLM judgment). Treat as\n' +
|
|
101
|
+
'ground truth for what symbols/files exist; verify SpecVerse semantics\n' +
|
|
102
|
+
'(attributes, relationship cardinality, lifecycle states) by reading\n' +
|
|
103
|
+
'source. Do not invent entities not in this inventory.\n\n' +
|
|
104
|
+
'---BEGIN STRUCTURAL FACTS---\n' +
|
|
105
|
+
factsContent.trim() + '\n' +
|
|
106
|
+
'---END STRUCTURAL FACTS---\n\n'
|
|
107
|
+
: '';
|
|
108
|
+
// 2. Resolve model (caller may have pre-built one for session caching).
|
|
109
|
+
const model = opts.model ?? resolveModel({ timeout: opts.timeoutMs ?? 15 * 60_000 });
|
|
110
|
+
// 3. Analyse pass.
|
|
111
|
+
const draftResult = await runPrompt({
|
|
112
|
+
operation: 'analyse',
|
|
113
|
+
values: {
|
|
114
|
+
implementationPath: opts.sourceDir,
|
|
115
|
+
spec: '',
|
|
116
|
+
environment: 'development',
|
|
117
|
+
},
|
|
118
|
+
model,
|
|
119
|
+
timeoutMs: opts.timeoutMs ?? 15 * 60_000,
|
|
120
|
+
userPrefix,
|
|
121
|
+
onAssembled: ({ system, user }) => {
|
|
122
|
+
writeFileSync(join(promptsDir(opts.outputDir), 'analyse-system.txt'), system);
|
|
123
|
+
writeFileSync(join(promptsDir(opts.outputDir), 'analyse-user.txt'), user);
|
|
124
|
+
},
|
|
125
|
+
});
|
|
126
|
+
let draftSpec = extractSpec(draftResult.text);
|
|
127
|
+
const draftSpecPath = writeStageSpec(opts.outputDir, 'draft', draftSpec);
|
|
128
|
+
writeFileSync(join(llmOutputDir(opts.outputDir), 'analyse.txt'), draftResult.text);
|
|
129
|
+
// 4. Validate draft; retry once if invalid.
|
|
130
|
+
let validateAfterDraft = runValidate(draftSpecPath);
|
|
131
|
+
let draftRetried = false;
|
|
132
|
+
if (!validateAfterDraft.ok) {
|
|
133
|
+
writeFileSync(join(opts.outputDir, 'validate-error-1.txt'), validateAfterDraft.errors);
|
|
134
|
+
try {
|
|
135
|
+
const retryResult = await runPrompt({
|
|
136
|
+
operation: 'analyse',
|
|
137
|
+
values: {
|
|
138
|
+
implementationPath: opts.sourceDir,
|
|
139
|
+
spec: '',
|
|
140
|
+
environment: 'development',
|
|
141
|
+
},
|
|
142
|
+
model,
|
|
143
|
+
timeoutMs: opts.timeoutMs ?? 15 * 60_000,
|
|
144
|
+
userPrefix: 'Your previous draft failed `spv validate` with the following error:\n\n' +
|
|
145
|
+
'```\n' + validateAfterDraft.errors + '\n```\n\n' +
|
|
146
|
+
'Your previous output:\n```specly\n' + draftSpec + '\n```\n\n' +
|
|
147
|
+
'Fix the error and emit a corrected spec. Keep everything else identical.\n\n',
|
|
148
|
+
onAssembled: ({ system, user }) => {
|
|
149
|
+
writeFileSync(join(promptsDir(opts.outputDir), 'analyse-retry-system.txt'), system);
|
|
150
|
+
writeFileSync(join(promptsDir(opts.outputDir), 'analyse-retry-user.txt'), user);
|
|
151
|
+
},
|
|
152
|
+
});
|
|
153
|
+
const retrySpec = extractSpec(retryResult.text);
|
|
154
|
+
writeFileSync(join(specsDir(opts.outputDir), 'draft-retry.specly'), retrySpec);
|
|
155
|
+
writeFileSync(join(llmOutputDir(opts.outputDir), 'analyse-retry.txt'), retryResult.text);
|
|
156
|
+
const validateAfterRetry = runValidate(join(specsDir(opts.outputDir), 'draft-retry.specly'));
|
|
157
|
+
writeFileSync(join(opts.outputDir, 'validate-after-retry.txt'), validateAfterRetry.ok ? 'OK' : validateAfterRetry.errors);
|
|
158
|
+
if (validateAfterRetry.ok) {
|
|
159
|
+
draftSpec = retrySpec;
|
|
160
|
+
writeStageSpec(opts.outputDir, 'draft', retrySpec);
|
|
161
|
+
validateAfterDraft = validateAfterRetry;
|
|
162
|
+
draftRetried = true;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
catch { /* retry failed; continue with original draft */ }
|
|
166
|
+
}
|
|
167
|
+
// 5. Verify pass (optional).
|
|
168
|
+
let finalSpec = draftSpec;
|
|
169
|
+
let finalStage = 'draft';
|
|
170
|
+
let verifyDurationMs = 0;
|
|
171
|
+
if (opts.verify) {
|
|
172
|
+
try {
|
|
173
|
+
const verifyResult = await runPrompt({
|
|
174
|
+
operation: 'verify-analyse',
|
|
175
|
+
values: {
|
|
176
|
+
implementationPath: opts.sourceDir,
|
|
177
|
+
draft: draftSpec,
|
|
178
|
+
structuralFacts: factsContent ||
|
|
179
|
+
'(no structural facts available — extract-facts pre-pass was not run)',
|
|
180
|
+
},
|
|
181
|
+
model,
|
|
182
|
+
timeoutMs: opts.timeoutMs ?? 15 * 60_000,
|
|
183
|
+
onAssembled: ({ system, user }) => {
|
|
184
|
+
writeFileSync(join(promptsDir(opts.outputDir), 'verify-system.txt'), system);
|
|
185
|
+
writeFileSync(join(promptsDir(opts.outputDir), 'verify-user.txt'), user);
|
|
186
|
+
},
|
|
187
|
+
});
|
|
188
|
+
finalSpec = extractSpec(verifyResult.text);
|
|
189
|
+
writeFileSync(join(llmOutputDir(opts.outputDir), 'verify.txt'), verifyResult.text);
|
|
190
|
+
verifyDurationMs = verifyResult.duration_ms;
|
|
191
|
+
writeStageSpec(opts.outputDir, 'verified', finalSpec);
|
|
192
|
+
finalStage = 'verified';
|
|
193
|
+
}
|
|
194
|
+
catch { /* fallback: keep draft as final */ }
|
|
195
|
+
}
|
|
196
|
+
// 6. Final validation.
|
|
197
|
+
const finalSpecPath = join(specsDir(opts.outputDir), 'main.specly');
|
|
198
|
+
const validateFinal = runValidate(finalSpecPath);
|
|
199
|
+
writeFileSync(join(opts.outputDir, 'validate.txt'), validateFinal.ok ? 'OK' : validateFinal.errors);
|
|
200
|
+
// 7. Optional realize.
|
|
201
|
+
let realize = null;
|
|
202
|
+
if (opts.realize && validateFinal.ok) {
|
|
203
|
+
realize = await realizeProject(opts.outputDir);
|
|
204
|
+
}
|
|
205
|
+
writeProjectReadme(opts.outputDir, {
|
|
206
|
+
caseName: opts.caseName ?? opts.caseMeta?.name ?? 'spec',
|
|
207
|
+
realized: realize,
|
|
208
|
+
});
|
|
209
|
+
// 8. Manifest.
|
|
210
|
+
const wallTimeMs = Date.now() - t0;
|
|
211
|
+
const draftDurationMs = draftResult.duration_ms;
|
|
212
|
+
const manifest = {
|
|
213
|
+
kind: 'analyse',
|
|
214
|
+
case: opts.caseName ?? opts.caseMeta?.name ?? 'spec',
|
|
215
|
+
runFolder: opts.outputDir.split('/').pop() ?? '',
|
|
216
|
+
startedAt,
|
|
217
|
+
endedAt: new Date().toISOString(),
|
|
218
|
+
wallTimeMs,
|
|
219
|
+
provider: opts.providerId ?? resolveProviderId(),
|
|
220
|
+
model: opts.modelId ?? 'default',
|
|
221
|
+
prompt: opts.prompt ?? 'analyse-v9',
|
|
222
|
+
workflow: opts.verify
|
|
223
|
+
? 'analyse → spv-validate → verify-analyse → spv-validate'
|
|
224
|
+
: 'analyse → spv-validate',
|
|
225
|
+
verify: !!opts.verify,
|
|
226
|
+
factsPath: factsSource,
|
|
227
|
+
validateFinal: validateFinal.ok ? 'OK' : validateFinal.errors.slice(0, 200),
|
|
228
|
+
realize: opts.realize ? (realize?.ok ? 'OK' : realize?.error || 'skipped') : false,
|
|
229
|
+
sourcePath: opts.sourceDir,
|
|
230
|
+
experimentRunId: opts.experimentRunId ?? null,
|
|
231
|
+
};
|
|
232
|
+
writeManifest(opts.outputDir, manifest);
|
|
233
|
+
return {
|
|
234
|
+
outputDir: opts.outputDir,
|
|
235
|
+
draftSpecPath,
|
|
236
|
+
finalSpecPath,
|
|
237
|
+
finalStage,
|
|
238
|
+
validateFinal,
|
|
239
|
+
realize,
|
|
240
|
+
draftDurationMs,
|
|
241
|
+
verifyDurationMs,
|
|
242
|
+
wallTimeMs,
|
|
243
|
+
manifest,
|
|
244
|
+
draftRetried,
|
|
245
|
+
validateAfterDraftOk: validateAfterDraft.ok,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
//# sourceMappingURL=analyse-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"analyse-runner.js","sourceRoot":"","sources":["../../src/ai/analyse-runner.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
import type { LanguageModel } from 'ai';
|
|
2
|
+
import { type RunManifest, type RunCaseEntry } from './run-paths.js';
|
|
3
|
+
export interface RunCreateOptions {
|
|
4
|
+
/** Natural-language description of what the user wants. */
|
|
5
|
+
requirements: string;
|
|
6
|
+
/** Scale hint (personal / small / medium / enterprise). Optional. */
|
|
7
|
+
scale?: string;
|
|
8
|
+
/** Preferred tech (typescript+nestjs / python+django / etc.). Optional. */
|
|
9
|
+
preferredTech?: string;
|
|
10
|
+
/** Output directory for the structured run. */
|
|
11
|
+
outputDir: string;
|
|
12
|
+
/** Run verify-create after the draft pass. */
|
|
13
|
+
verify?: boolean;
|
|
14
|
+
/** Materialize project/ via `spv init` + `spv realize all`. */
|
|
15
|
+
realize?: boolean;
|
|
16
|
+
/** Pre-resolved LanguageModel (for cross-call session caching). */
|
|
17
|
+
model?: LanguageModel;
|
|
18
|
+
/** Per-call timeout. Default 10 min. */
|
|
19
|
+
timeoutMs?: number;
|
|
20
|
+
/** Identity fields recorded in manifest. */
|
|
21
|
+
prompt?: string;
|
|
22
|
+
providerId?: string;
|
|
23
|
+
modelId?: string;
|
|
24
|
+
experimentRunId?: string;
|
|
25
|
+
caseName?: string;
|
|
26
|
+
caseMeta?: RunCaseEntry;
|
|
27
|
+
}
|
|
28
|
+
export interface RunCreateResult {
|
|
29
|
+
outputDir: string;
|
|
30
|
+
draftSpecPath: string;
|
|
31
|
+
finalSpecPath: string;
|
|
32
|
+
finalStage: 'draft' | 'verified';
|
|
33
|
+
validateFinal: {
|
|
34
|
+
ok: boolean;
|
|
35
|
+
errors: string;
|
|
36
|
+
};
|
|
37
|
+
realize: {
|
|
38
|
+
ok: boolean;
|
|
39
|
+
error?: string;
|
|
40
|
+
} | null;
|
|
41
|
+
draftDurationMs: number;
|
|
42
|
+
verifyDurationMs: number;
|
|
43
|
+
wallTimeMs: number;
|
|
44
|
+
manifest: RunManifest;
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Execute the full create pipeline: NL request → draft spec → optional verify
|
|
48
|
+
* → validate → optional realize. Writes the structured run output. Returns
|
|
49
|
+
* paths + status; caller composes scoring / README finalization separately.
|
|
50
|
+
*/
|
|
51
|
+
export declare function runCreate(opts: RunCreateOptions): Promise<RunCreateResult>;
|
|
52
|
+
//# sourceMappingURL=create-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-runner.d.ts","sourceRoot":"","sources":["../../src/ai/create-runner.ts"],"names":[],"mappings":"AAqBA,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,IAAI,CAAC;AACxC,OAAO,EAGL,KAAK,WAAW,EAAE,KAAK,YAAY,EACpC,MAAM,gBAAgB,CAAC;AAIxB,MAAM,WAAW,gBAAgB;IAC/B,2DAA2D;IAC3D,YAAY,EAAE,MAAM,CAAC;IACrB,qEAAqE;IACrE,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,2EAA2E;IAC3E,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,+CAA+C;IAC/C,SAAS,EAAE,MAAM,CAAC;IAClB,8CAA8C;IAC9C,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,+DAA+D;IAC/D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,mEAAmE;IACnE,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,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,QAAQ,CAAC,EAAE,YAAY,CAAC;CACzB;AAED,MAAM,WAAW,eAAe;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,aAAa,EAAE,MAAM,CAAC;IACtB,aAAa,EAAE,MAAM,CAAC;IACtB,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;CACvB;AAqCD;;;;GAIG;AACH,wBAAsB,SAAS,CAAC,IAAI,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CA+GhF"}
|
|
@@ -0,0 +1,173 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `runCreate()` — high-level orchestrator for creating a SpecVerse spec
|
|
3
|
+
* from a natural-language request.
|
|
4
|
+
*
|
|
5
|
+
* Public API for `spv ai create` (TODO #21 phase 4) and the eval harness.
|
|
6
|
+
* One call, full pipeline:
|
|
7
|
+
*
|
|
8
|
+
* 1. write input/requirements.md (the NL request preserved alongside the run)
|
|
9
|
+
* 2. assemble + call the create prompt → specs/draft.specly + main.specly
|
|
10
|
+
* 3. (optional) verify-create pass → specs/verified.specly + main.specly
|
|
11
|
+
* 4. spv validate; record validate.txt
|
|
12
|
+
* 5. (optional) materialize project/ via spv init + spv realize
|
|
13
|
+
*
|
|
14
|
+
* Caller responsibilities:
|
|
15
|
+
* - Decide where outputs go via `outputDir`
|
|
16
|
+
* - Score against expected_* fields if running eval
|
|
17
|
+
* - Compose final README + manifest with caseMeta + score
|
|
18
|
+
*/
|
|
19
|
+
import { writeFileSync, existsSync, rmSync, cpSync } from 'fs';
|
|
20
|
+
import { join } from 'path';
|
|
21
|
+
import { execSync, spawnSync } from 'child_process';
|
|
22
|
+
import { inputDir, promptsDir, llmOutputDir, specsDir, ensureSubdirs, writeStageSpec, writeProjectReadme, writeManifest, } from './run-paths.js';
|
|
23
|
+
import { runPrompt, extractSpec } from './prompt-runner.js';
|
|
24
|
+
import { resolveModel, resolveProviderId } from './model-resolver.js';
|
|
25
|
+
function runValidate(specPath) {
|
|
26
|
+
const result = spawnSync('spv', ['validate', specPath], {
|
|
27
|
+
encoding: 'utf8',
|
|
28
|
+
timeout: 30_000,
|
|
29
|
+
});
|
|
30
|
+
if (result.status === 0)
|
|
31
|
+
return { ok: true, errors: '' };
|
|
32
|
+
const errors = (result.stderr || '') + (result.stdout || '');
|
|
33
|
+
return { ok: false, errors: errors.trim() };
|
|
34
|
+
}
|
|
35
|
+
async function realizeProject(outputDir) {
|
|
36
|
+
const projectPath = join(outputDir, 'project');
|
|
37
|
+
const mainSpec = join(specsDir(outputDir), 'main.specly');
|
|
38
|
+
if (!existsSync(mainSpec))
|
|
39
|
+
return { ok: false, error: 'specs/main.specly missing' };
|
|
40
|
+
if (existsSync(projectPath))
|
|
41
|
+
rmSync(projectPath, { recursive: true, force: true });
|
|
42
|
+
try {
|
|
43
|
+
execSync(`spv init project --template default`, {
|
|
44
|
+
cwd: outputDir, stdio: 'pipe', timeout: 60_000,
|
|
45
|
+
});
|
|
46
|
+
}
|
|
47
|
+
catch (err) {
|
|
48
|
+
return { ok: false, error: `spv init failed: ${err.message}` };
|
|
49
|
+
}
|
|
50
|
+
cpSync(mainSpec, join(projectPath, 'specs', 'main.specly'));
|
|
51
|
+
try {
|
|
52
|
+
execSync(`spv realize all specs/main.specly`, {
|
|
53
|
+
cwd: projectPath, stdio: 'pipe', timeout: 15 * 60_000,
|
|
54
|
+
});
|
|
55
|
+
}
|
|
56
|
+
catch (err) {
|
|
57
|
+
const e = err;
|
|
58
|
+
const stderr = e.stderr ? String(e.stderr).slice(0, 500) : '';
|
|
59
|
+
return { ok: false, error: `spv realize failed: ${stderr || e.message}` };
|
|
60
|
+
}
|
|
61
|
+
return { ok: true };
|
|
62
|
+
}
|
|
63
|
+
/**
|
|
64
|
+
* Execute the full create pipeline: NL request → draft spec → optional verify
|
|
65
|
+
* → validate → optional realize. Writes the structured run output. Returns
|
|
66
|
+
* paths + status; caller composes scoring / README finalization separately.
|
|
67
|
+
*/
|
|
68
|
+
export async function runCreate(opts) {
|
|
69
|
+
const startedAt = new Date().toISOString();
|
|
70
|
+
const t0 = Date.now();
|
|
71
|
+
ensureSubdirs(opts.outputDir);
|
|
72
|
+
// 0. Persist the NL request as input/requirements.md so the run dir is
|
|
73
|
+
// self-contained and the request is reviewable later.
|
|
74
|
+
const reqLines = [`# ${opts.caseName ?? 'spec'} — natural-language request`, ''];
|
|
75
|
+
if (opts.scale)
|
|
76
|
+
reqLines.push(`**Scale:** ${opts.scale}`);
|
|
77
|
+
if (opts.preferredTech)
|
|
78
|
+
reqLines.push(`**Preferred tech:** ${opts.preferredTech}`);
|
|
79
|
+
reqLines.push('', '---', '', opts.requirements);
|
|
80
|
+
writeFileSync(join(inputDir(opts.outputDir), 'requirements.md'), reqLines.join('\n'));
|
|
81
|
+
// 1. Resolve model (caller may have pre-built one for session caching).
|
|
82
|
+
const model = opts.model ?? resolveModel({ timeout: opts.timeoutMs ?? 10 * 60_000 });
|
|
83
|
+
// 2. Create pass.
|
|
84
|
+
const draftResult = await runPrompt({
|
|
85
|
+
operation: 'create',
|
|
86
|
+
values: {
|
|
87
|
+
requirements: opts.requirements,
|
|
88
|
+
scale: opts.scale,
|
|
89
|
+
preferredTech: opts.preferredTech,
|
|
90
|
+
},
|
|
91
|
+
model,
|
|
92
|
+
timeoutMs: opts.timeoutMs ?? 10 * 60_000,
|
|
93
|
+
onAssembled: ({ system, user }) => {
|
|
94
|
+
writeFileSync(join(promptsDir(opts.outputDir), 'create-system.txt'), system);
|
|
95
|
+
writeFileSync(join(promptsDir(opts.outputDir), 'create-user.txt'), user);
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
const draftSpec = extractSpec(draftResult.text);
|
|
99
|
+
const draftSpecPath = writeStageSpec(opts.outputDir, 'draft', draftSpec);
|
|
100
|
+
writeFileSync(join(llmOutputDir(opts.outputDir), 'create.txt'), draftResult.text);
|
|
101
|
+
// 3. Verify pass (optional).
|
|
102
|
+
let finalSpec = draftSpec;
|
|
103
|
+
let finalStage = 'draft';
|
|
104
|
+
let verifyDurationMs = 0;
|
|
105
|
+
if (opts.verify) {
|
|
106
|
+
try {
|
|
107
|
+
const verifyResult = await runPrompt({
|
|
108
|
+
operation: 'verify-create',
|
|
109
|
+
values: {
|
|
110
|
+
requirements: opts.requirements,
|
|
111
|
+
draft: draftSpec,
|
|
112
|
+
},
|
|
113
|
+
model,
|
|
114
|
+
timeoutMs: opts.timeoutMs ?? 10 * 60_000,
|
|
115
|
+
onAssembled: ({ system, user }) => {
|
|
116
|
+
writeFileSync(join(promptsDir(opts.outputDir), 'verify-system.txt'), system);
|
|
117
|
+
writeFileSync(join(promptsDir(opts.outputDir), 'verify-user.txt'), user);
|
|
118
|
+
},
|
|
119
|
+
});
|
|
120
|
+
finalSpec = extractSpec(verifyResult.text);
|
|
121
|
+
writeFileSync(join(llmOutputDir(opts.outputDir), 'verify.txt'), verifyResult.text);
|
|
122
|
+
verifyDurationMs = verifyResult.duration_ms;
|
|
123
|
+
writeStageSpec(opts.outputDir, 'verified', finalSpec);
|
|
124
|
+
finalStage = 'verified';
|
|
125
|
+
}
|
|
126
|
+
catch { /* fallback to draft */ }
|
|
127
|
+
}
|
|
128
|
+
// 4. Final validation.
|
|
129
|
+
const finalSpecPath = join(specsDir(opts.outputDir), 'main.specly');
|
|
130
|
+
const validateFinal = runValidate(finalSpecPath);
|
|
131
|
+
writeFileSync(join(opts.outputDir, 'validate.txt'), validateFinal.ok ? 'OK' : validateFinal.errors);
|
|
132
|
+
// 5. Optional realize.
|
|
133
|
+
let realize = null;
|
|
134
|
+
if (opts.realize && validateFinal.ok) {
|
|
135
|
+
realize = await realizeProject(opts.outputDir);
|
|
136
|
+
}
|
|
137
|
+
writeProjectReadme(opts.outputDir, {
|
|
138
|
+
caseName: opts.caseName ?? 'spec',
|
|
139
|
+
realized: realize,
|
|
140
|
+
});
|
|
141
|
+
// 6. Manifest.
|
|
142
|
+
const wallTimeMs = Date.now() - t0;
|
|
143
|
+
const manifest = {
|
|
144
|
+
kind: 'create',
|
|
145
|
+
case: opts.caseName ?? 'spec',
|
|
146
|
+
runFolder: opts.outputDir.split('/').pop() ?? '',
|
|
147
|
+
startedAt,
|
|
148
|
+
endedAt: new Date().toISOString(),
|
|
149
|
+
wallTimeMs,
|
|
150
|
+
provider: opts.providerId ?? resolveProviderId(),
|
|
151
|
+
model: opts.modelId ?? 'default',
|
|
152
|
+
prompt: opts.prompt ?? 'create-v9',
|
|
153
|
+
workflow: opts.verify ? 'create → verify-create' : 'create',
|
|
154
|
+
verify: !!opts.verify,
|
|
155
|
+
realize: opts.realize ? (realize?.ok ? 'OK' : realize?.error || 'skipped') : false,
|
|
156
|
+
validateFinal: validateFinal.ok ? 'OK' : validateFinal.errors.slice(0, 200),
|
|
157
|
+
experimentRunId: opts.experimentRunId ?? null,
|
|
158
|
+
};
|
|
159
|
+
writeManifest(opts.outputDir, manifest);
|
|
160
|
+
return {
|
|
161
|
+
outputDir: opts.outputDir,
|
|
162
|
+
draftSpecPath,
|
|
163
|
+
finalSpecPath,
|
|
164
|
+
finalStage,
|
|
165
|
+
validateFinal,
|
|
166
|
+
realize,
|
|
167
|
+
draftDurationMs: draftResult.duration_ms,
|
|
168
|
+
verifyDurationMs,
|
|
169
|
+
wallTimeMs,
|
|
170
|
+
manifest,
|
|
171
|
+
};
|
|
172
|
+
}
|
|
173
|
+
//# sourceMappingURL=create-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"create-runner.js","sourceRoot":"","sources":["../../src/ai/create-runner.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/index.d.ts
CHANGED
|
@@ -31,6 +31,12 @@ export type { ProviderId, ResolveModelOptions } from './model-resolver.js';
|
|
|
31
31
|
export { claudeCli, isClaudeCliAvailable, detectClaudePath } from './providers/claude-cli.js';
|
|
32
32
|
export type { ClaudeCliOptions } from './providers/claude-cli.js';
|
|
33
33
|
export { stubModel } from './providers/stub.js';
|
|
34
|
+
export { loadPrompt, substitute, assembleSystem, assembleUser, buildRunModel, runPrompt, extractSpec, } from './prompt-runner.js';
|
|
35
|
+
export type { PromptYaml, BuildRunModelOptions, RunPromptOptions, RunPromptResult, } from './prompt-runner.js';
|
|
36
|
+
export { runAnalyse } from './analyse-runner.js';
|
|
37
|
+
export type { RunAnalyseOptions, RunAnalyseResult } from './analyse-runner.js';
|
|
38
|
+
export { runCreate } from './create-runner.js';
|
|
39
|
+
export type { RunCreateOptions, RunCreateResult } from './create-runner.js';
|
|
34
40
|
export { buildRunFolder, caseRunPath, ensureSubdirs, inputDir, factsDir, promptsDir, llmOutputDir, specsDir, projectDir, writeStageSpec, writeProjectReadme, writeManifest, writeScore, writeReadme, SUBDIRS, } from './run-paths.js';
|
|
35
41
|
export type { RunKind, BuildRunFolderOptions, RunCaseEntry, RunManifest, RunScore, ScoreCoverage, ScoreDimension, ProjectReadmeOptions, ReadmeInfo, } from './run-paths.js';
|
|
36
42
|
export { detectInstalledSkill } from './skill-detection.js';
|
package/dist/ai/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
|
package/dist/ai/index.js
CHANGED
|
@@ -38,6 +38,18 @@ export { resolveModel, resolveProviderId, describeActiveProvider } from './model
|
|
|
38
38
|
// consumers should use resolveModel() rather than calling these directly.
|
|
39
39
|
export { claudeCli, isClaudeCliAvailable, detectClaudePath } from './providers/claude-cli.js';
|
|
40
40
|
export { stubModel } from './providers/stub.js';
|
|
41
|
+
// Prompt runner — load + assemble + call a SpecVerse prompt YAML through
|
|
42
|
+
// the active provider. Used by analyse-runner / create-runner; also useful
|
|
43
|
+
// for eval harnesses that want to invoke prompts directly.
|
|
44
|
+
export { loadPrompt, substitute, assembleSystem, assembleUser, buildRunModel, runPrompt, extractSpec, } from './prompt-runner.js';
|
|
45
|
+
// Analyse runner — high-level orchestrator for `spv ai analyse`. Takes a
|
|
46
|
+
// source dir, runs the LLM workflow (facts → analyse → validate → verify
|
|
47
|
+
// → validate → optional realize), writes the structured run output.
|
|
48
|
+
export { runAnalyse } from './analyse-runner.js';
|
|
49
|
+
// Create runner — high-level orchestrator for `spv ai create`. Takes a
|
|
50
|
+
// natural-language request, runs the LLM workflow (create → validate →
|
|
51
|
+
// verify-create → validate → optional realize), writes structured output.
|
|
52
|
+
export { runCreate } from './create-runner.js';
|
|
41
53
|
// Run-paths — structured per-case run dir layout. Used by `spv ai analyse`
|
|
42
54
|
// / `spv ai create` (when those land via TODO #21) and the eval harness.
|
|
43
55
|
// One writer; consistent layout regardless of caller.
|
package/dist/ai/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/ai/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
import { type LanguageModel } from 'ai';
|
|
2
|
+
import { type ResolveModelOptions } from './model-resolver.js';
|
|
3
|
+
/** Loose shape of a SpecVerse prompt YAML — system block + user.template. */
|
|
4
|
+
export interface PromptYaml {
|
|
5
|
+
name?: string;
|
|
6
|
+
version?: string;
|
|
7
|
+
system?: {
|
|
8
|
+
role?: string;
|
|
9
|
+
minimalContext?: string;
|
|
10
|
+
fullContext?: string;
|
|
11
|
+
context?: string;
|
|
12
|
+
};
|
|
13
|
+
user?: {
|
|
14
|
+
template?: string;
|
|
15
|
+
};
|
|
16
|
+
}
|
|
17
|
+
/** Resolve the canonical prompt YAML for a given operation. */
|
|
18
|
+
export declare function loadPrompt(operation: string): PromptYaml;
|
|
19
|
+
/** Substitute {{var}} placeholders in `text` from `values` + auto-filled schema paths. */
|
|
20
|
+
export declare function substitute(text: string, values: Record<string, string | undefined>): string;
|
|
21
|
+
/** Assemble the system message from a prompt YAML. */
|
|
22
|
+
export declare function assembleSystem(prompt: PromptYaml): string;
|
|
23
|
+
/** Assemble the user message — substitute case variables into user.template. */
|
|
24
|
+
export declare function assembleUser(prompt: PromptYaml, values: Record<string, string | undefined>): string;
|
|
25
|
+
export interface BuildRunModelOptions extends ResolveModelOptions {
|
|
26
|
+
timeoutMs?: number;
|
|
27
|
+
}
|
|
28
|
+
/**
|
|
29
|
+
* Build a single model instance for a whole run. Pass the returned model to
|
|
30
|
+
* every runPrompt call in the run so the claude-cli provider's session-resume
|
|
31
|
+
* (--session-id then --resume) actually fires across cases — first case pays
|
|
32
|
+
* the system-prompt cost, subsequent cases hit cache. ~75% input-token
|
|
33
|
+
* reduction on a typical 8-case run.
|
|
34
|
+
*/
|
|
35
|
+
export declare function buildRunModel({ timeoutMs, ...modelOptions }?: BuildRunModelOptions): LanguageModel;
|
|
36
|
+
export interface RunPromptOptions {
|
|
37
|
+
operation: string;
|
|
38
|
+
values: Record<string, string | undefined>;
|
|
39
|
+
model?: LanguageModel;
|
|
40
|
+
modelOptions?: ResolveModelOptions;
|
|
41
|
+
timeoutMs?: number;
|
|
42
|
+
onAssembled?: (parts: {
|
|
43
|
+
system: string;
|
|
44
|
+
user: string;
|
|
45
|
+
}) => void;
|
|
46
|
+
userPrefix?: string;
|
|
47
|
+
}
|
|
48
|
+
export interface RunPromptResult {
|
|
49
|
+
text: string;
|
|
50
|
+
tokens: {
|
|
51
|
+
input: number | null;
|
|
52
|
+
output: number | null;
|
|
53
|
+
};
|
|
54
|
+
duration_ms: number;
|
|
55
|
+
system: string;
|
|
56
|
+
user: string;
|
|
57
|
+
providerId: string;
|
|
58
|
+
modelId: string;
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Run a prompt with given values. Returns the LLM's text + telemetry.
|
|
62
|
+
*/
|
|
63
|
+
export declare function runPrompt({ operation, values, model, modelOptions, timeoutMs, onAssembled, userPrefix, }: RunPromptOptions): Promise<RunPromptResult>;
|
|
64
|
+
/** Strip a markdown ```yaml/```specly fence + leading prose from a model output. */
|
|
65
|
+
export declare function extractSpec(text: string): string;
|
|
66
|
+
//# sourceMappingURL=prompt-runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-runner.d.ts","sourceRoot":"","sources":["../../src/ai/prompt-runner.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAgB,KAAK,aAAa,EAAE,MAAM,IAAI,CAAC;AAEtD,OAAO,EAAgB,KAAK,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAe7E,6EAA6E;AAC7E,MAAM,WAAW,UAAU;IACzB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,MAAM,CAAC,EAAE;QACP,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,cAAc,CAAC,EAAE,MAAM,CAAC;QACxB,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,OAAO,CAAC,EAAE,MAAM,CAAC;KAClB,CAAC;IACF,IAAI,CAAC,EAAE;QACL,QAAQ,CAAC,EAAE,MAAM,CAAC;KACnB,CAAC;CACH;AAED,+DAA+D;AAC/D,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,UAAU,CA8BxD;AAED,0FAA0F;AAC1F,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAM3F;AAED,sDAAsD;AACtD,wBAAgB,cAAc,CAAC,MAAM,EAAE,UAAU,GAAG,MAAM,CAQzD;AAED,gFAAgF;AAChF,wBAAgB,YAAY,CAAC,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,GAAG,MAAM,CAGnG;AAED,MAAM,WAAW,oBAAqB,SAAQ,mBAAmB;IAC/D,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED;;;;;;GAMG;AACH,wBAAgB,aAAa,CAAC,EAAE,SAAuB,EAAE,GAAG,YAAY,EAAE,GAAE,oBAAyB,GAAG,aAAa,CAEpH;AAED,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,SAAS,CAAC,CAAC;IAC3C,KAAK,CAAC,EAAE,aAAa,CAAC;IACtB,YAAY,CAAC,EAAE,mBAAmB,CAAC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,CAAC,KAAK,EAAE;QAAE,MAAM,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,KAAK,IAAI,CAAC;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE;QAAE,KAAK,EAAE,MAAM,GAAG,IAAI,CAAC;QAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAAA;KAAE,CAAC;IACxD,WAAW,EAAE,MAAM,CAAC;IACpB,MAAM,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,EAC9B,SAAS,EACT,MAAM,EACN,KAAK,EACL,YAAiB,EACjB,SAAmB,EACnB,WAAW,EACX,UAAe,GAChB,EAAE,gBAAgB,GAAG,OAAO,CAAC,eAAe,CAAC,CAoC7C;AAED,oFAAoF;AACpF,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,CAIhD"}
|
|
@@ -0,0 +1,143 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Prompt runner — fills a prompt YAML's user.template with case variables,
|
|
3
|
+
* assembles the full system + user message pair, calls generateText through
|
|
4
|
+
* the active SpecVerse provider, returns the raw text + tokens + duration.
|
|
5
|
+
*
|
|
6
|
+
* Schema-path variables ({{aiSchemaPath}}, {{referenceSchemaPath}},
|
|
7
|
+
* {{referenceExamplePath}}) are auto-filled with absolute paths into
|
|
8
|
+
* @specverse/entities/schema/ — same convention the in-tree MCP prompts use.
|
|
9
|
+
*
|
|
10
|
+
* Originally lived in `specverse-demo-self/harness/lib/prompt-runner.mjs`;
|
|
11
|
+
* promoted into `@specverse/engines/ai` as part of TODO #21 phase 2 so the
|
|
12
|
+
* forthcoming `spv ai analyse` / `spv ai create` commands can call it directly.
|
|
13
|
+
*/
|
|
14
|
+
import { readFileSync, existsSync } from 'fs';
|
|
15
|
+
import { createRequire } from 'module';
|
|
16
|
+
import { dirname, join } from 'path';
|
|
17
|
+
import { generateText } from 'ai';
|
|
18
|
+
import yaml from 'js-yaml';
|
|
19
|
+
import { resolveModel } from './model-resolver.js';
|
|
20
|
+
const require = createRequire(import.meta.url);
|
|
21
|
+
function resolveEntitiesFile(rel) {
|
|
22
|
+
const pkg = require.resolve('@specverse/entities/package.json');
|
|
23
|
+
return join(dirname(pkg), rel);
|
|
24
|
+
}
|
|
25
|
+
const SCHEMA_VAR_PATHS = {
|
|
26
|
+
aiSchemaPath: resolveEntitiesFile('schema/SPECVERSE-SCHEMA-AI.yaml'),
|
|
27
|
+
referenceSchemaPath: resolveEntitiesFile('schema/MINIMAL-SYNTAX-REFERENCE.specly'),
|
|
28
|
+
referenceExamplePath: resolveEntitiesFile('schema/MINIMAL-SYNTAX-REFERENCE.specly'),
|
|
29
|
+
};
|
|
30
|
+
/** Resolve the canonical prompt YAML for a given operation. */
|
|
31
|
+
export function loadPrompt(operation) {
|
|
32
|
+
// Prompts moved from @specverse/engines/assets/prompts to
|
|
33
|
+
// @specverse/assets/prompts on 2026-04-25 (see specverse-self/docs/plans/
|
|
34
|
+
// 2026-04-25-CONTENT-PACKAGE-REFACTOR.md). Try assets first; fall back
|
|
35
|
+
// to engines for older installs.
|
|
36
|
+
const candidates = [];
|
|
37
|
+
try {
|
|
38
|
+
const assetsPkg = require.resolve('@specverse/assets/package.json');
|
|
39
|
+
candidates.push(join(dirname(assetsPkg), 'prompts/core/standard/default', `${operation}.prompt.yaml`));
|
|
40
|
+
}
|
|
41
|
+
catch {
|
|
42
|
+
/* @specverse/assets not installed — fall through */
|
|
43
|
+
}
|
|
44
|
+
try {
|
|
45
|
+
const enginesPkg = require.resolve('@specverse/engines/package.json');
|
|
46
|
+
candidates.push(join(dirname(enginesPkg), 'assets/prompts/core/standard/default', `${operation}.prompt.yaml`));
|
|
47
|
+
}
|
|
48
|
+
catch {
|
|
49
|
+
/* engines also not installed — defer to error below */
|
|
50
|
+
}
|
|
51
|
+
for (const p of candidates) {
|
|
52
|
+
if (existsSync(p))
|
|
53
|
+
return yaml.load(readFileSync(p, 'utf8'));
|
|
54
|
+
}
|
|
55
|
+
throw new Error(`prompt file not found for "${operation}". Tried:\n ${candidates.join('\n ')}\n` +
|
|
56
|
+
'Ensure @specverse/assets is installed (npm install @specverse/assets).');
|
|
57
|
+
}
|
|
58
|
+
/** Substitute {{var}} placeholders in `text` from `values` + auto-filled schema paths. */
|
|
59
|
+
export function substitute(text, values) {
|
|
60
|
+
return text.replace(/\{\{\s*([a-zA-Z_][a-zA-Z0-9_]*)\s*\}\}/g, (m, name) => {
|
|
61
|
+
if (name in values && values[name] !== undefined)
|
|
62
|
+
return values[name];
|
|
63
|
+
if (name in SCHEMA_VAR_PATHS)
|
|
64
|
+
return SCHEMA_VAR_PATHS[name];
|
|
65
|
+
return m;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/** Assemble the system message from a prompt YAML. */
|
|
69
|
+
export function assembleSystem(prompt) {
|
|
70
|
+
const sys = prompt?.system ?? {};
|
|
71
|
+
const parts = [];
|
|
72
|
+
if (sys.role)
|
|
73
|
+
parts.push(sys.role.trim());
|
|
74
|
+
if (sys.minimalContext)
|
|
75
|
+
parts.push(sys.minimalContext.trim());
|
|
76
|
+
if (sys.fullContext)
|
|
77
|
+
parts.push(sys.fullContext.trim());
|
|
78
|
+
if (sys.context)
|
|
79
|
+
parts.push(sys.context.trim()); // older shape support
|
|
80
|
+
return parts.filter(Boolean).join('\n\n');
|
|
81
|
+
}
|
|
82
|
+
/** Assemble the user message — substitute case variables into user.template. */
|
|
83
|
+
export function assembleUser(prompt, values) {
|
|
84
|
+
const tmpl = prompt?.user?.template ?? '';
|
|
85
|
+
return substitute(tmpl, values);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Build a single model instance for a whole run. Pass the returned model to
|
|
89
|
+
* every runPrompt call in the run so the claude-cli provider's session-resume
|
|
90
|
+
* (--session-id then --resume) actually fires across cases — first case pays
|
|
91
|
+
* the system-prompt cost, subsequent cases hit cache. ~75% input-token
|
|
92
|
+
* reduction on a typical 8-case run.
|
|
93
|
+
*/
|
|
94
|
+
export function buildRunModel({ timeoutMs = 15 * 60_000, ...modelOptions } = {}) {
|
|
95
|
+
return resolveModel({ ...modelOptions, timeout: timeoutMs });
|
|
96
|
+
}
|
|
97
|
+
/**
|
|
98
|
+
* Run a prompt with given values. Returns the LLM's text + telemetry.
|
|
99
|
+
*/
|
|
100
|
+
export async function runPrompt({ operation, values, model, modelOptions = {}, timeoutMs = 300_000, onAssembled, userPrefix = '', }) {
|
|
101
|
+
const prompt = loadPrompt(operation);
|
|
102
|
+
const system = assembleSystem(prompt);
|
|
103
|
+
const baseUser = assembleUser(prompt, values);
|
|
104
|
+
// userPrefix is an optional preamble (used for structural-prepass facts
|
|
105
|
+
// injection — kept separate from the canonical prompt template so the
|
|
106
|
+
// experiment is reversible by simply not passing it).
|
|
107
|
+
const user = userPrefix ? userPrefix + baseUser : baseUser;
|
|
108
|
+
// Hook for saving prompts before the LLM call (so we have artifacts on timeout).
|
|
109
|
+
if (typeof onAssembled === 'function')
|
|
110
|
+
onAssembled({ system, user });
|
|
111
|
+
const llm = model ?? resolveModel({ ...modelOptions, timeout: timeoutMs });
|
|
112
|
+
const t0 = Date.now();
|
|
113
|
+
const result = await generateText({
|
|
114
|
+
model: llm,
|
|
115
|
+
system,
|
|
116
|
+
prompt: user,
|
|
117
|
+
abortSignal: AbortSignal.timeout(timeoutMs),
|
|
118
|
+
providerOptions: {
|
|
119
|
+
anthropic: { cacheControl: { type: 'ephemeral' } },
|
|
120
|
+
},
|
|
121
|
+
});
|
|
122
|
+
const duration_ms = Date.now() - t0;
|
|
123
|
+
return {
|
|
124
|
+
text: result.text,
|
|
125
|
+
tokens: {
|
|
126
|
+
input: result.usage?.inputTokens?.total ?? null,
|
|
127
|
+
output: result.usage?.outputTokens?.total ?? null,
|
|
128
|
+
},
|
|
129
|
+
duration_ms,
|
|
130
|
+
system,
|
|
131
|
+
user,
|
|
132
|
+
providerId: llm.provider,
|
|
133
|
+
modelId: llm.modelId,
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
/** Strip a markdown ```yaml/```specly fence + leading prose from a model output. */
|
|
137
|
+
export function extractSpec(text) {
|
|
138
|
+
const fence = text.match(/```(?:yaml|specly|yml)?\n([\s\S]*?)```/);
|
|
139
|
+
if (fence)
|
|
140
|
+
return fence[1].trim();
|
|
141
|
+
return text.trim();
|
|
142
|
+
}
|
|
143
|
+
//# sourceMappingURL=prompt-runner.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-runner.js","sourceRoot":"","sources":["../../src/ai/prompt-runner.ts"],"names":[],"mappings":"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"}
|