hackmyagent 0.11.14 → 0.12.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (73) hide show
  1. package/README.md +35 -3
  2. package/dist/.integrity-manifest.json +1 -0
  3. package/dist/cli.js +79 -5
  4. package/dist/cli.js.map +1 -1
  5. package/dist/nanomind-core/analyzers/capability-analyzer.d.ts +40 -0
  6. package/dist/nanomind-core/analyzers/capability-analyzer.d.ts.map +1 -0
  7. package/dist/nanomind-core/analyzers/capability-analyzer.js +310 -0
  8. package/dist/nanomind-core/analyzers/capability-analyzer.js.map +1 -0
  9. package/dist/nanomind-core/analyzers/code-analyzer.d.ts +21 -0
  10. package/dist/nanomind-core/analyzers/code-analyzer.d.ts.map +1 -0
  11. package/dist/nanomind-core/analyzers/code-analyzer.js +350 -0
  12. package/dist/nanomind-core/analyzers/code-analyzer.js.map +1 -0
  13. package/dist/nanomind-core/analyzers/credential-analyzer.d.ts +20 -0
  14. package/dist/nanomind-core/analyzers/credential-analyzer.d.ts.map +1 -0
  15. package/dist/nanomind-core/analyzers/credential-analyzer.js +317 -0
  16. package/dist/nanomind-core/analyzers/credential-analyzer.js.map +1 -0
  17. package/dist/nanomind-core/analyzers/governance-analyzer.d.ts +22 -0
  18. package/dist/nanomind-core/analyzers/governance-analyzer.d.ts.map +1 -0
  19. package/dist/nanomind-core/analyzers/governance-analyzer.js +393 -0
  20. package/dist/nanomind-core/analyzers/governance-analyzer.js.map +1 -0
  21. package/dist/nanomind-core/analyzers/prompt-analyzer.d.ts +22 -0
  22. package/dist/nanomind-core/analyzers/prompt-analyzer.d.ts.map +1 -0
  23. package/dist/nanomind-core/analyzers/prompt-analyzer.js +486 -0
  24. package/dist/nanomind-core/analyzers/prompt-analyzer.js.map +1 -0
  25. package/dist/nanomind-core/analyzers/scope-analyzer.d.ts +20 -0
  26. package/dist/nanomind-core/analyzers/scope-analyzer.d.ts.map +1 -0
  27. package/dist/nanomind-core/analyzers/scope-analyzer.js +326 -0
  28. package/dist/nanomind-core/analyzers/scope-analyzer.js.map +1 -0
  29. package/dist/nanomind-core/compiler/semantic-compiler.d.ts +41 -0
  30. package/dist/nanomind-core/compiler/semantic-compiler.d.ts.map +1 -0
  31. package/dist/nanomind-core/compiler/semantic-compiler.js +490 -0
  32. package/dist/nanomind-core/compiler/semantic-compiler.js.map +1 -0
  33. package/dist/nanomind-core/index.d.ts +30 -0
  34. package/dist/nanomind-core/index.d.ts.map +1 -0
  35. package/dist/nanomind-core/index.js +45 -0
  36. package/dist/nanomind-core/index.js.map +1 -0
  37. package/dist/nanomind-core/ingestion/artifact-parser.d.ts +48 -0
  38. package/dist/nanomind-core/ingestion/artifact-parser.d.ts.map +1 -0
  39. package/dist/nanomind-core/ingestion/artifact-parser.js +203 -0
  40. package/dist/nanomind-core/ingestion/artifact-parser.js.map +1 -0
  41. package/dist/nanomind-core/ingestion/input-sanitizer.d.ts +49 -0
  42. package/dist/nanomind-core/ingestion/input-sanitizer.d.ts.map +1 -0
  43. package/dist/nanomind-core/ingestion/input-sanitizer.js +80 -0
  44. package/dist/nanomind-core/ingestion/input-sanitizer.js.map +1 -0
  45. package/dist/nanomind-core/scanner-bridge.d.ts +49 -0
  46. package/dist/nanomind-core/scanner-bridge.d.ts.map +1 -0
  47. package/dist/nanomind-core/scanner-bridge.js +317 -0
  48. package/dist/nanomind-core/scanner-bridge.js.map +1 -0
  49. package/dist/nanomind-core/security/defense-in-depth.d.ts +99 -0
  50. package/dist/nanomind-core/security/defense-in-depth.d.ts.map +1 -0
  51. package/dist/nanomind-core/security/defense-in-depth.js +206 -0
  52. package/dist/nanomind-core/security/defense-in-depth.js.map +1 -0
  53. package/dist/nanomind-core/security/integrity-verifier.d.ts +132 -0
  54. package/dist/nanomind-core/security/integrity-verifier.d.ts.map +1 -0
  55. package/dist/nanomind-core/security/integrity-verifier.js +437 -0
  56. package/dist/nanomind-core/security/integrity-verifier.js.map +1 -0
  57. package/dist/nanomind-core/types.d.ts +125 -0
  58. package/dist/nanomind-core/types.d.ts.map +1 -0
  59. package/dist/nanomind-core/types.js +22 -0
  60. package/dist/nanomind-core/types.js.map +1 -0
  61. package/dist/semantic/index.d.ts +2 -0
  62. package/dist/semantic/index.d.ts.map +1 -1
  63. package/dist/semantic/index.js +6 -2
  64. package/dist/semantic/index.js.map +1 -1
  65. package/dist/semantic/nanomind-enhancer.d.ts +50 -0
  66. package/dist/semantic/nanomind-enhancer.d.ts.map +1 -0
  67. package/dist/semantic/nanomind-enhancer.js +203 -0
  68. package/dist/semantic/nanomind-enhancer.js.map +1 -0
  69. package/dist/skills/builder.d.ts +55 -0
  70. package/dist/skills/builder.d.ts.map +1 -0
  71. package/dist/skills/builder.js +282 -0
  72. package/dist/skills/builder.js.map +1 -0
  73. package/package.json +2 -2
@@ -0,0 +1,125 @@
1
+ /**
2
+ * NanoMind Core Types -- Abstract Security Tree (AST)
3
+ *
4
+ * The SecurityAST is the foundational data structure that ALL scanners consume.
5
+ * NanoMind compiles raw artifacts into ASTs. Analyzers query ASTs, not raw text.
6
+ *
7
+ * Security properties:
8
+ * - Every AST is cryptographically signed (Ed25519)
9
+ * - Signature includes contentHash + modelVersion + timestamp
10
+ * - Analyzers verify signature before processing
11
+ * - Tampered ASTs are rejected
12
+ */
13
+ export interface SecurityAST {
14
+ /** Artifact identity */
15
+ artifactType: ArtifactType;
16
+ contentHash: string;
17
+ artifactPath?: string;
18
+ artifactSize: number;
19
+ /** Declarations: what the artifact SAYS it does */
20
+ declaredPurpose: string;
21
+ declaredCapabilities: Capability[];
22
+ declaredConstraints: Constraint[];
23
+ declaredDataAccess: DataAccessPattern[];
24
+ /** Inferred: what NanoMind UNDERSTANDS it does */
25
+ inferredCapabilities: Capability[];
26
+ inferredRiskSurface: RiskSurface[];
27
+ intentClassification: IntentClass;
28
+ intentConfidence: number;
29
+ /** Relationships */
30
+ dependsOn: string[];
31
+ governedBy: string[];
32
+ /** Evidence: exact text regions supporting the classification */
33
+ evidenceSpans: EvidenceSpan[];
34
+ /** Cryptographic integrity */
35
+ signature: string;
36
+ modelVersion: string;
37
+ compiledAt: string;
38
+ }
39
+ export type ArtifactType = 'skill' | 'mcp_config' | 'soul' | 'system_prompt' | 'agent_config' | 'a2a_card' | 'credential_file' | 'source_code' | 'env_file' | 'unknown';
40
+ export interface Capability {
41
+ /** Capability identifier (e.g., "db.read", "api.call", "file.write") */
42
+ name: string;
43
+ /** Scope of the capability (e.g., "customers table", "weather API") */
44
+ scope: string;
45
+ /** Was this explicitly declared in the artifact? */
46
+ declared: boolean;
47
+ /** Was this inferred by NanoMind from the content? */
48
+ inferred: boolean;
49
+ /** Risk level of this capability */
50
+ riskLevel: 'low' | 'medium' | 'high' | 'critical';
51
+ /** Evidence: text span that declares or implies this capability */
52
+ evidence?: string;
53
+ }
54
+ export interface Constraint {
55
+ /** The constraint as written in the artifact */
56
+ text: string;
57
+ /** Governance domain (trust, oversight, data_handling, etc.) */
58
+ domain: ConstraintDomain;
59
+ /** How enforceable is this constraint? (0 = aspirational, 1 = enforced) */
60
+ enforceability: number;
61
+ /** How easy to bypass? (0 = robust, 1 = trivially bypassable) */
62
+ bypassRisk: number;
63
+ /** Specific weakness if bypassRisk > 0.5 */
64
+ weakness?: string;
65
+ }
66
+ export type ConstraintDomain = 'trust_hierarchy' | 'human_oversight' | 'data_handling' | 'action_reversibility' | 'capability_boundary' | 'identity_disclosure' | 'error_handling' | 'credential_management' | 'behavioral_constraint' | 'general';
67
+ export interface DataAccessPattern {
68
+ /** What data type is accessed */
69
+ dataType: string;
70
+ /** How it's accessed */
71
+ accessMode: 'read' | 'write' | 'delete' | 'transmit';
72
+ /** Where it goes (if transmit) */
73
+ destination?: string;
74
+ /** Is this access declared in capabilities? */
75
+ coveredByCapability: boolean;
76
+ }
77
+ export interface RiskSurface {
78
+ /** What aspect of the artifact is risky */
79
+ surface: string;
80
+ /** Attack class from HMA taxonomy */
81
+ attackClass: string;
82
+ /** Confidence this is a real risk (0-1) */
83
+ confidence: number;
84
+ /** Specific text that creates this risk */
85
+ evidence: string;
86
+ /** How to mitigate */
87
+ mitigation?: string;
88
+ }
89
+ export type IntentClass = 'benign' | 'suspicious' | 'malicious';
90
+ export interface EvidenceSpan {
91
+ /** Start character offset in original artifact */
92
+ start: number;
93
+ /** End character offset */
94
+ end: number;
95
+ /** The actual text */
96
+ text: string;
97
+ /** What this evidence supports */
98
+ supports: string;
99
+ /** Confidence this evidence is relevant */
100
+ confidence: number;
101
+ }
102
+ export interface CompilerConfig {
103
+ /** NanoMind daemon URL */
104
+ daemonUrl: string;
105
+ /** Signing key for AST integrity (Ed25519 private key, hex) */
106
+ signingKey?: string;
107
+ /** Whether to call NanoMind for inference (false = heuristic only) */
108
+ useNanoMind: boolean;
109
+ /** Maximum artifact size to process (bytes, default 1MB) */
110
+ maxArtifactSize: number;
111
+ /** Request timeout for NanoMind daemon (ms) */
112
+ daemonTimeoutMs: number;
113
+ }
114
+ export declare const DEFAULT_COMPILER_CONFIG: CompilerConfig;
115
+ export interface CompilationResult {
116
+ /** The compiled AST */
117
+ ast: SecurityAST;
118
+ /** Compilation metadata */
119
+ durationMs: number;
120
+ /** Whether NanoMind was used (false = heuristic fallback) */
121
+ nanomindUsed: boolean;
122
+ /** Warnings during compilation */
123
+ warnings: string[];
124
+ }
125
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/nanomind-core/types.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAMH,MAAM,WAAW,WAAW;IAC1B,wBAAwB;IACxB,YAAY,EAAE,YAAY,CAAC;IAC3B,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,EAAE,MAAM,CAAC;IAErB,mDAAmD;IACnD,eAAe,EAAE,MAAM,CAAC;IACxB,oBAAoB,EAAE,UAAU,EAAE,CAAC;IACnC,mBAAmB,EAAE,UAAU,EAAE,CAAC;IAClC,kBAAkB,EAAE,iBAAiB,EAAE,CAAC;IAExC,kDAAkD;IAClD,oBAAoB,EAAE,UAAU,EAAE,CAAC;IACnC,mBAAmB,EAAE,WAAW,EAAE,CAAC;IACnC,oBAAoB,EAAE,WAAW,CAAC;IAClC,gBAAgB,EAAE,MAAM,CAAC;IAEzB,oBAAoB;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,UAAU,EAAE,MAAM,EAAE,CAAC;IAErB,iEAAiE;IACjE,aAAa,EAAE,YAAY,EAAE,CAAC;IAE9B,8BAA8B;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,MAAM,MAAM,YAAY,GACpB,OAAO,GACP,YAAY,GACZ,MAAM,GACN,eAAe,GACf,cAAc,GACd,UAAU,GACV,iBAAiB,GACjB,aAAa,GACb,UAAU,GACV,SAAS,CAAC;AAMd,MAAM,WAAW,UAAU;IACzB,wEAAwE;IACxE,IAAI,EAAE,MAAM,CAAC;IACb,uEAAuE;IACvE,KAAK,EAAE,MAAM,CAAC;IACd,oDAAoD;IACpD,QAAQ,EAAE,OAAO,CAAC;IAClB,sDAAsD;IACtD,QAAQ,EAAE,OAAO,CAAC;IAClB,oCAAoC;IACpC,SAAS,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IAClD,mEAAmE;IACnE,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAMD,MAAM,WAAW,UAAU;IACzB,gDAAgD;IAChD,IAAI,EAAE,MAAM,CAAC;IACb,gEAAgE;IAChE,MAAM,EAAE,gBAAgB,CAAC;IACzB,2EAA2E;IAC3E,cAAc,EAAE,MAAM,CAAC;IACvB,iEAAiE;IACjE,UAAU,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,MAAM,gBAAgB,GACxB,iBAAiB,GACjB,iBAAiB,GACjB,eAAe,GACf,sBAAsB,GACtB,qBAAqB,GACrB,qBAAqB,GACrB,gBAAgB,GAChB,uBAAuB,GACvB,uBAAuB,GACvB,SAAS,CAAC;AAMd,MAAM,WAAW,iBAAiB;IAChC,iCAAiC;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,wBAAwB;IACxB,UAAU,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,GAAG,UAAU,CAAC;IACrD,kCAAkC;IAClC,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,+CAA+C;IAC/C,mBAAmB,EAAE,OAAO,CAAC;CAC9B;AAMD,MAAM,WAAW,WAAW;IAC1B,2CAA2C;IAC3C,OAAO,EAAE,MAAM,CAAC;IAChB,qCAAqC;IACrC,WAAW,EAAE,MAAM,CAAC;IACpB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;IACnB,2CAA2C;IAC3C,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAMD,MAAM,MAAM,WAAW,GAAG,QAAQ,GAAG,YAAY,GAAG,WAAW,CAAC;AAMhE,MAAM,WAAW,YAAY;IAC3B,kDAAkD;IAClD,KAAK,EAAE,MAAM,CAAC;IACd,2BAA2B;IAC3B,GAAG,EAAE,MAAM,CAAC;IACZ,sBAAsB;IACtB,IAAI,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,QAAQ,EAAE,MAAM,CAAC;IACjB,2CAA2C;IAC3C,UAAU,EAAE,MAAM,CAAC;CACpB;AAMD,MAAM,WAAW,cAAc;IAC7B,0BAA0B;IAC1B,SAAS,EAAE,MAAM,CAAC;IAClB,+DAA+D;IAC/D,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,sEAAsE;IACtE,WAAW,EAAE,OAAO,CAAC;IACrB,4DAA4D;IAC5D,eAAe,EAAE,MAAM,CAAC;IACxB,+CAA+C;IAC/C,eAAe,EAAE,MAAM,CAAC;CACzB;AAED,eAAO,MAAM,uBAAuB,EAAE,cAKrC,CAAC;AAMF,MAAM,WAAW,iBAAiB;IAChC,uBAAuB;IACvB,GAAG,EAAE,WAAW,CAAC;IACjB,2BAA2B;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,6DAA6D;IAC7D,YAAY,EAAE,OAAO,CAAC;IACtB,kCAAkC;IAClC,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ /**
3
+ * NanoMind Core Types -- Abstract Security Tree (AST)
4
+ *
5
+ * The SecurityAST is the foundational data structure that ALL scanners consume.
6
+ * NanoMind compiles raw artifacts into ASTs. Analyzers query ASTs, not raw text.
7
+ *
8
+ * Security properties:
9
+ * - Every AST is cryptographically signed (Ed25519)
10
+ * - Signature includes contentHash + modelVersion + timestamp
11
+ * - Analyzers verify signature before processing
12
+ * - Tampered ASTs are rejected
13
+ */
14
+ Object.defineProperty(exports, "__esModule", { value: true });
15
+ exports.DEFAULT_COMPILER_CONFIG = void 0;
16
+ exports.DEFAULT_COMPILER_CONFIG = {
17
+ daemonUrl: 'http://127.0.0.1:47200',
18
+ useNanoMind: true,
19
+ maxArtifactSize: 1048576, // 1MB
20
+ daemonTimeoutMs: 5000,
21
+ };
22
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/nanomind-core/types.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;;AA8KU,QAAA,uBAAuB,GAAmB;IACrD,SAAS,EAAE,wBAAwB;IACnC,WAAW,EAAE,IAAI;IACjB,eAAe,EAAE,OAAS,EAAE,MAAM;IAClC,eAAe,EAAE,IAAI;CACtB,CAAC"}
@@ -12,6 +12,8 @@ export { LLMAnalyzer, AnthropicClient, LLMCache, BudgetTracker } from './llm';
12
12
  export { toSecurityFinding, toSecurityFindings } from './integration/finding-adapter';
13
13
  export { SEMANTIC_OASB_MAPPINGS, getSemanticCheckIds, getUpgradedControlIds } from './integration/oasb-upgrader';
14
14
  export { CostEstimator } from './integration/cost-estimator';
15
+ export { enhanceScanFindings, getEnhancementStats } from './nanomind-enhancer';
16
+ export type { EnhancedFinding } from './nanomind-enhancer';
15
17
  export { isDaemonAvailable, analyzeSkillIntent, analyzeSoulCompleteness, analyzeMCPScope, analyzePromptIntent, explainFinding, } from './nanomind-analyzer';
16
18
  export type { NanoMindInferRequest, NanoMindInferResponse, SemanticFinding as NanoMindFinding, } from './nanomind-analyzer';
17
19
  export { buildDeepScanResult } from './deep-scan';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/semantic/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACjH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,IAAI,eAAe,GACnC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/semantic/index.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAClD,OAAO,EACL,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,GACxB,MAAM,cAAc,CAAC;AAGtB,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAG9E,OAAO,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,+BAA+B,CAAC;AACtF,OAAO,EAAE,sBAAsB,EAAE,mBAAmB,EAAE,qBAAqB,EAAE,MAAM,6BAA6B,CAAC;AACjH,OAAO,EAAE,aAAa,EAAE,MAAM,8BAA8B,CAAC;AAG7D,OAAO,EAAE,mBAAmB,EAAE,mBAAmB,EAAE,MAAM,qBAAqB,CAAC;AAC/E,YAAY,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAG3D,OAAO,EACL,iBAAiB,EACjB,kBAAkB,EAClB,uBAAuB,EACvB,eAAe,EACf,mBAAmB,EACnB,cAAc,GACf,MAAM,qBAAqB,CAAC;AAC7B,YAAY,EACV,oBAAoB,EACpB,qBAAqB,EACrB,eAAe,IAAI,eAAe,GACnC,MAAM,qBAAqB,CAAC;AAG7B,OAAO,EAAE,mBAAmB,EAAE,MAAM,aAAa,CAAC;AAGlD,YAAY,EACV,eAAe,EACf,gBAAgB,EAChB,gBAAgB,EAChB,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,eAAe,EACf,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,gBAAgB,EAChB,eAAe,EACf,aAAa,EACb,cAAc,GACf,MAAM,SAAS,CAAC"}
@@ -8,7 +8,7 @@
8
8
  * Zero runtime dependencies. Imported by core scanner and MCP server.
9
9
  */
10
10
  Object.defineProperty(exports, "__esModule", { value: true });
11
- exports.buildDeepScanResult = exports.explainFinding = exports.analyzePromptIntent = exports.analyzeMCPScope = exports.analyzeSoulCompleteness = exports.analyzeSkillIntent = exports.isDaemonAvailable = exports.CostEstimator = exports.getUpgradedControlIds = exports.getSemanticCheckIds = exports.SEMANTIC_OASB_MAPPINGS = exports.toSecurityFindings = exports.toSecurityFinding = exports.BudgetTracker = exports.LLMCache = exports.AnthropicClient = exports.LLMAnalyzer = exports.PermissionModelAnalyzer = exports.InstructionAnalyzer = exports.McpConfigAnalyzer = exports.CredentialContextAnalyzer = exports.StructuralAnalyzer = void 0;
11
+ exports.buildDeepScanResult = exports.explainFinding = exports.analyzePromptIntent = exports.analyzeMCPScope = exports.analyzeSoulCompleteness = exports.analyzeSkillIntent = exports.isDaemonAvailable = exports.getEnhancementStats = exports.enhanceScanFindings = exports.CostEstimator = exports.getUpgradedControlIds = exports.getSemanticCheckIds = exports.SEMANTIC_OASB_MAPPINGS = exports.toSecurityFindings = exports.toSecurityFinding = exports.BudgetTracker = exports.LLMCache = exports.AnthropicClient = exports.LLMAnalyzer = exports.PermissionModelAnalyzer = exports.InstructionAnalyzer = exports.McpConfigAnalyzer = exports.CredentialContextAnalyzer = exports.StructuralAnalyzer = void 0;
12
12
  // Layer 2: Structural Analysis
13
13
  var structural_1 = require("./structural");
14
14
  Object.defineProperty(exports, "StructuralAnalyzer", { enumerable: true, get: function () { return structural_1.StructuralAnalyzer; } });
@@ -33,7 +33,11 @@ Object.defineProperty(exports, "getSemanticCheckIds", { enumerable: true, get: f
33
33
  Object.defineProperty(exports, "getUpgradedControlIds", { enumerable: true, get: function () { return oasb_upgrader_1.getUpgradedControlIds; } });
34
34
  var cost_estimator_1 = require("./integration/cost-estimator");
35
35
  Object.defineProperty(exports, "CostEstimator", { enumerable: true, get: function () { return cost_estimator_1.CostEstimator; } });
36
- // Layer 4: NanoMind Local Semantic Analysis (--semantic flag)
36
+ // NanoMind Scanner Enhancer (default-on for ALL scanners)
37
+ var nanomind_enhancer_1 = require("./nanomind-enhancer");
38
+ Object.defineProperty(exports, "enhanceScanFindings", { enumerable: true, get: function () { return nanomind_enhancer_1.enhanceScanFindings; } });
39
+ Object.defineProperty(exports, "getEnhancementStats", { enumerable: true, get: function () { return nanomind_enhancer_1.getEnhancementStats; } });
40
+ // Layer 4: NanoMind Local Semantic Analysis
37
41
  var nanomind_analyzer_1 = require("./nanomind-analyzer");
38
42
  Object.defineProperty(exports, "isDaemonAvailable", { enumerable: true, get: function () { return nanomind_analyzer_1.isDaemonAvailable; } });
39
43
  Object.defineProperty(exports, "analyzeSkillIntent", { enumerable: true, get: function () { return nanomind_analyzer_1.analyzeSkillIntent; } });
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/semantic/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,+BAA+B;AAC/B,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAC3B,2CAKsB;AAJpB,uHAAA,yBAAyB,OAAA;AACzB,+GAAA,iBAAiB,OAAA;AACjB,iHAAA,mBAAmB,OAAA;AACnB,qHAAA,uBAAuB,OAAA;AAGzB,wBAAwB;AACxB,6BAA8E;AAArE,kGAAA,WAAW,OAAA;AAAE,sGAAA,eAAe,OAAA;AAAE,+FAAA,QAAQ,OAAA;AAAE,oGAAA,aAAa,OAAA;AAE9D,cAAc;AACd,iEAAsF;AAA7E,oHAAA,iBAAiB,OAAA;AAAE,qHAAA,kBAAkB,OAAA;AAC9C,6DAAiH;AAAxG,uHAAA,sBAAsB,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAAE,sHAAA,qBAAqB,OAAA;AAC3E,+DAA6D;AAApD,+GAAA,aAAa,OAAA;AAEtB,8DAA8D;AAC9D,yDAO6B;AAN3B,sHAAA,iBAAiB,OAAA;AACjB,uHAAA,kBAAkB,OAAA;AAClB,4HAAA,uBAAuB,OAAA;AACvB,oHAAA,eAAe,OAAA;AACf,wHAAA,mBAAmB,OAAA;AACnB,mHAAA,cAAc,OAAA;AAQhB,qCAAqC;AACrC,yCAAkD;AAAzC,gHAAA,mBAAmB,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/semantic/index.ts"],"names":[],"mappings":";AAAA;;;;;;;GAOG;;;AAEH,+BAA+B;AAC/B,2CAAkD;AAAzC,gHAAA,kBAAkB,OAAA;AAC3B,2CAKsB;AAJpB,uHAAA,yBAAyB,OAAA;AACzB,+GAAA,iBAAiB,OAAA;AACjB,iHAAA,mBAAmB,OAAA;AACnB,qHAAA,uBAAuB,OAAA;AAGzB,wBAAwB;AACxB,6BAA8E;AAArE,kGAAA,WAAW,OAAA;AAAE,sGAAA,eAAe,OAAA;AAAE,+FAAA,QAAQ,OAAA;AAAE,oGAAA,aAAa,OAAA;AAE9D,cAAc;AACd,iEAAsF;AAA7E,oHAAA,iBAAiB,OAAA;AAAE,qHAAA,kBAAkB,OAAA;AAC9C,6DAAiH;AAAxG,uHAAA,sBAAsB,OAAA;AAAE,oHAAA,mBAAmB,OAAA;AAAE,sHAAA,qBAAqB,OAAA;AAC3E,+DAA6D;AAApD,+GAAA,aAAa,OAAA;AAEtB,0DAA0D;AAC1D,yDAA+E;AAAtE,wHAAA,mBAAmB,OAAA;AAAE,wHAAA,mBAAmB,OAAA;AAGjD,4CAA4C;AAC5C,yDAO6B;AAN3B,sHAAA,iBAAiB,OAAA;AACjB,uHAAA,kBAAkB,OAAA;AAClB,4HAAA,uBAAuB,OAAA;AACvB,oHAAA,eAAe,OAAA;AACf,wHAAA,mBAAmB,OAAA;AACnB,mHAAA,cAAc,OAAA;AAQhB,qCAAqC;AACrC,yCAAkD;AAAzC,gHAAA,mBAAmB,OAAA"}
@@ -0,0 +1,50 @@
1
+ /**
2
+ * NanoMind Scanner Enhancer
3
+ *
4
+ * Wraps around HMA's existing static scanner output and adds semantic
5
+ * analysis to every finding category. This makes NanoMind the default
6
+ * intelligence layer for ALL scanners, not just --deep mode.
7
+ *
8
+ * Architecture:
9
+ * Static scan runs first (204 checks, fast, deterministic)
10
+ * → NanoMind enhancer runs on the results + source artifacts
11
+ * → Reduces false positives (benign patterns that look suspicious)
12
+ * → Catches false negatives (malicious patterns that look benign)
13
+ * → Upgrades finding severity based on semantic context
14
+ * → Adds evidence and remediation from NanoMind classification
15
+ *
16
+ * This runs automatically when the NanoMind daemon is available.
17
+ * No flags needed. If daemon is down, scan works exactly as before.
18
+ */
19
+ export interface ScanFinding {
20
+ checkId: string;
21
+ name: string;
22
+ severity: string;
23
+ passed: boolean;
24
+ file?: string;
25
+ description?: string;
26
+ fix?: string;
27
+ }
28
+ export interface EnhancedFinding extends ScanFinding {
29
+ nanomindEnhanced: boolean;
30
+ nanomindConfidence?: number;
31
+ nanomindVerdict?: 'confirmed' | 'false_positive' | 'upgraded' | 'downgraded';
32
+ nanomindEvidence?: string;
33
+ originalSeverity?: string;
34
+ }
35
+ /**
36
+ * Enhance scan findings with NanoMind semantic analysis.
37
+ * Called automatically after every static scan when daemon is available.
38
+ *
39
+ * Returns the same findings array with NanoMind annotations added.
40
+ * Does NOT remove findings -- only annotates them with semantic context.
41
+ */
42
+ export declare function enhanceScanFindings(findings: ScanFinding[], sourceFiles: Map<string, string>): Promise<EnhancedFinding[]>;
43
+ export declare function getEnhancementStats(findings: EnhancedFinding[]): {
44
+ total: number;
45
+ enhanced: number;
46
+ falsePositivesDetected: number;
47
+ upgraded: number;
48
+ confirmed: number;
49
+ };
50
+ //# sourceMappingURL=nanomind-enhancer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nanomind-enhancer.d.ts","sourceRoot":"","sources":["../../src/semantic/nanomind-enhancer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAIH,MAAM,WAAW,WAAW;IAC1B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,GAAG,CAAC,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,eAAgB,SAAQ,WAAW;IAClD,gBAAgB,EAAE,OAAO,CAAC;IAC1B,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,eAAe,CAAC,EAAE,WAAW,GAAG,gBAAgB,GAAG,UAAU,GAAG,YAAY,CAAC;IAC7E,gBAAgB,CAAC,EAAE,MAAM,CAAC;IAC1B,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED;;;;;;GAMG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,WAAW,EAAE,EACvB,WAAW,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,GAC/B,OAAO,CAAC,eAAe,EAAE,CAAC,CAe5B;AAmLD,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,eAAe,EAAE,GAAG;IAChE,KAAK,EAAE,MAAM,CAAC;IACd,QAAQ,EAAE,MAAM,CAAC;IACjB,sBAAsB,EAAE,MAAM,CAAC;IAC/B,QAAQ,EAAE,MAAM,CAAC;IACjB,SAAS,EAAE,MAAM,CAAC;CACnB,CASA"}
@@ -0,0 +1,203 @@
1
+ "use strict";
2
+ /**
3
+ * NanoMind Scanner Enhancer
4
+ *
5
+ * Wraps around HMA's existing static scanner output and adds semantic
6
+ * analysis to every finding category. This makes NanoMind the default
7
+ * intelligence layer for ALL scanners, not just --deep mode.
8
+ *
9
+ * Architecture:
10
+ * Static scan runs first (204 checks, fast, deterministic)
11
+ * → NanoMind enhancer runs on the results + source artifacts
12
+ * → Reduces false positives (benign patterns that look suspicious)
13
+ * → Catches false negatives (malicious patterns that look benign)
14
+ * → Upgrades finding severity based on semantic context
15
+ * → Adds evidence and remediation from NanoMind classification
16
+ *
17
+ * This runs automatically when the NanoMind daemon is available.
18
+ * No flags needed. If daemon is down, scan works exactly as before.
19
+ */
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ exports.enhanceScanFindings = enhanceScanFindings;
22
+ exports.getEnhancementStats = getEnhancementStats;
23
+ const nanomind_analyzer_js_1 = require("./nanomind-analyzer.js");
24
+ /**
25
+ * Enhance scan findings with NanoMind semantic analysis.
26
+ * Called automatically after every static scan when daemon is available.
27
+ *
28
+ * Returns the same findings array with NanoMind annotations added.
29
+ * Does NOT remove findings -- only annotates them with semantic context.
30
+ */
31
+ async function enhanceScanFindings(findings, sourceFiles) {
32
+ const available = await (0, nanomind_analyzer_js_1.isDaemonAvailable)();
33
+ if (!available) {
34
+ // No daemon = return findings as-is, no enhancement
35
+ return findings.map(f => ({ ...f, nanomindEnhanced: false }));
36
+ }
37
+ const enhanced = [];
38
+ for (const finding of findings) {
39
+ const result = await enhanceSingleFinding(finding, sourceFiles);
40
+ enhanced.push(result);
41
+ }
42
+ return enhanced;
43
+ }
44
+ /**
45
+ * Enhance a single finding based on its check category.
46
+ */
47
+ async function enhanceSingleFinding(finding, sourceFiles) {
48
+ const base = { ...finding, nanomindEnhanced: false };
49
+ const checkId = finding.checkId.toUpperCase();
50
+ const fileContent = finding.file ? sourceFiles.get(finding.file) : undefined;
51
+ if (!fileContent)
52
+ return base;
53
+ try {
54
+ // Route to appropriate NanoMind analyzer based on check category
55
+ if (checkId.startsWith('SKILL-') || checkId.startsWith('SKILL-MEM-')) {
56
+ return await enhanceSkillFinding(finding, fileContent);
57
+ }
58
+ if (checkId.startsWith('MCP-') || checkId.startsWith('TOOL-')) {
59
+ return await enhanceMCPFinding(finding, fileContent);
60
+ }
61
+ if (checkId.startsWith('SOUL-')) {
62
+ return await enhanceSoulFinding(finding, fileContent);
63
+ }
64
+ if (checkId.startsWith('PROMPT-') || checkId.startsWith('AGENT-')) {
65
+ return await enhancePromptFinding(finding, fileContent);
66
+ }
67
+ if (checkId.startsWith('CRED-') || checkId.startsWith('WEBCRED-') || checkId.startsWith('AGENT-CRED-')) {
68
+ return await enhanceCredentialFinding(finding, fileContent);
69
+ }
70
+ if (checkId.startsWith('A2A-')) {
71
+ return await enhanceA2AFinding(finding, fileContent);
72
+ }
73
+ }
74
+ catch {
75
+ // NanoMind error = return original finding
76
+ }
77
+ return base;
78
+ }
79
+ // ============================================================================
80
+ // Per-Category Enhancement
81
+ // ============================================================================
82
+ async function enhanceSkillFinding(finding, content) {
83
+ const result = await (0, nanomind_analyzer_js_1.analyzeSkillIntent)(content);
84
+ if (!result) {
85
+ return { ...finding, nanomindEnhanced: true, nanomindVerdict: 'confirmed', nanomindConfidence: 0.5 };
86
+ }
87
+ // If static flagged it AND NanoMind confirms = high confidence
88
+ if (!finding.passed && result.confidence >= 0.7) {
89
+ return {
90
+ ...finding,
91
+ nanomindEnhanced: true,
92
+ nanomindVerdict: 'confirmed',
93
+ nanomindConfidence: result.confidence,
94
+ nanomindEvidence: result.evidence?.join('; '),
95
+ };
96
+ }
97
+ // If static flagged it BUT NanoMind says benign = possible false positive
98
+ if (!finding.passed && result.confidence < 0.3) {
99
+ return {
100
+ ...finding,
101
+ nanomindEnhanced: true,
102
+ nanomindVerdict: 'false_positive',
103
+ nanomindConfidence: 1 - result.confidence,
104
+ nanomindEvidence: 'NanoMind semantic analysis indicates this is likely a false positive',
105
+ originalSeverity: finding.severity,
106
+ severity: 'info', // Downgrade to informational
107
+ };
108
+ }
109
+ return { ...finding, nanomindEnhanced: true, nanomindConfidence: result.confidence };
110
+ }
111
+ async function enhanceMCPFinding(finding, content) {
112
+ const result = await (0, nanomind_analyzer_js_1.analyzeMCPScope)('', content, []);
113
+ if (!result) {
114
+ return { ...finding, nanomindEnhanced: true };
115
+ }
116
+ if (!finding.passed && result.confidence >= 0.7) {
117
+ return {
118
+ ...finding,
119
+ nanomindEnhanced: true,
120
+ nanomindVerdict: 'confirmed',
121
+ nanomindConfidence: result.confidence,
122
+ nanomindEvidence: result.evidence?.join('; '),
123
+ };
124
+ }
125
+ return { ...finding, nanomindEnhanced: true, nanomindConfidence: result.confidence };
126
+ }
127
+ async function enhanceSoulFinding(finding, content) {
128
+ const result = await (0, nanomind_analyzer_js_1.analyzeSoulCompleteness)(content);
129
+ if (!result) {
130
+ return { ...finding, nanomindEnhanced: true };
131
+ }
132
+ return {
133
+ ...finding,
134
+ nanomindEnhanced: true,
135
+ nanomindVerdict: result.confidence >= 0.7 ? 'confirmed' : undefined,
136
+ nanomindConfidence: result.confidence,
137
+ nanomindEvidence: result.evidence?.join('; '),
138
+ };
139
+ }
140
+ async function enhancePromptFinding(finding, content) {
141
+ const result = await (0, nanomind_analyzer_js_1.analyzePromptIntent)(content);
142
+ if (!result) {
143
+ return { ...finding, nanomindEnhanced: true };
144
+ }
145
+ // NanoMind can upgrade prompt findings from medium to high if it detects
146
+ // jailbreak seeds or capability creep patterns
147
+ if (result.confidence >= 0.8 && finding.severity === 'medium') {
148
+ return {
149
+ ...finding,
150
+ nanomindEnhanced: true,
151
+ nanomindVerdict: 'upgraded',
152
+ nanomindConfidence: result.confidence,
153
+ nanomindEvidence: result.evidence?.join('; '),
154
+ originalSeverity: 'medium',
155
+ severity: 'high',
156
+ };
157
+ }
158
+ return { ...finding, nanomindEnhanced: true, nanomindConfidence: result.confidence };
159
+ }
160
+ async function enhanceCredentialFinding(finding, content) {
161
+ // NanoMind can distinguish real credentials from examples/documentation
162
+ // "sk-live-abc123" in source = real credential (flag)
163
+ // "sk-live-abc123" in README example = documentation (false positive)
164
+ const isDocumentation = /example|demo|test|sample|placeholder|readme|documentation/i.test(content);
165
+ const isTestFixture = /test\/|__tests__|\.test\.|\.spec\./i.test(finding.file ?? '');
166
+ if (!finding.passed && (isDocumentation || isTestFixture)) {
167
+ return {
168
+ ...finding,
169
+ nanomindEnhanced: true,
170
+ nanomindVerdict: 'false_positive',
171
+ nanomindConfidence: 0.8,
172
+ nanomindEvidence: isTestFixture
173
+ ? 'Credential found in test fixture (likely intentional test data)'
174
+ : 'Credential found in documentation context (likely example, not real)',
175
+ originalSeverity: finding.severity,
176
+ severity: 'info',
177
+ };
178
+ }
179
+ return { ...finding, nanomindEnhanced: true, nanomindVerdict: 'confirmed' };
180
+ }
181
+ async function enhanceA2AFinding(finding, content) {
182
+ // A2A findings benefit from NanoMind checking if the agent card
183
+ // declarations are semantically consistent
184
+ return {
185
+ ...finding,
186
+ nanomindEnhanced: true,
187
+ nanomindConfidence: 0.7,
188
+ };
189
+ }
190
+ // ============================================================================
191
+ // Statistics
192
+ // ============================================================================
193
+ function getEnhancementStats(findings) {
194
+ const enhanced = findings.filter(f => f.nanomindEnhanced);
195
+ return {
196
+ total: findings.length,
197
+ enhanced: enhanced.length,
198
+ falsePositivesDetected: enhanced.filter(f => f.nanomindVerdict === 'false_positive').length,
199
+ upgraded: enhanced.filter(f => f.nanomindVerdict === 'upgraded').length,
200
+ confirmed: enhanced.filter(f => f.nanomindVerdict === 'confirmed').length,
201
+ };
202
+ }
203
+ //# sourceMappingURL=nanomind-enhancer.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"nanomind-enhancer.js","sourceRoot":"","sources":["../../src/semantic/nanomind-enhancer.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ /**
2
+ * Skills Builder -- Create best-practice, secured skills with zero friction
3
+ *
4
+ * UX philosophy: capture what the user wants, create it for them.
5
+ * The user describes what they need in plain English.
6
+ * We generate a complete, secured skill package:
7
+ * - SKILL.md with proper frontmatter
8
+ * - SOUL.md governance file
9
+ * - Capability manifest
10
+ * - Auto-scan to verify security before shipping
11
+ *
12
+ * Personas:
13
+ * Developer: "I need a skill that reads customer tickets and summarizes them"
14
+ * → We generate the skill, SOUL, manifest, and scan it
15
+ *
16
+ * Three principles applied:
17
+ * 1. NanoMind: AST compiler validates the generated skill
18
+ * 2. Security-first: every generated skill has SOUL governance by default
19
+ * 3. World-class: wizard UX, not a blank template
20
+ */
21
+ export interface SkillSpec {
22
+ /** What the skill does (plain English from user) */
23
+ purpose: string;
24
+ /** Skill name (derived from purpose if not provided) */
25
+ name?: string;
26
+ /** Capabilities the skill needs */
27
+ capabilities?: string[];
28
+ /** Data types the skill accesses */
29
+ dataAccess?: string[];
30
+ /** Whether it needs external API access */
31
+ externalAccess?: boolean;
32
+ /** Output directory */
33
+ outputDir?: string;
34
+ }
35
+ export interface GeneratedSkill {
36
+ /** Generated SKILL.md content */
37
+ skillMd: string;
38
+ /** Generated SOUL.md governance */
39
+ soulMd: string;
40
+ /** Generated capability manifest */
41
+ manifest: Record<string, unknown>;
42
+ /** Suggested directory name */
43
+ dirName: string;
44
+ /** Files written */
45
+ filesWritten: string[];
46
+ }
47
+ /**
48
+ * Generate a complete, secured skill package from a plain English description.
49
+ */
50
+ export declare function generateSkill(spec: SkillSpec): GeneratedSkill;
51
+ /**
52
+ * Generate and write skill files to disk.
53
+ */
54
+ export declare function writeSkill(spec: SkillSpec): GeneratedSkill;
55
+ //# sourceMappingURL=builder.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.d.ts","sourceRoot":"","sources":["../../src/skills/builder.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AASH,MAAM,WAAW,SAAS;IACxB,oDAAoD;IACpD,OAAO,EAAE,MAAM,CAAC;IAChB,wDAAwD;IACxD,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,mCAAmC;IACnC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;IACxB,oCAAoC;IACpC,UAAU,CAAC,EAAE,MAAM,EAAE,CAAC;IACtB,2CAA2C;IAC3C,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,uBAAuB;IACvB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,cAAc;IAC7B,iCAAiC;IACjC,OAAO,EAAE,MAAM,CAAC;IAChB,mCAAmC;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,oCAAoC;IACpC,QAAQ,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAClC,+BAA+B;IAC/B,OAAO,EAAE,MAAM,CAAC;IAChB,oBAAoB;IACpB,YAAY,EAAE,MAAM,EAAE,CAAC;CACxB;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,SAAS,GAAG,cAAc,CAiB7D;AAED;;GAEG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,SAAS,GAAG,cAAc,CAmB1D"}