hackmyagent 0.12.0 → 0.12.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 (55) hide show
  1. package/README.md +21 -2
  2. package/dist/.integrity-manifest.json +1 -1
  3. package/dist/arp/intelligence/ast-monitor.d.ts +62 -0
  4. package/dist/arp/intelligence/ast-monitor.d.ts.map +1 -0
  5. package/dist/arp/intelligence/ast-monitor.js +197 -0
  6. package/dist/arp/intelligence/ast-monitor.js.map +1 -0
  7. package/dist/attack/types.d.ts +2 -0
  8. package/dist/attack/types.d.ts.map +1 -1
  9. package/dist/attack/types.js.map +1 -1
  10. package/dist/cli.js +141 -7
  11. package/dist/cli.js.map +1 -1
  12. package/dist/hardening/scanner.d.ts.map +1 -1
  13. package/dist/hardening/scanner.js +11 -0
  14. package/dist/hardening/scanner.js.map +1 -1
  15. package/dist/index.d.ts +2 -0
  16. package/dist/index.d.ts.map +1 -1
  17. package/dist/index.js +5 -2
  18. package/dist/index.js.map +1 -1
  19. package/dist/nanomind-core/compiler/semantic-compiler.d.ts.map +1 -1
  20. package/dist/nanomind-core/compiler/semantic-compiler.js +107 -11
  21. package/dist/nanomind-core/compiler/semantic-compiler.js.map +1 -1
  22. package/dist/nanomind-core/index.d.ts +6 -0
  23. package/dist/nanomind-core/index.d.ts.map +1 -1
  24. package/dist/nanomind-core/index.js +23 -1
  25. package/dist/nanomind-core/index.js.map +1 -1
  26. package/dist/nanomind-core/inference/tme-classifier.d.ts +62 -0
  27. package/dist/nanomind-core/inference/tme-classifier.d.ts.map +1 -0
  28. package/dist/nanomind-core/inference/tme-classifier.js +176 -0
  29. package/dist/nanomind-core/inference/tme-classifier.js.map +1 -0
  30. package/dist/nanomind-core/verification/ast-validator.d.ts +55 -0
  31. package/dist/nanomind-core/verification/ast-validator.d.ts.map +1 -0
  32. package/dist/nanomind-core/verification/ast-validator.js +228 -0
  33. package/dist/nanomind-core/verification/ast-validator.js.map +1 -0
  34. package/dist/scanner/external-scanner.d.ts.map +1 -1
  35. package/dist/scanner/external-scanner.js +37 -30
  36. package/dist/scanner/external-scanner.js.map +1 -1
  37. package/dist/simulation/index.d.ts +1 -1
  38. package/dist/simulation/index.js +1 -1
  39. package/dist/wild/browser.d.ts +44 -0
  40. package/dist/wild/browser.d.ts.map +1 -0
  41. package/dist/wild/browser.js +222 -0
  42. package/dist/wild/browser.js.map +1 -0
  43. package/dist/wild/index.d.ts +20 -0
  44. package/dist/wild/index.d.ts.map +1 -0
  45. package/dist/wild/index.js +173 -0
  46. package/dist/wild/index.js.map +1 -0
  47. package/dist/wild/scorer.d.ts +29 -0
  48. package/dist/wild/scorer.d.ts.map +1 -0
  49. package/dist/wild/scorer.js +101 -0
  50. package/dist/wild/scorer.js.map +1 -0
  51. package/dist/wild/types.d.ts +95 -0
  52. package/dist/wild/types.d.ts.map +1 -0
  53. package/dist/wild/types.js +8 -0
  54. package/dist/wild/types.js.map +1 -0
  55. package/package.json +2 -1
@@ -0,0 +1,197 @@
1
+ "use strict";
2
+ /**
3
+ * AST-Aware Runtime Monitor
4
+ *
5
+ * Connects ARP runtime monitoring to the NanoMind Semantic Compiler.
6
+ * Compares observed runtime events against the AST's declared behavioral
7
+ * envelope. Flags events that fall outside what the AST predicted.
8
+ *
9
+ * This is real-time behavioral verification:
10
+ * AST declares: "this skill reads customer data"
11
+ * ARP observes: "this skill wrote to /etc/passwd"
12
+ * Monitor flags: capability exercise outside declared scope
13
+ *
14
+ * Architecture:
15
+ * AST (compiled at scan time) → ASTMonitor (loaded at runtime)
16
+ * ARP events → compared against AST declarations → drift detected
17
+ */
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.ASTMonitor = void 0;
20
+ /**
21
+ * AST-Aware Runtime Monitor.
22
+ *
23
+ * Loads a SecurityAST at startup and compares every ARP event against it.
24
+ * When an event falls outside the AST's declared behavioral envelope,
25
+ * it generates an ASTDriftEvent.
26
+ */
27
+ class ASTMonitor {
28
+ constructor() {
29
+ this.ast = null;
30
+ this.declaredCapNames = new Set();
31
+ this.hasOverrideResistance = false;
32
+ this.maxDeclaredRisk = 'low';
33
+ }
34
+ /**
35
+ * Load an AST for monitoring. Call this when the agent starts
36
+ * or when the AST is recompiled after a skill update.
37
+ */
38
+ loadAST(ast) {
39
+ this.ast = ast;
40
+ this.declaredCapNames = new Set(ast.declaredCapabilities.map(c => c.name));
41
+ // Pre-compute risk profile
42
+ this.hasOverrideResistance = ast.declaredConstraints.some(c => c.domain === 'behavioral_constraint' && c.enforceability > 0.5);
43
+ const riskOrder = ['low', 'medium', 'high', 'critical'];
44
+ for (const cap of ast.declaredCapabilities) {
45
+ if (riskOrder.indexOf(cap.riskLevel) > riskOrder.indexOf(this.maxDeclaredRisk)) {
46
+ this.maxDeclaredRisk = cap.riskLevel;
47
+ }
48
+ }
49
+ }
50
+ /**
51
+ * Check a runtime event against the loaded AST.
52
+ * Returns null if the event is within the declared envelope,
53
+ * or an ASTDriftEvent if it falls outside.
54
+ */
55
+ checkEvent(event) {
56
+ if (!this.ast)
57
+ return null;
58
+ // Check 1: Capability scope violation
59
+ const capDrift = this.checkCapabilityScope(event);
60
+ if (capDrift)
61
+ return capDrift;
62
+ // Check 2: Data access outside declared patterns
63
+ const dataDrift = this.checkDataAccess(event);
64
+ if (dataDrift)
65
+ return dataDrift;
66
+ // Check 3: External communication not declared
67
+ const netDrift = this.checkNetworkAccess(event);
68
+ if (netDrift)
69
+ return netDrift;
70
+ // Check 4: Override attempt detection
71
+ const overrideDrift = this.checkOverrideAttempt(event);
72
+ if (overrideDrift)
73
+ return overrideDrift;
74
+ return null;
75
+ }
76
+ // ============================================================================
77
+ // Event Checks
78
+ // ============================================================================
79
+ checkCapabilityScope(event) {
80
+ if (!this.ast)
81
+ return null;
82
+ // Map ARP event source to capability name
83
+ const capName = mapEventToCapability(event);
84
+ if (!capName)
85
+ return null;
86
+ // Check if this capability was declared
87
+ if (!this.declaredCapNames.has(capName)) {
88
+ // Check for wildcard matches (db.* covers db.read, db.write)
89
+ const hasWildcard = [...this.declaredCapNames].some(d => {
90
+ const prefix = d.replace('.*', '');
91
+ return capName.startsWith(prefix);
92
+ });
93
+ if (!hasWildcard) {
94
+ return {
95
+ event,
96
+ violation: 'Undeclared capability exercised at runtime',
97
+ declared: `Declared: ${[...this.declaredCapNames].join(', ')}`,
98
+ observed: `Observed: ${capName}`,
99
+ severity: event.severity === 'critical' ? 'critical' : 'high',
100
+ action: 'throttle',
101
+ };
102
+ }
103
+ }
104
+ return null;
105
+ }
106
+ checkDataAccess(event) {
107
+ if (!this.ast)
108
+ return null;
109
+ // Check if event involves data access outside declared patterns
110
+ const data = event.data;
111
+ if (!data)
112
+ return null;
113
+ const accessedPath = (data.path || data.url || data.query || '');
114
+ if (!accessedPath)
115
+ return null;
116
+ // Check against declared data access patterns
117
+ const declaredDataTypes = this.ast.declaredDataAccess.map(d => d.dataType);
118
+ // Sensitive data access not in declarations
119
+ const sensitivePatterns = ['password', 'credential', 'secret', 'token', 'ssn', 'medical'];
120
+ const accessesSensitive = sensitivePatterns.some(p => accessedPath.toLowerCase().includes(p));
121
+ const declaresSensitive = declaredDataTypes.some(d => ['credentials', 'pii', 'financial'].includes(d));
122
+ if (accessesSensitive && !declaresSensitive) {
123
+ return {
124
+ event,
125
+ violation: 'Sensitive data access not declared',
126
+ declared: `Declared data types: ${declaredDataTypes.join(', ')}`,
127
+ observed: `Accessed: ${accessedPath}`,
128
+ severity: 'critical',
129
+ action: 'suspend',
130
+ };
131
+ }
132
+ return null;
133
+ }
134
+ checkNetworkAccess(event) {
135
+ if (!this.ast)
136
+ return null;
137
+ const data = event.data;
138
+ if (!data)
139
+ return null;
140
+ const url = (data.url || data.endpoint || data.host || '');
141
+ if (!url)
142
+ return null;
143
+ // Check if network access was declared
144
+ const hasNetworkCap = this.declaredCapNames.has('api.call') ||
145
+ this.declaredCapNames.has('http.request') ||
146
+ [...this.declaredCapNames].some(c => c.includes('external'));
147
+ const isExternal = !url.includes('localhost') && !url.includes('127.0.0.1') && !url.includes('internal');
148
+ if (isExternal && !hasNetworkCap) {
149
+ return {
150
+ event,
151
+ violation: 'External network access not declared',
152
+ declared: 'No external network capability declared',
153
+ observed: `External request to: ${url}`,
154
+ severity: 'high',
155
+ action: 'alert',
156
+ };
157
+ }
158
+ return null;
159
+ }
160
+ checkOverrideAttempt(event) {
161
+ if (!this.ast)
162
+ return null;
163
+ const description = (event.description || '').toLowerCase();
164
+ const isOverrideAttempt = /ignore.*previous|override.*instruction|new.*task|bypass.*security/i.test(description);
165
+ if (isOverrideAttempt && !this.hasOverrideResistance) {
166
+ return {
167
+ event,
168
+ violation: 'Override attempt detected and no override resistance declared',
169
+ declared: 'No override resistance in constraints',
170
+ observed: `Override language detected: "${event.description?.slice(0, 80)}"`,
171
+ severity: 'critical',
172
+ action: 'kill',
173
+ };
174
+ }
175
+ return null;
176
+ }
177
+ }
178
+ exports.ASTMonitor = ASTMonitor;
179
+ // ============================================================================
180
+ // Event → Capability Mapping
181
+ // ============================================================================
182
+ function mapEventToCapability(event) {
183
+ const source = event.source?.toLowerCase() ?? '';
184
+ const desc = (event.description || '').toLowerCase();
185
+ if (source.includes('network') || desc.includes('http') || desc.includes('fetch'))
186
+ return 'api.call';
187
+ if (source.includes('filesystem') || desc.includes('file'))
188
+ return desc.includes('write') ? 'file.write' : 'file.read';
189
+ if (source.includes('process') || desc.includes('exec') || desc.includes('spawn'))
190
+ return 'process.execute';
191
+ if (source.includes('memory') || desc.includes('memory'))
192
+ return desc.includes('write') ? 'memory.write' : 'memory.read';
193
+ if (desc.includes('database') || desc.includes('query'))
194
+ return desc.includes('write') ? 'db.write' : 'db.read';
195
+ return null;
196
+ }
197
+ //# sourceMappingURL=ast-monitor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"ast-monitor.js","sourceRoot":"","sources":["../../../src/arp/intelligence/ast-monitor.ts"],"names":[],"mappings":"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"}
@@ -30,6 +30,8 @@ export interface AttackPayload {
30
30
  cwe?: string;
31
31
  /** Remediation guidance */
32
32
  remediation: string;
33
+ /** Wild prevalence score from AgentPwn data (0-100, populated via --enrich) */
34
+ wildPrevalence?: number;
33
35
  }
34
36
  export interface AttackResult {
35
37
  /** Payload that was tested */
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/attack/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/attack/types.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/attack/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAuKH,wBAAwB;AACX,QAAA,iBAAiB,GAA0F;IACtH,kBAAkB,EAAE;QAClB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,2DAA2D;QACxE,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACpC;IACD,WAAW,EAAE;QACX,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,uDAAuD;QACpE,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,0DAA0D;QACvE,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACpC;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,iDAAiD;QAC9D,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACpC;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,4CAA4C;QACzD,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,wFAAwF;QACrG,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,oFAAoF;QACjG,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,2EAA2E;QACxF,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,iFAAiF;QAC9F,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,cAAc,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,wEAAwE;QACrF,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACpC;IACD,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,6FAA6F;QAC1G,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;CACF,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/attack/types.ts"],"names":[],"mappings":";AAAA;;;GAGG;;;AAyKH,wBAAwB;AACX,QAAA,iBAAiB,GAA0F;IACtH,kBAAkB,EAAE;QAClB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,2DAA2D;QACxE,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACpC;IACD,WAAW,EAAE;QACX,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,uDAAuD;QACpE,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,mBAAmB,EAAE;QACnB,IAAI,EAAE,mBAAmB;QACzB,WAAW,EAAE,0DAA0D;QACvE,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACpC;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,iDAAiD;QAC9D,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACpC;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,4CAA4C;QACzD,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,kBAAkB,EAAE;QAClB,IAAI,EAAE,kBAAkB;QACxB,WAAW,EAAE,wFAAwF;QACrG,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,YAAY,EAAE;QACZ,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,oFAAoF;QACjG,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,sBAAsB,EAAE;QACtB,IAAI,EAAE,sBAAsB;QAC5B,WAAW,EAAE,2EAA2E;QACxF,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,gBAAgB,EAAE;QAChB,IAAI,EAAE,gBAAgB;QACtB,WAAW,EAAE,iFAAiF;QAC9F,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;IACD,cAAc,EAAE;QACd,IAAI,EAAE,cAAc;QACpB,WAAW,EAAE,wEAAwE;QACrF,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC;KACpC;IACD,aAAa,EAAE;QACb,IAAI,EAAE,aAAa;QACnB,WAAW,EAAE,6FAA6F;QAC1G,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,CAAC;KAC7B;CACF,CAAC"}
package/dist/cli.js CHANGED
@@ -41,6 +41,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
41
41
  const commander_1 = require("commander");
42
42
  const index_1 = require("./index");
43
43
  const resolve_mcp_1 = require("./resolve-mcp");
44
+ const wild_1 = require("./wild");
44
45
  const nemoclaw_scanner_1 = require("./hardening/nemoclaw-scanner");
45
46
  const program = new commander_1.Command();
46
47
  program.showHelpAfterError('(run with --help for usage)');
@@ -2887,16 +2888,18 @@ Examples:
2887
2888
  .option('-v, --verbose', 'Show detailed finding information')
2888
2889
  .action(async (target, options) => {
2889
2890
  try {
2890
- if (!options.json) {
2891
- console.log(`\nScanning ${target}...\n`);
2892
- }
2893
- const scanner = new index_1.ExternalScanner();
2891
+ const timeoutMs = parseInt(options.timeout ?? '5000', 10);
2894
2892
  const customPorts = options.ports
2895
2893
  ? options.ports.split(',').map((p) => parseInt(p.trim(), 10))
2896
2894
  : undefined;
2895
+ const portCount = customPorts?.length ?? 11;
2896
+ if (!options.json) {
2897
+ console.log(`\nScanning ${target} (${portCount} ports, ${timeoutMs}ms timeout)...\n`);
2898
+ }
2899
+ const scanner = new index_1.ExternalScanner();
2897
2900
  const result = await scanner.scan(target, {
2898
2901
  ports: customPorts,
2899
- timeout: parseInt(options.timeout ?? '5000', 10),
2902
+ timeout: timeoutMs,
2900
2903
  });
2901
2904
  if (options.json) {
2902
2905
  writeJsonStdout(result);
@@ -5251,6 +5254,136 @@ program
5251
5254
  console.log(`\n${trainingCount} training samples exported to NanoMind corpus.`);
5252
5255
  }
5253
5256
  });
5257
+ // wild: test AI agent resilience against real-world web-based attacks
5258
+ program
5259
+ .command('wild')
5260
+ .description(`Test AI agent resilience in the wild
5261
+
5262
+ Fetches pages from AgentPwn (agentpwn.com) and analyzes hidden injection
5263
+ payloads that AI agents encounter when browsing the web. Reports which
5264
+ attack surfaces exist and computes a wild resilience score.
5265
+
5266
+ Attack categories (11):
5267
+ prompt-injection, jailbreak, data-exfiltration, capability-abuse,
5268
+ context-manipulation, mcp-exploitation, a2a-attack,
5269
+ memory-weaponization, context-window, supply-chain, tool-shadow
5270
+
5271
+ Injection surfaces detected:
5272
+ html-comment, invisible-span, json-ld, meta-tag, http-header,
5273
+ aria-label, image-alt, unicode-stego
5274
+
5275
+ Also tests: robots.txt, llms.txt, sitemap.xml for embedded payloads
5276
+
5277
+ Examples:
5278
+ $ hackmyagent wild
5279
+ $ hackmyagent wild https://agentpwn.com
5280
+ $ hackmyagent wild --category prompt-injection
5281
+ $ hackmyagent wild --tier 5
5282
+ $ hackmyagent wild --json
5283
+ $ hackmyagent wild -v -o report.json`)
5284
+ .argument('[url]', 'Target URL to scan', 'https://agentpwn.com')
5285
+ .option('-c, --category <category>', 'Filter by attack category')
5286
+ .option('-t, --tier <tier>', 'Filter by specific difficulty tier')
5287
+ .option('--timeout <ms>', 'Request timeout in milliseconds', '15000')
5288
+ .option('--delay <ms>', 'Delay between requests in milliseconds', '500')
5289
+ .option('--json', 'Output as JSON')
5290
+ .option('-o, --output <file>', 'Write output to file')
5291
+ .option('--verbose', 'Show detailed output for each page')
5292
+ .action(async (url, options) => {
5293
+ try {
5294
+ const scanner = new wild_1.WildScanner({
5295
+ url: url || 'https://agentpwn.com',
5296
+ category: options.category,
5297
+ tier: options.tier ? parseInt(options.tier, 10) : undefined,
5298
+ timeout: parseInt(options.timeout || '15000', 10),
5299
+ delay: parseInt(options.delay || '500', 10),
5300
+ verbose: options.verbose || false,
5301
+ json: options.json || false,
5302
+ });
5303
+ if (!options.json) {
5304
+ console.log(`\n${colors.cyan}HackMyAgent Wild Scanner${colors.reset}`);
5305
+ console.log(`${'━'.repeat(50)}\n`);
5306
+ console.log(`Target: ${url || 'https://agentpwn.com'}`);
5307
+ if (options.category)
5308
+ console.log(`Category: ${options.category}`);
5309
+ if (options.tier)
5310
+ console.log(`Tier: ${options.tier}`);
5311
+ console.log('');
5312
+ }
5313
+ const report = await scanner.scan();
5314
+ if (options.json) {
5315
+ const output = JSON.stringify(report, null, 2);
5316
+ if (options.output) {
5317
+ const fs = await Promise.resolve().then(() => __importStar(require('fs')));
5318
+ fs.writeFileSync(options.output, output);
5319
+ process.stderr.write(`Report written to ${options.output}\n`);
5320
+ }
5321
+ else {
5322
+ console.log(output);
5323
+ }
5324
+ }
5325
+ else {
5326
+ printWildReport(report);
5327
+ if (options.output) {
5328
+ const fs = await Promise.resolve().then(() => __importStar(require('fs')));
5329
+ fs.writeFileSync(options.output, JSON.stringify(report, null, 2));
5330
+ console.log(`\nJSON report written to ${options.output}`);
5331
+ }
5332
+ }
5333
+ // Exit with non-zero if resilience is poor
5334
+ if (report.resilienceRating === 'critical' || report.resilienceRating === 'poor') {
5335
+ process.exit(1);
5336
+ }
5337
+ }
5338
+ catch (error) {
5339
+ console.error(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
5340
+ process.exit(1);
5341
+ }
5342
+ });
5343
+ function printWildReport(report) {
5344
+ // File fetches
5345
+ console.log(`${colors.dim}File-Level Attack Surfaces${colors.reset}`);
5346
+ for (const f of report.fileFetches) {
5347
+ const status = f.hasPayload
5348
+ ? `${colors.red}PAYLOAD FOUND${colors.reset}`
5349
+ : `${colors.green}clean${colors.reset}`;
5350
+ console.log(` ${f.file}: ${f.statusCode} [${status}]`);
5351
+ if (f.payloadExcerpt) {
5352
+ console.log(` ${colors.dim}${f.payloadExcerpt}${colors.reset}`);
5353
+ }
5354
+ }
5355
+ // Page results by category
5356
+ console.log(`\n${colors.dim}Attack Pages (${report.pagesScanned} scanned)${colors.reset}`);
5357
+ const categories = Object.keys(report.summary.byCategory).sort();
5358
+ for (const cat of categories) {
5359
+ const stats = report.summary.byCategory[cat];
5360
+ console.log(` ${cat}: ${stats.pages} pages, ${stats.payloads} payloads`);
5361
+ }
5362
+ // Injection surfaces
5363
+ console.log(`\n${colors.dim}Injection Surfaces Detected${colors.reset}`);
5364
+ const surfaces = Object.entries(report.summary.bySurface).sort((a, b) => b[1] - a[1]);
5365
+ for (const [surface, count] of surfaces) {
5366
+ console.log(` ${surface}: ${count}`);
5367
+ }
5368
+ // Score
5369
+ const scoreColor = report.wildResilienceScore >= 60
5370
+ ? colors.green
5371
+ : report.wildResilienceScore >= 40
5372
+ ? colors.yellow
5373
+ : colors.red;
5374
+ console.log(`\n${'━'.repeat(50)}`);
5375
+ console.log(`\n${colors.dim}Wild Resilience Score:${colors.reset} ${scoreColor}${report.wildResilienceScore}/100 (${report.resilienceRating})${colors.reset}`);
5376
+ console.log(`${colors.dim}Pages Scanned:${colors.reset} ${report.pagesScanned}`);
5377
+ console.log(`${colors.dim}Total Payloads:${colors.reset} ${report.summary.totalPayloads}`);
5378
+ console.log(`${colors.dim}Callback Pages:${colors.reset} ${report.summary.callbackPages}`);
5379
+ console.log(`${colors.dim}Canary Pages:${colors.reset} ${report.summary.canaryPages}`);
5380
+ console.log(`${colors.dim}Max Tier:${colors.reset} ${report.summary.maxTier}`);
5381
+ console.log(`${colors.dim}Duration:${colors.reset} ${(report.duration / 1000).toFixed(1)}s`);
5382
+ console.log(`\n${colors.dim}Note: This score reflects the attack surface coverage of the target`);
5383
+ console.log(`site. To test your actual agent's resilience, use --model to pipe`);
5384
+ console.log(`page content through an LLM. For static config scanning, use:${colors.reset}`);
5385
+ console.log(` ${colors.cyan}npx hackmyagent secure${colors.reset}`);
5386
+ }
5254
5387
  // create-skill: generate best-practice, secured skills from plain English
5255
5388
  program
5256
5389
  .command('create-skill')
@@ -5262,11 +5395,12 @@ program
5262
5395
  const { writeSkill } = await Promise.resolve().then(() => __importStar(require('./skills/builder.js')));
5263
5396
  console.log(`\nGenerating secured skill...\n`);
5264
5397
  const result = writeSkill({ purpose: description, name: options.name, outputDir: options.output });
5265
- console.log(`Created ${result.dirName}/`);
5398
+ const outputDir = options.output ?? result.dirName;
5399
+ console.log(`Created ${outputDir}/`);
5266
5400
  for (const file of result.filesWritten) {
5267
5401
  console.log(` ${file.split('/').pop()}`);
5268
5402
  }
5269
- console.log(`\nYour skill is ready. Verify security with: hackmyagent secure ${result.dirName}/`);
5403
+ console.log(`\nYour skill is ready. Verify security with: hackmyagent secure ${outputDir}/`);
5270
5404
  });
5271
5405
  // Self-securing: verify own integrity before running any command
5272
5406
  // A security tool that doesn't verify itself is worse than no security tool