@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,350 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Memory Routes
|
|
3
|
-
* Endpoints for conversation memory management
|
|
4
|
-
*/
|
|
5
|
-
import { createErrorResponse, IdParamSchema, SessionIdParamSchema, validateParams, } from "../utils/validation.js";
|
|
6
|
-
/**
|
|
7
|
-
* Handler: Get messages for a session
|
|
8
|
-
*/
|
|
9
|
-
async function handleGetSessionMessages(ctx) {
|
|
10
|
-
// Validate path params
|
|
11
|
-
const paramValidation = validateParams(IdParamSchema, ctx.params, ctx.requestId);
|
|
12
|
-
if (!paramValidation.success) {
|
|
13
|
-
return paramValidation.error;
|
|
14
|
-
}
|
|
15
|
-
const { id: sessionId } = paramValidation.data;
|
|
16
|
-
// Parse query params for pagination
|
|
17
|
-
const limitParam = ctx.query.limit ? parseInt(ctx.query.limit, 10) : 50;
|
|
18
|
-
const offsetParam = ctx.query.offset ? parseInt(ctx.query.offset, 10) : 0;
|
|
19
|
-
// Validate pagination params
|
|
20
|
-
const limit = isNaN(limitParam) || limitParam < 1 ? 50 : Math.min(limitParam, 100);
|
|
21
|
-
const offset = isNaN(offsetParam) || offsetParam < 0 ? 0 : offsetParam;
|
|
22
|
-
const memory = ctx.neurolink.conversationMemory;
|
|
23
|
-
if (!memory) {
|
|
24
|
-
return createErrorResponse("MEMORY_UNAVAILABLE", "Conversation memory not available", undefined, ctx.requestId);
|
|
25
|
-
}
|
|
26
|
-
try {
|
|
27
|
-
let messages = [];
|
|
28
|
-
// Handle Redis memory manager (has getUserSessionHistory)
|
|
29
|
-
if ("getUserSessionHistory" in memory) {
|
|
30
|
-
// For Redis, we need a userId - check query params or use a default
|
|
31
|
-
const userId = ctx.query.userId || "default";
|
|
32
|
-
const sessionMessages = await memory.getUserSessionHistory(userId, sessionId);
|
|
33
|
-
if (sessionMessages === null) {
|
|
34
|
-
return createErrorResponse("SESSION_NOT_FOUND", `Session '${sessionId}' not found`, undefined, ctx.requestId);
|
|
35
|
-
}
|
|
36
|
-
messages = sessionMessages;
|
|
37
|
-
}
|
|
38
|
-
// Handle in-memory manager (has getSession)
|
|
39
|
-
else if ("getSession" in memory) {
|
|
40
|
-
const session = memory.getSession(sessionId);
|
|
41
|
-
if (!session) {
|
|
42
|
-
return createErrorResponse("SESSION_NOT_FOUND", `Session '${sessionId}' not found`, undefined, ctx.requestId);
|
|
43
|
-
}
|
|
44
|
-
messages = session.messages;
|
|
45
|
-
}
|
|
46
|
-
// Fallback: try buildContextMessages if available
|
|
47
|
-
else if ("buildContextMessages" in memory) {
|
|
48
|
-
messages = await memory.buildContextMessages(sessionId);
|
|
49
|
-
// If no messages, session might not exist
|
|
50
|
-
if (messages.length === 0) {
|
|
51
|
-
return createErrorResponse("SESSION_NOT_FOUND", `Session '${sessionId}' not found or has no messages`, undefined, ctx.requestId);
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
const total = messages.length;
|
|
55
|
-
const paginatedMessages = messages.slice(offset, offset + limit);
|
|
56
|
-
return {
|
|
57
|
-
sessionId,
|
|
58
|
-
messages: paginatedMessages,
|
|
59
|
-
total,
|
|
60
|
-
limit,
|
|
61
|
-
offset,
|
|
62
|
-
metadata: {
|
|
63
|
-
timestamp: new Date().toISOString(),
|
|
64
|
-
requestId: ctx.requestId,
|
|
65
|
-
},
|
|
66
|
-
};
|
|
67
|
-
}
|
|
68
|
-
catch (error) {
|
|
69
|
-
return createErrorResponse("MEMORY_ERROR", error instanceof Error ? error.message : "Failed to get session messages", undefined, ctx.requestId);
|
|
70
|
-
}
|
|
71
|
-
}
|
|
72
|
-
/**
|
|
73
|
-
* Handler: Get session by ID
|
|
74
|
-
*/
|
|
75
|
-
async function handleGetSession(ctx) {
|
|
76
|
-
// Validate path params
|
|
77
|
-
const paramValidation = validateParams(IdParamSchema, ctx.params, ctx.requestId);
|
|
78
|
-
if (!paramValidation.success) {
|
|
79
|
-
return paramValidation.error;
|
|
80
|
-
}
|
|
81
|
-
const { id: sessionId } = paramValidation.data;
|
|
82
|
-
const memory = ctx.neurolink.conversationMemory;
|
|
83
|
-
if (!memory) {
|
|
84
|
-
return createErrorResponse("MEMORY_UNAVAILABLE", "Conversation memory not available", undefined, ctx.requestId);
|
|
85
|
-
}
|
|
86
|
-
try {
|
|
87
|
-
// Handle Redis memory manager (has getUserSessionObject or getUserSessionMetadata)
|
|
88
|
-
if ("getUserSessionObject" in memory) {
|
|
89
|
-
// For Redis, we need a userId - check query params or use a default
|
|
90
|
-
const userId = ctx.query.userId || "default";
|
|
91
|
-
const sessionObject = await memory.getUserSessionObject(userId, sessionId);
|
|
92
|
-
if (sessionObject === null) {
|
|
93
|
-
return createErrorResponse("SESSION_NOT_FOUND", `Session '${sessionId}' not found`, undefined, ctx.requestId);
|
|
94
|
-
}
|
|
95
|
-
return {
|
|
96
|
-
session: sessionObject,
|
|
97
|
-
metadata: {
|
|
98
|
-
timestamp: new Date().toISOString(),
|
|
99
|
-
requestId: ctx.requestId,
|
|
100
|
-
},
|
|
101
|
-
};
|
|
102
|
-
}
|
|
103
|
-
// Handle in-memory manager (has getSession)
|
|
104
|
-
else if ("getSession" in memory) {
|
|
105
|
-
const session = memory.getSession(sessionId);
|
|
106
|
-
if (!session) {
|
|
107
|
-
return createErrorResponse("SESSION_NOT_FOUND", `Session '${sessionId}' not found`, undefined, ctx.requestId);
|
|
108
|
-
}
|
|
109
|
-
return {
|
|
110
|
-
session,
|
|
111
|
-
metadata: {
|
|
112
|
-
timestamp: new Date().toISOString(),
|
|
113
|
-
requestId: ctx.requestId,
|
|
114
|
-
},
|
|
115
|
-
};
|
|
116
|
-
}
|
|
117
|
-
return createErrorResponse("MEMORY_ERROR", "Session retrieval not supported for this memory type", undefined, ctx.requestId);
|
|
118
|
-
}
|
|
119
|
-
catch (error) {
|
|
120
|
-
return createErrorResponse("MEMORY_ERROR", error instanceof Error ? error.message : "Failed to get session", undefined, ctx.requestId);
|
|
121
|
-
}
|
|
122
|
-
}
|
|
123
|
-
/**
|
|
124
|
-
* Handler: List all conversation sessions
|
|
125
|
-
*/
|
|
126
|
-
async function handleListSessions(ctx) {
|
|
127
|
-
// Parse query params
|
|
128
|
-
const userId = ctx.query.userId;
|
|
129
|
-
const limitParam = ctx.query.limit ? parseInt(ctx.query.limit, 10) : 50;
|
|
130
|
-
const offsetParam = ctx.query.offset ? parseInt(ctx.query.offset, 10) : 0;
|
|
131
|
-
// Validate pagination params
|
|
132
|
-
const limit = isNaN(limitParam) || limitParam < 1 ? 50 : Math.min(limitParam, 100);
|
|
133
|
-
const offset = isNaN(offsetParam) || offsetParam < 0 ? 0 : offsetParam;
|
|
134
|
-
const memory = ctx.neurolink.conversationMemory;
|
|
135
|
-
if (!memory) {
|
|
136
|
-
return createErrorResponse("MEMORY_UNAVAILABLE", "Conversation memory not available", undefined, ctx.requestId);
|
|
137
|
-
}
|
|
138
|
-
try {
|
|
139
|
-
let sessions = [];
|
|
140
|
-
// Handle Redis memory manager (has getUserAllSessionsHistory or getUserSessions)
|
|
141
|
-
if ("getUserAllSessionsHistory" in memory && userId) {
|
|
142
|
-
sessions = await memory.getUserAllSessionsHistory(userId);
|
|
143
|
-
}
|
|
144
|
-
else if ("getUserSessions" in memory && userId) {
|
|
145
|
-
// Get session IDs and then fetch metadata for each
|
|
146
|
-
const sessionIds = await memory.getUserSessions(userId);
|
|
147
|
-
// If we can get metadata, do so
|
|
148
|
-
if ("getUserSessionMetadata" in memory) {
|
|
149
|
-
const metadataPromises = sessionIds.map((id) => memory.getUserSessionMetadata(userId, id));
|
|
150
|
-
const metadataResults = await Promise.all(metadataPromises);
|
|
151
|
-
sessions = metadataResults.filter((m) => m !== null);
|
|
152
|
-
}
|
|
153
|
-
else {
|
|
154
|
-
// Just return session IDs as basic objects
|
|
155
|
-
sessions = sessionIds.map((id) => ({ id }));
|
|
156
|
-
}
|
|
157
|
-
}
|
|
158
|
-
// Handle in-memory manager - iterate over internal sessions Map
|
|
159
|
-
else if ("getStats" in memory) {
|
|
160
|
-
// For in-memory, we can use getSession to check if sessions exist
|
|
161
|
-
// but we need to know the session IDs first. The in-memory manager
|
|
162
|
-
// doesn't expose a listSessions method, so we return stats info instead.
|
|
163
|
-
const stats = await memory.getStats?.();
|
|
164
|
-
return {
|
|
165
|
-
sessions: [],
|
|
166
|
-
total: stats?.totalSessions || 0,
|
|
167
|
-
limit,
|
|
168
|
-
offset,
|
|
169
|
-
message: "Session listing not fully supported for in-memory storage. Use /stats endpoint for session counts.",
|
|
170
|
-
metadata: {
|
|
171
|
-
timestamp: new Date().toISOString(),
|
|
172
|
-
requestId: ctx.requestId,
|
|
173
|
-
},
|
|
174
|
-
};
|
|
175
|
-
}
|
|
176
|
-
const total = sessions.length;
|
|
177
|
-
const paginatedSessions = sessions.slice(offset, offset + limit);
|
|
178
|
-
return {
|
|
179
|
-
sessions: paginatedSessions,
|
|
180
|
-
total,
|
|
181
|
-
limit,
|
|
182
|
-
offset,
|
|
183
|
-
metadata: {
|
|
184
|
-
timestamp: new Date().toISOString(),
|
|
185
|
-
requestId: ctx.requestId,
|
|
186
|
-
},
|
|
187
|
-
};
|
|
188
|
-
}
|
|
189
|
-
catch (error) {
|
|
190
|
-
return createErrorResponse("MEMORY_ERROR", error instanceof Error ? error.message : "Failed to list sessions", undefined, ctx.requestId);
|
|
191
|
-
}
|
|
192
|
-
}
|
|
193
|
-
/**
|
|
194
|
-
* Handler: Get memory statistics
|
|
195
|
-
*/
|
|
196
|
-
async function handleGetStats(ctx) {
|
|
197
|
-
const memory = ctx.neurolink.conversationMemory;
|
|
198
|
-
if (!memory) {
|
|
199
|
-
return createErrorResponse("MEMORY_UNAVAILABLE", "Conversation memory not available", undefined, ctx.requestId);
|
|
200
|
-
}
|
|
201
|
-
try {
|
|
202
|
-
// Get memory statistics if available
|
|
203
|
-
const stats = await memory.getStats?.();
|
|
204
|
-
return {
|
|
205
|
-
available: true,
|
|
206
|
-
type: memory.constructor.name,
|
|
207
|
-
stats: stats || {
|
|
208
|
-
message: "Statistics not available for this memory type",
|
|
209
|
-
},
|
|
210
|
-
timestamp: new Date().toISOString(),
|
|
211
|
-
};
|
|
212
|
-
}
|
|
213
|
-
catch (error) {
|
|
214
|
-
return createErrorResponse("MEMORY_ERROR", error instanceof Error ? error.message : "Failed to get statistics", undefined, ctx.requestId);
|
|
215
|
-
}
|
|
216
|
-
}
|
|
217
|
-
/**
|
|
218
|
-
* Handler: Clear a conversation session
|
|
219
|
-
*/
|
|
220
|
-
async function handleClearSession(ctx) {
|
|
221
|
-
// Validate params
|
|
222
|
-
const paramValidation = validateParams(SessionIdParamSchema, ctx.params, ctx.requestId);
|
|
223
|
-
if (!paramValidation.success) {
|
|
224
|
-
return paramValidation.error;
|
|
225
|
-
}
|
|
226
|
-
const { sessionId } = paramValidation.data;
|
|
227
|
-
const memory = ctx.neurolink.conversationMemory;
|
|
228
|
-
if (!memory) {
|
|
229
|
-
return createErrorResponse("MEMORY_UNAVAILABLE", "Conversation memory not available", undefined, ctx.requestId);
|
|
230
|
-
}
|
|
231
|
-
try {
|
|
232
|
-
// Use clearSession for ConversationMemoryManager
|
|
233
|
-
const cleared = await memory.clearSession?.(sessionId);
|
|
234
|
-
if (cleared === false) {
|
|
235
|
-
return createErrorResponse("SESSION_NOT_FOUND", `Session '${sessionId}' not found`, undefined, ctx.requestId);
|
|
236
|
-
}
|
|
237
|
-
return {
|
|
238
|
-
success: true,
|
|
239
|
-
sessionId,
|
|
240
|
-
message: "Session cleared successfully",
|
|
241
|
-
metadata: {
|
|
242
|
-
timestamp: new Date().toISOString(),
|
|
243
|
-
requestId: ctx.requestId,
|
|
244
|
-
},
|
|
245
|
-
};
|
|
246
|
-
}
|
|
247
|
-
catch (error) {
|
|
248
|
-
return createErrorResponse("MEMORY_ERROR", error instanceof Error ? error.message : "Failed to clear session", undefined, ctx.requestId);
|
|
249
|
-
}
|
|
250
|
-
}
|
|
251
|
-
/**
|
|
252
|
-
* Handler: Clear all conversation sessions
|
|
253
|
-
*/
|
|
254
|
-
async function handleClearAllSessions(ctx) {
|
|
255
|
-
const memory = ctx.neurolink.conversationMemory;
|
|
256
|
-
if (!memory) {
|
|
257
|
-
return createErrorResponse("MEMORY_UNAVAILABLE", "Conversation memory not available", undefined, ctx.requestId);
|
|
258
|
-
}
|
|
259
|
-
try {
|
|
260
|
-
// Use clearAllSessions for ConversationMemoryManager
|
|
261
|
-
await memory.clearAllSessions?.();
|
|
262
|
-
return {
|
|
263
|
-
success: true,
|
|
264
|
-
message: "All sessions cleared successfully",
|
|
265
|
-
metadata: {
|
|
266
|
-
timestamp: new Date().toISOString(),
|
|
267
|
-
requestId: ctx.requestId,
|
|
268
|
-
},
|
|
269
|
-
};
|
|
270
|
-
}
|
|
271
|
-
catch (error) {
|
|
272
|
-
return createErrorResponse("MEMORY_ERROR", error instanceof Error ? error.message : "Failed to clear sessions", undefined, ctx.requestId);
|
|
273
|
-
}
|
|
274
|
-
}
|
|
275
|
-
/**
|
|
276
|
-
* Handler: Check memory system health
|
|
277
|
-
*/
|
|
278
|
-
async function handleMemoryHealth(ctx) {
|
|
279
|
-
const memory = ctx.neurolink.conversationMemory;
|
|
280
|
-
return {
|
|
281
|
-
available: !!memory,
|
|
282
|
-
type: memory?.constructor.name || "none",
|
|
283
|
-
timestamp: new Date().toISOString(),
|
|
284
|
-
};
|
|
285
|
-
}
|
|
286
|
-
/**
|
|
287
|
-
* Create memory management routes
|
|
288
|
-
* Note: These routes provide a simplified interface to conversation memory.
|
|
289
|
-
* The actual implementation depends on the memory manager type (ConversationMemoryManager or RedisConversationMemoryManager).
|
|
290
|
-
*/
|
|
291
|
-
export function createMemoryRoutes(basePath = "/api") {
|
|
292
|
-
return {
|
|
293
|
-
prefix: `${basePath}/memory`,
|
|
294
|
-
routes: [
|
|
295
|
-
// Route order matters - most specific routes first
|
|
296
|
-
// GET /api/memory/sessions/:id/messages - Get messages for a session (most specific)
|
|
297
|
-
{
|
|
298
|
-
method: "GET",
|
|
299
|
-
path: `${basePath}/memory/sessions/:id/messages`,
|
|
300
|
-
handler: handleGetSessionMessages,
|
|
301
|
-
description: "Get messages for a session",
|
|
302
|
-
tags: ["memory"],
|
|
303
|
-
},
|
|
304
|
-
// GET /api/memory/sessions/:id - Get session by ID
|
|
305
|
-
{
|
|
306
|
-
method: "GET",
|
|
307
|
-
path: `${basePath}/memory/sessions/:id`,
|
|
308
|
-
handler: handleGetSession,
|
|
309
|
-
description: "Get session by ID",
|
|
310
|
-
tags: ["memory"],
|
|
311
|
-
},
|
|
312
|
-
// GET /api/memory/sessions - List all conversation sessions
|
|
313
|
-
{
|
|
314
|
-
method: "GET",
|
|
315
|
-
path: `${basePath}/memory/sessions`,
|
|
316
|
-
handler: handleListSessions,
|
|
317
|
-
description: "List all conversation sessions",
|
|
318
|
-
tags: ["memory"],
|
|
319
|
-
},
|
|
320
|
-
{
|
|
321
|
-
method: "GET",
|
|
322
|
-
path: `${basePath}/memory/stats`,
|
|
323
|
-
handler: handleGetStats,
|
|
324
|
-
description: "Get memory statistics",
|
|
325
|
-
tags: ["memory"],
|
|
326
|
-
},
|
|
327
|
-
{
|
|
328
|
-
method: "DELETE",
|
|
329
|
-
path: `${basePath}/memory/sessions/:sessionId`,
|
|
330
|
-
handler: handleClearSession,
|
|
331
|
-
description: "Clear a conversation session",
|
|
332
|
-
tags: ["memory"],
|
|
333
|
-
},
|
|
334
|
-
{
|
|
335
|
-
method: "DELETE",
|
|
336
|
-
path: `${basePath}/memory/sessions`,
|
|
337
|
-
handler: handleClearAllSessions,
|
|
338
|
-
description: "Clear all conversation sessions",
|
|
339
|
-
tags: ["memory"],
|
|
340
|
-
},
|
|
341
|
-
{
|
|
342
|
-
method: "GET",
|
|
343
|
-
path: `${basePath}/memory/health`,
|
|
344
|
-
handler: handleMemoryHealth,
|
|
345
|
-
description: "Check memory system health",
|
|
346
|
-
tags: ["memory", "health"],
|
|
347
|
-
},
|
|
348
|
-
],
|
|
349
|
-
};
|
|
350
|
-
}
|
|
@@ -1,126 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* OpenAPI Routes
|
|
3
|
-
* Endpoints for OpenAPI specification and documentation
|
|
4
|
-
*/
|
|
5
|
-
import { logger } from "../../utils/logger.js";
|
|
6
|
-
import { OpenAPIGenerator } from "../openapi/generator.js";
|
|
7
|
-
/**
|
|
8
|
-
* Create OpenAPI documentation routes
|
|
9
|
-
*
|
|
10
|
-
* Generates three endpoints for API documentation:
|
|
11
|
-
* - GET /api/openapi.json - OpenAPI 3.1 specification in JSON format
|
|
12
|
-
* - GET /api/openapi.yaml - OpenAPI 3.1 specification in YAML format
|
|
13
|
-
* - GET /api/docs - Interactive Swagger UI documentation
|
|
14
|
-
*
|
|
15
|
-
* IMPORTANT: The `getRoutes` callback is required to document your custom routes.
|
|
16
|
-
* If not provided, the OpenAPI spec will only include default endpoint definitions.
|
|
17
|
-
*
|
|
18
|
-
* @param basePath - Base path for API routes (default: "/api")
|
|
19
|
-
* @param getRoutes - Callback to get registered routes for the OpenAPI spec.
|
|
20
|
-
* This callback is invoked at request time, so routes registered
|
|
21
|
-
* after creating the OpenAPI route group will be included.
|
|
22
|
-
* If not provided, the generator will use default endpoint definitions.
|
|
23
|
-
* @returns RouteGroup containing OpenAPI documentation endpoints
|
|
24
|
-
*
|
|
25
|
-
* @example
|
|
26
|
-
* ```typescript
|
|
27
|
-
* // RECOMMENDED: Use registerAllRoutes which automatically binds getRoutes
|
|
28
|
-
* registerAllRoutes(server, "/api", { enableSwagger: true });
|
|
29
|
-
*
|
|
30
|
-
* // Or manually provide the routes callback
|
|
31
|
-
* const openApiRoutes = createOpenApiRoutes("/api", () => server.listRoutes());
|
|
32
|
-
* server.registerRouteGroup(openApiRoutes);
|
|
33
|
-
* ```
|
|
34
|
-
*/
|
|
35
|
-
export function createOpenApiRoutes(basePath = "/api", getRoutes) {
|
|
36
|
-
// Log a warning if getRoutes is not provided at creation time
|
|
37
|
-
if (!getRoutes) {
|
|
38
|
-
logger.debug("[OpenAPI] createOpenApiRoutes called without getRoutes callback. " +
|
|
39
|
-
"Custom routes will not be documented in the OpenAPI spec.");
|
|
40
|
-
}
|
|
41
|
-
return {
|
|
42
|
-
prefix: `${basePath}/openapi`,
|
|
43
|
-
routes: [
|
|
44
|
-
{
|
|
45
|
-
method: "GET",
|
|
46
|
-
path: `${basePath}/openapi.json`,
|
|
47
|
-
handler: async () => {
|
|
48
|
-
const routes = getRoutes?.() ?? [];
|
|
49
|
-
if (!getRoutes) {
|
|
50
|
-
logger.warn("[OpenAPI] No getRoutes callback provided. OpenAPI spec will use default endpoint definitions. " +
|
|
51
|
-
"Use registerAllRoutes(server, basePath, { enableSwagger: true }) to automatically include your routes.");
|
|
52
|
-
}
|
|
53
|
-
else if (routes.length === 0) {
|
|
54
|
-
logger.debug("[OpenAPI] getRoutes returned empty array. No custom routes will be documented.");
|
|
55
|
-
}
|
|
56
|
-
const generator = new OpenAPIGenerator({
|
|
57
|
-
basePath,
|
|
58
|
-
routes,
|
|
59
|
-
});
|
|
60
|
-
return generator.generate();
|
|
61
|
-
},
|
|
62
|
-
description: "Get OpenAPI specification as JSON",
|
|
63
|
-
tags: ["openapi", "documentation"],
|
|
64
|
-
},
|
|
65
|
-
{
|
|
66
|
-
method: "GET",
|
|
67
|
-
path: `${basePath}/openapi.yaml`,
|
|
68
|
-
handler: async () => {
|
|
69
|
-
const routes = getRoutes?.() ?? [];
|
|
70
|
-
if (!getRoutes) {
|
|
71
|
-
logger.warn("[OpenAPI] No getRoutes callback provided. OpenAPI spec will use default endpoint definitions. " +
|
|
72
|
-
"Use registerAllRoutes(server, basePath, { enableSwagger: true }) to automatically include your routes.");
|
|
73
|
-
}
|
|
74
|
-
else if (routes.length === 0) {
|
|
75
|
-
logger.debug("[OpenAPI] getRoutes returned empty array. No custom routes will be documented.");
|
|
76
|
-
}
|
|
77
|
-
const generator = new OpenAPIGenerator({
|
|
78
|
-
basePath,
|
|
79
|
-
routes,
|
|
80
|
-
});
|
|
81
|
-
return {
|
|
82
|
-
_raw: true,
|
|
83
|
-
contentType: "text/yaml",
|
|
84
|
-
body: generator.toYAML(),
|
|
85
|
-
};
|
|
86
|
-
},
|
|
87
|
-
description: "Get OpenAPI specification as YAML",
|
|
88
|
-
tags: ["openapi", "documentation"],
|
|
89
|
-
},
|
|
90
|
-
{
|
|
91
|
-
method: "GET",
|
|
92
|
-
path: `${basePath}/docs`,
|
|
93
|
-
handler: async () => {
|
|
94
|
-
const html = `<!DOCTYPE html>
|
|
95
|
-
<html>
|
|
96
|
-
<head>
|
|
97
|
-
<title>NeuroLink API Documentation</title>
|
|
98
|
-
<meta charset="utf-8"/>
|
|
99
|
-
<meta name="viewport" content="width=device-width, initial-scale=1">
|
|
100
|
-
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui.css">
|
|
101
|
-
</head>
|
|
102
|
-
<body>
|
|
103
|
-
<div id="swagger-ui"></div>
|
|
104
|
-
<script src="https://cdn.jsdelivr.net/npm/swagger-ui-dist@5/swagger-ui-bundle.js"></script>
|
|
105
|
-
<script>
|
|
106
|
-
SwaggerUIBundle({
|
|
107
|
-
url: "${basePath}/openapi.json",
|
|
108
|
-
dom_id: '#swagger-ui',
|
|
109
|
-
presets: [SwaggerUIBundle.presets.apis],
|
|
110
|
-
layout: "BaseLayout"
|
|
111
|
-
});
|
|
112
|
-
</script>
|
|
113
|
-
</body>
|
|
114
|
-
</html>`;
|
|
115
|
-
return {
|
|
116
|
-
_raw: true,
|
|
117
|
-
contentType: "text/html",
|
|
118
|
-
body: html,
|
|
119
|
-
};
|
|
120
|
-
},
|
|
121
|
-
description: "Swagger UI documentation page",
|
|
122
|
-
tags: ["openapi", "documentation"],
|
|
123
|
-
},
|
|
124
|
-
],
|
|
125
|
-
};
|
|
126
|
-
}
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Tool Routes
|
|
3
|
-
* Endpoints for tool listing, discovery, and execution
|
|
4
|
-
*/
|
|
5
|
-
import { createErrorResponse, ToolArgumentsSchema, ToolExecuteRequestSchema, ToolNameParamSchema, validateParams, validateRequest, } from "../utils/validation.js";
|
|
6
|
-
/**
|
|
7
|
-
* Create tool routes
|
|
8
|
-
*/
|
|
9
|
-
export function createToolRoutes(basePath = "/api") {
|
|
10
|
-
return {
|
|
11
|
-
prefix: `${basePath}/tools`,
|
|
12
|
-
// IMPORTANT: Route ordering matters for proper matching!
|
|
13
|
-
// Routes are matched in order, so literal/exact paths MUST come before
|
|
14
|
-
// parameterized paths (e.g., :name) to prevent the parameter from
|
|
15
|
-
// matching literal path segments like "search" or "execute".
|
|
16
|
-
// Order: exact paths first, then paths with nested segments, then parameterized paths last.
|
|
17
|
-
routes: [
|
|
18
|
-
// 1. GET /api/tools - List all tools (exact match, must be first)
|
|
19
|
-
{
|
|
20
|
-
method: "GET",
|
|
21
|
-
path: `${basePath}/tools`,
|
|
22
|
-
handler: async (ctx) => {
|
|
23
|
-
const tools = await ctx.toolRegistry.listTools();
|
|
24
|
-
return {
|
|
25
|
-
tools: tools.map((tool) => ({
|
|
26
|
-
name: tool.name,
|
|
27
|
-
description: tool.description,
|
|
28
|
-
inputSchema: tool.inputSchema,
|
|
29
|
-
source: tool.source || "built-in",
|
|
30
|
-
})),
|
|
31
|
-
total: tools.length,
|
|
32
|
-
};
|
|
33
|
-
},
|
|
34
|
-
description: "List all available tools",
|
|
35
|
-
tags: ["tools"],
|
|
36
|
-
},
|
|
37
|
-
// 2. GET /api/tools/search - Search tools (literal path segment)
|
|
38
|
-
{
|
|
39
|
-
method: "GET",
|
|
40
|
-
path: `${basePath}/tools/search`,
|
|
41
|
-
handler: async (ctx) => {
|
|
42
|
-
const { q, source, limit } = ctx.query;
|
|
43
|
-
const tools = await ctx.toolRegistry.listTools();
|
|
44
|
-
let filtered = tools;
|
|
45
|
-
// Filter by search query
|
|
46
|
-
if (q) {
|
|
47
|
-
const query = q.toLowerCase();
|
|
48
|
-
filtered = filtered.filter((tool) => tool.name.toLowerCase().includes(query) ||
|
|
49
|
-
(tool.description &&
|
|
50
|
-
tool.description.toLowerCase().includes(query)));
|
|
51
|
-
}
|
|
52
|
-
// Filter by source
|
|
53
|
-
if (source) {
|
|
54
|
-
filtered = filtered.filter((tool) => (tool.source || "built-in") === source);
|
|
55
|
-
}
|
|
56
|
-
// Apply limit
|
|
57
|
-
const maxResults = limit ? parseInt(limit, 10) : 50;
|
|
58
|
-
filtered = filtered.slice(0, maxResults);
|
|
59
|
-
return {
|
|
60
|
-
tools: filtered.map((tool) => ({
|
|
61
|
-
name: tool.name,
|
|
62
|
-
description: tool.description,
|
|
63
|
-
source: tool.source || "built-in",
|
|
64
|
-
})),
|
|
65
|
-
total: filtered.length,
|
|
66
|
-
query: q || null,
|
|
67
|
-
};
|
|
68
|
-
},
|
|
69
|
-
description: "Search tools by name or description",
|
|
70
|
-
tags: ["tools"],
|
|
71
|
-
},
|
|
72
|
-
// 3. POST /api/tools/execute - Execute tool by name in body (literal path segment)
|
|
73
|
-
{
|
|
74
|
-
method: "POST",
|
|
75
|
-
path: `${basePath}/tools/execute`,
|
|
76
|
-
handler: async (ctx) => {
|
|
77
|
-
// Validate request body
|
|
78
|
-
const validation = validateRequest(ToolExecuteRequestSchema, ctx.body, ctx.requestId);
|
|
79
|
-
if (!validation.success) {
|
|
80
|
-
return validation.error;
|
|
81
|
-
}
|
|
82
|
-
const request = validation.data;
|
|
83
|
-
const startTime = Date.now();
|
|
84
|
-
try {
|
|
85
|
-
// Get tool from registry
|
|
86
|
-
const tools = await ctx.toolRegistry.listTools();
|
|
87
|
-
const tool = tools.find((t) => t.name === request.name);
|
|
88
|
-
if (!tool) {
|
|
89
|
-
return {
|
|
90
|
-
success: false,
|
|
91
|
-
error: `Tool '${request.name}' not found`,
|
|
92
|
-
duration: Date.now() - startTime,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
// Execute the tool
|
|
96
|
-
const result = await ctx.toolRegistry.executeTool(request.name, request.arguments);
|
|
97
|
-
return {
|
|
98
|
-
success: true,
|
|
99
|
-
data: result,
|
|
100
|
-
duration: Date.now() - startTime,
|
|
101
|
-
metadata: {
|
|
102
|
-
toolName: request.name,
|
|
103
|
-
sessionId: request.sessionId || null,
|
|
104
|
-
},
|
|
105
|
-
};
|
|
106
|
-
}
|
|
107
|
-
catch (error) {
|
|
108
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
109
|
-
return {
|
|
110
|
-
success: false,
|
|
111
|
-
error: errorMessage,
|
|
112
|
-
duration: Date.now() - startTime,
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
},
|
|
116
|
-
description: "Execute a tool with arguments",
|
|
117
|
-
tags: ["tools"],
|
|
118
|
-
},
|
|
119
|
-
// 4. POST /api/tools/:name/execute - Execute specific tool (parameterized with nested segment)
|
|
120
|
-
{
|
|
121
|
-
method: "POST",
|
|
122
|
-
path: `${basePath}/tools/:name/execute`,
|
|
123
|
-
handler: async (ctx) => {
|
|
124
|
-
// Validate params
|
|
125
|
-
const paramValidation = validateParams(ToolNameParamSchema, ctx.params, ctx.requestId);
|
|
126
|
-
if (!paramValidation.success) {
|
|
127
|
-
return paramValidation.error;
|
|
128
|
-
}
|
|
129
|
-
const { name } = paramValidation.data;
|
|
130
|
-
// Validate body (tool arguments)
|
|
131
|
-
const bodyValidation = validateRequest(ToolArgumentsSchema, ctx.body || {}, ctx.requestId);
|
|
132
|
-
if (!bodyValidation.success) {
|
|
133
|
-
return bodyValidation.error;
|
|
134
|
-
}
|
|
135
|
-
const args = bodyValidation.data;
|
|
136
|
-
const startTime = Date.now();
|
|
137
|
-
try {
|
|
138
|
-
// Get tool from registry
|
|
139
|
-
const tools = await ctx.toolRegistry.listTools();
|
|
140
|
-
const tool = tools.find((t) => t.name === name);
|
|
141
|
-
if (!tool) {
|
|
142
|
-
return {
|
|
143
|
-
success: false,
|
|
144
|
-
error: `Tool '${name}' not found`,
|
|
145
|
-
duration: Date.now() - startTime,
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
// Execute the tool
|
|
149
|
-
const result = await ctx.toolRegistry.executeTool(name, args);
|
|
150
|
-
return {
|
|
151
|
-
success: true,
|
|
152
|
-
data: result,
|
|
153
|
-
duration: Date.now() - startTime,
|
|
154
|
-
metadata: {
|
|
155
|
-
toolName: name,
|
|
156
|
-
},
|
|
157
|
-
};
|
|
158
|
-
}
|
|
159
|
-
catch (error) {
|
|
160
|
-
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
161
|
-
return {
|
|
162
|
-
success: false,
|
|
163
|
-
error: errorMessage,
|
|
164
|
-
duration: Date.now() - startTime,
|
|
165
|
-
};
|
|
166
|
-
}
|
|
167
|
-
},
|
|
168
|
-
description: "Execute a specific tool by name",
|
|
169
|
-
tags: ["tools"],
|
|
170
|
-
},
|
|
171
|
-
// 5. GET /api/tools/:name - Get tool details (parameterized, MUST BE LAST)
|
|
172
|
-
{
|
|
173
|
-
method: "GET",
|
|
174
|
-
path: `${basePath}/tools/:name`,
|
|
175
|
-
handler: async (ctx) => {
|
|
176
|
-
// Validate params
|
|
177
|
-
const paramValidation = validateParams(ToolNameParamSchema, ctx.params, ctx.requestId);
|
|
178
|
-
if (!paramValidation.success) {
|
|
179
|
-
return paramValidation.error;
|
|
180
|
-
}
|
|
181
|
-
const { name } = paramValidation.data;
|
|
182
|
-
const tools = await ctx.toolRegistry.listTools();
|
|
183
|
-
const tool = tools.find((t) => t.name === name);
|
|
184
|
-
if (!tool) {
|
|
185
|
-
return createErrorResponse("TOOL_NOT_FOUND", `Tool '${name}' not found`, undefined, ctx.requestId);
|
|
186
|
-
}
|
|
187
|
-
return {
|
|
188
|
-
name: tool.name,
|
|
189
|
-
description: tool.description,
|
|
190
|
-
inputSchema: tool.inputSchema,
|
|
191
|
-
source: tool.source || "built-in",
|
|
192
|
-
};
|
|
193
|
-
},
|
|
194
|
-
description: "Get tool details by name",
|
|
195
|
-
tags: ["tools"],
|
|
196
|
-
},
|
|
197
|
-
],
|
|
198
|
-
};
|
|
199
|
-
}
|