@blackbox_ai/blackbox-cli-core 0.0.4
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/LICENSE +203 -0
- package/README.md +420 -0
- package/dist/.last_build +0 -0
- package/dist/index.d.ts +13 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/src/__mocks__/fs/promises.d.ts +11 -0
- package/dist/src/__mocks__/fs/promises.js +17 -0
- package/dist/src/__mocks__/fs/promises.js.map +1 -0
- package/dist/src/blackbox/blackboxContentGenerator.d.ts +70 -0
- package/dist/src/blackbox/blackboxContentGenerator.js +180 -0
- package/dist/src/blackbox/blackboxContentGenerator.js.map +1 -0
- package/dist/src/blackbox/blackboxContentGenerator.test.d.ts +6 -0
- package/dist/src/blackbox/blackboxContentGenerator.test.js +1178 -0
- package/dist/src/blackbox/blackboxContentGenerator.test.js.map +1 -0
- package/dist/src/blackbox/blackboxOAuth2.d.ts +191 -0
- package/dist/src/blackbox/blackboxOAuth2.js +566 -0
- package/dist/src/blackbox/blackboxOAuth2.js.map +1 -0
- package/dist/src/blackbox/blackboxOAuth2.test.d.ts +6 -0
- package/dist/src/blackbox/blackboxOAuth2.test.js +1718 -0
- package/dist/src/blackbox/blackboxOAuth2.test.js.map +1 -0
- package/dist/src/blackbox/sharedTokenManager.d.ts +196 -0
- package/dist/src/blackbox/sharedTokenManager.js +647 -0
- package/dist/src/blackbox/sharedTokenManager.js.map +1 -0
- package/dist/src/blackbox/sharedTokenManager.test.d.ts +7 -0
- package/dist/src/blackbox/sharedTokenManager.test.js +662 -0
- package/dist/src/blackbox/sharedTokenManager.test.js.map +1 -0
- package/dist/src/code_assist/codeAssist.d.ts +10 -0
- package/dist/src/code_assist/codeAssist.js +19 -0
- package/dist/src/code_assist/codeAssist.js.map +1 -0
- package/dist/src/code_assist/converter.d.ts +72 -0
- package/dist/src/code_assist/converter.js +159 -0
- package/dist/src/code_assist/converter.js.map +1 -0
- package/dist/src/code_assist/converter.test.d.ts +6 -0
- package/dist/src/code_assist/converter.test.js +362 -0
- package/dist/src/code_assist/converter.test.js.map +1 -0
- package/dist/src/code_assist/oauth2.d.ts +22 -0
- package/dist/src/code_assist/oauth2.js +368 -0
- package/dist/src/code_assist/oauth2.js.map +1 -0
- package/dist/src/code_assist/oauth2.test.d.ts +6 -0
- package/dist/src/code_assist/oauth2.test.js +436 -0
- package/dist/src/code_assist/oauth2.test.js.map +1 -0
- package/dist/src/code_assist/server.d.ts +37 -0
- package/dist/src/code_assist/server.js +125 -0
- package/dist/src/code_assist/server.js.map +1 -0
- package/dist/src/code_assist/server.test.d.ts +6 -0
- package/dist/src/code_assist/server.test.js +134 -0
- package/dist/src/code_assist/server.test.js.map +1 -0
- package/dist/src/code_assist/setup.d.ts +20 -0
- package/dist/src/code_assist/setup.js +101 -0
- package/dist/src/code_assist/setup.js.map +1 -0
- package/dist/src/code_assist/setup.test.d.ts +6 -0
- package/dist/src/code_assist/setup.test.js +171 -0
- package/dist/src/code_assist/setup.test.js.map +1 -0
- package/dist/src/code_assist/types.d.ts +148 -0
- package/dist/src/code_assist/types.js +46 -0
- package/dist/src/code_assist/types.js.map +1 -0
- package/dist/src/config/blackboxModels.d.ts +28 -0
- package/dist/src/config/blackboxModels.js +148 -0
- package/dist/src/config/blackboxModels.js.map +1 -0
- package/dist/src/config/config.d.ts +381 -0
- package/dist/src/config/config.js +753 -0
- package/dist/src/config/config.js.map +1 -0
- package/dist/src/config/config.test.d.ts +6 -0
- package/dist/src/config/config.test.js +674 -0
- package/dist/src/config/config.test.js.map +1 -0
- package/dist/src/config/flashFallback.test.d.ts +6 -0
- package/dist/src/config/flashFallback.test.js +87 -0
- package/dist/src/config/flashFallback.test.js.map +1 -0
- package/dist/src/config/models.d.ts +12 -0
- package/dist/src/config/models.js +13 -0
- package/dist/src/config/models.js.map +1 -0
- package/dist/src/config/storage.d.ts +32 -0
- package/dist/src/config/storage.js +90 -0
- package/dist/src/config/storage.js.map +1 -0
- package/dist/src/config/storage.test.d.ts +6 -0
- package/dist/src/config/storage.test.js +43 -0
- package/dist/src/config/storage.test.js.map +1 -0
- package/dist/src/core/__tests__/openaiTimeoutHandling.test.d.ts +6 -0
- package/dist/src/core/__tests__/openaiTimeoutHandling.test.js +292 -0
- package/dist/src/core/__tests__/openaiTimeoutHandling.test.js.map +1 -0
- package/dist/src/core/__tests__/orphanedToolCallsTest.d.ts +64 -0
- package/dist/src/core/__tests__/orphanedToolCallsTest.js +122 -0
- package/dist/src/core/__tests__/orphanedToolCallsTest.js.map +1 -0
- package/dist/src/core/client.d.ts +75 -0
- package/dist/src/core/client.js +826 -0
- package/dist/src/core/client.js.map +1 -0
- package/dist/src/core/client.test.d.ts +6 -0
- package/dist/src/core/client.test.js +2059 -0
- package/dist/src/core/client.test.js.map +1 -0
- package/dist/src/core/contentGenerator.d.ts +51 -0
- package/dist/src/core/contentGenerator.js +149 -0
- package/dist/src/core/contentGenerator.js.map +1 -0
- package/dist/src/core/contentGenerator.test.d.ts +6 -0
- package/dist/src/core/contentGenerator.test.js +133 -0
- package/dist/src/core/contentGenerator.test.js.map +1 -0
- package/dist/src/core/coreToolScheduler.d.ts +126 -0
- package/dist/src/core/coreToolScheduler.js +630 -0
- package/dist/src/core/coreToolScheduler.js.map +1 -0
- package/dist/src/core/coreToolScheduler.test.d.ts +6 -0
- package/dist/src/core/coreToolScheduler.test.js +1228 -0
- package/dist/src/core/coreToolScheduler.test.js.map +1 -0
- package/dist/src/core/geminiChat.d.ts +139 -0
- package/dist/src/core/geminiChat.js +636 -0
- package/dist/src/core/geminiChat.js.map +1 -0
- package/dist/src/core/geminiChat.test.d.ts +6 -0
- package/dist/src/core/geminiChat.test.js +1178 -0
- package/dist/src/core/geminiChat.test.js.map +1 -0
- package/dist/src/core/geminiRequest.d.ts +13 -0
- package/dist/src/core/geminiRequest.js +11 -0
- package/dist/src/core/geminiRequest.js.map +1 -0
- package/dist/src/core/geminiRequest.test.d.ts +6 -0
- package/dist/src/core/geminiRequest.test.js +73 -0
- package/dist/src/core/geminiRequest.test.js.map +1 -0
- package/dist/src/core/logger.d.ts +68 -0
- package/dist/src/core/logger.js +370 -0
- package/dist/src/core/logger.js.map +1 -0
- package/dist/src/core/logger.test.d.ts +6 -0
- package/dist/src/core/logger.test.js +591 -0
- package/dist/src/core/logger.test.js.map +1 -0
- package/dist/src/core/loggingContentGenerator.d.ts +25 -0
- package/dist/src/core/loggingContentGenerator.js +97 -0
- package/dist/src/core/loggingContentGenerator.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +10 -0
- package/dist/src/core/nonInteractiveToolExecutor.js +24 -0
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.d.ts +6 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js +236 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/constants.d.ts +2 -0
- package/dist/src/core/openaiContentGenerator/constants.js +3 -0
- package/dist/src/core/openaiContentGenerator/constants.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/converter.d.ts +107 -0
- package/dist/src/core/openaiContentGenerator/converter.js +802 -0
- package/dist/src/core/openaiContentGenerator/converter.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/converter.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/converter.test.js +47 -0
- package/dist/src/core/openaiContentGenerator/converter.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/errorHandler.d.ts +20 -0
- package/dist/src/core/openaiContentGenerator/errorHandler.js +82 -0
- package/dist/src/core/openaiContentGenerator/errorHandler.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/errorHandler.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/errorHandler.test.js +287 -0
- package/dist/src/core/openaiContentGenerator/errorHandler.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/index.d.ts +22 -0
- package/dist/src/core/openaiContentGenerator/index.js +41 -0
- package/dist/src/core/openaiContentGenerator/index.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/openaiContentGenerator.d.ts +21 -0
- package/dist/src/core/openaiContentGenerator/openaiContentGenerator.js +105 -0
- package/dist/src/core/openaiContentGenerator/openaiContentGenerator.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/openaiContentGenerator.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/openaiContentGenerator.test.js +230 -0
- package/dist/src/core/openaiContentGenerator/openaiContentGenerator.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/pipeline.d.ts +66 -0
- package/dist/src/core/openaiContentGenerator/pipeline.js +256 -0
- package/dist/src/core/openaiContentGenerator/pipeline.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/pipeline.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/pipeline.test.js +977 -0
- package/dist/src/core/openaiContentGenerator/pipeline.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/README.md +61 -0
- package/dist/src/core/openaiContentGenerator/provider/dashscope.d.ts +63 -0
- package/dist/src/core/openaiContentGenerator/provider/dashscope.js +241 -0
- package/dist/src/core/openaiContentGenerator/provider/dashscope.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/dashscope.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/provider/dashscope.test.js +707 -0
- package/dist/src/core/openaiContentGenerator/provider/dashscope.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/deepseek.d.ts +14 -0
- package/dist/src/core/openaiContentGenerator/provider/deepseek.js +52 -0
- package/dist/src/core/openaiContentGenerator/provider/deepseek.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/deepseek.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/provider/deepseek.test.js +103 -0
- package/dist/src/core/openaiContentGenerator/provider/deepseek.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/default.d.ts +15 -0
- package/dist/src/core/openaiContentGenerator/provider/default.js +38 -0
- package/dist/src/core/openaiContentGenerator/provider/default.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/default.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/provider/default.test.js +176 -0
- package/dist/src/core/openaiContentGenerator/provider/default.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/index.d.ts +5 -0
- package/dist/src/core/openaiContentGenerator/provider/index.js +5 -0
- package/dist/src/core/openaiContentGenerator/provider/index.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/openrouter.d.ts +8 -0
- package/dist/src/core/openaiContentGenerator/provider/openrouter.js +21 -0
- package/dist/src/core/openaiContentGenerator/provider/openrouter.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/openrouter.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/provider/openrouter.test.js +152 -0
- package/dist/src/core/openaiContentGenerator/provider/openrouter.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/types.d.ts +23 -0
- package/dist/src/core/openaiContentGenerator/provider/types.js +2 -0
- package/dist/src/core/openaiContentGenerator/provider/types.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/streamingToolCallParser.d.ts +142 -0
- package/dist/src/core/openaiContentGenerator/streamingToolCallParser.js +363 -0
- package/dist/src/core/openaiContentGenerator/streamingToolCallParser.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/streamingToolCallParser.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/streamingToolCallParser.test.js +537 -0
- package/dist/src/core/openaiContentGenerator/streamingToolCallParser.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/telemetryService.d.ts +35 -0
- package/dist/src/core/openaiContentGenerator/telemetryService.js +146 -0
- package/dist/src/core/openaiContentGenerator/telemetryService.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/telemetryService.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/telemetryService.test.js +978 -0
- package/dist/src/core/openaiContentGenerator/telemetryService.test.js.map +1 -0
- package/dist/src/core/prompts.d.ts +76 -0
- package/dist/src/core/prompts.js +860 -0
- package/dist/src/core/prompts.js.map +1 -0
- package/dist/src/core/prompts.test.d.ts +6 -0
- package/dist/src/core/prompts.test.js +436 -0
- package/dist/src/core/prompts.test.js.map +1 -0
- package/dist/src/core/tokenLimits.d.ts +25 -0
- package/dist/src/core/tokenLimits.js +175 -0
- package/dist/src/core/tokenLimits.js.map +1 -0
- package/dist/src/core/tokenLimits.test.d.ts +1 -0
- package/dist/src/core/tokenLimits.test.js +261 -0
- package/dist/src/core/tokenLimits.test.js.map +1 -0
- package/dist/src/core/turn.d.ts +140 -0
- package/dist/src/core/turn.js +168 -0
- package/dist/src/core/turn.js.map +1 -0
- package/dist/src/core/turn.test.d.ts +6 -0
- package/dist/src/core/turn.test.js +450 -0
- package/dist/src/core/turn.test.js.map +1 -0
- package/dist/src/generated/git-commit.d.ts +7 -0
- package/dist/src/generated/git-commit.js +10 -0
- package/dist/src/generated/git-commit.js.map +1 -0
- package/dist/src/ide/constants.d.ts +6 -0
- package/dist/src/ide/constants.js +7 -0
- package/dist/src/ide/constants.js.map +1 -0
- package/dist/src/ide/detect-ide.d.ts +25 -0
- package/dist/src/ide/detect-ide.js +104 -0
- package/dist/src/ide/detect-ide.js.map +1 -0
- package/dist/src/ide/detect-ide.test.d.ts +6 -0
- package/dist/src/ide/detect-ide.test.js +120 -0
- package/dist/src/ide/detect-ide.test.js.map +1 -0
- package/dist/src/ide/ide-client.d.ts +67 -0
- package/dist/src/ide/ide-client.js +424 -0
- package/dist/src/ide/ide-client.js.map +1 -0
- package/dist/src/ide/ide-client.test.d.ts +6 -0
- package/dist/src/ide/ide-client.test.js +165 -0
- package/dist/src/ide/ide-client.test.js.map +1 -0
- package/dist/src/ide/ide-installer.d.ts +14 -0
- package/dist/src/ide/ide-installer.js +107 -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 +113 -0
- package/dist/src/ide/ide-installer.test.js.map +1 -0
- package/dist/src/ide/ideContext.d.ts +374 -0
- package/dist/src/ide/ideContext.js +147 -0
- package/dist/src/ide/ideContext.js.map +1 -0
- package/dist/src/ide/ideContext.test.d.ts +6 -0
- package/dist/src/ide/ideContext.test.js +265 -0
- package/dist/src/ide/ideContext.test.js.map +1 -0
- package/dist/src/ide/process-utils.d.ts +21 -0
- package/dist/src/ide/process-utils.js +164 -0
- package/dist/src/ide/process-utils.js.map +1 -0
- package/dist/src/ide/process-utils.test.d.ts +6 -0
- package/dist/src/ide/process-utils.test.js +158 -0
- package/dist/src/ide/process-utils.test.js.map +1 -0
- package/dist/src/index.d.ts +86 -0
- package/dist/src/index.js +97 -0
- package/dist/src/index.js.map +1 -0
- package/dist/src/index.test.d.ts +6 -0
- package/dist/src/index.test.js +12 -0
- package/dist/src/index.test.js.map +1 -0
- package/dist/src/mcp/google-auth-provider.d.ts +23 -0
- package/dist/src/mcp/google-auth-provider.js +72 -0
- package/dist/src/mcp/google-auth-provider.js.map +1 -0
- package/dist/src/mcp/google-auth-provider.test.d.ts +6 -0
- package/dist/src/mcp/google-auth-provider.test.js +89 -0
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -0
- package/dist/src/mcp/oauth-provider.d.ts +146 -0
- package/dist/src/mcp/oauth-provider.js +601 -0
- package/dist/src/mcp/oauth-provider.js.map +1 -0
- package/dist/src/mcp/oauth-provider.test.d.ts +6 -0
- package/dist/src/mcp/oauth-provider.test.js +672 -0
- package/dist/src/mcp/oauth-provider.test.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.d.ts +61 -0
- package/dist/src/mcp/oauth-token-storage.js +148 -0
- package/dist/src/mcp/oauth-token-storage.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/oauth-token-storage.test.js +208 -0
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -0
- package/dist/src/mcp/oauth-utils.d.ts +119 -0
- package/dist/src/mcp/oauth-utils.js +235 -0
- package/dist/src/mcp/oauth-utils.js.map +1 -0
- package/dist/src/mcp/oauth-utils.test.d.ts +6 -0
- package/dist/src/mcp/oauth-utils.test.js +199 -0
- package/dist/src/mcp/oauth-utils.test.js.map +1 -0
- package/dist/src/mcp/token-storage/base-token-storage.d.ts +19 -0
- package/dist/src/mcp/token-storage/base-token-storage.js +36 -0
- package/dist/src/mcp/token-storage/base-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/base-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/base-token-storage.test.js +160 -0
- package/dist/src/mcp/token-storage/base-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/types.d.ts +34 -0
- package/dist/src/mcp/token-storage/types.js +7 -0
- package/dist/src/mcp/token-storage/types.js.map +1 -0
- package/dist/src/mocks/msw.d.ts +6 -0
- package/dist/src/mocks/msw.js +8 -0
- package/dist/src/mocks/msw.js.map +1 -0
- package/dist/src/prompts/mcp-prompts.d.ts +8 -0
- package/dist/src/prompts/mcp-prompts.js +13 -0
- package/dist/src/prompts/mcp-prompts.js.map +1 -0
- package/dist/src/prompts/prompt-registry.d.ts +34 -0
- package/dist/src/prompts/prompt-registry.js +63 -0
- package/dist/src/prompts/prompt-registry.js.map +1 -0
- package/dist/src/services/chatRecordingService.d.ts +150 -0
- package/dist/src/services/chatRecordingService.js +321 -0
- package/dist/src/services/chatRecordingService.js.map +1 -0
- package/dist/src/services/chatRecordingService.test.d.ts +6 -0
- package/dist/src/services/chatRecordingService.test.js +290 -0
- package/dist/src/services/chatRecordingService.test.js.map +1 -0
- package/dist/src/services/fileDiscoveryService.d.ts +35 -0
- package/dist/src/services/fileDiscoveryService.js +91 -0
- package/dist/src/services/fileDiscoveryService.js.map +1 -0
- package/dist/src/services/fileDiscoveryService.test.d.ts +6 -0
- package/dist/src/services/fileDiscoveryService.test.js +143 -0
- package/dist/src/services/fileDiscoveryService.test.js.map +1 -0
- package/dist/src/services/fileSystemService.d.ts +31 -0
- package/dist/src/services/fileSystemService.js +18 -0
- package/dist/src/services/fileSystemService.js.map +1 -0
- package/dist/src/services/fileSystemService.test.d.ts +6 -0
- package/dist/src/services/fileSystemService.test.js +41 -0
- package/dist/src/services/fileSystemService.test.js.map +1 -0
- package/dist/src/services/gitService.d.ts +23 -0
- package/dist/src/services/gitService.js +110 -0
- package/dist/src/services/gitService.js.map +1 -0
- package/dist/src/services/gitService.test.d.ts +6 -0
- package/dist/src/services/gitService.test.js +212 -0
- package/dist/src/services/gitService.test.js.map +1 -0
- package/dist/src/services/loopDetectionService.d.ts +98 -0
- package/dist/src/services/loopDetectionService.js +363 -0
- package/dist/src/services/loopDetectionService.js.map +1 -0
- package/dist/src/services/loopDetectionService.test.d.ts +6 -0
- package/dist/src/services/loopDetectionService.test.js +560 -0
- package/dist/src/services/loopDetectionService.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.d.ts +68 -0
- package/dist/src/services/shellExecutionService.js +332 -0
- package/dist/src/services/shellExecutionService.js.map +1 -0
- package/dist/src/services/shellExecutionService.test.d.ts +6 -0
- package/dist/src/services/shellExecutionService.test.js +517 -0
- package/dist/src/services/shellExecutionService.test.js.map +1 -0
- package/dist/src/subagents/builtin-agents.d.ts +35 -0
- package/dist/src/subagents/builtin-agents.js +85 -0
- package/dist/src/subagents/builtin-agents.js.map +1 -0
- package/dist/src/subagents/builtin-agents.test.d.ts +6 -0
- package/dist/src/subagents/builtin-agents.test.js +78 -0
- package/dist/src/subagents/builtin-agents.test.js.map +1 -0
- package/dist/src/subagents/index.d.ts +29 -0
- package/dist/src/subagents/index.js +15 -0
- package/dist/src/subagents/index.js.map +1 -0
- package/dist/src/subagents/subagent-events.d.ts +93 -0
- package/dist/src/subagents/subagent-events.js +31 -0
- package/dist/src/subagents/subagent-events.js.map +1 -0
- package/dist/src/subagents/subagent-hooks.d.ts +29 -0
- package/dist/src/subagents/subagent-hooks.js +7 -0
- package/dist/src/subagents/subagent-hooks.js.map +1 -0
- package/dist/src/subagents/subagent-manager.d.ts +170 -0
- package/dist/src/subagents/subagent-manager.js +593 -0
- package/dist/src/subagents/subagent-manager.js.map +1 -0
- package/dist/src/subagents/subagent-manager.test.d.ts +6 -0
- package/dist/src/subagents/subagent-manager.test.js +822 -0
- package/dist/src/subagents/subagent-manager.test.js.map +1 -0
- package/dist/src/subagents/subagent-statistics.d.ts +46 -0
- package/dist/src/subagents/subagent-statistics.js +193 -0
- package/dist/src/subagents/subagent-statistics.js.map +1 -0
- package/dist/src/subagents/subagent-statistics.test.d.ts +6 -0
- package/dist/src/subagents/subagent-statistics.test.js +231 -0
- package/dist/src/subagents/subagent-statistics.test.js.map +1 -0
- package/dist/src/subagents/subagent.d.ts +161 -0
- package/dist/src/subagents/subagent.js +667 -0
- package/dist/src/subagents/subagent.js.map +1 -0
- package/dist/src/subagents/subagent.test.d.ts +6 -0
- package/dist/src/subagents/subagent.test.js +487 -0
- package/dist/src/subagents/subagent.test.js.map +1 -0
- package/dist/src/subagents/types.d.ts +218 -0
- package/dist/src/subagents/types.js +58 -0
- package/dist/src/subagents/types.js.map +1 -0
- package/dist/src/subagents/types.test.d.ts +6 -0
- package/dist/src/subagents/types.test.js +31 -0
- package/dist/src/subagents/types.test.js.map +1 -0
- package/dist/src/subagents/validation.d.ts +63 -0
- package/dist/src/subagents/validation.js +293 -0
- package/dist/src/subagents/validation.js.map +1 -0
- package/dist/src/subagents/validation.test.d.ts +6 -0
- package/dist/src/subagents/validation.test.js +330 -0
- package/dist/src/subagents/validation.test.js.map +1 -0
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.d.ts +80 -0
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.js +583 -0
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.js.map +1 -0
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.test.d.ts +6 -0
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.test.js +301 -0
- package/dist/src/telemetry/blackbox-logger/blackbox-logger.test.js.map +1 -0
- package/dist/src/telemetry/blackbox-logger/event-types.d.ts +73 -0
- package/dist/src/telemetry/blackbox-logger/event-types.js +2 -0
- package/dist/src/telemetry/blackbox-logger/event-types.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +121 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +773 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +17 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +420 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +90 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +229 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -0
- package/dist/src/telemetry/constants.d.ts +34 -0
- package/dist/src/telemetry/constants.js +35 -0
- package/dist/src/telemetry/constants.js.map +1 -0
- package/dist/src/telemetry/file-exporters.d.ts +29 -0
- package/dist/src/telemetry/file-exporters.js +62 -0
- package/dist/src/telemetry/file-exporters.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +20 -0
- package/dist/src/telemetry/index.js +21 -0
- package/dist/src/telemetry/index.js.map +1 -0
- package/dist/src/telemetry/integration.test.circular.d.ts +6 -0
- package/dist/src/telemetry/integration.test.circular.js +95 -0
- package/dist/src/telemetry/integration.test.circular.js.map +1 -0
- package/dist/src/telemetry/loggers.d.ts +26 -0
- package/dist/src/telemetry/loggers.js +406 -0
- package/dist/src/telemetry/loggers.js.map +1 -0
- package/dist/src/telemetry/loggers.test.circular.d.ts +6 -0
- package/dist/src/telemetry/loggers.test.circular.js +107 -0
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -0
- package/dist/src/telemetry/loggers.test.d.ts +6 -0
- package/dist/src/telemetry/loggers.test.js +638 -0
- package/dist/src/telemetry/loggers.test.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +40 -0
- package/dist/src/telemetry/metrics.js +229 -0
- package/dist/src/telemetry/metrics.js.map +1 -0
- package/dist/src/telemetry/metrics.test.d.ts +6 -0
- package/dist/src/telemetry/metrics.test.js +242 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -0
- package/dist/src/telemetry/sdk.d.ts +9 -0
- package/dist/src/telemetry/sdk.js +161 -0
- package/dist/src/telemetry/sdk.js.map +1 -0
- package/dist/src/telemetry/sdk.test.d.ts +6 -0
- package/dist/src/telemetry/sdk.test.js +82 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -0
- package/dist/src/telemetry/telemetry-utils.d.ts +6 -0
- package/dist/src/telemetry/telemetry-utils.js +14 -0
- package/dist/src/telemetry/telemetry-utils.js.map +1 -0
- package/dist/src/telemetry/telemetry-utils.test.d.ts +6 -0
- package/dist/src/telemetry/telemetry-utils.test.js +40 -0
- package/dist/src/telemetry/telemetry-utils.test.js.map +1 -0
- package/dist/src/telemetry/telemetry.test.d.ts +6 -0
- package/dist/src/telemetry/telemetry.test.js +50 -0
- package/dist/src/telemetry/telemetry.test.js.map +1 -0
- package/dist/src/telemetry/tool-call-decision.d.ts +13 -0
- package/dist/src/telemetry/tool-call-decision.js +29 -0
- package/dist/src/telemetry/tool-call-decision.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +236 -0
- package/dist/src/telemetry/types.js +405 -0
- package/dist/src/telemetry/types.js.map +1 -0
- package/dist/src/telemetry/uiTelemetry.d.ts +75 -0
- package/dist/src/telemetry/uiTelemetry.js +153 -0
- package/dist/src/telemetry/uiTelemetry.js.map +1 -0
- package/dist/src/telemetry/uiTelemetry.test.d.ts +6 -0
- package/dist/src/telemetry/uiTelemetry.test.js +558 -0
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -0
- package/dist/src/test-utils/config.d.ts +17 -0
- package/dist/src/test-utils/config.js +32 -0
- package/dist/src/test-utils/config.js.map +1 -0
- 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/test-utils/tools.d.ts +45 -0
- package/dist/src/test-utils/tools.js +105 -0
- package/dist/src/test-utils/tools.js.map +1 -0
- package/dist/src/tools/diffOptions.d.ts +9 -0
- package/dist/src/tools/diffOptions.js +38 -0
- package/dist/src/tools/diffOptions.js.map +1 -0
- package/dist/src/tools/diffOptions.test.d.ts +6 -0
- package/dist/src/tools/diffOptions.test.js +119 -0
- package/dist/src/tools/diffOptions.test.js.map +1 -0
- package/dist/src/tools/edit.d.ts +56 -0
- package/dist/src/tools/edit.js +434 -0
- package/dist/src/tools/edit.js.map +1 -0
- package/dist/src/tools/edit.test.d.ts +6 -0
- package/dist/src/tools/edit.test.js +569 -0
- package/dist/src/tools/edit.test.js.map +1 -0
- package/dist/src/tools/exitPlanMode.d.ts +28 -0
- package/dist/src/tools/exitPlanMode.js +137 -0
- package/dist/src/tools/exitPlanMode.js.map +1 -0
- package/dist/src/tools/exitPlanMode.test.d.ts +6 -0
- package/dist/src/tools/exitPlanMode.test.js +219 -0
- package/dist/src/tools/exitPlanMode.test.js.map +1 -0
- package/dist/src/tools/glob.d.ts +52 -0
- package/dist/src/tools/glob.js +237 -0
- package/dist/src/tools/glob.js.map +1 -0
- package/dist/src/tools/glob.test.d.ts +6 -0
- package/dist/src/tools/glob.test.js +375 -0
- package/dist/src/tools/glob.test.js.map +1 -0
- package/dist/src/tools/grep.d.ts +51 -0
- package/dist/src/tools/grep.js +566 -0
- package/dist/src/tools/grep.js.map +1 -0
- package/dist/src/tools/grep.test.d.ts +6 -0
- package/dist/src/tools/grep.test.js +356 -0
- package/dist/src/tools/grep.test.js.map +1 -0
- package/dist/src/tools/ls.d.ts +68 -0
- package/dist/src/tools/ls.js +227 -0
- package/dist/src/tools/ls.js.map +1 -0
- package/dist/src/tools/ls.test.d.ts +6 -0
- package/dist/src/tools/ls.test.js +389 -0
- package/dist/src/tools/ls.test.js.map +1 -0
- package/dist/src/tools/mcp-client-manager.d.ts +38 -0
- package/dist/src/tools/mcp-client-manager.js +74 -0
- package/dist/src/tools/mcp-client-manager.js.map +1 -0
- package/dist/src/tools/mcp-client-manager.test.d.ts +6 -0
- package/dist/src/tools/mcp-client-manager.test.js +39 -0
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -0
- package/dist/src/tools/mcp-client.d.ts +199 -0
- package/dist/src/tools/mcp-client.js +995 -0
- package/dist/src/tools/mcp-client.js.map +1 -0
- package/dist/src/tools/mcp-client.test.d.ts +6 -0
- package/dist/src/tools/mcp-client.test.js +454 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -0
- package/dist/src/tools/mcp-tool.d.ts +23 -0
- package/dist/src/tools/mcp-tool.js +240 -0
- package/dist/src/tools/mcp-tool.js.map +1 -0
- package/dist/src/tools/mcp-tool.test.d.ts +6 -0
- package/dist/src/tools/mcp-tool.test.js +576 -0
- package/dist/src/tools/mcp-tool.test.js.map +1 -0
- package/dist/src/tools/memoryTool.d.ts +41 -0
- package/dist/src/tools/memoryTool.js +435 -0
- package/dist/src/tools/memoryTool.js.map +1 -0
- package/dist/src/tools/memoryTool.test.d.ts +6 -0
- package/dist/src/tools/memoryTool.test.js +420 -0
- package/dist/src/tools/memoryTool.test.js.map +1 -0
- package/dist/src/tools/modifiable-tool.d.ts +32 -0
- package/dist/src/tools/modifiable-tool.js +88 -0
- package/dist/src/tools/modifiable-tool.js.map +1 -0
- package/dist/src/tools/modifiable-tool.test.d.ts +6 -0
- package/dist/src/tools/modifiable-tool.test.js +193 -0
- package/dist/src/tools/modifiable-tool.test.js.map +1 -0
- package/dist/src/tools/read-file.d.ts +35 -0
- package/dist/src/tools/read-file.js +128 -0
- package/dist/src/tools/read-file.js.map +1 -0
- package/dist/src/tools/read-file.test.d.ts +6 -0
- package/dist/src/tools/read-file.test.js +311 -0
- package/dist/src/tools/read-file.test.js.map +1 -0
- package/dist/src/tools/read-many-files.d.ts +60 -0
- package/dist/src/tools/read-many-files.js +416 -0
- package/dist/src/tools/read-many-files.js.map +1 -0
- package/dist/src/tools/read-many-files.test.d.ts +6 -0
- package/dist/src/tools/read-many-files.test.js +565 -0
- package/dist/src/tools/read-many-files.test.js.map +1 -0
- package/dist/src/tools/ripGrep.d.ts +47 -0
- package/dist/src/tools/ripGrep.js +375 -0
- package/dist/src/tools/ripGrep.js.map +1 -0
- package/dist/src/tools/ripGrep.test.d.ts +6 -0
- package/dist/src/tools/ripGrep.test.js +874 -0
- package/dist/src/tools/ripGrep.test.js.map +1 -0
- package/dist/src/tools/shell.d.ts +23 -0
- package/dist/src/tools/shell.js +387 -0
- package/dist/src/tools/shell.js.map +1 -0
- package/dist/src/tools/shell.test.d.ts +6 -0
- package/dist/src/tools/shell.test.js +632 -0
- package/dist/src/tools/shell.test.js.map +1 -0
- package/dist/src/tools/task.d.ts +59 -0
- package/dist/src/tools/task.js +412 -0
- package/dist/src/tools/task.js.map +1 -0
- package/dist/src/tools/task.test.d.ts +6 -0
- package/dist/src/tools/task.test.js +369 -0
- package/dist/src/tools/task.test.js.map +1 -0
- package/dist/src/tools/todoWrite.d.ts +42 -0
- package/dist/src/tools/todoWrite.js +385 -0
- package/dist/src/tools/todoWrite.js.map +1 -0
- package/dist/src/tools/todoWrite.test.d.ts +6 -0
- package/dist/src/tools/todoWrite.test.js +222 -0
- package/dist/src/tools/todoWrite.test.js.map +1 -0
- package/dist/src/tools/tool-error.d.ts +43 -0
- package/dist/src/tools/tool-error.js +58 -0
- package/dist/src/tools/tool-error.js.map +1 -0
- package/dist/src/tools/tool-names.d.ts +23 -0
- package/dist/src/tools/tool-names.js +24 -0
- package/dist/src/tools/tool-names.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +86 -0
- package/dist/src/tools/tool-registry.js +369 -0
- package/dist/src/tools/tool-registry.js.map +1 -0
- package/dist/src/tools/tool-registry.test.d.ts +6 -0
- package/dist/src/tools/tool-registry.test.js +332 -0
- package/dist/src/tools/tool-registry.test.js.map +1 -0
- package/dist/src/tools/tools.d.ts +316 -0
- package/dist/src/tools/tools.js +251 -0
- package/dist/src/tools/tools.js.map +1 -0
- package/dist/src/tools/tools.test.d.ts +6 -0
- package/dist/src/tools/tools.test.js +205 -0
- package/dist/src/tools/tools.test.js.map +1 -0
- package/dist/src/tools/web-fetch.d.ts +31 -0
- package/dist/src/tools/web-fetch.js +161 -0
- package/dist/src/tools/web-fetch.js.map +1 -0
- package/dist/src/tools/web-fetch.test.d.ts +6 -0
- package/dist/src/tools/web-fetch.test.js +133 -0
- package/dist/src/tools/web-fetch.test.js.map +1 -0
- package/dist/src/tools/web-search.d.ts +40 -0
- package/dist/src/tools/web-search.js +134 -0
- package/dist/src/tools/web-search.js.map +1 -0
- package/dist/src/tools/web-search.test.d.ts +6 -0
- package/dist/src/tools/web-search.test.js +125 -0
- package/dist/src/tools/web-search.test.js.map +1 -0
- package/dist/src/tools/write-file.d.ts +52 -0
- package/dist/src/tools/write-file.js +298 -0
- package/dist/src/tools/write-file.js.map +1 -0
- package/dist/src/tools/write-file.test.d.ts +6 -0
- package/dist/src/tools/write-file.test.js +436 -0
- package/dist/src/tools/write-file.test.js.map +1 -0
- package/dist/src/utils/LruCache.d.ts +13 -0
- package/dist/src/utils/LruCache.js +38 -0
- package/dist/src/utils/LruCache.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.d.ts +24 -0
- package/dist/src/utils/bfsFileSearch.js +89 -0
- package/dist/src/utils/bfsFileSearch.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.test.d.ts +6 -0
- package/dist/src/utils/bfsFileSearch.test.js +163 -0
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -0
- package/dist/src/utils/browser.d.ts +13 -0
- package/dist/src/utils/browser.js +50 -0
- package/dist/src/utils/browser.js.map +1 -0
- package/dist/src/utils/editor.d.ts +28 -0
- package/dist/src/utils/editor.js +186 -0
- package/dist/src/utils/editor.js.map +1 -0
- package/dist/src/utils/editor.test.d.ts +6 -0
- package/dist/src/utils/editor.test.js +445 -0
- package/dist/src/utils/editor.test.js.map +1 -0
- package/dist/src/utils/environmentContext.d.ts +21 -0
- package/dist/src/utils/environmentContext.js +90 -0
- package/dist/src/utils/environmentContext.js.map +1 -0
- package/dist/src/utils/environmentContext.test.d.ts +6 -0
- package/dist/src/utils/environmentContext.test.js +148 -0
- package/dist/src/utils/environmentContext.test.js.map +1 -0
- package/dist/src/utils/errorParsing.d.ts +8 -0
- package/dist/src/utils/errorParsing.js +93 -0
- package/dist/src/utils/errorParsing.js.map +1 -0
- package/dist/src/utils/errorParsing.test.d.ts +6 -0
- package/dist/src/utils/errorParsing.test.js +172 -0
- package/dist/src/utils/errorParsing.test.js.map +1 -0
- package/dist/src/utils/errorReporting.d.ts +14 -0
- package/dist/src/utils/errorReporting.js +88 -0
- package/dist/src/utils/errorReporting.js.map +1 -0
- package/dist/src/utils/errorReporting.test.d.ts +6 -0
- package/dist/src/utils/errorReporting.test.js +130 -0
- package/dist/src/utils/errorReporting.test.js.map +1 -0
- package/dist/src/utils/errors.d.ts +33 -0
- package/dist/src/utils/errors.js +86 -0
- package/dist/src/utils/errors.js.map +1 -0
- package/dist/src/utils/fetch.d.ts +11 -0
- package/dist/src/utils/fetch.js +51 -0
- package/dist/src/utils/fetch.js.map +1 -0
- package/dist/src/utils/fileUtils.d.ts +53 -0
- package/dist/src/utils/fileUtils.js +283 -0
- package/dist/src/utils/fileUtils.js.map +1 -0
- package/dist/src/utils/fileUtils.test.d.ts +6 -0
- package/dist/src/utils/fileUtils.test.js +364 -0
- package/dist/src/utils/fileUtils.test.js.map +1 -0
- package/dist/src/utils/filesearch/crawlCache.d.ts +25 -0
- package/dist/src/utils/filesearch/crawlCache.js +57 -0
- package/dist/src/utils/filesearch/crawlCache.js.map +1 -0
- package/dist/src/utils/filesearch/crawlCache.test.d.ts +6 -0
- package/dist/src/utils/filesearch/crawlCache.test.js +103 -0
- package/dist/src/utils/filesearch/crawlCache.test.js.map +1 -0
- package/dist/src/utils/filesearch/crawler.d.ts +15 -0
- package/dist/src/utils/filesearch/crawler.js +50 -0
- package/dist/src/utils/filesearch/crawler.js.map +1 -0
- package/dist/src/utils/filesearch/crawler.test.d.ts +6 -0
- package/dist/src/utils/filesearch/crawler.test.js +468 -0
- package/dist/src/utils/filesearch/crawler.test.js.map +1 -0
- package/dist/src/utils/filesearch/fileSearch.d.ts +38 -0
- package/dist/src/utils/filesearch/fileSearch.js +191 -0
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -0
- package/dist/src/utils/filesearch/fileSearch.test.d.ts +6 -0
- package/dist/src/utils/filesearch/fileSearch.test.js +642 -0
- package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -0
- package/dist/src/utils/filesearch/ignore.d.ts +42 -0
- package/dist/src/utils/filesearch/ignore.js +106 -0
- package/dist/src/utils/filesearch/ignore.js.map +1 -0
- package/dist/src/utils/filesearch/ignore.test.d.ts +6 -0
- package/dist/src/utils/filesearch/ignore.test.js +144 -0
- package/dist/src/utils/filesearch/ignore.test.js.map +1 -0
- package/dist/src/utils/filesearch/result-cache.d.ts +33 -0
- package/dist/src/utils/filesearch/result-cache.js +59 -0
- package/dist/src/utils/filesearch/result-cache.js.map +1 -0
- package/dist/src/utils/filesearch/result-cache.test.d.ts +6 -0
- package/dist/src/utils/filesearch/result-cache.test.js +46 -0
- package/dist/src/utils/filesearch/result-cache.test.js.map +1 -0
- package/dist/src/utils/flashFallback.integration.test.d.ts +6 -0
- package/dist/src/utils/flashFallback.integration.test.js +119 -0
- package/dist/src/utils/flashFallback.integration.test.js.map +1 -0
- package/dist/src/utils/formatters.d.ts +6 -0
- package/dist/src/utils/formatters.js +16 -0
- package/dist/src/utils/formatters.js.map +1 -0
- package/dist/src/utils/generateContentResponseUtilities.d.ts +13 -0
- package/dist/src/utils/generateContentResponseUtilities.js +80 -0
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -0
- package/dist/src/utils/generateContentResponseUtilities.test.d.ts +6 -0
- package/dist/src/utils/generateContentResponseUtilities.test.js +235 -0
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -0
- package/dist/src/utils/getFolderStructure.d.ts +31 -0
- package/dist/src/utils/getFolderStructure.js +246 -0
- package/dist/src/utils/getFolderStructure.js.map +1 -0
- package/dist/src/utils/getFolderStructure.test.d.ts +6 -0
- package/dist/src/utils/getFolderStructure.test.js +282 -0
- package/dist/src/utils/getFolderStructure.test.js.map +1 -0
- package/dist/src/utils/getPty.d.ts +19 -0
- package/dist/src/utils/getPty.js +23 -0
- package/dist/src/utils/getPty.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.d.ts +20 -0
- package/dist/src/utils/gitIgnoreParser.js +61 -0
- package/dist/src/utils/gitIgnoreParser.js.map +1 -0
- package/dist/src/utils/gitIgnoreParser.test.d.ts +6 -0
- package/dist/src/utils/gitIgnoreParser.test.js +154 -0
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -0
- package/dist/src/utils/gitUtils.d.ts +17 -0
- package/dist/src/utils/gitUtils.js +61 -0
- package/dist/src/utils/gitUtils.js.map +1 -0
- package/dist/src/utils/ignorePatterns.d.ts +103 -0
- package/dist/src/utils/ignorePatterns.js +220 -0
- package/dist/src/utils/ignorePatterns.js.map +1 -0
- package/dist/src/utils/ignorePatterns.test.d.ts +6 -0
- package/dist/src/utils/ignorePatterns.test.js +250 -0
- package/dist/src/utils/ignorePatterns.test.js.map +1 -0
- package/dist/src/utils/installationManager.d.ts +16 -0
- package/dist/src/utils/installationManager.js +50 -0
- package/dist/src/utils/installationManager.js.map +1 -0
- package/dist/src/utils/installationManager.test.d.ts +6 -0
- package/dist/src/utils/installationManager.test.js +83 -0
- package/dist/src/utils/installationManager.test.js.map +1 -0
- package/dist/src/utils/language-detection.d.ts +6 -0
- package/dist/src/utils/language-detection.js +101 -0
- package/dist/src/utils/language-detection.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +15 -0
- package/dist/src/utils/memoryDiscovery.js +271 -0
- package/dist/src/utils/memoryDiscovery.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.test.d.ts +6 -0
- package/dist/src/utils/memoryDiscovery.test.js +219 -0
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -0
- package/dist/src/utils/memoryImportProcessor.d.ts +42 -0
- package/dist/src/utils/memoryImportProcessor.js +296 -0
- package/dist/src/utils/memoryImportProcessor.js.map +1 -0
- package/dist/src/utils/memoryImportProcessor.test.d.ts +6 -0
- package/dist/src/utils/memoryImportProcessor.test.js +573 -0
- package/dist/src/utils/memoryImportProcessor.test.js.map +1 -0
- package/dist/src/utils/messageInspectors.d.ts +8 -0
- package/dist/src/utils/messageInspectors.js +16 -0
- package/dist/src/utils/messageInspectors.js.map +1 -0
- package/dist/src/utils/nextSpeakerChecker.d.ts +12 -0
- package/dist/src/utils/nextSpeakerChecker.js +91 -0
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -0
- package/dist/src/utils/nextSpeakerChecker.test.d.ts +6 -0
- package/dist/src/utils/nextSpeakerChecker.test.js +168 -0
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -0
- package/dist/src/utils/openaiLogger.d.ts +42 -0
- package/dist/src/utils/openaiLogger.js +123 -0
- package/dist/src/utils/openaiLogger.js.map +1 -0
- package/dist/src/utils/partUtils.d.ts +35 -0
- package/dist/src/utils/partUtils.js +133 -0
- package/dist/src/utils/partUtils.js.map +1 -0
- package/dist/src/utils/partUtils.test.d.ts +6 -0
- package/dist/src/utils/partUtils.test.js +241 -0
- package/dist/src/utils/partUtils.test.js.map +1 -0
- package/dist/src/utils/pathReader.d.ts +17 -0
- package/dist/src/utils/pathReader.js +92 -0
- package/dist/src/utils/pathReader.js.map +1 -0
- package/dist/src/utils/pathReader.test.d.ts +6 -0
- package/dist/src/utils/pathReader.test.js +363 -0
- package/dist/src/utils/pathReader.test.js.map +1 -0
- package/dist/src/utils/paths.d.ts +58 -0
- package/dist/src/utils/paths.js +159 -0
- package/dist/src/utils/paths.js.map +1 -0
- package/dist/src/utils/paths.test.d.ts +6 -0
- package/dist/src/utils/paths.test.js +225 -0
- package/dist/src/utils/paths.test.js.map +1 -0
- package/dist/src/utils/projectSummary.d.ts +22 -0
- package/dist/src/utils/projectSummary.js +86 -0
- package/dist/src/utils/projectSummary.js.map +1 -0
- package/dist/src/utils/quotaErrorDetection.d.ts +20 -0
- package/dist/src/utils/quotaErrorDetection.js +114 -0
- package/dist/src/utils/quotaErrorDetection.js.map +1 -0
- package/dist/src/utils/quotaErrorDetection.test.d.ts +6 -0
- package/dist/src/utils/quotaErrorDetection.test.js +153 -0
- package/dist/src/utils/quotaErrorDetection.test.js.map +1 -0
- package/dist/src/utils/request-tokenizer/imageTokenizer.d.ts +112 -0
- package/dist/src/utils/request-tokenizer/imageTokenizer.js +401 -0
- package/dist/src/utils/request-tokenizer/imageTokenizer.js.map +1 -0
- package/dist/src/utils/request-tokenizer/imageTokenizer.test.d.ts +6 -0
- package/dist/src/utils/request-tokenizer/imageTokenizer.test.js +114 -0
- package/dist/src/utils/request-tokenizer/imageTokenizer.test.js.map +1 -0
- package/dist/src/utils/request-tokenizer/index.d.ts +18 -0
- package/dist/src/utils/request-tokenizer/index.js +30 -0
- package/dist/src/utils/request-tokenizer/index.js.map +1 -0
- package/dist/src/utils/request-tokenizer/requestTokenizer.d.ts +56 -0
- package/dist/src/utils/request-tokenizer/requestTokenizer.js +263 -0
- package/dist/src/utils/request-tokenizer/requestTokenizer.js.map +1 -0
- package/dist/src/utils/request-tokenizer/requestTokenizer.test.d.ts +6 -0
- package/dist/src/utils/request-tokenizer/requestTokenizer.test.js +245 -0
- package/dist/src/utils/request-tokenizer/requestTokenizer.test.js.map +1 -0
- package/dist/src/utils/request-tokenizer/supportedImageFormats.d.ts +30 -0
- package/dist/src/utils/request-tokenizer/supportedImageFormats.js +41 -0
- package/dist/src/utils/request-tokenizer/supportedImageFormats.js.map +1 -0
- package/dist/src/utils/request-tokenizer/textTokenizer.d.ts +29 -0
- package/dist/src/utils/request-tokenizer/textTokenizer.js +88 -0
- package/dist/src/utils/request-tokenizer/textTokenizer.js.map +1 -0
- package/dist/src/utils/request-tokenizer/textTokenizer.test.d.ts +6 -0
- package/dist/src/utils/request-tokenizer/textTokenizer.test.js +253 -0
- package/dist/src/utils/request-tokenizer/textTokenizer.test.js.map +1 -0
- package/dist/src/utils/request-tokenizer/types.d.ts +55 -0
- package/dist/src/utils/request-tokenizer/types.js +7 -0
- package/dist/src/utils/request-tokenizer/types.js.map +1 -0
- package/dist/src/utils/retry.d.ts +30 -0
- package/dist/src/utils/retry.js +288 -0
- package/dist/src/utils/retry.js.map +1 -0
- package/dist/src/utils/retry.test.d.ts +6 -0
- package/dist/src/utils/retry.test.js +452 -0
- package/dist/src/utils/retry.test.js.map +1 -0
- package/dist/src/utils/safeJsonParse.d.ts +15 -0
- package/dist/src/utils/safeJsonParse.js +41 -0
- package/dist/src/utils/safeJsonParse.js.map +1 -0
- package/dist/src/utils/safeJsonParse.test.d.ts +6 -0
- package/dist/src/utils/safeJsonParse.test.js +112 -0
- package/dist/src/utils/safeJsonParse.test.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.d.ts +13 -0
- package/dist/src/utils/safeJsonStringify.js +25 -0
- package/dist/src/utils/safeJsonStringify.js.map +1 -0
- package/dist/src/utils/safeJsonStringify.test.d.ts +6 -0
- package/dist/src/utils/safeJsonStringify.test.js +61 -0
- package/dist/src/utils/safeJsonStringify.test.js.map +1 -0
- package/dist/src/utils/schemaValidator.d.ts +15 -0
- package/dist/src/utils/schemaValidator.js +57 -0
- package/dist/src/utils/schemaValidator.js.map +1 -0
- package/dist/src/utils/secure-browser-launcher.d.ts +23 -0
- package/dist/src/utils/secure-browser-launcher.js +165 -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/session.d.ts +6 -0
- package/dist/src/utils/session.js +8 -0
- package/dist/src/utils/session.js.map +1 -0
- package/dist/src/utils/shell-utils.d.ts +121 -0
- package/dist/src/utils/shell-utils.js +381 -0
- package/dist/src/utils/shell-utils.js.map +1 -0
- package/dist/src/utils/shell-utils.test.d.ts +6 -0
- package/dist/src/utils/shell-utils.test.js +346 -0
- package/dist/src/utils/shell-utils.test.js.map +1 -0
- package/dist/src/utils/shellReadOnlyChecker.d.ts +6 -0
- package/dist/src/utils/shellReadOnlyChecker.js +247 -0
- package/dist/src/utils/shellReadOnlyChecker.js.map +1 -0
- package/dist/src/utils/shellReadOnlyChecker.test.d.ts +6 -0
- package/dist/src/utils/shellReadOnlyChecker.test.js +47 -0
- package/dist/src/utils/shellReadOnlyChecker.test.js.map +1 -0
- package/dist/src/utils/subagentGenerator.d.ts +20 -0
- package/dist/src/utils/subagentGenerator.js +116 -0
- package/dist/src/utils/subagentGenerator.js.map +1 -0
- package/dist/src/utils/subagentGenerator.test.d.ts +6 -0
- package/dist/src/utils/subagentGenerator.test.js +158 -0
- package/dist/src/utils/subagentGenerator.test.js.map +1 -0
- package/dist/src/utils/summarizer.d.ts +25 -0
- package/dist/src/utils/summarizer.js +51 -0
- package/dist/src/utils/summarizer.js.map +1 -0
- package/dist/src/utils/summarizer.test.d.ts +6 -0
- package/dist/src/utils/summarizer.test.js +131 -0
- package/dist/src/utils/summarizer.test.js.map +1 -0
- package/dist/src/utils/systemEncoding.d.ts +40 -0
- package/dist/src/utils/systemEncoding.js +149 -0
- package/dist/src/utils/systemEncoding.js.map +1 -0
- package/dist/src/utils/systemEncoding.test.d.ts +6 -0
- package/dist/src/utils/systemEncoding.test.js +368 -0
- package/dist/src/utils/systemEncoding.test.js.map +1 -0
- package/dist/src/utils/testUtils.d.ts +29 -0
- package/dist/src/utils/testUtils.js +70 -0
- package/dist/src/utils/testUtils.js.map +1 -0
- package/dist/src/utils/textUtils.d.ts +13 -0
- package/dist/src/utils/textUtils.js +28 -0
- package/dist/src/utils/textUtils.js.map +1 -0
- package/dist/src/utils/tool-utils.d.ts +19 -0
- package/dist/src/utils/tool-utils.js +58 -0
- package/dist/src/utils/tool-utils.js.map +1 -0
- package/dist/src/utils/tool-utils.test.d.ts +6 -0
- package/dist/src/utils/tool-utils.test.js +61 -0
- package/dist/src/utils/tool-utils.test.js.map +1 -0
- package/dist/src/utils/userAccountManager.d.ts +20 -0
- package/dist/src/utils/userAccountManager.js +114 -0
- package/dist/src/utils/userAccountManager.js.map +1 -0
- package/dist/src/utils/userAccountManager.test.d.ts +6 -0
- package/dist/src/utils/userAccountManager.test.js +223 -0
- package/dist/src/utils/userAccountManager.test.js.map +1 -0
- package/dist/src/utils/workspaceContext.d.ts +66 -0
- package/dist/src/utils/workspaceContext.js +171 -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 +318 -0
- package/dist/src/utils/workspaceContext.test.js.map +1 -0
- package/dist/src/utils/yaml-parser.d.ts +29 -0
- package/dist/src/utils/yaml-parser.js +172 -0
- package/dist/src/utils/yaml-parser.js.map +1 -0
- package/dist/src/utils/yaml-parser.test.d.ts +6 -0
- package/dist/src/utils/yaml-parser.test.js +170 -0
- package/dist/src/utils/yaml-parser.test.js.map +1 -0
- package/dist/tsconfig.tsbuildinfo +1 -0
- package/package.json +89 -0
|
@@ -0,0 +1,153 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect } from 'vitest';
|
|
7
|
+
import { isBlackboxQuotaExceededError, isBlackboxThrottlingError, isProQuotaExceededError, isGenericQuotaExceededError, isApiError, isStructuredError, } from './quotaErrorDetection.js';
|
|
8
|
+
describe('quotaErrorDetection', () => {
|
|
9
|
+
describe('isBlackboxQuotaExceededError', () => {
|
|
10
|
+
it('should detect insufficient_quota error message', () => {
|
|
11
|
+
const error = new Error('insufficient_quota');
|
|
12
|
+
expect(isBlackboxQuotaExceededError(error)).toBe(true);
|
|
13
|
+
});
|
|
14
|
+
it('should detect free allocated quota exceeded error message', () => {
|
|
15
|
+
const error = new Error('Free allocated quota exceeded.');
|
|
16
|
+
expect(isBlackboxQuotaExceededError(error)).toBe(true);
|
|
17
|
+
});
|
|
18
|
+
it('should detect quota exceeded error message', () => {
|
|
19
|
+
const error = new Error('quota exceeded');
|
|
20
|
+
expect(isBlackboxQuotaExceededError(error)).toBe(true);
|
|
21
|
+
});
|
|
22
|
+
it('should detect quota exceeded in string error', () => {
|
|
23
|
+
const error = 'insufficient_quota';
|
|
24
|
+
expect(isBlackboxQuotaExceededError(error)).toBe(true);
|
|
25
|
+
});
|
|
26
|
+
it('should detect quota exceeded in structured error', () => {
|
|
27
|
+
const error = { message: 'Free allocated quota exceeded.', status: 429 };
|
|
28
|
+
expect(isBlackboxQuotaExceededError(error)).toBe(true);
|
|
29
|
+
});
|
|
30
|
+
it('should detect quota exceeded in API error', () => {
|
|
31
|
+
const error = {
|
|
32
|
+
error: {
|
|
33
|
+
code: 429,
|
|
34
|
+
message: 'insufficient_quota',
|
|
35
|
+
status: 'RESOURCE_EXHAUSTED',
|
|
36
|
+
details: [],
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
expect(isBlackboxQuotaExceededError(error)).toBe(true);
|
|
40
|
+
});
|
|
41
|
+
it('should not detect throttling errors as quota exceeded', () => {
|
|
42
|
+
const error = new Error('requests throttling triggered');
|
|
43
|
+
expect(isBlackboxQuotaExceededError(error)).toBe(false);
|
|
44
|
+
});
|
|
45
|
+
it('should not detect unrelated errors', () => {
|
|
46
|
+
const error = new Error('Network error');
|
|
47
|
+
expect(isBlackboxQuotaExceededError(error)).toBe(false);
|
|
48
|
+
});
|
|
49
|
+
});
|
|
50
|
+
describe('isBlackboxThrottlingError', () => {
|
|
51
|
+
it('should detect throttling error with 429 status', () => {
|
|
52
|
+
const error = { message: 'throttling', status: 429 };
|
|
53
|
+
expect(isBlackboxThrottlingError(error)).toBe(true);
|
|
54
|
+
});
|
|
55
|
+
it('should detect requests throttling triggered with 429 status', () => {
|
|
56
|
+
const error = { message: 'requests throttling triggered', status: 429 };
|
|
57
|
+
expect(isBlackboxThrottlingError(error)).toBe(true);
|
|
58
|
+
});
|
|
59
|
+
it('should detect rate limit error with 429 status', () => {
|
|
60
|
+
const error = { message: 'rate limit exceeded', status: 429 };
|
|
61
|
+
expect(isBlackboxThrottlingError(error)).toBe(true);
|
|
62
|
+
});
|
|
63
|
+
it('should detect too many requests with 429 status', () => {
|
|
64
|
+
const error = { message: 'too many requests', status: 429 };
|
|
65
|
+
expect(isBlackboxThrottlingError(error)).toBe(true);
|
|
66
|
+
});
|
|
67
|
+
it('should detect throttling in string error', () => {
|
|
68
|
+
const error = 'throttling';
|
|
69
|
+
expect(isBlackboxThrottlingError(error)).toBe(true);
|
|
70
|
+
});
|
|
71
|
+
it('should detect throttling in structured error with 429', () => {
|
|
72
|
+
const error = { message: 'requests throttling triggered', status: 429 };
|
|
73
|
+
expect(isBlackboxThrottlingError(error)).toBe(true);
|
|
74
|
+
});
|
|
75
|
+
it('should detect throttling in API error with 429', () => {
|
|
76
|
+
const error = {
|
|
77
|
+
error: {
|
|
78
|
+
code: 429,
|
|
79
|
+
message: 'throttling',
|
|
80
|
+
status: 'RESOURCE_EXHAUSTED',
|
|
81
|
+
details: [],
|
|
82
|
+
},
|
|
83
|
+
};
|
|
84
|
+
expect(isBlackboxThrottlingError(error)).toBe(true);
|
|
85
|
+
});
|
|
86
|
+
it('should not detect throttling without 429 status in structured error', () => {
|
|
87
|
+
const error = { message: 'throttling', status: 500 };
|
|
88
|
+
expect(isBlackboxThrottlingError(error)).toBe(false);
|
|
89
|
+
});
|
|
90
|
+
it('should not detect quota exceeded as throttling', () => {
|
|
91
|
+
const error = { message: 'insufficient_quota', status: 429 };
|
|
92
|
+
expect(isBlackboxThrottlingError(error)).toBe(false);
|
|
93
|
+
});
|
|
94
|
+
it('should not detect unrelated errors as throttling', () => {
|
|
95
|
+
const error = { message: 'Network error', status: 500 };
|
|
96
|
+
expect(isBlackboxThrottlingError(error)).toBe(false);
|
|
97
|
+
});
|
|
98
|
+
});
|
|
99
|
+
describe('isProQuotaExceededError', () => {
|
|
100
|
+
it('should detect Gemini Pro quota exceeded error', () => {
|
|
101
|
+
const error = new Error("Quota exceeded for quota metric 'Gemini 2.5 Pro Requests'");
|
|
102
|
+
expect(isProQuotaExceededError(error)).toBe(true);
|
|
103
|
+
});
|
|
104
|
+
it('should detect Gemini preview Pro quota exceeded error', () => {
|
|
105
|
+
const error = new Error("Quota exceeded for quota metric 'Gemini 2.5-preview Pro Requests'");
|
|
106
|
+
expect(isProQuotaExceededError(error)).toBe(true);
|
|
107
|
+
});
|
|
108
|
+
it('should not detect non-Pro quota errors', () => {
|
|
109
|
+
const error = new Error("Quota exceeded for quota metric 'Gemini 1.5 Flash Requests'");
|
|
110
|
+
expect(isProQuotaExceededError(error)).toBe(false);
|
|
111
|
+
});
|
|
112
|
+
});
|
|
113
|
+
describe('isGenericQuotaExceededError', () => {
|
|
114
|
+
it('should detect generic quota exceeded error', () => {
|
|
115
|
+
const error = new Error('Quota exceeded for quota metric');
|
|
116
|
+
expect(isGenericQuotaExceededError(error)).toBe(true);
|
|
117
|
+
});
|
|
118
|
+
it('should not detect non-quota errors', () => {
|
|
119
|
+
const error = new Error('Network error');
|
|
120
|
+
expect(isGenericQuotaExceededError(error)).toBe(false);
|
|
121
|
+
});
|
|
122
|
+
});
|
|
123
|
+
describe('type guards', () => {
|
|
124
|
+
describe('isApiError', () => {
|
|
125
|
+
it('should detect valid API error', () => {
|
|
126
|
+
const error = {
|
|
127
|
+
error: {
|
|
128
|
+
code: 429,
|
|
129
|
+
message: 'test error',
|
|
130
|
+
status: 'RESOURCE_EXHAUSTED',
|
|
131
|
+
details: [],
|
|
132
|
+
},
|
|
133
|
+
};
|
|
134
|
+
expect(isApiError(error)).toBe(true);
|
|
135
|
+
});
|
|
136
|
+
it('should not detect invalid API error', () => {
|
|
137
|
+
const error = { message: 'test error' };
|
|
138
|
+
expect(isApiError(error)).toBe(false);
|
|
139
|
+
});
|
|
140
|
+
});
|
|
141
|
+
describe('isStructuredError', () => {
|
|
142
|
+
it('should detect valid structured error', () => {
|
|
143
|
+
const error = { message: 'test error', status: 429 };
|
|
144
|
+
expect(isStructuredError(error)).toBe(true);
|
|
145
|
+
});
|
|
146
|
+
it('should not detect invalid structured error', () => {
|
|
147
|
+
const error = { code: 429 };
|
|
148
|
+
expect(isStructuredError(error)).toBe(false);
|
|
149
|
+
});
|
|
150
|
+
});
|
|
151
|
+
});
|
|
152
|
+
});
|
|
153
|
+
//# sourceMappingURL=quotaErrorDetection.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"quotaErrorDetection.test.js","sourceRoot":"","sources":["../../../src/utils/quotaErrorDetection.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,112 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Blackbox
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import type { ImageMetadata } from './types.js';
|
|
7
|
+
/**
|
|
8
|
+
* Image tokenizer for calculating image tokens based on dimensions
|
|
9
|
+
*
|
|
10
|
+
* Key rules:
|
|
11
|
+
* - 28x28 pixels = 1 token
|
|
12
|
+
* - Minimum: 4 tokens per image
|
|
13
|
+
* - Maximum: 16384 tokens per image
|
|
14
|
+
* - Additional: 2 special tokens (vision_bos + vision_eos)
|
|
15
|
+
* - Supports: PNG, JPEG, WebP, GIF, BMP, TIFF, HEIC formats
|
|
16
|
+
*/
|
|
17
|
+
export declare class ImageTokenizer {
|
|
18
|
+
/** 28x28 pixels = 1 token */
|
|
19
|
+
private static readonly PIXELS_PER_TOKEN;
|
|
20
|
+
/** Minimum tokens per image */
|
|
21
|
+
private static readonly MIN_TOKENS_PER_IMAGE;
|
|
22
|
+
/** Maximum tokens per image */
|
|
23
|
+
private static readonly MAX_TOKENS_PER_IMAGE;
|
|
24
|
+
/** Special tokens for vision markers */
|
|
25
|
+
private static readonly VISION_SPECIAL_TOKENS;
|
|
26
|
+
/**
|
|
27
|
+
* Extract image metadata from base64 data
|
|
28
|
+
*
|
|
29
|
+
* @param base64Data Base64-encoded image data (with or without data URL prefix)
|
|
30
|
+
* @param mimeType MIME type of the image
|
|
31
|
+
* @returns Promise resolving to ImageMetadata with dimensions and format info
|
|
32
|
+
*/
|
|
33
|
+
extractImageMetadata(base64Data: string, mimeType: string): Promise<ImageMetadata>;
|
|
34
|
+
/**
|
|
35
|
+
* Extract image dimensions from buffer based on format
|
|
36
|
+
*
|
|
37
|
+
* @param buffer Binary image data buffer
|
|
38
|
+
* @param mimeType MIME type to determine parsing strategy
|
|
39
|
+
* @returns Promise resolving to width and height dimensions
|
|
40
|
+
*/
|
|
41
|
+
private extractDimensions;
|
|
42
|
+
/**
|
|
43
|
+
* Extract PNG dimensions from IHDR chunk
|
|
44
|
+
* PNG signature: 89 50 4E 47 0D 0A 1A 0A
|
|
45
|
+
* Width/height at bytes 16-19 and 20-23 (big-endian)
|
|
46
|
+
*/
|
|
47
|
+
private extractPngDimensions;
|
|
48
|
+
/**
|
|
49
|
+
* Extract JPEG dimensions from SOF (Start of Frame) markers
|
|
50
|
+
* JPEG starts with FF D8, SOF markers: 0xC0-0xC3, 0xC5-0xC7, 0xC9-0xCB, 0xCD-0xCF
|
|
51
|
+
* Dimensions at offset +5 (height) and +7 (width) from SOF marker
|
|
52
|
+
*/
|
|
53
|
+
private extractJpegDimensions;
|
|
54
|
+
/**
|
|
55
|
+
* Extract WebP dimensions from RIFF container
|
|
56
|
+
* Supports VP8, VP8L, and VP8X formats
|
|
57
|
+
*/
|
|
58
|
+
private extractWebpDimensions;
|
|
59
|
+
/**
|
|
60
|
+
* Extract GIF dimensions from header
|
|
61
|
+
* Supports GIF87a and GIF89a formats
|
|
62
|
+
*/
|
|
63
|
+
private extractGifDimensions;
|
|
64
|
+
/**
|
|
65
|
+
* Calculate tokens for an image based on its metadata
|
|
66
|
+
*
|
|
67
|
+
* @param metadata Image metadata containing width, height, and format info
|
|
68
|
+
* @returns Total token count including base image tokens and special tokens
|
|
69
|
+
*/
|
|
70
|
+
calculateTokens(metadata: ImageMetadata): number;
|
|
71
|
+
/**
|
|
72
|
+
* Calculate tokens with scaling logic
|
|
73
|
+
*
|
|
74
|
+
* Steps:
|
|
75
|
+
* 1. Normalize to 28-pixel multiples
|
|
76
|
+
* 2. Scale large images down, small images up
|
|
77
|
+
* 3. Calculate tokens: pixels / 784 + 2 special tokens
|
|
78
|
+
*
|
|
79
|
+
* @param width Original image width in pixels
|
|
80
|
+
* @param height Original image height in pixels
|
|
81
|
+
* @returns Total token count for the image
|
|
82
|
+
*/
|
|
83
|
+
private calculateTokensWithScaling;
|
|
84
|
+
/**
|
|
85
|
+
* Calculate tokens for multiple images serially
|
|
86
|
+
*
|
|
87
|
+
* @param base64DataArray Array of image data with MIME type information
|
|
88
|
+
* @returns Promise resolving to array of token counts in same order as input
|
|
89
|
+
*/
|
|
90
|
+
calculateTokensBatch(base64DataArray: Array<{
|
|
91
|
+
data: string;
|
|
92
|
+
mimeType: string;
|
|
93
|
+
}>): Promise<number[]>;
|
|
94
|
+
/**
|
|
95
|
+
* Extract BMP dimensions from header
|
|
96
|
+
* BMP signature: 42 4D (BM)
|
|
97
|
+
* Width/height at bytes 18-21 and 22-25 (little-endian)
|
|
98
|
+
*/
|
|
99
|
+
private extractBmpDimensions;
|
|
100
|
+
/**
|
|
101
|
+
* Extract TIFF dimensions from IFD (Image File Directory)
|
|
102
|
+
* TIFF can be little-endian (II) or big-endian (MM)
|
|
103
|
+
* Width/height are stored in IFD entries with tags 0x0100 and 0x0101
|
|
104
|
+
*/
|
|
105
|
+
private extractTiffDimensions;
|
|
106
|
+
/**
|
|
107
|
+
* Extract HEIC dimensions from meta box
|
|
108
|
+
* HEIC is based on ISO Base Media File Format
|
|
109
|
+
* This is a simplified implementation that looks for 'ispe' (Image Spatial Extents) box
|
|
110
|
+
*/
|
|
111
|
+
private extractHeicDimensions;
|
|
112
|
+
}
|
|
@@ -0,0 +1,401 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Blackbox
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { isSupportedImageMimeType } from './supportedImageFormats.js';
|
|
7
|
+
/**
|
|
8
|
+
* Image tokenizer for calculating image tokens based on dimensions
|
|
9
|
+
*
|
|
10
|
+
* Key rules:
|
|
11
|
+
* - 28x28 pixels = 1 token
|
|
12
|
+
* - Minimum: 4 tokens per image
|
|
13
|
+
* - Maximum: 16384 tokens per image
|
|
14
|
+
* - Additional: 2 special tokens (vision_bos + vision_eos)
|
|
15
|
+
* - Supports: PNG, JPEG, WebP, GIF, BMP, TIFF, HEIC formats
|
|
16
|
+
*/
|
|
17
|
+
export class ImageTokenizer {
|
|
18
|
+
/** 28x28 pixels = 1 token */
|
|
19
|
+
static PIXELS_PER_TOKEN = 28 * 28;
|
|
20
|
+
/** Minimum tokens per image */
|
|
21
|
+
static MIN_TOKENS_PER_IMAGE = 4;
|
|
22
|
+
/** Maximum tokens per image */
|
|
23
|
+
static MAX_TOKENS_PER_IMAGE = 16384;
|
|
24
|
+
/** Special tokens for vision markers */
|
|
25
|
+
static VISION_SPECIAL_TOKENS = 2;
|
|
26
|
+
/**
|
|
27
|
+
* Extract image metadata from base64 data
|
|
28
|
+
*
|
|
29
|
+
* @param base64Data Base64-encoded image data (with or without data URL prefix)
|
|
30
|
+
* @param mimeType MIME type of the image
|
|
31
|
+
* @returns Promise resolving to ImageMetadata with dimensions and format info
|
|
32
|
+
*/
|
|
33
|
+
async extractImageMetadata(base64Data, mimeType) {
|
|
34
|
+
try {
|
|
35
|
+
// Check if the MIME type is supported
|
|
36
|
+
if (!isSupportedImageMimeType(mimeType)) {
|
|
37
|
+
console.warn(`Unsupported image format: ${mimeType}`);
|
|
38
|
+
// Return default metadata for unsupported formats
|
|
39
|
+
return {
|
|
40
|
+
width: 512,
|
|
41
|
+
height: 512,
|
|
42
|
+
mimeType,
|
|
43
|
+
dataSize: Math.floor(base64Data.length * 0.75),
|
|
44
|
+
};
|
|
45
|
+
}
|
|
46
|
+
const cleanBase64 = base64Data.replace(/^data:[^;]+;base64,/, '');
|
|
47
|
+
const buffer = Buffer.from(cleanBase64, 'base64');
|
|
48
|
+
const dimensions = await this.extractDimensions(buffer, mimeType);
|
|
49
|
+
return {
|
|
50
|
+
width: dimensions.width,
|
|
51
|
+
height: dimensions.height,
|
|
52
|
+
mimeType,
|
|
53
|
+
dataSize: buffer.length,
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
catch (error) {
|
|
57
|
+
console.warn('Failed to extract image metadata:', error);
|
|
58
|
+
// Return default metadata for fallback
|
|
59
|
+
return {
|
|
60
|
+
width: 512,
|
|
61
|
+
height: 512,
|
|
62
|
+
mimeType,
|
|
63
|
+
dataSize: Math.floor(base64Data.length * 0.75),
|
|
64
|
+
};
|
|
65
|
+
}
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* Extract image dimensions from buffer based on format
|
|
69
|
+
*
|
|
70
|
+
* @param buffer Binary image data buffer
|
|
71
|
+
* @param mimeType MIME type to determine parsing strategy
|
|
72
|
+
* @returns Promise resolving to width and height dimensions
|
|
73
|
+
*/
|
|
74
|
+
async extractDimensions(buffer, mimeType) {
|
|
75
|
+
if (mimeType.includes('png')) {
|
|
76
|
+
return this.extractPngDimensions(buffer);
|
|
77
|
+
}
|
|
78
|
+
if (mimeType.includes('jpeg') || mimeType.includes('jpg')) {
|
|
79
|
+
return this.extractJpegDimensions(buffer);
|
|
80
|
+
}
|
|
81
|
+
if (mimeType.includes('webp')) {
|
|
82
|
+
return this.extractWebpDimensions(buffer);
|
|
83
|
+
}
|
|
84
|
+
if (mimeType.includes('gif')) {
|
|
85
|
+
return this.extractGifDimensions(buffer);
|
|
86
|
+
}
|
|
87
|
+
if (mimeType.includes('bmp')) {
|
|
88
|
+
return this.extractBmpDimensions(buffer);
|
|
89
|
+
}
|
|
90
|
+
if (mimeType.includes('tiff')) {
|
|
91
|
+
return this.extractTiffDimensions(buffer);
|
|
92
|
+
}
|
|
93
|
+
if (mimeType.includes('heic')) {
|
|
94
|
+
return this.extractHeicDimensions(buffer);
|
|
95
|
+
}
|
|
96
|
+
return { width: 512, height: 512 };
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Extract PNG dimensions from IHDR chunk
|
|
100
|
+
* PNG signature: 89 50 4E 47 0D 0A 1A 0A
|
|
101
|
+
* Width/height at bytes 16-19 and 20-23 (big-endian)
|
|
102
|
+
*/
|
|
103
|
+
extractPngDimensions(buffer) {
|
|
104
|
+
if (buffer.length < 24) {
|
|
105
|
+
throw new Error('Invalid PNG: buffer too short');
|
|
106
|
+
}
|
|
107
|
+
// Verify PNG signature
|
|
108
|
+
const signature = buffer.subarray(0, 8);
|
|
109
|
+
const expectedSignature = Buffer.from([
|
|
110
|
+
0x89, 0x50, 0x4e, 0x47, 0x0d, 0x0a, 0x1a, 0x0a,
|
|
111
|
+
]);
|
|
112
|
+
if (!signature.equals(expectedSignature)) {
|
|
113
|
+
throw new Error('Invalid PNG signature');
|
|
114
|
+
}
|
|
115
|
+
const width = buffer.readUInt32BE(16);
|
|
116
|
+
const height = buffer.readUInt32BE(20);
|
|
117
|
+
return { width, height };
|
|
118
|
+
}
|
|
119
|
+
/**
|
|
120
|
+
* Extract JPEG dimensions from SOF (Start of Frame) markers
|
|
121
|
+
* JPEG starts with FF D8, SOF markers: 0xC0-0xC3, 0xC5-0xC7, 0xC9-0xCB, 0xCD-0xCF
|
|
122
|
+
* Dimensions at offset +5 (height) and +7 (width) from SOF marker
|
|
123
|
+
*/
|
|
124
|
+
extractJpegDimensions(buffer) {
|
|
125
|
+
if (buffer.length < 4 || buffer[0] !== 0xff || buffer[1] !== 0xd8) {
|
|
126
|
+
throw new Error('Invalid JPEG signature');
|
|
127
|
+
}
|
|
128
|
+
let offset = 2;
|
|
129
|
+
while (offset < buffer.length - 8) {
|
|
130
|
+
if (buffer[offset] !== 0xff) {
|
|
131
|
+
offset++;
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
134
|
+
const marker = buffer[offset + 1];
|
|
135
|
+
// SOF markers
|
|
136
|
+
if ((marker >= 0xc0 && marker <= 0xc3) ||
|
|
137
|
+
(marker >= 0xc5 && marker <= 0xc7) ||
|
|
138
|
+
(marker >= 0xc9 && marker <= 0xcb) ||
|
|
139
|
+
(marker >= 0xcd && marker <= 0xcf)) {
|
|
140
|
+
const height = buffer.readUInt16BE(offset + 5);
|
|
141
|
+
const width = buffer.readUInt16BE(offset + 7);
|
|
142
|
+
return { width, height };
|
|
143
|
+
}
|
|
144
|
+
const segmentLength = buffer.readUInt16BE(offset + 2);
|
|
145
|
+
offset += 2 + segmentLength;
|
|
146
|
+
}
|
|
147
|
+
throw new Error('Could not find JPEG dimensions');
|
|
148
|
+
}
|
|
149
|
+
/**
|
|
150
|
+
* Extract WebP dimensions from RIFF container
|
|
151
|
+
* Supports VP8, VP8L, and VP8X formats
|
|
152
|
+
*/
|
|
153
|
+
extractWebpDimensions(buffer) {
|
|
154
|
+
if (buffer.length < 30) {
|
|
155
|
+
throw new Error('Invalid WebP: too short');
|
|
156
|
+
}
|
|
157
|
+
const riffSignature = buffer.subarray(0, 4).toString('ascii');
|
|
158
|
+
const webpSignature = buffer.subarray(8, 12).toString('ascii');
|
|
159
|
+
if (riffSignature !== 'RIFF' || webpSignature !== 'WEBP') {
|
|
160
|
+
throw new Error('Invalid WebP signature');
|
|
161
|
+
}
|
|
162
|
+
const format = buffer.subarray(12, 16).toString('ascii');
|
|
163
|
+
if (format === 'VP8 ') {
|
|
164
|
+
const width = buffer.readUInt16LE(26) & 0x3fff;
|
|
165
|
+
const height = buffer.readUInt16LE(28) & 0x3fff;
|
|
166
|
+
return { width, height };
|
|
167
|
+
}
|
|
168
|
+
else if (format === 'VP8L') {
|
|
169
|
+
const bits = buffer.readUInt32LE(21);
|
|
170
|
+
const width = (bits & 0x3fff) + 1;
|
|
171
|
+
const height = ((bits >> 14) & 0x3fff) + 1;
|
|
172
|
+
return { width, height };
|
|
173
|
+
}
|
|
174
|
+
else if (format === 'VP8X') {
|
|
175
|
+
const width = (buffer.readUInt32LE(24) & 0xffffff) + 1;
|
|
176
|
+
const height = (buffer.readUInt32LE(26) & 0xffffff) + 1;
|
|
177
|
+
return { width, height };
|
|
178
|
+
}
|
|
179
|
+
throw new Error('Unsupported WebP format');
|
|
180
|
+
}
|
|
181
|
+
/**
|
|
182
|
+
* Extract GIF dimensions from header
|
|
183
|
+
* Supports GIF87a and GIF89a formats
|
|
184
|
+
*/
|
|
185
|
+
extractGifDimensions(buffer) {
|
|
186
|
+
if (buffer.length < 10) {
|
|
187
|
+
throw new Error('Invalid GIF: too short');
|
|
188
|
+
}
|
|
189
|
+
const signature = buffer.subarray(0, 6).toString('ascii');
|
|
190
|
+
if (signature !== 'GIF87a' && signature !== 'GIF89a') {
|
|
191
|
+
throw new Error('Invalid GIF signature');
|
|
192
|
+
}
|
|
193
|
+
const width = buffer.readUInt16LE(6);
|
|
194
|
+
const height = buffer.readUInt16LE(8);
|
|
195
|
+
return { width, height };
|
|
196
|
+
}
|
|
197
|
+
/**
|
|
198
|
+
* Calculate tokens for an image based on its metadata
|
|
199
|
+
*
|
|
200
|
+
* @param metadata Image metadata containing width, height, and format info
|
|
201
|
+
* @returns Total token count including base image tokens and special tokens
|
|
202
|
+
*/
|
|
203
|
+
calculateTokens(metadata) {
|
|
204
|
+
return this.calculateTokensWithScaling(metadata.width, metadata.height);
|
|
205
|
+
}
|
|
206
|
+
/**
|
|
207
|
+
* Calculate tokens with scaling logic
|
|
208
|
+
*
|
|
209
|
+
* Steps:
|
|
210
|
+
* 1. Normalize to 28-pixel multiples
|
|
211
|
+
* 2. Scale large images down, small images up
|
|
212
|
+
* 3. Calculate tokens: pixels / 784 + 2 special tokens
|
|
213
|
+
*
|
|
214
|
+
* @param width Original image width in pixels
|
|
215
|
+
* @param height Original image height in pixels
|
|
216
|
+
* @returns Total token count for the image
|
|
217
|
+
*/
|
|
218
|
+
calculateTokensWithScaling(width, height) {
|
|
219
|
+
// Normalize to 28-pixel multiples
|
|
220
|
+
let hBar = Math.round(height / 28) * 28;
|
|
221
|
+
let wBar = Math.round(width / 28) * 28;
|
|
222
|
+
// Define pixel boundaries
|
|
223
|
+
const minPixels = ImageTokenizer.MIN_TOKENS_PER_IMAGE * ImageTokenizer.PIXELS_PER_TOKEN;
|
|
224
|
+
const maxPixels = ImageTokenizer.MAX_TOKENS_PER_IMAGE * ImageTokenizer.PIXELS_PER_TOKEN;
|
|
225
|
+
// Apply scaling
|
|
226
|
+
if (hBar * wBar > maxPixels) {
|
|
227
|
+
// Scale down large images
|
|
228
|
+
const beta = Math.sqrt((height * width) / maxPixels);
|
|
229
|
+
hBar = Math.floor(height / beta / 28) * 28;
|
|
230
|
+
wBar = Math.floor(width / beta / 28) * 28;
|
|
231
|
+
}
|
|
232
|
+
else if (hBar * wBar < minPixels) {
|
|
233
|
+
// Scale up small images
|
|
234
|
+
const beta = Math.sqrt(minPixels / (height * width));
|
|
235
|
+
hBar = Math.ceil((height * beta) / 28) * 28;
|
|
236
|
+
wBar = Math.ceil((width * beta) / 28) * 28;
|
|
237
|
+
}
|
|
238
|
+
// Calculate tokens
|
|
239
|
+
const imageTokens = Math.floor((hBar * wBar) / ImageTokenizer.PIXELS_PER_TOKEN);
|
|
240
|
+
return imageTokens + ImageTokenizer.VISION_SPECIAL_TOKENS;
|
|
241
|
+
}
|
|
242
|
+
/**
|
|
243
|
+
* Calculate tokens for multiple images serially
|
|
244
|
+
*
|
|
245
|
+
* @param base64DataArray Array of image data with MIME type information
|
|
246
|
+
* @returns Promise resolving to array of token counts in same order as input
|
|
247
|
+
*/
|
|
248
|
+
async calculateTokensBatch(base64DataArray) {
|
|
249
|
+
const results = [];
|
|
250
|
+
for (const { data, mimeType } of base64DataArray) {
|
|
251
|
+
try {
|
|
252
|
+
const metadata = await this.extractImageMetadata(data, mimeType);
|
|
253
|
+
results.push(this.calculateTokens(metadata));
|
|
254
|
+
}
|
|
255
|
+
catch (error) {
|
|
256
|
+
console.warn('Error calculating tokens for image:', error);
|
|
257
|
+
// Return minimum tokens as fallback
|
|
258
|
+
results.push(ImageTokenizer.MIN_TOKENS_PER_IMAGE +
|
|
259
|
+
ImageTokenizer.VISION_SPECIAL_TOKENS);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
return results;
|
|
263
|
+
}
|
|
264
|
+
/**
|
|
265
|
+
* Extract BMP dimensions from header
|
|
266
|
+
* BMP signature: 42 4D (BM)
|
|
267
|
+
* Width/height at bytes 18-21 and 22-25 (little-endian)
|
|
268
|
+
*/
|
|
269
|
+
extractBmpDimensions(buffer) {
|
|
270
|
+
if (buffer.length < 26) {
|
|
271
|
+
throw new Error('Invalid BMP: buffer too short');
|
|
272
|
+
}
|
|
273
|
+
// Verify BMP signature
|
|
274
|
+
if (buffer[0] !== 0x42 || buffer[1] !== 0x4d) {
|
|
275
|
+
throw new Error('Invalid BMP signature');
|
|
276
|
+
}
|
|
277
|
+
const width = buffer.readUInt32LE(18);
|
|
278
|
+
const height = buffer.readUInt32LE(22);
|
|
279
|
+
return { width, height: Math.abs(height) }; // Height can be negative for top-down BMPs
|
|
280
|
+
}
|
|
281
|
+
/**
|
|
282
|
+
* Extract TIFF dimensions from IFD (Image File Directory)
|
|
283
|
+
* TIFF can be little-endian (II) or big-endian (MM)
|
|
284
|
+
* Width/height are stored in IFD entries with tags 0x0100 and 0x0101
|
|
285
|
+
*/
|
|
286
|
+
extractTiffDimensions(buffer) {
|
|
287
|
+
if (buffer.length < 8) {
|
|
288
|
+
throw new Error('Invalid TIFF: buffer too short');
|
|
289
|
+
}
|
|
290
|
+
// Check byte order
|
|
291
|
+
const byteOrder = buffer.subarray(0, 2).toString('ascii');
|
|
292
|
+
const isLittleEndian = byteOrder === 'II';
|
|
293
|
+
const isBigEndian = byteOrder === 'MM';
|
|
294
|
+
if (!isLittleEndian && !isBigEndian) {
|
|
295
|
+
throw new Error('Invalid TIFF byte order');
|
|
296
|
+
}
|
|
297
|
+
// Read magic number (should be 42)
|
|
298
|
+
const magic = isLittleEndian
|
|
299
|
+
? buffer.readUInt16LE(2)
|
|
300
|
+
: buffer.readUInt16BE(2);
|
|
301
|
+
if (magic !== 42) {
|
|
302
|
+
throw new Error('Invalid TIFF magic number');
|
|
303
|
+
}
|
|
304
|
+
// Read IFD offset
|
|
305
|
+
const ifdOffset = isLittleEndian
|
|
306
|
+
? buffer.readUInt32LE(4)
|
|
307
|
+
: buffer.readUInt32BE(4);
|
|
308
|
+
if (ifdOffset >= buffer.length) {
|
|
309
|
+
throw new Error('Invalid TIFF IFD offset');
|
|
310
|
+
}
|
|
311
|
+
// Read number of directory entries
|
|
312
|
+
const numEntries = isLittleEndian
|
|
313
|
+
? buffer.readUInt16LE(ifdOffset)
|
|
314
|
+
: buffer.readUInt16BE(ifdOffset);
|
|
315
|
+
let width = 0;
|
|
316
|
+
let height = 0;
|
|
317
|
+
// Parse IFD entries
|
|
318
|
+
for (let i = 0; i < numEntries; i++) {
|
|
319
|
+
const entryOffset = ifdOffset + 2 + i * 12;
|
|
320
|
+
if (entryOffset + 12 > buffer.length)
|
|
321
|
+
break;
|
|
322
|
+
const tag = isLittleEndian
|
|
323
|
+
? buffer.readUInt16LE(entryOffset)
|
|
324
|
+
: buffer.readUInt16BE(entryOffset);
|
|
325
|
+
const type = isLittleEndian
|
|
326
|
+
? buffer.readUInt16LE(entryOffset + 2)
|
|
327
|
+
: buffer.readUInt16BE(entryOffset + 2);
|
|
328
|
+
const value = isLittleEndian
|
|
329
|
+
? buffer.readUInt32LE(entryOffset + 8)
|
|
330
|
+
: buffer.readUInt32BE(entryOffset + 8);
|
|
331
|
+
if (tag === 0x0100) {
|
|
332
|
+
// ImageWidth
|
|
333
|
+
width = type === 3 ? value : value; // SHORT or LONG
|
|
334
|
+
}
|
|
335
|
+
else if (tag === 0x0101) {
|
|
336
|
+
// ImageLength (height)
|
|
337
|
+
height = type === 3 ? value : value; // SHORT or LONG
|
|
338
|
+
}
|
|
339
|
+
if (width > 0 && height > 0)
|
|
340
|
+
break;
|
|
341
|
+
}
|
|
342
|
+
if (width === 0 || height === 0) {
|
|
343
|
+
throw new Error('Could not find TIFF dimensions');
|
|
344
|
+
}
|
|
345
|
+
return { width, height };
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Extract HEIC dimensions from meta box
|
|
349
|
+
* HEIC is based on ISO Base Media File Format
|
|
350
|
+
* This is a simplified implementation that looks for 'ispe' (Image Spatial Extents) box
|
|
351
|
+
*/
|
|
352
|
+
extractHeicDimensions(buffer) {
|
|
353
|
+
if (buffer.length < 12) {
|
|
354
|
+
throw new Error('Invalid HEIC: buffer too short');
|
|
355
|
+
}
|
|
356
|
+
// Check for ftyp box with HEIC brand
|
|
357
|
+
const ftypBox = buffer.subarray(4, 8).toString('ascii');
|
|
358
|
+
if (ftypBox !== 'ftyp') {
|
|
359
|
+
throw new Error('Invalid HEIC: missing ftyp box');
|
|
360
|
+
}
|
|
361
|
+
const brand = buffer.subarray(8, 12).toString('ascii');
|
|
362
|
+
if (!['heic', 'heix', 'hevc', 'hevx'].includes(brand)) {
|
|
363
|
+
throw new Error('Invalid HEIC brand');
|
|
364
|
+
}
|
|
365
|
+
// Look for meta box and then ispe box
|
|
366
|
+
let offset = 0;
|
|
367
|
+
while (offset < buffer.length - 8) {
|
|
368
|
+
const boxSize = buffer.readUInt32BE(offset);
|
|
369
|
+
const boxType = buffer.subarray(offset + 4, offset + 8).toString('ascii');
|
|
370
|
+
if (boxType === 'meta') {
|
|
371
|
+
// Look for ispe box inside meta box
|
|
372
|
+
const metaOffset = offset + 8;
|
|
373
|
+
let innerOffset = metaOffset + 4; // Skip version and flags
|
|
374
|
+
while (innerOffset < offset + boxSize - 8) {
|
|
375
|
+
const innerBoxSize = buffer.readUInt32BE(innerOffset);
|
|
376
|
+
const innerBoxType = buffer
|
|
377
|
+
.subarray(innerOffset + 4, innerOffset + 8)
|
|
378
|
+
.toString('ascii');
|
|
379
|
+
if (innerBoxType === 'ispe') {
|
|
380
|
+
// Found Image Spatial Extents box
|
|
381
|
+
if (innerOffset + 20 <= buffer.length) {
|
|
382
|
+
const width = buffer.readUInt32BE(innerOffset + 12);
|
|
383
|
+
const height = buffer.readUInt32BE(innerOffset + 16);
|
|
384
|
+
return { width, height };
|
|
385
|
+
}
|
|
386
|
+
}
|
|
387
|
+
if (innerBoxSize === 0)
|
|
388
|
+
break;
|
|
389
|
+
innerOffset += innerBoxSize;
|
|
390
|
+
}
|
|
391
|
+
}
|
|
392
|
+
if (boxSize === 0)
|
|
393
|
+
break;
|
|
394
|
+
offset += boxSize;
|
|
395
|
+
}
|
|
396
|
+
// Fallback: return default dimensions if we can't parse the structure
|
|
397
|
+
console.warn('Could not extract HEIC dimensions, using default');
|
|
398
|
+
return { width: 512, height: 512 };
|
|
399
|
+
}
|
|
400
|
+
}
|
|
401
|
+
//# sourceMappingURL=imageTokenizer.js.map
|