@qwen-code/qwen-code 0.21.9 → 0.21.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/qc-helper/docs/configuration/settings.md +1 -1
- package/bundled/qc-helper/docs/features/status-line.md +13 -13
- package/bundled/qc-helper/docs/integration-jetbrains.md +1 -0
- package/bundled/qc-helper/docs/reference/keyboard-shortcuts.md +14 -10
- package/bundled/review/SKILL.md +2 -2
- package/chunks/{MaxSizedBox-6BZANW7X.js → MaxSizedBox-FKXYULMW.js} +5 -5
- package/chunks/{StandaloneSessionPicker-VDC5KE7T.js → StandaloneSessionPicker-OQS3M7AY.js} +19 -19
- package/chunks/{acp-startup-profiler-B5BYAMYQ.js → acp-startup-profiler-VNTFWYAC.js} +2 -2
- package/chunks/{acpAgent-F2NSBCUF.js → acpAgent-AGS6HLQQ.js} +95 -43
- package/chunks/{agent-VOHJOEBB.js → agent-4NCVO27U.js} +5 -5
- package/chunks/{agent-headless-J5NFOPHP.js → agent-headless-HYEHZFH6.js} +5 -5
- package/chunks/{anthropicContentGenerator-SSFE2753.js → anthropicContentGenerator-D3Y4RFT4.js} +1 -1
- package/chunks/{bridge-NQIZZLAS.js → bridge-FHINXZMN.js} +8 -8
- package/chunks/{channel-settings-store-VIY2OENO.js → channel-settings-store-OXYG5S5X.js} +11 -11
- package/chunks/{channel-worker-group-MSHT6CWR.js → channel-worker-group-WQP4RCDO.js} +3 -3
- package/chunks/{channel-worker-manager-XXD3GDSK.js → channel-worker-manager-MRDFAKIM.js} +3 -3
- package/chunks/{chunk-7AEPJGL4.js → chunk-26CXSA6V.js} +1 -1
- package/chunks/{chunk-KTQGGPGV.js → chunk-2PLNY5TN.js} +4 -4
- package/chunks/{chunk-G2TX5ZXC.js → chunk-47PEPJO7.js} +3 -3
- package/chunks/{chunk-3XVDTHBJ.js → chunk-4MKXUHXY.js} +2 -2
- package/chunks/{chunk-D7BXVKSF.js → chunk-4WL6SY4F.js} +1 -1
- package/chunks/{chunk-P3RBMQ4P.js → chunk-5MZCSWI4.js} +4 -4
- package/chunks/{chunk-LP2QGNSP.js → chunk-624NHDGB.js} +3 -1
- package/chunks/{chunk-FBMCDU63.js → chunk-6LP743KE.js} +4 -4
- package/chunks/{chunk-II6G3EY6.js → chunk-7GTMV7UE.js} +339 -213
- package/chunks/{chunk-4XQNB3KN.js → chunk-A7XMDZRI.js} +2 -2
- package/chunks/{chunk-PNBBJOCP.js → chunk-AAE6SR4Q.js} +1 -1
- package/chunks/{chunk-JUWS2Z5K.js → chunk-ABVRJU3D.js} +5 -5
- package/chunks/{chunk-IOEZE2YT.js → chunk-AEL7KN2O.js} +1 -1
- package/chunks/{chunk-OGDIJKHK.js → chunk-AQAJJMRR.js} +1 -1
- package/chunks/{chunk-AKJQSWV4.js → chunk-BSI645OU.js} +2 -2
- package/chunks/{chunk-FCLHHEUK.js → chunk-D27I6YJT.js} +11 -11
- package/chunks/{chunk-P2FK2HBV.js → chunk-DCZEPFB4.js} +2 -2
- package/chunks/{chunk-GAKGOXTC.js → chunk-EBZ6BJTF.js} +1 -1
- package/chunks/{chunk-KSAFZ5TA.js → chunk-ECWR5LQR.js} +1 -1
- package/chunks/{chunk-XX7QFP34.js → chunk-EI3NWELG.js} +116 -62
- package/chunks/{chunk-P4ZEZSJZ.js → chunk-F24A2JBM.js} +260 -65
- package/chunks/{chunk-DH5YXSIF.js → chunk-F6WDTQ3M.js} +2 -2
- package/chunks/{chunk-ZOSTTOUJ.js → chunk-GWVUR3QZ.js} +1 -1
- package/chunks/{chunk-BZP4QPNK.js → chunk-IBUGFUXC.js} +9 -9
- package/chunks/{chunk-SCAZZ3Q4.js → chunk-IRZ2ZH72.js} +4 -4
- package/chunks/{chunk-OGNFHGIG.js → chunk-IWTMYQ32.js} +4 -4
- package/chunks/{chunk-CG3WBKJK.js → chunk-JT7XS4YW.js} +1 -1
- package/chunks/{chunk-MTCYGTWH.js → chunk-KID7K6H2.js} +4 -4
- package/chunks/{chunk-DGEIYUC3.js → chunk-KM73TBQ4.js} +7 -1
- package/chunks/{chunk-TZ6KJ44L.js → chunk-KONVMRK7.js} +1 -1
- package/chunks/{scheduler-YNQNOU2E.js → chunk-KZ22NXBY.js} +238 -110
- package/chunks/{chunk-RBHQXGDK.js → chunk-LLCWZQCU.js} +1 -1
- package/chunks/{chunk-UJUM2SRN.js → chunk-MIKXJYZB.js} +27 -26
- package/chunks/{chunk-THIKWITR.js → chunk-NDU63YLI.js} +2 -2
- package/chunks/{chunk-ATMO54WE.js → chunk-NEOXOWYH.js} +2 -2
- package/chunks/{chunk-QSNSL4R4.js → chunk-NRLFZWCT.js} +1 -1
- package/chunks/{chunk-TQCYNLNJ.js → chunk-NV65ZUVM.js} +1 -1
- package/chunks/{chunk-HZGBKOX3.js → chunk-O3EU6GMH.js} +2 -2
- package/chunks/{chunk-46YJDYCU.js → chunk-OCSFNUU4.js} +7 -7
- package/chunks/{chunk-T5RLUXWJ.js → chunk-OJUQF2PL.js} +2 -2
- package/chunks/{chunk-ZTQSOV56.js → chunk-OONWZLFK.js} +3 -3
- package/chunks/{chunk-23VQTELM.js → chunk-P3BJLFSZ.js} +1 -1
- package/chunks/{chunk-BIRWP6LU.js → chunk-Q3AL4JQ3.js} +1 -1
- package/chunks/{chunk-CMOBWHWW.js → chunk-QBJYSIQ4.js} +1 -1
- package/chunks/{chunk-XTY5DN4Y.js → chunk-QG3FFJYU.js} +1 -1
- package/chunks/{chunk-W3FSZSF2.js → chunk-QGNOFE5E.js} +1 -1
- package/chunks/{chunk-3WDYBTTI.js → chunk-QJMOAMXT.js} +4 -4
- package/chunks/{chunk-67N6HB5H.js → chunk-QUI267ZP.js} +1 -0
- package/chunks/{chunk-K4ADGWHU.js → chunk-TRRF5BSP.js} +1 -1
- package/chunks/{chunk-7GOYZQPR.js → chunk-UBX6NL47.js} +3 -3
- package/chunks/{chunk-WP5VOXF7.js → chunk-UEOKWYGY.js} +1 -1
- package/chunks/{chunk-HADWBW5R.js → chunk-UMD7WQTR.js} +4 -4
- package/chunks/{chunk-RVSTTOJ4.js → chunk-URKIBIFC.js} +2 -2
- package/chunks/{chunk-7S4JBJLU.js → chunk-VSFKIRRW.js} +3 -3
- package/chunks/{chunk-ZBXGWQ4S.js → chunk-VWKER4ZH.js} +2 -2
- package/chunks/{chunk-M2PNLYGY.js → chunk-W5UC37EE.js} +2 -0
- package/chunks/{chunk-BT6GQIEJ.js → chunk-X2UOOG5V.js} +1 -1
- package/chunks/{chunk-WGK4TSB7.js → chunk-XVHYA33G.js} +3 -3
- package/chunks/{chunk-BAMN6XSD.js → chunk-Y3OVRWRY.js} +1 -1
- package/chunks/{chunk-PVOGHGSF.js → chunk-Y4R47ZUH.js} +6 -6
- package/chunks/{chunk-LZZLUCRS.js → chunk-YF5MALI4.js} +3 -3
- package/chunks/{chunk-5RBDAGC6.js → chunk-YWPSGJFI.js} +2 -2
- package/chunks/{chunk-MHP476D3.js → chunk-Z4JX4NSH.js} +52 -39
- package/chunks/{chunk-T6HEQR2Q.js → chunk-ZJ4W6SUY.js} +1 -1
- package/chunks/{chunk-UYAUA63Q.js → chunk-ZRBMO3C7.js} +1 -1
- package/chunks/{chunk-KTKYGS2P.js → chunk-ZZCWJWTF.js} +8 -1
- package/chunks/{computer-use-PMZ7ICGY.js → computer-use-WQFK33Z3.js} +5 -5
- package/chunks/{contextCommand-GEZU7YHE.js → contextCommand-7EOZND7C.js} +7 -7
- package/chunks/{core-runtime-HRJI2MN6.js → core-runtime-FGMQRM6E.js} +5 -5
- package/chunks/{create-sub-session-VBNVI4YU.js → create-sub-session-QM2K5HLZ.js} +6 -6
- package/chunks/{daemon-POSQPD3G.js → daemon-GWD7BT6E.js} +46 -5
- package/chunks/{daemon-status-provider-N4CRQKFI.js → daemon-status-provider-L3J6GKCT.js} +12 -12
- package/chunks/{daemon-trust-policy-BHO3JUHM.js → daemon-trust-policy-4PHPY23S.js} +11 -11
- package/chunks/{daemon-trust-policy-monitor-YEKJ2726.js → daemon-trust-policy-monitor-6UKEABN5.js} +11 -11
- package/chunks/{deferred-core-runtime-SH57E3J3.js → deferred-core-runtime-67GJXHXS.js} +5 -5
- package/chunks/{earlyInputCapture-B2JJ2HME.js → earlyInputCapture-IWMYR6OB.js} +5 -5
- package/chunks/{edit-7FTXENAN.js → edit-ZFGROCAF.js} +5 -5
- package/chunks/{enter-worktree-JPHV2PBG.js → enter-worktree-TZZZCDM5.js} +5 -5
- package/chunks/{enterPlanMode-CGBJ3AHJ.js → enterPlanMode-U77BI3R6.js} +5 -5
- package/chunks/{environment-LXASZAHD.js → environment-HC37DS2I.js} +7 -7
- package/chunks/{errors-XIGVT2AD.js → errors-6AG54JPD.js} +7 -7
- package/chunks/{exit-worktree-DKSGXW65.js → exit-worktree-UYYWFPNK.js} +5 -5
- package/chunks/{exitPlanMode-THFL2HYN.js → exitPlanMode-RWJR2KGB.js} +5 -5
- package/chunks/{fast-path-4NXAT5UL.js → fast-path-F5FSZ3O7.js} +2 -2
- package/chunks/{gemini-B3N6FACU.js → gemini-NKQHYM36.js} +76 -52
- package/chunks/{geminiContentGenerator-YYFE2HIE.js → geminiContentGenerator-HCWZOUX3.js} +1 -1
- package/chunks/{glob-BPHSCFJP.js → glob-3PDXKBAO.js} +5 -5
- package/chunks/{goal-tools-PXWN5VK3.js → goal-tools-SWNB6GP4.js} +1 -1
- package/chunks/{grep-ROZIRFLU.js → grep-5HZKZYVD.js} +5 -5
- package/chunks/{handleAutoUpdate-WV6SPZQB.js → handleAutoUpdate-NHFSGYTF.js} +9 -9
- package/chunks/{i18n-YWJWPQKD.js → i18n-Q27KKNDL.js} +6 -6
- package/chunks/{image-gen-SISRZ6FS.js → image-gen-2Z2RJ6W7.js} +1 -1
- package/chunks/{initializer-66OAD6GO.js → initializer-Y5DJLT43.js} +11 -11
- package/chunks/{installationInfo-3YUGIP36.js → installationInfo-XXB75T7O.js} +6 -6
- package/chunks/{list-VEYR66XB.js → list-YHNQ32CS.js} +14 -14
- package/chunks/{loadedSettingsAdapter-V2JCPCYD.js → loadedSettingsAdapter-GHUQK7H4.js} +11 -11
- package/chunks/{loggingContentGenerator-RBLNDREC.js → loggingContentGenerator-6NTFBM7Q.js} +1 -1
- package/chunks/{managed-npm-update-C5ID5R4R.js → managed-npm-update-SPHYQUWZ.js} +6 -6
- package/chunks/{mcp-OZ54NZJQ.js → mcp-EA3KO6FS.js} +11 -11
- package/chunks/{monitor-7Y4TVFTK.js → monitor-ZBBPAA54.js} +5 -5
- package/chunks/{nonInteractiveCli-QEK4LHAC.js → nonInteractiveCli-NNOR56HU.js} +35 -35
- package/chunks/{notebook-edit-OG35EBGY.js → notebook-edit-5W3FW7Z2.js} +5 -5
- package/chunks/{openaiContentGenerator-443BNRPJ.js → openaiContentGenerator-TQANPEVZ.js} +1 -1
- package/chunks/{pidfile-ZK4OLRZA.js → pidfile-EQOBLH4E.js} +5 -5
- package/chunks/{processUtils-4YGB4RUZ.js → processUtils-7XQG7EHS.js} +2 -2
- package/chunks/{qwenContentGenerator-D5C2LCSZ.js → qwenContentGenerator-BKCPHHXU.js} +5 -5
- package/chunks/{qwenOAuth2-Z4YQBMYN.js → qwenOAuth2-BJ6PQKE6.js} +1 -1
- package/chunks/{read-file-EXTJLWMU.js → read-file-KKTXGIZD.js} +1 -1
- package/chunks/{resumeHistoryUtils-UPCGRJUL.js → resumeHistoryUtils-6N6XGJJW.js} +8 -8
- package/chunks/{ripGrep-QBVIRCU4.js → ripGrep-SJVAAYDV.js} +5 -5
- package/chunks/{run-qwen-serve-ZYGJNE3E.js → run-qwen-serve-BCKBCAMX.js} +34 -34
- package/chunks/{runtime-BZZ4LWCP.js → runtime-E2437YKL.js} +12 -12
- package/chunks/scheduler-K3D5Z655.js +108 -0
- package/chunks/{serve-LJHAXDCH.js → serve-IH4XR5IL.js} +11 -11
- package/chunks/{server-ADMLELR6.js → server-UD6INW7J.js} +616 -245
- package/chunks/{session-YKZXFFTM.js → session-GR4ZEVW4.js} +43 -44
- package/chunks/{settings-EQBUAQ7Y.js → settings-5O24D3OJ.js} +10 -10
- package/chunks/{shell-3QZOJGTT.js → shell-UTLWLG5G.js} +5 -5
- package/chunks/{skill-UWSSMXE7.js → skill-QQAZL4VO.js} +1 -1
- package/chunks/{skill-settings-T6MLB7NU.js → skill-settings-P3YHJVBZ.js} +10 -10
- package/chunks/{spawnChannel-VS7ZFUFP.js → spawnChannel-UAQMH6Y6.js} +5 -5
- package/chunks/{standalone-update-2W26SRRO.js → standalone-update-QP742MGP.js} +7 -7
- package/chunks/{startInteractiveUI-CVS7K3D6.js → startInteractiveUI-YCS6AEPN.js} +1209 -926
- package/chunks/{team-create-4WFTNNUL.js → team-create-WFH7OCDQ.js} +5 -5
- package/chunks/{team-plan-approval-DBYI33S3.js → team-plan-approval-EGTT53MV.js} +5 -5
- package/chunks/{terminal-image-renderer-S5WPPQKH.js → terminal-image-renderer-BWRESAQ7.js} +5 -5
- package/chunks/{theme-manager-LI2RIOVR.js → theme-manager-ZNDGAHJN.js} +5 -5
- package/chunks/{tool-search-4773EUQ4.js → tool-search-TI5PTIBF.js} +1 -1
- package/chunks/{total-session-admission-PAY5CH2Z.js → total-session-admission-66UDSOHO.js} +9 -9
- package/chunks/{trustedFolders-FRSLE674.js → trustedFolders-4KYHA4IG.js} +6 -6
- package/chunks/{update-relaunch-ZSFQTU6M.js → update-relaunch-WB6LGIF2.js} +5 -5
- package/chunks/{updateCheck-AXWSO7KA.js → updateCheck-LOS5GYFC.js} +8 -8
- package/chunks/{useAutoAcceptIndicator-VHLXIA7U.js → useAutoAcceptIndicator-MHAPY52L.js} +11 -11
- package/chunks/{validateNonInterActiveAuth-PDJECMFU.js → validateNonInterActiveAuth-QV22HNQU.js} +32 -32
- package/chunks/{version-RBN764QS.js → version-DALWZHKQ.js} +1 -1
- package/chunks/{web-fetch-7BJK42AF.js → web-fetch-JMJVMYFE.js} +1 -1
- package/chunks/{web-search-L2CILQXV.js → web-search-DNDUIPU5.js} +2 -2
- package/chunks/{workflow-5VH2R74I.js → workflow-JGNN64PM.js} +6 -6
- package/chunks/{workspace-providers-status-OZTQ6JFH.js → workspace-providers-status-K22B3Z6B.js} +13 -13
- package/chunks/{workspace-registration-store-IX5RJQS5.js → workspace-registration-store-LRJG7QA4.js} +1 -1
- package/chunks/{workspace-registry-73N4BGG4.js → workspace-registry-KVXIFM36.js} +9 -9
- package/chunks/{workspace-service-I5RUPSNV.js → workspace-service-PO4AAKKT.js} +15 -15
- package/chunks/{workspace-skills-status-DMK6VYDO.js → workspace-skills-status-DDYCBVSH.js} +11 -11
- package/chunks/{workspace-trust-reconciler-QX4RL3TC.js → workspace-trust-reconciler-DOZPCVHG.js} +15 -15
- package/chunks/{write-file-UGDD5UTS.js → write-file-TT6MWIKC.js} +5 -5
- package/chunks/{zoom-image-ZAHEO3YP.js → zoom-image-CNC77ZMA.js} +1 -1
- package/cli.js +13 -13
- package/package.json +3 -3
- package/web-shell/assets/{arc-CHY4saMJ.js → arc-CDk0d60K.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-Bu6CwvHj.js → architectureDiagram-3BPJPVTR-h-W3I2lP.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-XGt6iGf_.js → blockDiagram-GPEHLZMM-D1pvSmZg.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CBbYl19W.js → c4Diagram-AAUBKEIU-ByAm5ZNf.js} +1 -1
- package/web-shell/assets/channel-DPFUV4oi.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-BEhmVrdx.js → chunk-2J33WTMH-VrGPPOGV.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-fQLyE0Bg.js → chunk-4BX2VUAB-B7hTowgG.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-yGdtyx4a.js → chunk-55IACEB6-j1Fq8DpE.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-DYbX2GLo.js → chunk-727SXJPM-UjABYpF2.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-DyKTEsYn.js → chunk-AQP2D5EJ-D4uBItrs.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-D8Uy_GzX.js → chunk-FMBD7UC4-DeFbKlb8.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-C8wNR2K7.js → chunk-ND2GUHAM-rQJ8TIgT.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-BnybNxnt.js → chunk-QZHKN3VN-DAGcRxvq.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CLm0hVvw.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CLm0hVvw.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-jq4uiFRp.js → cose-bilkent-S5V4N54A-MaE7MJSt.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-Bs7oye1U.js → dagre-BM42HDAG-DzijYGSb.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BHGGJNyM.js → diagram-2AECGRRQ-WdbG7WnX.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BJezVLGT.js → diagram-5GNKFQAL-NYutsBnw.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-5JzQN_rL.js → diagram-KO2AKTUF-Dqg0eBY0.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-BlPYOgY9.js → diagram-LMA3HP47-C7vRP2Lb.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CtMHEaFK.js → diagram-OG6HWLK6-B2sEPpPt.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-CRNdq2AB.js → erDiagram-TEJ5UH35-a4zIbzm8.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-De1WwLzu.js → flowDiagram-I6XJVG4X-BK9y89ya.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-YbWfL5Zn.js → ganttDiagram-6RSMTGT7-wUQTSNvV.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-DzCN8bmd.js → gitGraphDiagram-PVQCEYII-Dnzt4SAi.js} +1 -1
- package/web-shell/assets/{index-CocPvF9Q.js → index-BA3wUcKL.js} +1 -1
- package/web-shell/assets/{index-BDOGGGaN.css → index-BjC3yjjL.css} +2 -2
- package/web-shell/assets/index-QzFq6w7o.js +1775 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-DLHoopnE.js → infoDiagram-5YYISTIA-DcaoToij.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-XnbU04SS.js → ishikawaDiagram-YF4QCWOH-DzduqhP2.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CipPyEeJ.js → journeyDiagram-JHISSGLW-BvviZR_O.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-DrSeyE5d.js → kanban-definition-UN3LZRKU-Efm2JxY3.js} +1 -1
- package/web-shell/assets/{linear-LrBKnAo_.js → linear-DtY3IbOs.js} +1 -1
- package/web-shell/assets/{mermaid.core-C3U9UVmf.js → mermaid.core-PzpFqoMe.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-DqRWgC9H.js → mindmap-definition-RKZ34NQL-BLlTkHS0.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-BNXY5p6H.js → pieDiagram-4H26LBE5-D-mKF-jE.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Ccj9QzE4.js → quadrantDiagram-W4KKPZXB-DYCzslGm.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-CjPM2_gx.js → requirementDiagram-4Y6WPE33-Dfpxlk7R.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C0RsvKbj.js → sankeyDiagram-5OEKKPKP-D5cRaaxh.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-ClN1P5z7.js → sequenceDiagram-3UESZ5HK-s04DReiS.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-By0eiB2Y.js → stateDiagram-AJRCARHV-01UNFgnb.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DXb5olqv.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-g_iaSQgv.js → timeline-definition-PNZ67QCA-DX8_wZBC.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-y9ZqJ-TD.js → vennDiagram-CIIHVFJN-BK0FlBme.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-BVVfaxpF.js → wardley-L42UT6IY-DkPc9UlD.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-D3ooZKZT.js → wardleyDiagram-YWT4CUSO-DNKkpDAo.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-6GXrY6M1.js → xychartDiagram-2RQKCTM6-CiPwg8QG.js} +1 -1
- package/web-shell/index.html +2 -2
- package/web-shell/assets/channel-B40srHOa.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-qumcXQW_.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-qumcXQW_.js +0 -1
- package/web-shell/assets/index-DSH2KrMc.js +0 -1771
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Ds0WlK3F.js +0 -1
|
@@ -2,13 +2,13 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
listCommand
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-IRZ2ZH72.js";
|
|
6
6
|
import {
|
|
7
7
|
serveCommand
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-YF5MALI4.js";
|
|
9
9
|
import {
|
|
10
10
|
getErrorMessage as getErrorMessage2
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-DCZEPFB4.js";
|
|
12
12
|
import {
|
|
13
13
|
OBSERVED_CONTACT_MAX_FRESH_WITHIN_SECONDS,
|
|
14
14
|
ObservedChannelContactStore
|
|
@@ -33,7 +33,7 @@ import {
|
|
|
33
33
|
collectProviderModelsForProtocol,
|
|
34
34
|
getAuthTypeFromEnv,
|
|
35
35
|
resolveCliGenerationConfig
|
|
36
|
-
} from "./chunk-
|
|
36
|
+
} from "./chunk-2PLNY5TN.js";
|
|
37
37
|
import {
|
|
38
38
|
resolveSkillSettings
|
|
39
39
|
} from "./chunk-Z4X5MTRT.js";
|
|
@@ -53,14 +53,14 @@ import {
|
|
|
53
53
|
registerToolCallDispatch,
|
|
54
54
|
selectFirstModel,
|
|
55
55
|
sessionsPath
|
|
56
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-NEOXOWYH.js";
|
|
57
57
|
import {
|
|
58
58
|
getExtensionManager,
|
|
59
59
|
requestChoicePluginNonInteractive,
|
|
60
60
|
requestConsentNonInteractive,
|
|
61
61
|
requestConsentOrFail,
|
|
62
62
|
resolveExtensionCommandScope
|
|
63
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-UMD7WQTR.js";
|
|
64
64
|
import {
|
|
65
65
|
parseChannelConfig
|
|
66
66
|
} from "./chunk-LHEC5V6G.js";
|
|
@@ -133,33 +133,33 @@ import {
|
|
|
133
133
|
assembleMcpServers,
|
|
134
134
|
getPendingGatedMcpServers,
|
|
135
135
|
mcpCommand
|
|
136
|
-
} from "./chunk-
|
|
136
|
+
} from "./chunk-KID7K6H2.js";
|
|
137
137
|
import {
|
|
138
138
|
loadSettings
|
|
139
|
-
} from "./chunk-
|
|
139
|
+
} from "./chunk-ABVRJU3D.js";
|
|
140
140
|
import {
|
|
141
141
|
detectSystemLanguage,
|
|
142
142
|
getCurrentLanguage,
|
|
143
143
|
initializeI18n,
|
|
144
144
|
resolveLanguageSetting,
|
|
145
145
|
t
|
|
146
|
-
} from "./chunk-
|
|
146
|
+
} from "./chunk-UEOKWYGY.js";
|
|
147
147
|
import {
|
|
148
148
|
loadEnvironment
|
|
149
|
-
} from "./chunk-
|
|
149
|
+
} from "./chunk-ZJ4W6SUY.js";
|
|
150
150
|
import {
|
|
151
151
|
resolveAcpChannelFallback,
|
|
152
152
|
scrubAndReportInheritedLoaderEnv
|
|
153
153
|
} from "./chunk-VFMASYQA.js";
|
|
154
154
|
import {
|
|
155
155
|
getCliVersion
|
|
156
|
-
} from "./chunk-
|
|
156
|
+
} from "./chunk-AEL7KN2O.js";
|
|
157
157
|
import {
|
|
158
158
|
getPackageJson
|
|
159
159
|
} from "./chunk-VJNBRRZG.js";
|
|
160
160
|
import {
|
|
161
161
|
isWorkspaceTrusted
|
|
162
|
-
} from "./chunk-
|
|
162
|
+
} from "./chunk-GWVUR3QZ.js";
|
|
163
163
|
import {
|
|
164
164
|
require_strip_json_comments
|
|
165
165
|
} from "./chunk-NPQ5ZKRP.js";
|
|
@@ -201,7 +201,7 @@ import {
|
|
|
201
201
|
unquoteCStylePath,
|
|
202
202
|
updateChannelMemoryEntry,
|
|
203
203
|
updateSetting
|
|
204
|
-
} from "./chunk-
|
|
204
|
+
} from "./chunk-EI3NWELG.js";
|
|
205
205
|
import {
|
|
206
206
|
nextFireTime,
|
|
207
207
|
parseCron
|
|
@@ -2731,7 +2731,7 @@ var stopCommand = {
|
|
|
2731
2731
|
if (argv["daemon-url"]) {
|
|
2732
2732
|
const token = argv.token ?? process.env[QWEN_SERVER_TOKEN_ENV] ?? process.env[QWEN_DAEMON_TOKEN_ENV];
|
|
2733
2733
|
try {
|
|
2734
|
-
const sdk = await import("./daemon-
|
|
2734
|
+
const sdk = await import("./daemon-GWD7BT6E.js");
|
|
2735
2735
|
const client = new sdk.DaemonClient({
|
|
2736
2736
|
baseUrl: argv["daemon-url"],
|
|
2737
2737
|
...token ? { token } : {}
|
|
@@ -2917,7 +2917,7 @@ var statusCommand = {
|
|
|
2917
2917
|
if (argv["daemon-url"]) {
|
|
2918
2918
|
const token = argv.token ?? process.env[QWEN_SERVER_TOKEN_ENV] ?? process.env[QWEN_DAEMON_TOKEN_ENV];
|
|
2919
2919
|
try {
|
|
2920
|
-
const sdk = await import("./daemon-
|
|
2920
|
+
const sdk = await import("./daemon-GWD7BT6E.js");
|
|
2921
2921
|
const client = new sdk.DaemonClient({
|
|
2922
2922
|
baseUrl: argv["daemon-url"],
|
|
2923
2923
|
...token ? { token } : {}
|
|
@@ -3028,7 +3028,7 @@ var reloadCommand = {
|
|
|
3028
3028
|
const token = resolveToken(argv.token);
|
|
3029
3029
|
let sdk;
|
|
3030
3030
|
try {
|
|
3031
|
-
sdk = await import("./daemon-
|
|
3031
|
+
sdk = await import("./daemon-GWD7BT6E.js");
|
|
3032
3032
|
} catch (err) {
|
|
3033
3033
|
writeStderrLine(
|
|
3034
3034
|
`[Channel] Failed to load daemon SDK: ${safeChannelCommandErrorMessage(err)}`
|
|
@@ -3108,7 +3108,7 @@ var setCommand2 = {
|
|
|
3108
3108
|
const selection = names[0] === "all" ? { mode: "all" } : { mode: "names", names };
|
|
3109
3109
|
let sdk;
|
|
3110
3110
|
try {
|
|
3111
|
-
sdk = await import("./daemon-
|
|
3111
|
+
sdk = await import("./daemon-GWD7BT6E.js");
|
|
3112
3112
|
} catch (error) {
|
|
3113
3113
|
writeStderrLine(
|
|
3114
3114
|
`[Channel] Failed to load daemon SDK: ${safeChannelCommandErrorMessage(error)}`
|
|
@@ -3234,7 +3234,7 @@ function createDaemonChannelBridgeFacade(bridge, opts) {
|
|
|
3234
3234
|
}
|
|
3235
3235
|
__name(createDaemonChannelBridgeFacade, "createDaemonChannelBridgeFacade");
|
|
3236
3236
|
async function loadDaemonSdk() {
|
|
3237
|
-
return await import("./daemon-
|
|
3237
|
+
return await import("./daemon-GWD7BT6E.js");
|
|
3238
3238
|
}
|
|
3239
3239
|
__name(loadDaemonSdk, "loadDaemonSdk");
|
|
3240
3240
|
function selectedChannelNames(channelsConfig, selection) {
|
|
@@ -7097,7 +7097,13 @@ __name(contextRoleRunsInThisReview, "contextRoleRunsInThisReview");
|
|
|
7097
7097
|
|
|
7098
7098
|
// packages/cli/src/commands/review/lib/deadline.ts
|
|
7099
7099
|
init_esbuild_shims();
|
|
7100
|
-
import {
|
|
7100
|
+
import {
|
|
7101
|
+
mkdirSync as mkdirSync5,
|
|
7102
|
+
readFileSync as readFileSync8,
|
|
7103
|
+
rmSync as rmSync4,
|
|
7104
|
+
statSync as statSync4,
|
|
7105
|
+
writeFileSync as writeFileSync5
|
|
7106
|
+
} from "node:fs";
|
|
7101
7107
|
import { join as join9 } from "node:path";
|
|
7102
7108
|
var DEADLINE_ENV = "QWEN_REVIEW_DEADLINE_EPOCH";
|
|
7103
7109
|
var RESERVE_ENV = "QWEN_REVIEW_DEADLINE_RESERVE_SECONDS";
|
|
@@ -7260,6 +7266,7 @@ function roundCapStopEntryZh(cap) {
|
|
|
7260
7266
|
__name(roundCapStopEntryZh, "roundCapStopEntryZh");
|
|
7261
7267
|
function writeRoundCapStop(planPath, cap, round, nowMs = Date.now()) {
|
|
7262
7268
|
try {
|
|
7269
|
+
if (readBudgetStop(planPath) !== null) return;
|
|
7263
7270
|
const dir = promptRecordDir(planPath);
|
|
7264
7271
|
mkdirSync5(dir, { recursive: true });
|
|
7265
7272
|
const stop = {
|
|
@@ -7279,6 +7286,7 @@ function writeRoundCapStop(planPath, cap, round, nowMs = Date.now()) {
|
|
|
7279
7286
|
__name(writeRoundCapStop, "writeRoundCapStop");
|
|
7280
7287
|
function writeBudgetStop(planPath, spent, round, nowMs = Date.now()) {
|
|
7281
7288
|
try {
|
|
7289
|
+
if (readBudgetStop(planPath) !== null) return;
|
|
7282
7290
|
const dir = promptRecordDir(planPath);
|
|
7283
7291
|
mkdirSync5(dir, { recursive: true });
|
|
7284
7292
|
const stop = {
|
|
@@ -7310,12 +7318,19 @@ function readBudgetStop(planPath) {
|
|
|
7310
7318
|
}
|
|
7311
7319
|
}
|
|
7312
7320
|
__name(readBudgetStop, "readBudgetStop");
|
|
7321
|
+
function clearBudgetStop(planPath) {
|
|
7322
|
+
try {
|
|
7323
|
+
rmSync4(join9(promptRecordDir(planPath), STOP_FILE), { force: true });
|
|
7324
|
+
} catch {
|
|
7325
|
+
}
|
|
7326
|
+
}
|
|
7327
|
+
__name(clearBudgetStop, "clearBudgetStop");
|
|
7313
7328
|
function reverseAuditBudgetMessage(spent, round) {
|
|
7314
7329
|
const minutesLeft = Math.max(0, Math.floor(spent.remainingSeconds / 60));
|
|
7315
7330
|
const reserveMinutes = Math.round(spent.reserveSeconds / 60);
|
|
7316
7331
|
const roundMinutes = Math.round(spent.expectedRoundSeconds / 60);
|
|
7317
7332
|
const which = round !== void 0 ? `round ${round}` : "the next round";
|
|
7318
|
-
return `BUDGET: ${minutesLeft} minute(s) remain before this review's deadline \u2014 not enough for the ~${roundMinutes}-minute round being asked for plus the ${reserveMinutes}-minute reserve kept for its verification, compose-review and submission \u2014 so no further reverse-audit round will be built. This is the loop's termination rule, not an error: do not rebuild ${which} and do not relaunch auditors. A budget-stop marker has been recorded and compose-review will disclose it and cap the verdict itself; also add exactly this entry to unreviewedDimensions so the terminal report says it too \u2014 \`${budgetStopEntry(round)}\` \u2014 and proceed to Step 6. Verify the last round's findings ONLY through \`agent-prompt --role verify\` (never a hand-rolled agent) \u2014 it is gated on the compose floor and will refuse once too little time remains, leaving any still-\`[unverified]\` findings tagged for compose-review to cap
|
|
7333
|
+
return `BUDGET: ${minutesLeft} minute(s) remain before this review's deadline \u2014 not enough for the ~${roundMinutes}-minute round being asked for plus the ${reserveMinutes}-minute reserve kept for its verification, compose-review and submission \u2014 so no further reverse-audit round will be built. This is the loop's termination rule, not an error: do not rebuild ${which} and do not relaunch auditors. A budget-stop marker has been recorded and compose-review will disclose it and cap the verdict itself; also add exactly this entry to unreviewedDimensions so the terminal report says it too \u2014 \`${budgetStopEntry(round)}\` \u2014 and proceed to Step 6. Verify the last round's findings ONLY through \`agent-prompt --role verify\` (never a hand-rolled agent) \u2014 it is gated on the compose floor and will refuse once too little time remains, leaving any still-\`[unverified]\` findings tagged for compose-review to cap; when the deadline is within that floor, stop waiting on any verifier batch still out and compose with the tags in hand. Do NOT re-verify findings already confirmed in earlier rounds, and do NOT invent a fresh re-verification pass. Then compose and submit \u2014 a review that stops here still reports everything it proved; a review that runs past its deadline is killed holding all of it.`;
|
|
7319
7334
|
}
|
|
7320
7335
|
__name(reverseAuditBudgetMessage, "reverseAuditBudgetMessage");
|
|
7321
7336
|
|
|
@@ -8041,7 +8056,8 @@ function verificationGaps(planPath, opts, env = process.env) {
|
|
|
8041
8056
|
(k) => k === "reverse-audit" || k.startsWith("reverse-audit--")
|
|
8042
8057
|
);
|
|
8043
8058
|
const reverse = bestDelivery(reverseKeys);
|
|
8044
|
-
const
|
|
8059
|
+
const stop = readBudgetStop(planPath);
|
|
8060
|
+
const budgetStopped = stop !== null && stop.cause !== "round-cap";
|
|
8045
8061
|
const reverseByDesign = budgetStopped && reverse === "not-built";
|
|
8046
8062
|
const reverseGap = !balancedMedium && !reverseByDesign && reverse !== "ok";
|
|
8047
8063
|
if (reverseGap) {
|
|
@@ -12712,7 +12728,7 @@ import {
|
|
|
12712
12728
|
openSync as openSync2,
|
|
12713
12729
|
writeSync,
|
|
12714
12730
|
closeSync as closeSync2,
|
|
12715
|
-
rmSync as
|
|
12731
|
+
rmSync as rmSync5,
|
|
12716
12732
|
lstatSync as lstatSync4,
|
|
12717
12733
|
existsSync as existsSync7,
|
|
12718
12734
|
constants
|
|
@@ -12782,7 +12798,7 @@ __name(writeSkillArgs, "writeSkillArgs");
|
|
|
12782
12798
|
function clearSkillArgs(skillName) {
|
|
12783
12799
|
const path3 = skillArgsPath(skillName);
|
|
12784
12800
|
try {
|
|
12785
|
-
|
|
12801
|
+
rmSync5(path3, { force: true });
|
|
12786
12802
|
} catch (err) {
|
|
12787
12803
|
debugLogger3.warn(
|
|
12788
12804
|
`Could not clear skill args for ${skillName}: ${err.message}`
|
|
@@ -14894,7 +14910,7 @@ function admitReverseAuditRound(planPath, round, cap) {
|
|
|
14894
14910
|
if (typeof round === "number" && round > cap) {
|
|
14895
14911
|
writeRoundCapStop(planPath, cap, round);
|
|
14896
14912
|
writeStderrLine(
|
|
14897
|
-
`ROUND CAP: the plan's reverse-audit round cap is ${cap}, and round ${round} is past it. This is a termination rule, not an error \u2014 do not rebuild or retry. A marker has been recorded and compose-review will cap the verdict; still add \`${roundCapStopEntry(cap)}\` to unreviewedDimensions so the terminal report agrees. If the cap round reported findings whose verdicts have not landed,
|
|
14913
|
+
`ROUND CAP: the plan's reverse-audit round cap is ${cap}, and round ${round} is past it. This is a termination rule, not an error \u2014 do not rebuild or retry. A marker has been recorded and compose-review will cap the verdict; still add \`${roundCapStopEntry(cap)}\` to unreviewedDimensions so the terminal report agrees. If the cap round reported findings whose verdicts have not landed, verify them ONLY through \`agent-prompt --role verify\` (never a hand-rolled agent) \u2014 it is gated on the compose floor and will refuse once too little time remains; when the deadline is within that floor, stop waiting on any verifier batch still out and compose with the tags in hand. Do NOT re-verify findings already confirmed in earlier rounds, and do NOT invent a fresh re-verification pass. Then proceed to Step 6.`
|
|
14898
14914
|
);
|
|
14899
14915
|
process.exitCode = 4;
|
|
14900
14916
|
return false;
|
|
@@ -14912,9 +14928,10 @@ function admitReverseAuditRound(planPath, round, cap) {
|
|
|
14912
14928
|
return true;
|
|
14913
14929
|
}
|
|
14914
14930
|
__name(admitReverseAuditRound, "admitReverseAuditRound");
|
|
14915
|
-
function refuseConverged() {
|
|
14931
|
+
function refuseConverged(planPath) {
|
|
14932
|
+
clearBudgetStop(planPath);
|
|
14916
14933
|
writeStderrLine(
|
|
14917
|
-
"CONVERGED: every chunk holds two consecutive substantive dry audits; the reverse audit has converged \u2014 stop the loop and proceed to Step 6. This is a clean convergence, not a gap: no unreviewedDimensions entry is owed."
|
|
14934
|
+
"CONVERGED: every chunk holds two consecutive substantive dry audits; the reverse audit has converged \u2014 stop the loop and proceed to Step 6. This is a clean convergence, not a gap: no unreviewedDimensions entry is owed. If an earlier round-cap or budget refusal told you to add its stop entry to unreviewedDimensions, remove it now \u2014 this convergence supersedes it."
|
|
14918
14935
|
);
|
|
14919
14936
|
process.exitCode = 5;
|
|
14920
14937
|
}
|
|
@@ -14937,7 +14954,7 @@ function runAllChunks(report, planPath, role, findingsContent, rules, round) {
|
|
|
14937
14954
|
}
|
|
14938
14955
|
}
|
|
14939
14956
|
if (schedule !== null && schedule.converged) {
|
|
14940
|
-
refuseConverged();
|
|
14957
|
+
refuseConverged(planPath);
|
|
14941
14958
|
return;
|
|
14942
14959
|
}
|
|
14943
14960
|
if (role === "reverse-audit" && !admitReverseAuditRound(
|
|
@@ -15177,7 +15194,7 @@ function runAgentPrompt(args) {
|
|
|
15177
15194
|
schedule = null;
|
|
15178
15195
|
}
|
|
15179
15196
|
if (schedule !== null && schedule.converged) {
|
|
15180
|
-
refuseConverged();
|
|
15197
|
+
refuseConverged(args.plan);
|
|
15181
15198
|
return;
|
|
15182
15199
|
}
|
|
15183
15200
|
}
|
|
@@ -15296,14 +15313,29 @@ var agentPromptCommand = {
|
|
|
15296
15313
|
// packages/cli/src/commands/review/build-test.ts
|
|
15297
15314
|
init_esbuild_shims();
|
|
15298
15315
|
import { spawnSync as spawnSync3 } from "node:child_process";
|
|
15299
|
-
import {
|
|
15300
|
-
|
|
15301
|
-
|
|
15302
|
-
|
|
15303
|
-
|
|
15304
|
-
|
|
15305
|
-
} from "node:
|
|
15306
|
-
|
|
15316
|
+
import { existsSync as existsSync10, readFileSync as readFileSync23, writeFileSync as writeFileSync18 } from "node:fs";
|
|
15317
|
+
import { join as join17, resolve as resolve18 } from "node:path";
|
|
15318
|
+
|
|
15319
|
+
// packages/cli/src/commands/review/lib/npm-toolchain.ts
|
|
15320
|
+
init_esbuild_shims();
|
|
15321
|
+
import { existsSync as existsSync9, rmSync as rmSync6 } from "node:fs";
|
|
15322
|
+
import { join as join16 } from "node:path";
|
|
15323
|
+
|
|
15324
|
+
// packages/cli/src/commands/review/lib/disk.ts
|
|
15325
|
+
init_esbuild_shims();
|
|
15326
|
+
import { statfsSync } from "node:fs";
|
|
15327
|
+
var INSTALL_MIN_FREE_BYTES = 3 * 1024 ** 3;
|
|
15328
|
+
var BUILD_MIN_FREE_BYTES = 1024 ** 3;
|
|
15329
|
+
function freeDiskBytes(dir) {
|
|
15330
|
+
try {
|
|
15331
|
+
const s = statfsSync(dir);
|
|
15332
|
+
return s.bavail * s.bsize;
|
|
15333
|
+
} catch {
|
|
15334
|
+
return null;
|
|
15335
|
+
}
|
|
15336
|
+
}
|
|
15337
|
+
__name(freeDiskBytes, "freeDiskBytes");
|
|
15338
|
+
var gib = /* @__PURE__ */ __name((bytes) => (bytes / 1024 ** 3).toFixed(1), "gib");
|
|
15307
15339
|
|
|
15308
15340
|
// packages/cli/src/commands/review/lib/workspaces.ts
|
|
15309
15341
|
init_esbuild_shims();
|
|
@@ -15596,7 +15628,8 @@ function resolveTestScope(input) {
|
|
|
15596
15628
|
}
|
|
15597
15629
|
__name(resolveTestScope, "resolveTestScope");
|
|
15598
15630
|
|
|
15599
|
-
// packages/cli/src/commands/review/
|
|
15631
|
+
// packages/cli/src/commands/review/lib/npm-toolchain.ts
|
|
15632
|
+
var BUDGET_MIN_ATTEMPT_MS = 15e3;
|
|
15600
15633
|
function shellArg(dir) {
|
|
15601
15634
|
return `"${dir.replace(/[\\"$`]/g, "\\$&")}"`;
|
|
15602
15635
|
}
|
|
@@ -15609,81 +15642,6 @@ function testCommand(dir) {
|
|
|
15609
15642
|
return dir === "." ? "npm test" : `npm test --workspace=${shellArg(dir)}`;
|
|
15610
15643
|
}
|
|
15611
15644
|
__name(testCommand, "testCommand");
|
|
15612
|
-
var KEEP_HEAD = 2e3;
|
|
15613
|
-
var KEEP_TAIL = 6e3;
|
|
15614
|
-
function spawnTimedOut(r) {
|
|
15615
|
-
return r.error?.code === "ETIMEDOUT" || r.signal === "SIGTERM" && r.status === null;
|
|
15616
|
-
}
|
|
15617
|
-
__name(spawnTimedOut, "spawnTimedOut");
|
|
15618
|
-
var MODULE_ERROR_RE = /Cannot find module '[^']+'|Could not resolve "[^"]+"/;
|
|
15619
|
-
var RUNNER_SUMMARY_RE = /^\s*(?:Tests?|Test Files):?\s+\d/;
|
|
15620
|
-
var ANSI_SGR_RE = /\x1b\[[0-9;]*m/g;
|
|
15621
|
-
function trimOutput(s) {
|
|
15622
|
-
if (s.length <= KEEP_HEAD + KEEP_TAIL) return s;
|
|
15623
|
-
const middle = s.slice(KEEP_HEAD, s.length - KEEP_TAIL);
|
|
15624
|
-
const RESCUE_MAX = 40;
|
|
15625
|
-
const rescued = middle.split("\n").filter(
|
|
15626
|
-
(l) => MODULE_ERROR_RE.test(l) || RUNNER_SUMMARY_RE.test(l.replace(ANSI_SGR_RE, ""))
|
|
15627
|
-
).slice(0, RESCUE_MAX);
|
|
15628
|
-
const omitted = s.length - KEEP_HEAD - KEEP_TAIL;
|
|
15629
|
-
const marker = rescued.length ? `
|
|
15630
|
-
|
|
15631
|
-
... [${omitted} characters omitted; module-resolution errors and runner summaries kept] ...
|
|
15632
|
-
${rescued.join("\n")}
|
|
15633
|
-
|
|
15634
|
-
` : `
|
|
15635
|
-
|
|
15636
|
-
... [${omitted} characters omitted] ...
|
|
15637
|
-
|
|
15638
|
-
`;
|
|
15639
|
-
return s.slice(0, KEEP_HEAD) + marker + s.slice(-KEEP_TAIL);
|
|
15640
|
-
}
|
|
15641
|
-
__name(trimOutput, "trimOutput");
|
|
15642
|
-
var INSTALL_MIN_FREE_BYTES = 3 * 1024 ** 3;
|
|
15643
|
-
var BUILD_MIN_FREE_BYTES = 1024 ** 3;
|
|
15644
|
-
var BUDGET_MIN_ATTEMPT_MS = 15e3;
|
|
15645
|
-
function freeDiskBytes(dir) {
|
|
15646
|
-
try {
|
|
15647
|
-
const s = statfsSync(dir);
|
|
15648
|
-
return s.bavail * s.bsize;
|
|
15649
|
-
} catch {
|
|
15650
|
-
return null;
|
|
15651
|
-
}
|
|
15652
|
-
}
|
|
15653
|
-
__name(freeDiskBytes, "freeDiskBytes");
|
|
15654
|
-
var gib = /* @__PURE__ */ __name((bytes) => (bytes / 1024 ** 3).toFixed(1), "gib");
|
|
15655
|
-
function buildRunEnv(base = process.env) {
|
|
15656
|
-
return {
|
|
15657
|
-
...base,
|
|
15658
|
-
CI: "1",
|
|
15659
|
-
npm_config_yes: "true",
|
|
15660
|
-
QWEN_SKIP_PREPARE: "1"
|
|
15661
|
-
};
|
|
15662
|
-
}
|
|
15663
|
-
__name(buildRunEnv, "buildRunEnv");
|
|
15664
|
-
function run(command, cwd, timeoutMs) {
|
|
15665
|
-
const started = Date.now();
|
|
15666
|
-
const r = spawnSync3(command, {
|
|
15667
|
-
cwd,
|
|
15668
|
-
shell: true,
|
|
15669
|
-
encoding: "utf8",
|
|
15670
|
-
timeout: timeoutMs,
|
|
15671
|
-
maxBuffer: 64 * 1024 * 1024,
|
|
15672
|
-
// A build that asks a question is a build that hangs until the deadline.
|
|
15673
|
-
stdio: ["ignore", "pipe", "pipe"],
|
|
15674
|
-
env: buildRunEnv()
|
|
15675
|
-
});
|
|
15676
|
-
const timedOut = spawnTimedOut(r);
|
|
15677
|
-
return {
|
|
15678
|
-
command,
|
|
15679
|
-
exitCode: r.status,
|
|
15680
|
-
seconds: Math.round((Date.now() - started) / 1e3),
|
|
15681
|
-
timedOut,
|
|
15682
|
-
output: trimOutput(`${r.stdout ?? ""}${r.stderr ?? ""}`),
|
|
15683
|
-
deadlineMs: timeoutMs
|
|
15684
|
-
};
|
|
15685
|
-
}
|
|
15686
|
-
__name(run, "run");
|
|
15687
15645
|
function unresolvedWorkspaceDeps(output, packages) {
|
|
15688
15646
|
const known = new Map(packages.map((p) => [p.name, p.dir]));
|
|
15689
15647
|
const found = /* @__PURE__ */ new Set();
|
|
@@ -15698,34 +15656,13 @@ function unresolvedWorkspaceDeps(output, packages) {
|
|
|
15698
15656
|
return [...found];
|
|
15699
15657
|
}
|
|
15700
15658
|
__name(unresolvedWorkspaceDeps, "unresolvedWorkspaceDeps");
|
|
15701
|
-
function
|
|
15702
|
-
|
|
15703
|
-
try {
|
|
15704
|
-
parsed = JSON.parse(readFileSync23(planPath, "utf8"));
|
|
15705
|
-
} catch (err) {
|
|
15706
|
-
throw new Error(
|
|
15707
|
-
`build-test: cannot read the plan ${planPath}: ${err.message}`
|
|
15708
|
-
);
|
|
15709
|
-
}
|
|
15710
|
-
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
15711
|
-
throw new Error(
|
|
15712
|
-
`build-test: the plan ${planPath} is not a JSON object (got ${parsed === null ? "null" : Array.isArray(parsed) ? "an array" : typeof parsed}).`
|
|
15713
|
-
);
|
|
15714
|
-
}
|
|
15715
|
-
const report = parsed;
|
|
15716
|
-
const files = Array.isArray(report.files) ? report.files : [];
|
|
15717
|
-
return files.map((f) => f?.path).filter((p) => typeof p === "string" && p.length > 0);
|
|
15718
|
-
}
|
|
15719
|
-
__name(changedFilesFrom, "changedFilesFrom");
|
|
15720
|
-
function runBuildTest(args) {
|
|
15721
|
-
const root = resolve18(args.worktree);
|
|
15659
|
+
function runNpmToolchain(args) {
|
|
15660
|
+
const { root, changedFiles: changed, exec } = args;
|
|
15722
15661
|
const perCommandMs = args.timeout * 1e3;
|
|
15723
15662
|
const callBudgetMs = (args.budget ?? Math.max(args.timeout, args.timeout * 2 - 30)) * 1e3;
|
|
15724
15663
|
const runStarted = Date.now();
|
|
15725
15664
|
const remainingMs = /* @__PURE__ */ __name(() => callBudgetMs - (Date.now() - runStarted), "remainingMs");
|
|
15726
15665
|
const deadlineSecs = /* @__PURE__ */ __name((r) => Math.round((r.deadlineMs ?? perCommandMs) / 1e3), "deadlineSecs");
|
|
15727
|
-
const exec = args.exec ?? run;
|
|
15728
|
-
const changed = changedFilesFrom(args.plan);
|
|
15729
15666
|
const unsupportedReport = /* @__PURE__ */ __name((note) => ({
|
|
15730
15667
|
toolchain: "unsupported",
|
|
15731
15668
|
affected: [],
|
|
@@ -15749,7 +15686,7 @@ function runBuildTest(args) {
|
|
|
15749
15686
|
}
|
|
15750
15687
|
if (unmodeled || !singleRoot && (globs.length === 0 || packages.length === 0)) {
|
|
15751
15688
|
return unsupportedReport(
|
|
15752
|
-
unmodeled ? "This repo uses a workspace glob shape this command does not model (e.g. `**`, an inner `*`, or a `foo-*` prefix), so it cannot safely decide which packages the diff touches. Fall back to the build/test precedence in your brief, and give each command a deadline it can actually meet." : "No npm package here to scope (no workspaces, and the root has no build/test script). Fall back to the build/test precedence in your brief \u2014 installing dependencies first \u2014 and give each command a deadline it can actually meet."
|
|
15689
|
+
unmodeled ? "This repo uses a workspace glob shape this command does not model (e.g. `**`, an inner `*`, or a `foo-*` prefix), so it cannot safely decide which packages the diff touches. Fall back to the build/test precedence in your brief, and give each command a deadline it can actually meet." : globs.length > 0 ? "This repo declares npm workspaces, but none resolve to a package with a readable manifest, so there is nothing to scope. Fall back to the build/test precedence in your brief \u2014 installing dependencies first \u2014 and give each command a deadline it can actually meet." : "No npm package here to scope (no workspaces, and the root has no build/test script). Fall back to the build/test precedence in your brief \u2014 installing dependencies first \u2014 and give each command a deadline it can actually meet."
|
|
15753
15690
|
);
|
|
15754
15691
|
}
|
|
15755
15692
|
const affected = singleRoot ? changed.length > 0 ? ["."] : [] : affectedWorkspaces(changed, globs);
|
|
@@ -15831,7 +15768,7 @@ function runBuildTest(args) {
|
|
|
15831
15768
|
if (install.timedOut) results.timedOut.push(install.command);
|
|
15832
15769
|
if (install.timedOut) {
|
|
15833
15770
|
try {
|
|
15834
|
-
|
|
15771
|
+
rmSync6(join16(root, "node_modules"), {
|
|
15835
15772
|
recursive: true,
|
|
15836
15773
|
force: true,
|
|
15837
15774
|
maxRetries: 3
|
|
@@ -15845,10 +15782,16 @@ function runBuildTest(args) {
|
|
|
15845
15782
|
return results;
|
|
15846
15783
|
}
|
|
15847
15784
|
}
|
|
15785
|
+
const frameInstallFailure = /* @__PURE__ */ __name(() => {
|
|
15786
|
+
if (results.install && results.install.exitCode !== 0) {
|
|
15787
|
+
results.note = `\`${results.install.command}\` exited ${results.install.exitCode} but left a usable \`node_modules\`, so the run went ahead. The install failure is an environment/infrastructure result \u2014 report it as informational, never as a Critical, and never against this PR. ` + results.note;
|
|
15788
|
+
}
|
|
15789
|
+
}, "frameInstallFailure");
|
|
15848
15790
|
const freeForBuild = freeDiskBytes(root);
|
|
15849
15791
|
if (freeForBuild !== null && freeForBuild < BUILD_MIN_FREE_BYTES) {
|
|
15850
15792
|
results.ok = false;
|
|
15851
15793
|
results.note = `Insufficient disk space (${gib(freeForBuild)}G free, need ~${gib(BUILD_MIN_FREE_BYTES)}G): skipped the build and tests rather than fill the disk mid-compile. This is an environment issue, not a code finding \u2014 report it as informational.`;
|
|
15794
|
+
frameInstallFailure();
|
|
15852
15795
|
return results;
|
|
15853
15796
|
}
|
|
15854
15797
|
const alsoBuild = [];
|
|
@@ -15902,6 +15845,7 @@ function runBuildTest(args) {
|
|
|
15902
15845
|
results.note = failure.timedOut ? `\`${failure.command}\` ran out of time (${deadlineSecs(failure)}s). That is an infrastructure result, not a defect in the diff \u2014 report it as informational.` : `\`${failure.command}\` failed. Correlate the errors below with the diff: a compile error in a file the PR changed is a Critical; one in a file it did not touch is a pre-existing failure, and belongs in the terminal, not on the PR.`;
|
|
15903
15846
|
results.buildSet = (rootBuildSkipped ? set.filter((d) => d !== ".") : set).filter((d) => !notBuilt.includes(d));
|
|
15904
15847
|
results.widenedWith = [...widened];
|
|
15848
|
+
frameInstallFailure();
|
|
15905
15849
|
return results;
|
|
15906
15850
|
}
|
|
15907
15851
|
results.build = results.build.filter((r) => r !== failure);
|
|
@@ -15933,7 +15877,7 @@ function runBuildTest(args) {
|
|
|
15933
15877
|
}
|
|
15934
15878
|
const remaining = remainingMs();
|
|
15935
15879
|
if (remaining < BUDGET_MIN_ATTEMPT_MS) {
|
|
15936
|
-
notRun.push(...runnableDirs.slice(i)
|
|
15880
|
+
notRun.push(...runnableDirs.slice(i));
|
|
15937
15881
|
break;
|
|
15938
15882
|
}
|
|
15939
15883
|
const r = exec(testCommand(dir), root, Math.min(perCommandMs, remaining));
|
|
@@ -15965,7 +15909,10 @@ function runBuildTest(args) {
|
|
|
15965
15909
|
if (args.buildOnly) {
|
|
15966
15910
|
testsClause = ". Tests were not run (build-only).";
|
|
15967
15911
|
} else if (!testScope) {
|
|
15968
|
-
testsClause = results.test.length === 0 ?
|
|
15912
|
+
testsClause = results.test.length === 0 ? notRun.length > 0 ? (
|
|
15913
|
+
// The loop pushed the suite to notRun: the script exists.
|
|
15914
|
+
", but the whole-call budget was spent before any suite could run."
|
|
15915
|
+
) : ", but the package defines no test script, so no tests ran." : " and ran the tests of the changed ones. Everything passed.";
|
|
15969
15916
|
} else if (testScope.workspaces.length === 0) {
|
|
15970
15917
|
testsClause = testScope.notRun?.length ? ", but the whole-call budget was spent before any suite could run." : ", but no workspace in scope defines a test script, so no tests ran.";
|
|
15971
15918
|
} else {
|
|
@@ -15989,11 +15936,190 @@ function runBuildTest(args) {
|
|
|
15989
15936
|
if (partialNote && !results.testScope) {
|
|
15990
15937
|
results.note = results.note ? `${results.note} ${partialNote}.` : partialNote;
|
|
15991
15938
|
}
|
|
15992
|
-
|
|
15993
|
-
results.note = `\`${results.install.command}\` exited ${results.install.exitCode} but left a usable \`node_modules\`, so the build and test below ran anyway and their results stand. The install failure is an environment/infrastructure result \u2014 report it as informational, never as a Critical, and never against this PR. ` + results.note;
|
|
15994
|
-
}
|
|
15939
|
+
frameInstallFailure();
|
|
15995
15940
|
return results;
|
|
15996
15941
|
}
|
|
15942
|
+
__name(runNpmToolchain, "runNpmToolchain");
|
|
15943
|
+
var npmToolchainAdapter = {
|
|
15944
|
+
// A root package.json alone is not an npm build project — docs sites, husky,
|
|
15945
|
+
// and lint configs put one in Java repos. Apply only when runNpmToolchain can
|
|
15946
|
+
// actually scope something: MODELED workspaces that resolve to at least one
|
|
15947
|
+
// package, or a root build/test script. Mirroring the run-side gate here
|
|
15948
|
+
// matters at mixed roots: an unmodeled-glob declaration (`packages/**`,
|
|
15949
|
+
// `foo-*`) or a zero-package glob used to apply npm anyway, block a second
|
|
15950
|
+
// adapter's selection, and drop the repo to the very `unsupported` handoff
|
|
15951
|
+
// this guard exists to prevent — even though npm.run would immediately
|
|
15952
|
+
// concede unsupported and the other adapter alone would have succeeded.
|
|
15953
|
+
// When ZERO adapters
|
|
15954
|
+
// apply at an npm-shaped root, runBuildTest delegates here anyway so the
|
|
15955
|
+
// report carries runNpmToolchain's precise handoff note (the unmodeled-glob
|
|
15956
|
+
// gate below is that diagnostic path, not dead code).
|
|
15957
|
+
applies: /* @__PURE__ */ __name((root) => {
|
|
15958
|
+
const globs = readWorkspaceGlobs(root);
|
|
15959
|
+
if (globs.length > 0) {
|
|
15960
|
+
return !hasUnmodeledWorkspaceGlob(globs) && readWorkspacePackages(root).packages.length > 0;
|
|
15961
|
+
}
|
|
15962
|
+
return readRootPackage(root) !== null;
|
|
15963
|
+
}, "applies"),
|
|
15964
|
+
run: runNpmToolchain
|
|
15965
|
+
};
|
|
15966
|
+
|
|
15967
|
+
// packages/cli/src/commands/review/lib/toolchain.ts
|
|
15968
|
+
init_esbuild_shims();
|
|
15969
|
+
function selectToolchainAdapter(root, adapters) {
|
|
15970
|
+
const applicable = adapters.filter((adapter) => adapter.applies(root));
|
|
15971
|
+
return {
|
|
15972
|
+
adapter: applicable.length === 1 ? applicable[0] : null,
|
|
15973
|
+
applicable
|
|
15974
|
+
};
|
|
15975
|
+
}
|
|
15976
|
+
__name(selectToolchainAdapter, "selectToolchainAdapter");
|
|
15977
|
+
|
|
15978
|
+
// packages/cli/src/commands/review/build-test.ts
|
|
15979
|
+
var toolchainAdapters = [
|
|
15980
|
+
npmToolchainAdapter
|
|
15981
|
+
];
|
|
15982
|
+
var KEEP_HEAD = 2e3;
|
|
15983
|
+
var KEEP_TAIL = 6e3;
|
|
15984
|
+
function spawnTimedOut(r) {
|
|
15985
|
+
return r.error?.code === "ETIMEDOUT" || r.signal === "SIGTERM" && r.status === null;
|
|
15986
|
+
}
|
|
15987
|
+
__name(spawnTimedOut, "spawnTimedOut");
|
|
15988
|
+
var MODULE_ERROR_RE = /Cannot find module '[^']+'|Could not resolve "[^"]+"/;
|
|
15989
|
+
var RUNNER_SUMMARY_RE = /^\s*(?:Tests?|Test Files):?\s+\d/;
|
|
15990
|
+
var ANSI_SGR_RE = /\x1b\[[0-9;]*m/g;
|
|
15991
|
+
function trimOutput(s) {
|
|
15992
|
+
if (s.length <= KEEP_HEAD + KEEP_TAIL) return s;
|
|
15993
|
+
const middle = s.slice(KEEP_HEAD, s.length - KEEP_TAIL);
|
|
15994
|
+
const RESCUE_MAX = 40;
|
|
15995
|
+
const rescued = middle.split("\n").filter(
|
|
15996
|
+
(l) => MODULE_ERROR_RE.test(l) || RUNNER_SUMMARY_RE.test(l.replace(ANSI_SGR_RE, ""))
|
|
15997
|
+
).slice(0, RESCUE_MAX);
|
|
15998
|
+
const omitted = s.length - KEEP_HEAD - KEEP_TAIL;
|
|
15999
|
+
const marker = rescued.length ? `
|
|
16000
|
+
|
|
16001
|
+
... [${omitted} characters omitted; module-resolution errors and runner summaries kept] ...
|
|
16002
|
+
${rescued.join("\n")}
|
|
16003
|
+
|
|
16004
|
+
` : `
|
|
16005
|
+
|
|
16006
|
+
... [${omitted} characters omitted] ...
|
|
16007
|
+
|
|
16008
|
+
`;
|
|
16009
|
+
return s.slice(0, KEEP_HEAD) + marker + s.slice(-KEEP_TAIL);
|
|
16010
|
+
}
|
|
16011
|
+
__name(trimOutput, "trimOutput");
|
|
16012
|
+
function buildRunEnv(base = process.env) {
|
|
16013
|
+
return {
|
|
16014
|
+
...base,
|
|
16015
|
+
CI: "1",
|
|
16016
|
+
npm_config_yes: "true",
|
|
16017
|
+
QWEN_SKIP_PREPARE: "1"
|
|
16018
|
+
};
|
|
16019
|
+
}
|
|
16020
|
+
__name(buildRunEnv, "buildRunEnv");
|
|
16021
|
+
function run(command, cwd, timeoutMs) {
|
|
16022
|
+
const started = Date.now();
|
|
16023
|
+
const deadlineMs = Math.max(1, Math.round(timeoutMs));
|
|
16024
|
+
const r = spawnSync3(command, {
|
|
16025
|
+
cwd,
|
|
16026
|
+
shell: true,
|
|
16027
|
+
encoding: "utf8",
|
|
16028
|
+
timeout: deadlineMs,
|
|
16029
|
+
maxBuffer: 64 * 1024 * 1024,
|
|
16030
|
+
// A build that asks a question is a build that hangs until the deadline.
|
|
16031
|
+
stdio: ["ignore", "pipe", "pipe"],
|
|
16032
|
+
env: buildRunEnv()
|
|
16033
|
+
});
|
|
16034
|
+
const timedOut = spawnTimedOut(r);
|
|
16035
|
+
return {
|
|
16036
|
+
command,
|
|
16037
|
+
exitCode: r.status,
|
|
16038
|
+
seconds: Math.round((Date.now() - started) / 1e3),
|
|
16039
|
+
timedOut,
|
|
16040
|
+
output: trimOutput(`${r.stdout ?? ""}${r.stderr ?? ""}`),
|
|
16041
|
+
deadlineMs
|
|
16042
|
+
};
|
|
16043
|
+
}
|
|
16044
|
+
__name(run, "run");
|
|
16045
|
+
function changedFilesFrom(planPath) {
|
|
16046
|
+
let parsed;
|
|
16047
|
+
try {
|
|
16048
|
+
parsed = JSON.parse(readFileSync23(planPath, "utf8"));
|
|
16049
|
+
} catch (err) {
|
|
16050
|
+
throw new Error(
|
|
16051
|
+
`build-test: cannot read the plan ${planPath}: ${err.message}`
|
|
16052
|
+
);
|
|
16053
|
+
}
|
|
16054
|
+
if (typeof parsed !== "object" || parsed === null || Array.isArray(parsed)) {
|
|
16055
|
+
throw new Error(
|
|
16056
|
+
`build-test: the plan ${planPath} is not a JSON object (got ${parsed === null ? "null" : Array.isArray(parsed) ? "an array" : typeof parsed}).`
|
|
16057
|
+
);
|
|
16058
|
+
}
|
|
16059
|
+
const report = parsed;
|
|
16060
|
+
const files = Array.isArray(report.files) ? report.files : [];
|
|
16061
|
+
return files.map((f) => f?.path).filter((p) => typeof p === "string" && p.length > 0);
|
|
16062
|
+
}
|
|
16063
|
+
__name(changedFilesFrom, "changedFilesFrom");
|
|
16064
|
+
function runBuildTest(args) {
|
|
16065
|
+
if (!Number.isFinite(args.timeout)) {
|
|
16066
|
+
throw new Error(
|
|
16067
|
+
`build-test: --timeout must be a finite number of seconds (got ${String(args.timeout)}).`
|
|
16068
|
+
);
|
|
16069
|
+
}
|
|
16070
|
+
if (args.budget !== void 0 && !Number.isFinite(args.budget)) {
|
|
16071
|
+
throw new Error(
|
|
16072
|
+
`build-test: --budget must be a finite number of seconds (got ${String(args.budget)}).`
|
|
16073
|
+
);
|
|
16074
|
+
}
|
|
16075
|
+
const root = resolve18(args.worktree);
|
|
16076
|
+
const changedFiles = changedFilesFrom(args.plan);
|
|
16077
|
+
const runArgs = {
|
|
16078
|
+
root,
|
|
16079
|
+
changedFiles,
|
|
16080
|
+
timeout: args.timeout,
|
|
16081
|
+
install: args.install,
|
|
16082
|
+
buildOnly: args.buildOnly,
|
|
16083
|
+
budget: args.budget,
|
|
16084
|
+
exec: args.exec ?? run
|
|
16085
|
+
};
|
|
16086
|
+
const { adapter, applicable } = selectToolchainAdapter(
|
|
16087
|
+
root,
|
|
16088
|
+
toolchainAdapters
|
|
16089
|
+
);
|
|
16090
|
+
if (!adapter) {
|
|
16091
|
+
if (applicable.length > 1) {
|
|
16092
|
+
return {
|
|
16093
|
+
toolchain: "unsupported",
|
|
16094
|
+
affected: [],
|
|
16095
|
+
buildSet: [],
|
|
16096
|
+
widenedWith: [],
|
|
16097
|
+
install: null,
|
|
16098
|
+
build: [],
|
|
16099
|
+
test: [],
|
|
16100
|
+
ok: true,
|
|
16101
|
+
timedOut: [],
|
|
16102
|
+
note: "More than one toolchain applies at the repository root. build-test will not guess which one owns this diff, so it ran nothing \u2014 report the ambiguity as a handoff instead of substituting ad hoc build or test commands."
|
|
16103
|
+
};
|
|
16104
|
+
}
|
|
16105
|
+
if (existsSync10(join17(root, "package.json"))) {
|
|
16106
|
+
return npmToolchainAdapter.run(runArgs);
|
|
16107
|
+
}
|
|
16108
|
+
return {
|
|
16109
|
+
toolchain: "unsupported",
|
|
16110
|
+
affected: [],
|
|
16111
|
+
buildSet: [],
|
|
16112
|
+
widenedWith: [],
|
|
16113
|
+
install: null,
|
|
16114
|
+
build: [],
|
|
16115
|
+
test: [],
|
|
16116
|
+
ok: true,
|
|
16117
|
+
timedOut: [],
|
|
16118
|
+
note: "No supported npm project here to scope. Fall back to the build/test precedence in your brief \u2014 installing dependencies first \u2014 and give each command a deadline it can actually meet."
|
|
16119
|
+
};
|
|
16120
|
+
}
|
|
16121
|
+
return adapter.run(runArgs);
|
|
16122
|
+
}
|
|
15997
16123
|
__name(runBuildTest, "runBuildTest");
|
|
15998
16124
|
var buildTestCommand = {
|
|
15999
16125
|
command: "build-test",
|
|
@@ -16019,7 +16145,7 @@ var buildTestCommand = {
|
|
|
16019
16145
|
}).option("install", {
|
|
16020
16146
|
type: "boolean",
|
|
16021
16147
|
default: true,
|
|
16022
|
-
describe: "
|
|
16148
|
+
describe: "Fetch dependencies first: `npm ci` when node_modules is absent"
|
|
16023
16149
|
}).option("build-only", {
|
|
16024
16150
|
type: "boolean",
|
|
16025
16151
|
default: false,
|
|
@@ -16044,25 +16170,25 @@ var buildTestCommand = {
|
|
|
16044
16170
|
init_esbuild_shims();
|
|
16045
16171
|
import { spawnSync as spawnSync5 } from "node:child_process";
|
|
16046
16172
|
import {
|
|
16047
|
-
existsSync as
|
|
16173
|
+
existsSync as existsSync11,
|
|
16048
16174
|
mkdirSync as mkdirSync19,
|
|
16049
16175
|
readFileSync as readFileSync24,
|
|
16050
|
-
rmSync as
|
|
16176
|
+
rmSync as rmSync8,
|
|
16051
16177
|
statSync as statSync12,
|
|
16052
16178
|
writeFileSync as writeFileSync19
|
|
16053
16179
|
} from "node:fs";
|
|
16054
|
-
import { dirname as dirname17, join as
|
|
16180
|
+
import { dirname as dirname17, join as join18, resolve as resolve19 } from "node:path";
|
|
16055
16181
|
|
|
16056
16182
|
// packages/cli/src/commands/review/lib/worktree.ts
|
|
16057
16183
|
init_esbuild_shims();
|
|
16058
16184
|
import { spawnSync as spawnSync4 } from "node:child_process";
|
|
16059
|
-
import { rmSync as
|
|
16185
|
+
import { rmSync as rmSync7 } from "node:fs";
|
|
16060
16186
|
function discardWorktree(cwd, tree) {
|
|
16061
16187
|
const sweep = spawnSync4("git", ["worktree", "remove", "--force", tree], {
|
|
16062
16188
|
cwd,
|
|
16063
16189
|
encoding: "utf8"
|
|
16064
16190
|
});
|
|
16065
|
-
|
|
16191
|
+
rmSync7(tree, { recursive: true, force: true });
|
|
16066
16192
|
return sweep;
|
|
16067
16193
|
}
|
|
16068
16194
|
__name(discardWorktree, "discardWorktree");
|
|
@@ -16116,14 +16242,14 @@ function runBaseTree(args) {
|
|
|
16116
16242
|
);
|
|
16117
16243
|
}
|
|
16118
16244
|
const worktree = resolve19(args.worktree);
|
|
16119
|
-
if (!
|
|
16245
|
+
if (!existsSync11(worktree)) {
|
|
16120
16246
|
return unavailable(`the review worktree ${worktree} does not exist`);
|
|
16121
16247
|
}
|
|
16122
16248
|
const tree = baseWorktreePath(worktree);
|
|
16123
|
-
const marker = /* @__PURE__ */ __name(() =>
|
|
16124
|
-
const failedMarker = /* @__PURE__ */ __name(() =>
|
|
16249
|
+
const marker = /* @__PURE__ */ __name(() => join18(tree, ".qwen-review-base-ok"), "marker");
|
|
16250
|
+
const failedMarker = /* @__PURE__ */ __name(() => join18(tree, ".qwen-review-base-failed"), "failedMarker");
|
|
16125
16251
|
try {
|
|
16126
|
-
if (
|
|
16252
|
+
if (existsSync11(tree) && readFileSync24(marker(), "utf8").trim() === baseSha && gitOut(tree, "rev-parse", "HEAD") === baseSha) {
|
|
16127
16253
|
return {
|
|
16128
16254
|
available: true,
|
|
16129
16255
|
path: tree,
|
|
@@ -16135,7 +16261,7 @@ function runBaseTree(args) {
|
|
|
16135
16261
|
} catch {
|
|
16136
16262
|
}
|
|
16137
16263
|
try {
|
|
16138
|
-
if (
|
|
16264
|
+
if (existsSync11(tree) && readFileSync24(failedMarker(), "utf8").trim() === baseSha) {
|
|
16139
16265
|
return {
|
|
16140
16266
|
available: false,
|
|
16141
16267
|
path: tree,
|
|
@@ -16150,7 +16276,7 @@ function runBaseTree(args) {
|
|
|
16150
16276
|
try {
|
|
16151
16277
|
const age = Date.now() - statSync12(lock).mtimeMs;
|
|
16152
16278
|
if (age > 30 * 60 * 1e3) {
|
|
16153
|
-
|
|
16279
|
+
rmSync8(lock, { recursive: true, force: true });
|
|
16154
16280
|
}
|
|
16155
16281
|
} catch {
|
|
16156
16282
|
}
|
|
@@ -16169,7 +16295,7 @@ function runBaseTree(args) {
|
|
|
16169
16295
|
try {
|
|
16170
16296
|
return buildBaseTree(baseSha);
|
|
16171
16297
|
} finally {
|
|
16172
|
-
|
|
16298
|
+
rmSync8(lock, { recursive: true, force: true });
|
|
16173
16299
|
}
|
|
16174
16300
|
function buildBaseTree(baseSha2) {
|
|
16175
16301
|
let sweep;
|
|
@@ -16270,7 +16396,7 @@ var baseTreeCommand = {
|
|
|
16270
16396
|
// packages/cli/src/commands/review/test-delta.ts
|
|
16271
16397
|
init_esbuild_shims();
|
|
16272
16398
|
import { spawnSync as spawnSync6 } from "node:child_process";
|
|
16273
|
-
import { existsSync as
|
|
16399
|
+
import { existsSync as existsSync12, mkdirSync as mkdirSync20, readFileSync as readFileSync25, writeFileSync as writeFileSync20 } from "node:fs";
|
|
16274
16400
|
import { dirname as dirname18, resolve as resolve20 } from "node:path";
|
|
16275
16401
|
var ANSI_SGR_RE2 = /\x1b\[[0-9;]*m/g;
|
|
16276
16402
|
var RERUNNABLE_COMMAND_RE = /^npm test(?: --workspace="[\w@./-]+")?$/;
|
|
@@ -16350,7 +16476,7 @@ function runTestDelta(args) {
|
|
|
16350
16476
|
`cannot read the build-test report ${args.report}: ${err.message}`
|
|
16351
16477
|
);
|
|
16352
16478
|
}
|
|
16353
|
-
if (!
|
|
16479
|
+
if (!existsSync12(baseline)) {
|
|
16354
16480
|
return empty(
|
|
16355
16481
|
`the base tree ${baseline} does not exist \u2014 run \`qwen review base-tree\` first`
|
|
16356
16482
|
);
|
|
@@ -16501,11 +16627,11 @@ import {
|
|
|
16501
16627
|
mkdirSync as mkdirSync21,
|
|
16502
16628
|
writeFileSync as writeFileSync21,
|
|
16503
16629
|
readFileSync as readFileSync26,
|
|
16504
|
-
existsSync as
|
|
16505
|
-
rmSync as
|
|
16630
|
+
existsSync as existsSync13,
|
|
16631
|
+
rmSync as rmSync9,
|
|
16506
16632
|
statSync as statSync13
|
|
16507
16633
|
} from "node:fs";
|
|
16508
|
-
import { dirname as dirname19, join as
|
|
16634
|
+
import { dirname as dirname19, join as join19, resolve as resolve21 } from "node:path";
|
|
16509
16635
|
import { tmpdir as tmpdir2 } from "node:os";
|
|
16510
16636
|
var SERVER_NAME_RE = /^[A-Za-z0-9][A-Za-z0-9._-]{0,63}$/;
|
|
16511
16637
|
function shellQuote(v) {
|
|
@@ -16623,12 +16749,12 @@ function runDrive(args) {
|
|
|
16623
16749
|
waitMs(POLL_MS);
|
|
16624
16750
|
}
|
|
16625
16751
|
}
|
|
16626
|
-
const dir =
|
|
16752
|
+
const dir = join19(tmpdir2(), `qwen-review-drive-${server}`);
|
|
16627
16753
|
mkdirSync21(dir, { recursive: true });
|
|
16628
|
-
const scriptPath =
|
|
16629
|
-
const logPath = args.logPath ??
|
|
16630
|
-
const sentinelPath =
|
|
16631
|
-
|
|
16754
|
+
const scriptPath = join19(dir, "drive.sh");
|
|
16755
|
+
const logPath = args.logPath ?? join19(dir, "drive.log");
|
|
16756
|
+
const sentinelPath = join19(dir, "drive.rc");
|
|
16757
|
+
rmSync9(sentinelPath, { force: true });
|
|
16632
16758
|
writeFileSync21(scriptPath, wrapScript(args.script, sentinelPath), "utf8");
|
|
16633
16759
|
const droveFrom = Date.now();
|
|
16634
16760
|
let output = "";
|
|
@@ -16659,8 +16785,8 @@ function runDrive(args) {
|
|
|
16659
16785
|
}
|
|
16660
16786
|
const deadline = droveFrom + args.timeout * 1e3;
|
|
16661
16787
|
for (; ; ) {
|
|
16662
|
-
output =
|
|
16663
|
-
exitCode =
|
|
16788
|
+
output = existsSync13(logPath) ? readFileSync26(logPath, "utf8") : "";
|
|
16789
|
+
exitCode = existsSync13(sentinelPath) ? sentinelExitCode(readFileSync26(sentinelPath, "utf8")) : null;
|
|
16664
16790
|
if (exitCode !== null) {
|
|
16665
16791
|
outcome = "completed";
|
|
16666
16792
|
break;
|
|
@@ -16674,7 +16800,7 @@ function runDrive(args) {
|
|
|
16674
16800
|
}
|
|
16675
16801
|
} finally {
|
|
16676
16802
|
tmux("kill-server");
|
|
16677
|
-
if (!args.logPath)
|
|
16803
|
+
if (!args.logPath) rmSync9(dir, { recursive: true, force: true });
|
|
16678
16804
|
}
|
|
16679
16805
|
const { text, truncated } = trimCapture(output);
|
|
16680
16806
|
const droveForMs = Date.now() - droveFrom;
|
|
@@ -17927,14 +18053,14 @@ import {
|
|
|
17927
18053
|
readdirSync as readdirSync7,
|
|
17928
18054
|
writeFileSync as writeFileSync24,
|
|
17929
18055
|
readFileSync as readFileSync29,
|
|
17930
|
-
rmSync as
|
|
18056
|
+
rmSync as rmSync10,
|
|
17931
18057
|
lstatSync as lstatSync5,
|
|
17932
|
-
existsSync as
|
|
18058
|
+
existsSync as existsSync14,
|
|
17933
18059
|
statSync as statSync14,
|
|
17934
18060
|
symlinkSync
|
|
17935
18061
|
} from "node:fs";
|
|
17936
18062
|
import { createRequire } from "node:module";
|
|
17937
|
-
import { dirname as dirname22, join as
|
|
18063
|
+
import { dirname as dirname22, join as join20, isAbsolute as isAbsolute5, sep as sep7 } from "node:path";
|
|
17938
18064
|
var FIXTURE_DIR_RE = /(^|\/)(__fixtures__|__mocks__|__snapshots__|fixtures)\//;
|
|
17939
18065
|
function planTestEfficacy(files, workspaceGlobs) {
|
|
17940
18066
|
const tests = files.filter((f) => f.kind === "test").map((f) => f.path);
|
|
@@ -18458,7 +18584,7 @@ function gitOut2(cwd, ...args) {
|
|
|
18458
18584
|
}
|
|
18459
18585
|
__name(gitOut2, "gitOut");
|
|
18460
18586
|
function findVitestBin(worktree, resolveModule = createRequire(
|
|
18461
|
-
|
|
18587
|
+
join20(worktree, "noop.js")
|
|
18462
18588
|
).resolve) {
|
|
18463
18589
|
let pkgPath;
|
|
18464
18590
|
try {
|
|
@@ -18474,7 +18600,7 @@ function findVitestBin(worktree, resolveModule = createRequire(
|
|
|
18474
18600
|
if (!bin) {
|
|
18475
18601
|
throw new Error(`vitest package at ${pkgPath} declares no "vitest" bin`);
|
|
18476
18602
|
}
|
|
18477
|
-
return
|
|
18603
|
+
return join20(dirname22(pkgPath), bin);
|
|
18478
18604
|
}
|
|
18479
18605
|
__name(findVitestBin, "findVitestBin");
|
|
18480
18606
|
function gitCapture(cwd, ...args) {
|
|
@@ -18500,7 +18626,7 @@ function safeRmWithin(worktree, relPath) {
|
|
|
18500
18626
|
const parts = relPath.split(/[/\\]+/).filter((s) => s && s !== ".");
|
|
18501
18627
|
let cur = worktree;
|
|
18502
18628
|
for (let i = 0; i < parts.length; i++) {
|
|
18503
|
-
cur =
|
|
18629
|
+
cur = join20(cur, parts[i]);
|
|
18504
18630
|
let st;
|
|
18505
18631
|
try {
|
|
18506
18632
|
st = lstatSync5(cur);
|
|
@@ -18513,7 +18639,7 @@ function safeRmWithin(worktree, relPath) {
|
|
|
18513
18639
|
);
|
|
18514
18640
|
}
|
|
18515
18641
|
}
|
|
18516
|
-
|
|
18642
|
+
rmSync10(cur, { force: true });
|
|
18517
18643
|
}
|
|
18518
18644
|
__name(safeRmWithin, "safeRmWithin");
|
|
18519
18645
|
var existsAtBase = /* @__PURE__ */ __name((cwd, base, path3) => existsAtRev(cwd, base, path3), "existsAtBase");
|
|
@@ -18525,15 +18651,15 @@ __name(probeCleanupFailureDetail, "probeCleanupFailureDetail");
|
|
|
18525
18651
|
function exposeDependencies(probeTree, dependencyRoot) {
|
|
18526
18652
|
const done = { linked: 0, failed: 0 };
|
|
18527
18653
|
if (probeTree === dependencyRoot) return done;
|
|
18528
|
-
const source =
|
|
18529
|
-
const target =
|
|
18530
|
-
if (!
|
|
18654
|
+
const source = join20(dependencyRoot, "node_modules");
|
|
18655
|
+
const target = join20(probeTree, "node_modules");
|
|
18656
|
+
if (!existsSync14(source) || existsSync14(target)) return done;
|
|
18531
18657
|
mkdirSync25(target);
|
|
18532
18658
|
const linkType = process.platform === "win32" ? "junction" : "dir";
|
|
18533
18659
|
for (const entry of readdirSync7(source, { withFileTypes: true })) {
|
|
18534
18660
|
if (entry.name === ".vite" || entry.name === ".vite-temp") continue;
|
|
18535
|
-
const sourceEntry =
|
|
18536
|
-
const targetEntry =
|
|
18661
|
+
const sourceEntry = join20(source, entry.name);
|
|
18662
|
+
const targetEntry = join20(target, entry.name);
|
|
18537
18663
|
let sourceStats;
|
|
18538
18664
|
try {
|
|
18539
18665
|
sourceStats = lstatSync5(sourceEntry);
|
|
@@ -18561,7 +18687,7 @@ function exposeDependencies(probeTree, dependencyRoot) {
|
|
|
18561
18687
|
}
|
|
18562
18688
|
for (const pkg of pkgs) {
|
|
18563
18689
|
try {
|
|
18564
|
-
symlinkSync(
|
|
18690
|
+
symlinkSync(join20(sourceEntry, pkg), join20(targetEntry, pkg), linkType);
|
|
18565
18691
|
done.linked++;
|
|
18566
18692
|
} catch {
|
|
18567
18693
|
done.failed++;
|
|
@@ -18707,7 +18833,7 @@ function newSideLength(header) {
|
|
|
18707
18833
|
__name(newSideLength, "newSideLength");
|
|
18708
18834
|
function runOneHunkProbe(probeTree, hunk, probes, deadlineAt, now = Date.now) {
|
|
18709
18835
|
const { patch: _patch, ...meta } = hunk;
|
|
18710
|
-
const abs =
|
|
18836
|
+
const abs = join20(probeTree, hunk.file);
|
|
18711
18837
|
let original;
|
|
18712
18838
|
try {
|
|
18713
18839
|
original = readFileSync29(abs, "utf8");
|
|
@@ -18742,7 +18868,7 @@ function runOneHunkProbe(probeTree, hunk, probes, deadlineAt, now = Date.now) {
|
|
|
18742
18868
|
}
|
|
18743
18869
|
__name(runOneHunkProbe, "runOneHunkProbe");
|
|
18744
18870
|
function runControlMutant(probeTree, probeFile, deadlineAt, now = Date.now) {
|
|
18745
|
-
const abs =
|
|
18871
|
+
const abs = join20(probeTree, probeFile);
|
|
18746
18872
|
let original;
|
|
18747
18873
|
try {
|
|
18748
18874
|
original = readFileSync29(abs, "utf8");
|
|
@@ -18768,7 +18894,7 @@ __qcIt('QWEN-REVIEW-POSITIVE-CONTROL', () => {
|
|
|
18768
18894
|
}
|
|
18769
18895
|
__name(runControlMutant, "runControlMutant");
|
|
18770
18896
|
function runOneMutant(probeTree, mutant, probes, deadlineAt, now = Date.now, dependencyRoot = probeTree) {
|
|
18771
|
-
const abs =
|
|
18897
|
+
const abs = join20(probeTree, mutant.file);
|
|
18772
18898
|
const original = readFileSync29(abs, "utf8");
|
|
18773
18899
|
const lines = original.split("\n");
|
|
18774
18900
|
if ((lines[mutant.line - 1] ?? "").trim() !== mutant.statement) {
|
|
@@ -18846,8 +18972,8 @@ async function runTestEfficacy(args) {
|
|
|
18846
18972
|
globs
|
|
18847
18973
|
);
|
|
18848
18974
|
for (const p of revert) {
|
|
18849
|
-
const norm =
|
|
18850
|
-
const root =
|
|
18975
|
+
const norm = join20(worktree, p);
|
|
18976
|
+
const root = join20(worktree, ".");
|
|
18851
18977
|
if (isAbsolute5(p) || norm !== root && !norm.startsWith(root + sep7)) {
|
|
18852
18978
|
throw new Error(
|
|
18853
18979
|
`refusing to run: revert path escapes the worktree: ${JSON.stringify(p)}`
|
|
@@ -19119,7 +19245,7 @@ async function runTestEfficacy(args) {
|
|
|
19119
19245
|
} catch (e) {
|
|
19120
19246
|
removeError = e;
|
|
19121
19247
|
}
|
|
19122
|
-
if (
|
|
19248
|
+
if (existsSync14(probeTree)) {
|
|
19123
19249
|
cleanupFailure = probeCleanupFailureDetail(
|
|
19124
19250
|
probeTree,
|
|
19125
19251
|
removeError,
|
|
@@ -19296,8 +19422,8 @@ var testEfficacyCommand = {
|
|
|
19296
19422
|
|
|
19297
19423
|
// packages/cli/src/commands/review/test-plan.ts
|
|
19298
19424
|
init_esbuild_shims();
|
|
19299
|
-
import { existsSync as
|
|
19300
|
-
import { dirname as dirname23, join as
|
|
19425
|
+
import { existsSync as existsSync15, mkdirSync as mkdirSync26, readFileSync as readFileSync30, writeFileSync as writeFileSync25 } from "node:fs";
|
|
19426
|
+
import { dirname as dirname23, join as join21, normalize, resolve as resolve24 } from "node:path";
|
|
19301
19427
|
var PLAN_NAME_RE = /(test\s*plan|\btesting\b|how\s+(?:has\s+this|to)\s+(?:been\s+)?test(?:ed)?|测试计划|测试方案|测试步骤)/i;
|
|
19302
19428
|
var HEADING_LINE_RE = /^(#{1,6})(?:[ \t](.*))?$/;
|
|
19303
19429
|
var BOLD_LINE_RE = /^\*\*([^*\n]+)\*\*:?\s*$/;
|
|
@@ -19500,7 +19626,7 @@ function rulePath(text, worktree, changed) {
|
|
|
19500
19626
|
};
|
|
19501
19627
|
}
|
|
19502
19628
|
const ignored = isGitIgnored(worktree, path3);
|
|
19503
|
-
if (
|
|
19629
|
+
if (existsSync15(join21(worktree, path3))) {
|
|
19504
19630
|
return {
|
|
19505
19631
|
kind: "path",
|
|
19506
19632
|
text,
|
|
@@ -19571,7 +19697,7 @@ function ruleCommand(text, worktree, buildTest) {
|
|
|
19571
19697
|
let rootScripts = [];
|
|
19572
19698
|
try {
|
|
19573
19699
|
const rootPkg = JSON.parse(
|
|
19574
|
-
readFileSync30(
|
|
19700
|
+
readFileSync30(join21(worktree, "package.json"), "utf8")
|
|
19575
19701
|
);
|
|
19576
19702
|
rootScripts = Object.keys(rootPkg.scripts ?? {});
|
|
19577
19703
|
} catch {
|
|
@@ -19585,7 +19711,7 @@ function ruleCommand(text, worktree, buildTest) {
|
|
|
19585
19711
|
for (const dir of skipped) {
|
|
19586
19712
|
try {
|
|
19587
19713
|
const pkg = JSON.parse(
|
|
19588
|
-
readFileSync30(
|
|
19714
|
+
readFileSync30(join21(worktree, dir, "package.json"), "utf8")
|
|
19589
19715
|
);
|
|
19590
19716
|
for (const s of Object.keys(pkg?.scripts ?? {})) defined.add(s);
|
|
19591
19717
|
} catch {
|
|
@@ -19787,8 +19913,8 @@ var testPlanCommand = {
|
|
|
19787
19913
|
// packages/cli/src/commands/review/cleanup.ts
|
|
19788
19914
|
init_esbuild_shims();
|
|
19789
19915
|
import { execFileSync as execFileSync5 } from "node:child_process";
|
|
19790
|
-
import { existsSync as
|
|
19791
|
-
import { join as
|
|
19916
|
+
import { existsSync as existsSync16, readFileSync as readFileSync31, readdirSync as readdirSync8, rmSync as rmSync11 } from "node:fs";
|
|
19917
|
+
import { join as join22 } from "node:path";
|
|
19792
19918
|
var AUTOMATION_MARKER = "<!-- qwen-";
|
|
19793
19919
|
function isAutomationComment(body) {
|
|
19794
19920
|
return (body ?? "").trimStart().startsWith(AUTOMATION_MARKER);
|
|
@@ -19970,7 +20096,7 @@ function runCleanup(target) {
|
|
|
19970
20096
|
report("probe worktree", probeWorktreePath(wt));
|
|
19971
20097
|
report("base worktree", baseWorktreePath(wt));
|
|
19972
20098
|
try {
|
|
19973
|
-
|
|
20099
|
+
rmSync11(`${baseWorktreePath(wt)}.lock`, { recursive: true, force: true });
|
|
19974
20100
|
} catch (err) {
|
|
19975
20101
|
writeStderrLine(
|
|
19976
20102
|
`note: could not remove base lock ${baseWorktreePath(wt)}.lock: ${err.message}`
|
|
@@ -19993,7 +20119,7 @@ function runCleanup(target) {
|
|
|
19993
20119
|
const prefix = tmpPrefix(target);
|
|
19994
20120
|
let tmpEntries = [];
|
|
19995
20121
|
try {
|
|
19996
|
-
tmpEntries =
|
|
20122
|
+
tmpEntries = existsSync16(REVIEW_TMP_DIR) ? readdirSync8(REVIEW_TMP_DIR) : [];
|
|
19997
20123
|
} catch (err) {
|
|
19998
20124
|
writeStderrLine(
|
|
19999
20125
|
`Failed to read ${REVIEW_TMP_DIR}: ${err.message}`
|
|
@@ -20001,9 +20127,9 @@ function runCleanup(target) {
|
|
|
20001
20127
|
}
|
|
20002
20128
|
for (const file of tmpEntries) {
|
|
20003
20129
|
if (!file.startsWith(prefix)) continue;
|
|
20004
|
-
const full =
|
|
20130
|
+
const full = join22(REVIEW_TMP_DIR, file);
|
|
20005
20131
|
try {
|
|
20006
|
-
|
|
20132
|
+
rmSync11(full, { recursive: true, force: true });
|
|
20007
20133
|
writeStdoutLine(`Removed temp file: ${full}`);
|
|
20008
20134
|
removedAny = true;
|
|
20009
20135
|
} catch (err) {
|
|
@@ -20035,7 +20161,7 @@ var cleanupCommand = {
|
|
|
20035
20161
|
// packages/cli/src/commands/review/cost-ledger.ts
|
|
20036
20162
|
init_esbuild_shims();
|
|
20037
20163
|
import { mkdirSync as mkdirSync27, readFileSync as readFileSync32, statSync as statSync15, writeFileSync as writeFileSync26 } from "node:fs";
|
|
20038
|
-
import { dirname as dirname24, join as
|
|
20164
|
+
import { dirname as dirname24, join as join23, resolve as resolve25 } from "node:path";
|
|
20039
20165
|
function readUsage(file, floorMs) {
|
|
20040
20166
|
const raw = readFileSync32(file, "utf8");
|
|
20041
20167
|
const events = [];
|
|
@@ -20178,7 +20304,7 @@ __name(planFloorMs, "planFloorMs");
|
|
|
20178
20304
|
function computeLedger(planPath, env = process.env) {
|
|
20179
20305
|
const floorMs = planFloorMs(planPath);
|
|
20180
20306
|
const { projectDir, sessionId, dir } = transcriptPaths(env);
|
|
20181
|
-
const chatFile =
|
|
20307
|
+
const chatFile = join23(projectDir, "chats", `${sessionId}.jsonl`);
|
|
20182
20308
|
let mainEvents;
|
|
20183
20309
|
try {
|
|
20184
20310
|
mainEvents = readUsage(chatFile, floorMs).events;
|
|
@@ -20203,7 +20329,7 @@ function computeLedger(planPath, env = process.env) {
|
|
|
20203
20329
|
const agents = [];
|
|
20204
20330
|
const agentEvents = [];
|
|
20205
20331
|
for (const f of files) {
|
|
20206
|
-
const full =
|
|
20332
|
+
const full = join23(dir, f);
|
|
20207
20333
|
let mtimeMs;
|
|
20208
20334
|
try {
|
|
20209
20335
|
mtimeMs = statSync15(full).mtimeMs;
|
|
@@ -20349,7 +20475,7 @@ var costLedgerCommand = {
|
|
|
20349
20475
|
init_esbuild_shims();
|
|
20350
20476
|
import { spawn, execFileSync as execFileSync6 } from "node:child_process";
|
|
20351
20477
|
import { readdirSync as readdirSync9, readFileSync as readFileSync33, realpathSync as realpathSync6, statSync as statSync16 } from "node:fs";
|
|
20352
|
-
import { dirname as dirname25, join as
|
|
20478
|
+
import { dirname as dirname25, join as join24, resolve as resolve26 } from "node:path";
|
|
20353
20479
|
var COMPOSED_PATTERN = /^qwen-review-.*composed\.json$/;
|
|
20354
20480
|
var COMPOSED_POLL_MS = 250;
|
|
20355
20481
|
var SIGNAL_EXIT_CODES = {
|
|
@@ -20383,7 +20509,7 @@ function newestArtifactSince(dir, pattern, startMs) {
|
|
|
20383
20509
|
}
|
|
20384
20510
|
for (const name of names) {
|
|
20385
20511
|
if (!pattern.test(name)) continue;
|
|
20386
|
-
const path3 =
|
|
20512
|
+
const path3 = join24(dir, name);
|
|
20387
20513
|
let mtime;
|
|
20388
20514
|
try {
|
|
20389
20515
|
mtime = statSync16(path3).mtimeMs;
|
|
@@ -20638,7 +20764,7 @@ var runCommand = {
|
|
|
20638
20764
|
// packages/cli/src/commands/review/save-artifact.ts
|
|
20639
20765
|
init_esbuild_shims();
|
|
20640
20766
|
import {
|
|
20641
|
-
existsSync as
|
|
20767
|
+
existsSync as existsSync17,
|
|
20642
20768
|
lstatSync as lstatSync6,
|
|
20643
20769
|
mkdirSync as mkdirSync28,
|
|
20644
20770
|
readFileSync as readFileSync34,
|
|
@@ -20647,7 +20773,7 @@ import {
|
|
|
20647
20773
|
import {
|
|
20648
20774
|
dirname as dirname26,
|
|
20649
20775
|
isAbsolute as isAbsolute6,
|
|
20650
|
-
join as
|
|
20776
|
+
join as join25,
|
|
20651
20777
|
relative as relative6,
|
|
20652
20778
|
resolve as resolve27,
|
|
20653
20779
|
sep as sep8,
|
|
@@ -20677,8 +20803,8 @@ function rejectSymlinkPath(root, path3, label2) {
|
|
|
20677
20803
|
const rel = relative6(root, path3);
|
|
20678
20804
|
let current = root;
|
|
20679
20805
|
for (const segment of rel.split(sep8)) {
|
|
20680
|
-
current =
|
|
20681
|
-
if (
|
|
20806
|
+
current = join25(current, segment);
|
|
20807
|
+
if (existsSync17(current) && lstatSync6(current).isSymbolicLink()) {
|
|
20682
20808
|
throw new Error(`${label2} must not traverse a symbolic link.`);
|
|
20683
20809
|
}
|
|
20684
20810
|
}
|
|
@@ -20686,7 +20812,7 @@ function rejectSymlinkPath(root, path3, label2) {
|
|
|
20686
20812
|
__name(rejectSymlinkPath, "rejectSymlinkPath");
|
|
20687
20813
|
function sameFile2(left, right) {
|
|
20688
20814
|
if (left === right) return true;
|
|
20689
|
-
if (!
|
|
20815
|
+
if (!existsSync17(left) || !existsSync17(right)) return false;
|
|
20690
20816
|
const leftStat = statSync17(left);
|
|
20691
20817
|
const rightStat = statSync17(right);
|
|
20692
20818
|
return leftStat.dev === rightStat.dev && leftStat.ino === rightStat.ino;
|
|
@@ -21139,10 +21265,10 @@ var updateCommand3 = {
|
|
|
21139
21265
|
stdioHelpers,
|
|
21140
21266
|
{ updateEventEmitter }
|
|
21141
21267
|
] = await Promise.all([
|
|
21142
|
-
import("./settings-
|
|
21143
|
-
import("./updateCheck-
|
|
21144
|
-
import("./installationInfo-
|
|
21145
|
-
import("./standalone-update-
|
|
21268
|
+
import("./settings-5O24D3OJ.js"),
|
|
21269
|
+
import("./updateCheck-LOS5GYFC.js"),
|
|
21270
|
+
import("./installationInfo-XXB75T7O.js"),
|
|
21271
|
+
import("./standalone-update-QP742MGP.js"),
|
|
21146
21272
|
import("./stdioHelpers-7A2EE64Z.js"),
|
|
21147
21273
|
import("./updateEventEmitter-5MKC7BLQ.js")
|
|
21148
21274
|
]);
|
|
@@ -22304,7 +22430,7 @@ async function loadCliConfig(settings, argv, cwd = process.cwd(), overrideExtens
|
|
|
22304
22430
|
disabledSlashCommands: disabledSlashCommands.length > 0 ? disabledSlashCommands : void 0,
|
|
22305
22431
|
disabledSkillNamesProvider: bareMode || safeMode ? void 0 : disabledSkillNamesProvider,
|
|
22306
22432
|
terminalImageRenderSupportProvider: interactive ? async () => {
|
|
22307
|
-
const { getTerminalImageRenderSupport } = await import("./terminal-image-renderer-
|
|
22433
|
+
const { getTerminalImageRenderSupport } = await import("./terminal-image-renderer-BWRESAQ7.js");
|
|
22308
22434
|
return getTerminalImageRenderSupport();
|
|
22309
22435
|
} : void 0,
|
|
22310
22436
|
disabledSkillLevels: bareMode || safeMode || !Array.isArray(settings.skills?.disabledLevels) ? void 0 : settings.skills.disabledLevels.filter(isSkillLevel),
|