@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,590 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Excel Processor
|
|
3
|
-
*
|
|
4
|
-
* Handles downloading, validating, and processing Excel files (.xlsx, .xls).
|
|
5
|
-
* Uses exceljs library for parsing with streaming support for large files.
|
|
6
|
-
*
|
|
7
|
-
* Key features:
|
|
8
|
-
* - Supports both .xlsx and legacy .xls formats
|
|
9
|
-
* - Extracts worksheet data with headers
|
|
10
|
-
* - Handles complex cell types (formulas, rich text, dates)
|
|
11
|
-
* - Respects configurable row and sheet limits
|
|
12
|
-
* - Provides truncation metadata when limits are exceeded
|
|
13
|
-
*
|
|
14
|
-
* @module processors/document/ExcelProcessor
|
|
15
|
-
*
|
|
16
|
-
* @example
|
|
17
|
-
* ```typescript
|
|
18
|
-
* import { excelProcessor, processExcel, isExcelFile } from "./ExcelProcessor.js";
|
|
19
|
-
*
|
|
20
|
-
* // Check if a file is an Excel file
|
|
21
|
-
* if (isExcelFile(fileInfo.mimetype, fileInfo.name)) {
|
|
22
|
-
* // Process the Excel file
|
|
23
|
-
* const result = await processExcel(fileInfo, {
|
|
24
|
-
* authHeaders: { Authorization: "Bearer token" },
|
|
25
|
-
* });
|
|
26
|
-
*
|
|
27
|
-
* if (result.success) {
|
|
28
|
-
* console.log(`Processed ${result.data.sheetCount} sheets`);
|
|
29
|
-
* console.log(`Total rows: ${result.data.totalRows}`);
|
|
30
|
-
*
|
|
31
|
-
* for (const sheet of result.data.worksheets) {
|
|
32
|
-
* console.log(`Sheet: ${sheet.name}, Rows: ${sheet.rowCount}`);
|
|
33
|
-
* }
|
|
34
|
-
* }
|
|
35
|
-
* }
|
|
36
|
-
* ```
|
|
37
|
-
*/
|
|
38
|
-
import ExcelJS from "exceljs";
|
|
39
|
-
const { Workbook } = ExcelJS;
|
|
40
|
-
import { BaseFileProcessor } from "../base/BaseFileProcessor.js";
|
|
41
|
-
import { SIZE_LIMITS } from "../config/index.js";
|
|
42
|
-
import { FileErrorCode } from "../errors/index.js";
|
|
43
|
-
// =============================================================================
|
|
44
|
-
// CONSTANTS
|
|
45
|
-
// =============================================================================
|
|
46
|
-
/** Supported MIME types for Excel files */
|
|
47
|
-
const SUPPORTED_EXCEL_TYPES = [
|
|
48
|
-
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", // .xlsx
|
|
49
|
-
"application/vnd.ms-excel", // .xls
|
|
50
|
-
];
|
|
51
|
-
/** Supported file extensions for Excel files */
|
|
52
|
-
const SUPPORTED_EXCEL_EXTENSIONS = [".xlsx", ".xls"];
|
|
53
|
-
// =============================================================================
|
|
54
|
-
// EXCEL PROCESSOR CLASS
|
|
55
|
-
// =============================================================================
|
|
56
|
-
/**
|
|
57
|
-
* Excel Processor - handles .xlsx and .xls files.
|
|
58
|
-
* Uses exceljs library for parsing with support for large files.
|
|
59
|
-
*
|
|
60
|
-
* Features:
|
|
61
|
-
* - ZIP format validation (XLSX files are ZIP archives)
|
|
62
|
-
* - Sheet count limiting (MAX_EXCEL_SHEETS)
|
|
63
|
-
* - Row count limiting per sheet (MAX_EXCEL_ROWS)
|
|
64
|
-
* - Cell type handling (text, numbers, formulas, dates, rich text)
|
|
65
|
-
*
|
|
66
|
-
* @example
|
|
67
|
-
* ```typescript
|
|
68
|
-
* const processor = new ExcelProcessor();
|
|
69
|
-
*
|
|
70
|
-
* // Process a file
|
|
71
|
-
* const result = await processor.processFile(fileInfo, {
|
|
72
|
-
* authHeaders: { Authorization: "Bearer token" },
|
|
73
|
-
* });
|
|
74
|
-
*
|
|
75
|
-
* if (result.success) {
|
|
76
|
-
* console.log(`Sheets: ${result.data.sheetCount}`);
|
|
77
|
-
* console.log(`Truncated: ${result.data.truncated}`);
|
|
78
|
-
* }
|
|
79
|
-
* ```
|
|
80
|
-
*/
|
|
81
|
-
export class ExcelProcessor extends BaseFileProcessor {
|
|
82
|
-
constructor() {
|
|
83
|
-
super({
|
|
84
|
-
maxSizeMB: SIZE_LIMITS.EXCEL_MAX_MB,
|
|
85
|
-
timeoutMs: 60000, // Excel parsing can take longer than text files
|
|
86
|
-
supportedMimeTypes: [...SUPPORTED_EXCEL_TYPES],
|
|
87
|
-
supportedExtensions: [...SUPPORTED_EXCEL_EXTENSIONS],
|
|
88
|
-
fileTypeName: "Excel",
|
|
89
|
-
defaultFilename: "spreadsheet.xlsx",
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
// ===========================================================================
|
|
93
|
-
// VALIDATION
|
|
94
|
-
// ===========================================================================
|
|
95
|
-
/**
|
|
96
|
-
* Validate downloaded Excel file has correct format.
|
|
97
|
-
* XLSX files are ZIP archives starting with PK signature.
|
|
98
|
-
*
|
|
99
|
-
* @param buffer - Downloaded file content
|
|
100
|
-
* @param _fileInfo - Original file information (unused but required by interface)
|
|
101
|
-
* @returns null if valid, error message if invalid
|
|
102
|
-
*/
|
|
103
|
-
async validateDownloadedFile(buffer, _fileInfo) {
|
|
104
|
-
// Check minimum size
|
|
105
|
-
if (buffer.length < 4) {
|
|
106
|
-
return "Invalid Excel file - file too small";
|
|
107
|
-
}
|
|
108
|
-
// XLSX files are ZIP archives (PK signature: 0x50 0x4B)
|
|
109
|
-
const pkSignature = buffer.subarray(0, 2).toString("ascii");
|
|
110
|
-
if (pkSignature !== "PK") {
|
|
111
|
-
// Provide helpful error for common issues
|
|
112
|
-
const preview = buffer
|
|
113
|
-
.subarray(0, 100)
|
|
114
|
-
.toString("utf8")
|
|
115
|
-
.substring(0, 100);
|
|
116
|
-
if (preview.includes("<!DOCTYPE") || preview.includes("<html")) {
|
|
117
|
-
return "Invalid Excel file - received HTML response instead of file content";
|
|
118
|
-
}
|
|
119
|
-
return "Invalid Excel file - not a valid XLSX format (missing PK signature)";
|
|
120
|
-
}
|
|
121
|
-
return null;
|
|
122
|
-
}
|
|
123
|
-
// ===========================================================================
|
|
124
|
-
// PROCESSING
|
|
125
|
-
// ===========================================================================
|
|
126
|
-
/**
|
|
127
|
-
* Build processed result stub.
|
|
128
|
-
* Note: This is a synchronous stub - actual parsing happens in processFile override.
|
|
129
|
-
*
|
|
130
|
-
* @param buffer - Downloaded file content
|
|
131
|
-
* @param fileInfo - Original file information
|
|
132
|
-
* @returns Empty ProcessedExcel structure (populated by processFile)
|
|
133
|
-
*/
|
|
134
|
-
buildProcessedResult(buffer, fileInfo) {
|
|
135
|
-
return {
|
|
136
|
-
worksheets: [],
|
|
137
|
-
buffer,
|
|
138
|
-
mimetype: fileInfo.mimetype ||
|
|
139
|
-
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
140
|
-
size: fileInfo.size,
|
|
141
|
-
filename: this.getFilename(fileInfo),
|
|
142
|
-
sheetCount: 0,
|
|
143
|
-
totalRows: 0,
|
|
144
|
-
truncated: false,
|
|
145
|
-
truncatedSheets: [],
|
|
146
|
-
};
|
|
147
|
-
}
|
|
148
|
-
/**
|
|
149
|
-
* Override processFile for async Excel parsing with exceljs.
|
|
150
|
-
* This override is necessary because exceljs uses async parsing.
|
|
151
|
-
*
|
|
152
|
-
* @param fileInfo - File information (can include URL or buffer)
|
|
153
|
-
* @param options - Optional processing options (auth headers, timeout, etc.)
|
|
154
|
-
* @returns Processing result with parsed Excel data or error
|
|
155
|
-
*/
|
|
156
|
-
async processFile(fileInfo, options) {
|
|
157
|
-
try {
|
|
158
|
-
// Step 1: Validate file type and size
|
|
159
|
-
const validationResult = this.validateFileWithResult(fileInfo);
|
|
160
|
-
if (!validationResult.success) {
|
|
161
|
-
return {
|
|
162
|
-
success: false,
|
|
163
|
-
error: validationResult.error,
|
|
164
|
-
};
|
|
165
|
-
}
|
|
166
|
-
// Step 2: Get file buffer (from direct buffer or download from URL)
|
|
167
|
-
let buffer;
|
|
168
|
-
if (fileInfo.buffer) {
|
|
169
|
-
buffer = fileInfo.buffer;
|
|
170
|
-
}
|
|
171
|
-
else if (fileInfo.url) {
|
|
172
|
-
const downloadResult = await this.downloadFileWithRetry(fileInfo, options);
|
|
173
|
-
if (!downloadResult.success) {
|
|
174
|
-
return {
|
|
175
|
-
success: false,
|
|
176
|
-
error: downloadResult.error,
|
|
177
|
-
};
|
|
178
|
-
}
|
|
179
|
-
if (!downloadResult.data) {
|
|
180
|
-
return {
|
|
181
|
-
success: false,
|
|
182
|
-
error: this.createError(FileErrorCode.DOWNLOAD_FAILED, {
|
|
183
|
-
reason: "Download succeeded but returned no data",
|
|
184
|
-
}),
|
|
185
|
-
};
|
|
186
|
-
}
|
|
187
|
-
buffer = downloadResult.data;
|
|
188
|
-
}
|
|
189
|
-
else {
|
|
190
|
-
return {
|
|
191
|
-
success: false,
|
|
192
|
-
error: this.createError(FileErrorCode.DOWNLOAD_FAILED, {
|
|
193
|
-
reason: "No buffer or URL provided for file",
|
|
194
|
-
}),
|
|
195
|
-
};
|
|
196
|
-
}
|
|
197
|
-
// Step 3: Validate downloaded file (magic bytes check)
|
|
198
|
-
const postValidationResult = await this.validateDownloadedFileWithResult(buffer, fileInfo);
|
|
199
|
-
if (!postValidationResult.success) {
|
|
200
|
-
return {
|
|
201
|
-
success: false,
|
|
202
|
-
error: postValidationResult.error,
|
|
203
|
-
};
|
|
204
|
-
}
|
|
205
|
-
// Step 4: Parse Excel file asynchronously using exceljs
|
|
206
|
-
const workbook = await this.parseWorkbook(buffer);
|
|
207
|
-
// Step 5: Extract worksheet data with limits
|
|
208
|
-
const { worksheets, truncated, truncatedSheets } = this.extractWorksheets(workbook);
|
|
209
|
-
// Calculate total rows across all worksheets
|
|
210
|
-
const totalRows = worksheets.reduce((sum, sheet) => sum + sheet.rowCount, 0);
|
|
211
|
-
// Build final result
|
|
212
|
-
return {
|
|
213
|
-
success: true,
|
|
214
|
-
data: {
|
|
215
|
-
worksheets,
|
|
216
|
-
buffer,
|
|
217
|
-
mimetype: fileInfo.mimetype ||
|
|
218
|
-
"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet",
|
|
219
|
-
size: fileInfo.size,
|
|
220
|
-
filename: this.getFilename(fileInfo),
|
|
221
|
-
sheetCount: worksheets.length,
|
|
222
|
-
totalRows,
|
|
223
|
-
truncated,
|
|
224
|
-
truncatedSheets,
|
|
225
|
-
},
|
|
226
|
-
};
|
|
227
|
-
}
|
|
228
|
-
catch (error) {
|
|
229
|
-
return {
|
|
230
|
-
success: false,
|
|
231
|
-
error: this.createError(FileErrorCode.PROCESSING_FAILED, {
|
|
232
|
-
fileType: "Excel",
|
|
233
|
-
error: error instanceof Error ? error.message : String(error),
|
|
234
|
-
}, error instanceof Error ? error : undefined),
|
|
235
|
-
};
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
// ===========================================================================
|
|
239
|
-
// PRIVATE HELPER METHODS
|
|
240
|
-
// ===========================================================================
|
|
241
|
-
/**
|
|
242
|
-
* Parse Excel buffer into workbook using exceljs.
|
|
243
|
-
*
|
|
244
|
-
* @param buffer - Excel file content
|
|
245
|
-
* @returns Parsed ExcelJS Workbook
|
|
246
|
-
*/
|
|
247
|
-
async parseWorkbook(buffer) {
|
|
248
|
-
const workbook = new Workbook();
|
|
249
|
-
// ExcelJS load() types expect Buffer but Node 22+ Buffer<ArrayBufferLike>
|
|
250
|
-
// is not directly assignable. Extract a clean ArrayBuffer for the exact
|
|
251
|
-
// byte range via slice, then cast for type compatibility.
|
|
252
|
-
await workbook.xlsx.load(buffer.buffer.slice(buffer.byteOffset, buffer.byteOffset + buffer.byteLength));
|
|
253
|
-
return workbook;
|
|
254
|
-
}
|
|
255
|
-
/**
|
|
256
|
-
* Extract worksheet data from workbook with row and sheet limits.
|
|
257
|
-
*
|
|
258
|
-
* @param workbook - Parsed ExcelJS Workbook
|
|
259
|
-
* @returns Extracted worksheets with truncation metadata
|
|
260
|
-
*/
|
|
261
|
-
extractWorksheets(workbook) {
|
|
262
|
-
const worksheets = [];
|
|
263
|
-
const truncatedSheets = [];
|
|
264
|
-
let truncated = false;
|
|
265
|
-
const maxRows = SIZE_LIMITS.EXCEL_MAX_ROWS;
|
|
266
|
-
const maxSheets = SIZE_LIMITS.EXCEL_MAX_SHEETS;
|
|
267
|
-
let sheetIndex = 0;
|
|
268
|
-
for (const worksheet of workbook.worksheets) {
|
|
269
|
-
// Check sheet limit
|
|
270
|
-
if (sheetIndex >= maxSheets) {
|
|
271
|
-
truncated = true;
|
|
272
|
-
break;
|
|
273
|
-
}
|
|
274
|
-
const rows = [];
|
|
275
|
-
let headers = [];
|
|
276
|
-
let rowIndex = 0;
|
|
277
|
-
let hitLimit = false;
|
|
278
|
-
worksheet.eachRow((row, rowNumber) => {
|
|
279
|
-
if (hitLimit) {
|
|
280
|
-
return;
|
|
281
|
-
}
|
|
282
|
-
// Check row limit
|
|
283
|
-
if (rowIndex >= maxRows) {
|
|
284
|
-
if (!truncatedSheets.includes(worksheet.name)) {
|
|
285
|
-
truncatedSheets.push(worksheet.name);
|
|
286
|
-
}
|
|
287
|
-
truncated = true;
|
|
288
|
-
hitLimit = true;
|
|
289
|
-
return;
|
|
290
|
-
}
|
|
291
|
-
// ExcelJS row.values is 1-indexed, so first element is undefined
|
|
292
|
-
const rowValues = row.values;
|
|
293
|
-
// Convert cell values to primitive types and remove the first undefined element
|
|
294
|
-
const cleanRow = rowValues
|
|
295
|
-
.slice(1)
|
|
296
|
-
.map((cell) => this.getCellValue(cell));
|
|
297
|
-
// Extract headers from first row
|
|
298
|
-
if (rowNumber === 1) {
|
|
299
|
-
headers = cleanRow.map((v) => String(v ?? ""));
|
|
300
|
-
}
|
|
301
|
-
rows.push(cleanRow);
|
|
302
|
-
rowIndex++;
|
|
303
|
-
});
|
|
304
|
-
worksheets.push({
|
|
305
|
-
name: worksheet.name,
|
|
306
|
-
rows,
|
|
307
|
-
headers,
|
|
308
|
-
rowCount: rows.length,
|
|
309
|
-
columnCount: headers.length || (rows[0]?.length ?? 0),
|
|
310
|
-
});
|
|
311
|
-
sheetIndex++;
|
|
312
|
-
}
|
|
313
|
-
return { worksheets, truncated, truncatedSheets };
|
|
314
|
-
}
|
|
315
|
-
/**
|
|
316
|
-
* Convert an Excel cell value to a primitive type.
|
|
317
|
-
* Handles various cell types including formulas, rich text, and dates.
|
|
318
|
-
*
|
|
319
|
-
* @param cell - ExcelJS cell value (can be various types)
|
|
320
|
-
* @returns Primitive value (string, number, boolean, or null)
|
|
321
|
-
*/
|
|
322
|
-
getCellValue(cell) {
|
|
323
|
-
if (cell === null || cell === undefined) {
|
|
324
|
-
return null;
|
|
325
|
-
}
|
|
326
|
-
// Handle primitive types directly
|
|
327
|
-
if (typeof cell === "string" ||
|
|
328
|
-
typeof cell === "number" ||
|
|
329
|
-
typeof cell === "boolean") {
|
|
330
|
-
return cell;
|
|
331
|
-
}
|
|
332
|
-
// Handle Date objects
|
|
333
|
-
if (cell instanceof Date) {
|
|
334
|
-
return cell.toISOString();
|
|
335
|
-
}
|
|
336
|
-
// Handle ExcelJS cell objects
|
|
337
|
-
if (typeof cell === "object" && cell !== null) {
|
|
338
|
-
const cellObj = cell;
|
|
339
|
-
// Formula result (prioritize result over formula string)
|
|
340
|
-
if ("result" in cellObj && cellObj.result !== undefined) {
|
|
341
|
-
if (typeof cellObj.result === "object" && cellObj.result !== null) {
|
|
342
|
-
// Handle error values like { error: '#VALUE!' }
|
|
343
|
-
if ("error" in cellObj.result) {
|
|
344
|
-
return String(cellObj.result.error);
|
|
345
|
-
}
|
|
346
|
-
}
|
|
347
|
-
return typeof cellObj.result === "string" ||
|
|
348
|
-
typeof cellObj.result === "number" ||
|
|
349
|
-
typeof cellObj.result === "boolean"
|
|
350
|
-
? cellObj.result
|
|
351
|
-
: String(cellObj.result);
|
|
352
|
-
}
|
|
353
|
-
// Rich text
|
|
354
|
-
if ("richText" in cellObj && Array.isArray(cellObj.richText)) {
|
|
355
|
-
return this.extractRichText(cellObj.richText);
|
|
356
|
-
}
|
|
357
|
-
// Simple text value
|
|
358
|
-
if ("text" in cellObj && cellObj.text !== undefined) {
|
|
359
|
-
return cellObj.text;
|
|
360
|
-
}
|
|
361
|
-
// Hyperlink (return the display text or URL)
|
|
362
|
-
if ("hyperlink" in cellObj && cellObj.hyperlink) {
|
|
363
|
-
return cellObj.text || cellObj.hyperlink;
|
|
364
|
-
}
|
|
365
|
-
}
|
|
366
|
-
// Fallback: convert to string
|
|
367
|
-
return String(cell);
|
|
368
|
-
}
|
|
369
|
-
/**
|
|
370
|
-
* Extract text from rich text cell format.
|
|
371
|
-
* Rich text cells contain an array of text fragments with formatting.
|
|
372
|
-
*
|
|
373
|
-
* @param richText - Array of rich text fragments
|
|
374
|
-
* @returns Concatenated plain text
|
|
375
|
-
*/
|
|
376
|
-
extractRichText(richText) {
|
|
377
|
-
if (!Array.isArray(richText)) {
|
|
378
|
-
return "";
|
|
379
|
-
}
|
|
380
|
-
return richText
|
|
381
|
-
.map((rt) => {
|
|
382
|
-
if (typeof rt === "object" && rt !== null && "text" in rt) {
|
|
383
|
-
return rt.text || "";
|
|
384
|
-
}
|
|
385
|
-
return "";
|
|
386
|
-
})
|
|
387
|
-
.join("");
|
|
388
|
-
}
|
|
389
|
-
// ===========================================================================
|
|
390
|
-
// TARGETED EXTRACTION API
|
|
391
|
-
// ===========================================================================
|
|
392
|
-
/**
|
|
393
|
-
* Extract a specific range from a spreadsheet.
|
|
394
|
-
*
|
|
395
|
-
* Called by the `extract_file_content` tool for targeted data access.
|
|
396
|
-
* Returns TSV-formatted text for the specified sheet, row range, and columns.
|
|
397
|
-
*
|
|
398
|
-
* @param buffer - Excel file buffer
|
|
399
|
-
* @param sheet - Sheet name or 0-based index (default: first sheet)
|
|
400
|
-
* @param rowStart - Starting row (1-indexed, default: 1)
|
|
401
|
-
* @param rowEnd - Ending row (1-indexed, default: all rows)
|
|
402
|
-
* @param columns - Specific column letters to include (e.g., ["A", "B", "D"])
|
|
403
|
-
* @returns TSV-formatted string with the extracted data
|
|
404
|
-
*/
|
|
405
|
-
async extractSheetRange(buffer, sheet, rowStart = 1, rowEnd, columns) {
|
|
406
|
-
const workbook = await this.parseWorkbook(buffer);
|
|
407
|
-
// Resolve the target worksheet
|
|
408
|
-
let worksheet;
|
|
409
|
-
if (typeof sheet === "number") {
|
|
410
|
-
// exceljs worksheets are 1-indexed
|
|
411
|
-
worksheet = workbook.worksheets[sheet];
|
|
412
|
-
}
|
|
413
|
-
else if (typeof sheet === "string") {
|
|
414
|
-
worksheet = workbook.getWorksheet(sheet);
|
|
415
|
-
}
|
|
416
|
-
else {
|
|
417
|
-
worksheet = workbook.worksheets[0];
|
|
418
|
-
}
|
|
419
|
-
if (!worksheet) {
|
|
420
|
-
const sheetNames = workbook.worksheets.map((ws) => ws.name).join(", ");
|
|
421
|
-
return `Sheet not found. Available sheets: ${sheetNames}`;
|
|
422
|
-
}
|
|
423
|
-
// Convert column letters to 1-based column indices if specified
|
|
424
|
-
const columnIndices = columns?.map((col) => {
|
|
425
|
-
let index = 0;
|
|
426
|
-
for (let i = 0; i < col.length; i++) {
|
|
427
|
-
index = index * 26 + col.toUpperCase().charCodeAt(i) - 64;
|
|
428
|
-
}
|
|
429
|
-
return index;
|
|
430
|
-
});
|
|
431
|
-
const lines = [];
|
|
432
|
-
lines.push(`## Sheet: ${worksheet.name}`);
|
|
433
|
-
const actualRowEnd = rowEnd ?? worksheet.rowCount;
|
|
434
|
-
let rowCount = 0;
|
|
435
|
-
worksheet.eachRow({ includeEmpty: false }, (row, rowNumber) => {
|
|
436
|
-
if (rowNumber < rowStart || rowNumber > actualRowEnd) {
|
|
437
|
-
return;
|
|
438
|
-
}
|
|
439
|
-
rowCount++;
|
|
440
|
-
const values = [];
|
|
441
|
-
row.eachCell({ includeEmpty: true }, (cell, colNumber) => {
|
|
442
|
-
if (columnIndices && !columnIndices.includes(colNumber)) {
|
|
443
|
-
return;
|
|
444
|
-
}
|
|
445
|
-
const val = this.getCellValue(cell.value);
|
|
446
|
-
values.push(val === null ? "" : String(val));
|
|
447
|
-
});
|
|
448
|
-
// Add row number prefix for easy reference
|
|
449
|
-
lines.push(`${rowNumber}\t${values.join("\t")}`);
|
|
450
|
-
});
|
|
451
|
-
if (rowCount === 0) {
|
|
452
|
-
lines.push(`(No data in rows ${rowStart}-${actualRowEnd})`);
|
|
453
|
-
}
|
|
454
|
-
else {
|
|
455
|
-
lines.push(`\n(${rowCount} rows, range ${rowStart}-${actualRowEnd})`);
|
|
456
|
-
}
|
|
457
|
-
return lines.join("\n");
|
|
458
|
-
}
|
|
459
|
-
}
|
|
460
|
-
// =============================================================================
|
|
461
|
-
// SINGLETON INSTANCE
|
|
462
|
-
// =============================================================================
|
|
463
|
-
/**
|
|
464
|
-
* Singleton Excel processor instance.
|
|
465
|
-
* Use this for standard Excel processing operations.
|
|
466
|
-
*
|
|
467
|
-
* @example
|
|
468
|
-
* ```typescript
|
|
469
|
-
* import { excelProcessor } from "./ExcelProcessor.js";
|
|
470
|
-
*
|
|
471
|
-
* const result = await excelProcessor.processFile(fileInfo);
|
|
472
|
-
* ```
|
|
473
|
-
*/
|
|
474
|
-
export const excelProcessor = new ExcelProcessor();
|
|
475
|
-
// =============================================================================
|
|
476
|
-
// HELPER FUNCTIONS
|
|
477
|
-
// =============================================================================
|
|
478
|
-
/**
|
|
479
|
-
* Check if a file is an Excel file.
|
|
480
|
-
* Matches by MIME type or file extension.
|
|
481
|
-
*
|
|
482
|
-
* @param mimetype - MIME type of the file
|
|
483
|
-
* @param filename - Filename (for extension-based detection)
|
|
484
|
-
* @returns true if the file is an Excel file
|
|
485
|
-
*
|
|
486
|
-
* @example
|
|
487
|
-
* ```typescript
|
|
488
|
-
* if (isExcelFile("application/vnd.ms-excel", "data.xls")) {
|
|
489
|
-
* // Process as Excel
|
|
490
|
-
* }
|
|
491
|
-
*
|
|
492
|
-
* if (isExcelFile("", "report.xlsx")) {
|
|
493
|
-
* // Also matches by extension
|
|
494
|
-
* }
|
|
495
|
-
* ```
|
|
496
|
-
*/
|
|
497
|
-
export function isExcelFile(mimetype, filename) {
|
|
498
|
-
return excelProcessor.isFileSupported(mimetype, filename);
|
|
499
|
-
}
|
|
500
|
-
/**
|
|
501
|
-
* Validate Excel file size against configured limit.
|
|
502
|
-
*
|
|
503
|
-
* @param sizeBytes - File size in bytes
|
|
504
|
-
* @returns true if size is within the Excel file limit
|
|
505
|
-
*
|
|
506
|
-
* @example
|
|
507
|
-
* ```typescript
|
|
508
|
-
* if (!validateExcelSize(fileInfo.size)) {
|
|
509
|
-
* console.error(`File too large: max ${SIZE_LIMITS.EXCEL_MAX_MB}MB`);
|
|
510
|
-
* }
|
|
511
|
-
* ```
|
|
512
|
-
*/
|
|
513
|
-
export function validateExcelSize(sizeBytes) {
|
|
514
|
-
const maxBytes = SIZE_LIMITS.EXCEL_MAX_MB * 1024 * 1024;
|
|
515
|
-
return sizeBytes <= maxBytes;
|
|
516
|
-
}
|
|
517
|
-
/**
|
|
518
|
-
* Process a single Excel file.
|
|
519
|
-
* Convenience function that uses the singleton processor.
|
|
520
|
-
*
|
|
521
|
-
* @param fileInfo - File information (can include URL or buffer)
|
|
522
|
-
* @param options - Optional processing options (auth headers, timeout, etc.)
|
|
523
|
-
* @returns Processing result with parsed Excel data or error
|
|
524
|
-
*
|
|
525
|
-
* @example
|
|
526
|
-
* ```typescript
|
|
527
|
-
* import { processExcel } from "./ExcelProcessor.js";
|
|
528
|
-
*
|
|
529
|
-
* const result = await processExcel(fileInfo, {
|
|
530
|
-
* authHeaders: { Authorization: "Bearer token" },
|
|
531
|
-
* timeout: 120000, // 2 minutes for large files
|
|
532
|
-
* });
|
|
533
|
-
*
|
|
534
|
-
* if (result.success) {
|
|
535
|
-
* const { worksheets, totalRows, truncated } = result.data;
|
|
536
|
-
* console.log(`Extracted ${totalRows} rows from ${worksheets.length} sheets`);
|
|
537
|
-
*
|
|
538
|
-
* if (truncated) {
|
|
539
|
-
* console.warn("Some data was truncated due to size limits");
|
|
540
|
-
* }
|
|
541
|
-
* } else {
|
|
542
|
-
* console.error(`Processing failed: ${result.error?.userMessage}`);
|
|
543
|
-
* }
|
|
544
|
-
* ```
|
|
545
|
-
*/
|
|
546
|
-
export async function processExcel(fileInfo, options) {
|
|
547
|
-
return excelProcessor.processFile(fileInfo, options);
|
|
548
|
-
}
|
|
549
|
-
/**
|
|
550
|
-
* Get Excel max size in MB.
|
|
551
|
-
*
|
|
552
|
-
* @returns Maximum Excel file size in megabytes
|
|
553
|
-
*
|
|
554
|
-
* @example
|
|
555
|
-
* ```typescript
|
|
556
|
-
* const maxSize = getExcelMaxSizeMB(); // 10
|
|
557
|
-
* console.log(`Maximum Excel file size: ${maxSize}MB`);
|
|
558
|
-
* ```
|
|
559
|
-
*/
|
|
560
|
-
export function getExcelMaxSizeMB() {
|
|
561
|
-
return SIZE_LIMITS.EXCEL_MAX_MB;
|
|
562
|
-
}
|
|
563
|
-
/**
|
|
564
|
-
* Get Excel max rows per sheet.
|
|
565
|
-
*
|
|
566
|
-
* @returns Maximum rows to process per worksheet
|
|
567
|
-
*
|
|
568
|
-
* @example
|
|
569
|
-
* ```typescript
|
|
570
|
-
* const maxRows = getExcelMaxRows(); // 5000
|
|
571
|
-
* console.log(`Maximum rows per sheet: ${maxRows}`);
|
|
572
|
-
* ```
|
|
573
|
-
*/
|
|
574
|
-
export function getExcelMaxRows() {
|
|
575
|
-
return SIZE_LIMITS.EXCEL_MAX_ROWS;
|
|
576
|
-
}
|
|
577
|
-
/**
|
|
578
|
-
* Get Excel max sheets to process.
|
|
579
|
-
*
|
|
580
|
-
* @returns Maximum number of worksheets to process
|
|
581
|
-
*
|
|
582
|
-
* @example
|
|
583
|
-
* ```typescript
|
|
584
|
-
* const maxSheets = getExcelMaxSheets(); // 10
|
|
585
|
-
* console.log(`Maximum sheets to process: ${maxSheets}`);
|
|
586
|
-
* ```
|
|
587
|
-
*/
|
|
588
|
-
export function getExcelMaxSheets() {
|
|
589
|
-
return SIZE_LIMITS.EXCEL_MAX_SHEETS;
|
|
590
|
-
}
|