@qwen-code/qwen-code 0.18.0-preview.2 → 0.18.0
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/_meta.ts +1 -0
- package/bundled/qc-helper/docs/configuration/settings.md +3 -5
- package/bundled/qc-helper/docs/features/approval-mode.md +10 -14
- package/bundled/qc-helper/docs/features/commands.md +33 -11
- package/bundled/qc-helper/docs/features/followup-suggestions.md +2 -2
- package/bundled/qc-helper/docs/features/sub-agents.md +32 -11
- package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +221 -0
- package/bundled/qc-helper/docs/qwen-serve.md +234 -24
- package/chunks/{agent-QB7TZ4HW.js → agent-LOTJK6AH.js} +23 -23
- package/chunks/{agent-headless-APVHH7QM.js → agent-headless-TU3EPMYU.js} +23 -23
- package/chunks/{anthropicContentGenerator-M45EVVRM.js → anthropicContentGenerator-2HBRNQ3B.js} +7 -7
- package/chunks/{askUserQuestion-WM2KHM3K.js → askUserQuestion-OGCMIBQM.js} +45 -3
- package/chunks/{chunk-MVIVIPCU.js → chunk-2Y5SYSD3.js} +361 -583
- package/chunks/chunk-3DHXZ6EV.js +241 -0
- package/chunks/{chunk-JVQOQ3OU.js → chunk-3HTIVKZE.js} +1 -1
- package/chunks/{chunk-BNESGOSJ.js → chunk-55ZMG67I.js} +1 -1
- package/chunks/{chunk-ZK4AMNIU.js → chunk-6YIUGZTC.js} +1041 -210
- package/chunks/{chunk-C6WMLUNB.js → chunk-72LDN5PP.js} +1 -1
- package/chunks/{chunk-AVW55ZCO.js → chunk-7BCMOPIM.js} +11 -9
- package/chunks/{chunk-JUGRPQAB.js → chunk-A7B4ISQP.js} +1 -1
- package/chunks/{chunk-UAMOBVVW.js → chunk-B7HXHOHU.js} +1 -1
- package/chunks/{chunk-CNSMKPK6.js → chunk-BIVG75CP.js} +1 -1
- package/chunks/{chunk-LR62TEET.js → chunk-EYENRK4D.js} +1 -1
- package/chunks/{chunk-SZOEIL6S.js → chunk-H6BD2ELD.js} +1 -0
- package/chunks/{chunk-PAEBHDIO.js → chunk-HLPLOD42.js} +1 -1
- package/chunks/{chunk-JXAZUMDW.js → chunk-HR7SV7AY.js} +1 -2
- package/chunks/{chunk-P4J26VDS.js → chunk-IDX6COTE.js} +2 -2
- package/chunks/{chunk-QCG6KPNM.js → chunk-IWAYOW5Q.js} +14760 -10735
- package/chunks/{chunk-HGJPQK33.js → chunk-J5MDQKJL.js} +518 -519
- package/chunks/{chunk-USE2VQ5P.js → chunk-JTQAQBTV.js} +21 -0
- package/chunks/{chunk-HXJE7VOG.js → chunk-LBP46COL.js} +1001 -139
- package/chunks/{chunk-NW5QBUYO.js → chunk-LEJ42GNY.js} +14 -14
- package/chunks/{chunk-Y7R6H6FT.js → chunk-M6VTDSVR.js} +1 -1
- package/chunks/{chunk-CNHFPN7T.js → chunk-MFBBBTNY.js} +1 -1
- package/chunks/{chunk-ICOI4E4S.js → chunk-OHEGWO4L.js} +101 -23
- package/chunks/{chunk-7YKXFA3D.js → chunk-PL3MVCWD.js} +5 -5
- package/chunks/chunk-QQDPRDVW.js +25 -0
- package/chunks/{chunk-HV3ZZ7G4.js → chunk-R7ODSGTK.js} +2 -2
- package/chunks/{chunk-GX7VH5JQ.js → chunk-SEGYWKIH.js} +1 -1
- package/chunks/{chunk-KC6ZMJ5X.js → chunk-SNGELLWX.js} +1 -1
- package/chunks/chunk-XBY7E2FX.js +605 -0
- package/chunks/{chunk-2ZTWI7KH.js → chunk-XV4HCEVI.js} +22 -1
- package/chunks/{chunk-WFVXF3OM.js → chunk-Z2Z3GUXZ.js} +1 -0
- package/chunks/{chunk-CWV3SJZS.js → chunk-ZTZ4DDQE.js} +2 -2
- package/chunks/{computer-use-B7VIUI7F.js → computer-use-3RH2DOM6.js} +23 -23
- package/chunks/contextCommand-K347QT6O.js +52 -0
- package/chunks/{cron-create-FI5LJVUS.js → cron-create-YJL3KFWI.js} +3 -3
- package/chunks/{cron-delete-ZGUXWBTG.js → cron-delete-WKWSJZQA.js} +3 -3
- package/chunks/{cron-list-QNNZGMN3.js → cron-list-B52XEXAZ.js} +3 -3
- package/chunks/{devtools-IXE4UP72.js → devtools-FM6GJPYG.js} +1 -1
- package/chunks/{dist-R2SXPG74.js → dist-4LXD6L6X.js} +2 -2
- package/chunks/{dist-TE5QKMGR.js → dist-H6ONXVLG.js} +1 -1
- package/chunks/{dist-ZMQ4TXD5.js → dist-KAZ3SEBX.js} +2 -2
- package/chunks/{dist-BXDUQ2QY.js → dist-PK7DFCAW.js} +1 -1
- package/chunks/{edit-6UBTS2J5.js → edit-KU4PJGEX.js} +24 -24
- package/chunks/{en-HSQQNQUB.js → en-DHGYHIHX.js} +4 -0
- package/chunks/{enter-worktree-NN7LIXCM.js → enter-worktree-PPYIDCWI.js} +23 -23
- package/chunks/enterPlanMode-5CZDMCB4.js +158 -0
- package/chunks/{exit-worktree-GGSS5KIE.js → exit-worktree-UY3CGHKC.js} +23 -23
- package/chunks/exitPlanMode-3DN4QNSG.js +703 -0
- package/chunks/{geminiContentGenerator-I4H2NLJG.js → geminiContentGenerator-7A6I2RWB.js} +7 -7
- package/chunks/{getMachineId-bsd-F7GNPTER.js → getMachineId-bsd-4CASPIU4.js} +1 -1
- package/chunks/{getMachineId-darwin-T73DJL27.js → getMachineId-darwin-HPQPEMZR.js} +1 -1
- package/chunks/{getMachineId-linux-MKQTFPQM.js → getMachineId-linux-AUARKYHL.js} +1 -1
- package/chunks/{getMachineId-unsupported-MUR5KOQE.js → getMachineId-unsupported-S32ZDA2T.js} +1 -1
- package/chunks/{getMachineId-win-CDYFC6ZM.js → getMachineId-win-4EFLHYIJ.js} +1 -1
- package/chunks/{glob-OLCX57MD.js → glob-OFNQSS52.js} +23 -23
- package/chunks/{grep-7HXIMDOW.js → grep-6J2MSUM5.js} +26 -23
- package/chunks/{keychain-token-storage-LB46DAEK.js → keychain-token-storage-6IU6ORQN.js} +3 -3
- package/chunks/{ls-6PEZUK6O.js → ls-V3O6A5PT.js} +4 -4
- package/chunks/{lsp-JZSJOVT7.js → lsp-G2OCIFUA.js} +3 -3
- package/chunks/{monitor-SQO7MVAV.js → monitor-FKLHV423.js} +23 -23
- package/chunks/{notebook-edit-72L3EBAL.js → notebook-edit-KTBYFKWG.js} +24 -24
- package/chunks/{openaiContentGenerator-FTR7CDWF.js → openaiContentGenerator-L5KSWQY7.js} +15 -15
- package/chunks/{qwenContentGenerator-U5UFQ566.js → qwenContentGenerator-PYOXLMBW.js} +25 -25
- package/chunks/{qwenOAuth2-EFSECGHF.js → qwenOAuth2-2KCKWDCF.js} +6 -5
- package/chunks/{read-file-UA64EEQC.js → read-file-JQVRK4NU.js} +11 -11
- package/chunks/{ripGrep-WSYCWZVK.js → ripGrep-2L4LPNAJ.js} +23 -23
- package/chunks/{scheduler-VBASHOCA.js → scheduler-FGNXY4JQ.js} +23 -23
- package/chunks/{send-message-OYJZ5TPG.js → send-message-SZFWNOCL.js} +3 -3
- package/chunks/{serve-A7E2OJDR.js → serve-N2IBLA3G.js} +13581 -4977
- package/chunks/{shell-3NFOT6F5.js → shell-PTEG6UX4.js} +23 -23
- package/chunks/{skill-RA5YUREY.js → skill-X4NTK4NH.js} +64 -113
- package/chunks/{src-NFCMARMT.js → src-GLLQ3R5W.js} +154 -38
- package/chunks/{syntheticOutput-DETQ2YM6.js → syntheticOutput-IKAY5F6X.js} +4 -4
- package/chunks/{task-create-Y3ZKTJIG.js → task-create-MQICOJFV.js} +7 -7
- package/chunks/{task-list-ONXJ3I3A.js → task-list-RIHJCH32.js} +6 -6
- package/chunks/{task-stop-UHDC4N5B.js → task-stop-FWZRFANS.js} +3 -3
- package/chunks/{task-update-TCNOU3P5.js → task-update-2LHPXOYM.js} +20 -9
- package/chunks/{team-create-6SR4OVRG.js → team-create-2E4PF4KN.js} +26 -25
- package/chunks/{team-delete-EJ4U4DDP.js → team-delete-DAUDQS4J.js} +8 -6
- package/chunks/{todoWrite-TEYDRS5L.js → todoWrite-HTUACZES.js} +5 -5
- package/chunks/{tool-search-OD435A3X.js → tool-search-KTVULRES.js} +11 -11
- package/chunks/{web-fetch-6W67H5PO.js → web-fetch-CZ7LLKPE.js} +5 -5
- package/chunks/{workflow-62DHH4EO.js → workflow-L2ZUUDT2.js} +268 -16
- package/chunks/{write-file-475L5OPP.js → write-file-ZEB2JDYH.js} +24 -24
- package/chunks/{zh-VCLWO26Y.js → zh-7H5OQC4I.js} +5 -1
- package/chunks/{zh-TW-G3HFHVVT.js → zh-TW-P4IDHD3M.js} +5 -1
- package/cli.js +5955 -3128
- package/examples/starter/QWEN.md +30 -0
- package/examples/starter/README.md +59 -0
- package/examples/starter/agents/diary.md +86 -0
- package/examples/starter/commands/writing/polish.md +13 -0
- package/examples/starter/example.ts +64 -0
- package/examples/starter/package.json +18 -0
- package/examples/starter/qwen-extension.json +12 -0
- package/examples/starter/skills/synonyms/SKILL.md +48 -0
- package/examples/starter/tsconfig.json +13 -0
- package/fzfWorker.js +1083 -0
- package/locales/en.js +6 -0
- package/locales/zh-TW.js +5 -0
- package/locales/zh.js +5 -0
- package/package.json +3 -2
- package/chunks/chunk-AJIR24J2.js +0 -59
- package/chunks/chunk-XBFVXFB2.js +0 -216
- package/chunks/contextCommand-63RZ3O5R.js +0 -52
- package/chunks/exitPlanMode-H323NHB2.js +0 -235
|
@@ -1,17 +1,19 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
3
|
import "./chunk-SKBPNJEW.js";
|
|
4
|
-
import {
|
|
5
|
-
createChildAbortController
|
|
6
|
-
} from "./chunk-64WXLC72.js";
|
|
7
4
|
import {
|
|
8
5
|
BaseDeclarativeTool,
|
|
9
6
|
BaseToolInvocation,
|
|
10
7
|
ToolDisplayNames,
|
|
11
8
|
ToolNames
|
|
12
|
-
} from "./chunk-
|
|
13
|
-
import
|
|
14
|
-
|
|
9
|
+
} from "./chunk-XV4HCEVI.js";
|
|
10
|
+
import {
|
|
11
|
+
createChildAbortController
|
|
12
|
+
} from "./chunk-64WXLC72.js";
|
|
13
|
+
import {
|
|
14
|
+
createDebugLogger
|
|
15
|
+
} from "./chunk-HR7SV7AY.js";
|
|
16
|
+
import "./chunk-Z2Z3GUXZ.js";
|
|
15
17
|
import {
|
|
16
18
|
init_esbuild_shims
|
|
17
19
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -25,6 +27,7 @@ init_esbuild_shims();
|
|
|
25
27
|
// packages/core/src/agents/runtime/workflow-orchestrator.ts
|
|
26
28
|
init_esbuild_shims();
|
|
27
29
|
import { randomBytes } from "node:crypto";
|
|
30
|
+
import * as os from "node:os";
|
|
28
31
|
|
|
29
32
|
// packages/core/src/agents/runtime/workflow-sandbox.ts
|
|
30
33
|
init_esbuild_shims();
|
|
@@ -102,6 +105,7 @@ function isRegexContext(source, i) {
|
|
|
102
105
|
return /[{[(,;:=!&|?+\-*/%^~<>]/.test(prev);
|
|
103
106
|
}
|
|
104
107
|
__name(isRegexContext, "isRegexContext");
|
|
108
|
+
var debugLogger = createDebugLogger("WORKFLOW");
|
|
105
109
|
var MAX_LOG_LINES = 1e4;
|
|
106
110
|
var MAX_PHASE_ENTRIES = 1e4;
|
|
107
111
|
var ARGS_MAX_DEPTH = 64;
|
|
@@ -177,6 +181,17 @@ function createWorkflowSandbox(opts) {
|
|
|
177
181
|
pushLog: safeLog,
|
|
178
182
|
lastPhase: /* @__PURE__ */ __name(() => phases[phases.length - 1], "lastPhase"),
|
|
179
183
|
hostAgent: opts.dispatch,
|
|
184
|
+
// PR #4947 R2 T7 (qwen-code-ci-bot): host-side log hook for reviveInRealm's
|
|
185
|
+
// catch path. Mirrors the rejection-logging in settleToNullArray so an
|
|
186
|
+
// operator running with debug logging can distinguish "thunk rejected"
|
|
187
|
+
// (settleToNullArray.warn) from "thunk resolved to a non-JSON-serializable
|
|
188
|
+
// value" (this warn). Receives only primitive strings/numbers — the bridge
|
|
189
|
+
// contract forbids host objects crossing back to the script.
|
|
190
|
+
logRevivalFailure: /* @__PURE__ */ __name((idx, reason) => {
|
|
191
|
+
debugLogger.warn(
|
|
192
|
+
`Workflow result revival failed at index ${idx}: ${reason}; slot set to null (non-JSON-serializable thunk return).`
|
|
193
|
+
);
|
|
194
|
+
}, "logRevivalFailure"),
|
|
180
195
|
// The truthy flags distinguish "injected" from "default stub" inside the
|
|
181
196
|
// init script without leaking the host function itself when not used.
|
|
182
197
|
hasParallel: !!opts.parallel,
|
|
@@ -331,32 +346,80 @@ function createWorkflowSandbox(opts) {
|
|
|
331
346
|
});
|
|
332
347
|
|
|
333
348
|
// --- parallel / pipeline ---
|
|
349
|
+
// SECURITY (PR #4732 P2): the host impl resolves with a HOST-realm array.
|
|
350
|
+
// vmAsync's resolve path is verbatim (it does NOT re-wrap resolved
|
|
351
|
+
// values), so handing that host array to the script would reopen the
|
|
352
|
+
// T1/T8/T14 escape: result.constructor.constructor('return process')()
|
|
353
|
+
// walks the host Array.prototype chain to the host Function constructor.
|
|
354
|
+
// We revive the array INSIDE the vm realm with JSON.parse(JSON.stringify)
|
|
355
|
+
// -- the same mechanism that makes the args global safe (see the args
|
|
356
|
+
// revival above) -- so the value the script sees has vm-realm prototypes
|
|
357
|
+
// whose constructors can't reach host process. Agent results are JSON
|
|
358
|
+
// strings (and null slots), so the round-trip is lossless for P2.
|
|
359
|
+
//
|
|
360
|
+
// EAD-1 (P2 self-review): revive PER-ELEMENT, not the whole array in one
|
|
361
|
+
// JSON.stringify. A single slot whose VALUE is non-serializable (a thunk
|
|
362
|
+
// that returns a BigInt or a circular object) must become null at its
|
|
363
|
+
// index -- it must NOT throw on the whole array and destroy every sibling
|
|
364
|
+
// result, which would defeat errors-as-data for return values. The outer
|
|
365
|
+
// [] is built in-realm here, so the result keeps vm-realm prototypes.
|
|
366
|
+
//
|
|
367
|
+
// SECURITY (PR #4947 R1 wenshao): reviveInRealm MUST remain inside this
|
|
368
|
+
// vm init runInContext block. JSON, Array, Object here are vm-realm
|
|
369
|
+
// globals; extracting this function to a host-side utility (e.g. a
|
|
370
|
+
// shared utils/jsonRevive.ts) would resolve those references against
|
|
371
|
+
// the HOST realm, silently reopening the T1/T8/T14 escape that the
|
|
372
|
+
// revival is designed to prevent. The textual identity to a host-side
|
|
373
|
+
// util is exactly the trap.
|
|
374
|
+
function reviveInRealm(hostArr) {
|
|
375
|
+
const out = [];
|
|
376
|
+
for (let i = 0; i < hostArr.length; i++) {
|
|
377
|
+
try {
|
|
378
|
+
out[i] = JSON.parse(JSON.stringify(hostArr[i]));
|
|
379
|
+
} catch (e) {
|
|
380
|
+
// Cross to host realm for debug logging. The bridge function
|
|
381
|
+
// accepts only primitive strings/numbers; the error message is
|
|
382
|
+
// coerced to a String here so no vm-realm Error object crosses.
|
|
383
|
+
__b.logRevivalFailure(i, String(e?.message ?? e));
|
|
384
|
+
out[i] = null;
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
return out;
|
|
388
|
+
}
|
|
334
389
|
if (__b.hasParallel) {
|
|
335
|
-
|
|
390
|
+
const callParallel = vmAsync(function (thunks) {
|
|
336
391
|
return __b.hostParallel(thunks);
|
|
337
392
|
});
|
|
393
|
+
globalThis.parallel = function parallel(thunks) {
|
|
394
|
+
return callParallel(thunks).then(reviveInRealm);
|
|
395
|
+
};
|
|
338
396
|
} else {
|
|
339
397
|
globalThis.parallel = function parallel() {
|
|
340
398
|
return new Promise(function (_, reject) {
|
|
341
399
|
reject(new Error(
|
|
342
|
-
'parallel() is
|
|
343
|
-
'
|
|
400
|
+
'parallel() is unavailable: this sandbox was created without a ' +
|
|
401
|
+
'parallel implementation. The orchestrator injects one; a bare ' +
|
|
402
|
+
'sandbox has no concurrent-dispatch capability.'
|
|
344
403
|
));
|
|
345
404
|
});
|
|
346
405
|
};
|
|
347
406
|
}
|
|
348
407
|
if (__b.hasPipeline) {
|
|
349
|
-
|
|
408
|
+
const callPipeline = vmAsync(function (items) {
|
|
350
409
|
const stages = [];
|
|
351
410
|
for (let i = 1; i < arguments.length; i++) stages.push(arguments[i]);
|
|
352
411
|
return __b.hostPipeline.apply(null, [items].concat(stages));
|
|
353
412
|
});
|
|
413
|
+
globalThis.pipeline = function pipeline() {
|
|
414
|
+
return callPipeline.apply(null, arguments).then(reviveInRealm);
|
|
415
|
+
};
|
|
354
416
|
} else {
|
|
355
417
|
globalThis.pipeline = function pipeline() {
|
|
356
418
|
return new Promise(function (_, reject) {
|
|
357
419
|
reject(new Error(
|
|
358
|
-
'pipeline() is
|
|
359
|
-
'
|
|
420
|
+
'pipeline() is unavailable: this sandbox was created without a ' +
|
|
421
|
+
'pipeline implementation. The orchestrator injects one; a bare ' +
|
|
422
|
+
'sandbox has no staggered multi-stage capability.'
|
|
360
423
|
));
|
|
361
424
|
});
|
|
362
425
|
};
|
|
@@ -451,7 +514,106 @@ __name(createWorkflowSandbox, "createWorkflowSandbox");
|
|
|
451
514
|
init_esbuild_shims();
|
|
452
515
|
var WORKFLOW_SUBAGENT_SYSTEM_PROMPT = 'You are a subagent spawned by a workflow orchestration script. Use the tools available to complete the task.\nCRITICAL: Your final text response is returned **verbatim** as a string to the calling script \u2014 it is your return value, not a message to a human.\n- Output the literal result (data, JSON, text). Do NOT output confirmations like "Done." or "Sent."\n- If asked for JSON, return ONLY the raw JSON \u2014 no code fences, no prose, no markdown.\n- Do NOT use SendUserMessage to deliver your answer. Put your answer in your final text response.\n- Be concise. The script will parse your output.';
|
|
453
516
|
|
|
517
|
+
// packages/core/src/utils/concurrencyLimiter.ts
|
|
518
|
+
init_esbuild_shims();
|
|
519
|
+
function abortError() {
|
|
520
|
+
return new DOMException("Concurrency limiter aborted.", "AbortError");
|
|
521
|
+
}
|
|
522
|
+
__name(abortError, "abortError");
|
|
523
|
+
function createConcurrencyLimiter(limit, signal) {
|
|
524
|
+
if (!Number.isInteger(limit) || limit < 1) {
|
|
525
|
+
throw new Error(
|
|
526
|
+
`Concurrency limit must be a positive integer, got ${String(limit)}.`
|
|
527
|
+
);
|
|
528
|
+
}
|
|
529
|
+
let active = 0;
|
|
530
|
+
const queue = [];
|
|
531
|
+
const pump = /* @__PURE__ */ __name(() => {
|
|
532
|
+
while (active < limit && queue.length > 0) {
|
|
533
|
+
const job = queue.shift();
|
|
534
|
+
if (signal?.aborted) {
|
|
535
|
+
job.reject(abortError());
|
|
536
|
+
continue;
|
|
537
|
+
}
|
|
538
|
+
active++;
|
|
539
|
+
Promise.resolve().then(job.thunk).then(job.resolve, job.reject).finally(() => {
|
|
540
|
+
active--;
|
|
541
|
+
pump();
|
|
542
|
+
});
|
|
543
|
+
}
|
|
544
|
+
}, "pump");
|
|
545
|
+
const run = /* @__PURE__ */ __name((thunk) => new Promise((resolve, reject) => {
|
|
546
|
+
if (signal?.aborted) {
|
|
547
|
+
reject(abortError());
|
|
548
|
+
return;
|
|
549
|
+
}
|
|
550
|
+
queue.push({
|
|
551
|
+
thunk,
|
|
552
|
+
resolve,
|
|
553
|
+
reject
|
|
554
|
+
});
|
|
555
|
+
pump();
|
|
556
|
+
}), "run");
|
|
557
|
+
if (signal && !signal.aborted) {
|
|
558
|
+
signal.addEventListener(
|
|
559
|
+
"abort",
|
|
560
|
+
() => {
|
|
561
|
+
while (queue.length > 0) queue.shift().reject(abortError());
|
|
562
|
+
},
|
|
563
|
+
{ once: true }
|
|
564
|
+
);
|
|
565
|
+
}
|
|
566
|
+
return { run };
|
|
567
|
+
}
|
|
568
|
+
__name(createConcurrencyLimiter, "createConcurrencyLimiter");
|
|
569
|
+
|
|
454
570
|
// packages/core/src/agents/runtime/workflow-orchestrator.ts
|
|
571
|
+
var DEFAULT_MAX_AGENTS_PER_RUN = 1e3;
|
|
572
|
+
var MAX_WORKFLOW_AGENTS_ENV = "QWEN_CODE_MAX_WORKFLOW_AGENTS";
|
|
573
|
+
var HARD_MAX_AGENTS_PER_RUN_CEILING = 1e4;
|
|
574
|
+
function resolveMaxAgentsPerRun(env = process.env) {
|
|
575
|
+
const raw = env[MAX_WORKFLOW_AGENTS_ENV];
|
|
576
|
+
if (raw === void 0 || raw.trim() === "") {
|
|
577
|
+
return DEFAULT_MAX_AGENTS_PER_RUN;
|
|
578
|
+
}
|
|
579
|
+
const parsed = Number(raw);
|
|
580
|
+
if (!Number.isInteger(parsed) || parsed < 1) {
|
|
581
|
+
debugLogger.warn(
|
|
582
|
+
`Invalid ${MAX_WORKFLOW_AGENTS_ENV}=${JSON.stringify(raw)}, using default (${DEFAULT_MAX_AGENTS_PER_RUN})`
|
|
583
|
+
);
|
|
584
|
+
return DEFAULT_MAX_AGENTS_PER_RUN;
|
|
585
|
+
}
|
|
586
|
+
if (parsed > HARD_MAX_AGENTS_PER_RUN_CEILING) {
|
|
587
|
+
debugLogger.warn(
|
|
588
|
+
`${MAX_WORKFLOW_AGENTS_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_AGENTS_PER_RUN_CEILING}); clamping.`
|
|
589
|
+
);
|
|
590
|
+
return HARD_MAX_AGENTS_PER_RUN_CEILING;
|
|
591
|
+
}
|
|
592
|
+
return parsed;
|
|
593
|
+
}
|
|
594
|
+
__name(resolveMaxAgentsPerRun, "resolveMaxAgentsPerRun");
|
|
595
|
+
var MAX_WORKFLOW_CONCURRENCY_ENV = "QWEN_CODE_MAX_WORKFLOW_CONCURRENCY";
|
|
596
|
+
var HARD_MAX_CONCURRENCY_CEILING = 64;
|
|
597
|
+
function resolveConcurrencyLimit(env = process.env) {
|
|
598
|
+
const raw = env[MAX_WORKFLOW_CONCURRENCY_ENV];
|
|
599
|
+
if (raw !== void 0 && raw.trim() !== "") {
|
|
600
|
+
const parsed = Number(raw);
|
|
601
|
+
if (Number.isInteger(parsed) && parsed >= 1) {
|
|
602
|
+
if (parsed > HARD_MAX_CONCURRENCY_CEILING) {
|
|
603
|
+
debugLogger.warn(
|
|
604
|
+
`${MAX_WORKFLOW_CONCURRENCY_ENV}=${parsed} exceeds hard ceiling (${HARD_MAX_CONCURRENCY_CEILING}); clamping.`
|
|
605
|
+
);
|
|
606
|
+
return HARD_MAX_CONCURRENCY_CEILING;
|
|
607
|
+
}
|
|
608
|
+
return parsed;
|
|
609
|
+
}
|
|
610
|
+
debugLogger.warn(
|
|
611
|
+
`Invalid ${MAX_WORKFLOW_CONCURRENCY_ENV}=${JSON.stringify(raw)}, using cpu-derived default`
|
|
612
|
+
);
|
|
613
|
+
}
|
|
614
|
+
return Math.max(1, Math.min(16, os.cpus().length - 2));
|
|
615
|
+
}
|
|
616
|
+
__name(resolveConcurrencyLimit, "resolveConcurrencyLimit");
|
|
455
617
|
var WORKFLOW_SUBAGENT_MAX_TURNS = 50;
|
|
456
618
|
var WORKFLOW_SUBAGENT_MAX_TIME_MINUTES = 10;
|
|
457
619
|
var WORKFLOW_SUBAGENT_DISALLOWED_TOOLS = [
|
|
@@ -475,7 +637,7 @@ function generateRunId() {
|
|
|
475
637
|
__name(generateRunId, "generateRunId");
|
|
476
638
|
function createProductionDispatch(config, signal) {
|
|
477
639
|
return async (prompt, opts) => {
|
|
478
|
-
const { AgentHeadless, ContextState } = await import("./agent-headless-
|
|
640
|
+
const { AgentHeadless, ContextState } = await import("./agent-headless-TU3EPMYU.js");
|
|
479
641
|
const ctx = new ContextState();
|
|
480
642
|
ctx.set("task_prompt", prompt);
|
|
481
643
|
const subagent = await AgentHeadless.create(
|
|
@@ -519,9 +681,28 @@ var WorkflowOrchestrator = class {
|
|
|
519
681
|
}
|
|
520
682
|
async run(req) {
|
|
521
683
|
const runId = generateRunId();
|
|
684
|
+
const maxAgents = resolveMaxAgentsPerRun();
|
|
685
|
+
const signal = req.abortOnTimeout?.signal;
|
|
686
|
+
const limiter = createConcurrencyLimiter(resolveConcurrencyLimit(), signal);
|
|
687
|
+
let agentCount = 0;
|
|
688
|
+
const countedDispatch = /* @__PURE__ */ __name((prompt, opts) => {
|
|
689
|
+
agentCount += 1;
|
|
690
|
+
if (agentCount > maxAgents) {
|
|
691
|
+
return Promise.reject(
|
|
692
|
+
new Error(
|
|
693
|
+
`Workflow exceeded the maximum of ${maxAgents} agent() calls per run.`
|
|
694
|
+
)
|
|
695
|
+
);
|
|
696
|
+
}
|
|
697
|
+
return limiter.run(() => this.dispatch(prompt, opts));
|
|
698
|
+
}, "countedDispatch");
|
|
699
|
+
const parallelImpl = makeParallelImpl(signal);
|
|
700
|
+
const pipelineImpl = makePipelineImpl(signal);
|
|
522
701
|
const sandbox = createWorkflowSandbox({
|
|
523
702
|
args: req.args,
|
|
524
|
-
dispatch:
|
|
703
|
+
dispatch: countedDispatch,
|
|
704
|
+
parallel: parallelImpl,
|
|
705
|
+
pipeline: pipelineImpl,
|
|
525
706
|
abortOnTimeout: req.abortOnTimeout
|
|
526
707
|
});
|
|
527
708
|
try {
|
|
@@ -541,6 +722,77 @@ var WorkflowOrchestrator = class {
|
|
|
541
722
|
}
|
|
542
723
|
}
|
|
543
724
|
};
|
|
725
|
+
async function settleToNullArray(thunks, signal) {
|
|
726
|
+
const settled = await Promise.allSettled(
|
|
727
|
+
thunks.map((t) => Promise.resolve().then(t))
|
|
728
|
+
);
|
|
729
|
+
if (signal?.aborted)
|
|
730
|
+
throw new DOMException("Workflow run aborted.", "AbortError");
|
|
731
|
+
return settled.map((r, i) => {
|
|
732
|
+
if (r.status === "fulfilled") return r.value;
|
|
733
|
+
debugLogger.warn(
|
|
734
|
+
`Workflow thunk at index ${i} rejected: ${String(r.reason?.message ?? r.reason)}`
|
|
735
|
+
);
|
|
736
|
+
return null;
|
|
737
|
+
});
|
|
738
|
+
}
|
|
739
|
+
__name(settleToNullArray, "settleToNullArray");
|
|
740
|
+
function makeParallelImpl(signal) {
|
|
741
|
+
return (thunks) => {
|
|
742
|
+
if (!Array.isArray(thunks)) {
|
|
743
|
+
return Promise.reject(
|
|
744
|
+
new Error(
|
|
745
|
+
"parallel() expects an array of thunks (functions returning promises)."
|
|
746
|
+
)
|
|
747
|
+
);
|
|
748
|
+
}
|
|
749
|
+
for (const t of thunks) {
|
|
750
|
+
if (typeof t !== "function") {
|
|
751
|
+
return Promise.reject(
|
|
752
|
+
new Error(
|
|
753
|
+
"parallel() expects an array of functions, not values \u2014 wrap each call: parallel([() => agent(...), () => agent(...)])."
|
|
754
|
+
)
|
|
755
|
+
);
|
|
756
|
+
}
|
|
757
|
+
}
|
|
758
|
+
return settleToNullArray(thunks, signal);
|
|
759
|
+
};
|
|
760
|
+
}
|
|
761
|
+
__name(makeParallelImpl, "makeParallelImpl");
|
|
762
|
+
function makePipelineImpl(signal) {
|
|
763
|
+
return (items, ...stages) => {
|
|
764
|
+
if (!Array.isArray(items)) {
|
|
765
|
+
return Promise.reject(
|
|
766
|
+
new Error(
|
|
767
|
+
"pipeline() expects an array of items as its first argument."
|
|
768
|
+
)
|
|
769
|
+
);
|
|
770
|
+
}
|
|
771
|
+
for (const s of stages) {
|
|
772
|
+
if (typeof s !== "function") {
|
|
773
|
+
return Promise.reject(
|
|
774
|
+
new Error(
|
|
775
|
+
"pipeline() stages must be functions: pipeline(items, item => ..., result => ...)."
|
|
776
|
+
)
|
|
777
|
+
);
|
|
778
|
+
}
|
|
779
|
+
}
|
|
780
|
+
const chains = items.map(
|
|
781
|
+
(item, idx) => () => runPipelineChain(item, idx, stages)
|
|
782
|
+
);
|
|
783
|
+
return settleToNullArray(chains, signal);
|
|
784
|
+
};
|
|
785
|
+
}
|
|
786
|
+
__name(makePipelineImpl, "makePipelineImpl");
|
|
787
|
+
async function runPipelineChain(item, idx, stages) {
|
|
788
|
+
let prev = item;
|
|
789
|
+
for (const stage of stages) {
|
|
790
|
+
if (prev === null) break;
|
|
791
|
+
prev = await stage(prev, item, idx);
|
|
792
|
+
}
|
|
793
|
+
return prev;
|
|
794
|
+
}
|
|
795
|
+
__name(runPipelineChain, "runPipelineChain");
|
|
544
796
|
function extractErrorMessage(err) {
|
|
545
797
|
if (err && typeof err === "object" && "message" in err) {
|
|
546
798
|
const m = err.message;
|
|
@@ -557,7 +809,7 @@ var WORKFLOW_PARAM_SCHEMA = {
|
|
|
557
809
|
properties: {
|
|
558
810
|
script: {
|
|
559
811
|
type: "string",
|
|
560
|
-
description: "JavaScript source of the workflow. Wrapped as an async IIFE. May call the injected globals `phase(title)`, `log(msg)`, `agent(prompt, { label? })`, and read `args`.
|
|
812
|
+
description: "JavaScript source of the workflow. Wrapped as an async IIFE. May call the injected globals `phase(title)`, `log(msg)`, `agent(prompt, { label? })`, and read `args`. Concurrency: `parallel([() => agent(...), ...])` runs thunks through a shared per-run window (default `max(1, min(16, cpus-2))` agents in flight; override via `QWEN_CODE_MAX_WORKFLOW_CONCURRENCY`) and resolves to a position-aligned array \u2014 a thunk that throws, or resolves to a non-JSON-serializable value, becomes `null` at its index (errors-as-data); parallel() itself rejects only on invalid arguments or abort. `pipeline(items, ...stages)` runs each item through the stages (staggered, no inter-stage barrier); a stage that throws, returns `null`, or returns a non-JSON-serializable value drops that item to `null`. Pass THUNKS to parallel, not eager calls: `parallel([() => agent(...)])`, not `parallel([agent(...)])`. At most 1000 agent() calls per run (override via `QWEN_CODE_MAX_WORKFLOW_AGENTS`). `Date.now()` and `Math.random()` both throw \u2014 workflow scripts must be deterministic for resume. `export const meta = {...}` declarations are stripped before execution."
|
|
561
813
|
},
|
|
562
814
|
args: {
|
|
563
815
|
description: "Optional structured value bound to the `args` global. Pass actual JSON, not a stringified value."
|
|
@@ -674,7 +926,7 @@ var WorkflowTool = class extends BaseDeclarativeTool {
|
|
|
674
926
|
super(
|
|
675
927
|
ToolNames.WORKFLOW,
|
|
676
928
|
ToolDisplayNames.WORKFLOW,
|
|
677
|
-
"Execute a workflow script that orchestrates subagents
|
|
929
|
+
"Execute a workflow script that orchestrates subagents. Supports `phase`, `log`, sequential `agent`, and concurrent fan-out via `parallel(thunks)` / `pipeline(items, ...stages)` (default `max(1, min(16, cpus-2))` agents in flight per run, up to 1000 agents total; both env-overridable). No schema, no resume, no background execution yet. Scripts run in a node:vm sandbox without access to the filesystem or shell; all I/O happens through the spawned agents.",
|
|
678
930
|
"other" /* Other */,
|
|
679
931
|
WORKFLOW_PARAM_SCHEMA,
|
|
680
932
|
/* isOutputMarkdown */
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import {
|
|
4
4
|
StructuredToolError,
|
|
5
5
|
checkPriorRead
|
|
6
|
-
} from "./chunk-
|
|
6
|
+
} from "./chunk-MFBBBTNY.js";
|
|
7
7
|
import {
|
|
8
8
|
CommitAttributionService,
|
|
9
9
|
DEFAULT_DIFF_OPTIONS,
|
|
@@ -12,50 +12,50 @@ import {
|
|
|
12
12
|
detectLineEnding,
|
|
13
13
|
getDiffStat,
|
|
14
14
|
needsUtf8Bom
|
|
15
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-IWAYOW5Q.js";
|
|
16
16
|
import "./chunk-K5PGHDBN.js";
|
|
17
17
|
import "./chunk-SKBPNJEW.js";
|
|
18
|
+
import "./chunk-HLPLOD42.js";
|
|
18
19
|
import "./chunk-O4PICXES.js";
|
|
19
20
|
import "./chunk-TW522KN6.js";
|
|
20
|
-
import "./chunk-
|
|
21
|
-
import "./chunk-
|
|
22
|
-
import "./chunk-
|
|
21
|
+
import "./chunk-3DHXZ6EV.js";
|
|
22
|
+
import "./chunk-XBY7E2FX.js";
|
|
23
|
+
import "./chunk-J5MDQKJL.js";
|
|
23
24
|
import "./chunk-MLZQVCF3.js";
|
|
24
|
-
import "./chunk-PAEBHDIO.js";
|
|
25
25
|
import "./chunk-LD2XBG6Z.js";
|
|
26
|
-
import "./chunk-
|
|
27
|
-
import "./chunk-
|
|
26
|
+
import "./chunk-OHEGWO4L.js";
|
|
27
|
+
import "./chunk-SNGELLWX.js";
|
|
28
28
|
import "./chunk-77WXWU44.js";
|
|
29
|
-
import "./chunk-
|
|
30
|
-
import "./chunk-64WXLC72.js";
|
|
29
|
+
import "./chunk-A7B4ISQP.js";
|
|
31
30
|
import {
|
|
32
31
|
FileOperationEvent,
|
|
33
32
|
fileExists,
|
|
34
33
|
getLanguageFromFilePath,
|
|
35
34
|
getSpecificMimeType,
|
|
36
35
|
logFileOperation
|
|
37
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-6YIUGZTC.js";
|
|
38
37
|
import "./chunk-3PJXIDKI.js";
|
|
39
38
|
import "./chunk-UWCTAVOD.js";
|
|
40
39
|
import "./chunk-OFEVLU4C.js";
|
|
41
40
|
import {
|
|
42
41
|
isAnyAutoMemPath
|
|
43
|
-
} from "./chunk-
|
|
44
|
-
import "./chunk-
|
|
45
|
-
import "./chunk-
|
|
42
|
+
} from "./chunk-3HTIVKZE.js";
|
|
43
|
+
import "./chunk-IDX6COTE.js";
|
|
44
|
+
import "./chunk-BIVG75CP.js";
|
|
46
45
|
import {
|
|
47
46
|
BaseDeclarativeTool,
|
|
48
47
|
BaseToolInvocation,
|
|
49
48
|
ToolDisplayNames,
|
|
50
49
|
ToolNames
|
|
51
|
-
} from "./chunk-
|
|
52
|
-
import "./chunk-
|
|
53
|
-
import "./chunk-
|
|
54
|
-
import "./chunk-
|
|
55
|
-
import "./chunk-
|
|
56
|
-
import "./chunk-
|
|
57
|
-
import "./chunk-
|
|
58
|
-
import "./chunk-
|
|
50
|
+
} from "./chunk-XV4HCEVI.js";
|
|
51
|
+
import "./chunk-2Y5SYSD3.js";
|
|
52
|
+
import "./chunk-SEGYWKIH.js";
|
|
53
|
+
import "./chunk-64WXLC72.js";
|
|
54
|
+
import "./chunk-B7HXHOHU.js";
|
|
55
|
+
import "./chunk-EYENRK4D.js";
|
|
56
|
+
import "./chunk-M6VTDSVR.js";
|
|
57
|
+
import "./chunk-55ZMG67I.js";
|
|
58
|
+
import "./chunk-H6BD2ELD.js";
|
|
59
59
|
import "./chunk-5IFG2VC4.js";
|
|
60
60
|
import {
|
|
61
61
|
createDebugLogger,
|
|
@@ -64,11 +64,11 @@ import {
|
|
|
64
64
|
makeRelative,
|
|
65
65
|
shortenPath,
|
|
66
66
|
unescapePath
|
|
67
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-HR7SV7AY.js";
|
|
68
68
|
import "./chunk-ZERZSAZL.js";
|
|
69
69
|
import "./chunk-QN5NZ3UQ.js";
|
|
70
70
|
import "./chunk-BR4QREVK.js";
|
|
71
|
-
import "./chunk-
|
|
71
|
+
import "./chunk-Z2Z3GUXZ.js";
|
|
72
72
|
import {
|
|
73
73
|
init_esbuild_shims
|
|
74
74
|
} from "./chunk-A4BMJM77.js";
|
|
@@ -98,6 +98,7 @@ var zh_default = {
|
|
|
98
98
|
"Analyzes the project and creates a tailored QWEN.md file.": "\u5206\u6790\u9879\u76EE\u5E76\u521B\u5EFA\u5B9A\u5236\u7684 QWEN.md \u6587\u4EF6",
|
|
99
99
|
"List available Qwen Code tools. Usage: /tools [desc]": "\u5217\u51FA\u53EF\u7528\u7684 Qwen Code \u5DE5\u5177\u3002\u7528\u6CD5\uFF1A/tools [desc]",
|
|
100
100
|
"Open the skills panel (browse, search, toggle, pick).": "\u6253\u5F00\u6280\u80FD\u9762\u677F\uFF08\u6D4F\u89C8\u3001\u641C\u7D22\u3001\u542F\u505C\u3001\u9009\u62E9\uFF09\u3002",
|
|
101
|
+
"Move this session to a new working directory": "\u5C06\u6B64\u4F1A\u8BDD\u79FB\u52A8\u5230\u65B0\u7684\u5DE5\u4F5C\u76EE\u5F55",
|
|
101
102
|
// SkillsManagerDialog (`/skills` 弹出的面板)
|
|
102
103
|
"Manage Skills": "\u7BA1\u7406\u6280\u80FD",
|
|
103
104
|
"Skills configuration saved.": "\u6280\u80FD\u914D\u7F6E\u5DF2\u4FDD\u5B58\u3002",
|
|
@@ -174,6 +175,7 @@ var zh_default = {
|
|
|
174
175
|
'Theme "{{themeName}}" not found in selected scope.': '\u5728\u6240\u9009\u4F5C\u7528\u57DF\u4E2D\u672A\u627E\u5230\u4E3B\u9898 "{{themeName}}"\u3002',
|
|
175
176
|
"Clear conversation history and free up context": "\u6E05\u9664\u5BF9\u8BDD\u5386\u53F2\u5E76\u91CA\u653E\u4E0A\u4E0B\u6587",
|
|
176
177
|
"Compresses the context by replacing it with a summary.": "\u901A\u8FC7\u6458\u8981\u66FF\u6362\u6765\u538B\u7F29\u4E0A\u4E0B\u6587",
|
|
178
|
+
"Fast context compression without AI. Strips old tool outputs and thinking parts.": "\u65E0\u9700 AI \u7684\u5FEB\u901F\u4E0A\u4E0B\u6587\u538B\u7F29\u3002\u6E05\u7406\u65E7\u5DE5\u5177\u8F93\u51FA\u5E76\u5265\u79BB\u601D\u8003\u8FC7\u7A0B\u3002",
|
|
177
179
|
"open full Qwen Code documentation in your browser": "\u5728\u6D4F\u89C8\u5668\u4E2D\u6253\u5F00\u5B8C\u6574\u7684 Qwen Code \u6587\u6863",
|
|
178
180
|
"Configuration not available.": "\u914D\u7F6E\u4E0D\u53EF\u7528",
|
|
179
181
|
"Connect an LLM provider": "\u8FDE\u63A5 LLM \u63D0\u4F9B\u5546",
|
|
@@ -480,6 +482,7 @@ var zh_default = {
|
|
|
480
482
|
"Update all extensions.": "\u66F4\u65B0\u6240\u6709\u6269\u5C55\u3002",
|
|
481
483
|
"The name of the extension to update.": "\u8981\u66F4\u65B0\u7684\u6269\u5C55\u540D\u79F0\u3002",
|
|
482
484
|
"Either an extension name or --all must be provided": "\u5FC5\u987B\u63D0\u4F9B\u6269\u5C55\u540D\u79F0\u6216 --all",
|
|
485
|
+
"List installed extensions": "\u5217\u51FA\u5DF2\u5B89\u88C5\u7684\u6269\u5C55",
|
|
483
486
|
"Lists installed extensions.": "\u5217\u51FA\u5DF2\u5B89\u88C5\u7684\u6269\u5C55\u3002",
|
|
484
487
|
"Path:": "\u8DEF\u5F84\uFF1A",
|
|
485
488
|
"Source:": "\u6765\u6E90\uFF1A",
|
|
@@ -1509,7 +1512,8 @@ var zh_default = {
|
|
|
1509
1512
|
"start server": "\u542F\u52A8\u670D\u52A1\u5668",
|
|
1510
1513
|
"\u4E2D\u56FD (China)": "\u4E2D\u56FD",
|
|
1511
1514
|
"\u4E2D\u56FD (China) - \u963F\u91CC\u4E91\u767E\u70BC": "\u4E2D\u56FD - \u963F\u91CC\u4E91\u767E\u70BC",
|
|
1512
|
-
"\u963F\u91CC\u4E91\u767E\u70BC (aliyun.com)": "\u963F\u91CC\u4E91\u767E\u70BC\uFF08aliyun.com\uFF09"
|
|
1515
|
+
"\u963F\u91CC\u4E91\u767E\u70BC (aliyun.com)": "\u963F\u91CC\u4E91\u767E\u70BC\uFF08aliyun.com\uFF09",
|
|
1516
|
+
"No compression needed.": "\u65E0\u9700\u538B\u7F29\u3002"
|
|
1513
1517
|
};
|
|
1514
1518
|
export {
|
|
1515
1519
|
zh_default as default
|
|
@@ -87,6 +87,7 @@ var zh_TW_default = {
|
|
|
87
87
|
"Analyzes the project and creates a tailored QWEN.md file.": "\u5206\u6790\u9805\u76EE\u4E26\u5275\u5EFA\u5B9A\u88FD\u7684 QWEN.md \u6A94\u6848",
|
|
88
88
|
"List available Qwen Code tools. Usage: /tools [desc]": "\u5217\u51FA\u53EF\u7528\u7684 Qwen Code \u5DE5\u5177\u3002\u7528\u6CD5\uFF1A/tools [desc]",
|
|
89
89
|
"Open the skills panel (browse, search, toggle, pick).": "\u958B\u555F\u6280\u80FD\u9762\u677F\uFF08\u700F\u89BD\u3001\u641C\u5C0B\u3001\u555F\u505C\u3001\u9078\u64C7\uFF09\u3002",
|
|
90
|
+
"Move this session to a new working directory": "\u5C07\u6B64\u6703\u8A71\u79FB\u52D5\u5230\u65B0\u7684\u5DE5\u4F5C\u76EE\u9304",
|
|
90
91
|
"Manage Skills": "\u7BA1\u7406\u6280\u80FD",
|
|
91
92
|
"Skills configuration saved.": "\u6280\u80FD\u8A2D\u5B9A\u5DF2\u5132\u5B58\u3002",
|
|
92
93
|
"Skills configuration saved, but refresh failed: {{error}}. Restart to ensure the new state is applied.": "\u6280\u80FD\u8A2D\u5B9A\u5DF2\u5132\u5B58\uFF0C\u4F46\u91CD\u65B0\u6574\u7406\u5931\u6557\uFF1A{{error}}\u3002\u8ACB\u91CD\u65B0\u555F\u52D5\u4EE5\u78BA\u4FDD\u65B0\u72C0\u614B\u751F\u6548\u3002",
|
|
@@ -159,6 +160,7 @@ var zh_TW_default = {
|
|
|
159
160
|
'Theme "{{themeName}}" not found in selected scope.': '\u5728\u6240\u9078\u4F5C\u7528\u57DF\u4E2D\u672A\u627E\u5230\u4E3B\u984C "{{themeName}}"\u3002',
|
|
160
161
|
"Clear conversation history and free up context": "\u6E05\u9664\u5C0D\u8A71\u6B77\u53F2\u4E26\u91CB\u653E\u4E0A\u4E0B\u6587",
|
|
161
162
|
"Compresses the context by replacing it with a summary.": "\u901A\u904E\u6458\u8981\u66FF\u63DB\u4F86\u58D3\u7E2E\u4E0A\u4E0B\u6587",
|
|
163
|
+
"Fast context compression without AI. Strips old tool outputs and thinking parts.": "\u7121\u9700 AI \u7684\u5FEB\u901F\u4E0A\u4E0B\u6587\u58D3\u7E2E\u3002\u6E05\u7406\u820A\u5DE5\u5177\u8F38\u51FA\u4E26\u525D\u96E2\u601D\u8003\u904E\u7A0B\u3002",
|
|
162
164
|
"open full Qwen Code documentation in your browser": "\u5728\u700F\u89BD\u5668\u4E2D\u6253\u958B\u5B8C\u6574\u7684 Qwen Code \u6587\u6A94",
|
|
163
165
|
"Configuration not available.": "\u914D\u7F6E\u4E0D\u53EF\u7528",
|
|
164
166
|
"Connect an LLM provider": "\u9023\u63A5 LLM \u63D0\u4F9B\u5546",
|
|
@@ -442,6 +444,7 @@ var zh_TW_default = {
|
|
|
442
444
|
"Update all extensions.": "\u66F4\u65B0\u6240\u6709\u64F4\u5C55\u3002",
|
|
443
445
|
"The name of the extension to update.": "\u8981\u66F4\u65B0\u7684\u64F4\u5C55\u540D\u7A31\u3002",
|
|
444
446
|
"Either an extension name or --all must be provided": "\u5FC5\u9808\u63D0\u4F9B\u64F4\u5C55\u540D\u7A31\u6216 --all",
|
|
447
|
+
"List installed extensions": "\u5217\u51FA\u5DF2\u5B89\u88DD\u7684\u64F4\u5C55",
|
|
445
448
|
"Lists installed extensions.": "\u5217\u51FA\u5DF2\u5B89\u88DD\u7684\u64F4\u5C55\u3002",
|
|
446
449
|
"Path:": "\u8DEF\u5F91\uFF1A",
|
|
447
450
|
"Source:": "\u4F86\u6E90\uFF1A",
|
|
@@ -1345,7 +1348,8 @@ var zh_TW_default = {
|
|
|
1345
1348
|
"\u2191 tabs \xB7 r to cycle dates \xB7 esc to close": "\u2191 tab \u5207\u63DB\u6A19\u7C64 \xB7 r \u5207\u63DB\u6642\u9593\u7BC4\u570D \xB7 esc \u95DC\u9589",
|
|
1346
1349
|
// === Same-as-English optimization ===
|
|
1347
1350
|
" (not in model registry)": "\uFF08\u4E0D\u5728\u6A21\u578B\u8A3B\u518A\u8868\u4E2D\uFF09",
|
|
1348
|
-
"start server": "\u555F\u52D5\u4F3A\u670D\u5668"
|
|
1351
|
+
"start server": "\u555F\u52D5\u4F3A\u670D\u5668",
|
|
1352
|
+
"No compression needed.": "\u7121\u9700\u58D3\u7E2E\u3002"
|
|
1349
1353
|
};
|
|
1350
1354
|
export {
|
|
1351
1355
|
zh_TW_default as default
|