@qwen-code/qwen-code 0.21.14 → 0.21.15
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/features/channels/dingtalk.md +1 -1
- package/bundled/qc-helper/docs/features/code-review.md +20 -2
- package/bundled/qc-helper/docs/qwen-serve.md +1 -1
- package/bundled/review/SKILL.md +66 -36
- package/chunks/{MaxSizedBox-67IDQILY.js → MaxSizedBox-E7CUU3UN.js} +43 -43
- package/chunks/{StandaloneSessionPicker-G4QJIRMH.js → StandaloneSessionPicker-XYUB75AQ.js} +63 -63
- package/chunks/{acp-startup-profiler-HUYGO57H.js → acp-startup-profiler-DDVSJKJK.js} +2 -2
- package/chunks/{acpAgent-BS3YYO33.js → acpAgent-5QZS4VMN.js} +507 -176
- package/chunks/{agent-EHHEXKWN.js → agent-242BTA6Q.js} +40 -40
- package/chunks/{agent-headless-UT2ZF76T.js → agent-headless-4BF7W4TJ.js} +40 -40
- package/chunks/{anthropicContentGenerator-M7XRJMSK.js → anthropicContentGenerator-CU3G53RX.js} +7 -7
- package/chunks/{artifact-tool-GEXTOPVO.js → artifact-tool-LIUSI4XK.js} +3 -3
- package/chunks/{askUserQuestion-B33XRSB7.js → askUserQuestion-454X3UIV.js} +3 -3
- package/chunks/{bridge-WQ4IL2RF.js → bridge-MG4F5NOH.js} +46 -45
- package/chunks/{channel-management-service-X6LCQUAD.js → channel-management-service-KHPAWCX7.js} +1 -1
- package/chunks/{channel-settings-store-ZDFXY7VY.js → channel-settings-store-GQUCL2YM.js} +47 -47
- package/chunks/{channel-worker-group-TJ35JDPE.js → channel-worker-group-IN2UPYHP.js} +6 -5
- package/chunks/{channel-worker-manager-G5LKWGOG.js → channel-worker-manager-4CQPHVD4.js} +6 -5
- package/chunks/{channel-worker-supervisor-OEVWBHGT.js → channel-worker-supervisor-CPPSL7ZH.js} +4 -3
- package/chunks/{chunk-3EZLLVDF.js → chunk-263JC66E.js} +3 -3
- package/chunks/{chunk-OO4FKHLO.js → chunk-2GM44E7D.js} +10 -298
- package/chunks/{chunk-LSO6EL4Y.js → chunk-2MDUS4XE.js} +2 -2
- package/chunks/{chunk-WGHHA7ZH.js → chunk-3C55EUJX.js} +1 -1
- package/chunks/{chunk-47L5MLB5.js → chunk-3EAGKRLN.js} +5 -5
- package/chunks/{chunk-WPVUOVYX.js → chunk-3EQHT3IC.js} +2 -2
- package/chunks/{chunk-OEZCXK7Y.js → chunk-3JZ2AZC6.js} +4 -4
- package/chunks/{chunk-PCETXVVV.js → chunk-3X6KVX37.js} +1 -1
- package/chunks/{chunk-J63PKMYA.js → chunk-435GZDTF.js} +2 -2
- package/chunks/{chunk-I3N2Z25H.js → chunk-47VTGCYK.js} +3 -3
- package/chunks/{chunk-3PWNVF6N.js → chunk-4APB4SP2.js} +1 -1
- package/chunks/{chunk-MA2HEDVP.js → chunk-4CKU5K2R.js} +1 -1
- package/chunks/{chunk-OJB5FYVK.js → chunk-4IOBHNV2.js} +1 -1
- package/chunks/{chunk-MIPFDQAF.js → chunk-4W4BROUS.js} +1 -1
- package/chunks/{chunk-ZIGC3MUS.js → chunk-55P2ESI6.js} +1 -1
- package/chunks/{chunk-CHHABXPE.js → chunk-5AAW6E3C.js} +1 -1
- package/chunks/{chunk-J6YS7Z25.js → chunk-5I2U4PDY.js} +12 -12
- package/chunks/{chunk-NWNEANAT.js → chunk-5M7YKTYX.js} +6 -6
- package/chunks/{chunk-RXHBTKMG.js → chunk-5MA4E4EG.js} +3 -3
- package/chunks/{chunk-CEXU72GE.js → chunk-5NAJDTVP.js} +3 -3
- package/chunks/{chunk-U657UZJN.js → chunk-5WEMSDPR.js} +5 -5
- package/chunks/{chunk-73JUK3ZW.js → chunk-63AIQ2IZ.js} +96 -15
- package/chunks/{chunk-E5WQMF3K.js → chunk-67L6PVD6.js} +2 -2
- package/chunks/{chunk-CZK622ZK.js → chunk-6IFWBM24.js} +3 -3
- package/chunks/{chunk-CPHEPGAO.js → chunk-722JBVVW.js} +1 -1
- package/chunks/chunk-7NLDU6J2.js +367 -0
- package/chunks/{chunk-AKBOLMUF.js → chunk-7S22SX2L.js} +2 -2
- package/chunks/{chunk-SCZU65AI.js → chunk-7VRNXKKK.js} +8 -8
- package/chunks/{chunk-XUJNK7Y6.js → chunk-7WVB4FMG.js} +1 -1
- package/chunks/{chunk-55VKMB7X.js → chunk-A7MIUCUQ.js} +6 -6
- package/chunks/{chunk-NVRMCWTP.js → chunk-A7NBZBGQ.js} +3 -3
- package/chunks/{chunk-N6RSOOWJ.js → chunk-AAG7I5CR.js} +7 -7
- package/chunks/{chunk-EOPBFLA5.js → chunk-AKN26LMT.js} +3 -3
- package/chunks/{chunk-UC67T4SF.js → chunk-AQFWV4YF.js} +2 -1
- package/chunks/{chunk-DVR7XKO5.js → chunk-B5LEKTE7.js} +2 -2
- package/chunks/{chunk-V6WEMZPD.js → chunk-B72KNVKO.js} +3 -3
- package/chunks/{chunk-544KT7X4.js → chunk-BBMVUTXO.js} +1 -1
- package/chunks/{chunk-DHUPMYMC.js → chunk-BORX4PBQ.js} +12 -12
- package/chunks/{chunk-5IJSFWQO.js → chunk-BUZESYJT.js} +4 -4
- package/chunks/{chunk-Y4RVDOXV.js → chunk-DF7KFKCL.js} +4 -4
- package/chunks/{chunk-K2Y45XXS.js → chunk-DFOKBPH5.js} +108 -26
- package/chunks/{chunk-3SL2P3WX.js → chunk-DIHJXVT4.js} +1 -1
- package/chunks/{chunk-WAO53ZQF.js → chunk-DITDNF3D.js} +22 -2
- package/chunks/{chunk-2A6VQJYK.js → chunk-DK4HL3IB.js} +7 -7
- package/chunks/{chunk-6BJSYAML.js → chunk-DPXZUGDQ.js} +46 -21
- package/chunks/{chunk-MVHJZ3FZ.js → chunk-DZNQHKZZ.js} +2 -2
- package/chunks/{chunk-SNQZZ765.js → chunk-EB27VF5Z.js} +2 -2
- package/chunks/{chunk-KC4WMLZO.js → chunk-EXY6APEA.js} +81 -50
- package/chunks/{chunk-7VNHO4MN.js → chunk-F3FRTY4Q.js} +16 -7
- package/chunks/{chunk-FS5NGKWC.js → chunk-F5JZDC4O.js} +3 -3
- package/chunks/{chunk-6QFDQMQX.js → chunk-F7ZK5VMA.js} +1 -1
- package/chunks/{chunk-2B2BF7P7.js → chunk-FAIJ5UIU.js} +3 -3
- package/chunks/{chunk-G6KI5UOJ.js → chunk-FQ6G527Y.js} +3 -3
- package/chunks/{chunk-WSSH2BNO.js → chunk-FQZBD3PY.js} +1 -1
- package/chunks/{chunk-OVY67CYC.js → chunk-G32ESUUC.js} +1 -1
- package/chunks/{chunk-OBJYN4MX.js → chunk-G64PEZZ5.js} +2 -2
- package/chunks/{chunk-QRVHGEVY.js → chunk-GCWILQKA.js} +3 -3
- package/chunks/{chunk-QUGAUQGJ.js → chunk-GX2THELY.js} +1 -0
- package/chunks/{chunk-L3T4V5GZ.js → chunk-GYVB4P5B.js} +721 -331
- package/chunks/{chunk-FAAUPSY2.js → chunk-HEMFCAHG.js} +1 -1
- package/chunks/{chunk-AZQ3DT76.js → chunk-HGGMEDDY.js} +2 -2
- package/chunks/{chunk-SG7ZP5PG.js → chunk-HHNSO2Y4.js} +4 -4
- package/chunks/{chunk-YHXQK4SR.js → chunk-HSCPOEBL.js} +3 -3
- package/chunks/{chunk-H3SHU2XU.js → chunk-I3AB5DOZ.js} +3 -3
- package/chunks/{chunk-SFJMFZT5.js → chunk-IBUXQJHH.js} +1 -1
- package/chunks/{chunk-FN6M5WUL.js → chunk-IFOR6I5C.js} +4 -4
- package/chunks/{chunk-PHN4R2ZV.js → chunk-IU2XWUSI.js} +1 -1
- package/chunks/{chunk-OJOP26ET.js → chunk-J2LZ5OCH.js} +3 -3
- package/chunks/{chunk-4ZMS3JCR.js → chunk-JBSW7JA6.js} +83 -4
- package/chunks/{chunk-QAVTWAHL.js → chunk-JIR6JDGE.js} +3 -3
- package/chunks/{chunk-UGK4K2N2.js → chunk-JS73NNWF.js} +8 -0
- package/chunks/{chunk-2M55OBEB.js → chunk-JV443R5X.js} +1 -1
- package/chunks/{chunk-QEHH23OM.js → chunk-K6GQS2WN.js} +1 -1
- package/chunks/{chunk-6LAPGPVA.js → chunk-KCUGOZPL.js} +2 -2
- package/chunks/{chunk-KV27IEHM.js → chunk-L5JHSPET.js} +1 -1
- package/chunks/{chunk-OFTPCOGR.js → chunk-L7RG5PVT.js} +2902 -1393
- package/chunks/{chunk-TSMPNGBC.js → chunk-LBQBFRFN.js} +2 -2
- package/chunks/chunk-LJZSMWOH.js +18 -0
- package/chunks/{chunk-IA2K2HJE.js → chunk-M53UJS6H.js} +2 -2
- package/chunks/{chunk-KBXKR5R2.js → chunk-M5AIO24H.js} +1 -1
- package/chunks/{chunk-ROIYNTHJ.js → chunk-MD7XDTW7.js} +3 -3
- package/chunks/{chunk-3PWCMXIR.js → chunk-MGEWDLRO.js} +1 -1
- package/chunks/{chunk-4ZS3BLER.js → chunk-NAGJPIPW.js} +22 -7
- package/chunks/{chunk-3YRVPHT3.js → chunk-NCTHX2Z3.js} +14 -14
- package/chunks/{chunk-YP5KH5Y7.js → chunk-ND7NOI4P.js} +1 -1
- package/chunks/{chunk-4W5U2TUT.js → chunk-NGY7B7VF.js} +1 -1
- package/chunks/{chunk-S7N3HUIB.js → chunk-NMSSH43P.js} +6 -6
- package/chunks/{chunk-UYDGFWIJ.js → chunk-NYN4RD3K.js} +66 -7
- package/chunks/{chunk-DGJ7O55J.js → chunk-O327G3QW.js} +3 -3
- package/chunks/{chunk-2C6HJMG3.js → chunk-O75QDGQF.js} +3 -3
- package/chunks/{chunk-SFTKAX4O.js → chunk-OFJ6OFIT.js} +1 -1
- package/chunks/{chunk-6HY6IF3Z.js → chunk-OUYRA764.js} +1 -1
- package/chunks/{chunk-OEYAK5O6.js → chunk-OVS33JJM.js} +5 -5
- package/chunks/{chunk-VFP5YOHJ.js → chunk-PRIX4D6T.js} +6 -6
- package/chunks/{chunk-H4A72DE5.js → chunk-PTMVPFCZ.js} +1 -1
- package/chunks/{chunk-W7EYJGN7.js → chunk-PWQPWISR.js} +8 -8
- package/chunks/{chunk-QFJ5JHQR.js → chunk-PXOIRYE5.js} +1 -1
- package/chunks/{chunk-4SR45OM4.js → chunk-Q5QDZXKL.js} +1 -1
- package/chunks/{chunk-YECDICIO.js → chunk-Q6ETBOWF.js} +1 -1
- package/chunks/{chunk-WP4WIUOJ.js → chunk-QQUVPMMZ.js} +2 -2
- package/chunks/{chunk-C3T6M24E.js → chunk-RLYXWNS3.js} +3 -3
- package/chunks/{chunk-XT4RKHVE.js → chunk-RZ4PE3ER.js} +512 -24
- package/chunks/{chunk-6RDZLBSJ.js → chunk-SGKUVDBX.js} +80 -44
- package/chunks/{chunk-YZHRN3CF.js → chunk-SWOKDPS5.js} +2 -2
- package/chunks/{chunk-SLILKYV2.js → chunk-T2LUUKRI.js} +3 -3
- package/chunks/{chunk-5CVO7YES.js → chunk-U4GL4WDY.js} +1 -1
- package/chunks/{chunk-QEJZUXSK.js → chunk-U53XZHAE.js} +1 -1
- package/chunks/{chunk-XYRBK56E.js → chunk-U7U3CX4K.js} +3353 -1306
- package/chunks/{chunk-HIBNSEJE.js → chunk-UDG5EZJI.js} +0 -2
- package/chunks/{chunk-BQWNIPTE.js → chunk-V4UBYT3Y.js} +1 -1
- package/chunks/{chunk-XITLNXLX.js → chunk-VWS7DWY6.js} +3 -3
- package/chunks/{chunk-PT4I7NBA.js → chunk-VX7TFATF.js} +1 -1
- package/chunks/{chunk-VTOLYFWM.js → chunk-W3M6P3UR.js} +2 -2
- package/chunks/{chunk-CH5OFRV7.js → chunk-W4MLKRZD.js} +3 -3
- package/chunks/chunk-W5YD3QRT.js +367 -0
- package/chunks/{chunk-5IYS4WWR.js → chunk-WAPL2PHU.js} +1 -1
- package/chunks/{chunk-NRPXRNN4.js → chunk-WXFFCRKG.js} +1 -1
- package/chunks/{chunk-E3DYKPYZ.js → chunk-X7EQHW5L.js} +3 -3
- package/chunks/{chunk-BUQDLC2G.js → chunk-XFRYCCVC.js} +3 -3
- package/chunks/{chunk-DRAONPUW.js → chunk-XZ3J6E5Z.js} +2 -2
- package/chunks/{chunk-P3AA6S7O.js → chunk-Y7JGWFTK.js} +1 -1
- package/chunks/{chunk-SXCOEJO4.js → chunk-YLFFVY3G.js} +1 -1
- package/chunks/{chunk-YZOSNW4R.js → chunk-YO7PNVBJ.js} +1 -1
- package/chunks/{chunk-MDIGJH5X.js → chunk-ZL3HKVEQ.js} +4 -4
- package/chunks/{chunk-Y7QY6DKW.js → chunk-ZTLSYXFY.js} +4 -4
- package/chunks/{chunk-RWDNJBWN.js → chunk-ZUISK67X.js} +2 -2
- package/chunks/{chunk-PJSD2FOR.js → chunk-ZVJ5R5LM.js} +33 -33
- package/chunks/{chunk-XLLKYULU.js → chunk-ZWWU6KNS.js} +2 -2
- package/chunks/{computer-use-YORZJQE5.js → computer-use-34X5XJMV.js} +40 -40
- package/chunks/{config-utils-NJQA5YLJ.js → config-utils-XJTGZVY3.js} +2 -2
- package/chunks/{contextCommand-PACHGIF4.js → contextCommand-Q54VMGPA.js} +42 -42
- package/chunks/{core-runtime-6HD5DSPX.js → core-runtime-TIWTFHOR.js} +45 -44
- package/chunks/{create-sub-session-IQFIPUQA.js → create-sub-session-DPEBT657.js} +40 -40
- package/chunks/{create-sub-session-KRQULJE6.js → create-sub-session-TCKWBXEM.js} +6 -4
- package/chunks/{cron-create-NFRZEOQX.js → cron-create-PUCRMWQ6.js} +5 -5
- package/chunks/{cron-delete-GFVSVO7C.js → cron-delete-EOQR5CXU.js} +5 -5
- package/chunks/{cron-list-NRW34CLU.js → cron-list-7O22SQBF.js} +5 -5
- package/chunks/{daemon-XH76IXOC.js → daemon-JE2UIWSY.js} +304 -160
- package/chunks/{daemon-git-worktree-guard-6P27GKSU.js → daemon-git-worktree-guard-XSZ3362V.js} +40 -40
- package/chunks/daemon-status-provider-JBEST4SF.js +104 -0
- package/chunks/{daemon-trust-policy-5QJHAS3N.js → daemon-trust-policy-S6LBG4WN.js} +46 -46
- package/chunks/{daemon-trust-policy-monitor-JA2WZRZ3.js → daemon-trust-policy-monitor-NFO3OIBN.js} +46 -46
- package/chunks/{deferred-core-runtime-R2VWOVG3.js → deferred-core-runtime-Z2TLD2L7.js} +40 -40
- package/chunks/{display-image-ON3EYFRD.js → display-image-6FCICTXS.js} +5 -5
- package/chunks/{dist-IYYN3RUT.js → dist-IELOWDOT.js} +81 -17
- package/chunks/{earlyInputCapture-PQEEOFKJ.js → earlyInputCapture-KCZDAQWY.js} +41 -41
- package/chunks/{edit-RASZHTU2.js → edit-3UADXGNC.js} +41 -41
- package/chunks/{enter-worktree-CH5OMHJE.js → enter-worktree-J66YDAJE.js} +40 -40
- package/chunks/{enterPlanMode-AQKR3CAH.js → enterPlanMode-YUZUKY5F.js} +40 -40
- package/chunks/{environment-7QRYIEBA.js → environment-6IEK2353.js} +42 -42
- package/chunks/{errors-P2LL5452.js → errors-RVLRX7XI.js} +42 -42
- package/chunks/{exit-worktree-WUDL26CY.js → exit-worktree-SNMPATZE.js} +40 -40
- package/chunks/{exitPlanMode-JM75SAUI.js → exitPlanMode-DP4TURUC.js} +40 -40
- package/chunks/{fast-path-KVNSOHVA.js → fast-path-5CC6RKES.js} +2 -2
- package/chunks/{gemini-ADMD2EOS.js → gemini-F64ZP4SG.js} +83 -82
- package/chunks/{geminiContentGenerator-CS3M7SOS.js → geminiContentGenerator-KAFSMFA6.js} +7 -7
- package/chunks/{getMachineId-bsd-FG7IUY6U.js → getMachineId-bsd-LSY4WMOF.js} +1 -1
- package/chunks/{getMachineId-darwin-GLCJI2RA.js → getMachineId-darwin-JOFR4UIT.js} +1 -1
- package/chunks/{getMachineId-linux-O6OPPAKO.js → getMachineId-linux-QEDBS6GI.js} +1 -1
- package/chunks/{getMachineId-unsupported-S6CKYVGC.js → getMachineId-unsupported-IPZ3YRKP.js} +1 -1
- package/chunks/{getMachineId-win-X5SRNEH7.js → getMachineId-win-TJ2OZ7AA.js} +1 -1
- package/chunks/{glob-WIJOGYVV.js → glob-OE27ZGK4.js} +40 -40
- package/chunks/{goal-tools-K5OHOJ6B.js → goal-tools-YIADM4RZ.js} +5 -5
- package/chunks/{grep-CIFRQBR7.js → grep-VBV6BWSP.js} +40 -40
- package/chunks/{handleAutoUpdate-KJ4SN7DM.js → handleAutoUpdate-YDMS57ZN.js} +46 -44
- package/chunks/{i18n-36SZUO4C.js → i18n-JIW77MSO.js} +41 -41
- package/chunks/{image-gen-R4B5VUYB.js → image-gen-L4A2ISEH.js} +11 -11
- package/chunks/{initializer-CW5YCAOL.js → initializer-F7I7QDHK.js} +47 -47
- package/chunks/{installationInfo-NMQIOUGY.js → installationInfo-KOUBU7MH.js} +43 -41
- package/chunks/{keychain-token-storage-3XFJ5ZB2.js → keychain-token-storage-7SL4ZWQQ.js} +3 -3
- package/chunks/{list-HHGT3S4P.js → list-AJ5BRB7C.js} +49 -49
- package/chunks/{list-agents-OSVDFI6S.js → list-agents-XO4EONWC.js} +6 -6
- package/chunks/{loadedSettingsAdapter-SJ2MJF35.js → loadedSettingsAdapter-X7FC5332.js} +46 -46
- package/chunks/{loggingContentGenerator-GR2QQ2C5.js → loggingContentGenerator-5G4ZR5D5.js} +22 -22
- package/chunks/{loop-wakeup-HWVUU5CF.js → loop-wakeup-HWSTFUTQ.js} +6 -6
- package/chunks/{ls-D3HUFHDP.js → ls-52HUW4B6.js} +5 -5
- package/chunks/{lsp-3QDDJTCS.js → lsp-VJESYEC6.js} +3 -3
- package/chunks/{managed-npm-update-ADQJHKTO.js → managed-npm-update-ZR2T2ST3.js} +41 -41
- package/chunks/{mcp-QW3OTL5W.js → mcp-TZNHG7CF.js} +46 -46
- package/chunks/{monitor-RJKPVERH.js → monitor-TN6Z4SXF.js} +40 -40
- package/chunks/{nonInteractiveCli-MROMHSTL.js → nonInteractiveCli-I7K6KH5U.js} +81 -80
- package/chunks/{notebook-edit-2ENWDBZO.js → notebook-edit-77V2IP3Y.js} +40 -40
- package/chunks/{openaiContentGenerator-Z3GPWJU4.js → openaiContentGenerator-2S2UT4RR.js} +25 -26
- package/chunks/{pidfile-5G42YSTP.js → pidfile-WDSDXBY3.js} +41 -41
- package/chunks/{processUtils-ZDMXYKQY.js → processUtils-JOJNZOW4.js} +2 -2
- package/chunks/prompt-terminal-ledger-RW62JIPP.js +93 -0
- package/chunks/{qwenContentGenerator-NLEMBZVU.js → qwenContentGenerator-G3H2TCXF.js} +45 -45
- package/chunks/{qwenOAuth2-EBV52DWJ.js → qwenOAuth2-UI2OC2RN.js} +10 -10
- package/chunks/{read-file-5BYIF53O.js → read-file-DI64TNOE.js} +13 -14
- package/chunks/{read-mcp-resource-XD54ZQMC.js → read-mcp-resource-6VFF47Z3.js} +3 -3
- package/chunks/{record-artifact-GLU3UWBV.js → record-artifact-TJTN2GBV.js} +5 -5
- package/chunks/{resumeHistoryUtils-AFTBRS3G.js → resumeHistoryUtils-3FIDQ6YQ.js} +46 -46
- package/chunks/{ripGrep-NN7AOLQY.js → ripGrep-EUTGRCN3.js} +40 -40
- package/chunks/{run-qwen-serve-UR3DYDAF.js → run-qwen-serve-SQBF7QZM.js} +505 -161
- package/chunks/{runtime-PR5RKGNH.js → runtime-7QGB6SY4.js} +49 -49
- package/chunks/{scheduler-GPMLVKJM.js → scheduler-V6AZCQVU.js} +42 -42
- package/chunks/{sdk-exporters-grpc-54L4LS5L.js → sdk-exporters-grpc-P3LA24AV.js} +3 -3
- package/chunks/{sdk-exporters-http-NC746HLT.js → sdk-exporters-http-K3LH2SD7.js} +9 -11
- package/chunks/{sdk-impl-YVL7BP6Y.js → sdk-impl-WCUNMLVX.js} +11 -6
- package/chunks/{send-message-TNBG5EVA.js → send-message-NUK5DTTI.js} +7 -7
- package/chunks/{serve-E7V2JVA2.js → serve-WVNAO2NA.js} +46 -46
- package/chunks/{server-YXB3DBN7.js → server-ZMZPHJEC.js} +992 -271
- package/chunks/{session-DZEAUT7S.js → session-JV74G6EZ.js} +82 -81
- package/chunks/{settings-ESZ3NWAP.js → settings-GBBVKBQ2.js} +45 -45
- package/chunks/{shell-JMSK5WIL.js → shell-JNNRUZPA.js} +40 -40
- package/chunks/{skill-5K5CSUJV.js → skill-JRGRCWD5.js} +18 -18
- package/chunks/{skill-settings-V64NIOTI.js → skill-settings-VEC7C44Z.js} +45 -45
- package/chunks/{spawnChannel-S63APBZZ.js → spawnChannel-TVKIFXXA.js} +42 -42
- package/chunks/{standalone-update-P42HDFXX.js → standalone-update-OSHF2CX3.js} +42 -42
- package/chunks/{startInteractiveUI-LFBLFHJ4.js → startInteractiveUI-2HTUHVQO.js} +310 -156
- package/chunks/{syntheticOutput-7GWFIDXT.js → syntheticOutput-GZV6O6UL.js} +4 -4
- package/chunks/{task-create-EILHJJB7.js → task-create-BXGKNND4.js} +11 -11
- package/chunks/{task-list-WGJR6YL5.js → task-list-4ZMIDYGD.js} +6 -6
- package/chunks/{task-stop-X37KYTKB.js → task-stop-WBO7LWTS.js} +3 -3
- package/chunks/{task-update-XZAHVXJ5.js → task-update-UFO3BI7O.js} +11 -11
- package/chunks/{team-create-EDNOUM2U.js → team-create-DTPGJ6RH.js} +40 -40
- package/chunks/{team-delete-UEP4QOOT.js → team-delete-OCFJS444.js} +6 -6
- package/chunks/{team-plan-approval-QRSNK2DX.js → team-plan-approval-4433RWHB.js} +40 -40
- package/chunks/{terminal-image-renderer-6J2NPL32.js → terminal-image-renderer-QZLIKIVA.js} +42 -42
- package/chunks/{theme-manager-WJMLRBXS.js → theme-manager-RM7C7Q3L.js} +41 -41
- package/chunks/{todoWrite-ATS62CAP.js → todoWrite-BGM5MCPY.js} +5 -5
- package/chunks/{tool-search-MZ6WU7DM.js → tool-search-4NQJASFC.js} +17 -18
- package/chunks/{total-session-admission-DQVW2LIP.js → total-session-admission-NZNCU5NU.js} +46 -45
- package/chunks/{trustedFolders-QMH25GOX.js → trustedFolders-FDJ2Q4ZK.js} +41 -41
- package/chunks/{update-relaunch-EG75LLW5.js → update-relaunch-HZMDPRTF.js} +5 -5
- package/chunks/{updateCheck-MTZIVGT5.js → updateCheck-ZB2CRVVG.js} +43 -43
- package/chunks/{useAutoAcceptIndicator-IGCW5EPO.js → useAutoAcceptIndicator-O3JI4KTR.js} +48 -48
- package/chunks/{validateNonInterActiveAuth-D5FPAB2C.js → validateNonInterActiveAuth-7Z4KG4N5.js} +78 -77
- package/chunks/{version-UOLDLLRB.js → version-RFVS6QDY.js} +1 -1
- package/chunks/{web-fetch-QKKW6CWH.js → web-fetch-RAN377BH.js} +17 -18
- package/chunks/{web-search-JYRBZMCW.js → web-search-XKS6ZPY7.js} +10 -10
- package/chunks/{workflow-SR7SEAU7.js → workflow-HF6G5XNX.js} +232 -73
- package/chunks/{workspace-providers-status-OXGV4EFF.js → workspace-providers-status-LNMP7NED.js} +49 -49
- package/chunks/{workspace-registration-store-V5EGKLBH.js → workspace-registration-store-QZ3P3ILN.js} +1 -1
- package/chunks/{workspace-registry-KJVIYTF5.js → workspace-registry-KWPGC2LG.js} +46 -45
- package/chunks/{workspace-service-6RLSGUB5.js → workspace-service-RWB4KMY3.js} +51 -51
- package/chunks/{workspace-skills-status-BHFEPDGH.js → workspace-skills-status-P3XXZY7C.js} +47 -47
- package/chunks/{workspace-trust-reconciler-DB5ERSUN.js → workspace-trust-reconciler-XU6WB2MF.js} +52 -51
- package/chunks/{write-file-IUP4GTZ4.js → write-file-V7Y6KUPR.js} +40 -40
- package/chunks/{zoom-image-SRBDTIVA.js → zoom-image-N4RSASH7.js} +13 -14
- package/cli.js +13 -13
- package/package.json +3 -3
- package/web-shell/assets/{arc-DItbX0DI.js → arc-CN-xeqBM.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-CmnIlH8y.js → architectureDiagram-3BPJPVTR-XQJ6hBnv.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-pObnB9kw.js → blockDiagram-GPEHLZMM-n35AKogw.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-BNBmMS0Y.js → c4Diagram-AAUBKEIU-DXeDVokb.js} +1 -1
- package/web-shell/assets/channel-BdTBh3qf.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-Dz4JBOO6.js → chunk-2J33WTMH-BYcmYjz_.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-Cz2GnvAR.js → chunk-4BX2VUAB-w3UyeGtt.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-CC6kOQYx.js → chunk-55IACEB6-Td3JbOH_.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-Z4lY4gbh.js → chunk-727SXJPM-gC_NR7u6.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-Yz0hZr3D.js → chunk-AQP2D5EJ-aD7bI3c3.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4-nKmTWTv9.js → chunk-FMBD7UC4-sHMhD16X.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-CjZz0f6Y.js → chunk-ND2GUHAM-DiV49BLl.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-Bab3FpuS.js → chunk-QZHKN3VN-Dnoagqin.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-qVxLMMuK.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-qVxLMMuK.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BuSAGFox.js → cose-bilkent-S5V4N54A-K6l_zsrZ.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-CRZXTg3g.js → dagre-BM42HDAG-Chh9hQ0a.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-BFx1Ayrz.js → diagram-2AECGRRQ-Clrbd8SB.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-B2hMZ3gS.js → diagram-5GNKFQAL-BkNExywD.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-DKxAQLmc.js → diagram-KO2AKTUF-kTX14ngI.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-Bo1xGqVY.js → diagram-LMA3HP47-Ba1QOCJy.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-B9NG78d-.js → diagram-OG6HWLK6-CtH5BVYm.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-DltQKiqQ.js → erDiagram-TEJ5UH35-DCxSIC83.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-5xXGmS4I.js → flowDiagram-I6XJVG4X-C4rNAypQ.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-bhGL5n0l.js → ganttDiagram-6RSMTGT7-s3P5tBwL.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-ZYnz9hgh.js → gitGraphDiagram-PVQCEYII-C7Eg-1ok.js} +1 -1
- package/web-shell/assets/index-BXoIYIJg.css +5 -0
- package/web-shell/assets/{index-CBBeUArD.js → index-CszoC8cN.js} +1 -1
- package/web-shell/assets/index-Dxj7Naa0.js +1788 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-Cg-jamQf.js → infoDiagram-5YYISTIA-BDKsgMt6.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-CcmvKlyq.js → ishikawaDiagram-YF4QCWOH-CkcSHbvL.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-BRsOQZp1.js → journeyDiagram-JHISSGLW-CDWt-t81.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-xW-dmEHK.js → kanban-definition-UN3LZRKU-FI2owcEa.js} +1 -1
- package/web-shell/assets/{linear-ClBfEZH2.js → linear-BQzLqkJi.js} +1 -1
- package/web-shell/assets/{mermaid.core-D65NDkzc.js → mermaid.core-CvV91DP1.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-CyvFslYa.js → mindmap-definition-RKZ34NQL-Dx2kLUpN.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-BwSefMyG.js → pieDiagram-4H26LBE5-CMXOmBrj.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-GqBJspFS.js → quadrantDiagram-W4KKPZXB-Bziww7Co.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-B137PlTJ.js → requirementDiagram-4Y6WPE33-DMOXAxzp.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-maHkkt8i.js → sankeyDiagram-5OEKKPKP-B3y1cfVV.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-DJ1mRaG3.js → sequenceDiagram-3UESZ5HK-ChrV1jiM.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-aRmP7Q4i.js → stateDiagram-AJRCARHV-CWuLzLFE.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-DEDPMLgq.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-CIQ3BRPA.js → timeline-definition-PNZ67QCA-Cl6am_to.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-DR9VPd5h.js → vennDiagram-CIIHVFJN-OuocxGAu.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-ZcfIbT4D.js → wardley-L42UT6IY-DLYdvSJW.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-D0jgPi4T.js → wardleyDiagram-YWT4CUSO-7a3DreXX.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-BGWU4s5o.js → xychartDiagram-2RQKCTM6-CgfjUxW_.js} +1 -1
- package/web-shell/index.html +2 -2
- package/chunks/chunk-D34RDOLP.js +0 -529
- package/chunks/daemon-status-provider-SXS66ZIR.js +0 -103
- package/web-shell/assets/channel-hZnMfWA9.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BRnxm8DX.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BRnxm8DX.js +0 -1
- package/web-shell/assets/index-CbgU-jUo.css +0 -5
- package/web-shell/assets/index-_nhzXqab.js +0 -1750
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-Db39gvZ_.js +0 -1
|
@@ -36,10 +36,11 @@ import {
|
|
|
36
36
|
resolveAcpHttpEnabled,
|
|
37
37
|
setDeferredRuntimeRequestTiming,
|
|
38
38
|
toDaemonStatusMemoryLimits
|
|
39
|
-
} from "./chunk-
|
|
39
|
+
} from "./chunk-NYN4RD3K.js";
|
|
40
40
|
import "./chunk-VGHZT6JR.js";
|
|
41
41
|
import {
|
|
42
|
-
isLoopbackBind
|
|
42
|
+
isLoopbackBind,
|
|
43
|
+
normalizeSessionIdForLookup
|
|
43
44
|
} from "./chunk-TQOF5KBL.js";
|
|
44
45
|
import {
|
|
45
46
|
formatMemoryBudgetStderr,
|
|
@@ -81,17 +82,17 @@ import {
|
|
|
81
82
|
MAX_REGISTERED_WORKSPACES,
|
|
82
83
|
resolveWorkspaceInputs,
|
|
83
84
|
workspaceRegistrationId
|
|
84
|
-
} from "./chunk-
|
|
85
|
-
import "./chunk-
|
|
85
|
+
} from "./chunk-OFJ6OFIT.js";
|
|
86
|
+
import "./chunk-W4MLKRZD.js";
|
|
86
87
|
import {
|
|
87
88
|
LOAD_REPLAY_META_KEY
|
|
88
|
-
} from "./chunk-
|
|
89
|
+
} from "./chunk-QQUVPMMZ.js";
|
|
89
90
|
import "./chunk-624NHDGB.js";
|
|
90
91
|
import {
|
|
91
92
|
canonicalizeWorkspace,
|
|
92
93
|
translateAndCheckAbsoluteWorkspacePath
|
|
93
94
|
} from "./chunk-6PLDPT2C.js";
|
|
94
|
-
import "./chunk-
|
|
95
|
+
import "./chunk-NGY7B7VF.js";
|
|
95
96
|
import "./chunk-FYJ7W2PI.js";
|
|
96
97
|
import "./chunk-Z7B6SRPM.js";
|
|
97
98
|
import {
|
|
@@ -99,7 +100,7 @@ import {
|
|
|
99
100
|
ChannelWebhookEnqueueError,
|
|
100
101
|
QWEN_SERVER_TOKEN_ENV,
|
|
101
102
|
isChannelDeliveryError
|
|
102
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-ND7NOI4P.js";
|
|
103
104
|
import {
|
|
104
105
|
normalizeWorkerDiagnostic,
|
|
105
106
|
sanitizeWorkerDiagnostic
|
|
@@ -107,7 +108,7 @@ import {
|
|
|
107
108
|
import {
|
|
108
109
|
channelSelectionNames
|
|
109
110
|
} from "./chunk-ALMR3E6Q.js";
|
|
110
|
-
import "./chunk-
|
|
111
|
+
import "./chunk-UDG5EZJI.js";
|
|
111
112
|
import "./chunk-M5GB774H.js";
|
|
112
113
|
import {
|
|
113
114
|
EXTERNAL_TOOL_GUARD_PROVIDER_ATTACHED_VALUE,
|
|
@@ -136,12 +137,13 @@ import {
|
|
|
136
137
|
} from "./chunk-CXJHQVEK.js";
|
|
137
138
|
import {
|
|
138
139
|
getCliVersion
|
|
139
|
-
} from "./chunk-
|
|
140
|
+
} from "./chunk-3X6KVX37.js";
|
|
140
141
|
import "./chunk-WZMH7II3.js";
|
|
141
142
|
import "./chunk-NPQ5ZKRP.js";
|
|
142
143
|
import {
|
|
143
144
|
isWithinRoot
|
|
144
145
|
} from "./chunk-MR3PXB6E.js";
|
|
146
|
+
import "./chunk-LJZSMWOH.js";
|
|
145
147
|
import "./chunk-GOFAQQZA.js";
|
|
146
148
|
import "./chunk-5M6IDOMF.js";
|
|
147
149
|
import "./chunk-TWPJO254.js";
|
|
@@ -167,7 +169,7 @@ import {
|
|
|
167
169
|
init_esm,
|
|
168
170
|
isSpanContextValid,
|
|
169
171
|
trace
|
|
170
|
-
} from "./chunk-
|
|
172
|
+
} from "./chunk-GX2THELY.js";
|
|
171
173
|
import {
|
|
172
174
|
init_esbuild_shims
|
|
173
175
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -1388,7 +1390,7 @@ function createConcreteLogger(input) {
|
|
|
1388
1390
|
}
|
|
1389
1391
|
});
|
|
1390
1392
|
let timeout;
|
|
1391
|
-
const deadline = new Promise((
|
|
1393
|
+
const deadline = new Promise((resolve4) => {
|
|
1392
1394
|
timeout = setTimeout(() => {
|
|
1393
1395
|
try {
|
|
1394
1396
|
input.warnOnce(
|
|
@@ -1397,7 +1399,7 @@ function createConcreteLogger(input) {
|
|
|
1397
1399
|
);
|
|
1398
1400
|
} catch {
|
|
1399
1401
|
} finally {
|
|
1400
|
-
|
|
1402
|
+
resolve4();
|
|
1401
1403
|
}
|
|
1402
1404
|
}, input.policy.closeDrainBudgetMs);
|
|
1403
1405
|
timeout.unref();
|
|
@@ -1743,61 +1745,81 @@ __name(initDaemonLogger, "initDaemonLogger");
|
|
|
1743
1745
|
|
|
1744
1746
|
// packages/cli/src/serve/conversations/conversation-workspace.ts
|
|
1745
1747
|
init_esbuild_shims();
|
|
1746
|
-
import {
|
|
1747
|
-
import { lstat, mkdir, realpath, rmdir } from "node:fs/promises";
|
|
1748
|
+
import { readdir, rmdir } from "node:fs/promises";
|
|
1748
1749
|
import { homedir } from "node:os";
|
|
1750
|
+
import { resolve as resolve2 } from "node:path";
|
|
1751
|
+
|
|
1752
|
+
// packages/cli/src/utils/conversation-directory-identity.ts
|
|
1753
|
+
init_esbuild_shims();
|
|
1754
|
+
import { createHash as createHash2 } from "node:crypto";
|
|
1755
|
+
import { lstat, mkdir, realpath } from "node:fs/promises";
|
|
1749
1756
|
import { isAbsolute, join as join2, relative as relative2, resolve, sep } from "node:path";
|
|
1750
|
-
|
|
1751
|
-
|
|
1752
|
-
|
|
1753
|
-
|
|
1757
|
+
function hasVerifiableInode(ino) {
|
|
1758
|
+
return Number(ino) !== 0;
|
|
1759
|
+
}
|
|
1760
|
+
__name(hasVerifiableInode, "hasVerifiableInode");
|
|
1761
|
+
var ConversationDirectoryIdentityError = class extends Error {
|
|
1762
|
+
constructor(scope, reason, cause) {
|
|
1763
|
+
super(
|
|
1764
|
+
`Conversation ${scope} identity validation failed: ${reason}`,
|
|
1765
|
+
cause !== void 0 ? { cause } : void 0
|
|
1766
|
+
);
|
|
1767
|
+
this.scope = scope;
|
|
1768
|
+
this.reason = reason;
|
|
1754
1769
|
}
|
|
1755
|
-
|
|
1770
|
+
static {
|
|
1771
|
+
__name(this, "ConversationDirectoryIdentityError");
|
|
1772
|
+
}
|
|
1773
|
+
name = "ConversationDirectoryIdentityError";
|
|
1774
|
+
};
|
|
1775
|
+
function throwIdentityIoError(scope, cause) {
|
|
1776
|
+
throw new ConversationDirectoryIdentityError(scope, "io_error", cause);
|
|
1756
1777
|
}
|
|
1757
|
-
__name(
|
|
1758
|
-
|
|
1778
|
+
__name(throwIdentityIoError, "throwIdentityIoError");
|
|
1779
|
+
var isSameConversationPath = /* @__PURE__ */ __name((left, right) => process.platform === "win32" ? left.toLowerCase() === right.toLowerCase() : left === right, "isSameConversationPath");
|
|
1780
|
+
function getConversationDirectoryName(storageSessionId) {
|
|
1781
|
+
if (storageSessionId.length === 0 || storageSessionId.length > 256) {
|
|
1782
|
+
throw new ConversationDirectoryIdentityError("child", "invalid_session_id");
|
|
1783
|
+
}
|
|
1784
|
+
return `conversation-${createHash2("sha256").update(storageSessionId).digest("hex")}`;
|
|
1785
|
+
}
|
|
1786
|
+
__name(getConversationDirectoryName, "getConversationDirectoryName");
|
|
1787
|
+
function validateDirectoryStats(stats, scope) {
|
|
1759
1788
|
if (stats.isSymbolicLink() || !stats.isDirectory()) {
|
|
1760
|
-
throw new
|
|
1761
|
-
`Live conversation ${label} must be a non-symlink directory`
|
|
1762
|
-
);
|
|
1789
|
+
throw new ConversationDirectoryIdentityError(scope, "not_directory");
|
|
1763
1790
|
}
|
|
1764
1791
|
if (process.platform !== "win32" && typeof process.getuid === "function" && stats.uid !== process.getuid()) {
|
|
1765
|
-
throw new
|
|
1766
|
-
`Live conversation ${label} must be owned by the daemon user`
|
|
1767
|
-
);
|
|
1792
|
+
throw new ConversationDirectoryIdentityError(scope, "wrong_owner");
|
|
1768
1793
|
}
|
|
1769
1794
|
if (process.platform !== "win32" && (stats.mode & 63) !== 0) {
|
|
1770
|
-
throw new
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
|
|
1775
|
-
|
|
1776
|
-
|
|
1777
|
-
|
|
1778
|
-
|
|
1779
|
-
|
|
1780
|
-
|
|
1781
|
-
|
|
1782
|
-
|
|
1783
|
-
|
|
1784
|
-
|
|
1785
|
-
|
|
1786
|
-
|
|
1787
|
-
|
|
1788
|
-
|
|
1789
|
-
|
|
1790
|
-
|
|
1791
|
-
|
|
1792
|
-
|
|
1793
|
-
|
|
1794
|
-
|
|
1795
|
-
|
|
1796
|
-
|
|
1797
|
-
|
|
1798
|
-
}
|
|
1799
|
-
__name(getConversationRootPath, "getConversationRootPath");
|
|
1800
|
-
async function createRoot(configuredRoot) {
|
|
1795
|
+
throw new ConversationDirectoryIdentityError(scope, "wrong_mode");
|
|
1796
|
+
}
|
|
1797
|
+
}
|
|
1798
|
+
__name(validateDirectoryStats, "validateDirectoryStats");
|
|
1799
|
+
function hasRootIdentity(stats, root) {
|
|
1800
|
+
if (!root.inodeVerifiable) return stats.dev === root.device;
|
|
1801
|
+
return hasVerifiableInode(stats.ino) && stats.dev === root.device && stats.ino === root.inode;
|
|
1802
|
+
}
|
|
1803
|
+
__name(hasRootIdentity, "hasRootIdentity");
|
|
1804
|
+
function isSameDirectoryIdentity(before, after) {
|
|
1805
|
+
if (!hasVerifiableInode(before.ino) || !hasVerifiableInode(after.ino)) {
|
|
1806
|
+
return before.dev === after.dev;
|
|
1807
|
+
}
|
|
1808
|
+
return before.dev === after.dev && before.ino === after.ino;
|
|
1809
|
+
}
|
|
1810
|
+
__name(isSameDirectoryIdentity, "isSameDirectoryIdentity");
|
|
1811
|
+
function hasExpectedDirectoryIdentity(identity, expected) {
|
|
1812
|
+
const inodesProvable = hasVerifiableInode(identity.inode) && hasVerifiableInode(expected.inode);
|
|
1813
|
+
return identity.storageSessionId === expected.storageSessionId && identity.name === expected.name && isSameConversationPath(identity.canonicalPath, expected.canonicalPath) && identity.device === expected.device && (!inodesProvable || identity.inode === expected.inode) && isSameConversationPath(
|
|
1814
|
+
identity.root.configuredRoot,
|
|
1815
|
+
expected.root.configuredRoot
|
|
1816
|
+
) && isSameConversationPath(
|
|
1817
|
+
identity.root.canonicalRoot,
|
|
1818
|
+
expected.root.canonicalRoot
|
|
1819
|
+
) && identity.root.device === expected.root.device && (!identity.root.inodeVerifiable || !expected.root.inodeVerifiable || identity.root.inode === expected.root.inode);
|
|
1820
|
+
}
|
|
1821
|
+
__name(hasExpectedDirectoryIdentity, "hasExpectedDirectoryIdentity");
|
|
1822
|
+
async function createConversationRootIdentity(configuredRoot) {
|
|
1801
1823
|
try {
|
|
1802
1824
|
await mkdir(configuredRoot, { recursive: true, mode: 448 });
|
|
1803
1825
|
} catch (error) {
|
|
@@ -1805,61 +1827,246 @@ async function createRoot(configuredRoot) {
|
|
|
1805
1827
|
try {
|
|
1806
1828
|
existing = await lstat(configuredRoot);
|
|
1807
1829
|
} catch {
|
|
1808
|
-
|
|
1830
|
+
throwIdentityIoError("root", error);
|
|
1809
1831
|
}
|
|
1810
|
-
|
|
1811
|
-
|
|
1832
|
+
validateDirectoryStats(existing, "root");
|
|
1833
|
+
throwIdentityIoError("root", error);
|
|
1812
1834
|
}
|
|
1813
|
-
|
|
1814
|
-
|
|
1815
|
-
|
|
1816
|
-
|
|
1817
|
-
|
|
1818
|
-
|
|
1819
|
-
|
|
1820
|
-
|
|
1821
|
-
|
|
1835
|
+
let before;
|
|
1836
|
+
try {
|
|
1837
|
+
before = await lstat(configuredRoot);
|
|
1838
|
+
} catch (error) {
|
|
1839
|
+
throwIdentityIoError("root", error);
|
|
1840
|
+
}
|
|
1841
|
+
validateDirectoryStats(before, "root");
|
|
1842
|
+
let canonicalRoot;
|
|
1843
|
+
let after;
|
|
1844
|
+
try {
|
|
1845
|
+
canonicalRoot = await realpath(configuredRoot);
|
|
1846
|
+
after = await lstat(canonicalRoot);
|
|
1847
|
+
} catch (error) {
|
|
1848
|
+
throwIdentityIoError("root", error);
|
|
1849
|
+
}
|
|
1850
|
+
validateDirectoryStats(after, "root");
|
|
1851
|
+
if (!isSameDirectoryIdentity(before, after)) {
|
|
1852
|
+
throw new ConversationDirectoryIdentityError("root", "identity_changed");
|
|
1822
1853
|
}
|
|
1823
1854
|
return {
|
|
1824
1855
|
configuredRoot,
|
|
1825
1856
|
canonicalRoot,
|
|
1826
1857
|
device: after.dev,
|
|
1827
|
-
inode: after.ino
|
|
1858
|
+
inode: after.ino,
|
|
1859
|
+
inodeVerifiable: hasVerifiableInode(after.ino)
|
|
1828
1860
|
};
|
|
1829
1861
|
}
|
|
1830
|
-
__name(
|
|
1831
|
-
async function
|
|
1832
|
-
|
|
1833
|
-
|
|
1834
|
-
|
|
1835
|
-
|
|
1862
|
+
__name(createConversationRootIdentity, "createConversationRootIdentity");
|
|
1863
|
+
async function revalidateConversationRootIdentity(root) {
|
|
1864
|
+
let configuredStats;
|
|
1865
|
+
try {
|
|
1866
|
+
configuredStats = await lstat(root.configuredRoot);
|
|
1867
|
+
} catch (error) {
|
|
1868
|
+
throwIdentityIoError("root", error);
|
|
1869
|
+
}
|
|
1870
|
+
validateDirectoryStats(configuredStats, "root");
|
|
1871
|
+
if (!hasRootIdentity(configuredStats, root)) {
|
|
1872
|
+
throw new ConversationDirectoryIdentityError("root", "identity_changed");
|
|
1873
|
+
}
|
|
1874
|
+
let canonical;
|
|
1875
|
+
try {
|
|
1876
|
+
canonical = await realpath(root.configuredRoot);
|
|
1877
|
+
} catch (error) {
|
|
1878
|
+
throwIdentityIoError("root", error);
|
|
1879
|
+
}
|
|
1880
|
+
if (!isSameConversationPath(canonical, root.canonicalRoot)) {
|
|
1881
|
+
throw new ConversationDirectoryIdentityError(
|
|
1882
|
+
"root",
|
|
1883
|
+
"canonical_path_changed"
|
|
1884
|
+
);
|
|
1836
1885
|
}
|
|
1837
|
-
|
|
1838
|
-
|
|
1839
|
-
|
|
1886
|
+
let canonicalStats;
|
|
1887
|
+
try {
|
|
1888
|
+
canonicalStats = await lstat(root.canonicalRoot);
|
|
1889
|
+
} catch (error) {
|
|
1890
|
+
throwIdentityIoError("root", error);
|
|
1840
1891
|
}
|
|
1841
|
-
|
|
1842
|
-
|
|
1843
|
-
|
|
1844
|
-
throw new Error("Live conversation root identity changed");
|
|
1892
|
+
validateDirectoryStats(canonicalStats, "root");
|
|
1893
|
+
if (!hasRootIdentity(canonicalStats, root)) {
|
|
1894
|
+
throw new ConversationDirectoryIdentityError("root", "identity_changed");
|
|
1845
1895
|
}
|
|
1846
1896
|
return root;
|
|
1847
1897
|
}
|
|
1848
|
-
__name(
|
|
1849
|
-
async function
|
|
1850
|
-
await
|
|
1898
|
+
__name(revalidateConversationRootIdentity, "revalidateConversationRootIdentity");
|
|
1899
|
+
async function assertExactConversationRootIdentity(root, candidate) {
|
|
1900
|
+
await revalidateConversationRootIdentity(root);
|
|
1851
1901
|
const resolvedCandidate = resolve(candidate);
|
|
1852
|
-
if (!
|
|
1853
|
-
throw new
|
|
1902
|
+
if (!isSameConversationPath(resolvedCandidate, root.configuredRoot) && !isSameConversationPath(resolvedCandidate, root.canonicalRoot)) {
|
|
1903
|
+
throw new ConversationDirectoryIdentityError("root", "unexpected_identity");
|
|
1854
1904
|
}
|
|
1855
|
-
|
|
1856
|
-
|
|
1857
|
-
|
|
1858
|
-
|
|
1859
|
-
|
|
1905
|
+
let stats;
|
|
1906
|
+
let canonical;
|
|
1907
|
+
try {
|
|
1908
|
+
stats = await lstat(resolvedCandidate);
|
|
1909
|
+
validateDirectoryStats(stats, "root");
|
|
1910
|
+
canonical = await realpath(resolvedCandidate);
|
|
1911
|
+
} catch (error) {
|
|
1912
|
+
if (error instanceof ConversationDirectoryIdentityError) throw error;
|
|
1913
|
+
throwIdentityIoError("root", error);
|
|
1914
|
+
}
|
|
1915
|
+
if (!isSameConversationPath(canonical, root.canonicalRoot) || !hasRootIdentity(stats, root)) {
|
|
1916
|
+
throw new ConversationDirectoryIdentityError("root", "unexpected_identity");
|
|
1860
1917
|
}
|
|
1861
1918
|
return root;
|
|
1862
1919
|
}
|
|
1920
|
+
__name(assertExactConversationRootIdentity, "assertExactConversationRootIdentity");
|
|
1921
|
+
async function inspectConversationDirectoryIdentity(root, storageSessionId, expected) {
|
|
1922
|
+
await revalidateConversationRootIdentity(root);
|
|
1923
|
+
const name = getConversationDirectoryName(storageSessionId);
|
|
1924
|
+
const candidate = join2(root.canonicalRoot, name);
|
|
1925
|
+
let before;
|
|
1926
|
+
try {
|
|
1927
|
+
before = await lstat(candidate);
|
|
1928
|
+
} catch (error) {
|
|
1929
|
+
if (error.code === "ENOENT") return void 0;
|
|
1930
|
+
throwIdentityIoError("child", error);
|
|
1931
|
+
}
|
|
1932
|
+
validateDirectoryStats(before, "child");
|
|
1933
|
+
let canonical;
|
|
1934
|
+
let after;
|
|
1935
|
+
try {
|
|
1936
|
+
canonical = await realpath(candidate);
|
|
1937
|
+
after = await lstat(canonical);
|
|
1938
|
+
} catch (error) {
|
|
1939
|
+
if (error.code === "ENOENT") {
|
|
1940
|
+
throw new ConversationDirectoryIdentityError("child", "identity_changed");
|
|
1941
|
+
}
|
|
1942
|
+
throwIdentityIoError("child", error);
|
|
1943
|
+
}
|
|
1944
|
+
validateDirectoryStats(after, "child");
|
|
1945
|
+
const child = relative2(root.canonicalRoot, canonical);
|
|
1946
|
+
if (child !== name || child.includes(sep) || child.startsWith("..") || isAbsolute(child)) {
|
|
1947
|
+
throw new ConversationDirectoryIdentityError("child", "not_direct_child");
|
|
1948
|
+
}
|
|
1949
|
+
if (!isSameDirectoryIdentity(before, after)) {
|
|
1950
|
+
throw new ConversationDirectoryIdentityError("child", "identity_changed");
|
|
1951
|
+
}
|
|
1952
|
+
await revalidateConversationRootIdentity(root);
|
|
1953
|
+
const identity = {
|
|
1954
|
+
root,
|
|
1955
|
+
storageSessionId,
|
|
1956
|
+
name,
|
|
1957
|
+
canonicalPath: canonical,
|
|
1958
|
+
device: after.dev,
|
|
1959
|
+
inode: after.ino
|
|
1960
|
+
};
|
|
1961
|
+
if (expected && !hasExpectedDirectoryIdentity(identity, expected)) {
|
|
1962
|
+
throw new ConversationDirectoryIdentityError(
|
|
1963
|
+
"child",
|
|
1964
|
+
"unexpected_identity"
|
|
1965
|
+
);
|
|
1966
|
+
}
|
|
1967
|
+
return identity;
|
|
1968
|
+
}
|
|
1969
|
+
__name(inspectConversationDirectoryIdentity, "inspectConversationDirectoryIdentity");
|
|
1970
|
+
async function materializeConversationDirectoryIdentity(root, storageSessionId) {
|
|
1971
|
+
await revalidateConversationRootIdentity(root);
|
|
1972
|
+
const name = getConversationDirectoryName(storageSessionId);
|
|
1973
|
+
const candidate = join2(root.canonicalRoot, name);
|
|
1974
|
+
let created = false;
|
|
1975
|
+
try {
|
|
1976
|
+
await mkdir(candidate, { mode: 448 });
|
|
1977
|
+
created = true;
|
|
1978
|
+
} catch (error) {
|
|
1979
|
+
if (error.code !== "EEXIST") {
|
|
1980
|
+
throwIdentityIoError("child", error);
|
|
1981
|
+
}
|
|
1982
|
+
}
|
|
1983
|
+
const identity = await inspectConversationDirectoryIdentity(
|
|
1984
|
+
root,
|
|
1985
|
+
storageSessionId
|
|
1986
|
+
);
|
|
1987
|
+
if (!identity) {
|
|
1988
|
+
throw new ConversationDirectoryIdentityError("child", "identity_changed");
|
|
1989
|
+
}
|
|
1990
|
+
return { identity, created };
|
|
1991
|
+
}
|
|
1992
|
+
__name(materializeConversationDirectoryIdentity, "materializeConversationDirectoryIdentity");
|
|
1993
|
+
|
|
1994
|
+
// packages/cli/src/serve/conversations/conversation-workspace.ts
|
|
1995
|
+
function liveIdentityError(error, exactRoot = false, creatingRoot = false) {
|
|
1996
|
+
if (!(error instanceof ConversationDirectoryIdentityError)) throw error;
|
|
1997
|
+
if (error.reason === "io_error" && error.cause !== void 0) {
|
|
1998
|
+
throw error.cause;
|
|
1999
|
+
}
|
|
2000
|
+
if (error.scope === "root") {
|
|
2001
|
+
switch (error.reason) {
|
|
2002
|
+
case "not_directory":
|
|
2003
|
+
throw new Error(
|
|
2004
|
+
"Live conversation root must be a non-symlink directory"
|
|
2005
|
+
);
|
|
2006
|
+
case "wrong_owner":
|
|
2007
|
+
throw new Error(
|
|
2008
|
+
"Live conversation root must be owned by the daemon user"
|
|
2009
|
+
);
|
|
2010
|
+
case "wrong_mode":
|
|
2011
|
+
throw new Error(
|
|
2012
|
+
"Live conversation root must be accessible only to its owner"
|
|
2013
|
+
);
|
|
2014
|
+
case "canonical_path_changed":
|
|
2015
|
+
throw new Error("Live conversation root canonical path changed");
|
|
2016
|
+
case "identity_changed":
|
|
2017
|
+
throw new Error(
|
|
2018
|
+
creatingRoot ? "Live conversation root identity changed during validation" : "Live conversation root identity changed"
|
|
2019
|
+
);
|
|
2020
|
+
case "unexpected_identity":
|
|
2021
|
+
if (exactRoot) {
|
|
2022
|
+
throw new Error("Workspace must be the exact Live conversation root");
|
|
2023
|
+
}
|
|
2024
|
+
throw new Error("Live conversation root identity changed");
|
|
2025
|
+
default:
|
|
2026
|
+
throw new Error("Live conversation root identity changed");
|
|
2027
|
+
}
|
|
2028
|
+
}
|
|
2029
|
+
switch (error.reason) {
|
|
2030
|
+
case "invalid_session_id":
|
|
2031
|
+
throw new Error("Live conversation session id is invalid");
|
|
2032
|
+
case "not_directory":
|
|
2033
|
+
throw new Error(
|
|
2034
|
+
"Live conversation directory must be a non-symlink directory"
|
|
2035
|
+
);
|
|
2036
|
+
case "wrong_owner":
|
|
2037
|
+
throw new Error(
|
|
2038
|
+
"Live conversation directory must be owned by the daemon user"
|
|
2039
|
+
);
|
|
2040
|
+
case "wrong_mode":
|
|
2041
|
+
throw new Error(
|
|
2042
|
+
"Live conversation directory must be accessible only to its owner"
|
|
2043
|
+
);
|
|
2044
|
+
default:
|
|
2045
|
+
throw new Error(
|
|
2046
|
+
"Live conversation directory must be an owned direct child"
|
|
2047
|
+
);
|
|
2048
|
+
}
|
|
2049
|
+
}
|
|
2050
|
+
__name(liveIdentityError, "liveIdentityError");
|
|
2051
|
+
function getConversationRootPath(homeDir = homedir()) {
|
|
2052
|
+
return resolve2(homeDir, "Documents", "Qwen Code", "Conversations");
|
|
2053
|
+
}
|
|
2054
|
+
__name(getConversationRootPath, "getConversationRootPath");
|
|
2055
|
+
async function revalidateConversationRoot(root) {
|
|
2056
|
+
try {
|
|
2057
|
+
return await revalidateConversationRootIdentity(root);
|
|
2058
|
+
} catch (error) {
|
|
2059
|
+
liveIdentityError(error);
|
|
2060
|
+
}
|
|
2061
|
+
}
|
|
2062
|
+
__name(revalidateConversationRoot, "revalidateConversationRoot");
|
|
2063
|
+
async function assertExactConversationRoot(root, candidate) {
|
|
2064
|
+
try {
|
|
2065
|
+
return await assertExactConversationRootIdentity(root, candidate);
|
|
2066
|
+
} catch (error) {
|
|
2067
|
+
liveIdentityError(error, true);
|
|
2068
|
+
}
|
|
2069
|
+
}
|
|
1863
2070
|
__name(assertExactConversationRoot, "assertExactConversationRoot");
|
|
1864
2071
|
var ConversationWorkspace = class {
|
|
1865
2072
|
static {
|
|
@@ -1870,9 +2077,9 @@ var ConversationWorkspace = class {
|
|
|
1870
2077
|
constructor(options = {}) {
|
|
1871
2078
|
this.rootPath = getConversationRootPath(options.homeDir);
|
|
1872
2079
|
}
|
|
1873
|
-
|
|
2080
|
+
getRootIdentity() {
|
|
1874
2081
|
if (!this.rootPromise) {
|
|
1875
|
-
const pending =
|
|
2082
|
+
const pending = createConversationRootIdentity(this.rootPath);
|
|
1876
2083
|
this.rootPromise = pending;
|
|
1877
2084
|
void pending.catch(() => {
|
|
1878
2085
|
if (this.rootPromise === pending) this.rootPromise = void 0;
|
|
@@ -1880,42 +2087,61 @@ var ConversationWorkspace = class {
|
|
|
1880
2087
|
}
|
|
1881
2088
|
return this.rootPromise;
|
|
1882
2089
|
}
|
|
2090
|
+
async getRoot() {
|
|
2091
|
+
try {
|
|
2092
|
+
return await this.getRootIdentity();
|
|
2093
|
+
} catch (error) {
|
|
2094
|
+
liveIdentityError(error, false, true);
|
|
2095
|
+
}
|
|
2096
|
+
}
|
|
2097
|
+
async revalidateStandaloneRoot() {
|
|
2098
|
+
return revalidateConversationRootIdentity(await this.getRootIdentity());
|
|
2099
|
+
}
|
|
1883
2100
|
async revalidate() {
|
|
1884
2101
|
return revalidateConversationRoot(await this.getRoot());
|
|
1885
2102
|
}
|
|
1886
2103
|
async assertExactRoot(candidate) {
|
|
1887
2104
|
return assertExactConversationRoot(await this.getRoot(), candidate);
|
|
1888
2105
|
}
|
|
2106
|
+
/**
|
|
2107
|
+
* The private directory is derived from the canonical session id, not from
|
|
2108
|
+
* whatever spelling a caller happens to hold.
|
|
2109
|
+
*
|
|
2110
|
+
* `getConversationDirectoryName()` is a case-sensitive hash, and callers reach
|
|
2111
|
+
* these methods with a mix of request ids, live-entry ids and ids echoed back
|
|
2112
|
+
* from tool arguments. Canonicalizing here makes one session resolve to one
|
|
2113
|
+
* directory by construction instead of leaving it to every call site.
|
|
2114
|
+
*/
|
|
2115
|
+
directoryKey(sessionId) {
|
|
2116
|
+
return normalizeSessionIdForLookup(sessionId);
|
|
2117
|
+
}
|
|
1889
2118
|
async materializeConversationDirectory(sessionId) {
|
|
1890
2119
|
const root = await this.revalidate();
|
|
1891
|
-
const name = conversationDirectoryName(sessionId);
|
|
1892
|
-
const candidate = join2(root.canonicalRoot, name);
|
|
1893
2120
|
try {
|
|
1894
|
-
await
|
|
2121
|
+
return (await materializeConversationDirectoryIdentity(
|
|
2122
|
+
root,
|
|
2123
|
+
this.directoryKey(sessionId)
|
|
2124
|
+
)).identity.canonicalPath;
|
|
1895
2125
|
} catch (error) {
|
|
1896
|
-
|
|
1897
|
-
throw error;
|
|
1898
|
-
}
|
|
2126
|
+
liveIdentityError(error);
|
|
1899
2127
|
}
|
|
1900
|
-
return validateConversationDirectory(root, name, candidate);
|
|
1901
2128
|
}
|
|
1902
2129
|
async discardEmptyConversationDirectory(sessionId) {
|
|
1903
2130
|
const root = await this.revalidate();
|
|
1904
|
-
|
|
1905
|
-
const candidate = join2(root.canonicalRoot, name);
|
|
1906
|
-
let canonical;
|
|
2131
|
+
let identity;
|
|
1907
2132
|
try {
|
|
1908
|
-
|
|
2133
|
+
identity = await inspectConversationDirectoryIdentity(
|
|
2134
|
+
root,
|
|
2135
|
+
this.directoryKey(sessionId)
|
|
2136
|
+
);
|
|
1909
2137
|
} catch (error) {
|
|
1910
|
-
|
|
1911
|
-
return false;
|
|
1912
|
-
}
|
|
1913
|
-
throw error;
|
|
2138
|
+
liveIdentityError(error);
|
|
1914
2139
|
}
|
|
2140
|
+
if (!identity) return false;
|
|
1915
2141
|
try {
|
|
1916
|
-
await rmdir(
|
|
2142
|
+
await rmdir(identity.canonicalPath);
|
|
1917
2143
|
} catch (error) {
|
|
1918
|
-
if (error
|
|
2144
|
+
if (error.code === "ENOENT" || error.code === "ENOTEMPTY") {
|
|
1919
2145
|
return false;
|
|
1920
2146
|
}
|
|
1921
2147
|
throw error;
|
|
@@ -1923,6 +2149,87 @@ var ConversationWorkspace = class {
|
|
|
1923
2149
|
await revalidateConversationRoot(root);
|
|
1924
2150
|
return true;
|
|
1925
2151
|
}
|
|
2152
|
+
async prepareStandaloneDirectory(storageSessionId) {
|
|
2153
|
+
const root = await this.revalidateStandaloneRoot();
|
|
2154
|
+
const prepared = await materializeConversationDirectoryIdentity(
|
|
2155
|
+
root,
|
|
2156
|
+
storageSessionId
|
|
2157
|
+
);
|
|
2158
|
+
const identity = await inspectConversationDirectoryIdentity(
|
|
2159
|
+
root,
|
|
2160
|
+
storageSessionId,
|
|
2161
|
+
prepared.identity
|
|
2162
|
+
);
|
|
2163
|
+
if (!identity) {
|
|
2164
|
+
throw new ConversationDirectoryIdentityError("child", "identity_changed");
|
|
2165
|
+
}
|
|
2166
|
+
let entries;
|
|
2167
|
+
try {
|
|
2168
|
+
entries = await readdir(identity.canonicalPath);
|
|
2169
|
+
} catch (error) {
|
|
2170
|
+
if (error.code === "ENOENT") {
|
|
2171
|
+
throw new ConversationDirectoryIdentityError(
|
|
2172
|
+
"child",
|
|
2173
|
+
"identity_changed"
|
|
2174
|
+
);
|
|
2175
|
+
}
|
|
2176
|
+
throw new ConversationDirectoryIdentityError("child", "io_error", error);
|
|
2177
|
+
}
|
|
2178
|
+
if (entries.length > 0) {
|
|
2179
|
+
throw new ConversationDirectoryIdentityError("child", "not_empty");
|
|
2180
|
+
}
|
|
2181
|
+
return { identity, created: prepared.created };
|
|
2182
|
+
}
|
|
2183
|
+
async inspectStandaloneDirectory(storageSessionId, expected) {
|
|
2184
|
+
const root = await this.revalidateStandaloneRoot();
|
|
2185
|
+
try {
|
|
2186
|
+
const identity = await inspectConversationDirectoryIdentity(
|
|
2187
|
+
root,
|
|
2188
|
+
storageSessionId,
|
|
2189
|
+
expected
|
|
2190
|
+
);
|
|
2191
|
+
return identity ? { status: "ready", identity } : { status: "missing" };
|
|
2192
|
+
} catch (error) {
|
|
2193
|
+
if (error instanceof ConversationDirectoryIdentityError && error.scope === "child") {
|
|
2194
|
+
return { status: "compromised", error };
|
|
2195
|
+
}
|
|
2196
|
+
throw error;
|
|
2197
|
+
}
|
|
2198
|
+
}
|
|
2199
|
+
async ensureStandaloneDirectory(storageSessionId, expected) {
|
|
2200
|
+
const inspected = await this.inspectStandaloneDirectory(
|
|
2201
|
+
storageSessionId,
|
|
2202
|
+
expected
|
|
2203
|
+
);
|
|
2204
|
+
if (inspected.status !== "missing") return inspected;
|
|
2205
|
+
const root = await this.revalidateStandaloneRoot();
|
|
2206
|
+
try {
|
|
2207
|
+
const materialized = await materializeConversationDirectoryIdentity(
|
|
2208
|
+
root,
|
|
2209
|
+
storageSessionId
|
|
2210
|
+
);
|
|
2211
|
+
if (!materialized.created) {
|
|
2212
|
+
const raced = await this.inspectStandaloneDirectory(
|
|
2213
|
+
storageSessionId,
|
|
2214
|
+
expected
|
|
2215
|
+
);
|
|
2216
|
+
if (raced.status !== "missing") return raced;
|
|
2217
|
+
throw new ConversationDirectoryIdentityError(
|
|
2218
|
+
"child",
|
|
2219
|
+
"identity_changed"
|
|
2220
|
+
);
|
|
2221
|
+
}
|
|
2222
|
+
return {
|
|
2223
|
+
status: expected ? "recreated" : "created",
|
|
2224
|
+
identity: materialized.identity
|
|
2225
|
+
};
|
|
2226
|
+
} catch (error) {
|
|
2227
|
+
if (error instanceof ConversationDirectoryIdentityError && error.scope === "child") {
|
|
2228
|
+
return { status: "compromised", error };
|
|
2229
|
+
}
|
|
2230
|
+
throw error;
|
|
2231
|
+
}
|
|
2232
|
+
}
|
|
1926
2233
|
};
|
|
1927
2234
|
|
|
1928
2235
|
// packages/cli/src/serve/daemon-metrics-ring.ts
|
|
@@ -2783,8 +3090,8 @@ async function flushDaemonLogBounded(daemonLog, budgetMs) {
|
|
|
2783
3090
|
await Promise.race([
|
|
2784
3091
|
daemonLog.flush().catch(() => {
|
|
2785
3092
|
}),
|
|
2786
|
-
new Promise((
|
|
2787
|
-
timer = setTimeout(
|
|
3093
|
+
new Promise((resolve4) => {
|
|
3094
|
+
timer = setTimeout(resolve4, budgetMs);
|
|
2788
3095
|
timer.unref();
|
|
2789
3096
|
})
|
|
2790
3097
|
]);
|
|
@@ -3038,12 +3345,12 @@ __name(hasRetryableChannelWorkerShutdownError, "hasRetryableChannelWorkerShutdow
|
|
|
3038
3345
|
var channelWorkerRuntimePromise;
|
|
3039
3346
|
async function loadChannelWorkerRuntime() {
|
|
3040
3347
|
channelWorkerRuntimePromise ??= Promise.all([
|
|
3041
|
-
import("./channel-worker-supervisor-
|
|
3042
|
-
import("./pidfile-
|
|
3043
|
-
import("./runtime-
|
|
3348
|
+
import("./channel-worker-supervisor-CPPSL7ZH.js"),
|
|
3349
|
+
import("./pidfile-WDSDXBY3.js"),
|
|
3350
|
+
import("./runtime-7QGB6SY4.js"),
|
|
3044
3351
|
import("./cli-entry-path-4VJ3Y6T2.js"),
|
|
3045
|
-
import("./channel-worker-group-
|
|
3046
|
-
import("./channel-worker-manager-
|
|
3352
|
+
import("./channel-worker-group-IN2UPYHP.js"),
|
|
3353
|
+
import("./channel-worker-manager-4CQPHVD4.js")
|
|
3047
3354
|
]).then(
|
|
3048
3355
|
([
|
|
3049
3356
|
supervisor,
|
|
@@ -3148,7 +3455,7 @@ function shouldPreheatBridge(deps) {
|
|
|
3148
3455
|
__name(shouldPreheatBridge, "shouldPreheatBridge");
|
|
3149
3456
|
var coreRuntimePromise;
|
|
3150
3457
|
function loadCoreRuntime() {
|
|
3151
|
-
coreRuntimePromise ??= import("./core-runtime-
|
|
3458
|
+
coreRuntimePromise ??= import("./core-runtime-TIWTFHOR.js");
|
|
3152
3459
|
return coreRuntimePromise;
|
|
3153
3460
|
}
|
|
3154
3461
|
__name(loadCoreRuntime, "loadCoreRuntime");
|
|
@@ -3184,10 +3491,10 @@ __name(resolveDaemonLogBaseDirForRun, "resolveDaemonLogBaseDirForRun");
|
|
|
3184
3491
|
var settingsRuntimePromise;
|
|
3185
3492
|
function loadSettingsRuntimeModules() {
|
|
3186
3493
|
settingsRuntimePromise ??= Promise.all([
|
|
3187
|
-
import("./settings-
|
|
3188
|
-
import("./environment-
|
|
3189
|
-
import("./loadedSettingsAdapter-
|
|
3190
|
-
import("./trustedFolders-
|
|
3494
|
+
import("./settings-GBBVKBQ2.js"),
|
|
3495
|
+
import("./environment-6IEK2353.js"),
|
|
3496
|
+
import("./loadedSettingsAdapter-X7FC5332.js"),
|
|
3497
|
+
import("./trustedFolders-FDJ2Q4ZK.js")
|
|
3191
3498
|
]).then(([settings, environment, loadedSettingsAdapter, trustedFolders]) => ({
|
|
3192
3499
|
settings,
|
|
3193
3500
|
environment,
|
|
@@ -3200,8 +3507,8 @@ __name(loadSettingsRuntimeModules, "loadSettingsRuntimeModules");
|
|
|
3200
3507
|
var channelWebhookConfigRuntimePromise;
|
|
3201
3508
|
function loadChannelWebhookConfigRuntime() {
|
|
3202
3509
|
channelWebhookConfigRuntimePromise ??= Promise.all([
|
|
3203
|
-
import("./runtime-
|
|
3204
|
-
import("./config-utils-
|
|
3510
|
+
import("./runtime-7QGB6SY4.js"),
|
|
3511
|
+
import("./config-utils-XJTGZVY3.js")
|
|
3205
3512
|
]).then(([channelRuntime, configUtils]) => ({
|
|
3206
3513
|
loadChannelsConfig: channelRuntime.loadChannelsConfig,
|
|
3207
3514
|
parseChannelWebhookConfig: configUtils.parseChannelWebhookConfig
|
|
@@ -3224,19 +3531,21 @@ async function loadServeRuntimeModules() {
|
|
|
3224
3531
|
workspaceProvidersStatusModule,
|
|
3225
3532
|
workspaceSkillsStatusModule,
|
|
3226
3533
|
totalSessionAdmissionModule,
|
|
3227
|
-
workspaceRegistryModule
|
|
3534
|
+
workspaceRegistryModule,
|
|
3535
|
+
promptLedgerModule
|
|
3228
3536
|
] = await Promise.all([
|
|
3229
|
-
import("./server-
|
|
3230
|
-
import("./bridge-
|
|
3231
|
-
import("./spawnChannel-
|
|
3537
|
+
import("./server-ZMZPHJEC.js"),
|
|
3538
|
+
import("./bridge-MG4F5NOH.js"),
|
|
3539
|
+
import("./spawnChannel-TVKIFXXA.js"),
|
|
3232
3540
|
import("./process-registry-PMJOA5CO.js"),
|
|
3233
|
-
import("./workspace-service-
|
|
3541
|
+
import("./workspace-service-RWB4KMY3.js"),
|
|
3234
3542
|
import("./types-WYCFCEHR.js"),
|
|
3235
|
-
import("./daemon-status-provider-
|
|
3236
|
-
import("./workspace-providers-status-
|
|
3237
|
-
import("./workspace-skills-status-
|
|
3238
|
-
import("./total-session-admission-
|
|
3239
|
-
import("./workspace-registry-
|
|
3543
|
+
import("./daemon-status-provider-JBEST4SF.js"),
|
|
3544
|
+
import("./workspace-providers-status-LNMP7NED.js"),
|
|
3545
|
+
import("./workspace-skills-status-P3XXZY7C.js"),
|
|
3546
|
+
import("./total-session-admission-NZNCU5NU.js"),
|
|
3547
|
+
import("./workspace-registry-KWPGC2LG.js"),
|
|
3548
|
+
import("./prompt-terminal-ledger-RW62JIPP.js")
|
|
3240
3549
|
]);
|
|
3241
3550
|
return {
|
|
3242
3551
|
createServeApp: serverModule.createServeApp,
|
|
@@ -3256,7 +3565,8 @@ async function loadServeRuntimeModules() {
|
|
|
3256
3565
|
createTotalSessionAdmissionController: totalSessionAdmissionModule.createTotalSessionAdmissionController,
|
|
3257
3566
|
createWorkspaceRegistry: workspaceRegistryModule.createWorkspaceRegistry,
|
|
3258
3567
|
createWorkspaceSessionOwnerIndex: workspaceRegistryModule.createWorkspaceSessionOwnerIndex,
|
|
3259
|
-
createWorkspaceGenerationGuard: workspaceRegistryModule.createWorkspaceGenerationGuard
|
|
3568
|
+
createWorkspaceGenerationGuard: workspaceRegistryModule.createWorkspaceGenerationGuard,
|
|
3569
|
+
createPromptLedgerSink: promptLedgerModule.createPromptLedgerSink
|
|
3260
3570
|
};
|
|
3261
3571
|
}
|
|
3262
3572
|
__name(loadServeRuntimeModules, "loadServeRuntimeModules");
|
|
@@ -3433,12 +3743,12 @@ async function waitForRuntimeStartingForShutdown(runtimeStarting, daemonLog, tim
|
|
|
3433
3743
|
let timer;
|
|
3434
3744
|
await Promise.race([
|
|
3435
3745
|
runtimeStarting,
|
|
3436
|
-
new Promise((
|
|
3746
|
+
new Promise((resolve4) => {
|
|
3437
3747
|
timer = setTimeout(() => {
|
|
3438
3748
|
daemonLog.warn(
|
|
3439
3749
|
`${timeoutMs}ms runtime-startup wait reached during shutdown; continuing listener close`
|
|
3440
3750
|
);
|
|
3441
|
-
|
|
3751
|
+
resolve4();
|
|
3442
3752
|
}, timeoutMs);
|
|
3443
3753
|
timer.unref();
|
|
3444
3754
|
})
|
|
@@ -4275,7 +4585,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4275
4585
|
}
|
|
4276
4586
|
let workspaceRegistrationStore = deps.workspaceRegistrationStore;
|
|
4277
4587
|
if (workspaceRegistrationStore === void 0 && process.env["QWEN_SERVE_NO_PERSISTENT_REGISTRATION"] !== "1") {
|
|
4278
|
-
const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-
|
|
4588
|
+
const { WorkspaceRegistrationStore } = await import("./workspace-registration-store-QZ3P3ILN.js");
|
|
4279
4589
|
workspaceRegistrationStore = new WorkspaceRegistrationStore(boundWorkspace);
|
|
4280
4590
|
}
|
|
4281
4591
|
if (workspaceRegistrationStore) {
|
|
@@ -4559,7 +4869,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4559
4869
|
"qwen serve: required external tool guard handshake succeeded."
|
|
4560
4870
|
);
|
|
4561
4871
|
}
|
|
4562
|
-
const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-
|
|
4872
|
+
const { createDaemonToolGuard } = await import("./daemon-git-worktree-guard-XSZ3362V.js");
|
|
4563
4873
|
const daemonToolGuardHandler = createDaemonToolGuard(
|
|
4564
4874
|
externalToolGuardHandler
|
|
4565
4875
|
);
|
|
@@ -4602,8 +4912,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4602
4912
|
let resolveServeAppStartup;
|
|
4603
4913
|
let rejectServeAppStartup;
|
|
4604
4914
|
let serveAppStartupSettled = false;
|
|
4605
|
-
const serveAppStartupReady = new Promise((
|
|
4606
|
-
resolveServeAppStartup =
|
|
4915
|
+
const serveAppStartupReady = new Promise((resolve4, reject) => {
|
|
4916
|
+
resolveServeAppStartup = resolve4;
|
|
4607
4917
|
rejectServeAppStartup = reject;
|
|
4608
4918
|
});
|
|
4609
4919
|
void serveAppStartupReady.catch(() => void 0);
|
|
@@ -4633,8 +4943,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4633
4943
|
let startRuntimeAfterHealth;
|
|
4634
4944
|
let startRuntimeForRequest;
|
|
4635
4945
|
const deferRuntimeUntilFirstHealth = deps.resolveOnListen === true && deps.deferRuntimeUntilFirstHealth === true;
|
|
4636
|
-
const runtimeReady = new Promise((
|
|
4637
|
-
markRuntimeReady =
|
|
4946
|
+
const runtimeReady = new Promise((resolve4, reject) => {
|
|
4947
|
+
markRuntimeReady = resolve4;
|
|
4638
4948
|
markRuntimeFailed = reject;
|
|
4639
4949
|
});
|
|
4640
4950
|
void runtimeReady.catch(() => {
|
|
@@ -4895,7 +5205,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4895
5205
|
loadCoreRuntime(),
|
|
4896
5206
|
loadSettingsRuntimeModules(),
|
|
4897
5207
|
cliVersionPromise,
|
|
4898
|
-
import("./daemon-trust-policy-
|
|
5208
|
+
import("./daemon-trust-policy-S6LBG4WN.js")
|
|
4899
5209
|
]);
|
|
4900
5210
|
cliVersion = resolvedCliVersion;
|
|
4901
5211
|
settingsRuntime.environment.preResolveHomeEnvOverrides();
|
|
@@ -4988,6 +5298,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
4988
5298
|
runtimeBootSettings,
|
|
4989
5299
|
runtimeEnvSnapshot.effectiveEnv
|
|
4990
5300
|
);
|
|
5301
|
+
const sessionAttachmentsRoot = /* @__PURE__ */ __name((workspace, runtimeBaseDir) => path.join(
|
|
5302
|
+
new core.Storage(workspace, runtimeBaseDir).getProjectTempDir(),
|
|
5303
|
+
"attachments"
|
|
5304
|
+
), "sessionAttachmentsRoot");
|
|
4991
5305
|
const runtimeEffectiveEnv = {
|
|
4992
5306
|
...runtimeEnvSnapshot.effectiveEnv,
|
|
4993
5307
|
QWEN_RUNTIME_DIR: primarySessionRuntimeBaseDir
|
|
@@ -5267,7 +5581,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5267
5581
|
resolveSkillSettings,
|
|
5268
5582
|
skillSettingStrings,
|
|
5269
5583
|
updateWorkspaceSkillSettingLists
|
|
5270
|
-
} = await import("./skill-settings-
|
|
5584
|
+
} = await import("./skill-settings-VEC7C44Z.js");
|
|
5271
5585
|
const fresh = loadSettingsForPersistence(workspace);
|
|
5272
5586
|
const normalizedName = skillName.trim().toLowerCase();
|
|
5273
5587
|
const resolved = resolveSkillSettings(fresh);
|
|
@@ -5332,7 +5646,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5332
5646
|
resolveSkillSettings,
|
|
5333
5647
|
skillSettingStrings,
|
|
5334
5648
|
updateWorkspaceSkillSettingLists
|
|
5335
|
-
} = await import("./skill-settings-
|
|
5649
|
+
} = await import("./skill-settings-VEC7C44Z.js");
|
|
5336
5650
|
const fresh = loadSettingsForPersistence(workspace);
|
|
5337
5651
|
const resolved = resolveSkillSettings(fresh);
|
|
5338
5652
|
const initialDisabled = skillSettingStrings(
|
|
@@ -5437,7 +5751,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5437
5751
|
);
|
|
5438
5752
|
}
|
|
5439
5753
|
}), "persistSettingsFn");
|
|
5440
|
-
const { createSubSessionLauncher } = await import("./create-sub-session-
|
|
5754
|
+
const { createSubSessionLauncher } = await import("./create-sub-session-DPEBT657.js");
|
|
5441
5755
|
const subSessionLauncher = createSubSessionLauncher({
|
|
5442
5756
|
getBridge: /* @__PURE__ */ __name(() => bridgeRef, "getBridge"),
|
|
5443
5757
|
boundWorkspace,
|
|
@@ -5446,6 +5760,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5446
5760
|
)
|
|
5447
5761
|
});
|
|
5448
5762
|
const bridge = deps.bridge ?? runtime.createAcpSessionBridge({
|
|
5763
|
+
sessionAttachmentsRoot: sessionAttachmentsRoot(
|
|
5764
|
+
boundWorkspace,
|
|
5765
|
+
primarySessionRuntimeBaseDir
|
|
5766
|
+
),
|
|
5449
5767
|
// Reverse tool channel: let `BridgeClient.extMethod` reach the WS
|
|
5450
5768
|
// connection that hosts a named client MCP server (#5626).
|
|
5451
5769
|
clientMcpSender: clientMcpSenderRegistry.lookup,
|
|
@@ -5482,6 +5800,12 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5482
5800
|
...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
|
|
5483
5801
|
...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
|
|
5484
5802
|
boundWorkspace,
|
|
5803
|
+
// Prompt terminal ledger: persisted beside the transcript so a
|
|
5804
|
+
// restarted daemon can reconcile dangling prompts on cold load.
|
|
5805
|
+
promptLedger: runtime.createPromptLedgerSink(
|
|
5806
|
+
boundWorkspace,
|
|
5807
|
+
primarySessionRuntimeBaseDir
|
|
5808
|
+
),
|
|
5485
5809
|
sessionShellCommandEnabled,
|
|
5486
5810
|
childEnvOverrides,
|
|
5487
5811
|
channelFactory,
|
|
@@ -5761,6 +6085,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5761
6085
|
)
|
|
5762
6086
|
});
|
|
5763
6087
|
const secondaryBridge = runtime.createAcpSessionBridge({
|
|
6088
|
+
sessionAttachmentsRoot: sessionAttachmentsRoot(
|
|
6089
|
+
workspaceInput.cwd,
|
|
6090
|
+
secondaryEnv.sessionRuntimeBaseDir
|
|
6091
|
+
),
|
|
5764
6092
|
clientMcpSender: secondaryClientMcpSenderRegistry.lookup,
|
|
5765
6093
|
onCreateSubSession: secondarySubSessionLauncher.launch,
|
|
5766
6094
|
onChannelDelivery: createBoundChannelDeliveryHandler(
|
|
@@ -5795,6 +6123,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
5795
6123
|
...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
|
|
5796
6124
|
...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
|
|
5797
6125
|
boundWorkspace: workspaceInput.cwd,
|
|
6126
|
+
promptLedger: runtime.createPromptLedgerSink(
|
|
6127
|
+
workspaceInput.cwd,
|
|
6128
|
+
secondaryEnv.sessionRuntimeBaseDir
|
|
6129
|
+
),
|
|
5798
6130
|
sessionShellCommandEnabled,
|
|
5799
6131
|
childEnvOverrides,
|
|
5800
6132
|
channelFactory: secondaryChannelFactory,
|
|
@@ -6133,6 +6465,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6133
6465
|
let wsBridge;
|
|
6134
6466
|
try {
|
|
6135
6467
|
wsBridge = runtime.createAcpSessionBridge({
|
|
6468
|
+
sessionAttachmentsRoot: sessionAttachmentsRoot(
|
|
6469
|
+
cwd,
|
|
6470
|
+
wsEnv.sessionRuntimeBaseDir
|
|
6471
|
+
),
|
|
6136
6472
|
clientMcpSender: wsClientMcpRegistry.lookup,
|
|
6137
6473
|
onCreateSubSession: wsSubSessionLauncher.launch,
|
|
6138
6474
|
onChannelDelivery: createBoundChannelDeliveryHandler(
|
|
@@ -6165,6 +6501,14 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6165
6501
|
...opts.sessionIdleTimeoutMs !== void 0 ? { sessionIdleTimeoutMs: opts.sessionIdleTimeoutMs } : {},
|
|
6166
6502
|
...opts.permissionResponseTimeoutMs !== void 0 ? { permissionResponseTimeoutMs: opts.permissionResponseTimeoutMs } : {},
|
|
6167
6503
|
boundWorkspace: cwd,
|
|
6504
|
+
// Live-conversation workspaces keep transcripts outside the
|
|
6505
|
+
// runtime storage layout, so no ledger sink is wired there.
|
|
6506
|
+
...provenance === "live-conversation" ? {} : {
|
|
6507
|
+
promptLedger: runtime.createPromptLedgerSink(
|
|
6508
|
+
cwd,
|
|
6509
|
+
wsEnv.sessionRuntimeBaseDir
|
|
6510
|
+
)
|
|
6511
|
+
},
|
|
6168
6512
|
sessionShellCommandEnabled,
|
|
6169
6513
|
childEnvOverrides,
|
|
6170
6514
|
channelFactory: wsChannelFactory,
|
|
@@ -6612,8 +6956,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6612
6956
|
{ createChannelManagementService },
|
|
6613
6957
|
{ WorkspaceChannelSettingsStore }
|
|
6614
6958
|
] = await Promise.all([
|
|
6615
|
-
import("./channel-management-service-
|
|
6616
|
-
import("./channel-settings-store-
|
|
6959
|
+
import("./channel-management-service-KHPAWCX7.js"),
|
|
6960
|
+
import("./channel-settings-store-GQUCL2YM.js")
|
|
6617
6961
|
]);
|
|
6618
6962
|
return createChannelManagementService({
|
|
6619
6963
|
workspaceCwd: targetRuntime.workspaceCwd,
|
|
@@ -6816,8 +7160,8 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6816
7160
|
{ createWorkspaceTrustReconciler },
|
|
6817
7161
|
{ createDaemonTrustPolicyMonitor }
|
|
6818
7162
|
] = await Promise.all([
|
|
6819
|
-
import("./workspace-trust-reconciler-
|
|
6820
|
-
import("./daemon-trust-policy-monitor-
|
|
7163
|
+
import("./workspace-trust-reconciler-XU6WB2MF.js"),
|
|
7164
|
+
import("./daemon-trust-policy-monitor-NFO3OIBN.js")
|
|
6821
7165
|
]);
|
|
6822
7166
|
const materializationFor = /* @__PURE__ */ __name((entry, snapshot, decision) => {
|
|
6823
7167
|
const boundWorkspaces2 = entry.primary && decision.targetTrusted ? runtime.resolveBoundWorkspacesFromIdeEnv(
|
|
@@ -6912,7 +7256,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
6912
7256
|
handle?.disposeWorkspace(runtimeToDispose.workspaceId);
|
|
6913
7257
|
const deadline = Date.now() + 1e3;
|
|
6914
7258
|
while ((handle?.getWorkspaceActivity(runtimeToDispose.workspaceId).memoryTasks ?? 0) > 0 && Date.now() < deadline) {
|
|
6915
|
-
await new Promise((
|
|
7259
|
+
await new Promise((resolve4) => setTimeout(resolve4, 25));
|
|
6916
7260
|
}
|
|
6917
7261
|
if ((handle?.getWorkspaceActivity(runtimeToDispose.workspaceId).memoryTasks ?? 0) > 0) {
|
|
6918
7262
|
throw new Error(
|
|
@@ -7032,7 +7376,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7032
7376
|
);
|
|
7033
7377
|
}
|
|
7034
7378
|
const channelValidationSettingsRuntime = opts.channelSelection ? await loadSettingsRuntimeModules() : void 0;
|
|
7035
|
-
const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-
|
|
7379
|
+
const channelValidationTrustPolicy = opts.channelSelection ? await import("./daemon-trust-policy-S6LBG4WN.js") : void 0;
|
|
7036
7380
|
const channelValidationTrustSnapshot = channelValidationTrustPolicy ? await channelValidationTrustPolicy.readDaemonTrustPolicySnapshot() : void 0;
|
|
7037
7381
|
const resolveChannelWorkspaceGroupsAtListen = /* @__PURE__ */ __name(() => {
|
|
7038
7382
|
if (!opts.channelSelection || !channelValidationSettingsRuntime || !channelRuntime) {
|
|
@@ -7138,7 +7482,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
7138
7482
|
if (opts.channelSelection) {
|
|
7139
7483
|
reserveChannelServicePidfile(opts.channelSelection);
|
|
7140
7484
|
}
|
|
7141
|
-
return await new Promise((
|
|
7485
|
+
return await new Promise((resolve4, reject) => {
|
|
7142
7486
|
let closeHost;
|
|
7143
7487
|
const onListening = /* @__PURE__ */ __name((error) => {
|
|
7144
7488
|
if (error) return;
|
|
@@ -8108,7 +8452,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8108
8452
|
loggerPublished = true;
|
|
8109
8453
|
loggerLifecycle.published();
|
|
8110
8454
|
void (liveDiscoveryPublish ?? Promise.resolve()).then(
|
|
8111
|
-
() =>
|
|
8455
|
+
() => resolve4(handle)
|
|
8112
8456
|
);
|
|
8113
8457
|
} else {
|
|
8114
8458
|
void runtimeReady.then(
|
|
@@ -8116,7 +8460,7 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8116
8460
|
await liveDiscoveryPublish;
|
|
8117
8461
|
loggerPublished = true;
|
|
8118
8462
|
loggerLifecycle.published();
|
|
8119
|
-
|
|
8463
|
+
resolve4(handle);
|
|
8120
8464
|
},
|
|
8121
8465
|
(err) => {
|
|
8122
8466
|
void handle.close().then(
|
|
@@ -8165,10 +8509,10 @@ async function runQwenServeImpl(optsIn, deps, loggerLifecycle) {
|
|
|
8165
8509
|
drainHost: /* @__PURE__ */ __name(() => {
|
|
8166
8510
|
if (closeHost) return closeHost();
|
|
8167
8511
|
if (!server.listening) return Promise.resolve();
|
|
8168
|
-
return new Promise((
|
|
8512
|
+
return new Promise((resolve5, rejectClose) => {
|
|
8169
8513
|
server.close((error) => {
|
|
8170
8514
|
if (error) rejectClose(error);
|
|
8171
|
-
else
|
|
8515
|
+
else resolve5();
|
|
8172
8516
|
});
|
|
8173
8517
|
});
|
|
8174
8518
|
}, "drainHost")
|