@jevitate/cli 0.1.0 → 0.2.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 (375) hide show
  1. package/README.md +23 -0
  2. package/dist/ai-cli.js +40 -30
  3. package/dist/ai-cli.js.map +1 -1
  4. package/dist/author-journey-cli.d.ts +4 -0
  5. package/dist/author-journey-cli.js +109 -0
  6. package/dist/author-journey-cli.js.map +1 -0
  7. package/dist/bin.js +58077 -22454
  8. package/dist/bin.js.map +1 -1
  9. package/dist/browser-run-options.d.ts +58 -0
  10. package/dist/browser-run-options.js +106 -0
  11. package/dist/browser-run-options.js.map +1 -0
  12. package/dist/build-info.generated.d.ts +2 -0
  13. package/dist/build-info.generated.js +10 -0
  14. package/dist/build-info.generated.js.map +1 -0
  15. package/dist/check-api.d.ts +5 -0
  16. package/dist/check-api.js +233 -0
  17. package/dist/check-api.js.map +1 -0
  18. package/dist/check-budget.d.ts +26 -0
  19. package/dist/check-budget.js +89 -0
  20. package/dist/check-budget.js.map +1 -0
  21. package/dist/check-cli.d.ts +31 -0
  22. package/dist/check-cli.js +109 -0
  23. package/dist/check-cli.js.map +1 -0
  24. package/dist/check-execute.d.ts +25 -0
  25. package/dist/check-execute.js +385 -0
  26. package/dist/check-execute.js.map +1 -0
  27. package/dist/check-plan.d.ts +113 -0
  28. package/dist/check-plan.js +448 -0
  29. package/dist/check-plan.js.map +1 -0
  30. package/dist/check-suite.d.ts +171 -0
  31. package/dist/check-suite.js +515 -0
  32. package/dist/check-suite.js.map +1 -0
  33. package/dist/check-types.d.ts +181 -0
  34. package/dist/check-types.js +35 -0
  35. package/dist/check-types.js.map +1 -0
  36. package/dist/cli-args.d.ts +26 -0
  37. package/dist/cli-args.js +50 -0
  38. package/dist/cli-args.js.map +1 -0
  39. package/dist/cli-output.d.ts +102 -0
  40. package/dist/cli-output.js +516 -0
  41. package/dist/cli-output.js.map +1 -0
  42. package/dist/cli-reference.d.ts +3 -0
  43. package/dist/cli-reference.js +81 -0
  44. package/dist/cli-reference.js.map +1 -0
  45. package/dist/cli-refusal.d.ts +12 -0
  46. package/dist/cli-refusal.js +52 -0
  47. package/dist/cli-refusal.js.map +1 -0
  48. package/dist/cli-shared.d.ts +330 -0
  49. package/dist/cli-shared.js +492 -0
  50. package/dist/cli-shared.js.map +1 -0
  51. package/dist/cli-surface.d.ts +33 -0
  52. package/dist/cli-surface.js +48 -0
  53. package/dist/cli-surface.js.map +1 -0
  54. package/dist/conversation-options.d.ts +15 -0
  55. package/dist/conversation-options.js +10 -0
  56. package/dist/conversation-options.js.map +1 -0
  57. package/dist/credentials-file.d.ts +15 -0
  58. package/dist/credentials-file.js +56 -0
  59. package/dist/credentials-file.js.map +1 -0
  60. package/dist/data-dir.d.ts +1 -1
  61. package/dist/data-dir.js +1 -1
  62. package/dist/defect-evidence.d.ts +141 -0
  63. package/dist/defect-evidence.js +502 -0
  64. package/dist/defect-evidence.js.map +1 -0
  65. package/dist/demo-aspect-api.d.ts +209 -0
  66. package/dist/demo-aspect-api.js +397 -0
  67. package/dist/demo-aspect-api.js.map +1 -0
  68. package/dist/demo-aspect-cli.d.ts +3 -0
  69. package/dist/demo-aspect-cli.js +241 -0
  70. package/dist/demo-aspect-cli.js.map +1 -0
  71. package/dist/demo-capture.d.ts +108 -0
  72. package/dist/demo-capture.js +438 -0
  73. package/dist/demo-capture.js.map +1 -0
  74. package/dist/engine.d.ts +35 -0
  75. package/dist/engine.js +25 -0
  76. package/dist/engine.js.map +1 -0
  77. package/dist/environments.d.ts +155 -0
  78. package/dist/environments.js +364 -0
  79. package/dist/environments.js.map +1 -0
  80. package/dist/exit-codes.d.ts +46 -0
  81. package/dist/exit-codes.js +91 -0
  82. package/dist/exit-codes.js.map +1 -0
  83. package/dist/explore-adversarial.d.ts +137 -0
  84. package/dist/explore-adversarial.js +218 -0
  85. package/dist/explore-adversarial.js.map +1 -0
  86. package/dist/explore-api.d.ts +7 -187
  87. package/dist/explore-api.js +7 -301
  88. package/dist/explore-api.js.map +1 -1
  89. package/dist/explore-author.d.ts +79 -0
  90. package/dist/explore-author.js +86 -0
  91. package/dist/explore-author.js.map +1 -0
  92. package/dist/explore-cli.d.ts +7 -0
  93. package/dist/explore-cli.js +963 -0
  94. package/dist/explore-cli.js.map +1 -0
  95. package/dist/explore-coverage.d.ts +158 -0
  96. package/dist/explore-coverage.js +240 -0
  97. package/dist/explore-coverage.js.map +1 -0
  98. package/dist/explore-feature.d.ts +127 -0
  99. package/dist/explore-feature.js +220 -0
  100. package/dist/explore-feature.js.map +1 -0
  101. package/dist/explore-goal.d.ts +253 -0
  102. package/dist/explore-goal.js +374 -0
  103. package/dist/explore-goal.js.map +1 -0
  104. package/dist/explore-shared.d.ts +152 -0
  105. package/dist/explore-shared.js +129 -0
  106. package/dist/explore-shared.js.map +1 -0
  107. package/dist/explore-specs.d.ts +53 -0
  108. package/dist/explore-specs.js +333 -0
  109. package/dist/explore-specs.js.map +1 -0
  110. package/dist/findings-filing.d.ts +64 -0
  111. package/dist/findings-filing.js +108 -0
  112. package/dist/findings-filing.js.map +1 -0
  113. package/dist/fixture-auth.d.ts +52 -0
  114. package/dist/fixture-auth.js +82 -0
  115. package/dist/fixture-auth.js.map +1 -0
  116. package/dist/fixture-cli.d.ts +70 -0
  117. package/dist/fixture-cli.js +178 -0
  118. package/dist/fixture-cli.js.map +1 -0
  119. package/dist/github-issue-filer.d.ts +62 -0
  120. package/dist/github-issue-filer.js +188 -0
  121. package/dist/github-issue-filer.js.map +1 -0
  122. package/dist/host-health-run.d.ts +24 -0
  123. package/dist/host-health-run.js +27 -0
  124. package/dist/host-health-run.js.map +1 -0
  125. package/dist/http-5xx-outcome.d.ts +6 -0
  126. package/dist/http-5xx-outcome.js +39 -0
  127. package/dist/http-5xx-outcome.js.map +1 -0
  128. package/dist/inbox-cli.d.ts +7 -0
  129. package/dist/inbox-cli.js +197 -0
  130. package/dist/inbox-cli.js.map +1 -0
  131. package/dist/index.d.ts +1 -0
  132. package/dist/index.js +1 -0
  133. package/dist/index.js.map +1 -1
  134. package/dist/init-cli.d.ts +4 -0
  135. package/dist/init-cli.js +127 -0
  136. package/dist/init-cli.js.map +1 -0
  137. package/dist/init-keys.d.ts +19 -2
  138. package/dist/init-keys.js +15 -4
  139. package/dist/init-keys.js.map +1 -1
  140. package/dist/init-next-steps.d.ts +35 -0
  141. package/dist/init-next-steps.js +79 -0
  142. package/dist/init-next-steps.js.map +1 -0
  143. package/dist/invariants-file.d.ts +34 -0
  144. package/dist/invariants-file.js +68 -0
  145. package/dist/invariants-file.js.map +1 -0
  146. package/dist/invariants-validate.d.ts +30 -0
  147. package/dist/invariants-validate.js +105 -0
  148. package/dist/invariants-validate.js.map +1 -0
  149. package/dist/journey-annotate-api.d.ts +76 -0
  150. package/dist/journey-annotate-api.js +256 -0
  151. package/dist/journey-annotate-api.js.map +1 -0
  152. package/dist/journey-annotate-cli.d.ts +9 -0
  153. package/dist/journey-annotate-cli.js +179 -0
  154. package/dist/journey-annotate-cli.js.map +1 -0
  155. package/dist/journey-api.d.ts +79 -2
  156. package/dist/journey-api.js +136 -19
  157. package/dist/journey-api.js.map +1 -1
  158. package/dist/journey-cli.d.ts +4 -0
  159. package/dist/journey-cli.js +370 -0
  160. package/dist/journey-cli.js.map +1 -0
  161. package/dist/journey-demo-api.d.ts +112 -0
  162. package/dist/journey-demo-api.js +392 -0
  163. package/dist/journey-demo-api.js.map +1 -0
  164. package/dist/journey-demo-cli.d.ts +10 -0
  165. package/dist/journey-demo-cli.js +155 -0
  166. package/dist/journey-demo-cli.js.map +1 -0
  167. package/dist/kill-signal.d.ts +193 -0
  168. package/dist/kill-signal.js +284 -0
  169. package/dist/kill-signal.js.map +1 -0
  170. package/dist/launch-armed.d.ts +37 -0
  171. package/dist/launch-armed.js +31 -0
  172. package/dist/launch-armed.js.map +1 -0
  173. package/dist/ledger-api.d.ts +106 -0
  174. package/dist/ledger-api.js +237 -0
  175. package/dist/ledger-api.js.map +1 -0
  176. package/dist/ledger-cli.d.ts +18 -0
  177. package/dist/ledger-cli.js +107 -0
  178. package/dist/ledger-cli.js.map +1 -0
  179. package/dist/load-api.d.ts +29 -11
  180. package/dist/load-api.js +23 -15
  181. package/dist/load-api.js.map +1 -1
  182. package/dist/load-cli.d.ts +4 -0
  183. package/dist/load-cli.js +97 -0
  184. package/dist/load-cli.js.map +1 -0
  185. package/dist/log-correlation.d.ts +147 -0
  186. package/dist/log-correlation.js +325 -0
  187. package/dist/log-correlation.js.map +1 -0
  188. package/dist/log-lines.d.ts +131 -0
  189. package/dist/log-lines.js +389 -0
  190. package/dist/log-lines.js.map +1 -0
  191. package/dist/log-sources.d.ts +71 -0
  192. package/dist/log-sources.js +235 -0
  193. package/dist/log-sources.js.map +1 -0
  194. package/dist/logs-cli.d.ts +3 -0
  195. package/dist/logs-cli.js +51 -0
  196. package/dist/logs-cli.js.map +1 -0
  197. package/dist/logs-retention.d.ts +28 -0
  198. package/dist/logs-retention.js +84 -0
  199. package/dist/logs-retention.js.map +1 -0
  200. package/dist/mcp-api.d.ts +89 -1
  201. package/dist/mcp-api.js +472 -18
  202. package/dist/mcp-api.js.map +1 -1
  203. package/dist/mcp-args.d.ts +38 -0
  204. package/dist/mcp-args.js +131 -0
  205. package/dist/mcp-args.js.map +1 -0
  206. package/dist/mcp-cli-bridge.d.ts +34 -0
  207. package/dist/mcp-cli-bridge.js +62 -0
  208. package/dist/mcp-cli-bridge.js.map +1 -0
  209. package/dist/mcp-cli-runner.d.ts +29 -0
  210. package/dist/mcp-cli-runner.js +44 -0
  211. package/dist/mcp-cli-runner.js.map +1 -0
  212. package/dist/mcp-cli-tools.d.ts +125 -0
  213. package/dist/mcp-cli-tools.js +680 -0
  214. package/dist/mcp-cli-tools.js.map +1 -0
  215. package/dist/mcp-paths.d.ts +28 -0
  216. package/dist/mcp-paths.js +76 -0
  217. package/dist/mcp-paths.js.map +1 -0
  218. package/dist/mission-actors.d.ts +40 -0
  219. package/dist/mission-actors.js +72 -0
  220. package/dist/mission-actors.js.map +1 -0
  221. package/dist/mission-api.d.ts +35 -0
  222. package/dist/mission-api.js +58 -2
  223. package/dist/mission-api.js.map +1 -1
  224. package/dist/mission-cli.d.ts +4 -0
  225. package/dist/mission-cli.js +247 -0
  226. package/dist/mission-cli.js.map +1 -0
  227. package/dist/mission-exit.d.ts +22 -0
  228. package/dist/mission-exit.js +26 -0
  229. package/dist/mission-exit.js.map +1 -0
  230. package/dist/mission-fixtures.d.ts +225 -0
  231. package/dist/mission-fixtures.js +828 -0
  232. package/dist/mission-fixtures.js.map +1 -0
  233. package/dist/mission-journal.d.ts +60 -0
  234. package/dist/mission-journal.js +115 -0
  235. package/dist/mission-journal.js.map +1 -0
  236. package/dist/mission-queue-cli.d.ts +10 -0
  237. package/dist/mission-queue-cli.js +198 -0
  238. package/dist/mission-queue-cli.js.map +1 -0
  239. package/dist/mission-queue-runner.d.ts +126 -0
  240. package/dist/mission-queue-runner.js +397 -0
  241. package/dist/mission-queue-runner.js.map +1 -0
  242. package/dist/multi-run-cli.d.ts +37 -0
  243. package/dist/multi-run-cli.js +110 -0
  244. package/dist/multi-run-cli.js.map +1 -0
  245. package/dist/multi-run.d.ts +339 -0
  246. package/dist/multi-run.js +619 -0
  247. package/dist/multi-run.js.map +1 -0
  248. package/dist/openrouter-call.d.ts +22 -0
  249. package/dist/openrouter-call.js +63 -0
  250. package/dist/openrouter-call.js.map +1 -0
  251. package/dist/profile-cli.d.ts +4 -0
  252. package/dist/profile-cli.js +57 -0
  253. package/dist/profile-cli.js.map +1 -0
  254. package/dist/program.d.ts +3 -75
  255. package/dist/program.js +119 -1921
  256. package/dist/program.js.map +1 -1
  257. package/dist/project-dir.d.ts +96 -0
  258. package/dist/project-dir.js +220 -0
  259. package/dist/project-dir.js.map +1 -0
  260. package/dist/record-api.d.ts +10 -6
  261. package/dist/record-api.js +39 -28
  262. package/dist/record-api.js.map +1 -1
  263. package/dist/record-cli.d.ts +4 -0
  264. package/dist/record-cli.js +64 -0
  265. package/dist/record-cli.js.map +1 -0
  266. package/dist/recording-cli.d.ts +4 -0
  267. package/dist/recording-cli.js +248 -0
  268. package/dist/recording-cli.js.map +1 -0
  269. package/dist/regression-api.d.ts +101 -0
  270. package/dist/regression-api.js +384 -5
  271. package/dist/regression-api.js.map +1 -1
  272. package/dist/regression-cli.d.ts +4 -0
  273. package/dist/regression-cli.js +232 -0
  274. package/dist/regression-cli.js.map +1 -0
  275. package/dist/report-api.d.ts +146 -0
  276. package/dist/report-api.js +430 -0
  277. package/dist/report-api.js.map +1 -0
  278. package/dist/report-cli.d.ts +12 -0
  279. package/dist/report-cli.js +147 -0
  280. package/dist/report-cli.js.map +1 -0
  281. package/dist/result-schema.d.ts +22 -0
  282. package/dist/result-schema.js +28 -0
  283. package/dist/result-schema.js.map +1 -0
  284. package/dist/run-index.d.ts +29 -0
  285. package/dist/run-index.js +70 -0
  286. package/dist/run-index.js.map +1 -0
  287. package/dist/run-screenshots.d.ts +123 -0
  288. package/dist/run-screenshots.js +229 -0
  289. package/dist/run-screenshots.js.map +1 -0
  290. package/dist/runtime-env.d.ts +8 -0
  291. package/dist/runtime-env.js +22 -0
  292. package/dist/runtime-env.js.map +1 -0
  293. package/dist/secret-args.d.ts +23 -0
  294. package/dist/secret-args.js +45 -0
  295. package/dist/secret-args.js.map +1 -0
  296. package/dist/serve-cli.d.ts +4 -0
  297. package/dist/serve-cli.js +95 -0
  298. package/dist/serve-cli.js.map +1 -0
  299. package/dist/server-log-verify.d.ts +34 -0
  300. package/dist/server-log-verify.js +115 -0
  301. package/dist/server-log-verify.js.map +1 -0
  302. package/dist/session-check.d.ts +14 -0
  303. package/dist/session-check.js +44 -0
  304. package/dist/session-check.js.map +1 -0
  305. package/dist/site-cli.d.ts +4 -0
  306. package/dist/site-cli.js +127 -0
  307. package/dist/site-cli.js.map +1 -0
  308. package/dist/site-gate-cli.d.ts +28 -0
  309. package/dist/site-gate-cli.js +58 -0
  310. package/dist/site-gate-cli.js.map +1 -0
  311. package/dist/source-api.js +18 -3
  312. package/dist/source-api.js.map +1 -1
  313. package/dist/source-cli.d.ts +4 -0
  314. package/dist/source-cli.js +284 -0
  315. package/dist/source-cli.js.map +1 -0
  316. package/dist/source-run-api.d.ts +27 -1
  317. package/dist/source-run-api.js +22 -11
  318. package/dist/source-run-api.js.map +1 -1
  319. package/dist/storage-state-snapshot.d.ts +50 -0
  320. package/dist/storage-state-snapshot.js +87 -0
  321. package/dist/storage-state-snapshot.js.map +1 -0
  322. package/dist/suite-explore-options.d.ts +289 -0
  323. package/dist/suite-explore-options.js +140 -0
  324. package/dist/suite-explore-options.js.map +1 -0
  325. package/dist/target-config.d.ts +109 -0
  326. package/dist/target-config.js +216 -0
  327. package/dist/target-config.js.map +1 -0
  328. package/dist/transcript-file.d.ts +12 -0
  329. package/dist/transcript-file.js +23 -0
  330. package/dist/transcript-file.js.map +1 -0
  331. package/dist/ui-api.d.ts +3 -0
  332. package/dist/ui-api.js +7 -1
  333. package/dist/ui-api.js.map +1 -1
  334. package/dist/usability-capture.d.ts +43 -0
  335. package/dist/usability-capture.js +326 -0
  336. package/dist/usability-capture.js.map +1 -0
  337. package/dist/usage-config.d.ts +36 -0
  338. package/dist/usage-config.js +114 -0
  339. package/dist/usage-config.js.map +1 -0
  340. package/dist/ux-api.d.ts +3 -75
  341. package/dist/ux-api.js +3 -220
  342. package/dist/ux-api.js.map +1 -1
  343. package/dist/ux-cli.d.ts +4 -0
  344. package/dist/ux-cli.js +102 -0
  345. package/dist/ux-cli.js.map +1 -0
  346. package/dist/ux-config.d.ts +29 -0
  347. package/dist/ux-config.js +103 -0
  348. package/dist/ux-config.js.map +1 -0
  349. package/dist/ux-evidence.d.ts +54 -0
  350. package/dist/ux-evidence.js +197 -0
  351. package/dist/ux-evidence.js.map +1 -0
  352. package/dist/ux-review.d.ts +112 -0
  353. package/dist/ux-review.js +151 -0
  354. package/dist/ux-review.js.map +1 -0
  355. package/dist/ux-usability.d.ts +238 -0
  356. package/dist/ux-usability.js +494 -0
  357. package/dist/ux-usability.js.map +1 -0
  358. package/dist/verify-fix-api.d.ts +173 -0
  359. package/dist/verify-fix-api.js +454 -0
  360. package/dist/verify-fix-api.js.map +1 -0
  361. package/dist/verify-fix-cli.d.ts +4 -0
  362. package/dist/verify-fix-cli.js +110 -0
  363. package/dist/verify-fix-cli.js.map +1 -0
  364. package/package.json +19 -14
  365. package/skills/jevitate-ci-check/SKILL.md +77 -0
  366. package/skills/jevitate-demo/SKILL.md +61 -0
  367. package/skills/jevitate-explore/SKILL.md +88 -87
  368. package/skills/jevitate-getting-started/SKILL.md +88 -0
  369. package/skills/jevitate-load-test/SKILL.md +11 -2
  370. package/skills/jevitate-mission-scope/SKILL.md +19 -11
  371. package/skills/jevitate-record/SKILL.md +23 -5
  372. package/skills/jevitate-run-journey/SKILL.md +61 -17
  373. package/skills/jevitate-sources/SKILL.md +57 -14
  374. package/skills/jevitate-ux-review/SKILL.md +106 -16
  375. package/skills/jevitate-verify-fix/SKILL.md +76 -0
@@ -0,0 +1,515 @@
1
+ import { readFileSync } from "node:fs";
2
+ import { dirname, isAbsolute, resolve } from "node:path";
3
+ import { parseViewport, resolveEmulation } from "@jevitate/playwright";
4
+ import { validateDenyPatterns } from "@jevitate/explore";
5
+ import { SUITE_EXPLORE_OPTIONS, isSuiteExploreOption, } from "./suite-explore-options.js";
6
+ import { SessionFileInProjectError, assertSessionFileOutsideProject } from "./project-dir.js";
7
+ const STRATEGIES = ["coverage", "exploratory", "adversarial", "feature", "usability"];
8
+ export class SuiteError extends Error {
9
+ code = "E_CHECK_SUITE";
10
+ /** #213: each path-precise problem on its own (`$.targets[0].name: …`); the message joins them. */
11
+ problems;
12
+ constructor(message, problems = [message]) {
13
+ super(message);
14
+ this.name = "SuiteError";
15
+ this.problems = problems;
16
+ }
17
+ }
18
+ function isRecord(v) {
19
+ return v !== null && typeof v === "object" && !Array.isArray(v);
20
+ }
21
+ class Reader {
22
+ source;
23
+ baseDir;
24
+ /** #213: every problem `collect` caught, so a suite reports ALL of them, not just the first. */
25
+ problems = [];
26
+ constructor(source, baseDir) {
27
+ this.source = source;
28
+ this.baseDir = baseDir;
29
+ }
30
+ fail(path, msg) {
31
+ throw new SuiteError(`${this.source}: ${path}: ${msg}`);
32
+ }
33
+ /**
34
+ * Runs `fn`; a `SuiteError` it throws is recorded (#213) and this returns `undefined` instead of
35
+ * aborting every OTHER independent problem in the suite (a sibling target, goal, mission, journey
36
+ * or verify-fix item, or a root-level field). Any other error still propagates.
37
+ */
38
+ collect(fn) {
39
+ try {
40
+ return fn();
41
+ }
42
+ catch (e) {
43
+ if (!(e instanceof SuiteError))
44
+ throw e;
45
+ this.problems.push(...e.problems);
46
+ return undefined;
47
+ }
48
+ }
49
+ /** Refuses a field not in `own` (nor, with `explore`, one of `explore`'s options, #195). */
50
+ keys(obj, path, own, explore = false) {
51
+ for (const k of Object.keys(obj)) {
52
+ if (own.includes(k) || (explore && isSuiteExploreOption(k)))
53
+ continue;
54
+ const camel = k.replace(/^-+/, "").replace(/-([a-z])/g, (_, c) => c.toUpperCase());
55
+ if (explore && camel !== k && (isSuiteExploreOption(camel) || own.includes(camel)))
56
+ this.fail(`${path}.${k}`, `unknown field; did you mean ${JSON.stringify(camel)}?`);
57
+ this.fail(`${path}.${k}`, `unknown field (allowed: ${own.join(", ")}${explore ? "; and explore's options by camelCase name, e.g. deny, apiPrefix, logSource" : ""})`);
58
+ }
59
+ }
60
+ string(obj, key, path, optional) {
61
+ const v = obj[key];
62
+ if (v === undefined && optional === true)
63
+ return undefined;
64
+ if (typeof v !== "string" || v.trim() === "")
65
+ this.fail(`${path}.${key}`, "must be a non-empty string");
66
+ return v;
67
+ }
68
+ number(obj, key, path, opts = {}) {
69
+ const v = obj[key];
70
+ if (v === undefined)
71
+ return undefined;
72
+ if (typeof v !== "number" || !Number.isFinite(v) || v <= 0 || (opts.integer === true && !Number.isInteger(v))) {
73
+ this.fail(`${path}.${key}`, `must be a positive ${opts.integer === true ? "integer" : "number"}`);
74
+ }
75
+ return v;
76
+ }
77
+ strings(obj, key, path) {
78
+ const v = obj[key];
79
+ if (v === undefined)
80
+ return [];
81
+ if (!Array.isArray(v) || !v.every((s) => typeof s === "string" && s.trim() !== ""))
82
+ this.fail(`${path}.${key}`, "must be an array of non-empty strings");
83
+ return v;
84
+ }
85
+ list(obj, key, path) {
86
+ const v = obj[key];
87
+ if (v === undefined)
88
+ return [];
89
+ if (!Array.isArray(v))
90
+ this.fail(`${path}.${key}`, "must be an array");
91
+ return v;
92
+ }
93
+ /** `viewport: "WxH"` or `device: "<Playwright device>"` (never both), validated now. */
94
+ emulation(obj, path) {
95
+ const viewport = this.string(obj, "viewport", path, true);
96
+ const device = this.string(obj, "device", path, true);
97
+ if (viewport === undefined && device === undefined)
98
+ return undefined;
99
+ let spec;
100
+ try {
101
+ spec = { ...(viewport === undefined ? {} : { viewport: parseViewport(viewport) }), ...(device === undefined ? {} : { device }) };
102
+ resolveEmulation(spec);
103
+ }
104
+ catch (e) {
105
+ return this.fail(path, e instanceof Error ? e.message : String(e));
106
+ }
107
+ return spec;
108
+ }
109
+ resolvePath(p) {
110
+ return isAbsolute(p) ? p : resolve(this.baseDir, p);
111
+ }
112
+ url(obj, key, path, optional) {
113
+ const v = optional === true ? this.string(obj, key, path, true) : this.string(obj, key, path);
114
+ if (v === undefined)
115
+ return undefined;
116
+ try {
117
+ new URL(v);
118
+ }
119
+ catch {
120
+ this.fail(`${path}.${key}`, `not a URL: ${JSON.stringify(v)}`);
121
+ }
122
+ return v;
123
+ }
124
+ }
125
+ const emulationOf = (e) => (e === undefined ? {} : { emulation: e });
126
+ // ── explore options (#195) ───────────────────────────────────────────────────
127
+ const ENV_VAR = /^[A-Za-z_][A-Za-z0-9_]*$/;
128
+ const NO_LITERAL = "a suite never carries a literal secret; the value is read from the environment when the check starts";
129
+ /**
130
+ * Each suite level's own field names; targets, goals and missions also take every generic explore
131
+ * option (`SUITE_EXPLORE_OPTIONS`).
132
+ */
133
+ export const SUITE_FIELDS = {
134
+ target: ["name", "url", "allow", "storageState", "secretFields", "fixtures", "invariants", "journeysDir", "journeys", "goals", "missions", "verifyFix", "viewport", "device"],
135
+ journey: ["id", "params", "routes", "viewport", "device", "storageState", "env", "baseUrl"],
136
+ goal: ["name", "goal", "success", "url", "successWhen", "routes", "maxActions", "maxDecisions", "viewport", "device", "storageState", "secretFields", "fixtures"],
137
+ mission: ["name", "strategy", "url", "routes", "feature", "goal", "appClass", "success", "successWhen", "maxActions", "maxDecisions", "viewport", "device", "storageState", "secretFields"],
138
+ verifyFix: ["name", "result", "fingerprint", "replays", "storageState"],
139
+ };
140
+ function envBindings(r, obj, key, path) {
141
+ const list = r.strings(obj, key, path);
142
+ list.forEach((b, i) => {
143
+ const at = b.lastIndexOf("=env:");
144
+ const head = at === -1 ? "" : b.slice(0, at);
145
+ // The entry is never echoed: a value pasted in place of env:<VAR> must not reach a log.
146
+ if (at === -1 || !ENV_VAR.test(b.slice(at + 5)) || head.indexOf("=") <= 0 || head.endsWith("=")) {
147
+ r.fail(`${path}.${key}[${i}]`, `must be '<label|testId|type|id|name>=<value>=env:<VAR>'; ${NO_LITERAL}`);
148
+ }
149
+ });
150
+ return list;
151
+ }
152
+ function readOption(r, obj, key, path) {
153
+ const spec = SUITE_EXPLORE_OPTIONS[key];
154
+ const at = `${path}.${key}`;
155
+ const v = obj[key];
156
+ switch (spec.shape) {
157
+ case "string": {
158
+ const s = r.string(obj, key, path);
159
+ if (spec.oneOf !== undefined && !spec.oneOf.includes(s))
160
+ r.fail(at, `must be ${spec.oneOf.map((o) => JSON.stringify(o)).join(" | ")}`);
161
+ return s;
162
+ }
163
+ case "path": {
164
+ const file = r.resolvePath(r.string(obj, key, path));
165
+ if (key === "saveStorageState") {
166
+ try {
167
+ assertSessionFileOutsideProject(file, "saveStorageState");
168
+ }
169
+ catch (e) {
170
+ if (!(e instanceof SessionFileInProjectError))
171
+ throw e;
172
+ r.fail(at, e.message);
173
+ }
174
+ }
175
+ return file;
176
+ }
177
+ case "boolean":
178
+ if (typeof v !== "boolean")
179
+ r.fail(at, "must be a boolean");
180
+ return v;
181
+ case "positive":
182
+ return r.number(obj, key, path);
183
+ case "integer": {
184
+ const n = r.number(obj, key, path, { integer: true });
185
+ if (spec.range !== undefined && (n < spec.range[0] || n > spec.range[1]))
186
+ r.fail(at, `must be an integer in ${spec.range[0]}..${spec.range[1]}`);
187
+ return n;
188
+ }
189
+ case "count":
190
+ if (typeof v !== "number" || !Number.isInteger(v) || v < 0)
191
+ r.fail(at, "must be a non-negative integer");
192
+ return v;
193
+ case "ratio":
194
+ if (typeof v !== "number" || !Number.isFinite(v) || v < 0 || v > 1)
195
+ r.fail(at, "must be a number in 0..1");
196
+ return v;
197
+ case "strings": {
198
+ const list = r.strings(obj, key, path);
199
+ if (key === "deny" || key === "paid") {
200
+ try {
201
+ validateDenyPatterns(list, key);
202
+ }
203
+ catch (e) {
204
+ r.fail(at, e instanceof Error ? e.message : String(e));
205
+ }
206
+ }
207
+ return list;
208
+ }
209
+ case "named-paths":
210
+ return r.strings(obj, key, path).map((e, i) => {
211
+ const eq = e.indexOf("=");
212
+ if (eq <= 0 || eq === e.length - 1)
213
+ r.fail(`${at}[${i}]`, "must be '<name>=<storageState path>'");
214
+ return `${e.slice(0, eq)}=${r.resolvePath(e.slice(eq + 1))}`;
215
+ });
216
+ case "env-refs":
217
+ return r.strings(obj, key, path).map((e, i) => {
218
+ if (!e.startsWith("env:") || !ENV_VAR.test(e.slice(4)))
219
+ r.fail(`${at}[${i}]`, `must be an env:<VAR> reference; ${NO_LITERAL}`);
220
+ return e;
221
+ });
222
+ case "env-bindings":
223
+ return envBindings(r, obj, key, path);
224
+ }
225
+ }
226
+ /**
227
+ * The generic explore options set in `obj`. For an item (`kind` given) an option that does not
228
+ * apply to it is refused, as `explore` refuses the flag; a target's are defaults for any kind.
229
+ */
230
+ function exploreOptionsOf(r, obj, path, kind) {
231
+ const out = {};
232
+ for (const key of Object.keys(obj)) {
233
+ if (!isSuiteExploreOption(key))
234
+ continue;
235
+ const applies = SUITE_EXPLORE_OPTIONS[key].appliesTo;
236
+ if (kind !== undefined && !applies.includes(kind)) {
237
+ r.fail(`${path}.${key}`, `does not apply to a ${kind === "goal" ? "goal" : `${kind} mission`} item (applies to: ${applies.join(", ")})`);
238
+ }
239
+ out[key] = readOption(r, obj, key, path);
240
+ }
241
+ const has = (k) => out[k] !== undefined;
242
+ if (kind !== undefined) {
243
+ if ((has("actor") || has("persona") || has("personas")) && obj.storageState !== undefined) {
244
+ r.fail(`${path}.storageState`, "cannot be combined with actor/persona/personas (each brings its own session)");
245
+ }
246
+ if (has("actor") && (has("persona") || has("personas")))
247
+ r.fail(`${path}.actor`, "cannot be combined with persona/personas");
248
+ if ((has("persona") || has("personas")) && has("saveStorageState")) {
249
+ r.fail(`${path}.saveStorageState`, "cannot be combined with persona/personas (one file cannot hold every persona)");
250
+ }
251
+ }
252
+ return Object.keys(out).length === 0 ? undefined : out;
253
+ }
254
+ /** An item's `storageState`: a path (resolved), `null` (start without the target's session), or absent. */
255
+ function storageStateOf(r, obj, path) {
256
+ if (obj.storageState === null)
257
+ return { storageState: null };
258
+ const s = r.string(obj, "storageState", path, true);
259
+ return s === undefined ? {} : { storageState: r.resolvePath(s) };
260
+ }
261
+ /** The goal/mission overrides: own session, own secret fields, explore options. */
262
+ function overridesOf(r, obj, path, kind) {
263
+ const secretFields = envBindings(r, obj, "secretFields", path);
264
+ if (secretFields.length > 0 && kind !== "goal" && kind !== "usability")
265
+ r.fail(`${path}.secretFields`, "applies only to goal and usability items");
266
+ const explore = exploreOptionsOf(r, obj, path, kind);
267
+ return {
268
+ ...storageStateOf(r, obj, path),
269
+ ...(secretFields.length === 0 ? {} : { secretFields }),
270
+ ...(explore === undefined ? {} : { explore }),
271
+ };
272
+ }
273
+ function journeyOf(r, v, path) {
274
+ if (typeof v === "string" && v.trim() !== "")
275
+ return { id: v, params: {} };
276
+ if (!isRecord(v))
277
+ return r.fail(path, "must be a Journey id or { id, params?, routes? }");
278
+ r.keys(v, path, SUITE_FIELDS.journey);
279
+ const params = v.params ?? {};
280
+ if (!isRecord(params) || !Object.values(params).every((p) => typeof p === "string"))
281
+ r.fail(`${path}.params`, "must be an object of string values");
282
+ const routes = r.strings(v, "routes", path);
283
+ const emulation = r.emulation(v, path);
284
+ const env = r.string(v, "env", path, true);
285
+ const baseUrl = r.url(v, "baseUrl", path, true);
286
+ return {
287
+ id: r.string(v, "id", path),
288
+ params: params,
289
+ ...(routes.length === 0 ? {} : { routes }),
290
+ ...(emulation === undefined ? {} : { emulation }),
291
+ ...(env === undefined ? {} : { env }),
292
+ ...(baseUrl === undefined ? {} : { baseUrl }),
293
+ ...storageStateOf(r, v, path),
294
+ };
295
+ }
296
+ function goalOf(r, v, path, i) {
297
+ if (!isRecord(v))
298
+ return r.fail(path, "must be an object");
299
+ r.keys(v, path, SUITE_FIELDS.goal, true);
300
+ const success = r.strings(v, "success", path);
301
+ if (success.length === 0)
302
+ r.fail(`${path}.success`, "at least one success check is required (a goal without one proves nothing)");
303
+ const successWhen = v.successWhen;
304
+ if (successWhen !== undefined && successWhen !== "final" && successWhen !== "held")
305
+ r.fail(`${path}.successWhen`, 'must be "final" or "held"');
306
+ const routes = r.strings(v, "routes", path);
307
+ const url = r.url(v, "url", path, true);
308
+ const maxActions = r.number(v, "maxActions", path, { integer: true });
309
+ const maxDecisions = r.number(v, "maxDecisions", path, { integer: true });
310
+ const fixtures = r.string(v, "fixtures", path, true);
311
+ return {
312
+ ...overridesOf(r, v, path, "goal"),
313
+ ...(fixtures === undefined ? {} : { fixtures: r.resolvePath(fixtures) }),
314
+ name: r.string(v, "name", path, true) ?? `goal-${i + 1}`,
315
+ goal: r.string(v, "goal", path),
316
+ ...emulationOf(r.emulation(v, path)),
317
+ success,
318
+ ...(url === undefined ? {} : { url }),
319
+ ...(successWhen === undefined ? {} : { successWhen }),
320
+ ...(routes.length === 0 ? {} : { routes }),
321
+ ...(maxActions === undefined ? {} : { maxActions }),
322
+ ...(maxDecisions === undefined ? {} : { maxDecisions }),
323
+ };
324
+ }
325
+ function missionOf(r, v, path) {
326
+ if (!isRecord(v))
327
+ return r.fail(path, "must be an object");
328
+ r.keys(v, path, SUITE_FIELDS.mission, true);
329
+ const strategy = r.string(v, "strategy", path);
330
+ if (!STRATEGIES.includes(strategy))
331
+ r.fail(`${path}.strategy`, `must be one of ${STRATEGIES.join(" | ")}`);
332
+ const s = strategy;
333
+ const feature = r.string(v, "feature", path, true);
334
+ if (s === "feature" && feature === undefined)
335
+ r.fail(`${path}.feature`, "is required for strategy feature");
336
+ const goal = r.string(v, "goal", path, true);
337
+ const appClass = r.string(v, "appClass", path, true);
338
+ if (s === "usability" && (goal === undefined || appClass === undefined))
339
+ r.fail(path, "strategy usability requires goal and appClass");
340
+ // #225: success checks judge a usability job's completion; any other strategy has no job to check.
341
+ const success = r.strings(v, "success", path);
342
+ const successWhen = v.successWhen;
343
+ if ((success.length > 0 || successWhen !== undefined) && s !== "usability")
344
+ r.fail(`${path}.success`, "applies only to goal items and usability missions");
345
+ if (successWhen !== undefined && successWhen !== "final" && successWhen !== "held")
346
+ r.fail(`${path}.successWhen`, 'must be "final" or "held"');
347
+ if (successWhen !== undefined && success.length === 0)
348
+ r.fail(`${path}.successWhen`, "needs at least one success check");
349
+ const routes = r.strings(v, "routes", path);
350
+ const url = r.url(v, "url", path, true);
351
+ const maxActions = r.number(v, "maxActions", path, { integer: true });
352
+ const maxDecisions = r.number(v, "maxDecisions", path, { integer: true });
353
+ return {
354
+ ...overridesOf(r, v, path, s),
355
+ name: r.string(v, "name", path, true) ?? (feature === undefined ? s : `${s}-${feature}`),
356
+ strategy: s,
357
+ ...emulationOf(r.emulation(v, path)),
358
+ ...(url === undefined ? {} : { url }),
359
+ ...(routes.length === 0 ? {} : { routes }),
360
+ ...(feature === undefined ? {} : { feature }),
361
+ ...(goal === undefined ? {} : { goal }),
362
+ ...(appClass === undefined ? {} : { appClass }),
363
+ ...(success.length === 0 ? {} : { success }),
364
+ ...(successWhen === "final" || successWhen === "held" ? { successWhen } : {}),
365
+ ...(maxActions === undefined ? {} : { maxActions }),
366
+ ...(maxDecisions === undefined ? {} : { maxDecisions }),
367
+ };
368
+ }
369
+ function verifyOf(r, v, path) {
370
+ if (!isRecord(v))
371
+ return r.fail(path, "must be an object");
372
+ r.keys(v, path, SUITE_FIELDS.verifyFix);
373
+ const fingerprint = r.string(v, "fingerprint", path);
374
+ const replays = r.number(v, "replays", path, { integer: true });
375
+ return {
376
+ name: r.string(v, "name", path, true) ?? `verify-${fingerprint}`,
377
+ result: r.resolvePath(r.string(v, "result", path)),
378
+ fingerprint,
379
+ ...(replays === undefined ? {} : { replays }),
380
+ ...storageStateOf(r, v, path),
381
+ };
382
+ }
383
+ const NAME = /^[A-Za-z0-9][A-Za-z0-9._-]*$/;
384
+ function targetOf(r, v, path) {
385
+ if (!isRecord(v))
386
+ return r.fail(path, "must be an object");
387
+ r.keys(v, path, SUITE_FIELDS.target, true);
388
+ const name = r.string(v, "name", path);
389
+ if (!NAME.test(name))
390
+ r.fail(`${path}.name`, "must match [A-Za-z0-9][A-Za-z0-9._-]*");
391
+ const url = r.url(v, "url", path) ?? r.fail(`${path}.url`, "is required");
392
+ const storageState = r.string(v, "storageState", path, true);
393
+ const secretFields = envBindings(r, v, "secretFields", path);
394
+ const explore = exploreOptionsOf(r, v, path);
395
+ const fixtures = r.string(v, "fixtures", path, true);
396
+ const journeysDir = r.string(v, "journeysDir", path, true);
397
+ const goals = r.list(v, "goals", path);
398
+ // #213: each item validated on its own (every problem reported), then duplicate default names refused.
399
+ const verifyFix = r
400
+ .list(v, "verifyFix", path)
401
+ .map((m, i) => r.collect(() => verifyOf(r, m, `${path}.verifyFix[${i}]`)))
402
+ .filter((m) => m !== undefined);
403
+ // #213: two verifyFix items that omit `name` and share a fingerprint both default to
404
+ // `verify-<fingerprint>`, which collides in the JUnit output (same classname AND name). Fail
405
+ // closed rather than silently deduping the JUnit only — the suite itself is ambiguous.
406
+ const verifyNames = new Set();
407
+ for (const vf of verifyFix) {
408
+ if (verifyNames.has(vf.name)) {
409
+ r.collect(() => r.fail(`${path}.verifyFix`, `duplicate verifyFix name ${JSON.stringify(vf.name)} — give each verifyFix item (there is more than one for fingerprint ${JSON.stringify(vf.fingerprint)}) its own "name"`));
410
+ }
411
+ verifyNames.add(vf.name);
412
+ }
413
+ return {
414
+ name,
415
+ url,
416
+ ...emulationOf(r.emulation(v, path)),
417
+ allow: r.strings(v, "allow", path),
418
+ ...(storageState === undefined ? {} : { storageState: r.resolvePath(storageState) }),
419
+ ...(secretFields.length === 0 ? {} : { secretFields }),
420
+ ...(fixtures === undefined ? {} : { fixtures: r.resolvePath(fixtures) }),
421
+ invariants: r.strings(v, "invariants", path).map((f) => r.resolvePath(f)),
422
+ ...(journeysDir === undefined ? {} : { journeysDir: r.resolvePath(journeysDir) }),
423
+ // #213: each item is validated on its own — one bad journey/goal/mission is recorded and
424
+ // dropped, instead of hiding every sibling item's problems behind it.
425
+ journeys: r
426
+ .list(v, "journeys", path)
427
+ .map((j, i) => r.collect(() => journeyOf(r, j, `${path}.journeys[${i}]`)))
428
+ .filter((j) => j !== undefined),
429
+ goals: goals
430
+ .map((g, i) => r.collect(() => goalOf(r, g, `${path}.goals[${i}]`, i)))
431
+ .filter((g) => g !== undefined),
432
+ missions: r
433
+ .list(v, "missions", path)
434
+ .map((m, i) => r.collect(() => missionOf(r, m, `${path}.missions[${i}]`)))
435
+ .filter((m) => m !== undefined),
436
+ verifyFix,
437
+ ...(explore === undefined ? {} : { explore }),
438
+ };
439
+ }
440
+ /** Validates a parsed suite. `file` names it in every refusal; relative paths resolve against it. */
441
+ export function parseSuite(raw, file) {
442
+ const abs = resolve(file);
443
+ const r = new Reader(file, dirname(abs));
444
+ if (!isRecord(raw))
445
+ return r.fail("$", "must be a JSON object");
446
+ r.collect(() => r.keys(raw, "$", ["version", "name", "budget", "ai", "gateAdvisory", "targets"]));
447
+ r.collect(() => {
448
+ if (raw.version !== 1)
449
+ r.fail("$.version", "must be 1");
450
+ });
451
+ const budgetRaw = raw.budget ?? {};
452
+ const budgetOk = isRecord(budgetRaw);
453
+ r.collect(() => {
454
+ if (!budgetOk)
455
+ r.fail("$.budget", "must be an object");
456
+ });
457
+ const b = (budgetOk ? budgetRaw : {});
458
+ r.collect(() => r.keys(b, "$.budget", ["maxActions", "maxMinutes", "maxUsd"]));
459
+ const maxActions = r.collect(() => r.number(b, "maxActions", "$.budget", { integer: true }));
460
+ const maxMinutes = r.collect(() => r.number(b, "maxMinutes", "$.budget"));
461
+ const maxUsd = r.collect(() => r.number(b, "maxUsd", "$.budget"));
462
+ const ai = raw.ai;
463
+ r.collect(() => {
464
+ if (ai !== undefined && ai !== "real" && ai !== "fake")
465
+ r.fail("$.ai", 'must be "real" or "fake"');
466
+ });
467
+ r.collect(() => {
468
+ if (raw.gateAdvisory !== undefined && typeof raw.gateAdvisory !== "boolean")
469
+ r.fail("$.gateAdvisory", "must be a boolean");
470
+ });
471
+ const name = r.collect(() => r.string(raw, "name", "$", true)) ?? "suite";
472
+ // #213: every target — and within it, every journey/goal/mission/verify-fix item — is validated on
473
+ // its own, so a suite with several unrelated problems reports all of them, not just the first.
474
+ const targetsRaw = r.collect(() => r.list(raw, "targets", "$")) ?? [];
475
+ const targets = targetsRaw
476
+ .map((t, i) => r.collect(() => targetOf(r, t, `$.targets[${i}]`)))
477
+ .filter((t) => t !== undefined);
478
+ // Only when NO target was even attempted — when some targets failed their own validation, that is
479
+ // already reported per-target above, and "at least one target is required" would just be noise.
480
+ if (targetsRaw.length === 0)
481
+ r.collect(() => r.fail("$.targets", "at least one target is required"));
482
+ const names = new Set();
483
+ for (const t of targets) {
484
+ if (names.has(t.name))
485
+ r.collect(() => r.fail("$.targets", `duplicate target name ${JSON.stringify(t.name)}`));
486
+ else
487
+ names.add(t.name);
488
+ }
489
+ if (r.problems.length > 0)
490
+ throw new SuiteError(r.problems.join("; "), [...r.problems]);
491
+ return {
492
+ version: 1,
493
+ name,
494
+ budget: {
495
+ ...(maxActions === undefined ? {} : { maxActions }),
496
+ ...(maxMinutes === undefined ? {} : { maxMinutes }),
497
+ ...(maxUsd === undefined ? {} : { maxUsd }),
498
+ },
499
+ ...(ai === "real" || ai === "fake" ? { ai } : {}),
500
+ gateAdvisory: raw.gateAdvisory === true,
501
+ targets,
502
+ path: abs,
503
+ };
504
+ }
505
+ export function loadSuite(file) {
506
+ let raw;
507
+ try {
508
+ raw = JSON.parse(readFileSync(file, "utf8"));
509
+ }
510
+ catch (e) {
511
+ throw new SuiteError(`cannot read suite ${file}: ${e instanceof Error ? e.message : String(e)}`);
512
+ }
513
+ return parseSuite(raw, file);
514
+ }
515
+ //# sourceMappingURL=check-suite.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"check-suite.js","sourceRoot":"","sources":["../src/check-suite.ts"],"names":[],"mappings":"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"}