@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
@@ -115,6 +115,49 @@
115
115
  color: var(--signal);
116
116
  }
117
117
 
118
+ /* ── Channel selector ──────────────────────────────────────────────────── */
119
+
120
+ .setup-channel-toggle {
121
+ display: flex;
122
+ align-items: center;
123
+ gap: 0.75rem;
124
+ border: none;
125
+ padding: 0;
126
+ margin: 0 0 1.2rem;
127
+ }
128
+
129
+ .setup-channel-toggle[hidden] {
130
+ display: none;
131
+ }
132
+
133
+ .setup-channel-legend {
134
+ font-family: var(--font-heading);
135
+ font-size: var(--step--1);
136
+ font-weight: 600;
137
+ color: var(--ink-700);
138
+ }
139
+
140
+ .setup-channel-select {
141
+ appearance: auto;
142
+ padding: 0.35rem 0.6rem;
143
+ border: 2px solid var(--line);
144
+ border-radius: var(--radius-md);
145
+ background: var(--surface-2);
146
+ font-size: var(--step--1);
147
+ color: var(--ink-950);
148
+ cursor: pointer;
149
+ }
150
+
151
+ .setup-channel-select:focus {
152
+ border-color: var(--signal);
153
+ outline: none;
154
+ }
155
+
156
+ .setup-channel-hint {
157
+ font-size: var(--step--1);
158
+ color: var(--ink-500);
159
+ }
160
+
118
161
  .setup-pinned-prereq {
119
162
  margin-bottom: 1.2rem;
120
163
  }
@@ -725,3 +768,399 @@
725
768
  border-radius: 4px;
726
769
  font-size: 0.8rem;
727
770
  }
771
+
772
+ /* ═══════════════════════════════════════════════════════════════════════
773
+ LICENSE SELECTOR (#1746 Step 3)
774
+ ═══════════════════════════════════════════════════════════════════════ */
775
+
776
+ .license-section {
777
+ margin-top: 2.5rem;
778
+ padding-top: 2rem;
779
+ border-top: 1px solid var(--line);
780
+ }
781
+
782
+ .license-heading {
783
+ font-family: var(--font-heading);
784
+ font-size: var(--step-2);
785
+ font-weight: 700;
786
+ color: var(--ink-950);
787
+ margin: 0 0 0.3rem;
788
+ }
789
+
790
+ .license-sub {
791
+ color: var(--ink-500);
792
+ margin: 0 0 1.5rem;
793
+ font-size: var(--step-0);
794
+ }
795
+
796
+ /* ── Tier buttons ───────────────────────────────────────────────────── */
797
+
798
+ .license-tiers {
799
+ display: grid;
800
+ grid-template-columns: repeat(3, 1fr);
801
+ gap: 0.75rem;
802
+ margin-bottom: 1rem;
803
+ }
804
+
805
+ @media (max-width: 640px) {
806
+ .license-tiers {
807
+ grid-template-columns: 1fr;
808
+ }
809
+ }
810
+
811
+ .license-tier {
812
+ all: unset;
813
+ box-sizing: border-box;
814
+ display: flex;
815
+ flex-direction: column;
816
+ gap: 0.5rem;
817
+ padding: 1rem 1.2rem;
818
+ border: 2px solid var(--line);
819
+ border-radius: var(--radius-md);
820
+ background: var(--paper);
821
+ cursor: pointer;
822
+ transition: border-color 0.15s, box-shadow 0.15s, background 0.15s;
823
+ text-align: left;
824
+ }
825
+
826
+ .license-tier:hover {
827
+ border-color: var(--ink-500);
828
+ }
829
+
830
+ .license-tier:focus-visible {
831
+ outline: 2px solid var(--signal);
832
+ outline-offset: 2px;
833
+ }
834
+
835
+ .license-tier.is-selected {
836
+ border-color: var(--signal);
837
+ background: color-mix(in srgb, var(--signal) 6%, var(--paper));
838
+ box-shadow: 0 0 0 1px var(--signal);
839
+ }
840
+
841
+ .license-tier-price-label {
842
+ display: block;
843
+ font-family: var(--font-heading);
844
+ font-size: 0.75rem;
845
+ font-weight: 700;
846
+ text-transform: uppercase;
847
+ letter-spacing: 0.06em;
848
+ color: var(--ink-500);
849
+ margin-bottom: 0.4rem;
850
+ }
851
+
852
+ .license-tier-price-label--free {
853
+ color: #16a34a;
854
+ }
855
+
856
+ .license-tier-price-label--paid {
857
+ color: var(--signal);
858
+ }
859
+
860
+ .license-tier-header {
861
+ display: flex;
862
+ align-items: center;
863
+ gap: 0.6rem;
864
+ }
865
+
866
+ .license-tier-radio {
867
+ display: inline-block;
868
+ width: 18px;
869
+ height: 18px;
870
+ border: 2px solid var(--ink-500);
871
+ border-radius: 50%;
872
+ flex-shrink: 0;
873
+ position: relative;
874
+ transition: border-color 0.15s;
875
+ }
876
+
877
+ .license-tier.is-selected .license-tier-radio {
878
+ border-color: var(--signal);
879
+ }
880
+
881
+ .license-tier.is-selected .license-tier-radio::after {
882
+ content: '';
883
+ position: absolute;
884
+ inset: 3px;
885
+ background: var(--signal);
886
+ border-radius: 50%;
887
+ }
888
+
889
+ .license-tier-name {
890
+ font-family: var(--font-heading);
891
+ font-size: var(--step-0);
892
+ color: var(--ink-950);
893
+ }
894
+
895
+ .license-tier-badge {
896
+ font-size: 0.7rem;
897
+ font-weight: 600;
898
+ padding: 0.1rem 0.4rem;
899
+ border-radius: 4px;
900
+ text-transform: uppercase;
901
+ letter-spacing: 0.03em;
902
+ }
903
+
904
+ .license-tier-badge--default {
905
+ background: color-mix(in srgb, var(--signal) 15%, transparent);
906
+ color: var(--signal);
907
+ }
908
+
909
+ .license-tier-price {
910
+ font-size: 0.8rem;
911
+ color: var(--ink-500);
912
+ font-weight: 500;
913
+ }
914
+
915
+ .license-tier-desc {
916
+ color: var(--ink-700);
917
+ font-size: 0.85rem;
918
+ line-height: 1.4;
919
+ margin: 0;
920
+ }
921
+
922
+ /* ── Detail panels ──────────────────────────────────────────────────── */
923
+
924
+ .license-detail {
925
+ border: 1px solid var(--line);
926
+ border-radius: var(--radius-md);
927
+ background: var(--surface-1);
928
+ overflow: hidden;
929
+ animation: license-slide-in 0.2s ease-out;
930
+ }
931
+
932
+ @keyframes license-slide-in {
933
+ from { opacity: 0; transform: translateY(-6px); }
934
+ to { opacity: 1; transform: translateY(0); }
935
+ }
936
+
937
+ .license-detail-content {
938
+ padding: 1.2rem 1.5rem;
939
+ }
940
+
941
+ .license-detail-content p {
942
+ margin: 0 0 0.75rem;
943
+ color: var(--ink-700);
944
+ font-size: 0.9rem;
945
+ line-height: 1.5;
946
+ }
947
+
948
+ .license-detail-content a {
949
+ color: var(--signal);
950
+ text-decoration: underline;
951
+ }
952
+
953
+ .license-detail-list {
954
+ margin: 0;
955
+ padding-left: 1.2rem;
956
+ color: var(--ink-700);
957
+ font-size: 0.85rem;
958
+ line-height: 1.8;
959
+ }
960
+
961
+ /* ── Forms ───────────────────────────────────────────────────────────── */
962
+
963
+ .license-form {
964
+ display: flex;
965
+ flex-direction: column;
966
+ gap: 1rem;
967
+ padding: 1.2rem 1.5rem;
968
+ }
969
+
970
+ .license-form-label {
971
+ display: flex;
972
+ flex-direction: column;
973
+ gap: 0.3rem;
974
+ font-size: 0.85rem;
975
+ font-weight: 600;
976
+ color: var(--ink-700);
977
+ }
978
+
979
+ .license-optional {
980
+ font-weight: 400;
981
+ color: var(--ink-500);
982
+ }
983
+
984
+ .license-form-hint {
985
+ font-size: 0.8rem;
986
+ font-weight: 400;
987
+ color: var(--ink-500);
988
+ line-height: 1.4;
989
+ }
990
+
991
+ .license-form-input,
992
+ .license-form-select,
993
+ .license-form-textarea {
994
+ font-family: var(--font-body);
995
+ font-size: 0.9rem;
996
+ padding: 0.55rem 0.75rem;
997
+ border: 1px solid var(--line);
998
+ border-radius: var(--radius-sm);
999
+ background: var(--paper);
1000
+ color: var(--ink-950);
1001
+ transition: border-color 0.15s;
1002
+ }
1003
+
1004
+ .license-form-input:focus,
1005
+ .license-form-select:focus,
1006
+ .license-form-textarea:focus {
1007
+ outline: none;
1008
+ border-color: var(--signal);
1009
+ box-shadow: 0 0 0 2px color-mix(in srgb, var(--signal) 20%, transparent);
1010
+ }
1011
+
1012
+ .license-form-check {
1013
+ display: flex;
1014
+ align-items: flex-start;
1015
+ gap: 0.5rem;
1016
+ font-size: 0.85rem;
1017
+ color: var(--ink-700);
1018
+ line-height: 1.4;
1019
+ cursor: pointer;
1020
+ }
1021
+
1022
+ .license-form-check input[type="checkbox"] {
1023
+ margin-top: 0.15rem;
1024
+ flex-shrink: 0;
1025
+ accent-color: var(--signal);
1026
+ }
1027
+
1028
+ .license-submit-btn {
1029
+ align-self: flex-start;
1030
+ margin-top: 0.25rem;
1031
+ }
1032
+
1033
+ .license-form-status {
1034
+ font-size: 0.85rem;
1035
+ margin: 0;
1036
+ min-height: 1.2em;
1037
+ }
1038
+
1039
+ .license-form-status.is-error {
1040
+ color: #dc2626;
1041
+ }
1042
+
1043
+ .license-form-status.is-success {
1044
+ color: #16a34a;
1045
+ }
1046
+
1047
+ /* ── Saved confirmation ──────────────────────────────────────────────── */
1048
+
1049
+ .license-saved {
1050
+ display: flex;
1051
+ align-items: center;
1052
+ gap: 0.5rem;
1053
+ padding: 0.75rem 1rem;
1054
+ background: color-mix(in srgb, #16a34a 10%, var(--paper));
1055
+ border: 1px solid color-mix(in srgb, #16a34a 30%, var(--line));
1056
+ border-radius: var(--radius-sm);
1057
+ color: #16a34a;
1058
+ font-weight: 600;
1059
+ font-size: 0.9rem;
1060
+ margin-top: 0.75rem;
1061
+ animation: license-slide-in 0.2s ease-out;
1062
+ }
1063
+
1064
+ .license-saved-icon {
1065
+ font-size: 1.1rem;
1066
+ }
1067
+
1068
+ /* ── Dark mode overrides ─────────────────────────────────────────────── */
1069
+
1070
+ [data-theme="dark"] .license-tier {
1071
+ background: var(--surface-1);
1072
+ }
1073
+
1074
+ [data-theme="dark"] .license-tier.is-selected {
1075
+ background: color-mix(in srgb, var(--signal) 10%, var(--surface-1));
1076
+ }
1077
+
1078
+ [data-theme="dark"] .license-form-input,
1079
+ [data-theme="dark"] .license-form-select,
1080
+ [data-theme="dark"] .license-form-textarea {
1081
+ background: var(--surface-2);
1082
+ color: var(--ink-950);
1083
+ }
1084
+
1085
+ /* ── Verification code input ─────────────────────────────────────────── */
1086
+
1087
+ .license-verification {
1088
+ animation: license-slide-in 0.2s ease-out;
1089
+ }
1090
+
1091
+ .license-verify-intro {
1092
+ margin: 0;
1093
+ color: var(--ink-700);
1094
+ font-size: 0.9rem;
1095
+ }
1096
+
1097
+ .license-code-input {
1098
+ font-family: var(--font-mono);
1099
+ font-size: 1.5rem;
1100
+ letter-spacing: 0.3em;
1101
+ text-align: center;
1102
+ max-width: 200px;
1103
+ }
1104
+
1105
+ .license-verify-actions {
1106
+ display: flex;
1107
+ gap: 0.75rem;
1108
+ align-items: center;
1109
+ }
1110
+
1111
+ .license-verify-timer {
1112
+ font-size: 0.8rem;
1113
+ color: var(--ink-500);
1114
+ margin: 0;
1115
+ }
1116
+
1117
+ /* ── Active license details ──────────────────────────────────────────── */
1118
+
1119
+ .license-active-details {
1120
+ margin-top: 0.75rem;
1121
+ }
1122
+
1123
+ .license-info-table {
1124
+ width: 100%;
1125
+ border-collapse: collapse;
1126
+ font-size: 0.85rem;
1127
+ margin-bottom: 12px;
1128
+ }
1129
+
1130
+ .license-info-table td {
1131
+ padding: 6px 0;
1132
+ border-bottom: 1px solid var(--line);
1133
+ vertical-align: top;
1134
+ }
1135
+
1136
+ .license-info-table thead {
1137
+ position: absolute;
1138
+ width: 1px;
1139
+ height: 1px;
1140
+ overflow: hidden;
1141
+ clip: rect(0, 0, 0, 0);
1142
+ }
1143
+
1144
+ .license-info-table td:first-child {
1145
+ font-weight: 600;
1146
+ color: var(--ink-700);
1147
+ width: 130px;
1148
+ padding-right: 12px;
1149
+ }
1150
+
1151
+ .license-info-table td:last-child {
1152
+ color: var(--ink-950);
1153
+ }
1154
+
1155
+ .license-file-path {
1156
+ font-size: 0.8rem;
1157
+ color: var(--ink-500);
1158
+ margin: 0;
1159
+ }
1160
+
1161
+ .license-file-path code {
1162
+ background: var(--surface-2);
1163
+ padding: 2px 6px;
1164
+ border-radius: 4px;
1165
+ font-size: 0.78rem;
1166
+ }