@juspay/neurolink 9.32.0 → 9.32.1
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/CHANGELOG.md +6 -0
- package/dist/auth/anthropicOAuth.js +1 -1
- package/dist/cli/commands/proxy.js +18 -5
- package/dist/client/aiSdkAdapter.js +1 -1
- package/dist/client/index.js +137 -501
- package/dist/core/factory.js +0 -1
- package/dist/core/redisConversationMemoryManager.js +1 -1
- package/dist/features/ppt/slideGenerator.js +0 -1
- package/dist/features/ppt/utils.js +0 -1
- package/dist/lib/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/mcp/elicitationProtocol.js +1 -1
- package/dist/mcp/servers/agent/directToolsServer.js +0 -1
- package/dist/providers/azureOpenai.js +1 -1
- package/dist/providers/huggingFace.js +0 -1
- package/dist/providers/openaiCompatible.js +0 -1
- package/dist/sdk/toolRegistration.js +0 -1
- package/dist/server/openapi/generator.js +1 -1
- package/dist/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/types/configTypes.js +0 -5
- package/dist/types/modelTypes.js +0 -1
- package/dist/types/tools.js +0 -1
- package/dist/types/typeAliases.js +0 -1
- package/dist/types/utilities.js +1 -1
- package/dist/types/workflowTypes.js +0 -1
- package/dist/utils/providerRetry.js +0 -1
- package/dist/utils/providerUtils.js +0 -1
- package/package.json +2 -2
- package/dist/client/adapters/providerImageAdapter.js +0 -588
- package/dist/client/adapters/tts/googleTTSHandler.js +0 -344
- package/dist/client/adapters/video/directorPipeline.js +0 -516
- package/dist/client/adapters/video/ffmpegAdapter.js +0 -206
- package/dist/client/adapters/video/frameExtractor.js +0 -143
- package/dist/client/adapters/video/vertexVideoHandler.js +0 -763
- package/dist/client/adapters/video/videoAnalyzer.js +0 -238
- package/dist/client/adapters/video/videoMerger.js +0 -171
- package/dist/client/agent/directTools.js +0 -840
- package/dist/client/auth/AuthProviderFactory.js +0 -111
- package/dist/client/auth/AuthProviderRegistry.js +0 -190
- package/dist/client/auth/RequestContext.js +0 -78
- package/dist/client/auth/accountPool.js +0 -178
- package/dist/client/auth/anthropicOAuth.js +0 -974
- package/dist/client/auth/authContext.js +0 -314
- package/dist/client/auth/errors.js +0 -39
- package/dist/client/auth/index.js +0 -61
- package/dist/client/auth/middleware/AuthMiddleware.js +0 -519
- package/dist/client/auth/middleware/rateLimitByUser.js +0 -554
- package/dist/client/auth/providers/BaseAuthProvider.js +0 -723
- package/dist/client/auth/providers/CognitoProvider.js +0 -304
- package/dist/client/auth/providers/KeycloakProvider.js +0 -393
- package/dist/client/auth/providers/auth0.js +0 -274
- package/dist/client/auth/providers/betterAuth.js +0 -182
- package/dist/client/auth/providers/clerk.js +0 -317
- package/dist/client/auth/providers/custom.js +0 -112
- package/dist/client/auth/providers/firebase.js +0 -226
- package/dist/client/auth/providers/jwt.js +0 -212
- package/dist/client/auth/providers/oauth2.js +0 -303
- package/dist/client/auth/providers/supabase.js +0 -259
- package/dist/client/auth/providers/workos.js +0 -284
- package/dist/client/auth/serverBridge.js +0 -25
- package/dist/client/auth/sessionManager.js +0 -437
- package/dist/client/auth/tokenStore.js +0 -799
- package/dist/client/client/aiSdkAdapter.js +0 -487
- package/dist/client/client/auth.js +0 -473
- package/dist/client/client/errors.js +0 -552
- package/dist/client/client/httpClient.js +0 -837
- package/dist/client/client/index.js +0 -172
- package/dist/client/client/interceptors.js +0 -601
- package/dist/client/client/sseClient.js +0 -545
- package/dist/client/client/streamingClient.js +0 -917
- package/dist/client/client/wsClient.js +0 -369
- package/dist/client/config/configManager.js +0 -303
- package/dist/client/config/conversationMemory.js +0 -86
- package/dist/client/config/taskClassificationConfig.js +0 -148
- package/dist/client/constants/contextWindows.js +0 -295
- package/dist/client/constants/enums.js +0 -853
- package/dist/client/constants/index.js +0 -207
- package/dist/client/constants/performance.js +0 -389
- package/dist/client/constants/retry.js +0 -266
- package/dist/client/constants/timeouts.js +0 -182
- package/dist/client/constants/tokens.js +0 -380
- package/dist/client/constants/videoErrors.js +0 -46
- package/dist/client/context/budgetChecker.js +0 -98
- package/dist/client/context/contextCompactor.js +0 -205
- package/dist/client/context/emergencyTruncation.js +0 -88
- package/dist/client/context/errorDetection.js +0 -171
- package/dist/client/context/errors.js +0 -21
- package/dist/client/context/fileTokenBudget.js +0 -127
- package/dist/client/context/prompts/summarizationPrompt.js +0 -117
- package/dist/client/context/stages/fileReadDeduplicator.js +0 -66
- package/dist/client/context/stages/slidingWindowTruncator.js +0 -190
- package/dist/client/context/stages/structuredSummarizer.js +0 -99
- package/dist/client/context/stages/toolOutputPruner.js +0 -52
- package/dist/client/context/summarizationEngine.js +0 -136
- package/dist/client/context/toolOutputLimits.js +0 -78
- package/dist/client/context/toolPairRepair.js +0 -66
- package/dist/client/core/analytics.js +0 -88
- package/dist/client/core/baseProvider.js +0 -1385
- package/dist/client/core/constants.js +0 -140
- package/dist/client/core/conversationMemoryFactory.js +0 -141
- package/dist/client/core/conversationMemoryInitializer.js +0 -128
- package/dist/client/core/conversationMemoryManager.js +0 -344
- package/dist/client/core/dynamicModels.js +0 -358
- package/dist/client/core/evaluation.js +0 -309
- package/dist/client/core/evaluationProviders.js +0 -248
- package/dist/client/core/factory.js +0 -412
- package/dist/client/core/infrastructure/baseError.js +0 -22
- package/dist/client/core/infrastructure/baseFactory.js +0 -54
- package/dist/client/core/infrastructure/baseRegistry.js +0 -53
- package/dist/client/core/infrastructure/index.js +0 -5
- package/dist/client/core/infrastructure/retry.js +0 -20
- package/dist/client/core/infrastructure/typedEventEmitter.js +0 -23
- package/dist/client/core/modelConfiguration.js +0 -851
- package/dist/client/core/modules/GenerationHandler.js +0 -588
- package/dist/client/core/modules/MessageBuilder.js +0 -273
- package/dist/client/core/modules/StreamHandler.js +0 -185
- package/dist/client/core/modules/TelemetryHandler.js +0 -203
- package/dist/client/core/modules/ToolsManager.js +0 -499
- package/dist/client/core/modules/Utilities.js +0 -331
- package/dist/client/core/redisConversationMemoryManager.js +0 -1435
- package/dist/client/core/streamAnalytics.js +0 -131
- package/dist/client/evaluation/contextBuilder.js +0 -134
- package/dist/client/evaluation/index.js +0 -61
- package/dist/client/evaluation/prompts.js +0 -73
- package/dist/client/evaluation/ragasEvaluator.js +0 -110
- package/dist/client/evaluation/retryManager.js +0 -78
- package/dist/client/evaluation/scoring.js +0 -61
- package/dist/client/factories/providerFactory.js +0 -166
- package/dist/client/factories/providerRegistry.js +0 -166
- package/dist/client/features/ppt/constants.js +0 -896
- package/dist/client/features/ppt/contentPlanner.js +0 -529
- package/dist/client/features/ppt/presentationOrchestrator.js +0 -236
- package/dist/client/features/ppt/slideGenerator.js +0 -532
- package/dist/client/features/ppt/slideRenderers.js +0 -2383
- package/dist/client/features/ppt/slideTypeInference.js +0 -405
- package/dist/client/features/ppt/types.js +0 -13
- package/dist/client/features/ppt/utils.js +0 -443
- package/dist/client/files/fileReferenceRegistry.js +0 -1543
- package/dist/client/files/fileTools.js +0 -450
- package/dist/client/files/streamingReader.js +0 -321
- package/dist/client/files/types.js +0 -23
- package/dist/client/hitl/hitlErrors.js +0 -54
- package/dist/client/hitl/hitlManager.js +0 -460
- package/dist/client/mcp/agentExposure.js +0 -356
- package/dist/client/mcp/auth/index.js +0 -11
- package/dist/client/mcp/auth/oauthClientProvider.js +0 -325
- package/dist/client/mcp/auth/tokenStorage.js +0 -134
- package/dist/client/mcp/batching/index.js +0 -10
- package/dist/client/mcp/batching/requestBatcher.js +0 -441
- package/dist/client/mcp/caching/index.js +0 -10
- package/dist/client/mcp/caching/toolCache.js +0 -433
- package/dist/client/mcp/elicitation/elicitationManager.js +0 -376
- package/dist/client/mcp/elicitation/index.js +0 -11
- package/dist/client/mcp/elicitation/types.js +0 -10
- package/dist/client/mcp/elicitationProtocol.js +0 -375
- package/dist/client/mcp/enhancedToolDiscovery.js +0 -481
- package/dist/client/mcp/externalServerManager.js +0 -1478
- package/dist/client/mcp/factory.js +0 -161
- package/dist/client/mcp/flexibleToolValidator.js +0 -161
- package/dist/client/mcp/httpRateLimiter.js +0 -391
- package/dist/client/mcp/httpRetryHandler.js +0 -178
- package/dist/client/mcp/index.js +0 -74
- package/dist/client/mcp/mcpCircuitBreaker.js +0 -427
- package/dist/client/mcp/mcpClientFactory.js +0 -708
- package/dist/client/mcp/mcpRegistryClient.js +0 -488
- package/dist/client/mcp/mcpServerBase.js +0 -373
- package/dist/client/mcp/multiServerManager.js +0 -579
- package/dist/client/mcp/registry.js +0 -158
- package/dist/client/mcp/routing/index.js +0 -10
- package/dist/client/mcp/routing/toolRouter.js +0 -416
- package/dist/client/mcp/serverCapabilities.js +0 -502
- package/dist/client/mcp/servers/agent/directToolsServer.js +0 -150
- package/dist/client/mcp/toolAnnotations.js +0 -239
- package/dist/client/mcp/toolConverter.js +0 -258
- package/dist/client/mcp/toolDiscoveryService.js +0 -798
- package/dist/client/mcp/toolIntegration.js +0 -334
- package/dist/client/mcp/toolRegistry.js +0 -729
- package/dist/client/memory/hippocampusInitializer.js +0 -19
- package/dist/client/memory/memoryRetrievalTools.js +0 -166
- package/dist/client/middleware/builtin/analytics.js +0 -132
- package/dist/client/middleware/builtin/autoEvaluation.js +0 -203
- package/dist/client/middleware/builtin/guardrails.js +0 -109
- package/dist/client/middleware/builtin/lifecycle.js +0 -168
- package/dist/client/middleware/factory.js +0 -327
- package/dist/client/middleware/registry.js +0 -295
- package/dist/client/middleware/utils/guardrailsUtils.js +0 -396
- package/dist/client/models/anthropicModels.js +0 -527
- package/dist/client/neurolink.js +0 -8233
- package/dist/client/observability/exporterRegistry.js +0 -413
- package/dist/client/observability/exporters/arizeExporter.js +0 -138
- package/dist/client/observability/exporters/baseExporter.js +0 -190
- package/dist/client/observability/exporters/braintrustExporter.js +0 -154
- package/dist/client/observability/exporters/datadogExporter.js +0 -196
- package/dist/client/observability/exporters/laminarExporter.js +0 -302
- package/dist/client/observability/exporters/langfuseExporter.js +0 -209
- package/dist/client/observability/exporters/langsmithExporter.js +0 -143
- package/dist/client/observability/exporters/otelExporter.js +0 -164
- package/dist/client/observability/exporters/posthogExporter.js +0 -287
- package/dist/client/observability/exporters/sentryExporter.js +0 -165
- package/dist/client/observability/index.js +0 -31
- package/dist/client/observability/metricsAggregator.js +0 -556
- package/dist/client/observability/otelBridge.js +0 -131
- package/dist/client/observability/retryPolicy.js +0 -383
- package/dist/client/observability/sampling/samplers.js +0 -216
- package/dist/client/observability/spanProcessor.js +0 -303
- package/dist/client/observability/tokenTracker.js +0 -413
- package/dist/client/observability/types/exporterTypes.js +0 -5
- package/dist/client/observability/types/index.js +0 -4
- package/dist/client/observability/types/spanTypes.js +0 -92
- package/dist/client/observability/utils/safeMetadata.js +0 -25
- package/dist/client/observability/utils/spanSerializer.js +0 -292
- package/dist/client/processors/archive/ArchiveProcessor.js +0 -1308
- package/dist/client/processors/base/BaseFileProcessor.js +0 -614
- package/dist/client/processors/base/types.js +0 -82
- package/dist/client/processors/config/fileTypes.js +0 -520
- package/dist/client/processors/config/index.js +0 -92
- package/dist/client/processors/config/languageMap.js +0 -410
- package/dist/client/processors/config/mimeTypes.js +0 -363
- package/dist/client/processors/config/sizeLimits.js +0 -258
- package/dist/client/processors/document/ExcelProcessor.js +0 -590
- package/dist/client/processors/document/OpenDocumentProcessor.js +0 -212
- package/dist/client/processors/document/PptxProcessor.js +0 -157
- package/dist/client/processors/document/RtfProcessor.js +0 -361
- package/dist/client/processors/document/WordProcessor.js +0 -353
- package/dist/client/processors/errors/FileErrorCode.js +0 -255
- package/dist/client/processors/errors/errorHelpers.js +0 -386
- package/dist/client/processors/errors/errorSerializer.js +0 -507
- package/dist/client/processors/errors/index.js +0 -49
- package/dist/client/processors/markup/SvgProcessor.js +0 -240
- package/dist/client/processors/media/AudioProcessor.js +0 -707
- package/dist/client/processors/media/VideoProcessor.js +0 -1045
- package/dist/client/providers/amazonBedrock.js +0 -1512
- package/dist/client/providers/amazonSagemaker.js +0 -162
- package/dist/client/providers/anthropic.js +0 -831
- package/dist/client/providers/azureOpenai.js +0 -143
- package/dist/client/providers/googleAiStudio.js +0 -1200
- package/dist/client/providers/googleNativeGemini3.js +0 -543
- package/dist/client/providers/googleVertex.js +0 -2936
- package/dist/client/providers/huggingFace.js +0 -315
- package/dist/client/providers/litellm.js +0 -488
- package/dist/client/providers/mistral.js +0 -157
- package/dist/client/providers/ollama.js +0 -1579
- package/dist/client/providers/openAI.js +0 -627
- package/dist/client/providers/openRouter.js +0 -543
- package/dist/client/providers/openaiCompatible.js +0 -290
- package/dist/client/providers/providerTypeUtils.js +0 -46
- package/dist/client/providers/sagemaker/adaptive-semaphore.js +0 -215
- package/dist/client/providers/sagemaker/client.js +0 -472
- package/dist/client/providers/sagemaker/config.js +0 -317
- package/dist/client/providers/sagemaker/detection.js +0 -606
- package/dist/client/providers/sagemaker/error-constants.js +0 -227
- package/dist/client/providers/sagemaker/errors.js +0 -299
- package/dist/client/providers/sagemaker/language-model.js +0 -775
- package/dist/client/providers/sagemaker/parsers.js +0 -634
- package/dist/client/providers/sagemaker/streaming.js +0 -331
- package/dist/client/providers/sagemaker/structured-parser.js +0 -625
- package/dist/client/proxy/accountQuota.js +0 -162
- package/dist/client/proxy/claudeFormat.js +0 -595
- package/dist/client/proxy/modelRouter.js +0 -29
- package/dist/client/proxy/oauthFetch.js +0 -367
- package/dist/client/proxy/proxyFetch.js +0 -586
- package/dist/client/proxy/requestLogger.js +0 -207
- package/dist/client/proxy/tokenRefresh.js +0 -124
- package/dist/client/proxy/usageStats.js +0 -74
- package/dist/client/proxy/utils/noProxyUtils.js +0 -149
- package/dist/client/rag/ChunkerFactory.js +0 -320
- package/dist/client/rag/ChunkerRegistry.js +0 -421
- package/dist/client/rag/chunkers/BaseChunker.js +0 -143
- package/dist/client/rag/chunkers/CharacterChunker.js +0 -28
- package/dist/client/rag/chunkers/HTMLChunker.js +0 -38
- package/dist/client/rag/chunkers/JSONChunker.js +0 -68
- package/dist/client/rag/chunkers/LaTeXChunker.js +0 -63
- package/dist/client/rag/chunkers/MarkdownChunker.js +0 -306
- package/dist/client/rag/chunkers/RecursiveChunker.js +0 -139
- package/dist/client/rag/chunkers/SemanticMarkdownChunker.js +0 -138
- package/dist/client/rag/chunkers/SentenceChunker.js +0 -66
- package/dist/client/rag/chunkers/TokenChunker.js +0 -61
- package/dist/client/rag/chunkers/index.js +0 -15
- package/dist/client/rag/chunking/characterChunker.js +0 -142
- package/dist/client/rag/chunking/chunkerRegistry.js +0 -194
- package/dist/client/rag/chunking/htmlChunker.js +0 -247
- package/dist/client/rag/chunking/index.js +0 -17
- package/dist/client/rag/chunking/jsonChunker.js +0 -281
- package/dist/client/rag/chunking/latexChunker.js +0 -251
- package/dist/client/rag/chunking/markdownChunker.js +0 -373
- package/dist/client/rag/chunking/recursiveChunker.js +0 -148
- package/dist/client/rag/chunking/semanticChunker.js +0 -306
- package/dist/client/rag/chunking/sentenceChunker.js +0 -230
- package/dist/client/rag/chunking/tokenChunker.js +0 -183
- package/dist/client/rag/document/MDocument.js +0 -392
- package/dist/client/rag/document/index.js +0 -5
- package/dist/client/rag/document/loaders.js +0 -500
- package/dist/client/rag/errors/RAGError.js +0 -274
- package/dist/client/rag/errors/index.js +0 -6
- package/dist/client/rag/graphRag/graphRAG.js +0 -401
- package/dist/client/rag/graphRag/index.js +0 -4
- package/dist/client/rag/index.js +0 -141
- package/dist/client/rag/metadata/MetadataExtractorFactory.js +0 -418
- package/dist/client/rag/metadata/MetadataExtractorRegistry.js +0 -362
- package/dist/client/rag/metadata/index.js +0 -9
- package/dist/client/rag/metadata/metadataExtractor.js +0 -280
- package/dist/client/rag/pipeline/RAGPipeline.js +0 -436
- package/dist/client/rag/pipeline/contextAssembly.js +0 -341
- package/dist/client/rag/pipeline/index.js +0 -5
- package/dist/client/rag/ragIntegration.js +0 -321
- package/dist/client/rag/reranker/RerankerFactory.js +0 -430
- package/dist/client/rag/reranker/RerankerRegistry.js +0 -402
- package/dist/client/rag/reranker/index.js +0 -9
- package/dist/client/rag/reranker/reranker.js +0 -277
- package/dist/client/rag/resilience/CircuitBreaker.js +0 -431
- package/dist/client/rag/resilience/RetryHandler.js +0 -304
- package/dist/client/rag/resilience/index.js +0 -7
- package/dist/client/rag/retrieval/hybridSearch.js +0 -335
- package/dist/client/rag/retrieval/index.js +0 -5
- package/dist/client/rag/retrieval/vectorQueryTool.js +0 -307
- package/dist/client/rag/types.js +0 -8
- package/dist/client/sdk/toolRegistration.js +0 -377
- package/dist/client/server/abstract/baseServerAdapter.js +0 -575
- package/dist/client/server/adapters/expressAdapter.js +0 -486
- package/dist/client/server/adapters/fastifyAdapter.js +0 -472
- package/dist/client/server/adapters/honoAdapter.js +0 -632
- package/dist/client/server/adapters/koaAdapter.js +0 -510
- package/dist/client/server/errors.js +0 -486
- package/dist/client/server/factory/serverAdapterFactory.js +0 -160
- package/dist/client/server/index.js +0 -108
- package/dist/client/server/middleware/abortSignal.js +0 -111
- package/dist/client/server/middleware/auth.js +0 -388
- package/dist/client/server/middleware/cache.js +0 -359
- package/dist/client/server/middleware/common.js +0 -281
- package/dist/client/server/middleware/deprecation.js +0 -190
- package/dist/client/server/middleware/mcpBodyAttachment.js +0 -63
- package/dist/client/server/middleware/rateLimit.js +0 -227
- package/dist/client/server/middleware/validation.js +0 -388
- package/dist/client/server/openapi/generator.js +0 -398
- package/dist/client/server/openapi/index.js +0 -36
- package/dist/client/server/openapi/schemas.js +0 -695
- package/dist/client/server/openapi/templates.js +0 -374
- package/dist/client/server/routes/agentRoutes.js +0 -189
- package/dist/client/server/routes/claudeProxyRoutes.js +0 -1600
- package/dist/client/server/routes/healthRoutes.js +0 -187
- package/dist/client/server/routes/index.js +0 -57
- package/dist/client/server/routes/mcpRoutes.js +0 -342
- package/dist/client/server/routes/memoryRoutes.js +0 -350
- package/dist/client/server/routes/openApiRoutes.js +0 -126
- package/dist/client/server/routes/toolRoutes.js +0 -199
- package/dist/client/server/streaming/dataStream.js +0 -486
- package/dist/client/server/streaming/index.js +0 -11
- package/dist/client/server/types.js +0 -67
- package/dist/client/server/utils/redaction.js +0 -334
- package/dist/client/server/utils/validation.js +0 -243
- package/dist/client/server/websocket/WebSocketHandler.js +0 -383
- package/dist/client/server/websocket/index.js +0 -4
- package/dist/client/services/server/ai/observability/instrumentation.js +0 -808
- package/dist/client/telemetry/attributes.js +0 -100
- package/dist/client/telemetry/index.js +0 -26
- package/dist/client/telemetry/telemetryService.js +0 -308
- package/dist/client/telemetry/tracers.js +0 -17
- package/dist/client/telemetry/withSpan.js +0 -34
- package/dist/client/types/actionTypes.js +0 -6
- package/dist/client/types/analytics.js +0 -5
- package/dist/client/types/authTypes.js +0 -9
- package/dist/client/types/circuitBreakerErrors.js +0 -34
- package/dist/client/types/cli.js +0 -21
- package/dist/client/types/clientTypes.js +0 -10
- package/dist/client/types/common.js +0 -51
- package/dist/client/types/configTypes.js +0 -49
- package/dist/client/types/content.js +0 -19
- package/dist/client/types/contextTypes.js +0 -400
- package/dist/client/types/conversation.js +0 -47
- package/dist/client/types/conversationMemoryInterface.js +0 -6
- package/dist/client/types/domainTypes.js +0 -5
- package/dist/client/types/errors.js +0 -167
- package/dist/client/types/evaluation.js +0 -5
- package/dist/client/types/evaluationProviders.js +0 -5
- package/dist/client/types/evaluationTypes.js +0 -1
- package/dist/client/types/externalMcp.js +0 -6
- package/dist/client/types/fileReferenceTypes.js +0 -8
- package/dist/client/types/fileTypes.js +0 -4
- package/dist/client/types/generateTypes.js +0 -1
- package/dist/client/types/guardrails.js +0 -1
- package/dist/client/types/hitlTypes.js +0 -8
- package/dist/client/types/index.js +0 -57
- package/dist/client/types/mcpTypes.js +0 -5
- package/dist/client/types/middlewareTypes.js +0 -1
- package/dist/client/types/modelTypes.js +0 -30
- package/dist/client/types/multimodal.js +0 -135
- package/dist/client/types/observability.js +0 -6
- package/dist/client/types/pptTypes.js +0 -82
- package/dist/client/types/providers.js +0 -111
- package/dist/client/types/proxyTypes.js +0 -16
- package/dist/client/types/ragTypes.js +0 -7
- package/dist/client/types/sdkTypes.js +0 -8
- package/dist/client/types/serviceTypes.js +0 -5
- package/dist/client/types/streamTypes.js +0 -1
- package/dist/client/types/subscriptionTypes.js +0 -9
- package/dist/client/types/taskClassificationTypes.js +0 -5
- package/dist/client/types/tools.js +0 -24
- package/dist/client/types/ttsTypes.js +0 -57
- package/dist/client/types/typeAliases.js +0 -48
- package/dist/client/types/utilities.js +0 -4
- package/dist/client/types/workflowTypes.js +0 -30
- package/dist/client/utils/async/withTimeout.js +0 -98
- package/dist/client/utils/asyncMutex.js +0 -60
- package/dist/client/utils/conversationMemory.js +0 -431
- package/dist/client/utils/csvProcessor.js +0 -846
- package/dist/client/utils/errorHandling.js +0 -936
- package/dist/client/utils/evaluationUtils.js +0 -131
- package/dist/client/utils/factoryProcessing.js +0 -589
- package/dist/client/utils/fileDetector.js +0 -2161
- package/dist/client/utils/imageCache.js +0 -376
- package/dist/client/utils/imageProcessor.js +0 -704
- package/dist/client/utils/logger.js +0 -491
- package/dist/client/utils/mcpDefaults.js +0 -134
- package/dist/client/utils/messageBuilder.js +0 -1653
- package/dist/client/utils/modelAliasResolver.js +0 -54
- package/dist/client/utils/modelDetection.js +0 -80
- package/dist/client/utils/modelRouter.js +0 -292
- package/dist/client/utils/multimodalOptionsBuilder.js +0 -65
- package/dist/client/utils/observabilityHelpers.js +0 -47
- package/dist/client/utils/parameterValidation.js +0 -966
- package/dist/client/utils/pdfProcessor.js +0 -410
- package/dist/client/utils/performance.js +0 -222
- package/dist/client/utils/pricing.js +0 -340
- package/dist/client/utils/promptRedaction.js +0 -62
- package/dist/client/utils/providerConfig.js +0 -1009
- package/dist/client/utils/providerHealth.js +0 -1237
- package/dist/client/utils/providerRetry.js +0 -112
- package/dist/client/utils/providerUtils.js +0 -434
- package/dist/client/utils/rateLimiter.js +0 -200
- package/dist/client/utils/redis.js +0 -368
- package/dist/client/utils/retryHandler.js +0 -269
- package/dist/client/utils/retryability.js +0 -22
- package/dist/client/utils/sanitizers/svg.js +0 -481
- package/dist/client/utils/schemaConversion.js +0 -255
- package/dist/client/utils/taskClassificationUtils.js +0 -149
- package/dist/client/utils/taskClassifier.js +0 -94
- package/dist/client/utils/thinkingConfig.js +0 -104
- package/dist/client/utils/timeout.js +0 -359
- package/dist/client/utils/tokenEstimation.js +0 -142
- package/dist/client/utils/tokenLimits.js +0 -125
- package/dist/client/utils/tokenUtils.js +0 -239
- package/dist/client/utils/toolUtils.js +0 -75
- package/dist/client/utils/transformationUtils.js +0 -554
- package/dist/client/utils/ttsProcessor.js +0 -286
- package/dist/client/utils/typeUtils.js +0 -97
- package/dist/client/utils/videoAnalysisProcessor.js +0 -67
- package/dist/client/workflow/config.js +0 -398
- package/dist/client/workflow/core/ensembleExecutor.js +0 -407
- package/dist/client/workflow/core/judgeScorer.js +0 -544
- package/dist/client/workflow/core/responseConditioner.js +0 -225
- package/dist/client/workflow/core/types/conditionerTypes.js +0 -7
- package/dist/client/workflow/core/types/ensembleTypes.js +0 -7
- package/dist/client/workflow/core/types/index.js +0 -7
- package/dist/client/workflow/core/types/judgeTypes.js +0 -7
- package/dist/client/workflow/core/types/layerTypes.js +0 -7
- package/dist/client/workflow/core/types/registryTypes.js +0 -7
- package/dist/client/workflow/core/workflowRegistry.js +0 -304
- package/dist/client/workflow/core/workflowRunner.js +0 -586
- package/dist/client/workflow/index.js +0 -50
- package/dist/client/workflow/types.js +0 -9
- package/dist/client/workflow/utils/types/index.js +0 -7
- package/dist/client/workflow/utils/workflowMetrics.js +0 -311
- package/dist/client/workflow/utils/workflowValidation.js +0 -420
- package/dist/client/workflow/workflows/adaptiveWorkflow.js +0 -366
- package/dist/client/workflow/workflows/consensusWorkflow.js +0 -192
- package/dist/client/workflow/workflows/fallbackWorkflow.js +0 -225
- package/dist/client/workflow/workflows/multiJudgeWorkflow.js +0 -351
- /package/dist/client/{client/reactHooks.js → reactHooks.js} +0 -0
|
@@ -1,307 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Vector Query Tool
|
|
3
|
-
*
|
|
4
|
-
* Provides semantic search capabilities for RAG pipelines.
|
|
5
|
-
* Integrates with vector stores and supports metadata filtering and reranking.
|
|
6
|
-
*/
|
|
7
|
-
import { randomUUID } from "crypto";
|
|
8
|
-
import { z } from "zod";
|
|
9
|
-
import { ProviderFactory } from "../../factories/providerFactory.js";
|
|
10
|
-
import { logger } from "../../utils/logger.js";
|
|
11
|
-
import { rerank } from "../reranker/reranker.js";
|
|
12
|
-
/**
|
|
13
|
-
* Creates a vector query tool for semantic search
|
|
14
|
-
* Follows NeuroLink's factory pattern
|
|
15
|
-
*
|
|
16
|
-
* @param config - Tool configuration
|
|
17
|
-
* @param vectorStore - Vector store instance or resolver function
|
|
18
|
-
* @returns Tool object with execute method
|
|
19
|
-
*/
|
|
20
|
-
export function createVectorQueryTool(config, vectorStore) {
|
|
21
|
-
const { id = `vector-query-${randomUUID().slice(0, 8)}`, description = "Access the knowledge base to find information needed to answer user questions", indexName, embeddingModel, enableFilter = false, includeVectors = false, includeSources = true, topK = 10, reranker: rerankerConfig, providerOptions, } = config;
|
|
22
|
-
return {
|
|
23
|
-
name: id,
|
|
24
|
-
description,
|
|
25
|
-
parameters: z.object({
|
|
26
|
-
query: z
|
|
27
|
-
.string()
|
|
28
|
-
.describe("The search query to find relevant information"),
|
|
29
|
-
...(enableFilter
|
|
30
|
-
? {
|
|
31
|
-
filter: z
|
|
32
|
-
.record(z.string(), z.unknown())
|
|
33
|
-
.optional()
|
|
34
|
-
.describe("Metadata filters to narrow down results"),
|
|
35
|
-
}
|
|
36
|
-
: {}),
|
|
37
|
-
topK: z
|
|
38
|
-
.number()
|
|
39
|
-
.optional()
|
|
40
|
-
.describe(`Number of results to return (default: ${topK})`),
|
|
41
|
-
}),
|
|
42
|
-
/**
|
|
43
|
-
* Execute the vector query
|
|
44
|
-
* @param params - Query parameters
|
|
45
|
-
* @param context - Optional request context
|
|
46
|
-
* @returns Query results with relevant context
|
|
47
|
-
*/
|
|
48
|
-
execute: async (params, context) => {
|
|
49
|
-
const startTime = Date.now();
|
|
50
|
-
try {
|
|
51
|
-
// Resolve vector store if it's a function
|
|
52
|
-
const store = typeof vectorStore === "function"
|
|
53
|
-
? vectorStore(context || {})
|
|
54
|
-
: vectorStore;
|
|
55
|
-
// Generate query embedding
|
|
56
|
-
const embeddingProvider = await ProviderFactory.createProvider(embeddingModel.provider, embeddingModel.modelName);
|
|
57
|
-
// Check if provider has embed method
|
|
58
|
-
if (typeof embeddingProvider.embed !==
|
|
59
|
-
"function") {
|
|
60
|
-
throw new Error(`Provider ${embeddingModel.provider} does not support embeddings`);
|
|
61
|
-
}
|
|
62
|
-
const queryEmbedding = await embeddingProvider.embed(params.query);
|
|
63
|
-
// Query the vector store
|
|
64
|
-
let results = await store.query({
|
|
65
|
-
indexName,
|
|
66
|
-
queryVector: queryEmbedding,
|
|
67
|
-
topK: params.topK || topK,
|
|
68
|
-
filter: params.filter,
|
|
69
|
-
includeVectors,
|
|
70
|
-
...providerOptions,
|
|
71
|
-
});
|
|
72
|
-
let reranked = false;
|
|
73
|
-
// Apply reranking if configured
|
|
74
|
-
if (rerankerConfig && results.length > 0) {
|
|
75
|
-
const rerankerModel = await ProviderFactory.createProvider(rerankerConfig.model.provider, rerankerConfig.model.modelName);
|
|
76
|
-
const rerankedResults = await rerank(results, params.query, rerankerModel, {
|
|
77
|
-
weights: rerankerConfig.weights,
|
|
78
|
-
topK: rerankerConfig.topK,
|
|
79
|
-
queryEmbedding,
|
|
80
|
-
});
|
|
81
|
-
results = rerankedResults.map((r) => r.result);
|
|
82
|
-
reranked = true;
|
|
83
|
-
}
|
|
84
|
-
// Format results
|
|
85
|
-
const relevantContext = results
|
|
86
|
-
.map((r, i) => `[${i + 1}] ${r.metadata?.text || r.text || ""}`)
|
|
87
|
-
.join("\n\n");
|
|
88
|
-
const queryTime = Date.now() - startTime;
|
|
89
|
-
logger.info("[VectorQueryTool] Query completed", {
|
|
90
|
-
query: params.query.slice(0, 50),
|
|
91
|
-
resultsCount: results.length,
|
|
92
|
-
queryTime,
|
|
93
|
-
reranked,
|
|
94
|
-
filtered: !!params.filter,
|
|
95
|
-
});
|
|
96
|
-
return {
|
|
97
|
-
relevantContext,
|
|
98
|
-
sources: includeSources ? results : [],
|
|
99
|
-
totalResults: results.length,
|
|
100
|
-
metadata: {
|
|
101
|
-
queryTime,
|
|
102
|
-
reranked,
|
|
103
|
-
filtered: !!params.filter,
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
logger.error("[VectorQueryTool] Query failed", {
|
|
109
|
-
query: params.query.slice(0, 50),
|
|
110
|
-
error: error instanceof Error ? error.message : String(error),
|
|
111
|
-
});
|
|
112
|
-
throw error;
|
|
113
|
-
}
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
/**
|
|
118
|
-
* In-memory vector store implementation for testing and development
|
|
119
|
-
*/
|
|
120
|
-
export class InMemoryVectorStore {
|
|
121
|
-
vectors = new Map();
|
|
122
|
-
/**
|
|
123
|
-
* Add vectors to an index
|
|
124
|
-
*/
|
|
125
|
-
async upsert(indexName, items) {
|
|
126
|
-
let index = this.vectors.get(indexName);
|
|
127
|
-
if (!index) {
|
|
128
|
-
index = new Map();
|
|
129
|
-
this.vectors.set(indexName, index);
|
|
130
|
-
}
|
|
131
|
-
for (const item of items) {
|
|
132
|
-
index.set(item.id, {
|
|
133
|
-
vector: item.vector,
|
|
134
|
-
metadata: item.metadata || {},
|
|
135
|
-
});
|
|
136
|
-
}
|
|
137
|
-
}
|
|
138
|
-
/**
|
|
139
|
-
* Query vectors by similarity
|
|
140
|
-
*/
|
|
141
|
-
async query(params) {
|
|
142
|
-
const { indexName, queryVector, topK = 10, filter, includeVectors = false, } = params;
|
|
143
|
-
const index = this.vectors.get(indexName);
|
|
144
|
-
if (!index) {
|
|
145
|
-
return [];
|
|
146
|
-
}
|
|
147
|
-
// Calculate similarities
|
|
148
|
-
const results = [];
|
|
149
|
-
for (const [id, data] of index) {
|
|
150
|
-
// Apply filter if provided
|
|
151
|
-
if (filter && !this.matchesFilter(data.metadata, filter)) {
|
|
152
|
-
continue;
|
|
153
|
-
}
|
|
154
|
-
const score = this.cosineSimilarity(queryVector, data.vector);
|
|
155
|
-
results.push({
|
|
156
|
-
id,
|
|
157
|
-
score,
|
|
158
|
-
metadata: data.metadata,
|
|
159
|
-
...(includeVectors ? { vector: data.vector } : {}),
|
|
160
|
-
});
|
|
161
|
-
}
|
|
162
|
-
// Sort by score descending and take top K
|
|
163
|
-
results.sort((a, b) => b.score - a.score);
|
|
164
|
-
return results.slice(0, topK).map((r) => ({
|
|
165
|
-
id: r.id,
|
|
166
|
-
score: r.score,
|
|
167
|
-
text: r.metadata.text,
|
|
168
|
-
metadata: r.metadata,
|
|
169
|
-
...(includeVectors ? { vector: r.vector } : {}),
|
|
170
|
-
}));
|
|
171
|
-
}
|
|
172
|
-
/**
|
|
173
|
-
* Delete vectors from an index
|
|
174
|
-
*/
|
|
175
|
-
async delete(indexName, ids) {
|
|
176
|
-
const index = this.vectors.get(indexName);
|
|
177
|
-
if (!index) {
|
|
178
|
-
return;
|
|
179
|
-
}
|
|
180
|
-
for (const id of ids) {
|
|
181
|
-
index.delete(id);
|
|
182
|
-
}
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Check if metadata matches filter
|
|
186
|
-
*/
|
|
187
|
-
matchesFilter(metadata, filter) {
|
|
188
|
-
for (const [key, value] of Object.entries(filter)) {
|
|
189
|
-
if (key.startsWith("$")) {
|
|
190
|
-
// Logical operators
|
|
191
|
-
switch (key) {
|
|
192
|
-
case "$and":
|
|
193
|
-
if (!value.every((f) => this.matchesFilter(metadata, f))) {
|
|
194
|
-
return false;
|
|
195
|
-
}
|
|
196
|
-
break;
|
|
197
|
-
case "$or":
|
|
198
|
-
if (!value.some((f) => this.matchesFilter(metadata, f))) {
|
|
199
|
-
return false;
|
|
200
|
-
}
|
|
201
|
-
break;
|
|
202
|
-
case "$not":
|
|
203
|
-
if (this.matchesFilter(metadata, value)) {
|
|
204
|
-
return false;
|
|
205
|
-
}
|
|
206
|
-
break;
|
|
207
|
-
}
|
|
208
|
-
}
|
|
209
|
-
else {
|
|
210
|
-
// Field comparison
|
|
211
|
-
const fieldValue = metadata[key];
|
|
212
|
-
if (typeof value === "object" && value !== null) {
|
|
213
|
-
// Comparison operators
|
|
214
|
-
const ops = value;
|
|
215
|
-
if ("$eq" in ops && fieldValue !== ops.$eq) {
|
|
216
|
-
return false;
|
|
217
|
-
}
|
|
218
|
-
if ("$ne" in ops && fieldValue === ops.$ne) {
|
|
219
|
-
return false;
|
|
220
|
-
}
|
|
221
|
-
if ("$gt" in ops &&
|
|
222
|
-
(typeof fieldValue !== "number" ||
|
|
223
|
-
fieldValue <= ops.$gt)) {
|
|
224
|
-
return false;
|
|
225
|
-
}
|
|
226
|
-
if ("$gte" in ops &&
|
|
227
|
-
(typeof fieldValue !== "number" ||
|
|
228
|
-
fieldValue < ops.$gte)) {
|
|
229
|
-
return false;
|
|
230
|
-
}
|
|
231
|
-
if ("$lt" in ops &&
|
|
232
|
-
(typeof fieldValue !== "number" ||
|
|
233
|
-
fieldValue >= ops.$lt)) {
|
|
234
|
-
return false;
|
|
235
|
-
}
|
|
236
|
-
if ("$lte" in ops &&
|
|
237
|
-
(typeof fieldValue !== "number" ||
|
|
238
|
-
fieldValue > ops.$lte)) {
|
|
239
|
-
return false;
|
|
240
|
-
}
|
|
241
|
-
if ("$in" in ops && !ops.$in.includes(fieldValue)) {
|
|
242
|
-
return false;
|
|
243
|
-
}
|
|
244
|
-
if ("$nin" in ops && ops.$nin.includes(fieldValue)) {
|
|
245
|
-
return false;
|
|
246
|
-
}
|
|
247
|
-
if ("$exists" in ops &&
|
|
248
|
-
(ops.$exists ? fieldValue === undefined : fieldValue !== undefined)) {
|
|
249
|
-
return false;
|
|
250
|
-
}
|
|
251
|
-
if ("$contains" in ops &&
|
|
252
|
-
(typeof fieldValue !== "string" ||
|
|
253
|
-
!fieldValue.includes(ops.$contains))) {
|
|
254
|
-
return false;
|
|
255
|
-
}
|
|
256
|
-
if ("$regex" in ops) {
|
|
257
|
-
const pattern = ops.$regex;
|
|
258
|
-
let regexMatches = false;
|
|
259
|
-
// Guard against ReDoS: reject excessively long patterns and limit
|
|
260
|
-
// the tested string length to prevent pathological backtracking.
|
|
261
|
-
if (pattern.length <= 200) {
|
|
262
|
-
try {
|
|
263
|
-
const re = new RegExp(pattern);
|
|
264
|
-
const testValue = typeof fieldValue === "string"
|
|
265
|
-
? fieldValue.slice(0, 10_000)
|
|
266
|
-
: "";
|
|
267
|
-
regexMatches = re.test(testValue);
|
|
268
|
-
}
|
|
269
|
-
catch {
|
|
270
|
-
// Invalid regex pattern — treat as non-match
|
|
271
|
-
regexMatches = false;
|
|
272
|
-
}
|
|
273
|
-
}
|
|
274
|
-
if (!regexMatches) {
|
|
275
|
-
return false;
|
|
276
|
-
}
|
|
277
|
-
}
|
|
278
|
-
}
|
|
279
|
-
else {
|
|
280
|
-
// Direct equality
|
|
281
|
-
if (fieldValue !== value) {
|
|
282
|
-
return false;
|
|
283
|
-
}
|
|
284
|
-
}
|
|
285
|
-
}
|
|
286
|
-
}
|
|
287
|
-
return true;
|
|
288
|
-
}
|
|
289
|
-
/**
|
|
290
|
-
* Calculate cosine similarity between two vectors
|
|
291
|
-
*/
|
|
292
|
-
cosineSimilarity(a, b) {
|
|
293
|
-
if (a.length !== b.length) {
|
|
294
|
-
return 0;
|
|
295
|
-
}
|
|
296
|
-
let dotProduct = 0;
|
|
297
|
-
let normA = 0;
|
|
298
|
-
let normB = 0;
|
|
299
|
-
for (let i = 0; i < a.length; i++) {
|
|
300
|
-
dotProduct += a[i] * b[i];
|
|
301
|
-
normA += a[i] * a[i];
|
|
302
|
-
normB += b[i] * b[i];
|
|
303
|
-
}
|
|
304
|
-
const denominator = Math.sqrt(normA) * Math.sqrt(normB);
|
|
305
|
-
return denominator === 0 ? 0 : dotProduct / denominator;
|
|
306
|
-
}
|
|
307
|
-
}
|
package/dist/client/rag/types.js
DELETED
|
@@ -1,377 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* NeuroLink SDK Tool Registration API
|
|
3
|
-
* Simple interface for developers to register custom tools
|
|
4
|
-
*/
|
|
5
|
-
import { logger } from "../utils/logger.js";
|
|
6
|
-
import { createMCPServerInfo } from "../utils/mcpDefaults.js";
|
|
7
|
-
import { validateToolName, validateToolDescription, } from "../utils/parameterValidation.js";
|
|
8
|
-
import { convertZodToJsonSchema, isZodSchema, } from "../utils/schemaConversion.js";
|
|
9
|
-
/**
|
|
10
|
-
* Configuration constants for tool validation
|
|
11
|
-
*/
|
|
12
|
-
const envDescValue = parseInt(process.env.NEUROLINK_TOOL_DESCRIPTION_MAX_LENGTH || "200", 10);
|
|
13
|
-
// Allow 0 to mean unlimited (no length restriction)
|
|
14
|
-
const DEFAULT_DESCRIPTION_MAX_LENGTH = Number.isInteger(envDescValue) && envDescValue >= 0 ? envDescValue : 200;
|
|
15
|
-
const envNameValue = parseInt(process.env.NEUROLINK_TOOL_NAME_MAX_LENGTH || "50", 10);
|
|
16
|
-
// Allow 0 to mean unlimited (no length restriction)
|
|
17
|
-
const DEFAULT_NAME_MAX_LENGTH = Number.isInteger(envNameValue) && envNameValue >= 0 ? envNameValue : 50;
|
|
18
|
-
/**
|
|
19
|
-
* Enhanced validation configuration
|
|
20
|
-
*/
|
|
21
|
-
const VALIDATION_CONFIG = {
|
|
22
|
-
// Tool name constraints
|
|
23
|
-
NAME_MIN_LENGTH: 2,
|
|
24
|
-
NAME_MAX_LENGTH: DEFAULT_NAME_MAX_LENGTH,
|
|
25
|
-
// Description constraints
|
|
26
|
-
DESCRIPTION_MIN_LENGTH: 10,
|
|
27
|
-
DESCRIPTION_MAX_LENGTH: DEFAULT_DESCRIPTION_MAX_LENGTH,
|
|
28
|
-
// Reserved tool names that cannot be used
|
|
29
|
-
RESERVED_NAMES: new Set([
|
|
30
|
-
"system",
|
|
31
|
-
"internal",
|
|
32
|
-
"core",
|
|
33
|
-
"ai",
|
|
34
|
-
"assistant",
|
|
35
|
-
"help",
|
|
36
|
-
"debug",
|
|
37
|
-
"test",
|
|
38
|
-
"mock",
|
|
39
|
-
"default",
|
|
40
|
-
"config",
|
|
41
|
-
"admin",
|
|
42
|
-
"root",
|
|
43
|
-
"neurolink",
|
|
44
|
-
]),
|
|
45
|
-
// Recommended tool name patterns
|
|
46
|
-
RECOMMENDED_PATTERNS: [
|
|
47
|
-
"get_data",
|
|
48
|
-
"fetch_info",
|
|
49
|
-
"calculate_value",
|
|
50
|
-
"send_message",
|
|
51
|
-
"create_item",
|
|
52
|
-
"update_record",
|
|
53
|
-
"delete_file",
|
|
54
|
-
"validate_input",
|
|
55
|
-
],
|
|
56
|
-
// Pre-compiled regex patterns for performance optimization
|
|
57
|
-
COMPILED_PATTERN_REGEXES: [
|
|
58
|
-
"get_data",
|
|
59
|
-
"fetch_info",
|
|
60
|
-
"calculate_value",
|
|
61
|
-
"send_message",
|
|
62
|
-
"create_item",
|
|
63
|
-
"update_record",
|
|
64
|
-
"delete_file",
|
|
65
|
-
"validate_input",
|
|
66
|
-
].map((pattern) => new RegExp(pattern.replace(/_/g, "[_-]"), "i")),
|
|
67
|
-
};
|
|
68
|
-
/**
|
|
69
|
-
* Creates a MCPServerInfo from a set of tools
|
|
70
|
-
*/
|
|
71
|
-
export function createMCPServerFromTools(serverId, tools, metadata) {
|
|
72
|
-
const mcpTools = [];
|
|
73
|
-
for (const [name, tool] of Object.entries(tools)) {
|
|
74
|
-
mcpTools.push({
|
|
75
|
-
name,
|
|
76
|
-
description: tool.description || name,
|
|
77
|
-
inputSchema: tool.parameters
|
|
78
|
-
? convertSchemaToJsonSchema(tool.parameters)
|
|
79
|
-
: {},
|
|
80
|
-
});
|
|
81
|
-
}
|
|
82
|
-
// SMART DEFAULTS: Use utility to eliminate manual MCPServerInfo creation
|
|
83
|
-
return createMCPServerInfo({
|
|
84
|
-
id: serverId,
|
|
85
|
-
name: metadata?.title || serverId,
|
|
86
|
-
tools: mcpTools,
|
|
87
|
-
description: metadata?.description || serverId,
|
|
88
|
-
category: metadata?.category,
|
|
89
|
-
// Detect category based on context if not provided
|
|
90
|
-
isExternal: metadata?.category === "external",
|
|
91
|
-
isBuiltIn: metadata?.category === "built-in",
|
|
92
|
-
isCustomTool: false,
|
|
93
|
-
});
|
|
94
|
-
}
|
|
95
|
-
/**
|
|
96
|
-
* Helper to convert schema parameters to JSON Schema format
|
|
97
|
-
*/
|
|
98
|
-
function convertSchemaToJsonSchema(schema) {
|
|
99
|
-
if (isZodSchema(schema)) {
|
|
100
|
-
return convertZodToJsonSchema(schema);
|
|
101
|
-
}
|
|
102
|
-
// If it's already a JSON Schema object, return as-is
|
|
103
|
-
if (schema && typeof schema === "object") {
|
|
104
|
-
return schema;
|
|
105
|
-
}
|
|
106
|
-
// Return empty object if no schema
|
|
107
|
-
return {};
|
|
108
|
-
}
|
|
109
|
-
/**
|
|
110
|
-
* Helper to create a tool with type safety
|
|
111
|
-
*/
|
|
112
|
-
export function createTool(config) {
|
|
113
|
-
return config;
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Helper to create a validated tool with suggested improvements
|
|
117
|
-
*/
|
|
118
|
-
export function createValidatedTool(name, config, options = {}) {
|
|
119
|
-
const { strict = true, suggestions = true } = options;
|
|
120
|
-
try {
|
|
121
|
-
// Validate the tool
|
|
122
|
-
validateTool(name, config);
|
|
123
|
-
// Provide helpful suggestions if enabled
|
|
124
|
-
if (suggestions) {
|
|
125
|
-
provideToolSuggestions(name, config);
|
|
126
|
-
}
|
|
127
|
-
logger.debug(`Tool '${name}' created and validated successfully`);
|
|
128
|
-
return config;
|
|
129
|
-
}
|
|
130
|
-
catch (error) {
|
|
131
|
-
if (strict) {
|
|
132
|
-
throw error;
|
|
133
|
-
}
|
|
134
|
-
// Log warning but continue in non-strict mode
|
|
135
|
-
logger.warn(`Tool '${name}' validation failed in non-strict mode`, {
|
|
136
|
-
error: error instanceof Error ? error.message : String(error),
|
|
137
|
-
});
|
|
138
|
-
return config;
|
|
139
|
-
}
|
|
140
|
-
}
|
|
141
|
-
/**
|
|
142
|
-
* Provide helpful suggestions for tool improvement
|
|
143
|
-
*/
|
|
144
|
-
function provideToolSuggestions(name, tool) {
|
|
145
|
-
const suggestions = [];
|
|
146
|
-
// Check for common improvements
|
|
147
|
-
if (!tool.parameters) {
|
|
148
|
-
suggestions.push("Consider adding a parameters schema using Zod for better type safety and validation");
|
|
149
|
-
}
|
|
150
|
-
if (!tool.metadata?.category) {
|
|
151
|
-
suggestions.push("Adding a category in metadata helps organize tools: { metadata: { category: 'data' } }");
|
|
152
|
-
}
|
|
153
|
-
if (!tool.metadata?.version) {
|
|
154
|
-
suggestions.push("Adding a version helps track tool updates: { metadata: { version: '1.0.0' } }");
|
|
155
|
-
}
|
|
156
|
-
// Check description quality
|
|
157
|
-
const description = tool.description.toLowerCase();
|
|
158
|
-
if (!description.includes("return") && !description.includes("result")) {
|
|
159
|
-
suggestions.push("Consider describing what the tool returns for better AI understanding");
|
|
160
|
-
}
|
|
161
|
-
if (suggestions.length > 0) {
|
|
162
|
-
logger.debug(`Tool '${name}' suggestions for improvement:`, {
|
|
163
|
-
suggestions: suggestions.slice(0, 3), // Limit to avoid spam
|
|
164
|
-
});
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Helper to create a tool with typed parameters
|
|
169
|
-
*/
|
|
170
|
-
export function createTypedTool(config) {
|
|
171
|
-
// Wrap the typed execute to match SimpleTool's signature.
|
|
172
|
-
// The Zod schema validates params at runtime, so the cast within the wrapper is safe.
|
|
173
|
-
const wrappedExecute = async (params, context) => {
|
|
174
|
-
const result = await config.execute(params, context);
|
|
175
|
-
return result;
|
|
176
|
-
};
|
|
177
|
-
return {
|
|
178
|
-
description: config.description,
|
|
179
|
-
parameters: config.parameters,
|
|
180
|
-
execute: wrappedExecute,
|
|
181
|
-
...(config.metadata && { metadata: config.metadata }),
|
|
182
|
-
};
|
|
183
|
-
}
|
|
184
|
-
/**
|
|
185
|
-
* Enhanced tool name validation using centralized utilities
|
|
186
|
-
*/
|
|
187
|
-
function validateToolNameLegacy(name) {
|
|
188
|
-
const error = validateToolName(name);
|
|
189
|
-
if (error) {
|
|
190
|
-
throw error;
|
|
191
|
-
}
|
|
192
|
-
// Additional legacy-specific validations
|
|
193
|
-
const trimmedName = name.trim();
|
|
194
|
-
// Naming convention suggestions using pre-compiled patterns for performance
|
|
195
|
-
const hasGoodPattern = VALIDATION_CONFIG.COMPILED_PATTERN_REGEXES.some((patternRegex) => {
|
|
196
|
-
return patternRegex.test(trimmedName);
|
|
197
|
-
});
|
|
198
|
-
if (!hasGoodPattern && trimmedName.length > 10) {
|
|
199
|
-
logger.debug(`Tool name '${name}' could follow recommended patterns for better clarity. ` +
|
|
200
|
-
`Consider patterns like: ${VALIDATION_CONFIG.RECOMMENDED_PATTERNS.slice(0, 4).join(", ")}`);
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
/**
|
|
204
|
-
* Enhanced description validation using centralized utilities
|
|
205
|
-
*/
|
|
206
|
-
function validateToolDescriptionLegacy(name, description) {
|
|
207
|
-
const error = validateToolDescription(description);
|
|
208
|
-
if (error) {
|
|
209
|
-
throw new Error(`Tool '${name}': ${error.message}`);
|
|
210
|
-
}
|
|
211
|
-
// Additional legacy-specific validations
|
|
212
|
-
const trimmedDescription = description.trim();
|
|
213
|
-
// Quality suggestions
|
|
214
|
-
const hasActionWord = /^(get|fetch|calculate|send|create|update|delete|validate|process|generate|parse|convert)/i.test(trimmedDescription);
|
|
215
|
-
if (!hasActionWord) {
|
|
216
|
-
logger.debug(`Tool '${name}' description could start with an action word (get, fetch, calculate, etc.) for better clarity: "${trimmedDescription.substring(0, 30)}..."`);
|
|
217
|
-
}
|
|
218
|
-
}
|
|
219
|
-
/**
|
|
220
|
-
* Validate tool configuration with detailed error messages
|
|
221
|
-
*/
|
|
222
|
-
export function validateTool(name, tool) {
|
|
223
|
-
// Enhanced tool name validation using centralized utilities
|
|
224
|
-
validateToolNameLegacy(name);
|
|
225
|
-
// Validate tool object
|
|
226
|
-
if (!tool || typeof tool !== "object") {
|
|
227
|
-
throw new Error(`Tool '${name}' must be an object with description and execute properties. Received: ${typeof tool}. ` +
|
|
228
|
-
`Expected format: { description: "Tool description", execute: async (params) => { ... } }`);
|
|
229
|
-
}
|
|
230
|
-
// Enhanced description validation using centralized utilities
|
|
231
|
-
validateToolDescriptionLegacy(name, tool.description);
|
|
232
|
-
// Validate execute function with signature guidance
|
|
233
|
-
if (typeof tool.execute !== "function") {
|
|
234
|
-
throw new Error(`Tool '${name}' must have an execute function. ` +
|
|
235
|
-
`Expected signature: async (params?: ToolArgs) => Promise<unknown>. ` +
|
|
236
|
-
`Received: ${typeof tool.execute}. ` +
|
|
237
|
-
`Example: { execute: async (params) => { return { success: true, data: result }; } }`);
|
|
238
|
-
}
|
|
239
|
-
// Check for common mistake: using 'schema' instead of 'parameters'
|
|
240
|
-
if ("schema" in tool && !("parameters" in tool)) {
|
|
241
|
-
throw new Error(`Tool '${name}' uses 'schema' property, but NeuroLink expects 'parameters'. ` +
|
|
242
|
-
`Please change 'schema' to 'parameters' and use a Zod schema: ` +
|
|
243
|
-
`{ parameters: z.object({ ... }), execute: ... } ` +
|
|
244
|
-
`See documentation: https://docs.neurolink.com/tools`);
|
|
245
|
-
}
|
|
246
|
-
// Validate parameters schema if provided - support both Zod and custom schemas
|
|
247
|
-
if (tool.parameters) {
|
|
248
|
-
if (typeof tool.parameters !== "object") {
|
|
249
|
-
throw new Error(`Tool '${name}' parameters must be an object. ` +
|
|
250
|
-
`Received: ${typeof tool.parameters}`);
|
|
251
|
-
}
|
|
252
|
-
// Check for common schema validation methods (Zod uses 'parse', others might use 'validate')
|
|
253
|
-
const params = tool.parameters;
|
|
254
|
-
const hasValidationMethod = typeof params.parse === "function" ||
|
|
255
|
-
typeof params.validate === "function" ||
|
|
256
|
-
"_def" in params; // Zod schemas have _def property
|
|
257
|
-
// Check for plain JSON schema objects (common mistake)
|
|
258
|
-
if ("type" in params && "properties" in params && !hasValidationMethod) {
|
|
259
|
-
throw new Error(`Tool '${name}' appears to use a plain JSON schema object as parameters. ` +
|
|
260
|
-
`NeuroLink requires a Zod schema for proper type validation and tool integration. ` +
|
|
261
|
-
`Please change from:\n` +
|
|
262
|
-
` { type: 'object', properties: { ... } }\n` +
|
|
263
|
-
`To:\n` +
|
|
264
|
-
` z.object({ fieldName: z.string() })\n` +
|
|
265
|
-
`Import Zod with: import { z } from 'zod'`);
|
|
266
|
-
}
|
|
267
|
-
if (!hasValidationMethod) {
|
|
268
|
-
const errorMessage = typeof params.parse === "function" || "_def" in params
|
|
269
|
-
? `Tool '${name}' has a Zod-like schema but validation failed. Ensure it's a valid Zod schema: z.object({ ... })`
|
|
270
|
-
: typeof params.validate === "function"
|
|
271
|
-
? `Tool '${name}' has a validate method but it may not be callable. Ensure: { parameters: { validate: (data) => { ... } } }`
|
|
272
|
-
: `Tool '${name}' parameters must be a schema object with validation. ` +
|
|
273
|
-
`Supported formats:\n` +
|
|
274
|
-
`• Zod schema: { parameters: z.object({ value: z.string() }) }\n` +
|
|
275
|
-
`• Custom schema: { parameters: { validate: (data) => { ... } } }\n` +
|
|
276
|
-
`• Custom schema: { parameters: { parse: (data) => { ... } } }`;
|
|
277
|
-
throw new Error(errorMessage);
|
|
278
|
-
}
|
|
279
|
-
}
|
|
280
|
-
// Validate metadata if provided
|
|
281
|
-
if (tool.metadata) {
|
|
282
|
-
if (typeof tool.metadata !== "object" || Array.isArray(tool.metadata)) {
|
|
283
|
-
throw new Error(`Tool '${name}' metadata must be an object. Received: ${typeof tool.metadata}. ` +
|
|
284
|
-
`Example: { category: "data", version: "1.0.0", author: "team@company.com" }`);
|
|
285
|
-
}
|
|
286
|
-
// Validate metadata fields
|
|
287
|
-
if (tool.metadata.version && typeof tool.metadata.version !== "string") {
|
|
288
|
-
throw new Error(`Tool '${name}' metadata.version must be a string. Received: ${typeof tool.metadata.version}. ` +
|
|
289
|
-
`Example: "1.0.0", "2.1.3-beta"`);
|
|
290
|
-
}
|
|
291
|
-
if (tool.metadata.category && typeof tool.metadata.category !== "string") {
|
|
292
|
-
throw new Error(`Tool '${name}' metadata.category must be a string. Received: ${typeof tool.metadata.category}. ` +
|
|
293
|
-
`Example: "data", "communication", "utility"`);
|
|
294
|
-
}
|
|
295
|
-
if (tool.metadata.tags && !Array.isArray(tool.metadata.tags)) {
|
|
296
|
-
throw new Error(`Tool '${name}' metadata.tags must be an array of strings. Received: ${typeof tool.metadata.tags}. ` +
|
|
297
|
-
`Example: ["api", "external", "web"]`);
|
|
298
|
-
}
|
|
299
|
-
}
|
|
300
|
-
// Success feedback for debugging
|
|
301
|
-
logger.debug(`Tool '${name}' validation passed`, {
|
|
302
|
-
nameLength: name.length,
|
|
303
|
-
descriptionLength: tool.description.length,
|
|
304
|
-
hasParameters: !!tool.parameters,
|
|
305
|
-
hasMetadata: !!tool.metadata,
|
|
306
|
-
});
|
|
307
|
-
}
|
|
308
|
-
/**
|
|
309
|
-
* Utility to validate multiple tools at once
|
|
310
|
-
*/
|
|
311
|
-
export function validateTools(tools) {
|
|
312
|
-
const valid = [];
|
|
313
|
-
const invalid = [];
|
|
314
|
-
for (const [name, tool] of Object.entries(tools)) {
|
|
315
|
-
try {
|
|
316
|
-
validateTool(name, tool);
|
|
317
|
-
valid.push(name);
|
|
318
|
-
}
|
|
319
|
-
catch (error) {
|
|
320
|
-
invalid.push({
|
|
321
|
-
name,
|
|
322
|
-
error: error instanceof Error ? error.message : String(error),
|
|
323
|
-
});
|
|
324
|
-
}
|
|
325
|
-
}
|
|
326
|
-
logger.debug(`Bulk validation completed`, {
|
|
327
|
-
validCount: valid.length,
|
|
328
|
-
invalidCount: invalid.length,
|
|
329
|
-
totalTools: Object.keys(tools).length,
|
|
330
|
-
});
|
|
331
|
-
return { valid, invalid };
|
|
332
|
-
}
|
|
333
|
-
/**
|
|
334
|
-
* Get validation configuration for external inspection
|
|
335
|
-
*/
|
|
336
|
-
export function getValidationConfig() {
|
|
337
|
-
return { ...VALIDATION_CONFIG };
|
|
338
|
-
}
|
|
339
|
-
/**
|
|
340
|
-
* Check if a tool name is available (not reserved)
|
|
341
|
-
*/
|
|
342
|
-
export function isToolNameAvailable(name) {
|
|
343
|
-
if (!name || typeof name !== "string") {
|
|
344
|
-
return false;
|
|
345
|
-
}
|
|
346
|
-
const trimmedName = name.trim().toLowerCase();
|
|
347
|
-
return (trimmedName.length >= VALIDATION_CONFIG.NAME_MIN_LENGTH &&
|
|
348
|
-
trimmedName.length <= VALIDATION_CONFIG.NAME_MAX_LENGTH &&
|
|
349
|
-
!VALIDATION_CONFIG.RESERVED_NAMES.has(trimmedName) &&
|
|
350
|
-
/^[a-zA-Z0-9_-]+$/.test(trimmedName));
|
|
351
|
-
}
|
|
352
|
-
/**
|
|
353
|
-
* Suggest alternative tool names if the provided name is invalid
|
|
354
|
-
*/
|
|
355
|
-
export function suggestToolNames(baseName) {
|
|
356
|
-
if (!baseName || typeof baseName !== "string") {
|
|
357
|
-
return VALIDATION_CONFIG.RECOMMENDED_PATTERNS.slice(0, 3);
|
|
358
|
-
}
|
|
359
|
-
const cleanBase = baseName.toLowerCase().replace(/[^a-z0-9]/g, "_");
|
|
360
|
-
const suggestions = [];
|
|
361
|
-
// Add suffixes if the name is reserved
|
|
362
|
-
if (VALIDATION_CONFIG.RESERVED_NAMES.has(cleanBase)) {
|
|
363
|
-
suggestions.push(`${cleanBase}_tool`, `custom_${cleanBase}`, `${cleanBase}_helper`);
|
|
364
|
-
}
|
|
365
|
-
// Add pattern-based suggestions
|
|
366
|
-
const patterns = ["get_", "fetch_", "create_", "update_"];
|
|
367
|
-
patterns.forEach((pattern) => {
|
|
368
|
-
if (!cleanBase.startsWith(pattern.slice(0, -1))) {
|
|
369
|
-
suggestions.push(`${pattern}${cleanBase}`);
|
|
370
|
-
}
|
|
371
|
-
});
|
|
372
|
-
// Add recommended patterns if no good suggestions
|
|
373
|
-
if (suggestions.length === 0) {
|
|
374
|
-
suggestions.push(...VALIDATION_CONFIG.RECOMMENDED_PATTERNS.slice(0, 3));
|
|
375
|
-
}
|
|
376
|
-
return suggestions.slice(0, 5); // Limit to 5 suggestions
|
|
377
|
-
}
|