agentseal 0.5.1 → 0.6.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.d.ts CHANGED
@@ -405,7 +405,12 @@ declare function stripBidiControls(text: string): string;
405
405
  declare function stripHtmlComments(text: string): string;
406
406
  /** Check if text contains any invisible/obfuscation characters. */
407
407
  declare function hasInvisibleChars(text: string): boolean;
408
- /** Apply NFKC unicode normalization (homoglyphs → ASCII). */
408
+ /**
409
+ * Apply NFKC unicode normalization then TR39 confusable mapping.
410
+ * NFKC handles compatibility decompositions (fullwidth, ligatures).
411
+ * The confusable map catches cross-script homoglyphs that NFKC misses
412
+ * (Cyrillic, Greek, Cherokee, etc.).
413
+ */
409
414
  declare function normalizeUnicode(text: string): string;
410
415
  /**
411
416
  * Find and decode inline base64 strings.
@@ -426,19 +431,16 @@ declare function unescapeSequences(text: string): string;
426
431
  */
427
432
  declare function expandStringConcat(text: string): string;
428
433
  /**
429
- * Apply all deobfuscation transforms to text.
434
+ * Decode HTML character references (numeric, hex, and named).
435
+ * Handles c (decimal), c (hex), and & (named) forms.
436
+ */
437
+ declare function decodeHtmlEntities(text: string): string;
438
+ /**
439
+ * Apply all deobfuscation transforms to text (2-pass pipeline).
430
440
  *
431
- * Returns cleaned text for regex pattern matching.
432
- * Transforms applied in order (same as Python):
433
- * 1. stripZeroWidth
434
- * 2. stripTagChars
435
- * 3. stripVariationSelectors
436
- * 4. stripBidiControls
437
- * 5. stripHtmlComments
438
- * 6. normalizeUnicode (NFKC)
439
- * 7. decodeBase64Blocks
440
- * 8. unescapeSequences
441
- * 9. expandStringConcat
441
+ * Two passes catch nested obfuscation where the first pass reveals
442
+ * content that a second pass can further decode (e.g. base64 hidden
443
+ * inside zero-width splits, or escape sequences inside HTML entities).
442
444
  */
443
445
  declare function deobfuscate(text: string): string;
444
446
 
@@ -486,6 +488,9 @@ interface MCPServerResult {
486
488
  source_file: string;
487
489
  verdict: GuardVerdict;
488
490
  findings: MCPFinding[];
491
+ registry_score?: number;
492
+ registry_level?: string;
493
+ registry_findings_count?: number;
489
494
  }
490
495
  /** Return the highest-severity finding from an MCPServerResult, or undefined. */
491
496
  declare function topMCPFinding(result: MCPServerResult): MCPFinding | undefined;
@@ -530,6 +535,47 @@ interface BaselineChangeResult {
530
535
  change_type: string;
531
536
  detail: string;
532
537
  }
538
+ interface UnlistedFinding {
539
+ code: string;
540
+ title: string;
541
+ description: string;
542
+ severity: string;
543
+ item_name: string;
544
+ item_type: string;
545
+ }
546
+ declare function unlistedFindingToDict(f: UnlistedFinding): Record<string, any>;
547
+ interface CustomFinding {
548
+ code: string;
549
+ title: string;
550
+ severity: string;
551
+ verdict: string;
552
+ remediation: string;
553
+ rule_file: string;
554
+ entity_type: string;
555
+ entity_name: string;
556
+ }
557
+ declare function customFindingFromDict(d: Record<string, any>): CustomFinding;
558
+ declare function customFindingToDict(f: CustomFinding): Record<string, any>;
559
+ interface DeltaEntry {
560
+ change_type: string;
561
+ entity_type: string;
562
+ entity_name: string;
563
+ code?: string;
564
+ title?: string;
565
+ old_verdict?: string;
566
+ new_verdict?: string;
567
+ severity?: string;
568
+ }
569
+ declare function deltaEntryToDict(e: DeltaEntry): Record<string, any>;
570
+ declare class DeltaResult {
571
+ previous_timestamp: string;
572
+ entries: DeltaEntry[];
573
+ constructor(previous_timestamp: string, entries?: DeltaEntry[]);
574
+ get total_new(): number;
575
+ get total_resolved(): number;
576
+ get total_changed(): number;
577
+ toDict(): Record<string, any>;
578
+ }
533
579
  interface GuardReport {
534
580
  timestamp: string;
535
581
  duration_seconds: number;
@@ -540,6 +586,9 @@ interface GuardReport {
540
586
  toxic_flows: ToxicFlowResult[];
541
587
  baseline_changes: BaselineChangeResult[];
542
588
  llm_tokens_used: number;
589
+ unlisted_findings?: UnlistedFinding[];
590
+ custom_findings?: CustomFinding[];
591
+ config_path?: string;
543
592
  }
544
593
  declare function totalDangers(report: GuardReport): number;
545
594
  declare function totalWarnings(report: GuardReport): number;
@@ -547,6 +596,8 @@ declare function totalSafe(report: GuardReport): number;
547
596
  declare function hasCritical(report: GuardReport): boolean;
548
597
  /** Collect all remediation actions, sorted by severity. */
549
598
  declare function allActions(report: GuardReport): string[];
599
+ /** Build a GuardReport from a plain dict (e.g. parsed JSON). */
600
+ declare function guardReportFromDict(d: Record<string, any>): GuardReport;
550
601
 
551
602
  /**
552
603
  * Skill threat detection — layered analysis for skill/rules files.
@@ -707,11 +758,81 @@ declare class MCPConfigChecker {
707
758
  private _checkHighEntropySecrets;
708
759
  }
709
760
 
761
+ /**
762
+ * .agentseal.yaml project config loader, resolution, and filtering.
763
+ *
764
+ * Port of Python agentseal/project_config.py — same structure, TypeScript implementation.
765
+ */
766
+
767
+ interface IgnoreFindingEntry {
768
+ id: string;
769
+ reason?: string;
770
+ }
771
+ interface ProjectConfig {
772
+ fail_on: string;
773
+ allowed_agents: string[];
774
+ allowed_mcp_servers: string[];
775
+ ignore_paths: string[];
776
+ ignore_findings: IgnoreFindingEntry[];
777
+ rules_paths: string[];
778
+ config_path: string;
779
+ }
780
+ /**
781
+ * Parse a .agentseal.yaml file and return a validated ProjectConfig.
782
+ * Throws on invalid YAML, invalid fail_on, or non-dict root.
783
+ */
784
+ declare function loadProjectConfig(configPath: string): ProjectConfig;
785
+ /**
786
+ * Resolve project config by explicit path or by walking up from searchDir.
787
+ * Returns null if no config found.
788
+ */
789
+ declare function resolveProjectConfig(opts?: {
790
+ configPath?: string;
791
+ searchDir?: string;
792
+ }): ProjectConfig | null;
793
+ /**
794
+ * Check if a file path should be ignored based on config.ignore_paths.
795
+ * Splits path on "/" and checks if ANY segment exactly matches an ignore entry.
796
+ */
797
+ declare function shouldIgnorePath(config: ProjectConfig, path: string): boolean;
798
+ /**
799
+ * Check if a finding should be ignored based on config.ignore_findings.
800
+ * Entry id can be bare code ("SKILL-001") or code:path ("SKILL-001:./file.md").
801
+ */
802
+ declare function shouldIgnoreFinding(config: ProjectConfig, code: string, path?: string): boolean;
803
+ /**
804
+ * Determine if the scan should fail based on fail_on level and verdicts.
805
+ */
806
+ declare function shouldFail(failOn: string, verdicts: {
807
+ hasDanger: boolean;
808
+ hasWarning: boolean;
809
+ hasSafe?: boolean;
810
+ }): boolean;
811
+ /**
812
+ * Generate GUARD-001 (unlisted agent) and GUARD-002 (unlisted MCP server) findings.
813
+ * Only checks if the respective allowlist is non-empty.
814
+ */
815
+ declare function generateUnlistedFindings(config: ProjectConfig, agents: AgentConfigResult[], mcpServers: Record<string, any>[]): UnlistedFinding[];
816
+ /**
817
+ * Generate a .agentseal.yaml config string from discovered agents and MCP servers.
818
+ */
819
+ declare function generateConfigYaml(agents: AgentConfigResult[], mcpServers: Record<string, any>[]): string;
820
+ /**
821
+ * Initialize a .agentseal.yaml config in the target directory.
822
+ * Returns true if written, false if file exists and not force.
823
+ */
824
+ declare function runGuardInit(opts?: {
825
+ targetDir?: string;
826
+ force?: boolean;
827
+ interactive?: boolean;
828
+ }): boolean;
829
+
710
830
  /**
711
831
  * Guard — one-command machine security scan.
712
832
  *
713
- * Chains machine discovery, skill scanning, blocklist, and deobfuscation
714
- * into a single zero-config experience.
833
+ * Chains machine discovery, skill scanning, blocklist, deobfuscation,
834
+ * project config, custom rules, registry enrichment, history/delta,
835
+ * and unlisted findings into a single zero-config experience.
715
836
  *
716
837
  * Port of Python agentseal/guard.py + agentseal/skill_scanner.py.
717
838
  */
@@ -728,6 +849,18 @@ interface GuardOptions {
728
849
  embedFn?: (texts: string[]) => Promise<number[][]>;
729
850
  /** Scan a specific directory instead of the whole machine. */
730
851
  scanPath?: string;
852
+ /** Pre-loaded project config. If not provided, resolved from scanPath. */
853
+ config?: ProjectConfig;
854
+ /** Skip registry enrichment. Default: false */
855
+ noRegistry?: boolean;
856
+ /** Skip history save and delta computation. Default: false */
857
+ noDiff?: boolean;
858
+ /** Paths to custom rule files/directories. */
859
+ rulesPaths?: string[];
860
+ /** Load a previously saved JSON report instead of scanning. */
861
+ fromJson?: string;
862
+ /** Fail threshold: "danger" (default), "warning", or "safe". */
863
+ failOn?: string;
731
864
  }
732
865
  /** Extract a human-readable name from a skill file path. */
733
866
  declare function extractSkillName(filePath: string): string;
@@ -736,10 +869,10 @@ declare function computeVerdict(findings: SkillFinding[]): GuardVerdict;
736
869
  /** Scan a single skill file through all detection layers. */
737
870
  declare function scanSkillFile(filePath: string, scanner: SkillScanner, blocklist: Blocklist): SkillResult;
738
871
  declare class Guard {
739
- private readonly _options;
872
+ private readonly options;
740
873
  constructor(options?: GuardOptions);
741
874
  /** Execute full guard scan. Returns a GuardReport with all findings. */
742
- run(): GuardReport;
875
+ run(): Promise<GuardReport>;
743
876
  }
744
877
 
745
878
  /**
@@ -952,6 +1085,177 @@ declare class Notifier {
952
1085
  private _notifyFallback;
953
1086
  }
954
1087
 
1088
+ /**
1089
+ * Client for agentseal.org MCP trust score enrichment API.
1090
+ *
1091
+ * Enriches local MCP scan results with registry intelligence
1092
+ * (trust score, risk level, finding counts) via bulk lookup.
1093
+ */
1094
+
1095
+ /** Convert a name to a URL-safe slug. */
1096
+ declare function slugify(name: string): string;
1097
+ /**
1098
+ * Extract a package name from a command string and slugify it.
1099
+ *
1100
+ * Recognises: npx, bunx, uvx, pip/pip3 install, docker run.
1101
+ * Strips @version suffixes. Returns null for bare binaries or
1102
+ * unparseable commands.
1103
+ */
1104
+ declare function extractPackageSlug(command: string): string | null;
1105
+ /**
1106
+ * POST a list of slugs to the bulk-check endpoint.
1107
+ *
1108
+ * Returns the parsed JSON on success, or {} on any error (timeout,
1109
+ * network failure, non-ok status).
1110
+ */
1111
+ declare function bulkCheck(slugs: string[], apiKey?: string): Promise<Record<string, any>>;
1112
+ /**
1113
+ * Enrich MCP scan results with registry intelligence (in-place).
1114
+ *
1115
+ * For each result, derives a name slug and a command slug, queries the
1116
+ * registry, then writes registry_score / registry_level /
1117
+ * registry_findings_count onto matching results.
1118
+ *
1119
+ * Results that already have registry_score set are skipped to prevent
1120
+ * double-enrichment.
1121
+ */
1122
+ declare function enrichMcpResults(results: MCPServerResult[], apiKey?: string): Promise<void>;
1123
+
1124
+ /**
1125
+ * YAML community rule engine with glob matching.
1126
+ *
1127
+ * Port of Python agentseal/rules.py — same structure, TypeScript classes.
1128
+ */
1129
+
1130
+ /**
1131
+ * Match a value against a glob pattern (case-insensitive).
1132
+ *
1133
+ * Supports `*` (any chars), `?` (single char), `[abc]` and `[!abc]` character classes.
1134
+ * All regex special characters are escaped except glob operators.
1135
+ */
1136
+ declare function fnmatchCase(value: string, pattern: string): boolean;
1137
+ interface RuleTest {
1138
+ name: string;
1139
+ input: Record<string, string>;
1140
+ expect: string;
1141
+ }
1142
+ interface Rule {
1143
+ id: string;
1144
+ title: string;
1145
+ description: string;
1146
+ severity: string;
1147
+ verdict: string;
1148
+ remediation: string;
1149
+ match: Record<string, string | string[]>;
1150
+ tests: RuleTest[];
1151
+ source_file: string;
1152
+ }
1153
+ interface RuleTestResult {
1154
+ rule_id: string;
1155
+ test_name: string;
1156
+ passed: boolean;
1157
+ expected: string;
1158
+ actual: string;
1159
+ }
1160
+ declare class RuleEngine {
1161
+ private rules;
1162
+ constructor(rules: Rule[]);
1163
+ /**
1164
+ * Load rules from file paths and/or directory paths.
1165
+ *
1166
+ * - Files are loaded directly.
1167
+ * - Directories are globbed for *.yaml and *.yml files.
1168
+ * - Files without a top-level "rules" key are silently skipped.
1169
+ * - Validates required fields, severity, verdict, match.type.
1170
+ * - Throws on duplicate IDs across files.
1171
+ */
1172
+ static fromPaths(paths: string[]): RuleEngine;
1173
+ /**
1174
+ * Check if a rule matches an entity's data.
1175
+ *
1176
+ * - AND logic across fields (all fields must match).
1177
+ * - OR logic within a field (any pattern in the array matches).
1178
+ * - The "type" field in match is skipped (used for routing only).
1179
+ */
1180
+ private _matchEntity;
1181
+ /**
1182
+ * Evaluate MCP rules against a server result.
1183
+ */
1184
+ evaluateMcp(server: MCPServerResult | Record<string, any>, rawConfig: Record<string, any>): CustomFinding[];
1185
+ /**
1186
+ * Evaluate skill rules against a skill result.
1187
+ */
1188
+ evaluateSkill(skill: SkillResult | Record<string, any>, content: string): CustomFinding[];
1189
+ /**
1190
+ * Evaluate agent rules against an agent config result.
1191
+ */
1192
+ evaluateAgent(agent: AgentConfigResult | Record<string, any>): CustomFinding[];
1193
+ /**
1194
+ * Run embedded tests for all rules.
1195
+ */
1196
+ runTests(): RuleTestResult[];
1197
+ }
1198
+
1199
+ /**
1200
+ * SQLite history store with delta computation for guard scans.
1201
+ *
1202
+ * Uses better-sqlite3 (optional dependency) for persistence.
1203
+ * If better-sqlite3 is not installed, all history features degrade gracefully.
1204
+ */
1205
+
1206
+ /**
1207
+ * Normalize a skill/file path for use as a stable key in delta comparison.
1208
+ *
1209
+ * - Replaces `\` with `/` (Windows compat)
1210
+ * - If path starts with HOME directory, replaces HOME prefix with `~/`
1211
+ * - Else if scanPath provided and path starts with it, makes it relative
1212
+ * - Else fallback: last 2 path segments (or last 1 if only 1)
1213
+ */
1214
+ declare function normalizeSkillPath(skillPath: string, scanPath?: string): string;
1215
+ /**
1216
+ * SQLite-backed store for guard scan history. Enables delta computation
1217
+ * between consecutive scans.
1218
+ *
1219
+ * If better-sqlite3 is not available, all methods degrade gracefully
1220
+ * (save is a no-op, loadPrevious returns null, etc.).
1221
+ */
1222
+ declare class HistoryStore {
1223
+ private db;
1224
+ private maxRows;
1225
+ private retentionDays;
1226
+ constructor(dbPath?: string, maxRows?: number, retentionDays?: number);
1227
+ /**
1228
+ * Save a guard report to the history store.
1229
+ */
1230
+ save(report: GuardReport, scanPath?: string): void;
1231
+ /**
1232
+ * Load the previous report (second-most-recent) for a given scan path.
1233
+ * Returns null if fewer than 2 entries exist or on any error.
1234
+ */
1235
+ loadPrevious(scanPath?: string): GuardReport | null;
1236
+ /**
1237
+ * Remove stale entries: older than retentionDays, or exceeding maxRows.
1238
+ */
1239
+ prune(): void;
1240
+ /**
1241
+ * Return the total number of rows in the store. For test assertions.
1242
+ */
1243
+ _count(): number;
1244
+ /**
1245
+ * Close the database connection.
1246
+ */
1247
+ close(): void;
1248
+ }
1249
+ /**
1250
+ * Compute a delta between the current and previous guard reports.
1251
+ *
1252
+ * Tracks:
1253
+ * - Skills: new/resolved findings, changed verdicts, new/removed entities
1254
+ * - MCP servers: new/resolved findings, changed verdicts, new/removed entities
1255
+ * - Agents: new/removed entities (no findings on agents)
1256
+ */
1257
+ declare function computeDelta(current: GuardReport, previous: GuardReport, scanPath?: string): DeltaResult;
1258
+
955
1259
  /**
956
1260
  * Shield — continuous filesystem monitoring for AI agent security.
957
1261
  *
@@ -1033,4 +1337,4 @@ declare class Shield {
1033
1337
  stop(): void;
1034
1338
  }
1035
1339
 
1036
- export { type AffectedProbe, type AgentConfigResult, AgentSealError, AgentValidator, type AttackChain, BACKUPS_DIR, BOUNDARY_CATEGORIES, BOUNDARY_WEIGHT, type BaselineChange, type BaselineChangeResult, type BaselineEntry, BaselineStore, Blocklist, COMMON_WORDS, CONSISTENCY_WEIGHT, type ChainStep, type ChatFn, type CompareResult, DANGER_CONCEPTS, DATA_EXTRACTION_WEIGHT, DebouncedHandler, type DefenseProfile, type DiscoveryResult, EXTRACTION_WEIGHT, type EmbedFn, type FixResult, Guard, type GuardOptions, type GuardProgressFn, type GuardReport, GuardVerdict, INJECTION_WEIGHT, KNOWN_SERVER_LABELS, LABEL_DESTRUCTIVE, LABEL_PRIVATE, LABEL_PUBLIC_SINK, LABEL_UNTRUSTED, LLMJudge, type LLMJudgeFinding, type LLMJudgeOptions, type LLMJudgeResult, MAX_CONTENT_BYTES, MCPConfigChecker, type MCPFinding, type MCPRuntimeFinding, type MCPRuntimeResult, type MCPServerResult, Notifier, PROFILES, PROJECT_MCP_CONFIGS, PROJECT_SKILL_DIRS, PROJECT_SKILL_FILES, type Probe, type ProbeResult, ProbeTimeoutError, type ProfileConfig, type ProgressFn, ProviderError, QUARANTINE_DIR, type QuarantineEntry, REFUSAL_PHRASES, REPORTS_DIR, type RemediationItem, type RemediationReport, SEMANTIC_HIGH_THRESHOLD, SEMANTIC_MODERATE_THRESHOLD, SEVERITY_ORDER, SYSTEM_PROMPT, type ScanReport, type ScoreBreakdown, Severity, Shield, type ShieldCallback, type ShieldOptions, type SkillFinding, type SkillResult, SkillScanner, TRANSFORMS, type ToxicFlowResult, TrustLevel, ValidationError, type ValidatorOptions, Verdict, allActions, analyzeToxicFlows, applyProfile, base64Wrap, buildExtractionProbes, buildInjectionProbes, buildProbe, caseScramble, classifyPath, classifyServer, collectWatchPaths, compareReports, computeScores, computeSemanticSimilarity, computeVerdict, decodeBase64Blocks, deobfuscate, detectCanary, detectChains, detectExtraction, detectExtractionWithSemantic, detectProvider, expandStringConcat, extractSkillName, extractUniquePhrases, fingerprintDefense, fromAnthropic, fromEndpoint, fromLangChain, fromOllama, fromOpenAI, fromVercelAI, fuseVerdicts, generateCanary, generateMutations, generateRemediation, getFixableSkills, getWellKnownConfigs, hasCritical, hasInvisibleChars, isRefusal, leetspeak, listProfiles, listQuarantine, loadAllCustomProbes, loadCustomProbes, loadGuardReport, loadScanReport, normalizeUnicode, parseProbeFile, parseResponse, prefixPadding, quarantineSkill, resolveProfile, restoreSkill, reverseEmbed, rot13Wrap, saveReport, scanDirectory, scanMachine, scanSkillFile, sha256, shannonEntropy, stripBidiControls, stripHtmlComments, stripJsonComments, stripModelPrefix, stripTagChars, stripVariationSelectors, stripZeroWidth, topMCPFinding, topSkillFinding, totalDangers, totalSafe, totalWarnings, truncateContent, trustLevelFromScore, unescapeSequences, unicodeHomoglyphs, validateProbe, verdictFromFindings, verdictScore, zeroWidthInject };
1340
+ export { type AffectedProbe, type AgentConfigResult, AgentSealError, AgentValidator, type AttackChain, BACKUPS_DIR, BOUNDARY_CATEGORIES, BOUNDARY_WEIGHT, type BaselineChange, type BaselineChangeResult, type BaselineEntry, BaselineStore, Blocklist, COMMON_WORDS, CONSISTENCY_WEIGHT, type ChainStep, type ChatFn, type CompareResult, type CustomFinding, DANGER_CONCEPTS, DATA_EXTRACTION_WEIGHT, DebouncedHandler, type DefenseProfile, type DeltaEntry, DeltaResult, type DiscoveryResult, EXTRACTION_WEIGHT, type EmbedFn, type FixResult, Guard, type GuardOptions, type GuardProgressFn, type GuardReport, GuardVerdict, HistoryStore, INJECTION_WEIGHT, type IgnoreFindingEntry, KNOWN_SERVER_LABELS, LABEL_DESTRUCTIVE, LABEL_PRIVATE, LABEL_PUBLIC_SINK, LABEL_UNTRUSTED, LLMJudge, type LLMJudgeFinding, type LLMJudgeOptions, type LLMJudgeResult, MAX_CONTENT_BYTES, MCPConfigChecker, type MCPFinding, type MCPRuntimeFinding, type MCPRuntimeResult, type MCPServerResult, Notifier, PROFILES, PROJECT_MCP_CONFIGS, PROJECT_SKILL_DIRS, PROJECT_SKILL_FILES, type Probe, type ProbeResult, ProbeTimeoutError, type ProfileConfig, type ProgressFn, type ProjectConfig, ProviderError, QUARANTINE_DIR, type QuarantineEntry, REFUSAL_PHRASES, REPORTS_DIR, type RemediationItem, type RemediationReport, type Rule, RuleEngine, type RuleTest, type RuleTestResult, SEMANTIC_HIGH_THRESHOLD, SEMANTIC_MODERATE_THRESHOLD, SEVERITY_ORDER, SYSTEM_PROMPT, type ScanReport, type ScoreBreakdown, Severity, Shield, type ShieldCallback, type ShieldOptions, type SkillFinding, type SkillResult, SkillScanner, TRANSFORMS, type ToxicFlowResult, TrustLevel, type UnlistedFinding, ValidationError, type ValidatorOptions, Verdict, allActions, analyzeToxicFlows, applyProfile, base64Wrap, buildExtractionProbes, buildInjectionProbes, buildProbe, bulkCheck, caseScramble, classifyPath, classifyServer, collectWatchPaths, compareReports, computeDelta, computeScores, computeSemanticSimilarity, computeVerdict, customFindingFromDict, customFindingToDict, decodeBase64Blocks, decodeHtmlEntities, deltaEntryToDict, deobfuscate, detectCanary, detectChains, detectExtraction, detectExtractionWithSemantic, detectProvider, enrichMcpResults, expandStringConcat, extractPackageSlug, extractSkillName, extractUniquePhrases, fingerprintDefense, fnmatchCase, fromAnthropic, fromEndpoint, fromLangChain, fromOllama, fromOpenAI, fromVercelAI, fuseVerdicts, generateCanary, generateConfigYaml, generateMutations, generateRemediation, generateUnlistedFindings, getFixableSkills, getWellKnownConfigs, guardReportFromDict, hasCritical, hasInvisibleChars, isRefusal, leetspeak, listProfiles, listQuarantine, loadAllCustomProbes, loadCustomProbes, loadGuardReport, loadProjectConfig, loadScanReport, normalizeSkillPath, normalizeUnicode, parseProbeFile, parseResponse, prefixPadding, quarantineSkill, resolveProfile, resolveProjectConfig, restoreSkill, reverseEmbed, rot13Wrap, runGuardInit, saveReport, scanDirectory, scanMachine, scanSkillFile, sha256, shannonEntropy, shouldFail, shouldIgnoreFinding, shouldIgnorePath, slugify, stripBidiControls, stripHtmlComments, stripJsonComments, stripModelPrefix, stripTagChars, stripVariationSelectors, stripZeroWidth, topMCPFinding, topSkillFinding, totalDangers, totalSafe, totalWarnings, truncateContent, trustLevelFromScore, unescapeSequences, unicodeHomoglyphs, unlistedFindingToDict, validateProbe, verdictFromFindings, verdictScore, zeroWidthInject };