nolo-cli 0.29.2 → 0.30.0-alpha.10

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 (138) hide show
  1. package/{_executeModel-BFVTGZXE.js → _executeModel-5ARVVUIK.js} +64 -69
  2. package/{action-LG32A6DJ.js → action-HI3VRQLP.js} +15 -16
  3. package/{addContentAction-MPGMBJTQ.js → addContentAction-NCURJ6PK.js} +13 -13
  4. package/{addDialogAgentAction-ZH23WDID.js → addDialogAgentAction-RCY4ECF4.js} +12 -12
  5. package/{agentDeleteCommand-4S4STG42.js → agentDeleteCommand-5Q6TDCJU.js} +62 -40
  6. package/{agentEmailCommands-3F4IP4DI.js → agentEmailCommands-DSX4BJ2I.js} +77 -81
  7. package/{agentGrantCommands-JNDE4RWR.js → agentGrantCommands-E7ZZFRHK.js} +2 -1
  8. package/{agentListCommands-JCRV2XF6.js → agentListCommands-S66HL5RO.js} +59 -41
  9. package/{agentMachineCommands-KYXPYSFP.js → agentMachineCommands-ULCQ5ZNN.js} +55 -36
  10. package/{agentPullCommand-ZZGU5KOY.js → agentPullCommand-4V36XNGV.js} +4 -3
  11. package/{agentRecordCommands-UADUPIXO.js → agentRecordCommands-2AA3GEGO.js} +75 -79
  12. package/{agentRunCommand-MJWSR53W.js → agentRunCommand-3KOT77XY.js} +79 -83
  13. package/{agentRunControl-SNUKXN6J.js → agentRunControl-AKBN2366.js} +13 -1
  14. package/{agentRuntimeLocal-PC5RRRPT.js → agentRuntimeLocal-7TMDJD4S.js} +50 -31
  15. package/{agentSlice-C5OYLNBT.js → agentSlice-6IQRQZX3.js} +13 -14
  16. package/{appDeleteCommands-ZXODZ5AD.js → appDeleteCommands-UUDIWLNE.js} +55 -36
  17. package/{appDeployCommands-AWC6JPZH.js → appDeployCommands-CO6SZ7YP.js} +55 -36
  18. package/{appDeployStatusCommands-74NXMDAI.js → appDeployStatusCommands-QEVKVECJ.js} +55 -36
  19. package/{appGetCommands-6YGIAP5L.js → appGetCommands-3YSCCLK4.js} +55 -36
  20. package/{appListCommands-DZWBHMNK.js → appListCommands-FBJAFZKK.js} +55 -36
  21. package/{authCommand-XMQHBK5L.js → authCommand-3ADNCFKD.js} +16 -16
  22. package/{authCommands-JSOG2H4E.js → authCommands-CXJ6PI2O.js} +7 -7
  23. package/{chunk-TOGGHWHI.js → chunk-2CYGIPJH.js} +3 -3
  24. package/{chunk-HRJEPMZY.js → chunk-2HQ4OG6N.js} +2 -2
  25. package/{chunk-XMLRJUU5.js → chunk-2IJAKBK2.js} +12 -10
  26. package/{chunk-OLWMGSW2.js → chunk-2SOQY5L6.js} +41 -39
  27. package/{chunk-7H3UTGPM.js → chunk-3AUWC6EM.js} +82 -3
  28. package/{chunk-6HTWA77J.js → chunk-43EPBPZ2.js} +1 -1
  29. package/{chunk-RJBTU7AS.js → chunk-4F77PJBR.js} +302 -14
  30. package/{chunk-RZNYL4LW.js → chunk-4SAV7BD7.js} +65 -1
  31. package/{chunk-R5V5G73M.js → chunk-5RDLGLAP.js} +0 -1
  32. package/{chunk-VKBTAQWT.js → chunk-6JH2DF7J.js} +6 -6
  33. package/{chunk-DZ3XJVET.js → chunk-AOS5IN2I.js} +1 -1
  34. package/{chunk-5ZXNLOAG.js → chunk-ARPAHODF.js} +17 -10
  35. package/{chunk-IC7W63RM.js → chunk-ATK5WJOA.js} +4 -4
  36. package/{chunk-OEWEE4VW.js → chunk-BIPRFBC2.js} +4 -2
  37. package/{chunk-YTA2QOEE.js → chunk-CAENRKNJ.js} +15 -0
  38. package/chunk-CYRMUTGB.js +1707 -0
  39. package/chunk-DCDL3GC4.js +171 -0
  40. package/{chunk-WX3ZOSTL.js → chunk-EBNSAABL.js} +24 -26
  41. package/{chunk-2TYLTEAH.js → chunk-EDWM6D6L.js} +1 -1
  42. package/{chunk-GT3GG2H7.js → chunk-EIQDGAAE.js} +148 -2
  43. package/chunk-F3MP7CP6.js +73 -0
  44. package/{chunk-R7LOFGRE.js → chunk-G5GVZAXF.js} +19 -15
  45. package/{chunk-KEF5OBOZ.js → chunk-GKXS4F2I.js} +33 -27
  46. package/{chunk-R3JSTDQO.js → chunk-GVPMJPCT.js} +1 -1
  47. package/{chunk-WMB7GVPN.js → chunk-IPSPETAL.js} +152 -1177
  48. package/{chunk-MQRZ5QUH.js → chunk-IXZX5CJK.js} +1 -1
  49. package/{chunk-2FX23RGA.js → chunk-J3LHGBNO.js} +5 -5
  50. package/{chunk-VHBWHNVT.js → chunk-K6QEHQZ3.js} +8 -4
  51. package/{chunk-HRPWRVBI.js → chunk-KGEVMUMI.js} +11 -11
  52. package/{chunk-L65QKSVJ.js → chunk-L3GCUVOH.js} +1 -1
  53. package/{chunk-G2BZ43DV.js → chunk-LAXMH7JY.js} +14 -14
  54. package/chunk-LEVCXTDN.js +5558 -0
  55. package/{chunk-HEXXIS77.js → chunk-N2IX3ZYK.js} +1 -1
  56. package/{chunk-32ZM6HVI.js → chunk-NZBH7FTB.js} +95 -95
  57. package/{chunk-XOIF2TNF.js → chunk-OB6FBSH3.js} +13 -0
  58. package/{chunk-PSK2RUHV.js → chunk-OIW2RJ74.js} +360 -2
  59. package/{chunk-FRN5QOKN.js → chunk-PACNSC37.js} +19 -4
  60. package/{chunk-QC6ZWDSV.js → chunk-PIC6Z7VI.js} +3 -3
  61. package/{chunk-H5S4XUGI.js → chunk-Q243PXRU.js} +185 -158
  62. package/{chunk-BBGRJB5E.js → chunk-QBOW6RZN.js} +4 -4
  63. package/{chunk-FVOSIYXM.js → chunk-R5Y4XELF.js} +43 -394
  64. package/{chunk-DF7SMWEV.js → chunk-RWJPDKPB.js} +1 -1
  65. package/{chunk-NXMJ55RU.js → chunk-S2BMRBR2.js} +3 -3
  66. package/{chunk-GC34RRTQ.js → chunk-SWYMCHM7.js} +1 -69
  67. package/chunk-T27IEBNQ.js +149 -0
  68. package/{chunk-GMJS5AYP.js → chunk-T4X4GCYT.js} +19 -179
  69. package/{chunk-4BDPDTJU.js → chunk-TXVSNFHC.js} +8 -8
  70. package/{chunk-JSB4N6NU.js → chunk-V54H24CQ.js} +3 -3
  71. package/chunk-VQ4QPCKE.js +3226 -0
  72. package/{chunk-Q5RXHXKU.js → chunk-W3UDJJMA.js} +189 -122
  73. package/{chunk-L3QFIBZG.js → chunk-WTGCTVJG.js} +1 -1
  74. package/{chunk-XS7UPVR7.js → chunk-WTPC3XD4.js} +5 -5
  75. package/{chunk-WSQLK2KR.js → chunk-XFGM5PJP.js} +6 -6
  76. package/{chunk-HALKDXKP.js → chunk-XORE26Z4.js} +8 -4
  77. package/chunk-YLC42PIE.js +7889 -0
  78. package/{chunk-SKDNBYZK.js → chunk-ZJ2WITOO.js} +2 -2
  79. package/{chunk-L6RBX4L4.js → chunk-ZJH3LKEW.js} +21 -9
  80. package/{codingSkills-EN6Z6G6U.js → codingSkills-V35TRR4Y.js} +1 -2
  81. package/{createAgentAutomationAction-BK4UZJKU.js → createAgentAutomationAction-EYNYY2LB.js} +31 -37
  82. package/{createDialogAction-MJJUI2MK.js → createDialogAction-OUIRWYZP.js} +34 -39
  83. package/{createPageAction-YMZ7K363.js → createPageAction-2I5PHJFF.js} +45 -51
  84. package/{dbSlice-6QJYQUBV.js → dbSlice-BBL3PEVW.js} +12 -12
  85. package/{deleteFile-WDZ3VM7B.js → deleteFile-RJTEPOT4.js} +6 -6
  86. package/{dialogCommands-OKH45ASS.js → dialogCommands-5CL4QYQ7.js} +55 -38
  87. package/{dialogSlice-UDOKNDHB.js → dialogSlice-EKKVFKBJ.js} +28 -35
  88. package/{docCreateCommands-MCLMR4TE.js → docCreateCommands-QHCLYGNW.js} +54 -37
  89. package/{docDeleteCommands-ONDHI7JV.js → docDeleteCommands-DS6KOU6N.js} +56 -39
  90. package/{docReadCommands-FCXBMISW.js → docReadCommands-FRI5DAKH.js} +54 -37
  91. package/{docStore-N66O4CGH.js → docStore-V7EJS4PX.js} +30 -36
  92. package/{docUpdateCommands-T3XN6XOX.js → docUpdateCommands-RQO5ZTXT.js} +57 -40
  93. package/{fetchMessages-W4IKHPCS.js → fetchMessages-VPPQDDZ4.js} +3 -3
  94. package/{getPricing-X6I23RN6.js → getPricing-67TQVKFV.js} +6 -7
  95. package/{handleSendMessageAction-KC4AYUZP.js → handleSendMessageAction-KCF7KII4.js} +30 -37
  96. package/index.js +72 -72
  97. package/{localDialogRead-UFLBS6OT.js → localDialogRead-P72W2U2R.js} +1 -1
  98. package/{machineCommands-DIMRFA3Y.js → machineCommands-IAGAKTHV.js} +78 -82
  99. package/{machineWsRunDispatch-2DYJZI6Z.js → machineWsRunDispatch-JGKC2HEK.js} +73 -77
  100. package/{models-YT32CTT5.js → models-WDUTTYFS.js} +2 -2
  101. package/{offlineMarxistsAgentCommand-5OOWZLJI.js → offlineMarxistsAgentCommand-E6LUG63A.js} +6 -2
  102. package/package.json +1 -1
  103. package/{read-C7Y6LSBM.js → read-64OQDO3I.js} +7 -7
  104. package/{readDocTool-TOHRYJHP.js → readDocTool-MXM3T6PE.js} +2 -1
  105. package/{readlineWorkspace-HUPHMLDG.js → readlineWorkspace-5AQHHIBK.js} +209 -183
  106. package/{removeDialogAgentAction-WZXPOH5S.js → removeDialogAgentAction-NEKVAMSH.js} +16 -17
  107. package/{runAgentClientLoop-5TGSUKHV.js → runAgentClientLoop-6OGPS6SI.js} +63 -67
  108. package/{setDialogExtraReferencesAction-INZY2ENI.js → setDialogExtraReferencesAction-WTOHQDIV.js} +13 -13
  109. package/{setPrimaryDialogAgentAction-WCVLPYCF.js → setPrimaryDialogAgentAction-LDJOYC4F.js} +16 -17
  110. package/{settingSlice-IDUM4LWU.js → settingSlice-4M37TN7V.js} +14 -15
  111. package/{skillDiscovery-ITA7BI7A.js → skillDiscovery-I3QRA7NE.js} +2 -2
  112. package/{spaceCommands-XSSDB3YK.js → spaceCommands-VTDNKTSF.js} +240 -41
  113. package/{spaceSlice-BXDCO6PT.js → spaceSlice-LGUZMB7Y.js} +29 -35
  114. package/{streamAgentChatTurn-HRFMVSVC.js → streamAgentChatTurn-TIGCZUNZ.js} +133 -1301
  115. package/{switchDialogAgentAction-YBFFCBOD.js → switchDialogAgentAction-XVWGKR2Z.js} +12 -12
  116. package/{tableCommands-QSZILI7I.js → tableCommands-RJZ3V4TF.js} +7 -7
  117. package/{toolApiClient-WVTUYOFM.js → toolApiClient-ARGFDJAG.js} +2 -2
  118. package/{tools-5V6FHWQU.js → tools-BQAOPYMR.js} +51 -56
  119. package/{tuiSummaryLlmCaller-GCUPULOV.js → tuiSummaryLlmCaller-YQBN5IMG.js} +12 -12
  120. package/{updateDialogTitleAction-W62C4W4K.js → updateDialogTitleAction-E6HMEDPH.js} +39 -45
  121. package/chunk-5CS33IBL.js +0 -301
  122. package/chunk-5MMAK75Q.js +0 -15
  123. package/chunk-HYSJHRWD.js +0 -669
  124. package/chunk-MRC4Q34M.js +0 -188
  125. package/chunk-SIZQB7BD.js +0 -91
  126. package/chunk-UEOPA6MV.js +0 -641
  127. package/chunk-UFL6WHHJ.js +0 -15419
  128. package/chunk-VIDPVFP3.js +0 -20
  129. package/chunk-W2LZV5GE.js +0 -231
  130. package/chunk-Y5GCAMGP.js +0 -9
  131. package/chunk-YYLHWIW6.js +0 -48
  132. package/chunk-Z54ZAZZC.js +0 -1791
  133. package/chunk-ZZ2MH7LE.js +0 -84
  134. package/{chunk-OMP5L5NF.js → chunk-44HACRCK.js} +3 -3
  135. package/{chunk-ZVZMT3EA.js → chunk-KWCLUYGQ.js} +3 -3
  136. package/{chunk-NRY4GCKJ.js → chunk-WHLVPK32.js} +3 -3
  137. package/{chunk-RQSOAMPJ.js → chunk-Z5MXSEOJ.js} +2 -2
  138. package/{runtimeDoctorCommands-HSU632DY.js → runtimeDoctorCommands-E2OUORHK.js} +3 -3
@@ -2,9 +2,14 @@ import {
2
2
  applyModelLayerOverride
3
3
  } from "./chunk-LTRXGFMS.js";
4
4
  import {
5
- buildStaticUserPolicyContext,
6
- resolveSpaceContextPreloadPlan
7
- } from "./chunk-W2LZV5GE.js";
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";
8
13
  import {
9
14
  INVALID_TOOL_ARGS_REPLACEMENT,
10
15
  buildInvalidToolCallSelfHealResult,
@@ -17,13 +22,28 @@ import {
17
22
  sanitizeOutboundResponsesInput,
18
23
  sendOpenAICompletionsRequest,
19
24
  updateTotalUsage
20
- } from "./chunk-OLWMGSW2.js";
25
+ } from "./chunk-2SOQY5L6.js";
21
26
  import "./chunk-JEXVIMYZ.js";
22
27
  import {
23
28
  prepareTools
24
- } from "./chunk-32ZM6HVI.js";
29
+ } from "./chunk-NZBH7FTB.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-VQ4QPCKE.js";
44
+ import "./chunk-N7J63Q6C.js";
45
+ import "./chunk-PJY5AH5A.js";
25
46
  import {
26
- fetchReferenceContents,
27
47
  generateRequestBody,
28
48
  isResponsesConversationStateRejection,
29
49
  mergeReferences,
@@ -35,223 +55,156 @@ import {
35
55
  resolveToolsFromKeys,
36
56
  selectResponsesConversationState,
37
57
  updateResponsesConversationState
38
- } from "./chunk-FVOSIYXM.js";
39
- import "./chunk-2FX23RGA.js";
58
+ } from "./chunk-R5Y4XELF.js";
59
+ import "./chunk-J3LHGBNO.js";
60
+ import "./chunk-OIW2RJ74.js";
61
+ import {
62
+ extractImagePartsFromResponseOutput,
63
+ extractTextFromResponseOutput,
64
+ toResponsesTools
65
+ } from "./chunk-D34RI6NI.js";
66
+ import {
67
+ isOpenAiResponsesModel
68
+ } from "./chunk-WTPC3XD4.js";
69
+ import "./chunk-4PWB7JRR.js";
40
70
  import {
41
71
  createSSEParser,
42
- getAllToolRuns,
43
- resolveAgentRecommendedSkillNames,
44
- resolveAgentRequiredPackIds,
45
72
  shouldBlockForGptPro,
46
73
  waitForAbortableDelay
47
- } from "./chunk-WMB7GVPN.js";
48
- import "./chunk-RQSOAMPJ.js";
49
- import "./chunk-GC34RRTQ.js";
50
- import "./chunk-HRJEPMZY.js";
74
+ } from "./chunk-IPSPETAL.js";
75
+ import "./chunk-Z5MXSEOJ.js";
76
+ import "./chunk-KXKQO4Q6.js";
77
+ import "./chunk-2HQ4OG6N.js";
51
78
  import "./chunk-KQHGZWSV.js";
52
- import "./chunk-3LY4F7SV.js";
53
- import "./chunk-VF4K2QE6.js";
54
79
  import {
55
- getDocState
56
- } from "./chunk-VKBTAQWT.js";
57
- import {
58
- getFinalPrice,
59
- getModelPricing,
60
- getPrices,
61
- hasExplicitAgentPricing
62
- } from "./chunk-FRN5QOKN.js";
80
+ resolveRuntimeToolSurfaceForAgent
81
+ } from "./chunk-CYRMUTGB.js";
82
+ import "./chunk-6JH2DF7J.js";
83
+ import "./chunk-43EPBPZ2.js";
84
+ import "./chunk-F3MP7CP6.js";
85
+ import "./chunk-SWYMCHM7.js";
86
+ import "./chunk-44HACRCK.js";
87
+ import "./chunk-T4X4GCYT.js";
88
+ import "./chunk-DCDL3GC4.js";
63
89
  import {
64
90
  getPublicImageAgentDefaultProfile,
65
91
  getPublicImageAgentMode
66
- } from "./chunk-VIDPVFP3.js";
67
- import "./chunk-6HTWA77J.js";
92
+ } from "./chunk-PACNSC37.js";
93
+ import "./chunk-3LY4F7SV.js";
68
94
  import {
69
- extractCategorizedMentions
70
- } from "./chunk-VP4WJWKW.js";
71
- import "./chunk-63W5N6P3.js";
72
- import "./chunk-GMJS5AYP.js";
95
+ selectCurrentSpaceId
96
+ } from "./chunk-YLC42PIE.js";
73
97
  import {
74
- PERSONALIZATION_DIALOG_CATEGORY,
75
98
  addToolMessage,
76
99
  addUserMessage,
77
- buildPersonalizationDialogPolicyContext,
78
100
  estimateMissingUsage,
79
- extractReferenceKeysFromMessage,
101
+ estimateTokenCount,
80
102
  finalizeTransientMessageOnError,
103
+ getModelContextWindow,
104
+ getModelInfo,
81
105
  messageStreamEnd,
82
106
  messageStreaming,
83
107
  prepareAndPersistUserMessage,
84
108
  removeTransientMessage,
109
+ resolveBuiltinPlatformAgentRecord,
85
110
  selectAllMsgs,
86
111
  selectCurrentDialogConfig,
87
- selectCurrentSpaceId,
88
- selectCurrentTable,
89
- selectCurrentUserBalance,
90
112
  selectDialogConfigByKey,
91
- selectTableRows,
92
- selectViewMode,
93
113
  updateTokens
94
- } from "./chunk-UFL6WHHJ.js";
95
- import "./chunk-XOIF2TNF.js";
96
- import "./chunk-MRC4Q34M.js";
97
- import "./chunk-SIZQB7BD.js";
98
- import "./chunk-RJBTU7AS.js";
99
- import "./chunk-YYLHWIW6.js";
100
- import "./chunk-CWMSB67P.js";
114
+ } from "./chunk-LEVCXTDN.js";
115
+ import "./chunk-OB6FBSH3.js";
101
116
  import {
102
117
  createCliChatTurnStream,
103
118
  getCliChatSession,
104
119
  startCliChatSession
105
- } from "./chunk-IC7W63RM.js";
120
+ } from "./chunk-ATK5WJOA.js";
121
+ import "./chunk-4F77PJBR.js";
122
+ import "./chunk-JZPBVBIY.js";
106
123
  import "./chunk-5RGU3J7P.js";
107
124
  import "./chunk-M76ECQRD.js";
108
- import "./chunk-L65QKSVJ.js";
109
- import "./chunk-7H3UTGPM.js";
110
- import {
111
- TOOL_PACKS,
112
- addDefaultSystemCapabilityTools,
113
- applyDefaultWebToolPacks,
114
- applyDisabledTools,
115
- applySystemBuiltinSkillFilter,
116
- expandEnabledPackPromptPatches,
117
- expandEnabledPacks,
118
- resolveEffectiveEnabledPacks
119
- } from "./chunk-CF7S2RYZ.js";
120
- import "./chunk-ZWJOGMKH.js";
121
- import "./chunk-WZSRQNQG.js";
122
- import {
123
- assertDesktopAgentRuntimeTurnBodyHasNoRawSecrets,
124
- buildDesktopAgentRuntimeAgentConfigSnapshot,
125
- buildDesktopAgentRuntimeDialogHistorySnapshot
126
- } from "./chunk-OIQPORYI.js";
127
125
  import {
128
- describeImageViaServerProxy,
129
- preprocessImagesForTextOnlyAgent,
130
- projectToolMessageContent,
131
- resolveAgentImageInputSupport
132
- } from "./chunk-Z54ZAZZC.js";
133
- import "./chunk-N7J63Q6C.js";
134
- import "./chunk-PSK2RUHV.js";
135
- import {
136
- extractImagePartsFromResponseOutput,
137
- extractTextFromResponseOutput,
138
- toResponsesTools
139
- } from "./chunk-D34RI6NI.js";
140
- import {
141
- isOpenAiResponsesModel
142
- } from "./chunk-XS7UPVR7.js";
143
- import {
144
- resolveRuntimeToolSurfaceForAgent
145
- } from "./chunk-UEOPA6MV.js";
146
- import {
147
- estimateTokenCount,
148
- getModelContextWindow,
149
- getModelInfo,
150
- planContextUsage,
151
- resolveBuiltinPlatformAgentRecord
152
- } from "./chunk-HYSJHRWD.js";
153
- import "./chunk-5MMAK75Q.js";
154
- import "./chunk-5CS33IBL.js";
155
- import "./chunk-JZPBVBIY.js";
156
- import {
157
- getApiEndpoint,
158
- getModelConfig,
159
- getProviderByModelName
160
- } from "./chunk-GT3GG2H7.js";
161
- import "./chunk-ZHXJ6M7T.js";
162
- import {
163
- buildLinkedSpacesSection,
164
- buildSpaceContextLayer
165
- } from "./chunk-PJY5AH5A.js";
166
- import "./chunk-4PWB7JRR.js";
167
- import {
168
- canonicalizeToolNames,
169
- prioritizeToolNames
170
- } from "./chunk-ZZ2MH7LE.js";
171
- import {
172
- resolveToolBaseUrl
173
- } from "./chunk-OMP5L5NF.js";
126
+ toErrorMessage
127
+ } from "./chunk-HNMXYYJR.js";
128
+ import "./chunk-DWLEOOGR.js";
174
129
  import {
175
130
  addActiveController,
176
131
  clearPendingUserInputQueue,
177
132
  dequeueUserInput,
178
133
  removeActiveController,
179
134
  selectActiveControllers,
180
- selectPendingFiles,
181
135
  selectPendingUserInputQueue,
182
136
  tokenUsageLiveUpdate
183
137
  } from "./chunk-3ASDTTEI.js";
184
- import "./chunk-DWLEOOGR.js";
185
- import "./chunk-KXKQO4Q6.js";
186
- import {
187
- buildCliPrompt
188
- } from "./chunk-ATNTHIZI.js";
138
+ import "./chunk-V54H24CQ.js";
139
+ import "./chunk-WTGCTVJG.js";
140
+ import "./chunk-CWMSB67P.js";
189
141
  import {
190
- toErrorMessage
191
- } from "./chunk-HNMXYYJR.js";
192
- import "./chunk-L3QFIBZG.js";
193
- import "./chunk-YTA2QOEE.js";
194
- import "./chunk-HRPWRVBI.js";
142
+ getApiEndpoint
143
+ } from "./chunk-EIQDGAAE.js";
144
+ import "./chunk-ZHXJ6M7T.js";
145
+ import "./chunk-CAENRKNJ.js";
146
+ import "./chunk-63W5N6P3.js";
147
+ import "./chunk-VF4K2QE6.js";
148
+ import "./chunk-KGEVMUMI.js";
195
149
  import {
196
- selectAiRecentContentLimit,
197
150
  selectCurrentServer,
198
- selectGlobalPrompt,
199
- selectKnowledgeCaptureLevel,
200
- selectMaxExecutionTime,
201
- selectSpaceContextLevel,
202
- selectUserTonePreset
203
- } from "./chunk-R7LOFGRE.js";
204
- import "./chunk-Y5GCAMGP.js";
205
- import "./chunk-UZ6XXCVR.js";
151
+ selectMaxExecutionTime
152
+ } from "./chunk-G5GVZAXF.js";
206
153
  import {
207
154
  asRecordOrEmpty
208
155
  } from "./chunk-KX6YBIHG.js";
209
- import "./chunk-JSB4N6NU.js";
210
156
  import {
211
157
  patch,
212
158
  read,
213
159
  selectById,
214
160
  write
215
- } from "./chunk-G2BZ43DV.js";
216
- import {
217
- createDialogMessageKeyAndId,
218
- dialogMessageKey
219
- } from "./chunk-NRY4GCKJ.js";
220
- import {
221
- asOptionalFiniteNumber
222
- } from "./chunk-WWC7I6TA.js";
223
- import "./chunk-SKDNBYZK.js";
224
- import {
225
- asNonEmptyStringArray
226
- } from "./chunk-I42VC5KR.js";
161
+ } from "./chunk-LAXMH7JY.js";
162
+ import "./chunk-ZJ2WITOO.js";
227
163
  import "./chunk-QSJ3HFEF.js";
228
164
  import {
229
165
  isSystemBuiltinTrustedAgentKey
230
- } from "./chunk-L6RBX4L4.js";
166
+ } from "./chunk-ZJH3LKEW.js";
167
+ import {
168
+ extractCustomId
169
+ } from "./chunk-TOW4E763.js";
231
170
  import {
232
171
  selectIdentityToken,
233
172
  selectIdentityUser,
234
173
  selectIdentityUserId,
235
174
  selectRuntimeCurrentServer
236
- } from "./chunk-XMLRJUU5.js";
175
+ } from "./chunk-2IJAKBK2.js";
237
176
  import {
238
177
  getIsDesktopApp,
239
178
  isAbortError
240
- } from "./chunk-R5V5G73M.js";
179
+ } from "./chunk-5RDLGLAP.js";
180
+ import "./chunk-LCBAMY2M.js";
181
+ import "./chunk-4SN6J65J.js";
182
+ import "./chunk-CF7PE763.js";
183
+ import {
184
+ extractCategorizedMentions
185
+ } from "./chunk-VP4WJWKW.js";
186
+ import "./chunk-L3GCUVOH.js";
187
+ import {
188
+ createDialogMessageKeyAndId,
189
+ dialogMessageKey
190
+ } from "./chunk-WHLVPK32.js";
191
+ import {
192
+ asOptionalFiniteNumber
193
+ } from "./chunk-WWC7I6TA.js";
241
194
  import "./chunk-GBRG75BQ.js";
242
195
  import {
243
196
  asTrimmedString
244
197
  } from "./chunk-3EUW3WEO.js";
245
198
  import "./chunk-U6VC4MU4.js";
246
- import {
247
- extractCustomId
248
- } from "./chunk-TOW4E763.js";
249
199
  import {
250
200
  isRecord
251
201
  } from "./chunk-KUG52IAP.js";
252
- import "./chunk-LCBAMY2M.js";
253
- import "./chunk-4SN6J65J.js";
254
- import "./chunk-CF7PE763.js";
202
+ import "./chunk-3AUWC6EM.js";
203
+ import "./chunk-CF7S2RYZ.js";
204
+ import "./chunk-ZWJOGMKH.js";
205
+ import "./chunk-WZSRQNQG.js";
206
+ import "./chunk-UZ6XXCVR.js";
207
+ import "./chunk-I42VC5KR.js";
255
208
  import {
256
209
  asOptionalTrimmedString
257
210
  } from "./chunk-G3SUCT4W.js";
@@ -437,107 +390,6 @@ function runChatQueueTurnEnd(payload) {
437
390
  };
438
391
  }
439
392
 
440
- // packages/ai/agent/getFullChatContextKeys.ts
441
- var difference = (arrA, arrB) => {
442
- if (!arrA.length) return [];
443
- if (!arrB.length) return [...arrA];
444
- const exclude = new Set(arrB);
445
- return arrA.filter((item) => !exclude.has(item));
446
- };
447
- var getFullChatContextKeys = async (state, dispatch, agentConfig, userInput, dialogConfig) => {
448
- const msgs = selectAllMsgs(
449
- state,
450
- dialogConfig?.dbKey ? extractCustomId(dialogConfig.dbKey) : dialogConfig?.id
451
- );
452
- const botInstructionKeys = /* @__PURE__ */ new Set();
453
- const botKnowledgeKeys = /* @__PURE__ */ new Set();
454
- if (Array.isArray(agentConfig.references)) {
455
- for (const ref of agentConfig.references) {
456
- if (!ref?.dbKey) continue;
457
- if (ref.type === "instruction") {
458
- botInstructionKeys.add(ref.dbKey);
459
- } else {
460
- botKnowledgeKeys.add(ref.dbKey);
461
- }
462
- }
463
- }
464
- const currentInputKeys = /* @__PURE__ */ new Set();
465
- if (Array.isArray(userInput)) {
466
- for (const part of userInput) {
467
- if (part?.pageKey) currentInputKeys.add(part.pageKey);
468
- if (part?.dialogKey) currentInputKeys.add(part.dialogKey);
469
- }
470
- }
471
- const historyKeys = /* @__PURE__ */ new Set();
472
- const savedKeys = dialogConfig?.referenceKeys;
473
- if (Array.isArray(savedKeys)) {
474
- savedKeys.forEach((k) => historyKeys.add(k));
475
- }
476
- const scanContentParts = (msg) => {
477
- if (!msg) return;
478
- for (const key of extractReferenceKeysFromMessage(msg)) {
479
- historyKeys.add(key);
480
- }
481
- };
482
- if (msgs && msgs.length > 0) {
483
- const summarizedBeforeId = dialogConfig?.summarizedBeforeId;
484
- if (!summarizedBeforeId) {
485
- for (const msg of msgs) scanContentParts(msg);
486
- } else {
487
- let foundMarker = false;
488
- let startScan = false;
489
- for (const msg of msgs) {
490
- if (!startScan) {
491
- if (msg.id === summarizedBeforeId) {
492
- foundMarker = true;
493
- startScan = true;
494
- }
495
- continue;
496
- }
497
- scanContentParts(msg);
498
- }
499
- if (!foundMarker) {
500
- console.warn(`[getFullChatContextKeys] marker ${summarizedBeforeId} not found, scanning all`);
501
- for (const msg of msgs) scanContentParts(msg);
502
- }
503
- }
504
- }
505
- return {
506
- botInstructionKeys,
507
- currentInputKeys,
508
- historyKeys,
509
- botKnowledgeKeys
510
- };
511
- };
512
- var deduplicateContextKeys = (keys) => {
513
- const {
514
- botInstructionKeys,
515
- currentInputKeys,
516
- historyKeys,
517
- botKnowledgeKeys
518
- } = keys;
519
- const finalBotInstructionKeys = Array.from(botInstructionKeys);
520
- const finalCurrentInputKeys = difference(
521
- Array.from(currentInputKeys),
522
- finalBotInstructionKeys
523
- );
524
- const finalHistoryKeys = difference(Array.from(historyKeys), [
525
- ...finalBotInstructionKeys,
526
- ...finalCurrentInputKeys
527
- ]);
528
- const finalBotKnowledgeKeys = difference(Array.from(botKnowledgeKeys), [
529
- ...finalBotInstructionKeys,
530
- ...finalCurrentInputKeys,
531
- ...finalHistoryKeys
532
- ]);
533
- return {
534
- botInstructionsContext: finalBotInstructionKeys,
535
- currentInputContext: finalCurrentInputKeys,
536
- historyContext: finalHistoryKeys,
537
- botKnowledgeContext: finalBotKnowledgeKeys
538
- };
539
- };
540
-
541
393
  // packages/ai/chat/streamRetry.ts
542
394
  var MAX_INITIAL_STREAM_RETRIES = 3;
543
395
  var DEFAULT_INITIAL_STREAM_RETRY_AFTER_MS = 1500;
@@ -1271,1000 +1123,6 @@ function applyQuickChatModelOverride(base, override) {
1271
1123
  );
1272
1124
  }
1273
1125
 
1274
- // packages/ai/agent/canvasEditingContext.ts
1275
- function buildCanvasNodeEditingContextSummary(runtimeOptions) {
1276
- if (runtimeOptions?.editingTarget?.kind !== "canvas_node") return null;
1277
- const editingTarget = runtimeOptions.editingTarget;
1278
- const metadata = editingTarget.metadata ?? {};
1279
- const selectedNodeId = typeof metadata.selectedNodeId === "string" ? metadata.selectedNodeId : editingTarget.key ?? "(\u672A\u77E5\u8282\u70B9)";
1280
- const part = typeof metadata.part === "string" ? metadata.part : editingTarget.title ?? selectedNodeId;
1281
- const nodeType = typeof metadata.type === "string" ? metadata.type : "(\u672A\u77E5\u7C7B\u578B)";
1282
- const path = Array.isArray(metadata.path) ? metadata.path.filter((item) => typeof item === "string") : [];
1283
- const props = asRecordOrEmpty(metadata.props);
1284
- const style = asRecordOrEmpty(metadata.style);
1285
- return [
1286
- "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1ACanvas Tree \u4E2D\u7684\u4E00\u4E2A\u9009\u4E2D\u8282\u70B9\u3002",
1287
- `- \u8282\u70B9 ID: ${selectedNodeId}`,
1288
- `- part: ${part}`,
1289
- `- \u8282\u70B9\u7C7B\u578B: ${nodeType}`,
1290
- ...path.length ? [`- \u8282\u70B9\u8DEF\u5F84: ${path.join(" > ")}`] : [],
1291
- "",
1292
- "\u5F53\u524D\u8282\u70B9 props:",
1293
- JSON.stringify(props, null, 2),
1294
- "",
1295
- "\u5F53\u524D\u8282\u70B9 style:",
1296
- JSON.stringify(style, null, 2),
1297
- "",
1298
- "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
1299
- `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`,
1300
- "2. \u4E0D\u8981\u91CD\u5EFA root/shell\uFF0C\u4E0D\u8981\u91CD\u65B0 append \u5DF2\u5B58\u5728\u7684\u5927\u5757\u5185\u5BB9\u3002",
1301
- "3. \u9664\u975E\u7528\u6237\u660E\u786E\u8981\u6C42\u65B0\u589E\u5B50\u6A21\u5757\uFF0C\u5426\u5219\u4E0D\u8981 appendNode\u3002",
1302
- "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"
1303
- ].join("\n");
1304
- }
1305
-
1306
- // packages/ai/agent/buildEditingContext.ts
1307
- var buildAppConstraintPacks = (args) => {
1308
- const imports = new Set(args.externalImports);
1309
- const fileSet = new Set(args.fileNames);
1310
- const packs = [
1311
- {
1312
- id: "repair-loop",
1313
- title: "\u9884\u68C0\u4E0E\u5B9A\u70B9\u4FEE\u590D",
1314
- rules: [
1315
- "\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",
1316
- "\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",
1317
- "\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",
1318
- "\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"
1319
- ]
1320
- },
1321
- {
1322
- id: "design-system",
1323
- title: "\u8BBE\u8BA1\u7CFB\u7EDF\u4E0E\u5C0F\u6539\u52A8\u7EA6\u675F",
1324
- rules: [
1325
- "\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",
1326
- "\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",
1327
- "\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",
1328
- "\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",
1329
- "\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",
1330
- "\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"
1331
- ]
1332
- }
1333
- ];
1334
- if (args.framework === "react-spa" || fileSet.has("main.tsx") || fileSet.has("App.tsx")) {
1335
- packs.push({
1336
- id: "react-spa-core",
1337
- title: "React SPA \u5F62\u6001\u4FDD\u6301",
1338
- rules: [
1339
- '\u7EE7\u7EED\u6CBF\u7528 framework: "react-spa" + files\uFF0C\u4E0D\u8981\u9000\u56DE\u5355\u6587\u4EF6 Worker\u3002',
1340
- "\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"
1341
- ]
1342
- });
1343
- }
1344
- if (imports.has("react-icons/lu")) {
1345
- packs.push({
1346
- id: "react-icons-lu",
1347
- title: "Lucide \u56FE\u6807\u5B89\u5168\u89C4\u5219",
1348
- rules: [
1349
- "\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",
1350
- "\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"
1351
- ]
1352
- });
1353
- }
1354
- if (imports.has("leaflet") || imports.has("react-leaflet")) {
1355
- packs.push({
1356
- id: "leaflet",
1357
- title: "Leaflet \u5730\u56FE\u7EA6\u675F",
1358
- rules: [
1359
- "\u4E0D\u8981\u624B\u52A8 import leaflet.css\uFF1B\u5E73\u53F0\u4F1A\u81EA\u52A8\u6CE8\u5165 Leaflet \u6837\u5F0F\u3002",
1360
- "\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"
1361
- ]
1362
- });
1363
- }
1364
- if (imports.has("@xyflow/react")) {
1365
- packs.push({
1366
- id: "xyflow",
1367
- title: "Flow \u56FE\u7F16\u8F91\u7EA6\u675F",
1368
- rules: [
1369
- "\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",
1370
- "\u4F18\u5148\u590D\u7528\u73B0\u6709\u8282\u70B9/\u8FB9\u6570\u636E\u7ED3\u6784\uFF0C\u907F\u514D\u91CD\u5199\u6574\u5957 flow \u753B\u5E03\u3002"
1371
- ]
1372
- });
1373
- }
1374
- if (imports.has("echarts") || imports.has("echarts-for-react")) {
1375
- packs.push({
1376
- id: "echarts",
1377
- title: "\u56FE\u8868\u6539\u52A8\u7EA6\u675F",
1378
- rules: [
1379
- "\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",
1380
- "\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"
1381
- ]
1382
- });
1383
- }
1384
- if (imports.has("docx") || imports.has("xlsx")) {
1385
- packs.push({
1386
- id: "file-processing",
1387
- title: "\u6587\u6863/\u8868\u683C\u5904\u7406\u7EA6\u675F",
1388
- rules: [
1389
- "\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",
1390
- "\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"
1391
- ]
1392
- });
1393
- }
1394
- return packs;
1395
- };
1396
- var formatAppConstraintPacks = (packs) => {
1397
- if (packs.length === 0) return [];
1398
- return [
1399
- "",
1400
- "\u5F53\u524D\u6FC0\u6D3B\u7EA6\u675F\u5305\uFF08\u6309\u5F53\u524D\u5E94\u7528\u4F9D\u8D56/\u5F62\u6001\u52A8\u6001\u6CE8\u5165\uFF09\uFF1A",
1401
- ...packs.flatMap((pack) => [
1402
- `- ${pack.title}\uFF08${pack.id}\uFF09`,
1403
- ...pack.rules.map((rule) => ` - ${rule}`)
1404
- ])
1405
- ];
1406
- };
1407
- var buildEditingContextSummary = (state, runtimeOptions) => {
1408
- const targetKind = runtimeOptions?.editingTarget?.kind;
1409
- if (targetKind === "table") {
1410
- const table = selectCurrentTable(state);
1411
- const rows = selectTableRows(state);
1412
- const metadata = runtimeOptions?.editingTarget?.metadata;
1413
- const focusContext = metadata && typeof metadata === "object" ? metadata.focusContext : null;
1414
- if (!table) return null;
1415
- const columns = Array.isArray(table.columns) ? table.columns : [];
1416
- const columnSummaries = columns.length ? columns.map((c) => {
1417
- const displayName = c.label || c.name;
1418
- const type = c.type || "text";
1419
- const requiredFlag = c.required ? "\u5FC5\u586B" : "\u53EF\u9009";
1420
- const primaryFlag = c.isPrimary ? "\uFF0C\u4E3B\u5B57\u6BB5" : "";
1421
- const optionsStr = Array.isArray(c.options) && c.options.length ? `\uFF0C\u53EF\u9009\u503C\uFF1A${c.options.join(" | ")}` : "";
1422
- const descStr = c.description ? `\u3002\u8BF4\u660E\uFF1A${c.description}` : "";
1423
- return `- ${c.name}\uFF08\u663E\u793A\u540D\uFF1A${displayName}\uFF0C\u7C7B\u578B\uFF1A${type}\uFF0C${requiredFlag}${primaryFlag}${optionsStr}${descStr}\uFF09`;
1424
- }) : ["- (\u5F53\u524D\u8868\u5C1A\u672A\u5B9A\u4E49\u5B57\u6BB5)"];
1425
- const sampleRows = Array.isArray(rows) ? rows.slice(0, 20) : [];
1426
- const rowsPreview = sampleRows.length ? JSON.stringify(sampleRows, null, 2) : "(\u5F53\u524D\u8868\u6682\u65E0\u884C\u6570\u636E)";
1427
- const tableTitle = table.displayName ?? table.tableId ?? "(\u672A\u547D\u540D\u8868)";
1428
- const tableDesc = table.description ? `\u7528\u9014\u8BF4\u660E\uFF1A${table.description}` : "(\u6682\u65E0\u7528\u9014\u8BF4\u660E)";
1429
- const tableTagsLine = Array.isArray(table.tags) && table.tags.length ? `- \u5173\u952E\u8BCD\u6807\u7B7E: ${table.tags.join(", ")}` : null;
1430
- return [
1431
- "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u5F20\u6570\u636E\u8868\uFF08Editing Table\uFF09\u3002",
1432
- `- \u8868 ID: ${table.tableId}`,
1433
- `- \u663E\u793A\u540D\u79F0: ${tableTitle}`,
1434
- `- ${tableDesc}`,
1435
- ...tableTagsLine ? [tableTagsLine] : [],
1436
- ...focusContext && typeof focusContext === "object" && "columnName" in focusContext ? [
1437
- "",
1438
- "\u5F53\u524D\u7126\u70B9\uFF08Focus Context\uFF09\uFF1A",
1439
- `- \u5F53\u524D\u5355\u5143\u683C\u5217: ${String(focusContext.columnName ?? "(\u672A\u77E5\u5217)")}`,
1440
- ...focusContext.rowTitle ? [`- \u5F53\u524D\u884C\u6807\u9898: ${String(focusContext.rowTitle)}`] : [],
1441
- ...focusContext.rowIndex !== null && focusContext.rowIndex !== void 0 ? [`- \u5F53\u524D\u884C\u53F7: ${Number(focusContext.rowIndex) + 1}`] : [],
1442
- ...focusContext.cellPreview ? [`- \u5F53\u524D\u5355\u5143\u683C\u5185\u5BB9\u9884\u89C8: ${String(focusContext.cellPreview)}`] : []
1443
- ] : [],
1444
- "",
1445
- "\u5B57\u6BB5\u5B9A\u4E49\uFF08Field Schema\uFF09\uFF1A",
1446
- ...columnSummaries,
1447
- "",
1448
- "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
1449
- "\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",
1450
- "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",
1451
- "2. \u8C03\u7528 addTableRow \u65F6\uFF1A",
1452
- " - \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",
1453
- ' - \u4F8B\u5982\uFF1A{"values":{"title":"\u4FEE Bug #123","status":"todo","note":"\u9AD8\u4F18\u5148\u7EA7"}}\u3002',
1454
- " - \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",
1455
- ' - \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',
1456
- " - \u7EDD\u4E0D\u8981\u4F20\u5165\u7A7A\u5BF9\u8C61 {} \u4F5C\u4E3A values\u3002",
1457
- "",
1458
- "\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",
1459
- rowsPreview
1460
- ].join("\n");
1461
- }
1462
- if (targetKind === "page" || targetKind === "article") {
1463
- const page = getDocState();
1464
- const metadata = runtimeOptions?.editingTarget?.metadata;
1465
- const focusContext = metadata && typeof metadata === "object" ? metadata.focusContext : null;
1466
- if (!page) return null;
1467
- const title = page.title ?? "(\u672A\u547D\u540D\u9875\u9762)";
1468
- return [
1469
- "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u4E2A\u9875\u9762 / \u6587\u7AE0\uFF08Editing Document\uFF09\u3002",
1470
- `- \u6807\u9898: ${title}`,
1471
- ...focusContext && typeof focusContext === "object" && "anchorPath" in focusContext ? [
1472
- "",
1473
- "\u5F53\u524D\u7126\u70B9\uFF08Focus Context\uFF09\uFF1A",
1474
- `- \u5149\u6807\u662F\u5426\u6298\u53E0: ${Boolean(focusContext.isCollapsed) ? "\u662F" : "\u5426"}`,
1475
- ...focusContext.blockType ? [`- \u5F53\u524D\u5757\u7C7B\u578B: ${String(focusContext.blockType)}`] : [],
1476
- ...focusContext.selectedText ? [`- \u5F53\u524D\u9009\u4E2D\u6587\u672C: ${String(focusContext.selectedText)}`] : [],
1477
- ...focusContext.anchorPath?.length ? [`- \u5F53\u524D\u951A\u70B9\u8DEF\u5F84: ${focusContext.anchorPath.join(" > ")}`] : []
1478
- ] : [],
1479
- "",
1480
- "\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",
1481
- "\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"
1482
- ].join("\n");
1483
- }
1484
- if (targetKind === "app") {
1485
- const editingTarget = runtimeOptions?.editingTarget;
1486
- const metadata = editingTarget?.metadata;
1487
- const appId = editingTarget?.key ?? "(\u672A\u77E5 appId)";
1488
- const title = editingTarget?.title ?? "(\u672A\u547D\u540D\u5E94\u7528)";
1489
- const framework = typeof metadata?.framework === "string" ? metadata.framework : "worker";
1490
- const appUrl = typeof metadata?.appUrl === "string" ? metadata.appUrl : null;
1491
- const fileNames = Array.isArray(metadata?.fileNames) ? metadata.fileNames.filter((name) => typeof name === "string") : [];
1492
- const externalImports = Array.isArray(metadata?.externalImports) ? metadata.externalImports.filter(
1493
- (name) => typeof name === "string"
1494
- ) : [];
1495
- const sourceSummary = asOptionalTrimmedString(editingTarget?.summary) ?? null;
1496
- const selectedNode = metadata && typeof metadata === "object" && metadata.selectedNode && typeof metadata.selectedNode === "object" ? metadata.selectedNode : null;
1497
- const constraintPacks = buildAppConstraintPacks({
1498
- framework,
1499
- fileNames,
1500
- externalImports
1501
- });
1502
- if (selectedNode && typeof selectedNode.cssPath === "string") {
1503
- const tagName = typeof selectedNode.tagName === "string" && selectedNode.tagName ? selectedNode.tagName : "\u5143\u7D20";
1504
- const cssPath = String(selectedNode.cssPath);
1505
- const outerHTMLSnippet = typeof selectedNode.outerHTMLSnippet === "string" ? selectedNode.outerHTMLSnippet : "";
1506
- const textSnippet = typeof selectedNode.textSnippet === "string" ? selectedNode.textSnippet : "";
1507
- const noloLoc = typeof selectedNode.noloLoc === "string" ? selectedNode.noloLoc : "";
1508
- constraintPacks.push({
1509
- id: "selected-node",
1510
- title: "\u7528\u6237\u9009\u4E2D\u8282\u70B9\uFF08\u5B9A\u70B9\u4FEE\u6539\uFF09",
1511
- rules: [
1512
- `\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`,
1513
- `\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`,
1514
- "\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",
1515
- "\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",
1516
- "\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"
1517
- ]
1518
- });
1519
- }
1520
- return [
1521
- "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u4E2A Web \u5E94\u7528\uFF08Editing App\uFF09\u3002",
1522
- `- \u5E94\u7528 ID: ${appId}`,
1523
- `- \u540D\u79F0: ${title}`,
1524
- `- \u6280\u672F\u5F62\u6001: ${framework}`,
1525
- ...appUrl ? [`- \u5F53\u524D\u8BBF\u95EE\u5730\u5740: ${appUrl}`] : [],
1526
- ...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)"],
1527
- ...externalImports.length ? [`- \u5F53\u524D\u4F9D\u8D56\u767D\u540D\u5355\u547D\u4E2D: ${externalImports.join(", ")}`] : [],
1528
- ...sourceSummary ? ["", sourceSummary] : [],
1529
- "",
1530
- "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
1531
- "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",
1532
- "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",
1533
- "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",
1534
- "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",
1535
- "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",
1536
- `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`,
1537
- 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",
1538
- ...fileNames.length ? [] : [
1539
- "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",
1540
- "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"
1541
- ],
1542
- "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",
1543
- "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",
1544
- "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",
1545
- ...formatAppConstraintPacks(constraintPacks)
1546
- ].join("\n");
1547
- }
1548
- if (targetKind === "local_preview") {
1549
- const metadata = runtimeOptions?.editingTarget?.metadata;
1550
- const selectedNode = metadata && typeof metadata === "object" && metadata.selectedNode && typeof metadata.selectedNode === "object" ? metadata.selectedNode : null;
1551
- if (!selectedNode) return null;
1552
- const readString = (key) => typeof selectedNode[key] === "string" ? selectedNode[key] : "";
1553
- const tagName = readString("tagName") || "\u5143\u7D20";
1554
- const cssPath = readString("cssPath");
1555
- const noloLoc = readString("noloLoc");
1556
- const textSnippet = readString("textSnippet");
1557
- const outerHTMLSnippet = readString("outerHTMLSnippet");
1558
- return [
1559
- "\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u672C\u5730\u5DE5\u4F5C\u533A\u91CC\u6B63\u5728\u9884\u89C8\u7684\u7F51\u9875\uFF08Local Preview\uFF09\u3002",
1560
- `\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`,
1561
- `\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`,
1562
- "",
1563
- "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
1564
- "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",
1565
- 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",
1566
- "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",
1567
- "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",
1568
- "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"
1569
- ].join("\n");
1570
- }
1571
- if (targetKind === "image" || targetKind === "file") {
1572
- const editingTarget = runtimeOptions?.editingTarget;
1573
- const metadata = editingTarget?.metadata;
1574
- const title = editingTarget?.title ?? "(\u672A\u547D\u540D\u5BF9\u8C61)";
1575
- const objectKey = editingTarget?.key ?? "(\u672A\u77E5 key)";
1576
- const fileId = typeof metadata?.fileId === "string" ? metadata.fileId : null;
1577
- const url = typeof metadata?.url === "string" ? metadata.url : null;
1578
- const size = typeof metadata?.size === "number" ? metadata.size : null;
1579
- return [
1580
- `\u5F53\u524D\u7F16\u8F91\u76EE\u6807\uFF1A\u4E00\u4E2A${targetKind === "image" ? "\u56FE\u7247" : "\u6587\u4EF6"}\u5BF9\u8C61\uFF08Editing ${targetKind === "image" ? "Image" : "File"}\uFF09\u3002`,
1581
- `- \u5BF9\u8C61 key: ${objectKey}`,
1582
- `- \u6807\u9898: ${title}`,
1583
- ...fileId ? [`- fileId: ${fileId}`] : [],
1584
- ...url ? [`- \u8D44\u6E90\u5730\u5740: ${url}`] : [],
1585
- ...size !== null ? [`- \u6587\u4EF6\u5927\u5C0F: ${size} bytes`] : [],
1586
- "",
1587
- "\u3010\u7ED9 AI \u7684\u64CD\u4F5C\u6307\u5357 / \u975E\u7528\u6237\u539F\u8BDD\u3011",
1588
- 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"
1589
- ].join("\n");
1590
- }
1591
- if (targetKind === "canvas_node") {
1592
- return buildCanvasNodeEditingContextSummary(runtimeOptions);
1593
- }
1594
- return null;
1595
- };
1596
-
1597
- // packages/ai/agent/appWorkingMemory.ts
1598
- var APP_TOOL_NAMES = /* @__PURE__ */ new Set([
1599
- "appList",
1600
- "appRead",
1601
- "appDeploy",
1602
- "appPreflight",
1603
- "appDelete"
1604
- ]);
1605
- var contentToText = (content) => {
1606
- if (!content) return "";
1607
- if (typeof content === "string") return content;
1608
- if (Array.isArray(content)) {
1609
- return content.map((part) => "text" in part ? part.text ?? "" : "").join("\n");
1610
- }
1611
- return "";
1612
- };
1613
- var parseAppListEntries = (text) => text.split("\n").map((line) => line.trim()).filter((line) => line.startsWith("- **") && line.includes("(appId:"));
1614
- var buildRecentAppToolMemory = (messages, toolRuns) => {
1615
- const messageById = new Map(messages.map((msg) => [msg.id, msg]));
1616
- const recentRuns = [...toolRuns].filter((run) => APP_TOOL_NAMES.has(run.toolName)).sort((a, b) => (b.startedAt ?? 0) - (a.startedAt ?? 0)).slice(0, 8);
1617
- if (recentRuns.length === 0) return null;
1618
- const lines = [
1619
- "\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"
1620
- ];
1621
- const latestDeployLike = recentRuns.find(
1622
- (run) => ["appDeploy", "appRead", "appPreflight"].includes(run.toolName)
1623
- );
1624
- if (latestDeployLike) {
1625
- const input = latestDeployLike.input ?? {};
1626
- const parts = [
1627
- `- \u6700\u8FD1\u4E00\u6B21\u5173\u952E app \u64CD\u4F5C: ${latestDeployLike.toolName}`,
1628
- typeof input.appId === "string" ? `appId=${input.appId}` : null,
1629
- typeof input.name === "string" ? `name=${input.name}` : null,
1630
- typeof input.framework === "string" ? `framework=${input.framework}` : null
1631
- ].filter(Boolean);
1632
- lines.push(parts.join("\uFF0C"));
1633
- }
1634
- const relatedMessages = recentRuns.map((run) => messageById.get(run.messageId)).filter((msg) => !!msg);
1635
- const appListMessage = relatedMessages.find((msg) => msg.toolName === "appList");
1636
- if (appListMessage) {
1637
- const entries = parseAppListEntries(contentToText(appListMessage.content)).slice(0, 5);
1638
- if (entries.length > 0) {
1639
- lines.push("- \u6700\u8FD1\u4E00\u6B21 appList \u7ED3\u679C\uFF1A");
1640
- lines.push(...entries.map((entry) => ` ${entry}`));
1641
- }
1642
- }
1643
- const latestReadMessage = relatedMessages.find((msg) => msg.toolName === "appRead");
1644
- if (latestReadMessage) {
1645
- const text = contentToText(latestReadMessage.content);
1646
- const appId = text.match(/- appId:\s*(.+)/)?.[1]?.trim();
1647
- const url = text.match(/- 访问地址:\s*(.+)/)?.[1]?.trim();
1648
- if (appId || url) {
1649
- lines.push(
1650
- [
1651
- "- \u6700\u8FD1\u4E00\u6B21 appRead \u771F\u503C:",
1652
- appId ? `appId=${appId}` : null,
1653
- url ? `url=${url}` : null
1654
- ].filter(Boolean).join("\uFF0C")
1655
- );
1656
- }
1657
- }
1658
- const latestPreflightRun = recentRuns.find((run) => run.toolName === "appPreflight");
1659
- if (latestPreflightRun) {
1660
- lines.push(
1661
- [
1662
- "- \u6700\u8FD1\u4E00\u6B21 appPreflight:",
1663
- latestPreflightRun.status === "failed" ? "\u5931\u8D25" : "\u5DF2\u6267\u884C",
1664
- latestPreflightRun.outputSummary ? `\u6458\u8981=${latestPreflightRun.outputSummary}` : null
1665
- ].filter(Boolean).join("\uFF0C")
1666
- );
1667
- }
1668
- const latestDeployMessage = relatedMessages.find((msg) => msg.toolName === "appDeploy");
1669
- if (latestDeployMessage) {
1670
- const text = contentToText(latestDeployMessage.content);
1671
- const appId = text.match(/- appId:\s*(.+)/)?.[1]?.trim();
1672
- const url = text.match(/- 访问地址:\s*(.+)/)?.[1]?.trim();
1673
- if (appId || url) {
1674
- lines.push(
1675
- [
1676
- "- \u6700\u8FD1\u4E00\u6B21 appDeploy \u7ED3\u679C:",
1677
- appId ? `appId=${appId}` : null,
1678
- url ? `url=${url}` : null
1679
- ].filter(Boolean).join("\uFF0C")
1680
- );
1681
- }
1682
- }
1683
- lines.push(
1684
- "- \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"
1685
- );
1686
- return lines.join("\n");
1687
- };
1688
-
1689
- // packages/ai/agent/streamAgentChatTurnUtils.ts
1690
- var BROWSER_UNAVAILABLE_CORE_TOOLS = {
1691
- queryModelUsage: true,
1692
- createAgentAutomation: true,
1693
- notifyUser: true
1694
- };
1695
- var getRuntimeCoreTools = () => {
1696
- if (typeof window === "undefined") {
1697
- return [...TOOL_PACKS.CORE];
1698
- }
1699
- return TOOL_PACKS.CORE.filter(
1700
- (toolName) => !BROWSER_UNAVAILABLE_CORE_TOOLS[toolName]
1701
- );
1702
- };
1703
- var isInlineVisualArtifactAgent = (agentConfig) => {
1704
- const tags = Array.isArray(agentConfig.tags) ? agentConfig.tags : [];
1705
- return tags.some(
1706
- (tag) => typeof tag === "string" && ["inline-artifact", "streaming-ui"].includes(tag)
1707
- );
1708
- };
1709
- var estimateTokensOfMessage = (msg) => {
1710
- let content = "";
1711
- if (typeof msg.content === "string") {
1712
- content = msg.content;
1713
- } else if (Array.isArray(msg.content)) {
1714
- content = msg.content.map((p) => {
1715
- if (p.type === "text") return p.text || "";
1716
- if (p.type === "image_url") return "[image]";
1717
- return "[non-text]";
1718
- }).join("");
1719
- } else if (msg.content && typeof msg.content === "object") {
1720
- content = JSON.stringify(msg.content);
1721
- }
1722
- let extraTokens = 0;
1723
- if (Array.isArray(msg.tool_calls)) {
1724
- const toolsStr = JSON.stringify(msg.tool_calls);
1725
- extraTokens = estimateTokenCount(toolsStr);
1726
- }
1727
- return estimateTokenCount(content) + extraTokens;
1728
- };
1729
- var classifyConversationLoad = (messages) => {
1730
- const N = 20;
1731
- if (!Array.isArray(messages) || messages.length === 0) return "light";
1732
- const tail = messages.slice(-N);
1733
- const tokenSamples = tail.map(estimateTokensOfMessage);
1734
- if (tokenSamples.length === 0) return "light";
1735
- const sum = tokenSamples.reduce((acc, v) => acc + v, 0);
1736
- const avg = sum / tokenSamples.length;
1737
- const sorted = [...tokenSamples].sort((a, b) => a - b);
1738
- const p95 = sorted[Math.floor((sorted.length - 1) * 0.95)];
1739
- if (p95 < 200 && avg < 120) {
1740
- return "light";
1741
- }
1742
- if (p95 > 2e3 || avg > 1200) {
1743
- return "heavy";
1744
- }
1745
- return "medium";
1746
- };
1747
- var compressOldToolResults = (messages, maxChars = 800) => {
1748
- let lastToolCallAssistantIdx = -1;
1749
- for (let i = messages.length - 1; i >= 0; i--) {
1750
- if (messages[i].role === "assistant" && Array.isArray(messages[i].tool_calls) && messages[i].tool_calls.length > 0) {
1751
- lastToolCallAssistantIdx = i;
1752
- break;
1753
- }
1754
- }
1755
- return messages.map((msg, idx) => {
1756
- if (msg.role !== "tool") return msg;
1757
- const content = typeof msg.content === "string" ? msg.content : JSON.stringify(msg.content);
1758
- const projected = projectToolMessageContent({
1759
- content,
1760
- isFresh: idx > lastToolCallAssistantIdx,
1761
- toolName: msg.name,
1762
- historicalMaxChars: maxChars
1763
- });
1764
- if (projected === content) return msg;
1765
- return { ...msg, content: projected };
1766
- });
1767
- };
1768
- var trimMessagesWithSummary = (messages, contextWindow, summaryTokenCount) => {
1769
- const recentLoad = classifyConversationLoad(messages);
1770
- const { rawMessageBudget, minTailTokens } = planContextUsage({
1771
- contextWindow,
1772
- summaryTokens: summaryTokenCount,
1773
- recentLoad
1774
- });
1775
- if (!Array.isArray(messages) || messages.length === 0) return messages;
1776
- let totalTokens = 0;
1777
- let keepCount = 0;
1778
- for (let i = messages.length - 1; i >= 0; i--) {
1779
- const t = estimateTokensOfMessage(messages[i]);
1780
- if (totalTokens + t > rawMessageBudget) break;
1781
- totalTokens += t;
1782
- keepCount++;
1783
- }
1784
- if (keepCount >= messages.length) {
1785
- return messages;
1786
- }
1787
- if (totalTokens < minTailTokens) {
1788
- const maxBudgetWithSlack = rawMessageBudget * 1.2;
1789
- for (let i = messages.length - 1 - keepCount; i >= 0; i--) {
1790
- const t = estimateTokensOfMessage(messages[i]);
1791
- if (totalTokens + t > maxBudgetWithSlack) break;
1792
- totalTokens += t;
1793
- keepCount++;
1794
- if (totalTokens >= minTailTokens) break;
1795
- }
1796
- }
1797
- if (keepCount === 0 && messages.length > 0) {
1798
- keepCount = Math.min(2, messages.length);
1799
- }
1800
- let cutIndex = messages.length - keepCount;
1801
- if (cutIndex < 0) cutIndex = 0;
1802
- while (cutIndex > 0 && messages[cutIndex]?.role === "tool") {
1803
- cutIndex--;
1804
- }
1805
- return messages.slice(cutIndex);
1806
- };
1807
- var createDbSliceTurnContextSource = (dispatch) => ({
1808
- readRecord: async (dbKey) => {
1809
- const result = await dispatch(read({ dbKey })).unwrap();
1810
- return result ?? null;
1811
- }
1812
- });
1813
- var joinMapValues = (map) => Array.from(map.values()).join("");
1814
- var hasImageInMessages = (messages) => {
1815
- if (!Array.isArray(messages)) return false;
1816
- return messages.some((msg) => {
1817
- const content = msg.content;
1818
- if (!Array.isArray(content)) return false;
1819
- return content.some(
1820
- (part) => part && typeof part === "object" && part.type === "image_url" && part.image_url && typeof part.image_url.url === "string" && part.image_url.url.trim() !== ""
1821
- );
1822
- });
1823
- };
1824
- var REJECT_NO_VISION_MESSAGE = "\u5F53\u524D Agent \u4E0D\u652F\u6301\u56FE\u7247\u8F93\u5165\uFF0C\u8BF7\u6539\u7528\u6587\u672C\u6216\u6587\u6863\u3002";
1825
- function shouldRejectImageInputForAgent(agentConfig, messages) {
1826
- const agentHasVision = resolveAgentImageInputSupport(agentConfig);
1827
- if (!agentHasVision && hasImageInMessages(messages)) {
1828
- return REJECT_NO_VISION_MESSAGE;
1829
- }
1830
- return null;
1831
- }
1832
- var formatCurrentInputContext = (pendingFiles, currentInputMap) => {
1833
- if (pendingFiles.length === 0 || currentInputMap.size === 0) {
1834
- return joinMapValues(currentInputMap);
1835
- }
1836
- const relevantPendingFiles = pendingFiles.filter((file) => {
1837
- const key = file.sourceDialogKey || file.dialogKey || file.pageKey;
1838
- return key && currentInputMap.has(key);
1839
- });
1840
- if (relevantPendingFiles.length === 0) {
1841
- return joinMapValues(currentInputMap);
1842
- }
1843
- const filesByGroup = /* @__PURE__ */ new Map();
1844
- for (const file of relevantPendingFiles) {
1845
- const groupKey = file.groupId || file.id;
1846
- const group = filesByGroup.get(groupKey);
1847
- if (group) {
1848
- group.push(file);
1849
- } else {
1850
- filesByGroup.set(groupKey, [file]);
1851
- }
1852
- }
1853
- let sourceCounter = 1;
1854
- let output = "";
1855
- filesByGroup.forEach((filesInGroup) => {
1856
- const isGroup = filesInGroup.length > 1;
1857
- const sourceName = isGroup ? filesInGroup[0].name.split(" (")[0] : filesInGroup[0].name;
1858
- output += `--- Source ${sourceCounter}: "${sourceName}" ---
1859
- `;
1860
- filesInGroup.forEach((file) => {
1861
- const key = file.sourceDialogKey || file.dialogKey || file.pageKey;
1862
- if (!key) return;
1863
- const content = currentInputMap.get(key);
1864
- if (!content) return;
1865
- if (isGroup) {
1866
- output += `### Document: "${file.name}"
1867
- ${content}
1868
- `;
1869
- } else {
1870
- output += `${content}
1871
- `;
1872
- }
1873
- });
1874
- output += `--- End of Source ${sourceCounter} ---
1875
-
1876
- `;
1877
- sourceCounter++;
1878
- });
1879
- return output;
1880
- };
1881
- var validateAccessAndBalance = (agentConfig, state) => {
1882
- const userBalance = selectCurrentUserBalance(state);
1883
- const currentUserId = selectIdentityUserId(state);
1884
- const isCustomApi = agentConfig.apiSource === "custom";
1885
- const isCliApi = agentConfig.apiSource === "cli";
1886
- const isDeviceLocalOwner = agentConfig.userId === "local" && !currentUserId;
1887
- const isOwner = isDeviceLocalOwner || Boolean(currentUserId) && agentConfig.userId === currentUserId;
1888
- if (!isOwner) {
1889
- const hasWhitelist = Array.isArray(agentConfig.whitelist) && agentConfig.whitelist.length > 0;
1890
- if (hasWhitelist) {
1891
- const isUserInWhitelist = !!currentUserId && agentConfig.whitelist?.includes(currentUserId);
1892
- if (!isUserInWhitelist) {
1893
- return "\u60A8\u4E0D\u5728\u8BE5\u5E94\u7528\u7684\u767D\u540D\u5355\u4E2D\uFF0C\u65E0\u6CD5\u4F7F\u7528\u3002";
1894
- }
1895
- }
1896
- }
1897
- if (isCustomApi || isCliApi) {
1898
- return null;
1899
- }
1900
- const SUBSCRIPTION_OAUTH_REFS = /* @__PURE__ */ new Set([
1901
- "cursor",
1902
- "chatgpt",
1903
- "xai",
1904
- "antigravity",
1905
- "claude"
1906
- ]);
1907
- if (SUBSCRIPTION_OAUTH_REFS.has((agentConfig.apiKeyRef ?? "").trim().toLowerCase())) {
1908
- return null;
1909
- }
1910
- const isPlatformApi = agentConfig.apiSource === "platform" || agentConfig.useServerProxy === true;
1911
- if (isDeviceLocalOwner && !isPlatformApi) {
1912
- return null;
1913
- }
1914
- if (typeof userBalance !== "number") {
1915
- const hasSessionUser = Boolean(
1916
- state?.auth?.currentUser?.userId
1917
- );
1918
- if (!currentUserId || !hasSessionUser) {
1919
- return "\u8BF7\u767B\u5F55\u540E\u4F7F\u7528\u5E73\u53F0\u6A21\u578B\uFF0C\u6216\u6539\u7528\u672C\u5730\u81EA\u5B9A\u4E49/API/CLI Agent\u3002";
1920
- }
1921
- return "\u6B63\u5728\u83B7\u53D6\u7528\u6237\u4F59\u989D\uFF0C\u8BF7\u7A0D\u5019...";
1922
- }
1923
- const serverPrices = getModelPricing(agentConfig.provider || "", agentConfig.model);
1924
- if (!serverPrices && !hasExplicitAgentPricing(agentConfig)) {
1925
- return "\u65E0\u6CD5\u83B7\u53D6\u6A21\u578B\u5B9A\u4EF7\u4FE1\u606F\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5\u3002";
1926
- }
1927
- const prices = getPrices(agentConfig, serverPrices ?? null);
1928
- const maxPrice = getFinalPrice(prices);
1929
- if (userBalance < maxPrice) {
1930
- return "\u4F59\u989D\u4E0D\u8DB3\uFF0C\u8BF7\u5145\u503C\u540E\u518D\u8BD5\u3002";
1931
- }
1932
- return null;
1933
- };
1934
- var fetchMemoryOverlayContext = async (state, agentConfig, userInput, dialogConfig) => {
1935
- const token = typeof state?.auth?.currentToken === "string" ? state.auth.currentToken : null;
1936
- const currentServer = typeof state?.settings?.currentServer === "string" ? state.settings.currentServer : null;
1937
- const agentKey = asOptionalTrimmedString(agentConfig.dbKey) ?? "";
1938
- if (!token || !currentServer || !agentKey) return null;
1939
- const baseUrl = resolveToolBaseUrl(currentServer);
1940
- if (!baseUrl) return null;
1941
- const inputText = typeof userInput === "string" ? userInput : JSON.stringify(userInput ?? "");
1942
- const spaceId = asOptionalTrimmedString(dialogConfig?.spaceId) ?? (state?.space?.viewMode === "all" ? void 0 : asOptionalTrimmedString(state?.space?.currentSpaceId));
1943
- try {
1944
- const response = await fetch(`${baseUrl}/api/memory/query`, {
1945
- method: "POST",
1946
- headers: {
1947
- "Content-Type": "application/json",
1948
- Authorization: `Bearer ${token}`
1949
- },
1950
- body: JSON.stringify({
1951
- agentKey,
1952
- userInput: inputText,
1953
- ...spaceId ? { spaceId } : {}
1954
- })
1955
- });
1956
- if (!response.ok) return null;
1957
- const payload = await response.json().catch(() => null);
1958
- return asOptionalTrimmedString(payload?.promptBlock) ?? null;
1959
- } catch {
1960
- return null;
1961
- }
1962
- };
1963
- var buildStaticContexts = async (state, dispatch, agentConfig, dialogConfig, referenceContentCache) => {
1964
- const keySets = await getFullChatContextKeys(
1965
- state,
1966
- dispatch,
1967
- agentConfig,
1968
- "",
1969
- // 静态上下文不需要 userInput
1970
- void 0
1971
- // 静态上下文不需要 dialogConfig
1972
- );
1973
- const finalKeys = deduplicateContextKeys(keySets);
1974
- const fetchReferences = (keys) => fetchReferenceContents(keys, dispatch, {
1975
- format: "simplified_markdown",
1976
- inlineMentionMeta: true,
1977
- preloaded: referenceContentCache
1978
- });
1979
- const [botInstructionsMap, botKnowledgeMap] = await Promise.all([
1980
- fetchReferences(finalKeys.botInstructionsContext),
1981
- fetchReferences(finalKeys.botKnowledgeContext)
1982
- ]);
1983
- const globalPrompt = selectGlobalPrompt(state);
1984
- const userTonePreset = selectUserTonePreset(state);
1985
- const knowledgeCaptureLevel = selectKnowledgeCaptureLevel(state);
1986
- const spaceContextLevel = selectSpaceContextLevel(state);
1987
- const userRecentLimit = selectAiRecentContentLimit(state);
1988
- const contextWindow = getModelContextWindow(agentConfig.model) || 128e3;
1989
- const preloadPlan = resolveSpaceContextPreloadPlan(spaceContextLevel);
1990
- const dynamicLimit = Math.floor(contextWindow * preloadPlan.preloadBudgetRatio / 150);
1991
- const recentLimit = preloadPlan.includeRecentContent ? Math.max(3, Math.min(userRecentLimit, Math.max(3, dynamicLimit))) : 0;
1992
- const turnContextSource = createDbSliceTurnContextSource(dispatch);
1993
- let spaceContext = null;
1994
- if (spaceContextLevel > 1) {
1995
- const spaceLayer = await buildSpaceContextLayer({
1996
- source: turnContextSource,
1997
- spaceId: dialogConfig?.spaceId,
1998
- recentContentLimit: recentLimit
1999
- });
2000
- spaceContext = spaceLayer ? spaceLayer.content.trim() : null;
2001
- }
2002
- const linkedSpaceIds = agentConfig.linkedSpaces || [];
2003
- if (linkedSpaceIds.length > 0 && spaceContextLevel > 1) {
2004
- const linkedSection = await buildLinkedSpacesSection({
2005
- source: turnContextSource,
2006
- linkedSpaceIds
2007
- });
2008
- if (linkedSection) {
2009
- spaceContext = (spaceContext ?? "") + `
2010
-
2011
- ${linkedSection}`;
2012
- }
2013
- }
2014
- const dialogPolicyContext = dialogConfig?.category === PERSONALIZATION_DIALOG_CATEGORY ? buildPersonalizationDialogPolicyContext() : null;
2015
- return {
2016
- botInstructionsContext: joinMapValues(botInstructionsMap),
2017
- botKnowledgeContext: joinMapValues(botKnowledgeMap),
2018
- spaceContext,
2019
- userGlobalPrompt: globalPrompt,
2020
- userPolicyContext: [
2021
- buildStaticUserPolicyContext({
2022
- agentConfig,
2023
- settingsRecord: {
2024
- userTonePreset,
2025
- knowledgeCaptureLevel,
2026
- spaceContextLevel,
2027
- enableReadCurrentSpace: spaceContextLevel > 1
2028
- }
2029
- }),
2030
- dialogPolicyContext
2031
- ].filter(Boolean).join("\n")
2032
- };
2033
- };
2034
- var buildDynamicContexts = async (state, dispatch, agentConfig, userInput, runtimeOptions, referenceContentCache, dialogKey) => {
2035
- let dialogSummary = null;
2036
- let dialogConfig;
2037
- if (dialogKey) {
2038
- dialogConfig = selectById(state, dialogKey);
2039
- if (dialogConfig?.summary) {
2040
- dialogSummary = dialogConfig.summary;
2041
- }
2042
- }
2043
- const keySets = await getFullChatContextKeys(
2044
- state,
2045
- dispatch,
2046
- agentConfig,
2047
- userInput,
2048
- dialogConfig
2049
- );
2050
- const finalKeys = deduplicateContextKeys(keySets);
2051
- const fetchReferences = (keys) => fetchReferenceContents(keys, dispatch, {
2052
- format: "simplified_markdown",
2053
- inlineMentionMeta: true,
2054
- preloaded: referenceContentCache
2055
- });
2056
- const [currentInputMap, historyMap] = await Promise.all([
2057
- fetchReferences(finalKeys.currentInputContext),
2058
- fetchReferences(finalKeys.historyContext)
2059
- ]);
2060
- const pendingFiles = selectPendingFiles(state);
2061
- const formattedCurrentInputContext = formatCurrentInputContext(
2062
- pendingFiles,
2063
- currentInputMap
2064
- );
2065
- const dialogId = dialogConfig?.id ?? null;
2066
- const currentDialogMessages = selectAllMsgs(state, dialogId);
2067
- const currentDialogMessageIds = new Set(currentDialogMessages.map((msg) => msg.id));
2068
- const currentDialogToolRuns = getAllToolRuns().filter(
2069
- (run) => currentDialogMessageIds.has(run.messageId)
2070
- );
2071
- const editingContext = buildEditingContextSummary(state, runtimeOptions);
2072
- const appWorkingMemory = buildRecentAppToolMemory(
2073
- currentDialogMessages,
2074
- currentDialogToolRuns
2075
- );
2076
- const memoryOverlay = await fetchMemoryOverlayContext(
2077
- state,
2078
- agentConfig,
2079
- userInput,
2080
- dialogConfig
2081
- );
2082
- return {
2083
- currentInputContext: formattedCurrentInputContext.trim() || null,
2084
- historyContext: joinMapValues(historyMap),
2085
- editingContext,
2086
- appWorkingMemory,
2087
- memoryOverlay,
2088
- dialogSummary,
2089
- referenceKeys: dialogConfig?.referenceKeys || []
2090
- };
2091
- };
2092
- var mergeContexts = (staticCtx, dynamicCtx) => ({
2093
- botInstructionsContext: staticCtx.botInstructionsContext || void 0,
2094
- botKnowledgeContext: staticCtx.botKnowledgeContext || void 0,
2095
- spaceContext: staticCtx.spaceContext || void 0,
2096
- userGlobalPrompt: staticCtx.userGlobalPrompt || void 0,
2097
- userPolicyContext: staticCtx.userPolicyContext || void 0,
2098
- currentInputContext: dynamicCtx.currentInputContext,
2099
- historyContext: dynamicCtx.historyContext || void 0,
2100
- editingContext: dynamicCtx.editingContext,
2101
- appWorkingMemory: dynamicCtx.appWorkingMemory,
2102
- memoryOverlay: dynamicCtx.memoryOverlay,
2103
- dialogSummary: dynamicCtx.dialogSummary,
2104
- referenceKeys: dynamicCtx.referenceKeys
2105
- });
2106
- var mergeAgentToolsWithRuntime = (agentConfig, referencedTools, mentionedTools, runtimeOptions, state) => {
2107
- const rawBaseTools = Array.isArray(agentConfig.tools) ? agentConfig.tools : [];
2108
- const agentEnabledPacks = resolveAgentRequiredPackIds(agentConfig);
2109
- const isInlineArtifact = isInlineVisualArtifactAgent(agentConfig);
2110
- const effectiveEnabledPacks = resolveEffectiveEnabledPacks({
2111
- enabledPacks: agentEnabledPacks,
2112
- declaredOnly: isInlineArtifact
2113
- });
2114
- const expandedPackTools = expandEnabledPacks(
2115
- effectiveEnabledPacks,
2116
- rawBaseTools
2117
- );
2118
- const baseTools = canonicalizeToolNames(expandedPackTools);
2119
- const requiredSkillTools = canonicalizeToolNames(
2120
- agentConfig.referencedTools ?? []
2121
- );
2122
- const recommendedSkillTools = canonicalizeToolNames(
2123
- agentConfig.recommendedSkillTools ?? []
2124
- );
2125
- const recommendedSkillHints = [
2126
- .../* @__PURE__ */ new Set([
2127
- ...asNonEmptyStringArray(agentConfig.recommendedSkillHints),
2128
- ...resolveAgentRecommendedSkillNames(agentConfig)
2129
- ])
2130
- ];
2131
- const skillPromptPatches = [
2132
- .../* @__PURE__ */ new Set([
2133
- ...asNonEmptyStringArray(agentConfig.skillPromptPatches),
2134
- // 能力包的 promptPatch(方法论文档)与 skill reference 的 patch 走同一条
2135
- // 注入链(buildSkillGuidanceBlock → buildSkillGuidancePromptBlock),
2136
- // 让「工具 + 配套纪律」作为一个能力包整体注入 system prompt。
2137
- ...expandEnabledPackPromptPatches(effectiveEnabledPacks)
2138
- ])
2139
- ];
2140
- const webPadded = applyDefaultWebToolPacks({
2141
- toolNames: baseTools,
2142
- skipWeb: isInlineVisualArtifactAgent(agentConfig)
2143
- });
2144
- const enhancedTools = /* @__PURE__ */ new Set([
2145
- ...webPadded,
2146
- ...isInlineVisualArtifactAgent(agentConfig) ? [] : getRuntimeCoreTools(),
2147
- ...isInlineVisualArtifactAgent(agentConfig) ? [] : requiredSkillTools,
2148
- ...isInlineVisualArtifactAgent(agentConfig) ? [] : canonicalizeToolNames(referencedTools),
2149
- ...isInlineVisualArtifactAgent(agentConfig) ? [] : canonicalizeToolNames(mentionedTools)
2150
- ]);
2151
- const extraTools = isInlineVisualArtifactAgent(agentConfig) ? [] : canonicalizeToolNames(runtimeOptions?.extraTools ?? []);
2152
- for (const t of extraTools) {
2153
- enhancedTools.add(t);
2154
- }
2155
- if (!isInlineVisualArtifactAgent(agentConfig)) {
2156
- const viewMode = state ? selectViewMode(state) : "categories";
2157
- if (viewMode === "all") {
2158
- enhancedTools.delete("search_workspace");
2159
- if (!recommendedSkillHints.includes("search-all-spaces")) {
2160
- recommendedSkillHints.push("search-all-spaces");
2161
- }
2162
- } else {
2163
- enhancedTools.add("search_workspace");
2164
- }
2165
- }
2166
- const systemBuiltinSkills = state?.settings?.systemBuiltinSkills;
2167
- const mountedTools = isInlineVisualArtifactAgent(agentConfig) ? Array.from(enhancedTools) : addDefaultSystemCapabilityTools(Array.from(enhancedTools));
2168
- const filteredTools = applySystemBuiltinSkillFilter(
2169
- mountedTools,
2170
- systemBuiltinSkills
2171
- );
2172
- return {
2173
- ...agentConfig,
2174
- tools: applyDisabledTools(
2175
- prioritizeToolNames(
2176
- filteredTools,
2177
- recommendedSkillTools
2178
- ),
2179
- agentConfig?.disabledTools
2180
- ),
2181
- recommendedSkillTools,
2182
- recommendedSkillHints,
2183
- skillPromptPatches
2184
- };
2185
- };
2186
- var applyImageConfigRuntimeOverride = (agentConfig, runtimeOptions) => {
2187
- const override = runtimeOptions?.imageConfigOverride;
2188
- if (!override) {
2189
- return agentConfig;
2190
- }
2191
- const baseImageConfig = agentConfig.imageConfig ?? {};
2192
- return {
2193
- ...agentConfig,
2194
- ...override.imageModelOverride ? { model: override.imageModelOverride } : {},
2195
- imageConfig: {
2196
- ...baseImageConfig,
2197
- ...override
2198
- }
2199
- };
2200
- };
2201
- var formatImageWaitHint = (range) => {
2202
- if (!range || typeof range.min !== "number" || typeof range.max !== "number") {
2203
- return void 0;
2204
- }
2205
- return `\u901A\u5E38\u9700\u8981 ${range.min}-${range.max} \u79D2`;
2206
- };
2207
- var resolveAgentImageModelIdentity = (agentConfig) => {
2208
- let providerKey = (agentConfig.provider || "").toLowerCase();
2209
- let modelName = agentConfig.model ?? "";
2210
- if (modelName.includes("/")) {
2211
- const slash = modelName.indexOf("/");
2212
- if (!providerKey) providerKey = modelName.slice(0, slash);
2213
- modelName = modelName.slice(slash + 1);
2214
- }
2215
- try {
2216
- return {
2217
- providerKey,
2218
- modelConfig: getModelConfig(providerKey, modelName)
2219
- };
2220
- } catch {
2221
- try {
2222
- const detected = getProviderByModelName(modelName);
2223
- if (!detected) {
2224
- return { providerKey, modelConfig: null };
2225
- }
2226
- return {
2227
- providerKey: detected,
2228
- modelConfig: getModelConfig(detected, modelName)
2229
- };
2230
- } catch {
2231
- return { providerKey, modelConfig: null };
2232
- }
2233
- }
2234
- };
2235
- var EXPLICIT_IMAGE_GENERATION_TOOL_NAMES = /* @__PURE__ */ new Set([
2236
- "openAIGptImage",
2237
- "openAIGptImageGenerate",
2238
- "openAIGptImageEdit",
2239
- "chatgptWebImageGenerate",
2240
- "geminiFlashImage",
2241
- "geminiProImagePreview"
2242
- ]);
2243
- var agentUsesExplicitImageGenerationTool = (agentConfig) => {
2244
- const toolNames = Array.isArray(agentConfig.tools) ? agentConfig.tools : Array.isArray(agentConfig.toolNames) ? agentConfig.toolNames : [];
2245
- return toolNames.some(
2246
- (name) => typeof name === "string" && EXPLICIT_IMAGE_GENERATION_TOOL_NAMES.has(name.trim())
2247
- );
2248
- };
2249
- var resolveImageGenerationStreamingState = (agentConfig, args) => {
2250
- const { modelConfig } = resolveAgentImageModelIdentity(agentConfig);
2251
- const hasImageOutput = !!(modelConfig?.hasImageOutput ?? modelConfig?.supportsImageOutput) || agentConfig.imageConfig?.enabled === true || agentUsesExplicitImageGenerationTool(agentConfig);
2252
- if (!hasImageOutput) {
2253
- return void 0;
2254
- }
2255
- const currentProfile = modelConfig?.imageGenerationProfiles?.find(
2256
- (profile) => profile.imageModel === modelConfig.name
2257
- );
2258
- const usesWebImageTool = agentUsesExplicitImageGenerationTool(agentConfig) && (Array.isArray(agentConfig.tools) ? agentConfig.tools : []).includes("chatgptWebImageGenerate");
2259
- return {
2260
- kind: "image_generation",
2261
- stage: args?.stage ?? args?.previous?.stage ?? "submitted",
2262
- startedAt: args?.previous?.startedAt ?? Date.now(),
2263
- 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"),
2264
- profileLabel: currentProfile?.label
2265
- };
2266
- };
2267
-
2268
1126
  // packages/ai/agent/persistMessageWithFixedId.ts
2269
1127
  async function persistMessageWithFixedId(dispatch, message) {
2270
1128
  dispatch(addUserMessage(message));
@@ -4519,35 +3377,22 @@ var streamAgentChatTurnHandler = async (args, thunkApi) => {
4519
3377
  let stableMessages = processedMessages.slice(0, firstDynamicIdx);
4520
3378
  let dynamicMessages = processedMessages.slice(firstDynamicIdx);
4521
3379
  if (appendTempUserInput2) {
4522
- const rejectReason = shouldRejectImageInputForAgent(
3380
+ const serverUrl = selectCurrentServer(loopState);
3381
+ const authToken = selectIdentityToken(loopState);
3382
+ const result = await tryPreprocessWebImageOrReject(
3383
+ processedMessages,
4523
3384
  agentConfigForCall,
4524
- processedMessages
3385
+ initialHistoryIds,
3386
+ serverUrl,
3387
+ authToken
4525
3388
  );
4526
- if (rejectReason) {
4527
- const serverUrl = selectCurrentServer(loopState);
4528
- const authToken = selectIdentityToken(loopState);
4529
- if (serverUrl && authToken) {
4530
- const preprocessed = await preprocessImagesForTextOnlyAgent(
4531
- processedMessages,
4532
- (urls) => describeImageViaServerProxy(serverUrl, authToken, urls)
4533
- );
4534
- if (preprocessed !== processedMessages) {
4535
- processedMessages = preprocessed;
4536
- const newFirstDynamicIdx = processedMessages.findIndex(
4537
- (m) => m.id && !initialHistoryIds.has(m.id)
4538
- );
4539
- const splitIdx = newFirstDynamicIdx === -1 ? processedMessages.length : newFirstDynamicIdx;
4540
- stableMessages = processedMessages.slice(0, splitIdx);
4541
- dynamicMessages = processedMessages.slice(splitIdx);
4542
- } else {
4543
- setLoopStopReason("error");
4544
- return rejectWithValue(rejectReason);
4545
- }
4546
- } else {
4547
- setLoopStopReason("error");
4548
- return rejectWithValue(rejectReason);
4549
- }
3389
+ if (result.kind === "reject") {
3390
+ setLoopStopReason("error");
3391
+ return rejectWithValue(result.reason);
4550
3392
  }
3393
+ processedMessages = result.messages;
3394
+ stableMessages = result.stableMessages;
3395
+ dynamicMessages = result.dynamicMessages;
4551
3396
  }
4552
3397
  const bodyData = generateRequestBody({
4553
3398
  agentConfig: effectiveAgentConfig,
@@ -4808,35 +3653,22 @@ var streamAgentChatTurnHandler = async (args, thunkApi) => {
4808
3653
  let stableMessages = processedMessages.slice(0, firstDynamicIdx);
4809
3654
  let dynamicMessages = processedMessages.slice(firstDynamicIdx);
4810
3655
  if (appendTempUserInput) {
4811
- const rejectReason = shouldRejectImageInputForAgent(
3656
+ const serverUrl = selectCurrentServer(loopState);
3657
+ const authToken = selectIdentityToken(loopState);
3658
+ const result = await tryPreprocessWebImageOrReject(
3659
+ processedMessages,
4812
3660
  agentConfigForCall,
4813
- processedMessages
3661
+ initialHistoryIds,
3662
+ serverUrl,
3663
+ authToken
4814
3664
  );
4815
- if (rejectReason) {
4816
- const serverUrl = selectCurrentServer(loopState);
4817
- const authToken = selectIdentityToken(loopState);
4818
- if (serverUrl && authToken) {
4819
- const preprocessed = await preprocessImagesForTextOnlyAgent(
4820
- processedMessages,
4821
- (urls) => describeImageViaServerProxy(serverUrl, authToken, urls)
4822
- );
4823
- if (preprocessed !== processedMessages) {
4824
- processedMessages = preprocessed;
4825
- const newFirstDynamicIdx = processedMessages.findIndex(
4826
- (m) => m.id && !initialHistoryIds.has(m.id)
4827
- );
4828
- const splitIdx = newFirstDynamicIdx === -1 ? processedMessages.length : newFirstDynamicIdx;
4829
- stableMessages = processedMessages.slice(0, splitIdx);
4830
- dynamicMessages = processedMessages.slice(splitIdx);
4831
- } else {
4832
- setLoopStopReason("error");
4833
- return rejectWithValue(rejectReason);
4834
- }
4835
- } else {
4836
- setLoopStopReason("error");
4837
- return rejectWithValue(rejectReason);
4838
- }
3665
+ if (result.kind === "reject") {
3666
+ setLoopStopReason("error");
3667
+ return rejectWithValue(result.reason);
4839
3668
  }
3669
+ processedMessages = result.messages;
3670
+ stableMessages = result.stableMessages;
3671
+ dynamicMessages = result.dynamicMessages;
4840
3672
  }
4841
3673
  const bodyData = generateRequestBody({
4842
3674
  agentConfig: effectiveAgentConfig,