@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.
- package/config/airbyte/ai_literacy_framework.connector.yaml +1 -1
- package/config/thresholds.ts +3 -3
- package/dist/_vendor/ailf-core/examples/index.d.ts +2 -2
- package/dist/_vendor/ailf-core/examples/index.js +2 -2
- package/dist/_vendor/ailf-core/ports/context.d.ts +0 -4
- package/dist/_vendor/ailf-core/schemas/eval-config.d.ts +38 -12
- package/dist/_vendor/ailf-core/schemas/eval-config.js +102 -22
- package/dist/_vendor/ailf-core/schemas/pipeline-request.d.ts +4 -6
- package/dist/_vendor/ailf-core/schemas/pipeline-request.js +1 -3
- package/dist/_vendor/ailf-core/schemas/schedules.d.ts +2 -2
- package/dist/_vendor/ailf-shared/run-classification.d.ts +2 -2
- package/dist/_vendor/ailf-shared/run-classification.js +1 -1
- package/dist/_vendor/ailf-shared/run-context.d.ts +1 -1
- package/dist/adapters/api-client/build-request.d.ts +0 -2
- package/dist/adapters/api-client/build-request.js +2 -6
- package/dist/adapters/config-sources/cli-config-adapter.d.ts +1 -1
- package/dist/adapters/config-sources/file-config-adapter.d.ts +1 -1
- package/dist/adapters/config-sources/file-config-adapter.js +38 -12
- package/dist/adapters/task-sources/repo-schemas.d.ts +38 -0
- package/dist/adapters/task-sources/repo-schemas.js +127 -0
- package/dist/cli.d.ts +2 -2
- package/dist/cli.js +134 -38
- package/dist/commands/agent-report.js +1 -1
- package/dist/commands/calculate-scores.js +0 -2
- package/dist/commands/check-staleness.js +1 -1
- package/dist/commands/chronic-failures.js +4 -4
- package/dist/commands/coverage-audit.js +6 -7
- package/dist/commands/discovery-report.js +16 -4
- package/dist/commands/eval.d.ts +1 -1
- package/dist/commands/eval.js +1 -1
- package/dist/commands/explain-handler.d.ts +1 -1
- package/dist/commands/explain-handler.js +13 -44
- package/dist/commands/fetch-docs.js +0 -2
- package/dist/commands/generate-configs.js +0 -2
- package/dist/commands/grader/index.js +3 -3
- package/dist/commands/init.d.ts +2 -2
- package/dist/commands/init.js +10 -9
- package/dist/commands/interactive.d.ts +1 -1
- package/dist/commands/interactive.js +8 -8
- package/dist/commands/pipeline-action.d.ts +1 -3
- package/dist/commands/pipeline-action.js +174 -140
- package/dist/commands/pr-comment.js +1 -3
- package/dist/commands/publish.d.ts +1 -1
- package/dist/commands/publish.js +2 -4
- package/dist/commands/readiness-report.js +17 -8
- package/dist/commands/remote-pipeline.d.ts +1 -1
- package/dist/commands/remote-pipeline.js +1 -3
- package/dist/commands/run.d.ts +64 -0
- package/dist/commands/{pipeline.js → run.js} +19 -30
- package/dist/commands/shared/help.js +4 -4
- package/dist/commands/shared/options.d.ts +29 -3
- package/dist/commands/shared/options.js +37 -13
- package/dist/commands/validate-tasks.js +1 -1
- package/dist/commands/validate.d.ts +1 -1
- package/dist/commands/validate.js +2 -2
- package/dist/commands/weekly-digest.js +3 -3
- package/dist/config/thresholds.ts +3 -3
- package/dist/orchestration/build-app-context.js +0 -2
- package/dist/orchestration/build-step-sequence.js +1 -11
- package/dist/orchestration/steps/fetch-docs-step.js +1 -1
- package/dist/orchestration/steps/index.d.ts +0 -2
- package/dist/orchestration/steps/index.js +0 -2
- package/dist/orchestration/steps/run-eval-step.js +1 -1
- package/dist/pipeline/cache.d.ts +1 -1
- package/dist/pipeline/map-request-to-config.js +0 -2
- package/dist/pipeline/plan.d.ts +2 -4
- package/dist/pipeline/plan.js +4 -32
- package/dist/pipeline/run-context.d.ts +1 -1
- package/dist/pipeline/run-context.js +4 -4
- package/dist/pipeline/validate.d.ts +1 -1
- package/dist/pipeline/validate.js +1 -1
- package/package.json +7 -7
- package/dist/commands/pipeline.d.ts +0 -77
- package/dist/orchestration/steps/discovery-report-step.d.ts +0 -13
- package/dist/orchestration/steps/discovery-report-step.js +0 -62
- package/dist/orchestration/steps/readiness-step.d.ts +0 -13
- 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
|
|
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("-
|
|
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.
|
|
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:
|
|
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"));
|
package/dist/commands/eval.d.ts
CHANGED
|
@@ -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
|
|
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";
|
package/dist/commands/eval.js
CHANGED
|
@@ -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
|
|
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.,
|
|
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.,
|
|
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
|
-
|
|
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 --
|
|
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.
|
|
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 `
|
|
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
|
-
|
|
675
|
+
beforeSource: raw.beforeSource,
|
|
682
676
|
cache: raw.cache ?? true,
|
|
683
677
|
changedDocs: raw.changedDocs,
|
|
684
|
-
compare: raw.compare
|
|
685
|
-
compareBaseline: raw.compareBaseline,
|
|
686
|
-
concurrency: raw.concurrency,
|
|
678
|
+
compare: raw.compare,
|
|
687
679
|
debug: raw.debug ?? false,
|
|
688
|
-
|
|
689
|
-
|
|
690
|
-
|
|
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
|
-
|
|
713
|
-
|
|
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
|
-
|
|
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,
|
|
@@ -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("-
|
|
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.
|
|
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.
|
|
107
|
+
console.error(`\n ❌ VALIDATION FAILED: MAE ${result.overallMae} exceeds threshold ${opts.maeThreshold}`);
|
|
108
108
|
process.exit(1);
|
|
109
109
|
}
|
|
110
110
|
}
|
package/dist/commands/init.d.ts
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Usage:
|
|
13
13
|
* ailf init # TypeScript output (default)
|
|
14
|
-
* ailf init --
|
|
15
|
-
* ailf init --
|
|
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
|
*/
|
package/dist/commands/init.js
CHANGED
|
@@ -11,8 +11,8 @@
|
|
|
11
11
|
*
|
|
12
12
|
* Usage:
|
|
13
13
|
* ailf init # TypeScript output (default)
|
|
14
|
-
* ailf init --
|
|
15
|
-
* ailf init --
|
|
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("--
|
|
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.
|
|
67
|
-
console.error(` ✗ Invalid output format "${opts.
|
|
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.
|
|
71
|
+
const format = opts.format;
|
|
72
72
|
const force = opts.force;
|
|
73
73
|
if (format === "yaml") {
|
|
74
|
-
console.warn(" ⚠ --
|
|
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("
|
|
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
|
|
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
|
|
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
|
|
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
|
|
56
|
-
name: "Run
|
|
57
|
-
value: "
|
|
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("--
|
|
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("--
|
|
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("--
|
|
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: "
|
|
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 "./
|
|
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[];
|