@hibanacloud/core 0.3.15
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/dist/.last_build +0 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.js +20 -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/code_assist/codeAssist.d.ts +12 -0
- package/dist/src/code_assist/codeAssist.js +31 -0
- package/dist/src/code_assist/codeAssist.js.map +1 -0
- package/dist/src/code_assist/converter.d.ts +74 -0
- package/dist/src/code_assist/converter.js +160 -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 +372 -0
- package/dist/src/code_assist/converter.test.js.map +1 -0
- package/dist/src/code_assist/oauth-credential-storage.d.ts +25 -0
- package/dist/src/code_assist/oauth-credential-storage.js +109 -0
- package/dist/src/code_assist/oauth-credential-storage.js.map +1 -0
- package/dist/src/code_assist/oauth-credential-storage.test.d.ts +6 -0
- package/dist/src/code_assist/oauth-credential-storage.test.js +136 -0
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -0
- package/dist/src/code_assist/oauth2.d.ts +22 -0
- package/dist/src/code_assist/oauth2.js +431 -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 +818 -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 +148 -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 +159 -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 +163 -0
- package/dist/src/code_assist/types.js +46 -0
- package/dist/src/code_assist/types.js.map +1 -0
- package/dist/src/config/config.d.ts +431 -0
- package/dist/src/config/config.js +869 -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 +896 -0
- package/dist/src/config/config.test.js.map +1 -0
- package/dist/src/config/constants.d.ts +11 -0
- package/dist/src/config/constants.js +16 -0
- package/dist/src/config/constants.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 +28 -0
- package/dist/src/config/models.js +42 -0
- package/dist/src/config/models.js.map +1 -0
- package/dist/src/config/models.test.d.ts +6 -0
- package/dist/src/config/models.test.js +55 -0
- package/dist/src/config/models.test.js.map +1 -0
- package/dist/src/config/storage.d.ts +34 -0
- package/dist/src/config/storage.js +95 -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 +295 -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/baseLlmClient.d.ts +49 -0
- package/dist/src/core/baseLlmClient.js +104 -0
- package/dist/src/core/baseLlmClient.js.map +1 -0
- package/dist/src/core/baseLlmClient.test.d.ts +6 -0
- package/dist/src/core/baseLlmClient.test.js +323 -0
- package/dist/src/core/baseLlmClient.test.js.map +1 -0
- package/dist/src/core/client.d.ts +56 -0
- package/dist/src/core/client.js +522 -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 +1829 -0
- package/dist/src/core/client.test.js.map +1 -0
- package/dist/src/core/contentGenerator.d.ts +52 -0
- package/dist/src/core/contentGenerator.js +106 -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 +77 -0
- package/dist/src/core/contentGenerator.test.js.map +1 -0
- package/dist/src/core/coreToolScheduler.d.ts +134 -0
- package/dist/src/core/coreToolScheduler.js +774 -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 +1802 -0
- package/dist/src/core/coreToolScheduler.test.js.map +1 -0
- package/dist/src/core/geminiChat.d.ts +124 -0
- package/dist/src/core/geminiChat.js +518 -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 +1149 -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 +67 -0
- package/dist/src/core/logger.js +361 -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 +534 -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 +94 -0
- package/dist/src/core/loggingContentGenerator.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +16 -0
- package/dist/src/core/nonInteractiveToolExecutor.js +29 -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 +294 -0
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/constants.d.ts +7 -0
- package/dist/src/core/openaiContentGenerator/constants.js +8 -0
- package/dist/src/core/openaiContentGenerator/constants.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/converter.d.ts +108 -0
- package/dist/src/core/openaiContentGenerator/converter.js +851 -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 +108 -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 +49 -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 +265 -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 +1028 -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/anthropic.d.ts +14 -0
- package/dist/src/core/openaiContentGenerator/provider/anthropic.js +28 -0
- package/dist/src/core/openaiContentGenerator/provider/anthropic.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/anthropic.test.d.ts +1 -0
- package/dist/src/core/openaiContentGenerator/provider/anthropic.test.js +138 -0
- package/dist/src/core/openaiContentGenerator/provider/anthropic.test.js.map +1 -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 +70 -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 +151 -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 +48 -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 +7 -0
- package/dist/src/core/openaiContentGenerator/provider/index.js +7 -0
- package/dist/src/core/openaiContentGenerator/provider/index.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/modelscope.d.ts +17 -0
- package/dist/src/core/openaiContentGenerator/provider/modelscope.js +25 -0
- package/dist/src/core/openaiContentGenerator/provider/modelscope.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/modelscope.test.d.ts +6 -0
- package/dist/src/core/openaiContentGenerator/provider/modelscope.test.js +66 -0
- package/dist/src/core/openaiContentGenerator/provider/modelscope.test.js.map +1 -0
- package/dist/src/core/openaiContentGenerator/provider/openrouter.d.ts +10 -0
- package/dist/src/core/openaiContentGenerator/provider/openrouter.js +33 -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 +175 -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 +145 -0
- package/dist/src/core/openaiContentGenerator/streamingToolCallParser.js +381 -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 +36 -0
- package/dist/src/core/openaiContentGenerator/telemetryService.js +150 -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 +73 -0
- package/dist/src/core/prompts.js +813 -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 +488 -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 +194 -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 +304 -0
- package/dist/src/core/tokenLimits.test.js.map +1 -0
- package/dist/src/core/turn.d.ts +152 -0
- package/dist/src/core/turn.js +187 -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 +628 -0
- package/dist/src/core/turn.test.js.map +1 -0
- package/dist/src/fallback/handler.d.ts +7 -0
- package/dist/src/fallback/handler.js +97 -0
- package/dist/src/fallback/handler.js.map +1 -0
- package/dist/src/fallback/handler.test.d.ts +6 -0
- package/dist/src/fallback/handler.test.js +130 -0
- package/dist/src/fallback/handler.test.js.map +1 -0
- package/dist/src/fallback/types.d.ts +14 -0
- package/dist/src/fallback/types.js +7 -0
- package/dist/src/fallback/types.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 +9 -0
- package/dist/src/ide/constants.js +10 -0
- package/dist/src/ide/constants.js.map +1 -0
- package/dist/src/ide/detect-ide.d.ts +56 -0
- package/dist/src/ide/detect-ide.js +68 -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 +113 -0
- package/dist/src/ide/detect-ide.test.js.map +1 -0
- package/dist/src/ide/ide-client.d.ts +110 -0
- package/dist/src/ide/ide-client.js +651 -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 +390 -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 +112 -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 +134 -0
- package/dist/src/ide/ide-installer.test.js.map +1 -0
- package/dist/src/ide/ideContext.d.ts +44 -0
- package/dist/src/ide/ideContext.js +101 -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 +393 -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 +171 -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/ide/types.d.ts +486 -0
- package/dist/src/ide/types.js +138 -0
- package/dist/src/ide/types.js.map +1 -0
- package/dist/src/index.d.ts +99 -0
- package/dist/src/index.js +112 -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 +150 -0
- package/dist/src/mcp/oauth-provider.js +613 -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 +847 -0
- package/dist/src/mcp/oauth-provider.test.js.map +1 -0
- package/dist/src/mcp/oauth-token-storage.d.ts +65 -0
- package/dist/src/mcp/oauth-token-storage.js +180 -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 +299 -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 +236 -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/sa-impersonation-provider.d.ts +33 -0
- package/dist/src/mcp/sa-impersonation-provider.js +130 -0
- package/dist/src/mcp/sa-impersonation-provider.js.map +1 -0
- package/dist/src/mcp/sa-impersonation-provider.test.d.ts +6 -0
- package/dist/src/mcp/sa-impersonation-provider.test.js +117 -0
- package/dist/src/mcp/sa-impersonation-provider.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/file-token-storage.d.ts +24 -0
- package/dist/src/mcp/token-storage/file-token-storage.js +144 -0
- package/dist/src/mcp/token-storage/file-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/file-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/file-token-storage.test.js +235 -0
- package/dist/src/mcp/token-storage/file-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.d.ts +23 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.js +78 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +193 -0
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/index.d.ts +11 -0
- package/dist/src/mcp/token-storage/index.js +12 -0
- package/dist/src/mcp/token-storage/index.js.map +1 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.d.ts +31 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js +190 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js.map +1 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.d.ts +6 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js +254 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/types.d.ts +38 -0
- package/dist/src/mcp/token-storage/types.js +11 -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/oauth/callbackServer.d.ts +15 -0
- package/dist/src/oauth/callbackServer.js +89 -0
- package/dist/src/oauth/callbackServer.js.map +1 -0
- package/dist/src/oauth/oauthClient.d.ts +57 -0
- package/dist/src/oauth/oauthClient.js +233 -0
- package/dist/src/oauth/oauthClient.js.map +1 -0
- package/dist/src/oauth/pkce.d.ts +25 -0
- package/dist/src/oauth/pkce.js +45 -0
- package/dist/src/oauth/pkce.js.map +1 -0
- package/dist/src/oauth/tokenManager.d.ts +37 -0
- package/dist/src/oauth/tokenManager.js +110 -0
- package/dist/src/oauth/tokenManager.js.map +1 -0
- package/dist/src/output/json-formatter.d.ts +11 -0
- package/dist/src/output/json-formatter.js +30 -0
- package/dist/src/output/json-formatter.js.map +1 -0
- package/dist/src/output/json-formatter.test.d.ts +6 -0
- package/dist/src/output/json-formatter.test.js +266 -0
- package/dist/src/output/json-formatter.test.js.map +1 -0
- package/dist/src/output/types.d.ts +25 -0
- package/dist/src/output/types.js +17 -0
- package/dist/src/output/types.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/qwen/qwenContentGenerator.d.ts +70 -0
- package/dist/src/qwen/qwenContentGenerator.js +180 -0
- package/dist/src/qwen/qwenContentGenerator.js.map +1 -0
- package/dist/src/qwen/qwenContentGenerator.test.d.ts +6 -0
- package/dist/src/qwen/qwenContentGenerator.test.js +1178 -0
- package/dist/src/qwen/qwenContentGenerator.test.js.map +1 -0
- package/dist/src/qwen/qwenOAuth2.d.ts +194 -0
- package/dist/src/qwen/qwenOAuth2.js +594 -0
- package/dist/src/qwen/qwenOAuth2.js.map +1 -0
- package/dist/src/qwen/qwenOAuth2.test.d.ts +6 -0
- package/dist/src/qwen/qwenOAuth2.test.js +1724 -0
- package/dist/src/qwen/qwenOAuth2.test.js.map +1 -0
- package/dist/src/qwen/sharedTokenManager.d.ts +196 -0
- package/dist/src/qwen/sharedTokenManager.js +647 -0
- package/dist/src/qwen/sharedTokenManager.js.map +1 -0
- package/dist/src/qwen/sharedTokenManager.test.d.ts +7 -0
- package/dist/src/qwen/sharedTokenManager.test.js +662 -0
- package/dist/src/qwen/sharedTokenManager.test.js.map +1 -0
- package/dist/src/services/chatCompressionService.d.ts +32 -0
- package/dist/src/services/chatCompressionService.js +180 -0
- package/dist/src/services/chatCompressionService.js.map +1 -0
- package/dist/src/services/chatCompressionService.test.d.ts +6 -0
- package/dist/src/services/chatCompressionService.test.js +292 -0
- package/dist/src/services/chatCompressionService.test.js.map +1 -0
- package/dist/src/services/chatRecordingService.d.ts +144 -0
- package/dist/src/services/chatRecordingService.js +330 -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 +332 -0
- package/dist/src/services/chatRecordingService.test.js.map +1 -0
- package/dist/src/services/fileDiscoveryService.d.ts +45 -0
- package/dist/src/services/fileDiscoveryService.js +104 -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 +40 -0
- package/dist/src/services/fileSystemService.js +29 -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 +22 -0
- package/dist/src/services/gitService.js +98 -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 +187 -0
- package/dist/src/services/gitService.test.js.map +1 -0
- package/dist/src/services/loopDetectionService.d.ts +103 -0
- package/dist/src/services/loopDetectionService.js +379 -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 +588 -0
- package/dist/src/services/loopDetectionService.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.d.ts +102 -0
- package/dist/src/services/shellExecutionService.js +522 -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 +655 -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 +95 -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 +596 -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 +162 -0
- package/dist/src/subagents/subagent.js +677 -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 +477 -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/clearcut-logger/clearcut-logger.d.ts +137 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +915 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +18 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +594 -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 +115 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +291 -0
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -0
- package/dist/src/telemetry/config.d.ts +31 -0
- package/dist/src/telemetry/config.js +76 -0
- package/dist/src/telemetry/config.js.map +1 -0
- package/dist/src/telemetry/config.test.d.ts +6 -0
- package/dist/src/telemetry/config.test.js +124 -0
- package/dist/src/telemetry/config.test.js.map +1 -0
- package/dist/src/telemetry/constants.d.ts +36 -0
- package/dist/src/telemetry/constants.js +38 -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 +25 -0
- package/dist/src/telemetry/index.js +31 -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 +37 -0
- package/dist/src/telemetry/loggers.js +651 -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 +978 -0
- package/dist/src/telemetry/loggers.test.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +320 -0
- package/dist/src/telemetry/metrics.js +532 -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 +744 -0
- package/dist/src/telemetry/metrics.test.js.map +1 -0
- package/dist/src/telemetry/qwen-logger/event-types.d.ts +88 -0
- package/dist/src/telemetry/qwen-logger/event-types.js +2 -0
- package/dist/src/telemetry/qwen-logger/event-types.js.map +1 -0
- package/dist/src/telemetry/qwen-logger/qwen-logger.d.ts +91 -0
- package/dist/src/telemetry/qwen-logger/qwen-logger.js +685 -0
- package/dist/src/telemetry/qwen-logger/qwen-logger.js.map +1 -0
- package/dist/src/telemetry/qwen-logger/qwen-logger.test.d.ts +6 -0
- package/dist/src/telemetry/qwen-logger/qwen-logger.test.js +317 -0
- package/dist/src/telemetry/qwen-logger/qwen-logger.test.js.map +1 -0
- package/dist/src/telemetry/sdk.d.ts +9 -0
- package/dist/src/telemetry/sdk.js +164 -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 +116 -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 +327 -0
- package/dist/src/telemetry/types.js +558 -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 +152 -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 +625 -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/index.d.ts +6 -0
- package/dist/src/test-utils/index.js +7 -0
- package/dist/src/test-utils/index.js.map +1 -0
- package/dist/src/test-utils/mock-tool.d.ts +66 -0
- package/dist/src/test-utils/mock-tool.js +121 -0
- package/dist/src/test-utils/mock-tool.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/tools/diffOptions.d.ts +9 -0
- package/dist/src/tools/diffOptions.js +46 -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 +155 -0
- package/dist/src/tools/diffOptions.test.js.map +1 -0
- package/dist/src/tools/edit.d.ts +55 -0
- package/dist/src/tools/edit.js +421 -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 +684 -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 +132 -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 +178 -0
- package/dist/src/tools/exitPlanMode.test.js.map +1 -0
- package/dist/src/tools/glob.d.ts +44 -0
- package/dist/src/tools/glob.js +190 -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 +442 -0
- package/dist/src/tools/glob.test.js.map +1 -0
- package/dist/src/tools/grep.d.ts +44 -0
- package/dist/src/tools/grep.js +425 -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 +360 -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 +215 -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 +249 -0
- package/dist/src/tools/ls.test.js.map +1 -0
- package/dist/src/tools/mcp-client-manager.d.ts +40 -0
- package/dist/src/tools/mcp-client-manager.js +83 -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 +58 -0
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -0
- package/dist/src/tools/mcp-client.d.ts +189 -0
- package/dist/src/tools/mcp-client.js +957 -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 +309 -0
- package/dist/src/tools/mcp-client.test.js.map +1 -0
- package/dist/src/tools/mcp-tool.d.ts +24 -0
- package/dist/src/tools/mcp-tool.js +268 -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 +714 -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 +396 -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 +419 -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 +124 -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 +339 -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 +391 -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 +566 -0
- package/dist/src/tools/read-many-files.test.js.map +1 -0
- package/dist/src/tools/ripGrep.d.ts +44 -0
- package/dist/src/tools/ripGrep.js +233 -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 +529 -0
- package/dist/src/tools/ripGrep.test.js.map +1 -0
- package/dist/src/tools/shell.d.ts +33 -0
- package/dist/src/tools/shell.js +388 -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 +566 -0
- package/dist/src/tools/shell.test.js.map +1 -0
- package/dist/src/tools/smart-edit.d.ts +91 -0
- package/dist/src/tools/smart-edit.js +703 -0
- package/dist/src/tools/smart-edit.js.map +1 -0
- package/dist/src/tools/smart-edit.test.d.ts +6 -0
- package/dist/src/tools/smart-edit.test.js +542 -0
- package/dist/src/tools/smart-edit.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 +407 -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 +234 -0
- package/dist/src/tools/todoWrite.test.js.map +1 -0
- package/dist/src/tools/tool-error.d.ts +45 -0
- package/dist/src/tools/tool-error.js +61 -0
- package/dist/src/tools/tool-error.js.map +1 -0
- package/dist/src/tools/tool-names.d.ts +56 -0
- package/dist/src/tools/tool-names.js +62 -0
- package/dist/src/tools/tool-names.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +87 -0
- package/dist/src/tools/tool-registry.js +370 -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 +327 -0
- package/dist/src/tools/tools.js +258 -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 +163 -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/base-provider.d.ts +31 -0
- package/dist/src/tools/web-search/base-provider.js +34 -0
- package/dist/src/tools/web-search/base-provider.js.map +1 -0
- package/dist/src/tools/web-search/index.d.ts +24 -0
- package/dist/src/tools/web-search/index.js +245 -0
- package/dist/src/tools/web-search/index.js.map +1 -0
- package/dist/src/tools/web-search/index.test.d.ts +6 -0
- package/dist/src/tools/web-search/index.test.js +237 -0
- package/dist/src/tools/web-search/index.test.js.map +1 -0
- package/dist/src/tools/web-search/providers/dashscope-provider.d.ts +23 -0
- package/dist/src/tools/web-search/providers/dashscope-provider.js +120 -0
- package/dist/src/tools/web-search/providers/dashscope-provider.js.map +1 -0
- package/dist/src/tools/web-search/providers/google-provider.d.ts +17 -0
- package/dist/src/tools/web-search/providers/google-provider.js +55 -0
- package/dist/src/tools/web-search/providers/google-provider.js.map +1 -0
- package/dist/src/tools/web-search/providers/tavily-provider.d.ts +17 -0
- package/dist/src/tools/web-search/providers/tavily-provider.js +54 -0
- package/dist/src/tools/web-search/providers/tavily-provider.js.map +1 -0
- package/dist/src/tools/web-search/types.d.ts +138 -0
- package/dist/src/tools/web-search/types.js +7 -0
- package/dist/src/tools/web-search/types.js.map +1 -0
- package/dist/src/tools/web-search/utils.d.ts +28 -0
- package/dist/src/tools/web-search/utils.js +35 -0
- package/dist/src/tools/web-search/utils.js.map +1 -0
- package/dist/src/tools/write-file.d.ts +52 -0
- package/dist/src/tools/write-file.js +293 -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 +516 -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 +95 -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/editHelper.d.ts +53 -0
- package/dist/src/utils/editHelper.js +359 -0
- package/dist/src/utils/editHelper.js.map +1 -0
- package/dist/src/utils/editHelper.test.d.ts +6 -0
- package/dist/src/utils/editHelper.test.js +93 -0
- package/dist/src/utils/editHelper.test.js.map +1 -0
- package/dist/src/utils/editor.d.ts +28 -0
- package/dist/src/utils/editor.js +177 -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 +437 -0
- package/dist/src/utils/editor.test.js.map +1 -0
- package/dist/src/utils/environmentContext.d.ts +22 -0
- package/dist/src/utils/environmentContext.js +108 -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 +219 -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 +39 -0
- package/dist/src/utils/errors.js +96 -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 +69 -0
- package/dist/src/utils/fileUtils.js +426 -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 +685 -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.test.d.ts +6 -0
- package/dist/src/utils/flashFallback.test.js +122 -0
- package/dist/src/utils/flashFallback.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 +16 -0
- package/dist/src/utils/gitIgnoreParser.js +152 -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 +185 -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/llm-edit-fixer.d.ts +26 -0
- package/dist/src/utils/llm-edit-fixer.js +131 -0
- package/dist/src/utils/llm-edit-fixer.js.map +1 -0
- package/dist/src/utils/llm-edit-fixer.test.d.ts +6 -0
- package/dist/src/utils/llm-edit-fixer.test.js +186 -0
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +16 -0
- package/dist/src/utils/memoryDiscovery.js +272 -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 +244 -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 +284 -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 +587 -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 +97 -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 +181 -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 +138 -0
- package/dist/src/utils/openaiLogger.js.map +1 -0
- package/dist/src/utils/openaiLogger.test.d.ts +6 -0
- package/dist/src/utils/openaiLogger.test.js +304 -0
- package/dist/src/utils/openaiLogger.test.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 +365 -0
- package/dist/src/utils/pathReader.test.js.map +1 -0
- package/dist/src/utils/paths.d.ts +93 -0
- package/dist/src/utils/paths.js +229 -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 +438 -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/promptIdContext.d.ts +7 -0
- package/dist/src/utils/promptIdContext.js +8 -0
- package/dist/src/utils/promptIdContext.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/qwenIgnoreParser.d.ts +18 -0
- package/dist/src/utils/qwenIgnoreParser.js +69 -0
- package/dist/src/utils/qwenIgnoreParser.js.map +1 -0
- package/dist/src/utils/qwenIgnoreParser.test.d.ts +6 -0
- package/dist/src/utils/qwenIgnoreParser.test.js +50 -0
- package/dist/src/utils/qwenIgnoreParser.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 +32 -0
- package/dist/src/utils/retry.js +303 -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 +474 -0
- package/dist/src/utils/retry.test.js.map +1 -0
- package/dist/src/utils/ripgrepUtils.d.ts +61 -0
- package/dist/src/utils/ripgrepUtils.js +230 -0
- package/dist/src/utils/ripgrepUtils.js.map +1 -0
- package/dist/src/utils/ripgrepUtils.test.d.ts +6 -0
- package/dist/src/utils/ripgrepUtils.test.js +101 -0
- package/dist/src/utils/ripgrepUtils.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 +67 -0
- package/dist/src/utils/schemaValidator.js.map +1 -0
- package/dist/src/utils/schemaValidator.test.d.ts +6 -0
- package/dist/src/utils/schemaValidator.test.js +113 -0
- package/dist/src/utils/schemaValidator.test.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 +152 -0
- package/dist/src/utils/shell-utils.js +467 -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 +351 -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 +120 -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 +135 -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/terminalSerializer.d.ts +25 -0
- package/dist/src/utils/terminalSerializer.js +432 -0
- package/dist/src/utils/terminalSerializer.js.map +1 -0
- package/dist/src/utils/terminalSerializer.test.d.ts +6 -0
- package/dist/src/utils/terminalSerializer.test.js +176 -0
- package/dist/src/utils/terminalSerializer.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 +18 -0
- package/dist/src/utils/textUtils.js +42 -0
- package/dist/src/utils/textUtils.js.map +1 -0
- package/dist/src/utils/textUtils.test.d.ts +6 -0
- package/dist/src/utils/textUtils.test.js +59 -0
- package/dist/src/utils/textUtils.test.js.map +1 -0
- package/dist/src/utils/thoughtUtils.d.ts +21 -0
- package/dist/src/utils/thoughtUtils.js +39 -0
- package/dist/src/utils/thoughtUtils.js.map +1 -0
- package/dist/src/utils/thoughtUtils.test.d.ts +6 -0
- package/dist/src/utils/thoughtUtils.test.js +78 -0
- package/dist/src/utils/thoughtUtils.test.js.map +1 -0
- package/dist/src/utils/tool-utils.d.ts +22 -0
- package/dist/src/utils/tool-utils.js +121 -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 +100 -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 +106 -0
- package/scripts/postinstall.js +100 -0
- package/vendor/ripgrep/COPYING +3 -0
- package/vendor/ripgrep/arm64-darwin/rg +0 -0
- package/vendor/ripgrep/arm64-linux/rg +0 -0
- package/vendor/ripgrep/x64-darwin/rg +0 -0
- package/vendor/ripgrep/x64-linux/rg +0 -0
- package/vendor/ripgrep/x64-win32/rg.exe +0 -0
|
@@ -0,0 +1,647 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Qwen
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import path from 'node:path';
|
|
7
|
+
import { promises as fs, unlinkSync } from 'node:fs';
|
|
8
|
+
import * as os from 'os';
|
|
9
|
+
import { randomUUID } from 'node:crypto';
|
|
10
|
+
import { isErrorResponse, CredentialsClearRequiredError, } from './qwenOAuth2.js';
|
|
11
|
+
// File System Configuration
|
|
12
|
+
const QWEN_DIR = '.qwen';
|
|
13
|
+
const QWEN_CREDENTIAL_FILENAME = 'oauth_creds.json';
|
|
14
|
+
const QWEN_LOCK_FILENAME = 'oauth_creds.lock';
|
|
15
|
+
// Token and Cache Configuration
|
|
16
|
+
const TOKEN_REFRESH_BUFFER_MS = 30 * 1000; // 30 seconds
|
|
17
|
+
const LOCK_TIMEOUT_MS = 10000; // 10 seconds lock timeout
|
|
18
|
+
const CACHE_CHECK_INTERVAL_MS = 5000; // 5 seconds cache check interval (increased from 1 second)
|
|
19
|
+
const DEFAULT_LOCK_CONFIG = {
|
|
20
|
+
maxAttempts: 20, // Reduced from 50 to prevent excessive waiting
|
|
21
|
+
attemptInterval: 100, // Reduced from 200ms to check more frequently
|
|
22
|
+
maxInterval: 2000, // Maximum interval for exponential backoff
|
|
23
|
+
};
|
|
24
|
+
/**
|
|
25
|
+
* Token manager error types for better error classification
|
|
26
|
+
*/
|
|
27
|
+
export var TokenError;
|
|
28
|
+
(function (TokenError) {
|
|
29
|
+
TokenError["REFRESH_FAILED"] = "REFRESH_FAILED";
|
|
30
|
+
TokenError["NO_REFRESH_TOKEN"] = "NO_REFRESH_TOKEN";
|
|
31
|
+
TokenError["LOCK_TIMEOUT"] = "LOCK_TIMEOUT";
|
|
32
|
+
TokenError["FILE_ACCESS_ERROR"] = "FILE_ACCESS_ERROR";
|
|
33
|
+
TokenError["NETWORK_ERROR"] = "NETWORK_ERROR";
|
|
34
|
+
})(TokenError || (TokenError = {}));
|
|
35
|
+
/**
|
|
36
|
+
* Custom error class for token manager operations
|
|
37
|
+
*/
|
|
38
|
+
export class TokenManagerError extends Error {
|
|
39
|
+
type;
|
|
40
|
+
originalError;
|
|
41
|
+
constructor(type, message, originalError) {
|
|
42
|
+
super(message);
|
|
43
|
+
this.type = type;
|
|
44
|
+
this.originalError = originalError;
|
|
45
|
+
this.name = 'TokenManagerError';
|
|
46
|
+
}
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* Validates that the given data is a valid QwenCredentials object
|
|
50
|
+
*
|
|
51
|
+
* @param data - The data to validate
|
|
52
|
+
* @returns The validated credentials object
|
|
53
|
+
* @throws Error if the data is invalid
|
|
54
|
+
*/
|
|
55
|
+
function validateCredentials(data) {
|
|
56
|
+
if (!data || typeof data !== 'object') {
|
|
57
|
+
throw new Error('Invalid credentials format');
|
|
58
|
+
}
|
|
59
|
+
const creds = data;
|
|
60
|
+
const requiredFields = [
|
|
61
|
+
'access_token',
|
|
62
|
+
'refresh_token',
|
|
63
|
+
'token_type',
|
|
64
|
+
];
|
|
65
|
+
// Check required string fields
|
|
66
|
+
for (const field of requiredFields) {
|
|
67
|
+
if (!creds[field] || typeof creds[field] !== 'string') {
|
|
68
|
+
throw new Error(`Invalid credentials: missing ${field}`);
|
|
69
|
+
}
|
|
70
|
+
}
|
|
71
|
+
// Check expiry_date
|
|
72
|
+
if (!creds.expiry_date || typeof creds.expiry_date !== 'number') {
|
|
73
|
+
throw new Error('Invalid credentials: missing expiry_date');
|
|
74
|
+
}
|
|
75
|
+
return creds;
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Manages OAuth tokens across multiple processes using file-based caching and locking
|
|
79
|
+
*/
|
|
80
|
+
export class SharedTokenManager {
|
|
81
|
+
static instance = null;
|
|
82
|
+
/**
|
|
83
|
+
* In-memory cache for credentials and file state tracking
|
|
84
|
+
*/
|
|
85
|
+
memoryCache = {
|
|
86
|
+
credentials: null,
|
|
87
|
+
fileModTime: 0,
|
|
88
|
+
lastCheck: 0,
|
|
89
|
+
};
|
|
90
|
+
/**
|
|
91
|
+
* Promise tracking any ongoing token refresh operation
|
|
92
|
+
*/
|
|
93
|
+
refreshPromise = null;
|
|
94
|
+
/**
|
|
95
|
+
* Promise tracking any ongoing file check operation to prevent concurrent checks
|
|
96
|
+
*/
|
|
97
|
+
checkPromise = null;
|
|
98
|
+
/**
|
|
99
|
+
* Whether cleanup handlers have been registered
|
|
100
|
+
*/
|
|
101
|
+
cleanupHandlersRegistered = false;
|
|
102
|
+
/**
|
|
103
|
+
* Reference to cleanup functions for proper removal
|
|
104
|
+
*/
|
|
105
|
+
cleanupFunction = null;
|
|
106
|
+
/**
|
|
107
|
+
* Lock configuration for testing purposes
|
|
108
|
+
*/
|
|
109
|
+
lockConfig = DEFAULT_LOCK_CONFIG;
|
|
110
|
+
/**
|
|
111
|
+
* Private constructor for singleton pattern
|
|
112
|
+
*/
|
|
113
|
+
constructor() {
|
|
114
|
+
this.registerCleanupHandlers();
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Get the singleton instance
|
|
118
|
+
* @returns The shared token manager instance
|
|
119
|
+
*/
|
|
120
|
+
static getInstance() {
|
|
121
|
+
if (!SharedTokenManager.instance) {
|
|
122
|
+
SharedTokenManager.instance = new SharedTokenManager();
|
|
123
|
+
}
|
|
124
|
+
return SharedTokenManager.instance;
|
|
125
|
+
}
|
|
126
|
+
/**
|
|
127
|
+
* Set up handlers to clean up lock files when the process exits
|
|
128
|
+
*/
|
|
129
|
+
registerCleanupHandlers() {
|
|
130
|
+
if (this.cleanupHandlersRegistered) {
|
|
131
|
+
return;
|
|
132
|
+
}
|
|
133
|
+
this.cleanupFunction = () => {
|
|
134
|
+
try {
|
|
135
|
+
const lockPath = this.getLockFilePath();
|
|
136
|
+
// Use synchronous unlink for process exit handlers
|
|
137
|
+
unlinkSync(lockPath);
|
|
138
|
+
}
|
|
139
|
+
catch (_error) {
|
|
140
|
+
// Ignore cleanup errors - lock file might not exist or already be cleaned up
|
|
141
|
+
}
|
|
142
|
+
};
|
|
143
|
+
process.on('exit', this.cleanupFunction);
|
|
144
|
+
process.on('SIGINT', this.cleanupFunction);
|
|
145
|
+
process.on('SIGTERM', this.cleanupFunction);
|
|
146
|
+
process.on('uncaughtException', this.cleanupFunction);
|
|
147
|
+
process.on('unhandledRejection', this.cleanupFunction);
|
|
148
|
+
this.cleanupHandlersRegistered = true;
|
|
149
|
+
}
|
|
150
|
+
/**
|
|
151
|
+
* Get valid OAuth credentials, refreshing them if necessary
|
|
152
|
+
*
|
|
153
|
+
* @param qwenClient - The OAuth2 client instance
|
|
154
|
+
* @param forceRefresh - If true, refresh token even if current one is still valid
|
|
155
|
+
* @returns Promise resolving to valid credentials
|
|
156
|
+
* @throws TokenManagerError if unable to obtain valid credentials
|
|
157
|
+
*/
|
|
158
|
+
async getValidCredentials(qwenClient, forceRefresh = false) {
|
|
159
|
+
try {
|
|
160
|
+
// Check if credentials file has been updated by other sessions
|
|
161
|
+
await this.checkAndReloadIfNeeded(qwenClient);
|
|
162
|
+
// Return valid cached credentials if available (unless force refresh is requested)
|
|
163
|
+
if (!forceRefresh &&
|
|
164
|
+
this.memoryCache.credentials &&
|
|
165
|
+
this.isTokenValid(this.memoryCache.credentials)) {
|
|
166
|
+
return this.memoryCache.credentials;
|
|
167
|
+
}
|
|
168
|
+
// Use a local promise variable to avoid race conditions
|
|
169
|
+
let currentRefreshPromise = this.refreshPromise;
|
|
170
|
+
if (!currentRefreshPromise) {
|
|
171
|
+
// Start new refresh operation with distributed locking
|
|
172
|
+
currentRefreshPromise = this.performTokenRefresh(qwenClient, forceRefresh);
|
|
173
|
+
this.refreshPromise = currentRefreshPromise;
|
|
174
|
+
}
|
|
175
|
+
try {
|
|
176
|
+
// Wait for the refresh to complete
|
|
177
|
+
const result = await currentRefreshPromise;
|
|
178
|
+
return result;
|
|
179
|
+
}
|
|
180
|
+
finally {
|
|
181
|
+
if (this.refreshPromise === currentRefreshPromise) {
|
|
182
|
+
this.refreshPromise = null;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
}
|
|
186
|
+
catch (error) {
|
|
187
|
+
// Convert generic errors to TokenManagerError for better error handling
|
|
188
|
+
if (error instanceof TokenManagerError) {
|
|
189
|
+
throw error;
|
|
190
|
+
}
|
|
191
|
+
throw new TokenManagerError(TokenError.REFRESH_FAILED, `Failed to get valid credentials: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
/**
|
|
195
|
+
* Check if the credentials file was updated by another process and reload if so
|
|
196
|
+
* Uses promise-based locking to prevent concurrent file checks
|
|
197
|
+
*/
|
|
198
|
+
async checkAndReloadIfNeeded(qwenClient) {
|
|
199
|
+
// If there's already an ongoing check, wait for it to complete
|
|
200
|
+
if (this.checkPromise) {
|
|
201
|
+
await this.checkPromise;
|
|
202
|
+
return;
|
|
203
|
+
}
|
|
204
|
+
// If there's an ongoing refresh, skip the file check as refresh will handle it
|
|
205
|
+
if (this.refreshPromise) {
|
|
206
|
+
return;
|
|
207
|
+
}
|
|
208
|
+
const now = Date.now();
|
|
209
|
+
// Limit check frequency to avoid excessive disk I/O
|
|
210
|
+
if (now - this.memoryCache.lastCheck < CACHE_CHECK_INTERVAL_MS) {
|
|
211
|
+
return;
|
|
212
|
+
}
|
|
213
|
+
// Start the check operation and store the promise
|
|
214
|
+
this.checkPromise = this.performFileCheck(qwenClient, now);
|
|
215
|
+
try {
|
|
216
|
+
await this.checkPromise;
|
|
217
|
+
}
|
|
218
|
+
finally {
|
|
219
|
+
this.checkPromise = null;
|
|
220
|
+
}
|
|
221
|
+
}
|
|
222
|
+
/**
|
|
223
|
+
* Utility method to add timeout to any promise operation
|
|
224
|
+
* Properly cleans up the timeout when the promise completes
|
|
225
|
+
*/
|
|
226
|
+
withTimeout(promise, timeoutMs, operationType = 'Operation') {
|
|
227
|
+
let timeoutId;
|
|
228
|
+
return Promise.race([
|
|
229
|
+
promise.finally(() => {
|
|
230
|
+
// Clear timeout when main promise completes (success or failure)
|
|
231
|
+
if (timeoutId) {
|
|
232
|
+
clearTimeout(timeoutId);
|
|
233
|
+
}
|
|
234
|
+
}),
|
|
235
|
+
new Promise((_, reject) => {
|
|
236
|
+
timeoutId = setTimeout(() => reject(new Error(`${operationType} timed out after ${timeoutMs}ms`)), timeoutMs);
|
|
237
|
+
}),
|
|
238
|
+
]);
|
|
239
|
+
}
|
|
240
|
+
/**
|
|
241
|
+
* Perform the actual file check and reload operation
|
|
242
|
+
* This is separated to enable proper promise-based synchronization
|
|
243
|
+
*/
|
|
244
|
+
async performFileCheck(qwenClient, checkTime) {
|
|
245
|
+
// Update lastCheck atomically at the start to prevent other calls from proceeding
|
|
246
|
+
this.memoryCache.lastCheck = checkTime;
|
|
247
|
+
try {
|
|
248
|
+
const filePath = this.getCredentialFilePath();
|
|
249
|
+
const stats = await this.withTimeout(fs.stat(filePath), 3000, 'File operation');
|
|
250
|
+
const fileModTime = stats.mtimeMs;
|
|
251
|
+
// Reload credentials if file has been modified since last cache
|
|
252
|
+
if (fileModTime > this.memoryCache.fileModTime) {
|
|
253
|
+
await this.reloadCredentialsFromFile(qwenClient);
|
|
254
|
+
// Update fileModTime only after successful reload
|
|
255
|
+
this.memoryCache.fileModTime = fileModTime;
|
|
256
|
+
}
|
|
257
|
+
}
|
|
258
|
+
catch (error) {
|
|
259
|
+
// Handle file access errors
|
|
260
|
+
if (error instanceof Error &&
|
|
261
|
+
'code' in error &&
|
|
262
|
+
error.code !== 'ENOENT') {
|
|
263
|
+
// Clear cache atomically for non-missing file errors
|
|
264
|
+
this.updateCacheState(null, 0, checkTime);
|
|
265
|
+
throw new TokenManagerError(TokenError.FILE_ACCESS_ERROR, `Failed to access credentials file: ${error.message}`, error);
|
|
266
|
+
}
|
|
267
|
+
// For missing files (ENOENT), just reset file modification time
|
|
268
|
+
// but keep existing valid credentials in memory if they exist
|
|
269
|
+
this.memoryCache.fileModTime = 0;
|
|
270
|
+
}
|
|
271
|
+
}
|
|
272
|
+
/**
|
|
273
|
+
* Force a file check without time-based throttling (used during refresh operations)
|
|
274
|
+
*/
|
|
275
|
+
async forceFileCheck(qwenClient) {
|
|
276
|
+
try {
|
|
277
|
+
const filePath = this.getCredentialFilePath();
|
|
278
|
+
const stats = await fs.stat(filePath);
|
|
279
|
+
const fileModTime = stats.mtimeMs;
|
|
280
|
+
// Reload credentials if file has been modified since last cache
|
|
281
|
+
if (fileModTime > this.memoryCache.fileModTime) {
|
|
282
|
+
await this.reloadCredentialsFromFile(qwenClient);
|
|
283
|
+
// Update cache state atomically
|
|
284
|
+
this.memoryCache.fileModTime = fileModTime;
|
|
285
|
+
this.memoryCache.lastCheck = Date.now();
|
|
286
|
+
}
|
|
287
|
+
}
|
|
288
|
+
catch (error) {
|
|
289
|
+
// Handle file access errors
|
|
290
|
+
if (error instanceof Error &&
|
|
291
|
+
'code' in error &&
|
|
292
|
+
error.code !== 'ENOENT') {
|
|
293
|
+
// Clear cache atomically for non-missing file errors
|
|
294
|
+
this.updateCacheState(null, 0);
|
|
295
|
+
throw new TokenManagerError(TokenError.FILE_ACCESS_ERROR, `Failed to access credentials file during refresh: ${error.message}`, error);
|
|
296
|
+
}
|
|
297
|
+
// For missing files (ENOENT), just reset file modification time
|
|
298
|
+
this.memoryCache.fileModTime = 0;
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
/**
|
|
302
|
+
* Load credentials from the file system into memory cache and sync with qwenClient
|
|
303
|
+
*/
|
|
304
|
+
async reloadCredentialsFromFile(qwenClient) {
|
|
305
|
+
try {
|
|
306
|
+
const filePath = this.getCredentialFilePath();
|
|
307
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
308
|
+
const parsedData = JSON.parse(content);
|
|
309
|
+
const credentials = validateCredentials(parsedData);
|
|
310
|
+
// Store previous state for rollback
|
|
311
|
+
const previousCredentials = this.memoryCache.credentials;
|
|
312
|
+
// Update memory cache first
|
|
313
|
+
this.memoryCache.credentials = credentials;
|
|
314
|
+
// Sync with qwenClient atomically - rollback on failure
|
|
315
|
+
try {
|
|
316
|
+
if (qwenClient) {
|
|
317
|
+
qwenClient.setCredentials(credentials);
|
|
318
|
+
}
|
|
319
|
+
}
|
|
320
|
+
catch (clientError) {
|
|
321
|
+
// Rollback memory cache on client sync failure
|
|
322
|
+
this.memoryCache.credentials = previousCredentials;
|
|
323
|
+
throw clientError;
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
catch (error) {
|
|
327
|
+
// Log validation errors for debugging but don't throw
|
|
328
|
+
if (error instanceof Error &&
|
|
329
|
+
error.message.includes('Invalid credentials')) {
|
|
330
|
+
console.warn(`Failed to validate credentials file: ${error.message}`);
|
|
331
|
+
}
|
|
332
|
+
// Clear credentials but preserve other cache state
|
|
333
|
+
this.memoryCache.credentials = null;
|
|
334
|
+
}
|
|
335
|
+
}
|
|
336
|
+
/**
|
|
337
|
+
* Refresh the OAuth token using file locking to prevent concurrent refreshes
|
|
338
|
+
*
|
|
339
|
+
* @param qwenClient - The OAuth2 client instance
|
|
340
|
+
* @param forceRefresh - If true, skip checking if token is already valid after getting lock
|
|
341
|
+
* @returns Promise resolving to refreshed credentials
|
|
342
|
+
* @throws TokenManagerError if refresh fails or lock cannot be acquired
|
|
343
|
+
*/
|
|
344
|
+
async performTokenRefresh(qwenClient, forceRefresh = false) {
|
|
345
|
+
const startTime = Date.now();
|
|
346
|
+
const lockPath = this.getLockFilePath();
|
|
347
|
+
try {
|
|
348
|
+
// Check if we have a refresh token before attempting refresh
|
|
349
|
+
const currentCredentials = qwenClient.getCredentials();
|
|
350
|
+
if (!currentCredentials.refresh_token) {
|
|
351
|
+
// console.debug('create a NO_REFRESH_TOKEN error');
|
|
352
|
+
throw new TokenManagerError(TokenError.NO_REFRESH_TOKEN, 'No refresh token available for token refresh');
|
|
353
|
+
}
|
|
354
|
+
// Acquire distributed file lock
|
|
355
|
+
await this.acquireLock(lockPath);
|
|
356
|
+
// Check if the operation is taking too long
|
|
357
|
+
const lockAcquisitionTime = Date.now() - startTime;
|
|
358
|
+
if (lockAcquisitionTime > 5000) {
|
|
359
|
+
// 5 seconds warning threshold
|
|
360
|
+
console.warn(`Token refresh lock acquisition took ${lockAcquisitionTime}ms`);
|
|
361
|
+
}
|
|
362
|
+
// Double-check if another process already refreshed the token (unless force refresh is requested)
|
|
363
|
+
// Skip the time-based throttling since we're already in a locked refresh operation
|
|
364
|
+
await this.forceFileCheck(qwenClient);
|
|
365
|
+
// Use refreshed credentials if they're now valid (unless force refresh is requested)
|
|
366
|
+
if (!forceRefresh &&
|
|
367
|
+
this.memoryCache.credentials &&
|
|
368
|
+
this.isTokenValid(this.memoryCache.credentials)) {
|
|
369
|
+
// No need to call qwenClient.setCredentials here as checkAndReloadIfNeeded already did it
|
|
370
|
+
return this.memoryCache.credentials;
|
|
371
|
+
}
|
|
372
|
+
// Perform the actual token refresh
|
|
373
|
+
const response = await qwenClient.refreshAccessToken();
|
|
374
|
+
// Check if the token refresh is taking too long
|
|
375
|
+
const totalOperationTime = Date.now() - startTime;
|
|
376
|
+
if (totalOperationTime > 10000) {
|
|
377
|
+
// 10 seconds warning threshold
|
|
378
|
+
console.warn(`Token refresh operation took ${totalOperationTime}ms`);
|
|
379
|
+
}
|
|
380
|
+
if (!response || isErrorResponse(response)) {
|
|
381
|
+
const errorData = response;
|
|
382
|
+
throw new TokenManagerError(TokenError.REFRESH_FAILED, `Token refresh failed: ${errorData?.error || 'Unknown error'} - ${errorData?.error_description || 'No details provided'}`);
|
|
383
|
+
}
|
|
384
|
+
const tokenData = response;
|
|
385
|
+
if (!tokenData.access_token) {
|
|
386
|
+
throw new TokenManagerError(TokenError.REFRESH_FAILED, 'Failed to refresh access token: no token returned');
|
|
387
|
+
}
|
|
388
|
+
// Create updated credentials object
|
|
389
|
+
const credentials = {
|
|
390
|
+
access_token: tokenData.access_token,
|
|
391
|
+
token_type: tokenData.token_type,
|
|
392
|
+
refresh_token: tokenData.refresh_token || currentCredentials.refresh_token,
|
|
393
|
+
resource_url: tokenData.resource_url,
|
|
394
|
+
expiry_date: Date.now() + tokenData.expires_in * 1000,
|
|
395
|
+
};
|
|
396
|
+
// Update memory cache and client credentials atomically
|
|
397
|
+
this.memoryCache.credentials = credentials;
|
|
398
|
+
qwenClient.setCredentials(credentials);
|
|
399
|
+
// Persist to file and update modification time
|
|
400
|
+
await this.saveCredentialsToFile(credentials);
|
|
401
|
+
return credentials;
|
|
402
|
+
}
|
|
403
|
+
catch (error) {
|
|
404
|
+
// Handle credentials clear required error (400 status from refresh)
|
|
405
|
+
if (error instanceof CredentialsClearRequiredError) {
|
|
406
|
+
console.debug('SharedTokenManager: Clearing memory cache due to credentials clear requirement');
|
|
407
|
+
// Clear memory cache when credentials need to be cleared
|
|
408
|
+
this.memoryCache.credentials = null;
|
|
409
|
+
this.memoryCache.fileModTime = 0;
|
|
410
|
+
// Reset any ongoing refresh promise as the credentials are no longer valid
|
|
411
|
+
this.refreshPromise = null;
|
|
412
|
+
throw new TokenManagerError(TokenError.REFRESH_FAILED, error.message, error);
|
|
413
|
+
}
|
|
414
|
+
if (error instanceof TokenManagerError) {
|
|
415
|
+
throw error;
|
|
416
|
+
}
|
|
417
|
+
// Handle network-related errors
|
|
418
|
+
if (error instanceof Error &&
|
|
419
|
+
(error.message.includes('fetch') ||
|
|
420
|
+
error.message.includes('network') ||
|
|
421
|
+
error.message.includes('timeout'))) {
|
|
422
|
+
throw new TokenManagerError(TokenError.NETWORK_ERROR, `Network error during token refresh: ${error.message}`, error);
|
|
423
|
+
}
|
|
424
|
+
throw new TokenManagerError(TokenError.REFRESH_FAILED, `Unexpected error during token refresh: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
425
|
+
}
|
|
426
|
+
finally {
|
|
427
|
+
// Always release the file lock
|
|
428
|
+
await this.releaseLock(lockPath);
|
|
429
|
+
}
|
|
430
|
+
}
|
|
431
|
+
/**
|
|
432
|
+
* Save credentials to file and update the cached file modification time
|
|
433
|
+
*
|
|
434
|
+
* @param credentials - The credentials to save
|
|
435
|
+
*/
|
|
436
|
+
async saveCredentialsToFile(credentials) {
|
|
437
|
+
const filePath = this.getCredentialFilePath();
|
|
438
|
+
const dirPath = path.dirname(filePath);
|
|
439
|
+
const tempPath = `${filePath}.tmp.${randomUUID()}`;
|
|
440
|
+
// Create directory with restricted permissions
|
|
441
|
+
try {
|
|
442
|
+
await this.withTimeout(fs.mkdir(dirPath, { recursive: true, mode: 0o700 }), 5000, 'File operation');
|
|
443
|
+
}
|
|
444
|
+
catch (error) {
|
|
445
|
+
throw new TokenManagerError(TokenError.FILE_ACCESS_ERROR, `Failed to create credentials directory: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
446
|
+
}
|
|
447
|
+
const credString = JSON.stringify(credentials, null, 2);
|
|
448
|
+
try {
|
|
449
|
+
// Write to temporary file first with restricted permissions
|
|
450
|
+
await this.withTimeout(fs.writeFile(tempPath, credString, { mode: 0o600 }), 5000, 'File operation');
|
|
451
|
+
// Atomic move to final location
|
|
452
|
+
await this.withTimeout(fs.rename(tempPath, filePath), 5000, 'File operation');
|
|
453
|
+
// Update cached file modification time atomically after successful write
|
|
454
|
+
const stats = await this.withTimeout(fs.stat(filePath), 5000, 'File operation');
|
|
455
|
+
this.memoryCache.fileModTime = stats.mtimeMs;
|
|
456
|
+
}
|
|
457
|
+
catch (error) {
|
|
458
|
+
// Clean up temp file if it exists
|
|
459
|
+
try {
|
|
460
|
+
await this.withTimeout(fs.unlink(tempPath), 1000, 'File operation');
|
|
461
|
+
}
|
|
462
|
+
catch (_cleanupError) {
|
|
463
|
+
// Ignore cleanup errors - temp file might not exist
|
|
464
|
+
}
|
|
465
|
+
throw new TokenManagerError(TokenError.FILE_ACCESS_ERROR, `Failed to write credentials file: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
466
|
+
}
|
|
467
|
+
}
|
|
468
|
+
/**
|
|
469
|
+
* Check if the token is valid and not expired
|
|
470
|
+
*
|
|
471
|
+
* @param credentials - The credentials to validate
|
|
472
|
+
* @returns true if token is valid and not expired, false otherwise
|
|
473
|
+
*/
|
|
474
|
+
isTokenValid(credentials) {
|
|
475
|
+
if (!credentials.expiry_date || !credentials.access_token) {
|
|
476
|
+
return false;
|
|
477
|
+
}
|
|
478
|
+
return Date.now() < credentials.expiry_date - TOKEN_REFRESH_BUFFER_MS;
|
|
479
|
+
}
|
|
480
|
+
/**
|
|
481
|
+
* Get the full path to the credentials file
|
|
482
|
+
*
|
|
483
|
+
* @returns The absolute path to the credentials file
|
|
484
|
+
*/
|
|
485
|
+
getCredentialFilePath() {
|
|
486
|
+
return path.join(os.homedir(), QWEN_DIR, QWEN_CREDENTIAL_FILENAME);
|
|
487
|
+
}
|
|
488
|
+
/**
|
|
489
|
+
* Get the full path to the lock file
|
|
490
|
+
*
|
|
491
|
+
* @returns The absolute path to the lock file
|
|
492
|
+
*/
|
|
493
|
+
getLockFilePath() {
|
|
494
|
+
return path.join(os.homedir(), QWEN_DIR, QWEN_LOCK_FILENAME);
|
|
495
|
+
}
|
|
496
|
+
/**
|
|
497
|
+
* Acquire a file lock to prevent other processes from refreshing tokens simultaneously
|
|
498
|
+
*
|
|
499
|
+
* @param lockPath - Path to the lock file
|
|
500
|
+
* @throws TokenManagerError if lock cannot be acquired within timeout period
|
|
501
|
+
*/
|
|
502
|
+
async acquireLock(lockPath) {
|
|
503
|
+
const { maxAttempts, attemptInterval, maxInterval } = this.lockConfig;
|
|
504
|
+
const lockId = randomUUID(); // Use random UUID instead of PID for security
|
|
505
|
+
let currentInterval = attemptInterval;
|
|
506
|
+
for (let attempt = 0; attempt < maxAttempts; attempt++) {
|
|
507
|
+
try {
|
|
508
|
+
// Attempt to create lock file atomically (exclusive mode)
|
|
509
|
+
await fs.writeFile(lockPath, lockId, { flag: 'wx' });
|
|
510
|
+
return; // Successfully acquired lock
|
|
511
|
+
}
|
|
512
|
+
catch (error) {
|
|
513
|
+
if (error.code === 'EEXIST') {
|
|
514
|
+
// Lock file already exists, check if it's stale
|
|
515
|
+
try {
|
|
516
|
+
const stats = await fs.stat(lockPath);
|
|
517
|
+
const lockAge = Date.now() - stats.mtimeMs;
|
|
518
|
+
// Remove stale locks that exceed timeout
|
|
519
|
+
if (lockAge > LOCK_TIMEOUT_MS) {
|
|
520
|
+
// Use atomic rename operation to avoid race condition
|
|
521
|
+
const tempPath = `${lockPath}.stale.${randomUUID()}`;
|
|
522
|
+
try {
|
|
523
|
+
// Atomic move to temporary location
|
|
524
|
+
await fs.rename(lockPath, tempPath);
|
|
525
|
+
// Clean up the temporary file
|
|
526
|
+
await fs.unlink(tempPath);
|
|
527
|
+
console.warn(`Removed stale lock file: ${lockPath} (age: ${lockAge}ms)`);
|
|
528
|
+
continue; // Retry lock acquisition immediately
|
|
529
|
+
}
|
|
530
|
+
catch (renameError) {
|
|
531
|
+
// Lock might have been removed by another process, continue trying
|
|
532
|
+
console.warn(`Failed to remove stale lock file ${lockPath}: ${renameError instanceof Error ? renameError.message : String(renameError)}`);
|
|
533
|
+
// Continue - the lock might have been removed by another process
|
|
534
|
+
}
|
|
535
|
+
}
|
|
536
|
+
}
|
|
537
|
+
catch (statError) {
|
|
538
|
+
// Can't stat lock file, it might have been removed, continue trying
|
|
539
|
+
console.warn(`Failed to stat lock file ${lockPath}: ${statError instanceof Error ? statError.message : String(statError)}`);
|
|
540
|
+
}
|
|
541
|
+
// Wait before retrying with exponential backoff
|
|
542
|
+
await new Promise((resolve) => setTimeout(resolve, currentInterval));
|
|
543
|
+
// Increase interval for next attempt (exponential backoff), but cap at maxInterval
|
|
544
|
+
currentInterval = Math.min(currentInterval * 1.5, maxInterval);
|
|
545
|
+
}
|
|
546
|
+
else {
|
|
547
|
+
throw new TokenManagerError(TokenError.FILE_ACCESS_ERROR, `Failed to create lock file: ${error instanceof Error ? error.message : String(error)}`, error);
|
|
548
|
+
}
|
|
549
|
+
}
|
|
550
|
+
}
|
|
551
|
+
throw new TokenManagerError(TokenError.LOCK_TIMEOUT, 'Failed to acquire file lock for token refresh: timeout exceeded');
|
|
552
|
+
}
|
|
553
|
+
/**
|
|
554
|
+
* Release the file lock
|
|
555
|
+
*
|
|
556
|
+
* @param lockPath - Path to the lock file
|
|
557
|
+
*/
|
|
558
|
+
async releaseLock(lockPath) {
|
|
559
|
+
try {
|
|
560
|
+
await fs.unlink(lockPath);
|
|
561
|
+
}
|
|
562
|
+
catch (error) {
|
|
563
|
+
// Lock file might already be removed by another process or timeout cleanup
|
|
564
|
+
// This is not an error condition, but log for debugging
|
|
565
|
+
if (error.code !== 'ENOENT') {
|
|
566
|
+
console.warn(`Failed to release lock file ${lockPath}: ${error instanceof Error ? error.message : String(error)}`);
|
|
567
|
+
}
|
|
568
|
+
}
|
|
569
|
+
}
|
|
570
|
+
/**
|
|
571
|
+
* Atomically update cache state to prevent inconsistent intermediate states
|
|
572
|
+
* @param credentials - New credentials to cache
|
|
573
|
+
* @param fileModTime - File modification time
|
|
574
|
+
* @param lastCheck - Last check timestamp (optional, defaults to current time)
|
|
575
|
+
*/
|
|
576
|
+
updateCacheState(credentials, fileModTime, lastCheck) {
|
|
577
|
+
this.memoryCache = {
|
|
578
|
+
credentials,
|
|
579
|
+
fileModTime,
|
|
580
|
+
lastCheck: lastCheck ?? Date.now(),
|
|
581
|
+
};
|
|
582
|
+
}
|
|
583
|
+
/**
|
|
584
|
+
* Clear all cached data and reset the manager to initial state
|
|
585
|
+
*/
|
|
586
|
+
clearCache() {
|
|
587
|
+
this.updateCacheState(null, 0, 0);
|
|
588
|
+
this.refreshPromise = null;
|
|
589
|
+
this.checkPromise = null;
|
|
590
|
+
}
|
|
591
|
+
/**
|
|
592
|
+
* Get the current cached credentials (may be expired)
|
|
593
|
+
*
|
|
594
|
+
* @returns The currently cached credentials or null
|
|
595
|
+
*/
|
|
596
|
+
getCurrentCredentials() {
|
|
597
|
+
return this.memoryCache.credentials;
|
|
598
|
+
}
|
|
599
|
+
/**
|
|
600
|
+
* Check if there's an ongoing refresh operation
|
|
601
|
+
*
|
|
602
|
+
* @returns true if refresh is in progress, false otherwise
|
|
603
|
+
*/
|
|
604
|
+
isRefreshInProgress() {
|
|
605
|
+
return this.refreshPromise !== null;
|
|
606
|
+
}
|
|
607
|
+
/**
|
|
608
|
+
* Set lock configuration for testing purposes
|
|
609
|
+
* @param config - Lock configuration
|
|
610
|
+
*/
|
|
611
|
+
setLockConfig(config) {
|
|
612
|
+
this.lockConfig = { ...DEFAULT_LOCK_CONFIG, ...config };
|
|
613
|
+
}
|
|
614
|
+
/**
|
|
615
|
+
* Clean up event listeners (primarily for testing)
|
|
616
|
+
*/
|
|
617
|
+
cleanup() {
|
|
618
|
+
if (this.cleanupFunction && this.cleanupHandlersRegistered) {
|
|
619
|
+
this.cleanupFunction();
|
|
620
|
+
process.removeListener('exit', this.cleanupFunction);
|
|
621
|
+
process.removeListener('SIGINT', this.cleanupFunction);
|
|
622
|
+
process.removeListener('SIGTERM', this.cleanupFunction);
|
|
623
|
+
process.removeListener('uncaughtException', this.cleanupFunction);
|
|
624
|
+
process.removeListener('unhandledRejection', this.cleanupFunction);
|
|
625
|
+
this.cleanupHandlersRegistered = false;
|
|
626
|
+
this.cleanupFunction = null;
|
|
627
|
+
}
|
|
628
|
+
}
|
|
629
|
+
/**
|
|
630
|
+
* Get a summary of the current state for debugging
|
|
631
|
+
*
|
|
632
|
+
* @returns Object containing current state information
|
|
633
|
+
*/
|
|
634
|
+
getDebugInfo() {
|
|
635
|
+
const hasCredentials = !!this.memoryCache.credentials;
|
|
636
|
+
const credentialsExpired = hasCredentials
|
|
637
|
+
? !this.isTokenValid(this.memoryCache.credentials)
|
|
638
|
+
: false;
|
|
639
|
+
return {
|
|
640
|
+
hasCredentials,
|
|
641
|
+
credentialsExpired,
|
|
642
|
+
isRefreshing: this.isRefreshInProgress(),
|
|
643
|
+
cacheAge: Date.now() - this.memoryCache.lastCheck,
|
|
644
|
+
};
|
|
645
|
+
}
|
|
646
|
+
}
|
|
647
|
+
//# sourceMappingURL=sharedTokenManager.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sharedTokenManager.js","sourceRoot":"","sources":["../../../src/qwen/sharedTokenManager.ts"],"names":[],"mappings":"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"}
|