tryassay 0.21.2 → 0.22.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/demo/.claude/.truth_last_prompt +1 -0
- package/demo/.claude/truth_status +1 -0
- package/demo/css/style.css +840 -0
- package/demo/index.html +78 -0
- package/demo/js/chat.js +535 -0
- package/demo/js/code-panel.js +206 -0
- package/demo/js/preview.js +456 -0
- package/demo/js/sse-client.js +600 -0
- package/demo/js/state.js +172 -0
- package/demo/js/timeline.js +80 -0
- package/dist/api/server.d.ts +3 -0
- package/dist/api/server.js +127 -20
- package/dist/api/server.js.map +1 -1
- package/dist/cli.js +11 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/assess.d.ts +2 -0
- package/dist/commands/assess.js +132 -164
- package/dist/commands/assess.js.map +1 -1
- package/dist/commands/demo.d.ts +5 -0
- package/dist/commands/demo.js +357 -0
- package/dist/commands/demo.js.map +1 -0
- package/dist/lib/__tests__/arithmetic-quick-test.d.ts +6 -0
- package/dist/lib/__tests__/arithmetic-quick-test.js +197 -0
- package/dist/lib/__tests__/arithmetic-quick-test.js.map +1 -0
- package/dist/lib/__tests__/arithmetic-real-llm-test.d.ts +13 -0
- package/dist/lib/__tests__/arithmetic-real-llm-test.js +284 -0
- package/dist/lib/__tests__/arithmetic-real-llm-test.js.map +1 -0
- package/dist/lib/__tests__/arithmetic-value-demo.d.ts +10 -0
- package/dist/lib/__tests__/arithmetic-value-demo.js +193 -0
- package/dist/lib/__tests__/arithmetic-value-demo.js.map +1 -0
- package/dist/lib/__tests__/flow-to-claims.test.d.ts +1 -0
- package/dist/lib/__tests__/flow-to-claims.test.js +91 -0
- package/dist/lib/__tests__/flow-to-claims.test.js.map +1 -0
- package/dist/lib/__tests__/formal-verifier-api-misuse.test.d.ts +9 -0
- package/dist/lib/__tests__/formal-verifier-api-misuse.test.js +391 -0
- package/dist/lib/__tests__/formal-verifier-api-misuse.test.js.map +1 -0
- package/dist/lib/__tests__/formal-verifier-arithmetic.test.d.ts +7 -0
- package/dist/lib/__tests__/formal-verifier-arithmetic.test.js +318 -0
- package/dist/lib/__tests__/formal-verifier-arithmetic.test.js.map +1 -0
- package/dist/lib/__tests__/intent-extractor.test.d.ts +1 -0
- package/dist/lib/__tests__/intent-extractor.test.js +97 -0
- package/dist/lib/__tests__/intent-extractor.test.js.map +1 -0
- package/dist/lib/__tests__/intent-reviewer.test.d.ts +1 -0
- package/dist/lib/__tests__/intent-reviewer.test.js +55 -0
- package/dist/lib/__tests__/intent-reviewer.test.js.map +1 -0
- package/dist/lib/__tests__/mr-gsm8k-benchmark.d.ts +11 -0
- package/dist/lib/__tests__/mr-gsm8k-benchmark.js +224 -0
- package/dist/lib/__tests__/mr-gsm8k-benchmark.js.map +1 -0
- package/dist/lib/anthropic.js +25 -33
- package/dist/lib/anthropic.js.map +1 -1
- package/dist/lib/assessment-reporter.js +9 -13
- package/dist/lib/assessment-reporter.js.map +1 -1
- package/dist/lib/claim-extractor.js +10 -19
- package/dist/lib/claim-extractor.js.map +1 -1
- package/dist/lib/code-verifier.js +16 -36
- package/dist/lib/code-verifier.js.map +1 -1
- package/dist/lib/constraint-engine.js +10 -19
- package/dist/lib/constraint-engine.js.map +1 -1
- package/dist/lib/formal-verifier.d.ts +1 -1
- package/dist/lib/formal-verifier.js +454 -0
- package/dist/lib/formal-verifier.js.map +1 -1
- package/dist/lib/guided-generator.js +19 -37
- package/dist/lib/guided-generator.js.map +1 -1
- package/dist/lib/intent-extractor.d.ts +47 -0
- package/dist/lib/intent-extractor.js +427 -0
- package/dist/lib/intent-extractor.js.map +1 -0
- package/dist/lib/intent-reviewer.d.ts +14 -0
- package/dist/lib/intent-reviewer.js +148 -0
- package/dist/lib/intent-reviewer.js.map +1 -0
- package/dist/lib/intent-types.d.ts +89 -0
- package/dist/lib/intent-types.js +5 -0
- package/dist/lib/intent-types.js.map +1 -0
- package/dist/lib/inventory-extractor.js +9 -22
- package/dist/lib/inventory-extractor.js.map +1 -1
- package/dist/lib/llm-provider.d.ts +23 -0
- package/dist/lib/llm-provider.js +130 -0
- package/dist/lib/llm-provider.js.map +1 -0
- package/dist/lib/remediator.js +20 -28
- package/dist/lib/remediator.js.map +1 -1
- package/dist/lib/requirements-generator.js +14 -19
- package/dist/lib/requirements-generator.js.map +1 -1
- package/dist/lib/spec-synthesizer.js +10 -19
- package/dist/lib/spec-synthesizer.js.map +1 -1
- package/dist/runtime/agents/planner-agent.d.ts +5 -2
- package/dist/runtime/agents/planner-agent.js +232 -1
- package/dist/runtime/agents/planner-agent.js.map +1 -1
- package/dist/runtime/app-create-orchestrator.d.ts +9 -1
- package/dist/runtime/app-create-orchestrator.js +265 -87
- package/dist/runtime/app-create-orchestrator.js.map +1 -1
- package/dist/runtime/check-catalog.js +5 -3
- package/dist/runtime/check-catalog.js.map +1 -1
- package/dist/runtime/check-definitions.d.ts +10 -0
- package/dist/runtime/check-definitions.js +52 -2
- package/dist/runtime/check-definitions.js.map +1 -1
- package/dist/runtime/composition-verifier.js +8 -12
- package/dist/runtime/composition-verifier.js.map +1 -1
- package/dist/runtime/gap-detector.js +8 -10
- package/dist/runtime/gap-detector.js.map +1 -1
- package/dist/runtime/input-validator.d.ts +7 -0
- package/dist/runtime/input-validator.js +162 -0
- package/dist/runtime/input-validator.js.map +1 -0
- package/dist/runtime/model-router.d.ts +10 -0
- package/dist/runtime/model-router.js +42 -0
- package/dist/runtime/model-router.js.map +1 -0
- package/dist/runtime/pattern-extractor.js +8 -10
- package/dist/runtime/pattern-extractor.js.map +1 -1
- package/dist/runtime/planner.js +11 -16
- package/dist/runtime/planner.js.map +1 -1
- package/dist/runtime/prompt-guard.d.ts +2 -0
- package/dist/runtime/prompt-guard.js +180 -0
- package/dist/runtime/prompt-guard.js.map +1 -0
- package/dist/runtime/prompt-safety-analyzer.js +8 -13
- package/dist/runtime/prompt-safety-analyzer.js.map +1 -1
- package/dist/runtime/reasoner.js +19 -33
- package/dist/runtime/reasoner.js.map +1 -1
- package/dist/runtime/rule-meta-verifier.js +9 -11
- package/dist/runtime/rule-meta-verifier.js.map +1 -1
- package/dist/runtime/safe-executor.d.ts +23 -0
- package/dist/runtime/safe-executor.js +151 -0
- package/dist/runtime/safe-executor.js.map +1 -0
- package/dist/runtime/specialized-agent.js +10 -14
- package/dist/runtime/specialized-agent.js.map +1 -1
- package/dist/runtime/strategy-library.js +8 -10
- package/dist/runtime/strategy-library.js.map +1 -1
- package/dist/runtime/supabase-experience-store.js.map +1 -1
- package/dist/runtime/supabase-provisioner.d.ts +35 -0
- package/dist/runtime/supabase-provisioner.js +192 -0
- package/dist/runtime/supabase-provisioner.js.map +1 -0
- package/dist/runtime/types.d.ts +116 -0
- package/dist/sdk/forward-verify.js +16 -33
- package/dist/sdk/forward-verify.js.map +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
export interface CodeReference {
|
|
2
|
+
file: string;
|
|
3
|
+
function?: string;
|
|
4
|
+
lineRange?: [number, number];
|
|
5
|
+
}
|
|
6
|
+
export interface DataAccess {
|
|
7
|
+
table: string;
|
|
8
|
+
operation: 'read' | 'write' | 'delete';
|
|
9
|
+
columns?: string[];
|
|
10
|
+
}
|
|
11
|
+
export interface FlowStep {
|
|
12
|
+
order: number;
|
|
13
|
+
action: string;
|
|
14
|
+
codeRef?: CodeReference;
|
|
15
|
+
dataAccess?: DataAccess;
|
|
16
|
+
}
|
|
17
|
+
export interface IntentFlow {
|
|
18
|
+
id: string;
|
|
19
|
+
name: string;
|
|
20
|
+
description: string;
|
|
21
|
+
actor: string;
|
|
22
|
+
trigger: string;
|
|
23
|
+
steps: FlowStep[];
|
|
24
|
+
successCriteria: string;
|
|
25
|
+
errorPaths: string[];
|
|
26
|
+
codePaths: CodeReference[];
|
|
27
|
+
}
|
|
28
|
+
export interface EntityField {
|
|
29
|
+
name: string;
|
|
30
|
+
type: string;
|
|
31
|
+
constraints: string[];
|
|
32
|
+
}
|
|
33
|
+
export interface EntityRelationship {
|
|
34
|
+
target: string;
|
|
35
|
+
type: 'one-to-one' | 'one-to-many' | 'many-to-many';
|
|
36
|
+
foreignKey?: string;
|
|
37
|
+
}
|
|
38
|
+
export interface DataEntity {
|
|
39
|
+
name: string;
|
|
40
|
+
source: string;
|
|
41
|
+
fields: EntityField[];
|
|
42
|
+
relationships: EntityRelationship[];
|
|
43
|
+
}
|
|
44
|
+
export interface AuthGuard {
|
|
45
|
+
pattern: string;
|
|
46
|
+
requiredRole?: string;
|
|
47
|
+
mechanism: string;
|
|
48
|
+
}
|
|
49
|
+
export interface AuthModel {
|
|
50
|
+
strategy: string;
|
|
51
|
+
roles: string[];
|
|
52
|
+
guards: AuthGuard[];
|
|
53
|
+
}
|
|
54
|
+
export interface FeatureGroup {
|
|
55
|
+
name: string;
|
|
56
|
+
flows: string[];
|
|
57
|
+
completeness: 'full' | 'partial' | 'stub';
|
|
58
|
+
}
|
|
59
|
+
export type IntentGapType = 'missing-flow' | 'dead-code' | 'unguarded-route' | 'orphaned-table' | 'incomplete-flow';
|
|
60
|
+
export interface IntentGap {
|
|
61
|
+
type: IntentGapType;
|
|
62
|
+
description: string;
|
|
63
|
+
evidence: string;
|
|
64
|
+
}
|
|
65
|
+
export interface IntentManifest {
|
|
66
|
+
version: 1;
|
|
67
|
+
extractedAt: string;
|
|
68
|
+
codebaseRoot: string;
|
|
69
|
+
frameworks: string[];
|
|
70
|
+
flows: IntentFlow[];
|
|
71
|
+
dataModel: DataEntity[];
|
|
72
|
+
authModel: AuthModel;
|
|
73
|
+
featureMap: FeatureGroup[];
|
|
74
|
+
gaps: IntentGap[];
|
|
75
|
+
confirmedBy?: string;
|
|
76
|
+
confirmedAt?: string;
|
|
77
|
+
}
|
|
78
|
+
export interface ManifestDelta {
|
|
79
|
+
addedFlows: IntentFlow[];
|
|
80
|
+
removedFlows: IntentFlow[];
|
|
81
|
+
changedFlows: Array<{
|
|
82
|
+
before: IntentFlow;
|
|
83
|
+
after: IntentFlow;
|
|
84
|
+
}>;
|
|
85
|
+
addedEntities: DataEntity[];
|
|
86
|
+
removedEntities: DataEntity[];
|
|
87
|
+
addedGaps: IntentGap[];
|
|
88
|
+
removedGaps: IntentGap[];
|
|
89
|
+
}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"intent-types.js","sourceRoot":"","sources":["../../src/lib/intent-types.ts"],"names":[],"mappings":"AAAA,mCAAmC;AACnC,qEAAqE;AACrE,iEAAiE"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MODEL } from './anthropic.js';
|
|
2
|
+
import { getProvider } from './llm-provider.js';
|
|
2
3
|
import { readFileContent } from './codebase-indexer.js';
|
|
3
4
|
const INVENTORY_SYSTEM_PROMPT = `You are a codebase analyst. Given a file tree and key file contents, identify ALL routes, database tables, and permission systems in the application.
|
|
4
5
|
|
|
@@ -182,7 +183,6 @@ function parseInventoryResponse(rawText) {
|
|
|
182
183
|
}
|
|
183
184
|
const MAX_FILE_CHARS = 3000;
|
|
184
185
|
export async function extractInventory(index, onProgress) {
|
|
185
|
-
const client = getClient();
|
|
186
186
|
// Select files to read for context
|
|
187
187
|
const filesToRead = selectFilesForContext(index);
|
|
188
188
|
onProgress?.(` Reading ${filesToRead.length} key files...`);
|
|
@@ -213,30 +213,17 @@ export async function extractInventory(index, onProgress) {
|
|
|
213
213
|
`KEY FILE CONTENTS:`,
|
|
214
214
|
fileContents,
|
|
215
215
|
].join('\n');
|
|
216
|
-
|
|
217
|
-
// Blocking requests can ETIMEDOUT when the API takes minutes to process
|
|
218
|
-
// 100K+ chars of input — streaming keeps the connection alive.
|
|
219
|
-
let rawText = '';
|
|
220
|
-
const stream = client.messages.stream({
|
|
216
|
+
const result = await getProvider().complete({
|
|
221
217
|
model: MODEL,
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
{
|
|
226
|
-
role: 'user',
|
|
227
|
-
content: userMessage,
|
|
228
|
-
},
|
|
229
|
-
],
|
|
218
|
+
maxTokens: 16_000,
|
|
219
|
+
systemPrompt: INVENTORY_SYSTEM_PROMPT,
|
|
220
|
+
userPrompt: userMessage,
|
|
230
221
|
});
|
|
231
|
-
|
|
232
|
-
rawText += text;
|
|
233
|
-
});
|
|
234
|
-
const response = await stream.finalMessage();
|
|
235
|
-
const inventory = parseInventoryResponse(rawText);
|
|
222
|
+
const inventory = parseInventoryResponse(result.content);
|
|
236
223
|
return {
|
|
237
224
|
inventory,
|
|
238
|
-
inputTokens:
|
|
239
|
-
outputTokens:
|
|
225
|
+
inputTokens: result.inputTokens ?? 0,
|
|
226
|
+
outputTokens: result.outputTokens ?? 0,
|
|
240
227
|
};
|
|
241
228
|
}
|
|
242
229
|
//# sourceMappingURL=inventory-extractor.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"inventory-extractor.js","sourceRoot":"","sources":["../../src/lib/inventory-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"inventory-extractor.js","sourceRoot":"","sources":["../../src/lib/inventory-extractor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AACvC,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,uBAAuB,CAAC;AASxD,MAAM,uBAAuB,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;uKAiDuI,CAAC;AAExK,8DAA8D;AAC9D,MAAM,eAAe,GAAG;IACtB,SAAS;IACT,SAAS;IACT,WAAW;IACX,WAAW;IACX,UAAU;IACV,cAAc;IACd,cAAc;IACd,YAAY;IACZ,YAAY;IACZ,YAAY;IACZ,YAAY;CACb,CAAC;AAEF;;;;GAIG;AACH,SAAS,qBAAqB,CAC5B,KAAoB,EACpB,QAAQ,GAAG,EAAE;IAEb,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAU,CAAC;IAEnC,8EAA8E;IAC9E,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QAChC,IACE,EAAE,CAAC,MAAM,KAAK,eAAe;YAC7B,EAAE,CAAC,MAAM,KAAK,gBAAgB;YAC9B,EAAE,CAAC,MAAM,KAAK,WAAW;YACzB,EAAE,CAAC,MAAM,KAAK,iBAAiB,EAC/B,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,KAAK,MAAM,QAAQ,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;YAClD,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;QACzB,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,MAAM,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IACpC,IAAI,MAAM,CAAC,MAAM,GAAG,QAAQ,EAAE,CAAC;QAC7B,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;IACnC,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC;AAED;;;GAGG;AACH,SAAS,sBAAsB,CAAC,OAAe;IAC7C,IAAI,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC;IAE9B,4BAA4B;IAC5B,IAAI,QAAQ,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,YAAY,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;QAC5C,IAAI,YAAY,KAAK,CAAC,CAAC,EAAE,CAAC;YACxB,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,YAAY,GAAG,CAAC,CAAC,CAAC;QAC9C,CAAC;IACH,CAAC;IAED,4BAA4B;IAC5B,MAAM,SAAS,GAAG,QAAQ,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC9C,IAAI,SAAS,KAAK,CAAC,CAAC,EAAE,CAAC;QACrB,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC;IAC1C,CAAC;IAED,QAAQ,GAAG,QAAQ,CAAC,IAAI,EAAE,CAAC;IAE3B,sDAAsD;IACtD,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,GAAG,CAAC,EAAE,CAAC;QAC5B,sCAAsC;QACtC,MAAM,cAAc,GAAG,QAAQ,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;QACjD,IAAI,cAAc,KAAK,CAAC,CAAC,EAAE,CAAC;YAC1B,QAAQ,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,GAAG,CAAC,CAAC,CAAC;YAEjD,mDAAmD;YACnD,IAAI,UAAU,GAAG,CAAC,CAAC;YACnB,IAAI,YAAY,GAAG,CAAC,CAAC;YACrB,KAAK,MAAM,EAAE,IAAI,QAAQ,EAAE,CAAC;gBAC1B,IAAI,EAAE,KAAK,GAAG;oBAAE,UAAU,EAAE,CAAC;gBAC7B,IAAI,EAAE,KAAK,GAAG;oBAAE,UAAU,EAAE,CAAC;gBAC7B,IAAI,EAAE,KAAK,GAAG;oBAAE,YAAY,EAAE,CAAC;gBAC/B,IAAI,EAAE,KAAK,GAAG;oBAAE,YAAY,EAAE,CAAC;YACjC,CAAC;YAED,sCAAsC;YACtC,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,YAAY,EAAE,CAAC,EAAE;gBAAE,MAAM,IAAI,GAAG,CAAC;YACrD,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,EAAE,CAAC,EAAE;gBAAE,MAAM,IAAI,GAAG,CAAC;YACnD,QAAQ,IAAI,MAAM,CAAC;QACrB,CAAC;IACH,CAAC;IAED,IAAI,MAAe,CAAC;IACpB,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,MAAM,IAAI,KAAK,CACb,+CAA+C;YAC/C,oBAAoB,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAC7C,CAAC;IACJ,CAAC;IAED,MAAM,GAAG,GAAG,MAAiC,CAAC;IAE9C,gCAAgC;IAChC,MAAM,MAAM,GAAyB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAC5D,CAAC,CAAE,GAAG,CAAC,MAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1B,SAAS,EAAE,MAAM,CAAC,CAAC,CAAC,SAAS,IAAI,EAAE,CAAC;YACpC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;YACrC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS;YAC5C,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;YAC/D,MAAM,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SACnE,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;IAEP,gCAAgC;IAChC,MAAM,MAAM,GAAyB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC;QAC5D,CAAC,CAAE,GAAG,CAAC,MAAoC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACpD,IAAI,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,IAAI,EAAE,CAAC;YAC1B,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,SAAS,CAAC;YACrC,OAAO,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YAC9D,aAAa,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;SACjF,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;IAEP,qCAAqC;IACrC,MAAM,WAAW,GAA8B,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC;QAC3E,CAAC,CAAE,GAAG,CAAC,WAAyC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACzD,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,MAAM,IAAI,EAAE,CAAC;YAC9B,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YACxD,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE;YACxD,SAAS,EAAE,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,SAAS;SAC5E,CAAC,CAAC;QACL,CAAC,CAAC,EAAE,CAAC;IAEP,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC;AACzC,CAAC;AAED,MAAM,cAAc,GAAG,IAAI,CAAC;AAE5B,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACpC,KAAoB,EACpB,UAAkC;IAElC,mCAAmC;IACnC,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IACjD,UAAU,EAAE,CAAC,kBAAkB,WAAW,CAAC,MAAM,eAAe,CAAC,CAAC;IAElE,iCAAiC;IACjC,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,IAAI,SAAS,GAAG,CAAC,CAAC;IAClB,KAAK,MAAM,QAAQ,IAAI,WAAW,EAAE,CAAC;QACnC,MAAM,OAAO,GAAG,MAAM,eAAe,CAAC,KAAK,CAAC,QAAQ,EAAE,QAAQ,CAAC,CAAC;QAChE,IAAI,OAAO,EAAE,CAAC;YACZ,MAAM,SAAS,GACb,OAAO,CAAC,MAAM,GAAG,cAAc;gBAC7B,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,cAAc,CAAC,GAAG,mBAAmB;gBACxD,CAAC,CAAC,OAAO,CAAC;YACd,YAAY,IAAI,eAAe,QAAQ,SAAS,SAAS,IAAI,CAAC;YAC9D,SAAS,EAAE,CAAC;QACd,CAAC;IACH,CAAC;IAED,UAAU,EAAE,CAAC,kBAAkB,SAAS,8CAA8C,CAAC,CAAC;IAExF,2DAA2D;IAC3D,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEzD,MAAM,WAAW,GAAG;QAClB,0GAA0G;QAC1G,EAAE;QACF,uBAAuB,KAAK,CAAC,UAAU,gBAAgB;QACvD,OAAO;QACP,EAAE;QACF,wBAAwB,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,EAAE;QAClE,EAAE;QACF,oBAAoB;QACpB,YAAY;KACb,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IAEb,MAAM,MAAM,GAAG,MAAM,WAAW,EAAE,CAAC,QAAQ,CAAC;QAC1C,KAAK,EAAE,KAAK;QACZ,SAAS,EAAE,MAAM;QACjB,YAAY,EAAE,uBAAuB;QACrC,UAAU,EAAE,WAAW;KACxB,CAAC,CAAC;IAEH,MAAM,SAAS,GAAG,sBAAsB,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IAEzD,OAAO;QACL,SAAS;QACT,WAAW,EAAE,MAAM,CAAC,WAAW,IAAI,CAAC;QACpC,YAAY,EAAE,MAAM,CAAC,YAAY,IAAI,CAAC;KACvC,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import type { LLMProvider, LLMResult, LLMCompletionOptions, LLMProviderType } from '../runtime/types.js';
|
|
2
|
+
export declare class AnthropicApiProvider implements LLMProvider {
|
|
3
|
+
readonly type: LLMProviderType;
|
|
4
|
+
private readonly apiKey;
|
|
5
|
+
private readonly timeout;
|
|
6
|
+
constructor(apiKey?: string, timeout?: number);
|
|
7
|
+
complete(opts: LLMCompletionOptions): Promise<LLMResult>;
|
|
8
|
+
}
|
|
9
|
+
export declare class ClaudeCliProvider implements LLMProvider {
|
|
10
|
+
readonly type: LLMProviderType;
|
|
11
|
+
complete(opts: LLMCompletionOptions): Promise<LLMResult>;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Get the configured LLM provider.
|
|
15
|
+
*
|
|
16
|
+
* Toggle: ASSAY_LLM_PROVIDER=api|cli
|
|
17
|
+
* Default: auto-detect (API key present → api, else → cli)
|
|
18
|
+
*/
|
|
19
|
+
export declare function getProvider(): LLMProvider;
|
|
20
|
+
/**
|
|
21
|
+
* Reset the cached provider. Useful for testing or env changes.
|
|
22
|
+
*/
|
|
23
|
+
export declare function resetProvider(): void;
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
// ============================================================
|
|
2
|
+
// LLM Provider — Abstraction over Anthropic API and Claude CLI
|
|
3
|
+
// Toggle via ASSAY_LLM_PROVIDER env var (api|cli|auto).
|
|
4
|
+
// ============================================================
|
|
5
|
+
import Anthropic from '@anthropic-ai/sdk';
|
|
6
|
+
import { safeExecWithStdin } from '../runtime/safe-executor.js';
|
|
7
|
+
// ── Anthropic API Provider ───────────────────────────────────
|
|
8
|
+
export class AnthropicApiProvider {
|
|
9
|
+
type = 'api';
|
|
10
|
+
apiKey;
|
|
11
|
+
timeout;
|
|
12
|
+
constructor(apiKey, timeout) {
|
|
13
|
+
const key = apiKey ?? process.env.ANTHROPIC_API_KEY;
|
|
14
|
+
if (!key) {
|
|
15
|
+
throw new Error('ANTHROPIC_API_KEY environment variable is not set.\n' +
|
|
16
|
+
'Export it before running: export ANTHROPIC_API_KEY=sk-ant-...\n' +
|
|
17
|
+
'Or set ASSAY_LLM_PROVIDER=cli to use your Claude subscription instead.');
|
|
18
|
+
}
|
|
19
|
+
this.apiKey = key;
|
|
20
|
+
this.timeout = timeout ?? 15 * 60 * 1000;
|
|
21
|
+
}
|
|
22
|
+
async complete(opts) {
|
|
23
|
+
const start = Date.now();
|
|
24
|
+
const client = new Anthropic({ apiKey: this.apiKey, timeout: this.timeout });
|
|
25
|
+
let content = '';
|
|
26
|
+
const stream = client.messages.stream({
|
|
27
|
+
model: opts.model,
|
|
28
|
+
max_tokens: opts.maxTokens ?? 16_000,
|
|
29
|
+
system: opts.systemPrompt,
|
|
30
|
+
messages: [{ role: 'user', content: opts.userPrompt }],
|
|
31
|
+
...(opts.temperature !== undefined && { temperature: opts.temperature }),
|
|
32
|
+
});
|
|
33
|
+
stream.on('text', (text) => {
|
|
34
|
+
content += text;
|
|
35
|
+
});
|
|
36
|
+
const finalMessage = await stream.finalMessage();
|
|
37
|
+
return {
|
|
38
|
+
content,
|
|
39
|
+
inputTokens: finalMessage.usage.input_tokens,
|
|
40
|
+
outputTokens: finalMessage.usage.output_tokens,
|
|
41
|
+
provider: 'api',
|
|
42
|
+
durationMs: Date.now() - start,
|
|
43
|
+
};
|
|
44
|
+
}
|
|
45
|
+
}
|
|
46
|
+
// ── Claude CLI Provider ──────────────────────────────────────
|
|
47
|
+
export class ClaudeCliProvider {
|
|
48
|
+
type = 'cli';
|
|
49
|
+
async complete(opts) {
|
|
50
|
+
const start = Date.now();
|
|
51
|
+
// Pipe user prompt via stdin to avoid OS ARG_MAX limits on large prompts.
|
|
52
|
+
// The claude CLI reads piped stdin as the prompt in non-interactive mode.
|
|
53
|
+
const result = await safeExecWithStdin('claude', [
|
|
54
|
+
'-p',
|
|
55
|
+
'--output-format', 'json',
|
|
56
|
+
'--model', opts.model,
|
|
57
|
+
'--max-turns', '1',
|
|
58
|
+
'--tools', '',
|
|
59
|
+
'--no-session-persistence',
|
|
60
|
+
'--system-prompt', opts.systemPrompt,
|
|
61
|
+
], opts.userPrompt, {
|
|
62
|
+
timeout: 15 * 60 * 1000, // 15 min to match API timeout
|
|
63
|
+
// Unset CLAUDECODE to allow spawning from within Claude Code sessions
|
|
64
|
+
env: { ...process.env, CLAUDECODE: '' },
|
|
65
|
+
});
|
|
66
|
+
if (result.exitCode !== 0) {
|
|
67
|
+
throw new Error(`claude CLI failed (exit ${result.exitCode}): ${result.stderr || result.stdout}`);
|
|
68
|
+
}
|
|
69
|
+
// Parse JSON output — claude --output-format json returns structured response
|
|
70
|
+
let content;
|
|
71
|
+
let inputTokens = null;
|
|
72
|
+
let outputTokens = null;
|
|
73
|
+
try {
|
|
74
|
+
const parsed = JSON.parse(result.stdout);
|
|
75
|
+
// The JSON format has a "result" field with the text content
|
|
76
|
+
content = parsed.result ?? parsed.content ?? result.stdout;
|
|
77
|
+
if (parsed.usage) {
|
|
78
|
+
inputTokens = parsed.usage.input_tokens ?? null;
|
|
79
|
+
outputTokens = parsed.usage.output_tokens ?? null;
|
|
80
|
+
}
|
|
81
|
+
}
|
|
82
|
+
catch {
|
|
83
|
+
// If JSON parsing fails, treat the entire stdout as content
|
|
84
|
+
content = result.stdout;
|
|
85
|
+
}
|
|
86
|
+
return {
|
|
87
|
+
content,
|
|
88
|
+
inputTokens,
|
|
89
|
+
outputTokens,
|
|
90
|
+
provider: 'cli',
|
|
91
|
+
durationMs: Date.now() - start,
|
|
92
|
+
};
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// ── Factory ──────────────────────────────────────────────────
|
|
96
|
+
let cachedProvider = null;
|
|
97
|
+
/**
|
|
98
|
+
* Get the configured LLM provider.
|
|
99
|
+
*
|
|
100
|
+
* Toggle: ASSAY_LLM_PROVIDER=api|cli
|
|
101
|
+
* Default: auto-detect (API key present → api, else → cli)
|
|
102
|
+
*/
|
|
103
|
+
export function getProvider() {
|
|
104
|
+
if (cachedProvider)
|
|
105
|
+
return cachedProvider;
|
|
106
|
+
const explicit = process.env.ASSAY_LLM_PROVIDER;
|
|
107
|
+
if (explicit === 'cli') {
|
|
108
|
+
cachedProvider = new ClaudeCliProvider();
|
|
109
|
+
}
|
|
110
|
+
else if (explicit === 'api') {
|
|
111
|
+
cachedProvider = new AnthropicApiProvider();
|
|
112
|
+
}
|
|
113
|
+
else {
|
|
114
|
+
// Auto-detect: use API if key is available, otherwise CLI
|
|
115
|
+
if (process.env.ANTHROPIC_API_KEY) {
|
|
116
|
+
cachedProvider = new AnthropicApiProvider();
|
|
117
|
+
}
|
|
118
|
+
else {
|
|
119
|
+
cachedProvider = new ClaudeCliProvider();
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
return cachedProvider;
|
|
123
|
+
}
|
|
124
|
+
/**
|
|
125
|
+
* Reset the cached provider. Useful for testing or env changes.
|
|
126
|
+
*/
|
|
127
|
+
export function resetProvider() {
|
|
128
|
+
cachedProvider = null;
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=llm-provider.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-provider.js","sourceRoot":"","sources":["../../src/lib/llm-provider.ts"],"names":[],"mappings":"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"}
|
package/dist/lib/remediator.js
CHANGED
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MODEL } from './anthropic.js';
|
|
2
|
+
import { getProvider } from './llm-provider.js';
|
|
2
3
|
import { readFileContent } from './codebase-indexer.js';
|
|
3
4
|
const VALID_ACTIONS = ['add', 'modify', 'remove', 'configure'];
|
|
4
5
|
const VALID_EFFORTS = ['trivial', 'small', 'medium', 'large'];
|
|
@@ -63,7 +64,6 @@ function parseRemediationResponse(rawText) {
|
|
|
63
64
|
}
|
|
64
65
|
const BATCH_SIZE = 15;
|
|
65
66
|
export async function generateRemediationTasks(failedVerifications, partialVerifications, claims, index, onProgress) {
|
|
66
|
-
const client = getClient();
|
|
67
67
|
const claimMap = new Map(claims.map((c) => [c.id, c]));
|
|
68
68
|
const tasks = [];
|
|
69
69
|
let totalInputTokens = 0;
|
|
@@ -130,34 +130,26 @@ export async function generateRemediationTasks(failedVerifications, partialVerif
|
|
|
130
130
|
})
|
|
131
131
|
.join('\n\n');
|
|
132
132
|
onProgress?.(`${group.label} batch ${batchNum}/${totalBatches}: generating remediation tasks...`);
|
|
133
|
-
const response = await
|
|
133
|
+
const response = await getProvider().complete({
|
|
134
134
|
model: MODEL,
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
'Relevant source files:',
|
|
150
|
-
evidenceContext,
|
|
151
|
-
].join('\n'),
|
|
152
|
-
},
|
|
153
|
-
],
|
|
135
|
+
maxTokens: 8_000,
|
|
136
|
+
systemPrompt: REMEDIATION_SYSTEM,
|
|
137
|
+
userPrompt: [
|
|
138
|
+
group.emphasis,
|
|
139
|
+
'',
|
|
140
|
+
'Claims requiring remediation:',
|
|
141
|
+
claimList,
|
|
142
|
+
'',
|
|
143
|
+
'Codebase file tree:',
|
|
144
|
+
treeStr,
|
|
145
|
+
'',
|
|
146
|
+
'Relevant source files:',
|
|
147
|
+
evidenceContext,
|
|
148
|
+
].join('\n'),
|
|
154
149
|
});
|
|
155
|
-
totalInputTokens += response.
|
|
156
|
-
totalOutputTokens += response.
|
|
157
|
-
const responseText = response.content
|
|
158
|
-
.filter((b) => b.type === 'text')
|
|
159
|
-
.map((b) => b.text)
|
|
160
|
-
.join('');
|
|
150
|
+
totalInputTokens += response.inputTokens ?? 0;
|
|
151
|
+
totalOutputTokens += response.outputTokens ?? 0;
|
|
152
|
+
const responseText = response.content;
|
|
161
153
|
try {
|
|
162
154
|
const rawTasks = parseRemediationResponse(responseText);
|
|
163
155
|
for (const raw of rawTasks) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"remediator.js","sourceRoot":"","sources":["../../src/lib/remediator.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"remediator.js","sourceRoot":"","sources":["../../src/lib/remediator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MODEL } from './anthropic.js';
|
|
2
|
+
import { getProvider } from './llm-provider.js';
|
|
2
3
|
import { readFileContent } from './codebase-indexer.js';
|
|
3
4
|
import { dirname, resolve } from 'node:path';
|
|
4
5
|
/**
|
|
@@ -167,6 +168,11 @@ function parseRequirementResponse(rawText) {
|
|
|
167
168
|
jsonText = jsonText.slice(0, lastFence);
|
|
168
169
|
}
|
|
169
170
|
jsonText = jsonText.trim();
|
|
171
|
+
// Strip any preamble text before the first JSON object
|
|
172
|
+
const firstBrace = jsonText.indexOf('{');
|
|
173
|
+
if (firstBrace > 0) {
|
|
174
|
+
jsonText = jsonText.slice(firstBrace);
|
|
175
|
+
}
|
|
170
176
|
// Handle truncation: close unclosed structures
|
|
171
177
|
if (!jsonText.endsWith('}')) {
|
|
172
178
|
const lastCloseBrace = jsonText.lastIndexOf('}');
|
|
@@ -218,7 +224,6 @@ function parseRequirementResponse(rawText) {
|
|
|
218
224
|
* produce a RouteRequirement with behaviors and scaffolding flags.
|
|
219
225
|
*/
|
|
220
226
|
export async function generateRequirement(route, index, onProgress) {
|
|
221
|
-
const client = getClient();
|
|
222
227
|
// Read the main component file
|
|
223
228
|
onProgress?.(` Reading component: ${route.component}`);
|
|
224
229
|
const componentSource = await readFileContent(index.rootPath, route.component);
|
|
@@ -275,23 +280,13 @@ export async function generateRequirement(route, index, onProgress) {
|
|
|
275
280
|
.filter(Boolean)
|
|
276
281
|
.join('\n');
|
|
277
282
|
onProgress?.(` Sending to Claude for requirement generation...`);
|
|
278
|
-
|
|
279
|
-
const reqStream = client.messages.stream({
|
|
283
|
+
const result = await getProvider().complete({
|
|
280
284
|
model: MODEL,
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
{
|
|
285
|
-
role: 'user',
|
|
286
|
-
content: userMessage,
|
|
287
|
-
},
|
|
288
|
-
],
|
|
289
|
-
});
|
|
290
|
-
reqStream.on('text', (text) => {
|
|
291
|
-
rawText += text;
|
|
285
|
+
maxTokens: 4_000,
|
|
286
|
+
systemPrompt: REQUIREMENT_SYSTEM_PROMPT,
|
|
287
|
+
userPrompt: userMessage,
|
|
292
288
|
});
|
|
293
|
-
const
|
|
294
|
-
const parsed = parseRequirementResponse(rawText);
|
|
289
|
+
const parsed = parseRequirementResponse(result.content);
|
|
295
290
|
// Merge Claude's findings with inventory data.
|
|
296
291
|
// Claude may discover additional tables/roles beyond what inventory found.
|
|
297
292
|
const mergedTables = Array.from(new Set([...(route.tables ?? []), ...parsed.tables]));
|
|
@@ -309,8 +304,8 @@ export async function generateRequirement(route, index, onProgress) {
|
|
|
309
304
|
};
|
|
310
305
|
return {
|
|
311
306
|
requirement,
|
|
312
|
-
inputTokens:
|
|
313
|
-
outputTokens:
|
|
307
|
+
inputTokens: result.inputTokens ?? 0,
|
|
308
|
+
outputTokens: result.outputTokens ?? 0,
|
|
314
309
|
};
|
|
315
310
|
}
|
|
316
311
|
//# sourceMappingURL=requirements-generator.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requirements-generator.js","sourceRoot":"","sources":["../../src/lib/requirements-generator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"requirements-generator.js","sourceRoot":"","sources":["../../src/lib/requirements-generator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { MODEL } from './anthropic.js';
|
|
2
|
+
import { getProvider } from './llm-provider.js';
|
|
2
3
|
const SYNTHESIS_SYSTEM_PROMPT = `You are a formal specification synthesizer. Given a coding task description and target programming language, you generate a comprehensive set of formal specifications that any correct implementation MUST satisfy.
|
|
3
4
|
|
|
4
5
|
SYNTHESIS RULES:
|
|
@@ -63,24 +64,14 @@ function validateSpec(raw, index) {
|
|
|
63
64
|
};
|
|
64
65
|
}
|
|
65
66
|
export async function synthesizeSpecs(task, language, onProgress) {
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
const stream = client.messages.stream({
|
|
67
|
+
onProgress?.('Sending task to Claude for spec synthesis...');
|
|
68
|
+
const result = await getProvider().complete({
|
|
69
69
|
model: MODEL,
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
{
|
|
74
|
-
role: 'user',
|
|
75
|
-
content: `Generate formal specifications for the following coding task.\n\nLanguage: ${language}\n\nTask:\n${task}`,
|
|
76
|
-
},
|
|
77
|
-
],
|
|
70
|
+
maxTokens: 16_000,
|
|
71
|
+
systemPrompt: SYNTHESIS_SYSTEM_PROMPT,
|
|
72
|
+
userPrompt: `Generate formal specifications for the following coding task.\n\nLanguage: ${language}\n\nTask:\n${task}`,
|
|
78
73
|
});
|
|
79
|
-
|
|
80
|
-
stream.on('text', (text) => {
|
|
81
|
-
rawText += text;
|
|
82
|
-
});
|
|
83
|
-
const finalMessage = await stream.finalMessage();
|
|
74
|
+
const rawText = result.content;
|
|
84
75
|
onProgress?.('Parsing synthesis results...');
|
|
85
76
|
// Strip markdown code fences if present
|
|
86
77
|
let jsonText = rawText.trim();
|
|
@@ -129,8 +120,8 @@ export async function synthesizeSpecs(task, language, onProgress) {
|
|
|
129
120
|
specs,
|
|
130
121
|
totalSpecs: specs.length,
|
|
131
122
|
synthesizedAt: new Date().toISOString(),
|
|
132
|
-
inputTokens:
|
|
133
|
-
outputTokens:
|
|
123
|
+
inputTokens: result.inputTokens ?? 0,
|
|
124
|
+
outputTokens: result.outputTokens ?? 0,
|
|
134
125
|
};
|
|
135
126
|
}
|
|
136
127
|
//# sourceMappingURL=spec-synthesizer.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"spec-synthesizer.js","sourceRoot":"","sources":["../../src/lib/spec-synthesizer.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"spec-synthesizer.js","sourceRoot":"","sources":["../../src/lib/spec-synthesizer.ts"],"names":[],"mappings":"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"}
|