cache-overflow-mcp 0.3.4 → 0.3.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.
Files changed (43) hide show
  1. package/.env.example +3 -3
  2. package/AGENTS.md +24 -3
  3. package/README.md +59 -0
  4. package/TROUBLESHOOTING.md +219 -0
  5. package/dist/cli.js +13 -1
  6. package/dist/cli.js.map +1 -1
  7. package/dist/client.d.ts.map +1 -1
  8. package/dist/client.js +53 -9
  9. package/dist/client.js.map +1 -1
  10. package/dist/config.d.ts +3 -0
  11. package/dist/config.d.ts.map +1 -1
  12. package/dist/config.js +5 -0
  13. package/dist/config.js.map +1 -1
  14. package/dist/logger.d.ts +16 -0
  15. package/dist/logger.d.ts.map +1 -0
  16. package/dist/logger.js +127 -0
  17. package/dist/logger.js.map +1 -0
  18. package/dist/server.d.ts.map +1 -1
  19. package/dist/server.js +50 -7
  20. package/dist/server.js.map +1 -1
  21. package/dist/testing/mock-data.js +40 -40
  22. package/dist/ui/verification-dialog.d.ts.map +1 -1
  23. package/dist/ui/verification-dialog.js +307 -268
  24. package/dist/ui/verification-dialog.js.map +1 -1
  25. package/package.json +3 -2
  26. package/scripts/view-logs.js +125 -0
  27. package/src/cli.ts +23 -10
  28. package/src/client.test.ts +116 -116
  29. package/src/client.ts +122 -76
  30. package/src/config.ts +14 -9
  31. package/src/index.ts +3 -3
  32. package/src/logger.ts +150 -0
  33. package/src/server.ts +49 -7
  34. package/src/testing/mock-data.ts +142 -142
  35. package/src/testing/mock-server.ts +176 -176
  36. package/src/tools/index.ts +23 -23
  37. package/src/types.ts +39 -39
  38. package/src/ui/verification-dialog.ts +382 -342
  39. package/tsconfig.json +20 -20
  40. package/dist/tools/get-balance.d.ts +0 -3
  41. package/dist/tools/get-balance.d.ts.map +0 -1
  42. package/dist/tools/get-balance.js +0 -34
  43. package/dist/tools/get-balance.js.map +0 -1
@@ -1,272 +1,273 @@
1
1
  import http from 'http';
2
2
  import open from 'open';
3
- const generateHTML = (title, body) => `
4
- <!DOCTYPE html>
5
- <html lang="en">
6
- <head>
7
- <meta charset="UTF-8">
8
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
9
- <title>Verify Solution | cache.overflow</title>
10
- <link rel="preconnect" href="https://fonts.googleapis.com">
11
- <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
12
- <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
13
- <style>
14
- * {
15
- margin: 0;
16
- padding: 0;
17
- box-sizing: border-box;
18
- }
19
-
20
- body {
21
- font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
22
- background: #0A0A0B;
23
- min-height: 100vh;
24
- display: flex;
25
- align-items: center;
26
- justify-content: center;
27
- padding: 24px;
28
- color: #fff;
29
- }
30
-
31
- .card {
32
- background: linear-gradient(145deg, rgba(30, 30, 32, 0.9), rgba(20, 20, 22, 0.95));
33
- border: 1px solid rgba(255, 255, 255, 0.06);
34
- border-radius: 20px;
35
- padding: 48px;
36
- max-width: 800px;
37
- width: 100%;
38
- backdrop-filter: blur(20px);
39
- box-shadow: 0 24px 48px rgba(0, 0, 0, 0.4);
40
- }
41
-
42
- .badge {
43
- display: inline-flex;
44
- align-items: center;
45
- gap: 8px;
46
- background: rgba(139, 92, 246, 0.15);
47
- border: 1px solid rgba(139, 92, 246, 0.3);
48
- color: #A78BFA;
49
- font-size: 13px;
50
- font-weight: 500;
51
- text-transform: uppercase;
52
- letter-spacing: 0.5px;
53
- padding: 10px 18px;
54
- border-radius: 24px;
55
- margin-bottom: 28px;
56
- }
57
-
58
- .badge::before {
59
- content: "";
60
- width: 6px;
61
- height: 6px;
62
- background: #8B5CF6;
63
- border-radius: 50%;
64
- animation: pulse 2s ease-in-out infinite;
65
- }
66
-
67
- @keyframes pulse {
68
- 0%, 100% { opacity: 1; transform: scale(1); }
69
- 50% { opacity: 0.5; transform: scale(1.2); }
70
- }
71
-
72
- h1 {
73
- font-size: 32px;
74
- font-weight: 600;
75
- color: #fff;
76
- margin-bottom: 12px;
77
- letter-spacing: -0.5px;
78
- }
79
-
80
- .subtitle {
81
- font-size: 18px;
82
- color: rgba(255, 255, 255, 0.5);
83
- margin-bottom: 32px;
84
- line-height: 1.5;
85
- }
86
-
87
- .solution-card {
88
- background: rgba(255, 255, 255, 0.03);
89
- border: 1px solid rgba(255, 255, 255, 0.06);
90
- border-radius: 16px;
91
- padding: 28px;
92
- margin-bottom: 36px;
93
- }
94
-
95
- .solution-title {
96
- font-size: 20px;
97
- font-weight: 500;
98
- color: #fff;
99
- margin-bottom: 16px;
100
- line-height: 1.4;
101
- }
102
-
103
- .solution-body {
104
- font-size: 16px;
105
- line-height: 1.8;
106
- color: rgba(255, 255, 255, 0.6);
107
- max-height: 280px;
108
- overflow-y: auto;
109
- white-space: pre-wrap;
110
- word-wrap: break-word;
111
- }
112
-
113
- .solution-body::-webkit-scrollbar {
114
- width: 4px;
115
- }
116
-
117
- .solution-body::-webkit-scrollbar-track {
118
- background: transparent;
119
- }
120
-
121
- .solution-body::-webkit-scrollbar-thumb {
122
- background: rgba(255, 255, 255, 0.1);
123
- border-radius: 2px;
124
- }
125
-
126
- .buttons {
127
- display: flex;
128
- gap: 16px;
129
- }
130
-
131
- .btn {
132
- flex: 1;
133
- padding: 22px 36px;
134
- border: none;
135
- border-radius: 14px;
136
- font-family: inherit;
137
- font-size: 20px;
138
- font-weight: 600;
139
- cursor: pointer;
140
- transition: all 0.2s ease;
141
- position: relative;
142
- overflow: hidden;
143
- }
144
-
145
- .btn-safe {
146
- background: linear-gradient(135deg, #00FF41 0%, #00CC33 100%);
147
- color: #000;
148
- }
149
-
150
- .btn-safe:hover {
151
- transform: translateY(-2px);
152
- box-shadow: 0 8px 24px rgba(0, 255, 65, 0.35);
153
- }
154
-
155
- .btn-safe:active {
156
- transform: translateY(0);
157
- }
158
-
159
- .btn-unsafe {
160
- background: linear-gradient(135deg, #FF4444 0%, #CC2233 100%);
161
- color: #fff;
162
- }
163
-
164
- .btn-unsafe:hover {
165
- transform: translateY(-2px);
166
- box-shadow: 0 8px 24px rgba(255, 51, 51, 0.35);
167
- }
168
-
169
- .btn-unsafe:active {
170
- transform: translateY(0);
171
- }
172
-
173
- .hint {
174
- text-align: center;
175
- margin-top: 28px;
176
- font-size: 15px;
177
- color: rgba(255, 255, 255, 0.3);
178
- }
179
-
180
- .hint kbd {
181
- background: rgba(255, 255, 255, 0.1);
182
- padding: 4px 10px;
183
- border-radius: 6px;
184
- font-family: inherit;
185
- font-size: 14px;
186
- }
187
-
188
- .completed {
189
- text-align: center;
190
- padding: 60px 20px;
191
- }
192
-
193
- .completed-icon {
194
- width: 88px;
195
- height: 88px;
196
- border-radius: 50%;
197
- display: flex;
198
- align-items: center;
199
- justify-content: center;
200
- margin: 0 auto 28px;
201
- font-size: 40px;
202
- }
203
-
204
- .completed-icon.safe {
205
- background: linear-gradient(135deg, rgba(0, 255, 65, 0.2), rgba(0, 204, 51, 0.1));
206
- border: 2px solid rgba(0, 255, 65, 0.5);
207
- box-shadow: 0 0 32px rgba(0, 255, 65, 0.2);
208
- }
209
-
210
- .completed-icon.unsafe {
211
- background: linear-gradient(135deg, rgba(255, 68, 68, 0.2), rgba(204, 34, 51, 0.1));
212
- border: 2px solid rgba(255, 68, 68, 0.5);
213
- box-shadow: 0 0 32px rgba(255, 68, 68, 0.2);
214
- }
215
-
216
- .completed h2 {
217
- font-size: 28px;
218
- font-weight: 600;
219
- margin-bottom: 12px;
220
- }
221
-
222
- .completed p {
223
- font-size: 18px;
224
- color: rgba(255, 255, 255, 0.5);
225
- }
226
- </style>
227
- </head>
228
- <body>
229
- <div class="card" id="main-card">
230
- <div class="badge">Verification Required</div>
231
-
232
- <h1>Is this solution safe?</h1>
233
- <p class="subtitle">Review the code below and verify it's safe to use</p>
234
-
235
- <div class="solution-card">
236
- <div class="solution-title">${escapeHtml(title)}</div>
237
- <div class="solution-body">${body ? escapeHtml(body) : 'Solution body not available.\nUnlock to view full content.'}</div>
238
- </div>
239
-
240
- <div class="buttons">
241
- <button class="btn btn-safe" onclick="submit('safe')">Safe</button>
242
- <button class="btn btn-unsafe" onclick="submit('unsafe')">Unsafe</button>
243
- </div>
244
-
245
- <div class="hint">
246
- Press <kbd>S</kbd> for Safe or <kbd>U</kbd> for Unsafe
247
- </div>
248
- </div>
249
-
250
- <script>
251
- function submit(result) {
252
- const isSafe = result === 'safe';
253
- document.getElementById('main-card').innerHTML = \`
254
- <div class="completed">
255
- <div class="completed-icon \${result}">\${isSafe ? '&#10003;' : '&#10005;'}</div>
256
- <h2>\${isSafe ? 'Marked as Safe' : 'Marked as Unsafe'}</h2>
257
- <p>You can close this tab now</p>
258
- </div>
259
- \`;
260
- fetch('/result?value=' + result).catch(() => {});
261
- }
262
-
263
- document.addEventListener('keydown', (e) => {
264
- if (e.key === 's' || e.key === 'S') submit('safe');
265
- if (e.key === 'u' || e.key === 'U') submit('unsafe');
266
- });
267
- </script>
268
- </body>
269
- </html>
3
+ import { logger } from '../logger.js';
4
+ const generateHTML = (title, body) => `
5
+ <!DOCTYPE html>
6
+ <html lang="en">
7
+ <head>
8
+ <meta charset="UTF-8">
9
+ <meta name="viewport" content="width=device-width, initial-scale=1.0">
10
+ <title>Verify Solution | cache.overflow</title>
11
+ <link rel="preconnect" href="https://fonts.googleapis.com">
12
+ <link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
13
+ <link href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600&display=swap" rel="stylesheet">
14
+ <style>
15
+ * {
16
+ margin: 0;
17
+ padding: 0;
18
+ box-sizing: border-box;
19
+ }
20
+
21
+ body {
22
+ font-family: "Inter", -apple-system, BlinkMacSystemFont, sans-serif;
23
+ background: #0A0A0B;
24
+ min-height: 100vh;
25
+ display: flex;
26
+ align-items: center;
27
+ justify-content: center;
28
+ padding: 24px;
29
+ color: #fff;
30
+ }
31
+
32
+ .card {
33
+ background: linear-gradient(145deg, rgba(30, 30, 32, 0.9), rgba(20, 20, 22, 0.95));
34
+ border: 1px solid rgba(255, 255, 255, 0.06);
35
+ border-radius: 20px;
36
+ padding: 48px;
37
+ max-width: 800px;
38
+ width: 100%;
39
+ backdrop-filter: blur(20px);
40
+ box-shadow: 0 24px 48px rgba(0, 0, 0, 0.4);
41
+ }
42
+
43
+ .badge {
44
+ display: inline-flex;
45
+ align-items: center;
46
+ gap: 8px;
47
+ background: rgba(139, 92, 246, 0.15);
48
+ border: 1px solid rgba(139, 92, 246, 0.3);
49
+ color: #A78BFA;
50
+ font-size: 13px;
51
+ font-weight: 500;
52
+ text-transform: uppercase;
53
+ letter-spacing: 0.5px;
54
+ padding: 10px 18px;
55
+ border-radius: 24px;
56
+ margin-bottom: 28px;
57
+ }
58
+
59
+ .badge::before {
60
+ content: "";
61
+ width: 6px;
62
+ height: 6px;
63
+ background: #8B5CF6;
64
+ border-radius: 50%;
65
+ animation: pulse 2s ease-in-out infinite;
66
+ }
67
+
68
+ @keyframes pulse {
69
+ 0%, 100% { opacity: 1; transform: scale(1); }
70
+ 50% { opacity: 0.5; transform: scale(1.2); }
71
+ }
72
+
73
+ h1 {
74
+ font-size: 32px;
75
+ font-weight: 600;
76
+ color: #fff;
77
+ margin-bottom: 12px;
78
+ letter-spacing: -0.5px;
79
+ }
80
+
81
+ .subtitle {
82
+ font-size: 18px;
83
+ color: rgba(255, 255, 255, 0.5);
84
+ margin-bottom: 32px;
85
+ line-height: 1.5;
86
+ }
87
+
88
+ .solution-card {
89
+ background: rgba(255, 255, 255, 0.03);
90
+ border: 1px solid rgba(255, 255, 255, 0.06);
91
+ border-radius: 16px;
92
+ padding: 28px;
93
+ margin-bottom: 36px;
94
+ }
95
+
96
+ .solution-title {
97
+ font-size: 20px;
98
+ font-weight: 500;
99
+ color: #fff;
100
+ margin-bottom: 16px;
101
+ line-height: 1.4;
102
+ }
103
+
104
+ .solution-body {
105
+ font-size: 16px;
106
+ line-height: 1.8;
107
+ color: rgba(255, 255, 255, 0.6);
108
+ max-height: 280px;
109
+ overflow-y: auto;
110
+ white-space: pre-wrap;
111
+ word-wrap: break-word;
112
+ }
113
+
114
+ .solution-body::-webkit-scrollbar {
115
+ width: 4px;
116
+ }
117
+
118
+ .solution-body::-webkit-scrollbar-track {
119
+ background: transparent;
120
+ }
121
+
122
+ .solution-body::-webkit-scrollbar-thumb {
123
+ background: rgba(255, 255, 255, 0.1);
124
+ border-radius: 2px;
125
+ }
126
+
127
+ .buttons {
128
+ display: flex;
129
+ gap: 16px;
130
+ }
131
+
132
+ .btn {
133
+ flex: 1;
134
+ padding: 22px 36px;
135
+ border: none;
136
+ border-radius: 14px;
137
+ font-family: inherit;
138
+ font-size: 20px;
139
+ font-weight: 600;
140
+ cursor: pointer;
141
+ transition: all 0.2s ease;
142
+ position: relative;
143
+ overflow: hidden;
144
+ }
145
+
146
+ .btn-safe {
147
+ background: linear-gradient(135deg, #00FF41 0%, #00CC33 100%);
148
+ color: #000;
149
+ }
150
+
151
+ .btn-safe:hover {
152
+ transform: translateY(-2px);
153
+ box-shadow: 0 8px 24px rgba(0, 255, 65, 0.35);
154
+ }
155
+
156
+ .btn-safe:active {
157
+ transform: translateY(0);
158
+ }
159
+
160
+ .btn-unsafe {
161
+ background: linear-gradient(135deg, #FF4444 0%, #CC2233 100%);
162
+ color: #fff;
163
+ }
164
+
165
+ .btn-unsafe:hover {
166
+ transform: translateY(-2px);
167
+ box-shadow: 0 8px 24px rgba(255, 51, 51, 0.35);
168
+ }
169
+
170
+ .btn-unsafe:active {
171
+ transform: translateY(0);
172
+ }
173
+
174
+ .hint {
175
+ text-align: center;
176
+ margin-top: 28px;
177
+ font-size: 15px;
178
+ color: rgba(255, 255, 255, 0.3);
179
+ }
180
+
181
+ .hint kbd {
182
+ background: rgba(255, 255, 255, 0.1);
183
+ padding: 4px 10px;
184
+ border-radius: 6px;
185
+ font-family: inherit;
186
+ font-size: 14px;
187
+ }
188
+
189
+ .completed {
190
+ text-align: center;
191
+ padding: 60px 20px;
192
+ }
193
+
194
+ .completed-icon {
195
+ width: 88px;
196
+ height: 88px;
197
+ border-radius: 50%;
198
+ display: flex;
199
+ align-items: center;
200
+ justify-content: center;
201
+ margin: 0 auto 28px;
202
+ font-size: 40px;
203
+ }
204
+
205
+ .completed-icon.safe {
206
+ background: linear-gradient(135deg, rgba(0, 255, 65, 0.2), rgba(0, 204, 51, 0.1));
207
+ border: 2px solid rgba(0, 255, 65, 0.5);
208
+ box-shadow: 0 0 32px rgba(0, 255, 65, 0.2);
209
+ }
210
+
211
+ .completed-icon.unsafe {
212
+ background: linear-gradient(135deg, rgba(255, 68, 68, 0.2), rgba(204, 34, 51, 0.1));
213
+ border: 2px solid rgba(255, 68, 68, 0.5);
214
+ box-shadow: 0 0 32px rgba(255, 68, 68, 0.2);
215
+ }
216
+
217
+ .completed h2 {
218
+ font-size: 28px;
219
+ font-weight: 600;
220
+ margin-bottom: 12px;
221
+ }
222
+
223
+ .completed p {
224
+ font-size: 18px;
225
+ color: rgba(255, 255, 255, 0.5);
226
+ }
227
+ </style>
228
+ </head>
229
+ <body>
230
+ <div class="card" id="main-card">
231
+ <div class="badge">Verification Required</div>
232
+
233
+ <h1>Is this solution safe?</h1>
234
+ <p class="subtitle">Review the code below and verify it's safe to use</p>
235
+
236
+ <div class="solution-card">
237
+ <div class="solution-title">${escapeHtml(title)}</div>
238
+ <div class="solution-body">${body ? escapeHtml(body) : 'Solution body not available.\nUnlock to view full content.'}</div>
239
+ </div>
240
+
241
+ <div class="buttons">
242
+ <button class="btn btn-safe" onclick="submit('safe')">Safe</button>
243
+ <button class="btn btn-unsafe" onclick="submit('unsafe')">Unsafe</button>
244
+ </div>
245
+
246
+ <div class="hint">
247
+ Press <kbd>S</kbd> for Safe or <kbd>U</kbd> for Unsafe
248
+ </div>
249
+ </div>
250
+
251
+ <script>
252
+ function submit(result) {
253
+ const isSafe = result === 'safe';
254
+ document.getElementById('main-card').innerHTML = \`
255
+ <div class="completed">
256
+ <div class="completed-icon \${result}">\${isSafe ? '&#10003;' : '&#10005;'}</div>
257
+ <h2>\${isSafe ? 'Marked as Safe' : 'Marked as Unsafe'}</h2>
258
+ <p>You can close this tab now</p>
259
+ </div>
260
+ \`;
261
+ fetch('/result?value=' + result).catch(() => {});
262
+ }
263
+
264
+ document.addEventListener('keydown', (e) => {
265
+ if (e.key === 's' || e.key === 'S') submit('safe');
266
+ if (e.key === 'u' || e.key === 'U') submit('unsafe');
267
+ });
268
+ </script>
269
+ </body>
270
+ </html>
270
271
  `;
271
272
  function escapeHtml(text) {
272
273
  return text
@@ -297,12 +298,18 @@ export async function showVerificationDialog(title, body) {
297
298
  server.close();
298
299
  switch (value) {
299
300
  case 'safe':
301
+ logger.info('User verified solution as safe', { solutionTitle: title });
300
302
  resolve(true);
301
303
  break;
302
304
  case 'unsafe':
305
+ logger.info('User verified solution as unsafe', { solutionTitle: title });
303
306
  resolve(false);
304
307
  break;
305
308
  default:
309
+ logger.warn('User verification dialog closed with unknown result', {
310
+ value,
311
+ solutionTitle: title
312
+ });
306
313
  resolve(null);
307
314
  }
308
315
  }
@@ -312,20 +319,52 @@ export async function showVerificationDialog(title, body) {
312
319
  res.end(html);
313
320
  }
314
321
  });
322
+ server.on('error', (error) => {
323
+ logger.error('Verification dialog HTTP server error', error, {
324
+ solutionTitle: title,
325
+ errorType: 'VERIFICATION_DIALOG_ERROR',
326
+ });
327
+ if (!resolved) {
328
+ resolved = true;
329
+ resolve(null);
330
+ }
331
+ });
315
332
  server.listen(0, 'localhost', () => {
316
333
  const address = server.address();
317
334
  if (address && typeof address === 'object') {
318
335
  const url = `http://localhost:${address.port}`;
319
- open(url);
336
+ logger.info('Verification dialog opened', {
337
+ port: address.port,
338
+ solutionTitle: title
339
+ });
340
+ open(url).catch((error) => {
341
+ logger.error('Failed to open verification dialog in browser', error, {
342
+ url,
343
+ solutionTitle: title,
344
+ errorType: 'BROWSER_OPEN_FAILURE',
345
+ });
346
+ });
320
347
  // Timeout after 55 seconds (within MCP client default 60s limit)
321
348
  setTimeout(() => {
322
349
  if (!resolved) {
323
350
  resolved = true;
324
351
  server.close();
352
+ logger.warn('Verification dialog timed out', { solutionTitle: title });
325
353
  resolve(null);
326
354
  }
327
355
  }, 55 * 1000);
328
356
  }
357
+ else {
358
+ logger.error('Failed to get server address for verification dialog', undefined, {
359
+ address,
360
+ solutionTitle: title,
361
+ errorType: 'SERVER_ADDRESS_ERROR',
362
+ });
363
+ if (!resolved) {
364
+ resolved = true;
365
+ resolve(null);
366
+ }
367
+ }
329
368
  });
330
369
  });
331
370
  }
@@ -1 +1 @@
1
- {"version":3,"file":"verification-dialog.js","sourceRoot":"","sources":["../../src/ui/verification-dialog.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,IAAI,MAAM,MAAM,CAAC;AAExB,MAAM,YAAY,GAAG,CAAC,KAAa,EAAE,IAAa,EAAU,EAAE,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;oCAyO3B,UAAU,CAAC,KAAK,CAAC;mCAClB,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,4DAA4D;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAiCxH,CAAC;AAEF,SAAS,UAAU,CAAC,IAAY;IAC9B,OAAO,IAAI;SACR,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;SACtB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;SACrB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;SACvB,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;AAC7B,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB,CAC1C,KAAa,EACb,IAAa;IAEb,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,IAAI,GAAG,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACvC,IAAI,QAAQ,GAAG,KAAK,CAAC;QAErB,MAAM,MAAM,GAAG,IAAI,CAAC,YAAY,CAAC,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YAC5C,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,EAAE,kBAAkB,CAAC,CAAC;YAExD,IAAI,GAAG,CAAC,QAAQ,KAAK,SAAS,EAAE,CAAC;gBAC/B,MAAM,KAAK,GAAG,GAAG,CAAC,YAAY,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;gBAC5C,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,YAAY,EAAE,6BAA6B,EAAE,GAAG,EAAE,CAAC,CAAC;gBACzF,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAEd,IAAI,CAAC,QAAQ,EAAE,CAAC;oBACd,QAAQ,GAAG,IAAI,CAAC;oBAChB,MAAM,CAAC,KAAK,EAAE,CAAC;oBAEf,QAAQ,KAAK,EAAE,CAAC;wBACd,KAAK,MAAM;4BACT,OAAO,CAAC,IAAI,CAAC,CAAC;4BACd,MAAM;wBACR,KAAK,QAAQ;4BACX,OAAO,CAAC,KAAK,CAAC,CAAC;4BACf,MAAM;wBACR;4BACE,OAAO,CAAC,IAAI,CAAC,CAAC;oBAClB,CAAC;gBACH,CAAC;YACH,CAAC;iBAAM,CAAC;gBACN,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,EAAE,cAAc,EAAE,WAAW,EAAE,CAAC,CAAC;gBACpD,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;QAEH,MAAM,CAAC,MAAM,CAAC,CAAC,EAAE,WAAW,EAAE,GAAG,EAAE;YACjC,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,EAAE,CAAC;YACjC,IAAI,OAAO,IAAI,OAAO,OAAO,KAAK,QAAQ,EAAE,CAAC;gBAC3C,MAAM,GAAG,GAAG,oBAAoB,OAAO,CAAC,IAAI,EAAE,CAAC;gBAC/C,IAAI,CAAC,GAAG,CAAC,CAAC;gBAEV,iEAAiE;gBACjE,UAAU,CAAC,GAAG,EAAE;oBACd,IAAI,CAAC,QAAQ,EAAE,CAAC;wBACd,QAAQ,GAAG,IAAI,CAAC;wBAChB,MAAM,CAAC,KAAK,EAAE,CAAC;wBACf,OAAO,CAAC,IAAI,CAAC,CAAC;oBAChB,CAAC;gBACH,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;YAChB,CAAC;QACH,CAAC,CAAC,CAAC;IACL,CAAC,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"verification-dialog.js","sourceRoot":"","sources":["../../src/ui/verification-dialog.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "cache-overflow-mcp",
3
- "version": "0.3.4",
3
+ "version": "0.3.5",
4
4
  "type": "module",
5
5
  "description": "MCP server for cache.overflow - AI agents sharing knowledge with AI agents",
6
6
  "main": "dist/index.js",
@@ -14,7 +14,8 @@
14
14
  "start": "node dist/cli.js",
15
15
  "lint": "eslint src/",
16
16
  "test": "vitest",
17
- "prepublishOnly": "npm run build"
17
+ "prepublishOnly": "npm run build",
18
+ "logs": "node scripts/view-logs.js"
18
19
  },
19
20
  "keywords": [
20
21
  "mcp",