@qwen-code/qwen-code 0.21.5 → 0.21.6
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bundled/qc-helper/docs/configuration/model-providers.md +8 -8
- package/bundled/qc-helper/docs/configuration/settings.md +15 -15
- package/bundled/qc-helper/docs/features/channels/github.md +31 -19
- package/bundled/qc-helper/docs/features/code-review.md +5 -1
- package/bundled/qc-helper/docs/features/headless.md +31 -0
- package/bundled/qc-helper/docs/qwen-serve.md +75 -0
- package/bundled/review/SKILL.md +72 -60
- package/chunks/{MaxSizedBox-2MWU5JYB.js → MaxSizedBox-2HFKP4LI.js} +11 -10
- package/chunks/{StandaloneSessionPicker-B6MI5NTB.js → StandaloneSessionPicker-RBV72M5N.js} +26 -25
- package/chunks/{acp-startup-profiler-3RICG2YW.js → acp-startup-profiler-ORIQ2CCQ.js} +2 -2
- package/chunks/{acpAgent-MRPYN6FH.js → acpAgent-WO6JFCVQ.js} +1232 -139
- package/chunks/{agent-NAOXNW4I.js → agent-AHGLYNZ4.js} +11 -10
- package/chunks/{agent-headless-L4PPVFKW.js → agent-headless-NTXKKGRO.js} +11 -10
- package/chunks/{bridge-LHXGYNCO.js → bridge-RPAU64CA.js} +17 -15
- package/chunks/{channel-management-service-UHX56NBO.js → channel-management-service-IGEUOVRT.js} +3 -3
- package/chunks/{channel-settings-store-QB54TLYE.js → channel-settings-store-ON64MF7G.js} +18 -17
- package/chunks/{channel-worker-group-NDG4WOOZ.js → channel-worker-group-JWQK224X.js} +6 -5
- package/chunks/{channel-worker-manager-ZCW6UW34.js → channel-worker-manager-77E3OXRQ.js} +6 -5
- package/chunks/{channel-worker-supervisor-ATGFTZRN.js → channel-worker-supervisor-62YWUGP2.js} +4 -3
- package/chunks/{chunk-EXHQZBVJ.js → chunk-2POQWYM6.js} +2 -2
- package/chunks/{chunk-YMUZQ3MQ.js → chunk-3LZKY4V4.js} +3 -3
- package/chunks/{chunk-7MFQLOHZ.js → chunk-3PRJYMXC.js} +1 -1
- package/chunks/{chunk-SJMCYCUQ.js → chunk-3UOLYNTF.js} +5 -5
- package/chunks/{chunk-Q2V4AOQL.js → chunk-4JH77A2U.js} +1 -1
- package/chunks/{chunk-MISUEWB4.js → chunk-4S4OEQ6U.js} +10 -6
- package/chunks/{chunk-URJHXOSO.js → chunk-4WTAQEHV.js} +1 -1
- package/chunks/{chunk-ZLGPHA34.js → chunk-536SWZTA.js} +5 -5
- package/chunks/{chunk-WU5NBSLD.js → chunk-5MJGUQU5.js} +3 -3
- package/chunks/{chunk-3P4GP4S2.js → chunk-75QMRMO7.js} +4 -4
- package/chunks/{chunk-YLL3SC5S.js → chunk-A4VTILZT.js} +1032 -913
- package/chunks/{chunk-B3EBIZUY.js → chunk-ACZRB7AD.js} +8 -3
- package/chunks/chunk-BKHCW2BI.js +41 -0
- package/chunks/{chunk-XD2PNH3K.js → chunk-BOGOR4HB.js} +5 -5
- package/chunks/{chunk-QL4TN4HS.js → chunk-BRVWYMKV.js} +1 -1
- package/chunks/{chunk-TCOJPG2P.js → chunk-C4CBJQKY.js} +1 -1
- package/chunks/{chunk-4O6HLCOF.js → chunk-CA4UIDFU.js} +1 -1
- package/chunks/{chunk-SQTA6PAY.js → chunk-CJ5WLD5Y.js} +6 -2
- package/chunks/{chunk-7W5KOBYU.js → chunk-DIT4V3XH.js} +1 -1
- package/chunks/{chunk-OIGB253L.js → chunk-DVBEGGLG.js} +8 -8
- package/chunks/{chunk-DTAPI453.js → chunk-EMYZIABH.js} +1 -1
- package/chunks/{chunk-GBY3ODW7.js → chunk-EXCEQD22.js} +3 -3
- package/chunks/{chunk-VJPF6GF2.js → chunk-FZFP7RZI.js} +3 -3
- package/chunks/{chunk-3GOCVBYR.js → chunk-G5NNWEYE.js} +5 -5
- package/chunks/{chunk-IWYXZAGT.js → chunk-GESMMPAK.js} +33 -33
- package/chunks/{chunk-SVIEVA3L.js → chunk-GK2H5GRC.js} +29 -4
- package/chunks/{chunk-7M2RLFNX.js → chunk-GWRHVJY2.js} +11 -11
- package/chunks/{chunk-BK2UNYWD.js → chunk-HIBNSEJE.js} +12 -0
- package/chunks/{chunk-4LLUH3A7.js → chunk-HU5TUALO.js} +95 -8
- package/chunks/{chunk-J7I2BZHS.js → chunk-HY25ULVN.js} +23 -6
- package/chunks/{chunk-G2UXFO2B.js → chunk-IMOQO6YL.js} +1 -1
- package/chunks/{chunk-CAX76R46.js → chunk-JE44IPH6.js} +1 -1
- package/chunks/{chunk-IK3RYLAD.js → chunk-K2B3X3E7.js} +3 -3
- package/chunks/{chunk-OWAK7LMW.js → chunk-KGJGEEVR.js} +7 -0
- package/chunks/{chunk-K64OI7S7.js → chunk-KHUA3NQV.js} +2 -2
- package/chunks/{chunk-LEZFUYPM.js → chunk-LAAFLUQV.js} +4 -4
- package/chunks/{chunk-FHPKHXHT.js → chunk-MKVZE4ZJ.js} +5 -1
- package/chunks/{chunk-4NEBUDWS.js → chunk-N2GJU6KI.js} +9 -9
- package/chunks/{chunk-N3RERU5N.js → chunk-NGJOAKJY.js} +3 -3
- package/chunks/chunk-NKLP3DCK.js +22 -0
- package/chunks/{chunk-K6VEL5KP.js → chunk-NKSF7HYF.js} +1 -1
- package/chunks/{chunk-LMNM37OE.js → chunk-O7V7N4G7.js} +1 -1
- package/chunks/{chunk-3H5RFLTS.js → chunk-ODPXHGLL.js} +2 -2
- package/chunks/{chunk-KH2BIJ4H.js → chunk-OP2OHZ7K.js} +267 -11
- package/chunks/{chunk-VOA2UPZM.js → chunk-OWSW7EYP.js} +5 -5
- package/chunks/{chunk-B2RBYP7Z.js → chunk-OXX3FG2N.js} +2 -2
- package/chunks/{chunk-RM3F46UT.js → chunk-PPUOYL77.js} +71 -6
- package/chunks/{chunk-ZPGMDT4S.js → chunk-PX5DNLSA.js} +19 -92
- package/chunks/{chunk-FEUXV3DC.js → chunk-Q5RM32DR.js} +1 -1
- package/chunks/{chunk-AEWOKOJY.js → chunk-QZKYZCN3.js} +1 -1
- package/chunks/{chunk-UKZEXS6K.js → chunk-R574ATRM.js} +11 -0
- package/chunks/{chunk-OGAARVN7.js → chunk-R5RBXLNC.js} +3 -3
- package/chunks/{chunk-5HWAJ4BK.js → chunk-RFUHDCNF.js} +1 -1
- package/chunks/{chunk-LSYVASZS.js → chunk-RHTTKJTP.js} +1 -1
- package/chunks/{chunk-LYPXNRBX.js → chunk-RK2EE3T7.js} +1 -1
- package/chunks/{chunk-CIUUYB23.js → chunk-S7CV4KO6.js} +3 -3
- package/chunks/{chunk-4NNR24EP.js → chunk-SKNE3KQC.js} +3 -3
- package/chunks/{chunk-JDNWIXHJ.js → chunk-SLSWFHDF.js} +3 -3
- package/chunks/{chunk-UWSXFI6E.js → chunk-SQC6K5HI.js} +6 -2
- package/chunks/{chunk-P3SLTSNY.js → chunk-SQOMTWQT.js} +4 -4
- package/chunks/{chunk-D7QAZ5DF.js → chunk-SUKEUUAA.js} +1 -1
- package/chunks/{chunk-WTM5QONI.js → chunk-T4JSA7KU.js} +2 -2
- package/chunks/{chunk-I7JDGNG6.js → chunk-T5U6IM4C.js} +6 -2
- package/chunks/{chunk-2JBETW4S.js → chunk-TGGEZINK.js} +5 -5
- package/chunks/{chunk-C6ARWPCG.js → chunk-TOGZTG4X.js} +2 -2
- package/chunks/{chunk-A6SX5TAH.js → chunk-TSERKWCX.js} +6 -2
- package/chunks/{chunk-IWGMDSC3.js → chunk-U4AF3QLU.js} +355 -17
- package/chunks/{chunk-PDDYAXL2.js → chunk-UGTWD35F.js} +14 -1
- package/chunks/{chunk-BWLUCN35.js → chunk-ULPQQSDN.js} +2 -2
- package/chunks/{chunk-GEP54CHX.js → chunk-VGFPFM4U.js} +3 -3
- package/chunks/{chunk-NLQIEY6W.js → chunk-VNQCPBC2.js} +3 -3
- package/chunks/{chunk-K2ETEWG6.js → chunk-VSALQLT7.js} +1 -1
- package/chunks/{chunk-YO4JI7B4.js → chunk-W5DXUTXD.js} +12 -6
- package/chunks/{chunk-M744OFVE.js → chunk-W7U4ESW2.js} +1 -1
- package/chunks/{chunk-TJ56V3AR.js → chunk-WNU7TZTO.js} +4 -4
- package/chunks/{chunk-GTM6IHBB.js → chunk-WO2B5E5B.js} +1 -0
- package/chunks/chunk-WOJZWRAZ.js +123 -0
- package/chunks/{chunk-5XNO4AW7.js → chunk-XA4TMLFN.js} +11 -11
- package/chunks/{chunk-GP4IMBX5.js → chunk-XM2O73NC.js} +1696 -476
- package/chunks/{chunk-IZ2CMEYO.js → chunk-YMBOEAF4.js} +1 -1
- package/chunks/{chunk-QONSRAEV.js → chunk-YP5KH5Y7.js} +1 -1
- package/chunks/{chunk-ZLJQIGCH.js → chunk-YZQTA3ID.js} +28 -11
- package/chunks/{computer-use-XDOGP2KA.js → computer-use-5HXJ2P4X.js} +11 -10
- package/chunks/{config-utils-E3ZQTHGM.js → config-utils-VXD4SPVR.js} +2 -2
- package/chunks/{contextCommand-N3LQDCYJ.js → contextCommand-7BEHRX2H.js} +14 -13
- package/chunks/{core-runtime-STAFP45W.js → core-runtime-U4VJ5TIV.js} +11 -10
- package/chunks/create-sub-session-QZNQY332.js +772 -0
- package/chunks/{daemon-CCIX4BMG.js → daemon-YI5RY62O.js} +115 -3
- package/chunks/{daemon-status-provider-PPAH3ATF.js → daemon-status-provider-UJUGTDTL.js} +21 -19
- package/chunks/{daemon-trust-policy-X6XL3MB4.js → daemon-trust-policy-ZHDD5VYQ.js} +17 -16
- package/chunks/{daemon-trust-policy-monitor-M5LBL2HD.js → daemon-trust-policy-monitor-5SHYBDGA.js} +17 -16
- package/chunks/{deferred-core-runtime-O54YPTBU.js → deferred-core-runtime-QWAEBTR5.js} +11 -10
- package/chunks/discovery-XLHITE74.js +220 -0
- package/chunks/{dist-IKGVITP3.js → dist-KS4O2NKE.js} +99 -6
- package/chunks/{earlyInputCapture-CBIT2RGT.js → earlyInputCapture-5BMSGKOI.js} +11 -10
- package/chunks/{edit-KW2TOC6A.js → edit-IVQQVYYK.js} +11 -10
- package/chunks/{enter-worktree-YL34NEU5.js → enter-worktree-P3DF2N6O.js} +11 -10
- package/chunks/{enterPlanMode-JFJTDASQ.js → enterPlanMode-KKTDVLAD.js} +11 -10
- package/chunks/{environment-IATU5GXG.js → environment-W5TRDM3G.js} +14 -13
- package/chunks/{errors-SAVRDE7Q.js → errors-GJJB36IG.js} +14 -13
- package/chunks/{exit-worktree-5M43QPBB.js → exit-worktree-LV5RLOCU.js} +11 -10
- package/chunks/{exitPlanMode-W4EICZ4N.js → exitPlanMode-TUGOB2LL.js} +11 -10
- package/chunks/external-tool-guard-provider-5HTGOPGU.js +273 -0
- package/chunks/{fast-path-YQJPIKMP.js → fast-path-2FU23PAQ.js} +5 -5
- package/chunks/{gemini-FUF5SSPR.js → gemini-KDULDQPP.js} +70 -55
- package/chunks/{geminiContentGenerator-LLLZBOUG.js → geminiContentGenerator-LOCFHNVA.js} +1 -1
- package/chunks/{glob-LJFFMN4D.js → glob-Z4NQFKWS.js} +11 -10
- package/chunks/{grep-Q64EAM73.js → grep-Z67Z7EN6.js} +11 -10
- package/chunks/{handleAutoUpdate-QBMPRTSQ.js → handleAutoUpdate-DFUZE6I6.js} +16 -15
- package/chunks/{i18n-LDUW5DMN.js → i18n-R4FMZ7N2.js} +13 -12
- package/chunks/{image-gen-G7RLG3KR.js → image-gen-4CQJPQP5.js} +1 -1
- package/chunks/{initializer-74A7DMMD.js → initializer-DK672ZVE.js} +17 -16
- package/chunks/{installationInfo-OFDYLDFD.js → installationInfo-PO4Z3ES7.js} +12 -11
- package/chunks/{list-JA2EWRHJ.js → list-QXQF6C53.js} +20 -19
- package/chunks/{loadedSettingsAdapter-2GNJOQ3L.js → loadedSettingsAdapter-4D7GUGW6.js} +17 -16
- package/chunks/{loggingContentGenerator-B6B5EGB3.js → loggingContentGenerator-2P3MNACM.js} +4 -3
- package/chunks/{managed-npm-update-4YZHLUER.js → managed-npm-update-LWVJQTWO.js} +24 -14
- package/chunks/{mcp-LLK5YJVH.js → mcp-GHETAR6V.js} +17 -16
- package/chunks/{monitor-NYJPAWVP.js → monitor-4T7W4M6Q.js} +11 -10
- package/chunks/{nonInteractiveCli-HZBBBDJD.js → nonInteractiveCli-P4UKCJFM.js} +47 -45
- package/chunks/{notebook-edit-LLM6UXFX.js → notebook-edit-OC2V7U5D.js} +11 -10
- package/chunks/{openaiContentGenerator-2AEXDN55.js → openaiContentGenerator-RAJUFWQY.js} +5 -4
- package/chunks/{pidfile-3JUWX7G2.js → pidfile-HVPYVRLS.js} +11 -10
- package/chunks/{processUtils-JLLRVZHT.js → processUtils-VIQ4JHVX.js} +2 -2
- package/chunks/{qwenContentGenerator-2FESCF27.js → qwenContentGenerator-2QLCUFNZ.js} +12 -11
- package/chunks/{qwenOAuth2-2KKPYA5J.js → qwenOAuth2-J2X3EN43.js} +1 -1
- package/chunks/{read-file-5GVXLY74.js → read-file-ZNAN2B26.js} +3 -2
- package/chunks/{record-artifact-L3BAHQFN.js → record-artifact-E6AWQU2Z.js} +1 -1
- package/chunks/{resumeHistoryUtils-Z4OFBXPM.js → resumeHistoryUtils-RCY7AL5Y.js} +15 -14
- package/chunks/{ripGrep-TKOJTIAB.js → ripGrep-C3KMLZM5.js} +11 -10
- package/chunks/{run-qwen-serve-K5W6MM6M.js → run-qwen-serve-3JN75CIQ.js} +518 -75
- package/chunks/{runtime-IADXMRCY.js → runtime-VUA4WQYD.js} +20 -19
- package/chunks/{scheduler-T7AV37LD.js → scheduler-Z4IBXCOY.js} +11 -10
- package/chunks/{serve-ROEGMS3I.js → serve-67T3P7XI.js} +18 -16
- package/chunks/{server-NGXMRODI.js → server-46ZO2CLV.js} +7556 -397
- package/chunks/{session-RCDLDJA4.js → session-B4IFAFC4.js} +50 -48
- package/chunks/{settings-E6H3AURD.js → settings-AI2BTBOZ.js} +16 -15
- package/chunks/{shell-RHGGJ6BE.js → shell-BKII3B6E.js} +11 -10
- package/chunks/{skill-GQ7PBS25.js → skill-6CFOWVGA.js} +4 -3
- package/chunks/{skill-settings-E2F7OCBL.js → skill-settings-6BFQWMW4.js} +16 -15
- package/chunks/{spawnChannel-Q2IQBHME.js → spawnChannel-FJXW35U7.js} +14 -12
- package/chunks/{standalone-update-NYYZEHLD.js → standalone-update-WVINHRNS.js} +14 -13
- package/chunks/{startInteractiveUI-IX6I3Y2Z.js → startInteractiveUI-YE57CJ57.js} +140 -138
- package/chunks/{stdioHelpers-HGIYTWAY.js → stdioHelpers-7A2EE64Z.js} +5 -3
- package/chunks/{task-create-2X4UP4F3.js → task-create-Q727MXHJ.js} +2 -2
- package/chunks/{task-list-WOLJPZ64.js → task-list-G6KPQ5JT.js} +1 -1
- package/chunks/{task-update-VDUSN36E.js → task-update-YB7PXO4R.js} +2 -2
- package/chunks/{team-create-UTRVUEDA.js → team-create-GNC7NFY6.js} +11 -10
- package/chunks/{team-delete-D2VMSDOT.js → team-delete-GDO7H2T4.js} +1 -1
- package/chunks/{team-plan-approval-YZNB4U5U.js → team-plan-approval-ECALJLIO.js} +11 -10
- package/chunks/{terminal-image-renderer-QRSCS2BE.js → terminal-image-renderer-II74TFVW.js} +11 -10
- package/chunks/{theme-manager-EKZBY34I.js → theme-manager-2MGEDD22.js} +11 -10
- package/chunks/{tool-search-N2R7LVMC.js → tool-search-S6LRRACA.js} +3 -2
- package/chunks/{total-session-admission-HBIYARPO.js → total-session-admission-7WVAWQPU.js} +17 -15
- package/chunks/{trustedFolders-ZQLYRCSY.js → trustedFolders-NFS4KHO4.js} +13 -12
- package/chunks/{update-relaunch-PJWXMPCR.js → update-relaunch-Q5HLZ6UW.js} +6 -6
- package/chunks/{updateCheck-ZXRCGY66.js → updateCheck-UOVZSTP7.js} +15 -14
- package/chunks/{useAutoAcceptIndicator-ZYQW5SGJ.js → useAutoAcceptIndicator-PC6MOJCO.js} +19 -18
- package/chunks/{validateNonInterActiveAuth-M7J7OTRH.js → validateNonInterActiveAuth-YMQP3ZM7.js} +44 -42
- package/chunks/{version-2AOHMPK3.js → version-T4AQFZJH.js} +1 -1
- package/chunks/{web-fetch-DS34CJ3R.js → web-fetch-JQCJHEEX.js} +3 -2
- package/chunks/{web-search-ITFPD7V4.js → web-search-QGZ2KY4G.js} +4 -3
- package/chunks/{workflow-LZQ4PGNS.js → workflow-YIT27YWZ.js} +12 -11
- package/chunks/{workspace-providers-status-ZPTLKOBM.js → workspace-providers-status-FIDZQ2PL.js} +20 -19
- package/chunks/{workspace-registration-store-OTFKSGG7.js → workspace-registration-store-RCSPE4DU.js} +1 -1
- package/chunks/{workspace-registry-YZ3OXPHP.js → workspace-registry-5PEUCY6E.js} +17 -15
- package/chunks/{workspace-service-OCZXOOSQ.js → workspace-service-LANDVPL7.js} +21 -20
- package/chunks/{workspace-skills-status-K2ALGUCD.js → workspace-skills-status-2IQVJNIN.js} +18 -17
- package/chunks/{workspace-trust-reconciler-KMRZISJP.js → workspace-trust-reconciler-CZPZZCZC.js} +26 -24
- package/chunks/{write-file-AWBI4GJS.js → write-file-G5VNGCOG.js} +11 -10
- package/chunks/{zoom-image-NHKN6F77.js → zoom-image-6RBLD7X6.js} +3 -2
- package/cli-entry.js +14 -0
- package/cli.js +19 -15
- package/package.json +3 -3
- package/web-shell/assets/{arc-Dpg66jw7.js → arc-B-Vtkp1W.js} +1 -1
- package/web-shell/assets/{architectureDiagram-3BPJPVTR-BJ4FIBxN.js → architectureDiagram-3BPJPVTR-qmTXIj64.js} +1 -1
- package/web-shell/assets/{blockDiagram-GPEHLZMM-VXmYdtYT.js → blockDiagram-GPEHLZMM-ZlnXEtdP.js} +1 -1
- package/web-shell/assets/{c4Diagram-AAUBKEIU-BNLDb8FE.js → c4Diagram-AAUBKEIU-Wyoirf6Z.js} +1 -1
- package/web-shell/assets/channel-DXaHnfjS.js +1 -0
- package/web-shell/assets/{chunk-2J33WTMH-DR5yHxr0.js → chunk-2J33WTMH-WQwbq9d8.js} +1 -1
- package/web-shell/assets/{chunk-4BX2VUAB-Czkq8UZU.js → chunk-4BX2VUAB-DQKnAXC4.js} +1 -1
- package/web-shell/assets/{chunk-55IACEB6-DugUgM6s.js → chunk-55IACEB6-DIdgXNcO.js} +1 -1
- package/web-shell/assets/{chunk-727SXJPM-Dw6quA1K.js → chunk-727SXJPM-CUwGOLEd.js} +1 -1
- package/web-shell/assets/{chunk-AQP2D5EJ-BoVYOTTz.js → chunk-AQP2D5EJ-CCBGZFZ4.js} +1 -1
- package/web-shell/assets/{chunk-FMBD7UC4--Amcse-j.js → chunk-FMBD7UC4-DMGXProk.js} +1 -1
- package/web-shell/assets/{chunk-ND2GUHAM-ajaEYAC8.js → chunk-ND2GUHAM-yejcFqsh.js} +1 -1
- package/web-shell/assets/{chunk-QZHKN3VN-CUNDZ7im.js → chunk-QZHKN3VN-DxCyqTf7.js} +1 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-BigU82A0.js +1 -0
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-BigU82A0.js +1 -0
- package/web-shell/assets/{cose-bilkent-S5V4N54A-BnfkD-m1.js → cose-bilkent-S5V4N54A-DOrF3cg_.js} +1 -1
- package/web-shell/assets/{dagre-BM42HDAG-BuUdFk7Z.js → dagre-BM42HDAG-Be6CdYQ_.js} +1 -1
- package/web-shell/assets/{diagram-2AECGRRQ-B2ZXxoab.js → diagram-2AECGRRQ-B_Rjsft2.js} +1 -1
- package/web-shell/assets/{diagram-5GNKFQAL-BsgOICzM.js → diagram-5GNKFQAL-BvQbKSm1.js} +1 -1
- package/web-shell/assets/{diagram-KO2AKTUF-DTTjG6U-.js → diagram-KO2AKTUF-BsdmMdpS.js} +1 -1
- package/web-shell/assets/{diagram-LMA3HP47-temLf1x7.js → diagram-LMA3HP47-CrQlBaNr.js} +1 -1
- package/web-shell/assets/{diagram-OG6HWLK6-CRFjScs2.js → diagram-OG6HWLK6-aB1MD_DL.js} +1 -1
- package/web-shell/assets/{erDiagram-TEJ5UH35-D4oaY-rQ.js → erDiagram-TEJ5UH35-F-eUUn9n.js} +1 -1
- package/web-shell/assets/{flowDiagram-I6XJVG4X-BqG8B49b.js → flowDiagram-I6XJVG4X-DY_d8lUK.js} +1 -1
- package/web-shell/assets/{ganttDiagram-6RSMTGT7-DffQBdd5.js → ganttDiagram-6RSMTGT7-Dqu7KBPg.js} +1 -1
- package/web-shell/assets/{gitGraphDiagram-PVQCEYII-CMDPfseF.js → gitGraphDiagram-PVQCEYII-2IkU_VEj.js} +1 -1
- package/web-shell/assets/{index-qTQR_smP.js → index-BuSbqggh.js} +1 -1
- package/web-shell/assets/index-DrfC2e9s.js +1768 -0
- package/web-shell/assets/index-QQlUCJGg.css +5 -0
- package/web-shell/assets/{infoDiagram-5YYISTIA-Cn3T83MA.js → infoDiagram-5YYISTIA-C4orwzPw.js} +1 -1
- package/web-shell/assets/{ishikawaDiagram-YF4QCWOH-ijFs7e25.js → ishikawaDiagram-YF4QCWOH-fXUEfef_.js} +1 -1
- package/web-shell/assets/{journeyDiagram-JHISSGLW-CINTv8VB.js → journeyDiagram-JHISSGLW-Bs0I1_J5.js} +1 -1
- package/web-shell/assets/{kanban-definition-UN3LZRKU-CMGRZCxx.js → kanban-definition-UN3LZRKU-BPRj1dw_.js} +1 -1
- package/web-shell/assets/{linear-Co-2_37d.js → linear-DFS6ZDpW.js} +1 -1
- package/web-shell/assets/{mermaid.core-DijbyaN5.js → mermaid.core-CZxjWMaO.js} +5 -5
- package/web-shell/assets/{mindmap-definition-RKZ34NQL-k_sDYDPZ.js → mindmap-definition-RKZ34NQL-Dsr3PmNs.js} +1 -1
- package/web-shell/assets/{pieDiagram-4H26LBE5-CG-oz8V3.js → pieDiagram-4H26LBE5-D5Ngpz5Y.js} +1 -1
- package/web-shell/assets/{quadrantDiagram-W4KKPZXB-Baq7HIG2.js → quadrantDiagram-W4KKPZXB-WJK9I25z.js} +1 -1
- package/web-shell/assets/{requirementDiagram-4Y6WPE33-CDM3ZvBt.js → requirementDiagram-4Y6WPE33-CmrYcwOH.js} +1 -1
- package/web-shell/assets/{sankeyDiagram-5OEKKPKP-C2dJbWKN.js → sankeyDiagram-5OEKKPKP-7SjCc4Mv.js} +1 -1
- package/web-shell/assets/{sequenceDiagram-3UESZ5HK-Cf1_h59p.js → sequenceDiagram-3UESZ5HK-Dl9E0IRM.js} +1 -1
- package/web-shell/assets/{stateDiagram-AJRCARHV-CI5clUEc.js → stateDiagram-AJRCARHV-CRRio7yV.js} +1 -1
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-1atT7XaU.js +1 -0
- package/web-shell/assets/{timeline-definition-PNZ67QCA-B2O8cAZX.js → timeline-definition-PNZ67QCA-DVyXjjfq.js} +1 -1
- package/web-shell/assets/{vennDiagram-CIIHVFJN-BLsJ_h9s.js → vennDiagram-CIIHVFJN-Nb2Lckzq.js} +1 -1
- package/web-shell/assets/{wardley-L42UT6IY-BlPU4FTA.js → wardley-L42UT6IY-DuL_otIP.js} +1 -1
- package/web-shell/assets/{wardleyDiagram-YWT4CUSO-D_U-RdU4.js → wardleyDiagram-YWT4CUSO-DVI9Q4Aa.js} +1 -1
- package/web-shell/assets/{xychartDiagram-2RQKCTM6-BynXGSTl.js → xychartDiagram-2RQKCTM6-BNjAm7KD.js} +1 -1
- package/web-shell/index.html +2 -2
- package/bundled/review/DESIGN.md +0 -724
- package/chunks/create-sub-session-2B3JENWD.js +0 -400
- package/web-shell/assets/channel-Bd9wOnaA.js +0 -1
- package/web-shell/assets/classDiagram-4FO5ZUOK-XhCT8FE3.js +0 -1
- package/web-shell/assets/classDiagram-v2-Q7XG4LA2-XhCT8FE3.js +0 -1
- package/web-shell/assets/index-2F4RsNzd.js +0 -1756
- package/web-shell/assets/index-CaucmEO_.css +0 -5
- package/web-shell/assets/stateDiagram-v2-BHNVJYJU-BDc8asKD.js +0 -1
|
@@ -17,7 +17,7 @@ import {
|
|
|
17
17
|
} from "./chunk-OCPBI7J5.js";
|
|
18
18
|
import {
|
|
19
19
|
defaultSpawnChannelFactory
|
|
20
|
-
} from "./chunk-
|
|
20
|
+
} from "./chunk-SQC6K5HI.js";
|
|
21
21
|
import {
|
|
22
22
|
BridgeChannelClosedError,
|
|
23
23
|
BridgeTimeoutError,
|
|
@@ -26,11 +26,12 @@ import {
|
|
|
26
26
|
STATUS_SCHEMA_VERSION,
|
|
27
27
|
createIdleWorkspaceExtensionsStatus,
|
|
28
28
|
createIdleWorkspaceHooksStatus
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-UGTWD35F.js";
|
|
30
30
|
import {
|
|
31
31
|
CHANNEL_STARTUP_PROFILE_META_KEY,
|
|
32
32
|
CHANNEL_STARTUP_PROFILE_VERSION,
|
|
33
33
|
DAEMON_CHANNEL_DELIVERY_META_KEY,
|
|
34
|
+
DAEMON_MODEL_PROMPT_META_KEY,
|
|
34
35
|
LOAD_REPLAY_BULK_MODE,
|
|
35
36
|
LOAD_REPLAY_HIDE_INHERITED_META_KEY,
|
|
36
37
|
LOAD_REPLAY_META_KEY,
|
|
@@ -42,8 +43,9 @@ import {
|
|
|
42
43
|
REQUESTED_SESSION_ID_META_KEY,
|
|
43
44
|
TODO_STOP_GUARD_CONTINUATION_CLAIM_METHOD,
|
|
44
45
|
TODO_STOP_GUARD_QUEUE_RELEASE_METHOD,
|
|
45
|
-
WORKTREE_MCP_DEFER_META_KEY
|
|
46
|
-
|
|
46
|
+
WORKTREE_MCP_DEFER_META_KEY,
|
|
47
|
+
isValidTrustedModelPrompt
|
|
48
|
+
} from "./chunk-R574ATRM.js";
|
|
47
49
|
import {
|
|
48
50
|
BranchWhilePromptActiveError,
|
|
49
51
|
CancelSentinelCollisionError,
|
|
@@ -71,9 +73,17 @@ import {
|
|
|
71
73
|
} from "./chunk-6PLDPT2C.js";
|
|
72
74
|
import {
|
|
73
75
|
CHANNEL_DELIVERY_ERROR_CODES,
|
|
76
|
+
LIVE_TASK_TOOL_NAMES,
|
|
77
|
+
MAX_LIVE_SCREEN_CONTEXT_TEXT_CHARS,
|
|
78
|
+
MAX_LIVE_SPEAK_TO_USER_MESSAGE_CHARS,
|
|
74
79
|
MAX_SUB_SESSION_NAME_CHARS,
|
|
75
80
|
MAX_SUB_SESSION_PROMPT_CHARS
|
|
76
|
-
} from "./chunk-
|
|
81
|
+
} from "./chunk-HIBNSEJE.js";
|
|
82
|
+
import {
|
|
83
|
+
EXTERNAL_TOOL_GUARD_READY_META_KEY,
|
|
84
|
+
EXTERNAL_TOOL_GUARD_REQUIRED_VALUE,
|
|
85
|
+
isValidExternalToolGuardDenialReason
|
|
86
|
+
} from "./chunk-BKHCW2BI.js";
|
|
77
87
|
import {
|
|
78
88
|
ClientSideConnection,
|
|
79
89
|
PROTOCOL_VERSION,
|
|
@@ -90,7 +100,7 @@ import {
|
|
|
90
100
|
metadataBudgetBytes,
|
|
91
101
|
normalizeSnapshotPayload,
|
|
92
102
|
stableSessionArtifactId
|
|
93
|
-
} from "./chunk-
|
|
103
|
+
} from "./chunk-A4VTILZT.js";
|
|
94
104
|
import {
|
|
95
105
|
DAEMON_TRACEPARENT_META_KEY,
|
|
96
106
|
DAEMON_TRACESTATE_META_KEY
|
|
@@ -99,7 +109,7 @@ import {
|
|
|
99
109
|
INVOCATION_CONTEXT_META_KEY,
|
|
100
110
|
PRIVATE_ACP_CAPABILITY_ENV,
|
|
101
111
|
PRIVATE_PARENT_CAPABILITY_META_KEY
|
|
102
|
-
} from "./chunk-
|
|
112
|
+
} from "./chunk-PX5DNLSA.js";
|
|
103
113
|
import {
|
|
104
114
|
init_esbuild_shims
|
|
105
115
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -1582,6 +1592,25 @@ function isRecord2(value) {
|
|
|
1582
1592
|
return typeof value === "object" && value !== null && !Array.isArray(value);
|
|
1583
1593
|
}
|
|
1584
1594
|
__name(isRecord2, "isRecord");
|
|
1595
|
+
function normalizeExternalToolGuardResult(value) {
|
|
1596
|
+
if (!isRecord2(value)) {
|
|
1597
|
+
throw new Error("External tool guard handler returned an invalid result.");
|
|
1598
|
+
}
|
|
1599
|
+
const keys = Object.keys(value);
|
|
1600
|
+
if (value["allowed"] === true && keys.length === 1 && keys[0] === "allowed") {
|
|
1601
|
+
return { allowed: true };
|
|
1602
|
+
}
|
|
1603
|
+
if (value["allowed"] !== false || keys.some((key) => key !== "allowed" && key !== "reason")) {
|
|
1604
|
+
throw new Error("External tool guard handler returned an invalid result.");
|
|
1605
|
+
}
|
|
1606
|
+
if (!Object.hasOwn(value, "reason")) return { allowed: false };
|
|
1607
|
+
const reason = value["reason"];
|
|
1608
|
+
if (!isValidExternalToolGuardDenialReason(reason)) {
|
|
1609
|
+
throw new Error("External tool guard handler returned an invalid result.");
|
|
1610
|
+
}
|
|
1611
|
+
return { allowed: false, reason };
|
|
1612
|
+
}
|
|
1613
|
+
__name(normalizeExternalToolGuardResult, "normalizeExternalToolGuardResult");
|
|
1585
1614
|
function isBoundedChannelDeliveryString(value) {
|
|
1586
1615
|
return typeof value === "string" && value.trim().length > 0 && value.length <= MAX_CHANNEL_DELIVERY_FIELD_CHARS;
|
|
1587
1616
|
}
|
|
@@ -1811,7 +1840,7 @@ function sliceLineRange(content, startLine, endLine) {
|
|
|
1811
1840
|
}
|
|
1812
1841
|
__name(sliceLineRange, "sliceLineRange");
|
|
1813
1842
|
var BridgeClient = class {
|
|
1814
|
-
constructor(resolveEntry, resolvePendingRestoreEvents, mediator, permissionTimeoutMs, maxPendingPerSession, fileSystem, onModelPromoted, onModePromoted, clientMcpSender, ownsSession = () => true, onTokenUsage, onCreateSubSession, onGenerationEvent, onWorkspaceGenerationEvent, onChannelDelivery, hasSessionSpawnInFlight = () => false) {
|
|
1843
|
+
constructor(resolveEntry, resolvePendingRestoreEvents, mediator, permissionTimeoutMs, maxPendingPerSession, fileSystem, onModelPromoted, onModePromoted, clientMcpSender, ownsSession = () => true, onTokenUsage, onCreateSubSession, onGenerationEvent, onWorkspaceGenerationEvent, onChannelDelivery, hasSessionSpawnInFlight = () => false, getLiveScreenContextCaptureHandler = () => void 0, getLiveTaskToolRequestHandler = () => void 0, getLiveSpeakToUserHandler = () => void 0, externalToolGuard) {
|
|
1815
1844
|
this.resolveEntry = resolveEntry;
|
|
1816
1845
|
this.resolvePendingRestoreEvents = resolvePendingRestoreEvents;
|
|
1817
1846
|
this.mediator = mediator;
|
|
@@ -1828,6 +1857,10 @@ var BridgeClient = class {
|
|
|
1828
1857
|
this.onWorkspaceGenerationEvent = onWorkspaceGenerationEvent;
|
|
1829
1858
|
this.onChannelDelivery = onChannelDelivery;
|
|
1830
1859
|
this.hasSessionSpawnInFlight = hasSessionSpawnInFlight;
|
|
1860
|
+
this.getLiveScreenContextCaptureHandler = getLiveScreenContextCaptureHandler;
|
|
1861
|
+
this.getLiveTaskToolRequestHandler = getLiveTaskToolRequestHandler;
|
|
1862
|
+
this.getLiveSpeakToUserHandler = getLiveSpeakToUserHandler;
|
|
1863
|
+
this.externalToolGuard = externalToolGuard;
|
|
1831
1864
|
}
|
|
1832
1865
|
static {
|
|
1833
1866
|
__name(this, "BridgeClient");
|
|
@@ -2105,9 +2138,21 @@ var BridgeClient = class {
|
|
|
2105
2138
|
if (method === SERVE_CONTROL_EXT_METHODS.createSubSession) {
|
|
2106
2139
|
return this.handleCreateSubSession(params);
|
|
2107
2140
|
}
|
|
2141
|
+
if (method === SERVE_CONTROL_EXT_METHODS.liveCaptureScreenContext) {
|
|
2142
|
+
return this.handleLiveScreenContextCapture(params);
|
|
2143
|
+
}
|
|
2144
|
+
if (method === SERVE_CONTROL_EXT_METHODS.liveTaskTool) {
|
|
2145
|
+
return this.handleLiveTaskTool(params);
|
|
2146
|
+
}
|
|
2147
|
+
if (method === SERVE_CONTROL_EXT_METHODS.liveSpeakToUser) {
|
|
2148
|
+
return this.handleLiveSpeakToUser(params);
|
|
2149
|
+
}
|
|
2108
2150
|
if (method === SERVE_CONTROL_EXT_METHODS.channelDelivery) {
|
|
2109
2151
|
return this.handleChannelDelivery(params);
|
|
2110
2152
|
}
|
|
2153
|
+
if (method === SERVE_CONTROL_EXT_METHODS.externalToolGuardPrepare) {
|
|
2154
|
+
return this.handleExternalToolGuardPrepare(params);
|
|
2155
|
+
}
|
|
2111
2156
|
if (method === TODO_STOP_GUARD_CONTINUATION_CLAIM_METHOD) {
|
|
2112
2157
|
return this.handleTodoStopGuardContinuationClaim(params);
|
|
2113
2158
|
}
|
|
@@ -2149,6 +2194,52 @@ var BridgeClient = class {
|
|
|
2149
2194
|
}
|
|
2150
2195
|
return { messages, hasQueuedPrompt };
|
|
2151
2196
|
}
|
|
2197
|
+
async handleExternalToolGuardPrepare(params) {
|
|
2198
|
+
if (!this.externalToolGuard) {
|
|
2199
|
+
throw RequestError.methodNotFound(
|
|
2200
|
+
SERVE_CONTROL_EXT_METHODS.externalToolGuardPrepare
|
|
2201
|
+
);
|
|
2202
|
+
}
|
|
2203
|
+
const sessionId = params["sessionId"];
|
|
2204
|
+
const promptId = params["promptId"];
|
|
2205
|
+
const toolCallId = params["toolCallId"];
|
|
2206
|
+
const toolName = params["toolName"];
|
|
2207
|
+
const args = params["arguments"];
|
|
2208
|
+
if (typeof sessionId !== "string" || sessionId.length === 0 || typeof promptId !== "string" || promptId.length === 0 || typeof toolCallId !== "string" || toolCallId.length === 0 || typeof toolName !== "string" || toolName.length === 0 || !isRecord2(args)) {
|
|
2209
|
+
throw RequestError.invalidParams(
|
|
2210
|
+
void 0,
|
|
2211
|
+
"Invalid external tool guard request"
|
|
2212
|
+
);
|
|
2213
|
+
}
|
|
2214
|
+
if (!this.ownsSession(sessionId)) {
|
|
2215
|
+
throw RequestError.invalidParams(
|
|
2216
|
+
void 0,
|
|
2217
|
+
"External tool guard session is not owned by this connection"
|
|
2218
|
+
);
|
|
2219
|
+
}
|
|
2220
|
+
const entry = this.resolveEntry(sessionId);
|
|
2221
|
+
if (!entry || !entry.promptActive || entry.activePromptId !== promptId) {
|
|
2222
|
+
throw RequestError.invalidParams(
|
|
2223
|
+
void 0,
|
|
2224
|
+
"External tool guard prompt is not the active prompt"
|
|
2225
|
+
);
|
|
2226
|
+
}
|
|
2227
|
+
const decision = await this.externalToolGuard({
|
|
2228
|
+
sessionId: entry.sessionId,
|
|
2229
|
+
promptId: entry.activePromptId,
|
|
2230
|
+
toolCallId,
|
|
2231
|
+
toolName,
|
|
2232
|
+
arguments: args
|
|
2233
|
+
});
|
|
2234
|
+
const currentEntry = this.resolveEntry(sessionId);
|
|
2235
|
+
if (!this.ownsSession(sessionId) || currentEntry !== entry || !currentEntry.promptActive || currentEntry.activePromptId !== promptId) {
|
|
2236
|
+
throw RequestError.invalidParams(
|
|
2237
|
+
void 0,
|
|
2238
|
+
"External tool guard prompt is no longer active"
|
|
2239
|
+
);
|
|
2240
|
+
}
|
|
2241
|
+
return normalizeExternalToolGuardResult(decision);
|
|
2242
|
+
}
|
|
2152
2243
|
handleTodoStopGuardContinuationClaim(params) {
|
|
2153
2244
|
const sessionId = typeof params["sessionId"] === "string" && params["sessionId"].length > 0 ? params["sessionId"] : void 0;
|
|
2154
2245
|
if (!sessionId) return { claimed: false, hasQueuedPrompt: false };
|
|
@@ -2410,6 +2501,71 @@ var BridgeClient = class {
|
|
|
2410
2501
|
...result.parentSessionPersisted !== void 0 ? { parentSessionPersisted: result.parentSessionPersisted } : {}
|
|
2411
2502
|
};
|
|
2412
2503
|
}
|
|
2504
|
+
async handleLiveScreenContextCapture(params) {
|
|
2505
|
+
const handler = this.getLiveScreenContextCaptureHandler();
|
|
2506
|
+
if (!handler) {
|
|
2507
|
+
throw RequestError.methodNotFound(
|
|
2508
|
+
SERVE_CONTROL_EXT_METHODS.liveCaptureScreenContext
|
|
2509
|
+
);
|
|
2510
|
+
}
|
|
2511
|
+
const callerSessionId = params["callerSessionId"];
|
|
2512
|
+
if (typeof callerSessionId !== "string" || callerSessionId.length === 0 || !this.ownsSession(callerSessionId)) {
|
|
2513
|
+
throw RequestError.invalidParams(
|
|
2514
|
+
void 0,
|
|
2515
|
+
"`callerSessionId` is required and must name a session owned by this connection"
|
|
2516
|
+
);
|
|
2517
|
+
}
|
|
2518
|
+
const result = await handler({ callerSessionId });
|
|
2519
|
+
if (result.appName.length === 0 || result.appName.length > 512 || result.windowTitle !== void 0 && result.windowTitle.length > 2048 || result.accessibilityText.length > MAX_LIVE_SCREEN_CONTEXT_TEXT_CHARS || result.screenshotPath.length === 0 || result.screenshotPath.length > 4096) {
|
|
2520
|
+
throw RequestError.internalError(void 0, "Invalid Appshot result.");
|
|
2521
|
+
}
|
|
2522
|
+
return {
|
|
2523
|
+
appName: result.appName,
|
|
2524
|
+
...result.windowTitle ? { windowTitle: result.windowTitle } : {},
|
|
2525
|
+
accessibilityText: result.accessibilityText,
|
|
2526
|
+
screenshotPath: result.screenshotPath
|
|
2527
|
+
};
|
|
2528
|
+
}
|
|
2529
|
+
async handleLiveTaskTool(params) {
|
|
2530
|
+
const handler = this.getLiveTaskToolRequestHandler();
|
|
2531
|
+
if (!handler) {
|
|
2532
|
+
throw RequestError.methodNotFound(SERVE_CONTROL_EXT_METHODS.liveTaskTool);
|
|
2533
|
+
}
|
|
2534
|
+
const callerSessionId = params["callerSessionId"];
|
|
2535
|
+
const name = params["name"];
|
|
2536
|
+
const args = params["arguments"];
|
|
2537
|
+
if (typeof callerSessionId !== "string" || callerSessionId.length === 0 || !this.ownsSession(callerSessionId) || typeof name !== "string" || !LIVE_TASK_TOOL_NAMES.includes(
|
|
2538
|
+
name
|
|
2539
|
+
) || typeof args !== "object" || args === null || Array.isArray(args)) {
|
|
2540
|
+
throw RequestError.invalidParams(
|
|
2541
|
+
void 0,
|
|
2542
|
+
"Invalid Live task-tool request."
|
|
2543
|
+
);
|
|
2544
|
+
}
|
|
2545
|
+
return handler({
|
|
2546
|
+
callerSessionId,
|
|
2547
|
+
name,
|
|
2548
|
+
arguments: args
|
|
2549
|
+
});
|
|
2550
|
+
}
|
|
2551
|
+
async handleLiveSpeakToUser(params) {
|
|
2552
|
+
const handler = this.getLiveSpeakToUserHandler();
|
|
2553
|
+
if (!handler) {
|
|
2554
|
+
throw RequestError.methodNotFound(
|
|
2555
|
+
SERVE_CONTROL_EXT_METHODS.liveSpeakToUser
|
|
2556
|
+
);
|
|
2557
|
+
}
|
|
2558
|
+
const callerSessionId = params["callerSessionId"];
|
|
2559
|
+
const message = params["message"];
|
|
2560
|
+
if (typeof callerSessionId !== "string" || callerSessionId.length === 0 || !this.ownsSession(callerSessionId) || typeof message !== "string" || message.trim().length === 0 || message.length > MAX_LIVE_SPEAK_TO_USER_MESSAGE_CHARS) {
|
|
2561
|
+
throw RequestError.invalidParams(
|
|
2562
|
+
void 0,
|
|
2563
|
+
"Invalid Live speak-to-user request."
|
|
2564
|
+
);
|
|
2565
|
+
}
|
|
2566
|
+
await handler({ callerSessionId, message });
|
|
2567
|
+
return { accepted: true };
|
|
2568
|
+
}
|
|
2413
2569
|
/**
|
|
2414
2570
|
* Handle child->bridge ACP `extNotification` calls. Recognized methods are
|
|
2415
2571
|
* `qwen/notify/session/model-update`,
|
|
@@ -2419,11 +2575,26 @@ var BridgeClient = class {
|
|
|
2419
2575
|
* `qwen/notify/session/prompt-suggestion` (followup assist),
|
|
2420
2576
|
* `qwen/notify/session/artifact-event` (hook artifacts),
|
|
2421
2577
|
* `qwen/notify/session/terminal-sequence`, and
|
|
2578
|
+
* `_qwencode/end_turn` (background-notification turns), and
|
|
2422
2579
|
* `qwen/notify/session/mcp-budget-event` — each translated into a
|
|
2423
2580
|
* session-scoped SSE frame. Unknown methods are dropped silently for
|
|
2424
2581
|
* forward-compat.
|
|
2425
2582
|
*/
|
|
2426
2583
|
async extNotification(method, params) {
|
|
2584
|
+
if (method === "_qwencode/end_turn") {
|
|
2585
|
+
const sessionId2 = params["sessionId"];
|
|
2586
|
+
const reason = params["reason"];
|
|
2587
|
+
if (typeof sessionId2 !== "string" || sessionId2.length === 0 || typeof reason !== "string" || reason.length === 0 || reason.length > 128 || params["source"] !== "background_notification") {
|
|
2588
|
+
return;
|
|
2589
|
+
}
|
|
2590
|
+
const entry = this.resolveEntry(sessionId2);
|
|
2591
|
+
if (!entry || !this.ownsSession(sessionId2)) return;
|
|
2592
|
+
entry.events.publish({
|
|
2593
|
+
type: "background_notification_turn_complete",
|
|
2594
|
+
data: { sessionId: sessionId2, reason }
|
|
2595
|
+
});
|
|
2596
|
+
return;
|
|
2597
|
+
}
|
|
2427
2598
|
if (method === "qwen/notify/session/generation/event") {
|
|
2428
2599
|
const sessionId2 = params["sessionId"];
|
|
2429
2600
|
const requestId = params["requestId"];
|
|
@@ -5919,6 +6090,9 @@ var DEFAULT_MAX_PENDING_PER_SESSION = 64;
|
|
|
5919
6090
|
var DEFAULT_SESSION_REAP_INTERVAL_MS = 6e4;
|
|
5920
6091
|
var DEFAULT_SESSION_IDLE_TIMEOUT_MS = 30 * 6e4;
|
|
5921
6092
|
function createAcpSessionBridge(opts) {
|
|
6093
|
+
let liveScreenContextCaptureHandler;
|
|
6094
|
+
let liveTaskToolRequestHandler;
|
|
6095
|
+
let liveSpeakToUserHandler;
|
|
5922
6096
|
const defaultSessionScope = opts.sessionScope ?? "single";
|
|
5923
6097
|
let maxSessions;
|
|
5924
6098
|
if (opts.maxSessions === void 0) {
|
|
@@ -6485,7 +6659,11 @@ function createAcpSessionBridge(opts) {
|
|
|
6485
6659
|
}).catch(() => void 0);
|
|
6486
6660
|
},
|
|
6487
6661
|
opts.onChannelDelivery,
|
|
6488
|
-
() => channelInfo?.sessionIds === sessionIds && channelInfo.sessionSpawnsInFlight > 0
|
|
6662
|
+
() => channelInfo?.sessionIds === sessionIds && channelInfo.sessionSpawnsInFlight > 0,
|
|
6663
|
+
() => liveScreenContextCaptureHandler,
|
|
6664
|
+
() => liveTaskToolRequestHandler,
|
|
6665
|
+
() => liveSpeakToUserHandler,
|
|
6666
|
+
opts.externalToolGuard
|
|
6489
6667
|
);
|
|
6490
6668
|
connection = new ClientSideConnection(() => client, channel.stream);
|
|
6491
6669
|
} catch (error) {
|
|
@@ -6623,6 +6801,14 @@ function createAcpSessionBridge(opts) {
|
|
|
6623
6801
|
initTimeoutMs,
|
|
6624
6802
|
"initialize"
|
|
6625
6803
|
);
|
|
6804
|
+
if (opts.externalToolGuard) {
|
|
6805
|
+
const guardAck = response._meta?.[EXTERNAL_TOOL_GUARD_READY_META_KEY];
|
|
6806
|
+
if (guardAck !== EXTERNAL_TOOL_GUARD_REQUIRED_VALUE) {
|
|
6807
|
+
throw new Error(
|
|
6808
|
+
`ACP child did not acknowledge the required external tool guard (received: ${JSON.stringify(guardAck)}).`
|
|
6809
|
+
);
|
|
6810
|
+
}
|
|
6811
|
+
}
|
|
6626
6812
|
try {
|
|
6627
6813
|
const attributes = getChannelStartupProfileAttributes(
|
|
6628
6814
|
response,
|
|
@@ -7667,9 +7853,15 @@ function createAcpSessionBridge(opts) {
|
|
|
7667
7853
|
};
|
|
7668
7854
|
}
|
|
7669
7855
|
if (action === "load") {
|
|
7856
|
+
const liveJournal = snapshot.liveJournal.map((event) => {
|
|
7857
|
+
if (!entry.activePromptId || event.type !== "history_truncated" || !event.data || typeof event.data !== "object" || event.data.scope !== "live_journal") {
|
|
7858
|
+
return event;
|
|
7859
|
+
}
|
|
7860
|
+
return { ...event, promptId: entry.activePromptId };
|
|
7861
|
+
});
|
|
7670
7862
|
return {
|
|
7671
7863
|
compactedReplay: snapshot.compactedTurns,
|
|
7672
|
-
liveJournal
|
|
7864
|
+
liveJournal,
|
|
7673
7865
|
lastEventId: snapshot.lastEventId,
|
|
7674
7866
|
eventEpoch,
|
|
7675
7867
|
...replayStatus,
|
|
@@ -7840,6 +8032,7 @@ function createAcpSessionBridge(opts) {
|
|
|
7840
8032
|
return {
|
|
7841
8033
|
sessionId: existing.sessionId,
|
|
7842
8034
|
workspaceCwd: existing.workspaceCwd,
|
|
8035
|
+
...existing.effectiveCwd !== existing.workspaceCwd ? { currentCwd: existing.effectiveCwd } : {},
|
|
7843
8036
|
attached: true,
|
|
7844
8037
|
clientId,
|
|
7845
8038
|
createdAt: existing.createdAt,
|
|
@@ -8037,6 +8230,7 @@ function createAcpSessionBridge(opts) {
|
|
|
8037
8230
|
return {
|
|
8038
8231
|
sessionId: racedEntry.sessionId,
|
|
8039
8232
|
workspaceCwd: racedEntry.workspaceCwd,
|
|
8233
|
+
...racedEntry.effectiveCwd !== racedEntry.workspaceCwd ? { currentCwd: racedEntry.effectiveCwd } : {},
|
|
8040
8234
|
attached: true,
|
|
8041
8235
|
clientId: clientId2,
|
|
8042
8236
|
createdAt: racedEntry.createdAt,
|
|
@@ -8272,6 +8466,15 @@ function createAcpSessionBridge(opts) {
|
|
|
8272
8466
|
__name(closeSessionImpl, "closeSessionImpl");
|
|
8273
8467
|
startSessionReaper();
|
|
8274
8468
|
const bridgeApi = {
|
|
8469
|
+
setLiveScreenContextCaptureHandler(handler) {
|
|
8470
|
+
liveScreenContextCaptureHandler = handler;
|
|
8471
|
+
},
|
|
8472
|
+
setLiveTaskToolRequestHandler(handler) {
|
|
8473
|
+
liveTaskToolRequestHandler = handler;
|
|
8474
|
+
},
|
|
8475
|
+
setLiveSpeakToUserHandler(handler) {
|
|
8476
|
+
liveSpeakToUserHandler = handler;
|
|
8477
|
+
},
|
|
8275
8478
|
getDaemonStatusSnapshot() {
|
|
8276
8479
|
return {
|
|
8277
8480
|
limits: {
|
|
@@ -8395,6 +8598,7 @@ function createAcpSessionBridge(opts) {
|
|
|
8395
8598
|
return {
|
|
8396
8599
|
sessionId: existing.sessionId,
|
|
8397
8600
|
workspaceCwd: existing.workspaceCwd,
|
|
8601
|
+
...existing.effectiveCwd !== existing.workspaceCwd ? { currentCwd: existing.effectiveCwd } : {},
|
|
8398
8602
|
attached: true,
|
|
8399
8603
|
clientId,
|
|
8400
8604
|
createdAt: existing.createdAt,
|
|
@@ -8498,6 +8702,12 @@ function createAcpSessionBridge(opts) {
|
|
|
8498
8702
|
entry,
|
|
8499
8703
|
context?.clientId
|
|
8500
8704
|
);
|
|
8705
|
+
const modelPrompt = context?.modelPrompt;
|
|
8706
|
+
if (modelPrompt !== void 0 && !isValidTrustedModelPrompt(modelPrompt)) {
|
|
8707
|
+
throw new TypeError(
|
|
8708
|
+
"Bridge modelPrompt must be a non-empty bounded string."
|
|
8709
|
+
);
|
|
8710
|
+
}
|
|
8501
8711
|
if (signal?.aborted) {
|
|
8502
8712
|
throw new DOMException("Prompt aborted", "AbortError");
|
|
8503
8713
|
}
|
|
@@ -8544,6 +8754,14 @@ function createAcpSessionBridge(opts) {
|
|
|
8544
8754
|
state: isQueued ? "queued" : "running"
|
|
8545
8755
|
};
|
|
8546
8756
|
entry.pendingPromptList.push(pendingEntry);
|
|
8757
|
+
try {
|
|
8758
|
+
context?.onPromptAdmitted?.();
|
|
8759
|
+
} catch (error) {
|
|
8760
|
+
opts.onDiagnosticLine?.(
|
|
8761
|
+
`qwen serve: prompt admission observer failed for session=${sessionId}: ${error instanceof Error ? error.message : String(error)}`,
|
|
8762
|
+
"warn"
|
|
8763
|
+
);
|
|
8764
|
+
}
|
|
8547
8765
|
const deadlineMs = context?.deadlineMs;
|
|
8548
8766
|
const hasDeadline = typeof deadlineMs === "number" && Number.isFinite(deadlineMs) && deadlineMs > 0;
|
|
8549
8767
|
let deadlineReject;
|
|
@@ -8672,6 +8890,7 @@ function createAcpSessionBridge(opts) {
|
|
|
8672
8890
|
delete meta[PRIVATE_PARENT_CAPABILITY_META_KEY];
|
|
8673
8891
|
delete meta[DAEMON_CONTINUE_META_KEY];
|
|
8674
8892
|
delete meta[DAEMON_CHANNEL_DELIVERY_META_KEY];
|
|
8893
|
+
delete meta[DAEMON_MODEL_PROMPT_META_KEY];
|
|
8675
8894
|
if (isRetry) {
|
|
8676
8895
|
meta[DAEMON_RETRY_META_KEY] = true;
|
|
8677
8896
|
}
|
|
@@ -8681,6 +8900,9 @@ function createAcpSessionBridge(opts) {
|
|
|
8681
8900
|
if (context?.channelDelivery) {
|
|
8682
8901
|
meta[DAEMON_CHANNEL_DELIVERY_META_KEY] = context.channelDelivery;
|
|
8683
8902
|
}
|
|
8903
|
+
if (modelPrompt !== void 0) {
|
|
8904
|
+
meta[DAEMON_MODEL_PROMPT_META_KEY] = modelPrompt;
|
|
8905
|
+
}
|
|
8684
8906
|
meta[INVOCATION_CONTEXT_META_KEY] = invocationContext;
|
|
8685
8907
|
if (Object.keys(meta).length > 0) {
|
|
8686
8908
|
copy._meta = meta;
|
|
@@ -9209,7 +9431,8 @@ function createAcpSessionBridge(opts) {
|
|
|
9209
9431
|
{
|
|
9210
9432
|
sessionId,
|
|
9211
9433
|
path: req.path,
|
|
9212
|
-
...req.allowedRoots ? { allowedRoots: req.allowedRoots } : {}
|
|
9434
|
+
...req.allowedRoots ? { allowedRoots: req.allowedRoots } : {},
|
|
9435
|
+
...req.managedRelocation ? { managedRelocation: req.managedRelocation } : {}
|
|
9213
9436
|
}
|
|
9214
9437
|
);
|
|
9215
9438
|
const extResult = raw;
|
|
@@ -9947,6 +10170,20 @@ function createAcpSessionBridge(opts) {
|
|
|
9947
10170
|
refreshed: result.refreshed ?? false
|
|
9948
10171
|
};
|
|
9949
10172
|
},
|
|
10173
|
+
async setSessionLiveConversationActive(sessionId, active) {
|
|
10174
|
+
await requestSessionStatus(
|
|
10175
|
+
sessionId,
|
|
10176
|
+
SERVE_CONTROL_EXT_METHODS.sessionLiveConversation,
|
|
10177
|
+
{ active }
|
|
10178
|
+
);
|
|
10179
|
+
},
|
|
10180
|
+
async appendSessionLiveTranscript(sessionId, entries, model) {
|
|
10181
|
+
await requestSessionStatus(
|
|
10182
|
+
sessionId,
|
|
10183
|
+
SERVE_CONTROL_EXT_METHODS.sessionLiveTranscript,
|
|
10184
|
+
{ entries, model }
|
|
10185
|
+
);
|
|
10186
|
+
},
|
|
9950
10187
|
async setSessionApprovalMode(sessionId, mode, opts2, context) {
|
|
9951
10188
|
const entry = byId.get(sessionId);
|
|
9952
10189
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
@@ -10154,6 +10391,24 @@ function createAcpSessionBridge(opts) {
|
|
|
10154
10391
|
entry.midTurnMessageQueue.splice(index, 1);
|
|
10155
10392
|
return { removed: true };
|
|
10156
10393
|
},
|
|
10394
|
+
async enqueueBackgroundNotification(sessionId, notification) {
|
|
10395
|
+
const entry = byId.get(sessionId);
|
|
10396
|
+
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
10397
|
+
const info = channelInfoForEntry(entry);
|
|
10398
|
+
if (!info || info.isDying) throw new SessionNotFoundError(sessionId);
|
|
10399
|
+
const response = await Promise.race([
|
|
10400
|
+
withTimeout(
|
|
10401
|
+
entry.connection.extMethod(
|
|
10402
|
+
SERVE_CONTROL_EXT_METHODS.sessionBackgroundNotification,
|
|
10403
|
+
{ sessionId, ...notification }
|
|
10404
|
+
),
|
|
10405
|
+
initTimeoutMs,
|
|
10406
|
+
SERVE_CONTROL_EXT_METHODS.sessionBackgroundNotification
|
|
10407
|
+
),
|
|
10408
|
+
getTransportClosedReject(entry)
|
|
10409
|
+
]);
|
|
10410
|
+
return { sessionId, accepted: response["accepted"] === true };
|
|
10411
|
+
},
|
|
10157
10412
|
async generateSessionBtw(sessionId, question, signal, _context) {
|
|
10158
10413
|
const entry = byId.get(sessionId);
|
|
10159
10414
|
if (!entry) throw new SessionNotFoundError(sessionId);
|
|
@@ -11036,6 +11291,7 @@ export {
|
|
|
11036
11291
|
SessionArtifactAuthorizationError,
|
|
11037
11292
|
SESSION_SOURCE_META_KEY,
|
|
11038
11293
|
parseSessionSource,
|
|
11294
|
+
isA2uiToolMeta,
|
|
11039
11295
|
extractErrorMessage,
|
|
11040
11296
|
extractErrorCode,
|
|
11041
11297
|
classifyTurnErrorKind,
|
|
@@ -2,20 +2,20 @@
|
|
|
2
2
|
"use strict";
|
|
3
3
|
import {
|
|
4
4
|
getExtensionManager
|
|
5
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-G5NNWEYE.js";
|
|
6
6
|
import {
|
|
7
7
|
parseChannelConfig
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-LAAFLUQV.js";
|
|
9
9
|
import {
|
|
10
10
|
getPlugin,
|
|
11
11
|
registerPlugin
|
|
12
|
-
} from "./chunk-
|
|
12
|
+
} from "./chunk-EMYZIABH.js";
|
|
13
13
|
import {
|
|
14
14
|
sanitizeLogText
|
|
15
15
|
} from "./chunk-DIEFUBV6.js";
|
|
16
16
|
import {
|
|
17
17
|
loadSettings
|
|
18
|
-
} from "./chunk-
|
|
18
|
+
} from "./chunk-PPUOYL77.js";
|
|
19
19
|
import {
|
|
20
20
|
hashDaemonWorkspace
|
|
21
21
|
} from "./chunk-MGSSJT27.js";
|
|
@@ -25,7 +25,7 @@ import {
|
|
|
25
25
|
import {
|
|
26
26
|
writeStderrLine,
|
|
27
27
|
writeStdoutLine
|
|
28
|
-
} from "./chunk-
|
|
28
|
+
} from "./chunk-KGJGEEVR.js";
|
|
29
29
|
import {
|
|
30
30
|
init_esbuild_shims
|
|
31
31
|
} from "./chunk-5O2XNYP6.js";
|
|
@@ -5,10 +5,10 @@ import {
|
|
|
5
5
|
} from "./chunk-DP3IHZGG.js";
|
|
6
6
|
import {
|
|
7
7
|
t
|
|
8
|
-
} from "./chunk-
|
|
8
|
+
} from "./chunk-KHUA3NQV.js";
|
|
9
9
|
import {
|
|
10
10
|
getNpmCliPath
|
|
11
|
-
} from "./chunk-
|
|
11
|
+
} from "./chunk-JE44IPH6.js";
|
|
12
12
|
import {
|
|
13
13
|
getPackageJson
|
|
14
14
|
} from "./chunk-VJNBRRZG.js";
|
|
@@ -21,12 +21,12 @@ import {
|
|
|
21
21
|
getLanguageNameFromLocale,
|
|
22
22
|
getLanguageSettingsOptions,
|
|
23
23
|
t
|
|
24
|
-
} from "./chunk-
|
|
24
|
+
} from "./chunk-KHUA3NQV.js";
|
|
25
25
|
import {
|
|
26
26
|
getHomeEnvFallbackVars,
|
|
27
27
|
loadEnvironment,
|
|
28
28
|
preResolveHomeEnvOverrides
|
|
29
|
-
} from "./chunk-
|
|
29
|
+
} from "./chunk-RK2EE3T7.js";
|
|
30
30
|
import {
|
|
31
31
|
ENV_CORRUPTED_PATH,
|
|
32
32
|
ENV_WAS_RECOVERED
|
|
@@ -34,7 +34,7 @@ import {
|
|
|
34
34
|
import {
|
|
35
35
|
isWorkspaceTrusted,
|
|
36
36
|
updateSettingsFilePreservingFormat
|
|
37
|
-
} from "./chunk-
|
|
37
|
+
} from "./chunk-ACZRB7AD.js";
|
|
38
38
|
import {
|
|
39
39
|
require_strip_json_comments
|
|
40
40
|
} from "./chunk-ALGGS7UH.js";
|
|
@@ -46,10 +46,10 @@ import {
|
|
|
46
46
|
DEFAULT_TOOL_RESULTS_TOTAL_CHARS_THRESHOLD,
|
|
47
47
|
DEFAULT_TRUNCATE_TOOL_OUTPUT_LINES,
|
|
48
48
|
DEFAULT_TRUNCATE_TOOL_OUTPUT_THRESHOLD
|
|
49
|
-
} from "./chunk-
|
|
49
|
+
} from "./chunk-A4VTILZT.js";
|
|
50
50
|
import {
|
|
51
51
|
stripRuntimeSnapshotPrefix
|
|
52
|
-
} from "./chunk-
|
|
52
|
+
} from "./chunk-DIT4V3XH.js";
|
|
53
53
|
import {
|
|
54
54
|
DEFAULT_QWEN_CUSTOM_IGNORE_FILE_NAMES
|
|
55
55
|
} from "./chunk-432XCUHF.js";
|
|
@@ -1650,7 +1650,7 @@ var SETTINGS_SCHEMA = {
|
|
|
1650
1650
|
category: "Context",
|
|
1651
1651
|
requiresRestart: false,
|
|
1652
1652
|
default: DEFAULT_TOOL_RESULTS_TOTAL_CHARS_THRESHOLD,
|
|
1653
|
-
description: "Total compactable tool result output characters allowed in history before clearing oldest results. Use -1 to disable. This is a soft threshold: protected recent tool results may keep the total above it.",
|
|
1653
|
+
description: "Total compactable tool result output characters allowed in history before clearing oldest results. When exceeded, oldest results are cleared down to half this threshold (best effort) to preserve the provider prompt cache on later turns. Use -1 to disable. This is a soft threshold: protected recent tool results may keep the total above it.",
|
|
1654
1654
|
showInDialog: false
|
|
1655
1655
|
}
|
|
1656
1656
|
}
|
|
@@ -3098,6 +3098,71 @@ var SETTINGS_SCHEMA = {
|
|
|
3098
3098
|
description: "Settings to enable experimental features.",
|
|
3099
3099
|
showInDialog: false,
|
|
3100
3100
|
properties: {
|
|
3101
|
+
liveVoice: {
|
|
3102
|
+
type: "object",
|
|
3103
|
+
label: "Live Voice",
|
|
3104
|
+
category: "Experimental",
|
|
3105
|
+
requiresRestart: false,
|
|
3106
|
+
default: {},
|
|
3107
|
+
description: "Experimental realtime voice conversations through Qwen Live Host on macOS WebShell.",
|
|
3108
|
+
showInDialog: false,
|
|
3109
|
+
properties: {
|
|
3110
|
+
enabled: {
|
|
3111
|
+
type: "boolean",
|
|
3112
|
+
label: "Live Voice",
|
|
3113
|
+
category: "Experimental",
|
|
3114
|
+
requiresRestart: false,
|
|
3115
|
+
default: false,
|
|
3116
|
+
description: "Enable experimental realtime voice conversations on macOS WebShell.",
|
|
3117
|
+
showInDialog: false
|
|
3118
|
+
},
|
|
3119
|
+
apiKey: {
|
|
3120
|
+
type: "string",
|
|
3121
|
+
label: "DashScope Realtime API Key",
|
|
3122
|
+
category: "Experimental",
|
|
3123
|
+
requiresRestart: false,
|
|
3124
|
+
default: "",
|
|
3125
|
+
description: "Dedicated DashScope API key for qwen3.5-omni-plus-realtime.",
|
|
3126
|
+
showInDialog: false
|
|
3127
|
+
},
|
|
3128
|
+
model: {
|
|
3129
|
+
type: "string",
|
|
3130
|
+
label: "Live Voice Model",
|
|
3131
|
+
category: "Experimental",
|
|
3132
|
+
requiresRestart: false,
|
|
3133
|
+
default: "qwen3.5-omni-plus-realtime",
|
|
3134
|
+
description: "Upstream Realtime model used for Live Voice.",
|
|
3135
|
+
showInDialog: false
|
|
3136
|
+
},
|
|
3137
|
+
endpoint: {
|
|
3138
|
+
type: "string",
|
|
3139
|
+
label: "Live Voice Endpoint",
|
|
3140
|
+
category: "Experimental",
|
|
3141
|
+
requiresRestart: false,
|
|
3142
|
+
default: "wss://dashscope.aliyuncs.com/api-ws/v1/realtime",
|
|
3143
|
+
description: "Advanced override for the DashScope Realtime WebSocket endpoint.",
|
|
3144
|
+
showInDialog: false
|
|
3145
|
+
},
|
|
3146
|
+
voice: {
|
|
3147
|
+
type: "string",
|
|
3148
|
+
label: "Live Voice Output Voice",
|
|
3149
|
+
category: "Experimental",
|
|
3150
|
+
requiresRestart: false,
|
|
3151
|
+
default: "Tina",
|
|
3152
|
+
description: "Voice used for Realtime model audio output.",
|
|
3153
|
+
showInDialog: false
|
|
3154
|
+
},
|
|
3155
|
+
shortcut: {
|
|
3156
|
+
type: "string",
|
|
3157
|
+
label: "Live Voice Global Shortcut",
|
|
3158
|
+
category: "Experimental",
|
|
3159
|
+
requiresRestart: false,
|
|
3160
|
+
default: "Command+E",
|
|
3161
|
+
description: "Electron accelerator registered globally by Qwen Live Host.",
|
|
3162
|
+
showInDialog: false
|
|
3163
|
+
}
|
|
3164
|
+
}
|
|
3165
|
+
},
|
|
3101
3166
|
sessionWorkflow: {
|
|
3102
3167
|
type: "boolean",
|
|
3103
3168
|
label: "Session Workflow Plan & Review",
|