hackmyagent 0.11.4 → 0.11.5

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.
@@ -1,47 +1,59 @@
1
1
  "use strict";
2
2
  /**
3
- * Contribution Opt-In Prompt
3
+ * Contribution Consent and Scan Counting
4
4
  *
5
- * Handles the user's consent to share anonymized scan findings
6
- * with the OpenA2A Registry.
5
+ * Manages the user's consent to share anonymized scan findings
6
+ * with the OpenA2A Registry. Uses a delayed consent tip shown
7
+ * after the 3rd scan (non-interactive, no blocking prompts).
7
8
  *
8
9
  * Config/counting is delegated to @opena2a/shared (the canonical
9
10
  * source for ~/.opena2a/config.json). If @opena2a/shared is not
10
11
  * available at runtime, falls back to a local implementation.
11
12
  */
12
13
  Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports._resetBackend = _resetBackend;
13
15
  exports.isContributeEnabled = isContributeEnabled;
14
16
  exports.shouldPromptContribute = shouldPromptContribute;
15
17
  exports.incrementScanCount = incrementScanCount;
16
18
  exports.saveContributeChoice = saveContributeChoice;
19
+ exports.recordScanAndMaybeShowTip = recordScanAndMaybeShowTip;
17
20
  exports.showContributePrompt = showContributePrompt;
18
21
  const fs_1 = require("fs");
19
22
  const path_1 = require("path");
20
23
  /** Resolved backend -- lazy-initialized on first call. */
21
24
  let _backend;
25
+ /** Reset cached backend (for testing). */
26
+ function _resetBackend() {
27
+ _backend = undefined;
28
+ }
22
29
  function resolveBackend() {
23
30
  if (_backend)
24
31
  return _backend;
25
- try {
26
- // eslint-disable-next-line @typescript-eslint/no-require-imports
27
- const shared = require('@opena2a/shared');
28
- if (typeof shared.isContributeEnabled === 'function' &&
29
- typeof shared.setContributeEnabled === 'function' &&
30
- typeof shared.incrementScanCount === 'function' &&
31
- typeof shared.shouldPromptContribute === 'function' &&
32
- typeof shared.dismissContributePrompt === 'function') {
33
- _backend = {
34
- isContributeEnabled: shared.isContributeEnabled,
35
- setContributeEnabled: shared.setContributeEnabled,
36
- incrementScanCount: shared.incrementScanCount,
37
- shouldPromptContribute: shared.shouldPromptContribute,
38
- dismissContributePrompt: shared.dismissContributePrompt,
39
- };
40
- return _backend;
32
+ // When OPENA2A_HOME is set, always use local backend so the custom
33
+ // home directory is respected (important for testing and isolation).
34
+ if (!process.env.OPENA2A_HOME) {
35
+ try {
36
+ // eslint-disable-next-line @typescript-eslint/no-require-imports
37
+ const shared = require('@opena2a/shared');
38
+ if (typeof shared.isContributeEnabled === 'function' &&
39
+ typeof shared.setContributeEnabled === 'function' &&
40
+ typeof shared.incrementScanCount === 'function' &&
41
+ typeof shared.shouldPromptContribute === 'function' &&
42
+ typeof shared.dismissContributePrompt === 'function') {
43
+ _backend = {
44
+ isContributeEnabled: shared.isContributeEnabled,
45
+ setContributeEnabled: shared.setContributeEnabled,
46
+ incrementScanCount: shared.incrementScanCount,
47
+ getScanCount: shared.getScanCount || (() => 0),
48
+ shouldPromptContribute: shared.shouldPromptContribute,
49
+ dismissContributePrompt: shared.dismissContributePrompt,
50
+ };
51
+ return _backend;
52
+ }
53
+ }
54
+ catch {
55
+ // @opena2a/shared not installed -- fall through to local backend
41
56
  }
42
- }
43
- catch {
44
- // @opena2a/shared not installed -- fall through to local backend
45
57
  }
46
58
  _backend = createLocalBackend();
47
59
  return _backend;
@@ -68,6 +80,8 @@ function writeConfig(config) {
68
80
  (0, fs_1.mkdirSync)(dir, { recursive: true });
69
81
  (0, fs_1.writeFileSync)(configPath, JSON.stringify(config, null, 2) + '\n', { mode: 0o600 });
70
82
  }
83
+ /** Cooldown for the consent tip: 30 days after dismissal. */
84
+ const TIP_COOLDOWN_MS = 30 * 24 * 60 * 60 * 1000;
71
85
  function createLocalBackend() {
72
86
  return {
73
87
  isContributeEnabled() {
@@ -79,41 +93,49 @@ function createLocalBackend() {
79
93
  if (!config.contribute)
80
94
  config.contribute = {};
81
95
  config.contribute.enabled = enabled;
82
- const scanCount = config.contribute.scanCount ?? 0;
83
- if (scanCount >= 9)
84
- config.contribute.promptedAtTen = true;
85
96
  writeConfig(config);
86
97
  },
87
98
  incrementScanCount() {
88
99
  const config = readConfig();
89
- if (!config.contribute)
90
- config.contribute = {};
91
- config.contribute.scanCount = (config.contribute.scanCount ?? 0) + 1;
100
+ if (!config.telemetry)
101
+ config.telemetry = {};
102
+ config.telemetry.scanCount = (config.telemetry.scanCount ?? 0) + 1;
92
103
  writeConfig(config);
93
- return config.contribute.scanCount;
104
+ return config.telemetry.scanCount;
105
+ },
106
+ getScanCount() {
107
+ const config = readConfig();
108
+ return config.telemetry?.scanCount ?? 0;
94
109
  },
95
110
  shouldPromptContribute() {
96
111
  const config = readConfig();
97
- if (config.contribute?.enabled === true || config.contribute?.enabled === false)
112
+ // Already decided -- do not prompt
113
+ if (config.contribute?.enabled === true || config.contribute?.enabled === false) {
98
114
  return false;
99
- const scanCount = config.contribute?.scanCount ?? 0;
100
- if (scanCount === 0)
101
- return true;
102
- if (scanCount >= 9 && !config.contribute?.promptedAtTen)
103
- return true;
104
- return false;
115
+ }
116
+ const count = config.telemetry?.scanCount ?? 0;
117
+ if (count < 3)
118
+ return false;
119
+ // Check cooldown
120
+ const dismissed = config.telemetry?.contributePromptDismissedAt;
121
+ if (dismissed) {
122
+ const dismissedMs = new Date(dismissed).getTime();
123
+ if (Date.now() - dismissedMs < TIP_COOLDOWN_MS)
124
+ return false;
125
+ }
126
+ return true;
105
127
  },
106
128
  dismissContributePrompt() {
107
129
  const config = readConfig();
108
- if (!config.contribute)
109
- config.contribute = {};
110
- config.contribute.promptedAtTen = true;
130
+ if (!config.telemetry)
131
+ config.telemetry = {};
132
+ config.telemetry.contributePromptDismissedAt = new Date().toISOString();
111
133
  writeConfig(config);
112
134
  },
113
135
  };
114
136
  }
115
137
  // ---------------------------------------------------------------------------
116
- // Public API (signatures preserved for backward compatibility)
138
+ // Public API
117
139
  // ---------------------------------------------------------------------------
118
140
  /**
119
141
  * Check whether the contribution setting is enabled.
@@ -121,23 +143,18 @@ function createLocalBackend() {
121
143
  * Returns:
122
144
  * true - user explicitly opted in
123
145
  * false - user explicitly opted out (or default in shared backend)
124
- * undefined - not yet configured (local fallback only; shared backend
125
- * defaults to false, so callers should rely on
126
- * shouldPromptContribute() for prompt logic)
146
+ * undefined - not yet configured
127
147
  */
128
148
  function isContributeEnabled() {
129
149
  return resolveBackend().isContributeEnabled() || undefined;
130
150
  }
131
151
  /**
132
- * Check whether we should show the contribution prompt.
152
+ * Check whether we should show the contribution tip.
133
153
  *
134
- * HMA-specific: also checks for TTY (non-interactive environments
135
- * should never prompt). The backend handles scan-count thresholds
136
- * and cooldown/dismiss logic.
154
+ * Returns true after the 3rd scan if the user hasn't opted in,
155
+ * opted out, or dismissed the tip within the last 30 days.
137
156
  */
138
157
  function shouldPromptContribute() {
139
- if (!process.stdin.isTTY || !process.stdout.isTTY)
140
- return false;
141
158
  return resolveBackend().shouldPromptContribute();
142
159
  }
143
160
  /**
@@ -145,7 +162,7 @@ function shouldPromptContribute() {
145
162
  * regardless of contribution setting.
146
163
  */
147
164
  function incrementScanCount() {
148
- resolveBackend().incrementScanCount();
165
+ return resolveBackend().incrementScanCount();
149
166
  }
150
167
  /**
151
168
  * Save the user's contribution choice to the config file.
@@ -157,64 +174,38 @@ function saveContributeChoice(enabled) {
157
174
  }
158
175
  }
159
176
  /**
160
- * Display the contribution opt-in prompt and return the user's choice.
177
+ * Record a scan and return a consent tip string if the threshold is reached.
161
178
  *
162
- * Uses raw stdin to read a single keypress (Y/N).
163
- * Returns true if the user opted in, false otherwise.
179
+ * After the 3rd scan, returns a non-interactive tip encouraging the user
180
+ * to enable contribution. Returns null if tip should not be shown.
181
+ * This replaces the previous interactive Y/N prompt.
164
182
  */
165
- async function showContributePrompt() {
166
- const lines = [
167
- '',
168
- 'Help improve security for the AI agent community.',
183
+ function recordScanAndMaybeShowTip() {
184
+ incrementScanCount();
185
+ if (!shouldPromptContribute())
186
+ return null;
187
+ // Mark as shown so we respect the 30-day cooldown
188
+ resolveBackend().dismissContributePrompt();
189
+ return [
169
190
  '',
170
- 'Share anonymized scan findings with the OpenA2A Registry?',
171
- 'No personal data. No source code. Only check pass/fail results.',
172
- 'You can opt out anytime: opena2a config set contribute false',
191
+ ' Tip: Your scans help build community trust data for MCP servers and AI agents.',
192
+ ' Share anonymized results so other developers can make informed security decisions.',
193
+ ' Enable: npx hackmyagent scan --contribute (or: opena2a config contribute on)',
173
194
  '',
174
- '[Y] Yes, contribute [N] No thanks',
175
- ];
176
- for (const line of lines) {
177
- process.stdout.write(line + '\n');
178
- }
179
- const answer = await readSingleKey();
180
- const enabled = answer.toLowerCase() === 'y';
181
- saveContributeChoice(enabled);
182
- if (enabled) {
183
- process.stdout.write('\nContribution enabled. Thank you.\n');
184
- }
185
- else {
186
- process.stdout.write('\nContribution disabled. You can enable it later: opena2a config set contribute true\n');
187
- }
188
- return enabled;
195
+ ].join('\n');
189
196
  }
190
197
  /**
191
- * Read a single keypress from stdin.
192
- * Falls back to 'n' after a 30-second timeout.
198
+ * Display the contribution opt-in prompt and return the user's choice.
199
+ *
200
+ * @deprecated Use recordScanAndMaybeShowTip() instead. This is kept
201
+ * for backward compatibility but now shows a non-interactive tip
202
+ * rather than blocking for input.
193
203
  */
194
- function readSingleKey() {
195
- return new Promise((resolve) => {
196
- const stdin = process.stdin;
197
- const wasRaw = stdin.isRaw;
198
- const timer = setTimeout(() => {
199
- cleanup();
200
- resolve('n');
201
- }, 30000);
202
- function cleanup() {
203
- clearTimeout(timer);
204
- stdin.removeListener('data', onData);
205
- if (stdin.isRaw !== wasRaw) {
206
- stdin.setRawMode(wasRaw ?? false);
207
- }
208
- stdin.pause();
209
- }
210
- function onData(data) {
211
- const char = data.toString().trim().toLowerCase();
212
- cleanup();
213
- resolve(char || 'n');
214
- }
215
- stdin.setRawMode(true);
216
- stdin.resume();
217
- stdin.once('data', onData);
218
- });
204
+ async function showContributePrompt() {
205
+ const tip = recordScanAndMaybeShowTip();
206
+ if (tip) {
207
+ process.stdout.write(tip + '\n');
208
+ }
209
+ return false;
219
210
  }
220
211
  //# sourceMappingURL=opt-in.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"opt-in.js","sourceRoot":"","sources":["../../src/telemetry/opt-in.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"opt-in.js","sourceRoot":"","sources":["../../src/telemetry/opt-in.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.4",
3
+ "version": "0.11.5",
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"