@jevitate/cli 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +23 -0
- package/dist/ai-cli.d.ts +31 -11
- package/dist/ai-cli.js +131 -88
- package/dist/ai-cli.js.map +1 -1
- package/dist/author-journey-cli.d.ts +4 -0
- package/dist/author-journey-cli.js +111 -0
- package/dist/author-journey-cli.js.map +1 -0
- package/dist/bin.js +60349 -16477
- package/dist/bin.js.map +1 -1
- package/dist/browser-run-options.d.ts +89 -0
- package/dist/browser-run-options.js +175 -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/campaign-api.d.ts +151 -0
- package/dist/campaign-api.js +446 -0
- package/dist/campaign-api.js.map +1 -0
- package/dist/campaign-cli.d.ts +6 -0
- package/dist/campaign-cli.js +66 -0
- package/dist/campaign-cli.js.map +1 -0
- package/dist/check-api.d.ts +5 -0
- package/dist/check-api.js +234 -0
- package/dist/check-api.js.map +1 -0
- package/dist/check-budget.d.ts +26 -0
- package/dist/check-budget.js +90 -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 +29 -0
- package/dist/check-execute.js +420 -0
- package/dist/check-execute.js.map +1 -0
- package/dist/check-plan.d.ts +118 -0
- package/dist/check-plan.js +516 -0
- package/dist/check-plan.js.map +1 -0
- package/dist/check-suite.d.ts +184 -0
- package/dist/check-suite.js +540 -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 +106 -0
- package/dist/cli-output.js +563 -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 +340 -0
- package/dist/cli-shared.js +537 -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 +505 -0
- package/dist/defect-evidence.js.map +1 -0
- package/dist/demo-aspect-api.d.ts +209 -0
- package/dist/demo-aspect-api.js +398 -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 +243 -0
- package/dist/demo-aspect-cli.js.map +1 -0
- package/dist/demo-capture.d.ts +142 -0
- package/dist/demo-capture.js +537 -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 +144 -0
- package/dist/explore-adversarial.js +227 -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 +1199 -0
- package/dist/explore-cli.js.map +1 -0
- package/dist/explore-coverage.d.ts +173 -0
- package/dist/explore-coverage.js +246 -0
- package/dist/explore-coverage.js.map +1 -0
- package/dist/explore-feature.d.ts +125 -0
- package/dist/explore-feature.js +218 -0
- package/dist/explore-feature.js.map +1 -0
- package/dist/explore-goal.d.ts +271 -0
- package/dist/explore-goal.js +417 -0
- package/dist/explore-goal.js.map +1 -0
- package/dist/explore-shared.d.ts +177 -0
- package/dist/explore-shared.js +149 -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 +63 -0
- package/dist/fixture-auth.js +95 -0
- package/dist/fixture-auth.js.map +1 -0
- package/dist/fixture-cli.d.ts +99 -0
- package/dist/fixture-cli.js +292 -0
- package/dist/fixture-cli.js.map +1 -0
- package/dist/github-issue-filer.d.ts +62 -0
- package/dist/github-issue-filer.js +189 -0
- package/dist/github-issue-filer.js.map +1 -0
- package/dist/host-health-run.d.ts +25 -0
- package/dist/host-health-run.js +33 -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 +156 -0
- package/dist/init-cli.js.map +1 -0
- package/dist/init-keys.d.ts +30 -2
- package/dist/init-keys.js +19 -5
- 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 +269 -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 +181 -0
- package/dist/journey-annotate-cli.js.map +1 -0
- package/dist/journey-api.d.ts +104 -2
- package/dist/journey-api.js +163 -20
- package/dist/journey-api.js.map +1 -1
- package/dist/journey-cli.d.ts +4 -0
- package/dist/journey-cli.js +411 -0
- package/dist/journey-cli.js.map +1 -0
- package/dist/journey-demo-api.d.ts +114 -0
- package/dist/journey-demo-api.js +405 -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 +158 -0
- package/dist/journey-demo-cli.js.map +1 -0
- package/dist/journey-prefix.d.ts +194 -0
- package/dist/journey-prefix.js +279 -0
- package/dist/journey-prefix.js.map +1 -0
- package/dist/key-report.d.ts +49 -0
- package/dist/key-report.js +101 -0
- package/dist/key-report.js.map +1 -0
- package/dist/kill-signal.d.ts +193 -0
- package/dist/kill-signal.js +283 -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 +239 -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 +200 -0
- package/dist/log-correlation.js +394 -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 +236 -0
- package/dist/log-sources.js.map +1 -0
- package/dist/log-trace.d.ts +80 -0
- package/dist/log-trace.js +210 -0
- package/dist/log-trace.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 +85 -0
- package/dist/logs-retention.js.map +1 -0
- package/dist/masked-input.d.ts +22 -0
- package/dist/masked-input.js +99 -0
- package/dist/masked-input.js.map +1 -0
- package/dist/mcp-api.d.ts +91 -1
- package/dist/mcp-api.js +514 -18
- package/dist/mcp-api.js.map +1 -1
- package/dist/mcp-args.d.ts +50 -0
- package/dist/mcp-args.js +164 -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 +129 -0
- package/dist/mcp-cli-tools.js +737 -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 +60 -3
- package/dist/mission-api.js.map +1 -1
- package/dist/mission-cli.d.ts +4 -0
- package/dist/mission-cli.js +248 -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 +234 -0
- package/dist/mission-fixtures.js +862 -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 +406 -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 +116 -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 +64 -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 +123 -1921
- package/dist/program.js.map +1 -1
- package/dist/project-dir.d.ts +96 -0
- package/dist/project-dir.js +221 -0
- package/dist/project-dir.js.map +1 -0
- package/dist/record-api.d.ts +13 -7
- package/dist/record-api.js +44 -30
- package/dist/record-api.js.map +1 -1
- package/dist/record-cli.d.ts +4 -0
- package/dist/record-cli.js +76 -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 +107 -0
- package/dist/regression-api.js +387 -6
- package/dist/regression-api.js.map +1 -1
- package/dist/regression-cli.d.ts +4 -0
- package/dist/regression-cli.js +284 -0
- package/dist/regression-cli.js.map +1 -0
- package/dist/report-api.d.ts +146 -0
- package/dist/report-api.js +431 -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/resource-preflight.d.ts +87 -0
- package/dist/resource-preflight.js +160 -0
- package/dist/resource-preflight.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-key-preflight.d.ts +42 -0
- package/dist/run-key-preflight.js +82 -0
- package/dist/run-key-preflight.js.map +1 -0
- package/dist/run-screenshots.d.ts +123 -0
- package/dist/run-screenshots.js +235 -0
- package/dist/run-screenshots.js.map +1 -0
- package/dist/runtime-env.d.ts +8 -0
- package/dist/runtime-env.js +23 -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 +36 -0
- package/dist/server-log-verify.js +120 -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 +59 -0
- package/dist/site-gate-cli.js.map +1 -0
- package/dist/source-api.js +20 -4
- 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 +321 -0
- package/dist/suite-explore-options.js +162 -0
- package/dist/suite-explore-options.js.map +1 -0
- package/dist/target-config.d.ts +115 -0
- package/dist/target-config.js +225 -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/type-fixture-file.d.ts +9 -0
- package/dist/type-fixture-file.js +48 -0
- package/dist/type-fixture-file.js.map +1 -0
- package/dist/ui-api.d.ts +3 -0
- package/dist/ui-api.js +11 -4
- package/dist/ui-api.js.map +1 -1
- package/dist/usability-capture.d.ts +43 -0
- package/dist/usability-capture.js +327 -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-claim-probe.d.ts +45 -0
- package/dist/ux-claim-probe.js +386 -0
- package/dist/ux-claim-probe.js.map +1 -0
- package/dist/ux-cli.d.ts +4 -0
- package/dist/ux-cli.js +109 -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-product.d.ts +14 -0
- package/dist/ux-product.js +39 -0
- package/dist/ux-product.js.map +1 -0
- package/dist/ux-review.d.ts +116 -0
- package/dist/ux-review.js +171 -0
- package/dist/ux-review.js.map +1 -0
- package/dist/ux-usability.d.ts +263 -0
- package/dist/ux-usability.js +580 -0
- package/dist/ux-usability.js.map +1 -0
- package/dist/verify-fix-api.d.ts +194 -0
- package/dist/verify-fix-api.js +506 -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 +115 -0
- package/dist/verify-fix-cli.js.map +1 -0
- package/package.json +23 -18
- package/skills/jevitate-ci-check/SKILL.md +77 -0
- package/skills/jevitate-demo/SKILL.md +61 -0
- package/skills/jevitate-explore/SKILL.md +96 -87
- package/skills/jevitate-getting-started/SKILL.md +89 -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-test-campaign/SKILL.md +203 -0
- package/skills/jevitate-ux-review/SKILL.md +106 -16
- package/skills/jevitate-verify-fix/SKILL.md +76 -0
|
@@ -0,0 +1,89 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: jevitate-getting-started
|
|
3
|
+
description: Start here for any jevitate task, or when unsure which jevitate skill applies — checks setup (keys, .jevitate/, MCP), gets a first useful result against the user's app URL, routes to the right skill (explore, run-journey, record, demo, verify-fix, ci-check, ux-review, load-test, sources, mission-scope, test-campaign), and says when to use the jevitate MCP tools vs the CLI, what the exit codes mean, and which approvals only a human may give.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
Jevitate tests a web app in a real browser and returns evidence: typed outcomes, exit codes,
|
|
7
|
+
Recordings, replayable Journeys, videos and screenshots. You never drive the browser yourself.
|
|
8
|
+
You pick the command, pass it the user's intent, and report what came back honestly.
|
|
9
|
+
|
|
10
|
+
## 1. Check the setup (once per session)
|
|
11
|
+
|
|
12
|
+
- `jevitate ai status --json` shows which AI features have their keys, by name only, never a value.
|
|
13
|
+
Goal runs, authoring, demos and UX reviews need `generation` and `judgment` (`--real`). Without
|
|
14
|
+
them, use a key-free command (see step 2), or ask the human to run `jevitate ai setup generation`
|
|
15
|
+
and `jevitate ai setup judgment` themselves. Setup is interactive. Never ask for a key in chat.
|
|
16
|
+
- The repo has a `.jevitate/` directory (Journeys, regressions, baselines, logs and
|
|
17
|
+
`environments.json`). If it's missing, the human runs `jevitate init` (it also installs these
|
|
18
|
+
skills and registers the MCP server). `jevitate init --dry-run` changes nothing.
|
|
19
|
+
- The app must be running and the human must have authorized its URL. Jevitate only acts on an
|
|
20
|
+
authorized origin (`--url`'s own origin, or an explicit `--allow` list). It refuses a production
|
|
21
|
+
target for authoring runs and demos. Never widen the allowlist on your own.
|
|
22
|
+
|
|
23
|
+
## 2. A first useful result
|
|
24
|
+
|
|
25
|
+
| The user has | Run |
|
|
26
|
+
| --- | --- |
|
|
27
|
+
| keys, and a task a user does | `jevitate explore --url <app-url> --goal "<task>" --success "urlIncludes:/<done-path>" --real --json` |
|
|
28
|
+
| keys, and a question about the app | `jevitate explore --url <app-url> --goal "find out <question>; report the answer" --real --json` (read-only by default) |
|
|
29
|
+
| no keys | `jevitate explore --strategy adversarial --url <app-url> --fake-ai --json`: misuse is planned in code, and the findings (HTTP 5xx, uncaught errors, hangs, invariant violations) come from hard signals, not a model |
|
|
30
|
+
| no keys, one feature | `jevitate explore --feature <name> --route "/<area>/**" --url <app-url> --json` (model-free) |
|
|
31
|
+
|
|
32
|
+
Then pick the matching skill:
|
|
33
|
+
|
|
34
|
+
| The user wants to | Skill |
|
|
35
|
+
| --- | --- |
|
|
36
|
+
| explore, find bugs, or check that a goal is reachable | `jevitate-explore` |
|
|
37
|
+
| know what to test after a diff or PR | `jevitate-mission-scope` |
|
|
38
|
+
| replay a known flow (a saved Journey) | `jevitate-run-journey` |
|
|
39
|
+
| record a flow they click through | `jevitate-record` |
|
|
40
|
+
| get a narrated demo video or a step-by-step guide | `jevitate-demo` |
|
|
41
|
+
| reproduce a finding, prove a fix, attach evidence to a PR, or lock a bug in as a regression | `jevitate-verify-fix` |
|
|
42
|
+
| gate CI (JUnit, SARIF, baselines, a defect report) | `jevitate-ci-check` |
|
|
43
|
+
| get a usability critique | `jevitate-ux-review` |
|
|
44
|
+
| run a load test | `jevitate-load-test` |
|
|
45
|
+
| share or run third-party Journeys | `jevitate-sources` |
|
|
46
|
+
| test a whole release end to end (many user jobs, a QA sweep) | `jevitate-test-campaign` |
|
|
47
|
+
|
|
48
|
+
## 3. MCP tools or the CLI
|
|
49
|
+
|
|
50
|
+
- If the jevitate MCP tools are in your tool list (`init` registers `jevitate mcp` for Claude
|
|
51
|
+
Code, Cursor and Codex), use them. They take typed arguments named after the CLI flags
|
|
52
|
+
(`--storage-state` becomes `storageState`), run the same command in process, and return
|
|
53
|
+
`{exitCode, data}`. Exit 2 (proved nothing) and every refusal come back as MCP errors
|
|
54
|
+
(`invalid_args` or `refused`, with the `E_…` code), never as a pass.
|
|
55
|
+
- Otherwise use the CLI with `--json`: one line on stdout, `{v, ok, data}` or
|
|
56
|
+
`{v, ok: false, error: {code, message}}`. Read the exit code as well.
|
|
57
|
+
- Common pairs: `run_exploration` = `explore`, `queue_exploration` + `run_queued_missions` +
|
|
58
|
+
`get_mission_result` = `mission queue` + `mission run` + `mission result`,
|
|
59
|
+
`find_capabilities`/`run_journey` = `journey find`/`journey run`, `author_journey` =
|
|
60
|
+
`explore-author-journey`, `create_demo`/`demo_journey` = `demo`/`journey demo`, `verify_fix` =
|
|
61
|
+
`verify-fix`, `regressions` = `regression capture|run`, `ledger` = `ledger …`, `run_check` =
|
|
62
|
+
`check`, `get_report` = `report`, `ux_review` = `ux`. The full table is in the jevitate repo's
|
|
63
|
+
`docs/agents.md`.
|
|
64
|
+
- These are never available over MCP: `record` (a person clicks), `init`, `ai setup` (secret entry),
|
|
65
|
+
`ui`, `source trust` and `source add --accept-tou`. Operator settings are never tool arguments
|
|
66
|
+
either: shell hooks, browser binaries, which environment variable a secret comes from, and
|
|
67
|
+
log-command sources. Tell the human the CLI command instead.
|
|
68
|
+
- Raw browser tools (click, fill, evaluate, get DOM or cookies) don't exist on purpose. Never
|
|
69
|
+
swap in another browser-automation tool to get around a refusal.
|
|
70
|
+
|
|
71
|
+
## 4. Decisions that belong to the human
|
|
72
|
+
|
|
73
|
+
Only do these when the human has asked for that specific action in this conversation. Before
|
|
74
|
+
you do, show them what they are approving:
|
|
75
|
+
|
|
76
|
+
- promoting a Journey: `jevitate journey promote <id>` / `promote_journey`
|
|
77
|
+
- applying drafted annotations: `jevitate journey annotate <id> --approve` / `annotate_journey` with `approve: true`
|
|
78
|
+
- approving a demo, which promotes its Journey: `jevitate demo approve <id>` / `approve_demo`
|
|
79
|
+
- promoting a mission target: `jevitate mission target promote <id>`
|
|
80
|
+
- trusting a third-party Journey or accepting a source's Terms of Use (CLI only)
|
|
81
|
+
- approving or cancelling an inbox item: only in `jevitate ui`. The MCP tools `approve_action` and `cancel_command` always refuse.
|
|
82
|
+
|
|
83
|
+
## 5. Exit codes (every command)
|
|
84
|
+
|
|
85
|
+
`0` clean / passed / fixed · `1` defects found, a gating finding, or still reproduces · `2`
|
|
86
|
+
inconclusive: the run proved nothing, so never report it as a pass · `3` the app hung (reproduced) ·
|
|
87
|
+
`4` intermittent · `64` usage error, nothing ran (bad flag, unknown id, missing keys
|
|
88
|
+
`E_AI_SETUP_REQUIRED`, target not allowed) · `130`/`143` interrupted, but the partial result was
|
|
89
|
+
written. Report the outcome the tool gave you. Never round it up.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jevitate-load-test
|
|
3
|
-
description:
|
|
3
|
+
description: Run a seeded, human-paced concurrent load test of a promoted jevitate Journey (`jevitate load run`, MCP `run_load_test`) against an origin the human explicitly authorized, optionally on a named environment (`--env`). Use when the user wants capacity, throughput or latency numbers. For a single functional run, use jevitate-run-journey.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
You scope and run a throughput/capacity measurement, never a single functional
|
|
@@ -19,12 +19,21 @@ check (use `jevitate-run-journey` for that instead).
|
|
|
19
19
|
|
|
20
20
|
- `jevitate load run <journeyId> --authorized-origin <origin> [--authorized-origin
|
|
21
21
|
<origin2> ...] --param k=v --concurrency <n> --iterations <n> --seed <n>
|
|
22
|
-
--json`.
|
|
22
|
+
[--storage-state <file>] --json`.
|
|
23
23
|
- `<journeyId>` must be a promoted Journey id (same discovery flow as
|
|
24
24
|
`jevitate-run-journey`: `jevitate journey find`/`find_capabilities` first).
|
|
25
|
+
- `--env <name>` / `--base-url <origin>` runs it against a named environment
|
|
26
|
+
(`.jevitate/environments.json`) instead of the recorded site; the
|
|
27
|
+
`--authorized-origin` must still name that origin explicitly.
|
|
28
|
+
- MCP: `run_load_test` takes the same arguments (`authorizedOrigin`,
|
|
29
|
+
`concurrency`, `iterations`, `seed`, …).
|
|
25
30
|
- `--seed` makes the run reproducible — if the human wants to compare two
|
|
26
31
|
configurations, keep the seed fixed and vary only `--concurrency`/
|
|
27
32
|
`--iterations`.
|
|
33
|
+
- `--storage-state <file>` seeds EVERY pool member's session from the same
|
|
34
|
+
Playwright storageState file (the same authenticated pre-step as `jevitate
|
|
35
|
+
journey run` — see `jevitate-run-journey`), for load-testing a Journey that
|
|
36
|
+
needs an authenticated session.
|
|
28
37
|
|
|
29
38
|
## Reading the result
|
|
30
39
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jevitate-mission-scope
|
|
3
|
-
description:
|
|
3
|
+
description: Turn a diff, pull request, changelog or user story into targeted jevitate testing. Finds at-risk routes and features, maps them to promoted Journeys (`journey find` / `find_capabilities`) and runs those, scopes bounded missions where nothing covers a gap (including queued missions on promoted targets), and recommends which new repros to promote or capture as regressions. Use when the user asks "what should I test?" after a code change, or wants a change-scoped check.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
You scope testing to what actually changed. You never drive a browser yourself —
|
|
@@ -54,6 +54,8 @@ tool to scope a **bounded** mission at the specific at-risk area:
|
|
|
54
54
|
--url <authorized-url>` (bounded misuse + a trusted hard-signal defect oracle).
|
|
55
55
|
- For state coverage of the changed area: `jevitate explore --strategy coverage
|
|
56
56
|
--url <authorized-url>`.
|
|
57
|
+
- In CI, the same scoping is `jevitate check --suite <file> --changed-routes '<glob>'`: only the
|
|
58
|
+
Journeys and goals touching those routes run (see `jevitate-ci-check`).
|
|
57
59
|
- Only if you cannot reach an authorized target at all (or `jevitate explore`
|
|
58
60
|
is genuinely absent from your environment) do you stop and report the gap —
|
|
59
61
|
never fall back to a generic browser-automation tool; that would bypass every
|
|
@@ -86,22 +88,28 @@ quantity.
|
|
|
86
88
|
|
|
87
89
|
`queue_exploration` runs against a PROMOTED mission target, never a raw URL.
|
|
88
90
|
When you want to queue a scoped mission at an at-risk area via MCP:
|
|
89
|
-
- `jevitate mission target add <id> --
|
|
90
|
-
<
|
|
91
|
+
- `jevitate mission target add <id> --name <name> --authorized-origin
|
|
92
|
+
<authorized-origin> --base-url <url> [--description <text>] --json`
|
|
93
|
+
registers the target (unpromoted). Note the target's own registration takes
|
|
94
|
+
NO `--goal`/`--route` — those are `queue_exploration` call arguments
|
|
95
|
+
(`target`, `goal`, `feature`, `route`, ...), supplied per-enqueue, not baked
|
|
96
|
+
into the target itself.
|
|
91
97
|
- `jevitate mission target list --json` shows registered targets and their
|
|
92
98
|
promoted/unpromoted state.
|
|
93
99
|
- `jevitate mission target promote <id> --json` promotes it — a human-gated act,
|
|
94
|
-
same as Journey promotion. Only a promoted
|
|
100
|
+
same as Journey promotion (`jevitate journey promote <id>`). Only a promoted
|
|
101
|
+
target is enqueueable.
|
|
95
102
|
|
|
96
103
|
Then `queue_exploration({ target: "<id>", ... })` (via the `jevitate mcp`
|
|
97
104
|
server, registered with `jevitate mcp --print-config ...` or `jevitate init`)
|
|
98
105
|
enqueues a bounded mission and returns a `missionId`.
|
|
99
106
|
|
|
100
|
-
|
|
107
|
+
An app whose API lives on another origin declares it on the target:
|
|
108
|
+
`--authorized-origin <app-origin> --api-origin <api-origin>` (repeatable; each a
|
|
109
|
+
bare http(s) origin). A queued mission can reach only those origins.
|
|
101
110
|
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
`ai_generate_text`. Scoping and running work fully through those four.
|
|
111
|
+
Queued missions run when the queue is drained: `run_queued_missions` over MCP (it drains once),
|
|
112
|
+
or `jevitate mission run --once --real --json` (`--watch` keeps draining).
|
|
113
|
+
`get_mission_result({ id: missionId })` reports `queued`/`running` (`pending: true`), the typed
|
|
114
|
+
result once done, or `failed`. `queue_exploration` only enqueues — treat the returned `missionId`
|
|
115
|
+
as "accepted," not "finished," until the result says otherwise.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jevitate-record
|
|
3
|
-
description:
|
|
3
|
+
description: Record a flow the human clicks through (`jevitate record --url`, CLI only, headed), then post-process the takes: diff them, classify values as constants, variables or hand-backs (postdoc), fit a timing policy, and promote a value to a variable (`jevitate recording ...`, MCP `recordings`). Use when the user wants to demonstrate a flow themselves. If they want jevitate to find and save the flow for them, use `explore-author-journey` (jevitate-explore).
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
You drive Jevitate's human-driven authoring mode (RxD): capturing a take from a
|
|
@@ -13,16 +13,27 @@ headed browser demonstration a human performs — you launch it and they drive.
|
|
|
13
13
|
- `jevitate record --url <authorized-url> [--intent "<framing>"] [--retro
|
|
14
14
|
"<note>"] [--allow <origin>] [--out <dir>] --json` opens a headed browser at
|
|
15
15
|
an authorized origin and records the human's demonstrated flow into a
|
|
16
|
-
`Recording` JSON file (default
|
|
16
|
+
`Recording` JSON file (default `.jevitate/logs/<date>/` in the repo, else
|
|
17
|
+
`~/.jevitate/logs/<date>/`). The session is
|
|
17
18
|
headed by design — a record session IS a live human demonstration; add
|
|
18
19
|
`--headless` only when a caller explicitly asks. The target must be
|
|
19
|
-
authorized (
|
|
20
|
-
`--
|
|
21
|
-
|
|
20
|
+
authorized (`--allow` REPLACES the default allowlist when given at all —
|
|
21
|
+
it defaults to `--url`'s own origin only when `--allow` is omitted
|
|
22
|
+
entirely; include that origin explicitly in `--allow` if you still need
|
|
23
|
+
it), and an unauthorized target is refused (`E_UNAUTHORIZED_EXPLORE_TARGET`).
|
|
24
|
+
- **Ending a take**: press Enter on stdin, or send SIGINT (Ctrl-C) — both end
|
|
25
|
+
the take the SAME way (the demonstrated steps are stopped and written to
|
|
26
|
+
disk). This matters most for `--headless`, where there is no visible
|
|
27
|
+
window to interact with: Ctrl-C is the way to end a headless take, and it
|
|
28
|
+
saves the take rather than killing the process and losing it.
|
|
22
29
|
- The emitted `recordingPath` is the take you then feed into the diff/postdoc
|
|
23
30
|
flow below. Capture two or more takes of the same flow (varying the data each
|
|
24
31
|
time) when you want `diff` to classify which values are variables.
|
|
25
32
|
|
|
33
|
+
- `record` is never an MCP tool (a person does the clicking). As an agent, give the human the
|
|
34
|
+
command to run, and wait for the `recordingPath` it prints. `diff`/`fit`/`postdoc`/`promote`
|
|
35
|
+
are available over MCP as the `recordings` tool (`action`).
|
|
36
|
+
|
|
26
37
|
## Diff multiple takes
|
|
27
38
|
|
|
28
39
|
- `jevitate recording diff <takeA.json> <takeB.json> [more.json...] --json` —
|
|
@@ -30,6 +41,13 @@ headed browser demonstration a human performs — you launch it and they drive.
|
|
|
30
41
|
(constant vs. likely-variable) with a confidence score. Read the confidences;
|
|
31
42
|
do not treat a low-confidence classification as settled — surface it to the
|
|
32
43
|
human via `postdoc` instead of deciding for them.
|
|
44
|
+
- **Input shape**: `diff`/`postdoc` accept ONLY a `jevitate record`-produced
|
|
45
|
+
take file — `{ "recording": <Recording>, "values": {...} }`. A raw
|
|
46
|
+
`Recording` (what `explore`, `explore-author-journey`, or a usability run
|
|
47
|
+
write directly — `{version, site, pages, ...}` with no `recording`/`values`
|
|
48
|
+
wrapper) is refused with a clear `E_INVALID_TAKE` message naming the
|
|
49
|
+
mismatch, not a zod dump. Wrap a raw Recording as `{ "recording": <it>,
|
|
50
|
+
"values": {} }` first if you need to diff/postdoc one.
|
|
33
51
|
|
|
34
52
|
## Review and classify (postdoc)
|
|
35
53
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jevitate-run-journey
|
|
3
|
-
description: Find and
|
|
3
|
+
description: Find and replay a promoted jevitate Journey (a saved, deterministic browser flow such as a login, checkout or form submission) by id with typed params, on any named environment (`--env`/`--base-url`), optionally with video and screenshots and self-heal. Runs via `jevitate journey find|run` or MCP `find_capabilities`/`run_journey`. Also covers promoting (human-only). Use when a known flow should be re-run or regression-checked, not explored or recorded fresh.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
You drive already-published, promoted Jevitate Journeys. You never write or invent
|
|
@@ -25,13 +25,43 @@ artifact; your job is to find the right one and run it with the right params.
|
|
|
25
25
|
Every param the `find`/`find_capabilities` result listed under `params` is
|
|
26
26
|
required; passing an unknown param key is a refusal (`E_INVALID_PARAMS`), not
|
|
27
27
|
a silent ignore. An unknown id is `E_UNKNOWN_JOURNEY`.
|
|
28
|
-
- MCP: `run_journey(id, params)` — same param-schema
|
|
29
|
-
an unknown id or params. It NEVER accepts inline
|
|
30
|
-
a published id only.
|
|
28
|
+
- MCP: `run_journey({ id, params, storageState? })` — same param-schema
|
|
29
|
+
validation, same refusal on an unknown id or params. It NEVER accepts inline
|
|
30
|
+
steps or a raw recording — a published id only.
|
|
31
31
|
- Read the JSON envelope's `outcome` field. `"ok"` and `"healed"` (a run that
|
|
32
|
-
recovered via self-heal) are both successes; `"quarantined"` (
|
|
33
|
-
value, including a secret-handback pause
|
|
34
|
-
that honestly,
|
|
32
|
+
recovered via self-heal) are both successes (exit 0); `"quarantined"` (exit 1)
|
|
33
|
+
and any other value, including a secret-handback pause, mean it did not
|
|
34
|
+
complete — report that honestly, with the step it stopped at. Exit 64 is a
|
|
35
|
+
refusal before anything ran (unknown id, bad params, a step off the allowlist).
|
|
36
|
+
|
|
37
|
+
## Where it runs (`--env`) and what it records
|
|
38
|
+
|
|
39
|
+
- `--env <name>` replays on a named environment from the repo's
|
|
40
|
+
`.jevitate/environments.json` (its `baseUrl` plus `allow`); `--base-url <origin>`
|
|
41
|
+
is an ad-hoc one (e.g. a preview deploy). Without either, the Journey runs on
|
|
42
|
+
the site it was recorded on. A step on an origin the environment doesn't allow
|
|
43
|
+
is refused (64) before any browser opens. MCP: `run_journey`'s `env`/`baseUrl`.
|
|
44
|
+
- Evidence: `--record-video` (listed as `videoPaths`), `--screenshots
|
|
45
|
+
[screens|steps]` (`screenshotPaths` + an `index.md`), `--headed`/`--slow-mo <ms>`
|
|
46
|
+
to watch it. `--viewport 375x812` / `--device "iPhone 13"` for mobile.
|
|
47
|
+
- For a narrated demo video or a step-by-step guide of a Journey, use
|
|
48
|
+
`jevitate-demo` (`journey demo`, `journey annotate`).
|
|
49
|
+
|
|
50
|
+
## Authenticated Journeys (#118)
|
|
51
|
+
|
|
52
|
+
- A Journey authored behind a login needs a deterministic authenticated
|
|
53
|
+
pre-step to replay: `--storage-state <file>` (a Playwright storageState JSON
|
|
54
|
+
path — cookies + origin storage) on `jevitate journey run`, `jevitate load
|
|
55
|
+
run`, and `jevitate source run`; over MCP, `run_journey`'s optional
|
|
56
|
+
`storageState` argument is the SAME thing — a file PATH on the machine
|
|
57
|
+
running the MCP server, never raw cookie/session content in the call itself.
|
|
58
|
+
The file's contents are read only by the browser session; never logged,
|
|
59
|
+
never echoed back.
|
|
60
|
+
- A Journey CAN declare `metadata.requiresAuth: true` if it only reaches its
|
|
61
|
+
steps from an authenticated session. A run given no `storageState` then
|
|
62
|
+
fails fast — before any browser opens — with `E_JOURNEY_REQUIRES_AUTH`
|
|
63
|
+
naming the actual problem, instead of a confusing deep
|
|
64
|
+
`replay-target-not-found` partway through the steps.
|
|
35
65
|
|
|
36
66
|
## Self-heal (optional, additive)
|
|
37
67
|
|
|
@@ -54,19 +84,33 @@ artifact; your job is to find the right one and run it with the right params.
|
|
|
54
84
|
result in this same session — a promoted id can be revoked; don't rely on a
|
|
55
85
|
memorized id from an earlier conversation.
|
|
56
86
|
|
|
87
|
+
## Promoting a Journey
|
|
88
|
+
|
|
89
|
+
- `jevitate journey promote <id> --json` promotes a local Journey — a
|
|
90
|
+
deliberate human-approval gate (mirrors `mission target promote`'s
|
|
91
|
+
semantics), never automatic — run it (or MCP `promote_journey`) only when
|
|
92
|
+
the human tells you to. Every authored/recorded Journey starts
|
|
93
|
+
`metadata.promoted: false` (`explore-author-journey`, `jevitate record` +
|
|
94
|
+
`recording postdoc`); only a promoted Journey is discoverable via `journey
|
|
95
|
+
find`/`find_capabilities` and runnable via `journey run`/`run_journey`.
|
|
96
|
+
There is still no "raw Recording -> promoted Journey in one step" command —
|
|
97
|
+
a Recording becomes a Journey first (through an authoring path, or the
|
|
98
|
+
`JourneyRegistry` API), then `journey promote <id>` promotes it.
|
|
99
|
+
|
|
100
|
+
## Step intent (annotations)
|
|
101
|
+
|
|
102
|
+
- `journey run` reports `intent.withoutObjective` (steps with no stated objective). It is
|
|
103
|
+
informational and never a failure. Drafting and approving objectives is `journey annotate`
|
|
104
|
+
(see `jevitate-demo`); `--approve` is the human's call, like promote.
|
|
105
|
+
|
|
57
106
|
## Publishing to a distributed source
|
|
58
107
|
|
|
59
108
|
- `jevitate journey publish <id> --to <source>` pushes a PROMOTED local Journey
|
|
60
109
|
up to a registered distributed source (see `jevitate-sources`). It preserves
|
|
61
110
|
every publish-side guard: promoted-only, secret-references-only, and
|
|
62
111
|
declared-origin coverage; it writes onto a new `publish/<id>` branch and,
|
|
63
|
-
when `gh` is present, opens a PR.
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
becomes a Journey through the authoring paths (`jevitate
|
|
69
|
-
explore-author-journey`, which writes an UNPROMOTED Journey a human still
|
|
70
|
-
promotes) or the `JourneyRegistry` API, and promotion stays a deliberate
|
|
71
|
-
human gate. If a user asks you to "promote this recording," recommend those
|
|
72
|
-
paths rather than guessing at a promote command — do not invent one.
|
|
112
|
+
when `gh` is present, opens a PR. When `gh` is absent, or a PR can't be
|
|
113
|
+
opened (e.g. the remote isn't GitHub), the branch is still pushed and the
|
|
114
|
+
command still reports success (`pushed: true`, no PR) with instructions to
|
|
115
|
+
open one manually — pushing the branch is never reported as a failure. It
|
|
116
|
+
never publishes an unpromoted Journey.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: jevitate-sources
|
|
3
|
-
description:
|
|
3
|
+
description: Share Journeys across repos and teams with jevitate's git-backed sources. Covers add/list/pull/update/remove (`jevitate source ...`, MCP `sources`), human-only trust of a single Journey (content-hash-bound), running a trusted remote Journey through the run-gate (`source run`), and publishing a promoted local Journey (`journey publish`, MCP `publish_journey`). Use for third-party or shared Journeys. For a Journey already in this repo, use jevitate-run-journey.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
You add, trust, run, and publish federated Journeys across git-backed sources.
|
|
@@ -18,6 +18,41 @@ invokable surface, not a programmatic-only capability.
|
|
|
18
18
|
"risky"`), and `trusted` (whether this project has acknowledged that exact
|
|
19
19
|
content). Trust is LOCAL and per-user; it is bound to a content hash, so any
|
|
20
20
|
change to a Journey's content invalidates its trust until re-approved.
|
|
21
|
+
- `riskClass` is engine-derived, not author-declared: a Journey is
|
|
22
|
+
`"read-only"` iff every step is a `navigate`/`waitFor`/`extract`/`assert`, or
|
|
23
|
+
a `click` whose target has ARIA role `link` (following a link reads a page,
|
|
24
|
+
it does not mutate anything), AND every absolute `navigate` stays within
|
|
25
|
+
`declaredOrigins`. Anything else — a non-link `click` (e.g. a button),
|
|
26
|
+
`fill`/`select`/`press`/`handback`, or a navigate that could leave
|
|
27
|
+
`declaredOrigins` — is conservatively `"risky"` and needs `source trust`
|
|
28
|
+
before it can run.
|
|
29
|
+
|
|
30
|
+
- Simpler, for Journeys your own team shares: mount a Journeys repo as a git submodule under
|
|
31
|
+
`.jevitate/journeys/<name>/`. Its Journeys appear as `<name>/<id>` in `journey list`/`find`/`run`,
|
|
32
|
+
`check` and the MCP tools, and the submodule pin is reviewed like code. Use sources (below) for
|
|
33
|
+
third-party Journeys that need Terms of Use and per-Journey trust.
|
|
34
|
+
|
|
35
|
+
## The source manifest shape
|
|
36
|
+
|
|
37
|
+
A source repo (what `source add <name> <gitUrl>` clones) needs exactly this at
|
|
38
|
+
its root, or `source add`/`source update` refuse with `E_SOURCE_INVALID_MANIFEST`:
|
|
39
|
+
|
|
40
|
+
- `jevitate.json` — `{ "version": 1, "source": "<name>", "sites": [{ "origin":
|
|
41
|
+
"<https://...>", "automationPolicy": "allowed", "touBasis": "<free text>" }, ...] }`.
|
|
42
|
+
`sites` declares every origin this source's Journeys are authorized to touch
|
|
43
|
+
and the Terms-of-Use basis for each; `source add --accept-tou` acknowledges
|
|
44
|
+
ALL of them together.
|
|
45
|
+
- `journeys/*.journey.json` — one file per shared Journey: an ordinary
|
|
46
|
+
`Journey` (`{ metadata, recording }`, same shape `jevitate journey list`
|
|
47
|
+
reads) PLUS a top-level `declaredOrigins: string[]` (at least one absolute
|
|
48
|
+
URL) — the origins THIS Journey is authorized to touch, which must all
|
|
49
|
+
appear in the manifest's `sites`. `jevitate journey publish` writes this
|
|
50
|
+
file for you (deriving `declaredOrigins` from the Journey's absolute
|
|
51
|
+
`navigate` steps, or from `recording.site` when its navigates are relative —
|
|
52
|
+
e.g. an `explore-author-journey`-authored Journey — or from an explicit
|
|
53
|
+
`--declare-origin`); a hand-authored source repo must match this shape
|
|
54
|
+
exactly, `.strict()` — unknown/missing keys fail the whole load, one bad
|
|
55
|
+
file at a time (never a silent partial list).
|
|
21
56
|
|
|
22
57
|
## Add and manage sources
|
|
23
58
|
|
|
@@ -42,10 +77,12 @@ invokable surface, not a programmatic-only capability.
|
|
|
42
77
|
|
|
43
78
|
## Run a trusted remote Journey (through the run-gate)
|
|
44
79
|
|
|
45
|
-
- `jevitate source run <name> <journeyId> --param k=v ... --
|
|
46
|
-
remote-source Journey THROUGH `@jevitate/sources`'
|
|
47
|
-
|
|
48
|
-
|
|
80
|
+
- `jevitate source run <name> <journeyId> --param k=v ... [--storage-state
|
|
81
|
+
<file>] --json` runs a remote-source Journey THROUGH `@jevitate/sources`'
|
|
82
|
+
`resolveForRun` gate. `--storage-state` is the same authenticated pre-step
|
|
83
|
+
as `jevitate journey run` (see `jevitate-run-journey`), for a source Journey
|
|
84
|
+
that needs one. Every refusal is a typed error thrown BEFORE any browser
|
|
85
|
+
launches, each with its own code so a caller knows WHY:
|
|
49
86
|
- `E_SOURCE_RUN_HASH_MISMATCH` — the pinned content no longer matches what was
|
|
50
87
|
trusted.
|
|
51
88
|
- `E_SOURCE_RUN_UNTRUSTED` — a `risky` Journey that was never trusted.
|
|
@@ -63,10 +100,16 @@ invokable surface, not a programmatic-only capability.
|
|
|
63
100
|
- `jevitate journey publish <id> --to <source> [--declare-origin <origin> ...]
|
|
64
101
|
[--as <newId>] --json` pushes a PROMOTED local Journey up to a registered
|
|
65
102
|
source. It preserves every publish-side guard (promoted-only,
|
|
66
|
-
secret-references-only, declared-origin coverage
|
|
67
|
-
`
|
|
68
|
-
|
|
69
|
-
|
|
103
|
+
secret-references-only, declared-origin coverage — derived from the
|
|
104
|
+
Journey's absolute `navigate` steps, or from `recording.site` when they are
|
|
105
|
+
relative), writes onto a new `publish/<id>` branch, and opens a PR when `gh`
|
|
106
|
+
is present. The branch push is reported as `pushed: true` regardless of
|
|
107
|
+
whether a PR could be opened: when `gh` is absent, OR `gh` is present but
|
|
108
|
+
`gh pr create` fails (e.g. the remote isn't GitHub), the result still comes
|
|
109
|
+
back `ok: true` with `pushed: true` and no `prUrl`, plus printed
|
|
110
|
+
instructions to open the PR manually — the push already happened by that
|
|
111
|
+
point, so a PR failure is never reported as a publish failure. It refuses an
|
|
112
|
+
unpromoted Journey (`E_JOURNEY_PUBLISH_NOT_PROMOTED`) and an embedded secret
|
|
70
113
|
(`E_JOURNEY_PUBLISH_SECRET`).
|
|
71
114
|
|
|
72
115
|
## What you must never do
|
|
@@ -80,9 +123,9 @@ invokable surface, not a programmatic-only capability.
|
|
|
80
123
|
- Never widen a Journey's declared origins on publish beyond what the human
|
|
81
124
|
authorized just to make coverage pass.
|
|
82
125
|
|
|
83
|
-
##
|
|
126
|
+
## MCP
|
|
84
127
|
|
|
85
|
-
-
|
|
86
|
-
`
|
|
87
|
-
|
|
88
|
-
|
|
128
|
+
- The `sources` tool takes `add`/`list`/`pull`/`update`/`remove`/`run` as its `action` (the same
|
|
129
|
+
gate and refusals as the CLI), and `publish_journey` mirrors `journey publish`. Accepting a
|
|
130
|
+
source's Terms of Use (`source add --accept-tou`) and `source trust` are CLI-only on purpose:
|
|
131
|
+
they are the human's consent, so tell the human the command instead of looking for a tool.
|