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.
- package/agent-runtime/hybridRecordStore.ts +5 -3
- 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 +65 -6
- 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/client/agentRun.ts +27 -8
- package/cli/client/localRuntimeAdapter.ts +144 -28
- package/client/agentRun.test.ts +52 -0
- package/client/agentRun.ts +27 -8
- package/client/localRuntimeAdapter.test.ts +437 -6
- package/client/localRuntimeAdapter.ts +144 -28
- 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/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/package.json +430 -4
- 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
|
@@ -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(() =>
|
|
243
|
-
|
|
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:
|
|
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
|
|
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
|
-
...(
|
|
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
|
|
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
|
-
...(
|
|
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,
|
package/client/agentRun.test.ts
CHANGED
|
@@ -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[] = [];
|
package/client/agentRun.ts
CHANGED
|
@@ -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
|
-
|
|
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
|
|
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. ` +
|