{"_id":"qwenproxy-cli","_rev":"52-607aeeadd76b718a16171f898ec0d3cf","name":"qwenproxy-cli","dist-tags":{"latest":"1.3.6"},"versions":{"1.0.0":{"name":"qwenproxy-cli","version":"1.0.0","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.0","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"78a3ce6a46cb849cd085aba3f22fda759b1f7776","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.0.tgz","fileCount":109,"integrity":"sha512-HvZJKsWV5GlzCLpKcTxem/2dXTkSagPrm6MdERv9f2HaHtGyjCfOB3ef5F0uH/ZbzhMIMr7GUSVO8bSzy45Dag==","signatures":[{"sig":"MEYCIQCBns4jmDM0Y4ySbRNkQhKDPAoPl3hbVD/Erz4CPTGgmgIhAJQiKftjCuH3F3xq8rntLOhqrrbPMEQF9gXN2gdodonH","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1399793},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"7590479d655a4c45696e3b4f1d38e95b8669d279","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","postinstall":"patchright install chromium","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"12.0.2","description":"API compatível com OpenAI que conecta clientes ao Qwen via Playwright, com suporte a múltiplas contas, tool calling e sessões persistentes.","directories":{},"_nodeVersion":"24.15.0","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"^1.62.3","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.0_1788880418037_0.06977750428521334","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"qwenproxy-cli","version":"1.0.1","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.1","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"ac75fff46ce8c90e19332145ebe5a222b8a44cb1","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.1.tgz","fileCount":109,"integrity":"sha512-jrvInP41va/TjZSViMVUJiHUjxgFpI8NZN9yhaYnT/2577OV6NA0F1hxQIdfnsB6z80ky6R3sHizTI/HHYiGqA==","signatures":[{"sig":"MEYCIQDwyF1KZQhokohP2xO+q9ltG03Sy/epTRNxFIAIECWOoAIhAIBzXpKdl7TNyfqhnVtl/u2tr+BB0DVZZxD+jW3uZ16h","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDVx28qJelm4lAUuJUv5VANhej2vVCbiMPU/afdhfTRCQIhAP0gGg/CQVr0FE/A5khFQwLP4H7KTRB9LJrJeDA/ZnqY","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1371184},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"f30300ffa7f8f1ebc0654d44cf748e272e2161c0","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","postinstall":"patchright install chromium","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"^1.62.3","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.1_1788889293607_0.47331906067793805","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"qwenproxy-cli","version":"1.0.2","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.2","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"f1760645125e831d9493bf718495358c97c622d0","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.2.tgz","fileCount":110,"integrity":"sha512-j1/7Z2qSw5OFnFx90AnwSAuuRay5S/nkMtQ29nNILQeBx7tHspWv9BUiJpV5ROTIAm6eMhm7SFuavph+uWayRg==","signatures":[{"sig":"MEYCIQDyQfq/5qs2d0d1netlEem8glEsR5REb/qEGns6dA6yiQIhAM8SF5sLbOksBpICfkIW3AbhobVRM5xiLa+X7cyGTPXc","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIB1pl4KO53D4W3mAFFHd06HZxwiBPlLpJxwGJJC7spGQAiEAve8pt7ZxpNCVEULNIB7xtmjJqepvkytx0w8eG+wqavQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1377398},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"e559829ec25e6c6800f5648b352439930296ecab","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"^1.62.3","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.2_1788891724436_0.00913850238085856","host":"s3://npm-registry-packages-npm-production"}},"1.0.3":{"name":"qwenproxy-cli","version":"1.0.3","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.3","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"580d40c54c24a6ef40edfab32e77c7c879551d10","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.3.tgz","fileCount":110,"integrity":"sha512-E3mJA7EJ7bbDRo0UD+uvEEycNFrVALcKVMSyY45fVr6pBHQXZ/8mGosfgOohWj4kFhwPAJ+kL1nvR1RDADAmHQ==","signatures":[{"sig":"MEUCIQCmRGKXENBFXbm/b19dvus2MyNFmf7owkuMsNJjfEdNZgIgIgmeWUJKIuuhxH1M6oJI4nNkpxGhC5Z81MkQbd8YYO8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDSH0FGWCKliKoSFizd/L1oBmNkDGrAHkQljMdishjZEAiB5gqvpVyDc9vCZDjODScjj1uyAHX8rW3LBK7i0yYkbiA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1378722},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"282cd0f8e7836238795714f0228604da7f9c19f2","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"^1.62.3","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.3_1788892908897_0.8317616884820755","host":"s3://npm-registry-packages-npm-production"}},"1.0.4":{"name":"qwenproxy-cli","version":"1.0.4","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.4","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"b6b34af90e9131a6456e637387d55cf8a80eef2a","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.4.tgz","fileCount":110,"integrity":"sha512-YabOmzD92e0hRevlDA93hLZ1KJZ0YaZqkMhL/Ie25v/YnO8Gmuicqyj6Xd+CqsUUjbPOP1tAdcLaIJrWK2kl/A==","signatures":[{"sig":"MEUCIA0mOKDkdtZb/fHWBWcl9x5BD5yu8xtS8bADawdjrH4PAiEArws+fgTeVgUHG6OR9ssggOKAdHgj1cqew+I6jLjS7AU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDG2DqyFygV3SSON9PjT46HMbnzLSDbHAPI2KdMNJg+RQIgP24DfRhOD/CVYFHQYtUg5x1zukdX5fuOSWYkKD8JFjo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1394263},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"f50f41dab06435429c387666fb1ada33b7069e1d","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"^1.62.3","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.4_1788898591730_0.08003893333316237","host":"s3://npm-registry-packages-npm-production"}},"1.0.5":{"name":"qwenproxy-cli","version":"1.0.5","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.5","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"d9226716b2c9a6c5af3c6965ac0615cb3a127f3f","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.5.tgz","fileCount":110,"integrity":"sha512-Eo3Pj3rz65LTvLl1WUJlImQJTL9GurrPL8eGZl4NsFFEvcYz8PiskJbNZZgPzSGmzjP7jQGdclk3JrVloB6AKQ==","signatures":[{"sig":"MEQCIAL6rLqta6/M0px6X1qTrJb5vf7TytECYRP49Gqpu5gDAiBz8lpajgJTO5KmGPXJB9yUHquQR4c7qE2FJ2nz73BfQw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICUatmSFi6onGNiyiy+Bia6akBbUB+B/esI6IxUb2JPJAiBTVhc6yE2XTNA7fBohz3qoJqi+oLUmnD7Cej4Tid5haA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1401686},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"14d10d470d5c3a05e526dc995df5cf7f8eb92d50","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"^1.62.3","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.5_1788911295730_0.3320939857381091","host":"s3://npm-registry-packages-npm-production"}},"1.0.6":{"name":"qwenproxy-cli","version":"1.0.6","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.6","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"2ad91c34c2fb977d8b5f0782bdfa5b1e6c4398d6","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.6.tgz","fileCount":110,"integrity":"sha512-fEfdgh4h9tXVqxq4BsQNIMjAZEEQN+0EA4jgIN8PDNxQwrh32OHftHo4QEjAmQrGplHjfNnpKDDf+As031A1Dw==","signatures":[{"sig":"MEYCIQC2gkNK/u9LjY9c3SFScmP9Pp8zRwqjA/6ZjhcOdMlDOQIhAIhTBwIkN3Bba13YTF0jcUlKQQb9H+MK6TEh62IiPibm","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDuS12nzv2gV1E1sx+eOj9uNtAmV9z6/0s5ovKxp7A+2wIhAKHz7SqIZQRbtcFkZ2OihHtd6fMaCz54AzfGLNMlrPpv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1405621},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"8c656a42b89fc481bda244f95ff8ee187341e06b","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"^1.62.3","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.6_1788921546456_0.8350025025953376","host":"s3://npm-registry-packages-npm-production"}},"1.0.7":{"name":"qwenproxy-cli","version":"1.0.7","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.7","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"3b10514dd7f6c4262151721d055a6a8b1232b1eb","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.7.tgz","fileCount":110,"integrity":"sha512-ZvpgP/Zy9w8ROXSxK8jE1qzdlAkyKWGsCCDflzFfEnKnZNlUgdqL7wwVQj+00WWahXkH5GCDo9HE1OsJks5UoQ==","signatures":[{"sig":"MEUCIQCOPnLWi1190b3Wk/p7m8P7FLmTTCuUVfX0ZH/DBW2KmQIgW0E02TvCrZFUdosCDtF70VBbrhCwqE0bb4HWIgUalIo=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIB8HowIAuLF09NJao1+il7SM6/g9ggtA2N206CcWEjxDAiEAmjjy0U87TK/SpkPPoWZz6je+q9SiE63ix4eQ2BND6HY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1409892},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"60a7f4d7ffe835261f7b7c5a65619585f0c4b2ff","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"^1.62.3","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.7_1788923830788_0.5460532165074246","host":"s3://npm-registry-packages-npm-production"}},"1.0.8":{"name":"qwenproxy-cli","version":"1.0.8","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.8","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"4aec0bbb5fb01d1f810a3331750f29969716411c","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.8.tgz","fileCount":110,"integrity":"sha512-41x0P6thRnyKyjEg/5VDfYfTA8M9+8+tyZcyKdjp2YuWK60Kd+EqKA3n7r04ntbUpg4X5S1Rfo3fgKcl+wDZTw==","signatures":[{"sig":"MEUCIEUhkf+DLSyQB8Gqv+y3NObXuekbJhtHIOLp/k4EPhAKAiEAk5XKs46fFcGixBgABcOjs0BTX0YN0K1UqDnT44JfRa8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIHPtdR38qmLRGH6bpjUasEG7oNqEgNAVykGicQNix32RAiEA6M3yN77wuqn4i0wlAaHgjJPtH6IwQb7VfkWL+K49u8U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1411725},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"80a307de2ed94036ce6b0745606b468007154678","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"^1.62.3","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.8_1788924364143_0.7511564288440691","host":"s3://npm-registry-packages-npm-production"}},"1.0.9":{"name":"qwenproxy-cli","version":"1.0.9","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.9","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"9a9c445adf6867c60453761da167170f99f74031","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.9.tgz","fileCount":110,"integrity":"sha512-q1SDC3oX3ulW1NoNVVaeIcGP1ABWaEMd4Mqtiwe8yDCjJ6GNjYB1Dgkk9hmUdI2aB16+oGd3T+IXErCvEFe/MQ==","signatures":[{"sig":"MEYCIQC+8zMVvjhUd/EFbktT7nW4IWyAo3l1rbLjlR3BeCcyjgIhALQq6sKy1zkecx+fb0oqua9ZRmNMCQ5OLJIjeGOOEWAs","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDtoQymm7ekTGfywqWOYkMqDlxqD4JSbbFzpmKJUiyu6wIgKvuWhI5uTS97DU1gYx7Er/km29XESSLcbXxAFaFhTx0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1412147},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"28f7b62de82a9fe3649d27e1e13e69d62b527ad1","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.9_1788924985033_0.6695135503754726","host":"s3://npm-registry-packages-npm-production"}},"1.0.10":{"name":"qwenproxy-cli","version":"1.0.10","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.10","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"011a6bd38780c3ad6549594462b375bc52cea44b","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.10.tgz","fileCount":110,"integrity":"sha512-kJhWnuI/oRMonaw3+ulBvetaJpeDyBz9uOcx/OHzMakwI5DvrQASq68RHlduH0pYOzsKoN/F8whmAW+zd9+fxw==","signatures":[{"sig":"MEUCIQD6GrtZqBYfUrB7ARfrCYn4IRVyoCojGOQ00k/VQcHtzQIgJQMY5HnAix3PWrdj3Ct+KeE5mQiMOWgUGeuDkJf+1vc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDeaj1Ch/UqqBRcJf7q987h2k4GOMr7bz9vtZM91DwdyAIhAPpVFmay2VgvALIiq8NzdHxxE/QwYWYNGubRskDmChyI","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1412306},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"b981d5270050c443defa86224d9954c89b4a6f2f","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.10_1788925282083_0.9269384291921265","host":"s3://npm-registry-packages-npm-production"}},"1.0.11":{"name":"qwenproxy-cli","version":"1.0.11","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.11","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"0ab166a535a2c862792f832233193710e6fe4f44","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.11.tgz","fileCount":110,"integrity":"sha512-MsFlBsr5sCKYQHNbmc9hYWDuFr5JiNj0Jc1g6ErS+jdnM/c6N7sw+AlrLhDujkuFB4xn/Opr+PdXQ2voSBYRBw==","signatures":[{"sig":"MEYCIQCARcFZDXkvQhICDc7FYxRVbVOb5jz/m0tD0w+lYYaI+QIhAL6lhLZL3nBLGOKqLfp7Ak4U8UlEpKV0DEAe8it9Pvl9","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEvMBcPNAgjfBwitT6uVyUBwa0VBTpmKAU/fiBvVaZkdAiEA66c/AUnZYXf3QUTfby3y5ERPncyYX2AY8lxINCwG2No=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1418623},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"a26c061a13b8909eaa86df1c711974919c2d9899","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.11_1788974471672_0.12648382645262934","host":"s3://npm-registry-packages-npm-production"}},"1.0.12":{"name":"qwenproxy-cli","version":"1.0.12","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.12","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js","qwenproxy":"bin/qwenproxy.js"},"dist":{"shasum":"0edc584eeb15149a403016571357c2288c883aff","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.12.tgz","fileCount":110,"integrity":"sha512-h0TWOu0EDos+6x2ThMjls2mCC8C8jMnKhAOXFGtaxOuWoSeQtAnoea5CPf59Z9Zg/od0iW/WwuW6ix23un7ZVQ==","signatures":[{"sig":"MEQCICs9qgCTHTMVcXh3HhpUFTgu1FS91DvY6Tkx0+5ZwFfNAiANcdXFB5I7ZzoVC7dQT5+Jxl9cpxUQXbHQCX/9UFGdbA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGVMzeX/N52rN7lrjg/6KGF7lkz8Q7kuzF4rVju6pxbRAiEA1I9modbnzBF7HRPDDl9fQTuHkYxhlRG6WU/5lLPtIVY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1418344},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"01ac8494e5ae995adc05ee9bda8730d61112a9bd","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.12_1788981576349_0.4083707694529348","host":"s3://npm-registry-packages-npm-production"}},"1.0.13":{"name":"qwenproxy-cli","version":"1.0.13","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.13","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"aa5f29d681d6ec9a5a66d5bcda2363fe95a2c829","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.13.tgz","fileCount":110,"integrity":"sha512-BbJhqMxeaoTBKzPsKakLkT5MZfmb0Havh5VJ11WieANi83J1pLAJIzwNCry2QC4UXrxxJx5CsefMQjKeRAwjDA==","signatures":[{"sig":"MEYCIQDCSXb+s9VQOTezy7XU3Ol1TAhMEbaQ1+riai86pLokrgIhAO512RrsltGZxJYYC7hoLonSxSL+FUDgu2a9vKQz3EWJ","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCqXjHUI+r8OnNJnbPJWFuwEeS7ABC8TO/pohnjAZ1JeQIgZglpvERuFT5rkl8MldBq/ad49UEBQLK4Z4gVdqiMY3M=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1419733},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"4ffbd114460c0234586db3ee89b40b8e4b08f68a","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.13_1788984015698_0.25323458181229896","host":"s3://npm-registry-packages-npm-production"}},"1.0.14":{"name":"qwenproxy-cli","version":"1.0.14","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.14","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"362f1a0aba7d06e45ff895967dc18aa067c61bdd","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.14.tgz","fileCount":110,"integrity":"sha512-j7nPPy5mKNRG3NvwBkXT4M45ubM/JI1NZtQE458RrL7QK2Lp6iXVaWZ+0zLcSyalbtwn8nFPzG54BdihX7cSEA==","signatures":[{"sig":"MEQCIBPacdAqqd+qlNDF3fsKmYDW6acnzknlMWLT4D1ippU8AiBTL3SwRrA1c5ihxzyoHX1NMoN3P5Gljq0z+D0Atvoe9Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDXT3Su3VktMERB1ytul+GUPqyccJOqGyjXmqb6PbJLnQIgIzW6eBkABGCGBwOnC+S1TPLuB4PKXZzR8K+iz+oJTn0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1420842},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"76012757376987e222ff3f988a2c2d8d14b9e0a4","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.14_1789006690191_0.949739529063713","host":"s3://npm-registry-packages-npm-production"}},"1.0.15":{"name":"qwenproxy-cli","version":"1.0.15","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.15","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"47204fe084734d3dafe0b9417aa7cda9ae6642e7","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.15.tgz","fileCount":110,"integrity":"sha512-qOVVvBzquSnoG+8l9wacOt7YCCqiKQTUZTStwpDeOqhS3pBsn/H/BsXAgkNRAlKyLU+Jfijz+i1Jfs+0eAPl5g==","signatures":[{"sig":"MEUCIQDgxNuInxKfi8CKVydyucZzAx2v8RkykV2miCWadXSmnAIgO9mOe4fIJTwFz/MYygaCYmNC+XWiwW5VaIpQHSPzHqU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBTNAbylLkNdgtOv4CPDqPRVUncM8pCjsvgeycwUplbuAiEA4Mbd0rBwJ8pdvUPBz6L6dP4IMrQHAm9z6C5GjiaUP48=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1422648},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"5ef42b756a6edecfbc3ab3ca602b4b8ac9d40cfb","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.15_1789072037764_0.02921506678324204","host":"s3://npm-registry-packages-npm-production"}},"1.0.16":{"name":"qwenproxy-cli","version":"1.0.16","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.16","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"eb10a200e3c2bcdd729b56e8e80a28f56716d79f","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.16.tgz","fileCount":110,"integrity":"sha512-0VOCSYvNqs8iVjxrdi9PtEQFIzsTut8I2CMFTk8ReNoX/yXvB6BsyoeMAox1taDb4eUiRzM3hqGXVVqKuOyS/w==","signatures":[{"sig":"MEUCIQDCHXdMCl/ReMe1ojn1ybFOoj0TG7Dw5arrDbdy43UT2wIgY6AdQf9fVLwar8B07tZvDLpQL1FpS4+KNaxoExcqfrs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFEe3z8k8JvQexYXLbsLnCdxihF/rZg0H/jWzCotzMTdAiBHkAtizTl4uPH9GCa1uQ5QaGvJR3Mbtq3W350tqSKrUw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1423003},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"14fe06813f9b3d678f615bcc0ccb48fe053277f5","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.16_1789073889046_0.3455411074443431","host":"s3://npm-registry-packages-npm-production"}},"1.0.17":{"name":"qwenproxy-cli","version":"1.0.17","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.17","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"f87b71c228001abf5d42a55f420a7f88d9caf810","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.17.tgz","fileCount":110,"integrity":"sha512-iepk8i/7kun998PzIhsk+xBwssaLfI+sdqY0GoquuUmfdlpBaAkQ6XdYLdbsGz1ljzaCXFBQ2HkTw1c2SEt2kA==","signatures":[{"sig":"MEYCIQC7lM5Gso8rLS1P0CKJwFdRmG0mSjPG0VICwlg77QKa0AIhAINfY37e1gpSi3k/w/hAkMs0Zy7/GDKpb3QyJ5G6+r8K","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIE0C6AoCrky24Qcxsu3mI3QjuUu3SisoM+nnT6brhmdRAiEA+N+VobF3k6nqWXn8PPRkLjRJF3tc/Ucm9wxjO54Nbrk=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1425789},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"6900c59e403b1c815d9e3b65021aed4e6a22ec42","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.17_1789083543459_0.8957268478406353","host":"s3://npm-registry-packages-npm-production"}},"1.0.18":{"name":"qwenproxy-cli","version":"1.0.18","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.18","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"a8ea948ff716ba79c0c5559227506b6de8fbaea7","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.18.tgz","fileCount":110,"integrity":"sha512-TjopFb2R/3nrHmMRKMxkAOLeFDDPOB4RLxtmuHH4uWFh9ioMMW8R4NN1Jwcxf0QONX+ZTlpOMPYqGsX9ypbP9Q==","signatures":[{"sig":"MEUCIAZS2wN501QMCJzIiO5OmrTm36l90k+bdVVbeIuSask3AiEA4uWYKp6MwDD66o6ePgPqVTFM+9sN/L0/4FvnbHEP5X8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD7ixJfOJilpkQq9TBxBRYBApkpESYrhc0sUtrNb3UX0wIhAKCQ7lRGwHFod7thj+GyiluQsQfFNadYpZbc9X5j1c5y","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1426525},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"2416872427682953c7ad446e9b58741cf052f03a","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.18_1789086058741_0.7283561558619496","host":"s3://npm-registry-packages-npm-production"}},"1.0.19":{"name":"qwenproxy-cli","version":"1.0.19","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.19","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"3f32d2821b307a60004ee03f604527df4fdc6105","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.19.tgz","fileCount":110,"integrity":"sha512-hqn7NEO+Ulmhg0cGdTpr8tjTTOz4Gus0oMWC0dhpUWQvbkKRtGB1J4XSJ98zmnueJ2YZvVrq6p2PluKMkG1ECw==","signatures":[{"sig":"MEYCIQDE/SLi4qs9JsPFkX2WjITL9OX9+QtNsFX955RjQo8aEQIhAJZgbHwWDNxIcjYHuNeGPFExOjL6K94tVgQYLfAzAFgB","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCID4n2uM5qrGOTXq2hliuhGBt8eqsxq26PwQZGyXZaPkqAiEAmedhjxK28VWj6WrYEwKLxUOlWGqaZlN5e0Bnqgf6Pyg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1428681},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"66372bf4d54cd44d143ee3dc296fcb8e46eaf0df","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.19_1789095726088_0.9823531178061786","host":"s3://npm-registry-packages-npm-production"}},"1.0.20":{"name":"qwenproxy-cli","version":"1.0.20","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.20","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"3b95f08f1b187bda27796af7941699dd2300435b","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.20.tgz","fileCount":110,"integrity":"sha512-/u6Y3g+bAFI9e1s6Iuvc598R10/zq+ZMxshnpCYaX47wdfa1azmP392GXl1gxwhZK4DzNXVeZONI2jmYIxYfWQ==","signatures":[{"sig":"MEYCIQDy7LHU+87JUN/rHO+T1WjstX4bXx20Zsg2HpSnJ73jnwIhANco35+W1zMgwp9+itJ56EUwVdBN4FlHScgfrxTYHgtF","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIH6mM86O32O5OubAgaCQx1PjxtmigvRr0z8F/ENhcWX9AiEAxGha6K2zDph32hwBYNPMkFsRY8j22f2lS3pWsnV7TU8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1428327},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"203683ba34ef863d4ef406bd16fbdbdbe48fc0df","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.20_1789099795110_0.5529090140591946","host":"s3://npm-registry-packages-npm-production"}},"1.0.21":{"name":"qwenproxy-cli","version":"1.0.21","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.21","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"5bc4479a4fae650b2e87602cb59d88bc6b840b7e","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.21.tgz","fileCount":110,"integrity":"sha512-iFgCw4n5WerMZTYBJwHm6aYlPwiYnzjttMvVLhu4Lofr15xtSEemottVib8kM9x0xeMuoK0ctxu2cPA/tdN6Vg==","signatures":[{"sig":"MEQCIGUouwFaoJ4DVlPi9IZEeUMPHEDf8x52+EQuEgN7bl7rAiB+PWMXCMZfzwXDvlmpENjuBv80u8deknpP9TNu5HvJjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIAzhK+C4ZWe6mBgOycz5AXHx9M/7lD2JjR29ZNWWx77nAiEAuZ8URzo9qAgOUnuiXeZTsW9EvSpiFnz0vGdYszV2ecY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1431767},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"69916e5b1a1e35f70e8c3eadfed988aed7eb5991","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.21_1789150609188_0.30614138252000944","host":"s3://npm-registry-packages-npm-production"}},"1.0.22":{"name":"qwenproxy-cli","version":"1.0.22","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.22","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"bccba4bb69cb4cf68eb1b437f861abe18855e64a","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.22.tgz","fileCount":110,"integrity":"sha512-4eoG9UuWBvgP/DQOsTdJUMpxzGlkIfyHLtos2VKT03Y2dZEhaAd3i6Zh489aFf0EgSophtsIQAsycyn3OZV0aQ==","signatures":[{"sig":"MEQCIDQkSLw+M0Dqb3OcNdPV4WH3PxVw/dlYihQjTrXu5WHsAiBo+XbGj124kCqrzXutfyxlu5pgbh8vPbWsoFh/Q8J87w==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIFJTrenH9dm4H+nw1OOe6SOFv1CiinD6A8SF0pEL2DpfAiAz0NXbTkfC7DDPzswP0sx8xgguJkk/chIzGxAuGpg7FA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1432635},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"c580b46afa4b19af9a1f32ddbf60a0441c78febf","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.22_1789343507975_0.5416334188330885","host":"s3://npm-registry-packages-npm-production"}},"1.0.23":{"name":"qwenproxy-cli","version":"1.0.23","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.23","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"495f98b4296c86c237d7290541ac95e249050d08","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.23.tgz","fileCount":110,"integrity":"sha512-qWZMQvbv+Jvhy3IR5dZW7X5KqWh7ygXf2U+fh5BAKqPoMD++SfD463pfpSeyy7uckJ7ooyERxRhSt9WtW4YQHA==","signatures":[{"sig":"MEUCIAJeVD/GbuE6CzilL2N7Kwk/0mk/n0+xlZrQf9VlR4ErAiEAhDfKoDiWEdj7ohwb74fEVj9L6NGJGLBdd3RQfOeVunQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIQDcWwdiAAkpS4NIE4DL5NcCUS3O58zLxSpuombFdLxL2QIfQsQXe0UW9Lz+jp45pgeFs9Gc0fWSDiNg88MPsBVl4g==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1434843},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"8b649c256e8357b60cf8a70453463940c2668e30","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.23_1789358109530_0.9541818982940999","host":"s3://npm-registry-packages-npm-production"}},"1.0.24":{"name":"qwenproxy-cli","version":"1.0.24","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.24","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"9731593b58fa0d752e280c131c319f46df099424","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.24.tgz","fileCount":110,"integrity":"sha512-IuEZqxKeRiXexAEIkrc+oKyTliVceHTmVx3u/MqCQnU4MHqYy6/TI8JVOl743rl39LMFAVWftl1juBVoCCItQA==","signatures":[{"sig":"MEQCICPHmHP7uIESWkIravYnEkmC2fa5wTVl8aHi6s9NnU0ZAiAXO6P9pjtYdxH+JPVjVT3puLvt+L1H8E1moVNytz5/HQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIEz/aOJDNJK1vZMGB8Rkmmrrvyxul8UH5oFHCEJ1PSh1AiEAn3lnfIVWbCB4OwYKUIEfocoQq5xotUkG9m7Pvh7xeo8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1439944},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"976c0c25aa3412f4e208411200965229b12ba2a7","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.24_1789397098583_0.66159591862644","host":"s3://npm-registry-packages-npm-production"}},"1.0.25":{"name":"qwenproxy-cli","version":"1.0.25","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.25","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"e19c304ecfa269f64c351409664ce5644bcdeb16","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.25.tgz","fileCount":110,"integrity":"sha512-ztRDl+paHgeocO4UCB7Xv6j3Sy14or3RdMcLL8tly7ENK6X8ei8H0ObjujyUYiiTuqiK6yzbhIYk1eIT9LjSaw==","signatures":[{"sig":"MEUCIQDWvHON96aAaOkAhAAEj+GIusoMQXgPJscg3BKQHLtXRgIgPx3KdNg5owUJG6gb666QVwYCqUzp66DwT75VKFlr3ds=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCSOKaQanRQ4H6H3Z8u+TCnJxC2fF3MCGixuTGQNOFErAIhAMIA9JqrmLhrvxEmWYAFTpQrexgrMZ+cZVMuKYEjkq+f","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1441864},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"ce1af8df5fe48e1f6e77469225d6ab76699cefde","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.25_1789488904606_0.9168971541927207","host":"s3://npm-registry-packages-npm-production"}},"1.0.26":{"name":"qwenproxy-cli","version":"1.0.26","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.26","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"29020c3d3fb4b66d2a2dbea3b6f2037b7da35629","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.26.tgz","fileCount":110,"integrity":"sha512-8i5+mzJJx0Q6H9JRGNlhQ6HyHbrEGKxd9ZfT+CKBooP0sRPuKvRaelVvvDQaO5B0GCWhP9/JkrC4F1SNTx6QUg==","signatures":[{"sig":"MEYCIQDImN7RjJ0meH5XDAdJu7yudKvANzsDCz1ceSFLcXmgeQIhAMIqc/YYANBHkirbqj3mhXYxRsaWrn9uxsurzf20hDuv","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCICjVoDWbmOOzeHmMXqcsPP1LF63mXMdIhfhniKIgMth9AiAE1WX0qRTstNTfH9k6swfno9HZh4IMrcB9Jdz6lNXT1A==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1451519},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"025df46a08f2b0b6c6657cc0135995170085ec9d","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.26_1789506038569_0.06297079145237738","host":"s3://npm-registry-packages-npm-production"}},"1.0.27":{"name":"qwenproxy-cli","version":"1.0.27","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.27","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"b4b6525cfdb060f0eb130e9cbea30f5b5354023d","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.27.tgz","fileCount":112,"integrity":"sha512-JXGKgTyOcLvQZzuL0EMXcEwDqgj38Ox3K10631ZlM1M4BsYDRt10HqU2ez6MipetQGXv95u9h+GsyDJxpMIzIA==","signatures":[{"sig":"MEUCIQDq7CZ9sYtCJfILZmhVpp/Xz0bZiEGri6E17zWmi1uphAIgBTe4qdLUXuVNAyFm/kubscbm4gK1GU+gPPlmm0mcnTQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIDOnGt4UtIcyyOtA4bWlBXW3gwhfmE6V99synpmPP/pZAiAQN0Fihd0ECT30BmcUR//iX5MWTeL+6kEyGSCDFlgdKw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1477374},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"6abc318dcdacfbd42a0efe88e53ec204de8392b6","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.27_1789530615945_0.35533183080232056","host":"s3://npm-registry-packages-npm-production"}},"1.0.28":{"name":"qwenproxy-cli","version":"1.0.28","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.28","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"8ea18839d77ec1f4e955b92eb720ca66f8f52593","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.28.tgz","fileCount":112,"integrity":"sha512-4MBubxkmVDmDZt06FgQDMDoNB+KkckT2YPh/1aIrVp5d16VgKzGz/15gPwK6ORNwgmlwh9fnySHtRNYv6pkhqA==","signatures":[{"sig":"MEYCIQDU+KpW+kQDNaxYaBD3xQWx6sVHefPXNfcO/aGyp7yZHwIhAJcdruUXSJdssdsZZPFpKDZuZDRJau2dA8XhWBPJNDB6","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCs5kNj8OfocOOqwb9qhlDZBus9SBaTvc4qiCpp8pMgLgIgQV69cZ73WXPqSn2lojl2571hs4AHx3r4UnKw4ntqDkU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1478113},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"6605ee1d55c674681a8902b8033cc412140c4a3e","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.28_1789608515198_0.8527472979346626","host":"s3://npm-registry-packages-npm-production"}},"1.0.29":{"name":"qwenproxy-cli","version":"1.0.29","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.29","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"df841562ff9966990dc4cff714705a629e52f36f","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.29.tgz","fileCount":118,"integrity":"sha512-4er0Nm9Jh8tqzu1ofym9B8YPzQpIiPlcFhEW8KTPiqv5pSJ3NOod4dMd29PbLQVMcKaCHFbIktBX6dSTi0g2dg==","signatures":[{"sig":"MEQCIEvy/Si3x2DAv+AfFhnBz8Kxrh4Ild+dhnMElVn8sPs1AiBrO5M1ktx4vhyVXXebudmYKFkLn5f7tRlrKSieWr4wjw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD02GCWGsTYK9MipLRL3kFq1dNJNQqTn7W+h1nvmlWrXwIhAOEl6qyipm7PgvTb0nqXg2Q4LlRvPxrcgig3GAbRKH9s","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1518846},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"8ec3267670cc220e1b00b209fae713a950fd9465","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts","typecheck":"tsc --noEmit","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.29_1789658962353_0.7509180914051132","host":"s3://npm-registry-packages-npm-production"}},"1.0.30":{"name":"qwenproxy-cli","version":"1.0.30","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.30","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"c7bc8f40f6ea8da468ab23107792fb1fb62da00f","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.30.tgz","fileCount":118,"integrity":"sha512-ODwaHaTmOaS2t5+k8I+ca2OFEDOUFmJ6dnEaJF7/IaHp50VLcW+Q+LkMr2p3aYvylaZMkzi26LGP0qYhoZqWVQ==","signatures":[{"sig":"MEUCIQCXf+bayKG9AxZlCAM6k5jGR95ZsMhXoVmt8lxkNNgqNQIgFcvvc/KxR7zn3CJ9sF96DWpjqvXmqYjS+/dgSxzZH1E=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIFTBYSHFJTMQUt6ozqxfgLwvOxE8RtR9l0Eds8uxLBVJAiEA5qkemuvvNumMkcbYK52ghSJx1OLfmz6giq9O1s2BMmI=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1520088},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"6cd42a774f910b47d4bbb98b47e6d34bdb7caa5b","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.30_1789660420240_0.9639491884772684","host":"s3://npm-registry-packages-npm-production"}},"1.0.31":{"name":"qwenproxy-cli","version":"1.0.31","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.31","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"6b2e48e605b5193d8386d1ea2f166e3ce6244f56","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.31.tgz","fileCount":118,"integrity":"sha512-pW7a7hXi2YBJOdspFL8UZSnueR8TVgPNYLH4qHiXGFiuucPrThyCaW0nq0HMcJjBmqk8rqRPCt+zVBChTokVXw==","signatures":[{"sig":"MEUCIQCxWLCwCLb7Nyvnc8u7vtsdmAeffuvEoMWmOF9iXs6VBwIgZoebSSVVr8RktJGBbfSQAMRb2bMtXesWAxNAUn4UZ2U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD97B9Ua+r/+TXn9vfe5qDN/7L/KZkfr+YUFWat9mQf6wIhAJYIV1QJzbEE1XD7Gipzar5HTzps4ugoKEWqC8lcIY5v","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1520908},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"4c87011be1bebbd6bb77a5b1928bc9db7815a82f","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.31_1789665045322_0.32996372484776915","host":"s3://npm-registry-packages-npm-production"}},"1.0.32":{"name":"qwenproxy-cli","version":"1.0.32","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.0.32","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"a4e3154d17a282e4e71976fabacdd545aabf8433","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.0.32.tgz","fileCount":118,"integrity":"sha512-JTcHnIOdPji5C9sMAsih+QUtKWsI5L0Z0AL/V7BPcz25B6+KWYAfjsGzdmtf6mVC/XcxRKulrHBWrMo+Hu7+Cw==","signatures":[{"sig":"MEUCIGbZBvriLyhn5tSWkj6LMqo8iD6ftHZH4DXZudLQkrp6AiEAuvDQ7d6xzpLxv2YYJ4FdVv2C/6DdKIRir1Ev4EFNAZU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCU9ugLCi41/4n4SwDNHWUqq85ZFPBKydt7vZFmdEyuNwIgQoDTieLIAa4n7i71JAdvIsnP65cjF1u43Qq2BmFDk6c=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1522635},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"e1a5b640d4a8a205719d17359041f0f8810d525f","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.0.32_1789667398280_0.8393832501206233","host":"s3://npm-registry-packages-npm-production"}},"1.1.0":{"name":"qwenproxy-cli","version":"1.1.0","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.1.0","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"d14043b442d42944e79ea10309182feb8862b28f","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.1.0.tgz","fileCount":120,"integrity":"sha512-tDxarW5VL84ctkT7cUJJ32mXM2qa0r8uaPiaXHHQHbHlAZ8DfaP6rgx6otzSbavhBl/cNy1kK+KZ8PvLODFGbQ==","signatures":[{"sig":"MEQCIFk6SUmBYnK6yxS8ULzuNsXmV/IG+Y0kBq/kONulq9HhAiAB/mzOdxzHQiaJzyv0HGQctP18PedR0uA2dBDFYWq2mQ==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBvwl+RKJ9Vo/SgZLPouwThQu7pZbgKeQ7i6vilk1lDJAiEAovCT+MFV+GPASDj6tBO9mdLvThRpeYacAzD+Ua99aE4=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1588210},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"2b3d90f2e38192bfd3fd6e2fe5122c154726c128","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.1.0_1789682945629_0.700357159197309","host":"s3://npm-registry-packages-npm-production"}},"1.2.0":{"name":"qwenproxy-cli","version":"1.2.0","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.0","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"24c546bf67b9e5795436e52c7760f58767c87b9d","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.0.tgz","fileCount":122,"integrity":"sha512-u1w0jR9RXxZBiLtc3mcRNPVbgh9MiYMkGGDRq11bmNZ3/LideERUJC4pV8J3t2Qs6hBaqftJHOxy206pJyK0Qw==","signatures":[{"sig":"MEUCIE2zgy++eOYL61/DYXK/4AFu+NO3UvxgWRL3KfAjImajAiEAkwNArglcsknKzU+mfFsbqkaWAvs8iMLlqrLc92P/em0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDyNWzZ2dm7bz9zAjxB9vNKzR2rI79P8h5l6FV+Tk6NWwIhAItGMgWnDnuzHn6BbMprEcezh5g5hmsBHnmvVKlWtv9Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1605825},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"0b13f2947fe0e5de0344ff0687533c56f2116ab6","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.0_1789756624976_0.08938989811143028","host":"s3://npm-registry-packages-npm-production"}},"1.2.1":{"name":"qwenproxy-cli","version":"1.2.1","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.1","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"50f9055094a39fef104c126f0716aa05d46c40dd","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.1.tgz","fileCount":122,"integrity":"sha512-QfXcbMBzQXFEKEfLnC/GAL12Q/wI46vvIXWB7694WJyG45hKaNbcgHj0WF+lJnycPSg6ntQgG3BECdRg0B93Lg==","signatures":[{"sig":"MEUCIGMPA9SAigt4SWsr7Z4uxMw6rlUEqV6wrmyHcn8Bif/YAiEA45Xih9oLPJeh89E9Oufot+55HAsR9z02uMB4tXGb4uc=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCZTmpHAHRm6rNH4traoadaXTkMAF/jjLsrc3omg/n1pwIgIupdQDra0kV9fqpzYDbzlZfaT45vrh/r5DqR9rdx0lg=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1606448},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"aa5d8a2e4dc8b3471fe73ddf7ff30df97915b1dc","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.1_1789760824106_0.7804924255525989","host":"s3://npm-registry-packages-npm-production"}},"1.2.2":{"name":"qwenproxy-cli","version":"1.2.2","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.2","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"5e781beb1c3e844fd0b3df42643de3856d153e37","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.2.tgz","fileCount":122,"integrity":"sha512-uP5RS3a4Y228SubCa82wjE4XOZ7jQ2FL2xmsEfeeKlfvbyCAl+Nlnc8NlW0D46rTNWiZR/nh9JLuaPNNb8fjVQ==","signatures":[{"sig":"MEUCIQDYkoo+V9pdzAA+DPwzxBhnIfX6SvnuNPc2nEd2daEzPAIgXuUzJ3D0p1LWKtWjvREhnHQIwoqWX8fwhMML5/u1Z48=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQD5ug7kpPvljXI7sfGdYfihs8rKp1OC0h3mD3llgz3giwIhAKpGfsCkZEGo3JjcHuxQSRyCwzx3+Igw6l4trvXYO1wC","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1607955},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"4dd0de36360d4dc28075d38e5837165f084ba5b7","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.2_1789777618037_0.22301549549488153","host":"s3://npm-registry-packages-npm-production"}},"1.2.3":{"name":"qwenproxy-cli","version":"1.2.3","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.3","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"42520fe17b0da963d2cce81fa0406fad989a3a2a","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.3.tgz","fileCount":122,"integrity":"sha512-YW6oVXZbOHgVPwPJh1UpZ6SV55a0tlV7ndsN2tWH0MmzEUIGWJYC9DmxB3W3r2WPhiaECP1zK0gp3lfFoWFe2w==","signatures":[{"sig":"MEYCIQDF+eJBVXXkyz6EFZRp+2Duv5HjR7HJas3wdfHAv+QAFAIhAJeQ8AqC43co3432H1FNP2X3Ohp2eUJRDql33aiMHo0o","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCKcFmH4Yr4j1IJm020SLxXuqJ4mk4WCwFIjH30mIBw0QIhAOyhcS9YiErxh6BsQ7REXV07ZE/GgIbKck+zGjq+Qrer","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1613253},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"e6bc7042127d8db3800327fd47584caab0ec0899","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.3_1789784329175_0.6574296407881111","host":"s3://npm-registry-packages-npm-production"}},"1.2.4":{"name":"qwenproxy-cli","version":"1.2.4","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.4","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"6cc88c53cfa23a1ffb4a0df8ba1d49038cd814c4","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.4.tgz","fileCount":122,"integrity":"sha512-c7mh/SEU/vLEsg4ztlOcHHENTXHiDmqNe6+UlVkYlxSXTXYXPiYF+dvfIqSggVLMErrMaIq6lz2yIfJmGkLgyw==","signatures":[{"sig":"MEQCIBCwVBfAAUqFTHdIRbBNJilZ9gUJEx82MtoYqZocq8vIAiAnTtHJd1NIIyjDWQ1PTD0Y0y2H5q12hOspSR2mvTQ8Mg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQCyLxoisf0ipn2Dkv9EL7N9xjWjVF6K9r4oCgy9KX679AIgCtshfLFkDZ7+lm1a6amNKt6TUICjPZwuq3gNvLnVjts=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1616287},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"236004e81526fa892cb231e111e0e01c7f3a71e1","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.4_1789843475677_0.17331036869013983","host":"s3://npm-registry-packages-npm-production"}},"1.2.5":{"name":"qwenproxy-cli","version":"1.2.5","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.5","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"d52037b46ab564dc168252be059658937e3b730f","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.5.tgz","fileCount":122,"integrity":"sha512-QEYcnKcpCvAV7YZr4XDfbUcFh0exBM8zACa9z0s/PRTV5IknkFDuIZvIN2hSsqzDhfVzszYT9cO2IbO+vNwFOQ==","signatures":[{"sig":"MEQCIF5aVJmwkFL20+VNQl+RA8dzxLYYb66GbpPqK9QhP/rEAiA1SjtxwfkhF+RR9CxgePxJ3yF2Bb1shc4RRUL3lsn+bg==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICd2jTN43I1jJ23SOazXpKUYbCYNLIxzEikMrC85lQEeAiEAgHlUX8rSaJx6zbWlqY5RYiAc+vVbA8GRfE9zM7I8QG8=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1618634},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"56f195d33e5b0230e3a4b7b06dc873b6720ccfa9","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.5_1789846594064_0.7625994560209386","host":"s3://npm-registry-packages-npm-production"}},"1.2.6":{"name":"qwenproxy-cli","version":"1.2.6","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.6","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"17c679cf0522fe875f27623a8993461387247d56","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.6.tgz","fileCount":122,"integrity":"sha512-TDqMIJEozaB4+ZB0PLa+zTSEMZz9rP0BslniHcrxOIPurz9UST+moi6U7FP0diB9i4vPeR4q47BjN+MolE2t7w==","signatures":[{"sig":"MEQCIFWPRlIMUEZhbTh5fSy6PSu35AgaNBjfARD+8lsqpGd0AiBNmPZBvWD0Ijx1kuVhEs0ui5NQtngplulMD0ZulAecTw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCICOCLSqXtfWvroc2PGxwPxX8oWGlbUn/wZrHiyhsMp5pAiEAqsfmYwEr2SY46kb31Cb34o21gs9j7xmTH16/Irnygp0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1618790},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"78b97c1a1a82667a6461d636429571b65eed9847","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.6_1789865784580_0.28691372971230944","host":"s3://npm-registry-packages-npm-production"}},"1.2.7":{"name":"qwenproxy-cli","version":"1.2.7","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.7","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"7a707a302eab8dfda17431b41825a7526f08e4f1","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.7.tgz","fileCount":122,"integrity":"sha512-Nnh8lsRMH9j8A2tzicAZ2kDBmNbVcKkroUNc+PFmjdaoUTRZtCg1d7FiOEqO+CmR9M2MM5paNcteaf6jYgaLFg==","signatures":[{"sig":"MEUCIQCwpvxZ1M2P4a1kwc9N7xpM6F+in3RYKVbVsrCr2Mu+BwIgIAaTwdO36DdOZVyO3trYDoWP/FcD7UWyzEGeoEXIxpY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIGfyMzdu8PZYSxtEMauI+8eLwsXqjHapXW/Rsas114gUAiEAsA6H68tE6dIi31kN8fTA93YrQSI5XVcjARihlofyyJs=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1621767},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"39d99cabd49442dbb7cbe880a1d01731d3b2dbc4","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.7_1789924819411_0.6349410256903085","host":"s3://npm-registry-packages-npm-production"}},"1.2.8":{"name":"qwenproxy-cli","version":"1.2.8","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.8","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"cbd021548d466747bf90486e7ef801b8d11ccca8","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.8.tgz","fileCount":122,"integrity":"sha512-dK/zoIxsE/Yl2y2UzceyYrjubrU0AYYWbIF2wKP86vyKOF3g+tK/7We/XhtvPPNvpLxUanmkf06FwzCnOld/xQ==","signatures":[{"sig":"MEQCIDj29vvEiq6iMfW+1Z5nF4cZ4oNLPTmv+mJn9jMYzxU4AiAiRyPySN//MKTT0l9pAexnSxZObOXyp2yfRNt5jSr2XA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIQDXR/pPhrn/NMew/gphztqg1NWus5nZDgdunIMPHIbUeQIgcl56nOQPcNzvEv4pBxkxNhWOan/IsT8gT0q6rhitC6U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1622623},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"8d4e169ae273dd54308f2f3680e66c0acc8e231f","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.8_1789939371272_0.595627805716576","host":"s3://npm-registry-packages-npm-production"}},"1.2.9":{"name":"qwenproxy-cli","version":"1.2.9","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.9","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"d1e23c8f6f7e7f64582e6c05c405fe46b74f6466","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.9.tgz","fileCount":124,"integrity":"sha512-N6mOIDOy+ouzDSRB5bt5huRrqPUToFZnrGbVYaatrizLzUZXrGuwIr9mG4b8XwV33JTfzkeddb06gdME3p4pcg==","signatures":[{"sig":"MEUCIGxbW7bylI4zVeYD33MC4VGjnYnL+xTENyo0sVO7DS0vAiEAr+Jw7EgeBPPTJpiJUSfpwyS39zx8SFwLlty2KDagIaY=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIAr3tzXrG6/Cs9rK/YjLYXTvs04RAxk3rqD6EfFcpH1DAiA7JOlbSXp0yKnByrqZMFQtBlqTLkUUMSVAZwMNAS6d2Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1634583},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"6b46158b3e206bac731e276c6f92dda279803c37","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.9_1789957432235_0.23343565648969622","host":"s3://npm-registry-packages-npm-production"}},"1.2.10":{"name":"qwenproxy-cli","version":"1.2.10","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.2.10","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"30dbda913c592fc2ba0905ba88515d6760b2c630","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.2.10.tgz","fileCount":124,"integrity":"sha512-WVeB1sc7ZfUd8/x/vB2GMEjBSj6oF2pYXPOT58opxZWLyFk3VUxweRc9lCOczl1jAvu+uHZxW63Zd5V5OPcXyg==","signatures":[{"sig":"MEUCIG6+hTkPleJ8r+giKXkeI9qFqwr0taTCMUw/z95zf1QYAiEA7JIJzqMs7G2j//yoPHM+Ly5e6zBZAOhnYUB1hYT6GcU=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIB1WwVycW76SZqw71ccPQm+MuaiNt2TZ7qLJ3Ep0v1GxAiB2Kh0qhgfMOfnClx4pnsTCSo9mb5eeYUjWB+TthVebHA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1636209},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"ba4a47d5e8b4696dfafdf3ac6fdc2cdb59aea8eb","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.2.10_1790009628857_0.5210701111234304","host":"s3://npm-registry-packages-npm-production"}},"1.3.0":{"name":"qwenproxy-cli","version":"1.3.0","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.3.0","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"33368499520a420558d3117ef185e8227b2a5114","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.3.0.tgz","fileCount":125,"integrity":"sha512-tQWkRY69R9lYUebM2BOBFZxfzijqnYIi45kDnh5L6AtgiZkY7E3q3WiMrkh/Rq/y0nZFOrbfgP1b2npkjZyzOQ==","signatures":[{"sig":"MEQCIApDj68Rdb4MpAJSzvcgJnADQYJP9KRQ2I7z1gACdaAbAiBEjp1mv7OdbpCl8KW62o+PPcxTu27n6tDPq+/J5Ml+Yw==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHEP5CIlZbmfhf38Lx9rjyCv01JsmZ/Nlj0sMpwAZw+dAiBCFvH6BK+my6VLnELoq4rG9wmBXyh4jeVnCmhJM9pyNA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1674549},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"4d0d003d64de6844bc5a09a9aecf84b6ea0bb6fe","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.3.0_1790214099996_0.9931030706694646","host":"s3://npm-registry-packages-npm-production"}},"1.3.1":{"name":"qwenproxy-cli","version":"1.3.1","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.3.1","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"9c2eb5bbdc444b218597b1c601b1157fe6b3c463","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.3.1.tgz","fileCount":125,"integrity":"sha512-Y+3VY/LbEhMPSaYAkCvd6RohxsF7D3NGdYk9+09QKbc93PGTj6cJGX/+FfRo17yycfZoBB23fMQUAWnukXLC6g==","signatures":[{"sig":"MEUCICuPjS4eOfFVhaveRvXAF5dY3xlNVw4s5OpWziKsYFz7AiEApQlv4+abbLDp8WPVhf0LXyMOd5790bIvBto28ApurNQ=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQCwN2rDZQ+SqlcDob/FMliDCTPvkdGo/AbAl+ipnePXnwIhAIOB4PYQXnZGjaRzcNgd3BNv0nBE8F2nneSNTR2vwsZk","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1681504},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"445a0d94d5a82393da990b4e5ea496793be0fb6a","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.3.1_1790275747143_0.5286396830295605","host":"s3://npm-registry-packages-npm-production"}},"1.3.2":{"name":"qwenproxy-cli","version":"1.3.2","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.3.2","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"6ff9912a7a98155c14a40e0ea8e0ff6b62fb51ff","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.3.2.tgz","fileCount":125,"integrity":"sha512-kjAsgqlcXY0z3NbbLFE5jpERifds0fd9Hl4G+8b/xPOuaueuLnFyK1i64whNwTKziSRpiBdOCDuc6gkUzB3XMw==","signatures":[{"sig":"MEQCIEhvvMJMlNXco+5dR3tVuixy0uRANPNLotEz5AJpPpGGAiA0rqzBGZIrvd66oVlWsWq6jVEMmaG3GV43wtUR/kbK4Q==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEUCIBrSCKohU3KQZySgqX3IGWOn286QdMRZwlFfopY865ppAiEAm2ZvHIdjYe61BzeLe4ATASl6vX8rvYEMC1pwuhU17Xw=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1681395},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"1baa3bb32aa576cc377d0de4216d08ea972973c6","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.3.2_1790278901539_0.47494534391808463","host":"s3://npm-registry-packages-npm-production"}},"1.3.3":{"name":"qwenproxy-cli","version":"1.3.3","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.3.3","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"8a2d9dda4a697b653d052824779c8b6563470193","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.3.3.tgz","fileCount":125,"integrity":"sha512-w2iMPlYrEkzQzSoenxLBIOq9pIN624goOuDgEcEkvIQ2qF9s9QYbzQLHfCjXK9I5IZMvs8U94gimqytBnsUZRg==","signatures":[{"sig":"MEQCIBWiBhQU9aS1Flr2xctzmAsTkdUU/COpf/lkdi0GlD2LAiAoTD59wITen1KgmM8NocstZXpNbjW5voOSExtrPKOWuA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEQCIHSnpOBk2aB8vs/fIkvfkXEbc97Z0Rx+Wq4/riLO7VTgAiAFXNuCl1CthXYg5QeE6LWGKhhV/NAfIIgZzri64BKtwA==","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1682790},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"2688540d6a2aa6f15d3d7abdcaaf1287feb242b3","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.3.3_1790283253760_0.7504787747323887","host":"s3://npm-registry-packages-npm-production"}},"1.3.4":{"name":"qwenproxy-cli","version":"1.3.4","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.3.4","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"578adc7519dc267fc9c8c6ea804f42012d976ad3","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.3.4.tgz","fileCount":125,"integrity":"sha512-rUxup0qD28IavJePVr2DHmHLZiam/7sgJEzsEUTETN5pdjl9OhqAAs2aiB/05I/w/pni13LeqFNGv0vB8A/IlQ==","signatures":[{"sig":"MEUCIQCmYx3yckhoFUncpIUEE+QozjTF5w359MeZHEbGFeRV0AIgNQ2MCAY++wptG23cUpYNckIA0aUsTCioHiKSKHIeXD0=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDEm7liz/m3nd6luNmTplrWd2bLryUtmUTnbhcq+p6TOgIhAM2udsDECkw/Xs2wVgvlVg/lQu34qf7eAVgSOAlL+cug","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1683911},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"7a38bcb00f65a9a94062ceb19ade294b215a4e05","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.3.4_1790284052110_0.6101839357873036","host":"s3://npm-registry-packages-npm-production"}},"1.3.5":{"name":"qwenproxy-cli","version":"1.3.5","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","_id":"qwenproxy-cli@1.3.5","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"homepage":"https://github.com/johngbl/qwenproxy#readme","bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"bin":{"qpx":"bin/qwenproxy.js"},"dist":{"shasum":"874ab41e1bcdc3074824e2401323974bcdfab2c0","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.3.5.tgz","fileCount":125,"integrity":"sha512-bx97cWDXimjV9mNU+Lx+vBswistl2x10Aido9ZDbasI1PwGNpUI1u/SZgFgBLOKcT5FU+Nh5HgRoIDu7zsWICA==","signatures":[{"sig":"MEYCIQDM+P8/rKjNHbzzbFO5rxFS4n5b+Is30F8SoH4sFD1wEgIhAJ3IxCzq1v/e4s/V8xjH6b8dEOnRsTCRk0dbw5Ld6w7Z","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"sig":"MEYCIQDE8TVMZtwCFeYsItrOwyHn2U/4YzfwbrY0Uc6tRmcskwIhANt0vsGrYJK83ATkocVi3QnXCSl23MCbI8ITJLMlNLj+","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":1685829},"main":"src/index.ts","type":"module","engines":{"node":">=22"},"gitHead":"a22356c0db8692470c744c469fe1934da6848688","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"tmp":"tmp/qwenproxy-cli_1.3.5_1790288551677_0.8968465924952098","host":"s3://npm-registry-packages-npm-production"}},"1.3.6":{"_id":"qwenproxy-cli@1.3.6","bin":{"qpx":"bin/qwenproxy.js"},"bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"dist":{"shasum":"131f2c905042ee7cb4bd80d4dd335c7ec42cf215","tarball":"https://registry.npmjs.org/qwenproxy-cli/-/qwenproxy-cli-1.3.6.tgz","fileCount":125,"integrity":"sha512-Mf7/1C1wg/J3RNxujcfGD5qjh1woNCgtvJHUN6866U5MsWwNcInOQSgDfz1keeUgbTb/mh9YzcjOxQrIl5O+cw==","signatures":[{"sig":"MEYCIQDPpj/rhYOzto6DJvOX65OStSHRsBRluyTxhcywmVJ5IwIhAI+5nRHiXO2XYWLlISs8FG2Ak3trFsWWs2VO594PFTFP","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"},{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEYCIQC2UAcRdwI0OXw59osTSv2835xjGPUqHw+qTVDHGIWoTAIhAOhFy7BjwDJ5ungeUXo8bnFxiZClu1TjCCD07ANY12AM"}],"unpackedSize":1685132},"main":"src/index.ts","name":"qwenproxy-cli","type":"module","author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"engines":{"node":">=22"},"gitHead":"31932372cb5f44994ef83184b0221579d1aea047","license":"ISC","scripts":{"tui":"npx tsx src/tui/index.ts","sync":"npx tsx src/sync-clients.ts","test":"npm run test:mock && npm run test:live","clean":"npx tsx src/clean-cache.ts","login":"npx tsx src/login.ts","purge":"npx tsx src/delete-chats.ts","reset":"npx tsx src/reset-cooldowns.ts","start":"tsx src/index.ts","clean:all":"npx tsx src/clean-cache.ts --all","sync:list":"npx tsx src/sync-clients.ts list","test:live":"tsx --test src/tests/concurrentChat.test.ts src/tests/agenticStress.test.ts","test:mock":"tsx --test --test-concurrency=1 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","typecheck":"tsc --noEmit","sync:restore":"npx tsx src/sync-clients.ts restore","test:mock:fast":"tsx --test --test-concurrency=2 --env-file=.env.test src/tests/account-concurrency.test.ts src/tests/concurrency-latest-wins.test.ts src/tests/mutex.test.ts src/tests/context-truncation.test.ts src/tests/streaming-thinking-summary.test.ts src/tests/tool-call-guard.test.ts src/tests/utils-logger-full.test.ts src/tests/logger-toolcall-errors.test.ts src/tests/logger-toolcall-disabled.test.ts src/tests/utils-json-full.test.ts src/tests/utils-session-guard-full.test.ts src/tests/core-logic-full.test.ts src/tests/core-logic-accounts.test.ts src/tests/chat-validation-full.test.ts src/tests/chat-logic-full.test.ts src/tests/account-stickiness.test.ts src/tests/accounts-security.test.ts src/tests/advanced.test.ts src/tests/auth-playwright.test.ts src/tests/captcha-solver.test.ts src/tests/cache-scan-regex.test.ts src/tests/chat-cleanup.test.ts src/tests/chat-cleanup-auto.test.ts src/tests/chromium-args.test.ts src/tests/config-current.test.ts src/tests/context-meter.test.ts src/tests/concurrency.test.ts src/tests/delta.test.ts src/tests/fingerprint.test.ts src/tests/human-behavior.test.ts src/tests/index.test.ts src/tests/json-recovery.test.ts src/tests/jsonFix.test.ts src/tests/memory-cache.test.ts src/tests/model-alias.test.ts src/tests/model-registry-thinking.test.ts src/tests/models-endpoint.test.ts src/tests/multimodal.test.ts src/tests/oss-upload.test.ts src/tests/parser.test.ts src/tests/personalization-flow.test.ts src/tests/personalization-required.test.ts src/tests/retry-policy.test.ts src/tests/rotation.test.ts src/tests/server-lifecycle.test.ts src/tests/session-keeper.test.ts src/tests/session-state.test.ts src/tests/single-account-mode.test.ts src/tests/stream-retry.test.ts src/tests/tool-calls-endpoint.test.ts src/tests/tool-instructions-cache.test.ts src/tests/session-id.test.ts src/tests/watchdog-ram.test.ts src/tests/tool-recovery-t1t2.test.ts src/tests/abort-silent-t4.test.ts src/tests/t3-close-tag-escape.test.ts src/tests/t5-tool-cap.test.ts src/tests/logger-redaction.test.ts src/tests/stall-timeout-retryable.test.ts src/tests/t6-missing-quote-array-close.test.ts src/tests/watchdog-rss.test.ts src/tests/logical-thread-batch.test.ts src/tests/chat-pool-style.test.ts src/tests/queue-wait-cap.test.ts src/tests/context-eviction-order.test.ts src/tests/chat-in-progress-settle.test.ts src/tests/stream-lock-leak.test.ts src/tests/stream-semaphore.test.ts src/tests/waf-isolation.test.ts src/tests/legacy-completions.test.ts src/tests/response-format.test.ts src/tests/cors-headers.test.ts src/tests/local-auth.test.ts src/tests/safe-remote-url.test.ts src/tests/stream-lock-terminal-cancel.test.ts src/tests/parser-truncated-tool-call.test.ts src/tests/metrics-prometheus.test.ts src/tests/context-death-cleanup.test.ts src/tests/personalization-direct-fetch.test.ts src/tests/completion-headers-parity.test.ts src/tests/parallel-escape-repro.test.ts src/tests/chat-in-progress-scale-cost.test.ts src/tests/temp-chat-mode.test.ts src/tests/profile-reset.test.ts src/tests/error-classification.test.ts src/tests/quota-cooldown.test.ts src/tests/account-ready-gate.test.ts src/tests/tool-cap-notice.test.ts src/tests/interaction-flows.test.ts src/tests/headers-gate-cooldown-fallback.test.ts src/tests/unwrapped-tool-calls.test.ts src/tests/anthropic.test.ts src/tests/sync-clients.test.ts src/tests/sync-top10-clients.test.ts src/tests/cli.test.ts src/tests/paths.test.ts src/tests/tool-manifest.test.ts src/tests/tui.test.ts src/tests/tui-settings.test.ts src/tests/personalization-deadline.test.ts src/tests/update-cli.test.ts src/tests/batch-accounts.test.ts src/tests/shared-browser.test.ts src/tests/auth-credential-classification.test.ts src/tests/responses-api.test.ts src/tests/media-generation.test.ts src/tests/infer-tool-name.test.ts src/tests/native-session-headers.test.ts src/tests/omni-thinking.test.ts src/tests/protect-stuck-mutex.test.ts src/tests/stream-error-notice.test.ts src/tests/parser-deep-coverage.test.ts src/tests/tui-logs-copy.test.ts src/tests/auth-jwt-and-validation.test.ts src/tests/tui-port-and-key-modal.test.ts","benchmark:proxy":"npx tsx src/benchmarks/proxy-baseline.ts"},"version":"1.3.6","_npmUser":{"name":"johngbl","email":"jgct@proton.me"},"homepage":"https://github.com/johngbl/qwenproxy#readme","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"_npmVersion":"10.9.8","description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","directories":{},"maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"_nodeVersion":"22.23.2","dependencies":{"tsx":"^4.23.13","zod":"^4.5.4","hono":"^4.13.7","uuid":"^14.0.2","dotenv":"^17.4.2","ali-oss":"^6.23.0","patchright":"1.63.0","better-sqlite3":"^13.0.3","@hono/node-server":"^2.1.1"},"_hasShrinkwrap":false,"devDependencies":{"typescript":"^7.0.2","@types/node":"^26.4.1","@types/better-sqlite3":"^9.6.0"},"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/qwenproxy-cli_1.3.6_1790289552686_0.9219690235720186"}}},"time":{"created":"2026-09-08T15:13:37.836Z","modified":"2026-09-24T22:39:12.935Z","1.0.0":"2026-09-08T15:13:38.189Z","1.0.1":"2026-09-08T17:41:33.721Z","1.0.2":"2026-09-08T18:22:04.576Z","1.0.3":"2026-09-08T18:41:49.025Z","1.0.4":"2026-09-08T20:16:31.836Z","1.0.5":"2026-09-08T23:48:15.874Z","1.0.6":"2026-09-09T02:39:06.576Z","1.0.7":"2026-09-09T03:17:10.877Z","1.0.8":"2026-09-09T03:26:04.256Z","1.0.9":"2026-09-09T03:36:25.145Z","1.0.10":"2026-09-09T03:41:22.167Z","1.0.11":"2026-09-09T17:21:11.780Z","1.0.12":"2026-09-09T19:19:36.485Z","1.0.13":"2026-09-09T20:00:15.795Z","1.0.14":"2026-09-10T02:18:10.300Z","1.0.15":"2026-09-10T20:27:17.875Z","1.0.16":"2026-09-10T20:58:09.136Z","1.0.17":"2026-09-10T23:39:03.561Z","1.0.18":"2026-09-11T00:20:58.826Z","1.0.19":"2026-09-11T03:02:06.202Z","1.0.20":"2026-09-11T04:09:55.236Z","1.0.21":"2026-09-11T18:16:49.271Z","1.0.22":"2026-09-13T23:51:48.059Z","1.0.23":"2026-09-14T03:55:09.637Z","1.0.24":"2026-09-14T14:44:58.682Z","1.0.25":"2026-09-15T16:15:04.742Z","1.0.26":"2026-09-15T21:00:38.648Z","1.0.27":"2026-09-16T03:50:16.052Z","1.0.28":"2026-09-17T01:28:35.299Z","1.0.29":"2026-09-17T15:29:22.452Z","1.0.30":"2026-09-17T15:53:40.345Z","1.0.31":"2026-09-17T17:10:45.490Z","1.0.32":"2026-09-17T17:49:58.382Z","1.1.0":"2026-09-17T22:09:05.741Z","1.2.0":"2026-09-18T18:37:05.072Z","1.2.1":"2026-09-18T19:47:04.227Z","1.2.2":"2026-09-19T00:26:58.139Z","1.2.3":"2026-09-19T02:18:49.273Z","1.2.4":"2026-09-19T18:44:35.783Z","1.2.5":"2026-09-19T19:36:34.166Z","1.2.6":"2026-09-20T00:56:24.675Z","1.2.7":"2026-09-20T17:20:19.511Z","1.2.8":"2026-09-20T21:22:51.370Z","1.2.9":"2026-09-21T02:23:52.337Z","1.2.10":"2026-09-21T16:53:48.947Z","1.3.0":"2026-09-24T01:41:40.141Z","1.3.1":"2026-09-24T18:49:07.247Z","1.3.2":"2026-09-24T19:41:41.663Z","1.3.3":"2026-09-24T20:54:13.856Z","1.3.4":"2026-09-24T21:07:32.223Z","1.3.5":"2026-09-24T22:22:31.765Z","1.3.6":"2026-09-24T22:39:12.790Z"},"bugs":{"url":"https://github.com/johngbl/qwenproxy/issues"},"author":{"name":"johngbl","email":"147551701+johngbl@users.noreply.github.com"},"license":"ISC","homepage":"https://github.com/johngbl/qwenproxy#readme","keywords":["qwen","proxy","openai","anthropic","claude-code","codex","opencode","tui","patchright","playwright","llm"],"repository":{"url":"git+https://github.com/johngbl/qwenproxy.git","type":"git"},"description":"High-performance OpenAI & Anthropic compatible API gateway for Qwen with multi-account rotation, interactive TUI, and resilient tool calling.","maintainers":[{"name":"johngbl","email":"jgct@proton.me"}],"readme":"<p align=\"center\">\n\n  <img src=\"docs/banner.webp\" alt=\"QwenProxy\" width=\"100%\">\n\n</p>\n<p align=\"center\">\n  <a href=\"README.md\">English</a> ·\n  <b>Português</b> ·\n  <a href=\"README.es.md\">Español</a>\n</p>\n\n\nGateway e API de alta performance compatível com **OpenAI** e **Anthropic** que conecta clientes e agentes (Codex, Claude Code CLI, Grok, Cursor) ao **Qwen (`chat.qwen.ai`)** com suporte a múltiplas contas, failover inteligente, tool calling robusto, thread-native, geração de fotos e vídeos, **Responses API completa com memória persistente** e sessões persistentes. Inclui Playwright com stealth, retries para erros transitórios, variantes públicas base/`-fast`/`-thinking`, cache comprimido, registro de capabilities por modelo e observabilidade.\n\n[![CI](https://github.com/johngbl/QwenProxy/actions/workflows/ci.yml/badge.svg)](https://github.com/johngbl/QwenProxy/actions/workflows/ci.yml)\n[![npm version](https://img.shields.io/npm/v/qwenproxy-cli.svg)](https://www.npmjs.com/package/qwenproxy-cli)\n[![TypeScript](https://img.shields.io/badge/TypeScript-7.0-blue)](https://www.typescriptlang.org/)\n[![Hono](https://img.shields.io/badge/Hono-4.13-green)](https://hono.dev/)\n[![Patchright](https://img.shields.io/badge/Patchright-Stealth-blueviolet)](https://github.com/kaliiiiiiiiii/patchright)\n[![License: ISC](https://img.shields.io/badge/License-ISC-yellow.svg)](LICENSE)\n[![GitHub Sponsors](https://img.shields.io/badge/sponsor-GitHub%20Sponsors-ea4aaa?logo=githubsponsors&logoColor=white)](https://github.com/sponsors/johngbl)\n[![Ko-fi](https://img.shields.io/badge/Donate-Ko--fi-ff5e5b?logo=kofi&logoColor=white)](https://ko-fi.com/johngbl)\n\n## ❤️ Apoie o projeto\n\nSe o **QwenProxy** está sendo útil para você ou sua equipe e você deseja incentivar o desenvolvimento contínuo, novas integrações, testes ao vivo e atualizações rápidas, considere apoiar voluntariamente:\n\n<a href=\"https://github.com/sponsors/johngbl\" target=\"_blank\"><img src=\"https://img.shields.io/badge/Sponsor%20no%20GitHub-ea4aaa?style=for-the-badge&logo=githubsponsors&logoColor=white\" alt=\"GitHub Sponsors\"></a> <a href=\"https://ko-fi.com/johngbl\" target=\"_blank\"><img src=\"https://img.shields.io/badge/Apoiar%20via%20Ko--fi-ff5e5b?style=for-the-badge&logo=kofi&logoColor=white\" alt=\"Ko-fi\"></a>\n\nToda contribuição é muito bem-vinda e ajuda a cobrir custos de infraestrutura e contas de teste!\n\n---\n\n## 🚀 Principais funcionalidades\n\n- **Compatibilidade Nativa OpenAI & Anthropic** — `/v1/chat/completions`, `/v1/models`, `/v1/messages` (**Anthropic Messages API nativa** para **Claude Code CLI** e SDK oficial), `/v1/messages/count_tokens`, **OpenAI Responses API** (`/v1/responses`) e `/v1/completions` (legado).\n- **Matriz de 4 Modos de Conversação** — `thread` (padrão persistente), `thread-temp` (delta ~1KB efêmero, recomendado para agentes), `stateless-temp` (OpenAI oficial completo, efêmero) e `stateless` (OpenAI oficial completo, salvo na conta).\n- **Controle Dinâmico de Modos em Tempo Real** — Alterne o modo da API global instantaneamente pela TUI (tecla `M` na tela inicial ou `F4` no Chat) ou via endpoint `/v1/chat/mode`, sem reiniciar o proxy.\n- **Dashboard TUI Completo no Terminal (`qpx`)** — Interface visual com suporte total a mouse (hover, clique, arrasto e scroll), seleção vertical de modelos e modos, e título de terminal nativo `QwenProxy`.\n- **Importação de Contas em Lote (`B`)** — Cole dezenas de contas de uma vez (`email:senha`, formato `.env`, tab, pipe). Criptografia at-rest em transação SQLite única (<10ms) com deduplicação e contagem em tempo real.\n- **Rolagem Dinâmica de Viewport** — Navegação suave em listas de 50+ contas sem estourar o tamanho da janela nem desalinhamento de colunas.\n- **Sincronizador Automático de Clientes (`qpx sync`)** — Configuração em 1 clique para Claude Code, OpenAI Codex, OpenCode, Cline, OMP, Zed, Kilo Code e Hermes com backup e restauração.\n- **Instância Única de Chromium Ultra-Leve** — 1 único processo de navegador com aceleração WebGL ativa e isolamento seguro de `BrowserContext` (~200MB de RAM para todas as contas, economia >65%).\n- **Startup Sob Demanda & Multi-Conta** — Sobe instantaneamente com a primeira conta pronta; contas reservas permanecem em *Standby* e inicializam sem esforço sob demanda (failover ou rotação).\n- **Sincronização de Personalization Limpa** — System prompts e tools são sincronizados diretamente na personalização da conta (`/settings/personalization`), imitando 100% o cliente web real e evitando gatilhos de WAF/bot.\n- **Parser de Tool Calling com Auto-Cura** — Suporta streaming fragmentado, reparo de JSON quebrado, tags unificadas `<qpx_call>`, fuzzy matching de nomes (`readFile` → `read_file`) e auto-retry inteligente.\n- **Geração de Fotos e Vídeos** — Endpoints dedicados `/v1/images/generations` e `/v1/videos/generations` com modelos de ponta (`qwen-image-3.0-pro`, `wan3.0-video`, `wan2.7-image-pro`).\n- **Observabilidade & Métricas** — Monitoramento em tempo real em `/health`, `/metrics` (Prometheus), watchdog de memória RSS e logs unificados por turno.\n---\n\n## Arquitetura\n\n```mermaid\nflowchart TD\n    Client[\"Cliente OpenAI / Claude Code / Codex / Grok\"] -->|HTTP| Proxy[\"QwenProxy - Hono\"]\n    Proxy --> Chat[\"/v1/chat/completions\"]\n    Proxy --> Anthropic[\"/v1/messages\"]\n    Proxy --> Completions[\"/v1/completions (legado)\"]\n    Proxy --> Responses[\"/v1/responses\"]\n    Proxy --> Media[\"/v1/images | /v1/videos\"]\n    Proxy --> Models[\"/v1/models\"]\n    Proxy --> Upload[\"/v1/upload\"]\n    Anthropic --> Chat\n    Completions --> Chat\n    Responses --> Chat\n    Responses --> Effort[\"Effort normalization\"]\n    Responses --> State[(\"SQLite responses_store\")]\n    Chat --> Context[\"Thread-native context\"]\n    Chat --> Accounts[\"Account manager\"]\n    Accounts --> DB[(\"SQLite encrypted\")]\n    Accounts --> Playwright[\"Playwright + Stealth\"]\n    Playwright --> Fingerprint[\"Fingerprint / session keeper\"]\n    Chat --> Parser[\"Tool-call parser\"]\n    Chat --> Personalization[\"Settings + personalization sync\"]\n    Chat --> BrowserTransport[\"Playwright page fetch + SSE bridge\"]\n    BrowserTransport --> Qwen[\"chat.qwen.ai\"]\n    Media --> BrowserTransport\n    Upload --> OSS[\"Qwen OSS\"]\n```\n\n---\n\n### Autenticação\n\nEm loopback, a autenticação é opcional e o token legado\n`sk-qwenproxy-local` continua aceito. Se uma `API_KEY` real estiver definida,\nas rotas protegidas exigem uma das formas:\n\n- `Authorization: Bearer <API_KEY>` (OpenAI / Responses)\n- `x-api-key: <API_KEY>` (clients bearer-style)\n\nQwenProxy utiliza **Patchright com arquitetura de navegador compartilhado**. Um único processo Chromium é mantido aberto com aceleração WebGL ativa, enquanto cada conta opera em um `BrowserContext` isolado com persistência leve em `storage_state.json` (~200MB de RAM para todas as contas).\n\n```env\nPLAYWRIGHT_HEADLESS=true\nPLAYWRIGHT_BROWSER=chromium\n```\n\n**Instalação do navegador:**\nO Chromium é instalado automaticamente na primeira execução de `qpx`. Se desejar instalar manualmente:\n\n```bash\nnpx patchright install chromium\n```\nSenhas das contas são armazenadas **criptografadas** no SQLite (`data/`).\n\n### Transporte upstream e streaming\n\nNo fluxo textual principal, as chamadas ao Qwen são feitas pelo `fetch` executado dentro da página Chromium da conta. Isso mantém cookies, User-Agent, TLS, Origin e fingerprint no mesmo contexto do navegador.\n\nA resposta de completion é consumida com `ReadableStream.getReader()` e encaminhada em chunks ao Bridge. O corpo SSE não é acumulado inteiro antes de ser entregue ao cliente. Personalization usa a página `/settings/personalization`; os demais endpoints de chat usam o mesmo contexto autenticado.\n\n---\n\n## Modelos e contexto\n\nModelos e janelas de contexto são sincronizados em tempo real pelo catálogo `/api/models` do Qwen, separadamente para cada conta. O QwenProxy não mantém uma tabela de nomes/capabilities: modelos novos aparecem automaticamente em `/v1/models`, e o objeto `info.meta` recebido do upstream é preservado.\n\nExemplos do catálogo atual (podem mudar sem release do proxy):\n\n\n| Modelo                    | Contexto      | Output máximo | Thinking | Vision |\n| ------------------------- | -------------: | -------------: | :--------: | :------: |\n| `qwen3.8-max`             | 1.000.000     | 131.072       | ✅        | ✅      |\n| `qwen3.7-plus`            | 1.000.000     | 65.536        | ✅        | ✅      |\n| `qwen3.7-max`             | 1.000.000     | 65.536        | ✅        | ❌      |\n| **Fallback desconhecido** | **1.048.576** | **65.536**    | —        | —      |\n\n\nO fallback é usado somente quando a conta ainda não sincronizou o catálogo ou o endpoint upstream está indisponível. Depois da sincronização, contexto, output, thinking, modalidades, `think_skip`, `chat_type`, `mcp`, status ativo e demais metadata vêm do Qwen.\n\n> **Nota:** O endpoint `/v1/models` retorna capabilities dinâmicas (formato OpenAI).\n\n### Capabilities\n\nCada modelo tem um registro `ModelCapabilities` em `src/core/model-registry.ts`:\n\n```ts\ninterface ModelCapabilities {\n  maxOutputTokens: number;\n  maxThinkingTokens: number;\n  supportsThinking: boolean;\n  supportsVision: boolean;\n  canSkipThinking: boolean;\n  supportsDocument: boolean;\n  supportsAudio: boolean;\n  supportsVideo: boolean;\n  supportsCitations: boolean;\n  supportsCodeExecution: boolean;\n  supportsStructuredOutputs: boolean;\n  modalities: string[];\n  chatTypes: string[];\n  mcp: string[];\n  isActive: boolean;\n}\n```\n\n**Destaque `qwen3.8-max`**: modelo flagship com suporte a visão (o `qwen3.7-max` não suporta). Permite desativar thinking (`canSkipThinking: true`).\n\n### Variantes sintéticas\n\n- modelo base — modo **Auto** (o Qwen decide se raciocina), ex.: `qwen3.7-plus`\n- `-fast` — Fast com thinking desativado, ex.: `qwen3.7-plus-fast`\n- `-thinking` — Thinking forçado, ex.: `qwen3.7-plus-thinking`\n\nAs variantes usam a mesma janela de contexto e o mesmo modelo upstream do modelo base; o modo de raciocínio é selecionado pelo `feature_config` do Qwen (Auto/Fast/Thinking). O ID antigo `-no-thinking` não é publicado; é apenas normalizado internamente para `-fast` por compatibilidade legada.\n\n### `reasoning_effort` no Chat Completions\n\nO campo OpenAI `reasoning_effort` (`none`/`minimal`/`low`/`medium`/`high`/`xhigh`/`max`) também é aceito em `/v1/chat/completions`:\n\n- `low`/`none`/`minimal` → força Fast (thinking OFF) quando o modelo **não** tem sufixo\n- `medium`/`high`/`xhigh`/`max` → mantém Auto (o Qwen decide, como hoje)\n- **Precedência:** um sufixo explícito no modelo (`-fast`/`-thinking`) sempre vence o `reasoning_effort`; ausente o campo, comportamento idêntico ao anterior (no-op)\n\n---\n\n## Responses API (`/v1/responses`)\n\nImplementação completa da OpenAI Responses API com extensões para clientes agentic (Codex, Grok CLI, Cursor).\n\n### Features\n\n\n| Feature                 | Descrição                                                                                                                                                      |\n| ----------------------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| **SSE fiel**            | `event: <type>` + `data: {...}` com `sequence_number` incremental em todos os eventos                                                                          |\n| **Memória persistente** | `previous_response_id` com store SQLite durável (sobrevive restarts, TTL 7 dias)                                                                               |\n| `**last_response_id**`  | Retornado em toda response para encadeamento pelo cliente                                                                                                      |\n| **Reasoning effort**    | `reasoning.effort` aceita qualquer string; normaliza `xhigh`/`max`/`fast`/`none`/numérico para thinking ON/OFF                                                 |\n| **Multimodal**          | `input_image` → `image_url`, `input_file` → `file_url` no chat interno                                                                                         |\n| **Usage real**          | `stream_options.include_usage: true`; upstream sobrescreve estimativas; `input_tokens_details` e `output_tokens_details` **sempre** presentes (fix Grok/serde) |\n| **Reasoning lifecycle** | `reasoning_summary_part.added` → `reasoning_summary_text.delta` → `reasoning_summary_text.done` → `reasoning_summary_part.done`                                |\n| **Error envelope**      | Formato OpenAI: `{ error: { message, type, param, code } }`                                                                                                    |\n| **Store**               | `store: false` desativa persistência; GET/DELETE `/v1/responses/:id` para recuperar/remover                                                                    |\n\n\n### Reasoning effort mapping\n\n\n| Client effort                                          | Normalizado | Qwen `feature_config`                                                |\n| ------------------------------------------------------ | ----------- | -------------------------------------------------------------------- |\n| `max`, `high`, `xhigh`, `thinking`, `ultra`, `deep`    | high        | `thinking_enabled: true`, `thinking_mode: \"Thinking\"`                |\n| `medium`, `med`, `default`                             | medium      | thinking ON (mesmo que high)                                         |\n| `fast`, `none`, `low`, `off`, `minimal`, `no-thinking` | low         | `thinking_enabled: false`, `thinking_mode: \"Fast\"` e modelo `*-fast` |\n| numérico 0–33                                          | low         | thinking OFF                                                         |\n| numérico 34–66                                         | medium      | thinking ON                                                          |\n| numérico 67–100                                        | high        | thinking ON                                                          |\n\n\n> **Nota:** effort `low` sempre seleciona a variante pública `*-fast`; o catálogo pode informar `think_skip`, mas esse metadado não limita a publicação da variante.\n\n### Exemplo: Responses API com memória\n\n```bash\n# Primeira request\ncurl http://localhost:7936/v1/responses \\\n  -H \"Authorization: Bearer local\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"model\":\"qwen3.8-max\",\"input\":\"Meu nome é João\",\"stream\":true}'\n\n# Resposta inclui last_response_id: \"resp_abc123...\"\n\n# Segunda request com memória\ncurl http://localhost:7936/v1/responses \\\n  -H \"Authorization: Bearer local\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"model\":\"qwen3.8-max\",\"input\":\"Qual meu nome?\",\"previous_response_id\":\"resp_abc123...\",\"stream\":true}'\n```\n\n### Exemplo: effort com Codex/Grok\n\n```bash\ncurl http://localhost:7936/v1/responses \\\n  -H \"Authorization: Bearer local\" \\\n  -H \"Content-Type: application/json\" \\\n  -d '{\"model\":\"qwen3.7-max\",\"input\":\"hi\",\"reasoning\":{\"effort\":\"xhigh\"},\"max_output_tokens\":30}'\n```\n\n---\n## 🔄 Modos de conversação\n\nO QwenProxy oferece uma matriz completa de **4 modos de operação**, permitindo equilibrar economia de tokens, velocidade e organização do histórico:\n\n| Modo | Formato do Envio | Upstream Qwen | Persistência na Conta Web | Caso de Uso Ideal |\n| :--- | :--- | :--- | :---: | :--- |\n| **`thread-temp`** ⭐ | **Delta (~1KB)** | `chat_mode: \"local\"` | ❌ Não (Zero poluição) | **O melhor para o dia a dia.** Recomendado para Claude Code, Codex, OpenCode e Cursor. Máxima velocidade, TTFB ultra-baixo e não enche sua conta de chats descartáveis. |\n| **`stateless-temp`** | **Histórico Completo** | `chat_mode: \"local\"` | ❌ Não (Zero poluição) | **Padrão Oficial das APIs (OpenAI/Anthropic).** Envia todas as mensagens a cada turno. Ideal se você costuma editar ou reordenar mensagens antigas durante a sessão. |\n| **`thread`** *(Padrão)* | **Delta (~1KB)** | `chat_mode: \"normal\"` | ✅ Sim (Salva no site) | Ideal se você fizer questão de abrir o site `chat.qwen.ai` no celular ou navegador depois para reler o histórico da conversa. |\n| **`stateless`** | **Histórico Completo** | `chat_mode: \"normal\"` | ✅ Sim (Salva no site) | Envia o histórico completo e mantém as conversas salvas na conta do Qwen. |\n\n### Como alternar os modos:\n\n1. **Pela TUI (Em Tempo Real para todo o Proxy):**\n   - **Na tela `[1] Status`:** Pressione a tecla **`M`** (ou clique em `[ M ] Alternar Modo`) para ciclar o modo da API global na hora.\n   - **Na tela `[2] Chat`:** Pressione **`F4`** (ou clique no indicador `[ Modo ]`) para abrir o modal de seleção vertical.\n2. **Via Endpoint HTTP (Controle Remoto Dinâmico):**\n   ```bash\n   # Inspecionar modo ativo:\n   curl http://127.0.0.1:7936/v1/chat/mode\n\n   # Alterar modo globalmente em tempo real:\n   curl -X POST http://127.0.0.1:7936/v1/chat/mode \\\n     -H \"Content-Type: application/json\" \\\n     -d '{\"mode\":\"thread-temp\"}'\n   ```\n3. **Por Requisição (Header HTTP Individual):**\n   Envie o header `X-QwenProxy-Chat-Mode: thread-temp` (ou `stateless-temp`, `thread`, `stateless`) em chamadas individuais.\n4. **No arquivo `.env` (Padrão de Inicialização):**\n   ```env\n   QWEN_CHAT_MODE=thread\n   ```\n\n---\n\n## 📖 Passo a passo: Como começar do zero\n\n### 1. Instalação\n\nInstale o CLI do QwenProxy globalmente no seu sistema:\n\n```bash\n# Via npm:\nnpm install -g qwenproxy-cli\n\n# Ou via pnpm / bun:\npnpm add -g qwenproxy-cli\n# bun add -g qwenproxy-cli\n```\n\n### 2. Iniciar o Dashboard Interativo (TUI)\n\nAbra o terminal e execute:\n\n```bash\nqpx\n```\n\nO QwenProxy inicializa o servidor de alta performance em segundo plano e abre a interface interativa no terminal. O título da janela do terminal será automaticamente definido como **`QwenProxy`**.\n\n### 3. Adicionar Contas Qwen\n\n> 🌐 **Onde criar as contas?**  \n> Crie suas contas gratuitas diretamente no portal oficial do Qwen: **[https://chat.qwen.ai](https://chat.qwen.ai)**  \n> 1. Acesse **[chat.qwen.ai](https://chat.qwen.ai)** e clique no botão **Sign up** (Cadastrar-se).\n> 2. Cadastre-se com seu e-mail e defina uma senha (ou use login via Google).\n> 3. *Dica de Ouro:* Crie de 3 a 10 contas gratuitas. O QwenProxy rotaciona automaticamente entre elas quando a cota diária de uma atinge o limite, garantindo uso contínuo e sem pausas no seu fluxo de desenvolvimento!\n\nNa TUI, você pode gerenciar suas contas na aba **`[5] Contas`** de duas formas simples:\n\n- **Importação em Lote (`B`):** Pressione a tecla **`B`** (ou clique em `[ B ] Em Lote`). Cole suas contas de uma só vez (aceita formato `email:senha`, formato bruto do `.env` com vírgulas ou copiado de planilhas). O sistema calcula a contagem em tempo real, valida duplicatas e grava tudo no SQLite criptografado em milissegundos.\n- **Adição Individual (`A`):** Pressione a tecla **`A`** para digitar o e-mail e a senha de uma conta específica.\n- **Login Manual no Navegador:** Se preferir fazer login visual com captcha manual, execute no terminal: `qpx login`.\n\n### 4. Sincronizar com seus Agentes de IA\n\nPara configurar automaticamente seus editores e CLIs favoritos para usarem o QwenProxy:\n\n```bash\n# Sincroniza todos os clientes detectados na sua máquina:\nqpx sync\n\n# Ou sincronize clientes específicos:\nqpx sync claude codex opencode\n```\n\nO sincronizador detecta e configura automaticamente:\n- **Claude Code CLI** (`~/.claude/settings.json`) — Usa o protocolo nativo Anthropic (`/v1/messages`).\n- **OpenAI Codex CLI** (`~/.codex/config.toml`) — Usa o protocolo nativo Responses (`/v1/responses`).\n- **OpenCode** (`~/.config/opencode/opencode.jsonc`) — Configura provider OpenAI-compatible.\n- **Cline, OMP, Zed, Kilo Code e Hermes Agent**.\n> **Dica de Rollback:** Se quiser desfazer a configuração e restaurar os arquivos originais a qualquer momento, execute `qpx sync --restore` (ou `npm run sync:restore`).\n### 5. Pronto para Trabalhar!\n\nAgora basta abrir o seu agente favorito normalmente:\n```bash\n# Usar o Claude Code:\nclaude\n\n# Usar o Codex CLI:\ncodex\n\n# Usar o OpenCode:\nopencode\n```\nTodas as requisições fluem com máxima velocidade, failover automático entre contas e sem custos de API externa!\n\n---\n\n## 💡 Dicas de uso e produção\n\n1. **Use `thread-temp` para Programar no Dia a Dia:**  \n   Agentes de desenvolvimento geram dezenas de turnos e chamadas de ferramenta por minuto. Usar o modo `thread-temp` evita que centenas de conversas descartáveis entulhem a sua conta pessoal no `chat.qwen.ai`, mantendo o TTFB na faixa de ~0.6s a 1.2s.\n2. **Multi-Contas para Quota Diária Alta:**  \n   Adicione 2 ou mais contas no QwenProxy. As cotas do Qwen Web resetam pontualmente às **00:00 UTC**. Se uma conta atingir o limite diário, o proxy a coloca em cooldown automaticamente e faz o failover instantâneo para a próxima conta saudável.\n3. **Limpeza Periódica de Perfis (`qpx clean`):**  \n   Com o tempo de uso contínuo, o Chromium acumula cache de renderização V8/GPU. Execute `qpx clean` para purgar caches descartáveis, reduzindo o tamanho de cada perfil de ~300MB para apenas **~4.5MB**, preservando 100% os cookies e sessões ativas.\n4. **Zerar Cooldowns na TUI:**  \n   Se você quiser forçar a revalidação imediata de contas em cooldown, vá até a aba **`[1] Status`** e pressione **`Z`** (ou use `qpx reset`).\n\n## Pré-requisitos\n\n\n| Dependência | Versão mínima | Observação                           |\n| ----------- | -------------: | ------------------------------------ |\n| Node.js     | 22+           | Conforme `engines` do `package.json` |\n| npm         | 9+            | Incluído com Node                    |\n| Playwright  | -             | `npx playwright install chromium`    |\n| Docker      | opcional      | Deploy em container                  |\n\n\n---\n\n## Instalação e Execução\n\nO QwenProxy pode ser instalado globalmente, executado instantaneamente via `npx`/`bunx`, ou clonado localmente:\n\n### Opção 1: Instalação Global (Recomendado)\nInstale uma única vez para ter acesso ao comando rápido **`qpx`** de qualquer lugar do terminal:\n```bash\n# Via npm:\nnpm install -g qwenproxy-cli\n\n# Ou via pnpm:\npnpm add -g qwenproxy-cli\n\n# Ou via bun:\nbun add -g qwenproxy-cli\n```\nApós instalar, basta abrir o terminal e digitar:\n```bash\nqpx\n# ou: qwenproxy\n```\n*(Abre diretamente o dashboard interativo da TUI com o servidor e proxy integrados).*\n\n#### Comandos Rápidos do CLI (`qpx`)\n\n| Comando | Descrição |\n| :--- | :--- |\n| `qpx` *(ou `qwenproxy`)* | Abre o dashboard visual interativo da TUI com servidor proxy integrado |\n| `qpx start` *(ou `--server`)* | Inicia apenas o servidor HTTP/SSE em modo headless (sem interface gráfica) |\n| `qpx update` | Verifica e atualiza o QwenProxy automaticamente via npm/pnpm/bun |\n| `qpx login` | Abre navegador visível para autenticar novas contas interativamente |\n| `qpx sync` | Configura e sincroniza clientes (Claude Code, Codex, OpenCode, OMP) |\n| `qpx clean` | Limpa caches temporários dos perfis Chromium (~4.5MB por conta) |\n| `qpx clean:all` | Limpa caches e remove versões antigas de navegadores órfãos em disco |\n| `qpx purge` | Limpa o histórico de conversas remotas no Qwen de todas as contas |\n| `qpx reset` | Reseta cooldowns e rate limits salvos no banco de dados |\n### Opção 2: Execução Instantânea (Zero Instalação)\nExperimente ou execute pontualmente sem instalar nada permanentemente:\n```bash\nnpx qwenproxy-cli\n# ou: bunx qwenproxy-cli\n```\n\n### Opção 3: Clonando o Código (Desenvolvimento)\n```bash\ngit clone https://github.com/johngbl/qwenproxy.git\ncd qwenproxy\nnpm install\nnpm run tui      # Abre a TUI interativa\n# ou: npm start  # Inicia apenas o servidor HTTP headless\n```\n\n### Opção 4: Via Docker\n```bash\ndocker-compose up -d\n```\n---\n\n## Início rápido\n\nCrie um `.env` na raiz (use `.env.example` como base).\n\n### Exemplo mínimo\n\n```env\nQWEN_ACCOUNTS=user1@example.com:senha1;user2@example.com:senha2\nAPI_KEY=sua-chave-local\nHOST=127.0.0.1\n```\n\n> **Dica:** use `;` como separador de contas (`,` legado ainda funciona).  \n> Senhas com `:`, `#` e espaços são aceitas.\n\n### Iniciar\n\n```bash\nnpm start\n```\n\n> **Nota:** o servidor não inicia sem pelo menos uma conta configurada (via `.env`/`QWEN_ACCOUNTS`, `npm run login` ou banco de contas).\n\n1. O servidor inicia instantaneamente com a **primeira conta pronta** para responder requisições imediatamente.\n2. Com `PLAYWRIGHT_PREPARE_ALL_ON_STARTUP=false` (padrão econômico), as contas adicionais permanecem em **Standby**, com credenciais validadas no banco, sendo inicializadas apenas sob demanda (failover ou rotação), poupando RAM e CPU.\n3. Todas as contas ativas compartilham a mesma instância Chromium única, mantendo sessões isoladas via `BrowserContext` e arquivos leves de estado `storage_state.json`.\n4. O watchdog RSS do sistema monitora a pressão de memória e fecha contextos ociosos automaticamente.\nExemplo de log:\n\n```text\n✅ [Server] Account ready (1/6): us***@example.com\n🪶 [Server] Preparing 5 standby account(s) in background\n✅ [Server] Account ready (2/6): us***@example.com\n...\n\n+----------------------------------------------------------+\n|                        QwenProxy                         |\n|           OpenAI & Anthropic Compatible API              |\n|  Endpoint    http://127.0.0.1:7936/v1                    |\n|  Accounts    1/6 warm                                    |\n|  Status      ● Online                                    |\n+----------------------------------------------------------+\n```\n\n---\n\n## Testes\n\n```bash\nnpm test           # mock + live\nnpm run test:mock  # suite mock (sem browser real de contas)\nnpm run test:live  # stress/concurrency reais\nnpm run typecheck  # tipos\n```\n\n---\n\n## Variáveis de ambiente\n\n### Rede e segurança\n\n\n| Variável     | Default     | Descrição |\n| ------------ | ----------- | --------- |\n| `PORT`       | `7936`      | Porta HTTP (padrão QWEN: 7936). Configurável via .env |\n| `HOST`       | `127.0.0.1` | Bind host. Fora de loopback exige uma chave forte |\n| `API_KEY`    | vazio       | Opcional em loopback; protege as rotas com Bearer token |\n| `CORS_ORIGIN`| vazio       | Sem valor, permite apenas origens web de loopback |\n\n\n### Contas e sessão\n\n\n| Variável                            | Default        | Descrição                                                                                                                                                                                                                                                        |\n| ----------------------------------- | -------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `QWEN_ACCOUNTS`                     | vazio          | `email1:senha1;email2:senha2`                                                                                                                                                                                                                                    |\n| `DELETE_ALL_CHATS_ON_SHUTDOWN`      | `false`        | Limpa chats no shutdown                                                                                                                                                                                                                                          |\n| `QWEN_PERSONALIZATION_FROM_REQUEST` | `true`         | Envia system + tools via `/settings/personalization`                                                                                                                                                                                                             |\n| `QWEN_PERSONALIZATION_VERIFY_GET`   | `true`         | Confirma personalization com GET                                                                                                                                                                                                                                 |\n| `QWEN_MAX_PERSONALIZATION_BYTES`    | `500000`       | Teto UTF-8 para personalization por request (500KB); acomoda centenas de MCP tools com folga                                                                                                                                                                     |\n| `QWEN_CHAT_POOL_SIZE`               | `1`            | Warm pool de chats por modelo; fica desativado quando personalization por request está ativa                                                                                                                                                                     |\n| `QWEN_CHAT_POOL_MODELS`             | `qwen3.7-plus` | Modelos aquecidos no warm pool                                                                                                                                                                                                                                   |\n| `QWEN_CHAT_MODE`                    | `thread`       | Modo de conversa padrão: `thread`, `thread-temp`, `stateless` ou `stateless-temp`. Override dinâmico via TUI (`M`/`F4`), HTTP (`/v1/chat/mode`) ou header `X-QwenProxy-Chat-Mode`. |\n\n\n### Playwright / processos\n\n\n| Variável                                    | Default    | Descrição                                                                                                                                                                        |\n| ------------------------------------------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `PLAYWRIGHT_HEADLESS`                       | `true`     | Browser sem janela                                                                                                                                                               |\n| `PLAYWRIGHT_BROWSER`                        | `chromium` | `chromium` / `chrome` / `edge`                                                                                                                                                   |\n| `PLAYWRIGHT_INIT_BATCH_SIZE`                | `1`        | Contas em paralelo no background init                                                                                                                                            |\n| `PLAYWRIGHT_PREPARE_ALL_ON_STARTUP`         | `false`    | Prepara somente a primeira conta no boot (`false` = modo econômico sob demanda; `true` = aquece todas)                                                                           |\n| `PLAYWRIGHT_MAX_ACTIVE_CONTEXTS`            | `2`        | Contextos idle mantidos quentes ({principal + reserva}); streams ativos nunca são fechados; uso simultâneo abre mais. Contas em cooldown (rate limit) ficam idle e são evictadas |\n| `PLAYWRIGHT_CONTEXT_CLOSE_TIMEOUT_MS`       | `10000`    | Timeout de close antes do kill                                                                                                                                                   |\n| `PLAYWRIGHT_IDLE_CONTEXT_TTL_MS`            | `60000`    | Fecha contextos idle acima do cap (`0` desativa)                                                                                                                                 |\n| `PLAYWRIGHT_JS_HEAP_MB`                     | `256`      | Cap V8 do Chromium (`--max-old-space-size`)                                                                                                                                      |\n| `PLAYWRIGHT_LOW_MEMORY_FLAGS`               | `true`     | Flags de baixa RAM (heap cap, cache mínimo, renderer limit)                                                                                                                      |\n| `OSS_MULTIPART_THRESHOLD_MB`                | `5`        | Acima disso usa multipart OSS; abaixo `putStream`                                                                                                                                |\n| `SESSION_KEEP_ALIVE_ENABLED`                | `true`     | Simula navegações leves periódicas a cada 3min para manter sessões ativas sem desconectar                                                                                        |\n| `SESSION_KEEP_ALIVE_INTERVAL_MS`            | `180000`   | Intervalo do ciclo de keep-alive/cleanup                                                                                                                                         |\n| `SESSION_KEEP_ALIVE_IDLE_MS`                | `120000`   | Idle mínimo para keep-alive                                                                                                                                                      |\n| `SESSION_KEEP_ALIVE_NAVIGATION_INTERVAL_MS` | `480000`   | Intervalo de navegação leve                                                                                                                                                      |\n\n\n### CAPTCHA automático\n\n\n| Variável                        | Default  | Descrição                                                                              |\n| ------------------------------- | -------- | -------------------------------------------------------------------------------------- |\n| `CAPTCHA_SOLVER_ENABLED`        | `true`   | Solver Baxia/TMD ativo por padrão; use `false` somente como desligamento de emergência |\n| `CAPTCHA_SOLVER_MAX_ATTEMPTS`   | `3`      | Máximo de arrastos por challenge                                                       |\n| `CAPTCHA_SOLVER_TIMEOUT_MS`     | `15000`  | Tempo para o iframe Baxia aparecer                                                     |\n| `CAPTCHA_SOLVER_RETRY_DELAY_MS` | `1000`   | Espera entre tentativas do slider                                                      |\n| `CAPTCHA_SOLVER_SETTLE_MS`      | `2000`   | Tempo para confirmar cookies/DOM após o arrasto                                        |\n| `CAPTCHA_ACCOUNT_COOLDOWN_MS`   | `120000` | Cooldown da conta quando o desafio não pôde ser resolvido; `0` desliga                 |\n\n\n### Headers anti-bot\n\n\n| Variável          | Default            | Descrição                                                                                                              |\n| ----------------- | ------------------ | ---------------------------------------------------------------------------------------------------------------------- |\n| `USER_AGENT`      | Chrome 149 Windows | UA fallback                                                                                                            |\n| `QWEN_BX_V`       | `2.5.37`           | `bx-v` fallback; `bx-ua`/`bx-umidtoken` **não** são enviados como headers (o cliente real os carrega como cookies WAF) |\n| `QWEN_SEND_BX_UA` | `false`            | `true` restaura o comportamento legado de injetar `bx-ua`/`bx-umidtoken` capturados como headers                       |\n\n\nFingerprint estável por conta (UA, locale, viewport, hardware/WebGL) é aplicado automaticamente.\n\n### Delays e retry\n\n\n| Variável                            | Default  | Descrição                                                                                        |\n| ----------------------------------- | -------- | ------------------------------------------------------------------------------------------------ |\n| `RETRY_BASE_DELAY_MS`               | `1000`   | Base do exponential backoff                                                                      |\n| `RETRY_MAX_DELAY_MS`                | `10000`  | Cap do backoff                                                                                   |\n| `RETRY_MAX_ATTEMPTS`                | `3`      | Tentativas por request (create-stream + mid-stream)                                              |\n| `RETRY_MAX_ACCOUNT_SWITCHES`        | `2`      | Máximo de trocas de conta por request                                                            |\n| `RETRY_ON_UNKNOWN_UPSTREAM`         | `true`   | Retry/troca automática em erros upstream desconhecidos (denylist só para erros locais terminais) |\n| `RETRY_AUTO_MALFORMED_TOOLS`        | `true`   | Auto-retry quando todos os tool calls da resposta vêm malformados                                |\n| `RETRY_AUTO_MALFORMED_TOOLS_MAX`    | `2`      | Máximo de retries de tool calls malformados por resposta                                         |\n| `MAX_TOOL_CALLS_PER_TURN`           | `8`      | Teto de tool calls por turno (0 desativa); calls duplicadas idênticas também são descartadas     |\n| `CHAT_IN_PROGRESS_RETRY_DELAY_MS`   | `2000`   | Espera antes de repetir no mesmo chat após `chat_in_progress`                                    |\n| `CHAT_IN_PROGRESS_BUSY_MS`          | `4000`   | Janela busy da conta após `chat_in_progress` (absorve o settle do upstream)                      |\n| `MID_STREAM_FAILOVER_THRESHOLD`     | `2`      | Falhas de rede mid-stream nesta janela marcam a conta temporarily busy                           |\n| `MID_STREAM_FAILOVER_BUSY_MS`       | `60000`  | Duração do busy após o threshold mid-stream                                                      |\n| `ACQUIRE_DEADLINE_MS`               | `120000` | Deadline por tentativa de acquire do stream (falha visível → troca de conta)                     |\n| `ACCOUNT_QUEUE_WAIT_FOREVER_CAP_MS` | `120000` | Cap de espera na fila \"sem deadline\" de contas                                                   |\n| `ACCOUNT_LEASE_MAX_DURATION_MS`     | `600000` | Vida máxima de uma lease de conta                                                                |\n| `ACCOUNT_INIT_FAILURE_COOLDOWN_MS`  | `300000` | Cooldown após falha de init de conta                                                             |\n\n\n### Timeouts\n\n\n| Variável                   | Default  | Descrição                                                                                        |\n| -------------------------- | -------- | ------------------------------------------------------------------------------------------------ |\n| `HTTP_TIMEOUT`             | `10000`  | HTTP genérico                                                                                    |\n| `CHAT_TIMEOUT`             | `120000` | Timeout de chat                                                                                  |\n| `NAVIGATION_TIMEOUT`       | `60000`  | Navegação Playwright                                                                             |\n| `PAGE_TIMEOUT`             | `60000`  | Operações de página                                                                              |\n| `HEADERS_TIMEOUT`          | `60000`  | Captura de headers                                                                               |\n| `TIME_TO_FIRST_BYTE`       | `60000`  | Janela de primeiro byte (teto com piso de 15s no metadata)                                       |\n| `IDLE_STREAM_TIMEOUT`      | `60000`  | Stream sem dados (modelos não-reasoning)                                                         |\n| `TOTAL_REQUEST_TIMEOUT`    | `600000` | Teto de geração                                                                                  |\n| `REASONING_MODEL_TIMEOUT`  | `180000` | Silêncio mid-stream para modelos reasoning (chunks fluidos resetam; zero bytes por 3min = morto) |\n| `QWEN_FIRST_CHUNK_TIMEOUT` | `180000` | Deadline do PRIMEIRO chunk (thought = 0 bytes por 3min aborta retryável)                         |\n\n\n**Nota:** timeouts dinâmicos de payload: **modelos reasoning** usam `REASONING_MODEL_TIMEOUT` (180s default) + 30s por MB; **modelos não-reasoning** usam `IDLE_STREAM_TIMEOUT` (60s default) + 30s por MB.\n\n### Cache e contexto\n\n\n| Variável                      | Default | Descrição                                                                                                                 |\n| ----------------------------- | ------- | ------------------------------------------------------------------------------------------------------------------------- |\n| `CACHE_TTL`                   | `3600`  | TTL do cache (s)                                                                                                          |\n| `CACHE_COMPRESSION_ENABLED`   | `true`  | Compressão Brotli                                                                                                         |\n| `QWEN_MAX_PROMPT_BYTES`       | `0`     | Teto opcional local UTF-8 do prompt (`0` desativa); não é a janela de tokens. O payload total continua limitado a 50 MiB  |\n| `CONTEXT_METER_ENABLED`       | `true`  | Medição do histórico completo, delta/replay, payload Qwen e percentuais de contexto; já vem ativa por padrão              |\n| `CONTEXT_METER_WINDOW_TOKENS` | `0`     | Janela usada pelo medidor (`0` usa a janela real registrada para o modelo)                                                |\n| `CONTEXT_METER_REPORT_USAGE`  | `true`  | Reporta em `usage.prompt_tokens` o valor real `input_tokens` do Qwen quando disponível; só usa a estimativa como fallback |\n\n\nO medidor de contexto é padrão e não exige nenhuma variável no `.env`. Ele não é um tokenizer nativo do Zed/Cline nem substitui o tokenizer privado do Qwen: calcula uma estimativa local do histórico completo recebido pelo proxy, registra o prompt delta/replay efetivamente enviado e preserva `usage.context_meter` com `measurementSource=qwen` quando o Qwen devolve `input_tokens`, ou `measurementSource=local_estimate` quando não devolve. A janela do modelo é sincronizada automaticamente pelo `/api/models`, e são emitidos headers `X-QwenProxy-Context-*` e logs estruturados. As três variáveis podem ser usadas somente como overrides avançados; por padrão o valor real do Qwen é preferido e a estimativa só é fallback.\n\n### Observabilidade\n\n\n| Variável              | Default  | Descrição                                                                       |\n| --------------------- | -------- | ------------------------------------------------------------------------------- |\n| `CHAT_REQUEST_LOG`    | `false`  | Logs detalhados de request                                                      |\n| `LOG_LEVEL`           | `warn`   | Nível do logger (`debug`/`info`/`warn`/`error`); `TOOLCALL_DEBUG=1` força debug |\n| `METRICS_INTERVAL`    | `10000`  | Intervalo de métricas                                                           |\n| `WATCHDOG_INTERVAL`   | `5000`   | Intervalo do watchdog                                                           |\n| `RAM_WARNING`         | `80`     | % RSS warning (RSS / totalmem)                                                  |\n| `RAM_CRITICAL`        | `95`     | % RSS critical (RSS / totalmem)                                                 |\n| `RATE_LIMIT_REQUESTS` | `5000`   | Header estático `x-ratelimit-limit-requests` (não impõe quota)                  |\n| `RATE_LIMIT_TOKENS`   | `200000` | Header estático `x-ratelimit-limit-tokens` (não impõe quota)                    |\n\n\n---\n\n## Retries e resiliência\n\nO proxy tenta recuperar erros transitórios sem quebrar thread-native/tools:\n\n\n| Situação                                                     | Comportamento                                                                                                                                        |\n| ------------------------------------------------------------ | ---------------------------------------------------------------------------------------------------------------------------------------------------- |\n| `502` / `503` / `504`                                        | Retry com delay curto                                                                                                                                |\n| `fetch failed`, `ECONNREFUSED`, `ETIMEDOUT`, `ENOTFOUND`     | Retry de rede                                                                                                                                        |\n| Anti-bot (`FAIL_SYS_USER_VALIDATE`, captcha, WAF HTML, etc.) | Com solver Baxia habilitado: preserva a página, tenta resolver uma vez, atualiza headers e repete na mesma conta; sem solver, mantém o retry simples |\n| Quota / rate limit                                           | Cooldown categorizado (`RateLimited`, `RateLimitTemporary`, …)                                                                                       |\n| `invalid_input` (“entrada ou anexo inválido”)                | Retry forçando **novo chat** + contexto completo                                                                                                     |\n| Chat not exist / session stale                               | Força novo chat na sessão lógica                                                                                                                     |\n| Tool calls malformados (todos inválidos)                     | Reparo local do JSON; se não resolver, auto-retry na mesma conta com novo chat e correção enviada ao modelo (até `RETRY_AUTO_MALFORMED_TOOLS_MAX`)   |\n| `INVALID_FIRST_MSG` / histórico corrompido                   | Novo chat + contexto completo na **mesma conta** (a corrupção é da cadeia de parent, não da conta); o thread lógico contaminado é invalidado         |\n\n\nSettings seguras aplicadas no sync de personalization (sem reescrever tudo da conta):\n\n```json\n{\n  \"ui\": { \"autoTags\": false, \"largeTextAsFile\": false, \"splitLargeChunks\": false },\n  \"mcp_remind\": false,\n  \"memory\": { \"enable_memory\": false, \"enable_history_memory\": false },\n  \"tools_enabled\": { \"web_search\": false, \"code_interpreter\": false }\n}\n```\n\n---\n\n## Anti-bot\n\nDetecta, entre outros:\n\n- `FAIL_SYS_USER_VALIDATE`\n- `RGV587_ERROR`\n- mensagens de captcha / human verification\n\n**Fluxo:**\n\n1. Identifica o WAF/captcha sem expor o HTML do desafio ao cliente\n2. Se `CAPTCHA_SOLVER_ENABLED=true`, detecta o diálogo Baxia já visível e procura o iframe aninhado, o iframe legado ou o documento NC diretamente na página da mesma conta\n3. Se nada estiver visível — o caso normal, porque o completion roda como `fetch` em background e o WAF responde o documento de punish ao XHR em vez de renderizar algo — extrai a URL do desafio do corpo da resposta e abre essa URL na própria página da conta; sem URL utilizável, recarrega a página de chat para forçar o desafio a aparecer. Só a origem configurada em `QWEN_BASE_URL` pode ser aberta\n4. Executa o slider com limite de tentativas e volta a página para `/c/new-chat`\n5. Após sucesso, captura novamente cookies/headers e repete a requisição original na mesma conta\n6. Se o solver falhar, a conta entra em cooldown por `CAPTCHA_ACCOUNT_COOLDOWN_MS` e a requisição é encaminhada para **uma** outra conta; percorrer o pool inteiro apenas faria o WAF desafiar todas as contas\n7. Uma recuperação que falhou é ignorada por 30s na mesma conta, para o retry loop não gastar o orçamento do solver em cada tentativa\n\nCom Playwright, cada conta usa fingerprint e headers capturados do browser real.\n\nO solver Baxia/TMD fica ativo por padrão e cobre o slider NC visível em iframe ou documento direto. O proxy não salva HTML, screenshot, cookies ou tokens do challenge; desafios não suportados continuam no fluxo sanitizado de retry na mesma conta.\n\n---\n\n## Compatibilidade real das rotas\n\nO README descreve o uso operacional. Para detalhes técnicos da API (schemas, exemplos, headers), veja:\n\n- [`docs/openapi.yaml`](docs/openapi.yaml) — OpenAPI 3.1 spec com todas as rotas (Chat, Completions, Responses, Models, Upload, Health)\n\n> **Nota:** A spec OpenAPI é mantida atualizada com as mudanças recentes (auth Bearer + x-api-key, health heap detalhado).\n\n---\n\n## Endpoints\n\n### OpenAI Compatible\n\n\n| Rota                        | Método | Descrição                                 |\n| --------------------------- | ------ | ----------------------------------------- |\n| `/v1/chat/completions`      | POST   | Chat completions (stream + non-stream)    |\n| `/v1/completions`           | POST   | Completions legado (adapter sobre o chat) |\n| `/v1/chat/completions/stop` | POST   | Abortar geração                           |\n| `/v1/models`                | GET    | Listar modelos                            |\n| `/v1/models/:id`            | GET    | Modelo específico                         |\n| `/v1/responses`             | POST   | OpenAI Responses API                      |\n| `/v1/responses/:id`         | GET    | Recuperar response armazenada             |\n| `/v1/responses/:id`         | DELETE | Deletar response                          |\n\n\n### Anthropic Compatible (Claude Code CLI / Anthropic SDK)\n\n\n| Rota                        | Método | Descrição                                                     |\n| --------------------------- | ------ | ------------------------------------------------------------- |\n| `/v1/messages`              | POST   | Anthropic Messages API (stream, thinking, tools, Claude Code) |\n| `/v1/messages/count_tokens` | POST   | Contagem de tokens compatível com Anthropic                   |\n\n\n### Geração de Mídia (Fotos e Vídeos)\n\n\n| Rota                       | Método | Descrição                                                                            |\n| -------------------------- | ------ | ------------------------------------------------------------------------------------ |\n| `/v1/images/generations`   | POST   | Geração de fotos/imagens (`qwen-image-3.0-pro`, `wan2.7-image-pro`, `z-image-turbo`) |\n| `/v1/videos/generations`   | POST   | Geração de vídeos (`wan3.0-video` até 30s em 1080P, `wan2.7-t2v` com áudio)          |\n| `/v1/tasks/status/:taskId` | GET    | Consulta de status e download da tarefa de vídeo                                     |\n\n\n### Utilidades\n\n\n| Rota         | Método | Descrição                                         |\n| ------------ | ------ | ------------------------------------------------- |\n| `/health`    | GET    | Health check                                      |\n| `/metrics`   | GET    | Prometheus (protegido por API key se configurada) |\n| `/v1/upload` | POST   | Upload multimodal                                 |\n\n\n> Rotas sem o prefixo `/v1` (ex.: `/chat/completions`) são redirecionadas com 308 preservando método e corpo. Respostas incluem headers OpenAI (`openai-version`, `openai-processing-ms`, `x-ratelimit-*`).\n\n---\n\n## Exemplos de uso\n\n### OpenAI SDK (Node.js)\n\n```typescript\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  baseURL: \"http://localhost:7936/v1\",\n  apiKey: \"sua-api-key\",\n});\n\nconst completion = await client.chat.completions.create({\n  model: \"qwen3.7-plus\",\n  messages: [{ role: \"user\", content: \"Hello!\" }],\n});\n\nconsole.log(completion.choices[0].message.content);\n```\n\n### Anthropic SDK / Claude Code CLI\n\nO proxy é 100% compatível com o **Claude Code CLI** e o **Anthropic SDK**:\n\n```bash\n# Configuração para Claude Code CLI\nexport ANTHROPIC_BASE_URL=\"http://localhost:7936\"\nexport ANTHROPIC_API_KEY=\"sua-api-key\"\n\n# Iniciar Claude Code\nclaude\n```\n\n```typescript\nimport Anthropic from \"@anthropic-ai/sdk\";\n\nconst anthropic = new Anthropic({\n  baseURL: \"http://localhost:7936\",\n  apiKey: \"sua-api-key\",\n});\n\nconst message = await anthropic.messages.create({\n  model: \"claude-3-7-sonnet-20250219\", // ou \"qwen3.8-max\"\n  max_tokens: 1024,\n  messages: [{ role: \"user\", content: \"Olá!\" }],\n});\n\nconsole.log(message.content[0]);\n```\n\n### OpenAI Responses API (Codex / Grok CLI)\n\n```typescript\nimport OpenAI from \"openai\";\n\nconst client = new OpenAI({\n  baseURL: \"http://localhost:7936/v1\",\n  apiKey: \"sua-api-key\",\n});\n\n// Streaming com reasoning effort\nconst stream = await client.responses.create({\n  model: \"qwen3.8-max\",\n  input: \"Explique computação quântica\",\n  reasoning: { effort: \"high\" },\n  stream: true,\n});\n\nfor await (const event of stream) {\n  if (event.type === \"response.output_text.delta\") {\n    process.stdout.write(event.delta);\n  }\n}\n```\n\n### Geração de Imagens (`/v1/images/generations`)\n\n```bash\ncurl http://localhost:7936/v1/images/generations \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer sua-api-key\" \\\n  -d '{\n    \"model\": \"qwen-image-3.0-pro\",\n    \"prompt\": \"A futuristic cyberpunk city in the rain, ultra-detailed, cinematic lighting\",\n    \"size\": \"16:9\"\n  }'\n```\n\n### Geração de Vídeos (`/v1/videos/generations`)\n\n```bash\ncurl http://localhost:7936/v1/videos/generations \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer sua-api-key\" \\\n  -d '{\n    \"model\": \"wan3.0-video\",\n    \"prompt\": \"Drone shot flying over a misty pine forest at sunrise\",\n    \"size\": \"16:9\",\n    \"wait\": true\n  }'\n```\n\n---\n\n### cURL\n\n```bash\ncurl http://localhost:7936/v1/chat/completions \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Authorization: Bearer sua-api-key\" \\\n  -d '{\n    \"model\": \"qwen3.7-plus\",\n    \"messages\": [{\"role\": \"user\", \"content\": \"Hello!\"}],\n    \"stream\": true\n  }'\n```\n\n### Grok CLI (config)\n\n```toml\n[model.qwen38-max]\napi_backend = \"responses\"\nbase_url = \"http://127.0.0.1:7936/v1\"\n```\n\n---\n\n## Tool calling\n\nO parser suporta:\n\n- tags `<tool_call>...</tool_call>` e variantes Qwen `<tool_calls>...</tool_call(s)>` (fechamentos case-insensitive)\n- formato Hermes/XML (`<parameter name=\"...\">`)\n- JSON malformado / recovery (aspas/braces faltando)\n- JSON **duplamente escapado** em arguments\n- stream fragmentado / tool call sem open tag\n- **fuzzy match** seguro de nomes (`readFile` → `read_file`) quando há match único\n- tool names não declarados: podem ser preservados como texto literal (evita quebrar exemplos)\n- **auto-retry**: se todos os tool calls vierem malformados, o proxy tenta reparo local e, se necessário, repete a geração em novo chat informando o erro ao modelo (até `RETRY_AUTO_MALFORMED_TOOLS_MAX`)\n\nTools internas da conta Qwen (web_search, code interpreter, etc.) ficam desligadas; o proxy usa as tools do cliente.\n\n---\n\n## Modelos\n\nO proxy envia o id do modelo ao Qwen **como está**. Apenas os sufixos de raciocínio são normalizados antes de subir (via `stripThinkingSuffix`):\n\n- `qwen3.7-plus` → base (Auto: o Qwen decide)\n- `qwen3.7-plus-fast` → base + thinking OFF\n- `qwen3.7-plus-thinking` → base + thinking ON\n- `qwen3.7-plus-no-thinking` → base + thinking OFF (compat legado)\n\n---\n\n## Deploy com Docker\n\n```yaml\nservices:\n  qwenproxy:\n    build: .\n    container_name: qwenproxy\n    ports:\n      - \"${PORT:-7936}:7936\"\n    env_file:\n      - .env\n    volumes:\n      - ./data:/app/data\n    restart: unless-stopped\n    logging:\n      driver: \"json-file\"\n      options:\n        max-size: \"10m\"\n        max-file: \"3\"\n```\n\nO container ajusta permissões de `data/db` e `data/qwen_profiles` no startup.\n\n---\n\n## Estrutura do projeto\n\n```\nQwenProxy/\n├── src/\n│   ├── api/                 # Server Hono, models, errors\n│   ├── benchmarks/          # Baseline de latência do proxy\n│   ├── cache/               # Memory cache + Brotli\n│   ├── core/                # Config, accounts, DB, metrics, cooldowns, model-registry\n│   ├── routes/\n│   │   ├── chat/            # Completions, streaming, account acquire, retry-policy\n│   │   └── responses/       # OpenAI Responses API (state, streaming, adapter)\n│   ├── services/\n│   │   ├── playwright.ts    # Browser + headers + cleanup\n│   │   ├── qwen.ts          # Upstream Qwen + personalization + idle timeout\n│   │   ├── session-keeper.ts\n│   │   ├── fingerprint.ts\n│   │   └── human-behavior.ts\n│   ├── tools/               # Parser e instruções de tools\n│   ├── tests/\n│   └── utils/\n├── data/                    # SQLite, key e profiles (gitignored)\n├── Dockerfile\n├── docker-compose.yml\n└── package.json\n```\n\n---\n\n## Scripts úteis\n\n\n| Comando             | Descrição                                                               |\n| ------------------- | ----------------------------------------------------------------------- |\n| `qpx` *(ou `npm run tui`)*       | Abrir o dashboard interativo da TUI com servidor proxy integrado        |\n| `qpx start` *(ou `npm start`)*   | Iniciar apenas o servidor HTTP/SSE em modo headless (sem interface)     |\n| `qpx sync` *(ou `npm run sync`)* | Sincronizar clientes (Claude Code, Codex, OpenCode, Cline, OMP)          |\n| `qpx clean`                      | Purgar caches temporários dos perfis Chromium (~4.5MB por conta)        |\n| `qpx clean:all`                  | Purgar caches e remover navegadores órfãos antigos em disco (~4GB)       |\n| `qpx reset`                      | Zerar cooldowns de contas no banco de dados                             |\n| `qpx login`                      | Adicionar e autenticar contas visualmente no navegador                  |\n| `qpx purge`                      | Limpar chats remotos do Qwen nas contas configuradas                    |\n| `qpx update`                     | Atualizar o QwenProxy automaticamente para a versão mais recente        |\n| `npm test`                       | Executar a suíte completa de testes automatizados                       |\n| `npm run typecheck`              | Checagem estrita de tipos do TypeScript (zero erros)                    |\n---\n\n## Scripts de instalação, início e atualização\n\nA pasta `scripts/` contém atalhos para instalar, iniciar e atualizar o projeto sem digitar os comandos manualmente.\n\n\n| Script      | Windows               | Linux/macOS            | O que faz                                                                                    |\n| ----------- | --------------------- | ---------------------- | -------------------------------------------------------------------------------------------- |\n| Instalador  | `scripts\\install.bat` | `./scripts/install.sh` | Verifica Node 22+, roda `npm install`, cria `.env` a partir de `.env.example` se não existir |\n| Iniciador   | `scripts\\start.bat`   | `./scripts/start.sh`   | Verifica dependências e `.env`, inicia o servidor com `npm start`                            |\n| Atualizador | `scripts\\update.bat`  | `./scripts/update.sh`  | `git pull` (se for repositório), `npm install` e `npx playwright install chromium`           |\n\n\nNo Linux/macOS, dê permissão de execução na primeira vez:\n\n```bash\nchmod +x scripts/*.sh\n```\n\n---\n\n## Troubleshooting\n\n\n| Problema                                      | Solução                                                                                                                                                                  |\n| --------------------------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ |\n| Anti-bot / captcha                            | Solver Baxia automático por padrão (`CAPTCHA_SOLVER_ENABLED=true`); se falhar, a conta entra em cooldown (`CAPTCHA_ACCOUNT_COOLDOWN_MS`) e a request roda em outra conta |\n| Quota exceeded                                | Mais contas ou esperar cooldown                                                                                                                                          |\n| `502 Bad Gateway` / `fetch failed`            | Normalmente upstream/rede; o proxy faz retry automático                                                                                                                  |\n| `invalid_input` (anexo inválido)              | Retry com chat novo; settings `largeTextAsFile=false` ajudam                                                                                                             |\n| `context_length_exceeded`                     | O proxy bloqueou o prompt localmente antes de qualquer retry; reduza/resuma o histórico ou ajuste `QWEN_MAX_PROMPT_BYTES`                                                |\n| HTML/WAF no lugar do stream                   | O Bridge identifica o desafio e aciona o solver; se persistir, reduza o tamanho/frequência do payload e verifique a sessão                                               |\n| `Model not found`                             | Use um id do catálogo de `/v1/models` (ex.: `qwen3.8-max`)                                                                                                               |\n| Vários Chromes abertos / RAM alta             | `SESSION_KEEP_ALIVE_ENABLED=false`, idle cleanup on, `PLAYWRIGHT_INIT_BATCH_SIZE=1`, `PLAYWRIGHT_JS_HEAP_MB`, watchdog RSS fecha idle sob pressão                        |\n| Watchdog “RAM critical” falso                 | Baseado em RSS (`memory.rss.usage_percent`); confira `/health`                                                                                                           |\n| Timeout em requests grandes                   | Aumente `TOTAL_REQUEST_TIMEOUT` / `REASONING_MODEL_TIMEOUT`                                                                                                              |\n| `stream_aborted` em modelo reasoning          | Idle timeout: zero bytes por `REASONING_MODEL_TIMEOUT` (180s default) fecha o stream retryável; aumente se necessário                                                    |\n| `canSkipThinking: false`                      | O catálogo não informa `think_skip`; a variante pública `-fast` continua disponível e usa o payload Fast do Qwen                                                         |\n| Grok CLI `missing field input_tokens_details` | Corrigido: usage sempre inclui `input_tokens_details` e `output_tokens_details`                                                                                          |\n| Responses `previous_response_id` not found    | Store SQLite com TTL 7 dias; verifique se `store: false` não foi enviado                                                                                                 |\n| Playwright não inicia                         | `npx playwright install chromium`                                                                                                                                        |\n| Porta em uso                                  | Altere `PORT` no `.env`                                                                                                                                                  |\n| Sessão expirada                               | `npm run login` ou deixe o refresh automático reautenticar                                                                                                               |\n| API aberta em `0.0.0.0` sem key               | Defina `API_KEY` e/ou `HOST=127.0.0.1`                                                                                                                                   |\n\n\n---\n\n## Créditos e Agradecimentos\n\nO **QwenProxy** é desenvolvido e mantido por **johngbl**, construído sobre as fundações de código aberto originalmente criadas por **Pedro Farias** sob a licença [ISC](LICENSE).\n\n---\n## Disclaimer\n\n**Software fornecido *as is*, sem qualquer garantia (expressa ou implícita), incluindo as de comerciabilidade, adequação a um fim, funcionamento contínuo, correção de erros ou suporte.**\n\n- **Sem afiliação:** o QwenProxy não é afiliado, endossado nem patrocinado pela Alibaba/Qwen, OpenAI, Anthropic ou qualquer provedor citado. Marcas pertencem aos seus titulares.\n- **Uso por sua conta e risco:** destinado a fins educacionais e de estudo técnico. Cabe exclusivamente a você cumprir os Termos de Uso e limites do serviço upstream, usar contas e credenciais próprias e verificar a legalidade do uso na sua jurisdição.\n- **Responsabilidade integral do usuário:** você é o único responsável por bloqueio, suspensão ou encerramento de contas, desafios anti-bot, perda de dados ou histórico, custos imprevistos, indisponibilidade e por qualquer prompt, saída, arquivo ou resultado de mídia gerado.\n- **Exclusão total do mantenedor:** nos limites máximos da lei, o autor e os contribuidores **não respondem** por quaisquer danos diretos, indiretos, incidentais, especiais ou consequenciais (perda de lucros, dados, contas, quota ou receita) decorrentes do uso ou da incapacidade de uso deste software, nem por mudanças, quebras ou bloqueios do serviço upstream, que podem ocorrer a qualquer momento e sem aviso prévio.\n- **Sem prestação de serviço:** projeto voluntário, sem SLA e sem obrigação de atualizar ou corrigir.\n\n**Ao baixar, compilar ou executar este software você declara ter lido e aceito integralmente este aviso, isentando o mantenedor de qualquer obrigação, reclamação, ação, custo ou despesa (incluindo honorários advocatícios). Se não concordar, não utilize.** Acompanha e não substitui a licença [ISC](LICENSE).\n","readmeFilename":"README.pt-BR.md"}