nolo-cli 0.108.0-alpha.1 → 0.108.0

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 (608) hide show
  1. package/README.md +1 -1
  2. package/{_executeModel-GTYLDSJW.js → _executeModel-RVAKYU4J.js} +128 -83
  3. package/action-RHUT4OHH.js +23 -0
  4. package/{addContentAction-MB2HHMDZ.js → addContentAction-BQ3LJLUW.js} +19 -13
  5. package/{addDialogAgentAction-MCEABSBA.js → addDialogAgentAction-B6X7BXR4.js} +24 -20
  6. package/{agentDeleteCommand-OWYHN6D6.js → agentDeleteCommand-T5MDAOE7.js} +154 -67
  7. package/{agentEmailCommands-C6J2KUL2.js → agentEmailCommands-UWBQSKLI.js} +125 -104
  8. package/{agentGrantCommands-M3XFO6EN.js → agentGrantCommands-HOJ3JBBQ.js} +3 -3
  9. package/agentListCommands-2Q456VYS.js +800 -0
  10. package/{agentMachineCommands-UDEXV472.js → agentMachineCommands-FPJJ4DCF.js} +54 -57
  11. package/{agentProviderCommands-GNPTL5XR.js → agentProviderCommands-7PCGR77I.js} +97 -2
  12. package/{agentPullCommand-O5MPVJ5E.js → agentPullCommand-7GCDM4BK.js} +7 -7
  13. package/agentRecordCommands-3JGDR4NN.js +149 -0
  14. package/agentRunCommand-3NQOP3SD.js +179 -0
  15. package/{agentRunControl-AVJR4JW4.js → agentRunControl-2CDZNHXV.js} +10 -2
  16. package/{agentRuntimeLocal-KCMC2TBD.js → agentRuntimeLocal-SQUDRZWE.js} +42 -46
  17. package/{agentSlice-TNH7BSUC.js → agentSlice-R4W6MCEW.js} +22 -16
  18. package/{appDeleteCommands-JEPA3EWE.js → appDeleteCommands-CLLYGEBC.js} +55 -55
  19. package/{appDeployCommands-UTB76XFM.js → appDeployCommands-HY2NBNDQ.js} +64 -59
  20. package/{appDeployStatusCommands-LGHF2SBD.js → appDeployStatusCommands-SGO5GEXH.js} +53 -52
  21. package/{appGetCommands-PX2BFHOB.js → appGetCommands-ZPYK2N5D.js} +53 -52
  22. package/{appListCommands-BSMPTWKC.js → appListCommands-O2BHIMKS.js} +54 -55
  23. package/{authCommand-YW42YZA4.js → authCommand-GUIREPHK.js} +213 -72
  24. package/{authCommands-RGOGCPP6.js → authCommands-K3BDSTJ4.js} +10 -7
  25. package/{builtinSkillRegistry-FUAVTRVZ.js → builtinSkillRegistry-MUOUTRNJ.js} +13 -10
  26. package/{chromeCommands-FZYAU75D.js → chromeCommands-Z2WRJB7O.js} +290 -38
  27. package/{chromeOpsCommands-62P2Q2YB.js → chromeOpsCommands-YWYXZTIR.js} +157 -23
  28. package/{chunk-RRPWH4LX.js → chunk-26UZ2Y4Z.js} +26 -31
  29. package/{chunk-2F7RJC6L.js → chunk-2C47W7IJ.js} +1 -1
  30. package/{chunk-VLTIYV3X.js → chunk-2ECUZDEL.js} +37 -11
  31. package/{chunk-ALXHV7NK.js → chunk-2GGXHQIW.js} +43 -4
  32. package/{chunk-AHAHBQMU.js → chunk-2OMUAIKR.js} +2 -2
  33. package/{chunk-DHDMC6FO.js → chunk-3CZM6HGQ.js} +53 -23
  34. package/{chunk-BNGW5ASC.js → chunk-3LI5UCTU.js} +23 -3
  35. package/{chunk-FDTR4QJ6.js → chunk-3MZAGMYY.js} +48 -1
  36. package/chunk-3PVYUPXK.js +40 -0
  37. package/chunk-3SK3J3IF.js +929 -0
  38. package/chunk-4LCOCOR5.js +50 -0
  39. package/{chunk-V7E4PXQD.js → chunk-4MSYSHZD.js} +15 -7
  40. package/{chunk-2GRGFCF6.js → chunk-4VJAC32I.js} +2 -1
  41. package/{chunk-MP64VFGD.js → chunk-4XEYAFLY.js} +60 -18
  42. package/chunk-4YRTZIVN.js +871 -0
  43. package/{chunk-MC4XLIJ7.js → chunk-523DITKR.js} +1 -1
  44. package/{chunk-N7J63Q6C.js → chunk-56GBUMO5.js} +10 -1
  45. package/chunk-5MMAK75Q.js +15 -0
  46. package/{chunk-XT35TTFG.js → chunk-5WLADF62.js} +90 -36
  47. package/chunk-5XN3OSCT.js +164 -0
  48. package/chunk-6CCAXGFK.js +1712 -0
  49. package/{chunk-42V6BK2E.js → chunk-6MXDOUMH.js} +18 -36
  50. package/{chunk-QOKAKDPE.js → chunk-6Q7UTJKR.js} +6 -94
  51. package/{chunk-J4MOO56S.js → chunk-6VRWNU5J.js} +10 -2
  52. package/{chunk-GEPUP7OO.js → chunk-726TCFLQ.js} +5 -5
  53. package/chunk-7DPNBQSV.js +9 -0
  54. package/chunk-7YVPCIEN.js +1858 -0
  55. package/{chunk-AEOE4Z6Q.js → chunk-A337PRRR.js} +41 -17
  56. package/chunk-AGIM7IMJ.js +147 -0
  57. package/{chunk-ABQYVJBJ.js → chunk-AIZE5TDM.js} +3 -3
  58. package/{chunk-GPCZ7UXG.js → chunk-ALKCVCA5.js} +4 -4
  59. package/{chunk-5UTFL4QJ.js → chunk-APO5TOXO.js} +1 -1
  60. package/{chunk-E4MARS3Q.js → chunk-AU7AXHUL.js} +1 -1
  61. package/{chunk-PBA4UJBK.js → chunk-BFYDNHYW.js} +12 -12
  62. package/{chunk-QTGQ2LTL.js → chunk-BIAETTOB.js} +5 -9
  63. package/{chunk-OIVSQH2O.js → chunk-CGEK73JN.js} +311 -12
  64. package/chunk-CHOZJMJS.js +78 -0
  65. package/{chunk-GBRG75BQ.js → chunk-D2MDMY2M.js} +1 -0
  66. package/chunk-DGDGNYI5.js +593 -0
  67. package/{chunk-TRV2MIDW.js → chunk-EXAJ6DCR.js} +1 -0
  68. package/{chunk-PVZT43MU.js → chunk-EXR4XCFE.js} +17 -15
  69. package/chunk-EYLGAEB4.js +784 -0
  70. package/{chunk-3BMYXEUW.js → chunk-F2UJW3EK.js} +1 -1
  71. package/{chunk-P5EVSOPA.js → chunk-FWY6BHIJ.js} +363 -248
  72. package/{chunk-4MK3I7Y4.js → chunk-G23MQWLJ.js} +7 -128
  73. package/chunk-G6OOUQWJ.js +417 -0
  74. package/{chunk-WV42OMV7.js → chunk-GHZ2H2HJ.js} +11 -15
  75. package/chunk-GMZLP5DV.js +82 -0
  76. package/chunk-I42VC5KR.js +15 -0
  77. package/{chunk-GO3Z72MT.js → chunk-IFALJPEX.js} +71 -99
  78. package/{chunk-O6OSWFZQ.js → chunk-IHPDK6UD.js} +6 -0
  79. package/{chunk-UKWGR5SS.js → chunk-IJERIUXS.js} +242 -1146
  80. package/chunk-IRG4OKY6.js +843 -0
  81. package/{chunk-TYYSADX4.js → chunk-IUTHWIZQ.js} +269 -141
  82. package/{chunk-QDSINZM3.js → chunk-IXH3HKY2.js} +1 -22
  83. package/chunk-JJM3WS6W.js +132 -0
  84. package/{chunk-R7RHOSZU.js → chunk-KN6MKCS5.js} +1733 -465
  85. package/{chunk-SH43IESU.js → chunk-KQ7DAEZ7.js} +202 -32
  86. package/{chunk-6OZ36FXI.js → chunk-KY6GPQ7O.js} +36 -12
  87. package/{chunk-MRIHM22T.js → chunk-LAVSW2C2.js} +77 -144
  88. package/{chunk-NA35QHCF.js → chunk-LNEKN523.js} +10 -7
  89. package/chunk-LWLNLZC5.js +265 -0
  90. package/{chunk-I3TQJXQ7.js → chunk-MHD5JBSS.js} +131 -10
  91. package/{chunk-KQ4ONNQD.js → chunk-MW533QT3.js} +190 -8
  92. package/{chunk-62CATUYY.js → chunk-NLEJWKF5.js} +10532 -9444
  93. package/{chunk-BFU6C242.js → chunk-NMFV26UG.js} +1 -1
  94. package/{chunk-GQBOR3G6.js → chunk-NN4UUYGB.js} +18 -4
  95. package/{chunk-FZGV4FGK.js → chunk-NUHHBEJC.js} +378 -187
  96. package/chunk-OKARGYFT.js +15 -0
  97. package/{chunk-KQHGZWSV.js → chunk-OXME3PEE.js} +1 -1
  98. package/{chunk-53HEEOTT.js → chunk-OYBAT7RT.js} +113 -17
  99. package/chunk-P3SFAHIL.js +134 -0
  100. package/{chunk-7U6P3PHS.js → chunk-P6KLYCL3.js} +310 -95
  101. package/{chunk-XD2MJFUG.js → chunk-PBGO5AFD.js} +1 -1
  102. package/{chunk-EYAQT56M.js → chunk-PFEK4SA2.js} +13 -10
  103. package/{chunk-Z77CRGTW.js → chunk-PHHFVGOJ.js} +1 -1
  104. package/{chunk-3VNWWVKB.js → chunk-PJNFNEJE.js} +114 -28
  105. package/{chunk-RRM7AJ3M.js → chunk-PS6XSDHW.js} +35 -30
  106. package/{chunk-HVURBGF3.js → chunk-PWRS2SU2.js} +27 -9
  107. package/chunk-QFEW2ULV.js +42 -0
  108. package/chunk-QH2QSBGP.js +7546 -0
  109. package/{chunk-IIVGDG4I.js → chunk-QLQ573SU.js} +124 -77
  110. package/chunk-QQ56R7KS.js +88 -0
  111. package/chunk-QYPE3TS3.js +43 -0
  112. package/{chunk-VMFTFOWF.js → chunk-RLRYVSCD.js} +31 -14
  113. package/{chunk-VRTTFDBM.js → chunk-RNNWTMKT.js} +56 -63
  114. package/chunk-ROXFUKKL.js +13941 -0
  115. package/{chunk-DUK4OQNO.js → chunk-RRPT5CGT.js} +124 -703
  116. package/{chunk-JRQFUXY7.js → chunk-RRQQAG7W.js} +93 -24
  117. package/chunk-SJ3QFSQS.js +1147 -0
  118. package/chunk-SP4WCECG.js +95 -0
  119. package/{chunk-Q67DOFOO.js → chunk-SZC4REES.js} +212 -105
  120. package/{chunk-BYMV6QZG.js → chunk-TNIX77YM.js} +4 -0
  121. package/{chunk-UZGQNTVW.js → chunk-TSBCYK5F.js} +10 -8
  122. package/chunk-TY3TIUJK.js +89 -0
  123. package/chunk-U4STABYN.js +81 -0
  124. package/chunk-UEILX4EV.js +15 -0
  125. package/{chunk-YYLHWIW6.js → chunk-UKZX3NHN.js} +1 -1
  126. package/{chunk-EEGDMATE.js → chunk-UPFOOGHU.js} +90 -79
  127. package/{chunk-7S4YWN7P.js → chunk-V2UPLOXT.js} +4 -4
  128. package/{chunk-PQFHGD77.js → chunk-V5DCOM6G.js} +185 -16
  129. package/{chunk-LS2ZANRJ.js → chunk-V6WXGTUJ.js} +1 -1
  130. package/{chunk-6YTOJY35.js → chunk-VBG7GWWR.js} +253 -8
  131. package/{chunk-DVINR3PL.js → chunk-VEA7H5FG.js} +3 -3
  132. package/chunk-VIWDGTDA.js +8 -0
  133. package/chunk-VJVNU77E.js +83 -0
  134. package/{chunk-EADNWBAZ.js → chunk-VP3BINY7.js} +13 -0
  135. package/{chunk-HKNXJGEC.js → chunk-VSPO4S33.js} +47 -192
  136. package/{chunk-ETI2NYVF.js → chunk-W2N3ZC4P.js} +7 -7
  137. package/{chunk-EOARMOVD.js → chunk-W4S6OTSC.js} +6 -3
  138. package/{chunk-6Z7MY3V7.js → chunk-WCQNEMXG.js} +3 -3
  139. package/chunk-WJZOQR2J.js +151 -0
  140. package/{chunk-L7OXGGBN.js → chunk-WVES4PHL.js} +69 -57
  141. package/{chunk-BFDFRLLQ.js → chunk-WW2USJ3C.js} +3 -3
  142. package/{chunk-QWL5QZGU.js → chunk-X2VPXJZC.js} +20 -11
  143. package/chunk-X5BIY654.js +29 -0
  144. package/{chunk-Q554LLSI.js → chunk-XETG4RIX.js} +5 -5
  145. package/{chunk-3L2WKC3W.js → chunk-XPWGOTBQ.js} +8 -1
  146. package/{chunk-JEDZAO7L.js → chunk-YBNHPX4S.js} +257 -37
  147. package/{chunk-JPGCXHNM.js → chunk-YLMMECCH.js} +1 -1
  148. package/{chunk-CSC3CU4K.js → chunk-YSZQSZR2.js} +61 -11
  149. package/{chunk-6D6VBVEW.js → chunk-YVTZMLXZ.js} +96 -25
  150. package/{chunk-AG2AZ6GX.js → chunk-YZZLKXCQ.js} +1449 -1094
  151. package/chunk-ZRAU6T47.js +56 -0
  152. package/{chunk-ONXOABJR.js → chunk-ZWQUWF6W.js} +36 -1
  153. package/{cliExecutor-HG3S345O.js → cliExecutor-AWYR3T33.js} +1 -1
  154. package/commandRegistry-C25O2ARU.js +839 -0
  155. package/contentThunks-UWODFKX6.js +83 -0
  156. package/{cooldownCommands-REAWYVTY.js → cooldownCommands-JFKTYS2D.js} +2 -2
  157. package/{createAgentAutomationAction-OBH7GPW5.js → createAgentAutomationAction-SA4IA4CR.js} +51 -43
  158. package/createDialogAction-EDK5IMRG.js +75 -0
  159. package/{createPageAction-JJ7UUTWC.js → createPageAction-VYVF5EIZ.js} +60 -51
  160. package/{chunk-BVGTK7MR.js → cursorProvider-YGGNMVWX.js} +2751 -10185
  161. package/{dbSlice-A6C6H32X.js → dbSlice-JQFBMJ55.js} +18 -12
  162. package/{deleteFile-YG6QMJLU.js → deleteFile-6JWDDRVP.js} +9 -5
  163. package/dialogCommands-K734RXEQ.js +108 -0
  164. package/{dialogSlice-6Z2BPC3T.js → dialogSlice-EEDP6PJ3.js} +66 -41
  165. package/{dist-VODFSGNG.js → dist-NJC2W7I4.js} +61 -54
  166. package/{docCreateCommands-WRG2JLGM.js → docCreateCommands-N3KPGP4A.js} +51 -53
  167. package/{docDeleteCommands-SHWJIBJS.js → docDeleteCommands-4CR4TXZ7.js} +53 -54
  168. package/{docReadCommands-WJN3WT6O.js → docReadCommands-62XK57VS.js} +50 -52
  169. package/{docStore-7WUS6XXX.js → docStore-RB7YBD4Y.js} +24 -15
  170. package/{docUpdateCommands-IE32IL6O.js → docUpdateCommands-DRAAWIDC.js} +51 -53
  171. package/{fetchMessages-EIU7UFFK.js → fetchMessages-LM6OMMQQ.js} +5 -4
  172. package/{getPricing-LUSEABA6.js → getPricing-XDF4OLTC.js} +6 -6
  173. package/handleSendMessageAction-TYDPIC6O.js +1849 -0
  174. package/index.js +91 -884
  175. package/{lib-FRRS27KN.js → lib-PU2G2MSO.js} +523 -191
  176. package/{localDialogRead-BTFJ4V2I.js → localDialogRead-BOETO2TD.js} +2 -2
  177. package/localRuntimeAdapter-VYB2QTU3.js +239 -0
  178. package/{localRuntimeAuthority-6IR6BBXE.js → localRuntimeAuthority-YSE6NH7B.js} +12 -9
  179. package/{localRuntimeDb-SYQGUF4U.js → localRuntimeDb-7FBKDEQY.js} +1 -1
  180. package/{machineCommands-KSN4COGR.js → machineCommands-IQRRLSYP.js} +493 -151
  181. package/machineWsRunDispatch-LIMM5CYE.js +164 -0
  182. package/{memberThunks-P2ECUJ56.js → memberThunks-Y3Q7GZTG.js} +24 -17
  183. package/{models-T3SG6MJ5.js → models-6V4ZCHEE.js} +2 -2
  184. package/node_modules/abstract-level/CHANGELOG.md +150 -0
  185. package/node_modules/abstract-level/LICENSE +21 -0
  186. package/node_modules/abstract-level/README.md +1957 -0
  187. package/node_modules/abstract-level/UPGRADING.md +669 -0
  188. package/node_modules/abstract-level/abstract-chained-batch.js +397 -0
  189. package/node_modules/abstract-level/abstract-iterator.js +404 -0
  190. package/node_modules/abstract-level/abstract-level.js +1127 -0
  191. package/node_modules/abstract-level/abstract-snapshot.js +84 -0
  192. package/node_modules/abstract-level/index.d.ts +52 -0
  193. package/node_modules/abstract-level/index.js +9 -0
  194. package/node_modules/abstract-level/lib/abstract-sublevel-iterator.js +141 -0
  195. package/node_modules/abstract-level/lib/abstract-sublevel.js +290 -0
  196. package/node_modules/abstract-level/lib/common.js +33 -0
  197. package/node_modules/abstract-level/lib/default-chained-batch.js +29 -0
  198. package/node_modules/abstract-level/lib/default-kv-iterator.js +74 -0
  199. package/node_modules/abstract-level/lib/deferred-iterator.js +110 -0
  200. package/node_modules/abstract-level/lib/deferred-queue.js +84 -0
  201. package/node_modules/abstract-level/lib/errors.js +21 -0
  202. package/node_modules/abstract-level/lib/event-monitor.js +30 -0
  203. package/node_modules/abstract-level/lib/hooks.js +78 -0
  204. package/node_modules/abstract-level/lib/prefixes.js +21 -0
  205. package/node_modules/abstract-level/lib/prewrite-batch.js +96 -0
  206. package/node_modules/abstract-level/lib/range-options.js +26 -0
  207. package/node_modules/abstract-level/package.json +66 -0
  208. package/node_modules/abstract-level/test/async-iterator-test.js +132 -0
  209. package/node_modules/abstract-level/test/batch-test.js +214 -0
  210. package/node_modules/abstract-level/test/chained-batch-test.js +315 -0
  211. package/node_modules/abstract-level/test/clear-range-test.js +262 -0
  212. package/node_modules/abstract-level/test/clear-test.js +110 -0
  213. package/node_modules/abstract-level/test/common.js +90 -0
  214. package/node_modules/abstract-level/test/deferred-open-test.js +209 -0
  215. package/node_modules/abstract-level/test/del-test.js +65 -0
  216. package/node_modules/abstract-level/test/encoding-buffer-test.js +336 -0
  217. package/node_modules/abstract-level/test/encoding-custom-test.js +92 -0
  218. package/node_modules/abstract-level/test/encoding-decode-error-test.js +85 -0
  219. package/node_modules/abstract-level/test/encoding-json-test.js +75 -0
  220. package/node_modules/abstract-level/test/encoding-test.js +130 -0
  221. package/node_modules/abstract-level/test/events/write.js +132 -0
  222. package/node_modules/abstract-level/test/factory-test.js +36 -0
  223. package/node_modules/abstract-level/test/get-many-test.js +157 -0
  224. package/node_modules/abstract-level/test/get-sync-test.js +61 -0
  225. package/node_modules/abstract-level/test/get-test.js +83 -0
  226. package/node_modules/abstract-level/test/has-many-test.js +144 -0
  227. package/node_modules/abstract-level/test/has-test.js +81 -0
  228. package/node_modules/abstract-level/test/hooks/newsub.js +57 -0
  229. package/node_modules/abstract-level/test/hooks/postopen.js +229 -0
  230. package/node_modules/abstract-level/test/hooks/prewrite.js +816 -0
  231. package/node_modules/abstract-level/test/hooks/shared.js +38 -0
  232. package/node_modules/abstract-level/test/index.js +86 -0
  233. package/node_modules/abstract-level/test/iterator-explicit-snapshot-test.js +393 -0
  234. package/node_modules/abstract-level/test/iterator-no-snapshot-test.js +49 -0
  235. package/node_modules/abstract-level/test/iterator-range-test.js +277 -0
  236. package/node_modules/abstract-level/test/iterator-seek-test.js +335 -0
  237. package/node_modules/abstract-level/test/iterator-snapshot-test.js +56 -0
  238. package/node_modules/abstract-level/test/iterator-test.js +621 -0
  239. package/node_modules/abstract-level/test/manifest-test.js +21 -0
  240. package/node_modules/abstract-level/test/open-create-if-missing-test.js +39 -0
  241. package/node_modules/abstract-level/test/open-error-if-exists-test.js +25 -0
  242. package/node_modules/abstract-level/test/open-test.js +263 -0
  243. package/node_modules/abstract-level/test/put-get-del-test.js +97 -0
  244. package/node_modules/abstract-level/test/put-test.js +70 -0
  245. package/node_modules/abstract-level/test/self/abstract-iterator-test.js +182 -0
  246. package/node_modules/abstract-level/test/self/async-iterator-test.js +242 -0
  247. package/node_modules/abstract-level/test/self/attach-resource-test.js +74 -0
  248. package/node_modules/abstract-level/test/self/defer-test.js +140 -0
  249. package/node_modules/abstract-level/test/self/deferred-iterator-test.js +314 -0
  250. package/node_modules/abstract-level/test/self/deferred-operations-test.js +86 -0
  251. package/node_modules/abstract-level/test/self/deferred-queue-test.js +93 -0
  252. package/node_modules/abstract-level/test/self/encoding-test.js +391 -0
  253. package/node_modules/abstract-level/test/self/errors-test.js +11 -0
  254. package/node_modules/abstract-level/test/self/iterator-test.js +1050 -0
  255. package/node_modules/abstract-level/test/self/sublevel-test.js +1039 -0
  256. package/node_modules/abstract-level/test/self.js +905 -0
  257. package/node_modules/abstract-level/test/sublevel-test.js +209 -0
  258. package/node_modules/abstract-level/test/traits/closed.js +42 -0
  259. package/node_modules/abstract-level/test/traits/index.js +4 -0
  260. package/node_modules/abstract-level/test/traits/open.js +62 -0
  261. package/node_modules/abstract-level/test/util.js +275 -0
  262. package/node_modules/abstract-level/types/abstract-chained-batch.d.ts +124 -0
  263. package/node_modules/abstract-level/types/abstract-iterator.d.ts +241 -0
  264. package/node_modules/abstract-level/types/abstract-level.d.ts +636 -0
  265. package/node_modules/abstract-level/types/abstract-snapshot.d.ts +30 -0
  266. package/node_modules/abstract-level/types/abstract-sublevel.d.ts +76 -0
  267. package/node_modules/abstract-level/types/interfaces.d.ts +43 -0
  268. package/node_modules/base64-js/LICENSE +21 -0
  269. package/node_modules/base64-js/README.md +34 -0
  270. package/node_modules/base64-js/base64js.min.js +1 -0
  271. package/node_modules/base64-js/index.d.ts +3 -0
  272. package/node_modules/base64-js/index.js +150 -0
  273. package/node_modules/base64-js/package.json +47 -0
  274. package/node_modules/browser-level/CHANGELOG.md +44 -0
  275. package/node_modules/browser-level/LICENSE +21 -0
  276. package/node_modules/browser-level/README.md +124 -0
  277. package/node_modules/browser-level/UPGRADING.md +143 -0
  278. package/node_modules/browser-level/index.d.ts +108 -0
  279. package/node_modules/browser-level/index.js +323 -0
  280. package/node_modules/browser-level/iterator.js +239 -0
  281. package/node_modules/browser-level/package.json +48 -0
  282. package/node_modules/browser-level/util/clear.js +38 -0
  283. package/node_modules/browser-level/util/deserialize.js +17 -0
  284. package/node_modules/browser-level/util/key-range.js +20 -0
  285. package/node_modules/buffer/AUTHORS.md +73 -0
  286. package/node_modules/buffer/LICENSE +21 -0
  287. package/node_modules/buffer/README.md +410 -0
  288. package/node_modules/buffer/index.d.ts +194 -0
  289. package/node_modules/buffer/index.js +2106 -0
  290. package/node_modules/buffer/package.json +93 -0
  291. package/node_modules/classic-level/CHANGELOG.md +115 -0
  292. package/node_modules/classic-level/LICENSE +21 -0
  293. package/node_modules/classic-level/README.md +274 -0
  294. package/node_modules/classic-level/UPGRADING.md +131 -0
  295. package/node_modules/classic-level/binding.cc +2652 -0
  296. package/node_modules/classic-level/binding.gyp +71 -0
  297. package/node_modules/classic-level/binding.js +1 -0
  298. package/node_modules/classic-level/chained-batch.js +35 -0
  299. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/LICENSE +27 -0
  300. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/Makefile +424 -0
  301. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/build_detect_platform +256 -0
  302. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/autocompact_test.cc +118 -0
  303. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/builder.cc +88 -0
  304. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/builder.h +34 -0
  305. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/c.cc +595 -0
  306. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/c_test.c +390 -0
  307. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/corruption_test.cc +374 -0
  308. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_bench.cc +1020 -0
  309. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_impl.cc +1568 -0
  310. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_impl.h +212 -0
  311. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_iter.cc +317 -0
  312. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_iter.h +28 -0
  313. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/db_test.cc +2158 -0
  314. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/dbformat.cc +140 -0
  315. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/dbformat.h +230 -0
  316. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/dbformat_test.cc +112 -0
  317. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/dumpfile.cc +225 -0
  318. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/fault_injection_test.cc +554 -0
  319. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/filename.cc +144 -0
  320. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/filename.h +85 -0
  321. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/filename_test.cc +123 -0
  322. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/leveldbutil.cc +64 -0
  323. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_format.h +35 -0
  324. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_reader.cc +284 -0
  325. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_reader.h +113 -0
  326. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_test.cc +591 -0
  327. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_writer.cc +112 -0
  328. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/log_writer.h +54 -0
  329. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/memtable.cc +145 -0
  330. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/memtable.h +89 -0
  331. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/recovery_test.cc +324 -0
  332. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/repair.cc +461 -0
  333. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/skiplist.h +384 -0
  334. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/skiplist_test.cc +378 -0
  335. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/snapshot.h +67 -0
  336. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/table_cache.cc +127 -0
  337. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/table_cache.h +61 -0
  338. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_edit.cc +266 -0
  339. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_edit.h +107 -0
  340. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_edit_test.cc +46 -0
  341. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_set.cc +1535 -0
  342. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_set.h +399 -0
  343. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/version_set_test.cc +179 -0
  344. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/write_batch.cc +147 -0
  345. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/write_batch_internal.h +50 -0
  346. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/db/write_batch_test.cc +120 -0
  347. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/helpers/memenv/memenv.cc +398 -0
  348. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/helpers/memenv/memenv.h +20 -0
  349. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/helpers/memenv/memenv_test.cc +241 -0
  350. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/c.h +290 -0
  351. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/cache.h +110 -0
  352. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/comparator.h +63 -0
  353. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/db.h +164 -0
  354. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/dumpfile.h +25 -0
  355. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/env.h +351 -0
  356. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/filter_policy.h +70 -0
  357. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/iterator.h +100 -0
  358. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/options.h +213 -0
  359. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/slice.h +109 -0
  360. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/status.h +112 -0
  361. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/table.h +85 -0
  362. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/table_builder.h +92 -0
  363. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/value_sink.h +26 -0
  364. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/include/leveldb/write_batch.h +64 -0
  365. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/issues/issue178_test.cc +92 -0
  366. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/issues/issue200_test.cc +59 -0
  367. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/atomic_pointer.h +242 -0
  368. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/port.h +21 -0
  369. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/port_example.h +141 -0
  370. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/port_posix.cc +53 -0
  371. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/port_posix.h +156 -0
  372. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/port_posix_sse.cc +129 -0
  373. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/thread_annotations.h +60 -0
  374. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/port/win/stdint.h +24 -0
  375. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/block.cc +268 -0
  376. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/block.h +44 -0
  377. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/block_builder.cc +109 -0
  378. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/block_builder.h +57 -0
  379. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/filter_block.cc +111 -0
  380. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/filter_block.h +68 -0
  381. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/filter_block_test.cc +128 -0
  382. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/format.cc +144 -0
  383. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/format.h +108 -0
  384. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/iterator.cc +67 -0
  385. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/iterator_wrapper.h +66 -0
  386. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/merger.cc +197 -0
  387. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/merger.h +26 -0
  388. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/table.cc +285 -0
  389. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/table_builder.cc +270 -0
  390. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/table_test.cc +876 -0
  391. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/two_level_iterator.cc +182 -0
  392. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/table/two_level_iterator.h +34 -0
  393. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/arena.cc +68 -0
  394. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/arena.h +68 -0
  395. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/arena_test.cc +68 -0
  396. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/bloom.cc +95 -0
  397. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/bloom_test.cc +162 -0
  398. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/cache.cc +405 -0
  399. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/cache_test.cc +226 -0
  400. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/coding.cc +194 -0
  401. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/coding.h +104 -0
  402. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/coding_test.cc +196 -0
  403. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/comparator.cc +81 -0
  404. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/crc32c.cc +350 -0
  405. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/crc32c.h +45 -0
  406. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/crc32c_test.cc +72 -0
  407. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/env.cc +100 -0
  408. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/env_posix.cc +695 -0
  409. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/env_posix_test.cc +66 -0
  410. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/env_posix_test_helper.h +28 -0
  411. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/env_test.cc +106 -0
  412. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/filter_policy.cc +11 -0
  413. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/hash.cc +52 -0
  414. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/hash.h +19 -0
  415. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/hash_test.cc +54 -0
  416. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/histogram.cc +139 -0
  417. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/histogram.h +42 -0
  418. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/logging.cc +72 -0
  419. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/logging.h +43 -0
  420. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/mutexlock.h +41 -0
  421. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/options.cc +30 -0
  422. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/posix_logger.h +98 -0
  423. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/random.h +64 -0
  424. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/status.cc +75 -0
  425. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/testharness.cc +77 -0
  426. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/testharness.h +138 -0
  427. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/testutil.cc +51 -0
  428. package/node_modules/classic-level/deps/leveldb/leveldb-1.20/util/testutil.h +63 -0
  429. package/node_modules/classic-level/deps/leveldb/leveldb.gyp +282 -0
  430. package/node_modules/classic-level/deps/leveldb/patches/001-value-sink.patch +164 -0
  431. package/node_modules/classic-level/deps/leveldb/port-libuv/atomic_pointer_win.h +48 -0
  432. package/node_modules/classic-level/deps/leveldb/port-libuv/env_win.cc +692 -0
  433. package/node_modules/classic-level/deps/leveldb/port-libuv/port_uv.cc +36 -0
  434. package/node_modules/classic-level/deps/leveldb/port-libuv/port_uv.h +157 -0
  435. package/node_modules/classic-level/deps/leveldb/port-libuv/port_uv.h.bak +153 -0
  436. package/node_modules/classic-level/deps/leveldb/port-libuv/stdint-msvc2008.h +247 -0
  437. package/node_modules/classic-level/deps/leveldb/port-libuv/uv_condvar.h +45 -0
  438. package/node_modules/classic-level/deps/leveldb/port-libuv/uv_condvar_posix.cc +139 -0
  439. package/node_modules/classic-level/deps/leveldb/port-libuv/win_logger.cc +79 -0
  440. package/node_modules/classic-level/deps/leveldb/port-libuv/win_logger.h +28 -0
  441. package/node_modules/classic-level/deps/snappy/freebsd/config.h +135 -0
  442. package/node_modules/classic-level/deps/snappy/freebsd/snappy-stubs-public.h +100 -0
  443. package/node_modules/classic-level/deps/snappy/linux/config.h +135 -0
  444. package/node_modules/classic-level/deps/snappy/linux/snappy-stubs-public.h +100 -0
  445. package/node_modules/classic-level/deps/snappy/mac/config.h +137 -0
  446. package/node_modules/classic-level/deps/snappy/mac/snappy-stubs-public.h +100 -0
  447. package/node_modules/classic-level/deps/snappy/openbsd/config.h +135 -0
  448. package/node_modules/classic-level/deps/snappy/openbsd/snappy-stubs-public.h +100 -0
  449. package/node_modules/classic-level/deps/snappy/snappy/COPYING +54 -0
  450. package/node_modules/classic-level/deps/snappy/snappy/cmake/SnappyConfig.cmake +1 -0
  451. package/node_modules/classic-level/deps/snappy/snappy/cmake/config.h.in +62 -0
  452. package/node_modules/classic-level/deps/snappy/snappy/snappy-c.cc +90 -0
  453. package/node_modules/classic-level/deps/snappy/snappy/snappy-c.h +138 -0
  454. package/node_modules/classic-level/deps/snappy/snappy/snappy-internal.h +224 -0
  455. package/node_modules/classic-level/deps/snappy/snappy/snappy-sinksource.cc +104 -0
  456. package/node_modules/classic-level/deps/snappy/snappy/snappy-sinksource.h +182 -0
  457. package/node_modules/classic-level/deps/snappy/snappy/snappy-stubs-internal.cc +42 -0
  458. package/node_modules/classic-level/deps/snappy/snappy/snappy-stubs-internal.h +561 -0
  459. package/node_modules/classic-level/deps/snappy/snappy/snappy-stubs-public.h.in +94 -0
  460. package/node_modules/classic-level/deps/snappy/snappy/snappy-test.cc +612 -0
  461. package/node_modules/classic-level/deps/snappy/snappy/snappy-test.h +573 -0
  462. package/node_modules/classic-level/deps/snappy/snappy/snappy.cc +1515 -0
  463. package/node_modules/classic-level/deps/snappy/snappy/snappy.h +203 -0
  464. package/node_modules/classic-level/deps/snappy/snappy/snappy_unittest.cc +1410 -0
  465. package/node_modules/classic-level/deps/snappy/snappy.gyp +119 -0
  466. package/node_modules/classic-level/deps/snappy/solaris/config.h +135 -0
  467. package/node_modules/classic-level/deps/snappy/solaris/snappy-stubs-public.h +100 -0
  468. package/node_modules/classic-level/deps/snappy/win32/config.h +29 -0
  469. package/node_modules/classic-level/deps/snappy/win32/snappy-stubs-public.h +100 -0
  470. package/node_modules/classic-level/index.d.ts +343 -0
  471. package/node_modules/classic-level/index.js +311 -0
  472. package/node_modules/classic-level/iterator.js +122 -0
  473. package/node_modules/classic-level/package.json +70 -0
  474. package/node_modules/classic-level/prebuilds/android-arm/classic-level.armv7.node +0 -0
  475. package/node_modules/classic-level/prebuilds/android-arm64/classic-level.armv8.node +0 -0
  476. package/node_modules/classic-level/prebuilds/darwin-x64+arm64/classic-level.node +0 -0
  477. package/node_modules/classic-level/prebuilds/linux-arm/classic-level.armv6.node +0 -0
  478. package/node_modules/classic-level/prebuilds/linux-arm/classic-level.armv7.node +0 -0
  479. package/node_modules/classic-level/prebuilds/linux-arm64/classic-level.armv8.node +0 -0
  480. package/node_modules/classic-level/prebuilds/linux-x64/classic-level.musl.node +0 -0
  481. package/node_modules/classic-level/prebuilds/linux-x64/classic-level.node +0 -0
  482. package/node_modules/classic-level/prebuilds/win32-ia32/classic-level.node +0 -0
  483. package/node_modules/classic-level/prebuilds/win32-x64/classic-level.node +0 -0
  484. package/node_modules/ieee754/LICENSE +11 -0
  485. package/node_modules/ieee754/README.md +51 -0
  486. package/node_modules/ieee754/index.d.ts +10 -0
  487. package/node_modules/ieee754/index.js +85 -0
  488. package/node_modules/ieee754/package.json +52 -0
  489. package/node_modules/is-buffer/LICENSE +21 -0
  490. package/node_modules/is-buffer/README.md +54 -0
  491. package/node_modules/is-buffer/index.d.ts +2 -0
  492. package/node_modules/is-buffer/index.js +11 -0
  493. package/node_modules/is-buffer/package.json +65 -0
  494. package/node_modules/level/CHANGELOG.md +532 -0
  495. package/node_modules/level/LICENSE +21 -0
  496. package/node_modules/level/README.md +107 -0
  497. package/node_modules/level/UPGRADING.md +413 -0
  498. package/node_modules/level/browser.js +1 -0
  499. package/node_modules/level/index.d.ts +75 -0
  500. package/node_modules/level/index.js +1 -0
  501. package/node_modules/level/package.json +62 -0
  502. package/node_modules/level-supports/CHANGELOG.md +140 -0
  503. package/node_modules/level-supports/LICENSE +21 -0
  504. package/node_modules/level-supports/README.md +276 -0
  505. package/node_modules/level-supports/index.d.ts +137 -0
  506. package/node_modules/level-supports/index.js +26 -0
  507. package/node_modules/level-supports/package.json +46 -0
  508. package/node_modules/level-supports/test/cloneable.js +26 -0
  509. package/node_modules/level-supports/test/index.js +24 -0
  510. package/node_modules/level-supports/test/self.js +86 -0
  511. package/node_modules/level-supports/test/shape.js +23 -0
  512. package/node_modules/level-transcoder/CHANGELOG.md +15 -0
  513. package/node_modules/level-transcoder/LICENSE +21 -0
  514. package/node_modules/level-transcoder/README.md +214 -0
  515. package/node_modules/level-transcoder/UPGRADING.md +13 -0
  516. package/node_modules/level-transcoder/index.d.ts +27 -0
  517. package/node_modules/level-transcoder/index.js +158 -0
  518. package/node_modules/level-transcoder/lib/encoding.d.ts +158 -0
  519. package/node_modules/level-transcoder/lib/encoding.js +105 -0
  520. package/node_modules/level-transcoder/lib/encodings.d.ts +9 -0
  521. package/node_modules/level-transcoder/lib/encodings.js +135 -0
  522. package/node_modules/level-transcoder/lib/formats.d.ts +13 -0
  523. package/node_modules/level-transcoder/lib/formats.js +111 -0
  524. package/node_modules/level-transcoder/lib/text-endec.d.ts +6 -0
  525. package/node_modules/level-transcoder/lib/text-endec.js +19 -0
  526. package/node_modules/level-transcoder/package.json +46 -0
  527. package/node_modules/maybe-combine-errors/LICENSE.md +21 -0
  528. package/node_modules/maybe-combine-errors/README.md +94 -0
  529. package/node_modules/maybe-combine-errors/index.js +60 -0
  530. package/node_modules/maybe-combine-errors/package.json +33 -0
  531. package/node_modules/module-error/CHANGELOG.md +23 -0
  532. package/node_modules/module-error/LICENSE +21 -0
  533. package/node_modules/module-error/README.md +89 -0
  534. package/node_modules/module-error/index.d.ts +18 -0
  535. package/node_modules/module-error/index.js +22 -0
  536. package/node_modules/module-error/package.json +36 -0
  537. package/node_modules/napi-macros/LICENSE +21 -0
  538. package/node_modules/napi-macros/README.md +277 -0
  539. package/node_modules/napi-macros/index.js +1 -0
  540. package/node_modules/napi-macros/napi-macros.h +255 -0
  541. package/node_modules/napi-macros/package.json +22 -0
  542. package/node_modules/node-gyp-build/LICENSE +21 -0
  543. package/node_modules/node-gyp-build/README.md +58 -0
  544. package/node_modules/node-gyp-build/SECURITY.md +5 -0
  545. package/node_modules/node-gyp-build/bin.js +84 -0
  546. package/node_modules/node-gyp-build/build-test.js +19 -0
  547. package/node_modules/node-gyp-build/index.js +6 -0
  548. package/node_modules/node-gyp-build/node-gyp-build.js +207 -0
  549. package/node_modules/node-gyp-build/optional.js +7 -0
  550. package/node_modules/node-gyp-build/package.json +43 -0
  551. package/oauthTokenStore-PADKLNOC.js +23 -0
  552. package/package.json +6 -3
  553. package/processSpawn-SOAV3FEV.js +11 -0
  554. package/profileConfig-ZGOFORWV.js +43 -0
  555. package/{providerPresetApply-FG6NZ57W.js → providerPresetApply-HIPK67DU.js} +9 -9
  556. package/{providerRegistry-757OWH3O.js → providerRegistry-AI4U2FNM.js} +13 -9
  557. package/{read-COE3ZYR6.js → read-RNUQ7F34.js} +11 -7
  558. package/{readDocTool-5USN4A6V.js → readDocTool-6WIZHE6O.js} +5 -3
  559. package/{readlineWorkspace-HO62DKCG.js → readlineWorkspace-P3I7ZJUP.js} +6948 -3879
  560. package/{removeDialogAgentAction-J6X5QMTA.js → removeDialogAgentAction-EFQ4O2IQ.js} +27 -26
  561. package/{runAgentClientLoop-JLRJIF3F.js → runAgentClientLoop-AYNL3KMJ.js} +150 -90
  562. package/{runtimeDoctorCommands-X6WDBEQX.js → runtimeDoctorCommands-5CIWJEZ3.js} +36 -8
  563. package/runtimeModeArgs-2Y7BALTO.js +31 -0
  564. package/setDialogExtraReferencesAction-MXAH2KPV.js +37 -0
  565. package/{setPrimaryDialogAgentAction-FN22THHT.js → setPrimaryDialogAgentAction-7OPVNK4M.js} +28 -27
  566. package/{chunk-GP5LKBUZ.js → settingThunks-GHVLHABJ.js} +240 -945
  567. package/{skillDiscovery-CYUCJMAG.js → skillDiscovery-QC35EQY4.js} +3 -3
  568. package/{slateUtils-RIZES3PV.js → slateUtils-NGV2NMKM.js} +1 -1
  569. package/{spaceCommands-5GLCWZPO.js → spaceCommands-WZCLRGBO.js} +56 -55
  570. package/{streamAgentChatTurn-DZ3PP7ZH.js → streamAgentChatTurn-O5T3B4B3.js} +325 -1557
  571. package/{switchDialogAgentAction-LVTEV3FR.js → switchDialogAgentAction-4PANDG3L.js} +24 -20
  572. package/{tableCommands-O6NWHFKV.js → tableCommands-U3QDY4L6.js} +19 -17
  573. package/{toolApiClient-QVJ6HDNN.js → toolApiClient-54CXTU7C.js} +5 -4
  574. package/tools-UMU2DYQX.js +122 -0
  575. package/{tuiSummaryLlmCaller-OHHFTHMG.js → tuiSummaryLlmCaller-ISODIW2O.js} +15 -29
  576. package/{updateCommands-2M74UL7P.js → updateCommands-NQXAGFM7.js} +3 -3
  577. package/{updateDialogTitleAction-VWZT4J6J.js → updateDialogTitleAction-TIS2SETN.js} +101 -57
  578. package/action-P4TNFGAD.js +0 -31
  579. package/agentListCommands-B2V4YAC4.js +0 -410
  580. package/agentRecordCommands-XBVDEYVC.js +0 -128
  581. package/agentRunCommand-V6RTNFRH.js +0 -156
  582. package/browser-image-compression-MFDTD7K6.js +0 -1763
  583. package/chatQueueReduxAdapter-XMFWRG3P.js +0 -186
  584. package/chunk-ACTMNVHM.js +0 -93
  585. package/chunk-CQ3WA2NE.js +0 -299
  586. package/chunk-M76ECQRD.js +0 -13658
  587. package/chunk-MEYIRKDN.js +0 -8967
  588. package/chunk-N4G4PKQ6.js +0 -23
  589. package/chunk-PUOC4YRO.js +0 -394
  590. package/chunk-Q5FJJ6XI.js +0 -103
  591. package/chunk-QQWJUHSL.js +0 -34
  592. package/chunk-S7Z2HMCN.js +0 -25
  593. package/chunk-TWQWYIMJ.js +0 -21409
  594. package/chunk-Y5GCAMGP.js +0 -9
  595. package/chunk-YPREESF4.js +0 -225
  596. package/contentThunks-3Z6NAUW6.js +0 -73
  597. package/createDialogAction-7XW3RX2A.js +0 -65
  598. package/dialogCommands-H7FPUYUQ.js +0 -99
  599. package/handleSendMessageAction-GUBOMCGM.js +0 -633
  600. package/machineWsRunDispatch-AAG6PDBY.js +0 -144
  601. package/setDialogExtraReferencesAction-WX5VTY6O.js +0 -30
  602. package/settingSlice-P4ZW7K5X.js +0 -204
  603. package/syncMapping-N6RGXGBW.js +0 -437
  604. package/tools-XA4ZWLH4.js +0 -110
  605. package/{chunk-SV5IJK6K.js → chunk-NBTY7YJF.js} +3 -3
  606. package/{chunk-X7HHHIOZ.js → chunk-Y6ROFCZO.js} +0 -0
  607. package/{db-WK5MDZVN.js → db-VQSAOWAO.js} +1 -1
  608. package/{offlineMarxistsAgentCommand-HGXZV4XJ.js → offlineMarxistsAgentCommand-2QTHJCHV.js} +4 -4
@@ -0,0 +1,1858 @@
1
+ import {
2
+ buildStaticUserPolicyContext,
3
+ resolveSpaceContextPreloadPlan
4
+ } from "./chunk-PBGO5AFD.js";
5
+ import {
6
+ fetchReferenceContents,
7
+ mergeReferences,
8
+ resolveReferenceAssets,
9
+ resolveToolsFromKeys
10
+ } from "./chunk-IRG4OKY6.js";
11
+ import {
12
+ UI_CARD_ENVELOPE_MAX_BYTES,
13
+ getAllToolRuns,
14
+ parseUiCard,
15
+ resolveAgentRecommendedSkillNames,
16
+ resolveAgentRequiredPackIds,
17
+ selectAiRecentContentLimit,
18
+ selectGlobalPrompt,
19
+ selectKnowledgeCaptureLevel,
20
+ selectSpaceContextLevel,
21
+ selectUserTonePreset,
22
+ uiCardFallback
23
+ } from "./chunk-DGDGNYI5.js";
24
+ import {
25
+ resolveToolBaseUrl
26
+ } from "./chunk-2ECUZDEL.js";
27
+ import {
28
+ getFinalPrice,
29
+ getModelPricing,
30
+ getPrices,
31
+ hasExplicitAgentPricing
32
+ } from "./chunk-PFEK4SA2.js";
33
+ import {
34
+ getDocState
35
+ } from "./chunk-X2VPXJZC.js";
36
+ import {
37
+ getTableState
38
+ } from "./chunk-P6KLYCL3.js";
39
+ import {
40
+ getCurrentSpaceIdRaw,
41
+ getViewMode
42
+ } from "./chunk-ZJ7UHBJS.js";
43
+ import {
44
+ PERSONALIZATION_DIALOG_CATEGORY,
45
+ buildPersonalizationDialogPolicyContext,
46
+ extractReferenceKeysFromMessage,
47
+ selectAllMsgs
48
+ } from "./chunk-ROXFUKKL.js";
49
+ import {
50
+ selectPendingFiles
51
+ } from "./chunk-VBG7GWWR.js";
52
+ import {
53
+ read,
54
+ selectById
55
+ } from "./chunk-RNNWTMKT.js";
56
+ import {
57
+ getSessionSnapshotForState,
58
+ selectIdentityUserBalance,
59
+ selectIdentityUserId
60
+ } from "./chunk-SEJ5OS6F.js";
61
+ import {
62
+ TOOL_PACKS,
63
+ addDefaultSystemCapabilityTools,
64
+ applyDefaultWebToolPacks,
65
+ applyDisabledTools,
66
+ applySystemBuiltinSkillFilter,
67
+ expandEnabledPackPromptPatches,
68
+ expandEnabledPacks,
69
+ resolveEffectiveEnabledPacks
70
+ } from "./chunk-3CZM6HGQ.js";
71
+ import {
72
+ projectToolMessageContent
73
+ } from "./chunk-JJM3WS6W.js";
74
+ import {
75
+ attachmentKind,
76
+ normalizeAttachmentPart
77
+ } from "./chunk-WJZOQR2J.js";
78
+ import {
79
+ getModelContextWindow,
80
+ planContextUsage
81
+ } from "./chunk-FWY6BHIJ.js";
82
+ import {
83
+ asRecordOrEmpty
84
+ } from "./chunk-KX6YBIHG.js";
85
+ import {
86
+ isAbortError
87
+ } from "./chunk-7DPNBQSV.js";
88
+ import {
89
+ canonicalizeToolNames,
90
+ prioritizeToolNames
91
+ } from "./chunk-IHPDK6UD.js";
92
+ import {
93
+ extractCustomId
94
+ } from "./chunk-M2EJHDJP.js";
95
+ import {
96
+ metaKey
97
+ } from "./chunk-RLRYVSCD.js";
98
+ import {
99
+ asNonEmptyStringArray
100
+ } from "./chunk-I42VC5KR.js";
101
+ import {
102
+ asOptionalFiniteNumber
103
+ } from "./chunk-WWC7I6TA.js";
104
+ import {
105
+ estimateTokenCount
106
+ } from "./chunk-PSCNXBYA.js";
107
+ import {
108
+ getModelConfig,
109
+ getProviderByModelName
110
+ } from "./chunk-CGEK73JN.js";
111
+ import {
112
+ isRecord
113
+ } from "./chunk-KUG52IAP.js";
114
+ import {
115
+ asTrimmedString
116
+ } from "./chunk-3EUW3WEO.js";
117
+ import {
118
+ asOptionalTrimmedString
119
+ } from "./chunk-G3SUCT4W.js";
120
+ import {
121
+ buildLinkedSpacesSection,
122
+ buildSpaceContextLayer
123
+ } from "./chunk-VEA7H5FG.js";
124
+
125
+ // packages/ai/agent/foregroundTurnAdmissionFetch.ts
126
+ var FOREGROUND_TURN_KEEPALIVE_MAX_BODY_BYTES = 60 * 1024;
127
+ function getUtf8ByteLength(value) {
128
+ return new TextEncoder().encode(value).byteLength;
129
+ }
130
+ function shouldKeepForegroundTurnAdmissionAlive(serializedBody) {
131
+ return serializedBody.length > 0 && getUtf8ByteLength(serializedBody) <= FOREGROUND_TURN_KEEPALIVE_MAX_BODY_BYTES;
132
+ }
133
+ function buildForegroundTurnAdmissionFetchInit(args) {
134
+ return {
135
+ method: "POST",
136
+ headers: args.headers,
137
+ body: args.body,
138
+ ...args.signal ? { signal: args.signal } : {},
139
+ ...shouldKeepForegroundTurnAdmissionAlive(args.body) ? { keepalive: true } : {}
140
+ };
141
+ }
142
+
143
+ // packages/ai/agent/foregroundExecutionClientState.ts
144
+ var stateByDialogId = /* @__PURE__ */ new Map();
145
+ var MAX_TRACKED_DIALOGS = 256;
146
+ function trimmed(value) {
147
+ return typeof value === "string" ? value.trim() : "";
148
+ }
149
+ function trimCache() {
150
+ while (stateByDialogId.size > MAX_TRACKED_DIALOGS) {
151
+ const oldest = stateByDialogId.keys().next().value;
152
+ if (!oldest) return;
153
+ stateByDialogId.delete(oldest);
154
+ }
155
+ }
156
+ function setForegroundExecutionClientState(args) {
157
+ const dialogId = trimmed(args.dialogId);
158
+ const executionId = trimmed(args.executionId);
159
+ if (!dialogId || !executionId) return;
160
+ stateByDialogId.delete(dialogId);
161
+ stateByDialogId.set(dialogId, { dialogId, executionId, status: "running" });
162
+ trimCache();
163
+ }
164
+ function clearForegroundExecutionClientState(dialogId, expectedExecutionId) {
165
+ const normalizedDialogId = trimmed(dialogId);
166
+ if (!normalizedDialogId) return;
167
+ if (expectedExecutionId) {
168
+ const current = stateByDialogId.get(normalizedDialogId);
169
+ if (current && current.executionId !== expectedExecutionId) return;
170
+ }
171
+ stateByDialogId.delete(normalizedDialogId);
172
+ }
173
+ function observeForegroundExecutionPayload(payload) {
174
+ if (!payload || typeof payload !== "object") return;
175
+ const event = payload;
176
+ const type = trimmed(event.type);
177
+ const dialogId = trimmed(event.dialogId);
178
+ const executionId = trimmed(event.executionId);
179
+ if ((type === "dialog" || type === "foreground_turn_status") && event.status === "running" && dialogId && executionId) {
180
+ setForegroundExecutionClientState({ dialogId, executionId });
181
+ return;
182
+ }
183
+ if (type === "foreground_turn_terminal" || type === "done" || type === "cancelled" || type === "error" || type === "failed") {
184
+ if (dialogId && executionId) {
185
+ clearForegroundExecutionClientState(dialogId, executionId);
186
+ }
187
+ }
188
+ }
189
+
190
+ // packages/ai/agent/streamTurnStreamConsumer.ts
191
+ async function readAgentRunStreamChunk(reader, signal, isAborted) {
192
+ if (isAborted() || signal?.aborted) {
193
+ void reader.cancel().catch(() => {
194
+ });
195
+ throw new DOMException("The operation was aborted.", "AbortError");
196
+ }
197
+ if (!signal) {
198
+ return reader.read();
199
+ }
200
+ let settled = false;
201
+ return new Promise((resolve, reject) => {
202
+ const finish = (cb) => {
203
+ if (settled) return;
204
+ settled = true;
205
+ signal.removeEventListener("abort", onAbort);
206
+ cb();
207
+ };
208
+ const onAbort = () => {
209
+ void reader.cancel().catch(() => {
210
+ });
211
+ finish(
212
+ () => reject(new DOMException("The operation was aborted.", "AbortError"))
213
+ );
214
+ };
215
+ signal.addEventListener("abort", onAbort);
216
+ reader.read().then(
217
+ (result) => finish(() => resolve(result)),
218
+ (err) => finish(() => reject(err))
219
+ );
220
+ });
221
+ }
222
+ async function consumeAgentRunStream(handlers) {
223
+ const {
224
+ reader,
225
+ decoder,
226
+ parseChunk,
227
+ onPayload,
228
+ isDoneEvent,
229
+ isAborted,
230
+ signal,
231
+ onAbort
232
+ } = handlers;
233
+ let sawDone = false;
234
+ let observedDialogId = "";
235
+ let observedExecutionId = "";
236
+ const clearObservedExecution = () => {
237
+ if (!observedDialogId || !observedExecutionId) return;
238
+ clearForegroundExecutionClientState(
239
+ observedDialogId,
240
+ observedExecutionId
241
+ );
242
+ };
243
+ try {
244
+ while (true) {
245
+ let done;
246
+ let value;
247
+ try {
248
+ ({ done, value } = await readAgentRunStreamChunk(
249
+ reader,
250
+ signal,
251
+ isAborted
252
+ ));
253
+ } catch (error) {
254
+ if (isAbortError(error) || isAborted() || signal?.aborted) {
255
+ clearObservedExecution();
256
+ await onAbort();
257
+ return { outcome: "aborted" };
258
+ }
259
+ throw error;
260
+ }
261
+ if (isAborted() || signal?.aborted) {
262
+ clearObservedExecution();
263
+ await onAbort();
264
+ return { outcome: "aborted" };
265
+ }
266
+ if (done) {
267
+ clearObservedExecution();
268
+ return { outcome: "streamEnded", sawDone };
269
+ }
270
+ const payloads = parseChunk(
271
+ decoder.decode(value, { stream: true })
272
+ );
273
+ for (const payload of payloads) {
274
+ if (isAborted() || signal?.aborted) {
275
+ clearObservedExecution();
276
+ await onAbort();
277
+ return { outcome: "aborted" };
278
+ }
279
+ if (payload && typeof payload === "object") {
280
+ if (payload.type === "dialog" && typeof payload.dialogId === "string") {
281
+ observedDialogId = payload.dialogId.trim();
282
+ observedExecutionId = typeof payload.executionId === "string" ? payload.executionId.trim() : "";
283
+ }
284
+ observeForegroundExecutionPayload(payload);
285
+ }
286
+ const directive = await onPayload(payload);
287
+ if (directive?.reject !== void 0) {
288
+ clearObservedExecution();
289
+ return { outcome: "rejected", message: directive.reject };
290
+ }
291
+ if (directive?.abort) {
292
+ clearObservedExecution();
293
+ await onAbort();
294
+ return { outcome: "aborted" };
295
+ }
296
+ if (isDoneEvent(payload)) {
297
+ sawDone = true;
298
+ }
299
+ }
300
+ }
301
+ } catch (error) {
302
+ clearObservedExecution();
303
+ if (isAbortError(error) || isAborted() || signal?.aborted) {
304
+ await onAbort();
305
+ return { outcome: "aborted" };
306
+ }
307
+ throw error;
308
+ }
309
+ }
310
+
311
+ // packages/ai/agent/projectDesktopToolUiContent.ts
312
+ var DESKTOP_TOOL_UI_CONTENT_MAX_CHARS = 48e3;
313
+ function clipUiText(value, max = DESKTOP_TOOL_UI_CONTENT_MAX_CHARS) {
314
+ if (value.length <= max) return value;
315
+ return `${value.slice(0, Math.max(0, max - 20))}
316
+ \u2026[truncated for UI]`;
317
+ }
318
+ function tryParseJsonRecord(text) {
319
+ const trimmed2 = text.trim();
320
+ if (!trimmed2.startsWith("{") && !trimmed2.startsWith("[")) return null;
321
+ try {
322
+ const parsed = JSON.parse(trimmed2);
323
+ return isRecord(parsed) ? parsed : null;
324
+ } catch {
325
+ return null;
326
+ }
327
+ }
328
+ function parseShellToolTextContent(content) {
329
+ const text = content ?? "";
330
+ if (!text.trim()) return { stdout: "", stderr: "" };
331
+ const exitMatch = text.match(/(?:^|\n)exitCode:\s*(-?\d+)\s*$/);
332
+ const exitCode = exitMatch ? Number(exitMatch[1]) : void 0;
333
+ const body = (exitMatch ? text.slice(0, exitMatch.index) : text).replace(
334
+ /\s+$/,
335
+ ""
336
+ );
337
+ let stdout = "";
338
+ let stderr = "";
339
+ if (body.startsWith("stdout:\n") || body.includes("\nstdout:\n")) {
340
+ const afterStdout = body.replace(/^[\s\S]*?stdout:\n/, "");
341
+ if (afterStdout.includes("\n\nstderr:\n")) {
342
+ const [out, err] = afterStdout.split("\n\nstderr:\n");
343
+ stdout = out ?? "";
344
+ stderr = err ?? "";
345
+ } else if (afterStdout.startsWith("stderr:\n")) {
346
+ stderr = afterStdout.slice("stderr:\n".length);
347
+ } else {
348
+ stdout = afterStdout;
349
+ }
350
+ } else if (body.startsWith("stderr:\n") || body.includes("\nstderr:\n")) {
351
+ stderr = body.replace(/^[\s\S]*?stderr:\n/, "");
352
+ } else {
353
+ stdout = body;
354
+ }
355
+ return {
356
+ stdout,
357
+ stderr,
358
+ ...typeof exitCode === "number" && Number.isFinite(exitCode) ? { exitCode } : {}
359
+ };
360
+ }
361
+ function resolveShellCommand(metadata, argumentsPreview) {
362
+ return asOptionalTrimmedString(metadata.command) || asOptionalTrimmedString(metadata.cmd) || asOptionalTrimmedString(argumentsPreview) || "";
363
+ }
364
+ function projectDesktopToolUiContent(args) {
365
+ const toolName = asOptionalTrimmedString(args.toolName) || "tool";
366
+ const metadata = isRecord(args.metadata) ? args.metadata : {};
367
+ const rawContent = typeof args.content === "string" ? args.content : typeof args.summary === "string" ? args.summary : typeof args.message === "string" ? args.message : "";
368
+ if (toolName === "show_interaction") {
369
+ try {
370
+ const parsedContent = JSON.parse(rawContent);
371
+ const envelope = isRecord(parsedContent) && isRecord(parsedContent.rawData) ? parsedContent.rawData : parsedContent;
372
+ const candidate = isRecord(envelope) && envelope.type === "show_interaction" ? envelope.card : envelope;
373
+ const parsed = parseUiCard(candidate);
374
+ if (!parsed.ok) return `show_interaction failed: invalid card (${parsed.error})`;
375
+ const card = parsed.value;
376
+ const cardOnly = JSON.stringify({ type: "show_interaction", card });
377
+ if (new TextEncoder().encode(cardOnly).byteLength > UI_CARD_ENVELOPE_MAX_BYTES) {
378
+ return "show_interaction failed: projected card too large";
379
+ }
380
+ const canonical = JSON.stringify({
381
+ type: "show_interaction",
382
+ card,
383
+ fallbackText: uiCardFallback(card)
384
+ });
385
+ return new TextEncoder().encode(canonical).byteLength <= UI_CARD_ENVELOPE_MAX_BYTES ? canonical : cardOnly;
386
+ } catch {
387
+ return "show_interaction failed: invalid JSON card";
388
+ }
389
+ }
390
+ if (toolName === "execShell") {
391
+ const existing = tryParseJsonRecord(rawContent);
392
+ if (existing && (typeof existing.stdout === "string" || typeof existing.command === "string" || typeof existing.stderr === "string")) {
393
+ const command2 = asOptionalTrimmedString(existing.command) || resolveShellCommand(metadata, args.argumentsPreview);
394
+ return JSON.stringify({
395
+ ...existing,
396
+ command: command2,
397
+ cwd: asOptionalTrimmedString(existing.cwd) || asOptionalTrimmedString(metadata.cwd) || null,
398
+ exitCode: asOptionalFiniteNumber(existing.exitCode) ?? asOptionalFiniteNumber(metadata.exitCode)
399
+ });
400
+ }
401
+ const parsed = parseShellToolTextContent(rawContent);
402
+ const command = resolveShellCommand(metadata, args.argumentsPreview);
403
+ return JSON.stringify({
404
+ command,
405
+ cwd: asOptionalTrimmedString(metadata.cwd) || null,
406
+ stdout: clipUiText(parsed.stdout),
407
+ stderr: clipUiText(parsed.stderr),
408
+ exitCode: asOptionalFiniteNumber(metadata.exitCode) ?? parsed.exitCode,
409
+ timedOut: metadata.timedOut === true,
410
+ blocked: metadata.blocked === true
411
+ });
412
+ }
413
+ if (toolName === "readFile" || toolName === "read_file") {
414
+ const filePath = asOptionalTrimmedString(metadata.path) || asOptionalTrimmedString(metadata.filePath) || asOptionalTrimmedString(metadata.file_path) || asOptionalTrimmedString(args.argumentsPreview) || "";
415
+ const body = typeof args.content === "string" && args.content || typeof args.summary === "string" && args.summary || typeof args.message === "string" && args.message || "";
416
+ return JSON.stringify({
417
+ filePath,
418
+ content: clipUiText(body),
419
+ ...asOptionalFiniteNumber(metadata.startLine) != null ? { startLine: asOptionalFiniteNumber(metadata.startLine) } : {},
420
+ ...asOptionalFiniteNumber(metadata.endLine) != null ? { endLine: asOptionalFiniteNumber(metadata.endLine) } : {},
421
+ ...asOptionalFiniteNumber(metadata.totalLines) != null ? { totalLines: asOptionalFiniteNumber(metadata.totalLines) } : {},
422
+ ...metadata.truncated === true ? { truncated: true } : {}
423
+ });
424
+ }
425
+ const preferred = typeof args.content === "string" && args.content || typeof args.summary === "string" && args.summary || typeof args.message === "string" && args.message || "";
426
+ return clipUiText(preferred);
427
+ }
428
+
429
+ // packages/ai/attachments/toolsForAttachments.ts
430
+ var LEGACY_MEDIA_JOB_PART_TYPE = "media_job";
431
+ var LEGACY_MEDIA_TEXT_PREFIX = "[\u5A92\u4F53\u9644\u4EF6]";
432
+ var LEGACY_MEDIA_TEXT_FIELDS = ["fileId", "jobId", "\u6587\u4EF6", "\u65F6\u957F"];
433
+ var LEGACY_MEDIA_TEXT_ID_FIELDS = ["fileId", "jobId"];
434
+ var LEGACY_MEDIA_TEXT_STRICT_PATTERN = /^\[媒体附件\](?:\s+(?:fileId|jobId|文件|时长)=\S+)+$/;
435
+ var parseLegacyMediaFields = (body) => {
436
+ const matcher = new RegExp(`(?:${LEGACY_MEDIA_TEXT_FIELDS.join("|")})=`, "g");
437
+ const starts = [];
438
+ for (let match = matcher.exec(body); match; match = matcher.exec(body)) {
439
+ starts.push({
440
+ key: match[0].slice(0, -1),
441
+ start: match.index,
442
+ end: match.index + match[0].length
443
+ });
444
+ }
445
+ if (starts.length === 0) return null;
446
+ if (body.slice(0, starts[0].start).trim() !== "") return null;
447
+ return starts.map((field, index) => ({
448
+ key: field.key,
449
+ value: body.slice(field.end, index + 1 < starts.length ? starts[index + 1].start : body.length)
450
+ }));
451
+ };
452
+ var hasLegacyMediaId = (fields) => fields.some(
453
+ (field) => LEGACY_MEDIA_TEXT_ID_FIELDS.includes(field.key) && /^\S+$/.test(field.value.trim())
454
+ );
455
+ var isLegacyMediaText = (text) => {
456
+ if (typeof text !== "string" || !text.startsWith(LEGACY_MEDIA_TEXT_PREFIX)) return false;
457
+ const rest = text.slice(LEGACY_MEDIA_TEXT_PREFIX.length);
458
+ if (rest !== "" && !/^\s/.test(rest)) return false;
459
+ const fields = parseLegacyMediaFields(rest);
460
+ if (!fields) return false;
461
+ if (fields.some((field) => field.value.trim() === "")) return false;
462
+ if (hasLegacyMediaId(fields)) return true;
463
+ return LEGACY_MEDIA_TEXT_STRICT_PATTERN.test(text);
464
+ };
465
+ var isLegacyMediaJobText = (part) => {
466
+ if (typeof part !== "object" || part === null) return false;
467
+ const record = part;
468
+ if (record.type !== "text" || typeof record.text !== "string") return false;
469
+ return isLegacyMediaText(record.text.trim());
470
+ };
471
+ var MEDIA_ATOMIC_TOOLS = [
472
+ "transcribe",
473
+ "translate",
474
+ "writeTranslations",
475
+ "exportDocument",
476
+ "readArtifact"
477
+ ];
478
+ var TOOLS_BY_KIND = {
479
+ audio: MEDIA_ATOMIC_TOOLS,
480
+ video: MEDIA_ATOMIC_TOOLS,
481
+ image: [],
482
+ document: [],
483
+ text: [],
484
+ archive: [],
485
+ // P2:archive 目录清单 + 只读条目工具
486
+ binary: []
487
+ };
488
+ var toolsForAttachmentKinds = (kinds) => {
489
+ const names = /* @__PURE__ */ new Set();
490
+ for (const kind of kinds ?? []) {
491
+ for (const name of TOOLS_BY_KIND[kind] ?? []) {
492
+ names.add(name);
493
+ }
494
+ }
495
+ return Array.from(names);
496
+ };
497
+ var attachmentKindOfPart = (part) => {
498
+ if (typeof part !== "object" || part === null) return null;
499
+ const record = part;
500
+ if (record.type === LEGACY_MEDIA_JOB_PART_TYPE) return "audio";
501
+ if (isLegacyMediaJobText(record)) return "audio";
502
+ const normalized = normalizeAttachmentPart(record);
503
+ return normalized.status === "valid" ? attachmentKind(normalized.attachment) : null;
504
+ };
505
+ var MAX_PART_DEPTH = 4;
506
+ var collectParts = (input, out, depth) => {
507
+ if (depth > MAX_PART_DEPTH) return;
508
+ if (Array.isArray(input)) {
509
+ for (const item of input) collectParts(item, out, depth + 1);
510
+ return;
511
+ }
512
+ if (typeof input !== "object" || input === null) return;
513
+ const record = input;
514
+ out.push(record);
515
+ if (Array.isArray(record.children)) collectParts(record.children, out, depth + 1);
516
+ };
517
+ var attachmentKindsInContent = (content) => {
518
+ const parts = [];
519
+ collectParts(content, parts, 0);
520
+ const kinds = /* @__PURE__ */ new Set();
521
+ for (const part of parts) {
522
+ const kind = attachmentKindOfPart(part);
523
+ if (kind) kinds.add(kind);
524
+ }
525
+ return Array.from(kinds);
526
+ };
527
+
528
+ // packages/ai/agent/getFullChatContextKeys.ts
529
+ var difference = (arrA, arrB) => {
530
+ if (!arrA.length) return [];
531
+ if (!arrB.length) return [...arrA];
532
+ const exclude = new Set(arrB);
533
+ return arrA.filter((item) => !exclude.has(item));
534
+ };
535
+ var getFullChatContextKeys = async (state, dispatch, agentConfig, userInput, dialogConfig) => {
536
+ const msgs = selectAllMsgs(
537
+ state,
538
+ dialogConfig?.dbKey ? extractCustomId(dialogConfig.dbKey) : dialogConfig?.id
539
+ );
540
+ const botInstructionKeys = /* @__PURE__ */ new Set();
541
+ const botKnowledgeKeys = /* @__PURE__ */ new Set();
542
+ if (Array.isArray(agentConfig.references)) {
543
+ for (const ref of agentConfig.references) {
544
+ if (!ref?.dbKey) continue;
545
+ if (ref.type === "instruction") {
546
+ botInstructionKeys.add(ref.dbKey);
547
+ } else {
548
+ botKnowledgeKeys.add(ref.dbKey);
549
+ }
550
+ }
551
+ }
552
+ const currentInputKeys = /* @__PURE__ */ new Set();
553
+ if (Array.isArray(userInput)) {
554
+ for (const part of userInput) {
555
+ if (part?.pageKey) currentInputKeys.add(part.pageKey);
556
+ if (part?.dialogKey) currentInputKeys.add(part.dialogKey);
557
+ }
558
+ }
559
+ const historyKeys = /* @__PURE__ */ new Set();
560
+ const savedKeys = dialogConfig?.referenceKeys;
561
+ if (Array.isArray(savedKeys)) {
562
+ savedKeys.forEach((k) => historyKeys.add(k));
563
+ }
564
+ const scanContentParts = (msg) => {
565
+ if (!msg) return;
566
+ for (const key of extractReferenceKeysFromMessage(msg)) {
567
+ historyKeys.add(key);
568
+ }
569
+ };
570
+ if (msgs && msgs.length > 0) {
571
+ const summarizedBeforeId = dialogConfig?.summarizedBeforeId;
572
+ if (!summarizedBeforeId) {
573
+ for (const msg of msgs) scanContentParts(msg);
574
+ } else {
575
+ let foundMarker = false;
576
+ let startScan = false;
577
+ for (const msg of msgs) {
578
+ if (!startScan) {
579
+ if (msg.id === summarizedBeforeId) {
580
+ foundMarker = true;
581
+ startScan = true;
582
+ }
583
+ continue;
584
+ }
585
+ scanContentParts(msg);
586
+ }
587
+ if (!foundMarker) {
588
+ console.warn(`[getFullChatContextKeys] marker ${summarizedBeforeId} not found, scanning all`);
589
+ for (const msg of msgs) scanContentParts(msg);
590
+ }
591
+ }
592
+ }
593
+ const attachmentKinds = /* @__PURE__ */ new Set();
594
+ for (const kind of attachmentKindsInContent(userInput)) attachmentKinds.add(kind);
595
+ for (const msg of msgs ?? []) {
596
+ for (const kind of attachmentKindsInContent(msg?.content)) attachmentKinds.add(kind);
597
+ }
598
+ const summaryMarkerId = dialogConfig?.summarizedBeforeId;
599
+ const attachmentKindsIncomplete = Boolean(summaryMarkerId) && !(msgs ?? []).some((msg) => msg?.id === summaryMarkerId);
600
+ return {
601
+ botInstructionKeys,
602
+ currentInputKeys,
603
+ historyKeys,
604
+ botKnowledgeKeys,
605
+ attachmentKinds,
606
+ attachmentKindsIncomplete
607
+ };
608
+ };
609
+ var deduplicateContextKeys = (keys) => {
610
+ const {
611
+ botInstructionKeys,
612
+ currentInputKeys,
613
+ historyKeys,
614
+ botKnowledgeKeys
615
+ } = keys;
616
+ const finalBotInstructionKeys = Array.from(botInstructionKeys);
617
+ const finalCurrentInputKeys = difference(
618
+ Array.from(currentInputKeys),
619
+ finalBotInstructionKeys
620
+ );
621
+ const finalHistoryKeys = difference(Array.from(historyKeys), [
622
+ ...finalBotInstructionKeys,
623
+ ...finalCurrentInputKeys
624
+ ]);
625
+ const finalBotKnowledgeKeys = difference(Array.from(botKnowledgeKeys), [
626
+ ...finalBotInstructionKeys,
627
+ ...finalCurrentInputKeys,
628
+ ...finalHistoryKeys
629
+ ]);
630
+ return {
631
+ botInstructionsContext: finalBotInstructionKeys,
632
+ currentInputContext: finalCurrentInputKeys,
633
+ historyContext: finalHistoryKeys,
634
+ botKnowledgeContext: finalBotKnowledgeKeys
635
+ };
636
+ };
637
+
638
+ // packages/ai/agent/canvasEditingContext.ts
639
+ function buildCanvasNodeEditingContextSummary(runtimeOptions) {
640
+ if (runtimeOptions?.editingTarget?.kind !== "canvas_node") return null;
641
+ const editingTarget = runtimeOptions.editingTarget;
642
+ const metadata = editingTarget.metadata ?? {};
643
+ const selectedNodeId = typeof metadata.selectedNodeId === "string" ? metadata.selectedNodeId : editingTarget.key ?? "(\u672A\u77E5\u8282\u70B9)";
644
+ const part = typeof metadata.part === "string" ? metadata.part : editingTarget.title ?? selectedNodeId;
645
+ const nodeType = typeof metadata.type === "string" ? metadata.type : "(\u672A\u77E5\u7C7B\u578B)";
646
+ const path = Array.isArray(metadata.path) ? metadata.path.filter((item) => typeof item === "string") : [];
647
+ const props = asRecordOrEmpty(metadata.props);
648
+ const style = asRecordOrEmpty(metadata.style);
649
+ return [
650
+ "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1ACanvas Tree \u4E2D\u7684\u4E00\u4E2A\u9009\u4E2D\u8282\u70B9\u3002",
651
+ `- \u8282\u70B9 ID: ${selectedNodeId}`,
652
+ `- part: ${part}`,
653
+ `- \u8282\u70B9\u7C7B\u578B: ${nodeType}`,
654
+ ...path.length ? [`- \u8282\u70B9\u8DEF\u5F84: ${path.join(" > ")}`] : [],
655
+ "",
656
+ "\u5F53\u524D\u8282\u70B9 props:",
657
+ JSON.stringify(props, null, 2),
658
+ "",
659
+ "\u5F53\u524D\u8282\u70B9 style:",
660
+ JSON.stringify(style, null, 2),
661
+ "",
662
+ "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
663
+ `1. \u5982\u679C\u7528\u6237\u8981\u6C42\u4FEE\u6539\u5F53\u524D\u6A21\u5757\uFF0C\u53EA\u8F93\u51FA updateNode\uFF0C\u76EE\u6807 id \u5FC5\u987B\u662F ${selectedNodeId}\u3002`,
664
+ "2. \u4E0D\u8981\u91CD\u5EFA root/shell\uFF0C\u4E0D\u8981\u91CD\u65B0 append \u5DF2\u5B58\u5728\u7684\u5927\u5757\u5185\u5BB9\u3002",
665
+ "3. \u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u65B0\u589E\u5B50\u6A21\u5757\uFF0C\u5426\u5219\u4E0D\u8981 appendNode\u3002",
666
+ "4. \u56DE\u590D\u4ECD\u5FC5\u987B\u9075\u5B88 Canvas Tree MVP \u534F\u8BAE\uFF1A\u53EA\u8F93\u51FA canvas_snapshot NDJSON\uFF0C\u4E0D\u8981\u8F93\u51FA\u89E3\u91CA\u6216\u6E90\u7801\u3002"
667
+ ].join("\n");
668
+ }
669
+
670
+ // packages/ai/agent/buildEditingContext.ts
671
+ var buildAppConstraintPacks = (args) => {
672
+ const imports = new Set(args.externalImports);
673
+ const fileSet = new Set(args.fileNames);
674
+ const packs = [
675
+ {
676
+ id: "repair-loop",
677
+ title: "\u9884\u68C0\u4E0E\u5B9A\u70B9\u4FEE\u590D",
678
+ rules: [
679
+ "\u6BCF\u6B21\u6539\u5B8C\u4EE3\u7801\u540E\uFF0C\u5148\u8C03\u7528 appPreflight\uFF0C\u53EA\u6709\u9884\u68C0\u901A\u8FC7\u540E\u518D\u8C03\u7528 appDeploy\u3002",
680
+ "\u5982\u679C preflight / deploy \u5931\u8D25\uFF0C\u4F18\u5148\u6839\u636E\u8FD4\u56DE\u7684 issues \u505A\u5B9A\u70B9\u4FEE\u590D\uFF0C\u7136\u540E\u91CD\u65B0 preflight\uFF1B\u4E0D\u8981\u65E0\u5173\u91CD\u5199\u6574\u9875\u5E94\u7528\u3002",
681
+ "\u5982\u679C\u5DE5\u5177\u7ED3\u679C\u91CC\u5E26\u6709 repairPlan\uFF0C\u9ED8\u8BA4\u7ACB\u5373\u6267\u884C repairPlan \u4E2D\u7684\u5C40\u90E8\u4FEE\u590D\u6B65\u9AA4\uFF0C\u4E0D\u8981\u5148\u505C\u4E0B\u6765\u95EE\u7528\u6237\u3002",
682
+ "\u5982\u679C\u5DE5\u5177\u7ED3\u679C\u660E\u786E\u8BF4\u660E\u662F HTML / \u975E JSON \u54CD\u5E94\u3001transport failure \u6216 retryable=false\uFF0C\u505C\u6B62\u81EA\u52A8 deploy \u91CD\u8BD5\uFF1B\u8FD9\u8BF4\u660E\u5F53\u524D\u662F\u5E73\u53F0\u901A\u9053\u5F02\u5E38\uFF0C\u4E0D\u662F\u4EE3\u7801\u95EE\u9898\u3002"
683
+ ]
684
+ },
685
+ {
686
+ id: "design-system",
687
+ title: "\u8BBE\u8BA1\u7CFB\u7EDF\u4E0E\u5C0F\u6539\u52A8\u7EA6\u675F",
688
+ rules: [
689
+ "\u5148\u68C0\u67E5\u5F53\u524D\u5E94\u7528\u662F\u5426\u5DF2\u7ECF\u6709 theme / tokens / designSystem / \u5171\u4EAB\u6837\u5F0F\u5E38\u91CF\uFF1B\u5982\u679C\u5DF2\u6709\uFF0C\u4F18\u5148\u6CBF\u7528\u8FD9\u5957\u8BBE\u8BA1\u7CFB\u7EDF\uFF0C\u4E0D\u8981\u5E73\u884C\u518D\u9020\u4E00\u5957\u3002",
690
+ "\u5982\u679C\u5F53\u524D\u5E94\u7528\u8FD8\u6CA1\u6709\u8BBE\u8BA1\u7CFB\u7EDF\uFF0C\u800C\u7528\u6237\u9700\u6C42\u6D89\u53CA UI / \u6837\u5F0F / \u65B0\u9875\u9762\uFF0C\u4F18\u5148\u8865\u4E00\u5C42\u6700\u5C0F\u5171\u4EAB token\uFF08colors\u3001typography\u3001spacing\u3001radius\u3001shadow\uFF09\uFF0C\u518D\u8BA9\u7EC4\u4EF6\u6D88\u8D39\u8FD9\u4E9B token\u3002",
691
+ "\u5982\u679C\u5F53\u524D\u5E94\u7528\u662F\u65E7\u5199\u6CD5\uFF1A\u89C6\u89C9\u503C\u6563\u843D\u5728\u591A\u4E2A\u7EC4\u4EF6\u7684\u786C\u7F16\u7801 style / \u5E38\u91CF\u91CC\uFF0C\u800C\u672C\u6B21\u9700\u6C42\u53EA\u662F\u8C03\u5B57\u4F53\u3001\u989C\u8272\u3001\u95F4\u8DDD\u3001\u5706\u89D2\u3001\u9634\u5F71\uFF0C\u9ED8\u8BA4\u6267\u884C\u4E00\u6B21\u6700\u5C0F token \u8FC1\u79FB\uFF0C\u518D\u5728 token \u5C42\u5B8C\u6210\u8C03\u6574\uFF1B\u4E0D\u8981\u7EE7\u7EED\u628A\u65B0\u6570\u5B57\u6563\u843D\u5199\u56DE\u591A\u4E2A\u4F4D\u7F6E\u3002",
692
+ "\u5F53\u7528\u6237\u53EA\u662F\u60F3\u8C03\u5B57\u4F53\u5927\u5C0F\u3001\u5B57\u91CD\u3001\u989C\u8272\u3001\u5706\u89D2\u3001\u9634\u5F71\u3001\u95F4\u8DDD\u7B49\u89C6\u89C9\u53C2\u6570\u65F6\uFF0C\u4F18\u5148\u4FEE\u6539 token \u6216\u547D\u4E2D\u7684\u5C40\u90E8\u7EC4\u4EF6\uFF0C\u4E0D\u8981\u987A\u624B\u91CD\u5199\u6574\u4E2A\u9875\u9762\u7ED3\u6784\u3002",
693
+ "\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u6574\u4F53\u6539\u7248\u6216\u91CD\u505A\u98CE\u683C\uFF0C\u5426\u5219\u4E0D\u8981\u8FDE\u5E26\u4FEE\u6539\u5E03\u5C40\u3001\u7EC4\u4EF6\u6811\u3001\u6587\u6848\u3001\u6570\u636E\u6D41\u3001\u8DEF\u7531\u6216\u672A\u547D\u4E2D\u7684\u9875\u9762\u3002",
694
+ "\u5982\u679C\u53EA\u662F\u5C0F\u6539\u4E00\u5904\uFF0C\u5C3D\u91CF\u628A\u53D8\u66F4\u6536\u655B\u5728\u5C11\u6570\u6587\u4EF6\uFF0C\u5E76\u4FDD\u6301\u672A\u547D\u4E2D\u6587\u4EF6\u7684\u7ED3\u6784\u4E0E\u547D\u540D\u7A33\u5B9A\u3002"
695
+ ]
696
+ }
697
+ ];
698
+ if (args.framework === "react-spa" || fileSet.has("main.tsx") || fileSet.has("App.tsx")) {
699
+ packs.push({
700
+ id: "react-spa-core",
701
+ title: "React SPA \u5F62\u6001\u4FDD\u6301",
702
+ rules: [
703
+ '\u7EE7\u7EED\u6CBF\u7528 framework: "react-spa" + files\uFF0C\u4E0D\u8981\u9000\u56DE\u5355\u6587\u4EF6 Worker\u3002',
704
+ "\u4FDD\u7559\u7A33\u5B9A\u5165\u53E3\u7ED3\u6784\uFF0C\u4F18\u5148\u7EF4\u62A4 main.tsx + App.tsx\uFF0C\u518D\u5C40\u90E8\u4FEE\u6539\u7EC4\u4EF6\u6587\u4EF6\u3002"
705
+ ]
706
+ });
707
+ }
708
+ if (imports.has("react-icons/lu")) {
709
+ packs.push({
710
+ id: "react-icons-lu",
711
+ title: "Lucide \u56FE\u6807\u5B89\u5168\u89C4\u5219",
712
+ rules: [
713
+ "\u53EA\u80FD\u4F7F\u7528 react-icons/lu \u4E2D\u771F\u5B9E\u5B58\u5728\u7684\u56FE\u6807\u540D\uFF0C\u4E0D\u8981\u731C\u6D4B\u53D8\u4F53\u540D\u3002",
714
+ "\u5982\u679C\u4E0D\u786E\u5B9A\u56FE\u6807\u540D\uFF0C\u4F18\u5148\u4F7F\u7528 LuCircle\u3001LuCheck\u3001LuX\u3001LuInfo\u3001LuArrowRight \u8FD9\u7C7B\u57FA\u7840\u56FE\u6807\u3002"
715
+ ]
716
+ });
717
+ }
718
+ if (imports.has("leaflet") || imports.has("react-leaflet")) {
719
+ packs.push({
720
+ id: "leaflet",
721
+ title: "Leaflet \u5730\u56FE\u7EA6\u675F",
722
+ rules: [
723
+ "\u4E0D\u8981\u624B\u52A8 import leaflet.css\uFF1B\u5E73\u53F0\u4F1A\u81EA\u52A8\u6CE8\u5165 Leaflet \u6837\u5F0F\u3002",
724
+ "\u4FEE\u6539\u5730\u56FE\u65F6\u4F18\u5148\u4FDD\u7559\u73B0\u6709\u5750\u6807\u3001\u7F29\u653E\u548C\u56FE\u5C42\u7ED3\u6784\uFF0C\u53EA\u505A\u5FC5\u8981\u7684\u4EA4\u4E92\u6216\u89C6\u89C9\u8C03\u6574\u3002"
725
+ ]
726
+ });
727
+ }
728
+ if (imports.has("@xyflow/react")) {
729
+ packs.push({
730
+ id: "xyflow",
731
+ title: "Flow \u56FE\u7F16\u8F91\u7EA6\u675F",
732
+ rules: [
733
+ "\u4E0D\u8981\u65B0\u589E\u5916\u90E8 CSS import\uFF1B\u9700\u8981\u6837\u5F0F\u65F6\u76F4\u63A5\u8865\u6700\u5C0F\u5FC5\u8981\u5185\u8054\u6837\u5F0F\u6216\u7EC4\u4EF6\u5185 style \u6807\u7B7E\u3002",
734
+ "\u4F18\u5148\u590D\u7528\u73B0\u6709\u8282\u70B9/\u8FB9\u6570\u636E\u7ED3\u6784\uFF0C\u907F\u514D\u91CD\u5199\u6574\u5957 flow \u753B\u5E03\u3002"
735
+ ]
736
+ });
737
+ }
738
+ if (imports.has("echarts") || imports.has("echarts-for-react")) {
739
+ packs.push({
740
+ id: "echarts",
741
+ title: "\u56FE\u8868\u6539\u52A8\u7EA6\u675F",
742
+ rules: [
743
+ "\u4F18\u5148\u5C40\u90E8\u4FEE\u6539 option \u914D\u7F6E\u3001\u6570\u636E\u6620\u5C04\u548C\u7EC4\u4EF6 props\uFF0C\u4E0D\u8981\u91CD\u5199\u6574\u4E2A\u56FE\u8868\u9875\u9762\u3002",
744
+ "\u54CD\u5E94\u5F0F\u5E03\u5C40\u4F18\u5148\u9760\u5BB9\u5668\u5C3A\u5BF8\u548C\u73B0\u6709\u7EC4\u4EF6\u7ED3\u6784\u8C03\u6574\uFF0C\u4E0D\u8981\u989D\u5916\u5F15\u5165 CSS \u6587\u4EF6\u3002"
745
+ ]
746
+ });
747
+ }
748
+ if (imports.has("docx") || imports.has("xlsx")) {
749
+ packs.push({
750
+ id: "file-processing",
751
+ title: "\u6587\u6863/\u8868\u683C\u5904\u7406\u7EA6\u675F",
752
+ rules: [
753
+ "\u4E0D\u8981\u628A\u5927\u578B\u6570\u636E\u6216\u6A21\u677F\u5185\u5BB9\u76F4\u63A5\u5185\u5D4C\u8FDB\u4EE3\u7801\u5E38\u91CF\uFF1B\u4F18\u5148\u4FDD\u7559\u8FD0\u884C\u65F6\u52A0\u8F7D\u65B9\u5F0F\u3002",
754
+ "\u4FEE\u6539\u5BFC\u5165\u5BFC\u51FA\u903B\u8F91\u65F6\uFF0C\u4F18\u5148\u6CBF\u7528\u73B0\u6709\u6587\u4EF6\u5904\u7406\u94FE\u8DEF\u548C\u6570\u636E\u7ED3\u6784\u3002"
755
+ ]
756
+ });
757
+ }
758
+ return packs;
759
+ };
760
+ var formatAppConstraintPacks = (packs) => {
761
+ if (packs.length === 0) return [];
762
+ return [
763
+ "",
764
+ "\u5F53\u524D\u6FC0\u6D3B\u7EA6\u675F\u5305\uFF08\u6309\u5F53\u524D\u5E94\u7528\u4F9D\u8D56/\u5F62\u6001\u52A8\u6001\u6CE8\u5165\uFF09\uFF1A",
765
+ ...packs.flatMap((pack) => [
766
+ `- ${pack.title}\uFF08${pack.id}\uFF09`,
767
+ ...pack.rules.map((rule) => ` - ${rule}`)
768
+ ])
769
+ ];
770
+ };
771
+ function resolveEditingTargetTableIdentity(editingTarget) {
772
+ if (!editingTarget || editingTarget.kind !== "table") return null;
773
+ const metadata = editingTarget.metadata;
774
+ const tenantId = typeof editingTarget.tenantId === "string" && editingTarget.tenantId || typeof metadata?.tenantId === "string" && metadata.tenantId || void 0;
775
+ const tableId = typeof editingTarget.tableId === "string" && editingTarget.tableId || typeof metadata?.tableId === "string" && metadata.tableId || void 0;
776
+ if (!tenantId || !tableId) return null;
777
+ return { tenantId, tableId };
778
+ }
779
+ var buildEditingContextSummary = (state, runtimeOptions) => {
780
+ const targetKind = runtimeOptions?.editingTarget?.kind;
781
+ if (targetKind === "table") {
782
+ const editingTarget = runtimeOptions?.editingTarget;
783
+ const targetIdentity = resolveEditingTargetTableIdentity(editingTarget);
784
+ if (!targetIdentity) return null;
785
+ const { tenantId, tableId } = targetIdentity;
786
+ const targetDbKey = metaKey(tenantId, tableId);
787
+ const dbEntities = state?.db?.entities;
788
+ const metaFromDb = dbEntities?.[targetDbKey];
789
+ const stateTable = state?.table;
790
+ const metaFromStateTable = stateTable?.currentTable?.tableId === tableId || stateTable?.currentTable?.dbKey === targetDbKey ? stateTable.currentTable : null;
791
+ const uiTableState = getTableState();
792
+ const metaFromUiCache = uiTableState.currentTable?.tenantId === tenantId && uiTableState.currentTable?.tableId === tableId ? uiTableState.currentTable : null;
793
+ const table = metaFromDb ?? metaFromStateTable ?? metaFromUiCache ?? {
794
+ tenantId,
795
+ tableId,
796
+ displayName: editingTarget?.title ?? tableId,
797
+ description: editingTarget?.summary ?? "",
798
+ columns: Array.isArray(editingTarget?.metadata?.columns) ? editingTarget?.metadata?.columns : Array.isArray(editingTarget?.metadata?.columnNames) ? (editingTarget?.metadata?.columnNames).map((name) => ({ name, label: name })) : []
799
+ };
800
+ let rows = [];
801
+ if (metaFromUiCache && Array.isArray(uiTableState.rows)) {
802
+ rows = uiTableState.rows;
803
+ } else if (metaFromStateTable && Array.isArray(stateTable?.rows)) {
804
+ rows = stateTable.rows;
805
+ } else if (dbEntities) {
806
+ rows = Object.values(dbEntities).filter(
807
+ (entity) => entity?.type === "table_row" /* TABLE_ROW */ && entity?.tenantId === tenantId && entity?.tableId === tableId && !entity?.deletedAt
808
+ );
809
+ }
810
+ const metadata = editingTarget?.metadata;
811
+ const focusContext = metadata && typeof metadata === "object" ? metadata.focusContext : null;
812
+ if (!table) return null;
813
+ const columns = Array.isArray(table.columns) ? table.columns : [];
814
+ const columnSummaries = columns.length ? columns.map((c) => {
815
+ const displayName = c.label || c.name;
816
+ const type = c.type || "text";
817
+ const requiredFlag = c.required ? "\u5FC5\u586B" : "\u53EF\u9009";
818
+ const primaryFlag = c.isPrimary ? "\uFF0C\u4E3B\u5B57\u6BB5" : "";
819
+ const optionsStr = Array.isArray(c.options) && c.options.length ? `\uFF0C\u53EF\u9009\u503C\uFF1A${c.options.join(" | ")}` : "";
820
+ const descStr = c.description ? `\u3002\u8BF4\u660E\uFF1A${c.description}` : "";
821
+ return `- ${c.name}\uFF08\u663E\u793A\u540D\uFF1A${displayName}\uFF0C\u7C7B\u578B\uFF1A${type}\uFF0C${requiredFlag}${primaryFlag}${optionsStr}${descStr}\uFF09`;
822
+ }) : ["- (\u5F53\u524D\u8868\u5C1A\u672A\u5B9A\u4E49\u5B57\u6BB5)"];
823
+ const sampleRows = Array.isArray(rows) ? rows.slice(0, 20) : [];
824
+ const rowsPreview = sampleRows.length ? JSON.stringify(sampleRows, null, 2) : "(\u5F53\u524D\u8868\u6682\u65E0\u884C\u6570\u636E)";
825
+ const tableTitle = table.displayName ?? table.tableId ?? "(\u672A\u547D\u540D\u8868)";
826
+ const tableDesc = table.description ? `\u7528\u9014\u8BF4\u660E\uFF1A${table.description}` : "(\u6682\u65E0\u7528\u9014\u8BF4\u660E)";
827
+ const tableTagsLine = Array.isArray(table.tags) && table.tags.length ? `- \u5173\u952E\u8BCD\u6807\u7B7E: ${table.tags.join(", ")}` : null;
828
+ return [
829
+ "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u5F20\u6570\u636E\u8868\uFF08Editing Table\uFF09\u3002",
830
+ `- \u8868 ID: ${table.tableId}`,
831
+ `- \u663E\u793A\u540D\u79F0: ${tableTitle}`,
832
+ `- ${tableDesc}`,
833
+ ...tableTagsLine ? [tableTagsLine] : [],
834
+ ...focusContext && typeof focusContext === "object" && "columnName" in focusContext ? [
835
+ "",
836
+ "\u5F53\u524D\u7126\u70B9\uFF08Focus Context\uFF09\uFF1A",
837
+ `- \u5F53\u524D\u5355\u5143\u683C\u5217: ${String(focusContext.columnName ?? "(\u672A\u77E5\u5217)")}`,
838
+ ...focusContext.rowTitle ? [`- \u5F53\u524D\u884C\u6807\u9898: ${String(focusContext.rowTitle)}`] : [],
839
+ ...focusContext.rowIndex !== null && focusContext.rowIndex !== void 0 ? [`- \u5F53\u524D\u884C\u53F7: ${Number(focusContext.rowIndex) + 1}`] : [],
840
+ ...focusContext.cellPreview ? [`- \u5F53\u524D\u5355\u5143\u683C\u5185\u5BB9\u9884\u89C8: ${String(focusContext.cellPreview)}`] : []
841
+ ] : [],
842
+ "",
843
+ "\u5B57\u6BB5\u5B9A\u4E49\uFF08Field Schema\uFF09\uFF1A",
844
+ ...columnSummaries,
845
+ "",
846
+ "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
847
+ "\u5F53\u7528\u6237\u5E0C\u671B\u5728\u5F53\u524D\u8868\u4E2D\u201C\u65B0\u589E\u4E00\u884C / \u65B0\u589E\u8BB0\u5F55 / \u63D2\u5165\u4E00\u6761 / \u5E2E\u6211\u8BB0\u4E00\u6761 xxx\u201D\u65F6\uFF1A",
848
+ "1. \u5FC5\u987B\u8C03\u7528\u5DE5\u5177 addTableRow\uFF08\u800C\u4E0D\u662F\u53EA\u5728\u56DE\u7B54\u4E2D\u53E3\u5934\u63CF\u8FF0\u8981\u65B0\u589E\u7684\u6570\u636E\uFF09\u3002",
849
+ "2. \u8C03\u7528 addTableRow \u65F6\uFF1A",
850
+ " - \u4F7F\u7528\u53C2\u6570 values\uFF08\u4E00\u4E2A\u5BF9\u8C61\uFF09\uFF0C\u5176\u4E2D\u6BCF\u4E2A key \u5FC5\u987B\u662F\u4E0A\u9762\u5B57\u6BB5\u540D\u4E4B\u4E00\uFF08name\uFF0C\u800C\u4E0D\u662F label\uFF09\u3002",
851
+ ' - \u4F8B\u5982\uFF1A{"values":{"title":"\u4FEE Bug #123","status":"todo","note":"\u9AD8\u4F18\u5148\u7EA7"}}\u3002',
852
+ " - \u5C3D\u91CF\u4ECE\u7528\u6237\u7684\u81EA\u7136\u8BED\u8A00\u4E2D\u63A8\u65AD\u5E76\u586B\u6EE1\u6240\u6709\u76F8\u5173\u5B57\u6BB5\uFF1B\u5BF9\u4E8E\u5FC5\u586B\u5B57\u6BB5\uFF08required=true\uFF09\u5C24\u5176\u8981\u6CE8\u610F\u3002",
853
+ ' - \u7528\u6237\u6CA1\u6709\u63D0\u5230\u7684\u5B57\u6BB5\uFF0C\u53EF\u4EE5\u4F7F\u7528\u7A7A\u5B57\u7B26\u4E32 "" \u6216 null \u4F5C\u4E3A\u5360\u4F4D\u3002',
854
+ " - \u7EDD\u4E0D\u8981\u4F20\u5165\u7A7A\u5BF9\u8C61 {} \u4F5C\u4E3A values\u3002",
855
+ "",
856
+ "\u4EE5\u4E0B\u662F\u90E8\u5206\u793A\u4F8B\u884C\uFF08\u6700\u591A 20 \u884C\uFF0C\u7528\u4E8E\u5E2E\u52A9\u4F60\u7406\u89E3\u5217\u542B\u4E49\uFF0C\u8BF7\u907F\u514D\u5728\u56DE\u7B54\u4E2D\u5B8C\u6574\u7C98\u8D34\u6574\u8868\uFF09\uFF1A",
857
+ rowsPreview
858
+ ].join("\n");
859
+ }
860
+ if (targetKind === "page" || targetKind === "article") {
861
+ const page = getDocState();
862
+ const metadata = runtimeOptions?.editingTarget?.metadata;
863
+ const focusContext = metadata && typeof metadata === "object" ? metadata.focusContext : null;
864
+ if (!page) return null;
865
+ const title = page.title ?? "(\u672A\u547D\u540D\u9875\u9762)";
866
+ return [
867
+ "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u4E2A\u9875\u9762 / \u6587\u7AE0\uFF08Editing Document\uFF09\u3002",
868
+ `- \u6807\u9898: ${title}`,
869
+ ...focusContext && typeof focusContext === "object" && "anchorPath" in focusContext ? [
870
+ "",
871
+ "\u5F53\u524D\u7126\u70B9\uFF08Focus Context\uFF09\uFF1A",
872
+ `- \u5149\u6807\u662F\u5426\u6298\u53E0: ${Boolean(focusContext.isCollapsed) ? "\u662F" : "\u5426"}`,
873
+ ...focusContext.blockType ? [`- \u5F53\u524D\u5757\u7C7B\u578B: ${String(focusContext.blockType)}`] : [],
874
+ ...focusContext.selectedText ? [`- \u5F53\u524D\u9009\u4E2D\u6587\u672C: ${String(focusContext.selectedText)}`] : [],
875
+ ...focusContext.anchorPath?.length ? [`- \u5F53\u524D\u951A\u70B9\u8DEF\u5F84: ${focusContext.anchorPath.join(" > ")}`] : []
876
+ ] : [],
877
+ "",
878
+ "\u5982\u679C\u7528\u6237\u8981\u6C42\u4F60\u5BF9\u8FD9\u7BC7\u6587\u7AE0\u8FDB\u884C\u4FEE\u6539\u6216\u4F18\u5316\uFF0C\u8BF7\u5728\u56DE\u7B54\u4E2D\u660E\u786E\u6307\u51FA\u4FEE\u6539\u65B9\u5411\u3002",
879
+ "\u5982\u679C\u5B58\u5728\u5F53\u524D\u9009\u533A\u6216\u5149\u6807\u4E0A\u4E0B\u6587\uFF0C\u4F18\u5148\u56F4\u7ED5\u8BE5\u5C40\u90E8\u4F4D\u7F6E\u505A\u5B9A\u70B9\u6539\u5199\uFF0C\u800C\u4E0D\u662F\u6CDB\u6CDB\u91CD\u5199\u6574\u7BC7\u6587\u6863\u3002"
880
+ ].join("\n");
881
+ }
882
+ if (targetKind === "app") {
883
+ const editingTarget = runtimeOptions?.editingTarget;
884
+ const metadata = editingTarget?.metadata;
885
+ const appId = editingTarget?.key ?? "(\u672A\u77E5 appId)";
886
+ const title = editingTarget?.title ?? "(\u672A\u547D\u540D\u5E94\u7528)";
887
+ const framework = typeof metadata?.framework === "string" ? metadata.framework : "worker";
888
+ const appUrl = typeof metadata?.appUrl === "string" ? metadata.appUrl : null;
889
+ const fileNames = Array.isArray(metadata?.fileNames) ? metadata.fileNames.filter((name) => typeof name === "string") : [];
890
+ const externalImports = Array.isArray(metadata?.externalImports) ? metadata.externalImports.filter(
891
+ (name) => typeof name === "string"
892
+ ) : [];
893
+ const sourceSummary = asOptionalTrimmedString(editingTarget?.summary) ?? null;
894
+ const selectedNode = metadata && typeof metadata === "object" && metadata.selectedNode && typeof metadata.selectedNode === "object" ? metadata.selectedNode : null;
895
+ const constraintPacks = buildAppConstraintPacks({
896
+ framework,
897
+ fileNames,
898
+ externalImports
899
+ });
900
+ if (selectedNode && typeof selectedNode.cssPath === "string") {
901
+ const tagName = typeof selectedNode.tagName === "string" && selectedNode.tagName ? selectedNode.tagName : "\u5143\u7D20";
902
+ const cssPath = String(selectedNode.cssPath);
903
+ const outerHTMLSnippet = typeof selectedNode.outerHTMLSnippet === "string" ? selectedNode.outerHTMLSnippet : "";
904
+ const textSnippet = typeof selectedNode.textSnippet === "string" ? selectedNode.textSnippet : "";
905
+ const noloLoc = typeof selectedNode.noloLoc === "string" ? selectedNode.noloLoc : "";
906
+ constraintPacks.push({
907
+ id: "selected-node",
908
+ title: "\u7528\u6237\u9009\u4E2D\u8282\u70B9\uFF08\u5B9A\u70B9\u4FEE\u6539\uFF09",
909
+ rules: [
910
+ `\u7528\u6237\u5DF2\u5728\u9884\u89C8\u4E2D\u7CBE\u51C6\u9009\u4E2D\u4E00\u4E2A\u5143\u7D20\uFF1A<${tagName}> \uFF0CCSS \u8DEF\u5F84\uFF1A${cssPath}${noloLoc ? `\uFF0C\u6E90\u7801\u4F4D\u7F6E\uFF1A${noloLoc}` : ""}\u3002\u672C\u8F6E\u4FEE\u6539\u5FC5\u987B\u4EE5\u8FD9\u4E2A\u5143\u7D20\u4E3A\u4E2D\u5FC3\u3002`,
911
+ `\u9009\u4E2D\u5143\u7D20\u7684 HTML \u7247\u6BB5\uFF08\u53EF\u80FD\u622A\u65AD\uFF09\uFF1A${outerHTMLSnippet}${textSnippet ? `\uFF1B\u53EF\u89C1\u6587\u672C\uFF1A${textSnippet}` : ""}\u3002\u5148\u5728\u6E90\u7801\u6587\u4EF6\u4E2D\u5B9A\u4F4D\u5230\u751F\u6210\u8FD9\u6BB5 HTML \u7684\u4EE3\u7801\uFF0C\u518D\u52A8\u624B\u3002`,
912
+ "\u4FEE\u6539\u6536\u655B\u5728\u8BE5\u5143\u7D20\u53CA\u5176\u76F4\u63A5\u6837\u5F0F\u6765\u6E90\uFF08\u547D\u4E2D\u7684\u7EC4\u4EF6/\u7C7B/design token\uFF09\uFF1B\u8C03\u89C6\u89C9\u53C2\u6570\u4F18\u5148\u6539 token \u6216\u5C40\u90E8\u7EC4\u4EF6\u3002",
913
+ "\u7981\u6B62\u91CD\u5199\u672A\u547D\u4E2D\u7684\u9875\u9762\u7ED3\u6784\u3001\u5E03\u5C40\u3001\u6587\u6848\u3001\u6570\u636E\u6D41\u6216\u5176\u4ED6\u7EC4\u4EF6\uFF1B\u4FDD\u6301\u672A\u547D\u4E2D\u6587\u4EF6\u4E0D\u53D8\u3002",
914
+ "\u5982\u679C\u6309 CSS \u8DEF\u5F84\u548C HTML \u7247\u6BB5\u5728\u6E90\u7801\u4E2D\u627E\u4E0D\u5230\u5BF9\u5E94\u4F4D\u7F6E\uFF0C\u5148\u5411\u7528\u6237\u8BF4\u660E\u5E76\u8BF7\u7528\u6237\u91CD\u65B0\u9009\u62E9\uFF0C\u4E0D\u8981\u51ED\u731C\u6D4B\u5927\u8303\u56F4\u6539\u52A8\u3002"
915
+ ]
916
+ });
917
+ }
918
+ return [
919
+ "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u4E2A Web \u5E94\u7528\uFF08Editing App\uFF09\u3002",
920
+ `- \u5E94\u7528 ID: ${appId}`,
921
+ `- \u540D\u79F0: ${title}`,
922
+ `- \u6280\u672F\u5F62\u6001: ${framework}`,
923
+ ...appUrl ? [`- \u5F53\u524D\u8BBF\u95EE\u5730\u5740: ${appUrl}`] : [],
924
+ ...fileNames.length ? [`- \u5F53\u524D\u6E90\u7801\u6587\u4EF6: ${fileNames.join(", ")}`] : ["- \u5F53\u524D\u6E90\u7801\u6587\u4EF6: (\u672A\u63D0\u4F9B\u591A\u6587\u4EF6\u6E05\u5355\uFF1B\u53EF\u80FD\u662F\u5355\u6587\u4EF6\u6E90\u7801\uFF0C\u4E5F\u53EF\u80FD\u53EA\u5269\u90E8\u7F72\u4EA7\u7269)"],
925
+ ...externalImports.length ? [`- \u5F53\u524D\u4F9D\u8D56\u767D\u540D\u5355\u547D\u4E2D: ${externalImports.join(", ")}`] : [],
926
+ ...sourceSummary ? ["", sourceSummary] : [],
927
+ "",
928
+ "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
929
+ "1. \u7528\u6237\u8981\u6C42\u4FEE\u6539\u5F53\u524D\u5E94\u7528\u65F6\uFF0C\u5148\u8C03\u7528 appRead \u83B7\u53D6\u5F53\u524D\u4EE3\u7801/\u6587\u4EF6\uFF0C\u518D\u57FA\u4E8E\u73B0\u6709\u5B9E\u73B0\u4FEE\u6539\u3002",
930
+ "1b. \u5982\u679C appFileList / appFileSearch / appFileRead \u8FD4\u56DE 409\uFF08APP_WORKSPACE_MISSING / \u6E90\u7801\u5DE5\u4F5C\u533A\u7F3A\u5931\uFF09\u6216 400\uFF08UNSUPPORTED_APP_FRAMEWORK / \u4E0D\u662F Nolo React SSR\uFF09\uFF0C**\u7ACB\u5373\u505C\u6B62\u4FEE\u6539\uFF0C\u4E0D\u8981\u81EA\u5DF1\u7F16\u5360\u4F4D\u4EE3\u7801\u6216\u964D\u7EA7 framework \u53BB appDeploy**\u3002\u5148\u8C03\u7528 appVersionList(appId) \u67E5\u770B\u5386\u53F2\u7248\u672C\uFF0C\u9009\u4E00\u4E2A\u6700\u8FD1\u7684\u5B8C\u6574\u7248\u672C\u7528 appVersionRestore(appId, versionId) \u6062\u590D\uFF0C\u6062\u590D\u540E\u6E90\u7801\u5DE5\u4F5C\u533A\u4F1A\u91CD\u5EFA\uFF0C\u518D\u7EE7\u7EED\u4FEE\u6539\u3002\u5982\u679C\u6CA1\u6709\u5386\u53F2\u7248\u672C\uFF0C\u518D\u5411\u7528\u6237\u8BF4\u660E\u60C5\u51B5\u3002\u7EDD\u4E0D\u53EF\u4EE5\u7528 `fetch(appUrl)`\u3001\u7A7A\u4EE3\u7801\u3001\u5360\u4F4D\u4EE3\u7801\u53BB appDeploy\u2014\u2014\u90A3\u4F1A\u8986\u76D6\u73B0\u6709\u5E94\u7528\u5BFC\u81F4\u6570\u636E\u4E22\u5931\u3002",
931
+ "2. \u5982\u679C appRead \u8FD4\u56DE workspaceRef/sourceFiles/sourceOmitted\uFF0C\u4E0D\u8981\u6574\u7AD9\u91CD\u5199\uFF1B\u4F7F\u7528 App Builder \u7684\u53D7\u9650 workspace \u6587\u4EF6\u5DE5\u5177\uFF1AappFileList=globFiles\u3001appFileSearch=codeSearch\u3001appFileRead=readFile\u3001appFileReplace=editFile\u3001appFileWrite=writeFile\u3002\u5148\u5B9A\u4F4D\u6587\u4EF6\u4E0E\u547D\u4E2D\u884C\uFF0C\u5927\u6587\u4EF6\u53EA\u8BFB\u53D6\u5FC5\u8981\u884C\u8303\u56F4\uFF1B\u6587\u5B57\u3001\u6837\u5F0F\u3001token\u3001\u5C40\u90E8\u903B\u8F91\u7B49\u5C0F\u6539\u52A8\u5FC5\u987B\u4F18\u5148\u7528 appFileReplace \u7CBE\u786E\u66FF\u6362\u552F\u4E00\u7247\u6BB5\uFF0C\u53EA\u6709\u65B0\u5EFA\u6587\u4EF6\u6216\u786E\u5B9E\u9700\u8981\u6574\u6587\u4EF6\u91CD\u5199\u65F6\u624D\u7528 appFileWrite\u3002",
932
+ "3. \u5148\u8BC6\u522B\u5F53\u524D\u5E94\u7528\u662F\u5426\u5DF2\u6709 theme / tokens / design system\uFF1B\u5DF2\u6709\u5C31\u4F18\u5148\u6539\u8FD9\u5C42\uFF0C\u6CA1\u6709\u518D\u8865\u4E00\u5C42\u6700\u5C0F\u5171\u4EAB token\uFF0C\u518D\u57FA\u4E8E token \u8C03\u6574\u7EC4\u4EF6\u3002",
933
+ "4. \u5982\u679C\u5F53\u524D\u5E94\u7528\u8FD8\u662F\u65E7\u5199\u6CD5\uFF1A\u89C6\u89C9\u503C\u6563\u843D\u5728\u7EC4\u4EF6\u786C\u7F16\u7801 style \u91CC\uFF0C\u800C\u7528\u6237\u53EA\u662F\u505A\u5B57\u4F53/\u989C\u8272/\u95F4\u8DDD\u7B49\u89C6\u89C9\u5FAE\u8C03\uFF0C\u9ED8\u8BA4\u5148\u628A\u547D\u4E2D\u7684\u89C6\u89C9\u503C\u62BD\u5230\u6700\u5C0F token \u5C42\uFF0C\u518D\u5B8C\u6210\u672C\u6B21\u4FEE\u6539\uFF1B\u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u4E0D\u8981\u91CD\u6784\u3002",
934
+ `5. \u91CD\u65B0\u90E8\u7F72\u5F53\u524D\u5E94\u7528\u65F6\uFF0CappDeploy \u5FC5\u987B\u7EE7\u7EED\u4F20\u540C\u4E00\u4E2A appId\uFF08${appId}\uFF09\uFF0C\u907F\u514D\u521B\u5EFA\u65B0\u5E94\u7528\u3002`,
935
+ framework === "nolo-react" ? "6. \u5F53\u524D\u5E94\u7528\u662F Nolo React SSR\uFF0C\u4FEE\u6539\u65F6\u4F18\u5148\u4F7F\u7528\u53D7\u9650 app workspace \u6587\u4EF6\u5DE5\u5177\u64CD\u4F5C\u6E90\u7801\u5DE5\u4F5C\u533A\uFF0C\u7136\u540E appPreflight/appDeploy\uFF1B\u4E0D\u8981\u9000\u56DE react-spa \u6216\u5355\u6587\u4EF6 Worker\u3002" : framework === "react-spa" ? '6. \u5F53\u524D\u5E94\u7528\u662F React SPA\uFF0C\u4FEE\u6539\u65F6\u7EE7\u7EED\u6CBF\u7528 framework: "react-spa" + files\uFF0C\u4E0D\u8981\u9000\u56DE\u5355\u6587\u4EF6 Worker\u3002' : "6. \u5F53\u524D\u5E94\u7528\u76EE\u524D\u662F Worker \u5F62\u6001\uFF1B\u5982\u679C\u9700\u6C42\u53D8\u6210\u590D\u6742\u4EA4\u4E92\u6216\u56FE\u8868\uFF0C\u53EF\u4EE5\u8BC4\u4F30\u5347\u7EA7\u4E3A React SPA\u3002",
936
+ ...fileNames.length ? [] : [
937
+ "7. \u5F53\u524D\u6CA1\u6709\u6E90\u7801\u6587\u4EF6\u6E05\u5355\u65F6\uFF0C\u5FC5\u987B\u5148\u7528 appRead \u5224\u65AD\u8BFB\u5230\u7684\u662F\u53EF\u7EF4\u62A4\u6E90\u7801\u8FD8\u662F\u90E8\u7F72\u4EA7\u7269 / \u6253\u5305 bundle\u3002",
938
+ "8. \u5982\u679C appRead \u8FD4\u56DE\u7684\u662F HTML \u58F3\u3001importmap\u3001\u538B\u7F29 bundle \u6216\u660E\u663E\u4E0D\u662F\u539F\u59CB\u6E90\u7801\u6587\u4EF6\uFF0C\u7981\u6B62\u5728\u672A\u544A\u77E5\u7528\u6237\u98CE\u9669\u7684\u60C5\u51B5\u4E0B\u6574\u7AD9\u91CD\u5199\uFF1B\u5E94\u5148\u8BF4\u660E\u201C\u5F53\u524D\u7F3A\u5C11\u539F\u59CB\u6E90\u7801\u5FEB\u7167\uFF0C\u7EE7\u7EED\u4FEE\u6539\u66F4\u50CF\u6574\u4F53\u91CD\u5EFA\u201D\uFF0C\u7B49\u7528\u6237\u786E\u8BA4\u540E\u518D\u7EE7\u7EED\u3002"
939
+ ],
940
+ "9. \u5982\u679C\u7528\u6237\u53EA\u662F\u8981\u8C03\u5B57\u4F53\u5927\u5C0F\u3001\u914D\u8272\u3001\u5706\u89D2\u3001\u9634\u5F71\u3001\u7559\u767D\u7B49\u89C6\u89C9\u7EC6\u8282\uFF0C\u9ED8\u8BA4\u4F18\u5148\u6539\u8BBE\u8BA1 token \u6216\u547D\u4E2D\u7684\u5C40\u90E8\u7EC4\u4EF6\uFF1B\u5BF9\u65E7\u5199\u6CD5\u5E94\u7528\u5219\u4F18\u5148\u505A\u6700\u5C0F token \u8FC1\u79FB\uFF0C\u4E0D\u8981\u53EA\u6539\u6563\u843D\u786C\u7F16\u7801\u3002",
941
+ "10. \u6BCF\u6B21\u4FEE\u6539\u5B8C\u6210\u540E\uFF0C\u5148 appPreflight\uFF0C\u518D appDeploy\uFF1B\u5982\u679C\u5931\u8D25\uFF0C\u6309\u8FD4\u56DE issues \u5B9A\u70B9\u4FEE\u590D\u3002",
942
+ "11. \u56DE\u590D\u7528\u6237\u65F6\u4F18\u5148\u8BF4\u660E\u505A\u4E86\u4EC0\u4E48\u53D8\u5316\u3001\u73B0\u5728\u5E94\u7528\u53EF\u4EE5\u600E\u4E48\u7528\uFF0C\u800C\u4E0D\u662F\u76F4\u63A5\u5806\u4EE3\u7801\u3002",
943
+ ...formatAppConstraintPacks(constraintPacks)
944
+ ].join("\n");
945
+ }
946
+ if (targetKind === "local_preview") {
947
+ const metadata = runtimeOptions?.editingTarget?.metadata;
948
+ const selectedNode = metadata && typeof metadata === "object" && metadata.selectedNode && typeof metadata.selectedNode === "object" ? metadata.selectedNode : null;
949
+ if (!selectedNode) return null;
950
+ const readString = (key) => typeof selectedNode[key] === "string" ? selectedNode[key] : "";
951
+ const tagName = readString("tagName") || "\u5143\u7D20";
952
+ const cssPath = readString("cssPath");
953
+ const noloLoc = readString("noloLoc");
954
+ const textSnippet = readString("textSnippet");
955
+ const outerHTMLSnippet = readString("outerHTMLSnippet");
956
+ return [
957
+ "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u672C\u5730\u5DE5\u4F5C\u533A\u91CC\u6B63\u5728\u9884\u89C8\u7684\u7F51\u9875\uFF08Local Preview\uFF09\u3002",
958
+ `\u7528\u6237\u5728\u9884\u89C8\u4E2D\u9009\u4E2D\u4E86\u4E00\u4E2A\u5143\u7D20\uFF1A<${tagName}>\uFF0CCSS \u8DEF\u5F84\uFF1A${cssPath}${noloLoc ? `\uFF0C\u6E90\u7801\u4F4D\u7F6E\uFF1A${noloLoc}` : ""}\u3002`,
959
+ `\u9009\u4E2D\u5143\u7D20\u7684 HTML \u7247\u6BB5\uFF08\u53EF\u80FD\u622A\u65AD\uFF09\uFF1A${outerHTMLSnippet}${textSnippet ? `\uFF1B\u53EF\u89C1\u6587\u672C\uFF1A${textSnippet}` : ""}\u3002`,
960
+ "",
961
+ "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
962
+ "1. \u672C\u8F6E\u4FEE\u6539\u5FC5\u987B\u4EE5\u8FD9\u4E2A\u5143\u7D20\u4E3A\u4E2D\u5FC3\uFF1B\u5148\u5728\u672C\u5730\u5DE5\u4F5C\u533A\u6E90\u7801\u4E2D\u5B9A\u4F4D\u5230\u751F\u6210\u8FD9\u6BB5 HTML \u7684\u4EE3\u7801\uFF0C\u518D\u52A8\u624B\u3002",
963
+ noloLoc ? "2. \u5DF2\u7ED9\u51FA\u6E90\u7801\u4F4D\u7F6E\uFF0C\u76F4\u63A5\u8BFB\u8BE5\u6587\u4EF6\u7684\u5BF9\u5E94\u884C\u8303\u56F4\u786E\u8BA4\uFF0C\u4E0D\u8981\u5168\u5C40\u641C\u7D22\u3002" : "2. \u6CA1\u6709\u6E90\u7801\u4F4D\u7F6E\u65F6\uFF0C\u7528 CSS \u8DEF\u5F84\u91CC\u7684\u7C7B\u540D\u3001\u53EF\u89C1\u6587\u672C\u6216 HTML \u7247\u6BB5\u641C\u7D22\u5DE5\u4F5C\u533A\u5B9A\u4F4D\uFF0C\u4E0D\u8981\u51ED\u731C\u6D4B\u6539\u52A8\u3002",
964
+ "3. \u4FEE\u6539\u6536\u655B\u5728\u8BE5\u5143\u7D20\u53CA\u5176\u76F4\u63A5\u6837\u5F0F\u6765\u6E90\uFF08\u547D\u4E2D\u7684\u7EC4\u4EF6/\u7C7B/design token\uFF09\uFF1B\u4FDD\u6301\u672A\u547D\u4E2D\u7684\u6587\u4EF6\u4E0D\u53D8\u3002",
965
+ "4. \u5982\u679C\u5B9A\u4F4D\u7ED3\u679C\u843D\u5728 node_modules \u6216\u6765\u81EA\u63A5\u53E3\u6570\u636E\uFF0C\u5148\u544A\u8BC9\u7528\u6237\u5B9E\u9645\u60C5\u51B5\uFF0C\u518D\u63D0\u51FA\u53EF\u884C\u7684\u6539\u6CD5\uFF0C\u4E0D\u8981\u786C\u6539\u3002",
966
+ "5. \u5982\u679C\u6309 CSS \u8DEF\u5F84\u548C HTML \u7247\u6BB5\u627E\u4E0D\u5230\u5BF9\u5E94\u4F4D\u7F6E\uFF0C\u5148\u5411\u7528\u6237\u8BF4\u660E\u5E76\u8BF7\u5176\u91CD\u65B0\u9009\u62E9\u3002"
967
+ ].join("\n");
968
+ }
969
+ if (targetKind === "image" || targetKind === "file") {
970
+ const editingTarget = runtimeOptions?.editingTarget;
971
+ const metadata = editingTarget?.metadata;
972
+ const title = editingTarget?.title ?? "(\u672A\u547D\u540D\u5BF9\u8C61)";
973
+ const objectKey = editingTarget?.key ?? "(\u672A\u77E5 key)";
974
+ const fileId = typeof metadata?.fileId === "string" ? metadata.fileId : null;
975
+ const url = typeof metadata?.url === "string" ? metadata.url : null;
976
+ const size = typeof metadata?.size === "number" ? metadata.size : null;
977
+ return [
978
+ `\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u4E2A${targetKind === "image" ? "\u56FE\u7247" : "\u6587\u4EF6"}\u5BF9\u8C61\uFF08Editing ${targetKind === "image" ? "Image" : "File"}\uFF09\u3002`,
979
+ `- \u5BF9\u8C61 key: ${objectKey}`,
980
+ `- \u6807\u9898: ${title}`,
981
+ ...fileId ? [`- fileId: ${fileId}`] : [],
982
+ ...url ? [`- \u8D44\u6E90\u5730\u5740: ${url}`] : [],
983
+ ...size !== null ? [`- \u6587\u4EF6\u5927\u5C0F: ${size} bytes`] : [],
984
+ "",
985
+ "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
986
+ targetKind === "image" ? "\u5F53\u524D\u9636\u6BB5\u4F18\u5148\u5E2E\u52A9\u7528\u6237\u7406\u89E3\u56FE\u7247\u5185\u5BB9\u3001\u63D0\u70BC\u91CD\u70B9\u3001\u547D\u540D\u5F52\u7C7B\u548C\u4E0B\u4E00\u6B65\u5904\u7406\u5EFA\u8BAE\u3002\u4E0D\u8981\u5047\u88C5\u5DF2\u7ECF\u5B8C\u6210\u590D\u6742\u56FE\u7247\u7F16\u8F91\u3002" : "\u5F53\u524D\u9636\u6BB5\u4F18\u5148\u5E2E\u52A9\u7528\u6237\u7406\u89E3\u6587\u4EF6\u7528\u9014\u3001\u63D0\u53D6\u5904\u7406\u601D\u8DEF\u3001\u7ED9\u51FA\u6574\u7406\u5EFA\u8BAE\u548C\u4E0B\u4E00\u6B65\u64CD\u4F5C\u5EFA\u8BAE\u3002\u4E0D\u8981\u5047\u88C5\u5DF2\u7ECF\u5B8C\u6574\u89E3\u6790\u6587\u4EF6\u5185\u5BB9\u3002"
987
+ ].join("\n");
988
+ }
989
+ if (targetKind === "canvas_node") {
990
+ return buildCanvasNodeEditingContextSummary(runtimeOptions);
991
+ }
992
+ return null;
993
+ };
994
+
995
+ // packages/ai/agent/appWorkingMemory.ts
996
+ var APP_TOOL_NAMES = /* @__PURE__ */ new Set([
997
+ "appList",
998
+ "appRead",
999
+ "appDeploy",
1000
+ "appPreflight",
1001
+ "appDelete"
1002
+ ]);
1003
+ var contentToText = (content) => {
1004
+ if (!content) return "";
1005
+ if (typeof content === "string") return content;
1006
+ if (Array.isArray(content)) {
1007
+ return content.map((part) => "text" in part ? part.text ?? "" : "").join("\n");
1008
+ }
1009
+ return "";
1010
+ };
1011
+ var parseAppListEntries = (text) => text.split("\n").map((line) => line.trim()).filter((line) => line.startsWith("- **") && line.includes("(appId:"));
1012
+ var buildRecentAppToolMemory = (messages, toolRuns) => {
1013
+ const messageById = new Map(messages.map((msg) => [msg.id, msg]));
1014
+ const recentRuns = [...toolRuns].filter((run) => APP_TOOL_NAMES.has(run.toolName)).sort((a, b) => (b.startedAt ?? 0) - (a.startedAt ?? 0)).slice(0, 8);
1015
+ if (recentRuns.length === 0) return null;
1016
+ const lines = [
1017
+ "\u8FD9\u4E9B\u4FE1\u606F\u6765\u81EA\u5F53\u524D\u5BF9\u8BDD\u91CC\u6700\u8FD1\u7684 app \u5DE5\u5177\u8C03\u7528\uFF0C\u4E0D\u4F9D\u8D56\u53F3\u4FA7\u7F16\u8F91\u6001\u3002"
1018
+ ];
1019
+ const latestDeployLike = recentRuns.find(
1020
+ (run) => ["appDeploy", "appRead", "appPreflight"].includes(run.toolName)
1021
+ );
1022
+ if (latestDeployLike) {
1023
+ const input = latestDeployLike.input ?? {};
1024
+ const parts = [
1025
+ `- \u6700\u8FD1\u4E00\u6B21\u5173\u952E app \u64CD\u4F5C: ${latestDeployLike.toolName}`,
1026
+ typeof input.appId === "string" ? `appId=${input.appId}` : null,
1027
+ typeof input.name === "string" ? `name=${input.name}` : null,
1028
+ typeof input.framework === "string" ? `framework=${input.framework}` : null
1029
+ ].filter(Boolean);
1030
+ lines.push(parts.join("\uFF0C"));
1031
+ }
1032
+ const relatedMessages = recentRuns.map((run) => messageById.get(run.messageId)).filter((msg) => !!msg);
1033
+ const appListMessage = relatedMessages.find((msg) => msg.toolName === "appList");
1034
+ if (appListMessage) {
1035
+ const entries = parseAppListEntries(contentToText(appListMessage.content)).slice(0, 5);
1036
+ if (entries.length > 0) {
1037
+ lines.push("- \u6700\u8FD1\u4E00\u6B21 appList \u7ED3\u679C\uFF1A");
1038
+ lines.push(...entries.map((entry) => ` ${entry}`));
1039
+ }
1040
+ }
1041
+ const latestReadMessage = relatedMessages.find((msg) => msg.toolName === "appRead");
1042
+ if (latestReadMessage) {
1043
+ const text = contentToText(latestReadMessage.content);
1044
+ const appId = text.match(/- appId:\s*(.+)/)?.[1]?.trim();
1045
+ const url = text.match(/- 访问地址:\s*(.+)/)?.[1]?.trim();
1046
+ if (appId || url) {
1047
+ lines.push(
1048
+ [
1049
+ "- \u6700\u8FD1\u4E00\u6B21 appRead \u771F\u503C:",
1050
+ appId ? `appId=${appId}` : null,
1051
+ url ? `url=${url}` : null
1052
+ ].filter(Boolean).join("\uFF0C")
1053
+ );
1054
+ }
1055
+ }
1056
+ const latestPreflightRun = recentRuns.find((run) => run.toolName === "appPreflight");
1057
+ if (latestPreflightRun) {
1058
+ lines.push(
1059
+ [
1060
+ "- \u6700\u8FD1\u4E00\u6B21 appPreflight:",
1061
+ latestPreflightRun.status === "failed" ? "\u5931\u8D25" : "\u5DF2\u6267\u884C",
1062
+ latestPreflightRun.outputSummary ? `\u6458\u8981=${latestPreflightRun.outputSummary}` : null
1063
+ ].filter(Boolean).join("\uFF0C")
1064
+ );
1065
+ }
1066
+ const latestDeployMessage = relatedMessages.find((msg) => msg.toolName === "appDeploy");
1067
+ if (latestDeployMessage) {
1068
+ const text = contentToText(latestDeployMessage.content);
1069
+ const appId = text.match(/- appId:\s*(.+)/)?.[1]?.trim();
1070
+ const url = text.match(/- 访问地址:\s*(.+)/)?.[1]?.trim();
1071
+ if (appId || url) {
1072
+ lines.push(
1073
+ [
1074
+ "- \u6700\u8FD1\u4E00\u6B21 appDeploy \u7ED3\u679C:",
1075
+ appId ? `appId=${appId}` : null,
1076
+ url ? `url=${url}` : null
1077
+ ].filter(Boolean).join("\uFF0C")
1078
+ );
1079
+ }
1080
+ }
1081
+ lines.push(
1082
+ "- \u5982\u679C\u7528\u6237\u8BF4\u201C\u521A\u624D\u90A3\u4E2A app / \u90A3\u4E2A\u7F51\u7AD9\u201D\uFF0C\u4F18\u5148\u628A\u5B83\u7406\u89E3\u4E3A\u4E0A\u9762\u6700\u8FD1\u4E00\u6B21\u88AB\u8BFB\u53D6\u3001\u9884\u68C0\u6216\u90E8\u7F72\u7684\u5E94\u7528\uFF1B\u82E5\u4ECD\u6709\u6B67\u4E49\uFF0C\u518D\u7528 appList \u6216 appRead \u786E\u8BA4\u3002"
1083
+ );
1084
+ return lines.join("\n");
1085
+ };
1086
+
1087
+ // packages/ai/agent/streamAgentChatTurnUtils.ts
1088
+ var BROWSER_UNAVAILABLE_CORE_TOOLS = {
1089
+ createAgentAutomation: true,
1090
+ updateAgentAutomation: true,
1091
+ deleteAgentAutomation: true,
1092
+ notifyUser: true
1093
+ };
1094
+ var getRuntimeCoreTools = () => {
1095
+ if (typeof window === "undefined") {
1096
+ return [...TOOL_PACKS.CORE];
1097
+ }
1098
+ return TOOL_PACKS.CORE.filter(
1099
+ (toolName) => !BROWSER_UNAVAILABLE_CORE_TOOLS[toolName]
1100
+ );
1101
+ };
1102
+ var isInlineVisualArtifactAgent = (agentConfig) => {
1103
+ const tags = Array.isArray(agentConfig.tags) ? agentConfig.tags : [];
1104
+ return tags.some(
1105
+ (tag) => typeof tag === "string" && ["inline-artifact", "streaming-ui"].includes(tag)
1106
+ );
1107
+ };
1108
+ var estimateTokensOfMessage = (msg) => {
1109
+ let content = "";
1110
+ if (typeof msg.content === "string") {
1111
+ content = msg.content;
1112
+ } else if (Array.isArray(msg.content)) {
1113
+ content = msg.content.map((p) => {
1114
+ if (p.type === "text") return p.text || "";
1115
+ if (p.type === "image_url") return "[image]";
1116
+ return "[non-text]";
1117
+ }).join("");
1118
+ } else if (msg.content && typeof msg.content === "object") {
1119
+ content = JSON.stringify(msg.content);
1120
+ }
1121
+ let extraTokens = 0;
1122
+ if (Array.isArray(msg.tool_calls)) {
1123
+ const toolsStr = JSON.stringify(msg.tool_calls);
1124
+ extraTokens = estimateTokenCount(toolsStr);
1125
+ }
1126
+ return estimateTokenCount(content) + extraTokens;
1127
+ };
1128
+ var classifyConversationLoad = (messages) => {
1129
+ const N = 20;
1130
+ if (!Array.isArray(messages) || messages.length === 0) return "light";
1131
+ const tail = messages.slice(-N);
1132
+ const tokenSamples = tail.map(estimateTokensOfMessage);
1133
+ if (tokenSamples.length === 0) return "light";
1134
+ const sum = tokenSamples.reduce((acc, v) => acc + v, 0);
1135
+ const avg = sum / tokenSamples.length;
1136
+ const sorted = [...tokenSamples].sort((a, b) => a - b);
1137
+ const p95 = sorted[Math.floor((sorted.length - 1) * 0.95)];
1138
+ if (p95 < 200 && avg < 120) {
1139
+ return "light";
1140
+ }
1141
+ if (p95 > 2e3 || avg > 1200) {
1142
+ return "heavy";
1143
+ }
1144
+ return "medium";
1145
+ };
1146
+ var compressOldToolResults = (messages) => {
1147
+ return messages.map((msg) => {
1148
+ if (msg.role !== "tool") return msg;
1149
+ const content = typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
1150
+ const projected = projectToolMessageContent({
1151
+ content,
1152
+ toolName: msg.name
1153
+ });
1154
+ if (projected === content) return msg;
1155
+ return { ...msg, content: projected };
1156
+ });
1157
+ };
1158
+ var trimMessagesWithSummary = (messages, contextWindow, summaryTokenCount) => {
1159
+ const recentLoad = classifyConversationLoad(messages);
1160
+ const { rawMessageBudget, minTailTokens } = planContextUsage({
1161
+ contextWindow,
1162
+ summaryTokens: summaryTokenCount,
1163
+ recentLoad
1164
+ });
1165
+ if (!Array.isArray(messages) || messages.length === 0) return messages;
1166
+ let totalTokens = 0;
1167
+ let keepCount = 0;
1168
+ for (let i = messages.length - 1; i >= 0; i--) {
1169
+ const t = estimateTokensOfMessage(messages[i]);
1170
+ if (totalTokens + t > rawMessageBudget) break;
1171
+ totalTokens += t;
1172
+ keepCount++;
1173
+ }
1174
+ if (keepCount >= messages.length) {
1175
+ return messages;
1176
+ }
1177
+ if (totalTokens < minTailTokens) {
1178
+ const maxBudgetWithSlack = rawMessageBudget * 1.2;
1179
+ for (let i = messages.length - 1 - keepCount; i >= 0; i--) {
1180
+ const t = estimateTokensOfMessage(messages[i]);
1181
+ if (totalTokens + t > maxBudgetWithSlack) break;
1182
+ totalTokens += t;
1183
+ keepCount++;
1184
+ if (totalTokens >= minTailTokens) break;
1185
+ }
1186
+ }
1187
+ if (keepCount === 0 && messages.length > 0) {
1188
+ keepCount = Math.min(2, messages.length);
1189
+ }
1190
+ let cutIndex = messages.length - keepCount;
1191
+ if (cutIndex < 0) cutIndex = 0;
1192
+ while (cutIndex > 0 && messages[cutIndex]?.role === "tool") {
1193
+ cutIndex--;
1194
+ }
1195
+ return messages.slice(cutIndex);
1196
+ };
1197
+ var createDbSliceTurnContextSource = (dispatch) => ({
1198
+ readRecord: async (dbKey) => {
1199
+ const result = await dispatch(read({ dbKey })).unwrap();
1200
+ return result ?? null;
1201
+ }
1202
+ });
1203
+ var joinMapValues = (map) => Array.from(map.values()).join("");
1204
+ var formatCurrentInputContext = (pendingFiles, currentInputMap) => {
1205
+ if (pendingFiles.length === 0 || currentInputMap.size === 0) {
1206
+ return joinMapValues(currentInputMap);
1207
+ }
1208
+ const relevantPendingFiles = pendingFiles.filter((file) => {
1209
+ const key = file.sourceDialogKey || file.dialogKey || file.pageKey;
1210
+ return key && currentInputMap.has(key);
1211
+ });
1212
+ if (relevantPendingFiles.length === 0) {
1213
+ return joinMapValues(currentInputMap);
1214
+ }
1215
+ const filesByGroup = /* @__PURE__ */ new Map();
1216
+ for (const file of relevantPendingFiles) {
1217
+ const groupKey = file.groupId || file.id;
1218
+ const group = filesByGroup.get(groupKey);
1219
+ if (group) {
1220
+ group.push(file);
1221
+ } else {
1222
+ filesByGroup.set(groupKey, [file]);
1223
+ }
1224
+ }
1225
+ let sourceCounter = 1;
1226
+ let output = "";
1227
+ filesByGroup.forEach((filesInGroup) => {
1228
+ const isGroup = filesInGroup.length > 1;
1229
+ const sourceName = isGroup ? filesInGroup[0].name.split(" (")[0] : filesInGroup[0].name;
1230
+ output += `--- Source ${sourceCounter}: "${sourceName}" ---
1231
+ `;
1232
+ filesInGroup.forEach((file) => {
1233
+ const key = file.sourceDialogKey || file.dialogKey || file.pageKey;
1234
+ if (!key) return;
1235
+ const content = currentInputMap.get(key);
1236
+ if (!content) return;
1237
+ if (isGroup) {
1238
+ output += `### Document: "${file.name}"
1239
+ ${content}
1240
+ `;
1241
+ } else {
1242
+ output += `${content}
1243
+ `;
1244
+ }
1245
+ });
1246
+ output += `--- End of Source ${sourceCounter} ---
1247
+
1248
+ `;
1249
+ sourceCounter++;
1250
+ });
1251
+ return output;
1252
+ };
1253
+ var validateAccessAndBalance = (agentConfig, state) => {
1254
+ const userBalance = selectIdentityUserBalance(state);
1255
+ const currentUserId = selectIdentityUserId(state);
1256
+ const isCustomApi = agentConfig.apiSource === "custom";
1257
+ const isCliApi = agentConfig.apiSource === "cli";
1258
+ const isDeviceLocalOwner = agentConfig.userId === "local" && !currentUserId;
1259
+ const isOwner = isDeviceLocalOwner || Boolean(currentUserId) && agentConfig.userId === currentUserId;
1260
+ if (!isOwner) {
1261
+ const hasWhitelist = Array.isArray(agentConfig.whitelist) && agentConfig.whitelist.length > 0;
1262
+ if (hasWhitelist) {
1263
+ const isUserInWhitelist = !!currentUserId && agentConfig.whitelist?.includes(currentUserId);
1264
+ if (!isUserInWhitelist) {
1265
+ return "\u60A8\u4E0D\u5728\u8BE5\u5E94\u7528\u7684\u767D\u540D\u5355\u4E2D\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002";
1266
+ }
1267
+ }
1268
+ }
1269
+ if (isCustomApi || isCliApi) {
1270
+ return null;
1271
+ }
1272
+ const SUBSCRIPTION_OAUTH_REFS = /* @__PURE__ */ new Set([
1273
+ "cursor",
1274
+ "chatgpt",
1275
+ "xai",
1276
+ "antigravity",
1277
+ "claude"
1278
+ ]);
1279
+ if (SUBSCRIPTION_OAUTH_REFS.has((agentConfig.apiKeyRef ?? "").trim().toLowerCase())) {
1280
+ return null;
1281
+ }
1282
+ const isPlatformApi = agentConfig.apiSource === "platform" || agentConfig.useServerProxy === true;
1283
+ if (isDeviceLocalOwner && !isPlatformApi) {
1284
+ return null;
1285
+ }
1286
+ if (typeof userBalance !== "number") {
1287
+ const hasSessionUser = Boolean(
1288
+ getSessionSnapshotForState(state)?.activeAccountId
1289
+ );
1290
+ if (!currentUserId || !hasSessionUser) {
1291
+ return "\u8BF7\u767B\u5F55\u540E\u4F7F\u7528\u5E73\u53F0\u6A21\u578B\uFF0C\u6216\u6539\u7528\u672C\u5730\u81EA\u5B9A\u4E49/API/CLI Agent\u3002";
1292
+ }
1293
+ return "\u6B63\u5728\u83B7\u53D6\u7528\u6237\u4F59\u989D\uFF0C\u8BF7\u7A0D\u5019...";
1294
+ }
1295
+ const serverPrices = getModelPricing(agentConfig.provider || "", agentConfig.model);
1296
+ if (!serverPrices && !hasExplicitAgentPricing(agentConfig)) {
1297
+ return "\u65E0\u6CD5\u83B7\u53D6\u6A21\u578B\u5B9A\u4EF7\u4FE1\u606F\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";
1298
+ }
1299
+ const prices = getPrices(agentConfig, serverPrices ?? null);
1300
+ const maxPrice = getFinalPrice(prices);
1301
+ if (userBalance < maxPrice) {
1302
+ return "\u4F59\u989D\u4E0D\u8DB3\uFF0C\u8BF7\u5145\u503C\u540E\u518D\u8BD5\u3002";
1303
+ }
1304
+ return null;
1305
+ };
1306
+ var fetchMemoryOverlayContext = async (state, agentConfig, userInput, dialogConfig) => {
1307
+ const token = getSessionSnapshotForState(state)?.activeToken ?? null;
1308
+ const currentServer = typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
1309
+ const agentKey = asOptionalTrimmedString(agentConfig.dbKey) ?? "";
1310
+ if (!token || !currentServer || !agentKey) return null;
1311
+ const baseUrl = resolveToolBaseUrl(currentServer);
1312
+ if (!baseUrl) return null;
1313
+ const inputText = typeof userInput === "string" ? userInput : JSON.stringify(userInput ?? "");
1314
+ const spaceId = asOptionalTrimmedString(dialogConfig?.spaceId) ?? (getViewMode() === "all" ? void 0 : asOptionalTrimmedString(getCurrentSpaceIdRaw()));
1315
+ try {
1316
+ const response = await fetch(`${baseUrl}/api/memory/query`, {
1317
+ method: "POST",
1318
+ headers: {
1319
+ "Content-Type": "application/json",
1320
+ Authorization: `Bearer ${token}`
1321
+ },
1322
+ body: JSON.stringify({
1323
+ agentKey,
1324
+ userInput: inputText,
1325
+ ...spaceId ? { spaceId } : {}
1326
+ })
1327
+ });
1328
+ if (!response.ok) return null;
1329
+ const payload = await response.json().catch(() => null);
1330
+ return asOptionalTrimmedString(payload?.promptBlock) ?? null;
1331
+ } catch {
1332
+ return null;
1333
+ }
1334
+ };
1335
+ var buildStaticContexts = async (state, dispatch, agentConfig, dialogConfig, referenceContentCache) => {
1336
+ const keySets = await getFullChatContextKeys(
1337
+ state,
1338
+ dispatch,
1339
+ agentConfig,
1340
+ "",
1341
+ // 静态上下文不需要 userInput
1342
+ void 0
1343
+ // 静态上下文不需要 dialogConfig
1344
+ );
1345
+ const finalKeys = deduplicateContextKeys(keySets);
1346
+ const fetchReferences = (keys) => fetchReferenceContents(keys, dispatch, {
1347
+ format: "simplified_markdown",
1348
+ inlineMentionMeta: true,
1349
+ preloaded: referenceContentCache
1350
+ });
1351
+ const [botInstructionsMap, botKnowledgeMap] = await Promise.all([
1352
+ fetchReferences(finalKeys.botInstructionsContext),
1353
+ fetchReferences(finalKeys.botKnowledgeContext)
1354
+ ]);
1355
+ const globalPrompt = selectGlobalPrompt(state);
1356
+ const userTonePreset = selectUserTonePreset(state);
1357
+ const knowledgeCaptureLevel = selectKnowledgeCaptureLevel(state);
1358
+ const spaceContextLevel = selectSpaceContextLevel(state);
1359
+ const userRecentLimit = selectAiRecentContentLimit(state);
1360
+ const contextWindow = getModelContextWindow(agentConfig.model) || 128e3;
1361
+ const preloadPlan = resolveSpaceContextPreloadPlan(spaceContextLevel);
1362
+ const dynamicLimit = Math.floor(contextWindow * preloadPlan.preloadBudgetRatio / 150);
1363
+ const recentLimit = preloadPlan.includeRecentContent ? Math.max(3, Math.min(userRecentLimit, Math.max(3, dynamicLimit))) : 0;
1364
+ const turnContextSource = createDbSliceTurnContextSource(dispatch);
1365
+ let spaceContext = null;
1366
+ if (spaceContextLevel > 1) {
1367
+ const spaceLayer = await buildSpaceContextLayer({
1368
+ source: turnContextSource,
1369
+ spaceId: dialogConfig?.spaceId,
1370
+ recentContentLimit: recentLimit
1371
+ });
1372
+ spaceContext = spaceLayer ? spaceLayer.content.trim() : null;
1373
+ }
1374
+ const linkedSpaceIds = agentConfig.linkedSpaces || [];
1375
+ if (linkedSpaceIds.length > 0 && spaceContextLevel > 1) {
1376
+ const linkedSection = await buildLinkedSpacesSection({
1377
+ source: turnContextSource,
1378
+ linkedSpaceIds
1379
+ });
1380
+ if (linkedSection) {
1381
+ spaceContext = (spaceContext ?? "") + `
1382
+
1383
+ ${linkedSection}`;
1384
+ }
1385
+ }
1386
+ const dialogPolicyContext = dialogConfig?.category === PERSONALIZATION_DIALOG_CATEGORY ? buildPersonalizationDialogPolicyContext() : null;
1387
+ return {
1388
+ botInstructionsContext: joinMapValues(botInstructionsMap),
1389
+ botKnowledgeContext: joinMapValues(botKnowledgeMap),
1390
+ spaceContext,
1391
+ userGlobalPrompt: globalPrompt,
1392
+ userPolicyContext: [
1393
+ buildStaticUserPolicyContext({
1394
+ agentConfig,
1395
+ settingsRecord: {
1396
+ userTonePreset,
1397
+ knowledgeCaptureLevel,
1398
+ spaceContextLevel,
1399
+ enableReadCurrentSpace: spaceContextLevel > 1
1400
+ }
1401
+ }),
1402
+ dialogPolicyContext
1403
+ ].filter(Boolean).join("\n")
1404
+ };
1405
+ };
1406
+ var buildDynamicContexts = async (state, dispatch, agentConfig, userInput, runtimeOptions, referenceContentCache, dialogKey) => {
1407
+ let dialogSummary = null;
1408
+ let dialogConfig;
1409
+ if (dialogKey) {
1410
+ dialogConfig = selectById(state, dialogKey);
1411
+ if (dialogConfig?.summary) {
1412
+ dialogSummary = dialogConfig.summary;
1413
+ }
1414
+ }
1415
+ const keySets = await getFullChatContextKeys(
1416
+ state,
1417
+ dispatch,
1418
+ agentConfig,
1419
+ userInput,
1420
+ dialogConfig
1421
+ );
1422
+ const finalKeys = deduplicateContextKeys(keySets);
1423
+ const fetchReferences = (keys) => fetchReferenceContents(keys, dispatch, {
1424
+ format: "simplified_markdown",
1425
+ inlineMentionMeta: true,
1426
+ preloaded: referenceContentCache
1427
+ });
1428
+ const [currentInputMap, historyMap] = await Promise.all([
1429
+ fetchReferences(finalKeys.currentInputContext),
1430
+ fetchReferences(finalKeys.historyContext)
1431
+ ]);
1432
+ const pendingFiles = selectPendingFiles(state);
1433
+ const formattedCurrentInputContext = formatCurrentInputContext(
1434
+ pendingFiles,
1435
+ currentInputMap
1436
+ );
1437
+ const dialogId = dialogConfig?.id ?? null;
1438
+ const currentDialogMessages = selectAllMsgs(state, dialogId);
1439
+ const currentDialogMessageIds = new Set(currentDialogMessages.map((msg) => msg.id));
1440
+ const currentDialogToolRuns = getAllToolRuns().filter(
1441
+ (run) => currentDialogMessageIds.has(run.messageId)
1442
+ );
1443
+ const editingContext = buildEditingContextSummary(state, runtimeOptions);
1444
+ const appWorkingMemory = buildRecentAppToolMemory(
1445
+ currentDialogMessages,
1446
+ currentDialogToolRuns
1447
+ );
1448
+ const memoryOverlay = await fetchMemoryOverlayContext(
1449
+ state,
1450
+ agentConfig,
1451
+ userInput,
1452
+ dialogConfig
1453
+ );
1454
+ return {
1455
+ currentInputContext: formattedCurrentInputContext.trim() || null,
1456
+ historyContext: joinMapValues(historyMap),
1457
+ editingContext,
1458
+ appWorkingMemory,
1459
+ memoryOverlay,
1460
+ dialogSummary,
1461
+ referenceKeys: dialogConfig?.referenceKeys || []
1462
+ };
1463
+ };
1464
+ var mergeContexts = (staticCtx, dynamicCtx) => ({
1465
+ botInstructionsContext: staticCtx.botInstructionsContext || void 0,
1466
+ botKnowledgeContext: staticCtx.botKnowledgeContext || void 0,
1467
+ spaceContext: staticCtx.spaceContext || void 0,
1468
+ userGlobalPrompt: staticCtx.userGlobalPrompt || void 0,
1469
+ userPolicyContext: staticCtx.userPolicyContext || void 0,
1470
+ currentInputContext: dynamicCtx.currentInputContext,
1471
+ historyContext: dynamicCtx.historyContext || void 0,
1472
+ editingContext: dynamicCtx.editingContext,
1473
+ appWorkingMemory: dynamicCtx.appWorkingMemory,
1474
+ memoryOverlay: dynamicCtx.memoryOverlay,
1475
+ dialogSummary: dynamicCtx.dialogSummary,
1476
+ referenceKeys: dynamicCtx.referenceKeys
1477
+ });
1478
+ var mergeAgentToolsWithRuntime = (agentConfig, referencedTools, mentionedTools, runtimeOptions, state) => {
1479
+ const rawBaseTools = Array.isArray(agentConfig.tools) ? agentConfig.tools : [];
1480
+ const agentEnabledPacks = resolveAgentRequiredPackIds(agentConfig);
1481
+ const isInlineArtifact = isInlineVisualArtifactAgent(agentConfig);
1482
+ const effectiveEnabledPacks = resolveEffectiveEnabledPacks({
1483
+ enabledPacks: agentEnabledPacks,
1484
+ declaredOnly: isInlineArtifact
1485
+ });
1486
+ const expandedPackTools = expandEnabledPacks(
1487
+ effectiveEnabledPacks,
1488
+ rawBaseTools
1489
+ );
1490
+ const baseTools = canonicalizeToolNames(expandedPackTools);
1491
+ const requiredSkillTools = canonicalizeToolNames(
1492
+ agentConfig.referencedTools ?? []
1493
+ );
1494
+ const recommendedSkillTools = canonicalizeToolNames(
1495
+ agentConfig.recommendedSkillTools ?? []
1496
+ );
1497
+ const recommendedSkillHints = [
1498
+ .../* @__PURE__ */ new Set([
1499
+ ...asNonEmptyStringArray(agentConfig.recommendedSkillHints),
1500
+ ...resolveAgentRecommendedSkillNames(agentConfig)
1501
+ ])
1502
+ ];
1503
+ const skillPromptPatches = [
1504
+ .../* @__PURE__ */ new Set([
1505
+ ...asNonEmptyStringArray(agentConfig.skillPromptPatches),
1506
+ // 能力包的 promptPatch(方法论文档)与 skill reference 的 patch 走同一条
1507
+ // 注入链(buildSkillGuidanceBlock → buildSkillGuidancePromptBlock),
1508
+ // 让「工具 + 配套纪律」作为一个能力包整体注入 system prompt。
1509
+ ...expandEnabledPackPromptPatches(effectiveEnabledPacks)
1510
+ ])
1511
+ ];
1512
+ const webPadded = applyDefaultWebToolPacks({
1513
+ toolNames: baseTools,
1514
+ skipWeb: isInlineVisualArtifactAgent(agentConfig)
1515
+ });
1516
+ const enhancedTools = /* @__PURE__ */ new Set([
1517
+ ...webPadded,
1518
+ ...isInlineVisualArtifactAgent(agentConfig) ? [] : getRuntimeCoreTools(),
1519
+ ...isInlineVisualArtifactAgent(agentConfig) ? [] : requiredSkillTools,
1520
+ ...isInlineVisualArtifactAgent(agentConfig) ? [] : canonicalizeToolNames(referencedTools),
1521
+ ...isInlineVisualArtifactAgent(agentConfig) ? [] : canonicalizeToolNames(mentionedTools)
1522
+ ]);
1523
+ const extraTools = isInlineVisualArtifactAgent(agentConfig) ? [] : canonicalizeToolNames(runtimeOptions?.extraTools ?? []);
1524
+ for (const t of extraTools) {
1525
+ enhancedTools.add(t);
1526
+ }
1527
+ if (!isInlineVisualArtifactAgent(agentConfig)) {
1528
+ const viewMode = state ? getViewMode() : "categories";
1529
+ if (viewMode === "all") {
1530
+ enhancedTools.delete("search_workspace");
1531
+ if (!recommendedSkillHints.includes("search-all-spaces")) {
1532
+ recommendedSkillHints.push("search-all-spaces");
1533
+ }
1534
+ } else {
1535
+ enhancedTools.add("search_workspace");
1536
+ }
1537
+ }
1538
+ const systemBuiltinSkills = state?.settings?.systemBuiltinSkills;
1539
+ const mountedTools = isInlineVisualArtifactAgent(agentConfig) ? Array.from(enhancedTools) : addDefaultSystemCapabilityTools(Array.from(enhancedTools));
1540
+ const filteredTools = applySystemBuiltinSkillFilter(
1541
+ mountedTools,
1542
+ systemBuiltinSkills
1543
+ );
1544
+ return {
1545
+ ...agentConfig,
1546
+ tools: applyDisabledTools(
1547
+ prioritizeToolNames(
1548
+ filteredTools,
1549
+ recommendedSkillTools
1550
+ ),
1551
+ agentConfig?.disabledTools
1552
+ ),
1553
+ recommendedSkillTools,
1554
+ recommendedSkillHints,
1555
+ skillPromptPatches
1556
+ };
1557
+ };
1558
+ var applyImageConfigRuntimeOverride = (agentConfig, runtimeOptions) => {
1559
+ const override = runtimeOptions?.imageConfigOverride;
1560
+ if (!override) {
1561
+ return agentConfig;
1562
+ }
1563
+ const baseImageConfig = agentConfig.imageConfig ?? {};
1564
+ return {
1565
+ ...agentConfig,
1566
+ ...override.imageModelOverride ? { model: override.imageModelOverride } : {},
1567
+ imageConfig: {
1568
+ ...baseImageConfig,
1569
+ ...override
1570
+ }
1571
+ };
1572
+ };
1573
+ var formatImageWaitHint = (range) => {
1574
+ if (!range || typeof range.min !== "number" || typeof range.max !== "number") {
1575
+ return void 0;
1576
+ }
1577
+ return `\u901A\u5E38\u9700\u8981 ${range.min}-${range.max} \u79D2`;
1578
+ };
1579
+ var resolveAgentImageModelIdentity = (agentConfig) => {
1580
+ let providerKey = (agentConfig.provider || "").toLowerCase();
1581
+ let modelName = agentConfig.model ?? "";
1582
+ if (modelName.includes("/")) {
1583
+ const slash = modelName.indexOf("/");
1584
+ if (!providerKey) providerKey = modelName.slice(0, slash);
1585
+ modelName = modelName.slice(slash + 1);
1586
+ }
1587
+ try {
1588
+ return {
1589
+ providerKey,
1590
+ modelConfig: getModelConfig(providerKey, modelName)
1591
+ };
1592
+ } catch {
1593
+ try {
1594
+ const detected = getProviderByModelName(modelName);
1595
+ if (!detected) {
1596
+ return { providerKey, modelConfig: null };
1597
+ }
1598
+ return {
1599
+ providerKey: detected,
1600
+ modelConfig: getModelConfig(detected, modelName)
1601
+ };
1602
+ } catch {
1603
+ return { providerKey, modelConfig: null };
1604
+ }
1605
+ }
1606
+ };
1607
+ var EXPLICIT_IMAGE_GENERATION_TOOL_NAMES = /* @__PURE__ */ new Set([
1608
+ "openAIGptImage",
1609
+ "openAIGptImageGenerate",
1610
+ "openAIGptImageEdit",
1611
+ "chatgptWebImageGenerate",
1612
+ "geminiFlashImage",
1613
+ "geminiProImagePreview"
1614
+ ]);
1615
+ var agentUsesExplicitImageGenerationTool = (agentConfig) => {
1616
+ const toolNames = Array.isArray(agentConfig.tools) ? agentConfig.tools : Array.isArray(agentConfig.toolNames) ? agentConfig.toolNames : [];
1617
+ return toolNames.some(
1618
+ (name) => typeof name === "string" && EXPLICIT_IMAGE_GENERATION_TOOL_NAMES.has(name.trim())
1619
+ );
1620
+ };
1621
+ var resolveImageGenerationStreamingState = (agentConfig, args) => {
1622
+ const { modelConfig } = resolveAgentImageModelIdentity(agentConfig);
1623
+ const hasImageOutput = !!(modelConfig?.hasImageOutput ?? modelConfig?.supportsImageOutput) || agentConfig.imageConfig?.enabled === true || agentUsesExplicitImageGenerationTool(agentConfig);
1624
+ if (!hasImageOutput) {
1625
+ return void 0;
1626
+ }
1627
+ const currentProfile = modelConfig?.imageGenerationProfiles?.find(
1628
+ (profile) => profile.imageModel === modelConfig.name
1629
+ );
1630
+ const usesWebImageTool = agentUsesExplicitImageGenerationTool(agentConfig) && (Array.isArray(agentConfig.tools) ? agentConfig.tools : []).includes("chatgptWebImageGenerate");
1631
+ return {
1632
+ kind: "image_generation",
1633
+ stage: args?.stage ?? args?.previous?.stage ?? "submitted",
1634
+ startedAt: args?.previous?.startedAt ?? Date.now(),
1635
+ waitHint: formatImageWaitHint(modelConfig?.imageGenerationWaitTimeSeconds) ?? (usesWebImageTool ? "\u7F51\u9875\u751F\u56FE\u901A\u5E38\u9700\u8981 30 \u79D2\u5230\u51E0\u5206\u949F\uFF0C\u5207\u6362\u5BF9\u8BDD\u4E0D\u4F1A\u4E2D\u65AD" : "\u901A\u5E38\u9700\u8981\u51E0\u5341\u79D2"),
1636
+ profileLabel: currentProfile?.label
1637
+ };
1638
+ };
1639
+
1640
+ // packages/ai/agent/turnToolContext.ts
1641
+ var KNOWN_MENTION_RESOURCE_TYPES = /* @__PURE__ */ new Set([
1642
+ "tool",
1643
+ "page",
1644
+ "agent",
1645
+ "space"
1646
+ ]);
1647
+ function extractMentionsWithSafety(userInput) {
1648
+ const toolNames = [];
1649
+ const mentionedPageKeys = [];
1650
+ const unresolvedReasons = [];
1651
+ let complete = true;
1652
+ if (!Array.isArray(userInput)) {
1653
+ return { toolNames, mentionedPageKeys, complete, unresolvedReasons };
1654
+ }
1655
+ const traverse = (nodes) => {
1656
+ for (const node of nodes) {
1657
+ if (!node || typeof node !== "object") continue;
1658
+ if (node.type === "mention") {
1659
+ const resourceType = asTrimmedString(node.resourceType);
1660
+ const resourceId = asTrimmedString(node.resourceId);
1661
+ if (!resourceType || !KNOWN_MENTION_RESOURCE_TYPES.has(resourceType)) {
1662
+ complete = false;
1663
+ unresolvedReasons.push(
1664
+ `unknown or missing mention resourceType: "${resourceType || "empty"}"`
1665
+ );
1666
+ } else if (!resourceId) {
1667
+ complete = false;
1668
+ unresolvedReasons.push(
1669
+ `missing mention resourceId for type "${resourceType}"`
1670
+ );
1671
+ } else {
1672
+ switch (resourceType) {
1673
+ case "tool":
1674
+ toolNames.push(resourceId);
1675
+ break;
1676
+ case "page":
1677
+ mentionedPageKeys.push(resourceId);
1678
+ break;
1679
+ case "agent":
1680
+ case "space":
1681
+ break;
1682
+ }
1683
+ }
1684
+ }
1685
+ if (typeof node.pageKey === "string" && node.pageKey.trim()) {
1686
+ mentionedPageKeys.push(node.pageKey.trim());
1687
+ }
1688
+ if (Array.isArray(node.children)) {
1689
+ traverse(node.children);
1690
+ }
1691
+ }
1692
+ };
1693
+ try {
1694
+ traverse(userInput);
1695
+ } catch (error) {
1696
+ complete = false;
1697
+ unresolvedReasons.push(`failed to traverse userInput mentions: ${error?.message || error}`);
1698
+ }
1699
+ return {
1700
+ toolNames: [...new Set(toolNames)],
1701
+ mentionedPageKeys: [...new Set(mentionedPageKeys)],
1702
+ complete,
1703
+ unresolvedReasons
1704
+ };
1705
+ }
1706
+ async function resolveTurnToolContext(input) {
1707
+ const unresolvedReasons = [];
1708
+ let isComplete = true;
1709
+ const mentionResult = extractMentionsWithSafety(input.userInput);
1710
+ if (!mentionResult.complete) {
1711
+ isComplete = false;
1712
+ unresolvedReasons.push(...mentionResult.unresolvedReasons);
1713
+ }
1714
+ const mentionedToolNames = canonicalizeToolNames(mentionResult.toolNames);
1715
+ const agentRefs = Array.isArray(input.agentConfig?.references) ? input.agentConfig.references : [];
1716
+ const dialogExtraRefs = Array.isArray(input.dialogConfig?.extraReferences) ? input.dialogConfig.extraReferences : [];
1717
+ const mergedReferences = mergeReferences(agentRefs, dialogExtraRefs);
1718
+ let refAssets = {
1719
+ references: [],
1720
+ referencedTools: [],
1721
+ recommendedSkillTools: [],
1722
+ recommendedSkillHints: [],
1723
+ skillPromptPatches: [],
1724
+ contentByKey: /* @__PURE__ */ new Map()
1725
+ };
1726
+ if (mergedReferences.length > 0) {
1727
+ try {
1728
+ refAssets = await resolveReferenceAssets(
1729
+ mergedReferences,
1730
+ input.dispatch
1731
+ );
1732
+ for (const ref of mergedReferences) {
1733
+ if (ref?.dbKey && !refAssets.contentByKey.has(ref.dbKey)) {
1734
+ isComplete = false;
1735
+ unresolvedReasons.push(`failed to resolve reference content for "${ref.dbKey}"`);
1736
+ }
1737
+ }
1738
+ } catch (error) {
1739
+ isComplete = false;
1740
+ unresolvedReasons.push(`failed to resolve reference assets: ${error?.message || error}`);
1741
+ }
1742
+ }
1743
+ let attachmentKinds = attachmentKindsInContent(input.userInput);
1744
+ let attachmentKindsIncomplete = false;
1745
+ let contextToolsResult = {
1746
+ tools: [],
1747
+ recommendedSkillTools: [],
1748
+ recommendedSkillHints: [],
1749
+ skillPromptPatches: [],
1750
+ contentByKey: /* @__PURE__ */ new Map()
1751
+ };
1752
+ const hasContextEngine = Boolean(
1753
+ input.state && input.dispatch && input.state.message
1754
+ );
1755
+ if (hasContextEngine) {
1756
+ try {
1757
+ const agentConfigWithReferences = {
1758
+ ...input.agentConfig ?? {},
1759
+ references: refAssets.references,
1760
+ referencedTools: refAssets.referencedTools,
1761
+ recommendedSkillTools: refAssets.recommendedSkillTools,
1762
+ recommendedSkillHints: refAssets.recommendedSkillHints,
1763
+ skillPromptPatches: refAssets.skillPromptPatches
1764
+ };
1765
+ const keySets = await getFullChatContextKeys(
1766
+ input.state,
1767
+ input.dispatch,
1768
+ agentConfigWithReferences,
1769
+ input.userInput,
1770
+ input.dialogConfig ?? void 0
1771
+ );
1772
+ attachmentKinds = [...keySets.attachmentKinds ?? []];
1773
+ attachmentKindsIncomplete = keySets.attachmentKindsIncomplete === true;
1774
+ for (const pk of mentionResult.mentionedPageKeys) {
1775
+ keySets.currentInputKeys.add(pk);
1776
+ }
1777
+ const finalKeys = deduplicateContextKeys(keySets);
1778
+ const allContextKeys = /* @__PURE__ */ new Set([
1779
+ ...finalKeys.botInstructionsContext,
1780
+ ...finalKeys.currentInputContext,
1781
+ ...finalKeys.historyContext,
1782
+ ...finalKeys.botKnowledgeContext
1783
+ ]);
1784
+ if (allContextKeys.size > 0) {
1785
+ contextToolsResult = await resolveToolsFromKeys(
1786
+ Array.from(allContextKeys),
1787
+ input.dispatch,
1788
+ refAssets.contentByKey
1789
+ );
1790
+ }
1791
+ } catch (error) {
1792
+ isComplete = false;
1793
+ unresolvedReasons.push(`failed to resolve context keys: ${error?.message || error}`);
1794
+ }
1795
+ } else if (mentionResult.mentionedPageKeys.length > 0) {
1796
+ isComplete = false;
1797
+ unresolvedReasons.push("cannot inspect mentioned pages without store dispatch");
1798
+ }
1799
+ if (attachmentKindsIncomplete) {
1800
+ isComplete = false;
1801
+ unresolvedReasons.push(
1802
+ "attachment kinds before summarization are not in memory (pending discovery)"
1803
+ );
1804
+ }
1805
+ const attachmentToolNames = toolsForAttachmentKinds(attachmentKinds);
1806
+ const allReferencedTools = [
1807
+ ...refAssets.referencedTools ?? [],
1808
+ ...contextToolsResult.tools ?? [],
1809
+ ...attachmentToolNames
1810
+ ];
1811
+ const referencedToolNames = canonicalizeToolNames(allReferencedTools);
1812
+ const recommendedSkillTools = [
1813
+ ...refAssets.recommendedSkillTools ?? [],
1814
+ ...contextToolsResult.recommendedSkillTools ?? []
1815
+ ];
1816
+ const recommendedSkillHints = [
1817
+ ...refAssets.recommendedSkillHints ?? [],
1818
+ ...contextToolsResult.recommendedSkillHints ?? []
1819
+ ];
1820
+ const skillPromptPatches = [
1821
+ ...refAssets.skillPromptPatches ?? [],
1822
+ ...contextToolsResult.skillPromptPatches ?? []
1823
+ ];
1824
+ return {
1825
+ referencedToolNames,
1826
+ attachmentToolNames,
1827
+ mentionedToolNames,
1828
+ complete: isComplete,
1829
+ ...unresolvedReasons.length > 0 ? { unresolvedReasons } : {},
1830
+ resolvedReferences: refAssets.references,
1831
+ referencedTools: refAssets.referencedTools,
1832
+ contextTools: contextToolsResult.tools,
1833
+ recommendedSkillTools,
1834
+ recommendedSkillHints,
1835
+ skillPromptPatches,
1836
+ referenceContentCache: refAssets.contentByKey,
1837
+ mergedContentCache: new Map([
1838
+ ...refAssets.contentByKey,
1839
+ ...contextToolsResult.contentByKey
1840
+ ])
1841
+ };
1842
+ }
1843
+
1844
+ export {
1845
+ buildForegroundTurnAdmissionFetchInit,
1846
+ consumeAgentRunStream,
1847
+ projectDesktopToolUiContent,
1848
+ compressOldToolResults,
1849
+ trimMessagesWithSummary,
1850
+ validateAccessAndBalance,
1851
+ buildStaticContexts,
1852
+ buildDynamicContexts,
1853
+ mergeContexts,
1854
+ mergeAgentToolsWithRuntime,
1855
+ applyImageConfigRuntimeOverride,
1856
+ resolveImageGenerationStreamingState,
1857
+ resolveTurnToolContext
1858
+ };