@juspay/neurolink 9.5.2 → 9.6.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/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/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/conversationMemoryManager.d.ts +5 -15
- package/dist/core/conversationMemoryManager.js +15 -75
- 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 +8 -14
- package/dist/core/redisConversationMemoryManager.js +69 -78
- 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/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/conversationMemoryManager.d.ts +5 -15
- package/dist/lib/core/conversationMemoryManager.js +15 -75
- 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 +8 -14
- package/dist/lib/core/redisConversationMemoryManager.js +69 -78
- 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/memory/mem0Initializer.d.ts +2 -2
- package/dist/lib/neurolink.d.ts +61 -2
- package/dist/lib/neurolink.js +619 -307
- 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/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/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/googleAiStudio.d.ts +34 -0
- package/dist/lib/providers/googleAiStudio.js +267 -397
- package/dist/lib/providers/googleVertex.d.ts +55 -1
- package/dist/lib/providers/googleVertex.js +452 -719
- 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/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/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 +22 -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 +481 -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 +11 -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 +76 -36
- 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/rateLimiter.d.ts +2 -2
- 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/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/memory/mem0Initializer.d.ts +2 -2
- package/dist/neurolink.d.ts +61 -2
- package/dist/neurolink.js +619 -307
- 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/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/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/googleAiStudio.d.ts +34 -0
- package/dist/providers/googleAiStudio.js +267 -397
- package/dist/providers/googleVertex.d.ts +55 -1
- package/dist/providers/googleVertex.js +452 -719
- 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/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/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 +22 -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 +481 -0
- package/dist/types/ragTypes.js +7 -0
- package/dist/types/sdkTypes.d.ts +17 -18
- package/dist/types/streamTypes.d.ts +11 -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 +76 -36
- 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/rateLimiter.d.ts +2 -2
- 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/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
|
@@ -0,0 +1,106 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* ContextCompactor
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates multi-stage context reduction:
|
|
5
|
+
*
|
|
6
|
+
* Stage 1: Tool Output Pruning (cheapest -- no LLM call)
|
|
7
|
+
* Stage 2: File Read Deduplication (cheap -- no LLM call)
|
|
8
|
+
* Stage 3: LLM Summarization (expensive -- requires LLM call)
|
|
9
|
+
* Stage 4: Sliding Window Truncation (fallback -- no LLM call)
|
|
10
|
+
*/
|
|
11
|
+
import { estimateMessagesTokens } from "../utils/tokenEstimation.js";
|
|
12
|
+
import { pruneToolOutputs } from "./stages/toolOutputPruner.js";
|
|
13
|
+
import { deduplicateFileReads } from "./stages/fileReadDeduplicator.js";
|
|
14
|
+
import { summarizeMessages } from "./stages/structuredSummarizer.js";
|
|
15
|
+
import { truncateWithSlidingWindow } from "./stages/slidingWindowTruncator.js";
|
|
16
|
+
const DEFAULT_CONFIG = {
|
|
17
|
+
enablePrune: true,
|
|
18
|
+
enableDeduplicate: true,
|
|
19
|
+
enableSummarize: true,
|
|
20
|
+
enableTruncate: true,
|
|
21
|
+
pruneProtectTokens: 40_000,
|
|
22
|
+
pruneMinimumSavings: 20_000,
|
|
23
|
+
pruneProtectedTools: ["skill"],
|
|
24
|
+
summarizationProvider: "vertex",
|
|
25
|
+
summarizationModel: "gemini-2.5-flash",
|
|
26
|
+
keepRecentRatio: 0.3,
|
|
27
|
+
truncationFraction: 0.5,
|
|
28
|
+
provider: "",
|
|
29
|
+
};
|
|
30
|
+
export class ContextCompactor {
|
|
31
|
+
config;
|
|
32
|
+
constructor(config) {
|
|
33
|
+
this.config = { ...DEFAULT_CONFIG, ...config };
|
|
34
|
+
}
|
|
35
|
+
/**
|
|
36
|
+
* Run the multi-stage compaction pipeline until messages fit within budget.
|
|
37
|
+
*/
|
|
38
|
+
async compact(messages, targetTokens, memoryConfig) {
|
|
39
|
+
const provider = this.config.provider || undefined;
|
|
40
|
+
const tokensBefore = estimateMessagesTokens(messages, provider);
|
|
41
|
+
const stagesUsed = [];
|
|
42
|
+
let currentMessages = [...messages];
|
|
43
|
+
// Stage 1: Tool Output Pruning
|
|
44
|
+
if (this.config.enablePrune &&
|
|
45
|
+
estimateMessagesTokens(currentMessages, provider) > targetTokens) {
|
|
46
|
+
const pruneResult = pruneToolOutputs(currentMessages, {
|
|
47
|
+
protectTokens: this.config.pruneProtectTokens,
|
|
48
|
+
minimumSavings: this.config.pruneMinimumSavings,
|
|
49
|
+
protectedTools: this.config.pruneProtectedTools,
|
|
50
|
+
provider,
|
|
51
|
+
});
|
|
52
|
+
if (pruneResult.pruned) {
|
|
53
|
+
currentMessages = pruneResult.messages;
|
|
54
|
+
stagesUsed.push("prune");
|
|
55
|
+
}
|
|
56
|
+
}
|
|
57
|
+
// Stage 2: File Read Deduplication
|
|
58
|
+
if (this.config.enableDeduplicate &&
|
|
59
|
+
estimateMessagesTokens(currentMessages, provider) > targetTokens) {
|
|
60
|
+
const dedupResult = deduplicateFileReads(currentMessages);
|
|
61
|
+
if (dedupResult.deduplicated) {
|
|
62
|
+
currentMessages = dedupResult.messages;
|
|
63
|
+
stagesUsed.push("deduplicate");
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
// Stage 3: LLM Summarization
|
|
67
|
+
if (this.config.enableSummarize &&
|
|
68
|
+
estimateMessagesTokens(currentMessages, provider) > targetTokens) {
|
|
69
|
+
try {
|
|
70
|
+
const summarizeResult = await summarizeMessages(currentMessages, {
|
|
71
|
+
provider: this.config.summarizationProvider,
|
|
72
|
+
model: this.config.summarizationModel,
|
|
73
|
+
keepRecentRatio: this.config.keepRecentRatio,
|
|
74
|
+
memoryConfig,
|
|
75
|
+
});
|
|
76
|
+
if (summarizeResult.summarized) {
|
|
77
|
+
currentMessages = summarizeResult.messages;
|
|
78
|
+
stagesUsed.push("summarize");
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
catch {
|
|
82
|
+
// Summarization failed, fall through to truncation
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
// Stage 4: Sliding Window Truncation (fallback)
|
|
86
|
+
if (this.config.enableTruncate &&
|
|
87
|
+
estimateMessagesTokens(currentMessages, provider) > targetTokens) {
|
|
88
|
+
const truncResult = truncateWithSlidingWindow(currentMessages, {
|
|
89
|
+
fraction: this.config.truncationFraction,
|
|
90
|
+
});
|
|
91
|
+
if (truncResult.truncated) {
|
|
92
|
+
currentMessages = truncResult.messages;
|
|
93
|
+
stagesUsed.push("truncate");
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
const tokensAfter = estimateMessagesTokens(currentMessages, provider);
|
|
97
|
+
return {
|
|
98
|
+
compacted: stagesUsed.length > 0,
|
|
99
|
+
stagesUsed,
|
|
100
|
+
tokensBefore,
|
|
101
|
+
tokensAfter,
|
|
102
|
+
tokensSaved: tokensBefore - tokensAfter,
|
|
103
|
+
messages: currentMessages,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
}
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effective History Filter
|
|
3
|
+
*
|
|
4
|
+
* Filters message arrays to return only "visible" messages,
|
|
5
|
+
* excluding those tagged by condensation or truncation.
|
|
6
|
+
* Supports non-destructive context management where messages
|
|
7
|
+
* are tagged instead of deleted.
|
|
8
|
+
*/
|
|
9
|
+
import type { ChatMessage } from "../types/conversation.js";
|
|
10
|
+
/**
|
|
11
|
+
* Get the effective (visible) history from a message array.
|
|
12
|
+
*
|
|
13
|
+
* Filters out:
|
|
14
|
+
* - Messages with a condenseParent (replaced by a summary)
|
|
15
|
+
* - Messages with a truncationParent (hidden by truncation)
|
|
16
|
+
*
|
|
17
|
+
* Keeps:
|
|
18
|
+
* - Summary messages (isSummary = true)
|
|
19
|
+
* - Truncation markers (isTruncationMarker = true)
|
|
20
|
+
* - All other untagged messages
|
|
21
|
+
*/
|
|
22
|
+
export declare function getEffectiveHistory(messages: ChatMessage[]): ChatMessage[];
|
|
23
|
+
/**
|
|
24
|
+
* Tag messages for condensation (non-destructive summary).
|
|
25
|
+
*
|
|
26
|
+
* @param messages - Full message array
|
|
27
|
+
* @param fromIndex - Start index of messages to condense
|
|
28
|
+
* @param toIndex - End index (exclusive) of messages to condense
|
|
29
|
+
* @param condenseId - UUID for this condensation group
|
|
30
|
+
* @returns Updated message array with tags applied
|
|
31
|
+
*/
|
|
32
|
+
export declare function tagForCondensation(messages: ChatMessage[], fromIndex: number, toIndex: number, condenseId: string): ChatMessage[];
|
|
33
|
+
/**
|
|
34
|
+
* Tag messages for truncation (non-destructive hiding).
|
|
35
|
+
*
|
|
36
|
+
* @param messages - Full message array
|
|
37
|
+
* @param fromIndex - Start index of messages to truncate
|
|
38
|
+
* @param toIndex - End index (exclusive) of messages to truncate
|
|
39
|
+
* @param truncationId - UUID for this truncation group
|
|
40
|
+
* @returns Updated message array with tags applied
|
|
41
|
+
*/
|
|
42
|
+
export declare function tagForTruncation(messages: ChatMessage[], fromIndex: number, toIndex: number, truncationId: string): ChatMessage[];
|
|
43
|
+
/**
|
|
44
|
+
* Remove condensation tags (rewind).
|
|
45
|
+
* Makes previously condensed messages visible again.
|
|
46
|
+
*/
|
|
47
|
+
export declare function removeCondensationTags(messages: ChatMessage[], condenseId: string): ChatMessage[];
|
|
48
|
+
/**
|
|
49
|
+
* Remove truncation tags (rewind).
|
|
50
|
+
* Makes previously truncated messages visible again.
|
|
51
|
+
*/
|
|
52
|
+
export declare function removeTruncationTags(messages: ChatMessage[], truncationId: string): ChatMessage[];
|
|
@@ -0,0 +1,105 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Effective History Filter
|
|
3
|
+
*
|
|
4
|
+
* Filters message arrays to return only "visible" messages,
|
|
5
|
+
* excluding those tagged by condensation or truncation.
|
|
6
|
+
* Supports non-destructive context management where messages
|
|
7
|
+
* are tagged instead of deleted.
|
|
8
|
+
*/
|
|
9
|
+
/**
|
|
10
|
+
* Get the effective (visible) history from a message array.
|
|
11
|
+
*
|
|
12
|
+
* Filters out:
|
|
13
|
+
* - Messages with a condenseParent (replaced by a summary)
|
|
14
|
+
* - Messages with a truncationParent (hidden by truncation)
|
|
15
|
+
*
|
|
16
|
+
* Keeps:
|
|
17
|
+
* - Summary messages (isSummary = true)
|
|
18
|
+
* - Truncation markers (isTruncationMarker = true)
|
|
19
|
+
* - All other untagged messages
|
|
20
|
+
*/
|
|
21
|
+
export function getEffectiveHistory(messages) {
|
|
22
|
+
return messages.filter((msg) => {
|
|
23
|
+
// Exclude messages that have been condensed (replaced by summary)
|
|
24
|
+
if (msg.condenseParent) {
|
|
25
|
+
return false;
|
|
26
|
+
}
|
|
27
|
+
// Exclude messages that have been truncated (hidden by marker)
|
|
28
|
+
if (msg.truncationParent) {
|
|
29
|
+
return false;
|
|
30
|
+
}
|
|
31
|
+
return true;
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* Tag messages for condensation (non-destructive summary).
|
|
36
|
+
*
|
|
37
|
+
* @param messages - Full message array
|
|
38
|
+
* @param fromIndex - Start index of messages to condense
|
|
39
|
+
* @param toIndex - End index (exclusive) of messages to condense
|
|
40
|
+
* @param condenseId - UUID for this condensation group
|
|
41
|
+
* @returns Updated message array with tags applied
|
|
42
|
+
*/
|
|
43
|
+
export function tagForCondensation(messages, fromIndex, toIndex, condenseId) {
|
|
44
|
+
return messages.map((msg, i) => {
|
|
45
|
+
if (i >= fromIndex && i < toIndex) {
|
|
46
|
+
return { ...msg, condenseParent: condenseId };
|
|
47
|
+
}
|
|
48
|
+
return msg;
|
|
49
|
+
});
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Tag messages for truncation (non-destructive hiding).
|
|
53
|
+
*
|
|
54
|
+
* @param messages - Full message array
|
|
55
|
+
* @param fromIndex - Start index of messages to truncate
|
|
56
|
+
* @param toIndex - End index (exclusive) of messages to truncate
|
|
57
|
+
* @param truncationId - UUID for this truncation group
|
|
58
|
+
* @returns Updated message array with tags applied
|
|
59
|
+
*/
|
|
60
|
+
export function tagForTruncation(messages, fromIndex, toIndex, truncationId) {
|
|
61
|
+
return messages.map((msg, i) => {
|
|
62
|
+
if (i >= fromIndex && i < toIndex) {
|
|
63
|
+
return { ...msg, truncationParent: truncationId };
|
|
64
|
+
}
|
|
65
|
+
return msg;
|
|
66
|
+
});
|
|
67
|
+
}
|
|
68
|
+
/**
|
|
69
|
+
* Remove condensation tags (rewind).
|
|
70
|
+
* Makes previously condensed messages visible again.
|
|
71
|
+
*/
|
|
72
|
+
export function removeCondensationTags(messages, condenseId) {
|
|
73
|
+
return messages
|
|
74
|
+
.map((msg) => {
|
|
75
|
+
if (msg.condenseParent === condenseId) {
|
|
76
|
+
const { condenseParent, ...rest } = msg;
|
|
77
|
+
return rest;
|
|
78
|
+
}
|
|
79
|
+
// Also remove the summary message itself
|
|
80
|
+
if (msg.condenseId === condenseId && msg.metadata?.isSummary) {
|
|
81
|
+
return null;
|
|
82
|
+
}
|
|
83
|
+
return msg;
|
|
84
|
+
})
|
|
85
|
+
.filter((msg) => msg !== null);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* Remove truncation tags (rewind).
|
|
89
|
+
* Makes previously truncated messages visible again.
|
|
90
|
+
*/
|
|
91
|
+
export function removeTruncationTags(messages, truncationId) {
|
|
92
|
+
return messages
|
|
93
|
+
.map((msg) => {
|
|
94
|
+
if (msg.truncationParent === truncationId) {
|
|
95
|
+
const { truncationParent, ...rest } = msg;
|
|
96
|
+
return rest;
|
|
97
|
+
}
|
|
98
|
+
// Also remove the truncation marker itself
|
|
99
|
+
if (msg.truncationId === truncationId && msg.isTruncationMarker) {
|
|
100
|
+
return null;
|
|
101
|
+
}
|
|
102
|
+
return msg;
|
|
103
|
+
})
|
|
104
|
+
.filter((msg) => msg !== null);
|
|
105
|
+
}
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Overflow Error Detection
|
|
3
|
+
*
|
|
4
|
+
* Cross-provider regex patterns to detect context window overflow errors.
|
|
5
|
+
* Modeled on Cline + pi-mono patterns.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Check if an error is a context overflow error from any provider.
|
|
9
|
+
*/
|
|
10
|
+
export declare function isContextOverflowError(error: unknown): boolean;
|
|
11
|
+
/**
|
|
12
|
+
* Identify which provider produced the context overflow error.
|
|
13
|
+
*/
|
|
14
|
+
export declare function getContextOverflowProvider(error: unknown): string | null;
|
|
@@ -0,0 +1,124 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Context Overflow Error Detection
|
|
3
|
+
*
|
|
4
|
+
* Cross-provider regex patterns to detect context window overflow errors.
|
|
5
|
+
* Modeled on Cline + pi-mono patterns.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* Provider-specific error patterns for context overflow.
|
|
9
|
+
*
|
|
10
|
+
* IMPORTANT: Order matters for getContextOverflowProvider - more specific
|
|
11
|
+
* patterns should be checked first. OpenAI patterns are very specific
|
|
12
|
+
* (e.g., "This model's maximum context length is") so they come first.
|
|
13
|
+
*/
|
|
14
|
+
const OVERFLOW_PATTERNS = [
|
|
15
|
+
{
|
|
16
|
+
provider: "openai",
|
|
17
|
+
patterns: [
|
|
18
|
+
/This model's maximum context length is/i,
|
|
19
|
+
/tokens\. However, (?:your messages|you requested)/i,
|
|
20
|
+
/reduce the length of the messages/i,
|
|
21
|
+
/Please reduce the length/i,
|
|
22
|
+
],
|
|
23
|
+
},
|
|
24
|
+
{
|
|
25
|
+
provider: "azure",
|
|
26
|
+
patterns: [/content_length_exceeded/i],
|
|
27
|
+
},
|
|
28
|
+
{
|
|
29
|
+
provider: "google",
|
|
30
|
+
patterns: [
|
|
31
|
+
/RESOURCE_EXHAUSTED/i,
|
|
32
|
+
/exceeds the maximum number of tokens/i,
|
|
33
|
+
/content is too long/i,
|
|
34
|
+
/request payload size exceeds/i,
|
|
35
|
+
/input token limit/i,
|
|
36
|
+
],
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
provider: "bedrock",
|
|
40
|
+
patterns: [
|
|
41
|
+
/ValidationException.*token/i,
|
|
42
|
+
/Input is too long/i,
|
|
43
|
+
/exceeds the model's maximum/i,
|
|
44
|
+
],
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
provider: "mistral",
|
|
48
|
+
patterns: [/context length exceeded/i, /maximum number of tokens/i],
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
provider: "openrouter",
|
|
52
|
+
patterns: [/context_length_exceeded/i],
|
|
53
|
+
},
|
|
54
|
+
{
|
|
55
|
+
provider: "anthropic",
|
|
56
|
+
patterns: [
|
|
57
|
+
/prompt is too long/i,
|
|
58
|
+
/input is too long/i,
|
|
59
|
+
/too many tokens/i,
|
|
60
|
+
/maximum context length/i,
|
|
61
|
+
],
|
|
62
|
+
},
|
|
63
|
+
];
|
|
64
|
+
/**
|
|
65
|
+
* Check if an error is a context overflow error from any provider.
|
|
66
|
+
*/
|
|
67
|
+
export function isContextOverflowError(error) {
|
|
68
|
+
const errorMessage = extractErrorMessage(error);
|
|
69
|
+
if (!errorMessage) {
|
|
70
|
+
return false;
|
|
71
|
+
}
|
|
72
|
+
return OVERFLOW_PATTERNS.some(({ patterns }) => patterns.some((pattern) => pattern.test(errorMessage)));
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Identify which provider produced the context overflow error.
|
|
76
|
+
*/
|
|
77
|
+
export function getContextOverflowProvider(error) {
|
|
78
|
+
const errorMessage = extractErrorMessage(error);
|
|
79
|
+
if (!errorMessage) {
|
|
80
|
+
return null;
|
|
81
|
+
}
|
|
82
|
+
for (const { provider, patterns } of OVERFLOW_PATTERNS) {
|
|
83
|
+
if (patterns.some((pattern) => pattern.test(errorMessage))) {
|
|
84
|
+
return provider;
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
return null;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* Extract error message from various error formats.
|
|
91
|
+
*/
|
|
92
|
+
function extractErrorMessage(error) {
|
|
93
|
+
if (!error) {
|
|
94
|
+
return null;
|
|
95
|
+
}
|
|
96
|
+
if (typeof error === "string") {
|
|
97
|
+
return error;
|
|
98
|
+
}
|
|
99
|
+
if (error instanceof Error) {
|
|
100
|
+
// Check nested error messages too
|
|
101
|
+
const msg = error.message;
|
|
102
|
+
const cause = error?.cause;
|
|
103
|
+
if (cause instanceof Error) {
|
|
104
|
+
return `${msg} ${cause.message}`;
|
|
105
|
+
}
|
|
106
|
+
return msg;
|
|
107
|
+
}
|
|
108
|
+
if (typeof error === "object") {
|
|
109
|
+
const obj = error;
|
|
110
|
+
if (typeof obj.message === "string") {
|
|
111
|
+
return obj.message;
|
|
112
|
+
}
|
|
113
|
+
if (typeof obj.error === "string") {
|
|
114
|
+
return obj.error;
|
|
115
|
+
}
|
|
116
|
+
if (typeof obj.error === "object" && obj.error !== null) {
|
|
117
|
+
const nested = obj.error;
|
|
118
|
+
if (typeof nested.message === "string") {
|
|
119
|
+
return nested.message;
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
return null;
|
|
124
|
+
}
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* File Summarization Service
|
|
3
|
+
*
|
|
4
|
+
* Orchestrates the end-to-end file summarization pipeline:
|
|
5
|
+
* 1. Accept raw file inputs (strings or Buffers)
|
|
6
|
+
* 2. Extract readable text and estimate tokens
|
|
7
|
+
* 3. Use `planFileSummarization()` to decide which files to summarize
|
|
8
|
+
* 4. Call an LLM to produce context-aware summaries of the largest files
|
|
9
|
+
* 5. Fall back to truncation when the LLM call fails
|
|
10
|
+
*
|
|
11
|
+
* The LLM is instantiated via a *dynamic import* of NeuroLink to avoid
|
|
12
|
+
* circular dependency issues (NeuroLink → fileSummarizationService → NeuroLink).
|
|
13
|
+
*/
|
|
14
|
+
import { type FileForSummarization, type FileSummarizationCheckParams, type SummarizedFile } from "./fileSummarizer.js";
|
|
15
|
+
import type { RawFileInput } from "../types/contextTypes.js";
|
|
16
|
+
export type { RawFileInput } from "../types/contextTypes.js";
|
|
17
|
+
/** Constructor options. */
|
|
18
|
+
type FileSummarizationServiceOptions = {
|
|
19
|
+
/** Provider used for the summarization LLM call (default: "vertex") */
|
|
20
|
+
provider?: string;
|
|
21
|
+
/** Model used for the summarization LLM call (default: "gemini-2.5-flash") */
|
|
22
|
+
model?: string;
|
|
23
|
+
};
|
|
24
|
+
export declare class FileSummarizationService {
|
|
25
|
+
private readonly provider;
|
|
26
|
+
private readonly model;
|
|
27
|
+
constructor(options?: FileSummarizationServiceOptions);
|
|
28
|
+
/**
|
|
29
|
+
* Extract readable text from a file's content.
|
|
30
|
+
*
|
|
31
|
+
* - Strings are returned as-is.
|
|
32
|
+
* - Buffers are decoded as UTF-8 when the MIME type is textual.
|
|
33
|
+
* - Known-binary types (image/*, audio/*, video/*) return a placeholder.
|
|
34
|
+
*/
|
|
35
|
+
extractFileText(content: string | Buffer, mimeType: string, fileName: string): string;
|
|
36
|
+
/**
|
|
37
|
+
* Map a MIME type (and filename for fallback) to a human-readable label.
|
|
38
|
+
*/
|
|
39
|
+
getFileTypeLabel(mimeType: string, fileName: string): string;
|
|
40
|
+
/**
|
|
41
|
+
* Convert an array of raw file inputs into `FileForSummarization` objects.
|
|
42
|
+
*
|
|
43
|
+
* Extracts text and estimates token count for each file.
|
|
44
|
+
*/
|
|
45
|
+
prepareFilesForSummarization(files: RawFileInput[], provider?: string): FileForSummarization[];
|
|
46
|
+
/**
|
|
47
|
+
* Summarize files that exceed the context budget.
|
|
48
|
+
*
|
|
49
|
+
* For each file marked "summarize" by `planFileSummarization()`, we call
|
|
50
|
+
* the configured LLM to produce a context-aware summary. If the LLM call
|
|
51
|
+
* fails, we fall back to naive truncation so the request can still proceed.
|
|
52
|
+
*/
|
|
53
|
+
summarizeFiles(files: FileForSummarization[], userPrompt: string, budgetParams: FileSummarizationCheckParams): Promise<SummarizedFile[]>;
|
|
54
|
+
}
|