@node9/proxy 2.38.0 → 2.39.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/dist/index.js CHANGED
@@ -449,6 +449,32 @@ function ssrfFloorDecision(m, asWritten, opts) {
449
449
  }
450
450
  return "block";
451
451
  }
452
+ function isModeValue(v) {
453
+ return typeof v === "string" && MODE_VALUES.includes(v);
454
+ }
455
+ function levelOf(mode) {
456
+ if (mode === "observe") return "audit";
457
+ return LEVELS.includes(mode ?? "") ? mode : "standard";
458
+ }
459
+ function isRecordOnly(mode) {
460
+ return levelOf(mode) === "audit";
461
+ }
462
+ function reviewsEveryInline(mode) {
463
+ const level = levelOf(mode);
464
+ return level === "strict" || level === "block-all";
465
+ }
466
+ function isBlockAll(mode) {
467
+ return levelOf(mode) === "block-all";
468
+ }
469
+ function levelCheckValue(mode, id) {
470
+ return LEVEL_CHECKS[levelOf(mode)][id];
471
+ }
472
+ function levelChecks(mode) {
473
+ return LEVEL_CHECKS[levelOf(mode)];
474
+ }
475
+ function levelPackageSignals(mode) {
476
+ return levelOf(mode) === "soft" ? { newPackage: "off", installScript: "off" } : void 0;
477
+ }
452
478
  function isVerdict(v) {
453
479
  return v === "off" || v === "log" || v === "review" || v === "block";
454
480
  }
@@ -594,19 +620,21 @@ function resolveCheck(settings, id) {
594
620
  if (!def) return void 0;
595
621
  if (isLockedCheck(def)) return { id, value: "block", source: "locked" };
596
622
  const floor = def.floor ? CHECK_VERDICT_RANK[def.floor] : 0;
623
+ const levelDefault = levelCheckValue(settings.mode, id) ?? def.defaultValue;
624
+ const sourceOf = (value2) => value2 === levelDefault ? "default" : "configured";
597
625
  const explicit = settings.checks?.[id];
598
626
  if (isVerdict(explicit)) {
599
627
  const value2 = CHECK_VERDICT_RANK[explicit] < floor ? def.floor : explicit;
600
- return { id, value: value2, source: value2 === def.defaultValue ? "default" : "configured" };
628
+ return { id, value: value2, source: sourceOf(value2) };
601
629
  }
602
630
  if (def.pack) {
603
631
  const on = settings.appliedShields?.includes(def.pack) ?? false;
604
632
  return { id, value: on ? def.defaultValue : "off", source: "default" };
605
633
  }
606
634
  const read2 = LEGACY_READERS[id]?.(settings);
607
- if (read2 === void 0) return { id, value: def.defaultValue, source: "default" };
635
+ if (read2 === void 0) return { id, value: levelDefault, source: "default" };
608
636
  const value = CHECK_VERDICT_RANK[read2] < floor ? def.floor : read2;
609
- return { id, value, source: value === def.defaultValue ? "default" : "configured" };
637
+ return { id, value, source: sourceOf(value) };
610
638
  }
611
639
  function checkValue(settings, id) {
612
640
  return resolveCheck(settings, id)?.value ?? "off";
@@ -5356,6 +5384,20 @@ function extractPackageInstalls(command) {
5356
5384
  return true;
5357
5385
  });
5358
5386
  }
5387
+ function tuningFromLegacyPolicy(policy) {
5388
+ const out = {};
5389
+ const p = policy;
5390
+ if (policy.packageCheck?.registrySignals === false) {
5391
+ out["loading.malicious-package"] = { newPackage: "off", installScript: "off" };
5392
+ }
5393
+ for (const f of TUNING_FIELDS) {
5394
+ const [block, key] = f.legacy;
5395
+ const value = p[block]?.[key];
5396
+ if (value === void 0) continue;
5397
+ (out[f.checkId] ??= {})[f.name] = value;
5398
+ }
5399
+ return out;
5400
+ }
5359
5401
  function tuningToLegacyPolicy(policy, tuning) {
5360
5402
  const unknown = [];
5361
5403
  for (const [id, fields] of Object.entries(tuning)) {
@@ -5470,6 +5512,25 @@ function checkToLegacyPolicy(policy, id, v) {
5470
5512
  return false;
5471
5513
  }
5472
5514
  }
5515
+ function knobStatedChecks(policy) {
5516
+ const out = /* @__PURE__ */ new Set();
5517
+ const has = (o, key) => !!o && typeof o === "object" && o[key] !== void 0;
5518
+ const { dlp, egress, loopDetection, injectionScan, skillPinning, packageCheck } = policy;
5519
+ const uc = policy.untrustedContent;
5520
+ if (has(dlp, "enabled")) out.add("data.secrets");
5521
+ if (has(dlp, "reviewAction") || dlp?.enabled === false) out.add("data.secrets-weak");
5522
+ if (has(dlp, "pii")) out.add("data.pii");
5523
+ if (has(egress, "enabled") || has(egress, "mode")) out.add("network.unknown-host");
5524
+ if (has(egress, "ssrfStrict")) out.add("network.internal-addresses");
5525
+ if (has(loopDetection, "enabled")) out.add("behavior.loops");
5526
+ if (has(injectionScan, "enabled")) out.add("behavior.prompt-injection");
5527
+ if (has(skillPinning, "enabled") || has(skillPinning, "mode")) out.add("loading.skill-tamper");
5528
+ if (has(packageCheck, "enabled") || has(packageCheck, "onMalicious"))
5529
+ out.add("loading.malicious-package");
5530
+ if (uc && typeof uc === "object" && (uc.enabled === false || has(uc, "afterExposure")))
5531
+ out.add("behavior.untrusted-content");
5532
+ return out;
5533
+ }
5473
5534
  function isKnobGoverned(id) {
5474
5535
  return id in KNOB_GOVERNED;
5475
5536
  }
@@ -6280,7 +6341,7 @@ async function evaluatePolicyCore(config, toolName, args, context = {}, hooks =
6280
6341
  if (v?.logged) noteLogged(v);
6281
6342
  else if (v) candidates.push(v);
6282
6343
  };
6283
- const inline = config.settings.mode === "strict" ? detectInlineExec(shellCommand) ? void 0 : null : inlineExecReview(shellCommand);
6344
+ const inline = reviewsEveryInline(config.settings.mode) ? detectInlineExec(shellCommand) ? void 0 : null : inlineExecReview(shellCommand);
6284
6345
  if (inline !== null) {
6285
6346
  consider("commands.inline-exec", {
6286
6347
  decision: "review",
@@ -6340,21 +6401,17 @@ async function evaluatePolicyCore(config, toolName, args, context = {}, hooks =
6340
6401
  if (firstToken && firstToken.startsWith("/") && checkProvenance2) {
6341
6402
  const prov = checkProvenance2(firstToken, cwd);
6342
6403
  if (prov.trustLevel === "suspect") {
6343
- const value = cv("commands.temp-binary");
6344
- const v = applyCheckValue(
6345
- value === "review" && config.settings.mode === "strict" ? "block" : value,
6346
- {
6347
- decision: "review",
6348
- blockedByLabel: "Node9: Suspect Binary",
6349
- reason: `Binary "${firstToken}" resolved to ${prov.resolvedPath} \u2014 ${prov.reason}`,
6350
- tier: 3,
6351
- checkId: "commands.temp-binary"
6352
- }
6353
- );
6404
+ const v = applyCheckValue(cv("commands.temp-binary"), {
6405
+ decision: "review",
6406
+ blockedByLabel: "Node9: Suspect Binary",
6407
+ reason: `Binary "${firstToken}" resolved to ${prov.resolvedPath} \u2014 ${prov.reason}`,
6408
+ tier: 3,
6409
+ checkId: "commands.temp-binary"
6410
+ });
6354
6411
  if (v?.logged) noteLogged(v);
6355
6412
  else if (v) return v;
6356
6413
  }
6357
- if (prov.trustLevel === "unknown" && config.settings.mode === "strict") {
6414
+ if (prov.trustLevel === "unknown" && isBlockAll(config.settings.mode)) {
6358
6415
  return {
6359
6416
  decision: "review",
6360
6417
  blockedByLabel: "Node9: Unknown Binary (strict mode)",
@@ -6445,7 +6502,7 @@ async function evaluatePolicyCore(config, toolName, args, context = {}, hooks =
6445
6502
  if (v?.logged) noteLogged(v);
6446
6503
  else if (v) return v;
6447
6504
  }
6448
- if (config.settings.mode === "strict") {
6505
+ if (isBlockAll(config.settings.mode)) {
6449
6506
  if (activeEnvironment?.requireApproval === false) return allowed();
6450
6507
  return {
6451
6508
  decision: "review",
@@ -7376,7 +7433,7 @@ function matchCanaryArgs(args, values) {
7376
7433
  return null;
7377
7434
  }
7378
7435
  }
7379
- var import_picomatch, import_safe_regex2, import_picomatch2, import_mvdan_sh, import_mvdan_sh2, import_safe_regex22, import_crypto2, import_crypto3, import_mvdan_sh3, import_crypto4, import_mvdan_sh4, import_crypto5, MAX_REGEX_LENGTH, REGEX_CACHE_MAX, regexCache, aws_default, bash_safe_default, docker_default, filesystem_default, github_default, k8s_default, mongodb_default, postgres_default, project_jail_default, redis_default, finance_default, identity_default, publishing_default, ACTION_TEMPLATES, ACTION_CHECKS, GAP, prog, httpTo, httpWrite, HTTP_WRITE, HTTP_WRITE_ANY, NOT_STRIPE_TEST, postTo, STRIPE_OBJECTS, APP_SHIELD_SPECS, APP_SHIELDS, APP_SHIELD_NAMES, APP_SERVER_GLOB, GENERAL_ACTION_RULES, BUILTIN_SHIELDS, SSRF_MAX_HOST, METADATA_ADDRESSES, STRICT_TIERS, METADATA_HOSTNAMES, v4Octets, TIER_REASON, CHECK_TEXT, VERDICTS, CHECK_VERDICT_RANK, ALL, BUILTIN_DANGEROUS_WORDS, PRODUCT_CHECKS, SHIELD_RULE_NAME, SHIELD_RULES_FOLDED_INTO_PRODUCT, CHECKS, CHECK_BY_ID, LEGACY_TO_ID, PROJECT_JAIL_BLOCK_READ, OVERRIDE_PREFIX, LABEL_WRAPPERS, LEGACY_READERS, INVISIBLE_RE, INVISIBLE_ONE, HOMOGLYPHS, HOMOGLYPH_RE, MAX_BLOBS, MIN_DECODED, BASE64_RUN_RE, HEX_RUN_RE, HEX_ESCAPE_RUN_RE, SYSTEM_AUTH_FILES, SYSTEM_AUTH_DIRS, PASSWORD_HASH_FILES, STARTUP_NAMES, SYSTEM_DIRS, SYSTEM_DIRS_EXEMPT, UPLOAD_SYSTEM_DIRS, AGENT_INSTRUCTION_FILES, AGENT_INSTRUCTION_DIRS, LEGACY_SYSTEM_PATH_RE, MAX_INLINE_CODE, WHAT, OUTSIDE, pyImport, either, PYTHON, NODE, PERL, RUBY, PHP, TABLES, STRING_LITERAL, syntax, sharedParser, MESSAGE_FLAGS, SHELL_INTERPRETERS, DOWNLOAD_CMDS, NORMALIZE_CACHE_MAX, normalizeCache, AST_CACHE_MAX, astCache, PARSE_FAIL, INTERPRETER_LINE, PROGRAM_DIR, ACCESS_VIEW_CACHE_MAX, accessViewCache, MAX_READING_PAYLOADS, defaultExpansionOps, VARIABLE_READERS, FS_READ_TOOLS, GREP_SHAPE, PATTERN_VERBS, PATTERN_VERB_NAMES, GREP_FILE_OPERANDS, READER_VALUE_LETTERS, FILE_OPERAND_FLAGS, SCP_VALUE_FLAGS, CURL_SOURCE_FLAGS, CURL_VALUE_LETTERS, WGET_VALUE_LETTERS, TAR_VALUE_LETTERS, ZIP_VALUE_LETTERS, RSYNC_VALUE_LETTERS, RSYNC_SKIP, CP_VALUE_LETTERS, INSTALL_VALUE_LETTERS, COPY_VERBS, TAR_MODE_WORD, COPY_VERB_HEADS, FS_OP_PRESCREEN_RE, HOME_CACHE_ALLOWLIST, SENSITIVE_PATH_RULES, AST_FS_REGEX_RULES, SQL_DB_CLIS, SQL_DDL_RE, CHMOD_OPEN_PERM_TOKENS, COMMAND_WRAPPERS, INLINE_INTERPRETER, RUNNER_WRAPPERS, _redirStdinOps, _listOps, WRAPPER_TAKES_TARGET, FIND_EXEC_FLAGS, FS_MUTATION_TOOLS, INTERP_LEADING_TARGET, MAX_PAYLOAD_NESTING, payloadNesting, MAX_INLINE_CALLS, INLINE_EXEC_FALLBACK, UNREADABLE_SOURCE, SCRIPT_RUNNERS, SCRIPT_RUNNER_VALUE_FLAGS, MAX_SCRIPT_OPERANDS, NET_BINARIES, VALUE_FLAGS, HOME_VARIABLES, assignmentTable, currentStmtOffset, PAYLOAD_BUDGET, payloadBudget, seenPayloads, UNANALYSABLE_NESTING, ASSIGNMENT_HEADS, AND_OP, OR_OP, AND_OR_OPS, MAX_CALL_DEPTH, MAX_CALL_WALKS, callDepth, callWalks, FS_OP_CACHE_MAX, fsOpCache, stripDotSlash, REDIR_TRUNCATE_OPS, REDIR_FILE_IN_OPS, REDIR_HEREDOC_OPS, FIND_OPTIONS, COPY_RULE_OF, isReaderWord, positionalAfter, NONE, UNKNOWN, FORBIDDEN_PATH_SEGMENTS, BASH_TOOL_NAMES, MCP_EXECUTORS, BUILTIN_FIELDS, ARGV_FIELDS, BARE_WORD, MAX_ARGV_CHARACTERS, syntax2, MAX_ALTERNATIVES, MAX_CALL_DEPTH2, MAX_CALL_WALKS2, POSITIONAL, MAX_DEPTH, MAX_PAYLOAD_DEPTH, unique, clone, SENDING_STDIN, DOWNLOAD_SHORT_VALUE, DOWNLOAD_LONG_VALUE, DOWNLOAD_OUTPUT_FLAGS, DOWNLOAD_DIR_FLAGS, base, quoteGlob, asWord, WRITES, READS, DUP_OUT, HERE_STRING, AND, OR, DEFAULT_OPS, exempt, RANK, BIP39_ENGLISH, BIP39_PUBLIC_VECTORS, indices, lengths, hash, MAX_MNEMONIC_HASHES, SECRET_VIEW_LIMITS, IBAN_LENGTH, IBAN_BBAN_SHAPE, B58, B58_INDEX, XPRV_VERSIONS, B62, CRC32_TABLE, GITHUB_TOKEN_RE, B64URL, B64URL_INDEX, CASK_TWO_ZERO_SUFFIX, CASK_FOUR_ZERO_SUFFIX, CF_ODD, CF_EVEN, SPANISH_LETTERS, HETU_CHARS, MAX, UNTRUSTED_TOOLS, SIGNALS, MENTION_QUOTE_RE, MENTION_WORD_RE, ASSIGNMENT_CONTEXT_RE, DLP_STOPWORDS, REFERENCE_VALUE_RE, IDENTIFIER_VALUE_RE, PATH_VALUE_RE, DOTTED_REFERENCE_RE, CONCATENATION_RE, EMAIL_VALUE_RE, FIXTURE_NAME_RE, DERIVATIVE_NAME_RE, QUERY_CREDENTIAL_VALUE_RE, OTP_SECRET_RE, OTP_DOC_SECRETS, ASSIGNED_SECRET_VALUE_RE, ASSIGNED_SECRET_NAME_RE, NAME_KEYWORD_RE, ARN_CONTEXT_RE, CIPHER_KEY_NAME_RE, CIPHER_NAME_PARTS, CIPHER_KEY_VALUE_RE, LARAVEL_KEY_VALUE_RE, SQL_PASSWORD_VALUE_RE, GRAFANA_KEY_VALUE_RE, BASIC_VALUE_RE, BASIC_PAIR_RE, OTP_CAPTURE_RE, DB_URL_PASSWORD_RE, DLP_PATTERNS, DLP_PATTERNS_GLOBAL, SENSITIVE_PATH_PATTERNS, SENSITIVE_PATH_REGEXES, MAX_DEPTH2, MAX_STRING_BYTES, MAX_JSON_PARSE_BYTES, BATCH_SEPARATOR, syntax3, NPM_INSTALL_VERBS, NPM_EXEC_VERBS, PNPM_INSTALL_VERBS, YARN_INSTALL_VERBS, BUN_INSTALL_VERBS, DLX_VERBS, NON_REGISTRY_RE, NPM_NAME_RE, EXACT_SEMVER_RE, NPM_VALUE_FLAGS, PNPM_VALUE_FLAGS, YARN_VALUE_FLAGS, BUN_VALUE_FLAGS, PIP_VALUE_FLAGS, UV_VALUE_FLAGS, POETRY_VALUE_FLAGS, PIPENV_VALUE_FLAGS, PIPX_VALUE_FLAGS, PY_SPEC_RE, PY_EXACT_RE, EXACT_VERSION_RE, GEM_NAME_RE, GEM_VALUE_FLAGS, BUNDLE_VALUE_FLAGS, CRATE_NAME_RE, CARGO_ADD_VALUE_FLAGS, CARGO_INSTALL_VALUE_FLAGS, GO_VALUE_FLAGS, GO_PATH_RE, NUGET_NAME_RE, DOTNET_ADD_VALUE_FLAGS, DOTNET_TOOL_VALUE_FLAGS, NUGET_VALUE_FLAGS, MAVEN_COORD_RE, COMPOSER_NAME_RE, COMPOSER_VALUE_FLAGS, EDITOR_HEADS, EXTENSION_ID_RE, MANAGER_HEADS, SHELLS, MAX_NESTING, SHELL_VALUE_FLAGS, TUNING_FIELDS, MAP_GOVERNED, KNOB_GOVERNED, CONFIGURABLE_CHECK_IDS, DEFAULT_EGRESS_ALLOWLIST, PRIVATE_HOST_SUFFIXES, SOURCE_COMMANDS, SINK_COMMANDS, OBFUSCATORS, SENSITIVE_PATTERNS, FLAGS_WITH_VALUES, DESTINATION_ARGS, MCP_DESTINATION_KEYS, ARGUMENT_SCAN_LIMITS, RUN_CHAR, runChar, VERDICT_RANK, SQL_DML_KEYWORDS, MAX_DESTINATIONS, MAX_SCAN_CHARS, EMAIL_RE, URL_RE, IBAN_RE, RECIPIENT_KEYS, DESTRUCTIVE_VERB_RE, PII_EMAIL_RE, PII_SSN_RE, PII_PHONE_RE, PII_CC16_RE, PII_CC15_RE, PII_CC14_RE, PII_CC13_RE, PII_CC19_RE, CARD_PATTERNS, PII_ROUTING_RE, ROUTING_LABEL_RE, ROUTING_LABEL_WINDOW, NATIONAL_ID_SHAPES, NATIONAL_ID_LABEL_RE, NATIONAL_ID_LABEL_WINDOW, NATIONAL_ID_GUARD_RE, PII_IBAN_RE, REALTIME_PII_PATTERNS, MAX_PII_SCAN_BYTES, IBAN_DESTINATION_KEYS, WHOLE_IBAN_RE, JSON_ESCAPE_RE, JSON_ESCAPES, MASKED_KINDS, ENTRY_RE, IBAN_TEXT_RE, EMAIL_TEXT_RE, ACCOUNT_KEY_RE, ACCOUNT_VALUE_RE, MAX_MASK_DEPTH, syntax4, EMPTY, CURL_SEND_FLAGS, WGET_SEND_FLAGS, IWR_SEND_FLAGS, WRITE_METHODS, GH_READ, GH_WRITE, GH_HOSTNAME_FLAGS, GH_REPO_VALUE_FLAGS, GH_API_VALUE_FLAGS, GIT_FETCH, PUBLISH, SHELLS2, OWN_HEADS, MAX_DEPTH3, CWD_CHANGERS, TERMINAL_ESCAPE_RE, LOOP_MAX_RECORDS, CANARY_MIN_LENGTH, MAX_TEXT, MAX_DEPTH4, MAX_JSON_PARSE, URL_DEPTH, B64_DEPTH, MIN_SEGMENT, SEPARATORS, stripSeparators, looksText, CANARY_DECODERS, VIEWS, LONG_OUTPUT_THRESHOLD_BYTES;
7436
+ var import_picomatch, import_safe_regex2, import_picomatch2, import_mvdan_sh, import_mvdan_sh2, import_safe_regex22, import_crypto2, import_crypto3, import_mvdan_sh3, import_crypto4, import_mvdan_sh4, import_crypto5, MAX_REGEX_LENGTH, REGEX_CACHE_MAX, regexCache, aws_default, bash_safe_default, docker_default, filesystem_default, github_default, k8s_default, mongodb_default, postgres_default, project_jail_default, redis_default, finance_default, identity_default, publishing_default, ACTION_TEMPLATES, ACTION_CHECKS, GAP, prog, httpTo, httpWrite, HTTP_WRITE, HTTP_WRITE_ANY, NOT_STRIPE_TEST, postTo, STRIPE_OBJECTS, APP_SHIELD_SPECS, APP_SHIELDS, APP_SHIELD_NAMES, APP_SERVER_GLOB, GENERAL_ACTION_RULES, BUILTIN_SHIELDS, SSRF_MAX_HOST, METADATA_ADDRESSES, STRICT_TIERS, METADATA_HOSTNAMES, v4Octets, TIER_REASON, CHECK_TEXT, LEVELS, MODE_VALUES, SOFT, STRICT, BLOCK_ALL, LEVEL_CHECKS, VERDICTS, CHECK_VERDICT_RANK, ALL, BUILTIN_DANGEROUS_WORDS, PRODUCT_CHECKS, SHIELD_RULE_NAME, SHIELD_RULES_FOLDED_INTO_PRODUCT, CHECKS, CHECK_BY_ID, LEGACY_TO_ID, PROJECT_JAIL_BLOCK_READ, OVERRIDE_PREFIX, LABEL_WRAPPERS, LEGACY_READERS, INVISIBLE_RE, INVISIBLE_ONE, HOMOGLYPHS, HOMOGLYPH_RE, MAX_BLOBS, MIN_DECODED, BASE64_RUN_RE, HEX_RUN_RE, HEX_ESCAPE_RUN_RE, SYSTEM_AUTH_FILES, SYSTEM_AUTH_DIRS, PASSWORD_HASH_FILES, STARTUP_NAMES, SYSTEM_DIRS, SYSTEM_DIRS_EXEMPT, UPLOAD_SYSTEM_DIRS, AGENT_INSTRUCTION_FILES, AGENT_INSTRUCTION_DIRS, LEGACY_SYSTEM_PATH_RE, MAX_INLINE_CODE, WHAT, OUTSIDE, pyImport, either, PYTHON, NODE, PERL, RUBY, PHP, TABLES, STRING_LITERAL, syntax, sharedParser, MESSAGE_FLAGS, SHELL_INTERPRETERS, DOWNLOAD_CMDS, NORMALIZE_CACHE_MAX, normalizeCache, AST_CACHE_MAX, astCache, PARSE_FAIL, INTERPRETER_LINE, PROGRAM_DIR, ACCESS_VIEW_CACHE_MAX, accessViewCache, MAX_READING_PAYLOADS, defaultExpansionOps, VARIABLE_READERS, FS_READ_TOOLS, GREP_SHAPE, PATTERN_VERBS, PATTERN_VERB_NAMES, GREP_FILE_OPERANDS, READER_VALUE_LETTERS, FILE_OPERAND_FLAGS, SCP_VALUE_FLAGS, CURL_SOURCE_FLAGS, CURL_VALUE_LETTERS, WGET_VALUE_LETTERS, TAR_VALUE_LETTERS, ZIP_VALUE_LETTERS, RSYNC_VALUE_LETTERS, RSYNC_SKIP, CP_VALUE_LETTERS, INSTALL_VALUE_LETTERS, COPY_VERBS, TAR_MODE_WORD, COPY_VERB_HEADS, FS_OP_PRESCREEN_RE, HOME_CACHE_ALLOWLIST, SENSITIVE_PATH_RULES, AST_FS_REGEX_RULES, SQL_DB_CLIS, SQL_DDL_RE, CHMOD_OPEN_PERM_TOKENS, COMMAND_WRAPPERS, INLINE_INTERPRETER, RUNNER_WRAPPERS, _redirStdinOps, _listOps, WRAPPER_TAKES_TARGET, FIND_EXEC_FLAGS, FS_MUTATION_TOOLS, INTERP_LEADING_TARGET, MAX_PAYLOAD_NESTING, payloadNesting, MAX_INLINE_CALLS, INLINE_EXEC_FALLBACK, UNREADABLE_SOURCE, SCRIPT_RUNNERS, SCRIPT_RUNNER_VALUE_FLAGS, MAX_SCRIPT_OPERANDS, NET_BINARIES, VALUE_FLAGS, HOME_VARIABLES, assignmentTable, currentStmtOffset, PAYLOAD_BUDGET, payloadBudget, seenPayloads, UNANALYSABLE_NESTING, ASSIGNMENT_HEADS, AND_OP, OR_OP, AND_OR_OPS, MAX_CALL_DEPTH, MAX_CALL_WALKS, callDepth, callWalks, FS_OP_CACHE_MAX, fsOpCache, stripDotSlash, REDIR_TRUNCATE_OPS, REDIR_FILE_IN_OPS, REDIR_HEREDOC_OPS, FIND_OPTIONS, COPY_RULE_OF, isReaderWord, positionalAfter, NONE, UNKNOWN, FORBIDDEN_PATH_SEGMENTS, BASH_TOOL_NAMES, MCP_EXECUTORS, BUILTIN_FIELDS, ARGV_FIELDS, BARE_WORD, MAX_ARGV_CHARACTERS, syntax2, MAX_ALTERNATIVES, MAX_CALL_DEPTH2, MAX_CALL_WALKS2, POSITIONAL, MAX_DEPTH, MAX_PAYLOAD_DEPTH, unique, clone, SENDING_STDIN, DOWNLOAD_SHORT_VALUE, DOWNLOAD_LONG_VALUE, DOWNLOAD_OUTPUT_FLAGS, DOWNLOAD_DIR_FLAGS, base, quoteGlob, asWord, WRITES, READS, DUP_OUT, HERE_STRING, AND, OR, DEFAULT_OPS, exempt, RANK, BIP39_ENGLISH, BIP39_PUBLIC_VECTORS, indices, lengths, hash, MAX_MNEMONIC_HASHES, SECRET_VIEW_LIMITS, IBAN_LENGTH, IBAN_BBAN_SHAPE, B58, B58_INDEX, XPRV_VERSIONS, B62, CRC32_TABLE, GITHUB_TOKEN_RE, B64URL, B64URL_INDEX, CASK_TWO_ZERO_SUFFIX, CASK_FOUR_ZERO_SUFFIX, CF_ODD, CF_EVEN, SPANISH_LETTERS, HETU_CHARS, MAX, UNTRUSTED_TOOLS, SIGNALS, MENTION_QUOTE_RE, MENTION_WORD_RE, ASSIGNMENT_CONTEXT_RE, DLP_STOPWORDS, REFERENCE_VALUE_RE, IDENTIFIER_VALUE_RE, PATH_VALUE_RE, DOTTED_REFERENCE_RE, CONCATENATION_RE, EMAIL_VALUE_RE, FIXTURE_NAME_RE, DERIVATIVE_NAME_RE, QUERY_CREDENTIAL_VALUE_RE, OTP_SECRET_RE, OTP_DOC_SECRETS, ASSIGNED_SECRET_VALUE_RE, ASSIGNED_SECRET_NAME_RE, NAME_KEYWORD_RE, ARN_CONTEXT_RE, CIPHER_KEY_NAME_RE, CIPHER_NAME_PARTS, CIPHER_KEY_VALUE_RE, LARAVEL_KEY_VALUE_RE, SQL_PASSWORD_VALUE_RE, GRAFANA_KEY_VALUE_RE, BASIC_VALUE_RE, BASIC_PAIR_RE, OTP_CAPTURE_RE, DB_URL_PASSWORD_RE, DLP_PATTERNS, DLP_PATTERNS_GLOBAL, SENSITIVE_PATH_PATTERNS, SENSITIVE_PATH_REGEXES, MAX_DEPTH2, MAX_STRING_BYTES, MAX_JSON_PARSE_BYTES, BATCH_SEPARATOR, syntax3, NPM_INSTALL_VERBS, NPM_EXEC_VERBS, PNPM_INSTALL_VERBS, YARN_INSTALL_VERBS, BUN_INSTALL_VERBS, DLX_VERBS, NON_REGISTRY_RE, NPM_NAME_RE, EXACT_SEMVER_RE, NPM_VALUE_FLAGS, PNPM_VALUE_FLAGS, YARN_VALUE_FLAGS, BUN_VALUE_FLAGS, PIP_VALUE_FLAGS, UV_VALUE_FLAGS, POETRY_VALUE_FLAGS, PIPENV_VALUE_FLAGS, PIPX_VALUE_FLAGS, PY_SPEC_RE, PY_EXACT_RE, EXACT_VERSION_RE, GEM_NAME_RE, GEM_VALUE_FLAGS, BUNDLE_VALUE_FLAGS, CRATE_NAME_RE, CARGO_ADD_VALUE_FLAGS, CARGO_INSTALL_VALUE_FLAGS, GO_VALUE_FLAGS, GO_PATH_RE, NUGET_NAME_RE, DOTNET_ADD_VALUE_FLAGS, DOTNET_TOOL_VALUE_FLAGS, NUGET_VALUE_FLAGS, MAVEN_COORD_RE, COMPOSER_NAME_RE, COMPOSER_VALUE_FLAGS, EDITOR_HEADS, EXTENSION_ID_RE, MANAGER_HEADS, SHELLS, MAX_NESTING, SHELL_VALUE_FLAGS, TUNING_FIELDS, MAP_GOVERNED, KNOB_GOVERNED, CONFIGURABLE_CHECK_IDS, DEFAULT_EGRESS_ALLOWLIST, PRIVATE_HOST_SUFFIXES, SOURCE_COMMANDS, SINK_COMMANDS, OBFUSCATORS, SENSITIVE_PATTERNS, FLAGS_WITH_VALUES, DESTINATION_ARGS, MCP_DESTINATION_KEYS, ARGUMENT_SCAN_LIMITS, RUN_CHAR, runChar, VERDICT_RANK, SQL_DML_KEYWORDS, MAX_DESTINATIONS, MAX_SCAN_CHARS, EMAIL_RE, URL_RE, IBAN_RE, RECIPIENT_KEYS, DESTRUCTIVE_VERB_RE, PII_EMAIL_RE, PII_SSN_RE, PII_PHONE_RE, PII_CC16_RE, PII_CC15_RE, PII_CC14_RE, PII_CC13_RE, PII_CC19_RE, CARD_PATTERNS, PII_ROUTING_RE, ROUTING_LABEL_RE, ROUTING_LABEL_WINDOW, NATIONAL_ID_SHAPES, NATIONAL_ID_LABEL_RE, NATIONAL_ID_LABEL_WINDOW, NATIONAL_ID_GUARD_RE, PII_IBAN_RE, REALTIME_PII_PATTERNS, MAX_PII_SCAN_BYTES, IBAN_DESTINATION_KEYS, WHOLE_IBAN_RE, JSON_ESCAPE_RE, JSON_ESCAPES, MASKED_KINDS, ENTRY_RE, IBAN_TEXT_RE, EMAIL_TEXT_RE, ACCOUNT_KEY_RE, ACCOUNT_VALUE_RE, MAX_MASK_DEPTH, syntax4, EMPTY, CURL_SEND_FLAGS, WGET_SEND_FLAGS, IWR_SEND_FLAGS, WRITE_METHODS, GH_READ, GH_WRITE, GH_HOSTNAME_FLAGS, GH_REPO_VALUE_FLAGS, GH_API_VALUE_FLAGS, GIT_FETCH, PUBLISH, SHELLS2, OWN_HEADS, MAX_DEPTH3, CWD_CHANGERS, TERMINAL_ESCAPE_RE, LOOP_MAX_RECORDS, CANARY_MIN_LENGTH, MAX_TEXT, MAX_DEPTH4, MAX_JSON_PARSE, URL_DEPTH, B64_DEPTH, MIN_SEGMENT, SEPARATORS, stripSeparators, looksText, CANARY_DECODERS, VIEWS, LONG_OUTPUT_THRESHOLD_BYTES;
7380
7437
  var init_dist = __esm({
7381
7438
  "packages/policy-engine/dist/index.mjs"() {
7382
7439
  "use strict";
@@ -9196,6 +9253,52 @@ var init_dist = __esm({
9196
9253
  advice: "Keep Block for known-malicious packages; brand-new packages already stop for Review."
9197
9254
  }
9198
9255
  };
9256
+ LEVELS = ["audit", "soft", "standard", "strict", "block-all"];
9257
+ MODE_VALUES = ["observe", ...LEVELS];
9258
+ SOFT = {
9259
+ "commands.inline-exec": "log",
9260
+ "commands.eval-dynamic": "log",
9261
+ "commands.rm": "log",
9262
+ "commands.chmod": "log",
9263
+ "commands.sudo": "log",
9264
+ "commands.git-destructive": "log",
9265
+ "commands.sql-ddl": "log",
9266
+ "commands.sql-no-where": "log",
9267
+ "commands.temp-binary": "log",
9268
+ "commands.disk-destroy": "log",
9269
+ "commands.dangerous-word": "log",
9270
+ "files.system-dirs": "log",
9271
+ "files.shell-startup": "log",
9272
+ "files.password-hashes": "log",
9273
+ "data.pipe-chain": "log",
9274
+ "behavior.untrusted-content": "log"
9275
+ };
9276
+ STRICT = {
9277
+ "commands.sql-ddl": "block",
9278
+ "commands.disk-destroy": "block",
9279
+ "commands.node9-disarm": "block",
9280
+ "files.system-dirs": "block",
9281
+ "files.shell-startup": "block",
9282
+ "files.password-hashes": "block",
9283
+ "data.secrets-weak": "block",
9284
+ "data.pipe-chain": "block",
9285
+ "network.unknown-host": "review",
9286
+ "network.internal-addresses": "block",
9287
+ "behavior.prompt-injection": "log",
9288
+ "loading.skill-tamper": "block"
9289
+ };
9290
+ BLOCK_ALL = {
9291
+ ...STRICT,
9292
+ "commands.unknown": "review",
9293
+ "commands.temp-binary": "block"
9294
+ };
9295
+ LEVEL_CHECKS = {
9296
+ audit: {},
9297
+ soft: SOFT,
9298
+ standard: {},
9299
+ strict: STRICT,
9300
+ "block-all": BLOCK_ALL
9301
+ };
9199
9302
  VERDICTS = ["off", "log", "review", "block"];
9200
9303
  CHECK_VERDICT_RANK = { off: 0, log: 1, review: 2, block: 3 };
9201
9304
  ALL = VERDICTS;
@@ -9652,7 +9755,7 @@ var init_dist = __esm({
9652
9755
  "commands.rm": (s) => knob(s.commandChecks?.rmAdvisory),
9653
9756
  "commands.chmod": (s) => knob(s.commandChecks?.chmod),
9654
9757
  "commands.sql-ddl": (s) => knob(s.commandChecks?.sqlDdl),
9655
- "commands.unknown": (s) => s.mode === void 0 ? void 0 : s.mode === "strict" ? "review" : "off",
9758
+ "commands.unknown": (s) => s.mode === void 0 ? void 0 : isBlockAll(s.mode) ? "review" : "off",
9656
9759
  "data.secrets": (s) => enabledOr(s.dlp?.enabled, "block"),
9657
9760
  "data.secrets-weak": (s) => {
9658
9761
  if (s.dlp?.enabled === false) return "off";
@@ -15288,7 +15391,8 @@ var SmartRuleSchema = import_zod.z.object({
15288
15391
  var ConfigFileSchema = import_zod.z.object({
15289
15392
  version: import_zod.z.string().optional(),
15290
15393
  settings: import_zod.z.object({
15291
- mode: import_zod.z.enum(["standard", "strict", "audit", "observe"]).optional(),
15394
+ // The protection level (levels.ts in the engine); `observe` is Audit's older name.
15395
+ mode: import_zod.z.enum(["observe", "audit", "soft", "standard", "strict", "block-all"]).optional(),
15292
15396
  autoStartDaemon: import_zod.z.boolean().optional(),
15293
15397
  // enableUndo / policy.snapshot: removed with the undo feature. The
15294
15398
  // schema strips undeclared keys silently (plain zod object — no
@@ -15663,7 +15767,7 @@ function readShieldOverrides() {
15663
15767
  }
15664
15768
 
15665
15769
  // src/config/managed.ts
15666
- var MODE_ORDER = ["observe", "audit", "standard", "strict"];
15770
+ var MODE_ORDER = ["observe", "audit", "soft", "standard", "strict", "block-all"];
15667
15771
  var EGRESS_MODE_ORDER = ["off", "review", "block"];
15668
15772
  function rankIn(order, value) {
15669
15773
  return value === void 0 ? -1 : order.indexOf(value);
@@ -15926,7 +16030,7 @@ function v2ToLegacy(raw, options = {}) {
15926
16030
  continue;
15927
16031
  }
15928
16032
  if (id === "commands.unknown") {
15929
- warnings.push(`checks.${id}: set "mode": "strict" instead`);
16033
+ warnings.push(`checks.${id}: set "mode": "block-all" instead`);
15930
16034
  continue;
15931
16035
  }
15932
16036
  const allowed = configurableValues(id);
@@ -16465,6 +16569,11 @@ var KNOB_TO_CHECK = {
16465
16569
  evalDynamic: "commands.eval-dynamic",
16466
16570
  pipeChainHigh: "data.pipe-chain"
16467
16571
  };
16572
+ function statedSignalFields(policy) {
16573
+ return Object.keys(tuningFromLegacyPolicy(policy)["loading.malicious-package"] ?? {}).filter(
16574
+ (k) => k === "newPackage" || k === "installScript"
16575
+ );
16576
+ }
16468
16577
  function catalogSettingsFrom(settings, policy) {
16469
16578
  return catalogSettingsFromConfig(settings, policy);
16470
16579
  }
@@ -16532,6 +16641,8 @@ function getConfig(cwd) {
16532
16641
  const keyed = !!pr2Creds?.apiKey && pr2Creds.localOnly !== true;
16533
16642
  let ssrfStrictSource = "default";
16534
16643
  const workspaceChecks = {};
16644
+ const managedStatedChecks = /* @__PURE__ */ new Set();
16645
+ const managedStatedSignals = /* @__PURE__ */ new Set();
16535
16646
  const applyLayer = (source, isProject = false, isCloud = false) => {
16536
16647
  if (!source) return;
16537
16648
  const s = source.settings || {};
@@ -16739,9 +16850,11 @@ function getConfig(cwd) {
16739
16850
  if (raw.managedConfig && typeof raw.managedConfig === "object") {
16740
16851
  const mc = raw.managedConfig;
16741
16852
  const locked = Array.isArray(mc.locked) ? mc.locked.filter((f) => typeof f === "string") : [];
16853
+ for (const id of knobStatedChecks(mc)) managedStatedChecks.add(id);
16854
+ for (const k of statedSignalFields(mc)) managedStatedSignals.add(k);
16742
16855
  if (typeof mc.mode === "string") {
16743
16856
  if (keyed) {
16744
- if (["observe", "audit", "standard", "strict"].includes(mc.mode)) {
16857
+ if (isModeValue(mc.mode)) {
16745
16858
  mergedSettings.mode = mc.mode;
16746
16859
  }
16747
16860
  } else {
@@ -17023,14 +17136,15 @@ function getConfig(cwd) {
17023
17136
  const envMode = process.env.NODE9_MODE;
17024
17137
  if (envMode && !modeCloudControlled && // PR-2: one listening point includes the env var — a keyed machine's
17025
17138
  // mode comes from the workspace (or the shipped default), never the shell.
17026
- !keyed && ["observe", "audit", "standard", "strict"].includes(envMode)) {
17139
+ !keyed && isModeValue(envMode)) {
17027
17140
  mergedSettings.mode = envMode;
17028
17141
  }
17029
- if ((cloudManagedShields.length > 0 || cloudMandatesEnforcement) && !modeCloudControlled && !modeCloudStaged && (mergedSettings.mode === "observe" || mergedSettings.mode === "audit")) {
17142
+ if ((cloudManagedShields.length > 0 || cloudMandatesEnforcement) && !modeCloudControlled && !modeCloudStaged && isRecordOnly(mergedSettings.mode)) {
17030
17143
  mergedSettings.mode = "standard";
17031
17144
  }
17032
- const managedFloorActive = cloudManagedShields.length > 0 || cloudMandatesEnforcement || modeCloudControlled && mergedSettings.mode === "strict";
17033
- if (modeCloudControlled && mergedSettings.mode === "strict") {
17145
+ const cloudStrictLevel = levelOf(mergedSettings.mode) === "strict" || levelOf(mergedSettings.mode) === "block-all";
17146
+ const managedFloorActive = cloudManagedShields.length > 0 || cloudMandatesEnforcement || modeCloudControlled && cloudStrictLevel;
17147
+ if (modeCloudControlled && cloudStrictLevel) {
17034
17148
  for (const name of Object.keys(mergedEnvironments)) {
17035
17149
  if (mergedEnvironments[name]?.requireApproval === false) {
17036
17150
  const cleaned = { ...mergedEnvironments[name] };
@@ -17048,6 +17162,35 @@ function getConfig(cwd) {
17048
17162
  mergedPolicy.ignoredTools = [...new Set(mergedPolicy.ignoredTools)];
17049
17163
  mergedPolicy.skillPinning.roots = [...new Set(mergedPolicy.skillPinning.roots)];
17050
17164
  const resolvedSsrfStrictSource = keyed && ssrfStrictSource === "local" ? "default" : ssrfStrictSource;
17165
+ const level = levelOf(mergedSettings.mode);
17166
+ const levelKnobChecks = Object.entries(levelChecks(level)).filter(([id]) => isKnobGoverned(id));
17167
+ const signals = levelPackageSignals(level);
17168
+ if (levelKnobChecks.length > 0 || signals) {
17169
+ const policyOf = (layer) => layer?.policy ?? {};
17170
+ const trusted = /* @__PURE__ */ new Set([...managedStatedChecks, ...Object.keys(workspaceChecks)]);
17171
+ const trustedSignals = new Set(managedStatedSignals);
17172
+ const project = /* @__PURE__ */ new Set();
17173
+ const projectSignals = /* @__PURE__ */ new Set();
17174
+ if (!keyed) {
17175
+ for (const id of knobStatedChecks(policyOf(globalConfig))) trusted.add(id);
17176
+ for (const k of statedSignalFields(policyOf(globalConfig))) trustedSignals.add(k);
17177
+ for (const id of knobStatedChecks(policyOf(projectConfig))) project.add(id);
17178
+ for (const k of statedSignalFields(policyOf(projectConfig))) projectSignals.add(k);
17179
+ }
17180
+ const before = resolveCheckMap(catalogSettingsFromConfig({}, mergedPolicy));
17181
+ for (const [id, v] of levelKnobChecks) {
17182
+ if (trusted.has(id)) continue;
17183
+ if (project.has(id) && CHECK_VERDICT_RANK[v] <= CHECK_VERDICT_RANK[before[id] ?? "off"])
17184
+ continue;
17185
+ checkToLegacyPolicy(mergedPolicy, id, v);
17186
+ }
17187
+ if (signals) {
17188
+ for (const key of ["newPackage", "installScript"]) {
17189
+ if (trustedSignals.has(key) || projectSignals.has(key)) continue;
17190
+ mergedPolicy.packageCheck[key] = signals[key];
17191
+ }
17192
+ }
17193
+ }
17051
17194
  const explicit = {};
17052
17195
  const checkSources = {};
17053
17196
  if (keyed) {
@@ -17219,6 +17362,9 @@ function applyUntrustedContent(cur, raw, replaceLists = false, isProject = false
17219
17362
  // src/utils/regex.ts
17220
17363
  init_dist();
17221
17364
 
17365
+ // src/policy/index.ts
17366
+ init_dist();
17367
+
17222
17368
  // src/dlp.ts
17223
17369
  var import_fs5 = __toESM(require("fs"));
17224
17370
  var import_path5 = __toESM(require("path"));
@@ -20147,11 +20293,11 @@ async function checkOne(p, cfg, misses, networkCapped, cwd) {
20147
20293
  }
20148
20294
  return findings;
20149
20295
  }
20150
- var SOFT = /* @__PURE__ */ new Set(["new", "install-script"]);
20296
+ var SOFT2 = /* @__PURE__ */ new Set(["new", "install-script"]);
20151
20297
  async function byHistory(p, version, info, findings, misses) {
20152
20298
  let out = findings;
20153
20299
  let h = info.history;
20154
- if (!h && p.ecosystem === "PyPI" && out.some((f) => SOFT.has(f.kind))) {
20300
+ if (!h && p.ecosystem === "PyPI" && out.some((f) => SOFT2.has(f.kind))) {
20155
20301
  try {
20156
20302
  h = await pypiHistory(p.name, version) ?? void 0;
20157
20303
  } catch (err) {
@@ -20171,7 +20317,7 @@ async function byHistory(p, version, info, findings, misses) {
20171
20317
  });
20172
20318
  if (p.ecosystem === "npm") {
20173
20319
  if (h.previousProvenance && h.provenance === false) return [...out, drop()];
20174
- if (!out.some((f) => SOFT.has(f.kind)) || !h.provenance || !h.previousProvenance) return out;
20320
+ if (!out.some((f) => SOFT2.has(f.kind)) || !h.provenance || !h.previousProvenance) return out;
20175
20321
  const [now, before] = await Promise.all([
20176
20322
  npmSourceRepo(p.name, version),
20177
20323
  npmSourceRepo(p.name, previous)
@@ -20179,7 +20325,7 @@ async function byHistory(p, version, info, findings, misses) {
20179
20325
  return vouched(p, version, now, before, out, misses);
20180
20326
  }
20181
20327
  if (p.ecosystem === "PyPI") {
20182
- if (!out.some((f) => SOFT.has(f.kind)) || !info.file || !h.previousFile) return out;
20328
+ if (!out.some((f) => SOFT2.has(f.kind)) || !info.file || !h.previousFile) return out;
20183
20329
  const [now, before] = await Promise.all([
20184
20330
  pypiSourceRepo(p.name, version, info.file),
20185
20331
  pypiSourceRepo(p.name, previous, h.previousFile)
@@ -20195,7 +20341,7 @@ function vouched(p, version, now, before, findings, misses) {
20195
20341
  return findings;
20196
20342
  }
20197
20343
  if (now === "none" || before === "none" || now !== before) return findings;
20198
- return findings.filter((f) => !SOFT.has(f.kind));
20344
+ return findings.filter((f) => !SOFT2.has(f.kind));
20199
20345
  }
20200
20346
  async function runPackageCheck(toolName, args, cfg, cwd) {
20201
20347
  if (!cfg.enabled) return ALLOW;
@@ -20515,7 +20661,7 @@ async function _authorizeHeadlessCore(toolName, args, metaArg, options) {
20515
20661
  appendHookDebug(toolName, args, meta, hashAuditArgs);
20516
20662
  }
20517
20663
  const isManual = meta?.agent === "Terminal";
20518
- const isObserveMode = config.settings.mode === "observe";
20664
+ const isObserveMode = isRecordOnly(config.settings.mode);
20519
20665
  let explainableLabel = "Local Config";
20520
20666
  let dlpReviewFlagged = false;
20521
20667
  let packageReview = null;
@@ -20573,7 +20719,7 @@ async function _authorizeHeadlessCore(toolName, args, metaArg, options) {
20573
20719
  explainableLabel = "Shell inspection incomplete";
20574
20720
  policyRuleDescription = "The executable command could not be inspected. Approve this call explicitly.";
20575
20721
  }
20576
- const fileReview = !isObserveMode && config.settings.mode !== "audit" && fileFinding?.decision === "review";
20722
+ const fileReview = !isObserveMode && fileFinding?.decision === "review";
20577
20723
  const evaluateCurrentPolicy = async (skipIgnoredFastPath = false) => {
20578
20724
  const own = await evaluatePolicy2(toolName, args, meta?.agent, options?.cwd, {
20579
20725
  fileAccess,
@@ -20600,7 +20746,7 @@ async function _authorizeHeadlessCore(toolName, args, metaArg, options) {
20600
20746
  if (fileFinding) {
20601
20747
  meta = { ...meta, ruleName: fileFinding.ruleName };
20602
20748
  hashAuditArgs = true;
20603
- const observing = isObserveMode || config.settings.mode === "audit";
20749
+ const observing = isObserveMode;
20604
20750
  const blocked = !observing && (fileFinding.decision === "block" || fileReview && config.settings.panicMode);
20605
20751
  appendLocalAudit(
20606
20752
  toolName,
@@ -21082,15 +21228,6 @@ async function _authorizeHeadlessCore(toolName, args, metaArg, options) {
21082
21228
  }
21083
21229
  return { approved: true, checkedBy: "audit" };
21084
21230
  }
21085
- if (config.settings.mode === "audit") {
21086
- if (judge) {
21087
- const policyResult = await evaluateCurrentPolicy();
21088
- if (policyResult.decision === "review") {
21089
- appendLocalAudit(toolName, args, "allow", "audit-mode", ownRowMeta(true), hashAuditArgs);
21090
- }
21091
- }
21092
- return { approved: true, checkedBy: "audit" };
21093
- }
21094
21231
  let appPermReview = null;
21095
21232
  let appPermReviewTool = null;
21096
21233
  const callSpecificReview = () => fileReview || shellReview || dlpReviewFlagged || !!appPermReview || !!taintWarning || !!exposureReview || !!packageReview;