@qwen-code/qwen-code 0.21.8 → 0.21.9
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/README.md +2 -1
- package/bundled/qc-helper/docs/configuration/settings.md +32 -30
- package/bundled/qc-helper/docs/extension/introduction.md +15 -1
- package/bundled/qc-helper/docs/features/code-review.md +2 -0
- package/bundled/qc-helper/docs/qwen-serve-deploy-local.md +1 -1
- package/bundled/qc-helper/docs/qwen-serve.md +42 -39
- package/bundled/review/SKILL.md +11 -7
- package/chunks/{MaxSizedBox-7PM6BGJ5.js → MaxSizedBox-6BZANW7X.js} +9 -9
- package/chunks/{StandaloneSessionPicker-3UQHM7GV.js → StandaloneSessionPicker-VDC5KE7T.js} +28 -25
- package/chunks/{acpAgent-5UWLFV6V.js → acpAgent-F2NSBCUF.js} +1433 -706
- package/chunks/{agent-624T2BLO.js → agent-VOHJOEBB.js} +8 -8
- package/chunks/{agent-headless-2EE5J2KX.js → agent-headless-J5NFOPHP.js} +8 -8
- package/chunks/{bridge-JENKGFFP.js → bridge-NQIZZLAS.js} +13 -13
- package/chunks/{channel-management-service-DDWUPHMU.js → channel-management-service-PHELKOW2.js} +4 -4
- package/chunks/{channel-settings-store-SA6JZSPH.js → channel-settings-store-VIY2OENO.js} +17 -15
- package/chunks/{channel-worker-group-E67EN3RV.js → channel-worker-group-MSHT6CWR.js} +6 -6
- package/chunks/{channel-worker-manager-SW4C45CF.js → channel-worker-manager-XXD3GDSK.js} +6 -6
- package/chunks/{channel-worker-supervisor-5SRD24FG.js → channel-worker-supervisor-IVSDIMI4.js} +4 -4
- package/chunks/{chunk-S3Y3GBFD.js → chunk-23VQTELM.js} +2 -2
- package/chunks/{chunk-XZKQT2B2.js → chunk-3WDYBTTI.js} +5 -5
- package/chunks/{chunk-YEF7XEO2.js → chunk-3XVDTHBJ.js} +3 -3
- package/chunks/{chunk-IBYULW65.js → chunk-46YJDYCU.js} +145 -10
- package/chunks/chunk-4JRM2BSM.js +48 -0
- package/chunks/{chunk-L4N6TIP7.js → chunk-4TRQPFDP.js} +4 -2
- package/chunks/{chunk-5ZGR6RKJ.js → chunk-4XQNB3KN.js} +3 -3
- package/chunks/chunk-5EJZE3FP.js +140 -0
- package/chunks/{chunk-XHD7CRP2.js → chunk-5RBDAGC6.js} +2 -2
- package/chunks/{chunk-KJZ26VBX.js → chunk-67EWJE77.js} +1 -1
- package/chunks/{chunk-TE3ZAJE7.js → chunk-6Q5ABMTU.js} +1 -1
- package/chunks/{chunk-U5SLIG7E.js → chunk-7AEPJGL4.js} +1 -1
- package/chunks/{chunk-OHKJVAKG.js → chunk-7GOYZQPR.js} +20 -1977
- package/chunks/{chunk-3SE7J4DR.js → chunk-7S4JBJLU.js} +3 -3
- package/chunks/{chunk-TKSZJ5BV.js → chunk-AKJQSWV4.js} +3 -3
- package/chunks/{chunk-E4ZBKMSF.js → chunk-ATMO54WE.js} +6 -6
- package/chunks/{chunk-KKDVZLGL.js → chunk-BAMN6XSD.js} +1 -1
- package/chunks/{chunk-IUQ52YJK.js → chunk-BIRWP6LU.js} +1 -1
- package/chunks/{chunk-AKA24BGO.js → chunk-BT6GQIEJ.js} +1 -1
- package/chunks/{chunk-ZCLLJARV.js → chunk-BZP4QPNK.js} +10 -10
- package/chunks/{chunk-2M5N3DHY.js → chunk-CMOBWHWW.js} +1 -1
- package/chunks/{chunk-WV5J6Q6N.js → chunk-D7BXVKSF.js} +1 -1
- package/chunks/{chunk-NLREQJFK.js → chunk-DA4HRSBW.js} +15 -0
- package/chunks/{chunk-GOEVOFQI.js → chunk-DH5YXSIF.js} +3 -3
- package/chunks/{chunk-DIWZNWZT.js → chunk-DX3RGJMS.js} +13 -2
- package/chunks/{chunk-PLFATELK.js → chunk-DZUO626D.js} +1 -1
- package/chunks/{chunk-NGYI5EF5.js → chunk-E2FPSSKP.js} +8 -8
- package/chunks/{chunk-ZPLALRXZ.js → chunk-FBMCDU63.js} +4 -137
- package/chunks/{chunk-2ILAOM2I.js → chunk-FCLHHEUK.js} +17 -16
- package/chunks/{chunk-SNRT2TJJ.js → chunk-G2TX5ZXC.js} +3 -3
- package/chunks/{chunk-C5VWPTGT.js → chunk-GAKGOXTC.js} +1 -1
- package/chunks/{chunk-QQWD7LZV.js → chunk-HADWBW5R.js} +4 -4
- package/chunks/{chunk-77QVBFCU.js → chunk-HZGBKOX3.js} +3 -3
- package/chunks/{chunk-RPWVIXDB.js → chunk-I5VM3SKY.js} +4 -4
- package/chunks/{chunk-7VUERJHS.js → chunk-II6G3EY6.js} +325 -104
- package/chunks/{chunk-FN6YXJOP.js → chunk-IOEZE2YT.js} +1 -1
- package/chunks/chunk-JUWS2Z5K.js +1995 -0
- package/chunks/{chunk-VXZ5HAOV.js → chunk-K4ADGWHU.js} +1 -1
- package/chunks/{chunk-YOM7DEGB.js → chunk-KSAFZ5TA.js} +2 -2
- package/chunks/{chunk-KAQCJO6Y.js → chunk-KTKYGS2P.js} +35 -9
- package/chunks/{chunk-GBDINRIL.js → chunk-KTQGGPGV.js} +3 -3
- package/chunks/{chunk-6M26GBKX.js → chunk-L2AFWWJE.js} +42 -3
- package/chunks/{chunk-QXVSWG66.js → chunk-LHEC5V6G.js} +2 -2
- package/chunks/{chunk-J26HHFI5.js → chunk-LP2QGNSP.js} +32 -2
- package/chunks/{chunk-HWX5HPUG.js → chunk-LZZLUCRS.js} +108 -11
- package/chunks/{chunk-KTJFU7RT.js → chunk-MFDYOYZZ.js} +2 -2
- package/chunks/{chunk-3WNQOYHQ.js → chunk-MHP476D3.js} +74 -31
- package/chunks/{chunk-Y4TETC74.js → chunk-MTCYGTWH.js} +4 -4
- package/chunks/{chunk-EN2TKTFH.js → chunk-NV3F44FL.js} +6 -2
- package/chunks/{chunk-BF52U4XJ.js → chunk-OGDIJKHK.js} +1 -1
- package/chunks/{chunk-7DVT4LVV.js → chunk-OGNFHGIG.js} +3 -3
- package/chunks/{chunk-IYES5WOT.js → chunk-P2FK2HBV.js} +2 -2
- package/chunks/{chunk-2M4K4KYS.js → chunk-P3RBMQ4P.js} +4 -4
- package/chunks/{chunk-FYAXKJK7.js → chunk-P4ZEZSJZ.js} +692 -106
- package/chunks/{chunk-UFALT4LK.js → chunk-PBRVUF5B.js} +1 -1
- package/chunks/{chunk-LKRMNRSN.js → chunk-PDPFQ2FO.js} +2 -0
- package/chunks/{chunk-6TR7CFXH.js → chunk-PNBBJOCP.js} +1 -1
- package/chunks/{chunk-M3STHEMM.js → chunk-PVOGHGSF.js} +5 -5
- package/chunks/{chunk-4WU6NY7F.js → chunk-QSNSL4R4.js} +2 -2
- package/chunks/{chunk-DQSDACD2.js → chunk-RBHQXGDK.js} +1 -1
- package/chunks/{chunk-ZHA242R4.js → chunk-RVSTTOJ4.js} +2 -2
- package/chunks/{chunk-EIVICVHM.js → chunk-SCAZZ3Q4.js} +4 -4
- package/chunks/{chunk-BF224XHL.js → chunk-T5RLUXWJ.js} +2 -2
- package/chunks/{chunk-B52AWKBB.js → chunk-T6HEQR2Q.js} +16 -5
- package/chunks/{chunk-FWBXMANW.js → chunk-THIKWITR.js} +3 -3
- package/chunks/{chunk-WG6542MA.js → chunk-TQCYNLNJ.js} +1 -1
- package/chunks/chunk-TQOF5KBL.js +71 -0
- package/chunks/{chunk-NPUXXRJI.js → chunk-TZ6KJ44L.js} +1 -1
- package/chunks/{chunk-YHJFF7KH.js → chunk-UJUM2SRN.js} +147 -47
- package/chunks/{chunk-4ALIARFY.js → chunk-UYAUA63Q.js} +1 -1
- package/chunks/chunk-VFMASYQA.js +389 -0
- package/chunks/chunk-VGHZT6JR.js +51 -0
- package/chunks/{chunk-ZWBUH5UP.js → chunk-VKJ4KTPJ.js} +1 -1
- package/chunks/{chunk-QGHSP65Z.js → chunk-VNNWAZSI.js} +2 -2
- package/chunks/{chunk-757GB46F.js → chunk-W3FSZSF2.js} +1 -1
- package/chunks/{chunk-GQCEQPYQ.js → chunk-WGK4TSB7.js} +3 -3
- package/chunks/{chunk-PG62DFWD.js → chunk-WP5VOXF7.js} +6 -127
- package/chunks/{chunk-NVRDQFCX.js → chunk-XTY5DN4Y.js} +1 -1
- package/chunks/{chunk-GXSNGY5M.js → chunk-XX7QFP34.js} +1677 -1307
- package/chunks/{chunk-3PY4LPJF.js → chunk-YGT2AUJ7.js} +84 -4
- package/chunks/{chunk-4DU3NCHG.js → chunk-YTFDX4PR.js} +8 -3
- package/chunks/{chunk-OA4JVLSA.js → chunk-Z7VOMGDC.js} +22 -1
- package/chunks/{chunk-DX5W5AON.js → chunk-ZBXGWQ4S.js} +3 -3
- package/chunks/chunk-ZLBIFIMV.js +1099 -0
- package/chunks/{chunk-HA3SAB64.js → chunk-ZOSTTOUJ.js} +1 -1
- package/chunks/{chunk-VWMUDKLC.js → chunk-ZTQSOV56.js} +4 -4
- package/chunks/{computer-use-ESQYJ3JY.js → computer-use-PMZ7ICGY.js} +8 -8
- package/chunks/{config-utils-XQHBJP7G.js → config-utils-ULCSRMWD.js} +4 -4
- package/chunks/{contextCommand-CX3YF4ZE.js → contextCommand-GEZU7YHE.js} +11 -10
- package/chunks/{core-runtime-DIAU7JMG.js → core-runtime-HRJI2MN6.js} +8 -8
- package/chunks/{create-sub-session-HDPD6HOA.js → create-sub-session-VBNVI4YU.js} +9 -9
- package/chunks/{daemon-VZBGJUNL.js → daemon-POSQPD3G.js} +115 -7
- package/chunks/{daemon-status-provider-H6O4UQ4F.js → daemon-status-provider-N4CRQKFI.js} +18 -18
- package/chunks/{daemon-trust-policy-BNUXG6MT.js → daemon-trust-policy-BHO3JUHM.js} +16 -14
- package/chunks/{daemon-trust-policy-monitor-E4EQ7GF4.js → daemon-trust-policy-monitor-YEKJ2726.js} +16 -14
- package/chunks/{deferred-core-runtime-CBMSHPAU.js → deferred-core-runtime-SH57E3J3.js} +8 -8
- package/chunks/{dist-KVISB2O2.js → dist-3NTTUAHT.js} +1 -1
- package/chunks/{dist-RCH3I7SS.js → dist-6BMOAE3Z.js} +2 -2
- package/chunks/{dist-IRL7WA5Z.js → dist-B2CGTW6T.js} +1 -1
- package/chunks/{dist-TUSWNE2I.js → dist-EWW3J4HQ.js} +1 -1
- package/chunks/{dist-HIACTZEK.js → dist-EZE3V3Q7.js} +1 -1
- package/chunks/{dist-EEEQGCZA.js → dist-J47AXBZC.js} +1 -1
- package/chunks/{dist-MKX5OSFF.js → dist-OTUO3AS2.js} +4 -1088
- package/chunks/{dist-MBF3I5MX.js → dist-Z3CS4OVP.js} +1 -1
- package/chunks/{earlyInputCapture-UIOP7OIN.js → earlyInputCapture-B2JJ2HME.js} +8 -8
- package/chunks/{edit-ITMZYFKA.js → edit-7FTXENAN.js} +10 -8
- package/chunks/{enter-worktree-S4PL5UV6.js → enter-worktree-JPHV2PBG.js} +8 -8
- package/chunks/{enterPlanMode-YV52NNJT.js → enterPlanMode-CGBJ3AHJ.js} +8 -8
- package/chunks/{environment-NGOWPRZV.js → environment-LXASZAHD.js} +11 -11
- package/chunks/{errors-BU26DTDX.js → errors-XIGVT2AD.js} +10 -10
- package/chunks/{exit-worktree-XRM6LH5F.js → exit-worktree-DKSGXW65.js} +8 -8
- package/chunks/{exitPlanMode-ZLI5F7KR.js → exitPlanMode-THFL2HYN.js} +8 -8
- package/chunks/{fast-path-UJWORIED.js → fast-path-4NXAT5UL.js} +4 -3
- package/chunks/{fast-path-settings-37WQD5B2.js → fast-path-settings-RPAVBD7P.js} +2 -2
- package/chunks/{gemini-ZSKNDUMU.js → gemini-B3N6FACU.js} +56 -60
- package/chunks/{geminiContentGenerator-YGEXOEKD.js → geminiContentGenerator-YYFE2HIE.js} +1 -1
- package/chunks/{glob-7KZG44BR.js → glob-BPHSCFJP.js} +8 -8
- package/chunks/{grep-6ZFC7RJ5.js → grep-ROZIRFLU.js} +8 -8
- package/chunks/{handleAutoUpdate-KSEL3TQS.js → handleAutoUpdate-WV6SPZQB.js} +13 -12
- package/chunks/{i18n-ZIUXBW5V.js → i18n-YWJWPQKD.js} +13 -11
- package/chunks/{image-gen-AUIZJJNK.js → image-gen-SISRZ6FS.js} +1 -1
- package/chunks/{initializer-7AHY3N6Q.js → initializer-66OAD6GO.js} +16 -14
- package/chunks/{installationInfo-VGBXMYLY.js → installationInfo-3YUGIP36.js} +9 -9
- package/chunks/{list-PSFKQHLB.js → list-VEYR66XB.js} +19 -17
- package/chunks/{loadedSettingsAdapter-FTMRCTOF.js → loadedSettingsAdapter-V2JCPCYD.js} +16 -14
- package/chunks/{loggingContentGenerator-MZAN52UV.js → loggingContentGenerator-RBLNDREC.js} +6 -6
- package/chunks/main-PXAUXNF2.js +8 -0
- package/chunks/{managed-npm-update-O4NHK45X.js → managed-npm-update-C5ID5R4R.js} +9 -9
- package/chunks/{mcp-6CFP2AYQ.js → mcp-OZ54NZJQ.js} +16 -14
- package/chunks/{monitor-DAKD6OU4.js → monitor-7Y4TVFTK.js} +18 -14
- package/chunks/{nonInteractiveCli-RC7VIUZL.js → nonInteractiveCli-QEK4LHAC.js} +51 -49
- package/chunks/{notebook-edit-474DPMRL.js → notebook-edit-OG35EBGY.js} +9 -8
- package/chunks/{openaiContentGenerator-2NFY2MWO.js → openaiContentGenerator-443BNRPJ.js} +5 -5
- package/chunks/{pidfile-KBFVDNQP.js → pidfile-ZK4OLRZA.js} +8 -8
- package/chunks/{processUtils-6GRYH4Y3.js → processUtils-4YGB4RUZ.js} +2 -2
- package/chunks/{qwenContentGenerator-KAHU6IZY.js → qwenContentGenerator-D5C2LCSZ.js} +9 -9
- package/chunks/{qwenOAuth2-RRQTCP4W.js → qwenOAuth2-Z4YQBMYN.js} +1 -1
- package/chunks/{read-file-3M6WXDXP.js → read-file-EXTJLWMU.js} +4 -4
- package/chunks/{resumeHistoryUtils-D6TAY3HX.js → resumeHistoryUtils-UPCGRJUL.js} +13 -12
- package/chunks/{ripGrep-PLPENT3E.js → ripGrep-QBVIRCU4.js} +8 -8
- package/chunks/{run-qwen-serve-ZAFIJKJC.js → run-qwen-serve-ZYGJNE3E.js} +169 -68
- package/chunks/{runtime-ZED7CYOZ.js → runtime-BZZ4LWCP.js} +21 -19
- package/chunks/{scheduler-MD3AL2W5.js → scheduler-YNQNOU2E.js} +135 -15
- package/chunks/{sdk-exporters-http-KHAB5JSD.js → sdk-exporters-http-XVTZQRCE.js} +2 -2
- package/chunks/{sdk-impl-KD7FSTC3.js → sdk-impl-7W7AKCS4.js} +7 -3
- package/chunks/{serve-E3VUDRZN.js → serve-LJHAXDCH.js} +18 -14
- package/chunks/{server-OWMEMAKR.js → server-ADMLELR6.js} +1229 -1098
- package/chunks/{session-HZ57QK7K.js → session-YKZXFFTM.js} +55 -53
- package/chunks/{settings-V7BR3RKP.js → settings-EQBUAQ7Y.js} +15 -13
- package/chunks/{shell-23OMNMW6.js → shell-3QZOJGTT.js} +8 -8
- package/chunks/{skill-6HBDYZRS.js → skill-UWSSMXE7.js} +5 -5
- package/chunks/{skill-settings-HWJLTU7M.js → skill-settings-T6MLB7NU.js} +15 -13
- package/chunks/{spawnChannel-N6KKUW5B.js → spawnChannel-VS7ZFUFP.js} +11 -11
- package/chunks/{standalone-update-QGIKHATD.js → standalone-update-2W26SRRO.js} +11 -10
- package/chunks/{startInteractiveUI-GX2CRL42.js → startInteractiveUI-CVS7K3D6.js} +86 -75
- package/chunks/{team-create-CFFKU7KL.js → team-create-4WFTNNUL.js} +8 -8
- package/chunks/{team-plan-approval-6EFOKR6A.js → team-plan-approval-DBYI33S3.js} +8 -8
- package/chunks/{terminal-image-renderer-TLDNACQY.js → terminal-image-renderer-S5WPPQKH.js} +8 -8
- package/chunks/{theme-manager-5LJ3H7VO.js → theme-manager-LI2RIOVR.js} +8 -8
- package/chunks/{tool-search-UJV3A24H.js → tool-search-4773EUQ4.js} +4 -4
- package/chunks/{total-session-admission-D63QYXGO.js → total-session-admission-PAY5CH2Z.js} +16 -15
- package/chunks/{trustedFolders-KZCOB53W.js → trustedFolders-FRSLE674.js} +9 -9
- package/chunks/{types-ML3TRJQ5.js → types-WYCFCEHR.js} +5 -3
- package/chunks/{update-relaunch-IFILM3SA.js → update-relaunch-ZSFQTU6M.js} +5 -5
- package/chunks/{updateCheck-YZ2CRCFC.js → updateCheck-AXWSO7KA.js} +12 -11
- package/chunks/{useAutoAcceptIndicator-AXEVNA3Q.js → useAutoAcceptIndicator-VHLXIA7U.js} +18 -16
- package/chunks/{validateNonInterActiveAuth-3WTOJFWA.js → validateNonInterActiveAuth-PDJECMFU.js} +48 -46
- package/chunks/{version-GXK7OHZY.js → version-RBN764QS.js} +1 -1
- package/chunks/{web-fetch-ILB4GAVR.js → web-fetch-7BJK42AF.js} +4 -4
- package/chunks/{web-search-HKRPGPZZ.js → web-search-L2CILQXV.js} +4 -3
- package/chunks/{workflow-FXIPRQQA.js → workflow-5VH2R74I.js} +170 -137
- package/chunks/{workspace-providers-status-NYHC7HSR.js → workspace-providers-status-OZTQ6JFH.js} +19 -17
- package/chunks/{workspace-registration-store-AKEB7OMW.js → workspace-registration-store-IX5RJQS5.js} +1 -1
- package/chunks/{workspace-registry-CDAS5TVZ.js → workspace-registry-73N4BGG4.js} +16 -15
- package/chunks/{workspace-service-PAMUKMAV.js → workspace-service-I5RUPSNV.js} +26 -22
- package/chunks/{workspace-skills-status-YQSHCCMS.js → workspace-skills-status-DMK6VYDO.js} +17 -15
- package/chunks/{workspace-trust-reconciler-RPTXOIY2.js → workspace-trust-reconciler-QX4RL3TC.js} +24 -21
- package/chunks/{write-file-CGS57TS4.js → write-file-UGDD5UTS.js} +8 -8
- package/chunks/{zoom-image-E7D72GYV.js → zoom-image-ZAHEO3YP.js} +4 -4
- package/cli.js +12 -12
- package/package.json +3 -3
- package/web-shell/assets/{arc-DybZaz32.js → arc-CHY4saMJ.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-jN3qBd19.js → architectureDiagram-3BPJPVTR-Bu6CwvHj.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-Ct5DZPrj.js → blockDiagram-GPEHLZMM-XGt6iGf_.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-CUAFMlUG.js → c4Diagram-AAUBKEIU-CBbYl19W.js} +1 -1
- package/web-shell/assets/channel-B40srHOa.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-CuV8n90B.js → chunk-2J33WTMH-BEhmVrdx.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BUzl_kls.js → chunk-4BX2VUAB-fQLyE0Bg.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-BnDBLX6A.js → chunk-55IACEB6-yGdtyx4a.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-B83uTOjm.js → chunk-727SXJPM-DYbX2GLo.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-DM3HLgpT.js → chunk-AQP2D5EJ-DyKTEsYn.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CSQ5hgyb.js → chunk-FMBD7UC4-D8Uy_GzX.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-BWOF4SxX.js → chunk-ND2GUHAM-C8wNR2K7.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-BsOH9LMi.js → chunk-QZHKN3VN-BnybNxnt.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-qumcXQW_.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-qumcXQW_.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-IENqH2iJ.js → cose-bilkent-S5V4N54A-jq4uiFRp.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG--dyzDTGo.js → dagre-BM42HDAG-Bs7oye1U.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BE7Dcqof.js → diagram-2AECGRRQ-BHGGJNyM.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-Cr8-5OTj.js → diagram-5GNKFQAL-BJezVLGT.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-Bzey3uAY.js → diagram-KO2AKTUF-5JzQN_rL.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-sErl28Xb.js → diagram-LMA3HP47-BlPYOgY9.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-Dq30ATIo.js → diagram-OG6HWLK6-CtMHEaFK.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-BkCoEfVW.js → erDiagram-TEJ5UH35-CRNdq2AB.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-DHwO0rrI.js → flowDiagram-I6XJVG4X-De1WwLzu.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-s7vAPxWq.js → ganttDiagram-6RSMTGT7-YbWfL5Zn.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CQxhwPOU.js → gitGraphDiagram-PVQCEYII-DzCN8bmd.js} +1 -1
- package/web-shell/assets/index-BDOGGGaN.css +5 -0
- package/web-shell/assets/{index-CF4wApWp.js → index-CocPvF9Q.js} +1 -1
- package/web-shell/assets/index-DSH2KrMc.js +1771 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-BnFrD0bq.js → infoDiagram-5YYISTIA-DLHoopnE.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-Bf9zK5NK.js → ishikawaDiagram-YF4QCWOH-XnbU04SS.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CyGAhsxi.js → journeyDiagram-JHISSGLW-CipPyEeJ.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-CbsK5akB.js → kanban-definition-UN3LZRKU-DrSeyE5d.js} +1 -1
- package/web-shell/assets/{linear-cQsF4P8D.js → linear-LrBKnAo_.js} +1 -1
- package/web-shell/assets/{mermaid.core-Z4HVqrKY.js → mermaid.core-C3U9UVmf.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-CYnrBo_f.js → mindmap-definition-RKZ34NQL-DqRWgC9H.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-CBzOfhrs.js → pieDiagram-4H26LBE5-BNXY5p6H.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-D4LK1Ebn.js → quadrantDiagram-W4KKPZXB-Ccj9QzE4.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-Bzti2Lcj.js → requirementDiagram-4Y6WPE33-CjPM2_gx.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-yTBw5Z2s.js → sankeyDiagram-5OEKKPKP-C0RsvKbj.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-D07UVRiZ.js → sequenceDiagram-3UESZ5HK-ClN1P5z7.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-UE_lHsTn.js → stateDiagram-AJRCARHV-By0eiB2Y.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Ds0WlK3F.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-DRvYdiTs.js → timeline-definition-PNZ67QCA-g_iaSQgv.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-CQLIXs0u.js → vennDiagram-CIIHVFJN-y9ZqJ-TD.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-JZz_Xqse.js → wardley-L42UT6IY-BVVfaxpF.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO--i7BiJwB.js → wardleyDiagram-YWT4CUSO-D3ooZKZT.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-Bkc-bW0S.js → xychartDiagram-2RQKCTM6-6GXrY6M1.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-RXFQM6FQ.js +0 -42
- package/chunks/chunk-UA5H3DS2.js +0 -203
- package/web-shell/assets/channel-BMwLrwLW.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BGDv98jY.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BGDv98jY.js +0 -1
- package/web-shell/assets/index-Bckpjr-I.css +0 -5
- package/web-shell/assets/index-DwEr9HEW.js +0 -1768
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DC6xgXjX.js +0 -1
- /package/chunks/{chunk-VXZBKKQR.js → chunk-NTTBXH7U.js} +0 -0
- /package/chunks/{chunk-GRC5HGPI.js → chunk-OIBUG24X.js} +0 -0
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import {
|
|
4
|
-
serveCommand
|
|
5
|
-
} from "./chunk-HWX5HPUG.js";
|
|
6
3
|
import {
|
|
7
4
|
listCommand
|
|
8
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-SCAZZ3Q4.js";
|
|
6
|
+
import {
|
|
7
|
+
serveCommand
|
|
8
|
+
} from "./chunk-LZZLUCRS.js";
|
|
9
9
|
import {
|
|
10
10
|
getErrorMessage as getErrorMessage2
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-P2FK2HBV.js";
|
|
12
12
|
import {
|
|
13
13
|
OBSERVED_CONTACT_MAX_FRESH_WITHIN_SECONDS,
|
|
14
14
|
ObservedChannelContactStore
|
|
@@ -23,16 +23,17 @@ import {
|
|
|
23
23
|
loadUndici
|
|
24
24
|
} from "./chunk-3Z43GZUQ.js";
|
|
25
25
|
import {
|
|
26
|
-
isLoopbackBind
|
|
27
|
-
|
|
26
|
+
isLoopbackBind,
|
|
27
|
+
isValidSessionId
|
|
28
|
+
} from "./chunk-TQOF5KBL.js";
|
|
29
|
+
import {
|
|
30
|
+
resolvePath
|
|
31
|
+
} from "./chunk-AOHJKPKL.js";
|
|
28
32
|
import {
|
|
29
33
|
collectProviderModelsForProtocol,
|
|
30
34
|
getAuthTypeFromEnv,
|
|
31
35
|
resolveCliGenerationConfig
|
|
32
|
-
} from "./chunk-
|
|
33
|
-
import {
|
|
34
|
-
resolvePath
|
|
35
|
-
} from "./chunk-AOHJKPKL.js";
|
|
36
|
+
} from "./chunk-KTQGGPGV.js";
|
|
36
37
|
import {
|
|
37
38
|
resolveSkillSettings
|
|
38
39
|
} from "./chunk-Z4X5MTRT.js";
|
|
@@ -52,17 +53,24 @@ import {
|
|
|
52
53
|
registerToolCallDispatch,
|
|
53
54
|
selectFirstModel,
|
|
54
55
|
sessionsPath
|
|
55
|
-
} from "./chunk-
|
|
56
|
+
} from "./chunk-ATMO54WE.js";
|
|
56
57
|
import {
|
|
57
58
|
getExtensionManager,
|
|
58
59
|
requestChoicePluginNonInteractive,
|
|
59
60
|
requestConsentNonInteractive,
|
|
60
61
|
requestConsentOrFail,
|
|
61
62
|
resolveExtensionCommandScope
|
|
62
|
-
} from "./chunk-
|
|
63
|
+
} from "./chunk-HADWBW5R.js";
|
|
63
64
|
import {
|
|
64
65
|
parseChannelConfig
|
|
65
|
-
} from "./chunk-
|
|
66
|
+
} from "./chunk-LHEC5V6G.js";
|
|
67
|
+
import {
|
|
68
|
+
DEFAULT_BASE_URL,
|
|
69
|
+
buildHeaders,
|
|
70
|
+
clearAccount,
|
|
71
|
+
loadAccount,
|
|
72
|
+
saveAccount
|
|
73
|
+
} from "./chunk-VKJ4KTPJ.js";
|
|
66
74
|
import {
|
|
67
75
|
findCliEntryPath
|
|
68
76
|
} from "./chunk-V6WHFGST.js";
|
|
@@ -93,16 +101,16 @@ import {
|
|
|
93
101
|
import {
|
|
94
102
|
normalizeWorkerDiagnostic,
|
|
95
103
|
sanitizeWorkerDiagnostic
|
|
96
|
-
} from "./chunk-
|
|
104
|
+
} from "./chunk-PBRVUF5B.js";
|
|
97
105
|
import {
|
|
98
106
|
normalizeServeChannelSelection
|
|
99
107
|
} from "./chunk-ALMR3E6Q.js";
|
|
100
|
-
import {
|
|
101
|
-
EXTERNAL_TOOL_GUARD_TOKEN_ENV
|
|
102
|
-
} from "./chunk-BKHCW2BI.js";
|
|
103
108
|
import {
|
|
104
109
|
redactLogCredentials
|
|
105
110
|
} from "./chunk-M5GB774H.js";
|
|
111
|
+
import {
|
|
112
|
+
EXTERNAL_TOOL_GUARD_TOKEN_ENV
|
|
113
|
+
} from "./chunk-BKHCW2BI.js";
|
|
106
114
|
import {
|
|
107
115
|
readServiceInfo,
|
|
108
116
|
removeServiceInfo,
|
|
@@ -110,13 +118,6 @@ import {
|
|
|
110
118
|
waitForExit,
|
|
111
119
|
writeServiceInfo
|
|
112
120
|
} from "./chunk-UVX4Y6IN.js";
|
|
113
|
-
import {
|
|
114
|
-
DEFAULT_BASE_URL,
|
|
115
|
-
buildHeaders,
|
|
116
|
-
clearAccount,
|
|
117
|
-
loadAccount,
|
|
118
|
-
saveAccount
|
|
119
|
-
} from "./chunk-ZWBUH5UP.js";
|
|
120
121
|
import {
|
|
121
122
|
AcpBridge,
|
|
122
123
|
ChannelLoopScheduler,
|
|
@@ -127,38 +128,38 @@ import {
|
|
|
127
128
|
isChannelProactiveDeliveryError,
|
|
128
129
|
sanitizeLogText,
|
|
129
130
|
sanitizePromptText
|
|
130
|
-
} from "./chunk-
|
|
131
|
+
} from "./chunk-DX3RGJMS.js";
|
|
131
132
|
import {
|
|
132
133
|
assembleMcpServers,
|
|
133
134
|
getPendingGatedMcpServers,
|
|
134
135
|
mcpCommand
|
|
135
|
-
} from "./chunk-
|
|
136
|
+
} from "./chunk-MTCYGTWH.js";
|
|
136
137
|
import {
|
|
137
138
|
loadSettings
|
|
138
|
-
} from "./chunk-
|
|
139
|
+
} from "./chunk-JUWS2Z5K.js";
|
|
139
140
|
import {
|
|
140
141
|
detectSystemLanguage,
|
|
141
142
|
getCurrentLanguage,
|
|
142
143
|
initializeI18n,
|
|
143
144
|
resolveLanguageSetting,
|
|
144
145
|
t
|
|
145
|
-
} from "./chunk-
|
|
146
|
+
} from "./chunk-WP5VOXF7.js";
|
|
146
147
|
import {
|
|
147
148
|
loadEnvironment
|
|
148
|
-
} from "./chunk-
|
|
149
|
+
} from "./chunk-T6HEQR2Q.js";
|
|
149
150
|
import {
|
|
150
151
|
resolveAcpChannelFallback,
|
|
151
152
|
scrubAndReportInheritedLoaderEnv
|
|
152
|
-
} from "./chunk-
|
|
153
|
+
} from "./chunk-VFMASYQA.js";
|
|
153
154
|
import {
|
|
154
155
|
getCliVersion
|
|
155
|
-
} from "./chunk-
|
|
156
|
+
} from "./chunk-IOEZE2YT.js";
|
|
156
157
|
import {
|
|
157
158
|
getPackageJson
|
|
158
159
|
} from "./chunk-VJNBRRZG.js";
|
|
159
160
|
import {
|
|
160
161
|
isWorkspaceTrusted
|
|
161
|
-
} from "./chunk-
|
|
162
|
+
} from "./chunk-ZOSTTOUJ.js";
|
|
162
163
|
import {
|
|
163
164
|
require_strip_json_comments
|
|
164
165
|
} from "./chunk-NPQ5ZKRP.js";
|
|
@@ -200,7 +201,7 @@ import {
|
|
|
200
201
|
unquoteCStylePath,
|
|
201
202
|
updateChannelMemoryEntry,
|
|
202
203
|
updateSetting
|
|
203
|
-
} from "./chunk-
|
|
204
|
+
} from "./chunk-XX7QFP34.js";
|
|
204
205
|
import {
|
|
205
206
|
nextFireTime,
|
|
206
207
|
parseCron
|
|
@@ -211,12 +212,12 @@ import {
|
|
|
211
212
|
import {
|
|
212
213
|
parseBooleanEnvFlag,
|
|
213
214
|
resolveTelemetrySettings
|
|
214
|
-
} from "./chunk-
|
|
215
|
+
} from "./chunk-4TRQPFDP.js";
|
|
215
216
|
import {
|
|
216
217
|
getAllGeminiMdFilenames,
|
|
217
218
|
parseLineTolerant,
|
|
218
219
|
setGeminiMdFilename
|
|
219
|
-
} from "./chunk-
|
|
220
|
+
} from "./chunk-YGT2AUJ7.js";
|
|
220
221
|
import {
|
|
221
222
|
SchemaValidator,
|
|
222
223
|
ToolNames
|
|
@@ -232,7 +233,7 @@ import {
|
|
|
232
233
|
} from "./chunk-FOGU3LJX.js";
|
|
233
234
|
import {
|
|
234
235
|
recordChannelMemoryRecallMetrics
|
|
235
|
-
} from "./chunk-
|
|
236
|
+
} from "./chunk-L2AFWWJE.js";
|
|
236
237
|
import {
|
|
237
238
|
FatalConfigError,
|
|
238
239
|
FatalSandboxError,
|
|
@@ -2730,7 +2731,7 @@ var stopCommand = {
|
|
|
2730
2731
|
if (argv["daemon-url"]) {
|
|
2731
2732
|
const token = argv.token ?? process.env[QWEN_SERVER_TOKEN_ENV] ?? process.env[QWEN_DAEMON_TOKEN_ENV];
|
|
2732
2733
|
try {
|
|
2733
|
-
const sdk = await import("./daemon-
|
|
2734
|
+
const sdk = await import("./daemon-POSQPD3G.js");
|
|
2734
2735
|
const client = new sdk.DaemonClient({
|
|
2735
2736
|
baseUrl: argv["daemon-url"],
|
|
2736
2737
|
...token ? { token } : {}
|
|
@@ -2916,7 +2917,7 @@ var statusCommand = {
|
|
|
2916
2917
|
if (argv["daemon-url"]) {
|
|
2917
2918
|
const token = argv.token ?? process.env[QWEN_SERVER_TOKEN_ENV] ?? process.env[QWEN_DAEMON_TOKEN_ENV];
|
|
2918
2919
|
try {
|
|
2919
|
-
const sdk = await import("./daemon-
|
|
2920
|
+
const sdk = await import("./daemon-POSQPD3G.js");
|
|
2920
2921
|
const client = new sdk.DaemonClient({
|
|
2921
2922
|
baseUrl: argv["daemon-url"],
|
|
2922
2923
|
...token ? { token } : {}
|
|
@@ -3027,7 +3028,7 @@ var reloadCommand = {
|
|
|
3027
3028
|
const token = resolveToken(argv.token);
|
|
3028
3029
|
let sdk;
|
|
3029
3030
|
try {
|
|
3030
|
-
sdk = await import("./daemon-
|
|
3031
|
+
sdk = await import("./daemon-POSQPD3G.js");
|
|
3031
3032
|
} catch (err) {
|
|
3032
3033
|
writeStderrLine(
|
|
3033
3034
|
`[Channel] Failed to load daemon SDK: ${safeChannelCommandErrorMessage(err)}`
|
|
@@ -3107,7 +3108,7 @@ var setCommand2 = {
|
|
|
3107
3108
|
const selection = names[0] === "all" ? { mode: "all" } : { mode: "names", names };
|
|
3108
3109
|
let sdk;
|
|
3109
3110
|
try {
|
|
3110
|
-
sdk = await import("./daemon-
|
|
3111
|
+
sdk = await import("./daemon-POSQPD3G.js");
|
|
3111
3112
|
} catch (error) {
|
|
3112
3113
|
writeStderrLine(
|
|
3113
3114
|
`[Channel] Failed to load daemon SDK: ${safeChannelCommandErrorMessage(error)}`
|
|
@@ -3233,7 +3234,7 @@ function createDaemonChannelBridgeFacade(bridge, opts) {
|
|
|
3233
3234
|
}
|
|
3234
3235
|
__name(createDaemonChannelBridgeFacade, "createDaemonChannelBridgeFacade");
|
|
3235
3236
|
async function loadDaemonSdk() {
|
|
3236
|
-
return await import("./daemon-
|
|
3237
|
+
return await import("./daemon-POSQPD3G.js");
|
|
3237
3238
|
}
|
|
3238
3239
|
__name(loadDaemonSdk, "loadDaemonSdk");
|
|
3239
3240
|
function selectedChannelNames(channelsConfig, selection) {
|
|
@@ -4881,6 +4882,12 @@ function execGhWithRetry(args, options) {
|
|
|
4881
4882
|
__name(execGhWithRetry, "execGhWithRetry");
|
|
4882
4883
|
var ghHost;
|
|
4883
4884
|
var HOSTNAME_RE = /^[A-Za-z0-9.-]+(?::\d+)?$/;
|
|
4885
|
+
var REPO_SEGMENT = /^[A-Za-z0-9._-]+$/;
|
|
4886
|
+
function isOwnerRepo(repo) {
|
|
4887
|
+
const parts = repo.split("/");
|
|
4888
|
+
return parts.length === 2 && parts.every((p) => REPO_SEGMENT.test(p) && p !== "." && p !== "..");
|
|
4889
|
+
}
|
|
4890
|
+
__name(isOwnerRepo, "isOwnerRepo");
|
|
4884
4891
|
function setGhHost(host) {
|
|
4885
4892
|
if (host === void 0 || host === "") {
|
|
4886
4893
|
ghHost = void 0;
|
|
@@ -7095,6 +7102,8 @@ import { join as join9 } from "node:path";
|
|
|
7095
7102
|
var DEADLINE_ENV = "QWEN_REVIEW_DEADLINE_EPOCH";
|
|
7096
7103
|
var RESERVE_ENV = "QWEN_REVIEW_DEADLINE_RESERVE_SECONDS";
|
|
7097
7104
|
var DEFAULT_RESERVE_SECONDS = 4800;
|
|
7105
|
+
var DEFAULT_COMPOSE_FLOOR_SECONDS = 1200;
|
|
7106
|
+
var COMPOSE_FLOOR_ENV = "QWEN_REVIEW_DEADLINE_COMPOSE_FLOOR_SECONDS";
|
|
7098
7107
|
var DEFAULT_ROUND_SECONDS = 1800;
|
|
7099
7108
|
var MIN_OBSERVED_ROUND_SECONDS = 600;
|
|
7100
7109
|
var STAMPS_FILE = "budget-rounds.json";
|
|
@@ -7153,17 +7162,31 @@ function expectedRoundSeconds(planPath, round, nowMs = Date.now()) {
|
|
|
7153
7162
|
return Math.max(MIN_OBSERVED_ROUND_SECONDS, maxSeconds);
|
|
7154
7163
|
}
|
|
7155
7164
|
__name(expectedRoundSeconds, "expectedRoundSeconds");
|
|
7156
|
-
function
|
|
7165
|
+
function readDeadlineSeconds(env) {
|
|
7157
7166
|
const raw = env[DEADLINE_ENV];
|
|
7158
7167
|
if (raw === void 0 || raw.trim() === "") return null;
|
|
7159
7168
|
const deadline = Number(raw);
|
|
7160
7169
|
if (!Number.isFinite(deadline) || deadline <= 0) return null;
|
|
7161
|
-
|
|
7162
|
-
|
|
7163
|
-
|
|
7164
|
-
|
|
7165
|
-
|
|
7170
|
+
return deadline;
|
|
7171
|
+
}
|
|
7172
|
+
__name(readDeadlineSeconds, "readDeadlineSeconds");
|
|
7173
|
+
function readNonNegativeSeconds(env, key, fallback) {
|
|
7174
|
+
const raw = env[key];
|
|
7175
|
+
if (raw !== void 0 && raw.trim() !== "") {
|
|
7176
|
+
const v = Number(raw);
|
|
7177
|
+
if (Number.isFinite(v) && v >= 0) return v;
|
|
7166
7178
|
}
|
|
7179
|
+
return fallback;
|
|
7180
|
+
}
|
|
7181
|
+
__name(readNonNegativeSeconds, "readNonNegativeSeconds");
|
|
7182
|
+
function reverseAuditBudgetExhausted(env, roundCostSeconds, nowMs = Date.now()) {
|
|
7183
|
+
const deadline = readDeadlineSeconds(env);
|
|
7184
|
+
if (deadline === null) return null;
|
|
7185
|
+
const reserve = readNonNegativeSeconds(
|
|
7186
|
+
env,
|
|
7187
|
+
RESERVE_ENV,
|
|
7188
|
+
DEFAULT_RESERVE_SECONDS
|
|
7189
|
+
);
|
|
7167
7190
|
const remainingSeconds = Math.floor(deadline - nowMs / 1e3);
|
|
7168
7191
|
if (remainingSeconds >= reserve + roundCostSeconds) return null;
|
|
7169
7192
|
return {
|
|
@@ -7173,6 +7196,26 @@ function reverseAuditBudgetExhausted(env, roundCostSeconds, nowMs = Date.now())
|
|
|
7173
7196
|
};
|
|
7174
7197
|
}
|
|
7175
7198
|
__name(reverseAuditBudgetExhausted, "reverseAuditBudgetExhausted");
|
|
7199
|
+
function verifyBudgetExhausted(env, nowMs = Date.now()) {
|
|
7200
|
+
const deadline = readDeadlineSeconds(env);
|
|
7201
|
+
if (deadline === null) return null;
|
|
7202
|
+
const floor = readNonNegativeSeconds(
|
|
7203
|
+
env,
|
|
7204
|
+
COMPOSE_FLOOR_ENV,
|
|
7205
|
+
DEFAULT_COMPOSE_FLOOR_SECONDS
|
|
7206
|
+
);
|
|
7207
|
+
if (floor <= 0) return null;
|
|
7208
|
+
const remainingSeconds = Math.floor(deadline - nowMs / 1e3);
|
|
7209
|
+
if (remainingSeconds > floor) return null;
|
|
7210
|
+
return { remainingSeconds, composeFloorSeconds: floor };
|
|
7211
|
+
}
|
|
7212
|
+
__name(verifyBudgetExhausted, "verifyBudgetExhausted");
|
|
7213
|
+
function verifyBudgetMessage(spent) {
|
|
7214
|
+
const minutesLeft = Math.max(0, Math.floor(spent.remainingSeconds / 60));
|
|
7215
|
+
const floorMinutes = Math.round(spent.composeFloorSeconds / 60);
|
|
7216
|
+
return `VERIFY BUDGET: ${minutesLeft} minute(s) remain before this review's deadline \u2014 at or below the ${floorMinutes}-minute floor compose-review and submission need, so no verification shard will be built. This is a termination rule, not an error: do not rebuild the verifier. Proceed to Step 6 NOW and compose. Findings still carrying \`\u2014 [unverified]\` keep that tag: compose-review caps the verdict on it and never treats an unverified finding as a confirmed blocker \u2014 everything earlier rounds confirmed still posts. A review that stops verifying here reports what it proved; one that keeps verifying past this floor is killed before it posts anything.`;
|
|
7217
|
+
}
|
|
7218
|
+
__name(verifyBudgetMessage, "verifyBudgetMessage");
|
|
7176
7219
|
var BUDGET_STOP_PHRASE = "review time budget";
|
|
7177
7220
|
function budgetStopDisclosure(round) {
|
|
7178
7221
|
const which = round !== void 0 ? `round ${round}` : "the next round";
|
|
@@ -7195,6 +7238,45 @@ function budgetStopEntryZh(round) {
|
|
|
7195
7238
|
return `${d.subjectZh}\u2014\u2014${d.reasonZh}`;
|
|
7196
7239
|
}
|
|
7197
7240
|
__name(budgetStopEntryZh, "budgetStopEntryZh");
|
|
7241
|
+
var ROUND_CAP_PHRASE = "reverse-audit round cap";
|
|
7242
|
+
function roundCapStopDisclosure(cap) {
|
|
7243
|
+
return {
|
|
7244
|
+
subject: "reverse audit",
|
|
7245
|
+
reason: `did not converge within the ${ROUND_CAP_PHRASE} of ${cap}`,
|
|
7246
|
+
subjectZh: "\u53CD\u5411\u5BA1\u8BA1",
|
|
7247
|
+
reasonZh: `\u5728 ${cap} \u8F6E\u7684\u53CD\u5BA1\u8F6E\u6570\u4E0A\u9650\u5185\u672A\u6536\u655B`
|
|
7248
|
+
};
|
|
7249
|
+
}
|
|
7250
|
+
__name(roundCapStopDisclosure, "roundCapStopDisclosure");
|
|
7251
|
+
function roundCapStopEntry(cap) {
|
|
7252
|
+
const d = roundCapStopDisclosure(cap);
|
|
7253
|
+
return `${d.subject} \u2014 ${d.reason}`;
|
|
7254
|
+
}
|
|
7255
|
+
__name(roundCapStopEntry, "roundCapStopEntry");
|
|
7256
|
+
function roundCapStopEntryZh(cap) {
|
|
7257
|
+
const d = roundCapStopDisclosure(cap);
|
|
7258
|
+
return `${d.subjectZh}\u2014\u2014${d.reasonZh}`;
|
|
7259
|
+
}
|
|
7260
|
+
__name(roundCapStopEntryZh, "roundCapStopEntryZh");
|
|
7261
|
+
function writeRoundCapStop(planPath, cap, round, nowMs = Date.now()) {
|
|
7262
|
+
try {
|
|
7263
|
+
const dir = promptRecordDir(planPath);
|
|
7264
|
+
mkdirSync5(dir, { recursive: true });
|
|
7265
|
+
const stop = {
|
|
7266
|
+
cause: "round-cap",
|
|
7267
|
+
cap,
|
|
7268
|
+
entry: roundCapStopEntry(cap),
|
|
7269
|
+
entryZh: roundCapStopEntryZh(cap),
|
|
7270
|
+
round: round ?? null,
|
|
7271
|
+
remainingSeconds: 0,
|
|
7272
|
+
reserveSeconds: 0,
|
|
7273
|
+
atMs: nowMs
|
|
7274
|
+
};
|
|
7275
|
+
writeFileSync5(join9(dir, STOP_FILE), JSON.stringify(stop, null, 2));
|
|
7276
|
+
} catch {
|
|
7277
|
+
}
|
|
7278
|
+
}
|
|
7279
|
+
__name(writeRoundCapStop, "writeRoundCapStop");
|
|
7198
7280
|
function writeBudgetStop(planPath, spent, round, nowMs = Date.now()) {
|
|
7199
7281
|
try {
|
|
7200
7282
|
const dir = promptRecordDir(planPath);
|
|
@@ -7233,13 +7315,16 @@ function reverseAuditBudgetMessage(spent, round) {
|
|
|
7233
7315
|
const reserveMinutes = Math.round(spent.reserveSeconds / 60);
|
|
7234
7316
|
const roundMinutes = Math.round(spent.expectedRoundSeconds / 60);
|
|
7235
7317
|
const which = round !== void 0 ? `round ${round}` : "the next round";
|
|
7236
|
-
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
|
|
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 \u2014 then compose and submit. Do NOT re-verify findings already confirmed in earlier rounds. A review that stops here still reports everything it proved; a review that runs past its deadline is killed holding all of it.`;
|
|
7237
7319
|
}
|
|
7238
7320
|
__name(reverseAuditBudgetMessage, "reverseAuditBudgetMessage");
|
|
7239
7321
|
|
|
7240
7322
|
// packages/cli/src/commands/review/lib/budget.ts
|
|
7241
7323
|
init_esbuild_shims();
|
|
7242
7324
|
var SWEEP_FLOOR = 25;
|
|
7325
|
+
var MAX_REVERSE_AUDIT_ROUNDS = 5;
|
|
7326
|
+
var HUGE_REVERSE_AUDIT_ROUNDS = 3;
|
|
7327
|
+
var HUGE_DIFF_FLOOR = 3e3;
|
|
7243
7328
|
var SPECIALIST_FLOOR = 80;
|
|
7244
7329
|
var LINES_PER_ANGLE = 60;
|
|
7245
7330
|
var MIN_INLINE_ANGLES = 3;
|
|
@@ -7261,16 +7346,28 @@ function reviewBudget(input) {
|
|
|
7261
7346
|
return {
|
|
7262
7347
|
inlineAngles,
|
|
7263
7348
|
sweep: effective >= SWEEP_FLOOR,
|
|
7264
|
-
|
|
7349
|
+
// Agent 8 sheds in the huge zone. A specialist is a whole-diff pass on
|
|
7350
|
+
// top of the base fan-out, and on a diff too big to finish that extra
|
|
7351
|
+
// pass is the marginal cost that guarantees zero posted output — while
|
|
7352
|
+
// the per-chunk fan-out already covers the ground. Finishability over
|
|
7353
|
+
// an added depth pass, in exactly the band where the review otherwise
|
|
7354
|
+
// posts nothing.
|
|
7355
|
+
specialistCap: src >= SPECIALIST_FLOOR && effective < HUGE_DIFF_FLOOR ? 2 : 0,
|
|
7265
7356
|
verifyShard: VERIFY_SHARD,
|
|
7266
7357
|
agentToolBudget: clamp(
|
|
7267
7358
|
MIN_AGENT_TOOL_BUDGET + Math.floor(effective / LINES_PER_TOOL_CALL),
|
|
7268
7359
|
MIN_AGENT_TOOL_BUDGET,
|
|
7269
7360
|
MAX_AGENT_TOOL_BUDGET
|
|
7270
|
-
)
|
|
7361
|
+
),
|
|
7362
|
+
reverseAuditRounds: effective >= HUGE_DIFF_FLOOR ? HUGE_REVERSE_AUDIT_ROUNDS : MAX_REVERSE_AUDIT_ROUNDS
|
|
7271
7363
|
};
|
|
7272
7364
|
}
|
|
7273
7365
|
__name(reviewBudget, "reviewBudget");
|
|
7366
|
+
function reverseAuditRoundCap(budget) {
|
|
7367
|
+
const v = budget?.reverseAuditRounds;
|
|
7368
|
+
return typeof v === "number" && Number.isInteger(v) && v >= HUGE_REVERSE_AUDIT_ROUNDS && v <= MAX_REVERSE_AUDIT_ROUNDS ? v : MAX_REVERSE_AUDIT_ROUNDS;
|
|
7369
|
+
}
|
|
7370
|
+
__name(reverseAuditRoundCap, "reverseAuditRoundCap");
|
|
7274
7371
|
var MAX_TOTAL_TOOL_CALLS = 200;
|
|
7275
7372
|
function launchToolBudget(planBudget, territoryLines, mandatoryReads) {
|
|
7276
7373
|
const base = clamp(
|
|
@@ -7292,10 +7389,10 @@ function launchToolBudget(planBudget, territoryLines, mandatoryReads) {
|
|
|
7292
7389
|
);
|
|
7293
7390
|
}
|
|
7294
7391
|
__name(launchToolBudget, "launchToolBudget");
|
|
7295
|
-
var BUDGET_GAP_LINE_RE = /^[ \t]*(?:[-*+]|\d+[.)])?[ \t]*(`?)[*_~]{0,3}(?:budget gap|预算(?:缺口|不足|用尽))[*_~]{0,3}[ \t]*[::][*_~]{0,3}[ \t]*(
|
|
7392
|
+
var BUDGET_GAP_LINE_RE = /^(?:[ \t]*(?:[-*+]|\d+[.)]))?[ \t]*(`?)[*_~]{0,3}(?:budget gap|预算(?:缺口|不足|用尽))[*_~]{0,3}[ \t]*[::][*_~]{0,3}[ \t]*(.+)$/i;
|
|
7296
7393
|
var GAP_HINT_RE = /budget gap|预算(?:缺口|不足|用尽)/i;
|
|
7297
7394
|
var INLINE_BUDGET_GAP_RE = /(?:budget gap|预算(?:缺口|不足|用尽))[*_~`]{0,3}[ \t]*[::]/i;
|
|
7298
|
-
var PLACEHOLDER_GAP_RE = /^(?:<[^>]
|
|
7395
|
+
var PLACEHOLDER_GAP_RE = /^(?:<[^>]*>$|[-—*_~`]+$|(?:none|n\/a|nothing|no (?:gaps?|checks?))\b(?:[.!…,;:\s]*$|\s+(?:skipped|found|to report)\b[.!…,;:\s]*$|\s*[-—–]\s*(?:stayed\s+(?:under|within|below)\s+budget\b[.!…,;:\s]*$|(?:all|every(?:thing)?|planned|further|no further)\b(?:(?!\b(?:but|except|excepting|excluding)\b).)*(?<!\b(?:none|nothing|no|zero|never|not)\s)\b(?:complete[ds]?|done|finished|covered)\b[.!…,;:\s]*$)|\s*\(\s*(?:all|every(?:thing)?)\b(?:(?!\b(?:but|except|excepting|excluding)\b)[^()])*(?<!\b(?:none|nothing|no|zero|never|not)\s)\b(?:complete[ds]?|done|finished|covered)\b[.!…,;:\s]*\)\s*$))/i;
|
|
7299
7396
|
var MAX_GAP_LENGTH = 160;
|
|
7300
7397
|
var MAX_GAPS_PER_AGENT = 8;
|
|
7301
7398
|
var DANGEROUS_CHARS_RE = (
|
|
@@ -7325,6 +7422,13 @@ function stripWrappers(s) {
|
|
|
7325
7422
|
return out;
|
|
7326
7423
|
}
|
|
7327
7424
|
__name(stripWrappers, "stripWrappers");
|
|
7425
|
+
var TRAILING_GAP_CHAR_RE = /[.!…,;:\s]/;
|
|
7426
|
+
function stripTrailingGapChars(s) {
|
|
7427
|
+
let end = s.length;
|
|
7428
|
+
while (end > 0 && TRAILING_GAP_CHAR_RE.test(s.charAt(end - 1))) end--;
|
|
7429
|
+
return s.slice(0, end);
|
|
7430
|
+
}
|
|
7431
|
+
__name(stripTrailingGapChars, "stripTrailingGapChars");
|
|
7328
7432
|
function truncateGap(s) {
|
|
7329
7433
|
const points = [...s];
|
|
7330
7434
|
return points.length > MAX_GAP_LENGTH ? `${points.slice(0, MAX_GAP_LENGTH).join("")}\u2026` : s;
|
|
@@ -7342,7 +7446,8 @@ function budgetGapDisclosures(finalText) {
|
|
|
7342
7446
|
}
|
|
7343
7447
|
if (inFence) continue;
|
|
7344
7448
|
if (/^[ \t]*>/.test(line)) continue;
|
|
7345
|
-
const
|
|
7449
|
+
const sanitized = line.replace(DANGEROUS_CHARS_RE, " ").trimEnd();
|
|
7450
|
+
const m = BUDGET_GAP_LINE_RE.exec(sanitized);
|
|
7346
7451
|
if (!m) continue;
|
|
7347
7452
|
let raw = m[2] ?? "";
|
|
7348
7453
|
if (m[1] === "`") {
|
|
@@ -7350,11 +7455,12 @@ function budgetGapDisclosures(finalText) {
|
|
|
7350
7455
|
raw = raw.slice(0, -1);
|
|
7351
7456
|
}
|
|
7352
7457
|
raw = stripWrappers(raw.trim()).trim();
|
|
7353
|
-
const normalized = raw
|
|
7354
|
-
|
|
7458
|
+
const normalized = stripTrailingGapChars(raw).trim();
|
|
7459
|
+
const unparenthesized = normalized.startsWith("(") && normalized.endsWith(")") ? normalized.slice(1, -1).trim() : normalized;
|
|
7460
|
+
if (normalized.length === 0 || PLACEHOLDER_GAP_RE.test(unparenthesized)) {
|
|
7355
7461
|
continue;
|
|
7356
7462
|
}
|
|
7357
|
-
const key =
|
|
7463
|
+
const key = stripTrailingGapChars(unparenthesized).toLowerCase();
|
|
7358
7464
|
if (seen.has(key)) continue;
|
|
7359
7465
|
seen.add(key);
|
|
7360
7466
|
gaps.push(truncateGap(raw));
|
|
@@ -8131,6 +8237,82 @@ function withMarker(line) {
|
|
|
8131
8237
|
return line.startsWith(CRITICAL_PREFIX) ? line : `${CRITICAL_PREFIX} ${line}`;
|
|
8132
8238
|
}
|
|
8133
8239
|
__name(withMarker, "withMarker");
|
|
8240
|
+
function planPrIdentity(plan) {
|
|
8241
|
+
if (typeof plan !== "object" || plan === null) return null;
|
|
8242
|
+
const p = plan;
|
|
8243
|
+
const ownerRepo = typeof p.ownerRepo === "string" && isOwnerRepo(p.ownerRepo) ? p.ownerRepo : null;
|
|
8244
|
+
const prNumber = isPositivePrNumber(p.prNumber) ? String(p.prNumber) : null;
|
|
8245
|
+
const host = typeof p.host === "string" && HOSTNAME_RE.test(p.host) ? p.host : null;
|
|
8246
|
+
return ownerRepo && prNumber ? { ownerRepo, prNumber, host } : null;
|
|
8247
|
+
}
|
|
8248
|
+
__name(planPrIdentity, "planPrIdentity");
|
|
8249
|
+
function prIdentityFromPlan(planPath) {
|
|
8250
|
+
if (!planPath) return null;
|
|
8251
|
+
try {
|
|
8252
|
+
return planPrIdentity(JSON.parse(readFileSync10(planPath, "utf8")));
|
|
8253
|
+
} catch {
|
|
8254
|
+
return null;
|
|
8255
|
+
}
|
|
8256
|
+
}
|
|
8257
|
+
__name(prIdentityFromPlan, "prIdentityFromPlan");
|
|
8258
|
+
function linkifyCommentRefs(text, pr) {
|
|
8259
|
+
if (!pr || text.includes("](")) return text;
|
|
8260
|
+
const host = (resolveGhHost(pr.host ?? getGhHost()) ?? "github.com").toLowerCase().replace(/:0*443$/, "").replace(/\.$/, "").replace(/^www\.github\.com$/, "github.com");
|
|
8261
|
+
const base = `https://${host}/${pr.ownerRepo}/pull/${pr.prNumber}`;
|
|
8262
|
+
const commentRef = host === "github.com" ? /\b(issue-level )?comment (\d{6,})\b/gi : /\b(issue-level )?comment (\d+)\b/gi;
|
|
8263
|
+
const issueLevelEntry = /\bissue(?:-level)?\s+comment\b/i.test(text);
|
|
8264
|
+
return text.replace(
|
|
8265
|
+
commentRef,
|
|
8266
|
+
(_m, issueLevel, id) => issueLevel || issueLevelEntry ? `[${issueLevel ?? ""}comment ${id}](${base}#issuecomment-${id})` : `[comment ${id}](${base}#discussion_r${id})`
|
|
8267
|
+
);
|
|
8268
|
+
}
|
|
8269
|
+
__name(linkifyCommentRefs, "linkifyCommentRefs");
|
|
8270
|
+
function formatCannotTell(cannotTell, pr) {
|
|
8271
|
+
const parsed = cannotTell.map((raw) => {
|
|
8272
|
+
const unmarked = raw.startsWith(CRITICAL_PREFIX) ? raw.slice(CRITICAL_PREFIX.length).trim() : raw;
|
|
8273
|
+
const line = linkifyCommentRefs(
|
|
8274
|
+
unmarked.includes("\n") ? unmarked.split("\n").map((seg) => seg.trim()).filter((seg) => seg !== "").join(" ") : unmarked,
|
|
8275
|
+
pr
|
|
8276
|
+
);
|
|
8277
|
+
const idx = line.indexOf(" \u2014 ");
|
|
8278
|
+
return idx === -1 ? { head: line, reason: null } : {
|
|
8279
|
+
head: line.slice(0, idx),
|
|
8280
|
+
reason: line.slice(idx + 3).trim() || null
|
|
8281
|
+
};
|
|
8282
|
+
});
|
|
8283
|
+
const groups = [];
|
|
8284
|
+
const byReason = /* @__PURE__ */ new Map();
|
|
8285
|
+
for (const p of parsed) {
|
|
8286
|
+
const existing = p.reason === null ? void 0 : byReason.get(p.reason);
|
|
8287
|
+
if (existing) {
|
|
8288
|
+
existing.heads.push(p.head);
|
|
8289
|
+
continue;
|
|
8290
|
+
}
|
|
8291
|
+
const group = { reason: p.reason, heads: [p.head] };
|
|
8292
|
+
groups.push(group);
|
|
8293
|
+
if (p.reason !== null) byReason.set(p.reason, group);
|
|
8294
|
+
}
|
|
8295
|
+
const lines = [];
|
|
8296
|
+
for (const { reason, heads } of groups) {
|
|
8297
|
+
if (heads.length === 1) {
|
|
8298
|
+
lines.push(
|
|
8299
|
+
`- ${CRITICAL_PREFIX} ${heads[0]}${reason === null ? "" : ` \u2014 ${reason}`}`
|
|
8300
|
+
);
|
|
8301
|
+
} else {
|
|
8302
|
+
lines.push(
|
|
8303
|
+
`- ${CRITICAL_PREFIX} ${heads.length} entries \u2014 ${reason}:`,
|
|
8304
|
+
...heads.map((head) => ` - ${head}`)
|
|
8305
|
+
);
|
|
8306
|
+
}
|
|
8307
|
+
}
|
|
8308
|
+
return {
|
|
8309
|
+
en: `Unresolved, please confirm:
|
|
8310
|
+
|
|
8311
|
+
${lines.join("\n")}`,
|
|
8312
|
+
zh: `\u672A\u51B3\uFF0C\u8BF7\u786E\u8BA4\uFF1A\u5171 ${cannotTell.length} \u6761\uFF08\u539F\u6587\u672A\u7FFB\u8BD1\uFF0C\u5217\u8868\u89C1\u4E0A\u65B9\u82F1\u6587\u90E8\u5206\uFF09\u3002`
|
|
8313
|
+
};
|
|
8314
|
+
}
|
|
8315
|
+
__name(formatCannotTell, "formatCannotTell");
|
|
8134
8316
|
function toCount(value, field) {
|
|
8135
8317
|
if (value === void 0 || value === null) return 0;
|
|
8136
8318
|
if (typeof value !== "number" || !Number.isInteger(value) || value < 0) {
|
|
@@ -8152,7 +8334,7 @@ function toStringList(value, field) {
|
|
|
8152
8334
|
}
|
|
8153
8335
|
__name(toStringList, "toStringList");
|
|
8154
8336
|
function stripReviewFooter(entry) {
|
|
8155
|
-
return entry.replace(REVIEW_FOOTER_RE, "");
|
|
8337
|
+
return entry.includes(FOOTER_MARKER) ? entry.replace(REVIEW_FOOTER_RE, "") : entry;
|
|
8156
8338
|
}
|
|
8157
8339
|
__name(stripReviewFooter, "stripReviewFooter");
|
|
8158
8340
|
function toBool(value, field) {
|
|
@@ -8235,12 +8417,16 @@ function composeReviewBody(input, cliVersion) {
|
|
|
8235
8417
|
if (input.planPath) {
|
|
8236
8418
|
const stop = readBudgetStop(input.planPath);
|
|
8237
8419
|
if (stop !== null) {
|
|
8420
|
+
const isRoundCap = stop.cause === "round-cap";
|
|
8421
|
+
const phrase = isRoundCap ? ROUND_CAP_PHRASE : BUDGET_STOP_PHRASE;
|
|
8238
8422
|
for (let i = unreviewed.length - 1; i >= 0; i--) {
|
|
8239
|
-
if (unreviewed[i].includes(
|
|
8423
|
+
if (unreviewed[i].includes(phrase)) {
|
|
8240
8424
|
unreviewed.splice(i, 1);
|
|
8241
8425
|
}
|
|
8242
8426
|
}
|
|
8243
|
-
budgetEntry =
|
|
8427
|
+
budgetEntry = isRoundCap ? roundCapStopDisclosure(
|
|
8428
|
+
typeof stop.cap === "number" ? stop.cap : MAX_REVERSE_AUDIT_ROUNDS
|
|
8429
|
+
) : budgetStopDisclosure(stop.round ?? void 0);
|
|
8244
8430
|
coverageEntries.push(budgetEntry);
|
|
8245
8431
|
}
|
|
8246
8432
|
}
|
|
@@ -8619,12 +8805,7 @@ ${footer}`;
|
|
|
8619
8805
|
zh: reason ? `\u672A\u5BA1\u67E5\uFF1A${shownZh.join("\u3001")}\u2014\u2014${reasonZh}\u3002` : `\u672A\u5BA1\u67E5\uFF1A${shownZh.join("\u3001")}\u3002`
|
|
8620
8806
|
});
|
|
8621
8807
|
}
|
|
8622
|
-
const cannotTellBlock = cannotTell.length === 0 ? [] : [
|
|
8623
|
-
{
|
|
8624
|
-
en: `Unresolved, please confirm: ${cannotTell.map((l) => withMarker(l)).join(" ")}`,
|
|
8625
|
-
zh: `\u672A\u51B3\uFF0C\u8BF7\u786E\u8BA4\uFF1A${cannotTell.map((l) => withMarker(l)).join(" ")}`
|
|
8626
|
-
}
|
|
8627
|
-
];
|
|
8808
|
+
const cannotTellBlock = cannotTell.length === 0 ? [] : [formatCannotTell(cannotTell, prIdentityFromPlan(input.planPath))];
|
|
8628
8809
|
const bodyCriticalBlock = bodyCriticals.map((l) => withMarker(l)).map((l) => ({ en: l, zh: l }));
|
|
8629
8810
|
const contextUnavailableClause = {
|
|
8630
8811
|
en: "Reviewed diff-only \u2014 the PR\u2019s existing discussion could not be fetched, so this is not an approval and not a no-blockers claim.",
|
|
@@ -8746,6 +8927,7 @@ ${footer}`;
|
|
|
8746
8927
|
zh: `${suggestionsDiscarded} \u6761\u5EFA\u8BAE\u7EA7\u53D1\u73B0\u65E0\u6CD5\u951A\u5B9A\u5230\u6539\u52A8\u884C\uFF0C\u5DF2\u4E22\u5F03\uFF1B\u6B64\u5904\u65E0\u9700\u8FDB\u4E00\u6B65\u5904\u7406\u3002`
|
|
8747
8928
|
});
|
|
8748
8929
|
}
|
|
8930
|
+
const openerCount = clauses.length;
|
|
8749
8931
|
clauses.push(...cannotTellBlock);
|
|
8750
8932
|
clauses.push(...notReviewedParts);
|
|
8751
8933
|
clauses.push(...unverifiedTagsBlock);
|
|
@@ -8755,9 +8937,19 @@ ${footer}`;
|
|
|
8755
8937
|
if (downgradedFrom === "Request changes" || criticalsUnverified) {
|
|
8756
8938
|
clauses.push(...bodyCriticalBlock);
|
|
8757
8939
|
}
|
|
8940
|
+
const openerParts = clauses.slice(0, openerCount);
|
|
8941
|
+
const paragraphs = [
|
|
8942
|
+
...openerParts.length > 0 ? [
|
|
8943
|
+
{
|
|
8944
|
+
en: openerParts.map((c2) => c2.en).join(" "),
|
|
8945
|
+
zh: openerParts.map((c2) => c2.zh).join(" ")
|
|
8946
|
+
}
|
|
8947
|
+
] : [],
|
|
8948
|
+
...clauses.slice(openerCount)
|
|
8949
|
+
];
|
|
8758
8950
|
return {
|
|
8759
8951
|
event: event2,
|
|
8760
|
-
body: render(
|
|
8952
|
+
body: render(paragraphs, "\n\n"),
|
|
8761
8953
|
baseEvent,
|
|
8762
8954
|
cappedBy,
|
|
8763
8955
|
downgraded,
|
|
@@ -8955,14 +9147,14 @@ function bilingualFromPlan(planPath, fetchPrBody2 = fetchPrBodyViaGh) {
|
|
|
8955
9147
|
} catch {
|
|
8956
9148
|
return false;
|
|
8957
9149
|
}
|
|
8958
|
-
|
|
8959
|
-
|
|
9150
|
+
const han = plan?.prDescriptionHasHan;
|
|
9151
|
+
if (typeof han === "boolean") {
|
|
9152
|
+
return han;
|
|
8960
9153
|
}
|
|
8961
|
-
const
|
|
8962
|
-
|
|
8963
|
-
if (!ownerRepo || !prNumber) return false;
|
|
9154
|
+
const pr = planPrIdentity(plan);
|
|
9155
|
+
if (!pr) return false;
|
|
8964
9156
|
try {
|
|
8965
|
-
return new RegExp("\\p{Script=Han}", "u").test(fetchPrBody2(ownerRepo, prNumber));
|
|
9157
|
+
return new RegExp("\\p{Script=Han}", "u").test(fetchPrBody2(pr.ownerRepo, pr.prNumber));
|
|
8966
9158
|
} catch {
|
|
8967
9159
|
return false;
|
|
8968
9160
|
}
|
|
@@ -13579,7 +13771,6 @@ import { dirname as dirname16, join as join14, resolve as resolve17 } from "node
|
|
|
13579
13771
|
init_esbuild_shims();
|
|
13580
13772
|
import { readFileSync as readFileSync20, statSync as statSync11 } from "node:fs";
|
|
13581
13773
|
import { resolve as resolve16, sep as sep6 } from "node:path";
|
|
13582
|
-
var REVERSE_AUDIT_MAX_ROUNDS = 5;
|
|
13583
13774
|
var RECORD_KEY_RE = /^reverse-audit--chunk-(\d+)--round-(\d+)--[0-9a-f]+$/;
|
|
13584
13775
|
var REVERSE_AUDIT_MARKER = "reverse-audit";
|
|
13585
13776
|
function bakedRanges(prompt, diffPath) {
|
|
@@ -13744,8 +13935,9 @@ function scheduleReverseAuditRound(planPath, chunkIds, round, env = process.env,
|
|
|
13744
13935
|
dryRounds: [lastTwo[0].round, lastTwo[1].round],
|
|
13745
13936
|
// The next even round — this branch only runs on odd rounds, so
|
|
13746
13937
|
// that is always round + 1. Whether the cap allows it is the note
|
|
13747
|
-
// composer's question, not the schedule's
|
|
13748
|
-
//
|
|
13938
|
+
// composer's question, not the schedule's: the plan's cap
|
|
13939
|
+
// (`reverseAuditRoundCap` in budget.ts, floored at the huge-diff
|
|
13940
|
+
// tier's 3) is what the admission gate enforces.
|
|
13749
13941
|
nextColdCheck: round + 1
|
|
13750
13942
|
});
|
|
13751
13943
|
}
|
|
@@ -14698,7 +14890,15 @@ function requireAuditableChunks(report) {
|
|
|
14698
14890
|
return chunks;
|
|
14699
14891
|
}
|
|
14700
14892
|
__name(requireAuditableChunks, "requireAuditableChunks");
|
|
14701
|
-
function admitReverseAuditRound(planPath, round) {
|
|
14893
|
+
function admitReverseAuditRound(planPath, round, cap) {
|
|
14894
|
+
if (typeof round === "number" && round > cap) {
|
|
14895
|
+
writeRoundCapStop(planPath, cap, round);
|
|
14896
|
+
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, launch their verifiers alone and wait, then proceed to Step 6.`
|
|
14898
|
+
);
|
|
14899
|
+
process.exitCode = 4;
|
|
14900
|
+
return false;
|
|
14901
|
+
}
|
|
14702
14902
|
const spent = reverseAuditBudgetExhausted(
|
|
14703
14903
|
process.env,
|
|
14704
14904
|
expectedRoundSeconds(planPath, round)
|
|
@@ -14722,7 +14922,8 @@ __name(refuseConverged, "refuseConverged");
|
|
|
14722
14922
|
function runAllChunks(report, planPath, role, findingsContent, rules, round) {
|
|
14723
14923
|
const chunks = requireAuditableChunks(report);
|
|
14724
14924
|
let schedule = null;
|
|
14725
|
-
|
|
14925
|
+
const retirementReadsFrom = 3;
|
|
14926
|
+
if (role === "reverse-audit" && round !== void 0 && round >= retirementReadsFrom) {
|
|
14726
14927
|
try {
|
|
14727
14928
|
schedule = scheduleReverseAuditRound(
|
|
14728
14929
|
planPath,
|
|
@@ -14739,7 +14940,11 @@ function runAllChunks(report, planPath, role, findingsContent, rules, round) {
|
|
|
14739
14940
|
refuseConverged();
|
|
14740
14941
|
return;
|
|
14741
14942
|
}
|
|
14742
|
-
if (role === "reverse-audit" && !admitReverseAuditRound(
|
|
14943
|
+
if (role === "reverse-audit" && !admitReverseAuditRound(
|
|
14944
|
+
planPath,
|
|
14945
|
+
round,
|
|
14946
|
+
reverseAuditRoundCap(report.budget)
|
|
14947
|
+
)) {
|
|
14743
14948
|
return;
|
|
14744
14949
|
}
|
|
14745
14950
|
const dueSet = schedule === null ? null : new Set(schedule.due);
|
|
@@ -14771,10 +14976,11 @@ function runAllChunks(report, planPath, role, findingsContent, rules, round) {
|
|
|
14771
14976
|
` + printed;
|
|
14772
14977
|
});
|
|
14773
14978
|
const scope = skipped.length === 0 ? "one per chunk" : `one per chunk still under audit (${skipped.length} retired chunk(s) skipped; the retirement note after the end-of-round line says which \u2014 relay it to the terminal)`;
|
|
14979
|
+
const planRoundCap = reverseAuditRoundCap(report.budget);
|
|
14774
14980
|
const retirementNote = skipped.length === 0 ? [] : [
|
|
14775
14981
|
`retirement: a chunk whose two most recent audits are substantive dry receipts is cold-checked on alternating rounds instead of audited on every one; a cold check that yields returns it to every-round auditing. Skipped this round:
|
|
14776
14982
|
` + skipped.map(
|
|
14777
|
-
(s) => `chunk ${s.chunkId} \u2014 retired: dry in rounds ${s.dryRounds
|
|
14983
|
+
(s) => `chunk ${s.chunkId} \u2014 retired: dry in rounds ${s.dryRounds.join(" and ")}, ` + (s.nextColdCheck > planRoundCap ? `certificate final \u2014 the ${planRoundCap}-round cap leaves the loop no round for a cold check` : `next cold check round ${s.nextColdCheck}`)
|
|
14778
14984
|
).join("\n")
|
|
14779
14985
|
];
|
|
14780
14986
|
writeStdoutLine(
|
|
@@ -14941,9 +15147,21 @@ function runAgentPrompt(args) {
|
|
|
14941
15147
|
);
|
|
14942
15148
|
}
|
|
14943
15149
|
}
|
|
14944
|
-
if (args.role === "reverse-audit" && !hasChunk && !args.allChunks && !admitReverseAuditRound(
|
|
15150
|
+
if (args.role === "reverse-audit" && !hasChunk && !args.allChunks && !admitReverseAuditRound(
|
|
15151
|
+
args.plan,
|
|
15152
|
+
args.round,
|
|
15153
|
+
reverseAuditRoundCap(report.budget)
|
|
15154
|
+
)) {
|
|
14945
15155
|
return;
|
|
14946
15156
|
}
|
|
15157
|
+
if (args.role === "verify") {
|
|
15158
|
+
const spent = verifyBudgetExhausted(process.env);
|
|
15159
|
+
if (spent !== null) {
|
|
15160
|
+
writeStderrLine(verifyBudgetMessage(spent));
|
|
15161
|
+
process.exitCode = 4;
|
|
15162
|
+
return;
|
|
15163
|
+
}
|
|
15164
|
+
}
|
|
14947
15165
|
if (args.role === "reverse-audit" && hasChunk && !readRoundStamps(args.plan).some((s) => s.round === (args.round ?? null))) {
|
|
14948
15166
|
if (args.round !== void 0) {
|
|
14949
15167
|
let schedule = null;
|
|
@@ -14963,7 +15181,12 @@ function runAgentPrompt(args) {
|
|
|
14963
15181
|
return;
|
|
14964
15182
|
}
|
|
14965
15183
|
}
|
|
14966
|
-
if (!admitReverseAuditRound(
|
|
15184
|
+
if (!admitReverseAuditRound(
|
|
15185
|
+
args.plan,
|
|
15186
|
+
args.round,
|
|
15187
|
+
reverseAuditRoundCap(report.budget)
|
|
15188
|
+
))
|
|
15189
|
+
return;
|
|
14967
15190
|
}
|
|
14968
15191
|
if (args.allChunks && args.role && findingsContent !== void 0) {
|
|
14969
15192
|
runAllChunks(
|
|
@@ -15020,7 +15243,7 @@ function runAgentPrompt(args) {
|
|
|
15020
15243
|
__name(runAgentPrompt, "runAgentPrompt");
|
|
15021
15244
|
var agentPromptCommand = {
|
|
15022
15245
|
command: "agent-prompt",
|
|
15023
|
-
describe: "Build a review agent's launch prompt from the plan (the diff path, its line ranges and the agent's own brief are welded in, not left to the caller to remember). Exit codes: 0 built; 4 the review time budget refused another reverse-audit round (
|
|
15246
|
+
describe: "Build a review agent's launch prompt from the plan (the diff path, its line ranges and the agent's own brief are welded in, not left to the caller to remember). Exit codes: 0 built; 4 a build was refused \u2014 the review time budget refused another reverse-audit round (BUDGET line on stderr), the plan's round cap refused one (ROUND CAP line), or the compose floor refused a verifier so compose/submit still fit (VERIFY BUDGET line) \u2014 all termination rules, not errors: stop and compose, do not retry; 5 the reverse audit CONVERGED \u2014 every chunk holds two consecutive substantive dry audits and none is due a cold check, so stop the loop and proceed to Step 6 (also a termination rule, and a clean one: no disclosure is owed); anything else is a bad call or a broken plan.",
|
|
15024
15247
|
builder: /* @__PURE__ */ __name((yargs) => yargs.option("plan", {
|
|
15025
15248
|
type: "string",
|
|
15026
15249
|
demandOption: true,
|
|
@@ -17526,15 +17749,9 @@ function inconsistencies(payload, event2) {
|
|
|
17526
17749
|
return problems;
|
|
17527
17750
|
}
|
|
17528
17751
|
__name(inconsistencies, "inconsistencies");
|
|
17529
|
-
var REPO_SEGMENT = /^[A-Za-z0-9._-]+$/;
|
|
17530
|
-
function isRepo(repo) {
|
|
17531
|
-
const parts = repo.split("/");
|
|
17532
|
-
return parts.length === 2 && parts.every((p) => REPO_SEGMENT.test(p) && p !== "." && p !== "..");
|
|
17533
|
-
}
|
|
17534
|
-
__name(isRepo, "isRepo");
|
|
17535
17752
|
function runSubmit(args, cliVersion = "unknown") {
|
|
17536
17753
|
setGhHost(args.host);
|
|
17537
|
-
if (!
|
|
17754
|
+
if (!isOwnerRepo(args.repo)) {
|
|
17538
17755
|
throw new Error(
|
|
17539
17756
|
`--repo ${JSON.stringify(args.repo)} is not <owner>/<repo>.`
|
|
17540
17757
|
);
|
|
@@ -17624,8 +17841,17 @@ Posting is a public, irreversible write, and this run has no authorisation for o
|
|
|
17624
17841
|
"--input",
|
|
17625
17842
|
"-"
|
|
17626
17843
|
);
|
|
17844
|
+
let reviewId;
|
|
17845
|
+
let reviewUrl;
|
|
17846
|
+
try {
|
|
17847
|
+
const parsed = JSON.parse(response);
|
|
17848
|
+
if (typeof parsed.id === "number") reviewId = parsed.id;
|
|
17849
|
+
if (typeof parsed.html_url === "string" && parsed.html_url.trim() !== "") {
|
|
17850
|
+
reviewUrl = parsed.html_url;
|
|
17851
|
+
}
|
|
17852
|
+
} catch {
|
|
17853
|
+
}
|
|
17627
17854
|
try {
|
|
17628
|
-
const reviewId = JSON.parse(response).id;
|
|
17629
17855
|
if (typeof reviewId === "number") {
|
|
17630
17856
|
const receiptPath = tmpFile(`pr-${args.pr}`, "submit-receipt.json");
|
|
17631
17857
|
const priorIds = readReceiptIds(receiptPath);
|
|
@@ -17640,7 +17866,7 @@ Posting is a public, irreversible write, and this run has no authorisation for o
|
|
|
17640
17866
|
} catch {
|
|
17641
17867
|
}
|
|
17642
17868
|
writeStderrLine(
|
|
17643
|
-
`Posted ${event2} to ${args.repo}#${args.pr} \u2014 ${auth.why}` + (cappedBy.length ? ` (capped by ${cappedBy.join(", ")})` : "") + "."
|
|
17869
|
+
`Posted ${event2} to ${args.repo}#${args.pr} \u2014 ${auth.why}` + (cappedBy.length ? ` (capped by ${cappedBy.join(", ")})` : "") + "." + (reviewUrl ? ` ${reviewUrl}` : "")
|
|
17644
17870
|
);
|
|
17645
17871
|
writeStdoutLine(
|
|
17646
17872
|
JSON.stringify(
|
|
@@ -17648,7 +17874,8 @@ Posting is a public, irreversible write, and this run has no authorisation for o
|
|
|
17648
17874
|
posted: true,
|
|
17649
17875
|
event: event2,
|
|
17650
17876
|
cappedBy,
|
|
17651
|
-
inlineComments: post.comments.length
|
|
17877
|
+
inlineComments: post.comments.length,
|
|
17878
|
+
...reviewUrl ? { url: reviewUrl } : {}
|
|
17652
17879
|
},
|
|
17653
17880
|
null,
|
|
17654
17881
|
2
|
|
@@ -20912,10 +21139,10 @@ var updateCommand3 = {
|
|
|
20912
21139
|
stdioHelpers,
|
|
20913
21140
|
{ updateEventEmitter }
|
|
20914
21141
|
] = await Promise.all([
|
|
20915
|
-
import("./settings-
|
|
20916
|
-
import("./updateCheck-
|
|
20917
|
-
import("./installationInfo-
|
|
20918
|
-
import("./standalone-update-
|
|
21142
|
+
import("./settings-EQBUAQ7Y.js"),
|
|
21143
|
+
import("./updateCheck-AXWSO7KA.js"),
|
|
21144
|
+
import("./installationInfo-3YUGIP36.js"),
|
|
21145
|
+
import("./standalone-update-2W26SRRO.js"),
|
|
20919
21146
|
import("./stdioHelpers-7A2EE64Z.js"),
|
|
20920
21147
|
import("./updateEventEmitter-5MKC7BLQ.js")
|
|
20921
21148
|
]);
|
|
@@ -21004,11 +21231,6 @@ var updateCommand3 = {
|
|
|
21004
21231
|
};
|
|
21005
21232
|
|
|
21006
21233
|
// packages/cli/src/config/config.ts
|
|
21007
|
-
var SESSION_ID_REGEX = /^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}(-agent-[a-zA-Z0-9_.-]+)?$/i;
|
|
21008
|
-
function isValidSessionId(value) {
|
|
21009
|
-
return SESSION_ID_REGEX.test(value);
|
|
21010
|
-
}
|
|
21011
|
-
__name(isValidSessionId, "isValidSessionId");
|
|
21012
21234
|
var debugLogger4 = createDebugLogger("CONFIG");
|
|
21013
21235
|
function resolveLocaleForExtensions(settings) {
|
|
21014
21236
|
const envLang = process.env["QWEN_CODE_LANG"];
|
|
@@ -22082,7 +22304,7 @@ async function loadCliConfig(settings, argv, cwd = process.cwd(), overrideExtens
|
|
|
22082
22304
|
disabledSlashCommands: disabledSlashCommands.length > 0 ? disabledSlashCommands : void 0,
|
|
22083
22305
|
disabledSkillNamesProvider: bareMode || safeMode ? void 0 : disabledSkillNamesProvider,
|
|
22084
22306
|
terminalImageRenderSupportProvider: interactive ? async () => {
|
|
22085
|
-
const { getTerminalImageRenderSupport } = await import("./terminal-image-renderer-
|
|
22307
|
+
const { getTerminalImageRenderSupport } = await import("./terminal-image-renderer-S5WPPQKH.js");
|
|
22086
22308
|
return getTerminalImageRenderSupport();
|
|
22087
22309
|
} : void 0,
|
|
22088
22310
|
disabledSkillLevels: bareMode || safeMode || !Array.isArray(settings.skills?.disabledLevels) ? void 0 : settings.skills.disabledLevels.filter(isSkillLevel),
|
|
@@ -22494,7 +22716,6 @@ export {
|
|
|
22494
22716
|
staleArgsWarning,
|
|
22495
22717
|
skillArgsNote,
|
|
22496
22718
|
RunBudgetEnforcer,
|
|
22497
|
-
isValidSessionId,
|
|
22498
22719
|
parseArguments,
|
|
22499
22720
|
loadHierarchicalGeminiMemory,
|
|
22500
22721
|
isDebugMode,
|