@qwen-code/qwen-code 0.6.0-preview.3 → 0.6.1-nightly.20260107.2c285394

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/cli.js CHANGED
@@ -154435,7 +154435,7 @@ __export(geminiContentGenerator_exports, {
154435
154435
  createGeminiContentGenerator: () => createGeminiContentGenerator
154436
154436
  });
154437
154437
  function createGeminiContentGenerator(config2, gcConfig) {
154438
- const version2 = "0.6.0-preview.3";
154438
+ const version2 = "0.6.1-nightly.20260107.2c285394";
154439
154439
  const userAgent2 = config2.userAgent || `QwenCode/${version2} (${process.platform}; ${process.arch})`;
154440
154440
  const baseHeaders = {
154441
154441
  "User-Agent": userAgent2
@@ -169285,10 +169285,10 @@ var init_terminalSerializer = __esm({
169285
169285
  });
169286
169286
 
169287
169287
  // packages/core/dist/src/services/shellExecutionService.js
169288
- import { spawn as cpSpawn } from "node:child_process";
169288
+ import { spawn as cpSpawn, spawnSync as spawnSync2 } from "node:child_process";
169289
169289
  import { TextDecoder as TextDecoder2 } from "node:util";
169290
169290
  import os12 from "node:os";
169291
- var import_headless, Terminal, SIGKILL_TIMEOUT_MS, getFullBufferText, ShellExecutionService;
169291
+ var import_headless, Terminal, SIGKILL_TIMEOUT_MS, getFullBufferText, windowsStrategy, posixStrategy, getCleanupStrategy, ShellExecutionService;
169292
169292
  var init_shellExecutionService = __esm({
169293
169293
  "packages/core/dist/src/services/shellExecutionService.js"() {
169294
169294
  "use strict";
@@ -169311,11 +169311,58 @@ var init_shellExecutionService = __esm({
169311
169311
  }
169312
169312
  return lines.join("\n").trimEnd();
169313
169313
  }, "getFullBufferText");
169314
- ShellExecutionService = class {
169314
+ windowsStrategy = {
169315
+ killPty: /* @__PURE__ */ __name((_pid, pty) => {
169316
+ pty.ptyProcess.kill();
169317
+ }, "killPty"),
169318
+ killChildProcesses: /* @__PURE__ */ __name((pids) => {
169319
+ if (pids.size > 0) {
169320
+ try {
169321
+ const args = ["/f", "/t"];
169322
+ for (const pid of pids) {
169323
+ args.push("/pid", pid.toString());
169324
+ }
169325
+ spawnSync2("taskkill", args);
169326
+ } catch {
169327
+ }
169328
+ }
169329
+ }, "killChildProcesses")
169330
+ };
169331
+ posixStrategy = {
169332
+ killPty: /* @__PURE__ */ __name((pid, _pty) => {
169333
+ process.kill(-pid, "SIGKILL");
169334
+ }, "killPty"),
169335
+ killChildProcesses: /* @__PURE__ */ __name((pids) => {
169336
+ for (const pid of pids) {
169337
+ try {
169338
+ process.kill(-pid, "SIGKILL");
169339
+ } catch {
169340
+ }
169341
+ }
169342
+ }, "killChildProcesses")
169343
+ };
169344
+ getCleanupStrategy = /* @__PURE__ */ __name(() => os12.platform() === "win32" ? windowsStrategy : posixStrategy, "getCleanupStrategy");
169345
+ ShellExecutionService = class _ShellExecutionService {
169315
169346
  static {
169316
169347
  __name(this, "ShellExecutionService");
169317
169348
  }
169318
169349
  static activePtys = /* @__PURE__ */ new Map();
169350
+ static activeChildProcesses = /* @__PURE__ */ new Set();
169351
+ static cleanup() {
169352
+ const strategy = getCleanupStrategy();
169353
+ for (const [pid, pty] of this.activePtys) {
169354
+ try {
169355
+ strategy.killPty(pid, pty);
169356
+ } catch {
169357
+ }
169358
+ }
169359
+ strategy.killChildProcesses(this.activeChildProcesses);
169360
+ }
169361
+ static {
169362
+ process.on("exit", () => {
169363
+ _ShellExecutionService.cleanup();
169364
+ });
169365
+ }
169319
169366
  /**
169320
169367
  * Executes a shell command using `node-pty`, capturing all output and lifecycle events.
169321
169368
  *
@@ -169346,7 +169393,7 @@ var init_shellExecutionService = __esm({
169346
169393
  stdio: ["ignore", "pipe", "pipe"],
169347
169394
  windowsVerbatimArguments: true,
169348
169395
  shell: isWindows8 ? true : "bash",
169349
- detached: !isWindows8,
169396
+ detached: true,
169350
169397
  env: {
169351
169398
  ...process.env,
169352
169399
  QWEN_CODE: "1",
@@ -169442,9 +169489,12 @@ var init_shellExecutionService = __esm({
169442
169489
  }
169443
169490
  }, "abortHandler");
169444
169491
  abortSignal.addEventListener("abort", abortHandler, { once: true });
169492
+ if (child.pid) {
169493
+ this.activeChildProcesses.add(child.pid);
169494
+ }
169445
169495
  child.on("exit", (code2, signal) => {
169446
169496
  if (child.pid) {
169447
- this.activePtys.delete(child.pid);
169497
+ this.activeChildProcesses.delete(child.pid);
169448
169498
  }
169449
169499
  handleExit(code2, signal);
169450
169500
  });
@@ -169468,7 +169518,7 @@ var init_shellExecutionService = __esm({
169468
169518
  }
169469
169519
  __name(cleanup, "cleanup");
169470
169520
  });
169471
- return { pid: void 0, result };
169521
+ return { pid: child.pid, result };
169472
169522
  } catch (e4) {
169473
169523
  const error2 = e4;
169474
169524
  return {
@@ -170747,9 +170797,12 @@ var init_shell = __esm({
170747
170797
  const processedCommand = this.addCoAuthorToGitCommit(strippedCommand);
170748
170798
  const shouldRunInBackground = this.params.is_background;
170749
170799
  let finalCommand = processedCommand;
170750
- if (shouldRunInBackground && !finalCommand.trim().endsWith("&")) {
170800
+ if (!isWindows8 && shouldRunInBackground && !finalCommand.trim().endsWith("&")) {
170751
170801
  finalCommand = finalCommand.trim() + " &";
170752
170802
  }
170803
+ if (isWindows8 && shouldRunInBackground) {
170804
+ finalCommand = finalCommand.trim().replace(/&+$/, "").trim();
170805
+ }
170753
170806
  const commandToExecute = isWindows8 ? finalCommand : (() => {
170754
170807
  let command2 = finalCommand.trim();
170755
170808
  if (!command2.endsWith("&"))
@@ -170761,9 +170814,6 @@ var init_shell = __esm({
170761
170814
  let lastUpdateTime = Date.now();
170762
170815
  let isBinaryStream = false;
170763
170816
  const { result: resultPromise, pid } = await ShellExecutionService.execute(commandToExecute, cwd7, (event) => {
170764
- if (!updateOutput2) {
170765
- return;
170766
- }
170767
170817
  let shouldUpdate = false;
170768
170818
  switch (event.type) {
170769
170819
  case "data":
@@ -170788,7 +170838,7 @@ var init_shell = __esm({
170788
170838
  throw new Error("An unhandled ShellOutputEvent was found.");
170789
170839
  }
170790
170840
  }
170791
- if (shouldUpdate) {
170841
+ if (shouldUpdate && updateOutput2) {
170792
170842
  updateOutput2(typeof cumulativeOutput === "string" ? cumulativeOutput : { ansiOutput: cumulativeOutput });
170793
170843
  lastUpdateTime = Date.now();
170794
170844
  }
@@ -170796,6 +170846,14 @@ var init_shell = __esm({
170796
170846
  if (pid && setPidCallback) {
170797
170847
  setPidCallback(pid);
170798
170848
  }
170849
+ if (shouldRunInBackground) {
170850
+ const pidMsg = pid ? ` PID: ${pid}` : "";
170851
+ const killHint = isWindows8 ? " (Use taskkill /F /T /PID <pid> to stop)" : " (Use kill <pid> to stop)";
170852
+ return {
170853
+ llmContent: `Background command started.${pidMsg}${killHint}`,
170854
+ returnDisplay: `Background command started.${pidMsg}${killHint}`
170855
+ };
170856
+ }
170799
170857
  const result = await resultPromise;
170800
170858
  const backgroundPIDs = [];
170801
170859
  if (os14.platform() !== "win32") {
@@ -202413,16 +202471,16 @@ var require_cross_spawn = __commonJS({
202413
202471
  return spawned;
202414
202472
  }
202415
202473
  __name(spawn11, "spawn");
202416
- function spawnSync5(command2, args, options2) {
202474
+ function spawnSync6(command2, args, options2) {
202417
202475
  const parsed = parse13(command2, args, options2);
202418
202476
  const result = cp2.spawnSync(parsed.command, parsed.args, parsed.options);
202419
202477
  result.error = result.error || enoent.verifyENOENTSync(result.status, parsed);
202420
202478
  return result;
202421
202479
  }
202422
- __name(spawnSync5, "spawnSync");
202480
+ __name(spawnSync6, "spawnSync");
202423
202481
  module2.exports = spawn11;
202424
202482
  module2.exports.spawn = spawn11;
202425
- module2.exports.sync = spawnSync5;
202483
+ module2.exports.sync = spawnSync6;
202426
202484
  module2.exports._parse = parse13;
202427
202485
  module2.exports._enoent = enoent;
202428
202486
  }
@@ -288015,6 +288073,8 @@ var init_en3 = __esm({
288015
288073
  "Available Qwen Code CLI tools:": "Available Qwen Code CLI tools:",
288016
288074
  "No tools available": "No tools available",
288017
288075
  "View or change the approval mode for tool usage": "View or change the approval mode for tool usage",
288076
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}': 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}',
288077
+ 'Approval mode set to "{{mode}}"': 'Approval mode set to "{{mode}}"',
288018
288078
  "View or change the language setting": "View or change the language setting",
288019
288079
  "change the theme": "change the theme",
288020
288080
  "Select Theme": "Select Theme",
@@ -288851,6 +288911,8 @@ var init_ru = __esm({
288851
288911
  "Available Qwen Code CLI tools:": "\u0414\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0435 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u044B Qwen Code CLI:",
288852
288912
  "No tools available": "\u041D\u0435\u0442 \u0434\u043E\u0441\u0442\u0443\u043F\u043D\u044B\u0445 \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432",
288853
288913
  "View or change the approval mode for tool usage": "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438\u043B\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0440\u0435\u0436\u0438\u043C\u0430 \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u0434\u043B\u044F \u0438\u0441\u043F\u043E\u043B\u044C\u0437\u043E\u0432\u0430\u043D\u0438\u044F \u0438\u043D\u0441\u0442\u0440\u0443\u043C\u0435\u043D\u0442\u043E\u0432",
288914
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}': '\u041D\u0435\u0434\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0439 \u0440\u0435\u0436\u0438\u043C \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F "{{arg}}". \u0414\u043E\u043F\u0443\u0441\u0442\u0438\u043C\u044B\u0435 \u0440\u0435\u0436\u0438\u043C\u044B: {{modes}}',
288915
+ 'Approval mode set to "{{mode}}"': '\u0420\u0435\u0436\u0438\u043C \u043F\u043E\u0434\u0442\u0432\u0435\u0440\u0436\u0434\u0435\u043D\u0438\u044F \u0443\u0441\u0442\u0430\u043D\u043E\u0432\u043B\u0435\u043D \u043D\u0430 "{{mode}}"',
288854
288916
  "View or change the language setting": "\u041F\u0440\u043E\u0441\u043C\u043E\u0442\u0440 \u0438\u043B\u0438 \u0438\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u043D\u0430\u0441\u0442\u0440\u043E\u0435\u043A \u044F\u0437\u044B\u043A\u0430",
288855
288917
  "change the theme": "\u0418\u0437\u043C\u0435\u043D\u0435\u043D\u0438\u0435 \u0442\u0435\u043C\u044B",
288856
288918
  "Select Theme": "\u0412\u044B\u0431\u043E\u0440 \u0442\u0435\u043C\u044B",
@@ -289688,6 +289750,8 @@ var init_zh = __esm({
289688
289750
  "Available Qwen Code CLI tools:": "\u53EF\u7528\u7684 Qwen Code CLI \u5DE5\u5177\uFF1A",
289689
289751
  "No tools available": "\u6CA1\u6709\u53EF\u7528\u5DE5\u5177",
289690
289752
  "View or change the approval mode for tool usage": "\u67E5\u770B\u6216\u66F4\u6539\u5DE5\u5177\u4F7F\u7528\u7684\u5BA1\u6279\u6A21\u5F0F",
289753
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}': '\u65E0\u6548\u7684\u5BA1\u6279\u6A21\u5F0F "{{arg}}"\u3002\u6709\u6548\u6A21\u5F0F\uFF1A{{modes}}',
289754
+ 'Approval mode set to "{{mode}}"': '\u5BA1\u6279\u6A21\u5F0F\u5DF2\u8BBE\u7F6E\u4E3A "{{mode}}"',
289691
289755
  "View or change the language setting": "\u67E5\u770B\u6216\u66F4\u6539\u8BED\u8A00\u8BBE\u7F6E",
289692
289756
  "change the theme": "\u66F4\u6539\u4E3B\u9898",
289693
289757
  "Select Theme": "\u9009\u62E9\u4E3B\u9898",
@@ -356264,7 +356328,7 @@ __name(getPackageJson, "getPackageJson");
356264
356328
  // packages/cli/src/utils/version.ts
356265
356329
  async function getCliVersion() {
356266
356330
  const pkgJson = await getPackageJson();
356267
- return "0.6.0-preview.3";
356331
+ return "0.6.1-nightly.20260107.2c285394";
356268
356332
  }
356269
356333
  __name(getCliVersion, "getCliVersion");
356270
356334
 
@@ -364325,7 +364389,7 @@ var formatDuration = /* @__PURE__ */ __name((milliseconds) => {
364325
364389
 
364326
364390
  // packages/cli/src/generated/git-commit.ts
364327
364391
  init_esbuild_shims();
364328
- var GIT_COMMIT_INFO2 = "54cf454d";
364392
+ var GIT_COMMIT_INFO2 = "101c48a3";
364329
364393
 
364330
364394
  // packages/cli/src/utils/systemInfo.ts
364331
364395
  async function getNpmVersion() {
@@ -364459,16 +364523,56 @@ var agentsCommand = {
364459
364523
 
364460
364524
  // packages/cli/src/ui/commands/approvalModeCommand.ts
364461
364525
  init_esbuild_shims();
364526
+ function parseApprovalModeArg(arg) {
364527
+ const trimmed2 = arg.trim().toLowerCase();
364528
+ if (!trimmed2) {
364529
+ return void 0;
364530
+ }
364531
+ return APPROVAL_MODES.find((mode) => mode.toLowerCase() === trimmed2);
364532
+ }
364533
+ __name(parseApprovalModeArg, "parseApprovalModeArg");
364462
364534
  var approvalModeCommand = {
364463
364535
  name: "approval-mode",
364464
364536
  get description() {
364465
364537
  return t4("View or change the approval mode for tool usage");
364466
364538
  },
364467
364539
  kind: "built-in" /* BUILT_IN */,
364468
- action: /* @__PURE__ */ __name(async (_context, _args) => ({
364469
- type: "dialog",
364470
- dialog: "approval-mode"
364471
- }), "action")
364540
+ action: /* @__PURE__ */ __name(async (context2, args) => {
364541
+ const mode = parseApprovalModeArg(args);
364542
+ if (!args.trim()) {
364543
+ return {
364544
+ type: "dialog",
364545
+ dialog: "approval-mode"
364546
+ };
364547
+ }
364548
+ if (!mode) {
364549
+ return {
364550
+ type: "message",
364551
+ messageType: "error",
364552
+ content: t4('Invalid approval mode "{{arg}}". Valid modes: {{modes}}', {
364553
+ arg: args.trim(),
364554
+ modes: APPROVAL_MODES.join(", ")
364555
+ })
364556
+ };
364557
+ }
364558
+ const { config: config2 } = context2.services;
364559
+ if (config2) {
364560
+ try {
364561
+ config2.setApprovalMode(mode);
364562
+ } catch (e4) {
364563
+ return {
364564
+ type: "message",
364565
+ messageType: "error",
364566
+ content: e4.message
364567
+ };
364568
+ }
364569
+ }
364570
+ return {
364571
+ type: "message",
364572
+ messageType: "info",
364573
+ content: t4('Approval mode set to "{{mode}}"', { mode })
364574
+ };
364575
+ }, "action")
364472
364576
  };
364473
364577
 
364474
364578
  // packages/cli/src/ui/commands/authCommand.ts
@@ -389459,7 +389563,7 @@ var import_chalk5 = __toESM(require_source(), 1);
389459
389563
  // packages/cli/src/ui/components/shared/text-buffer.ts
389460
389564
  init_esbuild_shims();
389461
389565
  var import_react46 = __toESM(require_react(), 1);
389462
- import { spawnSync as spawnSync3 } from "node:child_process";
389566
+ import { spawnSync as spawnSync4 } from "node:child_process";
389463
389567
  import fs83 from "node:fs";
389464
389568
  import os32 from "node:os";
389465
389569
  import pathMod from "node:path";
@@ -391300,7 +391404,7 @@ function useTextBuffer({
391300
391404
  const wasRaw = stdin?.isRaw ?? false;
391301
391405
  try {
391302
391406
  setRawMode?.(false);
391303
- const { status, error: error2 } = spawnSync3(editor, [filePath], {
391407
+ const { status, error: error2 } = spawnSync4(editor, [filePath], {
391304
391408
  stdio: "inherit"
391305
391409
  });
391306
391410
  if (error2) throw error2;
@@ -392003,7 +392107,7 @@ var import_react52 = __toESM(require_react(), 1);
392003
392107
  // packages/cli/src/ui/hooks/useLaunchEditor.ts
392004
392108
  init_esbuild_shims();
392005
392109
  var import_react51 = __toESM(require_react(), 1);
392006
- import { spawnSync as spawnSync4 } from "child_process";
392110
+ import { spawnSync as spawnSync5 } from "child_process";
392007
392111
  function getEditorCommand(preferredEditor) {
392008
392112
  if (preferredEditor) {
392009
392113
  return preferredEditor;
@@ -392038,7 +392142,7 @@ function useLaunchEditor() {
392038
392142
  const wasRaw = stdin?.isRaw ?? false;
392039
392143
  try {
392040
392144
  setRawMode?.(false);
392041
- const { status, error: error2 } = spawnSync4(editorCommand2, editorArgs, {
392145
+ const { status, error: error2 } = spawnSync5(editorCommand2, editorArgs, {
392042
392146
  stdio: "inherit"
392043
392147
  });
392044
392148
  if (error2) throw error2;
@@ -412938,19 +413042,26 @@ async function showResumeSessionPicker(cwd7 = process.cwd()) {
412938
413042
  return new Promise((resolve25) => {
412939
413043
  let selectedId;
412940
413044
  const { unmount, waitUntilExit } = render_default(
412941
- /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(KeypressProvider, { kittyProtocolEnabled: false, children: /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(
412942
- StandalonePickerScreen,
413045
+ /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(
413046
+ KeypressProvider,
412943
413047
  {
412944
- sessionService,
412945
- onSelect: (id) => {
412946
- selectedId = id;
412947
- },
412948
- onCancel: () => {
412949
- selectedId = void 0;
412950
- },
412951
- currentBranch: getGitBranch(cwd7)
413048
+ kittyProtocolEnabled: false,
413049
+ pasteWorkaround: process.platform === "win32" || parseInt(process.versions.node.split(".")[0], 10) < 20,
413050
+ children: /* @__PURE__ */ (0, import_jsx_runtime108.jsx)(
413051
+ StandalonePickerScreen,
413052
+ {
413053
+ sessionService,
413054
+ onSelect: (id) => {
413055
+ selectedId = id;
413056
+ },
413057
+ onCancel: () => {
413058
+ selectedId = void 0;
413059
+ },
413060
+ currentBranch: getGitBranch(cwd7)
413061
+ }
413062
+ )
412952
413063
  }
412953
- ) }),
413064
+ ),
412954
413065
  {
412955
413066
  exitOnCtrlC: false
412956
413067
  }
@@ -415280,7 +415391,7 @@ var GeminiAgent = class {
415280
415391
  name: APPROVAL_MODE_INFO[mode].name,
415281
415392
  description: APPROVAL_MODE_INFO[mode].description
415282
415393
  }));
415283
- const version2 = "0.6.0-preview.3";
415394
+ const version2 = "0.6.1-nightly.20260107.2c285394";
415284
415395
  return {
415285
415396
  protocolVersion: PROTOCOL_VERSION,
415286
415397
  agentInfo: {
package/locales/en.js CHANGED
@@ -89,6 +89,9 @@ export default {
89
89
  'No tools available': 'No tools available',
90
90
  'View or change the approval mode for tool usage':
91
91
  'View or change the approval mode for tool usage',
92
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}':
93
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}',
94
+ 'Approval mode set to "{{mode}}"': 'Approval mode set to "{{mode}}"',
92
95
  'View or change the language setting': 'View or change the language setting',
93
96
  'change the theme': 'change the theme',
94
97
  'Select Theme': 'Select Theme',
package/locales/ru.js CHANGED
@@ -89,6 +89,10 @@ export default {
89
89
  'No tools available': 'Нет доступных инструментов',
90
90
  'View or change the approval mode for tool usage':
91
91
  'Просмотр или изменение режима подтверждения для использования инструментов',
92
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}':
93
+ 'Недопустимый режим подтверждения "{{arg}}". Допустимые режимы: {{modes}}',
94
+ 'Approval mode set to "{{mode}}"':
95
+ 'Режим подтверждения установлен на "{{mode}}"',
92
96
  'View or change the language setting':
93
97
  'Просмотр или изменение настроек языка',
94
98
  'change the theme': 'Изменение темы',
package/locales/zh.js CHANGED
@@ -88,6 +88,9 @@ export default {
88
88
  'No tools available': '没有可用工具',
89
89
  'View or change the approval mode for tool usage':
90
90
  '查看或更改工具使用的审批模式',
91
+ 'Invalid approval mode "{{arg}}". Valid modes: {{modes}}':
92
+ '无效的审批模式 "{{arg}}"。有效模式:{{modes}}',
93
+ 'Approval mode set to "{{mode}}"': '审批模式已设置为 "{{mode}}"',
91
94
  'View or change the language setting': '查看或更改语言设置',
92
95
  'change the theme': '更改主题',
93
96
  'Select Theme': '选择主题',
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@qwen-code/qwen-code",
3
- "version": "0.6.0-preview.3",
3
+ "version": "0.6.1-nightly.20260107.2c285394",
4
4
  "description": "Qwen Code - AI-powered coding assistant",
5
5
  "repository": {
6
6
  "type": "git",
@@ -20,7 +20,7 @@
20
20
  "locales"
21
21
  ],
22
22
  "config": {
23
- "sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.6.0-preview.3"
23
+ "sandboxImageUri": "ghcr.io/qwenlm/qwen-code:0.6.1-nightly.20260107.2c285394"
24
24
  },
25
25
  "dependencies": {
26
26
  "tiktoken": "^1.0.21"