@promptwheel/core 0.7.22 → 0.7.34
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/codebase-index/ast-analysis.d.ts +33 -2
- package/dist/codebase-index/ast-analysis.d.ts.map +1 -1
- package/dist/codebase-index/ast-analysis.js +457 -2
- package/dist/codebase-index/ast-analysis.js.map +1 -1
- package/dist/codebase-index/ast-cache.d.ts +9 -1
- package/dist/codebase-index/ast-cache.d.ts.map +1 -1
- package/dist/codebase-index/ast-cache.js.map +1 -1
- package/dist/codebase-index/ast-patterns.d.ts +24 -4
- package/dist/codebase-index/ast-patterns.d.ts.map +1 -1
- package/dist/codebase-index/ast-patterns.js +274 -10
- package/dist/codebase-index/ast-patterns.js.map +1 -1
- package/dist/codebase-index/dead-code.d.ts +37 -4
- package/dist/codebase-index/dead-code.d.ts.map +1 -1
- package/dist/codebase-index/dead-code.js +152 -17
- package/dist/codebase-index/dead-code.js.map +1 -1
- package/dist/codebase-index/index.d.ts +4 -2
- package/dist/codebase-index/index.d.ts.map +1 -1
- package/dist/codebase-index/index.js +129 -14
- package/dist/codebase-index/index.js.map +1 -1
- package/dist/codebase-index/shared.d.ts +31 -0
- package/dist/codebase-index/shared.d.ts.map +1 -1
- package/dist/codebase-index/shared.js +50 -0
- package/dist/codebase-index/shared.js.map +1 -1
- package/dist/dedup/shared.d.ts +14 -0
- package/dist/dedup/shared.d.ts.map +1 -1
- package/dist/dedup/shared.js +40 -0
- package/dist/dedup/shared.js.map +1 -1
- package/dist/learnings/shared.d.ts +1 -1
- package/dist/learnings/shared.d.ts.map +1 -1
- package/dist/learnings/shared.js.map +1 -1
- package/dist/proposals/blueprint.d.ts +68 -0
- package/dist/proposals/blueprint.d.ts.map +1 -0
- package/dist/proposals/blueprint.js +292 -0
- package/dist/proposals/blueprint.js.map +1 -0
- package/dist/proposals/shared.d.ts +30 -2
- package/dist/proposals/shared.d.ts.map +1 -1
- package/dist/proposals/shared.js +58 -11
- package/dist/proposals/shared.js.map +1 -1
- package/dist/proposals/step-classifier.d.ts +32 -0
- package/dist/proposals/step-classifier.d.ts.map +1 -0
- package/dist/proposals/step-classifier.js +49 -0
- package/dist/proposals/step-classifier.js.map +1 -0
- package/dist/proposals/trajectory-critic.d.ts +35 -0
- package/dist/proposals/trajectory-critic.d.ts.map +1 -0
- package/dist/proposals/trajectory-critic.js +211 -0
- package/dist/proposals/trajectory-critic.js.map +1 -0
- package/dist/repos/tickets.d.ts +2 -0
- package/dist/repos/tickets.d.ts.map +1 -1
- package/dist/repos/tickets.js.map +1 -1
- package/dist/scout/index.d.ts.map +1 -1
- package/dist/scout/index.js +10 -1
- package/dist/scout/index.js.map +1 -1
- package/dist/scout/prompt.d.ts.map +1 -1
- package/dist/scout/prompt.js +7 -1
- package/dist/scout/prompt.js.map +1 -1
- package/dist/scout/runner.d.ts.map +1 -1
- package/dist/scout/runner.js +1 -0
- package/dist/scout/runner.js.map +1 -1
- package/dist/scout/types.d.ts +20 -1
- package/dist/scout/types.d.ts.map +1 -1
- package/dist/scout/types.js +4 -2
- package/dist/scout/types.js.map +1 -1
- package/dist/sectors/shared.d.ts +17 -0
- package/dist/sectors/shared.d.ts.map +1 -1
- package/dist/sectors/shared.js +65 -0
- package/dist/sectors/shared.js.map +1 -1
- package/dist/services/scout.d.ts +2 -0
- package/dist/services/scout.d.ts.map +1 -1
- package/dist/services/scout.js +1 -0
- package/dist/services/scout.js.map +1 -1
- package/dist/trajectory/io.d.ts +32 -0
- package/dist/trajectory/io.d.ts.map +1 -0
- package/dist/trajectory/io.js +201 -0
- package/dist/trajectory/io.js.map +1 -0
- package/dist/trajectory/shared.d.ts +50 -0
- package/dist/trajectory/shared.d.ts.map +1 -1
- package/dist/trajectory/shared.js +178 -0
- package/dist/trajectory/shared.js.map +1 -1
- package/dist/waves/conflict.d.ts +130 -0
- package/dist/waves/conflict.d.ts.map +1 -0
- package/dist/waves/conflict.js +400 -0
- package/dist/waves/conflict.js.map +1 -0
- package/dist/waves/merge.d.ts +75 -0
- package/dist/waves/merge.d.ts.map +1 -0
- package/dist/waves/merge.js +305 -0
- package/dist/waves/merge.js.map +1 -0
- package/dist/waves/shared.d.ts +6 -102
- package/dist/waves/shared.d.ts.map +1 -1
- package/dist/waves/shared.js +16 -346
- package/dist/waves/shared.js.map +1 -1
- package/package.json +17 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-cache.d.ts","sourceRoot":"","sources":["../../src/codebase-index/ast-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ast-cache.d.ts","sourceRoot":"","sources":["../../src/codebase-index/ast-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAIH,OAAO,KAAK,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAMlF,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,EAAE,CAAC;IAClB,OAAO,EAAE,WAAW,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,UAAU,EAAE,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,qEAAqE;IACrE,OAAO,CAAC,EAAE,WAAW,EAAE,CAAC;IACxB,2DAA2D;IAC3D,SAAS,CAAC,EAAE,QAAQ,EAAE,CAAC;IACvB,0EAA0E;IAC1E,aAAa,CAAC,EAAE,MAAM,EAAE,CAAC;IACzB,4EAA4E;IAC5E,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC1C;AAED,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,aAAa,CAAC,CAAC;AAUrD,iFAAiF;AACjF,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,GAAG,QAAQ,CAYvD;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,EAAE,YAAY,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CAwBhG;AAED,gEAAgE;AAChE,wBAAgB,cAAc,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,OAAO,CAGrG;AAED,mFAAmF;AACnF,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,aAAa,GAAG,SAAS,EAAE,cAAc,EAAE,MAAM,GAAG,OAAO,CAGnG"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-cache.js","sourceRoot":"","sources":["../../src/codebase-index/ast-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"ast-cache.js","sourceRoot":"","sources":["../../src/codebase-index/ast-cache.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,KAAK,EAAE,MAAM,SAAS,CAAC;AAC9B,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AA2BlC,8EAA8E;AAC9E,MAAM;AACN,8EAA8E;AAE9E,SAAS,YAAY,CAAC,QAAgB;IACpC,OAAO,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE,cAAc,EAAE,gBAAgB,CAAC,CAAC;AAC/D,CAAC;AAED,iFAAiF;AACjF,MAAM,UAAU,YAAY,CAAC,QAAgB;IAC3C,IAAI,CAAC;QACH,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;QACzC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;YAAE,OAAO,EAAE,CAAC;QACzC,MAAM,GAAG,GAAG,EAAE,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;QAChD,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE;YAAE,OAAO,EAAE,CAAC;QAC3B,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC7B,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC;YAAE,OAAO,EAAE,CAAC;QACxE,OAAO,IAAgB,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,EAAE,CAAC;IACZ,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,YAAY,CAAC,QAAgB,EAAE,KAAe,EAAE,YAA0B;IACxF,MAAM,SAAS,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,SAAS,GAAG,MAAM,CAAC;IAC/B,IAAI,CAAC;QACH,sBAAsB;QACtB,MAAM,MAAM,GAAa,EAAE,CAAC;QAC5B,KAAK,MAAM,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE,CAAC;YACrD,IAAI,CAAC,YAAY,IAAI,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC/C,MAAM,CAAC,OAAO,CAAC,GAAG,KAAK,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,0BAA0B;QAC1B,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QACpC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC;YACxB,EAAE,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QACzC,CAAC;QAED,EAAE,CAAC,aAAa,CAAC,GAAG,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC;QAC9C,EAAE,CAAC,UAAU,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;IAChC,CAAC;IAAC,MAAM,CAAC;QACP,mCAAmC;QACnC,IAAI,CAAC;YAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;IAC5E,CAAC;AACH,CAAC;AAED,gEAAgE;AAChE,MAAM,UAAU,cAAc,CAAC,KAAgC,EAAE,KAAa,EAAE,IAAY;IAC1F,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,KAAK,CAAC,KAAK,KAAK,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,IAAI,CAAC;AACtD,CAAC;AAED,mFAAmF;AACnF,MAAM,UAAU,iBAAiB,CAAC,KAAgC,EAAE,cAAsB;IACxF,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,OAAO,KAAK,CAAC,eAAe,KAAK,cAAc,CAAC;AAClD,CAAC"}
|
|
@@ -6,21 +6,41 @@
|
|
|
6
6
|
* the scout prompt as pre-identified targets.
|
|
7
7
|
*/
|
|
8
8
|
import type { AstGrepNode } from './ast-analysis.js';
|
|
9
|
-
import type { AstFinding } from './shared.js';
|
|
9
|
+
import type { AstFinding, SymbolRange } from './shared.js';
|
|
10
10
|
export type { AstFinding } from './shared.js';
|
|
11
|
-
/**
|
|
11
|
+
/**
|
|
12
|
+
* Global findings version. Bump to force re-scan of ALL cached entries.
|
|
13
|
+
* Prefer bumping individual pattern `version` fields instead — that only
|
|
14
|
+
* re-scans files matching the changed pattern's language.
|
|
15
|
+
*/
|
|
12
16
|
export declare const FINDINGS_VERSION = 1;
|
|
13
17
|
export interface AstPattern {
|
|
14
18
|
id: string;
|
|
19
|
+
/** Per-pattern version. Bump to re-scan only files matching this pattern's langs. */
|
|
20
|
+
version: number;
|
|
15
21
|
langs: string[];
|
|
16
|
-
scan(root: AstGrepNode, langKey: string, content: string): AstFinding[];
|
|
22
|
+
scan(root: AstGrepNode, langKey: string, content: string, symbols?: SymbolRange[]): AstFinding[];
|
|
17
23
|
}
|
|
18
24
|
/** Return all registered AST patterns. */
|
|
19
25
|
export declare function getPatterns(): AstPattern[];
|
|
26
|
+
/**
|
|
27
|
+
* Compute per-pattern version map: `{ patternId: version }`.
|
|
28
|
+
* Used by the cache to determine which patterns have changed since last scan.
|
|
29
|
+
*/
|
|
30
|
+
export declare function getPatternVersions(): Record<string, number>;
|
|
31
|
+
/**
|
|
32
|
+
* Check if a cached entry's pattern versions are current for the given language.
|
|
33
|
+
* Returns true if all patterns applicable to `langFamily` have matching versions.
|
|
34
|
+
* Missing entries (new patterns added since cache) return false.
|
|
35
|
+
*/
|
|
36
|
+
export declare function arePatternVersionsCurrent(cachedVersions: Record<string, number> | undefined, langFamily: string): boolean;
|
|
20
37
|
/**
|
|
21
38
|
* Run matching patterns against an AST root. Filters by lang family,
|
|
22
39
|
* runs each pattern's scan(), and combines findings. Early-exits if
|
|
23
40
|
* findings exceed MAX_FINDINGS_PER_FILE.
|
|
41
|
+
*
|
|
42
|
+
* When `symbols` are provided (from the AST cache), patterns can attribute
|
|
43
|
+
* findings to specific functions/classes for more actionable output.
|
|
24
44
|
*/
|
|
25
|
-
export declare function scanPatterns(root: AstGrepNode, langKey: string, content: string, patterns: AstPattern[]): AstFinding[];
|
|
45
|
+
export declare function scanPatterns(root: AstGrepNode, langKey: string, content: string, patterns: AstPattern[], symbols?: SymbolRange[]): AstFinding[];
|
|
26
46
|
//# sourceMappingURL=ast-patterns.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-patterns.d.ts","sourceRoot":"","sources":["../../src/codebase-index/ast-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;
|
|
1
|
+
{"version":3,"file":"ast-patterns.d.ts","sourceRoot":"","sources":["../../src/codebase-index/ast-patterns.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAErD,OAAO,KAAK,EAAE,UAAU,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAE3D,YAAY,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAE9C;;;;GAIG;AACH,eAAO,MAAM,gBAAgB,IAAI,CAAC;AAMlC,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,MAAM,CAAC;IACX,qFAAqF;IACrF,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,EAAE,GAAG,UAAU,EAAE,CAAC;CAClG;AAwYD,0CAA0C;AAC1C,wBAAgB,WAAW,IAAI,UAAU,EAAE,CAE1C;AAED;;;GAGG;AACH,wBAAgB,kBAAkB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAM3D;AAED;;;;GAIG;AACH,wBAAgB,yBAAyB,CACvC,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,SAAS,EAClD,UAAU,EAAE,MAAM,GACjB,OAAO,CAOT;AAMD;;;;;;;GAOG;AACH,wBAAgB,YAAY,CAC1B,IAAI,EAAE,WAAW,EACjB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,UAAU,EAAE,EACtB,OAAO,CAAC,EAAE,WAAW,EAAE,GACtB,UAAU,EAAE,CAYd"}
|
|
@@ -6,7 +6,11 @@
|
|
|
6
6
|
* the scout prompt as pre-identified targets.
|
|
7
7
|
*/
|
|
8
8
|
import { findAllByKind, getLangFamily } from './ast-analysis.js';
|
|
9
|
-
/**
|
|
9
|
+
/**
|
|
10
|
+
* Global findings version. Bump to force re-scan of ALL cached entries.
|
|
11
|
+
* Prefer bumping individual pattern `version` fields instead — that only
|
|
12
|
+
* re-scans files matching the changed pattern's language.
|
|
13
|
+
*/
|
|
10
14
|
export const FINDINGS_VERSION = 1;
|
|
11
15
|
// ---------------------------------------------------------------------------
|
|
12
16
|
// Helpers
|
|
@@ -23,6 +27,21 @@ function countLinesBefore(content, substring) {
|
|
|
23
27
|
}
|
|
24
28
|
return line;
|
|
25
29
|
}
|
|
30
|
+
/** Find the enclosing symbol for a given 1-based line number. */
|
|
31
|
+
function findEnclosingSymbol(line, symbols) {
|
|
32
|
+
if (line === null || !symbols?.length)
|
|
33
|
+
return undefined;
|
|
34
|
+
return symbols.find(s => s.startLine <= line && line <= s.endLine);
|
|
35
|
+
}
|
|
36
|
+
/** Annotate a finding with enclosing symbol info. */
|
|
37
|
+
function annotateWithSymbol(finding, symbols) {
|
|
38
|
+
const enclosing = findEnclosingSymbol(finding.line, symbols);
|
|
39
|
+
if (enclosing) {
|
|
40
|
+
finding.symbolName = enclosing.name;
|
|
41
|
+
finding.symbolKind = enclosing.kind;
|
|
42
|
+
}
|
|
43
|
+
return finding;
|
|
44
|
+
}
|
|
26
45
|
/** Max findings per file before early-exit. */
|
|
27
46
|
const MAX_FINDINGS_PER_FILE = 30;
|
|
28
47
|
// ---------------------------------------------------------------------------
|
|
@@ -30,8 +49,9 @@ const MAX_FINDINGS_PER_FILE = 30;
|
|
|
30
49
|
// ---------------------------------------------------------------------------
|
|
31
50
|
const emptyCatchPattern = {
|
|
32
51
|
id: 'empty-catch',
|
|
52
|
+
version: 1,
|
|
33
53
|
langs: ['js'],
|
|
34
|
-
scan(root, _langKey, content) {
|
|
54
|
+
scan(root, _langKey, content, symbols) {
|
|
35
55
|
const findings = [];
|
|
36
56
|
const catchNodes = findAllByKind(root, 'catch_clause');
|
|
37
57
|
for (const node of catchNodes) {
|
|
@@ -44,12 +64,17 @@ const emptyCatchPattern = {
|
|
|
44
64
|
// Empty or comment-only body
|
|
45
65
|
// eslint-disable-next-line security/detect-unsafe-regex
|
|
46
66
|
if (body === '' || /^(\/\/[^\n]*\n?\s*)*$/.test(body) || /^\/\*[\s\S]*\*\/\s*$/.test(body)) {
|
|
67
|
+
const line = countLinesBefore(content, text);
|
|
68
|
+
const enclosing = findEnclosingSymbol(line, symbols);
|
|
47
69
|
findings.push({
|
|
48
70
|
patternId: 'empty-catch',
|
|
49
|
-
message:
|
|
50
|
-
|
|
71
|
+
message: enclosing
|
|
72
|
+
? `empty catch in ${enclosing.name}()`
|
|
73
|
+
: 'catch clause with empty body',
|
|
74
|
+
line,
|
|
51
75
|
severity: 'medium',
|
|
52
76
|
category: 'fix',
|
|
77
|
+
...(enclosing ? { symbolName: enclosing.name, symbolKind: enclosing.kind } : {}),
|
|
53
78
|
});
|
|
54
79
|
}
|
|
55
80
|
}
|
|
@@ -58,6 +83,7 @@ const emptyCatchPattern = {
|
|
|
58
83
|
};
|
|
59
84
|
const typeAssertionHeavyPattern = {
|
|
60
85
|
id: 'type-assertion-heavy',
|
|
86
|
+
version: 1,
|
|
61
87
|
langs: ['js'],
|
|
62
88
|
scan(root, _langKey, _content) {
|
|
63
89
|
const asNodes = findAllByKind(root, 'as_expression');
|
|
@@ -75,13 +101,37 @@ const typeAssertionHeavyPattern = {
|
|
|
75
101
|
};
|
|
76
102
|
const largeFunctionPattern = {
|
|
77
103
|
id: 'large-function',
|
|
104
|
+
version: 1,
|
|
78
105
|
langs: ['js', 'python'],
|
|
79
|
-
scan(root, langKey, content) {
|
|
106
|
+
scan(root, langKey, content, symbols) {
|
|
80
107
|
const findings = [];
|
|
81
108
|
const family = getLangFamily(langKey);
|
|
82
109
|
const kinds = family === 'python'
|
|
83
110
|
? ['function_definition']
|
|
84
111
|
: ['function_declaration', 'method_definition', 'arrow_function'];
|
|
112
|
+
// If symbols available, use them directly for size detection (more accurate)
|
|
113
|
+
if (symbols?.length) {
|
|
114
|
+
for (const sym of symbols) {
|
|
115
|
+
if (sym.kind !== 'function')
|
|
116
|
+
continue;
|
|
117
|
+
const lineCount = sym.endLine - sym.startLine + 1;
|
|
118
|
+
if (lineCount > 50) {
|
|
119
|
+
findings.push({
|
|
120
|
+
patternId: 'large-function',
|
|
121
|
+
message: `function ${sym.name} is ${lineCount} lines — consider splitting`,
|
|
122
|
+
line: sym.startLine,
|
|
123
|
+
severity: 'medium',
|
|
124
|
+
category: 'refactor',
|
|
125
|
+
symbolName: sym.name,
|
|
126
|
+
symbolKind: sym.kind,
|
|
127
|
+
});
|
|
128
|
+
}
|
|
129
|
+
if (findings.length >= MAX_FINDINGS_PER_FILE)
|
|
130
|
+
return findings;
|
|
131
|
+
}
|
|
132
|
+
return findings;
|
|
133
|
+
}
|
|
134
|
+
// Fallback: AST traversal when no symbol data
|
|
85
135
|
for (const kind of kinds) {
|
|
86
136
|
const nodes = findAllByKind(root, kind);
|
|
87
137
|
for (const node of nodes) {
|
|
@@ -110,6 +160,7 @@ const largeFunctionPattern = {
|
|
|
110
160
|
};
|
|
111
161
|
const anyAnnotationPattern = {
|
|
112
162
|
id: 'any-annotation',
|
|
163
|
+
version: 1,
|
|
113
164
|
langs: ['js'],
|
|
114
165
|
scan(root, _langKey, _content) {
|
|
115
166
|
const predefinedNodes = findAllByKind(root, 'predefined_type');
|
|
@@ -132,25 +183,202 @@ const anyAnnotationPattern = {
|
|
|
132
183
|
};
|
|
133
184
|
const bareExceptPattern = {
|
|
134
185
|
id: 'bare-except',
|
|
186
|
+
version: 1,
|
|
135
187
|
langs: ['python'],
|
|
136
|
-
scan(root, _langKey, content) {
|
|
188
|
+
scan(root, _langKey, content, symbols) {
|
|
137
189
|
const findings = [];
|
|
138
190
|
const exceptNodes = findAllByKind(root, 'except_clause');
|
|
139
191
|
for (const node of exceptNodes) {
|
|
140
192
|
const text = node.text();
|
|
141
193
|
if (/^except\s*:/.test(text)) {
|
|
194
|
+
const line = countLinesBefore(content, text);
|
|
195
|
+
const enclosing = findEnclosingSymbol(line, symbols);
|
|
142
196
|
findings.push({
|
|
143
197
|
patternId: 'bare-except',
|
|
144
|
-
message:
|
|
145
|
-
|
|
198
|
+
message: enclosing
|
|
199
|
+
? `bare except in ${enclosing.name}() — specify an exception type`
|
|
200
|
+
: 'bare except clause — specify an exception type',
|
|
201
|
+
line,
|
|
146
202
|
severity: 'high',
|
|
147
203
|
category: 'fix',
|
|
204
|
+
...(enclosing ? { symbolName: enclosing.name, symbolKind: enclosing.kind } : {}),
|
|
148
205
|
});
|
|
149
206
|
}
|
|
150
207
|
}
|
|
151
208
|
return findings;
|
|
152
209
|
},
|
|
153
210
|
};
|
|
211
|
+
const consoleLogPattern = {
|
|
212
|
+
id: 'console-log',
|
|
213
|
+
version: 1,
|
|
214
|
+
langs: ['js'],
|
|
215
|
+
scan(root, _langKey, content, symbols) {
|
|
216
|
+
const findings = [];
|
|
217
|
+
const callNodes = findAllByKind(root, 'call_expression');
|
|
218
|
+
for (const node of callNodes) {
|
|
219
|
+
const text = node.text();
|
|
220
|
+
if (/^console\.(log|warn|error|debug|info|trace)\s*\(/.test(text)) {
|
|
221
|
+
const line = countLinesBefore(content, text);
|
|
222
|
+
findings.push(annotateWithSymbol({
|
|
223
|
+
patternId: 'console-log',
|
|
224
|
+
message: `console.${text.match(/console\.(\w+)/)?.[1] ?? 'log'} statement — remove or replace with proper logging`,
|
|
225
|
+
line,
|
|
226
|
+
severity: 'low',
|
|
227
|
+
category: 'cleanup',
|
|
228
|
+
}, symbols));
|
|
229
|
+
}
|
|
230
|
+
if (findings.length >= MAX_FINDINGS_PER_FILE)
|
|
231
|
+
return findings;
|
|
232
|
+
}
|
|
233
|
+
return findings;
|
|
234
|
+
},
|
|
235
|
+
};
|
|
236
|
+
const hardcodedSecretPattern = {
|
|
237
|
+
id: 'hardcoded-secret',
|
|
238
|
+
version: 1,
|
|
239
|
+
langs: ['js', 'python'],
|
|
240
|
+
scan(_root, _langKey, content, symbols) {
|
|
241
|
+
const findings = [];
|
|
242
|
+
const secretRegex = /(?:api[_-]?key|secret|password|token|auth|credential)s?\s*[:=]\s*['"][^'"]{8,}['"]/gi;
|
|
243
|
+
let match;
|
|
244
|
+
while ((match = secretRegex.exec(content)) !== null) {
|
|
245
|
+
// Skip test files and example/mock values
|
|
246
|
+
if (/test|spec|mock|example|fixture|xxx|placeholder/i.test(match[0]))
|
|
247
|
+
continue;
|
|
248
|
+
const line = countLinesBefore(content, match[0]);
|
|
249
|
+
findings.push(annotateWithSymbol({
|
|
250
|
+
patternId: 'hardcoded-secret',
|
|
251
|
+
message: 'possible hardcoded secret — use environment variable instead',
|
|
252
|
+
line,
|
|
253
|
+
severity: 'high',
|
|
254
|
+
category: 'security',
|
|
255
|
+
}, symbols));
|
|
256
|
+
if (findings.length >= MAX_FINDINGS_PER_FILE)
|
|
257
|
+
return findings;
|
|
258
|
+
}
|
|
259
|
+
return findings;
|
|
260
|
+
},
|
|
261
|
+
};
|
|
262
|
+
const todoFixmePattern = {
|
|
263
|
+
id: 'todo-fixme',
|
|
264
|
+
version: 1,
|
|
265
|
+
langs: ['js', 'python'],
|
|
266
|
+
scan(root, _langKey, content, symbols) {
|
|
267
|
+
const findings = [];
|
|
268
|
+
const commentKinds = ['comment', 'line_comment', 'block_comment'];
|
|
269
|
+
for (const kind of commentKinds) {
|
|
270
|
+
const nodes = findAllByKind(root, kind);
|
|
271
|
+
for (const node of nodes) {
|
|
272
|
+
const text = node.text();
|
|
273
|
+
const match = text.match(/\b(TODO|FIXME|HACK|XXX)\b/i);
|
|
274
|
+
if (match) {
|
|
275
|
+
const line = countLinesBefore(content, text);
|
|
276
|
+
findings.push(annotateWithSymbol({
|
|
277
|
+
patternId: 'todo-fixme',
|
|
278
|
+
message: `${match[1].toUpperCase()}: ${text.replace(/^\/[/*]\s*/, '').replace(/\*\/\s*$/, '').trim().slice(0, 80)}`,
|
|
279
|
+
line,
|
|
280
|
+
severity: 'low',
|
|
281
|
+
category: 'cleanup',
|
|
282
|
+
}, symbols));
|
|
283
|
+
}
|
|
284
|
+
if (findings.length >= MAX_FINDINGS_PER_FILE)
|
|
285
|
+
return findings;
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
return findings;
|
|
289
|
+
},
|
|
290
|
+
};
|
|
291
|
+
const deeplyNestedPattern = {
|
|
292
|
+
id: 'deeply-nested',
|
|
293
|
+
version: 1,
|
|
294
|
+
langs: ['js', 'python'],
|
|
295
|
+
scan(_root, _langKey, content, symbols) {
|
|
296
|
+
const findings = [];
|
|
297
|
+
const lines = content.split('\n');
|
|
298
|
+
let maxDepth = 0;
|
|
299
|
+
let maxDepthLine = 0;
|
|
300
|
+
let currentDepthStart = 0;
|
|
301
|
+
for (let i = 0; i < lines.length; i++) {
|
|
302
|
+
const line = lines[i];
|
|
303
|
+
const stripped = line.replace(/^\s*/, '');
|
|
304
|
+
if (stripped.length === 0)
|
|
305
|
+
continue;
|
|
306
|
+
const indent = line.length - stripped.length;
|
|
307
|
+
// Estimate nesting depth from indentation (2-space or 4-space)
|
|
308
|
+
const depth = Math.floor(indent / 2);
|
|
309
|
+
if (depth > maxDepth) {
|
|
310
|
+
maxDepth = depth;
|
|
311
|
+
maxDepthLine = i + 1; // 1-based
|
|
312
|
+
currentDepthStart = i + 1;
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
if (maxDepth >= 8) { // ~4 logical nesting levels at 2-space indent
|
|
316
|
+
findings.push(annotateWithSymbol({
|
|
317
|
+
patternId: 'deeply-nested',
|
|
318
|
+
message: `deeply nested code (indent level ${maxDepth}) — consider extracting or flattening`,
|
|
319
|
+
line: maxDepthLine,
|
|
320
|
+
severity: 'medium',
|
|
321
|
+
category: 'refactor',
|
|
322
|
+
}, symbols));
|
|
323
|
+
}
|
|
324
|
+
return findings;
|
|
325
|
+
},
|
|
326
|
+
};
|
|
327
|
+
const nonNullAssertionPattern = {
|
|
328
|
+
id: 'non-null-assertion-heavy',
|
|
329
|
+
version: 1,
|
|
330
|
+
langs: ['js'],
|
|
331
|
+
scan(root, _langKey, _content) {
|
|
332
|
+
const nodes = findAllByKind(root, 'non_null_expression');
|
|
333
|
+
if (nodes.length > 5) {
|
|
334
|
+
return [{
|
|
335
|
+
patternId: 'non-null-assertion-heavy',
|
|
336
|
+
message: `${nodes.length} non-null assertions (!) — consider null checks or optional chaining`,
|
|
337
|
+
line: null,
|
|
338
|
+
severity: 'medium',
|
|
339
|
+
category: 'types',
|
|
340
|
+
}];
|
|
341
|
+
}
|
|
342
|
+
return [];
|
|
343
|
+
},
|
|
344
|
+
};
|
|
345
|
+
const unreachableCodePattern = {
|
|
346
|
+
id: 'unreachable-code',
|
|
347
|
+
version: 1,
|
|
348
|
+
langs: ['js'],
|
|
349
|
+
scan(root, _langKey, content, symbols) {
|
|
350
|
+
const findings = [];
|
|
351
|
+
// Look for statement blocks where a return/throw is followed by more statements
|
|
352
|
+
const blockKinds = ['statement_block'];
|
|
353
|
+
for (const blockKind of blockKinds) {
|
|
354
|
+
const blocks = findAllByKind(root, blockKind);
|
|
355
|
+
for (const block of blocks) {
|
|
356
|
+
const children = block.children().filter(c => c.isNamed());
|
|
357
|
+
for (let i = 0; i < children.length - 1; i++) {
|
|
358
|
+
const kind = children[i].kind();
|
|
359
|
+
if (kind === 'return_statement' || kind === 'throw_statement') {
|
|
360
|
+
// Next sibling is unreachable
|
|
361
|
+
const nextText = children[i + 1].text().trim();
|
|
362
|
+
if (nextText && nextText !== '}') {
|
|
363
|
+
const line = countLinesBefore(content, children[i + 1].text());
|
|
364
|
+
findings.push(annotateWithSymbol({
|
|
365
|
+
patternId: 'unreachable-code',
|
|
366
|
+
message: `unreachable code after ${kind === 'return_statement' ? 'return' : 'throw'}`,
|
|
367
|
+
line,
|
|
368
|
+
severity: 'medium',
|
|
369
|
+
category: 'fix',
|
|
370
|
+
}, symbols));
|
|
371
|
+
}
|
|
372
|
+
break; // Only report first unreachable in each block
|
|
373
|
+
}
|
|
374
|
+
}
|
|
375
|
+
if (findings.length >= MAX_FINDINGS_PER_FILE)
|
|
376
|
+
return findings;
|
|
377
|
+
}
|
|
378
|
+
}
|
|
379
|
+
return findings;
|
|
380
|
+
},
|
|
381
|
+
};
|
|
154
382
|
// ---------------------------------------------------------------------------
|
|
155
383
|
// Registry
|
|
156
384
|
// ---------------------------------------------------------------------------
|
|
@@ -160,11 +388,44 @@ const PATTERNS = [
|
|
|
160
388
|
largeFunctionPattern,
|
|
161
389
|
anyAnnotationPattern,
|
|
162
390
|
bareExceptPattern,
|
|
391
|
+
consoleLogPattern,
|
|
392
|
+
hardcodedSecretPattern,
|
|
393
|
+
todoFixmePattern,
|
|
394
|
+
deeplyNestedPattern,
|
|
395
|
+
nonNullAssertionPattern,
|
|
396
|
+
unreachableCodePattern,
|
|
163
397
|
];
|
|
164
398
|
/** Return all registered AST patterns. */
|
|
165
399
|
export function getPatterns() {
|
|
166
400
|
return PATTERNS;
|
|
167
401
|
}
|
|
402
|
+
/**
|
|
403
|
+
* Compute per-pattern version map: `{ patternId: version }`.
|
|
404
|
+
* Used by the cache to determine which patterns have changed since last scan.
|
|
405
|
+
*/
|
|
406
|
+
export function getPatternVersions() {
|
|
407
|
+
const versions = {};
|
|
408
|
+
for (const p of PATTERNS) {
|
|
409
|
+
versions[p.id] = p.version;
|
|
410
|
+
}
|
|
411
|
+
return versions;
|
|
412
|
+
}
|
|
413
|
+
/**
|
|
414
|
+
* Check if a cached entry's pattern versions are current for the given language.
|
|
415
|
+
* Returns true if all patterns applicable to `langFamily` have matching versions.
|
|
416
|
+
* Missing entries (new patterns added since cache) return false.
|
|
417
|
+
*/
|
|
418
|
+
export function arePatternVersionsCurrent(cachedVersions, langFamily) {
|
|
419
|
+
if (!cachedVersions)
|
|
420
|
+
return false;
|
|
421
|
+
for (const p of PATTERNS) {
|
|
422
|
+
if (!p.langs.includes(langFamily))
|
|
423
|
+
continue;
|
|
424
|
+
if (cachedVersions[p.id] !== p.version)
|
|
425
|
+
return false;
|
|
426
|
+
}
|
|
427
|
+
return true;
|
|
428
|
+
}
|
|
168
429
|
// ---------------------------------------------------------------------------
|
|
169
430
|
// Scanner
|
|
170
431
|
// ---------------------------------------------------------------------------
|
|
@@ -172,14 +433,17 @@ export function getPatterns() {
|
|
|
172
433
|
* Run matching patterns against an AST root. Filters by lang family,
|
|
173
434
|
* runs each pattern's scan(), and combines findings. Early-exits if
|
|
174
435
|
* findings exceed MAX_FINDINGS_PER_FILE.
|
|
436
|
+
*
|
|
437
|
+
* When `symbols` are provided (from the AST cache), patterns can attribute
|
|
438
|
+
* findings to specific functions/classes for more actionable output.
|
|
175
439
|
*/
|
|
176
|
-
export function scanPatterns(root, langKey, content, patterns) {
|
|
440
|
+
export function scanPatterns(root, langKey, content, patterns, symbols) {
|
|
177
441
|
const family = getLangFamily(langKey);
|
|
178
442
|
const findings = [];
|
|
179
443
|
for (const pattern of patterns) {
|
|
180
444
|
if (!pattern.langs.includes(family))
|
|
181
445
|
continue;
|
|
182
|
-
const patternFindings = pattern.scan(root, langKey, content);
|
|
446
|
+
const patternFindings = pattern.scan(root, langKey, content, symbols);
|
|
183
447
|
findings.push(...patternFindings);
|
|
184
448
|
if (findings.length >= MAX_FINDINGS_PER_FILE)
|
|
185
449
|
break;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ast-patterns.js","sourceRoot":"","sources":["../../src/codebase-index/ast-patterns.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"ast-patterns.js","sourceRoot":"","sources":["../../src/codebase-index/ast-patterns.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,15 +4,48 @@
|
|
|
4
4
|
* Cross-module export-import matching to find unused exports and
|
|
5
5
|
* structural anti-patterns. Pure functions — no I/O.
|
|
6
6
|
*/
|
|
7
|
-
import type { ModuleEntry, DeadExportEntry, StructuralIssue, ExportEntry } from './shared.js';
|
|
7
|
+
import type { ModuleEntry, DeadExportEntry, StructuralIssue, ExportEntry, CallEdge, TypeScriptAnalysis } from './shared.js';
|
|
8
8
|
/**
|
|
9
9
|
* Detect potentially dead exports by comparing each module's exported names
|
|
10
|
-
* against what other modules import.
|
|
11
|
-
*
|
|
10
|
+
* against what other modules import.
|
|
11
|
+
*
|
|
12
|
+
* When `importedBindings` is provided (from AST cache's importedNames), uses
|
|
13
|
+
* accurate binding name matching. Otherwise falls back to specifier path
|
|
14
|
+
* heuristic (less accurate but works without AST data).
|
|
15
|
+
*
|
|
16
|
+
* `namespaceSpecifiers` contains specifier paths that have `import * as ns`
|
|
17
|
+
* usage — all exports from those modules are considered alive.
|
|
12
18
|
*
|
|
13
19
|
* Returns at most `maxResults` entries to keep prompt token count bounded.
|
|
14
20
|
*/
|
|
15
|
-
export declare function detectDeadExports(modules: ModuleEntry[], edges: Record<string, string[]>, exportsByModule: Record<string, ExportEntry[]>, importsByModule: Record<string, string[]>, maxResults?: number): DeadExportEntry[];
|
|
21
|
+
export declare function detectDeadExports(modules: ModuleEntry[], edges: Record<string, string[]>, exportsByModule: Record<string, ExportEntry[]>, importsByModule: Record<string, string[]>, maxResults?: number, importedBindings?: Set<string>, namespaceSpecifiers?: Set<string>): DeadExportEntry[];
|
|
22
|
+
/**
|
|
23
|
+
* Detect exported functions that are never called by any other file.
|
|
24
|
+
* Uses call edge data from the AST cache for higher-confidence results
|
|
25
|
+
* than name-based matching alone.
|
|
26
|
+
*
|
|
27
|
+
* Only flags functions — skips classes, types, variables, and constants
|
|
28
|
+
* since those may be used without explicit "call" edges.
|
|
29
|
+
*/
|
|
30
|
+
export declare function detectDeadFunctions(exportsByFile: Record<string, ExportEntry[]>, callEdgesByFile: Record<string, CallEdge[]>, maxResults?: number): DeadExportEntry[];
|
|
31
|
+
/**
|
|
32
|
+
* Merge ast-grep per-file call edges with ts-morph global call_graph_edges
|
|
33
|
+
* into a unified set of cross-file callee names.
|
|
34
|
+
*
|
|
35
|
+
* ts-morph edges use format `"path:funcName"` for caller and raw expression
|
|
36
|
+
* text for callee. ast-grep edges have `importSource` for cross-file calls.
|
|
37
|
+
* The fused result is a superset: any function name that appears as a callee
|
|
38
|
+
* in either source is considered "called".
|
|
39
|
+
*
|
|
40
|
+
* Returns a Set of callee names that are called from other files.
|
|
41
|
+
*/
|
|
42
|
+
export declare function fuseCallGraphs(callEdgesByFile: Record<string, CallEdge[]>, tsAnalysis?: TypeScriptAnalysis | null): Set<string>;
|
|
43
|
+
/**
|
|
44
|
+
* Enhanced dead function detection using fused call graph data.
|
|
45
|
+
* Combines ast-grep per-file edges with ts-morph global edges to reduce
|
|
46
|
+
* false positives (functions marked dead because ast-grep missed type-resolved calls).
|
|
47
|
+
*/
|
|
48
|
+
export declare function detectDeadFunctionsFused(exportsByFile: Record<string, ExportEntry[]>, callEdgesByFile: Record<string, CallEdge[]>, tsAnalysis?: TypeScriptAnalysis | null, maxResults?: number): DeadExportEntry[];
|
|
16
49
|
/**
|
|
17
50
|
* Detect structural anti-patterns from dependency graph topology.
|
|
18
51
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dead-code.d.ts","sourceRoot":"","sources":["../../src/codebase-index/dead-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,WAAW,
|
|
1
|
+
{"version":3,"file":"dead-code.d.ts","sourceRoot":"","sources":["../../src/codebase-index/dead-code.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,WAAW,EACX,eAAe,EACf,eAAe,EACf,WAAW,EACX,QAAQ,EACR,kBAAkB,EACnB,MAAM,aAAa,CAAC;AAMrB;;;;;;;;;;;;GAYG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAC9C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACzC,UAAU,SAAK,EACf,gBAAgB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,EAC9B,mBAAmB,CAAC,EAAE,GAAG,CAAC,MAAM,CAAC,GAChC,eAAe,EAAE,CA8DnB;AAMD;;;;;;;GAOG;AACH,wBAAgB,mBAAmB,CACjC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAC5C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAC3C,UAAU,SAAK,GACd,eAAe,EAAE,CA4BnB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,cAAc,CAC5B,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAC3C,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,GACrC,GAAG,CAAC,MAAM,CAAC,CAgCb;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CACtC,aAAa,EAAE,MAAM,CAAC,MAAM,EAAE,WAAW,EAAE,CAAC,EAC5C,eAAe,EAAE,MAAM,CAAC,MAAM,EAAE,QAAQ,EAAE,CAAC,EAC3C,UAAU,CAAC,EAAE,kBAAkB,GAAG,IAAI,EACtC,UAAU,SAAK,GACd,eAAe,EAAE,CAkBnB;AAMD;;;;;;;;;;GAUG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EACtC,MAAM,EAAE,MAAM,EAAE,EAAE,EAClB,WAAW,GAAE,MAAM,EAAO,EAC1B,UAAU,SAAK,GACd,eAAe,EAAE,CAkEnB;AAMD,MAAM,WAAW,eAAe;IAC9B,gFAAgF;IAChF,WAAW,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CACrC;AAED;;;;;;;GAOG;AACH,wBAAgB,sBAAsB,CACpC,OAAO,EAAE,WAAW,EAAE,EACtB,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,EAC/B,YAAY,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC,GACrC,eAAe,CAWjB"}
|