@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,840 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Direct Tool Definitions for NeuroLink CLI Agent
|
|
3
|
-
* Simple, reliable tools that work immediately with Vercel AI SDK
|
|
4
|
-
*/
|
|
5
|
-
import { tool } from "ai";
|
|
6
|
-
import { z } from "zod";
|
|
7
|
-
import * as fs from "fs";
|
|
8
|
-
import * as path from "path";
|
|
9
|
-
import { execFile } from "child_process";
|
|
10
|
-
import { logger } from "../utils/logger.js";
|
|
11
|
-
import { VertexAI } from "@google-cloud/vertexai";
|
|
12
|
-
import { CSVProcessor } from "../utils/csvProcessor.js";
|
|
13
|
-
import { shouldEnableBashTool } from "../utils/toolUtils.js";
|
|
14
|
-
const MAX_OUTPUT_BYTES = 102400; // 100KB
|
|
15
|
-
function truncateOutput(output) {
|
|
16
|
-
if (output.length > MAX_OUTPUT_BYTES) {
|
|
17
|
-
return (output.slice(0, MAX_OUTPUT_BYTES) + "\n... [output truncated at 100KB]");
|
|
18
|
-
}
|
|
19
|
-
return output;
|
|
20
|
-
}
|
|
21
|
-
// Runtime Google Search tool creation - bypasses TypeScript strict typing
|
|
22
|
-
function createGoogleSearchTools() {
|
|
23
|
-
const searchTool = {};
|
|
24
|
-
// Dynamically assign google_search property at runtime
|
|
25
|
-
Object.defineProperty(searchTool, "google_search", {
|
|
26
|
-
value: {},
|
|
27
|
-
enumerable: true,
|
|
28
|
-
configurable: true,
|
|
29
|
-
});
|
|
30
|
-
return [searchTool];
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Direct tool definitions that work immediately with Gemini/AI SDK
|
|
34
|
-
* These bypass MCP complexity and provide reliable agent functionality
|
|
35
|
-
*/
|
|
36
|
-
export const directAgentTools = {
|
|
37
|
-
getCurrentTime: tool({
|
|
38
|
-
description: "Get the current date and time",
|
|
39
|
-
inputSchema: z.object({
|
|
40
|
-
timezone: z
|
|
41
|
-
.string()
|
|
42
|
-
.optional()
|
|
43
|
-
.describe('Timezone (e.g., "America/New_York", "Asia/Kolkata"). Defaults to system local time.'),
|
|
44
|
-
}),
|
|
45
|
-
execute: async ({ timezone }) => {
|
|
46
|
-
try {
|
|
47
|
-
const now = new Date();
|
|
48
|
-
if (timezone) {
|
|
49
|
-
return {
|
|
50
|
-
success: true,
|
|
51
|
-
time: now.toLocaleString("en-US", { timeZone: timezone }),
|
|
52
|
-
timezone: timezone,
|
|
53
|
-
iso: now.toISOString(),
|
|
54
|
-
};
|
|
55
|
-
}
|
|
56
|
-
return {
|
|
57
|
-
success: true,
|
|
58
|
-
time: now.toLocaleString(),
|
|
59
|
-
iso: now.toISOString(),
|
|
60
|
-
timestamp: now.getTime(),
|
|
61
|
-
};
|
|
62
|
-
}
|
|
63
|
-
catch (error) {
|
|
64
|
-
return {
|
|
65
|
-
success: false,
|
|
66
|
-
error: error instanceof Error ? error.message : String(error),
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
},
|
|
70
|
-
}),
|
|
71
|
-
readFile: tool({
|
|
72
|
-
description: "Read the contents of a file from the filesystem",
|
|
73
|
-
inputSchema: z.object({
|
|
74
|
-
path: z.string().describe("File path to read (relative or absolute)"),
|
|
75
|
-
}),
|
|
76
|
-
execute: async ({ path: filePath }) => {
|
|
77
|
-
try {
|
|
78
|
-
// Security check - prevent reading outside current directory for relative paths
|
|
79
|
-
const resolvedPath = path.resolve(filePath);
|
|
80
|
-
const cwd = process.cwd();
|
|
81
|
-
if (!resolvedPath.startsWith(cwd) && !path.isAbsolute(filePath)) {
|
|
82
|
-
return {
|
|
83
|
-
success: false,
|
|
84
|
-
error: `Access denied: Cannot read files outside current directory`,
|
|
85
|
-
};
|
|
86
|
-
}
|
|
87
|
-
const content = fs.readFileSync(resolvedPath, "utf-8");
|
|
88
|
-
const stats = fs.statSync(resolvedPath);
|
|
89
|
-
return {
|
|
90
|
-
success: true,
|
|
91
|
-
content,
|
|
92
|
-
size: stats.size,
|
|
93
|
-
path: resolvedPath,
|
|
94
|
-
lastModified: stats.mtime.toISOString(),
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
|
-
catch (error) {
|
|
98
|
-
return {
|
|
99
|
-
success: false,
|
|
100
|
-
error: error instanceof Error ? error.message : String(error),
|
|
101
|
-
path: filePath,
|
|
102
|
-
};
|
|
103
|
-
}
|
|
104
|
-
},
|
|
105
|
-
}),
|
|
106
|
-
listDirectory: tool({
|
|
107
|
-
description: "List files and directories in a specified directory",
|
|
108
|
-
inputSchema: z.object({
|
|
109
|
-
path: z
|
|
110
|
-
.string()
|
|
111
|
-
.describe("Directory path to list (relative or absolute)"),
|
|
112
|
-
includeHidden: z
|
|
113
|
-
.boolean()
|
|
114
|
-
.optional()
|
|
115
|
-
.default(false)
|
|
116
|
-
.describe("Include hidden files (starting with .)"),
|
|
117
|
-
}),
|
|
118
|
-
execute: async ({ path: dirPath, includeHidden }) => {
|
|
119
|
-
try {
|
|
120
|
-
const resolvedPath = path.resolve(dirPath);
|
|
121
|
-
const items = fs.readdirSync(resolvedPath);
|
|
122
|
-
const filteredItems = includeHidden
|
|
123
|
-
? items
|
|
124
|
-
: items.filter((item) => !item.startsWith("."));
|
|
125
|
-
const itemDetails = filteredItems.map((item) => {
|
|
126
|
-
const itemPath = path.join(resolvedPath, item);
|
|
127
|
-
const stats = fs.statSync(itemPath);
|
|
128
|
-
return {
|
|
129
|
-
name: item,
|
|
130
|
-
type: stats.isDirectory() ? "directory" : "file",
|
|
131
|
-
size: stats.isFile() ? stats.size : undefined,
|
|
132
|
-
lastModified: stats.mtime.toISOString(),
|
|
133
|
-
};
|
|
134
|
-
});
|
|
135
|
-
return {
|
|
136
|
-
success: true,
|
|
137
|
-
path: resolvedPath,
|
|
138
|
-
items: itemDetails,
|
|
139
|
-
count: itemDetails.length,
|
|
140
|
-
};
|
|
141
|
-
}
|
|
142
|
-
catch (error) {
|
|
143
|
-
return {
|
|
144
|
-
success: false,
|
|
145
|
-
error: error instanceof Error ? error.message : String(error),
|
|
146
|
-
path: dirPath,
|
|
147
|
-
};
|
|
148
|
-
}
|
|
149
|
-
},
|
|
150
|
-
}),
|
|
151
|
-
calculateMath: tool({
|
|
152
|
-
description: "Perform mathematical calculations safely",
|
|
153
|
-
inputSchema: z.object({
|
|
154
|
-
expression: z
|
|
155
|
-
.string()
|
|
156
|
-
.describe('Mathematical expression to evaluate (e.g., "2 + 2", "Math.sqrt(16)")'),
|
|
157
|
-
precision: z
|
|
158
|
-
.number()
|
|
159
|
-
.optional()
|
|
160
|
-
.describe("Number of decimal places for result")
|
|
161
|
-
.default(2),
|
|
162
|
-
}),
|
|
163
|
-
execute: async ({ expression, precision }) => {
|
|
164
|
-
try {
|
|
165
|
-
// Simple safe evaluation - only allow basic math operations
|
|
166
|
-
const sanitizedExpression = expression.replace(/[^0-9+\-*/().\s]/g, "");
|
|
167
|
-
if (sanitizedExpression !== expression) {
|
|
168
|
-
// Try Math functions for more complex operations
|
|
169
|
-
const allowedMathFunctions = [
|
|
170
|
-
"Math.abs",
|
|
171
|
-
"Math.ceil",
|
|
172
|
-
"Math.floor",
|
|
173
|
-
"Math.round",
|
|
174
|
-
"Math.sqrt",
|
|
175
|
-
"Math.pow",
|
|
176
|
-
"Math.sin",
|
|
177
|
-
"Math.cos",
|
|
178
|
-
"Math.tan",
|
|
179
|
-
"Math.log",
|
|
180
|
-
"Math.exp",
|
|
181
|
-
"Math.PI",
|
|
182
|
-
"Math.E",
|
|
183
|
-
];
|
|
184
|
-
let safeExpression = expression;
|
|
185
|
-
for (const func of allowedMathFunctions) {
|
|
186
|
-
safeExpression = safeExpression.replace(new RegExp(func, "g"), func);
|
|
187
|
-
}
|
|
188
|
-
// Remove remaining non-safe characters except Math functions
|
|
189
|
-
const mathSafe = /^[0-9+\-*/().\s]|Math\.(abs|ceil|floor|round|sqrt|pow|sin|cos|tan|log|exp|PI|E)/g;
|
|
190
|
-
if (!safeExpression
|
|
191
|
-
.split("")
|
|
192
|
-
.every((char) => mathSafe.test(char) ||
|
|
193
|
-
char === "(" ||
|
|
194
|
-
char === ")" ||
|
|
195
|
-
char === "," ||
|
|
196
|
-
char === " ")) {
|
|
197
|
-
return {
|
|
198
|
-
success: false,
|
|
199
|
-
error: `Unsafe expression: Only basic math operations and Math functions are allowed`,
|
|
200
|
-
};
|
|
201
|
-
}
|
|
202
|
-
}
|
|
203
|
-
// Use Function constructor for safe evaluation
|
|
204
|
-
const result = new Function(`'use strict'; return (${expression})`)();
|
|
205
|
-
const roundedResult = typeof result === "number"
|
|
206
|
-
? Number(result.toFixed(precision))
|
|
207
|
-
: result;
|
|
208
|
-
return {
|
|
209
|
-
success: true,
|
|
210
|
-
expression,
|
|
211
|
-
result: roundedResult,
|
|
212
|
-
type: typeof result,
|
|
213
|
-
};
|
|
214
|
-
}
|
|
215
|
-
catch (error) {
|
|
216
|
-
return {
|
|
217
|
-
success: false,
|
|
218
|
-
error: error instanceof Error ? error.message : String(error),
|
|
219
|
-
expression,
|
|
220
|
-
};
|
|
221
|
-
}
|
|
222
|
-
},
|
|
223
|
-
}),
|
|
224
|
-
writeFile: tool({
|
|
225
|
-
description: "Write content to a file (use with caution)",
|
|
226
|
-
inputSchema: z.object({
|
|
227
|
-
path: z.string().describe("File path to write to"),
|
|
228
|
-
content: z.string().describe("Content to write to the file"),
|
|
229
|
-
mode: z
|
|
230
|
-
.enum(["create", "overwrite", "append"])
|
|
231
|
-
.default("create")
|
|
232
|
-
.describe("Write mode"),
|
|
233
|
-
}),
|
|
234
|
-
execute: async ({ path: filePath, content, mode }) => {
|
|
235
|
-
try {
|
|
236
|
-
const resolvedPath = path.resolve(filePath);
|
|
237
|
-
const cwd = process.cwd();
|
|
238
|
-
// Security check
|
|
239
|
-
if (!resolvedPath.startsWith(cwd) && !path.isAbsolute(filePath)) {
|
|
240
|
-
return {
|
|
241
|
-
success: false,
|
|
242
|
-
error: `Access denied: Cannot write files outside current directory`,
|
|
243
|
-
};
|
|
244
|
-
}
|
|
245
|
-
// Check if file exists for create mode
|
|
246
|
-
if (mode === "create" && fs.existsSync(resolvedPath)) {
|
|
247
|
-
return {
|
|
248
|
-
success: false,
|
|
249
|
-
error: `File already exists. Use 'overwrite' or 'append' mode to modify existing files.`,
|
|
250
|
-
};
|
|
251
|
-
}
|
|
252
|
-
let finalContent = content;
|
|
253
|
-
if (mode === "append" && fs.existsSync(resolvedPath)) {
|
|
254
|
-
const existingContent = fs.readFileSync(resolvedPath, "utf-8");
|
|
255
|
-
finalContent = existingContent + content;
|
|
256
|
-
}
|
|
257
|
-
fs.writeFileSync(resolvedPath, finalContent, "utf-8");
|
|
258
|
-
const stats = fs.statSync(resolvedPath);
|
|
259
|
-
return {
|
|
260
|
-
success: true,
|
|
261
|
-
path: resolvedPath,
|
|
262
|
-
mode,
|
|
263
|
-
size: stats.size,
|
|
264
|
-
written: content.length,
|
|
265
|
-
};
|
|
266
|
-
}
|
|
267
|
-
catch (error) {
|
|
268
|
-
return {
|
|
269
|
-
success: false,
|
|
270
|
-
error: error instanceof Error ? error.message : String(error),
|
|
271
|
-
path: filePath,
|
|
272
|
-
};
|
|
273
|
-
}
|
|
274
|
-
},
|
|
275
|
-
}),
|
|
276
|
-
// NOTE: searchFiles was removed to avoid naming conflict with external MCP 'search_files' tool
|
|
277
|
-
// from @modelcontextprotocol/server-filesystem which provides the same functionality
|
|
278
|
-
// with parameters {path, pattern, excludePatterns}
|
|
279
|
-
analyzeCSV: tool({
|
|
280
|
-
description: "Analyze CSV file for accurate counting, aggregation, and statistical analysis. Use this for precise data operations like counting rows by column, calculating sums/averages, finding min/max values, etc. The tool reads the file directly - do NOT pass CSV content.",
|
|
281
|
-
inputSchema: z.object({
|
|
282
|
-
filePath: z
|
|
283
|
-
.string()
|
|
284
|
-
.refine((inputPath) => {
|
|
285
|
-
const resolvedPath = path.resolve(inputPath);
|
|
286
|
-
const normalizedPath = resolvedPath
|
|
287
|
-
.toLowerCase()
|
|
288
|
-
.replace(/\\/g, "/");
|
|
289
|
-
const sensitivePatterns = [
|
|
290
|
-
"/etc/",
|
|
291
|
-
"/sys/",
|
|
292
|
-
"/proc/",
|
|
293
|
-
"/dev/",
|
|
294
|
-
"/root/",
|
|
295
|
-
"/.ssh/",
|
|
296
|
-
"/private/etc/",
|
|
297
|
-
"/private/var/",
|
|
298
|
-
"c:/windows/",
|
|
299
|
-
"c:/program files/",
|
|
300
|
-
"c:/programdata/",
|
|
301
|
-
];
|
|
302
|
-
return !sensitivePatterns.some((pattern) => normalizedPath.startsWith(pattern));
|
|
303
|
-
}, {
|
|
304
|
-
message: "Invalid file path: access to system directories is not allowed",
|
|
305
|
-
})
|
|
306
|
-
.describe("Path to the CSV file to analyze (e.g., 'test/data.csv' or '/absolute/path/file.csv')"),
|
|
307
|
-
operation: z
|
|
308
|
-
.enum([
|
|
309
|
-
"count_by_column",
|
|
310
|
-
"sum_by_column",
|
|
311
|
-
"average_by_column",
|
|
312
|
-
"min_max_by_column",
|
|
313
|
-
"describe",
|
|
314
|
-
])
|
|
315
|
-
.describe("Type of analysis to perform"),
|
|
316
|
-
column: z
|
|
317
|
-
.string()
|
|
318
|
-
.optional()
|
|
319
|
-
.default("")
|
|
320
|
-
.describe("Column name for the operation (required for most operations)"),
|
|
321
|
-
maxRows: z
|
|
322
|
-
.number()
|
|
323
|
-
.optional()
|
|
324
|
-
.default(1000)
|
|
325
|
-
.describe("Maximum rows to process (default: 1000)"),
|
|
326
|
-
}),
|
|
327
|
-
execute: async ({ filePath, operation, column, maxRows = 1000 }) => {
|
|
328
|
-
const startTime = Date.now();
|
|
329
|
-
logger.info(`[analyzeCSV] 🚀 START: file=${filePath}, operation=${operation}, column=${column}, maxRows=${maxRows}`);
|
|
330
|
-
try {
|
|
331
|
-
// Resolve file path
|
|
332
|
-
logger.debug(`[analyzeCSV] Resolving file: ${filePath}`);
|
|
333
|
-
const path = await import("path");
|
|
334
|
-
// Resolve path (support both relative and absolute)
|
|
335
|
-
const resolvedPath = path.isAbsolute(filePath)
|
|
336
|
-
? filePath
|
|
337
|
-
: path.resolve(process.cwd(), filePath);
|
|
338
|
-
logger.debug(`[analyzeCSV] Resolved path: ${resolvedPath}`);
|
|
339
|
-
// Parse CSV using streaming from disk (memory efficient)
|
|
340
|
-
logger.info(`[analyzeCSV] Starting CSV parsing (max ${maxRows} rows)...`);
|
|
341
|
-
const rows = (await CSVProcessor.parseCSVFile(resolvedPath, maxRows));
|
|
342
|
-
logger.info(`[analyzeCSV] ✅ CSV parsing complete: ${rows.length} rows`);
|
|
343
|
-
if (rows.length === 0) {
|
|
344
|
-
logger.warn(`[analyzeCSV] No data rows found`);
|
|
345
|
-
return {
|
|
346
|
-
success: false,
|
|
347
|
-
error: "No data rows found in CSV",
|
|
348
|
-
};
|
|
349
|
-
}
|
|
350
|
-
// Log column names
|
|
351
|
-
const columnNames = rows.length > 0 ? Object.keys(rows[0]) : [];
|
|
352
|
-
logger.info(`[analyzeCSV] Found ${rows.length} rows with columns:`, columnNames);
|
|
353
|
-
logger.info(`[analyzeCSV] Executing operation: ${operation}`);
|
|
354
|
-
let result;
|
|
355
|
-
switch (operation) {
|
|
356
|
-
case "count_by_column": {
|
|
357
|
-
logger.info(`[analyzeCSV] count_by_column: column=${column}`);
|
|
358
|
-
if (!column) {
|
|
359
|
-
return {
|
|
360
|
-
success: false,
|
|
361
|
-
error: "Column name required for count_by_column operation",
|
|
362
|
-
};
|
|
363
|
-
}
|
|
364
|
-
// Count occurrences of each value in the column
|
|
365
|
-
const counts = {};
|
|
366
|
-
logger.debug(`[analyzeCSV] Counting rows...`);
|
|
367
|
-
for (const row of rows) {
|
|
368
|
-
const value = row[column];
|
|
369
|
-
if (value !== undefined) {
|
|
370
|
-
counts[value] = (counts[value] || 0) + 1;
|
|
371
|
-
}
|
|
372
|
-
}
|
|
373
|
-
logger.debug(`[analyzeCSV] Found ${Object.keys(counts).length} unique values`);
|
|
374
|
-
// Sort by count descending
|
|
375
|
-
logger.debug(`[analyzeCSV] Sorting results...`);
|
|
376
|
-
result = Object.fromEntries(Object.entries(counts).sort(([, a], [, b]) => b - a));
|
|
377
|
-
logger.info(`[analyzeCSV] ✅ count_by_column complete. Result:`, result);
|
|
378
|
-
break;
|
|
379
|
-
}
|
|
380
|
-
case "sum_by_column": {
|
|
381
|
-
logger.info(`[analyzeCSV] sum_by_column: column=${column}`);
|
|
382
|
-
if (!column) {
|
|
383
|
-
return {
|
|
384
|
-
success: false,
|
|
385
|
-
error: "Column name required for sum_by_column operation",
|
|
386
|
-
};
|
|
387
|
-
}
|
|
388
|
-
// Sum numeric values from the target column itself for each group
|
|
389
|
-
const groups = {};
|
|
390
|
-
logger.debug(`[analyzeCSV] Grouping and summing ${rows.length} rows...`);
|
|
391
|
-
let processedRows = 0;
|
|
392
|
-
let totalNumericValuesFound = 0;
|
|
393
|
-
for (const row of rows) {
|
|
394
|
-
const key = row[column];
|
|
395
|
-
if (!key) {
|
|
396
|
-
continue;
|
|
397
|
-
}
|
|
398
|
-
// Parse numeric value from the target column
|
|
399
|
-
const value = row[column];
|
|
400
|
-
if (value === undefined || value === null || value === "") {
|
|
401
|
-
continue;
|
|
402
|
-
}
|
|
403
|
-
const num = parseFloat(value);
|
|
404
|
-
if (isNaN(num)) {
|
|
405
|
-
continue;
|
|
406
|
-
}
|
|
407
|
-
if (!groups[key]) {
|
|
408
|
-
groups[key] = 0;
|
|
409
|
-
}
|
|
410
|
-
groups[key] += num;
|
|
411
|
-
totalNumericValuesFound++;
|
|
412
|
-
processedRows++;
|
|
413
|
-
if (processedRows % 10 === 0) {
|
|
414
|
-
logger.debug(`[analyzeCSV] Processed ${processedRows}/${rows.length} rows`);
|
|
415
|
-
}
|
|
416
|
-
}
|
|
417
|
-
// Fail fast if no numeric data found in the requested column
|
|
418
|
-
if (totalNumericValuesFound === 0) {
|
|
419
|
-
return {
|
|
420
|
-
success: false,
|
|
421
|
-
error: `No numeric data found in column "${column}" for sum_by_column operation`,
|
|
422
|
-
};
|
|
423
|
-
}
|
|
424
|
-
logger.debug(`[analyzeCSV] Calculated sums for ${Object.keys(groups).length} groups (${totalNumericValuesFound} numeric values)`);
|
|
425
|
-
result = groups;
|
|
426
|
-
logger.info(`[analyzeCSV] ✅ sum_by_column complete`);
|
|
427
|
-
break;
|
|
428
|
-
}
|
|
429
|
-
case "average_by_column": {
|
|
430
|
-
logger.info(`[analyzeCSV] average_by_column: column=${column}`);
|
|
431
|
-
if (!column) {
|
|
432
|
-
return {
|
|
433
|
-
success: false,
|
|
434
|
-
error: "Column name required for average_by_column operation",
|
|
435
|
-
};
|
|
436
|
-
}
|
|
437
|
-
// Average numeric values from the target column itself for each group
|
|
438
|
-
const groups = {};
|
|
439
|
-
logger.debug(`[analyzeCSV] Grouping and averaging ${rows.length} rows...`);
|
|
440
|
-
let processedRows = 0;
|
|
441
|
-
let totalNumericValuesFound = 0;
|
|
442
|
-
for (const row of rows) {
|
|
443
|
-
const key = row[column];
|
|
444
|
-
if (!key) {
|
|
445
|
-
continue;
|
|
446
|
-
}
|
|
447
|
-
// Parse numeric value from the target column
|
|
448
|
-
const value = row[column];
|
|
449
|
-
if (value === undefined || value === null || value === "") {
|
|
450
|
-
continue;
|
|
451
|
-
}
|
|
452
|
-
const num = parseFloat(value);
|
|
453
|
-
if (isNaN(num)) {
|
|
454
|
-
continue;
|
|
455
|
-
}
|
|
456
|
-
if (!groups[key]) {
|
|
457
|
-
groups[key] = { sum: 0, count: 0 };
|
|
458
|
-
}
|
|
459
|
-
groups[key].sum += num;
|
|
460
|
-
groups[key].count++;
|
|
461
|
-
totalNumericValuesFound++;
|
|
462
|
-
processedRows++;
|
|
463
|
-
if (processedRows % 10 === 0) {
|
|
464
|
-
logger.debug(`[analyzeCSV] Processed ${processedRows}/${rows.length} rows`);
|
|
465
|
-
}
|
|
466
|
-
}
|
|
467
|
-
// Fail fast if no numeric data found in the requested column
|
|
468
|
-
if (totalNumericValuesFound === 0) {
|
|
469
|
-
return {
|
|
470
|
-
success: false,
|
|
471
|
-
error: `No numeric data found in column "${column}" for average_by_column operation`,
|
|
472
|
-
};
|
|
473
|
-
}
|
|
474
|
-
logger.debug(`[analyzeCSV] Calculated averages for ${Object.keys(groups).length} groups (${totalNumericValuesFound} numeric values)`);
|
|
475
|
-
result = Object.fromEntries(Object.entries(groups).map(([k, v]) => [
|
|
476
|
-
k,
|
|
477
|
-
v.count > 0 ? v.sum / v.count : 0,
|
|
478
|
-
]));
|
|
479
|
-
logger.info(`[analyzeCSV] ✅ average_by_column complete`);
|
|
480
|
-
break;
|
|
481
|
-
}
|
|
482
|
-
case "min_max_by_column": {
|
|
483
|
-
if (!column) {
|
|
484
|
-
return {
|
|
485
|
-
success: false,
|
|
486
|
-
error: "Column name required for min_max_by_column operation",
|
|
487
|
-
};
|
|
488
|
-
}
|
|
489
|
-
const values = rows
|
|
490
|
-
.map((row) => row[column])
|
|
491
|
-
.filter((v) => v !== undefined && v !== "");
|
|
492
|
-
const numericValues = values
|
|
493
|
-
.map((v) => parseFloat(v))
|
|
494
|
-
.filter((n) => !isNaN(n));
|
|
495
|
-
if (numericValues.length === 0) {
|
|
496
|
-
return {
|
|
497
|
-
success: false,
|
|
498
|
-
error: `No numeric data found in column "${column}" for min_max_by_column operation`,
|
|
499
|
-
};
|
|
500
|
-
}
|
|
501
|
-
result = {
|
|
502
|
-
min: Math.min(...numericValues),
|
|
503
|
-
max: Math.max(...numericValues),
|
|
504
|
-
numericCount: numericValues.length,
|
|
505
|
-
totalCount: values.length,
|
|
506
|
-
};
|
|
507
|
-
break;
|
|
508
|
-
}
|
|
509
|
-
case "describe": {
|
|
510
|
-
const columnNames = rows.length > 0 ? Object.keys(rows[0]) : [];
|
|
511
|
-
result = {
|
|
512
|
-
total_rows: rows.length,
|
|
513
|
-
columns: columnNames,
|
|
514
|
-
column_count: columnNames.length,
|
|
515
|
-
};
|
|
516
|
-
break;
|
|
517
|
-
}
|
|
518
|
-
default:
|
|
519
|
-
return {
|
|
520
|
-
success: false,
|
|
521
|
-
error: `Unknown operation: ${operation}`,
|
|
522
|
-
};
|
|
523
|
-
}
|
|
524
|
-
const duration = Date.now() - startTime;
|
|
525
|
-
logger.info(`[analyzeCSV] 🏁 COMPLETE: ${operation} took ${duration}ms`);
|
|
526
|
-
const response = {
|
|
527
|
-
success: true,
|
|
528
|
-
operation,
|
|
529
|
-
column,
|
|
530
|
-
result: JSON.stringify(result, null, 2),
|
|
531
|
-
rowCount: rows.length,
|
|
532
|
-
};
|
|
533
|
-
logger.debug(`[analyzeCSV] 📤 RETURNING TO LLM:`, JSON.stringify(response, null, 2));
|
|
534
|
-
return response;
|
|
535
|
-
}
|
|
536
|
-
catch (error) {
|
|
537
|
-
return {
|
|
538
|
-
success: false,
|
|
539
|
-
error: error instanceof Error ? error.message : String(error),
|
|
540
|
-
operation,
|
|
541
|
-
column,
|
|
542
|
-
};
|
|
543
|
-
}
|
|
544
|
-
},
|
|
545
|
-
}),
|
|
546
|
-
// NOTE: executeBashCommand was moved to a separate opt-in export (bashTool) for security.
|
|
547
|
-
// It is only included in directAgentTools when NEUROLINK_ENABLE_BASH_TOOL=true or
|
|
548
|
-
// toolConfig.enableBashTool is explicitly set to true. See shouldEnableBashTool() in toolUtils.ts.
|
|
549
|
-
websearchGrounding: tool({
|
|
550
|
-
description: "Search the web for current information using Google Search grounding. Returns raw search data for AI processing.",
|
|
551
|
-
inputSchema: z.object({
|
|
552
|
-
query: z.string().describe("Search query to find information about"),
|
|
553
|
-
maxResults: z
|
|
554
|
-
.number()
|
|
555
|
-
.optional()
|
|
556
|
-
.default(3)
|
|
557
|
-
.describe("Maximum number of search results to return (1-5)"),
|
|
558
|
-
maxWords: z
|
|
559
|
-
.number()
|
|
560
|
-
.optional()
|
|
561
|
-
.default(50)
|
|
562
|
-
.describe("Maximum number of words in the response 50"),
|
|
563
|
-
}),
|
|
564
|
-
execute: async ({ query, maxResults = 3, maxWords = 50 }) => {
|
|
565
|
-
try {
|
|
566
|
-
const hasCredentials = process.env.GOOGLE_APPLICATION_CREDENTIALS;
|
|
567
|
-
const hasProjectId = process.env.GOOGLE_VERTEX_PROJECT;
|
|
568
|
-
const projectLocation = process.env.GOOGLE_VERTEX_LOCATION || "us-central1";
|
|
569
|
-
if (!hasCredentials || !hasProjectId) {
|
|
570
|
-
return {
|
|
571
|
-
success: false,
|
|
572
|
-
error: "Google Vertex AI credentials not configured. Please set GOOGLE_APPLICATION_CREDENTIALS and GOOGLE_VERTEX_PROJECT environment variables.",
|
|
573
|
-
requiredEnvVars: [
|
|
574
|
-
"GOOGLE_APPLICATION_CREDENTIALS",
|
|
575
|
-
"GOOGLE_VERTEX_PROJECT",
|
|
576
|
-
],
|
|
577
|
-
};
|
|
578
|
-
}
|
|
579
|
-
const limitedResults = Math.min(Math.max(maxResults, 1), 5);
|
|
580
|
-
const vertex_ai = new VertexAI({
|
|
581
|
-
project: hasProjectId,
|
|
582
|
-
location: projectLocation,
|
|
583
|
-
});
|
|
584
|
-
const websearchModel = "gemini-2.5-flash-lite";
|
|
585
|
-
const model = vertex_ai.getGenerativeModel({
|
|
586
|
-
model: websearchModel,
|
|
587
|
-
tools: createGoogleSearchTools(),
|
|
588
|
-
});
|
|
589
|
-
// Search query with word limit constraint
|
|
590
|
-
const searchPrompt = `Search for: "${query}". Provide a concise summary in no more than ${maxWords} words.`;
|
|
591
|
-
const startTime = Date.now();
|
|
592
|
-
const response = await model.generateContent({
|
|
593
|
-
contents: [
|
|
594
|
-
{
|
|
595
|
-
role: "user",
|
|
596
|
-
parts: [{ text: searchPrompt }],
|
|
597
|
-
},
|
|
598
|
-
],
|
|
599
|
-
});
|
|
600
|
-
const responseTime = Date.now() - startTime;
|
|
601
|
-
// Extract grounding metadata and search results
|
|
602
|
-
const result = response.response;
|
|
603
|
-
const candidates = result.candidates;
|
|
604
|
-
if (!candidates || candidates.length === 0) {
|
|
605
|
-
return {
|
|
606
|
-
success: false,
|
|
607
|
-
error: "No search results returned",
|
|
608
|
-
query,
|
|
609
|
-
};
|
|
610
|
-
}
|
|
611
|
-
const content = candidates[0].content;
|
|
612
|
-
if (!content || !content.parts || content.parts.length === 0) {
|
|
613
|
-
return {
|
|
614
|
-
success: false,
|
|
615
|
-
error: "No search content found",
|
|
616
|
-
query,
|
|
617
|
-
};
|
|
618
|
-
}
|
|
619
|
-
// Extract raw search content
|
|
620
|
-
const searchContent = content.parts[0].text || "";
|
|
621
|
-
// Extract grounding sources if available
|
|
622
|
-
const groundingMetadata = candidates[0]?.groundingMetadata;
|
|
623
|
-
const searchResults = [];
|
|
624
|
-
if (groundingMetadata?.groundingChunks) {
|
|
625
|
-
for (const chunk of groundingMetadata.groundingChunks.slice(0, limitedResults)) {
|
|
626
|
-
if (chunk.web) {
|
|
627
|
-
searchResults.push({
|
|
628
|
-
title: chunk.web.title || "No title",
|
|
629
|
-
url: chunk.web.uri || "",
|
|
630
|
-
snippet: searchContent, // Use full content since maxWords already limits length
|
|
631
|
-
domain: chunk.web.uri
|
|
632
|
-
? new URL(chunk.web.uri).hostname
|
|
633
|
-
: "unknown",
|
|
634
|
-
});
|
|
635
|
-
}
|
|
636
|
-
}
|
|
637
|
-
}
|
|
638
|
-
// If no grounding metadata, create basic result structure
|
|
639
|
-
if (searchResults.length === 0) {
|
|
640
|
-
searchResults.push({
|
|
641
|
-
title: `Search results for: ${query}`,
|
|
642
|
-
url: "",
|
|
643
|
-
snippet: searchContent,
|
|
644
|
-
domain: "google-search",
|
|
645
|
-
});
|
|
646
|
-
}
|
|
647
|
-
return {
|
|
648
|
-
success: true,
|
|
649
|
-
query,
|
|
650
|
-
searchResults,
|
|
651
|
-
rawContent: searchContent,
|
|
652
|
-
totalResults: searchResults.length,
|
|
653
|
-
provider: "google-search-grounding",
|
|
654
|
-
model: websearchModel,
|
|
655
|
-
responseTime,
|
|
656
|
-
timestamp: startTime,
|
|
657
|
-
grounded: true,
|
|
658
|
-
};
|
|
659
|
-
}
|
|
660
|
-
catch (error) {
|
|
661
|
-
logger.error("Web search grounding error:", error);
|
|
662
|
-
return {
|
|
663
|
-
success: false,
|
|
664
|
-
error: error instanceof Error ? error.message : String(error),
|
|
665
|
-
query,
|
|
666
|
-
provider: "google-search-grounding",
|
|
667
|
-
};
|
|
668
|
-
}
|
|
669
|
-
},
|
|
670
|
-
}),
|
|
671
|
-
};
|
|
672
|
-
/**
|
|
673
|
-
* Bash command execution tool - exported separately for opt-in use.
|
|
674
|
-
*
|
|
675
|
-
* SECURITY: This tool is NOT included in directAgentTools by default.
|
|
676
|
-
* It must be explicitly enabled via:
|
|
677
|
-
* - Environment variable: NEUROLINK_ENABLE_BASH_TOOL=true
|
|
678
|
-
* - Config: toolConfig.enableBashTool = true
|
|
679
|
-
*
|
|
680
|
-
* Import this directly when you need bash execution capabilities:
|
|
681
|
-
* import { bashTool } from '../agent/directTools.js';
|
|
682
|
-
*/
|
|
683
|
-
export const bashTool = tool({
|
|
684
|
-
description: "Execute a bash/shell command and return stdout, stderr, and exit code. Supports full shell syntax including pipes, redirects, and variable expansion. Requires HITL confirmation when enabled.",
|
|
685
|
-
inputSchema: z.object({
|
|
686
|
-
command: z
|
|
687
|
-
.string()
|
|
688
|
-
.describe("The shell command to execute (supports pipes, redirects, etc.)"),
|
|
689
|
-
timeout: z
|
|
690
|
-
.number()
|
|
691
|
-
.optional()
|
|
692
|
-
.default(30000)
|
|
693
|
-
.describe("Timeout in milliseconds (default: 30000, max: 120000)"),
|
|
694
|
-
cwd: z
|
|
695
|
-
.string()
|
|
696
|
-
.optional()
|
|
697
|
-
.describe("Working directory (defaults to process.cwd())"),
|
|
698
|
-
}),
|
|
699
|
-
execute: async ({ command, timeout = 30000, cwd }) => {
|
|
700
|
-
try {
|
|
701
|
-
const effectiveTimeout = Math.min(Math.max(timeout, 100), 120000);
|
|
702
|
-
const resolvedCwd = cwd ? path.resolve(cwd) : process.cwd();
|
|
703
|
-
const currentCwd = process.cwd();
|
|
704
|
-
// Verify cwd exists before resolving symlinks
|
|
705
|
-
if (!fs.existsSync(resolvedCwd) ||
|
|
706
|
-
!fs.statSync(resolvedCwd).isDirectory()) {
|
|
707
|
-
return {
|
|
708
|
-
success: false,
|
|
709
|
-
code: -1,
|
|
710
|
-
stdout: "",
|
|
711
|
-
stderr: "",
|
|
712
|
-
error: `Directory does not exist: ${resolvedCwd}`,
|
|
713
|
-
};
|
|
714
|
-
}
|
|
715
|
-
// Security: resolve symlinks and prevent execution outside current directory
|
|
716
|
-
try {
|
|
717
|
-
const realCwd = fs.realpathSync(currentCwd);
|
|
718
|
-
const realResolvedCwd = fs.realpathSync(resolvedCwd);
|
|
719
|
-
if (!realResolvedCwd.startsWith(realCwd)) {
|
|
720
|
-
return {
|
|
721
|
-
success: false,
|
|
722
|
-
code: -1,
|
|
723
|
-
stdout: "",
|
|
724
|
-
stderr: "",
|
|
725
|
-
error: "Access denied: Cannot execute commands outside current directory",
|
|
726
|
-
};
|
|
727
|
-
}
|
|
728
|
-
}
|
|
729
|
-
catch {
|
|
730
|
-
return {
|
|
731
|
-
success: false,
|
|
732
|
-
code: -1,
|
|
733
|
-
stdout: "",
|
|
734
|
-
stderr: "",
|
|
735
|
-
error: "Access denied: Cannot resolve directory path",
|
|
736
|
-
};
|
|
737
|
-
}
|
|
738
|
-
// Use /bin/bash -c to support full shell syntax (pipes, redirects, etc.)
|
|
739
|
-
return await new Promise((resolve) => {
|
|
740
|
-
execFile("/bin/bash", ["-c", command], {
|
|
741
|
-
timeout: effectiveTimeout,
|
|
742
|
-
cwd: resolvedCwd,
|
|
743
|
-
maxBuffer: MAX_OUTPUT_BYTES,
|
|
744
|
-
}, (error, stdout, stderr) => {
|
|
745
|
-
if (error) {
|
|
746
|
-
const exitCode = typeof error.code === "number" ? error.code : 1;
|
|
747
|
-
resolve({
|
|
748
|
-
success: false,
|
|
749
|
-
code: exitCode,
|
|
750
|
-
stdout: truncateOutput(stdout || ""),
|
|
751
|
-
stderr: truncateOutput(stderr || error.message),
|
|
752
|
-
error: error.killed ? "Command timed out" : error.message,
|
|
753
|
-
});
|
|
754
|
-
}
|
|
755
|
-
else {
|
|
756
|
-
resolve({
|
|
757
|
-
success: true,
|
|
758
|
-
code: 0,
|
|
759
|
-
stdout: truncateOutput(stdout),
|
|
760
|
-
stderr: truncateOutput(stderr),
|
|
761
|
-
});
|
|
762
|
-
}
|
|
763
|
-
});
|
|
764
|
-
});
|
|
765
|
-
}
|
|
766
|
-
catch (error) {
|
|
767
|
-
return {
|
|
768
|
-
success: false,
|
|
769
|
-
code: -1,
|
|
770
|
-
stdout: "",
|
|
771
|
-
stderr: "",
|
|
772
|
-
error: error instanceof Error ? error.message : String(error),
|
|
773
|
-
};
|
|
774
|
-
}
|
|
775
|
-
},
|
|
776
|
-
});
|
|
777
|
-
// Conditionally inject executeBashCommand into directAgentTools when opted in.
|
|
778
|
-
// This ensures the tool is only available to SDK consumers who explicitly enable it.
|
|
779
|
-
if (shouldEnableBashTool()) {
|
|
780
|
-
directAgentTools.executeBashCommand = bashTool;
|
|
781
|
-
}
|
|
782
|
-
// eslint-disable-next-line no-redeclare
|
|
783
|
-
export function getToolsForCategory(category = "all") {
|
|
784
|
-
switch (category) {
|
|
785
|
-
case "basic":
|
|
786
|
-
return {
|
|
787
|
-
getCurrentTime: directAgentTools.getCurrentTime,
|
|
788
|
-
calculateMath: directAgentTools.calculateMath,
|
|
789
|
-
};
|
|
790
|
-
case "filesystem":
|
|
791
|
-
return {
|
|
792
|
-
readFile: directAgentTools.readFile,
|
|
793
|
-
listDirectory: directAgentTools.listDirectory,
|
|
794
|
-
writeFile: directAgentTools.writeFile,
|
|
795
|
-
};
|
|
796
|
-
case "utility":
|
|
797
|
-
return {
|
|
798
|
-
getCurrentTime: directAgentTools.getCurrentTime,
|
|
799
|
-
calculateMath: directAgentTools.calculateMath,
|
|
800
|
-
listDirectory: directAgentTools.listDirectory,
|
|
801
|
-
};
|
|
802
|
-
case "all":
|
|
803
|
-
default:
|
|
804
|
-
return directAgentTools;
|
|
805
|
-
}
|
|
806
|
-
}
|
|
807
|
-
/**
|
|
808
|
-
* Get tool names for validation
|
|
809
|
-
*/
|
|
810
|
-
export function getAvailableToolNames() {
|
|
811
|
-
return Object.keys(directAgentTools);
|
|
812
|
-
}
|
|
813
|
-
/**
|
|
814
|
-
* Validate that all tools have proper structure
|
|
815
|
-
*/
|
|
816
|
-
export function validateToolStructure() {
|
|
817
|
-
try {
|
|
818
|
-
for (const [name, tool] of Object.entries(directAgentTools)) {
|
|
819
|
-
if (!tool.description || typeof tool.description !== "string") {
|
|
820
|
-
logger.error(`❌ Tool ${name} missing description`);
|
|
821
|
-
return false;
|
|
822
|
-
}
|
|
823
|
-
const toolRecord = tool;
|
|
824
|
-
if (!toolRecord.parameters && !toolRecord.inputSchema) {
|
|
825
|
-
logger.error(`Tool ${name} missing parameters/inputSchema`);
|
|
826
|
-
return false;
|
|
827
|
-
}
|
|
828
|
-
if (!tool.execute || typeof tool.execute !== "function") {
|
|
829
|
-
logger.error(`❌ Tool ${name} missing execute function`);
|
|
830
|
-
return false;
|
|
831
|
-
}
|
|
832
|
-
}
|
|
833
|
-
logger.info("✅ All tools have valid structure");
|
|
834
|
-
return true;
|
|
835
|
-
}
|
|
836
|
-
catch (error) {
|
|
837
|
-
logger.error("❌ Tool validation failed:", error);
|
|
838
|
-
return false;
|
|
839
|
-
}
|
|
840
|
-
}
|