@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,563 @@
1
+ import { featureKeysBody } from "./key-report.js";
2
+ import { EXIT_CODES, exitCodeForEnvelope, isUsageErrorCode } from "./exit-codes.js";
3
+ export function emitEnvelope(program, envelope, opts) {
4
+ const out = program.configureOutput();
5
+ if (opts.json) {
6
+ out.writeOut?.(`${JSON.stringify(envelope)}\n`);
7
+ }
8
+ else if (envelope.ok) {
9
+ const text = opts.human === undefined ? "" : opts.human(envelope.data);
10
+ if (text !== "")
11
+ out.writeOut?.(text.endsWith("\n") ? text : `${text}\n`);
12
+ }
13
+ else {
14
+ out.writeErr?.(formatErrorHuman(envelope.error ?? { code: "E_UNKNOWN", message: "unknown error" }, opts.command));
15
+ }
16
+ process.exitCode = opts.exitCode ?? exitCodeForEnvelope(envelope);
17
+ }
18
+ /** `error E_EXPLORE_ARGS: --url is required` (+ a `--help` hint for a usage error). */
19
+ export function formatErrorHuman(error, command) {
20
+ const hint = isUsageErrorCode(error.code) ? `next: jevitate ${command ?? "<command>"} --help\n` : "";
21
+ return `error ${error.code}: ${error.message}\n${hint}`;
22
+ }
23
+ const TAG = 8;
24
+ // #213: a label at or past the column width (e.g. STILL-REPRODUCES, BASELINE) must still get a
25
+ // separator — padEnd alone is a no-op once the label reaches TAG, which glues it to the next value.
26
+ const tag = (t) => (t.length >= TAG ? `${t} ` : t.padEnd(TAG));
27
+ function isRecord(v) {
28
+ return v !== null && typeof v === "object" && !Array.isArray(v);
29
+ }
30
+ function arr(v) {
31
+ return Array.isArray(v) ? v : [];
32
+ }
33
+ function str(v) {
34
+ return typeof v === "string" && v !== "" ? v : undefined;
35
+ }
36
+ function defectLine(label, d) {
37
+ const parts = [d.fingerprint ?? "(no fingerprint)", d.kind ?? "", d.title ?? ""].filter((p) => p !== "");
38
+ return `${tag(label)}${parts.join(" ")}${d.advisory === true ? " (advisory)" : ""}`;
39
+ }
40
+ /** #250: a defect's evidence (clip, key screenshots, or why none) as indented lines. */
41
+ function evidenceLines(d) {
42
+ if (!isRecord(d) || !isRecord(d.evidence))
43
+ return [];
44
+ const e = d.evidence;
45
+ const out = [];
46
+ const mark = str(e.signal) === undefined ? "" : ` — step ${typeof e.failingStep === "number" ? e.failingStep : "?"} marked: ${str(e.signal)}`;
47
+ if (str(e.videoPath) !== undefined)
48
+ out.push(`${tag(" CLIP")}${str(e.videoPath)}${mark}${e.reproduced === false ? " (did not fire on this replay)" : ""}`);
49
+ for (const sh of arr(e.screenshots))
50
+ if (str(sh) !== undefined)
51
+ out.push(`${tag(" SHOT")}${str(sh)}`);
52
+ if (str(e.skipped) !== undefined)
53
+ out.push(`${tag(" NO CLIP")}${str(e.skipped)}`);
54
+ for (const c of arr(e.captureSkips))
55
+ if (str(c) !== undefined)
56
+ out.push(`${tag(" SKIPPED")}${str(c)}`);
57
+ return out;
58
+ }
59
+ /** #251: the run's `--screenshots` (count, index, refused captures). */
60
+ function screenshotLines(r) {
61
+ const index = str(r.screenshotIndex);
62
+ if (index === undefined)
63
+ return [];
64
+ const skipped = arr(r.screenshotsSkipped).filter(isRecord);
65
+ return [
66
+ `${tag("SHOTS")}${arr(r.screenshotPaths).length} screenshot(s) — ${index}`,
67
+ ...skipped.map((k) => `${tag(" SKIPPED")}step ${typeof k.step === "number" ? k.step : "?"}: ${str(k.reason) ?? ""}`),
68
+ ];
69
+ }
70
+ /**
71
+ * A mission result (any strategy) as a human summary: the verdict, the defects and hangs by
72
+ * fingerprint, why a broken run proved nothing, where the result file is, and what to run next.
73
+ */
74
+ export function formatMissionHuman(result) {
75
+ if (!isRecord(result))
76
+ return "";
77
+ const lines = [];
78
+ const outcome = str(result.missionOutcome) ?? str(result.outcome) ?? "unknown";
79
+ const strategy = str(result.strategy) ?? "explore";
80
+ const target = isRecord(result.target) ? str(result.target.seedUrl) : undefined;
81
+ const defects = arr(result.defects).filter(isRecord);
82
+ const hangs = arr(result.hangs).filter(isRecord);
83
+ const gating = defects.filter((d) => d.advisory !== true);
84
+ const counts = [`${gating.length} defect(s)`, `${hangs.length} hang(s)`];
85
+ const advisory = defects.length - gating.length;
86
+ if (advisory > 0)
87
+ counts.push(`${advisory} advisory`);
88
+ const goal = str(result.goalOutcome);
89
+ // #227: `failed`/`exhausted`/`blocked` fold onto the canonical `defects-found`, but the mission's
90
+ // own defects/hangs arrays are typically empty for these (the goal's own check failed, not a
91
+ // discovered defect) — a "DEFECTS-FOUND … 0 defect(s)" headline self-contradicts. Lead with the
92
+ // goal's own verdict and why instead; missionOutcome/goalOutcome stay canonical in --json (#217).
93
+ const selfContradicting = goal === "failed" || goal === "exhausted" || goal === "blocked";
94
+ if (selfContradicting) {
95
+ const detail = goalFailureDetail(result);
96
+ lines.push(`${goal.toUpperCase()}: ${strategy}${target === undefined ? "" : ` ${target}`}${detail === undefined ? "" : ` (${detail})`}`);
97
+ }
98
+ else {
99
+ lines.push(`${outcome.toUpperCase()}: ${strategy}${target === undefined ? "" : ` ${target}`} · ${counts.join(" · ")}`);
100
+ }
101
+ // #217: the headline is always the canonical verdict; a goal run's own ending (and the stop that
102
+ // ended its loop) follows it — never in its place.
103
+ const own = str(result.outcome);
104
+ if (goal !== undefined) {
105
+ const stop = str(result.stop);
106
+ lines.push(`${tag("GOAL")}${goal}${stop === undefined ? "" : ` (stop: ${stop})`}`);
107
+ }
108
+ else if (own !== undefined && own !== outcome)
109
+ lines.push(`${tag("OUTCOME")}${own}`);
110
+ const scope = scopeLine(result.scope);
111
+ if (scope !== undefined)
112
+ lines.push(`${tag("SCOPE")}${scope}`);
113
+ // #293: where a journey-anchored run branched off its Journey.
114
+ if (isRecord(result.branch) && str(result.branch.journeyId) !== undefined) {
115
+ const b = result.branch;
116
+ lines.push(`${tag("BRANCH")}journey ${str(b.journeyId)} after step ${String(b.step)}${str(b.anchor) === undefined ? "" : ` (anchor ${str(b.anchor)})`}`);
117
+ }
118
+ // #213: the --storage-state session was not honoured (the run started on a sign-in page).
119
+ if (isRecord(result.sessionLost) && str(result.sessionLost.reason) !== undefined)
120
+ lines.push(`${tag("WARNING")}${str(result.sessionLost.reason)}`);
121
+ for (const d of defects)
122
+ lines.push(defectLine("DEFECT", d), ...evidenceLines(d));
123
+ for (const h of hangs)
124
+ lines.push(defectLine("HANG", { ...h, kind: "hang" }));
125
+ if (isRecord(result.failure)) {
126
+ lines.push(`${tag("REASON")}${str(result.failure.kind) ?? "failure"}: ${str(result.failure.message) ?? ""}`);
127
+ }
128
+ else if (str(result.reason) !== undefined) {
129
+ lines.push(`${tag("REASON")}${str(result.reason)}`);
130
+ }
131
+ for (const l of uxLines(result))
132
+ lines.push(l);
133
+ lines.push(...deltaLines(result));
134
+ const answer = answerLine(result.answer);
135
+ if (answer !== undefined)
136
+ lines.push(`${tag("ANSWER")}${answer}`);
137
+ // #245: the run's --record-video files.
138
+ for (const v of arr(result.videoPaths))
139
+ if (str(v) !== undefined)
140
+ lines.push(`${tag("VIDEO")}${str(v)}`);
141
+ lines.push(...screenshotLines(result));
142
+ const resultPath = str(result.resultPath);
143
+ if (resultPath !== undefined)
144
+ lines.push(`${tag("RESULT")}${resultPath}`);
145
+ const firstFp = [...gating, ...hangs].find((d) => d.fingerprint !== undefined)?.fingerprint;
146
+ lines.push(nextHint(firstFp, resultPath));
147
+ return `${lines.join("\n")}\n`;
148
+ }
149
+ /** Most per-step delta lines the human output shows (the latest ones; `--json` has every step). */
150
+ const HUMAN_DELTA_STEPS = 8;
151
+ /**
152
+ * #303 (`--action-deltas`): what each action changed — one short line per step that carries a delta
153
+ * (the latest few), after a verdict count. Nothing at all when the run recorded none.
154
+ */
155
+ function deltaLines(result) {
156
+ const steps = arr(result.transcript)
157
+ .filter(isRecord)
158
+ .filter((e) => isRecord(e.delta));
159
+ if (steps.length === 0)
160
+ return [];
161
+ const verdicts = new Map();
162
+ for (const e of steps) {
163
+ const v = str(e.delta.verdict) ?? "?";
164
+ verdicts.set(v, (verdicts.get(v) ?? 0) + 1);
165
+ }
166
+ const out = [`${tag("DELTAS")}${steps.length} action(s): ${[...verdicts].map(([v, n]) => `${n} ${v}`).join(", ")}`];
167
+ for (const e of steps.slice(-HUMAN_DELTA_STEPS)) {
168
+ const d = e.delta;
169
+ const first = arr(d.changes).filter(isRecord).map((c) => str(c.text)).find((t) => t !== undefined);
170
+ const what = first ?? arr(d.announcements).map(str).find((t) => t !== undefined) ?? str(d.why) ?? "";
171
+ const line = `step ${typeof e.step === "number" ? e.step : "?"} ${str(d.action) ?? ""}: ${str(d.verdict) ?? "?"}${what === "" ? "" : ` — ${what}`}`;
172
+ out.push(`${tag("DELTA")}${line.length > 160 ? `${line.slice(0, 159)}…` : line}`);
173
+ }
174
+ return out;
175
+ }
176
+ /**
177
+ * #224: the route scope a run used — its globs, and where they came from when the result says
178
+ * (`--route`, or derived from the start URL).
179
+ */
180
+ function scopeLine(scope) {
181
+ if (!isRecord(scope))
182
+ return undefined;
183
+ const globs = arr(scope.routeGlobs).filter((g) => typeof g === "string");
184
+ if (globs.length === 0)
185
+ return undefined;
186
+ const source = scope.source === "route" ? " (--route)" : scope.source === "start-url" ? " (derived from the start URL; pass --route to change it)" : "";
187
+ return `${globs.join(", ")}${source}`;
188
+ }
189
+ /**
190
+ * #213: a usability run's UX findings in its summary — how many, the appendix and suppressed counts,
191
+ * and the top few (severity, rubric item, route, observation) — or why there are none (analysis
192
+ * unavailable). Nothing for other strategies.
193
+ */
194
+ function uxLines(result) {
195
+ if (result.strategy !== "usability")
196
+ return [];
197
+ const report = result.report;
198
+ if (!isRecord(report)) {
199
+ const why = str(result.analysisUnavailable);
200
+ return [`${tag("UX")}no UX findings: ${why === undefined ? "the review produced no report" : `analysis unavailable (${why})`}`];
201
+ }
202
+ const findings = arr(report.findings).filter(isRecord);
203
+ const appendix = arr(report.heuristicAppendix).length;
204
+ const suppressed = isRecord(report.suppressed) && typeof report.suppressed.total === "number" ? report.suppressed.total : 0;
205
+ const extra = [appendix > 0 ? `${appendix} heuristic-only in the appendix` : "", suppressed > 0 ? `${suppressed} suppressed` : ""].filter((x) => x !== "");
206
+ const lines = [`${tag("UX")}${findings.length} UX finding(s)${extra.length === 0 ? "" : ` (${extra.join(", ")})`}${str(result.reportPath) === undefined ? "" : ` — report: ${str(result.reportPath)}`}`];
207
+ const TOP = 3;
208
+ for (const f of findings.slice(0, TOP)) {
209
+ const obs = str(f.observation) ?? "";
210
+ // #198: a verified claim names its claim type (and its boxed screenshot) instead of the rubric id.
211
+ const claim = isRecord(f.claim) ? str(f.claim.type) : undefined;
212
+ const shot = isRecord(f.screenshot) ? str(f.screenshot.path) : undefined;
213
+ lines.push(`${tag("")}- [${str(f.severity) ?? "?"}] ${claim ?? str(f.rubricItemId) ?? "?"} ${str(f.route) ?? ""}: ${obs.length > 100 ? `${obs.slice(0, 99)}…` : obs}${shot === undefined ? "" : ` (screenshot: ${shot})`}`);
214
+ }
215
+ if (findings.length > TOP)
216
+ lines.push(`${tag("")} … and ${findings.length - TOP} more in the report`);
217
+ return lines;
218
+ }
219
+ /**
220
+ * #216: a find-out's answer is `{ text, evidence }` — its text plus where it came from (the page's
221
+ * text or a form field's value, and the page), from the grounded evidence.
222
+ */
223
+ function answerLine(answer) {
224
+ if (!isRecord(answer))
225
+ return str(answer);
226
+ const text = str(answer.text);
227
+ if (text === undefined)
228
+ return undefined;
229
+ const sources = [];
230
+ for (const e of arr(answer.evidence).filter(isRecord)) {
231
+ const control = str(e.control);
232
+ const where = e.source === "control-value" ? (control === undefined ? "a form field" : `form field "${control}"`) : "page text";
233
+ const path = str(e.url)?.replace(/^[a-z][a-z0-9+.-]*:\/\/[^/?#]*/i, "");
234
+ const source = path === undefined ? where : `${where} on ${path === "" ? "/" : path}`;
235
+ if (!sources.includes(source))
236
+ sources.push(source);
237
+ }
238
+ return sources.length === 0 ? text : `${text} (from ${sources.join("; ")})`;
239
+ }
240
+ /** Why a goal's own check failed/gave up/ran out of budget: its `failure` detail, else `reason`. */
241
+ function goalFailureDetail(result) {
242
+ if (isRecord(result.failure)) {
243
+ return str(result.failure.message) ?? str(result.failure.kind);
244
+ }
245
+ return str(result.reason);
246
+ }
247
+ function nextHint(fingerprint, resultPath) {
248
+ if (fingerprint !== undefined && resultPath !== undefined) {
249
+ return `next: jevitate verify-fix ${fingerprint} --result ${resultPath} (after a fix) · jevitate ledger add ${resultPath} ${fingerprint} · jevitate report`;
250
+ }
251
+ return "next: jevitate report";
252
+ }
253
+ /** A verdict with a goal run's own ending beside it: `clean (goal: succeeded)`. */
254
+ function verdictText(v) {
255
+ const outcome = str(v.missionOutcome) ?? str(v.outcome) ?? "unknown";
256
+ const goal = str(v.goalOutcome);
257
+ return goal === undefined || goal === outcome ? outcome : `${outcome} (goal: ${goal})`;
258
+ }
259
+ /**
260
+ * `explore --repeat/--persona`'s aggregate (multi-run) result (#226: the #217 contract): the canonical
261
+ * verdict as the headline (a goal's own ending beside it, never in its place), why it is what it is,
262
+ * each persona's verdict and each run's with its reason, the persona diff's status differences, the
263
+ * agreed and flaky findings, and the find-out answer(s).
264
+ */
265
+ export function formatMultiRunHuman(result) {
266
+ if (!isRecord(result))
267
+ return "";
268
+ const findings = arr(result.findings).filter(isRecord);
269
+ const flaky = arr(result.flaky).filter(isRecord);
270
+ const cells = arr(result.cells).filter(isRecord);
271
+ const personas = cells.filter((c) => str(c.persona) !== undefined);
272
+ const outcome = str(result.missionOutcome) ?? str(result.outcome) ?? "unknown";
273
+ const base = `${str(result.strategy) ?? "explore"} ×${String(result.repeat ?? "?")}${personas.length > 0 ? ` · ${personas.length} personas` : ""}`;
274
+ const goal = str(result.goalOutcome);
275
+ // #230: the same #227 rule, here for the multi-run aggregate — a failed/exhausted/blocked goal
276
+ // every run agreed on folds onto the canonical defects-found, but the agreed findings are
277
+ // typically empty for these (every run's OWN check failed, not a discovered defect); a
278
+ // "DEFECTS-FOUND … 0 agreed finding(s)" headline self-contradicts. Lead with the goal's own
279
+ // verdict instead; missionOutcome/goalOutcome stay canonical in --json.
280
+ const selfContradicting = goal === "failed" || goal === "exhausted" || goal === "blocked";
281
+ const lines = [selfContradicting ? `${goal.toUpperCase()}: ${base}` : `${outcome.toUpperCase()}: ${base} · ${findings.length} agreed finding(s) · ${flaky.length} flaky`];
282
+ if (goal !== undefined)
283
+ lines.push(`${tag("GOAL")}${goal}`);
284
+ // #220: why the multi-run is inconclusive (interrupted, runs pending, or a run broke).
285
+ const reason = str(result.reason);
286
+ if (reason !== undefined)
287
+ lines.push(`${tag("REASON")}${reason}`);
288
+ for (const c of personas) {
289
+ lines.push(`${tag("PERSONA")}${str(c.persona)} ${verdictText(c)}`);
290
+ // #213: a persona whose session was lost did not test as that persona — said, never silent.
291
+ const lost = str(c.sessionLost);
292
+ if (lost !== undefined)
293
+ lines.push(`${tag("WARNING")}${str(c.persona)}: session lost — ${lost}`);
294
+ }
295
+ const answers = [];
296
+ for (const c of cells) {
297
+ const persona = str(c.persona);
298
+ for (const r of arr(c.runs).filter(isRecord)) {
299
+ const label = `${persona === undefined ? "" : `${persona} `}run ${String(r.index ?? "?")}`;
300
+ const why = str(r.reason);
301
+ lines.push(`${tag("RUN")}${label} ${verdictText(r)}${why === undefined ? "" : ` ${why}`}`);
302
+ const answer = answerLine(r.answer);
303
+ if (answer !== undefined)
304
+ answers.push({ label, text: answer });
305
+ }
306
+ }
307
+ const diff = isRecord(result.diff) ? result.diff : undefined;
308
+ const rbac = new Set(arr(diff?.rbacCandidates).filter(isRecord).map((c) => str(c.request)));
309
+ for (const d of arr(diff?.statusDiffs).filter(isRecord)) {
310
+ const request = str(d.request) ?? "";
311
+ const statuses = isRecord(d.statuses) ? Object.entries(d.statuses) : [];
312
+ const text = statuses.map(([p, ss]) => `${arr(ss).map(String).join("/")} for ${p}`).join("; ");
313
+ lines.push(`${tag("DIFF")}${request}: ${text} (advisory${rbac.has(request) ? ": RBAC candidate" : ""})`);
314
+ }
315
+ // #213: a persona whose runs never observed the app is not compared — never read as an access difference.
316
+ for (const n of arr(diff?.notCompared).filter(isRecord)) {
317
+ lines.push(`${tag("DIFF")}${str(n.persona) ?? "?"}: not compared — its runs never observed the app (${str(n.reason) ?? "environment"})`);
318
+ }
319
+ for (const f of findings) {
320
+ lines.push(`${tag("FINDING")}${[str(f.fingerprint) ?? "(no fingerprint)", str(f.kind) ?? "", str(f.stability) ?? "", str(f.title) ?? ""].filter((p) => p !== "").join(" ")}`);
321
+ }
322
+ for (const f of flaky) {
323
+ lines.push(`${tag("FLAKY")}${[str(f.fingerprint) ?? "(no fingerprint)", str(f.kind) ?? "", str(f.stability) ?? "", str(f.title) ?? ""].filter((p) => p !== "").join(" ")}`);
324
+ }
325
+ // #216/#226: the find-out answer — once when every run found the same one, else per run.
326
+ const distinct = new Set(answers.map((a) => a.text));
327
+ if (personas.length === 0 && distinct.size === 1)
328
+ lines.push(`${tag("ANSWER")}${answers[0].text}`);
329
+ else
330
+ for (const a of answers)
331
+ lines.push(`${tag("ANSWER")}${a.label}: ${a.text}`);
332
+ const resultPath = str(result.resultPath);
333
+ if (resultPath !== undefined)
334
+ lines.push(`${tag("RESULT")}${resultPath}`);
335
+ lines.push("next: jevitate report");
336
+ return `${lines.join("\n")}\n`;
337
+ }
338
+ /**
339
+ * `verify-fix`: the verdict, why, and what to do about it.
340
+ * #230: `opts.result` is the `--result` the user passed (not the ledger fallback's own path) — a
341
+ * re-check hint must carry it too, or (with no ledger entry for this fingerprint at that path) the
342
+ * follow-up `verify-fix` fails to find the repro material.
343
+ */
344
+ export function formatVerifyFixHuman(report, opts = {}) {
345
+ if (!isRecord(report))
346
+ return "";
347
+ const verdict = str(report.verdict) ?? "unknown";
348
+ const fp = str(report.fingerprint) ?? "";
349
+ const lines = [`${verdict.toUpperCase()}: ${fp}${str(report.title) === undefined ? "" : ` ${str(report.title)}`}`];
350
+ const reason = str(report.reason);
351
+ if (reason !== undefined)
352
+ lines.push(`${tag("REASON")}${reason}`);
353
+ const attempts = arr(report.attempts).filter(isRecord);
354
+ if (attempts.length > 0) {
355
+ const fired = attempts.filter((a) => a.fired === true).length;
356
+ lines.push(`${tag("REPLAYS")}${attempts.length} fresh replay(s), signal fired in ${fired}`);
357
+ }
358
+ // #245: the replays' --record-video files.
359
+ for (const v of arr(report.videoPaths))
360
+ if (str(v) !== undefined)
361
+ lines.push(`${tag("VIDEO")}${str(v)}`);
362
+ // #250: the before/after pair for the PR.
363
+ if (isRecord(report.evidence)) {
364
+ const ev = report.evidence;
365
+ const before = isRecord(ev.before) ? str(ev.before.videoPath) : undefined;
366
+ lines.push(`${tag("BEFORE")}${before ?? str(ev.beforeMissing) ?? "no clip"}`);
367
+ const after = isRecord(ev.after) ? ev.after : undefined;
368
+ lines.push(`${tag("AFTER")}${str(after?.videoPath) ?? str(after?.skipped) ?? "no clip"}`);
369
+ for (const sh of arr(after?.screenshots))
370
+ if (str(sh) !== undefined)
371
+ lines.push(`${tag(" SHOT")}${str(sh)}`);
372
+ for (const c of arr(after?.captureSkips))
373
+ if (str(c) !== undefined)
374
+ lines.push(`${tag(" SKIPPED")}${str(c)}`);
375
+ }
376
+ lines.push(...screenshotLines(report));
377
+ const resultFlag = opts.result === undefined ? "" : ` --result ${opts.result}`;
378
+ lines.push(verdict === "fixed"
379
+ ? "next: jevitate report"
380
+ : verdict === "still-reproduces"
381
+ ? `next: fix it, then jevitate verify-fix ${fp}${resultFlag}`
382
+ : `next: jevitate verify-fix ${fp}${resultFlag} --replays 5 (re-check)`);
383
+ return `${lines.join("\n")}\n`;
384
+ }
385
+ /** `ledger list`. #230: `opts.dir` is the `--dir` the user passed — the follow-up hints must carry it too. */
386
+ export function formatLedgerListHuman(listed, opts = {}) {
387
+ const data = { entries: listed.entries };
388
+ const dirFlag = opts.dir === undefined ? "" : ` --dir ${opts.dir}`;
389
+ if (data.entries.length === 0)
390
+ return `0 ledger entries\nnext: jevitate ledger add <result.json> <fingerprint>${dirFlag}\n`;
391
+ const lines = [`${data.entries.length} ledger entr${data.entries.length === 1 ? "y" : "ies"}`];
392
+ for (const e of data.entries) {
393
+ const parts = [str(e.fingerprint) ?? "", str(e.kind) ?? "", str(e.ticket) === undefined ? "" : `[${str(e.ticket)}]`, str(e.title) ?? ""];
394
+ lines.push(`${tag("ENTRY")}${parts.filter((p) => p !== "").join(" ")}`);
395
+ }
396
+ lines.push(`next: jevitate ledger verify${dirFlag}`);
397
+ return `${lines.join("\n")}\n`;
398
+ }
399
+ /**
400
+ * `ledger add`. #230: `opts.dir` is the `--dir` the user passed. `verify-fix`'s equivalent flag is
401
+ * named `--regressions-dir` (same directory, a ledger's own `--dir`), so the hint uses that name.
402
+ */
403
+ export function formatLedgerAddHuman(added, opts = {}) {
404
+ const data = added;
405
+ const fp = str(data.fingerprint) ?? "";
406
+ const parts = [fp, str(data.kind) ?? "", str(data.ticket) === undefined ? "" : `[${str(data.ticket)}]`, str(data.title) ?? ""];
407
+ const regressionsDirFlag = opts.dir === undefined ? "" : ` --regressions-dir ${opts.dir}`;
408
+ const dirFlag = opts.dir === undefined ? "" : ` --dir ${opts.dir}`;
409
+ return [
410
+ `${data.updated === true ? "UPDATED" : "ADDED"}: ${parts.filter((p) => p !== "").join(" ")}`,
411
+ `${tag("ENTRY")}${str(data.entryPath) ?? ""}`,
412
+ `next: jevitate verify-fix ${fp}${regressionsDirFlag} (re-check from the ledger) · jevitate ledger verify${dirFlag}`,
413
+ "",
414
+ ].join("\n");
415
+ }
416
+ /** `ledger verify`. #230: `opts.dir` is the `--dir` the user passed (see `formatLedgerAddHuman`). */
417
+ export function formatLedgerVerifyHuman(verified, opts = {}) {
418
+ const data = verified;
419
+ const entries = arr(data.entries).filter(isRecord);
420
+ const dirFlag = opts.dir === undefined ? "" : ` --dir ${opts.dir}`;
421
+ // #227: nothing chosen (an empty ledger, or fingerprints/ticket matching nothing) verified
422
+ // nothing — never "FIXED: 0 entries" (a false pass at a glance).
423
+ if (entries.length === 0)
424
+ return `NOTHING VERIFIED: the ledger has no matching entries\nnext: jevitate ledger add <result.json> <fingerprint>${dirFlag}\n`;
425
+ const summary = isRecord(data.summary) ? data.summary : {};
426
+ const counts = Object.entries(summary)
427
+ .filter(([, n]) => typeof n === "number" && n > 0)
428
+ .map(([k, n]) => `${String(n)} ${k}`);
429
+ const code = typeof data.exitCode === "number" ? data.exitCode : EXIT_CODES.inconclusive;
430
+ const lines = [`${code === EXIT_CODES.ok ? "FIXED" : "NOT FIXED"}: ${entries.length} entr${entries.length === 1 ? "y" : "ies"} · ${counts.join(" · ") || "nothing to verify"}`];
431
+ for (const e of entries) {
432
+ const parts = [str(e.fingerprint) ?? "", str(e.ticket) === undefined ? "" : `[${str(e.ticket)}]`, str(e.title) ?? "", str(e.reason) ?? ""];
433
+ lines.push(`${tag((str(e.verdict) ?? "unknown").toUpperCase())}${parts.filter((p) => p !== "").join(" ")}`);
434
+ }
435
+ const open = entries.find((e) => e.verdict === "still-reproduces")?.fingerprint;
436
+ const regressionsDirFlag = opts.dir === undefined ? "" : ` --regressions-dir ${opts.dir}`;
437
+ lines.push(typeof open === "string" ? `next: fix it, then jevitate verify-fix ${open}${regressionsDirFlag}` : "next: jevitate report");
438
+ return `${lines.join("\n")}\n`;
439
+ }
440
+ /**
441
+ * `init`'s key report: per feature, which keys are configured — never "collected: []", which read
442
+ * as "keys missing" when every key was already set (#210). Collection either stores every missing
443
+ * key or fails closed, so after it every required key is configured. Names only, never a value.
444
+ */
445
+ export function formatInitKeysHuman(keys) {
446
+ return Object.entries(keys)
447
+ .map(([feature, { required, collected, missing, sources, verification, warnings }]) => {
448
+ const named = (k) => {
449
+ const s = sources?.find((x) => x.key === k);
450
+ return s === undefined ? k : `${k} (${s.provider})`;
451
+ };
452
+ // #230: the non-interactive path (no TTY on stdin) never prompts — report what's still
453
+ // missing and how to configure it, the same command name as the E_AI_SETUP_REQUIRED refusals.
454
+ if (missing !== undefined && missing.length > 0) {
455
+ return `keys: ${feature} not configured — set ${missing.map(named).join(", ")} or run \`jevitate ai setup ${feature}\``;
456
+ }
457
+ if (sources === undefined) {
458
+ const detail = collected.length > 0 ? `collected ${collected.join(", ")} now` : "already configured";
459
+ return `keys: ${feature} ready — ${required.length}/${required.length} configured (${detail})`;
460
+ }
461
+ // #268: name each key, its provider and where it comes from (never a value); #291: its live check.
462
+ const body = featureKeysBody(feature, sources, verification);
463
+ const detail = collected.length > 0 ? ` (entered now: ${collected.join(", ")})` : "";
464
+ return [`keys: ${feature} ${body}${detail}`, ...(warnings ?? []).map((w) => `keys: warning: ${w}`)].join("\n");
465
+ })
466
+ .join("\n");
467
+ }
468
+ /** The regression id a committed `<id>.recording.json` path names. */
469
+ function idFromRecordingPath(p) {
470
+ const base = p.split(/[\\/]/).pop();
471
+ return base?.endsWith(".recording.json") ? base.slice(0, -".recording.json".length) : undefined;
472
+ }
473
+ /**
474
+ * `regression capture` (#227): a committed regression, or a failure too flaky to commit — never the
475
+ * raw envelope. #230: `opts.dir` is the `--dir` the user passed — the `regression run` hint must
476
+ * carry it too, or (a non-default regressions dir, e.g. the README demo's `--dir demo-regressions`)
477
+ * the follow-up looks in the default dir and refuses E_REGRESSION_NOT_FOUND.
478
+ */
479
+ export function formatRegressionCaptureHuman(result, opts = {}) {
480
+ if (!isRecord(result))
481
+ return "";
482
+ if (result.skipped === "flaky") {
483
+ const rate = typeof result.rate === "number" ? result.rate : undefined;
484
+ const lines = [
485
+ `FLAKY: the failure did not reproduce reliably enough to commit${rate === undefined ? "" : ` (reproduced ${Math.round(rate * 100)}% of attempts)`}`,
486
+ "next: capture again, or pin a more reliable step with --fingerprint",
487
+ ];
488
+ return `${lines.join("\n")}\n`;
489
+ }
490
+ const recordingPath = str(result.recordingPath);
491
+ const metaPath = str(result.metaPath);
492
+ const id = recordingPath === undefined ? undefined : idFromRecordingPath(recordingPath);
493
+ const lines = [`CAPTURED: ${recordingPath ?? "(no recording path)"}`];
494
+ if (metaPath !== undefined)
495
+ lines.push(`${tag("META")}${metaPath}`);
496
+ const dirFlag = opts.dir === undefined ? "" : ` --dir ${opts.dir}`;
497
+ lines.push(id === undefined ? "next: jevitate regression run <id>" : `next: jevitate regression run ${id}${dirFlag}`);
498
+ return `${lines.join("\n")}\n`;
499
+ }
500
+ /**
501
+ * `regression run` (#227): the verdict, why, and what to do about it — matches `verify-fix`'s shape.
502
+ * #230: `opts.dir` is the `--dir` the user passed — the re-check hints must carry it too.
503
+ */
504
+ export function formatRegressionRunHuman(report, opts = {}) {
505
+ if (!isRecord(report))
506
+ return "";
507
+ const id = str(report.id) ?? "";
508
+ const verdict = str(report.verdict) ?? "unknown";
509
+ const reason = str(report.reason);
510
+ const lines = [`${verdict.toUpperCase()}: ${id}`];
511
+ if (reason !== undefined)
512
+ lines.push(`${tag("REASON")}${reason}`);
513
+ const dirFlag = opts.dir === undefined ? "" : ` --dir ${opts.dir}`;
514
+ lines.push(verdict === "fixed"
515
+ ? "next: jevitate report"
516
+ : verdict === "reproduces"
517
+ ? `next: fix it, then jevitate regression run ${id}${dirFlag}`
518
+ : `next: jevitate regression run ${id}${dirFlag} (re-check)`);
519
+ return `${lines.join("\n")}\n`;
520
+ }
521
+ /** `baseline tag` (#227). */
522
+ export function formatBaselineTagHuman(data) {
523
+ if (!isRecord(data))
524
+ return "";
525
+ const name = str(data.name) ?? "";
526
+ const path = str(data.path);
527
+ const runs = arr(data.runs).filter(isRecord);
528
+ const lines = [`TAGGED: ${name} · ${runs.length} run(s)`];
529
+ if (path !== undefined)
530
+ lines.push(`${tag("PATH")}${path}`);
531
+ for (const r of runs) {
532
+ lines.push(`${tag("RUN")}${[str(r.runId) ?? "", str(r.mode) ?? "", str(r.target) ?? "", str(r.missionOutcome) ?? ""].filter((p) => p !== "").join(" ")}`);
533
+ }
534
+ lines.push(`next: jevitate report --baseline ${name} · jevitate check --baseline ${name}`);
535
+ return `${lines.join("\n")}\n`;
536
+ }
537
+ /** `baseline list` (#227): every tag, or a next step when there are none yet. */
538
+ export function formatBaselineListHuman(data) {
539
+ const list = arr(data).filter(isRecord);
540
+ if (list.length === 0)
541
+ return "no baselines yet — tag one with `jevitate baseline tag <name> <runs...>`\n";
542
+ const lines = [`${list.length} baseline(s)`];
543
+ for (const b of list) {
544
+ lines.push(`${tag("BASELINE")}${[str(b.name) ?? "", str(b.createdAt) ?? "", `${String(b.runs ?? 0)} run(s)`].filter((p) => p !== "").join(" ")}`);
545
+ }
546
+ lines.push("next: jevitate baseline show <name>");
547
+ return `${lines.join("\n")}\n`;
548
+ }
549
+ /** `baseline show` (#227). */
550
+ export function formatBaselineShowHuman(data) {
551
+ if (!isRecord(data))
552
+ return "";
553
+ const name = str(data.name) ?? "";
554
+ const createdAt = str(data.createdAt);
555
+ const runs = arr(data.runs).filter(isRecord);
556
+ const lines = [`${name}${createdAt === undefined ? "" : ` (tagged ${createdAt})`} · ${runs.length} run(s)`];
557
+ for (const r of runs) {
558
+ lines.push(`${tag("RUN")}${[str(r.runId) ?? "", str(r.mode) ?? "", str(r.target) ?? "", str(r.missionOutcome) ?? ""].filter((p) => p !== "").join(" ")}`);
559
+ }
560
+ lines.push(`next: jevitate report --baseline ${name}`);
561
+ return `${lines.join("\n")}\n`;
562
+ }
563
+ //# sourceMappingURL=cli-output.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli-output.js","sourceRoot":"","sources":["../src/cli-output.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ import type { Command } from "commander";
2
+ /** Renders the full CLI reference markdown from a live commander tree. Deterministic: no versions, dates or absolute paths. */
3
+ export declare function renderCliReference(program: Command): string;