@visualization-hub/dev-mcp 1.0.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.
Files changed (75) hide show
  1. package/README.md +93 -0
  2. package/bin/viz-dev-mcp.js +2 -0
  3. package/dist/client/discovery-api.d.ts +17 -0
  4. package/dist/client/discovery-api.d.ts.map +1 -0
  5. package/dist/client/discovery-api.js +47 -0
  6. package/dist/client/discovery-api.js.map +1 -0
  7. package/dist/client/environment-api.d.ts +3 -0
  8. package/dist/client/environment-api.d.ts.map +1 -0
  9. package/dist/client/environment-api.js +13 -0
  10. package/dist/client/environment-api.js.map +1 -0
  11. package/dist/client/http.d.ts +7 -0
  12. package/dist/client/http.d.ts.map +1 -0
  13. package/dist/client/http.js +38 -0
  14. package/dist/client/http.js.map +1 -0
  15. package/dist/client/inspection-api.d.ts +9 -0
  16. package/dist/client/inspection-api.d.ts.map +1 -0
  17. package/dist/client/inspection-api.js +30 -0
  18. package/dist/client/inspection-api.js.map +1 -0
  19. package/dist/client/transfer-api.d.ts +10 -0
  20. package/dist/client/transfer-api.d.ts.map +1 -0
  21. package/dist/client/transfer-api.js +49 -0
  22. package/dist/client/transfer-api.js.map +1 -0
  23. package/dist/config.d.ts +12 -0
  24. package/dist/config.d.ts.map +1 -0
  25. package/dist/config.js +46 -0
  26. package/dist/config.js.map +1 -0
  27. package/dist/index.d.ts +2 -0
  28. package/dist/index.d.ts.map +1 -0
  29. package/dist/index.js +364 -0
  30. package/dist/index.js.map +1 -0
  31. package/dist/templates/template-engine.d.ts +6 -0
  32. package/dist/templates/template-engine.d.ts.map +1 -0
  33. package/dist/templates/template-engine.js +350 -0
  34. package/dist/templates/template-engine.js.map +1 -0
  35. package/dist/templates/types.d.ts +14 -0
  36. package/dist/templates/types.d.ts.map +1 -0
  37. package/dist/templates/types.js +3 -0
  38. package/dist/templates/types.js.map +1 -0
  39. package/dist/tools/builder.tool.d.ts +18 -0
  40. package/dist/tools/builder.tool.d.ts.map +1 -0
  41. package/dist/tools/builder.tool.js +105 -0
  42. package/dist/tools/builder.tool.js.map +1 -0
  43. package/dist/tools/compliance.tool.d.ts +25 -0
  44. package/dist/tools/compliance.tool.d.ts.map +1 -0
  45. package/dist/tools/compliance.tool.js +300 -0
  46. package/dist/tools/compliance.tool.js.map +1 -0
  47. package/dist/tools/discovery.tools.d.ts +27 -0
  48. package/dist/tools/discovery.tools.d.ts.map +1 -0
  49. package/dist/tools/discovery.tools.js +43 -0
  50. package/dist/tools/discovery.tools.js.map +1 -0
  51. package/dist/tools/environment.tools.d.ts +91 -0
  52. package/dist/tools/environment.tools.d.ts.map +1 -0
  53. package/dist/tools/environment.tools.js +140 -0
  54. package/dist/tools/environment.tools.js.map +1 -0
  55. package/dist/tools/inspection.tools.d.ts +29 -0
  56. package/dist/tools/inspection.tools.d.ts.map +1 -0
  57. package/dist/tools/inspection.tools.js +42 -0
  58. package/dist/tools/inspection.tools.js.map +1 -0
  59. package/dist/tools/scaffolding.tool.d.ts +23 -0
  60. package/dist/tools/scaffolding.tool.d.ts.map +1 -0
  61. package/dist/tools/scaffolding.tool.js +70 -0
  62. package/dist/tools/scaffolding.tool.js.map +1 -0
  63. package/dist/tools/transfer.tools.d.ts +50 -0
  64. package/dist/tools/transfer.tools.d.ts.map +1 -0
  65. package/dist/tools/transfer.tools.js +105 -0
  66. package/dist/tools/transfer.tools.js.map +1 -0
  67. package/dist/utils/archive.d.ts +16 -0
  68. package/dist/utils/archive.d.ts.map +1 -0
  69. package/dist/utils/archive.js +65 -0
  70. package/dist/utils/archive.js.map +1 -0
  71. package/dist/utils/logger.d.ts +11 -0
  72. package/dist/utils/logger.d.ts.map +1 -0
  73. package/dist/utils/logger.js +22 -0
  74. package/dist/utils/logger.js.map +1 -0
  75. package/package.json +52 -0
@@ -0,0 +1,29 @@
1
+ export declare function handleGetProjectFiles(args: {
2
+ project_name: string;
3
+ name?: string;
4
+ version?: string;
5
+ }): Promise<{
6
+ success: boolean;
7
+ tree: any;
8
+ }>;
9
+ export declare function handleGetFileContent(args: {
10
+ project_name: string;
11
+ file_path: string;
12
+ name?: string;
13
+ path?: string;
14
+ version?: string;
15
+ }): Promise<{
16
+ success: boolean;
17
+ file_path: string;
18
+ content: any;
19
+ }>;
20
+ export declare function handleGrepSourceCode(args: {
21
+ query: string;
22
+ project_name?: string;
23
+ file_pattern?: string;
24
+ }): Promise<{
25
+ success: boolean;
26
+ matches: any;
27
+ total_matches: any;
28
+ }>;
29
+ //# sourceMappingURL=inspection.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection.tools.d.ts","sourceRoot":"","sources":["../../src/tools/inspection.tools.ts"],"names":[],"mappings":"AAEA,wBAAsB,qBAAqB,CAAC,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;;;GAU1G;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,YAAY,EAAE,MAAM,CAAC;IAAC,SAAS,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE;;;;GAY3I;AAED,wBAAsB,oBAAoB,CAAC,IAAI,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE;;;;GAU/G"}
@@ -0,0 +1,42 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.handleGetProjectFiles = handleGetProjectFiles;
4
+ exports.handleGetFileContent = handleGetFileContent;
5
+ exports.handleGrepSourceCode = handleGrepSourceCode;
6
+ const inspection_api_1 = require("../client/inspection-api");
7
+ async function handleGetProjectFiles(args) {
8
+ const name = args.project_name || args.name;
9
+ if (!name) {
10
+ throw new Error('[参数错误] project_name 为必填项');
11
+ }
12
+ const result = await (0, inspection_api_1.getProjectFiles)(name, args.version);
13
+ return {
14
+ success: true,
15
+ tree: result.tree || result
16
+ };
17
+ }
18
+ async function handleGetFileContent(args) {
19
+ const name = args.project_name || args.name;
20
+ const filePath = args.file_path || args.path;
21
+ if (!name || !filePath) {
22
+ throw new Error('[参数错误] project_name 和 file_path 均为必填项');
23
+ }
24
+ const result = await (0, inspection_api_1.getFileContent)(name, filePath, args.version);
25
+ return {
26
+ success: true,
27
+ file_path: filePath,
28
+ content: result.content ?? result
29
+ };
30
+ }
31
+ async function handleGrepSourceCode(args) {
32
+ if (!args.query) {
33
+ throw new Error('[参数错误] query 检索关键词或正则表达式为必填项');
34
+ }
35
+ const result = await (0, inspection_api_1.grepSourceCode)(args);
36
+ return {
37
+ success: true,
38
+ matches: result.matches || result,
39
+ total_matches: result.total_matches ?? (Array.isArray(result) ? result.length : 0)
40
+ };
41
+ }
42
+ //# sourceMappingURL=inspection.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection.tools.js","sourceRoot":"","sources":["../../src/tools/inspection.tools.ts"],"names":[],"mappings":";;AAEA,sDAUC;AAED,oDAYC;AAED,oDAUC;AAtCD,6DAA2F;AAEpF,KAAK,UAAU,qBAAqB,CAAC,IAA+D;IACzG,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC;IAC5C,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAA,gCAAe,EAAC,IAAI,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IACzD,OAAO;QACL,OAAO,EAAE,IAAI;QACb,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,MAAM;KAC5B,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,oBAAoB,CAAC,IAAiG;IAC1I,MAAM,IAAI,GAAG,IAAI,CAAC,YAAY,IAAI,IAAI,CAAC,IAAI,CAAC;IAC5C,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,IAAI,CAAC;IAC7C,IAAI,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uCAAuC,CAAC,CAAC;IAC3D,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAc,EAAC,IAAI,EAAE,QAAQ,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;IAClE,OAAO;QACL,OAAO,EAAE,IAAI;QACb,SAAS,EAAE,QAAQ;QACnB,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM;KAClC,CAAC;AACJ,CAAC;AAEM,KAAK,UAAU,oBAAoB,CAAC,IAAqE;IAC9G,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC;QAChB,MAAM,IAAI,KAAK,CAAC,8BAA8B,CAAC,CAAC;IAClD,CAAC;IACD,MAAM,MAAM,GAAG,MAAM,IAAA,+BAAc,EAAC,IAAI,CAAC,CAAC;IAC1C,OAAO;QACL,OAAO,EAAE,IAAI;QACb,OAAO,EAAE,MAAM,CAAC,OAAO,IAAI,MAAM;QACjC,aAAa,EAAE,MAAM,CAAC,aAAa,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KACnF,CAAC;AACJ,CAAC"}
@@ -0,0 +1,23 @@
1
+ export interface ICreateProjectArgs {
2
+ projectName: string;
3
+ pageType: string;
4
+ title: string;
5
+ description?: string;
6
+ libraries?: string[];
7
+ targetDir?: string;
8
+ author?: string;
9
+ overwrite?: boolean;
10
+ }
11
+ /**
12
+ * create_component_project: 一键在本地创建可直接构建与运行的 Vue 3 组件工程脚手架
13
+ */
14
+ export declare function handleCreateComponentProject(args: ICreateProjectArgs): Promise<{
15
+ success: boolean;
16
+ message: string;
17
+ project_dir: string;
18
+ project_name: string;
19
+ page_type: string;
20
+ created_files: string[];
21
+ next_steps: string[];
22
+ }>;
23
+ //# sourceMappingURL=scaffolding.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolding.tool.d.ts","sourceRoot":"","sources":["../../src/tools/scaffolding.tool.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,QAAQ,EAAE,MAAM,CAAC;IACjB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;IACrB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;GAiE1E"}
@@ -0,0 +1,70 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleCreateComponentProject = handleCreateComponentProject;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const template_engine_1 = require("../templates/template-engine");
10
+ const config_1 = require("../config");
11
+ /**
12
+ * create_component_project: 一键在本地创建可直接构建与运行的 Vue 3 组件工程脚手架
13
+ */
14
+ async function handleCreateComponentProject(args) {
15
+ const { projectName, pageType, title, description, libraries, author, overwrite } = args;
16
+ if (!projectName || !/^[a-z0-9-_]+$/.test(projectName)) {
17
+ throw new Error(`[参数错误] projectName "${projectName}" 不合法,仅允许小写字母、数字、中划线和下划线 (^[a-z0-9-_]+$)`);
18
+ }
19
+ const validPageTypes = ['cesium', 'three', 'openlayers', 'echarts', 'mapbox', 'maplibre', 'webgl', 'canvas', 'common'];
20
+ if (!pageType || !validPageTypes.includes(pageType.toLowerCase())) {
21
+ throw new Error(`[参数错误] pageType "${pageType}" 不合法,有效值: [${validPageTypes.join(', ')}]`);
22
+ }
23
+ if (!title) {
24
+ throw new Error('[参数错误] title 中文显示标题为必填项');
25
+ }
26
+ const config = (0, config_1.getConfig)();
27
+ const baseDir = args.targetDir ? path_1.default.resolve(args.targetDir) : path_1.default.resolve(config.workspaceDir, projectName);
28
+ if (fs_1.default.existsSync(baseDir) && !overwrite) {
29
+ const existingFiles = fs_1.default.readdirSync(baseDir);
30
+ if (existingFiles.length > 0) {
31
+ throw new Error(`[目标目录已存在] 路径 "${baseDir}" 非空,若需强制覆盖请设置 overwrite: true`);
32
+ }
33
+ }
34
+ fs_1.default.mkdirSync(baseDir, { recursive: true });
35
+ const generatedFiles = (0, template_engine_1.generateProjectFiles)({
36
+ projectName,
37
+ pageType: pageType.toLowerCase(),
38
+ title,
39
+ description,
40
+ libraries,
41
+ author
42
+ });
43
+ const createdFilePaths = [];
44
+ for (const f of generatedFiles) {
45
+ const fullPath = path_1.default.join(baseDir, f.relativePath);
46
+ const parentDir = path_1.default.dirname(fullPath);
47
+ if (!fs_1.default.existsSync(parentDir)) {
48
+ fs_1.default.mkdirSync(parentDir, { recursive: true });
49
+ }
50
+ fs_1.default.writeFileSync(fullPath, f.content, 'utf-8');
51
+ createdFilePaths.push(f.relativePath);
52
+ }
53
+ return {
54
+ success: true,
55
+ message: `组件工程 [${projectName}] 成功生成在 ${baseDir}`,
56
+ project_dir: baseDir,
57
+ project_name: projectName,
58
+ page_type: pageType,
59
+ created_files: createdFilePaths,
60
+ next_steps: [
61
+ `1. 进入工程目录: cd "${baseDir}"`,
62
+ `2. (可选) 安装依赖: npm install`,
63
+ `3. 编写业务逻辑: 修改 src/index.vue, src/index.ts, src/index.less`,
64
+ `4. 本地编译打包: 调用 build_component_project(projectDir: "${baseDir}")`,
65
+ `5. 沙箱合规自检: 调用 check_sandbox_compliance(projectDir: "${baseDir}")`,
66
+ `6. 极速发布平台: 调用 upload_component_project(projectDir: "${baseDir}")`
67
+ ]
68
+ };
69
+ }
70
+ //# sourceMappingURL=scaffolding.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scaffolding.tool.js","sourceRoot":"","sources":["../../src/tools/scaffolding.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ export interface IUploadProjectArgs {
2
+ projectDir: string;
3
+ uploadType?: 'test' | 'final';
4
+ changelog?: string;
5
+ skipPreflight?: boolean;
6
+ }
7
+ export interface IDownloadProjectArgs {
8
+ projectName: string;
9
+ version?: string;
10
+ targetDir?: string;
11
+ }
12
+ export interface IDeleteVersionArgs {
13
+ projectName: string;
14
+ version: string;
15
+ }
16
+ /**
17
+ * upload_component_project: 本地打包并极速直传至知识库平台 (耗时 < 0.1s,0 Token)
18
+ */
19
+ export declare function handleUploadComponentProject(args: IUploadProjectArgs): Promise<{
20
+ success: boolean;
21
+ message: string;
22
+ project_name: any;
23
+ version: any;
24
+ upload_type: "test" | "final";
25
+ preview_url: any;
26
+ zip_size: string;
27
+ duration_ms: number;
28
+ detail: any;
29
+ }>;
30
+ /**
31
+ * download_component_project: 从知识库拉取组件 ZIP 并直接就地解压为可二次开发的工程
32
+ */
33
+ export declare function handleDownloadComponentProject(args: IDownloadProjectArgs): Promise<{
34
+ success: boolean;
35
+ message: string;
36
+ project_name: string;
37
+ target_dir: string;
38
+ version: string;
39
+ zip_size: string;
40
+ duration_ms: number;
41
+ }>;
42
+ /**
43
+ * delete_version: 删除指定组件版本
44
+ */
45
+ export declare function handleDeleteVersion(args: IDeleteVersionArgs): Promise<{
46
+ success: boolean;
47
+ message: string;
48
+ result: any;
49
+ }>;
50
+ //# sourceMappingURL=transfer.tools.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.tools.d.ts","sourceRoot":"","sources":["../../src/tools/transfer.tools.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,kBAAkB;IACjC,UAAU,EAAE,MAAM,CAAC;IACnB,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;IAC9B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,OAAO,CAAC;CACzB;AAED,MAAM,WAAW,oBAAoB;IACnC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,kBAAkB;;;;;;;;;;GAqD1E;AAED;;GAEG;AACH,wBAAsB,8BAA8B,CAAC,IAAI,EAAE,oBAAoB;;;;;;;;GA8B9E;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,IAAI,EAAE,kBAAkB;;;;GAYjE"}
@@ -0,0 +1,105 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.handleUploadComponentProject = handleUploadComponentProject;
7
+ exports.handleDownloadComponentProject = handleDownloadComponentProject;
8
+ exports.handleDeleteVersion = handleDeleteVersion;
9
+ const fs_1 = __importDefault(require("fs"));
10
+ const path_1 = __importDefault(require("path"));
11
+ const archive_1 = require("../utils/archive");
12
+ const transfer_api_1 = require("../client/transfer-api");
13
+ const compliance_tool_1 = require("./compliance.tool");
14
+ const config_1 = require("../config");
15
+ /**
16
+ * upload_component_project: 本地打包并极速直传至知识库平台 (耗时 < 0.1s,0 Token)
17
+ */
18
+ async function handleUploadComponentProject(args) {
19
+ const { projectDir, uploadType = 'test', changelog = '', skipPreflight = false } = args;
20
+ if (!projectDir) {
21
+ throw new Error('[参数错误] projectDir 为必填项');
22
+ }
23
+ const absDir = path_1.default.resolve(projectDir);
24
+ if (!fs_1.default.existsSync(absDir)) {
25
+ throw new Error(`[路径错误] 目标工程目录不存在: ${absDir}`);
26
+ }
27
+ const pjPath = path_1.default.join(absDir, 'project.json');
28
+ if (!fs_1.default.existsSync(pjPath)) {
29
+ throw new Error(`[缺少元数据清单] 工程根目录下未找到 project.json: ${absDir}`);
30
+ }
31
+ // Pre-Flight 自动化防呆前置检查
32
+ if (!skipPreflight) {
33
+ const complianceRes = await (0, compliance_tool_1.handleCheckSandboxCompliance)({ projectDir: absDir });
34
+ if (!complianceRes.is_eligible_for_upload) {
35
+ throw new Error(`[Pre-Flight 沙箱合规校验未通过 (得分: ${complianceRes.total_score}/100)]:\n` +
36
+ complianceRes.recommendations.join('\n') +
37
+ `\n\n提示: 请修复上述违规项后再行上传,或传入 skipPreflight: true 强制上传。`);
38
+ }
39
+ }
40
+ const startTime = Date.now();
41
+ // 1. 本地内存打包 ZIP
42
+ const zipBuffer = (0, archive_1.zipDirectoryToBuffer)(absDir);
43
+ // 2. 物理流式上传
44
+ const uploadResult = await (0, transfer_api_1.uploadProjectZip)({
45
+ zipBuffer,
46
+ changelog,
47
+ upload_project_type: uploadType
48
+ });
49
+ const durationMs = Date.now() - startTime;
50
+ return {
51
+ success: true,
52
+ message: `组件发布成功!(上传耗时 ${(durationMs / 1000).toFixed(3)}s)`,
53
+ project_name: uploadResult.project?.name || uploadResult.name,
54
+ version: uploadResult.version?.version || uploadResult.version,
55
+ upload_type: uploadType,
56
+ preview_url: uploadResult.preview_url,
57
+ zip_size: `${(zipBuffer.length / 1024).toFixed(2)} KB`,
58
+ duration_ms: durationMs,
59
+ detail: uploadResult
60
+ };
61
+ }
62
+ /**
63
+ * download_component_project: 从知识库拉取组件 ZIP 并直接就地解压为可二次开发的工程
64
+ */
65
+ async function handleDownloadComponentProject(args) {
66
+ const { projectName, version, targetDir } = args;
67
+ if (!projectName) {
68
+ throw new Error('[参数错误] projectName 为必填项');
69
+ }
70
+ const config = (0, config_1.getConfig)();
71
+ const absTargetDir = targetDir
72
+ ? path_1.default.resolve(targetDir)
73
+ : path_1.default.resolve(config.workspaceDir, projectName);
74
+ const startTime = Date.now();
75
+ // 1. 下载 ZIP 二进制流
76
+ const zipBuffer = await (0, transfer_api_1.downloadProjectZip)(projectName, version);
77
+ // 2. 就地解压
78
+ (0, archive_1.extractZipBufferToDirectory)(zipBuffer, absTargetDir);
79
+ const durationMs = Date.now() - startTime;
80
+ return {
81
+ success: true,
82
+ message: `组件 [${projectName}] 成功下载并就地解压至: ${absTargetDir}`,
83
+ project_name: projectName,
84
+ target_dir: absTargetDir,
85
+ version: version || 'latest',
86
+ zip_size: `${(zipBuffer.length / 1024).toFixed(2)} KB`,
87
+ duration_ms: durationMs
88
+ };
89
+ }
90
+ /**
91
+ * delete_version: 删除指定组件版本
92
+ */
93
+ async function handleDeleteVersion(args) {
94
+ const { projectName, version } = args;
95
+ if (!projectName || !version) {
96
+ throw new Error('[参数错误] projectName 和 version 均为必填项');
97
+ }
98
+ const result = await (0, transfer_api_1.deleteProjectVersion)(projectName, version);
99
+ return {
100
+ success: true,
101
+ message: `版本 [${projectName} v${version}] 已成功删除`,
102
+ result
103
+ };
104
+ }
105
+ //# sourceMappingURL=transfer.tools.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer.tools.js","sourceRoot":"","sources":["../../src/tools/transfer.tools.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ export interface IZipOptions {
2
+ excludes?: string[];
3
+ }
4
+ /**
5
+ * 将本地目录打包为内存 ZIP Buffer
6
+ */
7
+ export declare function zipDirectoryToBuffer(sourceDir: string, options?: IZipOptions): Buffer;
8
+ /**
9
+ * 解压 ZIP Buffer 到本地指定目录
10
+ */
11
+ export declare function extractZipBufferToDirectory(zipBuffer: Buffer, targetDir: string): void;
12
+ /**
13
+ * 解压本地 ZIP 文件到指定目录
14
+ */
15
+ export declare function extractZipFileToDirectory(zipFilePath: string, targetDir: string): void;
16
+ //# sourceMappingURL=archive.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.d.ts","sourceRoot":"","sources":["../../src/utils/archive.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,EAAE,MAAM,EAAE,CAAC;CACrB;AAID;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,SAAS,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,WAAW,GAAG,MAAM,CA6BrF;AAED;;GAEG;AACH,wBAAgB,2BAA2B,CAAC,SAAS,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAQtF;AAED;;GAEG;AACH,wBAAgB,yBAAyB,CAAC,WAAW,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG,IAAI,CAOtF"}
@@ -0,0 +1,65 @@
1
+ "use strict";
2
+ var __importDefault = (this && this.__importDefault) || function (mod) {
3
+ return (mod && mod.__esModule) ? mod : { "default": mod };
4
+ };
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.zipDirectoryToBuffer = zipDirectoryToBuffer;
7
+ exports.extractZipBufferToDirectory = extractZipBufferToDirectory;
8
+ exports.extractZipFileToDirectory = extractZipFileToDirectory;
9
+ const adm_zip_1 = __importDefault(require("adm-zip"));
10
+ const fs_1 = __importDefault(require("fs"));
11
+ const path_1 = __importDefault(require("path"));
12
+ const DEFAULT_EXCLUDES = ['node_modules', '.git', '.DS_Store', 'Thumbs.db'];
13
+ /**
14
+ * 将本地目录打包为内存 ZIP Buffer
15
+ */
16
+ function zipDirectoryToBuffer(sourceDir, options) {
17
+ const absSource = path_1.default.resolve(sourceDir);
18
+ if (!fs_1.default.existsSync(absSource)) {
19
+ throw new Error(`打包源目录不存在: ${absSource}`);
20
+ }
21
+ const zip = new adm_zip_1.default();
22
+ const excludes = options?.excludes || DEFAULT_EXCLUDES;
23
+ function addFolderRecursively(currentPath, zipPath) {
24
+ const items = fs_1.default.readdirSync(currentPath);
25
+ for (const item of items) {
26
+ if (excludes.includes(item))
27
+ continue;
28
+ const itemPath = path_1.default.join(currentPath, item);
29
+ const stat = fs_1.default.statSync(itemPath);
30
+ const currentZipPath = zipPath ? `${zipPath}/${item}` : item;
31
+ if (stat.isDirectory()) {
32
+ addFolderRecursively(itemPath, currentZipPath);
33
+ }
34
+ else {
35
+ const fileContent = fs_1.default.readFileSync(itemPath);
36
+ zip.addFile(currentZipPath, fileContent);
37
+ }
38
+ }
39
+ }
40
+ addFolderRecursively(absSource, '');
41
+ return zip.toBuffer();
42
+ }
43
+ /**
44
+ * 解压 ZIP Buffer 到本地指定目录
45
+ */
46
+ function extractZipBufferToDirectory(zipBuffer, targetDir) {
47
+ const absTarget = path_1.default.resolve(targetDir);
48
+ if (!fs_1.default.existsSync(absTarget)) {
49
+ fs_1.default.mkdirSync(absTarget, { recursive: true });
50
+ }
51
+ const zip = new adm_zip_1.default(zipBuffer);
52
+ zip.extractAllTo(absTarget, true);
53
+ }
54
+ /**
55
+ * 解压本地 ZIP 文件到指定目录
56
+ */
57
+ function extractZipFileToDirectory(zipFilePath, targetDir) {
58
+ const absZip = path_1.default.resolve(zipFilePath);
59
+ if (!fs_1.default.existsSync(absZip)) {
60
+ throw new Error(`ZIP 文件不存在: ${absZip}`);
61
+ }
62
+ const buffer = fs_1.default.readFileSync(absZip);
63
+ extractZipBufferToDirectory(buffer, targetDir);
64
+ }
65
+ //# sourceMappingURL=archive.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"archive.js","sourceRoot":"","sources":["../../src/utils/archive.ts"],"names":[],"mappings":";;;;;AAaA,oDA6BC;AAKD,kEAQC;AAKD,8DAOC;AAnED,sDAA6B;AAC7B,4CAAoB;AACpB,gDAAwB;AAMxB,MAAM,gBAAgB,GAAG,CAAC,cAAc,EAAE,MAAM,EAAE,WAAW,EAAE,WAAW,CAAC,CAAC;AAE5E;;GAEG;AACH,SAAgB,oBAAoB,CAAC,SAAiB,EAAE,OAAqB;IAC3E,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,MAAM,IAAI,KAAK,CAAC,aAAa,SAAS,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,iBAAM,EAAE,CAAC;IACzB,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,gBAAgB,CAAC;IAEvD,SAAS,oBAAoB,CAAC,WAAmB,EAAE,OAAe;QAChE,MAAM,KAAK,GAAG,YAAE,CAAC,WAAW,CAAC,WAAW,CAAC,CAAC;QAC1C,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,IAAI,QAAQ,CAAC,QAAQ,CAAC,IAAI,CAAC;gBAAE,SAAS;YAEtC,MAAM,QAAQ,GAAG,cAAI,CAAC,IAAI,CAAC,WAAW,EAAE,IAAI,CAAC,CAAC;YAC9C,MAAM,IAAI,GAAG,YAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC;YACnC,MAAM,cAAc,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YAE7D,IAAI,IAAI,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,oBAAoB,CAAC,QAAQ,EAAE,cAAc,CAAC,CAAC;YACjD,CAAC;iBAAM,CAAC;gBACN,MAAM,WAAW,GAAG,YAAE,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC;gBAC9C,GAAG,CAAC,OAAO,CAAC,cAAc,EAAE,WAAW,CAAC,CAAC;YAC3C,CAAC;QACH,CAAC;IACH,CAAC;IAED,oBAAoB,CAAC,SAAS,EAAE,EAAE,CAAC,CAAC;IACpC,OAAO,GAAG,CAAC,QAAQ,EAAE,CAAC;AACxB,CAAC;AAED;;GAEG;AACH,SAAgB,2BAA2B,CAAC,SAAiB,EAAE,SAAiB;IAC9E,MAAM,SAAS,GAAG,cAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC;IAC1C,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,CAAC;QAC9B,YAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC/C,CAAC;IAED,MAAM,GAAG,GAAG,IAAI,iBAAM,CAAC,SAAS,CAAC,CAAC;IAClC,GAAG,CAAC,YAAY,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,SAAgB,yBAAyB,CAAC,WAAmB,EAAE,SAAiB;IAC9E,MAAM,MAAM,GAAG,cAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC;IACzC,IAAI,CAAC,YAAE,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,MAAM,IAAI,KAAK,CAAC,cAAc,MAAM,EAAE,CAAC,CAAC;IAC1C,CAAC;IACD,MAAM,MAAM,GAAG,YAAE,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;IACvC,2BAA2B,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;AACjD,CAAC"}
@@ -0,0 +1,11 @@
1
+ /**
2
+ * MCP Stdio 专用日志输出工具
3
+ * 注意: stdio MCP 协议依赖 stdout 传输 JSON-RPC 报文,所有内部日志必须通过 stderr 输出,防止破坏协议报文。
4
+ */
5
+ export declare const logger: {
6
+ info: (msg: string, ...args: any[]) => void;
7
+ warn: (msg: string, ...args: any[]) => void;
8
+ error: (msg: string, ...args: any[]) => void;
9
+ success: (msg: string, ...args: any[]) => void;
10
+ };
11
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":"AAAA;;;GAGG;AACH,eAAO,MAAM,MAAM;gBACL,MAAM,WAAW,GAAG,EAAE;gBAGtB,MAAM,WAAW,GAAG,EAAE;iBAGrB,MAAM,WAAW,GAAG,EAAE;mBAGpB,MAAM,WAAW,GAAG,EAAE;CAGtC,CAAC"}
@@ -0,0 +1,22 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.logger = void 0;
4
+ /**
5
+ * MCP Stdio 专用日志输出工具
6
+ * 注意: stdio MCP 协议依赖 stdout 传输 JSON-RPC 报文,所有内部日志必须通过 stderr 输出,防止破坏协议报文。
7
+ */
8
+ exports.logger = {
9
+ info: (msg, ...args) => {
10
+ console.error(`[Dev-MCP INFO] ${msg}`, ...args);
11
+ },
12
+ warn: (msg, ...args) => {
13
+ console.error(`[Dev-MCP WARN] ${msg}`, ...args);
14
+ },
15
+ error: (msg, ...args) => {
16
+ console.error(`[Dev-MCP ERROR] ${msg}`, ...args);
17
+ },
18
+ success: (msg, ...args) => {
19
+ console.error(`[Dev-MCP SUCCESS] ${msg}`, ...args);
20
+ }
21
+ };
22
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/utils/logger.ts"],"names":[],"mappings":";;;AAAA;;;GAGG;AACU,QAAA,MAAM,GAAG;IACpB,IAAI,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE;QACpC,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,IAAI,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE;QACpC,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IAClD,CAAC;IACD,KAAK,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE;QACrC,OAAO,CAAC,KAAK,CAAC,mBAAmB,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACnD,CAAC;IACD,OAAO,EAAE,CAAC,GAAW,EAAE,GAAG,IAAW,EAAE,EAAE;QACvC,OAAO,CAAC,KAAK,CAAC,qBAAqB,GAAG,EAAE,EAAE,GAAG,IAAI,CAAC,CAAC;IACrD,CAAC;CACF,CAAC"}
package/package.json ADDED
@@ -0,0 +1,52 @@
1
+ {
2
+ "name": "@visualization-hub/dev-mcp",
3
+ "version": "1.0.0",
4
+ "description": "Visualization Hub Developer MCP Toolkit - Full-Lifecycle Local Dev, Build, Compliance Checking & Instant Upload",
5
+ "main": "dist/index.js",
6
+ "types": "dist/index.d.ts",
7
+ "bin": {
8
+ "viz-dev-mcp": "./bin/viz-dev-mcp.js"
9
+ },
10
+ "files": [
11
+ "dist",
12
+ "bin",
13
+ "README.md"
14
+ ],
15
+ "scripts": {
16
+ "build": "tsc",
17
+ "start": "node dist/index.js",
18
+ "dev": "tsc -w",
19
+ "test": "vitest run"
20
+ },
21
+ "keywords": [
22
+ "mcp",
23
+ "model-context-protocol",
24
+ "visualization",
25
+ "vue3",
26
+ "vite",
27
+ "developer-tools"
28
+ ],
29
+ "author": "Visualization Hub Team",
30
+ "license": "MIT",
31
+ "publishConfig": {
32
+ "access": "public"
33
+ },
34
+ "dependencies": {
35
+ "@modelcontextprotocol/sdk": "^1.6.0",
36
+ "@vitejs/plugin-vue": "^5.1.2",
37
+ "adm-zip": "^0.5.16",
38
+ "axios": "^1.7.9",
39
+ "dotenv": "^16.4.7",
40
+ "form-data": "^4.0.2",
41
+ "less": "^4.2.0",
42
+ "visualization-project-knowledge-base": "file:..",
43
+ "vite": "^5.4.2",
44
+ "vue": "^3.4.38"
45
+ },
46
+ "devDependencies": {
47
+ "@types/adm-zip": "^0.5.7",
48
+ "@types/node": "^22.13.5",
49
+ "typescript": "^5.7.3",
50
+ "vitest": "^2.1.9"
51
+ }
52
+ }