@qwen-code/qwen-code 0.21.14-preview.0 → 0.21.14
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/chunks/{MaxSizedBox-3PZITE2Y.js → MaxSizedBox-67IDQILY.js} +3 -3
- package/chunks/{StandaloneSessionPicker-2C34PNGO.js → StandaloneSessionPicker-G4QJIRMH.js} +17 -17
- package/chunks/{acpAgent-3J4NHAYT.js → acpAgent-BS3YYO33.js} +38 -38
- package/chunks/{agent-VFX4RPP5.js → agent-EHHEXKWN.js} +3 -3
- package/chunks/{agent-headless-6WCF4J6N.js → agent-headless-UT2ZF76T.js} +3 -3
- package/chunks/{bridge-XR5ZSR7U.js → bridge-WQ4IL2RF.js} +4 -4
- package/chunks/{channel-settings-store-Z7BUEUJE.js → channel-settings-store-ZDFXY7VY.js} +9 -9
- package/chunks/{chunk-QIHHJKXT.js → chunk-2A6VQJYK.js} +5 -5
- package/chunks/{chunk-FCTLOVYW.js → chunk-3PWNVF6N.js} +1 -1
- package/chunks/{chunk-L6CCLB3G.js → chunk-3SL2P3WX.js} +1 -1
- package/chunks/{chunk-LLR424CQ.js → chunk-3YRVPHT3.js} +3 -3
- package/chunks/{chunk-2OA3JMRD.js → chunk-47L5MLB5.js} +2 -2
- package/chunks/{chunk-57KOJ2KZ.js → chunk-4SR45OM4.js} +1 -1
- package/chunks/{chunk-VHPMDDPT.js → chunk-4ZS3BLER.js} +3 -3
- package/chunks/{chunk-SR2LYSMT.js → chunk-544KT7X4.js} +1 -1
- package/chunks/{chunk-2JXDFSVE.js → chunk-55VKMB7X.js} +2 -2
- package/chunks/{chunk-K3CECR5C.js → chunk-5IJSFWQO.js} +4 -4
- package/chunks/{chunk-25GHLMQQ.js → chunk-6BJSYAML.js} +10 -10
- package/chunks/{chunk-XO24LIZC.js → chunk-6RDZLBSJ.js} +22 -22
- package/chunks/{chunk-ZXEAEZFN.js → chunk-73JUK3ZW.js} +3 -3
- package/chunks/{chunk-X3YA3YGG.js → chunk-7VNHO4MN.js} +2 -2
- package/chunks/{chunk-YXC7JYUI.js → chunk-C3T6M24E.js} +1 -1
- package/chunks/{chunk-GV3OIADZ.js → chunk-CEXU72GE.js} +1 -1
- package/chunks/{chunk-YFPZ3NNC.js → chunk-CZK622ZK.js} +1 -1
- package/chunks/{chunk-AQBHJ2IG.js → chunk-DHUPMYMC.js} +9 -9
- package/chunks/{chunk-73G3Z7QS.js → chunk-DRAONPUW.js} +2 -2
- package/chunks/{chunk-55PIFSP2.js → chunk-E5WQMF3K.js} +1 -1
- package/chunks/{chunk-ISRHAMNL.js → chunk-EOPBFLA5.js} +3 -3
- package/chunks/{chunk-6PDOHRN6.js → chunk-FN6M5WUL.js} +3 -3
- package/chunks/{chunk-DZCV3ZYU.js → chunk-G6KI5UOJ.js} +1 -1
- package/chunks/{chunk-PPTM4O4R.js → chunk-H3SHU2XU.js} +1 -1
- package/chunks/{chunk-EOCQCNV4.js → chunk-K2Y45XXS.js} +3 -3
- package/chunks/{chunk-VGAAAMRD.js → chunk-L3T4V5GZ.js} +1 -1
- package/chunks/{chunk-I7NTHW4C.js → chunk-LSO6EL4Y.js} +1 -1
- package/chunks/{chunk-G6FFFICU.js → chunk-MDIGJH5X.js} +3 -3
- package/chunks/{chunk-SGLPDKRT.js → chunk-MVHJZ3FZ.js} +1 -1
- package/chunks/{chunk-P425IVUK.js → chunk-N6RSOOWJ.js} +4 -4
- package/chunks/{chunk-SA7GBPEA.js → chunk-OEYAK5O6.js} +2 -2
- package/chunks/{chunk-WVIABDXV.js → chunk-OEZCXK7Y.js} +2 -2
- package/chunks/{chunk-XC377TLN.js → chunk-OFTPCOGR.js} +32 -32
- package/chunks/{chunk-SBRIBTYN.js → chunk-OJB5FYVK.js} +1 -1
- package/chunks/{chunk-MCG53LWC.js → chunk-P3AA6S7O.js} +1 -1
- package/chunks/{chunk-6DFPR7CS.js → chunk-PCETXVVV.js} +1 -1
- package/chunks/{chunk-PMS7O6SA.js → chunk-PHN4R2ZV.js} +1 -1
- package/chunks/{chunk-U6RZRKNM.js → chunk-PJSD2FOR.js} +10 -10
- package/chunks/{chunk-4V4DFJBS.js → chunk-QAVTWAHL.js} +2 -2
- package/chunks/{chunk-TNPWODIZ.js → chunk-QEHH23OM.js} +1 -1
- package/chunks/{chunk-S6CXQKDD.js → chunk-QRVHGEVY.js} +3 -3
- package/chunks/{chunk-QECSDJET.js → chunk-S7N3HUIB.js} +4 -4
- package/chunks/{chunk-NV6LW6FT.js → chunk-SCZU65AI.js} +2 -2
- package/chunks/{chunk-7OCSX7FC.js → chunk-SFJMFZT5.js} +1 -1
- package/chunks/{chunk-BOJNAPUE.js → chunk-SFTKAX4O.js} +1 -1
- package/chunks/{chunk-YIWH3MKK.js → chunk-TSMPNGBC.js} +2 -2
- package/chunks/{chunk-HGPMOXLZ.js → chunk-U657UZJN.js} +4 -4
- package/chunks/{chunk-OSAFWBNR.js → chunk-V6WEMZPD.js} +2 -2
- package/chunks/{chunk-OLZSWUZR.js → chunk-VFP5YOHJ.js} +5 -5
- package/chunks/{chunk-IOTPI425.js → chunk-VTOLYFWM.js} +1 -1
- package/chunks/{chunk-E5RS7LF4.js → chunk-W7EYJGN7.js} +6 -6
- package/chunks/{chunk-DRKYT2TR.js → chunk-WAO53ZQF.js} +1 -1
- package/chunks/{chunk-LRDB2OLB.js → chunk-XITLNXLX.js} +2 -2
- package/chunks/{chunk-KSGWAYNE.js → chunk-XYRBK56E.js} +114 -62
- package/chunks/{chunk-6VDPDHIP.js → chunk-Y4RVDOXV.js} +3 -3
- package/chunks/{chunk-RAQBBGS6.js → chunk-Y7QY6DKW.js} +3 -3
- package/chunks/{chunk-4KQ2TI2K.js → chunk-YHXQK4SR.js} +2 -2
- package/chunks/{computer-use-ABECHPS5.js → computer-use-YORZJQE5.js} +3 -3
- package/chunks/{contextCommand-4CD5HZQQ.js → contextCommand-PACHGIF4.js} +5 -5
- package/chunks/{core-runtime-2MOVQ4VX.js → core-runtime-6HD5DSPX.js} +3 -3
- package/chunks/{create-sub-session-L6NNHG5N.js → create-sub-session-IQFIPUQA.js} +3 -3
- package/chunks/{daemon-git-worktree-guard-BLXFEG4Q.js → daemon-git-worktree-guard-6P27GKSU.js} +3 -3
- package/chunks/{daemon-status-provider-XGD3TPTO.js → daemon-status-provider-SXS66ZIR.js} +8 -8
- package/chunks/{daemon-trust-policy-THEGCWPO.js → daemon-trust-policy-5QJHAS3N.js} +9 -9
- package/chunks/{daemon-trust-policy-monitor-L7L4ACWQ.js → daemon-trust-policy-monitor-JA2WZRZ3.js} +9 -9
- package/chunks/{deferred-core-runtime-YQLHDUGE.js → deferred-core-runtime-R2VWOVG3.js} +3 -3
- package/chunks/{earlyInputCapture-PCTXNW7N.js → earlyInputCapture-PQEEOFKJ.js} +3 -3
- package/chunks/{edit-QX2EGWYW.js → edit-RASZHTU2.js} +3 -3
- package/chunks/{enter-worktree-EM3ZZ2SB.js → enter-worktree-CH5OMHJE.js} +3 -3
- package/chunks/{enterPlanMode-ESCMVAKB.js → enterPlanMode-AQKR3CAH.js} +3 -3
- package/chunks/{environment-TOJI56YV.js → environment-7QRYIEBA.js} +5 -5
- package/chunks/{errors-DZ5FWWEM.js → errors-P2LL5452.js} +5 -5
- package/chunks/{exit-worktree-KUIJ36XA.js → exit-worktree-WUDL26CY.js} +3 -3
- package/chunks/{exitPlanMode-NFVY54FV.js → exitPlanMode-JM75SAUI.js} +3 -3
- package/chunks/{fast-path-JLQXJSH6.js → fast-path-KVNSOHVA.js} +2 -2
- package/chunks/{gemini-I7OT4FWL.js → gemini-ADMD2EOS.js} +36 -36
- package/chunks/{geminiContentGenerator-GRIS77NJ.js → geminiContentGenerator-CS3M7SOS.js} +1 -1
- package/chunks/{glob-7TBUUV6R.js → glob-WIJOGYVV.js} +3 -3
- package/chunks/{grep-743SYWCZ.js → grep-CIFRQBR7.js} +3 -3
- package/chunks/{handleAutoUpdate-GAOYUYOD.js → handleAutoUpdate-KJ4SN7DM.js} +7 -7
- package/chunks/{i18n-2ITURYX6.js → i18n-36SZUO4C.js} +4 -4
- package/chunks/{image-gen-4OIWDZD6.js → image-gen-R4B5VUYB.js} +1 -1
- package/chunks/{initializer-OC7LWA6X.js → initializer-CW5YCAOL.js} +9 -9
- package/chunks/{installationInfo-CO47QX3Q.js → installationInfo-NMQIOUGY.js} +4 -4
- package/chunks/{list-ATR2SFWT.js → list-HHGT3S4P.js} +12 -12
- package/chunks/{loadedSettingsAdapter-NK4B7AGK.js → loadedSettingsAdapter-SJ2MJF35.js} +9 -9
- package/chunks/{loggingContentGenerator-3WXBU5TQ.js → loggingContentGenerator-GR2QQ2C5.js} +1 -1
- package/chunks/{managed-npm-update-4SSBWI2D.js → managed-npm-update-ADQJHKTO.js} +4 -4
- package/chunks/{mcp-C62AE2QI.js → mcp-QW3OTL5W.js} +9 -9
- package/chunks/{monitor-FEYEGASA.js → monitor-RJKPVERH.js} +3 -3
- package/chunks/{nonInteractiveCli-AJEV5ZWO.js → nonInteractiveCli-MROMHSTL.js} +33 -33
- package/chunks/{notebook-edit-SLLTEY4O.js → notebook-edit-2ENWDBZO.js} +3 -3
- package/chunks/{openaiContentGenerator-WLUGIAPX.js → openaiContentGenerator-Z3GPWJU4.js} +1 -1
- package/chunks/{pidfile-TV2VWUMB.js → pidfile-5G42YSTP.js} +3 -3
- package/chunks/{processUtils-3IN2ZR55.js → processUtils-ZDMXYKQY.js} +2 -2
- package/chunks/{qwenContentGenerator-GSGRFPJE.js → qwenContentGenerator-NLEMBZVU.js} +3 -3
- package/chunks/{qwenOAuth2-JLSTIS4Z.js → qwenOAuth2-EBV52DWJ.js} +1 -1
- package/chunks/{read-file-6PZZRGZZ.js → read-file-5BYIF53O.js} +1 -1
- package/chunks/{resumeHistoryUtils-5GEWKOOO.js → resumeHistoryUtils-AFTBRS3G.js} +6 -6
- package/chunks/{ripGrep-FX7GBGFN.js → ripGrep-NN7AOLQY.js} +3 -3
- package/chunks/{run-qwen-serve-7RHU3NSV.js → run-qwen-serve-UR3DYDAF.js} +29 -29
- package/chunks/{runtime-EPOXAMLP.js → runtime-PR5RKGNH.js} +10 -10
- package/chunks/{scheduler-F4Y7ENVV.js → scheduler-GPMLVKJM.js} +5 -5
- package/chunks/{serve-LQV4TN5A.js → serve-E7V2JVA2.js} +9 -9
- package/chunks/{server-IZCKLIYQ.js → server-YXB3DBN7.js} +28 -28
- package/chunks/{session-52ZGTDVB.js → session-DZEAUT7S.js} +34 -34
- package/chunks/{settings-WCVB34HW.js → settings-ESZ3NWAP.js} +8 -8
- package/chunks/{shell-33BIUBLH.js → shell-JMSK5WIL.js} +3 -3
- package/chunks/{skill-IYVQ2QNK.js → skill-5K5CSUJV.js} +1 -1
- package/chunks/{skill-settings-YG4ZS4OZ.js → skill-settings-V64NIOTI.js} +8 -8
- package/chunks/{spawnChannel-BLA4YT4W.js → spawnChannel-S63APBZZ.js} +3 -3
- package/chunks/{standalone-update-ALRIPWSM.js → standalone-update-P42HDFXX.js} +5 -5
- package/chunks/{startInteractiveUI-PISBXWKA.js → startInteractiveUI-LFBLFHJ4.js} +42 -42
- package/chunks/{team-create-CIQDCC6A.js → team-create-EDNOUM2U.js} +3 -3
- package/chunks/{team-plan-approval-664XCRB4.js → team-plan-approval-QRSNK2DX.js} +3 -3
- package/chunks/{terminal-image-renderer-TEBO6ONY.js → terminal-image-renderer-6J2NPL32.js} +3 -3
- package/chunks/{theme-manager-3CIFH2JV.js → theme-manager-WJMLRBXS.js} +3 -3
- package/chunks/{tool-search-IJX5JHJB.js → tool-search-MZ6WU7DM.js} +1 -1
- package/chunks/{total-session-admission-XBK2NVRV.js → total-session-admission-DQVW2LIP.js} +4 -4
- package/chunks/{trustedFolders-OOFNLRWK.js → trustedFolders-QMH25GOX.js} +4 -4
- package/chunks/{update-relaunch-EIG7EYAQ.js → update-relaunch-EG75LLW5.js} +5 -5
- package/chunks/{updateCheck-KYDCBLSF.js → updateCheck-MTZIVGT5.js} +6 -6
- package/chunks/{useAutoAcceptIndicator-RFX3KNBN.js → useAutoAcceptIndicator-IGCW5EPO.js} +9 -9
- package/chunks/{validateNonInterActiveAuth-MZXSAITU.js → validateNonInterActiveAuth-D5FPAB2C.js} +30 -30
- package/chunks/{version-PJC6ZNXV.js → version-UOLDLLRB.js} +1 -1
- package/chunks/{web-fetch-XXICVGKQ.js → web-fetch-QKKW6CWH.js} +1 -1
- package/chunks/{web-search-LHPM6QWC.js → web-search-JYRBZMCW.js} +2 -2
- package/chunks/{workflow-4CUO2BV7.js → workflow-SR7SEAU7.js} +4 -4
- package/chunks/{workspace-providers-status-G4MUGH3X.js → workspace-providers-status-OXGV4EFF.js} +11 -11
- package/chunks/{workspace-registration-store-QMDMFWBE.js → workspace-registration-store-V5EGKLBH.js} +1 -1
- package/chunks/{workspace-registry-FKBB4MZK.js → workspace-registry-KJVIYTF5.js} +4 -4
- package/chunks/{workspace-service-TIDTTA65.js → workspace-service-6RLSGUB5.js} +12 -12
- package/chunks/{workspace-skills-status-LBC2TZKM.js → workspace-skills-status-BHFEPDGH.js} +9 -9
- package/chunks/{workspace-trust-reconciler-4KJ567XP.js → workspace-trust-reconciler-DB5ERSUN.js} +10 -10
- package/chunks/{write-file-R6LAEER5.js → write-file-IUP4GTZ4.js} +3 -3
- package/chunks/{zoom-image-XLCK6DDK.js → zoom-image-SRBDTIVA.js} +1 -1
- package/cli.js +12 -12
- package/package.json +3 -3
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
listCommand
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-5IJSFWQO.js";
|
|
6
6
|
import {
|
|
7
7
|
getErrorMessage as getErrorMessage2
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-XITLNXLX.js";
|
|
9
9
|
import {
|
|
10
10
|
serveCommand
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-Y7QY6DKW.js";
|
|
12
12
|
import {
|
|
13
13
|
OBSERVED_CONTACT_MAX_FRESH_WITHIN_SECONDS,
|
|
14
14
|
ObservedChannelContactStore
|
|
@@ -35,7 +35,7 @@ import {
|
|
|
35
35
|
collectProviderModelsForProtocol,
|
|
36
36
|
getAuthTypeFromEnv,
|
|
37
37
|
resolveCliGenerationConfig
|
|
38
|
-
} from "./chunk-
|
|
38
|
+
} from "./chunk-EOPBFLA5.js";
|
|
39
39
|
import {
|
|
40
40
|
resolveSkillSettings
|
|
41
41
|
} from "./chunk-Z4X5MTRT.js";
|
|
@@ -55,14 +55,14 @@ import {
|
|
|
55
55
|
registerToolCallDispatch,
|
|
56
56
|
selectFirstModel,
|
|
57
57
|
sessionsPath
|
|
58
|
-
} from "./chunk-
|
|
58
|
+
} from "./chunk-55VKMB7X.js";
|
|
59
59
|
import {
|
|
60
60
|
getExtensionManager,
|
|
61
61
|
requestChoicePluginNonInteractive,
|
|
62
62
|
requestConsentNonInteractive,
|
|
63
63
|
requestConsentOrFail,
|
|
64
64
|
resolveExtensionCommandScope
|
|
65
|
-
} from "./chunk-
|
|
65
|
+
} from "./chunk-U657UZJN.js";
|
|
66
66
|
import {
|
|
67
67
|
parseChannelConfig
|
|
68
68
|
} from "./chunk-NRPXRNN4.js";
|
|
@@ -135,33 +135,33 @@ import {
|
|
|
135
135
|
assembleMcpServers,
|
|
136
136
|
getPendingGatedMcpServers,
|
|
137
137
|
mcpCommand
|
|
138
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-S7N3HUIB.js";
|
|
139
139
|
import {
|
|
140
140
|
loadSettings
|
|
141
|
-
} from "./chunk-
|
|
141
|
+
} from "./chunk-VFP5YOHJ.js";
|
|
142
142
|
import {
|
|
143
143
|
detectSystemLanguage,
|
|
144
144
|
getCurrentLanguage,
|
|
145
145
|
initializeI18n,
|
|
146
146
|
resolveLanguageSetting,
|
|
147
147
|
t
|
|
148
|
-
} from "./chunk-
|
|
148
|
+
} from "./chunk-VTOLYFWM.js";
|
|
149
149
|
import {
|
|
150
150
|
loadEnvironment
|
|
151
|
-
} from "./chunk-
|
|
151
|
+
} from "./chunk-MVHJZ3FZ.js";
|
|
152
152
|
import {
|
|
153
153
|
resolveAcpChannelFallback,
|
|
154
154
|
scrubAndReportInheritedLoaderEnv
|
|
155
155
|
} from "./chunk-CXJHQVEK.js";
|
|
156
156
|
import {
|
|
157
157
|
getCliVersion
|
|
158
|
-
} from "./chunk-
|
|
158
|
+
} from "./chunk-PCETXVVV.js";
|
|
159
159
|
import {
|
|
160
160
|
getPackageJson
|
|
161
161
|
} from "./chunk-WZMH7II3.js";
|
|
162
162
|
import {
|
|
163
163
|
isWorkspaceTrusted
|
|
164
|
-
} from "./chunk-
|
|
164
|
+
} from "./chunk-C3T6M24E.js";
|
|
165
165
|
import {
|
|
166
166
|
require_strip_json_comments
|
|
167
167
|
} from "./chunk-NPQ5ZKRP.js";
|
|
@@ -203,7 +203,7 @@ import {
|
|
|
203
203
|
unquoteCStylePath,
|
|
204
204
|
updateChannelMemoryEntry,
|
|
205
205
|
updateSetting
|
|
206
|
-
} from "./chunk-
|
|
206
|
+
} from "./chunk-OFTPCOGR.js";
|
|
207
207
|
import {
|
|
208
208
|
parsePositiveIntegerEnv
|
|
209
209
|
} from "./chunk-6PVPNMXU.js";
|
|
@@ -13226,7 +13226,7 @@ You are undirected on purpose. Do not restrict yourself to the list.`
|
|
|
13226
13226
|
Read the JSON it prints:
|
|
13227
13227
|
|
|
13228
13228
|
- \`toolchain: "npm"\` \u2192 use its \`build[]\` / \`test[]\` results. A failure in a file **the diff changed** is a **Critical** (\`Source: [build]\` or \`[test]\`); a failure in a file it did **not** touch is pre-existing \u2014 say so, do not file it against this PR. A non-empty \`timedOut\`, or a failed \`install\`, is environment/infrastructure \u2014 informational, never a Critical. On \`ok: true\`, name the workspaces built and the commands run; a return that names no command is a whiff. Report the TEST coverage from \`testScope\`, never from assumption. \`testScope.workspaces\` lists exactly the suites that ran \u2014 say "tests scoped to <list> \u2014 the changed workspaces and their declared dependents that define a test script". \`testScope.notRun\`, when present, names suites the whole-call budget stopped before they ran \u2014 say they did not run, never fold them into the coverage. When \`testScope.caveat\` is present, the scope may be incomplete \u2014 quote the caveat and say exactly that. A green run is a claim about those suites only \u2014 do not phrase it as the whole suite passing.
|
|
13229
|
-
- **A suite left unrun is not a suite that passed \u2014 continue the run.** \`testScope.notRun\` names suites the whole-call budget could not reach, and a \`test[]\` entry with \`"clamped": true\` is a suite the budget started too late and killed (its deadline was shortened, so its timeout says nothing about the suite). A third shape
|
|
13229
|
+
- **A suite left unrun is not a suite that passed \u2014 continue the run.** \`testScope.notRun\` names suites the whole-call budget could not reach, and a \`test[]\` entry with \`"clamped": true\` is a suite the budget started too late and killed (its deadline was shortened, so its timeout says nothing about the suite). A third shape ends before any suite \u2014 a single-package repo whose budget ran out before its one suite has an empty \`test[]\`, no \`testScope\`, and \`"endedBeforeTests": true\` (the report's own stamp), with the \`note\` naming the unrun suite; read them before calling the dimension finished. That third shape cannot be continued \u2014 a continuation has no recorded scope to read, and a \`--resume\` on it answers "ended before its test phase" and points at a fresh run \u2014 so report the dimension UNFINISHED and do not spend a continuation on it. The first two mean the dimension is unfinished AND continuable: re-run the SAME \`build-test\` command with \`--resume\` \u2014 it skips install and build, runs only what is left, and merges into the same report file. The ${SHELL_TOOL_MAX_TIMEOUT_MS / 1e3}-second ceiling is per CALL, so this is the only way a repo whose suites do not fit one call ever finishes them (measured on this repo: \`packages/cli\` alone needs 401s, and install + builds + \`packages/core\` had already spent 285s). Keep resuming while work is left, up to ${MAX_RESUME_CALLS} continuations; then report what the run has, with \`notRun\` disclosed.
|
|
13230
13230
|
- **When any \`test[]\` command failed (exit non-zero, not a timeout), MEASURE which failures are the PR's before ruling by path.** The path rule above misclassifies in both directions \u2014 an environment-flaky test in a touched file gets filed as a Critical it did not cause, and a PR that breaks a test in an UNTOUCHED file gets waved through as pre-existing. The measurement is two commands: \`qwen review base-tree --plan <plan> --worktree <worktree> --out <plan dir>/qwen-review-pr-<n>-base-tree.json\` (builds the merge base beside the worktree). **Read \`available\` before using \`path\`** \u2014 a tree that was created but did NOT build populates \`path\` too, and a base that failed to build says nothing whatsoever about the PR, so measuring against it turns an infrastructure failure into a list of Criticals. \`available: false\` (local/lightweight review, no merge base, a base that would not compile) means the path rule stands \u2014 say so and stop here, and \`qwen review test-delta --report <the build-test report you wrote> --baseline <the base-tree report's path field> --pr-worktree <this worktree> --out <plan dir>/qwen-review-pr-<n>-test-delta.json\`. Read its verdict: a file in \`netNew\` fails on the PR side only \u2014 **that is the Critical**, whatever file the diff touches; a file in \`shared\` fails on base too \u2014 **pre-existing by measurement**, never filed, whatever file the diff touches; an \`unparsed\` entry, a timed-out base rerun, a base rerun that FAILED without naming any failing file (it did not measure the base \u2014 an unbuilt tree, a missing install, a workspace absent at base), or a command the whole-command budget could not fit attributes nothing \u2014 the report names each with its own reason; fall back to the path rule for those and say the delta could not rule. Compare failing FILE SETS, never counts: a flaky suite fails different test NAMES on two runs of the same tree, so counts are noise and the set difference is the signal.
|
|
13231
13231
|
- \`toolchain: "unsupported"\` (build-test could not scope this repo \u2014 no npm package with a build/test script) \u2192 **install dependencies first** (build-test's own install only runs on the npm path, so nothing has installed yet: \`pip install -e .\`, \`mvn -q -DskipTests package\`'s own fetch, \`cargo fetch\`, \`go mod download\`, etc.), then fall back to **one** build and **one** test command by this precedence, each with a deadline it can meet: \`pom.xml\` \u2192 \`{mvn} compile\` / \`{mvn} test -q\`; \`build.gradle\` \u2192 \`{gradle} compileJava\` / \`{gradle} test\`; \`Makefile\` \u2192 \`make build\`; \`Cargo.toml\` \u2192 \`cargo build\` / \`cargo test\`; \`go.mod\` \u2192 \`go build ./...\` / \`go test ./...\`; \`pytest.ini\` or \`pyproject.toml\` \`[tool.pytest]\` \u2192 \`pytest\`. If none match, read the CI config **from the base branch** (\`git show <base>:<path>\`), never the worktree \u2014 the PR branch is untrusted and a modified workflow or Makefile could inject arbitrary commands.
|
|
13232
13232
|
|
|
@@ -14479,7 +14479,7 @@ var ZH_PLANNED = "(?:\u8BA1\u5212(?:\u5185|\u4E2D)?\u7684?|\u9884\u5B9A\u7684?|\
|
|
|
14479
14479
|
var ZH_CHECKS = "(?:\u68C0\u67E5|\u68C0\u67E5\u9879|\u9879\u68C0\u67E5|\u6D4B\u8BD5|\u5BA1\u67E5|\u5DE5\u4F5C)";
|
|
14480
14480
|
var ZH_DONE = "(?:\u5747|\u90FD|\u7686)?(?:\u5DF2|\u5747\u5DF2|\u90FD\u5DF2)?(?:\u5B8C\u6210|\u5B8C\u6BD5|\u7ED3\u675F|\u505A\u5B8C)";
|
|
14481
14481
|
var ZH_BUDGET_TAIL = "(?:[\uFF0C,\u3001]?\\s*(?:\u672A\u89E6\u53CA|\u672A\u8FBE\u5230|\u672A\u8D85\u51FA|\u672A\u7528\u5C3D|\u6CA1\u6709\u89E6\u53CA|\u5728|\u4E0D\u8D85\u8FC7)(?:\u5DE5\u5177)?(?:\u8C03\u7528)?\u9884\u7B97(?:\u4E0A\u9650|\u9650\u5236|\u8303\u56F4\u5185)?)?";
|
|
14482
|
-
var ZH_TAIL = "[\u3002\uFF0E.!\uFF01\u2026,\uFF0C;\uFF1B:\uFF1A\\s]*$";
|
|
14482
|
+
var ZH_TAIL = "[\u3002\uFF0E.!\uFF01\u2026,\uFF0C;\uFF1B:\uFF1A\uFF1F\u3001\\s]*$";
|
|
14483
14483
|
var ZH_COMPLETION_CLAUSE = `${ZH_ALL}?${ZH_PLANNED}?${ZH_CHECKS}?${ZH_DONE}${ZH_BUDGET_TAIL}`;
|
|
14484
14484
|
var ZH_PLACEHOLDER = `${ZH_TOKEN}(?:${ZH_TAIL}|\\s*(?:${ZH_SEPARATOR})\\s*${ZH_COMPLETION_CLAUSE}${ZH_TAIL})`;
|
|
14485
14485
|
var PLACEHOLDER_GAP_RE = new RegExp(
|
|
@@ -14515,7 +14515,7 @@ function stripWrappers(s) {
|
|
|
14515
14515
|
return out;
|
|
14516
14516
|
}
|
|
14517
14517
|
__name(stripWrappers, "stripWrappers");
|
|
14518
|
-
var TRAILING_GAP_CHAR_RE = /[.!…,;:\s]/;
|
|
14518
|
+
var TRAILING_GAP_CHAR_RE = /[.!…,;:\s。,;:!?、.]/;
|
|
14519
14519
|
function stripTrailingGapChars(s) {
|
|
14520
14520
|
let end = s.length;
|
|
14521
14521
|
while (end > 0 && TRAILING_GAP_CHAR_RE.test(s.charAt(end - 1))) end--;
|
|
@@ -14549,11 +14549,13 @@ function budgetGapDisclosures(finalText) {
|
|
|
14549
14549
|
}
|
|
14550
14550
|
raw = stripWrappers(raw.trim()).trim();
|
|
14551
14551
|
const normalized = stripTrailingGapChars(raw).trim();
|
|
14552
|
-
const unparenthesized =
|
|
14552
|
+
const unparenthesized = stripTrailingGapChars(
|
|
14553
|
+
normalized.startsWith("(") && normalized.endsWith(")") || normalized.startsWith("\uFF08") && normalized.endsWith("\uFF09") ? normalized.slice(1, -1).trim() : normalized
|
|
14554
|
+
);
|
|
14553
14555
|
if (normalized.length === 0 || PLACEHOLDER_GAP_RE.test(unparenthesized)) {
|
|
14554
14556
|
continue;
|
|
14555
14557
|
}
|
|
14556
|
-
const key =
|
|
14558
|
+
const key = unparenthesized.toLowerCase();
|
|
14557
14559
|
if (seen.has(key)) continue;
|
|
14558
14560
|
seen.add(key);
|
|
14559
14561
|
gaps.push(truncateGap(raw));
|
|
@@ -14920,7 +14922,7 @@ function budgetStopDisclosure(round) {
|
|
|
14920
14922
|
subject: "reverse audit",
|
|
14921
14923
|
reason: `stopped before ${which} by the ${BUDGET_STOP_PHRASE}`,
|
|
14922
14924
|
subjectZh: "\u53CD\u5411\u5BA1\u8BA1",
|
|
14923
|
-
reasonZh:
|
|
14925
|
+
reasonZh: `${BUDGET_STOP_PHRASE_ZH}\u4E0D\u8DB3\uFF0C\u672A\u80FD\u5F00\u59CB${whichZh}`
|
|
14924
14926
|
};
|
|
14925
14927
|
}
|
|
14926
14928
|
__name(budgetStopDisclosure, "budgetStopDisclosure");
|
|
@@ -14941,7 +14943,7 @@ function roundCapStopDisclosure(cap) {
|
|
|
14941
14943
|
subject: "reverse audit",
|
|
14942
14944
|
reason: `did not converge within the ${ROUND_CAP_PHRASE} of ${cap}`,
|
|
14943
14945
|
subjectZh: "\u53CD\u5411\u5BA1\u8BA1",
|
|
14944
|
-
reasonZh: `\u5728 ${cap} \u8F6E\u7684\
|
|
14946
|
+
reasonZh: `\u5728 ${cap} \u8F6E\u7684${ROUND_CAP_PHRASE_ZH}\u5185\u672A\u6536\u655B`
|
|
14945
14947
|
};
|
|
14946
14948
|
}
|
|
14947
14949
|
__name(roundCapStopDisclosure, "roundCapStopDisclosure");
|
|
@@ -17901,11 +17903,23 @@ function floorEnforcedReroute(severityFloor, contextUnavailable, prevRound, draf
|
|
|
17901
17903
|
return { indices, entries };
|
|
17902
17904
|
}
|
|
17903
17905
|
__name(floorEnforcedReroute, "floorEnforcedReroute");
|
|
17906
|
+
function canonicalDimensionHead(s) {
|
|
17907
|
+
return s.toLowerCase().replace(/&/g, " and ").replace(/[-\s]+/g, "-").replace(/^the-/, "").replace(/-(?:check|verification)$/, "");
|
|
17908
|
+
}
|
|
17909
|
+
__name(canonicalDimensionHead, "canonicalDimensionHead");
|
|
17910
|
+
function squashedDimensionHead(s) {
|
|
17911
|
+
return canonicalDimensionHead(s).replace(/-/g, "");
|
|
17912
|
+
}
|
|
17913
|
+
__name(squashedDimensionHead, "squashedDimensionHead");
|
|
17914
|
+
var NON_DIFF_DIMENSION_HEADS = new Set(
|
|
17915
|
+
Object.values(BRIEFS).filter((b) => !b.readsDiff).map((b) => canonicalDimensionHead(b.publicLabel))
|
|
17916
|
+
);
|
|
17917
|
+
var NON_DIFF_DIMENSION_HEADS_SQUASHED = new Set(
|
|
17918
|
+
[...NON_DIFF_DIMENSION_HEADS].map((h) => h.replace(/-/g, ""))
|
|
17919
|
+
);
|
|
17904
17920
|
function isNonDiffDimensionGap(entry) {
|
|
17905
|
-
const head = entry.split(/[—–-]{1,2}\s/)[0].trim()
|
|
17906
|
-
return
|
|
17907
|
-
head
|
|
17908
|
-
);
|
|
17921
|
+
const head = entry.split(/[—–-]{1,2}\s/)[0].trim();
|
|
17922
|
+
return NON_DIFF_DIMENSION_HEADS.has(canonicalDimensionHead(head)) || NON_DIFF_DIMENSION_HEADS_SQUASHED.has(squashedDimensionHead(head));
|
|
17909
17923
|
}
|
|
17910
17924
|
__name(isNonDiffDimensionGap, "isNonDiffDimensionGap");
|
|
17911
17925
|
var UNVERIFIED_FINDING_TAG_RE = /—\s*\[unverified\]/gi;
|
|
@@ -18240,9 +18254,9 @@ function composeReviewBody(input, cliVersion, attribution, prevRound, reroute =
|
|
|
18240
18254
|
budgetStopEntryZh(stop.round ?? void 0)
|
|
18241
18255
|
]);
|
|
18242
18256
|
const isRoundCap = stop.cause === "round-cap";
|
|
18243
|
-
const
|
|
18257
|
+
const entries = [...canonicalStopEntries];
|
|
18244
18258
|
for (let i = unreviewed.length - 1; i >= 0; i--) {
|
|
18245
|
-
if (
|
|
18259
|
+
if (entries.some((c2) => unreviewed[i].includes(c2))) {
|
|
18246
18260
|
splicedForBudgetPhrase.push(unreviewed[i]);
|
|
18247
18261
|
unreviewed.splice(i, 1);
|
|
18248
18262
|
}
|
|
@@ -18887,7 +18901,7 @@ ${footer}`;
|
|
|
18887
18901
|
] : [];
|
|
18888
18902
|
const deferredShown = deferredSuggestions.slice(0, MAX_DEFERRED_SUGGESTION_LINES).map(renderDeferredEntry).map(boundDeferredLine);
|
|
18889
18903
|
const deferredMore = deferredSuggestions.length - deferredShown.length;
|
|
18890
|
-
const deferredRound = deferredSuggestions.length ? prevRound + 1 : 0;
|
|
18904
|
+
const deferredRound = deferredSuggestions.length ? Math.min(prevRound + 1, LEDGER_MAX_ROUND) : 0;
|
|
18891
18905
|
const unlicensedDeferralBlock = unlicensedDeferral === null ? [] : [
|
|
18892
18906
|
{
|
|
18893
18907
|
keep: 1,
|
|
@@ -22277,7 +22291,9 @@ function recoverLedger(reviews, login) {
|
|
|
22277
22291
|
}
|
|
22278
22292
|
if (!best) return { recovered: null, sawOwnReview };
|
|
22279
22293
|
let ledger = best.foreign ? stripAnchor(best.ledger) : best.ledger;
|
|
22280
|
-
|
|
22294
|
+
let mergedOverOwn = false;
|
|
22295
|
+
if (best.foreign && bestOwn && bestOwn.ledger.findings.length > 0) {
|
|
22296
|
+
mergedOverOwn = true;
|
|
22281
22297
|
const ownIds = new Set(bestOwn.ledger.findings.map((f) => f.id));
|
|
22282
22298
|
const merged = [
|
|
22283
22299
|
...bestOwn.ledger.findings,
|
|
@@ -22297,7 +22313,8 @@ function recoverLedger(reviews, login) {
|
|
|
22297
22313
|
commitId: best.commitId,
|
|
22298
22314
|
reviewId: best.id,
|
|
22299
22315
|
foreign: best.foreign,
|
|
22300
|
-
author: best.author
|
|
22316
|
+
author: best.author,
|
|
22317
|
+
merged: mergedOverOwn
|
|
22301
22318
|
},
|
|
22302
22319
|
sawOwnReview
|
|
22303
22320
|
};
|
|
@@ -22312,7 +22329,8 @@ function persistedAnchorSha(sideFilePath) {
|
|
|
22312
22329
|
}
|
|
22313
22330
|
}
|
|
22314
22331
|
__name(persistedAnchorSha, "persistedAnchorSha");
|
|
22315
|
-
function persistRecoveredLedger(sideFilePath, recovered,
|
|
22332
|
+
function persistRecoveredLedger(sideFilePath, recovered, flags) {
|
|
22333
|
+
const { noOwnReview, identityKnown } = flags;
|
|
22316
22334
|
const writeAtomic = /* @__PURE__ */ __name((text2) => {
|
|
22317
22335
|
const tmp = `${sideFilePath}.${process.pid}.tmp`;
|
|
22318
22336
|
writeFileSync11(tmp, text2);
|
|
@@ -22416,7 +22434,7 @@ function anchorRuling(ledger, running, code2, persistedSha) {
|
|
|
22416
22434
|
return `**Do NOT pass the reviewed-at sha as \`--since\`, and do not run git against it yourself.** It was certified by ${certifier}, and this review runs as ${runner}: "clean up to that sha" is the recorded identity's verdict, so scoping to it would carry this round past code the current one never reviewed. Review the FULL range. The findings below are still owed their rulings \u2014 the work list carries across models, only the anchor does not.`;
|
|
22417
22435
|
}
|
|
22418
22436
|
__name(anchorRuling, "anchorRuling");
|
|
22419
|
-
function renderLedgerSection(ledger, running, author = null, persistedSha = null) {
|
|
22437
|
+
function renderLedgerSection(ledger, running, author = null, merged = false, persistedSha = null) {
|
|
22420
22438
|
const cell = /* @__PURE__ */ __name((v) => v.replace(/\\/g, "\\\\").replace(/\|/g, "\\|").replace(/[\r\n]+/g, " "), "cell");
|
|
22421
22439
|
const code2 = /* @__PURE__ */ __name((v) => cell(v).replace(/`/g, "'"), "code");
|
|
22422
22440
|
const rows = ledger.findings.map(
|
|
@@ -22425,12 +22443,12 @@ function renderLedgerSection(ledger, running, author = null, persistedSha = null
|
|
|
22425
22443
|
return [
|
|
22426
22444
|
"## Previous /review round (machine ledger)",
|
|
22427
22445
|
"",
|
|
22428
|
-
`Round ${ledger.round}${ledger.sha ? `, reviewed at \`${code2(ledger.sha)}\`${ledger.model ? ` by \`${code2(ledger.model)}\`` : ""}` : ""}, recovered from
|
|
22446
|
+
`Round ${ledger.round}${ledger.sha ? `, reviewed at \`${code2(ledger.sha)}\`${ledger.model ? ` by \`${code2(ledger.model)}\`` : ""}` : ""}, recovered from ${author ? merged ? `**@${cell(author)}**'s round-${ledger.round} marker MERGED over this account's own latest findings \u2014 entries this account certified are its own claims, the rest are @${cell(author)}'s, and no incremental anchor travelled with the foreign marker (the sha never crosses accounts; this round is full-range unless a local cache supplies one)` : `the marker **@${cell(author)}**'s last posted review carried \u2014 another account, so these are THEIR claims and no incremental anchor travelled with them (the sha never crosses accounts; this round is full-range unless a local cache supplies one)` : `the marker this account's last posted review carried`}. **Every entry below is owed a this-round ruling** (fixed / still stands / cannot tell / superseded by <class-id>) under Step 6's previous-round rules \u2014 the ledger is a work list, not a verdict; re-assert each claim against the code before repeating or retiring it.${ledger.sha ? ` ${anchorRuling(ledger, running, code2, persistedSha)}` : ""}`,
|
|
22429
22447
|
// A truncated ledger must not read like a complete one. `dropped` exists
|
|
22430
22448
|
// to draw that line, and this is the only place a reader sees the list.
|
|
22431
22449
|
...ledger.dropped ? [
|
|
22432
22450
|
"",
|
|
22433
|
-
`**This list is PARTIAL**: ${ledger.dropped} further finding(s) from round ${ledger.round} did not fit the marker's size cap and are not here. Absence below is not evidence a finding was fixed \u2014 say so rather than reporting the missing ones as retired.`
|
|
22451
|
+
merged ? `**This list is PARTIAL**: ${ledger.dropped} further finding(s) did not survive into this merged list \u2014 lost to a source marker's size cap or to the merge's own re-cap, and not attributable to any single round's marker. Absence below is not evidence a finding was fixed \u2014 say so rather than reporting the missing ones as retired.` : `**This list is PARTIAL**: ${ledger.dropped} further finding(s) from round ${ledger.round} did not fit the marker's size cap and are not here. Absence below is not evidence a finding was fixed \u2014 say so rather than reporting the missing ones as retired.`
|
|
22434
22452
|
] : [],
|
|
22435
22453
|
"",
|
|
22436
22454
|
"| id | severity | location | title |",
|
|
@@ -22440,7 +22458,7 @@ function renderLedgerSection(ledger, running, author = null, persistedSha = null
|
|
|
22440
22458
|
].join("\n");
|
|
22441
22459
|
}
|
|
22442
22460
|
__name(renderLedgerSection, "renderLedgerSection");
|
|
22443
|
-
function buildMarkdown(prNumber, ownerRepo, meta, inline2, issue, reviews, prevLedger = null, me = "", prevLedgerAuthor = null, host, persistedSha = null) {
|
|
22461
|
+
function buildMarkdown(prNumber, ownerRepo, meta, inline2, issue, reviews, prevLedger = null, me = "", prevLedgerAuthor = null, prevLedgerMerged = false, host, persistedSha = null) {
|
|
22444
22462
|
const {
|
|
22445
22463
|
openRoots,
|
|
22446
22464
|
openBlockerRoots,
|
|
@@ -22485,6 +22503,7 @@ function buildMarkdown(prNumber, ownerRepo, meta, inline2, issue, reviews, prevL
|
|
|
22485
22503
|
prevLedger,
|
|
22486
22504
|
roundModelIdFrom(process.env),
|
|
22487
22505
|
prevLedgerAuthor,
|
|
22506
|
+
prevLedgerMerged,
|
|
22488
22507
|
persistedSha
|
|
22489
22508
|
)
|
|
22490
22509
|
);
|
|
@@ -22640,23 +22659,27 @@ async function runPrContext(args) {
|
|
|
22640
22659
|
}
|
|
22641
22660
|
const prevLedger = prevRecovered?.ledger ?? null;
|
|
22642
22661
|
const prevLedgerAuthor = prevRecovered?.foreign ? prevRecovered.author ?? null : null;
|
|
22662
|
+
const prevLedgerMerged = prevRecovered?.merged ?? false;
|
|
22643
22663
|
persistRecoveredLedger(
|
|
22644
22664
|
join17(dirname12(out), `qwen-review-pr-${prNumber}-prev-ledger.json`),
|
|
22645
22665
|
prevRecovered,
|
|
22646
|
-
|
|
22647
|
-
|
|
22648
|
-
|
|
22649
|
-
|
|
22650
|
-
|
|
22651
|
-
|
|
22652
|
-
|
|
22653
|
-
|
|
22654
|
-
|
|
22655
|
-
|
|
22656
|
-
|
|
22657
|
-
|
|
22658
|
-
|
|
22659
|
-
|
|
22666
|
+
{
|
|
22667
|
+
// Deletion is licensed ONLY by proof of true absence: a CONFIRMED
|
|
22668
|
+
// identity, and a non-empty list this run walked in which no submitted
|
|
22669
|
+
// review by that identity exists. An empty `reviews` may be an error
|
|
22670
|
+
// envelope ghApiAll flattened to []; an own review whose marker fails
|
|
22671
|
+
// to parse is a persistent state, not absence; and a failed identity
|
|
22672
|
+
// lookup proves nothing about anyone — all take the conservative strip
|
|
22673
|
+
// path. (A recovered foreign ledger also protects the file, but
|
|
22674
|
+
// through the helper's own recovered-first branch, not through this
|
|
22675
|
+
// flag.)
|
|
22676
|
+
noOwnReview: reviews.length > 0 && identityKnown && !recoveryThrew && !sawOwnReview,
|
|
22677
|
+
// Separately from deletion: an ANONYMOUS recovery (identity unknown)
|
|
22678
|
+
// must not replace the persisted work list — the helper's fourth
|
|
22679
|
+
// outcome. Every marker walks as foreign without a `me`, so the union
|
|
22680
|
+
// never protected the own list this run.
|
|
22681
|
+
identityKnown
|
|
22682
|
+
}
|
|
22660
22683
|
);
|
|
22661
22684
|
const persistedSha = persistedAnchorSha(
|
|
22662
22685
|
join17(dirname12(out), `qwen-review-pr-${prNumber}-prev-ledger.json`)
|
|
@@ -22673,6 +22696,7 @@ async function runPrContext(args) {
|
|
|
22673
22696
|
prevLedger,
|
|
22674
22697
|
me,
|
|
22675
22698
|
prevLedgerAuthor,
|
|
22699
|
+
prevLedgerMerged,
|
|
22676
22700
|
bakeHost,
|
|
22677
22701
|
persistedSha
|
|
22678
22702
|
);
|
|
@@ -25348,7 +25372,7 @@ function buildRoleBrief(report, role, opts = {}) {
|
|
|
25348
25372
|
` --out ${resolve18(dirname18(opts.planPath), outName)}`,
|
|
25349
25373
|
"```",
|
|
25350
25374
|
"",
|
|
25351
|
-
`**If the report says work is left, run it again with \`--resume\`.** The ${SHELL_TOOL_MAX_TIMEOUT_MS / 1e3}-second ceiling is per CALL, not per run: this repo needs more than one call to finish its suites (install, the builds, then \`packages/core\` at 106s and \`packages/cli\` at 401s, before the rest). Work is left when \`testScope.notRun\` is non-empty, or when any \`test[]\` entry has \`"clamped": true\` \u2014 a suite the budget started too late and killed, which says nothing about the suite. A third shape
|
|
25375
|
+
`**If the report says work is left, run it again with \`--resume\`.** The ${SHELL_TOOL_MAX_TIMEOUT_MS / 1e3}-second ceiling is per CALL, not per run: this repo needs more than one call to finish its suites (install, the builds, then \`packages/core\` at 106s and \`packages/cli\` at 401s, before the rest). Work is left when \`testScope.notRun\` is non-empty, or when any \`test[]\` entry has \`"clamped": true\` \u2014 a suite the budget started too late and killed, which says nothing about the suite. A third shape ends before any suite: a single-package repo whose budget ran out before its one suite has an empty \`test[]\`, no \`testScope\`, and \`"endedBeforeTests": true\` \u2014 the report's own stamp \u2014 with the note naming the unrun suite. That shape cannot be continued (a continuation has no recorded scope to read; a \`--resume\` on it answers "ended before its test phase" and points at a fresh run): report the dimension UNFINISHED and do not spend a continuation on it. A resumed call skips install and build and runs only what is left, merging into the SAME report file. Same \`timeout: ${SHELL_TOOL_MAX_TIMEOUT_MS}\`, and at most ${MAX_RESUME_CALLS} continuations \u2014 then report what the run has:`,
|
|
25352
25376
|
"",
|
|
25353
25377
|
"```bash",
|
|
25354
25378
|
`"\${QWEN_CODE_CLI:-qwen}" review build-test \\`,
|
|
@@ -26516,8 +26540,9 @@ function resumeNpmToolchain(args, previous) {
|
|
|
26516
26540
|
];
|
|
26517
26541
|
if (work.length === 0) {
|
|
26518
26542
|
const neverTested = previous.test.length === 0 && !previous.testScope;
|
|
26543
|
+
const endedEarly = neverTested && (previous.buildOnly === true || previous.ok === false || previous.endedBeforeTests === true);
|
|
26519
26544
|
return withNote(
|
|
26520
|
-
|
|
26545
|
+
endedEarly ? "Nothing to resume: the run being continued ended before its test phase, so it left no scope to continue \u2014 no suite ran. Re-run build-test without --resume." : neverTested ? "Nothing to resume: the run being continued completed with no suite to run." : "Nothing to resume: the run being continued reached every suite in scope."
|
|
26521
26546
|
);
|
|
26522
26547
|
}
|
|
26523
26548
|
const ranDirs = [];
|
|
@@ -26559,9 +26584,13 @@ function resumeNpmToolchain(args, previous) {
|
|
|
26559
26584
|
liveSegments.push(
|
|
26560
26585
|
`a --resume call ran ${ranDirs.length + replaced.size} more command(s), ${outstanding.length} still to run: ` + outstanding.join(", ")
|
|
26561
26586
|
);
|
|
26562
|
-
}
|
|
26587
|
+
}
|
|
26588
|
+
const provisionalOnly = stillClamped.filter(
|
|
26589
|
+
(c) => !outstanding.includes(c)
|
|
26590
|
+
);
|
|
26591
|
+
if (provisionalOnly.length > 0) {
|
|
26563
26592
|
liveSegments.push(
|
|
26564
|
-
`a --resume call left ${
|
|
26593
|
+
`a --resume call left ${provisionalOnly.length} command(s) provisional (killed on a budget-shortened deadline): ${provisionalOnly.join(", ")}`
|
|
26565
26594
|
);
|
|
26566
26595
|
}
|
|
26567
26596
|
const caveat = liveSegments.join("; ");
|
|
@@ -26585,6 +26614,11 @@ function resumeNpmToolchain(args, previous) {
|
|
|
26585
26614
|
// Recomputed, not inherited: the previous `false` may have been nothing
|
|
26586
26615
|
// but the clamped timeout this call just replaced with a pass.
|
|
26587
26616
|
ok: previous.build.every(succeeded) && mergedTest.every(succeeded),
|
|
26617
|
+
// Recomputed for the same staleness reason: the stamp claims the test
|
|
26618
|
+
// phase ENTERED and ran nothing, which any suite in `mergedTest`
|
|
26619
|
+
// falsifies. A continuation that ran none keeps it — the claim still
|
|
26620
|
+
// holds then. JSON.stringify drops the undefined key.
|
|
26621
|
+
endedBeforeTests: mergedTest.length === 0 ? previous.endedBeforeTests : void 0,
|
|
26588
26622
|
timedOut,
|
|
26589
26623
|
// REPLACED, not appended. The note being continued says things that were
|
|
26590
26624
|
// true when it was written and are not now — "the whole-call budget was
|
|
@@ -26633,9 +26667,10 @@ function resumedNote(previous, test2, timedOut, stillPending, stillClamped) {
|
|
|
26633
26667
|
`The budget was spent with ${stillPending.length} command(s) still to run \u2014 not run: ${stillPending.join(", ")}. Resume again to reach them.`
|
|
26634
26668
|
);
|
|
26635
26669
|
}
|
|
26636
|
-
|
|
26670
|
+
const provisionalOnly = stillClamped.filter((c) => !stillPending.includes(c));
|
|
26671
|
+
if (provisionalOnly.length > 0) {
|
|
26637
26672
|
parts.push(
|
|
26638
|
-
`${
|
|
26673
|
+
`${provisionalOnly.length} command(s) are still provisional \u2014 killed on a deadline the budget shortened, not on their own: ${provisionalOnly.join(", ")}. Resume again to give them a full one.`
|
|
26639
26674
|
);
|
|
26640
26675
|
}
|
|
26641
26676
|
if (stillPending.length === 0 && stillClamped.length === 0) {
|
|
@@ -26700,6 +26735,10 @@ function runNpmToolchain(args) {
|
|
|
26700
26735
|
build: [],
|
|
26701
26736
|
test: [],
|
|
26702
26737
|
...testScope ? { testScope } : {},
|
|
26738
|
+
// The probe stamp rides EVERY producer path: this return already
|
|
26739
|
+
// branches on args.buildOnly for its note, and a probe report without
|
|
26740
|
+
// the stamp lost its probe answer on --resume.
|
|
26741
|
+
...args.buildOnly ? { buildOnly: true } : {},
|
|
26703
26742
|
ok: true,
|
|
26704
26743
|
timedOut: [],
|
|
26705
26744
|
note: args.buildOnly ? `The diff changes ${changed.length} file(s), none of them inside a workspace. There is no package to build, and tests are out of scope for a build-only probe.` : testScope?.caveat ? `The diff changes ${changed.length} file(s), none of them inside a workspace. There is no package to build and no test to run, but the scope decision recorded a caveat: ${testScope.caveat}.` : `The diff changes ${changed.length} file(s), none of them inside a workspace (nothing the workspaces' tests can feel). There is no package to build and no test to run \u2014 this is a complete answer, not a skipped step.`
|
|
@@ -26722,7 +26761,12 @@ function runNpmToolchain(args) {
|
|
|
26722
26761
|
test: [],
|
|
26723
26762
|
ok: true,
|
|
26724
26763
|
timedOut: [],
|
|
26725
|
-
note: ""
|
|
26764
|
+
note: "",
|
|
26765
|
+
// Stamped structurally, not narrated: `--resume` on a report with no
|
|
26766
|
+
// tests and no scope needs to tell a deliberate probe apart from a
|
|
26767
|
+
// completed zero-suite run, and the note is prose an agent must never
|
|
26768
|
+
// have to parse.
|
|
26769
|
+
...args.buildOnly ? { buildOnly: true } : {}
|
|
26726
26770
|
};
|
|
26727
26771
|
const npmLock = existsSync10(join20(root, "package-lock.json"));
|
|
26728
26772
|
const installComplete = /* @__PURE__ */ __name(() => existsSync10(join20(root, "node_modules", ".package-lock.json")), "installComplete");
|
|
@@ -26876,6 +26920,9 @@ function runNpmToolchain(args) {
|
|
|
26876
26920
|
if (r.timedOut) results.timedOut.push(r.command);
|
|
26877
26921
|
if (r.exitCode !== 0) results.ok = false;
|
|
26878
26922
|
}
|
|
26923
|
+
if (results.test.length === 0 && notRun.length > 0) {
|
|
26924
|
+
results.endedBeforeTests = true;
|
|
26925
|
+
}
|
|
26879
26926
|
notRun.sort();
|
|
26880
26927
|
const partialNote = [
|
|
26881
26928
|
notBuilt.length > 0 ? `the build phase reached the whole-call budget \u2014 not built: ` + notBuilt.join(", ") : "",
|
|
@@ -27098,11 +27145,16 @@ function previousReport(out) {
|
|
|
27098
27145
|
})();
|
|
27099
27146
|
const strings = /* @__PURE__ */ __name((v) => Array.isArray(v) && v.every((e) => typeof e === "string" && e.length > 0), "strings");
|
|
27100
27147
|
const affectedOk = strings(parsed.affected);
|
|
27148
|
+
const buildOnlyShape = parsed.buildOnly;
|
|
27149
|
+
const buildOnlyOk = buildOnlyShape === void 0 || typeof buildOnlyShape === "boolean";
|
|
27150
|
+
const endedBeforeShape = parsed.endedBeforeTests;
|
|
27151
|
+
const endedBeforeOk = endedBeforeShape === void 0 || typeof endedBeforeShape === "boolean";
|
|
27152
|
+
const okOk = typeof parsed.ok === "boolean";
|
|
27101
27153
|
const notBuiltShape = parsed.notBuilt;
|
|
27102
27154
|
const notBuiltOk = notBuiltShape === void 0 || strings(notBuiltShape);
|
|
27103
27155
|
const scope = shape.testScope;
|
|
27104
27156
|
const scopeOk = scope === void 0 || typeof scope === "object" && scope !== null && !Array.isArray(scope) && strings(scope.workspaces) && (scope.notRun === void 0 || strings(scope.notRun)) && (scope.caveat === void 0 || typeof scope.caveat === "string") && (scope.liveCaveat === void 0 || typeof scope.liveCaveat === "string");
|
|
27105
|
-
if (!commandsOk(shape.test) || !commandsOk(shape.build) || !strings(shape.timedOut) || !affectedOk || !notBuiltOk || !scopeOk || !runOk) {
|
|
27157
|
+
if (!commandsOk(shape.test) || !commandsOk(shape.build) || !strings(shape.timedOut) || !affectedOk || !buildOnlyOk || !endedBeforeOk || !okOk || !notBuiltOk || !scopeOk || !runOk) {
|
|
27106
27158
|
throw new Error(
|
|
27107
27159
|
`build-test: --resume expected a build-test report at ${out}, and that file is not one. Run build-test without --resume first.`
|
|
27108
27160
|
);
|
|
@@ -27500,7 +27552,7 @@ init_esbuild_shims();
|
|
|
27500
27552
|
import { spawnSync as spawnSync6 } from "node:child_process";
|
|
27501
27553
|
import { existsSync as existsSync13, mkdirSync as mkdirSync22, readFileSync as readFileSync29, writeFileSync as writeFileSync20 } from "node:fs";
|
|
27502
27554
|
import { dirname as dirname20, resolve as resolve21 } from "node:path";
|
|
27503
|
-
var RERUNNABLE_COMMAND_RE =
|
|
27555
|
+
var RERUNNABLE_COMMAND_RE = TEST_COMMAND_RE;
|
|
27504
27556
|
var TRIM_MARKER_RE = /\.\.\. \[\d+ characters omitted/;
|
|
27505
27557
|
function run2(command, cwd, timeoutMs) {
|
|
27506
27558
|
const started = Date.now();
|
|
@@ -33226,10 +33278,10 @@ var updateCommand3 = {
|
|
|
33226
33278
|
stdioHelpers,
|
|
33227
33279
|
{ updateEventEmitter }
|
|
33228
33280
|
] = await Promise.all([
|
|
33229
|
-
import("./settings-
|
|
33230
|
-
import("./updateCheck-
|
|
33231
|
-
import("./installationInfo-
|
|
33232
|
-
import("./standalone-update-
|
|
33281
|
+
import("./settings-ESZ3NWAP.js"),
|
|
33282
|
+
import("./updateCheck-MTZIVGT5.js"),
|
|
33283
|
+
import("./installationInfo-NMQIOUGY.js"),
|
|
33284
|
+
import("./standalone-update-P42HDFXX.js"),
|
|
33233
33285
|
import("./stdioHelpers-7A2EE64Z.js"),
|
|
33234
33286
|
import("./updateEventEmitter-5MKC7BLQ.js")
|
|
33235
33287
|
]);
|
|
@@ -34420,7 +34472,7 @@ async function loadCliConfig(settings, argv, cwd = process.cwd(), overrideExtens
|
|
|
34420
34472
|
disabledSlashCommands: disabledSlashCommands.length > 0 ? disabledSlashCommands : void 0,
|
|
34421
34473
|
disabledSkillNamesProvider: bareMode || safeMode ? void 0 : disabledSkillNamesProvider,
|
|
34422
34474
|
terminalImageRenderSupportProvider: interactive ? async () => {
|
|
34423
|
-
const { getTerminalImageRenderSupport } = await import("./terminal-image-renderer-
|
|
34475
|
+
const { getTerminalImageRenderSupport } = await import("./terminal-image-renderer-6J2NPL32.js");
|
|
34424
34476
|
return getTerminalImageRenderSupport();
|
|
34425
34477
|
} : void 0,
|
|
34426
34478
|
disabledSkillLevels: bareMode || safeMode || !Array.isArray(settings.skills?.disabledLevels) ? void 0 : settings.skills.disabledLevels.filter(isSkillLevel),
|
|
@@ -2,16 +2,16 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
functionResponsePartsToString
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-6RDZLBSJ.js";
|
|
6
6
|
import {
|
|
7
7
|
observeHeadlessToolResultProjection,
|
|
8
8
|
observeHeadlessToolResultWire,
|
|
9
9
|
projectJsonStringToByteBudget
|
|
10
|
-
} from "./chunk-
|
|
10
|
+
} from "./chunk-K2Y45XXS.js";
|
|
11
11
|
import {
|
|
12
12
|
parseAndFormatApiError,
|
|
13
13
|
toolResultBoundaryArtifact
|
|
14
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-OFTPCOGR.js";
|
|
15
15
|
import {
|
|
16
16
|
formatVisionBridgeNoticeDisplay,
|
|
17
17
|
isVisionBridgeNoticeDisplay
|
|
@@ -27,10 +27,10 @@ import {
|
|
|
27
27
|
} from "./chunk-3VUENPWF.js";
|
|
28
28
|
import {
|
|
29
29
|
loadSettings
|
|
30
|
-
} from "./chunk-
|
|
30
|
+
} from "./chunk-VFP5YOHJ.js";
|
|
31
31
|
import {
|
|
32
32
|
MCP_BUDGET_WARN_FRACTION
|
|
33
|
-
} from "./chunk-
|
|
33
|
+
} from "./chunk-OFTPCOGR.js";
|
|
34
34
|
import {
|
|
35
35
|
parsePositiveIntegerEnv
|
|
36
36
|
} from "./chunk-6PVPNMXU.js";
|
|
@@ -422,7 +422,7 @@ var serveCommand = {
|
|
|
422
422
|
}
|
|
423
423
|
const externalToolGuardToken = process.env[EXTERNAL_TOOL_GUARD_TOKEN_ENV] ?? "";
|
|
424
424
|
delete process.env[EXTERNAL_TOOL_GUARD_TOKEN_ENV];
|
|
425
|
-
const { runQwenServe } = await import("./run-qwen-serve-
|
|
425
|
+
const { runQwenServe } = await import("./run-qwen-serve-UR3DYDAF.js");
|
|
426
426
|
try {
|
|
427
427
|
const handle = await runQwenServe({
|
|
428
428
|
port: argv.port,
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
} from "./chunk-2AUM35J5.js";
|
|
6
6
|
import {
|
|
7
7
|
getNpmCliPath
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-WAO53ZQF.js";
|
|
9
9
|
import {
|
|
10
10
|
t
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-VTOLYFWM.js";
|
|
12
12
|
import {
|
|
13
13
|
getPackageJson
|
|
14
14
|
} from "./chunk-WZMH7II3.js";
|
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
Client,
|
|
5
5
|
So,
|
|
6
6
|
StdioClientTransport
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-OFTPCOGR.js";
|
|
8
8
|
import "./chunk-GOFAQQZA.js";
|
|
9
9
|
import "./chunk-5M6IDOMF.js";
|
|
10
10
|
import "./chunk-TWPJO254.js";
|
|
@@ -14,7 +14,7 @@ import "./chunk-SLILKYV2.js";
|
|
|
14
14
|
import "./chunk-NVRMCWTP.js";
|
|
15
15
|
import "./chunk-AKBOLMUF.js";
|
|
16
16
|
import "./chunk-6PVPNMXU.js";
|
|
17
|
-
import "./chunk-
|
|
17
|
+
import "./chunk-544KT7X4.js";
|
|
18
18
|
import "./chunk-IRH27ZC2.js";
|
|
19
19
|
import "./chunk-QHWCP53L.js";
|
|
20
20
|
import "./chunk-OBJYN4MX.js";
|
|
@@ -64,7 +64,7 @@ import {
|
|
|
64
64
|
BaseDeclarativeTool,
|
|
65
65
|
BaseToolInvocation
|
|
66
66
|
} from "./chunk-6HY6IF3Z.js";
|
|
67
|
-
import "./chunk-
|
|
67
|
+
import "./chunk-2A6VQJYK.js";
|
|
68
68
|
import "./chunk-F6WFNA7U.js";
|
|
69
69
|
import "./chunk-WZAD4ZNJ.js";
|
|
70
70
|
import "./chunk-FPGTNKCP.js";
|
|
@@ -4,12 +4,12 @@ import {
|
|
|
4
4
|
collectContextData,
|
|
5
5
|
contextCommand,
|
|
6
6
|
formatContextUsageText
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-7VNHO4MN.js";
|
|
8
8
|
import "./chunk-4WGODMVR.js";
|
|
9
9
|
import "./chunk-EKTCKZV5.js";
|
|
10
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-VTOLYFWM.js";
|
|
11
11
|
import "./chunk-5EJZE3FP.js";
|
|
12
|
-
import "./chunk-
|
|
12
|
+
import "./chunk-OFTPCOGR.js";
|
|
13
13
|
import "./chunk-GOFAQQZA.js";
|
|
14
14
|
import "./chunk-5M6IDOMF.js";
|
|
15
15
|
import "./chunk-TWPJO254.js";
|
|
@@ -19,7 +19,7 @@ import "./chunk-SLILKYV2.js";
|
|
|
19
19
|
import "./chunk-NVRMCWTP.js";
|
|
20
20
|
import "./chunk-AKBOLMUF.js";
|
|
21
21
|
import "./chunk-6PVPNMXU.js";
|
|
22
|
-
import "./chunk-
|
|
22
|
+
import "./chunk-544KT7X4.js";
|
|
23
23
|
import "./chunk-IRH27ZC2.js";
|
|
24
24
|
import "./chunk-QHWCP53L.js";
|
|
25
25
|
import "./chunk-OBJYN4MX.js";
|
|
@@ -66,7 +66,7 @@ import "./chunk-CHHABXPE.js";
|
|
|
66
66
|
import "./chunk-MA2HEDVP.js";
|
|
67
67
|
import "./chunk-XUJNK7Y6.js";
|
|
68
68
|
import "./chunk-6HY6IF3Z.js";
|
|
69
|
-
import "./chunk-
|
|
69
|
+
import "./chunk-2A6VQJYK.js";
|
|
70
70
|
import "./chunk-F6WFNA7U.js";
|
|
71
71
|
import "./chunk-WZAD4ZNJ.js";
|
|
72
72
|
import "./chunk-FPGTNKCP.js";
|
|
@@ -6,7 +6,7 @@ import {
|
|
|
6
6
|
findProviderById,
|
|
7
7
|
getDefaultModelIds,
|
|
8
8
|
resolveBaseUrl
|
|
9
|
-
} from "./chunk-
|
|
9
|
+
} from "./chunk-OFTPCOGR.js";
|
|
10
10
|
import "./chunk-GOFAQQZA.js";
|
|
11
11
|
import "./chunk-5M6IDOMF.js";
|
|
12
12
|
import "./chunk-TWPJO254.js";
|
|
@@ -16,7 +16,7 @@ import "./chunk-SLILKYV2.js";
|
|
|
16
16
|
import "./chunk-NVRMCWTP.js";
|
|
17
17
|
import "./chunk-AKBOLMUF.js";
|
|
18
18
|
import "./chunk-6PVPNMXU.js";
|
|
19
|
-
import "./chunk-
|
|
19
|
+
import "./chunk-544KT7X4.js";
|
|
20
20
|
import "./chunk-IRH27ZC2.js";
|
|
21
21
|
import "./chunk-QHWCP53L.js";
|
|
22
22
|
import "./chunk-OBJYN4MX.js";
|
|
@@ -80,7 +80,7 @@ import "./chunk-CHHABXPE.js";
|
|
|
80
80
|
import "./chunk-MA2HEDVP.js";
|
|
81
81
|
import "./chunk-XUJNK7Y6.js";
|
|
82
82
|
import "./chunk-6HY6IF3Z.js";
|
|
83
|
-
import "./chunk-
|
|
83
|
+
import "./chunk-2A6VQJYK.js";
|
|
84
84
|
import "./chunk-F6WFNA7U.js";
|
|
85
85
|
import "./chunk-WZAD4ZNJ.js";
|
|
86
86
|
import "./chunk-FPGTNKCP.js";
|