@vybestack/llxprt-code-core 0.1.15 → 0.1.16
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/README.md +37 -2
- package/dist/src/code_assist/converter.d.ts +2 -1
- package/dist/src/code_assist/converter.js +2 -1
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +13 -10
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +2 -2
- package/dist/src/code_assist/server.js +4 -4
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +9 -9
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.js +1 -1
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js +2 -2
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/config/config.d.ts +22 -4
- package/dist/src/config/config.js +58 -10
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +28 -0
- package/dist/src/config/config.test.js.map +1 -1
- package/dist/src/config/flashFallback.test.js +11 -1
- package/dist/src/config/flashFallback.test.js.map +1 -1
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/profileManager.d.ts +42 -0
- package/dist/src/config/profileManager.js +114 -0
- package/dist/src/config/profileManager.js.map +1 -0
- package/dist/src/core/client.d.ts +11 -1
- package/dist/src/core/client.js +86 -30
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.d.ts +1 -1
- package/dist/src/core/client.test.js +95 -28
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +2 -2
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/coreToolScheduler.js +39 -15
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +14 -17
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/geminiChat.js +34 -2
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +2 -2
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.js +11 -3
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +5 -2
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/prompts-async.test.d.ts +6 -0
- package/dist/src/core/prompts-async.test.js +115 -0
- package/dist/src/core/prompts-async.test.js.map +1 -0
- package/dist/src/core/prompts.d.ts +8 -1
- package/dist/src/core/prompts.js +97 -377
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +46 -192
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/tokenLimits.d.ts +1 -1
- package/dist/src/core/tokenLimits.js +5 -1
- package/dist/src/core/tokenLimits.js.map +1 -1
- package/dist/src/core/turn.d.ts +3 -0
- package/dist/src/core/turn.js +3 -0
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +10 -0
- package/dist/src/ide/detect-ide.js +24 -0
- package/dist/src/ide/detect-ide.js.map +1 -0
- package/dist/src/ide/ide-client.d.ts +11 -1
- package/dist/src/ide/ide-client.js +37 -1
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-installer.d.ts +15 -0
- package/dist/src/ide/ide-installer.js +111 -0
- package/dist/src/ide/ide-installer.js.map +1 -0
- package/dist/src/ide/ide-installer.test.d.ts +6 -0
- package/dist/src/ide/ide-installer.test.js +78 -0
- package/dist/src/ide/ide-installer.test.js.map +1 -0
- package/dist/src/index.d.ts +9 -0
- package/dist/src/index.js +11 -0
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/oauth-provider.js +3 -3
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +9 -8
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/parsers/TextToolCallParser.d.ts +1 -0
- package/dist/src/parsers/TextToolCallParser.js +45 -3
- package/dist/src/parsers/TextToolCallParser.js.map +1 -1
- package/dist/src/parsers/TextToolCallParser.multibyte.test.d.ts +1 -0
- package/dist/src/parsers/TextToolCallParser.multibyte.test.js +42 -0
- package/dist/src/parsers/TextToolCallParser.multibyte.test.js.map +1 -0
- package/dist/src/prompt-config/TemplateEngine.d.ts +35 -0
- package/dist/src/prompt-config/TemplateEngine.js +149 -0
- package/dist/src/prompt-config/TemplateEngine.js.map +1 -0
- package/dist/src/prompt-config/TemplateEngine.test.d.ts +1 -0
- package/dist/src/prompt-config/TemplateEngine.test.js +494 -0
- package/dist/src/prompt-config/TemplateEngine.test.js.map +1 -0
- package/dist/src/prompt-config/defaults/compression.md +58 -0
- package/dist/src/prompt-config/defaults/core-defaults.d.ts +5 -0
- package/dist/src/prompt-config/defaults/core-defaults.js +332 -0
- package/dist/src/prompt-config/defaults/core-defaults.js.map +1 -0
- package/dist/src/prompt-config/defaults/core.md +267 -0
- package/dist/src/prompt-config/defaults/env/git-repository.md +15 -0
- package/dist/src/prompt-config/defaults/env/ide-mode.md +3 -0
- package/dist/src/prompt-config/defaults/env/macos-seatbelt.md +3 -0
- package/dist/src/prompt-config/defaults/env/outside-of-sandbox.md +3 -0
- package/dist/src/prompt-config/defaults/env/sandbox.md +3 -0
- package/dist/src/prompt-config/defaults/index.d.ts +14 -0
- package/dist/src/prompt-config/defaults/index.js +21 -0
- package/dist/src/prompt-config/defaults/index.js.map +1 -0
- package/dist/src/prompt-config/defaults/provider-defaults.d.ts +5 -0
- package/dist/src/prompt-config/defaults/provider-defaults.js +26 -0
- package/dist/src/prompt-config/defaults/provider-defaults.js.map +1 -0
- package/dist/src/prompt-config/defaults/providers/gemini/models/gemini-2.5-flash/core.md +10 -0
- package/dist/src/prompt-config/defaults/service-defaults.d.ts +5 -0
- package/dist/src/prompt-config/defaults/service-defaults.js +52 -0
- package/dist/src/prompt-config/defaults/service-defaults.js.map +1 -0
- package/dist/src/prompt-config/defaults/tool-defaults.d.ts +5 -0
- package/dist/src/prompt-config/defaults/tool-defaults.js +81 -0
- package/dist/src/prompt-config/defaults/tool-defaults.js.map +1 -0
- package/dist/src/prompt-config/defaults/tools/edit.md +2 -0
- package/dist/src/prompt-config/defaults/tools/glob.md +2 -0
- package/dist/src/prompt-config/defaults/tools/grep.md +2 -0
- package/dist/src/prompt-config/defaults/tools/ls.md +1 -0
- package/dist/src/prompt-config/defaults/tools/memory.md +1 -0
- package/dist/src/prompt-config/defaults/tools/read-file.md +4 -0
- package/dist/src/prompt-config/defaults/tools/read-many-files.md +2 -0
- package/dist/src/prompt-config/defaults/tools/shell.md +5 -0
- package/dist/src/prompt-config/defaults/tools/todo-read.md +3 -0
- package/dist/src/prompt-config/defaults/tools/todo-write.md +50 -0
- package/dist/src/prompt-config/defaults/tools/web-fetch.md +3 -0
- package/dist/src/prompt-config/defaults/tools/web-search.md +3 -0
- package/dist/src/prompt-config/defaults/tools/write-file.md +4 -0
- package/dist/src/prompt-config/index.d.ts +16 -0
- package/dist/src/prompt-config/index.js +11 -0
- package/dist/src/prompt-config/index.js.map +1 -0
- package/dist/src/prompt-config/prompt-cache.d.ts +72 -0
- package/dist/src/prompt-config/prompt-cache.js +271 -0
- package/dist/src/prompt-config/prompt-cache.js.map +1 -0
- package/dist/src/prompt-config/prompt-cache.test.d.ts +6 -0
- package/dist/src/prompt-config/prompt-cache.test.js +437 -0
- package/dist/src/prompt-config/prompt-cache.test.js.map +1 -0
- package/dist/src/prompt-config/prompt-installer.d.ts +118 -0
- package/dist/src/prompt-config/prompt-installer.js +723 -0
- package/dist/src/prompt-config/prompt-installer.js.map +1 -0
- package/dist/src/prompt-config/prompt-installer.test.d.ts +7 -0
- package/dist/src/prompt-config/prompt-installer.test.js +503 -0
- package/dist/src/prompt-config/prompt-installer.test.js.map +1 -0
- package/dist/src/prompt-config/prompt-loader.d.ts +49 -0
- package/dist/src/prompt-config/prompt-loader.js +331 -0
- package/dist/src/prompt-config/prompt-loader.js.map +1 -0
- package/dist/src/prompt-config/prompt-loader.test.d.ts +5 -0
- package/dist/src/prompt-config/prompt-loader.test.js +413 -0
- package/dist/src/prompt-config/prompt-loader.test.js.map +1 -0
- package/dist/src/prompt-config/prompt-resolver.d.ts +74 -0
- package/dist/src/prompt-config/prompt-resolver.js +600 -0
- package/dist/src/prompt-config/prompt-resolver.js.map +1 -0
- package/dist/src/prompt-config/prompt-resolver.test.d.ts +1 -0
- package/dist/src/prompt-config/prompt-resolver.test.js +529 -0
- package/dist/src/prompt-config/prompt-resolver.test.js.map +1 -0
- package/dist/src/prompt-config/prompt-service.d.ts +108 -0
- package/dist/src/prompt-config/prompt-service.js +435 -0
- package/dist/src/prompt-config/prompt-service.js.map +1 -0
- package/dist/src/prompt-config/prompt-service.test.d.ts +1 -0
- package/dist/src/prompt-config/prompt-service.test.js +811 -0
- package/dist/src/prompt-config/prompt-service.test.js.map +1 -0
- package/dist/src/prompt-config/types.d.ts +30 -0
- package/dist/src/prompt-config/types.js +10 -0
- package/dist/src/prompt-config/types.js.map +1 -0
- package/dist/src/providers/IProvider.d.ts +10 -0
- package/dist/src/providers/anthropic/AnthropicProvider.d.ts +14 -1
- package/dist/src/providers/anthropic/AnthropicProvider.js +28 -2
- package/dist/src/providers/anthropic/AnthropicProvider.js.map +1 -1
- package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.d.ts +1 -0
- package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js +48 -0
- package/dist/src/providers/anthropic/AnthropicProvider.modelParams.test.js.map +1 -0
- package/dist/src/providers/anthropic/AnthropicProvider.test.js +2 -1
- package/dist/src/providers/anthropic/AnthropicProvider.test.js.map +1 -1
- package/dist/src/providers/gemini/GeminiProvider.d.ts +11 -2
- package/dist/src/providers/gemini/GeminiProvider.integration.test.js +1 -1
- package/dist/src/providers/gemini/GeminiProvider.js +34 -9
- package/dist/src/providers/gemini/GeminiProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.d.ts +11 -0
- package/dist/src/providers/openai/OpenAIProvider.js +100 -31
- package/dist/src/providers/openai/OpenAIProvider.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.responses.test.js +27 -3
- package/dist/src/providers/openai/OpenAIProvider.responses.test.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js +2 -1
- package/dist/src/providers/openai/OpenAIProvider.shouldUseResponses.test.js.map +1 -1
- package/dist/src/providers/openai/OpenAIProvider.test.js +307 -7
- package/dist/src/providers/openai/OpenAIProvider.test.js.map +1 -1
- package/dist/src/providers/openai/buildResponsesRequest.js +19 -2
- package/dist/src/providers/openai/buildResponsesRequest.js.map +1 -1
- package/dist/src/providers/test-utils/providerTestConfig.d.ts +21 -0
- package/dist/src/providers/test-utils/providerTestConfig.js +23 -0
- package/dist/src/providers/test-utils/providerTestConfig.js.map +1 -0
- package/dist/src/providers/types/IProviderConfig.d.ts +6 -0
- package/dist/src/services/loopDetectionService.d.ts +9 -0
- package/dist/src/services/loopDetectionService.js +44 -12
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.d.ts +1 -37
- package/dist/src/services/shellExecutionService.js +24 -55
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/{providers/IProviderConfig.js → services/shellExecutionService.multibyte.test.d.ts} +0 -1
- package/dist/src/services/shellExecutionService.multibyte.test.js +72 -0
- package/dist/src/services/shellExecutionService.multibyte.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.test.js +11 -5
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/services/shellExecutionService.windows.multibyte.test.d.ts +6 -0
- package/dist/src/services/shellExecutionService.windows.multibyte.test.js +98 -0
- package/dist/src/services/shellExecutionService.windows.multibyte.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.windows.test.d.ts +6 -0
- package/dist/src/services/shellExecutionService.windows.test.js +79 -0
- package/dist/src/services/shellExecutionService.windows.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +3 -2
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +22 -3
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +4 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +12 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- package/dist/src/telemetry/constants.d.ts +1 -1
- package/dist/src/telemetry/constants.js +1 -1
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/file-exporters.d.ts +2 -2
- package/dist/src/telemetry/file-exporters.js +47 -20
- package/dist/src/telemetry/file-exporters.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +2 -2
- package/dist/src/telemetry/loggers.js +13 -6
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +2 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +8 -3
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/sdk.d.ts +1 -1
- package/dist/src/telemetry/sdk.js +71 -73
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/telemetry.test.js +7 -5
- package/dist/src/telemetry/telemetry.test.js.map +1 -1
- package/dist/src/telemetry/types.d.ts +12 -4
- package/dist/src/telemetry/types.js +18 -4
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +3 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/mockWorkspaceContext.d.ts +13 -0
- package/dist/src/test-utils/mockWorkspaceContext.js +24 -0
- package/dist/src/test-utils/mockWorkspaceContext.js.map +1 -0
- package/dist/src/tools/edit.js +27 -3
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +104 -1
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.js +53 -17
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +25 -2
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +1 -1
- package/dist/src/tools/grep.js +81 -29
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +72 -5
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.js +4 -3
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.d.ts +6 -0
- package/dist/src/tools/ls.test.js +356 -0
- package/dist/src/tools/ls.test.js.map +1 -0
- package/dist/src/tools/mcp-client.js +8 -3
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +34 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +17 -2
- package/dist/src/tools/memoryTool.js +130 -13
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +88 -3
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/read-file.js +8 -6
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +30 -2
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.js +22 -12
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +35 -2
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/shell.js +16 -0
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.multibyte.test.d.ts +6 -0
- package/dist/src/tools/shell.multibyte.test.js +74 -0
- package/dist/src/tools/shell.multibyte.test.js.map +1 -0
- package/dist/src/tools/shell.test.js +33 -1
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/tool-error.d.ts +22 -0
- package/dist/src/tools/tool-error.js +27 -0
- package/dist/src/tools/tool-error.js.map +1 -0
- package/dist/src/tools/tool-registry.test.js +8 -0
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +8 -0
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/write-file.js +5 -3
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +36 -2
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/types/modelParams.d.ts +62 -0
- package/dist/src/types/modelParams.js +7 -0
- package/dist/src/types/modelParams.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.test.js +4 -2
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/editCorrector.js +2 -2
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editor.d.ts +1 -1
- package/dist/src/utils/editor.js +9 -0
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +21 -1
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/fileUtils.js +12 -1
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +29 -1
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/flashFallback.integration.test.js +8 -0
- package/dist/src/utils/flashFallback.integration.test.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.d.ts +1 -1
- package/dist/src/utils/memoryDiscovery.js +61 -73
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +4 -3
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.d.ts +19 -12
- package/dist/src/utils/memoryImportProcessor.js +241 -82
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.test.js +595 -50
- package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.js +10 -25
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +6 -2
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/sanitization.d.ts +20 -0
- package/dist/src/utils/sanitization.js +66 -0
- package/dist/src/utils/sanitization.js.map +1 -0
- package/dist/src/utils/sanitization.test.d.ts +6 -0
- package/dist/src/utils/sanitization.test.js +81 -0
- package/dist/src/utils/sanitization.test.js.map +1 -0
- package/dist/src/utils/secure-browser-launcher.d.ts +23 -0
- package/dist/src/utils/secure-browser-launcher.js +164 -0
- package/dist/src/utils/secure-browser-launcher.js.map +1 -0
- package/dist/src/utils/secure-browser-launcher.test.d.ts +6 -0
- package/dist/src/utils/secure-browser-launcher.test.js +149 -0
- package/dist/src/utils/secure-browser-launcher.test.js.map +1 -0
- package/dist/src/utils/summarizer.js +2 -2
- package/dist/src/utils/summarizer.js.map +1 -1
- package/dist/src/utils/unicodeUtils.d.ts +44 -0
- package/dist/src/utils/unicodeUtils.js +93 -0
- package/dist/src/utils/unicodeUtils.js.map +1 -0
- package/dist/src/utils/unicodeUtils.test.d.ts +6 -0
- package/dist/src/utils/unicodeUtils.test.js +120 -0
- package/dist/src/utils/unicodeUtils.test.js.map +1 -0
- package/dist/src/utils/workspaceContext.d.ts +47 -0
- package/dist/src/utils/workspaceContext.js +106 -0
- package/dist/src/utils/workspaceContext.js.map +1 -0
- package/dist/src/utils/workspaceContext.test.d.ts +6 -0
- package/dist/src/utils/workspaceContext.test.js +209 -0
- package/dist/src/utils/workspaceContext.test.js.map +1 -0
- package/package.json +2 -1
- package/dist/src/providers/IProviderConfig.d.ts +0 -31
- package/dist/src/providers/IProviderConfig.js.map +0 -1
|
@@ -0,0 +1,413 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Behavioral tests for PromptLoader
|
|
3
|
+
* These tests verify actual file I/O, compression, and environment detection behavior
|
|
4
|
+
*/
|
|
5
|
+
import { describe, it, expect, beforeEach, afterEach } from 'vitest';
|
|
6
|
+
import * as fs from 'fs/promises';
|
|
7
|
+
import * as path from 'path';
|
|
8
|
+
import * as os from 'os';
|
|
9
|
+
import { PromptLoader } from './prompt-loader.js';
|
|
10
|
+
// Helper to check if we're on Windows
|
|
11
|
+
const isWindows = () => os.platform() === 'win32';
|
|
12
|
+
describe('PromptLoader', () => {
|
|
13
|
+
let tempDir;
|
|
14
|
+
let loader;
|
|
15
|
+
beforeEach(async () => {
|
|
16
|
+
// Create a temporary directory for test files
|
|
17
|
+
tempDir = await fs.mkdtemp(path.join(os.tmpdir(), 'prompt-loader-test-'));
|
|
18
|
+
loader = new PromptLoader(tempDir);
|
|
19
|
+
});
|
|
20
|
+
afterEach(async () => {
|
|
21
|
+
// Clean up temporary directory
|
|
22
|
+
await fs.rm(tempDir, { recursive: true, force: true });
|
|
23
|
+
});
|
|
24
|
+
describe('loadFile', () => {
|
|
25
|
+
it('should successfully load a UTF-8 text file', async () => {
|
|
26
|
+
const filePath = path.join(tempDir, 'test.md');
|
|
27
|
+
const content = '# Test File\n\nThis is a test file.';
|
|
28
|
+
await fs.writeFile(filePath, content, 'utf8');
|
|
29
|
+
const result = await loader.loadFile(filePath, false);
|
|
30
|
+
expect(result.success).toBe(true);
|
|
31
|
+
expect(result.content).toBe(content);
|
|
32
|
+
expect(result.error).toBeNull();
|
|
33
|
+
});
|
|
34
|
+
it('should return error for non-existent file', async () => {
|
|
35
|
+
const filePath = path.join(tempDir, 'non-existent.md');
|
|
36
|
+
const result = await loader.loadFile(filePath, false);
|
|
37
|
+
expect(result.success).toBe(false);
|
|
38
|
+
expect(result.content).toBe('');
|
|
39
|
+
expect(result.error).toBe('File not found');
|
|
40
|
+
});
|
|
41
|
+
it('should reject files with path traversal attempts', async () => {
|
|
42
|
+
const maliciousPath = path.join(tempDir, '../../../etc/passwd');
|
|
43
|
+
const result = await loader.loadFile(maliciousPath, false);
|
|
44
|
+
expect(result.success).toBe(false);
|
|
45
|
+
expect(result.content).toBe('');
|
|
46
|
+
expect(result.error).toBe('Path traversal detected');
|
|
47
|
+
});
|
|
48
|
+
it('should reject files larger than 10MB', async () => {
|
|
49
|
+
const filePath = path.join(tempDir, 'large.md');
|
|
50
|
+
// Create a file larger than 10MB
|
|
51
|
+
const largeContent = 'x'.repeat(10 * 1024 * 1024 + 1);
|
|
52
|
+
await fs.writeFile(filePath, largeContent, 'utf8');
|
|
53
|
+
const result = await loader.loadFile(filePath, false);
|
|
54
|
+
expect(result.success).toBe(false);
|
|
55
|
+
expect(result.content).toBe('');
|
|
56
|
+
expect(result.error).toBe('File too large');
|
|
57
|
+
});
|
|
58
|
+
it('should handle empty files', async () => {
|
|
59
|
+
const filePath = path.join(tempDir, 'empty.md');
|
|
60
|
+
await fs.writeFile(filePath, '', 'utf8');
|
|
61
|
+
const result = await loader.loadFile(filePath, false);
|
|
62
|
+
expect(result.success).toBe(true);
|
|
63
|
+
expect(result.content).toBe('');
|
|
64
|
+
expect(result.error).toBeNull();
|
|
65
|
+
});
|
|
66
|
+
it('should reject directories', async () => {
|
|
67
|
+
const dirPath = path.join(tempDir, 'subdir');
|
|
68
|
+
await fs.mkdir(dirPath);
|
|
69
|
+
const result = await loader.loadFile(dirPath, false);
|
|
70
|
+
expect(result.success).toBe(false);
|
|
71
|
+
expect(result.content).toBe('');
|
|
72
|
+
expect(result.error).toBe('Not a regular file');
|
|
73
|
+
});
|
|
74
|
+
it('should reject symbolic links', async () => {
|
|
75
|
+
const targetPath = path.join(tempDir, 'target.md');
|
|
76
|
+
const linkPath = path.join(tempDir, 'link.md');
|
|
77
|
+
await fs.writeFile(targetPath, 'content', 'utf8');
|
|
78
|
+
await fs.symlink(targetPath, linkPath);
|
|
79
|
+
const result = await loader.loadFile(linkPath, false);
|
|
80
|
+
expect(result.success).toBe(false);
|
|
81
|
+
expect(result.content).toBe('');
|
|
82
|
+
expect(result.error).toBe('Not a regular file');
|
|
83
|
+
});
|
|
84
|
+
it('should handle files with invalid UTF-8', async () => {
|
|
85
|
+
const filePath = path.join(tempDir, 'invalid.md');
|
|
86
|
+
// Write invalid UTF-8 sequence
|
|
87
|
+
await fs.writeFile(filePath, Buffer.from([0xff, 0xfe, 0xfd]));
|
|
88
|
+
const result = await loader.loadFile(filePath, false);
|
|
89
|
+
expect(result.success).toBe(false);
|
|
90
|
+
expect(result.content).toBe('');
|
|
91
|
+
expect(result.error).toBe('Invalid UTF-8 encoding');
|
|
92
|
+
});
|
|
93
|
+
it('should handle permission errors gracefully', async () => {
|
|
94
|
+
const filePath = path.join(tempDir, 'no-read.md');
|
|
95
|
+
await fs.writeFile(filePath, 'content', 'utf8');
|
|
96
|
+
// Skip permission tests on Windows as chmod has no effect
|
|
97
|
+
if (isWindows()) {
|
|
98
|
+
// On Windows, test with a file that's locked by another process
|
|
99
|
+
// Since we can't easily simulate this, just test the file exists and can be read
|
|
100
|
+
const result = await loader.loadFile(filePath, false);
|
|
101
|
+
expect(result.success).toBe(true);
|
|
102
|
+
expect(result.content).toBe('content');
|
|
103
|
+
}
|
|
104
|
+
else {
|
|
105
|
+
await fs.chmod(filePath, 0o000); // Remove all permissions
|
|
106
|
+
const result = await loader.loadFile(filePath, false);
|
|
107
|
+
expect(result.success).toBe(false);
|
|
108
|
+
expect(result.content).toBe('');
|
|
109
|
+
expect(result.error).toContain('Failed to read file');
|
|
110
|
+
// Restore permissions for cleanup
|
|
111
|
+
await fs.chmod(filePath, 0o644);
|
|
112
|
+
}
|
|
113
|
+
});
|
|
114
|
+
it('should return error for null or undefined file path', async () => {
|
|
115
|
+
const resultNull = await loader.loadFile(null, false);
|
|
116
|
+
expect(resultNull.success).toBe(false);
|
|
117
|
+
expect(resultNull.error).toBe('Invalid file path');
|
|
118
|
+
const resultUndefined = await loader.loadFile(undefined, false);
|
|
119
|
+
expect(resultUndefined.success).toBe(false);
|
|
120
|
+
expect(resultUndefined.error).toBe('Invalid file path');
|
|
121
|
+
});
|
|
122
|
+
it('should apply compression when requested', async () => {
|
|
123
|
+
const filePath = path.join(tempDir, 'compress.md');
|
|
124
|
+
const content = '## Header\n\n\n\nMultiple blank lines';
|
|
125
|
+
await fs.writeFile(filePath, content, 'utf8');
|
|
126
|
+
const result = await loader.loadFile(filePath, true);
|
|
127
|
+
expect(result.success).toBe(true);
|
|
128
|
+
expect(result.content).not.toBe(content); // Content should be different after compression
|
|
129
|
+
expect(result.error).toBeNull();
|
|
130
|
+
});
|
|
131
|
+
});
|
|
132
|
+
describe('compressContent', () => {
|
|
133
|
+
it('should preserve code blocks unchanged', () => {
|
|
134
|
+
const content = '# Title\n\n```typescript\nconst x = 1;\n const y = 2;\n```\n\nText after';
|
|
135
|
+
const compressed = loader.compressContent(content);
|
|
136
|
+
expect(compressed).toContain('```typescript\nconst x = 1;\n const y = 2;\n```');
|
|
137
|
+
});
|
|
138
|
+
it('should handle nested code block markers', () => {
|
|
139
|
+
const content = '```markdown\nExample:\n```\ncode here\n```\n```';
|
|
140
|
+
const compressed = loader.compressContent(content);
|
|
141
|
+
expect(compressed).toBe(content); // Should remain unchanged
|
|
142
|
+
});
|
|
143
|
+
it('should handle unclosed code blocks', () => {
|
|
144
|
+
const content = 'Text before\n```python\ndef func():\n pass\n# No closing backticks';
|
|
145
|
+
const compressed = loader.compressContent(content);
|
|
146
|
+
expect(compressed).toContain('```python\ndef func():\n pass\n# No closing backticks');
|
|
147
|
+
});
|
|
148
|
+
it('should compress multiple blank lines to single blank line', () => {
|
|
149
|
+
const content = 'Line 1\n\n\n\nLine 2\n\n\nLine 3';
|
|
150
|
+
const compressed = loader.compressContent(content);
|
|
151
|
+
expect(compressed).toBe('Line 1\n\nLine 2\n\nLine 3');
|
|
152
|
+
});
|
|
153
|
+
it('should simplify headers beyond level 1', () => {
|
|
154
|
+
const content = '## Level 2\n### Level 3\n#### Level 4';
|
|
155
|
+
const compressed = loader.compressContent(content);
|
|
156
|
+
expect(compressed).toBe('# Level 2\n# Level 3\n# Level 4');
|
|
157
|
+
});
|
|
158
|
+
it('should simplify bold list items', () => {
|
|
159
|
+
const content = '- **Item 1**: Description\n - **Nested**: Value';
|
|
160
|
+
const compressed = loader.compressContent(content);
|
|
161
|
+
expect(compressed).toBe('- Item 1: Description\n - Nested: Value');
|
|
162
|
+
});
|
|
163
|
+
it('should handle empty content', () => {
|
|
164
|
+
expect(loader.compressContent('')).toBe('');
|
|
165
|
+
expect(loader.compressContent(null)).toBe('');
|
|
166
|
+
});
|
|
167
|
+
it('should remove excessive whitespace', () => {
|
|
168
|
+
const content = ' Text with multiple spaces ';
|
|
169
|
+
const compressed = loader.compressContent(content);
|
|
170
|
+
expect(compressed).toBe('Text with multiple spaces');
|
|
171
|
+
});
|
|
172
|
+
it('should handle mixed line endings', () => {
|
|
173
|
+
const content = 'Line 1\r\nLine 2\nLine 3\r\n';
|
|
174
|
+
const compressed = loader.compressContent(content);
|
|
175
|
+
expect(compressed).toBe('Line 1\nLine 2\nLine 3');
|
|
176
|
+
});
|
|
177
|
+
it('should preserve code blocks with language identifiers', () => {
|
|
178
|
+
const content = '```javascript\nfunction test() {}\n```\n\n```python\ndef test():\n pass\n```';
|
|
179
|
+
const compressed = loader.compressContent(content);
|
|
180
|
+
expect(compressed).toContain('```javascript\nfunction test() {}\n```');
|
|
181
|
+
expect(compressed).toContain('```python\ndef test():\n pass\n```');
|
|
182
|
+
});
|
|
183
|
+
});
|
|
184
|
+
describe('loadAllFiles', () => {
|
|
185
|
+
it('should load multiple files and return a map', async () => {
|
|
186
|
+
const file1 = 'dir1/file1.md';
|
|
187
|
+
const file2 = 'dir2/file2.md';
|
|
188
|
+
const content1 = 'Content 1';
|
|
189
|
+
const content2 = 'Content 2';
|
|
190
|
+
await fs.mkdir(path.join(tempDir, 'dir1'), { recursive: true });
|
|
191
|
+
await fs.mkdir(path.join(tempDir, 'dir2'), { recursive: true });
|
|
192
|
+
await fs.writeFile(path.join(tempDir, file1), content1, 'utf8');
|
|
193
|
+
await fs.writeFile(path.join(tempDir, file2), content2, 'utf8');
|
|
194
|
+
const result = await loader.loadAllFiles(tempDir, [file1, file2], false);
|
|
195
|
+
expect(result.size).toBe(2);
|
|
196
|
+
expect(result.get(file1)).toBe(content1);
|
|
197
|
+
expect(result.get(file2)).toBe(content2);
|
|
198
|
+
});
|
|
199
|
+
it('should continue loading even if some files fail', async () => {
|
|
200
|
+
const file1 = 'exists.md';
|
|
201
|
+
const file2 = 'missing.md';
|
|
202
|
+
const content1 = 'Content exists';
|
|
203
|
+
await fs.writeFile(path.join(tempDir, file1), content1, 'utf8');
|
|
204
|
+
const result = await loader.loadAllFiles(tempDir, [file1, file2], false);
|
|
205
|
+
expect(result.size).toBe(1);
|
|
206
|
+
expect(result.get(file1)).toBe(content1);
|
|
207
|
+
expect(result.has(file2)).toBe(false);
|
|
208
|
+
});
|
|
209
|
+
it('should return empty map for null or empty inputs', async () => {
|
|
210
|
+
const resultNull = await loader.loadAllFiles(null, ['file.md'], false);
|
|
211
|
+
expect(resultNull.size).toBe(0);
|
|
212
|
+
const resultEmpty = await loader.loadAllFiles(tempDir, [], false);
|
|
213
|
+
expect(resultEmpty.size).toBe(0);
|
|
214
|
+
const resultNullFiles = await loader.loadAllFiles(tempDir, null, false);
|
|
215
|
+
expect(resultNullFiles.size).toBe(0);
|
|
216
|
+
});
|
|
217
|
+
it('should apply compression when requested', async () => {
|
|
218
|
+
const file = 'compress.md';
|
|
219
|
+
const content = '## Header\n\n\n\nExtra spaces';
|
|
220
|
+
await fs.writeFile(path.join(tempDir, file), content, 'utf8');
|
|
221
|
+
const result = await loader.loadAllFiles(tempDir, [file], true);
|
|
222
|
+
expect(result.size).toBe(1);
|
|
223
|
+
const compressed = result.get(file);
|
|
224
|
+
expect(compressed).not.toBe(content);
|
|
225
|
+
expect(compressed).toBe('# Header\n\nExtra spaces');
|
|
226
|
+
});
|
|
227
|
+
});
|
|
228
|
+
describe('detectEnvironment', () => {
|
|
229
|
+
it('should detect git repository', async () => {
|
|
230
|
+
// Create a mock .git directory
|
|
231
|
+
const gitDir = path.join(tempDir, '.git');
|
|
232
|
+
await fs.mkdir(gitDir);
|
|
233
|
+
const env = loader.detectEnvironment(tempDir);
|
|
234
|
+
expect(env.isGitRepository).toBe(true);
|
|
235
|
+
});
|
|
236
|
+
it('should detect when not in git repository', () => {
|
|
237
|
+
const env = loader.detectEnvironment(tempDir);
|
|
238
|
+
expect(env.isGitRepository).toBe(false);
|
|
239
|
+
});
|
|
240
|
+
it('should detect git repository in parent directory', async () => {
|
|
241
|
+
const parentGit = path.join(tempDir, '.git');
|
|
242
|
+
const subDir = path.join(tempDir, 'subdir', 'nested');
|
|
243
|
+
await fs.mkdir(parentGit);
|
|
244
|
+
await fs.mkdir(subDir, { recursive: true });
|
|
245
|
+
const env = loader.detectEnvironment(subDir);
|
|
246
|
+
expect(env.isGitRepository).toBe(true);
|
|
247
|
+
});
|
|
248
|
+
it('should detect sandbox environment from environment variables', () => {
|
|
249
|
+
const originalSandbox = process.env.SANDBOX;
|
|
250
|
+
process.env.SANDBOX = '1';
|
|
251
|
+
const env = loader.detectEnvironment(tempDir);
|
|
252
|
+
expect(env.isSandboxed).toBe(true);
|
|
253
|
+
// Restore original value
|
|
254
|
+
if (originalSandbox === undefined) {
|
|
255
|
+
delete process.env.SANDBOX;
|
|
256
|
+
}
|
|
257
|
+
else {
|
|
258
|
+
process.env.SANDBOX = originalSandbox;
|
|
259
|
+
}
|
|
260
|
+
});
|
|
261
|
+
it('should detect container environment', () => {
|
|
262
|
+
const originalContainer = process.env.CONTAINER;
|
|
263
|
+
process.env.CONTAINER = 'true';
|
|
264
|
+
const env = loader.detectEnvironment(tempDir);
|
|
265
|
+
expect(env.isSandboxed).toBe(true);
|
|
266
|
+
// Restore original value
|
|
267
|
+
if (originalContainer === undefined) {
|
|
268
|
+
delete process.env.CONTAINER;
|
|
269
|
+
}
|
|
270
|
+
else {
|
|
271
|
+
process.env.CONTAINER = originalContainer;
|
|
272
|
+
}
|
|
273
|
+
});
|
|
274
|
+
it('should detect IDE companion from environment', () => {
|
|
275
|
+
const originalIDE = process.env.IDE_COMPANION;
|
|
276
|
+
process.env.IDE_COMPANION = '1';
|
|
277
|
+
const env = loader.detectEnvironment(tempDir);
|
|
278
|
+
expect(env.hasIdeCompanion).toBe(true);
|
|
279
|
+
// Restore original value
|
|
280
|
+
if (originalIDE === undefined) {
|
|
281
|
+
delete process.env.IDE_COMPANION;
|
|
282
|
+
}
|
|
283
|
+
else {
|
|
284
|
+
process.env.IDE_COMPANION = originalIDE;
|
|
285
|
+
}
|
|
286
|
+
});
|
|
287
|
+
it('should detect IDE companion from .vscode directory', async () => {
|
|
288
|
+
const vscodeDir = path.join(tempDir, '.vscode');
|
|
289
|
+
await fs.mkdir(vscodeDir);
|
|
290
|
+
const env = loader.detectEnvironment(tempDir);
|
|
291
|
+
expect(env.hasIdeCompanion).toBe(true);
|
|
292
|
+
});
|
|
293
|
+
it('should detect IDE companion from .idea directory', async () => {
|
|
294
|
+
const ideaDir = path.join(tempDir, '.idea');
|
|
295
|
+
await fs.mkdir(ideaDir);
|
|
296
|
+
const env = loader.detectEnvironment(tempDir);
|
|
297
|
+
expect(env.hasIdeCompanion).toBe(true);
|
|
298
|
+
});
|
|
299
|
+
it('should handle permission errors gracefully', () => {
|
|
300
|
+
// Even with an invalid path, should not throw
|
|
301
|
+
const invalidPath = isWindows()
|
|
302
|
+
? 'C:\\System Volume Information'
|
|
303
|
+
: '/root/no-access';
|
|
304
|
+
const env = loader.detectEnvironment(invalidPath);
|
|
305
|
+
expect(env.isGitRepository).toBe(false);
|
|
306
|
+
expect(env.isSandboxed).toBe(false);
|
|
307
|
+
expect(env.hasIdeCompanion).toBe(false);
|
|
308
|
+
});
|
|
309
|
+
});
|
|
310
|
+
describe('watchFiles', () => {
|
|
311
|
+
it('should return null for non-existent directory', () => {
|
|
312
|
+
const watcher = loader.watchFiles('/non/existent/path', () => { });
|
|
313
|
+
expect(watcher).toBeNull();
|
|
314
|
+
});
|
|
315
|
+
it('should return null for invalid callback', () => {
|
|
316
|
+
const watcher = loader.watchFiles(tempDir, null);
|
|
317
|
+
expect(watcher).toBeNull();
|
|
318
|
+
});
|
|
319
|
+
it('should create watcher for valid directory', () => {
|
|
320
|
+
const callback = (_eventType, _path) => { };
|
|
321
|
+
const watcher = loader.watchFiles(tempDir, callback);
|
|
322
|
+
expect(watcher).not.toBeNull();
|
|
323
|
+
expect(watcher).toHaveProperty('stop');
|
|
324
|
+
expect(typeof watcher?.stop).toBe('function');
|
|
325
|
+
// Clean up
|
|
326
|
+
watcher?.stop();
|
|
327
|
+
});
|
|
328
|
+
it('should notify on file changes', async () => {
|
|
329
|
+
const events = [];
|
|
330
|
+
const callback = (eventType, relativePath) => {
|
|
331
|
+
events.push({ type: eventType, path: relativePath });
|
|
332
|
+
};
|
|
333
|
+
const watcher = loader.watchFiles(tempDir, callback);
|
|
334
|
+
expect(watcher).not.toBeNull();
|
|
335
|
+
// Create a markdown file
|
|
336
|
+
const testFile = 'test.md';
|
|
337
|
+
await fs.writeFile(path.join(tempDir, testFile), 'initial content', 'utf8');
|
|
338
|
+
// Wait for debounce
|
|
339
|
+
await new Promise((resolve) => setTimeout(resolve, 150));
|
|
340
|
+
// Modify the file
|
|
341
|
+
await fs.writeFile(path.join(tempDir, testFile), 'modified content', 'utf8');
|
|
342
|
+
// Wait for event processing
|
|
343
|
+
await new Promise((resolve) => setTimeout(resolve, 150));
|
|
344
|
+
// Should have received at least one event
|
|
345
|
+
expect(events.length).toBeGreaterThan(0);
|
|
346
|
+
expect(events.some((e) => e.path === testFile)).toBe(true);
|
|
347
|
+
// Clean up
|
|
348
|
+
watcher?.stop();
|
|
349
|
+
});
|
|
350
|
+
it('should filter non-markdown files', async () => {
|
|
351
|
+
const events = [];
|
|
352
|
+
const callback = (eventType, relativePath) => {
|
|
353
|
+
events.push({ type: eventType, path: relativePath });
|
|
354
|
+
};
|
|
355
|
+
const watcher = loader.watchFiles(tempDir, callback);
|
|
356
|
+
expect(watcher).not.toBeNull();
|
|
357
|
+
// Create a non-markdown file
|
|
358
|
+
await fs.writeFile(path.join(tempDir, 'test.txt'), 'content', 'utf8');
|
|
359
|
+
// Wait for potential event
|
|
360
|
+
await new Promise((resolve) => setTimeout(resolve, 150));
|
|
361
|
+
// Should not receive events for non-markdown files
|
|
362
|
+
expect(events.length).toBe(0);
|
|
363
|
+
// Clean up
|
|
364
|
+
watcher?.stop();
|
|
365
|
+
});
|
|
366
|
+
it('should stop watching when stop is called', async () => {
|
|
367
|
+
const events = [];
|
|
368
|
+
const callback = (_eventType, relativePath) => {
|
|
369
|
+
events.push(relativePath);
|
|
370
|
+
};
|
|
371
|
+
const watcher = loader.watchFiles(tempDir, callback);
|
|
372
|
+
expect(watcher).not.toBeNull();
|
|
373
|
+
// Stop watching
|
|
374
|
+
watcher?.stop();
|
|
375
|
+
// Create a file after stopping
|
|
376
|
+
await fs.writeFile(path.join(tempDir, 'after-stop.md'), 'content', 'utf8');
|
|
377
|
+
// Wait to ensure no events are received
|
|
378
|
+
await new Promise((resolve) => setTimeout(resolve, 150));
|
|
379
|
+
expect(events.length).toBe(0);
|
|
380
|
+
});
|
|
381
|
+
});
|
|
382
|
+
describe('edge cases', () => {
|
|
383
|
+
it('should handle file approaching 10MB limit with warning', async () => {
|
|
384
|
+
const filePath = path.join(tempDir, 'large-but-ok.md');
|
|
385
|
+
// Create a 9.9MB file
|
|
386
|
+
const content = 'x'.repeat(9.9 * 1024 * 1024);
|
|
387
|
+
await fs.writeFile(filePath, content, 'utf8');
|
|
388
|
+
const result = await loader.loadFile(filePath, false);
|
|
389
|
+
expect(result.success).toBe(true);
|
|
390
|
+
expect(result.content.length).toBe(content.length);
|
|
391
|
+
expect(result.error).toBeNull();
|
|
392
|
+
});
|
|
393
|
+
it('should handle file deleted between stat and read', async () => {
|
|
394
|
+
// This is a race condition test - we'll simulate by testing with a non-existent file
|
|
395
|
+
const filePath = path.join(tempDir, 'race-condition.md');
|
|
396
|
+
const result = await loader.loadFile(filePath, false);
|
|
397
|
+
expect(result.success).toBe(false);
|
|
398
|
+
expect(result.error).toContain('File not found');
|
|
399
|
+
});
|
|
400
|
+
it('should normalize mixed line endings in compression', () => {
|
|
401
|
+
const content = 'Line 1\r\n\r\n\r\nLine 2\n\n\nLine 3';
|
|
402
|
+
const compressed = loader.compressContent(content);
|
|
403
|
+
expect(compressed).toBe('Line 1\n\nLine 2\n\nLine 3');
|
|
404
|
+
});
|
|
405
|
+
it('should handle very long lines without truncation', () => {
|
|
406
|
+
const longLine = 'x'.repeat(5000);
|
|
407
|
+
const content = `Short line\n${longLine}\nAnother short line`;
|
|
408
|
+
const compressed = loader.compressContent(content);
|
|
409
|
+
expect(compressed).toContain(longLine);
|
|
410
|
+
});
|
|
411
|
+
});
|
|
412
|
+
});
|
|
413
|
+
//# sourceMappingURL=prompt-loader.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"prompt-loader.test.js","sourceRoot":"","sources":["../../../src/prompt-config/prompt-loader.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* PromptResolver handles hierarchical file resolution for prompt templates
|
|
3
|
+
* This is a stub implementation following TDD principles
|
|
4
|
+
*/
|
|
5
|
+
import { PromptContext } from './types.js';
|
|
6
|
+
/**
|
|
7
|
+
* Result of resolving a single file
|
|
8
|
+
*/
|
|
9
|
+
export interface ResolveFileResult {
|
|
10
|
+
found: boolean;
|
|
11
|
+
path: string | null;
|
|
12
|
+
source: 'model' | 'provider' | 'base' | null;
|
|
13
|
+
}
|
|
14
|
+
/**
|
|
15
|
+
* Resolved file information with metadata
|
|
16
|
+
*/
|
|
17
|
+
export interface ResolvedFile {
|
|
18
|
+
type: 'core' | 'env' | 'tool';
|
|
19
|
+
path: string;
|
|
20
|
+
source: 'model' | 'provider' | 'base';
|
|
21
|
+
toolName?: string;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Available file information
|
|
25
|
+
*/
|
|
26
|
+
export interface AvailableFile {
|
|
27
|
+
path: string;
|
|
28
|
+
type: 'core' | 'env' | 'tool';
|
|
29
|
+
source: 'model' | 'provider' | 'base';
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* File structure validation result
|
|
33
|
+
*/
|
|
34
|
+
export interface ValidationResult {
|
|
35
|
+
isValid: boolean;
|
|
36
|
+
errors: string[];
|
|
37
|
+
warnings: string[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* PromptResolver handles hierarchical file resolution
|
|
41
|
+
*/
|
|
42
|
+
export declare class PromptResolver {
|
|
43
|
+
/**
|
|
44
|
+
* Find the most specific version of a file
|
|
45
|
+
*/
|
|
46
|
+
resolveFile(baseDir: string, relativePath: string, context: Partial<PromptContext>): ResolveFileResult;
|
|
47
|
+
/**
|
|
48
|
+
* Resolve all files for a given context
|
|
49
|
+
*/
|
|
50
|
+
resolveAllFiles(baseDir: string, context: PromptContext): ResolvedFile[];
|
|
51
|
+
/**
|
|
52
|
+
* Make names filesystem-safe
|
|
53
|
+
*/
|
|
54
|
+
sanitizePathComponent(component: string): string;
|
|
55
|
+
/**
|
|
56
|
+
* Convert tool names to kebab-case
|
|
57
|
+
*/
|
|
58
|
+
convertToKebabCase(toolName: string): string;
|
|
59
|
+
/**
|
|
60
|
+
* List all available prompt files
|
|
61
|
+
*/
|
|
62
|
+
listAvailableFiles(baseDir: string, fileType: 'core' | 'env' | 'tool' | 'all'): AvailableFile[];
|
|
63
|
+
/**
|
|
64
|
+
* Validate the file structure
|
|
65
|
+
*/
|
|
66
|
+
validateFileStructure(baseDir: string): ValidationResult;
|
|
67
|
+
private fileExists;
|
|
68
|
+
private isDirectory;
|
|
69
|
+
private isRegularFile;
|
|
70
|
+
private readDirectory;
|
|
71
|
+
private scanProviderDirectory;
|
|
72
|
+
private scanModelDirectory;
|
|
73
|
+
private walkDirectory;
|
|
74
|
+
}
|