agent-inspect 6.31.11 → 6.31.12

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.
@@ -11918,25 +11918,45 @@ function asStringArray(value, label) {
11918
11918
  function asPositiveNumber(value, label) {
11919
11919
  if (value === void 0) return void 0;
11920
11920
  if (typeof value !== "number" || !Number.isFinite(value) || value < 0) {
11921
- throw new Error(`${label} must be a non-negative number.`);
11921
+ throw new Error(`${label} must be a non-negative finite number.`);
11922
11922
  }
11923
11923
  return value;
11924
11924
  }
11925
- function asExpectConfig(value, label) {
11925
+ function asBoolean(value, label) {
11926
11926
  if (value === void 0) return void 0;
11927
+ if (typeof value !== "boolean") {
11928
+ throw new Error(`${label} must be a boolean (not a string or other type).`);
11929
+ }
11930
+ return value;
11931
+ }
11932
+ function assertObject(value, label) {
11927
11933
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
11928
11934
  throw new Error(`${label} must be an object.`);
11929
11935
  }
11930
- const raw = value;
11936
+ return value;
11937
+ }
11938
+ function assertKnownKeys(raw, allowed, label) {
11939
+ const allowedSet = new Set(allowed);
11940
+ for (const key of Object.keys(raw)) {
11941
+ if (!allowedSet.has(key)) {
11942
+ throw new Error(`${label} has unknown key "${key}".`);
11943
+ }
11944
+ }
11945
+ }
11946
+ function asExpectConfig(value, label) {
11947
+ if (value === void 0) return void 0;
11948
+ const raw = assertObject(value, label);
11949
+ assertKnownKeys(raw, EXPECT_KEYS, label);
11931
11950
  const checkStatus = raw.checkStatus;
11932
11951
  if (checkStatus !== "pass" && checkStatus !== "fail" && checkStatus !== "error") {
11933
11952
  throw new Error(`${label}.checkStatus must be "pass", "fail", or "error".`);
11934
11953
  }
11935
11954
  const findingRuleIds = asStringArray(raw.findingRuleIds, `${label}.findingRuleIds`);
11936
11955
  const minAssertions = asPositiveNumber(raw.minAssertions, `${label}.minAssertions`);
11937
- const rejectUnexpectedFindings = raw.rejectUnexpectedFindings === void 0 ? void 0 : typeof raw.rejectUnexpectedFindings === "boolean" ? raw.rejectUnexpectedFindings : (() => {
11938
- throw new Error(`${label}.rejectUnexpectedFindings must be a boolean.`);
11939
- })();
11956
+ const rejectUnexpectedFindings = asBoolean(
11957
+ raw.rejectUnexpectedFindings,
11958
+ `${label}.rejectUnexpectedFindings`
11959
+ );
11940
11960
  return {
11941
11961
  checkStatus,
11942
11962
  ...findingRuleIds !== void 0 ? { findingRuleIds } : {},
@@ -11944,6 +11964,56 @@ function asExpectConfig(value, label) {
11944
11964
  ...minAssertions !== void 0 ? { minAssertions } : {}
11945
11965
  };
11946
11966
  }
11967
+ function asChecksConfig(value, label) {
11968
+ const raw = assertObject(value, label);
11969
+ assertKnownKeys(raw, CHECKS_KEYS, label);
11970
+ const checks2 = {};
11971
+ const select = asStringArray(raw.select, `${label}.select`);
11972
+ if (select !== void 0) checks2.select = select;
11973
+ if (raw.run !== void 0) {
11974
+ const run = assertObject(raw.run, `${label}.run`);
11975
+ assertKnownKeys(run, CHECKS_RUN_KEYS, `${label}.run`);
11976
+ checks2.run = {
11977
+ ...asPositiveNumber(run.maxDurationMs, `${label}.run.maxDurationMs`) !== void 0 ? { maxDurationMs: asPositiveNumber(run.maxDurationMs, `${label}.run.maxDurationMs`) } : {},
11978
+ ...asPositiveNumber(run.maxDepth, `${label}.run.maxDepth`) !== void 0 ? { maxDepth: asPositiveNumber(run.maxDepth, `${label}.run.maxDepth`) } : {}
11979
+ };
11980
+ }
11981
+ if (raw.tool !== void 0) {
11982
+ const tool = assertObject(raw.tool, `${label}.tool`);
11983
+ assertKnownKeys(tool, CHECKS_TOOL_KEYS, `${label}.tool`);
11984
+ checks2.tool = {
11985
+ ...asStringArray(tool.required, `${label}.tool.required`) !== void 0 ? { required: asStringArray(tool.required, `${label}.tool.required`) } : {},
11986
+ ...asStringArray(tool.forbidden, `${label}.tool.forbidden`) !== void 0 ? { forbidden: asStringArray(tool.forbidden, `${label}.tool.forbidden`) } : {}
11987
+ };
11988
+ }
11989
+ if (raw.llm !== void 0) {
11990
+ const llm = assertObject(raw.llm, `${label}.llm`);
11991
+ assertKnownKeys(llm, CHECKS_LLM_KEYS, `${label}.llm`);
11992
+ checks2.llm = {
11993
+ ...asStringArray(llm.allowedModels, `${label}.llm.allowedModels`) !== void 0 ? { allowedModels: asStringArray(llm.allowedModels, `${label}.llm.allowedModels`) } : {},
11994
+ ...asPositiveNumber(llm.maxTotalTokens, `${label}.llm.maxTotalTokens`) !== void 0 ? {
11995
+ maxTotalTokens: asPositiveNumber(
11996
+ llm.maxTotalTokens,
11997
+ `${label}.llm.maxTotalTokens`
11998
+ )
11999
+ } : {}
12000
+ };
12001
+ }
12002
+ return checks2;
12003
+ }
12004
+ function asEvalConfig(value, label) {
12005
+ const raw = assertObject(value, label);
12006
+ assertKnownKeys(raw, EVAL_KEYS, label);
12007
+ return {
12008
+ ...asBoolean(raw.requireSuccess, `${label}.requireSuccess`) !== void 0 ? { requireSuccess: asBoolean(raw.requireSuccess, `${label}.requireSuccess`) } : {},
12009
+ ...asStringArray(raw.requiredTools, `${label}.requiredTools`) !== void 0 ? { requiredTools: asStringArray(raw.requiredTools, `${label}.requiredTools`) } : {},
12010
+ ...asStringArray(raw.forbiddenTools, `${label}.forbiddenTools`) !== void 0 ? { forbiddenTools: asStringArray(raw.forbiddenTools, `${label}.forbiddenTools`) } : {},
12011
+ ...asPositiveNumber(raw.maxDurationMs, `${label}.maxDurationMs`) !== void 0 ? { maxDurationMs: asPositiveNumber(raw.maxDurationMs, `${label}.maxDurationMs`) } : {},
12012
+ ...asPositiveNumber(raw.maxDepth, `${label}.maxDepth`) !== void 0 ? { maxDepth: asPositiveNumber(raw.maxDepth, `${label}.maxDepth`) } : {},
12013
+ ...asPositiveNumber(raw.maxRetries, `${label}.maxRetries`) !== void 0 ? { maxRetries: asPositiveNumber(raw.maxRetries, `${label}.maxRetries`) } : {},
12014
+ ...asPositiveNumber(raw.maxTotalTokens, `${label}.maxTotalTokens`) !== void 0 ? { maxTotalTokens: asPositiveNumber(raw.maxTotalTokens, `${label}.maxTotalTokens`) } : {}
12015
+ };
12016
+ }
11947
12017
  function validateCaseConfig(value, index) {
11948
12018
  const diagnostics = [];
11949
12019
  if (typeof value !== "object" || value === null || Array.isArray(value)) {
@@ -11954,6 +12024,7 @@ function validateCaseConfig(value, index) {
11954
12024
  }
11955
12025
  const raw = value;
11956
12026
  try {
12027
+ assertKnownKeys(raw, CASE_KEYS, `cases[${index}]`);
11957
12028
  const id = asString(raw.id, `cases[${index}].id`);
11958
12029
  if (id === void 0) {
11959
12030
  diagnostics.push(
@@ -12002,6 +12073,7 @@ function normalizeSuiteConfig(value) {
12002
12073
  throw new Error("Suite config must export an object.");
12003
12074
  }
12004
12075
  const raw = value;
12076
+ assertKnownKeys(raw, ROOT_KEYS, "suite config");
12005
12077
  const name = asString(raw.name, "name");
12006
12078
  const traces = asString(raw.traces, "traces");
12007
12079
  if (name === void 0) throw new Error("name is required.");
@@ -12030,25 +12102,15 @@ function normalizeSuiteConfig(value) {
12030
12102
  }
12031
12103
  const config = { name, traces, cases };
12032
12104
  if (raw.checks !== void 0) {
12033
- if (typeof raw.checks !== "object" || Array.isArray(raw.checks)) {
12034
- throw new Error("checks must be an object.");
12035
- }
12036
- config.checks = raw.checks;
12105
+ config.checks = asChecksConfig(raw.checks, "checks");
12037
12106
  }
12038
12107
  if (raw.eval !== void 0) {
12039
- if (typeof raw.eval !== "object" || Array.isArray(raw.eval)) {
12040
- throw new Error("eval must be an object.");
12041
- }
12042
- config.eval = raw.eval;
12108
+ config.eval = asEvalConfig(raw.eval, "eval");
12043
12109
  }
12044
12110
  if (raw.artifacts !== void 0) {
12045
- if (typeof raw.artifacts !== "object" || Array.isArray(raw.artifacts)) {
12046
- throw new Error("artifacts must be an object.");
12047
- }
12048
- const outputDir = asString(
12049
- raw.artifacts.outputDir,
12050
- "artifacts.outputDir"
12051
- );
12111
+ const artifacts = assertObject(raw.artifacts, "artifacts");
12112
+ assertKnownKeys(artifacts, ["outputDir"], "artifacts");
12113
+ const outputDir = asString(artifacts.outputDir, "artifacts.outputDir");
12052
12114
  config.artifacts = outputDir !== void 0 ? { outputDir } : {};
12053
12115
  }
12054
12116
  if (raw.baseline !== void 0) {
@@ -12091,8 +12153,50 @@ async function validateSuiteConfig(config, options) {
12091
12153
  }
12092
12154
  return { ok: diagnostics.every((item) => item.severity !== "error"), diagnostics };
12093
12155
  }
12156
+ var CASE_KEYS, EXPECT_KEYS, CHECKS_KEYS, CHECKS_RUN_KEYS, CHECKS_TOOL_KEYS, CHECKS_LLM_KEYS, EVAL_KEYS, ROOT_KEYS;
12094
12157
  var init_validate2 = __esm({
12095
12158
  "packages/core/src/suite/validate.ts"() {
12159
+ CASE_KEYS = [
12160
+ "id",
12161
+ "trace",
12162
+ "runId",
12163
+ "input",
12164
+ "requireTools",
12165
+ "forbidTools",
12166
+ "maxDurationMs",
12167
+ "expectedObservations",
12168
+ "expect"
12169
+ ];
12170
+ EXPECT_KEYS = [
12171
+ "checkStatus",
12172
+ "findingRuleIds",
12173
+ "rejectUnexpectedFindings",
12174
+ "minAssertions"
12175
+ ];
12176
+ CHECKS_KEYS = ["select", "run", "tool", "llm"];
12177
+ CHECKS_RUN_KEYS = ["maxDurationMs", "maxDepth"];
12178
+ CHECKS_TOOL_KEYS = ["required", "forbidden"];
12179
+ CHECKS_LLM_KEYS = ["allowedModels", "maxTotalTokens"];
12180
+ EVAL_KEYS = [
12181
+ "requireSuccess",
12182
+ "requiredTools",
12183
+ "forbiddenTools",
12184
+ "maxDurationMs",
12185
+ "maxDepth",
12186
+ "maxRetries",
12187
+ "maxTotalTokens"
12188
+ ];
12189
+ ROOT_KEYS = [
12190
+ "name",
12191
+ "traces",
12192
+ "cases",
12193
+ "checks",
12194
+ "eval",
12195
+ "redactionProfile",
12196
+ "artifacts",
12197
+ "baseline",
12198
+ "candidate"
12199
+ ];
12096
12200
  }
12097
12201
  });
12098
12202
  function diagnostic4(code, message) {
@@ -16656,7 +16760,7 @@ var init_src = __esm({
16656
16760
  });
16657
16761
 
16658
16762
  // package.json
16659
- var version = "6.31.11";
16763
+ var version = "6.31.12";
16660
16764
 
16661
16765
  // packages/cli/src/list.ts
16662
16766
  init_advanced();
@@ -24209,7 +24313,7 @@ function asStringArray2(value) {
24209
24313
  }
24210
24314
  return value;
24211
24315
  }
24212
- var CHECKS_KEYS = /* @__PURE__ */ new Set(["select", "run", "tool", "llm", "structure", "safety"]);
24316
+ var CHECKS_KEYS2 = /* @__PURE__ */ new Set(["select", "run", "tool", "llm", "structure", "safety"]);
24213
24317
  var ROOT_CONFIG_KEYS = /* @__PURE__ */ new Set(["checks", "contract"]);
24214
24318
  var CONTRACT_KEYS = /* @__PURE__ */ new Set([
24215
24319
  "run",
@@ -25270,7 +25374,7 @@ function parseCheckConfig(value) {
25270
25374
  const out = {};
25271
25375
  if ("checks" in root) {
25272
25376
  const checksRecord = requireObject(root.checks, "checks");
25273
- rejectUnknownKeys(checksRecord, CHECKS_KEYS, "checks");
25377
+ rejectUnknownKeys(checksRecord, CHECKS_KEYS2, "checks");
25274
25378
  const checks2 = {};
25275
25379
  if (checksRecord.select !== void 0) {
25276
25380
  checks2.select = requireStringArray(checksRecord.select, "checks.select");