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
|
@@ -21,6 +21,7 @@ import {
|
|
|
21
21
|
resolveCurrentRunRuntimeToolPolicy,
|
|
22
22
|
resolveLocalWorkspaceExecutorOptionsFromPolicy,
|
|
23
23
|
resolveRequestedRuntimeToolNames,
|
|
24
|
+
resolveRuntimeToolSurfaceForAgent,
|
|
24
25
|
shouldUsePlatformChatProvider,
|
|
25
26
|
} from "../agentRuntimeLocal";
|
|
26
27
|
import type { AgentRuntimeChatMessage } from "../../agent-runtime";
|
|
@@ -41,8 +42,11 @@ import {
|
|
|
41
42
|
type HybridRecordStore,
|
|
42
43
|
} from "./hybridRecordStore";
|
|
43
44
|
import { executeLocalToolWithPolicy } from "./localToolPolicy";
|
|
45
|
+
import { inferCaptureIntent } from "../../ai/policy/runtimePolicy";
|
|
46
|
+
import { prepareTools } from "../../ai/tools/prepareTools";
|
|
44
47
|
import { taskRunFunctionSchema } from "../../ai/tools/agent/taskRunTool";
|
|
45
48
|
import {
|
|
49
|
+
MIMO_MONTH_AGENT_KEY,
|
|
46
50
|
NOLO_DEFAULT_AGENT_ID,
|
|
47
51
|
NOLO_DEFAULT_AGENT_KEY,
|
|
48
52
|
} from "../agentAliases";
|
|
@@ -50,20 +54,45 @@ import {
|
|
|
50
54
|
buildNoloWorkspaceCliToolExecutors,
|
|
51
55
|
buildNoloWorkspaceOpenAiTools,
|
|
52
56
|
filterNoloWorkspaceToolNames,
|
|
53
|
-
NOLO_WORKSPACE_TOOL_NAMES,
|
|
54
|
-
NOLO_WORKSPACE_TOOL_PROMPT,
|
|
55
57
|
parseNoloWorkspaceToolArguments,
|
|
56
58
|
} from "../../agent-runtime/noloWorkspaceTools";
|
|
59
|
+
import { executeCli as defaultExecuteCli, type CliExecuteResult, type CliImageInput } from "../../ai/agent/cliExecutor";
|
|
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";
|
|
57
66
|
|
|
58
67
|
type EnvLike = Record<string, string | undefined>;
|
|
59
68
|
type FetchInput = Parameters<typeof fetch>[0];
|
|
60
69
|
type FetchInit = Parameters<typeof fetch>[1];
|
|
70
|
+
type LocalCliExecutor = (
|
|
71
|
+
provider: string,
|
|
72
|
+
prompt: string,
|
|
73
|
+
options: {
|
|
74
|
+
model?: string;
|
|
75
|
+
timeout?: number;
|
|
76
|
+
cwd?: string;
|
|
77
|
+
yolo?: boolean;
|
|
78
|
+
env?: Record<string, string | undefined>;
|
|
79
|
+
imageInputs?: CliImageInput[];
|
|
80
|
+
}
|
|
81
|
+
) => Promise<CliExecuteResult>;
|
|
61
82
|
const TRANSIENT_FETCH_MAX_ATTEMPTS = 8;
|
|
62
83
|
const TRANSIENT_FETCH_RETRY_BASE_DELAY_MS = 250;
|
|
63
84
|
export const BUILTIN_NOLO_AGENT_ID = NOLO_DEFAULT_AGENT_ID;
|
|
64
85
|
export const BUILTIN_NOLO_AGENT_KEY = NOLO_DEFAULT_AGENT_KEY;
|
|
65
86
|
const CLI_DIR = dirname(fileURLToPath(import.meta.url));
|
|
66
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);
|
|
67
96
|
|
|
68
97
|
export type CliLocalRuntimeDb = CliKvDb;
|
|
69
98
|
|
|
@@ -77,6 +106,8 @@ export type CliLocalRuntimeAdapterDeps = {
|
|
|
77
106
|
cwd?: string;
|
|
78
107
|
output?: { write(chunk: string): unknown };
|
|
79
108
|
localToolExecutors?: Record<string, (call: any) => Promise<{ content: string; metadata?: Record<string, unknown> }>>;
|
|
109
|
+
readXhsProfile?: typeof readXhsProfileFunc;
|
|
110
|
+
executeCli?: LocalCliExecutor;
|
|
80
111
|
sleep?: (ms: number) => Promise<void>;
|
|
81
112
|
loopbackRequest?: (input: FetchInput, init?: FetchInit) => Promise<Response>;
|
|
82
113
|
};
|
|
@@ -93,10 +124,6 @@ function resolveLocalUserId(env: EnvLike) {
|
|
|
93
124
|
return env.NOLO_LOCAL_USER_ID || env.NOLO_USER_ID || "local";
|
|
94
125
|
}
|
|
95
126
|
|
|
96
|
-
function shellModeEnabled(env: EnvLike) {
|
|
97
|
-
return env.NOLO_LOCAL_SHELL_MODE === "worktree";
|
|
98
|
-
}
|
|
99
|
-
|
|
100
127
|
function parseLocalToolBudgets(env: EnvLike) {
|
|
101
128
|
const raw = env.NOLO_LOCAL_TOOL_BUDGETS?.trim();
|
|
102
129
|
if (!raw) return {};
|
|
@@ -224,12 +251,14 @@ function buildRequestTimeoutSignal(timeoutMs?: number) {
|
|
|
224
251
|
if (typeof timeoutMs !== "number" || !Number.isFinite(timeoutMs) || timeoutMs <= 0) {
|
|
225
252
|
return undefined;
|
|
226
253
|
}
|
|
227
|
-
if (typeof AbortSignal !== "undefined" && typeof AbortSignal.timeout === "function") {
|
|
228
|
-
return AbortSignal.timeout(timeoutMs);
|
|
229
|
-
}
|
|
230
254
|
const controller = new AbortController();
|
|
231
|
-
setTimeout(() =>
|
|
232
|
-
|
|
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
|
+
};
|
|
233
262
|
}
|
|
234
263
|
|
|
235
264
|
function summarizeEndpoint(value: unknown) {
|
|
@@ -251,7 +280,79 @@ function parseJsonObject(raw: string) {
|
|
|
251
280
|
}
|
|
252
281
|
}
|
|
253
282
|
|
|
283
|
+
function isCliProviderAgent(agentConfig: AgentRuntimeAgentConfig) {
|
|
284
|
+
return Boolean(
|
|
285
|
+
agentConfig.apiSource === "cli" ||
|
|
286
|
+
agentConfig.provider === "cli" ||
|
|
287
|
+
agentConfig.cliProvider
|
|
288
|
+
);
|
|
289
|
+
}
|
|
290
|
+
|
|
291
|
+
function resolveCliProviderName(agentConfig: AgentRuntimeAgentConfig) {
|
|
292
|
+
return (agentConfig.cliProvider || agentConfig.provider || "codex").trim() || "codex";
|
|
293
|
+
}
|
|
294
|
+
|
|
295
|
+
function stringifyRuntimeMessageContent(content: AgentRuntimeChatMessage["content"]) {
|
|
296
|
+
if (typeof content === "string") return content;
|
|
297
|
+
if (Array.isArray(content)) {
|
|
298
|
+
return content
|
|
299
|
+
.map((part) => {
|
|
300
|
+
if (typeof part === "string") return part;
|
|
301
|
+
if (part && typeof part === "object" && "text" in part) {
|
|
302
|
+
return String((part as any).text ?? "");
|
|
303
|
+
}
|
|
304
|
+
return JSON.stringify(part);
|
|
305
|
+
})
|
|
306
|
+
.filter((part) => part.trim())
|
|
307
|
+
.join("\n");
|
|
308
|
+
}
|
|
309
|
+
return content == null ? "" : String(content);
|
|
310
|
+
}
|
|
311
|
+
|
|
312
|
+
function buildPromptForCliProvider(messages: AgentRuntimeChatMessage[]) {
|
|
313
|
+
const systemPrompt = messages
|
|
314
|
+
.filter((message) => message.role === "system")
|
|
315
|
+
.map((message) => stringifyRuntimeMessageContent(message.content).trim())
|
|
316
|
+
.filter(Boolean)
|
|
317
|
+
.join("\n\n");
|
|
318
|
+
const taskPrompt = messages
|
|
319
|
+
.filter((message) => message.role !== "system")
|
|
320
|
+
.map((message) => {
|
|
321
|
+
const content = stringifyRuntimeMessageContent(message.content).trim();
|
|
322
|
+
if (!content) return "";
|
|
323
|
+
return `[${message.role}]\n${content}`;
|
|
324
|
+
})
|
|
325
|
+
.filter(Boolean)
|
|
326
|
+
.join("\n\n");
|
|
327
|
+
return buildCliPrompt(systemPrompt, taskPrompt);
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
function collectCliProviderImageInputs(messages: AgentRuntimeChatMessage[]) {
|
|
331
|
+
const urls: string[] = [];
|
|
332
|
+
for (const message of messages) {
|
|
333
|
+
if (!Array.isArray(message.content)) continue;
|
|
334
|
+
for (const part of message.content) {
|
|
335
|
+
if (
|
|
336
|
+
part &&
|
|
337
|
+
typeof part === "object" &&
|
|
338
|
+
(part as any).type === "image_url" &&
|
|
339
|
+
typeof (part as any).image_url?.url === "string" &&
|
|
340
|
+
(part as any).image_url.url.trim()
|
|
341
|
+
) {
|
|
342
|
+
urls.push((part as any).image_url.url.trim());
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
}
|
|
346
|
+
return urls;
|
|
347
|
+
}
|
|
348
|
+
|
|
254
349
|
function logLocalRuntimeDiagnostic(event: string, fields: Record<string, unknown>) {
|
|
350
|
+
if (
|
|
351
|
+
process.env.NOLO_LOCAL_RUNTIME_DEBUG !== "1" &&
|
|
352
|
+
process.env.NOLO_DEBUG !== "1"
|
|
353
|
+
) {
|
|
354
|
+
return;
|
|
355
|
+
}
|
|
255
356
|
console.error(`[nolo-local-runtime] ${event} ${JSON.stringify(fields)}`);
|
|
256
357
|
}
|
|
257
358
|
|
|
@@ -266,39 +367,51 @@ function summarizeOpenAiToolNames(tools: Array<Record<string, unknown>>) {
|
|
|
266
367
|
.filter((name): name is string => Boolean(name));
|
|
267
368
|
}
|
|
268
369
|
|
|
269
|
-
function
|
|
370
|
+
function shouldExposeLocalPlatformTools(agentKey?: string) {
|
|
371
|
+
return agentKey !== MIMO_MONTH_AGENT_KEY;
|
|
372
|
+
}
|
|
373
|
+
|
|
374
|
+
function buildOpenAiTools(args: { agentKey?: string; toolNames?: string[]; env: EnvLike }) {
|
|
270
375
|
const toolset = buildLocalWorkspaceToolsetForEnv(args);
|
|
376
|
+
const exposePlatformTools = shouldExposeLocalPlatformTools(args.agentKey);
|
|
271
377
|
return [
|
|
272
378
|
...buildLocalWorkspaceOpenAiTools({
|
|
273
379
|
toolNames: toolset.toolNames,
|
|
274
380
|
exposeShellTools: toolset.exposeShellTools,
|
|
275
381
|
}),
|
|
276
|
-
...buildServerPlatformOpenAiTools({ toolNames: args.toolNames }),
|
|
277
|
-
...buildNoloWorkspaceOpenAiTools({ toolNames: args.toolNames }),
|
|
382
|
+
...(exposePlatformTools ? buildServerPlatformOpenAiTools({ toolNames: args.toolNames }) : []),
|
|
383
|
+
...(exposePlatformTools ? buildNoloWorkspaceOpenAiTools({ toolNames: args.toolNames }) : []),
|
|
278
384
|
];
|
|
279
385
|
}
|
|
280
386
|
|
|
281
387
|
function buildLocalWorkspaceToolsetForEnv(args: { toolNames?: string[]; env: EnvLike }) {
|
|
388
|
+
void args.env;
|
|
282
389
|
const toolset = buildLocalWorkspaceToolset({
|
|
283
390
|
declaredToolNames: args.toolNames,
|
|
284
|
-
exposeShellTools:
|
|
391
|
+
exposeShellTools: true,
|
|
285
392
|
});
|
|
286
393
|
return toolset;
|
|
287
394
|
}
|
|
288
395
|
|
|
289
396
|
function buildLocalPolicyToolNames(args: { toolNames?: string[]; env: EnvLike }) {
|
|
397
|
+
void args.env;
|
|
290
398
|
return [
|
|
291
399
|
...buildLocalWorkspacePolicyToolNames({
|
|
292
400
|
declaredToolNames: args.toolNames,
|
|
293
|
-
exposeShellTools:
|
|
401
|
+
exposeShellTools: true,
|
|
294
402
|
}),
|
|
295
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)),
|
|
296
406
|
...filterNoloWorkspaceToolNames(args.toolNames),
|
|
297
407
|
];
|
|
298
408
|
}
|
|
299
409
|
|
|
300
410
|
function buildServerPlatformOpenAiTools(args: { toolNames?: string[] }) {
|
|
301
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
|
+
);
|
|
302
415
|
return [
|
|
303
416
|
...(toolNames.has("taskRun")
|
|
304
417
|
? [{
|
|
@@ -306,6 +419,13 @@ function buildServerPlatformOpenAiTools(args: { toolNames?: string[] }) {
|
|
|
306
419
|
function: taskRunFunctionSchema,
|
|
307
420
|
}]
|
|
308
421
|
: []),
|
|
422
|
+
...(toolNames.has("read_xhs_profile")
|
|
423
|
+
? [{
|
|
424
|
+
type: "function",
|
|
425
|
+
function: readXhsProfileFunctionSchema,
|
|
426
|
+
}]
|
|
427
|
+
: []),
|
|
428
|
+
...tableTools,
|
|
309
429
|
];
|
|
310
430
|
}
|
|
311
431
|
|
|
@@ -336,16 +456,32 @@ function isBuiltinNoloAgentConfig(agentConfig: AgentRuntimeAgentConfig | null |
|
|
|
336
456
|
return isBuiltinNoloAgentRef(key) || isBuiltinNoloAgentRef(id);
|
|
337
457
|
}
|
|
338
458
|
|
|
339
|
-
function
|
|
340
|
-
|
|
341
|
-
|
|
459
|
+
function withResolvedRuntimeToolSurface(
|
|
460
|
+
agentConfig: AgentRuntimeAgentConfig | null,
|
|
461
|
+
env: EnvLike
|
|
462
|
+
) {
|
|
463
|
+
if (!agentConfig) return agentConfig;
|
|
464
|
+
const currentUserId = resolveLocalUserId(env);
|
|
465
|
+
const rawRecord = (agentConfig as any).rawRecord ?? {};
|
|
466
|
+
const ownerId =
|
|
467
|
+
typeof rawRecord.userId === "string" && rawRecord.userId.trim()
|
|
468
|
+
? rawRecord.userId.trim()
|
|
469
|
+
: null;
|
|
470
|
+
const toolSurface = resolveRuntimeToolSurfaceForAgent({
|
|
471
|
+
explicitToolNames: agentConfig.toolNames,
|
|
472
|
+
currentUserId,
|
|
473
|
+
agentOwnerId: ownerId,
|
|
474
|
+
agentKey: rawRecord.dbKey ?? agentConfig.key,
|
|
475
|
+
isPublic: !isBuiltinNoloAgentConfig(agentConfig) && rawRecord.isPublic === true,
|
|
476
|
+
sharingLevel: typeof rawRecord.sharingLevel === "string" ? rawRecord.sharingLevel : null,
|
|
477
|
+
trustedPrivateInvocation: isBuiltinNoloAgentConfig(agentConfig),
|
|
478
|
+
runtimeHost: "cli",
|
|
479
|
+
});
|
|
342
480
|
return {
|
|
343
481
|
...agentConfig,
|
|
344
|
-
toolNames,
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
NOLO_WORKSPACE_TOOL_PROMPT,
|
|
348
|
-
].filter(Boolean).join("\n\n"),
|
|
482
|
+
toolNames: toolSurface.finalToolNames,
|
|
483
|
+
toolSurface,
|
|
484
|
+
prompt: agentConfig.prompt,
|
|
349
485
|
};
|
|
350
486
|
}
|
|
351
487
|
|
|
@@ -361,29 +497,72 @@ function buildServerPlatformToolExecutors(args: {
|
|
|
361
497
|
env: EnvLike;
|
|
362
498
|
fetchImpl: typeof fetch;
|
|
363
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
|
+
);
|
|
364
558
|
return {
|
|
365
559
|
taskRun: async (call: any) => {
|
|
366
|
-
const serverUrl = resolveRuntimeServerUrl(args.env);
|
|
367
|
-
const authToken = resolveRuntimeAuthToken(args.env);
|
|
368
|
-
if (!serverUrl) throw new Error("taskRun requires NOLO_SERVER_URL, NOLO_SERVER, or BASE_URL.");
|
|
369
|
-
if (!authToken) throw new Error("taskRun requires AUTH_TOKEN or NOLO_MACHINE_API_KEY.");
|
|
370
|
-
const response = await args.fetchImpl(`${serverUrl}/api/task-run`, {
|
|
371
|
-
method: "POST",
|
|
372
|
-
headers: {
|
|
373
|
-
"Content-Type": "application/json",
|
|
374
|
-
Authorization: `Bearer ${authToken}`,
|
|
375
|
-
},
|
|
376
|
-
body: JSON.stringify(parseNoloWorkspaceToolArguments(call.arguments)),
|
|
377
|
-
});
|
|
378
|
-
const text = await response.text().catch(() => "");
|
|
379
|
-
if (!response.ok) {
|
|
380
|
-
throw new Error(`taskRun bridge failed: HTTP ${response.status} ${text.slice(0, 500)}`);
|
|
381
|
-
}
|
|
382
560
|
return {
|
|
383
|
-
content:
|
|
561
|
+
content: await postServer("/api/task-run", parseNoloWorkspaceToolArguments(call.arguments)),
|
|
384
562
|
metadata: { serverPlatformTool: true },
|
|
385
563
|
};
|
|
386
564
|
},
|
|
565
|
+
...tableExecutors,
|
|
387
566
|
};
|
|
388
567
|
}
|
|
389
568
|
|
|
@@ -392,9 +571,34 @@ function buildLocalToolExecutors(args: {
|
|
|
392
571
|
env: EnvLike;
|
|
393
572
|
fetchImpl: typeof fetch;
|
|
394
573
|
localToolExecutors?: CliLocalRuntimeAdapterDeps["localToolExecutors"];
|
|
574
|
+
readXhsProfile?: CliLocalRuntimeAdapterDeps["readXhsProfile"];
|
|
395
575
|
commandTimeoutMs?: number;
|
|
396
576
|
commandOutputLimit?: number;
|
|
397
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
|
+
|
|
398
602
|
return {
|
|
399
603
|
...createLocalWorkspaceToolExecutors({
|
|
400
604
|
workspaceRoot: args.workspaceRoot,
|
|
@@ -408,6 +612,22 @@ function buildLocalToolExecutors(args: {
|
|
|
408
612
|
...buildCliWorkspaceToolExecutors({
|
|
409
613
|
env: args.env,
|
|
410
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
|
+
},
|
|
411
631
|
...(args.localToolExecutors ?? {}),
|
|
412
632
|
};
|
|
413
633
|
}
|
|
@@ -493,6 +713,7 @@ export function createCliLocalRuntimeAdapter(
|
|
|
493
713
|
env: deps.env,
|
|
494
714
|
fetchImpl,
|
|
495
715
|
localToolExecutors: deps.localToolExecutors,
|
|
716
|
+
readXhsProfile: deps.readXhsProfile,
|
|
496
717
|
...runtimeToolExecutionLimits,
|
|
497
718
|
});
|
|
498
719
|
|
|
@@ -500,11 +721,14 @@ export function createCliLocalRuntimeAdapter(
|
|
|
500
721
|
host: "cli",
|
|
501
722
|
capabilities: ["leveldb-agent-config", "local-provider", "leveldb-persistence", "local-tools"],
|
|
502
723
|
loadAgentConfig: async (agentRef) => {
|
|
503
|
-
const agentConfig =
|
|
504
|
-
|
|
505
|
-
|
|
506
|
-
|
|
507
|
-
|
|
724
|
+
const agentConfig = withResolvedRuntimeToolSurface(
|
|
725
|
+
await readAgentFromStore({
|
|
726
|
+
agentRef,
|
|
727
|
+
store: await resolveStore(deps),
|
|
728
|
+
userId,
|
|
729
|
+
}),
|
|
730
|
+
deps.env
|
|
731
|
+
);
|
|
508
732
|
const requestedToolNames = agentConfig
|
|
509
733
|
? resolveRequestedRuntimeToolNames({ agentConfig })
|
|
510
734
|
: [];
|
|
@@ -520,6 +744,7 @@ export function createCliLocalRuntimeAdapter(
|
|
|
520
744
|
env: deps.env,
|
|
521
745
|
fetchImpl,
|
|
522
746
|
localToolExecutors: deps.localToolExecutors,
|
|
747
|
+
readXhsProfile: deps.readXhsProfile,
|
|
523
748
|
...runtimeToolExecutionLimits,
|
|
524
749
|
});
|
|
525
750
|
return agentConfig;
|
|
@@ -537,6 +762,50 @@ export function createCliLocalRuntimeAdapter(
|
|
|
537
762
|
cwd: workspaceRoot,
|
|
538
763
|
}),
|
|
539
764
|
resolveProvider: async (agentConfig) => {
|
|
765
|
+
if (isCliProviderAgent(agentConfig)) {
|
|
766
|
+
const provider = resolveCliProviderName(agentConfig);
|
|
767
|
+
logLocalRuntimeDiagnostic("provider.selected", {
|
|
768
|
+
agentKey: agentConfig.key,
|
|
769
|
+
transport: "local-cli",
|
|
770
|
+
apiSource: agentConfig.apiSource ?? null,
|
|
771
|
+
provider,
|
|
772
|
+
model: agentConfig.model ?? null,
|
|
773
|
+
cwd: workspaceRoot,
|
|
774
|
+
});
|
|
775
|
+
return {
|
|
776
|
+
model: agentConfig.model || provider,
|
|
777
|
+
complete: async (messages, options) => {
|
|
778
|
+
const executeCli = deps.executeCli ?? (defaultExecuteCli as LocalCliExecutor);
|
|
779
|
+
const imageUrls = collectCliProviderImageInputs(messages);
|
|
780
|
+
const imageInputs: CliImageInput[] | undefined =
|
|
781
|
+
imageUrls.length > 0
|
|
782
|
+
? imageUrls.map((url) => ({ source: url }))
|
|
783
|
+
: undefined;
|
|
784
|
+
const prompt = buildPromptForCliProvider(messages);
|
|
785
|
+
try {
|
|
786
|
+
const result = await executeCli(provider, prompt, {
|
|
787
|
+
...(agentConfig.model ? { model: agentConfig.model } : {}),
|
|
788
|
+
...(options?.timeoutMs ? { timeout: options.timeoutMs } : {}),
|
|
789
|
+
cwd: workspaceRoot,
|
|
790
|
+
yolo: true,
|
|
791
|
+
env: deps.env,
|
|
792
|
+
...(imageInputs ? { imageInputs } : {}),
|
|
793
|
+
});
|
|
794
|
+
return {
|
|
795
|
+
content: result.text,
|
|
796
|
+
model: agentConfig.model || provider,
|
|
797
|
+
raw: result.raw,
|
|
798
|
+
};
|
|
799
|
+
} catch (error) {
|
|
800
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
801
|
+
throw new Error(
|
|
802
|
+
`Local CLI provider "${provider}" is unavailable or failed: ${message}`
|
|
803
|
+
);
|
|
804
|
+
}
|
|
805
|
+
},
|
|
806
|
+
};
|
|
807
|
+
}
|
|
808
|
+
|
|
540
809
|
if (shouldUsePlatformChatProvider(deps.env, agentConfig)) {
|
|
541
810
|
const providerConfig = resolvePlatformChatProviderConfig({
|
|
542
811
|
agentConfig,
|
|
@@ -563,6 +832,7 @@ export function createCliLocalRuntimeAdapter(
|
|
|
563
832
|
agentConfig,
|
|
564
833
|
});
|
|
565
834
|
const tools = buildOpenAiTools({
|
|
835
|
+
agentKey: agentConfig.key,
|
|
566
836
|
toolNames: requestedToolNames,
|
|
567
837
|
env: deps.env,
|
|
568
838
|
});
|
|
@@ -571,7 +841,7 @@ export function createCliLocalRuntimeAdapter(
|
|
|
571
841
|
messages,
|
|
572
842
|
tools,
|
|
573
843
|
});
|
|
574
|
-
const
|
|
844
|
+
const timeoutSignal = buildRequestTimeoutSignal(options?.timeoutMs);
|
|
575
845
|
logLocalRuntimeDiagnostic("provider.request.start", {
|
|
576
846
|
agentKey: agentConfig.key,
|
|
577
847
|
transport: "platform-proxy",
|
|
@@ -582,16 +852,15 @@ export function createCliLocalRuntimeAdapter(
|
|
|
582
852
|
toolCount: tools.length,
|
|
583
853
|
requestedToolNames,
|
|
584
854
|
openAiToolNames: summarizeOpenAiToolNames(tools),
|
|
585
|
-
shellMode: deps.env.NOLO_LOCAL_SHELL_MODE ?? null,
|
|
586
855
|
timeoutMs: options?.timeoutMs ?? null,
|
|
587
856
|
});
|
|
588
857
|
const res = await fetchWithTransientRetry(fetchImpl, request.url, {
|
|
589
858
|
...request.init,
|
|
590
|
-
...(
|
|
859
|
+
...(timeoutSignal ? { signal: timeoutSignal.signal } : {}),
|
|
591
860
|
}, {
|
|
592
861
|
sleep: deps.sleep,
|
|
593
862
|
loopbackRequest,
|
|
594
|
-
});
|
|
863
|
+
}).finally(() => timeoutSignal?.clear());
|
|
595
864
|
const raw = await res.text().catch(() => "");
|
|
596
865
|
logLocalRuntimeDiagnostic("provider.request.result", {
|
|
597
866
|
agentKey: agentConfig.key,
|
|
@@ -636,6 +905,7 @@ export function createCliLocalRuntimeAdapter(
|
|
|
636
905
|
agentConfig,
|
|
637
906
|
});
|
|
638
907
|
const tools = buildOpenAiTools({
|
|
908
|
+
agentKey: agentConfig.key,
|
|
639
909
|
toolNames: requestedToolNames,
|
|
640
910
|
env: deps.env,
|
|
641
911
|
});
|
|
@@ -644,7 +914,7 @@ export function createCliLocalRuntimeAdapter(
|
|
|
644
914
|
messages,
|
|
645
915
|
tools,
|
|
646
916
|
});
|
|
647
|
-
const
|
|
917
|
+
const timeoutSignal = buildRequestTimeoutSignal(options?.timeoutMs);
|
|
648
918
|
logLocalRuntimeDiagnostic("provider.request.start", {
|
|
649
919
|
agentKey: agentConfig.key,
|
|
650
920
|
transport: "direct-openai-compatible",
|
|
@@ -654,16 +924,15 @@ export function createCliLocalRuntimeAdapter(
|
|
|
654
924
|
toolCount: tools.length,
|
|
655
925
|
requestedToolNames,
|
|
656
926
|
openAiToolNames: summarizeOpenAiToolNames(tools),
|
|
657
|
-
shellMode: deps.env.NOLO_LOCAL_SHELL_MODE ?? null,
|
|
658
927
|
timeoutMs: options?.timeoutMs ?? null,
|
|
659
928
|
});
|
|
660
929
|
const res = await fetchWithTransientRetry(fetchImpl, request.url, {
|
|
661
930
|
...request.init,
|
|
662
|
-
...(
|
|
931
|
+
...(timeoutSignal ? { signal: timeoutSignal.signal } : {}),
|
|
663
932
|
}, {
|
|
664
933
|
sleep: deps.sleep,
|
|
665
934
|
loopbackRequest,
|
|
666
|
-
});
|
|
935
|
+
}).finally(() => timeoutSignal?.clear());
|
|
667
936
|
const raw = await res.text().catch(() => "");
|
|
668
937
|
logLocalRuntimeDiagnostic("provider.request.result", {
|
|
669
938
|
agentKey: agentConfig.key,
|
package/cli/commandRegistry.ts
CHANGED
|
@@ -69,8 +69,8 @@ export function renderHelpText() {
|
|
|
69
69
|
" nolo space read 01KKY77TT0DA9NY7TNW3R7255N --content-key page-user-id --brief",
|
|
70
70
|
" nolo space delete --name-prefix rn_owner_verify_0504 --yes",
|
|
71
71
|
" nolo table query --table 01ABCXYZ",
|
|
72
|
-
' nolo table query --table meta-
|
|
73
|
-
' nolo table update-row --table meta-
|
|
72
|
+
' nolo table query --table meta-0e95801d90-NOLOTASKBOARD --columns \'["title","status","owner","priority","codeStatus"]\' --no-base-fields --output items',
|
|
73
|
+
' nolo table update-row --table meta-0e95801d90-NOLOTASKBOARD --row 01ROWID --changes \'{"status":"已完成"}\'',
|
|
74
74
|
" nolo task-run read-context --row-dbkey row-user-table-row",
|
|
75
75
|
" nolo llama status",
|
|
76
76
|
];
|