qwenproxy-cli 1.0.0 → 1.0.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/LICENSE +14 -14
- package/README.md +906 -906
- package/bin/qwenproxy.js +5 -1
- package/package.json +78 -78
- package/src/api/error-classifier.ts +159 -159
- package/src/api/error-helpers.ts +118 -118
- package/src/api/models.ts +261 -261
- package/src/api/server.ts +860 -859
- package/src/cache/memory-cache.ts +385 -385
- package/src/clean-cache.ts +204 -204
- package/src/core/account-concurrency.ts +671 -671
- package/src/core/account-manager.ts +301 -297
- package/src/core/account-priority.ts +163 -163
- package/src/core/accounts.ts +186 -186
- package/src/core/config.ts +383 -383
- package/src/core/crypto-utils.ts +79 -79
- package/src/core/database.ts +276 -276
- package/src/core/errors.ts +118 -118
- package/src/core/logger.ts +269 -269
- package/src/core/memory-usage.ts +84 -84
- package/src/core/metrics.ts +291 -291
- package/src/core/model-alias.ts +77 -77
- package/src/core/model-registry.ts +544 -544
- package/src/core/mutex.ts +119 -119
- package/src/core/paths.ts +199 -199
- package/src/core/prompt-limits.ts +214 -214
- package/src/core/reasoning-effort.ts +102 -102
- package/src/core/stream-registry.ts +96 -96
- package/src/core/waf-isolation.ts +117 -117
- package/src/core/watchdog.ts +195 -195
- package/src/delete-chats.ts +23 -23
- package/src/index.ts +65 -64
- package/src/login.ts +147 -147
- package/src/reset-cooldowns.ts +11 -11
- package/src/routes/anthropic/index.ts +355 -355
- package/src/routes/anthropic/translate.ts +522 -522
- package/src/routes/anthropic/types.ts +154 -154
- package/src/routes/anthropic/validation.ts +144 -144
- package/src/routes/chat/account.ts +1817 -1817
- package/src/routes/chat/context.ts +241 -241
- package/src/routes/chat/errors.ts +85 -85
- package/src/routes/chat/helpers.ts +268 -268
- package/src/routes/chat/index.ts +618 -618
- package/src/routes/chat/media.ts +285 -285
- package/src/routes/chat/retry-policy.ts +754 -754
- package/src/routes/chat/stop.ts +98 -98
- package/src/routes/chat/streaming.ts +2710 -2710
- package/src/routes/chat/validation.ts +526 -526
- package/src/routes/chat.ts +2 -2
- package/src/routes/completions.ts +290 -290
- package/src/routes/images.ts +139 -139
- package/src/routes/responses/adapter.ts +503 -503
- package/src/routes/responses/index.ts +405 -405
- package/src/routes/responses/state.ts +230 -230
- package/src/routes/responses/streaming.ts +528 -528
- package/src/routes/responses/types.ts +285 -285
- package/src/routes/responses/validation.ts +202 -202
- package/src/routes/upload.ts +731 -731
- package/src/routes/videos.ts +214 -214
- package/src/services/auth-playwright.ts +173 -173
- package/src/services/captcha-coordinator.ts +161 -161
- package/src/services/captcha-solver.ts +553 -553
- package/src/services/chat-cleanup.ts +80 -80
- package/src/services/context-meter.ts +317 -317
- package/src/services/fingerprint.ts +242 -242
- package/src/services/human-behavior.ts +173 -173
- package/src/services/media-generation.ts +1748 -1748
- package/src/services/playwright.ts +2800 -2800
- package/src/services/qwen-chat-pool.ts +345 -345
- package/src/services/qwen-errors.ts +133 -133
- package/src/services/qwen-headers.ts +79 -79
- package/src/services/qwen-thread-state.ts +393 -393
- package/src/services/qwen-url.ts +19 -19
- package/src/services/qwen.ts +3126 -3126
- package/src/services/session-keeper.ts +88 -88
- package/src/services/token-estimation-metrics.ts +118 -118
- package/src/sync/claude-code.ts +75 -75
- package/src/sync/codex.ts +123 -123
- package/src/sync/index.ts +362 -362
- package/src/sync/omp.ts +105 -105
- package/src/sync/opencode.ts +214 -214
- package/src/sync/types.ts +53 -53
- package/src/sync/utils.ts +27 -27
- package/src/sync-clients.ts +189 -189
- package/src/tools/instructions.ts +137 -137
- package/src/tools/manifest.ts +81 -81
- package/src/tools/parser.ts +2989 -2989
- package/src/tools/toolcall-tags.ts +142 -142
- package/src/tui/app.ts +264 -264
- package/src/tui/index.ts +61 -61
- package/src/tui/markdown.ts +258 -258
- package/src/tui/proxy-client.ts +331 -326
- package/src/tui/screen.ts +294 -278
- package/src/tui/server-manager.ts +270 -270
- package/src/tui/theme.ts +432 -432
- package/src/tui/types.ts +33 -33
- package/src/tui/views/accounts-view.ts +656 -656
- package/src/tui/views/chat-view.ts +1018 -823
- package/src/tui/views/logs-view.ts +479 -413
- package/src/tui/views/status-view.ts +204 -204
- package/src/tui/views/storage-view.ts +304 -291
- package/src/tui/views/sync-view.ts +409 -409
- package/src/types/ali-oss.d.ts +32 -32
- package/src/utils/context-truncation.ts +84 -84
- package/src/utils/json.ts +380 -380
- package/src/utils/session-id.ts +37 -37
- package/src/utils/tool-call-guard.ts +84 -84
- package/src/utils/types.ts +109 -109
package/src/core/errors.ts
CHANGED
|
@@ -1,118 +1,118 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Valid HTTP status codes for operational errors.
|
|
3
|
-
*/
|
|
4
|
-
export type QwenProxyStatusCode =
|
|
5
|
-
| 400
|
|
6
|
-
| 401
|
|
7
|
-
| 403
|
|
8
|
-
| 404
|
|
9
|
-
| 429
|
|
10
|
-
| 499
|
|
11
|
-
| 500
|
|
12
|
-
| 502
|
|
13
|
-
| 503
|
|
14
|
-
| 504;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Base class for all QwenProxy operational errors.
|
|
18
|
-
* Provides OpenAI-compatible error formatting.
|
|
19
|
-
*/
|
|
20
|
-
export abstract class QwenProxyError extends Error {
|
|
21
|
-
abstract readonly statusCode: QwenProxyStatusCode;
|
|
22
|
-
abstract readonly type: string;
|
|
23
|
-
abstract readonly code: string;
|
|
24
|
-
param?: string;
|
|
25
|
-
|
|
26
|
-
constructor(message: string) {
|
|
27
|
-
super(message);
|
|
28
|
-
this.name = this.constructor.name;
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
toOpenAI() {
|
|
32
|
-
return {
|
|
33
|
-
error: {
|
|
34
|
-
message: this.message,
|
|
35
|
-
type: this.type,
|
|
36
|
-
code: this.code,
|
|
37
|
-
param: this.param,
|
|
38
|
-
},
|
|
39
|
-
};
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
export class ValidationError extends QwenProxyError {
|
|
44
|
-
readonly statusCode = 400;
|
|
45
|
-
readonly type = "invalid_request_error";
|
|
46
|
-
readonly code: string = "bad_request";
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
/** Input exceeds the local safe budget before it reaches the Qwen web API. */
|
|
50
|
-
export class ContextLengthExceededError extends ValidationError {
|
|
51
|
-
readonly code = "context_length_exceeded";
|
|
52
|
-
|
|
53
|
-
constructor(message: string, param = "messages") {
|
|
54
|
-
super(message);
|
|
55
|
-
this.param = param;
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
|
|
59
|
-
export class AuthError extends QwenProxyError {
|
|
60
|
-
readonly statusCode = 401;
|
|
61
|
-
readonly type = "authentication_error";
|
|
62
|
-
readonly code = "invalid_api_key";
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
export class ForbiddenError extends QwenProxyError {
|
|
66
|
-
readonly statusCode = 403;
|
|
67
|
-
readonly type = "permission_error";
|
|
68
|
-
readonly code = "insufficient_quota";
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
export class NotFoundError extends QwenProxyError {
|
|
72
|
-
readonly statusCode = 404;
|
|
73
|
-
readonly type = "not_found_error";
|
|
74
|
-
readonly code = "resource_not_found";
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export class UpstreamRateLimit extends QwenProxyError {
|
|
78
|
-
readonly statusCode = 429;
|
|
79
|
-
readonly type = "rate_limit_error";
|
|
80
|
-
readonly code = "rate_limit_exceeded";
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
export class UpstreamError extends QwenProxyError {
|
|
84
|
-
readonly statusCode = 502;
|
|
85
|
-
readonly type = "upstream_error";
|
|
86
|
-
readonly code = "upstream_unavailable";
|
|
87
|
-
}
|
|
88
|
-
|
|
89
|
-
export class UpstreamTimeout extends QwenProxyError {
|
|
90
|
-
readonly statusCode = 504;
|
|
91
|
-
readonly type = "timeout_error";
|
|
92
|
-
readonly code = "upstream_timeout";
|
|
93
|
-
}
|
|
94
|
-
|
|
95
|
-
export class InternalError extends QwenProxyError {
|
|
96
|
-
readonly statusCode = 500;
|
|
97
|
-
readonly type = "internal_error";
|
|
98
|
-
readonly code = "internal_server_error";
|
|
99
|
-
}
|
|
100
|
-
|
|
101
|
-
/**
|
|
102
|
-
* The client disconnected (or a same-session retry superseded the request)
|
|
103
|
-
* before the upstream stream could be created. There is no listener left to
|
|
104
|
-
* receive an error body, so this must NOT be surfaced as a 500: it is neither
|
|
105
|
-
* a server fault nor an upstream failure. HTTP 499 (Client Closed Request)
|
|
106
|
-
* keeps the semantics without polluting error metrics.
|
|
107
|
-
*/
|
|
108
|
-
export class ClientAbortedError extends QwenProxyError {
|
|
109
|
-
readonly statusCode = 499 as QwenProxyStatusCode;
|
|
110
|
-
readonly type = "request_aborted";
|
|
111
|
-
readonly code = "client_aborted";
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
export class ServiceUnavailable extends QwenProxyError {
|
|
115
|
-
readonly statusCode = 503;
|
|
116
|
-
readonly type = "service_unavailable";
|
|
117
|
-
readonly code = "service_degraded";
|
|
118
|
-
}
|
|
1
|
+
/**
|
|
2
|
+
* Valid HTTP status codes for operational errors.
|
|
3
|
+
*/
|
|
4
|
+
export type QwenProxyStatusCode =
|
|
5
|
+
| 400
|
|
6
|
+
| 401
|
|
7
|
+
| 403
|
|
8
|
+
| 404
|
|
9
|
+
| 429
|
|
10
|
+
| 499
|
|
11
|
+
| 500
|
|
12
|
+
| 502
|
|
13
|
+
| 503
|
|
14
|
+
| 504;
|
|
15
|
+
|
|
16
|
+
/**
|
|
17
|
+
* Base class for all QwenProxy operational errors.
|
|
18
|
+
* Provides OpenAI-compatible error formatting.
|
|
19
|
+
*/
|
|
20
|
+
export abstract class QwenProxyError extends Error {
|
|
21
|
+
abstract readonly statusCode: QwenProxyStatusCode;
|
|
22
|
+
abstract readonly type: string;
|
|
23
|
+
abstract readonly code: string;
|
|
24
|
+
param?: string;
|
|
25
|
+
|
|
26
|
+
constructor(message: string) {
|
|
27
|
+
super(message);
|
|
28
|
+
this.name = this.constructor.name;
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
toOpenAI() {
|
|
32
|
+
return {
|
|
33
|
+
error: {
|
|
34
|
+
message: this.message,
|
|
35
|
+
type: this.type,
|
|
36
|
+
code: this.code,
|
|
37
|
+
param: this.param,
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
export class ValidationError extends QwenProxyError {
|
|
44
|
+
readonly statusCode = 400;
|
|
45
|
+
readonly type = "invalid_request_error";
|
|
46
|
+
readonly code: string = "bad_request";
|
|
47
|
+
}
|
|
48
|
+
|
|
49
|
+
/** Input exceeds the local safe budget before it reaches the Qwen web API. */
|
|
50
|
+
export class ContextLengthExceededError extends ValidationError {
|
|
51
|
+
readonly code = "context_length_exceeded";
|
|
52
|
+
|
|
53
|
+
constructor(message: string, param = "messages") {
|
|
54
|
+
super(message);
|
|
55
|
+
this.param = param;
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
|
|
59
|
+
export class AuthError extends QwenProxyError {
|
|
60
|
+
readonly statusCode = 401;
|
|
61
|
+
readonly type = "authentication_error";
|
|
62
|
+
readonly code = "invalid_api_key";
|
|
63
|
+
}
|
|
64
|
+
|
|
65
|
+
export class ForbiddenError extends QwenProxyError {
|
|
66
|
+
readonly statusCode = 403;
|
|
67
|
+
readonly type = "permission_error";
|
|
68
|
+
readonly code = "insufficient_quota";
|
|
69
|
+
}
|
|
70
|
+
|
|
71
|
+
export class NotFoundError extends QwenProxyError {
|
|
72
|
+
readonly statusCode = 404;
|
|
73
|
+
readonly type = "not_found_error";
|
|
74
|
+
readonly code = "resource_not_found";
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export class UpstreamRateLimit extends QwenProxyError {
|
|
78
|
+
readonly statusCode = 429;
|
|
79
|
+
readonly type = "rate_limit_error";
|
|
80
|
+
readonly code = "rate_limit_exceeded";
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export class UpstreamError extends QwenProxyError {
|
|
84
|
+
readonly statusCode = 502;
|
|
85
|
+
readonly type = "upstream_error";
|
|
86
|
+
readonly code = "upstream_unavailable";
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
export class UpstreamTimeout extends QwenProxyError {
|
|
90
|
+
readonly statusCode = 504;
|
|
91
|
+
readonly type = "timeout_error";
|
|
92
|
+
readonly code = "upstream_timeout";
|
|
93
|
+
}
|
|
94
|
+
|
|
95
|
+
export class InternalError extends QwenProxyError {
|
|
96
|
+
readonly statusCode = 500;
|
|
97
|
+
readonly type = "internal_error";
|
|
98
|
+
readonly code = "internal_server_error";
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* The client disconnected (or a same-session retry superseded the request)
|
|
103
|
+
* before the upstream stream could be created. There is no listener left to
|
|
104
|
+
* receive an error body, so this must NOT be surfaced as a 500: it is neither
|
|
105
|
+
* a server fault nor an upstream failure. HTTP 499 (Client Closed Request)
|
|
106
|
+
* keeps the semantics without polluting error metrics.
|
|
107
|
+
*/
|
|
108
|
+
export class ClientAbortedError extends QwenProxyError {
|
|
109
|
+
readonly statusCode = 499 as QwenProxyStatusCode;
|
|
110
|
+
readonly type = "request_aborted";
|
|
111
|
+
readonly code = "client_aborted";
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export class ServiceUnavailable extends QwenProxyError {
|
|
115
|
+
readonly statusCode = 503;
|
|
116
|
+
readonly type = "service_unavailable";
|
|
117
|
+
readonly code = "service_degraded";
|
|
118
|
+
}
|