@qwen-code/qwen-code 0.23.1 → 0.23.2-nightly.20260909.2e212144d3

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.
Files changed (293) hide show
  1. package/README.md +35 -15
  2. package/bundled/computer-use/SKILL.md +1 -1
  3. package/bundled/qc-helper/docs/configuration/auth.md +1 -1
  4. package/bundled/qc-helper/docs/configuration/model-providers.md +19 -15
  5. package/bundled/qc-helper/docs/configuration/settings.md +1 -1
  6. package/bundled/qc-helper/docs/features/_meta.ts +1 -0
  7. package/bundled/qc-helper/docs/features/channels/dingtalk.md +1 -1
  8. package/bundled/qc-helper/docs/features/channels/github.md +1 -9
  9. package/bundled/qc-helper/docs/features/channels/overview.md +26 -51
  10. package/bundled/qc-helper/docs/features/channels/qqbot.md +1 -2
  11. package/bundled/qc-helper/docs/features/commands.md +79 -17
  12. package/bundled/qc-helper/docs/features/computer-use.md +1 -1
  13. package/bundled/qc-helper/docs/features/cross-session-protocol.md +291 -0
  14. package/bundled/qc-helper/docs/features/goals.md +3 -1
  15. package/bundled/qc-helper/docs/features/sub-agents.md +8 -0
  16. package/bundled/qc-helper/docs/qwen-serve.md +62 -48
  17. package/chunks/{MaxSizedBox-UDO6Y7RB.js → MaxSizedBox-ZBGWYJZW.js} +20 -19
  18. package/chunks/{StandaloneSessionPicker-D4CUOO4H.js → StandaloneSessionPicker-NR5ACIJZ.js} +35 -34
  19. package/chunks/{acpAgent-KWLJFADK.js → acpAgent-DM6XRCDQ.js} +307 -183
  20. package/chunks/{agent-GSUPGEOL.js → agent-EF3IIYE3.js} +13 -13
  21. package/chunks/{agent-headless-HNYCQUJB.js → agent-headless-5J2KFYR4.js} +13 -13
  22. package/chunks/{anthropicContentGenerator-I7LQZH26.js → anthropicContentGenerator-VIW2FG7G.js} +4 -4
  23. package/chunks/{artifact-tool-P52OKKEF.js → artifact-tool-G5LHNECG.js} +1 -1
  24. package/chunks/{askUserQuestion-I5W5S3D6.js → askUserQuestion-R3TXY77M.js} +1 -1
  25. package/chunks/{bridge-B7CV6RVI.js → bridge-LEMQM6QE.js} +21 -20
  26. package/chunks/{channel-management-service-TRTLQTSV.js → channel-management-service-TGF6XFXT.js} +4 -4
  27. package/chunks/{channel-settings-store-FW45IRUP.js → channel-settings-store-FV365JSF.js} +29 -28
  28. package/chunks/{channel-worker-group-PIYPVCTF.js → channel-worker-group-SQ5FRWOH.js} +5 -5
  29. package/chunks/{channel-worker-manager-FQHEDTD2.js → channel-worker-manager-TU4ZNWOE.js} +5 -5
  30. package/chunks/{channel-worker-supervisor-XJPZZ3VK.js → channel-worker-supervisor-EMITFMCP.js} +4 -4
  31. package/chunks/{chunk-3SH53ANB.js → chunk-22GORRNY.js} +12 -0
  32. package/chunks/{chunk-3LPJ776W.js → chunk-2HYOOFDS.js} +9 -6
  33. package/chunks/{chunk-S6QVI3MV.js → chunk-34VPADLG.js} +2 -2
  34. package/chunks/{chunk-WJDXKQIO.js → chunk-3A2IMUDH.js} +14 -2
  35. package/chunks/{chunk-DXQ6Z7AH.js → chunk-3O77M472.js} +224 -84
  36. package/chunks/{chunk-5CVY5Q2P.js → chunk-43EUMPKQ.js} +1 -1
  37. package/chunks/{chunk-ZNO5BUAD.js → chunk-4DIMJKWU.js} +46 -37
  38. package/chunks/{chunk-O2JBJQCF.js → chunk-5HV2HPO7.js} +1 -1
  39. package/chunks/{chunk-RXT4QBDX.js → chunk-5WBA3DEF.js} +1 -1
  40. package/chunks/{chunk-ARYNBBBM.js → chunk-6GAYNM3F.js} +3 -3
  41. package/chunks/{chunk-EEKU6COG.js → chunk-6S7YYUUH.js} +3 -3
  42. package/chunks/{chunk-OPMKGOLD.js → chunk-6VIATHL7.js} +1 -1
  43. package/chunks/{chunk-ENZDGHGJ.js → chunk-76I36BEM.js} +3 -3
  44. package/chunks/{chunk-B54PFQS5.js → chunk-7CLLH5TI.js} +1 -1
  45. package/chunks/{chunk-UHUT4IDM.js → chunk-7IDZFJAV.js} +9 -9
  46. package/chunks/{chunk-5Z4FCEPY.js → chunk-7K4GGN3D.js} +606 -109
  47. package/chunks/{chunk-ZPL2TZNA.js → chunk-7KZVXJ4U.js} +1 -1
  48. package/chunks/{chunk-FWRRUITH.js → chunk-7WCJEY3A.js} +4 -4
  49. package/chunks/{chunk-MFYH2VXV.js → chunk-A7QZIGRB.js} +2 -2
  50. package/chunks/{chunk-27LTEY6D.js → chunk-ATBLEXXV.js} +7 -2
  51. package/chunks/{chunk-3BTHHXXE.js → chunk-AUTUFD5X.js} +1 -1
  52. package/chunks/chunk-AXMWHKXA.js +42 -0
  53. package/chunks/{chunk-QZOXVQPK.js → chunk-AXWTG6R7.js} +2 -5
  54. package/chunks/{chunk-PDUMGZ2P.js → chunk-BDAVT6K2.js} +486 -409
  55. package/chunks/{chunk-2YS3NU4A.js → chunk-BDP3NTWD.js} +3 -3
  56. package/chunks/{chunk-IKG2YVRZ.js → chunk-BZUHZCUO.js} +2 -2
  57. package/chunks/{chunk-USN6VNTO.js → chunk-C24ZDDNY.js} +1 -1
  58. package/chunks/{chunk-RPFJJ33Z.js → chunk-CALTQWTZ.js} +1 -1
  59. package/chunks/{chunk-BF3RUIVP.js → chunk-CH2YDT6X.js} +36 -38
  60. package/chunks/{chunk-3VDLQUR2.js → chunk-D6AGS266.js} +1 -1
  61. package/chunks/{chunk-DO5SMV52.js → chunk-D7DFZAK2.js} +17 -11
  62. package/chunks/{chunk-GM44O6F7.js → chunk-DARWOZY6.js} +1 -1
  63. package/chunks/{chunk-HUX2DOTF.js → chunk-DGNRLJ6S.js} +3 -3
  64. package/chunks/{chunk-FW4E4QPG.js → chunk-DVOCOIS5.js} +1 -1
  65. package/chunks/{chunk-OESZTXTG.js → chunk-E4LXNQAK.js} +1 -1
  66. package/chunks/{chunk-TWAMIEQ2.js → chunk-EATP5QCN.js} +16 -18
  67. package/chunks/{chunk-DZ6D4B3K.js → chunk-EDSU3VUG.js} +12 -5
  68. package/chunks/{chunk-EOET4H7C.js → chunk-EE5ZD4XU.js} +3 -3
  69. package/chunks/{chunk-B3EL44K3.js → chunk-EN3Q2S3J.js} +3 -3
  70. package/chunks/{chunk-N7YQEKGX.js → chunk-EOLGAQ25.js} +16 -15
  71. package/chunks/{chunk-3YQMUBTS.js → chunk-EYCW6UF2.js} +7 -7
  72. package/chunks/{chunk-ZELCTN6Y.js → chunk-F23YN37B.js} +10 -0
  73. package/chunks/{chunk-FPGTNKCP.js → chunk-F3M6P6IQ.js} +199 -1
  74. package/chunks/{chunk-B44JBZBB.js → chunk-F4SAL7WM.js} +91 -3
  75. package/chunks/{chunk-XZ3Z43XL.js → chunk-FEEVHJOR.js} +3 -3
  76. package/chunks/{chunk-CHVU543W.js → chunk-FN4KHWCL.js} +1 -1
  77. package/chunks/{chunk-6QV7Z74P.js → chunk-FRS3P7MQ.js} +15 -2
  78. package/chunks/{chunk-FDOGGKAA.js → chunk-GSFV5RQW.js} +2 -0
  79. package/chunks/{chunk-XBVNNDPK.js → chunk-GSYD7MYP.js} +8 -3
  80. package/chunks/{chunk-VF6D6EGV.js → chunk-HSO6D4KX.js} +82 -25
  81. package/chunks/{chunk-L7V52QEZ.js → chunk-HUJJFSMO.js} +10 -10
  82. package/chunks/{chunk-CIKL2DQP.js → chunk-HW4MRP4V.js} +1 -1
  83. package/chunks/{chunk-TWWS7XUW.js → chunk-HWLLUDIA.js} +108 -16
  84. package/chunks/{chunk-75LBC7SV.js → chunk-IKK6NNS6.js} +32 -29
  85. package/chunks/{chunk-UXDVUFKU.js → chunk-JFAGT5YG.js} +2 -2
  86. package/chunks/{chunk-6SADVYQQ.js → chunk-JGTMTJSQ.js} +1 -1
  87. package/chunks/{chunk-45ROPFQY.js → chunk-JYGIJA4W.js} +1 -1
  88. package/chunks/{chunk-5WC2ECUK.js → chunk-KECCLCXM.js} +42 -8
  89. package/chunks/{chunk-CABDNUJ4.js → chunk-KEPC5BOL.js} +5 -5
  90. package/chunks/{chunk-WNISCNTA.js → chunk-L5VHJYHH.js} +2 -2
  91. package/chunks/{chunk-25CBAK3H.js → chunk-LKBOBUA2.js} +2 -2
  92. package/chunks/{chunk-6QILGINT.js → chunk-LOBKNYPR.js} +2 -2
  93. package/chunks/{chunk-2ZFO5JD7.js → chunk-LOVGQ3HZ.js} +9 -9
  94. package/chunks/{chunk-QK4K76T6.js → chunk-MUF4UGPB.js} +2 -2
  95. package/chunks/{chunk-JGDRB4FP.js → chunk-N3Z6Q7KC.js} +125 -10
  96. package/chunks/chunk-NFXXBWSE.js +463 -0
  97. package/chunks/{chunk-PQSCGZT2.js → chunk-NPKCVSXX.js} +26 -2
  98. package/chunks/{chunk-YCEKI7QX.js → chunk-NV4YYXFT.js} +1 -1
  99. package/chunks/{chunk-5IL2BZHW.js → chunk-O6BFERWN.js} +3 -3
  100. package/chunks/{chunk-TGC4264Q.js → chunk-OVTPETDL.js} +5 -5
  101. package/chunks/chunk-PLEBBGHL.js +1401 -0
  102. package/chunks/{chunk-3VWPPK5Q.js → chunk-PWR6BQ3U.js} +4 -4
  103. package/chunks/{chunk-D6AQNMUA.js → chunk-QA2B26PL.js} +3 -3
  104. package/chunks/{chunk-NFIDVZND.js → chunk-QB3KS3N3.js} +2 -21
  105. package/chunks/{chunk-LNCNUMJ5.js → chunk-SK6VACCM.js} +558 -158
  106. package/chunks/{chunk-YAC7H4K3.js → chunk-SM66GFKJ.js} +1 -1
  107. package/chunks/{chunk-MA5OUNN6.js → chunk-SNMUO5Z7.js} +1 -1
  108. package/chunks/{chunk-IRKQ4YYX.js → chunk-SVWWF5TZ.js} +29 -1
  109. package/chunks/{chunk-6JXHO7LG.js → chunk-SYKPMH2X.js} +3 -3
  110. package/chunks/{chunk-5HBA2Z7V.js → chunk-TGNNLRC3.js} +2 -3
  111. package/chunks/{chunk-EHTKOO6W.js → chunk-TRQNRP2H.js} +2 -2
  112. package/chunks/{chunk-LZGFVUWZ.js → chunk-UQOP2APG.js} +4 -24
  113. package/chunks/{chunk-T2IHCZLS.js → chunk-VAWM3A5N.js} +1 -1
  114. package/chunks/{chunk-M73KHGNR.js → chunk-VJJXG73H.js} +404 -226
  115. package/chunks/{chunk-WAASYFPK.js → chunk-VJWJOKOQ.js} +2 -2
  116. package/chunks/{chunk-WQMUGQ6G.js → chunk-VR6Y23FW.js} +1 -1
  117. package/chunks/{chunk-E7XSUYCZ.js → chunk-VX2NR3SD.js} +19 -4
  118. package/chunks/{chunk-XVTCSVBK.js → chunk-WDVV3LRM.js} +193 -169
  119. package/chunks/{chunk-RNYENHN5.js → chunk-WEU6O6VN.js} +2 -2
  120. package/chunks/{chunk-YHDGABDC.js → chunk-XKBFYTCD.js} +1 -1
  121. package/chunks/{chunk-66JBCTJF.js → chunk-Y7YHAY32.js} +23 -6
  122. package/chunks/{chunk-7SL55L5H.js → chunk-YIE6REQ5.js} +20 -15
  123. package/chunks/{chunk-ZU2T5JIS.js → chunk-ZEFWBG2C.js} +736 -1148
  124. package/chunks/{chunk-6TPVIESH.js → chunk-ZM2TCZZ7.js} +3 -3
  125. package/chunks/{chunk-2TMJRF46.js → chunk-ZZ7RVOTU.js} +50 -18
  126. package/chunks/{config-utils-KTDSQ4MU.js → config-utils-SXFK3G4X.js} +24 -23
  127. package/chunks/{contextCommand-UQ3KRYGK.js → contextCommand-QFPD26QO.js} +21 -20
  128. package/chunks/{core-runtime-JR34JAFH.js → core-runtime-VXKNBODM.js} +26 -24
  129. package/chunks/{create-sub-session-RGPJOI4S.js → create-sub-session-7WSQETFR.js} +20 -19
  130. package/chunks/{daemon-UI6SQSBV.js → daemon-U2456K5H.js} +2 -2
  131. package/chunks/{daemon-git-worktree-guard-H3OA26KQ.js → daemon-git-worktree-guard-I4DCSDUS.js} +20 -19
  132. package/chunks/{daemon-status-provider-6WZLKSZU.js → daemon-status-provider-5UV56RI4.js} +25 -24
  133. package/chunks/{daemon-trust-policy-3EDP2BYD.js → daemon-trust-policy-DKIBWTKU.js} +25 -24
  134. package/chunks/{daemon-trust-policy-monitor-CRHZPK52.js → daemon-trust-policy-monitor-CPSD7UKT.js} +25 -24
  135. package/chunks/{deferred-core-runtime-LO5NTQQ4.js → deferred-core-runtime-D2RF35BL.js} +20 -19
  136. package/chunks/{dist-STAGIFNB.js → dist-6YDUH3BB.js} +388 -102
  137. package/chunks/{dist-XJ25G6OH.js → dist-BNQVF565.js} +2 -8
  138. package/chunks/{dist-NQ2636VT.js → dist-F34J4FZX.js} +1 -1
  139. package/chunks/{dist-OR2ZQTXZ.js → dist-F6JLAJLE.js} +1 -1
  140. package/chunks/{dist-24TCWK5H.js → dist-K5GHMXIG.js} +2 -2
  141. package/chunks/{dist-WZTUKIDR.js → dist-NP7QKLVG.js} +2 -2
  142. package/chunks/{dist-M4CBX53H.js → dist-UFTFGI6I.js} +1 -1
  143. package/chunks/{dist-5I4HLUTO.js → dist-XLV33CLY.js} +1 -2
  144. package/chunks/{dist-FDISN4AK.js → dist-ZDNJK74R.js} +3 -7
  145. package/chunks/{edit-LB7Z7XK5.js → edit-4IBADZ3O.js} +13 -13
  146. package/chunks/{enterPlanMode-P6TVUFIY.js → enterPlanMode-YN3GPQU5.js} +13 -13
  147. package/chunks/{environment-QATJNNKI.js → environment-E272IJMF.js} +22 -21
  148. package/chunks/{errors-3XJ37PS2.js → errors-CVAH3RWQ.js} +22 -21
  149. package/chunks/{exitPlanMode-A3OKL5UO.js → exitPlanMode-24J5IHGC.js} +13 -13
  150. package/chunks/{fast-path-DBIT5YQQ.js → fast-path-M5IDBMXF.js} +3 -3
  151. package/chunks/{glob-73EDTXUE.js → glob-ERBD7JYP.js} +13 -13
  152. package/chunks/{goal-tools-DFI6YMSD.js → goal-tools-245ULLQT.js} +13 -13
  153. package/chunks/{handleAutoUpdate-2FUNJO3B.js → handleAutoUpdate-JDZHHZKK.js} +22 -21
  154. package/chunks/{i18n-FDIA6KFI.js → i18n-LA4D5IXM.js} +20 -19
  155. package/chunks/{initializer-4MJTJOTW.js → initializer-SHPTSWUZ.js} +25 -24
  156. package/chunks/{installationInfo-232RA2OK.js → installationInfo-QEQEPB3G.js} +20 -19
  157. package/chunks/{list-WN6WSGEB.js → list-IBHCQWTF.js} +28 -27
  158. package/chunks/{list-agents-I5TRH3J7.js → list-agents-EDPZCGKN.js} +5 -4
  159. package/chunks/{llm-UDFWQWZA.js → llm-JAWCQLA4.js} +68 -62
  160. package/chunks/{llm-content-generator-VLMZ2A7A.js → llm-content-generator-GOV3A23T.js} +2 -2
  161. package/chunks/{loadedSettingsAdapter-OBQEIXM7.js → loadedSettingsAdapter-RVE2GNVU.js} +25 -24
  162. package/chunks/{loggingContentGenerator-RGVUMUVX.js → loggingContentGenerator-SSHNN5YW.js} +15 -15
  163. package/chunks/{managed-npm-update-QBAJYCFU.js → managed-npm-update-BHSTITQO.js} +20 -19
  164. package/chunks/{mcp-OTIZZCPY.js → mcp-6ZZ7P2HU.js} +25 -24
  165. package/chunks/{monitor-BV5XF6LL.js → monitor-RKK6GSHG.js} +13 -13
  166. package/chunks/{nonInteractiveCli-W6MUKDVJ.js → nonInteractiveCli-UQHP3G6P.js} +58 -57
  167. package/chunks/{notebook-edit-HGBEKGTE.js → notebook-edit-YM47A7WO.js} +13 -13
  168. package/chunks/{open-with-auth-D6JD6LDS.js → open-with-auth-6MVIHMXB.js} +1 -1
  169. package/chunks/{openaiContentGenerator-NSU3ERBH.js → openaiContentGenerator-FHKDWNI2.js} +9 -9
  170. package/chunks/{pidfile-LE3TU4GE.js → pidfile-SIIEJEEH.js} +23 -20
  171. package/chunks/{processUtils-YFBGJK67.js → processUtils-JF7CWBJC.js} +2 -2
  172. package/chunks/{prompt-terminal-ledger-4W4W7DSO.js → prompt-terminal-ledger-FXXHAEQU.js} +21 -20
  173. package/chunks/{qwenContentGenerator-HTA57WFC.js → qwenContentGenerator-KFJ77JP6.js} +16 -16
  174. package/chunks/{read-file-KHPQ2MB6.js → read-file-S2NOCBIL.js} +4 -4
  175. package/chunks/{resumeHistoryUtils-K7RV3QBN.js → resumeHistoryUtils-QHHPSQWU.js} +22 -21
  176. package/chunks/{ripGrep-NBBVCMG4.js → ripGrep-F6TNOJUO.js} +5 -5
  177. package/chunks/{run-qwen-serve-A3JBOZCM.js → run-qwen-serve-KYBDQRDD.js} +216 -64
  178. package/chunks/{runtime-7YOU2KJ3.js → runtime-3WNOFLCR.js} +32 -29
  179. package/chunks/{scheduled-tasks-52LXK7LN.js → scheduled-tasks-RNBH56DJ.js} +23 -22
  180. package/chunks/{scheduler-J44M72VM.js → scheduler-ERMW7Q7B.js} +22 -21
  181. package/chunks/{send-message-AWKUDJBH.js → send-message-V5T3NMFM.js} +3 -3
  182. package/chunks/{serve-TRC6XJUB.js → serve-7NV46RMP.js} +25 -24
  183. package/chunks/{server-YPNTJLX2.js → server-6RZJR5QF.js} +106 -154
  184. package/chunks/{session-FMMIBFYX.js → session-Z4EV7NVV.js} +91 -63
  185. package/chunks/{session-attachments-root-LDJMNK7K.js → session-attachments-root-SG5FC52X.js} +20 -19
  186. package/chunks/{session-pr-refresh-NLR4EK2J.js → session-pr-refresh-ILC4Z3ZM.js} +22 -21
  187. package/chunks/{settings-A46L577J.js → settings-Y47SPE3X.js} +24 -23
  188. package/chunks/{shell-Q5LSQPPY.js → shell-YBVCOPVO.js} +13 -13
  189. package/chunks/{skill-75KPJRCM.js → skill-AXC63EBA.js} +4 -4
  190. package/chunks/{skill-settings-775YT4YR.js → skill-settings-AFPAYGLO.js} +24 -23
  191. package/chunks/{spawnChannel-XY73I5CU.js → spawnChannel-ZFL4J2V3.js} +20 -19
  192. package/chunks/{standalone-update-L46XXNQ2.js → standalone-update-Y2OZPLNJ.js} +21 -20
  193. package/chunks/{start-opentui-ui-WLV43247.js → start-opentui-ui-G6TKT4LI.js} +449 -210
  194. package/chunks/{startInteractiveUI-F5DKMLOV.js → startInteractiveUI-YTNDPW7J.js} +1182 -1245
  195. package/chunks/{task-create-PMAFST2T.js → task-create-MWXJFRRM.js} +3 -3
  196. package/chunks/{task-list-R2HSY2NC.js → task-list-EYO3FE57.js} +2 -2
  197. package/chunks/{task-update-JYC57USF.js → task-update-2JJJRHMT.js} +3 -3
  198. package/chunks/{team-create-2PATB77U.js → team-create-BUFLGGSH.js} +13 -13
  199. package/chunks/{team-delete-CBHVBTPB.js → team-delete-IQZ6XGFI.js} +2 -2
  200. package/chunks/{team-plan-approval-QTANEWOS.js → team-plan-approval-OUWWM42U.js} +13 -13
  201. package/chunks/{terminal-image-renderer-OGULCFNF.js → terminal-image-renderer-WH2WV5ES.js} +20 -19
  202. package/chunks/{theme-manager-CNO3QERP.js → theme-manager-5UDRARM2.js} +20 -19
  203. package/chunks/{tool-search-VXWEOZE7.js → tool-search-MCDIRPHN.js} +4 -4
  204. package/chunks/{total-session-admission-4KAADZPB.js → total-session-admission-VL27U74Z.js} +21 -20
  205. package/chunks/{trustedFolders-PPJSOPOT.js → trustedFolders-MSXT4VDD.js} +21 -20
  206. package/chunks/{update-relaunch-4PT4MW7B.js → update-relaunch-JKLEWVCB.js} +5 -5
  207. package/chunks/{updateCheck-WAVFLWNG.js → updateCheck-ARTHAJT2.js} +20 -19
  208. package/chunks/{useAutoAcceptIndicator-XNED4NRB.js → useAutoAcceptIndicator-YEAAGYVU.js} +26 -25
  209. package/chunks/{validateNonInterActiveAuth-J676DUQ2.js → validateNonInterActiveAuth-EMRQKH5S.js} +56 -55
  210. package/chunks/{version-J6SRRQB2.js → version-HFQU35WD.js} +3 -1
  211. package/chunks/{web-fetch-FMZZYX44.js → web-fetch-QBXAO6VF.js} +4 -4
  212. package/chunks/{web-search-3G2KXCX5.js → web-search-2URQXA3A.js} +186 -9
  213. package/chunks/{web-shell-static-POZHGGXE.js → web-shell-static-BFDESDD4.js} +5 -4
  214. package/chunks/{workflow-PPZZICQ7.js → workflow-JDD6WDAH.js} +204 -68
  215. package/chunks/{workspace-providers-status-IIYTAQST.js → workspace-providers-status-B4IKR6YJ.js} +27 -26
  216. package/chunks/{workspace-registration-store-VHCDXAV7.js → workspace-registration-store-PJ3YHR45.js} +1 -2
  217. package/chunks/{workspace-registry-I7VQIPS2.js → workspace-registry-WVYJ5UGB.js} +21 -20
  218. package/chunks/{workspace-runtime-coordinator-DBGNY32G.js → workspace-runtime-coordinator-DXL5YVAG.js} +21 -20
  219. package/chunks/{workspace-service-QSKB2T54.js → workspace-service-QNGAMVH7.js} +26 -25
  220. package/chunks/{workspace-skills-status-T7GPT65J.js → workspace-skills-status-BEISJIII.js} +25 -24
  221. package/chunks/{workspace-trust-reconciler-2PKRDAU4.js → workspace-trust-reconciler-ORYJF5L4.js} +26 -25
  222. package/chunks/{write-file-L76CGFTQ.js → write-file-DWLKFBTJ.js} +14 -14
  223. package/chunks/{zoom-image-TDJJY2VZ.js → zoom-image-BYVIXSNQ.js} +4 -4
  224. package/cli.js +12 -12
  225. package/export-transcript-document.js +106 -106
  226. package/package.json +4 -4
  227. package/web-shell/assets/{abnfDiagram-VCTEODGH-DHc6plZn.js → abnfDiagram-VCTEODGH-C_8kzsly.js} +1 -1
  228. package/web-shell/assets/{arc-BQ9m8TDV.js → arc-CDg7Zfpm.js} +1 -1
  229. package/web-shell/assets/{architectureDiagram-5GKGNRK7-D5ap3oVB.js → architectureDiagram-5GKGNRK7-DZzdCWyF.js} +1 -1
  230. package/web-shell/assets/{blockDiagram-NRAW4CY4-BIbnyNph.js → blockDiagram-NRAW4CY4-DI3B4gyR.js} +1 -1
  231. package/web-shell/assets/{c4Diagram-UCG6FXSJ-BRsdx_iG.js → c4Diagram-UCG6FXSJ-CfOgwHZW.js} +1 -1
  232. package/web-shell/assets/channel-e4xwS72w.js +1 -0
  233. package/web-shell/assets/{chunk-2Q5K7J3B-3lf1fNlx.js → chunk-2Q5K7J3B-B_PUth0g.js} +1 -1
  234. package/web-shell/assets/{chunk-5VM5RSS4-DP8VNRc4.js → chunk-5VM5RSS4-CrKtvBIL.js} +1 -1
  235. package/web-shell/assets/{chunk-F27PBJKO-DrohDmZ6.js → chunk-F27PBJKO-B4z2n8Py.js} +1 -1
  236. package/web-shell/assets/{chunk-G27WJ6UU-UZ2QhSx6.js → chunk-G27WJ6UU-BUtrFEO8.js} +1 -1
  237. package/web-shell/assets/{chunk-JWPE2WC7-BIMHVcZK.js → chunk-JWPE2WC7-Cqw3aXW0.js} +1 -1
  238. package/web-shell/assets/{chunk-LCL6LL3I-izRxdSDd.js → chunk-LCL6LL3I-CZolnvls.js} +1 -1
  239. package/web-shell/assets/{chunk-POPQ4Y6H-CXADD4PP.js → chunk-POPQ4Y6H-DivgasCa.js} +1 -1
  240. package/web-shell/assets/{chunk-SVP7TREG-B96d8Y_1.js → chunk-SVP7TREG--seyb1B6.js} +1 -1
  241. package/web-shell/assets/{chunk-XXDRQBXY-CF2sVQpv.js → chunk-XXDRQBXY-D7pHtuVM.js} +1 -1
  242. package/web-shell/assets/classDiagram-DTDB5LWJ-CzXfUUOt.js +1 -0
  243. package/web-shell/assets/classDiagram-v2-JRS7N3AN-CzXfUUOt.js +1 -0
  244. package/web-shell/assets/{cose-bilkent-JH36ORCC-CT6tXVAS.js → cose-bilkent-JH36ORCC-4MWaRF_3.js} +1 -1
  245. package/web-shell/assets/{cynefin-OW5HDTMX-X1NS4vtV.js → cynefin-OW5HDTMX-nhJhAjgD.js} +1 -1
  246. package/web-shell/assets/{cynefinDiagram-5FMLGOSQ-DNsKNOT4.js → cynefinDiagram-5FMLGOSQ-NF-PwXlq.js} +1 -1
  247. package/web-shell/assets/{dagre-3AP2YEHR-9-AHKqsb.js → dagre-3AP2YEHR-Bu0ncdWP.js} +1 -1
  248. package/web-shell/assets/{diagram-S7CK7UJ4-Bjgms7j6.js → diagram-S7CK7UJ4-CsvhFHZC.js} +1 -1
  249. package/web-shell/assets/{diagram-UQ7AKVKN-h6bCprbE.js → diagram-UQ7AKVKN-Ck61sIB3.js} +1 -1
  250. package/web-shell/assets/{diagram-VSXAHHWV-4SbQXVLt.js → diagram-VSXAHHWV-D0171zrb.js} +1 -1
  251. package/web-shell/assets/{diagram-VX7I27RA-B5gPCzzB.js → diagram-VX7I27RA-DvdxY4UL.js} +1 -1
  252. package/web-shell/assets/{diagram-Z3DM3KII-DFJXIA3A.js → diagram-Z3DM3KII-CGGpseiB.js} +1 -1
  253. package/web-shell/assets/{ebnfDiagram-PWID7BFC-FwyaU7VY.js → ebnfDiagram-PWID7BFC-K8-QMvY8.js} +1 -1
  254. package/web-shell/assets/{erDiagram-SSCWMZ5O-8vJQh2te.js → erDiagram-SSCWMZ5O-D316nAem.js} +1 -1
  255. package/web-shell/assets/{flowDiagram-A5DVABFB-BzA_1gMN.js → flowDiagram-A5DVABFB-B7siy_mn.js} +1 -1
  256. package/web-shell/assets/{ganttDiagram-EL5Y4UJY-Co-ABbVX.js → ganttDiagram-EL5Y4UJY-BZQDxzTu.js} +1 -1
  257. package/web-shell/assets/{gitGraphDiagram-WWUBYQGX-DW_FcyrX.js → gitGraphDiagram-WWUBYQGX-DZynLCSV.js} +1 -1
  258. package/web-shell/assets/{index-BbMXfhNG.js → index-9ie6xLTM.js} +1 -1
  259. package/web-shell/assets/{index-Bu-rZoJ-.js → index-DirkXQEg.js} +488 -474
  260. package/web-shell/assets/index-DzdST_7L.css +36 -0
  261. package/web-shell/assets/{infoDiagram-RXCK75RN-BEgfhUFN.js → infoDiagram-RXCK75RN-B0gr769A.js} +1 -1
  262. package/web-shell/assets/{ishikawaDiagram-5VMMS53U-DCsMxQmc.js → ishikawaDiagram-5VMMS53U-0pQFfjvX.js} +1 -1
  263. package/web-shell/assets/{journeyDiagram-EYS64GPL-DyIEYoHz.js → journeyDiagram-EYS64GPL-DEGtClWb.js} +1 -1
  264. package/web-shell/assets/{kanban-definition-3QL26DDD-CkxjqCNr.js → kanban-definition-3QL26DDD-CnN8gPzw.js} +1 -1
  265. package/web-shell/assets/{layout-BEWc0Al9.js → layout-C_70RhaT.js} +1 -1
  266. package/web-shell/assets/{linear-CNuNxirL.js → linear-BJ2ZLmcq.js} +1 -1
  267. package/web-shell/assets/{mermaid.core-DZBre674.js → mermaid.core-RlY0zPNC.js} +6 -6
  268. package/web-shell/assets/{mindmap-definition-FBJOCRG2-CpafFz_F.js → mindmap-definition-FBJOCRG2-CpVAxTNl.js} +1 -1
  269. package/web-shell/assets/{pegDiagram-XKGWAZYB-DfZqk_dq.js → pegDiagram-XKGWAZYB-DmrSv3hD.js} +1 -1
  270. package/web-shell/assets/{pieDiagram-E7YTZNPT-S0UWXlgC.js → pieDiagram-E7YTZNPT-CJmgp8KJ.js} +1 -1
  271. package/web-shell/assets/{quadrantDiagram-AXDQQJYC-dd37_Ohj.js → quadrantDiagram-AXDQQJYC-UsgOyNco.js} +1 -1
  272. package/web-shell/assets/{railroadDiagram-O6MQD6OU-CH8NJZ7u.js → railroadDiagram-O6MQD6OU-DQ6gMs_W.js} +1 -1
  273. package/web-shell/assets/{requirementDiagram-EFPCY7ZU-CFdqWYih.js → requirementDiagram-EFPCY7ZU-DhqadamF.js} +1 -1
  274. package/web-shell/assets/{sankeyDiagram-P5KCCOFB-CsddcEGD.js → sankeyDiagram-P5KCCOFB-R4WnURaE.js} +1 -1
  275. package/web-shell/assets/{sequenceDiagram-WJ2MYXX4-BZ270mGw.js → sequenceDiagram-WJ2MYXX4-D7BwMi_D.js} +1 -1
  276. package/web-shell/assets/{sizeCapture-X5ZJPWSS-CGaS4DBV.js → sizeCapture-X5ZJPWSS-Bqngz088.js} +1 -1
  277. package/web-shell/assets/{stateDiagram-HBIQ2CUA-COpIzMu6.js → stateDiagram-HBIQ2CUA-DwaXPGqn.js} +1 -1
  278. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-8GCQZAvv.js +1 -0
  279. package/web-shell/assets/{swimlanes-XN3QIQJK-CMF889m3.js → swimlanes-XN3QIQJK-BsaLeRDY.js} +1 -1
  280. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-BoRBF2Yw.js +8 -0
  281. package/web-shell/assets/{timeline-definition-24CTP7MA-BelnxYz5.js → timeline-definition-24CTP7MA-NJ9G-NUU.js} +1 -1
  282. package/web-shell/assets/{vennDiagram-4TSXK5OY-CU-NRqIB.js → vennDiagram-4TSXK5OY-Ca3W4rSq.js} +1 -1
  283. package/web-shell/assets/{wardleyDiagram-VM6X3IG4-CDNKqWh-.js → wardleyDiagram-VM6X3IG4-OabvjC-6.js} +1 -1
  284. package/web-shell/assets/{xychartDiagram-S5SC5T6Z-CLqguL5D.js → xychartDiagram-S5SC5T6Z-C7rbjvpc.js} +1 -1
  285. package/web-shell/index.html +2 -2
  286. package/chunks/chunk-6YEOCHSE.js +0 -142
  287. package/chunks/chunk-X35VIWWJ.js +0 -276
  288. package/web-shell/assets/channel-uMMdTrYk.js +0 -1
  289. package/web-shell/assets/classDiagram-DTDB5LWJ-DcY-26Ig.js +0 -1
  290. package/web-shell/assets/classDiagram-v2-JRS7N3AN-DcY-26Ig.js +0 -1
  291. package/web-shell/assets/index-CsPwZ1ut.css +0 -36
  292. package/web-shell/assets/stateDiagram-v2-4QOOHH4V-D6qEVAji.js +0 -1
  293. package/web-shell/assets/swimlanesDiagram-VK2B7HYN-mem5Jj4m.js +0 -8
@@ -50,7 +50,7 @@ import {
50
50
  listTasks,
51
51
  onTasksUpdated,
52
52
  unassignTeammateTasks
53
- } from "./chunk-YHDGABDC.js";
53
+ } from "./chunk-XKBFYTCD.js";
54
54
  import {
55
55
  CronScheduler,
56
56
  DEFAULT_RECURRING_MAX_AGE_DAYS,
@@ -64,7 +64,7 @@ import {
64
64
  sendStructuredMessage,
65
65
  wrapConfirmWithBadge,
66
66
  writeMessage
67
- } from "./chunk-B54PFQS5.js";
67
+ } from "./chunk-7CLLH5TI.js";
68
68
  import {
69
69
  AGENT_WORKTREE_SLUG_PATTERN,
70
70
  GitWorktreeService,
@@ -102,7 +102,7 @@ import {
102
102
  validateTranscriptRecord,
103
103
  walkTranscriptUuidChain,
104
104
  wrapUserPromptSubmitContext
105
- } from "./chunk-FDOGGKAA.js";
105
+ } from "./chunk-GSFV5RQW.js";
106
106
  import {
107
107
  canUseRipgrep,
108
108
  resolveBundleDir
@@ -157,7 +157,7 @@ import {
157
157
  deriveSessionName,
158
158
  patchSessionRecord,
159
159
  unregisterSession
160
- } from "./chunk-B44JBZBB.js";
160
+ } from "./chunk-F4SAL7WM.js";
161
161
  import {
162
162
  LEADER_NAME,
163
163
  MAX_TEAMMATES,
@@ -170,7 +170,7 @@ import {
170
170
  readPidNamespaceId,
171
171
  sanitizeName,
172
172
  writeTeamFile
173
- } from "./chunk-BF3RUIVP.js";
173
+ } from "./chunk-CH2YDT6X.js";
174
174
  import {
175
175
  APPROVAL_MODES
176
176
  } from "./chunk-JX6XHPTX.js";
@@ -226,7 +226,7 @@ import {
226
226
  resolveEffectiveOutputStyle,
227
227
  resolveInteractionMode,
228
228
  resolveMainSessionOutputStyle
229
- } from "./chunk-3LPJ776W.js";
229
+ } from "./chunk-2HYOOFDS.js";
230
230
  import {
231
231
  findGitRoot,
232
232
  getCachedGitBranch,
@@ -242,7 +242,7 @@ import {
242
242
  import {
243
243
  DashScopeOpenAICompatibleProvider,
244
244
  selectDashScopeThinkingKnob
245
- } from "./chunk-VF6D6EGV.js";
245
+ } from "./chunk-HSO6D4KX.js";
246
246
  import {
247
247
  childLaunchDepth,
248
248
  getCurrentAgentDepth,
@@ -279,7 +279,7 @@ import {
279
279
  import {
280
280
  DEFAULT_OPENAI_BASE_URL,
281
281
  DEFAULT_STREAM_MAX_LIFETIME_MS
282
- } from "./chunk-6YEOCHSE.js";
282
+ } from "./chunk-AXMWHKXA.js";
283
283
  import {
284
284
  combineAbortSignals,
285
285
  createAbortController,
@@ -391,7 +391,7 @@ import {
391
391
  updateMCPServerStatus,
392
392
  writeLine,
393
393
  writeLineSync
394
- } from "./chunk-6QV7Z74P.js";
394
+ } from "./chunk-FRS3P7MQ.js";
395
395
  import {
396
396
  getInvocationContext,
397
397
  runWithInvocationContext
@@ -399,7 +399,7 @@ import {
399
399
  import {
400
400
  defaultModalities,
401
401
  isTieredEffortWireModel
402
- } from "./chunk-XBVNNDPK.js";
402
+ } from "./chunk-GSYD7MYP.js";
403
403
  import {
404
404
  Mutex
405
405
  } from "./chunk-VGC4I5JJ.js";
@@ -448,7 +448,7 @@ import {
448
448
  knownTokenLimit,
449
449
  parsePositiveIntegerEnvValue,
450
450
  tokenLimit
451
- } from "./chunk-FPGTNKCP.js";
451
+ } from "./chunk-F3M6P6IQ.js";
452
452
  import {
453
453
  AUTH_ENV_MAPPINGS,
454
454
  DEFAULT_MODELS,
@@ -461,7 +461,7 @@ import {
461
461
  createContentGenerator,
462
462
  resetPreloadedContentGenerator,
463
463
  resolveContentGeneratorConfigWithSources
464
- } from "./chunk-N7YQEKGX.js";
464
+ } from "./chunk-EOLGAQ25.js";
465
465
  import {
466
466
  atomicWriteFile,
467
467
  atomicWriteFileSync,
@@ -20734,12 +20734,20 @@ __name(hasOnlyKeys2, "hasOnlyKeys");
20734
20734
  init_esbuild_shims();
20735
20735
  var GOAL_CHECKPOINT_VERIFIER_DEFAULT_TIMEOUT_MS = 18e4;
20736
20736
  var GOAL_CHECKPOINT_VERIFIER_REQUEST_BYTE_LIMIT = 256e3;
20737
+ var debugLogger6 = createDebugLogger("GOAL_CHECKPOINT_VERIFIER");
20737
20738
  var GOAL_CHECKPOINT_VERIFIER_SCHEMA = {
20738
20739
  type: "object",
20739
20740
  additionalProperties: false,
20740
20741
  properties: {
20741
20742
  claims: {
20742
20743
  type: "array",
20744
+ // `description` is the only schema-level bound that survives to the
20745
+ // model. Strict normalisation drops `maxLength`/`maxItems` (they are in
20746
+ // OPENAI_STRICT_UNSUPPORTED_SCHEMA_KEYS), and `response_format` is not
20747
+ // sent at all to endpoints that are not official OpenAI -- so the
20748
+ // bounds are also stated in the system prompt and enforced on the way
20749
+ // back in.
20750
+ description: `Cumulative checkpoint claims. The combined UTF-8 size of every claim string must stay within ${GOAL_CHECKPOINT_CLAIM_MAX_BYTES} bytes. A response over that budget is rejected even when each individual claim is within its own length bound.`,
20743
20751
  minItems: 1,
20744
20752
  maxItems: GOAL_CHECKPOINT_CLAIM_LIMIT,
20745
20753
  items: {
@@ -20773,9 +20781,34 @@ var GOAL_CHECKPOINT_VERIFIER_SYSTEM_PROMPT = `You are an independent Goal Eviden
20773
20781
 
20774
20782
  Each output claim must cite one or more input IDs in sourceRefs. Preserve evidence semantics exactly: never change a source proofKind, and do not combine sources with different proofKind values into one claim. "delivered_output" proves only that content was delivered, "external_fact" supports external facts, and "user_input" supports what the user actually said or authorized.
20775
20783
 
20776
- previousClaims are already verified checkpoint claims; to carry one forward, cite its id in sourceRefs. evidence contains the current bounded transcript evidence. Produce a cumulative checkpoint that retains every still-relevant fact needed to judge the Goal objective or a later terminal proposal. Omission may make the Goal impossible to verify, so preserve material progress, decisions, user constraints, external results, and delivered outputs. The combined UTF-8 size of all output claims must stay within ${GOAL_CHECKPOINT_CLAIM_MAX_BYTES} bytes, so compress the sources into dense claims. Do not make a terminal decision.
20784
+ previousClaims are already verified checkpoint claims; to carry one forward, cite its id in sourceRefs. evidence contains the current bounded transcript evidence. Produce a cumulative checkpoint that retains every still-relevant fact needed to judge the Goal objective or a later terminal proposal. Omission may make the Goal impossible to verify, so preserve material progress, decisions, user constraints, external results, and delivered outputs. Return at most ${GOAL_CHECKPOINT_CLAIM_LIMIT} claims. The combined UTF-8 size of all output claims must stay within ${GOAL_CHECKPOINT_CLAIM_MAX_BYTES} bytes, and every individual claim must stay within ${GOAL_CHECKPOINT_CLAIM_MAX_CHARACTERS} characters, so compress the sources into dense claims. Do not make a terminal decision.
20777
20785
 
20778
20786
  Return exactly one JSON object with a non-empty claims array. Each claim must contain exactly proofKind, claim, and sourceRefs. Include no markdown fence, preamble, extra key, or commentary.`;
20787
+ var GoalCheckpointClaimBudgetError = class extends InvalidGoalCheckpointError {
20788
+ constructor(byteLength2) {
20789
+ super(
20790
+ `Goal checkpoint claims total ${byteLength2} bytes, over the ${GOAL_CHECKPOINT_CLAIM_MAX_BYTES}-byte budget`
20791
+ );
20792
+ this.byteLength = byteLength2;
20793
+ this.name = "GoalCheckpointClaimBudgetError";
20794
+ }
20795
+ static {
20796
+ __name(this, "GoalCheckpointClaimBudgetError");
20797
+ }
20798
+ };
20799
+ var GoalCheckpointClaimLengthError = class extends InvalidGoalCheckpointError {
20800
+ constructor(claimIndex, characterLength) {
20801
+ super(
20802
+ `Goal checkpoint verifier claim ${claimIndex + 1} is ${characterLength} characters, over the ${GOAL_CHECKPOINT_CLAIM_MAX_CHARACTERS}-character limit`
20803
+ );
20804
+ this.claimIndex = claimIndex;
20805
+ this.characterLength = characterLength;
20806
+ this.name = "GoalCheckpointClaimLengthError";
20807
+ }
20808
+ static {
20809
+ __name(this, "GoalCheckpointClaimLengthError");
20810
+ }
20811
+ };
20779
20812
  var GoalCheckpointVerifierInputTooLargeError = class extends Error {
20780
20813
  constructor(byteLength2) {
20781
20814
  super(
@@ -20788,7 +20821,7 @@ var GoalCheckpointVerifierInputTooLargeError = class extends Error {
20788
20821
  __name(this, "GoalCheckpointVerifierInputTooLargeError");
20789
20822
  }
20790
20823
  };
20791
- function verifierContents(input) {
20824
+ function verifierContents(input, retryNote) {
20792
20825
  const payload = {
20793
20826
  goal: {
20794
20827
  goalId: input.goal.goalId,
@@ -20809,11 +20842,15 @@ function verifierContents(input) {
20809
20842
  }))
20810
20843
  };
20811
20844
  const text = JSON.stringify(payload);
20812
- const byteLength2 = Buffer.byteLength(text, "utf8");
20845
+ const parts2 = retryNote ? [{ text }, { text: retryNote }] : [{ text }];
20846
+ const byteLength2 = parts2.reduce(
20847
+ (total, part) => total + Buffer.byteLength(part.text, "utf8"),
20848
+ 0
20849
+ );
20813
20850
  if (byteLength2 > GOAL_CHECKPOINT_VERIFIER_REQUEST_BYTE_LIMIT) {
20814
20851
  throw new GoalCheckpointVerifierInputTooLargeError(byteLength2);
20815
20852
  }
20816
- return [{ role: "user", parts: [{ text }] }];
20853
+ return [{ role: "user", parts: parts2 }];
20817
20854
  }
20818
20855
  __name(verifierContents, "verifierContents");
20819
20856
  function parseGoalCheckpointVerifierText(text) {
@@ -20833,13 +20870,52 @@ function parseGoalCheckpointVerifierText(text) {
20833
20870
  const claims = value["claims"].map(
20834
20871
  (claim, index) => parseClaim(claim, index)
20835
20872
  );
20873
+ const claimBytes = claims.reduce(
20874
+ (total, claim) => total + Buffer.byteLength(claim.claim, "utf8"),
20875
+ 0
20876
+ );
20877
+ if (claimBytes > GOAL_CHECKPOINT_CLAIM_MAX_BYTES) {
20878
+ throw new GoalCheckpointClaimBudgetError(claimBytes);
20879
+ }
20836
20880
  return { claims };
20837
20881
  }
20838
20882
  __name(parseGoalCheckpointVerifierText, "parseGoalCheckpointVerifierText");
20883
+ function claimBudgetRetryNote(byteLength2) {
20884
+ return `Your previous answer was rejected: its claim strings totalled ${byteLength2} UTF-8 bytes, over the ${GOAL_CHECKPOINT_CLAIM_MAX_BYTES}-byte budget. Return the same coverage within the budget, keeping every individual claim at or under ${GOAL_CHECKPOINT_CLAIM_MAX_CHARACTERS} characters. Merge claims that share a source and state each fact once, cutting restatement rather than facts. Reply with the JSON object only.`;
20885
+ }
20886
+ __name(claimBudgetRetryNote, "claimBudgetRetryNote");
20887
+ function claimLengthRetryNote(claimIndex, characterLength) {
20888
+ return `Your previous answer was rejected: claim ${claimIndex + 1} was ${characterLength} characters, over the ${GOAL_CHECKPOINT_CLAIM_MAX_CHARACTERS}-character limit for a single claim. Return the same coverage with every individual claim at or under ${GOAL_CHECKPOINT_CLAIM_MAX_CHARACTERS} characters and all claims together at or under ${GOAL_CHECKPOINT_CLAIM_MAX_BYTES} UTF-8 bytes. Split the over-long claim into as few additional claims as the budget allows, without exceeding ${GOAL_CHECKPOINT_CLAIM_LIMIT} claims in one checkpoint, or compress it, rather than dropping facts. Reply with the JSON object only.`;
20889
+ }
20890
+ __name(claimLengthRetryNote, "claimLengthRetryNote");
20891
+ function correctiveRetryFor(error3) {
20892
+ if (error3 instanceof GoalCheckpointClaimBudgetError) {
20893
+ return {
20894
+ note: claimBudgetRetryNote(error3.byteLength),
20895
+ debugMessage: "Retrying goal checkpoint verifier after claim budget overrun",
20896
+ debugPayload: {
20897
+ byteLength: error3.byteLength,
20898
+ budgetBytes: GOAL_CHECKPOINT_CLAIM_MAX_BYTES
20899
+ }
20900
+ };
20901
+ }
20902
+ if (error3 instanceof GoalCheckpointClaimLengthError) {
20903
+ return {
20904
+ note: claimLengthRetryNote(error3.claimIndex, error3.characterLength),
20905
+ debugMessage: "Retrying goal checkpoint verifier after a claim overran the per-claim limit",
20906
+ debugPayload: {
20907
+ claimIndex: error3.claimIndex,
20908
+ characterLength: error3.characterLength,
20909
+ limitCharacters: GOAL_CHECKPOINT_CLAIM_MAX_CHARACTERS
20910
+ }
20911
+ };
20912
+ }
20913
+ return void 0;
20914
+ }
20915
+ __name(correctiveRetryFor, "correctiveRetryFor");
20839
20916
  function createGoalCheckpointVerifier(config3, options2 = {}) {
20840
20917
  const timeoutMs = options2.timeoutMs ?? GOAL_CHECKPOINT_VERIFIER_DEFAULT_TIMEOUT_MS;
20841
20918
  return async (input, attemptSignal) => {
20842
- const contents = verifierContents(input);
20843
20919
  const timeoutController = new AbortController();
20844
20920
  const timer = setTimeout(() => {
20845
20921
  timeoutController.abort(
@@ -20848,37 +20924,62 @@ function createGoalCheckpointVerifier(config3, options2 = {}) {
20848
20924
  }, timeoutMs);
20849
20925
  const abortSignal = attemptSignal ? AbortSignal.any([attemptSignal, timeoutController.signal]) : timeoutController.signal;
20850
20926
  try {
20851
- const result = await runSideQuery(config3, {
20852
- contents,
20853
- abortSignal,
20854
- purpose: "goal-checkpoint-verifier",
20855
- maxAttempts: 1,
20856
- skipOutputLanguagePreference: true,
20857
- // Stream so a slow claims generation outlives the provider request
20858
- // timeout: non-streaming returns no bytes until the whole JSON is
20859
- // generated, so the SDK timeout (default 120 s) would abort every
20860
- // attempt past it and retry from zero, leaving any ceiling above
20861
- // that unreachable. Streamed, the timeout bounds only connect +
20862
- // first response and the stream guards apply instead.
20863
- stream: true,
20864
- systemInstruction: GOAL_CHECKPOINT_VERIFIER_SYSTEM_PROMPT,
20865
- config: {
20866
- temperature: 0,
20867
- responseMimeType: "application/json",
20868
- responseJsonSchema: GOAL_CHECKPOINT_VERIFIER_SCHEMA,
20869
- thinkingConfig: { thinkingBudget: 0, includeThoughts: false }
20927
+ let retry;
20928
+ let retryCause;
20929
+ for (; ; ) {
20930
+ const contents = retryContents(input, retry?.note, retryCause);
20931
+ const result = await runSideQuery(config3, {
20932
+ contents,
20933
+ abortSignal,
20934
+ purpose: "goal-checkpoint-verifier",
20935
+ maxAttempts: 1,
20936
+ skipOutputLanguagePreference: true,
20937
+ // Stream so a slow claims generation outlives the provider request
20938
+ // timeout: non-streaming returns no bytes until the whole JSON is
20939
+ // generated, so the SDK timeout (default 120 s) would abort every
20940
+ // attempt past it and retry from zero, leaving any ceiling above
20941
+ // that unreachable. Streamed, the timeout bounds only connect +
20942
+ // first response and the stream guards apply instead.
20943
+ stream: true,
20944
+ systemInstruction: GOAL_CHECKPOINT_VERIFIER_SYSTEM_PROMPT,
20945
+ config: {
20946
+ temperature: 0,
20947
+ responseMimeType: "application/json",
20948
+ responseJsonSchema: GOAL_CHECKPOINT_VERIFIER_SCHEMA,
20949
+ thinkingConfig: { thinkingBudget: 0, includeThoughts: false }
20950
+ }
20951
+ // Parsing stays out of a validate hook: runSideQuery re-wraps hook
20952
+ // failures into plain Errors, erasing the InvalidGoalCheckpointError
20953
+ // class and message the verifier's own tests assert on.
20954
+ });
20955
+ try {
20956
+ return parseGoalCheckpointVerifierText(result.text);
20957
+ } catch (error3) {
20958
+ const corrective = retry === void 0 ? correctiveRetryFor(error3) : void 0;
20959
+ if (!corrective) throw error3;
20960
+ debugLogger6.debug(corrective.debugMessage, corrective.debugPayload);
20961
+ retry = corrective;
20962
+ retryCause = error3;
20870
20963
  }
20871
- // Parsing stays out of a validate hook: runSideQuery re-wraps hook
20872
- // failures into plain Errors, erasing the InvalidGoalCheckpointError
20873
- // class and message the verifier's own tests assert on.
20874
- });
20875
- return parseGoalCheckpointVerifierText(result.text);
20964
+ }
20876
20965
  } finally {
20877
20966
  clearTimeout(timer);
20878
20967
  }
20879
20968
  };
20880
20969
  }
20881
20970
  __name(createGoalCheckpointVerifier, "createGoalCheckpointVerifier");
20971
+ function retryContents(input, note, retryCause) {
20972
+ if (note === void 0) return verifierContents(input);
20973
+ try {
20974
+ return verifierContents(input, note);
20975
+ } catch (error3) {
20976
+ if (error3 instanceof GoalCheckpointVerifierInputTooLargeError) {
20977
+ throw retryCause;
20978
+ }
20979
+ throw error3;
20980
+ }
20981
+ }
20982
+ __name(retryContents, "retryContents");
20882
20983
  function parseClaim(value, index) {
20883
20984
  if (!isRecord3(value) || !hasOnlyKeys3(value, ["proofKind", "claim", "sourceRefs"]) || !isGoalEvidenceProofKind(value["proofKind"]) || typeof value["claim"] !== "string" || !Array.isArray(value["sourceRefs"]) || value["sourceRefs"].length === 0 || value["sourceRefs"].length > GOAL_CHECKPOINT_SOURCE_REFERENCE_LIMIT || value["sourceRefs"].some(
20884
20985
  (reference) => typeof reference !== "string" || reference.length === 0
@@ -20888,11 +20989,15 @@ function parseClaim(value, index) {
20888
20989
  );
20889
20990
  }
20890
20991
  const claim = value["claim"].trim();
20891
- if (!claim || [...claim].length > GOAL_CHECKPOINT_CLAIM_MAX_CHARACTERS) {
20992
+ if (!claim) {
20892
20993
  throw new InvalidGoalCheckpointError(
20893
20994
  `Goal checkpoint verifier claim ${index + 1} is invalid`
20894
20995
  );
20895
20996
  }
20997
+ const characterLength = [...claim].length;
20998
+ if (characterLength > GOAL_CHECKPOINT_CLAIM_MAX_CHARACTERS) {
20999
+ throw new GoalCheckpointClaimLengthError(index, characterLength);
21000
+ }
20896
21001
  return {
20897
21002
  proofKind: value["proofKind"],
20898
21003
  claim,
@@ -21550,7 +21655,7 @@ function createMigratedGoalState(input) {
21550
21655
  __name(createMigratedGoalState, "createMigratedGoalState");
21551
21656
 
21552
21657
  // packages/core/src/goals/goal-runtime.ts
21553
- var debugLogger6 = createDebugLogger("GOAL_RUNTIME");
21658
+ var debugLogger7 = createDebugLogger("GOAL_RUNTIME");
21554
21659
  var GOAL_RUNTIME_DISPOSED_MESSAGE = "Goal runtime has been disposed";
21555
21660
  var STALE_GOAL_TURN_MESSAGE = "Goal turn permit is no longer valid";
21556
21661
  var GoalPersistenceUnavailableError = class extends Error {
@@ -21733,6 +21838,11 @@ function createGoalRuntime(options2) {
21733
21838
  continuationQueued = false;
21734
21839
  const scheduledHost = host;
21735
21840
  const continuationContext = snapshot.goal.objective;
21841
+ const usage = {
21842
+ tokensUsed: snapshot.goal.tokensUsed,
21843
+ ...snapshot.goal.tokenBudget === void 0 ? {} : { tokenBudget: snapshot.goal.tokenBudget },
21844
+ turnCount: snapshot.goal.turnCount
21845
+ };
21736
21846
  const verifierFeedback = nextVerifierFeedback;
21737
21847
  nextVerifierFeedback = void 0;
21738
21848
  currentTurnFeedback = verifierFeedback;
@@ -21792,6 +21902,7 @@ function createGoalRuntime(options2) {
21792
21902
  continuationContext,
21793
21903
  ...objectiveUpdated ? { objectiveUpdated } : {},
21794
21904
  ...windDown ? { windDown } : {},
21905
+ usage,
21795
21906
  ...verifierFeedback ? { verifierFeedback } : {}
21796
21907
  });
21797
21908
  } catch {
@@ -22237,7 +22348,7 @@ function createGoalRuntime(options2) {
22237
22348
  );
22238
22349
  return;
22239
22350
  }
22240
- debugLogger6.debug(
22351
+ debugLogger7.debug(
22241
22352
  "Checkpoint check failed; counted as a stall only if the window overflowed and the check was not a restore replay.",
22242
22353
  `windowTruncated=${window2.truncated}`,
22243
22354
  error3,
@@ -22815,112 +22926,6 @@ ${proposal.reason}`;
22815
22926
  }
22816
22927
  __name(createGoalRuntime, "createGoalRuntime");
22817
22928
 
22818
- // packages/core/src/goals/activeGoalStore.ts
22819
- init_esbuild_shims();
22820
- var store = /* @__PURE__ */ new Map();
22821
- function activeGoalEquals(left, right) {
22822
- if (left === right) return true;
22823
- if (!left || !right) return false;
22824
- return stableActiveGoalKey(left) === stableActiveGoalKey(right);
22825
- }
22826
- __name(activeGoalEquals, "activeGoalEquals");
22827
- function stableActiveGoalKey(goal) {
22828
- const comparable = {};
22829
- for (const key of Object.keys(goal).sort()) {
22830
- if (key === "deferredEvaluations") continue;
22831
- const value = goal[key];
22832
- if (value !== void 0) {
22833
- comparable[key] = value;
22834
- }
22835
- }
22836
- return JSON.stringify(comparable);
22837
- }
22838
- __name(stableActiveGoalKey, "stableActiveGoalKey");
22839
- function getActiveGoal(sessionId) {
22840
- return store.get(sessionId);
22841
- }
22842
- __name(getActiveGoal, "getActiveGoal");
22843
- function clearActiveGoal(sessionId) {
22844
- const previous = store.get(sessionId);
22845
- store.delete(sessionId);
22846
- return previous;
22847
- }
22848
- __name(clearActiveGoal, "clearActiveGoal");
22849
- var observers = /* @__PURE__ */ new Map();
22850
- function clearGoalTerminalObserver(sessionId) {
22851
- observers.delete(sessionId);
22852
- }
22853
- __name(clearGoalTerminalObserver, "clearGoalTerminalObserver");
22854
- function notifyGoalTerminal(sessionId, event) {
22855
- recordLastTerminalEvent(sessionId, event);
22856
- const observer = observers.get(sessionId);
22857
- if (!observer) return;
22858
- try {
22859
- observer(event);
22860
- } catch {
22861
- }
22862
- }
22863
- __name(notifyGoalTerminal, "notifyGoalTerminal");
22864
- var lastTerminal = /* @__PURE__ */ new Map();
22865
- function recordLastTerminalEvent(sessionId, event) {
22866
- lastTerminal.set(sessionId, event);
22867
- }
22868
- __name(recordLastTerminalEvent, "recordLastTerminalEvent");
22869
-
22870
- // packages/core/src/goals/goalHook.ts
22871
- init_esbuild_shims();
22872
-
22873
- // packages/core/src/goals/goalJudge.ts
22874
- init_esbuild_shims();
22875
- var debugLogger7 = createDebugLogger("GOAL_JUDGE");
22876
-
22877
- // packages/core/src/goals/goalHook.ts
22878
- var debugLogger8 = createDebugLogger("GOAL_HOOK");
22879
- var GOAL_HOOK_TIMEOUT_SECONDS = 30;
22880
- var GOAL_HOOK_TIMEOUT_MS = GOAL_HOOK_TIMEOUT_SECONDS * 1e3;
22881
- var GOAL_HOOK_ID_OUTPUT_KEY = "qwenGoalHookId";
22882
- function getStopHookContinuationReason(output) {
22883
- const hasGoalOutput = typeof output.hookSpecificOutput?.[GOAL_HOOK_ID_OUTPUT_KEY] === "string";
22884
- if (!hasGoalOutput) {
22885
- return output.stopReason || output.reason || "No reason provided";
22886
- }
22887
- return [output.stopReason, output.reason].filter(Boolean).join("\n") || "No reason provided";
22888
- }
22889
- __name(getStopHookContinuationReason, "getStopHookContinuationReason");
22890
- function removeGoalFunctionHook(config3, sessionId, goal) {
22891
- const system = config3.getHookSystem?.();
22892
- if (!system) return;
22893
- try {
22894
- system.removeFunctionHook(sessionId, "Stop" /* Stop */, goal.hookId);
22895
- } catch (err) {
22896
- debugLogger8.debug(
22897
- `Failed to remove goal hook ${goal.hookId}: ${err instanceof Error ? err.message : String(err)}`
22898
- );
22899
- }
22900
- }
22901
- __name(removeGoalFunctionHook, "removeGoalFunctionHook");
22902
- function finishGoal(config3, sessionId, goal, event) {
22903
- clearActiveGoal(sessionId);
22904
- removeGoalFunctionHook(config3, sessionId, goal);
22905
- notifyGoalTerminal(sessionId, event);
22906
- clearGoalTerminalObserver(sessionId);
22907
- }
22908
- __name(finishGoal, "finishGoal");
22909
- function abortGoalForStopHookCap(config3, sessionId, systemMessage) {
22910
- const goal = getActiveGoal(sessionId);
22911
- if (!goal) return false;
22912
- finishGoal(config3, sessionId, goal, {
22913
- kind: "aborted",
22914
- condition: goal.condition,
22915
- iterations: goal.iterations,
22916
- durationMs: Date.now() - goal.setAt,
22917
- lastReason: goal.lastReason,
22918
- systemMessage
22919
- });
22920
- return true;
22921
- }
22922
- __name(abortGoalForStopHookCap, "abortGoalForStopHookCap");
22923
-
22924
22929
  // packages/core/src/hooks/stopHookCap.ts
22925
22930
  init_esbuild_shims();
22926
22931
  var DEFAULT_STOP_HOOK_BLOCK_CAP = 8;
@@ -22981,7 +22986,7 @@ import * as fs3 from "node:fs";
22981
22986
  import * as path3 from "node:path";
22982
22987
  import { performance as performance2 } from "node:perf_hooks";
22983
22988
  var SESSION_START_PROFILE_ENV = "QWEN_CODE_PROFILE_SESSION_START";
22984
- var debugLogger9 = createDebugLogger("SESSION_START_PROFILER");
22989
+ var debugLogger8 = createDebugLogger("SESSION_START_PROFILER");
22985
22990
  function roundMs(value) {
22986
22991
  return Math.round(value * 100) / 100;
22987
22992
  }
@@ -23124,7 +23129,7 @@ var EnabledSessionStartProfiler = class {
23124
23129
  } catch (error3) {
23125
23130
  const code = isNodeError(error3) ? error3.code : void 0;
23126
23131
  try {
23127
- debugLogger9.debug("session-start-profiler write failed", {
23132
+ debugLogger8.debug("session-start-profiler write failed", {
23128
23133
  name: error3 instanceof Error ? error3.name : typeof error3,
23129
23134
  message: error3 instanceof Error ? error3.message : void 0,
23130
23135
  ...code ? { code } : {}
@@ -23144,7 +23149,7 @@ function createSessionStartProfiler(source, options2 = {}) {
23144
23149
  return disabledProfiler;
23145
23150
  }
23146
23151
  try {
23147
- debugLogger9.debug("session-start-profiler enabled", { source });
23152
+ debugLogger8.debug("session-start-profiler enabled", { source });
23148
23153
  } catch {
23149
23154
  }
23150
23155
  return new EnabledSessionStartProfiler(source, {
@@ -23449,7 +23454,7 @@ function jsonStringExceedsByteLength(value, threshold) {
23449
23454
  __name(jsonStringExceedsByteLength, "jsonStringExceedsByteLength");
23450
23455
 
23451
23456
  // packages/core/src/tools/tool-response-finalizer.ts
23452
- var debugLogger10 = createDebugLogger("TOOL_RESPONSE_FINALIZER");
23457
+ var debugLogger9 = createDebugLogger("TOOL_RESPONSE_FINALIZER");
23453
23458
  var associatedFinalizerResponses = /* @__PURE__ */ new WeakSet();
23454
23459
  function consumeAssociatedFinalizerEntries(entries) {
23455
23460
  const associated = /* @__PURE__ */ new Set();
@@ -23810,7 +23815,7 @@ async function finalizeToolResponses(config3, entries, promptIds, observeBoundar
23810
23815
  (sum, slot) => sum + slot.text.length,
23811
23816
  0
23812
23817
  );
23813
- debugLogger10.info(
23818
+ debugLogger9.info(
23814
23819
  `Tool response budget (${budget} chars): reduced ${entriesToPersist.size} result(s) from ${total} to ${finalizedTotal} chars.`
23815
23820
  );
23816
23821
  return finalized;
@@ -24132,7 +24137,7 @@ async function checkPriorRead(cache, filePath, verb, options2 = {}) {
24132
24137
  __name(checkPriorRead, "checkPriorRead");
24133
24138
 
24134
24139
  // packages/core/src/tools/exitPlanMode.ts
24135
- var debugLogger11 = createDebugLogger("EXIT_PLAN_MODE");
24140
+ var debugLogger10 = createDebugLogger("EXIT_PLAN_MODE");
24136
24141
  var exitPlanModeToolDescription = `Use this tool when you are in plan mode and have finished presenting your plan and are ready to code. This will prompt the user to exit plan mode.
24137
24142
 
24138
24143
  ## When to Use This Tool
@@ -24225,14 +24230,23 @@ var ExitPlanModeToolInvocation = class extends BaseToolInvocation {
24225
24230
  hideAlwaysAllow: true,
24226
24231
  plan: snapshot.plan,
24227
24232
  prePlanMode: snapshot.prePlanMode,
24228
- onConfirm: /* @__PURE__ */ __name(async (outcome) => {
24233
+ onConfirm: /* @__PURE__ */ __name(async (outcome, payload) => {
24229
24234
  switch (outcome) {
24230
- case "restore_previous" /* RestorePrevious */:
24235
+ case "restore_previous" /* RestorePrevious */: {
24236
+ this.approval = void 0;
24237
+ const executionMode = this.config.getPlanExecutionMode?.();
24238
+ if (executionMode !== void 0 && payload?.expectedPlanExecutionMode !== executionMode) {
24239
+ throw new StructuredToolError(
24240
+ "Execution permission changed or was not confirmed. Request plan approval again with the current permission.",
24241
+ "execution_denied" /* EXECUTION_DENIED */
24242
+ );
24243
+ }
24231
24244
  this.approval = {
24232
24245
  snapshot,
24233
- targetMode: snapshot.prePlanMode
24246
+ targetMode: executionMode ?? snapshot.prePlanMode
24234
24247
  };
24235
24248
  break;
24249
+ }
24236
24250
  case "proceed_always" /* ProceedAlways */:
24237
24251
  this.approval = {
24238
24252
  snapshot,
@@ -24263,7 +24277,7 @@ var ExitPlanModeToolInvocation = class extends BaseToolInvocation {
24263
24277
  return buildSubagentPlanToolBlockedResult(
24264
24278
  ToolNames.EXIT_PLAN_MODE,
24265
24279
  "ExitPlanModeTool",
24266
- debugLogger11
24280
+ debugLogger10
24267
24281
  );
24268
24282
  }
24269
24283
  if (this.config.getApprovalMode() !== "plan" /* PLAN */ && !this.approval) {
@@ -24305,7 +24319,7 @@ var ExitPlanModeToolInvocation = class extends BaseToolInvocation {
24305
24319
  });
24306
24320
  } catch (error3) {
24307
24321
  const message = error3 instanceof Error ? error3.message : String(error3);
24308
- debugLogger11.error(
24322
+ debugLogger10.error(
24309
24323
  `[ExitPlanModeTool] Failed to set approval mode to "${targetMode}": ${message}`
24310
24324
  );
24311
24325
  return this.errorResult(
@@ -24412,7 +24426,7 @@ ${llmContent}`,
24412
24426
  try {
24413
24427
  this.config.savePlan(plan);
24414
24428
  } catch (error3) {
24415
- debugLogger11.warn(
24429
+ debugLogger10.warn(
24416
24430
  `[ExitPlanModeTool] Failed to save plan to disk: ${error3 instanceof Error ? error3.message : String(error3)}`
24417
24431
  );
24418
24432
  }
@@ -24884,6 +24898,21 @@ function compactToolResultDisplay(resultDisplay, purpose) {
24884
24898
  if (resultDisplay === void 0) {
24885
24899
  return resultDisplay;
24886
24900
  }
24901
+ if (typeof resultDisplay === "object" && resultDisplay !== null && "type" in resultDisplay && resultDisplay.type === "ask_user_question_answers") {
24902
+ if (typeof resultDisplay.text !== "string" || !Array.isArray(resultDisplay.answers) || !resultDisplay.answers.every(
24903
+ (entry) => typeof entry === "object" && entry !== null && typeof entry.question === "string" && typeof entry.answer === "string"
24904
+ )) {
24905
+ return resultDisplay;
24906
+ }
24907
+ return {
24908
+ ...resultDisplay,
24909
+ text: compactString(resultDisplay.text, purpose),
24910
+ answers: resultDisplay.answers.map(({ question, answer }) => ({
24911
+ question: compactString(question, purpose),
24912
+ answer: compactString(answer, purpose)
24913
+ }))
24914
+ };
24915
+ }
24887
24916
  if (isFileDiffDisplay(resultDisplay)) {
24888
24917
  return compactFileDiff(resultDisplay, purpose);
24889
24918
  }
@@ -24990,7 +25019,7 @@ init_esbuild_shims();
24990
25019
  init_esbuild_shims();
24991
25020
  import fs5 from "node:fs";
24992
25021
  import path4 from "node:path";
24993
- var debugLogger12 = createDebugLogger("USAGE_HISTORY");
25022
+ var debugLogger11 = createDebugLogger("USAGE_HISTORY");
24994
25023
  var MS_PER_DAY = 24 * 60 * 60 * 1e3;
24995
25024
  var LIVE_REBUILD_WINDOW_DAYS = 35;
24996
25025
  function getUsageHistoryPath() {
@@ -25117,13 +25146,13 @@ async function prepareUsageBeforeTranscriptDeletion(transcriptPath) {
25117
25146
  }
25118
25147
  }
25119
25148
  } catch (e) {
25120
- debugLogger12.debug(
25149
+ debugLogger11.debug(
25121
25150
  `persistUsageBeforeTranscriptDeletion: cannot read history: ${e}`
25122
25151
  );
25123
25152
  }
25124
25153
  return { usagePath, record: summarized.record };
25125
25154
  } catch (e) {
25126
- debugLogger12.debug(`prepareUsageBeforeTranscriptDeletion: ${e}`);
25155
+ debugLogger11.debug(`prepareUsageBeforeTranscriptDeletion: ${e}`);
25127
25156
  return null;
25128
25157
  }
25129
25158
  }
@@ -25143,7 +25172,7 @@ function commitUsageBeforeTranscriptDeletion(prepared) {
25143
25172
  writeLineSync(prepared.usagePath, prepared.record);
25144
25173
  return true;
25145
25174
  } catch (e) {
25146
- debugLogger12.debug(`commitUsageBeforeTranscriptDeletion: ${e}`);
25175
+ debugLogger11.debug(`commitUsageBeforeTranscriptDeletion: ${e}`);
25147
25176
  return false;
25148
25177
  }
25149
25178
  }
@@ -25159,7 +25188,7 @@ async function rebuildFromSessionJsonl(options2 = {}) {
25159
25188
  try {
25160
25189
  if (!fs5.existsSync(projectsDir)) return [];
25161
25190
  } catch (e) {
25162
- debugLogger12.debug(
25191
+ debugLogger11.debug(
25163
25192
  `rebuildFromSessionJsonl: cannot access projectsDir: ${e}`
25164
25193
  );
25165
25194
  return [];
@@ -25170,7 +25199,7 @@ async function rebuildFromSessionJsonl(options2 = {}) {
25170
25199
  try {
25171
25200
  projectDirs = fs5.readdirSync(projectsDir);
25172
25201
  } catch (e) {
25173
- debugLogger12.debug(`rebuildFromSessionJsonl: cannot read projectsDir: ${e}`);
25202
+ debugLogger11.debug(`rebuildFromSessionJsonl: cannot read projectsDir: ${e}`);
25174
25203
  return [];
25175
25204
  }
25176
25205
  for (const projDir of projectDirs) {
@@ -25179,7 +25208,7 @@ async function rebuildFromSessionJsonl(options2 = {}) {
25179
25208
  try {
25180
25209
  files = fs5.readdirSync(chatsDir).filter((f2) => f2.endsWith(".jsonl") && !f2.endsWith(".ledger.jsonl"));
25181
25210
  } catch (e) {
25182
- debugLogger12.debug(
25211
+ debugLogger11.debug(
25183
25212
  `rebuildFromSessionJsonl: cannot read chatsDir ${chatsDir}: ${e}`
25184
25213
  );
25185
25214
  continue;
@@ -25191,13 +25220,13 @@ async function rebuildFromSessionJsonl(options2 = {}) {
25191
25220
  try {
25192
25221
  stats = fs5.statSync(filePath);
25193
25222
  } catch (e) {
25194
- debugLogger12.debug(
25223
+ debugLogger11.debug(
25195
25224
  `rebuildFromSessionJsonl: cannot stat ${filePath}: ${e}`
25196
25225
  );
25197
25226
  continue;
25198
25227
  }
25199
25228
  if (!stats.isFile()) {
25200
- debugLogger12.debug(
25229
+ debugLogger11.debug(
25201
25230
  `rebuildFromSessionJsonl: skipping non-regular entry ${filePath}`
25202
25231
  );
25203
25232
  continue;
@@ -25215,7 +25244,7 @@ async function rebuildFromSessionJsonl(options2 = {}) {
25215
25244
  if (!summarized.record) continue;
25216
25245
  results.push(summarized.record);
25217
25246
  } catch (e) {
25218
- debugLogger12.debug(
25247
+ debugLogger11.debug(
25219
25248
  `rebuildFromSessionJsonl: failed to process ${file}: ${e}`
25220
25249
  );
25221
25250
  continue;
@@ -25237,7 +25266,7 @@ function dedupBySessionId(records) {
25237
25266
  const map = /* @__PURE__ */ new Map();
25238
25267
  for (const r of records) map.set(r.sessionId, r);
25239
25268
  if (map.size < records.length) {
25240
- debugLogger12.debug(
25269
+ debugLogger11.debug(
25241
25270
  `dedupBySessionId: removed ${records.length - map.size} duplicate record(s)`
25242
25271
  );
25243
25272
  }
@@ -25250,7 +25279,7 @@ async function loadUsageHistory(skipSessionInRebuild, options2) {
25250
25279
  const filtered = records.filter((r) => r.version === 1);
25251
25280
  if (filtered.length > 0) return dedupBySessionId(filtered);
25252
25281
  } catch (e) {
25253
- debugLogger12.debug(`loadUsageHistory: failed to read usage file: ${e}`);
25282
+ debugLogger11.debug(`loadUsageHistory: failed to read usage file: ${e}`);
25254
25283
  }
25255
25284
  return dedupBySessionId(
25256
25285
  await rebuildFromSessionJsonl({
@@ -25266,7 +25295,7 @@ async function loadUsageHistoryWithLive(options2) {
25266
25295
  const records = await read(getUsageHistoryPath());
25267
25296
  persisted = records.filter((r) => r.version === 1);
25268
25297
  } catch (e) {
25269
- debugLogger12.debug(
25298
+ debugLogger11.debug(
25270
25299
  `loadUsageHistoryWithLive: failed to read usage file: ${e}`
25271
25300
  );
25272
25301
  }
@@ -27234,7 +27263,7 @@ async function fetchGitCommitDetail(cwd, sha) {
27234
27263
  __name(fetchGitCommitDetail, "fetchGitCommitDetail");
27235
27264
 
27236
27265
  // packages/core/src/services/fileHistoryService.ts
27237
- var debugLogger13 = createDebugLogger("FILE_HISTORY");
27266
+ var debugLogger12 = createDebugLogger("FILE_HISTORY");
27238
27267
  var MAX_SNAPSHOTS = 100;
27239
27268
  var FILE_HISTORY_DIR = "file-history";
27240
27269
  function serializeSnapshot(s3) {
@@ -27359,14 +27388,14 @@ async function restoreBackup(filePath, backupFileName, sessionId) {
27359
27388
  backupStats = await stat2(backupPath);
27360
27389
  } catch (e) {
27361
27390
  if (isENOENT(e)) {
27362
- debugLogger13.error(`FileHistory: Backup file not found: ${backupPath}`);
27391
+ debugLogger12.error(`FileHistory: Backup file not found: ${backupPath}`);
27363
27392
  return false;
27364
27393
  }
27365
27394
  throw e;
27366
27395
  }
27367
27396
  const result = await safeCopyFile(backupPath, filePath);
27368
27397
  if (result === "src-missing") {
27369
- debugLogger13.error(
27398
+ debugLogger12.error(
27370
27399
  `FileHistory: Backup file disappeared during restore: ${backupPath}`
27371
27400
  );
27372
27401
  return false;
@@ -27427,7 +27456,7 @@ async function computeDiffStatsForFile(originalFile, backupFileName, sessionId)
27427
27456
  if (c.removed) deletions += c.count || 0;
27428
27457
  }
27429
27458
  } catch (error3) {
27430
- debugLogger13.error(`FileHistory: Error generating diffStats: ${error3}`);
27459
+ debugLogger12.error(`FileHistory: Error generating diffStats: ${error3}`);
27431
27460
  }
27432
27461
  return { filesChanged, insertions, deletions };
27433
27462
  }
@@ -27455,7 +27484,7 @@ async function readPathWithSizeGuard(path78, kind) {
27455
27484
  }
27456
27485
  return { kind: "unreadable" };
27457
27486
  }
27458
- debugLogger13.error(`FileHistory: ${kind} open failed for ${path78}: ${e}`);
27487
+ debugLogger12.error(`FileHistory: ${kind} open failed for ${path78}: ${e}`);
27459
27488
  return { kind: "unreadable" };
27460
27489
  }
27461
27490
  try {
@@ -27467,7 +27496,7 @@ async function readPathWithSizeGuard(path78, kind) {
27467
27496
  const text = await fh.readFile("utf-8");
27468
27497
  return { kind: "ok", content: text, exists: true };
27469
27498
  } catch (e) {
27470
- debugLogger13.error(`FileHistory: ${kind} read failed for ${path78}: ${e}`);
27499
+ debugLogger12.error(`FileHistory: ${kind} read failed for ${path78}: ${e}`);
27471
27500
  return { kind: "unreadable" };
27472
27501
  }
27473
27502
  } finally {
@@ -27529,7 +27558,7 @@ var FileHistoryService = class {
27529
27558
  try {
27530
27559
  this.onSnapshotUpdated?.(snapshot);
27531
27560
  } catch (error3) {
27532
- debugLogger13.error(`FileHistory: recordSnapshotUpdate failed: ${error3}`);
27561
+ debugLogger12.error(`FileHistory: recordSnapshotUpdate failed: ${error3}`);
27533
27562
  }
27534
27563
  }
27535
27564
  restoreFromSnapshots(snapshots) {
@@ -27570,7 +27599,7 @@ var FileHistoryService = class {
27570
27599
  try {
27571
27600
  backupPath = resolveBackupPath(name, this.sessionId);
27572
27601
  } catch (e) {
27573
- debugLogger13.error(
27602
+ debugLogger12.error(
27574
27603
  `FileHistory: rejected backupFileName during validation: ${name}: ${e}`
27575
27604
  );
27576
27605
  return false;
@@ -27595,7 +27624,7 @@ var FileHistoryService = class {
27595
27624
  for (const snapshot of affectedSnapshots) {
27596
27625
  this.recordSnapshotUpdate(snapshot);
27597
27626
  }
27598
- debugLogger13.warn(
27627
+ debugLogger12.warn(
27599
27628
  `FileHistory: ${missing.size} restored backup file(s) missing on disk`
27600
27629
  );
27601
27630
  }
@@ -27604,7 +27633,7 @@ var FileHistoryService = class {
27604
27633
  const trackingPath = this.maybeShortenFilePath(filePath);
27605
27634
  const mostRecent = this.state.snapshots.at(-1);
27606
27635
  if (!mostRecent) {
27607
- debugLogger13.error("FileHistory: Missing most recent snapshot");
27636
+ debugLogger12.error("FileHistory: Missing most recent snapshot");
27608
27637
  return;
27609
27638
  }
27610
27639
  const existing = mostRecent.trackedFileBackups[trackingPath];
@@ -27616,7 +27645,7 @@ var FileHistoryService = class {
27616
27645
  try {
27617
27646
  backup = await createBackup(filePath, maxVersion + 1, this.sessionId);
27618
27647
  } catch (error3) {
27619
- debugLogger13.error(`FileHistory: trackEdit failed: ${error3}`);
27648
+ debugLogger12.error(`FileHistory: trackEdit failed: ${error3}`);
27620
27649
  return;
27621
27650
  }
27622
27651
  if (!this.state.snapshots.includes(mostRecent)) {
@@ -27627,7 +27656,7 @@ var FileHistoryService = class {
27627
27656
  mostRecent.trackedFileBackups[trackingPath] = backup;
27628
27657
  this.state.trackedFiles.add(trackingPath);
27629
27658
  this.recordSnapshotUpdate(mostRecent);
27630
- debugLogger13.debug(
27659
+ debugLogger12.debug(
27631
27660
  `FileHistory: Tracked file modification for ${filePath}`
27632
27661
  );
27633
27662
  }
@@ -27676,7 +27705,7 @@ var FileHistoryService = class {
27676
27705
  this.sessionId
27677
27706
  );
27678
27707
  } catch (error3) {
27679
- debugLogger13.error(
27708
+ debugLogger12.error(
27680
27709
  `FileHistory: Failed to backup file ${trackingPath}: ${error3}`
27681
27710
  );
27682
27711
  const previous = mostRecent?.trackedFileBackups[trackingPath];
@@ -27707,7 +27736,7 @@ var FileHistoryService = class {
27707
27736
  this.state.snapshots = this.state.snapshots.slice(overflow);
27708
27737
  await this.cleanupOrphanedBackups(removed);
27709
27738
  }
27710
- debugLogger13.debug(
27739
+ debugLogger12.debug(
27711
27740
  `FileHistory: Added snapshot for ${promptId}, tracking ${this.state.trackedFiles.size} files`
27712
27741
  );
27713
27742
  }
@@ -27717,7 +27746,7 @@ var FileHistoryService = class {
27717
27746
  if (!targetSnapshot) {
27718
27747
  throw new Error("The selected snapshot was not found");
27719
27748
  }
27720
- debugLogger13.debug(`FileHistory: Rewinding to snapshot for ${promptId}`);
27749
+ debugLogger12.debug(`FileHistory: Rewinding to snapshot for ${promptId}`);
27721
27750
  const result = await this.applySnapshot(targetSnapshot);
27722
27751
  if (truncateHistory && result.filesFailed.length === 0) {
27723
27752
  const targetIdx = this.state.snapshots.indexOf(targetSnapshot);
@@ -27732,7 +27761,7 @@ var FileHistoryService = class {
27732
27761
  await this.cleanupOrphanedBackups(removed);
27733
27762
  }
27734
27763
  }
27735
- debugLogger13.debug(`FileHistory: Finished rewinding to ${promptId}`);
27764
+ debugLogger12.debug(`FileHistory: Finished rewinding to ${promptId}`);
27736
27765
  return result;
27737
27766
  }
27738
27767
  async getDiffStats(promptId) {
@@ -27760,7 +27789,7 @@ var FileHistoryService = class {
27760
27789
  }
27761
27790
  return null;
27762
27791
  } catch (error3) {
27763
- debugLogger13.error(
27792
+ debugLogger12.error(
27764
27793
  `FileHistory: Error computing diff stats: ${error3}`
27765
27794
  );
27766
27795
  return null;
@@ -27806,7 +27835,7 @@ var FileHistoryService = class {
27806
27835
  candidatePaths.length - MAX_TURN_DIFF_FILES
27807
27836
  );
27808
27837
  if (filesOmitted > 0) {
27809
- debugLogger13.warn(
27838
+ debugLogger12.warn(
27810
27839
  `FileHistory: getTurnDiff truncating ${filesOmitted} files for prompt ${promptId} (cap: ${MAX_TURN_DIFF_FILES})`
27811
27840
  );
27812
27841
  }
@@ -27842,7 +27871,7 @@ var FileHistoryService = class {
27842
27871
  try {
27843
27872
  return await this.computeTurnFileDiffUnsafe(trackingPath, before, after);
27844
27873
  } catch (e) {
27845
- debugLogger13.error(
27874
+ debugLogger12.error(
27846
27875
  `FileHistory: computeTurnFileDiff failed for ${trackingPath}: ${e}`
27847
27876
  );
27848
27877
  return null;
@@ -27869,14 +27898,14 @@ var FileHistoryService = class {
27869
27898
  this.sessionId
27870
27899
  );
27871
27900
  if (beforeRead.kind === "unreadable") {
27872
- debugLogger13.warn(
27901
+ debugLogger12.warn(
27873
27902
  `FileHistory: skipping turn diff for ${trackingPath}: before backup unreadable`
27874
27903
  );
27875
27904
  return null;
27876
27905
  }
27877
27906
  const afterRead = afterFromWorktree ? await readEndpointContent(void 0, absoluteFilePath, this.sessionId) : await readEndpointContent(afterBackup, void 0, this.sessionId);
27878
27907
  if (afterRead.kind === "unreadable") {
27879
- debugLogger13.warn(
27908
+ debugLogger12.warn(
27880
27909
  `FileHistory: skipping turn diff for ${trackingPath}: after ${afterFromWorktree ? "worktree" : "backup"} unreadable`
27881
27910
  );
27882
27911
  return null;
@@ -27986,7 +28015,7 @@ var FileHistoryService = class {
27986
28015
  }
27987
28016
  const backupFileName = targetBackup ? targetBackup.backupFileName : this.getBackupFileNameFirstVersion(trackingPath);
27988
28017
  if (backupFileName === void 0) {
27989
- debugLogger13.error(
28018
+ debugLogger12.error(
27990
28019
  "FileHistory: Error finding the backup file to apply"
27991
28020
  );
27992
28021
  filesFailed.push(filePath);
@@ -27995,7 +28024,7 @@ var FileHistoryService = class {
27995
28024
  if (backupFileName === null) {
27996
28025
  try {
27997
28026
  await unlink3(filePath);
27998
- debugLogger13.debug(`FileHistory: Deleted ${filePath}`);
28027
+ debugLogger12.debug(`FileHistory: Deleted ${filePath}`);
27999
28028
  filesChanged.push(filePath);
28000
28029
  } catch (e) {
28001
28030
  if (!isENOENT(e)) throw e;
@@ -28009,7 +28038,7 @@ var FileHistoryService = class {
28009
28038
  this.sessionId
28010
28039
  );
28011
28040
  if (restored) {
28012
- debugLogger13.debug(
28041
+ debugLogger12.debug(
28013
28042
  `FileHistory: Restored ${filePath} from ${backupFileName}`
28014
28043
  );
28015
28044
  filesChanged.push(filePath);
@@ -28018,7 +28047,7 @@ var FileHistoryService = class {
28018
28047
  }
28019
28048
  }
28020
28049
  } catch (error3) {
28021
- debugLogger13.error(
28050
+ debugLogger12.error(
28022
28051
  `FileHistory: Error restoring file ${trackingPath}: ${error3}`
28023
28052
  );
28024
28053
  filesFailed.push(this.maybeExpandFilePath(trackingPath));
@@ -28070,7 +28099,7 @@ var FileHistoryService = class {
28070
28099
  await unlink3(resolveBackupPath(name, this.sessionId));
28071
28100
  } catch (e) {
28072
28101
  if (!isENOENT(e)) {
28073
- debugLogger13.error(`FileHistory: cleanup failed for ${name}: ${e}`);
28102
+ debugLogger12.error(`FileHistory: cleanup failed for ${name}: ${e}`);
28074
28103
  }
28075
28104
  }
28076
28105
  })
@@ -28701,17 +28730,17 @@ var SessionOrganizationService = class {
28701
28730
  return path6.join(this.storage.getProjectDir(), STORE_FILE);
28702
28731
  }
28703
28732
  async listGroups() {
28704
- const store2 = await this.readStore();
28733
+ const store = await this.readStore();
28705
28734
  return {
28706
- groups: this.sortGroups(store2.groups),
28735
+ groups: this.sortGroups(store.groups),
28707
28736
  colorOptions: [...GROUP_COLOR_OPTIONS]
28708
28737
  };
28709
28738
  }
28710
28739
  async readSnapshot() {
28711
- const store2 = await this.readStore();
28712
- const validGroupIds = new Set(store2.groups.map((group) => group.id));
28740
+ const store = await this.readStore();
28741
+ const validGroupIds = new Set(store.groups.map((group) => group.id));
28713
28742
  const sessions = /* @__PURE__ */ new Map();
28714
- for (const [sessionId, raw] of Object.entries(store2.sessions)) {
28743
+ for (const [sessionId, raw] of Object.entries(store.sessions)) {
28715
28744
  const view = viewOrganization(raw);
28716
28745
  if (view.groupId !== null && !validGroupIds.has(view.groupId)) {
28717
28746
  this.warnOrphanedGroupReference(sessionId, view.groupId);
@@ -28719,15 +28748,15 @@ var SessionOrganizationService = class {
28719
28748
  }
28720
28749
  sessions.set(sessionId, view);
28721
28750
  }
28722
- return { groups: this.sortGroups(store2.groups), sessions };
28751
+ return { groups: this.sortGroups(store.groups), sessions };
28723
28752
  }
28724
28753
  async createGroup(input) {
28725
28754
  const name = normalizeGroupName(input.name);
28726
28755
  const color = normalizeGroupColor(input.color);
28727
28756
  return this.withStoreLock(async () => {
28728
- const store2 = await this.readStore();
28729
- this.assertGroupNameAvailable(store2.groups, name);
28730
- if (store2.groups.length >= MAX_GROUPS) {
28757
+ const store = await this.readStore();
28758
+ this.assertGroupNameAvailable(store.groups, name);
28759
+ if (store.groups.length >= MAX_GROUPS) {
28731
28760
  throw new SessionOrganizationError(
28732
28761
  `Maximum number of groups (${MAX_GROUPS}) reached`,
28733
28762
  "group_limit_reached"
@@ -28739,7 +28768,7 @@ var SessionOrganizationService = class {
28739
28768
  name,
28740
28769
  color,
28741
28770
  order: Math.min(
28742
- store2.groups.reduce(
28771
+ store.groups.reduce(
28743
28772
  (maxOrder, existing) => Math.max(maxOrder, existing.order),
28744
28773
  -1
28745
28774
  ) + 1,
@@ -28748,15 +28777,15 @@ var SessionOrganizationService = class {
28748
28777
  createdAt: now,
28749
28778
  updatedAt: now
28750
28779
  };
28751
- store2.groups.push(group);
28752
- await this.writeStore(store2);
28780
+ store.groups.push(group);
28781
+ await this.writeStore(store);
28753
28782
  return group;
28754
28783
  });
28755
28784
  }
28756
28785
  async updateGroup(groupId, input) {
28757
28786
  return this.withStoreLock(async () => {
28758
- const store2 = await this.readStore();
28759
- const group = store2.groups.find((candidate) => candidate.id === groupId);
28787
+ const store = await this.readStore();
28788
+ const group = store.groups.find((candidate) => candidate.id === groupId);
28760
28789
  if (!group) {
28761
28790
  throw new SessionOrganizationError(
28762
28791
  `Group not found: ${groupId}`,
@@ -28766,7 +28795,7 @@ var SessionOrganizationService = class {
28766
28795
  }
28767
28796
  if (input.name !== void 0) {
28768
28797
  const name = normalizeGroupName(input.name);
28769
- this.assertGroupNameAvailable(store2.groups, name, groupId);
28798
+ this.assertGroupNameAvailable(store.groups, name, groupId);
28770
28799
  group.name = name;
28771
28800
  }
28772
28801
  if (input.color !== void 0) {
@@ -28776,34 +28805,34 @@ var SessionOrganizationService = class {
28776
28805
  group.order = normalizeOrder(input.order);
28777
28806
  }
28778
28807
  group.updatedAt = (/* @__PURE__ */ new Date()).toISOString();
28779
- await this.writeStore(store2);
28808
+ await this.writeStore(store);
28780
28809
  return group;
28781
28810
  });
28782
28811
  }
28783
28812
  async deleteGroup(groupId) {
28784
28813
  return this.withStoreLock(async () => {
28785
- const store2 = await this.readStore();
28786
- const before = store2.groups.length;
28787
- store2.groups = store2.groups.filter((group) => group.id !== groupId);
28788
- if (store2.groups.length === before) {
28814
+ const store = await this.readStore();
28815
+ const before = store.groups.length;
28816
+ store.groups = store.groups.filter((group) => group.id !== groupId);
28817
+ if (store.groups.length === before) {
28789
28818
  return false;
28790
28819
  }
28791
28820
  const now = (/* @__PURE__ */ new Date()).toISOString();
28792
- for (const session of Object.values(store2.sessions)) {
28821
+ for (const session of Object.values(store.sessions)) {
28793
28822
  if (session.groupId === groupId) {
28794
28823
  session.groupId = null;
28795
28824
  session.updatedAt = now;
28796
28825
  }
28797
28826
  }
28798
- await this.writeStore(store2);
28827
+ await this.writeStore(store);
28799
28828
  return true;
28800
28829
  });
28801
28830
  }
28802
28831
  async updateSessionOrganization(sessionId, input) {
28803
28832
  const hasUpdate = input.groupId !== void 0 || input.isPinned !== void 0 || input.color !== void 0;
28804
28833
  return this.withStoreLock(async () => {
28805
- const store2 = await this.readStore();
28806
- const current = viewOrganization(store2.sessions[sessionId]);
28834
+ const store = await this.readStore();
28835
+ const current = viewOrganization(store.sessions[sessionId]);
28807
28836
  if (!hasUpdate) {
28808
28837
  return current;
28809
28838
  }
@@ -28815,7 +28844,7 @@ var SessionOrganizationService = class {
28815
28844
  current.color = input.color;
28816
28845
  }
28817
28846
  if (input.groupId !== void 0) {
28818
- if (input.groupId !== null && !store2.groups.some((group) => group.id === input.groupId)) {
28847
+ if (input.groupId !== null && !store.groups.some((group) => group.id === input.groupId)) {
28819
28848
  throw new SessionOrganizationError(
28820
28849
  `Group not found: ${input.groupId}`,
28821
28850
  "group_not_found",
@@ -28832,35 +28861,35 @@ var SessionOrganizationService = class {
28832
28861
  }
28833
28862
  }
28834
28863
  current.updatedAt = now;
28835
- store2.sessions[sessionId] = serializeOrganization(current);
28836
- await this.writeStore(store2);
28837
- return viewOrganization(store2.sessions[sessionId]);
28864
+ store.sessions[sessionId] = serializeOrganization(current);
28865
+ await this.writeStore(store);
28866
+ return viewOrganization(store.sessions[sessionId]);
28838
28867
  });
28839
28868
  }
28840
28869
  async removeSession(sessionId, options2 = {}) {
28841
28870
  await this.withStoreLock(async () => {
28842
- const store2 = await this.readStore();
28843
- if (!Object.prototype.hasOwnProperty.call(store2.sessions, sessionId)) {
28871
+ const store = await this.readStore();
28872
+ if (!Object.prototype.hasOwnProperty.call(store.sessions, sessionId)) {
28844
28873
  return;
28845
28874
  }
28846
- delete store2.sessions[sessionId];
28847
- await this.writeStore(store2, options2);
28875
+ delete store.sessions[sessionId];
28876
+ await this.writeStore(store, options2);
28848
28877
  });
28849
28878
  }
28850
28879
  async removeSessions(sessionIds, options2 = {}) {
28851
28880
  const uniqueSessionIds = [...new Set(sessionIds)];
28852
28881
  if (uniqueSessionIds.length === 0) return;
28853
28882
  await this.withStoreLock(async () => {
28854
- const store2 = await this.readStore();
28883
+ const store = await this.readStore();
28855
28884
  let changed = false;
28856
28885
  for (const sessionId of uniqueSessionIds) {
28857
- if (Object.prototype.hasOwnProperty.call(store2.sessions, sessionId)) {
28858
- delete store2.sessions[sessionId];
28886
+ if (Object.prototype.hasOwnProperty.call(store.sessions, sessionId)) {
28887
+ delete store.sessions[sessionId];
28859
28888
  changed = true;
28860
28889
  }
28861
28890
  }
28862
28891
  if (changed) {
28863
- await this.writeStore(store2, options2);
28892
+ await this.writeStore(store, options2);
28864
28893
  }
28865
28894
  });
28866
28895
  }
@@ -28938,7 +28967,7 @@ var SessionOrganizationService = class {
28938
28967
  );
28939
28968
  return emptyStore();
28940
28969
  }
28941
- async writeStore(store2, options2 = {}) {
28970
+ async writeStore(store, options2 = {}) {
28942
28971
  await fs7.mkdir(path6.dirname(this.getStorePath()), { recursive: true });
28943
28972
  if (this.readFailed) {
28944
28973
  throw new SessionOrganizationError(
@@ -28950,8 +28979,8 @@ var SessionOrganizationService = class {
28950
28979
  this.getStorePath(),
28951
28980
  {
28952
28981
  schemaVersion: SCHEMA_VERSION,
28953
- groups: this.sortGroups(store2.groups),
28954
- sessions: store2.sessions
28982
+ groups: this.sortGroups(store.groups),
28983
+ sessions: store.sessions
28955
28984
  },
28956
28985
  { assertCanCommit: options2.assertCanCommit }
28957
28986
  );
@@ -29238,6 +29267,7 @@ async function watchRepoBranch(cwd, onChange) {
29238
29267
  __name(watchRepoBranch, "watchRepoBranch");
29239
29268
 
29240
29269
  // packages/core/src/utils/git-branches.ts
29270
+ var debugLogger13 = createDebugLogger("GIT_BRANCHES");
29241
29271
  var execFileAsync2 = promisify2(execFile2);
29242
29272
  var GIT_TIMEOUT_MS2 = 3e4;
29243
29273
  var MAX_RECENT_BRANCHES = 20;
@@ -29494,6 +29524,11 @@ async function gitCreateBranch(cwd, name, startPoint, env) {
29494
29524
  env
29495
29525
  ).catch(() => "")).trim();
29496
29526
  const originalCommit = originalRef ? "" : (await runGit2(cwd, ["rev-parse", "HEAD"], env).catch(() => "")).trim();
29527
+ const startCommit = (await runGit2(
29528
+ cwd,
29529
+ ["rev-parse", "--verify", `${startPoint || "HEAD"}^{commit}`],
29530
+ env
29531
+ ).catch(() => "")).trim();
29497
29532
  try {
29498
29533
  await runGit2(cwd, args, env);
29499
29534
  } catch (err) {
@@ -29514,8 +29549,17 @@ async function gitCreateBranch(cwd, name, startPoint, env) {
29514
29549
  ).catch(() => {
29515
29550
  });
29516
29551
  }
29517
- await runGit2(cwd, ["branch", "-D", name], env).catch(() => {
29518
- });
29552
+ const newHead = (await runGit2(cwd, ["rev-parse", `refs/heads/${name}`], env).catch(
29553
+ () => ""
29554
+ )).trim();
29555
+ if (newHead && newHead !== startCommit) {
29556
+ debugLogger13.warn(
29557
+ `gitCreateBranch: keeping branch "${name}" because it contains commits created after checkout (likely by a failing post-checkout hook)`
29558
+ );
29559
+ } else {
29560
+ await runGit2(cwd, ["branch", "-D", name], env).catch(() => {
29561
+ });
29562
+ }
29519
29563
  }
29520
29564
  throw err;
29521
29565
  }
@@ -31184,6 +31228,10 @@ function collectSessionTurnState(records, sessionId) {
31184
31228
  return accumulator.finish();
31185
31229
  }
31186
31230
  __name(collectSessionTurnState, "collectSessionTurnState");
31231
+ function computeInitialTurnFromHistory(records, sessionId) {
31232
+ return collectSessionTurnState(records, sessionId).initialTurn;
31233
+ }
31234
+ __name(computeInitialTurnFromHistory, "computeInitialTurnFromHistory");
31187
31235
  function getRecordPromptIds(record4) {
31188
31236
  const promptIds = [];
31189
31237
  const recordPromptId = record4.promptId;
@@ -40335,12 +40383,13 @@ var ChatRecordingService = class {
40335
40383
  * @param goalContext Goal identity and turn that own this message
40336
40384
  * @param promptPayload User-authored display text and hook-context provenance
40337
40385
  */
40338
- recordUserMessage(message, goalContext, promptPayload) {
40386
+ recordUserMessage(message, goalContext, promptPayload, daemonPromptId) {
40339
40387
  try {
40340
40388
  this.trackUserDisplayTextForTitle(promptPayload?.displayText);
40341
40389
  this.turnParentUuids.push(this.lastRecordUuid);
40342
40390
  const record4 = {
40343
40391
  ...this.createBaseRecord("user"),
40392
+ ...daemonPromptId ? { daemonPromptId } : {},
40344
40393
  ...goalContext ? { goalContext: copyGoalContext(goalContext) } : {},
40345
40394
  message: createUserContent(message),
40346
40395
  ...promptPayload ? { systemPayload: promptPayload } : {}
@@ -43084,10 +43133,10 @@ function countAllInlineImages(contents) {
43084
43133
  return count;
43085
43134
  }
43086
43135
  __name(countAllInlineImages, "countAllInlineImages");
43087
- function replaceImagePayloadsInPlace(contents, store2, skipContent) {
43136
+ function replaceImagePayloadsInPlace(contents, store, skipContent) {
43088
43137
  const replaced = [];
43089
43138
  for (const part of inlineImageParts(contents, skipContent)) {
43090
- const stored = store2.put(part);
43139
+ const stored = store.put(part);
43091
43140
  replaced.push(stored);
43092
43141
  part.text = imageReferenceText(stored);
43093
43142
  delete part.inlineData;
@@ -43095,9 +43144,9 @@ function replaceImagePayloadsInPlace(contents, store2, skipContent) {
43095
43144
  return replaced;
43096
43145
  }
43097
43146
  __name(replaceImagePayloadsInPlace, "replaceImagePayloadsInPlace");
43098
- function buildReattachParts(replaced, maxRecentImages, referencedContents = [], store2) {
43147
+ function buildReattachParts(replaced, maxRecentImages, referencedContents = [], store) {
43099
43148
  const referencedIds = collectReferencedImageIds(referencedContents);
43100
- if (replaced.length === 0 && (!store2 || referencedIds.size === 0)) return [];
43149
+ if (replaced.length === 0 && (!store || referencedIds.size === 0)) return [];
43101
43150
  const inlineIds = collectInlineImageIds(referencedContents);
43102
43151
  const last = referencedContents.at(-1);
43103
43152
  const lastReferencedIds = collectReferencedImageIds(
@@ -43106,10 +43155,10 @@ function buildReattachParts(replaced, maxRecentImages, referencedContents = [],
43106
43155
  const candidates = replaced.filter(
43107
43156
  (image) => !inlineIds.has(image.id) && !lastReferencedIds.has(image.id)
43108
43157
  ).map((stored) => ({ stored }));
43109
- if (store2) {
43158
+ if (store) {
43110
43159
  for (const id of referencedIds) {
43111
43160
  if (inlineIds.has(id) || lastReferencedIds.has(id)) continue;
43112
- const stored = store2.get(id);
43161
+ const stored = store.get(id);
43113
43162
  if (stored) candidates.push({ stored });
43114
43163
  }
43115
43164
  }
@@ -43117,12 +43166,12 @@ function buildReattachParts(replaced, maxRecentImages, referencedContents = [],
43117
43166
  ({ stored }) => stored
43118
43167
  );
43119
43168
  const reattachLimit = Math.max(maxRecentImages, 1);
43120
- if (store2) {
43169
+ if (store) {
43121
43170
  for (const id of lastReferencedIds) {
43122
43171
  if (inlineIds.has(id) || recent.some((image) => image.id === id)) {
43123
43172
  continue;
43124
43173
  }
43125
- const stored = store2.get(id);
43174
+ const stored = store.get(id);
43126
43175
  if (stored) {
43127
43176
  if (recent.length >= reattachLimit) recent.shift();
43128
43177
  recent.push(stored);
@@ -75719,6 +75768,21 @@ function attachJsonlTranscriptWriter(emitter, jsonlPath, options2) {
75719
75768
  agentRound: event.round
75720
75769
  });
75721
75770
  }, "onRoundText");
75771
+ const sessionReadiness = /* @__PURE__ */ new Map();
75772
+ const recordSessionReadiness = /* @__PURE__ */ __name((callId, ready) => {
75773
+ if (sessionReadiness.get(callId) === ready) return;
75774
+ sessionReadiness.set(callId, ready);
75775
+ recordSystem("agent_session_ready", {
75776
+ callId,
75777
+ subagentSessionReady: ready
75778
+ });
75779
+ }, "recordSessionReadiness");
75780
+ const onToolOutputUpdate = /* @__PURE__ */ __name((event) => {
75781
+ const output = event.outputChunk;
75782
+ if (typeof output === "object" && output !== null && "subagentSessionReady" in output && typeof output.subagentSessionReady === "boolean") {
75783
+ recordSessionReadiness(event.callId, output.subagentSessionReady);
75784
+ }
75785
+ }, "onToolOutputUpdate");
75722
75786
  const onToolCall = /* @__PURE__ */ __name((event) => {
75723
75787
  append({
75724
75788
  ...baseFields("assistant"),
@@ -75735,6 +75799,9 @@ function attachJsonlTranscriptWriter(emitter, jsonlPath, options2) {
75735
75799
  ]
75736
75800
  }
75737
75801
  });
75802
+ if (event.name === ToolNames.AGENT) {
75803
+ recordSessionReadiness(event.callId, false);
75804
+ }
75738
75805
  }, "onToolCall");
75739
75806
  const onToolResponsesFinalized = /* @__PURE__ */ __name((event) => {
75740
75807
  for (const response of event.responses) {
@@ -75743,6 +75810,9 @@ function attachJsonlTranscriptWriter(emitter, jsonlPath, options2) {
75743
75810
  message: { role: "user", parts: response.responseParts },
75744
75811
  toolCallResult: {
75745
75812
  callId: response.callId,
75813
+ ...sessionReadiness.has(response.callId) && response.responseParts.some(
75814
+ (part) => part.functionResponse?.response?.["error"]
75815
+ ) ? { status: "error" } : {},
75746
75816
  ...response.durationMs !== void 0 ? { durationMs: response.durationMs } : {}
75747
75817
  }
75748
75818
  });
@@ -75787,12 +75857,14 @@ function attachJsonlTranscriptWriter(emitter, jsonlPath, options2) {
75787
75857
  emitter.on("round_text" /* ROUND_TEXT */, onRoundText);
75788
75858
  emitter.on("stream_text" /* STREAM_TEXT */, appendStreamText);
75789
75859
  emitter.on("tool_call" /* TOOL_CALL */, onToolCall);
75860
+ emitter.on("tool_output_update" /* TOOL_OUTPUT_UPDATE */, onToolOutputUpdate);
75790
75861
  emitter.on("tool_responses_finalized" /* TOOL_RESPONSES_FINALIZED */, onToolResponsesFinalized);
75791
75862
  emitter.on("external_message" /* EXTERNAL_MESSAGE */, onExternalMessage);
75792
75863
  const cleanup = /* @__PURE__ */ __name(() => {
75793
75864
  emitter.off("round_text" /* ROUND_TEXT */, onRoundText);
75794
75865
  emitter.off("stream_text" /* STREAM_TEXT */, appendStreamText);
75795
75866
  emitter.off("tool_call" /* TOOL_CALL */, onToolCall);
75867
+ emitter.off("tool_output_update" /* TOOL_OUTPUT_UPDATE */, onToolOutputUpdate);
75796
75868
  emitter.off(
75797
75869
  "tool_responses_finalized" /* TOOL_RESPONSES_FINALIZED */,
75798
75870
  onToolResponsesFinalized
@@ -77439,6 +77511,7 @@ var AgentToolInvocation = class extends BaseToolInvocation {
77439
77511
  taskDescription: this.params.description,
77440
77512
  taskPrompt: this.params.prompt,
77441
77513
  executionMode: shouldRunInBackground ? "background" : "foreground",
77514
+ subagentSessionReady: false,
77442
77515
  status: "running",
77443
77516
  subagentColor: subagentConfig.color
77444
77517
  };
@@ -77844,6 +77917,7 @@ ${taskPrompt}`;
77844
77917
  depth: launchDepth,
77845
77918
  model: subagentModelId
77846
77919
  });
77920
+ this.updateDisplay({ subagentSessionReady: true }, updateOutput);
77847
77921
  const bgEmitter = bgSubagent.getCore().getEventEmitter();
77848
77922
  let liveToolCallCount = 0;
77849
77923
  const refreshLiveStats = /* @__PURE__ */ __name(() => {
@@ -78436,6 +78510,7 @@ output_file: ${jsonlPath} (for review after the completion notification, not for
78436
78510
  // childLaunchDepth() for the rationale.
78437
78511
  depth: launchDepth
78438
78512
  });
78513
+ this.updateDisplay({ subagentSessionReady: true }, updateOutput);
78439
78514
  const stopHookWarning = await runFramed();
78440
78515
  const terminateMode = subagent.getTerminateMode();
78441
78516
  const finalText = appendStopHookBlockingCapWarning(
@@ -84088,7 +84163,7 @@ function recoverTranscript(records) {
84088
84163
  const stableForBranch = [...filtered];
84089
84164
  while (stableForBranch.length > 0) {
84090
84165
  const last = stableForBranch[stableForBranch.length - 1];
84091
- if (isWhitespaceOnlyAssistant(last)) {
84166
+ if (isWhitespaceOnlyAssistant(last) || last.type === "system" && last.subtype === "agent_session_ready") {
84092
84167
  stableForBranch.pop();
84093
84168
  continue;
84094
84169
  }
@@ -92660,24 +92735,6 @@ The current date is: ${today}. Note: This is the authoritative current date \u20
92660
92735
  for (const goalEvent of takePendingGoalEvents()) {
92661
92736
  yield goalEvent;
92662
92737
  }
92663
- const activeGoalAtTurnStart = goalRuntime?.getSnapshot().goal ? void 0 : getActiveGoal(this.config.getSessionId());
92664
- if (activeGoalAtTurnStart) {
92665
- yield {
92666
- type: "active_goal" /* ActiveGoal */,
92667
- value: activeGoalAtTurnStart
92668
- };
92669
- }
92670
- let lastEmittedActiveGoal2 = activeGoalAtTurnStart;
92671
- const maybeEmitActiveGoalChange = /* @__PURE__ */ __name((nextActiveGoal) => {
92672
- if (activeGoalEquals(lastEmittedActiveGoal2, nextActiveGoal)) {
92673
- return void 0;
92674
- }
92675
- lastEmittedActiveGoal2 = nextActiveGoal;
92676
- return {
92677
- type: "active_goal" /* ActiveGoal */,
92678
- value: nextActiveGoal ?? null
92679
- };
92680
- }, "maybeEmitActiveGoalChange");
92681
92738
  messageDisplay = hooksEnabled && messageBus && this.config.hasHooksForEvent("MessageDisplay") ? new MessageDisplayDispatcher(
92682
92739
  messageBus,
92683
92740
  signal,
@@ -92889,17 +92946,10 @@ The current date is: ${today}. Note: This is the authoritative current date \u20
92889
92946
  for (const goalEvent of takePendingGoalEvents()) {
92890
92947
  yield goalEvent;
92891
92948
  }
92892
- const activeGoalAfterStopHook = goalPermit ? void 0 : getActiveGoal(this.config.getSessionId());
92893
92949
  if (signal.aborted) {
92894
92950
  for (const goalEvent of await finalizeInterruptedGoalTurn()) {
92895
92951
  yield goalEvent;
92896
92952
  }
92897
- const activeGoalEvent2 = maybeEmitActiveGoalChange(
92898
- activeGoalAfterStopHook
92899
- );
92900
- if (activeGoalEvent2) {
92901
- yield activeGoalEvent2;
92902
- }
92903
92953
  endCurrentInteraction("cancelled");
92904
92954
  return turn;
92905
92955
  }
@@ -92999,16 +93049,10 @@ The current date is: ${today}. Note: This is the authoritative current date \u20
92999
93049
  }
93000
93050
  if (!goalPermit && (stopOutput?.isBlockingDecision() || stopOutput?.shouldStopExecution())) {
93001
93051
  if (signal.aborted) {
93002
- const activeGoalEvent3 = maybeEmitActiveGoalChange(
93003
- activeGoalAfterStopHook
93004
- );
93005
- if (activeGoalEvent3) {
93006
- yield activeGoalEvent3;
93007
- }
93008
93052
  endCurrentInteraction("cancelled");
93009
93053
  return turn;
93010
93054
  }
93011
- const continueReason = getStopHookContinuationReason(stopOutput);
93055
+ const continueReason = stopOutput.getEffectiveReason();
93012
93056
  const currentIterationCount = (options2?.stopHookState?.iterationCount ?? 0) + 1;
93013
93057
  const currentReasons = [
93014
93058
  ...options2?.stopHookState?.reasons ?? [],
@@ -93020,18 +93064,6 @@ The current date is: ${today}. Note: This is the authoritative current date \u20
93020
93064
  "Stop",
93021
93065
  stopHookBlockingCap
93022
93066
  );
93023
- abortGoalForStopHookCap(
93024
- this.config,
93025
- this.config.getSessionId(),
93026
- warning
93027
- );
93028
- const activeGoalAfterCap = getActiveGoal(
93029
- this.config.getSessionId()
93030
- );
93031
- const activeGoalEvent3 = maybeEmitActiveGoalChange(activeGoalAfterCap);
93032
- if (activeGoalEvent3) {
93033
- yield activeGoalEvent3;
93034
- }
93035
93067
  yield {
93036
93068
  type: "hook_system_message" /* HookSystemMessage */,
93037
93069
  value: warning
@@ -93049,12 +93081,6 @@ The current date is: ${today}. Note: This is the authoritative current date \u20
93049
93081
  endCurrentInteraction("ok");
93050
93082
  return turn;
93051
93083
  }
93052
- const activeGoalEvent2 = maybeEmitActiveGoalChange(
93053
- activeGoalAfterStopHook
93054
- );
93055
- if (activeGoalEvent2) {
93056
- yield activeGoalEvent2;
93057
- }
93058
93084
  yield {
93059
93085
  type: "stop_hook_loop" /* StopHookLoop */,
93060
93086
  value: {
@@ -93064,42 +93090,11 @@ The current date is: ${today}. Note: This is the authoritative current date \u20
93064
93090
  }
93065
93091
  };
93066
93092
  this.loopDetector.reset(prompt_id);
93067
- const activeGoal = getActiveGoal(this.config.getSessionId());
93068
- const hookTurnBudget = activeGoal ? boundedTurns : boundedTurns - 1;
93093
+ const hookTurnBudget = boundedTurns - 1;
93069
93094
  const pendingSteer = await takeSteerInput(hookTurnBudget);
93070
- const activeGoalAfterSteer = getActiveGoal(
93071
- this.config.getSessionId()
93072
- );
93073
- const activeGoalChanged = activeGoal !== void 0 && activeGoalAfterSteer?.hookId !== activeGoal.hookId;
93074
- const goalContinuationChanged = activeGoalChanged && stopOutput.hookSpecificOutput?.[GOAL_HOOK_ID_OUTPUT_KEY] === activeGoal.hookId;
93075
- if (activeGoalChanged) {
93076
- const activeGoalEvent3 = maybeEmitActiveGoalChange(activeGoalAfterSteer);
93077
- if (activeGoalEvent3) {
93078
- yield activeGoalEvent3;
93079
- }
93080
- }
93081
- const discardGoalContinuation = goalContinuationChanged && response.hasNonGoalBlockingStopHook === false;
93082
- const continuationReasonAfterSteer = discardGoalContinuation ? void 0 : goalContinuationChanged && response.hasNonGoalBlockingStopHook === true ? response.nonGoalBlockingStopReason || "No reason provided" : continueReason;
93083
- if (!continuationReasonAfterSteer && !pendingSteer) {
93084
- await this.settlePendingGoalProposal(
93085
- true,
93086
- signal,
93087
- loadGoalRuntime,
93088
- prompt_id
93089
- );
93090
- for (const goalEvent of takePendingGoalEvents()) {
93091
- yield goalEvent;
93092
- }
93093
- endCurrentInteraction("ok");
93094
- normalCompletion = true;
93095
- return turn;
93096
- }
93097
- const continueRequest = continuationReasonAfterSteer ? [{ text: continuationReasonAfterSteer }] : [];
93095
+ const continueRequest = [{ text: continueReason }];
93098
93096
  if (pendingSteer) {
93099
- if (continueRequest.length > 0) {
93100
- continueRequest.push({ text: "\n\n" });
93101
- }
93102
- continueRequest.push(...pendingSteer.parts);
93097
+ continueRequest.push({ text: "\n\n" }, ...pendingSteer.parts);
93103
93098
  }
93104
93099
  const pushCountBefore = currentPushCount();
93105
93100
  let hookTurn;
@@ -93113,12 +93108,9 @@ The current date is: ${today}. Note: This is the authoritative current date \u20
93113
93108
  modelOverride: options2?.modelOverride,
93114
93109
  getSteerInput: options2?.getSteerInput,
93115
93110
  steerInput: pendingSteer,
93116
- stopHookState: discardGoalContinuation ? void 0 : {
93111
+ stopHookState: {
93117
93112
  iterationCount: currentIterationCount,
93118
- reasons: continuationReasonAfterSteer && continuationReasonAfterSteer !== continueReason ? [
93119
- ...currentReasons.slice(0, -1),
93120
- continuationReasonAfterSteer
93121
- ] : currentReasons
93113
+ reasons: currentReasons
93122
93114
  }
93123
93115
  },
93124
93116
  hookTurnBudget
@@ -93142,12 +93134,6 @@ The current date is: ${today}. Note: This is the authoritative current date \u20
93142
93134
  normalCompletion = true;
93143
93135
  return hookTurn;
93144
93136
  }
93145
- const activeGoalEvent = maybeEmitActiveGoalChange(
93146
- activeGoalAfterStopHook
93147
- );
93148
- if (activeGoalEvent) {
93149
- yield activeGoalEvent;
93150
- }
93151
93137
  for (const goalEvent of takePendingGoalEvents()) {
93152
93138
  yield goalEvent;
93153
93139
  }
@@ -136916,6 +136902,27 @@ __name(isImageGenerationCapable, "isImageGenerationCapable");
136916
136902
  init_esbuild_shims();
136917
136903
  import { AsyncLocalStorage as AsyncLocalStorage2 } from "node:async_hooks";
136918
136904
 
136905
+ // packages/core/src/agents/workflow-failure-lines.ts
136906
+ init_esbuild_shims();
136907
+ var MAX_FAILURE_LINES = 10;
136908
+ var MAX_FAILURE_LINE_CHARS = 400;
136909
+ function buildFailureLines(source) {
136910
+ const failed = source.dispatches.filter((d) => d.status === "failed");
136911
+ if (failed.length === 0) return [];
136912
+ const shown = failed.slice(0, MAX_FAILURE_LINES);
136913
+ const lines = shown.map((dispatch) => {
136914
+ const label = stripAnsiAndControl(dispatch.label || "workflow-agent");
136915
+ const error3 = stripAnsiAndControl(dispatch.error || "dispatch failed");
136916
+ return `[${label}] ${error3}`.slice(0, MAX_FAILURE_LINE_CHARS);
136917
+ });
136918
+ const remaining = failed.length - shown.length;
136919
+ if (remaining > 0) {
136920
+ lines.push(`\u2026 and ${remaining} more failures omitted`);
136921
+ }
136922
+ return lines;
136923
+ }
136924
+ __name(buildFailureLines, "buildFailureLines");
136925
+
136919
136926
  // packages/core/src/agents/workflow-resume-call.ts
136920
136927
  init_esbuild_shims();
136921
136928
  var RESUME_ARGS_CHARS = 300;
@@ -137128,6 +137135,12 @@ var WorkflowRunRegistry = class {
137128
137135
  );
137129
137136
  }
137130
137137
  modelParts.push(`<usage>${escapeXml(buildUsageLine(entry))}</usage>`);
137138
+ const failures = buildFailureLines(entry);
137139
+ if (failures.length > 0) {
137140
+ modelParts.push(
137141
+ `<failures>${escapeXmlElementText(failures.join("\n"))}</failures>`
137142
+ );
137143
+ }
137131
137144
  const recovery = entry.status === "failed" ? buildRecoveryLines(entry) : buildDiagnosticsLines(entry);
137132
137145
  if (recovery.length > 0) {
137133
137146
  const tag2 = entry.status === "failed" ? "recovery" : "diagnostics";
@@ -137227,6 +137240,7 @@ var WorkflowRunRegistry = class {
137227
137240
  entry.dispatches = [];
137228
137241
  entry.agentsDispatched = 0;
137229
137242
  entry.agentsCompleted = 0;
137243
+ entry.agentsRespawned = 0;
137230
137244
  entry.recentLogs = [];
137231
137245
  entry.events = [];
137232
137246
  entry.tokensSpent = 0;
@@ -137626,6 +137640,19 @@ var WorkflowRunRegistry = class {
137626
137640
  entry.agentsCompleted++;
137627
137641
  this.emitStatusChange(entry);
137628
137642
  }
137643
+ /**
137644
+ * A resume re-ran a call the journal already knew about. Counted for the
137645
+ * usage line and written to the log the user reads in `/workflows`, because
137646
+ * "why is it running that agent again?" is the first question a resume
137647
+ * raises and the journal alone cannot answer it out loud.
137648
+ */
137649
+ onResumeRespawn(runId, line) {
137650
+ const entry = this.entries.get(runId);
137651
+ if (!entry || !isActiveWorkflowStatus(entry.status) && entry.status !== "cancelled")
137652
+ return;
137653
+ entry.agentsRespawned = (entry.agentsRespawned ?? 0) + 1;
137654
+ this.onLogAppended(runId, line);
137655
+ }
137629
137656
  /**
137630
137657
  * P5: mirror a `budgetUpdated` emitter event into the entry. Attributes
137631
137658
  * the cumulative delta (`spent - entry.tokensSpent`) to the entry's
@@ -138047,6 +138074,7 @@ function buildUsageLine(entry) {
138047
138074
  `agents_cached=${countByStatus("cached")}`,
138048
138075
  `agents_failed=${countByStatus("failed")}`,
138049
138076
  `agents_cancelled=${countByStatus("cancelled")}`,
138077
+ `agents_respawned=${entry.agentsRespawned ?? 0}`,
138050
138078
  `tokens_spent=${entry.tokensSpent}`,
138051
138079
  `duration_ms=${durationMs}`
138052
138080
  ].join(" ");
@@ -153883,6 +153911,14 @@ var HookPlanner = class {
153883
153911
  // packages/core/src/hooks/hookEventHandler.ts
153884
153912
  init_esbuild_shims();
153885
153913
  var debugLogger110 = createDebugLogger("TRUSTED_HOOKS");
153914
+ function normalizeQuestionHookResponse(toolName, response, displayKey) {
153915
+ const display = response[displayKey];
153916
+ if (toolName === ToolNames.ASK_USER_QUESTION && display !== null && typeof display === "object" && "type" in display && display.type === "ask_user_question_answers" && "text" in display && typeof display.text === "string") {
153917
+ return { ...response, [displayKey]: display.text };
153918
+ }
153919
+ return response;
153920
+ }
153921
+ __name(normalizeQuestionHookResponse, "normalizeQuestionHookResponse");
153886
153922
  var HookEventHandler = class {
153887
153923
  static {
153888
153924
  __name(this, "HookEventHandler");
@@ -154131,7 +154167,11 @@ var HookEventHandler = class {
154131
154167
  permission_mode: permissionMode,
154132
154168
  tool_name: toolName,
154133
154169
  tool_input: toolInput,
154134
- tool_response: toolResponse,
154170
+ tool_response: normalizeQuestionHookResponse(
154171
+ toolName,
154172
+ toolResponse,
154173
+ "returnDisplay"
154174
+ ),
154135
154175
  tool_use_id: toolUseId,
154136
154176
  ...tool_call_id && { tool_call_id }
154137
154177
  };
@@ -154195,7 +154235,16 @@ var HookEventHandler = class {
154195
154235
  const input = {
154196
154236
  ...this.createBaseInput("PostToolBatch" /* PostToolBatch */),
154197
154237
  permission_mode: permissionMode,
154198
- tool_calls: toolCalls
154238
+ tool_calls: toolCalls.map(
154239
+ (call) => call.tool_response ? {
154240
+ ...call,
154241
+ tool_response: normalizeQuestionHookResponse(
154242
+ call.tool_name,
154243
+ call.tool_response,
154244
+ "result_display"
154245
+ )
154246
+ } : call
154247
+ )
154199
154248
  };
154200
154249
  return this.executeHooks(
154201
154250
  "PostToolBatch" /* PostToolBatch */,
@@ -161117,6 +161166,7 @@ var Config = class _Config {
161117
161166
  contextRuleExcludes;
161118
161167
  approvalMode;
161119
161168
  prePlanMode;
161169
+ planExecutionMode;
161120
161170
  approvalModeRevision = 0;
161121
161171
  manualPlanExitNoticeEventState = {
161122
161172
  version: 0,
@@ -161822,8 +161872,6 @@ var Config = class _Config {
161822
161872
  }
161823
161873
  let result;
161824
161874
  let stopHookCount;
161825
- let hasNonGoalBlockingStopHook;
161826
- let nonGoalBlockingStopReason;
161827
161875
  const input = request.input || {};
161828
161876
  const signal = request.signal;
161829
161877
  switch (request.eventName) {
@@ -161855,18 +161903,6 @@ var Config = class _Config {
161855
161903
  );
161856
161904
  result = stopResult.finalOutput ? createHookOutput("Stop", stopResult.finalOutput) : void 0;
161857
161905
  stopHookCount = stopResult.allOutputs.length;
161858
- const goalHookId = stopResult.finalOutput?.hookSpecificOutput?.[GOAL_HOOK_ID_OUTPUT_KEY];
161859
- if (typeof goalHookId === "string") {
161860
- const nonGoalBlockingOutputs = stopResult.allOutputs.filter(
161861
- (output) => output.hookSpecificOutput?.[GOAL_HOOK_ID_OUTPUT_KEY] !== goalHookId && (output.decision === "block" || output.decision === "deny" || output.continue === false)
161862
- );
161863
- hasNonGoalBlockingStopHook = nonGoalBlockingOutputs.length > 0;
161864
- if (hasNonGoalBlockingStopHook) {
161865
- nonGoalBlockingStopReason = nonGoalBlockingOutputs.map(
161866
- (output) => output.stopReason || output.reason || "No reason provided"
161867
- ).join("\n");
161868
- }
161869
- }
161870
161906
  break;
161871
161907
  }
161872
161908
  case "MessageDisplay": {
@@ -161981,9 +162017,7 @@ var Config = class _Config {
161981
162017
  success: true,
161982
162018
  output: result,
161983
162019
  // Include stop hook count for Stop events
161984
- stopHookCount,
161985
- hasNonGoalBlockingStopHook,
161986
- nonGoalBlockingStopReason
162020
+ stopHookCount
161987
162021
  });
161988
162022
  } catch (error3) {
161989
162023
  this.debugLogger.warn(`Hook execution failed: ${error3}`);
@@ -162583,6 +162617,9 @@ var Config = class _Config {
162583
162617
  }
162584
162618
  );
162585
162619
  const newContentGeneratorConfig = config3;
162620
+ if (priorReasoning === false && newContentGeneratorConfig.thinkingMandatory !== true) {
162621
+ newContentGeneratorConfig.reasoning = false;
162622
+ }
162586
162623
  this.contentGenerator = await createContentGenerator(
162587
162624
  newContentGeneratorConfig,
162588
162625
  this,
@@ -162591,6 +162628,9 @@ var Config = class _Config {
162591
162628
  this.contentGeneratorConfig = newContentGeneratorConfig;
162592
162629
  this.contentGeneratorConfigSources = sources;
162593
162630
  this.publishModelEnv();
162631
+ if (priorReasoning === false && newContentGeneratorConfig.reasoning === false) {
162632
+ this.modelsConfig.getGenerationConfig().reasoning = false;
162633
+ }
162594
162634
  if (priorReasoningEffort) {
162595
162635
  this.setReasoningEffort(priorReasoningEffort);
162596
162636
  }
@@ -162997,6 +163037,19 @@ var Config = class _Config {
162997
163037
  getCurrentModelRegistryBaseUrl() {
162998
163038
  return this.modelsConfig.getCurrentRegistryBaseUrl();
162999
163039
  }
163040
+ /**
163041
+ * The auth type of the currently selected model, read from `ModelsConfig`
163042
+ * rather than the content generator config.
163043
+ *
163044
+ * Unlike {@link getAuthType}, this is usable before `refreshAuth` has run —
163045
+ * the tool registry is built during `initialize()`, which happens first (the
163046
+ * ACP bridge calls `initialize()` and only later `refreshAuth`). Callers that
163047
+ * need the selected model's provider entry at registry-build time must use
163048
+ * this.
163049
+ */
163050
+ getCurrentAuthType() {
163051
+ return this.modelsConfig.getCurrentAuthType();
163052
+ }
163000
163053
  /**
163001
163054
  * Resolve the effective input modalities of the current primary model. The
163002
163055
  * content generator config always carries resolved modalities (name-based
@@ -163230,15 +163283,19 @@ var Config = class _Config {
163230
163283
  */
163231
163284
  getReasoningEffortOverride() {
163232
163285
  const cfg = this.getContentGeneratorConfig();
163233
- if (!cfg || !DashScopeOpenAICompatibleProvider.isDashScopeProvider(cfg) || !isTieredEffortWireModel(cfg.model)) {
163286
+ if (!cfg || !DashScopeOpenAICompatibleProvider.isDashScopeProvider(cfg)) {
163234
163287
  return void 0;
163235
163288
  }
163289
+ const configuredReasoning = cfg.authType ? this.getResolvedModelConfig(cfg.authType, cfg.model, cfg.baseUrl)?.capabilities.reasoning : void 0;
163290
+ const tieredModel = isTieredEffortWireModel(cfg.model, configuredReasoning);
163291
+ if (!tieredModel) return void 0;
163236
163292
  const currentEffort = this.getReasoningEffort();
163237
163293
  const selected = selectDashScopeThinkingKnob(
163238
163294
  cfg.model,
163239
163295
  cfg.extra_body,
163240
163296
  cfg.samplingParams,
163241
- currentEffort
163297
+ currentEffort,
163298
+ tieredModel
163242
163299
  );
163243
163300
  if (!selected || selected.source === "reasoning" || selected.field === "reasoning_effort" && selected.value === currentEffort) {
163244
163301
  return void 0;
@@ -163251,7 +163308,8 @@ var Config = class _Config {
163251
163308
  cfg.model,
163252
163309
  void 0,
163253
163310
  cfg.samplingParams,
163254
- currentEffort
163311
+ currentEffort,
163312
+ tieredModel
163255
163313
  );
163256
163314
  if (below?.source === "samplingParams" && below.field === "reasoning_effort" && below.value !== currentEffort) {
163257
163315
  return { source: below.source, field: below.field };
@@ -164732,6 +164790,24 @@ var Config = class _Config {
164732
164790
  getPrePlanMode() {
164733
164791
  return this.prePlanMode ?? "default" /* DEFAULT */;
164734
164792
  }
164793
+ getPlanExecutionMode() {
164794
+ return Object.hasOwn(this, "planExecutionMode") ? this.planExecutionMode : void 0;
164795
+ }
164796
+ setPlanMode(enabled, executionMode) {
164797
+ if (isDerivedConfig(this)) {
164798
+ throw new Error("Derived Configs cannot change plan workflow mode");
164799
+ }
164800
+ if (executionMode === "plan" /* PLAN */) {
164801
+ throw new Error("Plan is not an execution approval mode");
164802
+ }
164803
+ if (!this.isTrustedFolder() && executionMode !== "default" /* DEFAULT */) {
164804
+ throw new TrustGateError(
164805
+ "Cannot enable privileged approval modes in an untrusted folder."
164806
+ );
164807
+ }
164808
+ this.setApprovalMode(enabled ? "plan" /* PLAN */ : executionMode);
164809
+ this.planExecutionMode = enabled ? executionMode : void 0;
164810
+ }
164735
164811
  getApprovalModeRevision() {
164736
164812
  return this.approvalModeRevision;
164737
164813
  }
@@ -164792,6 +164868,7 @@ var Config = class _Config {
164792
164868
  this.autoModeDenialState = resetDenialState();
164793
164869
  }
164794
164870
  this.approvalMode = mode;
164871
+ if (mode !== "plan" /* PLAN */) this.planExecutionMode = void 0;
164795
164872
  if (fromMode !== mode) {
164796
164873
  this.approvalModeRevision++;
164797
164874
  }
@@ -166536,35 +166613,35 @@ var Config = class _Config {
166536
166613
  const registerGoalWorkerTools = /* @__PURE__ */ __name(async () => {
166537
166614
  if (options2?.forSubAgent) return;
166538
166615
  await registerLazy(ToolNames.GET_GOAL, async () => {
166539
- const { GetGoalTool: GetGoalTool2 } = await import("./goal-tools-DFI6YMSD.js");
166616
+ const { GetGoalTool: GetGoalTool2 } = await import("./goal-tools-245ULLQT.js");
166540
166617
  return new GetGoalTool2(this);
166541
166618
  });
166542
166619
  await registerLazy(ToolNames.UPDATE_GOAL, async () => {
166543
- const { UpdateGoalTool: UpdateGoalTool2 } = await import("./goal-tools-DFI6YMSD.js");
166620
+ const { UpdateGoalTool: UpdateGoalTool2 } = await import("./goal-tools-245ULLQT.js");
166544
166621
  return new UpdateGoalTool2(this);
166545
166622
  });
166546
166623
  if (this.getModelProposedGoals() !== "disabled" && resolveInteractionMode(this) === "interactive") {
166547
166624
  await registerLazy(ToolNames.PROPOSE_GOAL, async () => {
166548
- const { ProposeGoalTool: ProposeGoalTool2 } = await import("./goal-tools-DFI6YMSD.js");
166625
+ const { ProposeGoalTool: ProposeGoalTool2 } = await import("./goal-tools-245ULLQT.js");
166549
166626
  return new ProposeGoalTool2(this);
166550
166627
  });
166551
166628
  }
166552
166629
  }, "registerGoalWorkerTools");
166553
166630
  if (this.getBareMode()) {
166554
166631
  await registerLazy(ToolNames.READ_FILE, async () => {
166555
- const { ReadFileTool } = await import("./read-file-KHPQ2MB6.js");
166632
+ const { ReadFileTool } = await import("./read-file-S2NOCBIL.js");
166556
166633
  return new ReadFileTool(this);
166557
166634
  });
166558
166635
  await registerLazy(ToolNames.EDIT, async () => {
166559
- const { EditTool } = await import("./edit-LB7Z7XK5.js");
166636
+ const { EditTool } = await import("./edit-4IBADZ3O.js");
166560
166637
  return new EditTool(this);
166561
166638
  });
166562
166639
  await registerLazy(ToolNames.NOTEBOOK_EDIT, async () => {
166563
- const { NotebookEditTool } = await import("./notebook-edit-HGBEKGTE.js");
166640
+ const { NotebookEditTool } = await import("./notebook-edit-YM47A7WO.js");
166564
166641
  return new NotebookEditTool(this);
166565
166642
  });
166566
166643
  await registerLazy(ToolNames.SHELL, async () => {
166567
- const { ShellTool: ShellTool2 } = await import("./shell-Q5LSQPPY.js");
166644
+ const { ShellTool: ShellTool2 } = await import("./shell-YBVCOPVO.js");
166568
166645
  return new ShellTool2(this);
166569
166646
  });
166570
166647
  await registerGoalWorkerTools();
@@ -166576,7 +166653,7 @@ var Config = class _Config {
166576
166653
  }
166577
166654
  await registerGoalWorkerTools();
166578
166655
  await registerLazy(ToolNames.TOOL_SEARCH, async () => {
166579
- const { ToolSearchTool } = await import("./tool-search-VXWEOZE7.js");
166656
+ const { ToolSearchTool } = await import("./tool-search-MCDIRPHN.js");
166580
166657
  return new ToolSearchTool(this);
166581
166658
  });
166582
166659
  await registerLazy(ToolNames.READ_MCP_RESOURCE, async () => {
@@ -166584,11 +166661,11 @@ var Config = class _Config {
166584
166661
  return new ReadMcpResourceTool(this);
166585
166662
  });
166586
166663
  await registerLazy(ToolNames.AGENT, async () => {
166587
- const { AgentTool: AgentTool2 } = await import("./agent-GSUPGEOL.js");
166664
+ const { AgentTool: AgentTool2 } = await import("./agent-EF3IIYE3.js");
166588
166665
  return new AgentTool2(this);
166589
166666
  });
166590
166667
  await registerLazy(ToolNames.LIST_AGENTS, async () => {
166591
- const { ListAgentsTool } = await import("./list-agents-I5TRH3J7.js");
166668
+ const { ListAgentsTool } = await import("./list-agents-EDPZCGKN.js");
166592
166669
  return new ListAgentsTool(this);
166593
166670
  });
166594
166671
  await registerLazy(ToolNames.TASK_STOP, async () => {
@@ -166596,11 +166673,11 @@ var Config = class _Config {
166596
166673
  return new TaskStopTool(this);
166597
166674
  });
166598
166675
  await registerLazy(ToolNames.SEND_MESSAGE, async () => {
166599
- const { SendMessageTool } = await import("./send-message-AWKUDJBH.js");
166676
+ const { SendMessageTool } = await import("./send-message-V5T3NMFM.js");
166600
166677
  return new SendMessageTool(this);
166601
166678
  });
166602
166679
  await registerLazy(ToolNames.SKILL, async () => {
166603
- const { SkillTool } = await import("./skill-75KPJRCM.js");
166680
+ const { SkillTool } = await import("./skill-AXC63EBA.js");
166604
166681
  return new SkillTool(this);
166605
166682
  });
166606
166683
  if (this.isLsToolEnabled()) {
@@ -166610,11 +166687,11 @@ var Config = class _Config {
166610
166687
  });
166611
166688
  }
166612
166689
  await registerLazy(ToolNames.READ_FILE, async () => {
166613
- const { ReadFileTool } = await import("./read-file-KHPQ2MB6.js");
166690
+ const { ReadFileTool } = await import("./read-file-S2NOCBIL.js");
166614
166691
  return new ReadFileTool(this);
166615
166692
  });
166616
166693
  await registerLazy(ToolNames.ZOOM_IMAGE, async () => {
166617
- const { ZoomImageTool } = await import("./zoom-image-TDJJY2VZ.js");
166694
+ const { ZoomImageTool } = await import("./zoom-image-BYVIXSNQ.js");
166618
166695
  return new ZoomImageTool(this);
166619
166696
  });
166620
166697
  if (this.getUseRipgrep()) {
@@ -166629,7 +166706,7 @@ var Config = class _Config {
166629
166706
  recordStartupEvent("config_initialize_ripgrep_probe_end");
166630
166707
  if (useRipgrep) {
166631
166708
  await registerLazy(ToolNames.GREP, async () => {
166632
- const { RipGrepTool } = await import("./ripGrep-NBBVCMG4.js");
166709
+ const { RipGrepTool } = await import("./ripGrep-F6TNOJUO.js");
166633
166710
  return new RipGrepTool(this);
166634
166711
  });
166635
166712
  } else {
@@ -166655,23 +166732,23 @@ var Config = class _Config {
166655
166732
  });
166656
166733
  }
166657
166734
  await registerLazy(ToolNames.GLOB, async () => {
166658
- const { GlobTool } = await import("./glob-73EDTXUE.js");
166735
+ const { GlobTool } = await import("./glob-ERBD7JYP.js");
166659
166736
  return new GlobTool(this);
166660
166737
  });
166661
166738
  await registerLazy(ToolNames.EDIT, async () => {
166662
- const { EditTool } = await import("./edit-LB7Z7XK5.js");
166739
+ const { EditTool } = await import("./edit-4IBADZ3O.js");
166663
166740
  return new EditTool(this);
166664
166741
  });
166665
166742
  await registerLazy(ToolNames.NOTEBOOK_EDIT, async () => {
166666
- const { NotebookEditTool } = await import("./notebook-edit-HGBEKGTE.js");
166743
+ const { NotebookEditTool } = await import("./notebook-edit-YM47A7WO.js");
166667
166744
  return new NotebookEditTool(this);
166668
166745
  });
166669
166746
  await registerLazy(ToolNames.WRITE_FILE, async () => {
166670
- const { WriteFileTool } = await import("./write-file-L76CGFTQ.js");
166747
+ const { WriteFileTool } = await import("./write-file-DWLKFBTJ.js");
166671
166748
  return new WriteFileTool(this);
166672
166749
  });
166673
166750
  await registerLazy(ToolNames.SHELL, async () => {
166674
- const { ShellTool: ShellTool2 } = await import("./shell-Q5LSQPPY.js");
166751
+ const { ShellTool: ShellTool2 } = await import("./shell-YBVCOPVO.js");
166675
166752
  return new ShellTool2(this);
166676
166753
  });
166677
166754
  if (this.isTodoWriteEnabled()) {
@@ -166687,19 +166764,19 @@ var Config = class _Config {
166687
166764
  const supportsUserInteraction = resolveInteractionMode(this) !== "headless";
166688
166765
  if (supportsUserInteraction) {
166689
166766
  await registerLazy(ToolNames.ASK_USER_QUESTION, async () => {
166690
- const { AskUserQuestionTool: AskUserQuestionTool2 } = await import("./askUserQuestion-I5W5S3D6.js");
166767
+ const { AskUserQuestionTool: AskUserQuestionTool2 } = await import("./askUserQuestion-R3TXY77M.js");
166691
166768
  return new AskUserQuestionTool2(this);
166692
166769
  });
166693
166770
  }
166694
166771
  if (!this.sdkMode && (supportsUserInteraction || options2?.forSubAgent)) {
166695
166772
  await registerLazy(ToolNames.EXIT_PLAN_MODE, async () => {
166696
- const { ExitPlanModeTool: ExitPlanModeTool2 } = await import("./exitPlanMode-A3OKL5UO.js");
166773
+ const { ExitPlanModeTool: ExitPlanModeTool2 } = await import("./exitPlanMode-24J5IHGC.js");
166697
166774
  return new ExitPlanModeTool2(this);
166698
166775
  });
166699
166776
  }
166700
166777
  if (!this.sdkMode && supportsUserInteraction) {
166701
166778
  await registerLazy(ToolNames.ENTER_PLAN_MODE, async () => {
166702
- const { EnterPlanModeTool } = await import("./enterPlanMode-P6TVUFIY.js");
166779
+ const { EnterPlanModeTool } = await import("./enterPlanMode-YN3GPQU5.js");
166703
166780
  return new EnterPlanModeTool(this);
166704
166781
  });
166705
166782
  }
@@ -166712,7 +166789,7 @@ var Config = class _Config {
166712
166789
  return new ExitWorktreeTool(this);
166713
166790
  });
166714
166791
  await registerLazy(ToolNames.WEB_FETCH, async () => {
166715
- const { WebFetchTool } = await import("./web-fetch-FMZZYX44.js");
166792
+ const { WebFetchTool } = await import("./web-fetch-QBXAO6VF.js");
166716
166793
  return new WebFetchTool(this);
166717
166794
  });
166718
166795
  if (resolveInteractionMode(this) === "interactive" && !this.sdkMode && !this.getScreenReader() && !options2?.forSubAgent) {
@@ -166721,15 +166798,16 @@ var Config = class _Config {
166721
166798
  return new DisplayImageTool(this);
166722
166799
  });
166723
166800
  }
166724
- if (this.webSearchSettings?.enabled) {
166725
- const { evaluateWebSearchGate } = await import("./web-search-3G2KXCX5.js");
166801
+ const hasExplicitWebSearchBackend = !!this.webSearchSettings?.model?.trim() || !!this.webSearchSettings?.baseUrl;
166802
+ if (!this.getBareMode() && !this.isSafeMode() && this.webSearchSettings?.enabled !== false && (this.webSearchSettings?.enabled === true || !hasExplicitWebSearchBackend)) {
166803
+ const { evaluateWebSearchGate } = await import("./web-search-2URQXA3A.js");
166726
166804
  const gate = evaluateWebSearchGate(this);
166727
166805
  if (gate.ok) {
166728
166806
  await registerLazy(ToolNames.WEB_SEARCH, async () => {
166729
- const { WebSearchTool } = await import("./web-search-3G2KXCX5.js");
166807
+ const { WebSearchTool } = await import("./web-search-2URQXA3A.js");
166730
166808
  return new WebSearchTool(this);
166731
166809
  });
166732
- } else if (!this.webSearchNoticeEmitted && !options2?.forSubAgent) {
166810
+ } else if (!gate.silent && !this.webSearchNoticeEmitted && !options2?.forSubAgent) {
166733
166811
  this.webSearchNoticeEmitted = true;
166734
166812
  this.warnings.push(gate.notice);
166735
166813
  }
@@ -166737,7 +166815,7 @@ var Config = class _Config {
166737
166815
  await this.registerImageGenerationTool(registry3);
166738
166816
  if (this.isArtifactEnabled()) {
166739
166817
  await registerLazy(ToolNames.ARTIFACT, async () => {
166740
- const { ArtifactTool } = await import("./artifact-tool-P52OKKEF.js");
166818
+ const { ArtifactTool } = await import("./artifact-tool-G5LHNECG.js");
166741
166819
  return new ArtifactTool(this);
166742
166820
  });
166743
166821
  }
@@ -166780,15 +166858,15 @@ var Config = class _Config {
166780
166858
  }
166781
166859
  if (this.isAgentTeamEnabled()) {
166782
166860
  await registerLazy(ToolNames.TEAM_CREATE, async () => {
166783
- const { TeamCreateTool } = await import("./team-create-2PATB77U.js");
166861
+ const { TeamCreateTool } = await import("./team-create-BUFLGGSH.js");
166784
166862
  return new TeamCreateTool(this);
166785
166863
  });
166786
166864
  await registerLazy(ToolNames.TEAM_DELETE, async () => {
166787
- const { TeamDeleteTool } = await import("./team-delete-CBHVBTPB.js");
166865
+ const { TeamDeleteTool } = await import("./team-delete-IQZ6XGFI.js");
166788
166866
  return new TeamDeleteTool(this);
166789
166867
  });
166790
166868
  await registerLazy(ToolNames.TEAM_PLAN_APPROVAL, async () => {
166791
- const { TeamPlanApprovalTool } = await import("./team-plan-approval-QTANEWOS.js");
166869
+ const { TeamPlanApprovalTool } = await import("./team-plan-approval-OUWWM42U.js");
166792
166870
  return new TeamPlanApprovalTool(this);
166793
166871
  });
166794
166872
  if (!options2?.forSubAgent) {
@@ -166798,26 +166876,26 @@ var Config = class _Config {
166798
166876
  });
166799
166877
  }
166800
166878
  await registerLazy(ToolNames.TASK_CREATE, async () => {
166801
- const { TaskCreateTool } = await import("./task-create-PMAFST2T.js");
166879
+ const { TaskCreateTool } = await import("./task-create-MWXJFRRM.js");
166802
166880
  return new TaskCreateTool(this);
166803
166881
  });
166804
166882
  await registerLazy(ToolNames.TASK_UPDATE, async () => {
166805
- const { TaskUpdateTool } = await import("./task-update-JYC57USF.js");
166883
+ const { TaskUpdateTool } = await import("./task-update-2JJJRHMT.js");
166806
166884
  return new TaskUpdateTool(this);
166807
166885
  });
166808
166886
  await registerLazy(ToolNames.TASK_LIST, async () => {
166809
- const { TaskListTool } = await import("./task-list-R2HSY2NC.js");
166887
+ const { TaskListTool } = await import("./task-list-EYO3FE57.js");
166810
166888
  return new TaskListTool(this);
166811
166889
  });
166812
166890
  }
166813
166891
  if (this.isWorkflowsEnabled()) {
166814
166892
  await registerLazy(ToolNames.WORKFLOW, async () => {
166815
- const { WorkflowTool } = await import("./workflow-PPZZICQ7.js");
166893
+ const { WorkflowTool } = await import("./workflow-JDD6WDAH.js");
166816
166894
  return new WorkflowTool(this);
166817
166895
  });
166818
166896
  }
166819
166897
  await registerLazy(ToolNames.MONITOR, async () => {
166820
- const { MonitorTool } = await import("./monitor-BV5XF6LL.js");
166898
+ const { MonitorTool } = await import("./monitor-RKK6GSHG.js");
166821
166899
  return new MonitorTool(this);
166822
166900
  });
166823
166901
  if (this.pendingMcpBudgetCallback) {
@@ -167570,9 +167648,6 @@ export {
167570
167648
  parseGoalSnapshotV2,
167571
167649
  parseGoalStateCause,
167572
167650
  GoalPersistenceUnavailableError,
167573
- getActiveGoal,
167574
- getStopHookContinuationReason,
167575
- abortGoalForStopHookCap,
167576
167651
  checkPriorRead,
167577
167652
  goalTurnContext,
167578
167653
  GetGoalTool,
@@ -167654,6 +167729,7 @@ export {
167654
167729
  replaceSessionPrs,
167655
167730
  buildApiHistoryFromConversation,
167656
167731
  collectSessionTurnState,
167732
+ computeInitialTurnFromHistory,
167657
167733
  SESSION_TRANSCRIPT_MAX_LIMIT,
167658
167734
  SESSION_TRANSCRIPT_MAX_INDEX_BYTES,
167659
167735
  SESSION_TRANSCRIPT_MAX_PAGE_BYTES,
@@ -167875,6 +167951,7 @@ export {
167875
167951
  MAX_CONCURRENT_MONITORS,
167876
167952
  getMonitorOutputPath,
167877
167953
  isImageGenerationCapable,
167954
+ buildFailureLines,
167878
167955
  RESUME_ARGS_TOO_LARGE_NOTE,
167879
167956
  hasUninlinableResumeArgs,
167880
167957
  buildResumeCall,