@wonderwhy-er/desktop-commander 0.2.37 → 0.2.38

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 (60) hide show
  1. package/README.md +239 -100
  2. package/dist/command-manager.js +6 -3
  3. package/dist/config-field-definitions.d.ts +41 -0
  4. package/dist/config-field-definitions.js +37 -0
  5. package/dist/config-manager.d.ts +2 -0
  6. package/dist/config-manager.js +22 -2
  7. package/dist/handlers/filesystem-handlers.js +6 -11
  8. package/dist/handlers/macos-control-handlers.d.ts +16 -0
  9. package/dist/handlers/macos-control-handlers.js +81 -0
  10. package/dist/lib.d.ts +10 -0
  11. package/dist/lib.js +10 -0
  12. package/dist/remote-device/remote-channel.js +1 -1
  13. package/dist/server.js +3 -1
  14. package/dist/tools/config.d.ts +71 -0
  15. package/dist/tools/config.js +117 -2
  16. package/dist/tools/macos-control/ax-adapter.d.ts +55 -0
  17. package/dist/tools/macos-control/ax-adapter.js +438 -0
  18. package/dist/tools/macos-control/cdp-adapter.d.ts +23 -0
  19. package/dist/tools/macos-control/cdp-adapter.js +402 -0
  20. package/dist/tools/macos-control/orchestrator.d.ts +77 -0
  21. package/dist/tools/macos-control/orchestrator.js +136 -0
  22. package/dist/tools/macos-control/role-aliases.d.ts +5 -0
  23. package/dist/tools/macos-control/role-aliases.js +34 -0
  24. package/dist/tools/macos-control/types.d.ts +129 -0
  25. package/dist/tools/macos-control/types.js +1 -0
  26. package/dist/tools/schemas.d.ts +3 -0
  27. package/dist/tools/schemas.js +1 -0
  28. package/dist/types.d.ts +0 -1
  29. package/dist/ui/config-editor/config-editor-runtime.js +14181 -0
  30. package/dist/ui/config-editor/index.html +13 -0
  31. package/dist/ui/config-editor/src/app.d.ts +43 -0
  32. package/dist/ui/config-editor/src/app.js +840 -0
  33. package/dist/ui/config-editor/src/array-modal.d.ts +19 -0
  34. package/dist/ui/config-editor/src/array-modal.js +185 -0
  35. package/dist/ui/config-editor/src/main.d.ts +1 -0
  36. package/dist/ui/config-editor/src/main.js +2 -0
  37. package/dist/ui/config-editor/styles.css +586 -0
  38. package/dist/ui/file-preview/preview-runtime.js +13336 -757
  39. package/dist/ui/file-preview/shared/preview-file-types.js +3 -1
  40. package/dist/ui/file-preview/src/app.d.ts +5 -1
  41. package/dist/ui/file-preview/src/app.js +114 -200
  42. package/dist/ui/file-preview/src/components/html-renderer.d.ts +1 -5
  43. package/dist/ui/file-preview/src/components/html-renderer.js +11 -27
  44. package/dist/ui/file-preview/styles.css +117 -83
  45. package/dist/ui/resources.d.ts +7 -0
  46. package/dist/ui/resources.js +16 -2
  47. package/dist/ui/shared/compact-row.d.ts +11 -0
  48. package/dist/ui/shared/compact-row.js +18 -0
  49. package/dist/ui/shared/host-context.d.ts +15 -0
  50. package/dist/ui/shared/host-context.js +51 -0
  51. package/dist/ui/shared/tool-bridge.d.ts +30 -0
  52. package/dist/ui/shared/tool-bridge.js +137 -0
  53. package/dist/ui/shared/tool-shell.d.ts +9 -0
  54. package/dist/ui/shared/tool-shell.js +46 -4
  55. package/dist/ui/shared/ui-event-tracker.d.ts +9 -0
  56. package/dist/ui/shared/ui-event-tracker.js +27 -0
  57. package/dist/utils/capture.js +3 -3
  58. package/dist/version.d.ts +1 -1
  59. package/dist/version.js +1 -1
  60. package/package.json +8 -4
@@ -0,0 +1,586 @@
1
+ /*
2
+ * Global UI design tokens and base element styling shared by all MCP tool apps. It establishes color, spacing, typography, and accessibility-friendly defaults.
3
+ */
4
+ :root {
5
+ color-scheme: light dark;
6
+
7
+ /* Spec variables with light-dark() fallbacks (following customer-segmentation pattern).
8
+ When a host provides --color-* via applyHostStyleVariables, the var() picks it up;
9
+ otherwise the light-dark() fallback keeps the UI legible. */
10
+ --bg: transparent;
11
+ --panel: var(--color-background-primary, light-dark(#ffffff, #1e1e2e));
12
+ --panel-subtle: var(--color-background-tertiary, light-dark(#f5f5f5, #2a2a3c));
13
+ --panel-muted: var(--color-background-tertiary, light-dark(#f5f5f5, #2a2a3c));
14
+ --text: var(--color-text-primary, light-dark(#1a1a2e, #e4e4ef));
15
+ --text-secondary: var(--color-text-secondary, light-dark(#4a4a5a, #a0a0b8));
16
+ --muted: var(--color-text-tertiary, light-dark(#94a3b8, #64748b));
17
+ --border: var(--color-border-primary, light-dark(#e2e8f0, #334155));
18
+ --accent: var(--color-text-info, light-dark(#2563eb, #60a5fa));
19
+ --accent-hover: var(--color-text-info, var(--accent));
20
+ --accent-soft: var(--color-background-info, var(--panel-subtle));
21
+ --focus-ring: var(--color-border-primary, var(--accent));
22
+ --shadow-sm: var(--shadow-sm, none);
23
+ --success-bg: var(--color-background-success, var(--panel-subtle));
24
+ --success-border: var(--color-border-success, var(--border));
25
+ --success-text: var(--color-text-success, light-dark(#059669, #34d399));
26
+ --error-bg: var(--color-background-danger, var(--panel-subtle));
27
+ --error-border: var(--color-border-danger, var(--border));
28
+ --error-text: var(--color-text-danger, light-dark(#dc2626, #f87171));
29
+ --warning-bg: var(--color-background-warning, var(--panel-subtle));
30
+ --warning-border: var(--color-border-warning, var(--border));
31
+ --warning-text: var(--color-text-warning, light-dark(#d97706, #fbbf24));
32
+ }
33
+
34
+ html {
35
+ background: var(--bg);
36
+ }
37
+
38
+ * {
39
+ box-sizing: border-box;
40
+ }
41
+
42
+ body {
43
+ margin: 0;
44
+ background: var(--bg);
45
+ color: var(--text);
46
+ font-family: var(--font-sans, system-ui, sans-serif);
47
+ max-height: 32px;
48
+ overflow: hidden;
49
+ }
50
+
51
+ body.dc-ready {
52
+ max-height: none;
53
+ overflow: visible;
54
+ }
55
+
56
+ #app {
57
+ min-height: 0;
58
+ }
59
+
60
+ .shell {
61
+ max-width: none;
62
+ margin: 0;
63
+ padding: 6px;
64
+ }
65
+
66
+ .tool-shell.collapsed .panel {
67
+ display: none;
68
+ }
69
+
70
+ .hidden {
71
+ display: none !important;
72
+ }
73
+
74
+
75
+ .compact-row {
76
+ display: flex;
77
+ align-items: center;
78
+ gap: 6px;
79
+ padding: 6px 2px;
80
+ font-size: 13px;
81
+ color: var(--muted);
82
+ line-height: 1;
83
+ user-select: none;
84
+ }
85
+
86
+ .compact-row--ready {
87
+ cursor: pointer;
88
+ border-radius: 8px;
89
+ transition: color 150ms ease;
90
+ }
91
+
92
+ .compact-row--ready:hover {
93
+ color: var(--text-secondary);
94
+ }
95
+
96
+ .compact-row--ready:hover .compact-chevron {
97
+ color: var(--text-secondary);
98
+ }
99
+
100
+ .compact-chevron {
101
+ width: 14px;
102
+ height: 14px;
103
+ fill: currentColor;
104
+ color: var(--muted);
105
+ flex-shrink: 0;
106
+ transition: transform 200ms ease, color 150ms ease;
107
+ }
108
+
109
+ .tool-shell.expanded .compact-chevron {
110
+ transform: rotate(90deg);
111
+ }
112
+
113
+ .compact-label {
114
+ color: inherit;
115
+ }
116
+
117
+ .compact-filename {
118
+ color: var(--text);
119
+ font-weight: 600;
120
+ }
121
+
122
+ .compact-row--ready .compact-label::after {
123
+ content: ' · ';
124
+ }
125
+
126
+ .compact-row--loading {
127
+ animation: fade-pulse 1.5s ease-in-out infinite;
128
+ }
129
+
130
+ @keyframes fade-pulse {
131
+ 0%,
132
+ 100% {
133
+ opacity: 0.5;
134
+ }
135
+
136
+ 50% {
137
+ opacity: 1;
138
+ }
139
+ }
140
+
141
+
142
+ :root {
143
+ --cfg-bg: var(--bg);
144
+ --cfg-surface: var(--panel);
145
+ --cfg-text: var(--text);
146
+ --cfg-muted: var(--text-secondary);
147
+ --cfg-border: var(--border);
148
+ --cfg-toggle-knob: var(--panel);
149
+ --cfg-toggle-knob-ring: color-mix(in srgb, var(--text) 72%, transparent);
150
+ --cfg-toggle-on: var(
151
+ --color-text-info,
152
+ var(--color-background-info, var(--color-background-success, color-mix(in srgb, var(--accent) 72%, var(--cfg-border))))
153
+ );
154
+ }
155
+
156
+ body {
157
+ margin: 0;
158
+ font-family: var(--font-sans, "IBM Plex Sans", "Avenir Next", "Segoe UI", sans-serif);
159
+ background: var(--cfg-bg);
160
+ color: var(--cfg-text);
161
+ }
162
+
163
+ .config-shell {
164
+ max-width: none;
165
+ min-height: 0;
166
+ padding: 8px;
167
+ opacity: 0;
168
+ transform: translateY(4px);
169
+ animation: cfg-fade-in 180ms ease-out forwards;
170
+ }
171
+
172
+ @keyframes cfg-fade-in {
173
+ from {
174
+ opacity: 0;
175
+ transform: translateY(4px);
176
+ }
177
+ to {
178
+ opacity: 1;
179
+ transform: translateY(0);
180
+ }
181
+ }
182
+
183
+ .config-card {
184
+ margin-top: 6px;
185
+ background: var(--cfg-surface);
186
+ border: 1px solid color-mix(in srgb, var(--cfg-border) 50%, transparent);
187
+ border-radius: 16px;
188
+ overflow: hidden;
189
+ }
190
+
191
+ .panel-content-wrapper {
192
+ padding: 10px;
193
+ display: block;
194
+ overflow: hidden;
195
+ min-height: 0;
196
+ background: inherit;
197
+ }
198
+
199
+ .settings-stack {
200
+ display: grid;
201
+ gap: 0;
202
+ overflow: visible;
203
+ background: inherit;
204
+ }
205
+
206
+ .setting-row {
207
+ border-bottom: none;
208
+ background: transparent;
209
+ padding: 10px 4px;
210
+ display: grid;
211
+ grid-template-columns: minmax(0, 1fr) auto;
212
+ gap: 12px;
213
+ align-items: center;
214
+ }
215
+
216
+ .setting-row + .setting-row {
217
+ border-top: 1px solid color-mix(in srgb, var(--cfg-border) 40%, transparent);
218
+ }
219
+
220
+ .setting-info h3 {
221
+ margin: 0;
222
+ font-size: 14px;
223
+ font-weight: 600;
224
+ }
225
+
226
+ .setting-info p {
227
+ margin: 2px 0 0;
228
+ font-size: 12px;
229
+ color: var(--cfg-muted);
230
+ line-height: 1.45;
231
+ }
232
+
233
+ .setting-info .setting-summary {
234
+ margin-top: 6px;
235
+ font-size: 11px;
236
+ color: var(--cfg-muted);
237
+ font-weight: 500;
238
+ }
239
+
240
+ .setting-control {
241
+ min-width: 180px;
242
+ justify-self: end;
243
+ display: flex;
244
+ justify-content: flex-end;
245
+ align-items: center;
246
+ gap: 8px;
247
+ }
248
+
249
+ .setting-inline-input {
250
+ width: 120px;
251
+ box-sizing: border-box;
252
+ border: 1px solid var(--cfg-border);
253
+ border-radius: 10px;
254
+ padding: 8px 10px;
255
+ font: inherit;
256
+ font-size: 13px;
257
+ color: var(--cfg-text);
258
+ background: transparent;
259
+ }
260
+
261
+ .setting-inline-action {
262
+ border: 1px solid var(--cfg-border);
263
+ background: transparent;
264
+ color: var(--cfg-text);
265
+ border-radius: 10px;
266
+ padding: 7px 12px;
267
+ font: inherit;
268
+ font-size: 12px;
269
+ cursor: pointer;
270
+ }
271
+
272
+ .setting-inline-select {
273
+ width: 120px;
274
+ box-sizing: border-box;
275
+ border: 1px solid var(--cfg-border);
276
+ border-radius: 10px;
277
+ padding: 8px 10px;
278
+ font: inherit;
279
+ font-size: 13px;
280
+ color: var(--cfg-text);
281
+ background: transparent;
282
+ }
283
+
284
+ .setting-shell-control {
285
+ display: grid;
286
+ gap: 6px;
287
+ justify-items: end;
288
+ }
289
+
290
+ .setting-shell-custom {
291
+ width: 120px;
292
+ }
293
+
294
+ .hidden {
295
+ display: none;
296
+ }
297
+
298
+ .config-tooltip[hidden] {
299
+ display: none;
300
+ }
301
+
302
+ .config-tooltip {
303
+ position: fixed;
304
+ right: 12px;
305
+ bottom: 12px;
306
+ z-index: 40;
307
+ max-width: min(420px, calc(100vw - 24px));
308
+ padding: 8px 10px;
309
+ border-radius: 10px;
310
+ border: 1px solid color-mix(in srgb, var(--cfg-border) 70%, transparent);
311
+ background: color-mix(in srgb, var(--panel) 90%, var(--cfg-border));
312
+ color: var(--cfg-text);
313
+ font-size: 12px;
314
+ line-height: 1.35;
315
+ box-shadow: 0 10px 30px color-mix(in srgb, var(--cfg-border) 26%, transparent);
316
+ }
317
+
318
+ .config-tooltip--error {
319
+ border-color: color-mix(in srgb, var(--error-text) 55%, var(--cfg-border));
320
+ background: color-mix(in srgb, var(--error-text) 10%, var(--panel));
321
+ }
322
+
323
+ .config-tooltip--success {
324
+ border-color: color-mix(in srgb, var(--success-text) 55%, var(--cfg-border));
325
+ background: color-mix(in srgb, var(--success-text) 8%, var(--panel));
326
+ }
327
+
328
+ .setting-inline-static {
329
+ font-size: 12px;
330
+ color: var(--cfg-muted);
331
+ }
332
+
333
+ .setting-switch {
334
+ display: inline-flex;
335
+ align-items: center;
336
+ position: relative;
337
+ width: 40px;
338
+ height: 24px;
339
+ cursor: pointer;
340
+ }
341
+
342
+ .setting-switch input {
343
+ position: absolute;
344
+ inset: 0;
345
+ width: 100%;
346
+ height: 100%;
347
+ opacity: 0;
348
+ pointer-events: auto;
349
+ cursor: pointer;
350
+ }
351
+
352
+ .array-modal[hidden] {
353
+ display: none;
354
+ }
355
+
356
+ .array-modal {
357
+ position: fixed;
358
+ inset: 0;
359
+ background: rgba(0, 0, 0, 0.24);
360
+ display: grid;
361
+ place-items: center;
362
+ z-index: 20;
363
+ }
364
+
365
+ .array-modal-card {
366
+ width: min(760px, calc(100vw - 32px));
367
+ max-height: min(88vh, 900px);
368
+ background: var(--panel);
369
+ border: 1px solid var(--cfg-border);
370
+ border-radius: 14px;
371
+ padding: 12px;
372
+ box-sizing: border-box;
373
+ display: grid;
374
+ grid-template-rows: auto auto auto auto minmax(0, 1fr);
375
+ gap: 8px;
376
+ overflow: hidden;
377
+ }
378
+
379
+ .array-modal-card header {
380
+ display: flex;
381
+ align-items: center;
382
+ justify-content: space-between;
383
+ }
384
+
385
+ .array-modal-card header h3 {
386
+ margin: 0;
387
+ font-size: 14px;
388
+ }
389
+
390
+ .array-modal-description {
391
+ margin: 0;
392
+ font-size: 12px;
393
+ line-height: 1.4;
394
+ color: var(--cfg-muted);
395
+ }
396
+
397
+ .array-modal-hint {
398
+ margin: 0;
399
+ font-size: 11px;
400
+ line-height: 1.35;
401
+ color: var(--cfg-muted);
402
+ }
403
+
404
+ .array-modal-actions {
405
+ display: flex;
406
+ align-items: center;
407
+ gap: 6px;
408
+ }
409
+
410
+ .array-modal-card header button {
411
+ border: 1px solid var(--cfg-border);
412
+ background: transparent;
413
+ color: var(--cfg-text);
414
+ border-radius: 8px;
415
+ width: 30px;
416
+ height: 30px;
417
+ padding: 0;
418
+ display: inline-flex;
419
+ align-items: center;
420
+ justify-content: center;
421
+ cursor: pointer;
422
+ }
423
+
424
+ .array-modal-card header button svg {
425
+ width: 14px;
426
+ height: 14px;
427
+ fill: none;
428
+ stroke: currentcolor;
429
+ stroke-width: 2;
430
+ stroke-linecap: round;
431
+ stroke-linejoin: round;
432
+ }
433
+
434
+ .array-modal-error {
435
+ margin: 0;
436
+ font-size: 12px;
437
+ line-height: 1.35;
438
+ color: var(--error-text);
439
+ }
440
+
441
+ .array-modal-list {
442
+ display: grid;
443
+ gap: 8px;
444
+ min-height: 0;
445
+ overflow: auto;
446
+ }
447
+
448
+ .array-modal-row {
449
+ display: flex;
450
+ align-items: center;
451
+ gap: 8px;
452
+ }
453
+
454
+ .array-modal-row input {
455
+ flex: 1;
456
+ min-width: 0;
457
+ box-sizing: border-box;
458
+ border: 1px solid var(--cfg-border);
459
+ border-radius: 9px;
460
+ padding: 8px 10px;
461
+ background: transparent;
462
+ color: var(--cfg-text);
463
+ font: inherit;
464
+ font-size: 13px;
465
+ }
466
+
467
+ .array-modal-item-remove {
468
+ border: 1px solid var(--cfg-border);
469
+ background: transparent;
470
+ color: var(--cfg-text);
471
+ border-radius: 8px;
472
+ width: 30px;
473
+ height: 30px;
474
+ padding: 0;
475
+ display: inline-flex;
476
+ align-items: center;
477
+ justify-content: center;
478
+ cursor: pointer;
479
+ }
480
+
481
+ .array-modal-item-remove svg {
482
+ width: 14px;
483
+ height: 14px;
484
+ fill: none;
485
+ stroke: currentcolor;
486
+ stroke-width: 2;
487
+ stroke-linecap: round;
488
+ stroke-linejoin: round;
489
+ }
490
+
491
+ .config-boolean-slider {
492
+ width: 40px;
493
+ height: 24px;
494
+ border-radius: 999px;
495
+ background: color-mix(in srgb, var(--cfg-border) 80%, transparent);
496
+ position: relative;
497
+ transition: background 150ms ease;
498
+ }
499
+
500
+ .config-boolean-slider::after {
501
+ content: '';
502
+ width: 18px;
503
+ height: 18px;
504
+ border-radius: 50%;
505
+ background: var(--cfg-toggle-knob);
506
+ border: 1px solid var(--cfg-toggle-knob-ring);
507
+ box-sizing: border-box;
508
+ position: absolute;
509
+ top: 3px;
510
+ left: 3px;
511
+ transition: transform 150ms ease;
512
+ }
513
+
514
+ .setting-switch input:checked + .config-boolean-slider {
515
+ background: var(--cfg-toggle-on);
516
+ }
517
+
518
+ .setting-switch input:checked + .config-boolean-slider::after {
519
+ transform: translateX(16px);
520
+ }
521
+
522
+ .config-shell.host-framed {
523
+ max-width: none;
524
+ min-height: 0;
525
+ padding: 0;
526
+ background: var(--cfg-surface);
527
+ opacity: 1;
528
+ transform: none;
529
+ animation: none;
530
+ }
531
+
532
+ .config-shell.host-framed .config-card {
533
+ margin-top: 0;
534
+ border: none;
535
+ border-radius: 0;
536
+ background: var(--cfg-surface);
537
+ box-shadow: none;
538
+ padding: 0;
539
+ }
540
+
541
+ .config-shell.host-framed .panel-content-wrapper {
542
+ padding: 6px 0;
543
+ }
544
+
545
+ .config-shell.host-framed .compact-row {
546
+ display: none;
547
+ }
548
+
549
+ .config-shell.compact {
550
+ min-height: 0;
551
+ }
552
+
553
+ @media (max-width: 640px) {
554
+ .config-shell {
555
+ padding: 12px;
556
+ min-height: 0;
557
+ }
558
+
559
+ .panel-content-wrapper {
560
+ padding: 12px;
561
+ }
562
+
563
+ .setting-row {
564
+ grid-template-columns: 1fr;
565
+ align-items: start;
566
+ gap: 8px;
567
+ }
568
+
569
+ .setting-control {
570
+ justify-self: stretch;
571
+ justify-content: flex-start;
572
+ min-width: 0;
573
+ }
574
+
575
+ .setting-inline-input,
576
+ .setting-inline-select,
577
+ .setting-shell-custom {
578
+ width: 100%;
579
+ }
580
+
581
+ .array-modal-card {
582
+ width: calc(100vw - 24px);
583
+ max-height: calc(100vh - 24px);
584
+ }
585
+ }
586
+