@office-ai/aioncli-core 0.2.3 → 0.18.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/dist/index.d.ts +16 -3
- package/dist/index.js +15 -3
- package/dist/index.js.map +1 -1
- package/dist/src/agents/codebase-investigator.d.ts +46 -0
- package/dist/src/agents/codebase-investigator.js +132 -0
- package/dist/src/agents/codebase-investigator.js.map +1 -0
- package/dist/src/agents/codebase-investigator.test.js +35 -0
- package/dist/src/agents/codebase-investigator.test.js.map +1 -0
- package/dist/src/agents/executor.d.ts +114 -0
- package/dist/src/agents/executor.js +779 -0
- package/dist/src/agents/executor.js.map +1 -0
- package/dist/src/agents/executor.test.js +1362 -0
- package/dist/src/agents/executor.test.js.map +1 -0
- package/dist/src/agents/invocation.d.ts +46 -0
- package/dist/src/agents/invocation.js +102 -0
- package/dist/src/agents/invocation.js.map +1 -0
- package/dist/src/agents/invocation.test.js +215 -0
- package/dist/src/agents/invocation.test.js.map +1 -0
- package/dist/src/agents/registry.d.ts +40 -0
- package/dist/src/agents/registry.js +105 -0
- package/dist/src/agents/registry.js.map +1 -0
- package/dist/src/agents/registry.test.d.ts +6 -0
- package/dist/src/agents/registry.test.js +160 -0
- package/dist/src/agents/registry.test.js.map +1 -0
- package/dist/src/agents/schema-utils.d.ts +39 -0
- package/dist/src/agents/schema-utils.js +57 -0
- package/dist/src/agents/schema-utils.js.map +1 -0
- package/dist/src/agents/schema-utils.test.d.ts +6 -0
- package/dist/src/agents/schema-utils.test.js +144 -0
- package/dist/src/agents/schema-utils.test.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.d.ts +38 -0
- package/dist/src/agents/subagent-tool-wrapper.js +48 -0
- package/dist/src/agents/subagent-tool-wrapper.js.map +1 -0
- package/dist/src/agents/subagent-tool-wrapper.test.d.ts +6 -0
- package/dist/src/agents/subagent-tool-wrapper.test.js +110 -0
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +1 -0
- package/dist/src/agents/types.d.ts +146 -0
- package/dist/src/agents/types.js +19 -0
- package/dist/src/agents/types.js.map +1 -0
- package/dist/src/agents/utils.d.ts +15 -0
- package/dist/src/agents/utils.js +29 -0
- package/dist/src/agents/utils.js.map +1 -0
- package/dist/src/agents/utils.test.d.ts +6 -0
- package/dist/src/agents/utils.test.js +87 -0
- package/dist/src/agents/utils.test.js.map +1 -0
- package/dist/src/code_assist/codeAssist.d.ts +6 -3
- package/dist/src/code_assist/codeAssist.js +13 -1
- package/dist/src/code_assist/codeAssist.js.map +1 -1
- package/dist/src/code_assist/codeAssist.test.d.ts +6 -0
- package/dist/src/code_assist/codeAssist.test.js +99 -0
- package/dist/src/code_assist/codeAssist.test.js.map +1 -0
- package/dist/src/code_assist/converter.d.ts +5 -1
- package/dist/src/code_assist/converter.js +39 -5
- package/dist/src/code_assist/converter.js.map +1 -1
- package/dist/src/code_assist/converter.test.js +112 -0
- package/dist/src/code_assist/converter.test.js.map +1 -1
- package/dist/src/code_assist/experiments/client_metadata.d.ts +12 -0
- package/dist/src/code_assist/experiments/client_metadata.js +50 -0
- package/dist/src/code_assist/experiments/client_metadata.js.map +1 -0
- package/dist/src/code_assist/experiments/client_metadata.test.d.ts +6 -0
- package/dist/src/code_assist/experiments/client_metadata.test.js +99 -0
- package/dist/src/code_assist/experiments/client_metadata.test.js.map +1 -0
- package/dist/src/code_assist/experiments/experiments.d.ts +17 -0
- package/dist/src/code_assist/experiments/experiments.js +36 -0
- package/dist/src/code_assist/experiments/experiments.js.map +1 -0
- package/dist/src/code_assist/experiments/experiments.test.d.ts +6 -0
- package/dist/src/code_assist/experiments/experiments.test.js +92 -0
- package/dist/src/code_assist/experiments/experiments.test.js.map +1 -0
- package/dist/src/code_assist/experiments/flagNames.d.ts +13 -0
- package/dist/src/code_assist/experiments/flagNames.js +13 -0
- package/dist/src/code_assist/experiments/flagNames.js.map +1 -0
- package/dist/src/code_assist/experiments/types.d.ts +35 -0
- package/dist/src/code_assist/experiments/types.js +7 -0
- package/dist/src/code_assist/experiments/types.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 +110 -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 +198 -0
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +1 -0
- package/dist/src/code_assist/oauth2.d.ts +3 -3
- package/dist/src/code_assist/oauth2.js +252 -125
- package/dist/src/code_assist/oauth2.js.map +1 -1
- package/dist/src/code_assist/oauth2.test.js +788 -350
- package/dist/src/code_assist/oauth2.test.js.map +1 -1
- package/dist/src/code_assist/server.d.ts +8 -6
- package/dist/src/code_assist/server.js +41 -10
- package/dist/src/code_assist/server.js.map +1 -1
- package/dist/src/code_assist/server.test.js +151 -28
- package/dist/src/code_assist/server.test.js.map +1 -1
- package/dist/src/code_assist/setup.d.ts +2 -2
- package/dist/src/code_assist/setup.js +5 -3
- package/dist/src/code_assist/setup.js.map +1 -1
- package/dist/src/code_assist/setup.test.js.map +1 -1
- package/dist/src/code_assist/types.d.ts +18 -3
- package/dist/src/code_assist/types.js.map +1 -1
- package/dist/src/commands/extensions.d.ts +7 -0
- package/dist/src/commands/extensions.js +9 -0
- package/dist/src/commands/extensions.js.map +1 -0
- package/dist/src/commands/extensions.test.d.ts +6 -0
- package/dist/src/commands/extensions.test.js +19 -0
- package/dist/src/commands/extensions.test.js.map +1 -0
- package/dist/src/config/config.d.ts +282 -60
- package/dist/src/config/config.js +677 -129
- package/dist/src/config/config.js.map +1 -1
- package/dist/src/config/config.test.js +1020 -146
- package/dist/src/config/config.test.js.map +1 -1
- 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/defaultModelConfigs.d.ts +7 -0
- package/dist/src/config/defaultModelConfigs.js +185 -0
- package/dist/src/config/defaultModelConfigs.js.map +1 -0
- package/dist/src/config/models.d.ts +37 -0
- package/dist/src/config/models.js +72 -0
- package/dist/src/config/models.js.map +1 -1
- package/dist/src/config/models.test.d.ts +6 -0
- package/dist/src/config/models.test.js +116 -0
- package/dist/src/config/models.test.js.map +1 -0
- package/dist/src/config/storage.d.ts +36 -0
- package/dist/src/config/storage.js +115 -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 +48 -0
- package/dist/src/config/storage.test.js.map +1 -0
- package/dist/src/confirmation-bus/index.d.ts +7 -0
- package/dist/src/confirmation-bus/index.js +8 -0
- package/dist/src/confirmation-bus/index.js.map +1 -0
- package/dist/src/confirmation-bus/message-bus.d.ts +18 -0
- package/dist/src/confirmation-bus/message-bus.js +87 -0
- package/dist/src/confirmation-bus/message-bus.js.map +1 -0
- package/dist/src/confirmation-bus/message-bus.test.d.ts +6 -0
- package/dist/src/confirmation-bus/message-bus.test.js +170 -0
- package/dist/src/confirmation-bus/message-bus.test.js.map +1 -0
- package/dist/src/confirmation-bus/types.d.ts +49 -0
- package/dist/src/confirmation-bus/types.js +16 -0
- package/dist/src/confirmation-bus/types.js.map +1 -0
- package/dist/src/core/apiKeyCredentialStorage.d.ts +17 -0
- package/dist/src/core/apiKeyCredentialStorage.js +64 -0
- package/dist/src/core/apiKeyCredentialStorage.js.map +1 -0
- package/dist/src/core/apiKeyCredentialStorage.test.d.ts +6 -0
- package/dist/src/core/apiKeyCredentialStorage.test.js +71 -0
- package/dist/src/core/apiKeyCredentialStorage.test.js.map +1 -0
- package/dist/src/core/baseLlmClient.d.ts +50 -0
- package/dist/src/core/baseLlmClient.js +185 -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 +311 -0
- package/dist/src/core/baseLlmClient.test.js.map +1 -0
- package/dist/src/core/client.d.ts +30 -42
- package/dist/src/core/client.js +178 -477
- package/dist/src/core/client.js.map +1 -1
- package/dist/src/core/client.test.js +739 -617
- package/dist/src/core/client.test.js.map +1 -1
- package/dist/src/core/contentGenerator.d.ts +7 -6
- package/dist/src/core/contentGenerator.js +59 -45
- package/dist/src/core/contentGenerator.js.map +1 -1
- package/dist/src/core/contentGenerator.test.js +50 -4
- package/dist/src/core/contentGenerator.test.js.map +1 -1
- package/dist/src/core/coreToolScheduler.d.ts +28 -11
- package/dist/src/core/coreToolScheduler.js +493 -161
- package/dist/src/core/coreToolScheduler.js.map +1 -1
- package/dist/src/core/coreToolScheduler.test.js +995 -163
- package/dist/src/core/coreToolScheduler.test.js.map +1 -1
- package/dist/src/core/fakeContentGenerator.d.ts +33 -0
- package/dist/src/core/fakeContentGenerator.js +58 -0
- package/dist/src/core/fakeContentGenerator.js.map +1 -0
- package/dist/src/core/fakeContentGenerator.test.d.ts +6 -0
- package/dist/src/core/fakeContentGenerator.test.js +127 -0
- package/dist/src/core/fakeContentGenerator.test.js.map +1 -0
- package/dist/src/core/geminiChat.d.ts +61 -55
- package/dist/src/core/geminiChat.js +388 -366
- package/dist/src/core/geminiChat.js.map +1 -1
- package/dist/src/core/geminiChat.test.js +1600 -355
- package/dist/src/core/geminiChat.test.js.map +1 -1
- package/dist/src/core/geminiRequest.js +1 -0
- package/dist/src/core/geminiRequest.js.map +1 -1
- package/dist/src/core/logger.d.ts +11 -4
- package/dist/src/core/logger.js +39 -30
- package/dist/src/core/logger.js.map +1 -1
- package/dist/src/core/logger.test.js +62 -45
- package/dist/src/core/logger.test.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.d.ts +4 -3
- package/dist/src/core/loggingContentGenerator.js +116 -37
- package/dist/src/core/loggingContentGenerator.js.map +1 -1
- package/dist/src/core/loggingContentGenerator.test.d.ts +6 -0
- package/dist/src/core/loggingContentGenerator.test.js +180 -0
- package/dist/src/core/loggingContentGenerator.test.js.map +1 -0
- package/dist/src/core/nonInteractiveToolExecutor.d.ts +4 -5
- package/dist/src/core/nonInteractiveToolExecutor.js +17 -120
- package/dist/src/core/nonInteractiveToolExecutor.js.map +1 -1
- package/dist/src/core/nonInteractiveToolExecutor.test.js +168 -84
- package/dist/src/core/nonInteractiveToolExecutor.test.js.map +1 -1
- package/dist/src/core/openaiContentGenerator.d.ts +4 -3
- package/dist/src/core/openaiContentGenerator.js +49 -19
- package/dist/src/core/openaiContentGenerator.js.map +1 -1
- package/dist/src/core/openaiContentGenerator.test.js +1 -0
- package/dist/src/core/openaiContentGenerator.test.js.map +1 -1
- package/dist/src/core/prompts.d.ts +7 -1
- package/dist/src/core/prompts.js +198 -195
- package/dist/src/core/prompts.js.map +1 -1
- package/dist/src/core/prompts.test.js +172 -104
- package/dist/src/core/prompts.test.js.map +1 -1
- package/dist/src/core/recordingContentGenerator.d.ts +18 -0
- package/dist/src/core/recordingContentGenerator.js +77 -0
- package/dist/src/core/recordingContentGenerator.js.map +1 -0
- package/dist/src/core/recordingContentGenerator.test.d.ts +6 -0
- package/dist/src/core/recordingContentGenerator.test.js +101 -0
- package/dist/src/core/recordingContentGenerator.test.js.map +1 -0
- package/dist/src/core/subagent.d.ts +24 -18
- package/dist/src/core/subagent.js +125 -90
- package/dist/src/core/subagent.js.map +1 -1
- package/dist/src/core/subagent.test.js +59 -44
- package/dist/src/core/subagent.test.js.map +1 -1
- package/dist/src/core/tokenLimits.test.d.ts +6 -0
- package/dist/src/core/tokenLimits.test.js +26 -0
- package/dist/src/core/tokenLimits.test.js.map +1 -0
- package/dist/src/core/turn.d.ts +57 -13
- package/dist/src/core/turn.js +79 -35
- package/dist/src/core/turn.js.map +1 -1
- package/dist/src/core/turn.test.js +373 -120
- package/dist/src/core/turn.test.js.map +1 -1
- package/dist/src/fallback/handler.d.ts +7 -0
- package/dist/src/fallback/handler.js +181 -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 +245 -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 +2 -2
- package/dist/src/generated/git-commit.js +2 -2
- package/dist/src/generated/git-commit.js.map +1 -1
- package/dist/src/hooks/hookAggregator.d.ts +68 -0
- package/dist/src/hooks/hookAggregator.js +262 -0
- package/dist/src/hooks/hookAggregator.js.map +1 -0
- package/dist/src/hooks/hookAggregator.test.d.ts +6 -0
- package/dist/src/hooks/hookAggregator.test.js +387 -0
- package/dist/src/hooks/hookAggregator.test.js.map +1 -0
- package/dist/src/hooks/hookPlanner.d.ts +46 -0
- package/dist/src/hooks/hookPlanner.js +108 -0
- package/dist/src/hooks/hookPlanner.js.map +1 -0
- package/dist/src/hooks/hookPlanner.test.d.ts +6 -0
- package/dist/src/hooks/hookPlanner.test.js +255 -0
- package/dist/src/hooks/hookPlanner.test.js.map +1 -0
- package/dist/src/hooks/hookRegistry.d.ts +87 -0
- package/dist/src/hooks/hookRegistry.js +198 -0
- package/dist/src/hooks/hookRegistry.js.map +1 -0
- package/dist/src/hooks/hookRegistry.test.d.ts +6 -0
- package/dist/src/hooks/hookRegistry.test.js +341 -0
- package/dist/src/hooks/hookRegistry.test.js.map +1 -0
- package/dist/src/hooks/hookRunner.d.ts +42 -0
- package/dist/src/hooks/hookRunner.js +272 -0
- package/dist/src/hooks/hookRunner.js.map +1 -0
- package/dist/src/hooks/hookRunner.test.d.ts +6 -0
- package/dist/src/hooks/hookRunner.test.js +468 -0
- package/dist/src/hooks/hookRunner.test.js.map +1 -0
- package/dist/src/hooks/hookTranslator.d.ts +113 -0
- package/dist/src/hooks/hookTranslator.js +232 -0
- package/dist/src/hooks/hookTranslator.js.map +1 -0
- package/dist/src/hooks/hookTranslator.test.d.ts +6 -0
- package/dist/src/hooks/hookTranslator.test.js +192 -0
- package/dist/src/hooks/hookTranslator.test.js.map +1 -0
- package/dist/src/hooks/types.d.ts +384 -0
- package/dist/src/hooks/types.js +284 -0
- package/dist/src/hooks/types.js.map +1 -0
- package/dist/src/hooks/types.test.d.ts +6 -0
- package/dist/src/hooks/types.test.js +313 -0
- package/dist/src/hooks/types.test.js.map +1 -0
- package/dist/src/ide/constants.d.ts +3 -0
- package/dist/src/ide/constants.js +3 -0
- package/dist/src/ide/constants.js.map +1 -1
- package/dist/src/ide/detect-ide.d.ts +52 -12
- package/dist/src/ide/detect-ide.js +51 -65
- package/dist/src/ide/detect-ide.js.map +1 -1
- package/dist/src/ide/detect-ide.test.js +95 -52
- package/dist/src/ide/detect-ide.test.js.map +1 -1
- package/dist/src/ide/ide-client.d.ts +72 -24
- package/dist/src/ide/ide-client.js +380 -84
- package/dist/src/ide/ide-client.js.map +1 -1
- package/dist/src/ide/ide-client.test.js +539 -35
- package/dist/src/ide/ide-client.test.js.map +1 -1
- package/dist/src/ide/ide-installer.d.ts +2 -2
- package/dist/src/ide/ide-installer.js +93 -35
- package/dist/src/ide/ide-installer.js.map +1 -1
- package/dist/src/ide/ide-installer.test.js +157 -26
- package/dist/src/ide/ide-installer.test.js.map +1 -1
- package/dist/src/ide/ideContext.d.ts +35 -365
- package/dist/src/ide/ideContext.js +60 -106
- package/dist/src/ide/ideContext.js.map +1 -1
- package/dist/src/ide/ideContext.test.js +152 -24
- package/dist/src/ide/ideContext.test.js.map +1 -1
- package/dist/src/ide/process-utils.d.ts +7 -5
- package/dist/src/ide/process-utils.js +108 -67
- package/dist/src/ide/process-utils.js.map +1 -1
- package/dist/src/ide/process-utils.test.d.ts +6 -0
- package/dist/src/ide/process-utils.test.js +151 -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 +41 -2
- package/dist/src/index.js +44 -2
- package/dist/src/index.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.d.ts +5 -3
- package/dist/src/mcp/google-auth-provider.js +21 -3
- package/dist/src/mcp/google-auth-provider.js.map +1 -1
- package/dist/src/mcp/google-auth-provider.test.js +42 -9
- package/dist/src/mcp/google-auth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-provider.d.ts +25 -18
- package/dist/src/mcp/oauth-provider.js +194 -97
- package/dist/src/mcp/oauth-provider.js.map +1 -1
- package/dist/src/mcp/oauth-provider.test.js +581 -39
- package/dist/src/mcp/oauth-provider.test.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.d.ts +14 -32
- package/dist/src/mcp/oauth-token-storage.js +58 -28
- package/dist/src/mcp/oauth-token-storage.js.map +1 -1
- package/dist/src/mcp/oauth-token-storage.test.js +262 -162
- package/dist/src/mcp/oauth-token-storage.test.js.map +1 -1
- package/dist/src/mcp/oauth-utils.d.ts +16 -1
- package/dist/src/mcp/oauth-utils.js +68 -33
- package/dist/src/mcp/oauth-utils.js.map +1 -1
- package/dist/src/mcp/oauth-utils.test.js +86 -3
- package/dist/src/mcp/oauth-utils.test.js.map +1 -1
- package/dist/src/mcp/sa-impersonation-provider.d.ts +27 -0
- package/dist/src/mcp/sa-impersonation-provider.js +113 -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 +151 -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 +145 -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 +238 -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 +35 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.js +246 -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 +305 -0
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +1 -0
- package/dist/src/mcp/token-storage/types.d.ts +44 -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/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/stream-json-formatter.d.ts +32 -0
- package/dist/src/output/stream-json-formatter.js +52 -0
- package/dist/src/output/stream-json-formatter.js.map +1 -0
- package/dist/src/output/stream-json-formatter.test.d.ts +6 -0
- package/dist/src/output/stream-json-formatter.test.js +479 -0
- package/dist/src/output/stream-json-formatter.test.js.map +1 -0
- package/dist/src/output/types.d.ts +82 -0
- package/dist/src/output/types.js +22 -0
- package/dist/src/output/types.js.map +1 -0
- package/dist/src/policy/config.d.ts +31 -0
- package/dist/src/policy/config.js +199 -0
- package/dist/src/policy/config.js.map +1 -0
- package/dist/src/policy/config.test.d.ts +6 -0
- package/dist/src/policy/config.test.js +538 -0
- package/dist/src/policy/config.test.js.map +1 -0
- package/dist/src/policy/index.d.ts +9 -0
- package/dist/src/policy/index.js +10 -0
- package/dist/src/policy/index.js.map +1 -0
- package/dist/src/policy/policies/discovered.toml +8 -0
- package/dist/src/policy/policies/read-only.toml +56 -0
- package/dist/src/policy/policies/write.toml +73 -0
- package/dist/src/policy/policies/yolo.toml +31 -0
- package/dist/src/policy/policy-engine.d.ts +39 -0
- package/dist/src/policy/policy-engine.js +158 -0
- package/dist/src/policy/policy-engine.js.map +1 -0
- package/dist/src/policy/policy-engine.test.d.ts +6 -0
- package/dist/src/policy/policy-engine.test.js +899 -0
- package/dist/src/policy/policy-engine.test.js.map +1 -0
- package/dist/src/policy/stable-stringify.d.ts +58 -0
- package/dist/src/policy/stable-stringify.js +122 -0
- package/dist/src/policy/stable-stringify.js.map +1 -0
- package/dist/src/policy/toml-loader.d.ts +47 -0
- package/dist/src/policy/toml-loader.js +411 -0
- package/dist/src/policy/toml-loader.js.map +1 -0
- package/dist/src/policy/toml-loader.test.d.ts +6 -0
- package/dist/src/policy/toml-loader.test.js +376 -0
- package/dist/src/policy/toml-loader.test.js.map +1 -0
- package/dist/src/policy/types.d.ts +130 -0
- package/dist/src/policy/types.js +22 -0
- package/dist/src/policy/types.js.map +1 -0
- package/dist/src/prompts/mcp-prompts.d.ts +2 -2
- package/dist/src/prompts/mcp-prompts.test.d.ts +6 -0
- package/dist/src/prompts/mcp-prompts.test.js +39 -0
- package/dist/src/prompts/mcp-prompts.test.js.map +1 -0
- package/dist/src/prompts/prompt-registry.d.ts +1 -1
- package/dist/src/prompts/prompt-registry.js +2 -1
- package/dist/src/prompts/prompt-registry.js.map +1 -1
- package/dist/src/prompts/prompt-registry.test.d.ts +6 -0
- package/dist/src/prompts/prompt-registry.test.js +96 -0
- package/dist/src/prompts/prompt-registry.test.js.map +1 -0
- package/dist/src/routing/modelRouterService.d.ts +23 -0
- package/dist/src/routing/modelRouterService.js +85 -0
- package/dist/src/routing/modelRouterService.js.map +1 -0
- package/dist/src/routing/modelRouterService.test.d.ts +6 -0
- package/dist/src/routing/modelRouterService.test.js +160 -0
- package/dist/src/routing/modelRouterService.test.js.map +1 -0
- package/dist/src/routing/routingStrategy.d.ts +62 -0
- package/dist/src/routing/routingStrategy.js +7 -0
- package/dist/src/routing/routingStrategy.js.map +1 -0
- package/dist/src/routing/strategies/classifierStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/classifierStrategy.js +166 -0
- package/dist/src/routing/strategies/classifierStrategy.js.map +1 -0
- package/dist/src/routing/strategies/classifierStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/classifierStrategy.test.js +196 -0
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/compositeStrategy.d.ts +26 -0
- package/dist/src/routing/strategies/compositeStrategy.js +68 -0
- package/dist/src/routing/strategies/compositeStrategy.js.map +1 -0
- package/dist/src/routing/strategies/compositeStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/compositeStrategy.test.js +123 -0
- package/dist/src/routing/strategies/compositeStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/defaultStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/defaultStrategy.js +20 -0
- package/dist/src/routing/strategies/defaultStrategy.js.map +1 -0
- package/dist/src/routing/strategies/defaultStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/defaultStrategy.test.js +26 -0
- package/dist/src/routing/strategies/defaultStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/fallbackStrategy.d.ts +12 -0
- package/dist/src/routing/strategies/fallbackStrategy.js +25 -0
- package/dist/src/routing/strategies/fallbackStrategy.js.map +1 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.js +59 -0
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +1 -0
- package/dist/src/routing/strategies/overrideStrategy.d.ts +15 -0
- package/dist/src/routing/strategies/overrideStrategy.js +28 -0
- package/dist/src/routing/strategies/overrideStrategy.js.map +1 -0
- package/dist/src/routing/strategies/overrideStrategy.test.d.ts +6 -0
- package/dist/src/routing/strategies/overrideStrategy.test.js +45 -0
- package/dist/src/routing/strategies/overrideStrategy.test.js.map +1 -0
- package/dist/src/safety/built-in.d.ts +21 -0
- package/dist/src/safety/built-in.js +106 -0
- package/dist/src/safety/built-in.js.map +1 -0
- package/dist/src/safety/built-in.test.d.ts +6 -0
- package/dist/src/safety/built-in.test.js +199 -0
- package/dist/src/safety/built-in.test.js.map +1 -0
- package/dist/src/safety/checker-runner.d.ts +48 -0
- package/dist/src/safety/checker-runner.js +208 -0
- package/dist/src/safety/checker-runner.js.map +1 -0
- package/dist/src/safety/checker-runner.test.d.ts +6 -0
- package/dist/src/safety/checker-runner.test.js +238 -0
- package/dist/src/safety/checker-runner.test.js.map +1 -0
- package/dist/src/safety/context-builder.d.ts +23 -0
- package/dist/src/safety/context-builder.js +47 -0
- package/dist/src/safety/context-builder.js.map +1 -0
- package/dist/src/safety/context-builder.test.d.ts +6 -0
- package/dist/src/safety/context-builder.test.js +49 -0
- package/dist/src/safety/context-builder.test.js.map +1 -0
- package/dist/src/safety/protocol.d.ts +88 -0
- package/dist/src/safety/protocol.js +15 -0
- package/dist/src/safety/protocol.js.map +1 -0
- package/dist/src/safety/registry.d.ts +26 -0
- package/dist/src/safety/registry.js +65 -0
- package/dist/src/safety/registry.js.map +1 -0
- package/dist/src/safety/registry.test.d.ts +6 -0
- package/dist/src/safety/registry.test.js +31 -0
- package/dist/src/safety/registry.test.js.map +1 -0
- package/dist/src/services/chatCompressionService.d.ts +32 -0
- package/dist/src/services/chatCompressionService.js +162 -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 +210 -0
- package/dist/src/services/chatCompressionService.test.js.map +1 -0
- package/dist/src/services/chatRecordingService.d.ts +10 -15
- package/dist/src/services/chatRecordingService.js +43 -29
- package/dist/src/services/chatRecordingService.js.map +1 -1
- package/dist/src/services/chatRecordingService.test.js +69 -25
- package/dist/src/services/chatRecordingService.test.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.d.ts +8 -10
- package/dist/src/services/fileDiscoveryService.js +31 -53
- package/dist/src/services/fileDiscoveryService.js.map +1 -1
- package/dist/src/services/fileDiscoveryService.test.js +94 -14
- package/dist/src/services/fileDiscoveryService.test.js.map +1 -1
- package/dist/src/services/fileSystemService.d.ts +9 -0
- package/dist/src/services/fileSystemService.js +12 -1
- package/dist/src/services/fileSystemService.js.map +1 -1
- package/dist/src/services/fileSystemService.test.js +1 -1
- package/dist/src/services/fileSystemService.test.js.map +1 -1
- package/dist/src/services/gitService.d.ts +3 -1
- package/dist/src/services/gitService.js +30 -24
- package/dist/src/services/gitService.js.map +1 -1
- package/dist/src/services/gitService.test.js +30 -37
- package/dist/src/services/gitService.test.js.map +1 -1
- package/dist/src/services/loopDetectionService.d.ts +12 -3
- package/dist/src/services/loopDetectionService.js +148 -55
- package/dist/src/services/loopDetectionService.js.map +1 -1
- package/dist/src/services/loopDetectionService.test.js +280 -21
- package/dist/src/services/loopDetectionService.test.js.map +1 -1
- package/dist/src/services/modelConfig.golden.test.d.ts +6 -0
- package/dist/src/services/modelConfig.golden.test.js +42 -0
- package/dist/src/services/modelConfig.golden.test.js.map +1 -0
- package/dist/src/services/modelConfig.integration.test.d.ts +6 -0
- package/dist/src/services/modelConfig.integration.test.js +247 -0
- package/dist/src/services/modelConfig.integration.test.js.map +1 -0
- package/dist/src/services/modelConfigService.d.ts +48 -0
- package/dist/src/services/modelConfigService.js +151 -0
- package/dist/src/services/modelConfigService.js.map +1 -0
- package/dist/src/services/modelConfigService.test.d.ts +6 -0
- package/dist/src/services/modelConfigService.test.js +531 -0
- package/dist/src/services/modelConfigService.test.js.map +1 -0
- package/dist/src/services/shellExecutionService.d.ts +37 -2
- package/dist/src/services/shellExecutionService.js +361 -67
- package/dist/src/services/shellExecutionService.js.map +1 -1
- package/dist/src/services/shellExecutionService.test.js +333 -71
- package/dist/src/services/shellExecutionService.test.js.map +1 -1
- package/dist/src/services/test-data/resolved-aliases.golden.json +202 -0
- package/dist/src/telemetry/activity-detector.d.ts +41 -0
- package/dist/src/telemetry/activity-detector.js +61 -0
- package/dist/src/telemetry/activity-detector.js.map +1 -0
- package/dist/src/telemetry/activity-detector.test.d.ts +6 -0
- package/dist/src/telemetry/activity-detector.test.js +136 -0
- package/dist/src/telemetry/activity-detector.test.js.map +1 -0
- package/dist/src/telemetry/activity-monitor.d.ts +116 -0
- package/dist/src/telemetry/activity-monitor.js +209 -0
- package/dist/src/telemetry/activity-monitor.js.map +1 -0
- package/dist/src/telemetry/activity-monitor.test.d.ts +6 -0
- package/dist/src/telemetry/activity-monitor.test.js +251 -0
- package/dist/src/telemetry/activity-monitor.test.js.map +1 -0
- package/dist/src/telemetry/activity-types.d.ts +19 -0
- package/dist/src/telemetry/activity-types.js +21 -0
- package/dist/src/telemetry/activity-types.js.map +1 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.d.ts +53 -5
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js +581 -56
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +2 -0
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +467 -31
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +1 -1
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.d.ts +75 -4
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js +182 -6
- package/dist/src/telemetry/clearcut-logger/event-metadata-key.js.map +1 -1
- 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 +0 -18
- package/dist/src/telemetry/constants.js +0 -18
- package/dist/src/telemetry/constants.js.map +1 -1
- package/dist/src/telemetry/file-exporters.d.ts +5 -4
- package/dist/src/telemetry/file-exporters.js +1 -1
- package/dist/src/telemetry/file-exporters.js.map +1 -1
- package/dist/src/telemetry/gcp-exporters.d.ts +34 -0
- package/dist/src/telemetry/gcp-exporters.js +116 -0
- package/dist/src/telemetry/gcp-exporters.js.map +1 -0
- package/dist/src/telemetry/gcp-exporters.test.d.ts +6 -0
- package/dist/src/telemetry/gcp-exporters.test.js +318 -0
- package/dist/src/telemetry/gcp-exporters.test.js.map +1 -0
- package/dist/src/telemetry/high-water-mark-tracker.d.ts +43 -0
- package/dist/src/telemetry/high-water-mark-tracker.js +88 -0
- package/dist/src/telemetry/high-water-mark-tracker.js.map +1 -0
- package/dist/src/telemetry/high-water-mark-tracker.test.d.ts +6 -0
- package/dist/src/telemetry/high-water-mark-tracker.test.js +152 -0
- package/dist/src/telemetry/high-water-mark-tracker.test.js.map +1 -0
- package/dist/src/telemetry/index.d.ts +16 -2
- package/dist/src/telemetry/index.js +25 -2
- package/dist/src/telemetry/index.js.map +1 -1
- package/dist/src/telemetry/loggers.d.ts +25 -3
- package/dist/src/telemetry/loggers.js +333 -154
- package/dist/src/telemetry/loggers.js.map +1 -1
- package/dist/src/telemetry/loggers.test.circular.js +3 -4
- package/dist/src/telemetry/loggers.test.circular.js.map +1 -1
- package/dist/src/telemetry/loggers.test.js +868 -63
- package/dist/src/telemetry/loggers.test.js.map +1 -1
- package/dist/src/telemetry/memory-monitor.d.ts +149 -0
- package/dist/src/telemetry/memory-monitor.js +335 -0
- package/dist/src/telemetry/memory-monitor.js.map +1 -0
- package/dist/src/telemetry/memory-monitor.test.d.ts +6 -0
- package/dist/src/telemetry/memory-monitor.test.js +472 -0
- package/dist/src/telemetry/memory-monitor.test.js.map +1 -0
- package/dist/src/telemetry/metrics.d.ts +498 -11
- package/dist/src/telemetry/metrics.js +729 -84
- package/dist/src/telemetry/metrics.js.map +1 -1
- package/dist/src/telemetry/metrics.test.js +964 -101
- package/dist/src/telemetry/metrics.test.js.map +1 -1
- package/dist/src/telemetry/rate-limiter.d.ts +48 -0
- package/dist/src/telemetry/rate-limiter.js +100 -0
- package/dist/src/telemetry/rate-limiter.js.map +1 -0
- package/dist/src/telemetry/rate-limiter.test.d.ts +6 -0
- package/dist/src/telemetry/rate-limiter.test.js +207 -0
- package/dist/src/telemetry/rate-limiter.test.js.map +1 -0
- package/dist/src/telemetry/sdk.d.ts +1 -1
- package/dist/src/telemetry/sdk.js +23 -4
- package/dist/src/telemetry/sdk.js.map +1 -1
- package/dist/src/telemetry/sdk.test.js +108 -0
- package/dist/src/telemetry/sdk.test.js.map +1 -1
- package/dist/src/telemetry/semantic.d.ts +82 -0
- package/dist/src/telemetry/semantic.js +269 -0
- package/dist/src/telemetry/semantic.js.map +1 -0
- package/dist/src/telemetry/semantic.test.d.ts +6 -0
- package/dist/src/telemetry/semantic.test.js +387 -0
- package/dist/src/telemetry/semantic.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 +41 -0
- package/dist/src/telemetry/telemetry-utils.test.js.map +1 -0
- package/dist/src/telemetry/telemetryAttributes.d.ts +8 -0
- package/dist/src/telemetry/telemetryAttributes.js +19 -0
- package/dist/src/telemetry/telemetryAttributes.js.map +1 -0
- package/dist/src/telemetry/trace.d.ts +46 -0
- package/dist/src/telemetry/trace.js +121 -0
- package/dist/src/telemetry/trace.js.map +1 -0
- package/dist/src/telemetry/types.d.ts +351 -25
- package/dist/src/telemetry/types.js +1071 -63
- package/dist/src/telemetry/types.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.d.ts +4 -4
- package/dist/src/telemetry/uiTelemetry.js +14 -15
- package/dist/src/telemetry/uiTelemetry.js.map +1 -1
- package/dist/src/telemetry/uiTelemetry.test.js +122 -96
- package/dist/src/telemetry/uiTelemetry.test.js.map +1 -1
- package/dist/src/test-utils/config.d.ts +3 -2
- package/dist/src/test-utils/config.js +1 -1
- package/dist/src/test-utils/config.js.map +1 -1
- 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/{tools.js → mock-tool.js} +45 -29
- package/dist/src/test-utils/mock-tool.js.map +1 -0
- package/dist/src/test-utils/mockWorkspaceContext.d.ts +1 -1
- package/dist/src/tools/base-tool-invocation.test.d.ts +6 -0
- package/dist/src/tools/base-tool-invocation.test.js +85 -0
- package/dist/src/tools/base-tool-invocation.test.js.map +1 -0
- package/dist/src/tools/diffOptions.d.ts +1 -1
- package/dist/src/tools/diffOptions.js +21 -13
- package/dist/src/tools/diffOptions.js.map +1 -1
- package/dist/src/tools/diffOptions.test.js +58 -22
- package/dist/src/tools/diffOptions.test.js.map +1 -1
- package/dist/src/tools/edit.d.ts +10 -8
- package/dist/src/tools/edit.js +100 -79
- package/dist/src/tools/edit.js.map +1 -1
- package/dist/src/tools/edit.test.js +429 -163
- package/dist/src/tools/edit.test.js.map +1 -1
- package/dist/src/tools/glob.d.ts +11 -5
- package/dist/src/tools/glob.js +58 -42
- package/dist/src/tools/glob.js.map +1 -1
- package/dist/src/tools/glob.test.js +249 -166
- package/dist/src/tools/glob.test.js.map +1 -1
- package/dist/src/tools/grep.d.ts +7 -5
- package/dist/src/tools/grep.js +66 -40
- package/dist/src/tools/grep.js.map +1 -1
- package/dist/src/tools/grep.test.js +41 -15
- package/dist/src/tools/grep.test.js.map +1 -1
- package/dist/src/tools/ls.d.ts +7 -5
- package/dist/src/tools/ls.js +54 -68
- package/dist/src/tools/ls.js.map +1 -1
- package/dist/src/tools/ls.test.js +150 -293
- package/dist/src/tools/ls.test.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.d.ts +52 -12
- package/dist/src/tools/mcp-client-manager.js +196 -27
- package/dist/src/tools/mcp-client-manager.js.map +1 -1
- package/dist/src/tools/mcp-client-manager.test.js +139 -13
- package/dist/src/tools/mcp-client-manager.test.js.map +1 -1
- package/dist/src/tools/mcp-client.d.ts +28 -24
- package/dist/src/tools/mcp-client.js +338 -351
- package/dist/src/tools/mcp-client.js.map +1 -1
- package/dist/src/tools/mcp-client.test.js +380 -193
- package/dist/src/tools/mcp-client.test.js.map +1 -1
- package/dist/src/tools/mcp-tool.d.ts +11 -5
- package/dist/src/tools/mcp-tool.js +66 -17
- package/dist/src/tools/mcp-tool.js.map +1 -1
- package/dist/src/tools/mcp-tool.test.js +278 -211
- package/dist/src/tools/mcp-tool.test.js.map +1 -1
- package/dist/src/tools/memoryTool.d.ts +10 -7
- package/dist/src/tools/memoryTool.js +28 -49
- package/dist/src/tools/memoryTool.js.map +1 -1
- package/dist/src/tools/memoryTool.test.js +26 -13
- package/dist/src/tools/memoryTool.test.js.map +1 -1
- package/dist/src/tools/message-bus-integration.test.d.ts +6 -0
- package/dist/src/tools/message-bus-integration.test.js +196 -0
- package/dist/src/tools/message-bus-integration.test.js.map +1 -0
- package/dist/src/tools/modifiable-tool.d.ts +7 -3
- package/dist/src/tools/modifiable-tool.js +41 -19
- package/dist/src/tools/modifiable-tool.js.map +1 -1
- package/dist/src/tools/modifiable-tool.test.js +70 -35
- package/dist/src/tools/modifiable-tool.test.js.map +1 -1
- package/dist/src/tools/read-file.d.ts +9 -7
- package/dist/src/tools/read-file.js +39 -60
- package/dist/src/tools/read-file.js.map +1 -1
- package/dist/src/tools/read-file.test.js +103 -36
- package/dist/src/tools/read-file.test.js.map +1 -1
- package/dist/src/tools/read-many-files.d.ts +9 -14
- package/dist/src/tools/read-many-files.js +71 -155
- package/dist/src/tools/read-many-files.js.map +1 -1
- package/dist/src/tools/read-many-files.test.js +98 -44
- package/dist/src/tools/read-many-files.test.js.map +1 -1
- package/dist/src/tools/ripGrep.d.ts +73 -0
- package/dist/src/tools/ripGrep.js +395 -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 +1305 -0
- package/dist/src/tools/ripGrep.test.js.map +1 -0
- package/dist/src/tools/shell.d.ts +19 -6
- package/dist/src/tools/shell.js +92 -56
- package/dist/src/tools/shell.js.map +1 -1
- package/dist/src/tools/shell.test.js +176 -103
- package/dist/src/tools/shell.test.js.map +1 -1
- package/dist/src/tools/smart-edit.d.ts +78 -0
- package/dist/src/tools/smart-edit.js +717 -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 +592 -0
- package/dist/src/tools/smart-edit.test.js.map +1 -0
- package/dist/src/tools/tool-error.d.ts +39 -1
- package/dist/src/tools/tool-error.js +54 -0
- package/dist/src/tools/tool-error.js.map +1 -1
- package/dist/src/tools/tool-names.d.ts +17 -0
- package/dist/src/tools/tool-names.js +21 -0
- package/dist/src/tools/tool-names.js.map +1 -0
- package/dist/src/tools/tool-registry.d.ts +38 -20
- package/dist/src/tools/tool-registry.js +134 -77
- package/dist/src/tools/tool-registry.js.map +1 -1
- package/dist/src/tools/tool-registry.test.js +218 -58
- package/dist/src/tools/tool-registry.test.js.map +1 -1
- package/dist/src/tools/tools.d.ts +49 -17
- package/dist/src/tools/tools.js +150 -8
- package/dist/src/tools/tools.js.map +1 -1
- package/dist/src/tools/tools.test.js +1 -2
- package/dist/src/tools/tools.test.js.map +1 -1
- package/dist/src/tools/web-fetch.d.ts +14 -5
- package/dist/src/tools/web-fetch.js +90 -44
- package/dist/src/tools/web-fetch.js.map +1 -1
- package/dist/src/tools/web-fetch.test.js +388 -20
- package/dist/src/tools/web-fetch.test.js.map +1 -1
- package/dist/src/tools/web-search.d.ts +8 -6
- package/dist/src/tools/web-search.js +40 -15
- package/dist/src/tools/web-search.js.map +1 -1
- package/dist/src/tools/web-search.test.js +75 -1
- package/dist/src/tools/web-search.test.js.map +1 -1
- package/dist/src/tools/write-file.d.ts +7 -5
- package/dist/src/tools/write-file.js +54 -54
- package/dist/src/tools/write-file.js.map +1 -1
- package/dist/src/tools/write-file.test.js +237 -146
- package/dist/src/tools/write-file.test.js.map +1 -1
- package/dist/src/tools/write-todos.d.ts +50 -0
- package/dist/src/tools/write-todos.js +193 -0
- package/dist/src/tools/write-todos.js.map +1 -0
- package/dist/src/tools/write-todos.test.d.ts +6 -0
- package/dist/src/tools/write-todos.test.js +89 -0
- package/dist/src/tools/write-todos.test.js.map +1 -0
- package/dist/src/utils/bfsFileSearch.d.ts +2 -2
- package/dist/src/utils/bfsFileSearch.js +16 -9
- package/dist/src/utils/bfsFileSearch.js.map +1 -1
- package/dist/src/utils/bfsFileSearch.test.js +3 -3
- package/dist/src/utils/bfsFileSearch.test.js.map +1 -1
- package/dist/src/utils/channel.d.ts +19 -0
- package/dist/src/utils/channel.js +49 -0
- package/dist/src/utils/channel.js.map +1 -0
- package/dist/src/utils/channel.test.d.ts +6 -0
- package/dist/src/utils/channel.test.js +170 -0
- package/dist/src/utils/channel.test.js.map +1 -0
- package/dist/src/utils/debugLogger.d.ts +25 -0
- package/dist/src/utils/debugLogger.js +33 -0
- package/dist/src/utils/debugLogger.js.map +1 -0
- package/dist/src/utils/debugLogger.test.d.ts +6 -0
- package/dist/src/utils/debugLogger.test.js +69 -0
- package/dist/src/utils/debugLogger.test.js.map +1 -0
- package/dist/src/utils/delay.d.ts +16 -0
- package/dist/src/utils/delay.js +43 -0
- package/dist/src/utils/delay.js.map +1 -0
- package/dist/src/utils/delay.test.d.ts +6 -0
- package/dist/src/utils/delay.test.js +88 -0
- package/dist/src/utils/delay.test.js.map +1 -0
- package/dist/src/utils/editCorrector.d.ts +9 -8
- package/dist/src/utils/editCorrector.js +62 -34
- package/dist/src/utils/editCorrector.js.map +1 -1
- package/dist/src/utils/editCorrector.test.js +52 -87
- package/dist/src/utils/editCorrector.test.js.map +1 -1
- package/dist/src/utils/editor.d.ts +4 -2
- package/dist/src/utils/editor.js +56 -55
- package/dist/src/utils/editor.js.map +1 -1
- package/dist/src/utils/editor.test.js +47 -88
- package/dist/src/utils/editor.test.js.map +1 -1
- package/dist/src/utils/environmentContext.d.ts +3 -2
- package/dist/src/utils/environmentContext.js +20 -33
- package/dist/src/utils/environmentContext.js.map +1 -1
- package/dist/src/utils/environmentContext.test.js +6 -34
- package/dist/src/utils/environmentContext.test.js.map +1 -1
- package/dist/src/utils/errorParsing.d.ts +1 -1
- package/dist/src/utils/errorParsing.js +5 -33
- package/dist/src/utils/errorParsing.js.map +1 -1
- package/dist/src/utils/errorParsing.test.js +0 -88
- package/dist/src/utils/errorParsing.test.js.map +1 -1
- package/dist/src/utils/errorReporting.d.ts +1 -1
- package/dist/src/utils/errors.d.ts +28 -0
- package/dist/src/utils/errors.js +48 -0
- package/dist/src/utils/errors.js.map +1 -1
- package/dist/src/utils/events.d.ts +121 -0
- package/dist/src/utils/events.js +84 -0
- package/dist/src/utils/events.js.map +1 -0
- package/dist/src/utils/events.test.d.ts +6 -0
- package/dist/src/utils/events.test.js +212 -0
- package/dist/src/utils/events.test.js.map +1 -0
- package/dist/src/utils/extensionLoader.d.ts +86 -0
- package/dist/src/utils/extensionLoader.js +208 -0
- package/dist/src/utils/extensionLoader.js.map +1 -0
- package/dist/src/utils/extensionLoader.test.d.ts +6 -0
- package/dist/src/utils/extensionLoader.test.js +154 -0
- package/dist/src/utils/extensionLoader.test.js.map +1 -0
- package/dist/src/utils/fetch.d.ts +1 -0
- package/dist/src/utils/fetch.js +5 -1
- package/dist/src/utils/fetch.js.map +1 -1
- package/dist/src/utils/fileUtils.d.ts +28 -12
- package/dist/src/utils/fileUtils.js +204 -81
- package/dist/src/utils/fileUtils.js.map +1 -1
- package/dist/src/utils/fileUtils.test.js +426 -82
- package/dist/src/utils/fileUtils.test.js.map +1 -1
- package/dist/src/utils/filesearch/crawler.d.ts +1 -1
- package/dist/src/utils/filesearch/crawler.test.js +2 -2
- package/dist/src/utils/filesearch/crawler.test.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.d.ts +1 -0
- package/dist/src/utils/filesearch/fileSearch.js +14 -9
- package/dist/src/utils/filesearch/fileSearch.js.map +1 -1
- package/dist/src/utils/filesearch/fileSearch.test.js +90 -0
- package/dist/src/utils/filesearch/fileSearch.test.js.map +1 -1
- package/dist/src/utils/flashFallback.test.d.ts +6 -0
- package/dist/src/utils/flashFallback.test.js +103 -0
- package/dist/src/utils/flashFallback.test.js.map +1 -0
- package/dist/src/utils/formatters.d.ts +1 -0
- package/dist/src/utils/formatters.js +2 -1
- package/dist/src/utils/formatters.js.map +1 -1
- package/dist/src/utils/formatters.test.d.ts +6 -0
- package/dist/src/utils/formatters.test.js +26 -0
- package/dist/src/utils/formatters.test.js.map +1 -0
- package/dist/src/utils/geminiIgnoreParser.d.ts +18 -0
- package/dist/src/utils/geminiIgnoreParser.js +61 -0
- package/dist/src/utils/geminiIgnoreParser.js.map +1 -0
- package/dist/src/utils/geminiIgnoreParser.test.d.ts +6 -0
- package/dist/src/utils/geminiIgnoreParser.test.js +50 -0
- package/dist/src/utils/geminiIgnoreParser.test.js.map +1 -0
- package/dist/src/utils/generateContentResponseUtilities.d.ts +1 -2
- package/dist/src/utils/generateContentResponseUtilities.js +1 -13
- package/dist/src/utils/generateContentResponseUtilities.js.map +1 -1
- package/dist/src/utils/generateContentResponseUtilities.test.js +2 -40
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +1 -1
- package/dist/src/utils/getFolderStructure.d.ts +2 -2
- package/dist/src/utils/getFolderStructure.js +12 -20
- package/dist/src/utils/getFolderStructure.js.map +1 -1
- package/dist/src/utils/getFolderStructure.test.js +11 -10
- package/dist/src/utils/getFolderStructure.test.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.d.ts +7 -8
- package/dist/src/utils/gitIgnoreParser.js +145 -36
- package/dist/src/utils/gitIgnoreParser.js.map +1 -1
- package/dist/src/utils/gitIgnoreParser.test.js +127 -38
- package/dist/src/utils/gitIgnoreParser.test.js.map +1 -1
- package/dist/src/utils/gitUtils.js +2 -2
- package/dist/src/utils/gitUtils.js.map +1 -1
- package/dist/src/utils/googleErrors.d.ts +104 -0
- package/dist/src/utils/googleErrors.js +152 -0
- package/dist/src/utils/googleErrors.js.map +1 -0
- package/dist/src/utils/googleErrors.test.d.ts +6 -0
- package/dist/src/utils/googleErrors.test.js +301 -0
- package/dist/src/utils/googleErrors.test.js.map +1 -0
- package/dist/src/utils/googleQuotaErrors.d.ts +37 -0
- package/dist/src/utils/googleQuotaErrors.js +157 -0
- package/dist/src/utils/googleQuotaErrors.js.map +1 -0
- package/dist/src/utils/googleQuotaErrors.test.d.ts +6 -0
- package/dist/src/utils/googleQuotaErrors.test.js +311 -0
- package/dist/src/utils/googleQuotaErrors.test.js.map +1 -0
- package/dist/src/utils/httpErrors.d.ts +18 -0
- package/dist/src/utils/httpErrors.js +36 -0
- package/dist/src/utils/httpErrors.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 +246 -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 +51 -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 +85 -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 +155 -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 +223 -0
- package/dist/src/utils/llm-edit-fixer.test.js.map +1 -0
- package/dist/src/utils/memoryDiscovery.d.ts +26 -6
- package/dist/src/utils/memoryDiscovery.js +239 -40
- package/dist/src/utils/memoryDiscovery.js.map +1 -1
- package/dist/src/utils/memoryDiscovery.test.js +365 -44
- package/dist/src/utils/memoryDiscovery.test.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.js +19 -25
- package/dist/src/utils/memoryImportProcessor.js.map +1 -1
- package/dist/src/utils/memoryImportProcessor.test.js +24 -155
- package/dist/src/utils/memoryImportProcessor.test.js.map +1 -1
- package/dist/src/utils/messageInspectors.d.ts +1 -1
- package/dist/src/utils/nextSpeakerChecker.d.ts +3 -3
- package/dist/src/utils/nextSpeakerChecker.js +10 -4
- package/dist/src/utils/nextSpeakerChecker.js.map +1 -1
- package/dist/src/utils/nextSpeakerChecker.test.js +85 -66
- package/dist/src/utils/nextSpeakerChecker.test.js.map +1 -1
- package/dist/src/utils/package.d.ts +12 -0
- package/dist/src/utils/package.js +15 -0
- package/dist/src/utils/package.js.map +1 -0
- package/dist/src/utils/partUtils.d.ts +22 -1
- package/dist/src/utils/partUtils.js +68 -0
- package/dist/src/utils/partUtils.js.map +1 -1
- package/dist/src/utils/partUtils.test.js +112 -1
- package/dist/src/utils/partUtils.test.js.map +1 -1
- package/dist/src/utils/pathCorrector.d.ts +25 -0
- package/dist/src/utils/pathCorrector.js +33 -0
- package/dist/src/utils/pathCorrector.js.map +1 -0
- package/dist/src/utils/pathCorrector.test.d.ts +6 -0
- package/dist/src/utils/pathCorrector.test.js +83 -0
- package/dist/src/utils/pathCorrector.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 +406 -0
- package/dist/src/utils/pathReader.test.js.map +1 -0
- package/dist/src/utils/paths.d.ts +1 -18
- package/dist/src/utils/paths.js +133 -57
- package/dist/src/utils/paths.js.map +1 -1
- package/dist/src/utils/paths.test.js +200 -68
- package/dist/src/utils/paths.test.js.map +1 -1
- 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 +1 -3
- package/dist/src/utils/quotaErrorDetection.js +0 -46
- package/dist/src/utils/quotaErrorDetection.js.map +1 -1
- package/dist/src/utils/retry.d.ts +5 -10
- package/dist/src/utils/retry.js +114 -197
- package/dist/src/utils/retry.js.map +1 -1
- package/dist/src/utils/retry.test.js +196 -130
- package/dist/src/utils/retry.test.js.map +1 -1
- package/dist/src/utils/safeJsonStringify.d.ts +4 -4
- package/dist/src/utils/safeJsonStringify.js +31 -7
- package/dist/src/utils/safeJsonStringify.js.map +1 -1
- package/dist/src/utils/schemaValidator.js +15 -1
- package/dist/src/utils/schemaValidator.js.map +1 -1
- 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/session.js +1 -1
- package/dist/src/utils/session.js.map +1 -1
- package/dist/src/utils/shell-utils.d.ts +21 -3
- package/dist/src/utils/shell-utils.js +427 -159
- package/dist/src/utils/shell-utils.js.map +1 -1
- package/dist/src/utils/shell-utils.test.js +250 -59
- package/dist/src/utils/shell-utils.test.js.map +1 -1
- package/dist/src/utils/stdio.d.ts +32 -0
- package/dist/src/utils/stdio.js +85 -0
- package/dist/src/utils/stdio.js.map +1 -0
- package/dist/src/utils/stdio.test.d.ts +6 -0
- package/dist/src/utils/stdio.test.js +47 -0
- package/dist/src/utils/stdio.test.js.map +1 -0
- package/dist/src/utils/summarizer.d.ts +6 -4
- package/dist/src/utils/summarizer.js +8 -9
- package/dist/src/utils/summarizer.js.map +1 -1
- package/dist/src/utils/summarizer.test.js +32 -12
- package/dist/src/utils/summarizer.test.js.map +1 -1
- package/dist/src/utils/systemEncoding.js +7 -6
- package/dist/src/utils/systemEncoding.js.map +1 -1
- package/dist/src/utils/systemEncoding.test.js +4 -3
- package/dist/src/utils/systemEncoding.test.js.map +1 -1
- package/dist/src/utils/terminal.d.ts +14 -0
- package/dist/src/utils/terminal.js +38 -0
- package/dist/src/utils/terminal.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/textUtils.d.ts +5 -0
- package/dist/src/utils/textUtils.js +14 -0
- package/dist/src/utils/textUtils.js.map +1 -1
- 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 +19 -0
- package/dist/src/utils/tool-utils.js +67 -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 +69 -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 +115 -0
- package/dist/src/utils/userAccountManager.js.map +1 -0
- package/dist/src/utils/userAccountManager.test.d.ts +6 -0
- package/dist/src/utils/{user_account.test.js → userAccountManager.test.js} +41 -36
- package/dist/src/utils/userAccountManager.test.js.map +1 -0
- package/dist/src/utils/workspaceContext.d.ts +4 -3
- package/dist/src/utils/workspaceContext.js +23 -17
- package/dist/src/utils/workspaceContext.js.map +1 -1
- package/dist/src/utils/workspaceContext.test.js +45 -19
- package/dist/src/utils/workspaceContext.test.js.map +1 -1
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/package.json +24 -10
- package/dist/src/core/modelCheck.d.ts +0 -14
- package/dist/src/core/modelCheck.js +0 -62
- package/dist/src/core/modelCheck.js.map +0 -1
- package/dist/src/test-utils/tools.d.ts +0 -44
- package/dist/src/test-utils/tools.js.map +0 -1
- package/dist/src/utils/flashFallback.integration.test.js +0 -118
- package/dist/src/utils/flashFallback.integration.test.js.map +0 -1
- package/dist/src/utils/user_account.d.ts +0 -9
- package/dist/src/utils/user_account.js +0 -109
- package/dist/src/utils/user_account.js.map +0 -1
- package/dist/src/utils/user_account.test.js.map +0 -1
- package/dist/src/utils/user_id.d.ts +0 -11
- package/dist/src/utils/user_id.js +0 -49
- package/dist/src/utils/user_id.js.map +0 -1
- package/dist/src/utils/user_id.test.js +0 -21
- package/dist/src/utils/user_id.test.js.map +0 -1
- /package/dist/src/{utils/flashFallback.integration.test.d.ts → agents/codebase-investigator.test.d.ts} +0 -0
- /package/dist/src/{utils/user_account.test.d.ts → agents/executor.test.d.ts} +0 -0
- /package/dist/src/{utils/user_id.test.d.ts → agents/invocation.test.d.ts} +0 -0
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* @license
|
|
3
|
+
* Copyright 2025 Google LLC
|
|
4
|
+
* SPDX-License-Identifier: Apache-2.0
|
|
5
|
+
*/
|
|
6
|
+
import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest';
|
|
7
|
+
import { FixLLMEditWithInstruction, resetLlmEditFixerCaches_TEST_ONLY, } from './llm-edit-fixer.js';
|
|
8
|
+
import { promptIdContext } from './promptIdContext.js';
|
|
9
|
+
import { debugLogger } from './debugLogger.js';
|
|
10
|
+
// Mock the BaseLlmClient
|
|
11
|
+
const mockGenerateJson = vi.fn();
|
|
12
|
+
const mockBaseLlmClient = {
|
|
13
|
+
generateJson: mockGenerateJson,
|
|
14
|
+
config: {
|
|
15
|
+
generationConfigService: {
|
|
16
|
+
getResolvedConfig: vi.fn().mockReturnValue({
|
|
17
|
+
model: 'edit-corrector',
|
|
18
|
+
generateContentConfig: {},
|
|
19
|
+
}),
|
|
20
|
+
},
|
|
21
|
+
},
|
|
22
|
+
};
|
|
23
|
+
describe('FixLLMEditWithInstruction', () => {
|
|
24
|
+
const instruction = 'Replace the title';
|
|
25
|
+
const old_string = '<h1>Old Title</h1>';
|
|
26
|
+
const new_string = '<h1>New Title</h1>';
|
|
27
|
+
const error = 'String not found';
|
|
28
|
+
const current_content = '<body><h1>Old Title</h1></body>';
|
|
29
|
+
const abortController = new AbortController();
|
|
30
|
+
const abortSignal = abortController.signal;
|
|
31
|
+
beforeEach(() => {
|
|
32
|
+
vi.useFakeTimers();
|
|
33
|
+
vi.clearAllMocks();
|
|
34
|
+
// Mock AbortSignal.timeout to use setTimeout so it respects fake timers
|
|
35
|
+
vi.spyOn(AbortSignal, 'timeout').mockImplementation((ms) => {
|
|
36
|
+
const controller = new AbortController();
|
|
37
|
+
setTimeout(() => controller.abort(new DOMException('TimeoutError', 'TimeoutError')), ms);
|
|
38
|
+
return controller.signal;
|
|
39
|
+
});
|
|
40
|
+
resetLlmEditFixerCaches_TEST_ONLY(); // Ensure cache is cleared before each test
|
|
41
|
+
});
|
|
42
|
+
afterEach(() => {
|
|
43
|
+
vi.useRealTimers(); // Reset timers after each test
|
|
44
|
+
vi.restoreAllMocks();
|
|
45
|
+
});
|
|
46
|
+
const mockApiResponse = {
|
|
47
|
+
search: '<h1>Old Title</h1>',
|
|
48
|
+
replace: '<h1>New Title</h1>',
|
|
49
|
+
noChangesRequired: false,
|
|
50
|
+
explanation: 'The original search was correct.',
|
|
51
|
+
};
|
|
52
|
+
it('should use the promptId from the AsyncLocalStorage context when available', async () => {
|
|
53
|
+
const testPromptId = 'test-prompt-id-12345';
|
|
54
|
+
mockGenerateJson.mockResolvedValue(mockApiResponse);
|
|
55
|
+
await promptIdContext.run(testPromptId, async () => {
|
|
56
|
+
await FixLLMEditWithInstruction(instruction, old_string, new_string, error, current_content, mockBaseLlmClient, abortSignal);
|
|
57
|
+
});
|
|
58
|
+
// Verify that generateJson was called with the promptId from the context
|
|
59
|
+
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
60
|
+
expect(mockGenerateJson).toHaveBeenCalledWith(expect.objectContaining({
|
|
61
|
+
promptId: testPromptId,
|
|
62
|
+
}));
|
|
63
|
+
});
|
|
64
|
+
it('should generate and use a fallback promptId when context is not available', async () => {
|
|
65
|
+
mockGenerateJson.mockResolvedValue(mockApiResponse);
|
|
66
|
+
const consoleWarnSpy = vi
|
|
67
|
+
.spyOn(debugLogger, 'warn')
|
|
68
|
+
.mockImplementation(() => { });
|
|
69
|
+
// Run the function outside of any context
|
|
70
|
+
await FixLLMEditWithInstruction(instruction, old_string, new_string, error, current_content, mockBaseLlmClient, abortSignal);
|
|
71
|
+
// Verify the warning was logged
|
|
72
|
+
expect(consoleWarnSpy).toHaveBeenCalledWith(expect.stringContaining('Could not find promptId in context. This is unexpected. Using a fallback ID: llm-fixer-fallback-'));
|
|
73
|
+
// Verify that generateJson was called with the generated fallback promptId
|
|
74
|
+
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
75
|
+
expect(mockGenerateJson).toHaveBeenCalledWith(expect.objectContaining({
|
|
76
|
+
promptId: expect.stringContaining('llm-fixer-fallback-'),
|
|
77
|
+
}));
|
|
78
|
+
// Restore mocks
|
|
79
|
+
consoleWarnSpy.mockRestore();
|
|
80
|
+
});
|
|
81
|
+
it('should construct the user prompt correctly', async () => {
|
|
82
|
+
mockGenerateJson.mockResolvedValue(mockApiResponse);
|
|
83
|
+
const promptId = 'test-prompt-id-prompt-construction';
|
|
84
|
+
await promptIdContext.run(promptId, async () => {
|
|
85
|
+
await FixLLMEditWithInstruction(instruction, old_string, new_string, error, current_content, mockBaseLlmClient, abortSignal);
|
|
86
|
+
});
|
|
87
|
+
const generateJsonCall = mockGenerateJson.mock.calls[0][0];
|
|
88
|
+
const userPromptContent = generateJsonCall.contents[0].parts[0].text;
|
|
89
|
+
expect(userPromptContent).toContain(`<instruction>\n${instruction}\n</instruction>`);
|
|
90
|
+
expect(userPromptContent).toContain(`<search>\n${old_string}\n</search>`);
|
|
91
|
+
expect(userPromptContent).toContain(`<replace>\n${new_string}\n</replace>`);
|
|
92
|
+
expect(userPromptContent).toContain(`<error>\n${error}\n</error>`);
|
|
93
|
+
expect(userPromptContent).toContain(`<file_content>\n${current_content}\n</file_content>`);
|
|
94
|
+
});
|
|
95
|
+
it('should return a cached result on subsequent identical calls', async () => {
|
|
96
|
+
mockGenerateJson.mockResolvedValue(mockApiResponse);
|
|
97
|
+
const testPromptId = 'test-prompt-id-caching';
|
|
98
|
+
await promptIdContext.run(testPromptId, async () => {
|
|
99
|
+
// First call - should call the API
|
|
100
|
+
const result1 = await FixLLMEditWithInstruction(instruction, old_string, new_string, error, current_content, mockBaseLlmClient, abortSignal);
|
|
101
|
+
// Second call with identical parameters - should hit the cache
|
|
102
|
+
const result2 = await FixLLMEditWithInstruction(instruction, old_string, new_string, error, current_content, mockBaseLlmClient, abortSignal);
|
|
103
|
+
expect(result1).toEqual(mockApiResponse);
|
|
104
|
+
expect(result2).toEqual(mockApiResponse);
|
|
105
|
+
// Verify the underlying service was only called ONCE
|
|
106
|
+
expect(mockGenerateJson).toHaveBeenCalledTimes(1);
|
|
107
|
+
});
|
|
108
|
+
});
|
|
109
|
+
it('should not use cache for calls with different parameters', async () => {
|
|
110
|
+
mockGenerateJson.mockResolvedValue(mockApiResponse);
|
|
111
|
+
const testPromptId = 'test-prompt-id-cache-miss';
|
|
112
|
+
await promptIdContext.run(testPromptId, async () => {
|
|
113
|
+
// First call
|
|
114
|
+
await FixLLMEditWithInstruction(instruction, old_string, new_string, error, current_content, mockBaseLlmClient, abortSignal);
|
|
115
|
+
// Second call with a different instruction
|
|
116
|
+
await FixLLMEditWithInstruction('A different instruction', old_string, new_string, error, current_content, mockBaseLlmClient, abortSignal);
|
|
117
|
+
// Verify the underlying service was called TWICE
|
|
118
|
+
expect(mockGenerateJson).toHaveBeenCalledTimes(2);
|
|
119
|
+
});
|
|
120
|
+
});
|
|
121
|
+
describe('cache collision prevention', () => {
|
|
122
|
+
it('should prevent cache collisions when parameters contain separator sequences', async () => {
|
|
123
|
+
// This test would have failed with the old string concatenation approach
|
|
124
|
+
// but passes with JSON.stringify implementation
|
|
125
|
+
const firstResponse = {
|
|
126
|
+
search: 'original text',
|
|
127
|
+
replace: 'first replacement',
|
|
128
|
+
noChangesRequired: false,
|
|
129
|
+
explanation: 'First edit correction',
|
|
130
|
+
};
|
|
131
|
+
const secondResponse = {
|
|
132
|
+
search: 'different text',
|
|
133
|
+
replace: 'second replacement',
|
|
134
|
+
noChangesRequired: false,
|
|
135
|
+
explanation: 'Second edit correction',
|
|
136
|
+
};
|
|
137
|
+
mockGenerateJson
|
|
138
|
+
.mockResolvedValueOnce(firstResponse)
|
|
139
|
+
.mockResolvedValueOnce(secondResponse);
|
|
140
|
+
const testPromptId = 'cache-collision-test';
|
|
141
|
+
await promptIdContext.run(testPromptId, async () => {
|
|
142
|
+
// Scenario 1: Parameters that would create collision with string concatenation
|
|
143
|
+
// Cache key with old method would be: "Fix YAML---content---update--some---data--error"
|
|
144
|
+
const call1 = await FixLLMEditWithInstruction('Fix YAML', // instruction
|
|
145
|
+
'content', // old_string
|
|
146
|
+
'update--some', // new_string (contains --)
|
|
147
|
+
'data', // current_content
|
|
148
|
+
'error', // error
|
|
149
|
+
mockBaseLlmClient, abortSignal);
|
|
150
|
+
// Scenario 2: Different parameters that would create same cache key with concatenation
|
|
151
|
+
// Cache key with old method would be: "Fix YAML---content---update--some---data--error"
|
|
152
|
+
const call2 = await FixLLMEditWithInstruction('Fix YAML---content---update', // instruction (contains ---)
|
|
153
|
+
'some---data', // old_string (contains ---)
|
|
154
|
+
'error', // new_string
|
|
155
|
+
'', // current_content
|
|
156
|
+
'', // error
|
|
157
|
+
mockBaseLlmClient, abortSignal);
|
|
158
|
+
// With the fixed JSON.stringify approach, these should be different
|
|
159
|
+
// and each should get its own LLM response
|
|
160
|
+
expect(call1).toEqual(firstResponse);
|
|
161
|
+
expect(call2).toEqual(secondResponse);
|
|
162
|
+
expect(call1).not.toEqual(call2);
|
|
163
|
+
// Most importantly: the LLM should be called TWICE, not once
|
|
164
|
+
// (proving no cache collision occurred)
|
|
165
|
+
expect(mockGenerateJson).toHaveBeenCalledTimes(2);
|
|
166
|
+
});
|
|
167
|
+
});
|
|
168
|
+
it('should handle YAML frontmatter without cache collisions', async () => {
|
|
169
|
+
// Real-world test case with YAML frontmatter containing ---
|
|
170
|
+
const yamlResponse = {
|
|
171
|
+
search: '---\ntitle: Old\n---',
|
|
172
|
+
replace: '---\ntitle: New\n---',
|
|
173
|
+
noChangesRequired: false,
|
|
174
|
+
explanation: 'Updated YAML frontmatter',
|
|
175
|
+
};
|
|
176
|
+
const contentResponse = {
|
|
177
|
+
search: 'old content',
|
|
178
|
+
replace: 'new content',
|
|
179
|
+
noChangesRequired: false,
|
|
180
|
+
explanation: 'Updated content',
|
|
181
|
+
};
|
|
182
|
+
mockGenerateJson
|
|
183
|
+
.mockResolvedValueOnce(yamlResponse)
|
|
184
|
+
.mockResolvedValueOnce(contentResponse);
|
|
185
|
+
const testPromptId = 'yaml-frontmatter-test';
|
|
186
|
+
await promptIdContext.run(testPromptId, async () => {
|
|
187
|
+
// Call 1: Edit YAML frontmatter
|
|
188
|
+
const yamlEdit = await FixLLMEditWithInstruction('Update YAML frontmatter', '---\ntitle: Old\n---', // Contains ---
|
|
189
|
+
'---\ntitle: New\n---', // Contains ---
|
|
190
|
+
'Some markdown content', 'YAML parse error', mockBaseLlmClient, abortSignal);
|
|
191
|
+
// Call 2: Edit regular content
|
|
192
|
+
const contentEdit = await FixLLMEditWithInstruction('Update content', 'old content', 'new content', 'Different file content', 'Content not found', mockBaseLlmClient, abortSignal);
|
|
193
|
+
// Verify both calls succeeded with different results
|
|
194
|
+
expect(yamlEdit).toEqual(yamlResponse);
|
|
195
|
+
expect(contentEdit).toEqual(contentResponse);
|
|
196
|
+
expect(yamlEdit).not.toEqual(contentEdit);
|
|
197
|
+
// Verify no cache collision - both calls should hit the LLM
|
|
198
|
+
expect(mockGenerateJson).toHaveBeenCalledTimes(2);
|
|
199
|
+
});
|
|
200
|
+
});
|
|
201
|
+
});
|
|
202
|
+
it('should return null if the LLM call times out', async () => {
|
|
203
|
+
mockGenerateJson.mockImplementation(async ({ abortSignal }) =>
|
|
204
|
+
// Simulate a long-running operation that never resolves on its own.
|
|
205
|
+
// It will only reject when the abort signal is triggered by the timeout.
|
|
206
|
+
new Promise((_resolve, reject) => {
|
|
207
|
+
if (abortSignal?.aborted) {
|
|
208
|
+
return reject(new DOMException('Aborted', 'AbortError'));
|
|
209
|
+
}
|
|
210
|
+
abortSignal?.addEventListener('abort', () => {
|
|
211
|
+
reject(new DOMException('Aborted', 'AbortError'));
|
|
212
|
+
});
|
|
213
|
+
}));
|
|
214
|
+
const testPromptId = 'test-prompt-id-timeout';
|
|
215
|
+
const fixPromise = promptIdContext.run(testPromptId, () => FixLLMEditWithInstruction(instruction, old_string, new_string, error, current_content, mockBaseLlmClient, abortSignal));
|
|
216
|
+
// Let the timers advance just past the 40000ms default timeout.
|
|
217
|
+
await vi.advanceTimersByTimeAsync(40001);
|
|
218
|
+
const result = await fixPromise;
|
|
219
|
+
expect(result).toBeNull();
|
|
220
|
+
expect(mockGenerateJson).toHaveBeenCalledOnce();
|
|
221
|
+
});
|
|
222
|
+
});
|
|
223
|
+
//# sourceMappingURL=llm-edit-fixer.test.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"llm-edit-fixer.test.js","sourceRoot":"","sources":["../../../src/utils/llm-edit-fixer.test.ts"],"names":[],"mappings":"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"}
|
|
@@ -3,13 +3,33 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import { FileDiscoveryService } from '../services/fileDiscoveryService.js';
|
|
7
|
-
import { FileFilteringOptions } from '../config/
|
|
6
|
+
import type { FileDiscoveryService } from '../services/fileDiscoveryService.js';
|
|
7
|
+
import type { FileFilteringOptions } from '../config/constants.js';
|
|
8
|
+
import type { ExtensionLoader } from './extensionLoader.js';
|
|
9
|
+
import type { Config } from '../config/config.js';
|
|
10
|
+
export interface MemoryLoadResult {
|
|
11
|
+
files: Array<{
|
|
12
|
+
path: string;
|
|
13
|
+
content: string;
|
|
14
|
+
}>;
|
|
15
|
+
}
|
|
16
|
+
export declare function loadGlobalMemory(debugMode?: boolean): Promise<MemoryLoadResult>;
|
|
17
|
+
export declare function loadEnvironmentMemory(trustedRoots: string[], extensionLoader: ExtensionLoader, debugMode?: boolean): Promise<MemoryLoadResult>;
|
|
18
|
+
export interface LoadServerHierarchicalMemoryResponse {
|
|
19
|
+
memoryContent: string;
|
|
20
|
+
fileCount: number;
|
|
21
|
+
filePaths: string[];
|
|
22
|
+
}
|
|
8
23
|
/**
|
|
9
24
|
* Loads hierarchical GEMINI.md files and concatenates their content.
|
|
10
25
|
* This function is intended for use by the server.
|
|
11
26
|
*/
|
|
12
|
-
export declare function loadServerHierarchicalMemory(currentWorkingDirectory: string, includeDirectoriesToReadGemini: readonly string[], debugMode: boolean, fileService: FileDiscoveryService,
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
27
|
+
export declare function loadServerHierarchicalMemory(currentWorkingDirectory: string, includeDirectoriesToReadGemini: readonly string[], debugMode: boolean, fileService: FileDiscoveryService, extensionLoader: ExtensionLoader, folderTrust: boolean, importFormat?: 'flat' | 'tree', fileFilteringOptions?: FileFilteringOptions, maxDirs?: number): Promise<LoadServerHierarchicalMemoryResponse>;
|
|
28
|
+
/**
|
|
29
|
+
* Loads the hierarchical memory and resets the state of `config` as needed such
|
|
30
|
+
* that it reflects the new memory.
|
|
31
|
+
*
|
|
32
|
+
* Returns the result of the call to `loadHierarchicalGeminiMemory`.
|
|
33
|
+
*/
|
|
34
|
+
export declare function refreshServerHierarchicalMemory(config: Config): Promise<LoadServerHierarchicalMemoryResponse>;
|
|
35
|
+
export declare function loadJitSubdirectoryMemory(targetPath: string, trustedRoots: string[], alreadyLoadedPaths: Set<string>, debugMode?: boolean): Promise<MemoryLoadResult>;
|
|
@@ -3,21 +3,24 @@
|
|
|
3
3
|
* Copyright 2025 Google LLC
|
|
4
4
|
* SPDX-License-Identifier: Apache-2.0
|
|
5
5
|
*/
|
|
6
|
-
import * as fs from 'fs/promises';
|
|
7
|
-
import * as fsSync from 'fs';
|
|
8
|
-
import * as path from 'path';
|
|
9
|
-
import { homedir } from 'os';
|
|
6
|
+
import * as fs from 'node:fs/promises';
|
|
7
|
+
import * as fsSync from 'node:fs';
|
|
8
|
+
import * as path from 'node:path';
|
|
9
|
+
import { homedir } from 'node:os';
|
|
10
10
|
import { bfsFileSearch } from './bfsFileSearch.js';
|
|
11
|
-
import {
|
|
11
|
+
import { getAllGeminiMdFilenames } from '../tools/memoryTool.js';
|
|
12
12
|
import { processImports } from './memoryImportProcessor.js';
|
|
13
|
-
import { DEFAULT_MEMORY_FILE_FILTERING_OPTIONS
|
|
13
|
+
import { DEFAULT_MEMORY_FILE_FILTERING_OPTIONS } from '../config/constants.js';
|
|
14
|
+
import { GEMINI_DIR } from './paths.js';
|
|
15
|
+
import { debugLogger } from './debugLogger.js';
|
|
16
|
+
import { CoreEvent, coreEvents } from './events.js';
|
|
14
17
|
// Simple console logger, similar to the one previously in CLI's config.ts
|
|
15
18
|
// TODO: Integrate with a more robust server-side logger if available/appropriate.
|
|
16
19
|
const logger = {
|
|
17
20
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
18
|
-
debug: (...args) =>
|
|
21
|
+
debug: (...args) => debugLogger.debug('[DEBUG] [MemoryDiscovery]', ...args),
|
|
19
22
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
20
|
-
warn: (...args) =>
|
|
23
|
+
warn: (...args) => debugLogger.warn('[WARN] [MemoryDiscovery]', ...args),
|
|
21
24
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
22
25
|
error: (...args) => console.error('[ERROR] [MemoryDiscovery]', ...args),
|
|
23
26
|
};
|
|
@@ -58,24 +61,40 @@ async function findProjectRoot(startDir) {
|
|
|
58
61
|
currentDir = parentDir;
|
|
59
62
|
}
|
|
60
63
|
}
|
|
61
|
-
async function getGeminiMdFilePathsInternal(currentWorkingDirectory, includeDirectoriesToReadGemini, userHomePath, debugMode, fileService,
|
|
64
|
+
async function getGeminiMdFilePathsInternal(currentWorkingDirectory, includeDirectoriesToReadGemini, userHomePath, debugMode, fileService, folderTrust, fileFilteringOptions, maxDirs) {
|
|
62
65
|
const dirs = new Set([
|
|
63
66
|
...includeDirectoriesToReadGemini,
|
|
64
67
|
currentWorkingDirectory,
|
|
65
68
|
]);
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
69
|
+
// Process directories in parallel with concurrency limit to prevent EMFILE errors
|
|
70
|
+
const CONCURRENT_LIMIT = 10;
|
|
71
|
+
const dirsArray = Array.from(dirs);
|
|
72
|
+
const pathsArrays = [];
|
|
73
|
+
for (let i = 0; i < dirsArray.length; i += CONCURRENT_LIMIT) {
|
|
74
|
+
const batch = dirsArray.slice(i, i + CONCURRENT_LIMIT);
|
|
75
|
+
const batchPromises = batch.map((dir) => getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMode, fileService, folderTrust, fileFilteringOptions, maxDirs));
|
|
76
|
+
const batchResults = await Promise.allSettled(batchPromises);
|
|
77
|
+
for (const result of batchResults) {
|
|
78
|
+
if (result.status === 'fulfilled') {
|
|
79
|
+
pathsArrays.push(result.value);
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
const error = result.reason;
|
|
83
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
84
|
+
logger.error(`Error discovering files in directory: ${message}`);
|
|
85
|
+
// Continue processing other directories
|
|
86
|
+
}
|
|
87
|
+
}
|
|
70
88
|
}
|
|
89
|
+
const paths = pathsArrays.flat();
|
|
71
90
|
return Array.from(new Set(paths));
|
|
72
91
|
}
|
|
73
|
-
async function getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMode, fileService,
|
|
92
|
+
async function getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMode, fileService, folderTrust, fileFilteringOptions, maxDirs) {
|
|
74
93
|
const allPaths = new Set();
|
|
75
94
|
const geminiMdFilenames = getAllGeminiMdFilenames();
|
|
76
95
|
for (const geminiMdFilename of geminiMdFilenames) {
|
|
77
96
|
const resolvedHome = path.resolve(userHomePath);
|
|
78
|
-
const globalMemoryPath = path.join(resolvedHome,
|
|
97
|
+
const globalMemoryPath = path.join(resolvedHome, GEMINI_DIR, geminiMdFilename);
|
|
79
98
|
// This part that finds the global file always runs.
|
|
80
99
|
try {
|
|
81
100
|
await fs.access(globalMemoryPath, fsSync.constants.R_OK);
|
|
@@ -88,7 +107,7 @@ async function getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMo
|
|
|
88
107
|
}
|
|
89
108
|
// FIX: Only perform the workspace search (upward and downward scans)
|
|
90
109
|
// if a valid currentWorkingDirectory is provided.
|
|
91
|
-
if (dir) {
|
|
110
|
+
if (dir && folderTrust) {
|
|
92
111
|
const resolvedCwd = path.resolve(dir);
|
|
93
112
|
if (debugMode)
|
|
94
113
|
logger.debug(`Searching for ${geminiMdFilename} starting from CWD: ${resolvedCwd}`);
|
|
@@ -101,7 +120,7 @@ async function getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMo
|
|
|
101
120
|
? path.dirname(projectRoot)
|
|
102
121
|
: path.dirname(resolvedHome);
|
|
103
122
|
while (currentDir && currentDir !== path.dirname(currentDir)) {
|
|
104
|
-
if (currentDir === path.join(resolvedHome,
|
|
123
|
+
if (currentDir === path.join(resolvedHome, GEMINI_DIR)) {
|
|
105
124
|
break;
|
|
106
125
|
}
|
|
107
126
|
const potentialPath = path.join(currentDir, geminiMdFilename);
|
|
@@ -137,35 +156,49 @@ async function getGeminiMdFilePathsInternalForEachDir(dir, userHomePath, debugMo
|
|
|
137
156
|
}
|
|
138
157
|
}
|
|
139
158
|
}
|
|
140
|
-
// Add extension context file paths.
|
|
141
|
-
for (const extensionPath of extensionContextFilePaths) {
|
|
142
|
-
allPaths.add(extensionPath);
|
|
143
|
-
}
|
|
144
159
|
const finalPaths = Array.from(allPaths);
|
|
145
160
|
if (debugMode)
|
|
146
161
|
logger.debug(`Final ordered ${getAllGeminiMdFilenames()} paths to read: ${JSON.stringify(finalPaths)}`);
|
|
147
162
|
return finalPaths;
|
|
148
163
|
}
|
|
149
164
|
async function readGeminiMdFiles(filePaths, debugMode, importFormat = 'tree') {
|
|
165
|
+
// Process files in parallel with concurrency limit to prevent EMFILE errors
|
|
166
|
+
const CONCURRENT_LIMIT = 20; // Higher limit for file reads as they're typically faster
|
|
150
167
|
const results = [];
|
|
151
|
-
for (
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
168
|
+
for (let i = 0; i < filePaths.length; i += CONCURRENT_LIMIT) {
|
|
169
|
+
const batch = filePaths.slice(i, i + CONCURRENT_LIMIT);
|
|
170
|
+
const batchPromises = batch.map(async (filePath) => {
|
|
171
|
+
try {
|
|
172
|
+
const content = await fs.readFile(filePath, 'utf-8');
|
|
173
|
+
// Process imports in the content
|
|
174
|
+
const processedResult = await processImports(content, path.dirname(filePath), debugMode, undefined, undefined, importFormat);
|
|
175
|
+
if (debugMode)
|
|
176
|
+
logger.debug(`Successfully read and processed imports: ${filePath} (Length: ${processedResult.content.length})`);
|
|
177
|
+
return { filePath, content: processedResult.content };
|
|
178
|
+
}
|
|
179
|
+
catch (error) {
|
|
180
|
+
const isTestEnv = process.env['NODE_ENV'] === 'test' || process.env['VITEST'];
|
|
181
|
+
if (!isTestEnv) {
|
|
182
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
183
|
+
logger.warn(`Warning: Could not read ${getAllGeminiMdFilenames()} file at ${filePath}. Error: ${message}`);
|
|
184
|
+
}
|
|
185
|
+
if (debugMode)
|
|
186
|
+
logger.debug(`Failed to read: ${filePath}`);
|
|
187
|
+
return { filePath, content: null }; // Still include it with null content
|
|
188
|
+
}
|
|
189
|
+
});
|
|
190
|
+
const batchResults = await Promise.allSettled(batchPromises);
|
|
191
|
+
for (const result of batchResults) {
|
|
192
|
+
if (result.status === 'fulfilled') {
|
|
193
|
+
results.push(result.value);
|
|
194
|
+
}
|
|
195
|
+
else {
|
|
196
|
+
// This case shouldn't happen since we catch all errors above,
|
|
197
|
+
// but handle it for completeness
|
|
198
|
+
const error = result.reason;
|
|
163
199
|
const message = error instanceof Error ? error.message : String(error);
|
|
164
|
-
logger.
|
|
200
|
+
logger.error(`Unexpected error processing file: ${message}`);
|
|
165
201
|
}
|
|
166
|
-
results.push({ filePath, content: null }); // Still include it with null content
|
|
167
|
-
if (debugMode)
|
|
168
|
-
logger.debug(`Failed to read: ${filePath}`);
|
|
169
202
|
}
|
|
170
203
|
}
|
|
171
204
|
return results;
|
|
@@ -188,21 +221,130 @@ currentWorkingDirectoryForDisplay) {
|
|
|
188
221
|
.filter((block) => block !== null)
|
|
189
222
|
.join('\n\n');
|
|
190
223
|
}
|
|
224
|
+
export async function loadGlobalMemory(debugMode = false) {
|
|
225
|
+
const userHome = homedir();
|
|
226
|
+
const geminiMdFilenames = getAllGeminiMdFilenames();
|
|
227
|
+
const accessChecks = geminiMdFilenames.map(async (filename) => {
|
|
228
|
+
const globalPath = path.join(userHome, GEMINI_DIR, filename);
|
|
229
|
+
try {
|
|
230
|
+
await fs.access(globalPath, fsSync.constants.R_OK);
|
|
231
|
+
if (debugMode) {
|
|
232
|
+
logger.debug(`Found global memory file: ${globalPath}`);
|
|
233
|
+
}
|
|
234
|
+
return globalPath;
|
|
235
|
+
}
|
|
236
|
+
catch {
|
|
237
|
+
debugLogger.debug('A global memory file was not found.');
|
|
238
|
+
return null;
|
|
239
|
+
}
|
|
240
|
+
});
|
|
241
|
+
const foundPaths = (await Promise.all(accessChecks)).filter((p) => p !== null);
|
|
242
|
+
const contents = await readGeminiMdFiles(foundPaths, debugMode, 'tree');
|
|
243
|
+
return {
|
|
244
|
+
files: contents
|
|
245
|
+
.filter((item) => item.content !== null)
|
|
246
|
+
.map((item) => ({
|
|
247
|
+
path: item.filePath,
|
|
248
|
+
content: item.content,
|
|
249
|
+
})),
|
|
250
|
+
};
|
|
251
|
+
}
|
|
252
|
+
/**
|
|
253
|
+
* Traverses upward from startDir to stopDir, finding all GEMINI.md variants.
|
|
254
|
+
*
|
|
255
|
+
* Files are ordered by directory level (root to leaf), with all filename
|
|
256
|
+
* variants grouped together per directory.
|
|
257
|
+
*/
|
|
258
|
+
async function findUpwardGeminiFiles(startDir, stopDir, debugMode) {
|
|
259
|
+
const upwardPaths = [];
|
|
260
|
+
let currentDir = path.resolve(startDir);
|
|
261
|
+
const resolvedStopDir = path.resolve(stopDir);
|
|
262
|
+
const geminiMdFilenames = getAllGeminiMdFilenames();
|
|
263
|
+
const globalGeminiDir = path.join(homedir(), GEMINI_DIR);
|
|
264
|
+
if (debugMode) {
|
|
265
|
+
logger.debug(`Starting upward search from ${currentDir} stopping at ${resolvedStopDir}`);
|
|
266
|
+
}
|
|
267
|
+
while (true) {
|
|
268
|
+
if (currentDir === globalGeminiDir) {
|
|
269
|
+
break;
|
|
270
|
+
}
|
|
271
|
+
// Parallelize checks for all filename variants in the current directory
|
|
272
|
+
const accessChecks = geminiMdFilenames.map(async (filename) => {
|
|
273
|
+
const potentialPath = path.join(currentDir, filename);
|
|
274
|
+
try {
|
|
275
|
+
await fs.access(potentialPath, fsSync.constants.R_OK);
|
|
276
|
+
return potentialPath;
|
|
277
|
+
}
|
|
278
|
+
catch {
|
|
279
|
+
return null;
|
|
280
|
+
}
|
|
281
|
+
});
|
|
282
|
+
const foundPathsInDir = (await Promise.all(accessChecks)).filter((p) => p !== null);
|
|
283
|
+
upwardPaths.unshift(...foundPathsInDir);
|
|
284
|
+
if (currentDir === resolvedStopDir ||
|
|
285
|
+
currentDir === path.dirname(currentDir)) {
|
|
286
|
+
break;
|
|
287
|
+
}
|
|
288
|
+
currentDir = path.dirname(currentDir);
|
|
289
|
+
}
|
|
290
|
+
return upwardPaths;
|
|
291
|
+
}
|
|
292
|
+
export async function loadEnvironmentMemory(trustedRoots, extensionLoader, debugMode = false) {
|
|
293
|
+
const allPaths = new Set();
|
|
294
|
+
// Trusted Roots Upward Traversal (Parallelized)
|
|
295
|
+
const traversalPromises = trustedRoots.map(async (root) => {
|
|
296
|
+
const resolvedRoot = path.resolve(root);
|
|
297
|
+
if (debugMode) {
|
|
298
|
+
logger.debug(`Loading environment memory for trusted root: ${resolvedRoot} (Stopping exactly here)`);
|
|
299
|
+
}
|
|
300
|
+
return await findUpwardGeminiFiles(resolvedRoot, resolvedRoot, debugMode);
|
|
301
|
+
});
|
|
302
|
+
const pathArrays = await Promise.all(traversalPromises);
|
|
303
|
+
pathArrays.flat().forEach((p) => allPaths.add(p));
|
|
304
|
+
// Extensions
|
|
305
|
+
const extensionPaths = extensionLoader
|
|
306
|
+
.getExtensions()
|
|
307
|
+
.filter((ext) => ext.isActive)
|
|
308
|
+
.flatMap((ext) => ext.contextFiles);
|
|
309
|
+
extensionPaths.forEach((p) => allPaths.add(p));
|
|
310
|
+
const sortedPaths = Array.from(allPaths).sort();
|
|
311
|
+
const contents = await readGeminiMdFiles(sortedPaths, debugMode, 'tree');
|
|
312
|
+
return {
|
|
313
|
+
files: contents
|
|
314
|
+
.filter((item) => item.content !== null)
|
|
315
|
+
.map((item) => ({
|
|
316
|
+
path: item.filePath,
|
|
317
|
+
content: item.content,
|
|
318
|
+
})),
|
|
319
|
+
};
|
|
320
|
+
}
|
|
191
321
|
/**
|
|
192
322
|
* Loads hierarchical GEMINI.md files and concatenates their content.
|
|
193
323
|
* This function is intended for use by the server.
|
|
194
324
|
*/
|
|
195
|
-
export async function loadServerHierarchicalMemory(currentWorkingDirectory, includeDirectoriesToReadGemini, debugMode, fileService,
|
|
325
|
+
export async function loadServerHierarchicalMemory(currentWorkingDirectory, includeDirectoriesToReadGemini, debugMode, fileService, extensionLoader, folderTrust, importFormat = 'tree', fileFilteringOptions, maxDirs = 200) {
|
|
326
|
+
// FIX: Use real, canonical paths for a reliable comparison to handle symlinks.
|
|
327
|
+
const realCwd = await fs.realpath(path.resolve(currentWorkingDirectory));
|
|
328
|
+
const realHome = await fs.realpath(path.resolve(homedir()));
|
|
329
|
+
const isHomeDirectory = realCwd === realHome;
|
|
330
|
+
// If it is the home directory, pass an empty string to the core memory
|
|
331
|
+
// function to signal that it should skip the workspace search.
|
|
332
|
+
currentWorkingDirectory = isHomeDirectory ? '' : currentWorkingDirectory;
|
|
196
333
|
if (debugMode)
|
|
197
334
|
logger.debug(`Loading server hierarchical memory for CWD: ${currentWorkingDirectory} (importFormat: ${importFormat})`);
|
|
198
335
|
// For the server, homedir() refers to the server process's home.
|
|
199
336
|
// This is consistent with how MemoryTool already finds the global path.
|
|
200
337
|
const userHomePath = homedir();
|
|
201
|
-
const filePaths = await getGeminiMdFilePathsInternal(currentWorkingDirectory, includeDirectoriesToReadGemini, userHomePath, debugMode, fileService,
|
|
338
|
+
const filePaths = await getGeminiMdFilePathsInternal(currentWorkingDirectory, includeDirectoriesToReadGemini, userHomePath, debugMode, fileService, folderTrust, fileFilteringOptions || DEFAULT_MEMORY_FILE_FILTERING_OPTIONS, maxDirs);
|
|
339
|
+
// Add extension file paths separately since they may be conditionally enabled.
|
|
340
|
+
filePaths.push(...extensionLoader
|
|
341
|
+
.getExtensions()
|
|
342
|
+
.filter((ext) => ext.isActive)
|
|
343
|
+
.flatMap((ext) => ext.contextFiles));
|
|
202
344
|
if (filePaths.length === 0) {
|
|
203
345
|
if (debugMode)
|
|
204
346
|
logger.debug('No GEMINI.md files found in hierarchy of the workspace.');
|
|
205
|
-
return { memoryContent: '', fileCount: 0 };
|
|
347
|
+
return { memoryContent: '', fileCount: 0, filePaths: [] };
|
|
206
348
|
}
|
|
207
349
|
const contentsWithPaths = await readGeminiMdFiles(filePaths, debugMode, importFormat);
|
|
208
350
|
// Pass CWD for relative path display in concatenated content
|
|
@@ -214,6 +356,63 @@ export async function loadServerHierarchicalMemory(currentWorkingDirectory, incl
|
|
|
214
356
|
return {
|
|
215
357
|
memoryContent: combinedInstructions,
|
|
216
358
|
fileCount: contentsWithPaths.length,
|
|
359
|
+
filePaths,
|
|
360
|
+
};
|
|
361
|
+
}
|
|
362
|
+
/**
|
|
363
|
+
* Loads the hierarchical memory and resets the state of `config` as needed such
|
|
364
|
+
* that it reflects the new memory.
|
|
365
|
+
*
|
|
366
|
+
* Returns the result of the call to `loadHierarchicalGeminiMemory`.
|
|
367
|
+
*/
|
|
368
|
+
export async function refreshServerHierarchicalMemory(config) {
|
|
369
|
+
const result = await loadServerHierarchicalMemory(config.getWorkingDir(), config.shouldLoadMemoryFromIncludeDirectories()
|
|
370
|
+
? config.getWorkspaceContext().getDirectories()
|
|
371
|
+
: [], config.getDebugMode(), config.getFileService(), config.getExtensionLoader(), config.isTrustedFolder(), config.getImportFormat(), config.getFileFilteringOptions(), config.getDiscoveryMaxDirs());
|
|
372
|
+
config.setUserMemory(result.memoryContent);
|
|
373
|
+
config.setGeminiMdFileCount(result.fileCount);
|
|
374
|
+
config.setGeminiMdFilePaths(result.filePaths);
|
|
375
|
+
coreEvents.emit(CoreEvent.MemoryChanged, result);
|
|
376
|
+
return result;
|
|
377
|
+
}
|
|
378
|
+
export async function loadJitSubdirectoryMemory(targetPath, trustedRoots, alreadyLoadedPaths, debugMode = false) {
|
|
379
|
+
const resolvedTarget = path.resolve(targetPath);
|
|
380
|
+
let bestRoot = null;
|
|
381
|
+
// Find the deepest trusted root that contains the target path
|
|
382
|
+
for (const root of trustedRoots) {
|
|
383
|
+
const resolvedRoot = path.resolve(root);
|
|
384
|
+
if (resolvedTarget.startsWith(resolvedRoot) &&
|
|
385
|
+
(!bestRoot || resolvedRoot.length > bestRoot.length)) {
|
|
386
|
+
bestRoot = resolvedRoot;
|
|
387
|
+
}
|
|
388
|
+
}
|
|
389
|
+
if (!bestRoot) {
|
|
390
|
+
if (debugMode) {
|
|
391
|
+
logger.debug(`JIT memory skipped: ${resolvedTarget} is not in any trusted root.`);
|
|
392
|
+
}
|
|
393
|
+
return { files: [] };
|
|
394
|
+
}
|
|
395
|
+
if (debugMode) {
|
|
396
|
+
logger.debug(`Loading JIT memory for ${resolvedTarget} (Trusted root: ${bestRoot})`);
|
|
397
|
+
}
|
|
398
|
+
// Traverse from target up to the trusted root
|
|
399
|
+
const potentialPaths = await findUpwardGeminiFiles(resolvedTarget, bestRoot, debugMode);
|
|
400
|
+
// Filter out already loaded paths
|
|
401
|
+
const newPaths = potentialPaths.filter((p) => !alreadyLoadedPaths.has(p));
|
|
402
|
+
if (newPaths.length === 0) {
|
|
403
|
+
return { files: [] };
|
|
404
|
+
}
|
|
405
|
+
if (debugMode) {
|
|
406
|
+
logger.debug(`Found new JIT memory files: ${JSON.stringify(newPaths)}`);
|
|
407
|
+
}
|
|
408
|
+
const contents = await readGeminiMdFiles(newPaths, debugMode, 'tree');
|
|
409
|
+
return {
|
|
410
|
+
files: contents
|
|
411
|
+
.filter((item) => item.content !== null)
|
|
412
|
+
.map((item) => ({
|
|
413
|
+
path: item.filePath,
|
|
414
|
+
content: item.content,
|
|
415
|
+
})),
|
|
217
416
|
};
|
|
218
417
|
}
|
|
219
418
|
//# sourceMappingURL=memoryDiscovery.js.map
|