nolo-cli 0.1.26 → 0.1.29

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 (897) hide show
  1. package/agent-runtime/dialogStatus.ts +139 -0
  2. package/agent-runtime/index.ts +8 -0
  3. package/agentAliases.ts +11 -14
  4. package/agentCommandSupport.ts +2 -2
  5. package/agentCreateCustomCommands.ts +273 -0
  6. package/agentDialogsCommands.ts +226 -0
  7. package/agentDoctorCommands.ts +203 -0
  8. package/agentInternalCommandEntries.ts +11 -2
  9. package/agentListCommands.ts +27 -18
  10. package/agentMachineCommands.ts +97 -23
  11. package/agentPullCommand.ts +9 -9
  12. package/agentRecordHelpers.ts +61 -4
  13. package/agentRunCommand.ts +35 -410
  14. package/agentRunLocalWorkspace.ts +182 -0
  15. package/agentRunParsing.ts +279 -0
  16. package/agentSuperviseCommands.ts +8 -0
  17. package/agentUnpublishCommands.ts +112 -0
  18. package/ai/agent/_executeModel.ts +14 -14
  19. package/ai/agent/agentSlice.ts +8 -8
  20. package/ai/agent/appWorkingMemory.ts +2 -2
  21. package/ai/agent/avatarUtils.ts +1 -1
  22. package/ai/agent/buildEditingContext.ts +3 -3
  23. package/ai/agent/buildSystemPrompt.ts +16 -7
  24. package/ai/agent/cleanAgentMessages.ts +1 -1
  25. package/ai/agent/cliChatClient.ts +3 -3
  26. package/ai/agent/cliExecutor.ts +4 -2
  27. package/ai/agent/createAgentSchema.ts +1 -1
  28. package/ai/agent/executeToolCall.ts +2 -2
  29. package/ai/agent/fetchAgentContexts.ts +3 -3
  30. package/ai/agent/getFullChatContextKeys.ts +4 -4
  31. package/ai/agent/guidedCreation/draft.ts +1 -1
  32. package/ai/agent/guidedCreation/types.ts +1 -1
  33. package/ai/agent/hooks/fetchPublicAgents.ts +6 -6
  34. package/ai/agent/hooks/useAgentConfig.ts +49 -21
  35. package/ai/agent/hooks/useAgentDialog.ts +1 -1
  36. package/ai/agent/hooks/useAgentFormValidation.ts +9 -9
  37. package/ai/agent/hooks/usePublicAgents.ts +9 -9
  38. package/ai/agent/persistMessageWithFixedId.ts +4 -4
  39. package/ai/agent/planSlice.ts +1 -1
  40. package/ai/agent/referenceUtils.ts +4 -4
  41. package/ai/agent/runAgentBackground.ts +3 -3
  42. package/ai/agent/runAgentClientLoop.ts +12 -12
  43. package/ai/agent/runtimeGuidance.ts +1 -1
  44. package/ai/agent/server/fetchPublicAgents.ts +6 -6
  45. package/ai/agent/startParallelAgentStreams.ts +12 -12
  46. package/ai/agent/streamAgentChatTurn.ts +21 -21
  47. package/ai/agent/streamAgentChatTurnUtils.ts +22 -22
  48. package/ai/agent/utils/imageOutput.ts +2 -2
  49. package/ai/agent/utils/publicImageAgentMode.ts +1 -1
  50. package/ai/agent/utils/sortUtils.ts +1 -1
  51. package/ai/agent/web/useGuidedAgentCreation.ts +29 -8
  52. package/ai/chat/fetchUtils.native.ts +2 -2
  53. package/ai/chat/fetchUtils.ts +2 -2
  54. package/ai/chat/sendOpenAICompletionsRequest.native.ts +11 -11
  55. package/ai/chat/sendOpenAICompletionsRequest.ts +12 -12
  56. package/ai/chat/sendOpenAIResponseRequest.ts +14 -14
  57. package/ai/chat/shouldUseServerProxy.ts +1 -1
  58. package/ai/chat/updateTotalUsage.ts +1 -1
  59. package/ai/context/buildReferenceContext.ts +14 -14
  60. package/ai/context/calculateContextUsage.ts +1 -1
  61. package/ai/llm/generateRequestBody.ts +3 -3
  62. package/ai/llm/getPricing.ts +4 -4
  63. package/ai/llm/hooks/useModelPricing.ts +2 -2
  64. package/ai/llm/imagePricing.ts +1 -1
  65. package/ai/llm/models.ts +3 -3
  66. package/ai/llm/providers.ts +8 -8
  67. package/ai/memory/capture.ts +1 -1
  68. package/ai/memory/consolidate.ts +1 -1
  69. package/ai/memory/delete.ts +2 -2
  70. package/ai/memory/query.ts +1 -1
  71. package/ai/memory/queryShared.ts +1 -1
  72. package/ai/memory/recentRelationshipRecap.ts +2 -2
  73. package/ai/memory/remember.ts +1 -1
  74. package/ai/memory/store.ts +1 -1
  75. package/ai/memory/storeShared.ts +2 -2
  76. package/ai/memory/understanding.ts +1 -1
  77. package/ai/messages/type.ts +1 -1
  78. package/ai/policy/personalizationDialog.ts +6 -6
  79. package/ai/policy/runtimePolicy.ts +1 -1
  80. package/ai/skills/referenceRuntime.ts +1 -1
  81. package/ai/skills/skillDiagnostics.ts +1 -1
  82. package/ai/skills/skillDocBuilder.ts +1 -1
  83. package/ai/skills/skillReferenceSummary.ts +1 -1
  84. package/ai/skills/skillSummaryMarker.ts +1 -1
  85. package/ai/token/calculatePrice.ts +5 -5
  86. package/ai/token/db.ts +3 -3
  87. package/ai/token/externalToolCost.ts +4 -4
  88. package/ai/token/hooks/useRecords.ts +3 -3
  89. package/ai/token/modelUsageQuery.ts +2 -2
  90. package/ai/token/openaiImageGenerationUsage.ts +2 -2
  91. package/ai/token/prepareTokenUsageData.ts +1 -1
  92. package/ai/token/query.ts +1 -1
  93. package/ai/token/queryUserTokens.ts +1 -1
  94. package/ai/token/resolveBillingTarget.ts +1 -1
  95. package/ai/token/saveTokenRecord.ts +5 -5
  96. package/ai/token/serverDialogProjection.ts +4 -4
  97. package/ai/token/serverTokenWriter.ts +3 -3
  98. package/ai/token/tokenThunks.ts +1 -1
  99. package/ai/tools/agent/agentUpdateShared.ts +4 -4
  100. package/ai/tools/agent/callAgentTool.ts +3 -3
  101. package/ai/tools/agent/createAgentTool.ts +12 -12
  102. package/ai/tools/agent/createDialogTool.ts +3 -3
  103. package/ai/tools/agent/parallelBudget.ts +2 -2
  104. package/ai/tools/agent/prepareAgentDraftTool.ts +18 -4
  105. package/ai/tools/agent/presets/appBuilderPreset.ts +1 -1
  106. package/ai/tools/agent/runLlmTool.ts +1 -1
  107. package/ai/tools/agent/skillAgentPreset.ts +6 -6
  108. package/ai/tools/agent/updateAgentTool.ts +4 -4
  109. package/ai/tools/agent/updateSelfTool.ts +8 -8
  110. package/ai/tools/appTools.ts +3 -3
  111. package/ai/tools/category/createCategoryTool.ts +2 -2
  112. package/ai/tools/category/queryContentsByCategoryTool.ts +2 -2
  113. package/ai/tools/category/updateContentCategoryTool.ts +2 -2
  114. package/ai/tools/createDocTool.ts +3 -3
  115. package/ai/tools/createPlanTool.ts +9 -9
  116. package/ai/tools/createSkillDocTool.ts +4 -4
  117. package/ai/tools/createWorkflowTool.ts +2 -2
  118. package/ai/tools/deleteSpacesTool.ts +5 -5
  119. package/ai/tools/deleteSpacesToolModel.ts +1 -1
  120. package/ai/tools/doctorSkillTool.ts +3 -3
  121. package/ai/tools/evalSkillTool.ts +3 -3
  122. package/ai/tools/execShellTool.ts +1 -1
  123. package/ai/tools/executeSqlTool.ts +1 -1
  124. package/ai/tools/geminiImagePreviewTool.ts +9 -9
  125. package/ai/tools/importDataTool.ts +2 -2
  126. package/ai/tools/importSkillTool.ts +4 -4
  127. package/ai/tools/index.ts +37 -0
  128. package/ai/tools/listUserSpacesTool.ts +2 -2
  129. package/ai/tools/localFilesTool.ts +85 -9
  130. package/ai/tools/openaiImageTool.ts +9 -9
  131. package/ai/tools/readDocTool.ts +3 -3
  132. package/ai/tools/readTool.ts +9 -9
  133. package/ai/tools/rememberMemoryTool.ts +3 -3
  134. package/ai/tools/remotionVideoTool.ts +7 -7
  135. package/ai/tools/searchDialogMessagesTool.ts +2 -2
  136. package/ai/tools/searchWorkspaceTool.ts +4 -4
  137. package/ai/tools/table/addTableRowTool.ts +2 -2
  138. package/ai/tools/table/createTableTool.ts +2 -2
  139. package/ai/tools/table/rowTools.ts +2 -2
  140. package/ai/tools/table/schemaTools.ts +3 -3
  141. package/ai/tools/table/shareTableTool.ts +5 -5
  142. package/ai/tools/table/toolShared.ts +6 -6
  143. package/ai/tools/toolApiClient.ts +15 -6
  144. package/ai/tools/toolRunSlice.ts +2 -2
  145. package/ai/tools/updateContentTitleTool.ts +2 -2
  146. package/ai/tools/updateDocTool.ts +7 -7
  147. package/ai/tools/updateUserPreferenceProfileTool.ts +3 -3
  148. package/ai/workflow/workflowExecutor.ts +3 -3
  149. package/ai/workflow/workflowSlice.ts +1 -1
  150. package/app/actions/syncAppRecord.ts +73 -0
  151. package/app/admin/adminPages.ts +13 -0
  152. package/app/colors.ts +1 -0
  153. package/app/constants/animationSets.ts +21 -0
  154. package/app/constants/appEditor.ts +99 -0
  155. package/app/constants/clientDownloads.ts +54 -0
  156. package/app/constants/desktopReleaseManifest.ts +68 -0
  157. package/app/constants/homeTabs.ts +15 -0
  158. package/app/constants/routePaths.ts +15 -0
  159. package/app/email/emailApiRoutes.ts +14 -0
  160. package/app/favorite/favoriteSlice.ts +690 -0
  161. package/app/favorite/type.ts +43 -0
  162. package/app/favorite/useAgentFavorite.ts +43 -0
  163. package/app/favorite/useContentFavorite.ts +41 -0
  164. package/app/fetchOwnedApps.ts +269 -0
  165. package/app/guide/quickStartGuide.ts +128 -0
  166. package/app/hooks/deleteDbKey.ts +233 -0
  167. package/app/hooks/index.ts +4 -0
  168. package/app/hooks/useAppDetail.ts +208 -0
  169. package/app/hooks/useAppVersions.ts +52 -0
  170. package/app/hooks/useAutoResizeTextarea.ts +29 -0
  171. package/app/hooks/useChatPageTitle.ts +85 -0
  172. package/app/hooks/useClipboardFiles.ts +20 -0
  173. package/app/hooks/useDesktopLocalConnectorAutostart.ts +38 -0
  174. package/app/hooks/useDragResize.ts +91 -0
  175. package/app/hooks/useElementSizeVar.ts +24 -0
  176. package/app/hooks/useFileDropZone.ts +52 -0
  177. package/app/hooks/useHasMounted.ts +11 -0
  178. package/app/hooks/useImageLoadFallback.ts +19 -0
  179. package/app/hooks/useIsMobile.ts +46 -0
  180. package/app/hooks/useMyApps.ts +375 -0
  181. package/app/hooks/useMyContentItems.ts +91 -0
  182. package/app/hooks/useNewMessageNotification.ts +81 -0
  183. package/app/hooks/usePageMeta.ts +107 -0
  184. package/app/hooks/useRecentlyOpened.ts +84 -0
  185. package/app/hooks/useUnifiedStore.ts +11 -0
  186. package/app/hooks/useUserNotifications.ts +197 -0
  187. package/app/hooks.ts +55 -0
  188. package/app/i18n/clientResources.ts +65 -0
  189. package/app/i18n/i18n.base.ts +14 -0
  190. package/app/i18n/i18n.config.ts +62 -0
  191. package/app/i18n/i18n.server.ts +13 -0
  192. package/app/i18n/index.ts +15 -0
  193. package/app/i18n/mapLanguage.ts +11 -0
  194. package/app/i18n/translations/appBuilder.locale.ts +453 -0
  195. package/app/i18n/translations/error.locale.ts +246 -0
  196. package/app/i18n/translations/interface.locale.ts +2174 -0
  197. package/app/i18n/translations/seo.locale.ts +129 -0
  198. package/app/i18n/types.ts +6 -0
  199. package/app/notifications/formatNotification.ts +134 -0
  200. package/app/notifications/model.ts +77 -0
  201. package/app/notifications/notificationSlice.ts +141 -0
  202. package/app/notifications/useNotificationActions.ts +67 -0
  203. package/app/pages/homeTabState.ts +57 -0
  204. package/app/pages/quickChatFlow.ts +109 -0
  205. package/app/pages/rechargeCheckout.ts +23 -0
  206. package/app/pages/usePageArt.ts +91 -0
  207. package/app/realtime/sharedSse.ts +182 -0
  208. package/app/reducer.ts +36 -0
  209. package/app/seo/pageMeta.ts +123 -0
  210. package/app/settings/config.ts +54 -0
  211. package/app/settings/dbActionThunks.ts +34 -0
  212. package/app/settings/defaultSpacePreference.ts +87 -0
  213. package/app/settings/navItems.ts +73 -0
  214. package/app/settings/prepareUserSetting.ts +11 -0
  215. package/app/settings/settingsRecord.ts +8 -0
  216. package/app/settings/web/chat-config/useAutoSaveGlobalPrompt.ts +59 -0
  217. package/app/settings/web/machineStatus.ts +23 -0
  218. package/app/settings/web/useSettingsStylesheet.ts +28 -0
  219. package/app/settings/web/userSecurityUtils.ts +21 -0
  220. package/app/stateViews/runtime.ts +86 -0
  221. package/app/store.ts +53 -0
  222. package/app/theme/colors.ts +280 -0
  223. package/app/theme/fontPreference.ts +77 -0
  224. package/app/theme/index.ts +7 -0
  225. package/app/theme/theme.config.ts +120 -0
  226. package/app/theme/themeModeBootstrap.ts +123 -0
  227. package/app/theme/useSystemTheme.ts +33 -0
  228. package/app/types/appSummary.ts +114 -0
  229. package/app/types.ts +358 -0
  230. package/app/utils/appDeploySource.ts +50 -0
  231. package/app/utils/appKeys.ts +55 -0
  232. package/app/utils/appRuntimeUrl.ts +51 -0
  233. package/app/utils/async.ts +28 -0
  234. package/app/utils/asyncMapStatus.ts +31 -0
  235. package/app/utils/clipboard.ts +86 -0
  236. package/app/utils/credits.ts +12 -0
  237. package/app/utils/desktopAgentRuntimeStatusClient.ts +42 -0
  238. package/app/utils/desktopAgentRuntimeTurnClient.ts +70 -0
  239. package/app/utils/desktopLocalConnectorClient.ts +83 -0
  240. package/app/utils/env.ts +12 -0
  241. package/app/utils/excelToSlate.ts +430 -0
  242. package/app/utils/fileReaders.ts +12 -0
  243. package/app/utils/fileUtils.ts +229 -0
  244. package/app/utils/imageUtils.native.ts +96 -0
  245. package/app/utils/imageUtils.ts +244 -0
  246. package/app/utils/ime.ts +43 -0
  247. package/app/utils/myContentItems.ts +290 -0
  248. package/app/utils/processDateRange.ts +30 -0
  249. package/app/utils/retryFetch.ts +61 -0
  250. package/app/utils/slateToExcel.ts +58 -0
  251. package/app/utils/toast.native.ts +42 -0
  252. package/app/utils/toast.ts +3 -0
  253. package/app/web/spaceInitGuard.ts +28 -0
  254. package/auth/action/signOutAction.ts +0 -0
  255. package/auth/action/signUpAction.ts +227 -0
  256. package/auth/actor.ts +16 -0
  257. package/auth/authSlice.ts +517 -0
  258. package/auth/billing.ts +130 -0
  259. package/auth/client/deleteUserRequest.ts +86 -0
  260. package/auth/client/loginRequest.ts +14 -0
  261. package/auth/hooks/useAuth.ts +9 -0
  262. package/auth/hooks/useDeleteOwnAccount.ts +50 -0
  263. package/auth/hooks/useDeleteOwnAccountFlow.ts +66 -0
  264. package/auth/hooks/useDeleteUser.ts +45 -0
  265. package/auth/hooks/useEnableUser.ts +50 -0
  266. package/auth/hooks/useFetchUsers.ts +77 -0
  267. package/auth/hooks/useRechargeUser.ts +82 -0
  268. package/auth/index.ts +1 -0
  269. package/auth/invite.ts +19 -0
  270. package/auth/locale.ts +84 -0
  271. package/auth/resetAuthScopedClientState.ts +27 -0
  272. package/auth/rn/tokenManager.ts +72 -0
  273. package/auth/routes.ts +127 -0
  274. package/auth/server/accessActivity.ts +143 -0
  275. package/auth/server/billingFullChainSimulator.ts +325 -0
  276. package/auth/server/billingUsageReport.ts +192 -0
  277. package/auth/server/cliLogin.ts +198 -0
  278. package/auth/server/creatorEarningCreditConversion.ts +515 -0
  279. package/auth/server/creatorEarningsLedger.ts +165 -0
  280. package/auth/server/creatorEarningsReport.ts +299 -0
  281. package/auth/server/creatorSettlementLedger.ts +386 -0
  282. package/auth/server/creatorSettlementReport.ts +442 -0
  283. package/auth/server/creatorSplitConfig.ts +191 -0
  284. package/auth/server/deduct.ts +270 -0
  285. package/auth/server/delete.ts +887 -0
  286. package/auth/server/disable.ts +61 -0
  287. package/auth/server/emailAutomation.ts +358 -0
  288. package/auth/server/emailAutomationConfig.ts +88 -0
  289. package/auth/server/emailAutomationRules.ts +94 -0
  290. package/auth/server/emailAutomationTemplates.ts +131 -0
  291. package/auth/server/emailAutomationTypes.ts +38 -0
  292. package/auth/server/emailDbConfig.ts +147 -0
  293. package/auth/server/emailDelivery.ts +960 -0
  294. package/auth/server/emailDeliveryGuards.ts +282 -0
  295. package/auth/server/emailPolicy.ts +43 -0
  296. package/auth/server/emailPreferences.ts +117 -0
  297. package/auth/server/emailProvider.ts +277 -0
  298. package/auth/server/emailReport.ts +439 -0
  299. package/auth/server/emailRuntimeConfig.ts +86 -0
  300. package/auth/server/emailScenarioNotifications.ts +340 -0
  301. package/auth/server/enable.ts +61 -0
  302. package/auth/server/getRechargeHistory.ts +110 -0
  303. package/auth/server/getUser.ts +71 -0
  304. package/auth/server/inviteReward.ts +295 -0
  305. package/auth/server/inviteRewardEmail.ts +1 -0
  306. package/auth/server/ledger.ts +422 -0
  307. package/auth/server/ledgerAudit.ts +424 -0
  308. package/auth/server/ledgerWitness.ts +472 -0
  309. package/auth/server/listusers.ts +154 -0
  310. package/auth/server/locks.ts +32 -0
  311. package/auth/server/login.ts +184 -0
  312. package/auth/server/productBillingSplits.ts +166 -0
  313. package/auth/server/productEntitlements.ts +139 -0
  314. package/auth/server/productPurchase.ts +382 -0
  315. package/auth/server/recharge.ts +284 -0
  316. package/auth/server/revenueShareLedger.ts +389 -0
  317. package/auth/server/revenueShareReport.ts +258 -0
  318. package/auth/server/revenueSplitPolicy.ts +119 -0
  319. package/auth/server/revokeSessions.ts +59 -0
  320. package/auth/server/route.ts +195 -0
  321. package/auth/server/sendEmail.ts +176 -0
  322. package/auth/server/shared.ts +51 -0
  323. package/auth/server/signup.ts +423 -0
  324. package/auth/server/signupIpQuota.ts +44 -0
  325. package/auth/server/token.ts +109 -0
  326. package/auth/server/tokenUsageBilling.ts +312 -0
  327. package/auth/server/transfer.ts +40 -0
  328. package/auth/server/utils.ts +200 -0
  329. package/auth/sessionTokenVersion.ts +38 -0
  330. package/auth/token.ts +63 -0
  331. package/auth/tokenCookie.ts +1 -0
  332. package/auth/types.ts +28 -0
  333. package/auth/utils.ts +108 -0
  334. package/auth/web/bootstrapAuthState.ts +60 -0
  335. package/auth/web/tokenManager.ts +61 -0
  336. package/auth/web/useRegister.ts +70 -0
  337. package/build.ts +16 -0
  338. package/buildPublish.ts +133 -0
  339. package/buildPublishArtifactAssembly.ts +346 -0
  340. package/buildPublishImportAnalysis.ts +237 -0
  341. package/chat/chat.locale.ts +804 -0
  342. package/chat/dialog/actions/addCybotAction.ts +52 -0
  343. package/chat/dialog/actions/addReferenceKeysAction.ts +62 -0
  344. package/chat/dialog/actions/builtinDialogLlm.ts +35 -0
  345. package/chat/dialog/actions/cleanupCliSession.ts +40 -0
  346. package/chat/dialog/actions/compactDialogAndForkAction.ts +47 -0
  347. package/chat/dialog/actions/createDialogAction.ts +372 -0
  348. package/chat/dialog/actions/createScheduledTaskAction.ts +78 -0
  349. package/chat/dialog/actions/handleSendMessageAction.ts +197 -0
  350. package/chat/dialog/actions/handleSendMessageResolver.ts +29 -0
  351. package/chat/dialog/actions/removeCybotAction.ts +6 -0
  352. package/chat/dialog/actions/removeDialogAgentAction.ts +44 -0
  353. package/chat/dialog/actions/replacePrimaryCybotAction.ts +6 -0
  354. package/chat/dialog/actions/setPrimaryDialogAgentAction.ts +52 -0
  355. package/chat/dialog/actions/updateDialogSummaryAction.ts +405 -0
  356. package/chat/dialog/actions/updateDialogTitleAction.ts +151 -0
  357. package/chat/dialog/actions/updateDialogTitlePolicy.ts +30 -0
  358. package/chat/dialog/actions/updateTokensAction.ts +233 -0
  359. package/chat/dialog/dialogAgents.ts +54 -0
  360. package/chat/dialog/dialogPageRenderMode.ts +182 -0
  361. package/chat/dialog/dialogSlice.ts +872 -0
  362. package/chat/dialog/dialogTitle.ts +81 -0
  363. package/chat/dialog/dialogTokenStats.ts +12 -0
  364. package/chat/dialog/dialogUrl.ts +6 -0
  365. package/chat/dialog/ensureDialogSpaceAction.ts +208 -0
  366. package/chat/dialog/goal.ts +108 -0
  367. package/chat/dialog/hooks/useStreamingSymbol.ts +63 -0
  368. package/chat/dialog/objectAssistantRegistry.ts +286 -0
  369. package/chat/dialog/schedule.ts +17 -0
  370. package/chat/dialog/useCreateDialog.ts +52 -0
  371. package/chat/hooks/sendPermissionResolver.ts +128 -0
  372. package/chat/hooks/useChatInput.ts +99 -0
  373. package/chat/hooks/useChatInputSeed.ts +31 -0
  374. package/chat/hooks/useMessageInteraction.ts +412 -0
  375. package/chat/hooks/useSendPermission.ts +92 -0
  376. package/chat/hooks/useThinkingVisibility.ts +27 -0
  377. package/chat/messages/browserImageUrl.ts +48 -0
  378. package/chat/messages/deleteMessages.ts +47 -0
  379. package/chat/messages/fetchAndCacheMessages.ts +119 -0
  380. package/chat/messages/fetchConvMsgs.ts +51 -0
  381. package/chat/messages/fetchMessages.ts +84 -0
  382. package/chat/messages/fileUrl.ts +13 -0
  383. package/chat/messages/generateMessageKey.ts +21 -0
  384. package/chat/messages/hooks/useBase64Migration.ts +115 -0
  385. package/chat/messages/messageAgent.ts +8 -0
  386. package/chat/messages/messageContent.ts +199 -0
  387. package/chat/messages/messageContract.ts +88 -0
  388. package/chat/messages/messageSlice.ts +1191 -0
  389. package/chat/messages/pendingAttachmentParts.ts +117 -0
  390. package/chat/messages/sendFirstMessage.ts +193 -0
  391. package/chat/messages/toolPresentation.ts +212 -0
  392. package/chat/messages/toolThunks.ts +625 -0
  393. package/chat/messages/types.ts +176 -0
  394. package/chat/messages/web/ChatDisplayContext.ts +14 -0
  395. package/chat/messages/web/ToolMessageTypes.ts +23 -0
  396. package/chat/messages/web/diffViewerModel.ts +61 -0
  397. package/chat/messages/web/groupToolEntries.ts +44 -0
  398. package/chat/messages/web/groupToolMessages.ts +35 -0
  399. package/chat/messages/web/inlineReactArtifactParser.ts +63 -0
  400. package/chat/messages/web/toolDisplayName.ts +22 -0
  401. package/chat/messages/web/useLoopStopReason.ts +43 -0
  402. package/chat/messages/ziweiChartDoc.ts +94 -0
  403. package/chat/web/docxToSlate.ts +597 -0
  404. package/chat/web/fileProcessor.ts +442 -0
  405. package/chat/web/hooks/useProgressiveDisplayCount.ts +102 -0
  406. package/chat/web/messageInputAgentUi.ts +189 -0
  407. package/chat/web/messageInputKeyBehavior.ts +53 -0
  408. package/chat/web/messageInputMention.ts +102 -0
  409. package/chat/web/messageInputSendResolver.ts +51 -0
  410. package/chat/web/messageSlashCommands.ts +10 -0
  411. package/chat/web/pdfOcrProcessor.ts +131 -0
  412. package/chat/web/sidebar/allViewSearch.ts +87 -0
  413. package/chat/web/sidebar/types.ts +12 -0
  414. package/chat/web/sidebar/useChatSidebarFilteredData.ts +141 -0
  415. package/chat/web/sidebar/useSidebarDragAndDrop.ts +56 -0
  416. package/cliCommandFactories.ts +32 -0
  417. package/cliEnvHelpers.ts +96 -10
  418. package/cliIoTypes.ts +3 -0
  419. package/client/agentRun.ts +26 -229
  420. package/client/agentRunLocalExecution.test.ts +123 -0
  421. package/client/agentRunLocalExecution.ts +124 -0
  422. package/client/agentRunRuntimeSelection.test.ts +158 -0
  423. package/client/agentRunRuntimeSelection.ts +155 -0
  424. package/client/profileConfig.test.ts +66 -0
  425. package/client/profileConfig.ts +41 -0
  426. package/client/streamingOutput.ts +1 -3
  427. package/client/taskRunPrompt.ts +7 -24
  428. package/commandRegistry.ts +2 -2
  429. package/connector-experimental/daemonLauncher.ts +189 -0
  430. package/core/builtinAgents.ts +58 -0
  431. package/core/coin.ts +42 -0
  432. package/core/config.ts +15 -0
  433. package/core/crypto.ts +51 -0
  434. package/core/events/types.ts +145 -0
  435. package/core/generateKeyPairFromSeedV1.ts +15 -0
  436. package/core/generateMainKey.ts +22 -0
  437. package/core/init.ts +41 -0
  438. package/core/localOrigins.ts +8 -0
  439. package/core/password.ts +13 -0
  440. package/core/prefix.ts +23 -0
  441. package/create/editor/blockCommands.ts +118 -0
  442. package/create/editor/highlightExample.ts +66 -0
  443. package/create/editor/imageUpload.ts +66 -0
  444. package/create/editor/mark.ts +15 -0
  445. package/create/editor/plugins/normalizeChineseTypography.ts +85 -0
  446. package/create/editor/plugins/withBlockStructure.ts +53 -0
  447. package/create/editor/plugins/withChineseTypography.ts +61 -0
  448. package/create/editor/plugins/withLayout.ts +30 -0
  449. package/create/editor/plugins/withLinks.ts +13 -0
  450. package/create/editor/plugins/withMentions.ts +15 -0
  451. package/create/editor/plugins/withTables.ts +52 -0
  452. package/create/editor/tableCommands.ts +270 -0
  453. package/create/editor/theme/prism/default.ts +145 -0
  454. package/create/editor/theme/prism/githubDark.ts +139 -0
  455. package/create/editor/theme/prism/githubLight.ts +139 -0
  456. package/create/editor/theme/prism/index.ts +23 -0
  457. package/create/editor/theme/prism/okaidia.ts +197 -0
  458. package/create/editor/toolMentionOptions.ts +19 -0
  459. package/create/editor/transforms/fromMarkdown/index.ts +260 -0
  460. package/create/editor/transforms/fromMarkdown/inline.ts +285 -0
  461. package/create/editor/transforms/fromMarkdown/table.ts +130 -0
  462. package/create/editor/transforms/markdownToSlate.ts +24 -0
  463. package/create/editor/transforms/slateToRenderMarkdown.ts +218 -0
  464. package/create/editor/transforms/slateToSimplifiedMarkdown.ts +224 -0
  465. package/create/editor/transforms/slateToText.ts +33 -0
  466. package/create/editor/types.ts +120 -0
  467. package/create/editor/utils/editorFactory.ts +54 -0
  468. package/create/editor/utils/hasPlainCodeBlock.ts +39 -0
  469. package/create/editor/utils/linkCommands.ts +63 -0
  470. package/create/editor/utils/pdfToSlate.ts +706 -0
  471. package/create/editor/utils/slateUtils.ts +233 -0
  472. package/create/editor/utils/txtToSlate.ts +40 -0
  473. package/create/hooks/category.ts +82 -0
  474. package/create/routePaths.ts +5 -0
  475. package/create/space/addSpaceAction.ts +193 -0
  476. package/create/space/category/categoryActions.ts +427 -0
  477. package/create/space/changeSpaceAction.ts +36 -0
  478. package/create/space/constants.ts +8 -0
  479. package/create/space/content/addContentAction.ts +116 -0
  480. package/create/space/content/contentThunks.ts +90 -0
  481. package/create/space/content/deleteContentFromSpaceAction.ts +187 -0
  482. package/create/space/content/deleteMultipleContentAction.ts +112 -0
  483. package/create/space/content/moveContentAction.ts +285 -0
  484. package/create/space/content/updateContentCategoryAction.ts +154 -0
  485. package/create/space/content/updateContentTitleAction.ts +106 -0
  486. package/create/space/content/uploadAndAddFileToSpaceAction.ts +98 -0
  487. package/create/space/contentKeyUtils.ts +117 -0
  488. package/create/space/contentLabels.ts +56 -0
  489. package/create/space/contentTypeMeta.ts +169 -0
  490. package/create/space/deleteSpaceAction.ts +276 -0
  491. package/create/space/fetchSpaceAction.ts +70 -0
  492. package/create/space/fetchSpaceSidebarStateAction.ts +26 -0
  493. package/create/space/hooks/agentFetchRetry.ts +19 -0
  494. package/create/space/hooks/useAgentFetcher.ts +149 -0
  495. package/create/space/hooks/useGroupedContent.ts +118 -0
  496. package/create/space/hooks/useSpaceEvents.ts +43 -0
  497. package/create/space/initialSpace.ts +78 -0
  498. package/create/space/loadDefaultSpaceAction.ts +57 -0
  499. package/create/space/member/addMemberAction.ts +79 -0
  500. package/create/space/member/fetchUserSpaceMembershipsAction.ts +386 -0
  501. package/create/space/member/memberThunks.ts +47 -0
  502. package/create/space/member/removeMemberAction.ts +67 -0
  503. package/create/space/publicCatalogSpace.ts +39 -0
  504. package/create/space/resolvePreferredSpaceId.ts +113 -0
  505. package/create/space/sidebarVisibleTypes.ts +214 -0
  506. package/create/space/space.locale.ts +981 -0
  507. package/create/space/spaceAccess.ts +182 -0
  508. package/create/space/spaceCollapsedState.ts +54 -0
  509. package/create/space/spaceKeys.ts +65 -0
  510. package/create/space/spaceSlice.ts +328 -0
  511. package/create/space/spaceThunks.ts +410 -0
  512. package/create/space/types.ts +27 -0
  513. package/create/space/updateSpaceAction.ts +107 -0
  514. package/create/space/utils/permissions.ts +47 -0
  515. package/create/space/validateSpacePermission.ts +38 -0
  516. package/create/types.ts +21 -0
  517. package/create/version/appVersionReplication.ts +160 -0
  518. package/create/version/versionApi.ts +142 -0
  519. package/customCodingAgentFlow.ts +208 -0
  520. package/customCodingAgentRecord.ts +179 -0
  521. package/database/actions/agentReadResolution.ts +33 -0
  522. package/database/actions/cacheMergedUserData.ts +1 -1
  523. package/database/actions/common.ts +44 -8
  524. package/database/actions/fetchUserData.ts +1 -1
  525. package/database/actions/fileContent.ts +3 -3
  526. package/database/actions/patch.ts +3 -3
  527. package/database/actions/read.ts +115 -76
  528. package/database/actions/readAndWait.ts +54 -86
  529. package/database/actions/readOutcome.ts +45 -0
  530. package/database/actions/readResolution.ts +102 -0
  531. package/database/actions/remove.ts +2 -2
  532. package/database/actions/upload.ts +4 -4
  533. package/database/actions/upsert.ts +2 -2
  534. package/database/actions/write.ts +4 -4
  535. package/database/client/handleError.ts +1 -1
  536. package/database/client/queryRequest.ts +1 -1
  537. package/database/dbSlice.ts +2 -2
  538. package/database/email.ts +1 -1
  539. package/database/hooks/useUserData.ts +4 -4
  540. package/database/keys.ts +2 -2
  541. package/database/runtimeServerContext.ts +3 -3
  542. package/database/server/actorAccess.ts +1 -1
  543. package/database/server/cybotReadonly.ts +1 -1
  544. package/database/server/dataHandlers.ts +1 -1
  545. package/database/server/delete.ts +8 -8
  546. package/database/server/emailRepository.ts +7 -7
  547. package/database/server/fileService.ts +1 -1
  548. package/database/server/handleTransaction.ts +2 -2
  549. package/database/server/patch.ts +3 -3
  550. package/database/server/read.ts +5 -5
  551. package/database/server/resourceAccess.ts +2 -2
  552. package/database/server/routes.ts +3 -3
  553. package/database/server/write.ts +5 -5
  554. package/database/table/deleteTable.ts +1 -1
  555. package/database/userPreferenceRegister.ts +2 -2
  556. package/dialogDataAccess.ts +186 -0
  557. package/dialogInternalCommandEntries.ts +11 -0
  558. package/dialogReadCommands.ts +179 -0
  559. package/dialogReadHelpers.ts +226 -0
  560. package/dialogStatusCommands.ts +122 -0
  561. package/docInternalCommandEntries.ts +20 -0
  562. package/hybridReadHelpers.ts +109 -0
  563. package/index.ts +2 -6
  564. package/integrations/anthropic/anthropicModels.ts +47 -0
  565. package/integrations/anthropic/type.ts +41 -0
  566. package/integrations/deepseek/models.ts +67 -0
  567. package/integrations/google/models.ts +298 -0
  568. package/integrations/openai/chatCompletionStreamMode.ts +10 -0
  569. package/integrations/openai/filterAndCleanMessages.ts +284 -0
  570. package/integrations/openai/flexTier.ts +102 -0
  571. package/integrations/openai/generateOpenAIRequestBody.ts +274 -0
  572. package/integrations/openai/generateResponseRequestBody.ts +77 -0
  573. package/integrations/openai/models.ts +271 -0
  574. package/integrations/openai/providerBodyCompatibility.ts +23 -0
  575. package/integrations/openai/responsesHelpers.ts +297 -0
  576. package/integrations/postmark/index.ts +57 -0
  577. package/integrations/resend/index.ts +353 -0
  578. package/integrations/weather/getWeather.ts +24 -0
  579. package/integrations/weather/index.ts +6 -0
  580. package/integrations/weather/routes.ts +31 -0
  581. package/integrations/weather/weatherApi.ts +27 -0
  582. package/integrations/weather/weatherConstants.ts +2 -0
  583. package/integrations/weather/weatherI18n.ts +50 -0
  584. package/integrations/weather/weatherService.ts +50 -0
  585. package/integrations/weather/weatherTypes.ts +140 -0
  586. package/integrations/weather/weatherUtils.ts +46 -0
  587. package/integrations/x-reader/backends/localBrowser.ts +215 -0
  588. package/integrations/x-reader/backends/publicFallback.ts +31 -0
  589. package/integrations/x-reader/backends/rawCdp.ts +218 -0
  590. package/integrations/x-reader/bridge/chromeBridgeManager.ts +235 -0
  591. package/integrations/x-reader/bridge/readXPostWithBridge.ts +73 -0
  592. package/integrations/x-reader/fixtureParser.ts +101 -0
  593. package/integrations/x-reader/index.ts +9 -0
  594. package/integrations/x-reader/redaction.ts +27 -0
  595. package/integrations/x-reader/types.ts +109 -0
  596. package/integrations/x-reader/visibleTextParser.ts +108 -0
  597. package/integrations/xai/models.ts +13 -0
  598. package/internalCommandEntries.ts +8 -0
  599. package/machineCommandPrompts.ts +77 -0
  600. package/machineCommandResolution.ts +43 -0
  601. package/machineCommands.ts +89 -1107
  602. package/machineDaemonCommands.ts +29 -0
  603. package/machineHeartbeatCommands.ts +29 -0
  604. package/machineStatusCommands.ts +95 -0
  605. package/machineWatchCommands.ts +41 -0
  606. package/machineWsPromptMaterialization.ts +89 -0
  607. package/machineWsRunDispatch.ts +570 -0
  608. package/machineWsSession.ts +148 -0
  609. package/package.json +109 -5
  610. package/pageCreateCommands.ts +219 -0
  611. package/pageDeleteCommands.ts +167 -0
  612. package/pageReadCommands.ts +151 -0
  613. package/pageUpdateCommands.ts +249 -0
  614. package/pageWriteHelpers.ts +209 -0
  615. package/publishPackage.ts +36 -0
  616. package/render/canvas/canvasEditContext.ts +1 -1
  617. package/render/layout/mainLayoutViewMode.ts +1 -1
  618. package/render/page/createPageAction.ts +12 -12
  619. package/render/page/docSlice.ts +8 -8
  620. package/render/page/server/createPage.ts +7 -7
  621. package/render/page/server/handleCreatePage.ts +2 -2
  622. package/render/page/types.ts +2 -2
  623. package/render/surf/utils/groupedWeatherData.ts +1 -1
  624. package/render/table/createTableAction.ts +7 -7
  625. package/render/table/deleteTableAction.ts +4 -4
  626. package/render/table/fetchAndCacheTableRows.ts +2 -2
  627. package/render/table/tableSlice.ts +6 -6
  628. package/render/table/types.ts +1 -1
  629. package/render/table/useCreateTable.ts +2 -2
  630. package/render/table/useTable.ts +2 -2
  631. package/render/table/utils/tableSerialization.ts +1 -1
  632. package/runtimeInternalCommandEntries.ts +15 -0
  633. package/runtimePassthroughCommands.ts +22 -0
  634. package/scriptCommandEntries.ts +5 -45
  635. package/scriptPassthroughHelpers.ts +28 -0
  636. package/secretScanHelpers.ts +31 -0
  637. package/server/agentEmailRegistrationRoutes.ts +29 -0
  638. package/server/agentRunRouteContract.ts +9 -0
  639. package/server/agentRunRoutes.ts +10 -0
  640. package/server/api/methods.ts +333 -0
  641. package/server/api/tableHandlers.ts +55 -0
  642. package/server/api/types.ts +27 -0
  643. package/server/apiContract.ts +88 -0
  644. package/server/apiRouteAdapter.ts +218 -0
  645. package/server/appBundler.ts +90 -0
  646. package/server/appRoutes.ts +92 -0
  647. package/server/artifactIconsRoute.ts +89 -0
  648. package/server/artifactRuntimeRoute.ts +136 -0
  649. package/server/authenticateToken.ts +73 -0
  650. package/server/billingLedgerRoutes.ts +48 -0
  651. package/server/cliChatRoutes.ts +5 -0
  652. package/server/cloudflareRoutes.ts +35 -0
  653. package/server/coreHeaders.ts +29 -0
  654. package/server/coreReadiness.ts +39 -0
  655. package/server/coreRoutes.ts +65 -0
  656. package/server/coreRuntime.ts +93 -0
  657. package/server/createResponse.ts +68 -0
  658. package/server/cryptoPaymentRoutes.ts +8 -0
  659. package/server/databaseRoutes.ts +225 -0
  660. package/server/desktopRuntimeRoutes.ts +120 -0
  661. package/server/devBuildInfo.ts +51 -0
  662. package/server/devReload.ts +161 -0
  663. package/server/devToolPathPolicy.ts +59 -0
  664. package/server/devToolRoutes.ts +274 -0
  665. package/server/email/cloudflareEmailProvider.ts +119 -0
  666. package/server/email/cloudflareInboundBridge.ts +121 -0
  667. package/server/email/cloudflareInboundWorker.ts +28 -0
  668. package/server/email/provider.ts +149 -0
  669. package/server/email/providerRegistry.ts +22 -0
  670. package/server/emailInboundRoutes.ts +17 -0
  671. package/server/entry.ts +211 -0
  672. package/server/handleRPCRequest.ts +117 -0
  673. package/server/handlers/activityStatsHandler.ts +74 -0
  674. package/server/handlers/agentEmailRegistrationE2EHandler.ts +406 -0
  675. package/server/handlers/agentEmailRegistrationE2ERoutes.ts +6 -0
  676. package/server/handlers/agentRun/agentLookup.ts +77 -0
  677. package/server/handlers/agentRun/autonomousRuntime.ts +355 -0
  678. package/server/handlers/agentRun/backgroundRunDialog.ts +31 -0
  679. package/server/handlers/agentRun/builtinAgents.ts +347 -0
  680. package/server/handlers/agentRun/continueDialogContext.ts +90 -0
  681. package/server/handlers/agentRun/debugContext.ts +58 -0
  682. package/server/handlers/agentRun/dialogLookup.ts +67 -0
  683. package/server/handlers/agentRun/foregroundStreamDialog.ts +13 -0
  684. package/server/handlers/agentRun/index.ts +1630 -0
  685. package/server/handlers/agentRun/inheritedDialogPrompt.ts +111 -0
  686. package/server/handlers/agentRun/localRuntimeBootstrap.ts +69 -0
  687. package/server/handlers/agentRun/loop.ts +2210 -0
  688. package/server/handlers/agentRun/machineConnector.ts +235 -0
  689. package/server/handlers/agentRun/machineRunAudit.ts +49 -0
  690. package/server/handlers/agentRun/modelUsageToolHandlers.ts +368 -0
  691. package/server/handlers/agentRun/referenceRuntime.ts +50 -0
  692. package/server/handlers/agentRun/requestContext.ts +86 -0
  693. package/server/handlers/agentRun/response.ts +27 -0
  694. package/server/handlers/agentRun/runBilling.ts +108 -0
  695. package/server/handlers/agentRun/runDialogPreparation.ts +55 -0
  696. package/server/handlers/agentRun/runtimeBinding.ts +61 -0
  697. package/server/handlers/agentRun/runtimeContext.ts +143 -0
  698. package/server/handlers/agentRun/runtimeExecutionContext.ts +153 -0
  699. package/server/handlers/agentRun/runtimePreparation.ts +193 -0
  700. package/server/handlers/agentRun/runtimeRouting.ts +88 -0
  701. package/server/handlers/agentRun/runtimeSystemMessages.ts +165 -0
  702. package/server/handlers/agentRun/saveDialog.ts +1373 -0
  703. package/server/handlers/agentRun/syncRunDialog.ts +90 -0
  704. package/server/handlers/agentRun/tableActivityProjection.ts +132 -0
  705. package/server/handlers/agentRun/taskRunControlPrompt.ts +122 -0
  706. package/server/handlers/agentRun/taskRunToolHandler.ts +579 -0
  707. package/server/handlers/agentRun/toolExecutor.ts +2909 -0
  708. package/server/handlers/agentRun/toolPolicyGuards.ts +295 -0
  709. package/server/handlers/agentRun/types.ts +94 -0
  710. package/server/handlers/agentRun/workspaceLease.ts +58 -0
  711. package/server/handlers/alphaTestRouteGuard.ts +30 -0
  712. package/server/handlers/apifyActorHandler.ts +170 -0
  713. package/server/handlers/appDeployFlow.ts +876 -0
  714. package/server/handlers/appDeployHandler.ts +4 -0
  715. package/server/handlers/appDeployMutationHandlers.ts +133 -0
  716. package/server/handlers/appDeployReadHandlers.ts +321 -0
  717. package/server/handlers/appDeployShared.ts +230 -0
  718. package/server/handlers/appDeployStatusStore.ts +178 -0
  719. package/server/handlers/appDomainHandler.ts +476 -0
  720. package/server/handlers/appLegacyInfraCleanup.ts +7 -0
  721. package/server/handlers/appSandboxHandler.ts +1055 -0
  722. package/server/handlers/appSourceReadiness.ts +75 -0
  723. package/server/handlers/appSpaceAccess.ts +179 -0
  724. package/server/handlers/applyEditHandler.ts +544 -0
  725. package/server/handlers/applyLineEditsHandler.ts +1058 -0
  726. package/server/handlers/billingLedgerAuditHandler.ts +82 -0
  727. package/server/handlers/billingLedgerWitnessHandler.ts +161 -0
  728. package/server/handlers/billingUsageReportHandler.ts +90 -0
  729. package/server/handlers/browserToolHandler.ts +450 -0
  730. package/server/handlers/cfTextToSpeechHandler.ts +137 -0
  731. package/server/handlers/cfWhisperHandler.ts +206 -0
  732. package/server/handlers/chatBillingSse.ts +79 -0
  733. package/server/handlers/chatHandler.ts +797 -0
  734. package/server/handlers/chatProxyRouting.ts +404 -0
  735. package/server/handlers/chatUpstreamRetry.ts +162 -0
  736. package/server/handlers/checkEnvHandler.ts +250 -0
  737. package/server/handlers/cliChatHandler.ts +266 -0
  738. package/server/handlers/cloudflareBrowserHandler.ts +275 -0
  739. package/server/handlers/cloudflareCrawlHandler.ts +260 -0
  740. package/server/handlers/codeSearchHandler.ts +484 -0
  741. package/server/handlers/connector/connectorConnectionRegistry.ts +192 -0
  742. package/server/handlers/connector/connectorWebSocket.ts +117 -0
  743. package/server/handlers/creatorEarningsReportHandler.ts +97 -0
  744. package/server/handlers/creatorSettlementReportHandler.ts +98 -0
  745. package/server/handlers/deepseekOcrHandler.ts +114 -0
  746. package/server/handlers/deleteMemoryHandler.ts +115 -0
  747. package/server/handlers/desktopAgentRuntimeAdapter.ts +307 -0
  748. package/server/handlers/desktopAgentRuntimeHostFacts.ts +40 -0
  749. package/server/handlers/desktopAgentRuntimeStatusHandler.ts +54 -0
  750. package/server/handlers/desktopAgentRuntimeTurnHandler.ts +165 -0
  751. package/server/handlers/desktopAgentRuntimeTurnService.ts +352 -0
  752. package/server/handlers/desktopClipboardHandler.ts +104 -0
  753. package/server/handlers/desktopFiles/handler.ts +159 -0
  754. package/server/handlers/desktopFiles/operations.ts +202 -0
  755. package/server/handlers/desktopFiles/sandbox.ts +62 -0
  756. package/server/handlers/desktopFiles/store.ts +81 -0
  757. package/server/handlers/desktopLlamaRuntimeHandler.ts +360 -0
  758. package/server/handlers/desktopLocalConnectorHandler.ts +101 -0
  759. package/server/handlers/desktopUpdaterHandler.ts +132 -0
  760. package/server/handlers/dialogEvents.ts +10 -0
  761. package/server/handlers/emailInboundHandler.ts +65 -0
  762. package/server/handlers/eventBus.ts +160 -0
  763. package/server/handlers/exaSearchHandler.ts +73 -0
  764. package/server/handlers/execShellHandler.ts +661 -0
  765. package/server/handlers/favoriteHandlers.ts +417 -0
  766. package/server/handlers/fetchWebpageHandler.ts +117 -0
  767. package/server/handlers/fileOutlineHandler.ts +107 -0
  768. package/server/handlers/geminiImagePreviewHandler.ts +612 -0
  769. package/server/handlers/getDialogBillingHandler.ts +151 -0
  770. package/server/handlers/getTransactionsHandler.ts +107 -0
  771. package/server/handlers/googleNativeChat.ts +572 -0
  772. package/server/handlers/listFilesHandler.ts +139 -0
  773. package/server/handlers/machines/machineAuth.ts +149 -0
  774. package/server/handlers/machines/machineBinding.ts +59 -0
  775. package/server/handlers/machines/machineHandlers.ts +279 -0
  776. package/server/handlers/machines/machineInstallAssets.ts +563 -0
  777. package/server/handlers/machines/machineRegistry.ts +89 -0
  778. package/server/handlers/notificationEmitter.ts +189 -0
  779. package/server/handlers/notificationsHandler.ts +91 -0
  780. package/server/handlers/olmOcrHandler.ts +115 -0
  781. package/server/handlers/openaiImageHandler.ts +500 -0
  782. package/server/handlers/providerHealthHandler.ts +36 -0
  783. package/server/handlers/publicHandler.ts +209 -0
  784. package/server/handlers/readFileHandler.ts +300 -0
  785. package/server/handlers/readXPostHandler.ts +180 -0
  786. package/server/handlers/rememberMemoryHandler.ts +69 -0
  787. package/server/handlers/remotionRenderHandler.ts +236 -0
  788. package/server/handlers/renderMarkdownHandler.ts +66 -0
  789. package/server/handlers/revenueShareReportHandler.ts +96 -0
  790. package/server/handlers/searchRepoHandler.ts +159 -0
  791. package/server/handlers/tableAccess.ts +34 -0
  792. package/server/handlers/tableToolHandlers.ts +741 -0
  793. package/server/handlers/typecheckWorker.ts +54 -0
  794. package/server/handlers/userEvents.ts +6 -0
  795. package/server/handlers/userSecretsHandler.ts +210 -0
  796. package/server/handlers/versionHandler.ts +281 -0
  797. package/server/handlers/versionStore.ts +176 -0
  798. package/server/handlers/wereadGatewayHandler.ts +48 -0
  799. package/server/handlers/whisperHandler.ts +158 -0
  800. package/server/handlers/writeFileHandler.ts +168 -0
  801. package/server/html/desktopReleaseManifest.server.ts +17 -0
  802. package/server/html/generateErrorResponse.ts +22 -0
  803. package/server/html/serializeState.ts +9 -0
  804. package/server/html/ssrPreload.ts +247 -0
  805. package/server/html/template.ts +275 -0
  806. package/server/httpCompression.ts +102 -0
  807. package/server/index.ts +0 -0
  808. package/server/liveReloadScript.ts +105 -0
  809. package/server/luIconNames.ts +14 -0
  810. package/server/machineRoutes.ts +44 -0
  811. package/server/mediaRoutes.ts +25 -0
  812. package/server/memoryRoutes.ts +14 -0
  813. package/server/normalizedStatusRoutes.ts +23 -0
  814. package/server/payments/crypto/cryptoUsdcBaseAddressPool.ts +49 -0
  815. package/server/payments/crypto/cryptoUsdcBaseConfig.ts +120 -0
  816. package/server/payments/crypto/cryptoUsdcBasePaymentProvider.ts +134 -0
  817. package/server/payments/crypto/cryptoUsdcBaseScanner.ts +267 -0
  818. package/server/payments/crypto/cryptoUsdcBaseWatcher.ts +40 -0
  819. package/server/payments/crypto/cryptoUsdtTronAddressPool.ts +49 -0
  820. package/server/payments/crypto/cryptoUsdtTronConfig.ts +120 -0
  821. package/server/payments/crypto/cryptoUsdtTronPaymentProvider.ts +132 -0
  822. package/server/payments/crypto/cryptoUsdtTronScanner.ts +313 -0
  823. package/server/payments/crypto/cryptoUsdtTronWatcher.ts +40 -0
  824. package/server/payments/paymentProvider.ts +6 -0
  825. package/server/payments/paymentRoutes.ts +27 -0
  826. package/server/payments/rechargeCredits.ts +69 -0
  827. package/server/payments/waffo/waffoPaymentProvider.ts +341 -0
  828. package/server/preview/previewCapability.ts +90 -0
  829. package/server/preview/previewConfig.ts +54 -0
  830. package/server/preview/previewGateway.ts +71 -0
  831. package/server/preview/previewRealtime.ts +33 -0
  832. package/server/providerHealthProbe.ts +198 -0
  833. package/server/providerHealthRoutes.ts +19 -0
  834. package/server/publicPaths.ts +12 -0
  835. package/server/publicRequestHandler.ts +15 -0
  836. package/server/reactAppBuilder.ts +416 -0
  837. package/server/realtimeRoutes.ts +69 -0
  838. package/server/renderStream.ts +20 -0
  839. package/server/routeFactory.ts +45 -0
  840. package/server/routes.ts +125 -0
  841. package/server/safeTempFile.ts +48 -0
  842. package/server/scheduler/scheduledTaskRuntime.ts +228 -0
  843. package/server/scheduler/schedulerService.ts +290 -0
  844. package/server/serverDrain.ts +129 -0
  845. package/server/services/browserSessionManager.ts +354 -0
  846. package/server/shareRoutes.ts +86 -0
  847. package/server/sqliteRoutes.ts +141 -0
  848. package/server/taskRunBridgeRoutes.ts +95 -0
  849. package/server/tasks.ts +113 -0
  850. package/server/waffoPaymentRoutes.ts +5 -0
  851. package/server/webUtilityRoutes.ts +50 -0
  852. package/server/workerValidator.ts +224 -0
  853. package/share/action.ts +225 -0
  854. package/share/clientTableReplication.ts +160 -0
  855. package/share/helpers.ts +302 -0
  856. package/share/keys.ts +243 -0
  857. package/share/link.ts +40 -0
  858. package/share/loadOwnerShares.ts +154 -0
  859. package/share/paidAccess.ts +32 -0
  860. package/share/publicSharePolicy.ts +27 -0
  861. package/share/server/fetchCommunityShares.ts +45 -0
  862. package/share/server/helpers.ts +202 -0
  863. package/share/server/importShare.ts +148 -0
  864. package/share/server/listCommunityShares.ts +167 -0
  865. package/share/server/purchaseDoc.ts +224 -0
  866. package/share/server/readCommunityShareCover.ts +73 -0
  867. package/share/server/readSharedTable.ts +139 -0
  868. package/share/server/tableReplication.ts +351 -0
  869. package/share/shareSlice.ts +53 -0
  870. package/share/tableShareState.ts +74 -0
  871. package/share/types.ts +100 -0
  872. package/spaceCategoryCommands.ts +263 -0
  873. package/spaceCommands.ts +295 -0
  874. package/spaceDeleteCommands.ts +312 -0
  875. package/spaceInternalCommandEntries.ts +19 -0
  876. package/spaceMutationHelpers.ts +135 -0
  877. package/spaceReadCommands.ts +323 -0
  878. package/systemInternalCommandEntries.ts +16 -22
  879. package/tableCommands.ts +33 -133
  880. package/tableDataOutput.ts +41 -0
  881. package/tableDataSafety.ts +26 -0
  882. package/tableMetaCommands.ts +307 -0
  883. package/tableMutationCommands.ts +266 -0
  884. package/tableQueryParsing.ts +90 -0
  885. package/tableQueryRequest.ts +53 -0
  886. package/taskRunActions.ts +122 -0
  887. package/taskRunCommand.ts +8 -214
  888. package/taskRunParsing.ts +86 -0
  889. package/taskRunPromptShared.ts +55 -0
  890. package/tui/session.ts +43 -372
  891. package/tui/tuiCatalog.ts +22 -0
  892. package/tui/tuiCommandInterpreter.test.ts +169 -0
  893. package/tui/tuiCommandInterpreter.ts +253 -0
  894. package/tui/tuiPresentation.test.ts +154 -0
  895. package/tui/tuiPresentation.ts +146 -0
  896. package/workflowInternalCommandEntries.ts +20 -0
  897. package/offlineMarxistsAgentCommand.ts +0 -314
@@ -0,0 +1,741 @@
1
+ import serverDb, { ensureServerDbOpen } from "../../database/server/db";
2
+ import { metaKey, rowKey } from "../../database/keys";
3
+ import { ulid } from "../../database/utils/ulid";
4
+ import { DataType } from "../../create/types";
5
+ import { handleToken } from "../../auth/server/token";
6
+ import {
7
+ applyRowFilters,
8
+ formatKnownColumns,
9
+ normalizeRowValues,
10
+ pickRowColumns,
11
+ sortRows,
12
+ } from "../../render/table/toolValueUtils";
13
+ import type { TableColumn, TableMeta } from "../../render/table/types";
14
+ import { assertCanReadTableRows } from "./tableAccess";
15
+
16
+ const CORS_HEADERS = {
17
+ "Access-Control-Allow-Origin": "*",
18
+ "Access-Control-Allow-Methods": "POST, OPTIONS",
19
+ "Access-Control-Allow-Headers": "Content-Type, Authorization",
20
+ "Content-Type": "application/json",
21
+ };
22
+
23
+ type ColumnType =
24
+ | "text"
25
+ | "number"
26
+ | "boolean"
27
+ | "date"
28
+ | "datetime"
29
+ | "select"
30
+ | "multi_select";
31
+
32
+ type ToolTableColumnInput = {
33
+ name: string;
34
+ label?: string;
35
+ type?: ColumnType;
36
+ description?: string;
37
+ required?: boolean;
38
+ options?: string[];
39
+ };
40
+
41
+ function jsonResponse(body: unknown, status = 200) {
42
+ return new Response(JSON.stringify(body), { status, headers: CORS_HEADERS });
43
+ }
44
+
45
+ async function getAuthedUserId(req: Request): Promise<string> {
46
+ const authReq: any = {
47
+ headers: {
48
+ get: (name: string) => req.headers.get(name),
49
+ },
50
+ };
51
+ const user = await handleToken(authReq, {});
52
+ const userId = user?.userId;
53
+ if (!userId) {
54
+ throw new Error("Unauthorized: userId not found");
55
+ }
56
+ return userId;
57
+ }
58
+
59
+ async function getOptionalAuthedUserId(req: Request): Promise<string | null> {
60
+ const authHeader = req.headers.get("Authorization");
61
+ if (!authHeader) return null;
62
+
63
+ const authReq: any = {
64
+ headers: {
65
+ get: (name: string) => req.headers.get(name),
66
+ },
67
+ };
68
+ const user = await handleToken(authReq, {});
69
+ const userId = user?.userId;
70
+ return typeof userId === "string" && userId ? userId : null;
71
+ }
72
+
73
+ function sanitizeColumns(input: unknown): ToolTableColumnInput[] {
74
+ const columns = Array.isArray(input) ? input : [];
75
+ const seen = new Set<string>();
76
+ const sanitized: ToolTableColumnInput[] = [];
77
+
78
+ for (const col of columns) {
79
+ if (!col || typeof col !== "object" || Array.isArray(col)) continue;
80
+ const rawName = typeof (col as any).name === "string" ? (col as any).name.trim() : "";
81
+ if (!rawName || seen.has(rawName)) continue;
82
+ seen.add(rawName);
83
+
84
+ const item: ToolTableColumnInput = { name: rawName };
85
+ if (typeof (col as any).label === "string" && (col as any).label.trim()) {
86
+ item.label = (col as any).label.trim();
87
+ }
88
+ if (typeof (col as any).type === "string") {
89
+ item.type = (col as any).type as ColumnType;
90
+ } else {
91
+ item.type = "text";
92
+ }
93
+ if (typeof (col as any).description === "string" && (col as any).description.trim()) {
94
+ item.description = (col as any).description.trim();
95
+ }
96
+ if (typeof (col as any).required === "boolean") {
97
+ item.required = (col as any).required;
98
+ }
99
+ if (Array.isArray((col as any).options)) {
100
+ const options = (col as any).options
101
+ .map((value: unknown) => (typeof value === "string" ? value.trim() : ""))
102
+ .filter(Boolean);
103
+ if (options.length) item.options = options;
104
+ }
105
+ sanitized.push(item);
106
+ }
107
+
108
+ if (!sanitized.length) {
109
+ throw new Error("createTable.columns 中没有任何有效字段,请至少提供一个非空 name。");
110
+ }
111
+
112
+ return sanitized;
113
+ }
114
+
115
+ async function loadTableMetaOrThrow(tenantId: string, tableId: string): Promise<TableMeta> {
116
+ const tableMetaKey = metaKey(tenantId, tableId);
117
+ const tableMeta = await serverDb.get(tableMetaKey).catch(() => null);
118
+ if (!tableMeta) {
119
+ throw new Error(`Table not found: ${tableMetaKey}`);
120
+ }
121
+ return tableMeta as TableMeta;
122
+ }
123
+
124
+ function ensureTenantAccess(userId: string, tenantId: string) {
125
+ if (!tenantId) throw new Error("tenantId 必传。");
126
+ if (tenantId !== userId) {
127
+ throw new Error("Forbidden: tenantId mismatch");
128
+ }
129
+ }
130
+
131
+ function resolveRowDbKey(tenantId: string, tableId: string, rowId?: string, dbKey?: string): string {
132
+ if (dbKey && dbKey.trim()) return dbKey.trim();
133
+ if (rowId && rowId.trim()) return rowKey.single(tenantId, tableId, rowId.trim());
134
+ throw new Error("需要提供 rowId 或 dbKey。");
135
+ }
136
+
137
+ async function loadTableRows(tenantId: string, tableId: string): Promise<any[]> {
138
+ const { gte, lte } = rowKey.range(tenantId, tableId);
139
+ const rows: any[] = [];
140
+ for await (const [, value] of serverDb.iterator({ gte, lte })) {
141
+ if (value?.type === DataType.TABLE_ROW && !value?.deletedAt) {
142
+ rows.push(value);
143
+ }
144
+ }
145
+ return rows;
146
+ }
147
+
148
+ async function loadRowOrThrow(tenantId: string, tableId: string, rowId?: string, dbKey?: string) {
149
+ const finalDbKey = resolveRowDbKey(tenantId, tableId, rowId, dbKey);
150
+ const row = await serverDb.get(finalDbKey).catch(() => null);
151
+ if (!row || row.deletedAt) {
152
+ throw new Error(`找不到要操作的行:${rowId || finalDbKey}`);
153
+ }
154
+ return row;
155
+ }
156
+
157
+ async function loadRowByDbKey(dbKey: unknown) {
158
+ const normalized = typeof dbKey === "string" && dbKey.trim() ? dbKey.trim() : "";
159
+ if (!normalized) return null;
160
+ const row = await serverDb.get(normalized).catch(() => null);
161
+ if (!row || row.deletedAt || row.type !== DataType.TABLE_ROW) return null;
162
+ return row;
163
+ }
164
+
165
+ function normalizeColumnInput(body: any): TableColumn {
166
+ const name = typeof body.name === "string" ? body.name.trim() : "";
167
+ if (!name) {
168
+ throw new Error("列名不能为空。");
169
+ }
170
+ return {
171
+ id: ulid(),
172
+ name,
173
+ label: typeof body.label === "string" && body.label.trim() ? body.label.trim() : name,
174
+ type: typeof body.type === "string" ? (body.type as ColumnType) : "text",
175
+ description:
176
+ typeof body.description === "string" && body.description.trim()
177
+ ? body.description.trim()
178
+ : undefined,
179
+ required: typeof body.required === "boolean" ? body.required : undefined,
180
+ options: Array.isArray(body.options)
181
+ ? body.options
182
+ .map((value: unknown) => (typeof value === "string" ? value.trim() : ""))
183
+ .filter(Boolean)
184
+ : undefined,
185
+ };
186
+ }
187
+
188
+ export async function handleCreateTable(req: Request): Promise<Response> {
189
+ try {
190
+ await ensureServerDbOpen();
191
+ const userId = await getAuthedUserId(req);
192
+ const body = await req.json().catch(() => ({} as any));
193
+ const columns = sanitizeColumns(body.columns);
194
+ const tableId = ulid();
195
+ const dbKey = metaKey(userId, tableId);
196
+ const now = new Date().toISOString();
197
+ const title =
198
+ typeof body.title === "string" && body.title.trim() ? body.title.trim() : "新建表格";
199
+ const description =
200
+ typeof body.description === "string" && body.description.trim()
201
+ ? body.description.trim()
202
+ : undefined;
203
+ const tags = Array.isArray(body.tags)
204
+ ? body.tags
205
+ .map((value: unknown) => (typeof value === "string" ? value.trim() : ""))
206
+ .filter(Boolean)
207
+ : undefined;
208
+ const categoryId =
209
+ typeof body.categoryId === "string" && body.categoryId.trim()
210
+ ? body.categoryId.trim()
211
+ : undefined;
212
+ const spaceId =
213
+ typeof body.spaceId === "string" && body.spaceId.trim() ? body.spaceId.trim() : null;
214
+
215
+ const tableMeta = {
216
+ dbKey,
217
+ tenantId: userId,
218
+ tableId,
219
+ spaceId,
220
+ displayName: title,
221
+ description,
222
+ tags,
223
+ schemaVersion: 1,
224
+ columns,
225
+ views: [],
226
+ triggers: [],
227
+ aiConfig: undefined,
228
+ createdAt: now,
229
+ updatedAt: now,
230
+ type: DataType.TABLE,
231
+ ...(categoryId ? { categoryId } : {}),
232
+ };
233
+
234
+ await serverDb.put(dbKey, tableMeta);
235
+
236
+ return jsonResponse({
237
+ rawData: tableMeta,
238
+ displayData:
239
+ `已创建新表「${title}」(tableId: ${tableId})。\n` +
240
+ `tenantId=${userId}\n` +
241
+ `字段列表:${columns.map((column) => column.name).join(", ")}\n\n` +
242
+ `接下来调用 addTableRow 时,请传入:\n` +
243
+ `{\n` +
244
+ ` "tenantId": "${userId}",\n` +
245
+ ` "tableId": "${tableId}",\n` +
246
+ ` "values": {\n` +
247
+ ` "列名": "字段值"\n` +
248
+ ` }\n` +
249
+ `}`,
250
+ });
251
+ } catch (error: any) {
252
+ return jsonResponse(
253
+ {
254
+ error: error?.message ?? "Failed to create table",
255
+ },
256
+ error?.message?.startsWith("Unauthorized") ? 401 : 500
257
+ );
258
+ }
259
+ }
260
+
261
+ export async function handleAddTableRow(req: Request): Promise<Response> {
262
+ try {
263
+ await ensureServerDbOpen();
264
+ const userId = await getAuthedUserId(req);
265
+ const body = await req.json().catch(() => ({} as any));
266
+ const tenantId =
267
+ typeof body.tenantId === "string" && body.tenantId.trim() ? body.tenantId.trim() : "";
268
+ const tableId =
269
+ typeof body.tableId === "string" && body.tableId.trim() ? body.tableId.trim() : "";
270
+ const values =
271
+ body.values && typeof body.values === "object" && !Array.isArray(body.values)
272
+ ? body.values
273
+ : null;
274
+
275
+ if (!tenantId || !tableId) {
276
+ throw new Error("addTableRow 需要显式传入 tenantId 和 tableId。");
277
+ }
278
+ if (tenantId !== userId) {
279
+ return jsonResponse({ error: "Forbidden: tenantId mismatch" }, 403);
280
+ }
281
+ if (!values || Object.keys(values).length === 0) {
282
+ throw new Error("addTableRow.values 不能为空,且必须是对象。");
283
+ }
284
+
285
+ const tableMeta = await loadTableMetaOrThrow(tenantId, tableId);
286
+ const normalized = normalizeRowValues(tableMeta.columns, values, { mode: "create" });
287
+ if (normalized.errors.length > 0) {
288
+ throw new Error(normalized.errors.join("\n"));
289
+ }
290
+ const sanitizedValues = normalized.sanitizedValues;
291
+ if (!Object.keys(sanitizedValues).length) throw new Error("addTableRow 提供的字段名都不在当前表中。");
292
+
293
+ const { dbKey, rowId } = rowKey.create(tenantId, tableId);
294
+ const now = new Date().toISOString();
295
+ const row = {
296
+ dbKey,
297
+ tenantId,
298
+ tableId,
299
+ rowId,
300
+ createdAt: now,
301
+ updatedAt: now,
302
+ type: DataType.TABLE_ROW as const,
303
+ ...sanitizedValues,
304
+ };
305
+
306
+ await serverDb.put(dbKey, row);
307
+
308
+ return jsonResponse({
309
+ rawData: row,
310
+ displayData:
311
+ `已在表「${(tableMeta as any).displayName || tableId}」中新增一行数据。\n` +
312
+ `rowId: ${rowId}\n` +
313
+ `字段数: ${Object.keys(sanitizedValues).length}`,
314
+ });
315
+ } catch (error: any) {
316
+ return jsonResponse(
317
+ {
318
+ error: error?.message ?? "Failed to add table row",
319
+ },
320
+ error?.message?.startsWith("Unauthorized") ? 401 : 500
321
+ );
322
+ }
323
+ }
324
+
325
+ export async function handleQueryTableRows(req: Request): Promise<Response> {
326
+ try {
327
+ await ensureServerDbOpen();
328
+ const userId = await getAuthedUserId(req);
329
+ const body = await req.json().catch(() => ({} as any));
330
+ const tenantId = typeof body.tenantId === "string" ? body.tenantId.trim() : "";
331
+ const tableId = typeof body.tableId === "string" ? body.tableId.trim() : "";
332
+ if (!tenantId) throw new Error("tenantId 必传。");
333
+ if (!tableId) throw new Error("tableId 必传。");
334
+
335
+ const tableMeta = await loadTableMetaOrThrow(tenantId, tableId);
336
+ await assertCanReadTableRows({ userId, tenantId, tableId, tableMeta });
337
+ const filters = body.filters && typeof body.filters === "object" && !Array.isArray(body.filters) ? body.filters : {};
338
+ const rows = await loadTableRows(tenantId, tableId);
339
+ const sortBy = typeof body.sortBy === "string" && body.sortBy.trim() ? body.sortBy.trim() : "updatedAt";
340
+ const sortOrder = body.sortOrder === "asc" ? "asc" : "desc";
341
+ const limit = Math.min(Math.max(Number(body.limit ?? 20), 1), 200);
342
+ const offset = Math.max(Number(body.offset ?? 0), 0);
343
+ const columns = Array.isArray(body.columns)
344
+ ? body.columns.filter((value: unknown): value is string => typeof value === "string" && value.trim().length > 0)
345
+ : undefined;
346
+ const includeBaseFields = body.includeBaseFields !== false;
347
+ const filtered = applyRowFilters(rows, filters);
348
+ const items = sortRows(filtered, sortBy, sortOrder)
349
+ .slice(offset, offset + limit)
350
+ .map((row) => pickRowColumns(row, columns, { includeBaseFields }));
351
+
352
+ return jsonResponse({
353
+ rawData: {
354
+ tenantId,
355
+ tableId,
356
+ total: filtered.length,
357
+ limit,
358
+ offset,
359
+ items,
360
+ },
361
+ displayData: `在表「${tableMeta.displayName || tableId}」中查询到 ${filtered.length} 行。`,
362
+ });
363
+ } catch (error: any) {
364
+ const message = error?.message ?? "Failed to query table rows";
365
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
366
+ }
367
+ }
368
+
369
+ export async function handleUpdateTableRow(req: Request): Promise<Response> {
370
+ try {
371
+ await ensureServerDbOpen();
372
+ const userId = await getAuthedUserId(req);
373
+ const body = await req.json().catch(() => ({} as any));
374
+ const rowFromDbKey = await loadRowByDbKey(body.dbKey);
375
+ const tenantId = typeof body.tenantId === "string" && body.tenantId.trim()
376
+ ? body.tenantId.trim()
377
+ : typeof rowFromDbKey?.tenantId === "string"
378
+ ? rowFromDbKey.tenantId
379
+ : "";
380
+ const tableId = typeof body.tableId === "string" && body.tableId.trim()
381
+ ? body.tableId.trim()
382
+ : typeof rowFromDbKey?.tableId === "string"
383
+ ? rowFromDbKey.tableId
384
+ : "";
385
+ ensureTenantAccess(userId, tenantId);
386
+ if (!tableId) throw new Error("tableId 必传。");
387
+ if (!body.changes || typeof body.changes !== "object" || Array.isArray(body.changes)) {
388
+ throw new Error("changes 必须是对象。");
389
+ }
390
+
391
+ const tableMeta = await loadTableMetaOrThrow(tenantId, tableId);
392
+ const row = rowFromDbKey ?? await loadRowOrThrow(tenantId, tableId, body.rowId, body.dbKey);
393
+ const normalized = normalizeRowValues(tableMeta.columns, body.changes, { mode: "update" });
394
+ if (normalized.errors.length > 0) throw new Error(normalized.errors.join("\n"));
395
+ if (!Object.keys(normalized.sanitizedValues).length) {
396
+ throw new Error(`没有可更新的有效字段。已知字段:${formatKnownColumns(tableMeta)}`);
397
+ }
398
+ const updated = {
399
+ ...row,
400
+ ...normalized.sanitizedValues,
401
+ updatedAt: new Date().toISOString(),
402
+ };
403
+ await serverDb.put(row.dbKey, updated);
404
+ return jsonResponse({
405
+ rawData: updated,
406
+ displayData: `已更新行 ${row.rowId}。`,
407
+ });
408
+ } catch (error: any) {
409
+ const message = error?.message ?? "Failed to update table row";
410
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
411
+ }
412
+ }
413
+
414
+ export async function handleDeleteTableRow(req: Request): Promise<Response> {
415
+ try {
416
+ await ensureServerDbOpen();
417
+ const userId = await getAuthedUserId(req);
418
+ const body = await req.json().catch(() => ({} as any));
419
+ const tenantId = typeof body.tenantId === "string" ? body.tenantId.trim() : "";
420
+ const tableId = typeof body.tableId === "string" ? body.tableId.trim() : "";
421
+ ensureTenantAccess(userId, tenantId);
422
+ if (!tableId) throw new Error("tableId 必传。");
423
+ const row = await loadRowOrThrow(tenantId, tableId, body.rowId, body.dbKey);
424
+ const now = new Date().toISOString();
425
+ const deleted = { ...row, deletedAt: now, updatedAt: now };
426
+ await serverDb.put(row.dbKey, deleted);
427
+ return jsonResponse({
428
+ rawData: deleted,
429
+ displayData: `已删除行 ${row.rowId}。`,
430
+ });
431
+ } catch (error: any) {
432
+ const message = error?.message ?? "Failed to delete table row";
433
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
434
+ }
435
+ }
436
+
437
+ export async function handleAddTableRows(req: Request): Promise<Response> {
438
+ try {
439
+ await ensureServerDbOpen();
440
+ const userId = await getOptionalAuthedUserId(req);
441
+ const body = await req.json().catch(() => ({} as any));
442
+ const tenantId = typeof body.tenantId === "string" ? body.tenantId.trim() : "";
443
+ const tableId = typeof body.tableId === "string" ? body.tableId.trim() : "";
444
+ // Same note as handleAddTableRow: batch append is also temporarily open for
445
+ // lightweight app forms until we add explicit table/app permission controls.
446
+ if (userId) {
447
+ ensureTenantAccess(userId, tenantId);
448
+ } else if (!tenantId) {
449
+ throw new Error("tenantId 必传。");
450
+ }
451
+ if (!tableId) throw new Error("tableId 必传。");
452
+ const rows = Array.isArray(body.rows) ? body.rows : [];
453
+ if (rows.length === 0) throw new Error("rows 至少需要包含一项。");
454
+ const tableMeta = await loadTableMetaOrThrow(tenantId, tableId);
455
+
456
+ const createdRows = [];
457
+ for (const item of rows) {
458
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
459
+ throw new Error("rows 中的每一项都必须是对象。");
460
+ }
461
+ const normalized = normalizeRowValues(tableMeta.columns, item, { mode: "create" });
462
+ if (normalized.errors.length > 0) throw new Error(normalized.errors.join("\n"));
463
+ if (!Object.keys(normalized.sanitizedValues).length) {
464
+ throw new Error("存在一行没有任何有效字段。");
465
+ }
466
+ const { dbKey, rowId } = rowKey.create(tenantId, tableId);
467
+ const now = new Date().toISOString();
468
+ const row = {
469
+ dbKey,
470
+ tenantId,
471
+ tableId,
472
+ rowId,
473
+ createdAt: now,
474
+ updatedAt: now,
475
+ type: DataType.TABLE_ROW as const,
476
+ ...normalized.sanitizedValues,
477
+ };
478
+ await serverDb.put(dbKey, row);
479
+ createdRows.push(row);
480
+ }
481
+
482
+ return jsonResponse({
483
+ rawData: { count: createdRows.length, items: createdRows },
484
+ displayData: `已批量新增 ${createdRows.length} 行。`,
485
+ });
486
+ } catch (error: any) {
487
+ const message = error?.message ?? "Failed to add table rows";
488
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
489
+ }
490
+ }
491
+
492
+ export async function handleUpdateTableRows(req: Request): Promise<Response> {
493
+ try {
494
+ await ensureServerDbOpen();
495
+ const userId = await getAuthedUserId(req);
496
+ const body = await req.json().catch(() => ({} as any));
497
+ const tenantId = typeof body.tenantId === "string" ? body.tenantId.trim() : "";
498
+ const tableId = typeof body.tableId === "string" ? body.tableId.trim() : "";
499
+ ensureTenantAccess(userId, tenantId);
500
+ if (!tableId) throw new Error("tableId 必传。");
501
+ const updates = Array.isArray(body.updates) ? body.updates : [];
502
+ if (updates.length === 0) throw new Error("updates 至少需要包含一项。");
503
+ const tableMeta = await loadTableMetaOrThrow(tenantId, tableId);
504
+
505
+ const results = [];
506
+ for (const item of updates) {
507
+ if (!item || typeof item !== "object" || Array.isArray(item)) {
508
+ throw new Error("updates 中的每一项都必须是对象。");
509
+ }
510
+ const row = await loadRowOrThrow(tenantId, tableId, item.rowId, item.dbKey);
511
+ const normalized = normalizeRowValues(tableMeta.columns, item.changes ?? {}, { mode: "update" });
512
+ if (normalized.errors.length > 0) throw new Error(normalized.errors.join("\n"));
513
+ if (!Object.keys(normalized.sanitizedValues).length) {
514
+ throw new Error(`行 ${row.rowId} 没有可更新的有效字段。`);
515
+ }
516
+ const updated = {
517
+ ...row,
518
+ ...normalized.sanitizedValues,
519
+ updatedAt: new Date().toISOString(),
520
+ };
521
+ await serverDb.put(row.dbKey, updated);
522
+ results.push(updated);
523
+ }
524
+
525
+ return jsonResponse({
526
+ rawData: { count: results.length, items: results },
527
+ displayData: `已批量更新 ${results.length} 行。`,
528
+ });
529
+ } catch (error: any) {
530
+ const message = error?.message ?? "Failed to update table rows";
531
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
532
+ }
533
+ }
534
+
535
+ export async function handleDeleteTableRows(req: Request): Promise<Response> {
536
+ try {
537
+ await ensureServerDbOpen();
538
+ const userId = await getAuthedUserId(req);
539
+ const body = await req.json().catch(() => ({} as any));
540
+ const tenantId = typeof body.tenantId === "string" ? body.tenantId.trim() : "";
541
+ const tableId = typeof body.tableId === "string" ? body.tableId.trim() : "";
542
+ ensureTenantAccess(userId, tenantId);
543
+ if (!tableId) throw new Error("tableId 必传。");
544
+ const rowIds = Array.isArray(body.rowIds) ? body.rowIds : [];
545
+ const dbKeys = Array.isArray(body.dbKeys) ? body.dbKeys : [];
546
+ const targets = [
547
+ ...rowIds.map((rowId: string) => ({ rowId })),
548
+ ...dbKeys.map((dbKey: string) => ({ dbKey })),
549
+ ];
550
+ if (targets.length === 0) throw new Error("需要至少提供一个 rowId 或 dbKey。");
551
+
552
+ const results = [];
553
+ for (const target of targets) {
554
+ const row = await loadRowOrThrow(tenantId, tableId, target.rowId, target.dbKey);
555
+ const now = new Date().toISOString();
556
+ const deleted = { ...row, deletedAt: now, updatedAt: now };
557
+ await serverDb.put(row.dbKey, deleted);
558
+ results.push(deleted);
559
+ }
560
+
561
+ return jsonResponse({
562
+ rawData: { count: results.length, items: results },
563
+ displayData: `已批量删除 ${results.length} 行。`,
564
+ });
565
+ } catch (error: any) {
566
+ const message = error?.message ?? "Failed to delete table rows";
567
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
568
+ }
569
+ }
570
+
571
+ export async function handleAddTableColumn(req: Request): Promise<Response> {
572
+ try {
573
+ await ensureServerDbOpen();
574
+ const userId = await getAuthedUserId(req);
575
+ const body = await req.json().catch(() => ({} as any));
576
+ const tenantId = typeof body.tenantId === "string" ? body.tenantId.trim() : "";
577
+ const tableId = typeof body.tableId === "string" ? body.tableId.trim() : "";
578
+ ensureTenantAccess(userId, tenantId);
579
+ if (!tableId) throw new Error("tableId 必传。");
580
+ const tableMeta = await loadTableMetaOrThrow(tenantId, tableId);
581
+ const column = normalizeColumnInput(body);
582
+ if (tableMeta.columns.some((item) => item.name === column.name)) {
583
+ throw new Error(`字段 ${column.name} 已存在。`);
584
+ }
585
+ const updated = {
586
+ ...tableMeta,
587
+ columns: [...tableMeta.columns, column],
588
+ updatedAt: new Date().toISOString(),
589
+ };
590
+ await serverDb.put(tableMeta.dbKey, updated);
591
+ return jsonResponse({
592
+ rawData: updated,
593
+ displayData: `已新增字段 ${column.name}。`,
594
+ });
595
+ } catch (error: any) {
596
+ const message = error?.message ?? "Failed to add table column";
597
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
598
+ }
599
+ }
600
+
601
+ export async function handleDeleteTableColumn(req: Request): Promise<Response> {
602
+ try {
603
+ await ensureServerDbOpen();
604
+ const userId = await getAuthedUserId(req);
605
+ const body = await req.json().catch(() => ({} as any));
606
+ const tenantId = typeof body.tenantId === "string" ? body.tenantId.trim() : "";
607
+ const tableId = typeof body.tableId === "string" ? body.tableId.trim() : "";
608
+ const columnName = typeof body.columnName === "string" ? body.columnName.trim() : "";
609
+ ensureTenantAccess(userId, tenantId);
610
+ if (!tableId || !columnName) throw new Error("tableId 和 columnName 必传。");
611
+ const tableMeta = await loadTableMetaOrThrow(tenantId, tableId);
612
+ if (!tableMeta.columns.some((column) => column.name === columnName)) {
613
+ throw new Error(`字段 ${columnName} 不存在。`);
614
+ }
615
+ const rows = await loadTableRows(tenantId, tableId);
616
+ const updatedAt = new Date().toISOString();
617
+ for (const row of rows) {
618
+ if (Object.prototype.hasOwnProperty.call(row, columnName)) {
619
+ const { [columnName]: _removed, ...rest } = row;
620
+ await serverDb.put(row.dbKey, { ...rest, updatedAt });
621
+ }
622
+ }
623
+ const updated = {
624
+ ...tableMeta,
625
+ columns: tableMeta.columns.filter((column) => column.name !== columnName),
626
+ updatedAt,
627
+ };
628
+ await serverDb.put(tableMeta.dbKey, updated);
629
+ return jsonResponse({
630
+ rawData: updated,
631
+ displayData: `已删除字段 ${columnName}。`,
632
+ });
633
+ } catch (error: any) {
634
+ const message = error?.message ?? "Failed to delete table column";
635
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
636
+ }
637
+ }
638
+
639
+ export async function handleRenameTableColumn(req: Request): Promise<Response> {
640
+ try {
641
+ await ensureServerDbOpen();
642
+ const userId = await getAuthedUserId(req);
643
+ const body = await req.json().catch(() => ({} as any));
644
+ const tenantId = typeof body.tenantId === "string" ? body.tenantId.trim() : "";
645
+ const tableId = typeof body.tableId === "string" ? body.tableId.trim() : "";
646
+ const oldName = typeof body.oldName === "string" ? body.oldName.trim() : "";
647
+ const newName = typeof body.newName === "string" ? body.newName.trim() : "";
648
+ ensureTenantAccess(userId, tenantId);
649
+ if (!tableId || !oldName || !newName) throw new Error("tableId、oldName、newName 必传。");
650
+ const tableMeta = await loadTableMetaOrThrow(tenantId, tableId);
651
+ if (!tableMeta.columns.some((column) => column.name === oldName)) {
652
+ throw new Error(`字段 ${oldName} 不存在。`);
653
+ }
654
+ if (tableMeta.columns.some((column) => column.name === newName)) {
655
+ throw new Error(`字段 ${newName} 已存在。`);
656
+ }
657
+ const rows = await loadTableRows(tenantId, tableId);
658
+ const updatedAt = new Date().toISOString();
659
+ for (const row of rows) {
660
+ if (Object.prototype.hasOwnProperty.call(row, oldName)) {
661
+ const { [oldName]: oldValue, ...rest } = row;
662
+ await serverDb.put(row.dbKey, { ...rest, [newName]: oldValue, updatedAt });
663
+ }
664
+ }
665
+ const updated = {
666
+ ...tableMeta,
667
+ columns: tableMeta.columns.map((column) =>
668
+ column.name === oldName ? { ...column, name: newName } : column
669
+ ),
670
+ updatedAt,
671
+ };
672
+ await serverDb.put(tableMeta.dbKey, updated);
673
+ return jsonResponse({
674
+ rawData: updated,
675
+ displayData: `已将字段 ${oldName} 重命名为 ${newName}。`,
676
+ });
677
+ } catch (error: any) {
678
+ const message = error?.message ?? "Failed to rename table column";
679
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
680
+ }
681
+ }
682
+
683
+ export async function handleRenameTableColumnLabel(req: Request): Promise<Response> {
684
+ try {
685
+ await ensureServerDbOpen();
686
+ const userId = await getAuthedUserId(req);
687
+ const body = await req.json().catch(() => ({} as any));
688
+ const tenantId = typeof body.tenantId === "string" ? body.tenantId.trim() : "";
689
+ const tableId = typeof body.tableId === "string" ? body.tableId.trim() : "";
690
+ const columnName = typeof body.columnName === "string" ? body.columnName.trim() : "";
691
+ const newLabel = typeof body.newLabel === "string" ? body.newLabel.trim() : "";
692
+ ensureTenantAccess(userId, tenantId);
693
+ if (!tableId || !columnName || !newLabel) throw new Error("tableId、columnName、newLabel 必传。");
694
+ const tableMeta = await loadTableMetaOrThrow(tenantId, tableId);
695
+ if (!tableMeta.columns.some((column) => column.name === columnName)) {
696
+ throw new Error(`字段 ${columnName} 不存在。`);
697
+ }
698
+ const updated = {
699
+ ...tableMeta,
700
+ columns: tableMeta.columns.map((column) =>
701
+ column.name === columnName ? { ...column, label: newLabel } : column
702
+ ),
703
+ updatedAt: new Date().toISOString(),
704
+ };
705
+ await serverDb.put(tableMeta.dbKey, updated);
706
+ return jsonResponse({
707
+ rawData: updated,
708
+ displayData: `已将字段 ${columnName} 的显示名改为 ${newLabel}。`,
709
+ });
710
+ } catch (error: any) {
711
+ const message = error?.message ?? "Failed to rename table column label";
712
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
713
+ }
714
+ }
715
+
716
+ export async function handleRenameTable(req: Request): Promise<Response> {
717
+ try {
718
+ await ensureServerDbOpen();
719
+ const userId = await getAuthedUserId(req);
720
+ const body = await req.json().catch(() => ({} as any));
721
+ const tenantId = typeof body.tenantId === "string" ? body.tenantId.trim() : "";
722
+ const tableId = typeof body.tableId === "string" ? body.tableId.trim() : "";
723
+ const newName = typeof body.newName === "string" ? body.newName.trim() : "";
724
+ ensureTenantAccess(userId, tenantId);
725
+ if (!tableId || !newName) throw new Error("tableId 和 newName 必传。");
726
+ const tableMeta = await loadTableMetaOrThrow(tenantId, tableId);
727
+ const updated = {
728
+ ...tableMeta,
729
+ displayName: newName,
730
+ updatedAt: new Date().toISOString(),
731
+ };
732
+ await serverDb.put(tableMeta.dbKey, updated);
733
+ return jsonResponse({
734
+ rawData: updated,
735
+ displayData: `已将表名改为「${newName}」。`,
736
+ });
737
+ } catch (error: any) {
738
+ const message = error?.message ?? "Failed to rename table";
739
+ return jsonResponse({ error: message }, message.startsWith("Unauthorized") ? 401 : message.startsWith("Forbidden") ? 403 : 500);
740
+ }
741
+ }