qwenproxy-cli 1.0.4 → 1.0.6
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/README.md +2 -2
- package/bin/qwenproxy.js +41 -13
- package/package.json +1 -1
- package/src/api/server.ts +4 -1
- package/src/clean-cache.ts +17 -11
- package/src/core/config.ts +2 -0
- package/src/core/model-alias.ts +47 -7
- package/src/login.ts +5 -0
- package/src/routes/chat/validation.ts +1 -1
- package/src/services/fingerprint.ts +45 -5
- package/src/services/playwright.ts +120 -8
- package/src/services/qwen-chat-pool.ts +4 -4
- package/src/services/qwen-headers.ts +28 -6
- package/src/sync/omp.ts +27 -21
- package/src/sync/opencode.ts +34 -30
- package/src/tui/app.ts +1 -1
- package/src/tui/proxy-client.ts +50 -49
- package/src/tui/screen.ts +47 -7
- package/src/tui/server-manager.ts +19 -11
- package/src/tui/theme.ts +41 -23
- package/src/tui/views/accounts-view.ts +5 -3
- package/src/tui/views/chat-view.ts +1 -0
- package/src/tui/views/status-view.ts +4 -4
- package/src/tui/views/storage-view.ts +11 -7
- package/src/update-cli.ts +21 -6
|
@@ -7,7 +7,7 @@ import path from "node:path";
|
|
|
7
7
|
import type { TuiView } from "../types.ts";
|
|
8
8
|
import type { KeyEvent } from "../screen.ts";
|
|
9
9
|
import { theme, glyphs, drawBox, pad } from "../theme.ts";
|
|
10
|
-
import { pruneAllPlaywrightProfiles } from "../../services/playwright.ts";
|
|
10
|
+
import { pruneAllPlaywrightProfiles, cleanupOrphanProfiles } from "../../services/playwright.ts";
|
|
11
11
|
import { getProfilesDir } from "../../core/paths.ts";
|
|
12
12
|
import {
|
|
13
13
|
formatBytes,
|
|
@@ -79,6 +79,9 @@ export class StorageView implements TuiView {
|
|
|
79
79
|
this.isScanning = true;
|
|
80
80
|
|
|
81
81
|
try {
|
|
82
|
+
// 0. Auto-prune orphan directories from removed accounts
|
|
83
|
+
cleanupOrphanProfiles();
|
|
84
|
+
|
|
82
85
|
// 1. Scan profiles
|
|
83
86
|
const profilesDir = getProfilesDir();
|
|
84
87
|
let totalBytes = 0;
|
|
@@ -241,11 +244,12 @@ export class StorageView implements TuiView {
|
|
|
241
244
|
if ((key.name === "p" || key.name === "P") && !key.ctrl) {
|
|
242
245
|
try {
|
|
243
246
|
const res = pruneAllPlaywrightProfiles();
|
|
244
|
-
|
|
245
|
-
|
|
246
|
-
|
|
247
|
-
)
|
|
248
|
-
|
|
247
|
+
const orphanRes = cleanupOrphanProfiles();
|
|
248
|
+
let logMsg = `✓ Caches limpos: ${formatBytes(res.totalFreedBytes)} liberados em ${res.totalFreedFiles} arquivos (${res.profilesCleaned} perfis)`;
|
|
249
|
+
if (orphanRes.removedCount > 0) {
|
|
250
|
+
logMsg += ` + ${orphanRes.removedCount} perfil(is) órfão(s) removido(s)`;
|
|
251
|
+
}
|
|
252
|
+
this.addLog(theme.green(logMsg));
|
|
249
253
|
await this.refresh();
|
|
250
254
|
} catch (err: any) {
|
|
251
255
|
this.addLog(theme.red(`✗ Falha ao limpar perfis: ${err?.message || String(err)}`));
|
|
@@ -260,7 +264,7 @@ export class StorageView implements TuiView {
|
|
|
260
264
|
if (res.freedBytes > 0 || res.unusedDirs.length > 0) {
|
|
261
265
|
this.addLog(
|
|
262
266
|
theme.green(
|
|
263
|
-
`✓ Navegadores limpos: ${formatBytes(res.freedBytes)} recuperados
|
|
267
|
+
`✓ Navegadores limpos: ${formatBytes(res.freedBytes)} recuperados em disco (${res.unusedDirs.length} versões removidas)`,
|
|
264
268
|
),
|
|
265
269
|
);
|
|
266
270
|
} else {
|
package/src/update-cli.ts
CHANGED
|
@@ -27,17 +27,32 @@ export function detectPackageManager(): PackageManager {
|
|
|
27
27
|
|
|
28
28
|
return "npm";
|
|
29
29
|
}
|
|
30
|
-
export function getUpdateArgs(
|
|
30
|
+
export function getUpdateArgs(
|
|
31
|
+
pm: PackageManager,
|
|
32
|
+
packageName: string,
|
|
33
|
+
targetVersion?: string,
|
|
34
|
+
): { cmd: string; args: string[] } {
|
|
35
|
+
const versionTag = targetVersion ? `@${targetVersion}` : "@latest";
|
|
31
36
|
switch (pm) {
|
|
32
37
|
case "bun":
|
|
33
|
-
return { cmd: "bun", args: ["add", "-g", `${packageName}
|
|
38
|
+
return { cmd: "bun", args: ["add", "-g", `${packageName}${versionTag}`] };
|
|
34
39
|
case "pnpm":
|
|
35
|
-
return {
|
|
40
|
+
return {
|
|
41
|
+
cmd: "pnpm",
|
|
42
|
+
args: targetVersion
|
|
43
|
+
? ["add", "-g", `${packageName}@${targetVersion}`]
|
|
44
|
+
: ["update", "-g", packageName],
|
|
45
|
+
};
|
|
36
46
|
case "yarn":
|
|
37
|
-
return {
|
|
47
|
+
return {
|
|
48
|
+
cmd: "yarn",
|
|
49
|
+
args: targetVersion
|
|
50
|
+
? ["global", "add", `${packageName}@${targetVersion}`]
|
|
51
|
+
: ["global", "upgrade", packageName],
|
|
52
|
+
};
|
|
38
53
|
case "npm":
|
|
39
54
|
default:
|
|
40
|
-
return { cmd: "npm", args: ["install", "-g", `${packageName}
|
|
55
|
+
return { cmd: "npm", args: ["install", "-g", `${packageName}${versionTag}`] };
|
|
41
56
|
}
|
|
42
57
|
}
|
|
43
58
|
|
|
@@ -93,7 +108,7 @@ export async function runUpdateCommand(): Promise<void> {
|
|
|
93
108
|
}
|
|
94
109
|
|
|
95
110
|
console.log(`\n🚀 Nova versão disponível: v${currentVersion} ➔ v${latestVersion}`);
|
|
96
|
-
const { cmd, args } = getUpdateArgs(pm, packageName);
|
|
111
|
+
const { cmd, args } = getUpdateArgs(pm, packageName, latestVersion);
|
|
97
112
|
console.log(`⏳ Atualizando globalmente via ${pm} (${cmd} ${args.join(" ")})...`);
|
|
98
113
|
const fullUpdateCmd = `${cmd} ${args.join(" ")}`;
|
|
99
114
|
const updateProc = spawnSync(fullUpdateCmd, {
|