nolo-cli 0.1.30 → 0.1.32

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 (1133) hide show
  1. package/README.md +6 -0
  2. package/agent-runtime/agentRecordConfig.ts +0 -2
  3. package/agent-runtime/hostAdapter.ts +0 -1
  4. package/agent-runtime/hostRuntimeConfig.ts +86 -0
  5. package/agent-runtime/index.ts +13 -0
  6. package/agent-runtime/localToolPolicy.ts +13 -6
  7. package/agent-runtime/localWorkspaceTools.ts +333 -30
  8. package/agent-runtime/platformChatProvider.ts +4 -1
  9. package/agent-runtime/runtimeToolPolicy.ts +32 -47
  10. package/agentAliases.ts +72 -0
  11. package/agentCommandSupport.ts +4 -1
  12. package/agentInternalCommandEntries.ts +2 -0
  13. package/agentMachineCommands.ts +238 -16
  14. package/agentPullCommand.ts +46 -18
  15. package/agentRecordCommands.ts +1 -1
  16. package/agentRecordHelpers.ts +122 -16
  17. package/agentRunCommand.ts +72 -24
  18. package/agentRunParsing.ts +24 -5
  19. package/agentRuntimeLocal.ts +10 -0
  20. package/ai/agent/agentRunDialogLineage.ts +56 -0
  21. package/ai/agent/agentSlice.ts +1 -554
  22. package/ai/agent/cliExecutor.ts +330 -19
  23. package/ai/index.ts +1 -1
  24. package/authCommands.ts +36 -2
  25. package/buildPublish.ts +7 -2
  26. package/buildPublishArtifactAssembly.ts +514 -136
  27. package/buildPublishImportAnalysis.ts +21 -16
  28. package/chat/messages/types.ts +9 -0
  29. package/cli/agentAliases.ts +132 -0
  30. package/cli/agentCommandSupport.ts +80 -0
  31. package/cli/agentCreateCustomCommands.ts +278 -0
  32. package/cli/agentDialogsCommands.ts +227 -0
  33. package/cli/agentDoctorCommands.ts +203 -0
  34. package/cli/agentInternalCommandEntries.ts +45 -0
  35. package/cli/agentListCommands.ts +132 -0
  36. package/cli/agentListHelpers.ts +187 -0
  37. package/cli/agentMachineCommands.ts +698 -0
  38. package/cli/agentPullCommand.ts +167 -0
  39. package/cli/agentRecordCommands.ts +143 -0
  40. package/cli/agentRecordHelpers.ts +562 -0
  41. package/cli/agentRunCommand.ts +190 -0
  42. package/cli/agentRunLocalWorkspace.ts +182 -0
  43. package/cli/agentRunParsing.ts +298 -0
  44. package/cli/agentRuntimeLocal.ts +55 -0
  45. package/cli/agentSuperviseCommands.ts +8 -0
  46. package/cli/agentUnpublishCommands.ts +113 -0
  47. package/cli/authCommands.ts +264 -0
  48. package/cli/buildPublish.ts +138 -0
  49. package/cli/buildPublishArtifactAssembly.ts +724 -0
  50. package/cli/buildPublishImportAnalysis.ts +242 -0
  51. package/cli/cliCommandAdapters.ts +28 -0
  52. package/cli/cliCommandDispatch.ts +66 -0
  53. package/cli/cliCommandFactories.ts +66 -0
  54. package/cli/cliCommandTypes.ts +49 -0
  55. package/cli/cliEnvHelpers.ts +185 -0
  56. package/cli/cliIoTypes.ts +3 -0
  57. package/cli/cliRuntimeDoctorReport.ts +193 -0
  58. package/cli/client/agentConfigResolver.ts +1 -0
  59. package/cli/client/agentRun.ts +188 -0
  60. package/cli/client/agentRunInput.ts +10 -0
  61. package/cli/client/agentRunLocalExecution.ts +124 -0
  62. package/cli/client/agentRunLocalExecutor.ts +179 -0
  63. package/cli/client/agentRunRuntimeSelection.ts +145 -0
  64. package/cli/client/agentRunServerTransport.ts +397 -0
  65. package/cli/client/agentRunTaskRunRecorder.ts +176 -0
  66. package/cli/client/compactDialog.ts +222 -0
  67. package/cli/client/hybridRecordStore.ts +52 -0
  68. package/cli/client/localAgentRecords.ts +7 -0
  69. package/cli/client/localDialogRecords.ts +30 -0
  70. package/cli/client/localProviderResolver.ts +1 -0
  71. package/cli/client/localRuntimeAdapter.ts +676 -0
  72. package/cli/client/localToolPolicy.ts +8 -0
  73. package/cli/client/profileConfig.ts +101 -0
  74. package/cli/client/streamingOutput.ts +36 -0
  75. package/cli/client/taskRunPrompt.ts +10 -0
  76. package/cli/client/taskWorktree.ts +8 -0
  77. package/cli/client/workspaceSession.ts +11 -0
  78. package/cli/commandRegistry.ts +96 -0
  79. package/cli/connectorRunArtifact.ts +145 -0
  80. package/cli/connectorWebSocketTarget.ts +109 -0
  81. package/cli/customCodingAgentFlow.ts +208 -0
  82. package/cli/customCodingAgentRecord.ts +179 -0
  83. package/cli/defaultServer.ts +1 -0
  84. package/cli/dialogDataAccess.ts +186 -0
  85. package/cli/dialogInternalCommandEntries.ts +11 -0
  86. package/cli/dialogReadCommands.ts +180 -0
  87. package/cli/dialogReadHelpers.ts +226 -0
  88. package/cli/dialogStatusCommands.ts +123 -0
  89. package/cli/docInternalCommandEntries.ts +20 -0
  90. package/cli/hybridReadHelpers.ts +109 -0
  91. package/cli/internalCommandEntries.ts +20 -0
  92. package/cli/localRuntimeDb.ts +65 -0
  93. package/cli/machineCommandPrompts.ts +79 -0
  94. package/cli/machineCommandResolution.ts +43 -0
  95. package/cli/machineCommands.ts +324 -0
  96. package/cli/machineDaemonCommands.ts +29 -0
  97. package/cli/machineHeartbeatCommands.ts +29 -0
  98. package/cli/machineStatusCommands.ts +87 -0
  99. package/cli/machineWatchCommands.ts +41 -0
  100. package/cli/machineWsPromptMaterialization.ts +89 -0
  101. package/cli/machineWsRunDispatch.ts +635 -0
  102. package/cli/machineWsSession.ts +213 -0
  103. package/cli/noloReadBridgePrompt.ts +16 -0
  104. package/cli/pageCreateCommands.ts +219 -0
  105. package/cli/pageDeleteCommands.ts +167 -0
  106. package/cli/pageReadCommands.ts +151 -0
  107. package/cli/pageUpdateCommands.ts +249 -0
  108. package/cli/pageWriteHelpers.ts +209 -0
  109. package/cli/publishPackage.ts +36 -0
  110. package/cli/runtimeDoctorCommands.ts +67 -0
  111. package/cli/runtimeInternalCommandEntries.ts +15 -0
  112. package/cli/runtimeModeArgs.ts +33 -0
  113. package/cli/runtimePassthroughCommands.ts +22 -0
  114. package/cli/scriptCommandEntries.ts +31 -0
  115. package/cli/scriptPassthroughHelpers.ts +28 -0
  116. package/cli/secretScanHelpers.ts +31 -0
  117. package/cli/spaceAttachCommands.ts +134 -0
  118. package/cli/spaceCategoryCommands.ts +263 -0
  119. package/cli/spaceCommands.ts +295 -0
  120. package/cli/spaceDeleteCommands.ts +312 -0
  121. package/cli/spaceInternalCommandEntries.ts +21 -0
  122. package/cli/spaceMutationHelpers.ts +135 -0
  123. package/cli/spaceReadCommands.ts +323 -0
  124. package/cli/systemInternalCommandEntries.ts +65 -0
  125. package/cli/tableCommands.ts +118 -0
  126. package/cli/tableDataOutput.ts +41 -0
  127. package/cli/tableDataSafety.ts +26 -0
  128. package/cli/tableMetaCommands.ts +307 -0
  129. package/cli/tableMutationCommands.ts +266 -0
  130. package/cli/tableQueryParsing.ts +90 -0
  131. package/cli/tableQueryRequest.ts +53 -0
  132. package/cli/taskRunActions.ts +122 -0
  133. package/cli/taskRunCommand.ts +70 -0
  134. package/cli/taskRunParsing.ts +86 -0
  135. package/cli/taskRunPromptShared.ts +55 -0
  136. package/cli/tui/readlineWorkspace.ts +141 -0
  137. package/cli/tui/session.ts +50 -0
  138. package/cli/tui/tuiCatalog.ts +22 -0
  139. package/cli/tui/tuiCommandInterpreter.ts +253 -0
  140. package/cli/tui/tuiPresentation.ts +146 -0
  141. package/cli/updateCommands.ts +134 -0
  142. package/cli/workflowInternalCommandEntries.ts +31 -0
  143. package/cliEnvHelpers.ts +8 -0
  144. package/cliRuntimeDoctorReport.ts +193 -0
  145. package/client/agentConfigResolver.test.ts +0 -2
  146. package/client/agentRun.test.ts +208 -12
  147. package/client/agentRun.ts +44 -637
  148. package/client/agentRunInput.ts +10 -0
  149. package/client/agentRunLocalExecutor.ts +179 -0
  150. package/client/agentRunRuntimeSelection.test.ts +1 -0
  151. package/client/agentRunRuntimeSelection.ts +2 -12
  152. package/client/agentRunServerTransport.ts +397 -0
  153. package/client/agentRunTaskRunRecorder.ts +176 -0
  154. package/client/localRuntimeAdapter.test.ts +236 -9
  155. package/client/localRuntimeAdapter.ts +221 -23
  156. package/client/localToolPolicy.test.ts +28 -4
  157. package/commandRegistry.ts +1 -0
  158. package/connector-experimental/daemonLauncher.ts +38 -4
  159. package/connectorRunArtifact.ts +34 -10
  160. package/connectorWebSocketTarget.ts +70 -11
  161. package/database/server/authorityStoreTypes.ts +31 -0
  162. package/database/server/db.ts +15 -34
  163. package/database/server/legacyServerDb.ts +58 -0
  164. package/database/server/levelAuthorityStore.ts +75 -0
  165. package/database/server/memoryAuthorityStore.ts +133 -0
  166. package/database/server/serverStoreFactory.ts +124 -0
  167. package/localRuntimeDb.ts +39 -2
  168. package/machineCommandPrompts.ts +2 -0
  169. package/machineCommands.ts +199 -63
  170. package/machineWsRunDispatch.ts +81 -16
  171. package/machineWsSession.ts +65 -7
  172. package/noloReadBridgePrompt.ts +16 -0
  173. package/package.json +222 -62
  174. package/runtimeDoctorCommands.ts +15 -66
  175. package/spaceAttachCommands.ts +134 -0
  176. package/spaceInternalCommandEntries.ts +2 -0
  177. package/ai/agent/_executeModel.ts +0 -144
  178. package/ai/agent/appWorkingMemory.ts +0 -126
  179. package/ai/agent/avatarUtils.ts +0 -24
  180. package/ai/agent/buildEditingContext.ts +0 -378
  181. package/ai/agent/buildSystemPrompt.ts +0 -581
  182. package/ai/agent/canvasEditingContext.ts +0 -49
  183. package/ai/agent/cleanAgentMessages.ts +0 -140
  184. package/ai/agent/cliChatClient.ts +0 -153
  185. package/ai/agent/contextCompiler.ts +0 -107
  186. package/ai/agent/contextLayerContract.ts +0 -44
  187. package/ai/agent/createAgentSchema.ts +0 -236
  188. package/ai/agent/executeToolCall.ts +0 -59
  189. package/ai/agent/fetchAgentContexts.ts +0 -42
  190. package/ai/agent/generatePrompt.ts +0 -3
  191. package/ai/agent/getFullChatContextKeys.ts +0 -168
  192. package/ai/agent/guidedCreation/assistant.ts +0 -82
  193. package/ai/agent/guidedCreation/capabilities.ts +0 -84
  194. package/ai/agent/guidedCreation/draft.ts +0 -62
  195. package/ai/agent/guidedCreation/types.ts +0 -38
  196. package/ai/agent/hooks/fetchPublicAgents.ts +0 -133
  197. package/ai/agent/hooks/useAgentConfig.ts +0 -89
  198. package/ai/agent/hooks/useAgentDialog.ts +0 -35
  199. package/ai/agent/hooks/useAgentFormValidation.ts +0 -202
  200. package/ai/agent/hooks/usePublicAgents.ts +0 -479
  201. package/ai/agent/pageBuilderHandoffRules.ts +0 -75
  202. package/ai/agent/persistMessageWithFixedId.ts +0 -37
  203. package/ai/agent/planSlice.ts +0 -259
  204. package/ai/agent/referenceUtils.ts +0 -229
  205. package/ai/agent/runAgentBackground.ts +0 -238
  206. package/ai/agent/runAgentClientLoop.ts +0 -141
  207. package/ai/agent/runtimeGuidance.ts +0 -116
  208. package/ai/agent/runtimeServerBase.ts +0 -37
  209. package/ai/agent/server/fetchPublicAgents.ts +0 -183
  210. package/ai/agent/startParallelAgentStreams.ts +0 -424
  211. package/ai/agent/startupProtocol.ts +0 -53
  212. package/ai/agent/streamAgentChatTurn.ts +0 -1874
  213. package/ai/agent/streamAgentChatTurnUtils.ts +0 -782
  214. package/ai/agent/types.ts +0 -71
  215. package/ai/agent/utils/imageOutput.ts +0 -39
  216. package/ai/agent/utils/publicImageAgentMode.ts +0 -26
  217. package/ai/agent/utils/sortUtils.ts +0 -250
  218. package/ai/agent/web/referencePickerUtils.ts +0 -146
  219. package/ai/agent/web/useGuidedAgentCreation.ts +0 -238
  220. package/ai/ai.locale.ts +0 -1095
  221. package/ai/chat/accumulateToolCallChunks.ts +0 -126
  222. package/ai/chat/fetchUtils.native.ts +0 -278
  223. package/ai/chat/fetchUtils.ts +0 -155
  224. package/ai/chat/inlineImageUrlsForCustomProvider.ts +0 -117
  225. package/ai/chat/parseApiError.ts +0 -67
  226. package/ai/chat/parseMultilineSSE.ts +0 -95
  227. package/ai/chat/sendOpenAICompletionsRequest.native.ts +0 -695
  228. package/ai/chat/sendOpenAICompletionsRequest.ts +0 -805
  229. package/ai/chat/sendOpenAIResponseRequest.ts +0 -577
  230. package/ai/chat/shouldUseServerProxy.ts +0 -18
  231. package/ai/chat/sseClient.native.ts +0 -91
  232. package/ai/chat/sseClient.ts +0 -67
  233. package/ai/chat/streamReader.native.ts +0 -31
  234. package/ai/chat/streamReader.ts +0 -62
  235. package/ai/chat/updateTotalUsage.ts +0 -89
  236. package/ai/context/buildReferenceContext.ts +0 -437
  237. package/ai/context/calculateContextUsage.ts +0 -133
  238. package/ai/context/retention.ts +0 -165
  239. package/ai/context/tokenUtils.ts +0 -78
  240. package/ai/llm/agentCapabilities.ts +0 -74
  241. package/ai/llm/calculateGeminiImageTokens.ts +0 -57
  242. package/ai/llm/deepinfra.ts +0 -79
  243. package/ai/llm/fireworks.ts +0 -68
  244. package/ai/llm/generateRequestBody.ts +0 -165
  245. package/ai/llm/getModelContextWindow.ts +0 -84
  246. package/ai/llm/getNoloKey.ts +0 -37
  247. package/ai/llm/getPricing.ts +0 -252
  248. package/ai/llm/hooks/useModelPricing.ts +0 -75
  249. package/ai/llm/imagePricing.ts +0 -66
  250. package/ai/llm/isResponseAPIModel.ts +0 -13
  251. package/ai/llm/kimi.ts +0 -23
  252. package/ai/llm/mimo.ts +0 -71
  253. package/ai/llm/mistral.ts +0 -22
  254. package/ai/llm/modelAvatar.ts +0 -428
  255. package/ai/llm/models.ts +0 -45
  256. package/ai/llm/openrouterModels.ts +0 -6
  257. package/ai/llm/providers.ts +0 -311
  258. package/ai/llm/reasoningModels.ts +0 -29
  259. package/ai/llm/types.ts +0 -67
  260. package/ai/llm/usageRequestOptions.ts +0 -59
  261. package/ai/memory/capture.ts +0 -148
  262. package/ai/memory/consolidate.ts +0 -104
  263. package/ai/memory/delete.ts +0 -147
  264. package/ai/memory/overlay.ts +0 -84
  265. package/ai/memory/query.ts +0 -38
  266. package/ai/memory/queryShared.ts +0 -160
  267. package/ai/memory/rank.ts +0 -105
  268. package/ai/memory/recentRelationshipRecap.ts +0 -247
  269. package/ai/memory/remember.ts +0 -167
  270. package/ai/memory/runtime.ts +0 -76
  271. package/ai/memory/store.ts +0 -20
  272. package/ai/memory/storeShared.ts +0 -76
  273. package/ai/memory/types.ts +0 -46
  274. package/ai/memory/understanding.ts +0 -349
  275. package/ai/memory/understandingGreeting.ts +0 -264
  276. package/ai/messages/type.ts +0 -20
  277. package/ai/policy/personalizationDialog.ts +0 -333
  278. package/ai/policy/runtimePolicy.ts +0 -440
  279. package/ai/policy/selfUpdateFields.ts +0 -48
  280. package/ai/skills/referenceRuntime.ts +0 -274
  281. package/ai/skills/skillDiagnostics.ts +0 -251
  282. package/ai/skills/skillDocBuilder.ts +0 -139
  283. package/ai/skills/skillReferenceSummary.ts +0 -63
  284. package/ai/taskRun/taskRunProtocol.ts +0 -897
  285. package/ai/token/calculatePrice.ts +0 -576
  286. package/ai/token/db.ts +0 -98
  287. package/ai/token/externalToolCost.ts +0 -341
  288. package/ai/token/hooks/useRecords.ts +0 -65
  289. package/ai/token/missingUsageEstimate.ts +0 -42
  290. package/ai/token/modelUsageQuery.ts +0 -269
  291. package/ai/token/normalizeUsage.ts +0 -84
  292. package/ai/token/openaiImageGenerationUsage.ts +0 -56
  293. package/ai/token/prepareTokenUsageData.ts +0 -93
  294. package/ai/token/query.ts +0 -88
  295. package/ai/token/queryUserTokens.ts +0 -59
  296. package/ai/token/resolveBillingTarget.ts +0 -52
  297. package/ai/token/saveTokenRecord.ts +0 -53
  298. package/ai/token/serverDialogProjection.ts +0 -78
  299. package/ai/token/serverTokenWriter.ts +0 -145
  300. package/ai/token/stats.ts +0 -21
  301. package/ai/token/tokenThunks.ts +0 -24
  302. package/ai/token/types.ts +0 -93
  303. package/ai/tools/agent/agentTools.ts +0 -235
  304. package/ai/tools/agent/agentUpdateShared.ts +0 -311
  305. package/ai/tools/agent/callAgentTool.ts +0 -139
  306. package/ai/tools/agent/createAgentTool.ts +0 -512
  307. package/ai/tools/agent/createDialogTool.ts +0 -69
  308. package/ai/tools/agent/createSkillAgentTool.ts +0 -62
  309. package/ai/tools/agent/parallelBudget.ts +0 -221
  310. package/ai/tools/agent/prepareAgentDraftTool.ts +0 -173
  311. package/ai/tools/agent/presets/appBuilderPreset.ts +0 -154
  312. package/ai/tools/agent/runLlmTool.ts +0 -96
  313. package/ai/tools/agent/runStreamingAgentTool.ts +0 -73
  314. package/ai/tools/agent/skillAgentArgs.ts +0 -106
  315. package/ai/tools/agent/skillAgentPreset.ts +0 -89
  316. package/ai/tools/agent/startAgentDialogTool.ts +0 -53
  317. package/ai/tools/agent/streamParallelAgentsTool.ts +0 -123
  318. package/ai/tools/agent/updateAgentTool.ts +0 -96
  319. package/ai/tools/agent/updateSelfTool.ts +0 -113
  320. package/ai/tools/amazonProductScraperTool.ts +0 -86
  321. package/ai/tools/apifyActorClient.ts +0 -45
  322. package/ai/tools/appEditGuard.ts +0 -372
  323. package/ai/tools/appReadSnapshot.ts +0 -153
  324. package/ai/tools/appTools.ts +0 -1549
  325. package/ai/tools/applyEditTool.ts +0 -259
  326. package/ai/tools/applyLineEditsTool.ts +0 -315
  327. package/ai/tools/browserTools/click.ts +0 -33
  328. package/ai/tools/browserTools/closeSession.ts +0 -29
  329. package/ai/tools/browserTools/common.ts +0 -27
  330. package/ai/tools/browserTools/openSession.ts +0 -48
  331. package/ai/tools/browserTools/readContent.ts +0 -38
  332. package/ai/tools/browserTools/selectOption.ts +0 -46
  333. package/ai/tools/browserTools/typeText.ts +0 -42
  334. package/ai/tools/category/createCategoryTool.ts +0 -66
  335. package/ai/tools/category/queryContentsByCategoryTool.ts +0 -69
  336. package/ai/tools/category/updateContentCategoryTool.ts +0 -75
  337. package/ai/tools/cfBrowserTools.ts +0 -319
  338. package/ai/tools/cfSpeechToTextTool.ts +0 -49
  339. package/ai/tools/checkEnvTool.ts +0 -102
  340. package/ai/tools/cloudflareCrawlTool.ts +0 -289
  341. package/ai/tools/codeSearchTool.ts +0 -123
  342. package/ai/tools/codeTools.ts +0 -101
  343. package/ai/tools/convertMarxistsBookTool.ts +0 -103
  344. package/ai/tools/createDocTool.ts +0 -132
  345. package/ai/tools/createPlanTool.ts +0 -999
  346. package/ai/tools/createSkillDocTool.ts +0 -155
  347. package/ai/tools/createWorkflowTool.ts +0 -154
  348. package/ai/tools/deepseekOcrTool.ts +0 -34
  349. package/ai/tools/delayTool.ts +0 -31
  350. package/ai/tools/deleteSpacesTool.ts +0 -325
  351. package/ai/tools/deleteSpacesToolModel.ts +0 -159
  352. package/ai/tools/devReloadUtils.ts +0 -29
  353. package/ai/tools/dialogMessageSearch.ts +0 -137
  354. package/ai/tools/doctorSkillTool.ts +0 -72
  355. package/ai/tools/ecommerceScraperTool.ts +0 -86
  356. package/ai/tools/emailTools.ts +0 -549
  357. package/ai/tools/evalSkillTool.ts +0 -92
  358. package/ai/tools/exaSearchTool.ts +0 -64
  359. package/ai/tools/execShellTool.ts +0 -266
  360. package/ai/tools/executeSqlTool.ts +0 -192
  361. package/ai/tools/fetchWebpageSupport.ts +0 -333
  362. package/ai/tools/fetchWebpageTool.ts +0 -97
  363. package/ai/tools/geminiImagePreviewTool.ts +0 -361
  364. package/ai/tools/generateDocxTool.ts +0 -215
  365. package/ai/tools/googleSearchScraperTool.ts +0 -106
  366. package/ai/tools/importDataTool.ts +0 -133
  367. package/ai/tools/importSkillTool.ts +0 -162
  368. package/ai/tools/index.ts +0 -2132
  369. package/ai/tools/jdProductScraperTool.ts +0 -821
  370. package/ai/tools/listFilesTool.ts +0 -85
  371. package/ai/tools/listUserSpacesTool.ts +0 -113
  372. package/ai/tools/localFilesTool.ts +0 -276
  373. package/ai/tools/marxistsOfflineBook.ts +0 -253
  374. package/ai/tools/modelUsageTools.ts +0 -206
  375. package/ai/tools/olmOcrTool.ts +0 -34
  376. package/ai/tools/openaiImageTool.ts +0 -267
  377. package/ai/tools/prepareTools.ts +0 -23
  378. package/ai/tools/readDocTool.ts +0 -84
  379. package/ai/tools/readFileTool.ts +0 -214
  380. package/ai/tools/readTool.ts +0 -194
  381. package/ai/tools/readXPostTool.ts +0 -233
  382. package/ai/tools/rememberMemoryTool.ts +0 -84
  383. package/ai/tools/remotionVideoTool.ts +0 -151
  384. package/ai/tools/searchDialogMessagesTool.ts +0 -222
  385. package/ai/tools/searchRepoTool.ts +0 -118
  386. package/ai/tools/searchWorkspaceTool.ts +0 -259
  387. package/ai/tools/skillFollowup.ts +0 -86
  388. package/ai/tools/surfWeatherTool.ts +0 -169
  389. package/ai/tools/table/addTableRowTool.ts +0 -217
  390. package/ai/tools/table/createTableTool.ts +0 -315
  391. package/ai/tools/table/rowTools.ts +0 -371
  392. package/ai/tools/table/schemaTools.ts +0 -244
  393. package/ai/tools/table/shareTableTool.ts +0 -148
  394. package/ai/tools/table/toolShared.ts +0 -129
  395. package/ai/tools/taobaoTmallProductScraperTool.ts +0 -49
  396. package/ai/tools/toolApiClient.ts +0 -255
  397. package/ai/tools/toolNameAliases.ts +0 -70
  398. package/ai/tools/toolResultError.ts +0 -42
  399. package/ai/tools/toolRunSlice.ts +0 -303
  400. package/ai/tools/toolSchemaCompatibility.ts +0 -53
  401. package/ai/tools/toolVisibility.ts +0 -4
  402. package/ai/tools/types.ts +0 -20
  403. package/ai/tools/uiAskChoiceTool.ts +0 -104
  404. package/ai/tools/updateContentTitleTool.ts +0 -84
  405. package/ai/tools/updateDocTool.ts +0 -105
  406. package/ai/tools/updateUserPreferenceProfileTool.ts +0 -145
  407. package/ai/tools/wereadGatewayTool.ts +0 -152
  408. package/ai/tools/whisperTool.ts +0 -77
  409. package/ai/tools/writeFileTool.ts +0 -213
  410. package/ai/tools/youtubeScraperTool.ts +0 -116
  411. package/ai/tools/ziweiChartTool.ts +0 -678
  412. package/ai/types.ts +0 -55
  413. package/ai/workflow/workflowExecutor.ts +0 -323
  414. package/ai/workflow/workflowSlice.ts +0 -73
  415. package/ai/workflow/workflowTypes.ts +0 -106
  416. package/app/actions/syncAppRecord.ts +0 -73
  417. package/app/admin/adminPages.ts +0 -13
  418. package/app/colors.ts +0 -1
  419. package/app/constants/animationSets.ts +0 -21
  420. package/app/constants/appEditor.ts +0 -99
  421. package/app/constants/clientDownloads.ts +0 -54
  422. package/app/constants/desktopReleaseManifest.ts +0 -68
  423. package/app/constants/homeTabs.ts +0 -15
  424. package/app/constants/routePaths.ts +0 -15
  425. package/app/email/emailApiRoutes.ts +0 -14
  426. package/app/favorite/favoriteSlice.ts +0 -690
  427. package/app/favorite/type.ts +0 -43
  428. package/app/favorite/useAgentFavorite.ts +0 -43
  429. package/app/favorite/useContentFavorite.ts +0 -41
  430. package/app/fetchOwnedApps.ts +0 -269
  431. package/app/guide/quickStartGuide.ts +0 -128
  432. package/app/hooks/deleteDbKey.ts +0 -233
  433. package/app/hooks/index.ts +0 -4
  434. package/app/hooks/useAppDetail.ts +0 -208
  435. package/app/hooks/useAppVersions.ts +0 -52
  436. package/app/hooks/useAutoResizeTextarea.ts +0 -29
  437. package/app/hooks/useChatPageTitle.ts +0 -85
  438. package/app/hooks/useClipboardFiles.ts +0 -20
  439. package/app/hooks/useDesktopLocalConnectorAutostart.ts +0 -38
  440. package/app/hooks/useDragResize.ts +0 -91
  441. package/app/hooks/useElementSizeVar.ts +0 -24
  442. package/app/hooks/useFileDropZone.ts +0 -52
  443. package/app/hooks/useHasMounted.ts +0 -11
  444. package/app/hooks/useImageLoadFallback.ts +0 -19
  445. package/app/hooks/useIsMobile.ts +0 -46
  446. package/app/hooks/useMyApps.ts +0 -375
  447. package/app/hooks/useMyContentItems.ts +0 -91
  448. package/app/hooks/useNewMessageNotification.ts +0 -81
  449. package/app/hooks/usePageMeta.ts +0 -107
  450. package/app/hooks/useRecentlyOpened.ts +0 -84
  451. package/app/hooks/useUnifiedStore.ts +0 -11
  452. package/app/hooks/useUserNotifications.ts +0 -197
  453. package/app/hooks.ts +0 -55
  454. package/app/i18n/clientResources.ts +0 -65
  455. package/app/i18n/i18n.base.ts +0 -14
  456. package/app/i18n/i18n.config.ts +0 -62
  457. package/app/i18n/i18n.server.ts +0 -13
  458. package/app/i18n/index.ts +0 -15
  459. package/app/i18n/mapLanguage.ts +0 -11
  460. package/app/i18n/translations/appBuilder.locale.ts +0 -453
  461. package/app/i18n/translations/error.locale.ts +0 -246
  462. package/app/i18n/translations/interface.locale.ts +0 -2174
  463. package/app/i18n/translations/seo.locale.ts +0 -129
  464. package/app/i18n/types.ts +0 -6
  465. package/app/notifications/formatNotification.ts +0 -134
  466. package/app/notifications/model.ts +0 -77
  467. package/app/notifications/notificationSlice.ts +0 -141
  468. package/app/notifications/useNotificationActions.ts +0 -67
  469. package/app/pages/homeTabState.ts +0 -57
  470. package/app/pages/quickChatFlow.ts +0 -109
  471. package/app/pages/rechargeCheckout.ts +0 -23
  472. package/app/pages/usePageArt.ts +0 -91
  473. package/app/realtime/sharedSse.ts +0 -182
  474. package/app/reducer.ts +0 -36
  475. package/app/seo/pageMeta.ts +0 -123
  476. package/app/settings/config.ts +0 -54
  477. package/app/settings/dbActionThunks.ts +0 -34
  478. package/app/settings/defaultSpacePreference.ts +0 -87
  479. package/app/settings/navItems.ts +0 -73
  480. package/app/settings/prepareUserSetting.ts +0 -11
  481. package/app/settings/settingsRecord.ts +0 -8
  482. package/app/settings/web/chat-config/useAutoSaveGlobalPrompt.ts +0 -59
  483. package/app/settings/web/machineStatus.ts +0 -23
  484. package/app/settings/web/useSettingsStylesheet.ts +0 -28
  485. package/app/settings/web/userSecurityUtils.ts +0 -21
  486. package/app/stateViews/runtime.ts +0 -86
  487. package/app/store.ts +0 -53
  488. package/app/theme/colors.ts +0 -280
  489. package/app/theme/fontPreference.ts +0 -77
  490. package/app/theme/index.ts +0 -7
  491. package/app/theme/theme.config.ts +0 -120
  492. package/app/theme/themeModeBootstrap.ts +0 -123
  493. package/app/theme/useSystemTheme.ts +0 -33
  494. package/app/types/appSummary.ts +0 -114
  495. package/app/utils/appDeploySource.ts +0 -50
  496. package/app/utils/appKeys.ts +0 -55
  497. package/app/utils/appRuntimeUrl.ts +0 -51
  498. package/app/utils/async.ts +0 -28
  499. package/app/utils/asyncMapStatus.ts +0 -31
  500. package/app/utils/clipboard.ts +0 -86
  501. package/app/utils/credits.ts +0 -12
  502. package/app/utils/desktopAgentRuntimeStatusClient.ts +0 -42
  503. package/app/utils/desktopAgentRuntimeTurnClient.ts +0 -70
  504. package/app/utils/desktopLocalConnectorClient.ts +0 -83
  505. package/app/utils/env.ts +0 -12
  506. package/app/utils/excelToSlate.ts +0 -430
  507. package/app/utils/fileReaders.ts +0 -12
  508. package/app/utils/fileUtils.ts +0 -229
  509. package/app/utils/imageUtils.native.ts +0 -96
  510. package/app/utils/imageUtils.ts +0 -244
  511. package/app/utils/ime.ts +0 -43
  512. package/app/utils/myContentItems.ts +0 -290
  513. package/app/utils/processDateRange.ts +0 -30
  514. package/app/utils/retryFetch.ts +0 -61
  515. package/app/utils/slateToExcel.ts +0 -58
  516. package/app/utils/toast.native.ts +0 -42
  517. package/app/utils/toast.ts +0 -3
  518. package/app/web/spaceInitGuard.ts +0 -28
  519. package/auth/action/signOutAction.ts +0 -0
  520. package/auth/action/signUpAction.ts +0 -227
  521. package/auth/actor.ts +0 -16
  522. package/auth/authSlice.ts +0 -517
  523. package/auth/billing.ts +0 -130
  524. package/auth/client/deleteUserRequest.ts +0 -86
  525. package/auth/client/loginRequest.ts +0 -14
  526. package/auth/hooks/useAuth.ts +0 -9
  527. package/auth/hooks/useDeleteOwnAccount.ts +0 -50
  528. package/auth/hooks/useDeleteOwnAccountFlow.ts +0 -66
  529. package/auth/hooks/useDeleteUser.ts +0 -45
  530. package/auth/hooks/useEnableUser.ts +0 -50
  531. package/auth/hooks/useFetchUsers.ts +0 -77
  532. package/auth/hooks/useRechargeUser.ts +0 -82
  533. package/auth/index.ts +0 -1
  534. package/auth/invite.ts +0 -19
  535. package/auth/locale.ts +0 -84
  536. package/auth/resetAuthScopedClientState.ts +0 -27
  537. package/auth/rn/tokenManager.ts +0 -72
  538. package/auth/routes.ts +0 -127
  539. package/auth/server/accessActivity.ts +0 -143
  540. package/auth/server/billingFullChainSimulator.ts +0 -325
  541. package/auth/server/billingUsageReport.ts +0 -192
  542. package/auth/server/cliLogin.ts +0 -198
  543. package/auth/server/creatorEarningCreditConversion.ts +0 -515
  544. package/auth/server/creatorEarningsLedger.ts +0 -165
  545. package/auth/server/creatorEarningsReport.ts +0 -299
  546. package/auth/server/creatorSettlementLedger.ts +0 -386
  547. package/auth/server/creatorSettlementReport.ts +0 -442
  548. package/auth/server/creatorSplitConfig.ts +0 -191
  549. package/auth/server/deduct.ts +0 -270
  550. package/auth/server/delete.ts +0 -887
  551. package/auth/server/disable.ts +0 -61
  552. package/auth/server/emailAutomation.ts +0 -358
  553. package/auth/server/emailAutomationConfig.ts +0 -88
  554. package/auth/server/emailAutomationRules.ts +0 -94
  555. package/auth/server/emailAutomationTemplates.ts +0 -131
  556. package/auth/server/emailAutomationTypes.ts +0 -38
  557. package/auth/server/emailDbConfig.ts +0 -147
  558. package/auth/server/emailDelivery.ts +0 -960
  559. package/auth/server/emailDeliveryGuards.ts +0 -282
  560. package/auth/server/emailPolicy.ts +0 -43
  561. package/auth/server/emailPreferences.ts +0 -117
  562. package/auth/server/emailProvider.ts +0 -277
  563. package/auth/server/emailReport.ts +0 -439
  564. package/auth/server/emailRuntimeConfig.ts +0 -86
  565. package/auth/server/emailScenarioNotifications.ts +0 -340
  566. package/auth/server/enable.ts +0 -61
  567. package/auth/server/getRechargeHistory.ts +0 -110
  568. package/auth/server/getUser.ts +0 -71
  569. package/auth/server/inviteReward.ts +0 -295
  570. package/auth/server/inviteRewardEmail.ts +0 -1
  571. package/auth/server/ledger.ts +0 -422
  572. package/auth/server/ledgerAudit.ts +0 -424
  573. package/auth/server/ledgerWitness.ts +0 -472
  574. package/auth/server/listusers.ts +0 -154
  575. package/auth/server/locks.ts +0 -32
  576. package/auth/server/login.ts +0 -184
  577. package/auth/server/productBillingSplits.ts +0 -166
  578. package/auth/server/productEntitlements.ts +0 -139
  579. package/auth/server/productPurchase.ts +0 -382
  580. package/auth/server/recharge.ts +0 -284
  581. package/auth/server/revenueShareLedger.ts +0 -389
  582. package/auth/server/revenueShareReport.ts +0 -258
  583. package/auth/server/revenueSplitPolicy.ts +0 -119
  584. package/auth/server/revokeSessions.ts +0 -59
  585. package/auth/server/route.ts +0 -195
  586. package/auth/server/sendEmail.ts +0 -176
  587. package/auth/server/shared.ts +0 -51
  588. package/auth/server/signup.ts +0 -423
  589. package/auth/server/signupIpQuota.ts +0 -44
  590. package/auth/server/token.ts +0 -109
  591. package/auth/server/tokenUsageBilling.ts +0 -312
  592. package/auth/server/transfer.ts +0 -40
  593. package/auth/server/utils.ts +0 -200
  594. package/auth/sessionTokenVersion.ts +0 -38
  595. package/auth/token.ts +0 -63
  596. package/auth/tokenCookie.ts +0 -1
  597. package/auth/types.ts +0 -28
  598. package/auth/utils.ts +0 -108
  599. package/auth/web/bootstrapAuthState.ts +0 -60
  600. package/auth/web/tokenManager.ts +0 -61
  601. package/auth/web/useRegister.ts +0 -70
  602. package/chat/chat.locale.ts +0 -804
  603. package/chat/dialog/actions/addCybotAction.ts +0 -52
  604. package/chat/dialog/actions/addReferenceKeysAction.ts +0 -62
  605. package/chat/dialog/actions/builtinDialogLlm.ts +0 -35
  606. package/chat/dialog/actions/cleanupCliSession.ts +0 -40
  607. package/chat/dialog/actions/compactDialogAndForkAction.ts +0 -47
  608. package/chat/dialog/actions/createDialogAction.ts +0 -372
  609. package/chat/dialog/actions/createScheduledTaskAction.ts +0 -78
  610. package/chat/dialog/actions/handleSendMessageAction.ts +0 -197
  611. package/chat/dialog/actions/handleSendMessageResolver.ts +0 -29
  612. package/chat/dialog/actions/removeCybotAction.ts +0 -6
  613. package/chat/dialog/actions/removeDialogAgentAction.ts +0 -44
  614. package/chat/dialog/actions/replacePrimaryCybotAction.ts +0 -6
  615. package/chat/dialog/actions/setPrimaryDialogAgentAction.ts +0 -52
  616. package/chat/dialog/actions/updateDialogSummaryAction.ts +0 -405
  617. package/chat/dialog/actions/updateDialogTitleAction.ts +0 -151
  618. package/chat/dialog/actions/updateDialogTitlePolicy.ts +0 -30
  619. package/chat/dialog/actions/updateTokensAction.ts +0 -233
  620. package/chat/dialog/dialogAgents.ts +0 -54
  621. package/chat/dialog/dialogPageRenderMode.ts +0 -182
  622. package/chat/dialog/dialogSlice.ts +0 -872
  623. package/chat/dialog/dialogTitle.ts +0 -81
  624. package/chat/dialog/dialogTokenStats.ts +0 -12
  625. package/chat/dialog/dialogUrl.ts +0 -6
  626. package/chat/dialog/ensureDialogSpaceAction.ts +0 -208
  627. package/chat/dialog/goal.ts +0 -108
  628. package/chat/dialog/hooks/useStreamingSymbol.ts +0 -63
  629. package/chat/dialog/objectAssistantRegistry.ts +0 -286
  630. package/chat/dialog/schedule.ts +0 -17
  631. package/chat/dialog/useCreateDialog.ts +0 -52
  632. package/chat/hooks/sendPermissionResolver.ts +0 -128
  633. package/chat/hooks/useChatInput.ts +0 -99
  634. package/chat/hooks/useChatInputSeed.ts +0 -31
  635. package/chat/hooks/useMessageInteraction.ts +0 -412
  636. package/chat/hooks/useSendPermission.ts +0 -92
  637. package/chat/hooks/useThinkingVisibility.ts +0 -27
  638. package/chat/messages/browserImageUrl.ts +0 -48
  639. package/chat/messages/deleteMessages.ts +0 -47
  640. package/chat/messages/fetchAndCacheMessages.ts +0 -119
  641. package/chat/messages/fetchConvMsgs.ts +0 -51
  642. package/chat/messages/fileUrl.ts +0 -13
  643. package/chat/messages/generateMessageKey.ts +0 -21
  644. package/chat/messages/hooks/useBase64Migration.ts +0 -115
  645. package/chat/messages/messageAgent.ts +0 -8
  646. package/chat/messages/messageContent.ts +0 -199
  647. package/chat/messages/messageContract.ts +0 -88
  648. package/chat/messages/messageSlice.ts +0 -1191
  649. package/chat/messages/pendingAttachmentParts.ts +0 -117
  650. package/chat/messages/sendFirstMessage.ts +0 -193
  651. package/chat/messages/toolPresentation.ts +0 -212
  652. package/chat/messages/toolThunks.ts +0 -625
  653. package/chat/messages/web/ChatDisplayContext.ts +0 -14
  654. package/chat/messages/web/ToolMessageTypes.ts +0 -23
  655. package/chat/messages/web/diffViewerModel.ts +0 -61
  656. package/chat/messages/web/groupToolEntries.ts +0 -44
  657. package/chat/messages/web/groupToolMessages.ts +0 -35
  658. package/chat/messages/web/inlineReactArtifactParser.ts +0 -63
  659. package/chat/messages/web/toolDisplayName.ts +0 -22
  660. package/chat/messages/web/useLoopStopReason.ts +0 -43
  661. package/chat/messages/ziweiChartDoc.ts +0 -94
  662. package/chat/web/docxToSlate.ts +0 -597
  663. package/chat/web/fileProcessor.ts +0 -442
  664. package/chat/web/hooks/useProgressiveDisplayCount.ts +0 -102
  665. package/chat/web/messageInputAgentUi.ts +0 -189
  666. package/chat/web/messageInputKeyBehavior.ts +0 -53
  667. package/chat/web/messageInputMention.ts +0 -102
  668. package/chat/web/messageInputSendResolver.ts +0 -51
  669. package/chat/web/messageSlashCommands.ts +0 -10
  670. package/chat/web/pdfOcrProcessor.ts +0 -131
  671. package/chat/web/sidebar/allViewSearch.ts +0 -87
  672. package/chat/web/sidebar/types.ts +0 -12
  673. package/chat/web/sidebar/useChatSidebarFilteredData.ts +0 -141
  674. package/chat/web/sidebar/useSidebarDragAndDrop.ts +0 -56
  675. package/connector-experimental/index.ts +0 -5
  676. package/core/builtinAgents.ts +0 -58
  677. package/core/coin.ts +0 -42
  678. package/core/config.ts +0 -15
  679. package/core/crypto.ts +0 -51
  680. package/core/events/types.ts +0 -145
  681. package/core/generateKeyPairFromSeedV1.ts +0 -15
  682. package/core/generateMainKey.ts +0 -22
  683. package/core/init.ts +0 -41
  684. package/core/localOrigins.ts +0 -8
  685. package/core/password.ts +0 -13
  686. package/core/prefix.ts +0 -23
  687. package/create/editor/blockCommands.ts +0 -118
  688. package/create/editor/highlightExample.ts +0 -66
  689. package/create/editor/imageUpload.ts +0 -66
  690. package/create/editor/mark.ts +0 -15
  691. package/create/editor/plugins/normalizeChineseTypography.ts +0 -85
  692. package/create/editor/plugins/withBlockStructure.ts +0 -53
  693. package/create/editor/plugins/withChineseTypography.ts +0 -61
  694. package/create/editor/plugins/withLayout.ts +0 -30
  695. package/create/editor/plugins/withLinks.ts +0 -13
  696. package/create/editor/plugins/withMentions.ts +0 -15
  697. package/create/editor/plugins/withTables.ts +0 -52
  698. package/create/editor/tableCommands.ts +0 -270
  699. package/create/editor/theme/prism/default.ts +0 -145
  700. package/create/editor/theme/prism/githubDark.ts +0 -139
  701. package/create/editor/theme/prism/githubLight.ts +0 -139
  702. package/create/editor/theme/prism/index.ts +0 -23
  703. package/create/editor/theme/prism/okaidia.ts +0 -197
  704. package/create/editor/toolMentionOptions.ts +0 -19
  705. package/create/editor/transforms/fromMarkdown/index.ts +0 -260
  706. package/create/editor/transforms/fromMarkdown/inline.ts +0 -285
  707. package/create/editor/transforms/fromMarkdown/table.ts +0 -130
  708. package/create/editor/transforms/markdownToSlate.ts +0 -24
  709. package/create/editor/transforms/slateToRenderMarkdown.ts +0 -218
  710. package/create/editor/transforms/slateToSimplifiedMarkdown.ts +0 -224
  711. package/create/editor/transforms/slateToText.ts +0 -33
  712. package/create/editor/types.ts +0 -120
  713. package/create/editor/utils/editorFactory.ts +0 -54
  714. package/create/editor/utils/hasPlainCodeBlock.ts +0 -39
  715. package/create/editor/utils/linkCommands.ts +0 -63
  716. package/create/editor/utils/pdfToSlate.ts +0 -706
  717. package/create/editor/utils/slateUtils.ts +0 -233
  718. package/create/editor/utils/txtToSlate.ts +0 -40
  719. package/create/hooks/category.ts +0 -82
  720. package/create/routePaths.ts +0 -5
  721. package/create/space/addSpaceAction.ts +0 -193
  722. package/create/space/category/categoryActions.ts +0 -427
  723. package/create/space/changeSpaceAction.ts +0 -36
  724. package/create/space/constants.ts +0 -8
  725. package/create/space/content/addContentAction.ts +0 -116
  726. package/create/space/content/contentThunks.ts +0 -90
  727. package/create/space/content/deleteContentFromSpaceAction.ts +0 -187
  728. package/create/space/content/deleteMultipleContentAction.ts +0 -112
  729. package/create/space/content/moveContentAction.ts +0 -285
  730. package/create/space/content/updateContentCategoryAction.ts +0 -154
  731. package/create/space/content/updateContentTitleAction.ts +0 -106
  732. package/create/space/content/uploadAndAddFileToSpaceAction.ts +0 -98
  733. package/create/space/contentKeyUtils.ts +0 -117
  734. package/create/space/contentLabels.ts +0 -56
  735. package/create/space/contentTypeMeta.ts +0 -169
  736. package/create/space/deleteSpaceAction.ts +0 -276
  737. package/create/space/fetchSpaceAction.ts +0 -70
  738. package/create/space/fetchSpaceSidebarStateAction.ts +0 -26
  739. package/create/space/hooks/agentFetchRetry.ts +0 -19
  740. package/create/space/hooks/useAgentFetcher.ts +0 -149
  741. package/create/space/hooks/useGroupedContent.ts +0 -118
  742. package/create/space/hooks/useSpaceEvents.ts +0 -43
  743. package/create/space/initialSpace.ts +0 -78
  744. package/create/space/loadDefaultSpaceAction.ts +0 -57
  745. package/create/space/member/addMemberAction.ts +0 -79
  746. package/create/space/member/fetchUserSpaceMembershipsAction.ts +0 -386
  747. package/create/space/member/memberThunks.ts +0 -47
  748. package/create/space/member/removeMemberAction.ts +0 -67
  749. package/create/space/publicCatalogSpace.ts +0 -39
  750. package/create/space/resolvePreferredSpaceId.ts +0 -113
  751. package/create/space/sidebarVisibleTypes.ts +0 -214
  752. package/create/space/space.locale.ts +0 -981
  753. package/create/space/spaceAccess.ts +0 -182
  754. package/create/space/spaceCollapsedState.ts +0 -54
  755. package/create/space/spaceSlice.ts +0 -328
  756. package/create/space/spaceThunks.ts +0 -410
  757. package/create/space/types.ts +0 -27
  758. package/create/space/updateSpaceAction.ts +0 -107
  759. package/create/space/utils/permissions.ts +0 -47
  760. package/create/space/validateSpacePermission.ts +0 -38
  761. package/create/version/appVersionReplication.ts +0 -160
  762. package/create/version/versionApi.ts +0 -142
  763. package/database/actions/agentReadResolution.ts +0 -33
  764. package/database/actions/cacheMergedUserData.ts +0 -64
  765. package/database/actions/common.ts +0 -279
  766. package/database/actions/deleteFile.ts +0 -40
  767. package/database/actions/fetchUserData.ts +0 -16
  768. package/database/actions/fileContent.ts +0 -125
  769. package/database/actions/patch.ts +0 -155
  770. package/database/actions/read.ts +0 -376
  771. package/database/actions/readAndWait.ts +0 -192
  772. package/database/actions/readOutcome.ts +0 -45
  773. package/database/actions/readRequestManager.ts +0 -120
  774. package/database/actions/readResolution.ts +0 -102
  775. package/database/actions/remove.ts +0 -94
  776. package/database/actions/replication.ts +0 -366
  777. package/database/actions/upload.ts +0 -174
  778. package/database/actions/upsert.ts +0 -56
  779. package/database/actions/write.ts +0 -140
  780. package/database/client/db.native.ts +0 -73
  781. package/database/client/db.ts +0 -51
  782. package/database/client/fetchUserData.ts +0 -61
  783. package/database/client/handleError.ts +0 -19
  784. package/database/client/queryRequest.ts +0 -21
  785. package/database/dbActionThunks.ts +0 -1
  786. package/database/dbSlice.ts +0 -149
  787. package/database/email.ts +0 -42
  788. package/database/fileRing.ts +0 -51
  789. package/database/fileSharding.ts +0 -70
  790. package/database/fileStorage.native.ts +0 -92
  791. package/database/fileStorage.ts +0 -232
  792. package/database/fileUrl.ts +0 -34
  793. package/database/hooks/useUserData.ts +0 -495
  794. package/database/index.ts +0 -1
  795. package/database/queryPrefixes.ts +0 -14
  796. package/database/requests.ts +0 -443
  797. package/database/runtimeServerContext.ts +0 -35
  798. package/database/server/MemoryDB.ts +0 -76
  799. package/database/server/actorAccess.ts +0 -76
  800. package/database/server/agentDelegation.ts +0 -124
  801. package/database/server/coreDataOwnership.ts +0 -13
  802. package/database/server/coreDataProxy.ts +0 -93
  803. package/database/server/cybotReadonly.ts +0 -18
  804. package/database/server/dataHandlers.ts +0 -109
  805. package/database/server/delete.ts +0 -499
  806. package/database/server/emailRepository.ts +0 -1480
  807. package/database/server/fileRead.ts +0 -337
  808. package/database/server/fileService.ts +0 -436
  809. package/database/server/handleTransaction.ts +0 -86
  810. package/database/server/patch.ts +0 -290
  811. package/database/server/query.ts +0 -177
  812. package/database/server/read.ts +0 -311
  813. package/database/server/recordIdentity.ts +0 -100
  814. package/database/server/resourceAccess.ts +0 -211
  815. package/database/server/routes.ts +0 -110
  816. package/database/server/spaceMemberAuthority.ts +0 -67
  817. package/database/server/upload.ts +0 -159
  818. package/database/server/write.ts +0 -490
  819. package/database/server/writeAuthority.ts +0 -133
  820. package/database/sqliteDb.ts +0 -46
  821. package/database/table/deleteTable.ts +0 -120
  822. package/database/tenantPlacement.ts +0 -57
  823. package/database/userDataLoadDecision.ts +0 -17
  824. package/database/userDataMerge.ts +0 -95
  825. package/database/userPreferenceRegister.ts +0 -108
  826. package/database/utils/dbPath.ts +0 -47
  827. package/database/utils/ulid.native.ts +0 -6
  828. package/integrations/anthropic/anthropicModels.ts +0 -47
  829. package/integrations/anthropic/type.ts +0 -41
  830. package/integrations/deepseek/models.ts +0 -67
  831. package/integrations/google/models.ts +0 -298
  832. package/integrations/openai/chatCompletionStreamMode.ts +0 -10
  833. package/integrations/openai/filterAndCleanMessages.ts +0 -284
  834. package/integrations/openai/flexTier.ts +0 -102
  835. package/integrations/openai/generateOpenAIRequestBody.ts +0 -274
  836. package/integrations/openai/generateResponseRequestBody.ts +0 -77
  837. package/integrations/openai/models.ts +0 -271
  838. package/integrations/openai/providerBodyCompatibility.ts +0 -23
  839. package/integrations/openai/responsesHelpers.ts +0 -297
  840. package/integrations/postmark/index.ts +0 -57
  841. package/integrations/resend/index.ts +0 -353
  842. package/integrations/weather/getWeather.ts +0 -24
  843. package/integrations/weather/index.ts +0 -6
  844. package/integrations/weather/routes.ts +0 -31
  845. package/integrations/weather/weatherApi.ts +0 -27
  846. package/integrations/weather/weatherConstants.ts +0 -2
  847. package/integrations/weather/weatherI18n.ts +0 -50
  848. package/integrations/weather/weatherService.ts +0 -50
  849. package/integrations/weather/weatherTypes.ts +0 -140
  850. package/integrations/weather/weatherUtils.ts +0 -46
  851. package/integrations/x-reader/backends/localBrowser.ts +0 -215
  852. package/integrations/x-reader/backends/publicFallback.ts +0 -31
  853. package/integrations/x-reader/backends/rawCdp.ts +0 -218
  854. package/integrations/x-reader/bridge/chromeBridgeManager.ts +0 -235
  855. package/integrations/x-reader/bridge/readXPostWithBridge.ts +0 -73
  856. package/integrations/x-reader/fixtureParser.ts +0 -101
  857. package/integrations/x-reader/index.ts +0 -9
  858. package/integrations/x-reader/redaction.ts +0 -27
  859. package/integrations/x-reader/types.ts +0 -109
  860. package/integrations/x-reader/visibleTextParser.ts +0 -108
  861. package/integrations/xai/models.ts +0 -13
  862. package/render/canvas/canvasEditContext.ts +0 -127
  863. package/render/canvas/canvasRuntime.ts +0 -57
  864. package/render/canvas/canvasSnapshotParser.ts +0 -76
  865. package/render/canvas/canvasTree.ts +0 -308
  866. package/render/canvas/types.ts +0 -46
  867. package/render/layout/deleteBehavior.ts +0 -52
  868. package/render/layout/mainLayoutSidebar.ts +0 -17
  869. package/render/layout/mainLayoutViewMode.ts +0 -56
  870. package/render/layout/topbarUtils.ts +0 -87
  871. package/render/layout/useDevReloadPending.ts +0 -30
  872. package/render/page/createPageAction.ts +0 -183
  873. package/render/page/docSlice.ts +0 -468
  874. package/render/page/server/createPage.ts +0 -174
  875. package/render/page/server/handleCreatePage.ts +0 -91
  876. package/render/page/server/index.ts +0 -4
  877. package/render/page/types.ts +0 -17
  878. package/render/page/useKeyboardSave.ts +0 -48
  879. package/render/styles/zIndex.ts +0 -12
  880. package/render/surf/WeatherIconStyles.ts +0 -17
  881. package/render/surf/color.ts +0 -9
  882. package/render/surf/config.ts +0 -46
  883. package/render/surf/screens/style.ts +0 -1
  884. package/render/surf/styles/ToggleButtonStyles.ts +0 -8
  885. package/render/surf/utils/groupedWeatherData.ts +0 -32
  886. package/render/surf/weatherUtils.ts +0 -50
  887. package/render/table/createTableAction.ts +0 -270
  888. package/render/table/deleteTableAction.ts +0 -129
  889. package/render/table/fetchAndCacheTableRows.ts +0 -174
  890. package/render/table/tableSlice.ts +0 -1106
  891. package/render/table/tableView.ts +0 -289
  892. package/render/table/toolValueUtils.ts +0 -363
  893. package/render/table/types.ts +0 -252
  894. package/render/table/useCreateTable.ts +0 -72
  895. package/render/table/useTable.ts +0 -61
  896. package/render/table/utils/tableSerialization.ts +0 -50
  897. package/render/web/elements/artifactPreviewCode.ts +0 -43
  898. package/render/web/elements/artifactRuntimePreload.ts +0 -52
  899. package/render/web/elements/codeBlockAutoPreview.ts +0 -10
  900. package/render/web/elements/mermaidPreview.ts +0 -21
  901. package/render/web/ui/useInlineEdit.ts +0 -135
  902. package/server/agentEmailRegistrationRoutes.ts +0 -29
  903. package/server/agentRunRouteContract.ts +0 -9
  904. package/server/agentRunRoutes.ts +0 -10
  905. package/server/api/methods.ts +0 -333
  906. package/server/api/tableHandlers.ts +0 -55
  907. package/server/api/types.ts +0 -27
  908. package/server/apiContract.ts +0 -88
  909. package/server/apiRouteAdapter.ts +0 -218
  910. package/server/appBundler.ts +0 -90
  911. package/server/appRoutes.ts +0 -92
  912. package/server/artifactIconsRoute.ts +0 -89
  913. package/server/artifactRuntimeRoute.ts +0 -136
  914. package/server/authenticateToken.ts +0 -73
  915. package/server/billingLedgerRoutes.ts +0 -48
  916. package/server/cliChatRoutes.ts +0 -5
  917. package/server/cloudflareRoutes.ts +0 -35
  918. package/server/coreHeaders.ts +0 -29
  919. package/server/coreReadiness.ts +0 -39
  920. package/server/coreRoutes.ts +0 -65
  921. package/server/coreRuntime.ts +0 -93
  922. package/server/createResponse.ts +0 -68
  923. package/server/cryptoPaymentRoutes.ts +0 -8
  924. package/server/databaseRoutes.ts +0 -225
  925. package/server/desktopRuntimeRoutes.ts +0 -120
  926. package/server/devBuildInfo.ts +0 -51
  927. package/server/devReload.ts +0 -161
  928. package/server/devToolPathPolicy.ts +0 -59
  929. package/server/devToolRoutes.ts +0 -274
  930. package/server/email/cloudflareEmailProvider.ts +0 -119
  931. package/server/email/cloudflareInboundBridge.ts +0 -121
  932. package/server/email/cloudflareInboundWorker.ts +0 -28
  933. package/server/email/provider.ts +0 -149
  934. package/server/email/providerRegistry.ts +0 -22
  935. package/server/emailInboundRoutes.ts +0 -17
  936. package/server/entry.ts +0 -211
  937. package/server/handleRPCRequest.ts +0 -117
  938. package/server/handlers/activityStatsHandler.ts +0 -74
  939. package/server/handlers/agentEmailRegistrationE2EHandler.ts +0 -406
  940. package/server/handlers/agentEmailRegistrationE2ERoutes.ts +0 -6
  941. package/server/handlers/agentRun/agentLookup.ts +0 -77
  942. package/server/handlers/agentRun/autonomousRuntime.ts +0 -355
  943. package/server/handlers/agentRun/backgroundRunDialog.ts +0 -31
  944. package/server/handlers/agentRun/builtinAgents.ts +0 -347
  945. package/server/handlers/agentRun/continueDialogContext.ts +0 -90
  946. package/server/handlers/agentRun/debugContext.ts +0 -58
  947. package/server/handlers/agentRun/dialogLookup.ts +0 -67
  948. package/server/handlers/agentRun/foregroundStreamDialog.ts +0 -13
  949. package/server/handlers/agentRun/index.ts +0 -1630
  950. package/server/handlers/agentRun/inheritedDialogPrompt.ts +0 -111
  951. package/server/handlers/agentRun/localRuntimeBootstrap.ts +0 -69
  952. package/server/handlers/agentRun/loop.ts +0 -2210
  953. package/server/handlers/agentRun/machineConnector.ts +0 -235
  954. package/server/handlers/agentRun/machineRunAudit.ts +0 -49
  955. package/server/handlers/agentRun/modelUsageToolHandlers.ts +0 -368
  956. package/server/handlers/agentRun/referenceRuntime.ts +0 -50
  957. package/server/handlers/agentRun/requestContext.ts +0 -86
  958. package/server/handlers/agentRun/response.ts +0 -27
  959. package/server/handlers/agentRun/runBilling.ts +0 -108
  960. package/server/handlers/agentRun/runDialogPreparation.ts +0 -55
  961. package/server/handlers/agentRun/runtimeBinding.ts +0 -61
  962. package/server/handlers/agentRun/runtimeContext.ts +0 -143
  963. package/server/handlers/agentRun/runtimeExecutionContext.ts +0 -153
  964. package/server/handlers/agentRun/runtimePreparation.ts +0 -193
  965. package/server/handlers/agentRun/runtimeRouting.ts +0 -88
  966. package/server/handlers/agentRun/runtimeSystemMessages.ts +0 -165
  967. package/server/handlers/agentRun/saveDialog.ts +0 -1373
  968. package/server/handlers/agentRun/syncRunDialog.ts +0 -90
  969. package/server/handlers/agentRun/tableActivityProjection.ts +0 -132
  970. package/server/handlers/agentRun/taskRunControlPrompt.ts +0 -122
  971. package/server/handlers/agentRun/taskRunToolHandler.ts +0 -579
  972. package/server/handlers/agentRun/toolExecutor.ts +0 -2909
  973. package/server/handlers/agentRun/toolPolicyGuards.ts +0 -295
  974. package/server/handlers/agentRun/types.ts +0 -94
  975. package/server/handlers/agentRun/workspaceLease.ts +0 -58
  976. package/server/handlers/alphaTestRouteGuard.ts +0 -30
  977. package/server/handlers/apifyActorHandler.ts +0 -170
  978. package/server/handlers/appDeployFlow.ts +0 -876
  979. package/server/handlers/appDeployHandler.ts +0 -4
  980. package/server/handlers/appDeployMutationHandlers.ts +0 -133
  981. package/server/handlers/appDeployReadHandlers.ts +0 -321
  982. package/server/handlers/appDeployShared.ts +0 -230
  983. package/server/handlers/appDeployStatusStore.ts +0 -178
  984. package/server/handlers/appDomainHandler.ts +0 -476
  985. package/server/handlers/appLegacyInfraCleanup.ts +0 -7
  986. package/server/handlers/appSandboxHandler.ts +0 -1055
  987. package/server/handlers/appSourceReadiness.ts +0 -75
  988. package/server/handlers/appSpaceAccess.ts +0 -179
  989. package/server/handlers/applyEditHandler.ts +0 -544
  990. package/server/handlers/applyLineEditsHandler.ts +0 -1058
  991. package/server/handlers/billingLedgerAuditHandler.ts +0 -82
  992. package/server/handlers/billingLedgerWitnessHandler.ts +0 -161
  993. package/server/handlers/billingUsageReportHandler.ts +0 -90
  994. package/server/handlers/browserToolHandler.ts +0 -450
  995. package/server/handlers/cfTextToSpeechHandler.ts +0 -137
  996. package/server/handlers/cfWhisperHandler.ts +0 -206
  997. package/server/handlers/chatBillingSse.ts +0 -79
  998. package/server/handlers/chatHandler.ts +0 -797
  999. package/server/handlers/chatProxyRouting.ts +0 -404
  1000. package/server/handlers/chatUpstreamRetry.ts +0 -162
  1001. package/server/handlers/checkEnvHandler.ts +0 -250
  1002. package/server/handlers/cliChatHandler.ts +0 -266
  1003. package/server/handlers/cloudflareBrowserHandler.ts +0 -275
  1004. package/server/handlers/cloudflareCrawlHandler.ts +0 -260
  1005. package/server/handlers/codeSearchHandler.ts +0 -484
  1006. package/server/handlers/connector/connectorConnectionRegistry.ts +0 -192
  1007. package/server/handlers/connector/connectorWebSocket.ts +0 -117
  1008. package/server/handlers/creatorEarningsReportHandler.ts +0 -97
  1009. package/server/handlers/creatorSettlementReportHandler.ts +0 -98
  1010. package/server/handlers/deepseekOcrHandler.ts +0 -114
  1011. package/server/handlers/deleteMemoryHandler.ts +0 -115
  1012. package/server/handlers/desktopAgentRuntimeAdapter.ts +0 -307
  1013. package/server/handlers/desktopAgentRuntimeHostFacts.ts +0 -40
  1014. package/server/handlers/desktopAgentRuntimeStatusHandler.ts +0 -54
  1015. package/server/handlers/desktopAgentRuntimeTurnHandler.ts +0 -165
  1016. package/server/handlers/desktopAgentRuntimeTurnService.ts +0 -352
  1017. package/server/handlers/desktopClipboardHandler.ts +0 -104
  1018. package/server/handlers/desktopFiles/handler.ts +0 -159
  1019. package/server/handlers/desktopFiles/operations.ts +0 -202
  1020. package/server/handlers/desktopFiles/sandbox.ts +0 -62
  1021. package/server/handlers/desktopFiles/store.ts +0 -81
  1022. package/server/handlers/desktopLlamaRuntimeHandler.ts +0 -360
  1023. package/server/handlers/desktopLocalConnectorHandler.ts +0 -101
  1024. package/server/handlers/desktopUpdaterHandler.ts +0 -132
  1025. package/server/handlers/dialogEvents.ts +0 -10
  1026. package/server/handlers/emailInboundHandler.ts +0 -65
  1027. package/server/handlers/eventBus.ts +0 -160
  1028. package/server/handlers/exaSearchHandler.ts +0 -73
  1029. package/server/handlers/execShellHandler.ts +0 -661
  1030. package/server/handlers/favoriteHandlers.ts +0 -417
  1031. package/server/handlers/fetchWebpageHandler.ts +0 -117
  1032. package/server/handlers/fileOutlineHandler.ts +0 -107
  1033. package/server/handlers/geminiImagePreviewHandler.ts +0 -612
  1034. package/server/handlers/getDialogBillingHandler.ts +0 -151
  1035. package/server/handlers/getTransactionsHandler.ts +0 -107
  1036. package/server/handlers/googleNativeChat.ts +0 -572
  1037. package/server/handlers/listFilesHandler.ts +0 -139
  1038. package/server/handlers/machines/machineAuth.ts +0 -149
  1039. package/server/handlers/machines/machineBinding.ts +0 -59
  1040. package/server/handlers/machines/machineHandlers.ts +0 -279
  1041. package/server/handlers/machines/machineInstallAssets.ts +0 -563
  1042. package/server/handlers/machines/machineRegistry.ts +0 -89
  1043. package/server/handlers/notificationEmitter.ts +0 -189
  1044. package/server/handlers/notificationsHandler.ts +0 -91
  1045. package/server/handlers/olmOcrHandler.ts +0 -115
  1046. package/server/handlers/openaiImageHandler.ts +0 -500
  1047. package/server/handlers/providerHealthHandler.ts +0 -36
  1048. package/server/handlers/publicHandler.ts +0 -209
  1049. package/server/handlers/readFileHandler.ts +0 -300
  1050. package/server/handlers/readXPostHandler.ts +0 -180
  1051. package/server/handlers/rememberMemoryHandler.ts +0 -69
  1052. package/server/handlers/remotionRenderHandler.ts +0 -236
  1053. package/server/handlers/renderMarkdownHandler.ts +0 -66
  1054. package/server/handlers/revenueShareReportHandler.ts +0 -96
  1055. package/server/handlers/searchRepoHandler.ts +0 -159
  1056. package/server/handlers/tableAccess.ts +0 -34
  1057. package/server/handlers/tableToolHandlers.ts +0 -741
  1058. package/server/handlers/typecheckWorker.ts +0 -54
  1059. package/server/handlers/userEvents.ts +0 -6
  1060. package/server/handlers/userSecretsHandler.ts +0 -210
  1061. package/server/handlers/versionHandler.ts +0 -281
  1062. package/server/handlers/versionStore.ts +0 -176
  1063. package/server/handlers/wereadGatewayHandler.ts +0 -48
  1064. package/server/handlers/whisperHandler.ts +0 -158
  1065. package/server/handlers/writeFileHandler.ts +0 -168
  1066. package/server/html/desktopReleaseManifest.server.ts +0 -17
  1067. package/server/html/generateErrorResponse.ts +0 -22
  1068. package/server/html/serializeState.ts +0 -9
  1069. package/server/html/ssrPreload.ts +0 -247
  1070. package/server/html/template.ts +0 -275
  1071. package/server/httpCompression.ts +0 -102
  1072. package/server/index.ts +0 -0
  1073. package/server/liveReloadScript.ts +0 -105
  1074. package/server/luIconNames.ts +0 -14
  1075. package/server/machineRoutes.ts +0 -44
  1076. package/server/mediaRoutes.ts +0 -25
  1077. package/server/memoryRoutes.ts +0 -14
  1078. package/server/normalizedStatusRoutes.ts +0 -23
  1079. package/server/payments/crypto/cryptoUsdcBaseAddressPool.ts +0 -49
  1080. package/server/payments/crypto/cryptoUsdcBaseConfig.ts +0 -120
  1081. package/server/payments/crypto/cryptoUsdcBasePaymentProvider.ts +0 -134
  1082. package/server/payments/crypto/cryptoUsdcBaseScanner.ts +0 -267
  1083. package/server/payments/crypto/cryptoUsdcBaseWatcher.ts +0 -40
  1084. package/server/payments/crypto/cryptoUsdtTronAddressPool.ts +0 -49
  1085. package/server/payments/crypto/cryptoUsdtTronConfig.ts +0 -120
  1086. package/server/payments/crypto/cryptoUsdtTronPaymentProvider.ts +0 -132
  1087. package/server/payments/crypto/cryptoUsdtTronScanner.ts +0 -313
  1088. package/server/payments/crypto/cryptoUsdtTronWatcher.ts +0 -40
  1089. package/server/payments/paymentProvider.ts +0 -6
  1090. package/server/payments/paymentRoutes.ts +0 -27
  1091. package/server/payments/rechargeCredits.ts +0 -69
  1092. package/server/payments/waffo/waffoPaymentProvider.ts +0 -341
  1093. package/server/preview/previewCapability.ts +0 -90
  1094. package/server/preview/previewConfig.ts +0 -54
  1095. package/server/preview/previewGateway.ts +0 -71
  1096. package/server/preview/previewRealtime.ts +0 -33
  1097. package/server/providerHealthProbe.ts +0 -198
  1098. package/server/providerHealthRoutes.ts +0 -19
  1099. package/server/publicPaths.ts +0 -12
  1100. package/server/publicRequestHandler.ts +0 -15
  1101. package/server/reactAppBuilder.ts +0 -416
  1102. package/server/realtimeRoutes.ts +0 -69
  1103. package/server/renderStream.ts +0 -20
  1104. package/server/routeFactory.ts +0 -45
  1105. package/server/routes.ts +0 -125
  1106. package/server/safeTempFile.ts +0 -48
  1107. package/server/scheduler/scheduledTaskRuntime.ts +0 -228
  1108. package/server/scheduler/schedulerService.ts +0 -290
  1109. package/server/serverDrain.ts +0 -129
  1110. package/server/services/browserSessionManager.ts +0 -354
  1111. package/server/shareRoutes.ts +0 -86
  1112. package/server/sqliteRoutes.ts +0 -141
  1113. package/server/taskRunBridgeRoutes.ts +0 -95
  1114. package/server/tasks.ts +0 -113
  1115. package/server/waffoPaymentRoutes.ts +0 -5
  1116. package/server/webUtilityRoutes.ts +0 -50
  1117. package/server/workerValidator.ts +0 -224
  1118. package/share/action.ts +0 -225
  1119. package/share/clientTableReplication.ts +0 -160
  1120. package/share/link.ts +0 -40
  1121. package/share/loadOwnerShares.ts +0 -154
  1122. package/share/paidAccess.ts +0 -32
  1123. package/share/publicSharePolicy.ts +0 -27
  1124. package/share/server/fetchCommunityShares.ts +0 -45
  1125. package/share/server/helpers.ts +0 -202
  1126. package/share/server/importShare.ts +0 -148
  1127. package/share/server/listCommunityShares.ts +0 -167
  1128. package/share/server/purchaseDoc.ts +0 -224
  1129. package/share/server/readCommunityShareCover.ts +0 -73
  1130. package/share/server/readSharedTable.ts +0 -139
  1131. package/share/server/tableReplication.ts +0 -351
  1132. package/share/shareSlice.ts +0 -53
  1133. package/share/tableShareState.ts +0 -74
@@ -1,1874 +0,0 @@
1
- // 文件路径: packages/ai/agent/streamAgentChatTurn.ts
2
- import { extractCustomId } from "../../core/prefix";
3
- import { createDialogMessageKeyAndId } from "../../database/keys";
4
- import { DataType } from "../../create/types";
5
-
6
- import type { RootState } from "../../app/store";
7
- import { patch, read, selectById } from "../../database/dbSlice";
8
- import { generateRequestBody } from "../llm/generateRequestBody";
9
- import {
10
- selectCurrentDialogConfig,
11
- selectDialogConfigByKey,
12
- addActiveController,
13
- removeActiveController,
14
- selectPendingUserInputQueue,
15
- dequeueUserInput,
16
- clearPendingUserInputQueue,
17
- } from "../../chat/dialog/dialogSlice";
18
- import { removeTransientMessage, selectAllMsgs } from "../../chat/messages/messageSlice";
19
- import {
20
- selectContextRetention,
21
- selectMaxExecutionTime,
22
- selectCurrentServer,
23
- } from "../../app/settings/settingSlice";
24
- import { filterAndCleanMessages } from "../../integrations/openai/filterAndCleanMessages";
25
- import {
26
- getFullChatContextKeys,
27
- deduplicateContextKeys,
28
- } from "../agent/getFullChatContextKeys";
29
- import type { Agent, DialogConfig } from "../../app/types";
30
- import { isResponseAPIModel } from "../llm/isResponseAPIModel";
31
- import { getModelContextWindow } from "../llm/getModelContextWindow";
32
- import { resolveAgentImageInputSupport } from "../llm/agentCapabilities";
33
-
34
- import {
35
- sendOpenAICompletionsRequest,
36
- type CompletionMeta,
37
- } from "../chat/sendOpenAICompletionsRequest";
38
- import { sendOpenAIResponseRequest } from "../chat/sendOpenAIResponseRequest";
39
-
40
- import type { AgentRuntimeOptions } from "./types";
41
- import { buildAgentViewMessages } from "./cleanAgentMessages";
42
- import { extractCategorizedMentions, type CategorizedMentions } from "../../create/editor/utils/slateUtils";
43
- import { resolveReferenceAssets, resolveToolsFromKeys } from "./referenceUtils";
44
- import { estimateTokenCount } from "../context/tokenUtils";
45
- import {
46
- applyImageConfigRuntimeOverride,
47
- buildStaticContexts,
48
- compressOldToolResults,
49
- buildDynamicContexts,
50
- mergeContexts,
51
- hasImageInMessages,
52
- mergeAgentToolsWithRuntime,
53
- trimMessagesWithSummary,
54
- validateAccessAndBalance,
55
- } from "./streamAgentChatTurnUtils";
56
- import { buildCliPrompt } from "./cliPrompt";
57
- import { createCliChatTurnStream } from "./cliChatClient";
58
- import { getCliChatSession, startCliChatSession } from "./cliChatClient";
59
- import {
60
- messageStreamEnd,
61
- messageStreaming,
62
- prepareAndPersistUserMessage,
63
- } from "../../chat/messages/messageSlice";
64
- import { selectCurrentToken, selectUserId } from "../../auth/authSlice";
65
- import { persistMessageWithFixedId } from "./persistMessageWithFixedId";
66
- import { updateTotalUsage } from "../chat/updateTotalUsage";
67
- import { createSSEParser } from "../chat/parseMultilineSSE";
68
- import {
69
- extractAgentRuntimeServerBase,
70
- normalizeServerOrigin,
71
- } from "./runtimeServerBase";
72
- import { getIsDesktopApp } from "../../app/utils/env";
73
- import { runDesktopAgentRuntimeTurn } from "../../app/utils/desktopAgentRuntimeTurnClient";
74
-
75
- const BUILTIN_NOLO_AGENT_ID = "01NOLOAPPBLD000000019KCKT0";
76
- const BUILTIN_NOLO_AGENT_KEY = `agent-pub-${BUILTIN_NOLO_AGENT_ID}`;
77
-
78
- const buildParallelMessageMetadata = (
79
- agentConfig: Pick<Agent, "dbKey" | "name">,
80
- runtimeOptions?: AgentRuntimeOptions,
81
- ) => {
82
- const rawName =
83
- typeof agentConfig?.name === "string" ? agentConfig.name.trim() : "";
84
- return {
85
- agentKey: agentConfig.dbKey,
86
- cybotKey: agentConfig.dbKey,
87
- ...(rawName ? { agentName: rawName } : {}),
88
- ...(runtimeOptions?.parallelSessionId
89
- ? { parallelSessionId: runtimeOptions.parallelSessionId }
90
- : {}),
91
- ...(runtimeOptions?.parallelBranchId
92
- ? { parallelBranchId: runtimeOptions.parallelBranchId }
93
- : {}),
94
- ...(runtimeOptions?.parallelLabel
95
- ? { parallelLabel: runtimeOptions.parallelLabel }
96
- : {}),
97
- ...(runtimeOptions?.parallelIndex !== undefined
98
- ? { parallelIndex: runtimeOptions.parallelIndex }
99
- : {}),
100
- };
101
- };
102
-
103
- const filterMessagesForParallelBranch = (
104
- messages: any[],
105
- runtimeOptions?: AgentRuntimeOptions,
106
- ) => {
107
- if (!runtimeOptions?.parallelSessionId) return messages;
108
-
109
- return messages.filter((message: any) => {
110
- const sessionId = message?.parallelSessionId;
111
- if (sessionId !== runtimeOptions.parallelSessionId) {
112
- return true;
113
- }
114
- return message?.parallelBranchId === runtimeOptions.parallelBranchId;
115
- });
116
- };
117
-
118
- const isDesktopBuiltinNoloAgent = (
119
- requestedAgentKey: string,
120
- agentConfig: Partial<Agent> | null | undefined,
121
- ) => {
122
- if (!getIsDesktopApp()) return false;
123
- const candidates = [
124
- requestedAgentKey,
125
- agentConfig?.dbKey,
126
- agentConfig?.agentKey,
127
- agentConfig?.id,
128
- ];
129
- return candidates.some((value) =>
130
- typeof value === "string" &&
131
- (value === BUILTIN_NOLO_AGENT_KEY ||
132
- value === BUILTIN_NOLO_AGENT_ID ||
133
- value.endsWith(`-${BUILTIN_NOLO_AGENT_ID}`))
134
- );
135
- };
136
-
137
- const formatMachineAgentRunError = async (response: Response): Promise<string> => {
138
- const errorText = await response.text();
139
- let payload: any = null;
140
- try {
141
- payload = errorText ? JSON.parse(errorText) : null;
142
- } catch {
143
- payload = null;
144
- }
145
-
146
- const reason = typeof payload?.reason === "string" ? payload.reason : "";
147
- if (response.status === 409) {
148
- if (reason === "bound_machine_unavailable") {
149
- return "绑定的电脑不在线。请确认这台电脑已开机并重新运行连接命令。";
150
- }
151
- if (reason === "connector_offline") {
152
- return "电脑在线,但连接器未连接。请在这台电脑上重新运行连接命令后再试。";
153
- }
154
- if (reason === "missing_capability") {
155
- return "这台电脑没有对应的 CLI 能力。请安装对应 CLI,或把 Agent 绑定到另一台电脑。";
156
- }
157
- }
158
-
159
- const message =
160
- typeof payload?.message === "string" && payload.message.trim()
161
- ? payload.message.trim()
162
- : typeof payload?.error === "string" && payload.error.trim()
163
- ? payload.error.trim()
164
- : errorText.trim();
165
- return message || `Machine agent run failed (${response.status})`;
166
- };
167
-
168
- /** streamAgentChatTurn 参数(聊天轮次专用) */
169
- export interface StreamAgentChatTurnArgs {
170
- agentKey: string;
171
- userInput: string | any[];
172
- serverBase?: string;
173
- dialogKey?: string; // 可选。显式指定目标对话,不传则使用当前活跃对话。
174
- isStreaming?: boolean;
175
- parentMessageId?: string;
176
- runtimeOptions?: AgentRuntimeOptions;
177
- quickChatPerfStartedAt?: number;
178
- }
179
-
180
- const QUICK_CHAT_AGENT_CONFIG_READ_TIMEOUT_MS = 10_000;
181
- const QUICK_CHAT_DYNAMIC_CONTEXT_TIMEOUT_MS = 5_000;
182
- const EMPTY_DYNAMIC_CONTEXTS = {
183
- currentInputContext: null,
184
- historyContext: "",
185
- editingContext: null,
186
- appWorkingMemory: null,
187
- dialogSummary: null,
188
- proactiveSummary: null,
189
- referenceKeys: [],
190
- };
191
-
192
- function appendCliCapabilityWarnings(content: string, warnings: string[]): string {
193
- if (!warnings.length) return content;
194
- const warningBlock = `\n\n[CLI 能力提示]\n${warnings.map((warning) => `- ${warning}`).join("\n")}`;
195
- return `${content}${warningBlock}`;
196
- }
197
-
198
- const logQuickChatPerfStage = (
199
- startedAt: number | undefined,
200
- stage: string,
201
- details: Record<string, unknown> = {}
202
- ) => {
203
- if (!startedAt) return;
204
- const now = typeof performance !== "undefined" ? performance.now() : Date.now();
205
- console.info("[QuickChatPerf]", {
206
- stage,
207
- elapsedMs: now - startedAt,
208
- ...(typeof performance !== "undefined" ? { atMs: now } : {}),
209
- ...details,
210
- });
211
- };
212
-
213
- const readAgentConfigForTurn = async (
214
- dispatch: any,
215
- agentKey: string,
216
- quickChatPerfStartedAt?: number,
217
- ): Promise<Agent> => {
218
- const readPromise = dispatch(read({ dbKey: agentKey })).unwrap() as Promise<Agent>;
219
- if (!quickChatPerfStartedAt) return readPromise;
220
-
221
- let timeoutId: ReturnType<typeof setTimeout> | undefined;
222
- try {
223
- return await Promise.race([
224
- readPromise,
225
- new Promise<Agent>((_, reject) => {
226
- timeoutId = setTimeout(() => {
227
- logQuickChatPerfStage(
228
- quickChatPerfStartedAt,
229
- "quick-chat-agent-config-read-timeout",
230
- {
231
- agentKey,
232
- timeoutMs: QUICK_CHAT_AGENT_CONFIG_READ_TIMEOUT_MS,
233
- },
234
- );
235
- reject(
236
- new Error("读取 Agent 配置超时,未能启动模型回复。"),
237
- );
238
- }, QUICK_CHAT_AGENT_CONFIG_READ_TIMEOUT_MS);
239
- }),
240
- ]);
241
- } finally {
242
- if (timeoutId) clearTimeout(timeoutId);
243
- }
244
- };
245
-
246
- const buildDynamicContextsForTurn = async (
247
- state: RootState,
248
- dispatch: any,
249
- agentConfig: Agent,
250
- userInput: string | any[],
251
- runtimeOptions: AgentRuntimeOptions | undefined,
252
- mergedContentCache: Map<string, any>,
253
- dialogKey: string | undefined,
254
- quickChatPerfStartedAt?: number,
255
- ) => {
256
- if (!quickChatPerfStartedAt) {
257
- return buildDynamicContexts(
258
- state,
259
- dispatch,
260
- agentConfig,
261
- userInput,
262
- runtimeOptions,
263
- mergedContentCache,
264
- dialogKey,
265
- );
266
- }
267
-
268
- let timeoutId: ReturnType<typeof setTimeout> | undefined;
269
- try {
270
- const timeoutPromise = new Promise<typeof EMPTY_DYNAMIC_CONTEXTS>((resolve) => {
271
- timeoutId = setTimeout(() => {
272
- logQuickChatPerfStage(
273
- quickChatPerfStartedAt,
274
- "quick-chat-dynamic-context-timeout",
275
- {
276
- agentKey: agentConfig.dbKey,
277
- dialogKey,
278
- timeoutMs: QUICK_CHAT_DYNAMIC_CONTEXT_TIMEOUT_MS,
279
- },
280
- );
281
- resolve(EMPTY_DYNAMIC_CONTEXTS);
282
- }, QUICK_CHAT_DYNAMIC_CONTEXT_TIMEOUT_MS);
283
- });
284
-
285
- logQuickChatPerfStage(
286
- quickChatPerfStartedAt,
287
- "stream-agent-dynamic-context-starting",
288
- {
289
- responseApi: isResponseAPIModel(agentConfig),
290
- },
291
- );
292
- const contextPromise = buildDynamicContexts(
293
- state,
294
- dispatch,
295
- agentConfig,
296
- userInput,
297
- runtimeOptions,
298
- mergedContentCache,
299
- dialogKey,
300
- );
301
-
302
- return await Promise.race([
303
- contextPromise,
304
- timeoutPromise,
305
- ]);
306
- } finally {
307
- if (timeoutId) clearTimeout(timeoutId);
308
- }
309
- };
310
-
311
- const finalizeQuickChatAgentTurnFailure = async (
312
- dispatch: any,
313
- dialogKey: string,
314
- agentKey: string,
315
- error: unknown,
316
- ) => {
317
- const dialogId = extractCustomId(dialogKey);
318
- const { key: msgKey, messageId } = createDialogMessageKeyAndId(dialogId);
319
- const reason =
320
- error instanceof Error && error.message.trim()
321
- ? error.message.trim()
322
- : "未能启动模型回复,请重试。";
323
-
324
- await dispatch(
325
- messageStreamEnd({
326
- finalContentBuffer: [
327
- {
328
- type: "text",
329
- text: `[错误: ${reason}]`,
330
- },
331
- ],
332
- totalUsage: null,
333
- msgKey,
334
- agentConfig: {
335
- dbKey: agentKey,
336
- },
337
- dialogId,
338
- dialogKey,
339
- messageId,
340
- reasoningBuffer: "",
341
- })
342
- ).unwrap?.();
343
- };
344
-
345
- const normalizeAgentRunUserInput = (userInput: string | any[]) => {
346
- if (typeof userInput === "string") {
347
- return userInput;
348
- }
349
- if (!Array.isArray(userInput)) {
350
- return "";
351
- }
352
- return userInput.filter((part) => {
353
- if (!part || typeof part !== "object") return false;
354
- if (part.type === "text") return typeof part.text === "string";
355
- return (
356
- part.type === "image_url" &&
357
- typeof part.image_url?.url === "string" &&
358
- !!part.image_url.url.trim()
359
- );
360
- });
361
- };
362
-
363
- const isSimpleTextInput = (userInput: string | any[]) => {
364
- if (typeof userInput === "string") return true;
365
- if (!Array.isArray(userInput)) return false;
366
- return userInput.every(
367
- (part) =>
368
- part &&
369
- typeof part === "object" &&
370
- part.type === "text" &&
371
- typeof part.text === "string",
372
- );
373
- };
374
-
375
- const canUseQuickChatEmptyDynamicContexts = (
376
- quickChatPerfStartedAt: number | undefined,
377
- userInput: string | any[],
378
- runtimeOptions: AgentRuntimeOptions | undefined,
379
- dialogConfig: DialogConfig | null,
380
- ) => {
381
- if (!quickChatPerfStartedAt) return false;
382
- if (runtimeOptions) return false;
383
- if (!isSimpleTextInput(userInput)) return false;
384
- if (dialogConfig?.referenceKeys?.length) return false;
385
- return true;
386
- };
387
-
388
- const QUICK_CHAT_DIRECT_ANSWER_PATTERN =
389
- /(只回复|只输出|只回答|直接回复|直接回答|不要解释|无需解释|不用解释|简短回答|一句话)/i;
390
- const QUICK_CHAT_TOOL_INTENT_PATTERN =
391
- /(调用|转交|agent|助手|应用|网页|页面|图表|图片|生成图|画图|删除|清理|空间|商品|链接|https?:\/\/|www\.|@)/i;
392
-
393
- const shouldDisableQuickChatToolsForDirectAnswer = (
394
- quickChatPerfStartedAt: number | undefined,
395
- userInput: string | any[],
396
- runtimeOptions: AgentRuntimeOptions | undefined,
397
- dialogConfig: DialogConfig | null,
398
- ) => {
399
- if (!canUseQuickChatEmptyDynamicContexts(
400
- quickChatPerfStartedAt,
401
- userInput,
402
- runtimeOptions,
403
- dialogConfig,
404
- )) {
405
- return false;
406
- }
407
- const text = extractAgentRunUserText(userInput);
408
- if (!text || text.length > 500) return false;
409
- if (!QUICK_CHAT_DIRECT_ANSWER_PATTERN.test(text)) return false;
410
- return !QUICK_CHAT_TOOL_INTENT_PATTERN.test(text);
411
- };
412
-
413
- const classifyQuickChatAccessError = (accessError: string) => {
414
- if (accessError.includes("获取用户余额")) return "balance-loading";
415
- if (accessError.includes("余额")) return "balance";
416
- if (accessError.includes("白名单")) return "whitelist";
417
- if (accessError.includes("定价")) return "pricing";
418
- return "unknown";
419
- };
420
-
421
- const isUsableAgentConfig = (value: unknown): value is Agent =>
422
- !!value &&
423
- typeof value === "object" &&
424
- (value as any).__ssrPreviewOnly !== true &&
425
- typeof (value as Agent).dbKey === "string" &&
426
- !!(value as Agent).dbKey &&
427
- typeof (value as Agent).model === "string" &&
428
- !!(value as Agent).model &&
429
- typeof (value as Agent).provider === "string" &&
430
- !!(value as Agent).provider;
431
-
432
- const extractAgentRunUserText = (userInput: string | any[]) => {
433
- if (typeof userInput === "string") {
434
- return userInput;
435
- }
436
- if (!Array.isArray(userInput)) {
437
- return "";
438
- }
439
- return userInput
440
- .filter((part) => part?.type === "text" && typeof part.text === "string")
441
- .map((part) => part.text)
442
- .join("\n")
443
- .trim();
444
- };
445
-
446
- const hasAgentRunUserInputContent = (userInput: string | any[]) => {
447
- if (typeof userInput === "string") {
448
- return userInput.trim().length > 0;
449
- }
450
- return Array.isArray(userInput) && userInput.length > 0;
451
- };
452
-
453
- /**
454
- * 真正用于“聊天轮次”的流式 Agent 调用(带 Agent Loop):
455
- * - 每轮检查权限 & 余额
456
- * - 每轮重建上下文 & 消息
457
- * - 调用 Completions/Response API
458
- * - 对 Completions 模型,基于 tool_calls / handoff / pending 决定是否继续
459
- */
460
- export const streamAgentChatTurnHandler = async (
461
- args: StreamAgentChatTurnArgs,
462
- thunkApi: any,
463
- ) => {
464
- const {
465
- agentKey,
466
- userInput,
467
- dialogKey: explicitDialogKey,
468
- parentMessageId,
469
- runtimeOptions,
470
- quickChatPerfStartedAt,
471
- } = args;
472
- const { getState, dispatch, rejectWithValue } = thunkApi;
473
- const state = getState() as RootState;
474
-
475
- // 🚀 额外引入一个 Loop 控制器,用于中止整个 Agent 循环
476
- const loopController = new AbortController();
477
- const isAbortError = (error?: { name?: string } | null) =>
478
- error?.name === "AbortError" || loopController.signal.aborted || thunkApi.signal.aborted;
479
- const onAbort = () => loopController.abort();
480
- thunkApi.signal.addEventListener("abort", onAbort);
481
- let loopKey: string | null = null;
482
- let runtimeDialogKey: string | null = explicitDialogKey ?? null;
483
- let remoteTransientMessageId: string | null = null;
484
- let remoteTransientMessageFinalized = false;
485
- let modelRequestStarted = false;
486
-
487
- try {
488
- let totalTurnUsage: any = null;
489
- const agentRunUserInput = normalizeAgentRunUserInput(userInput);
490
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-entered", {
491
- agentKey,
492
- dialogKey: explicitDialogKey ?? null,
493
- });
494
- // 1. 读取 Agent 配置。Quick Chat 会提前预热默认 agent;命中 Redux DB 缓存时避免重复读。
495
- const cachedAgentConfig = selectById(getState() as RootState, agentKey);
496
- const agentConfig = isUsableAgentConfig(cachedAgentConfig)
497
- ? cachedAgentConfig
498
- : await readAgentConfigForTurn(
499
- dispatch,
500
- agentKey,
501
- quickChatPerfStartedAt,
502
- );
503
- if (!agentConfig) {
504
- return rejectWithValue(`Agent config not found for ID: ${agentKey}`);
505
- }
506
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-config-read", {
507
- agentKey,
508
- model: agentConfig.model,
509
- provider: agentConfig.provider,
510
- apiSource: agentConfig.apiSource,
511
- source: cachedAgentConfig === agentConfig ? "cache" : "read",
512
- });
513
-
514
- // ── CLI Agent 专用路由 ────────────────────────────────────────────────
515
- // CLI 共享 prompt / model 这些入口能力,但不复用本地 tool-call 循环。
516
- if (agentConfig.apiSource === "cli") {
517
- const currentState = getState() as RootState;
518
- const w =
519
- typeof globalThis !== "undefined" && (globalThis as any).window
520
- ? (globalThis as any).window
521
- : null;
522
- if (w) w.__LOOP_STOP_REASON__ = null;
523
-
524
- const userText = extractAgentRunUserText(userInput);
525
-
526
- const prompt = buildCliPrompt(agentConfig.prompt, userText);
527
-
528
- // 生成消息 key
529
- const dialogConfig =
530
- selectDialogConfigByKey(currentState, explicitDialogKey) ??
531
- selectCurrentDialogConfig(currentState);
532
- if (!dialogConfig) {
533
- return rejectWithValue("Dialog config not found");
534
- }
535
-
536
- const dialogKey = explicitDialogKey || dialogConfig.dbKey;
537
- if (!dialogKey) {
538
- return rejectWithValue("当前对话不存在,无法发送消息。");
539
- }
540
- runtimeDialogKey = dialogKey;
541
- const dialogId = extractCustomId(dialogKey);
542
- loopKey = `loop:${dialogId}`;
543
- dispatch(addActiveController({ messageId: loopKey, controller: loopController, dialogKey }));
544
-
545
- const { key: msgKey, messageId } = createDialogMessageKeyAndId(dialogId);
546
- const cliMessageMetadata = buildParallelMessageMetadata(
547
- agentConfig,
548
- runtimeOptions,
549
- );
550
- const boundMachineId =
551
- typeof (agentConfig as any).runtimeBinding?.machineId === "string"
552
- ? (agentConfig as any).runtimeBinding.machineId.trim()
553
- : "";
554
-
555
- if (boundMachineId) {
556
- const token = selectCurrentToken(currentState);
557
- const authHeader = token ? `Bearer ${token}` : "";
558
- const rawMessages = filterMessagesForParallelBranch(
559
- selectAllMsgs(currentState, dialogId),
560
- runtimeOptions,
561
- );
562
- const visibleMessages = buildAgentViewMessages(
563
- rawMessages as any,
564
- agentConfig.dbKey,
565
- );
566
- const cleanedMessages = filterAndCleanMessages(visibleMessages);
567
- const currentServer = selectCurrentServer(currentState);
568
- remoteTransientMessageId = messageId;
569
- let accumulated = "";
570
- let totalTurnUsage: any = undefined;
571
- const buildMachineAssistantMessage = () => ({
572
- id: messageId,
573
- dbKey: msgKey,
574
- role: "assistant" as const,
575
- content: accumulated,
576
- ...cliMessageMetadata,
577
- userId: selectUserId(getState() as RootState),
578
- });
579
-
580
- dispatch(messageStreaming({
581
- id: messageId,
582
- dialogId,
583
- dbKey: msgKey,
584
- content: "",
585
- role: "assistant",
586
- ...cliMessageMetadata,
587
- }));
588
-
589
- const rejectMachineStream = async (message: string) => {
590
- if (accumulated.length > 0) {
591
- await persistMessageWithFixedId(dispatch, buildMachineAssistantMessage());
592
- } else {
593
- dispatch(removeTransientMessage(messageId));
594
- }
595
- remoteTransientMessageFinalized = true;
596
- return rejectWithValue(message);
597
- };
598
-
599
- const machineResponse = await fetch(`${currentServer.replace(/\/+$/, "")}/api/agent/run`, {
600
- method: "POST",
601
- headers: {
602
- "Content-Type": "application/json",
603
- Accept: "text/event-stream",
604
- ...(authHeader ? { Authorization: authHeader } : {}),
605
- },
606
- body: JSON.stringify({
607
- agentKey,
608
- userInput: agentRunUserInput,
609
- messages: cleanedMessages,
610
- stream: true,
611
- persistDialog: false,
612
- clientDialogId: dialogId,
613
- runtimeContext: {
614
- surface: "web",
615
- host: "browser",
616
- runtime: "react",
617
- entrypoint: "chat-dialog",
618
- capabilities: ["streaming", "dialog-ui", "machine-bound-cli"],
619
- },
620
- ...((dialogConfig as any)?.spaceId ? { spaceId: (dialogConfig as any).spaceId } : {}),
621
- }),
622
- signal: loopController.signal,
623
- });
624
-
625
- if (!machineResponse.ok) {
626
- return await rejectMachineStream(
627
- await formatMachineAgentRunError(machineResponse),
628
- );
629
- }
630
-
631
- const reader = machineResponse.body?.getReader();
632
- if (!reader) {
633
- return await rejectMachineStream("无法读取电脑端 Agent 流式响应");
634
- }
635
-
636
- const decoder = new TextDecoder();
637
- const parseSSE = createSSEParser();
638
- const abortMachineStream = async () => {
639
- if (w) w.__LOOP_STOP_REASON__ = "aborted";
640
- if (accumulated.length <= 0) return;
641
- await persistMessageWithFixedId(dispatch, buildMachineAssistantMessage());
642
- };
643
-
644
- try {
645
- while (true) {
646
- const { done, value } = await reader.read();
647
- if (done) break;
648
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
649
- await abortMachineStream();
650
- return;
651
- }
652
-
653
- const payloads = parseSSE(
654
- decoder.decode(value, { stream: true }),
655
- );
656
- for (const payload of payloads) {
657
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
658
- await abortMachineStream();
659
- return;
660
- }
661
- if (payload.type === "error") {
662
- return await rejectMachineStream(
663
- payload.message || "电脑端 Agent 执行失败",
664
- );
665
- }
666
- if (payload.type === "text" && typeof payload.content === "string") {
667
- accumulated += payload.content;
668
- dispatch(messageStreaming({
669
- id: messageId,
670
- dialogId,
671
- dbKey: msgKey,
672
- content: accumulated,
673
- role: "assistant",
674
- ...cliMessageMetadata,
675
- }));
676
- }
677
- if (payload.type === "done") {
678
- totalTurnUsage = payload.usage;
679
- }
680
- }
681
- }
682
-
683
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
684
- await abortMachineStream();
685
- return;
686
- }
687
-
688
- await persistMessageWithFixedId(dispatch, buildMachineAssistantMessage());
689
- remoteTransientMessageFinalized = true;
690
- } finally {
691
- try {
692
- await reader.cancel();
693
- } catch {
694
- // ignore
695
- }
696
- }
697
-
698
- return {
699
- usage: totalTurnUsage ?? undefined,
700
- };
701
- }
702
-
703
- let cliSessionId = dialogConfig.cliSessionId ?? null;
704
-
705
- // 先创建一条空的流式消息(让用户立刻看到 loading 状态)
706
- dispatch(messageStreaming({
707
- id: messageId,
708
- dialogId,
709
- dbKey: msgKey,
710
- content: "",
711
- role: "assistant",
712
- ...cliMessageMetadata,
713
- }));
714
-
715
- const ensureCliSession = async () => {
716
- if (cliSessionId) {
717
- const existing = await getCliChatSession(
718
- { getState },
719
- { sessionId: cliSessionId },
720
- ).catch(() => null);
721
- if (existing?.ok && existing?.session?.sessionId) {
722
- return cliSessionId;
723
- }
724
- }
725
-
726
- const started = await startCliChatSession(
727
- { getState },
728
- {
729
- cliProvider: agentConfig.cliProvider || "copilot",
730
- model: agentConfig.model || undefined,
731
- systemPrompt: agentConfig.prompt || undefined,
732
- reasoningEffort: agentConfig.reasoning_effort || undefined,
733
- temperature: agentConfig.temperature,
734
- topP: agentConfig.top_p,
735
- frequencyPenalty: agentConfig.frequency_penalty,
736
- presencePenalty: agentConfig.presence_penalty,
737
- maxTokens: agentConfig.max_tokens,
738
- enableThinking: agentConfig.enableThinking,
739
- thinkingBudget: agentConfig.thinkingBudget,
740
- },
741
- );
742
-
743
- const newSessionId =
744
- typeof started?.sessionId === "string" ? started.sessionId : null;
745
- if (!newSessionId) {
746
- throw new Error("无法创建 CLI session。");
747
- }
748
-
749
- cliSessionId = newSessionId;
750
- const patchResult = dispatch(
751
- patch({
752
- dbKey: dialogKey,
753
- changes: {
754
- cliSessionId: newSessionId,
755
- },
756
- })
757
- ) as any;
758
- try {
759
- if (typeof patchResult?.unwrap === "function") {
760
- await patchResult.unwrap();
761
- } else {
762
- await patchResult;
763
- }
764
- } catch {
765
- // Best effort only. Session still exists server-side even if dialog persistence fails.
766
- }
767
- return newSessionId;
768
- };
769
-
770
- const initialSessionId = await ensureCliSession();
771
- let resp = await createCliChatTurnStream(
772
- {
773
- getState,
774
- },
775
- {
776
- sessionId: initialSessionId,
777
- prompt,
778
- model: agentConfig.model || undefined,
779
- },
780
- loopController.signal,
781
- );
782
-
783
- if (!resp.ok && resp.status === 404) {
784
- cliSessionId = null;
785
- const renewedSessionId = await ensureCliSession();
786
- resp = await createCliChatTurnStream(
787
- {
788
- getState,
789
- },
790
- {
791
- sessionId: renewedSessionId,
792
- prompt,
793
- model: agentConfig.model || undefined,
794
- },
795
- loopController.signal,
796
- );
797
- }
798
-
799
- if (!resp.ok) {
800
- const err = await resp.json().catch(() => ({ error: resp.statusText }));
801
- return rejectWithValue(err.error || "CLI 执行失败");
802
- }
803
-
804
- // 读取 SSE 流并逐步更新消息内容
805
- const reader = resp.body?.getReader();
806
- if (!reader) {
807
- return rejectWithValue("无法读取流式响应");
808
- }
809
-
810
- let accumulated = "";
811
- let cliCapabilityWarnings: string[] = [];
812
- const decoder = new TextDecoder();
813
- const buildCliAssistantMessage = () => ({
814
- id: messageId,
815
- dbKey: msgKey,
816
- role: "assistant" as const,
817
- content: accumulated,
818
- ...cliMessageMetadata,
819
- userId: selectUserId(getState() as RootState),
820
- });
821
- const abortCliStream = async () => {
822
- if (w) w.__LOOP_STOP_REASON__ = "aborted";
823
- if (accumulated.length <= 0) {
824
- return;
825
- }
826
- await persistMessageWithFixedId(dispatch, buildCliAssistantMessage());
827
- };
828
-
829
- try {
830
- while (true) {
831
- const { done, value } = await reader.read();
832
- if (done) break;
833
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
834
- await abortCliStream();
835
- return;
836
- }
837
-
838
- const raw = decoder.decode(value, { stream: true });
839
- // 解析 SSE 格式 "data: {...}\n\n"
840
- const lines = raw.split("\n");
841
- for (const line of lines) {
842
- if (!line.startsWith("data: ")) continue;
843
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
844
- await abortCliStream();
845
- return;
846
- }
847
- try {
848
- const payload = JSON.parse(line.slice(6));
849
- if (payload.error) {
850
- return rejectWithValue(payload.error);
851
- }
852
- if (payload.chunk) {
853
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
854
- await abortCliStream();
855
- return;
856
- }
857
- accumulated += payload.chunk;
858
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
859
- await abortCliStream();
860
- return;
861
- }
862
- dispatch(messageStreaming({
863
- id: messageId,
864
- dialogId,
865
- dbKey: msgKey,
866
- content: accumulated,
867
- role: "assistant",
868
- ...cliMessageMetadata,
869
- }));
870
- }
871
- if (payload.done && Array.isArray(payload.warnings)) {
872
- cliCapabilityWarnings = payload.warnings.filter((warning): warning is string => typeof warning === "string" && warning.trim().length > 0);
873
- }
874
- } catch {
875
- // 忽略解析失败的行
876
- }
877
- }
878
- }
879
-
880
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
881
- await abortCliStream();
882
- return;
883
- }
884
-
885
- if (cliCapabilityWarnings.length > 0) {
886
- accumulated = appendCliCapabilityWarnings(accumulated, cliCapabilityWarnings);
887
- dispatch(messageStreaming({
888
- id: messageId,
889
- dialogId,
890
- dbKey: msgKey,
891
- content: accumulated,
892
- role: "assistant",
893
- ...cliMessageMetadata,
894
- }));
895
- }
896
-
897
- // 持久化最终消息:用已有 ID,避免 prepareAndPersistMessage 重新生成 ID 导致重复
898
- await persistMessageWithFixedId(dispatch, buildCliAssistantMessage());
899
- } finally {
900
- try {
901
- await reader.cancel();
902
- } catch {
903
- // ignore
904
- }
905
- }
906
-
907
- return;
908
- }
909
- // ─────────────────────────────────────────────────────────────────────
910
-
911
- const currentDialog =
912
- selectDialogConfigByKey(state, explicitDialogKey) ??
913
- selectCurrentDialogConfig(state);
914
- const activeDialogKey = currentDialog?.dbKey;
915
- const dialogKey = explicitDialogKey || activeDialogKey;
916
-
917
- if (!dialogKey) {
918
- return rejectWithValue("当前对话不存在,无法发送消息。");
919
- }
920
- runtimeDialogKey = dialogKey;
921
- const dialogId = extractCustomId(dialogKey);
922
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-dialog-resolved", {
923
- dialogKey,
924
- dialogId,
925
- });
926
-
927
- if (isDesktopBuiltinNoloAgent(agentKey, agentConfig)) {
928
- const { key: msgKey, messageId } = createDialogMessageKeyAndId(dialogId);
929
- const desktopMessageMetadata = buildParallelMessageMetadata(
930
- agentConfig,
931
- runtimeOptions,
932
- );
933
- remoteTransientMessageId = messageId;
934
- loopKey = `loop:${dialogId}`;
935
- dispatch(addActiveController({ messageId: loopKey, controller: loopController, dialogKey }));
936
- dispatch(messageStreaming({
937
- id: messageId,
938
- dialogId,
939
- dbKey: msgKey,
940
- content: "",
941
- role: "assistant",
942
- ...desktopMessageMetadata,
943
- }));
944
-
945
- const localResult = await runDesktopAgentRuntimeTurn({
946
- agentRef: agentConfig.dbKey || agentKey,
947
- input: userInput,
948
- continueDialogId: dialogId,
949
- });
950
- if (!localResult.ok) {
951
- dispatch(removeTransientMessage(messageId));
952
- remoteTransientMessageFinalized = true;
953
- return rejectWithValue(localResult.error);
954
- }
955
-
956
- dispatch(messageStreaming({
957
- id: messageId,
958
- dialogId,
959
- dbKey: msgKey,
960
- content: localResult.result.content || "",
961
- role: "assistant",
962
- ...desktopMessageMetadata,
963
- }));
964
- remoteTransientMessageFinalized = true;
965
- return {
966
- usage: localResult.result.usage ?? undefined,
967
- };
968
- }
969
-
970
- const userInputText = extractAgentRunUserText(userInput);
971
-
972
- const explicitServerBase =
973
- typeof args.serverBase === "string" && args.serverBase.trim()
974
- ? args.serverBase.trim()
975
- : null;
976
- const currentServer = selectCurrentServer(state);
977
- const declaredRuntimeServerBase = extractAgentRuntimeServerBase(agentConfig);
978
- const requestedServerBase =
979
- explicitServerBase ??
980
- declaredRuntimeServerBase ??
981
- null;
982
- const normalizedRequestedServerBase =
983
- requestedServerBase && normalizeServerOrigin(requestedServerBase);
984
- const normalizedCurrentServer = normalizeServerOrigin(
985
- currentServer,
986
- );
987
- const canAutoRouteRemotely =
988
- !Array.isArray(userInput) &&
989
- !runtimeOptions?.extraTools?.length &&
990
- !runtimeOptions?.editingTarget &&
991
- !runtimeOptions?.imageConfigOverride;
992
- if (requestedServerBase && canAutoRouteRemotely) {
993
- if (
994
- normalizedRequestedServerBase &&
995
- normalizedCurrentServer &&
996
- normalizedRequestedServerBase === normalizedCurrentServer
997
- ) {
998
- // Same server as the current workspace; keep the UI-managed
999
- // chat/tool loop and let /api/chat hydrate redacted provider
1000
- // credentials server-side when needed.
1001
- } else {
1002
- const token = selectCurrentToken(state);
1003
- const authHeader = token ? `Bearer ${token}` : "";
1004
- const rawMessages = filterMessagesForParallelBranch(
1005
- selectAllMsgs(state, dialogId),
1006
- runtimeOptions,
1007
- );
1008
- const visibleMessages = buildAgentViewMessages(
1009
- rawMessages as any,
1010
- agentConfig.dbKey,
1011
- );
1012
- const cleanedMessages = filterAndCleanMessages(visibleMessages);
1013
- const { key: msgKey, messageId } = createDialogMessageKeyAndId(dialogId);
1014
- remoteTransientMessageId = messageId;
1015
- const remoteMessageMetadata = buildParallelMessageMetadata(
1016
- agentConfig,
1017
- runtimeOptions,
1018
- );
1019
- let accumulated = "";
1020
- let totalTurnUsage: any = undefined;
1021
- const buildRemoteAssistantMessage = () => ({
1022
- id: messageId,
1023
- dbKey: msgKey,
1024
- role: "assistant" as const,
1025
- content: accumulated,
1026
- ...remoteMessageMetadata,
1027
- userId: selectUserId(getState() as RootState),
1028
- });
1029
-
1030
- loopKey = `loop:${dialogId}`;
1031
- dispatch(addActiveController({ messageId: loopKey, controller: loopController, dialogKey }));
1032
- dispatch(messageStreaming({
1033
- id: messageId,
1034
- dialogId,
1035
- dbKey: msgKey,
1036
- content: "",
1037
- role: "assistant",
1038
- ...remoteMessageMetadata,
1039
- }));
1040
-
1041
- const rejectRemoteStream = async (message: string) => {
1042
- if (accumulated.length > 0) {
1043
- await persistMessageWithFixedId(dispatch, buildRemoteAssistantMessage());
1044
- } else {
1045
- dispatch(removeTransientMessage(messageId));
1046
- }
1047
- remoteTransientMessageFinalized = true;
1048
- return rejectWithValue(message);
1049
- };
1050
-
1051
- const remoteResponse = await fetch(`${requestedServerBase.replace(/\/+$/, "")}/api/agent/run`, {
1052
- method: "POST",
1053
- headers: {
1054
- "Content-Type": "application/json",
1055
- Accept: "text/event-stream",
1056
- ...(authHeader ? { Authorization: authHeader } : {}),
1057
- },
1058
- body: JSON.stringify({
1059
- agentKey,
1060
- userInput: agentRunUserInput,
1061
- messages: cleanedMessages,
1062
- stream: true,
1063
- persistDialog: false,
1064
- clientDialogId: dialogId,
1065
- runtimeContext: {
1066
- surface: "web",
1067
- host: "browser",
1068
- runtime: "react",
1069
- entrypoint: "chat-dialog",
1070
- capabilities: ["streaming", "dialog-ui", "tool-cards"],
1071
- },
1072
- ...(currentDialog?.spaceId ? { spaceId: currentDialog.spaceId } : {}),
1073
- }),
1074
- signal: loopController.signal,
1075
- });
1076
-
1077
- if (!remoteResponse.ok) {
1078
- const errorText = await remoteResponse.text();
1079
- return await rejectRemoteStream(
1080
- errorText || `Remote agent run failed (${remoteResponse.status})`,
1081
- );
1082
- }
1083
-
1084
- const reader = remoteResponse.body?.getReader();
1085
- if (!reader) {
1086
- return await rejectRemoteStream("无法读取远端流式响应");
1087
- }
1088
-
1089
- const decoder = new TextDecoder();
1090
- const parseSSE = createSSEParser();
1091
- const abortRemoteStream = async () => {
1092
- if (accumulated.length <= 0) return;
1093
- await persistMessageWithFixedId(dispatch, buildRemoteAssistantMessage());
1094
- };
1095
-
1096
- try {
1097
- while (true) {
1098
- const { done, value } = await reader.read();
1099
- if (done) break;
1100
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
1101
- await abortRemoteStream();
1102
- return;
1103
- }
1104
-
1105
- const payloads = parseSSE(
1106
- decoder.decode(value, { stream: true }),
1107
- );
1108
- for (const payload of payloads) {
1109
- if (payload.type === "error") {
1110
- return await rejectRemoteStream(
1111
- payload.message || "远端 Agent 执行失败",
1112
- );
1113
- }
1114
- if (payload.type === "text" && typeof payload.content === "string") {
1115
- accumulated += payload.content;
1116
- dispatch(messageStreaming({
1117
- id: messageId,
1118
- dialogId,
1119
- dbKey: msgKey,
1120
- content: accumulated,
1121
- role: "assistant",
1122
- ...remoteMessageMetadata,
1123
- }));
1124
- }
1125
- if (payload.type === "done") {
1126
- totalTurnUsage = payload.usage;
1127
- }
1128
- }
1129
- }
1130
- } finally {
1131
- try {
1132
- await reader.cancel();
1133
- } catch {
1134
- // ignore
1135
- }
1136
- }
1137
-
1138
- await persistMessageWithFixedId(dispatch, buildRemoteAssistantMessage());
1139
- remoteTransientMessageFinalized = true;
1140
- return {
1141
- usage: totalTurnUsage ?? undefined,
1142
- };
1143
- }
1144
- }
1145
-
1146
- // Extract Mentions from userInput if it's potentially Slate content
1147
- let extractedMentions: CategorizedMentions | undefined;
1148
- if (Array.isArray(userInput)) {
1149
- // Basic check if it looks like Slate nodes (has children) or just assume safe to traverse
1150
- // extractCategorizedMentions handles traversal safely.
1151
- extractedMentions = extractCategorizedMentions(userInput as any);
1152
- }
1153
-
1154
- const mentionedTools = extractedMentions?.tools ?? [];
1155
-
1156
- // 2. 解析引用:包含 tools 的页面自动升级为 instruction
1157
- const {
1158
- references: normalizedReferences,
1159
- contentByKey: referenceContentCache,
1160
- referencedTools: referenceTools,
1161
- recommendedSkillTools: referenceRecommendedSkillTools,
1162
- recommendedSkillHints: referenceRecommendedSkillHints,
1163
- skillPromptPatches: referenceSkillPromptPatches,
1164
- } = await resolveReferenceAssets(agentConfig.references, dispatch);
1165
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-references-resolved", {
1166
- referenceCount: normalizedReferences?.length ?? 0,
1167
- referencedToolCount: referenceTools?.length ?? 0,
1168
- });
1169
-
1170
- const agentConfigWithReferences = {
1171
- ...agentConfig,
1172
- references: normalizedReferences,
1173
- referencedTools: referenceTools,
1174
- recommendedSkillTools: referenceRecommendedSkillTools,
1175
- recommendedSkillHints: referenceRecommendedSkillHints,
1176
- skillPromptPatches: referenceSkillPromptPatches,
1177
- };
1178
-
1179
- // --- [新增] 提取本次 Handler 启动前的稳定历史消息 ID 集合 ---
1180
- const initialRawMsgs = selectAllMsgs(state, dialogId);
1181
- const initialHistoryIds = new Set(initialRawMsgs.map((m: any) => m.id));
1182
-
1183
- const keySets = await getFullChatContextKeys(
1184
- state,
1185
- dispatch,
1186
- agentConfigWithReferences,
1187
- userInput,
1188
- currentDialog ?? undefined,
1189
- );
1190
- const finalKeys = deduplicateContextKeys(keySets);
1191
- const allContextKeys = new Set<string>([
1192
- ...finalKeys.botInstructionsContext,
1193
- ...finalKeys.currentInputContext,
1194
- ...finalKeys.historyContext,
1195
- ...finalKeys.botKnowledgeContext,
1196
- ]);
1197
-
1198
- // 4. 上下文页面里提取 tools 并缓存内容
1199
- const {
1200
- tools: contextTools,
1201
- contentByKey: contextContentCache,
1202
- recommendedSkillTools: contextRecommendedSkillTools = [],
1203
- recommendedSkillHints: contextRecommendedSkillHints = [],
1204
- skillPromptPatches: contextSkillPromptPatches = [],
1205
- } = await resolveToolsFromKeys(
1206
- Array.from(allContextKeys),
1207
- dispatch,
1208
- referenceContentCache,
1209
- );
1210
-
1211
- const mergedContentCache = new Map<string, any>([
1212
- ...referenceContentCache,
1213
- ...contextContentCache,
1214
- ]);
1215
-
1216
- // 4. 合并工具 (Base + Default + Context + Mentioned + Runtime) + 图片配置
1217
- const agentConfigWithTools = mergeAgentToolsWithRuntime(
1218
- {
1219
- ...agentConfigWithReferences,
1220
- recommendedSkillTools: [
1221
- ...(((agentConfigWithReferences as any).recommendedSkillTools ?? []) as string[]),
1222
- ...contextRecommendedSkillTools,
1223
- ],
1224
- recommendedSkillHints: [
1225
- ...(((agentConfigWithReferences as any).recommendedSkillHints ?? []) as string[]),
1226
- ...contextRecommendedSkillHints,
1227
- ],
1228
- skillPromptPatches: [
1229
- ...(((agentConfigWithReferences as any).skillPromptPatches ?? []) as string[]),
1230
- ...contextSkillPromptPatches,
1231
- ],
1232
- },
1233
- contextTools,
1234
- mentionedTools,
1235
- runtimeOptions,
1236
- state,
1237
- );
1238
- const agentConfigForCall = applyImageConfigRuntimeOverride(
1239
- agentConfigWithTools,
1240
- runtimeOptions,
1241
- );
1242
-
1243
- // 如果对话设置了 maxTokens,覆盖 agent 的 max_tokens
1244
- const dialogMaxTokens = currentDialog?.maxTokens;
1245
- const effectiveAgentConfig = dialogMaxTokens
1246
- ? { ...agentConfigForCall, max_tokens: dialogMaxTokens }
1247
- : agentConfigForCall;
1248
-
1249
- const isRespModel = isResponseAPIModel(agentConfigForCall);
1250
-
1251
- // 🔹 Response-style 模型:与 completions 一样走完整 Agent Loop
1252
- if (isRespModel) {
1253
- const maxExecutionTime = selectMaxExecutionTime(state);
1254
- const MAX_TIME_MS = maxExecutionTime > 0 ? maxExecutionTime : 240_000;
1255
- const startTime = Date.now();
1256
-
1257
- const staticContexts = await buildStaticContexts(
1258
- state,
1259
- dispatch,
1260
- agentConfigForCall,
1261
- currentDialog ?? undefined,
1262
- mergedContentCache,
1263
- );
1264
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-static-context-ready", {
1265
- model: agentConfigForCall.model,
1266
- responseApi: true,
1267
- });
1268
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-post-static-entered", {
1269
- responseApi: true,
1270
- });
1271
-
1272
- let appendTempUserInput = true;
1273
- let currentParentMessageId = parentMessageId ?? undefined;
1274
-
1275
- const w = typeof globalThis !== "undefined" && (globalThis as any).window ? (globalThis as any).window : null;
1276
- if (w) w.__LOOP_STOP_REASON__ = null;
1277
-
1278
- loopKey = `loop:${dialogId}`;
1279
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-active-controller-adding", {
1280
- responseApi: true,
1281
- });
1282
- dispatch(addActiveController({ messageId: loopKey, controller: loopController, dialogKey }));
1283
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-active-controller-added", {
1284
- responseApi: true,
1285
- });
1286
-
1287
- for (;;) {
1288
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-loop-entered", {
1289
- responseApi: true,
1290
- });
1291
- const requestParentMessageId = currentParentMessageId;
1292
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
1293
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-loop-aborted-before-context", {
1294
- loopControllerAborted: loopController.signal.aborted,
1295
- thunkSignalAborted: thunkApi.signal.aborted,
1296
- responseApi: true,
1297
- });
1298
- if (w) w.__LOOP_STOP_REASON__ = "aborted";
1299
- break;
1300
- }
1301
-
1302
- const loopState = getState() as RootState;
1303
- const now = Date.now();
1304
- if (now - startTime > MAX_TIME_MS) {
1305
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-loop-timeout-before-context", {
1306
- maxTimeMs: MAX_TIME_MS,
1307
- elapsedMs: now - startTime,
1308
- responseApi: true,
1309
- });
1310
- if (w) w.__LOOP_STOP_REASON__ = "timeout";
1311
- break;
1312
- }
1313
-
1314
- const accessError = validateAccessAndBalance(
1315
- agentConfigForCall,
1316
- loopState,
1317
- );
1318
- if (accessError) {
1319
- const accessErrorReason = classifyQuickChatAccessError(accessError);
1320
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-access-error-before-context", {
1321
- hasAccessError: true,
1322
- reason: accessErrorReason,
1323
- responseApi: true,
1324
- });
1325
- if (quickChatPerfStartedAt && runtimeDialogKey && !modelRequestStarted) {
1326
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-access-error-finalized", {
1327
- reason: accessErrorReason,
1328
- responseApi: true,
1329
- });
1330
- await finalizeQuickChatAgentTurnFailure(
1331
- dispatch,
1332
- runtimeDialogKey,
1333
- agentKey,
1334
- new Error(accessError),
1335
- );
1336
- }
1337
- return rejectWithValue(accessError);
1338
- }
1339
-
1340
- const willSkipDynamicContext = canUseQuickChatEmptyDynamicContexts(
1341
- quickChatPerfStartedAt,
1342
- userInput,
1343
- runtimeOptions,
1344
- currentDialog,
1345
- );
1346
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-dynamic-context-decision", {
1347
- hasRuntimeOptions: !!runtimeOptions,
1348
- isSimpleTextInput: isSimpleTextInput(userInput),
1349
- referenceKeyCount: currentDialog?.referenceKeys?.length ?? 0,
1350
- willSkipDynamicContext,
1351
- responseApi: true,
1352
- });
1353
-
1354
- const dynamicContexts = willSkipDynamicContext
1355
- ? (logQuickChatPerfStage(
1356
- quickChatPerfStartedAt,
1357
- "stream-agent-dynamic-context-skipped",
1358
- {
1359
- reason: "simple-quick-chat-first-turn",
1360
- responseApi: true,
1361
- },
1362
- ), EMPTY_DYNAMIC_CONTEXTS)
1363
- : await buildDynamicContextsForTurn(
1364
- loopState,
1365
- dispatch,
1366
- agentConfigForCall,
1367
- userInput,
1368
- runtimeOptions,
1369
- mergedContentCache,
1370
- dialogKey,
1371
- quickChatPerfStartedAt,
1372
- );
1373
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-dynamic-context-ready", {
1374
- responseApi: true,
1375
- });
1376
- const contexts = mergeContexts(staticContexts, dynamicContexts);
1377
-
1378
- const rawMessages = filterMessagesForParallelBranch(
1379
- selectAllMsgs(loopState, dialogId),
1380
- runtimeOptions,
1381
- );
1382
- let visibleMessages = buildAgentViewMessages(
1383
- rawMessages as any,
1384
- agentConfigForCall.dbKey,
1385
- );
1386
-
1387
- if (appendTempUserInput && hasAgentRunUserInputContent(agentRunUserInput)) {
1388
- visibleMessages = [
1389
- ...visibleMessages,
1390
- {
1391
- id: `__tmp_user_${Date.now()}`,
1392
- dbKey: "",
1393
- role: "user",
1394
- content: agentRunUserInput,
1395
- thinkContent: "",
1396
- cybotKey: agentConfigForCall.dbKey,
1397
- isStreaming: false,
1398
- } as any,
1399
- ];
1400
- }
1401
-
1402
- const cleanedMessages = filterAndCleanMessages(visibleMessages);
1403
- const ctxWindow =
1404
- getModelContextWindow(agentConfigForCall.model) || 128000;
1405
- const retention = selectContextRetention(loopState);
1406
- const summaryTokenCount = contexts.dialogSummary
1407
- ? estimateTokenCount(contexts.dialogSummary)
1408
- : 0;
1409
- const processedMessages = trimMessagesWithSummary(
1410
- compressOldToolResults(cleanedMessages),
1411
- ctxWindow,
1412
- summaryTokenCount,
1413
- retention,
1414
- );
1415
-
1416
- let firstDynamicIdx = processedMessages.findIndex(
1417
- (m) => m.id && !initialHistoryIds.has(m.id),
1418
- );
1419
- if (firstDynamicIdx === -1) firstDynamicIdx = processedMessages.length;
1420
-
1421
- const stableMessages = processedMessages.slice(0, firstDynamicIdx);
1422
- const dynamicMessages = processedMessages.slice(firstDynamicIdx);
1423
-
1424
- if (appendTempUserInput) {
1425
- const agentHasVision = resolveAgentImageInputSupport(
1426
- agentConfigForCall as any,
1427
- );
1428
-
1429
- if (!agentHasVision && hasImageInMessages(processedMessages)) {
1430
- return rejectWithValue(
1431
- "当前 Agent 不支持图片输入,请改用文本或文档。",
1432
- );
1433
- }
1434
- }
1435
-
1436
- const bodyData = generateRequestBody({
1437
- agentConfig: effectiveAgentConfig,
1438
- messages: dynamicMessages,
1439
- stableMessages,
1440
- userInput: userInputText,
1441
- contexts,
1442
- });
1443
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-model-request-starting", {
1444
- responseApi: true,
1445
- dynamicMessageCount: dynamicMessages.length,
1446
- stableMessageCount: stableMessages.length,
1447
- });
1448
- modelRequestStarted = true;
1449
-
1450
- const meta: CompletionMeta = await sendOpenAIResponseRequest({
1451
- bodyData,
1452
- agentConfig: agentConfigForCall,
1453
- thunkApi,
1454
- dialogKey,
1455
- parentMessageId: currentParentMessageId,
1456
- messageMetadata: buildParallelMessageMetadata(
1457
- agentConfigForCall,
1458
- runtimeOptions,
1459
- ),
1460
- quickChatPerfStartedAt,
1461
- });
1462
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-model-request-finished", {
1463
- responseApi: true,
1464
- hasToolCalls: meta.hasToolCalls,
1465
- hasHandedOff: meta.hasHandedOff,
1466
- hasPendingInteraction: meta.hasPendingInteraction,
1467
- });
1468
-
1469
- appendTempUserInput = false;
1470
- currentParentMessageId = undefined;
1471
- totalTurnUsage = updateTotalUsage(totalTurnUsage, meta.usage);
1472
-
1473
- if (meta.hasHandedOff) {
1474
- if (!requestParentMessageId && meta.messageId) {
1475
- dispatch(removeTransientMessage(meta.messageId));
1476
- }
1477
- if (w) w.__LOOP_STOP_REASON__ = "handoff";
1478
- break;
1479
- }
1480
-
1481
- if (meta.hasPendingInteraction) {
1482
- if (w) w.__LOOP_STOP_REASON__ = "pending";
1483
- break;
1484
- }
1485
-
1486
- const afterTurnState = getState() as RootState;
1487
- const queuedMessages = selectPendingUserInputQueue(afterTurnState, dialogKey);
1488
- if (queuedMessages.length > 0) {
1489
- const queuedText = queuedMessages[0];
1490
-
1491
- const currentDialogConfig =
1492
- selectDialogConfigByKey(afterTurnState, dialogKey) ??
1493
- selectCurrentDialogConfig(afterTurnState);
1494
- if (!currentDialogConfig) {
1495
- dispatch(clearPendingUserInputQueue({ dialogKey }));
1496
- break;
1497
- }
1498
- await dispatch(
1499
- prepareAndPersistUserMessage({
1500
- userInput: queuedText,
1501
- dialogConfig: currentDialogConfig,
1502
- })
1503
- ).unwrap();
1504
- dispatch(dequeueUserInput({ dialogKey }));
1505
- continue;
1506
- }
1507
-
1508
- if (!meta.hasToolCalls) {
1509
- if (w) w.__LOOP_STOP_REASON__ = "done";
1510
- break;
1511
- }
1512
- }
1513
-
1514
- return {
1515
- usage: totalTurnUsage ?? undefined,
1516
- };
1517
- }
1518
-
1519
- // 🔹 Completions-style 模型:Agent Loop
1520
- const maxExecutionTime = selectMaxExecutionTime(state);
1521
-
1522
- const MAX_TIME_MS = maxExecutionTime > 0 ? maxExecutionTime : 240_000;
1523
- const startTime = Date.now();
1524
-
1525
- // 🚀 优化:在 Loop 外构建静态上下文(只执行一次)
1526
- // 静态上下文包含:botInstructions、botKnowledge、spaceContext、userGlobalPrompt
1527
- // 这些内容在 Loop 期间是稳定的,不需要每轮重新构建
1528
- const staticContexts = await buildStaticContexts(
1529
- state,
1530
- dispatch,
1531
- agentConfigForCall,
1532
- currentDialog ?? undefined,
1533
- mergedContentCache,
1534
- );
1535
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-static-context-ready", {
1536
- model: agentConfigForCall.model,
1537
- responseApi: false,
1538
- });
1539
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-post-static-entered", {
1540
- responseApi: false,
1541
- });
1542
-
1543
- let appendTempUserInput = true;
1544
- let currentParentMessageId = parentMessageId ?? undefined;
1545
-
1546
- const w = typeof globalThis !== "undefined" && (globalThis as any).window ? (globalThis as any).window : null;
1547
- if (w) w.__LOOP_STOP_REASON__ = null;
1548
-
1549
- if (!isRespModel) {
1550
- loopKey = `loop:${dialogId}`;
1551
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-active-controller-adding", {
1552
- responseApi: false,
1553
- });
1554
- dispatch(addActiveController({ messageId: loopKey, controller: loopController, dialogKey }));
1555
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-active-controller-added", {
1556
- responseApi: false,
1557
- });
1558
- }
1559
-
1560
- for (;;) {
1561
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-loop-entered", {
1562
- responseApi: false,
1563
- });
1564
- const requestParentMessageId = currentParentMessageId;
1565
- // 每轮开始前检查是否已中止
1566
- if (loopController.signal.aborted || thunkApi.signal.aborted) {
1567
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-loop-aborted-before-context", {
1568
- loopControllerAborted: loopController.signal.aborted,
1569
- thunkSignalAborted: thunkApi.signal.aborted,
1570
- responseApi: false,
1571
- });
1572
- if (w) w.__LOOP_STOP_REASON__ = "aborted";
1573
- break;
1574
- }
1575
-
1576
- const loopState = getState() as RootState;
1577
- const now = Date.now();
1578
- if (now - startTime > MAX_TIME_MS) {
1579
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-loop-timeout-before-context", {
1580
- maxTimeMs: MAX_TIME_MS,
1581
- elapsedMs: now - startTime,
1582
- responseApi: false,
1583
- });
1584
- if (w) w.__LOOP_STOP_REASON__ = "timeout";
1585
- break;
1586
- }
1587
-
1588
- // 每轮检查权限 & 余额
1589
- const accessError = validateAccessAndBalance(
1590
- agentConfigForCall,
1591
- loopState,
1592
- );
1593
- if (accessError) {
1594
- const accessErrorReason = classifyQuickChatAccessError(accessError);
1595
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-access-error-before-context", {
1596
- hasAccessError: true,
1597
- reason: accessErrorReason,
1598
- responseApi: false,
1599
- });
1600
- if (quickChatPerfStartedAt && runtimeDialogKey && !modelRequestStarted) {
1601
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-access-error-finalized", {
1602
- reason: accessErrorReason,
1603
- responseApi: false,
1604
- });
1605
- await finalizeQuickChatAgentTurnFailure(
1606
- dispatch,
1607
- runtimeDialogKey,
1608
- agentKey,
1609
- new Error(accessError),
1610
- );
1611
- }
1612
- return rejectWithValue(accessError);
1613
- }
1614
-
1615
- const willSkipDynamicContext = canUseQuickChatEmptyDynamicContexts(
1616
- quickChatPerfStartedAt,
1617
- userInput,
1618
- runtimeOptions,
1619
- currentDialog,
1620
- );
1621
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-dynamic-context-decision", {
1622
- hasRuntimeOptions: !!runtimeOptions,
1623
- isSimpleTextInput: isSimpleTextInput(userInput),
1624
- referenceKeyCount: currentDialog?.referenceKeys?.length ?? 0,
1625
- willSkipDynamicContext,
1626
- responseApi: false,
1627
- });
1628
-
1629
- // 🚀 优化:每轮只构建动态上下文(currentInput、history、editingContext、dialogSummary)
1630
- const dynamicContexts = willSkipDynamicContext
1631
- ? (logQuickChatPerfStage(
1632
- quickChatPerfStartedAt,
1633
- "stream-agent-dynamic-context-skipped",
1634
- {
1635
- reason: "simple-quick-chat-first-turn",
1636
- responseApi: false,
1637
- },
1638
- ), EMPTY_DYNAMIC_CONTEXTS)
1639
- : await buildDynamicContextsForTurn(
1640
- loopState,
1641
- dispatch,
1642
- agentConfigForCall,
1643
- userInput,
1644
- runtimeOptions,
1645
- mergedContentCache,
1646
- dialogKey,
1647
- quickChatPerfStartedAt,
1648
- );
1649
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-dynamic-context-ready", {
1650
- responseApi: false,
1651
- });
1652
-
1653
- // 合并静态和动态上下文
1654
- const contexts = mergeContexts(staticContexts, dynamicContexts);
1655
-
1656
- const rawMessages = filterMessagesForParallelBranch(
1657
- selectAllMsgs(loopState, dialogId),
1658
- runtimeOptions,
1659
- );
1660
- let visibleMessages = buildAgentViewMessages(
1661
- rawMessages as any,
1662
- agentConfigForCall.dbKey,
1663
- );
1664
-
1665
- if (appendTempUserInput && hasAgentRunUserInputContent(agentRunUserInput)) {
1666
- visibleMessages = [
1667
- ...visibleMessages,
1668
- {
1669
- id: `__tmp_user_${Date.now()}`,
1670
- dbKey: "",
1671
- role: "user",
1672
- content: agentRunUserInput,
1673
- thinkContent: "",
1674
- cybotKey: agentConfigForCall.dbKey,
1675
- isStreaming: false,
1676
- } as any,
1677
- ];
1678
- }
1679
-
1680
- const cleanedMessages = filterAndCleanMessages(visibleMessages);
1681
- const ctxWindow =
1682
- getModelContextWindow(agentConfigForCall.model) || 128000;
1683
- const retention = selectContextRetention(loopState);
1684
- const summaryTokenCount = contexts.dialogSummary
1685
- ? estimateTokenCount(contexts.dialogSummary)
1686
- : 0;
1687
- const processedMessages = trimMessagesWithSummary(
1688
- compressOldToolResults(cleanedMessages),
1689
- ctxWindow,
1690
- summaryTokenCount,
1691
- retention,
1692
- );
1693
-
1694
- // --- [优化 P1] 使用 findIndex + slice 确保顺序和无 ID 稳定消息的保留 ---
1695
- let firstDynamicIdx = processedMessages.findIndex(
1696
- (m) => m.id && !initialHistoryIds.has(m.id),
1697
- );
1698
- if (firstDynamicIdx === -1) firstDynamicIdx = processedMessages.length;
1699
-
1700
- const stableMessages = processedMessages.slice(0, firstDynamicIdx);
1701
- const dynamicMessages = processedMessages.slice(firstDynamicIdx);
1702
-
1703
- if (appendTempUserInput) {
1704
- const agentHasVision = resolveAgentImageInputSupport(
1705
- agentConfigForCall as any,
1706
- );
1707
-
1708
- if (!agentHasVision && hasImageInMessages(processedMessages)) {
1709
- return rejectWithValue(
1710
- "当前 Agent 不支持图片输入,请改用文本或文档。",
1711
- );
1712
- }
1713
- }
1714
-
1715
- const bodyData = generateRequestBody({
1716
- agentConfig: effectiveAgentConfig,
1717
- messages: dynamicMessages,
1718
- stableMessages,
1719
- userInput: userInputText,
1720
- contexts,
1721
- });
1722
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-model-request-starting", {
1723
- responseApi: false,
1724
- dynamicMessageCount: dynamicMessages.length,
1725
- stableMessageCount: stableMessages.length,
1726
- });
1727
- modelRequestStarted = true;
1728
-
1729
- const disableToolsForThisRequest =
1730
- shouldDisableQuickChatToolsForDirectAnswer(
1731
- quickChatPerfStartedAt,
1732
- userInput,
1733
- runtimeOptions,
1734
- currentDialog,
1735
- );
1736
- if (disableToolsForThisRequest) {
1737
- logQuickChatPerfStage(
1738
- quickChatPerfStartedAt,
1739
- "stream-agent-tools-disabled-for-direct-answer",
1740
- {
1741
- responseApi: false,
1742
- toolCount: Array.isArray(agentConfigForCall.tools)
1743
- ? agentConfigForCall.tools.length
1744
- : 0,
1745
- },
1746
- );
1747
- }
1748
-
1749
- const meta: CompletionMeta = await sendOpenAICompletionsRequest({
1750
- bodyData,
1751
- agentConfig: agentConfigForCall,
1752
- thunkApi,
1753
- dialogKey,
1754
- parentMessageId: currentParentMessageId,
1755
- messageMetadata: buildParallelMessageMetadata(
1756
- agentConfigForCall,
1757
- runtimeOptions,
1758
- ),
1759
- disableToolsForThisRequest,
1760
- quickChatPerfStartedAt,
1761
- });
1762
- logQuickChatPerfStage(quickChatPerfStartedAt, "stream-agent-model-request-finished", {
1763
- responseApi: false,
1764
- hasToolCalls: meta.hasToolCalls,
1765
- hasHandedOff: meta.hasHandedOff,
1766
- hasPendingInteraction: meta.hasPendingInteraction,
1767
- });
1768
-
1769
- appendTempUserInput = false;
1770
- currentParentMessageId = undefined;
1771
- totalTurnUsage = updateTotalUsage(totalTurnUsage, meta.usage);
1772
-
1773
- // handoff(例如 runStreamingAgent):当前 Agent 停止,后续由子 Agent 自动续跑
1774
- if (meta.hasHandedOff) {
1775
- if (!requestParentMessageId && meta.messageId) {
1776
- dispatch(removeTransientMessage(meta.messageId));
1777
- }
1778
- if (w) w.__LOOP_STOP_REASON__ = "handoff";
1779
- break;
1780
- }
1781
-
1782
- if (meta.hasPendingInteraction) {
1783
- if (w) w.__LOOP_STOP_REASON__ = "pending";
1784
- break;
1785
- }
1786
-
1787
- // 检查是否有用户在 loop 期间发送的排队消息
1788
- const afterTurnState = getState() as RootState;
1789
- const queuedMessages = selectPendingUserInputQueue(afterTurnState, dialogKey);
1790
- if (queuedMessages.length > 0) {
1791
- const queuedText = queuedMessages[0];
1792
-
1793
- const currentDialogConfig =
1794
- selectDialogConfigByKey(afterTurnState, dialogKey) ??
1795
- selectCurrentDialogConfig(afterTurnState);
1796
- if (!currentDialogConfig) {
1797
- // 对话已切换/销毁,无法持久化;清空队列并终止 loop,避免死循环重试
1798
- dispatch(clearPendingUserInputQueue({ dialogKey }));
1799
- break;
1800
- }
1801
- await dispatch(
1802
- prepareAndPersistUserMessage({
1803
- userInput: queuedText,
1804
- dialogConfig: currentDialogConfig,
1805
- })
1806
- ).unwrap();
1807
- // 持久化成功后再出队,避免 persist 失败时丢消息
1808
- dispatch(dequeueUserInput({ dialogKey }));
1809
- // 用户消息已持久化到 DB,下一轮 selectAllMsgs 会自动包含它
1810
- // 不设置 appendTempUserInput,直接继续下一轮
1811
- continue;
1812
- }
1813
-
1814
- if (!meta.hasToolCalls) {
1815
- if (w) w.__LOOP_STOP_REASON__ = "done";
1816
- break;
1817
- }
1818
-
1819
- // 否则:存在 tool_calls 且没有 handoff / pending,基于新的 history 继续下一轮
1820
- }
1821
-
1822
- return {
1823
- usage: totalTurnUsage ?? undefined,
1824
- };
1825
- } catch (error: any) {
1826
- if (isAbortError(error)) {
1827
- if (remoteTransientMessageId && !remoteTransientMessageFinalized) {
1828
- dispatch(removeTransientMessage(remoteTransientMessageId));
1829
- remoteTransientMessageFinalized = true;
1830
- }
1831
- const w =
1832
- typeof globalThis !== "undefined" && (globalThis as any).window
1833
- ? (globalThis as any).window
1834
- : null;
1835
- if (w) w.__LOOP_STOP_REASON__ = "aborted";
1836
- return;
1837
- }
1838
- console.error(
1839
- `Error in streamAgentChatTurn for [${agentKey}]:`,
1840
- error,
1841
- );
1842
- if (remoteTransientMessageId && !remoteTransientMessageFinalized) {
1843
- dispatch(removeTransientMessage(remoteTransientMessageId));
1844
- remoteTransientMessageFinalized = true;
1845
- }
1846
- if (
1847
- quickChatPerfStartedAt &&
1848
- runtimeDialogKey &&
1849
- !modelRequestStarted &&
1850
- !remoteTransientMessageId
1851
- ) {
1852
- await finalizeQuickChatAgentTurnFailure(
1853
- dispatch,
1854
- runtimeDialogKey,
1855
- agentKey,
1856
- error,
1857
- );
1858
- }
1859
-
1860
- return rejectWithValue(
1861
- error?.message ||
1862
- "An unexpected error occurred in streamAgentChatTurn.",
1863
- );
1864
- } finally {
1865
- if (loopKey && runtimeDialogKey) {
1866
- dispatch(removeActiveController({ messageId: loopKey, dialogKey: runtimeDialogKey }));
1867
- } else if (loopKey) {
1868
- dispatch(removeActiveController(loopKey));
1869
- }
1870
- // 清空排队的用户消息(loop 结束或异常时,未消费的消息不应继续保留)
1871
- dispatch(clearPendingUserInputQueue(runtimeDialogKey ? { dialogKey: runtimeDialogKey } : undefined));
1872
- thunkApi.signal.removeEventListener("abort", onAbort);
1873
- }
1874
- };