nolo-cli 0.1.39 → 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.
- package/README.md +4 -4
- package/agent-runtime/dialogWritePlan.ts +39 -0
- package/agent-runtime/hostAdapter.ts +4 -0
- package/agent-runtime/hybridRecordStore.ts +5 -3
- package/agent-runtime/index.ts +15 -0
- package/agent-runtime/localLoop.ts +87 -7
- package/agent-runtime/localToolPolicy.ts +2 -13
- package/agent-runtime/localWorkspaceTools.ts +42 -110
- package/agent-runtime/runtimeToolPolicy.ts +2 -11
- package/agent-runtime/runtimeToolSurface.ts +198 -0
- package/agent-runtime/types.ts +1 -0
- package/agentAliases.ts +2 -1
- package/agentRunCommand.ts +10 -32
- package/agentRuntimeLocal.ts +1 -0
- package/ai/agent/_executeModel.ts +146 -0
- package/ai/agent/agentSlice.ts +556 -1
- package/ai/agent/appWorkingMemory.ts +126 -0
- package/ai/agent/buildEditingContext.ts +378 -0
- package/ai/agent/buildSystemPrompt.ts +585 -0
- package/ai/agent/canvasEditingContext.ts +49 -0
- package/ai/agent/cleanAgentMessages.ts +140 -0
- package/ai/agent/cliChatClient.ts +153 -0
- package/ai/agent/cliExecutor.ts +314 -40
- package/ai/agent/contextCompiler.ts +107 -0
- package/ai/agent/contextLayerContract.ts +44 -0
- package/ai/agent/createAgentSchema.ts +272 -0
- package/ai/agent/currentTimeContext.ts +65 -0
- package/ai/agent/executeToolCall.ts +58 -0
- package/ai/agent/fetchAgentContexts.ts +42 -0
- package/ai/agent/generatePrompt.ts +3 -0
- package/ai/agent/getFullChatContextKeys.ts +168 -0
- package/ai/agent/guidedCreation/capabilities.ts +84 -0
- package/ai/agent/guidedCreation/types.ts +38 -0
- package/ai/agent/isLiveAudioOnlyAgent.ts +26 -0
- package/ai/agent/liveAudioModel.ts +2 -0
- package/ai/agent/pageBuilderHandoffRules.ts +75 -0
- package/ai/agent/persistMessageWithFixedId.ts +37 -0
- package/ai/agent/planSlice.ts +259 -0
- package/ai/agent/referenceUtils.ts +229 -0
- package/ai/agent/runAgentBackground.ts +310 -0
- package/ai/agent/runAgentClientLoop.ts +164 -0
- package/ai/agent/runtimeGuidance.ts +116 -0
- package/ai/agent/serverOrigin.ts +7 -0
- package/ai/agent/startParallelAgentStreams.ts +424 -0
- package/ai/agent/startupProtocol.ts +53 -0
- package/ai/agent/streamAgentChatTurn.ts +2001 -0
- package/ai/agent/streamAgentChatTurnUtils.ts +860 -0
- package/ai/agent/toolFailureGuard.ts +99 -0
- package/ai/agent/types.ts +73 -0
- package/ai/agent/utils/imageOutput.ts +37 -0
- package/ai/agent/utils/publicImageAgentMode.ts +26 -0
- package/ai/ai.locale.ts +1095 -0
- package/ai/chat/accumulateToolCallChunks.ts +126 -0
- package/ai/chat/fetchUtils.ts +143 -0
- package/ai/chat/inlineImageUrlsForCustomProvider.ts +117 -0
- package/ai/chat/parseApiError.ts +67 -0
- package/ai/chat/parseMultilineSSE.ts +95 -0
- package/ai/chat/sendOpenAICompletionsRequest.ts +897 -0
- package/ai/chat/sendOpenAIResponseRequest.ts +720 -0
- package/ai/chat/serverProxyRetry.ts +102 -0
- package/ai/chat/shouldUseServerProxy.ts +18 -0
- package/ai/chat/streamRetry.ts +46 -0
- package/ai/chat/updateTotalUsage.ts +89 -0
- package/ai/context/buildReferenceContext.ts +437 -0
- package/ai/context/retention.ts +165 -0
- package/ai/context/tokenUtils.ts +78 -0
- package/ai/llm/agentCapabilities.ts +74 -0
- package/ai/llm/deepinfra.ts +79 -0
- package/ai/llm/fireworks.ts +68 -0
- package/ai/llm/generateRequestBody.ts +165 -0
- package/ai/llm/getModelContextWindow.ts +93 -0
- package/ai/llm/getPricing.ts +252 -0
- package/ai/llm/imagePricing.ts +66 -0
- package/ai/llm/isResponseAPIModel.ts +13 -0
- package/ai/llm/kimi.ts +23 -0
- package/ai/llm/mimo.ts +99 -0
- package/ai/llm/mistral.ts +21 -0
- package/ai/llm/models.ts +45 -0
- package/ai/llm/openrouterModels.ts +6 -0
- package/ai/llm/providers.ts +313 -0
- package/ai/llm/reasoningModels.ts +27 -0
- package/ai/llm/types.ts +82 -0
- package/ai/llm/usageRequestOptions.ts +59 -0
- package/ai/memory/queryShared.ts +161 -0
- package/ai/memory/recentRelationshipRecap.ts +247 -0
- package/ai/memory/remember.ts +167 -0
- package/ai/memory/store.ts +20 -0
- package/ai/memory/storeShared.ts +76 -0
- package/ai/memory/types.ts +46 -0
- package/ai/memory/understanding.ts +349 -0
- package/ai/memory/understandingGreeting.ts +264 -0
- package/ai/policy/personalizationDialog.ts +333 -0
- package/ai/policy/runtimePolicy.ts +454 -0
- package/ai/policy/selfUpdateFields.ts +48 -0
- package/ai/policy/types.ts +64 -0
- package/ai/skills/referenceRuntime.ts +274 -0
- package/ai/skills/skillDiagnostics.ts +251 -0
- package/ai/skills/skillDocBuilder.ts +139 -0
- package/ai/skills/skillSummaryMarker.ts +26 -0
- package/ai/token/calculatePrice.ts +576 -0
- package/ai/token/missingUsageEstimate.ts +42 -0
- package/ai/token/normalizeUsage.ts +124 -0
- package/ai/token/openaiImageGenerationUsage.ts +56 -0
- package/ai/token/prepareTokenUsageData.ts +93 -0
- package/ai/token/resolveBillingTarget.ts +52 -0
- package/ai/token/saveTokenRecord.ts +53 -0
- package/ai/token/types.ts +103 -0
- package/ai/tools/agent/agentTools.ts +235 -0
- package/ai/tools/agent/agentUpdateShared.ts +311 -0
- package/ai/tools/agent/callAgentTool.ts +139 -0
- package/ai/tools/agent/createAgentTool.ts +512 -0
- package/ai/tools/agent/createDialogTool.ts +69 -0
- package/ai/tools/agent/createSkillAgentTool.ts +62 -0
- package/ai/tools/agent/parallelBudget.ts +221 -0
- package/ai/tools/agent/prepareAgentDraftTool.ts +159 -0
- package/ai/tools/agent/presets/appBuilderPreset.ts +154 -0
- package/ai/tools/agent/runLlmTool.ts +96 -0
- package/ai/tools/agent/runStreamingAgentTool.ts +73 -0
- package/ai/tools/agent/skillAgentArgs.ts +106 -0
- package/ai/tools/agent/startAgentDialogTool.ts +53 -0
- package/ai/tools/agent/streamParallelAgentsTool.ts +123 -0
- package/ai/tools/agent/updateAgentTool.ts +96 -0
- package/ai/tools/agent/updateSelfTool.ts +113 -0
- package/ai/tools/amazonProductScraperTool.ts +86 -0
- package/ai/tools/apifyActorClient.ts +45 -0
- package/ai/tools/appEditGuard.ts +372 -0
- package/ai/tools/appReadSnapshot.ts +153 -0
- package/ai/tools/appTools.ts +1549 -0
- package/ai/tools/applyEditTool.ts +259 -0
- package/ai/tools/applyLineEditsTool.ts +315 -0
- package/ai/tools/browserTools/click.ts +33 -0
- package/ai/tools/browserTools/closeSession.ts +29 -0
- package/ai/tools/browserTools/common.ts +27 -0
- package/ai/tools/browserTools/openSession.ts +48 -0
- package/ai/tools/browserTools/readContent.ts +38 -0
- package/ai/tools/browserTools/selectOption.ts +46 -0
- package/ai/tools/browserTools/typeText.ts +42 -0
- package/ai/tools/category/createCategoryTool.ts +66 -0
- package/ai/tools/category/queryContentsByCategoryTool.ts +69 -0
- package/ai/tools/category/updateContentCategoryTool.ts +75 -0
- package/ai/tools/cfBrowserTools.ts +319 -0
- package/ai/tools/cfSpeechToTextTool.ts +49 -0
- package/ai/tools/checkEnvTool.ts +102 -0
- package/ai/tools/cloudflareCrawlTool.ts +289 -0
- package/ai/tools/codeSearchTool.ts +123 -0
- package/ai/tools/codeTools.ts +101 -0
- package/ai/tools/convertMarxistsBookTool.ts +103 -0
- package/ai/tools/createDocTool.ts +132 -0
- package/ai/tools/createSkillDocTool.ts +155 -0
- package/ai/tools/createWorkflowTool.ts +154 -0
- package/ai/tools/delayTool.ts +31 -0
- package/ai/tools/deleteSpacesTool.ts +325 -0
- package/ai/tools/deleteSpacesToolModel.ts +159 -0
- package/ai/tools/devReloadUtils.ts +29 -0
- package/ai/tools/dialogMessageSearch.ts +137 -0
- package/ai/tools/doctorSkillTool.ts +72 -0
- package/ai/tools/ecommerceScraperTool.ts +86 -0
- package/ai/tools/emailTools.ts +549 -0
- package/ai/tools/evalSkillTool.ts +92 -0
- package/ai/tools/exaSearchTool.ts +63 -0
- package/ai/tools/execShellTool.ts +266 -0
- package/ai/tools/executeSqlTool.ts +192 -0
- package/ai/tools/fetchWebpageSupport.ts +333 -0
- package/ai/tools/fetchWebpageTool.ts +97 -0
- package/ai/tools/geminiImagePreviewTool.ts +386 -0
- package/ai/tools/generateDocxTool.ts +215 -0
- package/ai/tools/googleSearchScraperTool.ts +106 -0
- package/ai/tools/importDataTool.ts +133 -0
- package/ai/tools/importSkillTool.ts +162 -0
- package/ai/tools/index.ts +2308 -0
- package/ai/tools/jdProductScraperTool.ts +821 -0
- package/ai/tools/listUserSpacesTool.ts +113 -0
- package/ai/tools/localFilesTool.ts +276 -0
- package/ai/tools/marxistsOfflineBook.ts +253 -0
- package/ai/tools/modelUsageTools.ts +206 -0
- package/ai/tools/noloWorkspaceReadTools.ts +467 -0
- package/ai/tools/olmOcrTool.ts +33 -0
- package/ai/tools/openaiImageTool.ts +267 -0
- package/ai/tools/prepareTools.ts +23 -0
- package/ai/tools/readDocTool.ts +88 -0
- package/ai/tools/readFileTool.ts +214 -0
- package/ai/tools/readTool.ts +194 -0
- package/ai/tools/readXPostTool.ts +229 -0
- package/ai/tools/readXhsProfileTool.ts +627 -0
- package/ai/tools/rememberMemoryTool.ts +84 -0
- package/ai/tools/remotionVideoTool.ts +151 -0
- package/ai/tools/searchDialogMessagesTool.ts +222 -0
- package/ai/tools/searchWorkspaceTool.ts +259 -0
- package/ai/tools/skillFollowup.ts +86 -0
- package/ai/tools/surfWeatherTool.ts +169 -0
- package/ai/tools/table/addTableRowTool.ts +217 -0
- package/ai/tools/table/createTableTool.ts +315 -0
- package/ai/tools/table/rowTools.ts +386 -0
- package/ai/tools/table/schemaTools.ts +244 -0
- package/ai/tools/table/shareTableTool.ts +148 -0
- package/ai/tools/table/toolShared.ts +129 -0
- package/ai/tools/taobaoTmallProductScraperTool.ts +49 -0
- package/ai/tools/toolApiClient.ts +279 -0
- package/ai/tools/toolResultError.ts +42 -0
- package/ai/tools/toolRunSlice.ts +303 -0
- package/ai/tools/toolSchemaCompatibility.ts +53 -0
- package/ai/tools/uiAskChoiceTool.ts +104 -0
- package/ai/tools/updateContentTitleTool.ts +84 -0
- package/ai/tools/updateDocTool.ts +105 -0
- package/ai/tools/updateUserPreferenceProfileTool.ts +153 -0
- package/ai/tools/wereadGatewayTool.ts +152 -0
- package/ai/tools/whisperTool.ts +76 -0
- package/ai/tools/writeFileTool.ts +213 -0
- package/ai/tools/youtubeScraperTool.ts +116 -0
- package/ai/tools/ziweiChartTool.ts +678 -0
- package/ai/types.ts +55 -0
- package/ai/workflow/workflowExecutor.ts +323 -0
- package/ai/workflow/workflowSlice.ts +73 -0
- package/ai/workflow/workflowTypes.ts +106 -0
- package/app/actions/syncAppRecord.ts +73 -0
- package/app/constants/animationSets.ts +21 -0
- package/app/constants/appEditor.ts +99 -0
- package/app/favorite/favoriteSlice.ts +690 -0
- package/app/favorite/type.ts +43 -0
- package/app/hooks/deleteDbKey.ts +233 -0
- package/app/i18n/client.ts +13 -0
- package/app/i18n/i18n.base.ts +14 -0
- package/app/i18n/i18n.config.ts +77 -0
- package/app/i18n/index.ts +15 -0
- package/app/i18n/mapLanguage.ts +11 -0
- package/app/i18n/translations/appBuilder.locale.ts +453 -0
- package/app/i18n/translations/error.locale.ts +246 -0
- package/app/i18n/translations/interface.locale.ts +2174 -0
- package/app/i18n/translations/pricing.locale.ts +397 -0
- package/app/i18n/translations/privacy.locale.ts +168 -0
- package/app/i18n/translations/seo.locale.ts +129 -0
- package/app/i18n/translations/terms.locale.ts +124 -0
- package/app/i18n/types.ts +6 -0
- package/app/notifications/model.ts +77 -0
- package/app/notifications/notificationSlice.ts +141 -0
- package/app/reducer.ts +36 -0
- package/app/settings/dbActionThunks.ts +34 -0
- package/app/settings/defaultSpacePreference.ts +87 -0
- package/app/settings/settingSlice.tsx +1212 -0
- package/app/settings/settingsRecord.ts +8 -0
- package/app/stateViews/runtime.ts +90 -0
- package/app/store.ts +55 -0
- package/app/theme/colors.ts +280 -0
- package/app/theme/fontPreference.ts +77 -0
- package/app/theme/theme.config.ts +120 -0
- package/app/theme/themeModeBootstrap.ts +123 -0
- package/app/types/appSummary.ts +114 -0
- package/app/types.ts +358 -0
- package/app/utils/appKeys.ts +55 -0
- package/app/utils/async.ts +28 -0
- package/app/utils/desktopAgentRuntimeTurnClient.ts +73 -0
- package/app/utils/env.ts +17 -0
- package/app/utils/fileUtils.ts +229 -0
- package/app/utils/imageUtils.ts +274 -0
- package/app/utils/myContentItems.ts +289 -0
- package/app/utils/retryAfter.ts +36 -0
- package/app/utils/retryFetch.ts +61 -0
- package/app/utils/toast.ts +3 -0
- package/auth/action/signUpAction.ts +227 -0
- package/auth/adminPermissions.ts +18 -0
- package/auth/authSlice.ts +531 -0
- package/auth/client/loginRequest.ts +14 -0
- package/auth/resetAuthScopedClientState.ts +27 -0
- package/auth/routes.ts +178 -0
- package/auth/token.ts +63 -0
- package/auth/types.ts +40 -0
- package/chat/chat.locale.ts +813 -0
- package/chat/dialog/actions/addCybotAction.ts +52 -0
- package/chat/dialog/actions/addReferenceKeysAction.ts +62 -0
- package/chat/dialog/actions/builtinDialogLlm.ts +35 -0
- package/chat/dialog/actions/cleanupCliSession.ts +40 -0
- package/chat/dialog/actions/createDialogAction.ts +379 -0
- package/chat/dialog/actions/createScheduledTaskAction.ts +78 -0
- package/chat/dialog/actions/handleSendMessageAction.ts +197 -0
- package/chat/dialog/actions/handleSendMessageResolver.ts +27 -0
- package/chat/dialog/actions/removeCybotAction.ts +6 -0
- package/chat/dialog/actions/removeDialogAgentAction.ts +44 -0
- package/chat/dialog/actions/replacePrimaryCybotAction.ts +6 -0
- package/chat/dialog/actions/setPrimaryDialogAgentAction.ts +52 -0
- package/chat/dialog/actions/updateDialogSummaryAction.ts +430 -0
- package/chat/dialog/actions/updateDialogTitleAction.ts +151 -0
- package/chat/dialog/actions/updateDialogTitlePolicy.ts +30 -0
- package/chat/dialog/actions/updateTokensAction.ts +233 -0
- package/chat/dialog/dialogAgents.ts +72 -0
- package/chat/dialog/dialogSlice.ts +872 -0
- package/chat/dialog/dialogTitle.ts +81 -0
- package/chat/dialog/dialogTokenStats.ts +12 -0
- package/chat/dialog/dialogUrl.ts +6 -0
- package/chat/dialog/goal.ts +108 -0
- package/chat/dialog/objectAssistantRegistry.ts +286 -0
- package/chat/dialog/schedule.ts +17 -0
- package/chat/messages/fetchAndCacheMessages.ts +119 -0
- package/chat/messages/fetchConvMsgs.ts +51 -0
- package/chat/messages/fileUrl.ts +13 -0
- package/chat/messages/messageAgent.ts +8 -0
- package/chat/messages/messageContent.ts +199 -0
- package/chat/messages/messageContract.ts +88 -0
- package/chat/messages/messageSlice.ts +1367 -0
- package/chat/messages/toolThunks.ts +625 -0
- package/cli/agentAliases.ts +2 -1
- package/cli/agentRunCommand.ts +10 -32
- package/cli/agentRuntimeLocal.ts +1 -0
- package/cli/client/agentRun.ts +67 -95
- package/cli/client/localRuntimeAdapter.ts +323 -54
- package/cli/commandRegistry.ts +2 -2
- package/cli/machineWsRunDispatch.ts +51 -6
- package/cli/offlineMarxistsAgentCommand.ts +6 -4
- package/client/agentConfigResolver.test.ts +2 -2
- package/client/agentRun.test.ts +175 -57
- package/client/agentRun.ts +67 -95
- package/client/localRuntimeAdapter.test.ts +682 -37
- package/client/localRuntimeAdapter.ts +323 -54
- package/client/localRuntimeDryRun.test.ts +23 -9
- package/client/localToolPolicy.test.ts +4 -4
- package/commandRegistry.ts +2 -2
- package/core/builtinAgents.ts +209 -0
- package/core/config.ts +15 -0
- package/core/crypto.ts +51 -0
- package/core/generateKeyPairFromSeedV1.ts +15 -0
- package/core/generateMainKey.ts +22 -0
- package/core/init.ts +41 -0
- package/core/localOrigins.ts +8 -0
- package/core/password.ts +13 -0
- package/core/prefix.ts +23 -0
- package/create/editor/transforms/fromMarkdown/index.ts +260 -0
- package/create/editor/transforms/fromMarkdown/inline.ts +285 -0
- package/create/editor/transforms/fromMarkdown/table.ts +130 -0
- package/create/editor/transforms/markdownToSlate.ts +24 -0
- package/create/editor/transforms/slateToRenderMarkdown.ts +218 -0
- package/create/editor/transforms/slateToSimplifiedMarkdown.ts +224 -0
- package/create/editor/transforms/slateToText.ts +33 -0
- package/create/editor/utils/slateUtils.ts +233 -0
- package/create/space/addSpaceAction.ts +193 -0
- package/create/space/category/categoryActions.ts +427 -0
- package/create/space/changeSpaceAction.ts +36 -0
- package/create/space/constants.ts +8 -0
- package/create/space/content/addContentAction.ts +116 -0
- package/create/space/content/contentThunks.ts +90 -0
- package/create/space/content/deleteContentFromSpaceAction.ts +187 -0
- package/create/space/content/deleteMultipleContentAction.ts +112 -0
- package/create/space/content/moveContentAction.ts +285 -0
- package/create/space/content/updateContentCategoryAction.ts +154 -0
- package/create/space/content/updateContentTitleAction.ts +151 -0
- package/create/space/content/uploadAndAddFileToSpaceAction.ts +98 -0
- package/create/space/contentKeyUtils.ts +117 -0
- package/create/space/deleteSpaceAction.ts +276 -0
- package/create/space/fetchSpaceAction.ts +70 -0
- package/create/space/fetchSpaceSidebarStateAction.ts +26 -0
- package/create/space/loadDefaultSpaceAction.ts +57 -0
- package/create/space/member/addMemberAction.ts +79 -0
- package/create/space/member/fetchUserSpaceMembershipsAction.ts +386 -0
- package/create/space/member/memberThunks.ts +47 -0
- package/create/space/member/removeMemberAction.ts +67 -0
- package/create/space/resolvePreferredSpaceId.ts +113 -0
- package/create/space/sidebarVisibleTypes.ts +241 -0
- package/create/space/space.locale.ts +1087 -0
- package/create/space/spaceAccess.ts +182 -0
- package/create/space/spaceCollapsedState.ts +54 -0
- package/create/space/spaceKeys.ts +65 -0
- package/create/space/spaceSlice.ts +328 -0
- package/create/space/spaceThunks.ts +410 -0
- package/create/space/types.ts +27 -0
- package/create/space/updateSpaceAction.ts +107 -0
- package/create/space/utils/permissions.ts +47 -0
- package/create/types.ts +21 -0
- package/database/actions/agentReadResolution.ts +33 -0
- package/database/actions/common.ts +243 -0
- package/database/actions/deleteFile.ts +40 -0
- package/database/actions/fileContent.ts +125 -0
- package/database/actions/patch.ts +155 -0
- package/database/actions/read.ts +358 -0
- package/database/actions/readAndWait.ts +260 -0
- package/database/actions/readRequestManager.ts +120 -0
- package/database/actions/readResolution.ts +125 -0
- package/database/actions/remove.ts +94 -0
- package/database/actions/replication.ts +477 -0
- package/database/actions/upload.ts +186 -0
- package/database/actions/upsert.ts +56 -0
- package/database/actions/write.ts +146 -0
- package/database/authority/ownerKey.ts +80 -0
- package/database/authority/recordAuthority.ts +67 -0
- package/database/authority/userAuthorityRegistry.ts +54 -0
- package/database/client/fetchUserData.ts +61 -0
- package/database/dbActionThunks.ts +1 -0
- package/database/dbSlice.ts +149 -0
- package/database/fileRing.ts +51 -0
- package/database/fileStorage.ts +232 -0
- package/database/fileUrl.ts +34 -0
- package/database/keys.ts +767 -0
- package/database/queryPrefixes.ts +14 -0
- package/database/requests.ts +443 -0
- package/database/runtimeServerContext.ts +54 -0
- package/database/server/levelAuthorityStore.ts +20 -1
- package/database/tenantPlacement.ts +57 -0
- package/database/userPreferenceRegister.ts +131 -0
- package/database/utils/ulid.ts +1 -0
- package/integrations/anthropic/anthropicModels.ts +47 -0
- package/integrations/deepseek/models.ts +37 -0
- package/integrations/google/models.ts +341 -0
- package/integrations/openai/chatCompletionStreamMode.ts +10 -0
- package/integrations/openai/filterAndCleanMessages.ts +284 -0
- package/integrations/openai/flexTier.ts +102 -0
- package/integrations/openai/generateOpenAIRequestBody.ts +274 -0
- package/integrations/openai/generateResponseRequestBody.ts +77 -0
- package/integrations/openai/models.ts +271 -0
- package/integrations/openai/providerBodyCompatibility.ts +23 -0
- package/integrations/openai/responsesHelpers.ts +297 -0
- package/integrations/x-reader/types.ts +109 -0
- package/integrations/xai/models.ts +13 -0
- package/integrations/xhs-reader/analyze/profileAnalyzer.ts +205 -0
- package/integrations/xhs-reader/backends/playwrightProfileCollector.ts +624 -0
- package/integrations/xhs-reader/bridge/readXhsProfileWithBridge.ts +227 -0
- package/integrations/xhs-reader/client/xhsWebApiClient.ts +229 -0
- package/integrations/xhs-reader/normalize.ts +390 -0
- package/integrations/xhs-reader/orchestrator.ts +178 -0
- package/integrations/xhs-reader/redaction.ts +68 -0
- package/integrations/xhs-reader/types.ts +244 -0
- package/integrations/xhs-reader/url.ts +57 -0
- package/machineWsRunDispatch.ts +51 -6
- package/offlineMarxistsAgentCommand.ts +6 -4
- package/package.json +430 -3
- package/render/page/createPageAction.ts +183 -0
- package/render/page/docSlice.ts +468 -0
- package/render/page/types.ts +17 -0
- package/render/table/createTableAction.ts +270 -0
- package/render/table/deleteTableAction.ts +193 -0
- package/render/table/fetchAndCacheTableRows.ts +174 -0
- package/render/table/tableSlice.ts +1106 -0
- package/render/table/toolValueUtils.ts +363 -0
- package/render/table/types.ts +252 -0
- package/render/table/utils/tableSerialization.ts +50 -0
- package/server/handlers/agentRun/types.ts +104 -0
- package/share/action.ts +225 -0
- package/share/helpers.ts +302 -0
- package/share/keys.ts +243 -0
- package/share/publicSharePolicy.ts +27 -0
- package/share/shareSlice.ts +53 -0
- package/share/types.ts +100 -0
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
// XHS Desktop Connector - Read-only types
|
|
2
|
+
|
|
3
|
+
export type XhsFailureCode =
|
|
4
|
+
| "not_logged_in"
|
|
5
|
+
| "login_required"
|
|
6
|
+
| "blocked"
|
|
7
|
+
| "empty_profile_state"
|
|
8
|
+
| "profile_not_found"
|
|
9
|
+
| "note_not_found"
|
|
10
|
+
| "rate_limited"
|
|
11
|
+
| "network_error"
|
|
12
|
+
| "parse_error"
|
|
13
|
+
| "comment_disabled"
|
|
14
|
+
| "unknown";
|
|
15
|
+
|
|
16
|
+
export type XhsReadFailure = {
|
|
17
|
+
ok: false;
|
|
18
|
+
code: XhsFailureCode;
|
|
19
|
+
message: string;
|
|
20
|
+
fetchedAt: string;
|
|
21
|
+
};
|
|
22
|
+
|
|
23
|
+
export type XhsReadSuccess<T> = {
|
|
24
|
+
ok: true;
|
|
25
|
+
data: T;
|
|
26
|
+
fetchedAt: string;
|
|
27
|
+
};
|
|
28
|
+
|
|
29
|
+
export type XhsReadResult<T> = XhsReadSuccess<T> | XhsReadFailure;
|
|
30
|
+
|
|
31
|
+
// --- Collector diagnostics (redacted, no secrets) ---
|
|
32
|
+
|
|
33
|
+
export type XhsCollectorDiagnostic = {
|
|
34
|
+
/** Why the collector returned empty or failed data. */
|
|
35
|
+
code: XhsFailureCode;
|
|
36
|
+
/** Human-readable explanation. */
|
|
37
|
+
message: string;
|
|
38
|
+
/** Page title at the time of collection (may be empty). */
|
|
39
|
+
pageTitle?: string;
|
|
40
|
+
/** Final page URL after navigation (may differ if redirected). */
|
|
41
|
+
finalUrl?: string;
|
|
42
|
+
/** Whether a login wall / prompt was detected on the page. */
|
|
43
|
+
loginDetected?: boolean;
|
|
44
|
+
/** Whether a captcha / verification wall was detected. */
|
|
45
|
+
captchaDetected?: boolean;
|
|
46
|
+
/** Whether __INITIAL_STATE__ was present and non-empty. */
|
|
47
|
+
initialStatePresent?: boolean;
|
|
48
|
+
/** Number of note-like keys found inside __INITIAL_STATE__. */
|
|
49
|
+
initialStateNoteCount?: number;
|
|
50
|
+
/** Number of user_posted API responses captured. */
|
|
51
|
+
capturedApiResponseCount?: number;
|
|
52
|
+
/** HTTP status of the first captured user_posted response (if any). */
|
|
53
|
+
firstApiResponseStatus?: number;
|
|
54
|
+
/** Whether the page URL after navigation looks like a redirect to login. */
|
|
55
|
+
redirectedToLogin?: boolean;
|
|
56
|
+
};
|
|
57
|
+
|
|
58
|
+
// --- Profile ---
|
|
59
|
+
|
|
60
|
+
export type XhsProfile = {
|
|
61
|
+
userId: string;
|
|
62
|
+
nickname: string;
|
|
63
|
+
redId?: string;
|
|
64
|
+
avatarUrl?: string;
|
|
65
|
+
desc?: string;
|
|
66
|
+
ipLocation?: string;
|
|
67
|
+
gender?: string; // "male" | "female" | "0" (unknown)
|
|
68
|
+
interactionCounts?: {
|
|
69
|
+
follows?: number;
|
|
70
|
+
fans?: number;
|
|
71
|
+
likesAndCollects?: number;
|
|
72
|
+
};
|
|
73
|
+
};
|
|
74
|
+
|
|
75
|
+
export type XhsNoteSummary = {
|
|
76
|
+
noteId: string;
|
|
77
|
+
title?: string;
|
|
78
|
+
coverUrl?: string;
|
|
79
|
+
type?: "normal" | "video";
|
|
80
|
+
likedCount?: number;
|
|
81
|
+
// kept from initial state / user_posted page
|
|
82
|
+
xsecToken?: string; // internal use only - must not appear in public exports
|
|
83
|
+
};
|
|
84
|
+
|
|
85
|
+
// --- Note Detail ---
|
|
86
|
+
|
|
87
|
+
export type XhsNoteDetail = {
|
|
88
|
+
noteId: string;
|
|
89
|
+
title: string;
|
|
90
|
+
desc: string;
|
|
91
|
+
type: "normal" | "video";
|
|
92
|
+
userId: string;
|
|
93
|
+
nickname: string;
|
|
94
|
+
avatarUrl?: string;
|
|
95
|
+
imageUrls?: string[];
|
|
96
|
+
videoUrl?: string;
|
|
97
|
+
tagList?: string[];
|
|
98
|
+
ipLocation?: string;
|
|
99
|
+
metrics: {
|
|
100
|
+
likedCount: number;
|
|
101
|
+
collectedCount: number;
|
|
102
|
+
commentCount: number;
|
|
103
|
+
shareCount: number;
|
|
104
|
+
};
|
|
105
|
+
createdAt?: string;
|
|
106
|
+
lastUpdateTime?: string;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
// --- Comments ---
|
|
110
|
+
|
|
111
|
+
export type XhsComment = {
|
|
112
|
+
commentId: string;
|
|
113
|
+
userId: string;
|
|
114
|
+
nickname: string;
|
|
115
|
+
avatarUrl?: string;
|
|
116
|
+
content: string;
|
|
117
|
+
likeCount: number;
|
|
118
|
+
subCommentCount: number;
|
|
119
|
+
subComments?: XhsComment[]; // embedded samples only
|
|
120
|
+
ipLocation?: string;
|
|
121
|
+
createdAt?: string;
|
|
122
|
+
};
|
|
123
|
+
|
|
124
|
+
export type XhsCommentPage = {
|
|
125
|
+
comments: XhsComment[];
|
|
126
|
+
hasMore: boolean;
|
|
127
|
+
cursor?: string;
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
// --- Analyzed Result ---
|
|
131
|
+
|
|
132
|
+
export type XhsTopNote = {
|
|
133
|
+
noteId: string;
|
|
134
|
+
title?: string;
|
|
135
|
+
count: number;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export type XhsCommentBucket = {
|
|
139
|
+
label: string;
|
|
140
|
+
count: number;
|
|
141
|
+
sampleCommentIds: string[];
|
|
142
|
+
};
|
|
143
|
+
|
|
144
|
+
export type XhsProfileAnalysis = {
|
|
145
|
+
totalNotes: number;
|
|
146
|
+
highestLikedNote: XhsTopNote | null;
|
|
147
|
+
highestCommentedNote: XhsTopNote | null;
|
|
148
|
+
highestCollectedNote: XhsTopNote | null;
|
|
149
|
+
highestSharedNote: XhsTopNote | null;
|
|
150
|
+
commentBuckets: XhsCommentBucket[];
|
|
151
|
+
topLikedComments: XhsComment[];
|
|
152
|
+
};
|
|
153
|
+
|
|
154
|
+
// --- Collection Status (assisted mode) ---
|
|
155
|
+
|
|
156
|
+
export type XhsCollectionMode = "conservative" | "assisted";
|
|
157
|
+
export type XhsAssistedAction = "snapshot" | "read_more_notes" | "read_comments";
|
|
158
|
+
|
|
159
|
+
export type XhsNextSuggestedAction = {
|
|
160
|
+
action: "read_more_notes" | "read_comments" | "save_to_table" | "manual_login";
|
|
161
|
+
label: string;
|
|
162
|
+
reason: string;
|
|
163
|
+
};
|
|
164
|
+
|
|
165
|
+
export type XhsCollectionStatus = {
|
|
166
|
+
mode: XhsCollectionMode;
|
|
167
|
+
action: XhsAssistedAction;
|
|
168
|
+
extendedCollectionConsent: boolean;
|
|
169
|
+
assistedStepCount: number;
|
|
170
|
+
limits: {
|
|
171
|
+
maxAssistedSteps: number;
|
|
172
|
+
maxScrollPages: number;
|
|
173
|
+
maxCommentPagesPerNote: number;
|
|
174
|
+
includeComments: boolean;
|
|
175
|
+
};
|
|
176
|
+
nextSuggestedAction?: XhsNextSuggestedAction;
|
|
177
|
+
};
|
|
178
|
+
|
|
179
|
+
// --- Full collection result ---
|
|
180
|
+
|
|
181
|
+
export type XhsProfileCollection = {
|
|
182
|
+
profile: XhsProfile;
|
|
183
|
+
notes: XhsNoteSummary[];
|
|
184
|
+
noteDetails: XhsNoteDetail[];
|
|
185
|
+
commentsByNote: Record<string, XhsComment[]>;
|
|
186
|
+
analysis: XhsProfileAnalysis;
|
|
187
|
+
/** Present only when the collector detected an issue. Never contains secrets. */
|
|
188
|
+
diagnostic?: XhsCollectorDiagnostic;
|
|
189
|
+
/** Collection status for assisted automation mode. */
|
|
190
|
+
collectionStatus?: XhsCollectionStatus;
|
|
191
|
+
};
|
|
192
|
+
|
|
193
|
+
// --- URL parsing result ---
|
|
194
|
+
|
|
195
|
+
export type XhsParsedProfileUrl = {
|
|
196
|
+
userId: string;
|
|
197
|
+
canonicalUrl: string;
|
|
198
|
+
};
|
|
199
|
+
|
|
200
|
+
export type XhsParsedNoteUrl = {
|
|
201
|
+
noteId: string;
|
|
202
|
+
canonicalUrl: string;
|
|
203
|
+
xsecToken?: string; // preserved internally only
|
|
204
|
+
};
|
|
205
|
+
|
|
206
|
+
// --- Redaction ---
|
|
207
|
+
|
|
208
|
+
export type XhsConnectorOptions = {
|
|
209
|
+
profileUrl: string;
|
|
210
|
+
maxScrollPages?: number; // default 0
|
|
211
|
+
enrichDetails?: boolean; // default false
|
|
212
|
+
includeComments?: boolean; // default false
|
|
213
|
+
maxCommentPagesPerNote?: number; // default 1
|
|
214
|
+
headless?: boolean; // default true
|
|
215
|
+
cookieDir?: string;
|
|
216
|
+
fetchImpl?: typeof fetch;
|
|
217
|
+
/** Assisted mode: "conservative" (default) or "assisted" */
|
|
218
|
+
collectionMode?: XhsCollectionMode;
|
|
219
|
+
/** Which action to perform in assisted mode */
|
|
220
|
+
assistedAction?: XhsAssistedAction;
|
|
221
|
+
/** Max assisted steps (1..3), bounds scroll/comment pages */
|
|
222
|
+
maxAssistedSteps?: number;
|
|
223
|
+
};
|
|
224
|
+
|
|
225
|
+
// Helper to create failure
|
|
226
|
+
export function createXhsFailure(args: {
|
|
227
|
+
code: XhsFailureCode;
|
|
228
|
+
message: string;
|
|
229
|
+
}): XhsReadFailure {
|
|
230
|
+
return {
|
|
231
|
+
ok: false,
|
|
232
|
+
code: args.code,
|
|
233
|
+
message: args.message,
|
|
234
|
+
fetchedAt: new Date().toISOString(),
|
|
235
|
+
};
|
|
236
|
+
}
|
|
237
|
+
|
|
238
|
+
export function createXhsSuccess<T>(data: T): XhsReadSuccess<T> {
|
|
239
|
+
return {
|
|
240
|
+
ok: true,
|
|
241
|
+
data,
|
|
242
|
+
fetchedAt: new Date().toISOString(),
|
|
243
|
+
};
|
|
244
|
+
}
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
import type { XhsParsedProfileUrl, XhsParsedNoteUrl } from "./types";
|
|
2
|
+
|
|
3
|
+
const PROFILE_RE =
|
|
4
|
+
/(?:(?:https?:\/\/)?(?:www\.)?xiaohongshu\.com)?\/user\/profile\/([a-f0-9]{24})(?:\?[^#]*)?/i;
|
|
5
|
+
|
|
6
|
+
const NOTE_RE =
|
|
7
|
+
/(?:(?:https?:\/\/)?(?:www\.)?xiaohongshu\.com)?\/(?:explore|discovery\/item)\/([a-f0-9]{24})(?:\?[^#]*)?/i;
|
|
8
|
+
|
|
9
|
+
/**
|
|
10
|
+
* Parse a XHS profile URL and return userId + canonical URL.
|
|
11
|
+
* Accepts full URLs and path-only forms.
|
|
12
|
+
*/
|
|
13
|
+
export function parseXhsProfileUrl(input: string): XhsParsedProfileUrl {
|
|
14
|
+
const match = input.match(PROFILE_RE);
|
|
15
|
+
if (!match) {
|
|
16
|
+
throw new Error(`Invalid XHS profile URL: ${input}`);
|
|
17
|
+
}
|
|
18
|
+
const userId = match[1];
|
|
19
|
+
return {
|
|
20
|
+
userId,
|
|
21
|
+
canonicalUrl: `https://www.xiaohongshu.com/user/profile/${userId}`,
|
|
22
|
+
};
|
|
23
|
+
}
|
|
24
|
+
|
|
25
|
+
/**
|
|
26
|
+
* Parse a XHS note URL and return noteId + canonical URL.
|
|
27
|
+
* The xsecToken query param is preserved in the result for internal use only.
|
|
28
|
+
*/
|
|
29
|
+
export function parseXhsNoteUrl(input: string): XhsParsedNoteUrl {
|
|
30
|
+
const match = input.match(NOTE_RE);
|
|
31
|
+
if (!match) {
|
|
32
|
+
throw new Error(`Invalid XHS note URL: ${input}`);
|
|
33
|
+
}
|
|
34
|
+
const noteId = match[1];
|
|
35
|
+
|
|
36
|
+
// Extract xsec_token if present (internal use only)
|
|
37
|
+
let xsecToken: string | undefined;
|
|
38
|
+
try {
|
|
39
|
+
const urlObj = new URL(input.startsWith("http") ? input : `https://www.xiaohongshu.com${input}`);
|
|
40
|
+
xsecToken = urlObj.searchParams.get("xsec_token") ?? undefined;
|
|
41
|
+
} catch {
|
|
42
|
+
// ignore parse errors
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
return {
|
|
46
|
+
noteId,
|
|
47
|
+
canonicalUrl: `https://www.xiaohongshu.com/explore/${noteId}`,
|
|
48
|
+
xsecToken,
|
|
49
|
+
};
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Validate that a string looks like a valid XHS note ID (24 hex chars).
|
|
54
|
+
*/
|
|
55
|
+
export function isValidXhsId(id: string): boolean {
|
|
56
|
+
return /^[a-f0-9]{24}$/i.test(id);
|
|
57
|
+
}
|
package/machineWsRunDispatch.ts
CHANGED
|
@@ -20,9 +20,52 @@ type EnvLike = Record<string, string | undefined>;
|
|
|
20
20
|
export type LocalCliExecutor = (
|
|
21
21
|
provider: string,
|
|
22
22
|
prompt: string,
|
|
23
|
-
options: {
|
|
23
|
+
options: {
|
|
24
|
+
model?: string;
|
|
25
|
+
timeout?: number;
|
|
26
|
+
cwd?: string;
|
|
27
|
+
yolo?: boolean;
|
|
28
|
+
env?: EnvLike;
|
|
29
|
+
imageInputs?: Array<{ source: string; materializedPath?: string }>;
|
|
30
|
+
}
|
|
24
31
|
) => Promise<{ text: string; raw?: string; elapsed?: number }>;
|
|
25
32
|
|
|
33
|
+
/**
|
|
34
|
+
* 从 connector payload 的 userInput 中提取 multimodal 内容。
|
|
35
|
+
* 如果 userInput 是字符串,直接返回 { text, imageUrls: [] }。
|
|
36
|
+
* 如果 userInput 是 multimodal content array(`[{ type: "text" }, { type: "image_url" }]`),
|
|
37
|
+
* 提取 text 和 image_url parts。
|
|
38
|
+
*/
|
|
39
|
+
function extractMultimodalUserInput(userInput: unknown): {
|
|
40
|
+
text: string;
|
|
41
|
+
imageUrls: string[];
|
|
42
|
+
} {
|
|
43
|
+
if (typeof userInput === "string") {
|
|
44
|
+
return { text: userInput, imageUrls: [] };
|
|
45
|
+
}
|
|
46
|
+
if (!Array.isArray(userInput)) {
|
|
47
|
+
return { text: String(userInput ?? ""), imageUrls: [] };
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
const textParts: string[] = [];
|
|
51
|
+
const imageUrls: string[] = [];
|
|
52
|
+
|
|
53
|
+
for (const part of userInput) {
|
|
54
|
+
if (!part || typeof part !== "object") continue;
|
|
55
|
+
if ((part as any).type === "text" && typeof (part as any).text === "string") {
|
|
56
|
+
textParts.push((part as any).text);
|
|
57
|
+
} else if (
|
|
58
|
+
(part as any).type === "image_url" &&
|
|
59
|
+
typeof (part as any).image_url?.url === "string" &&
|
|
60
|
+
(part as any).image_url.url.trim()
|
|
61
|
+
) {
|
|
62
|
+
imageUrls.push((part as any).image_url.url.trim());
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
|
|
66
|
+
return { text: textParts.join("\n"), imageUrls };
|
|
67
|
+
}
|
|
68
|
+
|
|
26
69
|
type ConnectorRuntimePolicy = {
|
|
27
70
|
runtimeTools?: string[];
|
|
28
71
|
agentTools?: string[];
|
|
@@ -103,7 +146,6 @@ function summarizeRuntimePolicyForLogs(policy?: ConnectorRuntimePolicy) {
|
|
|
103
146
|
workspaceMode: policy?.workspace?.mode ?? null,
|
|
104
147
|
workspaceCwd: policy?.workspace?.cwd ?? null,
|
|
105
148
|
shellEnabled: policy?.shell?.enabled ?? null,
|
|
106
|
-
shellMode: policy?.shell?.mode ?? null,
|
|
107
149
|
};
|
|
108
150
|
}
|
|
109
151
|
|
|
@@ -188,13 +230,13 @@ function runtimeWorkspacePermissionPolicy(
|
|
|
188
230
|
runtimeEnv: EnvLike,
|
|
189
231
|
cwd: string
|
|
190
232
|
): PermissionPolicy | null {
|
|
233
|
+
void runtimeEnv;
|
|
191
234
|
if (!requestsLocalWorkspaceRuntime(runtimePolicy)) return null;
|
|
192
235
|
return {
|
|
193
236
|
mode: "full_access",
|
|
194
237
|
allowFilesystemRead: true,
|
|
195
238
|
allowFilesystemWrite: true,
|
|
196
239
|
allowShell:
|
|
197
|
-
runtimeEnv.NOLO_LOCAL_SHELL_MODE === "worktree" &&
|
|
198
240
|
Array.isArray(runtimePolicy?.runtimeTools) &&
|
|
199
241
|
runtimePolicy.runtimeTools.includes("execShell"),
|
|
200
242
|
writableRoots: [cwd],
|
|
@@ -332,8 +374,6 @@ async function defaultRunConnectorLocalRuntimeAgent(args: {
|
|
|
332
374
|
requestId: args.parsed.requestId,
|
|
333
375
|
agentKey,
|
|
334
376
|
cwd: args.cwd,
|
|
335
|
-
runtimeEnvShellModeBeforePolicy: args.runtimeEnv.NOLO_LOCAL_SHELL_MODE ?? null,
|
|
336
|
-
runtimeEnvShellModeAfterPolicy: env.NOLO_LOCAL_SHELL_MODE ?? null,
|
|
337
377
|
...summarizeRuntimePolicyForLogs(policy),
|
|
338
378
|
});
|
|
339
379
|
const adapter = createCliLocalRuntimeAdapter({
|
|
@@ -454,7 +494,9 @@ export async function handleConnectorRunMessage(
|
|
|
454
494
|
try {
|
|
455
495
|
const machinePermissionPolicy = resolveMachineRunPermissionPolicy(agentConfig);
|
|
456
496
|
const runtimePolicy = runtimePolicyFromConnectorPayload(parsed);
|
|
457
|
-
const
|
|
497
|
+
const extractedInput = extractMultimodalUserInput(parsed.payload?.userInput);
|
|
498
|
+
const userInput = extractedInput.text;
|
|
499
|
+
const connectorImageUrls = extractedInput.imageUrls;
|
|
458
500
|
const timeout = normalizeConnectorRunTimeoutMs(parsed.payload?.timeoutMs);
|
|
459
501
|
let cwd = resolveConnectorRunCwd({ env: runtimeEnv, policy: machinePermissionPolicy });
|
|
460
502
|
let runContent = "";
|
|
@@ -553,6 +595,9 @@ export async function handleConnectorRunMessage(
|
|
|
553
595
|
effectiveRuntimeEnv.AUTH_TOKEN ||
|
|
554
596
|
effectiveRuntimeEnv.AUTH,
|
|
555
597
|
},
|
|
598
|
+
...(connectorImageUrls.length > 0
|
|
599
|
+
? { imageInputs: connectorImageUrls.map((url) => ({ source: url })) }
|
|
600
|
+
: {}),
|
|
556
601
|
}).finally(() => clearInterval(heartbeat));
|
|
557
602
|
logConnectorRun("agent.run.cli.result", {
|
|
558
603
|
requestId: parsed.requestId,
|
|
@@ -40,15 +40,17 @@ function readFlagValue(args: string[], flag: string) {
|
|
|
40
40
|
}
|
|
41
41
|
|
|
42
42
|
function parseUserIdFromToken(token: string) {
|
|
43
|
-
const payload = token.split(".")[
|
|
44
|
-
if (!payload) return
|
|
43
|
+
const payload = token.split(".")[1];
|
|
44
|
+
if (!payload) return undefined;
|
|
45
45
|
try {
|
|
46
46
|
const normalized = payload.replace(/-/g, "+").replace(/_/g, "/");
|
|
47
47
|
const padded = normalized + "=".repeat((4 - (normalized.length % 4)) % 4);
|
|
48
48
|
const parsed = JSON.parse(Buffer.from(padded, "base64").toString("utf8"));
|
|
49
|
-
return typeof parsed?.userId === "string"
|
|
49
|
+
return typeof parsed?.userId === "string" && parsed.userId.trim()
|
|
50
|
+
? parsed.userId.trim()
|
|
51
|
+
: undefined;
|
|
50
52
|
} catch {
|
|
51
|
-
return
|
|
53
|
+
return undefined;
|
|
52
54
|
}
|
|
53
55
|
}
|
|
54
56
|
|