hackmyagent 0.16.0 → 0.16.2
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/nanomind-l1.d.ts +30 -0
- package/dist/arp/intelligence/nanomind-l1.d.ts.map +1 -1
- package/dist/arp/intelligence/nanomind-l1.js +115 -0
- package/dist/arp/intelligence/nanomind-l1.js.map +1 -1
- package/dist/cli.js +220 -19
- package/dist/cli.js.map +1 -1
- package/dist/hardening/scanner.d.ts.map +1 -1
- package/dist/hardening/scanner.js +148 -7
- package/dist/hardening/scanner.js.map +1 -1
- package/dist/hardening/taxonomy.d.ts +2 -0
- package/dist/hardening/taxonomy.d.ts.map +1 -1
- package/dist/hardening/taxonomy.js +5 -0
- package/dist/hardening/taxonomy.js.map +1 -1
- package/dist/nanomind-core/analyzers/credential-analyzer.js +12 -3
- package/dist/nanomind-core/analyzers/credential-analyzer.js.map +1 -1
- package/dist/nanomind-core/analyzers/stego-analyzer.d.ts +30 -0
- package/dist/nanomind-core/analyzers/stego-analyzer.d.ts.map +1 -0
- package/dist/nanomind-core/analyzers/stego-analyzer.js +533 -0
- package/dist/nanomind-core/analyzers/stego-analyzer.js.map +1 -0
- package/dist/nanomind-core/daemon-lifecycle.d.ts +28 -0
- package/dist/nanomind-core/daemon-lifecycle.d.ts.map +1 -0
- package/dist/nanomind-core/daemon-lifecycle.js +142 -0
- package/dist/nanomind-core/daemon-lifecycle.js.map +1 -0
- package/dist/nanomind-core/inference/tme-classifier.d.ts +3 -2
- package/dist/nanomind-core/inference/tme-classifier.d.ts.map +1 -1
- package/dist/nanomind-core/inference/tme-classifier.js +26 -16
- package/dist/nanomind-core/inference/tme-classifier.js.map +1 -1
- package/dist/nanomind-core/orchestrate.d.ts.map +1 -1
- package/dist/nanomind-core/orchestrate.js +11 -1
- package/dist/nanomind-core/orchestrate.js.map +1 -1
- package/dist/nanomind-core/scanner-bridge.d.ts.map +1 -1
- package/dist/nanomind-core/scanner-bridge.js +6 -0
- package/dist/nanomind-core/scanner-bridge.js.map +1 -1
- package/dist/plugins/credvault.d.ts.map +1 -1
- package/dist/plugins/credvault.js +25 -0
- package/dist/plugins/credvault.js.map +1 -1
- package/dist/semantic/nanomind-enhancer.d.ts.map +1 -1
- package/dist/semantic/nanomind-enhancer.js +206 -0
- package/dist/semantic/nanomind-enhancer.js.map +1 -1
- package/dist/telemetry/nanomind-feedback.d.ts +43 -0
- package/dist/telemetry/nanomind-feedback.d.ts.map +1 -0
- package/dist/telemetry/nanomind-feedback.js +104 -0
- package/dist/telemetry/nanomind-feedback.js.map +1 -0
- package/dist/telemetry/nanomind-telemetry.d.ts +48 -0
- package/dist/telemetry/nanomind-telemetry.d.ts.map +1 -0
- package/dist/telemetry/nanomind-telemetry.js +123 -0
- package/dist/telemetry/nanomind-telemetry.js.map +1 -0
- package/package.json +1 -1
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* NanoMind Classification Telemetry
|
|
4
|
+
*
|
|
5
|
+
* Posts anonymous classification stats to the Registry's NanoMind
|
|
6
|
+
* telemetry endpoint. This feeds the intelligence loop: aggregated
|
|
7
|
+
* stats show which content types and classifications are most common,
|
|
8
|
+
* enabling targeted model improvements.
|
|
9
|
+
*
|
|
10
|
+
* Endpoint: POST api.oa2a.org/api/v1/nanomind/telemetry
|
|
11
|
+
*
|
|
12
|
+
* PRIVACY: Only content type, content hash (SHA-256), classification,
|
|
13
|
+
* confidence, verdict, and model version are sent. No file paths,
|
|
14
|
+
* no source code, no raw content, no PII.
|
|
15
|
+
*
|
|
16
|
+
* Respects the same contribute.enabled opt-in as scan contributions.
|
|
17
|
+
*/
|
|
18
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
19
|
+
exports.hashContent = hashContent;
|
|
20
|
+
exports.queueClassificationStat = queueClassificationStat;
|
|
21
|
+
exports.flushNanoMindTelemetry = flushNanoMindTelemetry;
|
|
22
|
+
exports.getTelemetryQueueSize = getTelemetryQueueSize;
|
|
23
|
+
exports.clearTelemetryQueue = clearTelemetryQueue;
|
|
24
|
+
const node_crypto_1 = require("node:crypto");
|
|
25
|
+
const index_js_1 = require("../index.js");
|
|
26
|
+
const opt_in_js_1 = require("./opt-in.js");
|
|
27
|
+
const REGISTRY_URL = 'https://api.oa2a.org';
|
|
28
|
+
const TELEMETRY_ENDPOINT = '/api/v1/nanomind/telemetry';
|
|
29
|
+
const SUBMIT_TIMEOUT_MS = 5000;
|
|
30
|
+
const MAX_BATCH_SIZE = 100;
|
|
31
|
+
// In-memory queue to batch telemetry submissions
|
|
32
|
+
let queue = [];
|
|
33
|
+
/**
|
|
34
|
+
* Hash content for telemetry (privacy-preserving identifier).
|
|
35
|
+
* Only the hash is sent, never the content itself.
|
|
36
|
+
*/
|
|
37
|
+
function hashContent(content) {
|
|
38
|
+
return (0, node_crypto_1.createHash)('sha256').update(content).digest('hex');
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Derive verdict from classification + confidence.
|
|
42
|
+
*/
|
|
43
|
+
function deriveVerdict(classification, confidence) {
|
|
44
|
+
if (classification === 'malicious' && confidence > 0.7)
|
|
45
|
+
return 'fail';
|
|
46
|
+
if (classification === 'suspicious' || (classification === 'malicious' && confidence <= 0.7))
|
|
47
|
+
return 'warn';
|
|
48
|
+
return 'pass';
|
|
49
|
+
}
|
|
50
|
+
/**
|
|
51
|
+
* Queue a classification result for telemetry submission.
|
|
52
|
+
* Call this after every NanoMind classification during a scan.
|
|
53
|
+
*/
|
|
54
|
+
function queueClassificationStat(contentType, content, classification, confidence, modelVersion) {
|
|
55
|
+
if (!(0, opt_in_js_1.isContributeEnabled)())
|
|
56
|
+
return;
|
|
57
|
+
queue.push({
|
|
58
|
+
contentType,
|
|
59
|
+
contentHash: hashContent(content),
|
|
60
|
+
classification,
|
|
61
|
+
confidence,
|
|
62
|
+
verdict: deriveVerdict(classification, confidence),
|
|
63
|
+
modelVersion,
|
|
64
|
+
});
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Submit queued telemetry to the Registry.
|
|
68
|
+
* Call after scan completes. Non-blocking, best-effort.
|
|
69
|
+
*/
|
|
70
|
+
async function flushNanoMindTelemetry(registryUrl, verbose) {
|
|
71
|
+
if (queue.length === 0)
|
|
72
|
+
return true;
|
|
73
|
+
if (!(0, opt_in_js_1.isContributeEnabled)()) {
|
|
74
|
+
queue = [];
|
|
75
|
+
return true;
|
|
76
|
+
}
|
|
77
|
+
const batch = queue.splice(0, MAX_BATCH_SIZE);
|
|
78
|
+
const url = (registryUrl || REGISTRY_URL) + TELEMETRY_ENDPOINT;
|
|
79
|
+
try {
|
|
80
|
+
const resp = await fetch(url, {
|
|
81
|
+
method: 'POST',
|
|
82
|
+
headers: { 'Content-Type': 'application/json' },
|
|
83
|
+
body: JSON.stringify({
|
|
84
|
+
toolId: `hackmyagent@${index_js_1.VERSION}`,
|
|
85
|
+
stats: batch.map(s => ({
|
|
86
|
+
contentType: s.contentType,
|
|
87
|
+
contentHash: s.contentHash,
|
|
88
|
+
classification: s.classification,
|
|
89
|
+
confidence: s.confidence,
|
|
90
|
+
verdict: s.verdict,
|
|
91
|
+
modelVersion: s.modelVersion,
|
|
92
|
+
timestamp: new Date().toISOString(),
|
|
93
|
+
})),
|
|
94
|
+
}),
|
|
95
|
+
signal: AbortSignal.timeout(SUBMIT_TIMEOUT_MS),
|
|
96
|
+
});
|
|
97
|
+
if (verbose) {
|
|
98
|
+
const body = await resp.json().catch(() => ({}));
|
|
99
|
+
process.stderr.write(`NanoMind telemetry: ${resp.status} (${body.accepted ?? 0}/${batch.length} accepted)\n`);
|
|
100
|
+
}
|
|
101
|
+
return resp.ok;
|
|
102
|
+
}
|
|
103
|
+
catch {
|
|
104
|
+
// Non-fatal: telemetry failure should never affect scan results
|
|
105
|
+
if (verbose) {
|
|
106
|
+
process.stderr.write('NanoMind telemetry: submission failed (network error)\n');
|
|
107
|
+
}
|
|
108
|
+
return false;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
/**
|
|
112
|
+
* Get the current queue size (for testing/debugging).
|
|
113
|
+
*/
|
|
114
|
+
function getTelemetryQueueSize() {
|
|
115
|
+
return queue.length;
|
|
116
|
+
}
|
|
117
|
+
/**
|
|
118
|
+
* Clear the queue without submitting (for testing).
|
|
119
|
+
*/
|
|
120
|
+
function clearTelemetryQueue() {
|
|
121
|
+
queue = [];
|
|
122
|
+
}
|
|
123
|
+
//# sourceMappingURL=nanomind-telemetry.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"nanomind-telemetry.js","sourceRoot":"","sources":["../../src/telemetry/nanomind-telemetry.ts"],"names":[],"mappings":"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"}
|