@dollhousemcp/mcp-server 2.0.11 → 2.0.12-rc.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 (93) hide show
  1. package/CHANGELOG.md +33 -0
  2. package/dist/config/ConfigManager.d.ts +34 -0
  3. package/dist/config/ConfigManager.d.ts.map +1 -1
  4. package/dist/config/ConfigManager.js +46 -1
  5. package/dist/config/env.d.ts +18 -0
  6. package/dist/config/env.d.ts.map +1 -1
  7. package/dist/config/env.js +89 -2
  8. package/dist/di/Container.d.ts +1 -0
  9. package/dist/di/Container.d.ts.map +1 -1
  10. package/dist/di/Container.js +38 -2
  11. package/dist/elements/agents/AgentManager.js +2 -2
  12. package/dist/generated/version.d.ts +2 -2
  13. package/dist/generated/version.d.ts.map +1 -1
  14. package/dist/generated/version.js +3 -3
  15. package/dist/handlers/mcp-aql/GatekeeperSession.d.ts.map +1 -1
  16. package/dist/handlers/mcp-aql/GatekeeperSession.js +3 -2
  17. package/dist/handlers/mcp-aql/MCPAQLHandler.d.ts.map +1 -1
  18. package/dist/handlers/mcp-aql/MCPAQLHandler.js +11 -3
  19. package/dist/handlers/mcp-aql/OperationSchema.d.ts.map +1 -1
  20. package/dist/handlers/mcp-aql/OperationSchema.js +11 -6
  21. package/dist/handlers/mcp-aql/policies/ToolClassification.d.ts.map +1 -1
  22. package/dist/handlers/mcp-aql/policies/ToolClassification.js +8 -1
  23. package/dist/index.js +53 -3
  24. package/dist/security/InputNormalizer.d.ts +4 -6
  25. package/dist/security/InputNormalizer.d.ts.map +1 -1
  26. package/dist/security/InputNormalizer.js +10 -16
  27. package/dist/security/audit/config/suppressions.d.ts.map +1 -1
  28. package/dist/security/audit/config/suppressions.js +26 -1
  29. package/dist/security/constants.d.ts +7 -0
  30. package/dist/security/constants.d.ts.map +1 -1
  31. package/dist/security/constants.js +10 -1
  32. package/dist/security/contentValidator.d.ts.map +1 -1
  33. package/dist/security/contentValidator.js +14 -6
  34. package/dist/security/encryption/PatternEncryptor.d.ts.map +1 -1
  35. package/dist/security/encryption/PatternEncryptor.js +18 -10
  36. package/dist/security/securityMonitor.d.ts +1 -1
  37. package/dist/security/securityMonitor.d.ts.map +1 -1
  38. package/dist/security/securityMonitor.js +1 -1
  39. package/dist/security/tokenManager.d.ts +18 -2
  40. package/dist/security/tokenManager.d.ts.map +1 -1
  41. package/dist/security/tokenManager.js +47 -15
  42. package/dist/security/validators/unicodeValidator.d.ts +4 -5
  43. package/dist/security/validators/unicodeValidator.d.ts.map +1 -1
  44. package/dist/security/validators/unicodeValidator.js +19 -20
  45. package/dist/services/VerificationNotifier.d.ts.map +1 -1
  46. package/dist/services/VerificationNotifier.js +15 -13
  47. package/dist/services/validation/GenericElementValidator.js +5 -5
  48. package/dist/web/console/IngestRoutes.d.ts +14 -2
  49. package/dist/web/console/IngestRoutes.d.ts.map +1 -1
  50. package/dist/web/console/IngestRoutes.js +69 -5
  51. package/dist/web/console/LeaderElection.d.ts +37 -3
  52. package/dist/web/console/LeaderElection.d.ts.map +1 -1
  53. package/dist/web/console/LeaderElection.js +67 -7
  54. package/dist/web/console/LeaderForwardingSink.d.ts +19 -3
  55. package/dist/web/console/LeaderForwardingSink.d.ts.map +1 -1
  56. package/dist/web/console/LeaderForwardingSink.js +44 -9
  57. package/dist/web/console/PromotionManager.d.ts +29 -0
  58. package/dist/web/console/PromotionManager.d.ts.map +1 -0
  59. package/dist/web/console/PromotionManager.js +94 -0
  60. package/dist/web/console/SessionNames.d.ts +7 -0
  61. package/dist/web/console/SessionNames.d.ts.map +1 -1
  62. package/dist/web/console/SessionNames.js +10 -1
  63. package/dist/web/console/UnifiedConsole.d.ts +26 -1
  64. package/dist/web/console/UnifiedConsole.d.ts.map +1 -1
  65. package/dist/web/console/UnifiedConsole.js +143 -20
  66. package/dist/web/portDiscovery.d.ts +4 -3
  67. package/dist/web/portDiscovery.d.ts.map +1 -1
  68. package/dist/web/portDiscovery.js +7 -5
  69. package/dist/web/public/app.js +35 -18
  70. package/dist/web/public/consoleAuth.js +152 -0
  71. package/dist/web/public/index.html +243 -9
  72. package/dist/web/public/logs.js +1 -1
  73. package/dist/web/public/metrics.js +3 -3
  74. package/dist/web/public/permissions.js +1 -1
  75. package/dist/web/public/security.css +396 -0
  76. package/dist/web/public/security.js +393 -0
  77. package/dist/web/public/sessions.css +54 -4
  78. package/dist/web/public/sessions.js +46 -6
  79. package/dist/web/public/setup.css +439 -0
  80. package/dist/web/public/setup.js +490 -18
  81. package/dist/web/public/styles.css +10 -0
  82. package/dist/web/routes/permissionRoutes.d.ts.map +1 -1
  83. package/dist/web/routes/permissionRoutes.js +8 -3
  84. package/dist/web/routes/setupRoutes.d.ts +4 -0
  85. package/dist/web/routes/setupRoutes.d.ts.map +1 -1
  86. package/dist/web/routes/setupRoutes.js +418 -7
  87. package/dist/web/routes.d.ts.map +1 -1
  88. package/dist/web/routes.js +9 -5
  89. package/dist/web/server.d.ts +49 -3
  90. package/dist/web/server.d.ts.map +1 -1
  91. package/dist/web/server.js +282 -82
  92. package/package.json +11 -2
  93. package/server.json +2 -2
@@ -0,0 +1,396 @@
1
+ /* Auth tab styles (#1791) — follows permissions.css patterns */
2
+
3
+ /* Intro explainer (#1816) */
4
+ /* Intro card spans the full grid width */
5
+ .sec-card--intro {
6
+ grid-column: 1 / -1;
7
+ }
8
+
9
+ .sec-intro-summary {
10
+ font-weight: 400;
11
+ font-size: 0.8125rem;
12
+ color: var(--ink-500, #6b7a8d);
13
+ }
14
+
15
+ .sec-intro-subtitle {
16
+ margin: 1.25rem 0 0.5rem;
17
+ font-size: 0.8125rem;
18
+ font-weight: 700;
19
+ text-transform: uppercase;
20
+ letter-spacing: 0.06em;
21
+ color: var(--ink-500, #6b7a8d);
22
+ }
23
+
24
+ .sec-intro-content p {
25
+ font-size: 0.875rem;
26
+ line-height: 1.7;
27
+ color: var(--ink-700, #324563);
28
+ margin: 0 0 0.5rem;
29
+ }
30
+
31
+ .sec-intro-list {
32
+ margin: 0.25rem 0 0 1.25rem;
33
+ padding: 0;
34
+ font-size: 0.8125rem;
35
+ line-height: 1.7;
36
+ color: var(--ink-700, #324563);
37
+ }
38
+
39
+ .sec-intro-list li {
40
+ margin-bottom: 0.625rem;
41
+ }
42
+
43
+ .sec-intro-list li strong {
44
+ color: var(--ink-900, #18243a);
45
+ }
46
+
47
+ /* Intro doc link */
48
+
49
+ .sec-intro-link {
50
+ font-size: 0.8125rem;
51
+ font-weight: 600;
52
+ color: var(--signal, #1e40af);
53
+ text-decoration: none;
54
+ }
55
+
56
+ .sec-intro-link:hover {
57
+ text-decoration: underline;
58
+ }
59
+
60
+ /* Dashboard grid — single column keeps cards readable at all widths.
61
+ The token card has too much metadata for a half-width column. */
62
+ .sec-dashboard {
63
+ display: grid;
64
+ grid-template-columns: 1fr;
65
+ gap: 1rem;
66
+ padding: 1rem;
67
+ max-width: 720px;
68
+ margin: 0 auto;
69
+ }
70
+
71
+ @media (min-width: 900px) {
72
+ .sec-dashboard {
73
+ grid-template-columns: 1fr 1fr;
74
+ max-width: 1200px;
75
+ }
76
+ }
77
+
78
+ /* Cards */
79
+ .sec-card {
80
+ background: var(--paper-strong, #ffffff);
81
+ border: 1px solid var(--line, #c8d5e9);
82
+ border-radius: 0.5rem;
83
+ overflow: hidden;
84
+ }
85
+
86
+ .sec-card--wide {
87
+ grid-column: 1 / -1;
88
+ }
89
+
90
+ .sec-card-header {
91
+ padding: 0.75rem 1rem;
92
+ background: var(--paper-base, #f8fbff);
93
+ border-bottom: 1px solid var(--line, #c8d5e9);
94
+ }
95
+
96
+ .sec-card-title {
97
+ margin: 0;
98
+ font-size: 0.875rem;
99
+ font-weight: 600;
100
+ color: var(--ink-900, #18243a);
101
+ }
102
+
103
+ /* Collapse/expand — intro card only */
104
+ .sec-card--intro .sec-card-header {
105
+ display: flex;
106
+ align-items: center;
107
+ justify-content: space-between;
108
+ width: 100%;
109
+ border: none;
110
+ border-bottom: 1px solid var(--line, #c8d5e9);
111
+ cursor: pointer;
112
+ user-select: none;
113
+ font: inherit;
114
+ color: inherit;
115
+ text-align: left;
116
+ }
117
+
118
+ .sec-card--intro .sec-card-header:hover {
119
+ background: var(--surface-2, #f8fbff);
120
+ }
121
+
122
+ .sec-card-toggle {
123
+ font-size: 0.75rem;
124
+ color: var(--ink-500, #6b7a8d);
125
+ transition: transform 0.2s;
126
+ }
127
+
128
+ .sec-card[data-collapsed="true"] .sec-card-body {
129
+ display: none;
130
+ }
131
+
132
+ .sec-card[data-collapsed="true"] .sec-card-toggle {
133
+ transform: rotate(-90deg);
134
+ }
135
+
136
+ .sec-card-body {
137
+ padding: 1rem;
138
+ }
139
+
140
+ /* Token display */
141
+ .sec-token-row {
142
+ display: flex;
143
+ align-items: center;
144
+ gap: 0.5rem;
145
+ margin-bottom: 1rem;
146
+ flex-wrap: wrap;
147
+ }
148
+
149
+ .sec-token-value {
150
+ font-family: var(--font-mono, monospace);
151
+ font-size: 0.8125rem;
152
+ background: var(--surface-1, #eaf1ff);
153
+ padding: 0.25rem 0.5rem;
154
+ border-radius: 0.25rem;
155
+ word-break: break-all;
156
+ flex: 1;
157
+ min-width: 0;
158
+ }
159
+
160
+ /* Metadata grid */
161
+ .sec-meta-grid {
162
+ display: grid;
163
+ grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
164
+ gap: 0.5rem;
165
+ margin-bottom: 1rem;
166
+ }
167
+
168
+ .sec-meta {
169
+ font-size: 0.8125rem;
170
+ color: var(--ink-700, #324563);
171
+ }
172
+
173
+ .sec-meta code {
174
+ font-size: 0.75rem;
175
+ background: var(--surface-1, #eaf1ff);
176
+ padding: 0.125rem 0.25rem;
177
+ border-radius: 0.1875rem;
178
+ word-break: break-all;
179
+ }
180
+
181
+ .sec-meta-inline {
182
+ font-size: 0.8125rem;
183
+ color: var(--ink-500, #6b7a8d);
184
+ margin-left: 0.5rem;
185
+ }
186
+
187
+ .sec-label {
188
+ font-weight: 600;
189
+ color: var(--ink-900, #18243a);
190
+ font-size: 0.75rem;
191
+ text-transform: uppercase;
192
+ letter-spacing: 0.04em;
193
+ margin-right: 0.25rem;
194
+ }
195
+
196
+ /* TOTP status */
197
+ .sec-totp-status {
198
+ display: flex;
199
+ align-items: center;
200
+ gap: 0.5rem;
201
+ margin-bottom: 0.75rem;
202
+ font-size: 0.875rem;
203
+ }
204
+
205
+ .sec-status-dot {
206
+ width: 8px;
207
+ height: 8px;
208
+ border-radius: 50%;
209
+ flex-shrink: 0;
210
+ }
211
+
212
+ .sec-status-dot--green {
213
+ background: #22c55e;
214
+ box-shadow: 0 0 6px rgba(34, 197, 94, 0.5);
215
+ }
216
+
217
+ .sec-status-dot--amber {
218
+ background: #f59e0b;
219
+ box-shadow: 0 0 6px rgba(245, 158, 11, 0.5);
220
+ }
221
+
222
+ /* Buttons */
223
+ .sec-btn {
224
+ display: inline-flex;
225
+ align-items: center;
226
+ gap: 0.25rem;
227
+ padding: 0.375rem 0.75rem;
228
+ border: 1px solid var(--line, #c8d5e9);
229
+ border-radius: 0.375rem;
230
+ background: var(--paper-strong, #ffffff);
231
+ color: var(--ink-900, #18243a);
232
+ font-family: var(--font-mono, monospace);
233
+ font-size: 0.75rem;
234
+ font-weight: 600;
235
+ cursor: pointer;
236
+ transition: background 0.15s, border-color 0.15s;
237
+ }
238
+
239
+ .sec-btn:hover { background: var(--surface-2, #f8fbff); }
240
+ .sec-btn:disabled { opacity: 0.5; cursor: not-allowed; }
241
+
242
+ .sec-btn--sm {
243
+ padding: 0.25rem 0.5rem;
244
+ font-size: 0.6875rem;
245
+ }
246
+
247
+ .sec-btn--primary {
248
+ background: var(--signal, #1e40af);
249
+ color: #ffffff;
250
+ border-color: var(--signal, #1e40af);
251
+ }
252
+
253
+ .sec-btn--primary:hover { background: var(--signal-2, #3b82f6); }
254
+
255
+ .sec-btn--danger {
256
+ background: #b91c1c;
257
+ color: #ffffff;
258
+ border-color: #b91c1c;
259
+ }
260
+
261
+ .sec-btn--danger:hover { background: #dc2626; }
262
+
263
+ .sec-actions {
264
+ display: flex;
265
+ gap: 0.5rem;
266
+ margin-top: 0.75rem;
267
+ }
268
+
269
+ /* Hints */
270
+ .sec-hint {
271
+ font-size: 0.8125rem;
272
+ color: var(--ink-500, #6b7a8d);
273
+ margin: 0.5rem 0;
274
+ }
275
+
276
+ .sec-hint--warn {
277
+ color: #b45309;
278
+ font-weight: 600;
279
+ }
280
+
281
+ .sec-error {
282
+ color: #b91c1c;
283
+ padding: 1rem;
284
+ }
285
+
286
+ /* Enrollment flow */
287
+ .sec-enroll-flow h4 {
288
+ margin: 0 0 0.75rem;
289
+ font-size: 0.875rem;
290
+ }
291
+
292
+ .sec-qr-container {
293
+ display: flex;
294
+ justify-content: center;
295
+ margin: 1rem 0;
296
+ }
297
+
298
+ .sec-qr-img {
299
+ width: 200px;
300
+ height: 200px;
301
+ border: 1px solid var(--line, #c8d5e9);
302
+ border-radius: 0.5rem;
303
+ padding: 0.5rem;
304
+ background: #ffffff;
305
+ }
306
+
307
+ .sec-confirm-form {
308
+ display: flex;
309
+ align-items: center;
310
+ gap: 0.5rem;
311
+ flex-wrap: wrap;
312
+ margin-top: 1rem;
313
+ }
314
+
315
+ .sec-confirm-form label {
316
+ width: 100%;
317
+ font-size: 0.8125rem;
318
+ font-weight: 600;
319
+ color: var(--ink-700, #324563);
320
+ margin-bottom: 0.25rem;
321
+ }
322
+
323
+ .sec-input {
324
+ font-family: var(--font-mono, monospace);
325
+ font-size: 1.125rem;
326
+ padding: 0.5rem 0.75rem;
327
+ border: 1px solid var(--line, #c8d5e9);
328
+ border-radius: 0.375rem;
329
+ background: var(--paper-strong, #ffffff);
330
+ color: var(--ink-900, #18243a);
331
+ width: 10ch;
332
+ text-align: center;
333
+ letter-spacing: 0.2em;
334
+ }
335
+
336
+ /* Backup codes */
337
+ .sec-backup-codes h4 {
338
+ margin: 0 0 0.5rem;
339
+ }
340
+
341
+ .sec-codes-grid {
342
+ display: grid;
343
+ grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
344
+ gap: 0.375rem;
345
+ margin: 0.75rem 0;
346
+ }
347
+
348
+ .sec-code {
349
+ font-family: var(--font-mono, monospace);
350
+ font-size: 0.875rem;
351
+ background: var(--surface-1, #eaf1ff);
352
+ padding: 0.375rem 0.5rem;
353
+ border-radius: 0.25rem;
354
+ text-align: center;
355
+ letter-spacing: 0.05em;
356
+ }
357
+
358
+ /* Responsive */
359
+ @media (max-width: 768px) {
360
+ .sec-dashboard {
361
+ grid-template-columns: 1fr;
362
+ }
363
+ .sec-meta-grid {
364
+ grid-template-columns: 1fr;
365
+ }
366
+ }
367
+
368
+ /* Dark mode */
369
+ [data-theme="dark"] .sec-card {
370
+ background: var(--paper-strong, #1a1a2e);
371
+ border-color: var(--line, #2d3748);
372
+ }
373
+
374
+ [data-theme="dark"] .sec-card-header {
375
+ background: var(--paper-base, #161625);
376
+ }
377
+
378
+ [data-theme="dark"] .sec-token-value,
379
+ [data-theme="dark"] .sec-meta code,
380
+ [data-theme="dark"] .sec-code {
381
+ background: var(--surface-1, #1e293b);
382
+ }
383
+
384
+ [data-theme="dark"] .sec-qr-img {
385
+ background: #ffffff;
386
+ }
387
+
388
+ [data-theme="dark"] .sec-input {
389
+ background: var(--paper-strong, #1a1a2e);
390
+ color: var(--ink-100, #e2e8f0);
391
+ border-color: var(--line, #2d3748);
392
+ }
393
+
394
+ [data-theme="dark"] .sec-hint--warn {
395
+ color: #fbbf24;
396
+ }