@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.
- package/README.md +23 -0
- package/dist/ai-cli.js +40 -30
- package/dist/ai-cli.js.map +1 -1
- package/dist/author-journey-cli.d.ts +4 -0
- package/dist/author-journey-cli.js +109 -0
- package/dist/author-journey-cli.js.map +1 -0
- package/dist/bin.js +58077 -22454
- package/dist/bin.js.map +1 -1
- package/dist/browser-run-options.d.ts +58 -0
- package/dist/browser-run-options.js +106 -0
- package/dist/browser-run-options.js.map +1 -0
- package/dist/build-info.generated.d.ts +2 -0
- package/dist/build-info.generated.js +10 -0
- package/dist/build-info.generated.js.map +1 -0
- package/dist/check-api.d.ts +5 -0
- package/dist/check-api.js +233 -0
- package/dist/check-api.js.map +1 -0
- package/dist/check-budget.d.ts +26 -0
- package/dist/check-budget.js +89 -0
- package/dist/check-budget.js.map +1 -0
- package/dist/check-cli.d.ts +31 -0
- package/dist/check-cli.js +109 -0
- package/dist/check-cli.js.map +1 -0
- package/dist/check-execute.d.ts +25 -0
- package/dist/check-execute.js +385 -0
- package/dist/check-execute.js.map +1 -0
- package/dist/check-plan.d.ts +113 -0
- package/dist/check-plan.js +448 -0
- package/dist/check-plan.js.map +1 -0
- package/dist/check-suite.d.ts +171 -0
- package/dist/check-suite.js +515 -0
- package/dist/check-suite.js.map +1 -0
- package/dist/check-types.d.ts +181 -0
- package/dist/check-types.js +35 -0
- package/dist/check-types.js.map +1 -0
- package/dist/cli-args.d.ts +26 -0
- package/dist/cli-args.js +50 -0
- package/dist/cli-args.js.map +1 -0
- package/dist/cli-output.d.ts +102 -0
- package/dist/cli-output.js +516 -0
- package/dist/cli-output.js.map +1 -0
- package/dist/cli-reference.d.ts +3 -0
- package/dist/cli-reference.js +81 -0
- package/dist/cli-reference.js.map +1 -0
- package/dist/cli-refusal.d.ts +12 -0
- package/dist/cli-refusal.js +52 -0
- package/dist/cli-refusal.js.map +1 -0
- package/dist/cli-shared.d.ts +330 -0
- package/dist/cli-shared.js +492 -0
- package/dist/cli-shared.js.map +1 -0
- package/dist/cli-surface.d.ts +33 -0
- package/dist/cli-surface.js +48 -0
- package/dist/cli-surface.js.map +1 -0
- package/dist/conversation-options.d.ts +15 -0
- package/dist/conversation-options.js +10 -0
- package/dist/conversation-options.js.map +1 -0
- package/dist/credentials-file.d.ts +15 -0
- package/dist/credentials-file.js +56 -0
- package/dist/credentials-file.js.map +1 -0
- package/dist/data-dir.d.ts +1 -1
- package/dist/data-dir.js +1 -1
- package/dist/defect-evidence.d.ts +141 -0
- package/dist/defect-evidence.js +502 -0
- package/dist/defect-evidence.js.map +1 -0
- package/dist/demo-aspect-api.d.ts +209 -0
- package/dist/demo-aspect-api.js +397 -0
- package/dist/demo-aspect-api.js.map +1 -0
- package/dist/demo-aspect-cli.d.ts +3 -0
- package/dist/demo-aspect-cli.js +241 -0
- package/dist/demo-aspect-cli.js.map +1 -0
- package/dist/demo-capture.d.ts +108 -0
- package/dist/demo-capture.js +438 -0
- package/dist/demo-capture.js.map +1 -0
- package/dist/engine.d.ts +35 -0
- package/dist/engine.js +25 -0
- package/dist/engine.js.map +1 -0
- package/dist/environments.d.ts +155 -0
- package/dist/environments.js +364 -0
- package/dist/environments.js.map +1 -0
- package/dist/exit-codes.d.ts +46 -0
- package/dist/exit-codes.js +91 -0
- package/dist/exit-codes.js.map +1 -0
- package/dist/explore-adversarial.d.ts +137 -0
- package/dist/explore-adversarial.js +218 -0
- package/dist/explore-adversarial.js.map +1 -0
- package/dist/explore-api.d.ts +7 -187
- package/dist/explore-api.js +7 -301
- package/dist/explore-api.js.map +1 -1
- package/dist/explore-author.d.ts +79 -0
- package/dist/explore-author.js +86 -0
- package/dist/explore-author.js.map +1 -0
- package/dist/explore-cli.d.ts +7 -0
- package/dist/explore-cli.js +963 -0
- package/dist/explore-cli.js.map +1 -0
- package/dist/explore-coverage.d.ts +158 -0
- package/dist/explore-coverage.js +240 -0
- package/dist/explore-coverage.js.map +1 -0
- package/dist/explore-feature.d.ts +127 -0
- package/dist/explore-feature.js +220 -0
- package/dist/explore-feature.js.map +1 -0
- package/dist/explore-goal.d.ts +253 -0
- package/dist/explore-goal.js +374 -0
- package/dist/explore-goal.js.map +1 -0
- package/dist/explore-shared.d.ts +152 -0
- package/dist/explore-shared.js +129 -0
- package/dist/explore-shared.js.map +1 -0
- package/dist/explore-specs.d.ts +53 -0
- package/dist/explore-specs.js +333 -0
- package/dist/explore-specs.js.map +1 -0
- package/dist/findings-filing.d.ts +64 -0
- package/dist/findings-filing.js +108 -0
- package/dist/findings-filing.js.map +1 -0
- package/dist/fixture-auth.d.ts +52 -0
- package/dist/fixture-auth.js +82 -0
- package/dist/fixture-auth.js.map +1 -0
- package/dist/fixture-cli.d.ts +70 -0
- package/dist/fixture-cli.js +178 -0
- package/dist/fixture-cli.js.map +1 -0
- package/dist/github-issue-filer.d.ts +62 -0
- package/dist/github-issue-filer.js +188 -0
- package/dist/github-issue-filer.js.map +1 -0
- package/dist/host-health-run.d.ts +24 -0
- package/dist/host-health-run.js +27 -0
- package/dist/host-health-run.js.map +1 -0
- package/dist/http-5xx-outcome.d.ts +6 -0
- package/dist/http-5xx-outcome.js +39 -0
- package/dist/http-5xx-outcome.js.map +1 -0
- package/dist/inbox-cli.d.ts +7 -0
- package/dist/inbox-cli.js +197 -0
- package/dist/inbox-cli.js.map +1 -0
- package/dist/index.d.ts +1 -0
- package/dist/index.js +1 -0
- package/dist/index.js.map +1 -1
- package/dist/init-cli.d.ts +4 -0
- package/dist/init-cli.js +127 -0
- package/dist/init-cli.js.map +1 -0
- package/dist/init-keys.d.ts +19 -2
- package/dist/init-keys.js +15 -4
- package/dist/init-keys.js.map +1 -1
- package/dist/init-next-steps.d.ts +35 -0
- package/dist/init-next-steps.js +79 -0
- package/dist/init-next-steps.js.map +1 -0
- package/dist/invariants-file.d.ts +34 -0
- package/dist/invariants-file.js +68 -0
- package/dist/invariants-file.js.map +1 -0
- package/dist/invariants-validate.d.ts +30 -0
- package/dist/invariants-validate.js +105 -0
- package/dist/invariants-validate.js.map +1 -0
- package/dist/journey-annotate-api.d.ts +76 -0
- package/dist/journey-annotate-api.js +256 -0
- package/dist/journey-annotate-api.js.map +1 -0
- package/dist/journey-annotate-cli.d.ts +9 -0
- package/dist/journey-annotate-cli.js +179 -0
- package/dist/journey-annotate-cli.js.map +1 -0
- package/dist/journey-api.d.ts +79 -2
- package/dist/journey-api.js +136 -19
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-cli.d.ts +4 -0
- package/dist/journey-cli.js +370 -0
- package/dist/journey-cli.js.map +1 -0
- package/dist/journey-demo-api.d.ts +112 -0
- package/dist/journey-demo-api.js +392 -0
- package/dist/journey-demo-api.js.map +1 -0
- package/dist/journey-demo-cli.d.ts +10 -0
- package/dist/journey-demo-cli.js +155 -0
- package/dist/journey-demo-cli.js.map +1 -0
- package/dist/kill-signal.d.ts +193 -0
- package/dist/kill-signal.js +284 -0
- package/dist/kill-signal.js.map +1 -0
- package/dist/launch-armed.d.ts +37 -0
- package/dist/launch-armed.js +31 -0
- package/dist/launch-armed.js.map +1 -0
- package/dist/ledger-api.d.ts +106 -0
- package/dist/ledger-api.js +237 -0
- package/dist/ledger-api.js.map +1 -0
- package/dist/ledger-cli.d.ts +18 -0
- package/dist/ledger-cli.js +107 -0
- package/dist/ledger-cli.js.map +1 -0
- package/dist/load-api.d.ts +29 -11
- package/dist/load-api.js +23 -15
- package/dist/load-api.js.map +1 -1
- package/dist/load-cli.d.ts +4 -0
- package/dist/load-cli.js +97 -0
- package/dist/load-cli.js.map +1 -0
- package/dist/log-correlation.d.ts +147 -0
- package/dist/log-correlation.js +325 -0
- package/dist/log-correlation.js.map +1 -0
- package/dist/log-lines.d.ts +131 -0
- package/dist/log-lines.js +389 -0
- package/dist/log-lines.js.map +1 -0
- package/dist/log-sources.d.ts +71 -0
- package/dist/log-sources.js +235 -0
- package/dist/log-sources.js.map +1 -0
- package/dist/logs-cli.d.ts +3 -0
- package/dist/logs-cli.js +51 -0
- package/dist/logs-cli.js.map +1 -0
- package/dist/logs-retention.d.ts +28 -0
- package/dist/logs-retention.js +84 -0
- package/dist/logs-retention.js.map +1 -0
- package/dist/mcp-api.d.ts +89 -1
- package/dist/mcp-api.js +472 -18
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-args.d.ts +38 -0
- package/dist/mcp-args.js +131 -0
- package/dist/mcp-args.js.map +1 -0
- package/dist/mcp-cli-bridge.d.ts +34 -0
- package/dist/mcp-cli-bridge.js +62 -0
- package/dist/mcp-cli-bridge.js.map +1 -0
- package/dist/mcp-cli-runner.d.ts +29 -0
- package/dist/mcp-cli-runner.js +44 -0
- package/dist/mcp-cli-runner.js.map +1 -0
- package/dist/mcp-cli-tools.d.ts +125 -0
- package/dist/mcp-cli-tools.js +680 -0
- package/dist/mcp-cli-tools.js.map +1 -0
- package/dist/mcp-paths.d.ts +28 -0
- package/dist/mcp-paths.js +76 -0
- package/dist/mcp-paths.js.map +1 -0
- package/dist/mission-actors.d.ts +40 -0
- package/dist/mission-actors.js +72 -0
- package/dist/mission-actors.js.map +1 -0
- package/dist/mission-api.d.ts +35 -0
- package/dist/mission-api.js +58 -2
- package/dist/mission-api.js.map +1 -1
- package/dist/mission-cli.d.ts +4 -0
- package/dist/mission-cli.js +247 -0
- package/dist/mission-cli.js.map +1 -0
- package/dist/mission-exit.d.ts +22 -0
- package/dist/mission-exit.js +26 -0
- package/dist/mission-exit.js.map +1 -0
- package/dist/mission-fixtures.d.ts +225 -0
- package/dist/mission-fixtures.js +828 -0
- package/dist/mission-fixtures.js.map +1 -0
- package/dist/mission-journal.d.ts +60 -0
- package/dist/mission-journal.js +115 -0
- package/dist/mission-journal.js.map +1 -0
- package/dist/mission-queue-cli.d.ts +10 -0
- package/dist/mission-queue-cli.js +198 -0
- package/dist/mission-queue-cli.js.map +1 -0
- package/dist/mission-queue-runner.d.ts +126 -0
- package/dist/mission-queue-runner.js +397 -0
- package/dist/mission-queue-runner.js.map +1 -0
- package/dist/multi-run-cli.d.ts +37 -0
- package/dist/multi-run-cli.js +110 -0
- package/dist/multi-run-cli.js.map +1 -0
- package/dist/multi-run.d.ts +339 -0
- package/dist/multi-run.js +619 -0
- package/dist/multi-run.js.map +1 -0
- package/dist/openrouter-call.d.ts +22 -0
- package/dist/openrouter-call.js +63 -0
- package/dist/openrouter-call.js.map +1 -0
- package/dist/profile-cli.d.ts +4 -0
- package/dist/profile-cli.js +57 -0
- package/dist/profile-cli.js.map +1 -0
- package/dist/program.d.ts +3 -75
- package/dist/program.js +119 -1921
- package/dist/program.js.map +1 -1
- package/dist/project-dir.d.ts +96 -0
- package/dist/project-dir.js +220 -0
- package/dist/project-dir.js.map +1 -0
- package/dist/record-api.d.ts +10 -6
- package/dist/record-api.js +39 -28
- package/dist/record-api.js.map +1 -1
- package/dist/record-cli.d.ts +4 -0
- package/dist/record-cli.js +64 -0
- package/dist/record-cli.js.map +1 -0
- package/dist/recording-cli.d.ts +4 -0
- package/dist/recording-cli.js +248 -0
- package/dist/recording-cli.js.map +1 -0
- package/dist/regression-api.d.ts +101 -0
- package/dist/regression-api.js +384 -5
- package/dist/regression-api.js.map +1 -1
- package/dist/regression-cli.d.ts +4 -0
- package/dist/regression-cli.js +232 -0
- package/dist/regression-cli.js.map +1 -0
- package/dist/report-api.d.ts +146 -0
- package/dist/report-api.js +430 -0
- package/dist/report-api.js.map +1 -0
- package/dist/report-cli.d.ts +12 -0
- package/dist/report-cli.js +147 -0
- package/dist/report-cli.js.map +1 -0
- package/dist/result-schema.d.ts +22 -0
- package/dist/result-schema.js +28 -0
- package/dist/result-schema.js.map +1 -0
- package/dist/run-index.d.ts +29 -0
- package/dist/run-index.js +70 -0
- package/dist/run-index.js.map +1 -0
- package/dist/run-screenshots.d.ts +123 -0
- package/dist/run-screenshots.js +229 -0
- package/dist/run-screenshots.js.map +1 -0
- package/dist/runtime-env.d.ts +8 -0
- package/dist/runtime-env.js +22 -0
- package/dist/runtime-env.js.map +1 -0
- package/dist/secret-args.d.ts +23 -0
- package/dist/secret-args.js +45 -0
- package/dist/secret-args.js.map +1 -0
- package/dist/serve-cli.d.ts +4 -0
- package/dist/serve-cli.js +95 -0
- package/dist/serve-cli.js.map +1 -0
- package/dist/server-log-verify.d.ts +34 -0
- package/dist/server-log-verify.js +115 -0
- package/dist/server-log-verify.js.map +1 -0
- package/dist/session-check.d.ts +14 -0
- package/dist/session-check.js +44 -0
- package/dist/session-check.js.map +1 -0
- package/dist/site-cli.d.ts +4 -0
- package/dist/site-cli.js +127 -0
- package/dist/site-cli.js.map +1 -0
- package/dist/site-gate-cli.d.ts +28 -0
- package/dist/site-gate-cli.js +58 -0
- package/dist/site-gate-cli.js.map +1 -0
- package/dist/source-api.js +18 -3
- package/dist/source-api.js.map +1 -1
- package/dist/source-cli.d.ts +4 -0
- package/dist/source-cli.js +284 -0
- package/dist/source-cli.js.map +1 -0
- package/dist/source-run-api.d.ts +27 -1
- package/dist/source-run-api.js +22 -11
- package/dist/source-run-api.js.map +1 -1
- package/dist/storage-state-snapshot.d.ts +50 -0
- package/dist/storage-state-snapshot.js +87 -0
- package/dist/storage-state-snapshot.js.map +1 -0
- package/dist/suite-explore-options.d.ts +289 -0
- package/dist/suite-explore-options.js +140 -0
- package/dist/suite-explore-options.js.map +1 -0
- package/dist/target-config.d.ts +109 -0
- package/dist/target-config.js +216 -0
- package/dist/target-config.js.map +1 -0
- package/dist/transcript-file.d.ts +12 -0
- package/dist/transcript-file.js +23 -0
- package/dist/transcript-file.js.map +1 -0
- package/dist/ui-api.d.ts +3 -0
- package/dist/ui-api.js +7 -1
- package/dist/ui-api.js.map +1 -1
- package/dist/usability-capture.d.ts +43 -0
- package/dist/usability-capture.js +326 -0
- package/dist/usability-capture.js.map +1 -0
- package/dist/usage-config.d.ts +36 -0
- package/dist/usage-config.js +114 -0
- package/dist/usage-config.js.map +1 -0
- package/dist/ux-api.d.ts +3 -75
- package/dist/ux-api.js +3 -220
- package/dist/ux-api.js.map +1 -1
- package/dist/ux-cli.d.ts +4 -0
- package/dist/ux-cli.js +102 -0
- package/dist/ux-cli.js.map +1 -0
- package/dist/ux-config.d.ts +29 -0
- package/dist/ux-config.js +103 -0
- package/dist/ux-config.js.map +1 -0
- package/dist/ux-evidence.d.ts +54 -0
- package/dist/ux-evidence.js +197 -0
- package/dist/ux-evidence.js.map +1 -0
- package/dist/ux-review.d.ts +112 -0
- package/dist/ux-review.js +151 -0
- package/dist/ux-review.js.map +1 -0
- package/dist/ux-usability.d.ts +238 -0
- package/dist/ux-usability.js +494 -0
- package/dist/ux-usability.js.map +1 -0
- package/dist/verify-fix-api.d.ts +173 -0
- package/dist/verify-fix-api.js +454 -0
- package/dist/verify-fix-api.js.map +1 -0
- package/dist/verify-fix-cli.d.ts +4 -0
- package/dist/verify-fix-cli.js +110 -0
- package/dist/verify-fix-cli.js.map +1 -0
- package/package.json +19 -14
- package/skills/jevitate-ci-check/SKILL.md +77 -0
- package/skills/jevitate-demo/SKILL.md +61 -0
- package/skills/jevitate-explore/SKILL.md +88 -87
- package/skills/jevitate-getting-started/SKILL.md +88 -0
- package/skills/jevitate-load-test/SKILL.md +11 -2
- package/skills/jevitate-mission-scope/SKILL.md +19 -11
- package/skills/jevitate-record/SKILL.md +23 -5
- package/skills/jevitate-run-journey/SKILL.md +61 -17
- package/skills/jevitate-sources/SKILL.md +57 -14
- package/skills/jevitate-ux-review/SKILL.md +106 -16
- 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
|
-
|
|
70
|
+
raw = await readFile(path, "utf8");
|
|
66
71
|
}
|
|
67
|
-
catch {
|
|
68
|
-
//
|
|
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
|
|
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
|
|
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
|
-
|
|
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
|
package/dist/ai-cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ai-cli.js","sourceRoot":"","sources":["../src/ai-cli.ts"],"names":[],"mappings":"AACA,OAAO,EACL,kBAAkB,EAClB,YAAY,EACZ,WAAW,EACX,sBAAsB,EACtB,kBAAkB,EAClB,qBAAqB,EACrB,2BAA2B,EAC3B,SAAS,
|
|
1
|
+
{"version":3,"file":"ai-cli.js","sourceRoot":"","sources":["../src/ai-cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -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":"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"}
|