@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,350 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ exports.generateProjectFiles = generateProjectFiles;
4
+ /**
5
+ * 模板生成引擎:为指定技术栈输出符合沙箱 13 项规范的完整工程文件集合
6
+ */
7
+ function generateProjectFiles(options) {
8
+ const { projectName, pageType, title, description = '', libraries = [], author = 'Visualization Agent', version = '1.0.0' } = options;
9
+ const files = [];
10
+ // 1. package.json
11
+ const packageJson = {
12
+ name: projectName,
13
+ version,
14
+ private: true,
15
+ type: 'module',
16
+ scripts: {
17
+ dev: 'vite',
18
+ build: 'vue-tsc --noEmit && vite build',
19
+ preview: 'vite preview'
20
+ },
21
+ dependencies: {
22
+ vue: '^3.4.38',
23
+ 'element-plus': '^2.8.0',
24
+ '@element-plus/icons-vue': '^2.3.1',
25
+ pinia: '^2.2.2'
26
+ },
27
+ devDependencies: {
28
+ '@vitejs/plugin-vue': '^5.1.2',
29
+ less: '^4.2.0',
30
+ typescript: '^5.5.4',
31
+ vite: '^5.4.2',
32
+ 'vue-tsc': '^2.1.4'
33
+ }
34
+ };
35
+ files.push({
36
+ relativePath: 'package.json',
37
+ content: JSON.stringify(packageJson, null, 2)
38
+ });
39
+ // 2. tsconfig.json
40
+ const tsconfig = {
41
+ compilerOptions: {
42
+ target: 'ES2020',
43
+ useDefineForClassFields: true,
44
+ module: 'ESNext',
45
+ lib: ['ES2020', 'DOM', 'DOM.Iterable'],
46
+ skipLibCheck: true,
47
+ moduleResolution: 'bundler',
48
+ allowImportingTsExtensions: true,
49
+ resolveJsonModule: true,
50
+ isolatedModules: true,
51
+ noEmit: true,
52
+ jsx: 'preserve',
53
+ strict: true,
54
+ noUnusedLocals: false,
55
+ noUnusedParameters: false,
56
+ noFallthroughCasesInSwitch: true
57
+ },
58
+ include: ['src/**/*.ts', 'src/**/*.d.ts', 'src/**/*.tsx', 'src/**/*.vue']
59
+ };
60
+ files.push({
61
+ relativePath: 'tsconfig.json',
62
+ content: JSON.stringify(tsconfig, null, 2)
63
+ });
64
+ // 3. vite.config.ts (关键:配置 external 排除全局底图引擎)
65
+ const viteConfig = `import { defineConfig } from 'vite';
66
+ import vue from '@vitejs/plugin-vue';
67
+ import { resolve } from 'path';
68
+
69
+ export default defineConfig({
70
+ plugins: [vue()],
71
+ build: {
72
+ lib: {
73
+ entry: resolve(__dirname, 'src/index.vue'),
74
+ name: 'ComponentEntry',
75
+ formats: ['es'],
76
+ fileName: () => 'index.js'
77
+ },
78
+ rollupOptions: {
79
+ external: [
80
+ 'vue',
81
+ 'element-plus',
82
+ '@element-plus/icons-vue',
83
+ 'pinia',
84
+ 'cesium',
85
+ 'three',
86
+ 'echarts',
87
+ 'ol',
88
+ 'mapbox-gl'
89
+ ],
90
+ output: {
91
+ assetFileNames: (assetInfo) => {
92
+ if (assetInfo.name && assetInfo.name.endsWith('.css')) {
93
+ return 'index.css';
94
+ }
95
+ return 'assets/[name]-[hash][extname]';
96
+ },
97
+ globals: {
98
+ vue: 'Vue',
99
+ 'element-plus': 'ElementPlus',
100
+ '@element-plus/icons-vue': 'ElementPlusIconsVue',
101
+ pinia: 'Pinia',
102
+ cesium: 'Cesium',
103
+ three: 'THREE',
104
+ echarts: 'echarts',
105
+ ol: 'ol',
106
+ 'mapbox-gl': 'mapboxgl'
107
+ }
108
+ }
109
+ }
110
+ }
111
+ });
112
+ `;
113
+ files.push({
114
+ relativePath: 'vite.config.ts',
115
+ content: viteConfig
116
+ });
117
+ // 4. project.json (平台核心清单)
118
+ const projectJson = {
119
+ name: projectName,
120
+ version,
121
+ title,
122
+ description: description || `${title} 可视化组件`,
123
+ pageType,
124
+ author,
125
+ entry: 'dist/index.js',
126
+ entry_sfc: 'src/index.vue',
127
+ libraries: libraries || [],
128
+ tags: [pageType, 'visualization', 'hud']
129
+ };
130
+ files.push({
131
+ relativePath: 'project.json',
132
+ content: JSON.stringify(projectJson, null, 2)
133
+ });
134
+ // 5. env.d.ts
135
+ const envDeclaration = `/// <reference types="vite/client" />
136
+ declare module '*.vue' {
137
+ import type { DefineComponent } from 'vue';
138
+ const component: DefineComponent<{}, {}, any>;
139
+ export default component;
140
+ }
141
+
142
+ declare interface Window {
143
+ viewer?: any;
144
+ Cesium?: any;
145
+ scene?: any;
146
+ camera?: any;
147
+ THREE?: any;
148
+ ol?: any;
149
+ mapboxgl?: any;
150
+ map?: any;
151
+ echarts?: any;
152
+ chart?: any;
153
+ __SANDBOX_CONTEXT__?: any;
154
+ }
155
+ `;
156
+ files.push({
157
+ relativePath: 'src/env.d.ts',
158
+ content: envDeclaration
159
+ });
160
+ // 6. src/util.ts
161
+ const utilTs = `/**
162
+ * 组件数据持久化与工具纯函数
163
+ * 约束:增删改查统一使用 localStorage 模拟持久化,严禁直连外部数据库
164
+ */
165
+
166
+ const STORAGE_KEY = '${projectName}_data';
167
+
168
+ export interface IRecordItem {
169
+ id: string;
170
+ name: string;
171
+ timestamp: number;
172
+ status: 'active' | 'inactive';
173
+ }
174
+
175
+ export function loadDataList(): IRecordItem[] {
176
+ try {
177
+ const raw = localStorage.getItem(STORAGE_KEY);
178
+ if (!raw) return [];
179
+ return JSON.parse(raw);
180
+ } catch (e) {
181
+ console.error('加载本地数据失败:', e);
182
+ return [];
183
+ }
184
+ }
185
+
186
+ export function saveDataList(list: IRecordItem[]): void {
187
+ try {
188
+ localStorage.setItem(STORAGE_KEY, JSON.stringify(list));
189
+ } catch (e) {
190
+ console.error('保存本地数据失败:', e);
191
+ }
192
+ }
193
+ `;
194
+ files.push({
195
+ relativePath: 'src/util.ts',
196
+ content: utilTs
197
+ });
198
+ // 7. src/index.less (严格遵守 pointer-events: auto !important 与左上角定位)
199
+ const indexLess = `/* ${title} 组件作用域样式表 */
200
+ .hud-container {
201
+ position: absolute;
202
+ top: 16px;
203
+ left: 16px;
204
+ z-index: 100;
205
+ pointer-events: auto !important; /* 必需:穿透至底图沙箱并保证 HUD 可交互 */
206
+
207
+ .hud-panel {
208
+ background: rgba(13, 22, 38, 0.85);
209
+ backdrop-filter: blur(12px);
210
+ border: 1px solid rgba(0, 229, 255, 0.35);
211
+ border-radius: 8px;
212
+ padding: 16px;
213
+ color: #ffffff;
214
+ box-shadow: 0 8px 32px rgba(0, 0, 0, 0.45);
215
+ min-width: 280px;
216
+
217
+ .hud-title {
218
+ font-size: 16px;
219
+ font-weight: 600;
220
+ color: #00e5ff;
221
+ margin-bottom: 12px;
222
+ display: flex;
223
+ align-items: center;
224
+ gap: 8px;
225
+ }
226
+
227
+ .hud-content {
228
+ font-size: 13px;
229
+ line-height: 1.6;
230
+ color: #cbd5e1;
231
+ }
232
+
233
+ .hud-actions {
234
+ margin-top: 16px;
235
+ display: flex;
236
+ gap: 8px;
237
+ }
238
+ }
239
+ }
240
+ `;
241
+ files.push({
242
+ relativePath: 'src/index.less',
243
+ content: indexLess
244
+ });
245
+ // 8. src/index.ts (业务逻辑与生命周期)
246
+ const indexTs = `import { ref, onMounted, onUnmounted } from 'vue';
247
+ import { loadDataList, saveDataList, IRecordItem } from './util';
248
+
249
+ export function useComponentLogic() {
250
+ const isRunning = ref(false);
251
+ const dataList = ref<IRecordItem[]>([]);
252
+ let updateTimer: any = null;
253
+
254
+ function handleStart() {
255
+ isRunning.value = true;
256
+ updateTimer = setInterval(() => {
257
+ // 模拟状态轮询
258
+ }, 1000);
259
+ }
260
+
261
+ function handleStop() {
262
+ isRunning.value = false;
263
+ if (updateTimer) {
264
+ clearInterval(updateTimer);
265
+ updateTimer = null;
266
+ }
267
+ }
268
+
269
+ onMounted(() => {
270
+ dataList.value = loadDataList();
271
+ // 监听沙箱场景就绪事件 (保障底图初始化完成)
272
+ if (window.viewer || window.__SANDBOX_CONTEXT__) {
273
+ console.log('[HUD] 场景已就绪');
274
+ }
275
+ });
276
+
277
+ onUnmounted(() => {
278
+ // 必需:销毁所有定时器与场景实体监听,杜绝内存泄漏
279
+ handleStop();
280
+ console.log('[HUD] 资源已释放销毁');
281
+ });
282
+
283
+ return {
284
+ isRunning,
285
+ dataList,
286
+ handleStart,
287
+ handleStop
288
+ };
289
+ }
290
+ `;
291
+ files.push({
292
+ relativePath: 'src/index.ts',
293
+ content: indexTs
294
+ });
295
+ // 9. src/index.vue (主模板视图:禁止 emoji,使用 Element Plus 图标)
296
+ const indexVue = `<template>
297
+ <div class="hud-container">
298
+ <div class="hud-panel">
299
+ <div class="hud-title">
300
+ <el-icon><Monitor /></el-icon>
301
+ <span>${title}</span>
302
+ </div>
303
+
304
+ <div class="hud-content">
305
+ <p>技术栈: <strong>${pageType.toUpperCase()}</strong></p>
306
+ <p>运行状态: <span>{{ isRunning ? '运行中' : '就绪' }}</span></p>
307
+ </div>
308
+
309
+ <div class="hud-actions">
310
+ <el-button
311
+ type="primary"
312
+ size="small"
313
+ :icon="VideoPlay"
314
+ :disabled="isRunning"
315
+ @click="handleStart"
316
+ >
317
+ 启动
318
+ </el-button>
319
+ <el-button
320
+ type="danger"
321
+ size="small"
322
+ :icon="VideoPause"
323
+ :disabled="!isRunning"
324
+ @click="handleStop"
325
+ >
326
+ 停止
327
+ </el-button>
328
+ </div>
329
+ </div>
330
+ </div>
331
+ </template>
332
+
333
+ <script setup lang="ts">
334
+ import { Monitor, VideoPlay, VideoPause } from '@element-plus/icons-vue';
335
+ import { useComponentLogic } from './index';
336
+
337
+ const { isRunning, dataList, handleStart, handleStop } = useComponentLogic();
338
+ </script>
339
+
340
+ <style scoped lang="less">
341
+ @import './index.less';
342
+ </style>
343
+ `;
344
+ files.push({
345
+ relativePath: 'src/index.vue',
346
+ content: indexVue
347
+ });
348
+ return files;
349
+ }
350
+ //# sourceMappingURL=template-engine.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"template-engine.js","sourceRoot":"","sources":["../../src/templates/template-engine.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface ITemplateOptions {
2
+ projectName: string;
3
+ pageType: string;
4
+ title: string;
5
+ description?: string;
6
+ libraries?: string[];
7
+ author?: string;
8
+ version?: string;
9
+ }
10
+ export interface IGeneratedFile {
11
+ relativePath: string;
12
+ content: string;
13
+ }
14
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,gBAAgB;IAC/B,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,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,cAAc;IAC7B,YAAY,EAAE,MAAM,CAAC;IACrB,OAAO,EAAE,MAAM,CAAC;CACjB"}
@@ -0,0 +1,3 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/templates/types.ts"],"names":[],"mappings":""}
@@ -0,0 +1,18 @@
1
+ export interface IBuildProjectArgs {
2
+ projectDir: string;
3
+ }
4
+ /**
5
+ * build_component_project: 本地调用内置 Vite 引擎构建生成沙箱专属 dist/index.js 与 dist/index.css 产物
6
+ * 具备自包含编译能力,目标组件目录即使无本地 node_modules 亦可秒级打包
7
+ */
8
+ export declare function handleBuildComponentProject(args: IBuildProjectArgs): Promise<{
9
+ success: boolean;
10
+ message: string;
11
+ project_dir: string;
12
+ duration_ms: number;
13
+ artifacts: {
14
+ 'dist/index.js': string;
15
+ 'dist/index.css': string;
16
+ };
17
+ }>;
18
+ //# sourceMappingURL=builder.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.tool.d.ts","sourceRoot":"","sources":["../../src/tools/builder.tool.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,iBAAiB;IAChC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED;;;GAGG;AACH,wBAAsB,2BAA2B,CAAC,IAAI,EAAE,iBAAiB;;;;;;;;;GAmGxE"}
@@ -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.handleBuildComponentProject = handleBuildComponentProject;
7
+ const fs_1 = __importDefault(require("fs"));
8
+ const path_1 = __importDefault(require("path"));
9
+ const vite_1 = require("vite");
10
+ const plugin_vue_1 = __importDefault(require("@vitejs/plugin-vue"));
11
+ /**
12
+ * build_component_project: 本地调用内置 Vite 引擎构建生成沙箱专属 dist/index.js 与 dist/index.css 产物
13
+ * 具备自包含编译能力,目标组件目录即使无本地 node_modules 亦可秒级打包
14
+ */
15
+ async function handleBuildComponentProject(args) {
16
+ const { projectDir } = args;
17
+ if (!projectDir) {
18
+ throw new Error('[参数错误] projectDir 为必填项');
19
+ }
20
+ const absDir = path_1.default.resolve(projectDir);
21
+ if (!fs_1.default.existsSync(absDir)) {
22
+ throw new Error(`[路径错误] 目标工程目录不存在: ${absDir}`);
23
+ }
24
+ const startTime = Date.now();
25
+ const distDir = path_1.default.join(absDir, 'dist');
26
+ // 1. 动态智能探测入口文件
27
+ let entryFile = '';
28
+ const candidates = ['src/index.vue', 'index.vue', 'src/index.ts', 'src/index.js', 'index.js'];
29
+ for (const c of candidates) {
30
+ const full = path_1.default.join(absDir, c);
31
+ if (fs_1.default.existsSync(full)) {
32
+ entryFile = full;
33
+ break;
34
+ }
35
+ }
36
+ if (!entryFile) {
37
+ throw new Error(`[入口缺失] 未在 ${absDir} 中找到有效的组件入口文件 (index.vue 或 src/index.vue)`);
38
+ }
39
+ // 2. 配置自包含 Vite 构建选项
40
+ const viteConfig = {
41
+ root: absDir,
42
+ configFile: false, // 保证完全基于开发者 MCP 内置编译器进行独立可靠构建
43
+ plugins: [(0, plugin_vue_1.default)()],
44
+ build: {
45
+ outDir: distDir,
46
+ emptyOutDir: true,
47
+ minify: true,
48
+ lib: {
49
+ entry: entryFile,
50
+ name: 'ComponentBundle',
51
+ fileName: () => 'index.js',
52
+ formats: ['es']
53
+ },
54
+ rollupOptions: {
55
+ external: [
56
+ 'vue',
57
+ 'element-plus',
58
+ 'cesium',
59
+ 'three',
60
+ 'echarts',
61
+ 'mapbox-gl',
62
+ 'maplibre-gl',
63
+ 'ol',
64
+ '@element-plus/icons-vue'
65
+ ],
66
+ output: {
67
+ assetFileNames: (assetInfo) => {
68
+ if (assetInfo.name && assetInfo.name.endsWith('.css')) {
69
+ return 'index.css';
70
+ }
71
+ return assetInfo.name || 'asset';
72
+ }
73
+ }
74
+ }
75
+ },
76
+ logLevel: 'warn'
77
+ };
78
+ // 3. 执行 Programmatic Vite Build
79
+ try {
80
+ await (0, vite_1.build)(viteConfig);
81
+ }
82
+ catch (err) {
83
+ throw new Error(`[本地构建编译异常]: ${err.message || err}`);
84
+ }
85
+ const distJsPath = path_1.default.join(distDir, 'index.js');
86
+ const distCssPath = path_1.default.join(distDir, 'index.css');
87
+ if (!fs_1.default.existsSync(distJsPath)) {
88
+ throw new Error(`[构建异常] 未能生成必需的产物文件: ${distJsPath}`);
89
+ }
90
+ const jsStat = fs_1.default.statSync(distJsPath);
91
+ const hasCss = fs_1.default.existsSync(distCssPath);
92
+ const cssStat = hasCss ? fs_1.default.statSync(distCssPath) : null;
93
+ const durationMs = Date.now() - startTime;
94
+ return {
95
+ success: true,
96
+ message: `工程本地构建成功 (耗时 ${(durationMs / 1000).toFixed(2)}s)`,
97
+ project_dir: absDir,
98
+ duration_ms: durationMs,
99
+ artifacts: {
100
+ 'dist/index.js': `${(jsStat.size / 1024).toFixed(2)} KB`,
101
+ 'dist/index.css': cssStat ? `${(cssStat.size / 1024).toFixed(2)} KB` : '未提取独立CSS (已内联或无样式)'
102
+ }
103
+ };
104
+ }
105
+ //# sourceMappingURL=builder.tool.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"builder.tool.js","sourceRoot":"","sources":["../../src/tools/builder.tool.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,25 @@
1
+ export interface IComplianceCheckArgs {
2
+ projectDir: string;
3
+ }
4
+ export interface ICheckItemResult {
5
+ id: string;
6
+ name: string;
7
+ status: 'PASS' | 'WARN' | 'FAIL';
8
+ score: number;
9
+ message: string;
10
+ fix_suggestion?: string;
11
+ violating_files?: string[];
12
+ }
13
+ /**
14
+ * check_sandbox_compliance: 自动化对本地工程进行 13 项沙箱与编码合规静态代码扫描
15
+ */
16
+ export declare function handleCheckSandboxCompliance(args: IComplianceCheckArgs): Promise<{
17
+ total_score: number;
18
+ max_score: number;
19
+ is_eligible_for_upload: boolean;
20
+ overall_status: string;
21
+ project_dir: string;
22
+ check_items: ICheckItemResult[];
23
+ recommendations: string[];
24
+ }>;
25
+ //# sourceMappingURL=compliance.tool.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"compliance.tool.d.ts","sourceRoot":"","sources":["../../src/tools/compliance.tool.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,oBAAoB;IACnC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;IACjC,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,MAAM,CAAC;IAChB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,EAAE,CAAC;CAC5B;AAED;;GAEG;AACH,wBAAsB,4BAA4B,CAAC,IAAI,EAAE,oBAAoB;;;;;;;;GAkS5E"}