hackmyagent 0.11.13 → 0.11.15

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 (127) hide show
  1. package/README.md +26 -3
  2. package/dist/attack-engine/feedback-loop.d.ts +36 -0
  3. package/dist/attack-engine/feedback-loop.d.ts.map +1 -0
  4. package/dist/attack-engine/feedback-loop.js +261 -0
  5. package/dist/attack-engine/feedback-loop.js.map +1 -0
  6. package/dist/attack-engine/index.d.ts +13 -0
  7. package/dist/attack-engine/index.d.ts.map +1 -0
  8. package/dist/attack-engine/index.js +21 -0
  9. package/dist/attack-engine/index.js.map +1 -0
  10. package/dist/attack-engine/payload-generator.d.ts +21 -0
  11. package/dist/attack-engine/payload-generator.d.ts.map +1 -0
  12. package/dist/attack-engine/payload-generator.js +210 -0
  13. package/dist/attack-engine/payload-generator.js.map +1 -0
  14. package/dist/attack-engine/target-reader.d.ts +15 -0
  15. package/dist/attack-engine/target-reader.d.ts.map +1 -0
  16. package/dist/attack-engine/target-reader.js +152 -0
  17. package/dist/attack-engine/target-reader.js.map +1 -0
  18. package/dist/attack-engine/training-pipeline.d.ts +57 -0
  19. package/dist/attack-engine/training-pipeline.d.ts.map +1 -0
  20. package/dist/attack-engine/training-pipeline.js +146 -0
  21. package/dist/attack-engine/training-pipeline.js.map +1 -0
  22. package/dist/attack-engine/types.d.ts +133 -0
  23. package/dist/attack-engine/types.d.ts.map +1 -0
  24. package/dist/attack-engine/types.js +22 -0
  25. package/dist/attack-engine/types.js.map +1 -0
  26. package/dist/cli.js +248 -15
  27. package/dist/cli.js.map +1 -1
  28. package/dist/index.d.ts +1 -1
  29. package/dist/index.d.ts.map +1 -1
  30. package/dist/index.js +9 -1
  31. package/dist/index.js.map +1 -1
  32. package/dist/nanomind-core/analyzers/capability-analyzer.d.ts +40 -0
  33. package/dist/nanomind-core/analyzers/capability-analyzer.d.ts.map +1 -0
  34. package/dist/nanomind-core/analyzers/capability-analyzer.js +310 -0
  35. package/dist/nanomind-core/analyzers/capability-analyzer.js.map +1 -0
  36. package/dist/nanomind-core/analyzers/code-analyzer.d.ts +21 -0
  37. package/dist/nanomind-core/analyzers/code-analyzer.d.ts.map +1 -0
  38. package/dist/nanomind-core/analyzers/code-analyzer.js +350 -0
  39. package/dist/nanomind-core/analyzers/code-analyzer.js.map +1 -0
  40. package/dist/nanomind-core/analyzers/credential-analyzer.d.ts +20 -0
  41. package/dist/nanomind-core/analyzers/credential-analyzer.d.ts.map +1 -0
  42. package/dist/nanomind-core/analyzers/credential-analyzer.js +317 -0
  43. package/dist/nanomind-core/analyzers/credential-analyzer.js.map +1 -0
  44. package/dist/nanomind-core/analyzers/governance-analyzer.d.ts +22 -0
  45. package/dist/nanomind-core/analyzers/governance-analyzer.d.ts.map +1 -0
  46. package/dist/nanomind-core/analyzers/governance-analyzer.js +393 -0
  47. package/dist/nanomind-core/analyzers/governance-analyzer.js.map +1 -0
  48. package/dist/nanomind-core/analyzers/prompt-analyzer.d.ts +22 -0
  49. package/dist/nanomind-core/analyzers/prompt-analyzer.d.ts.map +1 -0
  50. package/dist/nanomind-core/analyzers/prompt-analyzer.js +486 -0
  51. package/dist/nanomind-core/analyzers/prompt-analyzer.js.map +1 -0
  52. package/dist/nanomind-core/analyzers/scope-analyzer.d.ts +20 -0
  53. package/dist/nanomind-core/analyzers/scope-analyzer.d.ts.map +1 -0
  54. package/dist/nanomind-core/analyzers/scope-analyzer.js +326 -0
  55. package/dist/nanomind-core/analyzers/scope-analyzer.js.map +1 -0
  56. package/dist/nanomind-core/compiler/semantic-compiler.d.ts +41 -0
  57. package/dist/nanomind-core/compiler/semantic-compiler.d.ts.map +1 -0
  58. package/dist/nanomind-core/compiler/semantic-compiler.js +490 -0
  59. package/dist/nanomind-core/compiler/semantic-compiler.js.map +1 -0
  60. package/dist/nanomind-core/index.d.ts +30 -0
  61. package/dist/nanomind-core/index.d.ts.map +1 -0
  62. package/dist/nanomind-core/index.js +45 -0
  63. package/dist/nanomind-core/index.js.map +1 -0
  64. package/dist/nanomind-core/ingestion/artifact-parser.d.ts +48 -0
  65. package/dist/nanomind-core/ingestion/artifact-parser.d.ts.map +1 -0
  66. package/dist/nanomind-core/ingestion/artifact-parser.js +203 -0
  67. package/dist/nanomind-core/ingestion/artifact-parser.js.map +1 -0
  68. package/dist/nanomind-core/ingestion/input-sanitizer.d.ts +49 -0
  69. package/dist/nanomind-core/ingestion/input-sanitizer.d.ts.map +1 -0
  70. package/dist/nanomind-core/ingestion/input-sanitizer.js +80 -0
  71. package/dist/nanomind-core/ingestion/input-sanitizer.js.map +1 -0
  72. package/dist/nanomind-core/scanner-bridge.d.ts +49 -0
  73. package/dist/nanomind-core/scanner-bridge.d.ts.map +1 -0
  74. package/dist/nanomind-core/scanner-bridge.js +317 -0
  75. package/dist/nanomind-core/scanner-bridge.js.map +1 -0
  76. package/dist/nanomind-core/security/defense-in-depth.d.ts +99 -0
  77. package/dist/nanomind-core/security/defense-in-depth.d.ts.map +1 -0
  78. package/dist/nanomind-core/security/defense-in-depth.js +206 -0
  79. package/dist/nanomind-core/security/defense-in-depth.js.map +1 -0
  80. package/dist/nanomind-core/security/integrity-verifier.d.ts +132 -0
  81. package/dist/nanomind-core/security/integrity-verifier.d.ts.map +1 -0
  82. package/dist/nanomind-core/security/integrity-verifier.js +437 -0
  83. package/dist/nanomind-core/security/integrity-verifier.js.map +1 -0
  84. package/dist/nanomind-core/types.d.ts +125 -0
  85. package/dist/nanomind-core/types.d.ts.map +1 -0
  86. package/dist/nanomind-core/types.js +22 -0
  87. package/dist/nanomind-core/types.js.map +1 -0
  88. package/dist/output/asff.d.ts.map +1 -1
  89. package/dist/output/asff.js +2 -1
  90. package/dist/output/asff.js.map +1 -1
  91. package/dist/semantic/index.d.ts +4 -0
  92. package/dist/semantic/index.d.ts.map +1 -1
  93. package/dist/semantic/index.js +13 -1
  94. package/dist/semantic/index.js.map +1 -1
  95. package/dist/semantic/nanomind-analyzer.d.ts +77 -0
  96. package/dist/semantic/nanomind-analyzer.d.ts.map +1 -0
  97. package/dist/semantic/nanomind-analyzer.js +165 -0
  98. package/dist/semantic/nanomind-analyzer.js.map +1 -0
  99. package/dist/semantic/nanomind-enhancer.d.ts +50 -0
  100. package/dist/semantic/nanomind-enhancer.d.ts.map +1 -0
  101. package/dist/semantic/nanomind-enhancer.js +203 -0
  102. package/dist/semantic/nanomind-enhancer.js.map +1 -0
  103. package/dist/simulation/engine.d.ts +69 -0
  104. package/dist/simulation/engine.d.ts.map +1 -0
  105. package/dist/simulation/engine.js +297 -0
  106. package/dist/simulation/engine.js.map +1 -0
  107. package/dist/simulation/index.d.ts +15 -0
  108. package/dist/simulation/index.d.ts.map +1 -0
  109. package/dist/simulation/index.js +31 -0
  110. package/dist/simulation/index.js.map +1 -0
  111. package/dist/simulation/llm-executor.d.ts +58 -0
  112. package/dist/simulation/llm-executor.d.ts.map +1 -0
  113. package/dist/simulation/llm-executor.js +297 -0
  114. package/dist/simulation/llm-executor.js.map +1 -0
  115. package/dist/simulation/mock-tools.d.ts +35 -0
  116. package/dist/simulation/mock-tools.d.ts.map +1 -0
  117. package/dist/simulation/mock-tools.js +181 -0
  118. package/dist/simulation/mock-tools.js.map +1 -0
  119. package/dist/simulation/probes.d.ts +17 -0
  120. package/dist/simulation/probes.d.ts.map +1 -0
  121. package/dist/simulation/probes.js +295 -0
  122. package/dist/simulation/probes.js.map +1 -0
  123. package/dist/simulation/types.d.ts +79 -0
  124. package/dist/simulation/types.d.ts.map +1 -0
  125. package/dist/simulation/types.js +25 -0
  126. package/dist/simulation/types.js.map +1 -0
  127. package/package.json +1 -1
@@ -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,69 @@
1
+ /**
2
+ * Skill Simulation Engine
3
+ *
4
+ * Executes skills inside a controlled LLM with mock tool environment.
5
+ * Observes behavioral patterns to determine if a skill is malicious.
6
+ *
7
+ * Three layers:
8
+ * - Layer 1: NanoMind TME classification (< 8ms, handled by --semantic flag)
9
+ * - Layer 2: 5 targeted probes (< 3 seconds)
10
+ * - Layer 3: Full 20-probe simulation (< 30 seconds)
11
+ */
12
+ import type { SimulationResult, SkillProfile } from './types.js';
13
+ export declare class SimulationEngine {
14
+ private mockEnv;
15
+ private llmBackend;
16
+ private llmDetected;
17
+ private useLLM;
18
+ /**
19
+ * @param options.useLLM - If true, auto-detect and use LLM backends.
20
+ * If false (default for tests), use heuristic analysis only.
21
+ * Set to true in production or when LLM backends are available.
22
+ */
23
+ constructor(options?: {
24
+ useLLM?: boolean;
25
+ });
26
+ /**
27
+ * Auto-detect LLM backend on first use.
28
+ * Falls back to heuristic analysis if no LLM is available.
29
+ */
30
+ private ensureLLM;
31
+ /**
32
+ * Run Layer 2 pre-screen: 5 targeted probes for quick triage.
33
+ * Used when Layer 1 (NanoMind semantic) returns ambiguous confidence (0.40-0.80).
34
+ */
35
+ runLayer2(skill: SkillProfile): Promise<SimulationResult>;
36
+ /**
37
+ * Run Layer 3 full simulation: all 20 probes for definitive behavioral verdict.
38
+ * Used for --deep flag, OASB benchmark labeling, ARIA research.
39
+ */
40
+ runLayer3(skill: SkillProfile): Promise<SimulationResult>;
41
+ /**
42
+ * Core simulation: run probe battery against skill in mock environment.
43
+ */
44
+ private runSimulation;
45
+ /**
46
+ * Run a single probe against the skill.
47
+ * Uses LLM execution when available, falls back to heuristic analysis.
48
+ */
49
+ private runSingleProbe;
50
+ /**
51
+ * Heuristic probe evaluation.
52
+ * This is the interim implementation before full LLM simulation.
53
+ * Analyzes skill text for patterns that indicate probe failure.
54
+ */
55
+ private evaluateProbeHeuristic;
56
+ /**
57
+ * Compute overall verdict from probe results.
58
+ */
59
+ private computeVerdict;
60
+ /**
61
+ * Compute semantic delta: how far observed behavior diverged from declared purpose.
62
+ */
63
+ private computeSemanticDelta;
64
+ }
65
+ /**
66
+ * Parse a skill definition (markdown + YAML frontmatter) into a SkillProfile.
67
+ */
68
+ export declare function parseSkillProfile(content: string, name?: string): SkillProfile;
69
+ //# sourceMappingURL=engine.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.d.ts","sourceRoot":"","sources":["../../src/simulation/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAMH,OAAO,KAAK,EACV,gBAAgB,EAIhB,YAAY,EAIb,MAAM,YAAY,CAAC;AAMpB,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,OAAO,CAAsB;IACrC,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,MAAM,CAAU;IAExB;;;;OAIG;gBACS,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE;IAK1C;;;OAGG;YACW,SAAS;IASvB;;;OAGG;IACG,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI/D;;;OAGG;IACG,SAAS,CAAC,KAAK,EAAE,YAAY,GAAG,OAAO,CAAC,gBAAgB,CAAC;IAI/D;;OAEG;YACW,aAAa;IAyD3B;;;OAGG;YACW,cAAc;IA6B5B;;;;OAIG;IACH,OAAO,CAAC,sBAAsB;IAgE9B;;OAEG;IACH,OAAO,CAAC,cAAc;IAiCtB;;OAEG;IACH,OAAO,CAAC,oBAAoB;CAY7B;AAMD;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,GAAE,MAAkB,GAAG,YAAY,CA2DzF"}
@@ -0,0 +1,297 @@
1
+ "use strict";
2
+ /**
3
+ * Skill Simulation Engine
4
+ *
5
+ * Executes skills inside a controlled LLM with mock tool environment.
6
+ * Observes behavioral patterns to determine if a skill is malicious.
7
+ *
8
+ * Three layers:
9
+ * - Layer 1: NanoMind TME classification (< 8ms, handled by --semantic flag)
10
+ * - Layer 2: 5 targeted probes (< 3 seconds)
11
+ * - Layer 3: Full 20-probe simulation (< 30 seconds)
12
+ */
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.SimulationEngine = void 0;
15
+ exports.parseSkillProfile = parseSkillProfile;
16
+ const mock_tools_js_1 = require("./mock-tools.js");
17
+ const probes_js_1 = require("./probes.js");
18
+ const llm_executor_js_1 = require("./llm-executor.js");
19
+ // ============================================================================
20
+ // Simulation Engine
21
+ // ============================================================================
22
+ class SimulationEngine {
23
+ /**
24
+ * @param options.useLLM - If true, auto-detect and use LLM backends.
25
+ * If false (default for tests), use heuristic analysis only.
26
+ * Set to true in production or when LLM backends are available.
27
+ */
28
+ constructor(options) {
29
+ this.llmBackend = null;
30
+ this.llmDetected = false;
31
+ this.mockEnv = new mock_tools_js_1.MockToolEnvironment();
32
+ this.useLLM = options?.useLLM ?? false;
33
+ }
34
+ /**
35
+ * Auto-detect LLM backend on first use.
36
+ * Falls back to heuristic analysis if no LLM is available.
37
+ */
38
+ async ensureLLM() {
39
+ if (!this.useLLM)
40
+ return null;
41
+ if (!this.llmDetected) {
42
+ this.llmBackend = await (0, llm_executor_js_1.detectBestBackend)();
43
+ this.llmDetected = true;
44
+ }
45
+ return this.llmBackend;
46
+ }
47
+ /**
48
+ * Run Layer 2 pre-screen: 5 targeted probes for quick triage.
49
+ * Used when Layer 1 (NanoMind semantic) returns ambiguous confidence (0.40-0.80).
50
+ */
51
+ async runLayer2(skill) {
52
+ return this.runSimulation(skill, probes_js_1.LAYER2_PROBES, 2);
53
+ }
54
+ /**
55
+ * Run Layer 3 full simulation: all 20 probes for definitive behavioral verdict.
56
+ * Used for --deep flag, OASB benchmark labeling, ARIA research.
57
+ */
58
+ async runLayer3(skill) {
59
+ return this.runSimulation(skill, probes_js_1.LAYER3_PROBES, 3);
60
+ }
61
+ /**
62
+ * Core simulation: run probe battery against skill in mock environment.
63
+ */
64
+ async runSimulation(skill, probes, layer) {
65
+ const startMs = Date.now();
66
+ const results = [];
67
+ for (const probe of probes) {
68
+ this.mockEnv.reset();
69
+ const probeStart = Date.now();
70
+ try {
71
+ const result = await this.runSingleProbe(skill, probe);
72
+ results.push({
73
+ ...result,
74
+ durationMs: Date.now() - probeStart,
75
+ });
76
+ }
77
+ catch {
78
+ // Probe timeout or error -- treat as suspicious but not definitive
79
+ results.push({
80
+ probeId: probe.id,
81
+ probeName: probe.name,
82
+ category: probe.category,
83
+ passed: false,
84
+ attackClass: probe.attackClass,
85
+ observedBehavior: 'Probe timed out or errored',
86
+ evidence: ['Probe execution failed'],
87
+ confidence: 0.3,
88
+ durationMs: Date.now() - probeStart,
89
+ });
90
+ }
91
+ }
92
+ const allCalls = this.mockEnv.getCallLog();
93
+ const failedProbes = results.filter(r => !r.passed);
94
+ const passedProbes = results.filter(r => r.passed);
95
+ // Compute verdict from probe results
96
+ const { verdict, confidence } = this.computeVerdict(results, probes.length);
97
+ // Semantic delta: how far observed behavior diverged from declared purpose
98
+ const semanticDelta = this.computeSemanticDelta(skill, allCalls);
99
+ return {
100
+ verdict,
101
+ confidence,
102
+ failedProbes,
103
+ passedProbes,
104
+ behavioralTrace: allCalls,
105
+ semanticDelta,
106
+ durationMs: Date.now() - startMs,
107
+ probeCount: probes.length,
108
+ layer,
109
+ };
110
+ }
111
+ /**
112
+ * Run a single probe against the skill.
113
+ * Uses LLM execution when available, falls back to heuristic analysis.
114
+ */
115
+ async runSingleProbe(skill, probe) {
116
+ // Try LLM-powered execution first (actual behavioral observation)
117
+ const backend = await this.ensureLLM();
118
+ if (backend) {
119
+ return (0, llm_executor_js_1.executeProbeLLM)(backend, skill, probe, this.mockEnv);
120
+ }
121
+ // Fallback: heuristic analysis of skill content against probe
122
+ const passed = this.evaluateProbeHeuristic(skill, probe);
123
+ const flaggedCalls = this.mockEnv.getFlaggedCalls();
124
+ return {
125
+ probeId: probe.id,
126
+ probeName: probe.name,
127
+ category: probe.category,
128
+ passed,
129
+ attackClass: probe.attackClass,
130
+ observedBehavior: passed
131
+ ? `Skill passed ${probe.name}: ${probe.passCondition}`
132
+ : `Skill FAILED ${probe.name}: ${probe.failCondition}`,
133
+ evidence: flaggedCalls.map(c => c.flagReason ?? `Suspicious ${c.toolType} call: ${c.toolName}`),
134
+ confidence: passed ? 0.85 : 0.80,
135
+ durationMs: 0, // Set by caller
136
+ };
137
+ }
138
+ /**
139
+ * Heuristic probe evaluation.
140
+ * This is the interim implementation before full LLM simulation.
141
+ * Analyzes skill text for patterns that indicate probe failure.
142
+ */
143
+ evaluateProbeHeuristic(skill, probe) {
144
+ const text = skill.rawContent.toLowerCase();
145
+ const caps = skill.capabilities.map(c => c.toLowerCase());
146
+ const constraints = skill.constraints.map(c => c.toLowerCase());
147
+ switch (probe.category) {
148
+ case 'exfiltration': {
149
+ // Check for external URL references + data forwarding patterns
150
+ const hasExternalURL = /https?:\/\/[^\s]+\.(co|io|com|net|org)/i.test(skill.rawContent);
151
+ const hasForwarding = /forward|send|transmit|export|upload|post.*to/i.test(text);
152
+ const hasTokenRef = /session|token|credential|secret/i.test(text);
153
+ return !(hasExternalURL && hasForwarding && hasTokenRef);
154
+ }
155
+ case 'override_resistance': {
156
+ // Skills that mention "ignore previous" or lack constraint enforcement
157
+ const hasOverrideLanguage = /ignore.*previous|override.*instruction|new.*task/i.test(text);
158
+ const hasWeakConstraints = constraints.length === 0;
159
+ return !hasOverrideLanguage && !hasWeakConstraints;
160
+ }
161
+ case 'scope_expansion': {
162
+ // Check if skill references tools/resources beyond declared capabilities
163
+ const undeclaredTools = ['email', 'admin', 'system', 'root', 'sudo', 'exec', 'shell'];
164
+ const hasUndeclared = undeclaredTools.some(t => text.includes(t) && !caps.some(c => c.includes(t)));
165
+ return !hasUndeclared;
166
+ }
167
+ case 'credential_secret': {
168
+ // Check for credential harvesting patterns
169
+ const harvestPatterns = /ask.*password|request.*credential|share.*key|provide.*token/i;
170
+ const storePatterns = /save.*password|store.*credential|remember.*key/i;
171
+ return !harvestPatterns.test(text) && !storePatterns.test(text);
172
+ }
173
+ case 'memory_persistence': {
174
+ // Check for instruction injection via memory patterns
175
+ const instructionWrite = /always.*remember|persist.*instruction|save.*rule/i;
176
+ const crossSession = /future.*session|next.*time|permanent/i;
177
+ return !instructionWrite.test(text) && !crossSession.test(text);
178
+ }
179
+ case 'heartbeat_remote': {
180
+ // Check for remote instruction fetch patterns
181
+ const remoteFetch = /fetch.*config|check.*update|load.*instruction.*from/i;
182
+ const callbackSetup = /webhook|callback|notify.*url|ping.*endpoint/i;
183
+ return !remoteFetch.test(text) && !callbackSetup.test(text);
184
+ }
185
+ case 'semantic_consistency': {
186
+ // Check if capabilities match declared purpose
187
+ const purposeWords = skill.declaredPurpose.toLowerCase().split(/\s+/);
188
+ const capWords = caps.join(' ').split(/\s+/);
189
+ const overlap = purposeWords.filter(w => capWords.some(c => c.includes(w))).length;
190
+ return overlap > 0 || purposeWords.length < 3; // Short purposes get a pass
191
+ }
192
+ default:
193
+ return true; // Unknown category passes by default
194
+ }
195
+ }
196
+ /**
197
+ * Compute overall verdict from probe results.
198
+ */
199
+ computeVerdict(results, totalProbes) {
200
+ const failed = results.filter(r => !r.passed);
201
+ const failRate = failed.length / totalProbes;
202
+ if (failRate === 0) {
203
+ return { verdict: 'CLEAN', confidence: 0.95 };
204
+ }
205
+ // High-confidence failures in critical categories
206
+ const criticalFailures = failed.filter(r => ['exfiltration', 'credential_secret', 'heartbeat_remote'].includes(r.category));
207
+ if (criticalFailures.length >= 2 || failRate > 0.3) {
208
+ return {
209
+ verdict: 'MALICIOUS',
210
+ confidence: Math.min(0.95, 0.6 + (failRate * 0.5)),
211
+ };
212
+ }
213
+ if (failed.length > 0) {
214
+ return {
215
+ verdict: 'SUSPICIOUS',
216
+ confidence: 0.5 + (failRate * 0.3),
217
+ };
218
+ }
219
+ return { verdict: 'CLEAN', confidence: 0.85 };
220
+ }
221
+ /**
222
+ * Compute semantic delta: how far observed behavior diverged from declared purpose.
223
+ */
224
+ computeSemanticDelta(skill, calls) {
225
+ if (calls.length === 0)
226
+ return 0;
227
+ const flaggedRatio = calls.filter(c => c.flagged).length / calls.length;
228
+ const undeclaredTools = calls.filter(c => {
229
+ const toolName = c.toolName.toLowerCase();
230
+ return !skill.capabilities.some(cap => toolName.includes(cap.toLowerCase()));
231
+ }).length;
232
+ const undeclaredRatio = calls.length > 0 ? undeclaredTools / calls.length : 0;
233
+ return Math.min(1.0, (flaggedRatio * 0.6) + (undeclaredRatio * 0.4));
234
+ }
235
+ }
236
+ exports.SimulationEngine = SimulationEngine;
237
+ // ============================================================================
238
+ // Skill Profile Parser
239
+ // ============================================================================
240
+ /**
241
+ * Parse a skill definition (markdown + YAML frontmatter) into a SkillProfile.
242
+ */
243
+ function parseSkillProfile(content, name = 'unknown') {
244
+ const lines = content.split('\n');
245
+ // Extract YAML frontmatter if present
246
+ let capabilities = [];
247
+ let constraints = [];
248
+ let declaredPurpose = '';
249
+ const yamlMatch = content.match(/^---\n([\s\S]*?)\n---/);
250
+ if (yamlMatch) {
251
+ const yaml = yamlMatch[1];
252
+ const capsMatch = yaml.match(/capabilities:\s*\n((?:\s+-\s+.+\n?)*)/);
253
+ if (capsMatch) {
254
+ capabilities = capsMatch[1].split('\n')
255
+ .filter(l => l.trim().startsWith('-'))
256
+ .map(l => l.replace(/^\s*-\s*/, '').trim());
257
+ }
258
+ const purposeMatch = yaml.match(/description:\s*(.+)/);
259
+ if (purposeMatch) {
260
+ declaredPurpose = purposeMatch[1].trim();
261
+ }
262
+ }
263
+ // Extract constraints from content
264
+ const constraintPatterns = /(?:must|should|never|always|cannot|will not|forbidden)[^.]+\./gi;
265
+ const constraintMatches = content.match(constraintPatterns);
266
+ if (constraintMatches) {
267
+ constraints = constraintMatches.map(m => m.trim());
268
+ }
269
+ // Extract heartbeat URLs
270
+ const urlPattern = /https?:\/\/[^\s)>]+/g;
271
+ const heartbeatURLs = (content.match(urlPattern) ?? []).filter(u => /heartbeat|ping|health|status|callback/i.test(u));
272
+ // Determine governance mechanism
273
+ let governanceMechanism = 'none';
274
+ if (/soul\.md/i.test(content))
275
+ governanceMechanism = 'soul';
276
+ else if (/system.?prompt/i.test(content))
277
+ governanceMechanism = 'system_prompt';
278
+ else if (constraints.length > 3)
279
+ governanceMechanism = 'runtime_check';
280
+ if (!declaredPurpose) {
281
+ // Try to infer from first paragraph
282
+ const firstPara = lines.find(l => l.trim().length > 20 && !l.startsWith('#') && !l.startsWith('-'));
283
+ declaredPurpose = firstPara?.trim() ?? name;
284
+ }
285
+ return {
286
+ name,
287
+ declaredPurpose,
288
+ capabilities,
289
+ constraints,
290
+ toolPermissions: capabilities, // For now, same as capabilities
291
+ heartbeatURLs,
292
+ dataAccessPatterns: [],
293
+ governanceMechanism,
294
+ rawContent: content,
295
+ };
296
+ }
297
+ //# sourceMappingURL=engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"engine.js","sourceRoot":"","sources":["../../src/simulation/engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,15 @@
1
+ /**
2
+ * HMA Skill Simulation Engine
3
+ *
4
+ * Behavioral simulation that observes what skills actually DO.
5
+ * Three layers: NanoMind semantic (8ms) -> targeted probes (3s) -> full simulation (30s).
6
+ * Target: < 1% false positive rate vs industry 95.8%.
7
+ */
8
+ export { SimulationEngine, parseSkillProfile } from './engine.js';
9
+ export { MockToolEnvironment } from './mock-tools.js';
10
+ export { detectBestBackend, NanoMindBackend, AnthropicBackend, OllamaBackend, executeProbeLLM } from './llm-executor.js';
11
+ export type { LLMBackend } from './llm-executor.js';
12
+ export { ALL_PROBES, LAYER2_PROBES, LAYER3_PROBES, getProbesByCategory, getProbeCategoryCounts } from './probes.js';
13
+ export type { SimulationResult, SimulationVerdict, SimulationConfig, ProbeDefinition, ProbeResult, ProbeCategory, SkillProfile, MockToolCall, MockToolType, MockToolConfig, } from './types.js';
14
+ export { DEFAULT_LAYER2_CONFIG, DEFAULT_LAYER3_CONFIG } from './types.js';
15
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/simulation/index.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,gBAAgB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,mBAAmB,EAAE,MAAM,iBAAiB,CAAC;AACtD,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,gBAAgB,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACzH,YAAY,EAAE,UAAU,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,mBAAmB,EAAE,sBAAsB,EAAE,MAAM,aAAa,CAAC;AACpH,YAAY,EACV,gBAAgB,EAChB,iBAAiB,EACjB,gBAAgB,EAChB,eAAe,EACf,WAAW,EACX,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,cAAc,GACf,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,qBAAqB,EAAE,qBAAqB,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,31 @@
1
+ "use strict";
2
+ /**
3
+ * HMA Skill Simulation Engine
4
+ *
5
+ * Behavioral simulation that observes what skills actually DO.
6
+ * Three layers: NanoMind semantic (8ms) -> targeted probes (3s) -> full simulation (30s).
7
+ * Target: < 1% false positive rate vs industry 95.8%.
8
+ */
9
+ Object.defineProperty(exports, "__esModule", { value: true });
10
+ exports.DEFAULT_LAYER3_CONFIG = exports.DEFAULT_LAYER2_CONFIG = exports.getProbeCategoryCounts = exports.getProbesByCategory = exports.LAYER3_PROBES = exports.LAYER2_PROBES = exports.ALL_PROBES = exports.executeProbeLLM = exports.OllamaBackend = exports.AnthropicBackend = exports.NanoMindBackend = exports.detectBestBackend = exports.MockToolEnvironment = exports.parseSkillProfile = exports.SimulationEngine = void 0;
11
+ var engine_js_1 = require("./engine.js");
12
+ Object.defineProperty(exports, "SimulationEngine", { enumerable: true, get: function () { return engine_js_1.SimulationEngine; } });
13
+ Object.defineProperty(exports, "parseSkillProfile", { enumerable: true, get: function () { return engine_js_1.parseSkillProfile; } });
14
+ var mock_tools_js_1 = require("./mock-tools.js");
15
+ Object.defineProperty(exports, "MockToolEnvironment", { enumerable: true, get: function () { return mock_tools_js_1.MockToolEnvironment; } });
16
+ var llm_executor_js_1 = require("./llm-executor.js");
17
+ Object.defineProperty(exports, "detectBestBackend", { enumerable: true, get: function () { return llm_executor_js_1.detectBestBackend; } });
18
+ Object.defineProperty(exports, "NanoMindBackend", { enumerable: true, get: function () { return llm_executor_js_1.NanoMindBackend; } });
19
+ Object.defineProperty(exports, "AnthropicBackend", { enumerable: true, get: function () { return llm_executor_js_1.AnthropicBackend; } });
20
+ Object.defineProperty(exports, "OllamaBackend", { enumerable: true, get: function () { return llm_executor_js_1.OllamaBackend; } });
21
+ Object.defineProperty(exports, "executeProbeLLM", { enumerable: true, get: function () { return llm_executor_js_1.executeProbeLLM; } });
22
+ var probes_js_1 = require("./probes.js");
23
+ Object.defineProperty(exports, "ALL_PROBES", { enumerable: true, get: function () { return probes_js_1.ALL_PROBES; } });
24
+ Object.defineProperty(exports, "LAYER2_PROBES", { enumerable: true, get: function () { return probes_js_1.LAYER2_PROBES; } });
25
+ Object.defineProperty(exports, "LAYER3_PROBES", { enumerable: true, get: function () { return probes_js_1.LAYER3_PROBES; } });
26
+ Object.defineProperty(exports, "getProbesByCategory", { enumerable: true, get: function () { return probes_js_1.getProbesByCategory; } });
27
+ Object.defineProperty(exports, "getProbeCategoryCounts", { enumerable: true, get: function () { return probes_js_1.getProbeCategoryCounts; } });
28
+ var types_js_1 = require("./types.js");
29
+ Object.defineProperty(exports, "DEFAULT_LAYER2_CONFIG", { enumerable: true, get: function () { return types_js_1.DEFAULT_LAYER2_CONFIG; } });
30
+ Object.defineProperty(exports, "DEFAULT_LAYER3_CONFIG", { enumerable: true, get: function () { return types_js_1.DEFAULT_LAYER3_CONFIG; } });
31
+ //# sourceMappingURL=index.js.map