@xera-ai/core 0.1.6 → 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.
Files changed (210) hide show
  1. package/dist/bin/internal.js +2039 -725
  2. package/dist/{adapter → core/src/adapter}/types.d.ts +1 -1
  3. package/dist/core/src/adapter/types.d.ts.map +1 -0
  4. package/dist/core/src/artifact/hash.d.ts.map +1 -0
  5. package/dist/core/src/artifact/meta.d.ts.map +1 -0
  6. package/dist/core/src/artifact/paths.d.ts.map +1 -0
  7. package/dist/core/src/artifact/status.d.ts.map +1 -0
  8. package/dist/core/src/auth/encrypt.d.ts.map +1 -0
  9. package/dist/core/src/auth/key.d.ts.map +1 -0
  10. package/dist/core/src/auth/refresh.d.ts.map +1 -0
  11. package/dist/core/src/auth/state.d.ts.map +1 -0
  12. package/dist/core/src/bin-internal/doctor.d.ts +5 -0
  13. package/dist/core/src/bin-internal/doctor.d.ts.map +1 -0
  14. package/dist/core/src/bin-internal/eval-deterministic.d.ts +5 -0
  15. package/dist/core/src/bin-internal/eval-deterministic.d.ts.map +1 -0
  16. package/dist/core/src/bin-internal/eval-prepare.d.ts +7 -0
  17. package/dist/core/src/bin-internal/eval-prepare.d.ts.map +1 -0
  18. package/dist/core/src/bin-internal/eval-report.d.ts +5 -0
  19. package/dist/core/src/bin-internal/eval-report.d.ts.map +1 -0
  20. package/dist/core/src/bin-internal/exec.d.ts.map +1 -0
  21. package/dist/core/src/bin-internal/fetch.d.ts.map +1 -0
  22. package/dist/core/src/bin-internal/heal-prepare.d.ts +19 -0
  23. package/dist/core/src/bin-internal/heal-prepare.d.ts.map +1 -0
  24. package/dist/core/src/bin-internal/index.d.ts.map +1 -0
  25. package/dist/core/src/bin-internal/lint.d.ts.map +1 -0
  26. package/dist/core/src/bin-internal/normalize.d.ts.map +1 -0
  27. package/dist/core/src/bin-internal/post.d.ts.map +1 -0
  28. package/dist/core/src/bin-internal/promote.d.ts.map +1 -0
  29. package/dist/core/src/bin-internal/report.d.ts.map +1 -0
  30. package/dist/core/src/bin-internal/status-cmd.d.ts.map +1 -0
  31. package/dist/core/src/bin-internal/typecheck.d.ts.map +1 -0
  32. package/dist/core/src/bin-internal/unlock.d.ts.map +1 -0
  33. package/dist/core/src/bin-internal/validate-feature.d.ts.map +1 -0
  34. package/dist/core/src/bin-internal/verify-prompts.d.ts +7 -0
  35. package/dist/core/src/bin-internal/verify-prompts.d.ts.map +1 -0
  36. package/dist/core/src/classifier/aggregate.d.ts.map +1 -0
  37. package/dist/core/src/classifier/history.d.ts.map +1 -0
  38. package/dist/core/src/classifier/types.d.ts.map +1 -0
  39. package/dist/core/src/config/define.d.ts.map +1 -0
  40. package/dist/core/src/config/load.d.ts.map +1 -0
  41. package/dist/{config → core/src/config}/schema.d.ts.map +1 -1
  42. package/dist/core/src/eval/paths.d.ts +15 -0
  43. package/dist/core/src/eval/paths.d.ts.map +1 -0
  44. package/dist/core/src/eval/run-id.d.ts +6 -0
  45. package/dist/core/src/eval/run-id.d.ts.map +1 -0
  46. package/dist/core/src/eval/types.d.ts +551 -0
  47. package/dist/core/src/eval/types.d.ts.map +1 -0
  48. package/dist/core/src/index.d.ts.map +1 -0
  49. package/dist/core/src/jira/client.d.ts.map +1 -0
  50. package/dist/core/src/jira/fields.d.ts.map +1 -0
  51. package/dist/core/src/jira/mcp-backend.d.ts.map +1 -0
  52. package/dist/core/src/jira/rest-backend.d.ts.map +1 -0
  53. package/dist/core/src/jira/retry.d.ts.map +1 -0
  54. package/dist/core/src/jira/types.d.ts.map +1 -0
  55. package/dist/core/src/lock/file-lock.d.ts.map +1 -0
  56. package/dist/core/src/logging/ndjson-logger.d.ts.map +1 -0
  57. package/dist/core/src/reporter/jira-comment.d.ts.map +1 -0
  58. package/dist/core/src/reporter/status-writer.d.ts.map +1 -0
  59. package/dist/src/index.js +19 -12
  60. package/dist/web/src/adapter.d.ts +3 -0
  61. package/dist/web/src/adapter.d.ts.map +1 -0
  62. package/dist/web/src/auth-setup/define.d.ts +16 -0
  63. package/dist/web/src/auth-setup/define.d.ts.map +1 -0
  64. package/dist/web/src/auth-setup/playwright-state.d.ts +2 -0
  65. package/dist/web/src/auth-setup/playwright-state.d.ts.map +1 -0
  66. package/dist/web/src/auth-setup/runner.d.ts +12 -0
  67. package/dist/web/src/auth-setup/runner.d.ts.map +1 -0
  68. package/dist/web/src/executor/index.d.ts +18 -0
  69. package/dist/web/src/executor/index.d.ts.map +1 -0
  70. package/dist/web/src/executor/playwright-args.d.ts +7 -0
  71. package/dist/web/src/executor/playwright-args.d.ts.map +1 -0
  72. package/dist/web/src/generator/gherkin-validate.d.ts +9 -0
  73. package/dist/web/src/generator/gherkin-validate.d.ts.map +1 -0
  74. package/dist/web/src/generator/lint.d.ts +9 -0
  75. package/dist/web/src/generator/lint.d.ts.map +1 -0
  76. package/dist/web/src/generator/pom-scan.d.ts +6 -0
  77. package/dist/web/src/generator/pom-scan.d.ts.map +1 -0
  78. package/dist/web/src/generator/promote.d.ts +7 -0
  79. package/dist/web/src/generator/promote.d.ts.map +1 -0
  80. package/dist/web/src/generator/selector-rules.d.ts +10 -0
  81. package/dist/web/src/generator/selector-rules.d.ts.map +1 -0
  82. package/dist/web/src/generator/typecheck.d.ts +11 -0
  83. package/dist/web/src/generator/typecheck.d.ts.map +1 -0
  84. package/dist/web/src/index.d.ts +18 -0
  85. package/dist/web/src/index.d.ts.map +1 -0
  86. package/dist/web/src/trace-normalizer/normalize.d.ts +7 -0
  87. package/dist/web/src/trace-normalizer/normalize.d.ts.map +1 -0
  88. package/dist/web/src/trace-normalizer/parse.d.ts +37 -0
  89. package/dist/web/src/trace-normalizer/parse.d.ts.map +1 -0
  90. package/dist/web/src/trace-normalizer/scrub-rules.d.ts +12 -0
  91. package/dist/web/src/trace-normalizer/scrub-rules.d.ts.map +1 -0
  92. package/dist/web/src/trace-normalizer/scrub.d.ts +29 -0
  93. package/dist/web/src/trace-normalizer/scrub.d.ts.map +1 -0
  94. package/dist/web/src/trace-normalizer/unzip.d.ts +6 -0
  95. package/dist/web/src/trace-normalizer/unzip.d.ts.map +1 -0
  96. package/package.json +3 -2
  97. package/src/adapter/types.ts +5 -2
  98. package/src/artifact/meta.ts +1 -1
  99. package/src/artifact/status.ts +1 -1
  100. package/src/auth/encrypt.ts +2 -2
  101. package/src/auth/key.ts +1 -2
  102. package/src/auth/refresh.ts +4 -1
  103. package/src/auth/state.ts +2 -2
  104. package/src/bin-internal/doctor.ts +133 -0
  105. package/src/bin-internal/eval-deterministic.ts +149 -0
  106. package/src/bin-internal/eval-prepare.ts +214 -0
  107. package/src/bin-internal/eval-report.ts +177 -0
  108. package/src/bin-internal/exec.ts +38 -16
  109. package/src/bin-internal/fetch.ts +21 -10
  110. package/src/bin-internal/heal-prepare.ts +230 -0
  111. package/src/bin-internal/index.ts +25 -11
  112. package/src/bin-internal/lint.ts +11 -4
  113. package/src/bin-internal/normalize.ts +23 -9
  114. package/src/bin-internal/post.ts +10 -4
  115. package/src/bin-internal/report.ts +3 -3
  116. package/src/bin-internal/status-cmd.ts +11 -3
  117. package/src/bin-internal/typecheck.ts +9 -3
  118. package/src/bin-internal/unlock.ts +12 -4
  119. package/src/bin-internal/validate-feature.ts +14 -5
  120. package/src/bin-internal/verify-prompts.ts +59 -0
  121. package/src/classifier/aggregate.ts +13 -6
  122. package/src/config/define.ts +3 -1
  123. package/src/config/load.ts +1 -1
  124. package/src/config/schema.ts +43 -37
  125. package/src/eval/paths.ts +32 -0
  126. package/src/eval/run-id.ts +30 -0
  127. package/src/eval/types.ts +101 -0
  128. package/src/jira/client.ts +4 -2
  129. package/src/jira/fields.ts +4 -2
  130. package/src/jira/mcp-backend.ts +1 -1
  131. package/src/jira/rest-backend.ts +17 -5
  132. package/src/jira/retry.ts +2 -2
  133. package/src/lock/file-lock.ts +2 -2
  134. package/src/logging/ndjson-logger.ts +2 -2
  135. package/src/reporter/jira-comment.ts +13 -7
  136. package/src/reporter/status-writer.ts +2 -2
  137. package/dist/adapter/types.d.ts.map +0 -1
  138. package/dist/artifact/hash.d.ts.map +0 -1
  139. package/dist/artifact/meta.d.ts.map +0 -1
  140. package/dist/artifact/paths.d.ts.map +0 -1
  141. package/dist/artifact/status.d.ts.map +0 -1
  142. package/dist/auth/encrypt.d.ts.map +0 -1
  143. package/dist/auth/key.d.ts.map +0 -1
  144. package/dist/auth/refresh.d.ts.map +0 -1
  145. package/dist/auth/state.d.ts.map +0 -1
  146. package/dist/bin-internal/exec.d.ts.map +0 -1
  147. package/dist/bin-internal/fetch.d.ts.map +0 -1
  148. package/dist/bin-internal/index.d.ts.map +0 -1
  149. package/dist/bin-internal/lint.d.ts.map +0 -1
  150. package/dist/bin-internal/normalize.d.ts.map +0 -1
  151. package/dist/bin-internal/post.d.ts.map +0 -1
  152. package/dist/bin-internal/promote.d.ts.map +0 -1
  153. package/dist/bin-internal/report.d.ts.map +0 -1
  154. package/dist/bin-internal/status-cmd.d.ts.map +0 -1
  155. package/dist/bin-internal/typecheck.d.ts.map +0 -1
  156. package/dist/bin-internal/unlock.d.ts.map +0 -1
  157. package/dist/bin-internal/validate-feature.d.ts.map +0 -1
  158. package/dist/classifier/aggregate.d.ts.map +0 -1
  159. package/dist/classifier/history.d.ts.map +0 -1
  160. package/dist/classifier/types.d.ts.map +0 -1
  161. package/dist/config/define.d.ts.map +0 -1
  162. package/dist/config/load.d.ts.map +0 -1
  163. package/dist/index.d.ts.map +0 -1
  164. package/dist/jira/client.d.ts.map +0 -1
  165. package/dist/jira/fields.d.ts.map +0 -1
  166. package/dist/jira/mcp-backend.d.ts.map +0 -1
  167. package/dist/jira/rest-backend.d.ts.map +0 -1
  168. package/dist/jira/retry.d.ts.map +0 -1
  169. package/dist/jira/types.d.ts.map +0 -1
  170. package/dist/lock/file-lock.d.ts.map +0 -1
  171. package/dist/logging/ndjson-logger.d.ts.map +0 -1
  172. package/dist/reporter/jira-comment.d.ts.map +0 -1
  173. package/dist/reporter/status-writer.d.ts.map +0 -1
  174. /package/dist/{artifact → core/src/artifact}/hash.d.ts +0 -0
  175. /package/dist/{artifact → core/src/artifact}/meta.d.ts +0 -0
  176. /package/dist/{artifact → core/src/artifact}/paths.d.ts +0 -0
  177. /package/dist/{artifact → core/src/artifact}/status.d.ts +0 -0
  178. /package/dist/{auth → core/src/auth}/encrypt.d.ts +0 -0
  179. /package/dist/{auth → core/src/auth}/key.d.ts +0 -0
  180. /package/dist/{auth → core/src/auth}/refresh.d.ts +0 -0
  181. /package/dist/{auth → core/src/auth}/state.d.ts +0 -0
  182. /package/dist/{bin-internal → core/src/bin-internal}/exec.d.ts +0 -0
  183. /package/dist/{bin-internal → core/src/bin-internal}/fetch.d.ts +0 -0
  184. /package/dist/{bin-internal → core/src/bin-internal}/index.d.ts +0 -0
  185. /package/dist/{bin-internal → core/src/bin-internal}/lint.d.ts +0 -0
  186. /package/dist/{bin-internal → core/src/bin-internal}/normalize.d.ts +0 -0
  187. /package/dist/{bin-internal → core/src/bin-internal}/post.d.ts +0 -0
  188. /package/dist/{bin-internal → core/src/bin-internal}/promote.d.ts +0 -0
  189. /package/dist/{bin-internal → core/src/bin-internal}/report.d.ts +0 -0
  190. /package/dist/{bin-internal → core/src/bin-internal}/status-cmd.d.ts +0 -0
  191. /package/dist/{bin-internal → core/src/bin-internal}/typecheck.d.ts +0 -0
  192. /package/dist/{bin-internal → core/src/bin-internal}/unlock.d.ts +0 -0
  193. /package/dist/{bin-internal → core/src/bin-internal}/validate-feature.d.ts +0 -0
  194. /package/dist/{classifier → core/src/classifier}/aggregate.d.ts +0 -0
  195. /package/dist/{classifier → core/src/classifier}/history.d.ts +0 -0
  196. /package/dist/{classifier → core/src/classifier}/types.d.ts +0 -0
  197. /package/dist/{config → core/src/config}/define.d.ts +0 -0
  198. /package/dist/{config → core/src/config}/load.d.ts +0 -0
  199. /package/dist/{config → core/src/config}/schema.d.ts +0 -0
  200. /package/dist/{index.d.ts → core/src/index.d.ts} +0 -0
  201. /package/dist/{jira → core/src/jira}/client.d.ts +0 -0
  202. /package/dist/{jira → core/src/jira}/fields.d.ts +0 -0
  203. /package/dist/{jira → core/src/jira}/mcp-backend.d.ts +0 -0
  204. /package/dist/{jira → core/src/jira}/rest-backend.d.ts +0 -0
  205. /package/dist/{jira → core/src/jira}/retry.d.ts +0 -0
  206. /package/dist/{jira → core/src/jira}/types.d.ts +0 -0
  207. /package/dist/{lock → core/src/lock}/file-lock.d.ts +0 -0
  208. /package/dist/{logging → core/src/logging}/ndjson-logger.d.ts +0 -0
  209. /package/dist/{reporter → core/src/reporter}/jira-comment.d.ts +0 -0
  210. /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, mkdirSync } from "fs";
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, readFileSync as readFileSync3, writeFileSync as writeFileSync2, mkdirSync as mkdirSync2 } from "fs";
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, mkdirSync as mkdirSync3, existsSync as existsSync5, readFileSync as readFileSync4 } from "fs";
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, readFileSync as readFileSync5, writeFileSync as writeFileSync3, unlinkSync, mkdirSync as mkdirSync4 } from "fs";
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, readFileSync as readFileSync6, writeFileSync as writeFileSync4, mkdirSync as mkdirSync5 } from "fs";
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) => ({ filename: a.filename, url: a.content })) : [];
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: { type: "doc", version: 1, content: [{ type: "paragraph", content: [{ type: "text", text: 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 * Math.pow(opts.factor, attempt - 1);
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 { randomBytes, createCipheriv, createDecipheriv } from "crypto";
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. ` + `If you deleted .env, regenerate it by running \`xera init --update\` \u2014 note that any cached auth state will be invalidated.`);
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, readFileSync as readFileSync7, writeFileSync as writeFileSync5, mkdirSync as mkdirSync6 } from "fs";
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,3 @@
1
+ import type { TestAdapter } from '@xera-ai/core/adapter';
2
+ export declare const WebAdapter: TestAdapter;
3
+ //# sourceMappingURL=adapter.d.ts.map
@@ -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,2 @@
1
+ export declare function stagePlaywrightState(authDir: string, role: string): string;
2
+ //# sourceMappingURL=playwright-state.d.ts.map
@@ -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,7 @@
1
+ export interface PlaywrightArgsInput {
2
+ specPath: string;
3
+ outputDir: string;
4
+ configPath: string;
5
+ }
6
+ export declare function buildPlaywrightArgs(input: PlaywrightArgsInput): string[];
7
+ //# sourceMappingURL=playwright-args.d.ts.map
@@ -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,9 @@
1
+ export interface GherkinValidateResult {
2
+ ok: boolean;
3
+ errors: Array<{
4
+ line: number;
5
+ message: string;
6
+ }>;
7
+ }
8
+ export declare function validateGherkin(content: string): GherkinValidateResult;
9
+ //# sourceMappingURL=gherkin-validate.d.ts.map
@@ -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,6 @@
1
+ export interface SharedPom {
2
+ className: string;
3
+ absolutePath: string;
4
+ }
5
+ export declare function scanSharedPoms(repoRoot: string): SharedPom[];
6
+ //# sourceMappingURL=pom-scan.d.ts.map
@@ -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,7 @@
1
+ export interface PromoteInput {
2
+ repoRoot: string;
3
+ ticket: string;
4
+ className: string;
5
+ }
6
+ export declare function promotePom(input: PromoteInput): Promise<void>;
7
+ //# sourceMappingURL=promote.d.ts.map
@@ -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,7 @@
1
+ import { type NormalizedRun } from './scrub';
2
+ export interface NormalizeRunInput {
3
+ runId: string;
4
+ runDir: string;
5
+ }
6
+ export declare function normalizeRun(input: NormalizeRunInput): Promise<NormalizedRun>;
7
+ //# sourceMappingURL=normalize.d.ts.map
@@ -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,6 @@
1
+ export interface TraceEntries {
2
+ /** Filename → text contents */
3
+ files: Record<string, string>;
4
+ }
5
+ export declare function unzipTrace(tracePath: string): TraceEntries;
6
+ //# sourceMappingURL=unzip.d.ts.map
@@ -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.1.6",
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
  }
@@ -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?(run: RunResult, ctx: ClassifyContext): Partial<{ class: Classification; rationale: string }>;
60
+ classify?(
61
+ run: RunResult,
62
+ ctx: ClassifyContext,
63
+ ): Partial<{ class: Classification; rationale: string }>;
61
64
  doctor(): Promise<DoctorReport>;
62
65
  }
@@ -1,4 +1,4 @@
1
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { dirname } from 'node:path';
3
3
  import { z } from 'zod';
4
4
 
@@ -1,4 +1,4 @@
1
- import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'node:fs';
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { dirname } from 'node:path';
3
3
  import { z } from 'zod';
4
4
 
@@ -1,8 +1,8 @@
1
- import { randomBytes, createCipheriv, createDecipheriv } from 'node:crypto';
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; // recommended for GCM
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)) {
@@ -13,7 +13,10 @@ export function parseDuration(d: string): number {
13
13
  return n * 1000;
14
14
  }
15
15
 
16
- export interface RefreshPolicy { ttl: string; refreshBuffer: string; }
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, mkdirSync } from 'node:fs';
1
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
2
2
  import { join } from 'node:path';
3
3
  import { z } from 'zod';
4
- import { encrypt, decrypt } from './encrypt';
4
+ import { decrypt, encrypt } from './encrypt';
5
5
  import { resolveAuthKey } from './key';
6
6
 
7
7
  export const AuthStateEntrySchema = z.object({