aicodeswitch 1.3.9 → 1.4.1
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.
- package/CLAUDE.md +10 -0
- package/README.md +8 -0
- package/bin/cli.js +3 -0
- package/bin/ui.js +173 -0
- package/dist/server/database.js +321 -0
- package/dist/server/main.js +22 -2
- package/dist/server/proxy-server.js +263 -67
- package/dist/server/transformers/chunk-collector.js +150 -1
- package/dist/server/version-check.js +114 -0
- package/dist/ui/assets/index-DJ5R6Vso.js +360 -0
- package/dist/ui/assets/{index-Cj2o6J8f.css → index-dcQX0zYo.css} +1 -1
- package/dist/ui/index.html +2 -2
- package/package.json +3 -1
- package/dist/ui/assets/index-DcJFhVnN.js +0 -285
|
@@ -0,0 +1,114 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
function adopt(value) { return value instanceof P ? value : new P(function (resolve) { resolve(value); }); }
|
|
4
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
5
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
6
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
7
|
+
function step(result) { result.done ? resolve(result.value) : adopt(result.value).then(fulfilled, rejected); }
|
|
8
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
9
|
+
});
|
|
10
|
+
};
|
|
11
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
12
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
13
|
+
};
|
|
14
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
15
|
+
exports.checkVersionUpdate = exports.getLatestVersion = exports.getCurrentVersion = exports.compareVersions = void 0;
|
|
16
|
+
const https_1 = __importDefault(require("https"));
|
|
17
|
+
const path_1 = __importDefault(require("path"));
|
|
18
|
+
const fs_1 = __importDefault(require("fs"));
|
|
19
|
+
const PACKAGE_NAME = 'aicodeswitch';
|
|
20
|
+
const NPM_REGISTRY = 'registry.npmjs.org';
|
|
21
|
+
// 比较版本号
|
|
22
|
+
const compareVersions = (v1, v2) => {
|
|
23
|
+
const parts1 = v1.split('.').map(Number);
|
|
24
|
+
const parts2 = v2.split('.').map(Number);
|
|
25
|
+
for (let i = 0; i < 3; i++) {
|
|
26
|
+
if (parts1[i] > parts2[i])
|
|
27
|
+
return 1;
|
|
28
|
+
if (parts1[i] < parts2[i])
|
|
29
|
+
return -1;
|
|
30
|
+
}
|
|
31
|
+
return 0;
|
|
32
|
+
};
|
|
33
|
+
exports.compareVersions = compareVersions;
|
|
34
|
+
// 获取当前版本
|
|
35
|
+
const getCurrentVersion = () => {
|
|
36
|
+
try {
|
|
37
|
+
// 在构建环境中,__dirname 可能不可用
|
|
38
|
+
const packageJsonPath = path_1.default.resolve(process.cwd(), 'package.json');
|
|
39
|
+
const packageJson = JSON.parse(fs_1.default.readFileSync(packageJsonPath, 'utf-8'));
|
|
40
|
+
return packageJson.version;
|
|
41
|
+
}
|
|
42
|
+
catch (err) {
|
|
43
|
+
console.error('Failed to read current version:', err);
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
};
|
|
47
|
+
exports.getCurrentVersion = getCurrentVersion;
|
|
48
|
+
// 从 npm 获取最新版本
|
|
49
|
+
const getLatestVersion = () => {
|
|
50
|
+
return new Promise((resolve, reject) => {
|
|
51
|
+
const options = {
|
|
52
|
+
hostname: NPM_REGISTRY,
|
|
53
|
+
path: `/${PACKAGE_NAME}`,
|
|
54
|
+
method: 'GET',
|
|
55
|
+
headers: {
|
|
56
|
+
'User-Agent': 'aicodeswitch-version-check'
|
|
57
|
+
}
|
|
58
|
+
};
|
|
59
|
+
const req = https_1.default.request(options, (res) => {
|
|
60
|
+
let data = '';
|
|
61
|
+
res.on('data', (chunk) => {
|
|
62
|
+
data += chunk;
|
|
63
|
+
});
|
|
64
|
+
res.on('end', () => {
|
|
65
|
+
try {
|
|
66
|
+
const packageInfo = JSON.parse(data);
|
|
67
|
+
resolve(packageInfo['dist-tags'].latest);
|
|
68
|
+
}
|
|
69
|
+
catch (err) {
|
|
70
|
+
reject(new Error('Failed to parse npm response'));
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
});
|
|
74
|
+
req.on('error', (err) => {
|
|
75
|
+
reject(err);
|
|
76
|
+
});
|
|
77
|
+
req.setTimeout(10000, () => {
|
|
78
|
+
req.destroy();
|
|
79
|
+
reject(new Error('Request timeout'));
|
|
80
|
+
});
|
|
81
|
+
req.end();
|
|
82
|
+
});
|
|
83
|
+
};
|
|
84
|
+
exports.getLatestVersion = getLatestVersion;
|
|
85
|
+
// 检查版本更新
|
|
86
|
+
const checkVersionUpdate = () => __awaiter(void 0, void 0, void 0, function* () {
|
|
87
|
+
try {
|
|
88
|
+
const currentVersion = (0, exports.getCurrentVersion)();
|
|
89
|
+
const latestVersion = yield (0, exports.getLatestVersion)();
|
|
90
|
+
if (!currentVersion || !latestVersion) {
|
|
91
|
+
return {
|
|
92
|
+
hasUpdate: false,
|
|
93
|
+
currentVersion,
|
|
94
|
+
latestVersion
|
|
95
|
+
};
|
|
96
|
+
}
|
|
97
|
+
const versionCompare = (0, exports.compareVersions)(latestVersion, currentVersion);
|
|
98
|
+
const hasUpdate = versionCompare > 0;
|
|
99
|
+
return {
|
|
100
|
+
hasUpdate,
|
|
101
|
+
currentVersion,
|
|
102
|
+
latestVersion
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
catch (error) {
|
|
106
|
+
console.error('Failed to check version update:', error);
|
|
107
|
+
return {
|
|
108
|
+
hasUpdate: false,
|
|
109
|
+
currentVersion: (0, exports.getCurrentVersion)(),
|
|
110
|
+
latestVersion: null
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
exports.checkVersionUpdate = checkVersionUpdate;
|