nolo-cli 0.1.40 → 0.1.41

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 (412) hide show
  1. package/agent-runtime/hybridRecordStore.ts +5 -3
  2. package/ai/agent/_executeModel.ts +146 -0
  3. package/ai/agent/agentSlice.ts +556 -1
  4. package/ai/agent/appWorkingMemory.ts +126 -0
  5. package/ai/agent/buildEditingContext.ts +378 -0
  6. package/ai/agent/buildSystemPrompt.ts +585 -0
  7. package/ai/agent/canvasEditingContext.ts +49 -0
  8. package/ai/agent/cleanAgentMessages.ts +140 -0
  9. package/ai/agent/cliChatClient.ts +153 -0
  10. package/ai/agent/cliExecutor.ts +65 -6
  11. package/ai/agent/contextCompiler.ts +107 -0
  12. package/ai/agent/contextLayerContract.ts +44 -0
  13. package/ai/agent/createAgentSchema.ts +272 -0
  14. package/ai/agent/currentTimeContext.ts +65 -0
  15. package/ai/agent/executeToolCall.ts +58 -0
  16. package/ai/agent/fetchAgentContexts.ts +42 -0
  17. package/ai/agent/generatePrompt.ts +3 -0
  18. package/ai/agent/getFullChatContextKeys.ts +168 -0
  19. package/ai/agent/guidedCreation/capabilities.ts +84 -0
  20. package/ai/agent/guidedCreation/types.ts +38 -0
  21. package/ai/agent/isLiveAudioOnlyAgent.ts +26 -0
  22. package/ai/agent/liveAudioModel.ts +2 -0
  23. package/ai/agent/pageBuilderHandoffRules.ts +75 -0
  24. package/ai/agent/persistMessageWithFixedId.ts +37 -0
  25. package/ai/agent/planSlice.ts +259 -0
  26. package/ai/agent/referenceUtils.ts +229 -0
  27. package/ai/agent/runAgentBackground.ts +310 -0
  28. package/ai/agent/runAgentClientLoop.ts +164 -0
  29. package/ai/agent/runtimeGuidance.ts +116 -0
  30. package/ai/agent/serverOrigin.ts +7 -0
  31. package/ai/agent/startParallelAgentStreams.ts +424 -0
  32. package/ai/agent/startupProtocol.ts +53 -0
  33. package/ai/agent/streamAgentChatTurn.ts +2001 -0
  34. package/ai/agent/streamAgentChatTurnUtils.ts +860 -0
  35. package/ai/agent/toolFailureGuard.ts +99 -0
  36. package/ai/agent/types.ts +73 -0
  37. package/ai/agent/utils/imageOutput.ts +37 -0
  38. package/ai/agent/utils/publicImageAgentMode.ts +26 -0
  39. package/ai/ai.locale.ts +1095 -0
  40. package/ai/chat/accumulateToolCallChunks.ts +126 -0
  41. package/ai/chat/fetchUtils.ts +143 -0
  42. package/ai/chat/inlineImageUrlsForCustomProvider.ts +117 -0
  43. package/ai/chat/parseApiError.ts +67 -0
  44. package/ai/chat/parseMultilineSSE.ts +95 -0
  45. package/ai/chat/sendOpenAICompletionsRequest.ts +897 -0
  46. package/ai/chat/sendOpenAIResponseRequest.ts +720 -0
  47. package/ai/chat/serverProxyRetry.ts +102 -0
  48. package/ai/chat/shouldUseServerProxy.ts +18 -0
  49. package/ai/chat/streamRetry.ts +46 -0
  50. package/ai/chat/updateTotalUsage.ts +89 -0
  51. package/ai/context/buildReferenceContext.ts +437 -0
  52. package/ai/context/retention.ts +165 -0
  53. package/ai/context/tokenUtils.ts +78 -0
  54. package/ai/llm/agentCapabilities.ts +74 -0
  55. package/ai/llm/deepinfra.ts +79 -0
  56. package/ai/llm/fireworks.ts +68 -0
  57. package/ai/llm/generateRequestBody.ts +165 -0
  58. package/ai/llm/getModelContextWindow.ts +93 -0
  59. package/ai/llm/getPricing.ts +252 -0
  60. package/ai/llm/imagePricing.ts +66 -0
  61. package/ai/llm/isResponseAPIModel.ts +13 -0
  62. package/ai/llm/kimi.ts +23 -0
  63. package/ai/llm/mimo.ts +99 -0
  64. package/ai/llm/mistral.ts +21 -0
  65. package/ai/llm/models.ts +45 -0
  66. package/ai/llm/openrouterModels.ts +6 -0
  67. package/ai/llm/providers.ts +313 -0
  68. package/ai/llm/reasoningModels.ts +27 -0
  69. package/ai/llm/types.ts +82 -0
  70. package/ai/llm/usageRequestOptions.ts +59 -0
  71. package/ai/memory/queryShared.ts +161 -0
  72. package/ai/memory/recentRelationshipRecap.ts +247 -0
  73. package/ai/memory/remember.ts +167 -0
  74. package/ai/memory/store.ts +20 -0
  75. package/ai/memory/storeShared.ts +76 -0
  76. package/ai/memory/types.ts +46 -0
  77. package/ai/memory/understanding.ts +349 -0
  78. package/ai/memory/understandingGreeting.ts +264 -0
  79. package/ai/policy/personalizationDialog.ts +333 -0
  80. package/ai/policy/runtimePolicy.ts +454 -0
  81. package/ai/policy/selfUpdateFields.ts +48 -0
  82. package/ai/policy/types.ts +64 -0
  83. package/ai/skills/referenceRuntime.ts +274 -0
  84. package/ai/skills/skillDiagnostics.ts +251 -0
  85. package/ai/skills/skillDocBuilder.ts +139 -0
  86. package/ai/skills/skillSummaryMarker.ts +26 -0
  87. package/ai/token/calculatePrice.ts +576 -0
  88. package/ai/token/missingUsageEstimate.ts +42 -0
  89. package/ai/token/normalizeUsage.ts +124 -0
  90. package/ai/token/openaiImageGenerationUsage.ts +56 -0
  91. package/ai/token/prepareTokenUsageData.ts +93 -0
  92. package/ai/token/resolveBillingTarget.ts +52 -0
  93. package/ai/token/saveTokenRecord.ts +53 -0
  94. package/ai/token/types.ts +103 -0
  95. package/ai/tools/agent/agentTools.ts +235 -0
  96. package/ai/tools/agent/agentUpdateShared.ts +311 -0
  97. package/ai/tools/agent/callAgentTool.ts +139 -0
  98. package/ai/tools/agent/createAgentTool.ts +512 -0
  99. package/ai/tools/agent/createDialogTool.ts +69 -0
  100. package/ai/tools/agent/createSkillAgentTool.ts +62 -0
  101. package/ai/tools/agent/parallelBudget.ts +221 -0
  102. package/ai/tools/agent/prepareAgentDraftTool.ts +159 -0
  103. package/ai/tools/agent/presets/appBuilderPreset.ts +154 -0
  104. package/ai/tools/agent/runLlmTool.ts +96 -0
  105. package/ai/tools/agent/runStreamingAgentTool.ts +73 -0
  106. package/ai/tools/agent/skillAgentArgs.ts +106 -0
  107. package/ai/tools/agent/startAgentDialogTool.ts +53 -0
  108. package/ai/tools/agent/streamParallelAgentsTool.ts +123 -0
  109. package/ai/tools/agent/updateAgentTool.ts +96 -0
  110. package/ai/tools/agent/updateSelfTool.ts +113 -0
  111. package/ai/tools/amazonProductScraperTool.ts +86 -0
  112. package/ai/tools/apifyActorClient.ts +45 -0
  113. package/ai/tools/appEditGuard.ts +372 -0
  114. package/ai/tools/appReadSnapshot.ts +153 -0
  115. package/ai/tools/appTools.ts +1549 -0
  116. package/ai/tools/applyEditTool.ts +259 -0
  117. package/ai/tools/applyLineEditsTool.ts +315 -0
  118. package/ai/tools/browserTools/click.ts +33 -0
  119. package/ai/tools/browserTools/closeSession.ts +29 -0
  120. package/ai/tools/browserTools/common.ts +27 -0
  121. package/ai/tools/browserTools/openSession.ts +48 -0
  122. package/ai/tools/browserTools/readContent.ts +38 -0
  123. package/ai/tools/browserTools/selectOption.ts +46 -0
  124. package/ai/tools/browserTools/typeText.ts +42 -0
  125. package/ai/tools/category/createCategoryTool.ts +66 -0
  126. package/ai/tools/category/queryContentsByCategoryTool.ts +69 -0
  127. package/ai/tools/category/updateContentCategoryTool.ts +75 -0
  128. package/ai/tools/cfBrowserTools.ts +319 -0
  129. package/ai/tools/cfSpeechToTextTool.ts +49 -0
  130. package/ai/tools/checkEnvTool.ts +102 -0
  131. package/ai/tools/cloudflareCrawlTool.ts +289 -0
  132. package/ai/tools/codeSearchTool.ts +123 -0
  133. package/ai/tools/codeTools.ts +101 -0
  134. package/ai/tools/convertMarxistsBookTool.ts +103 -0
  135. package/ai/tools/createDocTool.ts +132 -0
  136. package/ai/tools/createSkillDocTool.ts +155 -0
  137. package/ai/tools/createWorkflowTool.ts +154 -0
  138. package/ai/tools/delayTool.ts +31 -0
  139. package/ai/tools/deleteSpacesTool.ts +325 -0
  140. package/ai/tools/deleteSpacesToolModel.ts +159 -0
  141. package/ai/tools/devReloadUtils.ts +29 -0
  142. package/ai/tools/dialogMessageSearch.ts +137 -0
  143. package/ai/tools/doctorSkillTool.ts +72 -0
  144. package/ai/tools/ecommerceScraperTool.ts +86 -0
  145. package/ai/tools/emailTools.ts +549 -0
  146. package/ai/tools/evalSkillTool.ts +92 -0
  147. package/ai/tools/exaSearchTool.ts +63 -0
  148. package/ai/tools/execShellTool.ts +266 -0
  149. package/ai/tools/executeSqlTool.ts +192 -0
  150. package/ai/tools/fetchWebpageSupport.ts +333 -0
  151. package/ai/tools/fetchWebpageTool.ts +97 -0
  152. package/ai/tools/geminiImagePreviewTool.ts +386 -0
  153. package/ai/tools/generateDocxTool.ts +215 -0
  154. package/ai/tools/googleSearchScraperTool.ts +106 -0
  155. package/ai/tools/importDataTool.ts +133 -0
  156. package/ai/tools/importSkillTool.ts +162 -0
  157. package/ai/tools/index.ts +2308 -0
  158. package/ai/tools/jdProductScraperTool.ts +821 -0
  159. package/ai/tools/listUserSpacesTool.ts +113 -0
  160. package/ai/tools/localFilesTool.ts +276 -0
  161. package/ai/tools/marxistsOfflineBook.ts +253 -0
  162. package/ai/tools/modelUsageTools.ts +206 -0
  163. package/ai/tools/noloWorkspaceReadTools.ts +467 -0
  164. package/ai/tools/olmOcrTool.ts +33 -0
  165. package/ai/tools/openaiImageTool.ts +267 -0
  166. package/ai/tools/prepareTools.ts +23 -0
  167. package/ai/tools/readDocTool.ts +88 -0
  168. package/ai/tools/readFileTool.ts +214 -0
  169. package/ai/tools/readTool.ts +194 -0
  170. package/ai/tools/readXPostTool.ts +229 -0
  171. package/ai/tools/readXhsProfileTool.ts +627 -0
  172. package/ai/tools/rememberMemoryTool.ts +84 -0
  173. package/ai/tools/remotionVideoTool.ts +151 -0
  174. package/ai/tools/searchDialogMessagesTool.ts +222 -0
  175. package/ai/tools/searchWorkspaceTool.ts +259 -0
  176. package/ai/tools/skillFollowup.ts +86 -0
  177. package/ai/tools/surfWeatherTool.ts +169 -0
  178. package/ai/tools/table/addTableRowTool.ts +217 -0
  179. package/ai/tools/table/createTableTool.ts +315 -0
  180. package/ai/tools/table/rowTools.ts +386 -0
  181. package/ai/tools/table/schemaTools.ts +244 -0
  182. package/ai/tools/table/shareTableTool.ts +148 -0
  183. package/ai/tools/table/toolShared.ts +129 -0
  184. package/ai/tools/taobaoTmallProductScraperTool.ts +49 -0
  185. package/ai/tools/toolApiClient.ts +279 -0
  186. package/ai/tools/toolResultError.ts +42 -0
  187. package/ai/tools/toolRunSlice.ts +303 -0
  188. package/ai/tools/toolSchemaCompatibility.ts +53 -0
  189. package/ai/tools/uiAskChoiceTool.ts +104 -0
  190. package/ai/tools/updateContentTitleTool.ts +84 -0
  191. package/ai/tools/updateDocTool.ts +105 -0
  192. package/ai/tools/updateUserPreferenceProfileTool.ts +153 -0
  193. package/ai/tools/wereadGatewayTool.ts +152 -0
  194. package/ai/tools/whisperTool.ts +76 -0
  195. package/ai/tools/writeFileTool.ts +213 -0
  196. package/ai/tools/youtubeScraperTool.ts +116 -0
  197. package/ai/tools/ziweiChartTool.ts +678 -0
  198. package/ai/types.ts +55 -0
  199. package/ai/workflow/workflowExecutor.ts +323 -0
  200. package/ai/workflow/workflowSlice.ts +73 -0
  201. package/ai/workflow/workflowTypes.ts +106 -0
  202. package/app/actions/syncAppRecord.ts +73 -0
  203. package/app/constants/animationSets.ts +21 -0
  204. package/app/constants/appEditor.ts +99 -0
  205. package/app/favorite/favoriteSlice.ts +690 -0
  206. package/app/favorite/type.ts +43 -0
  207. package/app/hooks/deleteDbKey.ts +233 -0
  208. package/app/i18n/client.ts +13 -0
  209. package/app/i18n/i18n.base.ts +14 -0
  210. package/app/i18n/i18n.config.ts +77 -0
  211. package/app/i18n/index.ts +15 -0
  212. package/app/i18n/mapLanguage.ts +11 -0
  213. package/app/i18n/translations/appBuilder.locale.ts +453 -0
  214. package/app/i18n/translations/error.locale.ts +246 -0
  215. package/app/i18n/translations/interface.locale.ts +2174 -0
  216. package/app/i18n/translations/pricing.locale.ts +397 -0
  217. package/app/i18n/translations/privacy.locale.ts +168 -0
  218. package/app/i18n/translations/seo.locale.ts +129 -0
  219. package/app/i18n/translations/terms.locale.ts +124 -0
  220. package/app/i18n/types.ts +6 -0
  221. package/app/notifications/model.ts +77 -0
  222. package/app/notifications/notificationSlice.ts +141 -0
  223. package/app/reducer.ts +36 -0
  224. package/app/settings/dbActionThunks.ts +34 -0
  225. package/app/settings/defaultSpacePreference.ts +87 -0
  226. package/app/settings/settingSlice.tsx +1212 -0
  227. package/app/settings/settingsRecord.ts +8 -0
  228. package/app/stateViews/runtime.ts +90 -0
  229. package/app/store.ts +55 -0
  230. package/app/theme/colors.ts +280 -0
  231. package/app/theme/fontPreference.ts +77 -0
  232. package/app/theme/theme.config.ts +120 -0
  233. package/app/theme/themeModeBootstrap.ts +123 -0
  234. package/app/types/appSummary.ts +114 -0
  235. package/app/types.ts +358 -0
  236. package/app/utils/appKeys.ts +55 -0
  237. package/app/utils/async.ts +28 -0
  238. package/app/utils/desktopAgentRuntimeTurnClient.ts +73 -0
  239. package/app/utils/env.ts +17 -0
  240. package/app/utils/fileUtils.ts +229 -0
  241. package/app/utils/imageUtils.ts +274 -0
  242. package/app/utils/myContentItems.ts +289 -0
  243. package/app/utils/retryAfter.ts +36 -0
  244. package/app/utils/retryFetch.ts +61 -0
  245. package/app/utils/toast.ts +3 -0
  246. package/auth/action/signUpAction.ts +227 -0
  247. package/auth/adminPermissions.ts +18 -0
  248. package/auth/authSlice.ts +531 -0
  249. package/auth/client/loginRequest.ts +14 -0
  250. package/auth/resetAuthScopedClientState.ts +27 -0
  251. package/auth/routes.ts +178 -0
  252. package/auth/token.ts +63 -0
  253. package/auth/types.ts +40 -0
  254. package/chat/chat.locale.ts +813 -0
  255. package/chat/dialog/actions/addCybotAction.ts +52 -0
  256. package/chat/dialog/actions/addReferenceKeysAction.ts +62 -0
  257. package/chat/dialog/actions/builtinDialogLlm.ts +35 -0
  258. package/chat/dialog/actions/cleanupCliSession.ts +40 -0
  259. package/chat/dialog/actions/createDialogAction.ts +379 -0
  260. package/chat/dialog/actions/createScheduledTaskAction.ts +78 -0
  261. package/chat/dialog/actions/handleSendMessageAction.ts +197 -0
  262. package/chat/dialog/actions/handleSendMessageResolver.ts +27 -0
  263. package/chat/dialog/actions/removeCybotAction.ts +6 -0
  264. package/chat/dialog/actions/removeDialogAgentAction.ts +44 -0
  265. package/chat/dialog/actions/replacePrimaryCybotAction.ts +6 -0
  266. package/chat/dialog/actions/setPrimaryDialogAgentAction.ts +52 -0
  267. package/chat/dialog/actions/updateDialogSummaryAction.ts +430 -0
  268. package/chat/dialog/actions/updateDialogTitleAction.ts +151 -0
  269. package/chat/dialog/actions/updateDialogTitlePolicy.ts +30 -0
  270. package/chat/dialog/actions/updateTokensAction.ts +233 -0
  271. package/chat/dialog/dialogAgents.ts +72 -0
  272. package/chat/dialog/dialogSlice.ts +872 -0
  273. package/chat/dialog/dialogTitle.ts +81 -0
  274. package/chat/dialog/dialogTokenStats.ts +12 -0
  275. package/chat/dialog/dialogUrl.ts +6 -0
  276. package/chat/dialog/goal.ts +108 -0
  277. package/chat/dialog/objectAssistantRegistry.ts +286 -0
  278. package/chat/dialog/schedule.ts +17 -0
  279. package/chat/messages/fetchAndCacheMessages.ts +119 -0
  280. package/chat/messages/fetchConvMsgs.ts +51 -0
  281. package/chat/messages/fileUrl.ts +13 -0
  282. package/chat/messages/messageAgent.ts +8 -0
  283. package/chat/messages/messageContent.ts +199 -0
  284. package/chat/messages/messageContract.ts +88 -0
  285. package/chat/messages/messageSlice.ts +1367 -0
  286. package/chat/messages/toolThunks.ts +625 -0
  287. package/cli/client/agentRun.ts +27 -8
  288. package/cli/client/localRuntimeAdapter.ts +144 -28
  289. package/client/agentRun.test.ts +52 -0
  290. package/client/agentRun.ts +27 -8
  291. package/client/localRuntimeAdapter.test.ts +437 -6
  292. package/client/localRuntimeAdapter.ts +144 -28
  293. package/core/builtinAgents.ts +209 -0
  294. package/core/config.ts +15 -0
  295. package/core/crypto.ts +51 -0
  296. package/core/generateKeyPairFromSeedV1.ts +15 -0
  297. package/core/generateMainKey.ts +22 -0
  298. package/core/init.ts +41 -0
  299. package/core/localOrigins.ts +8 -0
  300. package/core/password.ts +13 -0
  301. package/core/prefix.ts +23 -0
  302. package/create/editor/transforms/fromMarkdown/index.ts +260 -0
  303. package/create/editor/transforms/fromMarkdown/inline.ts +285 -0
  304. package/create/editor/transforms/fromMarkdown/table.ts +130 -0
  305. package/create/editor/transforms/markdownToSlate.ts +24 -0
  306. package/create/editor/transforms/slateToRenderMarkdown.ts +218 -0
  307. package/create/editor/transforms/slateToSimplifiedMarkdown.ts +224 -0
  308. package/create/editor/transforms/slateToText.ts +33 -0
  309. package/create/editor/utils/slateUtils.ts +233 -0
  310. package/create/space/addSpaceAction.ts +193 -0
  311. package/create/space/category/categoryActions.ts +427 -0
  312. package/create/space/changeSpaceAction.ts +36 -0
  313. package/create/space/constants.ts +8 -0
  314. package/create/space/content/addContentAction.ts +116 -0
  315. package/create/space/content/contentThunks.ts +90 -0
  316. package/create/space/content/deleteContentFromSpaceAction.ts +187 -0
  317. package/create/space/content/deleteMultipleContentAction.ts +112 -0
  318. package/create/space/content/moveContentAction.ts +285 -0
  319. package/create/space/content/updateContentCategoryAction.ts +154 -0
  320. package/create/space/content/updateContentTitleAction.ts +151 -0
  321. package/create/space/content/uploadAndAddFileToSpaceAction.ts +98 -0
  322. package/create/space/contentKeyUtils.ts +117 -0
  323. package/create/space/deleteSpaceAction.ts +276 -0
  324. package/create/space/fetchSpaceAction.ts +70 -0
  325. package/create/space/fetchSpaceSidebarStateAction.ts +26 -0
  326. package/create/space/loadDefaultSpaceAction.ts +57 -0
  327. package/create/space/member/addMemberAction.ts +79 -0
  328. package/create/space/member/fetchUserSpaceMembershipsAction.ts +386 -0
  329. package/create/space/member/memberThunks.ts +47 -0
  330. package/create/space/member/removeMemberAction.ts +67 -0
  331. package/create/space/resolvePreferredSpaceId.ts +113 -0
  332. package/create/space/sidebarVisibleTypes.ts +241 -0
  333. package/create/space/space.locale.ts +1087 -0
  334. package/create/space/spaceAccess.ts +182 -0
  335. package/create/space/spaceCollapsedState.ts +54 -0
  336. package/create/space/spaceKeys.ts +65 -0
  337. package/create/space/spaceSlice.ts +328 -0
  338. package/create/space/spaceThunks.ts +410 -0
  339. package/create/space/types.ts +27 -0
  340. package/create/space/updateSpaceAction.ts +107 -0
  341. package/create/space/utils/permissions.ts +47 -0
  342. package/create/types.ts +21 -0
  343. package/database/actions/agentReadResolution.ts +33 -0
  344. package/database/actions/common.ts +243 -0
  345. package/database/actions/deleteFile.ts +40 -0
  346. package/database/actions/fileContent.ts +125 -0
  347. package/database/actions/patch.ts +155 -0
  348. package/database/actions/read.ts +358 -0
  349. package/database/actions/readAndWait.ts +260 -0
  350. package/database/actions/readRequestManager.ts +120 -0
  351. package/database/actions/readResolution.ts +125 -0
  352. package/database/actions/remove.ts +94 -0
  353. package/database/actions/replication.ts +477 -0
  354. package/database/actions/upload.ts +186 -0
  355. package/database/actions/upsert.ts +56 -0
  356. package/database/actions/write.ts +146 -0
  357. package/database/authority/ownerKey.ts +80 -0
  358. package/database/authority/recordAuthority.ts +67 -0
  359. package/database/authority/userAuthorityRegistry.ts +54 -0
  360. package/database/client/fetchUserData.ts +61 -0
  361. package/database/dbActionThunks.ts +1 -0
  362. package/database/dbSlice.ts +149 -0
  363. package/database/fileRing.ts +51 -0
  364. package/database/fileStorage.ts +232 -0
  365. package/database/fileUrl.ts +34 -0
  366. package/database/keys.ts +767 -0
  367. package/database/queryPrefixes.ts +14 -0
  368. package/database/requests.ts +443 -0
  369. package/database/runtimeServerContext.ts +54 -0
  370. package/database/tenantPlacement.ts +57 -0
  371. package/database/userPreferenceRegister.ts +131 -0
  372. package/database/utils/ulid.ts +1 -0
  373. package/integrations/anthropic/anthropicModels.ts +47 -0
  374. package/integrations/deepseek/models.ts +37 -0
  375. package/integrations/google/models.ts +341 -0
  376. package/integrations/openai/chatCompletionStreamMode.ts +10 -0
  377. package/integrations/openai/filterAndCleanMessages.ts +284 -0
  378. package/integrations/openai/flexTier.ts +102 -0
  379. package/integrations/openai/generateOpenAIRequestBody.ts +274 -0
  380. package/integrations/openai/generateResponseRequestBody.ts +77 -0
  381. package/integrations/openai/models.ts +271 -0
  382. package/integrations/openai/providerBodyCompatibility.ts +23 -0
  383. package/integrations/openai/responsesHelpers.ts +297 -0
  384. package/integrations/x-reader/types.ts +109 -0
  385. package/integrations/xai/models.ts +13 -0
  386. package/integrations/xhs-reader/analyze/profileAnalyzer.ts +205 -0
  387. package/integrations/xhs-reader/backends/playwrightProfileCollector.ts +624 -0
  388. package/integrations/xhs-reader/bridge/readXhsProfileWithBridge.ts +227 -0
  389. package/integrations/xhs-reader/client/xhsWebApiClient.ts +229 -0
  390. package/integrations/xhs-reader/normalize.ts +390 -0
  391. package/integrations/xhs-reader/orchestrator.ts +178 -0
  392. package/integrations/xhs-reader/redaction.ts +68 -0
  393. package/integrations/xhs-reader/types.ts +244 -0
  394. package/integrations/xhs-reader/url.ts +57 -0
  395. package/package.json +430 -4
  396. package/render/page/createPageAction.ts +183 -0
  397. package/render/page/docSlice.ts +468 -0
  398. package/render/page/types.ts +17 -0
  399. package/render/table/createTableAction.ts +270 -0
  400. package/render/table/deleteTableAction.ts +193 -0
  401. package/render/table/fetchAndCacheTableRows.ts +174 -0
  402. package/render/table/tableSlice.ts +1106 -0
  403. package/render/table/toolValueUtils.ts +363 -0
  404. package/render/table/types.ts +252 -0
  405. package/render/table/utils/tableSerialization.ts +50 -0
  406. package/server/handlers/agentRun/types.ts +104 -0
  407. package/share/action.ts +225 -0
  408. package/share/helpers.ts +302 -0
  409. package/share/keys.ts +243 -0
  410. package/share/publicSharePolicy.ts +27 -0
  411. package/share/shareSlice.ts +53 -0
  412. package/share/types.ts +100 -0
@@ -42,6 +42,8 @@ import {
42
42
  type HybridRecordStore,
43
43
  } from "./hybridRecordStore";
44
44
  import { executeLocalToolWithPolicy } from "./localToolPolicy";
45
+ import { inferCaptureIntent } from "../../ai/policy/runtimePolicy";
46
+ import { prepareTools } from "../../ai/tools/prepareTools";
45
47
  import { taskRunFunctionSchema } from "../../ai/tools/agent/taskRunTool";
46
48
  import {
47
49
  MIMO_MONTH_AGENT_KEY,
@@ -56,6 +58,11 @@ import {
56
58
  } from "../../agent-runtime/noloWorkspaceTools";
57
59
  import { executeCli as defaultExecuteCli, type CliExecuteResult, type CliImageInput } from "../../ai/agent/cliExecutor";
58
60
  import { buildCliPrompt } from "../../ai/agent/cliPrompt";
61
+ import {
62
+ readXhsProfileFunc,
63
+ readXhsProfileFunctionSchema,
64
+ } from "../../ai/tools/readXhsProfileTool";
65
+ import { resolveDefaultXhsProfileDir } from "../../integrations/xhs-reader/bridge/readXhsProfileWithBridge";
59
66
 
60
67
  type EnvLike = Record<string, string | undefined>;
61
68
  type FetchInput = Parameters<typeof fetch>[0];
@@ -78,6 +85,14 @@ export const BUILTIN_NOLO_AGENT_ID = NOLO_DEFAULT_AGENT_ID;
78
85
  export const BUILTIN_NOLO_AGENT_KEY = NOLO_DEFAULT_AGENT_KEY;
79
86
  const CLI_DIR = dirname(fileURLToPath(import.meta.url));
80
87
  const CLI_ENTRYPOINT = join(CLI_DIR, "..", "index.ts");
88
+ const LOCAL_SERVER_TABLE_TOOL_NAMES = [
89
+ "createTable",
90
+ "addTableRow",
91
+ "addTableRows",
92
+ "updateTableRow",
93
+ "updateTableRows",
94
+ ] as const;
95
+ const LOCAL_SERVER_TABLE_TOOL_NAME_SET = new Set<string>(LOCAL_SERVER_TABLE_TOOL_NAMES);
81
96
 
82
97
  export type CliLocalRuntimeDb = CliKvDb;
83
98
 
@@ -91,6 +106,7 @@ export type CliLocalRuntimeAdapterDeps = {
91
106
  cwd?: string;
92
107
  output?: { write(chunk: string): unknown };
93
108
  localToolExecutors?: Record<string, (call: any) => Promise<{ content: string; metadata?: Record<string, unknown> }>>;
109
+ readXhsProfile?: typeof readXhsProfileFunc;
94
110
  executeCli?: LocalCliExecutor;
95
111
  sleep?: (ms: number) => Promise<void>;
96
112
  loopbackRequest?: (input: FetchInput, init?: FetchInit) => Promise<Response>;
@@ -235,12 +251,14 @@ function buildRequestTimeoutSignal(timeoutMs?: number) {
235
251
  if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
236
252
  return undefined;
237
253
  }
238
- if (typeof AbortSignal !== "undefined" && typeof AbortSignal.timeout === "function") {
239
- return AbortSignal.timeout(timeoutMs);
240
- }
241
254
  const controller = new AbortController();
242
- setTimeout(() => controller.abort(new Error(`request timed out after ${timeoutMs}ms`)), timeoutMs);
243
- return controller.signal;
255
+ const timeout = setTimeout(() => {
256
+ controller.abort(new Error(`request timed out after ${timeoutMs}ms`));
257
+ }, timeoutMs);
258
+ return {
259
+ signal: controller.signal,
260
+ clear: () => clearTimeout(timeout),
261
+ };
244
262
  }
245
263
 
246
264
  function summarizeEndpoint(value: unknown) {
@@ -383,12 +401,17 @@ function buildLocalPolicyToolNames(args: { toolNames?: string[]; env: EnvLike })
383
401
  exposeShellTools: true,
384
402
  }),
385
403
  ...((args.toolNames ?? []).includes("taskRun") ? ["taskRun"] : []),
404
+ ...((args.toolNames ?? []).includes("read_xhs_profile") ? ["read_xhs_profile"] : []),
405
+ ...(args.toolNames ?? []).filter((name) => LOCAL_SERVER_TABLE_TOOL_NAME_SET.has(name)),
386
406
  ...filterNoloWorkspaceToolNames(args.toolNames),
387
407
  ];
388
408
  }
389
409
 
390
410
  function buildServerPlatformOpenAiTools(args: { toolNames?: string[] }) {
391
411
  const toolNames = new Set(args.toolNames ?? []);
412
+ const tableTools = prepareTools(
413
+ (args.toolNames ?? []).filter((name) => LOCAL_SERVER_TABLE_TOOL_NAME_SET.has(name)),
414
+ );
392
415
  return [
393
416
  ...(toolNames.has("taskRun")
394
417
  ? [{
@@ -396,6 +419,13 @@ function buildServerPlatformOpenAiTools(args: { toolNames?: string[] }) {
396
419
  function: taskRunFunctionSchema,
397
420
  }]
398
421
  : []),
422
+ ...(toolNames.has("read_xhs_profile")
423
+ ? [{
424
+ type: "function",
425
+ function: readXhsProfileFunctionSchema,
426
+ }]
427
+ : []),
428
+ ...tableTools,
399
429
  ];
400
430
  }
401
431
 
@@ -467,29 +497,72 @@ function buildServerPlatformToolExecutors(args: {
467
497
  env: EnvLike;
468
498
  fetchImpl: typeof fetch;
469
499
  }) {
500
+ const postServer = async (path: string, body: object) => {
501
+ const serverUrl = resolveRuntimeServerUrl(args.env);
502
+ const authToken = resolveRuntimeAuthToken(args.env);
503
+ if (!serverUrl) throw new Error("server platform tools require NOLO_SERVER_URL, NOLO_SERVER, or BASE_URL.");
504
+ if (!authToken) throw new Error("server platform tools require AUTH_TOKEN or NOLO_MACHINE_API_KEY.");
505
+ const response = await args.fetchImpl(`${serverUrl}${path}`, {
506
+ method: "POST",
507
+ headers: {
508
+ "Content-Type": "application/json",
509
+ Authorization: `Bearer ${authToken}`,
510
+ },
511
+ body: JSON.stringify(body),
512
+ });
513
+ const text = await response.text().catch(() => "");
514
+ if (!response.ok) {
515
+ throw new Error(`server platform tool bridge failed: HTTP ${response.status} ${text.slice(0, 500)}`);
516
+ }
517
+ return text;
518
+ };
519
+ const guardExplicitTableCapture = (call: any) => {
520
+ if (inferCaptureIntent(String(call.userInput ?? "")) === "strong") return null;
521
+ return JSON.stringify({
522
+ error: "knowledge_capture_requires_confirmation",
523
+ message:
524
+ "当前本地运行不允许自动写入表格。只有当用户在当前请求里明确要求保存、建表、写入 table 或做成数据集时,才能继续;否则请先询问用户。",
525
+ policy: {
526
+ capability: "knowledge_capture",
527
+ target: "table",
528
+ mode: "explicit-only-local",
529
+ },
530
+ });
531
+ };
532
+ const tableExecutors = Object.fromEntries(
533
+ LOCAL_SERVER_TABLE_TOOL_NAMES.map((toolName) => [
534
+ toolName,
535
+ async (call: any) => {
536
+ const blocked = guardExplicitTableCapture(call);
537
+ if (blocked) {
538
+ return {
539
+ content: blocked,
540
+ metadata: { serverPlatformTool: true, tableWriteBlocked: true },
541
+ };
542
+ }
543
+ const parsed = parseNoloWorkspaceToolArguments(call.arguments);
544
+ const path =
545
+ toolName === "createTable" ? "/api/table/create"
546
+ : toolName === "addTableRow" ? "/api/table/add-row"
547
+ : toolName === "addTableRows" ? "/api/table/add-rows"
548
+ : toolName === "updateTableRow" ? "/api/table/update-row"
549
+ : "/api/table/update-rows";
550
+ const content = await postServer(path, parsed);
551
+ return {
552
+ content,
553
+ metadata: { serverPlatformTool: true, tableWrite: true },
554
+ };
555
+ },
556
+ ]),
557
+ );
470
558
  return {
471
559
  taskRun: async (call: any) => {
472
- const serverUrl = resolveRuntimeServerUrl(args.env);
473
- const authToken = resolveRuntimeAuthToken(args.env);
474
- if (!serverUrl) throw new Error("taskRun requires NOLO_SERVER_URL, NOLO_SERVER, or BASE_URL.");
475
- if (!authToken) throw new Error("taskRun requires AUTH_TOKEN or NOLO_MACHINE_API_KEY.");
476
- const response = await args.fetchImpl(`${serverUrl}/api/task-run`, {
477
- method: "POST",
478
- headers: {
479
- "Content-Type": "application/json",
480
- Authorization: `Bearer ${authToken}`,
481
- },
482
- body: JSON.stringify(parseNoloWorkspaceToolArguments(call.arguments)),
483
- });
484
- const text = await response.text().catch(() => "");
485
- if (!response.ok) {
486
- throw new Error(`taskRun bridge failed: HTTP ${response.status} ${text.slice(0, 500)}`);
487
- }
488
560
  return {
489
- content: text,
561
+ content: await postServer("/api/task-run", parseNoloWorkspaceToolArguments(call.arguments)),
490
562
  metadata: { serverPlatformTool: true },
491
563
  };
492
564
  },
565
+ ...tableExecutors,
493
566
  };
494
567
  }
495
568
 
@@ -498,9 +571,34 @@ function buildLocalToolExecutors(args: {
498
571
  env: EnvLike;
499
572
  fetchImpl: typeof fetch;
500
573
  localToolExecutors?: CliLocalRuntimeAdapterDeps["localToolExecutors"];
574
+ readXhsProfile?: CliLocalRuntimeAdapterDeps["readXhsProfile"];
501
575
  commandTimeoutMs?: number;
502
576
  commandOutputLimit?: number;
503
577
  }) {
578
+ const resolveCliDefaultXhsArgs = (parsedArgs: any) => {
579
+ if (
580
+ parsedArgs?.profileDir ||
581
+ parsedArgs?.profile_dir ||
582
+ args.env.NOLO_XHS_READER_PROFILE_DIR
583
+ ) {
584
+ return parsedArgs;
585
+ }
586
+ return {
587
+ ...parsedArgs,
588
+ profileDir: resolveDefaultXhsProfileDir({
589
+ env: {
590
+ ...process.env,
591
+ ...args.env,
592
+ NOLO_DESKTOP: "1",
593
+ NOLO_DESKTOP_CHANNEL:
594
+ args.env.NOLO_DESKTOP_CHANNEL?.trim() ||
595
+ args.env.NOLO_XHS_READER_DESKTOP_CHANNEL?.trim() ||
596
+ "stable",
597
+ },
598
+ }),
599
+ };
600
+ };
601
+
504
602
  return {
505
603
  ...createLocalWorkspaceToolExecutors({
506
604
  workspaceRoot: args.workspaceRoot,
@@ -514,6 +612,22 @@ function buildLocalToolExecutors(args: {
514
612
  ...buildCliWorkspaceToolExecutors({
515
613
  env: args.env,
516
614
  }),
615
+ read_xhs_profile: async (call: any) => {
616
+ const parsedArgs = (() => {
617
+ try { return JSON.parse(call.arguments || "{}"); } catch { return {}; }
618
+ })();
619
+ const result = await (args.readXhsProfile ?? readXhsProfileFunc)(
620
+ resolveCliDefaultXhsArgs(parsedArgs),
621
+ undefined,
622
+ );
623
+ return {
624
+ content: JSON.stringify(result.rawData),
625
+ metadata: {
626
+ xhsLocalBridge: true,
627
+ displayData: result.displayData,
628
+ },
629
+ };
630
+ },
517
631
  ...(args.localToolExecutors ?? {}),
518
632
  };
519
633
  }
@@ -599,6 +713,7 @@ export function createCliLocalRuntimeAdapter(
599
713
  env: deps.env,
600
714
  fetchImpl,
601
715
  localToolExecutors: deps.localToolExecutors,
716
+ readXhsProfile: deps.readXhsProfile,
602
717
  ...runtimeToolExecutionLimits,
603
718
  });
604
719
 
@@ -629,6 +744,7 @@ export function createCliLocalRuntimeAdapter(
629
744
  env: deps.env,
630
745
  fetchImpl,
631
746
  localToolExecutors: deps.localToolExecutors,
747
+ readXhsProfile: deps.readXhsProfile,
632
748
  ...runtimeToolExecutionLimits,
633
749
  });
634
750
  return agentConfig;
@@ -725,7 +841,7 @@ export function createCliLocalRuntimeAdapter(
725
841
  messages,
726
842
  tools,
727
843
  });
728
- const signal = buildRequestTimeoutSignal(options?.timeoutMs);
844
+ const timeoutSignal = buildRequestTimeoutSignal(options?.timeoutMs);
729
845
  logLocalRuntimeDiagnostic("provider.request.start", {
730
846
  agentKey: agentConfig.key,
731
847
  transport: "platform-proxy",
@@ -740,11 +856,11 @@ export function createCliLocalRuntimeAdapter(
740
856
  });
741
857
  const res = await fetchWithTransientRetry(fetchImpl, request.url, {
742
858
  ...request.init,
743
- ...(signal ? { signal } : {}),
859
+ ...(timeoutSignal ? { signal: timeoutSignal.signal } : {}),
744
860
  }, {
745
861
  sleep: deps.sleep,
746
862
  loopbackRequest,
747
- });
863
+ }).finally(() => timeoutSignal?.clear());
748
864
  const raw = await res.text().catch(() => "");
749
865
  logLocalRuntimeDiagnostic("provider.request.result", {
750
866
  agentKey: agentConfig.key,
@@ -798,7 +914,7 @@ export function createCliLocalRuntimeAdapter(
798
914
  messages,
799
915
  tools,
800
916
  });
801
- const signal = buildRequestTimeoutSignal(options?.timeoutMs);
917
+ const timeoutSignal = buildRequestTimeoutSignal(options?.timeoutMs);
802
918
  logLocalRuntimeDiagnostic("provider.request.start", {
803
919
  agentKey: agentConfig.key,
804
920
  transport: "direct-openai-compatible",
@@ -812,11 +928,11 @@ export function createCliLocalRuntimeAdapter(
812
928
  });
813
929
  const res = await fetchWithTransientRetry(fetchImpl, request.url, {
814
930
  ...request.init,
815
- ...(signal ? { signal } : {}),
931
+ ...(timeoutSignal ? { signal: timeoutSignal.signal } : {}),
816
932
  }, {
817
933
  sleep: deps.sleep,
818
934
  loopbackRequest,
819
- });
935
+ }).finally(() => timeoutSignal?.clear());
820
936
  const raw = await res.text().catch(() => "");
821
937
  logLocalRuntimeDiagnostic("provider.request.result", {
822
938
  agentKey: agentConfig.key,
@@ -887,6 +887,58 @@ describe("cli agent run client", () => {
887
887
  expect(output.text()).toContain("pm > server ok");
888
888
  });
889
889
 
890
+ test("auto mode keeps local runtime for CLI provider agents even when they declare platform tools", async () => {
891
+ const output = new CaptureOutput();
892
+ const httpCalls: string[] = [];
893
+ let providerCalled = false;
894
+
895
+ const result = await runAgentTurn({
896
+ agentName: "frontend-implementer",
897
+ agentKey: "frontend-implementer",
898
+ serverUrl: "https://nolo.chat",
899
+ message: "polish notifications",
900
+ scriptDir: "C:/missing/scripts",
901
+ env: { AUTH_TOKEN: "token-123" },
902
+ output,
903
+ runtimeMode: "auto",
904
+ localRuntimeAdapter: {
905
+ host: "cli",
906
+ capabilities: ["leveldb-agent-config", "local-provider", "local-tools"],
907
+ loadAgentConfig: async (agentRef) => ({
908
+ key: agentRef,
909
+ name: "AGY",
910
+ prompt: "Implement frontend tasks.",
911
+ provider: "agy",
912
+ cliProvider: "agy",
913
+ toolNames: ["streamParallelAgents", "taskRun"],
914
+ }),
915
+ loadDialogHistory: async () => [],
916
+ saveTurn: async () => ({ dialogId: "dialog-agy-auto-local" }),
917
+ resolveProvider: async () => ({
918
+ model: "agy",
919
+ complete: async () => {
920
+ providerCalled = true;
921
+ return { content: "agy local ok", model: "agy" };
922
+ },
923
+ }),
924
+ executeTool: async () => {
925
+ throw new Error("no tools expected");
926
+ },
927
+ },
928
+ fetchImpl: async (url) => {
929
+ httpCalls.push(String(url));
930
+ return Response.json({ content: "server" });
931
+ },
932
+ });
933
+
934
+ expect(providerCalled).toBe(true);
935
+ expect(result).toEqual({ exitCode: 0, dialogId: "dialog-agy-auto-local" });
936
+ expect(httpCalls).toEqual([]);
937
+ expect(output.text()).not.toContain("skipping local runtime");
938
+ expect(output.text()).toContain("frontend-implementer -> working locally");
939
+ expect(output.text()).toContain("frontend-implementer > agy local ok");
940
+ });
941
+
890
942
  test("auto mode does not skip monthly Mimo when a local shell cwd is already bound", async () => {
891
943
  const output = new CaptureOutput();
892
944
  const httpCalls: string[] = [];
@@ -197,6 +197,16 @@ function isMachineBoundLocalhostCustomProvider(agentConfig: any) {
197
197
  }
198
198
  }
199
199
 
200
+ function isCliProviderAgentConfig(agentConfig: any) {
201
+ const cliProvider = typeof agentConfig?.cliProvider === "string"
202
+ ? agentConfig.cliProvider.trim()
203
+ : "";
204
+ const provider = typeof agentConfig?.provider === "string"
205
+ ? agentConfig.provider.trim()
206
+ : "";
207
+ return Boolean(cliProvider) || provider === "agy" || provider === "codex" || provider === "claude";
208
+ }
209
+
200
210
  function resolveAuthToken(env: EnvLike) {
201
211
  return env.AUTH_TOKEN || env.AUTH || env.BENCHMARK_AUTH_TOKEN || "";
202
212
  }
@@ -234,21 +244,30 @@ async function shouldSkipAutoLocalForServerPlatformTools(options: RunAgentTurnOp
234
244
  if (options.localRuntimeCwd) {
235
245
  return false;
236
246
  }
237
- if (isKnownServerPlatformAgent(options)) {
238
- options.output.write(
239
- `[nolo] auto runtime: skipping local runtime because ${options.agentKey} is a known platform agent. ` +
240
- "Use --local explicitly to force local workspace tools.\n"
241
- );
242
- return true;
243
- }
247
+ const knownServerPlatformAgent = isKnownServerPlatformAgent(options);
244
248
  const adapter = resolveLocalRuntimeAdapter(options);
245
- if (!adapter) return false;
249
+ if (!adapter) return knownServerPlatformAgent;
246
250
  let agentConfig;
247
251
  try {
248
252
  agentConfig = await adapter.loadAgentConfig(options.agentKey);
249
253
  } catch {
254
+ if (knownServerPlatformAgent) {
255
+ options.output.write(
256
+ `[nolo] auto runtime: skipping local runtime because ${options.agentKey} is a known platform agent. ` +
257
+ "Use --local explicitly to force local workspace tools.\n"
258
+ );
259
+ return true;
260
+ }
250
261
  return false;
251
262
  }
263
+ if (isCliProviderAgentConfig(agentConfig)) return false;
264
+ if (knownServerPlatformAgent) {
265
+ options.output.write(
266
+ `[nolo] auto runtime: skipping local runtime because ${options.agentKey} is a known platform agent. ` +
267
+ "Use --local explicitly to force local workspace tools.\n"
268
+ );
269
+ return true;
270
+ }
252
271
  if (isMachineBoundLocalhostCustomProvider(agentConfig)) {
253
272
  options.output.write(
254
273
  `[nolo] auto runtime: skipping local runtime because ${options.agentKey} is a machine-bound localhost custom provider. ` +