nolo-cli 0.32.0 → 0.33.0-alpha.11

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 (179) hide show
  1. package/README.md +6 -12
  2. package/{_executeModel-LTMSIBS4.js → _executeModel-YXWAXPWQ.js} +77 -67
  3. package/{action-HI3VRQLP.js → action-OQWPNKAH.js} +17 -15
  4. package/{addContentAction-NCURJ6PK.js → addContentAction-YVINZQTF.js} +14 -13
  5. package/{addDialogAgentAction-RCY4ECF4.js → addDialogAgentAction-6IOCIEPI.js} +14 -13
  6. package/{agentDeleteCommand-D3MYZK6E.js → agentDeleteCommand-VGHWJN5T.js} +44 -60
  7. package/{agentEmailCommands-6BXS574I.js → agentEmailCommands-ZLRF35I3.js} +91 -81
  8. package/{agentGrantCommands-E7ZZFRHK.js → agentGrantCommands-2LEZDADN.js} +2 -2
  9. package/{agentListCommands-SF3HEUTT.js → agentListCommands-OHZJ7AFP.js} +75 -79
  10. package/{agentMachineCommands-YARVXRR6.js → agentMachineCommands-62PHPGTK.js} +43 -59
  11. package/{agentPullCommand-ARSIDNVC.js → agentPullCommand-TSWAJPS2.js} +5 -5
  12. package/agentRecordCommands-CW2JWERD.js +113 -0
  13. package/agentRunCommand-O4HV7YWA.js +131 -0
  14. package/{agentRuntimeLocal-ATGJY6WC.js → agentRuntimeLocal-4PSBNUOE.js} +37 -51
  15. package/{agentSlice-4XWW344Y.js → agentSlice-OUTQ5O72.js} +16 -14
  16. package/{appDeleteCommands-63JO7RXS.js → appDeleteCommands-VTDBVHYR.js} +40 -56
  17. package/{appDeployCommands-Y7EWYUGM.js → appDeployCommands-WOUP7MDA.js} +40 -56
  18. package/{appDeployStatusCommands-ZBEY3DWB.js → appDeployStatusCommands-N2NWZKEN.js} +40 -56
  19. package/{appGetCommands-QSSOSEYL.js → appGetCommands-GYKLWWCA.js} +40 -56
  20. package/{appListCommands-PH3XWNDX.js → appListCommands-RUWBSEJK.js} +40 -56
  21. package/{authCommand-BBDHMSO6.js → authCommand-YVXVH25I.js} +21 -20
  22. package/{authCommands-4UDEKRE6.js → authCommands-WTW6MEYS.js} +10 -10
  23. package/chatQueueReduxAdapter-2QJAD4KQ.js +181 -0
  24. package/{chunk-EEF23OOK.js → chunk-266VUBLK.js} +7 -7
  25. package/{chunk-TEYN42N3.js → chunk-2IVEXF7P.js} +11 -4
  26. package/{chunk-2HXKAPH7.js → chunk-2QLAVHVK.js} +6 -6
  27. package/{chunk-WTGCTVJG.js → chunk-2QTEYCR7.js} +3 -6
  28. package/{chunk-DOISARTV.js → chunk-2UECQ7RE.js} +1 -1
  29. package/{chunk-E3APEOIM.js → chunk-3GZXL6FM.js} +4 -19
  30. package/{chunk-KGEVMUMI.js → chunk-3RUW3ONU.js} +11 -11
  31. package/{chunk-RXVX5LFR.js → chunk-3UG2IIZ3.js} +1 -1
  32. package/{chunk-O5OMJPPF.js → chunk-3WXRAHCG.js} +6 -5
  33. package/{chunk-V54H24CQ.js → chunk-4F5M2MW5.js} +3 -3
  34. package/{chunk-2ZRP5RUG.js → chunk-4OV7DXFJ.js} +12 -11
  35. package/{chunk-W367V5CH.js → chunk-54BAYVCY.js} +404 -117
  36. package/{chunk-GAF5X6B7.js → chunk-5QW3O3ET.js} +284 -310
  37. package/{chunk-DLWCWUNW.js → chunk-64OVNZXE.js} +1197 -757
  38. package/{chunk-ODS2MVMU.js → chunk-66CWPJK2.js} +19 -303
  39. package/{chunk-PTHDLIRB.js → chunk-6KOS7ZBZ.js} +1 -1
  40. package/{chunk-MXFQHRSS.js → chunk-6XIE5ZGI.js} +1 -1
  41. package/{chunk-ATK5WJOA.js → chunk-6YXDOOSH.js} +4 -4
  42. package/{chunk-SWYMCHM7.js → chunk-75U775RZ.js} +69 -1
  43. package/{chunk-UDA3ZYLW.js → chunk-7YYHKBJP.js} +31 -72
  44. package/chunk-ADLYMQB6.js +642 -0
  45. package/{chunk-ZWJOGMKH.js → chunk-AETZ7AD6.js} +1 -1
  46. package/{chunk-43EPBPZ2.js → chunk-ASDXPOJH.js} +2 -2
  47. package/{chunk-44HACRCK.js → chunk-BANYWEYY.js} +4 -4
  48. package/chunk-BFPSVRCQ.js +1799 -0
  49. package/{chunk-TOW4E763.js → chunk-BJIRLHJR.js} +2 -0
  50. package/{chunk-ZJ2WITOO.js → chunk-BQXOGBFN.js} +2 -2
  51. package/{chunk-4PNU7W7K.js → chunk-C7H5GMXT.js} +107 -125
  52. package/chunk-CPYYM4RJ.js +98 -0
  53. package/{chunk-3GZT3L6F.js → chunk-DDVIBKIB.js} +326 -481
  54. package/{chunk-2K4NDPT5.js → chunk-DFUPZE6V.js} +20 -12
  55. package/{chunk-BGTUGS3T.js → chunk-DKMOY3QI.js} +4 -30
  56. package/chunk-EGRJC4ZN.js +91 -0
  57. package/{chunk-K6QEHQZ3.js → chunk-EKLRRZIN.js} +1 -1
  58. package/{chunk-6HYVJV7B.js → chunk-ESHYE7WU.js} +2 -1
  59. package/{chunk-XFG3BAKN.js → chunk-FMEVI5TG.js} +65 -0
  60. package/{chunk-U4TRT5V4.js → chunk-GEPHJJW4.js} +1 -1
  61. package/chunk-GJXRIOLS.js +241 -0
  62. package/{chunk-VP4WJWKW.js → chunk-GM6PU7B6.js} +431 -345
  63. package/chunk-HS7MLR74.js +38 -0
  64. package/{chunk-3AUWC6EM.js → chunk-HUCT7HID.js} +5 -84
  65. package/chunk-IDAU4UFS.js +437 -0
  66. package/{chunk-Q76I4SXI.js → chunk-IHEC7VBF.js} +1 -1
  67. package/{chunk-OWHNFZNW.js → chunk-IKWTTKWG.js} +4 -4
  68. package/{chunk-3LY4F7SV.js → chunk-INZZJSQF.js} +348 -331
  69. package/{chunk-ZJH3LKEW.js → chunk-IR6W62Q6.js} +102 -15
  70. package/{chunk-RH53LMEJ.js → chunk-J44TVX2O.js} +2 -4
  71. package/{chunk-CF2WZF4N.js → chunk-J6WH4PYZ.js} +0 -8
  72. package/chunk-KHCLMKZZ.js +3062 -0
  73. package/{chunk-WHLVPK32.js → chunk-KMSZPTM6.js} +27 -3
  74. package/{chunk-L3GCUVOH.js → chunk-KSRFVP36.js} +1 -1
  75. package/{chunk-XDHHF73Q.js → chunk-LUIHOUZC.js} +95 -95
  76. package/{chunk-UOJRKY5J.js → chunk-M2YMQOLC.js} +44 -53
  77. package/chunk-M3JEW6N6.js +193 -0
  78. package/{chunk-MITD7CON.js → chunk-MDIAECHA.js} +1461 -301
  79. package/{chunk-IXZX5CJK.js → chunk-MQRZ5QUH.js} +1 -1
  80. package/{chunk-3ASDTTEI.js → chunk-MRWGHF56.js} +2 -0
  81. package/{chunk-Q3CSL43H.js → chunk-N4XRDM26.js} +1 -1
  82. package/{chunk-D34RI6NI.js → chunk-NNWHHCVP.js} +75 -1
  83. package/{chunk-CAENRKNJ.js → chunk-OR2HNLVO.js} +126 -88
  84. package/chunk-OW765XBU.js +10 -0
  85. package/{chunk-VMWR7VNI.js → chunk-PRMMCFIN.js} +13 -9
  86. package/{chunk-JZPBVBIY.js → chunk-QTZD6HBK.js} +18 -8
  87. package/chunk-RCFIB45Q.js +28 -0
  88. package/{chunk-7S54ZGF6.js → chunk-RJKIB55Y.js} +256 -12
  89. package/chunk-RPRRIFXV.js +231 -0
  90. package/chunk-RQFO3CAF.js +300 -0
  91. package/chunk-RY57GLGW.js +188 -0
  92. package/{chunk-YHGHADBQ.js → chunk-SCUETSRP.js} +4 -4
  93. package/{chunk-TA6EA2A3.js → chunk-TFK3HUNQ.js} +182 -20
  94. package/{chunk-LAXMH7JY.js → chunk-UM4H3URE.js} +18 -15
  95. package/{chunk-6YABCOFU.js → chunk-UNHKVD2N.js} +1 -1
  96. package/{chunk-G5GVZAXF.js → chunk-UNOTBWZZ.js} +15 -19
  97. package/{chunk-GE6IWA5N.js → chunk-UNZDCI3O.js} +126 -1
  98. package/chunk-URMS4XY2.js +10 -0
  99. package/{chunk-SFWZUTCI.js → chunk-VBUQYOX7.js} +2 -2
  100. package/{chunk-FXFGNOT2.js → chunk-VFVCYIRQ.js} +1 -1
  101. package/chunk-VIDPVFP3.js +20 -0
  102. package/{chunk-5RDLGLAP.js → chunk-WJSW43QZ.js} +4 -7
  103. package/{chunk-CF7S2RYZ.js → chunk-WLH5BAKX.js} +6 -6
  104. package/{chunk-VVEH6XUE.js → chunk-X2DAEZ3X.js} +1 -1
  105. package/{chunk-2IJAKBK2.js → chunk-X664KVEV.js} +426 -246
  106. package/{chunk-3FCNXC2J.js → chunk-XRO5VGQ6.js} +3735 -1394
  107. package/chunk-Y5GCAMGP.js +9 -0
  108. package/{chunk-O3JR45Q2.js → chunk-YBMI5JAH.js} +44 -44
  109. package/{chunk-V42OE5HT.js → chunk-YDTYDA5W.js} +3 -3
  110. package/chunk-YYLHWIW6.js +48 -0
  111. package/{chunk-AOS5IN2I.js → chunk-ZHYK3N56.js} +1 -1
  112. package/{chunk-PJ2DDQQM.js → chunk-ZURFOV5J.js} +2 -2
  113. package/{chunk-3UGKATZQ.js → chunk-ZWS6DUHX.js} +26 -435
  114. package/chunk-ZZ2MH7LE.js +84 -0
  115. package/{cliExecutor-BBUVQU4L.js → cliExecutor-DW3PHGEL.js} +2 -2
  116. package/{clipboardy-BVE3LVEH.js → clipboardy-MMBYVRLF.js} +166 -372
  117. package/{codingSkills-V35TRR4Y.js → codingSkills-DY5MINPG.js} +5 -4
  118. package/{createAgentAutomationAction-WLRNE7C4.js → createAgentAutomationAction-H6ZRPXBR.js} +41 -31
  119. package/createDialogAction-UJ6LFJYM.js +61 -0
  120. package/{createPageAction-7YROVZ3W.js → createPageAction-KVPT3IRK.js} +57 -47
  121. package/{db-6DPSJ6WT.js → db-3H3JECGY.js} +45 -5
  122. package/{dbSlice-BBL3PEVW.js → dbSlice-UI2VCBLG.js} +13 -12
  123. package/{deleteFile-RJTEPOT4.js → deleteFile-XQXPBFFB.js} +7 -6
  124. package/dialogCommands-6ASXJP3H.js +82 -0
  125. package/{dialogSlice-N4HPG6HM.js → dialogSlice-B7KCGHMY.js} +37 -29
  126. package/{docCreateCommands-GRA5BHSA.js → docCreateCommands-S4E4MKVC.js} +42 -56
  127. package/{docDeleteCommands-ONIJM5MD.js → docDeleteCommands-M7XLKWRM.js} +44 -58
  128. package/{docReadCommands-H55VQ2US.js → docReadCommands-LSCMW2FR.js} +42 -56
  129. package/{docStore-B5AHDNW5.js → docStore-ZYWZWIRB.js} +40 -30
  130. package/{docUpdateCommands-ZQIQVGC2.js → docUpdateCommands-OMRBAFOB.js} +45 -59
  131. package/{fetchMessages-VPPQDDZ4.js → fetchMessages-7QRCCRYK.js} +3 -3
  132. package/{getPricing-QO5TYNCK.js → getPricing-L2ENXWHV.js} +7 -6
  133. package/{handleSendMessageAction-IN5XX5U7.js → handleSendMessageAction-Y2XKODRT.js} +39 -31
  134. package/index.js +74 -74
  135. package/{lib-FYYBQIXS.js → lib-2ZTNRXR4.js} +432 -183
  136. package/{localDialogRead-3DBXVYXS.js → localDialogRead-SLMPV5SK.js} +2 -2
  137. package/{localRuntimeAuthority-NDUA2D7Y.js → localRuntimeAuthority-S77B5QVB.js} +10 -4
  138. package/{localRuntimeDb-GKYRBWLQ.js → localRuntimeDb-N3H3HQ7G.js} +1 -1
  139. package/{machineCommands-H3UMKE76.js → machineCommands-62RUZVSW.js} +95 -85
  140. package/{machineInfo-M6KB6HZN.js → machineInfo-66ZFUMLE.js} +1 -1
  141. package/machineWsRunDispatch-L3HD3FSF.js +129 -0
  142. package/{models-WDUTTYFS.js → models-OX2S5C6Q.js} +2 -2
  143. package/{offlineMarxistsAgentCommand-E6LUG63A.js → offlineMarxistsAgentCommand-GEH6SNNA.js} +1 -1
  144. package/package.json +1 -4
  145. package/{read-64OQDO3I.js → read-2VHEHCAN.js} +8 -7
  146. package/{readDocTool-MXM3T6PE.js → readDocTool-CSWD6NPC.js} +1 -2
  147. package/{readlineWorkspace-XVJZDCSC.js → readlineWorkspace-3MOJWFM7.js} +3358 -3409
  148. package/{removeDialogAgentAction-NEKVAMSH.js → removeDialogAgentAction-2T7BPM3T.js} +19 -17
  149. package/{runAgentClientLoop-H7U53QB6.js → runAgentClientLoop-Y5UW544I.js} +73 -64
  150. package/{runtimeDoctorCommands-WI2YZUSJ.js → runtimeDoctorCommands-KHGQKT3B.js} +6 -6
  151. package/{setDialogExtraReferencesAction-WTOHQDIV.js → setDialogExtraReferencesAction-GPT37HTW.js} +15 -14
  152. package/{setPrimaryDialogAgentAction-LDJOYC4F.js → setPrimaryDialogAgentAction-3746P7IW.js} +19 -17
  153. package/{settingSlice-4M37TN7V.js → settingSlice-FIFOQ6OR.js} +16 -14
  154. package/{skillDiscovery-5U6RYAHN.js → skillDiscovery-KLLKXPUO.js} +4 -4
  155. package/{slateUtils-2M7MUTWX.js → slateUtils-VO2FU36K.js} +1 -1
  156. package/{spaceCommands-7VVKJBDV.js → spaceCommands-NKSBD5G3.js} +45 -241
  157. package/{spaceSlice-T6YK6D34.js → spaceSlice-L44CI2QR.js} +39 -61
  158. package/{streamAgentChatTurn-RQ63QFQ7.js → streamAgentChatTurn-7DU4Z2VJ.js} +1262 -150
  159. package/{switchDialogAgentAction-XVWGKR2Z.js → switchDialogAgentAction-MQTUTQHL.js} +14 -13
  160. package/syncMapping-RK2MANUX.js +43 -0
  161. package/{tableCommands-RJZ3V4TF.js → tableCommands-64FZBAI3.js} +9 -8
  162. package/{toolApiClient-ARGFDJAG.js → toolApiClient-B2MFXMEG.js} +3 -3
  163. package/tools-2JI52WJP.js +99 -0
  164. package/{tuiSummaryLlmCaller-SRZ4QQUP.js → tuiSummaryLlmCaller-EAWQ3IZX.js} +25 -21
  165. package/{updateCommands-AK2RDOFR.js → updateCommands-MNDUIKN7.js} +2 -2
  166. package/{updateDialogTitleAction-BBDSWHNG.js → updateDialogTitleAction-HW33OIJI.js} +49 -38
  167. package/agentRecordCommands-JFZRQJQ4.js +0 -103
  168. package/agentRunCommand-NOX5FLKO.js +0 -121
  169. package/chunk-AYMOSAHE.js +0 -3158
  170. package/chunk-D2BPX6DQ.js +0 -1707
  171. package/chunk-DCDL3GC4.js +0 -171
  172. package/chunk-F3MP7CP6.js +0 -73
  173. package/chunk-WZSRQNQG.js +0 -2587
  174. package/createDialogAction-Y6YV64QB.js +0 -52
  175. package/dialogCommands-XLO5CAHZ.js +0 -95
  176. package/machineWsRunDispatch-HONRUK3R.js +0 -119
  177. package/tools-KYZX3BGO.js +0 -90
  178. package/{chunk-Z5MXSEOJ.js → chunk-RQSOAMPJ.js} +2 -2
  179. package/{chunk-JDSUTNYY.js → chunk-SAQQLJZ5.js} +3 -3
@@ -1,15 +1,16 @@
1
+ import {
2
+ getFinalPrice,
3
+ getModelPricing,
4
+ getPrices,
5
+ hasExplicitAgentPricing
6
+ } from "./chunk-3GZXL6FM.js";
1
7
  import {
2
8
  applyModelLayerOverride
3
9
  } from "./chunk-LTRXGFMS.js";
4
10
  import {
5
- buildCliPrompt
6
- } from "./chunk-ATNTHIZI.js";
7
- import {
8
- assertDesktopAgentRuntimeTurnBodyHasNoRawSecrets,
9
- buildDesktopAgentRuntimeAgentConfigSnapshot,
10
- buildDesktopAgentRuntimeDialogHistorySnapshot
11
- } from "./chunk-OIQPORYI.js";
12
- import "./chunk-T27IEBNQ.js";
11
+ buildStaticUserPolicyContext,
12
+ resolveSpaceContextPreloadPlan
13
+ } from "./chunk-RPRRIFXV.js";
13
14
  import {
14
15
  INVALID_TOOL_ARGS_REPLACEMENT,
15
16
  buildInvalidToolCallSelfHealResult,
@@ -22,28 +23,17 @@ import {
22
23
  sanitizeOutboundResponsesInput,
23
24
  sendOpenAICompletionsRequest,
24
25
  updateTotalUsage
25
- } from "./chunk-O3JR45Q2.js";
26
+ } from "./chunk-YBMI5JAH.js";
27
+ import {
28
+ getPublicImageAgentDefaultProfile,
29
+ getPublicImageAgentMode
30
+ } from "./chunk-VIDPVFP3.js";
26
31
  import "./chunk-JEXVIMYZ.js";
27
32
  import {
28
33
  prepareTools
29
- } from "./chunk-XDHHF73Q.js";
30
- import {
31
- applyImageConfigRuntimeOverride,
32
- buildDynamicContexts,
33
- buildStaticContexts,
34
- compressOldToolResults,
35
- deduplicateContextKeys,
36
- getFullChatContextKeys,
37
- mergeAgentToolsWithRuntime,
38
- mergeContexts,
39
- resolveImageGenerationStreamingState,
40
- trimMessagesWithSummary,
41
- tryPreprocessWebImageOrReject,
42
- validateAccessAndBalance
43
- } from "./chunk-AYMOSAHE.js";
44
- import "./chunk-N7J63Q6C.js";
45
- import "./chunk-DOISARTV.js";
34
+ } from "./chunk-LUIHOUZC.js";
46
35
  import {
36
+ fetchReferenceContents,
47
37
  generateRequestBody,
48
38
  isResponsesConversationStateRejection,
49
39
  mergeReferences,
@@ -55,157 +45,220 @@ import {
55
45
  resolveToolsFromKeys,
56
46
  selectResponsesConversationState,
57
47
  updateResponsesConversationState
58
- } from "./chunk-W367V5CH.js";
59
- import "./chunk-YHGHADBQ.js";
60
- import "./chunk-3UGKATZQ.js";
61
- import {
62
- extractImagePartsFromResponseOutput,
63
- extractTextFromResponseOutput,
64
- toResponsesTools
65
- } from "./chunk-D34RI6NI.js";
66
- import {
67
- isOpenAiResponsesModel
68
- } from "./chunk-UDA3ZYLW.js";
69
- import "./chunk-XFG3BAKN.js";
48
+ } from "./chunk-54BAYVCY.js";
49
+ import "./chunk-HS7MLR74.js";
50
+ import "./chunk-SCUETSRP.js";
70
51
  import {
71
52
  createSSEParser,
53
+ getAllToolRuns,
54
+ resolveAgentRecommendedSkillNames,
55
+ resolveAgentRequiredPackIds,
72
56
  shouldBlockForGptPro,
73
57
  waitForAbortableDelay
74
- } from "./chunk-MITD7CON.js";
75
- import "./chunk-Z5MXSEOJ.js";
76
- import "./chunk-KXKQO4Q6.js";
77
- import "./chunk-TEYN42N3.js";
58
+ } from "./chunk-MDIAECHA.js";
59
+ import "./chunk-RQSOAMPJ.js";
60
+ import "./chunk-2IVEXF7P.js";
78
61
  import "./chunk-KQHGZWSV.js";
62
+ import "./chunk-75U775RZ.js";
63
+ import "./chunk-INZZJSQF.js";
79
64
  import {
80
- resolveRuntimeToolSurfaceForAgent
81
- } from "./chunk-D2BPX6DQ.js";
82
- import "./chunk-EEF23OOK.js";
83
- import "./chunk-43EPBPZ2.js";
84
- import "./chunk-F3MP7CP6.js";
85
- import "./chunk-SWYMCHM7.js";
86
- import "./chunk-44HACRCK.js";
87
- import "./chunk-TA6EA2A3.js";
88
- import "./chunk-DCDL3GC4.js";
65
+ extractCategorizedMentions
66
+ } from "./chunk-GM6PU7B6.js";
67
+ import "./chunk-63W5N6P3.js";
68
+ import "./chunk-VF4K2QE6.js";
89
69
  import {
90
- getPublicImageAgentDefaultProfile,
91
- getPublicImageAgentMode
92
- } from "./chunk-E3APEOIM.js";
93
- import "./chunk-3LY4F7SV.js";
70
+ getDocState
71
+ } from "./chunk-266VUBLK.js";
72
+ import "./chunk-ASDXPOJH.js";
73
+ import "./chunk-TFK3HUNQ.js";
94
74
  import {
95
- selectCurrentSpaceId
96
- } from "./chunk-3FCNXC2J.js";
75
+ getCurrentSpaceId,
76
+ getCurrentSpaceIdRaw,
77
+ getViewMode,
78
+ selectCurrentTable,
79
+ selectTableRows
80
+ } from "./chunk-XRO5VGQ6.js";
81
+ import "./chunk-M3JEW6N6.js";
82
+ import "./chunk-IDAU4UFS.js";
97
83
  import {
84
+ PERSONALIZATION_DIALOG_CATEGORY,
98
85
  addToolMessage,
99
86
  addUserMessage,
87
+ buildPersonalizationDialogPolicyContext,
100
88
  estimateMissingUsage,
89
+ extractReferenceKeysFromMessage,
101
90
  finalizeTransientMessageOnError,
102
- getModelContextWindow,
103
- getModelInfo,
104
91
  messageStreamEnd,
105
92
  messageStreaming,
106
93
  prepareAndPersistUserMessage,
107
94
  removeTransientMessage,
108
- resolveBuiltinPlatformAgentRecord,
109
95
  selectAllMsgs,
110
96
  selectCurrentDialogConfig,
111
97
  selectDialogConfigByKey,
112
98
  updateTokens
113
- } from "./chunk-3GZT3L6F.js";
114
- import {
115
- estimateTokenCount
116
- } from "./chunk-BGTUGS3T.js";
99
+ } from "./chunk-DDVIBKIB.js";
100
+ import "./chunk-RCFIB45Q.js";
101
+ import "./chunk-EGRJC4ZN.js";
102
+ import "./chunk-YYLHWIW6.js";
103
+ import "./chunk-CWMSB67P.js";
104
+ import "./chunk-66CWPJK2.js";
117
105
  import {
118
106
  createCliChatTurnStream,
119
107
  getCliChatSession,
120
108
  startCliChatSession
121
- } from "./chunk-ATK5WJOA.js";
122
- import "./chunk-ODS2MVMU.js";
123
- import "./chunk-JZPBVBIY.js";
109
+ } from "./chunk-6YXDOOSH.js";
124
110
  import "./chunk-5RGU3J7P.js";
125
111
  import "./chunk-M76ECQRD.js";
112
+ import "./chunk-KSRFVP36.js";
126
113
  import {
127
- toErrorMessage
128
- } from "./chunk-HNMXYYJR.js";
129
- import "./chunk-DWLEOOGR.js";
114
+ assertDesktopAgentRuntimeTurnBodyHasNoRawSecrets,
115
+ buildDesktopAgentRuntimeAgentConfigSnapshot,
116
+ buildDesktopAgentRuntimeDialogHistorySnapshot
117
+ } from "./chunk-OIQPORYI.js";
118
+ import "./chunk-T27IEBNQ.js";
119
+ import {
120
+ projectToolMessageContent,
121
+ tryPreprocessWebImageOrReject
122
+ } from "./chunk-BFPSVRCQ.js";
123
+ import "./chunk-N7J63Q6C.js";
124
+ import "./chunk-ZWS6DUHX.js";
125
+ import {
126
+ extractImagePartsFromResponseOutput,
127
+ extractTextFromResponseOutput,
128
+ toResponsesTools
129
+ } from "./chunk-NNWHHCVP.js";
130
+ import "./chunk-7YYHKBJP.js";
131
+ import {
132
+ resolveRuntimeToolSurfaceForAgent
133
+ } from "./chunk-ADLYMQB6.js";
134
+ import {
135
+ getModelContextWindow,
136
+ getModelInfo,
137
+ resolveBuiltinPlatformAgentRecord
138
+ } from "./chunk-GJXRIOLS.js";
139
+ import {
140
+ estimateTokenCount,
141
+ planContextUsage
142
+ } from "./chunk-DKMOY3QI.js";
143
+ import {
144
+ isOpenAiResponsesModel
145
+ } from "./chunk-CPYYM4RJ.js";
146
+ import {
147
+ getApiEndpoint,
148
+ getModelConfig,
149
+ getProviderByModelName
150
+ } from "./chunk-DFUPZE6V.js";
151
+ import "./chunk-RQFO3CAF.js";
152
+ import "./chunk-QTZD6HBK.js";
153
+ import "./chunk-ZHXJ6M7T.js";
154
+ import {
155
+ buildLinkedSpacesSection,
156
+ buildSpaceContextLayer
157
+ } from "./chunk-2UECQ7RE.js";
158
+ import "./chunk-FMEVI5TG.js";
159
+ import "./chunk-HUCT7HID.js";
160
+ import {
161
+ TOOL_PACKS,
162
+ addDefaultSystemCapabilityTools,
163
+ applyDefaultWebToolPacks,
164
+ applyDisabledTools,
165
+ applySystemBuiltinSkillFilter,
166
+ expandEnabledPackPromptPatches,
167
+ expandEnabledPacks,
168
+ resolveEffectiveEnabledPacks
169
+ } from "./chunk-WLH5BAKX.js";
170
+ import "./chunk-AETZ7AD6.js";
171
+ import {
172
+ canonicalizeToolNames,
173
+ prioritizeToolNames
174
+ } from "./chunk-ZZ2MH7LE.js";
175
+ import "./chunk-KHCLMKZZ.js";
176
+ import {
177
+ resolveToolBaseUrl
178
+ } from "./chunk-BANYWEYY.js";
130
179
  import {
131
180
  addActiveController,
132
181
  clearPendingUserInputQueue,
133
182
  dequeueUserInput,
134
183
  removeActiveController,
135
184
  selectActiveControllers,
185
+ selectPendingFiles,
136
186
  selectPendingUserInputQueue,
137
187
  tokenUsageLiveUpdate
138
- } from "./chunk-3ASDTTEI.js";
139
- import "./chunk-V54H24CQ.js";
140
- import "./chunk-WTGCTVJG.js";
141
- import "./chunk-CWMSB67P.js";
188
+ } from "./chunk-MRWGHF56.js";
189
+ import "./chunk-DWLEOOGR.js";
190
+ import "./chunk-KXKQO4Q6.js";
142
191
  import {
143
- getApiEndpoint
144
- } from "./chunk-2K4NDPT5.js";
145
- import "./chunk-ZHXJ6M7T.js";
146
- import "./chunk-CAENRKNJ.js";
147
- import "./chunk-63W5N6P3.js";
148
- import "./chunk-VF4K2QE6.js";
149
- import "./chunk-KGEVMUMI.js";
192
+ buildCliPrompt
193
+ } from "./chunk-ATNTHIZI.js";
194
+ import {
195
+ toErrorMessage
196
+ } from "./chunk-HNMXYYJR.js";
197
+ import "./chunk-2QTEYCR7.js";
198
+ import "./chunk-OR2HNLVO.js";
199
+ import "./chunk-3RUW3ONU.js";
150
200
  import {
201
+ selectAiRecentContentLimit,
151
202
  selectCurrentServer,
152
- selectMaxExecutionTime
153
- } from "./chunk-G5GVZAXF.js";
203
+ selectGlobalPrompt,
204
+ selectKnowledgeCaptureLevel,
205
+ selectMaxExecutionTime,
206
+ selectSpaceContextLevel,
207
+ selectUserTonePreset
208
+ } from "./chunk-UNOTBWZZ.js";
209
+ import "./chunk-Y5GCAMGP.js";
154
210
  import {
155
211
  asRecordOrEmpty
156
212
  } from "./chunk-KX6YBIHG.js";
213
+ import "./chunk-UZ6XXCVR.js";
214
+ import "./chunk-4F5M2MW5.js";
157
215
  import {
158
216
  patch,
159
217
  read,
160
218
  selectById,
161
219
  write
162
- } from "./chunk-LAXMH7JY.js";
163
- import "./chunk-ZJ2WITOO.js";
220
+ } from "./chunk-UM4H3URE.js";
221
+ import {
222
+ createDialogMessageKeyAndId,
223
+ dialogMessageKey
224
+ } from "./chunk-KMSZPTM6.js";
225
+ import "./chunk-BQXOGBFN.js";
226
+ import {
227
+ asOptionalFiniteNumber
228
+ } from "./chunk-WWC7I6TA.js";
229
+ import {
230
+ asNonEmptyStringArray
231
+ } from "./chunk-I42VC5KR.js";
164
232
  import "./chunk-QSJ3HFEF.js";
165
233
  import {
166
234
  isSystemBuiltinTrustedAgentKey
167
- } from "./chunk-ZJH3LKEW.js";
168
- import {
169
- extractCustomId
170
- } from "./chunk-TOW4E763.js";
235
+ } from "./chunk-IR6W62Q6.js";
171
236
  import {
172
237
  selectIdentityToken,
173
238
  selectIdentityUser,
239
+ selectIdentityUserBalance,
174
240
  selectIdentityUserId,
175
241
  selectRuntimeCurrentServer
176
- } from "./chunk-2IJAKBK2.js";
242
+ } from "./chunk-X664KVEV.js";
177
243
  import {
178
244
  getIsDesktopApp,
179
245
  isAbortError
180
- } from "./chunk-5RDLGLAP.js";
181
- import "./chunk-LCBAMY2M.js";
182
- import "./chunk-4SN6J65J.js";
183
- import "./chunk-CF7PE763.js";
184
- import {
185
- extractCategorizedMentions
186
- } from "./chunk-VP4WJWKW.js";
187
- import "./chunk-L3GCUVOH.js";
188
- import {
189
- createDialogMessageKeyAndId,
190
- dialogMessageKey
191
- } from "./chunk-WHLVPK32.js";
192
- import {
193
- asOptionalFiniteNumber
194
- } from "./chunk-WWC7I6TA.js";
246
+ } from "./chunk-WJSW43QZ.js";
195
247
  import "./chunk-GBRG75BQ.js";
248
+ import "./chunk-OW765XBU.js";
196
249
  import {
197
250
  asTrimmedString
198
251
  } from "./chunk-3EUW3WEO.js";
199
252
  import "./chunk-U6VC4MU4.js";
253
+ import {
254
+ extractCustomId
255
+ } from "./chunk-BJIRLHJR.js";
200
256
  import {
201
257
  isRecord
202
258
  } from "./chunk-KUG52IAP.js";
203
- import "./chunk-3AUWC6EM.js";
204
- import "./chunk-CF7S2RYZ.js";
205
- import "./chunk-ZWJOGMKH.js";
206
- import "./chunk-WZSRQNQG.js";
207
- import "./chunk-UZ6XXCVR.js";
208
- import "./chunk-I42VC5KR.js";
259
+ import "./chunk-LCBAMY2M.js";
260
+ import "./chunk-4SN6J65J.js";
261
+ import "./chunk-CF7PE763.js";
209
262
  import {
210
263
  asOptionalTrimmedString
211
264
  } from "./chunk-G3SUCT4W.js";
@@ -391,6 +444,107 @@ function runChatQueueTurnEnd(payload) {
391
444
  };
392
445
  }
393
446
 
447
+ // packages/ai/agent/getFullChatContextKeys.ts
448
+ var difference = (arrA, arrB) => {
449
+ if (!arrA.length) return [];
450
+ if (!arrB.length) return [...arrA];
451
+ const exclude = new Set(arrB);
452
+ return arrA.filter((item) => !exclude.has(item));
453
+ };
454
+ var getFullChatContextKeys = async (state, dispatch, agentConfig, userInput, dialogConfig) => {
455
+ const msgs = selectAllMsgs(
456
+ state,
457
+ dialogConfig?.dbKey ? extractCustomId(dialogConfig.dbKey) : dialogConfig?.id
458
+ );
459
+ const botInstructionKeys = /* @__PURE__ */ new Set();
460
+ const botKnowledgeKeys = /* @__PURE__ */ new Set();
461
+ if (Array.isArray(agentConfig.references)) {
462
+ for (const ref of agentConfig.references) {
463
+ if (!ref?.dbKey) continue;
464
+ if (ref.type === "instruction") {
465
+ botInstructionKeys.add(ref.dbKey);
466
+ } else {
467
+ botKnowledgeKeys.add(ref.dbKey);
468
+ }
469
+ }
470
+ }
471
+ const currentInputKeys = /* @__PURE__ */ new Set();
472
+ if (Array.isArray(userInput)) {
473
+ for (const part of userInput) {
474
+ if (part?.pageKey) currentInputKeys.add(part.pageKey);
475
+ if (part?.dialogKey) currentInputKeys.add(part.dialogKey);
476
+ }
477
+ }
478
+ const historyKeys = /* @__PURE__ */ new Set();
479
+ const savedKeys = dialogConfig?.referenceKeys;
480
+ if (Array.isArray(savedKeys)) {
481
+ savedKeys.forEach((k) => historyKeys.add(k));
482
+ }
483
+ const scanContentParts = (msg) => {
484
+ if (!msg) return;
485
+ for (const key of extractReferenceKeysFromMessage(msg)) {
486
+ historyKeys.add(key);
487
+ }
488
+ };
489
+ if (msgs && msgs.length > 0) {
490
+ const summarizedBeforeId = dialogConfig?.summarizedBeforeId;
491
+ if (!summarizedBeforeId) {
492
+ for (const msg of msgs) scanContentParts(msg);
493
+ } else {
494
+ let foundMarker = false;
495
+ let startScan = false;
496
+ for (const msg of msgs) {
497
+ if (!startScan) {
498
+ if (msg.id === summarizedBeforeId) {
499
+ foundMarker = true;
500
+ startScan = true;
501
+ }
502
+ continue;
503
+ }
504
+ scanContentParts(msg);
505
+ }
506
+ if (!foundMarker) {
507
+ console.warn(`[getFullChatContextKeys] marker ${summarizedBeforeId} not found, scanning all`);
508
+ for (const msg of msgs) scanContentParts(msg);
509
+ }
510
+ }
511
+ }
512
+ return {
513
+ botInstructionKeys,
514
+ currentInputKeys,
515
+ historyKeys,
516
+ botKnowledgeKeys
517
+ };
518
+ };
519
+ var deduplicateContextKeys = (keys) => {
520
+ const {
521
+ botInstructionKeys,
522
+ currentInputKeys,
523
+ historyKeys,
524
+ botKnowledgeKeys
525
+ } = keys;
526
+ const finalBotInstructionKeys = Array.from(botInstructionKeys);
527
+ const finalCurrentInputKeys = difference(
528
+ Array.from(currentInputKeys),
529
+ finalBotInstructionKeys
530
+ );
531
+ const finalHistoryKeys = difference(Array.from(historyKeys), [
532
+ ...finalBotInstructionKeys,
533
+ ...finalCurrentInputKeys
534
+ ]);
535
+ const finalBotKnowledgeKeys = difference(Array.from(botKnowledgeKeys), [
536
+ ...finalBotInstructionKeys,
537
+ ...finalCurrentInputKeys,
538
+ ...finalHistoryKeys
539
+ ]);
540
+ return {
541
+ botInstructionsContext: finalBotInstructionKeys,
542
+ currentInputContext: finalCurrentInputKeys,
543
+ historyContext: finalHistoryKeys,
544
+ botKnowledgeContext: finalBotKnowledgeKeys
545
+ };
546
+ };
547
+
394
548
  // packages/ai/chat/streamRetry.ts
395
549
  var MAX_INITIAL_STREAM_RETRIES = 3;
396
550
  var DEFAULT_INITIAL_STREAM_RETRY_AFTER_MS = 1500;
@@ -499,7 +653,7 @@ var sendOpenAIResponseRequest = async ({
499
653
  const controller = new AbortController();
500
654
  thunkSignal.addEventListener("abort", () => controller.abort());
501
655
  const signal = controller.signal;
502
- const streamSpaceId = selectCurrentSpaceId(getState()) || void 0;
656
+ const streamSpaceId = getCurrentSpaceId() || void 0;
503
657
  let messageId;
504
658
  let msgKey;
505
659
  if (parentMessageId) {
@@ -1124,6 +1278,982 @@ function applyQuickChatModelOverride(base, override) {
1124
1278
  );
1125
1279
  }
1126
1280
 
1281
+ // packages/ai/agent/canvasEditingContext.ts
1282
+ function buildCanvasNodeEditingContextSummary(runtimeOptions) {
1283
+ if (runtimeOptions?.editingTarget?.kind !== "canvas_node") return null;
1284
+ const editingTarget = runtimeOptions.editingTarget;
1285
+ const metadata = editingTarget.metadata ?? {};
1286
+ const selectedNodeId = typeof metadata.selectedNodeId === "string" ? metadata.selectedNodeId : editingTarget.key ?? "(\u672A\u77E5\u8282\u70B9)";
1287
+ const part = typeof metadata.part === "string" ? metadata.part : editingTarget.title ?? selectedNodeId;
1288
+ const nodeType = typeof metadata.type === "string" ? metadata.type : "(\u672A\u77E5\u7C7B\u578B)";
1289
+ const path = Array.isArray(metadata.path) ? metadata.path.filter((item) => typeof item === "string") : [];
1290
+ const props = asRecordOrEmpty(metadata.props);
1291
+ const style = asRecordOrEmpty(metadata.style);
1292
+ return [
1293
+ "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1ACanvas Tree \u4E2D\u7684\u4E00\u4E2A\u9009\u4E2D\u8282\u70B9\u3002",
1294
+ `- \u8282\u70B9 ID: ${selectedNodeId}`,
1295
+ `- part: ${part}`,
1296
+ `- \u8282\u70B9\u7C7B\u578B: ${nodeType}`,
1297
+ ...path.length ? [`- \u8282\u70B9\u8DEF\u5F84: ${path.join(" > ")}`] : [],
1298
+ "",
1299
+ "\u5F53\u524D\u8282\u70B9 props:",
1300
+ JSON.stringify(props, null, 2),
1301
+ "",
1302
+ "\u5F53\u524D\u8282\u70B9 style:",
1303
+ JSON.stringify(style, null, 2),
1304
+ "",
1305
+ "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
1306
+ `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`,
1307
+ "2. \u4E0D\u8981\u91CD\u5EFA root/shell\uFF0C\u4E0D\u8981\u91CD\u65B0 append \u5DF2\u5B58\u5728\u7684\u5927\u5757\u5185\u5BB9\u3002",
1308
+ "3. \u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u65B0\u589E\u5B50\u6A21\u5757\uFF0C\u5426\u5219\u4E0D\u8981 appendNode\u3002",
1309
+ "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"
1310
+ ].join("\n");
1311
+ }
1312
+
1313
+ // packages/ai/agent/buildEditingContext.ts
1314
+ var buildAppConstraintPacks = (args) => {
1315
+ const imports = new Set(args.externalImports);
1316
+ const fileSet = new Set(args.fileNames);
1317
+ const packs = [
1318
+ {
1319
+ id: "repair-loop",
1320
+ title: "\u9884\u68C0\u4E0E\u5B9A\u70B9\u4FEE\u590D",
1321
+ rules: [
1322
+ "\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",
1323
+ "\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",
1324
+ "\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",
1325
+ "\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"
1326
+ ]
1327
+ },
1328
+ {
1329
+ id: "design-system",
1330
+ title: "\u8BBE\u8BA1\u7CFB\u7EDF\u4E0E\u5C0F\u6539\u52A8\u7EA6\u675F",
1331
+ rules: [
1332
+ "\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",
1333
+ "\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",
1334
+ "\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",
1335
+ "\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",
1336
+ "\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",
1337
+ "\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"
1338
+ ]
1339
+ }
1340
+ ];
1341
+ if (args.framework === "react-spa" || fileSet.has("main.tsx") || fileSet.has("App.tsx")) {
1342
+ packs.push({
1343
+ id: "react-spa-core",
1344
+ title: "React SPA \u5F62\u6001\u4FDD\u6301",
1345
+ rules: [
1346
+ '\u7EE7\u7EED\u6CBF\u7528 framework: "react-spa" + files\uFF0C\u4E0D\u8981\u9000\u56DE\u5355\u6587\u4EF6 Worker\u3002',
1347
+ "\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"
1348
+ ]
1349
+ });
1350
+ }
1351
+ if (imports.has("react-icons/lu")) {
1352
+ packs.push({
1353
+ id: "react-icons-lu",
1354
+ title: "Lucide \u56FE\u6807\u5B89\u5168\u89C4\u5219",
1355
+ rules: [
1356
+ "\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",
1357
+ "\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"
1358
+ ]
1359
+ });
1360
+ }
1361
+ if (imports.has("leaflet") || imports.has("react-leaflet")) {
1362
+ packs.push({
1363
+ id: "leaflet",
1364
+ title: "Leaflet \u5730\u56FE\u7EA6\u675F",
1365
+ rules: [
1366
+ "\u4E0D\u8981\u624B\u52A8 import leaflet.css\uFF1B\u5E73\u53F0\u4F1A\u81EA\u52A8\u6CE8\u5165 Leaflet \u6837\u5F0F\u3002",
1367
+ "\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"
1368
+ ]
1369
+ });
1370
+ }
1371
+ if (imports.has("@xyflow/react")) {
1372
+ packs.push({
1373
+ id: "xyflow",
1374
+ title: "Flow \u56FE\u7F16\u8F91\u7EA6\u675F",
1375
+ rules: [
1376
+ "\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",
1377
+ "\u4F18\u5148\u590D\u7528\u73B0\u6709\u8282\u70B9/\u8FB9\u6570\u636E\u7ED3\u6784\uFF0C\u907F\u514D\u91CD\u5199\u6574\u5957 flow \u753B\u5E03\u3002"
1378
+ ]
1379
+ });
1380
+ }
1381
+ if (imports.has("echarts") || imports.has("echarts-for-react")) {
1382
+ packs.push({
1383
+ id: "echarts",
1384
+ title: "\u56FE\u8868\u6539\u52A8\u7EA6\u675F",
1385
+ rules: [
1386
+ "\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",
1387
+ "\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"
1388
+ ]
1389
+ });
1390
+ }
1391
+ if (imports.has("docx") || imports.has("xlsx")) {
1392
+ packs.push({
1393
+ id: "file-processing",
1394
+ title: "\u6587\u6863/\u8868\u683C\u5904\u7406\u7EA6\u675F",
1395
+ rules: [
1396
+ "\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",
1397
+ "\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"
1398
+ ]
1399
+ });
1400
+ }
1401
+ return packs;
1402
+ };
1403
+ var formatAppConstraintPacks = (packs) => {
1404
+ if (packs.length === 0) return [];
1405
+ return [
1406
+ "",
1407
+ "\u5F53\u524D\u6FC0\u6D3B\u7EA6\u675F\u5305\uFF08\u6309\u5F53\u524D\u5E94\u7528\u4F9D\u8D56/\u5F62\u6001\u52A8\u6001\u6CE8\u5165\uFF09\uFF1A",
1408
+ ...packs.flatMap((pack) => [
1409
+ `- ${pack.title}\uFF08${pack.id}\uFF09`,
1410
+ ...pack.rules.map((rule) => ` - ${rule}`)
1411
+ ])
1412
+ ];
1413
+ };
1414
+ var buildEditingContextSummary = (state, runtimeOptions) => {
1415
+ const targetKind = runtimeOptions?.editingTarget?.kind;
1416
+ if (targetKind === "table") {
1417
+ const table = selectCurrentTable(state);
1418
+ const rows = selectTableRows(state);
1419
+ const metadata = runtimeOptions?.editingTarget?.metadata;
1420
+ const focusContext = metadata && typeof metadata === "object" ? metadata.focusContext : null;
1421
+ if (!table) return null;
1422
+ const columns = Array.isArray(table.columns) ? table.columns : [];
1423
+ const columnSummaries = columns.length ? columns.map((c) => {
1424
+ const displayName = c.label || c.name;
1425
+ const type = c.type || "text";
1426
+ const requiredFlag = c.required ? "\u5FC5\u586B" : "\u53EF\u9009";
1427
+ const primaryFlag = c.isPrimary ? "\uFF0C\u4E3B\u5B57\u6BB5" : "";
1428
+ const optionsStr = Array.isArray(c.options) && c.options.length ? `\uFF0C\u53EF\u9009\u503C\uFF1A${c.options.join(" | ")}` : "";
1429
+ const descStr = c.description ? `\u3002\u8BF4\u660E\uFF1A${c.description}` : "";
1430
+ return `- ${c.name}\uFF08\u663E\u793A\u540D\uFF1A${displayName}\uFF0C\u7C7B\u578B\uFF1A${type}\uFF0C${requiredFlag}${primaryFlag}${optionsStr}${descStr}\uFF09`;
1431
+ }) : ["- (\u5F53\u524D\u8868\u5C1A\u672A\u5B9A\u4E49\u5B57\u6BB5)"];
1432
+ const sampleRows = Array.isArray(rows) ? rows.slice(0, 20) : [];
1433
+ const rowsPreview = sampleRows.length ? JSON.stringify(sampleRows, null, 2) : "(\u5F53\u524D\u8868\u6682\u65E0\u884C\u6570\u636E)";
1434
+ const tableTitle = table.displayName ?? table.tableId ?? "(\u672A\u547D\u540D\u8868)";
1435
+ const tableDesc = table.description ? `\u7528\u9014\u8BF4\u660E\uFF1A${table.description}` : "(\u6682\u65E0\u7528\u9014\u8BF4\u660E)";
1436
+ const tableTagsLine = Array.isArray(table.tags) && table.tags.length ? `- \u5173\u952E\u8BCD\u6807\u7B7E: ${table.tags.join(", ")}` : null;
1437
+ return [
1438
+ "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u5F20\u6570\u636E\u8868\uFF08Editing Table\uFF09\u3002",
1439
+ `- \u8868 ID: ${table.tableId}`,
1440
+ `- \u663E\u793A\u540D\u79F0: ${tableTitle}`,
1441
+ `- ${tableDesc}`,
1442
+ ...tableTagsLine ? [tableTagsLine] : [],
1443
+ ...focusContext && typeof focusContext === "object" && "columnName" in focusContext ? [
1444
+ "",
1445
+ "\u5F53\u524D\u7126\u70B9\uFF08Focus Context\uFF09\uFF1A",
1446
+ `- \u5F53\u524D\u5355\u5143\u683C\u5217: ${String(focusContext.columnName ?? "(\u672A\u77E5\u5217)")}`,
1447
+ ...focusContext.rowTitle ? [`- \u5F53\u524D\u884C\u6807\u9898: ${String(focusContext.rowTitle)}`] : [],
1448
+ ...focusContext.rowIndex !== null && focusContext.rowIndex !== void 0 ? [`- \u5F53\u524D\u884C\u53F7: ${Number(focusContext.rowIndex) + 1}`] : [],
1449
+ ...focusContext.cellPreview ? [`- \u5F53\u524D\u5355\u5143\u683C\u5185\u5BB9\u9884\u89C8: ${String(focusContext.cellPreview)}`] : []
1450
+ ] : [],
1451
+ "",
1452
+ "\u5B57\u6BB5\u5B9A\u4E49\uFF08Field Schema\uFF09\uFF1A",
1453
+ ...columnSummaries,
1454
+ "",
1455
+ "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
1456
+ "\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",
1457
+ "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",
1458
+ "2. \u8C03\u7528 addTableRow \u65F6\uFF1A",
1459
+ " - \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",
1460
+ ' - \u4F8B\u5982\uFF1A{"values":{"title":"\u4FEE Bug #123","status":"todo","note":"\u9AD8\u4F18\u5148\u7EA7"}}\u3002',
1461
+ " - \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",
1462
+ ' - \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',
1463
+ " - \u7EDD\u4E0D\u8981\u4F20\u5165\u7A7A\u5BF9\u8C61 {} \u4F5C\u4E3A values\u3002",
1464
+ "",
1465
+ "\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",
1466
+ rowsPreview
1467
+ ].join("\n");
1468
+ }
1469
+ if (targetKind === "page" || targetKind === "article") {
1470
+ const page = getDocState();
1471
+ const metadata = runtimeOptions?.editingTarget?.metadata;
1472
+ const focusContext = metadata && typeof metadata === "object" ? metadata.focusContext : null;
1473
+ if (!page) return null;
1474
+ const title = page.title ?? "(\u672A\u547D\u540D\u9875\u9762)";
1475
+ return [
1476
+ "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u4E2A\u9875\u9762 / \u6587\u7AE0\uFF08Editing Document\uFF09\u3002",
1477
+ `- \u6807\u9898: ${title}`,
1478
+ ...focusContext && typeof focusContext === "object" && "anchorPath" in focusContext ? [
1479
+ "",
1480
+ "\u5F53\u524D\u7126\u70B9\uFF08Focus Context\uFF09\uFF1A",
1481
+ `- \u5149\u6807\u662F\u5426\u6298\u53E0: ${Boolean(focusContext.isCollapsed) ? "\u662F" : "\u5426"}`,
1482
+ ...focusContext.blockType ? [`- \u5F53\u524D\u5757\u7C7B\u578B: ${String(focusContext.blockType)}`] : [],
1483
+ ...focusContext.selectedText ? [`- \u5F53\u524D\u9009\u4E2D\u6587\u672C: ${String(focusContext.selectedText)}`] : [],
1484
+ ...focusContext.anchorPath?.length ? [`- \u5F53\u524D\u951A\u70B9\u8DEF\u5F84: ${focusContext.anchorPath.join(" > ")}`] : []
1485
+ ] : [],
1486
+ "",
1487
+ "\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",
1488
+ "\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"
1489
+ ].join("\n");
1490
+ }
1491
+ if (targetKind === "app") {
1492
+ const editingTarget = runtimeOptions?.editingTarget;
1493
+ const metadata = editingTarget?.metadata;
1494
+ const appId = editingTarget?.key ?? "(\u672A\u77E5 appId)";
1495
+ const title = editingTarget?.title ?? "(\u672A\u547D\u540D\u5E94\u7528)";
1496
+ const framework = typeof metadata?.framework === "string" ? metadata.framework : "worker";
1497
+ const appUrl = typeof metadata?.appUrl === "string" ? metadata.appUrl : null;
1498
+ const fileNames = Array.isArray(metadata?.fileNames) ? metadata.fileNames.filter((name) => typeof name === "string") : [];
1499
+ const externalImports = Array.isArray(metadata?.externalImports) ? metadata.externalImports.filter(
1500
+ (name) => typeof name === "string"
1501
+ ) : [];
1502
+ const sourceSummary = asOptionalTrimmedString(editingTarget?.summary) ?? null;
1503
+ const selectedNode = metadata && typeof metadata === "object" && metadata.selectedNode && typeof metadata.selectedNode === "object" ? metadata.selectedNode : null;
1504
+ const constraintPacks = buildAppConstraintPacks({
1505
+ framework,
1506
+ fileNames,
1507
+ externalImports
1508
+ });
1509
+ if (selectedNode && typeof selectedNode.cssPath === "string") {
1510
+ const tagName = typeof selectedNode.tagName === "string" && selectedNode.tagName ? selectedNode.tagName : "\u5143\u7D20";
1511
+ const cssPath = String(selectedNode.cssPath);
1512
+ const outerHTMLSnippet = typeof selectedNode.outerHTMLSnippet === "string" ? selectedNode.outerHTMLSnippet : "";
1513
+ const textSnippet = typeof selectedNode.textSnippet === "string" ? selectedNode.textSnippet : "";
1514
+ const noloLoc = typeof selectedNode.noloLoc === "string" ? selectedNode.noloLoc : "";
1515
+ constraintPacks.push({
1516
+ id: "selected-node",
1517
+ title: "\u7528\u6237\u9009\u4E2D\u8282\u70B9\uFF08\u5B9A\u70B9\u4FEE\u6539\uFF09",
1518
+ rules: [
1519
+ `\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`,
1520
+ `\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`,
1521
+ "\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",
1522
+ "\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",
1523
+ "\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"
1524
+ ]
1525
+ });
1526
+ }
1527
+ return [
1528
+ "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u4E2A Web \u5E94\u7528\uFF08Editing App\uFF09\u3002",
1529
+ `- \u5E94\u7528 ID: ${appId}`,
1530
+ `- \u540D\u79F0: ${title}`,
1531
+ `- \u6280\u672F\u5F62\u6001: ${framework}`,
1532
+ ...appUrl ? [`- \u5F53\u524D\u8BBF\u95EE\u5730\u5740: ${appUrl}`] : [],
1533
+ ...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)"],
1534
+ ...externalImports.length ? [`- \u5F53\u524D\u4F9D\u8D56\u767D\u540D\u5355\u547D\u4E2D: ${externalImports.join(", ")}`] : [],
1535
+ ...sourceSummary ? ["", sourceSummary] : [],
1536
+ "",
1537
+ "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
1538
+ "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",
1539
+ "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",
1540
+ "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=listFiles\u3001appFileSearch=searchFiles\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",
1541
+ "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",
1542
+ "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",
1543
+ `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`,
1544
+ 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",
1545
+ ...fileNames.length ? [] : [
1546
+ "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",
1547
+ "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"
1548
+ ],
1549
+ "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",
1550
+ "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",
1551
+ "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",
1552
+ ...formatAppConstraintPacks(constraintPacks)
1553
+ ].join("\n");
1554
+ }
1555
+ if (targetKind === "local_preview") {
1556
+ const metadata = runtimeOptions?.editingTarget?.metadata;
1557
+ const selectedNode = metadata && typeof metadata === "object" && metadata.selectedNode && typeof metadata.selectedNode === "object" ? metadata.selectedNode : null;
1558
+ if (!selectedNode) return null;
1559
+ const readString = (key) => typeof selectedNode[key] === "string" ? selectedNode[key] : "";
1560
+ const tagName = readString("tagName") || "\u5143\u7D20";
1561
+ const cssPath = readString("cssPath");
1562
+ const noloLoc = readString("noloLoc");
1563
+ const textSnippet = readString("textSnippet");
1564
+ const outerHTMLSnippet = readString("outerHTMLSnippet");
1565
+ return [
1566
+ "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u672C\u5730\u5DE5\u4F5C\u533A\u91CC\u6B63\u5728\u9884\u89C8\u7684\u7F51\u9875\uFF08Local Preview\uFF09\u3002",
1567
+ `\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`,
1568
+ `\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`,
1569
+ "",
1570
+ "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
1571
+ "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",
1572
+ 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",
1573
+ "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",
1574
+ "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",
1575
+ "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"
1576
+ ].join("\n");
1577
+ }
1578
+ if (targetKind === "image" || targetKind === "file") {
1579
+ const editingTarget = runtimeOptions?.editingTarget;
1580
+ const metadata = editingTarget?.metadata;
1581
+ const title = editingTarget?.title ?? "(\u672A\u547D\u540D\u5BF9\u8C61)";
1582
+ const objectKey = editingTarget?.key ?? "(\u672A\u77E5 key)";
1583
+ const fileId = typeof metadata?.fileId === "string" ? metadata.fileId : null;
1584
+ const url = typeof metadata?.url === "string" ? metadata.url : null;
1585
+ const size = typeof metadata?.size === "number" ? metadata.size : null;
1586
+ return [
1587
+ `\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u4E2A${targetKind === "image" ? "\u56FE\u7247" : "\u6587\u4EF6"}\u5BF9\u8C61\uFF08Editing ${targetKind === "image" ? "Image" : "File"}\uFF09\u3002`,
1588
+ `- \u5BF9\u8C61 key: ${objectKey}`,
1589
+ `- \u6807\u9898: ${title}`,
1590
+ ...fileId ? [`- fileId: ${fileId}`] : [],
1591
+ ...url ? [`- \u8D44\u6E90\u5730\u5740: ${url}`] : [],
1592
+ ...size !== null ? [`- \u6587\u4EF6\u5927\u5C0F: ${size} bytes`] : [],
1593
+ "",
1594
+ "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
1595
+ 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"
1596
+ ].join("\n");
1597
+ }
1598
+ if (targetKind === "canvas_node") {
1599
+ return buildCanvasNodeEditingContextSummary(runtimeOptions);
1600
+ }
1601
+ return null;
1602
+ };
1603
+
1604
+ // packages/ai/agent/appWorkingMemory.ts
1605
+ var APP_TOOL_NAMES = /* @__PURE__ */ new Set([
1606
+ "appList",
1607
+ "appRead",
1608
+ "appDeploy",
1609
+ "appPreflight",
1610
+ "appDelete"
1611
+ ]);
1612
+ var contentToText = (content) => {
1613
+ if (!content) return "";
1614
+ if (typeof content === "string") return content;
1615
+ if (Array.isArray(content)) {
1616
+ return content.map((part) => "text" in part ? part.text ?? "" : "").join("\n");
1617
+ }
1618
+ return "";
1619
+ };
1620
+ var parseAppListEntries = (text) => text.split("\n").map((line) => line.trim()).filter((line) => line.startsWith("- **") && line.includes("(appId:"));
1621
+ var buildRecentAppToolMemory = (messages, toolRuns) => {
1622
+ const messageById = new Map(messages.map((msg) => [msg.id, msg]));
1623
+ const recentRuns = [...toolRuns].filter((run) => APP_TOOL_NAMES.has(run.toolName)).sort((a, b) => (b.startedAt ?? 0) - (a.startedAt ?? 0)).slice(0, 8);
1624
+ if (recentRuns.length === 0) return null;
1625
+ const lines = [
1626
+ "\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"
1627
+ ];
1628
+ const latestDeployLike = recentRuns.find(
1629
+ (run) => ["appDeploy", "appRead", "appPreflight"].includes(run.toolName)
1630
+ );
1631
+ if (latestDeployLike) {
1632
+ const input = latestDeployLike.input ?? {};
1633
+ const parts = [
1634
+ `- \u6700\u8FD1\u4E00\u6B21\u5173\u952E app \u64CD\u4F5C: ${latestDeployLike.toolName}`,
1635
+ typeof input.appId === "string" ? `appId=${input.appId}` : null,
1636
+ typeof input.name === "string" ? `name=${input.name}` : null,
1637
+ typeof input.framework === "string" ? `framework=${input.framework}` : null
1638
+ ].filter(Boolean);
1639
+ lines.push(parts.join("\uFF0C"));
1640
+ }
1641
+ const relatedMessages = recentRuns.map((run) => messageById.get(run.messageId)).filter((msg) => !!msg);
1642
+ const appListMessage = relatedMessages.find((msg) => msg.toolName === "appList");
1643
+ if (appListMessage) {
1644
+ const entries = parseAppListEntries(contentToText(appListMessage.content)).slice(0, 5);
1645
+ if (entries.length > 0) {
1646
+ lines.push("- \u6700\u8FD1\u4E00\u6B21 appList \u7ED3\u679C\uFF1A");
1647
+ lines.push(...entries.map((entry) => ` ${entry}`));
1648
+ }
1649
+ }
1650
+ const latestReadMessage = relatedMessages.find((msg) => msg.toolName === "appRead");
1651
+ if (latestReadMessage) {
1652
+ const text = contentToText(latestReadMessage.content);
1653
+ const appId = text.match(/- appId:\s*(.+)/)?.[1]?.trim();
1654
+ const url = text.match(/- 访问地址:\s*(.+)/)?.[1]?.trim();
1655
+ if (appId || url) {
1656
+ lines.push(
1657
+ [
1658
+ "- \u6700\u8FD1\u4E00\u6B21 appRead \u771F\u503C:",
1659
+ appId ? `appId=${appId}` : null,
1660
+ url ? `url=${url}` : null
1661
+ ].filter(Boolean).join("\uFF0C")
1662
+ );
1663
+ }
1664
+ }
1665
+ const latestPreflightRun = recentRuns.find((run) => run.toolName === "appPreflight");
1666
+ if (latestPreflightRun) {
1667
+ lines.push(
1668
+ [
1669
+ "- \u6700\u8FD1\u4E00\u6B21 appPreflight:",
1670
+ latestPreflightRun.status === "failed" ? "\u5931\u8D25" : "\u5DF2\u6267\u884C",
1671
+ latestPreflightRun.outputSummary ? `\u6458\u8981=${latestPreflightRun.outputSummary}` : null
1672
+ ].filter(Boolean).join("\uFF0C")
1673
+ );
1674
+ }
1675
+ const latestDeployMessage = relatedMessages.find((msg) => msg.toolName === "appDeploy");
1676
+ if (latestDeployMessage) {
1677
+ const text = contentToText(latestDeployMessage.content);
1678
+ const appId = text.match(/- appId:\s*(.+)/)?.[1]?.trim();
1679
+ const url = text.match(/- 访问地址:\s*(.+)/)?.[1]?.trim();
1680
+ if (appId || url) {
1681
+ lines.push(
1682
+ [
1683
+ "- \u6700\u8FD1\u4E00\u6B21 appDeploy \u7ED3\u679C:",
1684
+ appId ? `appId=${appId}` : null,
1685
+ url ? `url=${url}` : null
1686
+ ].filter(Boolean).join("\uFF0C")
1687
+ );
1688
+ }
1689
+ }
1690
+ lines.push(
1691
+ "- \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"
1692
+ );
1693
+ return lines.join("\n");
1694
+ };
1695
+
1696
+ // packages/ai/agent/streamAgentChatTurnUtils.ts
1697
+ var BROWSER_UNAVAILABLE_CORE_TOOLS = {
1698
+ queryModelUsage: true,
1699
+ createAgentAutomation: true,
1700
+ notifyUser: true
1701
+ };
1702
+ var getRuntimeCoreTools = () => {
1703
+ if (typeof window === "undefined") {
1704
+ return [...TOOL_PACKS.CORE];
1705
+ }
1706
+ return TOOL_PACKS.CORE.filter(
1707
+ (toolName) => !BROWSER_UNAVAILABLE_CORE_TOOLS[toolName]
1708
+ );
1709
+ };
1710
+ var isInlineVisualArtifactAgent = (agentConfig) => {
1711
+ const tags = Array.isArray(agentConfig.tags) ? agentConfig.tags : [];
1712
+ return tags.some(
1713
+ (tag) => typeof tag === "string" && ["inline-artifact", "streaming-ui"].includes(tag)
1714
+ );
1715
+ };
1716
+ var estimateTokensOfMessage = (msg) => {
1717
+ let content = "";
1718
+ if (typeof msg.content === "string") {
1719
+ content = msg.content;
1720
+ } else if (Array.isArray(msg.content)) {
1721
+ content = msg.content.map((p) => {
1722
+ if (p.type === "text") return p.text || "";
1723
+ if (p.type === "image_url") return "[image]";
1724
+ return "[non-text]";
1725
+ }).join("");
1726
+ } else if (msg.content && typeof msg.content === "object") {
1727
+ content = JSON.stringify(msg.content);
1728
+ }
1729
+ let extraTokens = 0;
1730
+ if (Array.isArray(msg.tool_calls)) {
1731
+ const toolsStr = JSON.stringify(msg.tool_calls);
1732
+ extraTokens = estimateTokenCount(toolsStr);
1733
+ }
1734
+ return estimateTokenCount(content) + extraTokens;
1735
+ };
1736
+ var classifyConversationLoad = (messages) => {
1737
+ const N = 20;
1738
+ if (!Array.isArray(messages) || messages.length === 0) return "light";
1739
+ const tail = messages.slice(-N);
1740
+ const tokenSamples = tail.map(estimateTokensOfMessage);
1741
+ if (tokenSamples.length === 0) return "light";
1742
+ const sum = tokenSamples.reduce((acc, v) => acc + v, 0);
1743
+ const avg = sum / tokenSamples.length;
1744
+ const sorted = [...tokenSamples].sort((a, b) => a - b);
1745
+ const p95 = sorted[Math.floor((sorted.length - 1) * 0.95)];
1746
+ if (p95 < 200 && avg < 120) {
1747
+ return "light";
1748
+ }
1749
+ if (p95 > 2e3 || avg > 1200) {
1750
+ return "heavy";
1751
+ }
1752
+ return "medium";
1753
+ };
1754
+ var compressOldToolResults = (messages, maxChars = 800) => {
1755
+ let lastToolCallAssistantIdx = -1;
1756
+ for (let i = messages.length - 1; i >= 0; i--) {
1757
+ if (messages[i].role === "assistant" && Array.isArray(messages[i].tool_calls) && messages[i].tool_calls.length > 0) {
1758
+ lastToolCallAssistantIdx = i;
1759
+ break;
1760
+ }
1761
+ }
1762
+ return messages.map((msg, idx) => {
1763
+ if (msg.role !== "tool") return msg;
1764
+ const content = typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
1765
+ const projected = projectToolMessageContent({
1766
+ content,
1767
+ isFresh: idx > lastToolCallAssistantIdx,
1768
+ toolName: msg.name,
1769
+ historicalMaxChars: maxChars
1770
+ });
1771
+ if (projected === content) return msg;
1772
+ return { ...msg, content: projected };
1773
+ });
1774
+ };
1775
+ var trimMessagesWithSummary = (messages, contextWindow, summaryTokenCount) => {
1776
+ const recentLoad = classifyConversationLoad(messages);
1777
+ const { rawMessageBudget, minTailTokens } = planContextUsage({
1778
+ contextWindow,
1779
+ summaryTokens: summaryTokenCount,
1780
+ recentLoad
1781
+ });
1782
+ if (!Array.isArray(messages) || messages.length === 0) return messages;
1783
+ let totalTokens = 0;
1784
+ let keepCount = 0;
1785
+ for (let i = messages.length - 1; i >= 0; i--) {
1786
+ const t = estimateTokensOfMessage(messages[i]);
1787
+ if (totalTokens + t > rawMessageBudget) break;
1788
+ totalTokens += t;
1789
+ keepCount++;
1790
+ }
1791
+ if (keepCount >= messages.length) {
1792
+ return messages;
1793
+ }
1794
+ if (totalTokens < minTailTokens) {
1795
+ const maxBudgetWithSlack = rawMessageBudget * 1.2;
1796
+ for (let i = messages.length - 1 - keepCount; i >= 0; i--) {
1797
+ const t = estimateTokensOfMessage(messages[i]);
1798
+ if (totalTokens + t > maxBudgetWithSlack) break;
1799
+ totalTokens += t;
1800
+ keepCount++;
1801
+ if (totalTokens >= minTailTokens) break;
1802
+ }
1803
+ }
1804
+ if (keepCount === 0 && messages.length > 0) {
1805
+ keepCount = Math.min(2, messages.length);
1806
+ }
1807
+ let cutIndex = messages.length - keepCount;
1808
+ if (cutIndex < 0) cutIndex = 0;
1809
+ while (cutIndex > 0 && messages[cutIndex]?.role === "tool") {
1810
+ cutIndex--;
1811
+ }
1812
+ return messages.slice(cutIndex);
1813
+ };
1814
+ var createDbSliceTurnContextSource = (dispatch) => ({
1815
+ readRecord: async (dbKey) => {
1816
+ const result = await dispatch(read({ dbKey })).unwrap();
1817
+ return result ?? null;
1818
+ }
1819
+ });
1820
+ var joinMapValues = (map) => Array.from(map.values()).join("");
1821
+ var formatCurrentInputContext = (pendingFiles, currentInputMap) => {
1822
+ if (pendingFiles.length === 0 || currentInputMap.size === 0) {
1823
+ return joinMapValues(currentInputMap);
1824
+ }
1825
+ const relevantPendingFiles = pendingFiles.filter((file) => {
1826
+ const key = file.sourceDialogKey || file.dialogKey || file.pageKey;
1827
+ return key && currentInputMap.has(key);
1828
+ });
1829
+ if (relevantPendingFiles.length === 0) {
1830
+ return joinMapValues(currentInputMap);
1831
+ }
1832
+ const filesByGroup = /* @__PURE__ */ new Map();
1833
+ for (const file of relevantPendingFiles) {
1834
+ const groupKey = file.groupId || file.id;
1835
+ const group = filesByGroup.get(groupKey);
1836
+ if (group) {
1837
+ group.push(file);
1838
+ } else {
1839
+ filesByGroup.set(groupKey, [file]);
1840
+ }
1841
+ }
1842
+ let sourceCounter = 1;
1843
+ let output = "";
1844
+ filesByGroup.forEach((filesInGroup) => {
1845
+ const isGroup = filesInGroup.length > 1;
1846
+ const sourceName = isGroup ? filesInGroup[0].name.split(" (")[0] : filesInGroup[0].name;
1847
+ output += `--- Source ${sourceCounter}: "${sourceName}" ---
1848
+ `;
1849
+ filesInGroup.forEach((file) => {
1850
+ const key = file.sourceDialogKey || file.dialogKey || file.pageKey;
1851
+ if (!key) return;
1852
+ const content = currentInputMap.get(key);
1853
+ if (!content) return;
1854
+ if (isGroup) {
1855
+ output += `### Document: "${file.name}"
1856
+ ${content}
1857
+ `;
1858
+ } else {
1859
+ output += `${content}
1860
+ `;
1861
+ }
1862
+ });
1863
+ output += `--- End of Source ${sourceCounter} ---
1864
+
1865
+ `;
1866
+ sourceCounter++;
1867
+ });
1868
+ return output;
1869
+ };
1870
+ var validateAccessAndBalance = (agentConfig, state) => {
1871
+ const userBalance = selectIdentityUserBalance(state);
1872
+ const currentUserId = selectIdentityUserId(state);
1873
+ const isCustomApi = agentConfig.apiSource === "custom";
1874
+ const isCliApi = agentConfig.apiSource === "cli";
1875
+ const isDeviceLocalOwner = agentConfig.userId === "local" && !currentUserId;
1876
+ const isOwner = isDeviceLocalOwner || Boolean(currentUserId) && agentConfig.userId === currentUserId;
1877
+ if (!isOwner) {
1878
+ const hasWhitelist = Array.isArray(agentConfig.whitelist) && agentConfig.whitelist.length > 0;
1879
+ if (hasWhitelist) {
1880
+ const isUserInWhitelist = !!currentUserId && agentConfig.whitelist?.includes(currentUserId);
1881
+ if (!isUserInWhitelist) {
1882
+ return "\u60A8\u4E0D\u5728\u8BE5\u5E94\u7528\u7684\u767D\u540D\u5355\u4E2D\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002";
1883
+ }
1884
+ }
1885
+ }
1886
+ if (isCustomApi || isCliApi) {
1887
+ return null;
1888
+ }
1889
+ const SUBSCRIPTION_OAUTH_REFS = /* @__PURE__ */ new Set([
1890
+ "cursor",
1891
+ "chatgpt",
1892
+ "xai",
1893
+ "antigravity",
1894
+ "claude"
1895
+ ]);
1896
+ if (SUBSCRIPTION_OAUTH_REFS.has((agentConfig.apiKeyRef ?? "").trim().toLowerCase())) {
1897
+ return null;
1898
+ }
1899
+ const isPlatformApi = agentConfig.apiSource === "platform" || agentConfig.useServerProxy === true;
1900
+ if (isDeviceLocalOwner && !isPlatformApi) {
1901
+ return null;
1902
+ }
1903
+ if (typeof userBalance !== "number") {
1904
+ const hasSessionUser = Boolean(
1905
+ state?.auth?.currentUser?.userId
1906
+ );
1907
+ if (!currentUserId || !hasSessionUser) {
1908
+ return "\u8BF7\u767B\u5F55\u540E\u4F7F\u7528\u5E73\u53F0\u6A21\u578B\uFF0C\u6216\u6539\u7528\u672C\u5730\u81EA\u5B9A\u4E49/API/CLI Agent\u3002";
1909
+ }
1910
+ return "\u6B63\u5728\u83B7\u53D6\u7528\u6237\u4F59\u989D\uFF0C\u8BF7\u7A0D\u5019...";
1911
+ }
1912
+ const serverPrices = getModelPricing(agentConfig.provider || "", agentConfig.model);
1913
+ if (!serverPrices && !hasExplicitAgentPricing(agentConfig)) {
1914
+ return "\u65E0\u6CD5\u83B7\u53D6\u6A21\u578B\u5B9A\u4EF7\u4FE1\u606F\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";
1915
+ }
1916
+ const prices = getPrices(agentConfig, serverPrices ?? null);
1917
+ const maxPrice = getFinalPrice(prices);
1918
+ if (userBalance < maxPrice) {
1919
+ return "\u4F59\u989D\u4E0D\u8DB3\uFF0C\u8BF7\u5145\u503C\u540E\u518D\u8BD5\u3002";
1920
+ }
1921
+ return null;
1922
+ };
1923
+ var fetchMemoryOverlayContext = async (state, agentConfig, userInput, dialogConfig) => {
1924
+ const token = typeof state?.auth?.currentToken === "string" ? state.auth.currentToken : null;
1925
+ const currentServer = typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
1926
+ const agentKey = asOptionalTrimmedString(agentConfig.dbKey) ?? "";
1927
+ if (!token || !currentServer || !agentKey) return null;
1928
+ const baseUrl = resolveToolBaseUrl(currentServer);
1929
+ if (!baseUrl) return null;
1930
+ const inputText = typeof userInput === "string" ? userInput : JSON.stringify(userInput ?? "");
1931
+ const spaceId = asOptionalTrimmedString(dialogConfig?.spaceId) ?? (getViewMode() === "all" ? void 0 : asOptionalTrimmedString(getCurrentSpaceIdRaw()));
1932
+ try {
1933
+ const response = await fetch(`${baseUrl}/api/memory/query`, {
1934
+ method: "POST",
1935
+ headers: {
1936
+ "Content-Type": "application/json",
1937
+ Authorization: `Bearer ${token}`
1938
+ },
1939
+ body: JSON.stringify({
1940
+ agentKey,
1941
+ userInput: inputText,
1942
+ ...spaceId ? { spaceId } : {}
1943
+ })
1944
+ });
1945
+ if (!response.ok) return null;
1946
+ const payload = await response.json().catch(() => null);
1947
+ return asOptionalTrimmedString(payload?.promptBlock) ?? null;
1948
+ } catch {
1949
+ return null;
1950
+ }
1951
+ };
1952
+ var buildStaticContexts = async (state, dispatch, agentConfig, dialogConfig, referenceContentCache) => {
1953
+ const keySets = await getFullChatContextKeys(
1954
+ state,
1955
+ dispatch,
1956
+ agentConfig,
1957
+ "",
1958
+ // 静态上下文不需要 userInput
1959
+ void 0
1960
+ // 静态上下文不需要 dialogConfig
1961
+ );
1962
+ const finalKeys = deduplicateContextKeys(keySets);
1963
+ const fetchReferences = (keys) => fetchReferenceContents(keys, dispatch, {
1964
+ format: "simplified_markdown",
1965
+ inlineMentionMeta: true,
1966
+ preloaded: referenceContentCache
1967
+ });
1968
+ const [botInstructionsMap, botKnowledgeMap] = await Promise.all([
1969
+ fetchReferences(finalKeys.botInstructionsContext),
1970
+ fetchReferences(finalKeys.botKnowledgeContext)
1971
+ ]);
1972
+ const globalPrompt = selectGlobalPrompt(state);
1973
+ const userTonePreset = selectUserTonePreset(state);
1974
+ const knowledgeCaptureLevel = selectKnowledgeCaptureLevel(state);
1975
+ const spaceContextLevel = selectSpaceContextLevel(state);
1976
+ const userRecentLimit = selectAiRecentContentLimit(state);
1977
+ const contextWindow = getModelContextWindow(agentConfig.model) || 128e3;
1978
+ const preloadPlan = resolveSpaceContextPreloadPlan(spaceContextLevel);
1979
+ const dynamicLimit = Math.floor(contextWindow * preloadPlan.preloadBudgetRatio / 150);
1980
+ const recentLimit = preloadPlan.includeRecentContent ? Math.max(3, Math.min(userRecentLimit, Math.max(3, dynamicLimit))) : 0;
1981
+ const turnContextSource = createDbSliceTurnContextSource(dispatch);
1982
+ let spaceContext = null;
1983
+ if (spaceContextLevel > 1) {
1984
+ const spaceLayer = await buildSpaceContextLayer({
1985
+ source: turnContextSource,
1986
+ spaceId: dialogConfig?.spaceId,
1987
+ recentContentLimit: recentLimit
1988
+ });
1989
+ spaceContext = spaceLayer ? spaceLayer.content.trim() : null;
1990
+ }
1991
+ const linkedSpaceIds = agentConfig.linkedSpaces || [];
1992
+ if (linkedSpaceIds.length > 0 && spaceContextLevel > 1) {
1993
+ const linkedSection = await buildLinkedSpacesSection({
1994
+ source: turnContextSource,
1995
+ linkedSpaceIds
1996
+ });
1997
+ if (linkedSection) {
1998
+ spaceContext = (spaceContext ?? "") + `
1999
+
2000
+ ${linkedSection}`;
2001
+ }
2002
+ }
2003
+ const dialogPolicyContext = dialogConfig?.category === PERSONALIZATION_DIALOG_CATEGORY ? buildPersonalizationDialogPolicyContext() : null;
2004
+ return {
2005
+ botInstructionsContext: joinMapValues(botInstructionsMap),
2006
+ botKnowledgeContext: joinMapValues(botKnowledgeMap),
2007
+ spaceContext,
2008
+ userGlobalPrompt: globalPrompt,
2009
+ userPolicyContext: [
2010
+ buildStaticUserPolicyContext({
2011
+ agentConfig,
2012
+ settingsRecord: {
2013
+ userTonePreset,
2014
+ knowledgeCaptureLevel,
2015
+ spaceContextLevel,
2016
+ enableReadCurrentSpace: spaceContextLevel > 1
2017
+ }
2018
+ }),
2019
+ dialogPolicyContext
2020
+ ].filter(Boolean).join("\n")
2021
+ };
2022
+ };
2023
+ var buildDynamicContexts = async (state, dispatch, agentConfig, userInput, runtimeOptions, referenceContentCache, dialogKey) => {
2024
+ let dialogSummary = null;
2025
+ let dialogConfig;
2026
+ if (dialogKey) {
2027
+ dialogConfig = selectById(state, dialogKey);
2028
+ if (dialogConfig?.summary) {
2029
+ dialogSummary = dialogConfig.summary;
2030
+ }
2031
+ }
2032
+ const keySets = await getFullChatContextKeys(
2033
+ state,
2034
+ dispatch,
2035
+ agentConfig,
2036
+ userInput,
2037
+ dialogConfig
2038
+ );
2039
+ const finalKeys = deduplicateContextKeys(keySets);
2040
+ const fetchReferences = (keys) => fetchReferenceContents(keys, dispatch, {
2041
+ format: "simplified_markdown",
2042
+ inlineMentionMeta: true,
2043
+ preloaded: referenceContentCache
2044
+ });
2045
+ const [currentInputMap, historyMap] = await Promise.all([
2046
+ fetchReferences(finalKeys.currentInputContext),
2047
+ fetchReferences(finalKeys.historyContext)
2048
+ ]);
2049
+ const pendingFiles = selectPendingFiles(state);
2050
+ const formattedCurrentInputContext = formatCurrentInputContext(
2051
+ pendingFiles,
2052
+ currentInputMap
2053
+ );
2054
+ const dialogId = dialogConfig?.id ?? null;
2055
+ const currentDialogMessages = selectAllMsgs(state, dialogId);
2056
+ const currentDialogMessageIds = new Set(currentDialogMessages.map((msg) => msg.id));
2057
+ const currentDialogToolRuns = getAllToolRuns().filter(
2058
+ (run) => currentDialogMessageIds.has(run.messageId)
2059
+ );
2060
+ const editingContext = buildEditingContextSummary(state, runtimeOptions);
2061
+ const appWorkingMemory = buildRecentAppToolMemory(
2062
+ currentDialogMessages,
2063
+ currentDialogToolRuns
2064
+ );
2065
+ const memoryOverlay = await fetchMemoryOverlayContext(
2066
+ state,
2067
+ agentConfig,
2068
+ userInput,
2069
+ dialogConfig
2070
+ );
2071
+ return {
2072
+ currentInputContext: formattedCurrentInputContext.trim() || null,
2073
+ historyContext: joinMapValues(historyMap),
2074
+ editingContext,
2075
+ appWorkingMemory,
2076
+ memoryOverlay,
2077
+ dialogSummary,
2078
+ referenceKeys: dialogConfig?.referenceKeys || []
2079
+ };
2080
+ };
2081
+ var mergeContexts = (staticCtx, dynamicCtx) => ({
2082
+ botInstructionsContext: staticCtx.botInstructionsContext || void 0,
2083
+ botKnowledgeContext: staticCtx.botKnowledgeContext || void 0,
2084
+ spaceContext: staticCtx.spaceContext || void 0,
2085
+ userGlobalPrompt: staticCtx.userGlobalPrompt || void 0,
2086
+ userPolicyContext: staticCtx.userPolicyContext || void 0,
2087
+ currentInputContext: dynamicCtx.currentInputContext,
2088
+ historyContext: dynamicCtx.historyContext || void 0,
2089
+ editingContext: dynamicCtx.editingContext,
2090
+ appWorkingMemory: dynamicCtx.appWorkingMemory,
2091
+ memoryOverlay: dynamicCtx.memoryOverlay,
2092
+ dialogSummary: dynamicCtx.dialogSummary,
2093
+ referenceKeys: dynamicCtx.referenceKeys
2094
+ });
2095
+ var mergeAgentToolsWithRuntime = (agentConfig, referencedTools, mentionedTools, runtimeOptions, state) => {
2096
+ const rawBaseTools = Array.isArray(agentConfig.tools) ? agentConfig.tools : [];
2097
+ const agentEnabledPacks = resolveAgentRequiredPackIds(agentConfig);
2098
+ const isInlineArtifact = isInlineVisualArtifactAgent(agentConfig);
2099
+ const effectiveEnabledPacks = resolveEffectiveEnabledPacks({
2100
+ enabledPacks: agentEnabledPacks,
2101
+ declaredOnly: isInlineArtifact
2102
+ });
2103
+ const expandedPackTools = expandEnabledPacks(
2104
+ effectiveEnabledPacks,
2105
+ rawBaseTools
2106
+ );
2107
+ const baseTools = canonicalizeToolNames(expandedPackTools);
2108
+ const requiredSkillTools = canonicalizeToolNames(
2109
+ agentConfig.referencedTools ?? []
2110
+ );
2111
+ const recommendedSkillTools = canonicalizeToolNames(
2112
+ agentConfig.recommendedSkillTools ?? []
2113
+ );
2114
+ const recommendedSkillHints = [
2115
+ .../* @__PURE__ */ new Set([
2116
+ ...asNonEmptyStringArray(agentConfig.recommendedSkillHints),
2117
+ ...resolveAgentRecommendedSkillNames(agentConfig)
2118
+ ])
2119
+ ];
2120
+ const skillPromptPatches = [
2121
+ .../* @__PURE__ */ new Set([
2122
+ ...asNonEmptyStringArray(agentConfig.skillPromptPatches),
2123
+ // 能力包的 promptPatch(方法论文档)与 skill reference 的 patch 走同一条
2124
+ // 注入链(buildSkillGuidanceBlock → buildSkillGuidancePromptBlock),
2125
+ // 让「工具 + 配套纪律」作为一个能力包整体注入 system prompt。
2126
+ ...expandEnabledPackPromptPatches(effectiveEnabledPacks)
2127
+ ])
2128
+ ];
2129
+ const webPadded = applyDefaultWebToolPacks({
2130
+ toolNames: baseTools,
2131
+ skipWeb: isInlineVisualArtifactAgent(agentConfig)
2132
+ });
2133
+ const enhancedTools = /* @__PURE__ */ new Set([
2134
+ ...webPadded,
2135
+ ...isInlineVisualArtifactAgent(agentConfig) ? [] : getRuntimeCoreTools(),
2136
+ ...isInlineVisualArtifactAgent(agentConfig) ? [] : requiredSkillTools,
2137
+ ...isInlineVisualArtifactAgent(agentConfig) ? [] : canonicalizeToolNames(referencedTools),
2138
+ ...isInlineVisualArtifactAgent(agentConfig) ? [] : canonicalizeToolNames(mentionedTools)
2139
+ ]);
2140
+ const extraTools = isInlineVisualArtifactAgent(agentConfig) ? [] : canonicalizeToolNames(runtimeOptions?.extraTools ?? []);
2141
+ for (const t of extraTools) {
2142
+ enhancedTools.add(t);
2143
+ }
2144
+ if (!isInlineVisualArtifactAgent(agentConfig)) {
2145
+ const viewMode = state ? getViewMode() : "categories";
2146
+ if (viewMode === "all") {
2147
+ enhancedTools.delete("search_workspace");
2148
+ if (!recommendedSkillHints.includes("search-all-spaces")) {
2149
+ recommendedSkillHints.push("search-all-spaces");
2150
+ }
2151
+ } else {
2152
+ enhancedTools.add("search_workspace");
2153
+ }
2154
+ }
2155
+ const systemBuiltinSkills = state?.settings?.systemBuiltinSkills;
2156
+ const mountedTools = isInlineVisualArtifactAgent(agentConfig) ? Array.from(enhancedTools) : addDefaultSystemCapabilityTools(Array.from(enhancedTools));
2157
+ const filteredTools = applySystemBuiltinSkillFilter(
2158
+ mountedTools,
2159
+ systemBuiltinSkills
2160
+ );
2161
+ return {
2162
+ ...agentConfig,
2163
+ tools: applyDisabledTools(
2164
+ prioritizeToolNames(
2165
+ filteredTools,
2166
+ recommendedSkillTools
2167
+ ),
2168
+ agentConfig?.disabledTools
2169
+ ),
2170
+ recommendedSkillTools,
2171
+ recommendedSkillHints,
2172
+ skillPromptPatches
2173
+ };
2174
+ };
2175
+ var applyImageConfigRuntimeOverride = (agentConfig, runtimeOptions) => {
2176
+ const override = runtimeOptions?.imageConfigOverride;
2177
+ if (!override) {
2178
+ return agentConfig;
2179
+ }
2180
+ const baseImageConfig = agentConfig.imageConfig ?? {};
2181
+ return {
2182
+ ...agentConfig,
2183
+ ...override.imageModelOverride ? { model: override.imageModelOverride } : {},
2184
+ imageConfig: {
2185
+ ...baseImageConfig,
2186
+ ...override
2187
+ }
2188
+ };
2189
+ };
2190
+ var formatImageWaitHint = (range) => {
2191
+ if (!range || typeof range.min !== "number" || typeof range.max !== "number") {
2192
+ return void 0;
2193
+ }
2194
+ return `\u901A\u5E38\u9700\u8981 ${range.min}-${range.max} \u79D2`;
2195
+ };
2196
+ var resolveAgentImageModelIdentity = (agentConfig) => {
2197
+ let providerKey = (agentConfig.provider || "").toLowerCase();
2198
+ let modelName = agentConfig.model ?? "";
2199
+ if (modelName.includes("/")) {
2200
+ const slash = modelName.indexOf("/");
2201
+ if (!providerKey) providerKey = modelName.slice(0, slash);
2202
+ modelName = modelName.slice(slash + 1);
2203
+ }
2204
+ try {
2205
+ return {
2206
+ providerKey,
2207
+ modelConfig: getModelConfig(providerKey, modelName)
2208
+ };
2209
+ } catch {
2210
+ try {
2211
+ const detected = getProviderByModelName(modelName);
2212
+ if (!detected) {
2213
+ return { providerKey, modelConfig: null };
2214
+ }
2215
+ return {
2216
+ providerKey: detected,
2217
+ modelConfig: getModelConfig(detected, modelName)
2218
+ };
2219
+ } catch {
2220
+ return { providerKey, modelConfig: null };
2221
+ }
2222
+ }
2223
+ };
2224
+ var EXPLICIT_IMAGE_GENERATION_TOOL_NAMES = /* @__PURE__ */ new Set([
2225
+ "openAIGptImage",
2226
+ "openAIGptImageGenerate",
2227
+ "openAIGptImageEdit",
2228
+ "chatgptWebImageGenerate",
2229
+ "geminiFlashImage",
2230
+ "geminiProImagePreview"
2231
+ ]);
2232
+ var agentUsesExplicitImageGenerationTool = (agentConfig) => {
2233
+ const toolNames = Array.isArray(agentConfig.tools) ? agentConfig.tools : Array.isArray(agentConfig.toolNames) ? agentConfig.toolNames : [];
2234
+ return toolNames.some(
2235
+ (name) => typeof name === "string" && EXPLICIT_IMAGE_GENERATION_TOOL_NAMES.has(name.trim())
2236
+ );
2237
+ };
2238
+ var resolveImageGenerationStreamingState = (agentConfig, args) => {
2239
+ const { modelConfig } = resolveAgentImageModelIdentity(agentConfig);
2240
+ const hasImageOutput = !!(modelConfig?.hasImageOutput ?? modelConfig?.supportsImageOutput) || agentConfig.imageConfig?.enabled === true || agentUsesExplicitImageGenerationTool(agentConfig);
2241
+ if (!hasImageOutput) {
2242
+ return void 0;
2243
+ }
2244
+ const currentProfile = modelConfig?.imageGenerationProfiles?.find(
2245
+ (profile) => profile.imageModel === modelConfig.name
2246
+ );
2247
+ const usesWebImageTool = agentUsesExplicitImageGenerationTool(agentConfig) && (Array.isArray(agentConfig.tools) ? agentConfig.tools : []).includes("chatgptWebImageGenerate");
2248
+ return {
2249
+ kind: "image_generation",
2250
+ stage: args?.stage ?? args?.previous?.stage ?? "submitted",
2251
+ startedAt: args?.previous?.startedAt ?? Date.now(),
2252
+ 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"),
2253
+ profileLabel: currentProfile?.label
2254
+ };
2255
+ };
2256
+
1127
2257
  // packages/ai/agent/persistMessageWithFixedId.ts
1128
2258
  async function persistMessageWithFixedId(dispatch, message) {
1129
2259
  dispatch(addUserMessage(message));
@@ -3366,8 +4496,17 @@ var streamAgentChatTurnHandler = async (args, thunkApi) => {
3366
4496
  const cleanedMessages = filterAndCleanMessages(visibleMessages);
3367
4497
  const ctxWindow = getModelContextWindow(agentConfigForCall.model) || 128e3;
3368
4498
  const summaryTokenCount = contexts.dialogSummary ? estimateTokenCount(contexts.dialogSummary) : 0;
3369
- let processedMessages = trimMessagesWithSummary(
4499
+ const serverUrl = selectCurrentServer(loopState);
4500
+ const authToken = selectIdentityToken(loopState);
4501
+ const preprocessedResult = await tryPreprocessWebImageOrReject(
3370
4502
  compressOldToolResults(cleanedMessages),
4503
+ agentConfigForCall,
4504
+ initialHistoryIds,
4505
+ serverUrl,
4506
+ authToken
4507
+ );
4508
+ let processedMessages = trimMessagesWithSummary(
4509
+ preprocessedResult.messages,
3371
4510
  ctxWindow,
3372
4511
  summaryTokenCount
3373
4512
  );
@@ -3377,24 +4516,6 @@ var streamAgentChatTurnHandler = async (args, thunkApi) => {
3377
4516
  if (firstDynamicIdx === -1) firstDynamicIdx = processedMessages.length;
3378
4517
  let stableMessages = processedMessages.slice(0, firstDynamicIdx);
3379
4518
  let dynamicMessages = processedMessages.slice(firstDynamicIdx);
3380
- if (appendTempUserInput2) {
3381
- const serverUrl = selectCurrentServer(loopState);
3382
- const authToken = selectIdentityToken(loopState);
3383
- const result = await tryPreprocessWebImageOrReject(
3384
- processedMessages,
3385
- agentConfigForCall,
3386
- initialHistoryIds,
3387
- serverUrl,
3388
- authToken
3389
- );
3390
- if (result.kind === "reject") {
3391
- setLoopStopReason("error");
3392
- return rejectWithValue(result.reason);
3393
- }
3394
- processedMessages = result.messages;
3395
- stableMessages = result.stableMessages;
3396
- dynamicMessages = result.dynamicMessages;
3397
- }
3398
4519
  const bodyData = generateRequestBody({
3399
4520
  agentConfig: effectiveAgentConfig,
3400
4521
  messages: dynamicMessages,
@@ -3642,8 +4763,17 @@ var streamAgentChatTurnHandler = async (args, thunkApi) => {
3642
4763
  const cleanedMessages = filterAndCleanMessages(visibleMessages);
3643
4764
  const ctxWindow = getModelContextWindow(agentConfigForCall.model) || 128e3;
3644
4765
  const summaryTokenCount = contexts.dialogSummary ? estimateTokenCount(contexts.dialogSummary) : 0;
3645
- let processedMessages = trimMessagesWithSummary(
4766
+ const serverUrl = selectCurrentServer(loopState);
4767
+ const authToken = selectIdentityToken(loopState);
4768
+ const preprocessedResult = await tryPreprocessWebImageOrReject(
3646
4769
  compressOldToolResults(cleanedMessages),
4770
+ agentConfigForCall,
4771
+ initialHistoryIds,
4772
+ serverUrl,
4773
+ authToken
4774
+ );
4775
+ let processedMessages = trimMessagesWithSummary(
4776
+ preprocessedResult.messages,
3647
4777
  ctxWindow,
3648
4778
  summaryTokenCount
3649
4779
  );
@@ -3653,24 +4783,6 @@ var streamAgentChatTurnHandler = async (args, thunkApi) => {
3653
4783
  if (firstDynamicIdx === -1) firstDynamicIdx = processedMessages.length;
3654
4784
  let stableMessages = processedMessages.slice(0, firstDynamicIdx);
3655
4785
  let dynamicMessages = processedMessages.slice(firstDynamicIdx);
3656
- if (appendTempUserInput) {
3657
- const serverUrl = selectCurrentServer(loopState);
3658
- const authToken = selectIdentityToken(loopState);
3659
- const result = await tryPreprocessWebImageOrReject(
3660
- processedMessages,
3661
- agentConfigForCall,
3662
- initialHistoryIds,
3663
- serverUrl,
3664
- authToken
3665
- );
3666
- if (result.kind === "reject") {
3667
- setLoopStopReason("error");
3668
- return rejectWithValue(result.reason);
3669
- }
3670
- processedMessages = result.messages;
3671
- stableMessages = result.stableMessages;
3672
- dynamicMessages = result.dynamicMessages;
3673
- }
3674
4786
  const bodyData = generateRequestBody({
3675
4787
  agentConfig: effectiveAgentConfig,
3676
4788
  messages: dynamicMessages,