@jevitate/cli 0.1.0 → 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 (410) hide show
  1. package/README.md +23 -0
  2. package/dist/ai-cli.d.ts +31 -11
  3. package/dist/ai-cli.js +131 -88
  4. package/dist/ai-cli.js.map +1 -1
  5. package/dist/author-journey-cli.d.ts +4 -0
  6. package/dist/author-journey-cli.js +111 -0
  7. package/dist/author-journey-cli.js.map +1 -0
  8. package/dist/bin.js +60349 -16477
  9. package/dist/bin.js.map +1 -1
  10. package/dist/browser-run-options.d.ts +89 -0
  11. package/dist/browser-run-options.js +175 -0
  12. package/dist/browser-run-options.js.map +1 -0
  13. package/dist/build-info.generated.d.ts +2 -0
  14. package/dist/build-info.generated.js +10 -0
  15. package/dist/build-info.generated.js.map +1 -0
  16. package/dist/campaign-api.d.ts +151 -0
  17. package/dist/campaign-api.js +446 -0
  18. package/dist/campaign-api.js.map +1 -0
  19. package/dist/campaign-cli.d.ts +6 -0
  20. package/dist/campaign-cli.js +66 -0
  21. package/dist/campaign-cli.js.map +1 -0
  22. package/dist/check-api.d.ts +5 -0
  23. package/dist/check-api.js +234 -0
  24. package/dist/check-api.js.map +1 -0
  25. package/dist/check-budget.d.ts +26 -0
  26. package/dist/check-budget.js +90 -0
  27. package/dist/check-budget.js.map +1 -0
  28. package/dist/check-cli.d.ts +31 -0
  29. package/dist/check-cli.js +109 -0
  30. package/dist/check-cli.js.map +1 -0
  31. package/dist/check-execute.d.ts +29 -0
  32. package/dist/check-execute.js +420 -0
  33. package/dist/check-execute.js.map +1 -0
  34. package/dist/check-plan.d.ts +118 -0
  35. package/dist/check-plan.js +516 -0
  36. package/dist/check-plan.js.map +1 -0
  37. package/dist/check-suite.d.ts +184 -0
  38. package/dist/check-suite.js +540 -0
  39. package/dist/check-suite.js.map +1 -0
  40. package/dist/check-types.d.ts +181 -0
  41. package/dist/check-types.js +35 -0
  42. package/dist/check-types.js.map +1 -0
  43. package/dist/cli-args.d.ts +26 -0
  44. package/dist/cli-args.js +50 -0
  45. package/dist/cli-args.js.map +1 -0
  46. package/dist/cli-output.d.ts +106 -0
  47. package/dist/cli-output.js +563 -0
  48. package/dist/cli-output.js.map +1 -0
  49. package/dist/cli-reference.d.ts +3 -0
  50. package/dist/cli-reference.js +81 -0
  51. package/dist/cli-reference.js.map +1 -0
  52. package/dist/cli-refusal.d.ts +12 -0
  53. package/dist/cli-refusal.js +52 -0
  54. package/dist/cli-refusal.js.map +1 -0
  55. package/dist/cli-shared.d.ts +340 -0
  56. package/dist/cli-shared.js +537 -0
  57. package/dist/cli-shared.js.map +1 -0
  58. package/dist/cli-surface.d.ts +33 -0
  59. package/dist/cli-surface.js +48 -0
  60. package/dist/cli-surface.js.map +1 -0
  61. package/dist/conversation-options.d.ts +15 -0
  62. package/dist/conversation-options.js +10 -0
  63. package/dist/conversation-options.js.map +1 -0
  64. package/dist/credentials-file.d.ts +15 -0
  65. package/dist/credentials-file.js +56 -0
  66. package/dist/credentials-file.js.map +1 -0
  67. package/dist/data-dir.d.ts +1 -1
  68. package/dist/data-dir.js +1 -1
  69. package/dist/defect-evidence.d.ts +141 -0
  70. package/dist/defect-evidence.js +505 -0
  71. package/dist/defect-evidence.js.map +1 -0
  72. package/dist/demo-aspect-api.d.ts +209 -0
  73. package/dist/demo-aspect-api.js +398 -0
  74. package/dist/demo-aspect-api.js.map +1 -0
  75. package/dist/demo-aspect-cli.d.ts +3 -0
  76. package/dist/demo-aspect-cli.js +243 -0
  77. package/dist/demo-aspect-cli.js.map +1 -0
  78. package/dist/demo-capture.d.ts +142 -0
  79. package/dist/demo-capture.js +537 -0
  80. package/dist/demo-capture.js.map +1 -0
  81. package/dist/engine.d.ts +35 -0
  82. package/dist/engine.js +25 -0
  83. package/dist/engine.js.map +1 -0
  84. package/dist/environments.d.ts +155 -0
  85. package/dist/environments.js +364 -0
  86. package/dist/environments.js.map +1 -0
  87. package/dist/exit-codes.d.ts +46 -0
  88. package/dist/exit-codes.js +91 -0
  89. package/dist/exit-codes.js.map +1 -0
  90. package/dist/explore-adversarial.d.ts +144 -0
  91. package/dist/explore-adversarial.js +227 -0
  92. package/dist/explore-adversarial.js.map +1 -0
  93. package/dist/explore-api.d.ts +7 -187
  94. package/dist/explore-api.js +7 -301
  95. package/dist/explore-api.js.map +1 -1
  96. package/dist/explore-author.d.ts +79 -0
  97. package/dist/explore-author.js +86 -0
  98. package/dist/explore-author.js.map +1 -0
  99. package/dist/explore-cli.d.ts +7 -0
  100. package/dist/explore-cli.js +1199 -0
  101. package/dist/explore-cli.js.map +1 -0
  102. package/dist/explore-coverage.d.ts +173 -0
  103. package/dist/explore-coverage.js +246 -0
  104. package/dist/explore-coverage.js.map +1 -0
  105. package/dist/explore-feature.d.ts +125 -0
  106. package/dist/explore-feature.js +218 -0
  107. package/dist/explore-feature.js.map +1 -0
  108. package/dist/explore-goal.d.ts +271 -0
  109. package/dist/explore-goal.js +417 -0
  110. package/dist/explore-goal.js.map +1 -0
  111. package/dist/explore-shared.d.ts +177 -0
  112. package/dist/explore-shared.js +149 -0
  113. package/dist/explore-shared.js.map +1 -0
  114. package/dist/explore-specs.d.ts +53 -0
  115. package/dist/explore-specs.js +333 -0
  116. package/dist/explore-specs.js.map +1 -0
  117. package/dist/findings-filing.d.ts +64 -0
  118. package/dist/findings-filing.js +108 -0
  119. package/dist/findings-filing.js.map +1 -0
  120. package/dist/fixture-auth.d.ts +63 -0
  121. package/dist/fixture-auth.js +95 -0
  122. package/dist/fixture-auth.js.map +1 -0
  123. package/dist/fixture-cli.d.ts +99 -0
  124. package/dist/fixture-cli.js +292 -0
  125. package/dist/fixture-cli.js.map +1 -0
  126. package/dist/github-issue-filer.d.ts +62 -0
  127. package/dist/github-issue-filer.js +189 -0
  128. package/dist/github-issue-filer.js.map +1 -0
  129. package/dist/host-health-run.d.ts +25 -0
  130. package/dist/host-health-run.js +33 -0
  131. package/dist/host-health-run.js.map +1 -0
  132. package/dist/http-5xx-outcome.d.ts +6 -0
  133. package/dist/http-5xx-outcome.js +39 -0
  134. package/dist/http-5xx-outcome.js.map +1 -0
  135. package/dist/inbox-cli.d.ts +7 -0
  136. package/dist/inbox-cli.js +197 -0
  137. package/dist/inbox-cli.js.map +1 -0
  138. package/dist/index.d.ts +1 -0
  139. package/dist/index.js +1 -0
  140. package/dist/index.js.map +1 -1
  141. package/dist/init-cli.d.ts +4 -0
  142. package/dist/init-cli.js +156 -0
  143. package/dist/init-cli.js.map +1 -0
  144. package/dist/init-keys.d.ts +30 -2
  145. package/dist/init-keys.js +19 -5
  146. package/dist/init-keys.js.map +1 -1
  147. package/dist/init-next-steps.d.ts +35 -0
  148. package/dist/init-next-steps.js +79 -0
  149. package/dist/init-next-steps.js.map +1 -0
  150. package/dist/invariants-file.d.ts +34 -0
  151. package/dist/invariants-file.js +68 -0
  152. package/dist/invariants-file.js.map +1 -0
  153. package/dist/invariants-validate.d.ts +30 -0
  154. package/dist/invariants-validate.js +105 -0
  155. package/dist/invariants-validate.js.map +1 -0
  156. package/dist/journey-annotate-api.d.ts +76 -0
  157. package/dist/journey-annotate-api.js +269 -0
  158. package/dist/journey-annotate-api.js.map +1 -0
  159. package/dist/journey-annotate-cli.d.ts +9 -0
  160. package/dist/journey-annotate-cli.js +181 -0
  161. package/dist/journey-annotate-cli.js.map +1 -0
  162. package/dist/journey-api.d.ts +104 -2
  163. package/dist/journey-api.js +163 -20
  164. package/dist/journey-api.js.map +1 -1
  165. package/dist/journey-cli.d.ts +4 -0
  166. package/dist/journey-cli.js +411 -0
  167. package/dist/journey-cli.js.map +1 -0
  168. package/dist/journey-demo-api.d.ts +114 -0
  169. package/dist/journey-demo-api.js +405 -0
  170. package/dist/journey-demo-api.js.map +1 -0
  171. package/dist/journey-demo-cli.d.ts +10 -0
  172. package/dist/journey-demo-cli.js +158 -0
  173. package/dist/journey-demo-cli.js.map +1 -0
  174. package/dist/journey-prefix.d.ts +194 -0
  175. package/dist/journey-prefix.js +279 -0
  176. package/dist/journey-prefix.js.map +1 -0
  177. package/dist/key-report.d.ts +49 -0
  178. package/dist/key-report.js +101 -0
  179. package/dist/key-report.js.map +1 -0
  180. package/dist/kill-signal.d.ts +193 -0
  181. package/dist/kill-signal.js +283 -0
  182. package/dist/kill-signal.js.map +1 -0
  183. package/dist/launch-armed.d.ts +37 -0
  184. package/dist/launch-armed.js +31 -0
  185. package/dist/launch-armed.js.map +1 -0
  186. package/dist/ledger-api.d.ts +106 -0
  187. package/dist/ledger-api.js +239 -0
  188. package/dist/ledger-api.js.map +1 -0
  189. package/dist/ledger-cli.d.ts +18 -0
  190. package/dist/ledger-cli.js +107 -0
  191. package/dist/ledger-cli.js.map +1 -0
  192. package/dist/load-api.d.ts +29 -11
  193. package/dist/load-api.js +23 -15
  194. package/dist/load-api.js.map +1 -1
  195. package/dist/load-cli.d.ts +4 -0
  196. package/dist/load-cli.js +97 -0
  197. package/dist/load-cli.js.map +1 -0
  198. package/dist/log-correlation.d.ts +200 -0
  199. package/dist/log-correlation.js +394 -0
  200. package/dist/log-correlation.js.map +1 -0
  201. package/dist/log-lines.d.ts +131 -0
  202. package/dist/log-lines.js +389 -0
  203. package/dist/log-lines.js.map +1 -0
  204. package/dist/log-sources.d.ts +71 -0
  205. package/dist/log-sources.js +236 -0
  206. package/dist/log-sources.js.map +1 -0
  207. package/dist/log-trace.d.ts +80 -0
  208. package/dist/log-trace.js +210 -0
  209. package/dist/log-trace.js.map +1 -0
  210. package/dist/logs-cli.d.ts +3 -0
  211. package/dist/logs-cli.js +51 -0
  212. package/dist/logs-cli.js.map +1 -0
  213. package/dist/logs-retention.d.ts +28 -0
  214. package/dist/logs-retention.js +85 -0
  215. package/dist/logs-retention.js.map +1 -0
  216. package/dist/masked-input.d.ts +22 -0
  217. package/dist/masked-input.js +99 -0
  218. package/dist/masked-input.js.map +1 -0
  219. package/dist/mcp-api.d.ts +91 -1
  220. package/dist/mcp-api.js +514 -18
  221. package/dist/mcp-api.js.map +1 -1
  222. package/dist/mcp-args.d.ts +50 -0
  223. package/dist/mcp-args.js +164 -0
  224. package/dist/mcp-args.js.map +1 -0
  225. package/dist/mcp-cli-bridge.d.ts +34 -0
  226. package/dist/mcp-cli-bridge.js +62 -0
  227. package/dist/mcp-cli-bridge.js.map +1 -0
  228. package/dist/mcp-cli-runner.d.ts +29 -0
  229. package/dist/mcp-cli-runner.js +44 -0
  230. package/dist/mcp-cli-runner.js.map +1 -0
  231. package/dist/mcp-cli-tools.d.ts +129 -0
  232. package/dist/mcp-cli-tools.js +737 -0
  233. package/dist/mcp-cli-tools.js.map +1 -0
  234. package/dist/mcp-paths.d.ts +28 -0
  235. package/dist/mcp-paths.js +76 -0
  236. package/dist/mcp-paths.js.map +1 -0
  237. package/dist/mission-actors.d.ts +40 -0
  238. package/dist/mission-actors.js +72 -0
  239. package/dist/mission-actors.js.map +1 -0
  240. package/dist/mission-api.d.ts +35 -0
  241. package/dist/mission-api.js +60 -3
  242. package/dist/mission-api.js.map +1 -1
  243. package/dist/mission-cli.d.ts +4 -0
  244. package/dist/mission-cli.js +248 -0
  245. package/dist/mission-cli.js.map +1 -0
  246. package/dist/mission-exit.d.ts +22 -0
  247. package/dist/mission-exit.js +26 -0
  248. package/dist/mission-exit.js.map +1 -0
  249. package/dist/mission-fixtures.d.ts +234 -0
  250. package/dist/mission-fixtures.js +862 -0
  251. package/dist/mission-fixtures.js.map +1 -0
  252. package/dist/mission-journal.d.ts +60 -0
  253. package/dist/mission-journal.js +115 -0
  254. package/dist/mission-journal.js.map +1 -0
  255. package/dist/mission-queue-cli.d.ts +10 -0
  256. package/dist/mission-queue-cli.js +198 -0
  257. package/dist/mission-queue-cli.js.map +1 -0
  258. package/dist/mission-queue-runner.d.ts +126 -0
  259. package/dist/mission-queue-runner.js +406 -0
  260. package/dist/mission-queue-runner.js.map +1 -0
  261. package/dist/multi-run-cli.d.ts +37 -0
  262. package/dist/multi-run-cli.js +116 -0
  263. package/dist/multi-run-cli.js.map +1 -0
  264. package/dist/multi-run.d.ts +339 -0
  265. package/dist/multi-run.js +619 -0
  266. package/dist/multi-run.js.map +1 -0
  267. package/dist/openrouter-call.d.ts +22 -0
  268. package/dist/openrouter-call.js +64 -0
  269. package/dist/openrouter-call.js.map +1 -0
  270. package/dist/profile-cli.d.ts +4 -0
  271. package/dist/profile-cli.js +57 -0
  272. package/dist/profile-cli.js.map +1 -0
  273. package/dist/program.d.ts +3 -75
  274. package/dist/program.js +123 -1921
  275. package/dist/program.js.map +1 -1
  276. package/dist/project-dir.d.ts +96 -0
  277. package/dist/project-dir.js +221 -0
  278. package/dist/project-dir.js.map +1 -0
  279. package/dist/record-api.d.ts +13 -7
  280. package/dist/record-api.js +44 -30
  281. package/dist/record-api.js.map +1 -1
  282. package/dist/record-cli.d.ts +4 -0
  283. package/dist/record-cli.js +76 -0
  284. package/dist/record-cli.js.map +1 -0
  285. package/dist/recording-cli.d.ts +4 -0
  286. package/dist/recording-cli.js +248 -0
  287. package/dist/recording-cli.js.map +1 -0
  288. package/dist/regression-api.d.ts +107 -0
  289. package/dist/regression-api.js +387 -6
  290. package/dist/regression-api.js.map +1 -1
  291. package/dist/regression-cli.d.ts +4 -0
  292. package/dist/regression-cli.js +284 -0
  293. package/dist/regression-cli.js.map +1 -0
  294. package/dist/report-api.d.ts +146 -0
  295. package/dist/report-api.js +431 -0
  296. package/dist/report-api.js.map +1 -0
  297. package/dist/report-cli.d.ts +12 -0
  298. package/dist/report-cli.js +147 -0
  299. package/dist/report-cli.js.map +1 -0
  300. package/dist/resource-preflight.d.ts +87 -0
  301. package/dist/resource-preflight.js +160 -0
  302. package/dist/resource-preflight.js.map +1 -0
  303. package/dist/result-schema.d.ts +22 -0
  304. package/dist/result-schema.js +28 -0
  305. package/dist/result-schema.js.map +1 -0
  306. package/dist/run-index.d.ts +29 -0
  307. package/dist/run-index.js +70 -0
  308. package/dist/run-index.js.map +1 -0
  309. package/dist/run-key-preflight.d.ts +42 -0
  310. package/dist/run-key-preflight.js +82 -0
  311. package/dist/run-key-preflight.js.map +1 -0
  312. package/dist/run-screenshots.d.ts +123 -0
  313. package/dist/run-screenshots.js +235 -0
  314. package/dist/run-screenshots.js.map +1 -0
  315. package/dist/runtime-env.d.ts +8 -0
  316. package/dist/runtime-env.js +23 -0
  317. package/dist/runtime-env.js.map +1 -0
  318. package/dist/secret-args.d.ts +23 -0
  319. package/dist/secret-args.js +45 -0
  320. package/dist/secret-args.js.map +1 -0
  321. package/dist/serve-cli.d.ts +4 -0
  322. package/dist/serve-cli.js +95 -0
  323. package/dist/serve-cli.js.map +1 -0
  324. package/dist/server-log-verify.d.ts +36 -0
  325. package/dist/server-log-verify.js +120 -0
  326. package/dist/server-log-verify.js.map +1 -0
  327. package/dist/session-check.d.ts +14 -0
  328. package/dist/session-check.js +44 -0
  329. package/dist/session-check.js.map +1 -0
  330. package/dist/site-cli.d.ts +4 -0
  331. package/dist/site-cli.js +127 -0
  332. package/dist/site-cli.js.map +1 -0
  333. package/dist/site-gate-cli.d.ts +28 -0
  334. package/dist/site-gate-cli.js +59 -0
  335. package/dist/site-gate-cli.js.map +1 -0
  336. package/dist/source-api.js +20 -4
  337. package/dist/source-api.js.map +1 -1
  338. package/dist/source-cli.d.ts +4 -0
  339. package/dist/source-cli.js +284 -0
  340. package/dist/source-cli.js.map +1 -0
  341. package/dist/source-run-api.d.ts +27 -1
  342. package/dist/source-run-api.js +22 -11
  343. package/dist/source-run-api.js.map +1 -1
  344. package/dist/storage-state-snapshot.d.ts +50 -0
  345. package/dist/storage-state-snapshot.js +87 -0
  346. package/dist/storage-state-snapshot.js.map +1 -0
  347. package/dist/suite-explore-options.d.ts +321 -0
  348. package/dist/suite-explore-options.js +162 -0
  349. package/dist/suite-explore-options.js.map +1 -0
  350. package/dist/target-config.d.ts +115 -0
  351. package/dist/target-config.js +225 -0
  352. package/dist/target-config.js.map +1 -0
  353. package/dist/transcript-file.d.ts +12 -0
  354. package/dist/transcript-file.js +23 -0
  355. package/dist/transcript-file.js.map +1 -0
  356. package/dist/type-fixture-file.d.ts +9 -0
  357. package/dist/type-fixture-file.js +48 -0
  358. package/dist/type-fixture-file.js.map +1 -0
  359. package/dist/ui-api.d.ts +3 -0
  360. package/dist/ui-api.js +11 -4
  361. package/dist/ui-api.js.map +1 -1
  362. package/dist/usability-capture.d.ts +43 -0
  363. package/dist/usability-capture.js +327 -0
  364. package/dist/usability-capture.js.map +1 -0
  365. package/dist/usage-config.d.ts +36 -0
  366. package/dist/usage-config.js +114 -0
  367. package/dist/usage-config.js.map +1 -0
  368. package/dist/ux-api.d.ts +3 -75
  369. package/dist/ux-api.js +3 -220
  370. package/dist/ux-api.js.map +1 -1
  371. package/dist/ux-claim-probe.d.ts +45 -0
  372. package/dist/ux-claim-probe.js +386 -0
  373. package/dist/ux-claim-probe.js.map +1 -0
  374. package/dist/ux-cli.d.ts +4 -0
  375. package/dist/ux-cli.js +109 -0
  376. package/dist/ux-cli.js.map +1 -0
  377. package/dist/ux-config.d.ts +29 -0
  378. package/dist/ux-config.js +103 -0
  379. package/dist/ux-config.js.map +1 -0
  380. package/dist/ux-evidence.d.ts +54 -0
  381. package/dist/ux-evidence.js +197 -0
  382. package/dist/ux-evidence.js.map +1 -0
  383. package/dist/ux-product.d.ts +14 -0
  384. package/dist/ux-product.js +39 -0
  385. package/dist/ux-product.js.map +1 -0
  386. package/dist/ux-review.d.ts +116 -0
  387. package/dist/ux-review.js +171 -0
  388. package/dist/ux-review.js.map +1 -0
  389. package/dist/ux-usability.d.ts +263 -0
  390. package/dist/ux-usability.js +580 -0
  391. package/dist/ux-usability.js.map +1 -0
  392. package/dist/verify-fix-api.d.ts +194 -0
  393. package/dist/verify-fix-api.js +506 -0
  394. package/dist/verify-fix-api.js.map +1 -0
  395. package/dist/verify-fix-cli.d.ts +4 -0
  396. package/dist/verify-fix-cli.js +115 -0
  397. package/dist/verify-fix-cli.js.map +1 -0
  398. package/package.json +23 -18
  399. package/skills/jevitate-ci-check/SKILL.md +77 -0
  400. package/skills/jevitate-demo/SKILL.md +61 -0
  401. package/skills/jevitate-explore/SKILL.md +96 -87
  402. package/skills/jevitate-getting-started/SKILL.md +89 -0
  403. package/skills/jevitate-load-test/SKILL.md +11 -2
  404. package/skills/jevitate-mission-scope/SKILL.md +19 -11
  405. package/skills/jevitate-record/SKILL.md +23 -5
  406. package/skills/jevitate-run-journey/SKILL.md +61 -17
  407. package/skills/jevitate-sources/SKILL.md +57 -14
  408. package/skills/jevitate-test-campaign/SKILL.md +203 -0
  409. package/skills/jevitate-ux-review/SKILL.md +106 -16
  410. package/skills/jevitate-verify-fix/SKILL.md +76 -0
@@ -0,0 +1,91 @@
1
+ import { MISSION_EXIT_CODES } from "@jevitate/domain";
2
+ /**
3
+ * THE exit-code table for every `jevitate` command (#210) — documented once, in
4
+ * docs/outcomes.md "Exit codes", and linked from everywhere else. Every command sets
5
+ * `process.exitCode` from this table (directly, or through `exitCodeForError` for a refused
6
+ * command), so CI can tell a typo from a defect from a run that proved nothing:
7
+ *
8
+ * | code | class | meaning |
9
+ * |------|---------------|--------------------------------------------------------------------------------|
10
+ * | 0 | ok | clean · succeeded · check passed · fixed · the command did what it was asked |
11
+ * | 1 | defects | defects found · a gating finding · still reproduces · a success check failed |
12
+ * | 2 | inconclusive | the run/command could not finish its work (inconclusive, crashed, an item |
13
+ * | | | errored, budget exceeded, an unexpected error) — it proves nothing |
14
+ * | 3 | hang | the app under test hung, and the hang reproduced on replay |
15
+ * | 4 | intermittent | a signal fired on some but not every replay |
16
+ * | 64 | usage | bad flags/arguments or unusable input (unknown id, invalid file, missing keys, |
17
+ * | | | refused target) — nothing ran. `EX_USAGE` from sysexits.h. |
18
+ * | 130/143 | killed | SIGINT / SIGTERM (kill-signal.ts); the partial result is still written |
19
+ *
20
+ * 0–4 are the pre-existing mission codes (`MISSION_EXIT_CODES`, @jevitate/domain) unchanged; the
21
+ * mission outcome → code mapping stays THERE (one place), and this table only names the classes.
22
+ * Usage errors get 64 rather than the next small integer so a future outcome code (5, 6, …) never
23
+ * collides with it.
24
+ */
25
+ export const EXIT_CODES = {
26
+ ok: 0,
27
+ defects: 1,
28
+ inconclusive: 2,
29
+ hang: 3,
30
+ intermittent: 4,
31
+ usage: 64,
32
+ };
33
+ /** A canonical mission outcome's exit code (the domain table; re-exported so commands import one module). */
34
+ export function exitCodeForOutcome(outcome) {
35
+ return MISSION_EXIT_CODES[outcome];
36
+ }
37
+ /**
38
+ * Error codes that mean "the invocation or its input was unusable; nothing ran" → `usage` (64).
39
+ * Matched by suffix/prefix so a new `E_<COMMAND>_ARGS`/`_INPUT`/… code classifies itself.
40
+ */
41
+ const USAGE_ERROR_PATTERNS = [
42
+ /_ARGS$/, // E_EXPLORE_ARGS, E_VERIFY_FIX_ARGS, E_JOURNEY_RUN_ARGS, …
43
+ /_INPUT$/, // E_LEDGER_INPUT, E_REPORT_INPUT, E_VERIFY_FIX_INPUT
44
+ /_ASSERTION$/, // E_EXPLORE_ASSERTION (an unparseable --success)
45
+ /_SPEC$/, // E_FIXTURE_SPEC, E_LOG_SPEC, E_LOG_SOURCE_SPEC
46
+ /_REF$/, // E_FIXTURE_REF
47
+ /_CONFIG$/, // E_TARGET_CONFIG, E_FILING_CONFIG, E_UX_CONFIG, …
48
+ /^E_INVALID_/, // E_INVALID_PARAMS, E_INVALID_RECORDING, …
49
+ /_UNKNOWN(_|$)/, // E_UNKNOWN_JOURNEY, E_SOURCE_UNKNOWN, E_JOURNEY_PUBLISH_UNKNOWN_SOURCE, …
50
+ /^E_UNKNOWN_/,
51
+ /_NOT_FOUND$/, // E_LEDGER_NOT_FOUND, E_REGRESSION_NOT_FOUND
52
+ /_INVARIANTS$/, // E_INVARIANTS, E_EXPLORE_INVARIANTS, E_USABILITY_INVARIANTS (invalid invariant files)
53
+ ];
54
+ const USAGE_ERROR_CODES = new Set([
55
+ "E_CHECK_SUITE", // the suite (or its preflight) was refused
56
+ "E_AI_SETUP_REQUIRED", // no keys / no gateway selected
57
+ "E_MISSING_CREDENTIAL",
58
+ "E_UNAUTHORIZED_EXPLORE_TARGET", // the target is outside the allowlist
59
+ "E_EXPLORE_FIXTURE", // --fixture names no fixture
60
+ "E_SELF_HEAL_MODE",
61
+ "E_UX_MIN_CONFIDENCE",
62
+ "E_UX_MAX_FINDINGS_PER_PAGE",
63
+ "E_UX_QUALITY_POLICY",
64
+ "E_UX_NO_APP_CONTEXT",
65
+ "E_JOURNEY_REQUIRES_AUTH",
66
+ "E_ENV_ORIGIN_REFUSED", // #247: a Journey step on an origin the chosen environment does not allow
67
+ "E_PROFILE_UNKNOWN", // `profile status` named a profile that was never created
68
+ "E_REGRESSION_EXISTS", // `regression capture --id` already exists; needs --force
69
+ "E_REGRESSION_HARD_SIGNAL", // `regression capture --fingerprint` names a hard-signal defect; use the ledger instead
70
+ "E_JOURNEY_ANNOTATIONS_STALE", // `journey annotate --approve`: the Journey changed since the draft; re-draft
71
+ "E_DEMO_PRODUCTION_ENV", // #249: `demo` refuses an environment flagged production: true
72
+ "E_DEMO_EXISTS", // #249: `demo` would overwrite an existing Journey / pending demo draft
73
+ "E_HUMAN_APPROVAL_REQUIRED", // #254: `inbox approve`/`cancel` — human-only, in `jevitate ui` (MCP's human_approval_required)
74
+ "E_INBOX_INPUT_PENDING", // #254: `inbox command` would consume a human's unread input; pass --reveal to receive it
75
+ "E_MISSION_QUEUE_REFUSED", // #254: `mission queue` — unknown/unpromoted target, bad shape, over-ceiling budget, invalid invariants
76
+ ]);
77
+ /** True when a refused command's error code is a usage/input error (exit 64). */
78
+ export function isUsageErrorCode(code) {
79
+ return USAGE_ERROR_CODES.has(code) || USAGE_ERROR_PATTERNS.some((p) => p.test(code));
80
+ }
81
+ /** A refused command's exit code: 64 for a usage/input error, else 2 (the command could not finish). */
82
+ export function exitCodeForError(code) {
83
+ return isUsageErrorCode(code) ? EXIT_CODES.usage : EXIT_CODES.inconclusive;
84
+ }
85
+ /** The exit code for a `{ok, error?}` envelope that carries no verdict of its own. */
86
+ export function exitCodeForEnvelope(envelope) {
87
+ if (envelope.ok)
88
+ return EXIT_CODES.ok;
89
+ return exitCodeForError(envelope.error?.code ?? "");
90
+ }
91
+ //# sourceMappingURL=exit-codes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exit-codes.js","sourceRoot":"","sources":["../src/exit-codes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,kBAAkB,EAAuB,MAAM,kBAAkB,CAAC;AAE3E;;;;;;;;;;;;;;;;;;;;;;GAsBG;AACH,MAAM,CAAC,MAAM,UAAU,GAAG;IACxB,EAAE,EAAE,CAAC;IACL,OAAO,EAAE,CAAC;IACV,YAAY,EAAE,CAAC;IACf,IAAI,EAAE,CAAC;IACP,YAAY,EAAE,CAAC;IACf,KAAK,EAAE,EAAE;CACD,CAAC;AAIX,6GAA6G;AAC7G,MAAM,UAAU,kBAAkB,CAAC,OAAuB;IACxD,OAAO,kBAAkB,CAAC,OAAO,CAAC,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,oBAAoB,GAAsB;IAC9C,QAAQ,EAAE,2DAA2D;IACrE,SAAS,EAAE,qDAAqD;IAChE,aAAa,EAAE,iDAAiD;IAChE,QAAQ,EAAE,gDAAgD;IAC1D,OAAO,EAAE,gBAAgB;IACzB,UAAU,EAAE,mDAAmD;IAC/D,aAAa,EAAE,2CAA2C;IAC1D,eAAe,EAAE,2EAA2E;IAC5F,aAAa;IACb,aAAa,EAAE,6CAA6C;IAC5D,cAAc,EAAE,uFAAuF;CACxG,CAAC;AAEF,MAAM,iBAAiB,GAAwB,IAAI,GAAG,CAAC;IACrD,eAAe,EAAE,2CAA2C;IAC5D,qBAAqB,EAAE,gCAAgC;IACvD,sBAAsB;IACtB,+BAA+B,EAAE,sCAAsC;IACvE,mBAAmB,EAAE,6BAA6B;IAClD,kBAAkB;IAClB,qBAAqB;IACrB,4BAA4B;IAC5B,qBAAqB;IACrB,qBAAqB;IACrB,yBAAyB;IACzB,sBAAsB,EAAE,0EAA0E;IAClG,mBAAmB,EAAE,0DAA0D;IAC/E,qBAAqB,EAAE,0DAA0D;IACjF,0BAA0B,EAAE,wFAAwF;IACpH,6BAA6B,EAAE,8EAA8E;IAC7G,uBAAuB,EAAE,+DAA+D;IACxF,eAAe,EAAE,wEAAwE;IACzF,2BAA2B,EAAE,gGAAgG;IAC7H,uBAAuB,EAAE,0FAA0F;IACnH,yBAAyB,EAAE,wGAAwG;CACpI,CAAC,CAAC;AAEH,iFAAiF;AACjF,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,iBAAiB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,oBAAoB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;AACvF,CAAC;AAED,wGAAwG;AACxG,MAAM,UAAU,gBAAgB,CAAC,IAAY;IAC3C,OAAO,gBAAgB,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,YAAY,CAAC;AAC7E,CAAC;AAED,sFAAsF;AACtF,MAAM,UAAU,mBAAmB,CAAC,QAA8E;IAChH,IAAI,QAAQ,CAAC,EAAE;QAAE,OAAO,UAAU,CAAC,EAAE,CAAC;IACtC,OAAO,gBAAgB,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;AACtD,CAAC"}
@@ -0,0 +1,144 @@
1
+ import type { JudgmentPort, GenerationPort, UsageTracker, UsageCounts } from "@jevitate/ai-core";
2
+ import { type BrowserPort, type EmulationSpec } from "@jevitate/playwright";
3
+ import { type BrowserRunOptions } from "./browser-run-options.js";
4
+ import { type ScreenshotsSpec } from "./run-screenshots.js";
5
+ import { type InvariantSpec } from "@jevitate/recording";
6
+ import type { HostHealthSampler } from "@jevitate/explore";
7
+ import type { EnvironmentDegraded, HostHealthSummary } from "@jevitate/domain";
8
+ import { type Bounds, type AdversarialOutcome, type AdversarialDefect, type MisuseStrategy, type CoverageThresholds } from "@jevitate/explore";
9
+ import { type FilingConfig, type IssueFilerPort, type MissionOutcome } from "@jevitate/domain";
10
+ import { type FindingsIssues } from "./findings-filing.js";
11
+ import { type EngineInfo } from "./engine.js";
12
+ import type { TargetConfig } from "./target-config.js";
13
+ import { MISSION_RESULT_SCHEMA_VERSION } from "./result-schema.js";
14
+ import { type JourneyPrefix } from "./journey-prefix.js";
15
+ import type { JourneyBranchPoint } from "@jevitate/journey";
16
+ import { type ServerLogDefect, type ServerLogsSummary } from "./log-correlation.js";
17
+ import { type ServerLogOptions, type OverflowFlags, type MissionTarget } from "./explore-shared.js";
18
+ /**
19
+ * The misuse strategies `explore --strategy adversarial` runs, in order — shared with the queue drain
20
+ * (`jevitate mission run`, #117) so a queued adversarial mission hunts exactly like the CLI's.
21
+ */
22
+ export declare const CLI_ADVERSARIAL_STRATEGIES: readonly MisuseStrategy[];
23
+ /**
24
+ * Options for the additive adversarial CLI mission. Mirrors `runExploration`'s
25
+ * fail-closed discipline: the authorized-target guard runs FIRST, before any
26
+ * browser is opened, so an unauthorized origin never launches Chromium.
27
+ */
28
+ export interface RunAdversarialCliMissionOptions {
29
+ /** Test seam (#203): the run's host-health sampler (a deterministic fake host). Default: this host's. */
30
+ readonly hostHealth?: HostHealthSampler;
31
+ readonly seedUrl: string;
32
+ readonly allowlist: readonly string[];
33
+ readonly strategies: readonly MisuseStrategy[];
34
+ readonly judgment: JudgmentPort;
35
+ readonly generation: GenerationPort;
36
+ /** Usage accounting (#100): see `RunExplorationOptions.usage`. */
37
+ readonly usage?: UsageTracker;
38
+ /** Step/action budget (CLI `--max-decisions` / `--max-actions`). */
39
+ readonly bounds?: Partial<Bounds>;
40
+ /** Testing seam — defaults to a real `PlaywrightBrowserPort`. */
41
+ readonly browserPortFactory?: () => BrowserPort;
42
+ /** How Chromium is launched (executable/channel/extra args) and shown (#245 demo mode). Default: pinned Chromium, headless. */
43
+ readonly browser?: BrowserRunOptions;
44
+ /** #251 `--screenshots`: masked screenshots (one per distinct screen, or per step) + `index.md`. */
45
+ readonly screenshots?: ScreenshotsSpec;
46
+ /**
47
+ * #250 `--evidence-video`: after the result is written, each defect's minimal repro is replayed
48
+ * with captions (the failing step marked) into a masked clip + before/at screenshots, attached as
49
+ * `defects[].evidence` (and to its issue draft).
50
+ */
51
+ readonly evidenceVideo?: boolean;
52
+ /**
53
+ * Playwright storageState JSON to seed the session from (CLI `--storage-state`) —
54
+ * the deterministic authenticated pre-step. Contains live session cookies: it is
55
+ * handed only to the browser, never to a model or a Recording.
56
+ */
57
+ readonly storageState?: string;
58
+ /**
59
+ * Writes the browser context's storageState (cookies + origin storage) here when the run ends
60
+ * (CLI `--save-storage-state`) — so a rotating refresh token stays usable across runs instead of
61
+ * invalidating `--storage-state`'s file on first use. The file holds live session credentials:
62
+ * written with mode 0600, and its contents are never logged. See
63
+ * `RunExplorationOptions.saveStorageState`'s own doc for the full behaviour (#159: written on
64
+ * every exit path including a crash/kill signal, never over a lost/logged-out session).
65
+ */
66
+ readonly saveStorageState?: string;
67
+ /** Registered secret values (`--secret`): kept out of the transcript, Recording and issue drafts. */
68
+ readonly secrets?: readonly string[];
69
+ /** #303 `--action-deltas` (opt-in): record what each action changed (code verdict) — evidence only. */
70
+ readonly actionDeltas?: boolean;
71
+ /** Issue filing (off unless enabled + a repo is configured). Default: drafts only. */
72
+ readonly filing?: FilingConfig;
73
+ /** Creates the filer — called only when filing is enabled. */
74
+ readonly issueFiler?: () => IssueFilerPort;
75
+ /** Fresh-context replays that confirm a hang (default 2). */
76
+ readonly hangReplays?: number;
77
+ /** Where the Recording and decision transcript are written. Default `.jevitate/logs/<date>` (project, else `~/.jevitate`). */
78
+ readonly outDir?: string;
79
+ /** ISO clock for the transcript filename. Default `Date.now()`. */
80
+ readonly nowIso?: () => string;
81
+ /** The target's settle/hang configuration (`~/.jevitate/targets.json` + flags). */
82
+ readonly target?: TargetConfig;
83
+ /** Extra in-scope route globs (`--route`); the start URL's route is always in scope. */
84
+ readonly routeGlobs?: readonly string[];
85
+ /** Coverage a silent run needs to be `clean` (`--min-control-coverage`, `--no-require-form-submit`). */
86
+ readonly coverageThresholds?: Partial<CoverageThresholds>;
87
+ /** App-declared invariants (`--invariants`, #86), already validated against the allowlist. */
88
+ readonly invariants?: InvariantSpec;
89
+ /** Backend log sources (`--log-source`/`--log-defect`, #142), already validated. */
90
+ readonly serverLog?: ServerLogOptions;
91
+ /** Resolved `authFrom.secret` refs (#135) a declared probe may use: `env:VAR` → its value. */
92
+ readonly invariantAuthTokens?: ReadonlyMap<string, string>;
93
+ /** Per-mission viewport/device emulation (#149); see `RunExplorationOptions.emulation`. */
94
+ readonly emulation?: EmulationSpec;
95
+ /** Horizontal-overflow hard signal (#149, CLI `--check-overflow` / `--ignore-overflow`). */
96
+ readonly overflow?: OverflowFlags;
97
+ /**
98
+ * #293 `--from-journey`/`--at-step`: replayed into the session before the mission, which then starts
99
+ * on the live page it left (never a fresh navigation). `seedUrl` is only the expected landing.
100
+ */
101
+ readonly journeyPrefix?: JourneyPrefix;
102
+ }
103
+ export type AdversarialCliMissionResult = Omit<AdversarialOutcome, "defects"> & {
104
+ /** The result schema's version (#195): the common fields are filled the same way by every strategy. */
105
+ readonly schemaVersion: typeof MISSION_RESULT_SCHEMA_VERSION;
106
+ readonly strategy: "adversarial";
107
+ /** The portable verdict (equal to `outcome`, which an adversarial run already states as a `MissionOutcome`). */
108
+ readonly missionOutcome: MissionOutcome;
109
+ /** EVERY defect the run found (#195): hard-signal and declared-invariant defects, then `server-log` defects (#142). */
110
+ readonly defects: Array<AdversarialDefect | ServerLogDefect>;
111
+ /** Every Recording the run wrote (#195: one list on every strategy) — an adversarial run writes one. */
112
+ readonly recordingPaths: string[];
113
+ /** #245: `--record-video` files, finalized before this result was written (absent when not recording). */
114
+ readonly videoPaths?: string[];
115
+ readonly target: MissionTarget;
116
+ /** One ready-to-file draft per defect (and per crash), written next to the Recording. */
117
+ readonly issues: FindingsIssues;
118
+ /** The persisted typed result (`<recording>.result.json`), readable via MCP `get_mission_result`. */
119
+ readonly resultPath: string;
120
+ readonly transcriptPath: string;
121
+ /** Process exit code for `outcome` (see `missionExitCode`). */
122
+ readonly exitCode: number;
123
+ /** Which build produced this result (issue #83): `{version, commit, builtAt}`. */
124
+ readonly engine: EngineInfo;
125
+ /** The declared spec the run evaluated (#86) — persisted so `verify-fix` re-checks the same one. */
126
+ readonly invariantSpec?: InvariantSpec;
127
+ /** Judgment/generation call counts and tokens for this run (#100); present only when `opts.usage` was supplied. */
128
+ readonly usage?: UsageCounts;
129
+ /** Backend log correlation summary (#142) — present only when `--log-source` was given. */
130
+ readonly serverLogs?: ServerLogsSummary;
131
+ /** The host's health over the run (#203): peaks, the slowest render, starved steps. */
132
+ readonly hostHealth: HostHealthSummary;
133
+ /** Findings met while the host was starved (#203) — advisory, never a defect/hang, never failing the run. */
134
+ readonly environmentDegraded: EnvironmentDegraded[];
135
+ /** #293: the Journey step a journey-anchored run branched from (absent on a bare-URL run). */
136
+ readonly branch?: JourneyBranchPoint;
137
+ };
138
+ /**
139
+ * Runs `@jevitate/explore`'s adversarial "try to break it" mission behind the
140
+ * CLI. Guardrail #1 is enforced BEFORE opening a browser (fail-closed); the
141
+ * session is always torn down. The stop-on-defect decision is the mission's
142
+ * own trusted hard-signal oracle — never Jev's `Noul` (guardrail #4).
143
+ */
144
+ export declare function runAdversarialCliMission(opts: RunAdversarialCliMissionOptions): Promise<AdversarialCliMissionResult>;
@@ -0,0 +1,227 @@
1
+ /** The adversarial strategy runner behind `jevitate explore --strategy adversarial`. */
2
+ import { logsDirFor } from "./project-dir.js";
3
+ import { join, resolve as resolvePath } from "node:path";
4
+ import { PlaywrightBrowserPort, resolveEmulation } from "@jevitate/playwright";
5
+ import { closeOnce, demoOverlayOf, extensionsStamp, finalizeVideos, runVideoDir, sessionLaunchOptions } from "./browser-run-options.js";
6
+ import { runCaptureFor } from "./run-screenshots.js";
7
+ import { evidenceOf, withRunEvidence } from "./defect-evidence.js";
8
+ import { CastActor, BrowseTheWeb } from "@jevitate/screenplay";
9
+ import { runAdversarialMission, assertAuthorizedExploreTarget, startRouteGlobs, draftForCrash, draftForDefect, draftForHang, } from "@jevitate/explore";
10
+ import { clock, } from "@jevitate/domain";
11
+ import { processIssueDrafts } from "./findings-filing.js";
12
+ import { currentEngineInfo } from "./engine.js";
13
+ import { MissionJournal, artifactStamp, closeQuietly, resultPathFor, writeMissionResult } from "./mission-journal.js";
14
+ import { MISSION_RESULT_SCHEMA_VERSION, unifiedDefects } from "./result-schema.js";
15
+ import { missionExitCode } from "./mission-exit.js";
16
+ import { launchArmed } from "./launch-armed.js";
17
+ import { branchFields, startFromJourney } from "./journey-prefix.js";
18
+ import { finishHostHealth } from "./host-health-run.js";
19
+ import { applyServerLogOutcome, openServerLogRuntime, } from "./log-correlation.js";
20
+ import { serverLogResult, recordingEmulation, DRAFTS_ONLY, NO_FILER, draftContext, freshSessionOpener, currentUrlSafe, assertSaveStorageStateOutsideProject, persistStorageState, browserVersionOf, serverLogRuntimeOptions, } from "./explore-shared.js";
21
+ /**
22
+ * The misuse strategies `explore --strategy adversarial` runs, in order — shared with the queue drain
23
+ * (`jevitate mission run`, #117) so a queued adversarial mission hunts exactly like the CLI's.
24
+ */
25
+ export const CLI_ADVERSARIAL_STRATEGIES = [
26
+ // Form-aware misuse around submitting (#64): most app pages are forms.
27
+ "double-submit",
28
+ "boundary-submit",
29
+ "edit-cancel-save",
30
+ "navigate-away-unsaved",
31
+ "act-while-pending",
32
+ // Coverage: act on every target control once.
33
+ "exercise-controls",
34
+ "ordering-violation",
35
+ "repeat-rapid",
36
+ "boundary-input",
37
+ "contradictory-actions",
38
+ "nav-during-pending",
39
+ // Keep hunting on other routes (within the target's scope) after and between defects.
40
+ "visit-route",
41
+ ];
42
+ /**
43
+ * Runs `@jevitate/explore`'s adversarial "try to break it" mission behind the
44
+ * CLI. Guardrail #1 is enforced BEFORE opening a browser (fail-closed); the
45
+ * session is always torn down. The stop-on-defect decision is the mission's
46
+ * own trusted hard-signal oracle — never Jev's `Noul` (guardrail #4).
47
+ */
48
+ export async function runAdversarialCliMission(opts) {
49
+ // Guardrail #1 — authorize BEFORE opening a browser. Throws on refusal.
50
+ const origin = assertAuthorizedExploreTarget(opts.seedUrl, opts.allowlist);
51
+ assertSaveStorageStateOutsideProject(opts.saveStorageState);
52
+ // #224: the shared default scope (the start URL's route) must be derivable — refused up front.
53
+ startRouteGlobs(opts.seedUrl);
54
+ // #149: refused BEFORE any browser opens.
55
+ const resolvedEmulation = resolveEmulation(opts.emulation);
56
+ // #250/#251: a recorded or screenshotted run's sessions carry the live pixel mask from their first
57
+ // paint; `--screenshots` captures after each step (the Recording path names their folder).
58
+ const capture = runCaptureFor({
59
+ recordsVideo: opts.browser?.recordVideo !== undefined,
60
+ screenshots: opts.screenshots,
61
+ secrets: opts.secrets ?? [],
62
+ artifactPath: () => journal.recordingPath,
63
+ title: `adversarial run of ${opts.seedUrl}`,
64
+ });
65
+ const portFactory = capture.wrap(opts.browserPortFactory ?? (() => new PlaywrightBrowserPort()));
66
+ const port = portFactory();
67
+ const outDir = opts.outDir ?? logsDirFor();
68
+ const iso = (opts.nowIso ?? (() => clock.nowIso()))();
69
+ // Crash-safe: the transcript and partial Recording are flushed after every step.
70
+ const journal = new MissionJournal(join(outDir, `adversarial-${artifactStamp(iso)}.json`));
71
+ // #245: the mission session and every hang-replay session are shown/recorded alike.
72
+ const videoDir = runVideoDir(opts.browser, journal.recordingPath);
73
+ const launch = {
74
+ ...sessionLaunchOptions(opts.browser, videoDir),
75
+ allowedOrigins: [...opts.allowlist],
76
+ baseUrl: origin,
77
+ ...opts.emulation,
78
+ ...(opts.storageState !== undefined ? { storageState: opts.storageState } : {}),
79
+ };
80
+ // #163: this run's own share of a (possibly shared) tracker: its usage and sidecar.
81
+ const runUsage = opts.usage?.scope();
82
+ // #226: the kill switch is armed BEFORE the host sampler and the browser launch (see launch-armed.ts).
83
+ const { disarmKillSwitch, health, session, snapshotter } = await launchArmed({
84
+ hostHealth: opts.hostHealth,
85
+ saveStorageState: opts.saveStorageState !== undefined,
86
+ open: () => port.open(launch),
87
+ mission: (hooks) => ({
88
+ // #220: the killed run's partial result carries the unified schema's common fields too.
89
+ strategy: "adversarial",
90
+ target: { seedUrl: opts.seedUrl, allowlist: [...opts.allowlist], ...(opts.storageState !== undefined ? { storageStatePath: resolvePath(opts.storageState) } : {}) },
91
+ recordingPath: journal.recordingPath,
92
+ hostHealth: hooks.hostHealth,
93
+ ...(videoDir === undefined ? {} : { videoDir }),
94
+ transcriptPath: journal.transcriptPath,
95
+ transcript: () => journal.transcript,
96
+ ...(runUsage === undefined ? {} : { usage: runUsage }),
97
+ ...(opts.saveStorageState === undefined ? {} : { storageState: { path: opts.saveStorageState, snapshot: hooks.snapshot } }),
98
+ }),
99
+ });
100
+ const serverLog = openServerLogRuntime({
101
+ ...serverLogRuntimeOptions(opts.serverLog),
102
+ secrets: opts.secrets ?? [],
103
+ onTranscriptEntry: journal.onTranscriptEntry,
104
+ });
105
+ // #204: every request's correlation ids, from before the first navigation.
106
+ serverLog?.observe(session.page);
107
+ const onTranscriptEntry = (entry, all) => {
108
+ capture.noteEntry(session.page, entry);
109
+ health.noteStep(entry);
110
+ (serverLog?.onTranscriptEntry ?? journal.onTranscriptEntry)(entry, all);
111
+ snapshotter.noteSettledStep(currentUrlSafe(session));
112
+ };
113
+ // #159/#245: persisted and closed once — early (before the result is written) when recording video.
114
+ const closeSession = closeOnce(async () => {
115
+ await persistStorageState(session, opts.saveStorageState, snapshotter);
116
+ await closeQuietly(session);
117
+ });
118
+ try {
119
+ // #293: a journey-anchored run first replays its Journey's prefix into this very session.
120
+ const start = await startFromJourney(opts.journeyPrefix, session, opts.seedUrl, opts.allowlist, opts.browser);
121
+ const actor = CastActor.named("adversarial-mission").whoCan(new BrowseTheWeb(session, [...opts.allowlist]));
122
+ const outcome = await runAdversarialMission({
123
+ hostHealth: health,
124
+ demoOverlay: demoOverlayOf(opts.browser),
125
+ ...(opts.target?.timing === undefined ? {} : { timingConfig: opts.target.timing }),
126
+ ...(opts.target?.settle === undefined ? {} : { settle: opts.target.settle }),
127
+ ...(opts.target?.hangs === undefined ? {} : { hangs: opts.target.hangs }),
128
+ ...(opts.target?.safety === undefined ? {} : { safety: opts.target.safety }),
129
+ page: session.page,
130
+ actor,
131
+ judgment: opts.judgment,
132
+ generation: opts.generation,
133
+ seedUrl: start.url,
134
+ ...(start.branch === undefined ? {} : { startInPlace: true }),
135
+ // #293: a reset re-replays the Journey prefix (counted against --max-actions), never just the URL.
136
+ ...(start.restart ?? {}),
137
+ allowlist: opts.allowlist,
138
+ strategies: opts.strategies,
139
+ ...(opts.routeGlobs === undefined ? {} : { routeGlobs: opts.routeGlobs }),
140
+ ...(opts.coverageThresholds === undefined ? {} : { coverageThresholds: opts.coverageThresholds }),
141
+ site: origin,
142
+ ...(opts.bounds === undefined ? {} : { bounds: opts.bounds }),
143
+ ...(opts.secrets === undefined ? {} : { secrets: opts.secrets }),
144
+ ...(opts.actionDeltas === true ? { actionDeltas: true } : {}),
145
+ // A hang is reproduced by replaying its steps in fresh contexts (same auth).
146
+ openFreshSession: freshSessionOpener(portFactory, launch, opts.allowlist),
147
+ ...(opts.hangReplays === undefined ? {} : { hangReplays: opts.hangReplays }),
148
+ onTranscriptEntry,
149
+ onRecording: journal.onRecording,
150
+ ...(opts.invariants === undefined ? {} : { invariants: opts.invariants }),
151
+ ...(opts.invariantAuthTokens === undefined ? {} : { invariantAuthTokens: opts.invariantAuthTokens }),
152
+ overflow: {
153
+ ...(opts.overflow?.checkOverflow === undefined ? {} : { checkOverflow: opts.overflow.checkOverflow }),
154
+ ...(opts.overflow?.toleranceCss === undefined ? {} : { toleranceCss: opts.overflow.toleranceCss }),
155
+ ...(opts.overflow?.ignoreSelectors === undefined ? {} : { ignoreSelectors: opts.overflow.ignoreSelectors }),
156
+ ...(opts.emulation?.device === undefined ? {} : { device: opts.emulation.device }),
157
+ },
158
+ });
159
+ const serverLogRun = serverLog === undefined ? undefined : await serverLog.finish(outcome.transcript);
160
+ // `AdversarialOutcome.transcript` is a mutable `TranscriptEntry[]`; the correlated array only
161
+ // ADDS an optional `serverLogs` field per entry (`TranscriptEntryWithLogs extends TranscriptEntry`).
162
+ const transcript = (serverLogRun?.transcript ?? outcome.transcript);
163
+ journal.writeRecording(outcome.recording);
164
+ journal.writeTranscript(transcript);
165
+ // #142 follow-up: a server-log defect counts as `defects-found`; an unreadable `--log-defect`
166
+ // oracle turns an otherwise-`clean` run `inconclusive` — never a false clean.
167
+ const host = await finishHostHealth(health, applyServerLogOutcome(outcome.outcome, serverLogRun));
168
+ const missionOutcome = host.outcome;
169
+ const exitCode = missionExitCode(missionOutcome);
170
+ const resultPath = resultPathFor(journal.recordingPath);
171
+ const engine = currentEngineInfo();
172
+ const ctx = draftContext(origin, journal, opts.secrets ?? [], browserVersionOf(session.page), engine);
173
+ const drafts = outcome.defects.map((d) => draftForDefect(d, { ...ctx, verifyCommand: `jevitate verify-fix --result ${resultPath} --fingerprint ${d.fingerprint}` }));
174
+ for (const h of outcome.hangs) {
175
+ drafts.push(draftForHang(h, { ...ctx, verifyCommand: `jevitate verify-fix --result ${resultPath} --fingerprint ${h.fingerprint}` }));
176
+ }
177
+ if (outcome.crash !== undefined)
178
+ drafts.push(draftForCrash(outcome.crash, transcript, ctx));
179
+ const issues = await processIssueDrafts(journal.recordingPath, drafts, opts.filing ?? DRAFTS_ONLY, opts.issueFiler ?? NO_FILER, iso);
180
+ // #245: every context closed (videos finalized) before the result naming them is written.
181
+ const shotFields = await capture.finish();
182
+ const videos = await finalizeVideos(videoDir, closeSession);
183
+ const result = {
184
+ ...outcome,
185
+ schemaVersion: MISSION_RESULT_SCHEMA_VERSION,
186
+ strategy: "adversarial",
187
+ missionOutcome,
188
+ recordingPaths: [journal.recordingPath],
189
+ ...videos,
190
+ ...shotFields,
191
+ // #149: stamped with the emulation the mission ran under, so verify-fix replays under it by default.
192
+ recording: {
193
+ ...(resolvedEmulation === undefined ? outcome.recording : { ...outcome.recording, emulation: recordingEmulation(resolvedEmulation) }),
194
+ ...extensionsStamp(opts.browser), // #256
195
+ },
196
+ outcome: missionOutcome,
197
+ transcript,
198
+ transcriptPath: journal.transcriptPath,
199
+ exitCode,
200
+ issues,
201
+ // What `verify-fix` needs to replay a defect later: where, which origins, which session file
202
+ // (the storageState PATH only — its cookies never enter an artifact).
203
+ target: {
204
+ seedUrl: start.url,
205
+ allowlist: [...opts.allowlist],
206
+ ...(opts.storageState !== undefined ? { storageStatePath: resolvePath(opts.storageState) } : {}),
207
+ },
208
+ ...branchFields(start),
209
+ engine,
210
+ ...(opts.invariants === undefined ? {} : { invariantSpec: opts.invariants }),
211
+ ...(runUsage === undefined ? {} : { usage: runUsage.snapshot() }),
212
+ ...serverLogResult(serverLogRun),
213
+ defects: unifiedDefects(outcome.defects, serverLogRun?.defects),
214
+ resultPath,
215
+ ...(host.failure === undefined || outcome.failure !== undefined ? {} : { failure: host.failure }),
216
+ ...host.fields,
217
+ };
218
+ return await withRunEvidence({ ...result, resultPath: writeMissionResult(journal.recordingPath, missionOutcome, exitCode, result, runUsage) }, evidenceOf(opts, opts.secrets ?? []));
219
+ }
220
+ finally {
221
+ disarmKillSwitch();
222
+ health.stop();
223
+ await serverLog?.abort();
224
+ await closeSession();
225
+ }
226
+ }
227
+ //# sourceMappingURL=explore-adversarial.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"explore-adversarial.js","sourceRoot":"","sources":["../src/explore-adversarial.ts"],"names":[],"mappings":"AAAA,wFAAwF;AACxF,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,MAAM,WAAW,CAAC;AAEzD,OAAO,EAAE,qBAAqB,EAAE,gBAAgB,EAAwC,MAAM,sBAAsB,CAAC;AACrH,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,eAAe,EAAE,cAAc,EAAE,WAAW,EAAE,oBAAoB,EAA0B,MAAM,0BAA0B,CAAC;AAChK,OAAO,EAAE,aAAa,EAAwB,MAAM,sBAAsB,CAAC;AAC3E,OAAO,EAAE,UAAU,EAAE,eAAe,EAAE,MAAM,sBAAsB,CAAC;AACnE,OAAO,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AAI/D,OAAO,EACL,qBAAqB,EACrB,6BAA6B,EAK7B,eAAe,EAGf,aAAa,EACb,cAAc,EACd,YAAY,GACb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAIgB,KAAK,GAC3B,MAAM,kBAAkB,CAAC;AAC1B,OAAO,EAAE,kBAAkB,EAAuB,MAAM,sBAAsB,CAAC;AAC/E,OAAO,EAAE,iBAAiB,EAAmB,MAAM,aAAa,CAAC;AAEjE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,YAAY,EAAE,aAAa,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AACtH,OAAO,EAAE,6BAA6B,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AACnF,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAsB,MAAM,qBAAqB,CAAC;AAEzF,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AACxD,OAAO,EACL,qBAAqB,EACrB,oBAAoB,GAGrB,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAEL,eAAe,EAEf,kBAAkB,EAClB,WAAW,EACX,QAAQ,EACR,YAAY,EACZ,kBAAkB,EAClB,cAAc,EACd,oCAAoC,EACpC,mBAAmB,EACnB,gBAAgB,EAEhB,uBAAuB,GACxB,MAAM,qBAAqB,CAAC;AAE7B;;;GAGG;AACH,MAAM,CAAC,MAAM,0BAA0B,GAA8B;IACnE,uEAAuE;IACvE,eAAe;IACf,iBAAiB;IACjB,kBAAkB;IAClB,uBAAuB;IACvB,mBAAmB;IACnB,8CAA8C;IAC9C,mBAAmB;IACnB,oBAAoB;IACpB,cAAc;IACd,gBAAgB;IAChB,uBAAuB;IACvB,oBAAoB;IACpB,sFAAsF;IACtF,aAAa;CACd,CAAC;AAuHF;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB,CAC5C,IAAqC;IAErC,wEAAwE;IACxE,MAAM,MAAM,GAAG,6BAA6B,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3E,oCAAoC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC5D,+FAA+F;IAC/F,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;IAC9B,0CAA0C;IAC1C,MAAM,iBAAiB,GAAG,gBAAgB,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;IAC3D,mGAAmG;IACnG,2FAA2F;IAC3F,MAAM,OAAO,GAAG,aAAa,CAAC;QAC5B,YAAY,EAAE,IAAI,CAAC,OAAO,EAAE,WAAW,KAAK,SAAS;QACrD,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;QAC3B,YAAY,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,aAAa;QACzC,KAAK,EAAE,sBAAsB,IAAI,CAAC,OAAO,EAAE;KAC5C,CAAC,CAAC;IACH,MAAM,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,kBAAkB,IAAI,CAAC,GAAG,EAAE,CAAC,IAAI,qBAAqB,EAAE,CAAC,CAAC,CAAC;IACjG,MAAM,IAAI,GAAG,WAAW,EAAE,CAAC;IAC3B,MAAM,MAAM,GAAG,IAAI,CAAC,MAAM,IAAI,UAAU,EAAE,CAAC;IAC3C,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC;IACtD,iFAAiF;IACjF,MAAM,OAAO,GAAG,IAAI,cAAc,CAAC,IAAI,CAAC,MAAM,EAAE,eAAe,aAAa,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;IAC3F,oFAAoF;IACpF,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,aAAa,CAAC,CAAC;IAClE,MAAM,MAAM,GAAG;QACb,GAAG,oBAAoB,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC;QAC/C,cAAc,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;QACnC,OAAO,EAAE,MAAM;QACf,GAAG,IAAI,CAAC,SAAS;QACjB,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;KAChF,CAAC;IACF,oFAAoF;IACpF,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC;IACrC,uGAAuG;IACvG,MAAM,EAAE,gBAAgB,EAAE,MAAM,EAAE,OAAO,EAAE,WAAW,EAAE,GAAG,MAAM,WAAW,CAAC;QAC3E,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,gBAAgB,EAAE,IAAI,CAAC,gBAAgB,KAAK,SAAS;QACrD,IAAI,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YACnB,wFAAwF;YACxF,QAAQ,EAAE,aAAa;YACvB,MAAM,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE;YACnK,aAAa,EAAE,OAAO,CAAC,aAAa;YACpC,UAAU,EAAE,KAAK,CAAC,UAAU;YAC5B,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,CAAC;YAC/C,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,UAAU,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,UAAU;YACpC,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC;YACtD,GAAG,CAAC,IAAI,CAAC,gBAAgB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,gBAAgB,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;SAC5H,CAAC;KACH,CAAC,CAAC;IACH,MAAM,SAAS,GAAG,oBAAoB,CAAC;QACrC,GAAG,uBAAuB,CAAC,IAAI,CAAC,SAAS,CAAC;QAC1C,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE;QAC3B,iBAAiB,EAAE,OAAO,CAAC,iBAAiB;KAC7C,CAAC,CAAC;IACH,2EAA2E;IAC3E,SAAS,EAAE,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IACjC,MAAM,iBAAiB,GAAG,CAAC,KAAsB,EAAE,GAA+B,EAAQ,EAAE;QAC1F,OAAO,CAAC,SAAS,CAAC,OAAO,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;QACvC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QACvB,CAAC,SAAS,EAAE,iBAAiB,IAAI,OAAO,CAAC,iBAAiB,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;QACxE,WAAW,CAAC,eAAe,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,CAAC;IACvD,CAAC,CAAC;IACF,oGAAoG;IACpG,MAAM,YAAY,GAAG,SAAS,CAAC,KAAK,IAAI,EAAE;QACxC,MAAM,mBAAmB,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,WAAW,CAAC,CAAC;QACvE,MAAM,YAAY,CAAC,OAAO,CAAC,CAAC;IAC9B,CAAC,CAAC,CAAC;IACH,IAAI,CAAC;QACH,0FAA0F;QAC1F,MAAM,KAAK,GAAG,MAAM,gBAAgB,CAAC,IAAI,CAAC,aAAa,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAC9G,MAAM,KAAK,GAAG,SAAS,CAAC,KAAK,CAAC,qBAAqB,CAAC,CAAC,MAAM,CAAC,IAAI,YAAY,CAAC,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC;QAC5G,MAAM,OAAO,GAAG,MAAM,qBAAqB,CAAC;YAC1C,UAAU,EAAE,MAAM;YAClB,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC;YACxC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAClF,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5E,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;YAC5E,IAAI,EAAE,OAAO,CAAC,IAAI;YAClB,KAAK;YACL,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,OAAO,EAAE,KAAK,CAAC,GAAG;YAClB,GAAG,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC;YAC7D,mGAAmG;YACnG,GAAG,CAAC,KAAK,CAAC,OAAO,IAAI,EAAE,CAAC;YACxB,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,UAAU,EAAE,IAAI,CAAC,UAAU;YAC3B,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,kBAAkB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,kBAAkB,EAAE,IAAI,CAAC,kBAAkB,EAAE,CAAC;YACjG,IAAI,EAAE,MAAM;YACZ,GAAG,CAAC,IAAI,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC;YAC7D,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YAChE,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;YAC7D,6EAA6E;YAC7E,gBAAgB,EAAE,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,WAAW,EAAE,IAAI,CAAC,WAAW,EAAE,CAAC;YAC5E,iBAAiB;YACjB,WAAW,EAAE,OAAO,CAAC,WAAW;YAChC,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YACzE,GAAG,CAAC,IAAI,CAAC,mBAAmB,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,mBAAmB,EAAE,IAAI,CAAC,mBAAmB,EAAE,CAAC;YACpG,QAAQ,EAAE;gBACR,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,aAAa,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,QAAQ,CAAC,aAAa,EAAE,CAAC;gBACrG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,IAAI,CAAC,QAAQ,CAAC,YAAY,EAAE,CAAC;gBAClG,GAAG,CAAC,IAAI,CAAC,QAAQ,EAAE,eAAe,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,eAAe,EAAE,IAAI,CAAC,QAAQ,CAAC,eAAe,EAAE,CAAC;gBAC3G,GAAG,CAAC,IAAI,CAAC,SAAS,EAAE,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,CAAC;aACnF;SACF,CAAC,CAAC;QACH,MAAM,YAAY,GAAG,SAAS,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,MAAM,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QACtG,8FAA8F;QAC9F,qGAAqG;QACrG,MAAM,UAAU,GAAG,CAAC,YAAY,EAAE,UAAU,IAAI,OAAO,CAAC,UAAU,CAAsB,CAAC;QACzF,OAAO,CAAC,cAAc,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;QAC1C,OAAO,CAAC,eAAe,CAAC,UAAU,CAAC,CAAC;QACpC,8FAA8F;QAC9F,8EAA8E;QAC9E,MAAM,IAAI,GAAG,MAAM,gBAAgB,CAAC,MAAM,EAAE,qBAAqB,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,CAAC,CAAC,CAAC;QAClG,MAAM,cAAc,GAAmB,IAAI,CAAC,OAAO,CAAC;QACpD,MAAM,QAAQ,GAAG,eAAe,CAAC,cAAc,CAAC,CAAC;QACjD,MAAM,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,aAAa,CAAC,CAAC;QACxD,MAAM,MAAM,GAAG,iBAAiB,EAAE,CAAC;QACnC,MAAM,GAAG,GAAG,YAAY,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,EAAE,gBAAgB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC,CAAC;QACtG,MAAM,MAAM,GAAiB,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CACrD,cAAc,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,aAAa,EAAE,gCAAgC,UAAU,kBAAkB,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAC1H,CAAC;QACF,KAAK,MAAM,CAAC,IAAI,OAAO,CAAC,KAAK,EAAE,CAAC;YAC9B,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,EAAE,EAAE,GAAG,GAAG,EAAE,aAAa,EAAE,gCAAgC,UAAU,kBAAkB,CAAC,CAAC,WAAW,EAAE,EAAE,CAAC,CAAC,CAAC;QACvI,CAAC;QACD,IAAI,OAAO,CAAC,KAAK,KAAK,SAAS;YAAE,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,OAAO,CAAC,KAAK,EAAE,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;QAC5F,MAAM,MAAM,GAAG,MAAM,kBAAkB,CACrC,OAAO,CAAC,aAAa,EACrB,MAAM,EACN,IAAI,CAAC,MAAM,IAAI,WAAW,EAC1B,IAAI,CAAC,UAAU,IAAI,QAAQ,EAC3B,GAAG,CACJ,CAAC;QACF,0FAA0F;QAC1F,MAAM,UAAU,GAAG,MAAM,OAAO,CAAC,MAAM,EAAE,CAAC;QAC1C,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,QAAQ,EAAE,YAAY,CAAC,CAAC;QAC5D,MAAM,MAAM,GAAG;YACb,GAAG,OAAO;YACV,aAAa,EAAE,6BAA6B;YAC5C,QAAQ,EAAE,aAAsB;YAChC,cAAc;YACd,cAAc,EAAE,CAAC,OAAO,CAAC,aAAa,CAAC;YACvC,GAAG,MAAM;YACT,GAAG,UAAU;YACb,qGAAqG;YACrG,SAAS,EAAE;gBACT,GAAG,CAAC,iBAAiB,KAAK,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,OAAO,CAAC,SAAS,EAAE,SAAS,EAAE,kBAAkB,CAAC,iBAAiB,CAAC,EAAE,CAAC;gBACrI,GAAG,eAAe,CAAC,IAAI,CAAC,OAAO,CAAC,EAAE,OAAO;aAC1C;YACD,OAAO,EAAE,cAAc;YACvB,UAAU;YACV,cAAc,EAAE,OAAO,CAAC,cAAc;YACtC,QAAQ;YACR,MAAM;YACN,6FAA6F;YAC7F,sEAAsE;YACtE,MAAM,EAAE;gBACN,OAAO,EAAE,KAAK,CAAC,GAAG;gBAClB,SAAS,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC;gBAC9B,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,gBAAgB,EAAE,WAAW,CAAC,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aACjG;YACD,GAAG,YAAY,CAAC,KAAK,CAAC;YACtB,MAAM;YACN,GAAG,CAAC,IAAI,CAAC,UAAU,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;YAC5E,GAAG,CAAC,QAAQ,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,QAAQ,CAAC,QAAQ,EAAE,EAAE,CAAC;YACjE,GAAG,eAAe,CAAC,YAAY,CAAC;YAChC,OAAO,EAAE,cAAc,CAAC,OAAO,CAAC,OAAO,EAAE,YAAY,EAAE,OAAO,CAAC;YAC/D,UAAU;YACV,GAAG,CAAC,IAAI,CAAC,OAAO,KAAK,SAAS,IAAI,OAAO,CAAC,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,CAAC;YACjG,GAAG,IAAI,CAAC,MAAM;SACf,CAAC;QACF,OAAO,MAAM,eAAe,CAAC,EAAE,GAAG,MAAM,EAAE,UAAU,EAAE,kBAAkB,CAAC,OAAO,CAAC,aAAa,EAAE,cAAc,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,CAAC,CAAC,CAAC;IACvL,CAAC;YAAS,CAAC;QACT,gBAAgB,EAAE,CAAC;QACnB,MAAM,CAAC,IAAI,EAAE,CAAC;QACd,MAAM,SAAS,EAAE,KAAK,EAAE,CAAC;QACzB,MAAM,YAAY,EAAE,CAAC;IACvB,CAAC;AACH,CAAC"}