@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
package/README.md ADDED
@@ -0,0 +1,93 @@
1
+ <!--
2
+ * @Author: Roman 306863030@qq.com
3
+ * @Date: 2026-09-01 11:14:16
4
+ * @LastEditors: Roman 306863030@qq.com
5
+ * @LastEditTime: 2026-09-01 11:38:22
6
+ * @FilePath: \visualization-project-knowledge-base\dev-mcp\README.md
7
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
8
+ -->
9
+ # Visualization Hub Developer MCP Toolkit (`@visualization-hub/dev-mcp`)
10
+
11
+ > **低空前端组件资产知识库 — 开发者 MCP 工具链**
12
+ > 面向 AI Agent(Cursor、Claude Desktop、VS Code、Deepfish)与前端工程师的本地全生命周期组件研发工作站。
13
+
14
+ ---
15
+
16
+ ## 🌟 核心特性
17
+
18
+ - 🚀 **极速物理直传**:本地一键打包 ZIP 并通过底层 HTTP Multipart 流式推送平台,耗时 **< 0.1 秒**,Token 消耗趋近于 **0**。
19
+ - 🛠️ **完整工程脚手架**:一键生成 Vue 3 + TypeScript + Less + Vite 标准多文件工程,默认满足平台 13 项沙箱合规规范。
20
+ - 📦 **本地 Vite 构建**:在本地直接执行编译打包,输出沙箱专属的 `dist/index.js` 与 `dist/index.css`,直接捕获 TypeScript 与语法错误。
21
+ - 🛡️ **13 项合规静态扫描**:自动化代码扫描(检查 `pointer-events: auto !important`、杜绝 emoji、`onUnmounted` 资源销毁等),提供精准代码行号与修复建议。
22
+ - 🧭 **全流程智能引导**:内置 `get_developer_guide` 导航工具,支持分阶段按需下发研发步骤与输入范例。
23
+ - 🔍 **云端全量检索代理**:100% 具备知识库资产搜索、分类统计、文件树查询、单文件源码读取与全局正则 grep 检索能力。
24
+
25
+
26
+ ---
27
+
28
+ ## ⚙️ 环境变量配置 (`Environment Variables`)
29
+
30
+ 开发者 MCP 在启动时自动读取环境变量或当前目录下的 `.env` 文件。优先级为:**工具入参 > 环境变量 > 默认兜底值**。
31
+
32
+ | 环境变量名 (`Env Name`) | 别名 (`Alias`) | 是否必需 | 默认值 | 详细说明 |
33
+ | :--- | :--- | :---: | :---: | :--- |
34
+ | **`VIZ_BASE_URL`** | `BASE_URL` | 否 | `http://localhost:3000` | 知识库云端平台的后端服务地址(支持本地、局域网或公网地址) |
35
+ | **`VIZ_API_KEY`** | `API_KEY` | **是**(写操作) | 空 | 开发者 API Key(可在知识库平台个人中心生成,如 `ak_live_xxx`) |
36
+ | **`VIZ_TIMEOUT_MS`** | `TIMEOUT_MS` | 否 | `30000` | HTTP 请求与物理上传超时时间(毫秒)。**设置为 `-1` 表示无限制(不超时)** |
37
+
38
+ > **工作区目录规范**:无需配置环境变量,工作区目录**默认为当前命令的执行目录 (`process.cwd()`)**;各工具亦支持通过参数(如 `targetDir` / `projectDir`)显式指定自定义路径。
39
+
40
+ ---
41
+
42
+ ## 💻 主流 AI Agent 客户端接入配置
43
+
44
+ ### 1. Claude Desktop (`claude_desktop_config.json`)
45
+ ```json
46
+ {
47
+ "mcpServers": {
48
+ "visualization-dev-mcp": {
49
+ "command": "npx",
50
+ "args": ["-y", "@visualization-hub/dev-mcp"],
51
+ "env": {
52
+ "VIZ_BASE_URL": "http://localhost:3000",
53
+ "VIZ_API_KEY": "ak_live_xxxxxxxxxxxxxxxxxxxx",
54
+ "VIZ_TIMEOUT_MS": "-1"
55
+ }
56
+ }
57
+ }
58
+ }
59
+ ```
60
+
61
+ ### 2. Cursor (`.cursor/mcp.json`)
62
+ ```json
63
+ {
64
+ "mcpServers": {
65
+ "visualization-dev-mcp": {
66
+ "command": "node",
67
+ "args": ["D:/.../dev-mcp/dist/index.js"],
68
+ "env": {
69
+ "VIZ_BASE_URL": "http://localhost:3000",
70
+ "VIZ_API_KEY": "ak_live_xxxxxxxxxxxxxxxxxxxx"
71
+ }
72
+ }
73
+ }
74
+ }
75
+ ```
76
+
77
+ ### 3. VS Code (Roo Code / Cline MCP Settings)
78
+ ```json
79
+ {
80
+ "mcpServers": {
81
+ "viz-dev": {
82
+ "command": "npx",
83
+ "args": ["@visualization-hub/dev-mcp"],
84
+ "env": {
85
+ "VIZ_BASE_URL": "http://localhost:3000",
86
+ "VIZ_API_KEY": "ak_live_xxxxxxxxxxxxxxxxxxxx",
87
+ "VIZ_TIMEOUT_MS": "60000"
88
+ }
89
+ }
90
+ }
91
+ }
92
+ ```
93
+
@@ -0,0 +1,2 @@
1
+ #!/usr/bin/env node
2
+ require('../dist/index.js');
@@ -0,0 +1,17 @@
1
+ import { IDevMcpConfig } from '../config';
2
+ export interface ISearchProjectsParams {
3
+ keywords?: string[] | string;
4
+ page_type?: string;
5
+ category?: string;
6
+ page?: number;
7
+ page_size?: number;
8
+ keyword?: string;
9
+ }
10
+ export declare function searchProjects(params: ISearchProjectsParams, configOverrides?: Partial<IDevMcpConfig>): Promise<any>;
11
+ export declare function listCategories(configOverrides?: Partial<IDevMcpConfig>): Promise<any>;
12
+ export declare function getProjectDetail(projectName: string, configOverrides?: Partial<IDevMcpConfig>): Promise<any>;
13
+ export declare function listMyProjects(params?: {
14
+ page?: number;
15
+ page_size?: number;
16
+ }, configOverrides?: Partial<IDevMcpConfig>): Promise<any>;
17
+ //# sourceMappingURL=discovery-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-api.d.ts","sourceRoot":"","sources":["../../src/client/discovery-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,WAAW,qBAAqB;IACpC,QAAQ,CAAC,EAAE,MAAM,EAAE,GAAG,MAAM,CAAC;IAC7B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE,qBAAqB,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,gBAoB3G;AAED,wBAAsB,cAAc,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,gBAI5E;AAED,wBAAsB,gBAAgB,CAAC,WAAW,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,gBAInG;AAED,wBAAsB,cAAc,CAAC,MAAM,CAAC,EAAE;IAAE,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,SAAS,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,gBAS5H"}
@@ -0,0 +1,47 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.searchProjects = searchProjects;
4
+ exports.listCategories = listCategories;
5
+ exports.getProjectDetail = getProjectDetail;
6
+ exports.listMyProjects = listMyProjects;
7
+ const http_1 = require("./http");
8
+ async function searchProjects(params, configOverrides) {
9
+ const http = (0, http_1.createHttpClient)(configOverrides);
10
+ const queryParams = {
11
+ page: params.page || 1,
12
+ page_size: params.page_size || 20
13
+ };
14
+ if (params.page_type || params.category) {
15
+ queryParams.page_type = params.page_type || params.category;
16
+ }
17
+ if (params.keywords) {
18
+ const kw = Array.isArray(params.keywords) ? params.keywords.join(' ') : params.keywords;
19
+ queryParams.keyword = kw;
20
+ }
21
+ else if (params.keyword) {
22
+ queryParams.keyword = params.keyword;
23
+ }
24
+ const res = await http.get('/api/projects', { params: queryParams });
25
+ return res.data?.data || res.data;
26
+ }
27
+ async function listCategories(configOverrides) {
28
+ const http = (0, http_1.createHttpClient)(configOverrides);
29
+ const res = await http.get('/api/categories');
30
+ return res.data?.data || res.data;
31
+ }
32
+ async function getProjectDetail(projectName, configOverrides) {
33
+ const http = (0, http_1.createHttpClient)(configOverrides);
34
+ const res = await http.get(`/api/projects/${encodeURIComponent(projectName)}`);
35
+ return res.data?.data || res.data;
36
+ }
37
+ async function listMyProjects(params, configOverrides) {
38
+ const http = (0, http_1.createHttpClient)(configOverrides);
39
+ const res = await http.get('/api/projects/my', {
40
+ params: {
41
+ page: params?.page || 1,
42
+ page_size: params?.page_size || 20
43
+ }
44
+ });
45
+ return res.data?.data || res.data;
46
+ }
47
+ //# sourceMappingURL=discovery-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery-api.js","sourceRoot":"","sources":["../../src/client/discovery-api.ts"],"names":[],"mappings":";;AAYA,wCAoBC;AAED,wCAIC;AAED,4CAIC;AAED,wCASC;AAvDD,iCAA0C;AAYnC,KAAK,UAAU,cAAc,CAAC,MAA6B,EAAE,eAAwC;IAC1G,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,WAAW,GAAwB;QACvC,IAAI,EAAE,MAAM,CAAC,IAAI,IAAI,CAAC;QACtB,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;KAClC,CAAC;IAEF,IAAI,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACxC,WAAW,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,QAAQ,CAAC;IAC9D,CAAC;IAED,IAAI,MAAM,CAAC,QAAQ,EAAE,CAAC;QACpB,MAAM,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QACxF,WAAW,CAAC,OAAO,GAAG,EAAE,CAAC;IAC3B,CAAC;SAAM,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;QAC1B,WAAW,CAAC,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC;IACvC,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,WAAW,EAAE,CAAC,CAAC;IACrE,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,eAAwC;IAC3E,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;IAC9C,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,gBAAgB,CAAC,WAAmB,EAAE,eAAwC;IAClG,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAC/E,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,MAA8C,EAAE,eAAwC;IAC3H,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,kBAAkB,EAAE;QAC7C,MAAM,EAAE;YACN,IAAI,EAAE,MAAM,EAAE,IAAI,IAAI,CAAC;YACvB,SAAS,EAAE,MAAM,EAAE,SAAS,IAAI,EAAE;SACnC;KACF,CAAC,CAAC;IACH,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;AACpC,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { IDevMcpConfig } from '../config';
2
+ export declare function getGlobalPackages(pageType?: string, configOverrides?: Partial<IDevMcpConfig>): Promise<any>;
3
+ //# sourceMappingURL=environment-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-api.d.ts","sourceRoot":"","sources":["../../src/client/environment-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,wBAAsB,iBAAiB,CAAC,QAAQ,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,gBAMlG"}
@@ -0,0 +1,13 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getGlobalPackages = getGlobalPackages;
4
+ const http_1 = require("./http");
5
+ async function getGlobalPackages(pageType, configOverrides) {
6
+ const http = (0, http_1.createHttpClient)(configOverrides);
7
+ const params = {};
8
+ if (pageType)
9
+ params.page_type = pageType;
10
+ const res = await http.get('/api/packages', { params });
11
+ return res.data?.data || res.data;
12
+ }
13
+ //# sourceMappingURL=environment-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"environment-api.js","sourceRoot":"","sources":["../../src/client/environment-api.ts"],"names":[],"mappings":";;AAGA,8CAMC;AATD,iCAA0C;AAGnC,KAAK,UAAU,iBAAiB,CAAC,QAAiB,EAAE,eAAwC;IACjG,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,QAAQ;QAAE,MAAM,CAAC,SAAS,GAAG,QAAQ,CAAC;IAC1C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,eAAe,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACxD,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;AACpC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { AxiosInstance } from 'axios';
2
+ import { IDevMcpConfig } from '../config';
3
+ /**
4
+ * 创建与知识库平台通信的 Axios 统一实例
5
+ */
6
+ export declare function createHttpClient(configOverrides?: Partial<IDevMcpConfig>): AxiosInstance;
7
+ //# sourceMappingURL=http.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.d.ts","sourceRoot":"","sources":["../../src/client/http.ts"],"names":[],"mappings":"AAAA,OAAc,EAAE,aAAa,EAAE,MAAM,OAAO,CAAC;AAC7C,OAAO,EAAa,aAAa,EAAE,MAAM,WAAW,CAAC;AAErD;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAiCxF"}
@@ -0,0 +1,38 @@
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.createHttpClient = createHttpClient;
7
+ const axios_1 = __importDefault(require("axios"));
8
+ const config_1 = require("../config");
9
+ /**
10
+ * 创建与知识库平台通信的 Axios 统一实例
11
+ */
12
+ function createHttpClient(configOverrides) {
13
+ const config = (0, config_1.getConfig)(configOverrides);
14
+ const headers = {
15
+ Accept: 'application/json'
16
+ };
17
+ if (config.apiKey) {
18
+ headers['Authorization'] = `Bearer ${config.apiKey}`;
19
+ headers['x-api-key'] = config.apiKey;
20
+ }
21
+ // Axios 中 timeout: 0 表示不限制超时 (对应配置的 -1)
22
+ const timeout = config.timeoutMs === -1 ? 0 : config.timeoutMs;
23
+ const instance = axios_1.default.create({
24
+ baseURL: config.baseUrl,
25
+ timeout,
26
+ headers
27
+ });
28
+ instance.interceptors.response.use((res) => res, (err) => {
29
+ const respData = err.response?.data;
30
+ const msg = respData?.message || respData?.error || err.message || '网络请求失败';
31
+ const status = err.response?.status;
32
+ const customErr = new Error(`[API 请求失败 ${status ? 'HTTP ' + status : ''}] ${msg}`);
33
+ customErr.response = err.response;
34
+ return Promise.reject(customErr);
35
+ });
36
+ return instance;
37
+ }
38
+ //# sourceMappingURL=http.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"http.js","sourceRoot":"","sources":["../../src/client/http.ts"],"names":[],"mappings":";;;;;AAMA,4CAiCC;AAvCD,kDAA6C;AAC7C,sCAAqD;AAErD;;GAEG;AACH,SAAgB,gBAAgB,CAAC,eAAwC;IACvE,MAAM,MAAM,GAAG,IAAA,kBAAS,EAAC,eAAe,CAAC,CAAC;IAC1C,MAAM,OAAO,GAA2B;QACtC,MAAM,EAAE,kBAAkB;KAC3B,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,eAAe,CAAC,GAAG,UAAU,MAAM,CAAC,MAAM,EAAE,CAAC;QACrD,OAAO,CAAC,WAAW,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;IACvC,CAAC;IAED,wCAAwC;IACxC,MAAM,OAAO,GAAG,MAAM,CAAC,SAAS,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC;IAE/D,MAAM,QAAQ,GAAG,eAAK,CAAC,MAAM,CAAC;QAC5B,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,OAAO;QACP,OAAO;KACR,CAAC,CAAC;IAEH,QAAQ,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAChC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,EACZ,CAAC,GAAG,EAAE,EAAE;QACN,MAAM,QAAQ,GAAG,GAAG,CAAC,QAAQ,EAAE,IAAI,CAAC;QACpC,MAAM,GAAG,GAAG,QAAQ,EAAE,OAAO,IAAI,QAAQ,EAAE,KAAK,IAAI,GAAG,CAAC,OAAO,IAAI,QAAQ,CAAC;QAC5E,MAAM,MAAM,GAAG,GAAG,CAAC,QAAQ,EAAE,MAAM,CAAC;QACpC,MAAM,SAAS,GAAG,IAAI,KAAK,CAAC,aAAa,MAAM,CAAC,CAAC,CAAC,OAAO,GAAG,MAAM,CAAC,CAAC,CAAC,EAAE,KAAK,GAAG,EAAE,CAAC,CAAC;QAClF,SAAiB,CAAC,QAAQ,GAAG,GAAG,CAAC,QAAQ,CAAC;QAC3C,OAAO,OAAO,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IACnC,CAAC,CACF,CAAC;IAEF,OAAO,QAAQ,CAAC;AAClB,CAAC"}
@@ -0,0 +1,9 @@
1
+ import { IDevMcpConfig } from '../config';
2
+ export declare function getProjectFiles(projectName: string, version?: string, configOverrides?: Partial<IDevMcpConfig>): Promise<any>;
3
+ export declare function getFileContent(projectName: string, filePath: string, version?: string, configOverrides?: Partial<IDevMcpConfig>): Promise<any>;
4
+ export declare function grepSourceCode(params: {
5
+ query: string;
6
+ project_name?: string;
7
+ file_pattern?: string;
8
+ }, configOverrides?: Partial<IDevMcpConfig>): Promise<any>;
9
+ //# sourceMappingURL=inspection-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection-api.d.ts","sourceRoot":"","sources":["../../src/client/inspection-api.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,wBAAsB,eAAe,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,gBAMpH;AAED,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,gBAQrI;AAED,wBAAsB,cAAc,CAAC,MAAM,EAAE;IAAE,KAAK,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAC;IAAC,YAAY,CAAC,EAAE,MAAM,CAAA;CAAE,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,gBAIrJ"}
@@ -0,0 +1,30 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.getProjectFiles = getProjectFiles;
4
+ exports.getFileContent = getFileContent;
5
+ exports.grepSourceCode = grepSourceCode;
6
+ const http_1 = require("./http");
7
+ async function getProjectFiles(projectName, version, configOverrides) {
8
+ const http = (0, http_1.createHttpClient)(configOverrides);
9
+ const params = {};
10
+ if (version)
11
+ params.version = version;
12
+ const res = await http.get(`/api/projects/${encodeURIComponent(projectName)}/files`, { params });
13
+ return res.data?.data || res.data;
14
+ }
15
+ async function getFileContent(projectName, filePath, version, configOverrides) {
16
+ const http = (0, http_1.createHttpClient)(configOverrides);
17
+ const params = {
18
+ path: filePath
19
+ };
20
+ if (version)
21
+ params.version = version;
22
+ const res = await http.get(`/api/projects/${encodeURIComponent(projectName)}/content`, { params });
23
+ return res.data?.data || res.data;
24
+ }
25
+ async function grepSourceCode(params, configOverrides) {
26
+ const http = (0, http_1.createHttpClient)(configOverrides);
27
+ const res = await http.get('/api/projects/grep', { params });
28
+ return res.data?.data || res.data;
29
+ }
30
+ //# sourceMappingURL=inspection-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"inspection-api.js","sourceRoot":"","sources":["../../src/client/inspection-api.ts"],"names":[],"mappings":";;AAGA,0CAMC;AAED,wCAQC;AAED,wCAIC;AAzBD,iCAA0C;AAGnC,KAAK,UAAU,eAAe,CAAC,WAAmB,EAAE,OAAgB,EAAE,eAAwC;IACnH,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,OAAO;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACjG,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,WAAmB,EAAE,QAAgB,EAAE,OAAgB,EAAE,eAAwC;IACpI,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,MAAM,GAA2B;QACrC,IAAI,EAAE,QAAQ;KACf,CAAC;IACF,IAAI,OAAO;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IACtC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,UAAU,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IACnG,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,cAAc,CAAC,MAAuE,EAAE,eAAwC;IACpJ,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,oBAAoB,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;IAC7D,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;AACpC,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { IDevMcpConfig } from '../config';
2
+ export interface IUploadZipParams {
3
+ zipBuffer: Buffer;
4
+ changelog?: string;
5
+ upload_project_type?: 'test' | 'final';
6
+ }
7
+ export declare function uploadProjectZip(params: IUploadZipParams, configOverrides?: Partial<IDevMcpConfig>): Promise<any>;
8
+ export declare function downloadProjectZip(projectName: string, version?: string, configOverrides?: Partial<IDevMcpConfig>): Promise<Buffer>;
9
+ export declare function deleteProjectVersion(projectName: string, version: string, configOverrides?: Partial<IDevMcpConfig>): Promise<any>;
10
+ //# sourceMappingURL=transfer-api.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer-api.d.ts","sourceRoot":"","sources":["../../src/client/transfer-api.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAC;AAE1C,MAAM,WAAW,gBAAgB;IAC/B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,mBAAmB,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC;CACxC;AAED,wBAAsB,gBAAgB,CAAC,MAAM,EAAE,gBAAgB,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,gBAwBxG;AAED,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAWzI;AAED,wBAAsB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,eAAe,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,gBAIxH"}
@@ -0,0 +1,49 @@
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.uploadProjectZip = uploadProjectZip;
7
+ exports.downloadProjectZip = downloadProjectZip;
8
+ exports.deleteProjectVersion = deleteProjectVersion;
9
+ const form_data_1 = __importDefault(require("form-data"));
10
+ const http_1 = require("./http");
11
+ async function uploadProjectZip(params, configOverrides) {
12
+ const http = (0, http_1.createHttpClient)(configOverrides);
13
+ const formData = new form_data_1.default();
14
+ formData.append('file', params.zipBuffer, {
15
+ filename: 'project.zip',
16
+ contentType: 'application/zip'
17
+ });
18
+ if (params.changelog) {
19
+ formData.append('changelog', params.changelog);
20
+ }
21
+ if (params.upload_project_type) {
22
+ formData.append('upload_project_type', params.upload_project_type);
23
+ }
24
+ const res = await http.post('/api/projects/upload-zip', formData, {
25
+ headers: {
26
+ ...formData.getHeaders()
27
+ },
28
+ maxBodyLength: Infinity,
29
+ maxContentLength: Infinity
30
+ });
31
+ return res.data?.data || res.data;
32
+ }
33
+ async function downloadProjectZip(projectName, version, configOverrides) {
34
+ const http = (0, http_1.createHttpClient)(configOverrides);
35
+ const params = {};
36
+ if (version)
37
+ params.version = version;
38
+ const res = await http.get(`/api/projects/${encodeURIComponent(projectName)}/download`, {
39
+ params,
40
+ responseType: 'arraybuffer'
41
+ });
42
+ return Buffer.from(res.data);
43
+ }
44
+ async function deleteProjectVersion(projectName, version, configOverrides) {
45
+ const http = (0, http_1.createHttpClient)(configOverrides);
46
+ const res = await http.delete(`/api/projects/${encodeURIComponent(projectName)}/versions/${encodeURIComponent(version)}`);
47
+ return res.data?.data || res.data;
48
+ }
49
+ //# sourceMappingURL=transfer-api.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transfer-api.js","sourceRoot":"","sources":["../../src/client/transfer-api.ts"],"names":[],"mappings":";;;;;AAUA,4CAwBC;AAED,gDAWC;AAED,oDAIC;AArDD,0DAAiC;AACjC,iCAA0C;AASnC,KAAK,UAAU,gBAAgB,CAAC,MAAwB,EAAE,eAAwC;IACvG,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,QAAQ,GAAG,IAAI,mBAAQ,EAAE,CAAC;IAChC,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,SAAS,EAAE;QACxC,QAAQ,EAAE,aAAa;QACvB,WAAW,EAAE,iBAAiB;KAC/B,CAAC,CAAC;IAEH,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;QACrB,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,SAAS,CAAC,CAAC;IACjD,CAAC;IACD,IAAI,MAAM,CAAC,mBAAmB,EAAE,CAAC;QAC/B,QAAQ,CAAC,MAAM,CAAC,qBAAqB,EAAE,MAAM,CAAC,mBAAmB,CAAC,CAAC;IACrE,CAAC;IAED,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,0BAA0B,EAAE,QAAQ,EAAE;QAChE,OAAO,EAAE;YACP,GAAG,QAAQ,CAAC,UAAU,EAAE;SACzB;QACD,aAAa,EAAE,QAAQ;QACvB,gBAAgB,EAAE,QAAQ;KAC3B,CAAC,CAAC;IAEH,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;AACpC,CAAC;AAEM,KAAK,UAAU,kBAAkB,CAAC,WAAmB,EAAE,OAAgB,EAAE,eAAwC;IACtH,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,MAAM,GAA2B,EAAE,CAAC;IAC1C,IAAI,OAAO;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC;IAEtC,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,GAAG,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,WAAW,EAAE;QACtF,MAAM;QACN,YAAY,EAAE,aAAa;KAC5B,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;AAC/B,CAAC;AAEM,KAAK,UAAU,oBAAoB,CAAC,WAAmB,EAAE,OAAe,EAAE,eAAwC;IACvH,MAAM,IAAI,GAAG,IAAA,uBAAgB,EAAC,eAAe,CAAC,CAAC;IAC/C,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,iBAAiB,kBAAkB,CAAC,WAAW,CAAC,aAAa,kBAAkB,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC;IAC1H,OAAO,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,GAAG,CAAC,IAAI,CAAC;AACpC,CAAC"}
@@ -0,0 +1,12 @@
1
+ export interface IDevMcpConfig {
2
+ baseUrl: string;
3
+ apiKey: string;
4
+ timeoutMs: number;
5
+ workspaceDir: string;
6
+ }
7
+ /**
8
+ * 获取开发者 MCP 运行配置
9
+ * 优先级: 显式参数 > 环境变量 > 默认值
10
+ */
11
+ export declare function getConfig(overrides?: Partial<IDevMcpConfig>): IDevMcpConfig;
12
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"AASA,MAAM,WAAW,aAAa;IAC5B,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,MAAM,CAAC;IAClB,YAAY,EAAE,MAAM,CAAC;CACtB;AAED;;;GAGG;AACH,wBAAgB,SAAS,CAAC,SAAS,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAAG,aAAa,CAkC3E"}
package/dist/config.js ADDED
@@ -0,0 +1,46 @@
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.getConfig = getConfig;
7
+ const dotenv_1 = __importDefault(require("dotenv"));
8
+ const path_1 = __importDefault(require("path"));
9
+ // 加载当前执行目录及项目目录下的 .env
10
+ dotenv_1.default.config();
11
+ try {
12
+ dotenv_1.default.config({ path: path_1.default.resolve(process.cwd(), '.env') });
13
+ }
14
+ catch (e) { }
15
+ /**
16
+ * 获取开发者 MCP 运行配置
17
+ * 优先级: 显式参数 > 环境变量 > 默认值
18
+ */
19
+ function getConfig(overrides) {
20
+ const baseUrl = overrides?.baseUrl ||
21
+ process.env.VIZ_BASE_URL ||
22
+ process.env.BASE_URL ||
23
+ 'http://localhost:3000';
24
+ const apiKey = overrides?.apiKey ||
25
+ process.env.VIZ_API_KEY ||
26
+ process.env.API_KEY ||
27
+ '';
28
+ const rawTimeout = overrides?.timeoutMs !== undefined
29
+ ? String(overrides.timeoutMs)
30
+ : process.env.VIZ_TIMEOUT_MS || process.env.TIMEOUT_MS || '30000';
31
+ let timeoutMs = parseInt(rawTimeout, 10);
32
+ if (isNaN(timeoutMs)) {
33
+ timeoutMs = 30000;
34
+ }
35
+ const workspaceDir = overrides?.workspaceDir ||
36
+ process.env.VIZ_WORKSPACE_DIR ||
37
+ process.env.WORKSPACE_DIR ||
38
+ process.cwd();
39
+ return {
40
+ baseUrl: baseUrl.replace(/\/+$/, ''),
41
+ apiKey,
42
+ timeoutMs,
43
+ workspaceDir: path_1.default.resolve(workspaceDir)
44
+ };
45
+ }
46
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":";;;;;AAoBA,8BAkCC;AAtDD,oDAA4B;AAC5B,gDAAwB;AAExB,uBAAuB;AACvB,gBAAM,CAAC,MAAM,EAAE,CAAC;AAChB,IAAI,CAAC;IACH,gBAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,cAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;AAC/D,CAAC;AAAC,OAAO,CAAC,EAAE,CAAC,CAAA,CAAC;AASd;;;GAGG;AACH,SAAgB,SAAS,CAAC,SAAkC;IAC1D,MAAM,OAAO,GACX,SAAS,EAAE,OAAO;QAClB,OAAO,CAAC,GAAG,CAAC,YAAY;QACxB,OAAO,CAAC,GAAG,CAAC,QAAQ;QACpB,uBAAuB,CAAC;IAE1B,MAAM,MAAM,GACV,SAAS,EAAE,MAAM;QACjB,OAAO,CAAC,GAAG,CAAC,WAAW;QACvB,OAAO,CAAC,GAAG,CAAC,OAAO;QACnB,EAAE,CAAC;IAEL,MAAM,UAAU,GAAG,SAAS,EAAE,SAAS,KAAK,SAAS;QACnD,CAAC,CAAC,MAAM,CAAC,SAAS,CAAC,SAAS,CAAC;QAC7B,CAAC,CAAC,OAAO,CAAC,GAAG,CAAC,cAAc,IAAI,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,OAAO,CAAC;IAEpE,IAAI,SAAS,GAAG,QAAQ,CAAC,UAAU,EAAE,EAAE,CAAC,CAAC;IACzC,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC;QACrB,SAAS,GAAG,KAAK,CAAC;IACpB,CAAC;IAED,MAAM,YAAY,GAChB,SAAS,EAAE,YAAY;QACvB,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAC7B,OAAO,CAAC,GAAG,CAAC,aAAa;QACzB,OAAO,CAAC,GAAG,EAAE,CAAC;IAEhB,OAAO;QACL,OAAO,EAAE,OAAO,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC;QACpC,MAAM;QACN,SAAS;QACT,YAAY,EAAE,cAAI,CAAC,OAAO,CAAC,YAAY,CAAC;KACzC,CAAC;AACJ,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":""}