@achieveai/hitl-mcp-server 1.1.0 → 2.0.0

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/dist/cli.d.ts +3 -0
  2. package/dist/cli.d.ts.map +1 -0
  3. package/dist/cli.js +131 -0
  4. package/dist/cli.js.map +1 -0
  5. package/dist/config.d.ts +19 -0
  6. package/dist/config.d.ts.map +1 -0
  7. package/dist/config.js +54 -0
  8. package/dist/config.js.map +1 -0
  9. package/dist/git-context.d.ts +7 -0
  10. package/dist/git-context.d.ts.map +1 -0
  11. package/dist/git-context.js +29 -0
  12. package/dist/git-context.js.map +1 -0
  13. package/dist/mcp-server.d.ts +3 -0
  14. package/dist/mcp-server.d.ts.map +1 -0
  15. package/dist/{index.js → mcp-server.js} +124 -113
  16. package/dist/mcp-server.js.map +1 -0
  17. package/dist/ntfy-transport.d.ts +41 -0
  18. package/dist/ntfy-transport.d.ts.map +1 -0
  19. package/dist/ntfy-transport.js +150 -0
  20. package/dist/ntfy-transport.js.map +1 -0
  21. package/dist/setup.d.ts +38 -0
  22. package/dist/setup.d.ts.map +1 -0
  23. package/dist/setup.js +130 -0
  24. package/dist/setup.js.map +1 -0
  25. package/package.json +58 -62
  26. package/LICENSE +0 -20
  27. package/README.md +0 -422
  28. package/config/claude-desktop.json +0 -11
  29. package/config/cursor-mcp.json +0 -17
  30. package/config/vscode-mcp.json +0 -17
  31. package/dist/__tests__/dialog-manager.test.d.ts +0 -2
  32. package/dist/__tests__/dialog-manager.test.d.ts.map +0 -1
  33. package/dist/__tests__/dialog-manager.test.js +0 -140
  34. package/dist/__tests__/dialog-manager.test.js.map +0 -1
  35. package/dist/dialog-manager.d.ts +0 -36
  36. package/dist/dialog-manager.d.ts.map +0 -1
  37. package/dist/dialog-manager.js +0 -529
  38. package/dist/dialog-manager.js.map +0 -1
  39. package/dist/dialog-manager.test.d.ts +0 -2
  40. package/dist/dialog-manager.test.d.ts.map +0 -1
  41. package/dist/dialog-manager.test.js +0 -156
  42. package/dist/dialog-manager.test.js.map +0 -1
  43. package/dist/index.d.ts +0 -3
  44. package/dist/index.d.ts.map +0 -1
  45. package/dist/index.js.map +0 -1
  46. package/dist/test-client.d.ts +0 -3
  47. package/dist/test-client.d.ts.map +0 -1
  48. package/dist/test-client.js +0 -111
  49. package/dist/test-client.js.map +0 -1
  50. package/dist/test-dialog-manager.d.ts +0 -2
  51. package/dist/test-dialog-manager.d.ts.map +0 -1
  52. package/dist/test-dialog-manager.js +0 -156
  53. package/dist/test-dialog-manager.js.map +0 -1
  54. package/example-usage.md +0 -223
  55. package/mcp.json +0 -152
@@ -1,529 +0,0 @@
1
- import express from 'express';
2
- import { v4 as uuidv4 } from 'uuid';
3
- import open from 'open';
4
- import { EventEmitter } from 'events';
5
- export class DialogManager extends EventEmitter {
6
- app;
7
- port;
8
- pendingDialogs;
9
- server;
10
- isInitialized = false;
11
- constructor(port = 0) {
12
- super();
13
- this.port = port;
14
- this.app = express();
15
- this.pendingDialogs = new Map();
16
- this.setupRoutes();
17
- }
18
- setupRoutes() {
19
- this.app.use(express.json());
20
- this.app.use(express.static('public'));
21
- this.app.get('/dialog/:id', (req, res) => {
22
- const dialogId = req.params.id;
23
- const dialog = this.pendingDialogs.get(dialogId);
24
- if (!dialog) {
25
- res.status(404).send('Dialog not found or expired');
26
- return;
27
- }
28
- const html = this.generateDialogHTML(dialog.request);
29
- res.send(html);
30
- });
31
- this.app.post('/dialog/:id/response', (req, res) => {
32
- const dialogId = req.params.id;
33
- const dialog = this.pendingDialogs.get(dialogId);
34
- if (!dialog) {
35
- res.status(404).json({ error: 'Dialog not found or expired' });
36
- return;
37
- }
38
- const response = {
39
- id: dialogId,
40
- selectedValues: req.body.selectedValues || [],
41
- otherText: req.body.otherText,
42
- timestamp: Date.now()
43
- };
44
- if (dialog.timeout) {
45
- clearTimeout(dialog.timeout);
46
- }
47
- dialog.resolve(response);
48
- this.pendingDialogs.delete(dialogId);
49
- res.json({ success: true });
50
- });
51
- this.app.get('/health', (_req, res) => {
52
- res.json({ status: 'healthy', pendingDialogs: this.pendingDialogs.size });
53
- });
54
- }
55
- generateDialogHTML(request) {
56
- return `<!DOCTYPE html>
57
- <html lang="en">
58
- <head>
59
- <meta charset="UTF-8">
60
- <meta name="viewport" content="width=device-width, initial-scale=1.0">
61
- <title>Human In The Loop - Response Required</title>
62
- <style>
63
- * {
64
- margin: 0;
65
- padding: 0;
66
- box-sizing: border-box;
67
- }
68
-
69
- body {
70
- font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
71
- background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
72
- min-height: 100vh;
73
- display: flex;
74
- justify-content: center;
75
- align-items: center;
76
- padding: 20px;
77
- }
78
-
79
- .dialog-container {
80
- background: white;
81
- border-radius: 12px;
82
- box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
83
- max-width: 600px;
84
- width: 100%;
85
- padding: 32px;
86
- animation: slideIn 0.3s ease-out;
87
- }
88
-
89
- @keyframes slideIn {
90
- from {
91
- opacity: 0;
92
- transform: translateY(-20px);
93
- }
94
- to {
95
- opacity: 1;
96
- transform: translateY(0);
97
- }
98
- }
99
-
100
- .header {
101
- margin-bottom: 24px;
102
- }
103
-
104
- .title {
105
- font-size: 24px;
106
- font-weight: 600;
107
- color: #1a202c;
108
- margin-bottom: 8px;
109
- }
110
-
111
- .subtitle {
112
- color: #718096;
113
- font-size: 14px;
114
- }
115
-
116
- .question {
117
- font-size: 18px;
118
- color: #2d3748;
119
- margin-bottom: 8px;
120
- font-weight: 500;
121
- }
122
-
123
- .context {
124
- background: #f7fafc;
125
- border-left: 4px solid #667eea;
126
- padding: 12px;
127
- margin-bottom: 24px;
128
- font-size: 14px;
129
- color: #4a5568;
130
- border-radius: 4px;
131
- }
132
-
133
- .options-container {
134
- margin-bottom: 24px;
135
- }
136
-
137
- .option {
138
- display: flex;
139
- align-items: flex-start;
140
- margin-bottom: 16px;
141
- padding: 12px;
142
- border: 2px solid #e2e8f0;
143
- border-radius: 8px;
144
- cursor: pointer;
145
- transition: all 0.2s;
146
- }
147
-
148
- .option:hover {
149
- border-color: #667eea;
150
- background: #f7fafc;
151
- }
152
-
153
- .option.selected {
154
- border-color: #667eea;
155
- background: #edf2ff;
156
- }
157
-
158
- .option input {
159
- margin-right: 12px;
160
- margin-top: 2px;
161
- cursor: pointer;
162
- }
163
-
164
- .option-content {
165
- flex: 1;
166
- }
167
-
168
- .option-label {
169
- font-weight: 500;
170
- color: #2d3748;
171
- margin-bottom: 4px;
172
- }
173
-
174
- .option-description {
175
- font-size: 14px;
176
- color: #718096;
177
- }
178
-
179
- .other-section {
180
- margin-bottom: 24px;
181
- }
182
-
183
- .other-label {
184
- display: block;
185
- margin-bottom: 8px;
186
- font-weight: 500;
187
- color: #2d3748;
188
- }
189
-
190
- .other-input {
191
- width: 100%;
192
- padding: 12px;
193
- border: 2px solid #e2e8f0;
194
- border-radius: 8px;
195
- font-size: 16px;
196
- transition: border-color 0.2s;
197
- }
198
-
199
- .other-input:focus {
200
- outline: none;
201
- border-color: #667eea;
202
- }
203
-
204
- .button-container {
205
- display: flex;
206
- gap: 12px;
207
- }
208
-
209
- .button {
210
- flex: 1;
211
- padding: 12px 24px;
212
- border: none;
213
- border-radius: 8px;
214
- font-size: 16px;
215
- font-weight: 500;
216
- cursor: pointer;
217
- transition: all 0.2s;
218
- }
219
-
220
- .button-primary {
221
- background: #667eea;
222
- color: white;
223
- }
224
-
225
- .button-primary:hover {
226
- background: #5a67d8;
227
- }
228
-
229
- .button-secondary {
230
- background: #e2e8f0;
231
- color: #4a5568;
232
- }
233
-
234
- .button-secondary:hover {
235
- background: #cbd5e0;
236
- }
237
-
238
- .button:disabled {
239
- opacity: 0.5;
240
- cursor: not-allowed;
241
- }
242
-
243
- .error-message {
244
- color: #e53e3e;
245
- font-size: 14px;
246
- margin-top: 8px;
247
- display: none;
248
- }
249
- </style>
250
- </head>
251
- <body>
252
- <div class="dialog-container">
253
- <div class="header">
254
- <h1 class="title">Human Input Required</h1>
255
- <p class="subtitle">An AI agent needs your guidance to continue</p>
256
- </div>
257
-
258
- <div class="question">${this.escapeHtml(request.question)}</div>
259
-
260
- ${request.context ? `
261
- <div class="context">
262
- <strong>Context:</strong> ${this.escapeHtml(request.context)}
263
- </div>
264
- ` : ''}
265
-
266
- <div class="options-container">
267
- ${request.options.map((option, index) => `
268
- <div class="option" onclick="toggleOption(${index})">
269
- <input type="${request.allowMultiple ? 'checkbox' : 'radio'}"
270
- name="options"
271
- id="option-${index}"
272
- value="${this.escapeHtml(option.value)}">
273
- <div class="option-content">
274
- <div class="option-label">${this.escapeHtml(option.label)}</div>
275
- ${option.description ? `
276
- <div class="option-description">${this.escapeHtml(option.description)}</div>
277
- ` : ''}
278
- </div>
279
- </div>
280
- `).join('')}
281
- </div>
282
-
283
- ${request.allowOther ? `
284
- <div class="other-section">
285
- <label class="other-label" for="other-input">Additional Context (optional):</label>
286
- <textarea class="other-input"
287
- id="other-input"
288
- rows="3"
289
- placeholder="Provide any additional context, clarifications, or notes to help guide the AI..."></textarea>
290
- </div>
291
- ` : ''}
292
-
293
- <div class="error-message" id="error-message"></div>
294
-
295
- <div class="button-container">
296
- <button class="button button-secondary" onclick="skipDialog()">Skip</button>
297
- <button class="button button-primary" onclick="submitResponse()">Submit Response</button>
298
- </div>
299
- </div>
300
-
301
- <script>
302
- const dialogId = '${request.id}';
303
- const allowMultiple = ${request.allowMultiple};
304
- const allowOther = ${request.allowOther};
305
-
306
- function toggleOption(index) {
307
- const option = document.getElementById('option-' + index);
308
- const optionDiv = option.closest('.option');
309
-
310
- if (!allowMultiple) {
311
- document.querySelectorAll('.option').forEach(el => {
312
- el.classList.remove('selected');
313
- });
314
- document.querySelectorAll('input[name="options"]').forEach(el => {
315
- el.checked = false;
316
- });
317
- }
318
-
319
- option.checked = !option.checked;
320
- if (option.checked) {
321
- optionDiv.classList.add('selected');
322
- } else {
323
- optionDiv.classList.remove('selected');
324
- }
325
- }
326
-
327
- function getSelectedValues() {
328
- const selected = [];
329
- document.querySelectorAll('input[name="options"]:checked').forEach(el => {
330
- selected.push(el.value);
331
- });
332
- return selected;
333
- }
334
-
335
- async function submitResponse() {
336
- const selectedValues = getSelectedValues();
337
- const otherText = allowOther ? document.getElementById('other-input').value.trim() : '';
338
-
339
- if (selectedValues.length === 0 && !otherText) {
340
- showError('Please select at least one option and/or provide additional context');
341
- return;
342
- }
343
-
344
- try {
345
- const response = await fetch(\`/dialog/\${dialogId}/response\`, {
346
- method: 'POST',
347
- headers: { 'Content-Type': 'application/json' },
348
- body: JSON.stringify({ selectedValues, otherText })
349
- });
350
-
351
- if (response.ok) {
352
- showSuccess();
353
- } else {
354
- showError('Failed to submit response. Please try again.');
355
- }
356
- } catch (error) {
357
- showError('Network error. Please check your connection.');
358
- }
359
- }
360
-
361
- async function skipDialog() {
362
- try {
363
- const response = await fetch(\`/dialog/\${dialogId}/response\`, {
364
- method: 'POST',
365
- headers: { 'Content-Type': 'application/json' },
366
- body: JSON.stringify({ selectedValues: [], otherText: 'SKIPPED' })
367
- });
368
-
369
- if (response.ok) {
370
- showSuccess('Response skipped');
371
- }
372
- } catch (error) {
373
- showError('Failed to skip. Please try again.');
374
- }
375
- }
376
-
377
- function showError(message) {
378
- const errorEl = document.getElementById('error-message');
379
- errorEl.textContent = message;
380
- errorEl.style.display = 'block';
381
- setTimeout(() => {
382
- errorEl.style.display = 'none';
383
- }, 5000);
384
- }
385
-
386
- function showSuccess(message = 'Response submitted successfully!') {
387
- document.querySelector('.dialog-container').innerHTML = \`
388
- <div style="text-align: center; padding: 48px;">
389
- <div style="font-size: 48px; margin-bottom: 16px;">✓</div>
390
- <h2 style="font-size: 24px; color: #2d3748; margin-bottom: 8px;">\${message}</h2>
391
- <p style="color: #718096;">You can close this window now.</p>
392
- </div>
393
- \`;
394
- setTimeout(() => {
395
- window.close();
396
- }, 2000);
397
- }
398
-
399
- // Allow Enter key to submit when other input is focused
400
- if (allowOther) {
401
- document.getElementById('other-input').addEventListener('keydown', (e) => {
402
- if (e.key === 'Enter' && e.ctrlKey) {
403
- submitResponse();
404
- }
405
- });
406
- }
407
-
408
- // Play pleasant notification sound when dialog opens
409
- async function playNotificationSound() {
410
- try {
411
- const audioContext = new (window.AudioContext || window.webkitAudioContext)();
412
-
413
- // Resume audio context (needed for autoplay policies)
414
- if (audioContext.state === 'suspended') {
415
- await audioContext.resume();
416
- }
417
-
418
- const now = audioContext.currentTime;
419
-
420
- // Create a pleasant two-tone notification (like a doorbell)
421
- function playTone(frequency, startTime, duration) {
422
- const oscillator = audioContext.createOscillator();
423
- const gainNode = audioContext.createGain();
424
-
425
- oscillator.connect(gainNode);
426
- gainNode.connect(audioContext.destination);
427
-
428
- oscillator.frequency.value = frequency;
429
- oscillator.type = 'sine';
430
-
431
- // Envelope for smooth sound (louder)
432
- gainNode.gain.setValueAtTime(0, startTime);
433
- gainNode.gain.linearRampToValueAtTime(0.5, startTime + 0.02);
434
- gainNode.gain.exponentialRampToValueAtTime(0.01, startTime + duration);
435
-
436
- oscillator.start(startTime);
437
- oscillator.stop(startTime + duration);
438
- }
439
-
440
- // Play two pleasant tones (E5 and A5)
441
- playTone(659.25, now + 0.05, 0.2); // E5
442
- playTone(880.00, now + 0.25, 0.25); // A5
443
- } catch (error) {
444
- console.log('Could not play notification sound:', error);
445
- }
446
- }
447
-
448
- // Play sound when page loads
449
- playNotificationSound();
450
-
451
- // Also ensure sound plays on any user interaction if it failed initially
452
- let soundPlayed = false;
453
- document.addEventListener('click', () => {
454
- if (!soundPlayed) {
455
- soundPlayed = true;
456
- playNotificationSound();
457
- }
458
- }, { once: true });
459
- </script>
460
- </body>
461
- </html>`;
462
- }
463
- escapeHtml(text) {
464
- const map = {
465
- '&': '&amp;',
466
- '<': '&lt;',
467
- '>': '&gt;',
468
- '"': '&quot;',
469
- "'": '&#039;'
470
- };
471
- return text.replace(/[&<>"']/g, m => map[m]);
472
- }
473
- async initialize() {
474
- if (this.isInitialized) {
475
- return this.port;
476
- }
477
- return new Promise((resolve, reject) => {
478
- this.server = this.app.listen(this.port, () => {
479
- const addr = this.server.address();
480
- this.port = typeof addr === 'object' && addr !== null ? addr.port : this.port;
481
- this.isInitialized = true;
482
- console.error(`Dialog server running on port ${this.port}`);
483
- resolve(this.port);
484
- });
485
- this.server.on('error', (error) => {
486
- reject(error);
487
- });
488
- });
489
- }
490
- async showDialog(request) {
491
- if (!this.isInitialized) {
492
- await this.initialize();
493
- }
494
- return new Promise((resolve, reject) => {
495
- const dialogId = request.id || uuidv4();
496
- const fullRequest = { ...request, id: dialogId };
497
- let timeout;
498
- if (request.timeout) {
499
- timeout = setTimeout(() => {
500
- this.pendingDialogs.delete(dialogId);
501
- reject(new Error('Dialog timeout'));
502
- }, request.timeout);
503
- }
504
- this.pendingDialogs.set(dialogId, {
505
- request: fullRequest,
506
- resolve,
507
- reject,
508
- timeout
509
- });
510
- const dialogUrl = `http://localhost:${this.port}/dialog/${dialogId}`;
511
- console.error(`Opening dialog: ${dialogUrl}`);
512
- open(dialogUrl).catch((err) => {
513
- console.error('Failed to open browser:', err);
514
- console.error(`Please manually open: ${dialogUrl}`);
515
- });
516
- });
517
- }
518
- async close() {
519
- if (this.server) {
520
- return new Promise((resolve) => {
521
- this.server.close(() => {
522
- this.isInitialized = false;
523
- resolve();
524
- });
525
- });
526
- }
527
- }
528
- }
529
- //# sourceMappingURL=dialog-manager.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dialog-manager.js","sourceRoot":"","sources":["../src/dialog-manager.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=dialog-manager.test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"dialog-manager.test.d.ts","sourceRoot":"","sources":["../src/dialog-manager.test.ts"],"names":[],"mappings":""}