@jevitate/cli 0.2.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 (210) hide show
  1. package/dist/ai-cli.d.ts +31 -11
  2. package/dist/ai-cli.js +100 -67
  3. package/dist/ai-cli.js.map +1 -1
  4. package/dist/author-journey-cli.js +3 -1
  5. package/dist/author-journey-cli.js.map +1 -1
  6. package/dist/bin.js +48218 -39969
  7. package/dist/browser-run-options.d.ts +32 -1
  8. package/dist/browser-run-options.js +69 -0
  9. package/dist/browser-run-options.js.map +1 -1
  10. package/dist/build-info.generated.js +2 -2
  11. package/dist/campaign-api.d.ts +151 -0
  12. package/dist/campaign-api.js +446 -0
  13. package/dist/campaign-api.js.map +1 -0
  14. package/dist/campaign-cli.d.ts +6 -0
  15. package/dist/campaign-cli.js +66 -0
  16. package/dist/campaign-cli.js.map +1 -0
  17. package/dist/check-api.js +3 -2
  18. package/dist/check-api.js.map +1 -1
  19. package/dist/check-budget.js +2 -1
  20. package/dist/check-budget.js.map +1 -1
  21. package/dist/check-execute.d.ts +4 -0
  22. package/dist/check-execute.js +41 -6
  23. package/dist/check-execute.js.map +1 -1
  24. package/dist/check-plan.d.ts +5 -0
  25. package/dist/check-plan.js +72 -4
  26. package/dist/check-plan.js.map +1 -1
  27. package/dist/check-suite.d.ts +14 -1
  28. package/dist/check-suite.js +26 -1
  29. package/dist/check-suite.js.map +1 -1
  30. package/dist/cli-output.d.ts +4 -0
  31. package/dist/cli-output.js +52 -5
  32. package/dist/cli-output.js.map +1 -1
  33. package/dist/cli-shared.d.ts +13 -3
  34. package/dist/cli-shared.js +52 -7
  35. package/dist/cli-shared.js.map +1 -1
  36. package/dist/defect-evidence.js +6 -3
  37. package/dist/defect-evidence.js.map +1 -1
  38. package/dist/demo-aspect-api.js +2 -1
  39. package/dist/demo-aspect-api.js.map +1 -1
  40. package/dist/demo-aspect-cli.js +3 -1
  41. package/dist/demo-aspect-cli.js.map +1 -1
  42. package/dist/demo-capture.d.ts +37 -3
  43. package/dist/demo-capture.js +119 -20
  44. package/dist/demo-capture.js.map +1 -1
  45. package/dist/explore-adversarial.d.ts +11 -4
  46. package/dist/explore-adversarial.js +21 -12
  47. package/dist/explore-adversarial.js.map +1 -1
  48. package/dist/explore-cli.js +262 -26
  49. package/dist/explore-cli.js.map +1 -1
  50. package/dist/explore-coverage.d.ts +17 -2
  51. package/dist/explore-coverage.js +19 -13
  52. package/dist/explore-coverage.js.map +1 -1
  53. package/dist/explore-feature.d.ts +0 -2
  54. package/dist/explore-feature.js +6 -8
  55. package/dist/explore-feature.js.map +1 -1
  56. package/dist/explore-goal.d.ts +25 -7
  57. package/dist/explore-goal.js +61 -18
  58. package/dist/explore-goal.js.map +1 -1
  59. package/dist/explore-shared.d.ts +27 -2
  60. package/dist/explore-shared.js +21 -1
  61. package/dist/explore-shared.js.map +1 -1
  62. package/dist/fixture-auth.d.ts +13 -2
  63. package/dist/fixture-auth.js +19 -6
  64. package/dist/fixture-auth.js.map +1 -1
  65. package/dist/fixture-cli.d.ts +29 -0
  66. package/dist/fixture-cli.js +121 -7
  67. package/dist/fixture-cli.js.map +1 -1
  68. package/dist/github-issue-filer.js +2 -1
  69. package/dist/github-issue-filer.js.map +1 -1
  70. package/dist/host-health-run.d.ts +2 -1
  71. package/dist/host-health-run.js +8 -2
  72. package/dist/host-health-run.js.map +1 -1
  73. package/dist/init-cli.js +34 -5
  74. package/dist/init-cli.js.map +1 -1
  75. package/dist/init-keys.d.ts +11 -0
  76. package/dist/init-keys.js +5 -2
  77. package/dist/init-keys.js.map +1 -1
  78. package/dist/journey-annotate-api.js +17 -4
  79. package/dist/journey-annotate-api.js.map +1 -1
  80. package/dist/journey-annotate-cli.js +3 -1
  81. package/dist/journey-annotate-cli.js.map +1 -1
  82. package/dist/journey-api.d.ts +26 -1
  83. package/dist/journey-api.js +51 -25
  84. package/dist/journey-api.js.map +1 -1
  85. package/dist/journey-cli.d.ts +1 -1
  86. package/dist/journey-cli.js +44 -3
  87. package/dist/journey-cli.js.map +1 -1
  88. package/dist/journey-demo-api.d.ts +2 -0
  89. package/dist/journey-demo-api.js +23 -10
  90. package/dist/journey-demo-api.js.map +1 -1
  91. package/dist/journey-demo-cli.js +5 -2
  92. package/dist/journey-demo-cli.js.map +1 -1
  93. package/dist/journey-prefix.d.ts +194 -0
  94. package/dist/journey-prefix.js +279 -0
  95. package/dist/journey-prefix.js.map +1 -0
  96. package/dist/key-report.d.ts +49 -0
  97. package/dist/key-report.js +101 -0
  98. package/dist/key-report.js.map +1 -0
  99. package/dist/kill-signal.js +0 -1
  100. package/dist/kill-signal.js.map +1 -1
  101. package/dist/ledger-api.js +3 -1
  102. package/dist/ledger-api.js.map +1 -1
  103. package/dist/log-correlation.d.ts +54 -1
  104. package/dist/log-correlation.js +83 -14
  105. package/dist/log-correlation.js.map +1 -1
  106. package/dist/log-sources.js +6 -5
  107. package/dist/log-sources.js.map +1 -1
  108. package/dist/log-trace.d.ts +80 -0
  109. package/dist/log-trace.js +210 -0
  110. package/dist/log-trace.js.map +1 -0
  111. package/dist/logs-retention.js +2 -1
  112. package/dist/logs-retention.js.map +1 -1
  113. package/dist/masked-input.d.ts +22 -0
  114. package/dist/masked-input.js +99 -0
  115. package/dist/masked-input.js.map +1 -0
  116. package/dist/mcp-api.d.ts +3 -1
  117. package/dist/mcp-api.js +49 -7
  118. package/dist/mcp-api.js.map +1 -1
  119. package/dist/mcp-args.d.ts +12 -0
  120. package/dist/mcp-args.js +33 -0
  121. package/dist/mcp-args.js.map +1 -1
  122. package/dist/mcp-cli-tools.d.ts +5 -1
  123. package/dist/mcp-cli-tools.js +73 -16
  124. package/dist/mcp-cli-tools.js.map +1 -1
  125. package/dist/mission-api.js +2 -1
  126. package/dist/mission-api.js.map +1 -1
  127. package/dist/mission-cli.js +2 -1
  128. package/dist/mission-cli.js.map +1 -1
  129. package/dist/mission-fixtures.d.ts +10 -1
  130. package/dist/mission-fixtures.js +49 -15
  131. package/dist/mission-fixtures.js.map +1 -1
  132. package/dist/mission-queue-runner.js +11 -2
  133. package/dist/mission-queue-runner.js.map +1 -1
  134. package/dist/multi-run-cli.js +7 -1
  135. package/dist/multi-run-cli.js.map +1 -1
  136. package/dist/openrouter-call.js +3 -2
  137. package/dist/openrouter-call.js.map +1 -1
  138. package/dist/program.js +4 -0
  139. package/dist/program.js.map +1 -1
  140. package/dist/project-dir.js +3 -2
  141. package/dist/project-dir.js.map +1 -1
  142. package/dist/record-api.d.ts +3 -1
  143. package/dist/record-api.js +5 -2
  144. package/dist/record-api.js.map +1 -1
  145. package/dist/record-cli.js +14 -2
  146. package/dist/record-cli.js.map +1 -1
  147. package/dist/regression-api.d.ts +6 -0
  148. package/dist/regression-api.js +4 -2
  149. package/dist/regression-api.js.map +1 -1
  150. package/dist/regression-cli.js +56 -4
  151. package/dist/regression-cli.js.map +1 -1
  152. package/dist/report-api.js +2 -1
  153. package/dist/report-api.js.map +1 -1
  154. package/dist/resource-preflight.d.ts +87 -0
  155. package/dist/resource-preflight.js +160 -0
  156. package/dist/resource-preflight.js.map +1 -0
  157. package/dist/result-schema.d.ts +1 -1
  158. package/dist/result-schema.js +1 -1
  159. package/dist/run-key-preflight.d.ts +42 -0
  160. package/dist/run-key-preflight.js +82 -0
  161. package/dist/run-key-preflight.js.map +1 -0
  162. package/dist/run-screenshots.js +11 -5
  163. package/dist/run-screenshots.js.map +1 -1
  164. package/dist/runtime-env.js +3 -2
  165. package/dist/runtime-env.js.map +1 -1
  166. package/dist/server-log-verify.d.ts +2 -0
  167. package/dist/server-log-verify.js +8 -3
  168. package/dist/server-log-verify.js.map +1 -1
  169. package/dist/site-gate-cli.js +2 -1
  170. package/dist/site-gate-cli.js.map +1 -1
  171. package/dist/source-api.js +2 -1
  172. package/dist/source-api.js.map +1 -1
  173. package/dist/suite-explore-options.d.ts +32 -0
  174. package/dist/suite-explore-options.js +22 -0
  175. package/dist/suite-explore-options.js.map +1 -1
  176. package/dist/target-config.d.ts +6 -0
  177. package/dist/target-config.js +9 -0
  178. package/dist/target-config.js.map +1 -1
  179. package/dist/type-fixture-file.d.ts +9 -0
  180. package/dist/type-fixture-file.js +48 -0
  181. package/dist/type-fixture-file.js.map +1 -0
  182. package/dist/ui-api.js +4 -3
  183. package/dist/ui-api.js.map +1 -1
  184. package/dist/usability-capture.js +4 -3
  185. package/dist/usability-capture.js.map +1 -1
  186. package/dist/usage-config.d.ts +1 -1
  187. package/dist/usage-config.js +1 -1
  188. package/dist/ux-claim-probe.d.ts +45 -0
  189. package/dist/ux-claim-probe.js +386 -0
  190. package/dist/ux-claim-probe.js.map +1 -0
  191. package/dist/ux-cli.js +8 -1
  192. package/dist/ux-cli.js.map +1 -1
  193. package/dist/ux-product.d.ts +14 -0
  194. package/dist/ux-product.js +39 -0
  195. package/dist/ux-product.js.map +1 -0
  196. package/dist/ux-review.d.ts +4 -0
  197. package/dist/ux-review.js +27 -7
  198. package/dist/ux-review.js.map +1 -1
  199. package/dist/ux-usability.d.ts +34 -9
  200. package/dist/ux-usability.js +100 -14
  201. package/dist/ux-usability.js.map +1 -1
  202. package/dist/verify-fix-api.d.ts +21 -0
  203. package/dist/verify-fix-api.js +85 -33
  204. package/dist/verify-fix-api.js.map +1 -1
  205. package/dist/verify-fix-cli.js +7 -2
  206. package/dist/verify-fix-cli.js.map +1 -1
  207. package/package.json +9 -9
  208. package/skills/jevitate-explore/SKILL.md +8 -0
  209. package/skills/jevitate-getting-started/SKILL.md +2 -1
  210. package/skills/jevitate-test-campaign/SKILL.md +203 -0
package/dist/ai-cli.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  import type { Command } from "commander";
2
- import { type CredentialKey, type SecureKeyIO, type GenerationPort, type CatalogModel, type ModelConstraints } from "@jevitate/ai-core";
2
+ import { type CredentialKey, type SecureKeyIO, type GenerationPort, type CatalogModel, type ModelConstraints, type KeyVerdict, type VerifyFetch } from "@jevitate/ai-core";
3
3
  import type { CliDeps } from "./program.js";
4
+ import { type KeySourceReport, type KeyVerificationReport } from "./key-report.js";
4
5
  /**
5
6
  * Additive, optional wiring for `@jevitate/ai-core` threaded through `CliDeps`.
6
7
  * Every field is injectable so `ai-cli.test.ts` never touches real env,
@@ -14,18 +15,37 @@ export interface AiCliDeps {
14
15
  gateway?: GenerationPort;
15
16
  catalog?: CatalogModel[];
16
17
  constraints?: ModelConstraints;
18
+ /** #291: the live key check's HTTP GET (tests inject a stub; default: real HTTPS). */
19
+ verifyFetch?: VerifyFetch;
20
+ /** Whether stdin can prompt (a TTY). Default: `process.stdin.isTTY`. Only consulted for the real prompt. */
21
+ isInteractive?: () => boolean;
22
+ }
23
+ export declare function realSecureIO(): SecureKeyIO;
24
+ /** The env + stored-file inputs the store resolves from — for naming each key's source (#268). */
25
+ export declare function credentialInputs(ai: AiCliDeps | undefined): {
26
+ env: Record<string, string | undefined>;
27
+ localConfig: Partial<Record<CredentialKey, string>>;
28
+ };
29
+ /** A key the provider refused, or that could not be checked, when entered (#291): never stored. */
30
+ export declare class KeyCheckError extends Error {
31
+ readonly code: "E_AI_KEY_INVALID" | "E_AI_KEY_UNVERIFIED";
32
+ constructor(code: "E_AI_KEY_INVALID" | "E_AI_KEY_UNVERIFIED", message: string);
17
33
  }
18
34
  /**
19
- * A tiny write gate: forwards to `output` while unmuted, drops everything
20
- * while muted. Exported so the actual "does the key get echoed" decision is
21
- * directly unit-testable, independent of readline/TTY simulation (per-
22
- * keystroke echo can't be faithfully exercised outside a real terminal in a
23
- * non-interactive test runner).
35
+ * The pre-persist check for an entered key (#291): a live auth check; `invalid` / `unreachable`
36
+ * refuse it (nothing stored). Returns the verdict cache the post-entry verification reuses.
24
37
  */
25
- export declare function createMutableEcho(output: NodeJS.WritableStream): {
26
- write: (chunk: string) => void;
27
- mute: () => void;
28
- unmute: () => void;
38
+ export declare function enteredKeyCheck(fetchFn: VerifyFetch): {
39
+ check: (key: CredentialKey, value: string) => Promise<void>;
40
+ verdicts: Map<CredentialKey, KeyVerdict>;
41
+ entered: Map<CredentialKey, string>;
29
42
  };
30
- export declare function realSecureIO(): SecureKeyIO;
43
+ export interface FeatureKeyStatus {
44
+ required: CredentialKey[];
45
+ missing: CredentialKey[];
46
+ /** #268: where each key comes from (names and sources only). */
47
+ sources: KeySourceReport[];
48
+ /** #291: the live check per key (absent with --no-verify). */
49
+ verification?: KeyVerificationReport[];
50
+ }
31
51
  export declare function registerAiCommands(program: Command, deps: CliDeps): void;
package/dist/ai-cli.js CHANGED
@@ -1,62 +1,23 @@
1
- import { envCredentialStore, ALL_CREDENTIAL_KEYS, FEATURE_KEYS, requireKeys, MissingCredentialError, collectMissingKeys, envAliasesFor, FakeGenerationGateway, OpenRouterGenerationGateway, GEN_TASKS, UsageTracker, } from "@jevitate/ai-core";
1
+ import { envCredentialStore, ALL_CREDENTIAL_KEYS, FEATURE_KEYS, requireKeys, MissingCredentialError, FakeGenerationGateway, OpenRouterGenerationGateway, GEN_TASKS, UsageTracker, collectKeys, verifyKey, KEY_PROVIDERS, } from "@jevitate/ai-core";
2
2
  import { ok, fail } from "./envelope.js";
3
3
  import { resolveDataDir } from "./data-dir.js";
4
4
  import { loadLocalCredentials } from "./credentials-file.js";
5
5
  import { realOpenRouterCall } from "./openrouter-call.js";
6
6
  import { resolveUsagePricing } from "./usage-config.js";
7
7
  import { emitJsonOrRefusal } from "./cli-refusal.js";
8
+ import { readMaskedLine } from "./masked-input.js";
9
+ import { describeFeatureKeys, keySources, realVerifyFetch, shadowWarnings, verificationProblems, verifyFeatureKeys, } from "./key-report.js";
8
10
  const DEFAULT_CATALOG = [
9
11
  { id: "openai/gpt-4o-mini", promptUsdPer1k: 0.15, completionUsdPer1k: 0.6, regions: [], latencyClass: "fast", capabilities: [] },
10
12
  ];
11
13
  const DEFAULT_CONSTRAINTS = { requiredCapabilities: [] };
12
14
  const FEATURES = ["generation", "judgment"];
13
- /**
14
- * A tiny write gate: forwards to `output` while unmuted, drops everything
15
- * while muted. Exported so the actual "does the key get echoed" decision is
16
- * directly unit-testable, independent of readline/TTY simulation (per-
17
- * keystroke echo can't be faithfully exercised outside a real terminal in a
18
- * non-interactive test runner).
19
- */
20
- export function createMutableEcho(output) {
21
- let muted = false;
22
- return {
23
- write: (chunk) => {
24
- if (!muted)
25
- output.write(chunk);
26
- },
27
- mute: () => {
28
- muted = true;
29
- },
30
- unmute: () => {
31
- muted = false;
32
- },
33
- };
34
- }
35
15
  export function realSecureIO() {
36
16
  return {
37
17
  async promptSecret(message) {
38
- const readline = await import("node:readline");
39
- return new Promise((resolve) => {
40
- const rl = readline.createInterface({ input: process.stdin, output: process.stdout, terminal: true });
41
- const echo = createMutableEcho(process.stdout);
42
- // Node's core readline has no public masked-input option. Routing
43
- // every write readline would otherwise make through this output
44
- // stream's internal hook through our own mute-able gate is the
45
- // documented workaround for suppressing per-keystroke terminal echo
46
- // (Node readline FAQ) — genuinely hides the typed key, matching
47
- // `collectMissingKeys`'s "input hidden" prompt copy. Muted only for
48
- // the duration of this single prompt; the model never sees the
49
- // typed value either way (out-of-band, host-only).
50
- rl._writeToOutput = (chunk) => echo.write(chunk);
51
- echo.write(`${message} `);
52
- echo.mute();
53
- rl.question("", (answer) => {
54
- echo.unmute();
55
- rl.close();
56
- process.stdout.write("\n");
57
- resolve(answer);
58
- });
59
- });
18
+ // #269: the instructions stay on screen and each typed character shows as `•` (never the
19
+ // character); see masked-input.ts for why readline's echo-muting hack could not do this.
20
+ return readMaskedLine(process.stdin, process.stdout, message);
60
21
  },
61
22
  async persist(key, value) {
62
23
  const { mkdir, writeFile, readFile } = await import("node:fs/promises");
@@ -93,62 +54,134 @@ export function realSecureIO() {
93
54
  function buildStore(ai) {
94
55
  return envCredentialStore(ai?.env ?? process.env, ai?.localConfig ?? loadLocalCredentials());
95
56
  }
57
+ /** The env + stored-file inputs the store resolves from — for naming each key's source (#268). */
58
+ export function credentialInputs(ai) {
59
+ return { env: ai?.env ?? process.env, localConfig: ai?.localConfig ?? loadLocalCredentials() };
60
+ }
61
+ /** A key the provider refused, or that could not be checked, when entered (#291): never stored. */
62
+ export class KeyCheckError extends Error {
63
+ code;
64
+ constructor(code, message) {
65
+ super(message);
66
+ this.code = code;
67
+ this.name = "KeyCheckError";
68
+ }
69
+ }
70
+ /**
71
+ * The pre-persist check for an entered key (#291): a live auth check; `invalid` / `unreachable`
72
+ * refuse it (nothing stored). Returns the verdict cache the post-entry verification reuses.
73
+ */
74
+ export function enteredKeyCheck(fetchFn) {
75
+ const verdicts = new Map();
76
+ const entered = new Map();
77
+ return {
78
+ verdicts,
79
+ entered,
80
+ check: async (key, value) => {
81
+ const v = await verifyKey(key, value, fetchFn);
82
+ if (v.status === "invalid") {
83
+ throw new KeyCheckError("E_AI_KEY_INVALID", `${key} was rejected by ${KEY_PROVIDERS[key]} (HTTP ${v.httpStatus}) — not stored; check the key and run setup again`);
84
+ }
85
+ if (v.status === "unreachable") {
86
+ throw new KeyCheckError("E_AI_KEY_UNVERIFIED", `${key} could not be verified with ${KEY_PROVIDERS[key]} (${v.reason}) — not stored; retry when online, or pass --no-verify to store it unverified`);
87
+ }
88
+ verdicts.set(key, v);
89
+ entered.set(key, value);
90
+ },
91
+ };
92
+ }
96
93
  export function registerAiCommands(program, deps) {
97
94
  const ai = program.command("ai").description("check or configure the model gateway credentials jevitate's AI features need");
98
95
  ai.command("status")
96
+ .description("which keys each AI feature uses, where each comes from (env or ~/.jevitate/credentials.json), and whether the provider accepts it (a live auth check; never prints a key)")
97
+ .option("--no-verify", "skip the live auth check (offline / CI): report presence and source only")
99
98
  .option("--json", "emit a JSON envelope")
100
- .action(function () {
101
- const { json } = this.opts();
99
+ .action(async function () {
100
+ const { json, verify } = this.opts();
102
101
  const store = buildStore(deps.ai);
102
+ const { env, localConfig } = credentialInputs(deps.ai);
103
+ const fetchFn = deps.ai?.verifyFetch ?? realVerifyFetch;
103
104
  const data = {};
104
105
  for (const feature of FEATURES) {
105
106
  const required = [...FEATURE_KEYS[feature]];
106
107
  const missing = required.filter((k) => !store.detect(k));
107
- data[feature] = { required, missing };
108
+ const sources = keySources(feature, env, localConfig);
109
+ data[feature] = { required, missing, sources, ...(verify ? { verification: await verifyFeatureKeys(feature, store, fetchFn) } : {}) };
108
110
  }
111
+ // A key the provider refuses (or that could not be checked) is not "ready": exit 2, never 0.
112
+ const all = FEATURES.flatMap((f) => data[f].verification ?? []);
113
+ const problems = verificationProblems(all);
114
+ const exitCode = problems.invalid.length + problems.unreachable.length > 0 ? 2 : 0;
109
115
  const envelope = ok(data);
110
116
  if (json) {
111
- emitJsonLine(program, envelope);
117
+ emitJsonOrRefusal(program, envelope, exitCode);
112
118
  }
113
119
  else {
114
120
  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
- };
122
- for (const feature of FEATURES) {
123
- const { missing } = data[feature];
124
- out?.(`${feature}: ${missing.length === 0 ? "ready" : `missing ${missing.map(withAliasHint).join(", ")}`}\n`);
125
- }
126
- process.exitCode = 0;
121
+ for (const feature of FEATURES)
122
+ out?.(`${describeFeatureKeys(feature, data[feature].sources, data[feature].verification)}\n`);
123
+ if (problems.unreachable.length > 0)
124
+ out?.("could not reach a provider to verify a key — retry when online, or pass --no-verify to skip the check\n");
125
+ process.exitCode = exitCode;
127
126
  }
128
127
  });
129
128
  ai.command("setup <feature>")
129
+ .description("enter (masked) and store the keys a feature needs in ~/.jevitate/credentials.json (0600); each key is verified with its provider before it is stored")
130
+ .option("--replace", "prompt for a new value even when a key is already stored (rotate / replace it)")
131
+ .option("--no-verify", "store the entered key without the live auth check (offline / CI)")
130
132
  .option("--json", "emit a JSON envelope")
131
133
  .action(async function (feature) {
132
- const { json } = this.opts();
134
+ const { json, replace, verify } = this.opts();
133
135
  if (feature !== "generation" && feature !== "judgment") {
134
136
  emitJsonLine(program, fail("E_INVALID_FEATURE", `unknown feature '${feature}' — expected 'generation' or 'judgment'`));
135
137
  return;
136
138
  }
137
139
  try {
138
140
  const store = buildStore(deps.ai);
139
- const io = deps.ai?.secureIO ?? realSecureIO();
140
- const collected = await collectMissingKeys(feature, store, io);
141
- const envelope = ok({ feature, collected });
141
+ const { env, localConfig } = credentialInputs(deps.ai);
142
+ const injected = deps.ai?.secureIO;
143
+ const needsPrompt = replace === true || FEATURE_KEYS[feature].some((k) => !store.detect(k));
144
+ if (injected === undefined && needsPrompt && !(deps.ai?.isInteractive?.() ?? process.stdin.isTTY === true)) {
145
+ emitJsonLine(program, fail("E_AI_SETUP", `key entry needs an interactive terminal (stdin is not a TTY) — run \`jevitate ai setup ${feature}${replace === true ? " --replace" : ""}\` in a terminal, or set ${FEATURE_KEYS[feature].join(", ")} in the environment`));
146
+ return;
147
+ }
148
+ const io = injected ?? realSecureIO();
149
+ const fetchFn = deps.ai?.verifyFetch ?? realVerifyFetch;
150
+ const gate = enteredKeyCheck(fetchFn);
151
+ const collected = await collectKeys(feature, store, io, { replace: replace === true, ...(verify ? { check: gate.check } : {}) });
152
+ // What resolves NOW: the stored file plus what was just entered (env still wins).
153
+ const nowLocal = { ...localConfig, ...Object.fromEntries(gate.entered) };
154
+ const nowStore = envCredentialStore(env, nowLocal);
155
+ const sources = keySources(feature, env, verify ? nowLocal : { ...localConfig, ...Object.fromEntries(collected.map((k) => [k, "set"])) });
156
+ const warnings = shadowWarnings(collected, sources);
157
+ // Every key the feature uses is verified, including ones already present ("nothing missing").
158
+ const verification = verify ? await verifyFeatureKeys(feature, nowStore, fetchFn, gate.verdicts) : undefined;
159
+ const problems = verificationProblems(verification ?? []);
160
+ if (problems.invalid.length > 0 || problems.unreachable.length > 0) {
161
+ const line = describeFeatureKeys(feature, sources, verification);
162
+ emitJsonLine(program, fail(problems.invalid.length > 0 ? "E_AI_KEY_INVALID" : "E_AI_KEY_UNVERIFIED", problems.invalid.length > 0
163
+ ? `${line}`
164
+ : `${line} — retry when online, or pass --no-verify to skip the check`));
165
+ return;
166
+ }
167
+ const envelope = ok({ feature, collected, sources, ...(verification === undefined ? {} : { verification }), ...(warnings.length === 0 ? {} : { warnings }) });
142
168
  if (json) {
143
169
  emitJsonLine(program, envelope);
144
170
  }
145
171
  else {
146
- program.configureOutput().writeOut?.(`collected: ${collected.join(", ") || "(nothing missing)"}\n`);
172
+ const out = program.configureOutput().writeOut;
173
+ out?.(`collected: ${collected.join(", ") || "(nothing missing)"}\n`);
174
+ out?.(`${describeFeatureKeys(feature, sources, verification)}\n`);
175
+ for (const w of warnings)
176
+ out?.(`warning: ${w}\n`);
147
177
  process.exitCode = 0;
148
178
  }
149
179
  }
150
180
  catch (err) {
151
- emitJsonLine(program, fail("E_AI_SETUP", String(err instanceof Error ? err.message : err)));
181
+ if (err instanceof KeyCheckError)
182
+ emitJsonLine(program, fail(err.code, err.message));
183
+ else
184
+ emitJsonLine(program, fail("E_AI_SETUP", String(err instanceof Error ? err.message : err)));
152
185
  }
153
186
  });
154
187
  ai.command("generate <task>")
@@ -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":"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"}
@@ -4,6 +4,7 @@ import { UnauthorizedExploreTargetError } from "@jevitate/explore";
4
4
  import { ok, fail } from "./envelope.js";
5
5
  import { positiveIntArg } from "./cli-args.js";
6
6
  import { runAuthorJourney, parseAssertionSpec, resolveExploreAllowlist } from "./explore-api.js";
7
+ import { allowWithExtensions } from "./browser-run-options.js";
7
8
  import { resolveJourneysDir, withBrowserLaunchFlags, browserLaunchFromFlags, emitJson, writeRawResult, GatewaySelectionError, buildExploreGateways, } from "./cli-shared.js";
8
9
  /** Registers `jevitate explore-author-journey` (Jev authors an unpromoted, parameterized Journey). */
9
10
  export function registerAuthorJourneyCommands(program, deps) {
@@ -47,7 +48,8 @@ export function registerAuthorJourneyCommands(program, deps) {
47
48
  emitJson(program, fail("E_EXPLORE_ASSERTION", String(err instanceof Error ? err.message : err)));
48
49
  return;
49
50
  }
50
- const allowlist = resolveExploreAllowlist(o.url, o.allow);
51
+ // #256: loaded extensions' chrome-extension://<id> origins are allowed too (only those ids).
52
+ const allowlist = allowWithExtensions(o.url, resolveExploreAllowlist(o.url, o.allow), browserLaunchFromFlags(o));
51
53
  const bounds = {};
52
54
  if (o.maxActions !== undefined)
53
55
  bounds.maxActions = Number(o.maxActions);
@@ -1 +1 @@
1
- {"version":3,"file":"author-journey-cli.js","sourceRoot":"","sources":["../src/author-journey-cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"author-journey-cli.js","sourceRoot":"","sources":["../src/author-journey-cli.ts"],"names":[],"mappings":"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"}