hackmyagent 0.11.10 → 0.11.11
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
CHANGED
|
@@ -88,7 +88,7 @@ npm install --save-dev hackmyagent
|
|
|
88
88
|
```
|
|
89
89
|
|
|
90
90
|
┌──────────────────────────────────────────┐
|
|
91
|
-
│ HackMyAgent v0.11.
|
|
91
|
+
│ HackMyAgent v0.11.10 — Security Scanner │
|
|
92
92
|
│ Found: 3 critical · 5 high · 12 medium │
|
|
93
93
|
│ │
|
|
94
94
|
│ CRED-001 critical Hardcoded API key in .env │
|
|
@@ -1,9 +1,10 @@
|
|
|
1
1
|
/**
|
|
2
2
|
* Community Contribution Module
|
|
3
3
|
*
|
|
4
|
-
*
|
|
5
|
-
*
|
|
6
|
-
* events
|
|
4
|
+
* Delegates queue, flush, and contributor token operations to
|
|
5
|
+
* @opena2a/contribute. Retains HMA-specific logic for building
|
|
6
|
+
* scan events from SecurityFinding arrays (ecosystem detection,
|
|
7
|
+
* finding-to-summary conversion).
|
|
7
8
|
*
|
|
8
9
|
* Queue file: ~/.opena2a/contribute-queue.json
|
|
9
10
|
* Endpoint: POST api.oa2a.org/api/v1/contribute
|
|
@@ -12,37 +13,11 @@
|
|
|
12
13
|
* severity counts, score, verdict). No file paths, no source code,
|
|
13
14
|
* no raw finding descriptions, no PII.
|
|
14
15
|
*/
|
|
16
|
+
import { getContributorToken as sharedGetContributorToken } from '@opena2a/contribute';
|
|
17
|
+
import type { ContributionEvent, ContributionBatch } from '@opena2a/contribute';
|
|
15
18
|
import type { SecurityFinding } from '../hardening';
|
|
16
|
-
|
|
17
|
-
export
|
|
18
|
-
type: 'scan_result' | 'detection' | 'behavior' | 'interaction' | 'adoption';
|
|
19
|
-
tool: string;
|
|
20
|
-
toolVersion: string;
|
|
21
|
-
timestamp: string;
|
|
22
|
-
package?: {
|
|
23
|
-
name: string;
|
|
24
|
-
version?: string;
|
|
25
|
-
ecosystem?: string;
|
|
26
|
-
};
|
|
27
|
-
scanSummary?: {
|
|
28
|
-
totalChecks: number;
|
|
29
|
-
passed: number;
|
|
30
|
-
critical: number;
|
|
31
|
-
high: number;
|
|
32
|
-
medium: number;
|
|
33
|
-
low: number;
|
|
34
|
-
score: number;
|
|
35
|
-
verdict: string;
|
|
36
|
-
durationMs: number;
|
|
37
|
-
};
|
|
38
|
-
}
|
|
39
|
-
/** Matches ContributionBatch from @opena2a/contribute/types. */
|
|
40
|
-
export interface ContributionBatch {
|
|
41
|
-
contributorToken: string;
|
|
42
|
-
events: ContributionEvent[];
|
|
43
|
-
submittedAt: string;
|
|
44
|
-
}
|
|
45
|
-
export declare function getContributorToken(): string;
|
|
19
|
+
export type { ContributionEvent, ContributionBatch };
|
|
20
|
+
export declare const getContributorToken: typeof sharedGetContributorToken;
|
|
46
21
|
export declare function queueEvent(event: ContributionEvent): void;
|
|
47
22
|
/**
|
|
48
23
|
* Build a ContributionEvent from HMA scan findings.
|
|
@@ -70,5 +45,5 @@ export declare function submitContribution(payload: ContributionEvent, registryU
|
|
|
70
45
|
error?: string;
|
|
71
46
|
}>;
|
|
72
47
|
/** @deprecated Kept for backward compat. */
|
|
73
|
-
export declare const generateContributorToken: typeof
|
|
48
|
+
export declare const generateContributorToken: typeof sharedGetContributorToken;
|
|
74
49
|
//# sourceMappingURL=contribute.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contribute.d.ts","sourceRoot":"","sources":["../../src/telemetry/contribute.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"contribute.d.ts","sourceRoot":"","sources":["../../src/telemetry/contribute.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EACL,mBAAmB,IAAI,yBAAyB,EAMjD,MAAM,qBAAqB,CAAC;AAC7B,OAAO,KAAK,EACV,iBAAiB,EACjB,iBAAiB,EAClB,MAAM,qBAAqB,CAAC;AAI7B,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAMpD,YAAY,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,CAAC;AAMrD,eAAO,MAAM,mBAAmB,kCAA4B,CAAC;AAM7D,wBAAgB,UAAU,CAAC,KAAK,EAAE,iBAAiB,GAAG,IAAI,CAEzD;AAiDD;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,EAAE,EAC3B,UAAU,EAAE,MAAM,GACjB,iBAAiB,CA8BnB;AAMD;;;GAGG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,iBAAiB,EACxB,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,IAAI,CAAC,CAMf;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,WAAW,CAAC,EAAE,MAAM,EACpB,OAAO,CAAC,EAAE,OAAO,GAChB,OAAO,CAAC,OAAO,CAAC,CASlB;AAMD,mEAAmE;AACnE,wBAAgB,+BAA+B,CAC7C,WAAW,EAAE,MAAM,EACnB,SAAS,EAAE,MAAM,EACjB,QAAQ,EAAE,eAAe,EAAE,GAC1B,iBAAiB,CAEnB;AAED,0CAA0C;AAC1C,wBAAsB,kBAAkB,CACtC,OAAO,EAAE,iBAAiB,EAC1B,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAIhE;AAED,4CAA4C;AAC5C,eAAO,MAAM,wBAAwB,kCAAsB,CAAC"}
|
|
@@ -2,9 +2,10 @@
|
|
|
2
2
|
/**
|
|
3
3
|
* Community Contribution Module
|
|
4
4
|
*
|
|
5
|
-
*
|
|
6
|
-
*
|
|
7
|
-
* events
|
|
5
|
+
* Delegates queue, flush, and contributor token operations to
|
|
6
|
+
* @opena2a/contribute. Retains HMA-specific logic for building
|
|
7
|
+
* scan events from SecurityFinding arrays (ecosystem detection,
|
|
8
|
+
* finding-to-summary conversion).
|
|
8
9
|
*
|
|
9
10
|
* Queue file: ~/.opena2a/contribute-queue.json
|
|
10
11
|
* Endpoint: POST api.oa2a.org/api/v1/contribute
|
|
@@ -14,99 +15,29 @@
|
|
|
14
15
|
* no raw finding descriptions, no PII.
|
|
15
16
|
*/
|
|
16
17
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
17
|
-
exports.generateContributorToken = void 0;
|
|
18
|
-
exports.getContributorToken = getContributorToken;
|
|
18
|
+
exports.generateContributorToken = exports.getContributorToken = void 0;
|
|
19
19
|
exports.queueEvent = queueEvent;
|
|
20
20
|
exports.buildScanEvent = buildScanEvent;
|
|
21
21
|
exports.queueAndMaybeFlush = queueAndMaybeFlush;
|
|
22
22
|
exports.flushQueue = flushQueue;
|
|
23
23
|
exports.buildContributionPayloadFromDir = buildContributionPayloadFromDir;
|
|
24
24
|
exports.submitContribution = submitContribution;
|
|
25
|
-
const
|
|
25
|
+
const contribute_1 = require("@opena2a/contribute");
|
|
26
26
|
const fs_1 = require("fs");
|
|
27
|
-
const os_1 = require("os");
|
|
28
27
|
const path_1 = require("path");
|
|
29
28
|
const index_1 = require("../index");
|
|
30
29
|
// ---------------------------------------------------------------------------
|
|
31
|
-
//
|
|
30
|
+
// Contributor token (delegated to @opena2a/contribute)
|
|
32
31
|
// ---------------------------------------------------------------------------
|
|
33
|
-
|
|
34
|
-
const FLUSH_THRESHOLD = 10;
|
|
35
|
-
const MAX_QUEUE_SIZE = 100;
|
|
36
|
-
const TIMEOUT_MS = 10000;
|
|
37
|
-
function getOpena2aHome() {
|
|
38
|
-
return process.env.OPENA2A_HOME || (0, path_1.join)(require('os').homedir(), '.opena2a');
|
|
39
|
-
}
|
|
40
|
-
function ensureDir() {
|
|
41
|
-
const dir = getOpena2aHome();
|
|
42
|
-
if (!(0, fs_1.existsSync)(dir))
|
|
43
|
-
(0, fs_1.mkdirSync)(dir, { recursive: true });
|
|
44
|
-
}
|
|
45
|
-
// ---------------------------------------------------------------------------
|
|
46
|
-
// Contributor token (stable per-device, SHA256-hashed)
|
|
47
|
-
// ---------------------------------------------------------------------------
|
|
48
|
-
function getContributorToken() {
|
|
49
|
-
const home = getOpena2aHome();
|
|
50
|
-
const saltPath = (0, path_1.join)(home, 'contributor-salt');
|
|
51
|
-
let salt;
|
|
52
|
-
if ((0, fs_1.existsSync)(saltPath)) {
|
|
53
|
-
salt = (0, fs_1.readFileSync)(saltPath, 'utf-8').trim();
|
|
54
|
-
}
|
|
55
|
-
else {
|
|
56
|
-
salt = (0, crypto_1.randomBytes)(32).toString('hex');
|
|
57
|
-
ensureDir();
|
|
58
|
-
(0, fs_1.writeFileSync)(saltPath, salt, { mode: 0o600 });
|
|
59
|
-
}
|
|
60
|
-
const input = `${(0, os_1.hostname)()}|${(0, os_1.userInfo)().username}|${salt}`;
|
|
61
|
-
return (0, crypto_1.createHash)('sha256').update(input).digest('hex');
|
|
62
|
-
}
|
|
32
|
+
exports.getContributorToken = contribute_1.getContributorToken;
|
|
63
33
|
// ---------------------------------------------------------------------------
|
|
64
|
-
// Queue operations (
|
|
34
|
+
// Queue operations (delegated to @opena2a/contribute)
|
|
65
35
|
// ---------------------------------------------------------------------------
|
|
66
|
-
function queuePath() {
|
|
67
|
-
return (0, path_1.join)(getOpena2aHome(), 'contribute-queue.json');
|
|
68
|
-
}
|
|
69
|
-
function loadQueue() {
|
|
70
|
-
const path = queuePath();
|
|
71
|
-
if (!(0, fs_1.existsSync)(path))
|
|
72
|
-
return { events: [] };
|
|
73
|
-
try {
|
|
74
|
-
return JSON.parse((0, fs_1.readFileSync)(path, 'utf-8'));
|
|
75
|
-
}
|
|
76
|
-
catch {
|
|
77
|
-
return { events: [] };
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
function saveQueue(queue) {
|
|
81
|
-
ensureDir();
|
|
82
|
-
(0, fs_1.writeFileSync)(queuePath(), JSON.stringify(queue), { mode: 0o600 });
|
|
83
|
-
}
|
|
84
36
|
function queueEvent(event) {
|
|
85
|
-
|
|
86
|
-
queue.events.push(event);
|
|
87
|
-
if (queue.events.length > MAX_QUEUE_SIZE) {
|
|
88
|
-
queue.events = queue.events.slice(-MAX_QUEUE_SIZE);
|
|
89
|
-
}
|
|
90
|
-
saveQueue(queue);
|
|
91
|
-
}
|
|
92
|
-
function shouldFlush() {
|
|
93
|
-
return loadQueue().events.length >= FLUSH_THRESHOLD;
|
|
94
|
-
}
|
|
95
|
-
function buildBatch() {
|
|
96
|
-
const events = loadQueue().events;
|
|
97
|
-
if (events.length === 0)
|
|
98
|
-
return null;
|
|
99
|
-
return {
|
|
100
|
-
contributorToken: getContributorToken(),
|
|
101
|
-
events,
|
|
102
|
-
submittedAt: new Date().toISOString(),
|
|
103
|
-
};
|
|
104
|
-
}
|
|
105
|
-
function clearQueue() {
|
|
106
|
-
saveQueue({ events: [] });
|
|
37
|
+
(0, contribute_1.queueEvent)(event);
|
|
107
38
|
}
|
|
108
39
|
// ---------------------------------------------------------------------------
|
|
109
|
-
// Ecosystem and version detection
|
|
40
|
+
// Ecosystem and version detection (HMA-specific)
|
|
110
41
|
// ---------------------------------------------------------------------------
|
|
111
42
|
function detectEcosystem(directory) {
|
|
112
43
|
if ((0, fs_1.existsSync)((0, path_1.join)(directory, 'package.json')))
|
|
@@ -139,18 +70,7 @@ function detectPackageVersion(directory, ecosystem) {
|
|
|
139
70
|
return '';
|
|
140
71
|
}
|
|
141
72
|
// ---------------------------------------------------------------------------
|
|
142
|
-
//
|
|
143
|
-
// ---------------------------------------------------------------------------
|
|
144
|
-
function resolveOsType() {
|
|
145
|
-
const t = (0, os_1.type)();
|
|
146
|
-
if (t === 'Darwin')
|
|
147
|
-
return 'macos';
|
|
148
|
-
if (t === 'Windows_NT')
|
|
149
|
-
return 'windows';
|
|
150
|
-
return 'linux';
|
|
151
|
-
}
|
|
152
|
-
// ---------------------------------------------------------------------------
|
|
153
|
-
// Build contribution event from scan findings
|
|
73
|
+
// Build contribution event from scan findings (HMA-specific adapter)
|
|
154
74
|
// ---------------------------------------------------------------------------
|
|
155
75
|
function computeVerdict(findings) {
|
|
156
76
|
const critical = findings.filter(f => !f.passed && f.severity === 'critical').length;
|
|
@@ -197,15 +117,15 @@ function buildScanEvent(packageName, directory, findings, durationMs) {
|
|
|
197
117
|
};
|
|
198
118
|
}
|
|
199
119
|
// ---------------------------------------------------------------------------
|
|
200
|
-
// Submit: queue + flush
|
|
120
|
+
// Submit: queue + flush (delegated to @opena2a/contribute)
|
|
201
121
|
// ---------------------------------------------------------------------------
|
|
202
122
|
/**
|
|
203
123
|
* Queue a scan result and flush if threshold reached.
|
|
204
124
|
* Non-blocking, best-effort. Never throws.
|
|
205
125
|
*/
|
|
206
126
|
async function queueAndMaybeFlush(event, registryUrl, verbose) {
|
|
207
|
-
queueEvent(event);
|
|
208
|
-
if (shouldFlush()) {
|
|
127
|
+
(0, contribute_1.queueEvent)(event);
|
|
128
|
+
if ((0, contribute_1.shouldFlush)()) {
|
|
209
129
|
await flushQueue(registryUrl, verbose);
|
|
210
130
|
}
|
|
211
131
|
}
|
|
@@ -214,36 +134,14 @@ async function queueAndMaybeFlush(event, registryUrl, verbose) {
|
|
|
214
134
|
* Returns true if submission succeeded (or queue was empty).
|
|
215
135
|
*/
|
|
216
136
|
async function flushQueue(registryUrl, verbose) {
|
|
217
|
-
const batch = buildBatch();
|
|
137
|
+
const batch = (0, contribute_1.buildBatch)();
|
|
218
138
|
if (!batch)
|
|
219
139
|
return true;
|
|
220
|
-
const
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);
|
|
224
|
-
const response = await fetch(url, {
|
|
225
|
-
method: 'POST',
|
|
226
|
-
headers: {
|
|
227
|
-
'Content-Type': 'application/json',
|
|
228
|
-
'User-Agent': `HackMyAgent-CLI/${index_1.VERSION}`,
|
|
229
|
-
},
|
|
230
|
-
body: JSON.stringify(batch),
|
|
231
|
-
signal: controller.signal,
|
|
232
|
-
});
|
|
233
|
-
clearTimeout(timer);
|
|
234
|
-
if (response.ok) {
|
|
235
|
-
clearQueue();
|
|
236
|
-
if (verbose) {
|
|
237
|
-
process.stderr.write(` Shared: anonymized results for ${batch.events.length} scan(s) (community trust)\n`);
|
|
238
|
-
}
|
|
239
|
-
return true;
|
|
240
|
-
}
|
|
241
|
-
return false;
|
|
242
|
-
}
|
|
243
|
-
catch {
|
|
244
|
-
// Offline or unreachable -- events stay in queue for next time
|
|
245
|
-
return false;
|
|
140
|
+
const success = await (0, contribute_1.submitBatch)(batch, registryUrl, verbose);
|
|
141
|
+
if (success) {
|
|
142
|
+
(0, contribute_1.clearQueue)();
|
|
246
143
|
}
|
|
144
|
+
return success;
|
|
247
145
|
}
|
|
248
146
|
// ---------------------------------------------------------------------------
|
|
249
147
|
// Legacy compatibility exports (used by existing code)
|
|
@@ -254,10 +152,10 @@ function buildContributionPayloadFromDir(packageName, directory, findings) {
|
|
|
254
152
|
}
|
|
255
153
|
/** @deprecated Use flushQueue instead. */
|
|
256
154
|
async function submitContribution(payload, registryUrl) {
|
|
257
|
-
queueEvent(payload);
|
|
155
|
+
(0, contribute_1.queueEvent)(payload);
|
|
258
156
|
const ok = await flushQueue(registryUrl);
|
|
259
157
|
return { success: ok };
|
|
260
158
|
}
|
|
261
159
|
/** @deprecated Kept for backward compat. */
|
|
262
|
-
exports.generateContributorToken = getContributorToken;
|
|
160
|
+
exports.generateContributorToken = exports.getContributorToken;
|
|
263
161
|
//# sourceMappingURL=contribute.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"contribute.js","sourceRoot":"","sources":["../../src/telemetry/contribute.ts"],"names":[],"mappings":";AAAA
|
|
1
|
+
{"version":3,"file":"contribute.js","sourceRoot":"","sources":["../../src/telemetry/contribute.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "hackmyagent",
|
|
3
|
-
"version": "0.11.
|
|
3
|
+
"version": "0.11.11",
|
|
4
4
|
"description": "Find it. Break it. Fix it. The hacker's toolkit for AI agents.",
|
|
5
5
|
"bin": {
|
|
6
6
|
"hackmyagent": "dist/cli.js"
|
|
@@ -31,12 +31,13 @@
|
|
|
31
31
|
"clean": "rm -rf dist"
|
|
32
32
|
},
|
|
33
33
|
"dependencies": {
|
|
34
|
-
"@opena2a/shared": "^0.1.0",
|
|
35
|
-
"@opena2a/aim-core": "^0.1.2",
|
|
36
34
|
"@modelcontextprotocol/sdk": "^1.12.1",
|
|
35
|
+
"@opena2a/aim-core": "^0.1.2",
|
|
36
|
+
"@opena2a/contribute": "^0.1.0",
|
|
37
|
+
"@opena2a/shared": "^0.1.0",
|
|
38
|
+
"ai-trust": "^0.1.1",
|
|
37
39
|
"commander": "^12.0.0",
|
|
38
|
-
"js-yaml": "^4.1.1"
|
|
39
|
-
"ai-trust": "^0.1.1"
|
|
40
|
+
"js-yaml": "^4.1.1"
|
|
40
41
|
},
|
|
41
42
|
"devDependencies": {
|
|
42
43
|
"@types/js-yaml": "^4.0.9",
|