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.
- package/README.md +26 -3
- package/dist/attack-engine/feedback-loop.d.ts +36 -0
- package/dist/attack-engine/feedback-loop.d.ts.map +1 -0
- package/dist/attack-engine/feedback-loop.js +261 -0
- package/dist/attack-engine/feedback-loop.js.map +1 -0
- package/dist/attack-engine/index.d.ts +13 -0
- package/dist/attack-engine/index.d.ts.map +1 -0
- package/dist/attack-engine/index.js +21 -0
- package/dist/attack-engine/index.js.map +1 -0
- package/dist/attack-engine/payload-generator.d.ts +21 -0
- package/dist/attack-engine/payload-generator.d.ts.map +1 -0
- package/dist/attack-engine/payload-generator.js +210 -0
- package/dist/attack-engine/payload-generator.js.map +1 -0
- package/dist/attack-engine/target-reader.d.ts +15 -0
- package/dist/attack-engine/target-reader.d.ts.map +1 -0
- package/dist/attack-engine/target-reader.js +152 -0
- package/dist/attack-engine/target-reader.js.map +1 -0
- package/dist/attack-engine/training-pipeline.d.ts +57 -0
- package/dist/attack-engine/training-pipeline.d.ts.map +1 -0
- package/dist/attack-engine/training-pipeline.js +146 -0
- package/dist/attack-engine/training-pipeline.js.map +1 -0
- package/dist/attack-engine/types.d.ts +133 -0
- package/dist/attack-engine/types.d.ts.map +1 -0
- package/dist/attack-engine/types.js +22 -0
- package/dist/attack-engine/types.js.map +1 -0
- package/dist/cli.js +248 -15
- package/dist/cli.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +9 -1
- package/dist/index.js.map +1 -1
- package/dist/nanomind-core/analyzers/capability-analyzer.d.ts +40 -0
- package/dist/nanomind-core/analyzers/capability-analyzer.d.ts.map +1 -0
- package/dist/nanomind-core/analyzers/capability-analyzer.js +310 -0
- package/dist/nanomind-core/analyzers/capability-analyzer.js.map +1 -0
- package/dist/nanomind-core/analyzers/code-analyzer.d.ts +21 -0
- package/dist/nanomind-core/analyzers/code-analyzer.d.ts.map +1 -0
- package/dist/nanomind-core/analyzers/code-analyzer.js +350 -0
- package/dist/nanomind-core/analyzers/code-analyzer.js.map +1 -0
- package/dist/nanomind-core/analyzers/credential-analyzer.d.ts +20 -0
- package/dist/nanomind-core/analyzers/credential-analyzer.d.ts.map +1 -0
- package/dist/nanomind-core/analyzers/credential-analyzer.js +317 -0
- package/dist/nanomind-core/analyzers/credential-analyzer.js.map +1 -0
- package/dist/nanomind-core/analyzers/governance-analyzer.d.ts +22 -0
- package/dist/nanomind-core/analyzers/governance-analyzer.d.ts.map +1 -0
- package/dist/nanomind-core/analyzers/governance-analyzer.js +393 -0
- package/dist/nanomind-core/analyzers/governance-analyzer.js.map +1 -0
- package/dist/nanomind-core/analyzers/prompt-analyzer.d.ts +22 -0
- package/dist/nanomind-core/analyzers/prompt-analyzer.d.ts.map +1 -0
- package/dist/nanomind-core/analyzers/prompt-analyzer.js +486 -0
- package/dist/nanomind-core/analyzers/prompt-analyzer.js.map +1 -0
- package/dist/nanomind-core/analyzers/scope-analyzer.d.ts +20 -0
- package/dist/nanomind-core/analyzers/scope-analyzer.d.ts.map +1 -0
- package/dist/nanomind-core/analyzers/scope-analyzer.js +326 -0
- package/dist/nanomind-core/analyzers/scope-analyzer.js.map +1 -0
- package/dist/nanomind-core/compiler/semantic-compiler.d.ts +41 -0
- package/dist/nanomind-core/compiler/semantic-compiler.d.ts.map +1 -0
- package/dist/nanomind-core/compiler/semantic-compiler.js +490 -0
- package/dist/nanomind-core/compiler/semantic-compiler.js.map +1 -0
- package/dist/nanomind-core/index.d.ts +30 -0
- package/dist/nanomind-core/index.d.ts.map +1 -0
- package/dist/nanomind-core/index.js +45 -0
- package/dist/nanomind-core/index.js.map +1 -0
- package/dist/nanomind-core/ingestion/artifact-parser.d.ts +48 -0
- package/dist/nanomind-core/ingestion/artifact-parser.d.ts.map +1 -0
- package/dist/nanomind-core/ingestion/artifact-parser.js +203 -0
- package/dist/nanomind-core/ingestion/artifact-parser.js.map +1 -0
- package/dist/nanomind-core/ingestion/input-sanitizer.d.ts +49 -0
- package/dist/nanomind-core/ingestion/input-sanitizer.d.ts.map +1 -0
- package/dist/nanomind-core/ingestion/input-sanitizer.js +80 -0
- package/dist/nanomind-core/ingestion/input-sanitizer.js.map +1 -0
- package/dist/nanomind-core/scanner-bridge.d.ts +49 -0
- package/dist/nanomind-core/scanner-bridge.d.ts.map +1 -0
- package/dist/nanomind-core/scanner-bridge.js +317 -0
- package/dist/nanomind-core/scanner-bridge.js.map +1 -0
- package/dist/nanomind-core/security/defense-in-depth.d.ts +99 -0
- package/dist/nanomind-core/security/defense-in-depth.d.ts.map +1 -0
- package/dist/nanomind-core/security/defense-in-depth.js +206 -0
- package/dist/nanomind-core/security/defense-in-depth.js.map +1 -0
- package/dist/nanomind-core/security/integrity-verifier.d.ts +132 -0
- package/dist/nanomind-core/security/integrity-verifier.d.ts.map +1 -0
- package/dist/nanomind-core/security/integrity-verifier.js +437 -0
- package/dist/nanomind-core/security/integrity-verifier.js.map +1 -0
- package/dist/nanomind-core/types.d.ts +125 -0
- package/dist/nanomind-core/types.d.ts.map +1 -0
- package/dist/nanomind-core/types.js +22 -0
- package/dist/nanomind-core/types.js.map +1 -0
- package/dist/output/asff.d.ts.map +1 -1
- package/dist/output/asff.js +2 -1
- package/dist/output/asff.js.map +1 -1
- package/dist/semantic/index.d.ts +4 -0
- package/dist/semantic/index.d.ts.map +1 -1
- package/dist/semantic/index.js +13 -1
- package/dist/semantic/index.js.map +1 -1
- package/dist/semantic/nanomind-analyzer.d.ts +77 -0
- package/dist/semantic/nanomind-analyzer.d.ts.map +1 -0
- package/dist/semantic/nanomind-analyzer.js +165 -0
- package/dist/semantic/nanomind-analyzer.js.map +1 -0
- package/dist/semantic/nanomind-enhancer.d.ts +50 -0
- package/dist/semantic/nanomind-enhancer.d.ts.map +1 -0
- package/dist/semantic/nanomind-enhancer.js +203 -0
- package/dist/semantic/nanomind-enhancer.js.map +1 -0
- package/dist/simulation/engine.d.ts +69 -0
- package/dist/simulation/engine.d.ts.map +1 -0
- package/dist/simulation/engine.js +297 -0
- package/dist/simulation/engine.js.map +1 -0
- package/dist/simulation/index.d.ts +15 -0
- package/dist/simulation/index.d.ts.map +1 -0
- package/dist/simulation/index.js +31 -0
- package/dist/simulation/index.js.map +1 -0
- package/dist/simulation/llm-executor.d.ts +58 -0
- package/dist/simulation/llm-executor.d.ts.map +1 -0
- package/dist/simulation/llm-executor.js +297 -0
- package/dist/simulation/llm-executor.js.map +1 -0
- package/dist/simulation/mock-tools.d.ts +35 -0
- package/dist/simulation/mock-tools.d.ts.map +1 -0
- package/dist/simulation/mock-tools.js +181 -0
- package/dist/simulation/mock-tools.js.map +1 -0
- package/dist/simulation/probes.d.ts +17 -0
- package/dist/simulation/probes.d.ts.map +1 -0
- package/dist/simulation/probes.js +295 -0
- package/dist/simulation/probes.js.map +1 -0
- package/dist/simulation/types.d.ts +79 -0
- package/dist/simulation/types.d.ts.map +1 -0
- package/dist/simulation/types.js +25 -0
- package/dist/simulation/types.js.map +1 -0
- package/package.json +1 -1
|
@@ -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":"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"}
|
|
@@ -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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asff.d.ts","sourceRoot":"","sources":["../../src/output/asff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;
|
|
1
|
+
{"version":3,"file":"asff.d.ts","sourceRoot":"","sources":["../../src/output/asff.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;GAWG;AAIH,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAiDD;;GAEG;AACH,wBAAgB,MAAM,CACpB,QAAQ,EAAE,eAAe,EAAE,EAC3B,OAAO,GAAE;IACP,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;CACf,GACL,MAAM,CAuER;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,EAAE,CASpD"}
|
package/dist/output/asff.js
CHANGED
|
@@ -14,6 +14,7 @@
|
|
|
14
14
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
15
|
exports.toASSF = toASSF;
|
|
16
16
|
exports.batchASSF = batchASSF;
|
|
17
|
+
const index_js_1 = require("../index.js");
|
|
17
18
|
const SEVERITY_MAP = {
|
|
18
19
|
critical: 'CRITICAL',
|
|
19
20
|
high: 'HIGH',
|
|
@@ -72,7 +73,7 @@ function toASSF(findings, options = {}) {
|
|
|
72
73
|
ProductFields: {
|
|
73
74
|
'opena2a/checkId': f.checkId,
|
|
74
75
|
'opena2a/scanner': 'hackmyagent',
|
|
75
|
-
'opena2a/scannerVersion':
|
|
76
|
+
'opena2a/scannerVersion': index_js_1.VERSION,
|
|
76
77
|
},
|
|
77
78
|
RecordState: 'ACTIVE',
|
|
78
79
|
Workflow: { Status: 'NEW' },
|
package/dist/output/asff.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"asff.js","sourceRoot":"","sources":["../../src/output/asff.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;
|
|
1
|
+
{"version":3,"file":"asff.js","sourceRoot":"","sources":["../../src/output/asff.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;GAWG;;AAmEH,wBA8EC;AAKD,8BASC;AA7JD,0CAAsC;AA2CtC,MAAM,YAAY,GAA2B;IAC3C,QAAQ,EAAE,UAAU;IACpB,IAAI,EAAE,MAAM;IACZ,MAAM,EAAE,QAAQ;IAChB,GAAG,EAAE,KAAK;IACV,aAAa,EAAE,eAAe;IAC9B,IAAI,EAAE,eAAe;CACtB,CAAC;AAEF,MAAM,iBAAiB,GAA2B;IAChD,WAAW,EAAE,uDAAuD;IACpE,GAAG,EAAE,qEAAqE;IAC1E,OAAO,EAAE,uDAAuD;IAChE,SAAS,EAAE,uDAAuD;IAClE,YAAY,EAAE,uDAAuD;IACrE,UAAU,EAAE,qEAAqE;IACjF,MAAM,EAAE,+DAA+D;CACxE,CAAC;AAEF;;GAEG;AACH,SAAgB,MAAM,CACpB,QAA2B,EAC3B,UAII,EAAE;IAEN,MAAM,SAAS,GAAG,OAAO,CAAC,YAAY,IAAI,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,cAAc,CAAC;IACvF,MAAM,MAAM,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,WAAW,CAAC;IAC1E,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,CAAC;IACrD,MAAM,GAAG,GAAG,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC;IAErC,MAAM,UAAU,GAAG,uBAAuB,MAAM,IAAI,SAAS,YAAY,SAAS,UAAU,CAAC;IAE7F,uDAAuD;IACvD,MAAM,MAAM,GAAG,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;IAE3D,MAAM,YAAY,GAAiB,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE;QAChD,MAAM,QAAQ,GAAG,YAAY,CAAC,CAAC,CAAC,QAAQ,CAAC,IAAI,eAAe,CAAC;QAC7D,MAAM,QAAQ,GAAG,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC;QACrE,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC;YACvC,CAAC,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;YAC/B,CAAC,CAAC,CAAC,mCAAmC,CAAC,CAAC;QAE1C,MAAM,KAAK,GAAG,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC;QAClC,MAAM,WAAW,GAAG,CAAC,CAAC,CAAC,OAAO,IAAI,CAAC,CAAC,IAAI,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;QAEtE,MAAM,OAAO,GAAe;YAC1B,aAAa,EAAE,YAAY;YAC3B,EAAE,EAAE,eAAe,CAAC,CAAC,OAAO,IAAI,IAAI,CAAC,GAAG,EAAE,EAAE;YAC5C,UAAU,EAAE,UAAU;YACtB,WAAW,EAAE,eAAe,CAAC,CAAC,OAAO,EAAE;YACvC,YAAY,EAAE,SAAS;YACvB,KAAK,EAAE,KAAK;YACZ,SAAS,EAAE,GAAG;YACd,SAAS,EAAE,GAAG;YACd,QAAQ,EAAE;gBACR,KAAK,EAAE,QAAQ;gBACf,QAAQ,EAAE,CAAC,CAAC,QAAQ;aACrB;YACD,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;YAC1B,WAAW,EAAE,WAAW;YACxB,SAAS,EAAE,CAAC;oBACV,IAAI,EAAE,OAAO;oBACb,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,SAAS;iBACxB,CAAC;YACF,aAAa,EAAE;gBACb,iBAAiB,EAAE,CAAC,CAAC,OAAO;gBAC5B,iBAAiB,EAAE,aAAa;gBAChC,wBAAwB,EAAE,kBAAO;aAClC;YACD,WAAW,EAAE,QAAQ;YACrB,QAAQ,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE;SAC5B,CAAC;QAEF,IAAI,CAAC,CAAC,cAAc,EAAE,CAAC;YACrB,OAAO,CAAC,WAAW,GAAG;gBACpB,cAAc,EAAE;oBACd,IAAI,EAAE,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC;oBACpC,GAAG,EAAE,uCAAuC,CAAC,CAAC,OAAO,CAAC,WAAW,EAAE,EAAE;iBACtE;aACF,CAAC;QACJ,CAAC;QAED,IAAI,CAAC,CAAC,IAAI,EAAE,CAAC;YACX,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,OAAO,GAAG;gBAC7B,KAAK,EAAE;oBACL,QAAQ,EAAE,CAAC,CAAC,IAAI;oBAChB,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;iBAClD;aACF,CAAC;QACJ,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC,CAAC,CAAC;IAEH,OAAO,IAAI,CAAC,SAAS,CAAC,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC/C,CAAC;AAED;;GAEG;AACH,SAAgB,SAAS,CAAC,QAAgB;IACxC,MAAM,QAAQ,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IACtC,MAAM,OAAO,GAAa,EAAE,CAAC;IAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;QAC9C,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
|
package/dist/semantic/index.d.ts
CHANGED
|
@@ -12,6 +12,10 @@ 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';
|
|
17
|
+
export { isDaemonAvailable, analyzeSkillIntent, analyzeSoulCompleteness, analyzeMCPScope, analyzePromptIntent, explainFinding, } from './nanomind-analyzer';
|
|
18
|
+
export type { NanoMindInferRequest, NanoMindInferResponse, SemanticFinding as NanoMindFinding, } from './nanomind-analyzer';
|
|
15
19
|
export { buildDeepScanResult } from './deep-scan';
|
|
16
20
|
export type { SemanticFinding, SemanticSeverity, SemanticCategory, AnalysisContext, AnalysisFile, FileType, ExistingFinding, LLMAnalysisOptions, CostEstimate, DeepScanResult, DeepAnalysisFile, McpServerConfig, McpConfigFile, ClaudeSettings, } from './types';
|
|
17
21
|
//# sourceMappingURL=index.d.ts.map
|
|
@@ -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,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"}
|
package/dist/semantic/index.js
CHANGED
|
@@ -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.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,6 +33,18 @@ 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
|
+
// 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
|
|
41
|
+
var nanomind_analyzer_1 = require("./nanomind-analyzer");
|
|
42
|
+
Object.defineProperty(exports, "isDaemonAvailable", { enumerable: true, get: function () { return nanomind_analyzer_1.isDaemonAvailable; } });
|
|
43
|
+
Object.defineProperty(exports, "analyzeSkillIntent", { enumerable: true, get: function () { return nanomind_analyzer_1.analyzeSkillIntent; } });
|
|
44
|
+
Object.defineProperty(exports, "analyzeSoulCompleteness", { enumerable: true, get: function () { return nanomind_analyzer_1.analyzeSoulCompleteness; } });
|
|
45
|
+
Object.defineProperty(exports, "analyzeMCPScope", { enumerable: true, get: function () { return nanomind_analyzer_1.analyzeMCPScope; } });
|
|
46
|
+
Object.defineProperty(exports, "analyzePromptIntent", { enumerable: true, get: function () { return nanomind_analyzer_1.analyzePromptIntent; } });
|
|
47
|
+
Object.defineProperty(exports, "explainFinding", { enumerable: true, get: function () { return nanomind_analyzer_1.explainFinding; } });
|
|
36
48
|
// Deep scan builder (for MCP server)
|
|
37
49
|
var deep_scan_1 = require("./deep-scan");
|
|
38
50
|
Object.defineProperty(exports, "buildDeepScanResult", { enumerable: true, get: function () { return deep_scan_1.buildDeepScanResult; } });
|
|
@@ -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,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,77 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* NanoMind Semantic Analyzer
|
|
3
|
+
*
|
|
4
|
+
* Uses the local NanoMind daemon (localhost:47200) for semantic analysis
|
|
5
|
+
* of skills, SOUL.md, MCP tools, and system prompts.
|
|
6
|
+
*
|
|
7
|
+
* Unlike the LLM analyzer (--deep flag, cloud API, costs money),
|
|
8
|
+
* the NanoMind analyzer (--semantic flag) runs 100% locally with
|
|
9
|
+
* zero cost per inference and zero data leaving the machine.
|
|
10
|
+
*
|
|
11
|
+
* Two-layer architecture:
|
|
12
|
+
* 1. Static checks run first (fast, deterministic, 183 rules)
|
|
13
|
+
* 2. NanoMind activates on ambiguous/NLP targets (semantic intent classification)
|
|
14
|
+
*/
|
|
15
|
+
export interface NanoMindInferRequest {
|
|
16
|
+
intent: string;
|
|
17
|
+
input: string;
|
|
18
|
+
context?: {
|
|
19
|
+
agentId?: string;
|
|
20
|
+
driftScore?: number;
|
|
21
|
+
declaredPurpose?: string;
|
|
22
|
+
};
|
|
23
|
+
priority?: 'high' | 'medium' | 'low';
|
|
24
|
+
}
|
|
25
|
+
export interface NanoMindInferResponse {
|
|
26
|
+
intent: string;
|
|
27
|
+
result: string;
|
|
28
|
+
confidence: number;
|
|
29
|
+
attackClass?: string;
|
|
30
|
+
evidence?: string;
|
|
31
|
+
remediation?: string;
|
|
32
|
+
latencyMs: number;
|
|
33
|
+
modelVersion: string;
|
|
34
|
+
}
|
|
35
|
+
export interface SemanticFinding {
|
|
36
|
+
checkId: string;
|
|
37
|
+
severity: 'critical' | 'high' | 'medium' | 'low' | 'info';
|
|
38
|
+
title: string;
|
|
39
|
+
description: string;
|
|
40
|
+
evidence: string[];
|
|
41
|
+
confidence: number;
|
|
42
|
+
attackClass?: string;
|
|
43
|
+
remediation?: string;
|
|
44
|
+
source: 'nanomind';
|
|
45
|
+
}
|
|
46
|
+
/**
|
|
47
|
+
* Check if the NanoMind daemon is running.
|
|
48
|
+
*/
|
|
49
|
+
export declare function isDaemonAvailable(): Promise<boolean>;
|
|
50
|
+
/**
|
|
51
|
+
* Analyze a skill for malicious intent using NanoMind.
|
|
52
|
+
* SCAN_SKILL_INTENT: scores the skill's instruction set for exfiltration,
|
|
53
|
+
* injection, override, and persistence intent.
|
|
54
|
+
*/
|
|
55
|
+
export declare function analyzeSkillIntent(skillContent: string): Promise<SemanticFinding | null>;
|
|
56
|
+
/**
|
|
57
|
+
* Analyze SOUL.md governance completeness using NanoMind.
|
|
58
|
+
* SCAN_SOUL_COMPLETENESS: assesses whether governance constraints
|
|
59
|
+
* actually cover the attack surface.
|
|
60
|
+
*/
|
|
61
|
+
export declare function analyzeSoulCompleteness(soulContent: string): Promise<SemanticFinding | null>;
|
|
62
|
+
/**
|
|
63
|
+
* Analyze MCP tool description for scope mismatches.
|
|
64
|
+
* SCAN_MCP_SCOPE: detects undeclared permissions in natural language descriptions.
|
|
65
|
+
*/
|
|
66
|
+
export declare function analyzeMCPScope(toolName: string, toolDescription: string, declaredCapabilities: string[]): Promise<SemanticFinding | null>;
|
|
67
|
+
/**
|
|
68
|
+
* Analyze system prompt behavioral envelope.
|
|
69
|
+
* SCAN_PROMPT_INTENT: detects jailbreak seeds, capability creep, override risk.
|
|
70
|
+
*/
|
|
71
|
+
export declare function analyzePromptIntent(promptContent: string): Promise<SemanticFinding | null>;
|
|
72
|
+
/**
|
|
73
|
+
* Generate a human-readable explanation of any finding.
|
|
74
|
+
* SCAN_EXPLAIN: translates machine findings into plain English.
|
|
75
|
+
*/
|
|
76
|
+
export declare function explainFinding(findingJSON: string): Promise<string | null>;
|
|
77
|
+
//# sourceMappingURL=nanomind-analyzer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nanomind-analyzer.d.ts","sourceRoot":"","sources":["../../src/semantic/nanomind-analyzer.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;GAaG;AAEH,MAAM,WAAW,oBAAoB;IACnC,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE;QACR,OAAO,CAAC,EAAE,MAAM,CAAC;QACjB,UAAU,CAAC,EAAE,MAAM,CAAC;QACpB,eAAe,CAAC,EAAE,MAAM,CAAC;KAC1B,CAAC;IACF,QAAQ,CAAC,EAAE,MAAM,GAAG,QAAQ,GAAG,KAAK,CAAC;CACtC;AAED,MAAM,WAAW,qBAAqB;IACpC,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,eAAe;IAC9B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,EAAE,UAAU,GAAG,MAAM,GAAG,QAAQ,GAAG,KAAK,GAAG,MAAM,CAAC;IAC1D,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,EAAE,CAAC;IACnB,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,MAAM,EAAE,UAAU,CAAC;CACpB;AAID;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,OAAO,CAAC,CAO1D;AAED;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAoB9F;AAED;;;;GAIG;AACH,wBAAsB,uBAAuB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAmBlG;AAED;;;GAGG;AACH,wBAAsB,eAAe,CACnC,QAAQ,EAAE,MAAM,EAChB,eAAe,EAAE,MAAM,EACvB,oBAAoB,EAAE,MAAM,EAAE,GAC7B,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAsBjC;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CAAC,aAAa,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAoBhG;AAED;;;GAGG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAQhF"}
|
|
@@ -0,0 +1,165 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* NanoMind Semantic Analyzer
|
|
4
|
+
*
|
|
5
|
+
* Uses the local NanoMind daemon (localhost:47200) for semantic analysis
|
|
6
|
+
* of skills, SOUL.md, MCP tools, and system prompts.
|
|
7
|
+
*
|
|
8
|
+
* Unlike the LLM analyzer (--deep flag, cloud API, costs money),
|
|
9
|
+
* the NanoMind analyzer (--semantic flag) runs 100% locally with
|
|
10
|
+
* zero cost per inference and zero data leaving the machine.
|
|
11
|
+
*
|
|
12
|
+
* Two-layer architecture:
|
|
13
|
+
* 1. Static checks run first (fast, deterministic, 183 rules)
|
|
14
|
+
* 2. NanoMind activates on ambiguous/NLP targets (semantic intent classification)
|
|
15
|
+
*/
|
|
16
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
+
exports.isDaemonAvailable = isDaemonAvailable;
|
|
18
|
+
exports.analyzeSkillIntent = analyzeSkillIntent;
|
|
19
|
+
exports.analyzeSoulCompleteness = analyzeSoulCompleteness;
|
|
20
|
+
exports.analyzeMCPScope = analyzeMCPScope;
|
|
21
|
+
exports.analyzePromptIntent = analyzePromptIntent;
|
|
22
|
+
exports.explainFinding = explainFinding;
|
|
23
|
+
const DAEMON_URL = process.env.NANOMIND_URL ?? 'http://127.0.0.1:47200';
|
|
24
|
+
/**
|
|
25
|
+
* Check if the NanoMind daemon is running.
|
|
26
|
+
*/
|
|
27
|
+
async function isDaemonAvailable() {
|
|
28
|
+
try {
|
|
29
|
+
const resp = await fetch(`${DAEMON_URL}/health`, { signal: AbortSignal.timeout(2000) });
|
|
30
|
+
return resp.ok;
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
return false;
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Analyze a skill for malicious intent using NanoMind.
|
|
38
|
+
* SCAN_SKILL_INTENT: scores the skill's instruction set for exfiltration,
|
|
39
|
+
* injection, override, and persistence intent.
|
|
40
|
+
*/
|
|
41
|
+
async function analyzeSkillIntent(skillContent) {
|
|
42
|
+
const resp = await callDaemon({
|
|
43
|
+
intent: 'SCAN_SKILL_INTENT',
|
|
44
|
+
input: skillContent,
|
|
45
|
+
priority: 'high',
|
|
46
|
+
});
|
|
47
|
+
if (!resp || resp.confidence < 0.5)
|
|
48
|
+
return null;
|
|
49
|
+
return {
|
|
50
|
+
checkId: `SKILL-SEMANTIC-${Date.now().toString(36).slice(-4).toUpperCase()}`,
|
|
51
|
+
severity: resp.confidence >= 0.85 ? 'critical' : resp.confidence >= 0.7 ? 'high' : 'medium',
|
|
52
|
+
title: `Semantic Intent: ${resp.attackClass ?? resp.result}`,
|
|
53
|
+
description: `NanoMind classified this skill's intent as ${resp.result} with ${(resp.confidence * 100).toFixed(0)}% confidence.`,
|
|
54
|
+
evidence: resp.evidence ? [resp.evidence] : [],
|
|
55
|
+
confidence: resp.confidence,
|
|
56
|
+
attackClass: resp.attackClass,
|
|
57
|
+
remediation: resp.remediation,
|
|
58
|
+
source: 'nanomind',
|
|
59
|
+
};
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* Analyze SOUL.md governance completeness using NanoMind.
|
|
63
|
+
* SCAN_SOUL_COMPLETENESS: assesses whether governance constraints
|
|
64
|
+
* actually cover the attack surface.
|
|
65
|
+
*/
|
|
66
|
+
async function analyzeSoulCompleteness(soulContent) {
|
|
67
|
+
const resp = await callDaemon({
|
|
68
|
+
intent: 'SCAN_SOUL_COMPLETENESS',
|
|
69
|
+
input: soulContent,
|
|
70
|
+
priority: 'medium',
|
|
71
|
+
});
|
|
72
|
+
if (!resp)
|
|
73
|
+
return null;
|
|
74
|
+
return {
|
|
75
|
+
checkId: `SOUL-SEMANTIC-${Date.now().toString(36).slice(-4).toUpperCase()}`,
|
|
76
|
+
severity: resp.confidence >= 0.7 ? 'high' : 'medium',
|
|
77
|
+
title: 'SOUL Governance Gap Detected',
|
|
78
|
+
description: `NanoMind identified governance gaps in this SOUL.md: ${resp.result}`,
|
|
79
|
+
evidence: resp.evidence ? [resp.evidence] : [],
|
|
80
|
+
confidence: resp.confidence,
|
|
81
|
+
remediation: resp.remediation,
|
|
82
|
+
source: 'nanomind',
|
|
83
|
+
};
|
|
84
|
+
}
|
|
85
|
+
/**
|
|
86
|
+
* Analyze MCP tool description for scope mismatches.
|
|
87
|
+
* SCAN_MCP_SCOPE: detects undeclared permissions in natural language descriptions.
|
|
88
|
+
*/
|
|
89
|
+
async function analyzeMCPScope(toolName, toolDescription, declaredCapabilities) {
|
|
90
|
+
const input = JSON.stringify({ toolName, toolDescription, declaredCapabilities });
|
|
91
|
+
const resp = await callDaemon({
|
|
92
|
+
intent: 'SCAN_MCP_SCOPE',
|
|
93
|
+
input,
|
|
94
|
+
priority: 'medium',
|
|
95
|
+
});
|
|
96
|
+
if (!resp || resp.confidence < 0.5)
|
|
97
|
+
return null;
|
|
98
|
+
return {
|
|
99
|
+
checkId: `MCP-SEMANTIC-${Date.now().toString(36).slice(-4).toUpperCase()}`,
|
|
100
|
+
severity: resp.confidence >= 0.8 ? 'high' : 'medium',
|
|
101
|
+
title: `MCP Scope Mismatch: ${toolName}`,
|
|
102
|
+
description: `NanoMind detected scope mismatch between tool description and declared capabilities: ${resp.result}`,
|
|
103
|
+
evidence: resp.evidence ? [resp.evidence] : [],
|
|
104
|
+
confidence: resp.confidence,
|
|
105
|
+
attackClass: resp.attackClass,
|
|
106
|
+
remediation: resp.remediation,
|
|
107
|
+
source: 'nanomind',
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/**
|
|
111
|
+
* Analyze system prompt behavioral envelope.
|
|
112
|
+
* SCAN_PROMPT_INTENT: detects jailbreak seeds, capability creep, override risk.
|
|
113
|
+
*/
|
|
114
|
+
async function analyzePromptIntent(promptContent) {
|
|
115
|
+
const resp = await callDaemon({
|
|
116
|
+
intent: 'SCAN_PROMPT_INTENT',
|
|
117
|
+
input: promptContent,
|
|
118
|
+
priority: 'high',
|
|
119
|
+
});
|
|
120
|
+
if (!resp || resp.confidence < 0.5)
|
|
121
|
+
return null;
|
|
122
|
+
return {
|
|
123
|
+
checkId: `PROMPT-SEMANTIC-${Date.now().toString(36).slice(-4).toUpperCase()}`,
|
|
124
|
+
severity: resp.confidence >= 0.8 ? 'critical' : resp.confidence >= 0.6 ? 'high' : 'medium',
|
|
125
|
+
title: `System Prompt Risk: ${resp.attackClass ?? resp.result}`,
|
|
126
|
+
description: `NanoMind analyzed the system prompt behavioral envelope: ${resp.result}`,
|
|
127
|
+
evidence: resp.evidence ? [resp.evidence] : [],
|
|
128
|
+
confidence: resp.confidence,
|
|
129
|
+
attackClass: resp.attackClass,
|
|
130
|
+
remediation: resp.remediation,
|
|
131
|
+
source: 'nanomind',
|
|
132
|
+
};
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* Generate a human-readable explanation of any finding.
|
|
136
|
+
* SCAN_EXPLAIN: translates machine findings into plain English.
|
|
137
|
+
*/
|
|
138
|
+
async function explainFinding(findingJSON) {
|
|
139
|
+
const resp = await callDaemon({
|
|
140
|
+
intent: 'SCAN_EXPLAIN',
|
|
141
|
+
input: findingJSON,
|
|
142
|
+
priority: 'low',
|
|
143
|
+
});
|
|
144
|
+
return resp?.result ?? null;
|
|
145
|
+
}
|
|
146
|
+
/**
|
|
147
|
+
* Internal: call the NanoMind daemon.
|
|
148
|
+
*/
|
|
149
|
+
async function callDaemon(req) {
|
|
150
|
+
try {
|
|
151
|
+
const resp = await fetch(`${DAEMON_URL}/v1/infer`, {
|
|
152
|
+
method: 'POST',
|
|
153
|
+
headers: { 'Content-Type': 'application/json' },
|
|
154
|
+
body: JSON.stringify(req),
|
|
155
|
+
signal: AbortSignal.timeout(1200), // 1.2s timeout per brief spec
|
|
156
|
+
});
|
|
157
|
+
if (!resp.ok)
|
|
158
|
+
return null;
|
|
159
|
+
return await resp.json();
|
|
160
|
+
}
|
|
161
|
+
catch {
|
|
162
|
+
return null; // daemon unavailable or timeout -- fail gracefully
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
//# sourceMappingURL=nanomind-analyzer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nanomind-analyzer.js","sourceRoot":"","sources":["../../src/semantic/nanomind-analyzer.ts"],"names":[],"mappings":"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"}
|
|
@@ -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"}
|