@sanity/ailf 3.7.0 → 3.8.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 (77) hide show
  1. package/config/airbyte/ai_literacy_framework.connector.yaml +1 -1
  2. package/config/thresholds.ts +3 -3
  3. package/dist/_vendor/ailf-core/examples/index.d.ts +2 -2
  4. package/dist/_vendor/ailf-core/examples/index.js +2 -2
  5. package/dist/_vendor/ailf-core/ports/context.d.ts +0 -4
  6. package/dist/_vendor/ailf-core/schemas/eval-config.d.ts +38 -12
  7. package/dist/_vendor/ailf-core/schemas/eval-config.js +102 -22
  8. package/dist/_vendor/ailf-core/schemas/pipeline-request.d.ts +4 -6
  9. package/dist/_vendor/ailf-core/schemas/pipeline-request.js +1 -3
  10. package/dist/_vendor/ailf-core/schemas/schedules.d.ts +2 -2
  11. package/dist/_vendor/ailf-shared/run-classification.d.ts +2 -2
  12. package/dist/_vendor/ailf-shared/run-classification.js +1 -1
  13. package/dist/_vendor/ailf-shared/run-context.d.ts +1 -1
  14. package/dist/adapters/api-client/build-request.d.ts +0 -2
  15. package/dist/adapters/api-client/build-request.js +2 -6
  16. package/dist/adapters/config-sources/cli-config-adapter.d.ts +1 -1
  17. package/dist/adapters/config-sources/file-config-adapter.d.ts +1 -1
  18. package/dist/adapters/config-sources/file-config-adapter.js +38 -12
  19. package/dist/adapters/task-sources/repo-schemas.d.ts +38 -0
  20. package/dist/adapters/task-sources/repo-schemas.js +127 -0
  21. package/dist/cli.d.ts +2 -2
  22. package/dist/cli.js +134 -38
  23. package/dist/commands/agent-report.js +1 -1
  24. package/dist/commands/calculate-scores.js +0 -2
  25. package/dist/commands/check-staleness.js +1 -1
  26. package/dist/commands/chronic-failures.js +4 -4
  27. package/dist/commands/coverage-audit.js +6 -7
  28. package/dist/commands/discovery-report.js +16 -4
  29. package/dist/commands/eval.d.ts +1 -1
  30. package/dist/commands/eval.js +1 -1
  31. package/dist/commands/explain-handler.d.ts +1 -1
  32. package/dist/commands/explain-handler.js +13 -44
  33. package/dist/commands/fetch-docs.js +0 -2
  34. package/dist/commands/generate-configs.js +0 -2
  35. package/dist/commands/grader/index.js +3 -3
  36. package/dist/commands/init.d.ts +2 -2
  37. package/dist/commands/init.js +10 -9
  38. package/dist/commands/interactive.d.ts +1 -1
  39. package/dist/commands/interactive.js +8 -8
  40. package/dist/commands/pipeline-action.d.ts +1 -3
  41. package/dist/commands/pipeline-action.js +174 -140
  42. package/dist/commands/pr-comment.js +1 -3
  43. package/dist/commands/publish.d.ts +1 -1
  44. package/dist/commands/publish.js +2 -4
  45. package/dist/commands/readiness-report.js +17 -8
  46. package/dist/commands/remote-pipeline.d.ts +1 -1
  47. package/dist/commands/remote-pipeline.js +1 -3
  48. package/dist/commands/run.d.ts +64 -0
  49. package/dist/commands/{pipeline.js → run.js} +19 -30
  50. package/dist/commands/shared/help.js +4 -4
  51. package/dist/commands/shared/options.d.ts +29 -3
  52. package/dist/commands/shared/options.js +37 -13
  53. package/dist/commands/validate-tasks.js +1 -1
  54. package/dist/commands/validate.d.ts +1 -1
  55. package/dist/commands/validate.js +2 -2
  56. package/dist/commands/weekly-digest.js +3 -3
  57. package/dist/config/thresholds.ts +3 -3
  58. package/dist/orchestration/build-app-context.js +0 -2
  59. package/dist/orchestration/build-step-sequence.js +1 -11
  60. package/dist/orchestration/steps/fetch-docs-step.js +1 -1
  61. package/dist/orchestration/steps/index.d.ts +0 -2
  62. package/dist/orchestration/steps/index.js +0 -2
  63. package/dist/orchestration/steps/run-eval-step.js +1 -1
  64. package/dist/pipeline/cache.d.ts +1 -1
  65. package/dist/pipeline/map-request-to-config.js +0 -2
  66. package/dist/pipeline/plan.d.ts +2 -4
  67. package/dist/pipeline/plan.js +4 -32
  68. package/dist/pipeline/run-context.d.ts +1 -1
  69. package/dist/pipeline/run-context.js +4 -4
  70. package/dist/pipeline/validate.d.ts +1 -1
  71. package/dist/pipeline/validate.js +1 -1
  72. package/package.json +7 -7
  73. package/dist/commands/pipeline.d.ts +0 -77
  74. package/dist/orchestration/steps/discovery-report-step.d.ts +0 -13
  75. package/dist/orchestration/steps/discovery-report-step.js +0 -62
  76. package/dist/orchestration/steps/readiness-step.d.ts +0 -13
  77. package/dist/orchestration/steps/readiness-step.js +0 -98
@@ -13,17 +13,29 @@ import { fileURLToPath } from "url";
13
13
  import { formatDiscoveryMarkdown, generateDiscoveryReport, } from "../pipeline/discovery-report.js";
14
14
  const __dirname = dirname(fileURLToPath(import.meta.url));
15
15
  const ROOT = resolve(__dirname, "..", "..");
16
+ const DEFAULT_RESULTS_DIR = join(ROOT, "results", "latest");
17
+ /** Resolve `--from-run` to an absolute path to score-summary.json. */
18
+ function resolveFromRun(value) {
19
+ if (value === "latest")
20
+ return join(DEFAULT_RESULTS_DIR, "score-summary.json");
21
+ // If the value points at a directory, look for score-summary.json inside it.
22
+ // Otherwise treat it as a direct file path.
23
+ const resolved = resolve(value);
24
+ return resolved.endsWith(".json")
25
+ ? resolved
26
+ : join(resolved, "score-summary.json");
27
+ }
16
28
  export function createDiscoveryReportCommand() {
17
- return new Command("discovery-report")
29
+ return new Command("discovery")
18
30
  .description("Generate agent discoverability report from retrieval metrics")
19
31
  .option("-a, --area <areas>", "Filter by feature areas (comma-separated)")
20
32
  .option("-o, --output <path>", "Write markdown to file instead of stdout")
21
- .option("-i, --input <path>", "Path to score-summary.json", join(ROOT, "results", "latest", "score-summary.json"))
33
+ .option("--from-run <path>", "Results to read from (`latest`, a results directory, or a direct path to score-summary.json)", "latest")
22
34
  .action(async (opts) => {
23
- const summaryPath = opts.input;
35
+ const summaryPath = resolveFromRun(opts.fromRun);
24
36
  if (!existsSync(summaryPath)) {
25
37
  console.error(`❌ Score summary not found: ${summaryPath}`);
26
- console.error("Run an agentic evaluation first: pnpm pipeline -- --mode agentic");
38
+ console.error("Run an agentic evaluation first: ailf run --mode agentic");
27
39
  process.exit(1);
28
40
  }
29
41
  const summary = JSON.parse(readFileSync(summaryPath, "utf-8"));
@@ -2,7 +2,7 @@
2
2
  * eval command — run promptfoo evaluation directly (passthrough).
3
3
  *
4
4
  * This is a convenience command that forwards to `promptfoo eval`.
5
- * For most use cases, prefer `ailf pipeline` which handles the full
5
+ * For most use cases, prefer `ailf run` which handles the full
6
6
  * lifecycle (fetch → generate → eval → score → report).
7
7
  */
8
8
  import { Command } from "commander";
@@ -2,7 +2,7 @@
2
2
  * eval command — run promptfoo evaluation directly (passthrough).
3
3
  *
4
4
  * This is a convenience command that forwards to `promptfoo eval`.
5
- * For most use cases, prefer `ailf pipeline` which handles the full
5
+ * For most use cases, prefer `ailf run` which handles the full
6
6
  * lifecycle (fetch → generate → eval → score → report).
7
7
  */
8
8
  import { Command } from "commander";
@@ -12,7 +12,7 @@
12
12
  * Every command is registered in `EXPLAIN_REGISTRY` with either:
13
13
  * - **Static metadata** — description, filesRead, filesCreated, steps
14
14
  * - **A builder function** — for commands that need to inspect CLI options
15
- * or perform async work (e.g., pipeline, init)
15
+ * or perform async work (e.g., run, init)
16
16
  *
17
17
  * Adding --explain support for a new command = adding one registry entry.
18
18
  * Commands not in the registry fall back to a minimal generic plan.
@@ -12,7 +12,7 @@
12
12
  * Every command is registered in `EXPLAIN_REGISTRY` with either:
13
13
  * - **Static metadata** — description, filesRead, filesCreated, steps
14
14
  * - **A builder function** — for commands that need to inspect CLI options
15
- * or perform async work (e.g., pipeline, init)
15
+ * or perform async work (e.g., run, init)
16
16
  *
17
17
  * Adding --explain support for a new command = adding one registry entry.
18
18
  * Commands not in the registry fall back to a minimal generic plan.
@@ -39,7 +39,7 @@ const EXPLAIN_REGISTRY = {
39
39
  // ── Dynamic builders (inspect CLI options) ────────────────────────
40
40
  baseline: buildBaselineExplainPlan,
41
41
  init: buildInitExplainPlan,
42
- pipeline: buildPipelineExplainPlan,
42
+ run: buildPipelineExplainPlan,
43
43
  // ── Static metadata ───────────────────────────────────────────────
44
44
  "agent-report": {
45
45
  description: "Generate an agent behavior observation report from eval results",
@@ -588,15 +588,11 @@ export async function handleExplain(actionCommand, confirmExecution, rootDir) {
588
588
  * Build a plan for the `init` command.
589
589
  *
590
590
  * Shows which files and directories will be created, taking into
591
- * account the --output-format and --path flags.
591
+ * account the --format and --path flags.
592
592
  */
593
593
  function buildInitExplainPlan(actionCommand, rootDir) {
594
594
  const opts = actionCommand.opts();
595
- const format = opts.outputFormat === "json"
596
- ? "json"
597
- : opts.outputFormat === "yaml"
598
- ? "yaml"
599
- : "ts";
595
+ const format = opts.format === "json" ? "json" : opts.format === "yaml" ? "yaml" : "ts";
600
596
  const taskExt = format === "ts" ? ".task.ts" : format === "yaml" ? ".yaml" : ".json";
601
597
  const configFile = format === "ts"
602
598
  ? "ailf.config.ts"
@@ -667,69 +663,44 @@ function buildBaselineExplainPlan(actionCommand, rootDir) {
667
663
  });
668
664
  }
669
665
  /**
670
- * Build a plan for the `pipeline` command — the richest plan with steps,
666
+ * Build a plan for the `run` command — the richest plan with steps,
671
667
  * tasks, models, cost estimates, and cache predictions.
672
668
  */
673
669
  async function buildPipelineExplainPlan(actionCommand, rootDir) {
674
670
  const raw = actionCommand.opts();
675
671
  // Merge Commander-parsed opts with safe defaults for array/boolean fields
676
672
  const withDefaults = {
677
- allowedOrigin: raw.allowedOrigin ?? [],
678
- allowedOrigins: raw.allowedOrigins ?? [],
679
673
  area: raw.area,
680
674
  autoScope: raw.autoScope ?? true,
681
- before: raw.before,
675
+ beforeSource: raw.beforeSource,
682
676
  cache: raw.cache ?? true,
683
677
  changedDocs: raw.changedDocs,
684
- compare: raw.compare ?? false,
685
- compareBaseline: raw.compareBaseline,
686
- concurrency: raw.concurrency,
678
+ compare: raw.compare,
687
679
  debug: raw.debug ?? false,
688
- debugN: raw.debugN,
689
- debugPattern: raw.debugPattern,
690
- debugSample: raw.debugSample,
691
- discoveryReport: raw.discoveryReport ?? false,
680
+ filterFirstN: raw.filterFirstN,
681
+ filterPattern: raw.filterPattern,
682
+ filterSample: raw.filterSample,
692
683
  dryRun: raw.dryRun ?? false,
693
- gapAnalysis: raw.gapAnalysis ?? true,
694
- graderReplications: raw.graderReplications,
695
- header: raw.header ?? [],
696
- headers: raw.headers ?? [],
697
684
  mode: raw.mode ?? LiteracyVariant.FULL,
698
685
  output: raw.output,
699
686
  promptfooUrl: raw.promptfooUrl,
700
687
  publish: raw.publish,
701
688
  publishTag: raw.publishTag,
702
- readiness: raw.readiness ?? false,
703
- reportDataset: raw.reportDataset,
704
- reportProject: raw.reportProject,
705
- sanityDataset: raw.sanityDataset,
706
689
  sanityDocument: raw.sanityDocument ?? [],
707
- sanityDocuments: raw.sanityDocuments ?? [],
708
690
  sanityPerspective: raw.sanityPerspective,
709
- sanityProject: raw.sanityProject,
710
- sanityStudioOrigin: raw.sanityStudioOrigin,
711
691
  search: raw.search,
712
- skipEval: raw.skipEval ?? false,
713
- skipFetch: raw.skipFetch ?? false,
692
+ eval: raw.eval ?? true,
693
+ fetch: raw.fetch ?? true,
714
694
  source: raw.source,
715
695
  tag: raw.tag ?? [],
716
696
  task: raw.task,
717
697
  threshold: raw.threshold,
718
698
  url: raw.url ?? [],
719
- urls: raw.urls ?? [],
720
699
  remote: raw.remote ?? false,
721
- apiUrl: raw.apiUrl,
722
- repoTasksPath: raw.repoTasksPath,
723
- taskSource: raw.taskSource,
724
700
  remoteCache: raw.remoteCache,
725
701
  config: raw.config,
726
- artifacts: raw.artifacts ?? true,
727
- artifactsDir: raw.artifactsDir,
728
- artifactsDryRun: raw.artifactsDryRun ?? false,
729
- artifactsExclude: raw.artifactsExclude,
702
+ artifactsWrite: raw.artifactsWrite ?? true,
730
703
  classification: raw.classification,
731
- ownerTeam: raw.ownerTeam,
732
- ownerIndividual: raw.ownerIndividual,
733
704
  purpose: raw.purpose,
734
705
  label: raw.label ?? [],
735
706
  };
@@ -742,7 +713,6 @@ async function buildPipelineExplainPlan(actionCommand, rootDir) {
742
713
  compareThreshold: resolved.compareThreshold,
743
714
  concurrency: resolved.concurrency,
744
715
  debug: resolved.debug,
745
- discoveryReportEnabled: resolved.discoveryReportEnabled,
746
716
  dryRun: resolved.dryRun,
747
717
  gapAnalysisEnabled: resolved.gapAnalysisEnabled,
748
718
  graderReplications: resolved.graderReplications,
@@ -750,7 +720,6 @@ async function buildPipelineExplainPlan(actionCommand, rootDir) {
750
720
  variant: resolved.variant,
751
721
  noCache: resolved.noCache,
752
722
  publishEnabled: resolved.publishEnabled,
753
- readinessEnabled: resolved.readinessEnabled,
754
723
  skipEval: resolved.skipEval,
755
724
  skipFetch: resolved.skipFetch,
756
725
  source: resolved.source,
@@ -50,8 +50,6 @@ async function executeFetchDocs(opts) {
50
50
  skipEval: true,
51
51
  compareEnabled: false,
52
52
  gapAnalysisEnabled: false,
53
- readinessEnabled: false,
54
- discoveryReportEnabled: false,
55
53
  publishEnabled: false,
56
54
  noCache: true,
57
55
  noRemoteCache: true,
@@ -28,8 +28,6 @@ export function createGenerateConfigsCommand() {
28
28
  skipEval: true,
29
29
  compareEnabled: false,
30
30
  gapAnalysisEnabled: false,
31
- readinessEnabled: false,
32
- discoveryReportEnabled: false,
33
31
  publishEnabled: false,
34
32
  noCache: true,
35
33
  noRemoteCache: true,
@@ -95,16 +95,16 @@ export function createGraderCommand() {
95
95
  .command("validate")
96
96
  .description("Validate grader accuracy against human reference grades")
97
97
  .option("-g, --grader <model>", "Grader model to validate")
98
- .option("-t, --threshold <n>", "MAE threshold for pass/fail", parseFloat, 10)
98
+ .option("--mae-threshold <n>", "MAE threshold for pass/fail", parseFloat, 10)
99
99
  .action(async (opts) => {
100
100
  try {
101
101
  const result = await runGraderValidate({
102
102
  graderModel: opts.grader,
103
- maeThreshold: opts.threshold,
103
+ maeThreshold: opts.maeThreshold,
104
104
  rootDir: ROOT,
105
105
  });
106
106
  if (!result.passesThreshold) {
107
- console.error(`\n ❌ VALIDATION FAILED: MAE ${result.overallMae} exceeds threshold ${opts.threshold}`);
107
+ console.error(`\n ❌ VALIDATION FAILED: MAE ${result.overallMae} exceeds threshold ${opts.maeThreshold}`);
108
108
  process.exit(1);
109
109
  }
110
110
  }
@@ -11,8 +11,8 @@
11
11
  *
12
12
  * Usage:
13
13
  * ailf init # TypeScript output (default)
14
- * ailf init --output-format yaml # YAML output
15
- * ailf init --output-format json # JSON output
14
+ * ailf init --format yaml # YAML output
15
+ * ailf init --format json # JSON output
16
16
  * ailf init --force # overwrite existing files
17
17
  * ailf init --path ./my-dir # target a specific directory
18
18
  */
@@ -11,8 +11,8 @@
11
11
  *
12
12
  * Usage:
13
13
  * ailf init # TypeScript output (default)
14
- * ailf init --output-format yaml # YAML output
15
- * ailf init --output-format json # JSON output
14
+ * ailf init --format yaml # YAML output
15
+ * ailf init --format json # JSON output
16
16
  * ailf init --force # overwrite existing files
17
17
  * ailf init --path ./my-dir # target a specific directory
18
18
  */
@@ -27,7 +27,7 @@ import { probeUserLocalAilf } from "../adapters/config-sources/ailf-resolver.js"
27
27
  export function createInitCommand() {
28
28
  return new Command("init")
29
29
  .description("Initialize a directory for AI Literacy Framework evaluation")
30
- .option("--output-format <fmt>", 'Output format for generated files: "ts" (default), "yaml", or "json"', "ts")
30
+ .option("-f, --format <fmt>", 'Output format for generated files: "ts" (default), "yaml", or "json"', "ts")
31
31
  .option("--force", "Overwrite existing files", false)
32
32
  .option("--path <dir>", "Target directory (default: current directory)", ".")
33
33
  .option("--mode <mode>", "Scaffold for a specific mode: literacy, mcp-server, custom (default: all modes)")
@@ -63,15 +63,15 @@ function taskStemsForMode(mode) {
63
63
  // ---------------------------------------------------------------------------
64
64
  async function runInit(opts) {
65
65
  const validFormats = new Set(["ts", "yaml", "json"]);
66
- if (!validFormats.has(opts.outputFormat)) {
67
- console.error(` ✗ Invalid output format "${opts.outputFormat}". Valid options: ts, yaml, json`);
66
+ if (!validFormats.has(opts.format)) {
67
+ console.error(` ✗ Invalid output format "${opts.format}". Valid options: ts, yaml, json`);
68
68
  process.exitCode = 1;
69
69
  return;
70
70
  }
71
- const format = opts.outputFormat;
71
+ const format = opts.format;
72
72
  const force = opts.force;
73
73
  if (format === "yaml") {
74
- console.warn(" ⚠ --output-format yaml is deprecated. TypeScript (default) is the\n" +
74
+ console.warn(" ⚠ --format yaml is deprecated. TypeScript (default) is the\n" +
75
75
  " recommended format — it provides full IDE autocomplete via defineTask().\n" +
76
76
  " YAML output will be removed in a future release.\n");
77
77
  }
@@ -285,10 +285,11 @@ async function runInit(opts) {
285
285
  console.log(" AILF_API_KEY=... npx @sanity/ailf@latest pipeline --remote --debug");
286
286
  console.log();
287
287
  console.log(" 💡 Or test a remote run against your repo tasks:");
288
- console.log(" AILF_API_KEY=... npx @sanity/ailf@latest pipeline --remote --task-source=repo --debug");
288
+ console.log(" # First, set `taskSource: { type: repo }` in .ailf/config.yaml");
289
+ console.log(" AILF_API_KEY=... npx @sanity/ailf@latest run --remote --debug");
289
290
  console.log();
290
291
  console.log(" 💡 Or run locally against your repo tasks:");
291
- console.log(" AILF_API_KEY=... npx @sanity/ailf@latest pipeline --mode=literacy --variant=full --task-source=repo --debug --explain -y");
292
+ console.log(" AILF_API_KEY=... npx @sanity/ailf@latest run --mode=literacy --variant=full --debug --explain -y");
292
293
  console.log();
293
294
  }
294
295
  // ---------------------------------------------------------------------------
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * When `ailf` is run with no arguments (or `ailf interactive`), this module
5
5
  * prompts the user through mode selection, area scoping, debug options,
6
- * and common flags — then builds and executes the equivalent `ailf pipeline`
6
+ * and common flags — then builds and executes the equivalent `ailf run`
7
7
  * command.
8
8
  *
9
9
  * Uses @inquirer/prompts for a clean, modern terminal UI.
@@ -3,7 +3,7 @@
3
3
  *
4
4
  * When `ailf` is run with no arguments (or `ailf interactive`), this module
5
5
  * prompts the user through mode selection, area scoping, debug options,
6
- * and common flags — then builds and executes the equivalent `ailf pipeline`
6
+ * and common flags — then builds and executes the equivalent `ailf run`
7
7
  * command.
8
8
  *
9
9
  * Uses @inquirer/prompts for a clean, modern terminal UI.
@@ -52,9 +52,9 @@ async function runInteractiveWizard() {
52
52
  const workflow = await select({
53
53
  choices: [
54
54
  {
55
- description: "Full evaluation pipeline (fetch → eval → score → report)",
56
- name: "Run pipeline",
57
- value: "pipeline",
55
+ description: "Full evaluation run (fetch → eval → score → report)",
56
+ name: "Run evaluation",
57
+ value: "run",
58
58
  },
59
59
  {
60
60
  description: "Compare current scores against a saved baseline",
@@ -193,21 +193,21 @@ async function runInteractiveWizard() {
193
193
  });
194
194
  if (debugStyle === "first-n") {
195
195
  const n = await input({ default: "5", message: "Number of tests:" });
196
- args.push("--debug-n", n);
196
+ args.push("--filter-first-n", n);
197
197
  }
198
198
  else if (debugStyle === "sample") {
199
199
  const n = await input({
200
200
  default: "3",
201
201
  message: "Sample size:",
202
202
  });
203
- args.push("--debug-sample", n);
203
+ args.push("--filter-sample", n);
204
204
  }
205
205
  else if (debugStyle === "pattern") {
206
206
  const pattern = await input({
207
207
  message: "Description regex (e.g. Blog, webhook):",
208
208
  });
209
209
  if (pattern.trim()) {
210
- args.push("--debug-pattern", pattern.trim());
210
+ args.push("--filter-pattern", pattern.trim());
211
211
  }
212
212
  }
213
213
  }
@@ -238,5 +238,5 @@ async function runInteractiveWizard() {
238
238
  args.push("--explain", "--yes");
239
239
  }
240
240
  }
241
- return { args, command: "pipeline" };
241
+ return { args, command: "run" };
242
242
  }
@@ -12,7 +12,7 @@
12
12
  */
13
13
  import { type ImpactSummary } from "../pipeline/reverse-mapping.js";
14
14
  import type { DebugOptions, EvalMode } from "../pipeline/types.js";
15
- import type { PipelineCliOptions } from "./pipeline.js";
15
+ import type { PipelineCliOptions } from "./run.js";
16
16
  export interface ResolvedOptions {
17
17
  allowedOriginArgs: string[];
18
18
  areaOption?: string;
@@ -24,7 +24,6 @@ export interface ResolvedOptions {
24
24
  concurrency?: number;
25
25
  datasetOverride?: string;
26
26
  debug?: DebugOptions;
27
- discoveryReportEnabled: boolean;
28
27
  dryRun: boolean;
29
28
  gapAnalysisEnabled: boolean;
30
29
  graderReplications?: number;
@@ -46,7 +45,6 @@ export interface ResolvedOptions {
46
45
  /** True when --publish or --no-publish was explicitly passed by the user. */
47
46
  publishExplicit: boolean;
48
47
  publishTag?: string;
49
- readinessEnabled: boolean;
50
48
  reportDataset?: string;
51
49
  reportProjectId?: string;
52
50
  sanityDocumentArgs: string[];