@bimatrix-aud-platform/aud_mcp_server 1.1.56 → 1.1.63
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/generators/compact.d.ts +16 -0
- package/dist/generators/compact.js +299 -0
- package/dist/generators/defaults.js +2 -2
- package/dist/generators/fixer.js +100 -73
- package/dist/generators/olap-field.js +1 -0
- package/dist/index.js +81 -14
- package/dist/resources/encrypted-commands.d.ts +3 -3
- package/dist/resources/encrypted-commands.js +3 -3
- package/dist/utils/aud-api-client.js +4 -2
- package/dist/utils/report-publisher.d.ts +1 -0
- package/dist/utils/report-publisher.js +6 -2
- package/package.json +1 -1
- package/schemas/design.interface.ts +406 -0
- package/schemas/design.schema.json +5907 -0
- package/dist/generators/report-template.d.ts +0 -43
- package/dist/generators/report-template.js +0 -723
package/dist/index.js
CHANGED
|
@@ -13,6 +13,7 @@ import { generateDataSource } from "./generators/datasource.js";
|
|
|
13
13
|
import { fixMtsd } from "./generators/fixer.js";
|
|
14
14
|
import { getControlInfo } from "./generators/control-info.js";
|
|
15
15
|
import { generateOlapFields } from "./generators/olap-field.js";
|
|
16
|
+
import { compactElement, compactGridColumn, compactDataSource, compactOlapField } from "./generators/compact.js";
|
|
16
17
|
import { executeMtsdScript } from "./generators/mtsd-builder.js";
|
|
17
18
|
import { generateId } from "./utils/uuid.js";
|
|
18
19
|
import { callSchemaService, callDbmsList, callBoxStyleService, callBoxStyleSaveService, callSaveReportService, callReadReportService, downloadReportResources, getAudConfig, isAudConfigured, setWorkspaceRoots, callModuleService } from "./utils/aud-api-client.js";
|
|
@@ -60,6 +61,16 @@ catch (error) {
|
|
|
60
61
|
console.error("Failed to load ds schema:", error);
|
|
61
62
|
process.exit(1);
|
|
62
63
|
}
|
|
64
|
+
// Load Design (compact) schema
|
|
65
|
+
const designSchemaPath = join(__dirname, "..", "schemas", "design.schema.json");
|
|
66
|
+
let designSchema;
|
|
67
|
+
try {
|
|
68
|
+
designSchema = JSON.parse(readFileSync(designSchemaPath, "utf-8"));
|
|
69
|
+
}
|
|
70
|
+
catch (error) {
|
|
71
|
+
console.error("Failed to load design schema:", error);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
63
74
|
// Initialize AJV validator
|
|
64
75
|
const ajv = new Ajv.default({
|
|
65
76
|
allErrors: true,
|
|
@@ -68,6 +79,7 @@ const ajv = new Ajv.default({
|
|
|
68
79
|
});
|
|
69
80
|
addFormats.default(ajv);
|
|
70
81
|
const validate = ajv.compile(mtsdSchema);
|
|
82
|
+
const validateDesign = ajv.compile(designSchema);
|
|
71
83
|
const validateModule = ajv.compile(moduleSchema);
|
|
72
84
|
const validateJson2 = ajv.compile(json2Schema);
|
|
73
85
|
const validateDs = ajv.compile(dsSchema);
|
|
@@ -108,13 +120,19 @@ function groupErrors(errors) {
|
|
|
108
120
|
return grouped;
|
|
109
121
|
}
|
|
110
122
|
// Get schema definition by reference
|
|
111
|
-
|
|
112
|
-
|
|
123
|
+
// format: "mtsd" (full) or "design" (compact, relaxed required)
|
|
124
|
+
function getSchemaDefinition(defName, format = "mtsd") {
|
|
125
|
+
const schema = format === "design" ? designSchema : mtsdSchema;
|
|
126
|
+
const defs = schema.$defs;
|
|
113
127
|
if (defs && defs[defName]) {
|
|
114
128
|
return defs[defName];
|
|
115
129
|
}
|
|
116
130
|
return null;
|
|
117
131
|
}
|
|
132
|
+
// Get the appropriate schema object by format
|
|
133
|
+
function getSchemaByFormat(format) {
|
|
134
|
+
return format === "design" ? designSchema : mtsdSchema;
|
|
135
|
+
}
|
|
118
136
|
// Extract required and optional properties from schema definition
|
|
119
137
|
function extractProperties(defName) {
|
|
120
138
|
const def = getSchemaDefinition(defName);
|
|
@@ -142,7 +160,7 @@ function extractProperties(defName) {
|
|
|
142
160
|
const tools = [
|
|
143
161
|
{
|
|
144
162
|
name: "validate_mtsd",
|
|
145
|
-
description: "MTSD 문서 전체를 검증합니다. JSON 문자열 또는 객체를 받아 스키마 준수 여부를 확인하고, 오류가 있으면 상세한 한국어 오류 메시지를 반환합니다.",
|
|
163
|
+
description: "MTSD 또는 .design.json 문서 전체를 검증합니다. JSON 문자열 또는 객체를 받아 스키마 준수 여부를 확인하고, 오류가 있으면 상세한 한국어 오류 메시지를 반환합니다. format='design'이면 간소화된 .design.json 스키마(기본값 생략 허용)로 검증합니다.",
|
|
146
164
|
inputSchema: {
|
|
147
165
|
type: "object",
|
|
148
166
|
properties: {
|
|
@@ -150,13 +168,19 @@ const tools = [
|
|
|
150
168
|
type: ["string", "object"],
|
|
151
169
|
description: "검증할 MTSD 문서 (JSON 문자열 또는 객체)",
|
|
152
170
|
},
|
|
171
|
+
format: {
|
|
172
|
+
type: "string",
|
|
173
|
+
enum: ["mtsd", "design"],
|
|
174
|
+
description: "검증 스키마 형식. 'mtsd'(기본값): 전체 MTSD 스키마, 'design': 간소화된 .design.json 스키마 (기본값 생략 허용)",
|
|
175
|
+
default: "mtsd",
|
|
176
|
+
},
|
|
153
177
|
},
|
|
154
178
|
required: ["document"],
|
|
155
179
|
},
|
|
156
180
|
},
|
|
157
181
|
{
|
|
158
182
|
name: "validate_part",
|
|
159
|
-
description: "MTSD 문서의 특정 부분만 검증합니다. 예: Forms, DataSources, Elements 등.
|
|
183
|
+
description: "MTSD 또는 .design.json 문서의 특정 부분만 검증합니다. 예: Forms, DataSources, Elements 등. format='design'이면 간소화된 스키마(기본값 생략 허용)로 검증합니다.",
|
|
160
184
|
inputSchema: {
|
|
161
185
|
type: "object",
|
|
162
186
|
properties: {
|
|
@@ -213,6 +237,12 @@ const tools = [
|
|
|
213
237
|
type: ["string", "object"],
|
|
214
238
|
description: "검증할 데이터 (JSON 문자열 또는 객체)",
|
|
215
239
|
},
|
|
240
|
+
format: {
|
|
241
|
+
type: "string",
|
|
242
|
+
enum: ["mtsd", "design"],
|
|
243
|
+
description: "검증 스키마 형식. 'mtsd'(기본값): 전체 MTSD 스키마, 'design': 간소화된 .design.json 스키마 (기본값 생략 허용)",
|
|
244
|
+
default: "mtsd",
|
|
245
|
+
},
|
|
216
246
|
},
|
|
217
247
|
required: ["partName", "data"],
|
|
218
248
|
},
|
|
@@ -386,6 +416,11 @@ const tools = [
|
|
|
386
416
|
type: "boolean",
|
|
387
417
|
description: "표시 여부 (기본값: true)",
|
|
388
418
|
},
|
|
419
|
+
compact: {
|
|
420
|
+
type: "boolean",
|
|
421
|
+
description: "간소화된 .design.json용 출력 (기본값과 동일한 속성 제거). 기본값: false",
|
|
422
|
+
default: false,
|
|
423
|
+
},
|
|
389
424
|
},
|
|
390
425
|
required: ["type"],
|
|
391
426
|
additionalProperties: true,
|
|
@@ -445,6 +480,11 @@ const tools = [
|
|
|
445
480
|
},
|
|
446
481
|
description: "생성할 컬럼 목록",
|
|
447
482
|
},
|
|
483
|
+
compact: {
|
|
484
|
+
type: "boolean",
|
|
485
|
+
description: "간소화된 .design.json용 출력 (기본값과 동일한 속성 제거). 기본값: false",
|
|
486
|
+
default: false,
|
|
487
|
+
},
|
|
448
488
|
},
|
|
449
489
|
required: ["columns"],
|
|
450
490
|
},
|
|
@@ -494,6 +534,11 @@ const tools = [
|
|
|
494
534
|
useMeta: { type: "boolean" },
|
|
495
535
|
useCache: { type: "boolean" },
|
|
496
536
|
encrypted: { type: "boolean" },
|
|
537
|
+
compact: {
|
|
538
|
+
type: "boolean",
|
|
539
|
+
description: "간소화된 .design.json용 출력 (기본값과 동일한 속성 제거). 기본값: false",
|
|
540
|
+
default: false,
|
|
541
|
+
},
|
|
497
542
|
},
|
|
498
543
|
required: ["name", "connection"],
|
|
499
544
|
additionalProperties: true,
|
|
@@ -543,6 +588,11 @@ const tools = [
|
|
|
543
588
|
type: "boolean",
|
|
544
589
|
description: "iOLAPView 전체 구조(Options + Fields) 포함 여부 (기본: false)",
|
|
545
590
|
},
|
|
591
|
+
compact: {
|
|
592
|
+
type: "boolean",
|
|
593
|
+
description: "간소화된 .design.json용 출력 (기본값과 동일한 속성 제거). 기본값: false",
|
|
594
|
+
default: false,
|
|
595
|
+
},
|
|
546
596
|
},
|
|
547
597
|
required: ["columns"],
|
|
548
598
|
},
|
|
@@ -951,6 +1001,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
951
1001
|
switch (name) {
|
|
952
1002
|
case "validate_mtsd": {
|
|
953
1003
|
let document = args?.document;
|
|
1004
|
+
const format = args?.format || "mtsd";
|
|
954
1005
|
if (typeof document === "string") {
|
|
955
1006
|
try {
|
|
956
1007
|
document = JSON.parse(document);
|
|
@@ -969,7 +1020,9 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
969
1020
|
};
|
|
970
1021
|
}
|
|
971
1022
|
}
|
|
972
|
-
const
|
|
1023
|
+
const validator = format === "design" ? validateDesign : validate;
|
|
1024
|
+
const valid = validator(document);
|
|
1025
|
+
const formatLabel = format === "design" ? "Design" : "MTSD";
|
|
973
1026
|
if (valid) {
|
|
974
1027
|
return {
|
|
975
1028
|
content: [
|
|
@@ -977,14 +1030,14 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
977
1030
|
type: "text",
|
|
978
1031
|
text: JSON.stringify({
|
|
979
1032
|
valid: true,
|
|
980
|
-
message:
|
|
1033
|
+
message: `${formatLabel} 문서가 스키마를 준수합니다.`,
|
|
981
1034
|
}),
|
|
982
1035
|
},
|
|
983
1036
|
],
|
|
984
1037
|
};
|
|
985
1038
|
}
|
|
986
1039
|
else {
|
|
987
|
-
const errors =
|
|
1040
|
+
const errors = validator.errors || [];
|
|
988
1041
|
const groupedErrors = groupErrors(errors);
|
|
989
1042
|
const errorCount = errors.length;
|
|
990
1043
|
return {
|
|
@@ -1005,6 +1058,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1005
1058
|
}
|
|
1006
1059
|
case "validate_part": {
|
|
1007
1060
|
const partName = args?.partName;
|
|
1061
|
+
const partFormat = args?.format || "mtsd";
|
|
1008
1062
|
let data = args?.data;
|
|
1009
1063
|
if (typeof data === "string") {
|
|
1010
1064
|
try {
|
|
@@ -1024,7 +1078,7 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1024
1078
|
};
|
|
1025
1079
|
}
|
|
1026
1080
|
}
|
|
1027
|
-
const partSchema = getSchemaDefinition(partName);
|
|
1081
|
+
const partSchema = getSchemaDefinition(partName, partFormat);
|
|
1028
1082
|
if (!partSchema) {
|
|
1029
1083
|
return {
|
|
1030
1084
|
content: [
|
|
@@ -1038,7 +1092,8 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1038
1092
|
],
|
|
1039
1093
|
};
|
|
1040
1094
|
}
|
|
1041
|
-
const
|
|
1095
|
+
const selectedSchema = getSchemaByFormat(partFormat);
|
|
1096
|
+
const partSchemaWithDefs = { ...partSchema, $defs: selectedSchema.$defs };
|
|
1042
1097
|
const partValidate = ajv.compile(partSchemaWithDefs);
|
|
1043
1098
|
const valid = partValidate(data);
|
|
1044
1099
|
if (valid) {
|
|
@@ -1182,13 +1237,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1182
1237
|
}
|
|
1183
1238
|
case "generate_element": {
|
|
1184
1239
|
const result = generateElement(args);
|
|
1240
|
+
const isCompact = args?.compact === true;
|
|
1241
|
+
const elementOut = isCompact ? compactElement(result.element) : result.element;
|
|
1185
1242
|
return {
|
|
1186
1243
|
content: [
|
|
1187
1244
|
{
|
|
1188
1245
|
type: "text",
|
|
1189
1246
|
text: JSON.stringify({
|
|
1190
1247
|
success: true,
|
|
1191
|
-
element:
|
|
1248
|
+
element: elementOut,
|
|
1249
|
+
compact: isCompact || undefined,
|
|
1192
1250
|
warnings: result.warnings.length > 0
|
|
1193
1251
|
? result.warnings
|
|
1194
1252
|
: undefined,
|
|
@@ -1199,14 +1257,17 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1199
1257
|
}
|
|
1200
1258
|
case "generate_grid_column": {
|
|
1201
1259
|
const result = generateGridColumns(args);
|
|
1260
|
+
const gcCompact = args?.compact === true;
|
|
1261
|
+
const columnsOut = gcCompact ? result.columns.map(compactGridColumn) : result.columns;
|
|
1202
1262
|
return {
|
|
1203
1263
|
content: [
|
|
1204
1264
|
{
|
|
1205
1265
|
type: "text",
|
|
1206
1266
|
text: JSON.stringify({
|
|
1207
1267
|
success: true,
|
|
1208
|
-
columns:
|
|
1209
|
-
count:
|
|
1268
|
+
columns: columnsOut,
|
|
1269
|
+
count: columnsOut.length,
|
|
1270
|
+
compact: gcCompact || undefined,
|
|
1210
1271
|
warnings: result.warnings.length > 0
|
|
1211
1272
|
? result.warnings
|
|
1212
1273
|
: undefined,
|
|
@@ -1217,13 +1278,16 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1217
1278
|
}
|
|
1218
1279
|
case "generate_datasource": {
|
|
1219
1280
|
const result = generateDataSource(args);
|
|
1281
|
+
const dsCompact = args?.compact === true;
|
|
1282
|
+
const dsOut = dsCompact ? compactDataSource(result.dataSource) : result.dataSource;
|
|
1220
1283
|
return {
|
|
1221
1284
|
content: [
|
|
1222
1285
|
{
|
|
1223
1286
|
type: "text",
|
|
1224
1287
|
text: JSON.stringify({
|
|
1225
1288
|
success: true,
|
|
1226
|
-
dataSource:
|
|
1289
|
+
dataSource: dsOut,
|
|
1290
|
+
compact: dsCompact || undefined,
|
|
1227
1291
|
warnings: result.warnings.length > 0
|
|
1228
1292
|
? result.warnings
|
|
1229
1293
|
: undefined,
|
|
@@ -1234,15 +1298,18 @@ server.setRequestHandler(CallToolRequestSchema, async (request) => {
|
|
|
1234
1298
|
}
|
|
1235
1299
|
case "generate_olap_fields": {
|
|
1236
1300
|
const result = generateOlapFields(args);
|
|
1301
|
+
const ofCompact = args?.compact === true;
|
|
1302
|
+
const fieldsOut = ofCompact ? result.fields.map(compactOlapField) : result.fields;
|
|
1237
1303
|
return {
|
|
1238
1304
|
content: [
|
|
1239
1305
|
{
|
|
1240
1306
|
type: "text",
|
|
1241
1307
|
text: JSON.stringify({
|
|
1242
1308
|
success: true,
|
|
1243
|
-
fields:
|
|
1309
|
+
fields: fieldsOut,
|
|
1244
1310
|
iOLAPView: result.iOLAPView,
|
|
1245
1311
|
summary: result.summary,
|
|
1312
|
+
compact: ofCompact || undefined,
|
|
1246
1313
|
warnings: result.warnings.length > 0
|
|
1247
1314
|
? result.warnings
|
|
1248
1315
|
: undefined,
|