@qwen-code/qwen-code 0.20.2-jobbench-no-todo-write.0 → 0.21.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/qc-helper/docs/configuration/settings.md +5 -0
- package/bundled/qc-helper/docs/features/sub-agents.md +23 -5
- package/bundled/qc-helper/docs/integration-github-action.md +9 -9
- package/bundled/review/SKILL.md +7 -3
- package/chunks/MaxSizedBox-5DPPWPGT.js +85 -0
- package/chunks/{StandaloneSessionPicker-WBRBHD2M.js → StandaloneSessionPicker-BIRMPLRD.js} +66 -58
- package/chunks/{acp-startup-profiler-N3RHHXJ3.js → acp-startup-profiler-RV3IV562.js} +2 -2
- package/chunks/{acpAgent-BBQZ33CA.js → acpAgent-6J2U72PQ.js} +706 -182
- package/chunks/agent-6ODUANDO.js +81 -0
- package/chunks/agent-headless-7BYQTMHW.js +75 -0
- package/chunks/{anthropicContentGenerator-HGWAHO24.js → anthropicContentGenerator-75BKLTSP.js} +117 -43
- package/chunks/{artifact-tool-56T5IMBP.js → artifact-tool-Y5T7GG7F.js} +3 -3
- package/chunks/{askUserQuestion-E25OBIC2.js → askUserQuestion-2H6747FR.js} +3 -3
- package/chunks/bridge-ZUB64FAE.js +90 -0
- package/chunks/{build-SSCNEHZZ.js → build-RV63TIRH.js} +2 -3
- package/chunks/{ca-N6VVUFVB.js → ca-25EDXPFZ.js} +2 -0
- package/chunks/{channel-worker-group-LFBT7K64.js → channel-worker-group-2ZD7TVAT.js} +7 -6
- package/chunks/{channel-worker-manager-3RUPERG2.js → channel-worker-manager-4OA4BCGB.js} +189 -29
- package/chunks/{channel-worker-supervisor-A3KVATD3.js → channel-worker-supervisor-V7KCFJTS.js} +6 -5
- package/chunks/{chunk-TYQMGACW.js → chunk-22C7BQ6D.js} +508 -10967
- package/chunks/chunk-2JZBVYTU.js +452 -0
- package/chunks/{chunk-H2XVO6NE.js → chunk-2MIN6GRR.js} +1 -1
- package/chunks/{chunk-B2HSPMD4.js → chunk-2NH6DYI4.js} +12 -12
- package/chunks/chunk-2SCDWPXI.js +246 -0
- package/chunks/{chunk-JK26TQON.js → chunk-2X55UKQE.js} +3 -3
- package/chunks/{chunk-7VUQQBR7.js → chunk-3QMGYBFN.js} +2 -65
- package/chunks/{chunk-UMCULC5M.js → chunk-3RN6GBKS.js} +1 -1
- package/chunks/{chunk-QR6U5QPP.js → chunk-3SJ43L4W.js} +4 -0
- package/chunks/chunk-46UV252V.js +128 -0
- package/chunks/{chunk-GPMVHZP4.js → chunk-4WIZGAH3.js} +7 -7
- package/chunks/{chunk-CI3GWKGJ.js → chunk-55DJUCI2.js} +87 -29
- package/chunks/{chunk-QNLNLENL.js → chunk-5I2IWRSH.js} +2 -2
- package/chunks/{chunk-D7WXIW7H.js → chunk-5NBDS5S6.js} +145 -5
- package/chunks/{chunk-E4IMU4Y5.js → chunk-63P4EL5V.js} +1 -1
- package/chunks/chunk-6FGBXPWM.js +293 -0
- package/chunks/{chunk-NEEB7UEN.js → chunk-6GMVPFB2.js} +153 -72
- package/chunks/{chunk-KWK7UE6L.js → chunk-6OUGMXDC.js} +6 -6
- package/chunks/{chunk-QRUIS3DN.js → chunk-6PEXNQTX.js} +22 -1
- package/chunks/{chunk-77OZOGPT.js → chunk-7JURR4JT.js} +1 -1
- package/chunks/{chunk-4MWNZNJ4.js → chunk-7MVVZO4N.js} +4 -4
- package/chunks/{chunk-6ZBPS62S.js → chunk-7ZCNENPP.js} +1 -1
- package/chunks/{chunk-6X4GWOPW.js → chunk-A5L3JMUA.js} +1 -1
- package/chunks/{chunk-B3I77W5J.js → chunk-ACY3A37B.js} +3 -3
- package/chunks/chunk-AMDSOFFV.js +10860 -0
- package/chunks/{chunk-RV4C2ZFG.js → chunk-BIQWWWJN.js} +1 -1
- package/chunks/{chunk-ZHERRXZJ.js → chunk-BJX6ZSUK.js} +4 -4
- package/chunks/chunk-BK2UNYWD.js +29 -0
- package/chunks/{chunk-7TLUW4ZE.js → chunk-BKHWX6I2.js} +3 -3
- package/chunks/chunk-BPJSQIJX.js +100 -0
- package/chunks/{chunk-M7WBGLYP.js → chunk-BULDBTYC.js} +2 -0
- package/chunks/{chunk-H4A4A2SY.js → chunk-CIKQ7KKO.js} +4625 -8645
- package/chunks/{chunk-QZJY47IE.js → chunk-D3UEZIQH.js} +7 -5
- package/chunks/chunk-DHHOYAPR.js +1462 -0
- package/chunks/{chunk-LESHKUWF.js → chunk-DLWL3Z7A.js} +5 -3
- package/chunks/{chunk-XHATNRQA.js → chunk-DP3IHZGG.js} +0 -2
- package/chunks/chunk-E5TUC6CA.js +479 -0
- package/chunks/{chunk-6NRFYMKG.js → chunk-EBJQ6AXW.js} +11 -10
- package/chunks/{chunk-HABKX6LY.js → chunk-EPDRMGT4.js} +164 -17
- package/chunks/{chunk-P2BQZ7H7.js → chunk-ETSW4KLJ.js} +2 -2
- package/chunks/{chunk-KHOVYUHX.js → chunk-FNQ6T3CV.js} +20 -3
- package/chunks/{chunk-64EG42HV.js → chunk-FQK6JAFG.js} +72 -23
- package/chunks/{chunk-L6U47G5P.js → chunk-FSITMZJH.js} +8 -8
- package/chunks/{chunk-6RLROE6G.js → chunk-GLWP3FDB.js} +80 -15
- package/chunks/{chunk-CXIOPXRR.js → chunk-GSN55ZRI.js} +5 -5
- package/chunks/{chunk-LVA5OHQO.js → chunk-H4SBPHSA.js} +3 -3
- package/chunks/chunk-H5FFA6TH.js +902 -0
- package/chunks/{chunk-TDKQP3M6.js → chunk-HIJQF5B5.js} +1 -1
- package/chunks/{chunk-NXE6SQIV.js → chunk-IJTOWOD7.js} +14 -3
- package/chunks/chunk-IKCX4CCL.js +469 -0
- package/chunks/{chunk-7SSWNGEJ.js → chunk-IKYJHJNF.js} +3 -3
- package/chunks/{chunk-64XKYOXK.js → chunk-IO3IX5Q4.js} +1 -1
- package/chunks/{chunk-RS7MT2QG.js → chunk-IPUUTYMV.js} +2 -4
- package/chunks/{chunk-XU457J4V.js → chunk-IRH27ZC2.js} +2 -2
- package/chunks/{chunk-SVIMKSEI.js → chunk-J24WCGIN.js} +4 -4
- package/chunks/{chunk-4LVZNIDO.js → chunk-J56UI34H.js} +4 -13
- package/chunks/{chunk-TJTKSVIV.js → chunk-JLU636DO.js} +5 -1
- package/chunks/{chunk-7PIL2BYF.js → chunk-JVPM2ULZ.js} +6 -6
- package/chunks/{chunk-KBB5O3JO.js → chunk-JXJFVC6E.js} +37 -18
- package/chunks/chunk-JZA3JUDJ.js +82 -0
- package/chunks/{chunk-45PO6ZIS.js → chunk-K36B6G2O.js} +5 -5
- package/chunks/{chunk-GPSKDNEE.js → chunk-K4XWPEWB.js} +4 -4
- package/chunks/{chunk-K7EUPLIP.js → chunk-KIM5GUMA.js} +654 -117
- package/chunks/{chunk-42W5BDEY.js → chunk-KMQ33DO4.js} +7 -5
- package/chunks/{chunk-E2UVIFI2.js → chunk-KRXPRVGL.js} +0 -1
- package/chunks/{chunk-WHGVTP7Q.js → chunk-L26JL52R.js} +3 -3
- package/chunks/{chunk-7Z6JQEL6.js → chunk-L5UHQJTJ.js} +1 -1
- package/chunks/{chunk-26CBI4DC.js → chunk-LB6DUZ26.js} +259 -67
- package/chunks/chunk-LEH5C7FV.js +232 -0
- package/chunks/{chunk-UTGFTJ2H.js → chunk-LH2BYDQ5.js} +6 -4
- package/chunks/{chunk-QKTHJXCS.js → chunk-LK7CHLVP.js} +79 -2
- package/chunks/{chunk-V7WNRZL7.js → chunk-LKEJ26GS.js} +11 -11
- package/chunks/{chunk-6VPLV3L3.js → chunk-LQIW3YFY.js} +227 -41
- package/chunks/chunk-LS77BEZP.js +405 -0
- package/chunks/{chunk-5WDRI7US.js → chunk-M4FMGVY4.js} +3 -3
- package/chunks/{chunk-57FIIFJN.js → chunk-M5JM7OSF.js} +1 -1
- package/chunks/{chunk-7362QS5B.js → chunk-MB4MZHMJ.js} +80 -37
- package/chunks/{chunk-4K56OJFJ.js → chunk-MUP3T3AD.js} +1 -1
- package/chunks/{chunk-CJQ3FZ2G.js → chunk-MVSUYZDT.js} +4 -4
- package/chunks/{chunk-6FZYKBKV.js → chunk-MZAXJAUM.js} +1 -1
- package/chunks/{chunk-32L4D2O2.js → chunk-NH6KE4JX.js} +3 -3
- package/chunks/chunk-NIBLUX3Y.js +934 -0
- package/chunks/{chunk-OQB4EXO4.js → chunk-NL7LTRLR.js} +1 -1
- package/chunks/{chunk-6S5HSCOI.js → chunk-OFDOK3VM.js} +5 -5
- package/chunks/{chunk-LIZRAKPB.js → chunk-OHNBB4XR.js} +1 -1
- package/chunks/{chunk-MDZTPSXO.js → chunk-OKY7HXPG.js} +2 -2
- package/chunks/{chunk-NHDKSOEY.js → chunk-P3QQPMQA.js} +5 -5
- package/chunks/{chunk-4SCOLXTD.js → chunk-PC6JANNU.js} +5 -5
- package/chunks/{chunk-IWALV67J.js → chunk-PHOF65IG.js} +4300 -1284
- package/chunks/{chunk-OQ5SYCPE.js → chunk-PJIZUQVC.js} +2 -2
- package/chunks/{chunk-5DTTYNB7.js → chunk-PQNHRFJC.js} +16 -3
- package/chunks/{chunk-YM3SZTH4.js → chunk-PR75REBZ.js} +18 -1
- package/chunks/{chunk-5XORMWA2.js → chunk-PSOO6YXD.js} +18 -15
- package/chunks/{chunk-X6N25LXS.js → chunk-PWTZEM3C.js} +2 -2
- package/chunks/{chunk-GSX6P2JW.js → chunk-PWVFN2LF.js} +1 -1
- package/chunks/{chunk-AHX6AKPD.js → chunk-Q4M4MDQ4.js} +2 -2
- package/chunks/{chunk-3EHJ44GG.js → chunk-QAF7NMK7.js} +1 -1
- package/chunks/{chunk-WSYKDFYR.js → chunk-R5AFZNQW.js} +5 -5
- package/chunks/{chunk-63DJBU32.js → chunk-RF3EXIHJ.js} +39 -18
- package/chunks/{chunk-4K7VDKAD.js → chunk-RHLZR4E5.js} +1 -1
- package/chunks/{chunk-SXPSOMQ4.js → chunk-RIBKPMRP.js} +220 -141
- package/chunks/{chunk-RVLZCXEE.js → chunk-RWTEFFPU.js} +82 -3
- package/chunks/{chunk-ZUTM4LHM.js → chunk-RZIX2G32.js} +1 -1
- package/chunks/{chunk-ZKBNRL6O.js → chunk-SQCQ4KO2.js} +336 -404
- package/chunks/{chunk-THJNPLI4.js → chunk-TARRHLLG.js} +1 -0
- package/chunks/{chunk-RHYFF54J.js → chunk-TEHGS6UP.js} +50 -21
- package/chunks/{chunk-ACQJPDDS.js → chunk-TGILQ3YH.js} +8 -8
- package/chunks/{chunk-Q2YKNMLS.js → chunk-TOFQCPDC.js} +43 -10
- package/chunks/{chunk-ACZIBDYD.js → chunk-TPRQ7RZH.js} +587 -176
- package/chunks/{chunk-T4TZQJ7W.js → chunk-TWPJO254.js} +5 -16
- package/chunks/{chunk-7MWABCXU.js → chunk-U7M2DMGW.js} +3 -3
- package/chunks/{chunk-KQQ757OQ.js → chunk-UDX5OBWR.js} +41 -9
- package/chunks/{chunk-SRPZG4ER.js → chunk-USTWD7QV.js} +6 -4
- package/chunks/{chunk-NPQDJGKU.js → chunk-UUUTRMI2.js} +1 -1
- package/chunks/chunk-UW5EOVUN.js +249 -0
- package/chunks/{chunk-6IL7KRLE.js → chunk-VAK25FTU.js} +1 -1
- package/chunks/{chunk-TDDFEPBX.js → chunk-VIA5XA4U.js} +5 -2
- package/chunks/{chunk-3BJDQVE6.js → chunk-VRYUBFMC.js} +1 -1
- package/chunks/{chunk-PLQODS7F.js → chunk-VULLI6WQ.js} +172 -6
- package/chunks/{chunk-GN45XAAU.js → chunk-WCXCRJYB.js} +1 -1
- package/chunks/{chunk-2LI23QA6.js → chunk-X5XDDSSH.js} +1 -1
- package/chunks/{chunk-O32RMIMO.js → chunk-Y34KJKDC.js} +1 -1
- package/chunks/{chunk-7ZD5EKXE.js → chunk-YBL3QUDD.js} +2 -2
- package/chunks/{chunk-H4AR2JQF.js → chunk-YH6G52F2.js} +3 -3
- package/chunks/{chunk-3G3UUMRS.js → chunk-YPE6A4GC.js} +2 -2
- package/chunks/{chunk-3F2JUWCH.js → chunk-YX324OPW.js} +1 -1
- package/chunks/{chunk-CGIDQG6J.js → chunk-Z2BC6UJ5.js} +3 -3
- package/chunks/{chunk-QLJUC7TG.js → chunk-ZD6UTE4A.js} +1 -1
- package/chunks/{chunk-ZPWJZHJ2.js → chunk-ZFDTEDCF.js} +6 -6
- package/chunks/chunk-ZJHVAS7M.js +289 -0
- package/chunks/{chunk-XAGLQITN.js → chunk-ZNAUOR2I.js} +15 -12
- package/chunks/{chunk-T2L47JJK.js → chunk-ZOIFNCKL.js} +4 -4
- package/chunks/{computer-use-RZ3UUWYW.js → computer-use-SOQ4E3VX.js} +43 -34
- package/chunks/{config-utils-SQUBZEQM.js → config-utils-7V7GGIW6.js} +3 -3
- package/chunks/contextCommand-JLHYA34Z.js +80 -0
- package/chunks/{create-sub-session-AZ77LBL3.js → create-sub-session-IWW2IZ2T.js} +3 -3
- package/chunks/{create-sub-session-EQG73FT6.js → create-sub-session-QRJLW5BV.js} +43 -34
- package/chunks/{cron-create-KTWJM7QT.js → cron-create-YIID5XAW.js} +6 -6
- package/chunks/{cron-delete-2P3I5ULL.js → cron-delete-ZVHYCEP2.js} +5 -5
- package/chunks/{cron-list-PXDPGEDQ.js → cron-list-XEGS463Q.js} +5 -5
- package/chunks/{daemon-RAPSDJH7.js → daemon-YO6433NF.js} +350 -53
- package/chunks/daemon-status-provider-2233Q37D.js +89 -0
- package/chunks/{de-4IBXM7CN.js → de-HGRCYDEJ.js} +1 -0
- package/chunks/{dist-UIFWIFRO.js → dist-46NQKLTW.js} +2 -2
- package/chunks/{dist-XRYV6TJP.js → dist-AIKFMUKK.js} +50 -4
- package/chunks/{dist-XBJVSWS2.js → dist-BBLXMS3N.js} +14 -2
- package/chunks/{dist-OMW6WDEO.js → dist-F6IBUDR4.js} +40 -9
- package/chunks/{dist-PJLG2XYX.js → dist-WEAHOXDM.js} +1 -1
- package/chunks/{dist-OAV7LJGJ.js → dist-YFNEUWSE.js} +26 -2
- package/chunks/earlyInputCapture-A7NDU3PF.js +82 -0
- package/chunks/{edit-XRSKQPHQ.js → edit-OBDSQURM.js} +43 -34
- package/chunks/{en-USMCCJAJ.js → en-MTWBNGDO.js} +15 -0
- package/chunks/{enter-worktree-WAHCWE6I.js → enter-worktree-U6MRPQ2P.js} +43 -34
- package/chunks/{enterPlanMode-QIOYLDCF.js → enterPlanMode-BC5QUZZ2.js} +43 -34
- package/chunks/{environment-T3FXCDJI.js → environment-W5UFC2CH.js} +46 -37
- package/chunks/errors-M7CLORXH.js +88 -0
- package/chunks/{exit-worktree-RHVTLX6T.js → exit-worktree-DGNYMECB.js} +43 -34
- package/chunks/{exitPlanMode-UATOE2GQ.js → exitPlanMode-GXTBWQAR.js} +43 -34
- package/chunks/{fast-path-J3RHOYSZ.js → fast-path-JJZFJANL.js} +6 -6
- package/chunks/{fast-path-settings-XB3CPUJT.js → fast-path-settings-WQJU2LAT.js} +2 -2
- package/chunks/{fr-WVHEBDDB.js → fr-45RLL55O.js} +1 -0
- package/chunks/{gemini-P72OGOH6.js → gemini-QS36EBZV.js} +133 -102
- package/chunks/{geminiContentGenerator-F6EG5FXF.js → geminiContentGenerator-AG4KB6CV.js} +14 -8
- package/chunks/{getMachineId-bsd-QFVLPUPT.js → getMachineId-bsd-V7W3GODC.js} +1 -1
- package/chunks/{getMachineId-darwin-DGMQQE2E.js → getMachineId-darwin-TDO75DQP.js} +1 -1
- package/chunks/{getMachineId-linux-R4Z6CSWC.js → getMachineId-linux-TF43WQT2.js} +1 -1
- package/chunks/{getMachineId-unsupported-Z3SBVBUV.js → getMachineId-unsupported-ZGUO3TXT.js} +1 -1
- package/chunks/{getMachineId-win-SCK5UFDT.js → getMachineId-win-ECFYZZFQ.js} +1 -1
- package/chunks/{glob-WHASQZRX.js → glob-V7R3PSK3.js} +43 -34
- package/chunks/{grep-LS7AADJ3.js → grep-QYPSK7OP.js} +43 -34
- package/chunks/handleAutoUpdate-6DBEZYPV.js +81 -0
- package/chunks/{i18n-IMVASWIF.js → i18n-VUJJZIMU.js} +44 -35
- package/chunks/image-gen-Z3VPGKRC.js +240 -0
- package/chunks/initializer-UWAK5U5O.js +86 -0
- package/chunks/installationInfo-6O2YAA52.js +80 -0
- package/chunks/{ja-KY4ROZTE.js → ja-B7DF7DFG.js} +1 -0
- package/chunks/{keychain-token-storage-6ACJDYIB.js → keychain-token-storage-MDTG3WRM.js} +3 -3
- package/chunks/{kittyProtocolDetector-HCNNKJTI.js → kittyProtocolDetector-MBRTDRBK.js} +5 -3
- package/chunks/list-GB4ESM3T.js +89 -0
- package/chunks/list-agents-5KJJHR6I.js +80 -0
- package/chunks/loadedSettingsAdapter-OT6JVQ7U.js +83 -0
- package/chunks/loggingContentGenerator-HS3S5H3Q.js +1077 -0
- package/chunks/{loop-wakeup-RNMRVA66.js → loop-wakeup-FXKNNYSY.js} +7 -7
- package/chunks/{ls-J2ZI5XYK.js → ls-NTK6VOQJ.js} +5 -5
- package/chunks/{lsp-UMS3NUB5.js → lsp-2JI24STP.js} +3 -3
- package/chunks/{managed-npm-update-L6UY7OM7.js → managed-npm-update-JYEMMXA3.js} +94 -37
- package/chunks/mcp-6DBDJPFU.js +83 -0
- package/chunks/{monitor-DXYFB5QD.js → monitor-R3ODH5U6.js} +45 -35
- package/chunks/node-UUDY34IG.js +305 -0
- package/chunks/nonInteractiveCli-MOYCYBBU.js +141 -0
- package/chunks/{notebook-edit-KGD7YJEA.js → notebook-edit-BNOK452R.js} +43 -34
- package/chunks/{openaiContentGenerator-C74A2XAU.js → openaiContentGenerator-WMCU3O2H.js} +27 -17
- package/chunks/pidfile-TFRZZZIO.js +86 -0
- package/chunks/{processUtils-GUT5B4R6.js → processUtils-RT7UNCC2.js} +2 -2
- package/chunks/{pt-OK455PLH.js → pt-22Q3FP73.js} +1 -0
- package/chunks/{qwenContentGenerator-PT46FQPA.js → qwenContentGenerator-HHCRK4SX.js} +56 -41
- package/chunks/{qwenOAuth2-S7DZHUUU.js → qwenOAuth2-OWLB5AKH.js} +14 -27
- package/chunks/read-file-APMO3PSX.js +31 -0
- package/chunks/{read-mcp-resource-F6HYMDUY.js → read-mcp-resource-4DKQWGHD.js} +3 -3
- package/chunks/{record-artifact-7GCFLDD7.js → record-artifact-RQKFYO5B.js} +3 -3
- package/chunks/resumeHistoryUtils-6KRYEAWZ.js +91 -0
- package/chunks/ripGrep-BEJDEDXW.js +73 -0
- package/chunks/{ru-7SPDGMGD.js → ru-FZCNZHDC.js} +1 -0
- package/chunks/{run-qwen-serve-QO4PT5NV.js → run-qwen-serve-FU6HEM4J.js} +276 -62
- package/chunks/{runtime-EOTXBUM6.js → runtime-XXRRTNP6.js} +55 -44
- package/chunks/{scheduler-MAIQ2PHR.js → scheduler-G2ZS2Z7E.js} +43 -34
- package/chunks/{sdk-exporters-grpc-ETLH47EP.js → sdk-exporters-grpc-AK3LGHNO.js} +3 -3
- package/chunks/{sdk-exporters-http-T3POX73F.js → sdk-exporters-http-FYBSUCPD.js} +6 -6
- package/chunks/{sdk-impl-NSLPDH6I.js → sdk-impl-GMVPB7NB.js} +6 -6
- package/chunks/{send-message-PYIJ2PZL.js → send-message-Q6OOR6BR.js} +46 -9
- package/chunks/serve-7BSTXJ4T.js +89 -0
- package/chunks/{server-CBCC3XQC.js → server-4UMH7OIZ.js} +2348 -396
- package/chunks/{session-RQUEFQDL.js → session-K3O3Q2SV.js} +107 -88
- package/chunks/{settings-QHXCJDSR.js → settings-CR2EWTBA.js} +53 -44
- package/chunks/shell-HH3PF3A2.js +83 -0
- package/chunks/{skill-WHSGTGKP.js → skill-I3SDA4MB.js} +17 -15
- package/chunks/spawnChannel-RWNDBXGA.js +82 -0
- package/chunks/{src-F3HKX47D.js → src-GE4TTTML.js} +290 -171
- package/chunks/{standalone-update-BKLONSVI.js → standalone-update-Q6WFRZZQ.js} +45 -36
- package/chunks/{startInteractiveUI-TNJ37X5W.js → startInteractiveUI-SLZGHRPH.js} +736 -298
- package/chunks/{syntheticOutput-H7RTI5KL.js → syntheticOutput-I3757IWH.js} +4 -4
- package/chunks/{task-create-7474AJJD.js → task-create-N7WQSGYA.js} +10 -10
- package/chunks/{task-list-633HGOIB.js → task-list-FOPULZEP.js} +7 -7
- package/chunks/{task-stop-MNUGHPIA.js → task-stop-H6RHXFVQ.js} +4 -4
- package/chunks/{task-update-66GQB5LI.js → task-update-M57TFZJT.js} +10 -10
- package/chunks/{team-create-LUHJ7ZCC.js → team-create-YJALH5D2.js} +44 -35
- package/chunks/{team-delete-BB3CG3QF.js → team-delete-QE2UXJL7.js} +7 -7
- package/chunks/{team-plan-approval-X3DYRL6L.js → team-plan-approval-34QFYKGN.js} +43 -34
- package/chunks/theme-manager-SWRILQHI.js +77 -0
- package/chunks/todoWrite-VQ7FKOHL.js +358 -0
- package/chunks/{tool-search-BAWOETUY.js → tool-search-NF7GB6LE.js} +16 -16
- package/chunks/total-session-admission-DLHHHLD3.js +84 -0
- package/chunks/{tree-sitter-FS4VPMZA.js → tree-sitter-4D7QS7F6.js} +1 -1
- package/chunks/{tree-sitter-bash-6B46JJCV.js → tree-sitter-bash-VEJGF5XF.js} +1 -1
- package/chunks/{trustedFolders-4UEOIKOF.js → trustedFolders-KHXHY6PY.js} +44 -35
- package/chunks/{update-relaunch-WDWABT5P.js → update-relaunch-WBUZJC5O.js} +5 -5
- package/chunks/updateCheck-RKL6M5XN.js +92 -0
- package/chunks/useAutoAcceptIndicator-CFQ5BUJL.js +93 -0
- package/chunks/{validateNonInterActiveAuth-OKUE3JLF.js → validateNonInterActiveAuth-3R223G3R.js} +91 -81
- package/chunks/{version-GMUULLWB.js → version-HS7YSFHV.js} +1 -1
- package/chunks/{web-fetch-JBWTMPFN.js → web-fetch-NKCSG7ZE.js} +18 -16
- package/chunks/{web-search-27COJHJT.js → web-search-S62WAP4S.js} +13 -27
- package/chunks/{workflow-5L37J7YF.js → workflow-QAGU5RU4.js} +44 -35
- package/chunks/workspace-providers-status-QSVZUETE.js +86 -0
- package/chunks/{workspace-registration-store-TYPYXIP6.js → workspace-registration-store-24JMHDGF.js} +2 -2
- package/chunks/workspace-registry-UT4RBNBM.js +88 -0
- package/chunks/workspace-service-JFWRUS4V.js +98 -0
- package/chunks/workspace-skills-status-ZBBKJOI2.js +85 -0
- package/chunks/write-file-VHIXW5M7.js +73 -0
- package/chunks/{zh-WY5DWYZD.js → zh-LUIGBD55.js} +15 -0
- package/chunks/{zh-TW-BM47YBFH.js → zh-TW-F5KG2IYD.js} +15 -0
- package/cli-entry.js +10 -1
- package/cli.js +13 -13
- package/locales/ca.js +2 -0
- package/locales/de.js +1 -0
- package/locales/en.js +25 -0
- package/locales/fr.js +1 -0
- package/locales/ja.js +1 -0
- package/locales/pt.js +1 -0
- package/locales/ru.js +1 -0
- package/locales/zh-TW.js +23 -0
- package/locales/zh.js +23 -0
- package/package.json +3 -3
- package/web-shell/assets/{arc-BWFm0SI0.js → arc-DcbWnB9T.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-CZ_yL-DQ.js → architectureDiagram-3BPJPVTR-kMMF5sud.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-B9F9mJvG.js → blockDiagram-GPEHLZMM-Htl9vTJS.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-BUdwJW5f.js → c4Diagram-AAUBKEIU-BnZnm0mQ.js} +1 -1
- package/web-shell/assets/channel-Cq7YKtfC.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-w4cF-qlF.js → chunk-2J33WTMH-DziB7kDG.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-BXwURxHJ.js → chunk-4BX2VUAB-CmkD8daw.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-Gem3LalC.js → chunk-55IACEB6-CHAd9A_U.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-A3ddVojI.js → chunk-727SXJPM-Dqaam3fE.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-CjHZ5L_R.js → chunk-AQP2D5EJ-D_-saBYM.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-CKgdgcpv.js → chunk-FMBD7UC4-B9r_veWD.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-Cn2Dykjb.js → chunk-ND2GUHAM-B3EaCSpL.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN--0SyraC5.js → chunk-QZHKN3VN-CYq8x9mn.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CQ9aC1Tg.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CQ9aC1Tg.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-CphhAity.js → cose-bilkent-S5V4N54A-D0ng4uiB.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-DU--jiKp.js → dagre-BM42HDAG-DCZollQv.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BzvuZw1Y.js → diagram-2AECGRRQ-Dfk2pWS0.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-D84-49Y0.js → diagram-5GNKFQAL-kX38ltWR.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-DQTq-3_3.js → diagram-KO2AKTUF-CJz2vsXh.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-8FTrshzN.js → diagram-LMA3HP47-BvMLZm_7.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-BCjpDBCm.js → diagram-OG6HWLK6-l7kfStkO.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-BtRObkmg.js → erDiagram-TEJ5UH35-BSVa8GGT.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-DTrW6oxy.js → flowDiagram-I6XJVG4X-CoawKIXH.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-BgPNSW6j.js → ganttDiagram-6RSMTGT7-DFUDH0zF.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-BTclNgGV.js → gitGraphDiagram-PVQCEYII-Y2pvpT4e.js} +1 -1
- package/web-shell/assets/{index-CxA7AqY6.js → index-D0GX0zZf.js} +1 -1
- package/web-shell/assets/index-D9haPt0X.css +5 -0
- package/web-shell/assets/index-ckX9Pq5k.js +1230 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-DCE4AJt2.js → infoDiagram-5YYISTIA-CU8_zLiX.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-C8iE6q4Y.js → ishikawaDiagram-YF4QCWOH-AVQiV0DU.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-C_dxdyEc.js → journeyDiagram-JHISSGLW-DQ0VSKa3.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-Dw3n1u3w.js → kanban-definition-UN3LZRKU-BqnWqsE_.js} +1 -1
- package/web-shell/assets/{linear-C2BF2zJ9.js → linear-BkoihsaA.js} +1 -1
- package/web-shell/assets/{mermaid.core-CGTQU3MA.js → mermaid.core-5RJs-31j.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-BVFZm9ZC.js → mindmap-definition-RKZ34NQL-D33Bxnpd.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-Cc-TNN3n.js → pieDiagram-4H26LBE5-BuEAw3BH.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-CgW3Rzsi.js → quadrantDiagram-W4KKPZXB-Kox_usEq.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-BAaj0Y3B.js → requirementDiagram-4Y6WPE33-CNjeUif0.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-XJWmekxS.js → sankeyDiagram-5OEKKPKP-BCd2OL_U.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-CtRc_0wf.js → sequenceDiagram-3UESZ5HK-CF2ZTsz0.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-WCnvMGy5.js → stateDiagram-AJRCARHV-qenSzHtm.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-B7W4zlCr.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-C9cRx49L.js → timeline-definition-PNZ67QCA-B5DyWdgs.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BvXOCEt-.js → vennDiagram-CIIHVFJN-DqP4I_o_.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-ByafGtzu.js → wardley-L42UT6IY-CJe2e4mg.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-CozAnw8x.js → wardleyDiagram-YWT4CUSO-BMDSw-Rr.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-Camu9Qvq.js → xychartDiagram-2RQKCTM6-BTVZYkxD.js} +1 -1
- package/web-shell/index.html +17 -13
- package/chunks/MaxSizedBox-HNWBEL5H.js +0 -77
- package/chunks/agent-KTMY6SF3.js +0 -72
- package/chunks/agent-headless-HJ56ZZOW.js +0 -66
- package/chunks/bridge-AMC5AD7W.js +0 -80
- package/chunks/chunk-CBOQ3HY7.js +0 -2019
- package/chunks/chunk-UHGNAWHK.js +0 -6928
- package/chunks/contextCommand-PW4GINQU.js +0 -71
- package/chunks/daemon-status-provider-3IWTBWQ3.js +0 -79
- package/chunks/earlyInputCapture-TYNI3B6E.js +0 -73
- package/chunks/errors-QAWTJTAW.js +0 -79
- package/chunks/handleAutoUpdate-V5A3JHOG.js +0 -72
- package/chunks/initializer-JJLF5JCJ.js +0 -77
- package/chunks/installationInfo-LAWMHQAG.js +0 -71
- package/chunks/list-L2ECB6UM.js +0 -80
- package/chunks/loadedSettingsAdapter-RLMZ4Z3E.js +0 -74
- package/chunks/mcp-E4O7Z6FO.js +0 -74
- package/chunks/nonInteractiveCli-GU2UKULE.js +0 -131
- package/chunks/pidfile-IWQWZNZV.js +0 -77
- package/chunks/read-file-ZOCXW4AD.js +0 -31
- package/chunks/resumeHistoryUtils-TJWRDE2L.js +0 -83
- package/chunks/ripGrep-OFKAW2VE.js +0 -64
- package/chunks/serve-UB4CF67Q.js +0 -80
- package/chunks/shell-RPK7EAOC.js +0 -74
- package/chunks/spawnChannel-IUP3ZNMT.js +0 -73
- package/chunks/theme-manager-ALL7F4CJ.js +0 -68
- package/chunks/total-session-admission-PLONPNXI.js +0 -74
- package/chunks/updateCheck-PVROE4GR.js +0 -87
- package/chunks/useAutoAcceptIndicator-6BNLNN5S.js +0 -85
- package/chunks/workspace-providers-status-2U3IF4TX.js +0 -77
- package/chunks/workspace-registry-DLQDDDIF.js +0 -78
- package/chunks/workspace-service-7K3LF4QX.js +0 -89
- package/chunks/workspace-skills-status-4DOZ3DBS.js +0 -76
- package/chunks/write-file-PTPXDKZ3.js +0 -64
- package/web-shell/assets/channel-DiLlxxIf.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-CkylTdM4.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-CkylTdM4.js +0 -1
- package/web-shell/assets/index-CGtQqOIa.css +0 -5
- package/web-shell/assets/index-TtM0hVjU.js +0 -1207
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-D1gzH2Ue.js +0 -1
|
@@ -1,40 +1,36 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
+
import {
|
|
4
|
+
serveCommand
|
|
5
|
+
} from "./chunk-GSN55ZRI.js";
|
|
6
|
+
import {
|
|
7
|
+
listCommand
|
|
8
|
+
} from "./chunk-7MVVZO4N.js";
|
|
9
|
+
import {
|
|
10
|
+
getErrorMessage as getErrorMessage2
|
|
11
|
+
} from "./chunk-IKYJHJNF.js";
|
|
3
12
|
import {
|
|
4
13
|
ObservedChannelContactStore
|
|
5
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-RHLZR4E5.js";
|
|
6
15
|
import {
|
|
7
16
|
escapeAnsiCtrlCodes
|
|
8
|
-
} from "./chunk-
|
|
17
|
+
} from "./chunk-IPUUTYMV.js";
|
|
9
18
|
import {
|
|
10
19
|
stringWidth
|
|
11
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-2MIN6GRR.js";
|
|
12
21
|
import {
|
|
13
22
|
loadUndici
|
|
14
23
|
} from "./chunk-3Z43GZUQ.js";
|
|
24
|
+
import {
|
|
25
|
+
resolvePath
|
|
26
|
+
} from "./chunk-ZD6UTE4A.js";
|
|
15
27
|
import {
|
|
16
28
|
isLoopbackBind
|
|
17
29
|
} from "./chunk-RXFQM6FQ.js";
|
|
18
|
-
import {
|
|
19
|
-
serveCommand
|
|
20
|
-
} from "./chunk-CXIOPXRR.js";
|
|
21
|
-
import {
|
|
22
|
-
listCommand
|
|
23
|
-
} from "./chunk-4MWNZNJ4.js";
|
|
24
|
-
import {
|
|
25
|
-
getErrorMessage as getErrorMessage2
|
|
26
|
-
} from "./chunk-7SSWNGEJ.js";
|
|
27
|
-
import {
|
|
28
|
-
collectProviderModelsForProtocol,
|
|
29
|
-
getAuthTypeFromEnv,
|
|
30
|
-
resolveCliGenerationConfig
|
|
31
|
-
} from "./chunk-42W5BDEY.js";
|
|
32
|
-
import {
|
|
33
|
-
resolvePath
|
|
34
|
-
} from "./chunk-QLJUC7TG.js";
|
|
35
30
|
import {
|
|
36
31
|
channelLoopPath,
|
|
37
32
|
createChannel,
|
|
33
|
+
daemonChannelLoopPath,
|
|
38
34
|
daemonObservedContactsPath,
|
|
39
35
|
daemonSessionRoutesPath,
|
|
40
36
|
loadChannelsConfig,
|
|
@@ -46,23 +42,45 @@ import {
|
|
|
46
42
|
registerToolCallDispatch,
|
|
47
43
|
selectFirstModel,
|
|
48
44
|
sessionsPath
|
|
49
|
-
} from "./chunk-
|
|
45
|
+
} from "./chunk-PSOO6YXD.js";
|
|
50
46
|
import {
|
|
51
47
|
getExtensionManager,
|
|
52
48
|
requestChoicePluginNonInteractive,
|
|
53
49
|
requestConsentNonInteractive,
|
|
54
50
|
requestConsentOrFail,
|
|
55
51
|
resolveExtensionCommandScope
|
|
56
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-PC6JANNU.js";
|
|
53
|
+
import {
|
|
54
|
+
collectProviderModelsForProtocol,
|
|
55
|
+
getAuthTypeFromEnv,
|
|
56
|
+
resolveCliGenerationConfig
|
|
57
|
+
} from "./chunk-KMQ33DO4.js";
|
|
58
|
+
import {
|
|
59
|
+
DEFAULT_BASE_URL,
|
|
60
|
+
buildHeaders,
|
|
61
|
+
clearAccount,
|
|
62
|
+
loadAccount,
|
|
63
|
+
saveAccount
|
|
64
|
+
} from "./chunk-X5XDDSSH.js";
|
|
57
65
|
import {
|
|
58
66
|
parseChannelConfig
|
|
59
|
-
} from "./chunk-
|
|
67
|
+
} from "./chunk-4WIZGAH3.js";
|
|
60
68
|
import {
|
|
61
69
|
findCliEntryPath
|
|
62
70
|
} from "./chunk-V6WHFGST.js";
|
|
71
|
+
import {
|
|
72
|
+
assembleMcpServers,
|
|
73
|
+
getPendingGatedMcpServers,
|
|
74
|
+
mcpCommand
|
|
75
|
+
} from "./chunk-JVPM2ULZ.js";
|
|
76
|
+
import {
|
|
77
|
+
canonicalizeWorkspace
|
|
78
|
+
} from "./chunk-2RFKHEXL.js";
|
|
63
79
|
import {
|
|
64
80
|
CHANNEL_DAEMON_WORKER_SENTINEL,
|
|
65
81
|
CHANNEL_WORKER_HEARTBEAT_INTERVAL_MS,
|
|
82
|
+
ChannelDeliveryError,
|
|
83
|
+
MAX_CHANNEL_DELIVERIES_IN_FLIGHT,
|
|
66
84
|
MAX_CHANNEL_STARTUP_FAILURES,
|
|
67
85
|
MAX_CHANNEL_STARTUP_FAILURE_CHANNEL_LENGTH,
|
|
68
86
|
MAX_CHANNEL_STARTUP_FAILURE_CODE_LENGTH,
|
|
@@ -71,31 +89,19 @@ import {
|
|
|
71
89
|
QWEN_DAEMON_URL_ENV,
|
|
72
90
|
QWEN_DAEMON_WORKSPACE_ENV,
|
|
73
91
|
QWEN_SERVER_TOKEN_ENV,
|
|
92
|
+
isChannelDeliveryError,
|
|
93
|
+
isChannelDeliveryMessage,
|
|
74
94
|
isChannelStartupReportAckMessage,
|
|
75
95
|
isChannelWebhookTaskMessage,
|
|
76
96
|
normalizeWorkerDiagnostic,
|
|
77
97
|
sanitizeWorkerDiagnostic
|
|
78
|
-
} from "./chunk-
|
|
98
|
+
} from "./chunk-LK7CHLVP.js";
|
|
79
99
|
import {
|
|
80
100
|
normalizeServeChannelSelection
|
|
81
|
-
} from "./chunk-
|
|
101
|
+
} from "./chunk-JLU636DO.js";
|
|
82
102
|
import {
|
|
83
103
|
redactLogCredentials
|
|
84
104
|
} from "./chunk-M5GB774H.js";
|
|
85
|
-
import {
|
|
86
|
-
readServiceInfo,
|
|
87
|
-
removeServiceInfo,
|
|
88
|
-
signalService,
|
|
89
|
-
waitForExit,
|
|
90
|
-
writeServiceInfo
|
|
91
|
-
} from "./chunk-RV4C2ZFG.js";
|
|
92
|
-
import {
|
|
93
|
-
DEFAULT_BASE_URL,
|
|
94
|
-
buildHeaders,
|
|
95
|
-
clearAccount,
|
|
96
|
-
loadAccount,
|
|
97
|
-
saveAccount
|
|
98
|
-
} from "./chunk-2LI23QA6.js";
|
|
99
105
|
import {
|
|
100
106
|
AcpBridge,
|
|
101
107
|
ChannelLoopScheduler,
|
|
@@ -103,43 +109,39 @@ import {
|
|
|
103
109
|
DaemonChannelBridge,
|
|
104
110
|
PairingStore,
|
|
105
111
|
SessionRouter,
|
|
112
|
+
isChannelProactiveDeliveryError,
|
|
106
113
|
sanitizeLogText,
|
|
107
114
|
sanitizePromptText
|
|
108
|
-
} from "./chunk-
|
|
115
|
+
} from "./chunk-RWTEFFPU.js";
|
|
109
116
|
import {
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
117
|
+
readServiceInfo,
|
|
118
|
+
removeServiceInfo,
|
|
119
|
+
signalService,
|
|
120
|
+
waitForExit,
|
|
121
|
+
writeServiceInfo
|
|
122
|
+
} from "./chunk-BIQWWWJN.js";
|
|
114
123
|
import {
|
|
115
124
|
loadSettings
|
|
116
|
-
} from "./chunk-
|
|
125
|
+
} from "./chunk-TEHGS6UP.js";
|
|
117
126
|
import {
|
|
118
127
|
detectSystemLanguage,
|
|
119
128
|
getCurrentLanguage,
|
|
120
129
|
initializeI18n,
|
|
121
130
|
resolveLanguageSetting,
|
|
122
131
|
t
|
|
123
|
-
} from "./chunk-
|
|
132
|
+
} from "./chunk-LKEJ26GS.js";
|
|
124
133
|
import {
|
|
125
134
|
loadEnvironment
|
|
126
|
-
} from "./chunk-
|
|
127
|
-
import {
|
|
128
|
-
canonicalizeWorkspace
|
|
129
|
-
} from "./chunk-2RFKHEXL.js";
|
|
130
|
-
import {
|
|
131
|
-
hideBin,
|
|
132
|
-
yargs_default
|
|
133
|
-
} from "./chunk-XFSFZCM5.js";
|
|
135
|
+
} from "./chunk-LH2BYDQ5.js";
|
|
134
136
|
import {
|
|
135
137
|
getCliVersion
|
|
136
|
-
} from "./chunk-
|
|
138
|
+
} from "./chunk-YX324OPW.js";
|
|
137
139
|
import {
|
|
138
140
|
getPackageJson
|
|
139
141
|
} from "./chunk-VJNBRRZG.js";
|
|
140
142
|
import {
|
|
141
143
|
isWorkspaceTrusted
|
|
142
|
-
} from "./chunk-
|
|
144
|
+
} from "./chunk-Z2BC6UJ5.js";
|
|
143
145
|
import {
|
|
144
146
|
require_strip_json_comments
|
|
145
147
|
} from "./chunk-ALGGS7UH.js";
|
|
@@ -147,6 +149,10 @@ import {
|
|
|
147
149
|
writeStderrLine,
|
|
148
150
|
writeStdoutLine
|
|
149
151
|
} from "./chunk-OWAK7LMW.js";
|
|
152
|
+
import {
|
|
153
|
+
hideBin,
|
|
154
|
+
yargs_default
|
|
155
|
+
} from "./chunk-XFSFZCM5.js";
|
|
150
156
|
import {
|
|
151
157
|
Config,
|
|
152
158
|
DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD,
|
|
@@ -180,27 +186,32 @@ import {
|
|
|
180
186
|
unquoteCStylePath,
|
|
181
187
|
updateChannelMemoryEntry,
|
|
182
188
|
updateSetting
|
|
183
|
-
} from "./chunk-
|
|
189
|
+
} from "./chunk-PHOF65IG.js";
|
|
184
190
|
import {
|
|
185
191
|
nextFireTime,
|
|
186
192
|
parseCron
|
|
187
|
-
} from "./chunk-
|
|
193
|
+
} from "./chunk-IRH27ZC2.js";
|
|
194
|
+
import {
|
|
195
|
+
parseBooleanEnvFlag,
|
|
196
|
+
resolveTelemetrySettings
|
|
197
|
+
} from "./chunk-NIBLUX3Y.js";
|
|
188
198
|
import {
|
|
189
|
-
DEFAULT_QWEN_EMBEDDING_MODEL,
|
|
190
199
|
getAllGeminiMdFilenames,
|
|
191
|
-
resolveTelemetrySettings,
|
|
192
200
|
setGeminiMdFilename
|
|
193
|
-
} from "./chunk-
|
|
201
|
+
} from "./chunk-CIKQ7KKO.js";
|
|
202
|
+
import {
|
|
203
|
+
DEFAULT_QWEN_EMBEDDING_MODEL
|
|
204
|
+
} from "./chunk-IKCX4CCL.js";
|
|
194
205
|
import {
|
|
195
206
|
isTlsVerificationDisabled
|
|
196
|
-
} from "./chunk-
|
|
207
|
+
} from "./chunk-2JZBVYTU.js";
|
|
197
208
|
import {
|
|
198
209
|
recordChannelMemoryRecallMetrics
|
|
199
|
-
} from "./chunk-
|
|
210
|
+
} from "./chunk-MB4MZHMJ.js";
|
|
200
211
|
import {
|
|
201
212
|
SchemaValidator,
|
|
202
213
|
ToolNames
|
|
203
|
-
} from "./chunk-
|
|
214
|
+
} from "./chunk-PR75REBZ.js";
|
|
204
215
|
import {
|
|
205
216
|
FatalConfigError,
|
|
206
217
|
FatalSandboxError,
|
|
@@ -208,7 +219,7 @@ import {
|
|
|
208
219
|
createDebugLogger,
|
|
209
220
|
getErrorMessage,
|
|
210
221
|
isNodeError
|
|
211
|
-
} from "./chunk-
|
|
222
|
+
} from "./chunk-NL7LTRLR.js";
|
|
212
223
|
import {
|
|
213
224
|
init_esbuild_shims
|
|
214
225
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -2131,6 +2142,28 @@ var BridgeChannelMemoryIntentClassifier = class {
|
|
|
2131
2142
|
}
|
|
2132
2143
|
};
|
|
2133
2144
|
|
|
2145
|
+
// packages/cli/src/commands/channel/loop-runtime.ts
|
|
2146
|
+
init_esbuild_shims();
|
|
2147
|
+
function createChannelLoopController(store) {
|
|
2148
|
+
return {
|
|
2149
|
+
create: /* @__PURE__ */ __name((input) => store.create(input), "create"),
|
|
2150
|
+
createForTarget: /* @__PURE__ */ __name((input, maxEnabledLoops) => store.createForTarget(input, maxEnabledLoops), "createForTarget"),
|
|
2151
|
+
listForTarget: /* @__PURE__ */ __name((channelName, target) => store.listForTarget(channelName, target), "listForTarget"),
|
|
2152
|
+
disable: /* @__PURE__ */ __name((id) => store.disable(id), "disable"),
|
|
2153
|
+
validateCron: /* @__PURE__ */ __name((cron) => {
|
|
2154
|
+
parseCron(cron);
|
|
2155
|
+
nextFireTime(cron, /* @__PURE__ */ new Date());
|
|
2156
|
+
}, "validateCron"),
|
|
2157
|
+
nextFireTime: /* @__PURE__ */ __name((job) => nextFireTime(job.cron, new Date(job.lastFiredAt ?? job.createdAt)), "nextFireTime")
|
|
2158
|
+
};
|
|
2159
|
+
}
|
|
2160
|
+
__name(createChannelLoopController, "createChannelLoopController");
|
|
2161
|
+
function isChannelCronEnabled(settings) {
|
|
2162
|
+
if (process.env["QWEN_CODE_DISABLE_CRON"] === "1") return false;
|
|
2163
|
+
return settings.merged.experimental?.cron !== false;
|
|
2164
|
+
}
|
|
2165
|
+
__name(isChannelCronEnabled, "isChannelCronEnabled");
|
|
2166
|
+
|
|
2134
2167
|
// packages/cli/src/commands/channel/start.ts
|
|
2135
2168
|
var MAX_CRASH_RESTARTS = 3;
|
|
2136
2169
|
var CRASH_WINDOW_MS = 5 * 60 * 1e3;
|
|
@@ -2158,25 +2191,6 @@ function channelMemoryOptions(getBridge, cwd) {
|
|
|
2158
2191
|
};
|
|
2159
2192
|
}
|
|
2160
2193
|
__name(channelMemoryOptions, "channelMemoryOptions");
|
|
2161
|
-
function createLoopController(store) {
|
|
2162
|
-
return {
|
|
2163
|
-
create: /* @__PURE__ */ __name((input) => store.create(input), "create"),
|
|
2164
|
-
createForTarget: /* @__PURE__ */ __name((input, maxEnabledLoops) => store.createForTarget(input, maxEnabledLoops), "createForTarget"),
|
|
2165
|
-
listForTarget: /* @__PURE__ */ __name((channelName, target) => store.listForTarget(channelName, target), "listForTarget"),
|
|
2166
|
-
disable: /* @__PURE__ */ __name((id) => store.disable(id), "disable"),
|
|
2167
|
-
validateCron: /* @__PURE__ */ __name((cron) => {
|
|
2168
|
-
parseCron(cron);
|
|
2169
|
-
nextFireTime(cron, /* @__PURE__ */ new Date());
|
|
2170
|
-
}, "validateCron"),
|
|
2171
|
-
nextFireTime: /* @__PURE__ */ __name((job) => nextFireTime(job.cron, new Date(job.lastFiredAt ?? job.createdAt)), "nextFireTime")
|
|
2172
|
-
};
|
|
2173
|
-
}
|
|
2174
|
-
__name(createLoopController, "createLoopController");
|
|
2175
|
-
function isChannelCronEnabled(settings) {
|
|
2176
|
-
if (process.env["QWEN_CODE_DISABLE_CRON"] === "1") return false;
|
|
2177
|
-
return settings.merged.experimental?.cron !== false;
|
|
2178
|
-
}
|
|
2179
|
-
__name(isChannelCronEnabled, "isChannelCronEnabled");
|
|
2180
2194
|
function writeServiceInfoOrExit(channels, cleanup) {
|
|
2181
2195
|
try {
|
|
2182
2196
|
writeServiceInfo(channels);
|
|
@@ -2264,7 +2278,7 @@ async function startSingle(name, proxy, cronEnabled) {
|
|
|
2264
2278
|
sessionsPath()
|
|
2265
2279
|
);
|
|
2266
2280
|
const loopStore = cronEnabled ? new ChannelLoopStore({ filePath: channelLoopPath() }) : void 0;
|
|
2267
|
-
const loopController = loopStore ?
|
|
2281
|
+
const loopController = loopStore ? createChannelLoopController(loopStore) : void 0;
|
|
2268
2282
|
const channels = /* @__PURE__ */ new Map();
|
|
2269
2283
|
const channel = await createChannel(name, config, bridge, {
|
|
2270
2284
|
router,
|
|
@@ -2398,7 +2412,7 @@ async function startAll(proxy, cronEnabled) {
|
|
|
2398
2412
|
await bridge.start();
|
|
2399
2413
|
const router = new SessionRouter(bridge, defaultCwd, "user", sessionsPath());
|
|
2400
2414
|
const loopStore = cronEnabled ? new ChannelLoopStore({ filePath: channelLoopPath() }) : void 0;
|
|
2401
|
-
const loopController = loopStore ?
|
|
2415
|
+
const loopController = loopStore ? createChannelLoopController(loopStore) : void 0;
|
|
2402
2416
|
for (const { name, config } of parsed) {
|
|
2403
2417
|
router.setChannelScope(name, config.sessionScope);
|
|
2404
2418
|
}
|
|
@@ -2593,7 +2607,7 @@ var stopCommand = {
|
|
|
2593
2607
|
if (argv["daemon-url"]) {
|
|
2594
2608
|
const token = argv.token ?? process.env[QWEN_SERVER_TOKEN_ENV] ?? process.env[QWEN_DAEMON_TOKEN_ENV];
|
|
2595
2609
|
try {
|
|
2596
|
-
const sdk = await import("./daemon-
|
|
2610
|
+
const sdk = await import("./daemon-YO6433NF.js");
|
|
2597
2611
|
const client = new sdk.DaemonClient({
|
|
2598
2612
|
baseUrl: argv["daemon-url"],
|
|
2599
2613
|
...token ? { token } : {}
|
|
@@ -2779,7 +2793,7 @@ var statusCommand = {
|
|
|
2779
2793
|
if (argv["daemon-url"]) {
|
|
2780
2794
|
const token = argv.token ?? process.env[QWEN_SERVER_TOKEN_ENV] ?? process.env[QWEN_DAEMON_TOKEN_ENV];
|
|
2781
2795
|
try {
|
|
2782
|
-
const sdk = await import("./daemon-
|
|
2796
|
+
const sdk = await import("./daemon-YO6433NF.js");
|
|
2783
2797
|
const client = new sdk.DaemonClient({
|
|
2784
2798
|
baseUrl: argv["daemon-url"],
|
|
2785
2799
|
...token ? { token } : {}
|
|
@@ -2890,7 +2904,7 @@ var reloadCommand = {
|
|
|
2890
2904
|
const token = resolveToken(argv.token);
|
|
2891
2905
|
let sdk;
|
|
2892
2906
|
try {
|
|
2893
|
-
sdk = await import("./daemon-
|
|
2907
|
+
sdk = await import("./daemon-YO6433NF.js");
|
|
2894
2908
|
} catch (err) {
|
|
2895
2909
|
writeStderrLine(
|
|
2896
2910
|
`[Channel] Failed to load daemon SDK: ${safeChannelCommandErrorMessage(err)}`
|
|
@@ -2970,7 +2984,7 @@ var setCommand2 = {
|
|
|
2970
2984
|
const selection = names[0] === "all" ? { mode: "all" } : { mode: "names", names };
|
|
2971
2985
|
let sdk;
|
|
2972
2986
|
try {
|
|
2973
|
-
sdk = await import("./daemon-
|
|
2987
|
+
sdk = await import("./daemon-YO6433NF.js");
|
|
2974
2988
|
} catch (error) {
|
|
2975
2989
|
writeStderrLine(
|
|
2976
2990
|
`[Channel] Failed to load daemon SDK: ${safeChannelCommandErrorMessage(error)}`
|
|
@@ -3021,7 +3035,7 @@ var setCommand2 = {
|
|
|
3021
3035
|
init_esbuild_shims();
|
|
3022
3036
|
var SESSION_SHELL_COMMAND_FEATURE = "session_shell_command";
|
|
3023
3037
|
var MAX_ACTIVE_WEBHOOK_TASKS = 16;
|
|
3024
|
-
var
|
|
3038
|
+
var WORKER_SHUTDOWN_DRAIN_MS = 1e4;
|
|
3025
3039
|
function createDaemonSessionFactory({
|
|
3026
3040
|
client,
|
|
3027
3041
|
DaemonSessionClient,
|
|
@@ -3093,7 +3107,7 @@ function createDaemonChannelBridgeFacade(bridge, opts) {
|
|
|
3093
3107
|
}
|
|
3094
3108
|
__name(createDaemonChannelBridgeFacade, "createDaemonChannelBridgeFacade");
|
|
3095
3109
|
async function loadDaemonSdk() {
|
|
3096
|
-
return await import("./daemon-
|
|
3110
|
+
return await import("./daemon-YO6433NF.js");
|
|
3097
3111
|
}
|
|
3098
3112
|
__name(loadDaemonSdk, "loadDaemonSdk");
|
|
3099
3113
|
function selectedChannelNames(channelsConfig, selection) {
|
|
@@ -3255,6 +3269,10 @@ async function runChannelDaemonWorker(opts) {
|
|
|
3255
3269
|
const observedContacts = new ObservedChannelContactStore(
|
|
3256
3270
|
daemonObservedContactsPath(daemonWorkspace)
|
|
3257
3271
|
);
|
|
3272
|
+
const loopStore = isChannelCronEnabled(settings) ? new ChannelLoopStore({
|
|
3273
|
+
filePath: daemonChannelLoopPath(daemonWorkspace)
|
|
3274
|
+
}) : void 0;
|
|
3275
|
+
const loopController = loopStore ? createChannelLoopController(loopStore) : void 0;
|
|
3258
3276
|
const bridge = new DaemonChannelBridge({
|
|
3259
3277
|
cwd: daemonWorkspace,
|
|
3260
3278
|
sessionFactory: createDaemonSessionFactory({
|
|
@@ -3266,6 +3284,7 @@ async function runChannelDaemonWorker(opts) {
|
|
|
3266
3284
|
});
|
|
3267
3285
|
const channels = /* @__PURE__ */ new Map();
|
|
3268
3286
|
const connected = [];
|
|
3287
|
+
let scheduler;
|
|
3269
3288
|
let connectFailureCount = 0;
|
|
3270
3289
|
const diagnosticRedaction = {
|
|
3271
3290
|
...opts.daemonToken ? { daemonToken: opts.daemonToken } : {},
|
|
@@ -3331,7 +3350,8 @@ async function runChannelDaemonWorker(opts) {
|
|
|
3331
3350
|
observe: /* @__PURE__ */ __name((channelName, observation) => {
|
|
3332
3351
|
observedContacts.observe(channelName, observation);
|
|
3333
3352
|
}, "observe")
|
|
3334
|
-
}
|
|
3353
|
+
},
|
|
3354
|
+
...loopController ? { loopController } : {}
|
|
3335
3355
|
}),
|
|
3336
3356
|
startupSignal
|
|
3337
3357
|
)
|
|
@@ -3404,6 +3424,38 @@ async function runChannelDaemonWorker(opts) {
|
|
|
3404
3424
|
if (connected.length === 0) {
|
|
3405
3425
|
throw new Error("No channels connected.");
|
|
3406
3426
|
}
|
|
3427
|
+
if (loopStore) {
|
|
3428
|
+
const schedulerChannels = /* @__PURE__ */ new Map();
|
|
3429
|
+
for (const name of connected) {
|
|
3430
|
+
const channel = channels.get(name);
|
|
3431
|
+
schedulerChannels.set(name, {
|
|
3432
|
+
runLoopPrompt: /* @__PURE__ */ __name(async (job, options) => {
|
|
3433
|
+
let jobWorkspace;
|
|
3434
|
+
try {
|
|
3435
|
+
jobWorkspace = canonicalizeWorkspace(job.cwd);
|
|
3436
|
+
} catch {
|
|
3437
|
+
jobWorkspace = void 0;
|
|
3438
|
+
}
|
|
3439
|
+
if (jobWorkspace !== daemonWorkspace) {
|
|
3440
|
+
await loopStore.disable(job.id).catch(() => false);
|
|
3441
|
+
writeStderrLine(
|
|
3442
|
+
`[Channel] Disabled loop "${sanitizeLogText(job.id, 128)}": its workspace does not match this daemon worker.`
|
|
3443
|
+
);
|
|
3444
|
+
throw new Error(
|
|
3445
|
+
`Loop ${sanitizeLogText(job.id, 128)} is outside daemon workspace and was disabled.`
|
|
3446
|
+
);
|
|
3447
|
+
}
|
|
3448
|
+
return channel.runLoopPrompt(job, options);
|
|
3449
|
+
}, "runLoopPrompt")
|
|
3450
|
+
});
|
|
3451
|
+
}
|
|
3452
|
+
scheduler = new ChannelLoopScheduler({
|
|
3453
|
+
store: loopStore,
|
|
3454
|
+
channels: schedulerChannels,
|
|
3455
|
+
nextFireTime
|
|
3456
|
+
});
|
|
3457
|
+
scheduler.start();
|
|
3458
|
+
}
|
|
3407
3459
|
opts.sendReady?.({
|
|
3408
3460
|
channels: connected,
|
|
3409
3461
|
requestedChannels: parsed.map((p) => p.name),
|
|
@@ -3411,6 +3463,19 @@ async function runChannelDaemonWorker(opts) {
|
|
|
3411
3463
|
});
|
|
3412
3464
|
return {
|
|
3413
3465
|
channels: connected,
|
|
3466
|
+
async deliverChannelMessage(request) {
|
|
3467
|
+
const channel = channels.get(request.channelName);
|
|
3468
|
+
if (!channel || !connected.includes(request.channelName)) {
|
|
3469
|
+
throw new ChannelDeliveryError(
|
|
3470
|
+
"channel_worker_unavailable",
|
|
3471
|
+
`Channel "${request.channelName}" is not running.`
|
|
3472
|
+
);
|
|
3473
|
+
}
|
|
3474
|
+
await channel.deliverProactive(
|
|
3475
|
+
{ channelName: request.channelName, ...request.target },
|
|
3476
|
+
request.text
|
|
3477
|
+
);
|
|
3478
|
+
},
|
|
3414
3479
|
validateWebhookTask(task) {
|
|
3415
3480
|
const channel = channels.get(task.channelName);
|
|
3416
3481
|
if (!channel || !connected.includes(task.channelName)) {
|
|
@@ -3430,6 +3495,7 @@ async function runChannelDaemonWorker(opts) {
|
|
|
3430
3495
|
}
|
|
3431
3496
|
},
|
|
3432
3497
|
async close() {
|
|
3498
|
+
scheduler?.stop();
|
|
3433
3499
|
disconnectAll();
|
|
3434
3500
|
try {
|
|
3435
3501
|
bridge.stop();
|
|
@@ -3439,6 +3505,7 @@ async function runChannelDaemonWorker(opts) {
|
|
|
3439
3505
|
}
|
|
3440
3506
|
};
|
|
3441
3507
|
} catch (err) {
|
|
3508
|
+
scheduler?.stop();
|
|
3442
3509
|
disconnectAll();
|
|
3443
3510
|
try {
|
|
3444
3511
|
bridge.stop();
|
|
@@ -3600,8 +3667,58 @@ var daemonWorkerCommand = {
|
|
|
3600
3667
|
} catch {
|
|
3601
3668
|
}
|
|
3602
3669
|
}, "sendWebhookTaskResult");
|
|
3670
|
+
const sendChannelDeliveryResult = /* @__PURE__ */ __name((id, result) => {
|
|
3671
|
+
try {
|
|
3672
|
+
process.send?.({
|
|
3673
|
+
type: "channel_delivery_result",
|
|
3674
|
+
id,
|
|
3675
|
+
...result
|
|
3676
|
+
});
|
|
3677
|
+
} catch {
|
|
3678
|
+
}
|
|
3679
|
+
}, "sendChannelDeliveryResult");
|
|
3603
3680
|
const activeWebhookTasks = /* @__PURE__ */ new Map();
|
|
3681
|
+
const activeChannelDeliveries = /* @__PURE__ */ new Map();
|
|
3604
3682
|
const onMessage = /* @__PURE__ */ __name((message) => {
|
|
3683
|
+
if (isChannelDeliveryMessage(message)) {
|
|
3684
|
+
if (message.expiresAt <= Date.now()) {
|
|
3685
|
+
sendChannelDeliveryResult(message.id, {
|
|
3686
|
+
ok: false,
|
|
3687
|
+
code: "channel_delivery_timeout",
|
|
3688
|
+
error: "Channel delivery IPC timed out."
|
|
3689
|
+
});
|
|
3690
|
+
return;
|
|
3691
|
+
}
|
|
3692
|
+
if (activeChannelDeliveries.size >= MAX_CHANNEL_DELIVERIES_IN_FLIGHT) {
|
|
3693
|
+
sendChannelDeliveryResult(message.id, {
|
|
3694
|
+
ok: false,
|
|
3695
|
+
code: "channel_delivery_queue_full",
|
|
3696
|
+
error: "Channel delivery queue is full."
|
|
3697
|
+
});
|
|
3698
|
+
return;
|
|
3699
|
+
}
|
|
3700
|
+
const deliveryId = message.id;
|
|
3701
|
+
const delivery = handle.deliverChannelMessage(message.request).then(() => {
|
|
3702
|
+
sendChannelDeliveryResult(deliveryId, { ok: true });
|
|
3703
|
+
}).catch((error) => {
|
|
3704
|
+
sendChannelDeliveryResult(deliveryId, {
|
|
3705
|
+
ok: false,
|
|
3706
|
+
code: classifyChannelDeliveryError(error),
|
|
3707
|
+
error: sanitizeWorkerDiagnostic(
|
|
3708
|
+
error instanceof Error ? error.message : String(error),
|
|
3709
|
+
512,
|
|
3710
|
+
{
|
|
3711
|
+
...daemonToken ? { daemonToken } : {},
|
|
3712
|
+
workerEnv: process.env
|
|
3713
|
+
}
|
|
3714
|
+
)
|
|
3715
|
+
});
|
|
3716
|
+
}).finally(() => {
|
|
3717
|
+
activeChannelDeliveries.delete(deliveryId);
|
|
3718
|
+
});
|
|
3719
|
+
activeChannelDeliveries.set(deliveryId, delivery);
|
|
3720
|
+
return;
|
|
3721
|
+
}
|
|
3605
3722
|
if (!isChannelWebhookTaskMessage(message)) return;
|
|
3606
3723
|
if (message.expiresAt <= Date.now()) {
|
|
3607
3724
|
sendWebhookTaskResult(message.id, {
|
|
@@ -3683,17 +3800,26 @@ var daemonWorkerCommand = {
|
|
|
3683
3800
|
clearHeartbeat();
|
|
3684
3801
|
process.removeListener("message", onMessage);
|
|
3685
3802
|
try {
|
|
3686
|
-
|
|
3803
|
+
const deliveryCount = activeChannelDeliveries.size;
|
|
3804
|
+
const webhookCount = activeWebhookTasks.size;
|
|
3805
|
+
if (deliveryCount > 0) {
|
|
3687
3806
|
writeStderrLine(
|
|
3688
|
-
`[Channel] shutdown: draining ${
|
|
3807
|
+
`[Channel] shutdown: draining ${deliveryCount} channel delivery task(s)...`
|
|
3689
3808
|
);
|
|
3809
|
+
}
|
|
3810
|
+
if (webhookCount > 0) {
|
|
3811
|
+
writeStderrLine(
|
|
3812
|
+
`[Channel] shutdown: draining ${webhookCount} webhook task(s)...`
|
|
3813
|
+
);
|
|
3814
|
+
}
|
|
3815
|
+
if (deliveryCount > 0 || webhookCount > 0) {
|
|
3690
3816
|
await Promise.race([
|
|
3691
|
-
Promise.allSettled(
|
|
3817
|
+
Promise.allSettled([
|
|
3818
|
+
...activeChannelDeliveries.values(),
|
|
3819
|
+
...activeWebhookTasks.values()
|
|
3820
|
+
]),
|
|
3692
3821
|
new Promise((resolve13) => {
|
|
3693
|
-
const timer = setTimeout(
|
|
3694
|
-
resolve13,
|
|
3695
|
-
WEBHOOK_TASK_SHUTDOWN_DRAIN_MS
|
|
3696
|
-
);
|
|
3822
|
+
const timer = setTimeout(resolve13, WORKER_SHUTDOWN_DRAIN_MS);
|
|
3697
3823
|
timer.unref();
|
|
3698
3824
|
})
|
|
3699
3825
|
]);
|
|
@@ -3756,6 +3882,16 @@ function classifyWebhookTaskValidationError(error) {
|
|
|
3756
3882
|
return "channel_webhook_enqueue_failed";
|
|
3757
3883
|
}
|
|
3758
3884
|
__name(classifyWebhookTaskValidationError, "classifyWebhookTaskValidationError");
|
|
3885
|
+
function classifyChannelDeliveryError(error) {
|
|
3886
|
+
if (isChannelDeliveryError(error)) {
|
|
3887
|
+
return error.code;
|
|
3888
|
+
}
|
|
3889
|
+
if (isChannelProactiveDeliveryError(error) && error.disposition === "permanent") {
|
|
3890
|
+
return "channel_delivery_rejected";
|
|
3891
|
+
}
|
|
3892
|
+
return "channel_delivery_failed";
|
|
3893
|
+
}
|
|
3894
|
+
__name(classifyChannelDeliveryError, "classifyChannelDeliveryError");
|
|
3759
3895
|
|
|
3760
3896
|
// packages/cli/src/commands/channel/pairing.ts
|
|
3761
3897
|
init_esbuild_shims();
|
|
@@ -4637,6 +4773,8 @@ init_esbuild_shims();
|
|
|
4637
4773
|
var BRIEFS = {
|
|
4638
4774
|
"0": {
|
|
4639
4775
|
label: "Agent 0: Issue fidelity & root-cause ownership",
|
|
4776
|
+
publicLabel: "the linked-issue fidelity pass",
|
|
4777
|
+
publicLabelZh: "\u5173\u8054 issue \u4E00\u81F4\u6027\u68C0\u67E5",
|
|
4640
4778
|
readsDiff: true,
|
|
4641
4779
|
brief: `You are **Agent 0: Issue Fidelity & Root-Cause Ownership**. Your scope is issue fidelity, not general code review \u2014 do not report ordinary code defects; other agents own those.
|
|
4642
4780
|
|
|
@@ -4658,6 +4796,8 @@ If \`gh\` fails (auth, rate limit, network), **retry that fetch once**. If it fa
|
|
|
4658
4796
|
"1a": {
|
|
4659
4797
|
reviewsCode: true,
|
|
4660
4798
|
label: "Agent 1a: Line-by-line correctness",
|
|
4799
|
+
publicLabel: "the line-by-line correctness pass",
|
|
4800
|
+
publicLabelZh: "\u9010\u884C\u6B63\u786E\u6027\u68C0\u67E5",
|
|
4661
4801
|
readsDiff: true,
|
|
4662
4802
|
brief: `You are **Agent 1a: the line-by-line scan**. Your dimension is defined by *how you walk*, not by a topic \u2014 a topical "find correctness bugs" brief makes every agent converge on the same visibly-suspicious hunks, which is redundancy, not coverage.
|
|
4663
4803
|
|
|
@@ -4674,6 +4814,8 @@ Scope guard: reading the enclosing function is for **context**. A defect entirel
|
|
|
4674
4814
|
"1b": {
|
|
4675
4815
|
reviewsCode: true,
|
|
4676
4816
|
label: "Agent 1b: Removed-behavior audit",
|
|
4817
|
+
publicLabel: "the removed-behavior audit",
|
|
4818
|
+
publicLabelZh: "\u5220\u9664\u884C\u4E3A\u5BA1\u8BA1",
|
|
4677
4819
|
readsDiff: true,
|
|
4678
4820
|
brief: `You are **Agent 1b: the removed-behavior audit**. You own the diff's **deleted side**, and you are the only agent who can see it: the \`-\` lines exist *only* in the diff. The post-change tree carries no trace of what was removed \u2014 the line is simply not there, and nothing marks where it was \u2014 so no agent reading the new code alone can find this class of defect.
|
|
4679
4821
|
|
|
@@ -4690,6 +4832,8 @@ Each failure scenario must name what input or state now slips past the removed b
|
|
|
4690
4832
|
"1c": {
|
|
4691
4833
|
reviewsCode: true,
|
|
4692
4834
|
label: "Agent 1c: Cross-file tracer",
|
|
4835
|
+
publicLabel: "the cross-file consistency pass",
|
|
4836
|
+
publicLabelZh: "\u8DE8\u6587\u4EF6\u4E00\u81F4\u6027\u68C0\u67E5",
|
|
4693
4837
|
readsDiff: true,
|
|
4694
4838
|
brief: `You are **Agent 1c: the cross-file tracer**. You own the *whole* cross-file walk, end to end. It used to be a duty shared by six agents, and a duty shared by six agents is a duty nobody finishes while the same symbols get grepped six times.
|
|
4695
4839
|
|
|
@@ -4715,6 +4859,8 @@ Expect the three ends to be far apart. The declaration, the pass-through, and th
|
|
|
4715
4859
|
"2": {
|
|
4716
4860
|
reviewsCode: true,
|
|
4717
4861
|
label: "Agent 2: Security",
|
|
4862
|
+
publicLabel: "the security pass",
|
|
4863
|
+
publicLabelZh: "\u5B89\u5168\u68C0\u67E5",
|
|
4718
4864
|
readsDiff: true,
|
|
4719
4865
|
brief: `You are **Agent 2: Security**. Review the diff for:
|
|
4720
4866
|
|
|
@@ -4730,6 +4876,8 @@ Expect the three ends to be far apart. The declaration, the pass-through, and th
|
|
|
4730
4876
|
"3": {
|
|
4731
4877
|
reviewsCode: true,
|
|
4732
4878
|
label: "Agent 3: Code quality",
|
|
4879
|
+
publicLabel: "the code-quality pass",
|
|
4880
|
+
publicLabelZh: "\u4EE3\u7801\u8D28\u91CF\u68C0\u67E5",
|
|
4733
4881
|
readsDiff: true,
|
|
4734
4882
|
brief: `You are **Agent 3: Code Quality**. Review the diff for:
|
|
4735
4883
|
|
|
@@ -4742,6 +4890,8 @@ Expect the three ends to be far apart. The declaration, the pass-through, and th
|
|
|
4742
4890
|
"4": {
|
|
4743
4891
|
reviewsCode: true,
|
|
4744
4892
|
label: "Agent 4: Performance & efficiency",
|
|
4893
|
+
publicLabel: "the performance pass",
|
|
4894
|
+
publicLabelZh: "\u6027\u80FD\u68C0\u67E5",
|
|
4745
4895
|
readsDiff: true,
|
|
4746
4896
|
brief: `You are **Agent 4: Performance & Efficiency**. Review the diff for:
|
|
4747
4897
|
|
|
@@ -4755,6 +4905,8 @@ Expect the three ends to be far apart. The declaration, the pass-through, and th
|
|
|
4755
4905
|
"5": {
|
|
4756
4906
|
reviewsCode: true,
|
|
4757
4907
|
label: "Agent 5: Test coverage",
|
|
4908
|
+
publicLabel: "the test-coverage pass",
|
|
4909
|
+
publicLabelZh: "\u6D4B\u8BD5\u8986\u76D6\u68C0\u67E5",
|
|
4758
4910
|
readsDiff: true,
|
|
4759
4911
|
brief: `You are **Agent 5: Test Coverage**. Review the diff for:
|
|
4760
4912
|
|
|
@@ -4770,6 +4922,8 @@ Expect the three ends to be far apart. The declaration, the pass-through, and th
|
|
|
4770
4922
|
"6a": {
|
|
4771
4923
|
reviewsCode: true,
|
|
4772
4924
|
label: "Agent 6a: Undirected audit \u2014 attacker mindset",
|
|
4925
|
+
publicLabel: "the open-ended audit (attacker mindset)",
|
|
4926
|
+
publicLabelZh: "\u5F00\u653E\u5F0F\u5BA1\u8BA1\uFF08\u653B\u51FB\u8005\u89C6\u89D2\uFF09",
|
|
4773
4927
|
readsDiff: true,
|
|
4774
4928
|
brief: `You are **Agent 6a: the undirected audit, attacker mindset.**
|
|
4775
4929
|
|
|
@@ -4788,6 +4942,8 @@ You are undirected on purpose. Do not restrict yourself to the list.`
|
|
|
4788
4942
|
"6b": {
|
|
4789
4943
|
reviewsCode: true,
|
|
4790
4944
|
label: "Agent 6b: Undirected audit \u2014 3 AM oncall mindset",
|
|
4945
|
+
publicLabel: "the open-ended audit (oncall mindset)",
|
|
4946
|
+
publicLabelZh: "\u5F00\u653E\u5F0F\u5BA1\u8BA1\uFF08\u503C\u73ED\u6392\u969C\u89C6\u89D2\uFF09",
|
|
4791
4947
|
readsDiff: true,
|
|
4792
4948
|
brief: `You are **Agent 6b: the undirected audit, 3 AM oncall mindset.**
|
|
4793
4949
|
|
|
@@ -4806,6 +4962,8 @@ You are undirected on purpose. Do not restrict yourself to the list.`
|
|
|
4806
4962
|
"6c": {
|
|
4807
4963
|
reviewsCode: true,
|
|
4808
4964
|
label: "Agent 6c: Undirected audit \u2014 six-months-later maintainer",
|
|
4965
|
+
publicLabel: "the open-ended audit (maintainer mindset)",
|
|
4966
|
+
publicLabelZh: "\u5F00\u653E\u5F0F\u5BA1\u8BA1\uFF08\u540E\u7EED\u7EF4\u62A4\u8005\u89C6\u89D2\uFF09",
|
|
4809
4967
|
readsDiff: true,
|
|
4810
4968
|
brief: `You are **Agent 6c: the undirected audit, six-months-later maintainer mindset.**
|
|
4811
4969
|
|
|
@@ -4823,6 +4981,8 @@ You are undirected on purpose. Do not restrict yourself to the list.`
|
|
|
4823
4981
|
},
|
|
4824
4982
|
"7": {
|
|
4825
4983
|
label: "Agent 7: Build & test verification",
|
|
4984
|
+
publicLabel: "the build-and-test check",
|
|
4985
|
+
publicLabelZh: "\u6784\u5EFA\u4E0E\u6D4B\u8BD5\u9A8C\u8BC1",
|
|
4826
4986
|
readsDiff: false,
|
|
4827
4987
|
brief: `You are **Agent 7: Build & Test Verification**. You do not review the diff \u2014 you run the project's own deterministic checks and report what they say. Your evidence is **the commands you ran and their output**; a return that names no command has not done this job.
|
|
4828
4988
|
|
|
@@ -4837,6 +4997,8 @@ Use \`Source: [build]\` or \`Source: [test]\`, never \`[review]\`.`
|
|
|
4837
4997
|
},
|
|
4838
4998
|
"test-matrix": {
|
|
4839
4999
|
label: "Test coverage matrix (whole-diff)",
|
|
5000
|
+
publicLabel: "the whole-diff test-coverage check",
|
|
5001
|
+
publicLabelZh: "\u5168 diff \u6D4B\u8BD5\u8986\u76D6\u68C0\u67E5",
|
|
4840
5002
|
readsDiff: true,
|
|
4841
5003
|
brief: `You are the **test-coverage matrix** agent \u2014 Agent 5's cross-chunk counterpart. The territory agents each see either an implementation or a test, rarely both. You see the whole diff, so you own the pairing.
|
|
4842
5004
|
|
|
@@ -4847,6 +5009,8 @@ Use \`Source: [build]\` or \`Source: [test]\`, never \`[review]\`.`
|
|
|
4847
5009
|
"invariant-a": {
|
|
4848
5010
|
reviewsCode: true,
|
|
4849
5011
|
label: "Invariant agent A: state, timers, collections",
|
|
5012
|
+
publicLabel: "the invariant check (state, timers, collections)",
|
|
5013
|
+
publicLabelZh: "\u4E0D\u53D8\u91CF\u68C0\u67E5\uFF08\u72B6\u6001\u3001\u5B9A\u65F6\u5668\u3001\u96C6\u5408\uFF09",
|
|
4850
5014
|
readsDiff: true,
|
|
4851
5015
|
brief: `You are **invariant agent A: state, timers, and collections.**
|
|
4852
5016
|
|
|
@@ -4863,6 +5027,8 @@ Report a **Critical** for each violation, and give **both** locations that toget
|
|
|
4863
5027
|
"invariant-b": {
|
|
4864
5028
|
reviewsCode: true,
|
|
4865
5029
|
label: "Invariant agent B: counters, return values, error taxonomies",
|
|
5030
|
+
publicLabel: "the invariant check (counters, return values, error taxonomies)",
|
|
5031
|
+
publicLabelZh: "\u4E0D\u53D8\u91CF\u68C0\u67E5\uFF08\u8BA1\u6570\u5668\u3001\u8FD4\u56DE\u503C\u3001\u9519\u8BEF\u5206\u7C7B\uFF09",
|
|
4866
5032
|
readsDiff: true,
|
|
4867
5033
|
brief: `You are **invariant agent B: counters, return values, and error taxonomies.**
|
|
4868
5034
|
|
|
@@ -4879,6 +5045,8 @@ Report a **Critical** for each violation, and give **both** locations that toget
|
|
|
4879
5045
|
"invariant-c": {
|
|
4880
5046
|
reviewsCode: true,
|
|
4881
5047
|
label: "Invariant agent C: config fields, early returns",
|
|
5048
|
+
publicLabel: "the invariant check (config fields, early returns)",
|
|
5049
|
+
publicLabelZh: "\u4E0D\u53D8\u91CF\u68C0\u67E5\uFF08\u914D\u7F6E\u5B57\u6BB5\u3001\u63D0\u524D\u8FD4\u56DE\uFF09",
|
|
4882
5050
|
readsDiff: true,
|
|
4883
5051
|
brief: `You are **invariant agent C: config fields and early returns.**
|
|
4884
5052
|
|
|
@@ -4896,6 +5064,8 @@ Report a **Critical** for each violation, and give **both** locations that toget
|
|
|
4896
5064
|
output: "verdicts",
|
|
4897
5065
|
acceptsFindings: true,
|
|
4898
5066
|
label: "Verification agent",
|
|
5067
|
+
publicLabel: "verification",
|
|
5068
|
+
publicLabelZh: "\u9A8C\u8BC1",
|
|
4899
5069
|
readsDiff: true,
|
|
4900
5070
|
brief: `You are a **verification agent**. You do not look for new problems \u2014 you rule on the findings you were handed, listed in the message that launched you, each with a file, a line, an issue, and a **failure scenario**. The failure scenario is the finding's testable claim, and your verdict is the **result of tracing it through the real code**, not a plausibility vote on how the finding reads.
|
|
4901
5071
|
|
|
@@ -4924,6 +5094,8 @@ Return, for each finding, one verdict:
|
|
|
4924
5094
|
acceptsChunk: true,
|
|
4925
5095
|
acceptsFindings: true,
|
|
4926
5096
|
label: "Reverse audit agent",
|
|
5097
|
+
publicLabel: "reverse audit",
|
|
5098
|
+
publicLabelZh: "\u53CD\u5411\u5BA1\u8BA1",
|
|
4927
5099
|
readsDiff: true,
|
|
4928
5100
|
brief: `You are a **reverse audit agent**. Prior agents have already reviewed this diff and their confirmed findings are listed in the message that launched you. Your job is not to re-report them \u2014 it is to find the **gaps**: the important issues no prior agent or round caught.
|
|
4929
5101
|
|
|
@@ -5382,6 +5554,18 @@ function roleLabel(req) {
|
|
|
5382
5554
|
return req.file ? `${base} \u2014 ${req.file}` : base;
|
|
5383
5555
|
}
|
|
5384
5556
|
__name(roleLabel, "roleLabel");
|
|
5557
|
+
function publicRoleLabel(req) {
|
|
5558
|
+
if (req.role === "chunk") return void 0;
|
|
5559
|
+
const base = BRIEFS[req.role].publicLabel;
|
|
5560
|
+
return req.file ? `${base} on ${req.file}` : base;
|
|
5561
|
+
}
|
|
5562
|
+
__name(publicRoleLabel, "publicRoleLabel");
|
|
5563
|
+
function publicRoleLabelZh(req) {
|
|
5564
|
+
if (req.role === "chunk") return void 0;
|
|
5565
|
+
const base = BRIEFS[req.role].publicLabelZh;
|
|
5566
|
+
return req.file ? `${base}\uFF08${req.file}\uFF09` : base;
|
|
5567
|
+
}
|
|
5568
|
+
__name(publicRoleLabelZh, "publicRoleLabelZh");
|
|
5385
5569
|
function label(rec, chunk) {
|
|
5386
5570
|
if (chunk !== null) return `chunk ${chunk}`;
|
|
5387
5571
|
const first = rec.launchPrompt.split("\n")[0]?.trim() ?? "";
|
|
@@ -5398,8 +5582,15 @@ function coverageFromTranscripts(planPath, env = process.env) {
|
|
|
5398
5582
|
const unopenedAgents = [];
|
|
5399
5583
|
const rewrittenPrompts = [];
|
|
5400
5584
|
const disclosures = [];
|
|
5401
|
-
const disclose = /* @__PURE__ */ __name((subject, reason) => {
|
|
5402
|
-
disclosures.push({
|
|
5585
|
+
const disclose = /* @__PURE__ */ __name((subject, reason, pub) => {
|
|
5586
|
+
disclosures.push({
|
|
5587
|
+
subject,
|
|
5588
|
+
reason,
|
|
5589
|
+
publicSubject: pub?.subject,
|
|
5590
|
+
publicReason: pub?.reason,
|
|
5591
|
+
subjectZh: pub?.subjectZh,
|
|
5592
|
+
reasonZh: pub?.reasonZh
|
|
5593
|
+
});
|
|
5403
5594
|
return `${subject} \u2014 ${reason}`;
|
|
5404
5595
|
}, "disclose");
|
|
5405
5596
|
const covered = /* @__PURE__ */ new Set();
|
|
@@ -5454,7 +5645,10 @@ function coverageFromTranscripts(planPath, env = process.env) {
|
|
|
5454
5645
|
rewrittenPrompts.push(
|
|
5455
5646
|
disclose(
|
|
5456
5647
|
name,
|
|
5457
|
-
"ran on a prompt the run wrote itself (none was built for this chunk), so the brief with its method and rules never reached it"
|
|
5648
|
+
"ran on a prompt the run wrote itself (none was built for this chunk), so the brief with its method and rules never reached it",
|
|
5649
|
+
{
|
|
5650
|
+
reasonZh: "\u8FD0\u884C\u5728\u8FD9\u6B21 run \u81EA\u884C\u7F16\u5199\u7684 prompt \u4E0A\uFF08\u8BE5 chunk \u4ECE\u672A\u6784\u5EFA\u8FC7 prompt\uFF09\uFF0C\u627F\u8F7D\u65B9\u6CD5\u4E0E\u89C4\u5219\u7684 brief \u4ECE\u672A\u5230\u8FBE\u8BE5 agent"
|
|
5651
|
+
}
|
|
5458
5652
|
)
|
|
5459
5653
|
);
|
|
5460
5654
|
}
|
|
@@ -5464,7 +5658,8 @@ function coverageFromTranscripts(planPath, env = process.env) {
|
|
|
5464
5658
|
rewrittenPrompts.push(
|
|
5465
5659
|
disclose(
|
|
5466
5660
|
name,
|
|
5467
|
-
"launched with a prompt that is not the one the CLI built"
|
|
5661
|
+
"launched with a prompt that is not the one the CLI built",
|
|
5662
|
+
{ reasonZh: "\u542F\u52A8\u65F6\u4F7F\u7528\u7684 prompt \u4E0D\u662F CLI \u6784\u5EFA\u7684\u90A3\u4E00\u4EFD" }
|
|
5468
5663
|
)
|
|
5469
5664
|
);
|
|
5470
5665
|
}
|
|
@@ -5501,7 +5696,11 @@ function coverageFromTranscripts(planPath, env = process.env) {
|
|
|
5501
5696
|
missingRoles.push(
|
|
5502
5697
|
disclose(
|
|
5503
5698
|
"every dimension",
|
|
5504
|
-
`none of the ${roster.length} required agents is on record as launched with a prompt this skill built, so this diff was reviewed, if at all, from prompts the run wrote for itself: no record shows the severity bar, the finding format or this project's own rules reaching an agent
|
|
5699
|
+
`none of the ${roster.length} required agents is on record as launched with a prompt this skill built, so this diff was reviewed, if at all, from prompts the run wrote for itself: no record shows the severity bar, the finding format or this project's own rules reaching an agent`,
|
|
5700
|
+
{
|
|
5701
|
+
subjectZh: "\u6240\u6709\u7EF4\u5EA6",
|
|
5702
|
+
reasonZh: `${roster.length} \u4E2A\u5FC5\u9700 agent \u4E2D\u6CA1\u6709\u4EFB\u4F55\u4E00\u4E2A\u6709\u8BB0\u5F55\u8868\u660E\u662F\u7528\u672C skill \u6784\u5EFA\u7684 prompt \u542F\u52A8\u7684\uFF0C\u8FD9\u4E2A diff \u5373\u4FBF\u88AB\u5BA1\u67E5\u8FC7\uFF0C\u4E5F\u662F\u57FA\u4E8E\u8FD9\u6B21 run \u81EA\u884C\u7F16\u5199\u7684 prompt\uFF1A\u6CA1\u6709\u8BB0\u5F55\u8868\u660E\u4E25\u91CD\u7EA7\u522B\u6807\u51C6\u3001\u53D1\u73B0\u683C\u5F0F\u6216\u672C\u9879\u76EE\u81EA\u5DF1\u7684\u89C4\u5219\u5230\u8FBE\u8FC7\u4EFB\u4F55 agent`
|
|
5703
|
+
}
|
|
5505
5704
|
)
|
|
5506
5705
|
);
|
|
5507
5706
|
}
|
|
@@ -5548,7 +5747,12 @@ function coverageFromTranscripts(planPath, env = process.env) {
|
|
|
5548
5747
|
missingRoles.push(
|
|
5549
5748
|
disclose(
|
|
5550
5749
|
roleLabel(req),
|
|
5551
|
-
"no record shows its brief reaching an agent, so this dimension was reviewed, if at all, from a prompt the run wrote for itself"
|
|
5750
|
+
"no record shows its brief reaching an agent, so this dimension was reviewed, if at all, from a prompt the run wrote for itself",
|
|
5751
|
+
{
|
|
5752
|
+
subject: publicRoleLabel(req),
|
|
5753
|
+
subjectZh: publicRoleLabelZh(req),
|
|
5754
|
+
reasonZh: "\u6CA1\u6709\u8BB0\u5F55\u8868\u660E\u5B83\u7684 brief \u5230\u8FBE\u8FC7\u4EFB\u4F55 agent\uFF0C\u8FD9\u4E2A\u7EF4\u5EA6\u5373\u4FBF\u88AB\u5BA1\u67E5\u8FC7\uFF0C\u4E5F\u662F\u57FA\u4E8E\u8FD9\u6B21 run \u81EA\u884C\u7F16\u5199\u7684 prompt"
|
|
5755
|
+
}
|
|
5552
5756
|
)
|
|
5553
5757
|
);
|
|
5554
5758
|
}
|
|
@@ -5562,7 +5766,12 @@ function coverageFromTranscripts(planPath, env = process.env) {
|
|
|
5562
5766
|
missingRoles.push(
|
|
5563
5767
|
disclose(
|
|
5564
5768
|
roleLabel(req),
|
|
5565
|
-
anyMatch ? "its prompt reached only an agent already credited with another block; one agent was given several blocks, and one transcript cannot certify two dimensions" : "its prompt was built, but no agent on record was launched with it"
|
|
5769
|
+
anyMatch ? "its prompt reached only an agent already credited with another block; one agent was given several blocks, and one transcript cannot certify two dimensions" : "its prompt was built, but no agent on record was launched with it",
|
|
5770
|
+
{
|
|
5771
|
+
subject: publicRoleLabel(req),
|
|
5772
|
+
subjectZh: publicRoleLabelZh(req),
|
|
5773
|
+
reasonZh: anyMatch ? "\u5B83\u7684 prompt \u53EA\u5230\u8FBE\u4E86\u4E00\u4E2A\u5DF2\u88AB\u8BB0\u5165\u5176\u4ED6\u533A\u5757\u7684 agent\uFF1B\u4E00\u4E2A agent \u88AB\u585E\u8FDB\u4E86\u591A\u4E2A\u533A\u5757\uFF0C\u800C\u4E00\u4EFD\u8FD0\u884C\u8BB0\u5F55\u65E0\u6CD5\u4E3A\u4E24\u4E2A\u7EF4\u5EA6\u4F5C\u8BC1" : "\u5B83\u7684 prompt \u5DF2\u6784\u5EFA\uFF0C\u4F46\u6CA1\u6709\u4EFB\u4F55 agent \u6709\u8BB0\u5F55\u7528\u5B83\u542F\u52A8\u8FC7"
|
|
5774
|
+
}
|
|
5566
5775
|
)
|
|
5567
5776
|
);
|
|
5568
5777
|
missingRoleSelectors.push(selectorOf(req));
|
|
@@ -5576,7 +5785,13 @@ function coverageFromTranscripts(planPath, env = process.env) {
|
|
|
5576
5785
|
unreadBriefs.push(
|
|
5577
5786
|
disclose(
|
|
5578
5787
|
roleLabel(req),
|
|
5579
|
-
`never opened its brief (${brief}), so it reviewed without the instructions it was launched to follow
|
|
5788
|
+
`never opened its brief (${brief}), so it reviewed without the instructions it was launched to follow`,
|
|
5789
|
+
{
|
|
5790
|
+
subject: publicRoleLabel(req),
|
|
5791
|
+
reason: "never opened its brief, so it reviewed without the instructions it was launched to follow",
|
|
5792
|
+
subjectZh: publicRoleLabelZh(req),
|
|
5793
|
+
reasonZh: "\u4ECE\u672A\u6253\u5F00\u81EA\u5DF1\u7684 brief\uFF0C\u5BA1\u67E5\u65F6\u7F3A\u5931\u4E86\u5B83\u672C\u5E94\u9075\u5FAA\u7684\u6307\u4EE4"
|
|
5794
|
+
}
|
|
5580
5795
|
)
|
|
5581
5796
|
);
|
|
5582
5797
|
}
|
|
@@ -5601,7 +5816,11 @@ function coverageFromTranscripts(planPath, env = process.env) {
|
|
|
5601
5816
|
unreadBriefs,
|
|
5602
5817
|
missingChunks,
|
|
5603
5818
|
uncoverableChunks: [...uncoverable].sort((a, b) => a - b),
|
|
5604
|
-
coveredChunks: [...covered].sort((a, b) => a - b)
|
|
5819
|
+
coveredChunks: [...covered].sort((a, b) => a - b),
|
|
5820
|
+
plannedChunks: plan.chunks.map((c) => ({
|
|
5821
|
+
id: c.id,
|
|
5822
|
+
files: (c.files ?? []).map((f) => f?.path).filter((p) => typeof p === "string" && p !== "")
|
|
5823
|
+
}))
|
|
5605
5824
|
};
|
|
5606
5825
|
}
|
|
5607
5826
|
__name(coverageFromTranscripts, "coverageFromTranscripts");
|
|
@@ -5617,6 +5836,7 @@ var REVERSE_AUDIT_GAP = {
|
|
|
5617
5836
|
// provable ("no brief was built"), then what that costs ("if at all").
|
|
5618
5837
|
"not-built": {
|
|
5619
5838
|
gap: "no auditor was launched with a prompt this skill builds \u2014 the pass that hunts what the rest of the review missed ran, if at all, without the method its brief carries",
|
|
5839
|
+
gapZh: "\u6CA1\u6709\u5BA1\u8BA1 agent \u662F\u7528\u672C skill \u6784\u5EFA\u7684 prompt \u542F\u52A8\u7684\u2014\u2014\u8D1F\u8D23\u641C\u5BFB\u8BC4\u5BA1\u5176\u4F59\u90E8\u5206\u9057\u6F0F\u95EE\u9898\u7684\u8FD9\u9053\u5DE5\u5E8F\uFF0C\u5373\u4FBF\u8FD0\u884C\u8FC7\uFF0C\u4E5F\u7F3A\u5931\u4E86 brief \u627F\u8F7D\u7684\u65B9\u6CD5",
|
|
5620
5840
|
fix: rebuildFix("reverse-audit", "round")
|
|
5621
5841
|
},
|
|
5622
5842
|
// Same reach limit as `not-built`: a hand-written auditor that never opened
|
|
@@ -5624,6 +5844,7 @@ var REVERSE_AUDIT_GAP = {
|
|
|
5624
5844
|
// may not claim the pass did not run — only that it cannot be certified.
|
|
5625
5845
|
"not-launched": {
|
|
5626
5846
|
gap: "its prompt was built, but no agent was launched with it \u2014 the pass that hunts what the rest of the review missed ran, if at all, without the method its brief carries, and cannot be certified",
|
|
5847
|
+
gapZh: "\u5B83\u7684 prompt \u5DF2\u6784\u5EFA\uFF0C\u4F46\u6CA1\u6709 agent \u7528\u5B83\u542F\u52A8\u2014\u2014\u8D1F\u8D23\u641C\u5BFB\u8BC4\u5BA1\u5176\u4F59\u90E8\u5206\u9057\u6F0F\u95EE\u9898\u7684\u8FD9\u9053\u5DE5\u5E8F\uFF0C\u5373\u4FBF\u8FD0\u884C\u8FC7\uFF0C\u4E5F\u7F3A\u5931\u4E86 brief \u627F\u8F7D\u7684\u65B9\u6CD5\uFF0C\u65E0\u6CD5\u4F5C\u8BC1",
|
|
5627
5848
|
fix: rebuildFix("reverse-audit", "round")
|
|
5628
5849
|
},
|
|
5629
5850
|
// `rewritten` is reached only after a successful call OPENED the brief — so
|
|
@@ -5632,10 +5853,12 @@ var REVERSE_AUDIT_GAP = {
|
|
|
5632
5853
|
// findings, the exact ranges, the guarantee the skill certifies against.
|
|
5633
5854
|
rewritten: {
|
|
5634
5855
|
gap: "an auditor ran and opened its brief, but no agent was launched with the prompt the CLI built \u2014 the launch was written by hand, and what the agent was actually asked is not what this skill certifies",
|
|
5856
|
+
gapZh: "\u6709\u5BA1\u8BA1 agent \u8FD0\u884C\u5E76\u6253\u5F00\u4E86\u81EA\u5DF1\u7684 brief\uFF0C\u4F46\u6CA1\u6709 agent \u662F\u7528 CLI \u6784\u5EFA\u7684 prompt \u542F\u52A8\u7684\u2014\u2014\u542F\u52A8 prompt \u662F\u624B\u5199\u7684\uFF0Cagent \u5B9E\u9645\u88AB\u8981\u6C42\u505A\u7684\u5E76\u4E0D\u662F\u672C skill \u6240\u8BA4\u8BC1\u7684\u5185\u5BB9",
|
|
5635
5857
|
fix: rebuildFix("reverse-audit", "round")
|
|
5636
5858
|
},
|
|
5637
5859
|
"brief-unread": {
|
|
5638
5860
|
gap: "it was launched with the built prompt but never opened its brief, so it audited without the gaps-only method and the finding format it was launched to follow",
|
|
5861
|
+
gapZh: "\u5B83\u7528\u6784\u5EFA\u7684 prompt \u542F\u52A8\uFF0C\u5374\u4ECE\u672A\u6253\u5F00\u81EA\u5DF1\u7684 brief\uFF0C\u5BA1\u8BA1\u65F6\u7F3A\u5931\u4E86\u53EA\u62A5\u7F3A\u53E3\u7684\u65B9\u6CD5\u548C\u5B83\u672C\u5E94\u9075\u5FAA\u7684\u53D1\u73B0\u683C\u5F0F",
|
|
5639
5862
|
fix: "relaunch with the same printed prompt \u2014 the agent must OPEN the brief file the prompt names; that read is the receipt"
|
|
5640
5863
|
}
|
|
5641
5864
|
};
|
|
@@ -5644,21 +5867,43 @@ var VERIFY_GAP = {
|
|
|
5644
5867
|
// before the transcripts are consulted, so it may not assert nobody ran.
|
|
5645
5868
|
"not-built": {
|
|
5646
5869
|
gap: "the review posts findings, but no verifier was launched with a prompt this skill builds \u2014 they were ruled on, if at all, without the verdict bar its brief carries",
|
|
5870
|
+
gapZh: "\u672C\u6B21\u8BC4\u5BA1\u53D1\u5E03\u4E86\u53D1\u73B0\uFF0C\u4F46\u6CA1\u6709\u9A8C\u8BC1 agent \u662F\u7528\u672C skill \u6784\u5EFA\u7684 prompt \u542F\u52A8\u7684\u2014\u2014\u8FD9\u4E9B\u53D1\u73B0\u5373\u4FBF\u88AB\u88C1\u5B9A\u8FC7\uFF0C\u4E5F\u7F3A\u5931\u4E86 brief \u627F\u8F7D\u7684\u88C1\u5B9A\u6807\u51C6",
|
|
5647
5871
|
fix: rebuildFix("verify", "shard")
|
|
5648
5872
|
},
|
|
5649
5873
|
"not-launched": {
|
|
5650
5874
|
gap: "its prompt was built, but no agent was launched with it, so the posted findings cannot be counted as verified",
|
|
5875
|
+
gapZh: "\u5B83\u7684 prompt \u5DF2\u6784\u5EFA\uFF0C\u4F46\u6CA1\u6709 agent \u7528\u5B83\u542F\u52A8\uFF0C\u53D1\u5E03\u7684\u53D1\u73B0\u4E0D\u80FD\u7B97\u4F5C\u5DF2\u9A8C\u8BC1",
|
|
5651
5876
|
fix: rebuildFix("verify", "shard")
|
|
5652
5877
|
},
|
|
5653
5878
|
rewritten: {
|
|
5654
5879
|
gap: "a verifier ran and opened its brief, but no agent was launched with the prompt the CLI built \u2014 the launch was written by hand, and the posted findings cannot be counted as verified against it",
|
|
5880
|
+
gapZh: "\u6709\u9A8C\u8BC1 agent \u8FD0\u884C\u5E76\u6253\u5F00\u4E86\u81EA\u5DF1\u7684 brief\uFF0C\u4F46\u6CA1\u6709 agent \u662F\u7528 CLI \u6784\u5EFA\u7684 prompt \u542F\u52A8\u7684\u2014\u2014\u542F\u52A8 prompt \u662F\u624B\u5199\u7684\uFF0C\u53D1\u5E03\u7684\u53D1\u73B0\u4E0D\u80FD\u7B97\u4F5C\u7ECF\u5B83\u9A8C\u8BC1",
|
|
5655
5881
|
fix: rebuildFix("verify", "shard")
|
|
5656
5882
|
},
|
|
5657
5883
|
"brief-unread": {
|
|
5658
5884
|
gap: "it was launched with the built prompt but never opened its brief, so it ruled on the findings without the verdict bar it was launched to apply",
|
|
5885
|
+
gapZh: "\u5B83\u7528\u6784\u5EFA\u7684 prompt \u542F\u52A8\uFF0C\u5374\u4ECE\u672A\u6253\u5F00\u81EA\u5DF1\u7684 brief\uFF0C\u88C1\u5B9A\u53D1\u73B0\u65F6\u7F3A\u5931\u4E86\u5B83\u672C\u5E94\u4F7F\u7528\u7684\u88C1\u5B9A\u6807\u51C6",
|
|
5659
5886
|
fix: "relaunch with the same printed prompt \u2014 the agent must OPEN the brief file the prompt names; that read is the receipt"
|
|
5660
5887
|
}
|
|
5661
5888
|
};
|
|
5889
|
+
var COMBINED_STEP45_GAP = {
|
|
5890
|
+
"not-built": {
|
|
5891
|
+
en: "neither the verifier nor the reverse auditor was launched with a prompt this skill builds \u2014 the posted findings were ruled on, and the misses the rest of the review left were hunted, if at all, without the briefs this skill certifies against",
|
|
5892
|
+
zh: "\u9A8C\u8BC1 agent \u4E0E\u53CD\u5411\u5BA1\u8BA1 agent \u90FD\u6CA1\u6709\u7528\u672C skill \u6784\u5EFA\u7684 prompt \u542F\u52A8\u2014\u2014\u53D1\u5E03\u7684\u53D1\u73B0\u5373\u4FBF\u88AB\u88C1\u5B9A\u8FC7\u3001\u8BC4\u5BA1\u5176\u4F59\u90E8\u5206\u9057\u6F0F\u7684\u95EE\u9898\u5373\u4FBF\u88AB\u641C\u5BFB\u8FC7\uFF0C\u4E5F\u90FD\u7F3A\u5931\u4E86\u672C skill \u7528\u4EE5\u8BA4\u8BC1\u7684 brief"
|
|
5893
|
+
},
|
|
5894
|
+
"not-launched": {
|
|
5895
|
+
en: "both prompts were built, but no agent was launched with either \u2014 the posted findings cannot be counted as verified, and the pass that hunts what the rest of the review missed cannot be certified",
|
|
5896
|
+
zh: "\u4E24\u4EFD prompt \u90FD\u5DF2\u6784\u5EFA\uFF0C\u4F46\u90FD\u6CA1\u6709 agent \u7528\u5B83\u4EEC\u542F\u52A8\u2014\u2014\u53D1\u5E03\u7684\u53D1\u73B0\u4E0D\u80FD\u7B97\u4F5C\u5DF2\u9A8C\u8BC1\uFF0C\u641C\u5BFB\u8BC4\u5BA1\u9057\u6F0F\u95EE\u9898\u7684\u5DE5\u5E8F\u4E5F\u65E0\u6CD5\u4F5C\u8BC1"
|
|
5897
|
+
},
|
|
5898
|
+
rewritten: {
|
|
5899
|
+
en: "each ran and opened its brief, but neither was launched with the prompt the CLI built \u2014 the launches were written by hand, so the posted findings cannot be counted as verified, and what the agents were actually asked is not what this skill certifies",
|
|
5900
|
+
zh: "\u4E24\u8005\u90FD\u8FD0\u884C\u5E76\u6253\u5F00\u4E86\u5404\u81EA\u7684 brief\uFF0C\u4F46\u90FD\u4E0D\u662F\u7528 CLI \u6784\u5EFA\u7684 prompt \u542F\u52A8\u7684\u2014\u2014\u542F\u52A8 prompt \u662F\u624B\u5199\u7684\uFF0C\u53D1\u5E03\u7684\u53D1\u73B0\u4E0D\u80FD\u7B97\u4F5C\u5DF2\u9A8C\u8BC1\uFF0Cagent \u5B9E\u9645\u88AB\u8981\u6C42\u505A\u7684\u4E5F\u4E0D\u662F\u672C skill \u6240\u8BA4\u8BC1\u7684\u5185\u5BB9"
|
|
5901
|
+
},
|
|
5902
|
+
"brief-unread": {
|
|
5903
|
+
en: "each was launched with its built prompt and never opened its brief, so the findings were ruled on without the verdict bar, and the audit ran without the gaps-only method it was launched to follow",
|
|
5904
|
+
zh: "\u4E24\u8005\u90FD\u7528\u6784\u5EFA\u7684 prompt \u542F\u52A8\uFF0C\u5374\u90FD\u4ECE\u672A\u6253\u5F00\u81EA\u5DF1\u7684 brief\u2014\u2014\u53D1\u73B0\u7684\u88C1\u5B9A\u7F3A\u5931\u4E86\u88C1\u5B9A\u6807\u51C6\uFF0C\u5BA1\u8BA1\u4E5F\u7F3A\u5931\u4E86\u5B83\u672C\u5E94\u9075\u5FAA\u7684\u53EA\u62A5\u7F3A\u53E3\u7684\u65B9\u6CD5"
|
|
5905
|
+
}
|
|
5906
|
+
};
|
|
5662
5907
|
function verificationGaps(planPath, opts, env = process.env) {
|
|
5663
5908
|
const { plan, mtimeMs } = readPlan(planPath);
|
|
5664
5909
|
const records = readTranscripts(mtimeMs, env, plan.diffPathAbsolute);
|
|
@@ -5694,7 +5939,6 @@ function verificationGaps(planPath, opts, env = process.env) {
|
|
|
5694
5939
|
);
|
|
5695
5940
|
const reverse = bestDelivery(reverseKeys);
|
|
5696
5941
|
if (reverse !== "ok") {
|
|
5697
|
-
gaps.push(`reverse audit \u2014 ${REVERSE_AUDIT_GAP[reverse].gap}`);
|
|
5698
5942
|
remediation.push(
|
|
5699
5943
|
`reverse audit: ${REVERSE_AUDIT_GAP[reverse].fix.replace(
|
|
5700
5944
|
"--plan <plan>",
|
|
@@ -5703,14 +5947,14 @@ function verificationGaps(planPath, opts, env = process.env) {
|
|
|
5703
5947
|
);
|
|
5704
5948
|
}
|
|
5705
5949
|
let unverifiedFindings = false;
|
|
5950
|
+
let verify = null;
|
|
5706
5951
|
if (opts.postsFindings) {
|
|
5707
5952
|
const verifyKeys = [...built.keys()].filter(
|
|
5708
5953
|
(k) => k === "verify" || k.startsWith("verify--")
|
|
5709
5954
|
);
|
|
5710
|
-
|
|
5955
|
+
verify = bestDelivery(verifyKeys);
|
|
5711
5956
|
if (verify !== "ok") {
|
|
5712
5957
|
unverifiedFindings = true;
|
|
5713
|
-
gaps.push(`verification \u2014 ${VERIFY_GAP[verify].gap}`);
|
|
5714
5958
|
remediation.push(
|
|
5715
5959
|
`verification: ${VERIFY_GAP[verify].fix.replace(
|
|
5716
5960
|
"--plan <plan>",
|
|
@@ -5721,6 +5965,31 @@ function verificationGaps(planPath, opts, env = process.env) {
|
|
|
5721
5965
|
);
|
|
5722
5966
|
}
|
|
5723
5967
|
}
|
|
5968
|
+
if (reverse !== "ok" && verify !== null && verify === reverse) {
|
|
5969
|
+
gaps.push({
|
|
5970
|
+
subject: "verification and reverse audit",
|
|
5971
|
+
reason: COMBINED_STEP45_GAP[reverse].en,
|
|
5972
|
+
subjectZh: "\u9A8C\u8BC1\u4E0E\u53CD\u5411\u5BA1\u8BA1",
|
|
5973
|
+
reasonZh: COMBINED_STEP45_GAP[reverse].zh
|
|
5974
|
+
});
|
|
5975
|
+
} else {
|
|
5976
|
+
if (reverse !== "ok") {
|
|
5977
|
+
gaps.push({
|
|
5978
|
+
subject: "reverse audit",
|
|
5979
|
+
reason: REVERSE_AUDIT_GAP[reverse].gap,
|
|
5980
|
+
subjectZh: "\u53CD\u5411\u5BA1\u8BA1",
|
|
5981
|
+
reasonZh: REVERSE_AUDIT_GAP[reverse].gapZh
|
|
5982
|
+
});
|
|
5983
|
+
}
|
|
5984
|
+
if (verify !== null && verify !== "ok") {
|
|
5985
|
+
gaps.push({
|
|
5986
|
+
subject: "verification",
|
|
5987
|
+
reason: VERIFY_GAP[verify].gap,
|
|
5988
|
+
subjectZh: "\u9A8C\u8BC1",
|
|
5989
|
+
reasonZh: VERIFY_GAP[verify].gapZh
|
|
5990
|
+
});
|
|
5991
|
+
}
|
|
5992
|
+
}
|
|
5724
5993
|
return { ok: gaps.length === 0, gaps, remediation, unverifiedFindings };
|
|
5725
5994
|
}
|
|
5726
5995
|
__name(verificationGaps, "verificationGaps");
|
|
@@ -5818,6 +6087,8 @@ function composeReview(input) {
|
|
|
5818
6087
|
const remediation = [];
|
|
5819
6088
|
const planRef = input.planPath ? shellQuotePath(input.planPath) : "<plan>";
|
|
5820
6089
|
const missingReceipts = [];
|
|
6090
|
+
let plannedChunks = [];
|
|
6091
|
+
let coveredChunks = [];
|
|
5821
6092
|
const nonDeterministicBodyCriticals = bodyCriticals.filter(
|
|
5822
6093
|
(x) => !/\[(?:build|test)\]/i.test(x)
|
|
5823
6094
|
).length;
|
|
@@ -5826,12 +6097,16 @@ function composeReview(input) {
|
|
|
5826
6097
|
if (!input.planPath) {
|
|
5827
6098
|
coverageEntries.push({
|
|
5828
6099
|
subject: "coverage",
|
|
5829
|
-
reason: "no plan was given, so this run cannot show that any of the diff was read"
|
|
6100
|
+
reason: "no plan was given, so this run cannot show that any of the diff was read",
|
|
6101
|
+
subjectZh: "\u8986\u76D6\u60C5\u51B5",
|
|
6102
|
+
reasonZh: "\u672A\u63D0\u4F9B plan\uFF0C\u672C\u6B21\u8FD0\u884C\u65E0\u6CD5\u8BC1\u660E diff \u7684\u4EFB\u4F55\u90E8\u5206\u88AB\u8BFB\u8FC7"
|
|
5830
6103
|
});
|
|
5831
6104
|
criticalsUnverified = criticalsNeedingVerify >= 1;
|
|
5832
6105
|
} else {
|
|
5833
6106
|
try {
|
|
5834
6107
|
const cov = coverageFromTranscripts(input.planPath, input.env);
|
|
6108
|
+
plannedChunks = cov.plannedChunks;
|
|
6109
|
+
coveredChunks = cov.coveredChunks;
|
|
5835
6110
|
for (const id of cov.missingChunks) missingReceipts.push(id);
|
|
5836
6111
|
for (const id of cov.uncoverableChunks) {
|
|
5837
6112
|
const prefix = `chunk ${id}`;
|
|
@@ -5843,7 +6118,8 @@ function composeReview(input) {
|
|
|
5843
6118
|
for (const label2 of cov.idleAgents) {
|
|
5844
6119
|
coverageEntries.push({
|
|
5845
6120
|
subject: label2,
|
|
5846
|
-
reason: "the agent made no tool call: it read nothing"
|
|
6121
|
+
reason: "the agent made no tool call: it read nothing",
|
|
6122
|
+
reasonZh: "\u8BE5 agent \u672A\u53D1\u8D77\u4EFB\u4F55\u5DE5\u5177\u8C03\u7528\uFF1A\u5B83\u4EC0\u4E48\u90FD\u6CA1\u8BFB"
|
|
5847
6123
|
});
|
|
5848
6124
|
}
|
|
5849
6125
|
if (cov.idleAgents.length > 0) {
|
|
@@ -5854,7 +6130,8 @@ function composeReview(input) {
|
|
|
5854
6130
|
for (const label2 of cov.blindAgents) {
|
|
5855
6131
|
coverageEntries.push({
|
|
5856
6132
|
subject: label2,
|
|
5857
|
-
reason: "launched with a prompt that never named the diff file, so it could not have read it"
|
|
6133
|
+
reason: "launched with a prompt that never named the diff file, so it could not have read it",
|
|
6134
|
+
reasonZh: "\u542F\u52A8 prompt \u4ECE\u672A\u63D0\u5230 diff \u6587\u4EF6\uFF0C\u5B83\u4E0D\u53EF\u80FD\u8BFB\u8FC7 diff"
|
|
5858
6135
|
});
|
|
5859
6136
|
}
|
|
5860
6137
|
if (cov.blindAgents.length > 0) {
|
|
@@ -5865,7 +6142,8 @@ function composeReview(input) {
|
|
|
5865
6142
|
for (const label2 of cov.unopenedAgents) {
|
|
5866
6143
|
coverageEntries.push({
|
|
5867
6144
|
subject: label2,
|
|
5868
|
-
reason: "pointed at diff lines it never opened: it made tool calls, but none of them read the diff"
|
|
6145
|
+
reason: "pointed at diff lines it never opened: it made tool calls, but none of them read the diff",
|
|
6146
|
+
reasonZh: "\u5B83\u88AB\u6307\u5411 diff \u7684\u884C\u5374\u4ECE\u672A\u6253\u5F00\uFF1A\u6709\u5DE5\u5177\u8C03\u7528\uFF0C\u4F46\u6CA1\u6709\u4E00\u6B21\u8BFB\u53D6 diff"
|
|
5869
6147
|
});
|
|
5870
6148
|
}
|
|
5871
6149
|
if (cov.unopenedAgents.length > 0) {
|
|
@@ -5891,9 +6169,12 @@ function composeReview(input) {
|
|
|
5891
6169
|
}
|
|
5892
6170
|
} catch (err) {
|
|
5893
6171
|
const why = err instanceof TranscriptsUnavailableError ? `could not read the agents' transcripts (${err.message})` : `the plan could not be used (${err.message})`;
|
|
6172
|
+
const whyZh = err instanceof TranscriptsUnavailableError ? `\u65E0\u6CD5\u8BFB\u53D6 agent \u7684\u8FD0\u884C\u8BB0\u5F55\uFF08${err.message}\uFF09` : `plan \u65E0\u6CD5\u4F7F\u7528\uFF08${err.message}\uFF09`;
|
|
5894
6173
|
coverageEntries.push({
|
|
5895
6174
|
subject: "coverage",
|
|
5896
|
-
reason: `${why}, so this run cannot show that any of the diff was read
|
|
6175
|
+
reason: `${why}, so this run cannot show that any of the diff was read`,
|
|
6176
|
+
subjectZh: "\u8986\u76D6\u60C5\u51B5",
|
|
6177
|
+
reasonZh: `${whyZh}\uFF0C\u672C\u6B21\u8FD0\u884C\u65E0\u6CD5\u8BC1\u660E diff \u7684\u4EFB\u4F55\u90E8\u5206\u88AB\u8BFB\u8FC7`
|
|
5897
6178
|
});
|
|
5898
6179
|
}
|
|
5899
6180
|
try {
|
|
@@ -5904,20 +6185,21 @@ function composeReview(input) {
|
|
|
5904
6185
|
input.env
|
|
5905
6186
|
);
|
|
5906
6187
|
for (const gap of verification.gaps) {
|
|
5907
|
-
|
|
5908
|
-
|
|
5909
|
-
|
|
5910
|
-
|
|
5911
|
-
|
|
5912
|
-
|
|
5913
|
-
);
|
|
6188
|
+
coverageEntries.push({
|
|
6189
|
+
subject: gap.subject,
|
|
6190
|
+
reason: gap.reason,
|
|
6191
|
+
subjectZh: gap.subjectZh,
|
|
6192
|
+
reasonZh: gap.reasonZh
|
|
6193
|
+
});
|
|
5914
6194
|
}
|
|
5915
6195
|
remediation.push(...verification.remediation);
|
|
5916
6196
|
criticalsUnverified = verification.unverifiedFindings && criticalsNeedingVerify >= 1;
|
|
5917
6197
|
} catch (err) {
|
|
5918
6198
|
coverageEntries.push({
|
|
5919
6199
|
subject: "verification",
|
|
5920
|
-
reason: `could not check that Step 4 and Step 5 ran (${err.message})
|
|
6200
|
+
reason: `could not check that Step 4 and Step 5 ran (${err.message})`,
|
|
6201
|
+
subjectZh: "\u9A8C\u8BC1",
|
|
6202
|
+
reasonZh: `\u65E0\u6CD5\u68C0\u67E5\u6B65\u9AA4 4 \u4E0E\u6B65\u9AA4 5 \u662F\u5426\u8FD0\u884C\uFF08${err.message}\uFF09`
|
|
5921
6203
|
});
|
|
5922
6204
|
criticalsUnverified = criticalsNeedingVerify >= 1;
|
|
5923
6205
|
}
|
|
@@ -5981,9 +6263,23 @@ function composeReview(input) {
|
|
|
5981
6263
|
downgradedFrom = "Request changes";
|
|
5982
6264
|
}
|
|
5983
6265
|
const footer = `_\u2014 ${modelId} via Qwen Code /review_`;
|
|
5984
|
-
const
|
|
6266
|
+
const bilingual = bilingualFromPlan(input.planPath);
|
|
6267
|
+
const render = /* @__PURE__ */ __name((parts, sep3) => {
|
|
6268
|
+
const en = parts.map((p) => p.en).join(sep3);
|
|
6269
|
+
if (en === "") return "";
|
|
6270
|
+
const zh = parts.map((p) => p.zh).join(sep3);
|
|
6271
|
+
const text = bilingual && zh !== en ? `${en}
|
|
6272
|
+
|
|
6273
|
+
<details>
|
|
6274
|
+
<summary>\u4E2D\u6587\u8BF4\u660E</summary>
|
|
6275
|
+
|
|
6276
|
+
${zh}
|
|
6277
|
+
|
|
6278
|
+
</details>` : en;
|
|
6279
|
+
return `${text}
|
|
5985
6280
|
|
|
5986
|
-
${footer}
|
|
6281
|
+
${footer}`;
|
|
6282
|
+
}, "render");
|
|
5987
6283
|
const notReviewedParts = [];
|
|
5988
6284
|
if (missingReceipts.length > 0) {
|
|
5989
6285
|
remediation.push(
|
|
@@ -5994,15 +6290,29 @@ ${footer}`, "finish");
|
|
|
5994
6290
|
(id) => !disclosedSubjects.has(`chunk ${id}`)
|
|
5995
6291
|
);
|
|
5996
6292
|
if (unexplainedReceipts.length > 0) {
|
|
5997
|
-
|
|
5998
|
-
|
|
5999
|
-
|
|
6293
|
+
const gap = describeChunkGap(unexplainedReceipts, plannedChunks);
|
|
6294
|
+
const pron = gap.plural ? "them" : "it";
|
|
6295
|
+
notReviewedParts.push({
|
|
6296
|
+
en: `Not reviewed: ${gap.phrase} \u2014 no agent reported covering ${pron}; nobody read ${pron}.`,
|
|
6297
|
+
zh: `\u672A\u5BA1\u67E5\uFF1A${gap.phraseZh}\u2014\u2014\u6CA1\u6709 agent \u62A5\u544A\u8986\u76D6\u8FC7\u8FD9\u90E8\u5206\uFF0C\u4E5F\u6CA1\u6709\u4EBA\u8BFB\u8FC7\u5B83\u3002`
|
|
6298
|
+
});
|
|
6000
6299
|
}
|
|
6001
6300
|
}
|
|
6002
6301
|
if (uncoverable.length > 0) {
|
|
6003
|
-
|
|
6004
|
-
|
|
6005
|
-
)
|
|
6302
|
+
const bareIds = [];
|
|
6303
|
+
const callerNamed = [];
|
|
6304
|
+
for (const e of uncoverable) {
|
|
6305
|
+
const m = /^chunk (\d+)$/.exec(e);
|
|
6306
|
+
if (m) bareIds.push(Number(m[1]));
|
|
6307
|
+
else callerNamed.push(e);
|
|
6308
|
+
}
|
|
6309
|
+
const bareGap = bareIds.length > 0 ? describeChunkGap(bareIds, plannedChunks) : null;
|
|
6310
|
+
const shown = [...bareGap ? [bareGap.phrase] : [], ...callerNamed];
|
|
6311
|
+
const shownZh = [...bareGap ? [bareGap.phraseZh] : [], ...callerNamed];
|
|
6312
|
+
notReviewedParts.push({
|
|
6313
|
+
en: `Not reviewed: ${shown.join(", ")} \u2014 a line there exceeds the read limit.`,
|
|
6314
|
+
zh: `\u672A\u5BA1\u67E5\uFF1A${shownZh.join("\u3001")}\u2014\u2014\u5176\u4E2D\u6709\u4E00\u884C\u8D85\u51FA\u5355\u6B21\u8BFB\u53D6\u4E0A\u9650\u3002`
|
|
6315
|
+
});
|
|
6006
6316
|
}
|
|
6007
6317
|
const covEntries = coverageEntries;
|
|
6008
6318
|
const callerLeft = [];
|
|
@@ -6018,32 +6328,67 @@ ${footer}`, "finish");
|
|
|
6018
6328
|
const whiffedDimensions = callerLeft.filter((d) => !d.includes(" \u2014 "));
|
|
6019
6329
|
const explainedCaller = callerLeft.filter((d) => d.includes(" \u2014 "));
|
|
6020
6330
|
if (whiffedDimensions.length > 0) {
|
|
6021
|
-
notReviewedParts.push(
|
|
6022
|
-
`Not reviewed: ${whiffedDimensions.join(", ")} \u2014 the agent returned no evidence of its walk twice
|
|
6023
|
-
|
|
6331
|
+
notReviewedParts.push({
|
|
6332
|
+
en: `Not reviewed: ${whiffedDimensions.join(", ")} \u2014 the agent returned no evidence of its walk twice.`,
|
|
6333
|
+
zh: `\u672A\u5BA1\u67E5\uFF1A${whiffedDimensions.join("\u3001")}\u2014\u2014\u8BE5 agent \u8FDE\u7EED\u4E24\u6B21\u672A\u8FD4\u56DE\u4EFB\u4F55\u68C0\u67E5\u8FC7\u7A0B\u7684\u8BC1\u636E\u3002`
|
|
6334
|
+
});
|
|
6024
6335
|
}
|
|
6025
6336
|
for (const d of explainedCaller) {
|
|
6026
|
-
notReviewedParts.push(
|
|
6337
|
+
notReviewedParts.push({
|
|
6338
|
+
en: `Not reviewed: ${d}.`,
|
|
6339
|
+
zh: `\u672A\u5BA1\u67E5\uFF1A${d}\u3002`
|
|
6340
|
+
});
|
|
6027
6341
|
}
|
|
6028
6342
|
const seenSubjects = /* @__PURE__ */ new Set();
|
|
6029
6343
|
const byReason = /* @__PURE__ */ new Map();
|
|
6030
|
-
|
|
6031
|
-
|
|
6032
|
-
seenSubjects.
|
|
6033
|
-
|
|
6034
|
-
|
|
6035
|
-
byReason.
|
|
6036
|
-
|
|
6037
|
-
|
|
6038
|
-
|
|
6039
|
-
|
|
6040
|
-
);
|
|
6344
|
+
const reasonZhOf = /* @__PURE__ */ new Map();
|
|
6345
|
+
for (const e of covEntries) {
|
|
6346
|
+
if (seenSubjects.has(e.subject)) continue;
|
|
6347
|
+
seenSubjects.add(e.subject);
|
|
6348
|
+
const key = e.publicReason ?? e.reason;
|
|
6349
|
+
const group = byReason.get(key) ?? [];
|
|
6350
|
+
group.push({
|
|
6351
|
+
subject: e.subject,
|
|
6352
|
+
publicSubject: e.publicSubject,
|
|
6353
|
+
subjectZh: e.subjectZh
|
|
6354
|
+
});
|
|
6355
|
+
byReason.set(key, group);
|
|
6356
|
+
if (e.reasonZh !== void 0 && !reasonZhOf.has(key)) {
|
|
6357
|
+
reasonZhOf.set(key, e.reasonZh);
|
|
6358
|
+
}
|
|
6359
|
+
}
|
|
6360
|
+
for (const [reason, entries] of byReason) {
|
|
6361
|
+
const chunkIds = [];
|
|
6362
|
+
const named = [];
|
|
6363
|
+
const namedZh = [];
|
|
6364
|
+
for (const e of entries) {
|
|
6365
|
+
const m = /^chunk (\d+)$/.exec(e.subject);
|
|
6366
|
+
if (m) chunkIds.push(Number(m[1]));
|
|
6367
|
+
else {
|
|
6368
|
+
named.push(e.publicSubject ?? e.subject);
|
|
6369
|
+
namedZh.push(e.subjectZh ?? e.publicSubject ?? e.subject);
|
|
6370
|
+
}
|
|
6371
|
+
}
|
|
6372
|
+
const gap = chunkIds.length > 0 ? describeChunkGap(chunkIds, plannedChunks) : null;
|
|
6373
|
+
const shown = [...gap ? [gap.phrase] : [], ...named];
|
|
6374
|
+
const shownZh = [...gap ? [gap.phraseZh] : [], ...namedZh];
|
|
6375
|
+
const reasonZh = reasonZhOf.get(reason) ?? reason;
|
|
6376
|
+
notReviewedParts.push({
|
|
6377
|
+
en: reason ? `Not reviewed: ${shown.join(", ")} \u2014 ${reason}.` : `Not reviewed: ${shown.join(", ")}.`,
|
|
6378
|
+
zh: reason ? `\u672A\u5BA1\u67E5\uFF1A${shownZh.join("\u3001")}\u2014\u2014${reasonZh}\u3002` : `\u672A\u5BA1\u67E5\uFF1A${shownZh.join("\u3001")}\u3002`
|
|
6379
|
+
});
|
|
6041
6380
|
}
|
|
6042
6381
|
const cannotTellBlock = cannotTell.length === 0 ? [] : [
|
|
6043
|
-
|
|
6382
|
+
{
|
|
6383
|
+
en: `Unresolved, please confirm: ${cannotTell.map((l) => withMarker(l)).join(" ")}`,
|
|
6384
|
+
zh: `\u672A\u51B3\uFF0C\u8BF7\u786E\u8BA4\uFF1A${cannotTell.map((l) => withMarker(l)).join(" ")}`
|
|
6385
|
+
}
|
|
6044
6386
|
];
|
|
6045
|
-
const bodyCriticalBlock = bodyCriticals.map((l) => withMarker(l));
|
|
6046
|
-
const contextUnavailableClause =
|
|
6387
|
+
const bodyCriticalBlock = bodyCriticals.map((l) => withMarker(l)).map((l) => ({ en: l, zh: l }));
|
|
6388
|
+
const contextUnavailableClause = {
|
|
6389
|
+
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.",
|
|
6390
|
+
zh: '\u4EC5\u5BA1\u67E5\u4E86 diff\u2014\u2014\u65E0\u6CD5\u83B7\u53D6 PR \u5DF2\u6709\u7684\u8BA8\u8BBA\uFF0C\u56E0\u6B64\u8FD9\u4E0D\u6784\u6210\u6279\u51C6\uFF0C\u4E5F\u4E0D\u6784\u6210"\u65E0\u963B\u65AD\u95EE\u9898"\u7684\u7ED3\u8BBA\u3002'
|
|
6391
|
+
};
|
|
6047
6392
|
if (event === "REQUEST_CHANGES") {
|
|
6048
6393
|
const parts = [
|
|
6049
6394
|
...contextUnavailable ? [contextUnavailableClause] : [],
|
|
@@ -6053,7 +6398,7 @@ ${footer}`, "finish");
|
|
|
6053
6398
|
];
|
|
6054
6399
|
return {
|
|
6055
6400
|
event,
|
|
6056
|
-
body:
|
|
6401
|
+
body: render(parts, "\n\n"),
|
|
6057
6402
|
baseEvent,
|
|
6058
6403
|
cappedBy,
|
|
6059
6404
|
downgraded,
|
|
@@ -6064,7 +6409,10 @@ ${footer}`, "finish");
|
|
|
6064
6409
|
if (event === "APPROVE") {
|
|
6065
6410
|
return {
|
|
6066
6411
|
event,
|
|
6067
|
-
body:
|
|
6412
|
+
body: render(
|
|
6413
|
+
[{ en: "No issues found. LGTM! \u2705", zh: "\u672A\u53D1\u73B0\u95EE\u9898\u3002LGTM\uFF01\u2705" }],
|
|
6414
|
+
" "
|
|
6415
|
+
),
|
|
6068
6416
|
baseEvent,
|
|
6069
6417
|
cappedBy,
|
|
6070
6418
|
downgraded,
|
|
@@ -6075,9 +6423,11 @@ ${footer}`, "finish");
|
|
|
6075
6423
|
const clauses = [];
|
|
6076
6424
|
if (downgraded && downgradedFrom) {
|
|
6077
6425
|
const reasons = downgradeReasons.join("; ");
|
|
6078
|
-
|
|
6079
|
-
|
|
6080
|
-
|
|
6426
|
+
const fromZh = downgradedFrom === "Approve" ? "\u6279\u51C6" : "\u8BF7\u6C42\u4FEE\u6539";
|
|
6427
|
+
clauses.push({
|
|
6428
|
+
en: `\u26A0\uFE0F Downgraded from ${downgradedFrom} to Comment${reasons ? `: ${reasons}` : ""}.`,
|
|
6429
|
+
zh: `\u26A0\uFE0F \u5DF2\u4ECE${fromZh}\u964D\u7EA7\u4E3A\u8BC4\u8BBA${reasons ? `\uFF1A${reasons}` : ""}\u3002`
|
|
6430
|
+
});
|
|
6081
6431
|
}
|
|
6082
6432
|
if (contextUnavailable) {
|
|
6083
6433
|
clauses.push(contextUnavailableClause);
|
|
@@ -6086,14 +6436,28 @@ ${footer}`, "finish");
|
|
|
6086
6436
|
// body could open "Reviewed — no blockers." two lines above "nobody read
|
|
6087
6437
|
// them." Nothing nobody read can be certified blocker-free.
|
|
6088
6438
|
missingReceipts.length === 0;
|
|
6089
|
-
|
|
6090
|
-
|
|
6091
|
-
|
|
6092
|
-
|
|
6439
|
+
const disclosedChunkIds = /* @__PURE__ */ new Set();
|
|
6440
|
+
for (const e of coverageEntries) {
|
|
6441
|
+
const m = /^chunk (\d+)$/.exec(e.subject);
|
|
6442
|
+
if (m) disclosedChunkIds.add(Number(m[1]));
|
|
6443
|
+
}
|
|
6444
|
+
const nothingCertified = coverageEntries.some((e) => e.subject === "coverage") || plannedChunks.length > 0 && coveredChunks.every((id) => disclosedChunkIds.has(id));
|
|
6093
6445
|
clauses.push(
|
|
6094
|
-
|
|
6446
|
+
nothingCertified ? {
|
|
6447
|
+
en: "\u26A0\uFE0F This run could not certify that any of this diff was reviewed.",
|
|
6448
|
+
zh: "\u26A0\uFE0F \u672C\u6B21\u8FD0\u884C\u65E0\u6CD5\u8BC1\u660E\u8FD9\u4E2A diff \u7684\u4EFB\u4F55\u90E8\u5206\u7ECF\u8FC7\u4E86\u5BA1\u67E5\u3002"
|
|
6449
|
+
} : canCertify ? { en: "Reviewed \u2014 no blockers.", zh: "\u5DF2\u5BA1\u67E5\u2014\u2014\u65E0\u963B\u65AD\u95EE\u9898\u3002" } : { en: "Reviewed.", zh: "\u5DF2\u5BA1\u67E5\u3002" }
|
|
6095
6450
|
);
|
|
6096
6451
|
}
|
|
6452
|
+
if (suggestionsInline > 0) {
|
|
6453
|
+
clauses.push({ en: "Suggestions are inline.", zh: "\u5EFA\u8BAE\u89C1\u884C\u5185\u8BC4\u8BBA\u3002" });
|
|
6454
|
+
}
|
|
6455
|
+
if (suggestionsDiscarded > 0) {
|
|
6456
|
+
clauses.push({
|
|
6457
|
+
en: `${suggestionsDiscarded} Suggestion-level finding(s) could not be anchored to a changed line and were dropped; nothing further to act on here.`,
|
|
6458
|
+
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`
|
|
6459
|
+
});
|
|
6460
|
+
}
|
|
6097
6461
|
clauses.push(...cannotTellBlock);
|
|
6098
6462
|
clauses.push(...notReviewedParts);
|
|
6099
6463
|
if (downgradedFrom === "Request changes" || criticalsUnverified) {
|
|
@@ -6101,7 +6465,7 @@ ${footer}`, "finish");
|
|
|
6101
6465
|
}
|
|
6102
6466
|
return {
|
|
6103
6467
|
event,
|
|
6104
|
-
body:
|
|
6468
|
+
body: render(clauses, " "),
|
|
6105
6469
|
baseEvent,
|
|
6106
6470
|
cappedBy,
|
|
6107
6471
|
downgraded,
|
|
@@ -6110,6 +6474,46 @@ ${footer}`, "finish");
|
|
|
6110
6474
|
};
|
|
6111
6475
|
}
|
|
6112
6476
|
__name(composeReview, "composeReview");
|
|
6477
|
+
function describeChunkGap(ids, planned) {
|
|
6478
|
+
const uniq = [...new Set(ids)].sort((a, b) => a - b);
|
|
6479
|
+
const inGap = new Set(uniq);
|
|
6480
|
+
if (planned.length > 0 && planned.every((p) => inGap.has(p.id))) {
|
|
6481
|
+
return { phrase: "the entire diff", phraseZh: "\u6574\u4E2A diff", plural: false };
|
|
6482
|
+
}
|
|
6483
|
+
const byId = new Map(planned.map((p) => [p.id, p.files]));
|
|
6484
|
+
const files = [];
|
|
6485
|
+
let allKnown = planned.length > 0;
|
|
6486
|
+
for (const id of uniq) {
|
|
6487
|
+
const f = byId.get(id) ?? [];
|
|
6488
|
+
if (f.length === 0) allKnown = false;
|
|
6489
|
+
for (const p of f) {
|
|
6490
|
+
if (!files.includes(p)) files.push(p);
|
|
6491
|
+
}
|
|
6492
|
+
}
|
|
6493
|
+
if (allKnown && files.length <= 4) {
|
|
6494
|
+
return {
|
|
6495
|
+
phrase: `the diff ${uniq.length === 1 ? "section" : "sections"} covering ${files.join(", ")}`,
|
|
6496
|
+
phraseZh: `\u6D89\u53CA ${files.join("\u3001")} \u7684 diff \u7247\u6BB5`,
|
|
6497
|
+
plural: uniq.length > 1
|
|
6498
|
+
};
|
|
6499
|
+
}
|
|
6500
|
+
return {
|
|
6501
|
+
phrase: planned.length > 0 ? `${uniq.length} of the diff's ${planned.length} sections` : `${uniq.length} ${uniq.length === 1 ? "section" : "sections"} of the diff`,
|
|
6502
|
+
phraseZh: planned.length > 0 ? `diff ${planned.length} \u4E2A\u7247\u6BB5\u4E2D\u7684 ${uniq.length} \u4E2A` : `diff \u4E2D\u7684 ${uniq.length} \u4E2A\u7247\u6BB5`,
|
|
6503
|
+
plural: uniq.length > 1
|
|
6504
|
+
};
|
|
6505
|
+
}
|
|
6506
|
+
__name(describeChunkGap, "describeChunkGap");
|
|
6507
|
+
function bilingualFromPlan(planPath) {
|
|
6508
|
+
if (!planPath) return false;
|
|
6509
|
+
try {
|
|
6510
|
+
const plan = JSON.parse(readFileSync7(planPath, "utf8"));
|
|
6511
|
+
return plan?.prDescriptionHasHan === true;
|
|
6512
|
+
} catch {
|
|
6513
|
+
return false;
|
|
6514
|
+
}
|
|
6515
|
+
}
|
|
6516
|
+
__name(bilingualFromPlan, "bilingualFromPlan");
|
|
6113
6517
|
function readDraftedComments(path3) {
|
|
6114
6518
|
let raw;
|
|
6115
6519
|
try {
|
|
@@ -6632,7 +7036,7 @@ async function runFetchPr(args) {
|
|
|
6632
7036
|
"--repo",
|
|
6633
7037
|
ownerRepo,
|
|
6634
7038
|
"--json",
|
|
6635
|
-
"headRefName,headRefOid,baseRefName,additions,deletions,changedFiles,isCrossRepository"
|
|
7039
|
+
"headRefName,headRefOid,baseRefName,additions,deletions,changedFiles,isCrossRepository,body"
|
|
6636
7040
|
);
|
|
6637
7041
|
meta = JSON.parse(json);
|
|
6638
7042
|
} catch (err) {
|
|
@@ -6720,6 +7124,7 @@ async function runFetchPr(args) {
|
|
|
6720
7124
|
baseFetchFailed,
|
|
6721
7125
|
diffPath,
|
|
6722
7126
|
diffPathAbsolute,
|
|
7127
|
+
prDescriptionHasHan: new RegExp("\\p{Script=Han}", "u").test(meta.body ?? ""),
|
|
6723
7128
|
...buildPlanReport(plan, (path3) => fileLineCount(fetchedSha, path3))
|
|
6724
7129
|
};
|
|
6725
7130
|
writeFileSync5(out, stringifyPlanReport(result), "utf8");
|
|
@@ -9040,9 +9445,12 @@ ${prompt}`;
|
|
|
9040
9445
|
const paramNote = typeof wt === "string" && wt ? `
|
|
9041
9446
|
|
|
9042
9447
|
**Agent tool parameters (worktree mode):** Set \`working_dir: "${wt}"\` and \`subagent_type: "general-purpose"\`, \`run_in_background: false\` on EVERY agent call below. Do NOT set \`isolation\` \u2014 the worktree already exists; \`isolation\` creates a new copy and is mutually exclusive with \`working_dir\`.` : "";
|
|
9448
|
+
const descNote = `
|
|
9449
|
+
|
|
9450
|
+
The \`description\` parameter of each Agent call is the task name the user watches while the agent runs \u2014 write it in your output language, translating the block's \u2500\u2500\u2500\u2500\u2500 separator label (keep the role/chunk id visible). Display only: the prompt itself stays the block VERBATIM.`;
|
|
9043
9451
|
writeStdoutLine(
|
|
9044
9452
|
[
|
|
9045
|
-
`${roster.length} agents required. Launch one agent per block below, passing its block VERBATIM \u2014 copy, do not retype. The \u2500\u2500\u2500\u2500\u2500 lines are separators, not part of any prompt. This is the same roster \`check-coverage\` reads out of the plan: a block you skip or reword is a dimension nobody reviewed. Blocks are numbered \`agent k of ${roster.length}\` and the output ends with an end-of-roster line \u2014 if either is missing, this output was truncated in transit: every prompt is also recorded on disk, so rebuild just the missing blocks with --chunk <id>, or --role <r> (--file <path> for an invariant agent), plus the same --rules this call was given.` + paramNote,
|
|
9453
|
+
`${roster.length} agents required. Launch one agent per block below, passing its block VERBATIM \u2014 copy, do not retype. The \u2500\u2500\u2500\u2500\u2500 lines are separators, not part of any prompt. This is the same roster \`check-coverage\` reads out of the plan: a block you skip or reword is a dimension nobody reviewed. Blocks are numbered \`agent k of ${roster.length}\` and the output ends with an end-of-roster line \u2014 if either is missing, this output was truncated in transit: every prompt is also recorded on disk, so rebuild just the missing blocks with --chunk <id>, or --role <r> (--file <path> for an invariant agent), plus the same --rules this call was given.` + descNote + paramNote,
|
|
9046
9454
|
...blocks,
|
|
9047
9455
|
`\u2500\u2500\u2500\u2500\u2500 end of roster \u2014 ${roster.length} agents \u2500\u2500\u2500\u2500\u2500`
|
|
9048
9456
|
].join("\n\n")
|
|
@@ -9078,7 +9486,7 @@ function runAllChunks(report, planPath, role, findingsContent, rules, round) {
|
|
|
9078
9486
|
});
|
|
9079
9487
|
writeStdoutLine(
|
|
9080
9488
|
[
|
|
9081
|
-
`${chunks.length} auditors required this round \u2014 one per chunk. Launch one agent per block below, passing its block VERBATIM \u2014 copy, do not retype, and NEVER sample this output (no \`| head\`): the text IS the deliverable, and a launch reconstructed from a sample matches no record. Blocks are numbered \`auditor k of ${chunks.length}\` and the output ends with an end-of-round line \u2014 if either is missing, the output was truncated in transit; rebuild just the missing chunks with --chunk <id
|
|
9489
|
+
`${chunks.length} auditors required this round \u2014 one per chunk. Launch one agent per block below, passing its block VERBATIM \u2014 copy, do not retype, and NEVER sample this output (no \`| head\`): the text IS the deliverable, and a launch reconstructed from a sample matches no record. Blocks are numbered \`auditor k of ${chunks.length}\` and the output ends with an end-of-round line \u2014 if either is missing, the output was truncated in transit; rebuild just the missing chunks with --chunk <id>. Write each Agent call's \`description\` (the task name the user watches) in your output language, translating the separator label \u2014 display only; the prompt stays the block VERBATIM.`,
|
|
9082
9490
|
...blocks,
|
|
9083
9491
|
`\u2500\u2500\u2500\u2500\u2500 end of round \u2014 ${chunks.length} auditors \u2500\u2500\u2500\u2500\u2500`
|
|
9084
9492
|
].join("\n\n")
|
|
@@ -10777,10 +11185,10 @@ var updateCommand3 = {
|
|
|
10777
11185
|
stdioHelpers,
|
|
10778
11186
|
{ updateEventEmitter }
|
|
10779
11187
|
] = await Promise.all([
|
|
10780
|
-
import("./settings-
|
|
10781
|
-
import("./updateCheck-
|
|
10782
|
-
import("./installationInfo-
|
|
10783
|
-
import("./standalone-update-
|
|
11188
|
+
import("./settings-CR2EWTBA.js"),
|
|
11189
|
+
import("./updateCheck-RKL6M5XN.js"),
|
|
11190
|
+
import("./installationInfo-6O2YAA52.js"),
|
|
11191
|
+
import("./standalone-update-Q6WFRZZQ.js"),
|
|
10784
11192
|
import("./stdioHelpers-HGIYTWAY.js"),
|
|
10785
11193
|
import("./updateEventEmitter-5MKC7BLQ.js")
|
|
10786
11194
|
]);
|
|
@@ -11928,6 +12336,9 @@ async function loadCliConfig(settings, argv, cwd = process.cwd(), overrideExtens
|
|
|
11928
12336
|
excludeTools: mergedDeny,
|
|
11929
12337
|
disabledSlashCommands: disabledSlashCommands.length > 0 ? disabledSlashCommands : void 0,
|
|
11930
12338
|
disabledSkillNamesProvider: bareMode || safeMode ? void 0 : disabledSkillNamesProvider,
|
|
12339
|
+
customSkillDirs: bareMode || safeMode ? void 0 : (Array.isArray(settings.skills?.directories) ? settings.skills.directories : []).filter(
|
|
12340
|
+
(d) => typeof d === "string" && d.trim().length > 0
|
|
12341
|
+
).map((d) => d.trim()),
|
|
11931
12342
|
disabledTools: disabledTools.length > 0 ? disabledTools : void 0,
|
|
11932
12343
|
visibleTools: visibleTools.length > 0 ? visibleTools : void 0,
|
|
11933
12344
|
// New unified permissions (PermissionManager source of truth).
|
|
@@ -11966,14 +12377,13 @@ async function loadCliConfig(settings, argv, cwd = process.cwd(), overrideExtens
|
|
|
11966
12377
|
},
|
|
11967
12378
|
showResponseTokensPerSecond: settings.ui?.showResponseTokensPerSecond === true,
|
|
11968
12379
|
telemetry: telemetrySettings,
|
|
11969
|
-
// Ordinary interactive TUI defers telemetry until after first paint
|
|
11970
|
-
//
|
|
11971
|
-
//
|
|
11972
|
-
// "prompt"`
|
|
11973
|
-
|
|
11974
|
-
deferTelemetryInitialization: interactive && !isAcpMode && !question,
|
|
12380
|
+
// Ordinary interactive TUI defers telemetry until after first paint; ACP
|
|
12381
|
+
// defers it until after the initialize response is written. Events emitted
|
|
12382
|
+
// before deferred init are an accepted startup-latency tradeoff. `qwen -i
|
|
12383
|
+
// "prompt"` still initializes eagerly because it auto-submits after render.
|
|
12384
|
+
deferTelemetryInitialization: isAcpMode || interactive && !question,
|
|
11975
12385
|
outboundCorrelation: settings.outboundCorrelation,
|
|
11976
|
-
usageStatisticsEnabled: settings.privacy?.usageStatisticsEnabled ?? true,
|
|
12386
|
+
usageStatisticsEnabled: parseBooleanEnvFlag(process.env["QWEN_USAGE_STATISTICS_ENABLED"]) ?? settings.privacy?.usageStatisticsEnabled ?? true,
|
|
11977
12387
|
clearContextOnIdle: settings.context?.clearContextOnIdle,
|
|
11978
12388
|
fileFiltering: settings.context?.fileFiltering,
|
|
11979
12389
|
plansDirectory: settings.plansDirectory,
|
|
@@ -12076,6 +12486,7 @@ async function loadCliConfig(settings, argv, cwd = process.cwd(), overrideExtens
|
|
|
12076
12486
|
fastModel: settings.fastModel || void 0,
|
|
12077
12487
|
webSearch: bareMode || safeMode ? void 0 : resolveWebSearchSettings(settings),
|
|
12078
12488
|
visionModel: settings.visionModel || void 0,
|
|
12489
|
+
imageModel: settings.imageModel || void 0,
|
|
12079
12490
|
visionBridgeTimeoutMs: settings.visionBridgeTimeoutMs,
|
|
12080
12491
|
modelFallbacks: resolveModelFallbacks(
|
|
12081
12492
|
argv.fallbackModel,
|