@achieveai/hitl-mcp-server 1.1.0 → 1.2.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.
- package/dist/dialog-manager.d.ts +1 -0
- package/dist/dialog-manager.d.ts.map +1 -1
- package/dist/dialog-manager.js +164 -49
- package/dist/dialog-manager.js.map +1 -1
- package/dist/test-client.js +15 -1
- package/dist/test-client.js.map +1 -1
- package/package.json +2 -1
- package/sounds/notification.wav +0 -0
package/dist/dialog-manager.d.ts
CHANGED
|
@@ -31,6 +31,7 @@ export declare class DialogManager extends EventEmitter {
|
|
|
31
31
|
private escapeHtml;
|
|
32
32
|
initialize(): Promise<number>;
|
|
33
33
|
showDialog(request: DialogRequest): Promise<DialogResponse>;
|
|
34
|
+
private playNotificationSound;
|
|
34
35
|
close(): Promise<void>;
|
|
35
36
|
}
|
|
36
37
|
//# sourceMappingURL=dialog-manager.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog-manager.d.ts","sourceRoot":"","sources":["../src/dialog-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"dialog-manager.d.ts","sourceRoot":"","sources":["../src/dialog-manager.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;AAQtC,MAAM,WAAW,YAAY;IAC3B,KAAK,EAAE,MAAM,CAAC;IACd,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,aAAa;IAC5B,EAAE,EAAE,MAAM,CAAC;IACX,QAAQ,EAAE,MAAM,CAAC;IACjB,OAAO,EAAE,YAAY,EAAE,CAAC;IACxB,aAAa,EAAE,OAAO,CAAC;IACvB,UAAU,EAAE,OAAO,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,EAAE,EAAE,MAAM,CAAC;IACX,cAAc,EAAE,MAAM,EAAE,CAAC;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,qBAAa,aAAc,SAAQ,YAAY;IAC7C,OAAO,CAAC,GAAG,CAAU;IACrB,OAAO,CAAC,IAAI,CAAS;IACrB,OAAO,CAAC,cAAc,CAKnB;IACH,OAAO,CAAC,MAAM,CAAM;IACpB,OAAO,CAAC,aAAa,CAAkB;gBAE3B,IAAI,GAAE,MAAU;IAQ5B,OAAO,CAAC,WAAW;IAgDnB,OAAO,CAAC,kBAAkB;IAqd1B,OAAO,CAAC,UAAU;IAWZ,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC;IAoB7B,UAAU,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,cAAc,CAAC;IAqCjE,OAAO,CAAC,qBAAqB;IA+CvB,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;CAU7B"}
|
package/dist/dialog-manager.js
CHANGED
|
@@ -2,6 +2,11 @@ import express from 'express';
|
|
|
2
2
|
import { v4 as uuidv4 } from 'uuid';
|
|
3
3
|
import open from 'open';
|
|
4
4
|
import { EventEmitter } from 'events';
|
|
5
|
+
import { exec } from 'child_process';
|
|
6
|
+
import path from 'path';
|
|
7
|
+
import { fileURLToPath } from 'url';
|
|
8
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
9
|
+
const __dirname = path.dirname(__filename);
|
|
5
10
|
export class DialogManager extends EventEmitter {
|
|
6
11
|
app;
|
|
7
12
|
port;
|
|
@@ -59,6 +64,7 @@ export class DialogManager extends EventEmitter {
|
|
|
59
64
|
<meta charset="UTF-8">
|
|
60
65
|
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
|
61
66
|
<title>Human In The Loop - Response Required</title>
|
|
67
|
+
<script src="https://cdn.jsdelivr.net/npm/marked@11.1.1/lib/marked.umd.min.js"></script>
|
|
62
68
|
<style>
|
|
63
69
|
* {
|
|
64
70
|
margin: 0;
|
|
@@ -69,7 +75,9 @@ export class DialogManager extends EventEmitter {
|
|
|
69
75
|
body {
|
|
70
76
|
font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
|
|
71
77
|
background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
|
|
72
|
-
|
|
78
|
+
height: 100vh;
|
|
79
|
+
max-height: 100vh;
|
|
80
|
+
overflow-y: auto;
|
|
73
81
|
display: flex;
|
|
74
82
|
justify-content: center;
|
|
75
83
|
align-items: center;
|
|
@@ -82,6 +90,8 @@ export class DialogManager extends EventEmitter {
|
|
|
82
90
|
box-shadow: 0 20px 60px rgba(0, 0, 0, 0.3);
|
|
83
91
|
max-width: 600px;
|
|
84
92
|
width: 100%;
|
|
93
|
+
max-height: 90vh;
|
|
94
|
+
overflow-y: auto;
|
|
85
95
|
padding: 32px;
|
|
86
96
|
animation: slideIn 0.3s ease-out;
|
|
87
97
|
}
|
|
@@ -128,6 +138,90 @@ export class DialogManager extends EventEmitter {
|
|
|
128
138
|
font-size: 14px;
|
|
129
139
|
color: #4a5568;
|
|
130
140
|
border-radius: 4px;
|
|
141
|
+
max-height: 200px;
|
|
142
|
+
overflow-y: auto;
|
|
143
|
+
line-height: 1.6;
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/* Markdown styling in context */
|
|
147
|
+
.context strong {
|
|
148
|
+
font-weight: 600;
|
|
149
|
+
color: #2d3748;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
.context code {
|
|
153
|
+
background: #e2e8f0;
|
|
154
|
+
padding: 2px 6px;
|
|
155
|
+
border-radius: 3px;
|
|
156
|
+
font-family: 'Courier New', monospace;
|
|
157
|
+
font-size: 13px;
|
|
158
|
+
}
|
|
159
|
+
|
|
160
|
+
.context pre {
|
|
161
|
+
background: #2d3748;
|
|
162
|
+
color: #f7fafc;
|
|
163
|
+
padding: 12px;
|
|
164
|
+
border-radius: 6px;
|
|
165
|
+
overflow-x: auto;
|
|
166
|
+
margin: 8px 0;
|
|
167
|
+
}
|
|
168
|
+
|
|
169
|
+
.context pre code {
|
|
170
|
+
background: transparent;
|
|
171
|
+
color: inherit;
|
|
172
|
+
padding: 0;
|
|
173
|
+
}
|
|
174
|
+
|
|
175
|
+
.context ul, .context ol {
|
|
176
|
+
margin-left: 20px;
|
|
177
|
+
margin-top: 8px;
|
|
178
|
+
margin-bottom: 8px;
|
|
179
|
+
}
|
|
180
|
+
|
|
181
|
+
.context li {
|
|
182
|
+
margin: 4px 0;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
.context p {
|
|
186
|
+
margin: 8px 0;
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
.context h1, .context h2, .context h3 {
|
|
190
|
+
margin-top: 12px;
|
|
191
|
+
margin-bottom: 8px;
|
|
192
|
+
color: #2d3748;
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
.context a {
|
|
196
|
+
color: #667eea;
|
|
197
|
+
text-decoration: underline;
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
.context blockquote {
|
|
201
|
+
border-left: 3px solid #cbd5e0;
|
|
202
|
+
padding-left: 12px;
|
|
203
|
+
margin: 8px 0;
|
|
204
|
+
color: #718096;
|
|
205
|
+
font-style: italic;
|
|
206
|
+
}
|
|
207
|
+
|
|
208
|
+
/* Custom scrollbar for context */
|
|
209
|
+
.context::-webkit-scrollbar {
|
|
210
|
+
width: 8px;
|
|
211
|
+
}
|
|
212
|
+
|
|
213
|
+
.context::-webkit-scrollbar-track {
|
|
214
|
+
background: #e2e8f0;
|
|
215
|
+
border-radius: 4px;
|
|
216
|
+
}
|
|
217
|
+
|
|
218
|
+
.context::-webkit-scrollbar-thumb {
|
|
219
|
+
background: #cbd5e0;
|
|
220
|
+
border-radius: 4px;
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
.context::-webkit-scrollbar-thumb:hover {
|
|
224
|
+
background: #a0aec0;
|
|
131
225
|
}
|
|
132
226
|
|
|
133
227
|
.options-container {
|
|
@@ -259,7 +353,8 @@ export class DialogManager extends EventEmitter {
|
|
|
259
353
|
|
|
260
354
|
${request.context ? `
|
|
261
355
|
<div class="context">
|
|
262
|
-
<strong>Context:</strong>
|
|
356
|
+
<strong>Context:</strong>
|
|
357
|
+
<div id="context-content"></div>
|
|
263
358
|
</div>
|
|
264
359
|
` : ''}
|
|
265
360
|
|
|
@@ -302,6 +397,7 @@ export class DialogManager extends EventEmitter {
|
|
|
302
397
|
const dialogId = '${request.id}';
|
|
303
398
|
const allowMultiple = ${request.allowMultiple};
|
|
304
399
|
const allowOther = ${request.allowOther};
|
|
400
|
+
const contextMarkdown = ${request.context ? JSON.stringify(request.context) : 'null'};
|
|
305
401
|
|
|
306
402
|
function toggleOption(index) {
|
|
307
403
|
const option = document.getElementById('option-' + index);
|
|
@@ -405,57 +501,26 @@ export class DialogManager extends EventEmitter {
|
|
|
405
501
|
});
|
|
406
502
|
}
|
|
407
503
|
|
|
408
|
-
//
|
|
409
|
-
|
|
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);
|
|
504
|
+
// Note: Sound notification is played from the server before opening the browser
|
|
505
|
+
// No client-side sound needed
|
|
427
506
|
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
507
|
+
// Render markdown in context
|
|
508
|
+
if (contextMarkdown && typeof marked !== 'undefined') {
|
|
509
|
+
const contextElement = document.getElementById('context-content');
|
|
510
|
+
if (contextElement) {
|
|
511
|
+
try {
|
|
512
|
+
// Configure marked for safe HTML rendering
|
|
513
|
+
marked.setOptions({
|
|
514
|
+
breaks: true,
|
|
515
|
+
gfm: true
|
|
516
|
+
});
|
|
517
|
+
contextElement.innerHTML = marked.parse(contextMarkdown);
|
|
518
|
+
} catch (error) {
|
|
519
|
+
// Fallback to plain text if markdown parsing fails
|
|
520
|
+
contextElement.textContent = contextMarkdown;
|
|
438
521
|
}
|
|
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
522
|
}
|
|
446
523
|
}
|
|
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
524
|
</script>
|
|
460
525
|
</body>
|
|
461
526
|
</html>`;
|
|
@@ -509,12 +574,62 @@ export class DialogManager extends EventEmitter {
|
|
|
509
574
|
});
|
|
510
575
|
const dialogUrl = `http://localhost:${this.port}/dialog/${dialogId}`;
|
|
511
576
|
console.error(`Opening dialog: ${dialogUrl}`);
|
|
577
|
+
// Play notification sound from server before opening browser
|
|
578
|
+
this.playNotificationSound();
|
|
512
579
|
open(dialogUrl).catch((err) => {
|
|
513
580
|
console.error('Failed to open browser:', err);
|
|
514
581
|
console.error(`Please manually open: ${dialogUrl}`);
|
|
515
582
|
});
|
|
516
583
|
});
|
|
517
584
|
}
|
|
585
|
+
playNotificationSound() {
|
|
586
|
+
try {
|
|
587
|
+
// Path to bundled notification sound (relative to dist folder) - used as fallback
|
|
588
|
+
const bundledSound = path.join(__dirname, '..', 'sounds', 'notification.wav');
|
|
589
|
+
if (process.platform === 'win32') {
|
|
590
|
+
// Windows: Try system sound first, then fall back to bundled sound
|
|
591
|
+
const systemSound = 'C:\\Windows\\Media\\Windows Notify Messaging.wav';
|
|
592
|
+
const script = `(New-Object Media.SoundPlayer '${systemSound}').PlaySync()`;
|
|
593
|
+
exec(`powershell -c "${script}"`, (error) => {
|
|
594
|
+
if (error) {
|
|
595
|
+
// Fallback to bundled custom sound
|
|
596
|
+
const fallbackScript = `(New-Object Media.SoundPlayer '${bundledSound}').PlaySync()`;
|
|
597
|
+
exec(`powershell -c "${fallbackScript}"`, (err2) => {
|
|
598
|
+
if (err2) {
|
|
599
|
+
// Final fallback to beeps
|
|
600
|
+
const beepScript = '[console]::beep(659,150); [console]::beep(880,200)';
|
|
601
|
+
exec(`powershell -c "${beepScript}"`, () => {
|
|
602
|
+
process.stdout.write('\x07');
|
|
603
|
+
});
|
|
604
|
+
}
|
|
605
|
+
});
|
|
606
|
+
}
|
|
607
|
+
});
|
|
608
|
+
}
|
|
609
|
+
else if (process.platform === 'darwin') {
|
|
610
|
+
// macOS: Use system sound, fall back to bundled sound
|
|
611
|
+
exec('afplay /System/Library/Sounds/Glass.aiff', (error) => {
|
|
612
|
+
if (error) {
|
|
613
|
+
exec(`afplay "${bundledSound}"`, () => {
|
|
614
|
+
process.stdout.write('\x07');
|
|
615
|
+
});
|
|
616
|
+
}
|
|
617
|
+
});
|
|
618
|
+
}
|
|
619
|
+
else {
|
|
620
|
+
// Linux: Try system sound, fall back to bundled sound
|
|
621
|
+
exec(`paplay /usr/share/sounds/freedesktop/stereo/message.oga 2>/dev/null || paplay "${bundledSound}" 2>/dev/null || beep || echo -en "\\a"`, (error) => {
|
|
622
|
+
if (error) {
|
|
623
|
+
process.stdout.write('\x07');
|
|
624
|
+
}
|
|
625
|
+
});
|
|
626
|
+
}
|
|
627
|
+
}
|
|
628
|
+
catch (error) {
|
|
629
|
+
// Ultimate fallback: ASCII bell character
|
|
630
|
+
process.stdout.write('\x07');
|
|
631
|
+
}
|
|
632
|
+
}
|
|
518
633
|
async close() {
|
|
519
634
|
if (this.server) {
|
|
520
635
|
return new Promise((resolve) => {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dialog-manager.js","sourceRoot":"","sources":["../src/dialog-manager.ts"],"names":[],"mappings":"AAAA,OAAO,OAAuC,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,EAAE,IAAI,MAAM,EAAE,MAAM,MAAM,CAAC;AACpC,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,MAAM,QAAQ,CAAC;
|
|
1
|
+
{"version":3,"file":"dialog-manager.js","sourceRoot":"","sources":["../src/dialog-manager.ts"],"names":[],"mappings":"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"}
|
package/dist/test-client.js
CHANGED
|
@@ -29,7 +29,21 @@ async function testDialogManager() {
|
|
|
29
29
|
],
|
|
30
30
|
allowMultiple: false,
|
|
31
31
|
allowOther: true,
|
|
32
|
-
context:
|
|
32
|
+
context: `This is for a new web application with expected **10k daily active users**.
|
|
33
|
+
|
|
34
|
+
**Requirements:**
|
|
35
|
+
- Must support \`refresh tokens\`
|
|
36
|
+
- Should integrate with existing \`Redis\` cache
|
|
37
|
+
- Need to handle \`multi-device\` sessions
|
|
38
|
+
|
|
39
|
+
> **Note:** Security is critical - use industry standard practices.
|
|
40
|
+
|
|
41
|
+
\`\`\`javascript
|
|
42
|
+
// Example usage
|
|
43
|
+
const token = generateToken(user);
|
|
44
|
+
\`\`\`
|
|
45
|
+
|
|
46
|
+
See [OAuth 2.0 Spec](https://oauth.net/2/) for details.`
|
|
33
47
|
}
|
|
34
48
|
},
|
|
35
49
|
{
|
package/dist/test-client.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-client.js","sourceRoot":"","sources":["../src/test-client.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,qBAAqB,CAAC;AAEpD,KAAK,UAAU,iBAAiB;IAC9B,OAAO,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC;IAEjD,MAAM,OAAO,GAAG,IAAI,aAAa,EAAE,CAAC;IACpC,MAAM,OAAO,CAAC,UAAU,EAAE,CAAC;IAE3B,MAAM,SAAS,GAAG;QAChB;YACE,IAAI,EAAE,wBAAwB;YAC9B,OAAO,EAAE;gBACP,EAAE,EAAE,QAAQ;gBACZ,QAAQ,EAAE,yEAAyE;gBACnF,OAAO,EAAE;oBACP;wBACE,KAAK,EAAE,YAAY;wBACnB,KAAK,EAAE,KAAK;wBACZ,WAAW,EAAE,gDAAgD;qBAC9D;oBACD;wBACE,KAAK,EAAE,eAAe;wBACtB,KAAK,EAAE,SAAS;wBAChB,WAAW,EAAE,4CAA4C;qBAC1D;oBACD;wBACE,KAAK,EAAE,WAAW;wBAClB,KAAK,EAAE,OAAO;wBACd,WAAW,EAAE,gDAAgD;qBAC9D;iBACF;gBACD,aAAa,EAAE,KAAK;gBACpB,UAAU,EAAE,IAAI;gBAChB,OAAO,EAAE
|
|
1
|
+
{"version":3,"file":"test-client.js","sourceRoot":"","sources":["../src/test-client.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@achieveai/hitl-mcp-server",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.2.0",
|
|
4
4
|
"description": "Human In The Loop MCP Server - Enables LLM agents to ask questions and get user feedback through interactive dialogs",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"bin": {
|
|
@@ -10,6 +10,7 @@
|
|
|
10
10
|
"files": [
|
|
11
11
|
"dist/",
|
|
12
12
|
"config/",
|
|
13
|
+
"sounds/",
|
|
13
14
|
"mcp.json",
|
|
14
15
|
"README.md",
|
|
15
16
|
"LICENSE",
|
|
Binary file
|