hackmyagent 0.11.12 → 0.11.14
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 +16 -15
- package/dist/arp/engine/correlation.d.ts +27 -0
- package/dist/arp/engine/correlation.d.ts.map +1 -0
- package/dist/arp/engine/correlation.js +95 -0
- package/dist/arp/engine/correlation.js.map +1 -0
- package/dist/arp/engine/event-engine.d.ts +1 -0
- package/dist/arp/engine/event-engine.d.ts.map +1 -1
- package/dist/arp/engine/event-engine.js +16 -0
- package/dist/arp/engine/event-engine.js.map +1 -1
- package/dist/arp/index.d.ts +2 -0
- package/dist/arp/index.d.ts.map +1 -1
- package/dist/arp/index.js +5 -1
- package/dist/arp/index.js.map +1 -1
- package/dist/arp/intelligence/anomaly.d.ts +4 -0
- package/dist/arp/intelligence/anomaly.d.ts.map +1 -1
- package/dist/arp/intelligence/anomaly.js +71 -0
- package/dist/arp/intelligence/anomaly.js.map +1 -1
- package/dist/arp/intelligence/nanomind-l1.d.ts +72 -0
- package/dist/arp/intelligence/nanomind-l1.d.ts.map +1 -0
- package/dist/arp/intelligence/nanomind-l1.js +268 -0
- package/dist/arp/intelligence/nanomind-l1.js.map +1 -0
- package/dist/arp/monitors/network.d.ts +16 -1
- package/dist/arp/monitors/network.d.ts.map +1 -1
- package/dist/arp/monitors/network.js +55 -1
- package/dist/arp/monitors/network.js.map +1 -1
- package/dist/arp/proxy/server.d.ts +7 -0
- package/dist/arp/proxy/server.d.ts.map +1 -1
- package/dist/arp/proxy/server.js +24 -0
- package/dist/arp/proxy/server.js.map +1 -1
- 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 +210 -12
- 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/output/asff.d.ts +37 -0
- package/dist/output/asff.d.ts.map +1 -0
- package/dist/output/asff.js +112 -0
- package/dist/output/asff.js.map +1 -0
- package/dist/semantic/index.d.ts +2 -0
- package/dist/semantic/index.d.ts.map +1 -1
- package/dist/semantic/index.js +9 -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/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
package/dist/index.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* hackmyagent — Find it. Break it. Fix it.
|
|
3
3
|
* Unified security toolkit for AI agents.
|
|
4
4
|
*/
|
|
5
|
-
export declare const VERSION
|
|
5
|
+
export declare const VERSION: string;
|
|
6
6
|
export { checkSkill, parseSkillIdentifier, analyzePermissions, analyzeSkillDependencies, buildDependencyGraph, detectCircularDeps, detectPhantomDeps, detectUnpinnedDeps, parseSkillFrontmatter, } from './checker';
|
|
7
7
|
export type { CheckResult, CheckOptions, PublisherInfo, PermissionInfo, RevocationInfo, RiskLevel, SkillIdentifier, PermissionAnalysis, SkillMetadata, DependencyGraph, } from './checker';
|
|
8
8
|
export { HardeningScanner } from './hardening';
|
package/dist/index.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAUH,eAAO,MAAM,OAAO,EAAE,MAAiB,CAAC;AAGxC,OAAO,EACL,UAAU,EACV,oBAAoB,EACpB,kBAAkB,EAClB,wBAAwB,EACxB,oBAAoB,EACpB,kBAAkB,EAClB,iBAAiB,EACjB,kBAAkB,EAClB,qBAAqB,GACtB,MAAM,WAAW,CAAC;AAEnB,YAAY,EACV,WAAW,EACX,YAAY,EACZ,aAAa,EACb,cAAc,EACd,cAAc,EACd,SAAS,EACT,eAAe,EACf,kBAAkB,EAClB,aAAa,EACb,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,gBAAgB,EAAE,MAAM,aAAa,CAAC;AAC/C,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG1E,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAC5C,YAAY,EACV,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,eAAe,GAChB,MAAM,WAAW,CAAC;AAGnB,OAAO,EAAE,oBAAoB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAC1E,YAAY,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAChD,OAAO,EACL,yBAAyB,IAAI,8BAA8B,EAC3D,uBAAuB,EACvB,oBAAoB,GACrB,MAAM,aAAa,CAAC;AACrB,YAAY,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAGjF,OAAO,EAAE,aAAa,EAAE,MAAM,UAAU,CAAC;AAEzC,OAAO,EACL,iBAAiB,EACjB,YAAY,EACZ,aAAa,EACb,WAAW,EACX,cAAc,EACd,qBAAqB,EACrB,sBAAsB,EACtB,mBAAmB,EACnB,UAAU,EACV,yBAAyB,EACzB,mBAAmB,EACnB,6BAA6B,EAC7B,uBAAuB,EACvB,qBAAqB,EACrB,oBAAoB,GACrB,MAAM,UAAU,CAAC;AAElB,YAAY,EACV,cAAc,EACd,eAAe,EACf,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,EACZ,YAAY,EACZ,aAAa,EACb,kBAAkB,EAClB,iBAAiB,EACjB,UAAU,GACX,MAAM,UAAU,CAAC;AAGlB,OAAO,EACL,iBAAiB,EACjB,cAAc,EACd,WAAW,EACX,mBAAmB,EACnB,sBAAsB,EACtB,mBAAmB,EACnB,eAAe,EACf,oBAAoB,EACpB,gBAAgB,GACjB,MAAM,cAAc,CAAC;AAEtB,YAAY,EACV,cAAc,EACd,gBAAgB,EAChB,iBAAiB,EACjB,eAAe,EACf,uBAAuB,EACvB,sBAAsB,EACtB,aAAa,GACd,MAAM,cAAc,CAAC;AAGtB,OAAO,EACL,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,0BAA0B,EAE1B,gBAAgB,EAChB,WAAW,EACX,mBAAmB,EACnB,kBAAkB,EAClB,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAEpB,YAAY,EACV,cAAc,EACd,eAAe,EACf,iBAAiB,EACjB,oBAAoB,EACpB,YAAY,EACZ,eAAe,EACf,aAAa,GACd,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,kBAAkB,EAClB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,eAAe,EACf,QAAQ,EACR,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,sBAAsB,EACtB,aAAa,EACb,mBAAmB,GACpB,MAAM,YAAY,CAAC;AAGpB,OAAO,EACL,cAAc,EACd,SAAS,EACT,WAAW,EACX,aAAa,GACd,MAAM,gBAAgB,CAAC;AAExB,YAAY,EACV,aAAa,EACb,cAAc,EACd,OAAO,IAAI,aAAa,EACxB,WAAW,EACX,UAAU,EACV,YAAY,EACZ,iBAAiB,GAClB,MAAM,gBAAgB,CAAC;AAGxB,OAAO,EAAE,YAAY,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,YAAY,IAAI,qBAAqB,EAAE,MAAM,qBAAqB,CAAC;AAC5E,OAAO,EAAE,YAAY,IAAI,sBAAsB,EAAE,MAAM,sBAAsB,CAAC;AAG9E,OAAO,EAAE,sBAAsB,EAAE,MAAM,OAAO,CAAC;AAC/C,OAAO,EAAE,sBAAsB,EAAE,uBAAuB,EAAE,yBAAyB,EAAE,MAAM,OAAO,CAAC;AACnG,YAAY,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAGzF,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,YAAY,EAAE,gBAAgB,EAAE,eAAe,EAAE,MAAM,QAAQ,CAAC;AACpG,YAAY,EACV,SAAS,EACT,YAAY,EACZ,SAAS,EACT,SAAS,EACT,YAAY,EACZ,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,QAAQ,CAAC;AAChB,OAAO,EAAE,gBAAgB,EAAE,MAAM,QAAQ,CAAC;AAC1C,YAAY,EAAE,cAAc,EAAE,MAAM,QAAQ,CAAC;AAG7C,OAAO,EACL,wBAAwB,EACxB,mBAAmB,EACnB,cAAc,EACd,+BAA+B,EAC/B,UAAU,EACV,kBAAkB,EAClB,UAAU,EACV,kBAAkB,EAClB,mBAAmB,EACnB,sBAAsB,EACtB,kBAAkB,EAClB,oBAAoB,EACpB,oBAAoB,EACpB,yBAAyB,GAC1B,MAAM,aAAa,CAAC;AAErB,YAAY,EACV,iBAAiB,EACjB,iBAAiB,GAClB,MAAM,aAAa,CAAC;AAGrB,MAAM,WAAW,UAAU;IACzB,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,aAAa,EAAE,CAAC;IAC1B,SAAS,EAAE,IAAI,CAAC;CACjB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,KAAK,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,CAAC;IACjD,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;CACrB;AAED,wBAAgB,aAAa,IAAI,OAAO,CAEvC;AAED,qBAAa,OAAO;IACZ,IAAI,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC;CAOhD"}
|
package/dist/index.js
CHANGED
|
@@ -7,7 +7,15 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
7
7
|
exports.buildPublishPayload = exports.signPayload = exports.readAgentKeypair = exports.buildCommunityAttackReport = exports.buildCommunityReport = exports.buildAttackReport = exports.buildScanReport = exports.RegistryClient = exports.isValidBenchmark = exports.AVAILABLE_BENCHMARKS = exports.calculateRating = exports.getCheckIdsForLevel = exports.getControlsForCategory = exports.getControlsForLevel = exports.OASB_1_NAME = exports.OASB_1_VERSION = exports.OASB_1_CATEGORIES = exports.TOOL_SHADOW_PAYLOADS = exports.SUPPLY_CHAIN_PAYLOADS = exports.CONTEXT_WINDOW_PAYLOADS = exports.MEMORY_WEAPONIZATION_PAYLOADS = exports.A2A_ATTACK_PAYLOADS = exports.MCP_EXPLOITATION_PAYLOADS = exports.shouldFail = exports.parseCustomPayloads = exports.getPayloadsByIntensity = exports.getPayloadsByCategory = exports.getPayloadById = exports.getPayloads = exports.PAYLOAD_STATS = exports.ALL_PAYLOADS = exports.ATTACK_CATEGORIES = exports.AttackScanner = exports.validateCapabilities = exports.inferActualCapabilities = exports.parseSkillDeclaredCapabilities = exports.isLikelyFalsePositive = exports.classifySkillSection = exports.ExternalScanner = exports.HardeningScanner = exports.parseSkillFrontmatter = exports.detectUnpinnedDeps = exports.detectPhantomDeps = exports.detectCircularDeps = exports.buildDependencyGraph = exports.analyzeSkillDependencies = exports.analyzePermissions = exports.parseSkillIdentifier = exports.checkSkill = exports.VERSION = void 0;
|
|
8
8
|
exports.Scanner = exports.recordScanAndMaybeShowTip = exports.showContributePrompt = exports.saveContributeChoice = exports.incrementScanCount = exports.shouldPromptContribute = exports.isContributeEnabled = exports.submitContribution = exports.flushQueue = exports.queueAndMaybeFlush = exports.queueEvent = exports.buildContributionPayloadFromDir = exports.buildScanEvent = exports.getContributorToken = exports.generateContributorToken = exports.DOMAIN_TEMPLATES = exports.PROFILE_DOMAINS = exports.GOVERNANCE_FILES = exports.DOMAIN_ORDER = exports.CONTROL_DEFS = exports.SoulScanner = exports.parseDeclaredCapabilities = exports.createCapabilityMonitor = exports.SkillCapabilityMonitor = exports.AgentRuntimeProtection = exports.createSkillguardPlugin = exports.createSigncryptPlugin = exports.createCredVaultPlugin = exports.clearRegistry = exports.listPlugins = exports.getPlugin = exports.registerPlugin = exports.buildDeepScanResult = exports.CostEstimator = 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 = exports.formatPublishOutput = exports.publishScanResults = void 0;
|
|
9
9
|
exports.createScanner = createScanner;
|
|
10
|
-
|
|
10
|
+
const node_fs_1 = require("node:fs");
|
|
11
|
+
const node_path_1 = require("node:path");
|
|
12
|
+
let _version = '0.12.0';
|
|
13
|
+
try {
|
|
14
|
+
const pkgJson = JSON.parse((0, node_fs_1.readFileSync)((0, node_path_1.join)(__dirname, '..', 'package.json'), 'utf-8'));
|
|
15
|
+
_version = pkgJson.version;
|
|
16
|
+
}
|
|
17
|
+
catch { /* use fallback */ }
|
|
18
|
+
exports.VERSION = _version;
|
|
11
19
|
// Checker module
|
|
12
20
|
var checker_1 = require("./checker");
|
|
13
21
|
Object.defineProperty(exports, "checkSkill", { enumerable: true, get: function () { return checker_1.checkSkill; } });
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;;
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AWS Security Finding Format (ASFF) adapter.
|
|
3
|
+
*
|
|
4
|
+
* Transforms HMA security findings into ASFF JSON for import
|
|
5
|
+
* into AWS Security Hub via BatchImportFindings API.
|
|
6
|
+
*
|
|
7
|
+
* Usage:
|
|
8
|
+
* hackmyagent secure --format asff
|
|
9
|
+
* hackmyagent secure --format asff | aws securityhub batch-import-findings --findings file:///dev/stdin
|
|
10
|
+
*
|
|
11
|
+
* Reference: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format.html
|
|
12
|
+
*/
|
|
13
|
+
export interface SecurityFinding {
|
|
14
|
+
checkId: string;
|
|
15
|
+
name: string;
|
|
16
|
+
severity: string;
|
|
17
|
+
passed: boolean;
|
|
18
|
+
fixed?: boolean;
|
|
19
|
+
message?: string;
|
|
20
|
+
file?: string;
|
|
21
|
+
line?: number;
|
|
22
|
+
recommendation?: string;
|
|
23
|
+
category?: string;
|
|
24
|
+
}
|
|
25
|
+
/**
|
|
26
|
+
* Convert HMA findings to AWS Security Finding Format.
|
|
27
|
+
*/
|
|
28
|
+
export declare function toASSF(findings: SecurityFinding[], options?: {
|
|
29
|
+
awsAccountId?: string;
|
|
30
|
+
awsRegion?: string;
|
|
31
|
+
targetDir?: string;
|
|
32
|
+
}): string;
|
|
33
|
+
/**
|
|
34
|
+
* Split ASFF findings into batches of 100 (AWS API limit).
|
|
35
|
+
*/
|
|
36
|
+
export declare function batchASSF(assfJson: string): string[];
|
|
37
|
+
//# sourceMappingURL=asff.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* AWS Security Finding Format (ASFF) adapter.
|
|
4
|
+
*
|
|
5
|
+
* Transforms HMA security findings into ASFF JSON for import
|
|
6
|
+
* into AWS Security Hub via BatchImportFindings API.
|
|
7
|
+
*
|
|
8
|
+
* Usage:
|
|
9
|
+
* hackmyagent secure --format asff
|
|
10
|
+
* hackmyagent secure --format asff | aws securityhub batch-import-findings --findings file:///dev/stdin
|
|
11
|
+
*
|
|
12
|
+
* Reference: https://docs.aws.amazon.com/securityhub/latest/userguide/securityhub-findings-format.html
|
|
13
|
+
*/
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.toASSF = toASSF;
|
|
16
|
+
exports.batchASSF = batchASSF;
|
|
17
|
+
const index_js_1 = require("../index.js");
|
|
18
|
+
const SEVERITY_MAP = {
|
|
19
|
+
critical: 'CRITICAL',
|
|
20
|
+
high: 'HIGH',
|
|
21
|
+
medium: 'MEDIUM',
|
|
22
|
+
low: 'LOW',
|
|
23
|
+
informational: 'INFORMATIONAL',
|
|
24
|
+
info: 'INFORMATIONAL',
|
|
25
|
+
};
|
|
26
|
+
const CATEGORY_TYPE_MAP = {
|
|
27
|
+
credentials: 'Software and Configuration Checks/Vulnerabilities/CVE',
|
|
28
|
+
mcp: 'Software and Configuration Checks/Industry and Regulatory Standards',
|
|
29
|
+
network: 'Software and Configuration Checks/Vulnerabilities/CVE',
|
|
30
|
+
injection: 'Software and Configuration Checks/Vulnerabilities/CVE',
|
|
31
|
+
supply_chain: 'Software and Configuration Checks/Vulnerabilities/CVE',
|
|
32
|
+
governance: 'Software and Configuration Checks/Industry and Regulatory Standards',
|
|
33
|
+
config: 'Software and Configuration Checks/AWS Security Best Practices',
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* Convert HMA findings to AWS Security Finding Format.
|
|
37
|
+
*/
|
|
38
|
+
function toASSF(findings, options = {}) {
|
|
39
|
+
const accountId = options.awsAccountId || process.env.AWS_ACCOUNT_ID || '000000000000';
|
|
40
|
+
const region = options.awsRegion || process.env.AWS_REGION || 'us-east-1';
|
|
41
|
+
const targetDir = options.targetDir || process.cwd();
|
|
42
|
+
const now = new Date().toISOString();
|
|
43
|
+
const productArn = `arn:aws:securityhub:${region}:${accountId}:product/${accountId}/default`;
|
|
44
|
+
// Only include failed (not passed, not fixed) findings
|
|
45
|
+
const failed = findings.filter(f => !f.passed && !f.fixed);
|
|
46
|
+
const assfFindings = failed.map(f => {
|
|
47
|
+
const severity = SEVERITY_MAP[f.severity] || 'INFORMATIONAL';
|
|
48
|
+
const category = f.category || f.checkId.split('-')[0].toLowerCase();
|
|
49
|
+
const types = CATEGORY_TYPE_MAP[category]
|
|
50
|
+
? [CATEGORY_TYPE_MAP[category]]
|
|
51
|
+
: ['Software and Configuration Checks'];
|
|
52
|
+
const title = f.name || f.checkId;
|
|
53
|
+
const description = (f.message || f.name || f.checkId).slice(0, 1024);
|
|
54
|
+
const finding = {
|
|
55
|
+
SchemaVersion: '2018-10-08',
|
|
56
|
+
Id: `opena2a/hma/${f.checkId}/${Date.now()}`,
|
|
57
|
+
ProductArn: productArn,
|
|
58
|
+
GeneratorId: `hackmyagent/${f.checkId}`,
|
|
59
|
+
AwsAccountId: accountId,
|
|
60
|
+
Types: types,
|
|
61
|
+
CreatedAt: now,
|
|
62
|
+
UpdatedAt: now,
|
|
63
|
+
Severity: {
|
|
64
|
+
Label: severity,
|
|
65
|
+
Original: f.severity,
|
|
66
|
+
},
|
|
67
|
+
Title: title.slice(0, 256),
|
|
68
|
+
Description: description,
|
|
69
|
+
Resources: [{
|
|
70
|
+
Type: 'Other',
|
|
71
|
+
Id: f.file || targetDir,
|
|
72
|
+
}],
|
|
73
|
+
ProductFields: {
|
|
74
|
+
'opena2a/checkId': f.checkId,
|
|
75
|
+
'opena2a/scanner': 'hackmyagent',
|
|
76
|
+
'opena2a/scannerVersion': index_js_1.VERSION,
|
|
77
|
+
},
|
|
78
|
+
RecordState: 'ACTIVE',
|
|
79
|
+
Workflow: { Status: 'NEW' },
|
|
80
|
+
};
|
|
81
|
+
if (f.recommendation) {
|
|
82
|
+
finding.Remediation = {
|
|
83
|
+
Recommendation: {
|
|
84
|
+
Text: f.recommendation.slice(0, 512),
|
|
85
|
+
Url: `https://hackmyagent.com/docs/checks/${f.checkId.toLowerCase()}`,
|
|
86
|
+
},
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
if (f.file) {
|
|
90
|
+
finding.Resources[0].Details = {
|
|
91
|
+
Other: {
|
|
92
|
+
filePath: f.file,
|
|
93
|
+
...(f.line ? { lineNumber: String(f.line) } : {}),
|
|
94
|
+
},
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
return finding;
|
|
98
|
+
});
|
|
99
|
+
return JSON.stringify(assfFindings, null, 2);
|
|
100
|
+
}
|
|
101
|
+
/**
|
|
102
|
+
* Split ASFF findings into batches of 100 (AWS API limit).
|
|
103
|
+
*/
|
|
104
|
+
function batchASSF(assfJson) {
|
|
105
|
+
const findings = JSON.parse(assfJson);
|
|
106
|
+
const batches = [];
|
|
107
|
+
for (let i = 0; i < findings.length; i += 100) {
|
|
108
|
+
batches.push(JSON.stringify(findings.slice(i, i + 100), null, 2));
|
|
109
|
+
}
|
|
110
|
+
return batches;
|
|
111
|
+
}
|
|
112
|
+
//# sourceMappingURL=asff.js.map
|
|
@@ -0,0 +1 @@
|
|
|
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,8 @@ export { LLMAnalyzer, AnthropicClient, LLMCache, BudgetTracker } from './llm';
|
|
|
12
12
|
export { toSecurityFinding, toSecurityFindings } from './integration/finding-adapter';
|
|
13
13
|
export { SEMANTIC_OASB_MAPPINGS, getSemanticCheckIds, getUpgradedControlIds } from './integration/oasb-upgrader';
|
|
14
14
|
export { CostEstimator } from './integration/cost-estimator';
|
|
15
|
+
export { isDaemonAvailable, analyzeSkillIntent, analyzeSoulCompleteness, analyzeMCPScope, analyzePromptIntent, explainFinding, } from './nanomind-analyzer';
|
|
16
|
+
export type { NanoMindInferRequest, NanoMindInferResponse, SemanticFinding as NanoMindFinding, } from './nanomind-analyzer';
|
|
15
17
|
export { buildDeepScanResult } from './deep-scan';
|
|
16
18
|
export type { SemanticFinding, SemanticSeverity, SemanticCategory, AnalysisContext, AnalysisFile, FileType, ExistingFinding, LLMAnalysisOptions, CostEstimate, DeepScanResult, DeepAnalysisFile, McpServerConfig, McpConfigFile, ClaudeSettings, } from './types';
|
|
17
19
|
//# 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,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.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,14 @@ Object.defineProperty(exports, "getSemanticCheckIds", { enumerable: true, get: f
|
|
|
33
33
|
Object.defineProperty(exports, "getUpgradedControlIds", { enumerable: true, get: function () { return oasb_upgrader_1.getUpgradedControlIds; } });
|
|
34
34
|
var cost_estimator_1 = require("./integration/cost-estimator");
|
|
35
35
|
Object.defineProperty(exports, "CostEstimator", { enumerable: true, get: function () { return cost_estimator_1.CostEstimator; } });
|
|
36
|
+
// Layer 4: NanoMind Local Semantic Analysis (--semantic flag)
|
|
37
|
+
var nanomind_analyzer_1 = require("./nanomind-analyzer");
|
|
38
|
+
Object.defineProperty(exports, "isDaemonAvailable", { enumerable: true, get: function () { return nanomind_analyzer_1.isDaemonAvailable; } });
|
|
39
|
+
Object.defineProperty(exports, "analyzeSkillIntent", { enumerable: true, get: function () { return nanomind_analyzer_1.analyzeSkillIntent; } });
|
|
40
|
+
Object.defineProperty(exports, "analyzeSoulCompleteness", { enumerable: true, get: function () { return nanomind_analyzer_1.analyzeSoulCompleteness; } });
|
|
41
|
+
Object.defineProperty(exports, "analyzeMCPScope", { enumerable: true, get: function () { return nanomind_analyzer_1.analyzeMCPScope; } });
|
|
42
|
+
Object.defineProperty(exports, "analyzePromptIntent", { enumerable: true, get: function () { return nanomind_analyzer_1.analyzePromptIntent; } });
|
|
43
|
+
Object.defineProperty(exports, "explainFinding", { enumerable: true, get: function () { return nanomind_analyzer_1.explainFinding; } });
|
|
36
44
|
// Deep scan builder (for MCP server)
|
|
37
45
|
var deep_scan_1 = require("./deep-scan");
|
|
38
46
|
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,8DAA8D;AAC9D,yDAO6B;AAN3B,sHAAA,iBAAiB,OAAA;AACjB,uHAAA,kBAAkB,OAAA;AAClB,4HAAA,uBAAuB,OAAA;AACvB,oHAAA,eAAe,OAAA;AACf,wHAAA,mBAAmB,OAAA;AACnB,mHAAA,cAAc,OAAA;AAQhB,qCAAqC;AACrC,yCAAkD;AAAzC,gHAAA,mBAAmB,OAAA"}
|
|
@@ -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,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"}
|