@jevitate/cli 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (375) hide show
  1. package/README.md +23 -0
  2. package/dist/ai-cli.js +40 -30
  3. package/dist/ai-cli.js.map +1 -1
  4. package/dist/author-journey-cli.d.ts +4 -0
  5. package/dist/author-journey-cli.js +109 -0
  6. package/dist/author-journey-cli.js.map +1 -0
  7. package/dist/bin.js +58077 -22454
  8. package/dist/bin.js.map +1 -1
  9. package/dist/browser-run-options.d.ts +58 -0
  10. package/dist/browser-run-options.js +106 -0
  11. package/dist/browser-run-options.js.map +1 -0
  12. package/dist/build-info.generated.d.ts +2 -0
  13. package/dist/build-info.generated.js +10 -0
  14. package/dist/build-info.generated.js.map +1 -0
  15. package/dist/check-api.d.ts +5 -0
  16. package/dist/check-api.js +233 -0
  17. package/dist/check-api.js.map +1 -0
  18. package/dist/check-budget.d.ts +26 -0
  19. package/dist/check-budget.js +89 -0
  20. package/dist/check-budget.js.map +1 -0
  21. package/dist/check-cli.d.ts +31 -0
  22. package/dist/check-cli.js +109 -0
  23. package/dist/check-cli.js.map +1 -0
  24. package/dist/check-execute.d.ts +25 -0
  25. package/dist/check-execute.js +385 -0
  26. package/dist/check-execute.js.map +1 -0
  27. package/dist/check-plan.d.ts +113 -0
  28. package/dist/check-plan.js +448 -0
  29. package/dist/check-plan.js.map +1 -0
  30. package/dist/check-suite.d.ts +171 -0
  31. package/dist/check-suite.js +515 -0
  32. package/dist/check-suite.js.map +1 -0
  33. package/dist/check-types.d.ts +181 -0
  34. package/dist/check-types.js +35 -0
  35. package/dist/check-types.js.map +1 -0
  36. package/dist/cli-args.d.ts +26 -0
  37. package/dist/cli-args.js +50 -0
  38. package/dist/cli-args.js.map +1 -0
  39. package/dist/cli-output.d.ts +102 -0
  40. package/dist/cli-output.js +516 -0
  41. package/dist/cli-output.js.map +1 -0
  42. package/dist/cli-reference.d.ts +3 -0
  43. package/dist/cli-reference.js +81 -0
  44. package/dist/cli-reference.js.map +1 -0
  45. package/dist/cli-refusal.d.ts +12 -0
  46. package/dist/cli-refusal.js +52 -0
  47. package/dist/cli-refusal.js.map +1 -0
  48. package/dist/cli-shared.d.ts +330 -0
  49. package/dist/cli-shared.js +492 -0
  50. package/dist/cli-shared.js.map +1 -0
  51. package/dist/cli-surface.d.ts +33 -0
  52. package/dist/cli-surface.js +48 -0
  53. package/dist/cli-surface.js.map +1 -0
  54. package/dist/conversation-options.d.ts +15 -0
  55. package/dist/conversation-options.js +10 -0
  56. package/dist/conversation-options.js.map +1 -0
  57. package/dist/credentials-file.d.ts +15 -0
  58. package/dist/credentials-file.js +56 -0
  59. package/dist/credentials-file.js.map +1 -0
  60. package/dist/data-dir.d.ts +1 -1
  61. package/dist/data-dir.js +1 -1
  62. package/dist/defect-evidence.d.ts +141 -0
  63. package/dist/defect-evidence.js +502 -0
  64. package/dist/defect-evidence.js.map +1 -0
  65. package/dist/demo-aspect-api.d.ts +209 -0
  66. package/dist/demo-aspect-api.js +397 -0
  67. package/dist/demo-aspect-api.js.map +1 -0
  68. package/dist/demo-aspect-cli.d.ts +3 -0
  69. package/dist/demo-aspect-cli.js +241 -0
  70. package/dist/demo-aspect-cli.js.map +1 -0
  71. package/dist/demo-capture.d.ts +108 -0
  72. package/dist/demo-capture.js +438 -0
  73. package/dist/demo-capture.js.map +1 -0
  74. package/dist/engine.d.ts +35 -0
  75. package/dist/engine.js +25 -0
  76. package/dist/engine.js.map +1 -0
  77. package/dist/environments.d.ts +155 -0
  78. package/dist/environments.js +364 -0
  79. package/dist/environments.js.map +1 -0
  80. package/dist/exit-codes.d.ts +46 -0
  81. package/dist/exit-codes.js +91 -0
  82. package/dist/exit-codes.js.map +1 -0
  83. package/dist/explore-adversarial.d.ts +137 -0
  84. package/dist/explore-adversarial.js +218 -0
  85. package/dist/explore-adversarial.js.map +1 -0
  86. package/dist/explore-api.d.ts +7 -187
  87. package/dist/explore-api.js +7 -301
  88. package/dist/explore-api.js.map +1 -1
  89. package/dist/explore-author.d.ts +79 -0
  90. package/dist/explore-author.js +86 -0
  91. package/dist/explore-author.js.map +1 -0
  92. package/dist/explore-cli.d.ts +7 -0
  93. package/dist/explore-cli.js +963 -0
  94. package/dist/explore-cli.js.map +1 -0
  95. package/dist/explore-coverage.d.ts +158 -0
  96. package/dist/explore-coverage.js +240 -0
  97. package/dist/explore-coverage.js.map +1 -0
  98. package/dist/explore-feature.d.ts +127 -0
  99. package/dist/explore-feature.js +220 -0
  100. package/dist/explore-feature.js.map +1 -0
  101. package/dist/explore-goal.d.ts +253 -0
  102. package/dist/explore-goal.js +374 -0
  103. package/dist/explore-goal.js.map +1 -0
  104. package/dist/explore-shared.d.ts +152 -0
  105. package/dist/explore-shared.js +129 -0
  106. package/dist/explore-shared.js.map +1 -0
  107. package/dist/explore-specs.d.ts +53 -0
  108. package/dist/explore-specs.js +333 -0
  109. package/dist/explore-specs.js.map +1 -0
  110. package/dist/findings-filing.d.ts +64 -0
  111. package/dist/findings-filing.js +108 -0
  112. package/dist/findings-filing.js.map +1 -0
  113. package/dist/fixture-auth.d.ts +52 -0
  114. package/dist/fixture-auth.js +82 -0
  115. package/dist/fixture-auth.js.map +1 -0
  116. package/dist/fixture-cli.d.ts +70 -0
  117. package/dist/fixture-cli.js +178 -0
  118. package/dist/fixture-cli.js.map +1 -0
  119. package/dist/github-issue-filer.d.ts +62 -0
  120. package/dist/github-issue-filer.js +188 -0
  121. package/dist/github-issue-filer.js.map +1 -0
  122. package/dist/host-health-run.d.ts +24 -0
  123. package/dist/host-health-run.js +27 -0
  124. package/dist/host-health-run.js.map +1 -0
  125. package/dist/http-5xx-outcome.d.ts +6 -0
  126. package/dist/http-5xx-outcome.js +39 -0
  127. package/dist/http-5xx-outcome.js.map +1 -0
  128. package/dist/inbox-cli.d.ts +7 -0
  129. package/dist/inbox-cli.js +197 -0
  130. package/dist/inbox-cli.js.map +1 -0
  131. package/dist/index.d.ts +1 -0
  132. package/dist/index.js +1 -0
  133. package/dist/index.js.map +1 -1
  134. package/dist/init-cli.d.ts +4 -0
  135. package/dist/init-cli.js +127 -0
  136. package/dist/init-cli.js.map +1 -0
  137. package/dist/init-keys.d.ts +19 -2
  138. package/dist/init-keys.js +15 -4
  139. package/dist/init-keys.js.map +1 -1
  140. package/dist/init-next-steps.d.ts +35 -0
  141. package/dist/init-next-steps.js +79 -0
  142. package/dist/init-next-steps.js.map +1 -0
  143. package/dist/invariants-file.d.ts +34 -0
  144. package/dist/invariants-file.js +68 -0
  145. package/dist/invariants-file.js.map +1 -0
  146. package/dist/invariants-validate.d.ts +30 -0
  147. package/dist/invariants-validate.js +105 -0
  148. package/dist/invariants-validate.js.map +1 -0
  149. package/dist/journey-annotate-api.d.ts +76 -0
  150. package/dist/journey-annotate-api.js +256 -0
  151. package/dist/journey-annotate-api.js.map +1 -0
  152. package/dist/journey-annotate-cli.d.ts +9 -0
  153. package/dist/journey-annotate-cli.js +179 -0
  154. package/dist/journey-annotate-cli.js.map +1 -0
  155. package/dist/journey-api.d.ts +79 -2
  156. package/dist/journey-api.js +136 -19
  157. package/dist/journey-api.js.map +1 -1
  158. package/dist/journey-cli.d.ts +4 -0
  159. package/dist/journey-cli.js +370 -0
  160. package/dist/journey-cli.js.map +1 -0
  161. package/dist/journey-demo-api.d.ts +112 -0
  162. package/dist/journey-demo-api.js +392 -0
  163. package/dist/journey-demo-api.js.map +1 -0
  164. package/dist/journey-demo-cli.d.ts +10 -0
  165. package/dist/journey-demo-cli.js +155 -0
  166. package/dist/journey-demo-cli.js.map +1 -0
  167. package/dist/kill-signal.d.ts +193 -0
  168. package/dist/kill-signal.js +284 -0
  169. package/dist/kill-signal.js.map +1 -0
  170. package/dist/launch-armed.d.ts +37 -0
  171. package/dist/launch-armed.js +31 -0
  172. package/dist/launch-armed.js.map +1 -0
  173. package/dist/ledger-api.d.ts +106 -0
  174. package/dist/ledger-api.js +237 -0
  175. package/dist/ledger-api.js.map +1 -0
  176. package/dist/ledger-cli.d.ts +18 -0
  177. package/dist/ledger-cli.js +107 -0
  178. package/dist/ledger-cli.js.map +1 -0
  179. package/dist/load-api.d.ts +29 -11
  180. package/dist/load-api.js +23 -15
  181. package/dist/load-api.js.map +1 -1
  182. package/dist/load-cli.d.ts +4 -0
  183. package/dist/load-cli.js +97 -0
  184. package/dist/load-cli.js.map +1 -0
  185. package/dist/log-correlation.d.ts +147 -0
  186. package/dist/log-correlation.js +325 -0
  187. package/dist/log-correlation.js.map +1 -0
  188. package/dist/log-lines.d.ts +131 -0
  189. package/dist/log-lines.js +389 -0
  190. package/dist/log-lines.js.map +1 -0
  191. package/dist/log-sources.d.ts +71 -0
  192. package/dist/log-sources.js +235 -0
  193. package/dist/log-sources.js.map +1 -0
  194. package/dist/logs-cli.d.ts +3 -0
  195. package/dist/logs-cli.js +51 -0
  196. package/dist/logs-cli.js.map +1 -0
  197. package/dist/logs-retention.d.ts +28 -0
  198. package/dist/logs-retention.js +84 -0
  199. package/dist/logs-retention.js.map +1 -0
  200. package/dist/mcp-api.d.ts +89 -1
  201. package/dist/mcp-api.js +472 -18
  202. package/dist/mcp-api.js.map +1 -1
  203. package/dist/mcp-args.d.ts +38 -0
  204. package/dist/mcp-args.js +131 -0
  205. package/dist/mcp-args.js.map +1 -0
  206. package/dist/mcp-cli-bridge.d.ts +34 -0
  207. package/dist/mcp-cli-bridge.js +62 -0
  208. package/dist/mcp-cli-bridge.js.map +1 -0
  209. package/dist/mcp-cli-runner.d.ts +29 -0
  210. package/dist/mcp-cli-runner.js +44 -0
  211. package/dist/mcp-cli-runner.js.map +1 -0
  212. package/dist/mcp-cli-tools.d.ts +125 -0
  213. package/dist/mcp-cli-tools.js +680 -0
  214. package/dist/mcp-cli-tools.js.map +1 -0
  215. package/dist/mcp-paths.d.ts +28 -0
  216. package/dist/mcp-paths.js +76 -0
  217. package/dist/mcp-paths.js.map +1 -0
  218. package/dist/mission-actors.d.ts +40 -0
  219. package/dist/mission-actors.js +72 -0
  220. package/dist/mission-actors.js.map +1 -0
  221. package/dist/mission-api.d.ts +35 -0
  222. package/dist/mission-api.js +58 -2
  223. package/dist/mission-api.js.map +1 -1
  224. package/dist/mission-cli.d.ts +4 -0
  225. package/dist/mission-cli.js +247 -0
  226. package/dist/mission-cli.js.map +1 -0
  227. package/dist/mission-exit.d.ts +22 -0
  228. package/dist/mission-exit.js +26 -0
  229. package/dist/mission-exit.js.map +1 -0
  230. package/dist/mission-fixtures.d.ts +225 -0
  231. package/dist/mission-fixtures.js +828 -0
  232. package/dist/mission-fixtures.js.map +1 -0
  233. package/dist/mission-journal.d.ts +60 -0
  234. package/dist/mission-journal.js +115 -0
  235. package/dist/mission-journal.js.map +1 -0
  236. package/dist/mission-queue-cli.d.ts +10 -0
  237. package/dist/mission-queue-cli.js +198 -0
  238. package/dist/mission-queue-cli.js.map +1 -0
  239. package/dist/mission-queue-runner.d.ts +126 -0
  240. package/dist/mission-queue-runner.js +397 -0
  241. package/dist/mission-queue-runner.js.map +1 -0
  242. package/dist/multi-run-cli.d.ts +37 -0
  243. package/dist/multi-run-cli.js +110 -0
  244. package/dist/multi-run-cli.js.map +1 -0
  245. package/dist/multi-run.d.ts +339 -0
  246. package/dist/multi-run.js +619 -0
  247. package/dist/multi-run.js.map +1 -0
  248. package/dist/openrouter-call.d.ts +22 -0
  249. package/dist/openrouter-call.js +63 -0
  250. package/dist/openrouter-call.js.map +1 -0
  251. package/dist/profile-cli.d.ts +4 -0
  252. package/dist/profile-cli.js +57 -0
  253. package/dist/profile-cli.js.map +1 -0
  254. package/dist/program.d.ts +3 -75
  255. package/dist/program.js +119 -1921
  256. package/dist/program.js.map +1 -1
  257. package/dist/project-dir.d.ts +96 -0
  258. package/dist/project-dir.js +220 -0
  259. package/dist/project-dir.js.map +1 -0
  260. package/dist/record-api.d.ts +10 -6
  261. package/dist/record-api.js +39 -28
  262. package/dist/record-api.js.map +1 -1
  263. package/dist/record-cli.d.ts +4 -0
  264. package/dist/record-cli.js +64 -0
  265. package/dist/record-cli.js.map +1 -0
  266. package/dist/recording-cli.d.ts +4 -0
  267. package/dist/recording-cli.js +248 -0
  268. package/dist/recording-cli.js.map +1 -0
  269. package/dist/regression-api.d.ts +101 -0
  270. package/dist/regression-api.js +384 -5
  271. package/dist/regression-api.js.map +1 -1
  272. package/dist/regression-cli.d.ts +4 -0
  273. package/dist/regression-cli.js +232 -0
  274. package/dist/regression-cli.js.map +1 -0
  275. package/dist/report-api.d.ts +146 -0
  276. package/dist/report-api.js +430 -0
  277. package/dist/report-api.js.map +1 -0
  278. package/dist/report-cli.d.ts +12 -0
  279. package/dist/report-cli.js +147 -0
  280. package/dist/report-cli.js.map +1 -0
  281. package/dist/result-schema.d.ts +22 -0
  282. package/dist/result-schema.js +28 -0
  283. package/dist/result-schema.js.map +1 -0
  284. package/dist/run-index.d.ts +29 -0
  285. package/dist/run-index.js +70 -0
  286. package/dist/run-index.js.map +1 -0
  287. package/dist/run-screenshots.d.ts +123 -0
  288. package/dist/run-screenshots.js +229 -0
  289. package/dist/run-screenshots.js.map +1 -0
  290. package/dist/runtime-env.d.ts +8 -0
  291. package/dist/runtime-env.js +22 -0
  292. package/dist/runtime-env.js.map +1 -0
  293. package/dist/secret-args.d.ts +23 -0
  294. package/dist/secret-args.js +45 -0
  295. package/dist/secret-args.js.map +1 -0
  296. package/dist/serve-cli.d.ts +4 -0
  297. package/dist/serve-cli.js +95 -0
  298. package/dist/serve-cli.js.map +1 -0
  299. package/dist/server-log-verify.d.ts +34 -0
  300. package/dist/server-log-verify.js +115 -0
  301. package/dist/server-log-verify.js.map +1 -0
  302. package/dist/session-check.d.ts +14 -0
  303. package/dist/session-check.js +44 -0
  304. package/dist/session-check.js.map +1 -0
  305. package/dist/site-cli.d.ts +4 -0
  306. package/dist/site-cli.js +127 -0
  307. package/dist/site-cli.js.map +1 -0
  308. package/dist/site-gate-cli.d.ts +28 -0
  309. package/dist/site-gate-cli.js +58 -0
  310. package/dist/site-gate-cli.js.map +1 -0
  311. package/dist/source-api.js +18 -3
  312. package/dist/source-api.js.map +1 -1
  313. package/dist/source-cli.d.ts +4 -0
  314. package/dist/source-cli.js +284 -0
  315. package/dist/source-cli.js.map +1 -0
  316. package/dist/source-run-api.d.ts +27 -1
  317. package/dist/source-run-api.js +22 -11
  318. package/dist/source-run-api.js.map +1 -1
  319. package/dist/storage-state-snapshot.d.ts +50 -0
  320. package/dist/storage-state-snapshot.js +87 -0
  321. package/dist/storage-state-snapshot.js.map +1 -0
  322. package/dist/suite-explore-options.d.ts +289 -0
  323. package/dist/suite-explore-options.js +140 -0
  324. package/dist/suite-explore-options.js.map +1 -0
  325. package/dist/target-config.d.ts +109 -0
  326. package/dist/target-config.js +216 -0
  327. package/dist/target-config.js.map +1 -0
  328. package/dist/transcript-file.d.ts +12 -0
  329. package/dist/transcript-file.js +23 -0
  330. package/dist/transcript-file.js.map +1 -0
  331. package/dist/ui-api.d.ts +3 -0
  332. package/dist/ui-api.js +7 -1
  333. package/dist/ui-api.js.map +1 -1
  334. package/dist/usability-capture.d.ts +43 -0
  335. package/dist/usability-capture.js +326 -0
  336. package/dist/usability-capture.js.map +1 -0
  337. package/dist/usage-config.d.ts +36 -0
  338. package/dist/usage-config.js +114 -0
  339. package/dist/usage-config.js.map +1 -0
  340. package/dist/ux-api.d.ts +3 -75
  341. package/dist/ux-api.js +3 -220
  342. package/dist/ux-api.js.map +1 -1
  343. package/dist/ux-cli.d.ts +4 -0
  344. package/dist/ux-cli.js +102 -0
  345. package/dist/ux-cli.js.map +1 -0
  346. package/dist/ux-config.d.ts +29 -0
  347. package/dist/ux-config.js +103 -0
  348. package/dist/ux-config.js.map +1 -0
  349. package/dist/ux-evidence.d.ts +54 -0
  350. package/dist/ux-evidence.js +197 -0
  351. package/dist/ux-evidence.js.map +1 -0
  352. package/dist/ux-review.d.ts +112 -0
  353. package/dist/ux-review.js +151 -0
  354. package/dist/ux-review.js.map +1 -0
  355. package/dist/ux-usability.d.ts +238 -0
  356. package/dist/ux-usability.js +494 -0
  357. package/dist/ux-usability.js.map +1 -0
  358. package/dist/verify-fix-api.d.ts +173 -0
  359. package/dist/verify-fix-api.js +454 -0
  360. package/dist/verify-fix-api.js.map +1 -0
  361. package/dist/verify-fix-cli.d.ts +4 -0
  362. package/dist/verify-fix-cli.js +110 -0
  363. package/dist/verify-fix-cli.js.map +1 -0
  364. package/package.json +19 -14
  365. package/skills/jevitate-ci-check/SKILL.md +77 -0
  366. package/skills/jevitate-demo/SKILL.md +61 -0
  367. package/skills/jevitate-explore/SKILL.md +88 -87
  368. package/skills/jevitate-getting-started/SKILL.md +88 -0
  369. package/skills/jevitate-load-test/SKILL.md +11 -2
  370. package/skills/jevitate-mission-scope/SKILL.md +19 -11
  371. package/skills/jevitate-record/SKILL.md +23 -5
  372. package/skills/jevitate-run-journey/SKILL.md +61 -17
  373. package/skills/jevitate-sources/SKILL.md +57 -14
  374. package/skills/jevitate-ux-review/SKILL.md +106 -16
  375. package/skills/jevitate-verify-fix/SKILL.md +76 -0
package/README.md ADDED
@@ -0,0 +1,23 @@
1
+ # @jevitate/cli
2
+
3
+ **Autonomous browser testing that turns discovered bugs into deterministic regression tests.**
4
+
5
+ Jevitate explores your web app in a real browser, tries to break it, and reports only what the
6
+ browser can prove: HTTP 5xx responses, uncaught exceptions, hangs, failed success checks, broken
7
+ rules you declare. Every finding comes with a Recording that reproduces it. Jevitate replays it to
8
+ confirm a fix and commits it as a regression you can run in CI. A model may suggest what to try.
9
+ It never decides whether your software passed.
10
+
11
+ ```bash
12
+ npm install -g @jevitate/cli
13
+ npx playwright install chromium
14
+
15
+ # No API keys needed: the adversarial mission plans its misuse in code.
16
+ jevitate explore --strategy adversarial --url http://localhost:3000/settings --fake-ai
17
+ ```
18
+
19
+ - Documentation, demo and source: https://github.com/matt-cochran/jevitate
20
+ - Website: https://jevitate.com
21
+ - Changelog: https://github.com/matt-cochran/jevitate/blob/main/CHANGELOG.md
22
+
23
+ MIT licensed.
package/dist/ai-cli.js CHANGED
@@ -1,6 +1,10 @@
1
- import { envCredentialStore, FEATURE_KEYS, requireKeys, MissingCredentialError, collectMissingKeys, FakeGenerationGateway, OpenRouterGenerationGateway, GEN_TASKS, } from "@jevitate/ai-core";
1
+ import { envCredentialStore, ALL_CREDENTIAL_KEYS, FEATURE_KEYS, requireKeys, MissingCredentialError, collectMissingKeys, envAliasesFor, FakeGenerationGateway, OpenRouterGenerationGateway, GEN_TASKS, UsageTracker, } from "@jevitate/ai-core";
2
2
  import { ok, fail } from "./envelope.js";
3
3
  import { resolveDataDir } from "./data-dir.js";
4
+ import { loadLocalCredentials } from "./credentials-file.js";
5
+ import { realOpenRouterCall } from "./openrouter-call.js";
6
+ import { resolveUsagePricing } from "./usage-config.js";
7
+ import { emitJsonOrRefusal } from "./cli-refusal.js";
4
8
  const DEFAULT_CATALOG = [
5
9
  { id: "openai/gpt-4o-mini", promptUsdPer1k: 0.15, completionUsdPer1k: 0.6, regions: [], latencyClass: "fast", capabilities: [] },
6
10
  ];
@@ -61,39 +65,36 @@ export function realSecureIO() {
61
65
  const path = resolveDataDir(["credentials.json"]);
62
66
  await mkdir(dirname(path), { recursive: true });
63
67
  let existing = {};
68
+ let raw;
64
69
  try {
65
- existing = JSON.parse(await readFile(path, "utf8"));
70
+ raw = await readFile(path, "utf8");
66
71
  }
67
- catch {
68
- // no existing file yet — start fresh
72
+ catch (err) {
73
+ // Only a MISSING file starts fresh; any other read failure fails closed.
74
+ const missing = typeof err === "object" && err !== null && "code" in err && err.code === "ENOENT";
75
+ if (!missing)
76
+ throw err;
77
+ }
78
+ if (raw !== undefined) {
79
+ // Never silently overwrite a file we cannot parse — that would drop the
80
+ // other stored key. Fail closed with an actionable message instead.
81
+ try {
82
+ existing = JSON.parse(raw);
83
+ }
84
+ catch {
85
+ throw new Error(`${path} is not valid JSON — fix or delete it, then re-run setup`);
86
+ }
69
87
  }
70
88
  existing[key] = value;
71
89
  await writeFile(path, JSON.stringify(existing, null, 2), { mode: 0o600 });
72
90
  },
73
91
  };
74
92
  }
75
- /** Lazily imports `ai` + `@openrouter/ai-sdk-provider` so the CLI builds and
76
- * runs `--json`/fake paths without either package resolvable. The key is
77
- * placed ONLY in the `Authorization` header, never in `body`/`prompt`. */
78
- async function realOpenRouterCall() {
79
- const { generateObject } = await import("ai");
80
- const { createOpenRouter } = await import("@openrouter/ai-sdk-provider");
81
- return async ({ model, schema, body, authHeader }) => {
82
- const openrouter = createOpenRouter({ headers: { Authorization: authHeader } });
83
- const start = Date.now();
84
- const { object } = await generateObject({
85
- model: openrouter(model),
86
- schema,
87
- prompt: JSON.stringify(body),
88
- });
89
- return { object, latencyMs: Date.now() - start };
90
- };
91
- }
92
93
  function buildStore(ai) {
93
- return envCredentialStore(ai?.env ?? process.env, ai?.localConfig ?? {});
94
+ return envCredentialStore(ai?.env ?? process.env, ai?.localConfig ?? loadLocalCredentials());
94
95
  }
95
96
  export function registerAiCommands(program, deps) {
96
- const ai = program.command("ai");
97
+ const ai = program.command("ai").description("check or configure the model gateway credentials jevitate's AI features need");
97
98
  ai.command("status")
98
99
  .option("--json", "emit a JSON envelope")
99
100
  .action(function () {
@@ -111,9 +112,16 @@ export function registerAiCommands(program, deps) {
111
112
  }
112
113
  else {
113
114
  const out = program.configureOutput().writeOut;
115
+ // `withAliasHint`: e.g. "TYPESAFE_API_KEY (or TYPESAFE_JEV_API_KEY)" — an accepted env
116
+ // alias (issue #83) is worth surfacing here since this is exactly where a user decides
117
+ // what to set; unchanged for a key with no alias.
118
+ const withAliasHint = (k) => {
119
+ const aliases = envAliasesFor(k);
120
+ return aliases.length === 0 ? k : `${k} (or ${aliases.join(", ")})`;
121
+ };
114
122
  for (const feature of FEATURES) {
115
123
  const { missing } = data[feature];
116
- out?.(`${feature}: ${missing.length === 0 ? "ready" : `missing ${missing.join(", ")}`}\n`);
124
+ out?.(`${feature}: ${missing.length === 0 ? "ready" : `missing ${missing.map(withAliasHint).join(", ")}`}\n`);
117
125
  }
118
126
  process.exitCode = 0;
119
127
  }
@@ -165,6 +173,8 @@ export function registerAiCommands(program, deps) {
165
173
  const store = buildStore(deps.ai);
166
174
  try {
167
175
  let gateway;
176
+ // #163: a live call's usage and cost ride on the result (the fake/injected paths make none).
177
+ let usage;
168
178
  if (deps.ai?.gateway) {
169
179
  gateway = deps.ai.gateway;
170
180
  }
@@ -174,7 +184,7 @@ export function registerAiCommands(program, deps) {
174
184
  store,
175
185
  catalog: deps.ai?.catalog ?? DEFAULT_CATALOG,
176
186
  constraints: deps.ai?.constraints ?? DEFAULT_CONSTRAINTS,
177
- call: await realOpenRouterCall(),
187
+ call: await realOpenRouterCall((usage = new UsageTracker(resolveUsagePricing(deps.ai?.env ?? process.env)))),
178
188
  });
179
189
  }
180
190
  else if (fake) {
@@ -191,7 +201,8 @@ export function registerAiCommands(program, deps) {
191
201
  : "no gateway selected and no OPENROUTER_API_KEY configured — run `ai setup generation` then pass --real, or pass --fake to explicitly use the deterministic fake gateway"));
192
202
  return;
193
203
  }
194
- const result = await gateway.generate(task, parsedInput);
204
+ const generated = await gateway.generate(task, parsedInput);
205
+ const result = usage === undefined ? generated : { ...generated, usage: usage.snapshot() };
195
206
  const envelope = ok(result);
196
207
  if (json) {
197
208
  emitJsonLine(program, envelope);
@@ -223,16 +234,15 @@ export function registerAiCommands(program, deps) {
223
234
  * JSON envelope itself never carries provider error text at all. */
224
235
  function redactCredentials(message, store) {
225
236
  let out = message;
226
- for (const key of ["OPENROUTER_API_KEY", "TYPESAFE_API_KEY"]) {
237
+ for (const key of ALL_CREDENTIAL_KEYS) {
227
238
  const value = store.read(key);
228
239
  if (value)
229
240
  out = out.split(value).join("***REDACTED***");
230
241
  }
231
242
  return out;
232
243
  }
244
+ /** The envelope (success, or a refusal with --json); a refusal without --json is a human stderr line (#218). */
233
245
  function emitJsonLine(program, envelope) {
234
- const writeOut = program.configureOutput().writeOut;
235
- writeOut?.(`${JSON.stringify(envelope)}\n`);
236
- process.exitCode = envelope.ok ? 0 : 1;
246
+ emitJsonOrRefusal(program, envelope);
237
247
  }
238
248
  //# sourceMappingURL=ai-cli.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"ai-cli.js","sourceRoot":"","sources":["../src/ai-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"ai-cli.js","sourceRoot":"","sources":["../src/ai-cli.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,mBAAmB,EACnB,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,aAAa,EACb,qBAAqB,EACrB,2BAA2B,EAC3B,SAAS,EACT,YAAY,GAQb,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAE,EAAE,EAAE,IAAI,EAAqB,MAAM,eAAe,CAAC;AAE5D,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,kBAAkB,EAAE,MAAM,sBAAsB,CAAC;AAC1D,OAAO,EAAE,mBAAmB,EAAE,MAAM,mBAAmB,CAAC;AACxD,OAAO,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AAiBrD,MAAM,eAAe,GAAmB;IACtC,EAAE,EAAE,EAAE,oBAAoB,EAAE,cAAc,EAAE,IAAI,EAAE,kBAAkB,EAAE,GAAG,EAAE,OAAO,EAAE,EAAE,EAAE,YAAY,EAAE,MAAM,EAAE,YAAY,EAAE,EAAE,EAAE;CACjI,CAAC;AACF,MAAM,mBAAmB,GAAqB,EAAE,oBAAoB,EAAE,EAAE,EAAE,CAAC;AAE3E,MAAM,QAAQ,GAAc,CAAC,YAAY,EAAE,UAAU,CAAC,CAAC;AAEvD;;;;;;GAMG;AACH,MAAM,UAAU,iBAAiB,CAAC,MAA6B;IAK7D,IAAI,KAAK,GAAG,KAAK,CAAC;IAClB,OAAO;QACL,KAAK,EAAE,CAAC,KAAa,EAAE,EAAE;YACvB,IAAI,CAAC,KAAK;gBAAE,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QACD,IAAI,EAAE,GAAG,EAAE;YACT,KAAK,GAAG,IAAI,CAAC;QACf,CAAC;QACD,MAAM,EAAE,GAAG,EAAE;YACX,KAAK,GAAG,KAAK,CAAC;QAChB,CAAC;KACF,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,KAAK,CAAC,YAAY,CAAC,OAAe;YAChC,MAAM,QAAQ,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAC;YAC/C,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,EAAE;gBACrC,MAAM,EAAE,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,KAAK,EAAE,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;gBACtG,MAAM,IAAI,GAAG,iBAAiB,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;gBAC/C,kEAAkE;gBAClE,gEAAgE;gBAChE,+DAA+D;gBAC/D,oEAAoE;gBACpE,gEAAgE;gBAChE,oEAAoE;gBACpE,+DAA+D;gBAC/D,mDAAmD;gBAClD,EAA6D,CAAC,cAAc,GAAG,CAAC,KAAa,EAAE,EAAE,CAChG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;gBACpB,IAAI,CAAC,KAAK,CAAC,GAAG,OAAO,GAAG,CAAC,CAAC;gBAC1B,IAAI,CAAC,IAAI,EAAE,CAAC;gBACZ,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,MAAM,EAAE,EAAE;oBACzB,IAAI,CAAC,MAAM,EAAE,CAAC;oBACd,EAAE,CAAC,KAAK,EAAE,CAAC;oBACX,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;oBAC3B,OAAO,CAAC,MAAM,CAAC,CAAC;gBAClB,CAAC,CAAC,CAAC;YACL,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,OAAO,CAAC,GAAkB,EAAE,KAAa;YAC7C,MAAM,EAAE,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAC;YACxE,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAC;YAC9C,sEAAsE;YACtE,MAAM,IAAI,GAAG,cAAc,CAAC,CAAC,kBAAkB,CAAC,CAAC,CAAC;YAClD,MAAM,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAChD,IAAI,QAAQ,GAA2B,EAAE,CAAC;YAC1C,IAAI,GAAuB,CAAC;YAC5B,IAAI,CAAC;gBACH,GAAG,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;YACrC,CAAC;YAAC,OAAO,GAAG,EAAE,CAAC;gBACb,yEAAyE;gBACzE,MAAM,OAAO,GAAG,OAAO,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,MAAM,IAAI,GAAG,IAAI,GAAG,CAAC,IAAI,KAAK,QAAQ,CAAC;gBAClG,IAAI,CAAC,OAAO;oBAAE,MAAM,GAAG,CAAC;YAC1B,CAAC;YACD,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;gBACtB,wEAAwE;gBACxE,oEAAoE;gBACpE,IAAI,CAAC;oBACH,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;gBAC7B,CAAC;gBAAC,MAAM,CAAC;oBACP,MAAM,IAAI,KAAK,CAAC,GAAG,IAAI,0DAA0D,CAAC,CAAC;gBACrF,CAAC;YACH,CAAC;YACD,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;YACtB,MAAM,SAAS,CAAC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5E,CAAC;KACF,CAAC;AACJ,CAAC;AAED,SAAS,UAAU,CAAC,EAAyB;IAC3C,OAAO,kBAAkB,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,WAAW,IAAI,oBAAoB,EAAE,CAAC,CAAC;AAC/F,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,OAAgB,EAAE,IAAa;IAChE,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,WAAW,CAAC,8EAA8E,CAAC,CAAC;IAE7H,EAAE,CAAC,OAAO,CAAC,QAAQ,CAAC;SACjB,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC;QACN,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAsB,CAAC;QACjD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,MAAM,IAAI,GACR,EAA8E,CAAC;QACjF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,CAAC,GAAG,YAAY,CAAC,OAAO,CAAC,CAAC,CAAC;YAC5C,MAAM,OAAO,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;YACzD,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC;QACxC,CAAC;QACD,MAAM,QAAQ,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;QAC1B,IAAI,IAAI,EAAE,CAAC;YACT,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAClC,CAAC;aAAM,CAAC;YACN,MAAM,GAAG,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,CAAC;YAC/C,uFAAuF;YACvF,uFAAuF;YACvF,kDAAkD;YAClD,MAAM,aAAa,GAAG,CAAC,CAAgB,EAAE,EAAE;gBACzC,MAAM,OAAO,GAAG,aAAa,CAAC,CAAC,CAAC,CAAC;gBACjC,OAAO,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACtE,CAAC,CAAC;YACF,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,MAAM,EAAE,OAAO,EAAE,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClC,GAAG,EAAE,CAAC,GAAG,OAAO,KAAK,OAAO,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,WAAW,OAAO,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;YAChH,CAAC;YACD,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;QACvB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;SAC1B,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,KAAK,WAA0B,OAAe;QACpD,MAAM,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAsB,CAAC;QACjD,IAAI,OAAO,KAAK,YAAY,IAAI,OAAO,KAAK,UAAU,EAAE,CAAC;YACvD,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,mBAAmB,EAAE,oBAAoB,OAAO,yCAAyC,CAAC,CAAC,CAAC;YACvH,OAAO;QACT,CAAC;QACD,IAAI,CAAC;YACH,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YAClC,MAAM,EAAE,GAAG,IAAI,CAAC,EAAE,EAAE,QAAQ,IAAI,YAAY,EAAE,CAAC;YAC/C,MAAM,SAAS,GAAG,MAAM,kBAAkB,CAAC,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/D,MAAM,QAAQ,GAAG,EAAE,CAAC,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;YAC5C,IAAI,IAAI,EAAE,CAAC;gBACT,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC,cAAc,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,mBAAmB,IAAI,CAAC,CAAC;gBACpG,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,YAAY,EAAE,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;QAC9F,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,EAAE,CAAC,OAAO,CAAC,iBAAiB,CAAC;SAC1B,cAAc,CAAC,gBAAgB,EAAE,6BAA6B,CAAC;SAC/D,MAAM,CAAC,QAAQ,EAAE,+DAA+D,EAAE,KAAK,CAAC;SACxF,MAAM,CAAC,QAAQ,EAAE,sEAAsE,EAAE,KAAK,CAAC;SAC/F,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,KAAK,WAA0B,IAAY;QACjD,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,IAAI,CAAC,IAAI,EAAqE,CAAC;QACnH,IAAI,CAAC,CAAC,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;YACzB,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,4BAA4B,IAAI,GAAG,CAAC,CAAC,CAAC;YACnF,OAAO;QACT,CAAC;QACD,IAAI,WAAoB,CAAC;QACzB,IAAI,CAAC;YACH,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;QAClC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjG,OAAO;QACT,CAAC;QACD,MAAM,KAAK,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAClC,IAAI,CAAC;YACH,IAAI,OAAuB,CAAC;YAC5B,6FAA6F;YAC7F,IAAI,KAA+B,CAAC;YACpC,IAAI,IAAI,CAAC,EAAE,EAAE,OAAO,EAAE,CAAC;gBACrB,OAAO,GAAG,IAAI,CAAC,EAAE,CAAC,OAAO,CAAC;YAC5B,CAAC;iBAAM,IAAI,IAAI,EAAE,CAAC;gBAChB,WAAW,CAAC,YAAY,EAAE,KAAK,CAAC,CAAC,CAAC,gCAAgC;gBAClE,OAAO,GAAG,IAAI,2BAA2B,CAAC;oBACxC,KAAK;oBACL,OAAO,EAAE,IAAI,CAAC,EAAE,EAAE,OAAO,IAAI,eAAe;oBAC5C,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,WAAW,IAAI,mBAAmB;oBACxD,IAAI,EAAE,MAAM,kBAAkB,CAAC,CAAC,KAAK,GAAG,IAAI,YAAY,CAAC,mBAAmB,CAAC,IAAI,CAAC,EAAE,EAAE,GAAG,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;iBAC7G,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,IAAI,EAAE,CAAC;gBAChB,OAAO,GAAG,IAAI,qBAAqB,EAAE,CAAC;YACxC,CAAC;iBAAM,CAAC;gBACN,6DAA6D;gBAC7D,kEAAkE;gBAClE,mEAAmE;gBACnE,oEAAoE;gBACpE,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,oBAAoB,CAAC,CAAC;gBAClD,YAAY,CACV,OAAO,EACP,IAAI,CACF,qBAAqB,EACrB,MAAM;oBACJ,CAAC,CAAC,wIAAwI;oBAC1I,CAAC,CAAC,wKAAwK,CAC7K,CACF,CAAC;gBACF,OAAO;YACT,CAAC;YACD,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,QAAQ,CAAC,IAAmB,EAAE,WAAoB,CAAC,CAAC;YACpF,MAAM,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,GAAG,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,EAAE,CAAC;YAC3F,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,IAAI,EAAE,CAAC;gBACT,YAAY,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;YAClC,CAAC;iBAAM,CAAC;gBACN,OAAO,CAAC,eAAe,EAAE,CAAC,QAAQ,EAAE,CAAC,GAAG,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;gBACpE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YACvB,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,sBAAsB,EAAE,CAAC;gBAC1C,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,sBAAsB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACnE,CAAC;iBAAM,CAAC;gBACN,6DAA6D;gBAC7D,kEAAkE;gBAClE,4DAA4D;gBAC5D,kEAAkE;gBAClE,+DAA+D;gBAC/D,MAAM,GAAG,GAAG,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;gBAC7D,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,2CAA2C,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;gBACnG,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,+CAA+C,CAAC,CAAC,CAAC;YAChG,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC;AAED;;qEAEqE;AACrE,SAAS,iBAAiB,CAAC,OAAe,EAAE,KAAqD;IAC/F,IAAI,GAAG,GAAG,OAAO,CAAC;IAClB,KAAK,MAAM,GAAG,IAAI,mBAAmB,EAAE,CAAC;QACtC,MAAM,KAAK,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;QAC9B,IAAI,KAAK;YAAE,GAAG,GAAG,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC;IAC3D,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,gHAAgH;AAChH,SAAS,YAAY,CAAC,OAAgB,EAAE,QAA+B;IACrE,iBAAiB,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;AACvC,CAAC"}
@@ -0,0 +1,4 @@
1
+ import { Command } from "commander";
2
+ import { type CliDeps } from "./cli-shared.js";
3
+ /** Registers `jevitate explore-author-journey` (Jev authors an unpromoted, parameterized Journey). */
4
+ export declare function registerAuthorJourneyCommands(program: Command, deps: CliDeps): void;
@@ -0,0 +1,109 @@
1
+ import { existsSync } from "node:fs";
2
+ import { MissingCredentialError } from "@jevitate/ai-core";
3
+ import { UnauthorizedExploreTargetError } from "@jevitate/explore";
4
+ import { ok, fail } from "./envelope.js";
5
+ import { positiveIntArg } from "./cli-args.js";
6
+ import { runAuthorJourney, parseAssertionSpec, resolveExploreAllowlist } from "./explore-api.js";
7
+ import { resolveJourneysDir, withBrowserLaunchFlags, browserLaunchFromFlags, emitJson, writeRawResult, GatewaySelectionError, buildExploreGateways, } from "./cli-shared.js";
8
+ /** Registers `jevitate explore-author-journey` (Jev authors an unpromoted, parameterized Journey). */
9
+ export function registerAuthorJourneyCommands(program, deps) {
10
+ // Additive: `explore author-journey` — Jev-driving authors a promotable
11
+ // Journey (Ticket #6). Drives the goal-based mission, feeds its take(s)
12
+ // through RxD's diff/postdoc pipeline, and writes an UNPROMOTED,
13
+ // parameterized Journey to the journeys store. The record-by-demonstration
14
+ // authoring path is untouched.
15
+ withBrowserLaunchFlags(program
16
+ .command("explore-author-journey")
17
+ .description("Jev-driving authors a promotable Journey (authoring plane); never auto-promoted"))
18
+ .option("--url <url>", "target URL (must be an authorized origin)")
19
+ .option("--goal <text>", "natural-language goal")
20
+ .option("--success <spec>", "independent success assertion, e.g. urlIncludes:/confirmed")
21
+ .option("--id <id>", "journey id (used for the <id>.json filename in the store)")
22
+ .option("--name <name>", "human-readable journey name")
23
+ .option("--takes <n>", "corroborating takes incl. discovery (default 1)", positiveIntArg, 1)
24
+ .option("--storage-state <file>", "Playwright storageState JSON to start the session authenticated (deterministic login pre-step); must exist")
25
+ .option("--journeys-dir <dir>", "journeys store directory (default: the repo's .jevitate/journeys; outside a repo ~/.jevitate/journeys)")
26
+ .option("--allow <origin>", "authorized origin (repeatable); REPLACES the default allowlist when given (the URL's own origin is used only when --allow is omitted entirely) -- include the URL's own origin explicitly if you still need it", (v, prev) => [...prev, v], [])
27
+ .option("--max-actions <n>", "hard cap on executed actions", positiveIntArg)
28
+ .option("--max-decisions <n>", "hard cap on model decisions", positiveIntArg)
29
+ .option("--real", "use live Jev + OpenRouter gateways (requires keys)", false)
30
+ .option("--fake-ai", "use deterministic fake gateways (pipeline smoke only)", false)
31
+ .option("--json", "emit a JSON envelope")
32
+ .action(async function () {
33
+ const o = this.opts();
34
+ if (o.storageState !== undefined && !existsSync(o.storageState)) {
35
+ emitJson(program, fail("E_EXPLORE_ARGS", `storage state not found: ${o.storageState}`));
36
+ return;
37
+ }
38
+ if (!o.url || !o.goal || !o.success || !o.id || !o.name) {
39
+ emitJson(program, fail("E_AUTHOR_ARGS", "--url, --goal, --success, --id and --name are all required"));
40
+ return;
41
+ }
42
+ let successAssertion;
43
+ try {
44
+ successAssertion = parseAssertionSpec(o.success);
45
+ }
46
+ catch (err) {
47
+ emitJson(program, fail("E_EXPLORE_ASSERTION", String(err instanceof Error ? err.message : err)));
48
+ return;
49
+ }
50
+ const allowlist = resolveExploreAllowlist(o.url, o.allow);
51
+ const bounds = {};
52
+ if (o.maxActions !== undefined)
53
+ bounds.maxActions = Number(o.maxActions);
54
+ if (o.maxDecisions !== undefined)
55
+ bounds.maxDecisions = Number(o.maxDecisions);
56
+ let judge;
57
+ let gen;
58
+ let authorUsage;
59
+ try {
60
+ ({ judge, gen, usage: authorUsage } = await buildExploreGateways(deps, { real: o.real ?? false, fakeAi: o.fakeAi ?? false }));
61
+ }
62
+ catch (err) {
63
+ if (err instanceof MissingCredentialError || err instanceof GatewaySelectionError) {
64
+ emitJson(program, fail("E_AI_SETUP_REQUIRED", err.message));
65
+ }
66
+ else {
67
+ emitJson(program, fail("E_EXPLORE_SETUP", String(err instanceof Error ? err.message : err)));
68
+ }
69
+ return;
70
+ }
71
+ try {
72
+ const result = await runAuthorJourney({
73
+ url: o.url,
74
+ goal: o.goal,
75
+ successAssertion,
76
+ allowlist,
77
+ journeysDir: resolveJourneysDir(deps, o.journeysDir),
78
+ journeyId: o.id,
79
+ journeyName: o.name,
80
+ takes: Number(o.takes),
81
+ judge,
82
+ gen,
83
+ bounds: Object.keys(bounds).length > 0 ? bounds : undefined,
84
+ browserPortFactory: deps.explore?.browserPortFactory,
85
+ browser: browserLaunchFromFlags(o),
86
+ ...(o.storageState !== undefined ? { storageState: o.storageState } : {}),
87
+ }).then((r) => ({ ...r, usage: authorUsage.snapshot() }));
88
+ const envelope = ok(result);
89
+ if (o.json) {
90
+ emitJson(program, envelope);
91
+ if (result.outcome !== "authored")
92
+ process.exitCode = 1;
93
+ }
94
+ else {
95
+ writeRawResult(program, result);
96
+ process.exitCode = result.outcome === "authored" ? 0 : 1;
97
+ }
98
+ }
99
+ catch (err) {
100
+ if (err instanceof UnauthorizedExploreTargetError) {
101
+ emitJson(program, fail("E_UNAUTHORIZED_EXPLORE_TARGET", err.message));
102
+ }
103
+ else {
104
+ emitJson(program, fail("E_AUTHOR_JOURNEY", String(err instanceof Error ? err.message : err)));
105
+ }
106
+ }
107
+ });
108
+ }
109
+ //# sourceMappingURL=author-journey-cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"author-journey-cli.js","sourceRoot":"","sources":["../src/author-journey-cli.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAErC,OAAO,EAAE,sBAAsB,EAAwD,MAAM,mBAAmB,CAAC;AACjH,OAAO,EAAE,8BAA8B,EAAE,MAAM,mBAAmB,CAAC;AACnE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,MAAM,eAAe,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAC/C,OAAO,EAAE,gBAAgB,EAAE,kBAAkB,EAAE,uBAAuB,EAAE,MAAM,kBAAkB,CAAC;AACjG,OAAO,EAEL,kBAAkB,EAElB,sBAAsB,EACtB,sBAAsB,EACtB,QAAQ,EACR,cAAc,EACd,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,iBAAiB,CAAC;AAEzB,sGAAsG;AACtG,MAAM,UAAU,6BAA6B,CAAC,OAAgB,EAAE,IAAa;IAC3E,wEAAwE;IACxE,wEAAwE;IACxE,iEAAiE;IACjE,2EAA2E;IAC3E,+BAA+B;IAC/B,sBAAsB,CACpB,OAAO;SACJ,OAAO,CAAC,wBAAwB,CAAC;SACjC,WAAW,CAAC,iFAAiF,CAAC,CAClG;SACE,MAAM,CAAC,aAAa,EAAE,2CAA2C,CAAC;SAClE,MAAM,CAAC,eAAe,EAAE,uBAAuB,CAAC;SAChD,MAAM,CAAC,kBAAkB,EAAE,4DAA4D,CAAC;SACxF,MAAM,CAAC,WAAW,EAAE,2DAA2D,CAAC;SAChF,MAAM,CAAC,eAAe,EAAE,6BAA6B,CAAC;SACtD,MAAM,CAAC,aAAa,EAAE,iDAAiD,EAAE,cAAc,EAAE,CAAC,CAAC;SAC3F,MAAM,CACL,wBAAwB,EACxB,4GAA4G,CAC7G;SACA,MAAM,CAAC,sBAAsB,EAAE,wGAAwG,CAAC;SACxI,MAAM,CACL,kBAAkB,EAClB,gNAAgN,EAChN,CAAC,CAAC,EAAE,IAAc,EAAE,EAAE,CAAC,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC,EACnC,EAAc,CACf;SACA,MAAM,CAAC,mBAAmB,EAAE,8BAA8B,EAAE,cAAc,CAAC;SAC3E,MAAM,CAAC,qBAAqB,EAAE,6BAA6B,EAAE,cAAc,CAAC;SAC5E,MAAM,CAAC,QAAQ,EAAE,oDAAoD,EAAE,KAAK,CAAC;SAC7E,MAAM,CAAC,WAAW,EAAE,uDAAuD,EAAE,KAAK,CAAC;SACnF,MAAM,CAAC,QAAQ,EAAE,sBAAsB,CAAC;SACxC,MAAM,CAAC,KAAK;QACX,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAeM,CAAC;QAC1B,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,YAAY,CAAC,EAAE,CAAC;YAChE,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE,4BAA4B,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC;YACxF,OAAO;QACT,CAAC;QAED,IAAI,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YACxD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,eAAe,EAAE,4DAA4D,CAAC,CAAC,CAAC;YACvG,OAAO;QACT,CAAC;QACD,IAAI,gBAAgB,CAAC;QACrB,IAAI,CAAC;YACH,gBAAgB,GAAG,kBAAkB,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;QACnD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YACjG,OAAO;QACT,CAAC;QACD,MAAM,SAAS,GAAG,uBAAuB,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC;QAC1D,MAAM,MAAM,GAA2B,EAAE,CAAC;QAC1C,IAAI,CAAC,CAAC,UAAU,KAAK,SAAS;YAAE,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC;QACzE,IAAI,CAAC,CAAC,YAAY,KAAK,SAAS;YAAE,MAAM,CAAC,YAAY,GAAG,MAAM,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC;QAE/E,IAAI,KAAmB,CAAC;QACxB,IAAI,GAAmB,CAAC;QACxB,IAAI,WAAyB,CAAC;QAC9B,IAAI,CAAC;YACH,CAAC,EAAE,KAAK,EAAE,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,GAAG,MAAM,oBAAoB,CAAC,IAAI,EAAE,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,IAAI,KAAK,EAAE,MAAM,EAAE,CAAC,CAAC,MAAM,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC;QAChI,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,sBAAsB,IAAI,GAAG,YAAY,qBAAqB,EAAE,CAAC;gBAClF,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,qBAAqB,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YAC9D,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,iBAAiB,EAAE,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAC/F,CAAC;YACD,OAAO;QACT,CAAC;QAED,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC;gBACpC,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,gBAAgB;gBAChB,SAAS;gBACT,WAAW,EAAE,kBAAkB,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,CAAC;gBACpD,SAAS,EAAE,CAAC,CAAC,EAAE;gBACf,WAAW,EAAE,CAAC,CAAC,IAAI;gBACnB,KAAK,EAAE,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC;gBACtB,KAAK;gBACL,GAAG;gBACH,MAAM,EAAE,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,SAAS;gBAC3D,kBAAkB,EAAE,IAAI,CAAC,OAAO,EAAE,kBAAkB;gBACpD,OAAO,EAAE,sBAAsB,CAAC,CAAC,CAAC;gBAClC,GAAG,CAAC,CAAC,CAAC,YAAY,KAAK,SAAS,CAAC,CAAC,CAAC,EAAE,YAAY,EAAE,CAAC,CAAC,YAAY,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;aAC1E,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,KAAK,EAAE,WAAW,CAAC,QAAQ,EAAE,EAAE,CAAC,CAAC,CAAC;YAC1D,MAAM,QAAQ,GAAG,EAAE,CAAC,MAAM,CAAC,CAAC;YAC5B,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;gBACX,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC5B,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU;oBAAE,OAAO,CAAC,QAAQ,GAAG,CAAC,CAAC;YAC1D,CAAC;iBAAM,CAAC;gBACN,cAAc,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;gBAChC,OAAO,CAAC,QAAQ,GAAG,MAAM,CAAC,OAAO,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,GAAG,YAAY,8BAA8B,EAAE,CAAC;gBAClD,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,+BAA+B,EAAE,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC;YACxE,CAAC;iBAAM,CAAC;gBACN,QAAQ,CAAC,OAAO,EAAE,IAAI,CAAC,kBAAkB,EAAE,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;YAChG,CAAC;QACH,CAAC;IACH,CAAC,CAAC,CAAC;AACP,CAAC"}