@xera-ai/core 0.1.7 → 0.3.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/dist/bin/internal.js +1932 -623
- package/dist/{adapter → core/src/adapter}/types.d.ts +1 -1
- package/dist/core/src/adapter/types.d.ts.map +1 -0
- package/dist/core/src/artifact/hash.d.ts.map +1 -0
- package/dist/core/src/artifact/meta.d.ts.map +1 -0
- package/dist/core/src/artifact/paths.d.ts.map +1 -0
- package/dist/core/src/artifact/status.d.ts.map +1 -0
- package/dist/core/src/auth/encrypt.d.ts.map +1 -0
- package/dist/core/src/auth/key.d.ts.map +1 -0
- package/dist/core/src/auth/refresh.d.ts.map +1 -0
- package/dist/core/src/auth/state.d.ts.map +1 -0
- package/dist/core/src/bin-internal/doctor.d.ts +5 -0
- package/dist/core/src/bin-internal/doctor.d.ts.map +1 -0
- package/dist/core/src/bin-internal/eval-deterministic.d.ts +5 -0
- package/dist/core/src/bin-internal/eval-deterministic.d.ts.map +1 -0
- package/dist/core/src/bin-internal/eval-prepare.d.ts +7 -0
- package/dist/core/src/bin-internal/eval-prepare.d.ts.map +1 -0
- package/dist/core/src/bin-internal/eval-report.d.ts +5 -0
- package/dist/core/src/bin-internal/eval-report.d.ts.map +1 -0
- package/dist/core/src/bin-internal/exec.d.ts.map +1 -0
- package/dist/core/src/bin-internal/fetch.d.ts.map +1 -0
- package/dist/core/src/bin-internal/heal-prepare.d.ts +19 -0
- package/dist/core/src/bin-internal/heal-prepare.d.ts.map +1 -0
- package/dist/core/src/bin-internal/index.d.ts.map +1 -0
- package/dist/core/src/bin-internal/lint.d.ts.map +1 -0
- package/dist/core/src/bin-internal/normalize.d.ts.map +1 -0
- package/dist/core/src/bin-internal/post.d.ts.map +1 -0
- package/dist/core/src/bin-internal/promote.d.ts.map +1 -0
- package/dist/core/src/bin-internal/report.d.ts.map +1 -0
- package/dist/core/src/bin-internal/status-cmd.d.ts.map +1 -0
- package/dist/core/src/bin-internal/typecheck.d.ts.map +1 -0
- package/dist/core/src/bin-internal/unlock.d.ts.map +1 -0
- package/dist/core/src/bin-internal/validate-feature.d.ts.map +1 -0
- package/dist/core/src/bin-internal/verify-prompts.d.ts +7 -0
- package/dist/core/src/bin-internal/verify-prompts.d.ts.map +1 -0
- package/dist/core/src/classifier/aggregate.d.ts.map +1 -0
- package/dist/core/src/classifier/history.d.ts.map +1 -0
- package/dist/core/src/classifier/types.d.ts.map +1 -0
- package/dist/core/src/config/define.d.ts.map +1 -0
- package/dist/core/src/config/load.d.ts.map +1 -0
- package/dist/{config → core/src/config}/schema.d.ts.map +1 -1
- package/dist/core/src/eval/paths.d.ts +15 -0
- package/dist/core/src/eval/paths.d.ts.map +1 -0
- package/dist/core/src/eval/run-id.d.ts +6 -0
- package/dist/core/src/eval/run-id.d.ts.map +1 -0
- package/dist/core/src/eval/types.d.ts +551 -0
- package/dist/core/src/eval/types.d.ts.map +1 -0
- package/dist/core/src/index.d.ts.map +1 -0
- package/dist/core/src/jira/client.d.ts.map +1 -0
- package/dist/core/src/jira/fields.d.ts.map +1 -0
- package/dist/core/src/jira/mcp-backend.d.ts.map +1 -0
- package/dist/core/src/jira/rest-backend.d.ts.map +1 -0
- package/dist/core/src/jira/retry.d.ts.map +1 -0
- package/dist/core/src/jira/types.d.ts.map +1 -0
- package/dist/core/src/lock/file-lock.d.ts.map +1 -0
- package/dist/core/src/logging/ndjson-logger.d.ts.map +1 -0
- package/dist/core/src/reporter/jira-comment.d.ts.map +1 -0
- package/dist/core/src/reporter/status-writer.d.ts.map +1 -0
- package/dist/src/index.js +19 -12
- package/dist/web/src/adapter.d.ts +3 -0
- package/dist/web/src/adapter.d.ts.map +1 -0
- package/dist/web/src/auth-setup/define.d.ts +16 -0
- package/dist/web/src/auth-setup/define.d.ts.map +1 -0
- package/dist/web/src/auth-setup/playwright-state.d.ts +2 -0
- package/dist/web/src/auth-setup/playwright-state.d.ts.map +1 -0
- package/dist/web/src/auth-setup/runner.d.ts +12 -0
- package/dist/web/src/auth-setup/runner.d.ts.map +1 -0
- package/dist/web/src/executor/index.d.ts +18 -0
- package/dist/web/src/executor/index.d.ts.map +1 -0
- package/dist/web/src/executor/playwright-args.d.ts +7 -0
- package/dist/web/src/executor/playwright-args.d.ts.map +1 -0
- package/dist/web/src/generator/gherkin-validate.d.ts +9 -0
- package/dist/web/src/generator/gherkin-validate.d.ts.map +1 -0
- package/dist/web/src/generator/lint.d.ts +9 -0
- package/dist/web/src/generator/lint.d.ts.map +1 -0
- package/dist/web/src/generator/pom-scan.d.ts +6 -0
- package/dist/web/src/generator/pom-scan.d.ts.map +1 -0
- package/dist/web/src/generator/promote.d.ts +7 -0
- package/dist/web/src/generator/promote.d.ts.map +1 -0
- package/dist/web/src/generator/selector-rules.d.ts +10 -0
- package/dist/web/src/generator/selector-rules.d.ts.map +1 -0
- package/dist/web/src/generator/typecheck.d.ts +11 -0
- package/dist/web/src/generator/typecheck.d.ts.map +1 -0
- package/dist/web/src/index.d.ts +18 -0
- package/dist/web/src/index.d.ts.map +1 -0
- package/dist/web/src/trace-normalizer/normalize.d.ts +7 -0
- package/dist/web/src/trace-normalizer/normalize.d.ts.map +1 -0
- package/dist/web/src/trace-normalizer/parse.d.ts +37 -0
- package/dist/web/src/trace-normalizer/parse.d.ts.map +1 -0
- package/dist/web/src/trace-normalizer/scrub-rules.d.ts +12 -0
- package/dist/web/src/trace-normalizer/scrub-rules.d.ts.map +1 -0
- package/dist/web/src/trace-normalizer/scrub.d.ts +29 -0
- package/dist/web/src/trace-normalizer/scrub.d.ts.map +1 -0
- package/dist/web/src/trace-normalizer/unzip.d.ts +6 -0
- package/dist/web/src/trace-normalizer/unzip.d.ts.map +1 -0
- package/package.json +3 -2
- package/src/adapter/types.ts +5 -2
- package/src/artifact/meta.ts +1 -1
- package/src/artifact/status.ts +1 -1
- package/src/auth/encrypt.ts +2 -2
- package/src/auth/key.ts +1 -2
- package/src/auth/refresh.ts +4 -1
- package/src/auth/state.ts +2 -2
- package/src/bin-internal/doctor.ts +133 -0
- package/src/bin-internal/eval-deterministic.ts +149 -0
- package/src/bin-internal/eval-prepare.ts +214 -0
- package/src/bin-internal/eval-report.ts +177 -0
- package/src/bin-internal/exec.ts +28 -15
- package/src/bin-internal/fetch.ts +21 -10
- package/src/bin-internal/heal-prepare.ts +230 -0
- package/src/bin-internal/index.ts +25 -11
- package/src/bin-internal/lint.ts +11 -4
- package/src/bin-internal/normalize.ts +23 -9
- package/src/bin-internal/post.ts +10 -4
- package/src/bin-internal/report.ts +3 -3
- package/src/bin-internal/status-cmd.ts +11 -3
- package/src/bin-internal/typecheck.ts +9 -3
- package/src/bin-internal/unlock.ts +12 -4
- package/src/bin-internal/validate-feature.ts +14 -5
- package/src/bin-internal/verify-prompts.ts +59 -0
- package/src/classifier/aggregate.ts +13 -6
- package/src/config/define.ts +3 -1
- package/src/config/load.ts +1 -1
- package/src/config/schema.ts +43 -37
- package/src/eval/paths.ts +32 -0
- package/src/eval/run-id.ts +30 -0
- package/src/eval/types.ts +101 -0
- package/src/jira/client.ts +4 -2
- package/src/jira/fields.ts +4 -2
- package/src/jira/mcp-backend.ts +1 -1
- package/src/jira/rest-backend.ts +17 -5
- package/src/jira/retry.ts +2 -2
- package/src/lock/file-lock.ts +2 -2
- package/src/logging/ndjson-logger.ts +2 -2
- package/src/reporter/jira-comment.ts +13 -7
- package/src/reporter/status-writer.ts +2 -2
- package/dist/adapter/types.d.ts.map +0 -1
- package/dist/artifact/hash.d.ts.map +0 -1
- package/dist/artifact/meta.d.ts.map +0 -1
- package/dist/artifact/paths.d.ts.map +0 -1
- package/dist/artifact/status.d.ts.map +0 -1
- package/dist/auth/encrypt.d.ts.map +0 -1
- package/dist/auth/key.d.ts.map +0 -1
- package/dist/auth/refresh.d.ts.map +0 -1
- package/dist/auth/state.d.ts.map +0 -1
- package/dist/bin-internal/exec.d.ts.map +0 -1
- package/dist/bin-internal/fetch.d.ts.map +0 -1
- package/dist/bin-internal/index.d.ts.map +0 -1
- package/dist/bin-internal/lint.d.ts.map +0 -1
- package/dist/bin-internal/normalize.d.ts.map +0 -1
- package/dist/bin-internal/post.d.ts.map +0 -1
- package/dist/bin-internal/promote.d.ts.map +0 -1
- package/dist/bin-internal/report.d.ts.map +0 -1
- package/dist/bin-internal/status-cmd.d.ts.map +0 -1
- package/dist/bin-internal/typecheck.d.ts.map +0 -1
- package/dist/bin-internal/unlock.d.ts.map +0 -1
- package/dist/bin-internal/validate-feature.d.ts.map +0 -1
- package/dist/classifier/aggregate.d.ts.map +0 -1
- package/dist/classifier/history.d.ts.map +0 -1
- package/dist/classifier/types.d.ts.map +0 -1
- package/dist/config/define.d.ts.map +0 -1
- package/dist/config/load.d.ts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/jira/client.d.ts.map +0 -1
- package/dist/jira/fields.d.ts.map +0 -1
- package/dist/jira/mcp-backend.d.ts.map +0 -1
- package/dist/jira/rest-backend.d.ts.map +0 -1
- package/dist/jira/retry.d.ts.map +0 -1
- package/dist/jira/types.d.ts.map +0 -1
- package/dist/lock/file-lock.d.ts.map +0 -1
- package/dist/logging/ndjson-logger.d.ts.map +0 -1
- package/dist/reporter/jira-comment.d.ts.map +0 -1
- package/dist/reporter/status-writer.d.ts.map +0 -1
- /package/dist/{artifact → core/src/artifact}/hash.d.ts +0 -0
- /package/dist/{artifact → core/src/artifact}/meta.d.ts +0 -0
- /package/dist/{artifact → core/src/artifact}/paths.d.ts +0 -0
- /package/dist/{artifact → core/src/artifact}/status.d.ts +0 -0
- /package/dist/{auth → core/src/auth}/encrypt.d.ts +0 -0
- /package/dist/{auth → core/src/auth}/key.d.ts +0 -0
- /package/dist/{auth → core/src/auth}/refresh.d.ts +0 -0
- /package/dist/{auth → core/src/auth}/state.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/exec.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/fetch.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/index.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/lint.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/normalize.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/post.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/promote.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/report.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/status-cmd.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/typecheck.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/unlock.d.ts +0 -0
- /package/dist/{bin-internal → core/src/bin-internal}/validate-feature.d.ts +0 -0
- /package/dist/{classifier → core/src/classifier}/aggregate.d.ts +0 -0
- /package/dist/{classifier → core/src/classifier}/history.d.ts +0 -0
- /package/dist/{classifier → core/src/classifier}/types.d.ts +0 -0
- /package/dist/{config → core/src/config}/define.d.ts +0 -0
- /package/dist/{config → core/src/config}/load.d.ts +0 -0
- /package/dist/{config → core/src/config}/schema.d.ts +0 -0
- /package/dist/{index.d.ts → core/src/index.d.ts} +0 -0
- /package/dist/{jira → core/src/jira}/client.d.ts +0 -0
- /package/dist/{jira → core/src/jira}/fields.d.ts +0 -0
- /package/dist/{jira → core/src/jira}/mcp-backend.d.ts +0 -0
- /package/dist/{jira → core/src/jira}/rest-backend.d.ts +0 -0
- /package/dist/{jira → core/src/jira}/retry.d.ts +0 -0
- /package/dist/{jira → core/src/jira}/types.d.ts +0 -0
- /package/dist/{lock → core/src/lock}/file-lock.d.ts +0 -0
- /package/dist/{logging → core/src/logging}/ndjson-logger.d.ts +0 -0
- /package/dist/{reporter → core/src/reporter}/jira-comment.d.ts +0 -0
- /package/dist/{reporter → core/src/reporter}/status-writer.d.ts +0 -0
package/dist/src/index.js
CHANGED
|
@@ -127,7 +127,7 @@ function hashFileIfExists(path) {
|
|
|
127
127
|
return hashFile(path);
|
|
128
128
|
}
|
|
129
129
|
// src/artifact/meta.ts
|
|
130
|
-
import { existsSync as existsSync3, readFileSync as readFileSync2, writeFileSync
|
|
130
|
+
import { existsSync as existsSync3, mkdirSync, readFileSync as readFileSync2, writeFileSync } from "fs";
|
|
131
131
|
import { dirname } from "path";
|
|
132
132
|
import { z as z2 } from "zod";
|
|
133
133
|
var MetaJsonSchema = z2.object({
|
|
@@ -163,7 +163,7 @@ function updateMeta(path, patch) {
|
|
|
163
163
|
return next;
|
|
164
164
|
}
|
|
165
165
|
// src/artifact/status.ts
|
|
166
|
-
import { existsSync as existsSync4,
|
|
166
|
+
import { existsSync as existsSync4, mkdirSync as mkdirSync2, readFileSync as readFileSync3, writeFileSync as writeFileSync2 } from "fs";
|
|
167
167
|
import { dirname as dirname2 } from "path";
|
|
168
168
|
import { z as z3 } from "zod";
|
|
169
169
|
var ClassificationEnum = z3.enum(["PASS", "REAL_BUG", "SELECTOR_DRIFT", "FLAKY", "TEST_BUG"]);
|
|
@@ -209,7 +209,7 @@ function appendHistory(path, entry) {
|
|
|
209
209
|
return s;
|
|
210
210
|
}
|
|
211
211
|
// src/logging/ndjson-logger.ts
|
|
212
|
-
import { appendFileSync,
|
|
212
|
+
import { appendFileSync, existsSync as existsSync5, mkdirSync as mkdirSync3, readFileSync as readFileSync4 } from "fs";
|
|
213
213
|
import { dirname as dirname3 } from "path";
|
|
214
214
|
|
|
215
215
|
class NdjsonLogger {
|
|
@@ -234,9 +234,9 @@ class NdjsonLogger {
|
|
|
234
234
|
}
|
|
235
235
|
}
|
|
236
236
|
// src/lock/file-lock.ts
|
|
237
|
-
import { existsSync as existsSync6,
|
|
238
|
-
import { dirname as dirname4 } from "path";
|
|
237
|
+
import { existsSync as existsSync6, mkdirSync as mkdirSync4, readFileSync as readFileSync5, unlinkSync, writeFileSync as writeFileSync3 } from "fs";
|
|
239
238
|
import { hostname } from "os";
|
|
239
|
+
import { dirname as dirname4 } from "path";
|
|
240
240
|
function acquireLock(path, runId) {
|
|
241
241
|
if (existsSync6(path))
|
|
242
242
|
return false;
|
|
@@ -281,7 +281,7 @@ function forceUnlock(path) {
|
|
|
281
281
|
releaseLock(path);
|
|
282
282
|
}
|
|
283
283
|
// src/jira/mcp-backend.ts
|
|
284
|
-
import { existsSync as existsSync7,
|
|
284
|
+
import { existsSync as existsSync7, mkdirSync as mkdirSync5, readFileSync as readFileSync6, writeFileSync as writeFileSync4 } from "fs";
|
|
285
285
|
import { tmpdir } from "os";
|
|
286
286
|
import { join as join3 } from "path";
|
|
287
287
|
var MCP_ENV = "XERA_MCP_JIRA";
|
|
@@ -344,7 +344,10 @@ function createRestBackend(baseUrl, creds) {
|
|
|
344
344
|
const r = await req(`/rest/api/3/issue/${encodeURIComponent(key)}?fields=${want.join(",")}`);
|
|
345
345
|
const json = await r.json();
|
|
346
346
|
const f = json.fields;
|
|
347
|
-
const attachments = Array.isArray(f.attachment) ? f.attachment.map((a) => ({
|
|
347
|
+
const attachments = Array.isArray(f.attachment) ? f.attachment.map((a) => ({
|
|
348
|
+
filename: a.filename,
|
|
349
|
+
url: a.content
|
|
350
|
+
})) : [];
|
|
348
351
|
const ticket = {
|
|
349
352
|
key: json.key,
|
|
350
353
|
summary: String(f.summary ?? ""),
|
|
@@ -361,7 +364,11 @@ function createRestBackend(baseUrl, creds) {
|
|
|
361
364
|
const r = await req(`/rest/api/3/issue/${encodeURIComponent(key)}/comment`, {
|
|
362
365
|
method: "POST",
|
|
363
366
|
body: JSON.stringify({
|
|
364
|
-
body: {
|
|
367
|
+
body: {
|
|
368
|
+
type: "doc",
|
|
369
|
+
version: 1,
|
|
370
|
+
content: [{ type: "paragraph", content: [{ type: "text", text: body }] }]
|
|
371
|
+
}
|
|
365
372
|
})
|
|
366
373
|
});
|
|
367
374
|
const json = await r.json();
|
|
@@ -431,14 +438,14 @@ async function withRetry(fn, opts) {
|
|
|
431
438
|
attempt++;
|
|
432
439
|
if (attempt >= opts.maxAttempts)
|
|
433
440
|
break;
|
|
434
|
-
const delay = opts.baseMs *
|
|
441
|
+
const delay = opts.baseMs * opts.factor ** (attempt - 1);
|
|
435
442
|
await new Promise((r) => setTimeout(r, delay));
|
|
436
443
|
}
|
|
437
444
|
}
|
|
438
445
|
throw lastErr;
|
|
439
446
|
}
|
|
440
447
|
// src/auth/encrypt.ts
|
|
441
|
-
import {
|
|
448
|
+
import { createCipheriv, createDecipheriv, randomBytes } from "crypto";
|
|
442
449
|
var ALGO = "aes-256-gcm";
|
|
443
450
|
var KEY_LEN = 32;
|
|
444
451
|
var IV_LEN = 12;
|
|
@@ -482,7 +489,7 @@ var AUTH_KEY_ENV = "XERA_AUTH_KEY";
|
|
|
482
489
|
function resolveAuthKey() {
|
|
483
490
|
const key = process.env[AUTH_KEY_ENV];
|
|
484
491
|
if (!key) {
|
|
485
|
-
throw new Error(`${AUTH_KEY_ENV} not set. It is auto-generated by \`xera init\` and saved to .env.
|
|
492
|
+
throw new Error(`${AUTH_KEY_ENV} not set. It is auto-generated by \`xera init\` and saved to .env. If you deleted .env, regenerate it by running \`xera init --update\` \u2014 note that any cached auth state will be invalidated.`);
|
|
486
493
|
}
|
|
487
494
|
if (!/^[0-9a-f]{64}$/i.test(key)) {
|
|
488
495
|
throw new Error(`${AUTH_KEY_ENV} must be a 64-character hex string (32 bytes).`);
|
|
@@ -490,7 +497,7 @@ function resolveAuthKey() {
|
|
|
490
497
|
return key;
|
|
491
498
|
}
|
|
492
499
|
// src/auth/state.ts
|
|
493
|
-
import { existsSync as existsSync8,
|
|
500
|
+
import { existsSync as existsSync8, mkdirSync as mkdirSync6, readFileSync as readFileSync7, writeFileSync as writeFileSync5 } from "fs";
|
|
494
501
|
import { join as join4 } from "path";
|
|
495
502
|
import { z as z4 } from "zod";
|
|
496
503
|
var AuthStateEntrySchema = z4.object({
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../../web/src/adapter.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAMV,WAAW,EACZ,MAAM,uBAAuB,CAAC;AAI/B,eAAO,MAAM,UAAU,EAAE,WA4CxB,CAAC"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
import type { Page } from '@playwright/test';
|
|
2
|
+
export interface AuthRoleCreds {
|
|
3
|
+
email: string;
|
|
4
|
+
password: string;
|
|
5
|
+
}
|
|
6
|
+
export interface AuthSetupResult {
|
|
7
|
+
/** Optional explicit expiry hint, ms since epoch. */
|
|
8
|
+
expiresAt?: number;
|
|
9
|
+
}
|
|
10
|
+
export type AuthSetupFn = (page: Page, role: string, creds: AuthRoleCreds) => Promise<AuthSetupResult | void>;
|
|
11
|
+
/**
|
|
12
|
+
* Helper to type-narrow the user's auth setup function. Users import this in
|
|
13
|
+
* `shared/auth-setup.ts`.
|
|
14
|
+
*/
|
|
15
|
+
export declare function defineAuthSetup(fn: AuthSetupFn): AuthSetupFn;
|
|
16
|
+
//# sourceMappingURL=define.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"define.d.ts","sourceRoot":"","sources":["../../../../../web/src/auth-setup/define.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AAE7C,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAe;IAC9B,qDAAqD;IACrD,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,MAAM,WAAW,GAAG,CACxB,IAAI,EAAE,IAAI,EACV,IAAI,EAAE,MAAM,EACZ,KAAK,EAAE,aAAa,KACjB,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAAC;AAErC;;;GAGG;AACH,wBAAgB,eAAe,CAAC,EAAE,EAAE,WAAW,GAAG,WAAW,CAE5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-state.d.ts","sourceRoot":"","sources":["../../../../../web/src/auth-setup/playwright-state.ts"],"names":[],"mappings":"AAIA,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAQ1E"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import type { Browser } from '@playwright/test';
|
|
2
|
+
import type { AuthRoleCreds } from './define';
|
|
3
|
+
export interface RunAuthSetupInput {
|
|
4
|
+
role: string;
|
|
5
|
+
creds: AuthRoleCreds;
|
|
6
|
+
setupScriptPath: string;
|
|
7
|
+
authDir: string;
|
|
8
|
+
browser: Browser;
|
|
9
|
+
now?: Date;
|
|
10
|
+
}
|
|
11
|
+
export declare function runAuthSetup(input: RunAuthSetupInput): Promise<void>;
|
|
12
|
+
//# sourceMappingURL=runner.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"runner.d.ts","sourceRoot":"","sources":["../../../../../web/src/auth-setup/runner.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAEhD,OAAO,KAAK,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAE9C,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,aAAa,CAAC;IACrB,eAAe,EAAE,MAAM,CAAC;IACxB,OAAO,EAAE,MAAM,CAAC;IAChB,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,CAAC,EAAE,IAAI,CAAC;CACZ;AAED,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyB1E"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export interface SpawnResult {
|
|
2
|
+
exitCode: number;
|
|
3
|
+
}
|
|
4
|
+
export type SpawnFn = (cmd: string, args: string[], env: NodeJS.ProcessEnv) => Promise<SpawnResult>;
|
|
5
|
+
export interface RunPlaywrightInput {
|
|
6
|
+
specPath: string;
|
|
7
|
+
configPath: string;
|
|
8
|
+
outputDir: string;
|
|
9
|
+
env?: NodeJS.ProcessEnv;
|
|
10
|
+
spawn?: SpawnFn;
|
|
11
|
+
}
|
|
12
|
+
export interface RunPlaywrightResult {
|
|
13
|
+
outcome: 'PASS' | 'FAIL';
|
|
14
|
+
rawReportPath: string;
|
|
15
|
+
exitCode: number;
|
|
16
|
+
}
|
|
17
|
+
export declare function runPlaywright(input: RunPlaywrightInput): Promise<RunPlaywrightResult>;
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../../web/src/executor/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,WAAW;IAC1B,QAAQ,EAAE,MAAM,CAAC;CAClB;AACD,MAAM,MAAM,OAAO,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,GAAG,EAAE,MAAM,CAAC,UAAU,KAAK,OAAO,CAAC,WAAW,CAAC,CAAC;AAEpG,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,GAAG,CAAC,EAAE,MAAM,CAAC,UAAU,CAAC;IACxB,KAAK,CAAC,EAAE,OAAO,CAAC;CACjB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,aAAa,EAAE,MAAM,CAAC;IACtB,QAAQ,EAAE,MAAM,CAAC;CAClB;AAQD,wBAAsB,aAAa,CAAC,KAAK,EAAE,kBAAkB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAgB3F"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"playwright-args.d.ts","sourceRoot":"","sources":["../../../../../web/src/executor/playwright-args.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,mBAAmB;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,wBAAgB,mBAAmB,CAAC,KAAK,EAAE,mBAAmB,GAAG,MAAM,EAAE,CASxE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"gherkin-validate.d.ts","sourceRoot":"","sources":["../../../../../web/src/generator/gherkin-validate.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,qBAAqB;IACpC,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CAClD;AAED,wBAAgB,eAAe,CAAC,OAAO,EAAE,MAAM,GAAG,qBAAqB,CAmBtE"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import { type SelectorWarning } from './selector-rules';
|
|
2
|
+
export interface LintResult {
|
|
3
|
+
ok: boolean;
|
|
4
|
+
warnings: Array<SelectorWarning & {
|
|
5
|
+
file: string;
|
|
6
|
+
}>;
|
|
7
|
+
}
|
|
8
|
+
export declare function lintTicket(ticketDir: string): Promise<LintResult>;
|
|
9
|
+
//# sourceMappingURL=lint.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"lint.d.ts","sourceRoot":"","sources":["../../../../../web/src/generator/lint.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,KAAK,eAAe,EAAiB,MAAM,kBAAkB,CAAC;AAEvE,MAAM,WAAW,UAAU;IACzB,EAAE,EAAE,OAAO,CAAC;IACZ,QAAQ,EAAE,KAAK,CAAC,eAAe,GAAG;QAAE,IAAI,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACrD;AAaD,wBAAsB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CASvE"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pom-scan.d.ts","sourceRoot":"","sources":["../../../../../web/src/generator/pom-scan.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,SAAS;IACxB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,wBAAgB,cAAc,CAAC,QAAQ,EAAE,MAAM,GAAG,SAAS,EAAE,CAa5D"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"promote.d.ts","sourceRoot":"","sources":["../../../../../web/src/generator/promote.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAsB,UAAU,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BnE"}
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
export interface SelectorWarning {
|
|
2
|
+
rule: 'no-auto-classname' | 'prefer-role-over-css' | 'no-xpath';
|
|
3
|
+
line: number;
|
|
4
|
+
text: string;
|
|
5
|
+
message: string;
|
|
6
|
+
}
|
|
7
|
+
export declare function lintSelectors(source: string): {
|
|
8
|
+
warnings: SelectorWarning[];
|
|
9
|
+
};
|
|
10
|
+
//# sourceMappingURL=selector-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"selector-rules.d.ts","sourceRoot":"","sources":["../../../../../web/src/generator/selector-rules.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,eAAe;IAC9B,IAAI,EAAE,mBAAmB,GAAG,sBAAsB,GAAG,UAAU,CAAC;IAChE,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;CACjB;AAOD,wBAAgB,aAAa,CAAC,MAAM,EAAE,MAAM,GAAG;IAAE,QAAQ,EAAE,eAAe,EAAE,CAAA;CAAE,CAoC7E"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface TypecheckResult {
|
|
2
|
+
ok: boolean;
|
|
3
|
+
errors: string[];
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Type-check the ticket's TypeScript files using the project's root tsconfig.
|
|
7
|
+
* Errors are filtered to those whose path contains the ticket directory, so the
|
|
8
|
+
* skill sees only the locally relevant ones.
|
|
9
|
+
*/
|
|
10
|
+
export declare function typecheckTicket(ticketDir: string): Promise<TypecheckResult>;
|
|
11
|
+
//# sourceMappingURL=typecheck.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"typecheck.d.ts","sourceRoot":"","sources":["../../../../../web/src/generator/typecheck.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC9B,EAAE,EAAE,OAAO,CAAC;IACZ,MAAM,EAAE,MAAM,EAAE,CAAC;CAClB;AAkBD;;;;GAIG;AACH,wBAAsB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC,CAuBjF"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
export * from './adapter';
|
|
2
|
+
export * from './auth-setup/define';
|
|
3
|
+
export * from './auth-setup/runner';
|
|
4
|
+
export * from './auth-setup/playwright-state';
|
|
5
|
+
export * from './executor';
|
|
6
|
+
export * from './executor/playwright-args';
|
|
7
|
+
export * from './trace-normalizer/normalize';
|
|
8
|
+
export * from './trace-normalizer/parse';
|
|
9
|
+
export * from './trace-normalizer/scrub';
|
|
10
|
+
export * from './trace-normalizer/scrub-rules';
|
|
11
|
+
export * from './trace-normalizer/unzip';
|
|
12
|
+
export * from './generator/gherkin-validate';
|
|
13
|
+
export * from './generator/typecheck';
|
|
14
|
+
export * from './generator/lint';
|
|
15
|
+
export * from './generator/selector-rules';
|
|
16
|
+
export * from './generator/pom-scan';
|
|
17
|
+
export * from './generator/promote';
|
|
18
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../../web/src/index.ts"],"names":[],"mappings":"AAAA,cAAc,WAAW,CAAC;AAC1B,cAAc,qBAAqB,CAAC;AACpC,cAAc,qBAAqB,CAAC;AACpC,cAAc,+BAA+B,CAAC;AAC9C,cAAc,YAAY,CAAC;AAC3B,cAAc,4BAA4B,CAAC;AAC3C,cAAc,8BAA8B,CAAC;AAC7C,cAAc,0BAA0B,CAAC;AACzC,cAAc,0BAA0B,CAAC;AACzC,cAAc,gCAAgC,CAAC;AAC/C,cAAc,0BAA0B,CAAC;AACzC,cAAc,8BAA8B,CAAC;AAC7C,cAAc,uBAAuB,CAAC;AACtC,cAAc,kBAAkB,CAAC;AACjC,cAAc,4BAA4B,CAAC;AAC3C,cAAc,sBAAsB,CAAC;AACrC,cAAc,qBAAqB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"normalize.d.ts","sourceRoot":"","sources":["../../../../../web/src/trace-normalizer/normalize.ts"],"names":[],"mappings":"AAGA,OAAO,EAA+B,KAAK,aAAa,EAAS,MAAM,SAAS,CAAC;AAGjF,MAAM,WAAW,iBAAiB;IAChC,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,MAAM,CAAC;CAChB;AAkBD,wBAAsB,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,aAAa,CAAC,CA+CnF"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
import type { NormalizedRun } from './scrub';
|
|
2
|
+
interface PWAttachment {
|
|
3
|
+
name: string;
|
|
4
|
+
path?: string;
|
|
5
|
+
contentType?: string;
|
|
6
|
+
}
|
|
7
|
+
interface PWResult {
|
|
8
|
+
status: string;
|
|
9
|
+
duration: number;
|
|
10
|
+
error?: {
|
|
11
|
+
message?: string;
|
|
12
|
+
stack?: string;
|
|
13
|
+
};
|
|
14
|
+
attachments?: PWAttachment[];
|
|
15
|
+
}
|
|
16
|
+
interface PWTest {
|
|
17
|
+
results: PWResult[];
|
|
18
|
+
}
|
|
19
|
+
interface PWSpec {
|
|
20
|
+
title: string;
|
|
21
|
+
ok: boolean;
|
|
22
|
+
tests: PWTest[];
|
|
23
|
+
}
|
|
24
|
+
interface PWSuite {
|
|
25
|
+
title: string;
|
|
26
|
+
specs?: PWSpec[];
|
|
27
|
+
suites?: PWSuite[];
|
|
28
|
+
}
|
|
29
|
+
interface PWReport {
|
|
30
|
+
stats: {
|
|
31
|
+
unexpected: number;
|
|
32
|
+
};
|
|
33
|
+
suites: PWSuite[];
|
|
34
|
+
}
|
|
35
|
+
export declare function parsePlaywrightReport(report: PWReport, runId: string): NormalizedRun;
|
|
36
|
+
export {};
|
|
37
|
+
//# sourceMappingURL=parse.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"parse.d.ts","sourceRoot":"","sources":["../../../../../web/src/trace-normalizer/parse.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,aAAa,EAAsB,MAAM,SAAS,CAAC;AAEjE,UAAU,YAAY;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AACD,UAAU,QAAQ;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,CAAC,EAAE;QAAE,OAAO,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC;IAC7C,WAAW,CAAC,EAAE,YAAY,EAAE,CAAC;CAC9B;AACD,UAAU,MAAM;IACd,OAAO,EAAE,QAAQ,EAAE,CAAC;CACrB;AACD,UAAU,MAAM;IACd,KAAK,EAAE,MAAM,CAAC;IACd,EAAE,EAAE,OAAO,CAAC;IACZ,KAAK,EAAE,MAAM,EAAE,CAAC;CACjB;AACD,UAAU,OAAO;IACf,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,CAAC,EAAE,MAAM,EAAE,CAAC;IACjB,MAAM,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AACD,UAAU,QAAQ;IAChB,KAAK,EAAE;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;IAC9B,MAAM,EAAE,OAAO,EAAE,CAAC;CACnB;AASD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,GAAG,aAAa,CA2BpF"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export declare const SENSITIVE_HEADERS: readonly string[];
|
|
2
|
+
export declare const SENSITIVE_BODY_KEYS: readonly RegExp[];
|
|
3
|
+
export declare const JWT_RE: RegExp;
|
|
4
|
+
export declare const CREDIT_CARD_RE: RegExp;
|
|
5
|
+
export declare const EMAIL_RE: RegExp;
|
|
6
|
+
export declare const PHONE_RE: RegExp;
|
|
7
|
+
export declare const EMAIL_RE_G: RegExp;
|
|
8
|
+
export declare const PHONE_RE_G: RegExp;
|
|
9
|
+
export declare function scrubHeaders(headers: Record<string, string>): Record<string, string>;
|
|
10
|
+
export declare function scrubBodyJson(body: unknown): unknown;
|
|
11
|
+
export declare function scrubFreeText(s: string): string;
|
|
12
|
+
//# sourceMappingURL=scrub-rules.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrub-rules.d.ts","sourceRoot":"","sources":["../../../../../web/src/trace-normalizer/scrub-rules.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,iBAAiB,EAAE,SAAS,MAAM,EAQ9C,CAAC;AAEF,eAAO,MAAM,mBAAmB,EAAE,SAAS,MAAM,EAYhD,CAAC;AAEF,eAAO,MAAM,MAAM,QAAmE,CAAC;AACvF,eAAO,MAAM,cAAc,QAAgC,CAAC;AAC5D,eAAO,MAAM,QAAQ,QAAuD,CAAC;AAE7E,eAAO,MAAM,QAAQ,QAA8B,CAAC;AAIpD,eAAO,MAAM,UAAU,QAAmC,CAAC;AAC3D,eAAO,MAAM,UAAU,QAAmC,CAAC;AAI3D,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAMpF;AAED,wBAAgB,aAAa,CAAC,IAAI,EAAE,OAAO,GAAG,OAAO,CAepD;AAED,wBAAgB,aAAa,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAM/C"}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
export interface NormalizedNetworkEntry {
|
|
2
|
+
method: string;
|
|
3
|
+
url: string;
|
|
4
|
+
status: number;
|
|
5
|
+
requestHeaders?: Record<string, string>;
|
|
6
|
+
requestBody?: unknown;
|
|
7
|
+
responseHeaders?: Record<string, string>;
|
|
8
|
+
responseBody?: unknown;
|
|
9
|
+
}
|
|
10
|
+
export interface NormalizedScenario {
|
|
11
|
+
name: string;
|
|
12
|
+
outcome: 'PASS' | 'FAIL' | 'SKIPPED';
|
|
13
|
+
failure?: {
|
|
14
|
+
step?: string;
|
|
15
|
+
errorMessage?: string;
|
|
16
|
+
domSnapshotAtFailure?: string;
|
|
17
|
+
networkAtFailure?: NormalizedNetworkEntry[];
|
|
18
|
+
consoleAtFailure?: string[];
|
|
19
|
+
screenshotPath?: string;
|
|
20
|
+
};
|
|
21
|
+
}
|
|
22
|
+
export interface NormalizedRun {
|
|
23
|
+
runId: string;
|
|
24
|
+
outcome: 'PASS' | 'FAIL';
|
|
25
|
+
scenarios: NormalizedScenario[];
|
|
26
|
+
scrubbed_fields_count: number;
|
|
27
|
+
}
|
|
28
|
+
export declare function scrub(run: NormalizedRun): NormalizedRun;
|
|
29
|
+
//# sourceMappingURL=scrub.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"scrub.d.ts","sourceRoot":"","sources":["../../../../../web/src/trace-normalizer/scrub.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,sBAAsB;IACrC,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,MAAM,EAAE,MAAM,CAAC;IACf,cAAc,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACxC,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,YAAY,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,kBAAkB;IACjC,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAAC;IACrC,OAAO,CAAC,EAAE;QACR,IAAI,CAAC,EAAE,MAAM,CAAC;QACd,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,oBAAoB,CAAC,EAAE,MAAM,CAAC;QAC9B,gBAAgB,CAAC,EAAE,sBAAsB,EAAE,CAAC;QAC5C,gBAAgB,CAAC,EAAE,MAAM,EAAE,CAAC;QAC5B,cAAc,CAAC,EAAE,MAAM,CAAC;KACzB,CAAC;CACH;AAED,MAAM,WAAW,aAAa;IAC5B,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,GAAG,MAAM,CAAC;IACzB,SAAS,EAAE,kBAAkB,EAAE,CAAC;IAChC,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAoBD,wBAAgB,KAAK,CAAC,GAAG,EAAE,aAAa,GAAG,aAAa,CA2CvD"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"unzip.d.ts","sourceRoot":"","sources":["../../../../../web/src/trace-normalizer/unzip.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,YAAY;IAC3B,+BAA+B;IAC/B,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;CAC/B;AAED,wBAAgB,UAAU,CAAC,SAAS,EAAE,MAAM,GAAG,YAAY,CAgB1D"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@xera-ai/core",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.3.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"main": "./dist/index.js",
|
|
6
6
|
"types": "./dist/index.d.ts",
|
|
@@ -27,6 +27,7 @@
|
|
|
27
27
|
"dependencies": {
|
|
28
28
|
"zod": "3.23.8",
|
|
29
29
|
"@xera-ai/web": "^0.1.5",
|
|
30
|
-
"@playwright/test": "1.48.0"
|
|
30
|
+
"@playwright/test": "1.48.0",
|
|
31
|
+
"fflate": "0.8.2"
|
|
31
32
|
}
|
|
32
33
|
}
|
package/src/adapter/types.ts
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
import type { XeraConfig } from '../config/schema';
|
|
2
1
|
import type { Classification } from '../artifact/status';
|
|
2
|
+
import type { XeraConfig } from '../config/schema';
|
|
3
3
|
|
|
4
4
|
export interface GenerateInput {
|
|
5
5
|
ticketDir: string;
|
|
@@ -57,6 +57,9 @@ export interface TestAdapter {
|
|
|
57
57
|
readonly id: string;
|
|
58
58
|
generate(input: GenerateInput): Promise<GenerateResult>;
|
|
59
59
|
execute(input: ExecuteInput): Promise<RunResult>;
|
|
60
|
-
classify?(
|
|
60
|
+
classify?(
|
|
61
|
+
run: RunResult,
|
|
62
|
+
ctx: ClassifyContext,
|
|
63
|
+
): Partial<{ class: Classification; rationale: string }>;
|
|
61
64
|
doctor(): Promise<DoctorReport>;
|
|
62
65
|
}
|
package/src/artifact/meta.ts
CHANGED
package/src/artifact/status.ts
CHANGED
package/src/auth/encrypt.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { createCipheriv, createDecipheriv, randomBytes } from 'node:crypto';
|
|
2
2
|
|
|
3
3
|
const ALGO = 'aes-256-gcm';
|
|
4
4
|
const KEY_LEN = 32; // bytes (256 bits)
|
|
5
|
-
const IV_LEN = 12;
|
|
5
|
+
const IV_LEN = 12; // recommended for GCM
|
|
6
6
|
const TAG_LEN = 16;
|
|
7
7
|
const VERSION = 'v1';
|
|
8
8
|
|
package/src/auth/key.ts
CHANGED
|
@@ -4,8 +4,7 @@ export function resolveAuthKey(): string {
|
|
|
4
4
|
const key = process.env[AUTH_KEY_ENV];
|
|
5
5
|
if (!key) {
|
|
6
6
|
throw new Error(
|
|
7
|
-
`${AUTH_KEY_ENV} not set. It is auto-generated by \`xera init\` and saved to .env.
|
|
8
|
-
`If you deleted .env, regenerate it by running \`xera init --update\` — note that any cached auth state will be invalidated.`,
|
|
7
|
+
`${AUTH_KEY_ENV} not set. It is auto-generated by \`xera init\` and saved to .env. If you deleted .env, regenerate it by running \`xera init --update\` — note that any cached auth state will be invalidated.`,
|
|
9
8
|
);
|
|
10
9
|
}
|
|
11
10
|
if (!/^[0-9a-f]{64}$/i.test(key)) {
|
package/src/auth/refresh.ts
CHANGED
|
@@ -13,7 +13,10 @@ export function parseDuration(d: string): number {
|
|
|
13
13
|
return n * 1000;
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
export interface RefreshPolicy {
|
|
16
|
+
export interface RefreshPolicy {
|
|
17
|
+
ttl: string;
|
|
18
|
+
refreshBuffer: string;
|
|
19
|
+
}
|
|
17
20
|
|
|
18
21
|
export function needsRefresh(
|
|
19
22
|
entry: AuthStateEntry | null,
|
package/src/auth/state.ts
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { existsSync, readFileSync, writeFileSync
|
|
1
|
+
import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
|
|
2
2
|
import { join } from 'node:path';
|
|
3
3
|
import { z } from 'zod';
|
|
4
|
-
import {
|
|
4
|
+
import { decrypt, encrypt } from './encrypt';
|
|
5
5
|
import { resolveAuthKey } from './key';
|
|
6
6
|
|
|
7
7
|
export const AuthStateEntrySchema = z.object({
|