@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,321 @@
1
+ /**
2
+ * The `jevitate check --suite` item option set (#195), declared ONCE against `jevitate explore`'s
3
+ * own options. Every explore option (by its commander attribute name) is in exactly one of:
4
+ *
5
+ * - `SUITE_EXPLORE_OPTIONS` — generic options a target (as a default) and a goal/mission item (as
6
+ * an override) take under the SAME camelCase name; parsed, typed and validated by
7
+ * `check-suite.ts` from this table, and applied by `check-api.ts` exactly as `explore` applies
8
+ * the flag;
9
+ * - `SUITE_DEDICATED_EXPLORE_OPTIONS` — options the suite already had a dedicated field for
10
+ * (`url`, `goal`, `success`, `routes`, `secretFields`, …);
11
+ * - `SUITE_EXCLUDED_EXPLORE_OPTIONS` — options that make no sense per item, with the reason.
12
+ *
13
+ * `suite-explore-options.test.ts` builds the real `explore` command and fails when an option is in
14
+ * none of them (a new explore flag must be decided here), or when a table's shape disagrees with
15
+ * the flag's own (a repeatable flag is a list here, a switch a boolean).
16
+ *
17
+ * Secrets: no option here carries a literal secret. `secret` takes `env:<VAR>` references only;
18
+ * `totp` (like `secretFields`) takes `<descriptor>=env:<VAR>` bindings only — both resolved from
19
+ * the environment when the check starts, never written in the suite.
20
+ */
21
+ /** What a suite item is run as: a goal item, or a mission item's strategy. */
22
+ export type ExploreItemKind = "goal" | "coverage" | "exploratory" | "adversarial" | "feature" | "usability";
23
+ export declare const ALL_KINDS: readonly ExploreItemKind[];
24
+ export type SuiteOptionShape =
25
+ /** a non-empty string */
26
+ "string"
27
+ /** an array of non-empty strings (a repeatable flag) */
28
+ | "strings" | "boolean"
29
+ /** a positive number */
30
+ | "positive"
31
+ /** a positive integer */
32
+ | "integer"
33
+ /** a non-negative integer */
34
+ | "count"
35
+ /** a number in 0..1 */
36
+ | "ratio"
37
+ /** a file path, resolved against the suite file's directory */
38
+ | "path"
39
+ /** `<name>=<storageState path>` entries, the path resolved against the suite file's directory */
40
+ | "named-paths"
41
+ /** `env:<VAR>` references (never a literal value) */
42
+ | "env-refs"
43
+ /** `<descriptor>=env:<VAR>` bindings (never a literal value) */
44
+ | "env-bindings";
45
+ export interface SuiteExploreOption {
46
+ readonly shape: SuiteOptionShape;
47
+ /** The item kinds the option applies to (as on `explore`); an item setting it elsewhere is refused. */
48
+ readonly appliesTo: readonly ExploreItemKind[];
49
+ /** Allowed values, for an enum-like string. */
50
+ readonly oneOf?: readonly string[];
51
+ /** Inclusive range, for an integer. */
52
+ readonly range?: readonly [number, number];
53
+ }
54
+ export declare const SUITE_EXPLORE_OPTIONS: {
55
+ readonly show: {
56
+ readonly shape: "string";
57
+ readonly appliesTo: readonly ["usability"];
58
+ };
59
+ readonly minConfidence: {
60
+ readonly shape: "ratio";
61
+ readonly appliesTo: readonly ["usability"];
62
+ };
63
+ readonly maxFindingsPerPage: {
64
+ readonly shape: "integer";
65
+ readonly appliesTo: readonly ["usability"];
66
+ readonly range: readonly [1, 1000];
67
+ };
68
+ readonly product: {
69
+ readonly shape: "path";
70
+ readonly appliesTo: readonly ["usability"];
71
+ };
72
+ readonly polish: {
73
+ readonly shape: "boolean";
74
+ readonly appliesTo: readonly ["usability"];
75
+ };
76
+ readonly probeGuards: {
77
+ readonly shape: "boolean";
78
+ readonly appliesTo: readonly ["usability"];
79
+ };
80
+ readonly scope: {
81
+ readonly shape: "string";
82
+ readonly appliesTo: readonly ["coverage", "exploratory"];
83
+ readonly oneOf: readonly ["app"];
84
+ };
85
+ readonly secret: {
86
+ readonly shape: "env-refs";
87
+ readonly appliesTo: readonly ["goal", "adversarial", "usability"];
88
+ };
89
+ readonly totp: {
90
+ readonly shape: "env-bindings";
91
+ readonly appliesTo: readonly ExploreItemKind[];
92
+ };
93
+ readonly fixture: {
94
+ readonly shape: "path";
95
+ readonly appliesTo: readonly ExploreItemKind[];
96
+ };
97
+ readonly actor: {
98
+ readonly shape: "named-paths";
99
+ readonly appliesTo: readonly ["goal"];
100
+ };
101
+ readonly saveStorageState: {
102
+ readonly shape: "path";
103
+ readonly appliesTo: readonly ExploreItemKind[];
104
+ };
105
+ readonly persona: {
106
+ readonly shape: "named-paths";
107
+ readonly appliesTo: readonly ExploreItemKind[];
108
+ };
109
+ readonly personas: {
110
+ readonly shape: "path";
111
+ readonly appliesTo: readonly ExploreItemKind[];
112
+ };
113
+ readonly stallTimeout: {
114
+ readonly shape: "positive";
115
+ readonly appliesTo: readonly ["coverage", "exploratory", "feature"];
116
+ };
117
+ readonly replyWaitMs: {
118
+ readonly shape: "integer";
119
+ readonly appliesTo: readonly ExploreItemKind[];
120
+ };
121
+ readonly replyCeilingMs: {
122
+ readonly shape: "integer";
123
+ readonly appliesTo: readonly ExploreItemKind[];
124
+ };
125
+ readonly replyMaxChars: {
126
+ readonly shape: "integer";
127
+ readonly appliesTo: readonly ExploreItemKind[];
128
+ readonly range: readonly [20, 2000];
129
+ };
130
+ readonly jobWaitMs: {
131
+ readonly shape: "integer";
132
+ readonly appliesTo: readonly ExploreItemKind[];
133
+ };
134
+ readonly deny: {
135
+ readonly shape: "strings";
136
+ readonly appliesTo: readonly ExploreItemKind[];
137
+ };
138
+ readonly paid: {
139
+ readonly shape: "strings";
140
+ readonly appliesTo: readonly ExploreItemKind[];
141
+ };
142
+ readonly allowDestructive: {
143
+ readonly shape: "boolean";
144
+ readonly appliesTo: readonly ExploreItemKind[];
145
+ };
146
+ readonly allowWrites: {
147
+ readonly shape: "boolean";
148
+ readonly appliesTo: readonly ExploreItemKind[];
149
+ };
150
+ readonly allowWrite: {
151
+ readonly shape: "strings";
152
+ readonly appliesTo: readonly ExploreItemKind[];
153
+ };
154
+ readonly readRpc: {
155
+ readonly shape: "strings";
156
+ readonly appliesTo: readonly ExploreItemKind[];
157
+ };
158
+ readonly hangReplayWrites: {
159
+ readonly shape: "boolean";
160
+ readonly appliesTo: readonly ExploreItemKind[];
161
+ };
162
+ readonly settleIgnore: {
163
+ readonly shape: "strings";
164
+ readonly appliesTo: readonly ExploreItemKind[];
165
+ };
166
+ readonly longPollMs: {
167
+ readonly shape: "integer";
168
+ readonly appliesTo: readonly ExploreItemKind[];
169
+ };
170
+ readonly apiPrefix: {
171
+ readonly shape: "strings";
172
+ readonly appliesTo: readonly ExploreItemKind[];
173
+ };
174
+ readonly ignoreNoProgress: {
175
+ readonly shape: "strings";
176
+ readonly appliesTo: readonly ExploreItemKind[];
177
+ };
178
+ readonly hangReplays: {
179
+ readonly shape: "count";
180
+ readonly appliesTo: readonly ["goal", "adversarial"];
181
+ };
182
+ readonly minControlCoverage: {
183
+ readonly shape: "ratio";
184
+ readonly appliesTo: readonly ["adversarial"];
185
+ };
186
+ readonly requireFormSubmit: {
187
+ readonly shape: "boolean";
188
+ readonly appliesTo: readonly ["adversarial"];
189
+ };
190
+ readonly logSource: {
191
+ readonly shape: "strings";
192
+ readonly appliesTo: readonly ExploreItemKind[];
193
+ };
194
+ readonly allowLogCmd: {
195
+ readonly shape: "boolean";
196
+ readonly appliesTo: readonly ExploreItemKind[];
197
+ };
198
+ readonly logDefect: {
199
+ readonly shape: "strings";
200
+ readonly appliesTo: readonly ExploreItemKind[];
201
+ };
202
+ readonly logQuietOk: {
203
+ readonly shape: "strings";
204
+ readonly appliesTo: readonly ExploreItemKind[];
205
+ };
206
+ readonly logIgnore: {
207
+ readonly shape: "strings";
208
+ readonly appliesTo: readonly ExploreItemKind[];
209
+ };
210
+ readonly logScope: {
211
+ readonly shape: "strings";
212
+ readonly appliesTo: readonly ExploreItemKind[];
213
+ };
214
+ readonly logCorrelationHeader: {
215
+ readonly shape: "strings";
216
+ readonly appliesTo: readonly ExploreItemKind[];
217
+ };
218
+ readonly logIdPattern: {
219
+ readonly shape: "strings";
220
+ readonly appliesTo: readonly ExploreItemKind[];
221
+ };
222
+ readonly serverLogDrainMs: {
223
+ readonly shape: "integer";
224
+ readonly appliesTo: readonly ExploreItemKind[];
225
+ };
226
+ readonly checkOverflow: {
227
+ readonly shape: "boolean";
228
+ readonly appliesTo: readonly ExploreItemKind[];
229
+ };
230
+ readonly ignoreOverflow: {
231
+ readonly shape: "strings";
232
+ readonly appliesTo: readonly ExploreItemKind[];
233
+ };
234
+ readonly before: {
235
+ readonly shape: "string";
236
+ readonly appliesTo: readonly ["goal"];
237
+ };
238
+ readonly after: {
239
+ readonly shape: "string";
240
+ readonly appliesTo: readonly ["goal"];
241
+ };
242
+ readonly allowShellHooks: {
243
+ readonly shape: "boolean";
244
+ readonly appliesTo: readonly ["goal"];
245
+ };
246
+ readonly hookTimeoutMs: {
247
+ readonly shape: "integer";
248
+ readonly appliesTo: readonly ["goal"];
249
+ };
250
+ readonly fixtureIdentity: {
251
+ readonly shape: "named-paths";
252
+ readonly appliesTo: readonly ["goal"];
253
+ };
254
+ readonly allowVacuousChecks: {
255
+ readonly shape: "boolean";
256
+ readonly appliesTo: readonly ExploreItemKind[];
257
+ };
258
+ readonly actionDeltas: {
259
+ readonly shape: "boolean";
260
+ readonly appliesTo: readonly ["goal", "usability", "coverage", "exploratory", "adversarial"];
261
+ };
262
+ readonly headed: {
263
+ readonly shape: "boolean";
264
+ readonly appliesTo: readonly ExploreItemKind[];
265
+ };
266
+ readonly slowMo: {
267
+ readonly shape: "count";
268
+ readonly appliesTo: readonly ExploreItemKind[];
269
+ };
270
+ readonly recordVideo: {
271
+ readonly shape: "path";
272
+ readonly appliesTo: readonly ExploreItemKind[];
273
+ };
274
+ readonly overlay: {
275
+ readonly shape: "boolean";
276
+ readonly appliesTo: readonly ExploreItemKind[];
277
+ };
278
+ readonly screenshots: {
279
+ readonly shape: "string";
280
+ readonly appliesTo: readonly ExploreItemKind[];
281
+ };
282
+ readonly evidenceVideo: {
283
+ readonly shape: "boolean";
284
+ readonly appliesTo: readonly ExploreItemKind[];
285
+ };
286
+ };
287
+ export type SuiteExploreOptionName = keyof typeof SUITE_EXPLORE_OPTIONS;
288
+ interface ShapeValue {
289
+ string: string;
290
+ strings: readonly string[];
291
+ boolean: boolean;
292
+ positive: number;
293
+ integer: number;
294
+ count: number;
295
+ ratio: number;
296
+ path: string;
297
+ "named-paths": readonly string[];
298
+ "env-refs": readonly string[];
299
+ "env-bindings": readonly string[];
300
+ }
301
+ /** The parsed generic options of a target (defaults) or an item (overrides) — typed from the table. */
302
+ export type SuiteExploreOptions = {
303
+ readonly [K in SuiteExploreOptionName]?: ShapeValue[(typeof SUITE_EXPLORE_OPTIONS)[K]["shape"]];
304
+ };
305
+ /** Where the suite takes an explore option it has a dedicated field for. */
306
+ export interface DedicatedOption {
307
+ /** The suite field name. */
308
+ readonly key: string;
309
+ /** Where it may appear. */
310
+ readonly at: readonly ("target" | "journey" | "goal" | "mission" | "verifyFix")[];
311
+ }
312
+ export declare const SUITE_DEDICATED_EXPLORE_OPTIONS: Readonly<Record<string, DedicatedOption>>;
313
+ export declare const SUITE_EXCLUDED_EXPLORE_OPTIONS: Readonly<Record<string, string>>;
314
+ /** Suite key of a generic option (the explore attribute name itself). */
315
+ export declare function isSuiteExploreOption(key: string): key is SuiteExploreOptionName;
316
+ /**
317
+ * The effective options of one item: the target's defaults for its kind, overridden key by key by
318
+ * the item's own (an item value REPLACES the target's, lists included).
319
+ */
320
+ export declare function effectiveExploreOptions(target: SuiteExploreOptions | undefined, item: SuiteExploreOptions | undefined, kind: ExploreItemKind): SuiteExploreOptions;
321
+ export {};
@@ -0,0 +1,162 @@
1
+ /**
2
+ * The `jevitate check --suite` item option set (#195), declared ONCE against `jevitate explore`'s
3
+ * own options. Every explore option (by its commander attribute name) is in exactly one of:
4
+ *
5
+ * - `SUITE_EXPLORE_OPTIONS` — generic options a target (as a default) and a goal/mission item (as
6
+ * an override) take under the SAME camelCase name; parsed, typed and validated by
7
+ * `check-suite.ts` from this table, and applied by `check-api.ts` exactly as `explore` applies
8
+ * the flag;
9
+ * - `SUITE_DEDICATED_EXPLORE_OPTIONS` — options the suite already had a dedicated field for
10
+ * (`url`, `goal`, `success`, `routes`, `secretFields`, …);
11
+ * - `SUITE_EXCLUDED_EXPLORE_OPTIONS` — options that make no sense per item, with the reason.
12
+ *
13
+ * `suite-explore-options.test.ts` builds the real `explore` command and fails when an option is in
14
+ * none of them (a new explore flag must be decided here), or when a table's shape disagrees with
15
+ * the flag's own (a repeatable flag is a list here, a switch a boolean).
16
+ *
17
+ * Secrets: no option here carries a literal secret. `secret` takes `env:<VAR>` references only;
18
+ * `totp` (like `secretFields`) takes `<descriptor>=env:<VAR>` bindings only — both resolved from
19
+ * the environment when the check starts, never written in the suite.
20
+ */
21
+ export const ALL_KINDS = ["goal", "coverage", "exploratory", "adversarial", "feature", "usability"];
22
+ const GOAL_UX = ["goal", "usability"];
23
+ const OVERFLOW = ["coverage", "exploratory", "adversarial", "usability"];
24
+ export const SUITE_EXPLORE_OPTIONS = {
25
+ // usability review
26
+ show: { shape: "string", appliesTo: ["usability"] },
27
+ minConfidence: { shape: "ratio", appliesTo: ["usability"] },
28
+ maxFindingsPerPage: { shape: "integer", appliesTo: ["usability"], range: [1, 1000] },
29
+ product: { shape: "path", appliesTo: ["usability"] },
30
+ polish: { shape: "boolean", appliesTo: ["usability"] },
31
+ probeGuards: { shape: "boolean", appliesTo: ["usability"] },
32
+ // containment
33
+ scope: { shape: "string", appliesTo: ["coverage", "exploratory"], oneOf: ["app"] },
34
+ // secrets and sessions
35
+ secret: { shape: "env-refs", appliesTo: ["goal", "adversarial", "usability"] },
36
+ totp: { shape: "env-bindings", appliesTo: GOAL_UX },
37
+ fixture: { shape: "path", appliesTo: GOAL_UX },
38
+ actor: { shape: "named-paths", appliesTo: ["goal"] },
39
+ saveStorageState: { shape: "path", appliesTo: ALL_KINDS },
40
+ persona: { shape: "named-paths", appliesTo: ALL_KINDS },
41
+ personas: { shape: "path", appliesTo: ALL_KINDS },
42
+ // pacing and conversation
43
+ stallTimeout: { shape: "positive", appliesTo: ["coverage", "exploratory", "feature"] },
44
+ replyWaitMs: { shape: "integer", appliesTo: GOAL_UX },
45
+ replyCeilingMs: { shape: "integer", appliesTo: GOAL_UX },
46
+ replyMaxChars: { shape: "integer", appliesTo: GOAL_UX, range: [20, 2000] },
47
+ jobWaitMs: { shape: "integer", appliesTo: GOAL_UX },
48
+ // safety, settle, timing (the target config explore builds from its flags)
49
+ deny: { shape: "strings", appliesTo: ALL_KINDS },
50
+ paid: { shape: "strings", appliesTo: ALL_KINDS },
51
+ allowDestructive: { shape: "boolean", appliesTo: ALL_KINDS },
52
+ allowWrites: { shape: "boolean", appliesTo: ALL_KINDS },
53
+ allowWrite: { shape: "strings", appliesTo: ALL_KINDS },
54
+ readRpc: { shape: "strings", appliesTo: ALL_KINDS },
55
+ hangReplayWrites: { shape: "boolean", appliesTo: ALL_KINDS },
56
+ settleIgnore: { shape: "strings", appliesTo: ALL_KINDS },
57
+ longPollMs: { shape: "integer", appliesTo: ALL_KINDS },
58
+ apiPrefix: { shape: "strings", appliesTo: ALL_KINDS },
59
+ ignoreNoProgress: { shape: "strings", appliesTo: ALL_KINDS },
60
+ hangReplays: { shape: "count", appliesTo: ["goal", "adversarial"] },
61
+ // adversarial coverage thresholds
62
+ minControlCoverage: { shape: "ratio", appliesTo: ["adversarial"] },
63
+ requireFormSubmit: { shape: "boolean", appliesTo: ["adversarial"] },
64
+ // backend logs (#142)
65
+ logSource: { shape: "strings", appliesTo: ALL_KINDS },
66
+ allowLogCmd: { shape: "boolean", appliesTo: ALL_KINDS },
67
+ logDefect: { shape: "strings", appliesTo: ALL_KINDS },
68
+ logQuietOk: { shape: "strings", appliesTo: ALL_KINDS },
69
+ logIgnore: { shape: "strings", appliesTo: ALL_KINDS },
70
+ logScope: { shape: "strings", appliesTo: ALL_KINDS },
71
+ logCorrelationHeader: { shape: "strings", appliesTo: ALL_KINDS },
72
+ logIdPattern: { shape: "strings", appliesTo: ALL_KINDS },
73
+ serverLogDrainMs: { shape: "integer", appliesTo: ALL_KINDS },
74
+ // horizontal overflow (#149)
75
+ checkOverflow: { shape: "boolean", appliesTo: OVERFLOW },
76
+ ignoreOverflow: { shape: "strings", appliesTo: OVERFLOW },
77
+ // mission fixtures' shell hooks (#144); the fixtures file itself is the dedicated `fixtures`
78
+ before: { shape: "string", appliesTo: ["goal"] },
79
+ after: { shape: "string", appliesTo: ["goal"] },
80
+ allowShellHooks: { shape: "boolean", appliesTo: ["goal"] },
81
+ hookTimeoutMs: { shape: "integer", appliesTo: ["goal"] },
82
+ // #243: named identities a fixture step authenticates as (`auth.identity`), not the item's own session
83
+ fixtureIdentity: { shape: "named-paths", appliesTo: ["goal"] },
84
+ // #202: a success check satisfied before the run's first action is a warning, not a failure
85
+ allowVacuousChecks: { shape: "boolean", appliesTo: GOAL_UX },
86
+ // #303: opt-in action deltas (every explore item kind but feature)
87
+ actionDeltas: { shape: "boolean", appliesTo: ["goal", "usability", "coverage", "exploratory", "adversarial"] },
88
+ // #245 demo mode: opt-in per item (a check stays headless by default, CI included)
89
+ headed: { shape: "boolean", appliesTo: ALL_KINDS },
90
+ slowMo: { shape: "count", appliesTo: ALL_KINDS },
91
+ recordVideo: { shape: "path", appliesTo: ALL_KINDS },
92
+ overlay: { shape: "boolean", appliesTo: ALL_KINDS },
93
+ // #251: masked screenshots (`screens`, `steps`, `screens:<dir>`, `steps:<dir>` or `<dir>`)
94
+ screenshots: { shape: "string", appliesTo: ALL_KINDS },
95
+ // #250: per-defect captioned repro clip + key screenshots (default: on when the item records video)
96
+ evidenceVideo: { shape: "boolean", appliesTo: ALL_KINDS },
97
+ };
98
+ export const SUITE_DEDICATED_EXPLORE_OPTIONS = {
99
+ url: { key: "url", at: ["target", "goal", "mission"] },
100
+ strategy: { key: "strategy", at: ["mission"] },
101
+ goal: { key: "goal", at: ["goal", "mission"] },
102
+ appClass: { key: "appClass", at: ["mission"] },
103
+ // #225: a usability mission item takes `success`/`successWhen` too (its job's completion checks).
104
+ success: { key: "success", at: ["goal", "mission"] },
105
+ successWhen: { key: "successWhen", at: ["goal", "mission"] },
106
+ feature: { key: "feature", at: ["mission"] },
107
+ route: { key: "routes", at: ["mission"] },
108
+ allow: { key: "allow", at: ["target"] },
109
+ secretField: { key: "secretFields", at: ["target", "goal", "mission"] },
110
+ storageState: { key: "storageState", at: ["target", "journey", "goal", "mission", "verifyFix"] },
111
+ fixtures: { key: "fixtures", at: ["target", "goal"] },
112
+ invariants: { key: "invariants", at: ["target"] },
113
+ maxActions: { key: "maxActions", at: ["goal", "mission"] },
114
+ maxDecisions: { key: "maxDecisions", at: ["goal", "mission"] },
115
+ viewport: { key: "viewport", at: ["target", "journey", "goal", "mission"] },
116
+ device: { key: "device", at: ["target", "journey", "goal", "mission"] },
117
+ // #293 journey-anchored missions: the promoted Journey and step a mission item branches off.
118
+ fromJourney: { key: "fromJourney", at: ["mission"] },
119
+ atStep: { key: "atStep", at: ["mission"] },
120
+ param: { key: "params", at: ["journey", "mission"] },
121
+ env: { key: "env", at: ["journey", "mission"] },
122
+ baseUrl: { key: "baseUrl", at: ["journey", "mission"] },
123
+ journeysDir: { key: "journeysDir", at: ["target"] },
124
+ };
125
+ export const SUITE_EXCLUDED_EXPLORE_OPTIONS = {
126
+ browserExecutable: "a check launches every item's browser the same way: pass --browser-executable to `jevitate check`",
127
+ browserChannel: "a check launches every item's browser the same way: pass --browser-channel to `jevitate check`",
128
+ browserArg: "a check launches every item's browser the same way: pass --browser-arg to `jevitate check`",
129
+ extension: "#256: a check launches every item's browser the same way: pass --extension to `jevitate check` (a suite item with its own `allow` lists the chrome-extension://<id> origin itself)",
130
+ maxBrowsers: "#205: resource governance is per check, not per item: pass --max-browsers to `jevitate check`",
131
+ maxBrowserMemory: "#205: resource governance is per check, not per item: pass --max-browser-memory to `jevitate check`",
132
+ ignoreHostLoad: "#205: whether a check starts on a starved host is decided once, for the whole check: pass --ignore-host-load to `jevitate check`",
133
+ real: "one model gateway per check: the suite's `ai` or `jevitate check --real`",
134
+ fakeAi: "one model gateway per check: the suite's `ai` or `jevitate check --fake-ai`",
135
+ out: "one output directory per check (`jevitate check --out`); item results go to <out>/results",
136
+ json: "one envelope per check (`jevitate check --json` / --json-out)",
137
+ fileIssues: "a check is a CI gate: findings are reported in JUnit/SARIF/report.md, never filed mid-run",
138
+ issueRepo: "a check is a CI gate: findings are reported in JUnit/SARIF/report.md, never filed mid-run",
139
+ jevitateRepo: "a check is a CI gate: findings are reported in JUnit/SARIF/report.md, never filed mid-run",
140
+ repeat: "a check gates each item once by finding identity; track flakes across checks with --baseline",
141
+ minAgreement: "a check gates each item once by finding identity; track flakes across checks with --baseline",
142
+ typeFixture: "#281: a file typed verbatim into a field is an `explore --type-fixture` binding; a suite goal declares none",
143
+ };
144
+ /** Suite key of a generic option (the explore attribute name itself). */
145
+ export function isSuiteExploreOption(key) {
146
+ return Object.prototype.hasOwnProperty.call(SUITE_EXPLORE_OPTIONS, key);
147
+ }
148
+ /**
149
+ * The effective options of one item: the target's defaults for its kind, overridden key by key by
150
+ * the item's own (an item value REPLACES the target's, lists included).
151
+ */
152
+ export function effectiveExploreOptions(target, item, kind) {
153
+ const out = {};
154
+ for (const [k, v] of Object.entries(target ?? {})) {
155
+ if (isSuiteExploreOption(k) && SUITE_EXPLORE_OPTIONS[k].appliesTo.includes(kind))
156
+ out[k] = v;
157
+ }
158
+ for (const [k, v] of Object.entries(item ?? {}))
159
+ out[k] = v;
160
+ return out;
161
+ }
162
+ //# sourceMappingURL=suite-explore-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"suite-explore-options.js","sourceRoot":"","sources":["../src/suite-explore-options.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAIH,MAAM,CAAC,MAAM,SAAS,GAA+B,CAAC,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,SAAS,EAAE,WAAW,CAAC,CAAC;AAmChI,MAAM,OAAO,GAA+B,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC;AAClE,MAAM,QAAQ,GAA+B,CAAC,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;AAErG,MAAM,CAAC,MAAM,qBAAqB,GAAG;IACnC,mBAAmB;IACnB,IAAI,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE;IACnD,aAAa,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE;IAC3D,kBAAkB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE;IACpF,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE;IACpD,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE;IACtD,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,WAAW,CAAC,EAAE;IAC3D,cAAc;IACd,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,aAAa,CAAC,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,EAAE;IAClF,uBAAuB;IACvB,MAAM,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,EAAE,WAAW,CAAC,EAAE;IAC9E,IAAI,EAAE,EAAE,KAAK,EAAE,cAAc,EAAE,SAAS,EAAE,OAAO,EAAE;IACnD,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE;IAC9C,KAAK,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE;IACpD,gBAAgB,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;IACzD,OAAO,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,SAAS,EAAE;IACvD,QAAQ,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;IACjD,0BAA0B;IAC1B,YAAY,EAAE,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,CAAC,UAAU,EAAE,aAAa,EAAE,SAAS,CAAC,EAAE;IACtF,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE;IACrD,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE;IACxD,aAAa,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC,EAAE,EAAE,IAAI,CAAC,EAAE;IAC1E,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE;IACnD,2EAA2E;IAC3E,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAChD,IAAI,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAChD,gBAAgB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC5D,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACvD,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACtD,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACnD,gBAAgB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC5D,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACxD,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACtD,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACrD,gBAAgB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC5D,WAAW,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,aAAa,CAAC,EAAE;IACnE,kCAAkC;IAClC,kBAAkB,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;IAClE,iBAAiB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,aAAa,CAAC,EAAE;IACnE,sBAAsB;IACtB,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACrD,WAAW,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACvD,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACrD,UAAU,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACtD,SAAS,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACrD,QAAQ,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACpD,oBAAoB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAChE,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACxD,gBAAgB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAC5D,6BAA6B;IAC7B,aAAa,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE;IACxD,cAAc,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE;IACzD,6FAA6F;IAC7F,MAAM,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE;IAChD,KAAK,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE;IAC/C,eAAe,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE;IAC1D,aAAa,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE;IACxD,uGAAuG;IACvG,eAAe,EAAE,EAAE,KAAK,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC,MAAM,CAAC,EAAE;IAC9D,4FAA4F;IAC5F,kBAAkB,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,OAAO,EAAE;IAC5D,mEAAmE;IACnE,YAAY,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,CAAC,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,CAAC,EAAE;IAC9G,mFAAmF;IACnF,MAAM,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IAClD,MAAM,EAAE,EAAE,KAAK,EAAE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE;IAChD,WAAW,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE;IACpD,OAAO,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;IACnD,2FAA2F;IAC3F,WAAW,EAAE,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,EAAE;IACtD,oGAAoG;IACpG,aAAa,EAAE,EAAE,KAAK,EAAE,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE;CACJ,CAAC;AA+BxD,MAAM,CAAC,MAAM,+BAA+B,GAA8C;IACxF,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;IACtD,QAAQ,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE;IAC9C,IAAI,EAAE,EAAE,GAAG,EAAE,MAAM,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;IAC9C,QAAQ,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE;IAC9C,kGAAkG;IAClG,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;IACpD,WAAW,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;IAC5D,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE;IAC5C,KAAK,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE;IACzC,KAAK,EAAE,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE;IACvC,WAAW,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;IACvE,YAAY,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,WAAW,CAAC,EAAE;IAChG,QAAQ,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC,EAAE;IACrD,UAAU,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE;IACjD,UAAU,EAAE,EAAE,GAAG,EAAE,YAAY,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;IAC1D,YAAY,EAAE,EAAE,GAAG,EAAE,cAAc,EAAE,EAAE,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE;IAC9D,QAAQ,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;IAC3E,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,QAAQ,EAAE,SAAS,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE;IACvE,6FAA6F;IAC7F,WAAW,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE;IACpD,MAAM,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,SAAS,CAAC,EAAE;IAC1C,KAAK,EAAE,EAAE,GAAG,EAAE,QAAQ,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IACpD,GAAG,EAAE,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IAC/C,OAAO,EAAE,EAAE,GAAG,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,SAAS,EAAE,SAAS,CAAC,EAAE;IACvD,WAAW,EAAE,EAAE,GAAG,EAAE,aAAa,EAAE,EAAE,EAAE,CAAC,QAAQ,CAAC,EAAE;CACpD,CAAC;AAEF,MAAM,CAAC,MAAM,8BAA8B,GAAqC;IAC9E,iBAAiB,EAAE,mGAAmG;IACtH,cAAc,EAAE,gGAAgG;IAChH,UAAU,EAAE,4FAA4F;IACxG,SAAS,EAAE,oLAAoL;IAC/L,WAAW,EAAE,+FAA+F;IAC5G,gBAAgB,EAAE,qGAAqG;IACvH,cAAc,EAAE,kIAAkI;IAClJ,IAAI,EAAE,0EAA0E;IAChF,MAAM,EAAE,6EAA6E;IACrF,GAAG,EAAE,2FAA2F;IAChG,IAAI,EAAE,+DAA+D;IACrE,UAAU,EAAE,2FAA2F;IACvG,SAAS,EAAE,2FAA2F;IACtG,YAAY,EAAE,2FAA2F;IACzG,MAAM,EAAE,8FAA8F;IACtG,YAAY,EAAE,8FAA8F;IAC5G,WAAW,EAAE,6GAA6G;CAC3H,CAAC;AAEF,yEAAyE;AACzE,MAAM,UAAU,oBAAoB,CAAC,GAAW;IAC9C,OAAO,MAAM,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,CAAC;AAC1E,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,uBAAuB,CAAC,MAAuC,EAAE,IAAqC,EAAE,IAAqB;IAC3I,MAAM,GAAG,GAA4B,EAAE,CAAC;IACxC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC,EAAE,CAAC;QAClD,IAAI,oBAAoB,CAAC,CAAC,CAAC,IAAK,qBAAqB,CAAC,CAAC,CAAC,CAAC,SAAwC,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC/H,CAAC;IACD,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,IAAI,IAAI,EAAE,CAAC;QAAE,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;IAC5D,OAAO,GAA0B,CAAC;AACpC,CAAC"}
@@ -0,0 +1,115 @@
1
+ import type { HangConfig, SafetyConfig, SettleConfig, TimingConfig } from "@jevitate/explore";
2
+ /**
3
+ * Per-target (per-origin) configuration — `~/.jevitate/targets.json`:
4
+ *
5
+ * ```json
6
+ * { "https://app.example.test": {
7
+ * "settle": { "ignoreRequests": ["/api/notifications/poll*", "/hub/*"], "longPollMs": 5000 },
8
+ * "hangs": { "ignoreNoProgress": ["click Refresh*", "/dashboard"] },
9
+ * "timing": { "apiPrefixes": ["/api/", "/graphql"] },
10
+ * "safety": { "deny": ["/^Archive/"], "paid": ["/^Analyze/"], "allowDestructive": false, "readRequests": ["Estimate*", "/api/search*"] } } }
11
+ * ```
12
+ *
13
+ * `settle.ignoreRequests` — requests the target marks as background (never in-flight work);
14
+ * `settle.longPollMs` — long-poll auto-detection threshold; `hangs.ignoreNoProgress` — routes,
15
+ * action labels or busy indicators where `ui-no-progress` is expected; `safety` — the shared safety
16
+ * policy (#116: `deny` controls, `allowDestructive`) and extra read requests for the write
17
+ * classifier (#110: `readRequests`, RPC-method or path globs). CLI flags (`--settle-ignore`,
18
+ * `--long-poll-ms`, `--ignore-no-progress`, `--deny`, `--allow-destructive`, `--read-rpc`) add to /
19
+ * override the file for one run. A missing file
20
+ * is "no target config"; a malformed one fails closed.
21
+ *
22
+ * `fixtures` — a mission fixtures file (#140/#144) for goal runs on this origin when `--fixtures`
23
+ * is absent; a relative path resolves against the targets file's directory.
24
+ *
25
+ * `storageState` / `secretFields` (#175) — the operator's auth for missions drained from the queue
26
+ * (`jevitate mission run`) and `verify_fix` over MCP: a storageState path (relative to this file)
27
+ * and env-sourced `--secret-field` specs. Never an MCP argument.
28
+ */
29
+ export interface TargetConfig {
30
+ readonly settle?: SettleConfig;
31
+ readonly hangs?: HangConfig;
32
+ readonly timing?: TimingConfig;
33
+ readonly safety?: SafetyConfig;
34
+ /** Mission fixtures file (#140/#144), absolute. */
35
+ readonly fixtures?: string;
36
+ /**
37
+ * Backend log sources (#142 follow-up): raw `--log-source` specs (`file:`/`docker:`/`cmd:`), used
38
+ * by missions drained from the queue (`jevitate mission run`) and by `verify_fix` over MCP — a
39
+ * caller-supplied `MissionRequest`/tool argument may NEVER name a path or a command, so a source
40
+ * is only ever declared here, by the operator, local to this machine.
41
+ */
42
+ readonly logSources?: readonly string[];
43
+ /** Raw `--log-defect` specs (a level or a `/regex/`), evaluated the same way as the CLI flag. */
44
+ readonly logDefect?: readonly string[];
45
+ /** Opt-in for a `cmd:` source in `logSources` (mirrors `--allow-log-cmd`). Default `false`. */
46
+ readonly allowLogCmd?: boolean;
47
+ /**
48
+ * #175: the session queued missions on this origin start from (a Playwright storageState JSON,
49
+ * absolute) — `jevitate mission run` and `verify_fix` over MCP apply it. Operator-declared only:
50
+ * a `queue_exploration`/MCP argument can never name one, and its contents are never logged or
51
+ * returned (the browser reads the file).
52
+ */
53
+ readonly storageState?: string;
54
+ /**
55
+ * #175: write the rotated session back after each queued mission (#82/#159 semantics: live
56
+ * capture, snapshot fallback, never a logged-out state, mode 0600) — `true` = back to
57
+ * `storageState`, or a path (absolute). For apps with rotating refresh tokens.
58
+ */
59
+ readonly saveStorageState?: true | string;
60
+ /**
61
+ * #175: `--secret-field` specs (`label=Password=env:APP_PASSWORD`) for queued goal missions on
62
+ * this origin — the value is read from the environment at run time, never written here. Also
63
+ * what the target's `fixtures` may authenticate with (`${secretField.APP_PASSWORD}`, #166).
64
+ */
65
+ readonly secretFields?: readonly string[];
66
+ /** Raw `logSources` entries declared legitimately quiet (mirrors `--log-quiet-ok`, #169). */
67
+ readonly logQuietOk?: readonly string[];
68
+ /** Raw `--log-ignore` specs (a `/regex/` or a plain substring), evaluated the same way as the CLI
69
+ * flag (#169 item 3). */
70
+ readonly logIgnore?: readonly string[];
71
+ /** Raw `--log-scope` specs (#282): only matching backend log lines are attributed to a run. */
72
+ readonly logScope?: readonly string[];
73
+ /** Extra correlation-id header names (`--log-correlation-header`, #204). */
74
+ readonly logCorrelationHeaders?: readonly string[];
75
+ /** `--log-id-pattern` specs (`/regex/`, #204): how a correlation id is written in a log line. */
76
+ readonly logIdPatterns?: readonly string[];
77
+ /**
78
+ * #247: one session per persona on this origin (an environment's origin, `--env`): each persona's
79
+ * own storageState path (relative to this file) and `env:VAR` secret-field specs. Never committed:
80
+ * the repo's `.jevitate/environments.json` refuses any session or secret key.
81
+ */
82
+ readonly personas?: Readonly<Record<string, TargetPersona>>;
83
+ }
84
+ /** A persona's session on one origin (#247). */
85
+ export interface TargetPersona {
86
+ readonly storageState?: string;
87
+ readonly secretFields?: readonly string[];
88
+ }
89
+ export declare class TargetConfigError extends Error {
90
+ readonly code: "E_TARGET_CONFIG";
91
+ }
92
+ /** Reads the whole targets file, keyed by origin. */
93
+ export declare function loadTargetsFile(path?: string): Readonly<Record<string, TargetConfig>>;
94
+ export interface TargetFlags {
95
+ readonly settleIgnore?: readonly string[];
96
+ readonly longPollMs?: number;
97
+ readonly ignoreNoProgress?: readonly string[];
98
+ readonly apiPrefixes?: readonly string[];
99
+ /** `--deny` patterns (added to the file's). */
100
+ readonly deny?: readonly string[];
101
+ /** `--paid` patterns (added to the file's `safety.paid`, #181). */
102
+ readonly paid?: readonly string[];
103
+ /** `--allow-destructive` (true wins over the file). */
104
+ readonly allowDestructive?: boolean;
105
+ /** `--allow-writes` (true wins over the file, #158). */
106
+ readonly allowWrites?: boolean;
107
+ /** `--allow-write` path globs (added to the file's `safety.allowWrites` globs, #158). */
108
+ readonly allowWrite?: readonly string[];
109
+ /** `--read-rpc` patterns (added to the file's `safety.readRequests`). */
110
+ readonly readRpc?: readonly string[];
111
+ /** `--hang-replay-writes` (#153; true wins over the file). */
112
+ readonly hangReplayWrites?: boolean;
113
+ }
114
+ /** The config for one origin: the file's entry, with flag patterns ADDED and flag numbers winning. */
115
+ export declare function resolveTargetConfig(file: Readonly<Record<string, TargetConfig>>, origin: string, flags?: TargetFlags): TargetConfig;