@hongmaple0820/scale-engine 0.48.0 → 0.49.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/README.en.md +2 -2
- package/README.md +2 -2
- package/dist/agents/evidenceDiscipline.d.ts +7 -0
- package/dist/agents/evidenceDiscipline.js +21 -0
- package/dist/agents/evidenceDiscipline.js.map +1 -0
- package/dist/agents/profiles.js +8 -1
- package/dist/agents/profiles.js.map +1 -1
- package/dist/agents/types.d.ts +1 -0
- package/dist/artifact/types.d.ts +59 -0
- package/dist/artifact/types.js.map +1 -1
- package/dist/cli/cortexCommands.d.ts +36 -0
- package/dist/cli/cortexCommands.js +76 -4
- package/dist/cli/cortexCommands.js.map +1 -1
- package/dist/cli/evalCommands.js +12 -1
- package/dist/cli/evalCommands.js.map +1 -1
- package/dist/cli/phaseCommands.d.ts +53 -1
- package/dist/cli/phaseCommands.js +317 -22
- package/dist/cli/phaseCommands.js.map +1 -1
- package/dist/cortex/InstinctStore.d.ts +32 -1
- package/dist/cortex/InstinctStore.js +235 -42
- package/dist/cortex/InstinctStore.js.map +1 -1
- package/dist/cortex/InstinctValidation.d.ts +9 -0
- package/dist/cortex/InstinctValidation.js +55 -0
- package/dist/cortex/InstinctValidation.js.map +1 -0
- package/dist/cortex/SessionInjector.js +13 -6
- package/dist/cortex/SessionInjector.js.map +1 -1
- package/dist/eval/BenchmarkPublisher.d.ts +2 -0
- package/dist/eval/BenchmarkPublisher.js +43 -0
- package/dist/eval/BenchmarkPublisher.js.map +1 -1
- package/dist/guardrails/ast/confirmers.d.ts +18 -0
- package/dist/guardrails/ast/confirmers.js +69 -0
- package/dist/guardrails/ast/confirmers.js.map +1 -0
- package/dist/guardrails/ast/parse.d.ts +20 -0
- package/dist/guardrails/ast/parse.js +51 -0
- package/dist/guardrails/ast/parse.js.map +1 -0
- package/dist/output/HTMLDocumentRenderer.d.ts +9 -0
- package/dist/output/HTMLDocumentRenderer.js +19 -0
- package/dist/output/HTMLDocumentRenderer.js.map +1 -1
- package/dist/review/FreshContextVerifier.d.ts +35 -0
- package/dist/review/FreshContextVerifier.js +120 -0
- package/dist/review/FreshContextVerifier.js.map +1 -0
- package/dist/review/JsonLlmClient.d.ts +37 -0
- package/dist/review/JsonLlmClient.js +94 -0
- package/dist/review/JsonLlmClient.js.map +1 -0
- package/dist/review/LlmJudge.d.ts +61 -0
- package/dist/review/LlmJudge.js +167 -0
- package/dist/review/LlmJudge.js.map +1 -0
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/dist/workflow/BoundaryEnforcement.d.ts +60 -0
- package/dist/workflow/BoundaryEnforcement.js +182 -0
- package/dist/workflow/BoundaryEnforcement.js.map +1 -0
- package/dist/workflow/EngineeringStandards.js +19 -9
- package/dist/workflow/EngineeringStandards.js.map +1 -1
- package/dist/workflow/GateCatalog.js +12 -2
- package/dist/workflow/GateCatalog.js.map +1 -1
- package/dist/workflow/ProfileEnforcement.d.ts +7 -0
- package/dist/workflow/ProfileEnforcement.js +12 -0
- package/dist/workflow/ProfileEnforcement.js.map +1 -0
- package/dist/workflow/ReviewStore.d.ts +10 -0
- package/dist/workflow/ReviewStore.js.map +1 -1
- package/dist/workflow/SurfaceCoverage.d.ts +19 -0
- package/dist/workflow/SurfaceCoverage.js +57 -0
- package/dist/workflow/SurfaceCoverage.js.map +1 -0
- package/dist/workflow/gates/EnhancedGates.js +2 -0
- package/dist/workflow/gates/EnhancedGates.js.map +1 -1
- package/dist/workflow/gates/TestIntegrityGate.d.ts +51 -0
- package/dist/workflow/gates/TestIntegrityGate.js +175 -0
- package/dist/workflow/gates/TestIntegrityGate.js.map +1 -0
- package/dist/workflow/types.d.ts +1 -1
- package/docs/guides/DEVELOPMENT_WORKFLOW.md +28 -0
- package/docs/workflow/E2E_EXAMPLE.md +133 -0
- package/docs/workflow/README.md +6 -0
- package/docs/workflow/TEMPLATE_GUIDE.md +162 -0
- package/docs/workflow/templates/plan.md +26 -0
- package/docs/workflow/templates/spec.md +28 -0
- package/package.json +2 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface AstConfirmer {
|
|
2
|
+
/** A real `eval(...)` call or `Function(...)` / `new Function(...)` construction starts on this line. */
|
|
3
|
+
hasUnsafeCodeExecution(line: number): boolean;
|
|
4
|
+
/** A `@ts-ignore` / `@ts-nocheck` directive appears in an actual comment on this line. */
|
|
5
|
+
hasTsIgnore(line: number): boolean;
|
|
6
|
+
/** A real `any` type annotation (TSAnyKeyword) appears on this line. */
|
|
7
|
+
hasAnyType(line: number): boolean;
|
|
8
|
+
/** An empty (or comment-only) catch block starts on this line. */
|
|
9
|
+
hasEmptyCatch(line: number): boolean;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* Build a confirmer for one source file. Parses once and pre-collects, per line,
|
|
13
|
+
* the set of lines carrying each construct. Returns null when parsing fails so
|
|
14
|
+
* the caller can fall back to the regex result.
|
|
15
|
+
*/
|
|
16
|
+
export declare function createAstConfirmer(code: string, options?: {
|
|
17
|
+
jsx?: boolean;
|
|
18
|
+
}): AstConfirmer | null;
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
// SCALE Engine — AST confirmers (P1.1)
|
|
2
|
+
// Each confirmer turns a regex pre-filter hit (a 1-based line number) into a
|
|
3
|
+
// precise yes/no by matching the real AST node, so occurrences inside string
|
|
4
|
+
// literals or comments no longer produce false positives.
|
|
5
|
+
//
|
|
6
|
+
// Architecture (decision B1): AST only *narrows* regex results — it never adds
|
|
7
|
+
// findings the regex did not already flag. When the file cannot be parsed the
|
|
8
|
+
// caller falls back to the raw regex result (fail open).
|
|
9
|
+
import { parseSource, walk } from './parse.js';
|
|
10
|
+
function identifierName(node) {
|
|
11
|
+
return node && node.type === 'Identifier' ? node.name : undefined;
|
|
12
|
+
}
|
|
13
|
+
/**
|
|
14
|
+
* Build a confirmer for one source file. Parses once and pre-collects, per line,
|
|
15
|
+
* the set of lines carrying each construct. Returns null when parsing fails so
|
|
16
|
+
* the caller can fall back to the regex result.
|
|
17
|
+
*/
|
|
18
|
+
export function createAstConfirmer(code, options = {}) {
|
|
19
|
+
const parsed = parseSource(code, options);
|
|
20
|
+
if (!parsed)
|
|
21
|
+
return null;
|
|
22
|
+
const index = {
|
|
23
|
+
unsafeExec: new Set(),
|
|
24
|
+
anyType: new Set(),
|
|
25
|
+
emptyCatch: new Set(),
|
|
26
|
+
tsIgnore: new Set(),
|
|
27
|
+
};
|
|
28
|
+
walk(parsed.program, node => {
|
|
29
|
+
switch (node.type) {
|
|
30
|
+
// Mirror the regex pre-filter exactly (`eval(` | `new Function(`): the
|
|
31
|
+
// confirmer must not be broader than the regex, otherwise it carries
|
|
32
|
+
// dead branches that can never fire (AST is only consulted on a regex
|
|
33
|
+
// hit). Bare `Function(...)` calls are intentionally a follow-up — adding
|
|
34
|
+
// them requires widening the regex too, which is a detection-scope change.
|
|
35
|
+
case 'CallExpression':
|
|
36
|
+
if (identifierName(node.callee) === 'eval') {
|
|
37
|
+
index.unsafeExec.add(node.callee.loc.start.line);
|
|
38
|
+
}
|
|
39
|
+
break;
|
|
40
|
+
case 'NewExpression':
|
|
41
|
+
if (identifierName(node.callee) === 'Function') {
|
|
42
|
+
index.unsafeExec.add(node.callee.loc.start.line);
|
|
43
|
+
}
|
|
44
|
+
break;
|
|
45
|
+
case 'TSAnyKeyword':
|
|
46
|
+
index.anyType.add(node.loc.start.line);
|
|
47
|
+
break;
|
|
48
|
+
case 'CatchClause':
|
|
49
|
+
// body is a BlockStatement; comment-only blocks have zero statements.
|
|
50
|
+
if (node.body.body.length === 0)
|
|
51
|
+
index.emptyCatch.add(node.loc.start.line);
|
|
52
|
+
break;
|
|
53
|
+
default:
|
|
54
|
+
break;
|
|
55
|
+
}
|
|
56
|
+
});
|
|
57
|
+
for (const comment of parsed.comments) {
|
|
58
|
+
if (/@ts-(?:ignore|nocheck|expect-error)\b/.test(comment.value)) {
|
|
59
|
+
index.tsIgnore.add(comment.loc.start.line);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
return {
|
|
63
|
+
hasUnsafeCodeExecution: line => index.unsafeExec.has(line),
|
|
64
|
+
hasTsIgnore: line => index.tsIgnore.has(line),
|
|
65
|
+
hasAnyType: line => index.anyType.has(line),
|
|
66
|
+
hasEmptyCatch: line => index.emptyCatch.has(line),
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
//# sourceMappingURL=confirmers.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"confirmers.js","sourceRoot":"","sources":["../../../src/guardrails/ast/confirmers.ts"],"names":[],"mappings":"AAAA,uCAAuC;AACvC,6EAA6E;AAC7E,6EAA6E;AAC7E,0DAA0D;AAC1D,EAAE;AACF,+EAA+E;AAC/E,8EAA8E;AAC9E,yDAAyD;AAEzD,OAAO,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,YAAY,CAAA;AAqB9C,SAAS,cAAc,CAAC,IAAsC;IAC5D,OAAO,IAAI,IAAI,IAAI,CAAC,IAAI,KAAK,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,SAAS,CAAA;AACnE,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,kBAAkB,CAAC,IAAY,EAAE,UAA6B,EAAE;IAC9E,MAAM,MAAM,GAAG,WAAW,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;IACzC,IAAI,CAAC,MAAM;QAAE,OAAO,IAAI,CAAA;IAExB,MAAM,KAAK,GAAc;QACvB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,OAAO,EAAE,IAAI,GAAG,EAAE;QAClB,UAAU,EAAE,IAAI,GAAG,EAAE;QACrB,QAAQ,EAAE,IAAI,GAAG,EAAE;KACpB,CAAA;IAED,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;QAC1B,QAAQ,IAAI,CAAC,IAAI,EAAE,CAAC;YAClB,uEAAuE;YACvE,qEAAqE;YACrE,sEAAsE;YACtE,0EAA0E;YAC1E,2EAA2E;YAC3E,KAAK,gBAAgB;gBACnB,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,MAAM,EAAE,CAAC;oBAC3C,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAClD,CAAC;gBACD,MAAK;YACP,KAAK,eAAe;gBAClB,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,UAAU,EAAE,CAAC;oBAC/C,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAClD,CAAC;gBACD,MAAK;YACP,KAAK,cAAc;gBACjB,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBACtC,MAAK;YACP,KAAK,aAAa;gBAChB,sEAAsE;gBACtE,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,KAAK,CAAC;oBAAE,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;gBAC1E,MAAK;YACP;gBACE,MAAK;QACT,CAAC;IACH,CAAC,CAAC,CAAA;IAEF,KAAK,MAAM,OAAO,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACtC,IAAI,uCAAuC,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YAChE,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAA;QAC5C,CAAC;IACH,CAAC;IAED,OAAO;QACL,sBAAsB,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;QAC1D,WAAW,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC;QAC7C,UAAU,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC;QAC3C,aAAa,EAAE,IAAI,CAAC,EAAE,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC;KAClD,CAAA;AACH,CAAC"}
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
import { type TSESTree } from '@typescript-eslint/typescript-estree';
|
|
2
|
+
export interface ParsedSource {
|
|
3
|
+
program: TSESTree.Program;
|
|
4
|
+
comments: TSESTree.Comment[];
|
|
5
|
+
}
|
|
6
|
+
/**
|
|
7
|
+
* Parse TypeScript/JavaScript source into an ESTree AST. Returns null when the
|
|
8
|
+
* source cannot be parsed (non-TS content, syntax errors, unsupported syntax).
|
|
9
|
+
*
|
|
10
|
+
* `jsx` should be enabled only for .tsx/.jsx files: enabling it for plain .ts
|
|
11
|
+
* misparses old-style `<Type>value` type assertions as JSX.
|
|
12
|
+
*/
|
|
13
|
+
export declare function parseSource(code: string, options?: {
|
|
14
|
+
jsx?: boolean;
|
|
15
|
+
}): ParsedSource | null;
|
|
16
|
+
/**
|
|
17
|
+
* Depth-first walk over every AST node. The `parent` back-reference (when
|
|
18
|
+
* present) is skipped to avoid infinite recursion.
|
|
19
|
+
*/
|
|
20
|
+
export declare function walk(node: TSESTree.Node, visit: (node: TSESTree.Node) => void): void;
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
// SCALE Engine — AST parse layer (P1.1)
|
|
2
|
+
// Thin wrapper over @typescript-eslint/typescript-estree used to turn a regex
|
|
3
|
+
// "fast pre-filter" hit into a "precise confirmation" against the real AST.
|
|
4
|
+
// Parsing is best-effort: any failure returns null so callers can fail open and
|
|
5
|
+
// fall back to the regex result (never lose detection coverage).
|
|
6
|
+
import { parse } from '@typescript-eslint/typescript-estree';
|
|
7
|
+
/**
|
|
8
|
+
* Parse TypeScript/JavaScript source into an ESTree AST. Returns null when the
|
|
9
|
+
* source cannot be parsed (non-TS content, syntax errors, unsupported syntax).
|
|
10
|
+
*
|
|
11
|
+
* `jsx` should be enabled only for .tsx/.jsx files: enabling it for plain .ts
|
|
12
|
+
* misparses old-style `<Type>value` type assertions as JSX.
|
|
13
|
+
*/
|
|
14
|
+
export function parseSource(code, options = {}) {
|
|
15
|
+
try {
|
|
16
|
+
const program = parse(code, {
|
|
17
|
+
loc: true,
|
|
18
|
+
comment: true,
|
|
19
|
+
jsx: options.jsx ?? false,
|
|
20
|
+
tolerant: false,
|
|
21
|
+
});
|
|
22
|
+
return { program, comments: program.comments ?? [] };
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
function isNode(value) {
|
|
29
|
+
return typeof value === 'object' && value !== null && typeof value.type === 'string';
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* Depth-first walk over every AST node. The `parent` back-reference (when
|
|
33
|
+
* present) is skipped to avoid infinite recursion.
|
|
34
|
+
*/
|
|
35
|
+
export function walk(node, visit) {
|
|
36
|
+
visit(node);
|
|
37
|
+
for (const key of Object.keys(node)) {
|
|
38
|
+
if (key === 'parent')
|
|
39
|
+
continue;
|
|
40
|
+
const value = node[key];
|
|
41
|
+
if (Array.isArray(value)) {
|
|
42
|
+
for (const item of value)
|
|
43
|
+
if (isNode(item))
|
|
44
|
+
walk(item, visit);
|
|
45
|
+
}
|
|
46
|
+
else if (isNode(value)) {
|
|
47
|
+
walk(value, visit);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
}
|
|
51
|
+
//# sourceMappingURL=parse.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.js","sourceRoot":"","sources":["../../../src/guardrails/ast/parse.ts"],"names":[],"mappings":"AAAA,wCAAwC;AACxC,8EAA8E;AAC9E,4EAA4E;AAC5E,gFAAgF;AAChF,iEAAiE;AAEjE,OAAO,EAAE,KAAK,EAAiB,MAAM,sCAAsC,CAAA;AAO3E;;;;;;GAMG;AACH,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,UAA6B,EAAE;IACvE,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE;YAC1B,GAAG,EAAE,IAAI;YACT,OAAO,EAAE,IAAI;YACb,GAAG,EAAE,OAAO,CAAC,GAAG,IAAI,KAAK;YACzB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAA;QACF,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,IAAI,EAAE,EAAE,CAAA;IACtD,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAA;IACb,CAAC;AACH,CAAC;AAED,SAAS,MAAM,CAAC,KAAc;IAC5B,OAAO,OAAO,KAAK,KAAK,QAAQ,IAAI,KAAK,KAAK,IAAI,IAAI,OAAQ,KAA4B,CAAC,IAAI,KAAK,QAAQ,CAAA;AAC9G,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,IAAI,CAAC,IAAmB,EAAE,KAAoC;IAC5E,KAAK,CAAC,IAAI,CAAC,CAAA;IACX,KAAK,MAAM,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;QACpC,IAAI,GAAG,KAAK,QAAQ;YAAE,SAAQ;QAC9B,MAAM,KAAK,GAAI,IAA2C,CAAC,GAAG,CAAC,CAAA;QAC/D,IAAI,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,KAAK,MAAM,IAAI,IAAI,KAAK;gBAAE,IAAI,MAAM,CAAC,IAAI,CAAC;oBAAE,IAAI,CAAC,IAAI,EAAE,KAAK,CAAC,CAAA;QAC/D,CAAC;aAAM,IAAI,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YACzB,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;AACH,CAAC"}
|
|
@@ -21,6 +21,15 @@ export interface SpecData {
|
|
|
21
21
|
edgeCases: string[];
|
|
22
22
|
northStar: string;
|
|
23
23
|
ambiguityScore?: number;
|
|
24
|
+
verificationSurface?: string[];
|
|
25
|
+
constraints?: string[];
|
|
26
|
+
boundaries?: {
|
|
27
|
+
files: string[];
|
|
28
|
+
tools: string[];
|
|
29
|
+
forbidden: string[];
|
|
30
|
+
};
|
|
31
|
+
iterationStrategy?: string;
|
|
32
|
+
blockedStopCondition?: string;
|
|
24
33
|
}
|
|
25
34
|
export interface PlanData {
|
|
26
35
|
id: string;
|
|
@@ -464,6 +464,25 @@ export class HTMLDocumentRenderer {
|
|
|
464
464
|
this.renderSection('north-star', 'North Star', `
|
|
465
465
|
<p>${this.escapeHtml(data.northStar)}</p>
|
|
466
466
|
`),
|
|
467
|
+
data.verificationSurface?.length ? this.renderSection('verification-surface', 'Verification Surface', `
|
|
468
|
+
<ul>${data.verificationSurface.map(s => `<li>${this.escapeHtml(s)}</li>`).join('\n')}</ul>
|
|
469
|
+
`) : '',
|
|
470
|
+
data.constraints?.length ? this.renderSection('constraints', 'Constraints', `
|
|
471
|
+
<ul>${data.constraints.map(c => `<li>${this.escapeHtml(c)}</li>`).join('\n')}</ul>
|
|
472
|
+
`) : '',
|
|
473
|
+
data.boundaries ? this.renderSection('boundaries', 'Boundaries', `
|
|
474
|
+
<ul>
|
|
475
|
+
<li>Files: ${data.boundaries.files.length ? data.boundaries.files.map(f => this.escapeHtml(f)).join(', ') : '(none)'}</li>
|
|
476
|
+
<li>Tools: ${data.boundaries.tools.length ? data.boundaries.tools.map(t => this.escapeHtml(t)).join(', ') : '(none)'}</li>
|
|
477
|
+
<li>Forbidden: ${data.boundaries.forbidden.length ? data.boundaries.forbidden.map(f => this.escapeHtml(f)).join(', ') : '(none)'}</li>
|
|
478
|
+
</ul>
|
|
479
|
+
`) : '',
|
|
480
|
+
data.iterationStrategy ? this.renderSection('iteration-strategy', 'Iteration Strategy', `
|
|
481
|
+
<p>${this.escapeHtml(data.iterationStrategy)}</p>
|
|
482
|
+
`) : '',
|
|
483
|
+
data.blockedStopCondition ? this.renderSection('blocked-stop-condition', 'Blocked Stop Condition', `
|
|
484
|
+
<p>${this.escapeHtml(data.blockedStopCondition)}</p>
|
|
485
|
+
`) : '',
|
|
467
486
|
].filter(Boolean).join('\n');
|
|
468
487
|
const meta = this.buildMetaTags([
|
|
469
488
|
{ label: 'ID', value: data.id },
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HTMLDocumentRenderer.js","sourceRoot":"","sources":["../../src/output/HTMLDocumentRenderer.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"HTMLDocumentRenderer.js","sourceRoot":"","sources":["../../src/output/HTMLDocumentRenderer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
import { JsonLlmClient } from './JsonLlmClient.js';
|
|
2
|
+
export type FreshVerifyDecision = 'verified' | 'unverified' | 'uncertain';
|
|
3
|
+
export interface FreshVerifyVerdict {
|
|
4
|
+
decision: FreshVerifyDecision;
|
|
5
|
+
confidence: number;
|
|
6
|
+
rationale: string;
|
|
7
|
+
/** verificationSurface entries with no corresponding evidence in the diff. */
|
|
8
|
+
unmetSurfaces: string[];
|
|
9
|
+
modelUsed: string;
|
|
10
|
+
/** Always true — fresh verification never blocks ship in this PR. */
|
|
11
|
+
advisory: true;
|
|
12
|
+
createdAt: number;
|
|
13
|
+
}
|
|
14
|
+
export interface FreshVerifyInput {
|
|
15
|
+
outcome?: string;
|
|
16
|
+
/** The ONLY success contract the verifier is allowed to reason from. */
|
|
17
|
+
verificationSurface: string[];
|
|
18
|
+
/** Pre-trimmed diff summary (changed files + salient added lines). */
|
|
19
|
+
diffSummary: string;
|
|
20
|
+
/** Short, factual gate/test outcome summary. No build-agent reasoning. */
|
|
21
|
+
gateSummary: string;
|
|
22
|
+
}
|
|
23
|
+
export declare class FreshContextVerifier {
|
|
24
|
+
private readonly client;
|
|
25
|
+
constructor(client?: JsonLlmClient);
|
|
26
|
+
verify(input: FreshVerifyInput): Promise<FreshVerifyVerdict>;
|
|
27
|
+
private buildUserPrompt;
|
|
28
|
+
/**
|
|
29
|
+
* Deterministic fallback. Unlike the build agent, the fresh verifier trusts
|
|
30
|
+
* only artifacts: a surface is verified iff its significant tokens appear in
|
|
31
|
+
* the diff. Any unmet surface yields "unverified"; no surface at all is
|
|
32
|
+
* "uncertain" (nothing to independently verify against).
|
|
33
|
+
*/
|
|
34
|
+
private heuristicVerdict;
|
|
35
|
+
}
|
|
@@ -0,0 +1,120 @@
|
|
|
1
|
+
// SCALE Engine — Fresh-context verifier sub-agent (P2.2)
|
|
2
|
+
// An independent verification pass that judges whether a diff actually
|
|
3
|
+
// satisfies the Spec, deliberately fed ONLY the declared verification surface,
|
|
4
|
+
// the diff and a gate summary — and *no* build-agent conversation/history
|
|
5
|
+
// (decision N1). The isolated input is what eliminates the build agent's
|
|
6
|
+
// self-rationalisation bias.
|
|
7
|
+
//
|
|
8
|
+
// Like LlmJudge / ReflexionEngine it is env-gated (SCALE_LOCAL_MODEL) with a
|
|
9
|
+
// deterministic heuristic fallback, and it is advisory only (decision O1): the
|
|
10
|
+
// verdict is recorded but never blocks ship in this PR.
|
|
11
|
+
import { logger } from '../core/logger.js';
|
|
12
|
+
import { JsonLlmClient } from './JsonLlmClient.js';
|
|
13
|
+
const SYSTEM_PROMPT = 'You are an independent verification sub-agent. You did NOT write this code and have NO access to the author\'s reasoning. ' +
|
|
14
|
+
'Using only the declared verification surface, the diff and the gate summary, decide whether the outcome is independently verifiable from the artifacts alone. ' +
|
|
15
|
+
'Do not assume intent that is not evidenced by the diff. Output strict JSON only.';
|
|
16
|
+
export class FreshContextVerifier {
|
|
17
|
+
constructor(client = new JsonLlmClient()) {
|
|
18
|
+
this.client = client;
|
|
19
|
+
}
|
|
20
|
+
async verify(input) {
|
|
21
|
+
if (!this.client.isEnabled()) {
|
|
22
|
+
return this.heuristicVerdict(input);
|
|
23
|
+
}
|
|
24
|
+
try {
|
|
25
|
+
const { data, modelUsed } = await this.client.completeJson({
|
|
26
|
+
system: SYSTEM_PROMPT,
|
|
27
|
+
user: this.buildUserPrompt(input),
|
|
28
|
+
});
|
|
29
|
+
return {
|
|
30
|
+
decision: normalizeDecision(data.decision),
|
|
31
|
+
confidence: clampConfidence(data.confidence),
|
|
32
|
+
rationale: (data.rationale ?? '').slice(0, 1000) || 'No rationale provided.',
|
|
33
|
+
unmetSurfaces: Array.isArray(data.unmetSurfaces) ? data.unmetSurfaces.slice(0, 50) : [],
|
|
34
|
+
modelUsed,
|
|
35
|
+
advisory: true,
|
|
36
|
+
createdAt: Date.now(),
|
|
37
|
+
};
|
|
38
|
+
}
|
|
39
|
+
catch (err) {
|
|
40
|
+
logger.warn({ err }, 'FreshContextVerifier: LLM call failed, falling back to heuristic');
|
|
41
|
+
return this.heuristicVerdict(input);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
buildUserPrompt(input) {
|
|
45
|
+
return [
|
|
46
|
+
`Stated outcome: ${input.outcome ?? '(not declared)'}`,
|
|
47
|
+
'',
|
|
48
|
+
'Verification surfaces (the ONLY contract you may verify against):',
|
|
49
|
+
...(input.verificationSurface.length ? input.verificationSurface.map(s => `- ${s}`) : ['- (none declared)']),
|
|
50
|
+
'',
|
|
51
|
+
'Gate summary:',
|
|
52
|
+
input.gateSummary || '(none)',
|
|
53
|
+
'',
|
|
54
|
+
'Diff (the only evidence available to you):',
|
|
55
|
+
input.diffSummary.slice(0, 6000) || '(empty diff)',
|
|
56
|
+
'',
|
|
57
|
+
'Output JSON: { "decision": "verified|unverified|uncertain", "confidence": 0.0-1.0, "rationale": "...", "unmetSurfaces": ["..."] }',
|
|
58
|
+
].join('\n');
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* Deterministic fallback. Unlike the build agent, the fresh verifier trusts
|
|
62
|
+
* only artifacts: a surface is verified iff its significant tokens appear in
|
|
63
|
+
* the diff. Any unmet surface yields "unverified"; no surface at all is
|
|
64
|
+
* "uncertain" (nothing to independently verify against).
|
|
65
|
+
*/
|
|
66
|
+
heuristicVerdict(input) {
|
|
67
|
+
const haystack = input.diffSummary.toLowerCase();
|
|
68
|
+
const unmetSurfaces = input.verificationSurface.filter(surface => !surfaceMentioned(surface, haystack));
|
|
69
|
+
let decision;
|
|
70
|
+
let confidence;
|
|
71
|
+
let rationale;
|
|
72
|
+
if (input.verificationSurface.length === 0) {
|
|
73
|
+
decision = 'uncertain';
|
|
74
|
+
confidence = 0.3;
|
|
75
|
+
rationale = 'No verification surface declared; cannot independently verify the outcome from the diff.';
|
|
76
|
+
}
|
|
77
|
+
else if (unmetSurfaces.length > 0) {
|
|
78
|
+
decision = 'unverified';
|
|
79
|
+
confidence = 0.5;
|
|
80
|
+
rationale = `${unmetSurfaces.length}/${input.verificationSurface.length} verification surface(s) have no supporting evidence in the diff.`;
|
|
81
|
+
}
|
|
82
|
+
else {
|
|
83
|
+
decision = 'verified';
|
|
84
|
+
confidence = 0.5;
|
|
85
|
+
rationale = 'Every declared verification surface has supporting evidence in the diff.';
|
|
86
|
+
}
|
|
87
|
+
return {
|
|
88
|
+
decision,
|
|
89
|
+
confidence,
|
|
90
|
+
rationale,
|
|
91
|
+
unmetSurfaces,
|
|
92
|
+
modelUsed: 'heuristic',
|
|
93
|
+
advisory: true,
|
|
94
|
+
createdAt: Date.now(),
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
}
|
|
98
|
+
function surfaceMentioned(surface, haystackLower) {
|
|
99
|
+
const tokens = surface
|
|
100
|
+
.toLowerCase()
|
|
101
|
+
.split(/[^a-z0-9]+/i)
|
|
102
|
+
.filter(token => token.length >= 4);
|
|
103
|
+
if (tokens.length === 0)
|
|
104
|
+
return haystackLower.includes(surface.toLowerCase());
|
|
105
|
+
return tokens.some(token => haystackLower.includes(token));
|
|
106
|
+
}
|
|
107
|
+
function normalizeDecision(value) {
|
|
108
|
+
const normalized = (value ?? '').toLowerCase();
|
|
109
|
+
if (normalized === 'verified')
|
|
110
|
+
return 'verified';
|
|
111
|
+
if (normalized === 'unverified')
|
|
112
|
+
return 'unverified';
|
|
113
|
+
return 'uncertain';
|
|
114
|
+
}
|
|
115
|
+
function clampConfidence(value) {
|
|
116
|
+
if (typeof value !== 'number' || Number.isNaN(value))
|
|
117
|
+
return 0.5;
|
|
118
|
+
return Math.max(0, Math.min(1, value));
|
|
119
|
+
}
|
|
120
|
+
//# sourceMappingURL=FreshContextVerifier.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"FreshContextVerifier.js","sourceRoot":"","sources":["../../src/review/FreshContextVerifier.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
export interface JsonLlmRequest {
|
|
2
|
+
system: string;
|
|
3
|
+
user: string;
|
|
4
|
+
/** Soft cap for the completion. Defaults to 600. */
|
|
5
|
+
maxTokens?: number;
|
|
6
|
+
/** Sampling temperature. Defaults to 0.2 (judges want low variance). */
|
|
7
|
+
temperature?: number;
|
|
8
|
+
/** Abort the request after this many ms. Defaults to 20000. */
|
|
9
|
+
timeoutMs?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface JsonLlmResult<T> {
|
|
12
|
+
data: T;
|
|
13
|
+
modelUsed: string;
|
|
14
|
+
tokensUsed: number;
|
|
15
|
+
}
|
|
16
|
+
/**
|
|
17
|
+
* Enabled only when a local model is explicitly configured. We intentionally
|
|
18
|
+
* gate on SCALE_LOCAL_MODEL (and not the defaulted base URL/api key) so the
|
|
19
|
+
* default developer + CI flow never attempts a network call.
|
|
20
|
+
*/
|
|
21
|
+
export declare function isLlmEnabled(): boolean;
|
|
22
|
+
export declare class JsonLlmClient {
|
|
23
|
+
private readonly enabledOverride?;
|
|
24
|
+
constructor(enabledOverride?: boolean | undefined);
|
|
25
|
+
isEnabled(): boolean;
|
|
26
|
+
/**
|
|
27
|
+
* Call the model and parse its reply as JSON. Throws on any failure
|
|
28
|
+
* (disabled, network error, non-2xx, non-JSON reply) so the caller can fall
|
|
29
|
+
* back to a deterministic heuristic — exactly like ReflexionEngine does.
|
|
30
|
+
*/
|
|
31
|
+
completeJson<T>(request: JsonLlmRequest): Promise<JsonLlmResult<T>>;
|
|
32
|
+
}
|
|
33
|
+
/**
|
|
34
|
+
* Best-effort JSON extraction: accepts a bare JSON object or one wrapped in a
|
|
35
|
+
* ```json fenced block (a common local-model habit). Returns null on failure.
|
|
36
|
+
*/
|
|
37
|
+
export declare function parseJsonReply<T>(content: string): T | null;
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
// SCALE Engine — JSON LLM client (P1.4 / P2.2)
|
|
2
|
+
// A thin, env-gated wrapper around an OpenAI-compatible /chat/completions
|
|
3
|
+
// endpoint that returns parsed JSON. Mirrors the proven pattern in
|
|
4
|
+
// src/cortex/ReflexionEngine.ts: callers stay deterministic and offline by
|
|
5
|
+
// default (isEnabled() === false ⇒ they use their own heuristic fallback), and
|
|
6
|
+
// only reach the network when a local model is explicitly configured.
|
|
7
|
+
import { logger } from '../core/logger.js';
|
|
8
|
+
import { resolveLocalModelConfig } from '../routing/LocalModelProvider.js';
|
|
9
|
+
/**
|
|
10
|
+
* Enabled only when a local model is explicitly configured. We intentionally
|
|
11
|
+
* gate on SCALE_LOCAL_MODEL (and not the defaulted base URL/api key) so the
|
|
12
|
+
* default developer + CI flow never attempts a network call.
|
|
13
|
+
*/
|
|
14
|
+
export function isLlmEnabled() {
|
|
15
|
+
return Boolean(process.env.SCALE_LOCAL_MODEL);
|
|
16
|
+
}
|
|
17
|
+
export class JsonLlmClient {
|
|
18
|
+
constructor(enabledOverride) {
|
|
19
|
+
this.enabledOverride = enabledOverride;
|
|
20
|
+
}
|
|
21
|
+
isEnabled() {
|
|
22
|
+
return this.enabledOverride ?? isLlmEnabled();
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* Call the model and parse its reply as JSON. Throws on any failure
|
|
26
|
+
* (disabled, network error, non-2xx, non-JSON reply) so the caller can fall
|
|
27
|
+
* back to a deterministic heuristic — exactly like ReflexionEngine does.
|
|
28
|
+
*/
|
|
29
|
+
async completeJson(request) {
|
|
30
|
+
if (!this.isEnabled()) {
|
|
31
|
+
throw new Error('JsonLlmClient is disabled (set SCALE_LOCAL_MODEL to enable)');
|
|
32
|
+
}
|
|
33
|
+
const config = resolveLocalModelConfig();
|
|
34
|
+
const response = await fetch(`${config.baseUrl}/chat/completions`, {
|
|
35
|
+
method: 'POST',
|
|
36
|
+
headers: {
|
|
37
|
+
'Content-Type': 'application/json',
|
|
38
|
+
Authorization: `Bearer ${config.apiKey}`,
|
|
39
|
+
},
|
|
40
|
+
body: JSON.stringify({
|
|
41
|
+
model: config.name,
|
|
42
|
+
messages: [
|
|
43
|
+
{ role: 'system', content: request.system },
|
|
44
|
+
{ role: 'user', content: request.user },
|
|
45
|
+
],
|
|
46
|
+
temperature: request.temperature ?? 0.2,
|
|
47
|
+
max_tokens: request.maxTokens ?? 600,
|
|
48
|
+
}),
|
|
49
|
+
signal: AbortSignal.timeout(request.timeoutMs ?? 20000),
|
|
50
|
+
});
|
|
51
|
+
if (!response.ok) {
|
|
52
|
+
throw new Error(`LLM endpoint returned ${response.status}`);
|
|
53
|
+
}
|
|
54
|
+
const payload = (await response.json());
|
|
55
|
+
const content = payload.choices?.[0]?.message?.content ?? '';
|
|
56
|
+
const data = parseJsonReply(content);
|
|
57
|
+
if (data === null) {
|
|
58
|
+
throw new Error('LLM reply was not valid JSON');
|
|
59
|
+
}
|
|
60
|
+
return {
|
|
61
|
+
data,
|
|
62
|
+
modelUsed: config.name,
|
|
63
|
+
tokensUsed: payload.usage?.total_tokens ?? 0,
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Best-effort JSON extraction: accepts a bare JSON object or one wrapped in a
|
|
69
|
+
* ```json fenced block (a common local-model habit). Returns null on failure.
|
|
70
|
+
*/
|
|
71
|
+
export function parseJsonReply(content) {
|
|
72
|
+
const trimmed = content.trim();
|
|
73
|
+
const candidates = [];
|
|
74
|
+
const fenced = trimmed.match(/```(?:json)?\s*([\s\S]*?)```/i);
|
|
75
|
+
if (fenced)
|
|
76
|
+
candidates.push(fenced[1].trim());
|
|
77
|
+
candidates.push(trimmed);
|
|
78
|
+
const firstBrace = trimmed.indexOf('{');
|
|
79
|
+
const lastBrace = trimmed.lastIndexOf('}');
|
|
80
|
+
if (firstBrace >= 0 && lastBrace > firstBrace) {
|
|
81
|
+
candidates.push(trimmed.slice(firstBrace, lastBrace + 1));
|
|
82
|
+
}
|
|
83
|
+
for (const candidate of candidates) {
|
|
84
|
+
try {
|
|
85
|
+
return JSON.parse(candidate);
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
continue;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
logger.debug({ content: trimmed.slice(0, 200) }, 'JsonLlmClient: failed to parse JSON reply');
|
|
92
|
+
return null;
|
|
93
|
+
}
|
|
94
|
+
//# sourceMappingURL=JsonLlmClient.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"JsonLlmClient.js","sourceRoot":"","sources":["../../src/review/JsonLlmClient.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { JsonLlmClient } from './JsonLlmClient.js';
|
|
2
|
+
export type JudgeDecision = 'pass' | 'fail' | 'uncertain';
|
|
3
|
+
export interface JudgeVerdict {
|
|
4
|
+
/** Advisory call on whether the diff meets the Spec outcome. */
|
|
5
|
+
decision: JudgeDecision;
|
|
6
|
+
/** 0..1 self-reported confidence. */
|
|
7
|
+
confidence: number;
|
|
8
|
+
rationale: string;
|
|
9
|
+
/** verificationSurface entries with no corresponding evidence in the diff. */
|
|
10
|
+
unmetSurfaces: string[];
|
|
11
|
+
/** Model name, or 'heuristic' when the LLM path was not taken. */
|
|
12
|
+
modelUsed: string;
|
|
13
|
+
/** Versioned prompt identifier, e.g. "spec-conformance.v1". */
|
|
14
|
+
promptVersion: string;
|
|
15
|
+
/** Always true — kept explicit so consumers never gate on this verdict. */
|
|
16
|
+
advisory: true;
|
|
17
|
+
createdAt: number;
|
|
18
|
+
}
|
|
19
|
+
export interface JudgeInput {
|
|
20
|
+
outcome?: string;
|
|
21
|
+
verificationSurface: string[];
|
|
22
|
+
/** Pre-trimmed diff summary (changed files + salient added lines). */
|
|
23
|
+
diffSummary: string;
|
|
24
|
+
reviewFindings: {
|
|
25
|
+
critical: number;
|
|
26
|
+
high: number;
|
|
27
|
+
medium: number;
|
|
28
|
+
low: number;
|
|
29
|
+
};
|
|
30
|
+
}
|
|
31
|
+
interface JudgePromptRecord {
|
|
32
|
+
id: string;
|
|
33
|
+
version: string;
|
|
34
|
+
system: string;
|
|
35
|
+
rubric: string;
|
|
36
|
+
createdAt: number;
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Loads/persists the versioned judge prompt under `.scale/judges/<id>.json`
|
|
40
|
+
* (decision L1) so the rubric is auditable and can drift independently of code.
|
|
41
|
+
*/
|
|
42
|
+
export declare class JudgePromptStore {
|
|
43
|
+
private readonly dir;
|
|
44
|
+
constructor(scaleDir?: string);
|
|
45
|
+
load(id?: string): JudgePromptRecord;
|
|
46
|
+
private write;
|
|
47
|
+
}
|
|
48
|
+
export declare class LlmJudge {
|
|
49
|
+
private readonly client;
|
|
50
|
+
private readonly promptStore;
|
|
51
|
+
constructor(client?: JsonLlmClient, promptStore?: JudgePromptStore);
|
|
52
|
+
judge(input: JudgeInput): Promise<JudgeVerdict>;
|
|
53
|
+
private buildUserPrompt;
|
|
54
|
+
/**
|
|
55
|
+
* Deterministic fallback: a surface is "unmet" when none of its significant
|
|
56
|
+
* tokens appear in the diff summary; any unmet surface or any critical/high
|
|
57
|
+
* review finding turns the advisory verdict negative.
|
|
58
|
+
*/
|
|
59
|
+
private heuristicVerdict;
|
|
60
|
+
}
|
|
61
|
+
export {};
|