hackmyagent 0.12.0 → 0.12.1
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/.integrity-manifest.json +1 -1
- package/dist/arp/intelligence/ast-monitor.d.ts +62 -0
- package/dist/arp/intelligence/ast-monitor.d.ts.map +1 -0
- package/dist/arp/intelligence/ast-monitor.js +197 -0
- package/dist/arp/intelligence/ast-monitor.js.map +1 -0
- package/dist/cli.js +7 -5
- package/dist/cli.js.map +1 -1
- package/dist/nanomind-core/compiler/semantic-compiler.d.ts.map +1 -1
- package/dist/nanomind-core/compiler/semantic-compiler.js +29 -6
- package/dist/nanomind-core/compiler/semantic-compiler.js.map +1 -1
- package/dist/nanomind-core/index.d.ts +6 -0
- package/dist/nanomind-core/index.d.ts.map +1 -1
- package/dist/nanomind-core/index.js +23 -1
- package/dist/nanomind-core/index.js.map +1 -1
- package/dist/nanomind-core/inference/tme-classifier.d.ts +62 -0
- package/dist/nanomind-core/inference/tme-classifier.d.ts.map +1 -0
- package/dist/nanomind-core/inference/tme-classifier.js +176 -0
- package/dist/nanomind-core/inference/tme-classifier.js.map +1 -0
- package/dist/nanomind-core/verification/ast-validator.d.ts +55 -0
- package/dist/nanomind-core/verification/ast-validator.d.ts.map +1 -0
- package/dist/nanomind-core/verification/ast-validator.js +228 -0
- package/dist/nanomind-core/verification/ast-validator.js.map +1 -0
- package/dist/scanner/external-scanner.d.ts.map +1 -1
- package/dist/scanner/external-scanner.js +37 -30
- package/dist/scanner/external-scanner.js.map +1 -1
- package/dist/simulation/index.d.ts +1 -1
- package/dist/simulation/index.js +1 -1
- package/package.json +2 -1
|
@@ -0,0 +1,228 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AST Behavioral Validator
|
|
4
|
+
*
|
|
5
|
+
* Tests whether the SecurityAST's claims hold under behavioral simulation.
|
|
6
|
+
* The AST says what an artifact DECLARES and what NanoMind INFERS.
|
|
7
|
+
* The validator OBSERVES what the artifact actually DOES.
|
|
8
|
+
*
|
|
9
|
+
* This is the third leg of defense-in-depth:
|
|
10
|
+
* 1. Static analysis: pattern matching on raw text
|
|
11
|
+
* 2. NanoMind AST: semantic understanding of intent
|
|
12
|
+
* 3. Behavioral validation: observation of actual behavior
|
|
13
|
+
*
|
|
14
|
+
* All three must agree for high-confidence classification.
|
|
15
|
+
*
|
|
16
|
+
* Security: even if both static and NanoMind are fooled,
|
|
17
|
+
* behavioral observation catches the actual behavior.
|
|
18
|
+
*/
|
|
19
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
20
|
+
exports.validateAST = validateAST;
|
|
21
|
+
const engine_js_1 = require("../../simulation/engine.js");
|
|
22
|
+
const defense_in_depth_js_1 = require("../security/defense-in-depth.js");
|
|
23
|
+
// ============================================================================
|
|
24
|
+
// AST Validator
|
|
25
|
+
// ============================================================================
|
|
26
|
+
/**
|
|
27
|
+
* Validate an AST's claims against behavioral simulation.
|
|
28
|
+
*
|
|
29
|
+
* @param ast - The compiled SecurityAST to validate
|
|
30
|
+
* @param rawContent - The original artifact content (for simulation)
|
|
31
|
+
* @param verifier - AST signature verifier
|
|
32
|
+
*/
|
|
33
|
+
async function validateAST(ast, rawContent, verifier) {
|
|
34
|
+
const startMs = Date.now();
|
|
35
|
+
// Verify AST integrity first
|
|
36
|
+
(0, defense_in_depth_js_1.assertASTIntegrity)(ast, verifier);
|
|
37
|
+
const claims = [];
|
|
38
|
+
const discrepancies = [];
|
|
39
|
+
// Run behavioral simulation
|
|
40
|
+
const sim = new engine_js_1.SimulationEngine();
|
|
41
|
+
const profile = (0, engine_js_1.parseSkillProfile)(rawContent, ast.artifactPath ?? 'unknown');
|
|
42
|
+
let simulation = null;
|
|
43
|
+
try {
|
|
44
|
+
simulation = await sim.runLayer3(profile);
|
|
45
|
+
}
|
|
46
|
+
catch {
|
|
47
|
+
// Simulation failed -- validate AST against heuristics only
|
|
48
|
+
}
|
|
49
|
+
// Validate capability claims
|
|
50
|
+
validateCapabilities(ast, simulation, claims, discrepancies);
|
|
51
|
+
// Validate constraint claims
|
|
52
|
+
validateConstraints(ast, simulation, claims, discrepancies);
|
|
53
|
+
// Validate intent classification
|
|
54
|
+
validateIntent(ast, simulation, claims, discrepancies);
|
|
55
|
+
// Validate scope claims
|
|
56
|
+
validateScope(ast, simulation, claims, discrepancies);
|
|
57
|
+
// Compute overall accuracy
|
|
58
|
+
const validated = claims.filter(c => c.validated).length;
|
|
59
|
+
const astAccuracy = claims.length > 0 ? validated / claims.length : 1;
|
|
60
|
+
return {
|
|
61
|
+
valid: discrepancies.filter(d => d.severity === 'critical').length === 0,
|
|
62
|
+
claims,
|
|
63
|
+
simulation,
|
|
64
|
+
astAccuracy,
|
|
65
|
+
discrepancies,
|
|
66
|
+
durationMs: Date.now() - startMs,
|
|
67
|
+
};
|
|
68
|
+
}
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// Claim Validators
|
|
71
|
+
// ============================================================================
|
|
72
|
+
function validateCapabilities(ast, sim, claims, discrepancies) {
|
|
73
|
+
// Claim: declared capabilities are the ONLY capabilities exercised
|
|
74
|
+
const declaredNames = new Set(ast.declaredCapabilities.map(c => c.name));
|
|
75
|
+
const inferredUndeclared = ast.inferredCapabilities.filter(c => c.inferred && !c.declared);
|
|
76
|
+
// Check if simulation found undeclared behavior
|
|
77
|
+
if (sim) {
|
|
78
|
+
const failedScopes = sim.failedProbes.filter(p => p.category === 'scope_expansion');
|
|
79
|
+
if (failedScopes.length > 0 && inferredUndeclared.length === 0) {
|
|
80
|
+
// Simulation found scope expansion that AST didn't predict
|
|
81
|
+
discrepancies.push({
|
|
82
|
+
description: 'Simulation detected scope expansion not predicted by AST',
|
|
83
|
+
severity: 'high',
|
|
84
|
+
astClaim: 'No undeclared capabilities',
|
|
85
|
+
observedBehavior: `${failedScopes.length} scope expansion probe(s) failed`,
|
|
86
|
+
});
|
|
87
|
+
}
|
|
88
|
+
}
|
|
89
|
+
for (const cap of ast.declaredCapabilities) {
|
|
90
|
+
claims.push({
|
|
91
|
+
claim: `Capability: ${cap.name}`,
|
|
92
|
+
type: 'capability',
|
|
93
|
+
astSays: `Declared, risk level: ${cap.riskLevel}`,
|
|
94
|
+
behaviorShows: sim ? 'Simulation ran' : 'No simulation data',
|
|
95
|
+
validated: true, // Declared capabilities are accepted
|
|
96
|
+
confidence: 0.8,
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
for (const cap of inferredUndeclared) {
|
|
100
|
+
claims.push({
|
|
101
|
+
claim: `Undeclared capability: ${cap.name}`,
|
|
102
|
+
type: 'capability',
|
|
103
|
+
astSays: `Inferred but not declared, risk: ${cap.riskLevel}`,
|
|
104
|
+
behaviorShows: sim?.failedProbes.some(p => p.category === 'scope_expansion')
|
|
105
|
+
? 'Simulation confirms scope expansion'
|
|
106
|
+
: 'Not confirmed by simulation',
|
|
107
|
+
validated: false,
|
|
108
|
+
confidence: 0.6,
|
|
109
|
+
});
|
|
110
|
+
if (cap.riskLevel === 'critical' || cap.riskLevel === 'high') {
|
|
111
|
+
discrepancies.push({
|
|
112
|
+
description: `High-risk undeclared capability: ${cap.name}`,
|
|
113
|
+
severity: cap.riskLevel === 'critical' ? 'critical' : 'high',
|
|
114
|
+
astClaim: `${cap.name} is inferred but not declared`,
|
|
115
|
+
observedBehavior: cap.evidence ?? 'Inferred from content analysis',
|
|
116
|
+
});
|
|
117
|
+
}
|
|
118
|
+
}
|
|
119
|
+
}
|
|
120
|
+
function validateConstraints(ast, sim, claims, discrepancies) {
|
|
121
|
+
for (const constraint of ast.declaredConstraints) {
|
|
122
|
+
// Check if simulation tested override resistance
|
|
123
|
+
const overrideProbes = sim?.failedProbes.filter(p => p.category === 'override_resistance') ?? [];
|
|
124
|
+
const overrideResisted = sim?.passedProbes.filter(p => p.category === 'override_resistance') ?? [];
|
|
125
|
+
if (constraint.domain === 'behavioral_constraint' || constraint.domain === 'capability_boundary') {
|
|
126
|
+
const holds = overrideResisted.length >= overrideProbes.length;
|
|
127
|
+
claims.push({
|
|
128
|
+
claim: `Constraint: ${constraint.text.slice(0, 60)}...`,
|
|
129
|
+
type: 'constraint',
|
|
130
|
+
astSays: `Enforceability: ${(constraint.enforceability * 100).toFixed(0)}%, bypass risk: ${(constraint.bypassRisk * 100).toFixed(0)}%`,
|
|
131
|
+
behaviorShows: sim
|
|
132
|
+
? (holds ? 'Constraint held under simulation probes' : 'Constraint FAILED under simulation probes')
|
|
133
|
+
: 'No simulation data',
|
|
134
|
+
validated: holds,
|
|
135
|
+
confidence: sim ? 0.85 : 0.5,
|
|
136
|
+
});
|
|
137
|
+
if (!holds && sim) {
|
|
138
|
+
discrepancies.push({
|
|
139
|
+
description: `Constraint bypassed: "${constraint.text.slice(0, 60)}..."`,
|
|
140
|
+
severity: 'high',
|
|
141
|
+
astClaim: `Constraint with ${(constraint.enforceability * 100).toFixed(0)}% enforceability`,
|
|
142
|
+
observedBehavior: `${overrideProbes.length} override probe(s) succeeded`,
|
|
143
|
+
});
|
|
144
|
+
}
|
|
145
|
+
}
|
|
146
|
+
}
|
|
147
|
+
// Check: AST says no constraints, simulation confirms vulnerability
|
|
148
|
+
if (ast.declaredConstraints.length === 0 && sim?.verdict === 'MALICIOUS') {
|
|
149
|
+
discrepancies.push({
|
|
150
|
+
description: 'No governance constraints and simulation confirms malicious behavior',
|
|
151
|
+
severity: 'critical',
|
|
152
|
+
astClaim: 'Zero constraints declared',
|
|
153
|
+
observedBehavior: `Simulation verdict: MALICIOUS (${(sim.confidence * 100).toFixed(0)}% confidence)`,
|
|
154
|
+
});
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
function validateIntent(ast, sim, claims, discrepancies) {
|
|
158
|
+
if (!sim) {
|
|
159
|
+
claims.push({
|
|
160
|
+
claim: `Intent: ${ast.intentClassification}`,
|
|
161
|
+
type: 'intent',
|
|
162
|
+
astSays: `${ast.intentClassification} (${(ast.intentConfidence * 100).toFixed(0)}% confidence)`,
|
|
163
|
+
behaviorShows: 'No simulation data to verify',
|
|
164
|
+
validated: true, // Accept AST without simulation
|
|
165
|
+
confidence: ast.intentConfidence * 0.7, // Lower confidence without behavioral verification
|
|
166
|
+
});
|
|
167
|
+
return;
|
|
168
|
+
}
|
|
169
|
+
// Compare AST intent with simulation verdict
|
|
170
|
+
const astIntent = ast.intentClassification;
|
|
171
|
+
const simVerdict = sim.verdict.toLowerCase();
|
|
172
|
+
const intentMap = {
|
|
173
|
+
benign: ['clean'],
|
|
174
|
+
suspicious: ['suspicious', 'clean'],
|
|
175
|
+
malicious: ['malicious', 'suspicious'],
|
|
176
|
+
};
|
|
177
|
+
const agrees = intentMap[astIntent]?.includes(simVerdict) ?? false;
|
|
178
|
+
claims.push({
|
|
179
|
+
claim: `Intent: ${astIntent}`,
|
|
180
|
+
type: 'intent',
|
|
181
|
+
astSays: `${astIntent} (${(ast.intentConfidence * 100).toFixed(0)}% confidence)`,
|
|
182
|
+
behaviorShows: `Simulation: ${sim.verdict} (${(sim.confidence * 100).toFixed(0)}% confidence)`,
|
|
183
|
+
validated: agrees,
|
|
184
|
+
confidence: agrees ? Math.max(ast.intentConfidence, sim.confidence) : 0.3,
|
|
185
|
+
});
|
|
186
|
+
if (!agrees) {
|
|
187
|
+
// Intent disagreement
|
|
188
|
+
const severity = astIntent === 'benign' && simVerdict === 'malicious' ? 'critical' : 'high';
|
|
189
|
+
discrepancies.push({
|
|
190
|
+
description: `AST says ${astIntent} but simulation says ${sim.verdict}`,
|
|
191
|
+
severity,
|
|
192
|
+
astClaim: `Intent: ${astIntent} (${(ast.intentConfidence * 100).toFixed(0)}%)`,
|
|
193
|
+
observedBehavior: `Simulation: ${sim.verdict} (${(sim.confidence * 100).toFixed(0)}%, ${sim.failedProbes.length} failed probes)`,
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
}
|
|
197
|
+
function validateScope(ast, sim, claims, discrepancies) {
|
|
198
|
+
// Check semantic delta from simulation
|
|
199
|
+
if (sim && sim.semanticDelta > 0.5) {
|
|
200
|
+
claims.push({
|
|
201
|
+
claim: 'Scope: behavior matches declared purpose',
|
|
202
|
+
type: 'scope',
|
|
203
|
+
astSays: `Purpose: "${ast.declaredPurpose.slice(0, 60)}"`,
|
|
204
|
+
behaviorShows: `Semantic delta: ${(sim.semanticDelta * 100).toFixed(0)}% divergence from declared purpose`,
|
|
205
|
+
validated: false,
|
|
206
|
+
confidence: 0.7,
|
|
207
|
+
});
|
|
208
|
+
discrepancies.push({
|
|
209
|
+
description: 'Observed behavior significantly diverges from declared purpose',
|
|
210
|
+
severity: sim.semanticDelta > 0.7 ? 'high' : 'medium',
|
|
211
|
+
astClaim: `Purpose: "${ast.declaredPurpose.slice(0, 60)}"`,
|
|
212
|
+
observedBehavior: `${(sim.semanticDelta * 100).toFixed(0)}% semantic divergence`,
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
else {
|
|
216
|
+
claims.push({
|
|
217
|
+
claim: 'Scope: behavior matches declared purpose',
|
|
218
|
+
type: 'scope',
|
|
219
|
+
astSays: `Purpose: "${ast.declaredPurpose.slice(0, 60)}"`,
|
|
220
|
+
behaviorShows: sim
|
|
221
|
+
? `Semantic delta: ${((sim.semanticDelta ?? 0) * 100).toFixed(0)}% (within acceptable range)`
|
|
222
|
+
: 'No simulation data',
|
|
223
|
+
validated: true,
|
|
224
|
+
confidence: sim ? 0.85 : 0.5,
|
|
225
|
+
});
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
//# sourceMappingURL=ast-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ast-validator.js","sourceRoot":"","sources":["../../../src/nanomind-core/verification/ast-validator.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-scanner.d.ts","sourceRoot":"","sources":["../../src/scanner/external-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAmB,cAAc,EAAmB,MAAM,SAAS,CAAC;AA0EpG,qBAAa,eAAe;IACpB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;
|
|
1
|
+
{"version":3,"file":"external-scanner.d.ts","sourceRoot":"","sources":["../../src/scanner/external-scanner.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,EAAE,kBAAkB,EAAmB,cAAc,EAAmB,MAAM,SAAS,CAAC;AA0EpG,qBAAa,eAAe;IACpB,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,cAAc,GAAG,OAAO,CAAC,kBAAkB,CAAC;YAiEnE,SAAS;IAmBvB,OAAO,CAAC,UAAU;YAyBJ,SAAS;IAwHvB,OAAO,CAAC,SAAS;CA+ClB"}
|
|
@@ -119,43 +119,50 @@ class ExternalScanner {
|
|
|
119
119
|
// Extract hostname for private IP warning
|
|
120
120
|
const hostname = target.replace(/^https?:\/\//, '').split(/[:/]/)[0];
|
|
121
121
|
if (isPrivateOrReserved(hostname)) {
|
|
122
|
-
// Log warning but allow
|
|
122
|
+
// Log warning but allow -- scanning local services is a core use case for security testing
|
|
123
123
|
console.warn(`[HMA] Warning: scanning private/reserved address "${hostname}". Ensure you have authorization.`);
|
|
124
124
|
}
|
|
125
125
|
const startTime = Date.now();
|
|
126
126
|
const timeout = options?.timeout ?? 5000;
|
|
127
127
|
const ports = options?.ports ?? DEFAULT_PORTS;
|
|
128
128
|
const skipPortScan = options?.skipPortScan ?? false;
|
|
129
|
-
//
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
findings
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
129
|
+
// Global scan timeout: per-port timeout * port count, capped at 60s
|
|
130
|
+
const globalTimeout = Math.min(timeout * ports.length, 60000);
|
|
131
|
+
// Race the scan against a global timeout
|
|
132
|
+
const scanWork = async () => {
|
|
133
|
+
// Port scan
|
|
134
|
+
let openPorts = [];
|
|
135
|
+
if (!skipPortScan) {
|
|
136
|
+
openPorts = await this.scanPorts(target, ports, timeout);
|
|
137
|
+
}
|
|
138
|
+
// Run security checks on open ports
|
|
139
|
+
const findings = [];
|
|
140
|
+
const insecure = options?.insecure === true;
|
|
141
|
+
for (const port of openPorts) {
|
|
142
|
+
const portFindings = await this.checkPort(target, port, timeout, insecure);
|
|
143
|
+
findings.push(...portFindings);
|
|
144
|
+
}
|
|
145
|
+
// Calculate score
|
|
146
|
+
let score = 100;
|
|
147
|
+
for (const finding of findings) {
|
|
148
|
+
score -= SEVERITY_WEIGHTS[finding.severity];
|
|
149
|
+
}
|
|
150
|
+
score = Math.max(0, score);
|
|
151
|
+
const grade = calculateGrade(score);
|
|
152
|
+
const duration = Date.now() - startTime;
|
|
153
|
+
return {
|
|
154
|
+
id: generateId(),
|
|
155
|
+
target,
|
|
156
|
+
score,
|
|
157
|
+
grade,
|
|
158
|
+
findings,
|
|
159
|
+
duration,
|
|
160
|
+
timestamp: new Date(),
|
|
161
|
+
openPorts,
|
|
162
|
+
};
|
|
158
163
|
};
|
|
164
|
+
const timeoutPromise = new Promise((_, reject) => setTimeout(() => reject(new Error(`Scan timed out after ${globalTimeout}ms. Try fewer ports or increase -t timeout.`)), globalTimeout));
|
|
165
|
+
return Promise.race([scanWork(), timeoutPromise]);
|
|
159
166
|
}
|
|
160
167
|
async scanPorts(target, ports, timeout) {
|
|
161
168
|
const openPorts = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"external-scanner.js","sourceRoot":"","sources":["../../src/scanner/external-scanner.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"external-scanner.js","sourceRoot":"","sources":["../../src/scanner/external-scanner.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEH,yCAA2B;AAC3B,2CAA6B;AAC7B,6CAA+B;AAG/B,wBAAwB;AACxB,MAAM,aAAa,GAAG,CAAC,EAAE,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;AAExF,6BAA6B;AAC7B,MAAM,YAAY,GAAG;IACnB,wBAAwB;IACxB,WAAW;IACX,mBAAmB;IACnB,mBAAmB;IACnB,cAAc;IACd,OAAO;CACR,CAAC;AAEF,8BAA8B;AAC9B,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,aAAa,CAAC,CAAC;AACrE,MAAM,eAAe,GAAG,CAAC,QAAQ,EAAE,OAAO,EAAE,YAAY,EAAE,WAAW,CAAC,CAAC;AAEvE,kBAAkB;AAClB,MAAM,eAAe,GAAG,CAAC,YAAY,EAAE,oBAAoB,CAAC,CAAC;AAE7D,mBAAmB;AACnB,MAAM,gBAAgB,GAAG;IACvB,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,mCAAmC,EAAE;IACnE,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,yBAAyB,EAAE;IACtD,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE;IAClD,EAAE,IAAI,EAAE,KAAK,EAAE,OAAO,EAAE,kBAAkB,EAAE;IAC5C,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,qBAAqB,EAAE;IAClD,EAAE,IAAI,EAAE,QAAQ,EAAE,OAAO,EAAE,4CAA4C,EAAE;CAC1E,CAAC;AAEF,+BAA+B;AAC/B,MAAM,gBAAgB,GAAoC;IACxD,QAAQ,EAAE,EAAE;IACZ,IAAI,EAAE,EAAE;IACR,MAAM,EAAE,EAAE;IACV,GAAG,EAAE,CAAC;CACP,CAAC;AAEF,SAAS,UAAU;IACjB,OAAO,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;AACrD,CAAC;AAED,SAAS,cAAc,CAAC,KAAa;IACnC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,QAAQ,CAAC;IACjC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,MAAM,CAAC;IAC/B,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,UAAU,CAAC;IACnC,IAAI,KAAK,IAAI,EAAE;QAAE,OAAO,WAAW,CAAC;IACpC,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAED,SAAS,mBAAmB,CAAC,QAAgB;IAC3C,IAAI,QAAQ,KAAK,iBAAiB,IAAI,QAAQ,KAAK,0BAA0B;QAAE,OAAO,IAAI,CAAC;IAC3F,IAAI,GAAG,CAAC,MAAM,CAAC,QAAQ,CAAC,EAAE,CAAC;QACzB,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC9C,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,EAAE;YAAE,OAAO,IAAI,CAAC;QACjC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,EAAE;YAAE,OAAO,IAAI,CAAC;QACtE,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,GAAG;YAAE,OAAO,IAAI,CAAC;QACtD,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC;YAAE,OAAO,IAAI,CAAC;IAClC,CAAC;IACD,OAAO,KAAK,CAAC;AACf,CAAC;AAED,SAAS,cAAc,CAAC,MAAc;IACpC,+CAA+C;IAC/C,IAAI,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC;QAC3B,MAAM,QAAQ,GAAG,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACtD,IAAI,QAAQ,KAAK,MAAM,IAAI,QAAQ,KAAK,OAAO,EAAE,CAAC;YAChD,MAAM,IAAI,KAAK,CAAC,yBAAyB,QAAQ,qCAAqC,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;AACH,CAAC;AAED,MAAa,eAAe;IAC1B,KAAK,CAAC,IAAI,CAAC,MAAc,EAAE,OAAwB;QACjD,qDAAqD;QACrD,cAAc,CAAC,MAAM,CAAC,CAAC;QAEvB,0CAA0C;QAC1C,MAAM,QAAQ,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,EAAE,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;QACrE,IAAI,mBAAmB,CAAC,QAAQ,CAAC,EAAE,CAAC;YAClC,2FAA2F;YAC3F,OAAO,CAAC,IAAI,CAAC,qDAAqD,QAAQ,mCAAmC,CAAC,CAAC;QACjH,CAAC;QAED,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QAC7B,MAAM,OAAO,GAAG,OAAO,EAAE,OAAO,IAAI,IAAI,CAAC;QACzC,MAAM,KAAK,GAAG,OAAO,EAAE,KAAK,IAAI,aAAa,CAAC;QAC9C,MAAM,YAAY,GAAG,OAAO,EAAE,YAAY,IAAI,KAAK,CAAC;QAEpD,oEAAoE;QACpE,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,OAAO,GAAG,KAAK,CAAC,MAAM,EAAE,KAAM,CAAC,CAAC;QAE/D,yCAAyC;QACzC,MAAM,QAAQ,GAAG,KAAK,IAAiC,EAAE;YACvD,YAAY;YACZ,IAAI,SAAS,GAAa,EAAE,CAAC;YAC7B,IAAI,CAAC,YAAY,EAAE,CAAC;gBAClB,SAAS,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,KAAK,EAAE,OAAO,CAAC,CAAC;YAC3D,CAAC;YAED,oCAAoC;YACpC,MAAM,QAAQ,GAAsB,EAAE,CAAC;YAEvC,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,KAAK,IAAI,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;gBAC7B,MAAM,YAAY,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;gBAC3E,QAAQ,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAC;YACjC,CAAC;YAED,kBAAkB;YAClB,IAAI,KAAK,GAAG,GAAG,CAAC;YAChB,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;gBAC/B,KAAK,IAAI,gBAAgB,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;YAC9C,CAAC;YACD,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;YAE3B,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;YACpC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,SAAS,CAAC;YAExC,OAAO;gBACL,EAAE,EAAE,UAAU,EAAE;gBAChB,MAAM;gBACN,KAAK;gBACL,KAAK;gBACL,QAAQ;gBACR,QAAQ;gBACR,SAAS,EAAE,IAAI,IAAI,EAAE;gBACrB,SAAS;aACV,CAAC;QACJ,CAAC,CAAC;QAEF,MAAM,cAAc,GAAG,IAAI,OAAO,CAAQ,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE,CACtD,UAAU,CAAC,GAAG,EAAE,CAAC,MAAM,CAAC,IAAI,KAAK,CAAC,wBAAwB,aAAa,6CAA6C,CAAC,CAAC,EAAE,aAAa,CAAC,CACvI,CAAC;QAEF,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IACpD,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,MAAc,EACd,KAAe,EACf,OAAe;QAEf,MAAM,SAAS,GAAa,EAAE,CAAC;QAE/B,MAAM,OAAO,CAAC,GAAG,CACf,KAAK,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;YACvB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,UAAU,CAAC,MAAM,EAAE,IAAI,EAAE,OAAO,CAAC,CAAC;YAC5D,IAAI,MAAM,EAAE,CAAC;gBACX,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,CAAC;QACH,CAAC,CAAC,CACH,CAAC;QAEF,OAAO,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;IACzC,CAAC;IAEO,UAAU,CAAC,IAAY,EAAE,IAAY,EAAE,OAAe;QAC5D,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,MAAM,GAAG,IAAI,GAAG,CAAC,MAAM,EAAE,CAAC;YAEhC,MAAM,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;YAE3B,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACxB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACxB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;gBACtB,MAAM,CAAC,OAAO,EAAE,CAAC;gBACjB,OAAO,CAAC,KAAK,CAAC,CAAC;YACjB,CAAC,CAAC,CAAC;YAEH,MAAM,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC7B,CAAC,CAAC,CAAC;IACL,CAAC;IAEO,KAAK,CAAC,SAAS,CACrB,MAAc,EACd,IAAY,EACZ,OAAe,EACf,QAAQ,GAAG,KAAK;QAEhB,MAAM,QAAQ,GAAsB,EAAE,CAAC;QACvC,MAAM,QAAQ,GAAG,IAAI,KAAK,GAAG,CAAC;QAC9B,MAAM,OAAO,GAAG,OAAO,QAAQ,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,MAAM,MAAM,IAAI,IAAI,EAAE,CAAC;QAEjE,0BAA0B;QAC1B,KAAK,MAAM,IAAI,IAAI,aAAa,EAAE,CAAC;YACjC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACvE,IAAI,MAAM,IAAI,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,mBAAmB,CAAC,EAAE,CAAC;gBAChE,QAAQ,CAAC,IAAI,CAAC;oBACZ,EAAE,EAAE,UAAU,EAAE;oBAChB,OAAO,EAAE,SAAS;oBAClB,QAAQ,EAAE,UAAU;oBACpB,KAAK,EAAE,0BAA0B;oBACjC,WAAW,EAAE,4DAA4D;oBACzE,IAAI;oBACJ,IAAI;oBACJ,QAAQ,EAAE,iBAAiB,MAAM,CAAC,WAAW,EAAE;oBAC/C,MAAM,EAAE,0EAA0E;oBAClF,GAAG,EAAE,uDAAuD;iBAC7D,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;QACH,CAAC;QAED,4BAA4B;QAC5B,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACvE,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;gBACtE,QAAQ,CAAC,IAAI,CAAC;oBACZ,EAAE,EAAE,UAAU,EAAE;oBAChB,OAAO,EAAE,WAAW;oBACpB,QAAQ,EAAE,UAAU;oBACpB,KAAK,EAAE,4BAA4B;oBACnC,WAAW,EAAE,0CAA0C;oBACvD,IAAI;oBACJ,IAAI;oBACJ,QAAQ,EAAE,0BAA0B,IAAI,EAAE;oBAC1C,MAAM,EAAE,8DAA8D;oBACtE,GAAG,EAAE,kEAAkE;iBACxE,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;QACH,CAAC;QAED,qBAAqB;QACrB,KAAK,MAAM,IAAI,IAAI,YAAY,EAAE,CAAC;YAChC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACvE,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnD,qCAAqC;gBACrC,IACE,MAAM,CAAC,WAAW,EAAE,QAAQ,CAAC,kBAAkB,CAAC;oBAChD,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,UAAU,CAAC,GAAG,CAAC,EAClC,CAAC;oBACD,QAAQ,CAAC,IAAI,CAAC;wBACZ,EAAE,EAAE,UAAU,EAAE;wBAChB,OAAO,EAAE,gBAAgB;wBACzB,QAAQ,EAAE,UAAU;wBACpB,KAAK,EAAE,4BAA4B;wBACnC,WAAW,EAAE,sBAAsB,IAAI,yBAAyB;wBAChE,IAAI;wBACJ,IAAI;wBACJ,QAAQ,EAAE,eAAe,IAAI,EAAE;wBAC/B,MAAM,EAAE,iFAAiF;wBACzF,GAAG,EAAE,uEAAuE;qBAC7E,CAAC,CAAC;gBACL,CAAC;YACH,CAAC;QACH,CAAC;QAED,kBAAkB;QAClB,KAAK,MAAM,IAAI,IAAI,eAAe,EAAE,CAAC;YACnC,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,IAAI,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;YACvE,IAAI,MAAM,IAAI,MAAM,CAAC,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,EAAE,CAAC;gBACnD,QAAQ,CAAC,IAAI,CAAC;oBACZ,EAAE,EAAE,UAAU,EAAE;oBAChB,OAAO,EAAE,mBAAmB;oBAC5B,QAAQ,EAAE,MAAM;oBAChB,KAAK,EAAE,uCAAuC;oBAC9C,WAAW,EAAE,uDAAuD;oBACpE,IAAI;oBACJ,IAAI;oBACJ,QAAQ,EAAE,sBAAsB,IAAI,EAAE;oBACtC,MAAM,EAAE,mFAAmF;oBAC3F,GAAG,EAAE,uEAAuE;iBAC7E,CAAC,CAAC;gBACH,MAAM;YACR,CAAC;QACH,CAAC;QAED,4CAA4C;QAC5C,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,GAAG,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC1E,IAAI,UAAU,IAAI,UAAU,CAAC,IAAI,EAAE,CAAC;YAClC,KAAK,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,gBAAgB,EAAE,CAAC;gBACjD,IAAI,OAAO,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;oBAClC,QAAQ,CAAC,IAAI,CAAC;wBACZ,EAAE,EAAE,UAAU,EAAE;wBAChB,OAAO,EAAE,iBAAiB;wBAC1B,QAAQ,EAAE,UAAU;wBACpB,KAAK,EAAE,GAAG,IAAI,kBAAkB;wBAChC,WAAW,EAAE,GAAG,IAAI,iCAAiC;wBACrD,IAAI;wBACJ,IAAI,EAAE,GAAG;wBACT,QAAQ,EAAE,SAAS,IAAI,8BAA8B;wBACrD,MAAM,EAAE,qEAAqE;wBAC7E,GAAG,EAAE,4DAA4D;qBAClE,CAAC,CAAC;oBACH,MAAM;gBACR,CAAC;YACH,CAAC;QACH,CAAC;QAED,OAAO,QAAQ,CAAC;IAClB,CAAC;IAEO,SAAS,CACf,GAAW,EACX,OAAe,EACf,QAAQ,GAAG,KAAK;QAEhB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC7B,MAAM,OAAO,GAAG,GAAG,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;YAC3C,MAAM,MAAM,GAAG,OAAO,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC;YAEtC,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CACpB,GAAG,EACH;gBACE,OAAO;gBACP,OAAO,EAAE;oBACP,YAAY,EAAE,yBAAyB;oBACvC,4BAA4B,EAAE,MAAM;iBACrC;gBACD,kBAAkB,EAAE,CAAC,QAAQ;aAC9B,EACD,CAAC,GAAG,EAAE,EAAE;gBACN,IAAI,IAAI,GAAG,EAAE,CAAC;gBACd,GAAG,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,EAAE;oBACvB,IAAI,IAAI,KAAK,CAAC;oBACd,kBAAkB;oBAClB,IAAI,IAAI,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;wBACxB,GAAG,CAAC,OAAO,EAAE,CAAC;oBAChB,CAAC;gBACH,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE;oBACjB,OAAO,CAAC;wBACN,MAAM,EAAE,GAAG,CAAC,UAAU,IAAI,CAAC;wBAC3B,WAAW,EAAE,GAAG,CAAC,OAAO,CAAC,cAAc,CAAC;wBACxC,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC;qBAC/B,CAAC,CAAC;gBACL,CAAC,CAAC,CAAC;gBACH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;YACvC,CAAC,CACF,CAAC;YAEF,GAAG,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;gBACrB,GAAG,CAAC,OAAO,EAAE,CAAC;gBACd,OAAO,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC,CAAC,CAAC;YAEH,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC;QACvC,CAAC,CAAC,CAAC;IACL,CAAC;CACF;AArRD,0CAqRC"}
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
*
|
|
4
4
|
* Behavioral simulation that observes what skills actually DO.
|
|
5
5
|
* Three layers: NanoMind semantic (8ms) -> targeted probes (3s) -> full simulation (30s).
|
|
6
|
-
* Target: < 1% false positive rate vs industry
|
|
6
|
+
* Target: < 1% false positive rate vs industry 0.12% scanner agreement (theweatherreport.ai).
|
|
7
7
|
*/
|
|
8
8
|
export { SimulationEngine, parseSkillProfile } from './engine.js';
|
|
9
9
|
export { MockToolEnvironment } from './mock-tools.js';
|
package/dist/simulation/index.js
CHANGED
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
*
|
|
5
5
|
* Behavioral simulation that observes what skills actually DO.
|
|
6
6
|
* Three layers: NanoMind semantic (8ms) -> targeted probes (3s) -> full simulation (30s).
|
|
7
|
-
* Target: < 1% false positive rate vs industry
|
|
7
|
+
* Target: < 1% false positive rate vs industry 0.12% scanner agreement (theweatherreport.ai).
|
|
8
8
|
*/
|
|
9
9
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
10
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;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hackmyagent",
|
|
3
|
-
"version": "0.12.
|
|
3
|
+
"version": "0.12.1",
|
|
4
4
|
"description": "Find it. Break it. Fix it. The hacker's toolkit for AI agents.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"hackmyagent": "dist/cli.js"
|
|
@@ -9,6 +9,7 @@
|
|
|
9
9
|
"types": "dist/index.d.ts",
|
|
10
10
|
"exports": {
|
|
11
11
|
".": "./dist/index.js",
|
|
12
|
+
"./nanomind-core": "./dist/nanomind-core/index.js",
|
|
12
13
|
"./plugins": "./dist/plugins/core.js",
|
|
13
14
|
"./semantic": "./dist/semantic/index.js",
|
|
14
15
|
"./arp": "./dist/arp/index.js",
|