nolo-cli 0.1.44 → 0.1.46

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 (613) hide show
  1. package/README.md +258 -102
  2. package/index.js +73433 -0
  3. package/package.json +10 -633
  4. package/LICENSE +0 -21
  5. package/agent-runtime/agentConfigOptions.ts +0 -12
  6. package/agent-runtime/agentRecordConfig.ts +0 -101
  7. package/agent-runtime/agentRecordKeys.ts +0 -14
  8. package/agent-runtime/agentThread.ts +0 -222
  9. package/agent-runtime/agentThreadAdmission.ts +0 -74
  10. package/agent-runtime/dialogMessageRecord.ts +0 -16
  11. package/agent-runtime/dialogWritePlan.ts +0 -211
  12. package/agent-runtime/hostAdapter.ts +0 -81
  13. package/agent-runtime/hybridRecordStore.ts +0 -170
  14. package/agent-runtime/index.ts +0 -184
  15. package/agent-runtime/localDialogRead.ts +0 -23
  16. package/agent-runtime/localLoop.ts +0 -334
  17. package/agent-runtime/localToolPolicy.ts +0 -179
  18. package/agent-runtime/localWorkspaceTools.ts +0 -2310
  19. package/agent-runtime/noloWorkspaceTools.ts +0 -390
  20. package/agent-runtime/openAiCompatibleProvider.ts +0 -74
  21. package/agent-runtime/openAiCompatibleProviderConfig.ts +0 -27
  22. package/agent-runtime/platformChatProvider.ts +0 -229
  23. package/agent-runtime/providerResolution.ts +0 -302
  24. package/agent-runtime/runtimeDecision.ts +0 -70
  25. package/agent-runtime/runtimeFacts.ts +0 -40
  26. package/agent-runtime/runtimeToolPolicy.ts +0 -191
  27. package/agent-runtime/runtimeToolSurface.ts +0 -199
  28. package/agent-runtime/shellCommandPolicy.ts +0 -120
  29. package/agent-runtime/types.ts +0 -137
  30. package/agentAliases.ts +0 -110
  31. package/agentCommandSupport.ts +0 -81
  32. package/agentInternalCommandEntries.ts +0 -44
  33. package/agentListCommands.ts +0 -185
  34. package/agentListHelpers.ts +0 -242
  35. package/agentMachineCommands.ts +0 -403
  36. package/agentPullCommand.ts +0 -142
  37. package/agentRecordCommands.ts +0 -226
  38. package/agentRecordHelpers.ts +0 -571
  39. package/agentRunCommand.ts +0 -556
  40. package/agentRuntimeCommands.ts +0 -7
  41. package/agentRuntimeLocal.ts +0 -45
  42. package/ai/agent/_executeModel.ts +0 -146
  43. package/ai/agent/agentSlice.ts +0 -557
  44. package/ai/agent/appWorkingMemory.ts +0 -126
  45. package/ai/agent/buildEditingContext.ts +0 -378
  46. package/ai/agent/buildSystemPrompt.ts +0 -599
  47. package/ai/agent/canvasEditingContext.ts +0 -49
  48. package/ai/agent/cleanAgentMessages.ts +0 -140
  49. package/ai/agent/cliChatClient.ts +0 -153
  50. package/ai/agent/cliExecutor.ts +0 -1465
  51. package/ai/agent/cliPrompt.ts +0 -10
  52. package/ai/agent/contextCompiler.ts +0 -107
  53. package/ai/agent/contextLayerContract.ts +0 -44
  54. package/ai/agent/createAgentSchema.ts +0 -272
  55. package/ai/agent/currentTimeContext.ts +0 -65
  56. package/ai/agent/executeToolCall.ts +0 -58
  57. package/ai/agent/fetchAgentContexts.ts +0 -42
  58. package/ai/agent/generatePrompt.ts +0 -3
  59. package/ai/agent/getFullChatContextKeys.ts +0 -168
  60. package/ai/agent/guidedCreation/capabilities.ts +0 -84
  61. package/ai/agent/guidedCreation/types.ts +0 -38
  62. package/ai/agent/isLiveAudioOnlyAgent.ts +0 -26
  63. package/ai/agent/liveAudioModel.ts +0 -2
  64. package/ai/agent/machineRunPermissions.ts +0 -113
  65. package/ai/agent/pageBuilderHandoffRules.ts +0 -75
  66. package/ai/agent/persistMessageWithFixedId.ts +0 -37
  67. package/ai/agent/planSlice.ts +0 -259
  68. package/ai/agent/referenceUtils.ts +0 -229
  69. package/ai/agent/runAgentBackground.ts +0 -310
  70. package/ai/agent/runAgentClientLoop.ts +0 -164
  71. package/ai/agent/runtimeGuidance.ts +0 -116
  72. package/ai/agent/serverOrigin.ts +0 -7
  73. package/ai/agent/startParallelAgentStreams.ts +0 -424
  74. package/ai/agent/startupProtocol.ts +0 -53
  75. package/ai/agent/streamAgentChatTurn.ts +0 -2135
  76. package/ai/agent/streamAgentChatTurnUtils.ts +0 -923
  77. package/ai/agent/toolFailureGuard.ts +0 -99
  78. package/ai/agent/types.ts +0 -73
  79. package/ai/agent/utils/imageOutput.ts +0 -37
  80. package/ai/agent/utils/publicImageAgentMode.ts +0 -26
  81. package/ai/agent.ts +0 -2
  82. package/ai/ai.locale.ts +0 -1165
  83. package/ai/chat/accumulateToolCallChunks.ts +0 -126
  84. package/ai/chat/fetchUtils.ts +0 -143
  85. package/ai/chat/inlineImageUrlsForCustomProvider.ts +0 -122
  86. package/ai/chat/parseApiError.ts +0 -67
  87. package/ai/chat/parseMultilineSSE.ts +0 -95
  88. package/ai/chat/sendOpenAICompletionsRequest.ts +0 -921
  89. package/ai/chat/sendOpenAIResponseRequest.ts +0 -720
  90. package/ai/chat/serverProxyRetry.ts +0 -102
  91. package/ai/chat/shouldUseServerProxy.ts +0 -18
  92. package/ai/chat/streamRetry.ts +0 -46
  93. package/ai/chat/updateTotalUsage.ts +0 -89
  94. package/ai/context/buildReferenceContext.ts +0 -437
  95. package/ai/context/retention.ts +0 -165
  96. package/ai/context/tokenUtils.ts +0 -78
  97. package/ai/index.ts +0 -1
  98. package/ai/llm/agentCapabilities.ts +0 -74
  99. package/ai/llm/deepinfra.ts +0 -79
  100. package/ai/llm/fireworks.ts +0 -68
  101. package/ai/llm/generateRequestBody.ts +0 -165
  102. package/ai/llm/getModelContextWindow.ts +0 -93
  103. package/ai/llm/getPricing.ts +0 -252
  104. package/ai/llm/imagePricing.ts +0 -66
  105. package/ai/llm/isResponseAPIModel.ts +0 -13
  106. package/ai/llm/kimi.ts +0 -22
  107. package/ai/llm/mimo.ts +0 -99
  108. package/ai/llm/mistral.ts +0 -21
  109. package/ai/llm/models.ts +0 -45
  110. package/ai/llm/openrouterModels.ts +0 -31
  111. package/ai/llm/providers.ts +0 -313
  112. package/ai/llm/reasoningModels.ts +0 -27
  113. package/ai/llm/types.ts +0 -82
  114. package/ai/llm/usageRequestOptions.ts +0 -59
  115. package/ai/memory/policy.ts +0 -49
  116. package/ai/memory/queryShared.ts +0 -167
  117. package/ai/memory/recentRelationshipRecap.ts +0 -251
  118. package/ai/memory/remember.ts +0 -111
  119. package/ai/memory/scope.ts +0 -74
  120. package/ai/memory/store.ts +0 -20
  121. package/ai/memory/storeShared.ts +0 -76
  122. package/ai/memory/types.ts +0 -52
  123. package/ai/memory/understanding.ts +0 -341
  124. package/ai/memory/understandingGreeting.ts +0 -264
  125. package/ai/policy/personalizationDialog.ts +0 -333
  126. package/ai/policy/runtimePolicy.ts +0 -526
  127. package/ai/policy/selfUpdateFields.ts +0 -48
  128. package/ai/policy/types.ts +0 -64
  129. package/ai/skills/referenceRuntime.ts +0 -274
  130. package/ai/skills/skillDiagnostics.ts +0 -251
  131. package/ai/skills/skillDocBuilder.ts +0 -139
  132. package/ai/skills/skillDocProtocol.ts +0 -526
  133. package/ai/skills/skillSummaryMarker.ts +0 -26
  134. package/ai/token/calculatePrice.ts +0 -576
  135. package/ai/token/missingUsageEstimate.ts +0 -42
  136. package/ai/token/normalizeUsage.ts +0 -124
  137. package/ai/token/openaiImageGenerationUsage.ts +0 -56
  138. package/ai/token/prepareTokenUsageData.ts +0 -93
  139. package/ai/token/resolveBillingTarget.ts +0 -52
  140. package/ai/token/saveTokenRecord.ts +0 -53
  141. package/ai/token/types.ts +0 -103
  142. package/ai/tools/agent/agentTools.ts +0 -214
  143. package/ai/tools/agent/agentUpdateShared.ts +0 -311
  144. package/ai/tools/agent/callAgentTool.ts +0 -139
  145. package/ai/tools/agent/createAgentTool.ts +0 -512
  146. package/ai/tools/agent/createDialogTool.ts +0 -69
  147. package/ai/tools/agent/createSkillAgentTool.ts +0 -62
  148. package/ai/tools/agent/parallelBudget.ts +0 -221
  149. package/ai/tools/agent/prepareAgentDraftTool.ts +0 -159
  150. package/ai/tools/agent/presets/appBuilderPreset.ts +0 -154
  151. package/ai/tools/agent/runLlmTool.ts +0 -96
  152. package/ai/tools/agent/runStreamingAgentTool.ts +0 -73
  153. package/ai/tools/agent/skillAgentArgs.ts +0 -106
  154. package/ai/tools/agent/startAgentDialogTool.ts +0 -54
  155. package/ai/tools/agent/streamParallelAgentsTool.ts +0 -123
  156. package/ai/tools/agent/updateAgentTool.ts +0 -96
  157. package/ai/tools/agent/updateSelfTool.ts +0 -113
  158. package/ai/tools/amazonProductScraperTool.ts +0 -86
  159. package/ai/tools/apifyActorClient.ts +0 -45
  160. package/ai/tools/appEditGuard.ts +0 -372
  161. package/ai/tools/appReadSnapshot.ts +0 -153
  162. package/ai/tools/appTools.ts +0 -1549
  163. package/ai/tools/applyEditTool.ts +0 -259
  164. package/ai/tools/applyLineEditsTool.ts +0 -315
  165. package/ai/tools/browserTools/click.ts +0 -33
  166. package/ai/tools/browserTools/closeSession.ts +0 -29
  167. package/ai/tools/browserTools/common.ts +0 -27
  168. package/ai/tools/browserTools/openSession.ts +0 -48
  169. package/ai/tools/browserTools/readContent.ts +0 -38
  170. package/ai/tools/browserTools/selectOption.ts +0 -46
  171. package/ai/tools/browserTools/typeText.ts +0 -42
  172. package/ai/tools/category/createCategoryTool.ts +0 -66
  173. package/ai/tools/category/queryContentsByCategoryTool.ts +0 -69
  174. package/ai/tools/category/updateContentCategoryTool.ts +0 -75
  175. package/ai/tools/cfBrowserTools.ts +0 -319
  176. package/ai/tools/cfSpeechToTextTool.ts +0 -49
  177. package/ai/tools/checkEnvTool.ts +0 -102
  178. package/ai/tools/cloudflareCrawlTool.ts +0 -289
  179. package/ai/tools/codeSearchTool.ts +0 -123
  180. package/ai/tools/codeTools.ts +0 -101
  181. package/ai/tools/convertMarxistsBookTool.ts +0 -103
  182. package/ai/tools/createDocTool.ts +0 -132
  183. package/ai/tools/createSkillDocTool.ts +0 -155
  184. package/ai/tools/createWorkflowTool.ts +0 -154
  185. package/ai/tools/delayTool.ts +0 -31
  186. package/ai/tools/deleteSpacesTool.ts +0 -325
  187. package/ai/tools/deleteSpacesToolModel.ts +0 -159
  188. package/ai/tools/devReloadUtils.ts +0 -29
  189. package/ai/tools/dialogMessageSearch.ts +0 -137
  190. package/ai/tools/doctorSkillTool.ts +0 -72
  191. package/ai/tools/ecommerceScraperTool.ts +0 -86
  192. package/ai/tools/emailTools.ts +0 -549
  193. package/ai/tools/evalSkillTool.ts +0 -92
  194. package/ai/tools/exaSearchTool.ts +0 -63
  195. package/ai/tools/execShellTool.ts +0 -266
  196. package/ai/tools/executeSqlTool.ts +0 -192
  197. package/ai/tools/fetchWebpageSupport.ts +0 -333
  198. package/ai/tools/fetchWebpageTool.ts +0 -97
  199. package/ai/tools/geminiImagePreviewTool.ts +0 -386
  200. package/ai/tools/generateDocxTool.ts +0 -215
  201. package/ai/tools/googleSearchScraperTool.ts +0 -106
  202. package/ai/tools/importDataTool.ts +0 -133
  203. package/ai/tools/importSkillTool.ts +0 -162
  204. package/ai/tools/index.ts +0 -2290
  205. package/ai/tools/jdProductScraperTool.ts +0 -821
  206. package/ai/tools/listUserSpacesTool.ts +0 -113
  207. package/ai/tools/localFilesTool.ts +0 -276
  208. package/ai/tools/marxistsOfflineBook.ts +0 -253
  209. package/ai/tools/modelUsageTools.ts +0 -206
  210. package/ai/tools/noloWorkspaceReadTools.ts +0 -467
  211. package/ai/tools/olmOcrTool.ts +0 -33
  212. package/ai/tools/openaiImageTool.ts +0 -267
  213. package/ai/tools/prepareTools.ts +0 -193
  214. package/ai/tools/readDocTool.ts +0 -88
  215. package/ai/tools/readFileTool.ts +0 -214
  216. package/ai/tools/readTool.ts +0 -194
  217. package/ai/tools/readXPostTool.ts +0 -229
  218. package/ai/tools/readXhsProfileTool.ts +0 -638
  219. package/ai/tools/rememberMemoryTool.ts +0 -84
  220. package/ai/tools/remotionVideoTool.ts +0 -151
  221. package/ai/tools/searchDialogMessagesTool.ts +0 -222
  222. package/ai/tools/searchWorkspaceTool.ts +0 -259
  223. package/ai/tools/skillFollowup.ts +0 -86
  224. package/ai/tools/surfWeatherTool.ts +0 -169
  225. package/ai/tools/table/addTableRowTool.ts +0 -217
  226. package/ai/tools/table/createTableTool.ts +0 -326
  227. package/ai/tools/table/rowTools.ts +0 -386
  228. package/ai/tools/table/schemaTools.ts +0 -244
  229. package/ai/tools/table/shareTableTool.ts +0 -148
  230. package/ai/tools/table/toolShared.ts +0 -129
  231. package/ai/tools/taobaoTmallProductScraperTool.ts +0 -49
  232. package/ai/tools/toolApiClient.ts +0 -279
  233. package/ai/tools/toolNameAliases.ts +0 -70
  234. package/ai/tools/toolPacks.ts +0 -19
  235. package/ai/tools/toolResultError.ts +0 -42
  236. package/ai/tools/toolRunSlice.ts +0 -303
  237. package/ai/tools/toolSchemaCompatibility.ts +0 -53
  238. package/ai/tools/uiAskChoiceTool.ts +0 -104
  239. package/ai/tools/updateContentTitleTool.ts +0 -84
  240. package/ai/tools/updateDocTool.ts +0 -105
  241. package/ai/tools/updateUserPreferenceProfileTool.ts +0 -153
  242. package/ai/tools/wereadGatewayTool.ts +0 -152
  243. package/ai/tools/whisperTool.ts +0 -76
  244. package/ai/tools/writeFileTool.ts +0 -213
  245. package/ai/tools/youtubeScraperTool.ts +0 -116
  246. package/ai/tools/ziweiChartTool.ts +0 -678
  247. package/ai/types.ts +0 -58
  248. package/ai/workflow/workflowExecutor.ts +0 -323
  249. package/ai/workflow/workflowSlice.ts +0 -73
  250. package/ai/workflow/workflowTypes.ts +0 -106
  251. package/app/actions/syncAppRecord.ts +0 -73
  252. package/app/constants/animationSets.ts +0 -21
  253. package/app/constants/appEditor.ts +0 -99
  254. package/app/favorite/deletedFavoriteProjection.ts +0 -31
  255. package/app/favorite/favoriteSlice.ts +0 -690
  256. package/app/favorite/type.ts +0 -43
  257. package/app/hooks/deleteDbKey.ts +0 -254
  258. package/app/i18n/client.ts +0 -13
  259. package/app/i18n/i18n.base.ts +0 -14
  260. package/app/i18n/i18n.config.ts +0 -77
  261. package/app/i18n/index.ts +0 -15
  262. package/app/i18n/mapLanguage.ts +0 -11
  263. package/app/i18n/translations/appBuilder.locale.ts +0 -453
  264. package/app/i18n/translations/error.locale.ts +0 -246
  265. package/app/i18n/translations/interface.locale.ts +0 -2206
  266. package/app/i18n/translations/pricing.locale.ts +0 -397
  267. package/app/i18n/translations/privacy.locale.ts +0 -168
  268. package/app/i18n/translations/seo.locale.ts +0 -129
  269. package/app/i18n/translations/terms.locale.ts +0 -124
  270. package/app/i18n/types.ts +0 -6
  271. package/app/notifications/model.ts +0 -77
  272. package/app/notifications/notificationSlice.ts +0 -141
  273. package/app/reducer.ts +0 -36
  274. package/app/settings/dbActionThunks.ts +0 -34
  275. package/app/settings/defaultSpacePreference.ts +0 -87
  276. package/app/settings/settingSlice.tsx +0 -1212
  277. package/app/settings/settingsRecord.ts +0 -8
  278. package/app/stateViews/runtime.ts +0 -90
  279. package/app/store.ts +0 -55
  280. package/app/theme/colors.ts +0 -280
  281. package/app/theme/fontPreference.ts +0 -77
  282. package/app/theme/theme.config.ts +0 -120
  283. package/app/theme/themeModeBootstrap.ts +0 -123
  284. package/app/types/appSummary.ts +0 -118
  285. package/app/types.ts +0 -358
  286. package/app/utils/appKeys.ts +0 -55
  287. package/app/utils/async.ts +0 -28
  288. package/app/utils/desktopAgentRuntimeTurnClient.ts +0 -75
  289. package/app/utils/env.ts +0 -17
  290. package/app/utils/fileUtils.ts +0 -229
  291. package/app/utils/imageUtils.ts +0 -274
  292. package/app/utils/myContentItems.ts +0 -317
  293. package/app/utils/retryAfter.ts +0 -36
  294. package/app/utils/retryFetch.ts +0 -61
  295. package/app/utils/toast.ts +0 -3
  296. package/auth/action/signUpAction.ts +0 -227
  297. package/auth/adminPermissions.ts +0 -78
  298. package/auth/authSlice.ts +0 -531
  299. package/auth/client/loginRequest.ts +0 -14
  300. package/auth/resetAuthScopedClientState.ts +0 -27
  301. package/auth/routes.ts +0 -183
  302. package/auth/token.ts +0 -63
  303. package/auth/types.ts +0 -40
  304. package/authCommands.ts +0 -230
  305. package/chat/chat.locale.ts +0 -817
  306. package/chat/dialog/actions/addCybotAction.ts +0 -52
  307. package/chat/dialog/actions/addReferenceKeysAction.ts +0 -62
  308. package/chat/dialog/actions/builtinDialogLlm.ts +0 -35
  309. package/chat/dialog/actions/cleanupCliSession.ts +0 -40
  310. package/chat/dialog/actions/createDialogAction.ts +0 -379
  311. package/chat/dialog/actions/createScheduledTaskAction.ts +0 -78
  312. package/chat/dialog/actions/handleSendMessageAction.ts +0 -202
  313. package/chat/dialog/actions/handleSendMessageResolver.ts +0 -27
  314. package/chat/dialog/actions/removeCybotAction.ts +0 -6
  315. package/chat/dialog/actions/removeDialogAgentAction.ts +0 -44
  316. package/chat/dialog/actions/replacePrimaryCybotAction.ts +0 -6
  317. package/chat/dialog/actions/setPrimaryDialogAgentAction.ts +0 -52
  318. package/chat/dialog/actions/updateDialogSummaryAction.ts +0 -430
  319. package/chat/dialog/actions/updateDialogTitleAction.ts +0 -151
  320. package/chat/dialog/actions/updateDialogTitlePolicy.ts +0 -30
  321. package/chat/dialog/actions/updateTokensAction.ts +0 -233
  322. package/chat/dialog/dialogAgents.ts +0 -72
  323. package/chat/dialog/dialogAttachmentCleanup.ts +0 -135
  324. package/chat/dialog/dialogSlice.ts +0 -985
  325. package/chat/dialog/dialogTitle.ts +0 -81
  326. package/chat/dialog/dialogTokenStats.ts +0 -12
  327. package/chat/dialog/dialogUrl.ts +0 -6
  328. package/chat/dialog/goal.ts +0 -108
  329. package/chat/dialog/objectAssistantRegistry.ts +0 -286
  330. package/chat/dialog/schedule.ts +0 -17
  331. package/chat/messages/activityCompletion.ts +0 -97
  332. package/chat/messages/fetchAndCacheMessages.ts +0 -119
  333. package/chat/messages/fetchConvMsgs.ts +0 -51
  334. package/chat/messages/fetchMessages.ts +0 -84
  335. package/chat/messages/fileUrl.ts +0 -13
  336. package/chat/messages/imagePayloadPersistence.ts +0 -22
  337. package/chat/messages/messageAgent.ts +0 -8
  338. package/chat/messages/messageContent.ts +0 -203
  339. package/chat/messages/messageContract.ts +0 -88
  340. package/chat/messages/messageSlice.ts +0 -1386
  341. package/chat/messages/toolThunks.ts +0 -646
  342. package/chat/messages/types.ts +0 -192
  343. package/chat/messages/web/toolDisplayName.ts +0 -686
  344. package/cli/agentAliases.ts +0 -110
  345. package/cli/agentCommandSupport.ts +0 -81
  346. package/cli/agentInternalCommandEntries.ts +0 -44
  347. package/cli/agentListCommands.ts +0 -185
  348. package/cli/agentListHelpers.ts +0 -242
  349. package/cli/agentMachineCommands.ts +0 -403
  350. package/cli/agentPullCommand.ts +0 -142
  351. package/cli/agentRecordCommands.ts +0 -226
  352. package/cli/agentRecordHelpers.ts +0 -571
  353. package/cli/agentRunCommand.ts +0 -556
  354. package/cli/agentRuntimeLocal.ts +0 -45
  355. package/cli/authCommands.ts +0 -230
  356. package/cli/cliCommandAdapters.ts +0 -28
  357. package/cli/cliCommandDispatch.ts +0 -66
  358. package/cli/cliCommandFactories.ts +0 -66
  359. package/cli/cliCommandTypes.ts +0 -49
  360. package/cli/cliEnvHelpers.ts +0 -116
  361. package/cli/cliSpaceHelpers.ts +0 -39
  362. package/cli/client/agentConfigResolver.ts +0 -1
  363. package/cli/client/agentRun.ts +0 -795
  364. package/cli/client/compactDialog.ts +0 -222
  365. package/cli/client/hybridRecordStore.ts +0 -52
  366. package/cli/client/localAgentRecords.ts +0 -7
  367. package/cli/client/localDialogRecords.ts +0 -30
  368. package/cli/client/localProviderResolver.ts +0 -1
  369. package/cli/client/localRuntimeAdapter.ts +0 -1104
  370. package/cli/client/localToolPolicy.ts +0 -8
  371. package/cli/client/profileConfig.ts +0 -101
  372. package/cli/client/streamingOutput.ts +0 -38
  373. package/cli/commandRegistry.ts +0 -98
  374. package/cli/connectorRunArtifact.ts +0 -120
  375. package/cli/connectorWebSocketTarget.ts +0 -112
  376. package/cli/defaultServer.ts +0 -1
  377. package/cli/dialogAttachmentCleanup.ts +0 -151
  378. package/cli/dialogCommands.ts +0 -1120
  379. package/cli/dialogInternalCommandEntries.ts +0 -17
  380. package/cli/docCreateCommands.ts +0 -345
  381. package/cli/docInternalCommandEntries.ts +0 -11
  382. package/cli/docPageHelpers.ts +0 -80
  383. package/cli/docSkillHelpers.ts +0 -67
  384. package/cli/docSpaceHelpers.ts +0 -46
  385. package/cli/globalRecordOperations.ts +0 -258
  386. package/cli/internalCommandEntries.ts +0 -18
  387. package/cli/localRuntimeAuthority.ts +0 -182
  388. package/cli/localRuntimeDb.ts +0 -26
  389. package/cli/machineCommands.ts +0 -307
  390. package/cli/machineDaemonCommands.ts +0 -185
  391. package/cli/machineHeartbeatCommands.ts +0 -30
  392. package/cli/machineStatusCommands.ts +0 -95
  393. package/cli/machineWatchCommands.ts +0 -41
  394. package/cli/machineWsPromptMaterialization.ts +0 -89
  395. package/cli/machineWsRunDispatch.ts +0 -695
  396. package/cli/machineWsSession.ts +0 -213
  397. package/cli/memoryCommands.ts +0 -253
  398. package/cli/memoryInternalCommandEntries.ts +0 -9
  399. package/cli/offlineMarxistsAgentCommand.ts +0 -316
  400. package/cli/qoderUsageProbe.ts +0 -252
  401. package/cli/runtimeDoctorCommands.ts +0 -174
  402. package/cli/runtimeModeArgs.ts +0 -33
  403. package/cli/scriptCommandEntries.ts +0 -66
  404. package/cli/secretScan.ts +0 -31
  405. package/cli/systemInternalCommandEntries.ts +0 -65
  406. package/cli/tableCommands.ts +0 -453
  407. package/cli/tui/readlineWorkspace.ts +0 -210
  408. package/cli/tui/session.ts +0 -554
  409. package/cli/updateCommands.ts +0 -134
  410. package/cli/workflowInternalCommandEntries.ts +0 -10
  411. package/cliCommandAdapters.ts +0 -28
  412. package/cliCommandDispatch.ts +0 -66
  413. package/cliCommandFactories.ts +0 -66
  414. package/cliCommandTypes.ts +0 -49
  415. package/cliEnvHelpers.ts +0 -116
  416. package/cliSpaceHelpers.ts +0 -39
  417. package/client/agentConfigResolver.test.ts +0 -69
  418. package/client/agentConfigResolver.ts +0 -1
  419. package/client/agentRun.test.ts +0 -1344
  420. package/client/agentRun.ts +0 -795
  421. package/client/compactDialog.test.ts +0 -238
  422. package/client/compactDialog.ts +0 -222
  423. package/client/hybridRecordStore.test.ts +0 -157
  424. package/client/hybridRecordStore.ts +0 -52
  425. package/client/localAgentRecords.test.ts +0 -27
  426. package/client/localAgentRecords.ts +0 -7
  427. package/client/localDialogRecords.test.ts +0 -124
  428. package/client/localDialogRecords.ts +0 -30
  429. package/client/localProviderResolver.test.ts +0 -102
  430. package/client/localProviderResolver.ts +0 -1
  431. package/client/localRuntimeAdapter.test.ts +0 -2804
  432. package/client/localRuntimeAdapter.ts +0 -1104
  433. package/client/localRuntimeDryRun.test.ts +0 -135
  434. package/client/localToolPolicy.test.ts +0 -48
  435. package/client/localToolPolicy.ts +0 -8
  436. package/client/profileConfig.test.ts +0 -106
  437. package/client/profileConfig.ts +0 -101
  438. package/client/streamingOutput.test.ts +0 -22
  439. package/client/streamingOutput.ts +0 -38
  440. package/commandRegistry.ts +0 -98
  441. package/connector-experimental/capabilities.ts +0 -75
  442. package/connector-experimental/codexBinary.ts +0 -41
  443. package/connector-experimental/heartbeatLoop.ts +0 -22
  444. package/connector-experimental/machineInfo.ts +0 -46
  445. package/connector-experimental/protocol.ts +0 -54
  446. package/connectorRunArtifact.ts +0 -120
  447. package/connectorWebSocketTarget.ts +0 -112
  448. package/core/builtinAgents.ts +0 -209
  449. package/core/config.ts +0 -15
  450. package/core/crypto.ts +0 -51
  451. package/core/generateKeyPairFromSeedV1.ts +0 -15
  452. package/core/generateMainKey.ts +0 -22
  453. package/core/init.ts +0 -41
  454. package/core/localOrigins.ts +0 -8
  455. package/core/password.ts +0 -13
  456. package/core/prefix.ts +0 -23
  457. package/create/editor/transforms/fromMarkdown/index.ts +0 -260
  458. package/create/editor/transforms/fromMarkdown/inline.ts +0 -285
  459. package/create/editor/transforms/fromMarkdown/table.ts +0 -130
  460. package/create/editor/transforms/markdownToSlate.ts +0 -24
  461. package/create/editor/transforms/slateToRenderMarkdown.ts +0 -218
  462. package/create/editor/transforms/slateToSimplifiedMarkdown.ts +0 -224
  463. package/create/editor/transforms/slateToText.ts +0 -33
  464. package/create/editor/utils/slateUtils.ts +0 -233
  465. package/create/space/addSpaceAction.ts +0 -193
  466. package/create/space/category/categoryActions.ts +0 -427
  467. package/create/space/changeSpaceAction.ts +0 -36
  468. package/create/space/constants.ts +0 -8
  469. package/create/space/content/addContentAction.ts +0 -116
  470. package/create/space/content/contentThunks.ts +0 -90
  471. package/create/space/content/deleteContentFromSpaceAction.ts +0 -187
  472. package/create/space/content/deleteMultipleContentAction.ts +0 -112
  473. package/create/space/content/moveContentAction.ts +0 -285
  474. package/create/space/content/updateContentCategoryAction.ts +0 -154
  475. package/create/space/content/updateContentTitleAction.ts +0 -151
  476. package/create/space/content/uploadAndAddFileToSpaceAction.ts +0 -98
  477. package/create/space/contentKeyUtils.ts +0 -117
  478. package/create/space/deleteSpaceAction.ts +0 -276
  479. package/create/space/fetchSpaceAction.ts +0 -70
  480. package/create/space/fetchSpaceSidebarStateAction.ts +0 -26
  481. package/create/space/loadDefaultSpaceAction.ts +0 -57
  482. package/create/space/member/addMemberAction.ts +0 -79
  483. package/create/space/member/fetchUserSpaceMembershipsAction.ts +0 -386
  484. package/create/space/member/memberThunks.ts +0 -47
  485. package/create/space/member/removeMemberAction.ts +0 -67
  486. package/create/space/resolvePreferredSpaceId.ts +0 -113
  487. package/create/space/sidebarVisibleTypes.ts +0 -260
  488. package/create/space/space.locale.ts +0 -1087
  489. package/create/space/spaceAccess.ts +0 -182
  490. package/create/space/spaceCollapsedState.ts +0 -54
  491. package/create/space/spaceKeys.ts +0 -65
  492. package/create/space/spaceSlice.ts +0 -328
  493. package/create/space/spaceThunks.ts +0 -410
  494. package/create/space/types.ts +0 -27
  495. package/create/space/updateSpaceAction.ts +0 -107
  496. package/create/space/utils/permissions.ts +0 -47
  497. package/create/types.ts +0 -21
  498. package/database/actions/agentReadResolution.ts +0 -33
  499. package/database/actions/common.ts +0 -243
  500. package/database/actions/deleteFile.ts +0 -40
  501. package/database/actions/fileContent.ts +0 -125
  502. package/database/actions/patch.ts +0 -155
  503. package/database/actions/read.ts +0 -358
  504. package/database/actions/readAndWait.ts +0 -260
  505. package/database/actions/readRequestManager.ts +0 -120
  506. package/database/actions/readResolution.ts +0 -125
  507. package/database/actions/remove.ts +0 -94
  508. package/database/actions/replication.ts +0 -477
  509. package/database/actions/upload.ts +0 -186
  510. package/database/actions/upsert.ts +0 -56
  511. package/database/actions/write.ts +0 -146
  512. package/database/authority/ownerKey.ts +0 -80
  513. package/database/authority/recordAuthority.ts +0 -67
  514. package/database/authority/userAuthorityRegistry.ts +0 -54
  515. package/database/client/fetchUserData.ts +0 -61
  516. package/database/config.ts +0 -40
  517. package/database/dbActionThunks.ts +0 -1
  518. package/database/dbSlice.ts +0 -149
  519. package/database/fileRing.ts +0 -51
  520. package/database/fileStorage.ts +0 -232
  521. package/database/fileUrl.ts +0 -34
  522. package/database/keys.ts +0 -767
  523. package/database/queryPrefixes.ts +0 -14
  524. package/database/requests.ts +0 -443
  525. package/database/runtimeServerContext.ts +0 -54
  526. package/database/server/authorityStoreTypes.ts +0 -31
  527. package/database/server/cliAuthorityBrokerClient.ts +0 -227
  528. package/database/server/cliAuthorityBrokerServer.ts +0 -283
  529. package/database/server/cliAuthorityBrokerTypes.ts +0 -43
  530. package/database/server/cliAuthorityStoreDriver.ts +0 -98
  531. package/database/server/db.ts +0 -99
  532. package/database/server/dbPath.ts +0 -20
  533. package/database/server/ensureDbOpen.ts +0 -12
  534. package/database/server/legacyServerDb.ts +0 -58
  535. package/database/server/levelAuthorityStore.ts +0 -114
  536. package/database/server/memoryAuthorityStore.ts +0 -133
  537. package/database/server/serverStoreFactory.ts +0 -118
  538. package/database/tenantPlacement.ts +0 -57
  539. package/database/tombstones.ts +0 -52
  540. package/database/userDataMerge.ts +0 -95
  541. package/database/userPreferenceRegister.ts +0 -131
  542. package/database/utils/ulid.ts +0 -1
  543. package/defaultServer.ts +0 -1
  544. package/dialogAttachmentCleanup.ts +0 -151
  545. package/dialogCommands.ts +0 -1120
  546. package/dialogInternalCommandEntries.ts +0 -17
  547. package/docCreateCommands.ts +0 -345
  548. package/docInternalCommandEntries.ts +0 -11
  549. package/docPageHelpers.ts +0 -80
  550. package/docSkillHelpers.ts +0 -67
  551. package/docSpaceHelpers.ts +0 -46
  552. package/globalRecordOperations.ts +0 -258
  553. package/index.ts +0 -78
  554. package/integrations/anthropic/anthropicModels.ts +0 -47
  555. package/integrations/deepseek/models.ts +0 -37
  556. package/integrations/google/models.ts +0 -341
  557. package/integrations/openai/chatCompletionStreamMode.ts +0 -10
  558. package/integrations/openai/filterAndCleanMessages.ts +0 -284
  559. package/integrations/openai/flexTier.ts +0 -102
  560. package/integrations/openai/generateOpenAIRequestBody.ts +0 -271
  561. package/integrations/openai/generateResponseRequestBody.ts +0 -77
  562. package/integrations/openai/models.ts +0 -271
  563. package/integrations/openai/providerBodyCompatibility.ts +0 -23
  564. package/integrations/openai/responsesHelpers.ts +0 -297
  565. package/integrations/x-reader/types.ts +0 -109
  566. package/integrations/xai/models.ts +0 -13
  567. package/integrations/xhs-reader/redaction.ts +0 -68
  568. package/integrations/xhs-reader/types.ts +0 -277
  569. package/integrations/xhs-reader/url.ts +0 -80
  570. package/internalCommandEntries.ts +0 -18
  571. package/localRuntimeAuthority.ts +0 -182
  572. package/localRuntimeDb.ts +0 -26
  573. package/machineCommands.ts +0 -307
  574. package/machineDaemonCommands.ts +0 -185
  575. package/machineHeartbeatCommands.ts +0 -30
  576. package/machineStatusCommands.ts +0 -95
  577. package/machineWatchCommands.ts +0 -41
  578. package/machineWsPromptMaterialization.ts +0 -89
  579. package/machineWsRunDispatch.ts +0 -695
  580. package/machineWsSession.ts +0 -213
  581. package/memoryCommands.ts +0 -253
  582. package/memoryInternalCommandEntries.ts +0 -9
  583. package/offlineMarxistsAgentCommand.ts +0 -316
  584. package/qoderUsageProbe.ts +0 -252
  585. package/render/contentIcon/types.ts +0 -167
  586. package/render/page/createPageAction.ts +0 -183
  587. package/render/page/docSlice.ts +0 -495
  588. package/render/page/types.ts +0 -19
  589. package/render/table/activityColumns.ts +0 -6
  590. package/render/table/createTableAction.ts +0 -274
  591. package/render/table/deleteTableAction.ts +0 -193
  592. package/render/table/fetchAndCacheTableRows.ts +0 -174
  593. package/render/table/tableSlice.ts +0 -1167
  594. package/render/table/toolValueUtils.ts +0 -363
  595. package/render/table/types.ts +0 -262
  596. package/render/table/utils/tableSerialization.ts +0 -50
  597. package/runtimeDoctorCommands.ts +0 -174
  598. package/runtimeModeArgs.ts +0 -33
  599. package/scriptCommandEntries.ts +0 -66
  600. package/secretScan.ts +0 -31
  601. package/server/handlers/agentRun/types.ts +0 -105
  602. package/share/action.ts +0 -225
  603. package/share/helpers.ts +0 -302
  604. package/share/keys.ts +0 -243
  605. package/share/publicSharePolicy.ts +0 -27
  606. package/share/shareSlice.ts +0 -53
  607. package/share/types.ts +0 -100
  608. package/systemInternalCommandEntries.ts +0 -65
  609. package/tableCommands.ts +0 -453
  610. package/tui/readlineWorkspace.ts +0 -210
  611. package/tui/session.ts +0 -554
  612. package/updateCommands.ts +0 -134
  613. package/workflowInternalCommandEntries.ts +0 -10
@@ -1,187 +0,0 @@
1
- // create/space/deleteContentFromSpaceAction.ts
2
- import { createSpaceKey } from "../../space/spaceKeys";
3
- import { patch, read, remove } from "../../../database/dbSlice";
4
- import { SpaceData, Agent } from "../../../app/types";
5
- import { selectUserId } from "../../../auth/authSlice";
6
- import { isAgentKey, isPageKey, splitKey } from "../../../database/keys";
7
- import { extractUserId } from "../../../core/prefix";
8
- import { isSystemAdmin } from "../../../core/init";
9
- import { deleteDialog } from "../../../chat/dialog/dialogSlice";
10
- import { deleteTable } from "../../../render/table/tableSlice";
11
-
12
- const nextSpaceUpdatedAt = (value: unknown): number | string => {
13
- const previousTimestamp =
14
- typeof value === "number"
15
- ? value
16
- : typeof value === "string"
17
- ? Date.parse(value) || 0
18
- : 0;
19
- const nextTimestamp = Math.max(Date.now(), previousTimestamp + 1);
20
- return typeof value === "string"
21
- ? new Date(nextTimestamp).toISOString()
22
- : nextTimestamp;
23
- };
24
-
25
- const findContentReference = (
26
- spaceData: SpaceData,
27
- requestedContentKey: string
28
- ): { entryKey: string; contentInfo: SpaceData["contents"][string] } | null => {
29
- const contents = spaceData.contents ?? {};
30
- const directMatch = contents[requestedContentKey];
31
- if (directMatch) {
32
- return { entryKey: requestedContentKey, contentInfo: directMatch };
33
- }
34
-
35
- for (const [entryKey, item] of Object.entries(contents)) {
36
- if (!item) continue;
37
- if (item.contentKey === requestedContentKey) {
38
- return { entryKey, contentInfo: item };
39
- }
40
- }
41
-
42
- return null;
43
- };
44
-
45
- /**
46
- * 策略模式处理不同类型内容的实体物理删除逻辑
47
- */
48
- const ENTITY_DELETE_STRATEGIES: Record<
49
- string,
50
- (key: string, ctx: {
51
- dispatch: any;
52
- userId: string;
53
- thunkAPI: any;
54
- sourceServerOrigin?: string | null;
55
- }) => Promise<void>
56
- > = {
57
- dialog: async (key, { dispatch }) => {
58
- await (dispatch as any)(deleteDialog(key)).unwrap();
59
- },
60
- page: async (key, { dispatch, userId, sourceServerOrigin }) => {
61
- const isOwnerByKey = extractUserId(key) === userId;
62
- if (isOwnerByKey || isSystemAdmin(userId)) {
63
- await dispatch(remove({ dbKey: key, preferredServerOrigin: sourceServerOrigin }));
64
- }
65
- },
66
- table: async (key, { dispatch }) => {
67
- await (dispatch as any)(deleteTable({ dbKey: key })).unwrap();
68
- },
69
- file: async (key, { thunkAPI }) => {
70
- const { deleteFileAction } = await import("../../../database/actions/deleteFile");
71
- await deleteFileAction(key, thunkAPI);
72
- },
73
- image: async (key, { thunkAPI }) => {
74
- const { deleteFileAction } = await import("../../../database/actions/deleteFile");
75
- await deleteFileAction(key, thunkAPI);
76
- },
77
- agent: async (key, { dispatch, userId, sourceServerOrigin }) => {
78
- const parts = splitKey(key);
79
- const isPublic = parts[1] === "pub";
80
- const isOwnerByKey = parts[1] === userId;
81
-
82
- if (!isPublic) {
83
- // 1. 私有副本:只有所有者或管理员可以物理删除实体
84
- if (isOwnerByKey || isSystemAdmin(userId)) {
85
- await dispatch(remove({ dbKey: key, preferredServerOrigin: sourceServerOrigin }));
86
- }
87
- } else {
88
- // 2. 公共副本:只有创建者或管理员可以删除实体
89
- const agentData = (await (dispatch as any)(read({
90
- dbKey: key,
91
- preferredServerOrigin: sourceServerOrigin,
92
- })).unwrap()) as Agent | null;
93
- if (agentData) {
94
- const isCreator = agentData.userId === userId;
95
- const isAdmin = isSystemAdmin(userId);
96
- if (isCreator || isAdmin) {
97
- await dispatch(remove({ dbKey: key, preferredServerOrigin: sourceServerOrigin }));
98
- }
99
- }
100
- }
101
- },
102
- cybot: async (key, ctx) => ENTITY_DELETE_STRATEGIES.agent(key, ctx),
103
- };
104
-
105
- /**
106
- * 从指定的 Space 中删除内容的引用,并随后根据类型执行实体的物理删除。
107
- */
108
- export const deleteContentFromSpaceAction = async (
109
- input: { contentKey: string; spaceId: string; sourceServerOrigin?: string | null },
110
- thunkAPI: any
111
- ) => {
112
- const { contentKey, spaceId, sourceServerOrigin } = input;
113
- const { dispatch, getState } = thunkAPI;
114
- const userId = selectUserId(getState());
115
-
116
- // 1. 获取并验证 Space 数据
117
- const spaceKey = createSpaceKey.space(spaceId);
118
- const spaceData = (await (dispatch as any)(read({
119
- dbKey: spaceKey,
120
- preferredServerOrigin: sourceServerOrigin,
121
- })).unwrap()) as SpaceData | null;
122
-
123
- if (!spaceData) throw new Error("空间不存在");
124
- if (!userId || !spaceData.members?.includes(userId))
125
- throw new Error("无权修改此空间");
126
-
127
- const contentReference = findContentReference(spaceData, contentKey);
128
- if (!contentReference) {
129
- return { contentKey, spaceId, updatedSpaceData: spaceData };
130
- }
131
-
132
- const { entryKey, contentInfo } = contentReference;
133
- const entityKey = String(contentInfo.contentKey || contentKey || entryKey);
134
- const contentDeletes: Record<string, null> = {
135
- [entryKey]: null,
136
- };
137
- if (entityKey !== entryKey) {
138
- contentDeletes[entityKey] = null;
139
- }
140
-
141
- // 2. 从 Space 的 contents 中移除引用
142
- const updatedSpaceData = await (dispatch as any)(
143
- patch({
144
- dbKey: spaceKey,
145
- preferredServerOrigin: sourceServerOrigin,
146
- changes: {
147
- contents: contentDeletes,
148
- updatedAt: nextSpaceUpdatedAt(spaceData.updatedAt),
149
- },
150
- })
151
- ).unwrap();
152
-
153
- // 3. 根据内容类型执行实体的物理删除 (Functional Refactor)
154
- let entityRemoveError: string | null = null;
155
- const contentType = String(contentInfo.type || "").toLowerCase();
156
-
157
- try {
158
- const strategy = ENTITY_DELETE_STRATEGIES[contentType];
159
- if (strategy) {
160
- await strategy(entityKey, { dispatch, userId, thunkAPI, sourceServerOrigin });
161
- } else if (isPageKey(entityKey)) {
162
- await ENTITY_DELETE_STRATEGIES.page(entityKey, {
163
- dispatch,
164
- userId,
165
- thunkAPI,
166
- sourceServerOrigin,
167
- });
168
- } else if (isAgentKey(entityKey)) {
169
- await ENTITY_DELETE_STRATEGIES.agent(entityKey, {
170
- dispatch,
171
- userId,
172
- thunkAPI,
173
- sourceServerOrigin,
174
- });
175
- }
176
- } catch (err: any) {
177
- console.error(`[deleteContent] Failed to delete entity ${entityKey}:`, err);
178
- entityRemoveError = err.message || "Unknown error";
179
- }
180
-
181
- return {
182
- contentKey,
183
- spaceId,
184
- updatedSpaceData,
185
- entityRemoveError,
186
- };
187
- };
@@ -1,112 +0,0 @@
1
- import { selectUserId } from "../../../auth/authSlice";
2
- import { createSpaceKey } from "../../space/spaceKeys";
3
- import { patch, read, remove } from "../../../database/dbSlice";
4
- import { SpaceData } from "../../../app/types";
5
- import pino from "pino";
6
-
7
- const logger = pino({
8
- level: "info",
9
- // transport: {
10
- // target: "pino-pretty",
11
- // },
12
- });
13
-
14
- /**
15
- * 从指定的 Space 中批量删除多个内容。
16
- * 此函数会先用一个 patch 操作原子性地移除所有内容的引用,
17
- * 然后并行地删除每个内容实体。
18
- * @param input 包含 contentKeys 数组和 spaceId 的对象
19
- * @param thunkAPI Redux Thunk API 对象
20
- * @returns 包含 spaceId 和更新后的 spaceData 的对象
21
- */
22
- export const deleteMultipleContentAction = async (
23
- input: { contentKeys: string[]; spaceId: string },
24
- thunkAPI: any
25
- ) => {
26
- const { contentKeys, spaceId } = input;
27
- if (!contentKeys || contentKeys.length === 0) {
28
- logger.warn("deleteMultipleContentAction called with no contentKeys.");
29
- return { spaceId, updatedSpaceData: null };
30
- }
31
- const { dispatch, getState } = thunkAPI;
32
- const state = getState();
33
- const userId = selectUserId(state);
34
-
35
- logger.info(
36
- { count: contentKeys.length, spaceId, userId },
37
- "Initiating deleteMultipleContentAction"
38
- );
39
-
40
- const spaceKey = createSpaceKey.space(spaceId);
41
-
42
- // 1. 获取并检查权限 (仅执行一次)
43
- const spaceData = (await dispatch(
44
- read({
45
- dbKey: spaceKey
46
- })
47
- ).unwrap()) as SpaceData | null;
48
- if (!spaceData) {
49
- logger.error({ spaceKey }, "Space data not found for batch delete");
50
- throw new Error("空间不存在");
51
- }
52
- if (!userId || !spaceData.members.includes(userId)) {
53
- logger.warn({ userId, spaceId }, "Unauthorized attempt for batch delete");
54
- throw new Error("无权修改此空间");
55
- }
56
-
57
- // 2. 一次性更新 Space 数据 (原子性地删除所有引用)
58
- // 这是比循环 patch 高效得多的方法
59
- const changes = {
60
- contents: contentKeys.reduce(
61
- (acc, key) => {
62
- acc[key] = null; // null 表示删除该键
63
- return acc;
64
- },
65
- {} as Record<string, null>
66
- ),
67
- };
68
-
69
- try {
70
- await dispatch(patch({ dbKey: spaceKey, changes })).unwrap();
71
- logger.info(
72
- { spaceKey, count: contentKeys.length },
73
- "Successfully batched patch to remove content references"
74
- );
75
- } catch (patchError: any) {
76
- logger.error(
77
- { error: patchError, spaceKey },
78
- "Failed to batch patch space data. Aborting."
79
- );
80
- throw new Error(`更新空间引用失败: ${patchError.message}`);
81
- }
82
-
83
- // 3. 并行删除所有内容实体
84
- const removePromises = contentKeys.map((key) =>
85
- dispatch(remove(key)).unwrap()
86
- );
87
- const results = await Promise.allSettled(removePromises);
88
-
89
- results.forEach((result, index) => {
90
- if (result.status === "fulfilled") {
91
- logger.info({ contentKey: contentKeys[index] }, "Entity removed");
92
- } else {
93
- logger.error(
94
- { contentKey: contentKeys[index], error: result.reason },
95
- "Failed to remove an entity"
96
- );
97
- }
98
- });
99
-
100
- // 4. 在所有操作后,获取最终的 Space 数据
101
- const finalSpaceData = (await dispatch(
102
- read({
103
- dbKey: spaceKey
104
- })
105
- ).unwrap()) as SpaceData | null;
106
- logger.info({ spaceId }, "Finished batch delete and refetched space data.");
107
-
108
- return {
109
- spaceId,
110
- updatedSpaceData: finalSpaceData,
111
- };
112
- };
@@ -1,285 +0,0 @@
1
- // 文件路径: create/space/content/moveContentAction.ts
2
-
3
- import type { AppDispatch, RootState } from "../../../app/store"; // 确认 store 类型路径
4
- import type { SpaceId } from "../../space/types"; // 确认类型路径
5
- import type { SpaceData } from "../../../app/types";
6
- import type { SpaceContent } from "../../../app/types";
7
- import { selectUserId } from "../../../auth/authSlice"; // 确认导入路径
8
- import { createSpaceKey } from "../../space/spaceKeys"; // 确认导入路径
9
- // 假设 dbSlice 提供 read, patch
10
- import { read, patch } from "../../../database/dbSlice"; // 确认导入路径
11
- import { checkSpaceMembership } from "../utils/permissions"; // 导入权限检查函数 (假设存在)
12
- import { UNCATEGORIZED_ID } from "../../space/constants"; // 导入常量
13
- import pino from "pino"; // 引入日志
14
-
15
- const logger = pino({
16
- level: "info", // 或根据环境调整
17
- // transport: { target: "pino-pretty" },
18
- });
19
-
20
- // 定义移动操作的输入类型
21
- interface MoveContentInput {
22
- contentKey: string; // 要移动的内容的 Key
23
- sourceSpaceId: SpaceId; // 源空间的 ID
24
- targetSpaceId: SpaceId; // 目标空间的 ID
25
- targetCategoryId?: string | null; // 目标空间中的分类 ID (可选, null/undefined/""/UNCATEGORIZED_ID 表示无分类)
26
- }
27
-
28
- // 定义返回类型,包含两个更新后的空间数据或 null (如果读取失败) 及可选错误
29
- interface MoveContentResult {
30
- sourceSpaceId: SpaceId;
31
- updatedSourceSpaceData: SpaceData | null;
32
- targetSpaceId: SpaceId;
33
- updatedTargetSpaceData: SpaceData | null;
34
- error?: string; // 可选的错误信息传递
35
- }
36
-
37
- /**
38
- * 异步 Action Thunk,用于在两个 Space 之间移动内容项的引用。
39
- * 它会:
40
- * 1. 从源 Space 的 `contents` 中移除引用 (通过 patch)。
41
- * 2. 将内容的引用添加到目标 Space 的 `contents` 中 (通过 patch),并根据 targetCategoryId 更新分类。
42
- * 3. 不直接修改内容实体本身,假设实体数据在移动中保持不变,只改变引用位置和分类。
43
- * 4. 处理 categoryId 逻辑,使其与 addContentAction 一致(未分类则不存储 categoryId 属性)。
44
- */
45
- export const moveContentAction = async (
46
- input: MoveContentInput,
47
- thunkAPI: { dispatch: AppDispatch; getState: () => RootState }
48
- ): Promise<MoveContentResult> => {
49
- const {
50
- contentKey,
51
- sourceSpaceId,
52
- targetSpaceId,
53
- targetCategoryId: rawTargetCategoryId,
54
- } = input;
55
- const { dispatch, getState } = thunkAPI;
56
- const state = getState();
57
- const userId = selectUserId(state);
58
- const now = Date.now(); // 用于更新时间戳
59
-
60
- logger.info({ ...input, userId }, "Initiating moveContentAction");
61
-
62
- // --- 1. 基本验证 ---
63
- if (!userId) {
64
- logger.error("User not logged in.");
65
- throw new Error("用户未登录");
66
- }
67
- if (sourceSpaceId === targetSpaceId) {
68
- logger.error("Source and target space IDs are the same.");
69
- throw new Error(
70
- "源空间和目标空间不能相同。如需修改分类,请使用更新分类操作。"
71
- );
72
- }
73
- if (
74
- !contentKey ||
75
- typeof contentKey !== "string" ||
76
- contentKey.trim() === ""
77
- ) {
78
- logger.error("Invalid contentKey provided.");
79
- throw new Error("无效的内容 Key。");
80
- }
81
-
82
- let sourceSpaceData: SpaceData | null = null;
83
- let targetSpaceData: SpaceData | null = null;
84
- let contentDataFromSource: SpaceContent | null = null; // 从源空间获取内容引用数据
85
- let finalSourceData: SpaceData | null = null;
86
- let finalTargetData: SpaceData | null = null;
87
- let overallError: string | undefined = undefined;
88
-
89
- try {
90
- // --- 2. 并行读取源和目标空间数据 ---
91
- const sourceSpaceKey = createSpaceKey.space(sourceSpaceId);
92
- const targetSpaceKey = createSpaceKey.space(targetSpaceId);
93
-
94
- logger.info(
95
- { sourceSpaceKey, targetSpaceKey },
96
- "Reading source and target space data."
97
- );
98
-
99
- const [sourceResult, targetResult] = await Promise.allSettled([
100
- dispatch(read({
101
- dbKey: sourceSpaceKey
102
- })).unwrap(),
103
- dispatch(read({
104
- dbKey: targetSpaceKey
105
- })).unwrap(),
106
- ]);
107
-
108
- // 处理源空间读取结果
109
- if (sourceResult.status === "rejected" || !sourceResult.value) {
110
- const reason =
111
- sourceResult.status === "rejected"
112
- ? sourceResult.reason
113
- : "Data is null";
114
- throw new Error(
115
- `无法加载源空间 (${sourceSpaceId}): ${reason?.message || reason}`
116
- );
117
- }
118
- sourceSpaceData = sourceResult.value as SpaceData;
119
-
120
- // 处理目标空间读取结果
121
- if (targetResult.status === "rejected" || !targetResult.value) {
122
- const reason =
123
- targetResult.status === "rejected"
124
- ? targetResult.reason
125
- : "Data is null";
126
- throw new Error(
127
- `无法加载目标空间 (${targetSpaceId}): ${reason?.message || reason}`
128
- );
129
- }
130
- targetSpaceData = targetResult.value as SpaceData;
131
-
132
- // --- 3. 权限检查 ---
133
- logger.info("Checking permissions for source and target spaces.");
134
- checkSpaceMembership(sourceSpaceData, userId); // 会在失败时抛出错误
135
- checkSpaceMembership(targetSpaceData, userId); // 会在失败时抛出错误
136
-
137
- // --- 4. 检查内容是否存在于源空间 ---
138
- if (!sourceSpaceData.contents || !sourceSpaceData.contents[contentKey]) {
139
- logger.error(
140
- { contentKey, sourceSpaceId },
141
- "Content key not found in source space contents."
142
- );
143
- throw new Error(
144
- `内容 (${contentKey}) 不在源空间 (${sourceSpaceId}) 中。`
145
- );
146
- }
147
- contentDataFromSource = sourceSpaceData.contents[contentKey]; // 获取要移动的内容数据
148
-
149
- // 可选:检查目标空间是否已存在同名 Key
150
- if (targetSpaceData.contents && targetSpaceData.contents[contentKey]) {
151
- logger.warn(
152
- { contentKey, targetSpaceId },
153
- "Content key already exists in target space. Overwriting."
154
- );
155
- // 根据产品需求决定是报错还是覆盖,这里选择覆盖
156
- }
157
-
158
- // --- 5. 确定最终用于目标存储的 categoryId (string | undefined) ---
159
- let categoryIdForTargetStorage: string | undefined;
160
- if (
161
- rawTargetCategoryId &&
162
- rawTargetCategoryId !== "" &&
163
- rawTargetCategoryId !== UNCATEGORIZED_ID
164
- ) {
165
- // 验证目标分类 ID 是否在目标空间中有效
166
- if (targetSpaceData.categories?.[rawTargetCategoryId]) {
167
- categoryIdForTargetStorage = rawTargetCategoryId;
168
- } else {
169
- logger.warn(
170
- `Target category ${rawTargetCategoryId} not found in target space ${targetSpaceId}. Content will be uncategorized.`
171
- );
172
- categoryIdForTargetStorage = undefined; // 无效则降级
173
- }
174
- } else {
175
- categoryIdForTargetStorage = undefined; // 空、null、undefined 或常量均视为未分类
176
- }
177
-
178
- // --- 6. 构造添加到目标空间的内容引用对象 ---
179
- // 继承源引用的属性,并更新 categoryId 和 updatedAt
180
- const contentReferenceForTarget: SpaceContent = {
181
- ...contentDataFromSource,
182
- updatedAt: now,
183
- };
184
- // 先删除旧的 categoryId (无论是否存在),再根据需要添加新的
185
- delete (contentReferenceForTarget as Partial<SpaceContent>).categoryId;
186
- if (categoryIdForTargetStorage !== undefined) {
187
- contentReferenceForTarget.categoryId = categoryIdForTargetStorage;
188
- }
189
-
190
- // --- 7. 准备 Patch Changes ---
191
- const sourcePatchChanges = {
192
- contents: {
193
- [contentKey]: null, // 从源移除引用 (null value in patch typically means delete key)
194
- },
195
- updatedAt: now,
196
- };
197
- const targetPatchChanges = {
198
- contents: {
199
- [contentKey]: contentReferenceForTarget, // 向目标添加(或覆盖)引用
200
- },
201
- updatedAt: now,
202
- };
203
-
204
- // --- 8. 并行执行两个 Patch 更新 ---
205
- logger.info("Patching source and target space data.");
206
- await Promise.all([
207
- dispatch(
208
- patch({ dbKey: sourceSpaceKey, changes: sourcePatchChanges })
209
- ).unwrap(),
210
- dispatch(
211
- patch({ dbKey: targetSpaceKey, changes: targetPatchChanges })
212
- ).unwrap(),
213
- ]);
214
- logger.info("Successfully patched both source and target spaces.");
215
- } catch (error: any) {
216
- logger.error(
217
- { error: error.message, stack: error.stack },
218
- "Error during move content action execution."
219
- );
220
- overallError = error.message || "移动内容时发生未知错误";
221
- // 不再继续,将在 finally 块中尝试读取并返回
222
- } finally {
223
- // --- 9. 无论成功与否,都尝试重新读取最终的空间数据 ---
224
- // (如果中途出错,可能只有一个或两个空间被更新,读取可以反映部分成功的状态)
225
- logger.info("Attempting to re-read final space data.");
226
- const sourceSpaceKey = createSpaceKey.space(sourceSpaceId);
227
- const targetSpaceKey = createSpaceKey.space(targetSpaceId);
228
-
229
- const [finalSourceResult, finalTargetResult] = await Promise.allSettled([
230
- dispatch(read({
231
- dbKey: sourceSpaceKey
232
- })).unwrap(),
233
- dispatch(read({
234
- dbKey: targetSpaceKey
235
- })).unwrap(),
236
- ]);
237
-
238
- if (finalSourceResult.status === "fulfilled") {
239
- finalSourceData = finalSourceResult.value as SpaceData;
240
- } else {
241
- logger.error(
242
- { sourceSpaceId, reason: finalSourceResult.reason },
243
- "Failed to re-read final source space data."
244
- );
245
- }
246
-
247
- if (finalTargetResult.status === "fulfilled") {
248
- finalTargetData = finalTargetResult.value as SpaceData;
249
- } else {
250
- logger.error(
251
- { targetSpaceId, reason: finalTargetResult.reason },
252
- "Failed to re-read final target space data."
253
- );
254
- }
255
-
256
- logger.info(
257
- {
258
- hasError: !!overallError,
259
- sourceReadSuccess: !!finalSourceData,
260
- targetReadSuccess: !!finalTargetData,
261
- },
262
- "Move content action finished."
263
- );
264
-
265
- // --- 10. 返回结果 ---
266
- const result: MoveContentResult = {
267
- sourceSpaceId,
268
- updatedSourceSpaceData: finalSourceData,
269
- targetSpaceId,
270
- updatedTargetSpaceData: finalTargetData,
271
- error: overallError, // 如果过程中有错误,则传递错误信息
272
- };
273
-
274
- // 如果在主 try 块中捕获到错误,重新抛出,让 Thunk 进入 rejected 状态
275
- // 否则,返回成功结果(即使最终读取失败,操作本身可能成功)
276
- if (overallError) {
277
- // 可以选择性地返回部分成功的数据,或者直接抛出错误
278
- // throw new Error(overallError); // 这会使 Thunk rejected
279
- // 或者,像现在这样,在返回对象中包含错误信息,让 reducer 处理 fulfilled 状态
280
- return result;
281
- }
282
-
283
- return result;
284
- }
285
- };