@juspay/neurolink 9.5.3 → 9.7.0
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 +16 -0
- package/README.md +29 -25
- package/dist/adapters/video/vertexVideoHandler.js +3 -3
- package/dist/agent/directTools.d.ts +5 -5
- package/dist/cli/commands/config.d.ts +9 -9
- package/dist/cli/commands/serve.d.ts +37 -0
- package/dist/cli/commands/serve.js +302 -229
- package/dist/cli/commands/setup-anthropic.d.ts +2 -2
- package/dist/cli/commands/setup-azure.d.ts +2 -2
- package/dist/cli/commands/setup-bedrock.d.ts +2 -2
- package/dist/cli/commands/setup-gcp.d.ts +2 -2
- package/dist/cli/commands/setup-google-ai.d.ts +2 -2
- package/dist/cli/commands/setup-huggingface.d.ts +2 -2
- package/dist/cli/commands/setup-mistral.d.ts +2 -2
- package/dist/cli/commands/setup-openai.d.ts +2 -2
- package/dist/cli/commands/setup.d.ts +2 -2
- package/dist/cli/factories/commandFactory.js +16 -2
- package/dist/cli/loop/optionsSchema.d.ts +2 -2
- package/dist/cli/loop/optionsSchema.js +4 -0
- package/dist/cli/loop/session.d.ts +4 -0
- package/dist/cli/loop/session.js +49 -4
- package/dist/cli/utils/interactiveSetup.d.ts +4 -4
- package/dist/config/conversationMemory.d.ts +2 -0
- package/dist/config/conversationMemory.js +5 -5
- package/dist/constants/contextWindows.d.ts +46 -0
- package/dist/constants/contextWindows.js +156 -0
- package/dist/context/budgetChecker.d.ts +18 -0
- package/dist/context/budgetChecker.js +71 -0
- package/dist/context/contextCompactor.d.ts +22 -0
- package/dist/context/contextCompactor.js +106 -0
- package/dist/context/effectiveHistory.d.ts +52 -0
- package/dist/context/effectiveHistory.js +105 -0
- package/dist/context/errorDetection.d.ts +14 -0
- package/dist/context/errorDetection.js +124 -0
- package/dist/context/fileSummarizationService.d.ts +54 -0
- package/dist/context/fileSummarizationService.js +255 -0
- package/dist/context/fileSummarizer.d.ts +56 -0
- package/dist/context/fileSummarizer.js +145 -0
- package/dist/context/fileTokenBudget.d.ts +53 -0
- package/dist/context/fileTokenBudget.js +127 -0
- package/dist/context/prompts/summarizationPrompt.d.ts +17 -0
- package/dist/context/prompts/summarizationPrompt.js +110 -0
- package/dist/context/stages/fileReadDeduplicator.d.ts +10 -0
- package/dist/context/stages/fileReadDeduplicator.js +66 -0
- package/dist/context/stages/slidingWindowTruncator.d.ts +11 -0
- package/dist/context/stages/slidingWindowTruncator.js +42 -0
- package/dist/context/stages/structuredSummarizer.d.ts +10 -0
- package/dist/context/stages/structuredSummarizer.js +49 -0
- package/dist/context/stages/toolOutputPruner.d.ts +10 -0
- package/dist/context/stages/toolOutputPruner.js +52 -0
- package/dist/context/summarizationEngine.d.ts +45 -0
- package/dist/context/summarizationEngine.js +110 -0
- package/dist/context/toolOutputLimits.d.ts +17 -0
- package/dist/context/toolOutputLimits.js +84 -0
- package/dist/context/toolPairRepair.d.ts +16 -0
- package/dist/context/toolPairRepair.js +66 -0
- package/dist/core/analytics.js +11 -4
- package/dist/core/baseProvider.d.ts +6 -0
- package/dist/core/baseProvider.js +83 -14
- package/dist/core/conversationMemoryManager.d.ts +14 -11
- package/dist/core/conversationMemoryManager.js +36 -68
- package/dist/core/dynamicModels.js +3 -2
- package/dist/core/modules/GenerationHandler.js +2 -0
- package/dist/core/modules/MessageBuilder.d.ts +1 -1
- package/dist/core/modules/MessageBuilder.js +2 -0
- package/dist/core/modules/TelemetryHandler.d.ts +2 -3
- package/dist/core/modules/TelemetryHandler.js +3 -3
- package/dist/core/modules/ToolsManager.d.ts +2 -2
- package/dist/core/redisConversationMemoryManager.d.ts +19 -14
- package/dist/core/redisConversationMemoryManager.js +94 -86
- package/dist/factories/providerFactory.d.ts +2 -2
- package/dist/files/fileReferenceRegistry.d.ts +276 -0
- package/dist/files/fileReferenceRegistry.js +1543 -0
- package/dist/files/fileTools.d.ts +423 -0
- package/dist/files/fileTools.js +449 -0
- package/dist/files/index.d.ts +14 -0
- package/dist/files/index.js +13 -0
- package/dist/files/streamingReader.d.ts +93 -0
- package/dist/files/streamingReader.js +321 -0
- package/dist/files/types.d.ts +23 -0
- package/dist/files/types.js +23 -0
- package/dist/image-gen/imageGenTools.d.ts +2 -2
- package/dist/image-gen/types.d.ts +12 -12
- package/dist/index.d.ts +4 -0
- package/dist/index.js +5 -0
- package/dist/lib/adapters/video/vertexVideoHandler.js +3 -3
- package/dist/lib/agent/directTools.d.ts +7 -7
- package/dist/lib/config/conversationMemory.d.ts +2 -0
- package/dist/lib/config/conversationMemory.js +5 -5
- package/dist/lib/constants/contextWindows.d.ts +46 -0
- package/dist/lib/constants/contextWindows.js +157 -0
- package/dist/lib/context/budgetChecker.d.ts +18 -0
- package/dist/lib/context/budgetChecker.js +72 -0
- package/dist/lib/context/contextCompactor.d.ts +22 -0
- package/dist/lib/context/contextCompactor.js +107 -0
- package/dist/lib/context/effectiveHistory.d.ts +52 -0
- package/dist/lib/context/effectiveHistory.js +106 -0
- package/dist/lib/context/errorDetection.d.ts +14 -0
- package/dist/lib/context/errorDetection.js +125 -0
- package/dist/lib/context/fileSummarizationService.d.ts +54 -0
- package/dist/lib/context/fileSummarizationService.js +256 -0
- package/dist/lib/context/fileSummarizer.d.ts +56 -0
- package/dist/lib/context/fileSummarizer.js +146 -0
- package/dist/lib/context/fileTokenBudget.d.ts +53 -0
- package/dist/lib/context/fileTokenBudget.js +128 -0
- package/dist/lib/context/prompts/summarizationPrompt.d.ts +17 -0
- package/dist/lib/context/prompts/summarizationPrompt.js +111 -0
- package/dist/lib/context/stages/fileReadDeduplicator.d.ts +10 -0
- package/dist/lib/context/stages/fileReadDeduplicator.js +67 -0
- package/dist/lib/context/stages/slidingWindowTruncator.d.ts +11 -0
- package/dist/lib/context/stages/slidingWindowTruncator.js +43 -0
- package/dist/lib/context/stages/structuredSummarizer.d.ts +10 -0
- package/dist/lib/context/stages/structuredSummarizer.js +50 -0
- package/dist/lib/context/stages/toolOutputPruner.d.ts +10 -0
- package/dist/lib/context/stages/toolOutputPruner.js +53 -0
- package/dist/lib/context/summarizationEngine.d.ts +45 -0
- package/dist/lib/context/summarizationEngine.js +111 -0
- package/dist/lib/context/toolOutputLimits.d.ts +17 -0
- package/dist/lib/context/toolOutputLimits.js +85 -0
- package/dist/lib/context/toolPairRepair.d.ts +16 -0
- package/dist/lib/context/toolPairRepair.js +67 -0
- package/dist/lib/core/analytics.js +11 -4
- package/dist/lib/core/baseProvider.d.ts +6 -0
- package/dist/lib/core/baseProvider.js +83 -14
- package/dist/lib/core/conversationMemoryManager.d.ts +14 -11
- package/dist/lib/core/conversationMemoryManager.js +36 -68
- package/dist/lib/core/dynamicModels.js +3 -2
- package/dist/lib/core/modules/GenerationHandler.js +2 -0
- package/dist/lib/core/modules/MessageBuilder.d.ts +1 -1
- package/dist/lib/core/modules/MessageBuilder.js +2 -0
- package/dist/lib/core/modules/TelemetryHandler.d.ts +2 -3
- package/dist/lib/core/modules/TelemetryHandler.js +3 -3
- package/dist/lib/core/modules/ToolsManager.d.ts +2 -2
- package/dist/lib/core/redisConversationMemoryManager.d.ts +19 -14
- package/dist/lib/core/redisConversationMemoryManager.js +94 -86
- package/dist/lib/factories/providerFactory.d.ts +2 -2
- package/dist/lib/files/fileReferenceRegistry.d.ts +276 -0
- package/dist/lib/files/fileReferenceRegistry.js +1544 -0
- package/dist/lib/files/fileTools.d.ts +423 -0
- package/dist/lib/files/fileTools.js +450 -0
- package/dist/lib/files/index.d.ts +14 -0
- package/dist/lib/files/index.js +14 -0
- package/dist/lib/files/streamingReader.d.ts +93 -0
- package/dist/lib/files/streamingReader.js +322 -0
- package/dist/lib/files/types.d.ts +23 -0
- package/dist/lib/files/types.js +24 -0
- package/dist/lib/image-gen/imageGenTools.d.ts +2 -2
- package/dist/lib/image-gen/types.d.ts +12 -12
- package/dist/lib/index.d.ts +4 -0
- package/dist/lib/index.js +5 -0
- package/dist/lib/mcp/httpRetryHandler.js +6 -2
- package/dist/lib/memory/mem0Initializer.d.ts +2 -2
- package/dist/lib/neurolink.d.ts +66 -2
- package/dist/lib/neurolink.js +777 -315
- package/dist/lib/processors/archive/ArchiveProcessor.d.ts +327 -0
- package/dist/lib/processors/archive/ArchiveProcessor.js +1309 -0
- package/dist/lib/processors/archive/index.d.ts +33 -0
- package/dist/lib/processors/archive/index.js +43 -0
- package/dist/lib/processors/base/BaseFileProcessor.js +2 -1
- package/dist/lib/processors/base/types.d.ts +70 -64
- package/dist/lib/processors/base/types.js +6 -0
- package/dist/lib/processors/cli/fileProcessorCli.d.ts +8 -8
- package/dist/lib/processors/cli/fileProcessorCli.js +5 -5
- package/dist/lib/processors/config/mimeTypes.js +25 -0
- package/dist/lib/processors/config/sizeLimits.d.ts +52 -40
- package/dist/lib/processors/config/sizeLimits.js +56 -44
- package/dist/lib/processors/document/ExcelProcessor.d.ts +14 -0
- package/dist/lib/processors/document/ExcelProcessor.js +72 -1
- package/dist/lib/processors/document/PptxProcessor.d.ts +63 -0
- package/dist/lib/processors/document/PptxProcessor.js +158 -0
- package/dist/lib/processors/document/index.d.ts +1 -0
- package/dist/lib/processors/document/index.js +6 -0
- package/dist/lib/processors/errors/FileErrorCode.d.ts +2 -2
- package/dist/lib/processors/errors/errorHelpers.d.ts +2 -2
- package/dist/lib/processors/errors/errorHelpers.js +12 -4
- package/dist/lib/processors/errors/errorSerializer.d.ts +4 -4
- package/dist/lib/processors/index.d.ts +8 -2
- package/dist/lib/processors/index.js +5 -2
- package/dist/lib/processors/integration/FileProcessorIntegration.d.ts +8 -8
- package/dist/lib/processors/integration/FileProcessorIntegration.js +7 -7
- package/dist/lib/processors/media/AudioProcessor.d.ts +328 -0
- package/dist/lib/processors/media/AudioProcessor.js +708 -0
- package/dist/lib/processors/media/VideoProcessor.d.ts +350 -0
- package/dist/lib/processors/media/VideoProcessor.js +992 -0
- package/dist/lib/processors/media/index.d.ts +27 -0
- package/dist/lib/processors/media/index.js +37 -0
- package/dist/lib/processors/registry/ProcessorRegistry.d.ts +19 -5
- package/dist/lib/processors/registry/ProcessorRegistry.js +103 -8
- package/dist/lib/processors/registry/index.d.ts +1 -1
- package/dist/lib/processors/registry/index.js +1 -1
- package/dist/lib/processors/registry/types.d.ts +2 -2
- package/dist/lib/providers/amazonBedrock.js +2 -1
- package/dist/lib/providers/anthropic.js +2 -2
- package/dist/lib/providers/anthropicBaseProvider.js +10 -4
- package/dist/lib/providers/azureOpenai.js +14 -25
- package/dist/lib/providers/googleAiStudio.js +136 -457
- package/dist/lib/providers/googleNativeGemini3.d.ts +119 -0
- package/dist/lib/providers/googleNativeGemini3.js +264 -0
- package/dist/lib/providers/googleVertex.d.ts +15 -1
- package/dist/lib/providers/googleVertex.js +341 -775
- package/dist/lib/providers/huggingFace.js +20 -5
- package/dist/lib/providers/litellm.js +6 -4
- package/dist/lib/providers/mistral.js +3 -2
- package/dist/lib/providers/openAI.js +2 -2
- package/dist/lib/providers/openRouter.js +8 -7
- package/dist/lib/providers/openaiCompatible.js +10 -4
- package/dist/lib/providers/sagemaker/detection.d.ts +6 -6
- package/dist/lib/providers/sagemaker/diagnostics.d.ts +4 -4
- package/dist/lib/providers/sagemaker/parsers.d.ts +4 -4
- package/dist/lib/rag/chunkers/RecursiveChunker.js +2 -2
- package/dist/lib/rag/document/loaders.d.ts +6 -71
- package/dist/lib/rag/document/loaders.js +5 -5
- package/dist/lib/rag/graphRag/graphRAG.js +26 -9
- package/dist/lib/rag/metadata/MetadataExtractorFactory.d.ts +5 -55
- package/dist/lib/rag/metadata/metadataExtractor.js +6 -3
- package/dist/lib/rag/pipeline/RAGPipeline.d.ts +8 -126
- package/dist/lib/rag/pipeline/RAGPipeline.js +11 -11
- package/dist/lib/rag/pipeline/contextAssembly.d.ts +3 -42
- package/dist/lib/rag/pipeline/contextAssembly.js +6 -3
- package/dist/lib/rag/reranker/RerankerFactory.d.ts +5 -60
- package/dist/lib/rag/resilience/CircuitBreaker.d.ts +3 -33
- package/dist/lib/rag/resilience/RetryHandler.d.ts +2 -21
- package/dist/lib/rag/resilience/RetryHandler.js +6 -2
- package/dist/lib/rag/retrieval/hybridSearch.d.ts +3 -41
- package/dist/lib/rag/retrieval/vectorQueryTool.d.ts +2 -13
- package/dist/lib/rag/retrieval/vectorQueryTool.js +4 -3
- package/dist/lib/rag/types.d.ts +3 -3
- package/dist/lib/sdk/toolRegistration.d.ts +2 -2
- package/dist/lib/server/middleware/cache.d.ts +2 -2
- package/dist/lib/server/middleware/rateLimit.d.ts +2 -2
- package/dist/lib/server/routes/mcpRoutes.js +277 -249
- package/dist/lib/server/routes/memoryRoutes.js +287 -281
- package/dist/lib/server/utils/validation.d.ts +10 -10
- package/dist/lib/services/server/ai/observability/instrumentation.d.ts +24 -2
- package/dist/lib/services/server/ai/observability/instrumentation.js +12 -1
- package/dist/lib/session/globalSessionState.d.ts +2 -2
- package/dist/lib/telemetry/telemetryService.d.ts +2 -2
- package/dist/lib/types/common.d.ts +39 -0
- package/dist/lib/types/contextTypes.d.ts +255 -0
- package/dist/lib/types/contextTypes.js +0 -2
- package/dist/lib/types/conversation.d.ts +62 -0
- package/dist/lib/types/conversationMemoryInterface.d.ts +27 -0
- package/dist/lib/types/conversationMemoryInterface.js +7 -0
- package/dist/lib/types/fileReferenceTypes.d.ts +222 -0
- package/dist/lib/types/fileReferenceTypes.js +9 -0
- package/dist/lib/types/fileTypes.d.ts +26 -3
- package/dist/lib/types/generateTypes.d.ts +50 -1
- package/dist/lib/types/index.d.ts +4 -5
- package/dist/lib/types/index.js +8 -10
- package/dist/lib/types/modelTypes.d.ts +2 -2
- package/dist/lib/types/processorTypes.d.ts +597 -0
- package/dist/lib/types/processorTypes.js +91 -0
- package/dist/lib/types/ragTypes.d.ts +489 -0
- package/dist/lib/types/ragTypes.js +8 -0
- package/dist/lib/types/sdkTypes.d.ts +17 -18
- package/dist/lib/types/streamTypes.d.ts +24 -1
- package/dist/lib/utils/async/retry.d.ts +2 -2
- package/dist/lib/utils/async/withTimeout.js +3 -1
- package/dist/lib/utils/conversationMemory.d.ts +12 -6
- package/dist/lib/utils/conversationMemory.js +91 -36
- package/dist/lib/utils/errorHandling.d.ts +5 -0
- package/dist/lib/utils/errorHandling.js +19 -0
- package/dist/lib/utils/fileDetector.d.ts +62 -0
- package/dist/lib/utils/fileDetector.js +1014 -14
- package/dist/lib/utils/json/safeParse.d.ts +2 -2
- package/dist/lib/utils/messageBuilder.js +806 -153
- package/dist/lib/utils/modelChoices.d.ts +2 -2
- package/dist/lib/utils/multimodalOptionsBuilder.d.ts +2 -1
- package/dist/lib/utils/multimodalOptionsBuilder.js +1 -0
- package/dist/lib/utils/pricing.d.ts +12 -0
- package/dist/lib/utils/pricing.js +134 -0
- package/dist/lib/utils/rateLimiter.d.ts +2 -2
- package/dist/lib/utils/redis.d.ts +17 -0
- package/dist/lib/utils/redis.js +105 -0
- package/dist/lib/utils/sanitizers/filename.d.ts +4 -4
- package/dist/lib/utils/sanitizers/svg.d.ts +2 -2
- package/dist/lib/utils/thinkingConfig.d.ts +6 -6
- package/dist/lib/utils/timeout.d.ts +10 -0
- package/dist/lib/utils/timeout.js +15 -0
- package/dist/lib/utils/tokenEstimation.d.ts +68 -0
- package/dist/lib/utils/tokenEstimation.js +113 -0
- package/dist/lib/utils/tokenUtils.d.ts +4 -4
- package/dist/lib/utils/ttsProcessor.d.ts +2 -2
- package/dist/lib/workflow/config.d.ts +150 -150
- package/dist/mcp/httpRetryHandler.js +6 -2
- package/dist/memory/mem0Initializer.d.ts +2 -2
- package/dist/neurolink.d.ts +66 -2
- package/dist/neurolink.js +777 -315
- package/dist/processors/archive/ArchiveProcessor.d.ts +327 -0
- package/dist/processors/archive/ArchiveProcessor.js +1308 -0
- package/dist/processors/archive/index.d.ts +33 -0
- package/dist/processors/archive/index.js +42 -0
- package/dist/processors/base/BaseFileProcessor.js +2 -1
- package/dist/processors/base/types.d.ts +70 -64
- package/dist/processors/base/types.js +6 -0
- package/dist/processors/cli/fileProcessorCli.d.ts +8 -8
- package/dist/processors/cli/fileProcessorCli.js +5 -5
- package/dist/processors/config/mimeTypes.js +25 -0
- package/dist/processors/config/sizeLimits.d.ts +52 -40
- package/dist/processors/config/sizeLimits.js +56 -44
- package/dist/processors/document/ExcelProcessor.d.ts +14 -0
- package/dist/processors/document/ExcelProcessor.js +72 -1
- package/dist/processors/document/PptxProcessor.d.ts +63 -0
- package/dist/processors/document/PptxProcessor.js +157 -0
- package/dist/processors/document/index.d.ts +1 -0
- package/dist/processors/document/index.js +6 -0
- package/dist/processors/errors/FileErrorCode.d.ts +2 -2
- package/dist/processors/errors/errorHelpers.d.ts +2 -2
- package/dist/processors/errors/errorHelpers.js +12 -4
- package/dist/processors/errors/errorSerializer.d.ts +4 -4
- package/dist/processors/index.d.ts +8 -2
- package/dist/processors/index.js +5 -2
- package/dist/processors/integration/FileProcessorIntegration.d.ts +8 -8
- package/dist/processors/integration/FileProcessorIntegration.js +7 -7
- package/dist/processors/media/AudioProcessor.d.ts +328 -0
- package/dist/processors/media/AudioProcessor.js +707 -0
- package/dist/processors/media/VideoProcessor.d.ts +350 -0
- package/dist/processors/media/VideoProcessor.js +991 -0
- package/dist/processors/media/ffprobe-static.d.ts +4 -0
- package/dist/processors/media/index.d.ts +27 -0
- package/dist/processors/media/index.js +36 -0
- package/dist/processors/registry/ProcessorRegistry.d.ts +19 -5
- package/dist/processors/registry/ProcessorRegistry.js +103 -8
- package/dist/processors/registry/index.d.ts +1 -1
- package/dist/processors/registry/index.js +1 -1
- package/dist/processors/registry/types.d.ts +2 -2
- package/dist/providers/amazonBedrock.js +2 -1
- package/dist/providers/anthropic.js +2 -2
- package/dist/providers/anthropicBaseProvider.js +10 -4
- package/dist/providers/azureOpenai.js +14 -25
- package/dist/providers/googleAiStudio.js +136 -457
- package/dist/providers/googleNativeGemini3.d.ts +119 -0
- package/dist/providers/googleNativeGemini3.js +263 -0
- package/dist/providers/googleVertex.d.ts +15 -1
- package/dist/providers/googleVertex.js +341 -775
- package/dist/providers/huggingFace.js +20 -5
- package/dist/providers/litellm.js +6 -4
- package/dist/providers/mistral.js +3 -2
- package/dist/providers/openAI.js +2 -2
- package/dist/providers/openRouter.js +8 -7
- package/dist/providers/openaiCompatible.js +10 -4
- package/dist/providers/sagemaker/detection.d.ts +6 -6
- package/dist/providers/sagemaker/diagnostics.d.ts +4 -4
- package/dist/providers/sagemaker/parsers.d.ts +4 -4
- package/dist/rag/chunkers/RecursiveChunker.js +2 -2
- package/dist/rag/document/loaders.d.ts +6 -71
- package/dist/rag/document/loaders.js +5 -5
- package/dist/rag/graphRag/graphRAG.js +26 -9
- package/dist/rag/metadata/MetadataExtractorFactory.d.ts +5 -55
- package/dist/rag/metadata/metadataExtractor.js +6 -3
- package/dist/rag/pipeline/RAGPipeline.d.ts +8 -126
- package/dist/rag/pipeline/RAGPipeline.js +11 -11
- package/dist/rag/pipeline/contextAssembly.d.ts +3 -42
- package/dist/rag/pipeline/contextAssembly.js +6 -3
- package/dist/rag/reranker/RerankerFactory.d.ts +5 -60
- package/dist/rag/resilience/CircuitBreaker.d.ts +3 -33
- package/dist/rag/resilience/RetryHandler.d.ts +2 -21
- package/dist/rag/resilience/RetryHandler.js +6 -2
- package/dist/rag/retrieval/hybridSearch.d.ts +3 -41
- package/dist/rag/retrieval/vectorQueryTool.d.ts +2 -13
- package/dist/rag/retrieval/vectorQueryTool.js +4 -3
- package/dist/rag/types.d.ts +3 -3
- package/dist/sdk/toolRegistration.d.ts +2 -2
- package/dist/server/middleware/cache.d.ts +2 -2
- package/dist/server/middleware/rateLimit.d.ts +2 -2
- package/dist/server/routes/mcpRoutes.js +277 -249
- package/dist/server/routes/memoryRoutes.js +287 -281
- package/dist/server/utils/validation.d.ts +4 -4
- package/dist/services/server/ai/observability/instrumentation.d.ts +24 -2
- package/dist/services/server/ai/observability/instrumentation.js +12 -1
- package/dist/session/globalSessionState.d.ts +2 -2
- package/dist/telemetry/telemetryService.d.ts +2 -2
- package/dist/types/common.d.ts +39 -0
- package/dist/types/contextTypes.d.ts +255 -0
- package/dist/types/contextTypes.js +0 -2
- package/dist/types/conversation.d.ts +62 -0
- package/dist/types/conversationMemoryInterface.d.ts +27 -0
- package/dist/types/conversationMemoryInterface.js +6 -0
- package/dist/types/fileReferenceTypes.d.ts +222 -0
- package/dist/types/fileReferenceTypes.js +8 -0
- package/dist/types/fileTypes.d.ts +26 -3
- package/dist/types/generateTypes.d.ts +50 -1
- package/dist/types/index.d.ts +4 -5
- package/dist/types/index.js +8 -10
- package/dist/types/processorTypes.d.ts +597 -0
- package/dist/types/processorTypes.js +90 -0
- package/dist/types/ragTypes.d.ts +489 -0
- package/dist/types/ragTypes.js +7 -0
- package/dist/types/sdkTypes.d.ts +17 -18
- package/dist/types/streamTypes.d.ts +24 -1
- package/dist/utils/async/retry.d.ts +2 -2
- package/dist/utils/async/withTimeout.js +3 -1
- package/dist/utils/conversationMemory.d.ts +12 -6
- package/dist/utils/conversationMemory.js +91 -36
- package/dist/utils/errorHandling.d.ts +5 -0
- package/dist/utils/errorHandling.js +19 -0
- package/dist/utils/fileDetector.d.ts +62 -0
- package/dist/utils/fileDetector.js +1014 -14
- package/dist/utils/json/safeParse.d.ts +2 -2
- package/dist/utils/messageBuilder.js +806 -153
- package/dist/utils/modelChoices.d.ts +2 -2
- package/dist/utils/multimodalOptionsBuilder.d.ts +2 -1
- package/dist/utils/multimodalOptionsBuilder.js +1 -0
- package/dist/utils/pricing.d.ts +12 -0
- package/dist/utils/pricing.js +133 -0
- package/dist/utils/rateLimiter.d.ts +2 -2
- package/dist/utils/redis.d.ts +17 -0
- package/dist/utils/redis.js +105 -0
- package/dist/utils/sanitizers/filename.d.ts +4 -4
- package/dist/utils/sanitizers/svg.d.ts +2 -2
- package/dist/utils/thinkingConfig.d.ts +6 -6
- package/dist/utils/timeout.d.ts +10 -0
- package/dist/utils/timeout.js +15 -0
- package/dist/utils/tokenEstimation.d.ts +68 -0
- package/dist/utils/tokenEstimation.js +112 -0
- package/dist/utils/tokenUtils.d.ts +4 -4
- package/dist/utils/ttsProcessor.d.ts +2 -2
- package/dist/workflow/config.d.ts +104 -104
- package/package.json +18 -6
- package/dist/lib/utils/conversationMemoryUtils.d.ts +0 -25
- package/dist/lib/utils/conversationMemoryUtils.js +0 -138
- package/dist/utils/conversationMemoryUtils.d.ts +0 -25
- package/dist/utils/conversationMemoryUtils.js +0 -137
|
@@ -9,14 +9,14 @@
|
|
|
9
9
|
* neurolink serve status
|
|
10
10
|
*/
|
|
11
11
|
import chalk from "chalk";
|
|
12
|
-
import ora from "ora";
|
|
13
12
|
import fs from "fs";
|
|
13
|
+
import ora from "ora";
|
|
14
14
|
import path from "path";
|
|
15
|
-
import { logger } from "../../lib/utils/logger.js";
|
|
16
15
|
import { NeuroLink } from "../../lib/neurolink.js";
|
|
17
|
-
import { withTimeout } from "../../lib/utils/errorHandling.js";
|
|
18
|
-
import { isProcessRunning, formatUptime, StateFileManager, } from "../utils/serverUtils.js";
|
|
19
16
|
import { ConfigurationError, ServerStartError, } from "../../lib/server/errors.js";
|
|
17
|
+
import { withTimeout } from "../../lib/utils/errorHandling.js";
|
|
18
|
+
import { logger } from "../../lib/utils/logger.js";
|
|
19
|
+
import { formatUptime, isProcessRunning, StateFileManager, } from "../utils/serverUtils.js";
|
|
20
20
|
// ============================================
|
|
21
21
|
// State Management
|
|
22
22
|
// ============================================
|
|
@@ -46,7 +46,10 @@ function loadConfigFile(configPath) {
|
|
|
46
46
|
if (absolutePath.endsWith(".json")) {
|
|
47
47
|
return JSON.parse(content);
|
|
48
48
|
}
|
|
49
|
-
throw new ConfigurationError("Only JSON config files are supported. Use .json extension.", {
|
|
49
|
+
throw new ConfigurationError("Only JSON config files are supported. Use .json extension.", {
|
|
50
|
+
configPath,
|
|
51
|
+
absolutePath,
|
|
52
|
+
});
|
|
50
53
|
}
|
|
51
54
|
// ============================================
|
|
52
55
|
// Watch Mode Utilities
|
|
@@ -141,7 +144,7 @@ export class ServeCommandFactory {
|
|
|
141
144
|
describe: "Start NeuroLink HTTP server with server adapters",
|
|
142
145
|
builder: (yargs) => {
|
|
143
146
|
return yargs
|
|
144
|
-
.command("status", "Show server status", (yargs) =>
|
|
147
|
+
.command("status", "Show server status", (yargs) => ServeCommandFactory.buildStatusOptions(yargs), (argv) => ServeCommandFactory.executeStatus(argv))
|
|
145
148
|
.option("port", {
|
|
146
149
|
type: "number",
|
|
147
150
|
alias: "p",
|
|
@@ -219,7 +222,7 @@ export class ServeCommandFactory {
|
|
|
219
222
|
// If subcommand is provided (like 'status'), it will be handled by the subcommand
|
|
220
223
|
// Otherwise, start the server
|
|
221
224
|
if (!argv.subcommand || argv.subcommand === "serve") {
|
|
222
|
-
await
|
|
225
|
+
await ServeCommandFactory.executeServe(argv);
|
|
223
226
|
}
|
|
224
227
|
},
|
|
225
228
|
};
|
|
@@ -250,254 +253,324 @@ export class ServeCommandFactory {
|
|
|
250
253
|
: ora("Starting NeuroLink server...").start();
|
|
251
254
|
try {
|
|
252
255
|
// Check if server is already running
|
|
253
|
-
|
|
254
|
-
if (existingState && isProcessRunning(existingState.pid)) {
|
|
255
|
-
if (spinner) {
|
|
256
|
-
spinner.fail(chalk.red(`Server already running on port ${existingState.port} (PID: ${existingState.pid})`));
|
|
257
|
-
}
|
|
258
|
-
logger.always(chalk.yellow("Use 'neurolink server stop' or kill the process to stop it first"));
|
|
259
|
-
process.exit(1);
|
|
260
|
-
}
|
|
256
|
+
ServeCommandFactory.guardAlreadyRunning(spinner);
|
|
261
257
|
// Load config file if provided
|
|
262
|
-
|
|
263
|
-
if (argv.config) {
|
|
264
|
-
try {
|
|
265
|
-
fileConfig = loadConfigFile(argv.config);
|
|
266
|
-
if (spinner) {
|
|
267
|
-
spinner.text = `Loading config from ${argv.config}...`;
|
|
268
|
-
}
|
|
269
|
-
}
|
|
270
|
-
catch (configError) {
|
|
271
|
-
if (spinner) {
|
|
272
|
-
spinner.fail(chalk.red("Failed to load config file"));
|
|
273
|
-
}
|
|
274
|
-
logger.error(chalk.red(`Error: ${configError instanceof Error ? configError.message : String(configError)}`));
|
|
275
|
-
process.exit(1);
|
|
276
|
-
}
|
|
277
|
-
}
|
|
258
|
+
const fileConfig = ServeCommandFactory.loadFileConfig(argv, spinner);
|
|
278
259
|
// Merge CLI args with file config (CLI takes precedence)
|
|
279
260
|
const port = argv.port ?? fileConfig.port ?? 3000;
|
|
280
261
|
const host = argv.host ?? fileConfig.host ?? "0.0.0.0";
|
|
281
262
|
const framework = argv.framework ?? fileConfig.framework ?? "hono";
|
|
282
263
|
const basePath = argv.basePath ?? fileConfig.basePath ?? "/api";
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
const rateLimitValue = argv.rateLimit ?? fileConfig.rateLimit?.maxRequests ?? 100;
|
|
286
|
-
const rateLimitEnabled = rateLimitValue > 0;
|
|
287
|
-
// Swagger/OpenAPI documentation
|
|
288
|
-
const swaggerEnabled = argv.swagger ?? fileConfig.enableSwagger ?? false;
|
|
289
|
-
// Create NeuroLink instance
|
|
290
|
-
const neurolink = new NeuroLink();
|
|
291
|
-
// Dynamically import server module
|
|
292
|
-
const { createServer, registerAllRoutes } = await import("../../lib/server/index.js");
|
|
293
|
-
// Build server adapter config
|
|
294
|
-
// Default config values
|
|
295
|
-
const defaultConfig = {
|
|
296
|
-
cors: { enabled: true },
|
|
297
|
-
rateLimit: { enabled: true, maxRequests: 100 },
|
|
298
|
-
};
|
|
299
|
-
const serverConfig = {
|
|
264
|
+
// Build server adapter config from merged values
|
|
265
|
+
const serverConfig = ServeCommandFactory.buildServerConfig(argv, fileConfig, {
|
|
300
266
|
port,
|
|
301
267
|
host,
|
|
302
268
|
basePath,
|
|
303
|
-
|
|
304
|
-
...defaultConfig.cors,
|
|
305
|
-
...(fileConfig.cors || {}),
|
|
306
|
-
// CLI flag should override config file
|
|
307
|
-
enabled: argv.cors !== undefined
|
|
308
|
-
? argv.cors
|
|
309
|
-
: (fileConfig.cors?.enabled ?? defaultConfig.cors.enabled),
|
|
310
|
-
},
|
|
311
|
-
rateLimit: {
|
|
312
|
-
...defaultConfig.rateLimit,
|
|
313
|
-
...(fileConfig.rateLimit || {}),
|
|
314
|
-
// CLI flags should override config file
|
|
315
|
-
enabled: argv.rateLimit !== undefined
|
|
316
|
-
? argv.rateLimit > 0
|
|
317
|
-
: (fileConfig.rateLimit?.enabled ??
|
|
318
|
-
defaultConfig.rateLimit.enabled),
|
|
319
|
-
maxRequests: argv.rateLimit !== undefined
|
|
320
|
-
? argv.rateLimit
|
|
321
|
-
: (fileConfig.rateLimit?.maxRequests ??
|
|
322
|
-
defaultConfig.rateLimit.maxRequests),
|
|
323
|
-
},
|
|
324
|
-
bodyParser: fileConfig.bodyParser,
|
|
325
|
-
logging: fileConfig.logging,
|
|
326
|
-
timeout: fileConfig.timeout,
|
|
327
|
-
enableMetrics: fileConfig.enableMetrics ?? true,
|
|
328
|
-
enableSwagger: argv.swagger !== undefined
|
|
329
|
-
? argv.swagger
|
|
330
|
-
: (fileConfig.enableSwagger ?? false),
|
|
331
|
-
disableBuiltInHealth: true, // We register health routes separately
|
|
332
|
-
};
|
|
269
|
+
});
|
|
333
270
|
if (spinner) {
|
|
334
271
|
spinner.text = `Creating ${framework} server...`;
|
|
335
272
|
}
|
|
336
|
-
// Create
|
|
337
|
-
|
|
338
|
-
//
|
|
339
|
-
|
|
340
|
-
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
}),
|
|
344
|
-
};
|
|
345
|
-
// Register all routes
|
|
346
|
-
registerAllRoutes(serverRef.current, basePath);
|
|
347
|
-
if (spinner) {
|
|
348
|
-
spinner.text = "Initializing server...";
|
|
349
|
-
}
|
|
350
|
-
// Initialize and start with timeout
|
|
351
|
-
await withTimeout(serverRef.current.initialize(), 30000, new ServerStartError("Server initialization timed out after 30 seconds", undefined, port, host));
|
|
352
|
-
await withTimeout(serverRef.current.start(), 30000, new ServerStartError("Server startup timed out after 30 seconds", undefined, port, host));
|
|
353
|
-
// Save state
|
|
354
|
-
const state = {
|
|
355
|
-
pid: process.pid,
|
|
356
|
-
port,
|
|
357
|
-
host,
|
|
273
|
+
// Create, register routes, initialize and start server
|
|
274
|
+
const serverRef = await ServeCommandFactory.createAndStartServer({ framework, serverConfig, basePath, port, host }, spinner);
|
|
275
|
+
// Save state and print startup banner
|
|
276
|
+
ServeCommandFactory.saveAndPrintStartupInfo({ argv, port, host, framework, basePath, serverConfig }, spinner);
|
|
277
|
+
// Set up watch mode if enabled
|
|
278
|
+
const stopWatcher = ServeCommandFactory.setupWatchMode(argv, {
|
|
279
|
+
serverRef,
|
|
358
280
|
framework,
|
|
359
|
-
|
|
281
|
+
serverConfig,
|
|
360
282
|
basePath,
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
283
|
+
port,
|
|
284
|
+
host,
|
|
285
|
+
});
|
|
286
|
+
// Register signal handlers for graceful shutdown
|
|
287
|
+
ServeCommandFactory.registerSignalHandlers(serverRef, stopWatcher);
|
|
288
|
+
}
|
|
289
|
+
catch (error) {
|
|
290
|
+
ServeCommandFactory.handleStartupError(error, argv, spinner);
|
|
291
|
+
}
|
|
292
|
+
}
|
|
293
|
+
// ============================================
|
|
294
|
+
// executeServe Helpers
|
|
295
|
+
// ============================================
|
|
296
|
+
/**
|
|
297
|
+
* Guard against a server that is already running. Exits the process if so.
|
|
298
|
+
*/
|
|
299
|
+
static guardAlreadyRunning(spinner) {
|
|
300
|
+
const existingState = loadServeState();
|
|
301
|
+
if (existingState && isProcessRunning(existingState.pid)) {
|
|
364
302
|
if (spinner) {
|
|
365
|
-
spinner.
|
|
303
|
+
spinner.fail(chalk.red(`Server already running on port ${existingState.port} (PID: ${existingState.pid})`));
|
|
366
304
|
}
|
|
367
|
-
|
|
368
|
-
|
|
369
|
-
|
|
370
|
-
|
|
371
|
-
|
|
372
|
-
|
|
373
|
-
|
|
374
|
-
|
|
375
|
-
|
|
376
|
-
|
|
377
|
-
|
|
305
|
+
logger.always(chalk.yellow("Use 'neurolink server stop' or kill the process to stop it first"));
|
|
306
|
+
process.exit(1);
|
|
307
|
+
}
|
|
308
|
+
}
|
|
309
|
+
/**
|
|
310
|
+
* Load a config file if one was specified in argv. Returns empty object otherwise.
|
|
311
|
+
*/
|
|
312
|
+
static loadFileConfig(argv, spinner) {
|
|
313
|
+
if (!argv.config) {
|
|
314
|
+
return {};
|
|
315
|
+
}
|
|
316
|
+
try {
|
|
317
|
+
const config = loadConfigFile(argv.config);
|
|
318
|
+
if (spinner) {
|
|
319
|
+
spinner.text = `Loading config from ${argv.config}...`;
|
|
378
320
|
}
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
if (argv.watch) {
|
|
385
|
-
logger.always(` Watch Mode: ${chalk.green("enabled")}`);
|
|
321
|
+
return config;
|
|
322
|
+
}
|
|
323
|
+
catch (configError) {
|
|
324
|
+
if (spinner) {
|
|
325
|
+
spinner.fail(chalk.red("Failed to load config file"));
|
|
386
326
|
}
|
|
327
|
+
logger.error(chalk.red(`Error: ${configError instanceof Error ? configError.message : String(configError)}`));
|
|
328
|
+
process.exit(1);
|
|
329
|
+
}
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Merge CLI args with file config to produce a ServerAdapterConfig.
|
|
333
|
+
*/
|
|
334
|
+
static buildServerConfig(argv, fileConfig, merged) {
|
|
335
|
+
const defaultConfig = {
|
|
336
|
+
cors: { enabled: true },
|
|
337
|
+
rateLimit: { enabled: true, maxRequests: 100 },
|
|
338
|
+
};
|
|
339
|
+
return {
|
|
340
|
+
port: merged.port,
|
|
341
|
+
host: merged.host,
|
|
342
|
+
basePath: merged.basePath,
|
|
343
|
+
cors: {
|
|
344
|
+
...defaultConfig.cors,
|
|
345
|
+
...(fileConfig.cors || {}),
|
|
346
|
+
enabled: argv.cors !== undefined
|
|
347
|
+
? argv.cors
|
|
348
|
+
: (fileConfig.cors?.enabled ?? defaultConfig.cors.enabled),
|
|
349
|
+
},
|
|
350
|
+
rateLimit: {
|
|
351
|
+
...defaultConfig.rateLimit,
|
|
352
|
+
...(fileConfig.rateLimit || {}),
|
|
353
|
+
enabled: argv.rateLimit !== undefined
|
|
354
|
+
? argv.rateLimit > 0
|
|
355
|
+
: (fileConfig.rateLimit?.enabled ??
|
|
356
|
+
defaultConfig.rateLimit.enabled),
|
|
357
|
+
maxRequests: argv.rateLimit !== undefined
|
|
358
|
+
? argv.rateLimit
|
|
359
|
+
: (fileConfig.rateLimit?.maxRequests ??
|
|
360
|
+
defaultConfig.rateLimit.maxRequests),
|
|
361
|
+
},
|
|
362
|
+
bodyParser: fileConfig.bodyParser,
|
|
363
|
+
logging: fileConfig.logging,
|
|
364
|
+
timeout: fileConfig.timeout,
|
|
365
|
+
enableMetrics: fileConfig.enableMetrics ?? true,
|
|
366
|
+
enableSwagger: argv.swagger !== undefined
|
|
367
|
+
? argv.swagger
|
|
368
|
+
: (fileConfig.enableSwagger ?? false),
|
|
369
|
+
disableBuiltInHealth: true, // We register health routes separately
|
|
370
|
+
};
|
|
371
|
+
}
|
|
372
|
+
/**
|
|
373
|
+
* Create server, register routes, initialize and start it.
|
|
374
|
+
* Returns a mutable reference wrapper so signal handlers always access the current server.
|
|
375
|
+
*/
|
|
376
|
+
static async createAndStartServer(opts, spinner) {
|
|
377
|
+
const { createServer, registerAllRoutes } = await import("../../lib/server/index.js");
|
|
378
|
+
const neurolink = new NeuroLink();
|
|
379
|
+
const serverRef = {
|
|
380
|
+
current: await createServer(neurolink, {
|
|
381
|
+
framework: opts.framework,
|
|
382
|
+
config: opts.serverConfig,
|
|
383
|
+
}),
|
|
384
|
+
};
|
|
385
|
+
registerAllRoutes(serverRef.current, opts.basePath);
|
|
386
|
+
if (spinner) {
|
|
387
|
+
spinner.text = "Initializing server...";
|
|
388
|
+
}
|
|
389
|
+
await withTimeout(serverRef.current.initialize(), 30000, new ServerStartError("Server initialization timed out after 30 seconds", undefined, opts.port, opts.host));
|
|
390
|
+
await withTimeout(serverRef.current.start(), 30000, new ServerStartError("Server startup timed out after 30 seconds", undefined, opts.port, opts.host));
|
|
391
|
+
return serverRef;
|
|
392
|
+
}
|
|
393
|
+
/**
|
|
394
|
+
* Save server state and print the startup info banner.
|
|
395
|
+
*/
|
|
396
|
+
static saveAndPrintStartupInfo(opts, spinner) {
|
|
397
|
+
const state = {
|
|
398
|
+
pid: process.pid,
|
|
399
|
+
port: opts.port,
|
|
400
|
+
host: opts.host,
|
|
401
|
+
framework: opts.framework,
|
|
402
|
+
startTime: new Date().toISOString(),
|
|
403
|
+
basePath: opts.basePath,
|
|
404
|
+
configFile: opts.argv.config,
|
|
405
|
+
};
|
|
406
|
+
saveServeState(state);
|
|
407
|
+
if (spinner) {
|
|
408
|
+
spinner.succeed(chalk.green("NeuroLink server started successfully"));
|
|
409
|
+
}
|
|
410
|
+
const url = `http://${opts.host === "0.0.0.0" ? "localhost" : opts.host}:${opts.port}`;
|
|
411
|
+
const corsEnabled = opts.argv.cors ?? opts.serverConfig.cors?.enabled ?? true;
|
|
412
|
+
const rateLimitValue = opts.argv.rateLimit ?? opts.serverConfig.rateLimit?.maxRequests ?? 100;
|
|
413
|
+
const rateLimitEnabled = rateLimitValue > 0;
|
|
414
|
+
const swaggerEnabled = opts.argv.swagger ?? opts.serverConfig.enableSwagger ?? false;
|
|
415
|
+
ServeCommandFactory.printStartupBanner({
|
|
416
|
+
url,
|
|
417
|
+
framework: opts.framework,
|
|
418
|
+
basePath: opts.basePath,
|
|
419
|
+
pid: state.pid,
|
|
420
|
+
configFile: opts.argv.config,
|
|
421
|
+
corsEnabled,
|
|
422
|
+
rateLimitEnabled,
|
|
423
|
+
rateLimitValue,
|
|
424
|
+
swaggerEnabled,
|
|
425
|
+
watchEnabled: opts.argv.watch ?? false,
|
|
426
|
+
});
|
|
427
|
+
return state;
|
|
428
|
+
}
|
|
429
|
+
/**
|
|
430
|
+
* Print the server startup banner with server info, middleware status and endpoints.
|
|
431
|
+
*/
|
|
432
|
+
static printStartupBanner(info) {
|
|
433
|
+
logger.always("");
|
|
434
|
+
logger.always(chalk.bold.cyan("NeuroLink Server"));
|
|
435
|
+
logger.always(chalk.gray("=".repeat(50)));
|
|
436
|
+
logger.always("");
|
|
437
|
+
logger.always(` ${chalk.bold("URL:")} ${chalk.cyan(info.url)}`);
|
|
438
|
+
logger.always(` ${chalk.bold("Framework:")} ${chalk.cyan(info.framework)}`);
|
|
439
|
+
logger.always(` ${chalk.bold("Base Path:")} ${chalk.cyan(info.basePath)}`);
|
|
440
|
+
logger.always(` ${chalk.bold("PID:")} ${chalk.cyan(info.pid)}`);
|
|
441
|
+
if (info.configFile) {
|
|
442
|
+
logger.always(` ${chalk.bold("Config:")} ${chalk.cyan(info.configFile)}`);
|
|
443
|
+
}
|
|
444
|
+
logger.always("");
|
|
445
|
+
logger.always(chalk.bold("Middleware:"));
|
|
446
|
+
logger.always(` CORS: ${info.corsEnabled ? chalk.green("enabled") : chalk.yellow("disabled")}`);
|
|
447
|
+
logger.always(` Rate Limit: ${info.rateLimitEnabled ? chalk.green(`enabled (${info.rateLimitValue} req/15min)`) : chalk.yellow("disabled")}`);
|
|
448
|
+
logger.always(` Swagger: ${info.swaggerEnabled ? chalk.green("enabled") : chalk.yellow("disabled")}`);
|
|
449
|
+
if (info.watchEnabled) {
|
|
450
|
+
logger.always(` Watch Mode: ${chalk.green("enabled")}`);
|
|
451
|
+
}
|
|
452
|
+
logger.always("");
|
|
453
|
+
logger.always(chalk.bold("Available Endpoints:"));
|
|
454
|
+
logger.always(chalk.gray(" Health & Monitoring:"));
|
|
455
|
+
logger.always(` ${chalk.green("GET")} ${info.basePath}/health`);
|
|
456
|
+
logger.always(` ${chalk.green("GET")} ${info.basePath}/ready`);
|
|
457
|
+
logger.always(` ${chalk.green("GET")} ${info.basePath}/metrics`);
|
|
458
|
+
logger.always("");
|
|
459
|
+
logger.always(chalk.gray(" Agent API:"));
|
|
460
|
+
logger.always(` ${chalk.blue("POST")} ${info.basePath}/agent/execute`);
|
|
461
|
+
logger.always(` ${chalk.blue("POST")} ${info.basePath}/agent/stream`);
|
|
462
|
+
logger.always(` ${chalk.green("GET")} ${info.basePath}/agent/providers`);
|
|
463
|
+
logger.always("");
|
|
464
|
+
logger.always(chalk.gray(" Tools & MCP:"));
|
|
465
|
+
logger.always(` ${chalk.green("GET")} ${info.basePath}/tools`);
|
|
466
|
+
logger.always(` ${chalk.blue("POST")} ${info.basePath}/tools/:name/execute`);
|
|
467
|
+
logger.always(` ${chalk.green("GET")} ${info.basePath}/mcp/servers`);
|
|
468
|
+
logger.always("");
|
|
469
|
+
logger.always(chalk.gray(" Memory:"));
|
|
470
|
+
logger.always(` ${chalk.green("GET")} ${info.basePath}/memory/sessions`);
|
|
471
|
+
logger.always(` ${chalk.green("GET")} ${info.basePath}/memory/sessions/:id`);
|
|
472
|
+
if (info.swaggerEnabled) {
|
|
387
473
|
logger.always("");
|
|
388
|
-
logger.always(chalk.
|
|
389
|
-
logger.always(chalk.
|
|
390
|
-
logger.always(` ${chalk.
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
474
|
+
logger.always(chalk.gray(" OpenAPI Documentation:"));
|
|
475
|
+
logger.always(` ${chalk.green("GET")} ${info.basePath}/openapi.json`);
|
|
476
|
+
logger.always(` ${chalk.cyan("INFO")} Swagger UI available at ${info.url}${info.basePath}/docs`);
|
|
477
|
+
}
|
|
478
|
+
logger.always("");
|
|
479
|
+
logger.always(chalk.gray("Press Ctrl+C to stop the server"));
|
|
480
|
+
logger.always("");
|
|
481
|
+
}
|
|
482
|
+
/**
|
|
483
|
+
* Set up watch mode if enabled. Returns the stop-watcher function, or null if not enabled.
|
|
484
|
+
*/
|
|
485
|
+
static setupWatchMode(argv, ctx) {
|
|
486
|
+
if (!argv.watch) {
|
|
487
|
+
return null;
|
|
488
|
+
}
|
|
489
|
+
const restartServer = async () => {
|
|
490
|
+
try {
|
|
491
|
+
// Stop current server with timeout
|
|
492
|
+
await withTimeout(ctx.serverRef.current.stop(), 30000, new ServerStartError("Server stop timed out during restart", undefined, ctx.port, ctx.host));
|
|
493
|
+
// Re-import server module with cache busting for watch mode
|
|
494
|
+
const timestamp = Date.now();
|
|
495
|
+
const { createServer: createNewServer, registerAllRoutes: registerNewRoutes, } = await import(`../../lib/server/index.js?t=${timestamp}`);
|
|
496
|
+
// Create new server
|
|
497
|
+
const newServer = await createNewServer(new NeuroLink(), {
|
|
498
|
+
framework: ctx.framework,
|
|
499
|
+
config: ctx.serverConfig,
|
|
500
|
+
});
|
|
501
|
+
registerNewRoutes(newServer, ctx.basePath);
|
|
502
|
+
// Initialize and start with timeouts
|
|
503
|
+
await withTimeout(newServer.initialize(), 30000, new ServerStartError("Server initialization timed out during restart", undefined, ctx.port, ctx.host));
|
|
504
|
+
await withTimeout(newServer.start(), 30000, new ServerStartError("Server startup timed out during restart", undefined, ctx.port, ctx.host));
|
|
505
|
+
// Update the reference so signal handlers use the new server instance
|
|
506
|
+
ctx.serverRef.current = newServer;
|
|
507
|
+
logger.always(chalk.green("Server restarted successfully"));
|
|
412
508
|
}
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
logger.always("");
|
|
416
|
-
// Set up watch mode if enabled
|
|
417
|
-
let stopWatcher = null;
|
|
418
|
-
if (argv.watch) {
|
|
419
|
-
const restartServer = async () => {
|
|
420
|
-
try {
|
|
421
|
-
// Stop current server with timeout
|
|
422
|
-
await withTimeout(serverRef.current.stop(), 30000, new ServerStartError("Server stop timed out during restart", undefined, port, host));
|
|
423
|
-
// Re-import server module with cache busting for watch mode
|
|
424
|
-
// Append timestamp query to force ESM to re-evaluate the module
|
|
425
|
-
const timestamp = Date.now();
|
|
426
|
-
const { createServer: createNewServer, registerAllRoutes: registerNewRoutes, } = await import(`../../lib/server/index.js?t=${timestamp}`);
|
|
427
|
-
// Create new server
|
|
428
|
-
const newServer = await createNewServer(new NeuroLink(), {
|
|
429
|
-
framework: framework,
|
|
430
|
-
config: serverConfig,
|
|
431
|
-
});
|
|
432
|
-
registerNewRoutes(newServer, basePath);
|
|
433
|
-
// Initialize and start with timeouts
|
|
434
|
-
await withTimeout(newServer.initialize(), 30000, new ServerStartError("Server initialization timed out during restart", undefined, port, host));
|
|
435
|
-
await withTimeout(newServer.start(), 30000, new ServerStartError("Server startup timed out during restart", undefined, port, host));
|
|
436
|
-
// Update the reference so signal handlers use the new server instance
|
|
437
|
-
serverRef.current = newServer;
|
|
438
|
-
logger.always(chalk.green("Server restarted successfully"));
|
|
439
|
-
}
|
|
440
|
-
catch (restartError) {
|
|
441
|
-
logger.error(chalk.red(`Error restarting server: ${restartError instanceof Error ? restartError.message : String(restartError)}`));
|
|
442
|
-
}
|
|
443
|
-
};
|
|
444
|
-
stopWatcher = createFileWatcher(restartServer, argv.quiet ?? false);
|
|
445
|
-
logger.always(chalk.gray("Watching for file changes in src/ and lib/..."));
|
|
446
|
-
logger.always("");
|
|
509
|
+
catch (restartError) {
|
|
510
|
+
logger.error(chalk.red(`Error restarting server: ${restartError instanceof Error ? restartError.message : String(restartError)}`));
|
|
447
511
|
}
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
logger.error(chalk.red(`Error stopping server: ${error instanceof Error ? error.message : String(error)}`));
|
|
465
|
-
process.exit(1);
|
|
466
|
-
}
|
|
467
|
-
});
|
|
468
|
-
process.on("SIGTERM", async () => {
|
|
469
|
-
try {
|
|
470
|
-
if (stopWatcher) {
|
|
471
|
-
stopWatcher();
|
|
472
|
-
}
|
|
473
|
-
await withTimeout(serverRef.current.stop(), 30000, new Error("Server stop timed out during SIGTERM"));
|
|
474
|
-
clearServeState();
|
|
475
|
-
process.exit(0);
|
|
512
|
+
};
|
|
513
|
+
const stopWatcher = createFileWatcher(restartServer, argv.quiet ?? false);
|
|
514
|
+
logger.always(chalk.gray("Watching for file changes in src/ and lib/..."));
|
|
515
|
+
logger.always("");
|
|
516
|
+
return stopWatcher;
|
|
517
|
+
}
|
|
518
|
+
/**
|
|
519
|
+
* Register SIGINT and SIGTERM handlers for graceful shutdown.
|
|
520
|
+
*/
|
|
521
|
+
static registerSignalHandlers(serverRef, stopWatcher) {
|
|
522
|
+
process.on("SIGINT", async () => {
|
|
523
|
+
logger.always("");
|
|
524
|
+
logger.always(chalk.yellow("Shutting down server..."));
|
|
525
|
+
try {
|
|
526
|
+
if (stopWatcher) {
|
|
527
|
+
stopWatcher();
|
|
476
528
|
}
|
|
477
|
-
|
|
478
|
-
|
|
479
|
-
|
|
480
|
-
|
|
529
|
+
await serverRef.current.stop();
|
|
530
|
+
clearServeState();
|
|
531
|
+
logger.always(chalk.green("Server stopped gracefully"));
|
|
532
|
+
process.exit(0);
|
|
533
|
+
}
|
|
534
|
+
catch (error) {
|
|
535
|
+
logger.error(chalk.red(`Error stopping server: ${error instanceof Error ? error.message : String(error)}`));
|
|
536
|
+
process.exit(1);
|
|
537
|
+
}
|
|
538
|
+
});
|
|
539
|
+
process.on("SIGTERM", async () => {
|
|
540
|
+
try {
|
|
541
|
+
if (stopWatcher) {
|
|
542
|
+
stopWatcher();
|
|
481
543
|
}
|
|
482
|
-
|
|
483
|
-
|
|
484
|
-
|
|
485
|
-
if (spinner) {
|
|
486
|
-
spinner.fail(chalk.red("Failed to start server"));
|
|
544
|
+
await withTimeout(serverRef.current.stop(), 30000, new Error("Server stop timed out during SIGTERM"));
|
|
545
|
+
clearServeState();
|
|
546
|
+
process.exit(0);
|
|
487
547
|
}
|
|
488
|
-
|
|
489
|
-
|
|
490
|
-
|
|
548
|
+
catch (error) {
|
|
549
|
+
logger.error(chalk.red(`Error stopping server: ${error instanceof Error ? error.message : String(error)}`));
|
|
550
|
+
clearServeState();
|
|
551
|
+
process.exit(1);
|
|
491
552
|
}
|
|
492
|
-
|
|
493
|
-
|
|
494
|
-
|
|
495
|
-
|
|
496
|
-
|
|
497
|
-
|
|
498
|
-
|
|
499
|
-
|
|
553
|
+
});
|
|
554
|
+
}
|
|
555
|
+
/**
|
|
556
|
+
* Handle errors during server startup: print error, troubleshooting tips, and exit.
|
|
557
|
+
*/
|
|
558
|
+
static handleStartupError(error, argv, spinner) {
|
|
559
|
+
if (spinner) {
|
|
560
|
+
spinner.fail(chalk.red("Failed to start server"));
|
|
561
|
+
}
|
|
562
|
+
logger.error(chalk.red(`Error: ${error instanceof Error ? error.message : String(error)}`));
|
|
563
|
+
if (argv.debug && error instanceof Error && error.stack) {
|
|
564
|
+
logger.error(chalk.gray(error.stack));
|
|
500
565
|
}
|
|
566
|
+
logger.always("");
|
|
567
|
+
logger.always(chalk.bold("Troubleshooting:"));
|
|
568
|
+
logger.always(" 1. Check if the port is already in use");
|
|
569
|
+
logger.always(" 2. Verify the framework is installed (npm install hono/express/fastify/koa)");
|
|
570
|
+
logger.always(" 3. Check your config file format if using --config");
|
|
571
|
+
logger.always(" 4. Run with --debug for more information");
|
|
572
|
+
logger.always("");
|
|
573
|
+
process.exit(1);
|
|
501
574
|
}
|
|
502
575
|
static async executeStatus(argv) {
|
|
503
576
|
try {
|
|
@@ -8,9 +8,9 @@
|
|
|
8
8
|
*
|
|
9
9
|
* Follows the same UX patterns as setup-openai and setup-google-ai
|
|
10
10
|
*/
|
|
11
|
-
|
|
11
|
+
type AnthropicSetupArgv = {
|
|
12
12
|
check?: boolean;
|
|
13
13
|
nonInteractive?: boolean;
|
|
14
|
-
}
|
|
14
|
+
};
|
|
15
15
|
export declare function handleAnthropicSetup(argv: AnthropicSetupArgv): Promise<void>;
|
|
16
16
|
export {};
|
|
@@ -9,9 +9,9 @@
|
|
|
9
9
|
*
|
|
10
10
|
* Follows the same UX patterns as other setup commands
|
|
11
11
|
*/
|
|
12
|
-
|
|
12
|
+
type AzureSetupArgv = {
|
|
13
13
|
check?: boolean;
|
|
14
14
|
nonInteractive?: boolean;
|
|
15
|
-
}
|
|
15
|
+
};
|
|
16
16
|
export declare function handleAzureSetup(argv: AzureSetupArgv): Promise<void>;
|
|
17
17
|
export {};
|
|
@@ -5,9 +5,9 @@
|
|
|
5
5
|
* Checks for AWS_ACCESS_KEY_ID and AWS_SECRET_ACCESS_KEY
|
|
6
6
|
* Auto-detects AWS CLI configuration, prompts for missing config, updates .env safely
|
|
7
7
|
*/
|
|
8
|
-
|
|
8
|
+
type BedrockSetupArgv = {
|
|
9
9
|
check?: boolean;
|
|
10
10
|
nonInteractive?: boolean;
|
|
11
|
-
}
|
|
11
|
+
};
|
|
12
12
|
export declare function handleBedrockSetup(argv: BedrockSetupArgv): Promise<void>;
|
|
13
13
|
export {};
|
|
@@ -10,9 +10,9 @@
|
|
|
10
10
|
* All methods require GOOGLE_VERTEX_PROJECT
|
|
11
11
|
* Optional: GOOGLE_VERTEX_LOCATION (defaults to 'us-central1')
|
|
12
12
|
*/
|
|
13
|
-
|
|
13
|
+
type GCPSetupArgv = {
|
|
14
14
|
check?: boolean;
|
|
15
15
|
nonInteractive?: boolean;
|
|
16
|
-
}
|
|
16
|
+
};
|
|
17
17
|
export declare function handleGCPSetup(argv: GCPSetupArgv): Promise<void>;
|
|
18
18
|
export {};
|