nolo-cli 0.213.0 → 0.222.0-alpha.2

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 (262) hide show
  1. package/README.md +3 -2
  2. package/{_executeModel-CUJLCFWR.js → _executeModel-4GGQQHOB.js} +111 -82
  3. package/{accountResolver-4LKIHEKL.js → accountResolver-EK2S4PWF.js} +6 -6
  4. package/{action-DF5UYSJF.js → action-CK64LS6S.js} +12 -11
  5. package/{addContentAction-WERAONNY.js → addContentAction-GDHDOF4U.js} +18 -17
  6. package/{addDialogAgentAction-7VI7YRML.js → addDialogAgentAction-CAKRU3ZT.js} +21 -20
  7. package/{agentDeleteCommand-XJORXPGU.js → agentDeleteCommand-BPV2XZL7.js} +128 -119
  8. package/{agentEmailCommands-XTYYFR6Z.js → agentEmailCommands-EJOS75YL.js} +132 -124
  9. package/{agentFavoriteCommands-EDK743YA.js → agentFavoriteCommands-2LKGKSUD.js} +7 -8
  10. package/{agentGrantCommands-RQWK2TEV.js → agentGrantCommands-QQV4N4JW.js} +5 -5
  11. package/{agentListCommands-OBLRBLHS.js → agentListCommands-HIZODBF3.js} +155 -92
  12. package/{agentMachineCommands-5FMT3OT5.js → agentMachineCommands-ZMQ2CY7Y.js} +62 -54
  13. package/{agentProviderCommands-Q5O33MED.js → agentProviderCommands-WKJOAWBP.js} +5 -5
  14. package/{agentPullCommand-6EM3URVK.js → agentPullCommand-XN6ZPBUW.js} +7 -7
  15. package/agentRecordCommands-OMXVDLDX.js +176 -0
  16. package/agentRunCommand-CB34YWMV.js +206 -0
  17. package/{agentRunControl-TAMHJQSR.js → agentRunControl-JNONH3RP.js} +30 -15
  18. package/{agentRuntimeLocal-SOO2OPJG.js → agentRuntimeLocal-QZPFWMLG.js} +52 -45
  19. package/{agentSlice-CHR6KOZN.js → agentSlice-RD2CDU7T.js} +20 -19
  20. package/{appDeleteCommands-GUP6P5YE.js → appDeleteCommands-QCCFDIEQ.js} +61 -53
  21. package/{appDeployCommands-MH2FX4O5.js → appDeployCommands-V2T7TNMQ.js} +61 -53
  22. package/{appDeployStatusCommands-SUHN3HPJ.js → appDeployStatusCommands-6PGH7ZCG.js} +61 -53
  23. package/{appGetCommands-YWDEX6Z4.js → appGetCommands-3L7WWJA6.js} +61 -53
  24. package/{appListCommands-ZQVMLPAY.js → appListCommands-ENJCK4PO.js} +61 -53
  25. package/{authCommand-PWX2ZNUP.js → authCommand-6V47SYGK.js} +29 -28
  26. package/{authCommands-HV3EAU3V.js → authCommands-GAJ3NIXO.js} +14 -13
  27. package/{builtinSkillRegistry-2QETTQPM.js → builtinSkillRegistry-2ECA42FC.js} +11 -13
  28. package/{chromeCommands-REEAH4SX.js → chromeCommands-G5UDKVSV.js} +3 -3
  29. package/{chromeOpsCommands-DIVM2K3T.js → chromeOpsCommands-YKX2QX3A.js} +20 -10
  30. package/{chunk-CRHOO2ZR.js → chunk-27PCUMJI.js} +2 -2
  31. package/chunk-2CI3ZFWD.js +97 -0
  32. package/{chunk-NSAPDIN2.js → chunk-2GJKRKI6.js} +541 -31
  33. package/{chunk-SM3NSZJV.js → chunk-2UCBGYO4.js} +20 -1
  34. package/{chunk-PYRUW7XN.js → chunk-2VUZSVAS.js} +136 -54
  35. package/{chunk-YB3YZK56.js → chunk-2WZXXAQD.js} +1 -67
  36. package/chunk-2YGBI2XB.js +30 -0
  37. package/chunk-2ZKFCIJJ.js +13 -0
  38. package/{chunk-QG4AOSON.js → chunk-34J5K2YA.js} +13 -32
  39. package/{chunk-LOEO7LRC.js → chunk-3IK6ILVW.js} +4 -1
  40. package/{chunk-CTPXME7U.js → chunk-3LMUPOHG.js} +29 -6
  41. package/chunk-44X52WOJ.js +1621 -0
  42. package/{chunk-6VLJ6YA7.js → chunk-4DESLZTK.js} +9 -9
  43. package/{chunk-MYOH447Z.js → chunk-4JVNURX4.js} +1 -1
  44. package/chunk-5CHGAKRT.js +364 -0
  45. package/{chunk-YDH3FDFQ.js → chunk-5FUN7EG4.js} +1 -1
  46. package/{chunk-INUFILG6.js → chunk-5RKUPJYL.js} +1 -1
  47. package/{chunk-ZC3CMUKU.js → chunk-6OVNSQHN.js} +84 -2
  48. package/{chunk-MOIJOHA5.js → chunk-6WU5572L.js} +36 -25
  49. package/{chunk-IXNGOHV5.js → chunk-7EEZJ6BS.js} +11 -152
  50. package/{chunk-Y6ORVLSS.js → chunk-7ET2U67U.js} +1 -1
  51. package/{chunk-G7MLNNEX.js → chunk-7JLY4WYF.js} +5 -5
  52. package/{chunk-P5L7CXOC.js → chunk-7Z6EW7AH.js} +3 -2
  53. package/{chunk-NJLL224W.js → chunk-AD5EWDFD.js} +2 -2
  54. package/{chunk-J2NHJ7WX.js → chunk-AIHYNKGV.js} +4 -4
  55. package/{chunk-HPFCI4SK.js → chunk-AK5O76CC.js} +3 -3
  56. package/{chunk-Y63ZSOR6.js → chunk-AL3TYDIF.js} +1 -1
  57. package/{chunk-ALQ3657A.js → chunk-AMEOV5VZ.js} +32 -12
  58. package/chunk-AN74ON4G.js +675 -0
  59. package/{chunk-HRMJUN5J.js → chunk-AQZ6BMRK.js} +1 -1
  60. package/{chunk-XHQC4PXX.js → chunk-B4GOW4MT.js} +424 -194
  61. package/{chunk-4KB6WQUL.js → chunk-BGP2EDFG.js} +1 -1
  62. package/{chunk-NBTY7YJF.js → chunk-BR3GT6MR.js} +1 -0
  63. package/{chunk-7RFNTILS.js → chunk-BUDVRYES.js} +2 -2
  64. package/{chunk-SVYO6AO7.js → chunk-BV3FLP2L.js} +41 -1
  65. package/{chunk-RZOV7OMV.js → chunk-C4VAR65S.js} +83 -141
  66. package/{chunk-COFEN36Z.js → chunk-C4WTX5TU.js} +2 -2
  67. package/{chunk-ZL5RAEEB.js → chunk-CIRB724Q.js} +1 -1
  68. package/{chunk-F6UUQOG6.js → chunk-CKT6QUE2.js} +4 -4
  69. package/{chunk-X7SDOJUM.js → chunk-CMZ3Z5PT.js} +14 -14
  70. package/{secretCommands-LXDWOLZ6.js → chunk-D726I5AZ.js} +191 -16
  71. package/{chunk-TAKB25RM.js → chunk-DNKTQ3IN.js} +4 -4
  72. package/chunk-DVQH4BTR.js +1137 -0
  73. package/{chunk-WYDI6TGM.js → chunk-DWX2HEVC.js} +91 -132
  74. package/{chunk-5MQRBSMW.js → chunk-EIAI3PPH.js} +111 -113
  75. package/chunk-EUCFKKDM.js +247 -0
  76. package/chunk-EWQ3HGNZ.js +90 -0
  77. package/{chunk-RPQXPZZF.js → chunk-F3GRJO4Z.js} +908 -13
  78. package/{chunk-YTF4WH7J.js → chunk-FIYSMXHY.js} +1 -1
  79. package/{chunk-75XIDFBW.js → chunk-FJ23FZXF.js} +72 -28
  80. package/{chunk-INN4LTAJ.js → chunk-FJK526XH.js} +2 -2
  81. package/chunk-FS2XP5D7.js +142 -0
  82. package/{chunk-FUGMREBO.js → chunk-FYF2TONJ.js} +5 -5
  83. package/{chunk-PCLE46CE.js → chunk-GBWGPTA7.js} +2 -1
  84. package/{chunk-TX5EYMGT.js → chunk-GYVCJABP.js} +30 -254
  85. package/{chunk-3UKL3HPD.js → chunk-HOCHUZQ7.js} +8 -78
  86. package/{chunk-EHSZD5OI.js → chunk-HXER7YJF.js} +4 -4
  87. package/chunk-HYIETXA6.js +99 -0
  88. package/{chunk-H2TJUNCH.js → chunk-I4EADJ4P.js} +6 -6
  89. package/{chunk-TCZHTTUU.js → chunk-I7WBYGBP.js} +8 -8
  90. package/{chunk-6DWMYIUY.js → chunk-IILMY4W4.js} +14 -9
  91. package/chunk-JA3ICVJY.js +271 -0
  92. package/{chunk-ZRSNONOB.js → chunk-JWXITTQB.js} +8 -3
  93. package/{chunk-H4UOTUOX.js → chunk-KEN3N2TN.js} +148 -18
  94. package/{chunk-LEC5ALIN.js → chunk-KEPOVMF4.js} +1 -1
  95. package/{chunk-UHJGXRJ4.js → chunk-KQSYAIZR.js} +3 -3
  96. package/{chunk-4VJAC32I.js → chunk-L5I543VB.js} +3 -2
  97. package/chunk-LKA64WH4.js +227 -0
  98. package/{chunk-QHPRUL4O.js → chunk-LVL6GFCM.js} +4 -4
  99. package/{chunk-H5HF7TJA.js → chunk-MAIITKBT.js} +2 -2
  100. package/chunk-MBG66ZBH.js +226 -0
  101. package/{chunk-YUA6OAH5.js → chunk-MDLS23JK.js} +2 -2
  102. package/{chunk-VL5KOY2C.js → chunk-MK2Q7ZJD.js} +67 -5
  103. package/{chunk-MDB67IWP.js → chunk-MS4NZNKI.js} +10 -10
  104. package/{chunk-VO4WSAVP.js → chunk-MYHNBEXD.js} +3 -3
  105. package/{chunk-ZXOUUDCG.js → chunk-MZLE5HQ3.js} +3654 -231
  106. package/{chunk-AZMYUSVF.js → chunk-N5Z2V73W.js} +1 -1
  107. package/{chunk-V5Y3R6BT.js → chunk-NIZ2BXFD.js} +213 -210
  108. package/{chunk-KFLT5KAD.js → chunk-NWP2OYOX.js} +20 -20
  109. package/{chunk-G2BQWAVT.js → chunk-O6J3OTOP.js} +4 -4
  110. package/{chunk-VNYYOX3V.js → chunk-OB6DVWPF.js} +141 -48
  111. package/{chunk-YWSEPJ7C.js → chunk-OBWT45ZU.js} +3 -3
  112. package/{chunk-ZNWI6OVT.js → chunk-ODJ7BVSI.js} +80 -11
  113. package/{chunk-XJWWBO34.js → chunk-OJKUU3LP.js} +5 -7
  114. package/{chunk-HUBHAQK2.js → chunk-ON37YXGX.js} +29 -29
  115. package/{chunk-UYD5HQ6T.js → chunk-P5ZJRTCH.js} +5429 -1752
  116. package/{chunk-6XIE5ZGI.js → chunk-PDCV7P5W.js} +1 -1
  117. package/{chunk-WRYQ35LQ.js → chunk-PJCIP64Z.js} +859 -57
  118. package/{chunk-7QTZCMKL.js → chunk-PJVKMGPZ.js} +1089 -1639
  119. package/{chunk-A7TFUNZO.js → chunk-PPJYZRSQ.js} +6 -2
  120. package/chunk-QHEN7NZ7.js +46 -0
  121. package/{chunk-OQPKUBPB.js → chunk-QNWG52I4.js} +19 -7
  122. package/{chunk-YGILMZ7N.js → chunk-QVBXJNZ2.js} +1 -1
  123. package/{chunk-7BT37FK3.js → chunk-RDH5CQ4T.js} +648 -131
  124. package/{chunk-C6KNNXWU.js → chunk-RGQ4UUWZ.js} +25 -2
  125. package/{chunk-OWYYDMGJ.js → chunk-S2NTVGA2.js} +4 -2
  126. package/{chunk-KC4XDTT3.js → chunk-SOF4OWDM.js} +6 -4
  127. package/{chunk-RLBNLZVC.js → chunk-SQYIK6HO.js} +1 -1
  128. package/{chunk-YJAFKXMU.js → chunk-SVT62ULE.js} +50 -48
  129. package/{chunk-KIM6CLW5.js → chunk-SY3C4SQ7.js} +42 -15
  130. package/{chunk-JY5NGFFH.js → chunk-SYTHYBMI.js} +5 -5
  131. package/{chunk-WMTBPBMP.js → chunk-T6DXNI6Z.js} +52 -50
  132. package/chunk-TLE77UJ5.js +230 -0
  133. package/{chunk-4VNS5WPM.js → chunk-U67V476Y.js} +1 -8
  134. package/{chunk-F7CI2ZC5.js → chunk-UAIHKQIA.js} +2 -1
  135. package/{chunk-R5O4QAWG.js → chunk-UB3D4TRQ.js} +11 -77
  136. package/{chunk-WPORQFYN.js → chunk-UVLYNWIE.js} +2 -2
  137. package/{chunk-NOKUNJON.js → chunk-UYOICCYG.js} +29 -19
  138. package/{chunk-4I7ERB7F.js → chunk-VREDDN25.js} +1 -1
  139. package/{chunk-O2TZF4AI.js → chunk-WAE3GFCJ.js} +3 -3
  140. package/{chunk-H7PPIYWP.js → chunk-WI67URFP.js} +20 -20
  141. package/{chunk-7OCO4TDT.js → chunk-WJVYAO6P.js} +1 -1
  142. package/{chunk-T43B7LB2.js → chunk-WKGQSYTB.js} +1 -1
  143. package/{chunk-BBJ22CLB.js → chunk-WUUH4LWZ.js} +60 -30
  144. package/{chunk-4T2WNOY7.js → chunk-X7UF53VA.js} +33 -22
  145. package/{chunk-TY3TIUJK.js → chunk-XI2BWJM5.js} +65 -0
  146. package/{chunk-LLRPJECG.js → chunk-XWVCYUUU.js} +16 -159
  147. package/{chunk-J5JTMQIA.js → chunk-YFLVRVYK.js} +1 -1
  148. package/{chunk-EYLGAEB4.js → chunk-YGMBIXCF.js} +132 -0
  149. package/chunk-YL3EFYL3.js +199 -0
  150. package/{chunk-MMA3LZ3W.js → chunk-YNIYE47Z.js} +1 -1
  151. package/{chunk-W4S457LU.js → chunk-YU4ZPWVF.js} +41 -5
  152. package/{chunk-7Y4YTDQF.js → chunk-YWWDC3O7.js} +281 -159
  153. package/chunk-YZMNK53S.js +68 -0
  154. package/{chunk-RSHTSUEG.js → chunk-Z2PITYZN.js} +2060 -602
  155. package/{chunk-FY7F4Q6X.js → chunk-Z4PCXPUE.js} +2 -2
  156. package/{cliAgentConfigHelpers-WJBZQTLW.js → cliAgentConfigHelpers-TKYL43MT.js} +15 -16
  157. package/{cliAuthorityBrokerClient-PM3U6Q6J.js → cliAuthorityBrokerClient-XHH7MH2P.js} +1 -1
  158. package/{cliAuthorityStoreDriver-TKLXNNTG.js → cliAuthorityStoreDriver-6FE3BJNB.js} +1 -1
  159. package/{cliEnvHelpers-BVYTMUPJ.js → cliEnvHelpers-VPSJ4XWC.js} +3 -3
  160. package/{cliExecutor-BWBF2MTI.js → cliExecutor-4MAX3PZL.js} +2 -2
  161. package/cliLocalAgentRecordReader-MHHD4T7R.js +90 -0
  162. package/{commandRegistry-W63CYRZJ.js → commandRegistry-5DA5UP7S.js} +105 -97
  163. package/{contentThunks-U7PL5MQD.js → contentThunks-5GUQ7FWJ.js} +47 -43
  164. package/{cooldownCommands-TIGUHXTD.js → cooldownCommands-X7P5M2V5.js} +5 -4
  165. package/{createAgentAutomationAction-OLBQDD6R.js → createAgentAutomationAction-UCLTHQRI.js} +51 -49
  166. package/{createDialogAction-SVH6B3SB.js → createDialogAction-UPN774AF.js} +46 -48
  167. package/{createPageAction-F4DIWZ2Z.js → createPageAction-JRQ2TA4O.js} +50 -48
  168. package/{cursorProvider-YGGNMVWX.js → cursorProvider-2RACMEMF.js} +1 -1
  169. package/{db-HUCI5R4G.js → db-CS4ZJQKV.js} +1 -1
  170. package/{dbSlice-BVH2YZPQ.js → dbSlice-WNON7TOL.js} +17 -16
  171. package/{deleteFile-5YOEKV4U.js → deleteFile-Q3YDB4ML.js} +9 -9
  172. package/{desktopFolderProjects-SFY5EZS3.js → desktopFolderProjects-4POAMVJN.js} +2 -2
  173. package/{dialogCommands-KHIEPY3M.js → dialogCommands-VRI7VCXH.js} +64 -57
  174. package/dialogNotifyCommand-6TMCX4D2.js +36 -0
  175. package/{dialogSlice-ZCTDV2PZ.js → dialogSlice-LFNVUSAN.js} +42 -40
  176. package/{dialogUsageCommand-7KCPYGHG.js → dialogUsageCommand-HTVPR2CX.js} +11 -10
  177. package/{docCreateCommands-DPMZI7G5.js → docCreateCommands-AMPXMOX3.js} +61 -55
  178. package/{docDeleteCommands-IRQQLUBT.js → docDeleteCommands-I5WFAEHP.js} +63 -57
  179. package/{docReadCommands-LK37XH6L.js → docReadCommands-X53ELNIE.js} +61 -55
  180. package/{docStore-V2KECILA.js → docStore-2VAWVLWH.js} +21 -20
  181. package/{docUpdateCommands-O6T3HJHH.js → docUpdateCommands-6QPNDC7M.js} +64 -58
  182. package/{fetchMessages-NR4KNQLO.js → fetchMessages-TQEUZD7H.js} +8 -7
  183. package/{getPricing-2MNMXEVG.js → getPricing-MB2GBXOK.js} +6 -6
  184. package/{handleSendMessageAction-2PE25WM3.js → handleSendMessageAction-AAJOHXOB.js} +194 -302
  185. package/{hostCredentialCreate-S233UMAP.js → hostCredentialCreate-GLMJ22M6.js} +123 -114
  186. package/index.js +29 -29
  187. package/{keys-BEGDOTRL.js → keys-RWF7UCB4.js} +5 -4
  188. package/legacyMigration-TF4SYJCZ.js +19 -0
  189. package/{lib-5KKIBFIT.js → lib-OT5OTXRU.js} +7087 -6664
  190. package/{localDialogRead-7NNDVVF7.js → localDialogRead-SVTPA5GY.js} +3 -3
  191. package/{localFirstLog-DHNOY2NA.js → localFirstLog-OIETGK66.js} +1 -1
  192. package/localRecall-2J6QPOK2.js +15 -0
  193. package/{localRuntimeAdapter-KY6WXNBR.js → localRuntimeAdapter-BMP57P42.js} +119 -110
  194. package/{localRuntimeAuthority-OYH4AE4G.js → localRuntimeAuthority-IBJAT62G.js} +1 -1
  195. package/{localRuntimeDb-VBIMCWUC.js → localRuntimeDb-N7KHDXS2.js} +2 -2
  196. package/{machineCommands-Q6HA3IXF.js → machineCommands-3MLIAK5Q.js} +128 -119
  197. package/{machineInfo-UKPTZO5Y.js → machineInfo-LWHTEBHJ.js} +1 -1
  198. package/machineWsRunDispatch-FKIGROQF.js +191 -0
  199. package/{memberThunks-7EDJADWU.js → memberThunks-ZGLZ36PK.js} +29 -28
  200. package/{memoryCommands-ASCE5STX.js → memoryCommands-5WC3T66U.js} +4 -4
  201. package/models-ULVWLSQ6.js +9 -0
  202. package/{oauthTokenStore-OEERZFUC.js → oauthTokenStore-RUYNYALS.js} +1 -1
  203. package/{offlineMarxistsAgentCommand-2QTHJCHV.js → offlineMarxistsAgentCommand-4IC3Y4C6.js} +4 -4
  204. package/overlay-THLKYIWY.js +11 -0
  205. package/package.json +2 -2
  206. package/{pdf-U6KSUEZZ.js → pdf-KE3QI2V7.js} +1 -1
  207. package/{processSpawn-ZU5QFM43.js → processSpawn-6GEO77KV.js} +1 -1
  208. package/{profileConfig-KN3N2BLF.js → profileConfig-KOWK4HOG.js} +1 -1
  209. package/{projectArchive-DRTDIMEV.js → projectArchive-HK63GMF4.js} +52 -50
  210. package/{providerPresetApply-YXGV6NXB.js → providerPresetApply-OIFQ73LH.js} +19 -12
  211. package/{providerRegistry-S6UL6UNA.js → providerRegistry-KZ3SDZ3D.js} +10 -10
  212. package/{read-4V2RMG7N.js → read-MRQHJMJ2.js} +10 -10
  213. package/{readDocTool-BH6ATGQO.js → readDocTool-4BGTXTXA.js} +2 -2
  214. package/{readlineWorkspace-2W4WRCOU.js → readlineWorkspace-AKAHSCNY.js} +7982 -6274
  215. package/{removeDialogAgentAction-LYAZGNKW.js → removeDialogAgentAction-B6H7DXFM.js} +23 -22
  216. package/{runAgentClientLoop-J2VQBS2Z.js → runAgentClientLoop-UVAWGEON.js} +81 -79
  217. package/{runtimeDoctorCommands-QAI3MBKQ.js → runtimeDoctorCommands-FW6XKDUG.js} +12 -12
  218. package/{runtimeModeArgs-2Y7BALTO.js → runtimeModeArgs-X7DL7PUN.js} +1 -1
  219. package/secretCommands-LJXOOYA7.js +24 -0
  220. package/{setDialogExtraReferencesAction-OCRPGPYH.js → setDialogExtraReferencesAction-EVCY3TRW.js} +22 -21
  221. package/{setPrimaryDialogAgentAction-HFJDQIBU.js → setPrimaryDialogAgentAction-KPFVPHCJ.js} +23 -22
  222. package/{settingThunks-RAMHMTGM.js → settingThunks-ENOAK2WV.js} +97 -88
  223. package/{skillDiscovery-XKHROSH2.js → skillDiscovery-B5V23AXP.js} +4 -4
  224. package/{skillSummaryMarker-42HKSXYY.js → skillSummaryMarker-62UW7HI7.js} +1 -1
  225. package/{slateToRenderMarkdown-Y5IYN73U.js → slateToRenderMarkdown-R3X74MCX.js} +1 -1
  226. package/{slateUtils-NGV2NMKM.js → slateUtils-ESQAJ6RN.js} +1 -1
  227. package/{spaceCommands-KVJZVKVO.js → spaceCommands-DTTNAS2L.js} +61 -53
  228. package/store-JRVN62NM.js +46 -0
  229. package/{streamAgentChatTurn-GHBMJJ6S.js → streamAgentChatTurn-R5UY25VB.js} +875 -618
  230. package/{switchDialogAgentAction-EBRMW3RA.js → switchDialogAgentAction-SZ44XDRY.js} +21 -20
  231. package/{tableCommands-MP6VFSVT.js → tableCommands-HITDSLHS.js} +10 -10
  232. package/tombstones-FQQMEDOW.js +32 -0
  233. package/{toolApiClient-HGNO53TC.js → toolApiClient-OGQEBQVX.js} +4 -4
  234. package/{tools-EWKCPKMS.js → tools-HWFG6GMJ.js} +75 -74
  235. package/tuiSummaryLlmCaller-HQQZAMYF.js +44 -0
  236. package/{updateCommands-ZQYU6SCI.js → updateCommands-RJVCRSBP.js} +10 -8
  237. package/{updateDialogTitleAction-5GGMBTDF.js → updateDialogTitleAction-KNPOAMVS.js} +48 -46
  238. package/{usageCommand-F4IPVMIZ.js → usageCommand-FWZCB7AM.js} +11 -10
  239. package/{usageRebuildCommand-HAW2AD5N.js → usageRebuildCommand-SP2BLNJU.js} +12 -11
  240. package/userDataMerge-HT2ZVHBJ.js +13 -0
  241. package/{windowsSelfUpdate-257DV2T6.js → windowsSelfUpdate-KERHIAB4.js} +3 -3
  242. package/{workloadLifecycle-4C42SVBD.js → workloadLifecycle-DYNEYHV5.js} +6 -6
  243. package/agentRecordCommands-ZQ7SVYGG.js +0 -167
  244. package/agentRunCommand-WS7IGO2W.js +0 -196
  245. package/chunk-3CGG2PAL.js +0 -594
  246. package/chunk-5XBUWM6I.js +0 -89
  247. package/chunk-CJEIOP3E.js +0 -0
  248. package/chunk-EHGEOAHI.js +0 -636
  249. package/chunk-FW6YHHLI.js +0 -842
  250. package/chunk-GPVRUGGY.js +0 -115
  251. package/chunk-HSVBJRF4.js +0 -339
  252. package/chunk-WJZOQR2J.js +0 -151
  253. package/chunk-ZCWRMUWT.js +0 -89
  254. package/dist-M676ULYG.js +0 -7314
  255. package/machineWsRunDispatch-WWJQ6WR3.js +0 -182
  256. package/models-PJBE6JDV.js +0 -9
  257. package/tuiSummaryLlmCaller-ALQYUUWB.js +0 -189
  258. package/{chunk-WACI5I6V.js → chunk-2THCNKE4.js} +3 -3
  259. package/{chunk-2QHFH3DR.js → chunk-47ITIXO7.js} +6 -6
  260. package/{chunk-GOO6G4PY.js → chunk-CKG3PRZ7.js} +0 -0
  261. package/{chunk-OQHIVPG4.js → chunk-SNBZZPYH.js} +3 -3
  262. package/{chunk-AETZ7AD6.js → chunk-W6RFEDN4.js} +3 -3
@@ -3,29 +3,11 @@ import {
3
3
  } from "./chunk-KFHREHUQ.js";
4
4
  import {
5
5
  buildAgentDiscoveryResult,
6
+ deriveCredentialGroup,
6
7
  resolveDiscoveryScope,
7
8
  resolvePaginationArgs,
8
9
  toDiscoverySafeAgentSummary
9
- } from "./chunk-QG4AOSON.js";
10
- import {
11
- getUserDataItemTimestamp,
12
- mergeAndDedupUserData
13
- } from "./chunk-PCLE46CE.js";
14
- import {
15
- addMemberSpace,
16
- applyFetchSpaceFulfilled,
17
- fetchAuthoritativeRemoteSpace,
18
- getAllMemberSpaces,
19
- removeMemberSpace,
20
- selectSpaceRemoteAuth,
21
- setMembershipLoaded,
22
- setMembershipLoading,
23
- setMembershipRejected,
24
- updateMemberSpaceName
25
- } from "./chunk-IXNGOHV5.js";
26
- import {
27
- markdownToSlate
28
- } from "./chunk-75XIDFBW.js";
10
+ } from "./chunk-34J5K2YA.js";
29
11
  import {
30
12
  ToolResultError,
31
13
  clipMultilineText,
@@ -38,7 +20,7 @@ import {
38
20
  toolRunUpdated,
39
21
  uiCardFallback,
40
22
  waitForAbortableDelay
41
- } from "./chunk-HUBHAQK2.js";
23
+ } from "./chunk-ON37YXGX.js";
42
24
  import {
43
25
  isGatewayHttpStatus
44
26
  } from "./chunk-NF64D32W.js";
@@ -52,10 +34,24 @@ import {
52
34
  import {
53
35
  AGENT_UPDATE_FIELD_NAMES,
54
36
  normalizeAgentUpdateFieldList
55
- } from "./chunk-R5O4QAWG.js";
37
+ } from "./chunk-UB3D4TRQ.js";
38
+ import {
39
+ markdownToSlate
40
+ } from "./chunk-FJ23FZXF.js";
41
+ import {
42
+ extractMentionsFromSlate
43
+ } from "./chunk-AGIM7IMJ.js";
44
+ import {
45
+ slateToRenderMarkdown
46
+ } from "./chunk-63W5N6P3.js";
56
47
  import {
57
48
  createDocState
58
- } from "./chunk-6DWMYIUY.js";
49
+ } from "./chunk-IILMY4W4.js";
50
+ import {
51
+ applyFetchSpaceFulfilled,
52
+ fetchAuthoritativeRemoteSpace,
53
+ selectSpaceRemoteAuth
54
+ } from "./chunk-7EEZJ6BS.js";
59
55
  import {
60
56
  ToolApiError,
61
57
  buildToolRequestHeaders,
@@ -63,23 +59,20 @@ import {
63
59
  getRequestConfig,
64
60
  getToolBaseUrl,
65
61
  getToolRequestContext
66
- } from "./chunk-MYOH447Z.js";
62
+ } from "./chunk-4JVNURX4.js";
67
63
  import {
68
64
  readDocFunc,
69
65
  readDocFunctionSchema,
70
66
  readPageFunc,
71
67
  readPageFunctionSchema,
72
68
  resolvePageReadMarkdown
73
- } from "./chunk-RLBNLZVC.js";
74
- import {
75
- extractMentionsFromSlate
76
- } from "./chunk-AGIM7IMJ.js";
69
+ } from "./chunk-SQYIK6HO.js";
77
70
  import {
78
- slateToRenderMarkdown
79
- } from "./chunk-63W5N6P3.js";
71
+ shareResourceAction
72
+ } from "./chunk-AK5O76CC.js";
80
73
  import {
81
74
  createDialogAction
82
- } from "./chunk-LLRPJECG.js";
75
+ } from "./chunk-XWVCYUUU.js";
83
76
  import {
84
77
  DEFAULT_COLLAPSED_CATEGORIES,
85
78
  addContentToSpace,
@@ -96,7 +89,7 @@ import {
96
89
  updateContentCategory,
97
90
  updateContentTitle,
98
91
  writeStoredCollapsedCategories
99
- } from "./chunk-7Y4YTDQF.js";
92
+ } from "./chunk-YWWDC3O7.js";
100
93
  import {
101
94
  buildDatabaseFileContentUrl,
102
95
  deleteDialog,
@@ -109,52 +102,56 @@ import {
109
102
  selectMsgById,
110
103
  uiAskChoiceFunc,
111
104
  uiAskChoiceFunctionSchema
112
- } from "./chunk-ZXOUUDCG.js";
105
+ } from "./chunk-MZLE5HQ3.js";
113
106
  import {
114
107
  createAgent,
115
108
  deleteServerSyncedCredential,
116
109
  runLlm,
117
110
  streamAgentChatTurn,
118
111
  updateAgent
119
- } from "./chunk-KFLT5KAD.js";
112
+ } from "./chunk-NWP2OYOX.js";
120
113
  import {
114
+ addMemberSpace,
115
+ getAllMemberSpaces,
121
116
  getCurrentSpaceId,
122
117
  getCurrentSpaceIdRaw,
123
118
  getCurrentSpaceRaw,
124
119
  getViewMode,
120
+ removeMemberSpace,
125
121
  setCurrentSpace,
126
122
  setCurrentSpaceBoth,
123
+ setMembershipLoaded,
124
+ setMembershipLoading,
125
+ setMembershipRejected,
127
126
  setViewMode,
128
- updateCurrentSpaceIfMatch
129
- } from "./chunk-5XBUWM6I.js";
127
+ updateCurrentSpaceIfMatch,
128
+ updateMemberSpaceName
129
+ } from "./chunk-MBG66ZBH.js";
130
130
  import {
131
131
  buildMediaToolConfirmation,
132
132
  normalizeMediaConfirmExecutionRevision
133
133
  } from "./chunk-QYPE3TS3.js";
134
- import {
135
- UNCATEGORIZED_ID,
136
- addContentAction,
137
- checkSpaceMembership
138
- } from "./chunk-GPVRUGGY.js";
139
- import {
140
- createSpaceKey,
141
- normalizeSpaceId
142
- } from "./chunk-UAD2WT54.js";
143
134
  import {
144
135
  getActiveDialogKey,
145
136
  selectCurrentDialogKey,
146
137
  selectPendingRawDataByPageKey
147
- } from "./chunk-OWYYDMGJ.js";
138
+ } from "./chunk-S2NTVGA2.js";
148
139
  import {
149
140
  require_react
150
- } from "./chunk-YDH3FDFQ.js";
151
- import {
152
- shareResourceAction
153
- } from "./chunk-HPFCI4SK.js";
141
+ } from "./chunk-5FUN7EG4.js";
154
142
  import {
155
143
  selectCurrentServer,
156
144
  selectSyncServers
157
- } from "./chunk-4I7ERB7F.js";
145
+ } from "./chunk-VREDDN25.js";
146
+ import {
147
+ UNCATEGORIZED_ID,
148
+ addContentAction,
149
+ checkSpaceMembership
150
+ } from "./chunk-JA3ICVJY.js";
151
+ import {
152
+ createSpaceKey,
153
+ normalizeSpaceId
154
+ } from "./chunk-UAD2WT54.js";
158
155
  import {
159
156
  patch,
160
157
  read,
@@ -166,10 +163,14 @@ import {
166
163
  selectEntities,
167
164
  toTimestampMs,
168
165
  write
169
- } from "./chunk-FW6YHHLI.js";
166
+ } from "./chunk-44X52WOJ.js";
167
+ import {
168
+ getUserDataItemTimestamp,
169
+ mergeAndDedupUserData
170
+ } from "./chunk-GBWGPTA7.js";
170
171
  import {
171
172
  readAction
172
- } from "./chunk-O2TZF4AI.js";
173
+ } from "./chunk-WAE3GFCJ.js";
173
174
  import {
174
175
  DEVICE_LOCAL_OWNER_ID,
175
176
  getRuntimeServerContext,
@@ -179,11 +180,11 @@ import {
179
180
  resolveEffectiveSpaceActorId,
180
181
  resolveRecordOwnerUserId,
181
182
  selectRuntimeSnapshot
182
- } from "./chunk-PYRUW7XN.js";
183
+ } from "./chunk-2VUZSVAS.js";
183
184
  import {
184
185
  createAsyncThunk,
185
186
  noloWriteRequest
186
- } from "./chunk-P5L7CXOC.js";
187
+ } from "./chunk-7Z6EW7AH.js";
187
188
  import {
188
189
  selectIdentityToken,
189
190
  selectIdentityUserBalance,
@@ -192,21 +193,13 @@ import {
192
193
  import {
193
194
  buildTombstoneRecord,
194
195
  isTombstoneRecord
195
- } from "./chunk-SVYO6AO7.js";
196
- import {
197
- CAPABILITY_PACKS
198
- } from "./chunk-EHGEOAHI.js";
199
- import {
200
- buildSkillDocMarkdown,
201
- normalizeSkillModalities,
202
- normalizeStringArray,
203
- parseExternalSkillMarkdown,
204
- parseSkillDocProtocol,
205
- resolvePageSkillMetadata
206
- } from "./chunk-AETZ7AD6.js";
196
+ } from "./chunk-BV3FLP2L.js";
207
197
  import {
198
+ AGENT_THREAD_ACTIVE_STATUSES,
199
+ AGENT_THREAD_TERMINAL_STATUSES,
208
200
  CLI_NOLO_WORKSPACE_TOOL_NAMES,
209
201
  DEFAULT_READ_DIALOG_MAX_RESPONSE_CHARS,
202
+ assertDispatchSelectionAdmission,
210
203
  buildAgentRuntimeAgentLookupKeys,
211
204
  buildDialogReadEnvelope,
212
205
  buildNoloSubjectRefQueryTarget,
@@ -217,27 +210,26 @@ import {
217
210
  getNoloDialogIdFromKey,
218
211
  normalizeNoloExcludeDialogIds,
219
212
  normalizeNoloSpaceInput,
220
- resolveDispatchedSubtaskBudget,
221
213
  resolveNoloDialogInput,
222
214
  verifyNoloDialogSubjectRefQuery
223
- } from "./chunk-RZOV7OMV.js";
215
+ } from "./chunk-C4VAR65S.js";
224
216
  import {
225
217
  mergeAvailabilityDeadline,
226
218
  resolveCredentialKeyWithFallback
227
- } from "./chunk-3UKL3HPD.js";
219
+ } from "./chunk-HOCHUZQ7.js";
228
220
  import {
229
221
  redactAgentRecordForWorkspaceTool,
230
222
  resolveReadOnlyToolConstraints
231
- } from "./chunk-KC4XDTT3.js";
223
+ } from "./chunk-SOF4OWDM.js";
232
224
  import {
233
225
  clipCompactText
234
226
  } from "./chunk-5MMAK75Q.js";
235
- import {
236
- createFileCredentialBroker
237
- } from "./chunk-OQHIVPG4.js";
238
227
  import {
239
228
  asRecordOrEmpty
240
229
  } from "./chunk-KX6YBIHG.js";
230
+ import {
231
+ createFileCredentialBroker
232
+ } from "./chunk-SNBZZPYH.js";
241
233
  import {
242
234
  compactWhitespace
243
235
  } from "./chunk-DWLEOOGR.js";
@@ -245,19 +237,53 @@ import {
245
237
  isAbortError
246
238
  } from "./chunk-7DPNBQSV.js";
247
239
  import {
248
- canonicalizeToolName,
249
- canonicalizeToolNames
250
- } from "./chunk-ZCWRMUWT.js";
240
+ CAPABILITY_PACKS
241
+ } from "./chunk-PJCIP64Z.js";
251
242
  import {
252
243
  CHROME_CONNECTOR_ACCEPTED_TOOL_NAMES,
244
+ canonicalizeToolName,
245
+ canonicalizeToolNames,
253
246
  chromeConnectorToolSchemas,
254
247
  chromeConnectorUnavailableFunc,
255
248
  getChromeConnectorToolBehavior,
256
249
  getChromeConnectorToolDefaultConsent
257
- } from "./chunk-ZC3CMUKU.js";
250
+ } from "./chunk-6OVNSQHN.js";
251
+ import {
252
+ buildSkillDocMarkdown,
253
+ normalizeSkillModalities,
254
+ normalizeStringArray,
255
+ parseExternalSkillMarkdown,
256
+ parseSkillDocProtocol,
257
+ resolvePageSkillMetadata
258
+ } from "./chunk-W6RFEDN4.js";
258
259
  import {
259
260
  extractCustomId
260
261
  } from "./chunk-M2EJHDJP.js";
262
+ import {
263
+ SEPARATOR,
264
+ TYPE_STORAGE_PREFIXES,
265
+ createAgentKey,
266
+ fileKey,
267
+ isAgentKey,
268
+ isAppKey,
269
+ isFileKey,
270
+ isPageKey,
271
+ isTableMetaKey,
272
+ isTaskKey,
273
+ metaKey,
274
+ rowKey,
275
+ splitKey,
276
+ toTrimmedString
277
+ } from "./chunk-SYTHYBMI.js";
278
+ import {
279
+ dialogMessageRange,
280
+ isDialogKey,
281
+ ulid
282
+ } from "./chunk-OJKUU3LP.js";
283
+ import {
284
+ asNonEmptyStringArray,
285
+ asTrimmedNonEmptyStringArray
286
+ } from "./chunk-I42VC5KR.js";
261
287
  import {
262
288
  RUN_TITLE_MAX,
263
289
  TASK_PREVIEW_MAX,
@@ -270,68 +296,44 @@ import {
270
296
  formatStatusRunCard,
271
297
  formatStopRunCard,
272
298
  normalizeRunTitle,
299
+ resolveAgentRunName,
273
300
  resolveRunLabel
274
- } from "./chunk-ALQ3657A.js";
301
+ } from "./chunk-AMEOV5VZ.js";
302
+ import {
303
+ toErrorMessage
304
+ } from "./chunk-HNMXYYJR.js";
305
+ import {
306
+ asTrimmedString
307
+ } from "./chunk-3EUW3WEO.js";
275
308
  import {
276
309
  DEFAULT_MODEL,
277
310
  clampReasoningEffort,
278
311
  resolveModelReasoningCapabilityWithCache
279
- } from "./chunk-SM3NSZJV.js";
280
- import {
281
- toErrorMessage
282
- } from "./chunk-HNMXYYJR.js";
312
+ } from "./chunk-2UCBGYO4.js";
283
313
  import {
284
314
  isRecord
285
315
  } from "./chunk-KUG52IAP.js";
286
316
  import {
287
317
  asTrimmedLowercaseString
288
318
  } from "./chunk-QSJ3HFEF.js";
319
+ import {
320
+ asOptionalFiniteNumber
321
+ } from "./chunk-WWC7I6TA.js";
289
322
  import {
290
323
  API_ENDPOINTS
291
324
  } from "./chunk-LCBAMY2M.js";
325
+ import {
326
+ asOptionalTrimmedString
327
+ } from "./chunk-G3SUCT4W.js";
292
328
  import {
293
329
  DEFAULT_LOCAL_API_ORIGIN
294
330
  } from "./chunk-4SN6J65J.js";
295
331
  import {
296
332
  normalizeServerOrigin
297
333
  } from "./chunk-CF7PE763.js";
298
- import {
299
- SEPARATOR,
300
- TYPE_STORAGE_PREFIXES,
301
- createAgentKey,
302
- fileKey,
303
- isAgentKey,
304
- isAppKey,
305
- isFileKey,
306
- isPageKey,
307
- isTableMetaKey,
308
- isTaskKey,
309
- metaKey,
310
- rowKey,
311
- splitKey,
312
- toTrimmedString
313
- } from "./chunk-JY5NGFFH.js";
314
- import {
315
- dialogMessageRange,
316
- isDialogKey,
317
- ulid
318
- } from "./chunk-XJWWBO34.js";
319
- import {
320
- asNonEmptyStringArray,
321
- asTrimmedNonEmptyStringArray
322
- } from "./chunk-I42VC5KR.js";
323
- import {
324
- asOptionalFiniteNumber
325
- } from "./chunk-WWC7I6TA.js";
326
- import {
327
- asTrimmedString
328
- } from "./chunk-3EUW3WEO.js";
329
- import {
330
- asOptionalTrimmedString
331
- } from "./chunk-G3SUCT4W.js";
332
334
  import {
333
335
  __toESM
334
- } from "./chunk-4VNS5WPM.js";
336
+ } from "./chunk-U67V476Y.js";
335
337
 
336
338
  // packages/ai/tools/agentAutomationSchemas.ts
337
339
  var agentAutomationTriggerSchema = {
@@ -1021,7 +1023,7 @@ var HOSTED_EXEC_RUNTIME_TOOL_POLICY = {
1021
1023
  workspace: { mode: "lease" }
1022
1024
  };
1023
1025
  var findModelConfig = async (modelName, provider) => {
1024
- const { ALL_MODELS } = await import("./models-PJBE6JDV.js");
1026
+ const { ALL_MODELS } = await import("./models-ULVWLSQ6.js");
1025
1027
  const name = toTrimmedString(modelName);
1026
1028
  const prov = toTrimmedString(provider ?? "");
1027
1029
  if (!name) return null;
@@ -1266,7 +1268,7 @@ var buildPlatformFormDataFromArgs = async (args) => {
1266
1268
  const trimmedModel = toTrimmedString(model);
1267
1269
  const trimmedProvider = toTrimmedString(provider);
1268
1270
  const modelConfig = await findModelConfig(trimmedModel, trimmedProvider);
1269
- const { getModelPricing } = await import("./getPricing-2MNMXEVG.js");
1271
+ const { getModelPricing } = await import("./getPricing-MB2GBXOK.js");
1270
1272
  const normalizedTools = tools ?? [];
1271
1273
  const resolvedRuntimeToolPolicy = runtimeToolPolicy ?? (normalizedTools.includes("execShell") ? HOSTED_EXEC_RUNTIME_TOOL_POLICY : void 0);
1272
1274
  const formData = {
@@ -3537,8 +3539,10 @@ var getRuntime = (thunkApi) => {
3537
3539
  const snapshot = selectRuntimeSnapshot(state2);
3538
3540
  return {
3539
3541
  ...snapshot,
3540
- currentUserId: snapshot?.currentUserId ?? state2.currentUserId ?? state2.userId ?? state2.auth?.userId ?? state2.auth?.currentUser?.userId,
3541
- currentToken: snapshot?.currentToken ?? state2.currentToken ?? state2.auth?.currentToken,
3542
+ currentUserId: snapshot?.currentUserId ?? state2.currentUserId ?? state2.userId ?? // 不再直接摸 state.auth.*:identity 迁移后 auth 切片是历史字段,
3543
+ // 选中逻辑归 identity(各 edition 自己决定来源),此处只当最后兜底。
3544
+ selectIdentityUserId(state2),
3545
+ currentToken: snapshot?.currentToken ?? state2.currentToken ?? selectIdentityToken(state2),
3542
3546
  currentServer: snapshot?.currentServer ?? state2.currentServer ?? state2.settings?.currentServer
3543
3547
  };
3544
3548
  };
@@ -3900,7 +3904,7 @@ async function deleteDialogsFunc(args, thunkApi) {
3900
3904
  const deletedDialogIds = [];
3901
3905
  const deletedDialogKeys = [];
3902
3906
  const failures = [];
3903
- const { deleteDialog: deleteDialog2 } = await import("./dialogSlice-ZCTDV2PZ.js");
3907
+ const { deleteDialog: deleteDialog2 } = await import("./dialogSlice-LFNVUSAN.js");
3904
3908
  for (const target of targets) {
3905
3909
  try {
3906
3910
  await thunkApi.dispatch(deleteDialog2(target.dbKey)).unwrap();
@@ -4293,7 +4297,7 @@ var readSkillDocFunctionSchema = {
4293
4297
  }
4294
4298
  };
4295
4299
  async function readSkillDocFunc(args, thunkApi) {
4296
- const { buildReadDocResult } = await import("./readDocTool-BH6ATGQO.js");
4300
+ const { buildReadDocResult } = await import("./readDocTool-4BGTXTXA.js");
4297
4301
  const id = args?.id ?? args?.doc ?? args?.docKey ?? args?.pageKey;
4298
4302
  if (typeof id !== "string" || !id.trim()) {
4299
4303
  throw new Error("readSkillDoc requires id or doc.");
@@ -4555,6 +4559,20 @@ var addSpaceAction = async (input, thunkAPI) => {
4555
4559
  return spaceMemberData;
4556
4560
  };
4557
4561
 
4562
+ // packages/app/hooks/deleteOwnershipGuard.ts
4563
+ function resolveDeleteOwnershipGuard(input) {
4564
+ const actor = typeof input.actorUserId === "string" ? input.actorUserId.trim() : "";
4565
+ const owner = typeof input.ownerId === "string" ? input.ownerId.trim() : "";
4566
+ const recordLoaded = input.recordLoaded !== false;
4567
+ if (!actor) return "unknown";
4568
+ if (owner) {
4569
+ if (owner === actor || owner === DEVICE_LOCAL_OWNER_ID) return "allow";
4570
+ return "deny";
4571
+ }
4572
+ if (isDeviceLocalOwnerId(actor) && recordLoaded) return "allow";
4573
+ return "unknown";
4574
+ }
4575
+
4558
4576
  // packages/app/favorite/favoriteStore.ts
4559
4577
  var import_react = __toESM(require_react());
4560
4578
  var createInitialState = () => ({
@@ -4808,7 +4826,7 @@ var normalizeDeleteError = (error) => {
4808
4826
  }
4809
4827
  return new Error(getDeleteErrorMessage(error));
4810
4828
  };
4811
- var deleteDbKey = (input, spaceId) => async (dispatch, getState) => {
4829
+ var deleteDbKey = (input, spaceId, options) => async (dispatch, getState) => {
4812
4830
  try {
4813
4831
  const {
4814
4832
  contentKey,
@@ -4816,6 +4834,30 @@ var deleteDbKey = (input, spaceId) => async (dispatch, getState) => {
4816
4834
  inputSpaceId,
4817
4835
  includeAttachments
4818
4836
  } = resolveDeleteInput(input);
4837
+ if (options?.requireOwnership) {
4838
+ const state2 = getState();
4839
+ let ownedRecord = selectById(state2, contentKey);
4840
+ if (!ownedRecord) {
4841
+ try {
4842
+ ownedRecord = await dispatch(
4843
+ read({ dbKey: contentKey, preferredServerOrigin })
4844
+ ).unwrap();
4845
+ } catch {
4846
+ ownedRecord = null;
4847
+ }
4848
+ }
4849
+ const verdict = resolveDeleteOwnershipGuard({
4850
+ ownerId: ownedRecord?.userId ?? ownedRecord?.ownerId,
4851
+ actorUserId: selectIdentityUserId(state2),
4852
+ recordLoaded: Boolean(ownedRecord)
4853
+ });
4854
+ if (verdict === "deny") {
4855
+ throw new Error("\u65E0\u6743\u5220\u9664\u4ED6\u4EBA\u5185\u5BB9");
4856
+ }
4857
+ if (verdict !== "allow") {
4858
+ throw new Error("\u65E0\u6CD5\u9A8C\u8BC1\u5185\u5BB9\u6240\u6709\u6743\uFF0C\u672A\u5220\u9664\uFF08\u53EF\u7A0D\u540E\u91CD\u8BD5\uFF09");
4859
+ }
4860
+ }
4819
4861
  const effectiveSpaceId = typeof spaceId === "string" && spaceId.trim().length > 0 ? spaceId : inputSpaceId ?? null;
4820
4862
  await performDirectDelete(
4821
4863
  dispatch,
@@ -5106,7 +5148,7 @@ var fetchSpaceAction = async (input, thunkAPI) => {
5106
5148
  const spaceKey = createSpaceKey.space(spaceId);
5107
5149
  const readSpace = async (dbKey) => {
5108
5150
  try {
5109
- const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-BVH2YZPQ.js");
5151
+ const { read: read2, readAndWait: readAndWait2 } = await import("./dbSlice-WNON7TOL.js");
5110
5152
  const readPromise = fresh ? dispatch(readAndWait2(dbKey)).unwrap() : dispatch(read2({ dbKey })).unwrap();
5111
5153
  return await withTimeout(readPromise);
5112
5154
  } catch {
@@ -5799,7 +5841,7 @@ var stripHtml = (html) => typeof html === "string" ? compactWhitespace(
5799
5841
  ) : "";
5800
5842
  var cleanUrl = (url) => url.replace(/[),.;\]}>]+$/g, "");
5801
5843
  var extractPdfText = async (blob) => {
5802
- const pdfjsLib = await import("./pdf-U6KSUEZZ.js");
5844
+ const pdfjsLib = await import("./pdf-KE3QI2V7.js");
5803
5845
  if (typeof window !== "undefined" && pdfjsLib.GlobalWorkerOptions && !pdfjsLib.GlobalWorkerOptions.workerSrc) {
5804
5846
  pdfjsLib.GlobalWorkerOptions.workerSrc = "/public/assets/pdf.worker.mjs";
5805
5847
  }
@@ -10976,7 +11018,7 @@ var cloudflareCrawlStatusFunctionSchema = {
10976
11018
  async function cloudflareCrawlStatusFunc(args, thunkApi) {
10977
11019
  const { jobId, limit, status, cursor } = args;
10978
11020
  if (!jobId) throw new Error("\u5FC5\u987B\u63D0\u4F9B jobId");
10979
- const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-HGNO53TC.js");
11021
+ const { getToolRequestContext: getToolRequestContext2 } = await import("./toolApiClient-OGQEBQVX.js");
10980
11022
  const { baseUrl, token } = getToolRequestContext2(thunkApi);
10981
11023
  const params = new URLSearchParams();
10982
11024
  if (limit !== void 0) params.set("limit", String(limit));
@@ -11754,7 +11796,7 @@ var selectUserIdFromState = (state2) => {
11754
11796
  var selectCurrentServerFromState = (state2) => typeof state2?.settings?.currentServer === "string" ? state2.settings.currentServer : null;
11755
11797
  async function addImageContentToSpace(input) {
11756
11798
  const injectedAddContentAction = input.thunkApi?.extra?.addContentAction;
11757
- const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-WERAONNY.js")).addContentAction;
11799
+ const addContentAction2 = typeof injectedAddContentAction === "function" ? injectedAddContentAction : (await import("./addContentAction-GDHDOF4U.js")).addContentAction;
11758
11800
  await addContentAction2(
11759
11801
  {
11760
11802
  spaceId: input.spaceId,
@@ -12375,6 +12417,81 @@ var chatgptWebImageGenerateFunc = async (args, thunkApi) => {
12375
12417
  };
12376
12418
  };
12377
12419
 
12420
+ // packages/ai/tools/secretRequestTool.ts
12421
+ var randomGateId = () => {
12422
+ const webCrypto = globalThis.crypto;
12423
+ if (typeof webCrypto?.randomUUID === "function") return webCrypto.randomUUID();
12424
+ return `${Math.random().toString(36).slice(2, 10)}-${Date.now().toString(36)}`;
12425
+ };
12426
+ var SECRET_REQUEST_NAME_PATTERN = /^[A-Z_][A-Z0-9_]*$/;
12427
+ var secretRequestFunctionSchema = {
12428
+ name: "secret-request",
12429
+ description: "\u5411\u7528\u6237\u8BF7\u6C42\u4E00\u4E2A\u5177\u540D\u51ED\u636E\uFF08\u5982 API key\uFF09\u3002\u7528\u6237\u4F1A\u5728\u5BBF\u4E3B\u9762\u677F\u4E2D\u8F93\u5165\uFF0C\u51ED\u636E\u660E\u6587\u7531\u5BBF\u4E3B\u5199\u5165\u672C\u673A secret store\uFF0C\u4EFB\u4F55\u503C\u90FD\u4E0D\u4F1A\u56DE\u5230\u5BF9\u8BDD\u4E2D\uFF1B\u5DE5\u5177\u7ED3\u679C\u53EA\u544A\u77E5\u662F\u5426\u5DF2\u4FDD\u5B58\u3002\u8C03\u7528\u65F6\u53EA\u4F20\u51ED\u636E\u540D\uFF08\u5927\u5199+\u4E0B\u5212\u7EBF\uFF09\u4E0E\u53EF\u9009\u8BF4\u660E\uFF0C\u7EDD\u4E0D\u4F20\u4EFB\u4F55\u51ED\u636E\u503C\u3002\u7ED3\u679C\u8FD4\u56DE\u540E\uFF0C\u7528 `nolo secret run --with <name> -- <cmd>` \u5728\u53D7\u63A7\u901A\u9053\u6D88\u8D39\u3002",
12430
+ parameters: {
12431
+ type: "object",
12432
+ properties: {
12433
+ name: {
12434
+ type: "string",
12435
+ description: "\u51ED\u636E\u540D\u79F0\uFF0C\u5FC5\u987B\u5339\u914D ^[A-Z_][A-Z0-9_]*$\uFF08\u5982 OPENAI_KEY\uFF09\u3002\u8FD9\u662F\u7528\u6237\u5728\u9762\u677F\u91CC\u770B\u5230\u7684\u6761\u76EE\u540D\u3002"
12436
+ },
12437
+ prompt: {
12438
+ type: "string",
12439
+ description: "\u9762\u677F\u4E0A\u5411\u7528\u6237\u5C55\u793A\u7684\u4E00\u53E5\u8BDD\u8BF4\u660E\uFF08\u53EF\u9009\uFF09\u3002"
12440
+ },
12441
+ purpose: {
12442
+ type: "string",
12443
+ description: "\u4E3A\u4EC0\u4E48\u9700\u8981\u8FD9\u4E2A\u51ED\u636E\u7684\u7B80\u77ED\u8BF4\u660E\uFF08\u53EF\u9009\uFF09\uFF0C\u5199\u8FDB\u9762\u677F\u6B63\u6587\u3002"
12444
+ }
12445
+ },
12446
+ required: ["name"]
12447
+ }
12448
+ };
12449
+ var NAME_ERROR = "secret-request\uFF1Aname \u5FC5\u987B\u5339\u914D ^[A-Z_][A-Z0-9_]*$\uFF08\u5927\u5199\u5B57\u6BCD/\u4E0B\u5212\u7EBF\u5F00\u5934\uFF0C\u4EC5\u542B\u5927\u5199\u5B57\u6BCD\u3001\u6570\u5B57\u4E0E\u4E0B\u5212\u7EBF\uFF09\u3002";
12450
+ function validateSecretRequestName(name) {
12451
+ if (typeof name !== "string" || name.length === 0) return NAME_ERROR;
12452
+ if (!SECRET_REQUEST_NAME_PATTERN.test(name)) return NAME_ERROR;
12453
+ return null;
12454
+ }
12455
+ function buildSecretRequestToolResult(args) {
12456
+ const payload = {
12457
+ action: "secret_request",
12458
+ name: args.name,
12459
+ masked: true,
12460
+ ...args.prompt?.trim() ? { prompt: args.prompt.trim() } : {}
12461
+ };
12462
+ const purpose = args.purpose?.trim();
12463
+ const fallbackContent = [
12464
+ `\u9700\u8981\u7528\u6237\u5411\u672C\u673A secret store \u63D0\u4F9B\u51ED\u636E "${args.name}"\uFF08\u660E\u6587\u4E0D\u4F1A\u51FA\u73B0\u5728\u5BF9\u8BDD\u91CC\uFF09\u3002`,
12465
+ ...purpose ? [`\u7528\u9014\uFF1A${purpose}`] : [],
12466
+ "\u4F1A\u81EA\u52A8\u5F39\u51FA\u8F93\u5165\u9762\u677F\u8BA9\u7528\u6237\u586B\u5199\uFF0C\u4E0D\u8981\u5F15\u5BFC\u7528\u6237\u53BB\u7EC8\u7AEF\u6267\u884C\u547D\u4EE4\u3002",
12467
+ "\u51ED\u636E\u4FDD\u5B58\u540E\uFF0C\u7528 nolo secret run --with " + args.name + " -- <cmd> \u5728\u53D7\u63A7\u901A\u9053\u6D88\u8D39\uFF0C\u4E0D\u8981\u5411\u7528\u6237\u7D22\u8981\u660E\u6587\u3002"
12468
+ ].join("\n");
12469
+ return {
12470
+ content: fallbackContent,
12471
+ metadata: {
12472
+ actionGate: {
12473
+ id: `gate-${randomGateId().slice(0, 8)}-secret-request-${args.name}`,
12474
+ kind: "input",
12475
+ title: `\u9700\u8981\u51ED\u636E ${args.name}`,
12476
+ body: purpose?.trim() || "\u8BF7\u5728\u8F93\u5165\u6846\u4E2D\u586B\u5199\u8BE5\u51ED\u636E\uFF0C\u5185\u5BB9\u4EC5\u4FDD\u5B58\u5728\u672C\u673A secret store\u3002",
12477
+ payload
12478
+ },
12479
+ reason: "secret-request-pending-host-input"
12480
+ }
12481
+ };
12482
+ }
12483
+ async function secretRequestFunc(args, _thunkApi) {
12484
+ const nameError = validateSecretRequestName(args?.name);
12485
+ if (nameError) {
12486
+ throw new Error(nameError);
12487
+ }
12488
+ return buildSecretRequestToolResult({
12489
+ name: args.name,
12490
+ ...args.prompt !== void 0 ? { prompt: args.prompt } : {},
12491
+ ...args.purpose !== void 0 ? { purpose: args.purpose } : {}
12492
+ });
12493
+ }
12494
+
12378
12495
  // packages/ai/tools/uiCardTool.ts
12379
12496
  var showInteractionFunctionSchema = {
12380
12497
  name: "show_interaction",
@@ -13510,6 +13627,15 @@ function normalizeContinueDialogId(value) {
13510
13627
  }
13511
13628
  return value.trim();
13512
13629
  }
13630
+ function resolveRunContextFacts(record, effectiveAgentKey) {
13631
+ const previous = typeof record?.primaryAgentKey === "string" ? record.primaryAgentKey.trim() : "";
13632
+ const agentChanged = !!record && !!previous && previous !== effectiveAgentKey;
13633
+ return {
13634
+ contextMode: record ? "continued" : "new",
13635
+ agentChanged,
13636
+ ...agentChanged ? { contextNote: "\u7EED\u8DD1\u5DF2\u5207\u6362 Agent\uFF0C\u6A21\u578B\u63D0\u793A\u8BCD\u7F13\u5B58\u53EF\u80FD\u5931\u6548\u3002" } : {}
13637
+ };
13638
+ }
13513
13639
 
13514
13640
  // packages/ai/tools/agent/agentRunCwd.ts
13515
13641
  function isAbsoluteRunCwd(raw) {
@@ -13692,10 +13818,10 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
13692
13818
  idempotencyKey,
13693
13819
  ...parentDialogId ? { parentDialogId } : {},
13694
13820
  ...runtimeKey ? { runtimeKey } : {},
13695
- ...args.subtaskBudgetLimits ? { subtaskBudgetLimits: args.subtaskBudgetLimits } : {},
13696
13821
  ...ephemeral ? { ephemeral: true } : {},
13697
13822
  ...runKind ? { runKind } : {},
13698
13823
  runtimeContext: {
13824
+ ...args.selectionCheck ? { selectionCheck: args.selectionCheck } : {},
13699
13825
  ...args.runTitle ? { runTitle: args.runTitle } : {},
13700
13826
  surface: "web",
13701
13827
  host: "browser",
@@ -13755,8 +13881,9 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
13755
13881
  serverBase: routedServerBase
13756
13882
  } = runResponse;
13757
13883
  onStatusChange?.("pending");
13884
+ const contextFacts = runResponse.contextMode ? { contextMode: runResponse.contextMode, agentChanged: runResponse.agentChanged === true, ...runResponse.contextNote ? { contextNote: runResponse.contextNote } : {} } : {};
13758
13885
  if (args.waitForCompletion === false) {
13759
- return { dialogId, status: runResponse.status };
13886
+ return { dialogId, status: runResponse.status, ...contextFacts, ...runResponse.selectionCheck ? { selectionCheck: runResponse.selectionCheck } : {} };
13760
13887
  }
13761
13888
  let lastError;
13762
13889
  let maxSseRetries = MAX_SSE_RETRIES;
@@ -13764,7 +13891,7 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
13764
13891
  const eventServer = normalizeServerOrigin(routedServerBase) || currentServer;
13765
13892
  for (let attempt = 0; attempt <= maxSseRetries; attempt++) {
13766
13893
  try {
13767
- return await listenToDialogEvents(
13894
+ const completed = await listenToDialogEvents(
13768
13895
  dialogId,
13769
13896
  eventServer,
13770
13897
  authHeader,
@@ -13774,6 +13901,7 @@ var runAgentBackground = createAsyncThunk("agent/runBackground", async (args, {
13774
13901
  onFailed,
13775
13902
  cursor
13776
13903
  );
13904
+ return { ...completed, ...contextFacts, ...runResponse.selectionCheck ? { selectionCheck: runResponse.selectionCheck } : {} };
13777
13905
  } catch (e) {
13778
13906
  if (isAbortError(e)) throw e;
13779
13907
  if (!e?.retryable || attempt >= maxSseRetries) throw e;
@@ -14159,15 +14287,29 @@ function checkCredentialFanout(args) {
14159
14287
  }
14160
14288
 
14161
14289
  // packages/ai/tools/agent/startAgentRunTool.ts
14162
- var BATCH_FANOUT_ENTRY_TTL_MS = 30 * 60 * 1e3;
14163
14290
  var batchFanoutRegistry = /* @__PURE__ */ new Map();
14164
- function pruneBatchFanoutRegistry(nowMs) {
14165
- for (const [batchId, entries] of batchFanoutRegistry) {
14166
- const alive = entries.filter(
14167
- (e) => nowMs - e.startedAtMs < BATCH_FANOUT_ENTRY_TTL_MS
14168
- );
14169
- if (alive.length === 0) batchFanoutRegistry.delete(batchId);
14170
- else batchFanoutRegistry.set(batchId, alive);
14291
+ async function refreshBatchFanout(entries, thunkApi) {
14292
+ const snapshot = entries.filter((entry) => entry.runId);
14293
+ if (!snapshot.length) return;
14294
+ const response = await callToolApi(
14295
+ thunkApi,
14296
+ "/api/agent/runs/control",
14297
+ { action: "list", limit: 1e4 },
14298
+ { withAuth: true }
14299
+ );
14300
+ const data = response?.data ?? response;
14301
+ if (!Array.isArray(data?.runs) || data.hasMore === true) {
14302
+ throw new Error("batch admission: live list unavailable or incomplete; retry after recovery");
14303
+ }
14304
+ for (const entry of snapshot) {
14305
+ const run = data.runs.find((run2) => run2.runId === entry.runId);
14306
+ if (!run || !AGENT_THREAD_ACTIVE_STATUSES.includes(run.status) && !AGENT_THREAD_TERMINAL_STATUSES.includes(run.status)) {
14307
+ throw new Error(`batch admission: unknown live status for ${entry.runId}; retry after recovery`);
14308
+ }
14309
+ if (AGENT_THREAD_TERMINAL_STATUSES.includes(run.status)) {
14310
+ const index = entries.indexOf(entry);
14311
+ if (index >= 0) entries.splice(index, 1);
14312
+ }
14171
14313
  }
14172
14314
  }
14173
14315
  function buildStartAgentRunFunctionSchema(opts) {
@@ -14179,6 +14321,9 @@ function buildStartAgentRunFunctionSchema(opts) {
14179
14321
  parameters: {
14180
14322
  type: "object",
14181
14323
  properties: {
14324
+ dimension: { type: "string", enum: ["general", "design_frontend", "writing"], default: "general", description: "\u4EFB\u52A1\u9886\u57DF\u4F18\u5148\u4E8E\u6863\u4F4D\uFF1B\u4EC5\u4F9B\u9009\u4EBA\u53C2\u8003\uFF0C\u4E0D\u6539\u53D8\u51C6\u5165\u3002" },
14325
+ difficulty: { type: "string", description: "easy / normal / complex / extreme\uFF1B\u9ED8\u8BA4 normal\u3002\u58F0\u660E\u672C\u6B21\u4EFB\u52A1\u7684\u96BE\u5EA6\u6863\u4F4D\uFF1B\u5DF2\u77E5\u8DE8\u6863\uFF08\u6240\u9009 Agent \u7684\u6A21\u578B\u6863\u4F4D\u4E0E\u672C\u6863\u4F4D\u4E0D\u4E00\u81F4\uFF09\u4E14\u672A\u7ED9\u51FA selectionReason \u65F6\u62D2\u7EDD\u542F\u52A8\uFF0C\u540C\u6863\u6216\u6863\u4F4D\u672A\u77E5\u4E0D\u62E6\u3002\u4E0D\u81EA\u52A8\u6362\u4EBA\u3001\u4E0D\u53D6\u6D88\u5DF2\u542F\u52A8\u7684 run\u3002", default: "normal" },
14326
+ selectionReason: { type: "string", description: "\u53EF\u9009\u3002\u8DE8\u6863\u9009\u62E9\u7406\u7531\uFF08\u81EA\u7531\u6587\u672C\uFF09\uFF1A\u6240\u9009 Agent \u7684\u6A21\u578B\u6863\u4F4D\u4E0E difficulty \u4E0D\u4E00\u81F4\u65F6\u5FC5\u987B\u7ED9\u51FA\uFF08\u5982\u9886\u57DF\u4F18\u52BF\u3001\u7528\u6237\u660E\u786E\u6307\u5B9A\uFF09\u3002\u53EA\u6821\u9A8C\u7406\u7531\u662F\u5426\u5B58\u5728\uFF0C\u4E0D\u4EE3\u8868\u5DF2\u6838\u5B9E\u7406\u7531\u771F\u5B9E\u6027\u3001\u7528\u6237\u6388\u6743\u6216\u989D\u5EA6/\u8D39\u7528\u6743\u9650\u3002" },
14182
14327
  agentKey: {
14183
14328
  type: "string",
14184
14329
  description: "\u8981\u542F\u52A8\u7684 Agent \u7684\u53EF\u8FD0\u884C dbKey\uFF0C\u5FC5\u987B\u662F listAgents \u8FD4\u56DE\u7684 agentKey \u5B57\u6BB5\uFF08owned: agent-<userId>-<id>\uFF1Bpublic: agent-pub-<id>\uFF09\u6216 readAgent \u8FD4\u56DE\u7684 agentKey\u3002\u53EA\u63A5\u53D7\u7CBE\u786E dbKey\uFF0C\u4E0D\u63A5\u53D7 name/handle/bare id\u3002\u53EF\u9009\uFF1B\u7701\u7565\u6216\u4F20 'self' \u65F6\u81EA\u52A8\u4F7F\u7528\u5F53\u524D AgentKey\uFF08\u6D3E\u53D1\u81EA\u8EAB\u6267\u884C\u7EC6\u5206\u5B50\u4EFB\u52A1\uFF09\u3002"
@@ -14192,7 +14337,7 @@ function buildStartAgentRunFunctionSchema(opts) {
14192
14337
  },
14193
14338
  agentName: {
14194
14339
  type: "string",
14195
- description: "\u53EF\u9009\u3002\u7531 listAgents/readAgent \u5F97\u5230\u7684\u53EF\u8BFB Agent \u540D\u79F0\uFF0C\u7528\u4E8E TUI \u8FD0\u884C\u5361\u7247\u5C55\u793A\u3002"
14340
+ description: "\u53EF\u9009\u3002\u8986\u76D6\u8FD0\u884C\u5361\u7247\u7684 Agent \u5C55\u793A\u540D\uFF1B\u7701\u7565\u65F6\u6309 agentKey \u81EA\u52A8\u8BFB\u53D6\u914D\u7F6E\u4E2D\u7684 name\u3002"
14196
14341
  },
14197
14342
  title: {
14198
14343
  type: "string",
@@ -14207,9 +14352,11 @@ function buildStartAgentRunFunctionSchema(opts) {
14207
14352
  // review findings 与子任务产出都必须可回读——把选项藏起来比写一条
14208
14353
  // 「不要用它」的克制指令更可靠(2026-09-14 owner 反馈)。CLI `--ephemeral`
14209
14354
  // 与 server 透传保持不动,探活/烟测仍走 CLI 侧。
14355
+ // Returns previousRun evidence when available and difficultyRecheckRequired.
14356
+ // Evidence never inherits a tier or bypasses selection_reason_required.
14210
14357
  continueDialogId: {
14211
14358
  type: "string",
14212
- description: "\u53EF\u9009\u3002\u7EED\u8DD1\u5F53\u524D\u7528\u6237\u5DF2\u6709\u7684 dialog\uFF08\u4E0D\u5B58\u5728\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7528\u6237\u65F6\u663E\u5F0F\u62A5\u9519\uFF0C\u4E0D\u65B0\u5EFA\uFF09\u3002\u9002\u7528\u4E8E\u540C\u4E00\u5B50\u4EFB\u52A1\u7684\u5B9A\u5411\u95ED\u5408\uFF0C\u6838\u9A8C\u4E0A\u4E00\u8F6E finding \u662F\u5426\u4FEE\u597D\uFF1B\u7981\u7528\u4E8E\u8BC4\u5BA1\u7C7B\u4EFB\u52A1\u7684\u72EC\u7ACB\u5224\u65AD\uFF0C\u7EED\u8DD1\u4F1A\u5E26\u5165\u4E4B\u524D\u7684\u7ED3\u8BBA\u3001\u7834\u574F\u72EC\u7ACB\u6027\u30022026-10-19 review \u673A\u5236\u7EA6\u5B9A\uFF1Afull \u5BA1\u67E5\u7528\u65B0 dialog\uFF08\u4E0D\u4F20\u672C\u53C2\u6570\uFF09\uFF0Cclosure \u7528\u7EED\u8DD1\u3002\u7EED\u8DD1\u65F6\u5FC5\u987B\u663E\u5F0F\u4F20\u8BE5\u5BF9\u8BDD\u539F\u672C\u7684 agentKey\uFF08\u5BF9\u8BDD\u7684 primaryAgentKey\uFF09\uFF1A\u7701\u7565 agentKey \u4E0D\u4F1A\u6CBF\u7528\u539F agent\uFF0C\u800C\u662F\u56DE\u843D\u5230\u5F53\u524D\u7F16\u6392\u8005\u81EA\u5DF1\uFF0C\u7B49\u4E8E\u6362\u6A21\u578B\u5E76\u628A\u8FD9\u4EFD\u5BF9\u8BDD\u7684 prompt \u7F13\u5B58\u5168\u90E8\u4F5C\u5E9F\uFF1B\u786E\u9700\u6362\u6A21\u578B\uFF08\u539F agent \u4E0D\u53EF\u7528/\u914D\u989D\u8017\u5C3D\uFF09\u624D\u4F20\u65B0 key\uFF0C\u5E76\u5728 task \u91CC\u8BF4\u660E\u7406\u7531\u3002"
14359
+ description: "\u53EF\u9009\u3002\u7EED\u8DD1\u5F53\u524D\u7528\u6237\u5DF2\u6709\u7684 dialog\uFF08\u4E0D\u5B58\u5728\u6216\u4E0D\u5C5E\u4E8E\u5F53\u524D\u7528\u6237\u65F6\u663E\u5F0F\u62A5\u9519\uFF0C\u4E0D\u65B0\u5EFA\uFF09\u3002\u9002\u7528\u4E8E\u540C\u4E00\u5B50\u4EFB\u52A1\u7684\u5B9A\u5411\u95ED\u5408\uFF0C\u6838\u9A8C\u4E0A\u4E00\u8F6E finding \u662F\u5426\u4FEE\u597D\uFF1B\u7981\u7528\u4E8E\u8BC4\u5BA1\u7C7B\u4EFB\u52A1\u7684\u72EC\u7ACB\u5224\u65AD\uFF0C\u7EED\u8DD1\u4F1A\u5E26\u5165\u4E4B\u524D\u7684\u7ED3\u8BBA\u3001\u7834\u574F\u72EC\u7ACB\u6027\u30022026-10-19 review \u673A\u5236\u7EA6\u5B9A\uFF1Afull \u5BA1\u67E5\u7528\u65B0 dialog\uFF08\u4E0D\u4F20\u672C\u53C2\u6570\uFF09\uFF0Cclosure \u7528\u7EED\u8DD1\u3002\u7EED\u8DD1\u65F6\u5FC5\u987B\u663E\u5F0F\u4F20\u8BE5\u5BF9\u8BDD\u539F\u672C\u7684 agentKey\uFF08\u5BF9\u8BDD\u7684 primaryAgentKey\uFF09\uFF1A\u7701\u7565 agentKey \u4E0D\u4F1A\u6CBF\u7528\u539F agent\uFF0C\u800C\u662F\u56DE\u843D\u5230\u5F53\u524D\u7F16\u6392\u8005\u81EA\u5DF1\uFF0C\u7B49\u4E8E\u6362\u6A21\u578B\u5E76\u628A\u8FD9\u4EFD\u5BF9\u8BDD\u7684 prompt \u7F13\u5B58\u5168\u90E8\u4F5C\u5E9F\uFF1B\u786E\u9700\u6362\u6A21\u578B\uFF08\u539F agent \u4E0D\u53EF\u7528/\u914D\u989D\u8017\u5C3D\uFF09\u624D\u4F20\u65B0 key\uFF0C\u5E76\u5728 task \u91CC\u8BF4\u660E\u7406\u7531\u3002\u53EA\u6709\u7EED\u8DD1\u624D\u5E26\u6B64\u524D\u5BF9\u8BDD\u5386\u53F2\uFF1A\u65B0\u5EFA run\uFF08\u4E0D\u4F20\u672C\u53C2\u6570\uFF09\u6CA1\u6709\u4EFB\u4F55\u6B64\u524D\u5BF9\u8BDD\u5386\u53F2\uFF0C\u540C\u4E00 agentKey \u4E5F\u4E0D\u7B49\u4E8E\u540C\u4E00\u4E0A\u4E0B\u6587\u3002\u7EED\u8DD1\u4F9D\u8D56\u672C\u5730 dialog \u5386\u53F2\uFF1B\u5386\u53F2\u4E0D\u53EF\u7528\u65F6\u8BE5 run \u4F1A\u76F4\u63A5\u5931\u8D25\uFF08\u62A5 Strict continuation history load failed\uFF09\u800C\u4E0D\u4F1A\u9000\u5316\u4E3A\u65B0\u5EFA dialog\u2014\u2014\u6B64\u65F6\u82E5\u6539\u4EE5\u65B0 dialog \u91CD\u6D3E\uFF0C\u7B49\u4E8E\u4E00\u4E2A\u6CA1\u6709\u6B64\u524D\u5386\u53F2\u7684\u65B0\u4EFB\u52A1\uFF0C\u5FC5\u987B\u5728 task \u91CC\u8865\u9F50\u539F finding\u3001\u5FC5\u8981\u4E0A\u4E0B\u6587\u4E0E\u6838\u9A8C\u6807\u51C6\uFF1B\u786E\u5B9E\u4F9D\u8D56\u539F\u5BF9\u8BDD\u5386\u53F2\u65F6\u5E94\u5148\u6062\u590D\u5386\u53F2\uFF0C\u4E0D\u8981\u5047\u88C5\u4ECD\u5728\u7EED\u8DD1\u3002"
14213
14360
  },
14214
14361
  batchId: {
14215
14362
  type: "string",
@@ -14217,7 +14364,7 @@ function buildStartAgentRunFunctionSchema(opts) {
14217
14364
  },
14218
14365
  credentialGroup: {
14219
14366
  type: "string",
14220
- description: "\u53EF\u9009\u3002\u7167\u6284 listAgents \u8FD4\u56DE\u7684 credentialGroup \u5B57\u6BB5\uFF0C\u7528\u4E8E\u540C\u6279\u6B21\u5E76\u53D1\u6247\u51FA\u7684\u51ED\u8BC1\u9694\u79BB\u6821\u9A8C\u3002\u7F3A\u7701/\u7A7A\u503C\u89C6\u4E3A\u300C\u672A\u77E5\u300D\uFF08\u4E0D\u662F\u300C\u72EC\u7ACB\u300D\uFF09\uFF1A\u4E0E\u540C batch \u5185\u4EFB\u4F55\u5176\u4ED6 run \u5E76\u53D1\u90FD\u4F1A\u88AB\u62D2\u7EDD\u3002"
14367
+ description: "\u53EF\u9009\u3002\u517C\u5BB9 listAgents \u8FD4\u56DE\u7684 credentialGroup \u63D0\u793A\uFF1B\u4E0D\u4F5C\u4E3A\u6743\u5A01\u51ED\u636E\u8EAB\u4EFD\u3002Web \u5B88\u536B\u4ECE\u5E94\u7528\u914D\u7F6E\u4E2D\u7684\u51ED\u636E reference \u89E3\u6790\uFF0C\u65E0\u6CD5\u89E3\u6790\u5219\u4E3A\u672A\u77E5\uFF08\u4E0D\u662F\u72EC\u7ACB\uFF09\uFF1B\u670D\u52A1\u7AEF\u4ECD\u6267\u884C\u6700\u7EC8\u51C6\u5165\u6821\u9A8C\u3002"
14221
14368
  },
14222
14369
  allowUnknownCredential: {
14223
14370
  type: "boolean",
@@ -14238,14 +14385,6 @@ function buildStartAgentRunFunctionSchema(opts) {
14238
14385
  type: "boolean",
14239
14386
  description: '\u53EF\u9009\u3002\u4E3A true \u65F6\u672C\u6B21 run \u4F1A\u88AB\u8BB0\u5F55\u8FDB runtime todo\uFF08~/.nolo/todos.json\uFF09\u3002\u4F20\u4E86 batchId \u65F6\u9ED8\u8BA4\u5373\u8BB0\u5F55\uFF08\u6BCF\u6279\u5BF9\u5E94\u4E00\u9879 todo\uFF09\u3002todo \u72B6\u6001\u7531\u5173\u8054 run \u72B6\u6001 + review \u7ED3\u8BBA\u63A8\u5BFC\uFF0C\u7528 controlAgentRun(action:"todo") \u67E5\u8BE2\u3002'
14240
14387
  },
14241
- maxToolCalls: {
14242
- type: "number",
14243
- description: "\u53EF\u9009\u3002\u8FD9\u6B21\u5B50\u4EFB\u52A1\u7684\u5DE5\u5177\u8C03\u7528\u6388\u6743\u989D\u5EA6\uFF08\u786C\u4E0A\u9650\uFF09\u3002\u4E0D\u4F20\u5219\u7528 runtime \u9ED8\u8BA4 200\u3002\u5230\u9650\u5373\u505C\u6B62\u542F\u52A8\u65B0\u5DE5\u5177\uFF1B\u5DE5\u5177\u989D\u5EA6\u5230\u9650\u65F6\u53EF\u6709\u4E00\u6B21\u65E0\u5DE5\u5177\u603B\u7ED3\uFF0C\u5899\u949F\u5230\u9650\u6216\u53D6\u6D88\u540E\u4E0D\u518D\u8BF7\u6C42\u6A21\u578B\uFF0C\u8FD4\u56DE\u4E2D\u95F4\u7ED3\u8BBA\u5E76\u6807\u8BB0 budget-exhausted\uFF08\u4E0D\u7B97 provider \u9519\u8BEF\uFF09\u3002\u5E94\u6309\u4EFB\u52A1\u610F\u56FE\u6536\u7D27\uFF1A\u6539\u4E00\u4E2A\u5E38\u91CF\u7ED9 10~20\uFF0C\u5355\u6587\u4EF6\u4FEE\u590D\u7ED9 40\uFF0C\u5BA1\u67E5\u7ED9 60\u3002\u6CE8\u610F\u9ED8\u8BA4 200 \u53EA\u7528\u6765\u515C\u65E0\u754C\u635F\u5931\uFF0C\u4E0D\u662F\u5931\u63A7\u8BC6\u522B\u2014\u2014\u8DD1\u5230\u4E0A\u9650\u4E0D\u4EE3\u8868\u4EFB\u52A1\u6B63\u5E38\u3002"
14244
- },
14245
- maxWallClockMs: {
14246
- type: "number",
14247
- description: "\u53EF\u9009\u3002\u8FD9\u6B21\u5B50\u4EFB\u52A1\u7684\u5899\u949F\u786C\u4E0A\u9650\uFF08\u6BEB\u79D2\uFF09\u3002\u4E0D\u4F20\u5219\u7528 runtime \u9ED8\u8BA4 3600000\uFF0860 \u5206\u949F\uFF09\u3002\u4E0E maxToolCalls \u4EFB\u4E00\u5148\u5230\u5373\u7EC8\u6B62\u3002\u4F5C\u7528\u662F\u515C\u4F4F\u300C\u5355\u6B21\u8C03\u7528\u91CC\u5957\u5FAA\u73AF\u300D\u8FD9\u7C7B\u5DE5\u5177\u8BA1\u6570\u6D4B\u4E0D\u51FA\u8017\u65F6\u7684\u573A\u666F\uFF0C\u4F8B\u5982\u4E00\u6761 shell \u91CC `for i in 1 2 3` \u53CD\u590D\u8DD1\u540C\u4E00\u5957\u6D4B\u8BD5\uFF0C\u8C03\u7528\u6570\u53EA\u6709 1 \u4F46\u8017\u65F6\u5F88\u957F\u3002"
14248
- },
14249
14388
  ...supportsWait ? {
14250
14389
  wait: {
14251
14390
  type: "boolean",
@@ -14278,7 +14417,7 @@ function buildStartAgentRunFunctionSchema(opts) {
14278
14417
  instaboxAllowPaid: { type: "boolean", description: "\u663E\u5F0F\u5141\u8BB8\u4ED8\u8D39\u5EFA\u673A\uFF1B\u9ED8\u8BA4 false\uFF0C\u4FDD\u7559\u514D\u8D39\u989D\u5EA6\u95E8\u7981\u3002" },
14279
14418
  allowHostWrites: {
14280
14419
  type: "boolean",
14281
- description: "\u53EF\u9009\u3002\u4EC5\u5F53 runtimeKey='local' \u65F6\u9700\u8981\u663E\u5F0F\u58F0\u660E\uFF1A\u8868\u793A\u8C03\u7528\u65B9\u540C\u610F\u5B50 run \u76F4\u63A5\u5728**\u5BBF\u4E3B\u6587\u4EF6\u7CFB\u7EDF**\u4E0A\u8BFB\u5199\u4EE3\u7801\uFF08\u65E0\u9694\u79BB\uFF09\u3002runtimeKey='local' \u4F46\u672A\u58F0\u660E\u65F6\u4F1A\u88AB\u663E\u5F0F\u62D2\u7EDD\uFF08\u4E0D\u56DE\u843D\u5BBF\u4E3B\u3001\u4E5F\u4E0D\u6084\u6084\u6539\u6210 docker\uFF09\u3002\u7701\u7565 runtimeKey \u65F6\u65E0\u6548\u3002\u6CE8\u610F**\u7701\u7565 key \u65F6\u7684\u9ED8\u8BA4\u4F4D\u7F6E\u6709\u4F8B\u5916**\uFF1A\u5199\u578B\u6D3E\u53D1\u9ED8\u8BA4\u8FDB\u672C\u673A docker \u6C99\u76D2\uFF1B\u53EA\u8BFB\u6D3E\u53D1\uFF08readOnly=true\uFF09\u4ECD\u5728\u5BBF\u4E3B\u6267\u884C\uFF08\u5B83\u79FB\u9664\u4E86\u4E13\u7528\u5199\u5DE5\u5177\uFF0C\u8D77\u6C99\u76D2\u662F\u6D6A\u8D39\uFF1B\u4F46 shell \u4ECD\u53EF\u5199\u6587\u4EF6\uFF0C\u8FD9\u4E0D\u662F\u6587\u4EF6\u7CFB\u7EDF\u53EA\u8BFB\u9694\u79BB\uFF09\u3002"
14420
+ description: "\u53EF\u9009\u3002\u4EC5\u5F53 runtimeKey='local' \u65F6\u9700\u8981\u663E\u5F0F\u58F0\u660E\uFF1A\u8868\u793A\u8C03\u7528\u65B9\u540C\u610F\u5B50 run \u76F4\u63A5\u5728**\u5BBF\u4E3B\u6587\u4EF6\u7CFB\u7EDF**\u4E0A\u8BFB\u5199\u4EE3\u7801\uFF08\u65E0\u9694\u79BB\uFF09\u3002runtimeKey='local' \u4F46\u672A\u58F0\u660E\u65F6\u4F1A\u88AB\u663E\u5F0F\u62D2\u7EDD\uFF08\u4E0D\u56DE\u843D\u5BBF\u4E3B\u3001\u4E5F\u4E0D\u6084\u6084\u6539\u6210 docker\uFF09\u3002\u7701\u7565 runtimeKey \u65F6\u65E0\u6548\u3002\u6CE8\u610F**\u7701\u7565 key \u65F6\u7684\u9ED8\u8BA4\u4F4D\u7F6E\u6709\u4F8B\u5916**\uFF1A\u5199\u578B\u6D3E\u53D1\u9ED8\u8BA4\u8FDB\u672C\u673A docker \u6C99\u76D2\uFF1B\u53EA\u8BFB\u6D3E\u53D1\uFF08readOnly=true\uFF09\u5F53\u524D\u5B9E\u73B0\u4ECD\u7559\u5728\u5BBF\u4E3B\u6267\u884C\uFF08\u5B83\u79FB\u9664\u7684\u662F nolo \u4FA7\u4E13\u7528\u5199\u5DE5\u5177\uFF1Bshell \u4E0E\u5916\u90E8 CLI \u901A\u9053\u4ECD\u53EF\u5199\u6587\u4EF6\uFF0C\u8FD9\u4E0D\u662F\u6587\u4EF6\u7CFB\u7EDF\u53EA\u8BFB\u9694\u79BB\uFF09\u3002"
14282
14421
  }
14283
14422
  },
14284
14423
  required: ["task", "title"]
@@ -14339,23 +14478,7 @@ async function startAgentRunFunc(args, thunkApi, _context) {
14339
14478
  );
14340
14479
  }
14341
14480
  const effectiveAllowCredentialConcurrency = args.allowCredentialConcurrency ?? true;
14342
- if (explicitBatchId) {
14343
- const nowMs = Date.now();
14344
- pruneBatchFanoutRegistry(nowMs);
14345
- const active = batchFanoutRegistry.get(explicitBatchId) ?? [];
14346
- const verdict = checkCredentialFanout({
14347
- active,
14348
- candidate: { agentKey: effectiveAgentKey, credentialGroup: args.credentialGroup },
14349
- allowUnknownCredential: args.allowUnknownCredential === true,
14350
- allowCredentialConcurrency: effectiveAllowCredentialConcurrency
14351
- });
14352
- if (!verdict.allowed) throw new Error(verdict.message);
14353
- }
14354
14481
  const content = buildDelegatedTaskContent(task, input);
14355
- const dispatchedSubtaskBudget = resolveDispatchedSubtaskBudget({
14356
- ...typeof args.maxToolCalls === "number" ? { maxToolCalls: args.maxToolCalls } : {},
14357
- ...typeof args.maxWallClockMs === "number" ? { maxWallClockMs: args.maxWallClockMs } : {}
14358
- });
14359
14482
  const payloadMetrics = calculateDelegatedPayloadMetrics(task, input, content);
14360
14483
  const activeDialogKey = getActiveDialogKey();
14361
14484
  const explicitParentDialogId = typeof args.parentDialogId === "string" && args.parentDialogId.trim() ? args.parentDialogId.includes("-") ? extractCustomId(args.parentDialogId) : args.parentDialogId.trim() : void 0;
@@ -14369,7 +14492,44 @@ async function startAgentRunFunc(args, thunkApi, _context) {
14369
14492
  throw new Error(HOST_EXECUTOR_UNAVAILABLE_MESSAGE);
14370
14493
  }
14371
14494
  }
14495
+ const state2 = thunkApi.getState();
14496
+ const config = state2?.db ? selectById(state2, effectiveAgentKey) : void 0;
14497
+ const credentialGroup = deriveCredentialGroup(config?.apiKeyRef ?? config?.credentialRef)?.credentialGroup;
14498
+ let selectionCheck = assertDispatchSelectionAdmission({
14499
+ dimension: args.dimension,
14500
+ difficulty: args.difficulty,
14501
+ model: config?.model,
14502
+ selectionReason: args.selectionReason
14503
+ });
14504
+ let entries;
14505
+ let reservation;
14506
+ if (explicitBatchId) {
14507
+ entries = batchFanoutRegistry.get(explicitBatchId);
14508
+ if (!entries) {
14509
+ entries = [];
14510
+ batchFanoutRegistry.set(explicitBatchId, entries);
14511
+ }
14512
+ const verdict = checkCredentialFanout({
14513
+ active: entries,
14514
+ candidate: { agentKey: effectiveAgentKey, credentialGroup },
14515
+ allowUnknownCredential: args.allowUnknownCredential === true,
14516
+ allowCredentialConcurrency: effectiveAllowCredentialConcurrency
14517
+ });
14518
+ if (!verdict.allowed && entries.some((entry) => !entry.runId)) throw new Error(verdict.message);
14519
+ reservation = { agentKey: effectiveAgentKey, credentialGroup };
14520
+ entries.push(reservation);
14521
+ }
14372
14522
  try {
14523
+ if (entries && reservation) {
14524
+ await refreshBatchFanout(entries, thunkApi);
14525
+ const verdict = checkCredentialFanout({
14526
+ active: entries.filter((entry) => entry !== reservation),
14527
+ candidate: reservation,
14528
+ allowUnknownCredential: args.allowUnknownCredential === true,
14529
+ allowCredentialConcurrency: effectiveAllowCredentialConcurrency
14530
+ });
14531
+ if (!verdict.allowed) throw new Error(verdict.message);
14532
+ }
14373
14533
  const bgResult = runtimeKey === "local" ? await hostAgentRunDispatcher({
14374
14534
  agentKey: effectiveAgentKey,
14375
14535
  userInput: content,
@@ -14377,9 +14537,8 @@ async function startAgentRunFunc(args, thunkApi, _context) {
14377
14537
  waitForCompletion: wait === true,
14378
14538
  runKind: "subtask",
14379
14539
  runTitle: title,
14540
+ selectionCheck,
14380
14541
  runtimeKey: "local",
14381
- // 已解析的硬预算(子 run 只消费,不再自行读 env)。
14382
- subtaskBudgetLimits: dispatchedSubtaskBudget.limits,
14383
14542
  allowHostWrites: true,
14384
14543
  ...args.readOnly === true ? { readOnly: true } : {},
14385
14544
  ...parentDialogId ? { parentDialogId } : {}
@@ -14394,36 +14553,42 @@ async function startAgentRunFunc(args, thunkApi, _context) {
14394
14553
  waitForCompletion: wait === true,
14395
14554
  runKind: "subtask",
14396
14555
  runTitle: title,
14397
- // 已解析的硬预算(子 run 只消费,不再自行读 env)。
14398
- subtaskBudgetLimits: dispatchedSubtaskBudget.limits,
14556
+ selectionCheck,
14399
14557
  ...args.readOnly === true ? { readOnly: true } : {},
14400
14558
  ...parentDialogId ? { parentDialogId } : {},
14401
14559
  ...runtimeKey ? { runtimeKey } : {}
14402
14560
  })
14403
14561
  ).unwrap();
14562
+ selectionCheck = bgResult.selectionCheck ?? selectionCheck;
14563
+ const contextFacts = bgResult.contextMode ? { contextMode: bgResult.contextMode, agentChanged: bgResult.agentChanged === true, ...bgResult.contextNote ? { contextNote: bgResult.contextNote } : {} } : {};
14564
+ const continuationEvidence = continueDialogId ? {
14565
+ difficultyRecheckRequired: true,
14566
+ ...bgResult.previousRun ? { previousRun: bgResult.previousRun } : {}
14567
+ } : {};
14404
14568
  if (wait === true) {
14405
14569
  const fullContent = bgResult.content ?? "";
14406
14570
  return {
14407
14571
  rawData: resultMode === "summary" ? summarizeChildContent(fullContent) : fullContent,
14408
14572
  displayData: `\u2705 startAgentRun \u540C\u6B65\u5B8C\u6210\uFF0CdialogId: ${bgResult.dialogId}${resultMode === "summary" ? "\uFF08summary\uFF09" : ""}`,
14409
14573
  metadata: {
14410
- payloadMetrics
14574
+ payloadMetrics,
14575
+ selectionCheck,
14576
+ ...contextFacts,
14577
+ ...continuationEvidence
14411
14578
  }
14412
14579
  };
14413
14580
  }
14414
14581
  const runId = bgResult.dialogId;
14415
- if (explicitBatchId) {
14416
- const entries = batchFanoutRegistry.get(explicitBatchId) ?? [];
14417
- entries.push({
14418
- runId,
14419
- agentKey: effectiveAgentKey,
14420
- ...typeof args.credentialGroup === "string" && args.credentialGroup.trim() ? { credentialGroup: args.credentialGroup.trim() } : {},
14421
- startedAtMs: Date.now()
14422
- });
14423
- batchFanoutRegistry.set(explicitBatchId, entries);
14582
+ if (reservation) {
14583
+ if (typeof runId !== "string" || !runId) throw new Error("batch admission: creation returned no runId");
14584
+ reservation.runId = runId;
14424
14585
  }
14425
14586
  const status = bgResult.status ?? "pending";
14426
- const resolvedName = agentName?.trim() || bgResult.agentName || bgResult.name;
14587
+ const resolvedName = await resolveAgentRunName(
14588
+ effectiveAgentKey,
14589
+ [agentName, bgResult.agentName, bgResult.name],
14590
+ async (dbKey) => dispatch(read({ dbKey })).unwrap()
14591
+ );
14427
14592
  const identity = { agentName: resolvedName, agentKey: effectiveAgentKey, runId };
14428
14593
  const taskPreview = task.replace(/\s+/g, " ").trim().slice(0, TASK_PREVIEW_MAX);
14429
14594
  return {
@@ -14431,6 +14596,8 @@ async function startAgentRunFunc(args, thunkApi, _context) {
14431
14596
  runId,
14432
14597
  status,
14433
14598
  agentKey,
14599
+ ...contextFacts,
14600
+ ...continuationEvidence,
14434
14601
  // batchId is always returned — minted above when the caller didn't
14435
14602
  // supply one — so controlAgentRun(list, batchId=...) works on every
14436
14603
  // host. On the server path the id lives in the tool return; on the
@@ -14439,7 +14606,8 @@ async function startAgentRunFunc(args, thunkApi, _context) {
14439
14606
  ...resolvedName ? { agentName: resolvedName } : {},
14440
14607
  ...taskPreview ? { taskPreview } : {},
14441
14608
  ...title ? { title } : {},
14442
- payloadMetrics
14609
+ payloadMetrics,
14610
+ selectionCheck
14443
14611
  },
14444
14612
  displayData: formatStartRunCard(resolveRunLabel(identity), status, {
14445
14613
  task: taskPreview,
@@ -14452,6 +14620,11 @@ async function startAgentRunFunc(args, thunkApi, _context) {
14452
14620
  };
14453
14621
  } catch (e) {
14454
14622
  throw new Error(`startAgentRun \u542F\u52A8 Agent [${agentKey}] \u5931\u8D25: ${toErrorMessage(e)}`);
14623
+ } finally {
14624
+ if (entries && reservation && !reservation.runId) {
14625
+ const index = entries.indexOf(reservation);
14626
+ if (index >= 0) entries.splice(index, 1);
14627
+ }
14455
14628
  }
14456
14629
  }
14457
14630
  var SUMMARY_HEAD_CHARS = 1500;
@@ -14476,6 +14649,7 @@ var CONTROL_AGENT_RUN_ACTIONS = [
14476
14649
  "append"
14477
14650
  ];
14478
14651
  var ACTION_DESCRIPTIONS = {
14652
+ recoverPreparedWriter: "recoverPreparedWriter=\u4EC5\u672C\u5730\uFF1A\u663E\u5F0F\u64A4\u9500\u540C\u4E00 attemptId \u7684 fenced-launch-v1 prepared writer \u5E76\u91CA\u653E claim\uFF1Bgranted\u3001legacy\u3001unknown \u6216 attempt \u4E0D\u5339\u914D\u5747\u62D2\u7EDD\uFF1B\u4E0D\u7EC8\u6B62\u8FDB\u7A0B\u3001\u4E0D\u63D0\u4F9B force",
14479
14653
  list: "list=\u5217\u51FA run\uFF08\u7701\u7565 runId\uFF09",
14480
14654
  status: "status=\u67E5\u5355\u6761 run \u72B6\u6001 + \u53EF\u9009\u65E5\u5FD7\uFF1B\u7EC8\u6001 run \u7684\u5B8C\u6574\u7ED3\u8BBA\u5728\u8FD4\u56DE\u7684 resultFile\uFF08\u7528 readFile \u8BFB\u539F\u6587\uFF1BlastAssistantText \u53EA\u662F 2000 \u5B57\u6458\u8981\uFF0C\u4E0D\u5B58\u5728\u65F6\u8BFB resultFile\uFF09\uFF1BresultFile \u7F3A\u5931\u53EF\u80FD\u662F run \u88AB\u7528\u6237\u4E2D\u65AD\uFF0C\u6309\u300C\u65E0\u7ED3\u8BBA\u300D\u5904\u7406\uFF0C\u4E0D\u636E\u6B64\u5224\u5DE5\u5177\u6545\u969C",
14481
14655
  stop: "stop=\u53D6\u6D88 run",
@@ -14506,9 +14680,13 @@ function buildControlAgentRunFunctionSchema(opts) {
14506
14680
  type: "string",
14507
14681
  description: "\u76EE\u6807 run \u7684 ID\uFF08startAgentRun \u8FD4\u56DE\u7684 runId\uFF09\u3002action=list \u65F6\u7701\u7565\u3002"
14508
14682
  },
14683
+ ...actions.includes("recoverPreparedWriter") ? { attemptId: {
14684
+ type: "string",
14685
+ description: "recoverPreparedWriter \u5FC5\u586B\uFF1Astatus \u8FD4\u56DE\u7684 writerLaunch.attemptId\uFF1B\u5FC5\u987B\u4E0E\u76EE\u6807 prepared attempt \u5B8C\u5168\u76F8\u540C\u3002\u73AF\u5883\u53D8\u91CF\u4EC5 locator\uFF0C\u4E0D\u6388\u4E88\u6062\u590D\u6743\u9650\u3002"
14686
+ } } : {},
14509
14687
  dialogKey: {
14510
14688
  type: "string",
14511
- description: "\u53EF\u9009\u3002action=append \u65F6\u76EE\u6807 dialog \u7684 dbKey\uFF08\u5982 dialog-user-xxx\uFF09\u3002\u7F3A\u7701\u65F6\u7531 runId \u63A8\u5BFC\u3002"
14689
+ description: "\u53EF\u9009\u3002action=append \u65F6\u76EE\u6807 dialog \u7684 dbKey\uFF08\u5982 dialog-user-xxx\uFF09\u3002\u7ED9\u4E86 runId \u65F6\u7531 runId \u63A8\u5BFC\uFF1B\u672C\u5730 CLI \u5BBF\u4E3B\u4E0A\u53EA\u7ED9 dialogKey = \u5411\u540C\u7528\u6237\u6D3B\u7740\u7684\u666E\u901A CLI dialog \u6295\u9012\u4E00\u6761\u901A\u77E5\uFF08\u8FDB\u5B83\u73B0\u6709\u961F\u5217\u6392\u961F\uFF0C\u4E0D\u542F\u52A8 run/\u6A21\u578B\uFF0C\u7B49\u5F85\u786E\u8BA4\u6216 stop \u65F6\u53EA defer\uFF1B\u76EE\u6807\u79BB\u7EBF\u6216\u65E0\u63A5\u6536\u5668\u65F6\u660E\u786E\u8FD4\u56DE unsupported/offline\uFF0C\u4E0D\u9759\u9ED8\u843D\u5E93\uFF09\u3002"
14512
14690
  },
14513
14691
  userInput: {
14514
14692
  type: "string",
@@ -14517,7 +14695,7 @@ function buildControlAgentRunFunctionSchema(opts) {
14517
14695
  mode: {
14518
14696
  type: "string",
14519
14697
  enum: ["enqueue", "continue"],
14520
- description: "\u53EF\u9009\u3002action=append \u65F6\u7684\u8FFD\u52A0\u6A21\u5F0F\uFF1Aenqueue=\u52A0\u5165\u961F\u5217\u4F9B\u4E0B\u4E00\u8F6E\u6D88\u8D39\uFF1Bcontinue=\u7EC8\u6001\u7EED\u8DD1\u3002\u7F3A\u7701\u65F6\u81EA\u52A8\u6839\u636E run \u72B6\u6001\u9002\u914D\u3002"
14698
+ description: "\u53EF\u9009\u3002action=append \u65F6\u7684\u8FFD\u52A0\u6A21\u5F0F\uFF1Aenqueue=\u52A0\u5165\u961F\u5217\u4F9B\u4E0B\u4E00\u8F6E\u6D88\u8D39\uFF1Bcontinue=\u7EC8\u6001\u7EED\u8DD1\uFF08\u9700\u8981 runId\uFF1B\u672C\u5730 CLI \u5BBF\u4E3B\u4E0A\u53EA\u7ED9 dialogKey \u65F6\u4EC5\u652F\u6301 enqueue\uFF09\u3002\u7F3A\u7701\u65F6\u81EA\u52A8\u6839\u636E run \u72B6\u6001\u9002\u914D\u3002"
14521
14699
  },
14522
14700
  ...hasWait ? {
14523
14701
  timeoutMs: {
@@ -18124,6 +18302,32 @@ var deriveAppIdFromRouteKey = (appKey, userId) => {
18124
18302
  return legacyAppId || void 0;
18125
18303
  };
18126
18304
 
18305
+ // packages/core/appHttpUrl.ts
18306
+ var HTTP_PROTOCOLS = /* @__PURE__ */ new Set(["http:", "https:"]);
18307
+ var normalizeAbsoluteUrl = (value) => {
18308
+ if (typeof value !== "string") return void 0;
18309
+ const trimmed2 = value.trim();
18310
+ if (!trimmed2) return void 0;
18311
+ return trimmed2;
18312
+ };
18313
+ var parseHttpUrl = (value) => {
18314
+ const normalized = normalizeAbsoluteUrl(value);
18315
+ if (!normalized) return void 0;
18316
+ let parsed;
18317
+ try {
18318
+ parsed = new URL(normalized);
18319
+ } catch {
18320
+ return void 0;
18321
+ }
18322
+ if (!HTTP_PROTOCOLS.has(parsed.protocol)) return void 0;
18323
+ return parsed;
18324
+ };
18325
+ var normalizeAppHttpUrl = (value) => {
18326
+ const normalized = normalizeAbsoluteUrl(value);
18327
+ if (!normalized || !parseHttpUrl(normalized)) return void 0;
18328
+ return normalized;
18329
+ };
18330
+
18127
18331
  // packages/app/types/appSummary.ts
18128
18332
  var toIsoString = (value) => {
18129
18333
  const timestamp = toTimestampMs(value);
@@ -18144,18 +18348,25 @@ function toAppSummary(record, fallbackServerOrigin) {
18144
18348
  if (!appKey) return null;
18145
18349
  const appId = explicitAppId ?? deriveAppIdFromRouteKey(appKey, record.userId);
18146
18350
  const name = typeof record.name === "string" && record.name.trim().length > 0 ? record.name : appId ?? appKey;
18351
+ const versionServerOrigin = typeof record.versionServerOrigin === "string" && record.versionServerOrigin.trim().length > 0 ? record.versionServerOrigin.trim() : void 0;
18352
+ const hostServerOrigin = typeof record.serverOrigin === "string" && record.serverOrigin.trim().length > 0 ? record.serverOrigin.trim() : fallbackServerOrigin;
18353
+ const recordedUrl = normalizeAppHttpUrl(record.url);
18147
18354
  return {
18148
18355
  name,
18149
- url: buildAppUrl(record.serverOrigin ?? fallbackServerOrigin, appId),
18356
+ url: recordedUrl ?? buildAppUrl(versionServerOrigin ?? hostServerOrigin, appId),
18150
18357
  appId,
18151
18358
  appKey,
18152
- serverOrigin: typeof record.serverOrigin === "string" && record.serverOrigin.trim().length > 0 ? record.serverOrigin : fallbackServerOrigin,
18359
+ serverOrigin: hostServerOrigin,
18360
+ versionServerOrigin,
18153
18361
  spaceId: typeof record.spaceId === "string" && record.spaceId.trim().length > 0 ? record.spaceId : null,
18154
18362
  customUrl: typeof record.customUrl === "string" && record.customUrl.trim().length > 0 ? record.customUrl : void 0,
18155
18363
  modifiedOn: toIsoString(record.updatedAt ?? record.createdAt),
18156
18364
  visibility: record.visibility ?? "private",
18157
18365
  deployMode: record.deployMode ?? "platform",
18158
- icon: record.icon ?? null
18366
+ icon: record.icon ?? null,
18367
+ // 记录里的真实 owner(服务端记录字段,不是客户端推测)。卡片上的
18368
+ // 「发布到社区」用它门控:非 owner 不渲染,避免假按钮(review 假按钮)。
18369
+ ownerUserId: typeof record.userId === "string" && record.userId.trim().length > 0 ? record.userId.trim() : void 0
18159
18370
  };
18160
18371
  }
18161
18372
 
@@ -18191,6 +18402,11 @@ var toTimestamp = (value) => typeof value === "number" ? value : Date.parse(valu
18191
18402
  var normalizeSpaceId2 = (spaceId) => {
18192
18403
  return asOptionalTrimmedString(spaceId) ?? null;
18193
18404
  };
18405
+ var normalizeTrimmedOrUndefined = (value) => {
18406
+ if (typeof value !== "string") return void 0;
18407
+ const trimmed2 = value.trim();
18408
+ return trimmed2.length > 0 ? trimmed2 : void 0;
18409
+ };
18194
18410
  var resolveRecordTimestamp = (record) => record.updatedAt ?? record.updated_at ?? record.createdAt ?? record.created ?? 0;
18195
18411
  function pinnedFirst(a, b) {
18196
18412
  return Number(Boolean(b.pinned)) - Number(Boolean(a.pinned));
@@ -18243,6 +18459,7 @@ function buildMyContentItemsFromUserData(records, currentServer = "", spaceNameB
18243
18459
  originalName: typeof record.originalName === "string" && record.originalName.trim().length > 0 ? record.originalName : void 0,
18244
18460
  contentKey,
18245
18461
  ...record.type === "dialog" ? { status: dialogSummaryStatus(record.status), unreadAt: dialogSummaryUnreadAt(record.unreadAt) } : {},
18462
+ ...contentType === "dialog" && typeof record.userId === "string" && record.userId.trim() && contentKey.startsWith(`dialog-${record.userId.trim()}-`) && contentKey.length > `dialog-${record.userId.trim()}-`.length ? { userId: record.userId.trim(), dialogId: contentKey.slice(`dialog-${record.userId.trim()}-`.length) } : {},
18246
18463
  pinned: Boolean(record.pinned),
18247
18464
  createdAt: record.createdAt ?? record.created ?? 0,
18248
18465
  updatedAt: timestamp,
@@ -18251,8 +18468,10 @@ function buildMyContentItemsFromUserData(records, currentServer = "", spaceNameB
18251
18468
  spaceId,
18252
18469
  spaceName,
18253
18470
  serverOrigin: typeof record.serverOrigin === "string" && record.serverOrigin.trim().length > 0 ? record.serverOrigin : void 0,
18254
- cybots: record.cybots,
18255
- primaryAgentKey: record.primaryAgentKey || record.primaryCybotKey || record.runtimeBinding?.agentKey || (Array.isArray(record.cybots) && record.cybots.length > 0 ? record.cybots[0] : void 0)
18471
+ cybots: Array.isArray(record.cybots) ? record.cybots.filter((entry) => typeof entry === "string" && entry.trim().length > 0) : void 0,
18472
+ primaryAgentKey: record.primaryAgentKey || record.primaryCybotKey || record.runtimeBinding?.agentKey || (Array.isArray(record.cybots) && record.cybots.length > 0 ? record.cybots[0] : void 0),
18473
+ parentDialogId: normalizeTrimmedOrUndefined(record.parentDialogId),
18474
+ rootDialogId: normalizeTrimmedOrUndefined(record.rootDialogId)
18256
18475
  }
18257
18476
  ];
18258
18477
  });
@@ -18715,7 +18934,7 @@ async function updateDocFunc(args, thunkApi) {
18715
18934
  updated_at: (/* @__PURE__ */ new Date()).toISOString()
18716
18935
  };
18717
18936
  await dispatch(write({ data: updatedPageData, customKey: id })).unwrap();
18718
- const { getDocState, applyExternalDocUpdate } = await import("./docStore-V2KECILA.js");
18937
+ const { getDocState, applyExternalDocUpdate } = await import("./docStore-2VAWVLWH.js");
18719
18938
  if (getDocState().pageKey === id) {
18720
18939
  applyExternalDocUpdate({
18721
18940
  slateData: finalSlateData,
@@ -18740,7 +18959,7 @@ async function updateDocFunc(args, thunkApi) {
18740
18959
  // packages/ai/tools/updateUserPreferenceProfileTool.ts
18741
18960
  async function dispatchSetSettings(thunkApi, changes) {
18742
18961
  const injectedSetSettings = thunkApi?.extra?.setSettings;
18743
- const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingThunks-RAMHMTGM.js")).setSettings;
18962
+ const setSettings = typeof injectedSetSettings === "function" ? injectedSetSettings : (await import("./settingThunks-ENOAK2WV.js")).setSettings;
18744
18963
  await thunkApi.dispatch(setSettings(changes)).unwrap();
18745
18964
  }
18746
18965
  var updateUserPreferenceProfileFunctionSchema = {
@@ -19109,7 +19328,7 @@ async function runZiweiChart(input) {
19109
19328
  const gender = normalizeGender(input.gender);
19110
19329
  const fixLeap = input.fixLeap !== false;
19111
19330
  const isLeapMonth = input.isLeapMonth === true;
19112
- const { astro } = await import("./lib-5KKIBFIT.js");
19331
+ const { astro } = await import("./lib-OT5OTXRU.js");
19113
19332
  const rawChart = calendarType === "lunar" ? astro.byLunar(dateStr, timeIndex, gender, isLeapMonth, fixLeap, language) : astro.bySolar(dateStr, timeIndex, gender, fixLeap, language);
19114
19333
  const palaces = rawChart.palaces.map((palace) => ({
19115
19334
  index: palace.index,
@@ -19332,6 +19551,16 @@ async function toolQueryFunc(args) {
19332
19551
  return { rawData, displayData };
19333
19552
  }
19334
19553
  var baseToolDefinitions = [
19554
+ {
19555
+ id: "secretRequest",
19556
+ schema: secretRequestFunctionSchema,
19557
+ executor: secretRequestFunc,
19558
+ description: {
19559
+ name: "secret-request",
19560
+ description: "\u5411\u7528\u6237\u8BF7\u6C42\u5177\u540D\u51ED\u636E\uFF0C\u5BBF\u4E3B\u9762\u677F\u8F93\u5165\u540E\u5199\u5165\u672C\u673A secret store\uFF1B\u503C\u4E0D\u8FDB\u5BF9\u8BDD\u3002",
19561
+ category: "interaction"
19562
+ }
19563
+ },
19335
19564
  {
19336
19565
  id: "uiAskChoice",
19337
19566
  schema: uiAskChoiceFunctionSchema,
@@ -21124,6 +21353,7 @@ export {
21124
21353
  deleteMemoryFunctionSchema,
21125
21354
  queryMemoryFunctionSchema,
21126
21355
  normalizeContinueDialogId,
21356
+ resolveRunContextFacts,
21127
21357
  resolveStartAgentRunCwd,
21128
21358
  isDockerRuntimeKey,
21129
21359
  resolveCliLocalRuntimeKeyCapability,