sela-core 0.1.0-alpha.38 → 0.1.0-alpha.40
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/boot/bootImpl.d.ts +14 -0
- package/dist/boot/bootImpl.d.ts.map +1 -0
- package/dist/boot/bootImpl.js +64 -0
- package/dist/boot/register.cjs +45 -0
- package/dist/boot/register.d.cts +2 -0
- package/dist/boot/register.d.cts.map +1 -0
- package/dist/boot/register.d.mts +2 -0
- package/dist/boot/register.d.mts.map +1 -0
- package/dist/boot/register.mjs +10 -0
- package/dist/cli/commands/init.js +48 -16
- package/dist/cli/commands/merge.d.ts.map +1 -1
- package/dist/cli/commands/merge.js +5 -0
- package/dist/cli/commands/shadowRegression.js +1 -1
- package/dist/config/ConfigLoader.d.ts.map +1 -1
- package/dist/config/ConfigLoader.js +1 -0
- package/dist/config/SelaConfig.d.ts +59 -0
- package/dist/config/SelaConfig.d.ts.map +1 -1
- package/dist/config/SelaConfig.js +36 -0
- package/dist/engine/SelaEngine.d.ts +3 -1
- package/dist/engine/SelaEngine.d.ts.map +1 -1
- package/dist/engine/SelaEngine.js +183 -3
- package/dist/errors/SelaError.d.ts +7 -0
- package/dist/errors/SelaError.d.ts.map +1 -1
- package/dist/errors/SelaError.js +7 -1
- package/dist/fixtures/index.js +2 -2
- package/dist/providers/AnthropicProvider.d.ts +9 -0
- package/dist/providers/AnthropicProvider.d.ts.map +1 -0
- package/dist/providers/AnthropicProvider.js +33 -0
- package/dist/providers/LLMProvider.d.ts +13 -0
- package/dist/providers/LLMProvider.d.ts.map +1 -0
- package/dist/providers/LLMProvider.js +7 -0
- package/dist/providers/OpenAICompatibleProvider.d.ts +8 -0
- package/dist/providers/OpenAICompatibleProvider.d.ts.map +1 -0
- package/dist/providers/OpenAICompatibleProvider.js +48 -0
- package/dist/providers/ProviderFactory.d.ts +4 -0
- package/dist/providers/ProviderFactory.d.ts.map +1 -0
- package/dist/providers/ProviderFactory.js +50 -0
- package/dist/providers/SanitizingProvider.d.ts +8 -0
- package/dist/providers/SanitizingProvider.d.ts.map +1 -0
- package/dist/providers/SanitizingProvider.js +27 -0
- package/dist/services/ASTSourceUpdater.d.ts.map +1 -1
- package/dist/services/ASTSourceUpdater.js +39 -5
- package/dist/services/CrossFileHealer.d.ts +7 -1
- package/dist/services/CrossFileHealer.d.ts.map +1 -1
- package/dist/services/CrossFileHealer.js +243 -9
- package/dist/services/DefinitionTracer.d.ts +1 -0
- package/dist/services/DefinitionTracer.d.ts.map +1 -1
- package/dist/services/DefinitionTracer.js +59 -36
- package/dist/services/HealReportService.d.ts +32 -0
- package/dist/services/HealReportService.d.ts.map +1 -1
- package/dist/services/HealReportService.js +110 -18
- package/dist/services/IntentAuditor.d.ts +9 -7
- package/dist/services/IntentAuditor.d.ts.map +1 -1
- package/dist/services/IntentAuditor.js +21 -16
- package/dist/services/LLMService.d.ts +10 -7
- package/dist/services/LLMService.d.ts.map +1 -1
- package/dist/services/LLMService.js +76 -10
- package/dist/services/PRAutomationService.d.ts +7 -2
- package/dist/services/PRAutomationService.d.ts.map +1 -1
- package/dist/services/PRAutomationService.js +143 -132
- package/dist/services/RegressionManifestService.d.ts +8 -0
- package/dist/services/RegressionManifestService.d.ts.map +1 -1
- package/dist/services/RegressionManifestService.js +28 -7
- package/dist/services/RegressionReclassifier.d.ts +25 -0
- package/dist/services/RegressionReclassifier.d.ts.map +1 -0
- package/dist/services/RegressionReclassifier.js +195 -0
- package/dist/services/ReportMergeService.d.ts +9 -0
- package/dist/services/ReportMergeService.d.ts.map +1 -1
- package/dist/services/ReportMergeService.js +28 -0
- package/dist/services/SmartDOMPruner.d.ts +154 -0
- package/dist/services/SmartDOMPruner.d.ts.map +1 -0
- package/dist/services/SmartDOMPruner.js +678 -0
- package/dist/services/TraceBackEngine.d.ts +23 -6
- package/dist/services/TraceBackEngine.d.ts.map +1 -1
- package/dist/services/TraceBackEngine.js +51 -13
- package/dist/services/VisualSnapshotService.d.ts +48 -0
- package/dist/services/VisualSnapshotService.d.ts.map +1 -0
- package/dist/services/VisualSnapshotService.js +264 -0
- package/dist/services/vcs/GitHubProvider.d.ts +17 -0
- package/dist/services/vcs/GitHubProvider.d.ts.map +1 -0
- package/dist/services/vcs/GitHubProvider.js +162 -0
- package/dist/services/vcs/GitLabProvider.d.ts +17 -0
- package/dist/services/vcs/GitLabProvider.d.ts.map +1 -0
- package/dist/services/vcs/GitLabProvider.js +175 -0
- package/dist/services/vcs/VCSProvider.d.ts +100 -0
- package/dist/services/vcs/VCSProvider.d.ts.map +1 -0
- package/dist/services/vcs/VCSProvider.js +7 -0
- package/dist/services/vcs/VCSProviderFactory.d.ts +7 -0
- package/dist/services/vcs/VCSProviderFactory.d.ts.map +1 -0
- package/dist/services/vcs/VCSProviderFactory.js +42 -0
- package/dist/types/index.d.ts +7 -0
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/shell.d.ts +7 -0
- package/dist/utils/shell.d.ts.map +1 -0
- package/dist/utils/shell.js +32 -0
- package/package.json +7 -1
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface BootDeps {
|
|
2
|
+
readFileSync: (p: string, enc: 'utf-8') => string;
|
|
3
|
+
exit: (code: number) => never;
|
|
4
|
+
stderrWrite: (msg: string) => boolean;
|
|
5
|
+
argv: string[];
|
|
6
|
+
env: NodeJS.ProcessEnv;
|
|
7
|
+
cwd: () => string;
|
|
8
|
+
}
|
|
9
|
+
export declare function escapeRegex(s: string): string;
|
|
10
|
+
export declare function isPlaywrightTestInvocation(argv: string[]): boolean;
|
|
11
|
+
export declare function extractGrep(argv: string[]): string | null;
|
|
12
|
+
export declare function buildGrepPattern(existing: string | null, escapedTitles: string[]): string;
|
|
13
|
+
export declare function bootImpl(deps: BootDeps): void;
|
|
14
|
+
//# sourceMappingURL=bootImpl.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"bootImpl.d.ts","sourceRoot":"","sources":["../../src/boot/bootImpl.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,QAAQ;IACvB,YAAY,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,GAAG,EAAE,OAAO,KAAK,MAAM,CAAC;IAClD,IAAI,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,CAAC;IAC9B,WAAW,EAAE,CAAC,GAAG,EAAE,MAAM,KAAK,OAAO,CAAC;IACtC,IAAI,EAAE,MAAM,EAAE,CAAC;IACf,GAAG,EAAE,MAAM,CAAC,UAAU,CAAC;IACvB,GAAG,EAAE,MAAM,MAAM,CAAC;CACnB;AAKD,wBAAgB,WAAW,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAE7C;AAED,wBAAgB,0BAA0B,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAMlE;AAED,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,MAAM,GAAG,IAAI,CAUzD;AAED,wBAAgB,gBAAgB,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI,EAAE,aAAa,EAAE,MAAM,EAAE,GAAG,MAAM,CAKzF;AAED,wBAAgB,QAAQ,CAAC,IAAI,EAAE,QAAQ,GAAG,IAAI,CAkC7C"}
|
|
@@ -0,0 +1,64 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.escapeRegex = escapeRegex;
|
|
4
|
+
exports.isPlaywrightTestInvocation = isPlaywrightTestInvocation;
|
|
5
|
+
exports.extractGrep = extractGrep;
|
|
6
|
+
exports.buildGrepPattern = buildGrepPattern;
|
|
7
|
+
exports.bootImpl = bootImpl;
|
|
8
|
+
function escapeRegex(s) {
|
|
9
|
+
return s.replace(/[[\](){}.*+?^$|\\]/g, '\\$&');
|
|
10
|
+
}
|
|
11
|
+
function isPlaywrightTestInvocation(argv) {
|
|
12
|
+
const script = (argv[1] ?? '').replace(/\\/g, '/');
|
|
13
|
+
return ((/\/(playwright|pw)(\/|$)/i.test(script) || /@playwright\/test\//i.test(script)) &&
|
|
14
|
+
argv.includes('test'));
|
|
15
|
+
}
|
|
16
|
+
function extractGrep(argv) {
|
|
17
|
+
const inlineIdx = argv.findIndex(a => /^(--grep=|-g=)/.test(a));
|
|
18
|
+
if (inlineIdx !== -1) {
|
|
19
|
+
return argv.splice(inlineIdx, 1)[0].split('=').slice(1).join('=');
|
|
20
|
+
}
|
|
21
|
+
const flagIdx = argv.findIndex(a => a === '--grep' || a === '-g');
|
|
22
|
+
if (flagIdx !== -1 && flagIdx + 1 < argv.length) {
|
|
23
|
+
return argv.splice(flagIdx, 2)[1];
|
|
24
|
+
}
|
|
25
|
+
return null;
|
|
26
|
+
}
|
|
27
|
+
function buildGrepPattern(existing, escapedTitles) {
|
|
28
|
+
const manifestPart = escapedTitles.join('|');
|
|
29
|
+
if (!existing)
|
|
30
|
+
return `^(${manifestPart})$`;
|
|
31
|
+
const stripped = existing.replace(/^\^/, '').replace(/\$$/, '');
|
|
32
|
+
return `^((${stripped})|(${manifestPart}))$`;
|
|
33
|
+
}
|
|
34
|
+
function bootImpl(deps) {
|
|
35
|
+
if (deps.env['SELA_REGRESSION_ACTIVE'] !== 'true')
|
|
36
|
+
return;
|
|
37
|
+
if (!isPlaywrightTestInvocation(deps.argv))
|
|
38
|
+
return;
|
|
39
|
+
const manifestPath = deps.env['SELA_REGRESSION_MANIFEST']
|
|
40
|
+
? deps.env['SELA_REGRESSION_MANIFEST']
|
|
41
|
+
: `${deps.cwd()}/.sela/sela-regression-manifest.json`;
|
|
42
|
+
let manifest;
|
|
43
|
+
try {
|
|
44
|
+
manifest = JSON.parse(deps.readFileSync(manifestPath, 'utf-8'));
|
|
45
|
+
}
|
|
46
|
+
catch (err) {
|
|
47
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
48
|
+
deps.stderrWrite(`[Sela] FATAL: SELA_REGRESSION_ACTIVE=true but manifest not found or corrupt.\n` +
|
|
49
|
+
` Expected: ${manifestPath}\n` +
|
|
50
|
+
` Error: ${message}\n` +
|
|
51
|
+
` Run 'sela shadow-regression' to generate the manifest first.\n`);
|
|
52
|
+
deps.exit(1);
|
|
53
|
+
}
|
|
54
|
+
const records = manifest.records;
|
|
55
|
+
if (!Array.isArray(records) || records.length === 0) {
|
|
56
|
+
deps.stderrWrite('[Sela] INFO: Manifest has no records — running full suite.\n');
|
|
57
|
+
return;
|
|
58
|
+
}
|
|
59
|
+
const files = [...new Set(records.map(r => r.sourceFile).filter(Boolean))];
|
|
60
|
+
const titles = [...new Set(records.map(r => r.testTitle).filter(Boolean))];
|
|
61
|
+
const existingGrep = extractGrep(deps.argv);
|
|
62
|
+
const grepPattern = buildGrepPattern(existingGrep, titles.map(escapeRegex));
|
|
63
|
+
deps.argv.push(...files, '--grep', grepPattern);
|
|
64
|
+
}
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
|
|
3
|
+
if (k2 === undefined) k2 = k;
|
|
4
|
+
var desc = Object.getOwnPropertyDescriptor(m, k);
|
|
5
|
+
if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
|
|
6
|
+
desc = { enumerable: true, get: function() { return m[k]; } };
|
|
7
|
+
}
|
|
8
|
+
Object.defineProperty(o, k2, desc);
|
|
9
|
+
}) : (function(o, m, k, k2) {
|
|
10
|
+
if (k2 === undefined) k2 = k;
|
|
11
|
+
o[k2] = m[k];
|
|
12
|
+
}));
|
|
13
|
+
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
|
|
14
|
+
Object.defineProperty(o, "default", { enumerable: true, value: v });
|
|
15
|
+
}) : function(o, v) {
|
|
16
|
+
o["default"] = v;
|
|
17
|
+
});
|
|
18
|
+
var __importStar = (this && this.__importStar) || (function () {
|
|
19
|
+
var ownKeys = function(o) {
|
|
20
|
+
ownKeys = Object.getOwnPropertyNames || function (o) {
|
|
21
|
+
var ar = [];
|
|
22
|
+
for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
|
|
23
|
+
return ar;
|
|
24
|
+
};
|
|
25
|
+
return ownKeys(o);
|
|
26
|
+
};
|
|
27
|
+
return function (mod) {
|
|
28
|
+
if (mod && mod.__esModule) return mod;
|
|
29
|
+
var result = {};
|
|
30
|
+
if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
|
|
31
|
+
__setModuleDefault(result, mod);
|
|
32
|
+
return result;
|
|
33
|
+
};
|
|
34
|
+
})();
|
|
35
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
36
|
+
const fs = __importStar(require("node:fs"));
|
|
37
|
+
const bootImpl_js_1 = require("./bootImpl.js");
|
|
38
|
+
(0, bootImpl_js_1.bootImpl)({
|
|
39
|
+
readFileSync: (p, enc) => fs.readFileSync(p, enc),
|
|
40
|
+
exit: (code) => process.exit(code),
|
|
41
|
+
stderrWrite: (msg) => process.stderr.write(msg),
|
|
42
|
+
argv: process.argv,
|
|
43
|
+
env: process.env,
|
|
44
|
+
cwd: () => process.cwd(),
|
|
45
|
+
});
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.cts","sourceRoot":"","sources":["../../src/boot/register.cts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"register.d.mts","sourceRoot":"","sources":["../../src/boot/register.mts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import { readFileSync } from 'node:fs';
|
|
2
|
+
import { bootImpl } from './bootImpl.js';
|
|
3
|
+
bootImpl({
|
|
4
|
+
readFileSync: (p, enc) => readFileSync(p, enc),
|
|
5
|
+
exit: (code) => process.exit(code),
|
|
6
|
+
stderrWrite: (msg) => process.stderr.write(msg),
|
|
7
|
+
argv: process.argv,
|
|
8
|
+
env: process.env,
|
|
9
|
+
cwd: () => process.cwd(),
|
|
10
|
+
});
|
|
@@ -39,23 +39,23 @@ const path = __importStar(require("path"));
|
|
|
39
39
|
const logger_js_1 = require("../../utils/logger.js");
|
|
40
40
|
const conventionsInit_js_1 = require("../conventionsInit.js");
|
|
41
41
|
const PACKAGE_NAME = "sela-core";
|
|
42
|
-
const CONFIG_TEMPLATE_TS = `import { defineConfig } from '${PACKAGE_NAME}';
|
|
43
|
-
|
|
44
|
-
export default defineConfig({
|
|
45
|
-
healingPolicy: 'balanced',
|
|
46
|
-
updateStrategy: 'inPlace',
|
|
47
|
-
autoCommit: false,
|
|
48
|
-
dnaStoragePath: 'sela-snapshots',
|
|
49
|
-
});
|
|
42
|
+
const CONFIG_TEMPLATE_TS = `import { defineConfig } from '${PACKAGE_NAME}';
|
|
43
|
+
|
|
44
|
+
export default defineConfig({
|
|
45
|
+
healingPolicy: 'balanced',
|
|
46
|
+
updateStrategy: 'inPlace',
|
|
47
|
+
autoCommit: false,
|
|
48
|
+
dnaStoragePath: 'sela-snapshots',
|
|
49
|
+
});
|
|
50
50
|
`;
|
|
51
|
-
const CONFIG_TEMPLATE_JS = `const { defineConfig } = require('${PACKAGE_NAME}');
|
|
52
|
-
|
|
53
|
-
module.exports = defineConfig({
|
|
54
|
-
healingPolicy: 'balanced',
|
|
55
|
-
updateStrategy: 'inPlace',
|
|
56
|
-
autoCommit: false,
|
|
57
|
-
dnaStoragePath: 'sela-snapshots',
|
|
58
|
-
});
|
|
51
|
+
const CONFIG_TEMPLATE_JS = `const { defineConfig } = require('${PACKAGE_NAME}');
|
|
52
|
+
|
|
53
|
+
module.exports = defineConfig({
|
|
54
|
+
healingPolicy: 'balanced',
|
|
55
|
+
updateStrategy: 'inPlace',
|
|
56
|
+
autoCommit: false,
|
|
57
|
+
dnaStoragePath: 'sela-snapshots',
|
|
58
|
+
});
|
|
59
59
|
`;
|
|
60
60
|
const REQUIRED_ENV_VARS = ["ANTHROPIC_API_KEY"];
|
|
61
61
|
function registerInit(program) {
|
|
@@ -126,6 +126,38 @@ async function runInit(opts) {
|
|
|
126
126
|
fileTimeoutMs: opts.fileTimeout ? Number(opts.fileTimeout) : undefined,
|
|
127
127
|
});
|
|
128
128
|
}
|
|
129
|
+
// ── .npmrc node-options upsert ───────────────────────────────────
|
|
130
|
+
if (!opts.dryRun) {
|
|
131
|
+
upsertNpmrcHook(cwd);
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
const NPMRC_HOOK = '--import sela/register';
|
|
135
|
+
const NPMRC_NODE_OPTIONS_RE = /^node-options\s*=\s*(.*)$/m;
|
|
136
|
+
function upsertNpmrcHook(cwd) {
|
|
137
|
+
const npmrcPath = path.join(cwd, '.npmrc');
|
|
138
|
+
let content = '';
|
|
139
|
+
try {
|
|
140
|
+
content = fs.readFileSync(npmrcPath, 'utf8');
|
|
141
|
+
}
|
|
142
|
+
catch {
|
|
143
|
+
// file doesn't exist yet — start empty
|
|
144
|
+
}
|
|
145
|
+
const match = NPMRC_NODE_OPTIONS_RE.exec(content);
|
|
146
|
+
if (match) {
|
|
147
|
+
const existing = match[1].replace(/^"|"$/g, '').trim();
|
|
148
|
+
if (existing.includes(NPMRC_HOOK)) {
|
|
149
|
+
logger_js_1.logger.success(`.npmrc already configured for Sela regression hook`);
|
|
150
|
+
return;
|
|
151
|
+
}
|
|
152
|
+
// Append to existing node-options line
|
|
153
|
+
const updated = content.replace(NPMRC_NODE_OPTIONS_RE, `node-options="${existing} ${NPMRC_HOOK}"`);
|
|
154
|
+
fs.writeFileSync(npmrcPath, updated, 'utf8');
|
|
155
|
+
}
|
|
156
|
+
else {
|
|
157
|
+
const separator = content.length > 0 && !content.endsWith('\n') ? '\n' : '';
|
|
158
|
+
fs.writeFileSync(npmrcPath, `${content}${separator}node-options="${NPMRC_HOOK}"\n`, 'utf8');
|
|
159
|
+
}
|
|
160
|
+
logger_js_1.logger.success(`.npmrc configured — 'SELA_REGRESSION_ACTIVE=true npx playwright test' will auto-filter failed tests`);
|
|
129
161
|
}
|
|
130
162
|
function loadDotEnv(cwd) {
|
|
131
163
|
const envPath = path.join(cwd, ".env");
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,
|
|
1
|
+
{"version":3,"file":"merge.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/merge.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgBzC;;;;;;;;;GASG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,OAAO,GAAG,IAAI,CAsGpD"}
|
|
@@ -101,6 +101,11 @@ function registerMerge(program) {
|
|
|
101
101
|
? ` (${result.duplicatesDropped} dup dropped)`
|
|
102
102
|
: "") +
|
|
103
103
|
` history: ${result.data.historical_runs.length} run(s)\n`);
|
|
104
|
+
if (result.manifestPath) {
|
|
105
|
+
process.stdout.write(`[sela] Unified regression manifest: ${result.manifestPath} ` +
|
|
106
|
+
`(${result.manifestRecords} bypass record(s))\n` +
|
|
107
|
+
` Verify with: npx sela shadow-regression\n`);
|
|
108
|
+
}
|
|
104
109
|
// Partial merges are surfaced but DO NOT fail the job (aggregate-and-flag).
|
|
105
110
|
if (result.partial) {
|
|
106
111
|
process.exitCode = 0;
|
|
@@ -134,7 +134,7 @@ function registerShadowRegression(program) {
|
|
|
134
134
|
// 5. Merge the verdict into the report + regenerate the dashboard.
|
|
135
135
|
let htmlPath;
|
|
136
136
|
try {
|
|
137
|
-
htmlPath = (0, HealReportService_js_1.mergeRegressionIntoReport)(targetDir, { regressionState, regressionTests }, { reportJsonPath: opts.report });
|
|
137
|
+
htmlPath = (0, HealReportService_js_1.mergeRegressionIntoReport)(targetDir, { regressionState, regressionTests, records: manifest.records }, { reportJsonPath: opts.report });
|
|
138
138
|
}
|
|
139
139
|
catch (err) {
|
|
140
140
|
process.stderr.write(`[sela] Report merge failed: ${err.message}\n`);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;
|
|
1
|
+
{"version":3,"file":"ConfigLoader.d.ts","sourceRoot":"","sources":["../../src/config/ConfigLoader.ts"],"names":[],"mappings":"AAQA,OAAO,EAAE,UAAU,EAAE,cAAc,EAAiB,MAAM,cAAc,CAAC;AAiNzE,qBAAa,YAAY;IACvB,OAAO,CAAC,MAAM,CAAC,QAAQ,CAA+B;IACtD,OAAO,CAAC,MAAM,CAAC,MAAM,CAAuB;IAK5C,OAAO,CAAC,MAAM,CAAC,aAAa,CAA2B;IAEvD;;;;;;;;OAQG;IACH,MAAM,CAAC,WAAW,IAAI,cAAc;IAqCpC;;;;OAIG;IACH,MAAM,CAAC,YAAY,IAAI,UAAU;IAKjC,OAAO,CAAC,MAAM,CAAC,aAAa;IAsB5B,yEAAyE;IACzE,MAAM,CAAC,SAAS,IAAI,MAAM,GAAG,IAAI;IAKjC,uDAAuD;IACvD,MAAM,CAAC,KAAK,IAAI,IAAI;CAKrB"}
|
|
@@ -72,6 +72,42 @@ export interface PlaywrightRulesConfig {
|
|
|
72
72
|
*/
|
|
73
73
|
preferGetByRoleOverCss?: boolean;
|
|
74
74
|
}
|
|
75
|
+
export type LLMProviderType = "anthropic" | "openai" | "openai-compatible" | "local";
|
|
76
|
+
export interface LLMModelConfig {
|
|
77
|
+
/** Which provider backend to use. */
|
|
78
|
+
provider: LLMProviderType;
|
|
79
|
+
/** Model identifier as the provider understands it. */
|
|
80
|
+
modelId: string;
|
|
81
|
+
/** Base URL for openai-compatible / local endpoints (e.g. http://localhost:11434/v1). */
|
|
82
|
+
baseUrl?: string;
|
|
83
|
+
/**
|
|
84
|
+
* API key or token. Accepts a literal string or process.env reference.
|
|
85
|
+
* Omit when the local server requires no authentication.
|
|
86
|
+
*/
|
|
87
|
+
apiKey?: string;
|
|
88
|
+
/** Sampling temperature (0.0 = deterministic). Provider default when omitted. */
|
|
89
|
+
temperature?: number;
|
|
90
|
+
/** Maximum tokens to generate. Defaults to 1024. */
|
|
91
|
+
maxTokens?: number;
|
|
92
|
+
/** Extra HTTP headers forwarded on every request (auth tokens, tenant IDs, etc.). */
|
|
93
|
+
customHeaders?: Record<string, string>;
|
|
94
|
+
/**
|
|
95
|
+
* Skip TLS certificate verification. Use ONLY for air-gapped corporate
|
|
96
|
+
* proxies with self-signed certs — never in production internet contexts.
|
|
97
|
+
*/
|
|
98
|
+
disableSslVerification?: boolean;
|
|
99
|
+
/**
|
|
100
|
+
* Per-request timeout in milliseconds. Prevents CI from hanging when a
|
|
101
|
+
* GPU-constrained local cluster stalls. Omit to use the provider default.
|
|
102
|
+
*/
|
|
103
|
+
timeoutMs?: number;
|
|
104
|
+
}
|
|
105
|
+
export interface LLMConfig {
|
|
106
|
+
/** Heavy-duty model for AST parsing, code reasoning, and selector generation. */
|
|
107
|
+
healingModel: LLMModelConfig;
|
|
108
|
+
/** Lighter model for real-time semantic validation (intent auditor). */
|
|
109
|
+
intentAuditModel: LLMModelConfig;
|
|
110
|
+
}
|
|
75
111
|
export interface SelaConfig {
|
|
76
112
|
/** Shorthand preset that expands to concrete threshold values. */
|
|
77
113
|
healingPolicy?: "conservative" | "balanced" | "aggressive";
|
|
@@ -171,6 +207,12 @@ export interface SelaConfig {
|
|
|
171
207
|
* Merge order: expandPreset(base) → base.thresholds → expandPreset(override) → override.thresholds
|
|
172
208
|
*/
|
|
173
209
|
branchOverrides?: Record<string, Partial<SelaConfig>>;
|
|
210
|
+
/**
|
|
211
|
+
* LLM provider configuration for the two distinct AI operations.
|
|
212
|
+
* When omitted, Sela falls back to ANTHROPIC_API_KEY / SELA_LLM_MODEL
|
|
213
|
+
* env vars (backward-compatible with all existing setups).
|
|
214
|
+
*/
|
|
215
|
+
llm?: LLMConfig;
|
|
174
216
|
}
|
|
175
217
|
export interface ResolvedVectorThresholds {
|
|
176
218
|
/** Minimum DNA Architectural Match score (0–100). null = disabled. */
|
|
@@ -223,6 +265,21 @@ export interface ResolvedSanitization {
|
|
|
223
265
|
redactInputValues: boolean;
|
|
224
266
|
customPatterns: string[];
|
|
225
267
|
}
|
|
268
|
+
export interface ResolvedLLMModelConfig {
|
|
269
|
+
provider: LLMProviderType;
|
|
270
|
+
modelId: string;
|
|
271
|
+
apiKey: string;
|
|
272
|
+
baseUrl?: string;
|
|
273
|
+
temperature?: number;
|
|
274
|
+
maxTokens?: number;
|
|
275
|
+
customHeaders?: Record<string, string>;
|
|
276
|
+
disableSslVerification?: boolean;
|
|
277
|
+
timeoutMs?: number;
|
|
278
|
+
}
|
|
279
|
+
export interface ResolvedLLMConfig {
|
|
280
|
+
healingModel: ResolvedLLMModelConfig;
|
|
281
|
+
intentAuditModel: ResolvedLLMModelConfig;
|
|
282
|
+
}
|
|
226
283
|
export interface ResolvedPlaywrightRules {
|
|
227
284
|
preferredStrategies: ("role" | "testId" | "text" | "css")[];
|
|
228
285
|
testIdAttribute: string;
|
|
@@ -267,6 +324,8 @@ export interface ResolvedConfig {
|
|
|
267
324
|
* goes straight to the LLM. Sourced from `SELA_NO_CACHE` env var.
|
|
268
325
|
*/
|
|
269
326
|
noCache: boolean;
|
|
327
|
+
/** Resolved LLM provider config for healing and intent-audit models. */
|
|
328
|
+
llm: ResolvedLLMConfig;
|
|
270
329
|
/**
|
|
271
330
|
* When true, Sela is completely dormant. It does NOT intercept errors,
|
|
272
331
|
* does NOT patch memory, does NOT attempt heals, and performs ZERO
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelaConfig.d.ts","sourceRoot":"","sources":["../../src/config/SelaConfig.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"SelaConfig.d.ts","sourceRoot":"","sources":["../../src/config/SelaConfig.ts"],"names":[],"mappings":"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"}
|
|
@@ -143,6 +143,41 @@ function resolveMaxHealsPerRun(value) {
|
|
|
143
143
|
}
|
|
144
144
|
return value;
|
|
145
145
|
}
|
|
146
|
+
function resolveLLMModelConfig(cfg, env) {
|
|
147
|
+
return {
|
|
148
|
+
provider: cfg.provider,
|
|
149
|
+
modelId: cfg.modelId,
|
|
150
|
+
apiKey: cfg.apiKey ?? env.ANTHROPIC_API_KEY ?? "",
|
|
151
|
+
baseUrl: cfg.baseUrl,
|
|
152
|
+
temperature: cfg.temperature,
|
|
153
|
+
maxTokens: cfg.maxTokens,
|
|
154
|
+
customHeaders: cfg.customHeaders,
|
|
155
|
+
disableSslVerification: cfg.disableSslVerification,
|
|
156
|
+
timeoutMs: cfg.timeoutMs,
|
|
157
|
+
};
|
|
158
|
+
}
|
|
159
|
+
function resolveLLMConfig(config, env) {
|
|
160
|
+
if (config.llm) {
|
|
161
|
+
return {
|
|
162
|
+
healingModel: resolveLLMModelConfig(config.llm.healingModel, env),
|
|
163
|
+
intentAuditModel: resolveLLMModelConfig(config.llm.intentAuditModel, env),
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
// Backward-compat: derive from legacy ANTHROPIC_API_KEY / SELA_LLM_MODEL env vars.
|
|
167
|
+
const apiKey = env.ANTHROPIC_API_KEY ?? "";
|
|
168
|
+
return {
|
|
169
|
+
healingModel: {
|
|
170
|
+
provider: "anthropic",
|
|
171
|
+
modelId: env.SELA_LLM_MODEL ?? "claude-sonnet-4-6",
|
|
172
|
+
apiKey,
|
|
173
|
+
},
|
|
174
|
+
intentAuditModel: {
|
|
175
|
+
provider: "anthropic",
|
|
176
|
+
modelId: "claude-haiku-4-5-20251001",
|
|
177
|
+
apiKey,
|
|
178
|
+
},
|
|
179
|
+
};
|
|
180
|
+
}
|
|
146
181
|
function resolveConfig(config, env = process.env) {
|
|
147
182
|
const prAutomation = resolvePRAutomation(config);
|
|
148
183
|
// Structural conflict: updateStrategy:'branch' and prAutomation.enabled both
|
|
@@ -183,6 +218,7 @@ function resolveConfig(config, env = process.env) {
|
|
|
183
218
|
},
|
|
184
219
|
playwrightRules: resolvePlaywrightRules(config),
|
|
185
220
|
blastRadiusProtection: config.blastRadiusProtection ?? true,
|
|
221
|
+
llm: resolveLLMConfig(config, env),
|
|
186
222
|
dryRun,
|
|
187
223
|
noCache,
|
|
188
224
|
bypass,
|
|
@@ -13,6 +13,7 @@ export declare class SelaEngine {
|
|
|
13
13
|
private healMetaBuffer;
|
|
14
14
|
private testTitleBuffer;
|
|
15
15
|
private bypassedSelectorCache;
|
|
16
|
+
private readonly noHealCache;
|
|
16
17
|
constructor();
|
|
17
18
|
healArgument(page: Page, selector: string, action: string, oldArgument: string, stableId: string, filePath: string, line: number): Promise<string | null>;
|
|
18
19
|
heal(page: Page, fullSelector: string, elementSelectorOnly: string, stableId: string, filePath: string, line: number, healMode?: HealMode): Promise<string>;
|
|
@@ -54,7 +55,8 @@ export declare class SelaEngine {
|
|
|
54
55
|
private fetchLiveText;
|
|
55
56
|
private _rebuildSelectorWithFrames;
|
|
56
57
|
private getAllFiles;
|
|
57
|
-
captureSuccessfulElement(page: Page, selector: string, stableId: string): Promise<void>;
|
|
58
|
+
captureSuccessfulElement(page: Page, selector: string, stableId: string, sourceFile?: string): Promise<void>;
|
|
59
|
+
private static _snapshotFingerprint;
|
|
58
60
|
}
|
|
59
61
|
export {};
|
|
60
62
|
//# sourceMappingURL=SelaEngine.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SelaEngine.d.ts","sourceRoot":"","sources":["../../src/engine/SelaEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAcxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,EAAe,QAAQ,EAAkB,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"SelaEngine.d.ts","sourceRoot":"","sources":["../../src/engine/SelaEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAcxC,OAAO,EAAE,iBAAiB,EAAE,MAAM,UAAU,CAAC;AAG7C,OAAO,EAAe,QAAQ,EAAkB,MAAM,yBAAyB,CAAC;AA6GhF,qBAAa,UAAU;IACrB,OAAO,CAAC,UAAU,CAAa;IAC/B,OAAO,CAAC,eAAe,CAAkB;IACzC,OAAO,CAAC,WAAW,CAAc;IACjC,OAAO,CAAC,oBAAoB,CAAuB;IACnD,OAAO,CAAC,mBAAmB,CAAmB;IAC9C,OAAO,CAAC,YAAY,CAAsB;IAC1C,OAAO,CAAC,MAAM,CAAiB;IAC/B,OAAO,CAAC,SAAS,CAA6C;IAC9D,OAAO,CAAC,cAAc,CAAoC;IAC1D,OAAO,CAAC,eAAe,CAAkC;IAKzD,OAAO,CAAC,qBAAqB,CAAkC;IAK/D,OAAO,CAAC,QAAQ,CAAC,WAAW,CAA6B;;IAyCnD,YAAY,CAChB,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,MAAM,EAAE,MAAM,EACd,WAAW,EAAE,MAAM,EACnB,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,GACX,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC;IAqEnB,IAAI,CACR,IAAI,EAAE,IAAI,EACV,YAAY,EAAE,MAAM,EACpB,mBAAmB,EAAE,MAAM,EAC3B,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,EACZ,QAAQ,GAAE,QAAmB,GAC5B,OAAO,CAAC,MAAM,CAAC;IAylClB,OAAO,CAAC,aAAa;IAYrB,OAAO,CAAC,aAAa;IAerB;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,oBAAoB;IAoB5B;;;;;;;;;;;OAWG;IACH,OAAO,CAAC,2BAA2B;IA4BnC,OAAO,CAAC,yBAAyB;IAgDjC,OAAO,CAAC,kBAAkB;IA8D1B,OAAO,CAAC,oBAAoB;IAyD5B,gBAAgB,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI;IAIrD,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5E,aAAa,CAAC,QAAQ,EAAE,MAAM,GAAG,IAAI;IAK/B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;YAsJtB,aAAa;IAsB3B,OAAO,CAAC,0BAA0B;IA+BlC,OAAO,CAAC,WAAW;IA6Bb,wBAAwB,CAC5B,IAAI,EAAE,IAAI,EACV,QAAQ,EAAE,MAAM,EAChB,QAAQ,EAAE,MAAM,EAChB,UAAU,CAAC,EAAE,MAAM;IAkErB,OAAO,CAAC,MAAM,CAAC,oBAAoB;CAWpC;AAED,OAAO,EAAE,CAAC"}
|