调整了整个框架,模块化解耦

This commit is contained in:
史悦
2025-10-27 11:04:00 +08:00
parent c83c36baa6
commit 533375e8ca
12 changed files with 1722 additions and 1558 deletions

78
js/modules/echarts.js Normal file
View File

@@ -0,0 +1,78 @@
(function registerEChartsModule(global) {
'use strict';
if (!global.ModuleRegistry) {
throw new Error('ModuleRegistry 未初始化');
}
const CODE_FENCE_REGEX = /```(?:json|js|javascript|echarts|option)?\s*([\s\S]*?)```/i;
const parseOptionText = (text) => {
if (!text) return null;
try {
return JSON.parse(text);
} catch (error) {
try {
// 尝试处理 JS 对象语法
// eslint-disable-next-line no-new-func
return new Function(`return (${text});`)();
} catch (innerError) {
console.warn('解析 ECharts 配置失败:', innerError);
return null;
}
}
};
const parseResponse = (content) => {
const match = content.match(CODE_FENCE_REGEX);
if (match) {
const optionText = match[1].trim();
return {
optionText,
option: parseOptionText(optionText),
beforeText: content.substring(0, match.index).trim(),
afterText: content.substring(match.index + match[0].length).trim()
};
}
return {
optionText: '',
option: null,
beforeText: content.trim(),
afterText: ''
};
};
global.ModuleRegistry.register({
id: 'echarts',
label: 'ECharts 图表',
icon: 'ph:chart-line-up-duotone',
renderer: 'echarts',
promptKey: 'echarts',
storageNamespace: 'module:echarts',
chat: {
placeholder: '描述想生成的图表或调整需求,我会输出 ECharts 配置…',
streamStartToken: '```json',
contextWindow: 8
},
artifact: {
type: 'echarts-option',
fence: ['json', 'js', 'javascript', 'echarts', 'option'],
startPattern: /```(?:json|js|javascript|echarts|option)/i,
parser: parseResponse
},
hooks: {
onActivate() {
// 预留钩子,可在此初始化额外资源
}
},
exports: {
allowSvg: false,
allowPng: true,
allowClipboard: false,
allowCode: true
},
ui: {
placeholderText: '生成的 ECharts 图表将在此处显示'
}
});
})(window);

View File

@@ -0,0 +1,43 @@
(function registerProductCanvasModule(global) {
'use strict';
if (!global.ModuleRegistry) {
throw new Error('ModuleRegistry 未初始化');
}
const parseResponse = (content) => Utils.parseSVGResponse(content);
global.ModuleRegistry.register({
id: 'product-canvas',
label: '产品画布',
icon: 'ph:pen-nib-duotone',
renderer: 'svg',
promptKey: 'canvas',
storageNamespace: 'module:product-canvas',
chat: {
placeholder: '描述你的产品定位、用户画像、价值主张等内容…',
streamStartToken: '```svg',
contextWindow: 10
},
artifact: {
type: 'svg',
fence: 'svg',
startPattern: /```(?:svg)?\s*<svg/i,
parser: parseResponse
},
hooks: {
onActivate() {
// 保留扩展点,后续可追加自定义逻辑
}
},
exports: {
allowSvg: true,
allowPng: true,
allowClipboard: true,
allowCode: true
},
ui: {
placeholderText: '生成的产品画布将在此处显示'
}
});
})(window);

39
js/modules/swot.js Normal file
View File

@@ -0,0 +1,39 @@
(function registerSwotModule(global) {
'use strict';
if (!global.ModuleRegistry) {
throw new Error('ModuleRegistry 未初始化');
}
const parseResponse = (content) => Utils.parseSVGResponse(content);
global.ModuleRegistry.register({
id: 'swot',
label: 'SWOT分析',
icon: 'ph:chart-bar-duotone',
renderer: 'svg',
promptKey: 'swot',
storageNamespace: 'module:swot',
chat: {
placeholder: '输入业务背景或问题,我来生成 SWOT 分析…',
streamStartToken: '```svg',
contextWindow: 10
},
artifact: {
type: 'svg',
fence: 'svg',
startPattern: /```(?:svg)?\s*<svg/i,
parser: parseResponse
},
hooks: {},
exports: {
allowSvg: true,
allowPng: true,
allowClipboard: true,
allowCode: true
},
ui: {
placeholderText: '生成的SWOT分析将在此处显示'
}
});
})(window);