@qwen-code/qwen-code 0.26.2-preview.0 → 0.26.2-preview.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/chunks/{MaxSizedBox-K6YUM3DX.js → MaxSizedBox-EGHZ2BPF.js} +1 -1
- package/chunks/{StandaloneSessionPicker-75IC33SN.js → StandaloneSessionPicker-UVCW6YW3.js} +1 -1
- package/chunks/{acp-subagent-executor-3NHBJRPL.js → acp-subagent-executor-AQ7AWSD4.js} +1 -1
- package/chunks/{acpAgent-JT6KQPTH.js → acpAgent-IV7JAGD7.js} +3 -3
- package/chunks/{advisor-TI2UVEZK.js → advisor-UZ4TF65D.js} +1 -1
- package/chunks/{agent-SWIZZZMY.js → agent-CNLVAWDD.js} +1 -1
- package/chunks/{agent-headless-USWEJ4GW.js → agent-headless-ZJUJLUJS.js} +1 -1
- package/chunks/{agent-host-client-ZFIMQX33.js → agent-host-client-SN5V2KBH.js} +1 -1
- package/chunks/{agent-host-connections-LOFD7O7Q.js → agent-host-connections-VKMAJIIU.js} +1 -1
- package/chunks/{anthropicContentGenerator-HMLEI4FI.js → anthropicContentGenerator-QTJVPAMI.js} +1 -1
- package/chunks/{autofix-pr-NKR2VSLB.js → autofix-pr-U7GNSH27.js} +1 -1
- package/chunks/{batch-JQZ3TOHA.js → batch-MBEWETXN.js} +1 -1
- package/chunks/{bridge-EIWWT4P6.js → bridge-TEJLNYV3.js} +1 -1
- package/chunks/{channel-settings-store-FLRLUA67.js → channel-settings-store-QNCKWWBL.js} +1 -1
- package/chunks/{chunk-244YTFYD.js → chunk-23KDY7UW.js} +1 -1
- package/chunks/{chunk-7TDMQJTD.js → chunk-2DWWSMTV.js} +1 -1
- package/chunks/{chunk-UU2LTNSF.js → chunk-3IZMVLVZ.js} +1 -1
- package/chunks/{chunk-B6T4ESBM.js → chunk-3JI7IKJL.js} +1 -1
- package/chunks/{chunk-Y5TT2G3N.js → chunk-427MARCP.js} +1 -1
- package/chunks/{chunk-KX7JS2P7.js → chunk-4NNNGSQY.js} +3 -3
- package/chunks/{chunk-6TQS2WQO.js → chunk-4RM7KY3Z.js} +2 -2
- package/chunks/{chunk-YL3N2UGG.js → chunk-5X7S4AE6.js} +5 -5
- package/chunks/{chunk-K2HAY5PY.js → chunk-5XAECBED.js} +1 -1
- package/chunks/{chunk-VCHFBETO.js → chunk-66KKSLUO.js} +1 -1
- package/chunks/{chunk-BSJR2KEF.js → chunk-6CIIDUZW.js} +1 -1
- package/chunks/{chunk-22CLK7PK.js → chunk-7EBRMQYW.js} +1 -1
- package/chunks/{chunk-J4TFGZ4A.js → chunk-7FSC2NKA.js} +1 -1
- package/chunks/{chunk-6JFC5M6B.js → chunk-A5TAAMML.js} +1 -1
- package/chunks/{chunk-DHHACQVN.js → chunk-AOYSX44A.js} +1 -1
- package/chunks/{chunk-VFVZ2DY7.js → chunk-AZCMQ3DD.js} +2 -2
- package/chunks/{chunk-BQJXWIMR.js → chunk-B6F7CVBP.js} +1 -1
- package/chunks/{chunk-OVPEAKOQ.js → chunk-BDQOLT37.js} +1 -1
- package/chunks/{chunk-5SYUBQNO.js → chunk-BIWEUAKG.js} +1 -1
- package/chunks/{chunk-BZM66PQO.js → chunk-BJ5R7LOM.js} +1 -1
- package/chunks/{chunk-4R2OHBH3.js → chunk-BKUFRNME.js} +1 -1
- package/chunks/{chunk-NIYWNFVF.js → chunk-BNZSPX2I.js} +1 -1
- package/chunks/{chunk-FJV2ECNY.js → chunk-D2URRVOK.js} +1 -1
- package/chunks/{chunk-GT6CHVAI.js → chunk-DANP7CMW.js} +1 -1
- package/chunks/{chunk-FHFLD4DR.js → chunk-DBHLRZGI.js} +1 -1
- package/chunks/{chunk-Y2UXZJLM.js → chunk-DL7TKH2E.js} +2 -2
- package/chunks/{chunk-MCQE2U7N.js → chunk-DOWKH5OZ.js} +6 -6
- package/chunks/{chunk-UHRLBY3C.js → chunk-DPHQJPCU.js} +1 -1
- package/chunks/{chunk-PV2VT25U.js → chunk-DPNGBOI7.js} +1 -1
- package/chunks/{chunk-NCDNF7UJ.js → chunk-DXRXF4QD.js} +1 -1
- package/chunks/{chunk-OCVRMNEQ.js → chunk-DZ3GV34J.js} +1 -1
- package/chunks/{chunk-3QIAXWWW.js → chunk-EU2MKUK4.js} +1 -1
- package/chunks/{chunk-KMAVI6FB.js → chunk-EVBUXPGM.js} +1 -1
- package/chunks/{chunk-BVSTV4JM.js → chunk-F3ZRU2SA.js} +1 -1
- package/chunks/{chunk-TBZY477Y.js → chunk-FCZYH27X.js} +1 -1
- package/chunks/{chunk-JCOK67LT.js → chunk-FNDMWG43.js} +1 -1
- package/chunks/{chunk-5SF32OGU.js → chunk-GDXLJJSW.js} +1 -1
- package/chunks/{chunk-SO6FCPRI.js → chunk-GZYIXB7Y.js} +1 -1
- package/chunks/{chunk-WZPTWC7X.js → chunk-HHNAH4IH.js} +1 -1
- package/chunks/{chunk-7KCAOXNL.js → chunk-HOKROBQZ.js} +1 -1
- package/chunks/{chunk-34ZBUQJV.js → chunk-IGPAATQW.js} +1 -1
- package/chunks/{chunk-2ZTRKK2O.js → chunk-INFBJDWM.js} +1 -1
- package/chunks/{chunk-IEJ2CGRN.js → chunk-J3R7ZNSA.js} +1 -1
- package/chunks/{chunk-KT5MPRYB.js → chunk-JCRS367I.js} +1 -1
- package/chunks/{chunk-7JWJTRP6.js → chunk-JFVXZFMV.js} +1 -1
- package/chunks/{chunk-47LP4MBD.js → chunk-JKMGS2VD.js} +1 -1
- package/chunks/{chunk-WRJ3PMDZ.js → chunk-JUQ7T2MV.js} +1 -1
- package/chunks/{chunk-NZX3UWNF.js → chunk-KQ4TDFNE.js} +1 -1
- package/chunks/{chunk-X7D4VKMX.js → chunk-L6BKKN42.js} +1 -1
- package/chunks/{chunk-YG5HVFMY.js → chunk-L7Y6MOHS.js} +1 -1
- package/chunks/{chunk-UFTIUKD4.js → chunk-LGYXZJI3.js} +1 -1
- package/chunks/{chunk-JQGGILML.js → chunk-LPOEVTKD.js} +1 -1
- package/chunks/{chunk-5KI55A6S.js → chunk-LRXS7ZI2.js} +1 -1
- package/chunks/{chunk-CKVHEYXW.js → chunk-LYYVSCNL.js} +1 -1
- package/chunks/{chunk-LIIMQ4DI.js → chunk-LZNBHBAJ.js} +6 -6
- package/chunks/{chunk-H4GDEXMF.js → chunk-M3C6RDGC.js} +1 -1
- package/chunks/{chunk-KKKUB3RQ.js → chunk-MNVMHVQJ.js} +1 -1
- package/chunks/{chunk-2B3W7IQY.js → chunk-MVGQFFIK.js} +1 -1
- package/chunks/{chunk-Q35A2RGO.js → chunk-NC7BCZPQ.js} +1 -1
- package/chunks/{chunk-2ZOTG3NW.js → chunk-NE627MUW.js} +1 -1
- package/chunks/{chunk-W4P2EN3V.js → chunk-NZNRCPGE.js} +1 -1
- package/chunks/{chunk-YPDQJQ3S.js → chunk-P3M4WWRA.js} +1 -1
- package/chunks/{chunk-DVB36ASH.js → chunk-P534ONQN.js} +1 -1
- package/chunks/{chunk-EL5J4ESB.js → chunk-QF44NNSC.js} +1 -1
- package/chunks/{chunk-IQPJOBPI.js → chunk-QHGCDHNW.js} +1 -1
- package/chunks/{chunk-EVZC4KEQ.js → chunk-QWJX7NIP.js} +1 -1
- package/chunks/{chunk-J2TJL2F4.js → chunk-S53G54DW.js} +2 -2
- package/chunks/{chunk-3A6LFJJV.js → chunk-SMNFL3AD.js} +1 -1
- package/chunks/{chunk-WDO3K3P2.js → chunk-TOBNWST4.js} +1 -1
- package/chunks/{chunk-AVGJ4HE3.js → chunk-TQSBUHAM.js} +1 -1
- package/chunks/{chunk-ABUS7DNN.js → chunk-TW5QEP2J.js} +1 -1
- package/chunks/{chunk-WYM4Z4D5.js → chunk-UEB2F43V.js} +1 -1
- package/chunks/{chunk-FUUPMVD2.js → chunk-UPPE4I6H.js} +1 -1
- package/chunks/{chunk-UHBJVFZA.js → chunk-US42COBM.js} +1 -1
- package/chunks/{chunk-RMQNBSMK.js → chunk-UUY6XSQI.js} +1 -1
- package/chunks/{chunk-UVQUQNCA.js → chunk-UZI3IA27.js} +1 -1
- package/chunks/{chunk-SXJ2E33J.js → chunk-V6VMUJ47.js} +1 -1
- package/chunks/{chunk-5UFCNJGN.js → chunk-VG2ZINTO.js} +1 -1
- package/chunks/{chunk-JPPPJ2GN.js → chunk-VJI6MHWX.js} +1 -1
- package/chunks/{chunk-AUI7WVSU.js → chunk-VOBNHBCJ.js} +1 -1
- package/chunks/{chunk-3BNJDZHU.js → chunk-VUEZWMI4.js} +1 -1
- package/chunks/{chunk-LMNKCL55.js → chunk-W7ZX6WB3.js} +2 -2
- package/chunks/{chunk-HVS6V2UZ.js → chunk-WA2LKUVP.js} +1 -1
- package/chunks/{chunk-7APLU2XE.js → chunk-WFFCJ5PF.js} +1 -1
- package/chunks/{chunk-3TD4WAG5.js → chunk-WQY5GE65.js} +1 -1
- package/chunks/{chunk-3YWRMF6C.js → chunk-WSESLSKK.js} +1 -1
- package/chunks/{chunk-NILCQMZ7.js → chunk-XFJV5NYT.js} +1 -1
- package/chunks/{chunk-LGBGUITT.js → chunk-XIYLRIW4.js} +1 -1
- package/chunks/{chunk-KS74L67R.js → chunk-XQ2NYKJH.js} +1 -1
- package/chunks/{chunk-JB2NOB6W.js → chunk-Y3VRWG52.js} +1 -1
- package/chunks/{chunk-GVZ6D2NL.js → chunk-YBISME5B.js} +1 -1
- package/chunks/{chunk-2C2253QI.js → chunk-YJNWPSB3.js} +1 -1
- package/chunks/{chunk-O2T3GQ6F.js → chunk-YWVV5STA.js} +1 -1
- package/chunks/{chunk-MAQZSOHI.js → chunk-ZH4J3FL6.js} +1 -1
- package/chunks/{chunk-THNEKTPK.js → chunk-ZSKCF6DI.js} +1 -1
- package/chunks/{chunk-Z7BAHKO5.js → chunk-ZW6456SD.js} +1 -1
- package/chunks/{chunk-DMSZ2TB3.js → chunk-ZWM3LLT7.js} +1 -1
- package/chunks/{codex-subagent-executor-DQ5LQQWO.js → codex-subagent-executor-DWWT7246.js} +1 -1
- package/chunks/{config-utils-CY6HLKZ5.js → config-utils-NGZB522W.js} +1 -1
- package/chunks/{contextCommand-SGBWI7O6.js → contextCommand-7QCW2YNX.js} +1 -1
- package/chunks/{core-runtime-4DP27LCC.js → core-runtime-PSVNDJPD.js} +1 -1
- package/chunks/{create-sub-session-ECPDZMBX.js → create-sub-session-JTSEMEJE.js} +1 -1
- package/chunks/{cron-create-OO4OG3EI.js → cron-create-VGIDTUMX.js} +1 -1
- package/chunks/{daemon-git-worktree-guard-OYDNHT7P.js → daemon-git-worktree-guard-IQRGS7IH.js} +1 -1
- package/chunks/{daemon-status-provider-JGDLXPC6.js → daemon-status-provider-R4MYCYPG.js} +1 -1
- package/chunks/{daemon-trust-policy-5HRARS54.js → daemon-trust-policy-VAUKFZ2N.js} +1 -1
- package/chunks/{daemon-trust-policy-monitor-RM7FVIIC.js → daemon-trust-policy-monitor-E5HIO6RP.js} +1 -1
- package/chunks/{deferred-core-runtime-3CXBZIOG.js → deferred-core-runtime-FLOFQJPU.js} +1 -1
- package/chunks/{edit-DJPESAAY.js → edit-OOVQUGKV.js} +1 -1
- package/chunks/{enterPlanMode-IHBLRIF3.js → enterPlanMode-AUWVTQLT.js} +1 -1
- package/chunks/{environment-JN5SD347.js → environment-RM5OXYP4.js} +1 -1
- package/chunks/{errors-NUJCME3Y.js → errors-CLDJGHVD.js} +1 -1
- package/chunks/{execution-tool-I3SWG6I3.js → execution-tool-JFBVOKPW.js} +1 -1
- package/chunks/{execution-worker-62UZMAMJ.js → execution-worker-MNJZD72W.js} +1 -1
- package/chunks/{exitPlanMode-JIC4V3FE.js → exitPlanMode-PC6XG4TW.js} +1 -1
- package/chunks/{fast-path-NIOIL5YI.js → fast-path-V4DN3CRZ.js} +1 -1
- package/chunks/{glob-EQ4QNAHF.js → glob-DTZROBDS.js} +1 -1
- package/chunks/{goal-tools-DYTTSBQG.js → goal-tools-FUVGTY33.js} +1 -1
- package/chunks/{handleAutoUpdate-44BTG5L5.js → handleAutoUpdate-U4LVTHGU.js} +1 -1
- package/chunks/{i18n-FTHZAHCT.js → i18n-XOKNDFYP.js} +1 -1
- package/chunks/{initializer-MSGKXC75.js → initializer-XBR5J4CY.js} +1 -1
- package/chunks/{installationInfo-4XJMJJYU.js → installationInfo-4AOEOUI6.js} +1 -1
- package/chunks/{interactive-mod-session-DFLRYO2Q.js → interactive-mod-session-YGZK2JK2.js} +1 -1
- package/chunks/{list-ODZ7Z6VI.js → list-TCGKVPH4.js} +1 -1
- package/chunks/{llm-O64DHKP7.js → llm-SKFTN5UN.js} +4 -4
- package/chunks/{llm-content-generator-SK24I6QS.js → llm-content-generator-GWHXT3WS.js} +1 -1
- package/chunks/{loadedSettingsAdapter-6PEBUZT5.js → loadedSettingsAdapter-ZALZGZE7.js} +1 -1
- package/chunks/{local-ED3UEKWP.js → local-RWTWYS5Z.js} +1 -1
- package/chunks/{local-execution-environment-PUKES5LO.js → local-execution-environment-R6JWLD65.js} +1 -1
- package/chunks/{loggingContentGenerator-UHOJVSRR.js → loggingContentGenerator-UJV6QFOY.js} +1 -1
- package/chunks/{loop-wakeup-NSJQETPZ.js → loop-wakeup-BU2RRYHA.js} +1 -1
- package/chunks/{manage-memory-5RRB6FLH.js → manage-memory-XI57JN4T.js} +1 -1
- package/chunks/{managed-execution-engine-MZAP7SK6.js → managed-execution-engine-BA5PABMP.js} +1 -1
- package/chunks/{managed-local-serve-XMES3HXL.js → managed-local-serve-MFKN22K6.js} +1 -1
- package/chunks/{managed-npm-update-R5KGY7G2.js → managed-npm-update-ZGN43NUA.js} +1 -1
- package/chunks/{managed-runtime-attestation-worker-O2KNHHV6.js → managed-runtime-attestation-worker-YN2VBGYN.js} +1 -1
- package/chunks/{managed-runtime-bootstrap-HOTLM6DE.js → managed-runtime-bootstrap-SGQVMUJE.js} +1 -1
- package/chunks/{managed-runtime-session-worker-QZX44ZTD.js → managed-runtime-session-worker-4UMF3VBY.js} +1 -1
- package/chunks/{managed-runtime-ssh-worker-U425WQ65.js → managed-runtime-ssh-worker-7XA6KRBN.js} +1 -1
- package/chunks/{managed-session-authority-THHDHCBP.js → managed-session-authority-IJGYAOEL.js} +1 -1
- package/chunks/{mcp-AR7EK4WY.js → mcp-V3L7B5YK.js} +1 -1
- package/chunks/{memory-C2TSF6BK.js → memory-3T6FPNAK.js} +1 -1
- package/chunks/{model-call-collection-25WR55OH.js → model-call-collection-WTTITWWM.js} +1 -1
- package/chunks/{model-configuration-KC7DQGKV.js → model-configuration-T6SSGI4J.js} +1 -1
- package/chunks/{modelConfigUtils-QEHMVLSQ.js → modelConfigUtils-TQA25QJC.js} +1 -1
- package/chunks/{monitor-PDQUZD23.js → monitor-5ZAOJSEE.js} +1 -1
- package/chunks/{nonInteractiveCli-WY2YFONU.js → nonInteractiveCli-YFINLVA7.js} +1 -1
- package/chunks/{nonInteractiveToolExecutor-7RJZYPHJ.js → nonInteractiveToolExecutor-DE3WACL5.js} +1 -1
- package/chunks/{notebook-edit-P4ITXF5H.js → notebook-edit-UK6HBRO3.js} +1 -1
- package/chunks/{omni-AYUPB2QM.js → omni-65LF5QK4.js} +1 -1
- package/chunks/{openaiContentGenerator-V5IK4ITO.js → openaiContentGenerator-HX7NCSV5.js} +1 -1
- package/chunks/{openaiResponsesContentGenerator-DYDH6KWT.js → openaiResponsesContentGenerator-CFA6U6Y5.js} +1 -1
- package/chunks/{pidfile-INPBL2DK.js → pidfile-ZVKJUNTZ.js} +1 -1
- package/chunks/{processUtils-J4UDEDS4.js → processUtils-VS6CJT7E.js} +1 -1
- package/chunks/{prompt-terminal-ledger-QLOQWHYE.js → prompt-terminal-ledger-UF5RDB57.js} +1 -1
- package/chunks/{qwenContentGenerator-RU43XKKB.js → qwenContentGenerator-GM3ZSI7E.js} +1 -1
- package/chunks/{reactive-degrade-2Q3Z3KAR.js → reactive-degrade-TSAQWZ5F.js} +1 -1
- package/chunks/{read-file-472BQ25I.js → read-file-J267NT45.js} +1 -1
- package/chunks/{resumeHistoryUtils-7SUFKZDC.js → resumeHistoryUtils-IM46VFDV.js} +1 -1
- package/chunks/{review-WX52IWJR.js → review-4B64XTCL.js} +1 -1
- package/chunks/{ripGrep-4GPGLKAM.js → ripGrep-YLOSXO7P.js} +1 -1
- package/chunks/{run-qwen-serve-MXK4RBKL.js → run-qwen-serve-SAHEC44O.js} +1 -1
- package/chunks/{runtime-WHU3AGFT.js → runtime-SJDZHV6J.js} +1 -1
- package/chunks/{sandboxConfig-7DBXEQJH.js → sandboxConfig-47EXXMUA.js} +1 -1
- package/chunks/{scheduled-tasks-O5RV6G6U.js → scheduled-tasks-E6RCTUUS.js} +1 -1
- package/chunks/{scheduler-HLMS5LR5.js → scheduler-SE3IWIWA.js} +1 -1
- package/chunks/{search-memory-PYND7ZX3.js → search-memory-2W7VJC4Q.js} +1 -1
- package/chunks/{send-message-TMLYTQOI.js → send-message-63YGQP6G.js} +1 -1
- package/chunks/{serve-EBNBRAME.js → serve-F4ML2WNL.js} +1 -1
- package/chunks/{server-63BRDBL5.js → server-S56IB4TT.js} +3 -3
- package/chunks/{session-XB6J4CZD.js → session-2CUVLZ4H.js} +1 -1
- package/chunks/{session-attachments-root-PFK475N2.js → session-attachments-root-FINBX7K5.js} +1 -1
- package/chunks/{session-execution-engine-selector-P6TJTCKR.js → session-execution-engine-selector-UGC7DGUN.js} +1 -1
- package/chunks/{session-pr-refresh-PM7VAQTV.js → session-pr-refresh-KQLQ4MZY.js} +1 -1
- package/chunks/{sessionService-PO3LLZIZ.js → sessionService-Q6N7LF7Z.js} +1 -1
- package/chunks/{settings-JDQSRXP3.js → settings-23I6H76E.js} +1 -1
- package/chunks/{shell-JCEX3HKM.js → shell-IUECEVVY.js} +1 -1
- package/chunks/{skill-JSZBONIZ.js → skill-YKUETMPC.js} +1 -1
- package/chunks/{skill-settings-YGFG6GPN.js → skill-settings-ODYXOPCA.js} +1 -1
- package/chunks/{spawnChannel-VIIWSWTL.js → spawnChannel-7XU2SRWZ.js} +1 -1
- package/chunks/{standalone-update-2UU6FQZL.js → standalone-update-SWI2RL3L.js} +1 -1
- package/chunks/{start-opentui-ui-OSZZNSLY.js → start-opentui-ui-T53QJGCH.js} +1 -1
- package/chunks/{startInteractiveUI-FFH66MYH.js → startInteractiveUI-USTZGQOE.js} +1 -1
- package/chunks/{team-create-TKGDJ3NU.js → team-create-4A2XUE3D.js} +1 -1
- package/chunks/{team-plan-approval-3VJF4G6Z.js → team-plan-approval-4TS5CYN6.js} +1 -1
- package/chunks/{terminal-image-renderer-T3VJRZGP.js → terminal-image-renderer-C7553YV6.js} +1 -1
- package/chunks/{theme-manager-ZGUFLFUI.js → theme-manager-GTW75GOO.js} +1 -1
- package/chunks/{tool-call-3EQS5KSE.js → tool-call-YTUMWL3A.js} +1 -1
- package/chunks/{tool-result-media-7LFNVQ6E.js → tool-result-media-JYOYBX4J.js} +1 -1
- package/chunks/{tool-search-UDZ4S7T5.js → tool-search-Y4XTT2WF.js} +1 -1
- package/chunks/{total-session-admission-U4MII4RA.js → total-session-admission-EMJ5NRGL.js} +1 -1
- package/chunks/{trustedFolders-2NQJCIN3.js → trustedFolders-YG6WAVRE.js} +1 -1
- package/chunks/{update-relaunch-YKLWSCLC.js → update-relaunch-4QYQRCP4.js} +1 -1
- package/chunks/{updateCheck-YDLTQQRU.js → updateCheck-VRFPSX4G.js} +1 -1
- package/chunks/{upload-config-5QQKWF4O.js → upload-config-UCKGUYYQ.js} +1 -1
- package/chunks/{useAutoAcceptIndicator-AJS4WTU2.js → useAutoAcceptIndicator-2VGLKD7B.js} +1 -1
- package/chunks/{validateNonInterActiveAuth-AETOT7ZW.js → validateNonInterActiveAuth-GGMQXKKU.js} +1 -1
- package/chunks/{version-IB6DLRAG.js → version-Y46PG7II.js} +1 -1
- package/chunks/{web-fetch-LS3QARNR.js → web-fetch-7MPU555L.js} +1 -1
- package/chunks/{web-search-FGHRIVEB.js → web-search-HU2CL2X2.js} +1 -1
- package/chunks/{workflow-FX6XNETQ.js → workflow-U3D34QQX.js} +1 -1
- package/chunks/{workflow-ancestor-trust-5XXBGN6F.js → workflow-ancestor-trust-OWC4YTMR.js} +1 -1
- package/chunks/{workspace-agents-UJKLYPUK.js → workspace-agents-KHLAWSAR.js} +1 -1
- package/chunks/{workspace-providers-status-4JOHMTAW.js → workspace-providers-status-T57SE3YX.js} +1 -1
- package/chunks/{workspace-recovery-worker-XFEYQ4TP.js → workspace-recovery-worker-VYQ723ZE.js} +1 -1
- package/chunks/{workspace-registration-store-LWAPVNYC.js → workspace-registration-store-I7PR3A2Y.js} +1 -1
- package/chunks/{workspace-registry-M7OC376O.js → workspace-registry-YYUBXCLH.js} +1 -1
- package/chunks/{workspace-runtime-coordinator-CYHIL47L.js → workspace-runtime-coordinator-5ICAQO7W.js} +1 -1
- package/chunks/{workspace-service-43VZZ56B.js → workspace-service-YROWXOLQ.js} +1 -1
- package/chunks/{workspace-skills-status-V2TT6UJQ.js → workspace-skills-status-DKKQDTZJ.js} +1 -1
- package/chunks/{workspace-trust-reconciler-YZ4AG5ZW.js → workspace-trust-reconciler-3FPMUZDO.js} +1 -1
- package/chunks/{write-file-TGEH5MEZ.js → write-file-7QQVYFDT.js} +1 -1
- package/chunks/{zoom-image-TT6R7H2H.js → zoom-image-WL5EB6Q7.js} +1 -1
- package/cli.js +2 -2
- package/execution-worker.js +1 -1
- package/export-transcript-document.js +1 -1
- package/package.json +3 -3
- package/web-shell/assets/{PierreFilePreview-OsApm5-S.js → PierreFilePreview-BZ17f56_.js} +1 -1
- package/web-shell/assets/{SpreadsheetPreview-I1v1EzV7.js → SpreadsheetPreview-Bvkvr_5u.js} +1 -1
- package/web-shell/assets/{WorkspaceFileBrowser-BO6aug7i.js → WorkspaceFileBrowser-BJ_I4Uoz.js} +1 -1
- package/web-shell/assets/{abnfDiagram-VCTEODGH-DxuLMyN0.js → abnfDiagram-VCTEODGH-iuaBM15V.js} +1 -1
- package/web-shell/assets/{agents-route-CSJf6QPO.js → agents-route-CycwfNSC.js} +1 -1
- package/web-shell/assets/{arc-3--LekYQ.js → arc-C0lt8n55.js} +1 -1
- package/web-shell/assets/{architectureDiagram-5GKGNRK7-Dihq4uto.js → architectureDiagram-5GKGNRK7-Bw326d-A.js} +1 -1
- package/web-shell/assets/{blockDiagram-NRAW4CY4-BnaRPM2o.js → blockDiagram-NRAW4CY4-CHtFgBjV.js} +1 -1
- package/web-shell/assets/{c4Diagram-UCG6FXSJ-BtC94eMa.js → c4Diagram-UCG6FXSJ-Bx66oJT9.js} +1 -1
- package/web-shell/assets/channel-CRJuO00u.js +1 -0
- package/web-shell/assets/{chunk-2Q5K7J3B-2ZTXWP6M.js → chunk-2Q5K7J3B-BIshvfa_.js} +1 -1
- package/web-shell/assets/{chunk-5VM5RSS4-DBh7DP1F.js → chunk-5VM5RSS4-BZeRS6uD.js} +1 -1
- package/web-shell/assets/{chunk-F27PBJKO-xzqbWXBw.js → chunk-F27PBJKO-El-CGY2R.js} +1 -1
- package/web-shell/assets/{chunk-G27WJ6UU-DxnCrpxK.js → chunk-G27WJ6UU-DO8ZfQL_.js} +1 -1
- package/web-shell/assets/{chunk-JWPE2WC7-BPjRsozm.js → chunk-JWPE2WC7-yYFrrKAj.js} +1 -1
- package/web-shell/assets/{chunk-LCL6LL3I-Q2HgB3lf.js → chunk-LCL6LL3I-BFGuOKN0.js} +1 -1
- package/web-shell/assets/{chunk-POPQ4Y6H-9tlPaKu-.js → chunk-POPQ4Y6H-GRHK6sdV.js} +1 -1
- package/web-shell/assets/{chunk-SVP7TREG-DkNdOHCU.js → chunk-SVP7TREG-DwDu6GqZ.js} +1 -1
- package/web-shell/assets/{chunk-XXDRQBXY-D0G-Dhfi.js → chunk-XXDRQBXY-RoNDjkIy.js} +1 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-pPPByLA7.js +1 -0
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-pPPByLA7.js +1 -0
- package/web-shell/assets/{cose-bilkent-JH36ORCC-Ck0tHxul.js → cose-bilkent-JH36ORCC-CYNiiONE.js} +1 -1
- package/web-shell/assets/{cynefin-OW5HDTMX-a4-NTMHi.js → cynefin-OW5HDTMX-DC1_lDIG.js} +1 -1
- package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-Pg41Zbf2.js → cynefinDiagram-5FMLGOSQ-D2VxKm2n.js} +1 -1
- package/web-shell/assets/{dagre-3AP2YEHR-DT_ZmqkF.js → dagre-3AP2YEHR-C4_BHzpM.js} +1 -1
- package/web-shell/assets/{diagram-S7CK7UJ4-hapdMOl1.js → diagram-S7CK7UJ4-BpAO4-Gv.js} +1 -1
- package/web-shell/assets/{diagram-UQ7AKVKN-YZ0nbk56.js → diagram-UQ7AKVKN-DqUsFdsX.js} +1 -1
- package/web-shell/assets/{diagram-VSXAHHWV-DA_yNbWy.js → diagram-VSXAHHWV-DcMXIYMy.js} +1 -1
- package/web-shell/assets/{diagram-VX7I27RA-DoULuCLT.js → diagram-VX7I27RA-I3nr09ex.js} +1 -1
- package/web-shell/assets/{diagram-Z3DM3KII-B5c9o9zL.js → diagram-Z3DM3KII-CN-gvsTo.js} +1 -1
- package/web-shell/assets/{docx-preview-BulxdBjs.js → docx-preview-31J6RsS0.js} +1 -1
- package/web-shell/assets/{ebnfDiagram-PWID7BFC-B5hgIg3m.js → ebnfDiagram-PWID7BFC-DOQvLWlM.js} +1 -1
- package/web-shell/assets/{erDiagram-SSCWMZ5O-BEfEPozi.js → erDiagram-SSCWMZ5O-Cb5ijFZh.js} +1 -1
- package/web-shell/assets/{flowDiagram-A5DVABFB-CQHNk92v.js → flowDiagram-A5DVABFB-BecqqjnZ.js} +1 -1
- package/web-shell/assets/{ganttDiagram-EL5Y4UJY-BabdVgIM.js → ganttDiagram-EL5Y4UJY-DWY5vzQl.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-ujRZBFUo.js → gitGraphDiagram-WWUBYQGX-DqBnsZmZ.js} +1 -1
- package/web-shell/assets/{index-B9uXebIR.js → index-DDmiUW3b.js} +6 -6
- package/web-shell/assets/{index-DSZXdZnu.js → index-DabH7kHA.js} +1 -1
- package/web-shell/assets/{infoDiagram-RXCK75RN-CUHj9jJC.js → infoDiagram-RXCK75RN-MlotyOdT.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-5VMMS53U-CulW_q81.js → ishikawaDiagram-5VMMS53U-Daq_85C7.js} +1 -1
- package/web-shell/assets/{journeyDiagram-EYS64GPL-BR46CvRQ.js → journeyDiagram-EYS64GPL-OipivCxL.js} +1 -1
- package/web-shell/assets/{kanban-definition-3QL26DDD-HAoUqzFy.js → kanban-definition-3QL26DDD-zqaz7dLu.js} +1 -1
- package/web-shell/assets/{layout-DYLl7fyA.js → layout-Bi3msQMQ.js} +1 -1
- package/web-shell/assets/{linear-DPXABjDZ.js → linear-D4gPORvD.js} +1 -1
- package/web-shell/assets/{mermaid.core-Bi30Gi0n.js → mermaid.core-BUnytF7a.js} +6 -6
- package/web-shell/assets/{mindmap-definition-FBJOCRG2-B1_lUq4o.js → mindmap-definition-FBJOCRG2-B_X4iChu.js} +1 -1
- package/web-shell/assets/{pegDiagram-XKGWAZYB-Cy8tjJJC.js → pegDiagram-XKGWAZYB-z4wYBoBW.js} +1 -1
- package/web-shell/assets/{pieDiagram-E7YTZNPT-D6waLVVi.js → pieDiagram-E7YTZNPT-Dvyg6FYo.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-AXDQQJYC--6ehi_FI.js → quadrantDiagram-AXDQQJYC-CJBWU2Dk.js} +1 -1
- package/web-shell/assets/{railroadDiagram-O6MQD6OU-BhLy40X4.js → railroadDiagram-O6MQD6OU-Dl_An1O0.js} +1 -1
- package/web-shell/assets/{requirementDiagram-EFPCY7ZU-BVNXTgNP.js → requirementDiagram-EFPCY7ZU-Tw8FwaYU.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-P5KCCOFB-BHgTytxV.js → sankeyDiagram-P5KCCOFB-BCPCkbR0.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-CgOsTvhu.js → sequenceDiagram-WJ2MYXX4-DDj7uFTG.js} +1 -1
- package/web-shell/assets/{sizeCapture-X5ZJPWSS-vCQBQ5FI.js → sizeCapture-X5ZJPWSS-B9eVSpKb.js} +1 -1
- package/web-shell/assets/{stateDiagram-HBIQ2CUA-DytMYRWJ.js → stateDiagram-HBIQ2CUA-Bf4BZP_V.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-BPJi6Gre.js +1 -0
- package/web-shell/assets/{swimlanes-XN3QIQJK-CTGnifOP.js → swimlanes-XN3QIQJK-dyTWsZFj.js} +1 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Bw4NRtJQ.js +8 -0
- package/web-shell/assets/{timeline-definition-24CTP7MA-DEJ1cbn2.js → timeline-definition-24CTP7MA-DVl1A4uL.js} +1 -1
- package/web-shell/assets/{vennDiagram-4TSXK5OY-K1e4SjS0.js → vennDiagram-4TSXK5OY-Boosxy9D.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-VM6X3IG4-DEX-GkRp.js → wardleyDiagram-VM6X3IG4-C6wlY8jy.js} +1 -1
- package/web-shell/assets/{xychartDiagram-S5SC5T6Z-B6wYXreH.js → xychartDiagram-S5SC5T6Z-CkzZe3ro.js} +1 -1
- package/web-shell/index.html +1 -1
- package/web-shell/sw.js +1 -1
- package/web-shell/assets/channel-CLVrtVFX.js +0 -1
- package/web-shell/assets/classDiagram-DTDB5LWJ-Df2T70oB.js +0 -1
- package/web-shell/assets/classDiagram-v2-JRS7N3AN-Df2T70oB.js +0 -1
- package/web-shell/assets/stateDiagram-v2-4QOOHH4V-CcjUJGng.js +0 -1
- package/web-shell/assets/swimlanesDiagram-VK2B7HYN-Dt8NvQfX.js +0 -8
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Force strict mode and setup for ESM
|
|
2
2
|
"use strict";
|
|
3
|
-
import{resolveManagedRuntimeBrokerBaseUrl}from"./chunk-6S5XOXJ2.js";import{formatHostForAuthority,isLoopbackBind}from"./chunk-3SHHYK7S.js";import{CLIENT_ID_RE,MAX_CLIENT_ID_LENGTH}from"./chunk-K246IFIW.js";import{isPreAuthWebShellRequest}from"./chunk-DYM77DZZ.js";import{isInternalWorkspaceRuntime}from"./chunk-M5KJJE2X.js";import{MAX_CHILD_HEAP_MB,MIN_CHILD_HEAP_MB,recommendedChildShareMb}from"./chunk-2QYDBHYZ.js";import{MAX_REGISTERED_WORKSPACES}from"./chunk-7TDMQJTD.js";import{CLIENT_MCP_OVER_WS_CONFIG_FLAG}from"./chunk-WBDNGVHU.js";import{MAX_CHANNEL_STARTUP_FAILURES,MAX_CHANNEL_STARTUP_FAILURE_CHANNEL_LENGTH}from"./chunk-AVJJ62OC.js";import{conversationRuntimeUnavailableError}from"./chunk-QSHWWIZT.js";import{isWithinRoot}from"./chunk-IDXJIDME.js";import{parseToolWriteOriginMeta}from"./chunk-QS2ZMQIS.js";import{clearWorktreeSessionDurable,readWorktreeSession}from"./chunk-2Q7T5CR2.js";import{GitWorktreeService,WORKTREE_SESSION_FILE,gitEnv,readWorktreeSessionMarker,worktreeBranchForSlug}from"./chunk-ILECDNJX.js";import{NO_EXEC_CONFIG}from"./chunk-EBMCWXGZ.js";import{ROOT_CONTEXT,context,init_esm}from"./chunk-I4H7NUVP.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();init_esm();import{performance}from"node:perf_hooks";init_esbuild_shims();var daemonTelemetryResponseContext=Symbol("daemonTelemetryResponseContext");var daemonInboundTraceIdContext=Symbol("daemonInboundTraceIdContext");function getDaemonTelemetryInboundTraceId(res){try{return res[daemonInboundTraceIdContext]}catch{return void 0}}__name(getDaemonTelemetryInboundTraceId,"getDaemonTelemetryInboundTraceId");var SESSION_ID_RE=/\/session\/([^/]+)/;var ACCESS_LOG_BURST=60;var ACCESS_LOG_REFILL_PER_SECOND=2;var ACCESS_LOG_REJECT_BURST=30;var ACCESS_LOG_REJECT_REFILL_PER_SECOND=1;var ROUTE_MAX_BYTES=2*1024;var SESSION_ID_MAX_BYTES=256;var CLIENT_ID_MAX_BYTES=256;var ACCESS_LOG_CONTROLLER_LOCAL="accessLogController";var ACCESS_LOG_REJECT_LOCAL="accessLogPreAuthReject";var ACCESS_LOG_ERROR_CODE_LOCAL="accessLogErrorCode";var ACCESS_LOG_ERROR_REASON_LOCAL="accessLogErrorReason";function markAccessLogError(res,code,reason){const locals=res.locals;if(!locals)return;locals[ACCESS_LOG_ERROR_CODE_LOCAL]=code;if(reason!==void 0)locals[ACCESS_LOG_ERROR_REASON_LOCAL]=reason}__name(markAccessLogError,"markAccessLogError");function emptySuppressedCounts(){return{suppressed:0,status2xx:0,status3xx:0,status4xx:0,status5xx:0,statusOther:0}}__name(emptySuppressedCounts,"emptySuppressedCounts");function countSuppressed(counts,status){counts.suppressed+=1;if(status>=200&&status<300)counts.status2xx+=1;else if(status>=300&&status<400)counts.status3xx+=1;else if(status>=400&&status<500)counts.status4xx+=1;else if(status>=500&&status<600)counts.status5xx+=1;else counts.statusOther+=1}__name(countSuppressed,"countSuppressed");function firstRawHeader(rawHeaders,targetName){for(let i=0;i+1<rawHeaders.length;i+=2){if(rawHeaders[i]?.toLowerCase()===targetName)return rawHeaders[i+1]}return void 0}__name(firstRawHeader,"firstRawHeader");function truncateUtf8(value,maxBytes){const bytes=Buffer.from(value,"utf8");if(bytes.length<=maxBytes)return{value};let end=maxBytes;while(end>0&&(bytes[end]&192)===128)end-=1;return{value:bytes.subarray(0,end).toString("utf8"),originalBytes:bytes.length}}__name(truncateUtf8,"truncateUtf8");function installAccessLogMiddleware(app,daemonLog,monotonicNow=()=>performance.now()){let sealed=false;let tokens=ACCESS_LOG_BURST;let refillBaseline=monotonicNow();let rejectTokens=ACCESS_LOG_REJECT_BURST;let rejectRefillBaseline=refillBaseline;const suppressed=emptySuppressedCounts();const suppressedRejects=emptySuppressedCounts();const refill=__name(()=>{const now=Math.max(monotonicNow(),refillBaseline);tokens=Math.min(ACCESS_LOG_BURST,tokens+(now-refillBaseline)/1e3*ACCESS_LOG_REFILL_PER_SECOND);refillBaseline=now},"refill");const refillReject=__name(()=>{const now=Math.max(monotonicNow(),rejectRefillBaseline);rejectTokens=Math.min(ACCESS_LOG_REJECT_BURST,rejectTokens+(now-rejectRefillBaseline)/1e3*ACCESS_LOG_REJECT_REFILL_PER_SECOND);rejectRefillBaseline=now},"refillReject");const flushSuppressed=__name(counts=>{if(!daemonLog||counts.suppressed===0)return false;context.with(ROOT_CONTEXT,()=>{daemonLog.warn("access logs suppressed",{...counts})});Object.assign(counts,emptySuppressedCounts());return true},"flushSuppressed");const controller={sealAndFlushSuppressed:__name(()=>{if(sealed)return;sealed=true;try{flushSuppressed(suppressed);flushSuppressed(suppressedRejects)}catch{}},"sealAndFlushSuppressed")};app.locals[ACCESS_LOG_CONTROLLER_LOCAL]=controller;if(!daemonLog)return controller;app.use((req,res,next)=>{const{method,path:reqPath}=req;if(method==="GET"&&reqPath==="/health"||method==="POST"&&reqPath.endsWith("/heartbeat")){return next()}const startMs=monotonicNow();res.on("finish",()=>{try{if(sealed)return;const status=res.statusCode;if(method==="GET"&&reqPath.endsWith("/events")&&status===200){return}refill();refillReject();const isPreAuthReject=Boolean(res.locals?.[ACCESS_LOG_REJECT_LOCAL]);if(isPreAuthReject){if(suppressedRejects.suppressed>0&&rejectTokens>=1){rejectTokens-=1;flushSuppressed(suppressedRejects)}if(rejectTokens<1){countSuppressed(suppressedRejects,status);return}rejectTokens-=1}else{if(suppressed.suppressed>0&&tokens>=1){tokens-=1;flushSuppressed(suppressed)}if(tokens<1){countSuppressed(suppressed,status);return}tokens-=1}const route=truncateUtf8(`${method} ${reqPath}`,ROUTE_MAX_BYTES);const sessionMatch=reqPath.match(SESSION_ID_RE);const sessionId=sessionMatch?.[1]?truncateUtf8(sessionMatch[1],SESSION_ID_MAX_BYTES):void 0;const rawClientId=firstRawHeader(req.rawHeaders,"x-qwen-client-id");const clientId=rawClientId?truncateUtf8(rawClientId,CLIENT_ID_MAX_BYTES):void 0;const inboundTraceId=getDaemonTelemetryInboundTraceId(res);const locals=res.locals;const errorCode=status>=400&&typeof locals?.[ACCESS_LOG_ERROR_CODE_LOCAL]==="string"?locals[ACCESS_LOG_ERROR_CODE_LOCAL]:void 0;const errorReason=status>=400&&typeof locals?.[ACCESS_LOG_ERROR_REASON_LOCAL]==="string"?locals[ACCESS_LOG_ERROR_REASON_LOCAL]:void 0;const ctx={route:route.value,...route.originalBytes?{routeOriginalBytes:route.originalBytes}:{},...sessionId?{sessionId:sessionId.value,...sessionId.originalBytes?{sessionIdOriginalBytes:sessionId.originalBytes}:{}}:{},...clientId?{clientId:clientId.value,...clientId.originalBytes?{clientIdOriginalBytes:clientId.originalBytes}:{}}:{},...inboundTraceId?{traceId:inboundTraceId}:{},...errorCode?{code:errorCode}:{},...errorReason?{reason:errorReason}:{},status,durationMs:Math.max(0,Math.round(monotonicNow()-startMs))};if(status>=400)daemonLog.warn("request completed",ctx);else daemonLog.info("request completed",ctx)}catch{}});next()});return controller}__name(installAccessLogMiddleware,"installAccessLogMiddleware");init_esbuild_shims();import{randomUUID}from"node:crypto";var HOSTED_HARNESS_CAPABILITY_DIGEST_ENV="QWEN_HOSTED_HARNESS_CAPABILITY_DIGEST";var HOSTED_LIFECYCLE_V2_PROFILES_ENV="QWEN_HOSTED_LIFECYCLE_V2_PROFILES";var LIFECYCLE_V2_PROFILES=["hosted-workspace-shell/1","hosted-workspace-mcp/1"];var HOSTED_HARNESS_PROTOCOL_VERSION=1;var HOSTED_HARNESS_PROTOCOL_HEADER="X-Qwen-Harness-Protocol-Version";var HOSTED_HARNESS_BOOT_ID_HEADER="X-Qwen-Harness-Boot-Id";var HOSTED_HARNESS_UPGRADE="qwen-hosted-harness/1";var CAPABILITY_DIGEST_PATTERN=/^sha256:[0-9a-f]{64}$/u;var UUID_PATTERN=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;function isHostedHarnessCapabilityDigest(value){return CAPABILITY_DIGEST_PATTERN.test(value)}__name(isHostedHarnessCapabilityDigest,"isHostedHarnessCapabilityDigest");function createHostedHarnessContract(capabilityDigest,bootId=randomUUID(),lifecycleV2Profiles=(process.env[HOSTED_LIFECYCLE_V2_PROFILES_ENV]??"hosted-workspace-shell/1").split(",").filter(Boolean),instanceId=process.env["QWEN_HOSTED_HARNESS_INSTANCE_ID"]){if(lifecycleV2Profiles.some(profile=>!LIFECYCLE_V2_PROFILES.includes(profile))||new Set(lifecycleV2Profiles).size!==lifecycleV2Profiles.length){throw new Error(`${HOSTED_LIFECYCLE_V2_PROFILES_ENV} must list exact supported profiles once.`)}if(!isHostedHarnessCapabilityDigest(capabilityDigest)){throw new Error(`${HOSTED_HARNESS_CAPABILITY_DIGEST_ENV} must be sha256:<64 lowercase hex characters>.`)}if(!UUID_PATTERN.test(bootId)){throw new Error("Hosted Harness bootId must be an RFC UUID v1-v5.")}if(instanceId!==void 0&&!/^[A-Za-z0-9._:-]{1,128}$/u.test(instanceId))throw new Error("Invalid Hosted Harness instance identity.");return Object.freeze({...instanceId===void 0?{}:{instanceId},protocolVersions:Object.freeze({current:HOSTED_HARNESS_PROTOCOL_VERSION,supported:Object.freeze([HOSTED_HARNESS_PROTOCOL_VERSION])}),bootId:bootId.toLowerCase(),capabilityDigest,lifecycleProtocolVersion:1,lifecycleV2Profiles:Object.freeze([...lifecycleV2Profiles]),titleProtocolVersion:1,features:Object.freeze([...instanceId===void 0?[]:["harness-pool-owner/1","harness-instance-lifecycle/1"],"hosted_approval_resume_v1","hosted_model_round_recovery_v1","model-selection/1","context-compression/1","user-message-queue/1","public-child-agents/1","approval-selection/1","auto-approval/1","permission-rules/1","live-approval-selection/1","agent-definition-approval-selection/1","plan-mode/1","input-attachments/1","session-skills/1","session-skills/2","workspace-shell-mcp/1","session-mcp-management/1","session-extension-packages/1","recovery-cleanup/1","targeted-cancel/1","event-keepalive/1","web-fetch/1"])})}__name(createHostedHarnessContract,"createHostedHarnessContract");function hostedHarnessContractMiddleware(contract){return(req,res,next)=>{res.setHeader(HOSTED_HARNESS_BOOT_ID_HEADER,contract.bootId);if(req.get(HOSTED_HARNESS_PROTOCOL_HEADER)!==String(HOSTED_HARNESS_PROTOCOL_VERSION)){res.setHeader("Upgrade",HOSTED_HARNESS_UPGRADE);markAccessLogError(res,"hosted_harness_protocol_required");res.status(426).json({error:"Hosted Harness protocol version 1 is required.",code:"hosted_harness_protocol_required"});return}const requestedBootId=req.get(HOSTED_HARNESS_BOOT_ID_HEADER);if(!requestedBootId||!UUID_PATTERN.test(requestedBootId)){markAccessLogError(res,"invalid_hosted_harness_boot_id");res.status(400).json({error:"X-Qwen-Harness-Boot-Id must be an RFC UUID v1-v5.",code:"invalid_hosted_harness_boot_id"});return}if(requestedBootId.toLowerCase()!==contract.bootId){markAccessLogError(res,"hosted_harness_generation_mismatch");res.status(409).json({error:"Hosted Harness process generation changed.",code:"hosted_harness_generation_mismatch"});return}next()}}__name(hostedHarnessContractMiddleware,"hostedHarnessContractMiddleware");function installHostedHarnessContractMiddleware(app,contract){if(!contract)return;app.use("/session",hostedHarnessContractMiddleware(contract))}__name(installHostedHarnessContractMiddleware,"installHostedHarnessContractMiddleware");init_esbuild_shims();var HOSTED_CSI_SESSION_STORE_URL_ENV="QWEN_HOSTED_CSI_SESSION_STORE_URL";function validateHostedHarnessProfile(opts){if(opts.experimentalManagedAgents||opts.experimentalManagedRuntimeWorker||opts.experimentalManagedRuntimeAutoLocal||opts.experimentalManagedRuntimeUrl!==void 0||opts.experimentalManagedRuntimeToken!==void 0){throw new Error("Experimental Managed Gateway and Runtime worker modes are not implemented.")}if(opts.profile!=="hosted-harness"){if(opts.managedRuntimeBrokerUrl===void 0&&opts.managedRuntimeBrokerToken===void 0&&opts.hostedHarnessCapabilityDigest===void 0&&opts.hostedCsiSessionStoreUrl===void 0){return}throw new Error("Hosted Harness options require --profile hosted-harness.")}if(!isLoopbackBind(opts.hostname)){throw new Error("--profile hosted-harness requires a loopback --hostname.")}if(opts.mode!=="http-bridge"){throw new Error("--profile hosted-harness requires --http-bridge.")}if(!opts.token?.trim()){throw new Error("--profile hosted-harness requires a bearer token.")}if(opts.serveWebShell!==false){throw new Error("--profile hosted-harness requires --no-web.")}if(opts.enableSessionShell||opts.channelSelection!==void 0||opts.clientMcpOverWs||opts.cdpTunnelOverWs){throw new Error("--profile hosted-harness does not serve shells, channels, or WebSocket tunnels.")}if(opts.allowOrigins?.length){throw new Error("--profile hosted-harness does not accept browser origins.")}if(opts.experimentalPairedEngines){throw new Error("--profile hosted-harness does not pair execution engines.")}if(opts.managedRuntimeBrokerUrl!==void 0||opts.managedRuntimeBrokerToken!==void 0){if(!opts.managedRuntimeBrokerUrl||!opts.managedRuntimeBrokerToken?.trim()){throw new Error("Hosted Runtime Broker requires both URL and token.")}resolveManagedRuntimeBrokerBaseUrl(opts.managedRuntimeBrokerUrl)}if(!opts.hostedHarnessCapabilityDigest||!isHostedHarnessCapabilityDigest(opts.hostedHarnessCapabilityDigest)){throw new Error("--profile hosted-harness requires a sha256 capability digest.")}if(opts.hostedCsiSessionStoreUrl!==void 0){if(process.env["QWEN_HOSTED_HARNESS_INSTANCE_ID"]!==void 0)throw new Error("The shared Harness pool cannot host private CSI owners.");if(!opts.managedRuntimeBrokerUrl||!opts.managedRuntimeBrokerToken?.trim()){throw new Error("Private CSI attachment requires the original Runtime Broker.")}const url=new URL(opts.hostedCsiSessionStoreUrl);if(url.protocol!=="https:"&&url.protocol!=="http:"||url.username||url.password||url.search||url.hash||url.protocol==="http:"&&!isLoopbackBind(url.hostname)){throw new Error("Private CSI Session Store requires HTTPS or loopback HTTP without URL credentials.")}}}__name(validateHostedHarnessProfile,"validateHostedHarnessProfile");init_esbuild_shims();import{randomUUID as randomUUID2}from"node:crypto";var SANITIZE_FOR_STDERR_RE=new RegExp(String.raw`[\x00-\x1f\x7f-\x9f\u200b-\u200f\u2028-\u202e\u2066-\u2069\ufeff]`,"g");function sanitizeForStderr(value){return value.replace(SANITIZE_FOR_STDERR_RE,"?")}__name(sanitizeForStderr,"sanitizeForStderr");var DEVICE_FLOW_DEFAULT_INTERVAL_MS=5e3;var DEVICE_FLOW_TERMINAL_GRACE_MS=5*6e4;var DEVICE_FLOW_SWEEP_INTERVAL_MS=3e4;var DEVICE_FLOW_MAX_CONCURRENT=4;var DEVICE_FLOW_SLOW_DOWN_BUMP_MS=5e3;var DEVICE_FLOW_PERSIST_TIMEOUT_MS=3e4;var DEVICE_FLOW_START_TIMEOUT_MS=3e4;var DEVICE_FLOW_POLL_TIMEOUT_MS=3e4;var DEVICE_FLOW_MAX_EXPIRES_IN_SEC=60*60;var DEVICE_FLOW_MIN_EXPIRES_IN_SEC=30;var DEVICE_FLOW_MAX_INTERVAL_MS=6e4;var SECRET_BRAND=Symbol("DeviceFlowSecret");var SECRETS=new WeakMap;function brandSecret(value){const wrapper=Object.freeze({[SECRET_BRAND]:true,toString:__name(()=>"[redacted]","toString"),toJSON:__name(()=>"[redacted]","toJSON"),[Symbol.toPrimitive]:()=>"[redacted]"});SECRETS.set(wrapper,value);return wrapper}__name(brandSecret,"brandSecret");function unsafeRevealSecret(secret){const value=SECRETS.get(secret);if(value===void 0){throw new Error("unsafeRevealSecret: argument is not a BrandedSecret (was never registered, or its WeakMap binding was lost via serialization)")}return value}__name(unsafeRevealSecret,"unsafeRevealSecret");var UnsupportedDeviceFlowProviderError=class extends Error{static{__name(this,"UnsupportedDeviceFlowProviderError")}code="unsupported_provider";constructor(providerId){super(`Unsupported device-flow provider (internal: declared but not registered): ${providerId}`);this.name="UnsupportedDeviceFlowProviderError"}};var TooManyActiveDeviceFlowsError=class extends Error{static{__name(this,"TooManyActiveDeviceFlowsError")}code="too_many_active_flows";constructor(){super(`Too many active device-flow attempts. Cancel one of the existing flows or wait for them to expire.`);this.name="TooManyActiveDeviceFlowsError"}};var UpstreamDeviceFlowError=class extends Error{static{__name(this,"UpstreamDeviceFlowError")}code="upstream_error";constructor(message){super(message);this.name="UpstreamDeviceFlowError"}};var DeviceFlowPollTimeoutError=class extends Error{static{__name(this,"DeviceFlowPollTimeoutError")}code="poll_timeout";timeoutMs;_isRegistryTimeout=false;constructor(timeoutMs){super(`device-flow poll timeout after ${timeoutMs}ms`);this.name="DeviceFlowPollTimeoutError";this.timeoutMs=timeoutMs}};function makeRegistryPollTimeoutError(timeoutMs){const err=new DeviceFlowPollTimeoutError(timeoutMs);err._isRegistryTimeout=true;return err}__name(makeRegistryPollTimeoutError,"makeRegistryPollTimeoutError");var DEVICE_FLOW_REGISTRY_LOCAL="deviceFlowRegistry";function setDeviceFlowRegistry(app,registry){app.locals[DEVICE_FLOW_REGISTRY_LOCAL]=registry}__name(setDeviceFlowRegistry,"setDeviceFlowRegistry");function getDeviceFlowRegistry(app){return app.locals[DEVICE_FLOW_REGISTRY_LOCAL]}__name(getDeviceFlowRegistry,"getDeviceFlowRegistry");var DeviceFlowRegistry=class{constructor(deps){this.deps=deps;this.now=deps.now??(()=>Date.now());this.schedule=deps.schedule??((ms,cb)=>setTimeout(cb,ms));this.scheduleInterval=deps.scheduleInterval??((ms,cb)=>setInterval(cb,ms));this.clearScheduled=deps.clearScheduled??(h=>clearTimeout(h));this.clearScheduledInterval=deps.clearScheduledInterval??(h=>clearInterval(h));this.sweeperHandle=this.scheduleInterval(DEVICE_FLOW_SWEEP_INTERVAL_MS,()=>this.sweep());if(this.sweeperHandle&&typeof this.sweeperHandle.unref==="function"){this.sweeperHandle.unref()}}static{__name(this,"DeviceFlowRegistry")}byId=new Map;byProvider=new Map;inFlightStarts=new Map;sweeperHandle;disposed=false;now;schedule;scheduleInterval;clearScheduled;clearScheduledInterval;async start(params){if(this.disposed){throw new Error("DeviceFlowRegistry disposed")}const provider=this.deps.resolveProvider(params.providerId);if(!provider){throw new UnsupportedDeviceFlowProviderError(params.providerId)}const existing=this.byProvider.get(params.providerId);if(existing&&existing.status==="pending"){this.recordTakeover(existing,params.initiatorClientId);return{view:toPublicView(existing),attached:true}}const inFlight=this.inFlightStarts.get(params.providerId);if(inFlight){const result=await inFlight;const justCreated=this.byProvider.get(params.providerId);if(justCreated){this.recordTakeover(justCreated,params.initiatorClientId)}return{view:result.view,attached:true}}if(this.countActive()>=DEVICE_FLOW_MAX_CONCURRENT){throw new TooManyActiveDeviceFlowsError}const promise=this.doStart(params,provider);this.inFlightStarts.set(params.providerId,promise);try{return await promise}finally{if(this.inFlightStarts.get(params.providerId)===promise){this.inFlightStarts.delete(params.providerId)}}}async doStart(params,provider){const cancelController=new AbortController;let startResult;let startTimer;try{startResult=await new Promise((resolve3,reject)=>{startTimer=this.schedule(DEVICE_FLOW_START_TIMEOUT_MS,()=>{try{cancelController.abort(new Error("device-flow start timeout"))}catch{}reject(new UpstreamDeviceFlowError("device-flow start timeout (upstream IdP unresponsive)"))});provider.start({signal:cancelController.signal}).then(resolve3,reject)})}finally{if(startTimer!==void 0)this.clearScheduled(startTimer)}if(this.disposed){throw new Error("DeviceFlowRegistry disposed during start")}const expiresInSec=Number.isFinite(startResult.expiresIn)&&startResult.expiresIn>0?Math.min(DEVICE_FLOW_MAX_EXPIRES_IN_SEC,Math.max(DEVICE_FLOW_MIN_EXPIRES_IN_SEC,startResult.expiresIn)):600;const expiresAt=this.now()+expiresInSec*1e3;const intervalSec=Number.isFinite(startResult.interval)&&startResult.interval>0?startResult.interval:DEVICE_FLOW_DEFAULT_INTERVAL_MS/1e3;const intervalMs=Math.min(DEVICE_FLOW_MAX_INTERVAL_MS,Math.max(1e3,intervalSec*1e3));const entry={deviceFlowId:randomUUID2(),providerId:params.providerId,deviceCode:startResult.deviceCode,pkceVerifier:startResult.pkceVerifier,userCode:startResult.userCode,verificationUri:startResult.verificationUri,verificationUriComplete:startResult.verificationUriComplete,intervalMs,expiresAt,status:"pending",initiatorClientId:params.initiatorClientId,createdAt:this.now(),cancelController};this.byId.set(entry.deviceFlowId,entry);this.byProvider.set(entry.providerId,entry);this.deps.events.publish({type:"started",data:{deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,expiresAt:entry.expiresAt}},entry.initiatorClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"started",expiresInMs:entry.expiresAt-this.now()});this.schedulePoll(entry,provider);return{view:toPublicView(entry),attached:false}}get(deviceFlowId){const entry=this.byId.get(deviceFlowId);if(!entry)return void 0;return toPublicView(entry)}cancel(deviceFlowId,cancellerClientId){const entry=this.byId.get(deviceFlowId);if(!entry)return void 0;if(entry.persistInFlight){entry.cancelRequestedDuringPersist=true;if(!entry.cancellerRecorded){entry.cancellerRecorded=true;if(cancellerClientId){entry.cancellerClientId=cancellerClientId}}try{entry.cancelController.abort(new Error("cancel during persist"))}catch{}this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:cancellerClientId,status:"cancelled",hint:"deferred (persist in flight; final state decided by persist resolution)"});return{alreadyTerminal:false}}if(!this.transitionTerminal(entry,"cancelled")){return{alreadyTerminal:true}}this.deps.events.publish({type:"cancelled",data:{deviceFlowId:entry.deviceFlowId}},cancellerClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:cancellerClientId,status:"cancelled"});return{alreadyTerminal:false}}countActive(){let n=0;for(const entry of this.byProvider.values()){if(entry.status==="pending")n+=1}return n+this.inFlightStarts.size}schedulePoll(entry,provider){if(entry.status!=="pending")return;if(entry.deviceCode===void 0)return;if(this.disposed)return;entry.pollHandle=this.schedule(entry.intervalMs,()=>{void this.runPollTick(entry,provider)});if(entry.pollHandle&&typeof entry.pollHandle.unref==="function"){entry.pollHandle.unref()}}async runPollTick(entry,provider){if(entry.status!=="pending")return;if(this.disposed)return;if(entry.deviceCode===void 0)return;const now=this.now();if(now>=entry.expiresAt){this.expireEntry(entry);return}entry.lastPolledAt=now;let result;let rawProviderError;let pollTimedOut=false;let pollTimer;let providerPollPromise;try{result=await new Promise((resolve3,reject)=>{pollTimer=this.schedule(DEVICE_FLOW_POLL_TIMEOUT_MS,()=>{const timeoutError=makeRegistryPollTimeoutError(DEVICE_FLOW_POLL_TIMEOUT_MS);try{entry.cancelController.abort(timeoutError)}catch{}reject(timeoutError)});providerPollPromise=provider.poll({deviceCode:entry.deviceCode,pkceVerifier:entry.pkceVerifier},{signal:entry.cancelController.signal});providerPollPromise.then(resolve3,reject)})}catch(err){if(err instanceof DeviceFlowPollTimeoutError&&err._isRegistryTimeout===true){pollTimedOut=true;result={kind:"error",errorKind:"upstream_error",hint:`provider.poll() timed out after ${err.timeoutMs}ms; check IdP connectivity`}}else{rawProviderError=err instanceof Error?err.message:String(err);result={kind:"error",errorKind:"upstream_error",hint:"provider.poll() failed; see daemon audit log for details"}}}finally{if(pollTimer!==void 0)this.clearScheduled(pollTimer)}if(pollTimedOut&&providerPollPromise!==void 0){const tracked=providerPollPromise;const auditDeviceFlowId=entry.deviceFlowId;const auditProviderId=entry.providerId;const auditClientId=entry.initiatorClientId;const audit=this.deps.audit;void tracked.then(latePollResult=>{audit?.record({deviceFlowId:auditDeviceFlowId,providerId:auditProviderId,clientId:auditClientId,status:"failed",errorKind:"upstream_error",hint:latePollResult.kind==="error"?`lost_late_poll_after_timeout: provider.poll() resolved kind=error after ${DEVICE_FLOW_POLL_TIMEOUT_MS}ms ceiling \u2014 likely abort-driven cooperation; IdP responsiveness unknown`:`lost_late_poll_after_timeout: provider.poll() resolved kind=${sanitizeForStderr(latePollResult.kind)} after ${DEVICE_FLOW_POLL_TIMEOUT_MS}ms ceiling \u2014 IdP is responsive but slow; consider raising the operator-side IdP latency alert threshold`})},lateErr=>{if(lateErr instanceof DeviceFlowPollTimeoutError&&lateErr._isRegistryTimeout===true)return;const safeDetail=lateErr instanceof Error?`${sanitizeForStderr(lateErr.name)} (message ${lateErr.message.length} bytes; raw suppressed)`:`<non-Error throw: ${typeof lateErr}>`;audit?.record({deviceFlowId:auditDeviceFlowId,providerId:auditProviderId,clientId:auditClientId,status:"failed",errorKind:"upstream_error",hint:`lost_late_poll_after_timeout: provider.poll() rejected after ${DEVICE_FLOW_POLL_TIMEOUT_MS}ms ceiling: ${safeDetail}`})}).catch(()=>{})}if(this.disposed)return;if(entry.status!=="pending")return;switch(result.kind){case"pending":this.schedulePoll(entry,provider);return;case"slow_down":entry.intervalMs=Math.min(DEVICE_FLOW_MAX_INTERVAL_MS,entry.intervalMs+DEVICE_FLOW_SLOW_DOWN_BUMP_MS);this.deps.events.publish({type:"throttled",data:{deviceFlowId:entry.deviceFlowId,intervalMs:entry.intervalMs}},entry.initiatorClientId);this.schedulePoll(entry,provider);return;case"success":{let metadata={};let persistError;let persistTimer;let persistTimedOut=false;entry.persistInFlight=true;let persistTracker;try{persistTracker=result.persist({signal:entry.cancelController.signal})}catch(syncErr){persistError=syncErr;persistTracker=Promise.reject(syncErr);persistTracker.catch(()=>{})}persistTracker.then(lateMeta=>{if(!persistTimedOut)return;this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"authorized",hint:`lost_success_after_timeout (provider.persist ignored timeout signal; credentials on disk but registry already published persist_failed; expiresAt=${lateMeta.expiresAt??"unknown"})`})},()=>{});if(persistError===void 0){try{metadata=await new Promise((resolve3,reject)=>{persistTimer=this.schedule(DEVICE_FLOW_PERSIST_TIMEOUT_MS,()=>{persistTimedOut=true;try{entry.cancelController.abort(new Error("persist timeout"))}catch{}reject(new Error("persist timeout"))});persistTracker.then(resolve3,reject)})}catch(err){persistError=err}finally{if(persistTimer!==void 0)this.clearScheduled(persistTimer);entry.persistInFlight=false}}else{entry.persistInFlight=false}if(this.disposed)return;const cancelDuringPersist=entry.cancelRequestedDuringPersist===true;if(persistError){if(cancelDuringPersist){if(this.transitionTerminal(entry,"cancelled")){this.deps.events.publish({type:"cancelled",data:{deviceFlowId:entry.deviceFlowId}},entry.cancellerClientId??entry.initiatorClientId)}}else if(this.transitionTerminal(entry,"error","persist_failed")){const pastExpiry=this.now()>=entry.expiresAt;this.deps.events.publish({type:"failed",data:{deviceFlowId:entry.deviceFlowId,errorKind:"persist_failed",hint:"credentials could not be written to the daemon filesystem \u2014 check disk space and permissions"}},entry.initiatorClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"failed",errorKind:"persist_failed",...pastExpiry?{hint:"persist_also_failed_past_expiry (root cause is disk I/O; entry was past expiresAt by the time persist resolved)"}:{}})}return}if(this.transitionTerminal(entry,"authorized")){this.deps.events.publish({type:"authorized",data:{deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,expiresAt:metadata.expiresAt,accountAlias:metadata.accountAlias}},entry.initiatorClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"authorized",...cancelDuringPersist?{hint:"lost_success_kept (cancel during persist; credentials kept per IdP approval)"}:{}})}return}case"error":entry.hint=result.hint;if(this.transitionTerminal(entry,"error",result.errorKind)){this.deps.events.publish({type:"failed",data:{deviceFlowId:entry.deviceFlowId,errorKind:result.errorKind,hint:result.hint}},entry.initiatorClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"failed",errorKind:result.errorKind,...rawProviderError!==void 0?{hint:`provider.poll() threw (raw): ${sanitizeForStderr(rawProviderError)}`}:result.hint!==void 0?{hint:result.hint}:{}})}return;default:{const _exhaustive=result;void _exhaustive}}}recordTakeover(entry,takeoverClientId){if(!takeoverClientId)return;if(takeoverClientId===entry.initiatorClientId)return;if(takeoverClientId===entry.lastOriginatorClientId)return;entry.lastOriginatorClientId=takeoverClientId;this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:takeoverClientId,status:"started",hint:`take-over (per-provider singleton; original initiator=${entry.initiatorClientId??"(none)"})`})}expireEntry(entry){if(!this.transitionTerminal(entry,"expired","expired_token"))return;this.deps.events.publish({type:"failed",data:{deviceFlowId:entry.deviceFlowId,errorKind:"expired_token",hint:"device-flow expired without authorization"}},entry.initiatorClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"expired",errorKind:"expired_token"})}transitionTerminal(entry,status,errorKind){if(entry.status!=="pending")return false;entry.status=status;if(errorKind)entry.errorKind=errorKind;entry.terminalAt=this.now();if(entry.pollHandle){this.clearScheduled(entry.pollHandle);entry.pollHandle=void 0}entry.deviceCode=void 0;entry.pkceVerifier=void 0;try{entry.cancelController.abort()}catch{}if(this.byProvider.get(entry.providerId)===entry){this.byProvider.delete(entry.providerId)}return true}sweep(){if(this.disposed)return;const now=this.now();for(const entry of[...this.byId.values()]){if(entry.persistInFlight)continue;if(entry.status==="pending"&&now>=entry.expiresAt){this.expireEntry(entry);continue}if(entry.status!=="pending"&&entry.terminalAt!==void 0&&now-entry.terminalAt>=DEVICE_FLOW_TERMINAL_GRACE_MS){this.byId.delete(entry.deviceFlowId)}}}listPending(){const out=[];for(const entry of this.byId.values()){if(entry.status==="pending")out.push(toPublicView(entry))}return out}dispose(){if(this.disposed)return;this.disposed=true;if(this.sweeperHandle){this.clearScheduledInterval(this.sweeperHandle);this.sweeperHandle=void 0}for(const entry of this.byId.values()){if(entry.pollHandle){this.clearScheduled(entry.pollHandle);entry.pollHandle=void 0}try{entry.cancelController.abort()}catch{}entry.deviceCode=void 0;entry.pkceVerifier=void 0}this.byId.clear();this.byProvider.clear()}};function toPublicView(entry){const base={deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,status:entry.status,createdAt:entry.createdAt,initiatorClientId:entry.initiatorClientId};if(entry.errorKind)base.errorKind=entry.errorKind;if(entry.hint)base.hint=entry.hint;if(entry.lastPolledAt!==void 0)base.lastPolledAt=entry.lastPolledAt;if(entry.status==="pending"){base.userCode=entry.userCode;base.verificationUri=entry.verificationUri;base.verificationUriComplete=entry.verificationUriComplete;base.expiresAt=entry.expiresAt;base.intervalMs=entry.intervalMs}return base}__name(toPublicView,"toPublicView");init_esbuild_shims();var ACP_WRITE_ROUTE="ACP writeTextFile";var ACP_READ_ROUTE="ACP readTextFile";function buildAuditContext(params,route){return{route,...params.sessionId?{sessionId:params.sessionId}:{}}}__name(buildAuditContext,"buildAuditContext");function createBridgeFileSystemAdapter(factory,options={}){return{async writeText(params){const ctx=buildAuditContext(params,ACP_WRITE_ROUTE);if(options.allowSameHostToolWritesOutsideWorkspace===true&&parseToolWriteOriginMeta(params._meta)!==void 0&&factory.writeSameHostToolText!==void 0){await factory.writeSameHostToolText(ctx,{path:params.path,content:params.content,...sanitizeWriteMeta(params._meta)});return{}}const wfs=factory.forRequest(ctx);const resolved=await wfs.resolve(params.path,"write");await wfs.writeTextOverwrite(resolved,params.content);return{}},async readText(params){const wfs=factory.forRequest(buildAuditContext(params,ACP_READ_ROUTE));const resolved=await wfs.resolve(params.path,"read");const opts={};if(typeof params.line==="number"&¶ms.line>0){opts.line=params.line}if(typeof params.limit==="number"&¶ms.limit>0){opts.limit=params.limit}const{content}=await wfs.readText(resolved,opts);return{content}}}}__name(createBridgeFileSystemAdapter,"createBridgeFileSystemAdapter");function sanitizeWriteMeta(meta){const sanitized={};if(typeof meta?.["bom"]==="boolean"){sanitized.bom=meta["bom"]}if(typeof meta?.["encoding"]==="string"){sanitized.encoding=meta["encoding"]}if(meta?.["lineEnding"]==="lf"||meta?.["lineEnding"]==="crlf"){sanitized.lineEnding=meta["lineEnding"]}return Object.keys(sanitized).length>0?{meta:sanitized}:{}}__name(sanitizeWriteMeta,"sanitizeWriteMeta");init_esbuild_shims();var PathMutexRegistry=class{static{__name(this,"PathMutexRegistry")}tails=new Map;async runExclusive(key,fn){const previous=this.tails.get(key)??Promise.resolve();let release;const current=new Promise(resolve3=>{release=resolve3});const tail=previous.catch(()=>void 0).then(()=>current);this.tails.set(key,tail);await previous.catch(()=>void 0);try{return await fn()}finally{release();if(this.tails.get(key)===tail)this.tails.delete(key)}}};init_esbuild_shims();function isDeepHealthQuery(raw){return raw==="1"||raw==="true"||raw===""}__name(isDeepHealthQuery,"isDeepHealthQuery");init_esbuild_shims();import{createHash,randomBytes,timingSafeEqual}from"node:crypto";var MAX_WEB_SHELL_DEVICES=128;var CredentialStore=class{static{__name(this,"CredentialStore")}#runtime;#pairing=new Map;#webShell=new Map;#desktopRelay=new Map;constructor(runtimeToken){this.#runtime=hashToken(runtimeToken)}addPairingToken(id,token){this.#pairing.set(id,createHash("sha256").update(token,"utf8").digest())}revokePairingToken(id){return this.#pairing.delete(id)}addWebShellToken(id,token){if(this.#webShell.size>=MAX_WEB_SHELL_DEVICES)return false;this.#webShell.set(id,{digest:createHash("sha256").update(token,"utf8").digest(),createdAt:Date.now()});return true}revokeWebShellToken(id){return this.#webShell.delete(id)}listWebShellDevices(){return Array.from(this.#webShell,([id,entry])=>({id,createdAt:entry.createdAt}))}createDesktopRelayCredential(claim){const now=Date.now();for(const[digest,entry]of this.#desktopRelay){if(entry.expiresAt<=now)this.#desktopRelay.delete(digest)}if(this.#desktopRelay.size>=128)return void 0;const credential=randomBytes(32).toString("base64url");this.#desktopRelay.set(digestToken(credential),{...claim,expiresAt:now+12e4});return credential}consumeDesktopRelayCredential(credential,acpPath){const digest=digestToken(credential);const claim=this.#desktopRelay.get(digest);if(!claim)return void 0;this.#desktopRelay.delete(digest);if(claim.expiresAt<=Date.now()||claim.acpPath!==acpPath){return void 0}return{acpPath:claim.acpPath,sessionId:claim.sessionId}}isOpen(listener){if(listener.kind==="local-control")return false;return this.#runtime===void 0}verify(credentials,listener){const candidate=createHash("sha256").update(credentials,"utf8").digest();let matched=false;if(listener.kind==="local-control"){for(const expected of this.#pairing.values()){if(equalDigest(candidate,expected))matched=true}return matched}if(this.#runtime!==void 0&&equalDigest(candidate,this.#runtime)){matched=true}for(const{digest}of this.#webShell.values()){if(equalDigest(candidate,digest))matched=true}return matched}};function singleTokenCredentials(token){const expected=hashToken(token);return{isOpen:__name(listener=>expected===void 0&&listener.kind!=="local-control","isOpen"),verify:__name((candidate,listener)=>{if(expected===void 0||listener.kind==="local-control"){return false}return equalDigest(createHash("sha256").update(candidate,"utf8").digest(),expected)},"verify")}}__name(singleTokenCredentials,"singleTokenCredentials");function hashToken(token){return token===void 0||token===""?void 0:createHash("sha256").update(token,"utf8").digest()}__name(hashToken,"hashToken");function digestToken(token){return createHash("sha256").update(token,"utf8").digest("hex")}__name(digestToken,"digestToken");function equalDigest(a,b){return a.length===b.length&&timingSafeEqual(a,b)}__name(equalDigest,"equalDigest");init_esbuild_shims();var LISTENER_TAG=Symbol.for("qwen.serve.listenerIdentity");function tagListener(server,identity){server[LISTENER_TAG]=identity}__name(tagListener,"tagListener");var PRIMARY={kind:"primary"};function fromServer(server){if(!server||typeof server!=="object")return void 0;return server[LISTENER_TAG]}__name(fromServer,"fromServer");function listenerIdentityOf(req){const socket=req.socket;return fromServer(socket?.server)??PRIMARY}__name(listenerIdentityOf,"listenerIdentityOf");function listenerIdentityOfSocket(socket){const withServer=socket;return fromServer(withServer?.server)??PRIMARY}__name(listenerIdentityOfSocket,"listenerIdentityOfSocket");init_esbuild_shims();function markPreAuthReject(res){(res.locals??={})[ACCESS_LOG_REJECT_LOCAL]=true}__name(markPreAuthReject,"markPreAuthReject");var denyBrowserOriginCors=__name((req,res,next)=>{if(req.headers.origin){res.setHeader("Vary","Origin");markPreAuthReject(res);res.status(403).json({error:"Request denied by CORS policy"});return}next()},"denyBrowserOriginCors");var InvalidAllowOriginPatternError=class extends Error{static{__name(this,"InvalidAllowOriginPatternError")}pattern;constructor(pattern,reason){super(`Invalid --allow-origin pattern ${JSON.stringify(pattern)}: ${reason}. Expected \`*\`, a URL origin of the form \`<scheme>://<host>[:<port>]\`, or a loopback port wildcard \`<scheme>://<loopback-host>:*\` (no trailing slash, no path, no userinfo, no query).`);this.name="InvalidAllowOriginPatternError";this.pattern=pattern}};function parseAllowOriginPatterns(raw){const origins=new Set;const loopbackPortWildcards=[];let allowAny=false;for(const entry of raw){if(entry==="*"){allowAny=true;continue}if(entry.endsWith(":*")){const base=entry.slice(0,-2);let parsed2;try{parsed2=new URL(base)}catch{throw new InvalidAllowOriginPatternError(entry,"not a parseable URL")}if(parsed2.protocol!=="http:"&&parsed2.protocol!=="https:"){throw new InvalidAllowOriginPatternError(entry,"port wildcards are only supported for http and https origins")}if(parsed2.origin!==base){throw new InvalidAllowOriginPatternError(entry,`expected the canonical origin ${JSON.stringify(parsed2.origin)} without trailing slash, path, userinfo, or query`)}if(parsed2.port!==""){throw new InvalidAllowOriginPatternError(entry,"a port wildcard replaces the port; do not name one before `:*`")}if(!isLoopbackBind(parsed2.hostname)){throw new InvalidAllowOriginPatternError(entry,"port wildcards are only supported for loopback hosts")}loopbackPortWildcards.push({protocol:parsed2.protocol,hostname:parsed2.hostname.toLowerCase()});continue}let parsed;try{parsed=new URL(entry)}catch{throw new InvalidAllowOriginPatternError(entry,"not a parseable URL")}const canonical=parsed.origin==="null"?`${parsed.protocol}//${parsed.host}`:parsed.origin;if(canonical!==entry){throw new InvalidAllowOriginPatternError(entry,`expected the canonical origin ${JSON.stringify(canonical)} without trailing slash, path, userinfo, or query`)}origins.add(canonical.toLowerCase())}return{allowAny,origins,loopbackPortWildcards}}__name(parseAllowOriginPatterns,"parseAllowOriginPatterns");function findNonLoopbackHttpOrigin(patterns){for(const origin of patterns.origins){const parsed=new URL(origin);if((parsed.protocol==="http:"||parsed.protocol==="https:")&&!isLoopbackBind(parsed.hostname)){return origin}}return void 0}__name(findNonLoopbackHttpOrigin,"findNonLoopbackHttpOrigin");function matchesLoopbackPortWildcard(origin,wildcards){if(!wildcards||wildcards.length===0)return false;let parsed;try{parsed=new URL(origin)}catch{return false}if(parsed.origin!==origin){const defaultPort=parsed.protocol==="http:"?"80":"443";if(origin!==`${parsed.origin}:${defaultPort}`)return false}return wildcards.some(wildcard=>wildcard.protocol===parsed.protocol&&wildcard.hostname===parsed.hostname)}__name(matchesLoopbackPortWildcard,"matchesLoopbackPortWildcard");function originIsExplicitlyAllowed(patterns,origin){const normalized=origin.toLowerCase();if(patterns.origins.has(normalized))return true;return matchesLoopbackPortWildcard(normalized,patterns.loopbackPortWildcards)}__name(originIsExplicitlyAllowed,"originIsExplicitlyAllowed");function allowOriginMatches(patterns,origin){return patterns.allowAny||originIsExplicitlyAllowed(patterns,origin)}__name(allowOriginMatches,"allowOriginMatches");var MutableOriginAllowlist=class{static{__name(this,"MutableOriginAllowlist")}#allowAny;#static;#wildcards;#dynamic=new Map;constructor(base){this.#allowAny=base.allowAny;this.#static=new Set(base.origins);this.#wildcards=base.loopbackPortWildcards??[]}allows(origin){if(this.#allowAny)return true;const normalized=origin.toLowerCase();if(this.#static.has(normalized))return true;if(matchesLoopbackPortWildcard(normalized,this.#wildcards))return true;for(const value of this.#dynamic.values()){if(value===normalized)return true}return false}add(key,origin){this.#dynamic.set(key,origin.toLowerCase())}remove(key){this.#dynamic.delete(key)}};function toMatcher(patterns){return"allows"in patterns?patterns:{allows:__name(origin=>allowOriginMatches(patterns,origin),"allows")}}__name(toMatcher,"toMatcher");function allowOriginCors(patterns){const matcher=toMatcher(patterns);const allowedMethods="GET, POST, PATCH, DELETE, OPTIONS";const allowedHeaders="Authorization, Content-Type, X-Qwen-Client-Id, Last-Event-ID, X-Qwen-Event-Epoch";const maxAgeSeconds="86400";const exposedHeaders="Retry-After, X-Qwen-Event-Epoch, X-Qwen-SSE-Stream-Id";return(req,res,next)=>{const origin=req.headers.origin;if(!origin){next();return}if(origin==="null"){res.setHeader("Vary","Origin");markPreAuthReject(res);res.status(403).json({error:"Request denied by CORS policy"});return}const matched=matcher.allows(origin);if(matched){res.setHeader("Access-Control-Allow-Origin",origin);res.setHeader("Vary","Origin");res.setHeader("Access-Control-Allow-Methods",allowedMethods);res.setHeader("Access-Control-Allow-Headers",allowedHeaders);res.setHeader("Access-Control-Max-Age",maxAgeSeconds);res.setHeader("Access-Control-Expose-Headers",exposedHeaders);if(req.method==="OPTIONS"&&(req.headers["access-control-request-method"]||req.headers["access-control-request-headers"])){res.status(204).end();return}next();return}res.setHeader("Vary","Origin");markPreAuthReject(res);res.status(403).json({error:"Request denied by CORS policy"})}}__name(allowOriginCors,"allowOriginCors");function hostAllowlist(bind,getPort){const primaryGate=buildPrimaryHostGate(bind,getPort);return(req,res,next)=>{const listener=listenerIdentityOf(req);if(listener.kind!=="local-control"){primaryGate(req,res,next);return}const host=(req.headers.host||"").toLowerCase();const browserHost=listener.origin===void 0?void 0:new URL(listener.origin).host.toLowerCase();if(listener.authority===void 0||host!==listener.authority&&host!==browserHost){markPreAuthReject(res);res.status(403).json({error:"Invalid Host header"});return}next()}}__name(hostAllowlist,"hostAllowlist");function buildPrimaryHostGate(bind,getPort){if(!isLoopbackBind(bind)){return(_req,_res,next)=>next()}let cachedPort=-1;let cachedAllowed=new Set;const boundHost=formatHostForAuthority(bind);const allowedFor=__name(port=>{if(port===cachedPort)return cachedAllowed;cachedPort=port;cachedAllowed=new Set([`localhost:${port}`,`127.0.0.1:${port}`,`[::1]:${port}`,`host.docker.internal:${port}`,`${boundHost}:${port}`]);if(port===80||port===443){cachedAllowed.add("localhost");cachedAllowed.add("127.0.0.1");cachedAllowed.add("[::1]");cachedAllowed.add("host.docker.internal");cachedAllowed.add(boundHost)}return cachedAllowed},"allowedFor");return(req,res,next)=>{const port=getPort();const host=(req.headers.host||"").toLowerCase();if(!allowedFor(port).has(host)){markPreAuthReject(res);res.status(403).json({error:"Invalid Host header"});return}next()}}__name(buildPrimaryHostGate,"buildPrimaryHostGate");function bearerAuth(source){const credentials=typeof source==="object"&&source!==null?source:singleTokenCredentials(source);return(req,res,next)=>{const listener=listenerIdentityOf(req);if(credentials.isOpen(listener)){next();return}const header=req.headers.authorization;if(!header){res.status(401).json({error:"Unauthorized"});return}const schemeEnd=header.indexOf(" ");if(schemeEnd<=0){res.status(401).json({error:"Unauthorized"});return}const scheme=header.slice(0,schemeEnd).toLowerCase();if(scheme!=="bearer"){res.status(401).json({error:"Unauthorized"});return}let credStart=schemeEnd+1;while(credStart<header.length&&(header.charCodeAt(credStart)===32||header.charCodeAt(credStart)===9)){credStart++}const presented=header.slice(credStart);if(presented.length===0){res.status(401).json({error:"Unauthorized"});return}if(!credentials.verify(presented,listener)){res.status(401).json({error:"Unauthorized"});return}req[AUTHENTICATED_REQUEST]=true;next()}}__name(bearerAuth,"bearerAuth");var AUTHENTICATED_REQUEST=Symbol("qwen.serve.authenticatedRequest");function requestWasAuthenticated(req){return req[AUTHENTICATED_REQUEST]===true}__name(requestWasAuthenticated,"requestWasAuthenticated");function isTrustedLoopbackMode(input){return input.loopbackBind&&!input.tokenConfigured&&!input.requireAuth}__name(isTrustedLoopbackMode,"isTrustedLoopbackMode");function requestHasOperatorAuthority(req,trustedLoopbackMode){return requestWasAuthenticated(req)||trustedLoopbackMode&&listenerIdentityOf(req).kind==="primary"}__name(requestHasOperatorAuthority,"requestHasOperatorAuthority");function createMutationGate(deps){const passthrough=__name((_req,_res,next)=>next(),"passthrough");if(deps.tokenConfigured){return()=>passthrough}const trustedLoopbackMode=deps.trustedLoopbackMode===true&&deps.requireAuth===false;const strictDenier=__name((req,res,next)=>{if(requestHasOperatorAuthority(req,trustedLoopbackMode)){next();return}res.status(401).json({error:"This route requires the daemon to be configured with a bearer token. Set QWEN_SERVER_TOKEN or pass --token to enable bearer auth.",code:"token_required"})},"strictDenier");return(opts={})=>opts.strict?strictDenier:passthrough}__name(createMutationGate,"createMutationGate");init_esbuild_shims();import{TLSSocket}from"node:tls";function installRemoteSelfOriginMiddleware(app,bind,token){if(isLoopbackBind(bind)||!token)return;const authenticate=bearerAuth(token);app.use((req,res,next)=>{const origin=req.headers.origin;const host=req.headers.host;if(!origin||!host||listenerIdentityOf(req).kind!=="primary"){next();return}const scheme=req.socket instanceof TLSSocket&&req.socket.encrypted?"https":"http";let authority=host.toLowerCase();if(scheme==="http"&&authority.endsWith(":80"))authority=authority.slice(0,-3);else if(scheme==="https"&&authority.endsWith(":443"))authority=authority.slice(0,-4);if(origin!==`${scheme}://${authority}`){next();return}try{if(new URL(origin).origin!==origin){next();return}}catch{next();return}(res.locals??={})[ACCESS_LOG_REJECT_LOCAL]=true;const allow=__name(()=>{delete res.locals[ACCESS_LOG_REJECT_LOCAL];delete req.headers.origin;next()},"allow");if(isPreAuthWebShellRequest(req)||req.method==="POST"&&req.path==="/web-shell/pairing/exchange")allow();else authenticate(req,res,allow)})}__name(installRemoteSelfOriginMiddleware,"installRemoteSelfOriginMiddleware");function installSelfOriginStripMiddleware(app,getPort,bind){let cachedStripPort=-1;let cachedSelfOrigins=new Set;const boundHost=isLoopbackBind(bind)?formatHostForAuthority(bind):void 0;app.use((req,_res,next)=>{const origin=req.headers.origin;if(origin){const port=getPort();if(port!==cachedStripPort){cachedStripPort=port;cachedSelfOrigins=new Set([`http://127.0.0.1:${port}`,`http://localhost:${port}`,`http://[::1]:${port}`,`http://host.docker.internal:${port}`,`https://127.0.0.1:${port}`,`https://localhost:${port}`,`https://[::1]:${port}`,`https://host.docker.internal:${port}`]);if(boundHost){cachedSelfOrigins.add(`http://${boundHost}:${port}`);cachedSelfOrigins.add(`https://${boundHost}:${port}`)}if(port===80){for(const host of["127.0.0.1","localhost","[::1]","host.docker.internal"]){cachedSelfOrigins.add(`http://${host}`)}if(boundHost){cachedSelfOrigins.add(`http://${boundHost}`)}}else if(port===443){for(const host of["127.0.0.1","localhost","[::1]","host.docker.internal"]){cachedSelfOrigins.add(`https://${host}`)}if(boundHost){cachedSelfOrigins.add(`https://${boundHost}`)}}}if(cachedSelfOrigins.has(origin)){delete req.headers.origin}}next()})}__name(installSelfOriginStripMiddleware,"installSelfOriginStripMiddleware");init_esbuild_shims();function acpChildExtraArgs(opts){const extraArgs=[...opts.experimentalLsp===true?["--experimental-lsp"]:[],...opts.restoreAskUserQuestion===true?["--restore-ask-user-question"]:[]];return extraArgs.length>0?extraArgs:void 0}__name(acpChildExtraArgs,"acpChildExtraArgs");init_esbuild_shims();var ClientMcpSenderRegistry=class{static{__name(this,"ClientMcpSenderRegistry")}senders=new Map;sessionSenders=new Map;sessionScopedServerNames=new Set;set(serverName,sender,owner){this.senders.set(serverName,{sender,owner})}delete(serverName,owner){if(this.senders.get(serverName)?.owner===owner){this.senders.delete(serverName)}}owns(serverName,owner){return this.senders.get(serverName)?.owner===owner}setSession(serverName,sessionId,sender,owner,registration,release){let bySession=this.sessionSenders.get(serverName);if(!bySession){bySession=new Map;this.sessionSenders.set(serverName,bySession)}bySession.get(sessionId)?.release?.();bySession.set(sessionId,{sender,owner,registration,release});this.sessionScopedServerNames.add(serverName)}ownsSession(serverName,sessionId,owner){return this.sessionSenders.get(serverName)?.get(sessionId)?.owner===owner}hasSession(serverName,sessionId){return this.sessionSenders.get(serverName)?.has(sessionId)===true}deleteSession(serverName,sessionId,owner,registration){const bySession=this.sessionSenders.get(serverName);const entry=bySession?.get(sessionId);if(entry?.owner!==owner)return false;if(registration!==void 0&&entry.registration!==registration){return false}bySession.delete(sessionId);entry.release?.();if(bySession.size===0){this.sessionSenders.delete(serverName);this.sessionScopedServerNames.delete(serverName)}return true}serverNames(){return[...this.senders.keys()]}lookup=__name(serverName=>{const entry=this.senders.get(serverName);const sessionEntries=this.sessionSenders.get(serverName);if(!entry&&!sessionEntries)return void 0;return(payload,context2)=>{if(context2?.sessionId){const sessionEntry=sessionEntries?.get(context2.sessionId);if(sessionEntry)return sessionEntry.sender(payload);if(this.sessionScopedServerNames.has(serverName)){return Promise.reject(new Error(`No session-scoped MCP sender for '${serverName}' in session '${context2.sessionId}'.`))}}if(this.sessionScopedServerNames.has(serverName)){return Promise.reject(new Error(`Session-scoped MCP server '${serverName}' requires a session context.`))}if(!entry){return Promise.reject(new Error(`No client MCP sender for '${serverName}'.`))}return entry.sender(serverName,payload)}},"lookup")};async function registerSessionScopedClientMcpServer(registry,bridge,originatorClientId,serverName,sendSdkMcpMessage,sessionId,onSessionClosed){const registration={};const controller=new AbortController;const events=bridge.subscribeEvents?.(sessionId,{signal:controller.signal});registry.setSession(serverName,sessionId,payload=>sendSdkMcpMessage(serverName,payload),originatorClientId,registration,()=>{controller.abort();void bridge.detachClient?.(sessionId).catch(()=>{})});if(events){void(async()=>{let current=events;let sessionClosed=false;try{while(!controller.signal.aborted){let evicted=false;for await(const event of current){const type=event!==null&&typeof event==="object"?event.type:void 0;if(type==="session_closed"){sessionClosed=true;break}if(type==="client_evicted")evicted=true}if(sessionClosed||controller.signal.aborted)break;if(!evicted){sessionClosed=true;break}let replacement;try{replacement=bridge.subscribeEvents?.(sessionId,{signal:controller.signal})}catch{sessionClosed=true;break}if(!replacement)break;current=replacement}}finally{if(sessionClosed&&!controller.signal.aborted&®istry.deleteSession(serverName,sessionId,originatorClientId,registration)){onSessionClosed?.();await bridge.removeSessionRuntimeMcpServer(sessionId,serverName,originatorClientId).catch(()=>{})}}})().catch(()=>{})}try{const runtimeConfig={type:"sdk",[CLIENT_MCP_OVER_WS_CONFIG_FLAG]:true,alwaysLoadTools:true};const result=await bridge.addSessionRuntimeMcpServer(sessionId,serverName,runtimeConfig,originatorClientId);if(result.skipped){throw new Error(`runtime MCP add skipped: ${result.reason??"unknown"}`)}if(result.shadowedSettings){throw new Error(`client MCP server '${serverName}' conflicts with a configured MCP server`)}if(!registry.ownsSession(serverName,sessionId,originatorClientId)){if(!registry.hasSession(serverName,sessionId)){await bridge.removeSessionRuntimeMcpServer(sessionId,serverName,originatorClientId).catch(()=>{})}throw new Error(`client MCP registration for '${serverName}' was superseded`)}return{toolCount:result.toolCount}}catch(err){if(registry.deleteSession(serverName,sessionId,originatorClientId,registration)){await bridge.removeSessionRuntimeMcpServer(sessionId,serverName,originatorClientId).catch(()=>{})}throw err}}__name(registerSessionScopedClientMcpServer,"registerSessionScopedClientMcpServer");function createClientMcpServerProvider(registry,bridge,originatorClientId){return{async registerClientMcpServer(serverName,sendSdkMcpMessage,scope,onSessionClosed){if(scope?.sessionId!==void 0){return registerSessionScopedClientMcpServer(registry,bridge,originatorClientId,serverName,sendSdkMcpMessage,scope.sessionId,onSessionClosed)}registry.set(serverName,sendSdkMcpMessage,originatorClientId);try{const runtimeConfig={type:"sdk",[CLIENT_MCP_OVER_WS_CONFIG_FLAG]:true};const result=await bridge.addRuntimeMcpServer(serverName,runtimeConfig,originatorClientId);if(result.skipped){registry.delete(serverName,originatorClientId);throw new Error(`runtime MCP add skipped: ${result.reason??"unknown"}`)}if(result.shadowedSettings){await bridge.removeRuntimeMcpServer(serverName,originatorClientId).catch(()=>{});throw new Error(`client MCP server '${serverName}' conflicts with a configured MCP server`)}return{toolCount:result.toolCount}}catch(err){registry.delete(serverName,originatorClientId);throw err}},async unregisterClientMcpServer(serverName,scope){const sessionId=scope?.sessionId;if(sessionId!==void 0){if(!registry.deleteSession(serverName,sessionId,originatorClientId)){return}await bridge.removeSessionRuntimeMcpServer(sessionId,serverName,originatorClientId).catch(()=>{});return}if(!registry.owns(serverName,originatorClientId))return;registry.delete(serverName,originatorClientId);await bridge.removeRuntimeMcpServer(serverName,originatorClientId).catch(()=>{})}}}__name(createClientMcpServerProvider,"createClientMcpServerProvider");init_esbuild_shims();var SERVE_PROTOCOL_VERSION="v1";var SUPPORTED_SERVE_PROTOCOL_VERSIONS=[SERVE_PROTOCOL_VERSION];var SERVE_CAPABILITY_REGISTRY={health:{since:"v1"},daemon_status:{since:"v1"},daemon_update:{since:"v1"},capabilities:{since:"v1"},session_create:{since:"v1"},hosted_harness_private_v1:{since:"v1",hostedPersona:true},managed_session_journal_delta_v1:{since:"v1",hostedPersona:true},session_startup_config:{since:"v1"},session_id_override:{since:"v1"},session_scope_override:{since:"v1"},session_load:{since:"v1"},session_resume:{since:"v1"},unstable_session_resume:{since:"v1"},session_list:{since:"v1"},session_catalog_batch:{since:"v1"},session_info:{since:"v1"},session_source_metadata:{since:"v1"},session_side_task:{since:"v1"},session_prompt:{since:"v1"},session_turn_status:{since:"v1"},session_attachments:{since:"v1"},session_attachment_chunk_upload:{since:"v1"},session_attachment_list:{since:"v1"},session_mid_turn_message_mutation:{since:"v1"},session_mid_turn_message_query:{since:"v1"},session_mid_turn_send_now:{since:"v1"},session_cancel:{since:"v1"},session_events:{since:"v1"},session_artifacts:{since:"v1"},session_artifacts_persistence:{since:"v1"},session_artifact_library:{since:"v1"},workspace_artifact_library:{since:"v1"},workspace_artifact_library_stream:{since:"v1"},session_sources:{since:"v1"},slow_client_warning:{since:"v1"},typed_event_schema:{since:"v1"},session_set_model:{since:"v1"},client_identity:{since:"v1"},client_heartbeat:{since:"v1"},session_permission_vote:{since:"v1"},permission_vote:{since:"v1"},workspace_mcp:{since:"v1"},workspace_skills:{since:"v1"},workspace_skills_config_runtime:{since:"v1"},workspace_providers:{since:"v1"},workspace_acp_preheat:{since:"v1"},workspace_acp_status:{since:"v1"},auth_provider_install:{since:"v1"},workspace_memory:{since:"v1"},memory_import_v1:{since:"v1"},workspace_memory_remember:{since:"v1",modes:["workspace","clean"]},workspace_memory_remember_project_scope:{since:"v1"},workspace_memory_remember_user_scope:{since:"v1"},workspace_memory_forget:{since:"v1"},workspace_memory_forget_scope:{since:"v1"},workspace_memory_dream:{since:"v1"},workspace_agents:{since:"v1"},workspace_agent_generate:{since:"v1"},agent_collaboration_v1:{since:"v1"},workspace_env:{since:"v1"},workspace_preflight:{since:"v1"},session_context:{since:"v1"},session_context_usage:{since:"v1"},session_supported_commands:{since:"v1"},session_tasks:{since:"v1"},session_agents:{since:"v1"},session_agent_trace:{since:"v1"},scheduled_task_session_reuse:{since:"v1"},scheduled_task_gate:{since:"v1"},session_monitor_tool_correlation:{since:"v1"},session_stats:{since:"v1"},session_lsp:{since:"v1"},session_resources:{since:"v1"},session_status:{since:"v1"},session_close:{since:"v1"},session_archive:{since:"v1"},session_archive_idle_guard:{since:"v1"},session_storage_conflict_repair:{since:"v1"},session_metadata:{since:"v1"},session_organization:{since:"v1"},session_export:{since:"v1"},standalone_sessions_v1:{since:"v1"},standalone_session_options_v1:{since:"v1"},session_transcript:{since:"v1"},session_transcript_pagination:{since:"v1"},session_turn_navigation:{since:"v1"},mcp_guardrails:{since:"v1",modes:["warn","enforce"]},workspace_mcp_manage:{since:"v1"},mcp_guardrail_events:{since:"v1"},external_tool_guard:{since:"v1",modes:["required"]},mcp_server_runtime_mutation:{since:"v1"},workspace_file_read:{since:"v1"},workspace_file_bytes:{since:"v1"},workspace_file_read_cursor:{since:"v1"},workspace_file_write:{since:"v1"},workspace_file_upload:{since:"v1"},workspace_file_delete:{since:"v1"},workspace_directory_create:{since:"v1"},workspace_directory_delete:{since:"v1"},session_approval_mode_control:{since:"v1"},workspace_tool_toggle:{since:"v1"},workspace_skill_settings_toggle:{since:"v1"},workspace_skill_settings_batch_toggle:{since:"v1"},workspace_session_refresh:{since:"v1"},extension_batch_activation_v2:{since:"v1"},extension_activation_explicit_refresh:{since:"v1"},workspace_skill_manage:{since:"v1"},web_shell_brand:{since:"v1"},workspace_settings:{since:"v1"},workspace_permissions:{since:"v1"},workspace_voice:{since:"v1"},workspace_voice_transcription:{since:"v1",modes:["batch"]},workspace_trust:{since:"v1"},workspace_trust_grant:{since:"v1"},workspace_trust_hot_reload:{since:"v1"},workspace_init:{since:"v1"},workspace_github_setup:{since:"v1"},workspace_github_prs:{since:"v1"},workspace_git_worktrees:{since:"v1"},workspace_mcp_restart:{since:"v1"},session_recap:{since:"v1"},session_generation:{since:"v1"},workspace_generation:{since:"v1"},session_btw:{since:"v1"},session_shell_command:{since:"v1"},mcp_workspace_pool:{since:"v1"},mcp_pool_restart:{since:"v1"},require_auth:{since:"v1"},allow_origin:{since:"v1"},auth_device_flow:{since:"v1"},permission_mediation:{since:"v1",modes:["first-responder","designated","consensus","local-only"]},prompt_absolute_deadline:{since:"v1"},writer_idle_timeout:{since:"v1"},non_blocking_prompt:{since:"v1"},session_language:{since:"v1"},user_language_sync:{since:"v1"},session_message_deletion:{since:"v1"},session_rewind:{since:"v1"},workspace_hooks:{since:"v1"},session_hooks:{since:"v1"},workspace_extensions:{since:"v1"},session_branch:{since:"v1"},session_branch_worktree:{since:"v1"},rate_limit:{since:"v1"},workspace_reload:{since:"v1"},workspace_model_reload:{since:"v1"},channel_delivery:{since:"v1"},channel_reload:{since:"v1"},channel_control:{since:"v1"},channel_management:{since:"v1"},channel_delete_config_loss_convergence:{since:"v1"},workspace_channel_observed_contacts:{since:"v1"},multi_workspace_sessions:{since:"v1"},multi_workspace_session_rewind:{since:"v1"},multi_workspace_session_shell:{since:"v1"},dynamic_workspace_registration:{since:"v1"},persistent_workspace_registration:{since:"v1"},workspace_display_name:{since:"v1"},scratch_workspace_registration:{since:"v1"},git_workspace_clone:{since:"v1"},workspace_runtime_removal:{since:"v1"},native_directory_picker:{since:"v1"},workspace_runtime:{since:"v1"},workspace_runtime_stop:{since:"v1"},workspace_directories:{since:"v1"},workspace_local_open:{since:"v1"},workspace_local_terminal:{since:"v1"},workspace_qualified_rest_core:{since:"v1"},workspace_qualified_voice:{since:"v1"},workspace_qualified_memory:{since:"v1"},extension_management_v2:{since:"v1"},extension_list_details:{since:"v1"},extension_state:{since:"v1"},extension_git_credentials:{since:"v1"},extension_local_path_install:{since:"v1"},workspace_persisted_transcript:{since:"v1"},workspace_session_export:{since:"v1"},workspace_archived_session_export:{since:"v1"},workspace_session_live_state:{since:"v1"},workspace_session_metadata:{since:"v1"},session_worktree_persistence_v1:{since:"v1"},session_worktree_reset_v1:{since:"v1"},workspace_qualified_acp:{since:"v1"},client_mcp_over_ws:{since:"v1"},cdp_tunnel_over_ws:{since:"v1"},browser_automation_mcp:{since:"v1"},voice_transcribe:{since:"v1",modes:["streaming","batch"]},realtime_voice:{since:"v1"},realtime_voice_web:{since:"v1"},web_terminal:{since:"v1"}};var CONDITIONAL_SERVE_FEATURES=new Map([["session_message_deletion",toggles=>toggles.hostedHarness!==true],["hosted_harness_private_v1",toggles=>toggles.hostedHarness===true],["managed_session_journal_delta_v1",toggles=>toggles.hostedHarness===true],["require_auth",toggles=>toggles.requireAuth===true],["agent_collaboration_v1",toggles=>toggles.agentCollaborationEnabled===true],["standalone_sessions_v1",toggles=>toggles.standaloneSessionsAvailable===true],["standalone_session_options_v1",toggles=>toggles.standaloneSessionsAvailable===true],["mcp_workspace_pool",toggles=>toggles.mcpPoolActive===true],["mcp_pool_restart",toggles=>toggles.mcpPoolActive===true],["external_tool_guard",toggles=>toggles.externalToolGuardActive===true],["allow_origin",toggles=>toggles.allowOriginActive===true],["prompt_absolute_deadline",toggles=>typeof toggles.promptDeadlineMs==="number"&&toggles.promptDeadlineMs>0],["writer_idle_timeout",toggles=>typeof toggles.writerIdleTimeoutMs==="number"&&toggles.writerIdleTimeoutMs>0],["workspace_settings",toggles=>toggles.persistSettingAvailable===true],["user_language_sync",toggles=>toggles.persistSettingAvailable===true],["workspace_voice",toggles=>toggles.persistSettingAvailable===true],["workspace_voice_transcription",toggles=>toggles.voiceTranscriptionAvailable===true],["session_shell_command",toggles=>toggles.sessionShellCommandEnabled===true],["session_artifact_library",toggles=>toggles.sessionArtifactsPersistenceAvailable===true],["workspace_artifact_library",toggles=>toggles.sessionArtifactsPersistenceAvailable===true],["workspace_artifact_library_stream",toggles=>toggles.sessionArtifactsPersistenceAvailable===true],["session_artifacts_persistence",toggles=>toggles.sessionArtifactsPersistenceAvailable===true],["session_sources",toggles=>toggles.sessionArtifactsPersistenceAvailable===true],["session_generation",toggles=>toggles.sessionGenerationAvailable===true],["scheduled_task_session_reuse",toggles=>toggles.currentSessionSchedulingAvailable===true],["workspace_generation",toggles=>toggles.workspaceGenerationAvailable===true],["rate_limit",toggles=>toggles.rateLimit===true],["workspace_reload",toggles=>toggles.reloadAvailable===true],["workspace_trust_hot_reload",toggles=>toggles.workspaceTrustHotReloadAvailable===true],["workspace_trust_grant",toggles=>toggles.workspaceTrustHotReloadAvailable===true],["channel_reload",toggles=>toggles.channelReloadAvailable===true],["channel_control",toggles=>toggles.channelControlAvailable===true],["channel_management",toggles=>toggles.channelManagementAvailable===true],["channel_delete_config_loss_convergence",toggles=>toggles.channelManagementAvailable===true],["multi_workspace_sessions",toggles=>toggles.multiWorkspaceSessionsEnabled===true],["multi_workspace_session_rewind",toggles=>toggles.multiWorkspaceSessionsEnabled===true],["multi_workspace_session_shell",toggles=>toggles.multiWorkspaceSessionsEnabled===true&&toggles.sessionShellCommandEnabled===true],["dynamic_workspace_registration",toggles=>toggles.dynamicWorkspaceRegistrationAvailable===true],["persistent_workspace_registration",toggles=>toggles.persistentWorkspaceRegistrationAvailable===true],["scratch_workspace_registration",toggles=>toggles.scratchWorkspaceRegistrationAvailable===true],["git_workspace_clone",toggles=>toggles.gitWorkspaceCloneAvailable===true],["workspace_runtime_removal",toggles=>toggles.workspaceRuntimeRemovalAvailable===true],["workspace_directories",toggles=>toggles.workspaceDirectoriesAvailable===true],["native_directory_picker",toggles=>toggles.nativeDirectoryPickerAvailable===true],["workspace_runtime_stop",toggles=>toggles.workspaceRuntimeStopAvailable===true],["workspace_runtime",toggles=>toggles.workspaceRuntimeAvailable===true],["workspace_skills_config_runtime",toggles=>toggles.workspaceRuntimeAvailable===true],["workspace_local_open",toggles=>toggles.localPathOpenAvailable===true],["workspace_local_terminal",toggles=>toggles.localTerminalOpenAvailable===true],["workspace_qualified_acp",toggles=>toggles.acpHttpEnabled===true&&toggles.multiWorkspaceSessionsEnabled===true],["workspace_qualified_voice",toggles=>toggles.acpHttpEnabled===true&&toggles.multiWorkspaceSessionsEnabled===true],["workspace_qualified_memory",toggles=>toggles.acpHttpEnabled===true&&toggles.multiWorkspaceSessionsEnabled===true],["client_mcp_over_ws",toggles=>toggles.clientMcpOverWsEnabled===true],["cdp_tunnel_over_ws",toggles=>toggles.cdpTunnelOverWsEnabled===true],["browser_automation_mcp",toggles=>toggles.browserAutomationMcpAvailable===true],["voice_transcribe",toggles=>toggles.voiceWsAvailable!==false],["realtime_voice",toggles=>toggles.acpHttpEnabled===true&&toggles.realtimeVoiceEnabled===true],["realtime_voice_web",toggles=>toggles.acpHttpEnabled===true&&toggles.realtimeVoiceWebEnabled===true],["web_terminal",toggles=>toggles.acpHttpEnabled===true]]);var SERVE_FEATURES=Object.freeze(Object.keys(SERVE_CAPABILITY_REGISTRY));function serveProtocolVersionIndex(version){return SUPPORTED_SERVE_PROTOCOL_VERSIONS.indexOf(version)}__name(serveProtocolVersionIndex,"serveProtocolVersionIndex");function isFeatureAvailableInProtocol(feature,protocolVersion){return serveProtocolVersionIndex(SERVE_CAPABILITY_REGISTRY[feature].since)<=serveProtocolVersionIndex(protocolVersion)}__name(isFeatureAvailableInProtocol,"isFeatureAvailableInProtocol");function hostedPersonaServeFeatures(){return SERVE_FEATURES.filter(feature=>{if(!isFeatureAvailableInProtocol(feature,SERVE_PROTOCOL_VERSION))return false;const entry=SERVE_CAPABILITY_REGISTRY[feature];return entry?.hostedPersona===true})}__name(hostedPersonaServeFeatures,"hostedPersonaServeFeatures");function getAdvertisedServeFeatures(protocolVersion=SERVE_PROTOCOL_VERSION,toggles={}){return SERVE_FEATURES.filter(feature=>{if(!isFeatureAvailableInProtocol(feature,protocolVersion))return false;const predicate=CONDITIONAL_SERVE_FEATURES.get(feature);if(predicate!==void 0)return predicate(toggles);return true})}__name(getAdvertisedServeFeatures,"getAdvertisedServeFeatures");function getServeProtocolVersions(){return{current:SERVE_PROTOCOL_VERSION,supported:[...SUPPORTED_SERVE_PROTOCOL_VERSIONS]}}__name(getServeProtocolVersions,"getServeProtocolVersions");init_esbuild_shims();import{execFile}from"node:child_process";import{accessSync,constants,existsSync,statSync}from"node:fs";import{delimiter,join}from"node:path";import{promisify}from"node:util";var execFileAsync=promisify(execFile);var PICKER_TIMEOUT_MS=3e5;var ZENITY_DISPLAY_FAILURE=/(cannot|failed to) open display/i;var X11_SOCKET_DIR="/tmp/.X11-unix";var LOCAL_X11_DISPLAY=/^:(\d+)(?:\.\d+)?$/;var NativeDirectoryPickerUnavailableError=class extends Error{static{__name(this,"NativeDirectoryPickerUnavailableError")}};function isNativeDirectoryPickerAvailable(env=process.env,macOsSessionUids=process.platform==="darwin"?readMacOsSessionUids():void 0){if(process.platform==="darwin"){return macOsSessionUids?.processUid!==void 0&&macOsSessionUids.processUid>0&&macOsSessionUids.consoleUid===macOsSessionUids.processUid&&!env["SSH_CONNECTION"]&&!env["SSH_TTY"]}if(process.platform==="win32"){const sessionName=env["SESSIONNAME"]?.trim();return Boolean(sessionName&&sessionName.toLowerCase()!=="services")}if(process.platform!=="linux")return false;if(!env["DISPLAY"]&&!env["WAYLAND_DISPLAY"])return false;if(!isX11DisplayReachable(env["DISPLAY"]))return false;return(env["PATH"]??"").split(delimiter).some(dir=>dir!==""&&isExecutableFile(join(dir,"zenity")))}__name(isNativeDirectoryPickerAvailable,"isNativeDirectoryPickerAvailable");function isX11DisplayReachable(display){const match=LOCAL_X11_DISPLAY.exec(display??"");return!match||existsSync(join(X11_SOCKET_DIR,`X${match[1]}`))}__name(isX11DisplayReachable,"isX11DisplayReachable");function readMacOsSessionUids(){try{return{processUid:process.getuid?.(),consoleUid:statSync("/dev/console").uid}}catch{return{}}}__name(readMacOsSessionUids,"readMacOsSessionUids");function isExecutableFile(file){try{if(!statSync(file).isFile())return false;accessSync(file,constants.X_OK);return true}catch{return false}}__name(isExecutableFile,"isExecutableFile");async function pickNativeDirectory(signal){try{if(process.platform==="darwin"){const script=["const app = Application.currentApplication();","app.includeStandardAdditions = true;","app.chooseFolder({",'withPrompt: "Select a workspace folder",',"}).toString();"].join(" ");const{stdout}=await execFileAsync("osascript",["-l","JavaScript","-e",script],{timeout:PICKER_TIMEOUT_MS,signal});return stdout.trim()||void 0}if(process.platform==="win32"){const script=["[Console]::OutputEncoding = [System.Text.Encoding]::UTF8;","Add-Type -AssemblyName System.Windows.Forms;","$dialog = New-Object System.Windows.Forms.FolderBrowserDialog;","if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {","[Console]::Out.Write($dialog.SelectedPath)","}"].join(" ");const{stdout}=await execFileAsync("powershell.exe",["-NoProfile","-STA","-Command",script],{timeout:PICKER_TIMEOUT_MS,signal});return stdout.trim()||void 0}if(process.platform==="linux"){const{stdout}=await execFileAsync("zenity",["--file-selection","--directory","--title=Select a workspace folder"],{timeout:PICKER_TIMEOUT_MS,signal});return stdout.trim()||void 0}}catch(error){const result=error;if(result.killed){return void 0}if(process.platform==="darwin"&&(result.stderr?.includes("(-128)")||result.stderr?.includes("User canceled"))||process.platform==="linux"&&result.code===1&&!ZENITY_DISPLAY_FAILURE.test(result.stderr??"")){return void 0}throw new NativeDirectoryPickerUnavailableError(error instanceof Error?error.message:String(error))}throw new NativeDirectoryPickerUnavailableError(`Native directory picker is not supported on ${process.platform}`)}__name(pickNativeDirectory,"pickNativeDirectory");init_esbuild_shims();import{execFileSync}from"node:child_process";var cached;function isGitAvailable(){if(cached!==void 0)return cached;try{execFileSync("git",["--version"],{stdio:"ignore",timeout:3e3,windowsHide:true});cached=true}catch{cached=false}return cached}__name(isGitAvailable,"isGitAvailable");init_esbuild_shims();import{execFile as execFile2,spawn}from"node:child_process";import{accessSync as accessSync2,constants as constants2,statSync as statSync2}from"node:fs";import{delimiter as delimiter2,join as join2}from"node:path";import{promisify as promisify2}from"node:util";var execFileAsync2=promisify2(execFile2);var OPEN_TIMEOUT_MS=1e4;var LINUX_TERMINAL_NAMES=["gnome-terminal","konsole","xterm"];function linuxTerminalCandidates(env){return env["DISPLAY"]?LINUX_TERMINAL_NAMES:LINUX_TERMINAL_NAMES.filter(name=>name!=="xterm")}__name(linuxTerminalCandidates,"linuxTerminalCandidates");var LocalPathOpenUnavailableError=class extends Error{static{__name(this,"LocalPathOpenUnavailableError")}};var SpawnHangError=class extends Error{static{__name(this,"SpawnHangError")}};function defaultMacOsSessionUids(){return process.platform==="darwin"?readMacOsSessionUids2():void 0}__name(defaultMacOsSessionUids,"defaultMacOsSessionUids");function hasGuiSession(env,macOsSessionUids){if(process.platform==="darwin"){return macOsSessionUids?.processUid!==void 0&&macOsSessionUids.processUid>0&&macOsSessionUids.consoleUid===macOsSessionUids.processUid&&!env["SSH_CONNECTION"]&&!env["SSH_TTY"]}if(process.platform==="win32"){const sessionName=env["SESSIONNAME"]?.trim();return Boolean(sessionName&&sessionName.toLowerCase()!=="services")}return void 0}__name(hasGuiSession,"hasGuiSession");function findExecutableOnPath(env,names){for(const name of names){for(const dir of(env["PATH"]??"").split(delimiter2)){if(dir==="")continue;const candidate=join2(dir,name);if(isExecutableFile2(candidate))return candidate}}return void 0}__name(findExecutableOnPath,"findExecutableOnPath");function isLocalPathOpenAvailable(env=process.env,macOsSessionUids=defaultMacOsSessionUids()){const guiSession=hasGuiSession(env,macOsSessionUids);if(guiSession!==void 0)return guiSession;if(process.platform!=="linux")return false;if(!env["DISPLAY"]&&!env["WAYLAND_DISPLAY"])return false;return findExecutableOnPath(env,["xdg-open"])!==void 0}__name(isLocalPathOpenAvailable,"isLocalPathOpenAvailable");function isLocalTerminalAvailable(env=process.env,macOsSessionUids=defaultMacOsSessionUids()){const guiSession=hasGuiSession(env,macOsSessionUids);if(guiSession!==void 0)return guiSession;if(process.platform!=="linux")return false;if(!env["DISPLAY"]&&!env["WAYLAND_DISPLAY"])return false;return findExecutableOnPath(env,linuxTerminalCandidates(env))!==void 0}__name(isLocalTerminalAvailable,"isLocalTerminalAvailable");function readMacOsSessionUids2(){try{return{processUid:process.getuid?.(),consoleUid:statSync2("/dev/console").uid}}catch{return{}}}__name(readMacOsSessionUids2,"readMacOsSessionUids");function isExecutableFile2(file){try{if(!statSync2(file).isFile())return false;accessSync2(file,constants2.X_OK);return true}catch{return false}}__name(isExecutableFile2,"isExecutableFile");async function openPathLocally(path2,timeoutMs){try{if(process.platform==="darwin"){await execFileAsync2("open",[path2],{timeout:OPEN_TIMEOUT_MS});return}if(process.platform==="win32"){assertPathExists(path2);await spawnAndIgnoreExitCode("explorer.exe",[path2],{timeoutMs});return}if(process.platform==="linux"){await execFileAsync2("xdg-open",[path2],{timeout:OPEN_TIMEOUT_MS});return}}catch(error){throw new LocalPathOpenUnavailableError(error instanceof Error?error.message:String(error))}throw new LocalPathOpenUnavailableError(`Local path open is not supported on ${process.platform}`)}__name(openPathLocally,"openPathLocally");function assertPathExists(path2){try{statSync2(path2)}catch{throw new LocalPathOpenUnavailableError(`Path does not exist: ${path2}`)}}__name(assertPathExists,"assertPathExists");async function openTerminalLocally(path2,timeoutMs){try{if(process.platform==="darwin"){await execFileAsync2("open",["-a","Terminal",path2],{timeout:OPEN_TIMEOUT_MS});return}if(process.platform==="win32"){assertPathExists(path2);await spawnWindowsTerminal(path2,timeoutMs);return}if(process.platform==="linux"){assertPathExists(path2);await spawnLinuxTerminal(path2,timeoutMs);return}}catch(error){if(error instanceof LocalPathOpenUnavailableError)throw error;throw new LocalPathOpenUnavailableError(error instanceof Error?error.message:String(error))}throw new LocalPathOpenUnavailableError(`Local terminal open is not supported on ${process.platform}`)}__name(openTerminalLocally,"openTerminalLocally");async function spawnWindowsTerminal(path2,timeoutMs){try{await spawnAndIgnoreExitCode("wt.exe",["-d",path2],{timeoutMs})}catch(error){if(error instanceof SpawnHangError)throw error;await spawnAndIgnoreExitCode("powershell.exe",["-NoProfile","-STA","-Command",'Start-Process cmd.exe -WorkingDirectory "$env:QWEN_LOCAL_OPEN_DIR"'],{extraEnv:{QWEN_LOCAL_OPEN_DIR:path2},timeoutMs})}}__name(spawnWindowsTerminal,"spawnWindowsTerminal");async function spawnLinuxTerminal(path2,timeoutMs){const env=process.env;if(!env["DISPLAY"]&&!env["WAYLAND_DISPLAY"]){throw new LocalPathOpenUnavailableError("No display server available")}const terminal=findExecutableOnPath(env,linuxTerminalCandidates(env));if(terminal===void 0){throw new LocalPathOpenUnavailableError("No terminal emulator found on PATH")}const name=terminal.split(/[\\/]/).pop();if(name==="gnome-terminal"){await spawnLongLived(terminal,[`--working-directory=${path2}`],timeoutMs);return}if(name==="konsole"){await spawnLongLived(terminal,["--workdir",path2],timeoutMs);return}await spawnLongLived(terminal,["-e","sh","-c",'cd "$1" && exec "${SHELL:-/bin/sh}"',"sh",path2],timeoutMs)}__name(spawnLinuxTerminal,"spawnLinuxTerminal");function spawnAndIgnoreExitCode(command,args,options={}){const{extraEnv,timeoutMs=OPEN_TIMEOUT_MS}=options;return new Promise((resolve3,reject)=>{const child=spawn(command,[...args],{stdio:"ignore",...extraEnv?{env:{...process.env,...extraEnv}}:{}});const timer=setTimeout(()=>{child.kill();reject(new SpawnHangError(`${command} did not exit within ${timeoutMs}ms`))},timeoutMs);child.once("error",error=>{clearTimeout(timer);reject(error)});child.once("close",()=>{clearTimeout(timer);resolve3()})})}__name(spawnAndIgnoreExitCode,"spawnAndIgnoreExitCode");function spawnLongLived(command,args,timeoutMs=OPEN_TIMEOUT_MS){return new Promise((resolve3,reject)=>{const child=spawn(command,[...args],{stdio:"ignore",detached:true});const timer=setTimeout(()=>{child.kill();reject(new SpawnHangError(`${command} did not spawn within ${timeoutMs}ms`))},timeoutMs);child.once("error",error=>{clearTimeout(timer);reject(error)});child.once("spawn",()=>{clearTimeout(timer);child.unref();resolve3()})})}__name(spawnLongLived,"spawnLongLived");init_esbuild_shims();var CAPABILITIES_SCHEMA_VERSION=1;init_esbuild_shims();import{lstatSync,mkdirSync,realpathSync}from"node:fs";import{lstat,mkdtemp}from"node:fs/promises";import{basename,dirname,isAbsolute,join as join3,relative,resolve}from"node:path";var isSamePath=__name((left,right)=>process.platform==="win32"?left.toLowerCase()===right.toLowerCase():left===right,"isSamePath");var isWithinRoot2=__name((candidate,root)=>{const rel=relative(root,candidate);return rel.length>0&&!rel.startsWith("..")&&!isAbsolute(rel)},"isWithinRoot");function isManagedScratchChild(canonicalCwd,canonicalRoot){return isSamePath(dirname(canonicalCwd),canonicalRoot)&&/^scratch-.+/.test(basename(canonicalCwd))}__name(isManagedScratchChild,"isManagedScratchChild");function isScratchRootCompatible(canonicalCwd,canonicalRoot){if(isSamePath(canonicalCwd,canonicalRoot))return false;if(isManagedScratchChild(canonicalCwd,canonicalRoot))return true;return!isWithinRoot2(canonicalCwd,canonicalRoot)&&!isWithinRoot2(canonicalRoot,canonicalCwd)}__name(isScratchRootCompatible,"isScratchRootCompatible");function validateRootStats(stats){if(stats.isSymbolicLink()||!stats.isDirectory()){throw new Error("Managed scratch root must be a non-symlink directory")}if(process.platform!=="win32"&&typeof process.getuid==="function"&&stats.uid!==process.getuid()){throw new Error("Managed scratch root must be owned by the daemon user")}if(process.platform!=="win32"&&(stats.mode&63)!==0){throw new Error("Managed scratch root must be accessible only to its owner")}}__name(validateRootStats,"validateRootStats");function hasVerifiableInode(ino){return Number(ino)!==0}__name(hasVerifiableInode,"hasVerifiableInode");function prepareManagedScratchRoot(root,startupWorkspaceCwds){mkdirSync(root,{recursive:true,mode:448});const before=lstatSync(root);validateRootStats(before);const canonicalRoot=realpathSync.native(resolve(root));const after=lstatSync(canonicalRoot);validateRootStats(after);if(!hasVerifiableInode(after.ino)){throw new Error("Managed scratch root identity cannot be verified on this volume")}if(before.dev!==after.dev||before.ino!==after.ino){throw new Error("Managed scratch root identity changed during validation")}if(startupWorkspaceCwds.some(cwd=>!isScratchRootCompatible(cwd,canonicalRoot))){throw new Error("Managed scratch root conflicts with a startup workspace")}return{canonicalRoot,device:after.dev,inode:after.ino}}__name(prepareManagedScratchRoot,"prepareManagedScratchRoot");async function revalidateManagedScratchRoot(root){const stats=await lstat(root.canonicalRoot);validateRootStats(stats);if(stats.dev!==root.device||stats.ino!==root.inode){throw new Error("Managed scratch root identity changed")}const canonical=realpathSync.native(root.canonicalRoot);if(!isSamePath(canonical,root.canonicalRoot)){throw new Error("Managed scratch root canonical path changed")}}__name(revalidateManagedScratchRoot,"revalidateManagedScratchRoot");async function createManagedScratchDirectory(root){await revalidateManagedScratchRoot(root);const created=await mkdtemp(join3(root.canonicalRoot,"scratch-"));const canonical=realpathSync.native(created);if(!isManagedScratchChild(canonical,root.canonicalRoot)){throw new Error("Managed scratch directory escaped its accepted root")}await revalidateManagedScratchRoot(root);return canonical}__name(createManagedScratchDirectory,"createManagedScratchDirectory");init_esbuild_shims();var SERVE_APP_LIFECYCLE=Symbol("qwen.serveAppLifecycle");var DEFAULT_CLOSE_TIMEOUT_MS=5e3;var SECONDARY_CLOSE_TIMEOUT_MS=2e3;function deferred(){let resolve3;let reject;const promise=new Promise((resolvePromise,rejectPromise)=>{resolve3=resolvePromise;reject=rejectPromise});void promise.catch(()=>void 0);return{promise,resolve:resolve3,reject}}__name(deferred,"deferred");var ServeAppLifecycleController=class{static{__name(this,"ServeAppLifecycleController")}admission=deferred();server;startupReady=true;listenerReady=false;listenerClosed=false;sealed=false;closePending;appDrain;hostDrain;bootStarter;bootPending;bootStarted=false;bindServer(server,options={}){if(this.server||server.listening||this.bootStarted||this.sealed){throw new Error("Serve app lifecycle must bind one server before its first listen.")}this.server=server;this.hostDrain=options.drainHost;this.startupReady=options.startupReady===void 0;server.once("listening",()=>{this.listenerReady=true;if(this.sealed){server.close();server.closeAllConnections();return}this.openAdmissionIfReady()});server.on("close",()=>{this.listenerClosed=true;this.seal();void this.close().catch(()=>void 0)});server.on("error",error=>{if(!this.listenerReady&&options.startupReady===void 0){this.seal(error);void this.close().catch(()=>void 0)}});if(options.startupReady){void options.startupReady.then(()=>{this.startupReady=true;this.openAdmissionIfReady()},error=>{this.seal(error instanceof Error?error:new Error(String(error)))})}}close(options={}){if(this.closePending)return this.closePending;const pending=this.closeOnce(options);this.closePending=pending;void pending.catch(()=>{if(this.closePending===pending)this.closePending=void 0});return pending}setAppDrain(drain){this.appDrain=drain}setBootStarter(starter){this.bootStarter=starter;this.openAdmissionIfReady()}async awaitBootAdmission(){if(!this.server||this.sealed){throw conversationRuntimeUnavailableError()}try{await this.admission.promise}catch(error){throw conversationRuntimeUnavailableError(error)}if(this.sealed){throw conversationRuntimeUnavailableError()}}async startBoot(starter=this.bootStarter){await this.awaitBootAdmission();await this.beginBoot(starter)}getBootPromise(){return this.bootPending}isBootStarted(){return this.bootStarted}sealBoot(){this.seal()}openAdmissionIfReady(){if(this.sealed||!this.server||!this.listenerReady||!this.startupReady){return}this.admission.resolve();const bootStarter=this.bootStarter;if(bootStarter&&!this.bootStarted){void this.beginBoot(bootStarter)?.catch(()=>void 0)}}beginBoot(starter){if(!starter)return void 0;if(this.sealed){return Promise.reject(conversationRuntimeUnavailableError())}if(this.bootPending)return this.bootPending;this.bootStarted=true;const pending=Promise.resolve().then(starter);const tracked=pending.finally(()=>{if(this.bootPending===tracked)this.bootPending=void 0});this.bootPending=tracked;void tracked.catch(()=>void 0);return tracked}seal(error){if(this.sealed)return;this.sealed=true;this.admission.reject(error??conversationRuntimeUnavailableError())}async closeOnce(options){this.seal();const drains=[this.startDrain(this.appDrain),this.startDrain(this.hostDrain),this.bootPending?.catch(()=>void 0)].filter(value=>value!==void 0);const listenerClose=this.closeListener(options.timeoutMs??DEFAULT_CLOSE_TIMEOUT_MS);const results=await Promise.allSettled([...drains,listenerClose]);const errors=results.filter(result=>result.status==="rejected").map(result=>result.reason);if(errors.length===1){throw errors[0]}if(errors.length>1){throw new AggregateError(errors,"Serve app shutdown is incomplete.")}}startDrain(drain){if(!drain)return void 0;try{return drain()}catch(error){return Promise.reject(error)}}closeListener(timeoutMs){if(!this.server||this.listenerClosed||!this.listenerReady&&!this.server.listening){return Promise.resolve()}const server=this.server;if(!server.listening){return this.waitForClosingListener(server,timeoutMs)}return new Promise((resolve3,reject)=>{let secondaryTimer;const forceTimer=setTimeout(()=>{server.closeAllConnections();secondaryTimer=setTimeout(()=>{reject(new Error("The serve listener did not confirm shutdown."))},SECONDARY_CLOSE_TIMEOUT_MS);secondaryTimer.unref()},Math.max(0,timeoutMs));forceTimer.unref();server.close(error=>{clearTimeout(forceTimer);if(secondaryTimer)clearTimeout(secondaryTimer);if(error)reject(error);else{this.listenerClosed=true;resolve3()}})})}waitForClosingListener(server,timeoutMs){return new Promise((resolve3,reject)=>{let secondaryTimer;const onClose=__name(()=>{server.off("close",onClose);clearTimeout(forceTimer);if(secondaryTimer)clearTimeout(secondaryTimer);this.listenerClosed=true;resolve3()},"onClose");const forceTimer=setTimeout(()=>{server.closeAllConnections();secondaryTimer=setTimeout(()=>{server.off("close",onClose);reject(new Error("The serve listener did not confirm shutdown."))},SECONDARY_CLOSE_TIMEOUT_MS);secondaryTimer.unref()},Math.max(0,timeoutMs));forceTimer.unref();server.once("close",onClose);if(this.listenerClosed)onClose()})}};function installServeAppLifecycle(app,lifecycle=new ServeAppLifecycleController){const locals=app.locals;if(locals[SERVE_APP_LIFECYCLE]){throw new Error("Serve app lifecycle is already installed.")}locals[SERVE_APP_LIFECYCLE]=lifecycle;return lifecycle}__name(installServeAppLifecycle,"installServeAppLifecycle");init_esbuild_shims();var MAX_BUCKETS=1e4;var GC_REQUEST_INTERVAL=1e3;var GC_TIMER_INTERVAL_MS=5*60*1e3;var WORKSPACE_QUALIFIED_ACP_PATH=/^\/workspaces\/[^/]+\/acp$/i;function resolveTier(method,path2,workspaceQualifiedAcpEnabled){const p=path2.endsWith("/")&&path2.length>1?path2.slice(0,-1):path2;if(method==="OPTIONS")return null;if((method==="GET"||method==="HEAD")&&p==="/health")return null;if(method==="POST"&&p.startsWith("/session/")&&p.endsWith("/heartbeat"))return null;if(method==="GET"&&p.startsWith("/session/")&&p.endsWith("/events"))return null;if(p==="/acp"||p.startsWith("/acp/"))return null;if(workspaceQualifiedAcpEnabled&&WORKSPACE_QUALIFIED_ACP_PATH.test(p))return null;if(method==="POST"&&p.startsWith("/session/")&&p.endsWith("/prompt"))return"prompt";if(method==="POST"&&/^\/sessions\/catalog$/i.test(p))return"read";if(method!=="GET"&&method!=="HEAD")return"mutation";return"read"}__name(resolveTier,"resolveTier");function normalizeIp(raw){if(raw.startsWith("::ffff:")){return raw.slice(7)}return raw}__name(normalizeIp,"normalizeIp");function createKeyExtractor(hostname2){const loopback=isLoopbackBind(hostname2);return req=>{const raw=req.get("x-qwen-client-id");const clientId=raw&&raw.length<=MAX_CLIENT_ID_LENGTH&&CLIENT_ID_RE.test(raw)?raw:void 0;if(loopback){return clientId?`cid:${clientId}`:"anonymous"}const ip=normalizeIp(req.socket?.remoteAddress??"unknown");return clientId?`${ip}:${clientId}`:ip}}__name(createKeyExtractor,"createKeyExtractor");var LOG_SAMPLE_INTERVAL=100;function createSampledLogger(onLog){const state=new Map;return{log(tier,key){const logKey=`${tier}:${key}`;let entry=state.get(logKey);if(!entry){entry={count:0,suppressed:0};state.set(logKey,entry)}entry.count++;if(entry.count===1||entry.count%LOG_SAMPLE_INTERVAL===0){onLog(tier,key,entry.suppressed);entry.suppressed=0}else{entry.suppressed++}},clear(){state.clear()}}}__name(createSampledLogger,"createSampledLogger");function createRateLimiter(config){for(const[tier,cfg]of Object.entries(config.tiers)){if(!Number.isFinite(cfg.max)||cfg.max<=0){throw new Error(`rate limit: ${tier}.max must be a positive number, got ${cfg.max}`)}if(!Number.isFinite(cfg.windowMs)||cfg.windowMs<=0){throw new Error(`rate limit: ${tier}.windowMs must be a positive number, got ${cfg.windowMs}`)}}const buckets=new Map;const keyExtractor=createKeyExtractor(config.hostname);const hitCounts={prompt:0,mutation:0,read:0};const rates={prompt:config.tiers.prompt.max/config.tiers.prompt.windowMs,mutation:config.tiers.mutation.max/config.tiers.mutation.windowMs,read:config.tiers.read.max/config.tiers.read.windowMs};let draining=false;let requestCount=0;const sampledLog=config.onLimitReached?createSampledLogger(config.onLimitReached):void 0;function sweep(){const now=Date.now();for(const[key,tierMap]of buckets){let allStale=true;for(const[tier,bucket]of tierMap){if(now-bucket.lastRefill<config.tiers[tier].windowMs*2){allStale=false;break}}if(allStale){buckets.delete(key)}}}__name(sweep,"sweep");const gcTimer=setInterval(sweep,GC_TIMER_INTERVAL_MS);gcTimer.unref();const middleware=__name((req,res,next)=>{try{if(draining){next();return}const tier=resolveTier(req.method,req.path,config.workspaceQualifiedAcpEnabled===true);if(tier===null){next();return}requestCount++;if(requestCount%GC_REQUEST_INTERVAL===0){sweep()}const key=keyExtractor(req);if(tryConsume(key,tier)){next()}else{const tierConfig=config.tiers[tier];const rate=rates[tier];const bucket=buckets.get(key)?.get(tier);const retryAfterMs=Math.ceil((1-(bucket?.tokens??0))/rate);const retryAfterSec=Math.ceil(retryAfterMs/1e3);res.setHeader("Retry-After",String(retryAfterSec));res.setHeader("X-RateLimit-Limit",String(tierConfig.max));res.setHeader("X-RateLimit-Remaining","0");res.setHeader("X-RateLimit-Reset",String(Math.ceil((Date.now()+retryAfterMs)/1e3)));res.status(429).json({error:"Rate limit exceeded",code:"rate_limit_exceeded",tier,retryAfterMs})}}catch(err){config.onError?.(err,req.path);next()}},"middleware");function tryConsume(key,tier){if(draining)return true;const tierConfig=config.tiers[tier];const rate=rates[tier];const now=Date.now();let tierMap=buckets.get(key);if(!tierMap){if(buckets.size>=MAX_BUCKETS){config.onError?.(new Error(`rate limit bucket overflow: ${buckets.size} keys`),`tryConsume:${tier}`);return true}tierMap=new Map;buckets.set(key,tierMap)}let bucket=tierMap.get(tier);if(!bucket){bucket={tokens:tierConfig.max,lastRefill:now};tierMap.set(tier,bucket)}const elapsed=Math.max(0,now-bucket.lastRefill);bucket.tokens=Math.min(tierConfig.max,bucket.tokens+elapsed*rate);bucket.lastRefill=now;if(bucket.tokens>=1){bucket.tokens-=1;return true}hitCounts[tier]++;if(sampledLog)sampledLog.log(tier,key);return false}__name(tryConsume,"tryConsume");return{middleware,checkRate:tryConsume,reset(){buckets.clear();hitCounts.prompt=0;hitCounts.mutation=0;hitCounts.read=0;requestCount=0;sampledLog?.clear()},setDraining(v){draining=v},dispose(){clearInterval(gcTimer);buckets.clear();sampledLog?.clear()},getHitCounts(){return{...hitCounts}}}}__name(createRateLimiter,"createRateLimiter");var RATE_LIMITER_KEY="_rateLimiter";function setRateLimiter(app,limiter){app.locals[RATE_LIMITER_KEY]=limiter}__name(setRateLimiter,"setRateLimiter");function getRateLimiter(app){return app.locals[RATE_LIMITER_KEY]}__name(getRateLimiter,"getRateLimiter");init_esbuild_shims();function resolveAcpHttpEnabled(env=process.env){return env["QWEN_SERVE_ACP_HTTP"]!=="0"}__name(resolveAcpHttpEnabled,"resolveAcpHttpEnabled");init_esbuild_shims();import*as fs from"node:fs/promises";import{constants as fsConstants}from"node:fs";import*as os from"node:os";import*as path from"node:path";import*as crypto from"node:crypto";import{execFile as execFile3}from"node:child_process";import{promisify as promisify3}from"node:util";var execFileAsync3=promisify3(execFile3);var BRANCH_WORKTREE_JOURNAL_MAX_BYTES=64*1024;var PREPARATION_PHASES=new Set(["planned","worktree-created","marker-created","sidecar-ready","mutation-dispatched","cleanup-intent","worktree-removed","branch-deleted","branch-preserved"]);async function fsyncDirectory(directory){try{const handle=await fs.open(directory,"r");try{await handle.sync()}finally{await handle.close()}}catch(error){if(process.platform!=="win32")throw error}}__name(fsyncDirectory,"fsyncDirectory");async function pathExists(filePath){return await fs.lstat(filePath).then(()=>true).catch(error=>{if(error.code==="ENOENT")return false;throw error})}__name(pathExists,"pathExists");async function writeExclusiveFile(filePath,contents){const handle=await fs.open(filePath,fsConstants.O_WRONLY|fsConstants.O_CREAT|fsConstants.O_EXCL|(fsConstants.O_NOFOLLOW??0),384);let openedStat;let completed=false;try{openedStat=await handle.stat();if(!openedStat.isFile()||openedStat.nlink!==1){throw new Error("Branch worktree journal must be a regular file")}await handle.writeFile(contents,"utf8");await handle.sync();const finalStat=await fs.lstat(filePath);if(!finalStat.isFile()||finalStat.nlink!==1||finalStat.dev!==openedStat.dev||finalStat.ino!==openedStat.ino){throw new Error("Branch worktree journal path changed")}completed=true}finally{await handle.close();if(!completed&&openedStat){await fs.lstat(filePath).then(async pathStat=>{if(pathStat.isFile()&&pathStat.nlink===1&&pathStat.dev===openedStat.dev&&pathStat.ino===openedStat.ino){await fs.unlink(filePath)}}).catch(()=>{})}}}__name(writeExclusiveFile,"writeExclusiveFile");async function readStrictFile(filePath){const pathStat=await fs.lstat(filePath);if(!pathStat.isFile()||pathStat.nlink!==1){throw new Error("Branch worktree journal must be a regular file")}const handle=await fs.open(filePath,fsConstants.O_RDONLY|(fsConstants.O_NOFOLLOW??0));try{const openedStat=await handle.stat();if(!openedStat.isFile()||openedStat.nlink!==1||openedStat.dev!==pathStat.dev||openedStat.ino!==pathStat.ino||openedStat.size>BRANCH_WORKTREE_JOURNAL_MAX_BYTES){throw new Error("Branch worktree journal path changed")}const buffer=Buffer.alloc(BRANCH_WORKTREE_JOURNAL_MAX_BYTES+1);const{bytesRead}=await handle.read(buffer,0,buffer.length,0);if(bytesRead>BRANCH_WORKTREE_JOURNAL_MAX_BYTES){throw new Error("Branch worktree journal is too large")}const contents=buffer.subarray(0,bytesRead).toString("utf8");const finalStat=await fs.lstat(filePath);if(!finalStat.isFile()||finalStat.nlink!==1||finalStat.dev!==openedStat.dev||finalStat.ino!==openedStat.ino){throw new Error("Branch worktree journal path changed")}return contents}finally{await handle.close()}}__name(readStrictFile,"readStrictFile");function getBranchWorktreeJournalPath(sidecarPath,targetSessionId){return path.join(path.dirname(sidecarPath),`.branch-worktree-${targetSessionId}.json`)}__name(getBranchWorktreeJournalPath,"getBranchWorktreeJournalPath");async function createBranchWorktreeJournal(args){const journal={version:1,ownerToken:crypto.randomUUID(),pid:process.pid,hostname:os.hostname(),createdAt:new Date().toISOString(),targetSessionId:args.targetSessionId,slug:args.slug,worktreePath:args.worktreePath,worktreeBranch:args.worktreeBranch,repoTop:args.repoTop,baseCommit:args.baseCommit,sidecarPath:args.sidecarPath,markerCreated:false,sidecarCreated:false,phase:"planned"};await fs.mkdir(path.dirname(args.journalPath),{recursive:true,mode:448});await writeExclusiveFile(args.journalPath,`${JSON.stringify(journal)}
|
|
3
|
+
import{resolveManagedRuntimeBrokerBaseUrl}from"./chunk-6S5XOXJ2.js";import{formatHostForAuthority,isLoopbackBind}from"./chunk-3SHHYK7S.js";import{CLIENT_ID_RE,MAX_CLIENT_ID_LENGTH}from"./chunk-K246IFIW.js";import{isPreAuthWebShellRequest}from"./chunk-DYM77DZZ.js";import{isInternalWorkspaceRuntime}from"./chunk-M5KJJE2X.js";import{MAX_CHILD_HEAP_MB,MIN_CHILD_HEAP_MB,recommendedChildShareMb}from"./chunk-2QYDBHYZ.js";import{MAX_REGISTERED_WORKSPACES}from"./chunk-2DWWSMTV.js";import{CLIENT_MCP_OVER_WS_CONFIG_FLAG}from"./chunk-WBDNGVHU.js";import{MAX_CHANNEL_STARTUP_FAILURES,MAX_CHANNEL_STARTUP_FAILURE_CHANNEL_LENGTH}from"./chunk-AVJJ62OC.js";import{conversationRuntimeUnavailableError}from"./chunk-QSHWWIZT.js";import{isWithinRoot}from"./chunk-IDXJIDME.js";import{parseToolWriteOriginMeta}from"./chunk-QS2ZMQIS.js";import{clearWorktreeSessionDurable,readWorktreeSession}from"./chunk-2Q7T5CR2.js";import{GitWorktreeService,WORKTREE_SESSION_FILE,gitEnv,readWorktreeSessionMarker,worktreeBranchForSlug}from"./chunk-ILECDNJX.js";import{NO_EXEC_CONFIG}from"./chunk-EBMCWXGZ.js";import{ROOT_CONTEXT,context,init_esm}from"./chunk-I4H7NUVP.js";import{init_esbuild_shims}from"./chunk-VKDAXTCZ.js";import{__name}from"./chunk-KBWJGX7I.js";init_esbuild_shims();init_esm();import{performance}from"node:perf_hooks";init_esbuild_shims();var daemonTelemetryResponseContext=Symbol("daemonTelemetryResponseContext");var daemonInboundTraceIdContext=Symbol("daemonInboundTraceIdContext");function getDaemonTelemetryInboundTraceId(res){try{return res[daemonInboundTraceIdContext]}catch{return void 0}}__name(getDaemonTelemetryInboundTraceId,"getDaemonTelemetryInboundTraceId");var SESSION_ID_RE=/\/session\/([^/]+)/;var ACCESS_LOG_BURST=60;var ACCESS_LOG_REFILL_PER_SECOND=2;var ACCESS_LOG_REJECT_BURST=30;var ACCESS_LOG_REJECT_REFILL_PER_SECOND=1;var ROUTE_MAX_BYTES=2*1024;var SESSION_ID_MAX_BYTES=256;var CLIENT_ID_MAX_BYTES=256;var ACCESS_LOG_CONTROLLER_LOCAL="accessLogController";var ACCESS_LOG_REJECT_LOCAL="accessLogPreAuthReject";var ACCESS_LOG_ERROR_CODE_LOCAL="accessLogErrorCode";var ACCESS_LOG_ERROR_REASON_LOCAL="accessLogErrorReason";function markAccessLogError(res,code,reason){const locals=res.locals;if(!locals)return;locals[ACCESS_LOG_ERROR_CODE_LOCAL]=code;if(reason!==void 0)locals[ACCESS_LOG_ERROR_REASON_LOCAL]=reason}__name(markAccessLogError,"markAccessLogError");function emptySuppressedCounts(){return{suppressed:0,status2xx:0,status3xx:0,status4xx:0,status5xx:0,statusOther:0}}__name(emptySuppressedCounts,"emptySuppressedCounts");function countSuppressed(counts,status){counts.suppressed+=1;if(status>=200&&status<300)counts.status2xx+=1;else if(status>=300&&status<400)counts.status3xx+=1;else if(status>=400&&status<500)counts.status4xx+=1;else if(status>=500&&status<600)counts.status5xx+=1;else counts.statusOther+=1}__name(countSuppressed,"countSuppressed");function firstRawHeader(rawHeaders,targetName){for(let i=0;i+1<rawHeaders.length;i+=2){if(rawHeaders[i]?.toLowerCase()===targetName)return rawHeaders[i+1]}return void 0}__name(firstRawHeader,"firstRawHeader");function truncateUtf8(value,maxBytes){const bytes=Buffer.from(value,"utf8");if(bytes.length<=maxBytes)return{value};let end=maxBytes;while(end>0&&(bytes[end]&192)===128)end-=1;return{value:bytes.subarray(0,end).toString("utf8"),originalBytes:bytes.length}}__name(truncateUtf8,"truncateUtf8");function installAccessLogMiddleware(app,daemonLog,monotonicNow=()=>performance.now()){let sealed=false;let tokens=ACCESS_LOG_BURST;let refillBaseline=monotonicNow();let rejectTokens=ACCESS_LOG_REJECT_BURST;let rejectRefillBaseline=refillBaseline;const suppressed=emptySuppressedCounts();const suppressedRejects=emptySuppressedCounts();const refill=__name(()=>{const now=Math.max(monotonicNow(),refillBaseline);tokens=Math.min(ACCESS_LOG_BURST,tokens+(now-refillBaseline)/1e3*ACCESS_LOG_REFILL_PER_SECOND);refillBaseline=now},"refill");const refillReject=__name(()=>{const now=Math.max(monotonicNow(),rejectRefillBaseline);rejectTokens=Math.min(ACCESS_LOG_REJECT_BURST,rejectTokens+(now-rejectRefillBaseline)/1e3*ACCESS_LOG_REJECT_REFILL_PER_SECOND);rejectRefillBaseline=now},"refillReject");const flushSuppressed=__name(counts=>{if(!daemonLog||counts.suppressed===0)return false;context.with(ROOT_CONTEXT,()=>{daemonLog.warn("access logs suppressed",{...counts})});Object.assign(counts,emptySuppressedCounts());return true},"flushSuppressed");const controller={sealAndFlushSuppressed:__name(()=>{if(sealed)return;sealed=true;try{flushSuppressed(suppressed);flushSuppressed(suppressedRejects)}catch{}},"sealAndFlushSuppressed")};app.locals[ACCESS_LOG_CONTROLLER_LOCAL]=controller;if(!daemonLog)return controller;app.use((req,res,next)=>{const{method,path:reqPath}=req;if(method==="GET"&&reqPath==="/health"||method==="POST"&&reqPath.endsWith("/heartbeat")){return next()}const startMs=monotonicNow();res.on("finish",()=>{try{if(sealed)return;const status=res.statusCode;if(method==="GET"&&reqPath.endsWith("/events")&&status===200){return}refill();refillReject();const isPreAuthReject=Boolean(res.locals?.[ACCESS_LOG_REJECT_LOCAL]);if(isPreAuthReject){if(suppressedRejects.suppressed>0&&rejectTokens>=1){rejectTokens-=1;flushSuppressed(suppressedRejects)}if(rejectTokens<1){countSuppressed(suppressedRejects,status);return}rejectTokens-=1}else{if(suppressed.suppressed>0&&tokens>=1){tokens-=1;flushSuppressed(suppressed)}if(tokens<1){countSuppressed(suppressed,status);return}tokens-=1}const route=truncateUtf8(`${method} ${reqPath}`,ROUTE_MAX_BYTES);const sessionMatch=reqPath.match(SESSION_ID_RE);const sessionId=sessionMatch?.[1]?truncateUtf8(sessionMatch[1],SESSION_ID_MAX_BYTES):void 0;const rawClientId=firstRawHeader(req.rawHeaders,"x-qwen-client-id");const clientId=rawClientId?truncateUtf8(rawClientId,CLIENT_ID_MAX_BYTES):void 0;const inboundTraceId=getDaemonTelemetryInboundTraceId(res);const locals=res.locals;const errorCode=status>=400&&typeof locals?.[ACCESS_LOG_ERROR_CODE_LOCAL]==="string"?locals[ACCESS_LOG_ERROR_CODE_LOCAL]:void 0;const errorReason=status>=400&&typeof locals?.[ACCESS_LOG_ERROR_REASON_LOCAL]==="string"?locals[ACCESS_LOG_ERROR_REASON_LOCAL]:void 0;const ctx={route:route.value,...route.originalBytes?{routeOriginalBytes:route.originalBytes}:{},...sessionId?{sessionId:sessionId.value,...sessionId.originalBytes?{sessionIdOriginalBytes:sessionId.originalBytes}:{}}:{},...clientId?{clientId:clientId.value,...clientId.originalBytes?{clientIdOriginalBytes:clientId.originalBytes}:{}}:{},...inboundTraceId?{traceId:inboundTraceId}:{},...errorCode?{code:errorCode}:{},...errorReason?{reason:errorReason}:{},status,durationMs:Math.max(0,Math.round(monotonicNow()-startMs))};if(status>=400)daemonLog.warn("request completed",ctx);else daemonLog.info("request completed",ctx)}catch{}});next()});return controller}__name(installAccessLogMiddleware,"installAccessLogMiddleware");init_esbuild_shims();import{randomUUID}from"node:crypto";var HOSTED_HARNESS_CAPABILITY_DIGEST_ENV="QWEN_HOSTED_HARNESS_CAPABILITY_DIGEST";var HOSTED_LIFECYCLE_V2_PROFILES_ENV="QWEN_HOSTED_LIFECYCLE_V2_PROFILES";var LIFECYCLE_V2_PROFILES=["hosted-workspace-shell/1","hosted-workspace-mcp/1"];var HOSTED_HARNESS_PROTOCOL_VERSION=1;var HOSTED_HARNESS_PROTOCOL_HEADER="X-Qwen-Harness-Protocol-Version";var HOSTED_HARNESS_BOOT_ID_HEADER="X-Qwen-Harness-Boot-Id";var HOSTED_HARNESS_UPGRADE="qwen-hosted-harness/1";var CAPABILITY_DIGEST_PATTERN=/^sha256:[0-9a-f]{64}$/u;var UUID_PATTERN=/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu;function isHostedHarnessCapabilityDigest(value){return CAPABILITY_DIGEST_PATTERN.test(value)}__name(isHostedHarnessCapabilityDigest,"isHostedHarnessCapabilityDigest");function createHostedHarnessContract(capabilityDigest,bootId=randomUUID(),lifecycleV2Profiles=(process.env[HOSTED_LIFECYCLE_V2_PROFILES_ENV]??"hosted-workspace-shell/1").split(",").filter(Boolean),instanceId=process.env["QWEN_HOSTED_HARNESS_INSTANCE_ID"]){if(lifecycleV2Profiles.some(profile=>!LIFECYCLE_V2_PROFILES.includes(profile))||new Set(lifecycleV2Profiles).size!==lifecycleV2Profiles.length){throw new Error(`${HOSTED_LIFECYCLE_V2_PROFILES_ENV} must list exact supported profiles once.`)}if(!isHostedHarnessCapabilityDigest(capabilityDigest)){throw new Error(`${HOSTED_HARNESS_CAPABILITY_DIGEST_ENV} must be sha256:<64 lowercase hex characters>.`)}if(!UUID_PATTERN.test(bootId)){throw new Error("Hosted Harness bootId must be an RFC UUID v1-v5.")}if(instanceId!==void 0&&!/^[A-Za-z0-9._:-]{1,128}$/u.test(instanceId))throw new Error("Invalid Hosted Harness instance identity.");return Object.freeze({...instanceId===void 0?{}:{instanceId},protocolVersions:Object.freeze({current:HOSTED_HARNESS_PROTOCOL_VERSION,supported:Object.freeze([HOSTED_HARNESS_PROTOCOL_VERSION])}),bootId:bootId.toLowerCase(),capabilityDigest,lifecycleProtocolVersion:1,lifecycleV2Profiles:Object.freeze([...lifecycleV2Profiles]),titleProtocolVersion:1,features:Object.freeze([...instanceId===void 0?[]:["harness-pool-owner/1","harness-instance-lifecycle/1"],"hosted_approval_resume_v1","hosted_model_round_recovery_v1","model-selection/1","context-compression/1","user-message-queue/1","public-child-agents/1","approval-selection/1","auto-approval/1","permission-rules/1","live-approval-selection/1","agent-definition-approval-selection/1","plan-mode/1","input-attachments/1","session-skills/1","session-skills/2","workspace-shell-mcp/1","session-mcp-management/1","session-extension-packages/1","recovery-cleanup/1","targeted-cancel/1","event-keepalive/1","web-fetch/1"])})}__name(createHostedHarnessContract,"createHostedHarnessContract");function hostedHarnessContractMiddleware(contract){return(req,res,next)=>{res.setHeader(HOSTED_HARNESS_BOOT_ID_HEADER,contract.bootId);if(req.get(HOSTED_HARNESS_PROTOCOL_HEADER)!==String(HOSTED_HARNESS_PROTOCOL_VERSION)){res.setHeader("Upgrade",HOSTED_HARNESS_UPGRADE);markAccessLogError(res,"hosted_harness_protocol_required");res.status(426).json({error:"Hosted Harness protocol version 1 is required.",code:"hosted_harness_protocol_required"});return}const requestedBootId=req.get(HOSTED_HARNESS_BOOT_ID_HEADER);if(!requestedBootId||!UUID_PATTERN.test(requestedBootId)){markAccessLogError(res,"invalid_hosted_harness_boot_id");res.status(400).json({error:"X-Qwen-Harness-Boot-Id must be an RFC UUID v1-v5.",code:"invalid_hosted_harness_boot_id"});return}if(requestedBootId.toLowerCase()!==contract.bootId){markAccessLogError(res,"hosted_harness_generation_mismatch");res.status(409).json({error:"Hosted Harness process generation changed.",code:"hosted_harness_generation_mismatch"});return}next()}}__name(hostedHarnessContractMiddleware,"hostedHarnessContractMiddleware");function installHostedHarnessContractMiddleware(app,contract){if(!contract)return;app.use("/session",hostedHarnessContractMiddleware(contract))}__name(installHostedHarnessContractMiddleware,"installHostedHarnessContractMiddleware");init_esbuild_shims();var HOSTED_CSI_SESSION_STORE_URL_ENV="QWEN_HOSTED_CSI_SESSION_STORE_URL";function validateHostedHarnessProfile(opts){if(opts.experimentalManagedAgents||opts.experimentalManagedRuntimeWorker||opts.experimentalManagedRuntimeAutoLocal||opts.experimentalManagedRuntimeUrl!==void 0||opts.experimentalManagedRuntimeToken!==void 0){throw new Error("Experimental Managed Gateway and Runtime worker modes are not implemented.")}if(opts.profile!=="hosted-harness"){if(opts.managedRuntimeBrokerUrl===void 0&&opts.managedRuntimeBrokerToken===void 0&&opts.hostedHarnessCapabilityDigest===void 0&&opts.hostedCsiSessionStoreUrl===void 0){return}throw new Error("Hosted Harness options require --profile hosted-harness.")}if(!isLoopbackBind(opts.hostname)){throw new Error("--profile hosted-harness requires a loopback --hostname.")}if(opts.mode!=="http-bridge"){throw new Error("--profile hosted-harness requires --http-bridge.")}if(!opts.token?.trim()){throw new Error("--profile hosted-harness requires a bearer token.")}if(opts.serveWebShell!==false){throw new Error("--profile hosted-harness requires --no-web.")}if(opts.enableSessionShell||opts.channelSelection!==void 0||opts.clientMcpOverWs||opts.cdpTunnelOverWs){throw new Error("--profile hosted-harness does not serve shells, channels, or WebSocket tunnels.")}if(opts.allowOrigins?.length){throw new Error("--profile hosted-harness does not accept browser origins.")}if(opts.experimentalPairedEngines){throw new Error("--profile hosted-harness does not pair execution engines.")}if(opts.managedRuntimeBrokerUrl!==void 0||opts.managedRuntimeBrokerToken!==void 0){if(!opts.managedRuntimeBrokerUrl||!opts.managedRuntimeBrokerToken?.trim()){throw new Error("Hosted Runtime Broker requires both URL and token.")}resolveManagedRuntimeBrokerBaseUrl(opts.managedRuntimeBrokerUrl)}if(!opts.hostedHarnessCapabilityDigest||!isHostedHarnessCapabilityDigest(opts.hostedHarnessCapabilityDigest)){throw new Error("--profile hosted-harness requires a sha256 capability digest.")}if(opts.hostedCsiSessionStoreUrl!==void 0){if(process.env["QWEN_HOSTED_HARNESS_INSTANCE_ID"]!==void 0)throw new Error("The shared Harness pool cannot host private CSI owners.");if(!opts.managedRuntimeBrokerUrl||!opts.managedRuntimeBrokerToken?.trim()){throw new Error("Private CSI attachment requires the original Runtime Broker.")}const url=new URL(opts.hostedCsiSessionStoreUrl);if(url.protocol!=="https:"&&url.protocol!=="http:"||url.username||url.password||url.search||url.hash||url.protocol==="http:"&&!isLoopbackBind(url.hostname)){throw new Error("Private CSI Session Store requires HTTPS or loopback HTTP without URL credentials.")}}}__name(validateHostedHarnessProfile,"validateHostedHarnessProfile");init_esbuild_shims();import{randomUUID as randomUUID2}from"node:crypto";var SANITIZE_FOR_STDERR_RE=new RegExp(String.raw`[\x00-\x1f\x7f-\x9f\u200b-\u200f\u2028-\u202e\u2066-\u2069\ufeff]`,"g");function sanitizeForStderr(value){return value.replace(SANITIZE_FOR_STDERR_RE,"?")}__name(sanitizeForStderr,"sanitizeForStderr");var DEVICE_FLOW_DEFAULT_INTERVAL_MS=5e3;var DEVICE_FLOW_TERMINAL_GRACE_MS=5*6e4;var DEVICE_FLOW_SWEEP_INTERVAL_MS=3e4;var DEVICE_FLOW_MAX_CONCURRENT=4;var DEVICE_FLOW_SLOW_DOWN_BUMP_MS=5e3;var DEVICE_FLOW_PERSIST_TIMEOUT_MS=3e4;var DEVICE_FLOW_START_TIMEOUT_MS=3e4;var DEVICE_FLOW_POLL_TIMEOUT_MS=3e4;var DEVICE_FLOW_MAX_EXPIRES_IN_SEC=60*60;var DEVICE_FLOW_MIN_EXPIRES_IN_SEC=30;var DEVICE_FLOW_MAX_INTERVAL_MS=6e4;var SECRET_BRAND=Symbol("DeviceFlowSecret");var SECRETS=new WeakMap;function brandSecret(value){const wrapper=Object.freeze({[SECRET_BRAND]:true,toString:__name(()=>"[redacted]","toString"),toJSON:__name(()=>"[redacted]","toJSON"),[Symbol.toPrimitive]:()=>"[redacted]"});SECRETS.set(wrapper,value);return wrapper}__name(brandSecret,"brandSecret");function unsafeRevealSecret(secret){const value=SECRETS.get(secret);if(value===void 0){throw new Error("unsafeRevealSecret: argument is not a BrandedSecret (was never registered, or its WeakMap binding was lost via serialization)")}return value}__name(unsafeRevealSecret,"unsafeRevealSecret");var UnsupportedDeviceFlowProviderError=class extends Error{static{__name(this,"UnsupportedDeviceFlowProviderError")}code="unsupported_provider";constructor(providerId){super(`Unsupported device-flow provider (internal: declared but not registered): ${providerId}`);this.name="UnsupportedDeviceFlowProviderError"}};var TooManyActiveDeviceFlowsError=class extends Error{static{__name(this,"TooManyActiveDeviceFlowsError")}code="too_many_active_flows";constructor(){super(`Too many active device-flow attempts. Cancel one of the existing flows or wait for them to expire.`);this.name="TooManyActiveDeviceFlowsError"}};var UpstreamDeviceFlowError=class extends Error{static{__name(this,"UpstreamDeviceFlowError")}code="upstream_error";constructor(message){super(message);this.name="UpstreamDeviceFlowError"}};var DeviceFlowPollTimeoutError=class extends Error{static{__name(this,"DeviceFlowPollTimeoutError")}code="poll_timeout";timeoutMs;_isRegistryTimeout=false;constructor(timeoutMs){super(`device-flow poll timeout after ${timeoutMs}ms`);this.name="DeviceFlowPollTimeoutError";this.timeoutMs=timeoutMs}};function makeRegistryPollTimeoutError(timeoutMs){const err=new DeviceFlowPollTimeoutError(timeoutMs);err._isRegistryTimeout=true;return err}__name(makeRegistryPollTimeoutError,"makeRegistryPollTimeoutError");var DEVICE_FLOW_REGISTRY_LOCAL="deviceFlowRegistry";function setDeviceFlowRegistry(app,registry){app.locals[DEVICE_FLOW_REGISTRY_LOCAL]=registry}__name(setDeviceFlowRegistry,"setDeviceFlowRegistry");function getDeviceFlowRegistry(app){return app.locals[DEVICE_FLOW_REGISTRY_LOCAL]}__name(getDeviceFlowRegistry,"getDeviceFlowRegistry");var DeviceFlowRegistry=class{constructor(deps){this.deps=deps;this.now=deps.now??(()=>Date.now());this.schedule=deps.schedule??((ms,cb)=>setTimeout(cb,ms));this.scheduleInterval=deps.scheduleInterval??((ms,cb)=>setInterval(cb,ms));this.clearScheduled=deps.clearScheduled??(h=>clearTimeout(h));this.clearScheduledInterval=deps.clearScheduledInterval??(h=>clearInterval(h));this.sweeperHandle=this.scheduleInterval(DEVICE_FLOW_SWEEP_INTERVAL_MS,()=>this.sweep());if(this.sweeperHandle&&typeof this.sweeperHandle.unref==="function"){this.sweeperHandle.unref()}}static{__name(this,"DeviceFlowRegistry")}byId=new Map;byProvider=new Map;inFlightStarts=new Map;sweeperHandle;disposed=false;now;schedule;scheduleInterval;clearScheduled;clearScheduledInterval;async start(params){if(this.disposed){throw new Error("DeviceFlowRegistry disposed")}const provider=this.deps.resolveProvider(params.providerId);if(!provider){throw new UnsupportedDeviceFlowProviderError(params.providerId)}const existing=this.byProvider.get(params.providerId);if(existing&&existing.status==="pending"){this.recordTakeover(existing,params.initiatorClientId);return{view:toPublicView(existing),attached:true}}const inFlight=this.inFlightStarts.get(params.providerId);if(inFlight){const result=await inFlight;const justCreated=this.byProvider.get(params.providerId);if(justCreated){this.recordTakeover(justCreated,params.initiatorClientId)}return{view:result.view,attached:true}}if(this.countActive()>=DEVICE_FLOW_MAX_CONCURRENT){throw new TooManyActiveDeviceFlowsError}const promise=this.doStart(params,provider);this.inFlightStarts.set(params.providerId,promise);try{return await promise}finally{if(this.inFlightStarts.get(params.providerId)===promise){this.inFlightStarts.delete(params.providerId)}}}async doStart(params,provider){const cancelController=new AbortController;let startResult;let startTimer;try{startResult=await new Promise((resolve3,reject)=>{startTimer=this.schedule(DEVICE_FLOW_START_TIMEOUT_MS,()=>{try{cancelController.abort(new Error("device-flow start timeout"))}catch{}reject(new UpstreamDeviceFlowError("device-flow start timeout (upstream IdP unresponsive)"))});provider.start({signal:cancelController.signal}).then(resolve3,reject)})}finally{if(startTimer!==void 0)this.clearScheduled(startTimer)}if(this.disposed){throw new Error("DeviceFlowRegistry disposed during start")}const expiresInSec=Number.isFinite(startResult.expiresIn)&&startResult.expiresIn>0?Math.min(DEVICE_FLOW_MAX_EXPIRES_IN_SEC,Math.max(DEVICE_FLOW_MIN_EXPIRES_IN_SEC,startResult.expiresIn)):600;const expiresAt=this.now()+expiresInSec*1e3;const intervalSec=Number.isFinite(startResult.interval)&&startResult.interval>0?startResult.interval:DEVICE_FLOW_DEFAULT_INTERVAL_MS/1e3;const intervalMs=Math.min(DEVICE_FLOW_MAX_INTERVAL_MS,Math.max(1e3,intervalSec*1e3));const entry={deviceFlowId:randomUUID2(),providerId:params.providerId,deviceCode:startResult.deviceCode,pkceVerifier:startResult.pkceVerifier,userCode:startResult.userCode,verificationUri:startResult.verificationUri,verificationUriComplete:startResult.verificationUriComplete,intervalMs,expiresAt,status:"pending",initiatorClientId:params.initiatorClientId,createdAt:this.now(),cancelController};this.byId.set(entry.deviceFlowId,entry);this.byProvider.set(entry.providerId,entry);this.deps.events.publish({type:"started",data:{deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,expiresAt:entry.expiresAt}},entry.initiatorClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"started",expiresInMs:entry.expiresAt-this.now()});this.schedulePoll(entry,provider);return{view:toPublicView(entry),attached:false}}get(deviceFlowId){const entry=this.byId.get(deviceFlowId);if(!entry)return void 0;return toPublicView(entry)}cancel(deviceFlowId,cancellerClientId){const entry=this.byId.get(deviceFlowId);if(!entry)return void 0;if(entry.persistInFlight){entry.cancelRequestedDuringPersist=true;if(!entry.cancellerRecorded){entry.cancellerRecorded=true;if(cancellerClientId){entry.cancellerClientId=cancellerClientId}}try{entry.cancelController.abort(new Error("cancel during persist"))}catch{}this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:cancellerClientId,status:"cancelled",hint:"deferred (persist in flight; final state decided by persist resolution)"});return{alreadyTerminal:false}}if(!this.transitionTerminal(entry,"cancelled")){return{alreadyTerminal:true}}this.deps.events.publish({type:"cancelled",data:{deviceFlowId:entry.deviceFlowId}},cancellerClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:cancellerClientId,status:"cancelled"});return{alreadyTerminal:false}}countActive(){let n=0;for(const entry of this.byProvider.values()){if(entry.status==="pending")n+=1}return n+this.inFlightStarts.size}schedulePoll(entry,provider){if(entry.status!=="pending")return;if(entry.deviceCode===void 0)return;if(this.disposed)return;entry.pollHandle=this.schedule(entry.intervalMs,()=>{void this.runPollTick(entry,provider)});if(entry.pollHandle&&typeof entry.pollHandle.unref==="function"){entry.pollHandle.unref()}}async runPollTick(entry,provider){if(entry.status!=="pending")return;if(this.disposed)return;if(entry.deviceCode===void 0)return;const now=this.now();if(now>=entry.expiresAt){this.expireEntry(entry);return}entry.lastPolledAt=now;let result;let rawProviderError;let pollTimedOut=false;let pollTimer;let providerPollPromise;try{result=await new Promise((resolve3,reject)=>{pollTimer=this.schedule(DEVICE_FLOW_POLL_TIMEOUT_MS,()=>{const timeoutError=makeRegistryPollTimeoutError(DEVICE_FLOW_POLL_TIMEOUT_MS);try{entry.cancelController.abort(timeoutError)}catch{}reject(timeoutError)});providerPollPromise=provider.poll({deviceCode:entry.deviceCode,pkceVerifier:entry.pkceVerifier},{signal:entry.cancelController.signal});providerPollPromise.then(resolve3,reject)})}catch(err){if(err instanceof DeviceFlowPollTimeoutError&&err._isRegistryTimeout===true){pollTimedOut=true;result={kind:"error",errorKind:"upstream_error",hint:`provider.poll() timed out after ${err.timeoutMs}ms; check IdP connectivity`}}else{rawProviderError=err instanceof Error?err.message:String(err);result={kind:"error",errorKind:"upstream_error",hint:"provider.poll() failed; see daemon audit log for details"}}}finally{if(pollTimer!==void 0)this.clearScheduled(pollTimer)}if(pollTimedOut&&providerPollPromise!==void 0){const tracked=providerPollPromise;const auditDeviceFlowId=entry.deviceFlowId;const auditProviderId=entry.providerId;const auditClientId=entry.initiatorClientId;const audit=this.deps.audit;void tracked.then(latePollResult=>{audit?.record({deviceFlowId:auditDeviceFlowId,providerId:auditProviderId,clientId:auditClientId,status:"failed",errorKind:"upstream_error",hint:latePollResult.kind==="error"?`lost_late_poll_after_timeout: provider.poll() resolved kind=error after ${DEVICE_FLOW_POLL_TIMEOUT_MS}ms ceiling \u2014 likely abort-driven cooperation; IdP responsiveness unknown`:`lost_late_poll_after_timeout: provider.poll() resolved kind=${sanitizeForStderr(latePollResult.kind)} after ${DEVICE_FLOW_POLL_TIMEOUT_MS}ms ceiling \u2014 IdP is responsive but slow; consider raising the operator-side IdP latency alert threshold`})},lateErr=>{if(lateErr instanceof DeviceFlowPollTimeoutError&&lateErr._isRegistryTimeout===true)return;const safeDetail=lateErr instanceof Error?`${sanitizeForStderr(lateErr.name)} (message ${lateErr.message.length} bytes; raw suppressed)`:`<non-Error throw: ${typeof lateErr}>`;audit?.record({deviceFlowId:auditDeviceFlowId,providerId:auditProviderId,clientId:auditClientId,status:"failed",errorKind:"upstream_error",hint:`lost_late_poll_after_timeout: provider.poll() rejected after ${DEVICE_FLOW_POLL_TIMEOUT_MS}ms ceiling: ${safeDetail}`})}).catch(()=>{})}if(this.disposed)return;if(entry.status!=="pending")return;switch(result.kind){case"pending":this.schedulePoll(entry,provider);return;case"slow_down":entry.intervalMs=Math.min(DEVICE_FLOW_MAX_INTERVAL_MS,entry.intervalMs+DEVICE_FLOW_SLOW_DOWN_BUMP_MS);this.deps.events.publish({type:"throttled",data:{deviceFlowId:entry.deviceFlowId,intervalMs:entry.intervalMs}},entry.initiatorClientId);this.schedulePoll(entry,provider);return;case"success":{let metadata={};let persistError;let persistTimer;let persistTimedOut=false;entry.persistInFlight=true;let persistTracker;try{persistTracker=result.persist({signal:entry.cancelController.signal})}catch(syncErr){persistError=syncErr;persistTracker=Promise.reject(syncErr);persistTracker.catch(()=>{})}persistTracker.then(lateMeta=>{if(!persistTimedOut)return;this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"authorized",hint:`lost_success_after_timeout (provider.persist ignored timeout signal; credentials on disk but registry already published persist_failed; expiresAt=${lateMeta.expiresAt??"unknown"})`})},()=>{});if(persistError===void 0){try{metadata=await new Promise((resolve3,reject)=>{persistTimer=this.schedule(DEVICE_FLOW_PERSIST_TIMEOUT_MS,()=>{persistTimedOut=true;try{entry.cancelController.abort(new Error("persist timeout"))}catch{}reject(new Error("persist timeout"))});persistTracker.then(resolve3,reject)})}catch(err){persistError=err}finally{if(persistTimer!==void 0)this.clearScheduled(persistTimer);entry.persistInFlight=false}}else{entry.persistInFlight=false}if(this.disposed)return;const cancelDuringPersist=entry.cancelRequestedDuringPersist===true;if(persistError){if(cancelDuringPersist){if(this.transitionTerminal(entry,"cancelled")){this.deps.events.publish({type:"cancelled",data:{deviceFlowId:entry.deviceFlowId}},entry.cancellerClientId??entry.initiatorClientId)}}else if(this.transitionTerminal(entry,"error","persist_failed")){const pastExpiry=this.now()>=entry.expiresAt;this.deps.events.publish({type:"failed",data:{deviceFlowId:entry.deviceFlowId,errorKind:"persist_failed",hint:"credentials could not be written to the daemon filesystem \u2014 check disk space and permissions"}},entry.initiatorClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"failed",errorKind:"persist_failed",...pastExpiry?{hint:"persist_also_failed_past_expiry (root cause is disk I/O; entry was past expiresAt by the time persist resolved)"}:{}})}return}if(this.transitionTerminal(entry,"authorized")){this.deps.events.publish({type:"authorized",data:{deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,expiresAt:metadata.expiresAt,accountAlias:metadata.accountAlias}},entry.initiatorClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"authorized",...cancelDuringPersist?{hint:"lost_success_kept (cancel during persist; credentials kept per IdP approval)"}:{}})}return}case"error":entry.hint=result.hint;if(this.transitionTerminal(entry,"error",result.errorKind)){this.deps.events.publish({type:"failed",data:{deviceFlowId:entry.deviceFlowId,errorKind:result.errorKind,hint:result.hint}},entry.initiatorClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"failed",errorKind:result.errorKind,...rawProviderError!==void 0?{hint:`provider.poll() threw (raw): ${sanitizeForStderr(rawProviderError)}`}:result.hint!==void 0?{hint:result.hint}:{}})}return;default:{const _exhaustive=result;void _exhaustive}}}recordTakeover(entry,takeoverClientId){if(!takeoverClientId)return;if(takeoverClientId===entry.initiatorClientId)return;if(takeoverClientId===entry.lastOriginatorClientId)return;entry.lastOriginatorClientId=takeoverClientId;this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:takeoverClientId,status:"started",hint:`take-over (per-provider singleton; original initiator=${entry.initiatorClientId??"(none)"})`})}expireEntry(entry){if(!this.transitionTerminal(entry,"expired","expired_token"))return;this.deps.events.publish({type:"failed",data:{deviceFlowId:entry.deviceFlowId,errorKind:"expired_token",hint:"device-flow expired without authorization"}},entry.initiatorClientId);this.deps.audit?.record({deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,clientId:entry.initiatorClientId,status:"expired",errorKind:"expired_token"})}transitionTerminal(entry,status,errorKind){if(entry.status!=="pending")return false;entry.status=status;if(errorKind)entry.errorKind=errorKind;entry.terminalAt=this.now();if(entry.pollHandle){this.clearScheduled(entry.pollHandle);entry.pollHandle=void 0}entry.deviceCode=void 0;entry.pkceVerifier=void 0;try{entry.cancelController.abort()}catch{}if(this.byProvider.get(entry.providerId)===entry){this.byProvider.delete(entry.providerId)}return true}sweep(){if(this.disposed)return;const now=this.now();for(const entry of[...this.byId.values()]){if(entry.persistInFlight)continue;if(entry.status==="pending"&&now>=entry.expiresAt){this.expireEntry(entry);continue}if(entry.status!=="pending"&&entry.terminalAt!==void 0&&now-entry.terminalAt>=DEVICE_FLOW_TERMINAL_GRACE_MS){this.byId.delete(entry.deviceFlowId)}}}listPending(){const out=[];for(const entry of this.byId.values()){if(entry.status==="pending")out.push(toPublicView(entry))}return out}dispose(){if(this.disposed)return;this.disposed=true;if(this.sweeperHandle){this.clearScheduledInterval(this.sweeperHandle);this.sweeperHandle=void 0}for(const entry of this.byId.values()){if(entry.pollHandle){this.clearScheduled(entry.pollHandle);entry.pollHandle=void 0}try{entry.cancelController.abort()}catch{}entry.deviceCode=void 0;entry.pkceVerifier=void 0}this.byId.clear();this.byProvider.clear()}};function toPublicView(entry){const base={deviceFlowId:entry.deviceFlowId,providerId:entry.providerId,status:entry.status,createdAt:entry.createdAt,initiatorClientId:entry.initiatorClientId};if(entry.errorKind)base.errorKind=entry.errorKind;if(entry.hint)base.hint=entry.hint;if(entry.lastPolledAt!==void 0)base.lastPolledAt=entry.lastPolledAt;if(entry.status==="pending"){base.userCode=entry.userCode;base.verificationUri=entry.verificationUri;base.verificationUriComplete=entry.verificationUriComplete;base.expiresAt=entry.expiresAt;base.intervalMs=entry.intervalMs}return base}__name(toPublicView,"toPublicView");init_esbuild_shims();var ACP_WRITE_ROUTE="ACP writeTextFile";var ACP_READ_ROUTE="ACP readTextFile";function buildAuditContext(params,route){return{route,...params.sessionId?{sessionId:params.sessionId}:{}}}__name(buildAuditContext,"buildAuditContext");function createBridgeFileSystemAdapter(factory,options={}){return{async writeText(params){const ctx=buildAuditContext(params,ACP_WRITE_ROUTE);if(options.allowSameHostToolWritesOutsideWorkspace===true&&parseToolWriteOriginMeta(params._meta)!==void 0&&factory.writeSameHostToolText!==void 0){await factory.writeSameHostToolText(ctx,{path:params.path,content:params.content,...sanitizeWriteMeta(params._meta)});return{}}const wfs=factory.forRequest(ctx);const resolved=await wfs.resolve(params.path,"write");await wfs.writeTextOverwrite(resolved,params.content);return{}},async readText(params){const wfs=factory.forRequest(buildAuditContext(params,ACP_READ_ROUTE));const resolved=await wfs.resolve(params.path,"read");const opts={};if(typeof params.line==="number"&¶ms.line>0){opts.line=params.line}if(typeof params.limit==="number"&¶ms.limit>0){opts.limit=params.limit}const{content}=await wfs.readText(resolved,opts);return{content}}}}__name(createBridgeFileSystemAdapter,"createBridgeFileSystemAdapter");function sanitizeWriteMeta(meta){const sanitized={};if(typeof meta?.["bom"]==="boolean"){sanitized.bom=meta["bom"]}if(typeof meta?.["encoding"]==="string"){sanitized.encoding=meta["encoding"]}if(meta?.["lineEnding"]==="lf"||meta?.["lineEnding"]==="crlf"){sanitized.lineEnding=meta["lineEnding"]}return Object.keys(sanitized).length>0?{meta:sanitized}:{}}__name(sanitizeWriteMeta,"sanitizeWriteMeta");init_esbuild_shims();var PathMutexRegistry=class{static{__name(this,"PathMutexRegistry")}tails=new Map;async runExclusive(key,fn){const previous=this.tails.get(key)??Promise.resolve();let release;const current=new Promise(resolve3=>{release=resolve3});const tail=previous.catch(()=>void 0).then(()=>current);this.tails.set(key,tail);await previous.catch(()=>void 0);try{return await fn()}finally{release();if(this.tails.get(key)===tail)this.tails.delete(key)}}};init_esbuild_shims();function isDeepHealthQuery(raw){return raw==="1"||raw==="true"||raw===""}__name(isDeepHealthQuery,"isDeepHealthQuery");init_esbuild_shims();import{createHash,randomBytes,timingSafeEqual}from"node:crypto";var MAX_WEB_SHELL_DEVICES=128;var CredentialStore=class{static{__name(this,"CredentialStore")}#runtime;#pairing=new Map;#webShell=new Map;#desktopRelay=new Map;constructor(runtimeToken){this.#runtime=hashToken(runtimeToken)}addPairingToken(id,token){this.#pairing.set(id,createHash("sha256").update(token,"utf8").digest())}revokePairingToken(id){return this.#pairing.delete(id)}addWebShellToken(id,token){if(this.#webShell.size>=MAX_WEB_SHELL_DEVICES)return false;this.#webShell.set(id,{digest:createHash("sha256").update(token,"utf8").digest(),createdAt:Date.now()});return true}revokeWebShellToken(id){return this.#webShell.delete(id)}listWebShellDevices(){return Array.from(this.#webShell,([id,entry])=>({id,createdAt:entry.createdAt}))}createDesktopRelayCredential(claim){const now=Date.now();for(const[digest,entry]of this.#desktopRelay){if(entry.expiresAt<=now)this.#desktopRelay.delete(digest)}if(this.#desktopRelay.size>=128)return void 0;const credential=randomBytes(32).toString("base64url");this.#desktopRelay.set(digestToken(credential),{...claim,expiresAt:now+12e4});return credential}consumeDesktopRelayCredential(credential,acpPath){const digest=digestToken(credential);const claim=this.#desktopRelay.get(digest);if(!claim)return void 0;this.#desktopRelay.delete(digest);if(claim.expiresAt<=Date.now()||claim.acpPath!==acpPath){return void 0}return{acpPath:claim.acpPath,sessionId:claim.sessionId}}isOpen(listener){if(listener.kind==="local-control")return false;return this.#runtime===void 0}verify(credentials,listener){const candidate=createHash("sha256").update(credentials,"utf8").digest();let matched=false;if(listener.kind==="local-control"){for(const expected of this.#pairing.values()){if(equalDigest(candidate,expected))matched=true}return matched}if(this.#runtime!==void 0&&equalDigest(candidate,this.#runtime)){matched=true}for(const{digest}of this.#webShell.values()){if(equalDigest(candidate,digest))matched=true}return matched}};function singleTokenCredentials(token){const expected=hashToken(token);return{isOpen:__name(listener=>expected===void 0&&listener.kind!=="local-control","isOpen"),verify:__name((candidate,listener)=>{if(expected===void 0||listener.kind==="local-control"){return false}return equalDigest(createHash("sha256").update(candidate,"utf8").digest(),expected)},"verify")}}__name(singleTokenCredentials,"singleTokenCredentials");function hashToken(token){return token===void 0||token===""?void 0:createHash("sha256").update(token,"utf8").digest()}__name(hashToken,"hashToken");function digestToken(token){return createHash("sha256").update(token,"utf8").digest("hex")}__name(digestToken,"digestToken");function equalDigest(a,b){return a.length===b.length&&timingSafeEqual(a,b)}__name(equalDigest,"equalDigest");init_esbuild_shims();var LISTENER_TAG=Symbol.for("qwen.serve.listenerIdentity");function tagListener(server,identity){server[LISTENER_TAG]=identity}__name(tagListener,"tagListener");var PRIMARY={kind:"primary"};function fromServer(server){if(!server||typeof server!=="object")return void 0;return server[LISTENER_TAG]}__name(fromServer,"fromServer");function listenerIdentityOf(req){const socket=req.socket;return fromServer(socket?.server)??PRIMARY}__name(listenerIdentityOf,"listenerIdentityOf");function listenerIdentityOfSocket(socket){const withServer=socket;return fromServer(withServer?.server)??PRIMARY}__name(listenerIdentityOfSocket,"listenerIdentityOfSocket");init_esbuild_shims();function markPreAuthReject(res){(res.locals??={})[ACCESS_LOG_REJECT_LOCAL]=true}__name(markPreAuthReject,"markPreAuthReject");var denyBrowserOriginCors=__name((req,res,next)=>{if(req.headers.origin){res.setHeader("Vary","Origin");markPreAuthReject(res);res.status(403).json({error:"Request denied by CORS policy"});return}next()},"denyBrowserOriginCors");var InvalidAllowOriginPatternError=class extends Error{static{__name(this,"InvalidAllowOriginPatternError")}pattern;constructor(pattern,reason){super(`Invalid --allow-origin pattern ${JSON.stringify(pattern)}: ${reason}. Expected \`*\`, a URL origin of the form \`<scheme>://<host>[:<port>]\`, or a loopback port wildcard \`<scheme>://<loopback-host>:*\` (no trailing slash, no path, no userinfo, no query).`);this.name="InvalidAllowOriginPatternError";this.pattern=pattern}};function parseAllowOriginPatterns(raw){const origins=new Set;const loopbackPortWildcards=[];let allowAny=false;for(const entry of raw){if(entry==="*"){allowAny=true;continue}if(entry.endsWith(":*")){const base=entry.slice(0,-2);let parsed2;try{parsed2=new URL(base)}catch{throw new InvalidAllowOriginPatternError(entry,"not a parseable URL")}if(parsed2.protocol!=="http:"&&parsed2.protocol!=="https:"){throw new InvalidAllowOriginPatternError(entry,"port wildcards are only supported for http and https origins")}if(parsed2.origin!==base){throw new InvalidAllowOriginPatternError(entry,`expected the canonical origin ${JSON.stringify(parsed2.origin)} without trailing slash, path, userinfo, or query`)}if(parsed2.port!==""){throw new InvalidAllowOriginPatternError(entry,"a port wildcard replaces the port; do not name one before `:*`")}if(!isLoopbackBind(parsed2.hostname)){throw new InvalidAllowOriginPatternError(entry,"port wildcards are only supported for loopback hosts")}loopbackPortWildcards.push({protocol:parsed2.protocol,hostname:parsed2.hostname.toLowerCase()});continue}let parsed;try{parsed=new URL(entry)}catch{throw new InvalidAllowOriginPatternError(entry,"not a parseable URL")}const canonical=parsed.origin==="null"?`${parsed.protocol}//${parsed.host}`:parsed.origin;if(canonical!==entry){throw new InvalidAllowOriginPatternError(entry,`expected the canonical origin ${JSON.stringify(canonical)} without trailing slash, path, userinfo, or query`)}origins.add(canonical.toLowerCase())}return{allowAny,origins,loopbackPortWildcards}}__name(parseAllowOriginPatterns,"parseAllowOriginPatterns");function findNonLoopbackHttpOrigin(patterns){for(const origin of patterns.origins){const parsed=new URL(origin);if((parsed.protocol==="http:"||parsed.protocol==="https:")&&!isLoopbackBind(parsed.hostname)){return origin}}return void 0}__name(findNonLoopbackHttpOrigin,"findNonLoopbackHttpOrigin");function matchesLoopbackPortWildcard(origin,wildcards){if(!wildcards||wildcards.length===0)return false;let parsed;try{parsed=new URL(origin)}catch{return false}if(parsed.origin!==origin){const defaultPort=parsed.protocol==="http:"?"80":"443";if(origin!==`${parsed.origin}:${defaultPort}`)return false}return wildcards.some(wildcard=>wildcard.protocol===parsed.protocol&&wildcard.hostname===parsed.hostname)}__name(matchesLoopbackPortWildcard,"matchesLoopbackPortWildcard");function originIsExplicitlyAllowed(patterns,origin){const normalized=origin.toLowerCase();if(patterns.origins.has(normalized))return true;return matchesLoopbackPortWildcard(normalized,patterns.loopbackPortWildcards)}__name(originIsExplicitlyAllowed,"originIsExplicitlyAllowed");function allowOriginMatches(patterns,origin){return patterns.allowAny||originIsExplicitlyAllowed(patterns,origin)}__name(allowOriginMatches,"allowOriginMatches");var MutableOriginAllowlist=class{static{__name(this,"MutableOriginAllowlist")}#allowAny;#static;#wildcards;#dynamic=new Map;constructor(base){this.#allowAny=base.allowAny;this.#static=new Set(base.origins);this.#wildcards=base.loopbackPortWildcards??[]}allows(origin){if(this.#allowAny)return true;const normalized=origin.toLowerCase();if(this.#static.has(normalized))return true;if(matchesLoopbackPortWildcard(normalized,this.#wildcards))return true;for(const value of this.#dynamic.values()){if(value===normalized)return true}return false}add(key,origin){this.#dynamic.set(key,origin.toLowerCase())}remove(key){this.#dynamic.delete(key)}};function toMatcher(patterns){return"allows"in patterns?patterns:{allows:__name(origin=>allowOriginMatches(patterns,origin),"allows")}}__name(toMatcher,"toMatcher");function allowOriginCors(patterns){const matcher=toMatcher(patterns);const allowedMethods="GET, POST, PATCH, DELETE, OPTIONS";const allowedHeaders="Authorization, Content-Type, X-Qwen-Client-Id, Last-Event-ID, X-Qwen-Event-Epoch";const maxAgeSeconds="86400";const exposedHeaders="Retry-After, X-Qwen-Event-Epoch, X-Qwen-SSE-Stream-Id";return(req,res,next)=>{const origin=req.headers.origin;if(!origin){next();return}if(origin==="null"){res.setHeader("Vary","Origin");markPreAuthReject(res);res.status(403).json({error:"Request denied by CORS policy"});return}const matched=matcher.allows(origin);if(matched){res.setHeader("Access-Control-Allow-Origin",origin);res.setHeader("Vary","Origin");res.setHeader("Access-Control-Allow-Methods",allowedMethods);res.setHeader("Access-Control-Allow-Headers",allowedHeaders);res.setHeader("Access-Control-Max-Age",maxAgeSeconds);res.setHeader("Access-Control-Expose-Headers",exposedHeaders);if(req.method==="OPTIONS"&&(req.headers["access-control-request-method"]||req.headers["access-control-request-headers"])){res.status(204).end();return}next();return}res.setHeader("Vary","Origin");markPreAuthReject(res);res.status(403).json({error:"Request denied by CORS policy"})}}__name(allowOriginCors,"allowOriginCors");function hostAllowlist(bind,getPort){const primaryGate=buildPrimaryHostGate(bind,getPort);return(req,res,next)=>{const listener=listenerIdentityOf(req);if(listener.kind!=="local-control"){primaryGate(req,res,next);return}const host=(req.headers.host||"").toLowerCase();const browserHost=listener.origin===void 0?void 0:new URL(listener.origin).host.toLowerCase();if(listener.authority===void 0||host!==listener.authority&&host!==browserHost){markPreAuthReject(res);res.status(403).json({error:"Invalid Host header"});return}next()}}__name(hostAllowlist,"hostAllowlist");function buildPrimaryHostGate(bind,getPort){if(!isLoopbackBind(bind)){return(_req,_res,next)=>next()}let cachedPort=-1;let cachedAllowed=new Set;const boundHost=formatHostForAuthority(bind);const allowedFor=__name(port=>{if(port===cachedPort)return cachedAllowed;cachedPort=port;cachedAllowed=new Set([`localhost:${port}`,`127.0.0.1:${port}`,`[::1]:${port}`,`host.docker.internal:${port}`,`${boundHost}:${port}`]);if(port===80||port===443){cachedAllowed.add("localhost");cachedAllowed.add("127.0.0.1");cachedAllowed.add("[::1]");cachedAllowed.add("host.docker.internal");cachedAllowed.add(boundHost)}return cachedAllowed},"allowedFor");return(req,res,next)=>{const port=getPort();const host=(req.headers.host||"").toLowerCase();if(!allowedFor(port).has(host)){markPreAuthReject(res);res.status(403).json({error:"Invalid Host header"});return}next()}}__name(buildPrimaryHostGate,"buildPrimaryHostGate");function bearerAuth(source){const credentials=typeof source==="object"&&source!==null?source:singleTokenCredentials(source);return(req,res,next)=>{const listener=listenerIdentityOf(req);if(credentials.isOpen(listener)){next();return}const header=req.headers.authorization;if(!header){res.status(401).json({error:"Unauthorized"});return}const schemeEnd=header.indexOf(" ");if(schemeEnd<=0){res.status(401).json({error:"Unauthorized"});return}const scheme=header.slice(0,schemeEnd).toLowerCase();if(scheme!=="bearer"){res.status(401).json({error:"Unauthorized"});return}let credStart=schemeEnd+1;while(credStart<header.length&&(header.charCodeAt(credStart)===32||header.charCodeAt(credStart)===9)){credStart++}const presented=header.slice(credStart);if(presented.length===0){res.status(401).json({error:"Unauthorized"});return}if(!credentials.verify(presented,listener)){res.status(401).json({error:"Unauthorized"});return}req[AUTHENTICATED_REQUEST]=true;next()}}__name(bearerAuth,"bearerAuth");var AUTHENTICATED_REQUEST=Symbol("qwen.serve.authenticatedRequest");function requestWasAuthenticated(req){return req[AUTHENTICATED_REQUEST]===true}__name(requestWasAuthenticated,"requestWasAuthenticated");function isTrustedLoopbackMode(input){return input.loopbackBind&&!input.tokenConfigured&&!input.requireAuth}__name(isTrustedLoopbackMode,"isTrustedLoopbackMode");function requestHasOperatorAuthority(req,trustedLoopbackMode){return requestWasAuthenticated(req)||trustedLoopbackMode&&listenerIdentityOf(req).kind==="primary"}__name(requestHasOperatorAuthority,"requestHasOperatorAuthority");function createMutationGate(deps){const passthrough=__name((_req,_res,next)=>next(),"passthrough");if(deps.tokenConfigured){return()=>passthrough}const trustedLoopbackMode=deps.trustedLoopbackMode===true&&deps.requireAuth===false;const strictDenier=__name((req,res,next)=>{if(requestHasOperatorAuthority(req,trustedLoopbackMode)){next();return}res.status(401).json({error:"This route requires the daemon to be configured with a bearer token. Set QWEN_SERVER_TOKEN or pass --token to enable bearer auth.",code:"token_required"})},"strictDenier");return(opts={})=>opts.strict?strictDenier:passthrough}__name(createMutationGate,"createMutationGate");init_esbuild_shims();import{TLSSocket}from"node:tls";function installRemoteSelfOriginMiddleware(app,bind,token){if(isLoopbackBind(bind)||!token)return;const authenticate=bearerAuth(token);app.use((req,res,next)=>{const origin=req.headers.origin;const host=req.headers.host;if(!origin||!host||listenerIdentityOf(req).kind!=="primary"){next();return}const scheme=req.socket instanceof TLSSocket&&req.socket.encrypted?"https":"http";let authority=host.toLowerCase();if(scheme==="http"&&authority.endsWith(":80"))authority=authority.slice(0,-3);else if(scheme==="https"&&authority.endsWith(":443"))authority=authority.slice(0,-4);if(origin!==`${scheme}://${authority}`){next();return}try{if(new URL(origin).origin!==origin){next();return}}catch{next();return}(res.locals??={})[ACCESS_LOG_REJECT_LOCAL]=true;const allow=__name(()=>{delete res.locals[ACCESS_LOG_REJECT_LOCAL];delete req.headers.origin;next()},"allow");if(isPreAuthWebShellRequest(req)||req.method==="POST"&&req.path==="/web-shell/pairing/exchange")allow();else authenticate(req,res,allow)})}__name(installRemoteSelfOriginMiddleware,"installRemoteSelfOriginMiddleware");function installSelfOriginStripMiddleware(app,getPort,bind){let cachedStripPort=-1;let cachedSelfOrigins=new Set;const boundHost=isLoopbackBind(bind)?formatHostForAuthority(bind):void 0;app.use((req,_res,next)=>{const origin=req.headers.origin;if(origin){const port=getPort();if(port!==cachedStripPort){cachedStripPort=port;cachedSelfOrigins=new Set([`http://127.0.0.1:${port}`,`http://localhost:${port}`,`http://[::1]:${port}`,`http://host.docker.internal:${port}`,`https://127.0.0.1:${port}`,`https://localhost:${port}`,`https://[::1]:${port}`,`https://host.docker.internal:${port}`]);if(boundHost){cachedSelfOrigins.add(`http://${boundHost}:${port}`);cachedSelfOrigins.add(`https://${boundHost}:${port}`)}if(port===80){for(const host of["127.0.0.1","localhost","[::1]","host.docker.internal"]){cachedSelfOrigins.add(`http://${host}`)}if(boundHost){cachedSelfOrigins.add(`http://${boundHost}`)}}else if(port===443){for(const host of["127.0.0.1","localhost","[::1]","host.docker.internal"]){cachedSelfOrigins.add(`https://${host}`)}if(boundHost){cachedSelfOrigins.add(`https://${boundHost}`)}}}if(cachedSelfOrigins.has(origin)){delete req.headers.origin}}next()})}__name(installSelfOriginStripMiddleware,"installSelfOriginStripMiddleware");init_esbuild_shims();function acpChildExtraArgs(opts){const extraArgs=[...opts.experimentalLsp===true?["--experimental-lsp"]:[],...opts.restoreAskUserQuestion===true?["--restore-ask-user-question"]:[]];return extraArgs.length>0?extraArgs:void 0}__name(acpChildExtraArgs,"acpChildExtraArgs");init_esbuild_shims();var ClientMcpSenderRegistry=class{static{__name(this,"ClientMcpSenderRegistry")}senders=new Map;sessionSenders=new Map;sessionScopedServerNames=new Set;set(serverName,sender,owner){this.senders.set(serverName,{sender,owner})}delete(serverName,owner){if(this.senders.get(serverName)?.owner===owner){this.senders.delete(serverName)}}owns(serverName,owner){return this.senders.get(serverName)?.owner===owner}setSession(serverName,sessionId,sender,owner,registration,release){let bySession=this.sessionSenders.get(serverName);if(!bySession){bySession=new Map;this.sessionSenders.set(serverName,bySession)}bySession.get(sessionId)?.release?.();bySession.set(sessionId,{sender,owner,registration,release});this.sessionScopedServerNames.add(serverName)}ownsSession(serverName,sessionId,owner){return this.sessionSenders.get(serverName)?.get(sessionId)?.owner===owner}hasSession(serverName,sessionId){return this.sessionSenders.get(serverName)?.has(sessionId)===true}deleteSession(serverName,sessionId,owner,registration){const bySession=this.sessionSenders.get(serverName);const entry=bySession?.get(sessionId);if(entry?.owner!==owner)return false;if(registration!==void 0&&entry.registration!==registration){return false}bySession.delete(sessionId);entry.release?.();if(bySession.size===0){this.sessionSenders.delete(serverName);this.sessionScopedServerNames.delete(serverName)}return true}serverNames(){return[...this.senders.keys()]}lookup=__name(serverName=>{const entry=this.senders.get(serverName);const sessionEntries=this.sessionSenders.get(serverName);if(!entry&&!sessionEntries)return void 0;return(payload,context2)=>{if(context2?.sessionId){const sessionEntry=sessionEntries?.get(context2.sessionId);if(sessionEntry)return sessionEntry.sender(payload);if(this.sessionScopedServerNames.has(serverName)){return Promise.reject(new Error(`No session-scoped MCP sender for '${serverName}' in session '${context2.sessionId}'.`))}}if(this.sessionScopedServerNames.has(serverName)){return Promise.reject(new Error(`Session-scoped MCP server '${serverName}' requires a session context.`))}if(!entry){return Promise.reject(new Error(`No client MCP sender for '${serverName}'.`))}return entry.sender(serverName,payload)}},"lookup")};async function registerSessionScopedClientMcpServer(registry,bridge,originatorClientId,serverName,sendSdkMcpMessage,sessionId,onSessionClosed){const registration={};const controller=new AbortController;const events=bridge.subscribeEvents?.(sessionId,{signal:controller.signal});registry.setSession(serverName,sessionId,payload=>sendSdkMcpMessage(serverName,payload),originatorClientId,registration,()=>{controller.abort();void bridge.detachClient?.(sessionId).catch(()=>{})});if(events){void(async()=>{let current=events;let sessionClosed=false;try{while(!controller.signal.aborted){let evicted=false;for await(const event of current){const type=event!==null&&typeof event==="object"?event.type:void 0;if(type==="session_closed"){sessionClosed=true;break}if(type==="client_evicted")evicted=true}if(sessionClosed||controller.signal.aborted)break;if(!evicted){sessionClosed=true;break}let replacement;try{replacement=bridge.subscribeEvents?.(sessionId,{signal:controller.signal})}catch{sessionClosed=true;break}if(!replacement)break;current=replacement}}finally{if(sessionClosed&&!controller.signal.aborted&®istry.deleteSession(serverName,sessionId,originatorClientId,registration)){onSessionClosed?.();await bridge.removeSessionRuntimeMcpServer(sessionId,serverName,originatorClientId).catch(()=>{})}}})().catch(()=>{})}try{const runtimeConfig={type:"sdk",[CLIENT_MCP_OVER_WS_CONFIG_FLAG]:true,alwaysLoadTools:true};const result=await bridge.addSessionRuntimeMcpServer(sessionId,serverName,runtimeConfig,originatorClientId);if(result.skipped){throw new Error(`runtime MCP add skipped: ${result.reason??"unknown"}`)}if(result.shadowedSettings){throw new Error(`client MCP server '${serverName}' conflicts with a configured MCP server`)}if(!registry.ownsSession(serverName,sessionId,originatorClientId)){if(!registry.hasSession(serverName,sessionId)){await bridge.removeSessionRuntimeMcpServer(sessionId,serverName,originatorClientId).catch(()=>{})}throw new Error(`client MCP registration for '${serverName}' was superseded`)}return{toolCount:result.toolCount}}catch(err){if(registry.deleteSession(serverName,sessionId,originatorClientId,registration)){await bridge.removeSessionRuntimeMcpServer(sessionId,serverName,originatorClientId).catch(()=>{})}throw err}}__name(registerSessionScopedClientMcpServer,"registerSessionScopedClientMcpServer");function createClientMcpServerProvider(registry,bridge,originatorClientId){return{async registerClientMcpServer(serverName,sendSdkMcpMessage,scope,onSessionClosed){if(scope?.sessionId!==void 0){return registerSessionScopedClientMcpServer(registry,bridge,originatorClientId,serverName,sendSdkMcpMessage,scope.sessionId,onSessionClosed)}registry.set(serverName,sendSdkMcpMessage,originatorClientId);try{const runtimeConfig={type:"sdk",[CLIENT_MCP_OVER_WS_CONFIG_FLAG]:true};const result=await bridge.addRuntimeMcpServer(serverName,runtimeConfig,originatorClientId);if(result.skipped){registry.delete(serverName,originatorClientId);throw new Error(`runtime MCP add skipped: ${result.reason??"unknown"}`)}if(result.shadowedSettings){await bridge.removeRuntimeMcpServer(serverName,originatorClientId).catch(()=>{});throw new Error(`client MCP server '${serverName}' conflicts with a configured MCP server`)}return{toolCount:result.toolCount}}catch(err){registry.delete(serverName,originatorClientId);throw err}},async unregisterClientMcpServer(serverName,scope){const sessionId=scope?.sessionId;if(sessionId!==void 0){if(!registry.deleteSession(serverName,sessionId,originatorClientId)){return}await bridge.removeSessionRuntimeMcpServer(sessionId,serverName,originatorClientId).catch(()=>{});return}if(!registry.owns(serverName,originatorClientId))return;registry.delete(serverName,originatorClientId);await bridge.removeRuntimeMcpServer(serverName,originatorClientId).catch(()=>{})}}}__name(createClientMcpServerProvider,"createClientMcpServerProvider");init_esbuild_shims();var SERVE_PROTOCOL_VERSION="v1";var SUPPORTED_SERVE_PROTOCOL_VERSIONS=[SERVE_PROTOCOL_VERSION];var SERVE_CAPABILITY_REGISTRY={health:{since:"v1"},daemon_status:{since:"v1"},daemon_update:{since:"v1"},capabilities:{since:"v1"},session_create:{since:"v1"},hosted_harness_private_v1:{since:"v1",hostedPersona:true},managed_session_journal_delta_v1:{since:"v1",hostedPersona:true},session_startup_config:{since:"v1"},session_id_override:{since:"v1"},session_scope_override:{since:"v1"},session_load:{since:"v1"},session_resume:{since:"v1"},unstable_session_resume:{since:"v1"},session_list:{since:"v1"},session_catalog_batch:{since:"v1"},session_info:{since:"v1"},session_source_metadata:{since:"v1"},session_side_task:{since:"v1"},session_prompt:{since:"v1"},session_turn_status:{since:"v1"},session_attachments:{since:"v1"},session_attachment_chunk_upload:{since:"v1"},session_attachment_list:{since:"v1"},session_mid_turn_message_mutation:{since:"v1"},session_mid_turn_message_query:{since:"v1"},session_mid_turn_send_now:{since:"v1"},session_cancel:{since:"v1"},session_events:{since:"v1"},session_artifacts:{since:"v1"},session_artifacts_persistence:{since:"v1"},session_artifact_library:{since:"v1"},workspace_artifact_library:{since:"v1"},workspace_artifact_library_stream:{since:"v1"},session_sources:{since:"v1"},slow_client_warning:{since:"v1"},typed_event_schema:{since:"v1"},session_set_model:{since:"v1"},client_identity:{since:"v1"},client_heartbeat:{since:"v1"},session_permission_vote:{since:"v1"},permission_vote:{since:"v1"},workspace_mcp:{since:"v1"},workspace_skills:{since:"v1"},workspace_skills_config_runtime:{since:"v1"},workspace_providers:{since:"v1"},workspace_acp_preheat:{since:"v1"},workspace_acp_status:{since:"v1"},auth_provider_install:{since:"v1"},workspace_memory:{since:"v1"},memory_import_v1:{since:"v1"},workspace_memory_remember:{since:"v1",modes:["workspace","clean"]},workspace_memory_remember_project_scope:{since:"v1"},workspace_memory_remember_user_scope:{since:"v1"},workspace_memory_forget:{since:"v1"},workspace_memory_forget_scope:{since:"v1"},workspace_memory_dream:{since:"v1"},workspace_agents:{since:"v1"},workspace_agent_generate:{since:"v1"},agent_collaboration_v1:{since:"v1"},workspace_env:{since:"v1"},workspace_preflight:{since:"v1"},session_context:{since:"v1"},session_context_usage:{since:"v1"},session_supported_commands:{since:"v1"},session_tasks:{since:"v1"},session_agents:{since:"v1"},session_agent_trace:{since:"v1"},scheduled_task_session_reuse:{since:"v1"},scheduled_task_gate:{since:"v1"},session_monitor_tool_correlation:{since:"v1"},session_stats:{since:"v1"},session_lsp:{since:"v1"},session_resources:{since:"v1"},session_status:{since:"v1"},session_close:{since:"v1"},session_archive:{since:"v1"},session_archive_idle_guard:{since:"v1"},session_storage_conflict_repair:{since:"v1"},session_metadata:{since:"v1"},session_organization:{since:"v1"},session_export:{since:"v1"},standalone_sessions_v1:{since:"v1"},standalone_session_options_v1:{since:"v1"},session_transcript:{since:"v1"},session_transcript_pagination:{since:"v1"},session_turn_navigation:{since:"v1"},mcp_guardrails:{since:"v1",modes:["warn","enforce"]},workspace_mcp_manage:{since:"v1"},mcp_guardrail_events:{since:"v1"},external_tool_guard:{since:"v1",modes:["required"]},mcp_server_runtime_mutation:{since:"v1"},workspace_file_read:{since:"v1"},workspace_file_bytes:{since:"v1"},workspace_file_read_cursor:{since:"v1"},workspace_file_write:{since:"v1"},workspace_file_upload:{since:"v1"},workspace_file_delete:{since:"v1"},workspace_directory_create:{since:"v1"},workspace_directory_delete:{since:"v1"},session_approval_mode_control:{since:"v1"},workspace_tool_toggle:{since:"v1"},workspace_skill_settings_toggle:{since:"v1"},workspace_skill_settings_batch_toggle:{since:"v1"},workspace_session_refresh:{since:"v1"},extension_batch_activation_v2:{since:"v1"},extension_activation_explicit_refresh:{since:"v1"},workspace_skill_manage:{since:"v1"},web_shell_brand:{since:"v1"},workspace_settings:{since:"v1"},workspace_permissions:{since:"v1"},workspace_voice:{since:"v1"},workspace_voice_transcription:{since:"v1",modes:["batch"]},workspace_trust:{since:"v1"},workspace_trust_grant:{since:"v1"},workspace_trust_hot_reload:{since:"v1"},workspace_init:{since:"v1"},workspace_github_setup:{since:"v1"},workspace_github_prs:{since:"v1"},workspace_git_worktrees:{since:"v1"},workspace_mcp_restart:{since:"v1"},session_recap:{since:"v1"},session_generation:{since:"v1"},workspace_generation:{since:"v1"},session_btw:{since:"v1"},session_shell_command:{since:"v1"},mcp_workspace_pool:{since:"v1"},mcp_pool_restart:{since:"v1"},require_auth:{since:"v1"},allow_origin:{since:"v1"},auth_device_flow:{since:"v1"},permission_mediation:{since:"v1",modes:["first-responder","designated","consensus","local-only"]},prompt_absolute_deadline:{since:"v1"},writer_idle_timeout:{since:"v1"},non_blocking_prompt:{since:"v1"},session_language:{since:"v1"},user_language_sync:{since:"v1"},session_message_deletion:{since:"v1"},session_rewind:{since:"v1"},workspace_hooks:{since:"v1"},session_hooks:{since:"v1"},workspace_extensions:{since:"v1"},session_branch:{since:"v1"},session_branch_worktree:{since:"v1"},rate_limit:{since:"v1"},workspace_reload:{since:"v1"},workspace_model_reload:{since:"v1"},channel_delivery:{since:"v1"},channel_reload:{since:"v1"},channel_control:{since:"v1"},channel_management:{since:"v1"},channel_delete_config_loss_convergence:{since:"v1"},workspace_channel_observed_contacts:{since:"v1"},multi_workspace_sessions:{since:"v1"},multi_workspace_session_rewind:{since:"v1"},multi_workspace_session_shell:{since:"v1"},dynamic_workspace_registration:{since:"v1"},persistent_workspace_registration:{since:"v1"},workspace_display_name:{since:"v1"},scratch_workspace_registration:{since:"v1"},git_workspace_clone:{since:"v1"},workspace_runtime_removal:{since:"v1"},native_directory_picker:{since:"v1"},workspace_runtime:{since:"v1"},workspace_runtime_stop:{since:"v1"},workspace_directories:{since:"v1"},workspace_local_open:{since:"v1"},workspace_local_terminal:{since:"v1"},workspace_qualified_rest_core:{since:"v1"},workspace_qualified_voice:{since:"v1"},workspace_qualified_memory:{since:"v1"},extension_management_v2:{since:"v1"},extension_list_details:{since:"v1"},extension_state:{since:"v1"},extension_git_credentials:{since:"v1"},extension_local_path_install:{since:"v1"},workspace_persisted_transcript:{since:"v1"},workspace_session_export:{since:"v1"},workspace_archived_session_export:{since:"v1"},workspace_session_live_state:{since:"v1"},workspace_session_metadata:{since:"v1"},session_worktree_persistence_v1:{since:"v1"},session_worktree_reset_v1:{since:"v1"},workspace_qualified_acp:{since:"v1"},client_mcp_over_ws:{since:"v1"},cdp_tunnel_over_ws:{since:"v1"},browser_automation_mcp:{since:"v1"},voice_transcribe:{since:"v1",modes:["streaming","batch"]},realtime_voice:{since:"v1"},realtime_voice_web:{since:"v1"},web_terminal:{since:"v1"}};var CONDITIONAL_SERVE_FEATURES=new Map([["session_message_deletion",toggles=>toggles.hostedHarness!==true],["hosted_harness_private_v1",toggles=>toggles.hostedHarness===true],["managed_session_journal_delta_v1",toggles=>toggles.hostedHarness===true],["require_auth",toggles=>toggles.requireAuth===true],["agent_collaboration_v1",toggles=>toggles.agentCollaborationEnabled===true],["standalone_sessions_v1",toggles=>toggles.standaloneSessionsAvailable===true],["standalone_session_options_v1",toggles=>toggles.standaloneSessionsAvailable===true],["mcp_workspace_pool",toggles=>toggles.mcpPoolActive===true],["mcp_pool_restart",toggles=>toggles.mcpPoolActive===true],["external_tool_guard",toggles=>toggles.externalToolGuardActive===true],["allow_origin",toggles=>toggles.allowOriginActive===true],["prompt_absolute_deadline",toggles=>typeof toggles.promptDeadlineMs==="number"&&toggles.promptDeadlineMs>0],["writer_idle_timeout",toggles=>typeof toggles.writerIdleTimeoutMs==="number"&&toggles.writerIdleTimeoutMs>0],["workspace_settings",toggles=>toggles.persistSettingAvailable===true],["user_language_sync",toggles=>toggles.persistSettingAvailable===true],["workspace_voice",toggles=>toggles.persistSettingAvailable===true],["workspace_voice_transcription",toggles=>toggles.voiceTranscriptionAvailable===true],["session_shell_command",toggles=>toggles.sessionShellCommandEnabled===true],["session_artifact_library",toggles=>toggles.sessionArtifactsPersistenceAvailable===true],["workspace_artifact_library",toggles=>toggles.sessionArtifactsPersistenceAvailable===true],["workspace_artifact_library_stream",toggles=>toggles.sessionArtifactsPersistenceAvailable===true],["session_artifacts_persistence",toggles=>toggles.sessionArtifactsPersistenceAvailable===true],["session_sources",toggles=>toggles.sessionArtifactsPersistenceAvailable===true],["session_generation",toggles=>toggles.sessionGenerationAvailable===true],["scheduled_task_session_reuse",toggles=>toggles.currentSessionSchedulingAvailable===true],["workspace_generation",toggles=>toggles.workspaceGenerationAvailable===true],["rate_limit",toggles=>toggles.rateLimit===true],["workspace_reload",toggles=>toggles.reloadAvailable===true],["workspace_trust_hot_reload",toggles=>toggles.workspaceTrustHotReloadAvailable===true],["workspace_trust_grant",toggles=>toggles.workspaceTrustHotReloadAvailable===true],["channel_reload",toggles=>toggles.channelReloadAvailable===true],["channel_control",toggles=>toggles.channelControlAvailable===true],["channel_management",toggles=>toggles.channelManagementAvailable===true],["channel_delete_config_loss_convergence",toggles=>toggles.channelManagementAvailable===true],["multi_workspace_sessions",toggles=>toggles.multiWorkspaceSessionsEnabled===true],["multi_workspace_session_rewind",toggles=>toggles.multiWorkspaceSessionsEnabled===true],["multi_workspace_session_shell",toggles=>toggles.multiWorkspaceSessionsEnabled===true&&toggles.sessionShellCommandEnabled===true],["dynamic_workspace_registration",toggles=>toggles.dynamicWorkspaceRegistrationAvailable===true],["persistent_workspace_registration",toggles=>toggles.persistentWorkspaceRegistrationAvailable===true],["scratch_workspace_registration",toggles=>toggles.scratchWorkspaceRegistrationAvailable===true],["git_workspace_clone",toggles=>toggles.gitWorkspaceCloneAvailable===true],["workspace_runtime_removal",toggles=>toggles.workspaceRuntimeRemovalAvailable===true],["workspace_directories",toggles=>toggles.workspaceDirectoriesAvailable===true],["native_directory_picker",toggles=>toggles.nativeDirectoryPickerAvailable===true],["workspace_runtime_stop",toggles=>toggles.workspaceRuntimeStopAvailable===true],["workspace_runtime",toggles=>toggles.workspaceRuntimeAvailable===true],["workspace_skills_config_runtime",toggles=>toggles.workspaceRuntimeAvailable===true],["workspace_local_open",toggles=>toggles.localPathOpenAvailable===true],["workspace_local_terminal",toggles=>toggles.localTerminalOpenAvailable===true],["workspace_qualified_acp",toggles=>toggles.acpHttpEnabled===true&&toggles.multiWorkspaceSessionsEnabled===true],["workspace_qualified_voice",toggles=>toggles.acpHttpEnabled===true&&toggles.multiWorkspaceSessionsEnabled===true],["workspace_qualified_memory",toggles=>toggles.acpHttpEnabled===true&&toggles.multiWorkspaceSessionsEnabled===true],["client_mcp_over_ws",toggles=>toggles.clientMcpOverWsEnabled===true],["cdp_tunnel_over_ws",toggles=>toggles.cdpTunnelOverWsEnabled===true],["browser_automation_mcp",toggles=>toggles.browserAutomationMcpAvailable===true],["voice_transcribe",toggles=>toggles.voiceWsAvailable!==false],["realtime_voice",toggles=>toggles.acpHttpEnabled===true&&toggles.realtimeVoiceEnabled===true],["realtime_voice_web",toggles=>toggles.acpHttpEnabled===true&&toggles.realtimeVoiceWebEnabled===true],["web_terminal",toggles=>toggles.acpHttpEnabled===true]]);var SERVE_FEATURES=Object.freeze(Object.keys(SERVE_CAPABILITY_REGISTRY));function serveProtocolVersionIndex(version){return SUPPORTED_SERVE_PROTOCOL_VERSIONS.indexOf(version)}__name(serveProtocolVersionIndex,"serveProtocolVersionIndex");function isFeatureAvailableInProtocol(feature,protocolVersion){return serveProtocolVersionIndex(SERVE_CAPABILITY_REGISTRY[feature].since)<=serveProtocolVersionIndex(protocolVersion)}__name(isFeatureAvailableInProtocol,"isFeatureAvailableInProtocol");function hostedPersonaServeFeatures(){return SERVE_FEATURES.filter(feature=>{if(!isFeatureAvailableInProtocol(feature,SERVE_PROTOCOL_VERSION))return false;const entry=SERVE_CAPABILITY_REGISTRY[feature];return entry?.hostedPersona===true})}__name(hostedPersonaServeFeatures,"hostedPersonaServeFeatures");function getAdvertisedServeFeatures(protocolVersion=SERVE_PROTOCOL_VERSION,toggles={}){return SERVE_FEATURES.filter(feature=>{if(!isFeatureAvailableInProtocol(feature,protocolVersion))return false;const predicate=CONDITIONAL_SERVE_FEATURES.get(feature);if(predicate!==void 0)return predicate(toggles);return true})}__name(getAdvertisedServeFeatures,"getAdvertisedServeFeatures");function getServeProtocolVersions(){return{current:SERVE_PROTOCOL_VERSION,supported:[...SUPPORTED_SERVE_PROTOCOL_VERSIONS]}}__name(getServeProtocolVersions,"getServeProtocolVersions");init_esbuild_shims();import{execFile}from"node:child_process";import{accessSync,constants,existsSync,statSync}from"node:fs";import{delimiter,join}from"node:path";import{promisify}from"node:util";var execFileAsync=promisify(execFile);var PICKER_TIMEOUT_MS=3e5;var ZENITY_DISPLAY_FAILURE=/(cannot|failed to) open display/i;var X11_SOCKET_DIR="/tmp/.X11-unix";var LOCAL_X11_DISPLAY=/^:(\d+)(?:\.\d+)?$/;var NativeDirectoryPickerUnavailableError=class extends Error{static{__name(this,"NativeDirectoryPickerUnavailableError")}};function isNativeDirectoryPickerAvailable(env=process.env,macOsSessionUids=process.platform==="darwin"?readMacOsSessionUids():void 0){if(process.platform==="darwin"){return macOsSessionUids?.processUid!==void 0&&macOsSessionUids.processUid>0&&macOsSessionUids.consoleUid===macOsSessionUids.processUid&&!env["SSH_CONNECTION"]&&!env["SSH_TTY"]}if(process.platform==="win32"){const sessionName=env["SESSIONNAME"]?.trim();return Boolean(sessionName&&sessionName.toLowerCase()!=="services")}if(process.platform!=="linux")return false;if(!env["DISPLAY"]&&!env["WAYLAND_DISPLAY"])return false;if(!isX11DisplayReachable(env["DISPLAY"]))return false;return(env["PATH"]??"").split(delimiter).some(dir=>dir!==""&&isExecutableFile(join(dir,"zenity")))}__name(isNativeDirectoryPickerAvailable,"isNativeDirectoryPickerAvailable");function isX11DisplayReachable(display){const match=LOCAL_X11_DISPLAY.exec(display??"");return!match||existsSync(join(X11_SOCKET_DIR,`X${match[1]}`))}__name(isX11DisplayReachable,"isX11DisplayReachable");function readMacOsSessionUids(){try{return{processUid:process.getuid?.(),consoleUid:statSync("/dev/console").uid}}catch{return{}}}__name(readMacOsSessionUids,"readMacOsSessionUids");function isExecutableFile(file){try{if(!statSync(file).isFile())return false;accessSync(file,constants.X_OK);return true}catch{return false}}__name(isExecutableFile,"isExecutableFile");async function pickNativeDirectory(signal){try{if(process.platform==="darwin"){const script=["const app = Application.currentApplication();","app.includeStandardAdditions = true;","app.chooseFolder({",'withPrompt: "Select a workspace folder",',"}).toString();"].join(" ");const{stdout}=await execFileAsync("osascript",["-l","JavaScript","-e",script],{timeout:PICKER_TIMEOUT_MS,signal});return stdout.trim()||void 0}if(process.platform==="win32"){const script=["[Console]::OutputEncoding = [System.Text.Encoding]::UTF8;","Add-Type -AssemblyName System.Windows.Forms;","$dialog = New-Object System.Windows.Forms.FolderBrowserDialog;","if ($dialog.ShowDialog() -eq [System.Windows.Forms.DialogResult]::OK) {","[Console]::Out.Write($dialog.SelectedPath)","}"].join(" ");const{stdout}=await execFileAsync("powershell.exe",["-NoProfile","-STA","-Command",script],{timeout:PICKER_TIMEOUT_MS,signal});return stdout.trim()||void 0}if(process.platform==="linux"){const{stdout}=await execFileAsync("zenity",["--file-selection","--directory","--title=Select a workspace folder"],{timeout:PICKER_TIMEOUT_MS,signal});return stdout.trim()||void 0}}catch(error){const result=error;if(result.killed){return void 0}if(process.platform==="darwin"&&(result.stderr?.includes("(-128)")||result.stderr?.includes("User canceled"))||process.platform==="linux"&&result.code===1&&!ZENITY_DISPLAY_FAILURE.test(result.stderr??"")){return void 0}throw new NativeDirectoryPickerUnavailableError(error instanceof Error?error.message:String(error))}throw new NativeDirectoryPickerUnavailableError(`Native directory picker is not supported on ${process.platform}`)}__name(pickNativeDirectory,"pickNativeDirectory");init_esbuild_shims();import{execFileSync}from"node:child_process";var cached;function isGitAvailable(){if(cached!==void 0)return cached;try{execFileSync("git",["--version"],{stdio:"ignore",timeout:3e3,windowsHide:true});cached=true}catch{cached=false}return cached}__name(isGitAvailable,"isGitAvailable");init_esbuild_shims();import{execFile as execFile2,spawn}from"node:child_process";import{accessSync as accessSync2,constants as constants2,statSync as statSync2}from"node:fs";import{delimiter as delimiter2,join as join2}from"node:path";import{promisify as promisify2}from"node:util";var execFileAsync2=promisify2(execFile2);var OPEN_TIMEOUT_MS=1e4;var LINUX_TERMINAL_NAMES=["gnome-terminal","konsole","xterm"];function linuxTerminalCandidates(env){return env["DISPLAY"]?LINUX_TERMINAL_NAMES:LINUX_TERMINAL_NAMES.filter(name=>name!=="xterm")}__name(linuxTerminalCandidates,"linuxTerminalCandidates");var LocalPathOpenUnavailableError=class extends Error{static{__name(this,"LocalPathOpenUnavailableError")}};var SpawnHangError=class extends Error{static{__name(this,"SpawnHangError")}};function defaultMacOsSessionUids(){return process.platform==="darwin"?readMacOsSessionUids2():void 0}__name(defaultMacOsSessionUids,"defaultMacOsSessionUids");function hasGuiSession(env,macOsSessionUids){if(process.platform==="darwin"){return macOsSessionUids?.processUid!==void 0&&macOsSessionUids.processUid>0&&macOsSessionUids.consoleUid===macOsSessionUids.processUid&&!env["SSH_CONNECTION"]&&!env["SSH_TTY"]}if(process.platform==="win32"){const sessionName=env["SESSIONNAME"]?.trim();return Boolean(sessionName&&sessionName.toLowerCase()!=="services")}return void 0}__name(hasGuiSession,"hasGuiSession");function findExecutableOnPath(env,names){for(const name of names){for(const dir of(env["PATH"]??"").split(delimiter2)){if(dir==="")continue;const candidate=join2(dir,name);if(isExecutableFile2(candidate))return candidate}}return void 0}__name(findExecutableOnPath,"findExecutableOnPath");function isLocalPathOpenAvailable(env=process.env,macOsSessionUids=defaultMacOsSessionUids()){const guiSession=hasGuiSession(env,macOsSessionUids);if(guiSession!==void 0)return guiSession;if(process.platform!=="linux")return false;if(!env["DISPLAY"]&&!env["WAYLAND_DISPLAY"])return false;return findExecutableOnPath(env,["xdg-open"])!==void 0}__name(isLocalPathOpenAvailable,"isLocalPathOpenAvailable");function isLocalTerminalAvailable(env=process.env,macOsSessionUids=defaultMacOsSessionUids()){const guiSession=hasGuiSession(env,macOsSessionUids);if(guiSession!==void 0)return guiSession;if(process.platform!=="linux")return false;if(!env["DISPLAY"]&&!env["WAYLAND_DISPLAY"])return false;return findExecutableOnPath(env,linuxTerminalCandidates(env))!==void 0}__name(isLocalTerminalAvailable,"isLocalTerminalAvailable");function readMacOsSessionUids2(){try{return{processUid:process.getuid?.(),consoleUid:statSync2("/dev/console").uid}}catch{return{}}}__name(readMacOsSessionUids2,"readMacOsSessionUids");function isExecutableFile2(file){try{if(!statSync2(file).isFile())return false;accessSync2(file,constants2.X_OK);return true}catch{return false}}__name(isExecutableFile2,"isExecutableFile");async function openPathLocally(path2,timeoutMs){try{if(process.platform==="darwin"){await execFileAsync2("open",[path2],{timeout:OPEN_TIMEOUT_MS});return}if(process.platform==="win32"){assertPathExists(path2);await spawnAndIgnoreExitCode("explorer.exe",[path2],{timeoutMs});return}if(process.platform==="linux"){await execFileAsync2("xdg-open",[path2],{timeout:OPEN_TIMEOUT_MS});return}}catch(error){throw new LocalPathOpenUnavailableError(error instanceof Error?error.message:String(error))}throw new LocalPathOpenUnavailableError(`Local path open is not supported on ${process.platform}`)}__name(openPathLocally,"openPathLocally");function assertPathExists(path2){try{statSync2(path2)}catch{throw new LocalPathOpenUnavailableError(`Path does not exist: ${path2}`)}}__name(assertPathExists,"assertPathExists");async function openTerminalLocally(path2,timeoutMs){try{if(process.platform==="darwin"){await execFileAsync2("open",["-a","Terminal",path2],{timeout:OPEN_TIMEOUT_MS});return}if(process.platform==="win32"){assertPathExists(path2);await spawnWindowsTerminal(path2,timeoutMs);return}if(process.platform==="linux"){assertPathExists(path2);await spawnLinuxTerminal(path2,timeoutMs);return}}catch(error){if(error instanceof LocalPathOpenUnavailableError)throw error;throw new LocalPathOpenUnavailableError(error instanceof Error?error.message:String(error))}throw new LocalPathOpenUnavailableError(`Local terminal open is not supported on ${process.platform}`)}__name(openTerminalLocally,"openTerminalLocally");async function spawnWindowsTerminal(path2,timeoutMs){try{await spawnAndIgnoreExitCode("wt.exe",["-d",path2],{timeoutMs})}catch(error){if(error instanceof SpawnHangError)throw error;await spawnAndIgnoreExitCode("powershell.exe",["-NoProfile","-STA","-Command",'Start-Process cmd.exe -WorkingDirectory "$env:QWEN_LOCAL_OPEN_DIR"'],{extraEnv:{QWEN_LOCAL_OPEN_DIR:path2},timeoutMs})}}__name(spawnWindowsTerminal,"spawnWindowsTerminal");async function spawnLinuxTerminal(path2,timeoutMs){const env=process.env;if(!env["DISPLAY"]&&!env["WAYLAND_DISPLAY"]){throw new LocalPathOpenUnavailableError("No display server available")}const terminal=findExecutableOnPath(env,linuxTerminalCandidates(env));if(terminal===void 0){throw new LocalPathOpenUnavailableError("No terminal emulator found on PATH")}const name=terminal.split(/[\\/]/).pop();if(name==="gnome-terminal"){await spawnLongLived(terminal,[`--working-directory=${path2}`],timeoutMs);return}if(name==="konsole"){await spawnLongLived(terminal,["--workdir",path2],timeoutMs);return}await spawnLongLived(terminal,["-e","sh","-c",'cd "$1" && exec "${SHELL:-/bin/sh}"',"sh",path2],timeoutMs)}__name(spawnLinuxTerminal,"spawnLinuxTerminal");function spawnAndIgnoreExitCode(command,args,options={}){const{extraEnv,timeoutMs=OPEN_TIMEOUT_MS}=options;return new Promise((resolve3,reject)=>{const child=spawn(command,[...args],{stdio:"ignore",...extraEnv?{env:{...process.env,...extraEnv}}:{}});const timer=setTimeout(()=>{child.kill();reject(new SpawnHangError(`${command} did not exit within ${timeoutMs}ms`))},timeoutMs);child.once("error",error=>{clearTimeout(timer);reject(error)});child.once("close",()=>{clearTimeout(timer);resolve3()})})}__name(spawnAndIgnoreExitCode,"spawnAndIgnoreExitCode");function spawnLongLived(command,args,timeoutMs=OPEN_TIMEOUT_MS){return new Promise((resolve3,reject)=>{const child=spawn(command,[...args],{stdio:"ignore",detached:true});const timer=setTimeout(()=>{child.kill();reject(new SpawnHangError(`${command} did not spawn within ${timeoutMs}ms`))},timeoutMs);child.once("error",error=>{clearTimeout(timer);reject(error)});child.once("spawn",()=>{clearTimeout(timer);child.unref();resolve3()})})}__name(spawnLongLived,"spawnLongLived");init_esbuild_shims();var CAPABILITIES_SCHEMA_VERSION=1;init_esbuild_shims();import{lstatSync,mkdirSync,realpathSync}from"node:fs";import{lstat,mkdtemp}from"node:fs/promises";import{basename,dirname,isAbsolute,join as join3,relative,resolve}from"node:path";var isSamePath=__name((left,right)=>process.platform==="win32"?left.toLowerCase()===right.toLowerCase():left===right,"isSamePath");var isWithinRoot2=__name((candidate,root)=>{const rel=relative(root,candidate);return rel.length>0&&!rel.startsWith("..")&&!isAbsolute(rel)},"isWithinRoot");function isManagedScratchChild(canonicalCwd,canonicalRoot){return isSamePath(dirname(canonicalCwd),canonicalRoot)&&/^scratch-.+/.test(basename(canonicalCwd))}__name(isManagedScratchChild,"isManagedScratchChild");function isScratchRootCompatible(canonicalCwd,canonicalRoot){if(isSamePath(canonicalCwd,canonicalRoot))return false;if(isManagedScratchChild(canonicalCwd,canonicalRoot))return true;return!isWithinRoot2(canonicalCwd,canonicalRoot)&&!isWithinRoot2(canonicalRoot,canonicalCwd)}__name(isScratchRootCompatible,"isScratchRootCompatible");function validateRootStats(stats){if(stats.isSymbolicLink()||!stats.isDirectory()){throw new Error("Managed scratch root must be a non-symlink directory")}if(process.platform!=="win32"&&typeof process.getuid==="function"&&stats.uid!==process.getuid()){throw new Error("Managed scratch root must be owned by the daemon user")}if(process.platform!=="win32"&&(stats.mode&63)!==0){throw new Error("Managed scratch root must be accessible only to its owner")}}__name(validateRootStats,"validateRootStats");function hasVerifiableInode(ino){return Number(ino)!==0}__name(hasVerifiableInode,"hasVerifiableInode");function prepareManagedScratchRoot(root,startupWorkspaceCwds){mkdirSync(root,{recursive:true,mode:448});const before=lstatSync(root);validateRootStats(before);const canonicalRoot=realpathSync.native(resolve(root));const after=lstatSync(canonicalRoot);validateRootStats(after);if(!hasVerifiableInode(after.ino)){throw new Error("Managed scratch root identity cannot be verified on this volume")}if(before.dev!==after.dev||before.ino!==after.ino){throw new Error("Managed scratch root identity changed during validation")}if(startupWorkspaceCwds.some(cwd=>!isScratchRootCompatible(cwd,canonicalRoot))){throw new Error("Managed scratch root conflicts with a startup workspace")}return{canonicalRoot,device:after.dev,inode:after.ino}}__name(prepareManagedScratchRoot,"prepareManagedScratchRoot");async function revalidateManagedScratchRoot(root){const stats=await lstat(root.canonicalRoot);validateRootStats(stats);if(stats.dev!==root.device||stats.ino!==root.inode){throw new Error("Managed scratch root identity changed")}const canonical=realpathSync.native(root.canonicalRoot);if(!isSamePath(canonical,root.canonicalRoot)){throw new Error("Managed scratch root canonical path changed")}}__name(revalidateManagedScratchRoot,"revalidateManagedScratchRoot");async function createManagedScratchDirectory(root){await revalidateManagedScratchRoot(root);const created=await mkdtemp(join3(root.canonicalRoot,"scratch-"));const canonical=realpathSync.native(created);if(!isManagedScratchChild(canonical,root.canonicalRoot)){throw new Error("Managed scratch directory escaped its accepted root")}await revalidateManagedScratchRoot(root);return canonical}__name(createManagedScratchDirectory,"createManagedScratchDirectory");init_esbuild_shims();var SERVE_APP_LIFECYCLE=Symbol("qwen.serveAppLifecycle");var DEFAULT_CLOSE_TIMEOUT_MS=5e3;var SECONDARY_CLOSE_TIMEOUT_MS=2e3;function deferred(){let resolve3;let reject;const promise=new Promise((resolvePromise,rejectPromise)=>{resolve3=resolvePromise;reject=rejectPromise});void promise.catch(()=>void 0);return{promise,resolve:resolve3,reject}}__name(deferred,"deferred");var ServeAppLifecycleController=class{static{__name(this,"ServeAppLifecycleController")}admission=deferred();server;startupReady=true;listenerReady=false;listenerClosed=false;sealed=false;closePending;appDrain;hostDrain;bootStarter;bootPending;bootStarted=false;bindServer(server,options={}){if(this.server||server.listening||this.bootStarted||this.sealed){throw new Error("Serve app lifecycle must bind one server before its first listen.")}this.server=server;this.hostDrain=options.drainHost;this.startupReady=options.startupReady===void 0;server.once("listening",()=>{this.listenerReady=true;if(this.sealed){server.close();server.closeAllConnections();return}this.openAdmissionIfReady()});server.on("close",()=>{this.listenerClosed=true;this.seal();void this.close().catch(()=>void 0)});server.on("error",error=>{if(!this.listenerReady&&options.startupReady===void 0){this.seal(error);void this.close().catch(()=>void 0)}});if(options.startupReady){void options.startupReady.then(()=>{this.startupReady=true;this.openAdmissionIfReady()},error=>{this.seal(error instanceof Error?error:new Error(String(error)))})}}close(options={}){if(this.closePending)return this.closePending;const pending=this.closeOnce(options);this.closePending=pending;void pending.catch(()=>{if(this.closePending===pending)this.closePending=void 0});return pending}setAppDrain(drain){this.appDrain=drain}setBootStarter(starter){this.bootStarter=starter;this.openAdmissionIfReady()}async awaitBootAdmission(){if(!this.server||this.sealed){throw conversationRuntimeUnavailableError()}try{await this.admission.promise}catch(error){throw conversationRuntimeUnavailableError(error)}if(this.sealed){throw conversationRuntimeUnavailableError()}}async startBoot(starter=this.bootStarter){await this.awaitBootAdmission();await this.beginBoot(starter)}getBootPromise(){return this.bootPending}isBootStarted(){return this.bootStarted}sealBoot(){this.seal()}openAdmissionIfReady(){if(this.sealed||!this.server||!this.listenerReady||!this.startupReady){return}this.admission.resolve();const bootStarter=this.bootStarter;if(bootStarter&&!this.bootStarted){void this.beginBoot(bootStarter)?.catch(()=>void 0)}}beginBoot(starter){if(!starter)return void 0;if(this.sealed){return Promise.reject(conversationRuntimeUnavailableError())}if(this.bootPending)return this.bootPending;this.bootStarted=true;const pending=Promise.resolve().then(starter);const tracked=pending.finally(()=>{if(this.bootPending===tracked)this.bootPending=void 0});this.bootPending=tracked;void tracked.catch(()=>void 0);return tracked}seal(error){if(this.sealed)return;this.sealed=true;this.admission.reject(error??conversationRuntimeUnavailableError())}async closeOnce(options){this.seal();const drains=[this.startDrain(this.appDrain),this.startDrain(this.hostDrain),this.bootPending?.catch(()=>void 0)].filter(value=>value!==void 0);const listenerClose=this.closeListener(options.timeoutMs??DEFAULT_CLOSE_TIMEOUT_MS);const results=await Promise.allSettled([...drains,listenerClose]);const errors=results.filter(result=>result.status==="rejected").map(result=>result.reason);if(errors.length===1){throw errors[0]}if(errors.length>1){throw new AggregateError(errors,"Serve app shutdown is incomplete.")}}startDrain(drain){if(!drain)return void 0;try{return drain()}catch(error){return Promise.reject(error)}}closeListener(timeoutMs){if(!this.server||this.listenerClosed||!this.listenerReady&&!this.server.listening){return Promise.resolve()}const server=this.server;if(!server.listening){return this.waitForClosingListener(server,timeoutMs)}return new Promise((resolve3,reject)=>{let secondaryTimer;const forceTimer=setTimeout(()=>{server.closeAllConnections();secondaryTimer=setTimeout(()=>{reject(new Error("The serve listener did not confirm shutdown."))},SECONDARY_CLOSE_TIMEOUT_MS);secondaryTimer.unref()},Math.max(0,timeoutMs));forceTimer.unref();server.close(error=>{clearTimeout(forceTimer);if(secondaryTimer)clearTimeout(secondaryTimer);if(error)reject(error);else{this.listenerClosed=true;resolve3()}})})}waitForClosingListener(server,timeoutMs){return new Promise((resolve3,reject)=>{let secondaryTimer;const onClose=__name(()=>{server.off("close",onClose);clearTimeout(forceTimer);if(secondaryTimer)clearTimeout(secondaryTimer);this.listenerClosed=true;resolve3()},"onClose");const forceTimer=setTimeout(()=>{server.closeAllConnections();secondaryTimer=setTimeout(()=>{server.off("close",onClose);reject(new Error("The serve listener did not confirm shutdown."))},SECONDARY_CLOSE_TIMEOUT_MS);secondaryTimer.unref()},Math.max(0,timeoutMs));forceTimer.unref();server.once("close",onClose);if(this.listenerClosed)onClose()})}};function installServeAppLifecycle(app,lifecycle=new ServeAppLifecycleController){const locals=app.locals;if(locals[SERVE_APP_LIFECYCLE]){throw new Error("Serve app lifecycle is already installed.")}locals[SERVE_APP_LIFECYCLE]=lifecycle;return lifecycle}__name(installServeAppLifecycle,"installServeAppLifecycle");init_esbuild_shims();var MAX_BUCKETS=1e4;var GC_REQUEST_INTERVAL=1e3;var GC_TIMER_INTERVAL_MS=5*60*1e3;var WORKSPACE_QUALIFIED_ACP_PATH=/^\/workspaces\/[^/]+\/acp$/i;function resolveTier(method,path2,workspaceQualifiedAcpEnabled){const p=path2.endsWith("/")&&path2.length>1?path2.slice(0,-1):path2;if(method==="OPTIONS")return null;if((method==="GET"||method==="HEAD")&&p==="/health")return null;if(method==="POST"&&p.startsWith("/session/")&&p.endsWith("/heartbeat"))return null;if(method==="GET"&&p.startsWith("/session/")&&p.endsWith("/events"))return null;if(p==="/acp"||p.startsWith("/acp/"))return null;if(workspaceQualifiedAcpEnabled&&WORKSPACE_QUALIFIED_ACP_PATH.test(p))return null;if(method==="POST"&&p.startsWith("/session/")&&p.endsWith("/prompt"))return"prompt";if(method==="POST"&&/^\/sessions\/catalog$/i.test(p))return"read";if(method!=="GET"&&method!=="HEAD")return"mutation";return"read"}__name(resolveTier,"resolveTier");function normalizeIp(raw){if(raw.startsWith("::ffff:")){return raw.slice(7)}return raw}__name(normalizeIp,"normalizeIp");function createKeyExtractor(hostname2){const loopback=isLoopbackBind(hostname2);return req=>{const raw=req.get("x-qwen-client-id");const clientId=raw&&raw.length<=MAX_CLIENT_ID_LENGTH&&CLIENT_ID_RE.test(raw)?raw:void 0;if(loopback){return clientId?`cid:${clientId}`:"anonymous"}const ip=normalizeIp(req.socket?.remoteAddress??"unknown");return clientId?`${ip}:${clientId}`:ip}}__name(createKeyExtractor,"createKeyExtractor");var LOG_SAMPLE_INTERVAL=100;function createSampledLogger(onLog){const state=new Map;return{log(tier,key){const logKey=`${tier}:${key}`;let entry=state.get(logKey);if(!entry){entry={count:0,suppressed:0};state.set(logKey,entry)}entry.count++;if(entry.count===1||entry.count%LOG_SAMPLE_INTERVAL===0){onLog(tier,key,entry.suppressed);entry.suppressed=0}else{entry.suppressed++}},clear(){state.clear()}}}__name(createSampledLogger,"createSampledLogger");function createRateLimiter(config){for(const[tier,cfg]of Object.entries(config.tiers)){if(!Number.isFinite(cfg.max)||cfg.max<=0){throw new Error(`rate limit: ${tier}.max must be a positive number, got ${cfg.max}`)}if(!Number.isFinite(cfg.windowMs)||cfg.windowMs<=0){throw new Error(`rate limit: ${tier}.windowMs must be a positive number, got ${cfg.windowMs}`)}}const buckets=new Map;const keyExtractor=createKeyExtractor(config.hostname);const hitCounts={prompt:0,mutation:0,read:0};const rates={prompt:config.tiers.prompt.max/config.tiers.prompt.windowMs,mutation:config.tiers.mutation.max/config.tiers.mutation.windowMs,read:config.tiers.read.max/config.tiers.read.windowMs};let draining=false;let requestCount=0;const sampledLog=config.onLimitReached?createSampledLogger(config.onLimitReached):void 0;function sweep(){const now=Date.now();for(const[key,tierMap]of buckets){let allStale=true;for(const[tier,bucket]of tierMap){if(now-bucket.lastRefill<config.tiers[tier].windowMs*2){allStale=false;break}}if(allStale){buckets.delete(key)}}}__name(sweep,"sweep");const gcTimer=setInterval(sweep,GC_TIMER_INTERVAL_MS);gcTimer.unref();const middleware=__name((req,res,next)=>{try{if(draining){next();return}const tier=resolveTier(req.method,req.path,config.workspaceQualifiedAcpEnabled===true);if(tier===null){next();return}requestCount++;if(requestCount%GC_REQUEST_INTERVAL===0){sweep()}const key=keyExtractor(req);if(tryConsume(key,tier)){next()}else{const tierConfig=config.tiers[tier];const rate=rates[tier];const bucket=buckets.get(key)?.get(tier);const retryAfterMs=Math.ceil((1-(bucket?.tokens??0))/rate);const retryAfterSec=Math.ceil(retryAfterMs/1e3);res.setHeader("Retry-After",String(retryAfterSec));res.setHeader("X-RateLimit-Limit",String(tierConfig.max));res.setHeader("X-RateLimit-Remaining","0");res.setHeader("X-RateLimit-Reset",String(Math.ceil((Date.now()+retryAfterMs)/1e3)));res.status(429).json({error:"Rate limit exceeded",code:"rate_limit_exceeded",tier,retryAfterMs})}}catch(err){config.onError?.(err,req.path);next()}},"middleware");function tryConsume(key,tier){if(draining)return true;const tierConfig=config.tiers[tier];const rate=rates[tier];const now=Date.now();let tierMap=buckets.get(key);if(!tierMap){if(buckets.size>=MAX_BUCKETS){config.onError?.(new Error(`rate limit bucket overflow: ${buckets.size} keys`),`tryConsume:${tier}`);return true}tierMap=new Map;buckets.set(key,tierMap)}let bucket=tierMap.get(tier);if(!bucket){bucket={tokens:tierConfig.max,lastRefill:now};tierMap.set(tier,bucket)}const elapsed=Math.max(0,now-bucket.lastRefill);bucket.tokens=Math.min(tierConfig.max,bucket.tokens+elapsed*rate);bucket.lastRefill=now;if(bucket.tokens>=1){bucket.tokens-=1;return true}hitCounts[tier]++;if(sampledLog)sampledLog.log(tier,key);return false}__name(tryConsume,"tryConsume");return{middleware,checkRate:tryConsume,reset(){buckets.clear();hitCounts.prompt=0;hitCounts.mutation=0;hitCounts.read=0;requestCount=0;sampledLog?.clear()},setDraining(v){draining=v},dispose(){clearInterval(gcTimer);buckets.clear();sampledLog?.clear()},getHitCounts(){return{...hitCounts}}}}__name(createRateLimiter,"createRateLimiter");var RATE_LIMITER_KEY="_rateLimiter";function setRateLimiter(app,limiter){app.locals[RATE_LIMITER_KEY]=limiter}__name(setRateLimiter,"setRateLimiter");function getRateLimiter(app){return app.locals[RATE_LIMITER_KEY]}__name(getRateLimiter,"getRateLimiter");init_esbuild_shims();function resolveAcpHttpEnabled(env=process.env){return env["QWEN_SERVE_ACP_HTTP"]!=="0"}__name(resolveAcpHttpEnabled,"resolveAcpHttpEnabled");init_esbuild_shims();import*as fs from"node:fs/promises";import{constants as fsConstants}from"node:fs";import*as os from"node:os";import*as path from"node:path";import*as crypto from"node:crypto";import{execFile as execFile3}from"node:child_process";import{promisify as promisify3}from"node:util";var execFileAsync3=promisify3(execFile3);var BRANCH_WORKTREE_JOURNAL_MAX_BYTES=64*1024;var PREPARATION_PHASES=new Set(["planned","worktree-created","marker-created","sidecar-ready","mutation-dispatched","cleanup-intent","worktree-removed","branch-deleted","branch-preserved"]);async function fsyncDirectory(directory){try{const handle=await fs.open(directory,"r");try{await handle.sync()}finally{await handle.close()}}catch(error){if(process.platform!=="win32")throw error}}__name(fsyncDirectory,"fsyncDirectory");async function pathExists(filePath){return await fs.lstat(filePath).then(()=>true).catch(error=>{if(error.code==="ENOENT")return false;throw error})}__name(pathExists,"pathExists");async function writeExclusiveFile(filePath,contents){const handle=await fs.open(filePath,fsConstants.O_WRONLY|fsConstants.O_CREAT|fsConstants.O_EXCL|(fsConstants.O_NOFOLLOW??0),384);let openedStat;let completed=false;try{openedStat=await handle.stat();if(!openedStat.isFile()||openedStat.nlink!==1){throw new Error("Branch worktree journal must be a regular file")}await handle.writeFile(contents,"utf8");await handle.sync();const finalStat=await fs.lstat(filePath);if(!finalStat.isFile()||finalStat.nlink!==1||finalStat.dev!==openedStat.dev||finalStat.ino!==openedStat.ino){throw new Error("Branch worktree journal path changed")}completed=true}finally{await handle.close();if(!completed&&openedStat){await fs.lstat(filePath).then(async pathStat=>{if(pathStat.isFile()&&pathStat.nlink===1&&pathStat.dev===openedStat.dev&&pathStat.ino===openedStat.ino){await fs.unlink(filePath)}}).catch(()=>{})}}}__name(writeExclusiveFile,"writeExclusiveFile");async function readStrictFile(filePath){const pathStat=await fs.lstat(filePath);if(!pathStat.isFile()||pathStat.nlink!==1){throw new Error("Branch worktree journal must be a regular file")}const handle=await fs.open(filePath,fsConstants.O_RDONLY|(fsConstants.O_NOFOLLOW??0));try{const openedStat=await handle.stat();if(!openedStat.isFile()||openedStat.nlink!==1||openedStat.dev!==pathStat.dev||openedStat.ino!==pathStat.ino||openedStat.size>BRANCH_WORKTREE_JOURNAL_MAX_BYTES){throw new Error("Branch worktree journal path changed")}const buffer=Buffer.alloc(BRANCH_WORKTREE_JOURNAL_MAX_BYTES+1);const{bytesRead}=await handle.read(buffer,0,buffer.length,0);if(bytesRead>BRANCH_WORKTREE_JOURNAL_MAX_BYTES){throw new Error("Branch worktree journal is too large")}const contents=buffer.subarray(0,bytesRead).toString("utf8");const finalStat=await fs.lstat(filePath);if(!finalStat.isFile()||finalStat.nlink!==1||finalStat.dev!==openedStat.dev||finalStat.ino!==openedStat.ino){throw new Error("Branch worktree journal path changed")}return contents}finally{await handle.close()}}__name(readStrictFile,"readStrictFile");function getBranchWorktreeJournalPath(sidecarPath,targetSessionId){return path.join(path.dirname(sidecarPath),`.branch-worktree-${targetSessionId}.json`)}__name(getBranchWorktreeJournalPath,"getBranchWorktreeJournalPath");async function createBranchWorktreeJournal(args){const journal={version:1,ownerToken:crypto.randomUUID(),pid:process.pid,hostname:os.hostname(),createdAt:new Date().toISOString(),targetSessionId:args.targetSessionId,slug:args.slug,worktreePath:args.worktreePath,worktreeBranch:args.worktreeBranch,repoTop:args.repoTop,baseCommit:args.baseCommit,sidecarPath:args.sidecarPath,markerCreated:false,sidecarCreated:false,phase:"planned"};await fs.mkdir(path.dirname(args.journalPath),{recursive:true,mode:448});await writeExclusiveFile(args.journalPath,`${JSON.stringify(journal)}
|
|
4
4
|
`);await fsyncDirectory(path.dirname(args.journalPath));return journal}__name(createBranchWorktreeJournal,"createBranchWorktreeJournal");async function updateBranchWorktreeJournal(journalPath,current,phase){const onDisk=JSON.parse(await readStrictFile(journalPath));if(onDisk.version!==1||onDisk.ownerToken!==current.ownerToken||onDisk.pid!==current.pid||onDisk.hostname!==current.hostname||onDisk.createdAt!==current.createdAt||onDisk.targetSessionId!==current.targetSessionId||onDisk.slug!==current.slug||onDisk.worktreePath!==current.worktreePath||onDisk.worktreeBranch!==current.worktreeBranch||onDisk.repoTop!==current.repoTop||onDisk.baseCommit!==current.baseCommit||onDisk.sidecarPath!==current.sidecarPath||onDisk.markerCreated!==current.markerCreated||onDisk.sidecarCreated!==current.sidecarCreated||onDisk.phase!==current.phase){throw new Error("Branch worktree journal ownership changed")}const next={...current,phase,markerCreated:current.markerCreated||phase==="marker-created"||phase==="sidecar-ready"||phase==="mutation-dispatched",sidecarCreated:current.sidecarCreated||phase==="sidecar-ready"||phase==="mutation-dispatched"};const tempPath=`${journalPath}.${process.pid}.${crypto.randomUUID()}.tmp`;await writeExclusiveFile(tempPath,`${JSON.stringify(next)}
|
|
5
5
|
`);try{await fs.rename(tempPath,journalPath);await fsyncDirectory(path.dirname(journalPath))}catch(error){await fs.unlink(tempPath).catch(()=>{});throw error}return next}__name(updateBranchWorktreeJournal,"updateBranchWorktreeJournal");async function clearBranchWorktreeJournalDurable(journalPath){await fs.unlink(journalPath).catch(error=>{if(error.code!=="ENOENT")throw error});await fsyncDirectory(path.dirname(journalPath)).catch(error=>{if(error.code!=="ENOENT")throw error})}__name(clearBranchWorktreeJournalDurable,"clearBranchWorktreeJournalDurable");async function clearTerminalMetadata(journalPath,journal,warn){if(journal.sidecarCreated){await clearWorktreeSessionDurable(journal.sidecarPath)}else if(await pathExists(journal.sidecarPath)){warn?.("branch worktree recovery sidecar ownership is unknown",{targetSessionId:journal.targetSessionId});return}await clearBranchWorktreeJournalDurable(journalPath)}__name(clearTerminalMetadata,"clearTerminalMetadata");var recoveryByChatsDir=new Map;var RECOVERY_REQUEST_AGE_MS=2*6e4;function ownerProcessIsAlive(journal){if(journal.hostname!==os.hostname())return true;try{process.kill(journal.pid,0);return true}catch(error){return error.code!=="ESRCH"}}__name(ownerProcessIsAlive,"ownerProcessIsAlive");function isPreparationJournal(value){if(typeof value!=="object"||value===null)return false;const record=value;return record["version"]===1&&typeof record["ownerToken"]==="string"&&/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(record["ownerToken"])&&typeof record["pid"]==="number"&&Number.isInteger(record["pid"])&&record["pid"]>0&&typeof record["hostname"]==="string"&&typeof record["createdAt"]==="string"&&typeof record["targetSessionId"]==="string"&&/^[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(record["targetSessionId"])&&typeof record["slug"]==="string"&&GitWorktreeService.validateUserWorktreeSlug(record["slug"])===null&&typeof record["worktreePath"]==="string"&&path.isAbsolute(record["worktreePath"])&&typeof record["worktreeBranch"]==="string"&&typeof record["repoTop"]==="string"&&path.isAbsolute(record["repoTop"])&&typeof record["baseCommit"]==="string"&&/^[0-9a-f]{40,64}$/i.test(record["baseCommit"])&&typeof record["sidecarPath"]==="string"&&path.isAbsolute(record["sidecarPath"])&&typeof record["markerCreated"]==="boolean"&&typeof record["sidecarCreated"]==="boolean"&&typeof record["phase"]==="string"&&PREPARATION_PHASES.has(record["phase"])}__name(isPreparationJournal,"isPreparationJournal");function recoverBranchWorktreePreparations(args){const probeSidecar=args.sessionService.getWorktreeSessionPath("00000000-0000-4000-8000-000000000000");const chatsDir=path.dirname(probeSidecar);const current=recoveryByChatsDir.get(chatsDir);if(current)return current;const recovery=(async()=>{const entries=await fs.readdir(chatsDir).catch(()=>[]);if(!entries.some(name=>name.startsWith(".branch-worktree-")))return;const workspaceCwd=await fs.realpath(args.workspaceCwd).catch(()=>null);const discoveredRepoTop=workspaceCwd?await new GitWorktreeService(workspaceCwd).getRepoTopLevel().catch(()=>null):null;const runtimeRepoTop=discoveredRepoTop?await fs.realpath(discoveredRepoTop).catch(()=>null):null;if(runtimeRepoTop===null){args.warn?.("branch worktree recovery workspace is unavailable",{workspace:args.workspaceCwd});return}for(const name of entries){if(!/^\.branch-worktree-[0-9a-f-]{36}\.json$/i.test(name))continue;args.assertGenerationOpen?.();const journalPath=path.join(chatsDir,name);let journal;try{const parsed=JSON.parse(await readStrictFile(journalPath));if(!isPreparationJournal(parsed))throw new Error("invalid shape");journal=parsed}catch(error){args.warn?.("invalid branch worktree recovery journal preserved",{journalPath,error:error instanceof Error?error.message:String(error)});continue}const expectedJournalPath=getBranchWorktreeJournalPath(journal.sidecarPath,journal.targetSessionId);const worktreeService=new GitWorktreeService(runtimeRepoTop);const journalRepoTop=await fs.realpath(journal.repoTop).catch(()=>null);if(expectedJournalPath!==journalPath||journal.sidecarPath!==args.sessionService.getWorktreeSessionPath(journal.targetSessionId)||journalRepoTop!==runtimeRepoTop||path.resolve(journal.repoTop,".qwen","worktrees",journal.slug)!==path.resolve(journal.worktreePath)||journal.worktreeBranch!==worktreeBranchForSlug(journal.slug)){args.warn?.("branch worktree recovery journal identity mismatch",{targetSessionId:journal.targetSessionId});continue}if(await args.sessionService.sessionExistsInAnyState(journal.targetSessionId)){await clearBranchWorktreeJournalDurable(journalPath);continue}if(!journal.sidecarCreated&&await pathExists(journal.sidecarPath)){args.warn?.("branch worktree recovery sidecar ownership is unknown",{targetSessionId:journal.targetSessionId});continue}if(journal.phase==="branch-deleted"||journal.phase==="branch-preserved"){await clearTerminalMetadata(journalPath,journal,args.warn);continue}if(journal.phase==="mutation-dispatched"){args.warn?.("branch worktree outcome remains unknown; resources kept",{targetSessionId:journal.targetSessionId});continue}const createdAt=Date.parse(journal.createdAt);if(!Number.isFinite(createdAt)||Date.now()-createdAt<RECOVERY_REQUEST_AGE_MS||ownerProcessIsAlive(journal)){continue}if(journal.phase==="planned"){if(!await pathExists(journal.worktreePath)){await clearBranchWorktreeJournalDurable(journalPath)}else{args.warn?.("planned branch worktree residue preserved",{targetSessionId:journal.targetSessionId})}continue}if(journal.phase==="worktree-removed"){args.assertGenerationOpen?.();const finalized=await worktreeService.finalizePreparedUserWorktreeBranch(journal.slug,journal.baseCommit);if(!finalized.success){args.warn?.("branch worktree recovery could not finalize branch",{targetSessionId:journal.targetSessionId,error:finalized.error});continue}journal=await updateBranchWorktreeJournal(journalPath,journal,finalized.branchPreserved?"branch-preserved":"branch-deleted");if(finalized.branchPreserved){args.warn?.("branch worktree recovery preserved branch",{targetSessionId:journal.targetSessionId,branch:journal.worktreeBranch})}await clearTerminalMetadata(journalPath,journal,args.warn);continue}let occupied=false;try{occupied=args.isWorktreeOccupied?.(journal.worktreePath)??false}catch(error){args.warn?.("branch worktree live occupancy is unknown",{targetSessionId:journal.targetSessionId,error:error instanceof Error?error.message:String(error)});continue}if(occupied){args.warn?.("branch worktree is still occupied by a live session",{targetSessionId:journal.targetSessionId});continue}if(journal.phase!=="cleanup-intent"){journal=await updateBranchWorktreeJournal(journalPath,journal,"cleanup-intent")}if(await pathExists(journal.worktreePath)){const markerOwner=await readWorktreeSessionMarker(journal.worktreePath);if(journal.markerCreated&&markerOwner!==journal.targetSessionId||markerOwner!==null&&markerOwner!==journal.targetSessionId){args.warn?.("branch worktree recovery marker owner changed",{targetSessionId:journal.targetSessionId});continue}args.assertGenerationOpen?.();const removed=await worktreeService.removePreparedUserWorktree(journal.slug,journal.markerCreated||markerOwner===journal.targetSessionId?journal.targetSessionId:null,journal.baseCommit,async()=>{journal=await updateBranchWorktreeJournal(journalPath,journal,"worktree-removed");args.assertGenerationOpen?.()});if(!removed.success){args.warn?.("branch worktree recovery refused cleanup",{targetSessionId:journal.targetSessionId,error:removed.error});continue}journal=await updateBranchWorktreeJournal(journalPath,journal,removed.branchPreserved?"branch-preserved":"branch-deleted")}else{const registered=await worktreeService.isPreparedUserWorktreeRegistered(journal.slug).catch(()=>void 0);if(registered!==false){args.warn?.("branch worktree registry state remains unknown",{targetSessionId:journal.targetSessionId});continue}journal=await updateBranchWorktreeJournal(journalPath,journal,"worktree-removed");args.assertGenerationOpen?.();const finalized=await worktreeService.finalizePreparedUserWorktreeBranch(journal.slug,journal.baseCommit);if(!finalized.success){args.warn?.("branch worktree recovery could not finalize branch",{targetSessionId:journal.targetSessionId,error:finalized.error});continue}journal=await updateBranchWorktreeJournal(journalPath,journal,finalized.branchPreserved?"branch-preserved":"branch-deleted");if(finalized.branchPreserved){args.warn?.("branch worktree recovery preserved branch",{targetSessionId:journal.targetSessionId,branch:journal.worktreeBranch})}}await clearTerminalMetadata(journalPath,journal,args.warn)}})().finally(()=>{recoveryByChatsDir.delete(chatsDir)});recoveryByChatsDir.set(chatsDir,recovery);return recovery}__name(recoverBranchWorktreePreparations,"recoverBranchWorktreePreparations");async function resolveGitCommonDir(cwd){try{const{stdout}=await execFileAsync3("git",["rev-parse","--git-common-dir"],{cwd,timeout:3e4,maxBuffer:1024*1024,env:gitEnv()});return await fs.realpath(path.resolve(cwd,stdout.trim()))}catch{return null}}__name(resolveGitCommonDir,"resolveGitCommonDir");async function resolveBranchWorktreeBaseCheckout(args){const workspaceCwd=await fs.realpath(args.workspaceCwd).catch(()=>null);const snapshotWorkspace=await fs.realpath(args.snapshot.workspaceCwd).catch(()=>null);const effectiveCwd=await fs.realpath(args.snapshot.effectiveCwd).catch(()=>null);if(workspaceCwd===null||snapshotWorkspace!==workspaceCwd||effectiveCwd===null){return null}const workspaceGit=new GitWorktreeService(workspaceCwd);if(!await workspaceGit.isGitRepository())return null;const repoTop=await workspaceGit.getRepoTopLevel().catch(()=>null);if(repoTop===null)return null;const canonicalRepoTop=await fs.realpath(repoTop).catch(()=>null);if(canonicalRepoTop===null)return null;const effectiveGit=new GitWorktreeService(effectiveCwd);if(!await effectiveGit.isGitRepository())return null;const checkoutTop=await effectiveGit.getRepoTopLevel().catch(()=>null);if(checkoutTop===null)return null;const canonicalCheckoutTop=await fs.realpath(checkoutTop).catch(()=>null);if(canonicalCheckoutTop===null)return null;if(canonicalCheckoutTop!==canonicalRepoTop){const[workspaceCommonDir,checkoutCommonDir]=await Promise.all([resolveGitCommonDir(canonicalRepoTop),resolveGitCommonDir(canonicalCheckoutTop)]);const sidecar=await readWorktreeSession(args.sidecarPath).catch(()=>null);const sidecarPath=sidecar?await fs.realpath(sidecar.worktreePath).catch(()=>null):null;const snapshotPath=args.snapshot.worktree?await fs.realpath(args.snapshot.worktree.path).catch(()=>null):null;const managedRoot=path.join(canonicalRepoTop,".qwen","worktrees");const markerOwner=await readWorktreeSessionMarker(canonicalCheckoutTop);if(workspaceCommonDir===null||checkoutCommonDir!==workspaceCommonDir||sidecar===null||sidecarPath!==canonicalCheckoutTop||snapshotPath!==canonicalCheckoutTop||markerOwner!==args.sessionId||!isWithinRoot(canonicalCheckoutTop,managedRoot)){return null}}else if(!isWithinRoot(effectiveCwd,canonicalRepoTop)){return null}const headCommit=await execFileAsync3("git",[...NO_EXEC_CONFIG,"rev-parse","HEAD"],{cwd:canonicalCheckoutTop,timeout:3e4,env:gitEnv()}).then(({stdout})=>stdout.trim()).catch(()=>void 0);if(!headCommit)return null;const branch=await effectiveGit.getCurrentBranch().catch(()=>"HEAD");return{repoTop:canonicalRepoTop,checkoutCwd:canonicalCheckoutTop,headCommit,branch:branch||"HEAD"}}__name(resolveBranchWorktreeBaseCheckout,"resolveBranchWorktreeBaseCheckout");async function isBranchWorktreeCreationSupported(base){const qwenDir=path.join(base.repoTop,".qwen");try{let writableTarget=base.repoTop;for(const candidate of[qwenDir,path.join(qwenDir,"worktrees")]){const stat=await fs.lstat(candidate).catch(error=>{if(error.code==="ENOENT")return null;throw error});if(stat===null)break;if(!stat.isDirectory())return false;writableTarget=candidate}await fs.access(writableTarget,2);const[,trackedMarker]=await Promise.all([execFileAsync3("git",["worktree","list","--porcelain"],{cwd:base.checkoutCwd,timeout:3e4,maxBuffer:1024*1024,env:gitEnv()}),execFileAsync3("git",["ls-tree","-z","--name-only",base.headCommit,"--",WORKTREE_SESSION_FILE],{cwd:base.checkoutCwd,timeout:3e4,maxBuffer:1024*1024,env:gitEnv()})]);return trackedMarker.stdout.length===0}catch{return false}}__name(isBranchWorktreeCreationSupported,"isBranchWorktreeCreationSupported");init_esbuild_shims();init_esbuild_shims();var ACP_PRE_ATTACH_MAX_FRAMES_PER_STREAM=256;var ACP_PRE_ATTACH_MAX_FRAMES_PER_CONNECTION=1024;var ACP_PRE_ATTACH_MAX_FRAMES_GLOBAL=4096;var ACP_PRE_ATTACH_MAX_PAYLOAD_BYTES_PER_CONNECTION=64*1024*1024;var ACP_PRE_ATTACH_MAX_PAYLOAD_BYTES_GLOBAL=256*1024*1024;var AcpPreAttachBudget=class{constructor(limits={maxFrames:ACP_PRE_ATTACH_MAX_FRAMES_GLOBAL,maxBytes:ACP_PRE_ATTACH_MAX_PAYLOAD_BYTES_GLOBAL}){this.limits=limits}static{__name(this,"AcpPreAttachBudget")}usedFrames=0;usedBytes=0;pendingDeliveryFrames=0;highWaterFrames=0;highWaterBytes=0;guardFailures=0;tryReserve(bytes){if(this.usedFrames>=this.limits.maxFrames||bytes>this.limits.maxBytes-this.usedBytes){this.guardFailures+=1;return void 0}this.usedFrames+=1;this.usedBytes+=bytes;this.highWaterFrames=Math.max(this.highWaterFrames,this.usedFrames);this.highWaterBytes=Math.max(this.highWaterBytes,this.usedBytes);let released=false;let pendingDelivery=false;return{markPendingDelivery:__name(()=>{if(released||pendingDelivery)return;pendingDelivery=true;this.pendingDeliveryFrames+=1},"markPendingDelivery"),release:__name(()=>{if(released)return;released=true;if(pendingDelivery)this.pendingDeliveryFrames-=1;this.usedFrames-=1;this.usedBytes-=bytes},"release")}}recordGuardFailure(){this.guardFailures+=1}snapshot(){return{usedFrames:this.usedFrames,usedBytes:this.usedBytes,pendingDeliveryFrames:this.pendingDeliveryFrames,highWaterFrames:this.highWaterFrames,highWaterBytes:this.highWaterBytes,guardFailures:this.guardFailures}}};init_esbuild_shims();import{getHeapStatistics}from"node:v8";var SOFT_PRESSURE_RATIO=.5;var HARD_PRESSURE_RATIO=.65;var CRITICAL_PRESSURE_RATIO=.8;function classify(ratio){if(ratio>=CRITICAL_PRESSURE_RATIO)return"critical";if(ratio>=HARD_PRESSURE_RATIO)return"hard";if(ratio>=SOFT_PRESSURE_RATIO)return"soft";return"normal"}__name(classify,"classify");function computeDaemonMemoryPressure(input){const heapLimitBytes=usableDenominator(input.heapLimitBytes??getHeapStatistics().heap_size_limit);const availableBytes=usableDenominator(input.availableBytes);const rss=usableNumerator(input.rssBytes);const heapUsed=usableNumerator(input.heapUsedBytes);const rssBytes=rss??0;const heapUsedBytes=heapUsed??0;const rssMeasured=availableBytes>0&&rss!==null;const heapMeasured=heapLimitBytes>0&&heapUsed!==null;const rssRatio=rssMeasured?rssBytes/availableBytes:0;const heapRatio=heapMeasured?heapUsedBytes/heapLimitBytes:0;let source;if(!rssMeasured&&!heapMeasured)source="unknown";else if(!heapMeasured)source="rss";else if(!rssMeasured)source="heap";else source=rssRatio>=heapRatio?"rss":"heap";const ratio=Math.max(rssRatio,heapRatio);return{level:classify(ratio),ratio,source,rssBytes,rssRatio,availableBytes,heapUsedBytes,heapRatio,heapLimitBytes}}__name(computeDaemonMemoryPressure,"computeDaemonMemoryPressure");function usableDenominator(value){return Number.isFinite(value)&&value>0?value:0}__name(usableDenominator,"usableDenominator");function usableNumerator(value){return Number.isFinite(value)&&value>=0?value:null}__name(usableNumerator,"usableNumerator");var DEFAULT_LISTENER_MAX_CONNECTIONS=256;var SECTION_TIMEOUT_MS=1e3;var CAPACITY_WARNING_RATIO=.8;function toDaemonStatusMemoryLimits(budget,childHeap,journalGrowth,admissionEnforced=false){if(!budget)return null;return{enforced:admissionEnforced&&childHeap?.mode==="enforce",journalGrowth:journalGrowth??null,childHeap:childHeap?{mode:childHeap.mode,admissionEnforced,maxConcurrentChildren:childHeap.maxConcurrentChildren,perChildCeilingMb:childHeap.perChildCeilingMb,refusals:childHeap.refusals}:null,configuredBudgetMb:budget.configuredBudgetMb,effectiveBudgetMb:budget.effectiveBudgetMb,budgetSource:budget.budgetSource,availableMemoryMb:budget.availableMemoryMb,availableMemorySource:budget.availableMemorySource,insufficientMemory:budget.insufficientMemory,modeled:{rootReserveMb:budget.rootReserveMb,childPoolMb:budget.childPoolMb,minChildHeapMb:MIN_CHILD_HEAP_MB,maxChildHeapMb:MAX_CHILD_HEAP_MB,legacyChildCeilingMb:budget.legacyChildCeilingMb}}}__name(toDaemonStatusMemoryLimits,"toDaemonStatusMemoryLimits");var SectionTimeoutError=class extends Error{constructor(section,timeoutMs){super(`${section} status timed out after ${timeoutMs}ms`);this.section=section;this.timeoutMs=timeoutMs;this.name="SectionTimeoutError"}static{__name(this,"SectionTimeoutError")}};function parseDaemonStatusDetail(raw){if(raw===void 0)return{ok:true,detail:"summary"};if(raw==="summary"||raw==="full"){return{ok:true,detail:raw}}return{ok:false}}__name(parseDaemonStatusDetail,"parseDaemonStatusDetail");async function buildDaemonStatusResponse(detail,input){const daemonLogStatus=input.daemonLog?.getStatus();const bridgeSnapshot=input.bridge.getDaemonStatusSnapshot();const lastActivity=input.bridge.lastActivityAt??null;const workspaceRuntimes=input.workspaceRegistry?.list();const aggregateRuntimes=input.workspaceRegistry?.listAll?.()??workspaceRuntimes;const workspaceSnapshots=aggregateRuntimes?.map(runtime=>({workspaceCwd:runtime.workspaceCwd,internal:isInternalWorkspaceRuntime(runtime),snapshot:runtime.bridge===input.bridge?bridgeSnapshot:runtime.bridge.getDaemonStatusSnapshot(),lastActivity:runtime.bridge===input.bridge?lastActivity:runtime.bridge.lastActivityAt??null}))??[{workspaceCwd:input.boundWorkspace,snapshot:bridgeSnapshot,lastActivity}];const aggregatedSessionCount=workspaceSnapshots.reduce((sum,item)=>sum+item.snapshot.sessionCount,0);const aggregatedPendingPermissionCount=workspaceSnapshots.reduce((sum,item)=>sum+item.snapshot.pendingPermissionCount,0);const aggregatedChannelLive=workspaceSnapshots.some(item=>item.snapshot.channelLive);const memoryBudget=input.opts.daemonMemoryBudget;let runtimeMemory;if(memoryBudget){const managedRuntimes=input.workspaceRegistry?.listManaged();const liveChildren=__name(runtime=>runtime.bridge.liveChannelCount??(runtime.bridge.isChannelLive()?1:0),"liveChildren");const activeAcpChildCount=managedRuntimes?managedRuntimes.reduce((sum,runtime)=>sum+liveChildren(runtime),0):workspaceSnapshots.filter(item=>item.snapshot.channelLive).length;const registeredWorkspaceCount=input.workspaceRegistry?(input.workspaceRegistry.listAllEntries?.()??input.workspaceRegistry.listEntries()).length:workspaceSnapshots.length;let childRssBytesTotal=0;let childRssSampled=0;let oldestChildReadingAgeMs=null;let heapReported=0;let peakOldGenerationBytes=0;let peakLiveSetBytes=0;let peakTotalHeapBytes=0;let heapMajorGcCount=0;let heapMajorGcMs=0;const heapUnclassified=new Set;for(const runtime of managedRuntimes??[]){const children=liveChildren(runtime);if(children===0)continue;const snapshot=runtime.bridge.getChildResourceSnapshot?.();if(!snapshot)continue;childRssBytesTotal+=snapshot.rssBytes;const sampled=Math.min(children,snapshot.children??1);childRssSampled+=sampled;if(snapshot.ageMs!==void 0){oldestChildReadingAgeMs=Math.max(oldestChildReadingAgeMs??0,snapshot.ageMs)}const heap=snapshot.heap;if(!heap)continue;heapReported+=Math.min(sampled,snapshot.heapReported??1);peakOldGenerationBytes=Math.max(peakOldGenerationBytes,heap.peakOldGenerationBytes);peakLiveSetBytes=Math.max(peakLiveSetBytes,heap.peakLiveSetBytes);peakTotalHeapBytes=Math.max(peakTotalHeapBytes,heap.peakTotalHeapBytes);heapMajorGcCount=Math.max(heapMajorGcCount,heap.majorGcCount);heapMajorGcMs=Math.max(heapMajorGcMs,heap.majorGcMs);for(const name of heap.unclassifiedSpaceNames){heapUnclassified.add(name)}}const pressureMode=input.opts.memoryPressureMode??"observe";const pressureMemory=process.memoryUsage();runtimeMemory={registeredWorkspaces:registeredWorkspaceCount,activeAcpChildren:activeAcpChildCount,committedAcpChildren:input.getCommittedAcpChildCount?.()??null,childRssCoverage:"active_children",children:{rssBytes:childRssBytesTotal,sampled:childRssSampled,oldestReadingAgeMs:oldestChildReadingAgeMs,heap:heapReported>0?{peakOldGenerationBytes,peakLiveSetBytes,peakTotalHeapBytes,majorGcCount:heapMajorGcCount,majorGcMs:heapMajorGcMs,unclassifiedSpaceNames:[...heapUnclassified],reported:heapReported}:null},modeled:{recommendedShareAtRegisteredMb:registeredWorkspaceCount>0?recommendedChildShareMb(memoryBudget,registeredWorkspaceCount):null,recommendedShareAtActiveMb:activeAcpChildCount>0?recommendedChildShareMb(memoryBudget,activeAcpChildCount):null},pressure:{...computeDaemonMemoryPressure({rssBytes:pressureMemory.rss,heapUsedBytes:pressureMemory.heapUsed,availableBytes:memoryBudget.availableMemoryMb*1024*1024}),mode:pressureMode}}}const aggregatedLastActivity=workspaceSnapshots.reduce((latest,item)=>item.lastActivity!==null&&(latest===null||item.lastActivity>latest)?item.lastActivity:latest,null);const acpSnapshot=input.acpHandle?.registry.getSnapshot();const acpAggregate=input.acpHandle?.getSnapshot();const rateLimitHits=input.rateLimiter?.getHitCounts()??zeroRateHits();let pendingPrompts=0;let derivedQueuedPrompts=0;const derivedQueuedPromptsByWorkspace=[];for(const[index,{snapshot}]of workspaceSnapshots.entries()){let derivedQueuedPromptsForWorkspace=0;for(const session of snapshot.sessions){pendingPrompts+=session.pendingPromptCount;const sessionQueuedPrompts=Math.max(0,session.pendingPromptCount-(session.hasActivePrompt?1:0));derivedQueuedPrompts+=sessionQueuedPrompts;derivedQueuedPromptsForWorkspace+=sessionQueuedPrompts}derivedQueuedPromptsByWorkspace[index]=derivedQueuedPromptsForWorkspace}const queuedPrompts=aggregateRuntimes?.reduce((sum,runtime,index)=>sum+(runtime.bridge.pendingPromptTotal??derivedQueuedPromptsByWorkspace[index]??0),0)??input.bridge.pendingPromptTotal??derivedQueuedPrompts;const channelWorker=input.getChannelWorkerSnapshot?.()??{enabled:false,state:"disabled",channels:[]};const channelWorkers=(workspaceRuntimes?.length??1)>1?input.getChannelWorkerSnapshots?.():void 0;const totalAdmissionSnapshot=input.getTotalSessionAdmissionSnapshot?.();const issues=[];let full;pushRuntimeIssues(issues,acpSnapshot,acpAggregate,rateLimitHits,input,channelWorker,channelWorkers,totalAdmissionSnapshot,workspaceSnapshots);if(runtimeMemory&&runtimeMemory.pressure.mode==="observe"&&runtimeMemory.pressure.level!=="normal"){const{level,ratio,source}=runtimeMemory.pressure;issues.push({code:"daemon_memory_pressure",severity:"warning",message:`Daemon memory pressure is ${level} at ${(ratio*100).toFixed(1)}% of ${source==="heap"?"the V8 heap limit":"available memory"}.`})}if(daemonLogStatus?.health==="degraded"){issues.push({code:"daemon_log_degraded",severity:"warning",message:"Daemon file logging is degraded; inspect full status for details."})}if(detail==="full"){full=await buildFullStatus(input,acpAggregate,workspaceSnapshots.filter(item=>item.internal!==true).flatMap(item=>item.snapshot.sessions));pushFullIssues(issues,full)}return{v:1,detail,generatedAt:new Date().toISOString(),status:rollupStatus(issues),issues,daemon:{pid:process.pid,uptimeMs:Math.round(process.uptime()*1e3),mode:input.opts.mode,workspaceCwd:input.boundWorkspace,...input.startup?{startup:cloneStartup(input.startup)}:{},...input.qwenCodeVersion?{qwenCodeVersion:input.qwenCodeVersion}:{},...input.daemonLog?.getDaemonId()?{daemonId:input.daemonLog.getDaemonId()}:{},...daemonLogStatus?{runId:daemonLogStatus.runId,logMode:daemonLogStatus.mode,logHealth:daemonLogStatus.health}:{},...detail==="full"&&input.daemonLog?.getLogPath()?{logPath:input.daemonLog.getLogPath()}:{},...detail==="full"&&daemonLogStatus?{logIssues:daemonLogStatus.issues,logDroppedRecords:daemonLogStatus.droppedRecords,logDroppedBytes:daemonLogStatus.droppedBytes}:{}},security:{tokenConfigured:Boolean(input.opts.token),requireAuth:input.opts.requireAuth===true,loopbackBind:isLoopbackBind(input.opts.hostname),allowOriginConfigured:input.opts.allowOrigins!==void 0&&input.opts.allowOrigins.length>0,allowOriginMode:allowOriginMode(input.opts.allowOrigins),sessionShellCommandEnabled:input.sessionShellCommandEnabled},limits:{maxRegisteredWorkspaces:input.opts.maxRegisteredWorkspaces??MAX_REGISTERED_WORKSPACES,...input.maxChannelControlWorkspaces!==void 0?{maxChannelControlWorkspaces:input.maxChannelControlWorkspaces}:{},maxSessions:bridgeSnapshot.limits.maxSessions,maxTotalSessions:positiveFiniteOrNull(input.opts.maxTotalSessions),maxPendingPromptsPerSession:bridgeSnapshot.limits.maxPendingPromptsPerSession,listenerMaxConnections:listenerMaxConnections(input.opts.maxConnections),eventRingSize:bridgeSnapshot.limits.eventRingSize,compactedReplayMaxBytes:bridgeSnapshot.limits.compactedReplayMaxBytes,maxJournalEvents:bridgeSnapshot.limits.maxJournalEvents,maxJournalBytes:bridgeSnapshot.limits.maxJournalBytes,promptDeadlineMs:positiveFiniteOrNull(input.opts.promptDeadlineMs),writerIdleTimeoutMs:positiveFiniteOrNull(input.opts.writerIdleTimeoutMs),channelIdleTimeoutMs:bridgeSnapshot.limits.channelIdleTimeoutMs,sessionIdleTimeoutMs:bridgeSnapshot.limits.sessionIdleTimeoutMs,sessionPromptSettledCloseGraceMs:bridgeSnapshot.limits.sessionPromptSettledCloseGraceMs,acpConnectionCap:acpSnapshot?.connectionCap??null,acpPreAttachMaxFramesPerStream:acpSnapshot!==void 0?ACP_PRE_ATTACH_MAX_FRAMES_PER_STREAM:null,acpPreAttachMaxFramesPerConnection:acpSnapshot!==void 0?ACP_PRE_ATTACH_MAX_FRAMES_PER_CONNECTION:null,acpPreAttachMaxFramesGlobal:acpSnapshot!==void 0?ACP_PRE_ATTACH_MAX_FRAMES_GLOBAL:null,acpPreAttachMaxPayloadBytesPerConnection:acpSnapshot!==void 0?ACP_PRE_ATTACH_MAX_PAYLOAD_BYTES_PER_CONNECTION:null,acpPreAttachMaxPayloadBytesGlobal:acpSnapshot!==void 0?ACP_PRE_ATTACH_MAX_PAYLOAD_BYTES_GLOBAL:null,memory:toDaemonStatusMemoryLimits(memoryBudget,input.getChildHeapPolicySnapshot?.(),bridgeSnapshot.limits.journalGrowth?{...bridgeSnapshot.limits.journalGrowth,baselineMaxEvents:bridgeSnapshot.limits.maxJournalEvents,baselineMaxBytes:bridgeSnapshot.limits.maxJournalBytes}:null,input.childAdmissionEnforced)},...workspaceRuntimes&&workspaceRuntimes.length>1?{workspaces:workspaceRuntimes.map(runtime=>({id:runtime.workspaceId,cwd:runtime.workspaceCwd,...runtime.displayName!==void 0?{displayName:runtime.displayName}:{},primary:runtime.primary,trusted:runtime.trusted}))}:{},capabilities:{protocolVersions:input.protocolVersions,features:[...input.features]},runtime:{sessions:{active:aggregatedSessionCount,...totalAdmissionSnapshot?{admissionInFlight:totalAdmissionSnapshot.inFlight}:{}},permissions:{pending:aggregatedPendingPermissionCount,policy:bridgeSnapshot.permissionPolicy},channel:{live:aggregatedChannelLive},channelWorker,...channelWorkers&&channelWorkers.length>0?{channelWorkers}:{},transport:{restSseActive:input.getRestSseActive(),acp:{enabled:acpSnapshot!==void 0,connections:acpAggregate?.connectionCount??0,connectionStreams:acpAggregate?.connectionStreams??0,sessionStreams:acpAggregate?.sessionStreams??0,sseStreams:acpAggregate?.sseStreams??0,wsStreams:acpAggregate?.wsStreams??0,pendingClientRequests:acpAggregate?.pendingClientRequests??0,preAttach:{bufferedConnectionFrames:acpAggregate?.bufferedConnectionFrames??0,bufferedSessionFrames:acpAggregate?.bufferedSessionFrames??0,pendingDeliveryFrames:acpAggregate?.pendingDeliveryFrames??0,usedFrames:acpAggregate?.preAttach.usedFrames??0,usedBytes:acpAggregate?.preAttach.usedBytes??0,highWaterFrames:acpAggregate?.preAttach.highWaterFrames??0,highWaterBytes:acpAggregate?.preAttach.highWaterBytes??0,guardFailures:acpAggregate?.preAttach.guardFailures??0}}},rateLimit:{enabled:input.opts.rateLimit===true,rejectedSinceStart:rateLimitHits},...input.getPerfSnapshot?{perf:input.getPerfSnapshot()}:{},...input.getMetricsSeries?{metrics:{series:input.getMetricsSeries()}}:{},activity:{activePrompts:aggregateRuntimes?.reduce((sum,runtime)=>sum+(runtime.bridge.activePromptCount??0),0)??input.bridge.activePromptCount??0,pendingPrompts,queuedPrompts,lastActivityAt:aggregatedLastActivity!==null?new Date(aggregatedLastActivity).toISOString():null,idleSinceMs:aggregatedLastActivity!==null?Date.now()-aggregatedLastActivity:null},...runtimeMemory?{memory:runtimeMemory}:{},process:process.memoryUsage()},...full?{full}:{}}}__name(buildDaemonStatusResponse,"buildDaemonStatusResponse");function cloneStartup(startup){return{processStartedAt:startup.processStartedAt,...startup.listenerReadyAt?{listenerReadyAt:startup.listenerReadyAt}:{},...startup.processToListenMs!==void 0?{processToListenMs:startup.processToListenMs}:{},...startup.runQwenServeToListenMs!==void 0?{runQwenServeToListenMs:startup.runQwenServeToListenMs}:{},preheat:{status:startup.preheat.status,...startup.preheat.durationMs!==void 0?{durationMs:startup.preheat.durationMs}:{},...startup.preheat.error?{error:startup.preheat.error}:{}}}}__name(cloneStartup,"cloneStartup");async function buildFullStatus(input,acpSnapshot,sessions){const ctx={route:"GET /daemon/status",workspaceCwd:input.boundWorkspace};const[mcp,skills,tools,providers,env,preflight,hooks,extensions]=await Promise.all([collectSection("workspace.mcp",()=>input.workspace.getWorkspaceMcpStatus(ctx)),collectSection("workspace.skills",()=>input.workspace.getWorkspaceSkillsStatus(ctx)),collectSection("workspace.tools",()=>input.bridge.getWorkspaceToolsStatus()),collectSection("workspace.providers",()=>input.workspace.getWorkspaceProvidersStatus(ctx)),collectSection("workspace.env",()=>input.workspace.getWorkspaceEnvStatus(ctx)),collectSection("workspace.preflight",()=>input.workspace.getWorkspacePreflightStatus(ctx)),collectSection("workspace.hooks",()=>input.workspace.getWorkspaceHooksStatus(ctx)),collectSection("workspace.extensions",()=>input.workspace.getWorkspaceExtensionsStatus(ctx))]);return{sessions,acpMounts:acpSnapshot?.mounts??[],acpConnections:acpSnapshot?.connections??[],workspace:{mcp,skills,tools,providers,env,preflight,hooks,extensions},auth:{supportedDeviceFlowProviders:[...input.supportedDeviceFlowProviders],pendingDeviceFlowCount:input.deviceFlowRegistry.listPending().length}}}__name(buildFullStatus,"buildFullStatus");async function collectSection(name,read){const startMs=Date.now();try{const data=await withTimeout(read(),name,SECTION_TIMEOUT_MS);return{status:inferSectionStatus(data),durationMs:Date.now()-startMs,summary:summarizeStatusData(data),data}}catch(err){return{status:"unavailable",durationMs:Date.now()-startMs,error:{kind:err instanceof SectionTimeoutError?"timeout":"error",message:err instanceof Error?err.message:String(err)}}}}__name(collectSection,"collectSection");async function withTimeout(promise,section,timeoutMs){let timer;try{return await Promise.race([promise,new Promise((_resolve,reject)=>{timer=setTimeout(()=>reject(new SectionTimeoutError(section,timeoutMs)),timeoutMs)})])}finally{if(timer)clearTimeout(timer)}}__name(withTimeout,"withTimeout");function pushRuntimeIssues(issues,acpSnapshot,acpAggregate,rateLimitHits,input,channelWorker,channelWorkers,totalAdmissionSnapshot,workspaceSnapshots){for(const{workspaceCwd,internal,snapshot}of workspaceSnapshots){if(snapshot.limits.maxSessions!==null&&snapshot.limits.maxSessions>0&&snapshot.sessionCount/snapshot.limits.maxSessions>=CAPACITY_WARNING_RATIO){issues.push({code:"session_capacity_high",severity:"warning",message:workspaceSnapshots.length>1?internal?`An internal runtime's active sessions are at ${snapshot.sessionCount}/${snapshot.limits.maxSessions}.`:`Workspace ${workspaceCwd} active sessions are at ${snapshot.sessionCount}/${snapshot.limits.maxSessions}.`:`Active sessions are at ${snapshot.sessionCount}/${snapshot.limits.maxSessions}.`})}}const maxTotalSessions=positiveFiniteOrNull(input.opts.maxTotalSessions);if(maxTotalSessions!==null){const fallbackLiveCount=workspaceSnapshots.reduce((sum,item)=>sum+item.snapshot.sessionCount,0);const totalActive=(totalAdmissionSnapshot?.liveCount??fallbackLiveCount)+(totalAdmissionSnapshot?.inFlight??0);if(totalActive/maxTotalSessions>=CAPACITY_WARNING_RATIO){issues.push({code:"total_session_capacity_high",severity:"warning",message:`Total active and in-flight sessions are at ${totalActive}/${maxTotalSessions}.`})}}if(acpSnapshot!==void 0&&acpSnapshot.connectionCap!==null&&acpSnapshot.connectionCap>0){const cap=acpSnapshot.connectionCap;const busiest=(acpAggregate?.mounts??[]).reduce((max,m)=>Math.max(max,m.connectionCount),acpSnapshot.connectionCount);if(busiest/cap>=CAPACITY_WARNING_RATIO){issues.push({code:"connection_capacity_high",severity:"warning",message:`ACP connections are at ${busiest}/${cap} on the busiest workspace mount.`})}}const pendingPermissionCount=workspaceSnapshots.reduce((sum,item)=>sum+item.snapshot.pendingPermissionCount,0);if(pendingPermissionCount>0){issues.push({code:"pending_permissions",severity:"warning",message:`${pendingPermissionCount} permission request(s) are pending.`})}const downWorkspaces=workspaceSnapshots.filter(item=>item.snapshot.sessionCount>0&&!item.snapshot.channelLive);if(downWorkspaces.length>0){issues.push({code:"acp_channel_down",severity:"error",message:downWorkspaces.length===1?downWorkspaces[0].internal?"Active sessions exist but the ACP channel is not live for an internal runtime.":`Active sessions exist but the ACP channel is not live for ${downWorkspaces[0].workspaceCwd}.`:`Active sessions exist but the ACP channel is not live for ${downWorkspaces.length} workspace(s).`})}if(input.opts.rateLimit===true&&sumRateHits(rateLimitHits)>0){issues.push({code:"rate_limit_hits",severity:"warning",message:`${sumRateHits(rateLimitHits)} request(s) have been rejected by rate limiting since start.`})}const groupedWorkers=channelWorkers&&channelWorkers.length>0?channelWorkers:void 0;const workers=groupedWorkers??[channelWorker];for(const worker of workers){pushChannelWorkerIssues(issues,worker,groupedWorkers!==void 0)}pushChannelRestoreIssues(issues,input.getChannelRestoreFailures?.()??[])}__name(pushRuntimeIssues,"pushRuntimeIssues");function pushChannelRestoreIssues(issues,failures){const byWorkspace=new Map;for(const failure of failures){const list=byWorkspace.get(failure.workspaceCwd)??[];list.push(failure);byWorkspace.set(failure.workspaceCwd,list)}for(const[workspaceCwd,list]of byWorkspace){const shown=list.slice(0,MAX_CHANNEL_STARTUP_FAILURES);const omitted=list.length-shown.length;issues.push({code:"channel_restore_failed",severity:"warning",message:`serve.channels for workspace ${workspaceCwd} were not restored: ${shown.map(failure=>`${failure.channel.slice(0,MAX_CHANNEL_STARTUP_FAILURE_CHANNEL_LENGTH)} (${failure.message})`).join("; ")}${omitted>0?`; and ${omitted} more`:""}.`})}}__name(pushChannelRestoreIssues,"pushChannelRestoreIssues");function pushChannelWorkerIssues(issues,channelWorker,grouped){const workspace="workspaceCwd"in channelWorker?` for workspace ${channelWorker.workspaceCwd}`:"";const section=grouped?"runtime.channelWorkers":"runtime.channelWorker";if(channelWorker.enabled&&(channelWorker.state==="exited"||channelWorker.state==="failed")){const detailParts=[channelWorker.pid!==void 0?`pid=${channelWorker.pid}`:void 0,channelWorker.exitCode!==void 0?`code=${channelWorker.exitCode??"null"}`:void 0,channelWorker.signal?`signal=${channelWorker.signal}`:void 0,channelWorker.restartCount!==void 0?`restarts=${channelWorker.restartCount}`:void 0,channelWorker.lastExitAt?`lastExitAt=${channelWorker.lastExitAt}`:void 0,channelWorker.lastRestartAt?`lastRestartAt=${channelWorker.lastRestartAt}`:void 0,channelWorker.nextRestartAt?`nextRestartAt=${channelWorker.nextRestartAt}`:void 0,channelWorker.lastHeartbeatAt?`lastHeartbeatAt=${channelWorker.lastHeartbeatAt}`:void 0,channelWorker.staleHeartbeatAt?`staleHeartbeatAt=${channelWorker.staleHeartbeatAt}`:void 0].filter(Boolean);const details=detailParts.length>0?` (${detailParts.join(", ")})`:"";const error=channelWorker.error?`: ${channelWorker.error}`:"";const isPermanentFailure=channelWorker.state==="failed"&&!channelWorker.nextRestartAt;issues.push({code:"channel_worker_exited",severity:isPermanentFailure?"error":"warning",message:`Channel worker${workspace} is ${channelWorker.state}${details}${error}.`,section})}if(channelWorker.enabled&&channelWorker.state==="running"&&channelWorker.requestedChannels!==void 0){const connected=new Set(channelWorker.channels);const failed=channelWorker.requestedChannels.filter(channel=>!connected.has(channel));if(failed.length>0){issues.push({code:"channel_worker_partial_connect",severity:"warning",message:`Channel worker${workspace} connected ${channelWorker.channels.length}/${channelWorker.requestedChannels.length} channel(s). Failed: ${failed.join(", ")}.`,section})}}}__name(pushChannelWorkerIssues,"pushChannelWorkerIssues");function pushFullIssues(issues,full){for(const[name,section]of Object.entries(full.workspace)){if(section.status==="unavailable"){issues.push({code:"workspace_status_unavailable",severity:"warning",section:name,message:`${name} status is unavailable.`})}}const preflight=full.workspace["preflight"];if(preflight&§ionHasStatus(preflight,"error")){issues.push({code:"preflight_error",severity:"error",section:"preflight",message:"Workspace preflight reports an error."})}const mcp=full.workspace["mcp"];const mcpBudget=mcp?inspectMcpBudget(mcp):void 0;if(mcpBudget==="exhausted"){issues.push({code:"mcp_budget_exhausted",severity:"error",section:"mcp",message:"MCP client budget is exhausted."})}else if(mcpBudget==="warning"){issues.push({code:"mcp_budget_warning",severity:"warning",section:"mcp",message:"MCP client budget is near capacity."})}}__name(pushFullIssues,"pushFullIssues");function inferSectionStatus(data){const statuses=collectStatuses(data);if(statuses.includes("error"))return"error";if(statuses.includes("warning"))return"warning";return"ok"}__name(inferSectionStatus,"inferSectionStatus");function summarizeStatusData(data){const summary={};if(!isRecord(data))return summary;copyBoolean(data,summary,"initialized");copyBoolean(data,summary,"acpChannelLive");copyString(data,summary,"discoveryState");copyString(data,summary,"budgetMode");copyNumber(data,summary,"clientCount");copyNumber(data,summary,"clientBudget");for(const key of["cells","errors","servers","budgets","skills","tools","providers","hooks","extensions"]){const value=data[key];if(Array.isArray(value)){summary[`${key}Count`]=value.length}}summarizeMcpServers(data,summary);return summary}__name(summarizeStatusData,"summarizeStatusData");function summarizeMcpServers(data,summary){const servers=data["servers"];if(!Array.isArray(servers))return;let connected=0;let errored=0;let disabled=0;for(const server of servers){if(!isRecord(server))continue;if(server["disabled"]===true){disabled++}else if(server["status"]==="error"){errored++}else if(server["mcpStatus"]==="connected"){connected++}}summary["serversConnected"]=connected;summary["serversErrored"]=errored;summary["serversDisabled"]=disabled}__name(summarizeMcpServers,"summarizeMcpServers");function collectStatuses(data){const statuses=[];visitStatusContainers(data,record=>{const status=record["status"];if(typeof status==="string")statuses.push(status)});return statuses}__name(collectStatuses,"collectStatuses");function sectionHasStatus(section,status){return collectStatuses(section.data).includes(status)}__name(sectionHasStatus,"sectionHasStatus");function inspectMcpBudget(section){const data=section.data;if(!isRecord(data))return void 0;const budgetIssue=inspectBudgetContainers(data);if(budgetIssue)return budgetIssue;const clientCount=numberValue(data["clientCount"]);const clientBudget=numberValue(data["clientBudget"]);if(clientCount!==void 0&&clientBudget!==void 0&&clientBudget>0){const ratio=clientCount/clientBudget;if(ratio>=1)return"exhausted";if(ratio>=.75)return"warning"}return void 0}__name(inspectMcpBudget,"inspectMcpBudget");function inspectBudgetContainers(data){let result;visitStatusContainers(data,record=>{if(result==="exhausted")return;const errorKind=record["errorKind"];const disabledReason=record["disabledReason"];const status=record["status"];const kind=record["kind"];const refusedCount=numberValue(record["refusedCount"]);if(errorKind==="budget_exhausted"||disabledReason==="budget"||kind==="mcp_budget"&&status==="error"||refusedCount!==void 0&&refusedCount>0){result="exhausted";return}if(kind==="mcp_budget"&&status==="warning"){result="warning"}});return result}__name(inspectBudgetContainers,"inspectBudgetContainers");function visitStatusContainers(data,visit){if(!isRecord(data))return;visit(data);for(const key of["cells","errors","servers","budgets","skills","tools","providers","hooks","extensions"]){const value=data[key];if(!Array.isArray(value))continue;for(const item of value)visitStatusContainers(item,visit)}}__name(visitStatusContainers,"visitStatusContainers");function rollupStatus(issues){if(issues.some(issue=>issue.severity==="error"))return"error";if(issues.length>0)return"warning";return"ok"}__name(rollupStatus,"rollupStatus");function allowOriginMode(allowOrigins){if(!allowOrigins||allowOrigins.length===0)return"none";return allowOrigins.includes("*")?"any":"specific"}__name(allowOriginMode,"allowOriginMode");function listenerMaxConnections(value){if(value===void 0)return DEFAULT_LISTENER_MAX_CONNECTIONS;if(value===0||value===Infinity)return null;return Number.isFinite(value)&&value>0?value:null}__name(listenerMaxConnections,"listenerMaxConnections");function positiveFiniteOrNull(value){return value!==void 0&&Number.isFinite(value)&&value>0?value:null}__name(positiveFiniteOrNull,"positiveFiniteOrNull");function zeroRateHits(){return{prompt:0,mutation:0,read:0}}__name(zeroRateHits,"zeroRateHits");function sumRateHits(hits){return hits.prompt+hits.mutation+hits.read}__name(sumRateHits,"sumRateHits");function isRecord(value){return typeof value==="object"&&value!==null&&!Array.isArray(value)}__name(isRecord,"isRecord");function numberValue(value){return typeof value==="number"&&Number.isFinite(value)?value:void 0}__name(numberValue,"numberValue");function copyBoolean(from,to,key){const value=from[key];if(typeof value==="boolean")to[key]=value}__name(copyBoolean,"copyBoolean");function copyString(from,to,key){const value=from[key];if(typeof value==="string")to[key]=value}__name(copyString,"copyString");function copyNumber(from,to,key){const value=numberValue(from[key]);if(value!==void 0)to[key]=value}__name(copyNumber,"copyNumber");init_esbuild_shims();var QWEN_CDP_MCP_COMMAND_ENV="QWEN_CDP_MCP_COMMAND";function resolveCdpMcpCommand(env){const command=env[QWEN_CDP_MCP_COMMAND_ENV]?.trim();return command?command:void 0}__name(resolveCdpMcpCommand,"resolveCdpMcpCommand");function isBrowserAutomationMcpAvailable(opts,env){return opts.cdpTunnelOverWs===true&&!opts.token&&resolveAcpHttpEnabled(env)&&resolveCdpMcpCommand(env)!==void 0}__name(isBrowserAutomationMcpAvailable,"isBrowserAutomationMcpAvailable");init_esbuild_shims();var MAX_CONCURRENT_VOICE_SESSIONS=8;var DISPOSE_WAIT_MS=5e3;var VoiceLeaseAbortError=class extends Error{constructor(kind,message){super(message);this.kind=kind;this.name="VoiceLeaseAbortError"}static{__name(this,"VoiceLeaseAbortError")}};var Lease=class{constructor(onRelease){this.onRelease=onRelease}static{__name(this,"Lease")}controller=new AbortController;signal=this.controller.signal;released=false;release(){if(this.released)return;this.released=true;this.onRelease(this)}abort(reason){if(!this.signal.aborted)this.controller.abort(reason)}};var WorkspaceVoiceCoordinator=class{static{__name(this,"WorkspaceVoiceCoordinator")}states=new Map;disposed=new WeakSet;active=0;acquire(runtime){if(this.disposed.has(runtime)){return{kind:"rejected",reason:"draining"}}const state=this.stateFor(runtime);if(state.draining)return{kind:"rejected",reason:"draining"};if(this.active>=MAX_CONCURRENT_VOICE_SESSIONS){return{kind:"rejected",reason:"capacity"}}const lease=new Lease(current=>this.release(runtime,current));state.leases.add(lease);this.active++;return{kind:"admitted",lease}}beginWorkspaceDrain(runtime){this.stateFor(runtime).draining=true}cancelWorkspaceDrain(runtime){const state=this.states.get(runtime);if(!state||state.completed)return;state.draining=false;if(state.leases.size===0)this.states.delete(runtime)}completeWorkspaceDrain(runtime){this.disposed.add(runtime);const state=this.states.get(runtime);if(!state)return;state.draining=true;state.completed=true;const abortReason=new VoiceLeaseAbortError("workspace_removed","Workspace drain completed");for(const lease of state.leases)lease.abort(abortReason);this.deleteIfIdle(runtime,state)}getWorkspaceActivity(runtime){return this.states.get(runtime)?.leases.size??0}async disposeRuntime(runtime,reason){this.disposed.add(runtime);const state=this.states.get(runtime);if(!state)return;state.draining=true;state.completed=true;const abortReason=new VoiceLeaseAbortError(reason,reason==="daemon_shutdown"?"Daemon is shutting down":reason==="workspace_removed"?"Workspace runtime was removed":"Workspace trust was reconfigured");for(const lease of state.leases)lease.abort(abortReason);if(state.leases.size===0){this.deleteIfIdle(runtime,state);return}let resolveIdle;const idle=new Promise(resolve3=>{resolveIdle=resolve3;state.idleWaiters.add(resolve3)});let timeout;let timedOut=false;try{await Promise.race([idle,new Promise(resolve3=>{timeout=setTimeout(()=>{timedOut=true;resolve3()},DISPOSE_WAIT_MS);timeout.unref?.()})])}finally{if(timeout)clearTimeout(timeout);if(resolveIdle)state.idleWaiters.delete(resolveIdle)}if(timedOut&&state.leases.size>0){process.stderr.write(`qwen serve: Voice runtime disposal timed out with ${state.leases.size} active lease(s).
|
|
6
6
|
`)}}stateFor(runtime){let state=this.states.get(runtime);if(!state){state={draining:false,completed:false,leases:new Set,idleWaiters:new Set};this.states.set(runtime,state)}return state}release(runtime,lease){const state=this.states.get(runtime);if(!state||!state.leases.delete(lease))return;this.active--;if(state.leases.size===0){for(const resolve3 of state.idleWaiters)resolve3();state.idleWaiters.clear()}this.deleteIfIdle(runtime,state)}deleteIfIdle(runtime,state){if(state.completed&&state.leases.size===0)this.states.delete(runtime)}};init_esbuild_shims();import{networkInterfaces}from"node:os";function isLanIpv4(address){const octets=address.split(".").map(part=>Number(part));if(octets.length!==4||octets.some(o=>!Number.isInteger(o))){return false}const[a,b]=octets;if(a===10)return true;if(a===172&&b>=16&&b<=31)return true;if(a===192&&b===168)return true;if(a===169&&b===254)return true;return false}__name(isLanIpv4,"isLanIpv4");function isSoftwareNetwork(interfaceName){if(/vpn/i.test(interfaceName))return true;return/(^|[\s_.-])(utun|tun|tap|ppp|ipsec|wg|wireguard|tailscale|zerotier|zt[a-z0-9]*|hamachi|nordlynx|proton|wintun|docker|veth[0-9a-f]+|vmnet|vboxnet|vethernet|virtualbox|host[- ]only|podman|cni|lxcbr|lxdbr|flannel|virbr|br-[0-9a-f]+|bridge\d|anyconnect|globalprotect|pulse[\s-]secure|forticlient|fortinet|ivanti|cisco[\s_-]secure|citrix|sonicwall|cloudflare)(\d|[\s_.-]|$)/i.test(interfaceName)}__name(isSoftwareNetwork,"isSoftwareNetwork");function listLanCandidates(interfaces=networkInterfaces()){const candidates=[];for(const[interfaceName,addresses]of Object.entries(interfaces).sort()){if(isSoftwareNetwork(interfaceName))continue;for(const address of addresses??[]){if(address.family!=="IPv4"||address.internal)continue;if(!isLanIpv4(address.address))continue;candidates.push({interfaceName,address:address.address})}}return candidates}__name(listLanCandidates,"listLanCandidates");var NoLanInterfaceError=class extends Error{static{__name(this,"NoLanInterfaceError")}code="no_lan_interface";constructor(){super("No private IPv4 address is available. Local Control needs the host to be on a local network (Wi-Fi or Ethernet).");this.name="NoLanInterfaceError"}};var AmbiguousLanInterfaceError=class extends Error{static{__name(this,"AmbiguousLanInterfaceError")}code="ambiguous_lan_interface";candidates;constructor(candidates){super("Multiple local networks are available; choose which one to expose: "+candidates.map(c=>`${c.interfaceName} (${c.address})`).join(", "));this.name="AmbiguousLanInterfaceError";this.candidates=candidates}};var UnknownLanInterfaceError=class extends Error{static{__name(this,"UnknownLanInterfaceError")}code="unknown_lan_interface";constructor(requested){super(`${requested} is not a private IPv4 address on this host right now. The network may have changed since the list was fetched.`);this.name="UnknownLanInterfaceError"}};function selectLanAddress(preferredAddress,interfaces=networkInterfaces()){const candidates=listLanCandidates(interfaces);if(candidates.length===0)throw new NoLanInterfaceError;if(preferredAddress!==void 0){const match=candidates.find(c=>c.address===preferredAddress);if(!match)throw new UnknownLanInterfaceError(preferredAddress);return match}if(candidates.length>1)throw new AmbiguousLanInterfaceError(candidates);return candidates[0]}__name(selectLanAddress,"selectLanAddress");export{daemonTelemetryResponseContext,daemonInboundTraceIdContext,ACCESS_LOG_CONTROLLER_LOCAL,ACCESS_LOG_REJECT_LOCAL,markAccessLogError,installAccessLogMiddleware,HOSTED_HARNESS_CAPABILITY_DIGEST_ENV,createHostedHarnessContract,hostedHarnessContractMiddleware,installHostedHarnessContractMiddleware,HOSTED_CSI_SESSION_STORE_URL_ENV,validateHostedHarnessProfile,sanitizeForStderr,brandSecret,unsafeRevealSecret,UnsupportedDeviceFlowProviderError,TooManyActiveDeviceFlowsError,UpstreamDeviceFlowError,setDeviceFlowRegistry,getDeviceFlowRegistry,DeviceFlowRegistry,createBridgeFileSystemAdapter,PathMutexRegistry,isDeepHealthQuery,CredentialStore,singleTokenCredentials,tagListener,listenerIdentityOf,listenerIdentityOfSocket,denyBrowserOriginCors,parseAllowOriginPatterns,findNonLoopbackHttpOrigin,originIsExplicitlyAllowed,MutableOriginAllowlist,allowOriginCors,hostAllowlist,bearerAuth,requestWasAuthenticated,isTrustedLoopbackMode,requestHasOperatorAuthority,createMutationGate,installRemoteSelfOriginMiddleware,installSelfOriginStripMiddleware,isSoftwareNetwork,listLanCandidates,NoLanInterfaceError,AmbiguousLanInterfaceError,UnknownLanInterfaceError,selectLanAddress,acpChildExtraArgs,ClientMcpSenderRegistry,createClientMcpServerProvider,SERVE_CAPABILITY_REGISTRY,hostedPersonaServeFeatures,getAdvertisedServeFeatures,getServeProtocolVersions,NativeDirectoryPickerUnavailableError,isNativeDirectoryPickerAvailable,pickNativeDirectory,isGitAvailable,LocalPathOpenUnavailableError,isLocalPathOpenAvailable,isLocalTerminalAvailable,openPathLocally,openTerminalLocally,CAPABILITIES_SCHEMA_VERSION,isManagedScratchChild,isScratchRootCompatible,prepareManagedScratchRoot,createManagedScratchDirectory,ServeAppLifecycleController,installServeAppLifecycle,createRateLimiter,setRateLimiter,getRateLimiter,resolveAcpHttpEnabled,getBranchWorktreeJournalPath,createBranchWorktreeJournal,updateBranchWorktreeJournal,clearBranchWorktreeJournalDurable,recoverBranchWorktreePreparations,resolveBranchWorktreeBaseCheckout,isBranchWorktreeCreationSupported,ACP_PRE_ATTACH_MAX_FRAMES_PER_STREAM,ACP_PRE_ATTACH_MAX_FRAMES_PER_CONNECTION,ACP_PRE_ATTACH_MAX_FRAMES_GLOBAL,ACP_PRE_ATTACH_MAX_PAYLOAD_BYTES_PER_CONNECTION,ACP_PRE_ATTACH_MAX_PAYLOAD_BYTES_GLOBAL,AcpPreAttachBudget,toDaemonStatusMemoryLimits,parseDaemonStatusDetail,buildDaemonStatusResponse,pushChannelRestoreIssues,allowOriginMode,listenerMaxConnections,positiveFiniteOrNull,QWEN_CDP_MCP_COMMAND_ENV,resolveCdpMcpCommand,isBrowserAutomationMcpAvailable,MAX_CONCURRENT_VOICE_SESSIONS,VoiceLeaseAbortError,WorkspaceVoiceCoordinator};
|