@qwen-code/qwen-code 0.16.0-preview.0 → 0.16.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/qc-helper/docs/configuration/settings.md +39 -37
- package/bundled/qc-helper/docs/features/_meta.ts +2 -0
- package/bundled/qc-helper/docs/features/approval-mode.md +119 -2
- package/bundled/qc-helper/docs/features/auto-mode.md +263 -0
- package/bundled/qc-helper/docs/features/commands.md +11 -10
- package/bundled/qc-helper/docs/features/skills.md +3 -0
- package/bundled/qc-helper/docs/features/structured-output.md +309 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +47 -5
- package/bundled/qc-helper/docs/qwen-serve.md +119 -14
- package/bundled/review/SKILL.md +12 -3
- package/chunks/{agent-ZNQPH67I.js → agent-2JCG7FDJ.js} +9 -11
- package/chunks/{anthropicContentGenerator-ICBDZ6R2.js → anthropicContentGenerator-RQJNXJIY.js} +6 -3
- package/chunks/{askUserQuestion-WQILGUSQ.js → askUserQuestion-PQPMPNM3.js} +1 -1
- package/chunks/{ca-S3XJMT6P.js → ca-UZ7BANMN.js} +3 -3
- package/chunks/{chunk-XVHR7ATJ.js → chunk-4AOCVI6J.js} +1 -0
- package/chunks/chunk-7LMPOVYW.js +956 -0
- package/chunks/{chunk-MNPZ2WO6.js → chunk-BAZDG3QU.js} +9104 -3955
- package/chunks/{chunk-AEJ2DKLP.js → chunk-C6WMLUNB.js} +1 -1
- package/chunks/{chunk-PPHYLJSS.js → chunk-CAVZVZX6.js} +2 -2
- package/chunks/{chunk-VTPOO6GV.js → chunk-CSWBPY3P.js} +1 -1
- package/chunks/chunk-D6LBYOCX.js +19126 -0
- package/chunks/{chunk-NAID3ZWF.js → chunk-DMIMF3CG.js} +1 -1
- package/chunks/{chunk-2B7UBDY5.js → chunk-GGNTZ2NH.js} +90 -19
- package/chunks/chunk-HW5S7L73.js +379 -0
- package/chunks/{chunk-C3LHPHN2.js → chunk-JCR2WRXZ.js} +1227 -657
- package/chunks/{chunk-EDYSNFEM.js → chunk-L5E26RN6.js} +2 -2
- package/chunks/{chunk-CW44BRRA.js → chunk-MAY32HXD.js} +375 -0
- package/chunks/{chunk-7QXHXMC6.js → chunk-N6GSJHZ4.js} +96 -20
- package/chunks/{chunk-FZIUV27X.js → chunk-PVVL5Q3W.js} +31 -0
- package/chunks/{chunk-YHEAJFCI.js → chunk-USE2VQ5P.js} +3 -0
- package/chunks/{chunk-JYQUJ5DS.js → chunk-YJLGXDQJ.js} +1 -1
- package/chunks/{contextCommand-IGBCEXI4.js → contextCommand-XVRGKS3Q.js} +11 -13
- package/chunks/{cron-create-AVI3Q267.js → cron-create-IGYXQVG4.js} +27 -1
- package/chunks/{cron-delete-ZCEGDXXV.js → cron-delete-ETKIZCWT.js} +1 -1
- package/chunks/{cron-list-VN653OK5.js → cron-list-BVCUSWRU.js} +1 -1
- package/chunks/{de-MNR4SMAI.js → de-V4IE2OOZ.js} +3 -3
- package/chunks/{dist-RRYNPBOE.js → dist-4L54HRX2.js} +2 -2
- package/chunks/{dist-WP4AH3VK.js → dist-BXDUQ2QY.js} +1 -1
- package/chunks/{dist-M6GFCZ7S.js → dist-MN2PDDPR.js} +1 -1
- package/chunks/{edit-74Q4AFHQ.js → edit-3MLXHQPW.js} +22 -12
- package/chunks/{en-FIUWJSZR.js → en-HGJ2SPLM.js} +4 -3
- package/chunks/{enter-worktree-H72HXC7D.js → enter-worktree-OCA4SG6D.js} +35 -11
- package/chunks/{exit-worktree-FGIQO3S3.js → exit-worktree-6EDLXVEV.js} +35 -11
- package/chunks/{exitPlanMode-NBR2PK2D.js → exitPlanMode-H75KHRX4.js} +9 -11
- package/chunks/{fr-OFJFHLCR.js → fr-CJULI7ZX.js} +3 -3
- package/chunks/{geminiContentGenerator-33RP4WKD.js → geminiContentGenerator-E7Y6TCPU.js} +1 -1
- package/chunks/{glob-WEE3CJL6.js → glob-JFFSKARO.js} +9 -11
- package/chunks/{grep-DZKSBFZK.js → grep-7TAFR7MX.js} +9 -11
- package/chunks/{ja-V6OQ6VL7.js → ja-L7CHRQEW.js} +3 -3
- package/chunks/{ls-6F3VSP6S.js → ls-7HD6XG3V.js} +1 -1
- package/chunks/{lsp-67Y7DJN5.js → lsp-ZZSFCIWD.js} +1 -1
- package/chunks/{monitor-EDZWEZVS.js → monitor-YX2ABLXH.js} +21 -11
- package/chunks/notebook-edit-EEJEGFZR.js +756 -0
- package/chunks/{openaiContentGenerator-5NQG3W64.js → openaiContentGenerator-BSAWHGQJ.js} +9 -8
- package/chunks/{pt-ZLE6SA4A.js → pt-M6JULLEQ.js} +3 -3
- package/chunks/{qwenContentGenerator-4DPUUS6R.js → qwenContentGenerator-47XRHQXM.js} +11 -13
- package/chunks/{qwenOAuth2-JE7H47TE.js → qwenOAuth2-EEJGROP7.js} +7 -1
- package/chunks/{read-file-CQOF7BQ2.js → read-file-O53WD46Y.js} +4 -5
- package/chunks/{ripGrep-KR5LKGTI.js → ripGrep-OXNZ5Z3T.js} +9 -11
- package/chunks/{ru-A4OHIUNN.js → ru-QILM4HBC.js} +3 -3
- package/chunks/{send-message-GB4AQZNC.js → send-message-ULK4MQXJ.js} +22 -1
- package/chunks/{serve-GAD2PEST.js → serve-H2REZAYD.js} +13728 -3026
- package/chunks/{shell-E2HMCBGR.js → shell-DET66JID.js} +9 -11
- package/chunks/{skill-KDZH6UZ6.js → skill-ZIXPX3L3.js} +19 -6
- package/chunks/{src-LY4RU5AI.js → src-PN3XGQYP.js} +205 -13
- package/chunks/{syntheticOutput-HFL3DE7R.js → syntheticOutput-IS2X5OZ2.js} +2 -2
- package/chunks/{task-stop-ZQF26RXS.js → task-stop-7QSJGSSP.js} +1 -1
- package/chunks/{todoWrite-U4SC643O.js → todoWrite-7CVACFUX.js} +2 -2
- package/chunks/{tool-search-U4XQVLFU.js → tool-search-GTYLSGZ3.js} +4 -5
- package/chunks/{web-fetch-BRWZ4WSE.js → web-fetch-ENQ2I5JA.js} +5 -2
- package/chunks/{write-file-NBLRMNGB.js → write-file-NILNEZCR.js} +19 -12
- package/chunks/{zh-V32QONGV.js → zh-PWL2NKY3.js} +4 -3
- package/chunks/{zh-TW-552S24LR.js → zh-TW-S3YGWICZ.js} +4 -3
- package/cli.js +14832 -49049
- package/locales/ca.js +4 -5
- package/locales/de.js +4 -5
- package/locales/en.js +6 -5
- package/locales/fr.js +4 -5
- package/locales/ja.js +4 -5
- package/locales/pt.js +4 -5
- package/locales/ru.js +4 -5
- package/locales/zh-TW.js +5 -4
- package/locales/zh.js +5 -4
- package/package.json +2 -2
- package/chunks/chunk-3MBY4GKN.js +0 -350
- package/chunks/chunk-5P5XGNYH.js +0 -93
- package/chunks/chunk-JHMX4QTD.js +0 -2306
- package/chunks/chunk-SYCJMSIJ.js +0 -82
- package/chunks/chunk-Y6Z2O3WR.js +0 -33
package/locales/ca.js
CHANGED
|
@@ -190,8 +190,7 @@ export default {
|
|
|
190
190
|
'open full Qwen Code documentation in your browser':
|
|
191
191
|
'obrir la documentació completa de Qwen Code al navegador',
|
|
192
192
|
'Configuration not available.': 'Configuració no disponible.',
|
|
193
|
-
'
|
|
194
|
-
"Configurar la informació d'autenticació per a iniciar sessió",
|
|
193
|
+
'Connect an LLM provider': 'Connectar un proveïdor LLM',
|
|
195
194
|
'Copy the last result or code snippet to clipboard':
|
|
196
195
|
"Copiar l'últim resultat o fragment de codi al porta-retalls",
|
|
197
196
|
|
|
@@ -1114,9 +1113,9 @@ export default {
|
|
|
1114
1113
|
'👋 Welcome back! (Last updated: {{timeAgo}})':
|
|
1115
1114
|
'👋 Benvingut de nou! (Darrera actualització: {{timeAgo}})',
|
|
1116
1115
|
'🎯 Overall Goal:': '🎯 Objectiu general:',
|
|
1117
|
-
'
|
|
1118
|
-
'You must
|
|
1119
|
-
|
|
1116
|
+
'Connect a Provider': 'Connectar un proveïdor',
|
|
1117
|
+
'You must connect a provider to proceed. Press Ctrl+C again to exit.':
|
|
1118
|
+
'Cal connectar un proveïdor per continuar. Premeu Ctrl+C de nou per sortir.',
|
|
1120
1119
|
'Terms of Services and Privacy Notice':
|
|
1121
1120
|
'Termes de servei i avís de privacitat',
|
|
1122
1121
|
'Qwen OAuth': 'Qwen OAuth',
|
package/locales/de.js
CHANGED
|
@@ -169,8 +169,7 @@ export default {
|
|
|
169
169
|
'open full Qwen Code documentation in your browser':
|
|
170
170
|
'Vollständige Qwen Code Dokumentation im Browser öffnen',
|
|
171
171
|
'Configuration not available.': 'Konfiguration nicht verfügbar.',
|
|
172
|
-
'
|
|
173
|
-
'Authentifizierungsinformationen für die Anmeldung konfigurieren',
|
|
172
|
+
'Connect an LLM provider': 'LLM-Anbieter verbinden',
|
|
174
173
|
'Copy the last result or code snippet to clipboard':
|
|
175
174
|
'Letztes Ergebnis oder Codeausschnitt in die Zwischenablage kopieren',
|
|
176
175
|
|
|
@@ -1078,9 +1077,9 @@ export default {
|
|
|
1078
1077
|
'👋 Welcome back! (Last updated: {{timeAgo}})':
|
|
1079
1078
|
'👋 Willkommen zurück! (Zuletzt aktualisiert: {{timeAgo}})',
|
|
1080
1079
|
'🎯 Overall Goal:': '🎯 Gesamtziel:',
|
|
1081
|
-
'
|
|
1082
|
-
'You must
|
|
1083
|
-
'Sie müssen
|
|
1080
|
+
'Connect a Provider': 'Anbieter verbinden',
|
|
1081
|
+
'You must connect a provider to proceed. Press Ctrl+C again to exit.':
|
|
1082
|
+
'Sie müssen einen Anbieter verbinden, um fortzufahren. Drücken Sie erneut Ctrl+C zum Beenden.',
|
|
1084
1083
|
'Terms of Services and Privacy Notice':
|
|
1085
1084
|
'Nutzungsbedingungen und Datenschutzhinweis',
|
|
1086
1085
|
'Qwen OAuth': 'Qwen OAuth',
|
package/locales/en.js
CHANGED
|
@@ -84,6 +84,8 @@ export default {
|
|
|
84
84
|
'docs/keyboard-shortcuts.md': 'docs/keyboard-shortcuts.md',
|
|
85
85
|
'for help on Qwen Code': 'for help on Qwen Code',
|
|
86
86
|
'show version info': 'show version info',
|
|
87
|
+
'show paths for current session files and logs':
|
|
88
|
+
'show paths for current session files and logs',
|
|
87
89
|
'submit a bug report': 'submit a bug report',
|
|
88
90
|
Status: 'Status',
|
|
89
91
|
|
|
@@ -190,8 +192,7 @@ export default {
|
|
|
190
192
|
'open full Qwen Code documentation in your browser':
|
|
191
193
|
'open full Qwen Code documentation in your browser',
|
|
192
194
|
'Configuration not available.': 'Configuration not available.',
|
|
193
|
-
'
|
|
194
|
-
'Configure authentication information for login',
|
|
195
|
+
'Connect an LLM provider': 'Connect an LLM provider',
|
|
195
196
|
'Copy the last result or code snippet to clipboard':
|
|
196
197
|
'Copy the last result or code snippet to clipboard',
|
|
197
198
|
'Show working-tree change stats versus HEAD':
|
|
@@ -1155,9 +1156,9 @@ export default {
|
|
|
1155
1156
|
'👋 Welcome back! (Last updated: {{timeAgo}})':
|
|
1156
1157
|
'👋 Welcome back! (Last updated: {{timeAgo}})',
|
|
1157
1158
|
'🎯 Overall Goal:': '🎯 Overall Goal:',
|
|
1158
|
-
'
|
|
1159
|
-
'You must
|
|
1160
|
-
'You must
|
|
1159
|
+
'Connect a Provider': 'Connect a Provider',
|
|
1160
|
+
'You must connect a provider to proceed. Press Ctrl+C again to exit.':
|
|
1161
|
+
'You must connect a provider to proceed. Press Ctrl+C again to exit.',
|
|
1161
1162
|
'Terms of Services and Privacy Notice':
|
|
1162
1163
|
'Terms of Services and Privacy Notice',
|
|
1163
1164
|
'Qwen OAuth': 'Qwen OAuth',
|
package/locales/fr.js
CHANGED
|
@@ -190,8 +190,7 @@ export default {
|
|
|
190
190
|
'open full Qwen Code documentation in your browser':
|
|
191
191
|
'ouvrir la documentation complète de Qwen Code dans votre navigateur',
|
|
192
192
|
'Configuration not available.': 'Configuration non disponible.',
|
|
193
|
-
'
|
|
194
|
-
"Configurer les informations d'authentification pour la connexion",
|
|
193
|
+
'Connect an LLM provider': 'Se connecter à un fournisseur LLM',
|
|
195
194
|
'Copy the last result or code snippet to clipboard':
|
|
196
195
|
'Copier le dernier résultat ou extrait de code dans le presse-papiers',
|
|
197
196
|
|
|
@@ -1122,9 +1121,9 @@ export default {
|
|
|
1122
1121
|
'👋 Welcome back! (Last updated: {{timeAgo}})':
|
|
1123
1122
|
'👋 Bon retour ! (Dernière mise à jour : {{timeAgo}})',
|
|
1124
1123
|
'🎯 Overall Goal:': '🎯 Objectif global :',
|
|
1125
|
-
'
|
|
1126
|
-
'You must
|
|
1127
|
-
|
|
1124
|
+
'Connect a Provider': 'Connecter un fournisseur',
|
|
1125
|
+
'You must connect a provider to proceed. Press Ctrl+C again to exit.':
|
|
1126
|
+
'Vous devez connecter un fournisseur pour continuer. Appuyez à nouveau sur Ctrl+C pour quitter.',
|
|
1128
1127
|
'Terms of Services and Privacy Notice':
|
|
1129
1128
|
"Conditions d'utilisation et avis de confidentialité",
|
|
1130
1129
|
'Qwen OAuth': 'Qwen OAuth',
|
package/locales/ja.js
CHANGED
|
@@ -147,8 +147,7 @@ export default {
|
|
|
147
147
|
'open full Qwen Code documentation in your browser':
|
|
148
148
|
'ブラウザで Qwen Code のドキュメントを開く',
|
|
149
149
|
'Configuration not available.': '設定が利用できません',
|
|
150
|
-
'
|
|
151
|
-
'ログイン用の認証情報を設定',
|
|
150
|
+
'Connect an LLM provider': 'LLM プロバイダーに接続',
|
|
152
151
|
'Copy the last result or code snippet to clipboard':
|
|
153
152
|
'最後の結果またはコードスニペットをクリップボードにコピー',
|
|
154
153
|
|
|
@@ -830,9 +829,9 @@ export default {
|
|
|
830
829
|
'👋 Welcome back! (Last updated: {{timeAgo}})':
|
|
831
830
|
'👋 おかえりなさい!(最終更新: {{timeAgo}})',
|
|
832
831
|
'🎯 Overall Goal:': '🎯 全体目標:',
|
|
833
|
-
'
|
|
834
|
-
'You must
|
|
835
|
-
'
|
|
832
|
+
'Connect a Provider': 'プロバイダーに接続',
|
|
833
|
+
'You must connect a provider to proceed. Press Ctrl+C again to exit.':
|
|
834
|
+
'続行するにはプロバイダーに接続してください。Ctrl+C をもう一度押すと終了します',
|
|
836
835
|
'Terms of Services and Privacy Notice': '利用規約とプライバシー通知',
|
|
837
836
|
'Qwen OAuth': 'Qwen OAuth',
|
|
838
837
|
'Discontinued — switch to Coding Plan or API Key':
|
package/locales/pt.js
CHANGED
|
@@ -183,8 +183,7 @@ export default {
|
|
|
183
183
|
'open full Qwen Code documentation in your browser':
|
|
184
184
|
'abrir documentação completa do Qwen Code no seu navegador',
|
|
185
185
|
'Configuration not available.': 'Configuração não disponível.',
|
|
186
|
-
'
|
|
187
|
-
'Configurar informações de autenticação para login',
|
|
186
|
+
'Connect an LLM provider': 'Conectar a um provedor LLM',
|
|
188
187
|
'Copy the last result or code snippet to clipboard':
|
|
189
188
|
'Copiar o último resultado ou trecho de código para a área de transferência',
|
|
190
189
|
|
|
@@ -1080,9 +1079,9 @@ export default {
|
|
|
1080
1079
|
'👋 Welcome back! (Last updated: {{timeAgo}})':
|
|
1081
1080
|
'👋 Bem-vindo de volta! (Última atualização: {{timeAgo}})',
|
|
1082
1081
|
'🎯 Overall Goal:': '🎯 Objetivo Geral:',
|
|
1083
|
-
'
|
|
1084
|
-
'You must
|
|
1085
|
-
'Você deve
|
|
1082
|
+
'Connect a Provider': 'Conectar um provedor',
|
|
1083
|
+
'You must connect a provider to proceed. Press Ctrl+C again to exit.':
|
|
1084
|
+
'Você deve conectar um provedor para prosseguir. Pressione Ctrl+C novamente para sair.',
|
|
1086
1085
|
'Terms of Services and Privacy Notice':
|
|
1087
1086
|
'Termos de Serviço e Aviso de Privacidade',
|
|
1088
1087
|
'Qwen OAuth': 'Qwen OAuth',
|
package/locales/ru.js
CHANGED
|
@@ -192,8 +192,7 @@ export default {
|
|
|
192
192
|
'open full Qwen Code documentation in your browser':
|
|
193
193
|
'Открытие полной документации Qwen Code в браузере',
|
|
194
194
|
'Configuration not available.': 'Конфигурация недоступна.',
|
|
195
|
-
'
|
|
196
|
-
'Настройка аутентификационной информации для входа',
|
|
195
|
+
'Connect an LLM provider': 'Подключить провайдера LLM',
|
|
197
196
|
'Copy the last result or code snippet to clipboard':
|
|
198
197
|
'Копирование последнего результата или фрагмента кода в буфер обмена',
|
|
199
198
|
|
|
@@ -1029,9 +1028,9 @@ export default {
|
|
|
1029
1028
|
'👋 Welcome back! (Last updated: {{timeAgo}})':
|
|
1030
1029
|
'👋 С возвращением! (Последнее обновление: {{timeAgo}})',
|
|
1031
1030
|
'🎯 Overall Goal:': '🎯 Общая цель:',
|
|
1032
|
-
'
|
|
1033
|
-
'You must
|
|
1034
|
-
'
|
|
1031
|
+
'Connect a Provider': 'Подключить провайдера',
|
|
1032
|
+
'You must connect a provider to proceed. Press Ctrl+C again to exit.':
|
|
1033
|
+
'Необходимо подключить провайдера для продолжения. Нажмите Ctrl+C снова для выхода.',
|
|
1035
1034
|
'Terms of Services and Privacy Notice':
|
|
1036
1035
|
'Условия обслуживания и уведомление о конфиденциальности',
|
|
1037
1036
|
'Qwen OAuth': 'Qwen OAuth',
|
package/locales/zh-TW.js
CHANGED
|
@@ -78,6 +78,7 @@ export default {
|
|
|
78
78
|
'docs/keyboard-shortcuts.md': 'docs/keyboard-shortcuts.md',
|
|
79
79
|
'for help on Qwen Code': '獲取 Qwen Code 幫助',
|
|
80
80
|
'show version info': '顯示版本信息',
|
|
81
|
+
'show paths for current session files and logs': '顯示目前會話檔案和日誌路徑',
|
|
81
82
|
'submit a bug report': '提交錯誤報告',
|
|
82
83
|
Status: '狀態',
|
|
83
84
|
'Qwen Code': 'Qwen Code',
|
|
@@ -171,7 +172,7 @@ export default {
|
|
|
171
172
|
'open full Qwen Code documentation in your browser':
|
|
172
173
|
'在瀏覽器中打開完整的 Qwen Code 文檔',
|
|
173
174
|
'Configuration not available.': '配置不可用',
|
|
174
|
-
'
|
|
175
|
+
'Connect an LLM provider': '連接 LLM 提供商',
|
|
175
176
|
'Copy the last result or code snippet to clipboard':
|
|
176
177
|
'將最後的結果或代碼片段複製到剪貼板',
|
|
177
178
|
'Show working-tree change stats versus HEAD':
|
|
@@ -964,9 +965,9 @@ export default {
|
|
|
964
965
|
'👋 Welcome back! (Last updated: {{timeAgo}})':
|
|
965
966
|
'👋 歡迎回來!(最後更新:{{timeAgo}})',
|
|
966
967
|
'🎯 Overall Goal:': '🎯 總體目標:',
|
|
967
|
-
'
|
|
968
|
-
'You must
|
|
969
|
-
'
|
|
968
|
+
'Connect a Provider': '連接服務商',
|
|
969
|
+
'You must connect a provider to proceed. Press Ctrl+C again to exit.':
|
|
970
|
+
'必須連接一個服務商才能繼續。再次按 Ctrl+C 退出',
|
|
970
971
|
'Terms of Services and Privacy Notice': '服務條款和隱私聲明',
|
|
971
972
|
'Qwen OAuth': 'Qwen OAuth (免費)',
|
|
972
973
|
'Discontinued — switch to Coding Plan or API Key':
|
package/locales/zh.js
CHANGED
|
@@ -81,6 +81,7 @@ export default {
|
|
|
81
81
|
'docs/keyboard-shortcuts.md': 'docs/keyboard-shortcuts.md',
|
|
82
82
|
'for help on Qwen Code': '获取 Qwen Code 帮助',
|
|
83
83
|
'show version info': '显示版本信息',
|
|
84
|
+
'show paths for current session files and logs': '显示当前会话文件和日志路径',
|
|
84
85
|
'submit a bug report': '提交错误报告',
|
|
85
86
|
Status: '状态',
|
|
86
87
|
|
|
@@ -182,7 +183,7 @@ export default {
|
|
|
182
183
|
'open full Qwen Code documentation in your browser':
|
|
183
184
|
'在浏览器中打开完整的 Qwen Code 文档',
|
|
184
185
|
'Configuration not available.': '配置不可用',
|
|
185
|
-
'
|
|
186
|
+
'Connect an LLM provider': '连接 LLM 提供商',
|
|
186
187
|
'Copy the last result or code snippet to clipboard':
|
|
187
188
|
'将最后的结果或代码片段复制到剪贴板',
|
|
188
189
|
'Show working-tree change stats versus HEAD':
|
|
@@ -1096,9 +1097,9 @@ export default {
|
|
|
1096
1097
|
'👋 Welcome back! (Last updated: {{timeAgo}})':
|
|
1097
1098
|
'👋 欢迎回来!(最后更新:{{timeAgo}})',
|
|
1098
1099
|
'🎯 Overall Goal:': '🎯 总体目标:',
|
|
1099
|
-
'
|
|
1100
|
-
'You must
|
|
1101
|
-
'
|
|
1100
|
+
'Connect a Provider': '连接服务商',
|
|
1101
|
+
'You must connect a provider to proceed. Press Ctrl+C again to exit.':
|
|
1102
|
+
'必须连接一个服务商才能继续。再次按 Ctrl+C 退出',
|
|
1102
1103
|
'Terms of Services and Privacy Notice': '服务条款和隐私声明',
|
|
1103
1104
|
'Qwen OAuth': 'Qwen OAuth (免费)',
|
|
1104
1105
|
'Discontinued — switch to Coding Plan or API Key':
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@qwen-code/qwen-code",
|
|
3
|
-
"version": "0.16.
|
|
3
|
+
"version": "0.16.1",
|
|
4
4
|
"description": "Qwen Code - AI-powered coding assistant",
|
|
5
5
|
"repository": {
|
|
6
6
|
"type": "git",
|
|
@@ -22,7 +22,7 @@
|
|
|
22
22
|
"bundled"
|
|
23
23
|
],
|
|
24
24
|
"config": {
|
|
25
|
-
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.16.
|
|
25
|
+
"sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.16.1"
|
|
26
26
|
},
|
|
27
27
|
"dependencies": {},
|
|
28
28
|
"optionalDependencies": {
|
package/chunks/chunk-3MBY4GKN.js
DELETED
|
@@ -1,350 +0,0 @@
|
|
|
1
|
-
// Force strict mode and setup for ESM
|
|
2
|
-
"use strict";
|
|
3
|
-
import {
|
|
4
|
-
init_esbuild_shims
|
|
5
|
-
} from "./chunk-A4BMJM77.js";
|
|
6
|
-
import {
|
|
7
|
-
__name
|
|
8
|
-
} from "./chunk-J2S4EL5Y.js";
|
|
9
|
-
|
|
10
|
-
// packages/cli/src/serve/eventBus.ts
|
|
11
|
-
init_esbuild_shims();
|
|
12
|
-
var EVENT_SCHEMA_VERSION = 1;
|
|
13
|
-
var DEFAULT_MAX_QUEUED = 256;
|
|
14
|
-
var DEFAULT_RING_SIZE = 8e3;
|
|
15
|
-
var WARN_THRESHOLD_RATIO = 0.75;
|
|
16
|
-
var WARN_RESET_RATIO = 0.375;
|
|
17
|
-
var DEFAULT_MAX_SUBSCRIBERS = 64;
|
|
18
|
-
var SubscriberLimitExceededError = class extends Error {
|
|
19
|
-
static {
|
|
20
|
-
__name(this, "SubscriberLimitExceededError");
|
|
21
|
-
}
|
|
22
|
-
limit;
|
|
23
|
-
constructor(limit) {
|
|
24
|
-
super(`EventBus subscriber limit reached (${limit})`);
|
|
25
|
-
this.name = "SubscriberLimitExceededError";
|
|
26
|
-
this.limit = limit;
|
|
27
|
-
}
|
|
28
|
-
};
|
|
29
|
-
var EventBus = class {
|
|
30
|
-
constructor(ringSize = DEFAULT_RING_SIZE, maxSubscribers = DEFAULT_MAX_SUBSCRIBERS) {
|
|
31
|
-
this.ringSize = ringSize;
|
|
32
|
-
this.maxSubscribers = maxSubscribers;
|
|
33
|
-
}
|
|
34
|
-
static {
|
|
35
|
-
__name(this, "EventBus");
|
|
36
|
-
}
|
|
37
|
-
nextId = 1;
|
|
38
|
-
ring = [];
|
|
39
|
-
subs = /* @__PURE__ */ new Set();
|
|
40
|
-
closed = false;
|
|
41
|
-
/** Most recent id ever assigned by `publish`. 0 if no events published. */
|
|
42
|
-
get lastEventId() {
|
|
43
|
-
return this.nextId - 1;
|
|
44
|
-
}
|
|
45
|
-
/** Snapshot of the live subscriber count. */
|
|
46
|
-
get subscriberCount() {
|
|
47
|
-
return this.subs.size;
|
|
48
|
-
}
|
|
49
|
-
/**
|
|
50
|
-
* Publish an event to the bus. Returns the constructed `BridgeEvent`
|
|
51
|
-
* (with `id` + `v` assigned) on success, or `undefined` when the
|
|
52
|
-
* bus is closed.
|
|
53
|
-
*
|
|
54
|
-
* **Never throws** (BX9_p contract). Closing the bus mid-publish
|
|
55
|
-
* is the only abnormal path and is handled as a return-undefined
|
|
56
|
-
* no-op; subscriber-enqueue failures are caught internally and
|
|
57
|
-
* translated to per-subscriber eviction. Call sites can rely on
|
|
58
|
-
* this — the historical `try { publish(...) } catch {}` blocks in
|
|
59
|
-
* `httpAcpBridge.ts` are defense-in-depth, not load-bearing, and
|
|
60
|
-
* may be removed in a future cleanup pass without changing
|
|
61
|
-
* behavior. Don't add new try/catch wrappers around `publish()`.
|
|
62
|
-
*/
|
|
63
|
-
publish(input) {
|
|
64
|
-
if (this.closed) return void 0;
|
|
65
|
-
const event = {
|
|
66
|
-
id: this.nextId++,
|
|
67
|
-
v: EVENT_SCHEMA_VERSION,
|
|
68
|
-
...input
|
|
69
|
-
};
|
|
70
|
-
this.ring.push(event);
|
|
71
|
-
if (this.ring.length > this.ringSize) this.ring.shift();
|
|
72
|
-
for (const sub of Array.from(this.subs)) {
|
|
73
|
-
if (sub.evicted) continue;
|
|
74
|
-
if (!sub.queue.push(event)) {
|
|
75
|
-
sub.evicted = true;
|
|
76
|
-
const evictionFrame = {
|
|
77
|
-
v: EVENT_SCHEMA_VERSION,
|
|
78
|
-
type: "client_evicted",
|
|
79
|
-
data: { reason: "queue_overflow", droppedAfter: event.id }
|
|
80
|
-
};
|
|
81
|
-
sub.queue.forcePush(evictionFrame);
|
|
82
|
-
sub.queue.close();
|
|
83
|
-
sub.dispose();
|
|
84
|
-
continue;
|
|
85
|
-
}
|
|
86
|
-
const liveSize = sub.queue.size;
|
|
87
|
-
if (!sub.warned && liveSize >= sub.warnThreshold) {
|
|
88
|
-
sub.warned = true;
|
|
89
|
-
const warningFrame = {
|
|
90
|
-
v: EVENT_SCHEMA_VERSION,
|
|
91
|
-
type: "slow_client_warning",
|
|
92
|
-
data: {
|
|
93
|
-
queueSize: liveSize,
|
|
94
|
-
maxQueued: sub.maxQueued,
|
|
95
|
-
// `event.id` is always defined here — the just-published
|
|
96
|
-
// `event` is constructed at the top of `publish()` with
|
|
97
|
-
// `id: this.nextId++`. No `??` fallback needed.
|
|
98
|
-
lastEventId: event.id
|
|
99
|
-
}
|
|
100
|
-
};
|
|
101
|
-
sub.queue.forcePush(warningFrame);
|
|
102
|
-
} else if (sub.warned && liveSize <= sub.warnResetThreshold) {
|
|
103
|
-
sub.warned = false;
|
|
104
|
-
}
|
|
105
|
-
}
|
|
106
|
-
return event;
|
|
107
|
-
}
|
|
108
|
-
/**
|
|
109
|
-
* Note: registration is synchronous — by the time `subscribe()` returns,
|
|
110
|
-
* the subscriber is already attached and will receive any subsequent
|
|
111
|
-
* `publish()` even if the consumer hasn't started iterating yet. (A
|
|
112
|
-
* generator-style implementation would defer registration to the first
|
|
113
|
-
* `next()` call, which races with publishes that happen before the
|
|
114
|
-
* consumer's first await.)
|
|
115
|
-
*
|
|
116
|
-
* The returned iterator is NOT safe to drive from concurrent callers —
|
|
117
|
-
* two simultaneous `.next()` calls would race for the same event from
|
|
118
|
-
* the underlying queue. Daemon usage is sequential (`for await ... of`
|
|
119
|
-
* inside the SSE route), so this is safe in production. Callers that
|
|
120
|
-
* fan an iterator out to multiple consumers must serialize themselves.
|
|
121
|
-
*/
|
|
122
|
-
subscribe(opts = {}) {
|
|
123
|
-
if (this.closed) {
|
|
124
|
-
return emptyAsyncIterable();
|
|
125
|
-
}
|
|
126
|
-
if (this.subs.size >= this.maxSubscribers) {
|
|
127
|
-
throw new SubscriberLimitExceededError(this.maxSubscribers);
|
|
128
|
-
}
|
|
129
|
-
const maxQueued = opts.maxQueued ?? DEFAULT_MAX_QUEUED;
|
|
130
|
-
const queue = new BoundedAsyncQueue(maxQueued);
|
|
131
|
-
const sub = {
|
|
132
|
-
queue,
|
|
133
|
-
evicted: false,
|
|
134
|
-
maxQueued,
|
|
135
|
-
warnThreshold: WARN_THRESHOLD_RATIO * maxQueued,
|
|
136
|
-
warnResetThreshold: WARN_RESET_RATIO * maxQueued,
|
|
137
|
-
warned: false,
|
|
138
|
-
dispose: /* @__PURE__ */ __name(() => {
|
|
139
|
-
}, "dispose")
|
|
140
|
-
};
|
|
141
|
-
this.subs.add(sub);
|
|
142
|
-
if (opts.lastEventId !== void 0) {
|
|
143
|
-
for (const e of this.ring) {
|
|
144
|
-
if (e.id !== void 0 && e.id > opts.lastEventId) {
|
|
145
|
-
queue.forcePush(e);
|
|
146
|
-
}
|
|
147
|
-
}
|
|
148
|
-
}
|
|
149
|
-
let disposed = false;
|
|
150
|
-
const dispose = /* @__PURE__ */ __name(() => {
|
|
151
|
-
if (disposed) return;
|
|
152
|
-
disposed = true;
|
|
153
|
-
this.subs.delete(sub);
|
|
154
|
-
opts.signal?.removeEventListener("abort", onAbort);
|
|
155
|
-
}, "dispose");
|
|
156
|
-
sub.dispose = dispose;
|
|
157
|
-
const onAbort = /* @__PURE__ */ __name(() => {
|
|
158
|
-
queue.close({ drain: false });
|
|
159
|
-
dispose();
|
|
160
|
-
}, "onAbort");
|
|
161
|
-
if (opts.signal) {
|
|
162
|
-
if (opts.signal.aborted) {
|
|
163
|
-
onAbort();
|
|
164
|
-
} else {
|
|
165
|
-
opts.signal.addEventListener("abort", onAbort, { once: true });
|
|
166
|
-
}
|
|
167
|
-
}
|
|
168
|
-
return {
|
|
169
|
-
[Symbol.asyncIterator]: () => ({
|
|
170
|
-
async next() {
|
|
171
|
-
const r = await queue.next();
|
|
172
|
-
if (r.done) dispose();
|
|
173
|
-
return r;
|
|
174
|
-
},
|
|
175
|
-
async return() {
|
|
176
|
-
queue.close();
|
|
177
|
-
dispose();
|
|
178
|
-
return { value: void 0, done: true };
|
|
179
|
-
}
|
|
180
|
-
})
|
|
181
|
-
};
|
|
182
|
-
}
|
|
183
|
-
/** Close all live subscribers and prevent further `publish`/`subscribe`. */
|
|
184
|
-
close() {
|
|
185
|
-
if (this.closed) return;
|
|
186
|
-
this.closed = true;
|
|
187
|
-
for (const sub of this.subs) sub.queue.close();
|
|
188
|
-
this.subs.clear();
|
|
189
|
-
}
|
|
190
|
-
};
|
|
191
|
-
function emptyAsyncIterable() {
|
|
192
|
-
return {
|
|
193
|
-
[Symbol.asyncIterator]: () => ({
|
|
194
|
-
async next() {
|
|
195
|
-
return { value: void 0, done: true };
|
|
196
|
-
}
|
|
197
|
-
})
|
|
198
|
-
};
|
|
199
|
-
}
|
|
200
|
-
__name(emptyAsyncIterable, "emptyAsyncIterable");
|
|
201
|
-
var BoundedAsyncQueue = class {
|
|
202
|
-
constructor(maxSize) {
|
|
203
|
-
this.maxSize = maxSize;
|
|
204
|
-
}
|
|
205
|
-
static {
|
|
206
|
-
__name(this, "BoundedAsyncQueue");
|
|
207
|
-
}
|
|
208
|
-
buf = [];
|
|
209
|
-
resolvers = [];
|
|
210
|
-
closed = false;
|
|
211
|
-
/**
|
|
212
|
-
* O(1) snapshot of how many LIVE (non-forced) entries are in `buf`.
|
|
213
|
-
* Maintained directly by `push()`/`next()`: any time a forced entry
|
|
214
|
-
* is added or removed `liveCount` is untouched; any time a live entry
|
|
215
|
-
* is added or removed `liveCount` moves with it. Replaces the
|
|
216
|
-
* position-dependent `forcedInBuf` heuristic — `liveCount` is correct
|
|
217
|
-
* no matter where in the queue the forced entries are.
|
|
218
|
-
*/
|
|
219
|
-
liveCount = 0;
|
|
220
|
-
/**
|
|
221
|
-
* Number of LIVE (non-force-pushed) items currently waiting in the
|
|
222
|
-
* buffer. Backpressure decisions in `EventBus.publish()` (the
|
|
223
|
-
* `slow_client_warning` threshold) read this value.
|
|
224
|
-
*/
|
|
225
|
-
get size() {
|
|
226
|
-
return this.liveCount;
|
|
227
|
-
}
|
|
228
|
-
/** Returns true if accepted, false if dropped due to overflow. */
|
|
229
|
-
push(value) {
|
|
230
|
-
if (this.closed) return false;
|
|
231
|
-
const r = this.resolvers.shift();
|
|
232
|
-
if (r) {
|
|
233
|
-
r({ value, done: false });
|
|
234
|
-
return true;
|
|
235
|
-
}
|
|
236
|
-
if (this.liveCount >= this.maxSize) return false;
|
|
237
|
-
this.buf.push({ value, forced: false });
|
|
238
|
-
this.liveCount += 1;
|
|
239
|
-
return true;
|
|
240
|
-
}
|
|
241
|
-
/** Bypasses the size cap. Used for replay frames, eviction terminal,
|
|
242
|
-
* and slow-client warnings. */
|
|
243
|
-
forcePush(value) {
|
|
244
|
-
if (this.closed) return;
|
|
245
|
-
const r = this.resolvers.shift();
|
|
246
|
-
if (r) {
|
|
247
|
-
r({ value, done: false });
|
|
248
|
-
return;
|
|
249
|
-
}
|
|
250
|
-
this.buf.push({ value, forced: true });
|
|
251
|
-
}
|
|
252
|
-
/**
|
|
253
|
-
* Mark the queue closed. By default `next()` continues to drain
|
|
254
|
-
* any items already in `buf` before returning `done: true` —
|
|
255
|
-
* that's what the eviction path relies on (the synthetic
|
|
256
|
-
* `client_evicted` frame is force-pushed THEN close is called,
|
|
257
|
-
* and we want the consumer to see the terminal frame before the
|
|
258
|
-
* iterator unwinds).
|
|
259
|
-
*
|
|
260
|
-
* Pass `{ drain: false }` to drop buffered items immediately
|
|
261
|
-
* (the AbortSignal-driven unsubscribe path uses this — the
|
|
262
|
-
* subscribe docstring says abort should close the iterator
|
|
263
|
-
* promptly, but draining hundreds of queued events first
|
|
264
|
-
* contradicts that and adds post-abort work to the SSE route).
|
|
265
|
-
*/
|
|
266
|
-
close(opts = {}) {
|
|
267
|
-
if (this.closed) return;
|
|
268
|
-
this.closed = true;
|
|
269
|
-
if (opts.drain === false) {
|
|
270
|
-
this.buf.length = 0;
|
|
271
|
-
this.liveCount = 0;
|
|
272
|
-
}
|
|
273
|
-
while (this.resolvers.length > 0) {
|
|
274
|
-
this.resolvers.shift()({
|
|
275
|
-
value: void 0,
|
|
276
|
-
done: true
|
|
277
|
-
});
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
next() {
|
|
281
|
-
if (this.buf.length > 0) {
|
|
282
|
-
const entry = this.buf.shift();
|
|
283
|
-
if (!entry.forced) this.liveCount -= 1;
|
|
284
|
-
return Promise.resolve({ value: entry.value, done: false });
|
|
285
|
-
}
|
|
286
|
-
if (this.closed) {
|
|
287
|
-
return Promise.resolve({
|
|
288
|
-
value: void 0,
|
|
289
|
-
done: true
|
|
290
|
-
});
|
|
291
|
-
}
|
|
292
|
-
return new Promise((resolve) => this.resolvers.push(resolve));
|
|
293
|
-
}
|
|
294
|
-
};
|
|
295
|
-
|
|
296
|
-
// packages/cli/src/serve/status.ts
|
|
297
|
-
init_esbuild_shims();
|
|
298
|
-
var STATUS_SCHEMA_VERSION = 1;
|
|
299
|
-
var SERVE_STATUS_EXT_METHODS = {
|
|
300
|
-
workspaceMcp: "qwen/status/workspace/mcp",
|
|
301
|
-
workspaceSkills: "qwen/status/workspace/skills",
|
|
302
|
-
workspaceProviders: "qwen/status/workspace/providers",
|
|
303
|
-
sessionContext: "qwen/status/session/context",
|
|
304
|
-
sessionSupportedCommands: "qwen/status/session/supported_commands"
|
|
305
|
-
};
|
|
306
|
-
function createIdleWorkspaceMcpStatus(workspaceCwd) {
|
|
307
|
-
return {
|
|
308
|
-
v: STATUS_SCHEMA_VERSION,
|
|
309
|
-
workspaceCwd,
|
|
310
|
-
initialized: false,
|
|
311
|
-
discoveryState: "not_started",
|
|
312
|
-
servers: []
|
|
313
|
-
};
|
|
314
|
-
}
|
|
315
|
-
__name(createIdleWorkspaceMcpStatus, "createIdleWorkspaceMcpStatus");
|
|
316
|
-
function createIdleWorkspaceSkillsStatus(workspaceCwd) {
|
|
317
|
-
return {
|
|
318
|
-
v: STATUS_SCHEMA_VERSION,
|
|
319
|
-
workspaceCwd,
|
|
320
|
-
initialized: false,
|
|
321
|
-
skills: []
|
|
322
|
-
};
|
|
323
|
-
}
|
|
324
|
-
__name(createIdleWorkspaceSkillsStatus, "createIdleWorkspaceSkillsStatus");
|
|
325
|
-
function createIdleWorkspaceProvidersStatus(workspaceCwd) {
|
|
326
|
-
return {
|
|
327
|
-
v: STATUS_SCHEMA_VERSION,
|
|
328
|
-
workspaceCwd,
|
|
329
|
-
initialized: false,
|
|
330
|
-
providers: []
|
|
331
|
-
};
|
|
332
|
-
}
|
|
333
|
-
__name(createIdleWorkspaceProvidersStatus, "createIdleWorkspaceProvidersStatus");
|
|
334
|
-
|
|
335
|
-
export {
|
|
336
|
-
EVENT_SCHEMA_VERSION,
|
|
337
|
-
DEFAULT_RING_SIZE,
|
|
338
|
-
SubscriberLimitExceededError,
|
|
339
|
-
EventBus,
|
|
340
|
-
STATUS_SCHEMA_VERSION,
|
|
341
|
-
SERVE_STATUS_EXT_METHODS,
|
|
342
|
-
createIdleWorkspaceMcpStatus,
|
|
343
|
-
createIdleWorkspaceSkillsStatus,
|
|
344
|
-
createIdleWorkspaceProvidersStatus
|
|
345
|
-
};
|
|
346
|
-
/**
|
|
347
|
-
* @license
|
|
348
|
-
* Copyright 2025 Qwen Team
|
|
349
|
-
* SPDX-License-Identifier: Apache-2.0
|
|
350
|
-
*/
|