@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,837 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* HTTP/WebSocket Client Library
|
|
3
|
-
*
|
|
4
|
-
* Core client for accessing the NeuroLink API with built-in authentication,
|
|
5
|
-
* retry logic, and middleware support. Supports both browser and Node.js environments.
|
|
6
|
-
*
|
|
7
|
-
* @module @neurolink/client
|
|
8
|
-
*/
|
|
9
|
-
import { HttpError, ClientNetworkError, ClientTimeoutError, } from "./errors.js";
|
|
10
|
-
import { logger } from "../utils/logger.js";
|
|
11
|
-
// =============================================================================
|
|
12
|
-
// Shared Utilities
|
|
13
|
-
// =============================================================================
|
|
14
|
-
/**
|
|
15
|
-
* Combine multiple AbortSignals into a single signal.
|
|
16
|
-
* Aborts as soon as any input signal is aborted.
|
|
17
|
-
*/
|
|
18
|
-
export function combineSignals(...signals) {
|
|
19
|
-
const controller = new AbortController();
|
|
20
|
-
for (const signal of signals) {
|
|
21
|
-
if (signal.aborted) {
|
|
22
|
-
controller.abort();
|
|
23
|
-
break;
|
|
24
|
-
}
|
|
25
|
-
signal.addEventListener("abort", () => controller.abort());
|
|
26
|
-
}
|
|
27
|
-
return controller.signal;
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* Promise-based delay utility.
|
|
31
|
-
*/
|
|
32
|
-
export function sleep(ms) {
|
|
33
|
-
return new Promise((resolve) => setTimeout(resolve, ms));
|
|
34
|
-
}
|
|
35
|
-
// =============================================================================
|
|
36
|
-
// Constants
|
|
37
|
-
// =============================================================================
|
|
38
|
-
/**
|
|
39
|
-
* Default request timeout in milliseconds (30 seconds)
|
|
40
|
-
*/
|
|
41
|
-
const DEFAULT_TIMEOUT = 30_000;
|
|
42
|
-
/**
|
|
43
|
-
* Default retry configuration
|
|
44
|
-
*/
|
|
45
|
-
const DEFAULT_RETRY_CONFIG = {
|
|
46
|
-
maxAttempts: 3,
|
|
47
|
-
initialDelayMs: 1000,
|
|
48
|
-
maxDelayMs: 10000,
|
|
49
|
-
backoffMultiplier: 2,
|
|
50
|
-
retryableStatusCodes: [408, 429, 500, 502, 503, 504],
|
|
51
|
-
retryOnNetworkError: true,
|
|
52
|
-
};
|
|
53
|
-
// Re-export error classes so existing consumers importing from httpClient still work
|
|
54
|
-
export { HttpError as NeuroLinkApiError, ClientNetworkError, ClientTimeoutError, };
|
|
55
|
-
// =============================================================================
|
|
56
|
-
// HTTP Client Class
|
|
57
|
-
// =============================================================================
|
|
58
|
-
/**
|
|
59
|
-
* HTTP Client for NeuroLink API
|
|
60
|
-
*
|
|
61
|
-
* Provides type-safe access to all NeuroLink API endpoints with
|
|
62
|
-
* built-in authentication, retry logic, and middleware support.
|
|
63
|
-
*
|
|
64
|
-
* @example Basic usage
|
|
65
|
-
* ```typescript
|
|
66
|
-
* import { createClient } from '@neurolink/client';
|
|
67
|
-
*
|
|
68
|
-
* const client = createClient({
|
|
69
|
-
* baseUrl: 'https://api.neurolink.example.com',
|
|
70
|
-
* apiKey: 'your-api-key',
|
|
71
|
-
* });
|
|
72
|
-
*
|
|
73
|
-
* const result = await client.generate({
|
|
74
|
-
* input: { text: 'Hello, world!' },
|
|
75
|
-
* provider: 'openai',
|
|
76
|
-
* });
|
|
77
|
-
* ```
|
|
78
|
-
*
|
|
79
|
-
* @example With middleware
|
|
80
|
-
* ```typescript
|
|
81
|
-
* const client = createClient({ baseUrl: 'https://api.example.com' });
|
|
82
|
-
*
|
|
83
|
-
* client.use(async (request, next) => {
|
|
84
|
-
* console.log('Request:', request.url);
|
|
85
|
-
* const response = await next();
|
|
86
|
-
* console.log('Response:', response.status);
|
|
87
|
-
* return response;
|
|
88
|
-
* });
|
|
89
|
-
* ```
|
|
90
|
-
*/
|
|
91
|
-
export class NeuroLinkClient {
|
|
92
|
-
config;
|
|
93
|
-
middlewares = [];
|
|
94
|
-
wsConnection = null;
|
|
95
|
-
wsState = "disconnected";
|
|
96
|
-
wsMessageHandlers = new Map();
|
|
97
|
-
constructor(config) {
|
|
98
|
-
// Validate required config
|
|
99
|
-
if (!config.baseUrl) {
|
|
100
|
-
throw new Error("baseUrl is required in client configuration");
|
|
101
|
-
}
|
|
102
|
-
this.config = {
|
|
103
|
-
baseUrl: config.baseUrl.replace(/\/$/, ""),
|
|
104
|
-
apiKey: config.apiKey ?? "",
|
|
105
|
-
token: config.token ?? "",
|
|
106
|
-
timeout: config.timeout ?? DEFAULT_TIMEOUT,
|
|
107
|
-
headers: config.headers ?? {},
|
|
108
|
-
retry: { ...DEFAULT_RETRY_CONFIG, ...config.retry },
|
|
109
|
-
debug: config.debug ?? false,
|
|
110
|
-
fetch: config.fetch ?? this.getDefaultFetch(),
|
|
111
|
-
wsUrl: config.wsUrl ??
|
|
112
|
-
config.baseUrl.replace(/^http/, "ws").replace(/\/$/, ""),
|
|
113
|
-
};
|
|
114
|
-
}
|
|
115
|
-
/**
|
|
116
|
-
* Get default fetch implementation
|
|
117
|
-
*/
|
|
118
|
-
getDefaultFetch() {
|
|
119
|
-
if (typeof globalThis.fetch === "function") {
|
|
120
|
-
return globalThis.fetch.bind(globalThis);
|
|
121
|
-
}
|
|
122
|
-
throw new Error("No fetch implementation available. Please provide a custom fetch function in the client configuration.");
|
|
123
|
-
}
|
|
124
|
-
// ===========================================================================
|
|
125
|
-
// Middleware Methods
|
|
126
|
-
// ===========================================================================
|
|
127
|
-
/**
|
|
128
|
-
* Add middleware to the client
|
|
129
|
-
*
|
|
130
|
-
* @param middleware - Middleware function
|
|
131
|
-
* @returns Client instance for chaining
|
|
132
|
-
*/
|
|
133
|
-
use(middleware) {
|
|
134
|
-
this.middlewares.push(middleware);
|
|
135
|
-
return this;
|
|
136
|
-
}
|
|
137
|
-
/**
|
|
138
|
-
* Clear all middleware
|
|
139
|
-
*/
|
|
140
|
-
clearMiddleware() {
|
|
141
|
-
this.middlewares = [];
|
|
142
|
-
return this;
|
|
143
|
-
}
|
|
144
|
-
// ===========================================================================
|
|
145
|
-
// Internal Request Methods
|
|
146
|
-
// ===========================================================================
|
|
147
|
-
/**
|
|
148
|
-
* Generate unique request ID
|
|
149
|
-
*/
|
|
150
|
-
generateRequestId() {
|
|
151
|
-
return `req_${Date.now()}_${Math.random().toString(36).substr(2, 9)}`;
|
|
152
|
-
}
|
|
153
|
-
/**
|
|
154
|
-
* Calculate delay for exponential backoff
|
|
155
|
-
*/
|
|
156
|
-
calculateDelay(attempt, config) {
|
|
157
|
-
const delay = config.initialDelayMs * Math.pow(config.backoffMultiplier, attempt);
|
|
158
|
-
const jitter = Math.random() * 0.1 * delay;
|
|
159
|
-
return Math.min(delay + jitter, config.maxDelayMs);
|
|
160
|
-
}
|
|
161
|
-
/**
|
|
162
|
-
* Delay utility — delegates to shared sleep()
|
|
163
|
-
*/
|
|
164
|
-
delay(ms) {
|
|
165
|
-
return sleep(ms);
|
|
166
|
-
}
|
|
167
|
-
/**
|
|
168
|
-
* Combine multiple abort signals — delegates to shared combineSignals()
|
|
169
|
-
*/
|
|
170
|
-
combineSignals(...signals) {
|
|
171
|
-
return combineSignals(...signals);
|
|
172
|
-
}
|
|
173
|
-
/**
|
|
174
|
-
* Debug logging via the unified NeuroLink logger.
|
|
175
|
-
* Guarded by `logger.shouldLog("debug")` so expensive serialization is
|
|
176
|
-
* skipped when debug output is disabled.
|
|
177
|
-
*/
|
|
178
|
-
log(message, data) {
|
|
179
|
-
if (logger.shouldLog("debug")) {
|
|
180
|
-
logger.debug(`[HttpClient] ${message}`, data);
|
|
181
|
-
}
|
|
182
|
-
}
|
|
183
|
-
/**
|
|
184
|
-
* Execute HTTP request with middleware and retry logic
|
|
185
|
-
*/
|
|
186
|
-
async request(method, path, body, options) {
|
|
187
|
-
const url = `${this.config.baseUrl}${path}`;
|
|
188
|
-
const requestId = this.generateRequestId();
|
|
189
|
-
const { retry } = this.config;
|
|
190
|
-
const skipRetry = options?.skipRetry ?? false;
|
|
191
|
-
const context = {
|
|
192
|
-
startTime: Date.now(),
|
|
193
|
-
requestId,
|
|
194
|
-
retryCount: 0,
|
|
195
|
-
};
|
|
196
|
-
const middlewareRequest = {
|
|
197
|
-
url,
|
|
198
|
-
method,
|
|
199
|
-
headers: {
|
|
200
|
-
"Content-Type": "application/json",
|
|
201
|
-
Accept: "application/json",
|
|
202
|
-
"X-Request-ID": requestId,
|
|
203
|
-
...(this.config.apiKey ? { "X-API-Key": this.config.apiKey } : {}),
|
|
204
|
-
...(this.config.token
|
|
205
|
-
? { Authorization: `Bearer ${this.config.token}` }
|
|
206
|
-
: {}),
|
|
207
|
-
...this.config.headers,
|
|
208
|
-
...options?.headers,
|
|
209
|
-
},
|
|
210
|
-
body,
|
|
211
|
-
context,
|
|
212
|
-
};
|
|
213
|
-
/**
|
|
214
|
-
* Execute the actual HTTP request
|
|
215
|
-
*/
|
|
216
|
-
const executeRequest = async () => {
|
|
217
|
-
const controller = new AbortController();
|
|
218
|
-
const timeoutMs = options?.timeout ?? this.config.timeout;
|
|
219
|
-
const timeoutId = setTimeout(() => controller.abort(), timeoutMs);
|
|
220
|
-
try {
|
|
221
|
-
const signal = options?.signal
|
|
222
|
-
? this.combineSignals(options.signal, controller.signal)
|
|
223
|
-
: controller.signal;
|
|
224
|
-
this.log(`${method} ${url}`);
|
|
225
|
-
const response = await this.config.fetch(url, {
|
|
226
|
-
method,
|
|
227
|
-
headers: middlewareRequest.headers,
|
|
228
|
-
body: body ? JSON.stringify(body) : undefined,
|
|
229
|
-
signal,
|
|
230
|
-
});
|
|
231
|
-
clearTimeout(timeoutId);
|
|
232
|
-
let responseBody;
|
|
233
|
-
const contentType = response.headers.get("content-type") ?? "";
|
|
234
|
-
if (contentType.includes("application/json")) {
|
|
235
|
-
responseBody = await response.json();
|
|
236
|
-
}
|
|
237
|
-
else {
|
|
238
|
-
responseBody = await response.text();
|
|
239
|
-
}
|
|
240
|
-
const headers = {};
|
|
241
|
-
response.headers.forEach((value, key) => {
|
|
242
|
-
headers[key] = value;
|
|
243
|
-
});
|
|
244
|
-
this.log(`Response ${response.status}`, {
|
|
245
|
-
duration: Date.now() - context.startTime,
|
|
246
|
-
});
|
|
247
|
-
return {
|
|
248
|
-
status: response.status,
|
|
249
|
-
headers,
|
|
250
|
-
body: responseBody,
|
|
251
|
-
context,
|
|
252
|
-
};
|
|
253
|
-
}
|
|
254
|
-
catch (error) {
|
|
255
|
-
clearTimeout(timeoutId);
|
|
256
|
-
if (error.name === "AbortError") {
|
|
257
|
-
throw new ClientTimeoutError(timeoutMs);
|
|
258
|
-
}
|
|
259
|
-
throw new ClientNetworkError(`Network request failed: ${error.message}`, { cause: error });
|
|
260
|
-
}
|
|
261
|
-
};
|
|
262
|
-
/**
|
|
263
|
-
* Execute request with retry logic
|
|
264
|
-
*/
|
|
265
|
-
const executeWithRetry = async () => {
|
|
266
|
-
let lastError;
|
|
267
|
-
for (let attempt = 0; attempt < retry.maxAttempts; attempt++) {
|
|
268
|
-
try {
|
|
269
|
-
const response = await executeRequest();
|
|
270
|
-
// Check if response status is retryable
|
|
271
|
-
if (!skipRetry &&
|
|
272
|
-
retry.retryableStatusCodes?.includes(response.status)) {
|
|
273
|
-
if (attempt < retry.maxAttempts - 1) {
|
|
274
|
-
const delayMs = this.calculateDelay(attempt, retry);
|
|
275
|
-
this.log(`Retrying after ${delayMs}ms (attempt ${attempt + 1})`);
|
|
276
|
-
await this.delay(delayMs);
|
|
277
|
-
context.retryCount = attempt + 1;
|
|
278
|
-
continue;
|
|
279
|
-
}
|
|
280
|
-
}
|
|
281
|
-
return response;
|
|
282
|
-
}
|
|
283
|
-
catch (error) {
|
|
284
|
-
lastError = error;
|
|
285
|
-
// Check if network error and should retry
|
|
286
|
-
if (!skipRetry &&
|
|
287
|
-
retry.retryOnNetworkError &&
|
|
288
|
-
error instanceof ClientNetworkError &&
|
|
289
|
-
attempt < retry.maxAttempts - 1) {
|
|
290
|
-
const delayMs = this.calculateDelay(attempt, retry);
|
|
291
|
-
this.log(`Retrying after network error (attempt ${attempt + 1})`);
|
|
292
|
-
await this.delay(delayMs);
|
|
293
|
-
context.retryCount = attempt + 1;
|
|
294
|
-
continue;
|
|
295
|
-
}
|
|
296
|
-
throw error;
|
|
297
|
-
}
|
|
298
|
-
}
|
|
299
|
-
throw lastError ?? new Error("Max retries exceeded");
|
|
300
|
-
};
|
|
301
|
-
// Execute with middleware chain
|
|
302
|
-
let index = 0;
|
|
303
|
-
const next = async () => {
|
|
304
|
-
if (index < this.middlewares.length) {
|
|
305
|
-
const middleware = this.middlewares[index++];
|
|
306
|
-
return middleware(middlewareRequest, next);
|
|
307
|
-
}
|
|
308
|
-
return executeWithRetry();
|
|
309
|
-
};
|
|
310
|
-
const response = await next();
|
|
311
|
-
// Check for error responses
|
|
312
|
-
if (response.status >= 400) {
|
|
313
|
-
// Server may wrap errors as { error: { code, message }, metadata: {...} }
|
|
314
|
-
const rawBody = response.body;
|
|
315
|
-
const errorPayload = rawBody && typeof rawBody === "object" && "error" in rawBody
|
|
316
|
-
? rawBody.error
|
|
317
|
-
: rawBody;
|
|
318
|
-
throw new HttpError(errorPayload?.message ?? `HTTP ${response.status}`, response.status, {
|
|
319
|
-
code: errorPayload?.code,
|
|
320
|
-
details: errorPayload?.details,
|
|
321
|
-
requestId,
|
|
322
|
-
});
|
|
323
|
-
}
|
|
324
|
-
// Unwrap server response envelope if present
|
|
325
|
-
// The NeuroLink server wraps responses as { data: <payload>, metadata: {...} }
|
|
326
|
-
const responseBody = response.body;
|
|
327
|
-
const unwrapped = responseBody &&
|
|
328
|
-
typeof responseBody === "object" &&
|
|
329
|
-
"data" in responseBody &&
|
|
330
|
-
"metadata" in responseBody
|
|
331
|
-
? responseBody.data
|
|
332
|
-
: response.body;
|
|
333
|
-
return {
|
|
334
|
-
data: unwrapped,
|
|
335
|
-
status: response.status,
|
|
336
|
-
headers: response.headers,
|
|
337
|
-
duration: Date.now() - context.startTime,
|
|
338
|
-
requestId,
|
|
339
|
-
};
|
|
340
|
-
}
|
|
341
|
-
// ===========================================================================
|
|
342
|
-
// Generation API
|
|
343
|
-
// ===========================================================================
|
|
344
|
-
/**
|
|
345
|
-
* Generate text using AI models
|
|
346
|
-
*
|
|
347
|
-
* @example
|
|
348
|
-
* ```typescript
|
|
349
|
-
* const response = await client.generate({
|
|
350
|
-
* input: { text: 'Write a poem about coding' },
|
|
351
|
-
* provider: 'openai',
|
|
352
|
-
* model: 'gpt-4o',
|
|
353
|
-
* temperature: 0.7,
|
|
354
|
-
* });
|
|
355
|
-
* console.log(response.data.content);
|
|
356
|
-
* ```
|
|
357
|
-
*/
|
|
358
|
-
async generate(options, requestOptions) {
|
|
359
|
-
return this.request("POST", "/api/agent/execute", options, requestOptions);
|
|
360
|
-
}
|
|
361
|
-
/**
|
|
362
|
-
* Stream text generation
|
|
363
|
-
*
|
|
364
|
-
* @example
|
|
365
|
-
* ```typescript
|
|
366
|
-
* await client.stream(
|
|
367
|
-
* { input: { text: 'Tell me a story' }, provider: 'openai' },
|
|
368
|
-
* {
|
|
369
|
-
* onText: (text) => process.stdout.write(text),
|
|
370
|
-
* onDone: (result) => console.log('\nDone!', result.usage),
|
|
371
|
-
* }
|
|
372
|
-
* );
|
|
373
|
-
* ```
|
|
374
|
-
*/
|
|
375
|
-
async stream(options, callbacks, requestOptions) {
|
|
376
|
-
const url = `${this.config.baseUrl}/api/agent/stream`;
|
|
377
|
-
const requestId = this.generateRequestId();
|
|
378
|
-
const response = await this.config.fetch(url, {
|
|
379
|
-
method: "POST",
|
|
380
|
-
headers: {
|
|
381
|
-
"Content-Type": "application/json",
|
|
382
|
-
Accept: "text/event-stream",
|
|
383
|
-
"X-Request-ID": requestId,
|
|
384
|
-
...(this.config.apiKey ? { "X-API-Key": this.config.apiKey } : {}),
|
|
385
|
-
...(this.config.token
|
|
386
|
-
? { Authorization: `Bearer ${this.config.token}` }
|
|
387
|
-
: {}),
|
|
388
|
-
...this.config.headers,
|
|
389
|
-
...requestOptions?.headers,
|
|
390
|
-
},
|
|
391
|
-
body: JSON.stringify(options),
|
|
392
|
-
signal: requestOptions?.signal,
|
|
393
|
-
});
|
|
394
|
-
if (!response.ok) {
|
|
395
|
-
const rawBody = (await response.json());
|
|
396
|
-
// Server may wrap errors as { error: { code, message }, metadata: {...} }
|
|
397
|
-
const errorPayload = rawBody && typeof rawBody === "object" && "error" in rawBody
|
|
398
|
-
? rawBody.error
|
|
399
|
-
: rawBody;
|
|
400
|
-
throw new HttpError(errorPayload?.message ?? `HTTP ${response.status}`, response.status, {
|
|
401
|
-
code: errorPayload?.code,
|
|
402
|
-
details: errorPayload?.details,
|
|
403
|
-
requestId,
|
|
404
|
-
});
|
|
405
|
-
}
|
|
406
|
-
const reader = response.body?.getReader();
|
|
407
|
-
if (!reader) {
|
|
408
|
-
throw new Error("Response body is not readable");
|
|
409
|
-
}
|
|
410
|
-
const decoder = new TextDecoder();
|
|
411
|
-
let buffer = "";
|
|
412
|
-
let fullContent = "";
|
|
413
|
-
const toolCalls = [];
|
|
414
|
-
const toolResults = [];
|
|
415
|
-
try {
|
|
416
|
-
while (true) {
|
|
417
|
-
const { done, value } = await reader.read();
|
|
418
|
-
if (done) {
|
|
419
|
-
break;
|
|
420
|
-
}
|
|
421
|
-
buffer += decoder.decode(value, { stream: true });
|
|
422
|
-
const lines = buffer.split("\n");
|
|
423
|
-
buffer = lines.pop() ?? "";
|
|
424
|
-
for (const line of lines) {
|
|
425
|
-
if (line.startsWith("data: ")) {
|
|
426
|
-
const data = line.slice(6);
|
|
427
|
-
if (data === "[DONE]") {
|
|
428
|
-
const result = {
|
|
429
|
-
content: fullContent,
|
|
430
|
-
toolCalls: toolCalls,
|
|
431
|
-
toolResults: toolResults,
|
|
432
|
-
};
|
|
433
|
-
callbacks?.onDone?.(result);
|
|
434
|
-
return result;
|
|
435
|
-
}
|
|
436
|
-
try {
|
|
437
|
-
const event = JSON.parse(data);
|
|
438
|
-
this.handleStreamEvent(event, callbacks, {
|
|
439
|
-
onText: (text) => {
|
|
440
|
-
fullContent += text;
|
|
441
|
-
},
|
|
442
|
-
onToolCall: (toolCall) => {
|
|
443
|
-
toolCalls.push(toolCall);
|
|
444
|
-
},
|
|
445
|
-
onToolResult: (toolResult) => {
|
|
446
|
-
toolResults.push(toolResult);
|
|
447
|
-
},
|
|
448
|
-
});
|
|
449
|
-
}
|
|
450
|
-
catch {
|
|
451
|
-
// Ignore parse errors for malformed events
|
|
452
|
-
this.log("Failed to parse stream event", data);
|
|
453
|
-
}
|
|
454
|
-
}
|
|
455
|
-
}
|
|
456
|
-
}
|
|
457
|
-
}
|
|
458
|
-
finally {
|
|
459
|
-
reader.releaseLock();
|
|
460
|
-
}
|
|
461
|
-
return {
|
|
462
|
-
content: fullContent,
|
|
463
|
-
toolCalls: toolCalls,
|
|
464
|
-
toolResults: toolResults,
|
|
465
|
-
};
|
|
466
|
-
}
|
|
467
|
-
/**
|
|
468
|
-
* Handle individual stream events
|
|
469
|
-
*/
|
|
470
|
-
handleStreamEvent(event, callbacks, internalCallbacks) {
|
|
471
|
-
switch (event.type) {
|
|
472
|
-
case "text":
|
|
473
|
-
if (event.content) {
|
|
474
|
-
callbacks?.onText?.(event.content);
|
|
475
|
-
internalCallbacks?.onText?.(event.content);
|
|
476
|
-
}
|
|
477
|
-
break;
|
|
478
|
-
case "tool-call":
|
|
479
|
-
if (event.toolCall) {
|
|
480
|
-
callbacks?.onToolCall?.(event.toolCall);
|
|
481
|
-
internalCallbacks?.onToolCall?.(event.toolCall);
|
|
482
|
-
}
|
|
483
|
-
break;
|
|
484
|
-
case "tool-result":
|
|
485
|
-
if (event.toolResult) {
|
|
486
|
-
callbacks?.onToolResult?.(event.toolResult);
|
|
487
|
-
internalCallbacks?.onToolResult?.(event.toolResult);
|
|
488
|
-
}
|
|
489
|
-
break;
|
|
490
|
-
case "error":
|
|
491
|
-
if (event.error) {
|
|
492
|
-
callbacks?.onError?.(event.error);
|
|
493
|
-
}
|
|
494
|
-
break;
|
|
495
|
-
case "metadata":
|
|
496
|
-
if (event.metadata) {
|
|
497
|
-
callbacks?.onMetadata?.(event.metadata);
|
|
498
|
-
}
|
|
499
|
-
break;
|
|
500
|
-
case "audio":
|
|
501
|
-
if (event.audio) {
|
|
502
|
-
callbacks?.onAudio?.(event.audio);
|
|
503
|
-
}
|
|
504
|
-
break;
|
|
505
|
-
case "thinking":
|
|
506
|
-
if (event.thinking) {
|
|
507
|
-
callbacks?.onThinking?.(event.thinking);
|
|
508
|
-
}
|
|
509
|
-
break;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
// ===========================================================================
|
|
513
|
-
// Agent API
|
|
514
|
-
// ===========================================================================
|
|
515
|
-
/**
|
|
516
|
-
* Execute an agent
|
|
517
|
-
*
|
|
518
|
-
* @example
|
|
519
|
-
* ```typescript
|
|
520
|
-
* const result = await client.executeAgent({
|
|
521
|
-
* agentId: 'customer-support',
|
|
522
|
-
* input: 'I need help with my order',
|
|
523
|
-
* sessionId: 'user-123',
|
|
524
|
-
* });
|
|
525
|
-
* console.log(result.data.content);
|
|
526
|
-
* ```
|
|
527
|
-
*/
|
|
528
|
-
async executeAgent(options, requestOptions) {
|
|
529
|
-
return this.request("POST", `/api/agents/${options.agentId}/execute`, options, requestOptions);
|
|
530
|
-
}
|
|
531
|
-
/**
|
|
532
|
-
* Stream agent execution
|
|
533
|
-
*/
|
|
534
|
-
async streamAgent(options, callbacks, requestOptions) {
|
|
535
|
-
return this.stream({
|
|
536
|
-
input: { text: options.input },
|
|
537
|
-
context: options.context,
|
|
538
|
-
...(options.tools ? { tools: options.tools.enabled } : {}),
|
|
539
|
-
}, callbacks, requestOptions);
|
|
540
|
-
}
|
|
541
|
-
/**
|
|
542
|
-
* List available agents
|
|
543
|
-
*/
|
|
544
|
-
async listAgents(requestOptions) {
|
|
545
|
-
return this.request("GET", "/api/agents", undefined, requestOptions);
|
|
546
|
-
}
|
|
547
|
-
/**
|
|
548
|
-
* Get agent details
|
|
549
|
-
*/
|
|
550
|
-
async getAgent(agentId, requestOptions) {
|
|
551
|
-
return this.request("GET", `/api/agents/${agentId}`, undefined, requestOptions);
|
|
552
|
-
}
|
|
553
|
-
// ===========================================================================
|
|
554
|
-
// Workflow API
|
|
555
|
-
// ===========================================================================
|
|
556
|
-
/**
|
|
557
|
-
* Execute a workflow
|
|
558
|
-
*
|
|
559
|
-
* @example
|
|
560
|
-
* ```typescript
|
|
561
|
-
* const result = await client.executeWorkflow({
|
|
562
|
-
* workflowId: 'data-pipeline',
|
|
563
|
-
* input: { data: [...] },
|
|
564
|
-
* });
|
|
565
|
-
*
|
|
566
|
-
* if (result.data.status === 'running') {
|
|
567
|
-
* // Poll for completion
|
|
568
|
-
* const status = await client.getWorkflowStatus(
|
|
569
|
-
* 'data-pipeline',
|
|
570
|
-
* result.data.runId
|
|
571
|
-
* );
|
|
572
|
-
* }
|
|
573
|
-
* ```
|
|
574
|
-
*/
|
|
575
|
-
async executeWorkflow(options, requestOptions) {
|
|
576
|
-
return this.request("POST", `/api/workflows/${options.workflowId}/execute`, options, requestOptions);
|
|
577
|
-
}
|
|
578
|
-
/**
|
|
579
|
-
* Resume a suspended workflow
|
|
580
|
-
*/
|
|
581
|
-
async resumeWorkflow(workflowId, resumeToken, resumeData, requestOptions) {
|
|
582
|
-
return this.request("POST", `/api/workflows/${workflowId}/resume`, { resumeToken, resumeData }, requestOptions);
|
|
583
|
-
}
|
|
584
|
-
/**
|
|
585
|
-
* Get workflow execution status
|
|
586
|
-
*/
|
|
587
|
-
async getWorkflowStatus(workflowId, runId, requestOptions) {
|
|
588
|
-
return this.request("GET", `/api/workflows/${workflowId}/runs/${runId}`, undefined, requestOptions);
|
|
589
|
-
}
|
|
590
|
-
/**
|
|
591
|
-
* Cancel workflow execution
|
|
592
|
-
*/
|
|
593
|
-
async cancelWorkflow(workflowId, runId, requestOptions) {
|
|
594
|
-
return this.request("POST", `/api/workflows/${workflowId}/runs/${runId}/cancel`, undefined, requestOptions);
|
|
595
|
-
}
|
|
596
|
-
/**
|
|
597
|
-
* List available workflows
|
|
598
|
-
*/
|
|
599
|
-
async listWorkflows(requestOptions) {
|
|
600
|
-
return this.request("GET", "/api/workflows", undefined, requestOptions);
|
|
601
|
-
}
|
|
602
|
-
/**
|
|
603
|
-
* Get workflow details
|
|
604
|
-
*/
|
|
605
|
-
async getWorkflow(workflowId, requestOptions) {
|
|
606
|
-
return this.request("GET", `/api/workflows/${workflowId}`, undefined, requestOptions);
|
|
607
|
-
}
|
|
608
|
-
// ===========================================================================
|
|
609
|
-
// Tools API
|
|
610
|
-
// ===========================================================================
|
|
611
|
-
/**
|
|
612
|
-
* List available tools
|
|
613
|
-
*
|
|
614
|
-
* @example
|
|
615
|
-
* ```typescript
|
|
616
|
-
* const tools = await client.listTools({ category: 'data' });
|
|
617
|
-
* console.log(tools.data);
|
|
618
|
-
* ```
|
|
619
|
-
*/
|
|
620
|
-
async listTools(options, requestOptions) {
|
|
621
|
-
const params = new URLSearchParams();
|
|
622
|
-
if (options?.category) {
|
|
623
|
-
params.set("category", options.category);
|
|
624
|
-
}
|
|
625
|
-
if (options?.serverId) {
|
|
626
|
-
params.set("serverId", options.serverId);
|
|
627
|
-
}
|
|
628
|
-
const query = params.toString();
|
|
629
|
-
return this.request("GET", `/api/tools${query ? `?${query}` : ""}`, undefined, requestOptions);
|
|
630
|
-
}
|
|
631
|
-
/**
|
|
632
|
-
* Execute a tool
|
|
633
|
-
*/
|
|
634
|
-
async executeTool(toolName, params, requestOptions) {
|
|
635
|
-
return this.request("POST", `/api/tools/${toolName}/execute`, { params }, requestOptions);
|
|
636
|
-
}
|
|
637
|
-
/**
|
|
638
|
-
* Get tool details
|
|
639
|
-
*/
|
|
640
|
-
async getTool(toolName, requestOptions) {
|
|
641
|
-
return this.request("GET", `/api/tools/${toolName}`, undefined, requestOptions);
|
|
642
|
-
}
|
|
643
|
-
// ===========================================================================
|
|
644
|
-
// Provider API
|
|
645
|
-
// ===========================================================================
|
|
646
|
-
/**
|
|
647
|
-
* List available providers
|
|
648
|
-
*/
|
|
649
|
-
async listProviders(requestOptions) {
|
|
650
|
-
return this.request("GET", "/api/providers", undefined, requestOptions);
|
|
651
|
-
}
|
|
652
|
-
/**
|
|
653
|
-
* Get provider status
|
|
654
|
-
*/
|
|
655
|
-
async getProviderStatus(providerName, requestOptions) {
|
|
656
|
-
return this.request("GET", `/api/providers/${providerName}/status`, undefined, requestOptions);
|
|
657
|
-
}
|
|
658
|
-
// ===========================================================================
|
|
659
|
-
// Health API
|
|
660
|
-
// ===========================================================================
|
|
661
|
-
/**
|
|
662
|
-
* Health check
|
|
663
|
-
*/
|
|
664
|
-
async health(requestOptions) {
|
|
665
|
-
return this.request("GET", "/api/health", undefined, requestOptions);
|
|
666
|
-
}
|
|
667
|
-
// ===========================================================================
|
|
668
|
-
// WebSocket Methods
|
|
669
|
-
// ===========================================================================
|
|
670
|
-
/**
|
|
671
|
-
* Connect to WebSocket for real-time communication
|
|
672
|
-
*
|
|
673
|
-
* @example
|
|
674
|
-
* ```typescript
|
|
675
|
-
* client.connectWebSocket({
|
|
676
|
-
* url: 'wss://api.example.com/ws',
|
|
677
|
-
* autoReconnect: true,
|
|
678
|
-
* });
|
|
679
|
-
*
|
|
680
|
-
* client.onWebSocketMessage('chat', (data) => {
|
|
681
|
-
* console.log('Chat message:', data);
|
|
682
|
-
* });
|
|
683
|
-
* ```
|
|
684
|
-
*/
|
|
685
|
-
connectWebSocket(options) {
|
|
686
|
-
if (typeof WebSocket === "undefined") {
|
|
687
|
-
throw new Error("WebSocket is not available in this environment. Please use a polyfill.");
|
|
688
|
-
}
|
|
689
|
-
const wsUrl = options?.url ?? `${this.config.wsUrl}/ws`;
|
|
690
|
-
const protocols = options?.protocols;
|
|
691
|
-
this.wsState = "connecting";
|
|
692
|
-
this.wsConnection = new WebSocket(wsUrl, protocols);
|
|
693
|
-
this.wsConnection.onopen = () => {
|
|
694
|
-
this.wsState = "connected";
|
|
695
|
-
this.log("WebSocket connected");
|
|
696
|
-
// Send auth if configured
|
|
697
|
-
if (this.config.apiKey || this.config.token) {
|
|
698
|
-
this.sendWebSocketMessage({
|
|
699
|
-
type: "auth",
|
|
700
|
-
apiKey: this.config.apiKey,
|
|
701
|
-
token: this.config.token,
|
|
702
|
-
});
|
|
703
|
-
}
|
|
704
|
-
};
|
|
705
|
-
this.wsConnection.onmessage = (event) => {
|
|
706
|
-
try {
|
|
707
|
-
const data = JSON.parse(event.data);
|
|
708
|
-
const messageType = data.type ?? "message";
|
|
709
|
-
const handlers = this.wsMessageHandlers.get(messageType);
|
|
710
|
-
if (handlers) {
|
|
711
|
-
handlers.forEach((handler) => handler(data));
|
|
712
|
-
}
|
|
713
|
-
// Also notify general message handlers
|
|
714
|
-
const allHandlers = this.wsMessageHandlers.get("*");
|
|
715
|
-
if (allHandlers) {
|
|
716
|
-
allHandlers.forEach((handler) => handler(data));
|
|
717
|
-
}
|
|
718
|
-
}
|
|
719
|
-
catch {
|
|
720
|
-
this.log("Failed to parse WebSocket message", event.data);
|
|
721
|
-
}
|
|
722
|
-
};
|
|
723
|
-
this.wsConnection.onclose = () => {
|
|
724
|
-
this.wsState = "disconnected";
|
|
725
|
-
this.log("WebSocket disconnected");
|
|
726
|
-
if (options?.autoReconnect) {
|
|
727
|
-
const interval = options.reconnectInterval ?? 5000;
|
|
728
|
-
setTimeout(() => {
|
|
729
|
-
if (this.wsState === "disconnected") {
|
|
730
|
-
this.connectWebSocket(options);
|
|
731
|
-
}
|
|
732
|
-
}, interval);
|
|
733
|
-
}
|
|
734
|
-
};
|
|
735
|
-
this.wsConnection.onerror = (error) => {
|
|
736
|
-
this.log("WebSocket error", error);
|
|
737
|
-
};
|
|
738
|
-
}
|
|
739
|
-
/**
|
|
740
|
-
* Disconnect WebSocket
|
|
741
|
-
*/
|
|
742
|
-
disconnectWebSocket() {
|
|
743
|
-
if (this.wsConnection) {
|
|
744
|
-
this.wsState = "disconnecting";
|
|
745
|
-
this.wsConnection.close();
|
|
746
|
-
this.wsConnection = null;
|
|
747
|
-
}
|
|
748
|
-
}
|
|
749
|
-
/**
|
|
750
|
-
* Send message over WebSocket
|
|
751
|
-
*/
|
|
752
|
-
sendWebSocketMessage(data) {
|
|
753
|
-
if (this.wsConnection?.readyState === WebSocket.OPEN) {
|
|
754
|
-
this.wsConnection.send(JSON.stringify(data));
|
|
755
|
-
}
|
|
756
|
-
else {
|
|
757
|
-
throw new Error("WebSocket is not connected");
|
|
758
|
-
}
|
|
759
|
-
}
|
|
760
|
-
/**
|
|
761
|
-
* Register WebSocket message handler
|
|
762
|
-
*/
|
|
763
|
-
onWebSocketMessage(messageType, handler) {
|
|
764
|
-
if (!this.wsMessageHandlers.has(messageType)) {
|
|
765
|
-
this.wsMessageHandlers.set(messageType, new Set());
|
|
766
|
-
}
|
|
767
|
-
const handlers = this.wsMessageHandlers.get(messageType);
|
|
768
|
-
if (handlers) {
|
|
769
|
-
handlers.add(handler);
|
|
770
|
-
}
|
|
771
|
-
// Return unsubscribe function
|
|
772
|
-
return () => {
|
|
773
|
-
this.wsMessageHandlers.get(messageType)?.delete(handler);
|
|
774
|
-
};
|
|
775
|
-
}
|
|
776
|
-
/**
|
|
777
|
-
* Get WebSocket connection state
|
|
778
|
-
*/
|
|
779
|
-
getWebSocketState() {
|
|
780
|
-
return this.wsState;
|
|
781
|
-
}
|
|
782
|
-
// ===========================================================================
|
|
783
|
-
// Configuration Methods
|
|
784
|
-
// ===========================================================================
|
|
785
|
-
/**
|
|
786
|
-
* Update client configuration
|
|
787
|
-
*/
|
|
788
|
-
updateConfig(config) {
|
|
789
|
-
if (config.baseUrl) {
|
|
790
|
-
this.config.baseUrl = config.baseUrl.replace(/\/$/, "");
|
|
791
|
-
}
|
|
792
|
-
if (config.apiKey !== undefined) {
|
|
793
|
-
this.config.apiKey = config.apiKey;
|
|
794
|
-
}
|
|
795
|
-
if (config.token !== undefined) {
|
|
796
|
-
this.config.token = config.token;
|
|
797
|
-
}
|
|
798
|
-
if (config.timeout !== undefined) {
|
|
799
|
-
this.config.timeout = config.timeout;
|
|
800
|
-
}
|
|
801
|
-
if (config.headers) {
|
|
802
|
-
this.config.headers = { ...this.config.headers, ...config.headers };
|
|
803
|
-
}
|
|
804
|
-
if (config.retry) {
|
|
805
|
-
this.config.retry = { ...this.config.retry, ...config.retry };
|
|
806
|
-
}
|
|
807
|
-
if (config.debug !== undefined) {
|
|
808
|
-
this.config.debug = config.debug;
|
|
809
|
-
}
|
|
810
|
-
}
|
|
811
|
-
/**
|
|
812
|
-
* Get current configuration (readonly)
|
|
813
|
-
*/
|
|
814
|
-
getConfig() {
|
|
815
|
-
return { ...this.config };
|
|
816
|
-
}
|
|
817
|
-
}
|
|
818
|
-
// =============================================================================
|
|
819
|
-
// Factory Function
|
|
820
|
-
// =============================================================================
|
|
821
|
-
/**
|
|
822
|
-
* Create a new NeuroLink client instance
|
|
823
|
-
*
|
|
824
|
-
* @example
|
|
825
|
-
* ```typescript
|
|
826
|
-
* import { createClient } from '@neurolink/client';
|
|
827
|
-
*
|
|
828
|
-
* const client = createClient({
|
|
829
|
-
* baseUrl: 'https://api.neurolink.example.com',
|
|
830
|
-
* apiKey: process.env.NEUROLINK_API_KEY,
|
|
831
|
-
* debug: true,
|
|
832
|
-
* });
|
|
833
|
-
* ```
|
|
834
|
-
*/
|
|
835
|
-
export function createClient(config) {
|
|
836
|
-
return new NeuroLinkClient(config);
|
|
837
|
-
}
|