llm-relay 0.72.1 → 0.72.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/accounting-store-schema.js +11 -14
- package/dist/accounting-store-schema.js.map +1 -1
- package/dist/candidate-runner.d.ts +32 -0
- package/dist/candidate-runner.js +24 -14
- package/dist/candidate-runner.js.map +1 -1
- package/dist/cli.d.ts +0 -14
- package/dist/cli.js +11 -14
- package/dist/cli.js.map +1 -1
- package/dist/context-limits.js +22 -33
- package/dist/context-limits.js.map +1 -1
- package/dist/delegate-gate/cast-necessity.js +12 -19
- package/dist/delegate-gate/cast-necessity.js.map +1 -1
- package/dist/delegate-gate/file-driver.d.ts +50 -0
- package/dist/delegate-gate/file-driver.js +23 -0
- package/dist/delegate-gate/file-driver.js.map +1 -0
- package/dist/delegate-gate/shared-state.js +9 -15
- package/dist/delegate-gate/shared-state.js.map +1 -1
- package/dist/delegate-gate/test-assertions.js +4 -6
- package/dist/delegate-gate/test-assertions.js.map +1 -1
- package/package.json +1 -1
package/dist/context-limits.js
CHANGED
|
@@ -1,18 +1,11 @@
|
|
|
1
1
|
import { factsFor, flushFacts, recordFact, resetFacts, FACT_TTL_MS } from "./target-facts.js";
|
|
2
2
|
export const OBSERVED_LIMIT_TTL_MS = FACT_TTL_MS["context-limit"];
|
|
3
3
|
const MAX_CREDIBLE_TOKENS = 100_000_000;
|
|
4
|
-
|
|
5
|
-
/maximum context length is\s+(\d[\d,_]*)\s*tokens/i,
|
|
6
|
-
/tokens\s*>\s*(\d[\d,_]*)\s*maximum/i,
|
|
7
|
-
/maximum\s+(?:input\s+|prompt\s+)?(?:context|length|tokens)\D{0,24}?(\d[\d,_]*)/i,
|
|
8
|
-
/context\s+(?:window|length)\s+(?:of|is)\s+(\d[\d,_]*)/i,
|
|
9
|
-
/reduce\s+(?:the\s+)?length[^.]*?(?:max(?:imum)?|limit)\D{0,16}(\d[\d,_]*)/i,
|
|
10
|
-
];
|
|
11
|
-
export function parseStatedContextLimit(body) {
|
|
4
|
+
function scanStatedLimit(body, patterns) {
|
|
12
5
|
if (typeof body !== "string" || body.length === 0)
|
|
13
6
|
return null;
|
|
14
7
|
const text = body.length > 8192 ? body.slice(0, 8192) : body;
|
|
15
|
-
for (const re of
|
|
8
|
+
for (const re of patterns) {
|
|
16
9
|
const m = re.exec(text);
|
|
17
10
|
if (!m?.[1])
|
|
18
11
|
continue;
|
|
@@ -22,18 +15,31 @@ export function parseStatedContextLimit(body) {
|
|
|
22
15
|
}
|
|
23
16
|
return null;
|
|
24
17
|
}
|
|
25
|
-
|
|
26
|
-
return /context (?:length|window)|too long|maximum.*tokens|token.*limit exceeded/i.test(body);
|
|
27
|
-
}
|
|
28
|
-
export function recordObservedContextLimit(provider, model, tokens, opts = {}) {
|
|
18
|
+
function recordDeploymentCeiling(factName, provider, model, tokens, opts = {}) {
|
|
29
19
|
if (!Number.isFinite(tokens) || tokens <= 0 || tokens > MAX_CREDIBLE_TOKENS)
|
|
30
20
|
return;
|
|
31
|
-
recordFact(
|
|
21
|
+
recordFact(factName, { kind: "deployment", provider, model }, {
|
|
32
22
|
...(opts.path !== undefined ? { path: opts.path } : {}),
|
|
33
23
|
...(opts.now !== undefined ? { now: opts.now } : {}),
|
|
34
24
|
value: Math.floor(tokens),
|
|
35
25
|
});
|
|
36
26
|
}
|
|
27
|
+
const STATED_LIMIT_PATTERNS = [
|
|
28
|
+
/maximum context length is\s+(\d[\d,_]*)\s*tokens/i,
|
|
29
|
+
/tokens\s*>\s*(\d[\d,_]*)\s*maximum/i,
|
|
30
|
+
/maximum\s+(?:input\s+|prompt\s+)?(?:context|length|tokens)\D{0,24}?(\d[\d,_]*)/i,
|
|
31
|
+
/context\s+(?:window|length)\s+(?:of|is)\s+(\d[\d,_]*)/i,
|
|
32
|
+
/reduce\s+(?:the\s+)?length[^.]*?(?:max(?:imum)?|limit)\D{0,16}(\d[\d,_]*)/i,
|
|
33
|
+
];
|
|
34
|
+
export function parseStatedContextLimit(body) {
|
|
35
|
+
return scanStatedLimit(body, STATED_LIMIT_PATTERNS);
|
|
36
|
+
}
|
|
37
|
+
export function looksLikeContextLengthError(body) {
|
|
38
|
+
return /context (?:length|window)|too long|maximum.*tokens|token.*limit exceeded/i.test(body);
|
|
39
|
+
}
|
|
40
|
+
export function recordObservedContextLimit(provider, model, tokens, opts = {}) {
|
|
41
|
+
recordDeploymentCeiling("context-limit", provider, model, tokens, opts);
|
|
42
|
+
}
|
|
37
43
|
export function observedContextLimit(provider, model, opts = {}) {
|
|
38
44
|
for (const fact of factsFor(provider, null, model, opts)) {
|
|
39
45
|
if (fact.kind === "context-limit" && typeof fact.value === "number")
|
|
@@ -50,30 +56,13 @@ const STATED_MAX_OUTPUT_PATTERNS = [
|
|
|
50
56
|
/maximum value for\s+`?max_(?:completion_|output_|new_)?tokens`?\s*(?:is|:)\s*`?(\d[\d,_]*)/i,
|
|
51
57
|
];
|
|
52
58
|
export function parseStatedMaxOutput(body) {
|
|
53
|
-
|
|
54
|
-
return null;
|
|
55
|
-
const text = body.length > 8192 ? body.slice(0, 8192) : body;
|
|
56
|
-
for (const re of STATED_MAX_OUTPUT_PATTERNS) {
|
|
57
|
-
const m = re.exec(text);
|
|
58
|
-
if (!m?.[1])
|
|
59
|
-
continue;
|
|
60
|
-
const n = Number(m[1].replace(/[,_]/g, ""));
|
|
61
|
-
if (Number.isFinite(n) && n > 0 && n <= MAX_CREDIBLE_TOKENS)
|
|
62
|
-
return Math.floor(n);
|
|
63
|
-
}
|
|
64
|
-
return null;
|
|
59
|
+
return scanStatedLimit(body, STATED_MAX_OUTPUT_PATTERNS);
|
|
65
60
|
}
|
|
66
61
|
export function looksLikeMaxOutputError(body) {
|
|
67
62
|
return /max_(?:completion_|output_|new_)?tokens|(?:completion|output)\s+tokens/i.test(body);
|
|
68
63
|
}
|
|
69
64
|
export function recordObservedMaxOutput(provider, model, tokens, opts = {}) {
|
|
70
|
-
|
|
71
|
-
return;
|
|
72
|
-
recordFact("max-output", { kind: "deployment", provider, model }, {
|
|
73
|
-
...(opts.path !== undefined ? { path: opts.path } : {}),
|
|
74
|
-
...(opts.now !== undefined ? { now: opts.now } : {}),
|
|
75
|
-
value: Math.floor(tokens),
|
|
76
|
-
});
|
|
65
|
+
recordDeploymentCeiling("max-output", provider, model, tokens, opts);
|
|
77
66
|
}
|
|
78
67
|
export function observedMaxOutput(provider, model, opts = {}) {
|
|
79
68
|
for (const fact of factsFor(provider, null, model, opts)) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"context-limits.js","sourceRoot":"","sources":["../src/context-limits.ts"],"names":[],"mappings":"AAgBA,OAAO,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAkC9F,MAAM,CAAC,MAAM,qBAAqB,GAAG,WAAW,CAAC,eAAe,CAAC,CAAC;AAGlE,MAAM,mBAAmB,GAAG,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"context-limits.js","sourceRoot":"","sources":["../src/context-limits.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
import { reportedPath } from "./diff-parser.js";
|
|
3
|
-
import {
|
|
3
|
+
import { findingPreamble, runFileAnalyzer } from "./file-driver.js";
|
|
4
4
|
const TS_FILE = /\.(ts|tsx|mts|cts)$/;
|
|
5
5
|
const PRIMITIVE_KEYWORD_TO_LITERAL_KIND = new Map([
|
|
6
6
|
[ts.SyntaxKind.StringKeyword, [ts.SyntaxKind.StringLiteral, ts.SyntaxKind.NoSubstitutionTemplateLiteral]],
|
|
@@ -49,12 +49,10 @@ function describeCast(node) {
|
|
|
49
49
|
return null;
|
|
50
50
|
}
|
|
51
51
|
function findingsForFile(file, path, readOriginal) {
|
|
52
|
-
const
|
|
53
|
-
|
|
54
|
-
if (addedLines.size === 0)
|
|
52
|
+
const preamble = findingPreamble(file, path, readOriginal, { tsx: path.endsWith(".tsx") });
|
|
53
|
+
if (preamble === null)
|
|
55
54
|
return [];
|
|
56
|
-
const
|
|
57
|
-
const sourceFile = ts.createSourceFile(path, content, ts.ScriptTarget.Latest, true, path.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
55
|
+
const { addedLines, sourceFile } = preamble;
|
|
58
56
|
const findings = [];
|
|
59
57
|
for (const node of findAsExpressionsOnAddedLines(sourceFile, addedLines)) {
|
|
60
58
|
const described = describeCast(node);
|
|
@@ -72,14 +70,11 @@ function findingsForFile(file, path, readOriginal) {
|
|
|
72
70
|
return findings;
|
|
73
71
|
}
|
|
74
72
|
export function analyzeCastNecessity(files, readOriginal) {
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
findings.push(...findingsForFile(file, path, readOriginal));
|
|
81
|
-
}
|
|
82
|
-
return findings;
|
|
73
|
+
return runFileAnalyzer(files, readOriginal, (file, path, readOriginal) => {
|
|
74
|
+
if (!TS_FILE.test(path))
|
|
75
|
+
return [];
|
|
76
|
+
return findingsForFile(file, path, readOriginal);
|
|
77
|
+
});
|
|
83
78
|
}
|
|
84
79
|
function addedDiffLine(file, newLine) {
|
|
85
80
|
for (const hunk of file.hunks) {
|
|
@@ -91,12 +86,10 @@ function addedDiffLine(file, newLine) {
|
|
|
91
86
|
return undefined;
|
|
92
87
|
}
|
|
93
88
|
function castEditsForFile(file, path, readOriginal) {
|
|
94
|
-
const
|
|
95
|
-
|
|
96
|
-
if (addedLines.size === 0)
|
|
89
|
+
const preamble = findingPreamble(file, path, readOriginal, { tsx: path.endsWith(".tsx") });
|
|
90
|
+
if (preamble === null)
|
|
97
91
|
return [];
|
|
98
|
-
const
|
|
99
|
-
const sourceFile = ts.createSourceFile(path, content, ts.ScriptTarget.Latest, true, path.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
92
|
+
const { lines, addedLines, sourceFile } = preamble;
|
|
100
93
|
const edits = [];
|
|
101
94
|
for (const node of findAsExpressionsOnAddedLines(sourceFile, addedLines)) {
|
|
102
95
|
if (!isTriviallyRedundantLiteralCast(node))
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cast-necessity.js","sourceRoot":"","sources":["../../src/delegate-gate/cast-necessity.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"cast-necessity.js","sourceRoot":"","sources":["../../src/delegate-gate/cast-necessity.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import type { DiffFile } from "./diff-parser.js";
|
|
3
|
+
/**
|
|
4
|
+
* The one per-file prelude and the one per-file loop every AST detector in this directory runs.
|
|
5
|
+
*
|
|
6
|
+
* `cast-necessity.ts`, `shared-state.ts` and `test-assertions.ts` each opened with the same five
|
|
7
|
+
* steps — read the pre-image, reconstruct the post-image, bail when the diff added nothing, join
|
|
8
|
+
* the lines, hand the result to `ts.createSourceFile` — and each then walked `files` with the same
|
|
9
|
+
* loop. That is CLONE-16 in the 2026-09-05 duplication catalog, confirmed across four call sites,
|
|
10
|
+
* with CLONE-27 (the ScriptKind selection) folded in.
|
|
11
|
+
*/
|
|
12
|
+
/** What a detector needs before it can look at anything: the post-image, which of its lines the
|
|
13
|
+
* diff ADDED, and the parsed tree. Every detector restricts itself to `addedLines` — a defect the
|
|
14
|
+
* delegate did not touch is not this diff's defect. */
|
|
15
|
+
export interface FindingPreamble {
|
|
16
|
+
readonly lines: readonly string[];
|
|
17
|
+
readonly addedLines: ReadonlySet<number>;
|
|
18
|
+
readonly sourceFile: ts.SourceFile;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Reconstruct one changed file and parse it, or return null when the diff added no line to it.
|
|
22
|
+
*
|
|
23
|
+
* ⚠⚠ **`opts.tsx` is the CALLER's to decide, and it is not derivable here.** Two of the three
|
|
24
|
+
* detectors want the parse mode the path implies (`path.endsWith(".tsx")`); `test-assertions.ts`
|
|
25
|
+
* deliberately parses every file as plain TS, `.tsx` test files included, and always did. A driver
|
|
26
|
+
* that derived the flag from the path would silently change that third detector, so the flag is a
|
|
27
|
+
* required argument rather than an inference.
|
|
28
|
+
*
|
|
29
|
+
* ⚠ **Do not hand this a constant where the caller had a predicate.** The extraction that created
|
|
30
|
+
* this module did exactly that — three call sites went from `path.endsWith(".tsx")` to a literal
|
|
31
|
+
* `true` — and the whole delegate-gate suite stayed green, because no fixture holds a `.ts` file
|
|
32
|
+
* the two grammars read differently. They do differ: TypeScript reads `<T>value` as a type
|
|
33
|
+
* assertion, TSX reads it as an unclosed JSX element and swallows the rest of the file as its
|
|
34
|
+
* children, so a real `as` cast on a later line vanishes from the tree.
|
|
35
|
+
* `test/delegate-gate/script-kind-follows-path.test.ts` pins the caller side for exactly that
|
|
36
|
+
* reason; the flag test beside it cannot, because a hardcoded caller satisfies it.
|
|
37
|
+
*/
|
|
38
|
+
export declare function findingPreamble(file: DiffFile, path: string, readOriginal: (path: string) => string | null, opts: {
|
|
39
|
+
tsx: boolean;
|
|
40
|
+
}): FindingPreamble | null;
|
|
41
|
+
/**
|
|
42
|
+
* Walk the diff's files, resolve each reported path, and skip a file the diff left with no hunk.
|
|
43
|
+
*
|
|
44
|
+
* Each caller keeps its OWN file-kind filter inside `analyzeOne` rather than declaring it here:
|
|
45
|
+
* the detectors do not agree on what they analyze (`TS_FILE` for casts and shared state,
|
|
46
|
+
* `TEST_FILE` for assertions), and a filter parameter would only move that disagreement into this
|
|
47
|
+
* signature. Both predicates are pure, so testing the hunk guard before the caller's filter
|
|
48
|
+
* returns the same set as the single `||` guard each loop used before.
|
|
49
|
+
*/
|
|
50
|
+
export declare function runFileAnalyzer<T>(files: readonly DiffFile[], readOriginal: (path: string) => string | null, analyzeOne: (file: DiffFile, path: string, readOriginal: (path: string) => string | null) => readonly T[]): T[];
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import ts from "typescript";
|
|
2
|
+
import { reportedPath } from "./diff-parser.js";
|
|
3
|
+
import { reconstructPostImage } from "./post-image.js";
|
|
4
|
+
export function findingPreamble(file, path, readOriginal, opts) {
|
|
5
|
+
const original = file.isNew ? null : readOriginal(path);
|
|
6
|
+
const { lines, addedLines } = reconstructPostImage(original, file);
|
|
7
|
+
if (addedLines.size === 0)
|
|
8
|
+
return null;
|
|
9
|
+
const content = lines.join("\n");
|
|
10
|
+
const sourceFile = ts.createSourceFile(path, content, ts.ScriptTarget.Latest, true, opts.tsx ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
11
|
+
return { lines, addedLines, sourceFile };
|
|
12
|
+
}
|
|
13
|
+
export function runFileAnalyzer(files, readOriginal, analyzeOne) {
|
|
14
|
+
const results = [];
|
|
15
|
+
for (const file of files) {
|
|
16
|
+
const path = reportedPath(file);
|
|
17
|
+
if (file.hunks.length === 0)
|
|
18
|
+
continue;
|
|
19
|
+
results.push(...analyzeOne(file, path, readOriginal));
|
|
20
|
+
}
|
|
21
|
+
return results;
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=file-driver.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"file-driver.js","sourceRoot":"","sources":["../../src/delegate-gate/file-driver.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAuCvD,MAAM,UAAU,eAAe,CAC7B,IAAc,EACd,IAAY,EACZ,YAA6C,EAC7C,IAAsB;IAEtB,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,KAAK,EAAE,UAAU,EAAE,GAAG,oBAAoB,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACnE,IAAI,UAAU,CAAC,IAAI,KAAK,CAAC;QAAE,OAAO,IAAI,CAAC;IAEvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,EAAE,CAAC,gBAAgB,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC;IACrI,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,UAAU,EAAE,CAAC;AAC3C,CAAC;AAWD,MAAM,UAAU,eAAe,CAC7B,KAA0B,EAC1B,YAA6C,EAC7C,UAAyG;IAEzG,MAAM,OAAO,GAAQ,EAAE,CAAC;IACxB,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,CAAC,CAAC;QAChC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,SAAS;QACtC,OAAO,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,YAAY,CAAC,CAAC,CAAC;IACxD,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
|
-
import {
|
|
3
|
-
import { reconstructPostImage } from "./post-image.js";
|
|
2
|
+
import { findingPreamble, runFileAnalyzer } from "./file-driver.js";
|
|
4
3
|
const TS_FILE = /\.(ts|tsx|mts|cts)$/;
|
|
5
4
|
function collectModuleScopeBindings(sourceFile) {
|
|
6
5
|
const names = new Set();
|
|
@@ -94,12 +93,10 @@ function findMutationSites(sourceFile) {
|
|
|
94
93
|
return sites;
|
|
95
94
|
}
|
|
96
95
|
function findingsForFile(file, path, readOriginal) {
|
|
97
|
-
const
|
|
98
|
-
|
|
99
|
-
if (addedLines.size === 0)
|
|
96
|
+
const preamble = findingPreamble(file, path, readOriginal, { tsx: path.endsWith(".tsx") });
|
|
97
|
+
if (preamble === null)
|
|
100
98
|
return [];
|
|
101
|
-
const
|
|
102
|
-
const sourceFile = ts.createSourceFile(path, content, ts.ScriptTarget.Latest, true, path.endsWith(".tsx") ? ts.ScriptKind.TSX : ts.ScriptKind.TS);
|
|
99
|
+
const { addedLines, sourceFile } = preamble;
|
|
103
100
|
const moduleScope = collectModuleScopeBindings(sourceFile);
|
|
104
101
|
if (moduleScope.size === 0)
|
|
105
102
|
return [];
|
|
@@ -123,13 +120,10 @@ function findingsForFile(file, path, readOriginal) {
|
|
|
123
120
|
return findings;
|
|
124
121
|
}
|
|
125
122
|
export function analyzeSharedStateMutation(files, readOriginal) {
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
findings.push(...findingsForFile(file, path, readOriginal));
|
|
132
|
-
}
|
|
133
|
-
return findings;
|
|
123
|
+
return runFileAnalyzer(files, readOriginal, (file, path, readOriginal) => {
|
|
124
|
+
if (!TS_FILE.test(path))
|
|
125
|
+
return [];
|
|
126
|
+
return findingsForFile(file, path, readOriginal);
|
|
127
|
+
});
|
|
134
128
|
}
|
|
135
129
|
//# sourceMappingURL=shared-state.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"shared-state.js","sourceRoot":"","sources":["../../src/delegate-gate/shared-state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"shared-state.js","sourceRoot":"","sources":["../../src/delegate-gate/shared-state.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
import ts from "typescript";
|
|
2
2
|
import { reportedPath } from "./diff-parser.js";
|
|
3
|
-
import {
|
|
3
|
+
import { findingPreamble } from "./file-driver.js";
|
|
4
4
|
const TEST_FILE = /\.test\.(ts|tsx)$/;
|
|
5
5
|
function findExpectChains(sourceFile) {
|
|
6
6
|
const chains = [];
|
|
@@ -203,12 +203,10 @@ function describeLocalReplicaCall(chain, importedNames, localFunctionNames) {
|
|
|
203
203
|
return `expect(${actual.getText().slice(0, 80)}).${matcherName}(...) calls a function declared locally in this test file, never imported — it may assert against a hand-copied replica rather than the code under test`;
|
|
204
204
|
}
|
|
205
205
|
function findingsForFile(file, path, readOriginal) {
|
|
206
|
-
const
|
|
207
|
-
|
|
208
|
-
if (addedLines.size === 0)
|
|
206
|
+
const preamble = findingPreamble(file, path, readOriginal, { tsx: false });
|
|
207
|
+
if (preamble === null)
|
|
209
208
|
return [];
|
|
210
|
-
const
|
|
211
|
-
const sourceFile = ts.createSourceFile(path, content, ts.ScriptTarget.Latest, true, ts.ScriptKind.TS);
|
|
209
|
+
const { addedLines, sourceFile } = preamble;
|
|
212
210
|
const importedNames = collectImportedNames(sourceFile);
|
|
213
211
|
const localFunctionNames = collectLocallyDeclaredFunctionNames(sourceFile);
|
|
214
212
|
const findings = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-assertions.js","sourceRoot":"","sources":["../../src/delegate-gate/test-assertions.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,YAAY,CAAC;AAE5B,OAAO,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAChD,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"test-assertions.js","sourceRoot":"","sources":["../../src/delegate-gate/test-assertions.ts"],"names":[],"mappings":"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"}
|