hackmyagent 0.14.1 → 0.14.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.
Files changed (127) hide show
  1. package/dist/.integrity-manifest.json +1 -1
  2. package/dist/arp/engine/event-engine.d.ts.map +1 -1
  3. package/dist/arp/engine/event-engine.js +8 -6
  4. package/dist/arp/engine/event-engine.js.map +1 -1
  5. package/dist/arp/intelligence/coordinator.d.ts.map +1 -1
  6. package/dist/arp/intelligence/coordinator.js +17 -12
  7. package/dist/arp/intelligence/coordinator.js.map +1 -1
  8. package/dist/arp/intelligence/nanomind-l1.js +2 -2
  9. package/dist/arp/intelligence/nanomind-l1.js.map +1 -1
  10. package/dist/arp/interceptors/process.d.ts.map +1 -1
  11. package/dist/arp/interceptors/process.js +40 -5
  12. package/dist/arp/interceptors/process.js.map +1 -1
  13. package/dist/arp/proxy/server.d.ts +6 -0
  14. package/dist/arp/proxy/server.d.ts.map +1 -1
  15. package/dist/arp/proxy/server.js +40 -14
  16. package/dist/arp/proxy/server.js.map +1 -1
  17. package/dist/arp/telemetry/gtin.d.ts +1 -1
  18. package/dist/arp/telemetry/gtin.d.ts.map +1 -1
  19. package/dist/arp/telemetry/gtin.js +4 -0
  20. package/dist/arp/telemetry/gtin.js.map +1 -1
  21. package/dist/attack/payloads/index.d.ts +2 -1
  22. package/dist/attack/payloads/index.d.ts.map +1 -1
  23. package/dist/attack/payloads/index.js +5 -1
  24. package/dist/attack/payloads/index.js.map +1 -1
  25. package/dist/attack/payloads/policy-enforcement-integrity.d.ts +13 -0
  26. package/dist/attack/payloads/policy-enforcement-integrity.d.ts.map +1 -0
  27. package/dist/attack/payloads/policy-enforcement-integrity.js +217 -0
  28. package/dist/attack/payloads/policy-enforcement-integrity.js.map +1 -0
  29. package/dist/attack/scanner.d.ts.map +1 -1
  30. package/dist/attack/scanner.js +1 -0
  31. package/dist/attack/scanner.js.map +1 -1
  32. package/dist/attack/types.d.ts +1 -1
  33. package/dist/attack/types.d.ts.map +1 -1
  34. package/dist/attack/types.js +5 -0
  35. package/dist/attack/types.js.map +1 -1
  36. package/dist/attack-engine/types.d.ts +1 -1
  37. package/dist/attack-engine/types.d.ts.map +1 -1
  38. package/dist/attack-engine/types.js.map +1 -1
  39. package/dist/cli.js +18 -11
  40. package/dist/cli.js.map +1 -1
  41. package/dist/hardening/scanner.d.ts +18 -4
  42. package/dist/hardening/scanner.d.ts.map +1 -1
  43. package/dist/hardening/scanner.js +76 -18
  44. package/dist/hardening/scanner.js.map +1 -1
  45. package/dist/nanomind-core/inference/tme-classifier.d.ts.map +1 -1
  46. package/dist/nanomind-core/inference/tme-classifier.js +0 -1
  47. package/dist/nanomind-core/inference/tme-classifier.js.map +1 -1
  48. package/dist/nanomind-core/scanner-bridge.d.ts.map +1 -1
  49. package/dist/nanomind-core/scanner-bridge.js +8 -0
  50. package/dist/nanomind-core/scanner-bridge.js.map +1 -1
  51. package/package.json +1 -1
  52. package/dist/abgr/controls.d.ts +0 -35
  53. package/dist/abgr/controls.d.ts.map +0 -1
  54. package/dist/abgr/controls.js +0 -1058
  55. package/dist/abgr/controls.js.map +0 -1
  56. package/dist/abgr/detector.d.ts +0 -45
  57. package/dist/abgr/detector.d.ts.map +0 -1
  58. package/dist/abgr/detector.js +0 -175
  59. package/dist/abgr/detector.js.map +0 -1
  60. package/dist/abgr/index.d.ts +0 -24
  61. package/dist/abgr/index.d.ts.map +0 -1
  62. package/dist/abgr/index.js +0 -50
  63. package/dist/abgr/index.js.map +0 -1
  64. package/dist/abgr/scorer.d.ts +0 -36
  65. package/dist/abgr/scorer.d.ts.map +0 -1
  66. package/dist/abgr/scorer.js +0 -205
  67. package/dist/abgr/scorer.js.map +0 -1
  68. package/dist/abgr/templates.d.ts +0 -35
  69. package/dist/abgr/templates.d.ts.map +0 -1
  70. package/dist/abgr/templates.js +0 -668
  71. package/dist/abgr/templates.js.map +0 -1
  72. package/dist/abgr/tier.d.ts +0 -27
  73. package/dist/abgr/tier.d.ts.map +0 -1
  74. package/dist/abgr/tier.js +0 -115
  75. package/dist/abgr/tier.js.map +0 -1
  76. package/dist/abgr/types.d.ts +0 -59
  77. package/dist/abgr/types.d.ts.map +0 -1
  78. package/dist/abgr/types.js +0 -10
  79. package/dist/abgr/types.js.map +0 -1
  80. package/dist/agent-scan/checks.d.ts +0 -6
  81. package/dist/agent-scan/checks.d.ts.map +0 -1
  82. package/dist/agent-scan/checks.js +0 -93
  83. package/dist/agent-scan/checks.js.map +0 -1
  84. package/dist/agent-scan/index.d.ts +0 -10
  85. package/dist/agent-scan/index.d.ts.map +0 -1
  86. package/dist/agent-scan/index.js +0 -16
  87. package/dist/agent-scan/index.js.map +0 -1
  88. package/dist/agent-scan/scanner.d.ts +0 -31
  89. package/dist/agent-scan/scanner.d.ts.map +0 -1
  90. package/dist/agent-scan/scanner.js +0 -484
  91. package/dist/agent-scan/scanner.js.map +0 -1
  92. package/dist/agent-scan/types.d.ts +0 -63
  93. package/dist/agent-scan/types.d.ts.map +0 -1
  94. package/dist/agent-scan/types.js +0 -10
  95. package/dist/agent-scan/types.js.map +0 -1
  96. package/dist/hardening/llm-checks.d.ts +0 -18
  97. package/dist/hardening/llm-checks.d.ts.map +0 -1
  98. package/dist/hardening/llm-checks.js +0 -434
  99. package/dist/hardening/llm-checks.js.map +0 -1
  100. package/dist/hardening/mcp-tool-enum.d.ts +0 -45
  101. package/dist/hardening/mcp-tool-enum.d.ts.map +0 -1
  102. package/dist/hardening/mcp-tool-enum.js +0 -315
  103. package/dist/hardening/mcp-tool-enum.js.map +0 -1
  104. package/dist/hardening/shell-checks.d.ts +0 -21
  105. package/dist/hardening/shell-checks.d.ts.map +0 -1
  106. package/dist/hardening/shell-checks.js +0 -236
  107. package/dist/hardening/shell-checks.js.map +0 -1
  108. package/dist/nanomind-core/telemetry/auto-update.d.ts +0 -27
  109. package/dist/nanomind-core/telemetry/auto-update.d.ts.map +0 -1
  110. package/dist/nanomind-core/telemetry/auto-update.js +0 -129
  111. package/dist/nanomind-core/telemetry/auto-update.js.map +0 -1
  112. package/dist/nanomind-core/telemetry/client.d.ts +0 -66
  113. package/dist/nanomind-core/telemetry/client.d.ts.map +0 -1
  114. package/dist/nanomind-core/telemetry/client.js +0 -123
  115. package/dist/nanomind-core/telemetry/client.js.map +0 -1
  116. package/dist/nanomind-core/telemetry/config.d.ts +0 -33
  117. package/dist/nanomind-core/telemetry/config.d.ts.map +0 -1
  118. package/dist/nanomind-core/telemetry/config.js +0 -119
  119. package/dist/nanomind-core/telemetry/config.js.map +0 -1
  120. package/dist/nanomind-core/telemetry/index.d.ts +0 -15
  121. package/dist/nanomind-core/telemetry/index.d.ts.map +0 -1
  122. package/dist/nanomind-core/telemetry/index.js +0 -27
  123. package/dist/nanomind-core/telemetry/index.js.map +0 -1
  124. package/dist/registry/contribution.d.ts +0 -178
  125. package/dist/registry/contribution.d.ts.map +0 -1
  126. package/dist/registry/contribution.js +0 -272
  127. package/dist/registry/contribution.js.map +0 -1
@@ -1,178 +0,0 @@
1
- /**
2
- * Anonymous registry contribution for scan results.
3
- *
4
- * When users opt in (--contribute flag), scan results are submitted
5
- * anonymously to the OpenA2A registry for aggregate security intelligence.
6
- *
7
- * What IS sent:
8
- * - SHA256 hash of scanned artifact (for deduplication, not identification)
9
- * - Scan type and version
10
- * - Finding IDs and severities (no file paths or content)
11
- * - Domain scores (for governance scans)
12
- * - Agent tier classification
13
- * - Timestamp and scanner version
14
- *
15
- * What is NEVER sent:
16
- * - File paths, file content, or source code
17
- * - Usernames, hostnames, or IP addresses
18
- * - Environment variables or credential values
19
- * - Directory structure or project names
20
- */
21
- export type ContributionType = 'hardening' | 'governance' | 'mcp-enumeration' | 'skill-check' | 'attack' | 'history' | 'scope' | 'agent-scan';
22
- export interface ContributionPayload {
23
- contributionId: string;
24
- artifactHash: string;
25
- scanType: ContributionType;
26
- scannerVersion: string;
27
- scanTimestamp: string;
28
- scanDurationMs?: number;
29
- totalFindings: number;
30
- criticalCount: number;
31
- highCount: number;
32
- mediumCount: number;
33
- lowCount: number;
34
- findingIds: string[];
35
- score?: number;
36
- maxScore?: number;
37
- grade?: string;
38
- governance?: {
39
- tier: string;
40
- domainScores: Array<{
41
- domain: string;
42
- score: number;
43
- controlsPassed: number;
44
- controlsTotal: number;
45
- }>;
46
- criticalFailures: string[];
47
- };
48
- mcpEnumeration?: {
49
- serversScanned: number;
50
- totalTools: number;
51
- dangerousToolCount: number;
52
- categories: string[];
53
- };
54
- skillCheck?: {
55
- riskLevel: string;
56
- verified: boolean;
57
- permissionCount: number;
58
- dangerousPermissions: number;
59
- };
60
- attack?: {
61
- categories: string[];
62
- payloadsRun: number;
63
- payloadsBlocked: number;
64
- payloadsBypassed: number;
65
- blockRate: number;
66
- };
67
- agentScan?: {
68
- checksTotal: number;
69
- checksPassed: number;
70
- criticalFailures: number;
71
- hasPublicKey: boolean;
72
- hasAttestation: boolean;
73
- trustScore?: number;
74
- };
75
- }
76
- /**
77
- * Generate SHA256 hash of content for artifact identification.
78
- * The hash allows deduplication without revealing content.
79
- */
80
- export declare function hashArtifact(content: string): string;
81
- /**
82
- * Generate a random contribution ID.
83
- */
84
- export declare function generateContributionId(): string;
85
- /**
86
- * Strip PII from a finding list -- return only check IDs.
87
- */
88
- export declare function extractFindingIds(findings: Array<{
89
- checkId: string;
90
- }>): string[];
91
- /**
92
- * Count findings by severity.
93
- */
94
- export declare function countBySeverity(findings: Array<{
95
- severity: string;
96
- passed?: boolean;
97
- }>): {
98
- critical: number;
99
- high: number;
100
- medium: number;
101
- low: number;
102
- };
103
- /**
104
- * Build a contribution payload from hardening scan results.
105
- */
106
- export declare function buildHardeningContribution(scannerVersion: string, artifactContent: string, findings: Array<{
107
- checkId: string;
108
- severity: string;
109
- passed?: boolean;
110
- }>, score: number, maxScore: number, durationMs?: number): ContributionPayload;
111
- /**
112
- * Build a contribution payload from governance scan results.
113
- */
114
- export declare function buildGovernanceContribution(scannerVersion: string, artifactContent: string, governanceScore: {
115
- overall: number;
116
- grade: string;
117
- tier: string;
118
- domains: Array<{
119
- domain: string;
120
- score: number;
121
- controlsPassed: number;
122
- controlsTotal: number;
123
- }>;
124
- results: Array<{
125
- controlId: string;
126
- severity: string;
127
- passed: boolean;
128
- }>;
129
- criticalFailures: string[];
130
- }, durationMs?: number): ContributionPayload;
131
- /**
132
- * Build a contribution payload from MCP tool enumeration.
133
- */
134
- export declare function buildMcpContribution(scannerVersion: string, configContent: string, serverResults: Array<{
135
- serverName: string;
136
- toolCount: number;
137
- findings: Array<{
138
- checkId: string;
139
- severity: string;
140
- }>;
141
- }>, durationMs?: number): ContributionPayload;
142
- /**
143
- * Build a contribution payload from attack scan results.
144
- */
145
- export declare function buildAttackContribution(scannerVersion: string, targetIdentifier: string, attackReport: {
146
- categories: string[];
147
- totalPayloads: number;
148
- blocked: number;
149
- bypassed: number;
150
- blockRate: number;
151
- }, durationMs?: number): ContributionPayload;
152
- /**
153
- * Build a contribution payload from agent card scan results.
154
- */
155
- export declare function buildAgentScanContribution(scannerVersion: string, artifactContent: string, scanResult: {
156
- findings: Array<{
157
- checkId: string;
158
- severity: string;
159
- passed: boolean;
160
- }>;
161
- score: number;
162
- grade: string;
163
- criticalFailures: string[];
164
- card: {
165
- publicKey?: string;
166
- aimAttestation?: {
167
- trustScore?: number;
168
- } | null;
169
- };
170
- }, durationMs?: number): ContributionPayload;
171
- /**
172
- * Submit contribution to registry. Never throws -- contribution failure is non-fatal.
173
- */
174
- export declare function submitContribution(registryUrl: string, payload: ContributionPayload): Promise<{
175
- status: string;
176
- message?: string;
177
- }>;
178
- //# sourceMappingURL=contribution.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contribution.d.ts","sourceRoot":"","sources":["../../src/registry/contribution.ts"],"names":[],"mappings":"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"}
@@ -1,272 +0,0 @@
1
- "use strict";
2
- /**
3
- * Anonymous registry contribution for scan results.
4
- *
5
- * When users opt in (--contribute flag), scan results are submitted
6
- * anonymously to the OpenA2A registry for aggregate security intelligence.
7
- *
8
- * What IS sent:
9
- * - SHA256 hash of scanned artifact (for deduplication, not identification)
10
- * - Scan type and version
11
- * - Finding IDs and severities (no file paths or content)
12
- * - Domain scores (for governance scans)
13
- * - Agent tier classification
14
- * - Timestamp and scanner version
15
- *
16
- * What is NEVER sent:
17
- * - File paths, file content, or source code
18
- * - Usernames, hostnames, or IP addresses
19
- * - Environment variables or credential values
20
- * - Directory structure or project names
21
- */
22
- var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
23
- if (k2 === undefined) k2 = k;
24
- var desc = Object.getOwnPropertyDescriptor(m, k);
25
- if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
26
- desc = { enumerable: true, get: function() { return m[k]; } };
27
- }
28
- Object.defineProperty(o, k2, desc);
29
- }) : (function(o, m, k, k2) {
30
- if (k2 === undefined) k2 = k;
31
- o[k2] = m[k];
32
- }));
33
- var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
34
- Object.defineProperty(o, "default", { enumerable: true, value: v });
35
- }) : function(o, v) {
36
- o["default"] = v;
37
- });
38
- var __importStar = (this && this.__importStar) || (function () {
39
- var ownKeys = function(o) {
40
- ownKeys = Object.getOwnPropertyNames || function (o) {
41
- var ar = [];
42
- for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
43
- return ar;
44
- };
45
- return ownKeys(o);
46
- };
47
- return function (mod) {
48
- if (mod && mod.__esModule) return mod;
49
- var result = {};
50
- if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
51
- __setModuleDefault(result, mod);
52
- return result;
53
- };
54
- })();
55
- Object.defineProperty(exports, "__esModule", { value: true });
56
- exports.hashArtifact = hashArtifact;
57
- exports.generateContributionId = generateContributionId;
58
- exports.extractFindingIds = extractFindingIds;
59
- exports.countBySeverity = countBySeverity;
60
- exports.buildHardeningContribution = buildHardeningContribution;
61
- exports.buildGovernanceContribution = buildGovernanceContribution;
62
- exports.buildMcpContribution = buildMcpContribution;
63
- exports.buildAttackContribution = buildAttackContribution;
64
- exports.buildAgentScanContribution = buildAgentScanContribution;
65
- exports.submitContribution = submitContribution;
66
- const crypto = __importStar(require("crypto"));
67
- /**
68
- * Generate SHA256 hash of content for artifact identification.
69
- * The hash allows deduplication without revealing content.
70
- */
71
- function hashArtifact(content) {
72
- return crypto.createHash('sha256').update(content).digest('hex');
73
- }
74
- /**
75
- * Generate a random contribution ID.
76
- */
77
- function generateContributionId() {
78
- return crypto.randomUUID();
79
- }
80
- /**
81
- * Strip PII from a finding list -- return only check IDs.
82
- */
83
- function extractFindingIds(findings) {
84
- return [...new Set(findings.map(f => f.checkId))].sort();
85
- }
86
- /**
87
- * Count findings by severity.
88
- */
89
- function countBySeverity(findings) {
90
- const failed = findings.filter(f => f.passed === false);
91
- return {
92
- critical: failed.filter(f => f.severity === 'critical').length,
93
- high: failed.filter(f => f.severity === 'high').length,
94
- medium: failed.filter(f => f.severity === 'medium').length,
95
- low: failed.filter(f => f.severity === 'low').length,
96
- };
97
- }
98
- /**
99
- * Build a contribution payload from hardening scan results.
100
- */
101
- function buildHardeningContribution(scannerVersion, artifactContent, findings, score, maxScore, durationMs) {
102
- const counts = countBySeverity(findings);
103
- return {
104
- contributionId: generateContributionId(),
105
- artifactHash: hashArtifact(artifactContent),
106
- scanType: 'hardening',
107
- scannerVersion,
108
- scanTimestamp: new Date().toISOString(),
109
- scanDurationMs: durationMs,
110
- totalFindings: counts.critical + counts.high + counts.medium + counts.low,
111
- criticalCount: counts.critical,
112
- highCount: counts.high,
113
- mediumCount: counts.medium,
114
- lowCount: counts.low,
115
- findingIds: extractFindingIds(findings.filter(f => !f.passed)),
116
- score,
117
- maxScore,
118
- };
119
- }
120
- /**
121
- * Build a contribution payload from governance scan results.
122
- */
123
- function buildGovernanceContribution(scannerVersion, artifactContent, governanceScore, durationMs) {
124
- const failed = governanceScore.results.filter(r => !r.passed);
125
- const counts = countBySeverity(failed.map(r => ({ severity: r.severity, passed: false })));
126
- return {
127
- contributionId: generateContributionId(),
128
- artifactHash: hashArtifact(artifactContent),
129
- scanType: 'governance',
130
- scannerVersion,
131
- scanTimestamp: new Date().toISOString(),
132
- scanDurationMs: durationMs,
133
- totalFindings: failed.length,
134
- criticalCount: counts.critical,
135
- highCount: counts.high,
136
- mediumCount: counts.medium,
137
- lowCount: counts.low,
138
- findingIds: failed.map(r => r.controlId),
139
- score: governanceScore.overall,
140
- maxScore: 100,
141
- grade: governanceScore.grade,
142
- governance: {
143
- tier: governanceScore.tier,
144
- domainScores: governanceScore.domains.map(d => ({
145
- domain: d.domain,
146
- score: d.score,
147
- controlsPassed: d.controlsPassed,
148
- controlsTotal: d.controlsTotal,
149
- })),
150
- criticalFailures: governanceScore.criticalFailures,
151
- },
152
- };
153
- }
154
- /**
155
- * Build a contribution payload from MCP tool enumeration.
156
- */
157
- function buildMcpContribution(scannerVersion, configContent, serverResults, durationMs) {
158
- const allFindings = serverResults.flatMap(s => s.findings);
159
- const counts = countBySeverity(allFindings.map(f => ({ severity: f.severity, passed: false })));
160
- const categories = new Set();
161
- for (const f of allFindings) {
162
- if (f.checkId === 'MCPTOOL-001')
163
- categories.add('execution');
164
- if (f.checkId === 'MCPTOOL-002')
165
- categories.add('filesystem');
166
- if (f.checkId === 'MCPTOOL-003')
167
- categories.add('network');
168
- if (f.checkId === 'MCPTOOL-004')
169
- categories.add('credential');
170
- }
171
- return {
172
- contributionId: generateContributionId(),
173
- artifactHash: hashArtifact(configContent),
174
- scanType: 'mcp-enumeration',
175
- scannerVersion,
176
- scanTimestamp: new Date().toISOString(),
177
- scanDurationMs: durationMs,
178
- totalFindings: allFindings.length,
179
- criticalCount: counts.critical,
180
- highCount: counts.high,
181
- mediumCount: counts.medium,
182
- lowCount: counts.low,
183
- findingIds: [...new Set(allFindings.map(f => f.checkId))].sort(),
184
- mcpEnumeration: {
185
- serversScanned: serverResults.length,
186
- totalTools: serverResults.reduce((sum, s) => sum + s.toolCount, 0),
187
- dangerousToolCount: allFindings.length,
188
- categories: [...categories],
189
- },
190
- };
191
- }
192
- /**
193
- * Build a contribution payload from attack scan results.
194
- */
195
- function buildAttackContribution(scannerVersion, targetIdentifier, attackReport, durationMs) {
196
- return {
197
- contributionId: generateContributionId(),
198
- artifactHash: hashArtifact(targetIdentifier),
199
- scanType: 'attack',
200
- scannerVersion,
201
- scanTimestamp: new Date().toISOString(),
202
- scanDurationMs: durationMs,
203
- totalFindings: attackReport.bypassed,
204
- criticalCount: 0,
205
- highCount: attackReport.bypassed,
206
- mediumCount: 0,
207
- lowCount: 0,
208
- findingIds: attackReport.categories,
209
- attack: {
210
- categories: attackReport.categories,
211
- payloadsRun: attackReport.totalPayloads,
212
- payloadsBlocked: attackReport.blocked,
213
- payloadsBypassed: attackReport.bypassed,
214
- blockRate: attackReport.blockRate,
215
- },
216
- };
217
- }
218
- /**
219
- * Build a contribution payload from agent card scan results.
220
- */
221
- function buildAgentScanContribution(scannerVersion, artifactContent, scanResult, durationMs) {
222
- const counts = countBySeverity(scanResult.findings.map(f => ({ severity: f.severity, passed: f.passed })));
223
- return {
224
- contributionId: generateContributionId(),
225
- artifactHash: hashArtifact(artifactContent),
226
- scanType: 'agent-scan',
227
- scannerVersion,
228
- scanTimestamp: new Date().toISOString(),
229
- scanDurationMs: durationMs,
230
- totalFindings: counts.critical + counts.high + counts.medium + counts.low,
231
- criticalCount: counts.critical,
232
- highCount: counts.high,
233
- mediumCount: counts.medium,
234
- lowCount: counts.low,
235
- findingIds: extractFindingIds(scanResult.findings.filter(f => !f.passed)),
236
- score: scanResult.score,
237
- maxScore: 100,
238
- grade: scanResult.grade,
239
- agentScan: {
240
- checksTotal: scanResult.findings.length,
241
- checksPassed: scanResult.findings.filter(f => f.passed).length,
242
- criticalFailures: scanResult.criticalFailures.length,
243
- hasPublicKey: typeof scanResult.card.publicKey === 'string' && scanResult.card.publicKey.length > 0,
244
- hasAttestation: scanResult.card.aimAttestation != null,
245
- trustScore: scanResult.card.aimAttestation?.trustScore,
246
- },
247
- };
248
- }
249
- /**
250
- * Submit contribution to registry. Never throws -- contribution failure is non-fatal.
251
- */
252
- async function submitContribution(registryUrl, payload) {
253
- try {
254
- const response = await fetch(`${registryUrl}/api/v1/registry/community/contribute`, {
255
- method: 'POST',
256
- headers: {
257
- 'Content-Type': 'application/json',
258
- 'User-Agent': 'HackMyAgent-CLI',
259
- },
260
- body: JSON.stringify(payload),
261
- });
262
- if (!response.ok) {
263
- const body = await response.json().catch(() => ({}));
264
- return { status: 'failed', message: body.message || `HTTP ${response.status}` };
265
- }
266
- return await response.json();
267
- }
268
- catch {
269
- return { status: 'failed', message: 'Network error' };
270
- }
271
- }
272
- //# sourceMappingURL=contribution.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"contribution.js","sourceRoot":"","sources":["../../src/registry/contribution.ts"],"names":[],"mappings":"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"}