2025-04-13 14:22:32 +08:00

111 lines
3.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { createApp } from 'vue';
import App from './App.vue';
import { createPinia } from 'pinia';
import router from './router';
import Antd from 'ant-design-vue';
import { Bubble, Sender, Conversations, ThoughtChain, Prompts } from 'ant-design-x-vue';
import 'ant-design-vue/dist/reset.css';
import './styles/global.scss';
import './styles/antdx-override.scss';
// 设置全局VSCode API
declare global {
interface Window {
vscodeApi: any;
__VSCODE_API_INITIALIZED__: boolean;
}
}
// VSCode API初始化 - 必须在全局范围获取一次
console.log('main.ts: 初始化VSCode API');
let vscodeGlobal = window.vscodeApi; // 直接使用window.vscodeApi它已经由ChatViewProvider初始化
// 记录API状态
if (vscodeGlobal) {
console.log('main.ts: VSCode API已由扩展初始化直接使用');
window.__VSCODE_API_INITIALIZED__ = true;
} else {
console.warn('main.ts: VSCode API未在window中找到');
window.__VSCODE_API_INITIALIZED__ = false;
// 处理情况如果在dev环境中提供一个虚拟的VSCode API
// 警告:这只用于开发,不应该在生产环境使用
if (process.env.NODE_ENV === 'development') {
console.log('main.ts: 创建开发环境下的模拟VSCode API');
window.vscodeApi = {
postMessage: (msg: any) => {
console.log('DEV模式: 模拟VSCode消息', msg);
// 模拟VSCode响应
if (msg.type === 'getSettings') {
setTimeout(() => {
window.dispatchEvent(new MessageEvent('message', {
data: {
type: 'settings',
settings: {
apiHost: 'ws://localhost:8080',
apiKey: 'dev_api_key'
}
}
}));
}, 100);
} else if (msg.type === 'saveSettings') {
setTimeout(() => {
window.dispatchEvent(new MessageEvent('message', {
data: {
type: 'settingsSaved',
success: true
}
}));
}, 100);
}
}
};
console.log('main.ts: 已创建模拟VSCode API');
}
}
// 每5秒检查一次VSCode API状态调试用
setInterval(() => {
console.log('VSCode API状态:', window.vscodeApi ? '可用' : '不可用');
}, 5000);
// 创建Vue应用
const app = createApp(App);
// 添加favicon以防止404错误
const link = document.createElement('link');
link.rel = 'icon';
link.href = 'data:,'; // 空数据URL不加载任何图标
document.head.appendChild(link);
// 注册Pinia状态管理
app.use(createPinia());
// 注册Ant Design Vue
app.use(Antd);
// 注册Ant Design X Vue组件
app.component('a-x-bubble', Bubble);
app.component('a-x-sender', Sender);
app.component('a-x-conversations', Conversations);
app.component('a-x-thought-chain', ThoughtChain);
app.component('a-x-prompts', Prompts);
// 注册路由
app.use(router);
// 错误处理
app.config.errorHandler = (err, instance, info) => {
console.error('Vue Error:', err, info);
if (window.vscodeApi) {
window.vscodeApi.postMessage({
type: 'error',
message: err instanceof Error ? err.message : String(err),
info: info
});
}
};
// 挂载应用
app.mount('#app');