@didim365/agent-cli-core 0.1.1 → 0.1.2
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/package.json +6 -2
- package/dist/docs/00_project/ai_adapter/01-overview.md +0 -172
- package/dist/docs/00_project/ai_adapter/02-architecture.md +0 -448
- package/dist/docs/00_project/ai_adapter/03-technical-design.md +0 -1470
- package/dist/docs/00_project/ai_adapter/04-integration-design.md +0 -1934
- package/dist/docs/00_project/ai_adapter/05-implementation-plan.md +0 -336
- package/dist/docs/00_project/ai_adapter/06-didiaistudio-plan.md +0 -559
- package/dist/docs/00_project/ai_adapter/README.md +0 -145
- package/dist/docs/00_project/ai_adapter/agent_service_openapi.json +0 -1
- package/dist/docs/00_project/ai_adapter/didimStudi-AISTUDIO /341/204/213/341/205/254/341/204/207/341/205/256 /341/204/211/341/205/245/341/204/207/341/205/265/341/204/211/341/205/263 /341/204/221/341/205/263/341/206/257/341/204/205/341/205/251/341/204/213/341/205/256 /341/204/213/341/205/247/341/206/253/341/204/200/341/205/247/341/206/257 /341/204/207/341/205/241/341/206/274/341/204/211/341/205/265/341/206/250-100226-093925.pdf +0 -0
- package/dist/docs/00_project/ai_adapter/event-mapping-matrix.md +0 -148
- package/dist/docs/00_project/ai_adapter/migration-plan.md +0 -205
- package/dist/docs/00_project/ai_adapter/template/00_vibecoding_workflow.md +0 -627
- package/dist/docs/00_project/ai_adapter/template/01_todolist_performance_template.md +0 -436
- package/dist/docs/00_project/ai_adapter/template/02_code_review_template.md +0 -248
- package/dist/docs/00_project/ai_adapter/template/03_work_result_report_template.md +0 -133
- package/dist/docs/00_project/ai_adapter/template/100_Python_Performance_Guide.md +0 -472
- package/dist/docs/00_project/ai_adapter/template/99_TDD_plan.md +0 -123
- package/dist/docs/00_project/ai_adapter/todolist/00_master_implementation_plan.md +0 -433
- package/dist/docs/00_project/ai_adapter/todolist/phase1_foundation_todolist.md +0 -726
- package/dist/docs/00_project/ai_adapter/todolist/phase2_core_refactoring_todolist.md +0 -974
- package/dist/docs/00_project/ai_adapter/todolist/phase3_handoff.md +0 -203
- package/dist/docs/00_project/ai_adapter/todolist/phase3_provider_extension_todolist.md +0 -1382
- package/dist/docs/00_project/ai_adapter/utility-migration.md +0 -237
- package/dist/docs/00_project/ai_adapter/working_history/.gitkeep +0 -0
- package/dist/docs/00_project/ai_adapter/working_history/Phase1_M1.0_/354/275/224/353/223/234/354/235/270/353/262/244/355/206/240/353/246/254_20260201.md +0 -197
- package/dist/docs/00_project/ai_adapter/working_history/Phase1_M1.1_/355/203/200/354/236/205/354/204/244/352/263/204_20260201.md +0 -185
- package/dist/docs/00_project/ai_adapter/working_history/Phase1_M1.2_Adapter/354/235/270/355/224/204/353/235/274_20260203.md +0 -378
- package/dist/docs/00_project/ai_adapter/working_history/Phase1_M1.3_Provider/354/204/240/355/203/235_20260206.md +0 -269
- package/dist/docs/00_project/ai_adapter/working_history/Phase1_M1.4_/354/234/240/355/213/270/353/246/254/355/213/260/353/247/210/354/235/264/352/267/270/353/240/210/354/235/264/354/205/230_20260206.md +0 -86
- package/dist/docs/00_project/ai_adapter/working_history/Phase2_ETC_/354/227/260/352/270/260/354/236/221/354/227/205/354/240/225/353/246/254_20260208.md +0 -157
- package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.0_/353/224/224/353/240/211/355/206/240/353/246/254/354/236/254/352/265/254/354/204/261_20260207.md +0 -107
- package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.1_ContentGenerator/354/235/270/355/204/260/355/216/230/354/235/264/354/212/244/354/236/254/354/240/225/354/235/230_20260207.md +0 -630
- package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.2_EventMapper/352/265/254/355/230/204_20260207.md +0 -372
- package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.3_GeminiAdapter/352/265/254/355/230/204_20260208.md +0 -205
- package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.4_ModelConfigService/355/230/270/355/231/230/353/240/210/354/235/264/354/226/264_20260208.md +0 -275
- package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.5_/354/234/240/355/213/270/353/246/254/355/213/260/353/240/210/354/235/264/354/226/264/353/246/254/355/214/251/355/206/240/353/247/201_20260208.md +0 -239
- package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.6_/353/235/274/354/232/260/355/214/205/353/240/210/354/235/264/354/226/264/355/203/200/354/236/205/353/217/205/353/246/275/355/231/224_20260208.md +0 -228
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_ETC_/352/270/260/353/263/270/354/273/250/355/205/215/354/212/244/355/212/270/355/214/214/354/235/274/353/252/205AGENTS/354/240/204/355/231/230_20260211.md +0 -470
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.0.1_Gemini/354/240/204/354/232/251/355/214/214/354/235/274/353/254/274/353/246/254/354/240/201/354/235/264/353/217/231_20260209.md +0 -271
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.0.2_messageInspectors/353/247/210/354/235/264/352/267/270/353/240/210/354/235/264/354/205/230_20260209.md +0 -330
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.0.3_/355/205/224/353/240/210/353/251/224/355/212/270/353/246/254Agent/353/217/205/353/246/275/355/231/224_20260209.md +0 -251
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.0.4_/353/263/200/355/231/230/353/270/214/353/246/277/354/247/200/354/240/225/353/246/254_20260209.md +0 -136
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.0.5_/353/237/260/355/203/200/354/236/204/354/213/244/355/226/211/352/262/275/353/241/234/354/227/260/352/262/260_20260209.md +0 -232
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.1.0_Claude/354/202/254/354/240/204/354/244/200/353/271/204_20260209.md +0 -191
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.1.1_ClaudeAdapter/352/265/254/355/230/204_20260209.md +0 -225
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.1.2_ClaudeConverter/352/263/240/353/217/204/355/231/224_20260209.md +0 -171
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.1.3_ClaudeStreamError/352/263/240/353/217/204/355/231/224_20260209.md +0 -198
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.1.4_ClaudeErrorMapping_20260209.md +0 -98
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.2.A_OpenAIAdapterCore_20260210.md +0 -264
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.2.B_OpenAIStreamConverter_20260210.md +0 -204
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.3.2_/353/252/250/353/215/270/355/205/234/355/224/214/353/246/277/355/233/205/353/263/264/354/231/204_20260211.md +0 -106
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.3_OpenAICompatibleAdapter_20260211.md +0 -251
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.4.2_E2E/355/205/214/354/212/244/355/212/270/354/213/234/353/202/230/353/246/254/354/230/244_20260210.md +0 -264
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.4.3_/354/204/261/353/212/245/355/232/214/352/267/200/355/205/214/354/212/244/355/212/270_20260211.md +0 -176
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.4.5_/354/225/210/354/240/225/355/231/224/354/236/221/354/227/205_20260211.md +0 -204
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.4.A_CLI/355/206/265/355/225/251_3Provider/355/206/265/355/225/251/355/205/214/354/212/244/355/212/270_20260210.md +0 -316
- package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.4.A_UI/354/203/201/355/203/234/353/260/224/354/210/230/354/240/225_20260210.md +0 -262
- package/dist/docs/00_project/ai_adapter/working_history/phase2_tradeoff_EventType/354/240/204/355/231/230_20260208.md +0 -286
- package/dist/docs/00_project/white_labeling/template/00_vibecoding_workflow.md +0 -627
- package/dist/docs/00_project/white_labeling/template/01_todolist_performance_template.md +0 -400
- package/dist/docs/00_project/white_labeling/template/02_code_review_template.md +0 -248
- package/dist/docs/00_project/white_labeling/template/03_work_result_report_template.md +0 -133
- package/dist/docs/00_project/white_labeling/template/100_Python_Performance_Guide.md +0 -472
- package/dist/docs/00_project/white_labeling/template/99_TDD_plan.md +0 -123
- package/dist/docs/00_project/white_labeling/todolist/Phase_CLI/355/214/250/355/202/244/354/247/200/353/252/205/353/263/200/352/262/275_todolist.md +0 -431
- package/dist/docs/00_project/white_labeling/working_history/Phase_CLI/355/214/250/355/202/244/354/247/200/353/252/205/353/263/200/352/262/275_20260214.md +0 -238
- package/dist/docs/00_project/white_labeling//354/225/261/352/265/254/354/241/260.md +0 -310
- package/dist/docs/CONTRIBUTING.md +0 -554
- package/dist/docs/ai_adapter/01-overview.md +0 -155
- package/dist/docs/ai_adapter/02-architecture.md +0 -452
- package/dist/docs/ai_adapter/03-technical-design.md +0 -1470
- package/dist/docs/ai_adapter/04-integration-design.md +0 -1904
- package/dist/docs/ai_adapter/05-implementation-plan.md +0 -312
- package/dist/docs/ai_adapter/06-didiaistudio-plan.md +0 -559
- package/dist/docs/ai_adapter/README.md +0 -118
- package/dist/docs/ai_adapter/agent_service_openapi.json +0 -1
- package/dist/docs/ai_adapter/didimStudi-AISTUDIO /341/204/213/341/205/254/341/204/207/341/205/256 /341/204/211/341/205/245/341/204/207/341/205/265/341/204/211/341/205/263 /341/204/221/341/205/263/341/206/257/341/204/205/341/205/251/341/204/213/341/205/256 /341/204/213/341/205/247/341/206/253/341/204/200/341/205/247/341/206/257 /341/204/207/341/205/241/341/206/274/341/204/211/341/205/265/341/206/250-100226-093925.pdf +0 -0
- package/dist/docs/ai_adapter/event-mapping-matrix.md +0 -140
- package/dist/docs/ai_adapter/migration-plan.md +0 -205
- package/dist/docs/ai_adapter/template/00_vibecoding_workflow.md +0 -636
- package/dist/docs/ai_adapter/template/01_todolist_performance_template.md +0 -372
- package/dist/docs/ai_adapter/template/02_code_review_template.md +0 -220
- package/dist/docs/ai_adapter/template/03_work_result_report_template.md +0 -120
- package/dist/docs/ai_adapter/template/100_Python_Performance_Guide.md +0 -453
- package/dist/docs/ai_adapter/template/99_TDD_plan.md +0 -111
- package/dist/docs/ai_adapter/todolist/00_master_implementation_plan.md +0 -433
- package/dist/docs/ai_adapter/todolist/phase1_foundation_todolist.md +0 -726
- package/dist/docs/ai_adapter/todolist/phase2_core_refactoring_todolist.md +0 -974
- package/dist/docs/ai_adapter/todolist/phase3_handoff.md +0 -203
- package/dist/docs/ai_adapter/todolist/phase3_provider_extension_todolist.md +0 -1382
- package/dist/docs/ai_adapter/utility-migration.md +0 -237
- package/dist/docs/ai_adapter/working_history/.gitkeep +0 -0
- package/dist/docs/ai_adapter/working_history/Phase1_M1.0_/354/275/224/353/223/234/354/235/270/353/262/244/355/206/240/353/246/254_20260201.md +0 -185
- package/dist/docs/ai_adapter/working_history/Phase1_M1.1_/355/203/200/354/236/205/354/204/244/352/263/204_20260201.md +0 -185
- package/dist/docs/ai_adapter/working_history/Phase1_M1.2_Adapter/354/235/270/355/224/204/353/235/274_20260203.md +0 -378
- package/dist/docs/ai_adapter/working_history/Phase1_M1.3_Provider/354/204/240/355/203/235_20260206.md +0 -269
- package/dist/docs/ai_adapter/working_history/Phase1_M1.4_/354/234/240/355/213/270/353/246/254/355/213/260/353/247/210/354/235/264/352/267/270/353/240/210/354/235/264/354/205/230_20260206.md +0 -86
- package/dist/docs/ai_adapter/working_history/Phase2_ETC_/354/227/260/352/270/260/354/236/221/354/227/205/354/240/225/353/246/254_20260208.md +0 -157
- package/dist/docs/ai_adapter/working_history/Phase2_M2.0_/353/224/224/353/240/211/355/206/240/353/246/254/354/236/254/352/265/254/354/204/261_20260207.md +0 -107
- package/dist/docs/ai_adapter/working_history/Phase2_M2.1_ContentGenerator/354/235/270/355/204/260/355/216/230/354/235/264/354/212/244/354/236/254/354/240/225/354/235/230_20260207.md +0 -630
- package/dist/docs/ai_adapter/working_history/Phase2_M2.2_EventMapper/352/265/254/355/230/204_20260207.md +0 -372
- package/dist/docs/ai_adapter/working_history/Phase2_M2.3_GeminiAdapter/352/265/254/355/230/204_20260208.md +0 -205
- package/dist/docs/ai_adapter/working_history/Phase2_M2.4_ModelConfigService/355/230/270/355/231/230/353/240/210/354/235/264/354/226/264_20260208.md +0 -275
- package/dist/docs/ai_adapter/working_history/Phase2_M2.5_/354/234/240/355/213/270/353/246/254/355/213/260/353/240/210/354/235/264/354/226/264/353/246/254/355/214/251/355/206/240/353/247/201_20260208.md +0 -239
- package/dist/docs/ai_adapter/working_history/Phase2_M2.6_/353/235/274/354/232/260/355/214/205/353/240/210/354/235/264/354/226/264/355/203/200/354/236/205/353/217/205/353/246/275/355/231/224_20260208.md +0 -228
- package/dist/docs/ai_adapter/working_history/Phase3_ETC_/352/270/260/353/263/270/354/273/250/355/205/215/354/212/244/355/212/270/355/214/214/354/235/274/353/252/205AGENTS/354/240/204/355/231/230_20260211.md +0 -367
- package/dist/docs/ai_adapter/working_history/Phase3_M3.0.1_Gemini/354/240/204/354/232/251/355/214/214/354/235/274/353/254/274/353/246/254/354/240/201/354/235/264/353/217/231_20260209.md +0 -271
- package/dist/docs/ai_adapter/working_history/Phase3_M3.0.2_messageInspectors/353/247/210/354/235/264/352/267/270/353/240/210/354/235/264/354/205/230_20260209.md +0 -330
- package/dist/docs/ai_adapter/working_history/Phase3_M3.0.3_/355/205/224/353/240/210/353/251/224/355/212/270/353/246/254Agent/353/217/205/353/246/275/355/231/224_20260209.md +0 -251
- package/dist/docs/ai_adapter/working_history/Phase3_M3.0.4_/353/263/200/355/231/230/353/270/214/353/246/277/354/247/200/354/240/225/353/246/254_20260209.md +0 -136
- package/dist/docs/ai_adapter/working_history/Phase3_M3.0.5_/353/237/260/355/203/200/354/236/204/354/213/244/355/226/211/352/262/275/353/241/234/354/227/260/352/262/260_20260209.md +0 -232
- package/dist/docs/ai_adapter/working_history/Phase3_M3.1.0_Claude/354/202/254/354/240/204/354/244/200/353/271/204_20260209.md +0 -191
- package/dist/docs/ai_adapter/working_history/Phase3_M3.1.1_ClaudeAdapter/352/265/254/355/230/204_20260209.md +0 -225
- package/dist/docs/ai_adapter/working_history/Phase3_M3.1.2_ClaudeConverter/352/263/240/353/217/204/355/231/224_20260209.md +0 -171
- package/dist/docs/ai_adapter/working_history/Phase3_M3.1.3_ClaudeStreamError/352/263/240/353/217/204/355/231/224_20260209.md +0 -198
- package/dist/docs/ai_adapter/working_history/Phase3_M3.1.4_ClaudeErrorMapping_20260209.md +0 -98
- package/dist/docs/ai_adapter/working_history/Phase3_M3.2.A_OpenAIAdapterCore_20260210.md +0 -264
- package/dist/docs/ai_adapter/working_history/Phase3_M3.2.B_OpenAIStreamConverter_20260210.md +0 -204
- package/dist/docs/ai_adapter/working_history/Phase3_M3.3.2_/353/252/250/353/215/270/355/205/234/355/224/214/353/246/277/355/233/205/353/263/264/354/231/204_20260211.md +0 -106
- package/dist/docs/ai_adapter/working_history/Phase3_M3.3_OpenAICompatibleAdapter_20260211.md +0 -251
- package/dist/docs/ai_adapter/working_history/Phase3_M3.4.2_E2E/355/205/214/354/212/244/355/212/270/354/213/234/353/202/230/353/246/254/354/230/244_20260210.md +0 -264
- package/dist/docs/ai_adapter/working_history/Phase3_M3.4.3_/354/204/261/353/212/245/355/232/214/352/267/200/355/205/214/354/212/244/355/212/270_20260211.md +0 -176
- package/dist/docs/ai_adapter/working_history/Phase3_M3.4.5_/354/225/210/354/240/225/355/231/224/354/236/221/354/227/205_20260211.md +0 -204
- package/dist/docs/ai_adapter/working_history/Phase3_M3.4.A_CLI/355/206/265/355/225/251_3Provider/355/206/265/355/225/251/355/205/214/354/212/244/355/212/270_20260210.md +0 -316
- package/dist/docs/ai_adapter/working_history/Phase3_M3.4.A_UI/354/203/201/355/203/234/353/260/224/354/210/230/354/240/225_20260210.md +0 -262
- package/dist/docs/ai_adapter/working_history/phase2_tradeoff_EventType/354/240/204/355/231/230_20260208.md +0 -286
- package/dist/docs/api/index.md +0 -5
- package/dist/docs/api/providers.md +0 -56
- package/dist/docs/architecture.md +0 -80
- package/dist/docs/assets/connected_devtools.png +0 -0
- package/dist/docs/assets/gemini-screenshot.png +0 -0
- package/dist/docs/assets/monitoring-dashboard-logs.png +0 -0
- package/dist/docs/assets/monitoring-dashboard-metrics.png +0 -0
- package/dist/docs/assets/monitoring-dashboard-overview.png +0 -0
- package/dist/docs/assets/release_patch.png +0 -0
- package/dist/docs/assets/theme-ansi-light.png +0 -0
- package/dist/docs/assets/theme-ansi.png +0 -0
- package/dist/docs/assets/theme-atom-one.png +0 -0
- package/dist/docs/assets/theme-ayu-light.png +0 -0
- package/dist/docs/assets/theme-ayu.png +0 -0
- package/dist/docs/assets/theme-custom.png +0 -0
- package/dist/docs/assets/theme-default-light.png +0 -0
- package/dist/docs/assets/theme-default.png +0 -0
- package/dist/docs/assets/theme-dracula.png +0 -0
- package/dist/docs/assets/theme-github-light.png +0 -0
- package/dist/docs/assets/theme-github.png +0 -0
- package/dist/docs/assets/theme-google-light.png +0 -0
- package/dist/docs/assets/theme-xcode-light.png +0 -0
- package/dist/docs/change_model/model_command_multi_provider_plan.md +0 -221
- package/dist/docs/change_model/model_command_multi_provider_todolist.md +0 -206
- package/dist/docs/changelogs/index.md +0 -726
- package/dist/docs/changelogs/latest.md +0 -370
- package/dist/docs/changelogs/preview.md +0 -332
- package/dist/docs/cli/authentication.md +0 -3
- package/dist/docs/cli/checkpointing.md +0 -94
- package/dist/docs/cli/commands.md +0 -375
- package/dist/docs/cli/custom-commands.md +0 -315
- package/dist/docs/cli/enterprise.md +0 -565
- package/dist/docs/cli/gemini-ignore.md +0 -71
- package/dist/docs/cli/gemini-md.md +0 -108
- package/dist/docs/cli/generation-settings.md +0 -210
- package/dist/docs/cli/headless.md +0 -388
- package/dist/docs/cli/index.md +0 -65
- package/dist/docs/cli/keyboard-shortcuts.md +0 -129
- package/dist/docs/cli/model-routing.md +0 -42
- package/dist/docs/cli/model.md +0 -62
- package/dist/docs/cli/sandbox.md +0 -171
- package/dist/docs/cli/session-management.md +0 -158
- package/dist/docs/cli/settings.md +0 -130
- package/dist/docs/cli/skills.md +0 -188
- package/dist/docs/cli/system-prompt.md +0 -125
- package/dist/docs/cli/telemetry.md +0 -826
- package/dist/docs/cli/themes.md +0 -235
- package/dist/docs/cli/token-caching.md +0 -20
- package/dist/docs/cli/trusted-folders.md +0 -95
- package/dist/docs/cli/tutorials/skills-getting-started.md +0 -124
- package/dist/docs/cli/tutorials.md +0 -87
- package/dist/docs/cli/uninstall.md +0 -65
- package/dist/docs/configuration.md +0 -108
- package/dist/docs/core/index.md +0 -105
- package/dist/docs/core/long-term-memory-design.md +0 -254
- package/dist/docs/core/long-term-memory-proposal.md +0 -112
- package/dist/docs/core/memport.md +0 -246
- package/dist/docs/core/policy-engine.md +0 -300
- package/dist/docs/core/tools-api.md +0 -131
- package/dist/docs/examples/proxy-script.md +0 -83
- package/dist/docs/extensions/best-practices.md +0 -139
- package/dist/docs/extensions/index.md +0 -44
- package/dist/docs/extensions/reference.md +0 -312
- package/dist/docs/extensions/releasing.md +0 -183
- package/dist/docs/extensions/writing-extensions.md +0 -283
- package/dist/docs/faq.md +0 -154
- package/dist/docs/get-started/authentication.md +0 -321
- package/dist/docs/get-started/configuration-v1.md +0 -888
- package/dist/docs/get-started/configuration.md +0 -1567
- package/dist/docs/get-started/examples.md +0 -219
- package/dist/docs/get-started/gemini-3.md +0 -101
- package/dist/docs/get-started/index.md +0 -71
- package/dist/docs/get-started/installation.md +0 -141
- package/dist/docs/hooks/best-practices.md +0 -677
- package/dist/docs/hooks/index.md +0 -178
- package/dist/docs/hooks/reference.md +0 -322
- package/dist/docs/hooks/writing-hooks.md +0 -450
- package/dist/docs/ide-integration/ide-companion-spec.md +0 -267
- package/dist/docs/ide-integration/index.md +0 -202
- package/dist/docs/index.md +0 -153
- package/dist/docs/integration-tests.md +0 -211
- package/dist/docs/issue-and-pr-automation.md +0 -134
- package/dist/docs/local-development.md +0 -128
- package/dist/docs/mermaid/context.mmd +0 -103
- package/dist/docs/mermaid/render-path.mmd +0 -64
- package/dist/docs/migration.md +0 -78
- package/dist/docs/npm.md +0 -62
- package/dist/docs/providers.md +0 -136
- package/dist/docs/quota-and-pricing.md +0 -158
- package/dist/docs/release-confidence.md +0 -164
- package/dist/docs/releases.md +0 -539
- package/dist/docs/sidebar.json +0 -140
- package/dist/docs/tools/file-system.md +0 -217
- package/dist/docs/tools/index.md +0 -98
- package/dist/docs/tools/mcp-server.md +0 -1068
- package/dist/docs/tools/memory.md +0 -54
- package/dist/docs/tools/shell.md +0 -260
- package/dist/docs/tools/todos.md +0 -57
- package/dist/docs/tools/web-fetch.md +0 -59
- package/dist/docs/tools/web-search.md +0 -42
- package/dist/docs/tos-privacy.md +0 -96
- package/dist/docs/troubleshooting.md +0 -173
- package/dist/src/agents/a2a-client-manager.test.d.ts +0 -6
- package/dist/src/agents/a2a-client-manager.test.js +0 -220
- package/dist/src/agents/a2a-client-manager.test.js.map +0 -1
- package/dist/src/agents/a2aUtils.test.d.ts +0 -6
- package/dist/src/agents/a2aUtils.test.js +0 -147
- package/dist/src/agents/a2aUtils.test.js.map +0 -1
- package/dist/src/agents/acknowledgedAgents.test.d.ts +0 -6
- package/dist/src/agents/acknowledgedAgents.test.js +0 -70
- package/dist/src/agents/acknowledgedAgents.test.js.map +0 -1
- package/dist/src/agents/agent-scheduler.test.d.ts +0 -6
- package/dist/src/agents/agent-scheduler.test.js +0 -56
- package/dist/src/agents/agent-scheduler.test.js.map +0 -1
- package/dist/src/agents/agentLoader.test.d.ts +0 -6
- package/dist/src/agents/agentLoader.test.js +0 -304
- package/dist/src/agents/agentLoader.test.js.map +0 -1
- package/dist/src/agents/cli-help-agent.test.d.ts +0 -6
- package/dist/src/agents/cli-help-agent.test.js +0 -67
- package/dist/src/agents/cli-help-agent.test.js.map +0 -1
- package/dist/src/agents/codebase-investigator.test.d.ts +0 -6
- package/dist/src/agents/codebase-investigator.test.js +0 -42
- package/dist/src/agents/codebase-investigator.test.js.map +0 -1
- package/dist/src/agents/generalist-agent.test.d.ts +0 -6
- package/dist/src/agents/generalist-agent.test.js +0 -31
- package/dist/src/agents/generalist-agent.test.js.map +0 -1
- package/dist/src/agents/local-executor.test.d.ts +0 -6
- package/dist/src/agents/local-executor.test.js +0 -1577
- package/dist/src/agents/local-executor.test.js.map +0 -1
- package/dist/src/agents/local-invocation.test.d.ts +0 -6
- package/dist/src/agents/local-invocation.test.js +0 -228
- package/dist/src/agents/local-invocation.test.js.map +0 -1
- package/dist/src/agents/registry.test.d.ts +0 -6
- package/dist/src/agents/registry.test.js +0 -773
- package/dist/src/agents/registry.test.js.map +0 -1
- package/dist/src/agents/registry_acknowledgement.test.d.ts +0 -6
- package/dist/src/agents/registry_acknowledgement.test.js +0 -130
- package/dist/src/agents/registry_acknowledgement.test.js.map +0 -1
- package/dist/src/agents/remote-invocation.test.d.ts +0 -6
- package/dist/src/agents/remote-invocation.test.js +0 -213
- package/dist/src/agents/remote-invocation.test.js.map +0 -1
- package/dist/src/agents/subagent-tool-wrapper.test.d.ts +0 -6
- package/dist/src/agents/subagent-tool-wrapper.test.js +0 -109
- package/dist/src/agents/subagent-tool-wrapper.test.js.map +0 -1
- package/dist/src/agents/utils.test.d.ts +0 -6
- package/dist/src/agents/utils.test.js +0 -87
- package/dist/src/agents/utils.test.js.map +0 -1
- package/dist/src/availability/fallbackIntegration.test.d.ts +0 -6
- package/dist/src/availability/fallbackIntegration.test.js +0 -58
- package/dist/src/availability/fallbackIntegration.test.js.map +0 -1
- package/dist/src/availability/modelAvailabilityService.test.d.ts +0 -6
- package/dist/src/availability/modelAvailabilityService.test.js +0 -140
- package/dist/src/availability/modelAvailabilityService.test.js.map +0 -1
- package/dist/src/availability/policyCatalog.test.d.ts +0 -6
- package/dist/src/availability/policyCatalog.test.js +0 -70
- package/dist/src/availability/policyCatalog.test.js.map +0 -1
- package/dist/src/availability/policyHelpers.test.d.ts +0 -6
- package/dist/src/availability/policyHelpers.test.js +0 -220
- package/dist/src/availability/policyHelpers.test.js.map +0 -1
- package/dist/src/code_assist/admin/admin_controls.test.d.ts +0 -6
- package/dist/src/code_assist/admin/admin_controls.test.js +0 -200
- package/dist/src/code_assist/admin/admin_controls.test.js.map +0 -1
- package/dist/src/code_assist/codeAssist.test.d.ts +0 -6
- package/dist/src/code_assist/codeAssist.test.js +0 -102
- package/dist/src/code_assist/codeAssist.test.js.map +0 -1
- package/dist/src/code_assist/converter.test.d.ts +0 -6
- package/dist/src/code_assist/converter.test.js +0 -391
- package/dist/src/code_assist/converter.test.js.map +0 -1
- package/dist/src/code_assist/experiments/client_metadata.test.d.ts +0 -6
- package/dist/src/code_assist/experiments/client_metadata.test.js +0 -96
- package/dist/src/code_assist/experiments/client_metadata.test.js.map +0 -1
- package/dist/src/code_assist/experiments/experiments.test.d.ts +0 -6
- package/dist/src/code_assist/experiments/experiments.test.js +0 -93
- package/dist/src/code_assist/experiments/experiments.test.js.map +0 -1
- package/dist/src/code_assist/experiments/experiments_local.test.d.ts +0 -6
- package/dist/src/code_assist/experiments/experiments_local.test.js +0 -115
- package/dist/src/code_assist/experiments/experiments_local.test.js.map +0 -1
- package/dist/src/code_assist/oauth-credential-storage.test.d.ts +0 -6
- package/dist/src/code_assist/oauth-credential-storage.test.js +0 -198
- package/dist/src/code_assist/oauth-credential-storage.test.js.map +0 -1
- package/dist/src/code_assist/oauth2.test.d.ts +0 -6
- package/dist/src/code_assist/oauth2.test.js +0 -1065
- package/dist/src/code_assist/oauth2.test.js.map +0 -1
- package/dist/src/code_assist/server.test.d.ts +0 -6
- package/dist/src/code_assist/server.test.js +0 -453
- package/dist/src/code_assist/server.test.js.map +0 -1
- package/dist/src/code_assist/setup.test.d.ts +0 -6
- package/dist/src/code_assist/setup.test.js +0 -517
- package/dist/src/code_assist/setup.test.js.map +0 -1
- package/dist/src/code_assist/telemetry.test.d.ts +0 -6
- package/dist/src/code_assist/telemetry.test.js +0 -301
- package/dist/src/code_assist/telemetry.test.js.map +0 -1
- package/dist/src/commands/extensions.test.d.ts +0 -6
- package/dist/src/commands/extensions.test.js +0 -19
- package/dist/src/commands/extensions.test.js.map +0 -1
- package/dist/src/commands/init.test.d.ts +0 -6
- package/dist/src/commands/init.test.js +0 -25
- package/dist/src/commands/init.test.js.map +0 -1
- package/dist/src/commands/memory.test.d.ts +0 -6
- package/dist/src/commands/memory.test.js +0 -182
- package/dist/src/commands/memory.test.js.map +0 -1
- package/dist/src/commands/restore.test.d.ts +0 -6
- package/dist/src/commands/restore.test.js +0 -137
- package/dist/src/commands/restore.test.js.map +0 -1
- package/dist/src/config/config.test.d.ts +0 -6
- package/dist/src/config/config.test.js +0 -1811
- package/dist/src/config/config.test.js.map +0 -1
- package/dist/src/config/flashFallback.test.d.ts +0 -6
- package/dist/src/config/flashFallback.test.js +0 -63
- package/dist/src/config/flashFallback.test.js.map +0 -1
- package/dist/src/config/models.test.d.ts +0 -6
- package/dist/src/config/models.test.js +0 -146
- package/dist/src/config/models.test.js.map +0 -1
- package/dist/src/config/storage.test.d.ts +0 -6
- package/dist/src/config/storage.test.js +0 -115
- package/dist/src/config/storage.test.js.map +0 -1
- package/dist/src/confirmation-bus/message-bus.test.d.ts +0 -6
- package/dist/src/confirmation-bus/message-bus.test.js +0 -170
- package/dist/src/confirmation-bus/message-bus.test.js.map +0 -1
- package/dist/src/core/apiKeyCredentialStorage.test.d.ts +0 -6
- package/dist/src/core/apiKeyCredentialStorage.test.js +0 -71
- package/dist/src/core/apiKeyCredentialStorage.test.js.map +0 -1
- package/dist/src/core/baseLlmClient.test.d.ts +0 -6
- package/dist/src/core/baseLlmClient.test.js +0 -569
- package/dist/src/core/baseLlmClient.test.js.map +0 -1
- package/dist/src/core/baseLlmClient_new_types.test.d.ts +0 -1
- package/dist/src/core/baseLlmClient_new_types.test.js +0 -387
- package/dist/src/core/baseLlmClient_new_types.test.js.map +0 -1
- package/dist/src/core/client.test.d.ts +0 -6
- package/dist/src/core/client.test.js +0 -2654
- package/dist/src/core/client.test.js.map +0 -1
- package/dist/src/core/contentGenerator.multiProvider.test.d.ts +0 -6
- package/dist/src/core/contentGenerator.multiProvider.test.js +0 -314
- package/dist/src/core/contentGenerator.multiProvider.test.js.map +0 -1
- package/dist/src/core/contentGenerator.test.d.ts +0 -6
- package/dist/src/core/contentGenerator.test.js +0 -299
- package/dist/src/core/contentGenerator.test.js.map +0 -1
- package/dist/src/core/contentGenerator_new_types.test.d.ts +0 -6
- package/dist/src/core/contentGenerator_new_types.test.js +0 -292
- package/dist/src/core/contentGenerator_new_types.test.js.map +0 -1
- package/dist/src/core/coreToolHookTriggers.test.d.ts +0 -6
- package/dist/src/core/coreToolHookTriggers.test.js +0 -159
- package/dist/src/core/coreToolHookTriggers.test.js.map +0 -1
- package/dist/src/core/coreToolScheduler.test.d.ts +0 -6
- package/dist/src/core/coreToolScheduler.test.js +0 -1684
- package/dist/src/core/coreToolScheduler.test.js.map +0 -1
- package/dist/src/core/fakeContentGenerator.test.d.ts +0 -6
- package/dist/src/core/fakeContentGenerator.test.js +0 -127
- package/dist/src/core/fakeContentGenerator.test.js.map +0 -1
- package/dist/src/core/geminiChat.test.d.ts +0 -6
- package/dist/src/core/geminiChat.test.js +0 -1773
- package/dist/src/core/geminiChat.test.js.map +0 -1
- package/dist/src/core/geminiChat_network_retry.test.d.ts +0 -6
- package/dist/src/core/geminiChat_network_retry.test.js +0 -201
- package/dist/src/core/geminiChat_network_retry.test.js.map +0 -1
- package/dist/src/core/logger.test.d.ts +0 -6
- package/dist/src/core/logger.test.js +0 -550
- package/dist/src/core/logger.test.js.map +0 -1
- package/dist/src/core/loggingContentGenerator.test.d.ts +0 -6
- package/dist/src/core/loggingContentGenerator.test.js +0 -221
- package/dist/src/core/loggingContentGenerator.test.js.map +0 -1
- package/dist/src/core/prompts-substitution.test.d.ts +0 -6
- package/dist/src/core/prompts-substitution.test.js +0 -101
- package/dist/src/core/prompts-substitution.test.js.map +0 -1
- package/dist/src/core/prompts.test.d.ts +0 -6
- package/dist/src/core/prompts.test.js +0 -391
- package/dist/src/core/prompts.test.js.map +0 -1
- package/dist/src/core/recordingContentGenerator.test.d.ts +0 -6
- package/dist/src/core/recordingContentGenerator.test.js +0 -101
- package/dist/src/core/recordingContentGenerator.test.js.map +0 -1
- package/dist/src/core/tokenLimits.test.d.ts +0 -6
- package/dist/src/core/tokenLimits.test.js +0 -30
- package/dist/src/core/tokenLimits.test.js.map +0 -1
- package/dist/src/core/turn.test.d.ts +0 -6
- package/dist/src/core/turn.test.js +0 -739
- package/dist/src/core/turn.test.js.map +0 -1
- package/dist/src/fallback/handler.test.d.ts +0 -6
- package/dist/src/fallback/handler.test.js +0 -242
- package/dist/src/fallback/handler.test.js.map +0 -1
- package/dist/src/hooks/hookAggregator.test.d.ts +0 -6
- package/dist/src/hooks/hookAggregator.test.js +0 -387
- package/dist/src/hooks/hookAggregator.test.js.map +0 -1
- package/dist/src/hooks/hookEventHandler.test.d.ts +0 -6
- package/dist/src/hooks/hookEventHandler.test.js +0 -603
- package/dist/src/hooks/hookEventHandler.test.js.map +0 -1
- package/dist/src/hooks/hookPlanner.test.d.ts +0 -6
- package/dist/src/hooks/hookPlanner.test.js +0 -315
- package/dist/src/hooks/hookPlanner.test.js.map +0 -1
- package/dist/src/hooks/hookRegistry.test.d.ts +0 -6
- package/dist/src/hooks/hookRegistry.test.js +0 -529
- package/dist/src/hooks/hookRegistry.test.js.map +0 -1
- package/dist/src/hooks/hookRunner.test.d.ts +0 -6
- package/dist/src/hooks/hookRunner.test.js +0 -606
- package/dist/src/hooks/hookRunner.test.js.map +0 -1
- package/dist/src/hooks/hookSystem.test.d.ts +0 -6
- package/dist/src/hooks/hookSystem.test.js +0 -330
- package/dist/src/hooks/hookSystem.test.js.map +0 -1
- package/dist/src/hooks/hookSystem_new_types.test.d.ts +0 -6
- package/dist/src/hooks/hookSystem_new_types.test.js +0 -243
- package/dist/src/hooks/hookSystem_new_types.test.js.map +0 -1
- package/dist/src/hooks/hookTranslator.test.d.ts +0 -6
- package/dist/src/hooks/hookTranslator.test.js +0 -192
- package/dist/src/hooks/hookTranslator.test.js.map +0 -1
- package/dist/src/hooks/trustedHooks.test.d.ts +0 -6
- package/dist/src/hooks/trustedHooks.test.js +0 -154
- package/dist/src/hooks/trustedHooks.test.js.map +0 -1
- package/dist/src/hooks/types.test.d.ts +0 -6
- package/dist/src/hooks/types.test.js +0 -278
- package/dist/src/hooks/types.test.js.map +0 -1
- package/dist/src/ide/detect-ide.test.d.ts +0 -6
- package/dist/src/ide/detect-ide.test.js +0 -195
- package/dist/src/ide/detect-ide.test.js.map +0 -1
- package/dist/src/ide/ide-client.test.d.ts +0 -6
- package/dist/src/ide/ide-client.test.js +0 -753
- package/dist/src/ide/ide-client.test.js.map +0 -1
- package/dist/src/ide/ide-installer.test.d.ts +0 -6
- package/dist/src/ide/ide-installer.test.js +0 -193
- package/dist/src/ide/ide-installer.test.js.map +0 -1
- package/dist/src/ide/ideContext.test.d.ts +0 -6
- package/dist/src/ide/ideContext.test.js +0 -393
- package/dist/src/ide/ideContext.test.js.map +0 -1
- package/dist/src/ide/process-utils.test.d.ts +0 -6
- package/dist/src/ide/process-utils.test.js +0 -151
- package/dist/src/ide/process-utils.test.js.map +0 -1
- package/dist/src/index.test.d.ts +0 -6
- package/dist/src/index.test.js +0 -53
- package/dist/src/index.test.js.map +0 -1
- package/dist/src/mcp/google-auth-provider.test.d.ts +0 -6
- package/dist/src/mcp/google-auth-provider.test.js +0 -167
- package/dist/src/mcp/google-auth-provider.test.js.map +0 -1
- package/dist/src/mcp/oauth-provider.test.d.ts +0 -6
- package/dist/src/mcp/oauth-provider.test.js +0 -1355
- package/dist/src/mcp/oauth-provider.test.js.map +0 -1
- package/dist/src/mcp/oauth-token-storage.test.d.ts +0 -6
- package/dist/src/mcp/oauth-token-storage.test.js +0 -305
- package/dist/src/mcp/oauth-token-storage.test.js.map +0 -1
- package/dist/src/mcp/oauth-utils.test.d.ts +0 -6
- package/dist/src/mcp/oauth-utils.test.js +0 -289
- package/dist/src/mcp/oauth-utils.test.js.map +0 -1
- package/dist/src/mcp/sa-impersonation-provider.test.d.ts +0 -6
- package/dist/src/mcp/sa-impersonation-provider.test.js +0 -117
- package/dist/src/mcp/sa-impersonation-provider.test.js.map +0 -1
- package/dist/src/mcp/token-storage/base-token-storage.test.d.ts +0 -6
- package/dist/src/mcp/token-storage/base-token-storage.test.js +0 -151
- package/dist/src/mcp/token-storage/base-token-storage.test.js.map +0 -1
- package/dist/src/mcp/token-storage/file-token-storage.test.d.ts +0 -6
- package/dist/src/mcp/token-storage/file-token-storage.test.js +0 -238
- package/dist/src/mcp/token-storage/file-token-storage.test.js.map +0 -1
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.d.ts +0 -6
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +0 -193
- package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +0 -1
- package/dist/src/mcp/token-storage/keychain-token-storage.test.d.ts +0 -6
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js +0 -305
- package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +0 -1
- package/dist/src/output/json-formatter.test.d.ts +0 -6
- package/dist/src/output/json-formatter.test.js +0 -294
- package/dist/src/output/json-formatter.test.js.map +0 -1
- package/dist/src/output/stream-json-formatter.test.d.ts +0 -6
- package/dist/src/output/stream-json-formatter.test.js +0 -477
- package/dist/src/output/stream-json-formatter.test.js.map +0 -1
- package/dist/src/policy/config.test.d.ts +0 -6
- package/dist/src/policy/config.test.js +0 -598
- package/dist/src/policy/config.test.js.map +0 -1
- package/dist/src/policy/persistence.test.d.ts +0 -6
- package/dist/src/policy/persistence.test.js +0 -154
- package/dist/src/policy/persistence.test.js.map +0 -1
- package/dist/src/policy/policy-engine.test.d.ts +0 -6
- package/dist/src/policy/policy-engine.test.js +0 -1299
- package/dist/src/policy/policy-engine.test.js.map +0 -1
- package/dist/src/policy/policy-updater.test.d.ts +0 -6
- package/dist/src/policy/policy-updater.test.js +0 -116
- package/dist/src/policy/policy-updater.test.js.map +0 -1
- package/dist/src/policy/shell-safety.test.d.ts +0 -6
- package/dist/src/policy/shell-safety.test.js +0 -438
- package/dist/src/policy/shell-safety.test.js.map +0 -1
- package/dist/src/policy/toml-loader.test.d.ts +0 -6
- package/dist/src/policy/toml-loader.test.js +0 -409
- package/dist/src/policy/toml-loader.test.js.map +0 -1
- package/dist/src/policy/utils.test.d.ts +0 -6
- package/dist/src/policy/utils.test.js +0 -92
- package/dist/src/policy/utils.test.js.map +0 -1
- package/dist/src/prompts/mcp-prompts.test.d.ts +0 -6
- package/dist/src/prompts/mcp-prompts.test.js +0 -39
- package/dist/src/prompts/mcp-prompts.test.js.map +0 -1
- package/dist/src/prompts/prompt-registry.test.d.ts +0 -6
- package/dist/src/prompts/prompt-registry.test.js +0 -96
- package/dist/src/prompts/prompt-registry.test.js.map +0 -1
- package/dist/src/providers/__tests__/bundleSize.test.d.ts +0 -6
- package/dist/src/providers/__tests__/bundleSize.test.js +0 -75
- package/dist/src/providers/__tests__/bundleSize.test.js.map +0 -1
- package/dist/src/providers/__tests__/errorHandling.integration.test.d.ts +0 -6
- package/dist/src/providers/__tests__/errorHandling.integration.test.js +0 -339
- package/dist/src/providers/__tests__/errorHandling.integration.test.js.map +0 -1
- package/dist/src/providers/__tests__/multiProvider.integration.test.d.ts +0 -6
- package/dist/src/providers/__tests__/multiProvider.integration.test.js +0 -419
- package/dist/src/providers/__tests__/multiProvider.integration.test.js.map +0 -1
- package/dist/src/providers/__tests__/performance.test.d.ts +0 -6
- package/dist/src/providers/__tests__/performance.test.js +0 -270
- package/dist/src/providers/__tests__/performance.test.js.map +0 -1
- package/dist/src/providers/__tests__/providerConfigIntegration.test.d.ts +0 -6
- package/dist/src/providers/__tests__/providerConfigIntegration.test.js +0 -245
- package/dist/src/providers/__tests__/providerConfigIntegration.test.js.map +0 -1
- package/dist/src/providers/baseAdapter.test.d.ts +0 -1
- package/dist/src/providers/baseAdapter.test.js +0 -142
- package/dist/src/providers/baseAdapter.test.js.map +0 -1
- package/dist/src/providers/claude/adapter.test.d.ts +0 -6
- package/dist/src/providers/claude/adapter.test.js +0 -628
- package/dist/src/providers/claude/adapter.test.js.map +0 -1
- package/dist/src/providers/claude/bootstrap.test.d.ts +0 -6
- package/dist/src/providers/claude/bootstrap.test.js +0 -74
- package/dist/src/providers/claude/bootstrap.test.js.map +0 -1
- package/dist/src/providers/claude/converter.test.d.ts +0 -6
- package/dist/src/providers/claude/converter.test.js +0 -1002
- package/dist/src/providers/claude/converter.test.js.map +0 -1
- package/dist/src/providers/claude/exports.test.d.ts +0 -6
- package/dist/src/providers/claude/exports.test.js +0 -40
- package/dist/src/providers/claude/exports.test.js.map +0 -1
- package/dist/src/providers/configAdapter.test.d.ts +0 -1
- package/dist/src/providers/configAdapter.test.js +0 -150
- package/dist/src/providers/configAdapter.test.js.map +0 -1
- package/dist/src/providers/contentResolver.test.d.ts +0 -1
- package/dist/src/providers/contentResolver.test.js +0 -89
- package/dist/src/providers/contentResolver.test.js.map +0 -1
- package/dist/src/providers/factory.test.d.ts +0 -1
- package/dist/src/providers/factory.test.js +0 -151
- package/dist/src/providers/factory.test.js.map +0 -1
- package/dist/src/providers/gemini/adapterBridge.test.d.ts +0 -6
- package/dist/src/providers/gemini/adapterBridge.test.js +0 -164
- package/dist/src/providers/gemini/adapterBridge.test.js.map +0 -1
- package/dist/src/providers/gemini/bootstrap.test.d.ts +0 -6
- package/dist/src/providers/gemini/bootstrap.test.js +0 -72
- package/dist/src/providers/gemini/bootstrap.test.js.map +0 -1
- package/dist/src/providers/gemini/configConverter.test.d.ts +0 -6
- package/dist/src/providers/gemini/configConverter.test.js +0 -218
- package/dist/src/providers/gemini/configConverter.test.js.map +0 -1
- package/dist/src/providers/gemini/errorClassifier.test.d.ts +0 -6
- package/dist/src/providers/gemini/errorClassifier.test.js +0 -83
- package/dist/src/providers/gemini/errorClassifier.test.js.map +0 -1
- package/dist/src/providers/gemini/eventMapper.test.d.ts +0 -6
- package/dist/src/providers/gemini/eventMapper.test.js +0 -502
- package/dist/src/providers/gemini/eventMapper.test.js.map +0 -1
- package/dist/src/providers/gemini/exports.test.d.ts +0 -6
- package/dist/src/providers/gemini/exports.test.js +0 -90
- package/dist/src/providers/gemini/exports.test.js.map +0 -1
- package/dist/src/providers/gemini/featureFlag.test.d.ts +0 -6
- package/dist/src/providers/gemini/featureFlag.test.js +0 -139
- package/dist/src/providers/gemini/featureFlag.test.js.map +0 -1
- package/dist/src/providers/gemini/geminiAdapter.test.d.ts +0 -6
- package/dist/src/providers/gemini/geminiAdapter.test.js +0 -279
- package/dist/src/providers/gemini/geminiAdapter.test.js.map +0 -1
- package/dist/src/providers/gemini/geminiConverter.test.d.ts +0 -6
- package/dist/src/providers/gemini/geminiConverter.test.js +0 -474
- package/dist/src/providers/gemini/geminiConverter.test.js.map +0 -1
- package/dist/src/providers/gemini/geminiParity.test.d.ts +0 -6
- package/dist/src/providers/gemini/geminiParity.test.js +0 -754
- package/dist/src/providers/gemini/geminiParity.test.js.map +0 -1
- package/dist/src/providers/gemini/geminiStream.test.d.ts +0 -6
- package/dist/src/providers/gemini/geminiStream.test.js +0 -391
- package/dist/src/providers/gemini/geminiStream.test.js.map +0 -1
- package/dist/src/providers/gemini/historyBuilder.test.d.ts +0 -6
- package/dist/src/providers/gemini/historyBuilder.test.js +0 -207
- package/dist/src/providers/gemini/historyBuilder.test.js.map +0 -1
- package/dist/src/providers/gemini/requestBuilder.test.d.ts +0 -6
- package/dist/src/providers/gemini/requestBuilder.test.js +0 -358
- package/dist/src/providers/gemini/requestBuilder.test.js.map +0 -1
- package/dist/src/providers/gemini/streamConverter.test.d.ts +0 -6
- package/dist/src/providers/gemini/streamConverter.test.js +0 -131
- package/dist/src/providers/gemini/streamConverter.test.js.map +0 -1
- package/dist/src/providers/modelSpec.test.d.ts +0 -1
- package/dist/src/providers/modelSpec.test.js +0 -119
- package/dist/src/providers/modelSpec.test.js.map +0 -1
- package/dist/src/providers/openai/adapter.test.d.ts +0 -6
- package/dist/src/providers/openai/adapter.test.js +0 -274
- package/dist/src/providers/openai/adapter.test.js.map +0 -1
- package/dist/src/providers/openai/bootstrap.test.d.ts +0 -6
- package/dist/src/providers/openai/bootstrap.test.js +0 -76
- package/dist/src/providers/openai/bootstrap.test.js.map +0 -1
- package/dist/src/providers/openai/converter.test.d.ts +0 -6
- package/dist/src/providers/openai/converter.test.js +0 -1133
- package/dist/src/providers/openai/converter.test.js.map +0 -1
- package/dist/src/providers/openai-compatible/__tests__/compatibility.test.d.ts +0 -6
- package/dist/src/providers/openai-compatible/__tests__/compatibility.test.js +0 -356
- package/dist/src/providers/openai-compatible/__tests__/compatibility.test.js.map +0 -1
- package/dist/src/providers/openai-compatible/adapter.test.d.ts +0 -6
- package/dist/src/providers/openai-compatible/adapter.test.js +0 -240
- package/dist/src/providers/openai-compatible/adapter.test.js.map +0 -1
- package/dist/src/providers/openai-compatible/bootstrap.test.d.ts +0 -6
- package/dist/src/providers/openai-compatible/bootstrap.test.js +0 -145
- package/dist/src/providers/openai-compatible/bootstrap.test.js.map +0 -1
- package/dist/src/providers/openai-compatible/promptBuilder.test.d.ts +0 -6
- package/dist/src/providers/openai-compatible/promptBuilder.test.js +0 -154
- package/dist/src/providers/openai-compatible/promptBuilder.test.js.map +0 -1
- package/dist/src/providers/providerConfig.test.d.ts +0 -1
- package/dist/src/providers/providerConfig.test.js +0 -145
- package/dist/src/providers/providerConfig.test.js.map +0 -1
- package/dist/src/providers/providerConfigIntegration.test.d.ts +0 -6
- package/dist/src/providers/providerConfigIntegration.test.js +0 -187
- package/dist/src/providers/providerConfigIntegration.test.js.map +0 -1
- package/dist/src/providers/providerSelector.test.d.ts +0 -1
- package/dist/src/providers/providerSelector.test.js +0 -199
- package/dist/src/providers/providerSelector.test.js.map +0 -1
- package/dist/src/providers/providerTypes.test.d.ts +0 -1
- package/dist/src/providers/providerTypes.test.js +0 -95
- package/dist/src/providers/providerTypes.test.js.map +0 -1
- package/dist/src/providers/registry.test.d.ts +0 -1
- package/dist/src/providers/registry.test.js +0 -207
- package/dist/src/providers/registry.test.js.map +0 -1
- package/dist/src/providers/streamAssembler.test.d.ts +0 -1
- package/dist/src/providers/streamAssembler.test.js +0 -247
- package/dist/src/providers/streamAssembler.test.js.map +0 -1
- package/dist/src/providers/telemetryBridge.test.d.ts +0 -6
- package/dist/src/providers/telemetryBridge.test.js +0 -235
- package/dist/src/providers/telemetryBridge.test.js.map +0 -1
- package/dist/src/providers/types.test.d.ts +0 -6
- package/dist/src/providers/types.test.js +0 -253
- package/dist/src/providers/types.test.js.map +0 -1
- package/dist/src/resources/resource-registry.test.d.ts +0 -6
- package/dist/src/resources/resource-registry.test.js +0 -54
- package/dist/src/resources/resource-registry.test.js.map +0 -1
- package/dist/src/routing/modelRouterService.test.d.ts +0 -6
- package/dist/src/routing/modelRouterService.test.js +0 -106
- package/dist/src/routing/modelRouterService.test.js.map +0 -1
- package/dist/src/routing/strategies/classifierStrategy.test.d.ts +0 -6
- package/dist/src/routing/strategies/classifierStrategy.test.js +0 -249
- package/dist/src/routing/strategies/classifierStrategy.test.js.map +0 -1
- package/dist/src/routing/strategies/compositeStrategy.test.d.ts +0 -6
- package/dist/src/routing/strategies/compositeStrategy.test.js +0 -124
- package/dist/src/routing/strategies/compositeStrategy.test.js.map +0 -1
- package/dist/src/routing/strategies/defaultStrategy.test.d.ts +0 -6
- package/dist/src/routing/strategies/defaultStrategy.test.js +0 -102
- package/dist/src/routing/strategies/defaultStrategy.test.js.map +0 -1
- package/dist/src/routing/strategies/fallbackStrategy.test.d.ts +0 -6
- package/dist/src/routing/strategies/fallbackStrategy.test.js +0 -96
- package/dist/src/routing/strategies/fallbackStrategy.test.js.map +0 -1
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.d.ts +0 -6
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +0 -367
- package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +0 -1
- package/dist/src/routing/strategies/overrideStrategy.test.d.ts +0 -6
- package/dist/src/routing/strategies/overrideStrategy.test.js +0 -59
- package/dist/src/routing/strategies/overrideStrategy.test.js.map +0 -1
- package/dist/src/safety/built-in.test.d.ts +0 -6
- package/dist/src/safety/built-in.test.js +0 -199
- package/dist/src/safety/built-in.test.js.map +0 -1
- package/dist/src/safety/checker-runner.test.d.ts +0 -6
- package/dist/src/safety/checker-runner.test.js +0 -238
- package/dist/src/safety/checker-runner.test.js.map +0 -1
- package/dist/src/safety/context-builder.test.d.ts +0 -6
- package/dist/src/safety/context-builder.test.js +0 -49
- package/dist/src/safety/context-builder.test.js.map +0 -1
- package/dist/src/safety/registry.test.d.ts +0 -6
- package/dist/src/safety/registry.test.js +0 -31
- package/dist/src/safety/registry.test.js.map +0 -1
- package/dist/src/scheduler/confirmation.test.d.ts +0 -6
- package/dist/src/scheduler/confirmation.test.js +0 -325
- package/dist/src/scheduler/confirmation.test.js.map +0 -1
- package/dist/src/scheduler/policy.test.d.ts +0 -6
- package/dist/src/scheduler/policy.test.js +0 -299
- package/dist/src/scheduler/policy.test.js.map +0 -1
- package/dist/src/scheduler/scheduler.test.d.ts +0 -6
- package/dist/src/scheduler/scheduler.test.js +0 -822
- package/dist/src/scheduler/scheduler.test.js.map +0 -1
- package/dist/src/scheduler/state-manager.test.d.ts +0 -6
- package/dist/src/scheduler/state-manager.test.js +0 -429
- package/dist/src/scheduler/state-manager.test.js.map +0 -1
- package/dist/src/scheduler/tool-executor.test.d.ts +0 -6
- package/dist/src/scheduler/tool-executor.test.js +0 -232
- package/dist/src/scheduler/tool-executor.test.js.map +0 -1
- package/dist/src/scheduler/tool-modifier.test.d.ts +0 -6
- package/dist/src/scheduler/tool-modifier.test.js +0 -159
- package/dist/src/scheduler/tool-modifier.test.js.map +0 -1
- package/dist/src/services/chatCompressionService.test.d.ts +0 -6
- package/dist/src/services/chatCompressionService.test.js +0 -573
- package/dist/src/services/chatCompressionService.test.js.map +0 -1
- package/dist/src/services/chatRecordingService.test.d.ts +0 -6
- package/dist/src/services/chatRecordingService.test.js +0 -486
- package/dist/src/services/chatRecordingService.test.js.map +0 -1
- package/dist/src/services/contextManager.test.d.ts +0 -6
- package/dist/src/services/contextManager.test.js +0 -104
- package/dist/src/services/contextManager.test.js.map +0 -1
- package/dist/src/services/environmentSanitization.test.d.ts +0 -6
- package/dist/src/services/environmentSanitization.test.js +0 -284
- package/dist/src/services/environmentSanitization.test.js.map +0 -1
- package/dist/src/services/fileDiscoveryService.test.d.ts +0 -6
- package/dist/src/services/fileDiscoveryService.test.js +0 -223
- package/dist/src/services/fileDiscoveryService.test.js.map +0 -1
- package/dist/src/services/fileSystemService.test.d.ts +0 -6
- package/dist/src/services/fileSystemService.test.js +0 -41
- package/dist/src/services/fileSystemService.test.js.map +0 -1
- package/dist/src/services/gitService.test.d.ts +0 -6
- package/dist/src/services/gitService.test.js +0 -264
- package/dist/src/services/gitService.test.js.map +0 -1
- package/dist/src/services/loopDetectionService.test.d.ts +0 -6
- package/dist/src/services/loopDetectionService.test.js +0 -881
- package/dist/src/services/loopDetectionService.test.js.map +0 -1
- package/dist/src/services/modelConfig.golden.test.d.ts +0 -6
- package/dist/src/services/modelConfig.golden.test.js +0 -74
- package/dist/src/services/modelConfig.golden.test.js.map +0 -1
- package/dist/src/services/modelConfig.integration.test.d.ts +0 -6
- package/dist/src/services/modelConfig.integration.test.js +0 -247
- package/dist/src/services/modelConfig.integration.test.js.map +0 -1
- package/dist/src/services/modelConfigBridge.test.d.ts +0 -6
- package/dist/src/services/modelConfigBridge.test.js +0 -410
- package/dist/src/services/modelConfigBridge.test.js.map +0 -1
- package/dist/src/services/modelConfigService.test.d.ts +0 -6
- package/dist/src/services/modelConfigService.test.js +0 -868
- package/dist/src/services/modelConfigService.test.js.map +0 -1
- package/dist/src/services/sessionSummaryService.test.d.ts +0 -6
- package/dist/src/services/sessionSummaryService.test.js +0 -785
- package/dist/src/services/sessionSummaryService.test.js.map +0 -1
- package/dist/src/services/sessionSummaryUtils.test.d.ts +0 -6
- package/dist/src/services/sessionSummaryUtils.test.js +0 -160
- package/dist/src/services/sessionSummaryUtils.test.js.map +0 -1
- package/dist/src/services/shellExecutionService.test.d.ts +0 -6
- package/dist/src/services/shellExecutionService.test.js +0 -1080
- package/dist/src/services/shellExecutionService.test.js.map +0 -1
- package/dist/src/skills/skillLoader.test.d.ts +0 -6
- package/dist/src/skills/skillLoader.test.js +0 -185
- package/dist/src/skills/skillLoader.test.js.map +0 -1
- package/dist/src/skills/skillManager.test.d.ts +0 -6
- package/dist/src/skills/skillManager.test.js +0 -297
- package/dist/src/skills/skillManager.test.js.map +0 -1
- package/dist/src/telemetry/activity-detector.test.d.ts +0 -6
- package/dist/src/telemetry/activity-detector.test.js +0 -136
- package/dist/src/telemetry/activity-detector.test.js.map +0 -1
- package/dist/src/telemetry/activity-monitor.test.d.ts +0 -6
- package/dist/src/telemetry/activity-monitor.test.js +0 -251
- package/dist/src/telemetry/activity-monitor.test.js.map +0 -1
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +0 -19
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +0 -964
- package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +0 -1
- package/dist/src/telemetry/config.test.d.ts +0 -6
- package/dist/src/telemetry/config.test.js +0 -149
- package/dist/src/telemetry/config.test.js.map +0 -1
- package/dist/src/telemetry/gcp-exporters.test.d.ts +0 -6
- package/dist/src/telemetry/gcp-exporters.test.js +0 -318
- package/dist/src/telemetry/gcp-exporters.test.js.map +0 -1
- package/dist/src/telemetry/high-water-mark-tracker.test.d.ts +0 -6
- package/dist/src/telemetry/high-water-mark-tracker.test.js +0 -152
- package/dist/src/telemetry/high-water-mark-tracker.test.js.map +0 -1
- package/dist/src/telemetry/integration.test.circular.d.ts +0 -6
- package/dist/src/telemetry/integration.test.circular.js +0 -54
- package/dist/src/telemetry/integration.test.circular.js.map +0 -1
- package/dist/src/telemetry/loggers.test.circular.d.ts +0 -6
- package/dist/src/telemetry/loggers.test.circular.js +0 -107
- package/dist/src/telemetry/loggers.test.circular.js.map +0 -1
- package/dist/src/telemetry/loggers.test.d.ts +0 -6
- package/dist/src/telemetry/loggers.test.js +0 -1618
- package/dist/src/telemetry/loggers.test.js.map +0 -1
- package/dist/src/telemetry/memory-monitor.test.d.ts +0 -6
- package/dist/src/telemetry/memory-monitor.test.js +0 -472
- package/dist/src/telemetry/memory-monitor.test.js.map +0 -1
- package/dist/src/telemetry/metrics.test.d.ts +0 -6
- package/dist/src/telemetry/metrics.test.js +0 -1176
- package/dist/src/telemetry/metrics.test.js.map +0 -1
- package/dist/src/telemetry/rate-limiter.test.d.ts +0 -6
- package/dist/src/telemetry/rate-limiter.test.js +0 -207
- package/dist/src/telemetry/rate-limiter.test.js.map +0 -1
- package/dist/src/telemetry/sanitize.test.d.ts +0 -6
- package/dist/src/telemetry/sanitize.test.js +0 -279
- package/dist/src/telemetry/sanitize.test.js.map +0 -1
- package/dist/src/telemetry/sdk.test.d.ts +0 -6
- package/dist/src/telemetry/sdk.test.js +0 -360
- package/dist/src/telemetry/sdk.test.js.map +0 -1
- package/dist/src/telemetry/semantic.test.d.ts +0 -6
- package/dist/src/telemetry/semantic.test.js +0 -387
- package/dist/src/telemetry/semantic.test.js.map +0 -1
- package/dist/src/telemetry/semantic.truncation.test.d.ts +0 -1
- package/dist/src/telemetry/semantic.truncation.test.js +0 -92
- package/dist/src/telemetry/semantic.truncation.test.js.map +0 -1
- package/dist/src/telemetry/startupProfiler.test.d.ts +0 -6
- package/dist/src/telemetry/startupProfiler.test.js +0 -285
- package/dist/src/telemetry/startupProfiler.test.js.map +0 -1
- package/dist/src/telemetry/telemetry-utils.test.d.ts +0 -6
- package/dist/src/telemetry/telemetry-utils.test.js +0 -41
- package/dist/src/telemetry/telemetry-utils.test.js.map +0 -1
- package/dist/src/telemetry/telemetry.test.d.ts +0 -6
- package/dist/src/telemetry/telemetry.test.js +0 -57
- package/dist/src/telemetry/telemetry.test.js.map +0 -1
- package/dist/src/telemetry/uiTelemetry.test.d.ts +0 -6
- package/dist/src/telemetry/uiTelemetry.test.js +0 -584
- package/dist/src/telemetry/uiTelemetry.test.js.map +0 -1
- package/dist/src/tools/activate-skill.test.d.ts +0 -6
- package/dist/src/tools/activate-skill.test.js +0 -113
- package/dist/src/tools/activate-skill.test.js.map +0 -1
- package/dist/src/tools/ask-user.test.d.ts +0 -6
- package/dist/src/tools/ask-user.test.js +0 -187
- package/dist/src/tools/ask-user.test.js.map +0 -1
- package/dist/src/tools/base-tool-invocation.test.d.ts +0 -6
- package/dist/src/tools/base-tool-invocation.test.js +0 -85
- package/dist/src/tools/base-tool-invocation.test.js.map +0 -1
- package/dist/src/tools/confirmation-policy.test.d.ts +0 -6
- package/dist/src/tools/confirmation-policy.test.js +0 -143
- package/dist/src/tools/confirmation-policy.test.js.map +0 -1
- package/dist/src/tools/diffOptions.test.d.ts +0 -6
- package/dist/src/tools/diffOptions.test.js +0 -172
- package/dist/src/tools/diffOptions.test.js.map +0 -1
- package/dist/src/tools/edit.test.d.ts +0 -6
- package/dist/src/tools/edit.test.js +0 -729
- package/dist/src/tools/edit.test.js.map +0 -1
- package/dist/src/tools/get-internal-docs.test.d.ts +0 -6
- package/dist/src/tools/get-internal-docs.test.js +0 -57
- package/dist/src/tools/get-internal-docs.test.js.map +0 -1
- package/dist/src/tools/glob.test.d.ts +0 -6
- package/dist/src/tools/glob.test.js +0 -433
- package/dist/src/tools/glob.test.js.map +0 -1
- package/dist/src/tools/grep.test.d.ts +0 -6
- package/dist/src/tools/grep.test.js +0 -328
- package/dist/src/tools/grep.test.js.map +0 -1
- package/dist/src/tools/ls.test.d.ts +0 -6
- package/dist/src/tools/ls.test.js +0 -242
- package/dist/src/tools/ls.test.js.map +0 -1
- package/dist/src/tools/mcp-client-manager.test.d.ts +0 -6
- package/dist/src/tools/mcp-client-manager.test.js +0 -251
- package/dist/src/tools/mcp-client-manager.test.js.map +0 -1
- package/dist/src/tools/mcp-client.test.d.ts +0 -6
- package/dist/src/tools/mcp-client.test.js +0 -1346
- package/dist/src/tools/mcp-client.test.js.map +0 -1
- package/dist/src/tools/mcp-tool.test.d.ts +0 -6
- package/dist/src/tools/mcp-tool.test.js +0 -657
- package/dist/src/tools/mcp-tool.test.js.map +0 -1
- package/dist/src/tools/memoryTool.test.d.ts +0 -6
- package/dist/src/tools/memoryTool.test.js +0 -302
- package/dist/src/tools/memoryTool.test.js.map +0 -1
- package/dist/src/tools/message-bus-integration.test.d.ts +0 -6
- package/dist/src/tools/message-bus-integration.test.js +0 -169
- package/dist/src/tools/message-bus-integration.test.js.map +0 -1
- package/dist/src/tools/modifiable-tool.test.d.ts +0 -6
- package/dist/src/tools/modifiable-tool.test.js +0 -237
- package/dist/src/tools/modifiable-tool.test.js.map +0 -1
- package/dist/src/tools/read-file.test.d.ts +0 -6
- package/dist/src/tools/read-file.test.js +0 -376
- package/dist/src/tools/read-file.test.js.map +0 -1
- package/dist/src/tools/read-many-files.test.d.ts +0 -6
- package/dist/src/tools/read-many-files.test.js +0 -567
- package/dist/src/tools/read-many-files.test.js.map +0 -1
- package/dist/src/tools/ripGrep.test.d.ts +0 -6
- package/dist/src/tools/ripGrep.test.js +0 -1139
- package/dist/src/tools/ripGrep.test.js.map +0 -1
- package/dist/src/tools/shell.test.d.ts +0 -6
- package/dist/src/tools/shell.test.js +0 -526
- package/dist/src/tools/shell.test.js.map +0 -1
- package/dist/src/tools/tool-names.test.d.ts +0 -6
- package/dist/src/tools/tool-names.test.js +0 -43
- package/dist/src/tools/tool-names.test.js.map +0 -1
- package/dist/src/tools/tool-registry.test.d.ts +0 -6
- package/dist/src/tools/tool-registry.test.js +0 -461
- package/dist/src/tools/tool-registry.test.js.map +0 -1
- package/dist/src/tools/tools.test.d.ts +0 -6
- package/dist/src/tools/tools.test.js +0 -207
- package/dist/src/tools/tools.test.js.map +0 -1
- package/dist/src/tools/web-fetch.test.d.ts +0 -6
- package/dist/src/tools/web-fetch.test.js +0 -442
- package/dist/src/tools/web-fetch.test.js.map +0 -1
- package/dist/src/tools/web-search.test.d.ts +0 -6
- package/dist/src/tools/web-search.test.js +0 -214
- package/dist/src/tools/web-search.test.js.map +0 -1
- package/dist/src/tools/write-file.test.d.ts +0 -6
- package/dist/src/tools/write-file.test.js +0 -681
- package/dist/src/tools/write-file.test.js.map +0 -1
- package/dist/src/tools/write-todos.test.d.ts +0 -6
- package/dist/src/tools/write-todos.test.js +0 -90
- package/dist/src/tools/write-todos.test.js.map +0 -1
- package/dist/src/utils/apiConversionUtils.test.d.ts +0 -6
- package/dist/src/utils/apiConversionUtils.test.js +0 -150
- package/dist/src/utils/apiConversionUtils.test.js.map +0 -1
- package/dist/src/utils/bfsFileSearch.test.d.ts +0 -6
- package/dist/src/utils/bfsFileSearch.test.js +0 -227
- package/dist/src/utils/bfsFileSearch.test.js.map +0 -1
- package/dist/src/utils/channel.test.d.ts +0 -6
- package/dist/src/utils/channel.test.js +0 -170
- package/dist/src/utils/channel.test.js.map +0 -1
- package/dist/src/utils/checkpointUtils.test.d.ts +0 -6
- package/dist/src/utils/checkpointUtils.test.js +0 -229
- package/dist/src/utils/checkpointUtils.test.js.map +0 -1
- package/dist/src/utils/customHeaderUtils.test.d.ts +0 -6
- package/dist/src/utils/customHeaderUtils.test.js +0 -77
- package/dist/src/utils/customHeaderUtils.test.js.map +0 -1
- package/dist/src/utils/debugLogger.test.d.ts +0 -6
- package/dist/src/utils/debugLogger.test.js +0 -69
- package/dist/src/utils/debugLogger.test.js.map +0 -1
- package/dist/src/utils/delay.test.d.ts +0 -6
- package/dist/src/utils/delay.test.js +0 -88
- package/dist/src/utils/delay.test.js.map +0 -1
- package/dist/src/utils/editCorrector.test.d.ts +0 -6
- package/dist/src/utils/editCorrector.test.js +0 -533
- package/dist/src/utils/editCorrector.test.js.map +0 -1
- package/dist/src/utils/editor.test.d.ts +0 -6
- package/dist/src/utils/editor.test.js +0 -429
- package/dist/src/utils/editor.test.js.map +0 -1
- package/dist/src/utils/environmentContext.test.d.ts +0 -6
- package/dist/src/utils/environmentContext.test.js +0 -114
- package/dist/src/utils/environmentContext.test.js.map +0 -1
- package/dist/src/utils/errorParsing.test.d.ts +0 -6
- package/dist/src/utils/errorParsing.test.js +0 -84
- package/dist/src/utils/errorParsing.test.js.map +0 -1
- package/dist/src/utils/errorReporting.test.d.ts +0 -6
- package/dist/src/utils/errorReporting.test.js +0 -133
- package/dist/src/utils/errorReporting.test.js.map +0 -1
- package/dist/src/utils/errors.test.d.ts +0 -6
- package/dist/src/utils/errors.test.js +0 -155
- package/dist/src/utils/errors.test.js.map +0 -1
- package/dist/src/utils/events.test.d.ts +0 -6
- package/dist/src/utils/events.test.js +0 -237
- package/dist/src/utils/events.test.js.map +0 -1
- package/dist/src/utils/extensionLoader.test.d.ts +0 -6
- package/dist/src/utils/extensionLoader.test.js +0 -176
- package/dist/src/utils/extensionLoader.test.js.map +0 -1
- package/dist/src/utils/fileDiffUtils.test.d.ts +0 -6
- package/dist/src/utils/fileDiffUtils.test.js +0 -84
- package/dist/src/utils/fileDiffUtils.test.js.map +0 -1
- package/dist/src/utils/fileUtils.test.d.ts +0 -6
- package/dist/src/utils/fileUtils.test.js +0 -780
- package/dist/src/utils/fileUtils.test.js.map +0 -1
- package/dist/src/utils/filesearch/crawlCache.test.d.ts +0 -6
- package/dist/src/utils/filesearch/crawlCache.test.js +0 -103
- package/dist/src/utils/filesearch/crawlCache.test.js.map +0 -1
- package/dist/src/utils/filesearch/crawler.test.d.ts +0 -6
- package/dist/src/utils/filesearch/crawler.test.js +0 -495
- package/dist/src/utils/filesearch/crawler.test.js.map +0 -1
- package/dist/src/utils/filesearch/fileSearch.test.d.ts +0 -6
- package/dist/src/utils/filesearch/fileSearch.test.js +0 -663
- package/dist/src/utils/filesearch/fileSearch.test.js.map +0 -1
- package/dist/src/utils/filesearch/ignore.test.d.ts +0 -6
- package/dist/src/utils/filesearch/ignore.test.js +0 -144
- package/dist/src/utils/filesearch/ignore.test.js.map +0 -1
- package/dist/src/utils/filesearch/result-cache.test.d.ts +0 -6
- package/dist/src/utils/filesearch/result-cache.test.js +0 -46
- package/dist/src/utils/filesearch/result-cache.test.js.map +0 -1
- package/dist/src/utils/flashFallback.test.d.ts +0 -6
- package/dist/src/utils/flashFallback.test.js +0 -103
- package/dist/src/utils/flashFallback.test.js.map +0 -1
- package/dist/src/utils/formatters.test.d.ts +0 -6
- package/dist/src/utils/formatters.test.js +0 -26
- package/dist/src/utils/formatters.test.js.map +0 -1
- package/dist/src/utils/geminiIgnoreParser.test.d.ts +0 -6
- package/dist/src/utils/geminiIgnoreParser.test.js +0 -98
- package/dist/src/utils/geminiIgnoreParser.test.js.map +0 -1
- package/dist/src/utils/geminiTypeConversion.test.d.ts +0 -6
- package/dist/src/utils/geminiTypeConversion.test.js +0 -310
- package/dist/src/utils/geminiTypeConversion.test.js.map +0 -1
- package/dist/src/utils/generateContentResponseUtilities.test.d.ts +0 -6
- package/dist/src/utils/generateContentResponseUtilities.test.js +0 -512
- package/dist/src/utils/generateContentResponseUtilities.test.js.map +0 -1
- package/dist/src/utils/getFolderStructure.test.d.ts +0 -6
- package/dist/src/utils/getFolderStructure.test.js +0 -283
- package/dist/src/utils/getFolderStructure.test.js.map +0 -1
- package/dist/src/utils/gitIgnoreParser.test.d.ts +0 -6
- package/dist/src/utils/gitIgnoreParser.test.js +0 -243
- package/dist/src/utils/gitIgnoreParser.test.js.map +0 -1
- package/dist/src/utils/googleErrors.test.d.ts +0 -6
- package/dist/src/utils/googleErrors.test.js +0 -309
- package/dist/src/utils/googleErrors.test.js.map +0 -1
- package/dist/src/utils/googleQuotaErrors.test.d.ts +0 -6
- package/dist/src/utils/googleQuotaErrors.test.js +0 -548
- package/dist/src/utils/googleQuotaErrors.test.js.map +0 -1
- package/dist/src/utils/ignorePatterns.test.d.ts +0 -6
- package/dist/src/utils/ignorePatterns.test.js +0 -246
- package/dist/src/utils/ignorePatterns.test.js.map +0 -1
- package/dist/src/utils/installationManager.test.d.ts +0 -6
- package/dist/src/utils/installationManager.test.js +0 -93
- package/dist/src/utils/installationManager.test.js.map +0 -1
- package/dist/src/utils/llm-edit-fixer.test.d.ts +0 -6
- package/dist/src/utils/llm-edit-fixer.test.js +0 -223
- package/dist/src/utils/llm-edit-fixer.test.js.map +0 -1
- package/dist/src/utils/llmUtils.test.d.ts +0 -6
- package/dist/src/utils/llmUtils.test.js +0 -196
- package/dist/src/utils/llmUtils.test.js.map +0 -1
- package/dist/src/utils/memoryDiscovery.test.d.ts +0 -6
- package/dist/src/utils/memoryDiscovery.test.js +0 -542
- package/dist/src/utils/memoryDiscovery.test.js.map +0 -1
- package/dist/src/utils/memoryImportProcessor.test.d.ts +0 -6
- package/dist/src/utils/memoryImportProcessor.test.js +0 -581
- package/dist/src/utils/memoryImportProcessor.test.js.map +0 -1
- package/dist/src/utils/nextSpeakerChecker.test.d.ts +0 -6
- package/dist/src/utils/nextSpeakerChecker.test.js +0 -191
- package/dist/src/utils/nextSpeakerChecker.test.js.map +0 -1
- package/dist/src/utils/partUtils.test.d.ts +0 -6
- package/dist/src/utils/partUtils.test.js +0 -397
- package/dist/src/utils/partUtils.test.js.map +0 -1
- package/dist/src/utils/pathCorrector.test.d.ts +0 -6
- package/dist/src/utils/pathCorrector.test.js +0 -87
- package/dist/src/utils/pathCorrector.test.js.map +0 -1
- package/dist/src/utils/pathReader.test.d.ts +0 -6
- package/dist/src/utils/pathReader.test.js +0 -406
- package/dist/src/utils/pathReader.test.js.map +0 -1
- package/dist/src/utils/paths.test.d.ts +0 -6
- package/dist/src/utils/paths.test.js +0 -402
- package/dist/src/utils/paths.test.js.map +0 -1
- package/dist/src/utils/retry.test.d.ts +0 -6
- package/dist/src/utils/retry.test.js +0 -548
- package/dist/src/utils/retry.test.js.map +0 -1
- package/dist/src/utils/retry_llm_error.test.d.ts +0 -6
- package/dist/src/utils/retry_llm_error.test.js +0 -280
- package/dist/src/utils/retry_llm_error.test.js.map +0 -1
- package/dist/src/utils/safeJsonStringify.test.d.ts +0 -6
- package/dist/src/utils/safeJsonStringify.test.js +0 -61
- package/dist/src/utils/safeJsonStringify.test.js.map +0 -1
- package/dist/src/utils/schemaValidator.test.d.ts +0 -6
- package/dist/src/utils/schemaValidator.test.js +0 -113
- package/dist/src/utils/schemaValidator.test.js.map +0 -1
- package/dist/src/utils/secure-browser-launcher.test.d.ts +0 -6
- package/dist/src/utils/secure-browser-launcher.test.js +0 -149
- package/dist/src/utils/secure-browser-launcher.test.js.map +0 -1
- package/dist/src/utils/security.test.d.ts +0 -1
- package/dist/src/utils/security.test.js +0 -121
- package/dist/src/utils/security.test.js.map +0 -1
- package/dist/src/utils/shell-utils.integration.test.d.ts +0 -1
- package/dist/src/utils/shell-utils.integration.test.js +0 -58
- package/dist/src/utils/shell-utils.integration.test.js.map +0 -1
- package/dist/src/utils/shell-utils.test.d.ts +0 -6
- package/dist/src/utils/shell-utils.test.js +0 -437
- package/dist/src/utils/shell-utils.test.js.map +0 -1
- package/dist/src/utils/stdio.test.d.ts +0 -6
- package/dist/src/utils/stdio.test.js +0 -47
- package/dist/src/utils/stdio.test.js.map +0 -1
- package/dist/src/utils/summarizer.test.d.ts +0 -6
- package/dist/src/utils/summarizer.test.js +0 -152
- package/dist/src/utils/summarizer.test.js.map +0 -1
- package/dist/src/utils/systemEncoding.test.d.ts +0 -6
- package/dist/src/utils/systemEncoding.test.js +0 -369
- package/dist/src/utils/systemEncoding.test.js.map +0 -1
- package/dist/src/utils/terminalSerializer.test.d.ts +0 -6
- package/dist/src/utils/terminalSerializer.test.js +0 -193
- package/dist/src/utils/terminalSerializer.test.js.map +0 -1
- package/dist/src/utils/textUtils.test.d.ts +0 -6
- package/dist/src/utils/textUtils.test.js +0 -76
- package/dist/src/utils/textUtils.test.js.map +0 -1
- package/dist/src/utils/thoughtUtils.test.d.ts +0 -6
- package/dist/src/utils/thoughtUtils.test.js +0 -78
- package/dist/src/utils/thoughtUtils.test.js.map +0 -1
- package/dist/src/utils/tokenCalculation.test.d.ts +0 -6
- package/dist/src/utils/tokenCalculation.test.js +0 -184
- package/dist/src/utils/tokenCalculation.test.js.map +0 -1
- package/dist/src/utils/tool-utils.test.d.ts +0 -6
- package/dist/src/utils/tool-utils.test.js +0 -84
- package/dist/src/utils/tool-utils.test.js.map +0 -1
- package/dist/src/utils/toolCallContext.test.d.ts +0 -6
- package/dist/src/utils/toolCallContext.test.js +0 -68
- package/dist/src/utils/toolCallContext.test.js.map +0 -1
- package/dist/src/utils/userAccountManager.test.d.ts +0 -6
- package/dist/src/utils/userAccountManager.test.js +0 -225
- package/dist/src/utils/userAccountManager.test.js.map +0 -1
- package/dist/src/utils/version.test.d.ts +0 -6
- package/dist/src/utils/version.test.js +0 -39
- package/dist/src/utils/version.test.js.map +0 -1
- package/dist/src/utils/workspaceContext.test.d.ts +0 -6
- package/dist/src/utils/workspaceContext.test.js +0 -374
- package/dist/src/utils/workspaceContext.test.js.map +0 -1
- package/dist/tsconfig.tsbuildinfo +0 -1
|
@@ -1,1811 +0,0 @@
|
|
|
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 { Config, DEFAULT_FILE_FILTERING_OPTIONS } from './config.js';
|
|
8
|
-
import { ExperimentFlags } from '../code_assist/experiments/flagNames.js';
|
|
9
|
-
import { debugLogger } from '../utils/debugLogger.js';
|
|
10
|
-
import { ApprovalMode } from '../policy/types.js';
|
|
11
|
-
import { HookType, HookEventName } from '../hooks/types.js';
|
|
12
|
-
import * as path from 'node:path';
|
|
13
|
-
import * as fs from 'node:fs';
|
|
14
|
-
import { setGeminiMdFilename as mockSetGeminiMdFilename } from '../tools/memoryTool.js';
|
|
15
|
-
import { DEFAULT_TELEMETRY_TARGET, DEFAULT_OTLP_ENDPOINT, } from '../telemetry/index.js';
|
|
16
|
-
import { AuthType, createContentGeneratorConfig, } from '../core/contentGenerator.js';
|
|
17
|
-
import { GeminiClient } from '../core/client.js';
|
|
18
|
-
import { GitService } from '../services/gitService.js';
|
|
19
|
-
import { ShellTool } from '../tools/shell.js';
|
|
20
|
-
import { ReadFileTool } from '../tools/read-file.js';
|
|
21
|
-
import { GrepTool } from '../tools/grep.js';
|
|
22
|
-
import { RipGrepTool, canUseRipgrep } from '../tools/ripGrep.js';
|
|
23
|
-
import { logRipgrepFallback } from '../telemetry/loggers.js';
|
|
24
|
-
import { RipgrepFallbackEvent } from '../telemetry/types.js';
|
|
25
|
-
import { ToolRegistry } from '../tools/tool-registry.js';
|
|
26
|
-
import { ACTIVATE_SKILL_TOOL_NAME } from '../tools/tool-names.js';
|
|
27
|
-
import { DEFAULT_MODEL_CONFIGS } from './defaultModelConfigs.js';
|
|
28
|
-
import { DEFAULT_GEMINI_MODEL, DEFAULT_GEMINI_MODEL_AUTO, PREVIEW_GEMINI_MODEL, PREVIEW_GEMINI_MODEL_AUTO, } from './models.js';
|
|
29
|
-
vi.mock('fs', async (importOriginal) => {
|
|
30
|
-
const actual = await importOriginal();
|
|
31
|
-
return {
|
|
32
|
-
...actual,
|
|
33
|
-
existsSync: vi.fn().mockReturnValue(true),
|
|
34
|
-
statSync: vi.fn().mockReturnValue({
|
|
35
|
-
isDirectory: vi.fn().mockReturnValue(true),
|
|
36
|
-
}),
|
|
37
|
-
realpathSync: vi.fn((path) => path),
|
|
38
|
-
};
|
|
39
|
-
});
|
|
40
|
-
// Mock dependencies that might be called during Config construction or createServerConfig
|
|
41
|
-
vi.mock('../tools/tool-registry', () => {
|
|
42
|
-
const ToolRegistryMock = vi.fn();
|
|
43
|
-
ToolRegistryMock.prototype.registerTool = vi.fn();
|
|
44
|
-
ToolRegistryMock.prototype.unregisterTool = vi.fn();
|
|
45
|
-
ToolRegistryMock.prototype.discoverAllTools = vi.fn();
|
|
46
|
-
ToolRegistryMock.prototype.sortTools = vi.fn();
|
|
47
|
-
ToolRegistryMock.prototype.getAllTools = vi.fn(() => []); // Mock methods if needed
|
|
48
|
-
ToolRegistryMock.prototype.getTool = vi.fn();
|
|
49
|
-
ToolRegistryMock.prototype.getFunctionDeclarations = vi.fn(() => []);
|
|
50
|
-
return { ToolRegistry: ToolRegistryMock };
|
|
51
|
-
});
|
|
52
|
-
vi.mock('../tools/mcp-client-manager.js', () => ({
|
|
53
|
-
McpClientManager: vi.fn().mockImplementation(() => ({
|
|
54
|
-
startConfiguredMcpServers: vi.fn(),
|
|
55
|
-
getMcpInstructions: vi.fn().mockReturnValue('MCP Instructions'),
|
|
56
|
-
})),
|
|
57
|
-
}));
|
|
58
|
-
vi.mock('../utils/memoryDiscovery.js', () => ({
|
|
59
|
-
loadServerHierarchicalMemory: vi.fn(),
|
|
60
|
-
}));
|
|
61
|
-
// Mock individual tools if their constructors are complex or have side effects
|
|
62
|
-
vi.mock('../tools/ls');
|
|
63
|
-
vi.mock('../tools/read-file');
|
|
64
|
-
vi.mock('../tools/grep.js');
|
|
65
|
-
vi.mock('../tools/ripGrep.js', () => ({
|
|
66
|
-
canUseRipgrep: vi.fn(),
|
|
67
|
-
RipGrepTool: class MockRipGrepTool {
|
|
68
|
-
},
|
|
69
|
-
}));
|
|
70
|
-
vi.mock('../tools/glob');
|
|
71
|
-
vi.mock('../tools/edit');
|
|
72
|
-
vi.mock('../tools/shell');
|
|
73
|
-
vi.mock('../tools/write-file');
|
|
74
|
-
vi.mock('../tools/web-fetch');
|
|
75
|
-
vi.mock('../tools/read-many-files');
|
|
76
|
-
vi.mock('../tools/memoryTool', () => ({
|
|
77
|
-
MemoryTool: vi.fn(),
|
|
78
|
-
setGeminiMdFilename: vi.fn(),
|
|
79
|
-
getCurrentGeminiMdFilename: vi.fn(() => 'GEMINI.md'), // Mock the original filename
|
|
80
|
-
DEFAULT_CONTEXT_FILENAME: 'GEMINI.md',
|
|
81
|
-
GEMINI_DIR: '.gemini',
|
|
82
|
-
}));
|
|
83
|
-
vi.mock('../core/contentGenerator.js');
|
|
84
|
-
vi.mock('../core/client.js', () => ({
|
|
85
|
-
GeminiClient: vi.fn().mockImplementation(() => ({
|
|
86
|
-
initialize: vi.fn().mockResolvedValue(undefined),
|
|
87
|
-
stripThoughtsFromHistory: vi.fn(),
|
|
88
|
-
isInitialized: vi.fn().mockReturnValue(false),
|
|
89
|
-
})),
|
|
90
|
-
}));
|
|
91
|
-
vi.mock('../telemetry/index.js', async (importOriginal) => {
|
|
92
|
-
const actual = await importOriginal();
|
|
93
|
-
return {
|
|
94
|
-
...actual,
|
|
95
|
-
initializeTelemetry: vi.fn(),
|
|
96
|
-
uiTelemetryService: {
|
|
97
|
-
getLastPromptTokenCount: vi.fn(),
|
|
98
|
-
},
|
|
99
|
-
};
|
|
100
|
-
});
|
|
101
|
-
vi.mock('../telemetry/loggers.js', async (importOriginal) => {
|
|
102
|
-
const actual = await importOriginal();
|
|
103
|
-
return {
|
|
104
|
-
...actual,
|
|
105
|
-
logRipgrepFallback: vi.fn(),
|
|
106
|
-
};
|
|
107
|
-
});
|
|
108
|
-
vi.mock('../services/gitService.js', () => {
|
|
109
|
-
const GitServiceMock = vi.fn();
|
|
110
|
-
GitServiceMock.prototype.initialize = vi.fn();
|
|
111
|
-
return { GitService: GitServiceMock };
|
|
112
|
-
});
|
|
113
|
-
vi.mock('../ide/ide-client.js', () => ({
|
|
114
|
-
IdeClient: {
|
|
115
|
-
getInstance: vi.fn().mockResolvedValue({
|
|
116
|
-
getConnectionStatus: vi.fn(),
|
|
117
|
-
initialize: vi.fn(),
|
|
118
|
-
shutdown: vi.fn(),
|
|
119
|
-
}),
|
|
120
|
-
},
|
|
121
|
-
}));
|
|
122
|
-
vi.mock('../agents/registry.js', () => {
|
|
123
|
-
const AgentRegistryMock = vi.fn();
|
|
124
|
-
AgentRegistryMock.prototype.initialize = vi.fn();
|
|
125
|
-
AgentRegistryMock.prototype.getAllDefinitions = vi.fn(() => []);
|
|
126
|
-
AgentRegistryMock.prototype.getDefinition = vi.fn();
|
|
127
|
-
return { AgentRegistry: AgentRegistryMock };
|
|
128
|
-
});
|
|
129
|
-
vi.mock('../agents/subagent-tool.js', () => ({
|
|
130
|
-
SubagentTool: vi.fn(),
|
|
131
|
-
}));
|
|
132
|
-
vi.mock('../resources/resource-registry.js', () => ({
|
|
133
|
-
ResourceRegistry: vi.fn(),
|
|
134
|
-
}));
|
|
135
|
-
const mockCoreEvents = vi.hoisted(() => ({
|
|
136
|
-
emitFeedback: vi.fn(),
|
|
137
|
-
emitModelChanged: vi.fn(),
|
|
138
|
-
emitConsoleLog: vi.fn(),
|
|
139
|
-
on: vi.fn(),
|
|
140
|
-
}));
|
|
141
|
-
const mockSetGlobalProxy = vi.hoisted(() => vi.fn());
|
|
142
|
-
vi.mock('../utils/events.js', async (importOriginal) => {
|
|
143
|
-
const actual = await importOriginal();
|
|
144
|
-
return {
|
|
145
|
-
...actual,
|
|
146
|
-
coreEvents: mockCoreEvents,
|
|
147
|
-
};
|
|
148
|
-
});
|
|
149
|
-
vi.mock('../utils/fetch.js', () => ({
|
|
150
|
-
setGlobalProxy: mockSetGlobalProxy,
|
|
151
|
-
}));
|
|
152
|
-
vi.mock('../services/contextManager.js');
|
|
153
|
-
import { BaseLlmClient } from '../core/baseLlmClient.js';
|
|
154
|
-
import { tokenLimit } from '../core/tokenLimits.js';
|
|
155
|
-
import { uiTelemetryService } from '../telemetry/index.js';
|
|
156
|
-
import { getCodeAssistServer } from '../code_assist/codeAssist.js';
|
|
157
|
-
import { getExperiments } from '../code_assist/experiments/experiments.js';
|
|
158
|
-
import { ContextManager } from '../services/contextManager.js';
|
|
159
|
-
vi.mock('../core/baseLlmClient.js');
|
|
160
|
-
vi.mock('../core/tokenLimits.js', () => ({
|
|
161
|
-
tokenLimit: vi.fn(),
|
|
162
|
-
}));
|
|
163
|
-
vi.mock('../code_assist/codeAssist.js');
|
|
164
|
-
vi.mock('../code_assist/experiments/experiments.js');
|
|
165
|
-
describe('Server Config (config.ts)', () => {
|
|
166
|
-
const MODEL = DEFAULT_GEMINI_MODEL;
|
|
167
|
-
const SANDBOX = {
|
|
168
|
-
command: 'docker',
|
|
169
|
-
image: 'gemini-cli-sandbox',
|
|
170
|
-
};
|
|
171
|
-
const TARGET_DIR = '/path/to/target';
|
|
172
|
-
const DEBUG_MODE = false;
|
|
173
|
-
const QUESTION = 'test question';
|
|
174
|
-
const USER_MEMORY = 'Test User Memory';
|
|
175
|
-
const TELEMETRY_SETTINGS = { enabled: false };
|
|
176
|
-
const EMBEDDING_MODEL = 'gemini-embedding';
|
|
177
|
-
const SESSION_ID = 'test-session-id';
|
|
178
|
-
const baseParams = {
|
|
179
|
-
cwd: '/tmp',
|
|
180
|
-
embeddingModel: EMBEDDING_MODEL,
|
|
181
|
-
sandbox: SANDBOX,
|
|
182
|
-
targetDir: TARGET_DIR,
|
|
183
|
-
debugMode: DEBUG_MODE,
|
|
184
|
-
question: QUESTION,
|
|
185
|
-
userMemory: USER_MEMORY,
|
|
186
|
-
telemetry: TELEMETRY_SETTINGS,
|
|
187
|
-
sessionId: SESSION_ID,
|
|
188
|
-
model: MODEL,
|
|
189
|
-
usageStatisticsEnabled: false,
|
|
190
|
-
};
|
|
191
|
-
beforeEach(() => {
|
|
192
|
-
// Reset mocks if necessary
|
|
193
|
-
vi.clearAllMocks();
|
|
194
|
-
vi.mocked(getExperiments).mockResolvedValue({
|
|
195
|
-
experimentIds: [],
|
|
196
|
-
flags: {},
|
|
197
|
-
});
|
|
198
|
-
});
|
|
199
|
-
describe('initialize', () => {
|
|
200
|
-
it('should throw an error if checkpointing is enabled and GitService fails', async () => {
|
|
201
|
-
const gitError = new Error('Git is not installed');
|
|
202
|
-
GitService.prototype.initialize.mockRejectedValue(gitError);
|
|
203
|
-
const config = new Config({
|
|
204
|
-
...baseParams,
|
|
205
|
-
checkpointing: true,
|
|
206
|
-
});
|
|
207
|
-
await expect(config.initialize()).rejects.toThrow(gitError);
|
|
208
|
-
});
|
|
209
|
-
it('should not throw an error if checkpointing is disabled and GitService fails', async () => {
|
|
210
|
-
const gitError = new Error('Git is not installed');
|
|
211
|
-
GitService.prototype.initialize.mockRejectedValue(gitError);
|
|
212
|
-
const config = new Config({
|
|
213
|
-
...baseParams,
|
|
214
|
-
checkpointing: false,
|
|
215
|
-
});
|
|
216
|
-
await expect(config.initialize()).resolves.toBeUndefined();
|
|
217
|
-
});
|
|
218
|
-
it('should throw an error if initialized more than once', async () => {
|
|
219
|
-
const config = new Config({
|
|
220
|
-
...baseParams,
|
|
221
|
-
checkpointing: false,
|
|
222
|
-
});
|
|
223
|
-
await expect(config.initialize()).resolves.toBeUndefined();
|
|
224
|
-
await expect(config.initialize()).rejects.toThrow('Config was already initialized');
|
|
225
|
-
});
|
|
226
|
-
it('should await MCP initialization in non-interactive mode', async () => {
|
|
227
|
-
const config = new Config({
|
|
228
|
-
...baseParams,
|
|
229
|
-
checkpointing: false,
|
|
230
|
-
// interactive defaults to false
|
|
231
|
-
});
|
|
232
|
-
const { McpClientManager } = await import('../tools/mcp-client-manager.js');
|
|
233
|
-
let mcpStarted = false;
|
|
234
|
-
McpClientManager.mockImplementation(() => ({
|
|
235
|
-
startConfiguredMcpServers: vi.fn().mockImplementation(async () => {
|
|
236
|
-
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
237
|
-
mcpStarted = true;
|
|
238
|
-
}),
|
|
239
|
-
getMcpInstructions: vi.fn(),
|
|
240
|
-
}));
|
|
241
|
-
await config.initialize();
|
|
242
|
-
// Should wait for MCP to finish
|
|
243
|
-
expect(mcpStarted).toBe(true);
|
|
244
|
-
});
|
|
245
|
-
it('should not await MCP initialization in interactive mode', async () => {
|
|
246
|
-
const config = new Config({
|
|
247
|
-
...baseParams,
|
|
248
|
-
checkpointing: false,
|
|
249
|
-
interactive: true,
|
|
250
|
-
});
|
|
251
|
-
const { McpClientManager } = await import('../tools/mcp-client-manager.js');
|
|
252
|
-
let mcpStarted = false;
|
|
253
|
-
McpClientManager.mockImplementation(() => ({
|
|
254
|
-
startConfiguredMcpServers: vi.fn().mockImplementation(async () => {
|
|
255
|
-
await new Promise((resolve) => setTimeout(resolve, 50));
|
|
256
|
-
mcpStarted = true;
|
|
257
|
-
}),
|
|
258
|
-
getMcpInstructions: vi.fn(),
|
|
259
|
-
}));
|
|
260
|
-
await config.initialize();
|
|
261
|
-
// Should return immediately, before MCP finishes
|
|
262
|
-
expect(mcpStarted).toBe(false);
|
|
263
|
-
// Wait for it to eventually finish to avoid open handles
|
|
264
|
-
await new Promise((resolve) => setTimeout(resolve, 60));
|
|
265
|
-
expect(mcpStarted).toBe(true);
|
|
266
|
-
});
|
|
267
|
-
describe('getCompressionThreshold', () => {
|
|
268
|
-
it('should return the local compression threshold if it is set', async () => {
|
|
269
|
-
const config = new Config({
|
|
270
|
-
...baseParams,
|
|
271
|
-
compressionThreshold: 0.5,
|
|
272
|
-
});
|
|
273
|
-
expect(await config.getCompressionThreshold()).toBe(0.5);
|
|
274
|
-
});
|
|
275
|
-
it('should return the remote experiment threshold if it is a positive number', async () => {
|
|
276
|
-
const config = new Config({
|
|
277
|
-
...baseParams,
|
|
278
|
-
experiments: {
|
|
279
|
-
flags: {
|
|
280
|
-
[ExperimentFlags.CONTEXT_COMPRESSION_THRESHOLD]: {
|
|
281
|
-
floatValue: 0.8,
|
|
282
|
-
},
|
|
283
|
-
},
|
|
284
|
-
},
|
|
285
|
-
});
|
|
286
|
-
expect(await config.getCompressionThreshold()).toBe(0.8);
|
|
287
|
-
});
|
|
288
|
-
it('should return undefined if the remote experiment threshold is 0', async () => {
|
|
289
|
-
const config = new Config({
|
|
290
|
-
...baseParams,
|
|
291
|
-
experiments: {
|
|
292
|
-
flags: {
|
|
293
|
-
[ExperimentFlags.CONTEXT_COMPRESSION_THRESHOLD]: {
|
|
294
|
-
floatValue: 0.0,
|
|
295
|
-
},
|
|
296
|
-
},
|
|
297
|
-
},
|
|
298
|
-
});
|
|
299
|
-
expect(await config.getCompressionThreshold()).toBeUndefined();
|
|
300
|
-
});
|
|
301
|
-
it('should return undefined if there are no experiments', async () => {
|
|
302
|
-
const config = new Config(baseParams);
|
|
303
|
-
expect(await config.getCompressionThreshold()).toBeUndefined();
|
|
304
|
-
});
|
|
305
|
-
});
|
|
306
|
-
describe('getUserCaching', () => {
|
|
307
|
-
it('should return the remote experiment flag when available', async () => {
|
|
308
|
-
const config = new Config({
|
|
309
|
-
...baseParams,
|
|
310
|
-
experiments: {
|
|
311
|
-
flags: {
|
|
312
|
-
[ExperimentFlags.USER_CACHING]: {
|
|
313
|
-
boolValue: true,
|
|
314
|
-
},
|
|
315
|
-
},
|
|
316
|
-
experimentIds: [],
|
|
317
|
-
},
|
|
318
|
-
});
|
|
319
|
-
expect(await config.getUserCaching()).toBe(true);
|
|
320
|
-
});
|
|
321
|
-
it('should return false when the remote flag is false', async () => {
|
|
322
|
-
const config = new Config({
|
|
323
|
-
...baseParams,
|
|
324
|
-
experiments: {
|
|
325
|
-
flags: {
|
|
326
|
-
[ExperimentFlags.USER_CACHING]: {
|
|
327
|
-
boolValue: false,
|
|
328
|
-
},
|
|
329
|
-
},
|
|
330
|
-
experimentIds: [],
|
|
331
|
-
},
|
|
332
|
-
});
|
|
333
|
-
expect(await config.getUserCaching()).toBe(false);
|
|
334
|
-
});
|
|
335
|
-
it('should return undefined if there are no experiments', async () => {
|
|
336
|
-
const config = new Config(baseParams);
|
|
337
|
-
expect(await config.getUserCaching()).toBeUndefined();
|
|
338
|
-
});
|
|
339
|
-
});
|
|
340
|
-
});
|
|
341
|
-
describe('refreshAuth', () => {
|
|
342
|
-
it('should refresh auth and update config', async () => {
|
|
343
|
-
const config = new Config(baseParams);
|
|
344
|
-
const authType = AuthType.USE_GEMINI;
|
|
345
|
-
const mockContentConfig = {
|
|
346
|
-
apiKey: 'test-key',
|
|
347
|
-
};
|
|
348
|
-
vi.mocked(createContentGeneratorConfig).mockResolvedValue(mockContentConfig);
|
|
349
|
-
await config.refreshAuth(authType);
|
|
350
|
-
expect(createContentGeneratorConfig).toHaveBeenCalledWith(config, authType);
|
|
351
|
-
// Verify that contentGeneratorConfig is updated
|
|
352
|
-
expect(config.getContentGeneratorConfig()).toEqual(mockContentConfig);
|
|
353
|
-
expect(GeminiClient).toHaveBeenCalledWith(config);
|
|
354
|
-
});
|
|
355
|
-
it('should reset model availability status', async () => {
|
|
356
|
-
const config = new Config(baseParams);
|
|
357
|
-
const service = config.getModelAvailabilityService();
|
|
358
|
-
const spy = vi.spyOn(service, 'reset');
|
|
359
|
-
vi.mocked(createContentGeneratorConfig).mockImplementation(async (_, authType) => ({ authType }));
|
|
360
|
-
await config.refreshAuth(AuthType.USE_GEMINI);
|
|
361
|
-
expect(spy).toHaveBeenCalled();
|
|
362
|
-
});
|
|
363
|
-
it('should strip thoughts when switching from GenAI to Vertex', async () => {
|
|
364
|
-
const config = new Config(baseParams);
|
|
365
|
-
vi.mocked(createContentGeneratorConfig).mockImplementation(async (_, authType) => ({ authType }));
|
|
366
|
-
await config.refreshAuth(AuthType.USE_GEMINI);
|
|
367
|
-
await config.refreshAuth(AuthType.LOGIN_WITH_GOOGLE);
|
|
368
|
-
expect(config.getGeminiClient().stripThoughtsFromHistory).toHaveBeenCalledWith();
|
|
369
|
-
});
|
|
370
|
-
it('should strip thoughts when switching from GenAI to Vertex AI', async () => {
|
|
371
|
-
const config = new Config(baseParams);
|
|
372
|
-
vi.mocked(createContentGeneratorConfig).mockImplementation(async (_, authType) => ({ authType }));
|
|
373
|
-
await config.refreshAuth(AuthType.USE_GEMINI);
|
|
374
|
-
await config.refreshAuth(AuthType.USE_VERTEX_AI);
|
|
375
|
-
expect(config.getGeminiClient().stripThoughtsFromHistory).toHaveBeenCalledWith();
|
|
376
|
-
});
|
|
377
|
-
it('should not strip thoughts when switching from Vertex to GenAI', async () => {
|
|
378
|
-
const config = new Config(baseParams);
|
|
379
|
-
vi.mocked(createContentGeneratorConfig).mockImplementation(async (_, authType) => ({ authType }));
|
|
380
|
-
await config.refreshAuth(AuthType.USE_VERTEX_AI);
|
|
381
|
-
await config.refreshAuth(AuthType.USE_GEMINI);
|
|
382
|
-
expect(config.getGeminiClient().stripThoughtsFromHistory).not.toHaveBeenCalledWith();
|
|
383
|
-
});
|
|
384
|
-
});
|
|
385
|
-
describe('Preview Features Logic in refreshAuth', () => {
|
|
386
|
-
beforeEach(() => {
|
|
387
|
-
// Set up default mock behavior for these functions before each test
|
|
388
|
-
vi.mocked(getCodeAssistServer).mockReturnValue(undefined);
|
|
389
|
-
vi.mocked(getExperiments).mockResolvedValue({
|
|
390
|
-
flags: {},
|
|
391
|
-
experimentIds: [],
|
|
392
|
-
});
|
|
393
|
-
});
|
|
394
|
-
it('should enable preview features for Google auth when remote flag is true', async () => {
|
|
395
|
-
// Override the default mock for this specific test
|
|
396
|
-
vi.mocked(getCodeAssistServer).mockReturnValue({}); // Simulate Google auth by returning a truthy value
|
|
397
|
-
vi.mocked(getExperiments).mockResolvedValue({
|
|
398
|
-
flags: {
|
|
399
|
-
[ExperimentFlags.ENABLE_PREVIEW]: { boolValue: true },
|
|
400
|
-
},
|
|
401
|
-
experimentIds: [],
|
|
402
|
-
});
|
|
403
|
-
const config = new Config({ ...baseParams, previewFeatures: undefined });
|
|
404
|
-
await config.refreshAuth(AuthType.LOGIN_WITH_GOOGLE);
|
|
405
|
-
expect(config.getPreviewFeatures()).toBe(true);
|
|
406
|
-
});
|
|
407
|
-
it('should disable preview features for Google auth when remote flag is false', async () => {
|
|
408
|
-
// Override the default mock
|
|
409
|
-
vi.mocked(getCodeAssistServer).mockReturnValue({});
|
|
410
|
-
vi.mocked(getExperiments).mockResolvedValue({
|
|
411
|
-
flags: {
|
|
412
|
-
[ExperimentFlags.ENABLE_PREVIEW]: { boolValue: false },
|
|
413
|
-
},
|
|
414
|
-
experimentIds: [],
|
|
415
|
-
});
|
|
416
|
-
const config = new Config({ ...baseParams, previewFeatures: undefined });
|
|
417
|
-
await config.refreshAuth(AuthType.LOGIN_WITH_GOOGLE);
|
|
418
|
-
expect(config.getPreviewFeatures()).toBe(undefined);
|
|
419
|
-
});
|
|
420
|
-
it('should disable preview features for Google auth when remote flag is missing', async () => {
|
|
421
|
-
// Override the default mock for getCodeAssistServer, the getExperiments mock is already correct
|
|
422
|
-
vi.mocked(getCodeAssistServer).mockReturnValue({});
|
|
423
|
-
const config = new Config({ ...baseParams, previewFeatures: undefined });
|
|
424
|
-
await config.refreshAuth(AuthType.LOGIN_WITH_GOOGLE);
|
|
425
|
-
expect(config.getPreviewFeatures()).toBe(undefined);
|
|
426
|
-
});
|
|
427
|
-
it('should not change preview features or model if it is already set to true', async () => {
|
|
428
|
-
const initialModel = 'some-other-model';
|
|
429
|
-
const config = new Config({
|
|
430
|
-
...baseParams,
|
|
431
|
-
previewFeatures: true,
|
|
432
|
-
model: initialModel,
|
|
433
|
-
});
|
|
434
|
-
// It doesn't matter which auth method we use here, the logic should exit early
|
|
435
|
-
await config.refreshAuth(AuthType.USE_GEMINI);
|
|
436
|
-
expect(config.getPreviewFeatures()).toBe(true);
|
|
437
|
-
expect(config.getModel()).toBe(initialModel);
|
|
438
|
-
});
|
|
439
|
-
it('should not change preview features or model if it is already set to false', async () => {
|
|
440
|
-
const initialModel = 'some-other-model';
|
|
441
|
-
const config = new Config({
|
|
442
|
-
...baseParams,
|
|
443
|
-
previewFeatures: false,
|
|
444
|
-
model: initialModel,
|
|
445
|
-
});
|
|
446
|
-
await config.refreshAuth(AuthType.USE_GEMINI);
|
|
447
|
-
expect(config.getPreviewFeatures()).toBe(false);
|
|
448
|
-
expect(config.getModel()).toBe(initialModel);
|
|
449
|
-
});
|
|
450
|
-
});
|
|
451
|
-
it('Config constructor should store userMemory correctly', () => {
|
|
452
|
-
const config = new Config(baseParams);
|
|
453
|
-
expect(config.getUserMemory()).toBe(USER_MEMORY);
|
|
454
|
-
// Verify other getters if needed
|
|
455
|
-
expect(config.getTargetDir()).toBe(path.resolve(TARGET_DIR)); // Check resolved path
|
|
456
|
-
});
|
|
457
|
-
it('Config constructor should default userMemory to empty string if not provided', () => {
|
|
458
|
-
const paramsWithoutMemory = { ...baseParams };
|
|
459
|
-
delete paramsWithoutMemory.userMemory;
|
|
460
|
-
const config = new Config(paramsWithoutMemory);
|
|
461
|
-
expect(config.getUserMemory()).toBe('');
|
|
462
|
-
});
|
|
463
|
-
it('Config constructor should call setGeminiMdFilename with contextFileName if provided', () => {
|
|
464
|
-
const contextFileName = 'CUSTOM_AGENTS.md';
|
|
465
|
-
const paramsWithContextFile = {
|
|
466
|
-
...baseParams,
|
|
467
|
-
contextFileName,
|
|
468
|
-
};
|
|
469
|
-
new Config(paramsWithContextFile);
|
|
470
|
-
expect(mockSetGeminiMdFilename).toHaveBeenCalledWith(contextFileName);
|
|
471
|
-
});
|
|
472
|
-
it('Config constructor should not call setGeminiMdFilename if contextFileName is not provided', () => {
|
|
473
|
-
new Config(baseParams); // baseParams does not have contextFileName
|
|
474
|
-
expect(mockSetGeminiMdFilename).not.toHaveBeenCalled();
|
|
475
|
-
});
|
|
476
|
-
it('should set default file filtering settings when not provided', () => {
|
|
477
|
-
const config = new Config(baseParams);
|
|
478
|
-
expect(config.getFileFilteringRespectGitIgnore()).toBe(DEFAULT_FILE_FILTERING_OPTIONS.respectGitIgnore);
|
|
479
|
-
});
|
|
480
|
-
it('should set custom file filtering settings when provided', () => {
|
|
481
|
-
const paramsWithFileFiltering = {
|
|
482
|
-
...baseParams,
|
|
483
|
-
fileFiltering: {
|
|
484
|
-
respectGitIgnore: false,
|
|
485
|
-
},
|
|
486
|
-
};
|
|
487
|
-
const config = new Config(paramsWithFileFiltering);
|
|
488
|
-
expect(config.getFileFilteringRespectGitIgnore()).toBe(false);
|
|
489
|
-
});
|
|
490
|
-
it('should initialize WorkspaceContext with includeDirectories', () => {
|
|
491
|
-
const includeDirectories = ['dir1', 'dir2'];
|
|
492
|
-
const paramsWithIncludeDirs = {
|
|
493
|
-
...baseParams,
|
|
494
|
-
includeDirectories,
|
|
495
|
-
};
|
|
496
|
-
const config = new Config(paramsWithIncludeDirs);
|
|
497
|
-
const workspaceContext = config.getWorkspaceContext();
|
|
498
|
-
const directories = workspaceContext.getDirectories();
|
|
499
|
-
// Should include only the target directory initially
|
|
500
|
-
expect(directories).toHaveLength(1);
|
|
501
|
-
expect(directories).toContain(path.resolve(baseParams.targetDir));
|
|
502
|
-
// The other directories should be in the pending list
|
|
503
|
-
expect(config.getPendingIncludeDirectories()).toEqual(includeDirectories);
|
|
504
|
-
});
|
|
505
|
-
it('Config constructor should set telemetry to true when provided as true', () => {
|
|
506
|
-
const paramsWithTelemetry = {
|
|
507
|
-
...baseParams,
|
|
508
|
-
telemetry: { enabled: true },
|
|
509
|
-
};
|
|
510
|
-
const config = new Config(paramsWithTelemetry);
|
|
511
|
-
expect(config.getTelemetryEnabled()).toBe(true);
|
|
512
|
-
});
|
|
513
|
-
it('Config constructor should set telemetry to false when provided as false', () => {
|
|
514
|
-
const paramsWithTelemetry = {
|
|
515
|
-
...baseParams,
|
|
516
|
-
telemetry: { enabled: false },
|
|
517
|
-
};
|
|
518
|
-
const config = new Config(paramsWithTelemetry);
|
|
519
|
-
expect(config.getTelemetryEnabled()).toBe(false);
|
|
520
|
-
});
|
|
521
|
-
it('Config constructor should default telemetry to default value if not provided', () => {
|
|
522
|
-
const paramsWithoutTelemetry = { ...baseParams };
|
|
523
|
-
delete paramsWithoutTelemetry.telemetry;
|
|
524
|
-
const config = new Config(paramsWithoutTelemetry);
|
|
525
|
-
expect(config.getTelemetryEnabled()).toBe(TELEMETRY_SETTINGS.enabled);
|
|
526
|
-
});
|
|
527
|
-
it('Config constructor should set telemetry useCollector to true when provided', () => {
|
|
528
|
-
const paramsWithTelemetry = {
|
|
529
|
-
...baseParams,
|
|
530
|
-
telemetry: { enabled: true, useCollector: true },
|
|
531
|
-
};
|
|
532
|
-
const config = new Config(paramsWithTelemetry);
|
|
533
|
-
expect(config.getTelemetryUseCollector()).toBe(true);
|
|
534
|
-
});
|
|
535
|
-
it('Config constructor should set telemetry useCollector to false when provided', () => {
|
|
536
|
-
const paramsWithTelemetry = {
|
|
537
|
-
...baseParams,
|
|
538
|
-
telemetry: { enabled: true, useCollector: false },
|
|
539
|
-
};
|
|
540
|
-
const config = new Config(paramsWithTelemetry);
|
|
541
|
-
expect(config.getTelemetryUseCollector()).toBe(false);
|
|
542
|
-
});
|
|
543
|
-
it('Config constructor should default telemetry useCollector to false if not provided', () => {
|
|
544
|
-
const paramsWithTelemetry = {
|
|
545
|
-
...baseParams,
|
|
546
|
-
telemetry: { enabled: true },
|
|
547
|
-
};
|
|
548
|
-
const config = new Config(paramsWithTelemetry);
|
|
549
|
-
expect(config.getTelemetryUseCollector()).toBe(false);
|
|
550
|
-
});
|
|
551
|
-
it('should have a getFileService method that returns FileDiscoveryService', () => {
|
|
552
|
-
const config = new Config(baseParams);
|
|
553
|
-
const fileService = config.getFileService();
|
|
554
|
-
expect(fileService).toBeDefined();
|
|
555
|
-
});
|
|
556
|
-
describe('Usage Statistics', () => {
|
|
557
|
-
it('defaults usage statistics to enabled if not specified', () => {
|
|
558
|
-
const config = new Config({
|
|
559
|
-
...baseParams,
|
|
560
|
-
usageStatisticsEnabled: undefined,
|
|
561
|
-
});
|
|
562
|
-
expect(config.getUsageStatisticsEnabled()).toBe(true);
|
|
563
|
-
});
|
|
564
|
-
it.each([{ enabled: true }, { enabled: false }])('sets usage statistics based on the provided value (enabled: $enabled)', ({ enabled }) => {
|
|
565
|
-
const config = new Config({
|
|
566
|
-
...baseParams,
|
|
567
|
-
usageStatisticsEnabled: enabled,
|
|
568
|
-
});
|
|
569
|
-
expect(config.getUsageStatisticsEnabled()).toBe(enabled);
|
|
570
|
-
});
|
|
571
|
-
});
|
|
572
|
-
describe('Telemetry Settings', () => {
|
|
573
|
-
it('should return default telemetry target if not provided', () => {
|
|
574
|
-
const params = {
|
|
575
|
-
...baseParams,
|
|
576
|
-
telemetry: { enabled: true },
|
|
577
|
-
};
|
|
578
|
-
const config = new Config(params);
|
|
579
|
-
expect(config.getTelemetryTarget()).toBe(DEFAULT_TELEMETRY_TARGET);
|
|
580
|
-
});
|
|
581
|
-
it('should return provided OTLP endpoint', () => {
|
|
582
|
-
const endpoint = 'http://custom.otel.collector:4317';
|
|
583
|
-
const params = {
|
|
584
|
-
...baseParams,
|
|
585
|
-
telemetry: { enabled: true, otlpEndpoint: endpoint },
|
|
586
|
-
};
|
|
587
|
-
const config = new Config(params);
|
|
588
|
-
expect(config.getTelemetryOtlpEndpoint()).toBe(endpoint);
|
|
589
|
-
});
|
|
590
|
-
it('should return default OTLP endpoint if not provided', () => {
|
|
591
|
-
const params = {
|
|
592
|
-
...baseParams,
|
|
593
|
-
telemetry: { enabled: true },
|
|
594
|
-
};
|
|
595
|
-
const config = new Config(params);
|
|
596
|
-
expect(config.getTelemetryOtlpEndpoint()).toBe(DEFAULT_OTLP_ENDPOINT);
|
|
597
|
-
});
|
|
598
|
-
it('should return provided logPrompts setting', () => {
|
|
599
|
-
const params = {
|
|
600
|
-
...baseParams,
|
|
601
|
-
telemetry: { enabled: true, logPrompts: false },
|
|
602
|
-
};
|
|
603
|
-
const config = new Config(params);
|
|
604
|
-
expect(config.getTelemetryLogPromptsEnabled()).toBe(false);
|
|
605
|
-
});
|
|
606
|
-
it('should return default logPrompts setting (true) if not provided', () => {
|
|
607
|
-
const params = {
|
|
608
|
-
...baseParams,
|
|
609
|
-
telemetry: { enabled: true },
|
|
610
|
-
};
|
|
611
|
-
const config = new Config(params);
|
|
612
|
-
expect(config.getTelemetryLogPromptsEnabled()).toBe(true);
|
|
613
|
-
});
|
|
614
|
-
it('should return default logPrompts setting (true) if telemetry object is not provided', () => {
|
|
615
|
-
const paramsWithoutTelemetry = { ...baseParams };
|
|
616
|
-
delete paramsWithoutTelemetry.telemetry;
|
|
617
|
-
const config = new Config(paramsWithoutTelemetry);
|
|
618
|
-
expect(config.getTelemetryLogPromptsEnabled()).toBe(true);
|
|
619
|
-
});
|
|
620
|
-
it('should return default telemetry target if telemetry object is not provided', () => {
|
|
621
|
-
const paramsWithoutTelemetry = { ...baseParams };
|
|
622
|
-
delete paramsWithoutTelemetry.telemetry;
|
|
623
|
-
const config = new Config(paramsWithoutTelemetry);
|
|
624
|
-
expect(config.getTelemetryTarget()).toBe(DEFAULT_TELEMETRY_TARGET);
|
|
625
|
-
});
|
|
626
|
-
it('should return default OTLP endpoint if telemetry object is not provided', () => {
|
|
627
|
-
const paramsWithoutTelemetry = { ...baseParams };
|
|
628
|
-
delete paramsWithoutTelemetry.telemetry;
|
|
629
|
-
const config = new Config(paramsWithoutTelemetry);
|
|
630
|
-
expect(config.getTelemetryOtlpEndpoint()).toBe(DEFAULT_OTLP_ENDPOINT);
|
|
631
|
-
});
|
|
632
|
-
it('should return provided OTLP protocol', () => {
|
|
633
|
-
const params = {
|
|
634
|
-
...baseParams,
|
|
635
|
-
telemetry: { enabled: true, otlpProtocol: 'http' },
|
|
636
|
-
};
|
|
637
|
-
const config = new Config(params);
|
|
638
|
-
expect(config.getTelemetryOtlpProtocol()).toBe('http');
|
|
639
|
-
});
|
|
640
|
-
it('should return default OTLP protocol if not provided', () => {
|
|
641
|
-
const params = {
|
|
642
|
-
...baseParams,
|
|
643
|
-
telemetry: { enabled: true },
|
|
644
|
-
};
|
|
645
|
-
const config = new Config(params);
|
|
646
|
-
expect(config.getTelemetryOtlpProtocol()).toBe('grpc');
|
|
647
|
-
});
|
|
648
|
-
it('should return default OTLP protocol if telemetry object is not provided', () => {
|
|
649
|
-
const paramsWithoutTelemetry = { ...baseParams };
|
|
650
|
-
delete paramsWithoutTelemetry.telemetry;
|
|
651
|
-
const config = new Config(paramsWithoutTelemetry);
|
|
652
|
-
expect(config.getTelemetryOtlpProtocol()).toBe('grpc');
|
|
653
|
-
});
|
|
654
|
-
});
|
|
655
|
-
describe('UseRipgrep Configuration', () => {
|
|
656
|
-
it('should default useRipgrep to true when not provided', () => {
|
|
657
|
-
const config = new Config(baseParams);
|
|
658
|
-
expect(config.getUseRipgrep()).toBe(true);
|
|
659
|
-
});
|
|
660
|
-
it('should set useRipgrep to false when provided as false', () => {
|
|
661
|
-
const paramsWithRipgrep = {
|
|
662
|
-
...baseParams,
|
|
663
|
-
useRipgrep: false,
|
|
664
|
-
};
|
|
665
|
-
const config = new Config(paramsWithRipgrep);
|
|
666
|
-
expect(config.getUseRipgrep()).toBe(false);
|
|
667
|
-
});
|
|
668
|
-
it('should set useRipgrep to true when explicitly provided as true', () => {
|
|
669
|
-
const paramsWithRipgrep = {
|
|
670
|
-
...baseParams,
|
|
671
|
-
useRipgrep: true,
|
|
672
|
-
};
|
|
673
|
-
const config = new Config(paramsWithRipgrep);
|
|
674
|
-
expect(config.getUseRipgrep()).toBe(true);
|
|
675
|
-
});
|
|
676
|
-
it('should default useRipgrep to true when undefined', () => {
|
|
677
|
-
const paramsWithUndefinedRipgrep = {
|
|
678
|
-
...baseParams,
|
|
679
|
-
useRipgrep: undefined,
|
|
680
|
-
};
|
|
681
|
-
const config = new Config(paramsWithUndefinedRipgrep);
|
|
682
|
-
expect(config.getUseRipgrep()).toBe(true);
|
|
683
|
-
});
|
|
684
|
-
});
|
|
685
|
-
describe('UseWriteTodos Configuration', () => {
|
|
686
|
-
it('should default useWriteTodos to true when not provided', () => {
|
|
687
|
-
const config = new Config(baseParams);
|
|
688
|
-
expect(config.getUseWriteTodos()).toBe(true);
|
|
689
|
-
});
|
|
690
|
-
it('should set useWriteTodos to false when provided as false', () => {
|
|
691
|
-
const params = {
|
|
692
|
-
...baseParams,
|
|
693
|
-
useWriteTodos: false,
|
|
694
|
-
};
|
|
695
|
-
const config = new Config(params);
|
|
696
|
-
expect(config.getUseWriteTodos()).toBe(false);
|
|
697
|
-
});
|
|
698
|
-
it('should disable useWriteTodos for preview models', () => {
|
|
699
|
-
const params = {
|
|
700
|
-
...baseParams,
|
|
701
|
-
model: 'gemini-3-pro-preview',
|
|
702
|
-
};
|
|
703
|
-
const config = new Config(params);
|
|
704
|
-
expect(config.getUseWriteTodos()).toBe(false);
|
|
705
|
-
});
|
|
706
|
-
it('should NOT disable useWriteTodos for non-preview models', () => {
|
|
707
|
-
const params = {
|
|
708
|
-
...baseParams,
|
|
709
|
-
model: 'gemini-2.5-pro',
|
|
710
|
-
};
|
|
711
|
-
const config = new Config(params);
|
|
712
|
-
expect(config.getUseWriteTodos()).toBe(true);
|
|
713
|
-
});
|
|
714
|
-
});
|
|
715
|
-
describe('Event Driven Scheduler Configuration', () => {
|
|
716
|
-
it('should default enableEventDrivenScheduler to true when not provided', () => {
|
|
717
|
-
const config = new Config(baseParams);
|
|
718
|
-
expect(config.isEventDrivenSchedulerEnabled()).toBe(true);
|
|
719
|
-
});
|
|
720
|
-
it('should set enableEventDrivenScheduler to false when provided as false', () => {
|
|
721
|
-
const params = {
|
|
722
|
-
...baseParams,
|
|
723
|
-
enableEventDrivenScheduler: false,
|
|
724
|
-
};
|
|
725
|
-
const config = new Config(params);
|
|
726
|
-
expect(config.isEventDrivenSchedulerEnabled()).toBe(false);
|
|
727
|
-
});
|
|
728
|
-
});
|
|
729
|
-
describe('Shell Tool Inactivity Timeout', () => {
|
|
730
|
-
it('should default to 300000ms (300 seconds) when not provided', () => {
|
|
731
|
-
const config = new Config(baseParams);
|
|
732
|
-
expect(config.getShellToolInactivityTimeout()).toBe(300000);
|
|
733
|
-
});
|
|
734
|
-
it('should convert provided seconds to milliseconds', () => {
|
|
735
|
-
const params = {
|
|
736
|
-
...baseParams,
|
|
737
|
-
shellToolInactivityTimeout: 10, // 10 seconds
|
|
738
|
-
};
|
|
739
|
-
const config = new Config(params);
|
|
740
|
-
expect(config.getShellToolInactivityTimeout()).toBe(10000);
|
|
741
|
-
});
|
|
742
|
-
});
|
|
743
|
-
describe('ContinueOnFailedApiCall Configuration', () => {
|
|
744
|
-
it('should default continueOnFailedApiCall to false when not provided', () => {
|
|
745
|
-
const config = new Config(baseParams);
|
|
746
|
-
expect(config.getContinueOnFailedApiCall()).toBe(true);
|
|
747
|
-
});
|
|
748
|
-
it('should set continueOnFailedApiCall to true when provided as true', () => {
|
|
749
|
-
const paramsWithContinueOnFailedApiCall = {
|
|
750
|
-
...baseParams,
|
|
751
|
-
continueOnFailedApiCall: true,
|
|
752
|
-
};
|
|
753
|
-
const config = new Config(paramsWithContinueOnFailedApiCall);
|
|
754
|
-
expect(config.getContinueOnFailedApiCall()).toBe(true);
|
|
755
|
-
});
|
|
756
|
-
it('should set continueOnFailedApiCall to false when explicitly provided as false', () => {
|
|
757
|
-
const paramsWithContinueOnFailedApiCall = {
|
|
758
|
-
...baseParams,
|
|
759
|
-
continueOnFailedApiCall: false,
|
|
760
|
-
};
|
|
761
|
-
const config = new Config(paramsWithContinueOnFailedApiCall);
|
|
762
|
-
expect(config.getContinueOnFailedApiCall()).toBe(false);
|
|
763
|
-
});
|
|
764
|
-
});
|
|
765
|
-
describe('createToolRegistry', () => {
|
|
766
|
-
it('should register a tool if coreTools contains an argument-specific pattern', async () => {
|
|
767
|
-
const params = {
|
|
768
|
-
...baseParams,
|
|
769
|
-
coreTools: ['ShellTool(git status)'],
|
|
770
|
-
};
|
|
771
|
-
const config = new Config(params);
|
|
772
|
-
await config.initialize();
|
|
773
|
-
// The ToolRegistry class is mocked, so we can inspect its prototype's methods.
|
|
774
|
-
const registerToolMock = (await vi.importMock('../tools/tool-registry')).ToolRegistry.prototype.registerTool;
|
|
775
|
-
// Check that registerTool was called for ShellTool
|
|
776
|
-
const wasShellToolRegistered = registerToolMock.mock.calls.some((call) => call[0] instanceof vi.mocked(ShellTool));
|
|
777
|
-
expect(wasShellToolRegistered).toBe(true);
|
|
778
|
-
// Check that registerTool was NOT called for ReadFileTool
|
|
779
|
-
const wasReadFileToolRegistered = registerToolMock.mock.calls.some((call) => call[0] instanceof vi.mocked(ReadFileTool));
|
|
780
|
-
expect(wasReadFileToolRegistered).toBe(false);
|
|
781
|
-
});
|
|
782
|
-
it('should register subagents as tools when agents.overrides.codebase_investigator.enabled is true', async () => {
|
|
783
|
-
const params = {
|
|
784
|
-
...baseParams,
|
|
785
|
-
agents: {
|
|
786
|
-
overrides: {
|
|
787
|
-
codebase_investigator: { enabled: true },
|
|
788
|
-
},
|
|
789
|
-
},
|
|
790
|
-
};
|
|
791
|
-
const config = new Config(params);
|
|
792
|
-
const mockAgentDefinition = {
|
|
793
|
-
name: 'codebase-investigator',
|
|
794
|
-
description: 'Agent 1',
|
|
795
|
-
instructions: 'Inst 1',
|
|
796
|
-
};
|
|
797
|
-
const AgentRegistryMock = (await vi.importMock('../agents/registry.js')).AgentRegistry;
|
|
798
|
-
AgentRegistryMock.prototype.getDefinition.mockReturnValue(mockAgentDefinition);
|
|
799
|
-
AgentRegistryMock.prototype.getAllDefinitions.mockReturnValue([
|
|
800
|
-
mockAgentDefinition,
|
|
801
|
-
]);
|
|
802
|
-
const SubAgentToolMock = (await vi.importMock('../agents/subagent-tool.js')).SubagentTool;
|
|
803
|
-
await config.initialize();
|
|
804
|
-
const registerToolMock = (await vi.importMock('../tools/tool-registry')).ToolRegistry.prototype.registerTool;
|
|
805
|
-
expect(SubAgentToolMock).toHaveBeenCalledTimes(1);
|
|
806
|
-
expect(SubAgentToolMock).toHaveBeenCalledWith(expect.anything(), // AgentRegistry
|
|
807
|
-
config, expect.anything());
|
|
808
|
-
const calls = registerToolMock.mock.calls;
|
|
809
|
-
const registeredWrappers = calls.filter((call) => call[0] instanceof SubAgentToolMock);
|
|
810
|
-
expect(registeredWrappers).toHaveLength(1);
|
|
811
|
-
});
|
|
812
|
-
it('should not register subagents as tools when agents are disabled', async () => {
|
|
813
|
-
const params = {
|
|
814
|
-
...baseParams,
|
|
815
|
-
agents: {
|
|
816
|
-
overrides: {
|
|
817
|
-
codebase_investigator: { enabled: false },
|
|
818
|
-
cli_help: { enabled: false },
|
|
819
|
-
},
|
|
820
|
-
},
|
|
821
|
-
};
|
|
822
|
-
const config = new Config(params);
|
|
823
|
-
const SubAgentToolMock = (await vi.importMock('../agents/subagent-tool.js')).SubagentTool;
|
|
824
|
-
await config.initialize();
|
|
825
|
-
expect(SubAgentToolMock).not.toHaveBeenCalled();
|
|
826
|
-
});
|
|
827
|
-
describe('with minified tool class names', () => {
|
|
828
|
-
beforeEach(() => {
|
|
829
|
-
Object.defineProperty(vi.mocked(ShellTool).prototype.constructor, 'name', {
|
|
830
|
-
value: '_ShellTool',
|
|
831
|
-
configurable: true,
|
|
832
|
-
});
|
|
833
|
-
});
|
|
834
|
-
afterEach(() => {
|
|
835
|
-
Object.defineProperty(vi.mocked(ShellTool).prototype.constructor, 'name', {
|
|
836
|
-
value: 'ShellTool',
|
|
837
|
-
});
|
|
838
|
-
});
|
|
839
|
-
it('should register a tool if coreTools contains the non-minified class name', async () => {
|
|
840
|
-
const params = {
|
|
841
|
-
...baseParams,
|
|
842
|
-
coreTools: ['ShellTool'],
|
|
843
|
-
};
|
|
844
|
-
const config = new Config(params);
|
|
845
|
-
await config.initialize();
|
|
846
|
-
const registerToolMock = (await vi.importMock('../tools/tool-registry')).ToolRegistry.prototype.registerTool;
|
|
847
|
-
const wasShellToolRegistered = registerToolMock.mock.calls.some((call) => call[0] instanceof vi.mocked(ShellTool));
|
|
848
|
-
expect(wasShellToolRegistered).toBe(true);
|
|
849
|
-
});
|
|
850
|
-
it('should register a tool if coreTools contains an argument-specific pattern with the non-minified class name', async () => {
|
|
851
|
-
const params = {
|
|
852
|
-
...baseParams,
|
|
853
|
-
coreTools: ['ShellTool(git status)'],
|
|
854
|
-
};
|
|
855
|
-
const config = new Config(params);
|
|
856
|
-
await config.initialize();
|
|
857
|
-
const registerToolMock = (await vi.importMock('../tools/tool-registry')).ToolRegistry.prototype.registerTool;
|
|
858
|
-
const wasShellToolRegistered = registerToolMock.mock.calls.some((call) => call[0] instanceof vi.mocked(ShellTool));
|
|
859
|
-
expect(wasShellToolRegistered).toBe(true);
|
|
860
|
-
});
|
|
861
|
-
});
|
|
862
|
-
});
|
|
863
|
-
describe('getTruncateToolOutputThreshold', () => {
|
|
864
|
-
beforeEach(() => {
|
|
865
|
-
vi.clearAllMocks();
|
|
866
|
-
});
|
|
867
|
-
it('should return the calculated threshold when it is smaller than the default', () => {
|
|
868
|
-
const config = new Config(baseParams);
|
|
869
|
-
vi.mocked(tokenLimit).mockReturnValue(32000);
|
|
870
|
-
vi.mocked(uiTelemetryService.getLastPromptTokenCount).mockReturnValue(1000);
|
|
871
|
-
// 4 * (32000 - 1000) = 4 * 31000 = 124000
|
|
872
|
-
// default is 4_000_000
|
|
873
|
-
expect(config.getTruncateToolOutputThreshold()).toBe(124000);
|
|
874
|
-
});
|
|
875
|
-
it('should return the default threshold when the calculated value is larger', () => {
|
|
876
|
-
const config = new Config(baseParams);
|
|
877
|
-
vi.mocked(tokenLimit).mockReturnValue(2_000_000);
|
|
878
|
-
vi.mocked(uiTelemetryService.getLastPromptTokenCount).mockReturnValue(500_000);
|
|
879
|
-
// 4 * (2_000_000 - 500_000) = 4 * 1_500_000 = 6_000_000
|
|
880
|
-
// default is 4_000_000
|
|
881
|
-
expect(config.getTruncateToolOutputThreshold()).toBe(4_000_000);
|
|
882
|
-
});
|
|
883
|
-
it('should use a custom truncateToolOutputThreshold if provided', () => {
|
|
884
|
-
const customParams = {
|
|
885
|
-
...baseParams,
|
|
886
|
-
truncateToolOutputThreshold: 50000,
|
|
887
|
-
};
|
|
888
|
-
const config = new Config(customParams);
|
|
889
|
-
vi.mocked(tokenLimit).mockReturnValue(8000);
|
|
890
|
-
vi.mocked(uiTelemetryService.getLastPromptTokenCount).mockReturnValue(2000);
|
|
891
|
-
// 4 * (8000 - 2000) = 4 * 6000 = 24000
|
|
892
|
-
// custom threshold is 50000
|
|
893
|
-
expect(config.getTruncateToolOutputThreshold()).toBe(24000);
|
|
894
|
-
vi.mocked(tokenLimit).mockReturnValue(32000);
|
|
895
|
-
vi.mocked(uiTelemetryService.getLastPromptTokenCount).mockReturnValue(1000);
|
|
896
|
-
// 4 * (32000 - 1000) = 124000
|
|
897
|
-
// custom threshold is 50000
|
|
898
|
-
expect(config.getTruncateToolOutputThreshold()).toBe(50000);
|
|
899
|
-
});
|
|
900
|
-
});
|
|
901
|
-
describe('Proxy Configuration Error Handling', () => {
|
|
902
|
-
beforeEach(() => {
|
|
903
|
-
vi.clearAllMocks();
|
|
904
|
-
});
|
|
905
|
-
it('should call setGlobalProxy when proxy is configured', () => {
|
|
906
|
-
const paramsWithProxy = {
|
|
907
|
-
...baseParams,
|
|
908
|
-
proxy: 'http://proxy.example.com:8080',
|
|
909
|
-
};
|
|
910
|
-
new Config(paramsWithProxy);
|
|
911
|
-
expect(mockSetGlobalProxy).toHaveBeenCalledWith('http://proxy.example.com:8080');
|
|
912
|
-
});
|
|
913
|
-
it('should not call setGlobalProxy when proxy is not configured', () => {
|
|
914
|
-
new Config(baseParams);
|
|
915
|
-
expect(mockSetGlobalProxy).not.toHaveBeenCalled();
|
|
916
|
-
});
|
|
917
|
-
it('should emit error feedback when setGlobalProxy throws an error', () => {
|
|
918
|
-
const proxyError = new Error('Invalid proxy URL');
|
|
919
|
-
mockSetGlobalProxy.mockImplementation(() => {
|
|
920
|
-
throw proxyError;
|
|
921
|
-
});
|
|
922
|
-
const paramsWithProxy = {
|
|
923
|
-
...baseParams,
|
|
924
|
-
proxy: 'invalid-proxy',
|
|
925
|
-
};
|
|
926
|
-
new Config(paramsWithProxy);
|
|
927
|
-
expect(mockCoreEvents.emitFeedback).toHaveBeenCalledWith('error', 'Invalid proxy configuration detected. Check debug drawer for more details (F12)', proxyError);
|
|
928
|
-
});
|
|
929
|
-
it('should not emit error feedback when setGlobalProxy succeeds', () => {
|
|
930
|
-
mockSetGlobalProxy.mockImplementation(() => {
|
|
931
|
-
// Success - no error thrown
|
|
932
|
-
});
|
|
933
|
-
const paramsWithProxy = {
|
|
934
|
-
...baseParams,
|
|
935
|
-
proxy: 'http://proxy.example.com:8080',
|
|
936
|
-
};
|
|
937
|
-
new Config(paramsWithProxy);
|
|
938
|
-
expect(mockCoreEvents.emitFeedback).not.toHaveBeenCalled();
|
|
939
|
-
});
|
|
940
|
-
});
|
|
941
|
-
});
|
|
942
|
-
describe('setApprovalMode with folder trust', () => {
|
|
943
|
-
const baseParams = {
|
|
944
|
-
sessionId: 'test',
|
|
945
|
-
targetDir: '.',
|
|
946
|
-
debugMode: false,
|
|
947
|
-
model: 'test-model',
|
|
948
|
-
cwd: '.',
|
|
949
|
-
};
|
|
950
|
-
it('should throw an error when setting YOLO mode in an untrusted folder', () => {
|
|
951
|
-
const config = new Config(baseParams);
|
|
952
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(false);
|
|
953
|
-
expect(() => config.setApprovalMode(ApprovalMode.YOLO)).toThrow('Cannot enable privileged approval modes in an untrusted folder.');
|
|
954
|
-
});
|
|
955
|
-
it('should throw an error when setting AUTO_EDIT mode in an untrusted folder', () => {
|
|
956
|
-
const config = new Config(baseParams);
|
|
957
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(false);
|
|
958
|
-
expect(() => config.setApprovalMode(ApprovalMode.AUTO_EDIT)).toThrow('Cannot enable privileged approval modes in an untrusted folder.');
|
|
959
|
-
});
|
|
960
|
-
it('should NOT throw an error when setting DEFAULT mode in an untrusted folder', () => {
|
|
961
|
-
const config = new Config(baseParams);
|
|
962
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(false);
|
|
963
|
-
expect(() => config.setApprovalMode(ApprovalMode.DEFAULT)).not.toThrow();
|
|
964
|
-
});
|
|
965
|
-
it('should NOT throw an error when setting any mode in a trusted folder', () => {
|
|
966
|
-
const config = new Config(baseParams);
|
|
967
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(true);
|
|
968
|
-
expect(() => config.setApprovalMode(ApprovalMode.YOLO)).not.toThrow();
|
|
969
|
-
expect(() => config.setApprovalMode(ApprovalMode.AUTO_EDIT)).not.toThrow();
|
|
970
|
-
expect(() => config.setApprovalMode(ApprovalMode.DEFAULT)).not.toThrow();
|
|
971
|
-
});
|
|
972
|
-
it('should NOT throw an error when setting any mode if trustedFolder is undefined', () => {
|
|
973
|
-
const config = new Config(baseParams);
|
|
974
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(true); // isTrustedFolder defaults to true
|
|
975
|
-
expect(() => config.setApprovalMode(ApprovalMode.YOLO)).not.toThrow();
|
|
976
|
-
expect(() => config.setApprovalMode(ApprovalMode.AUTO_EDIT)).not.toThrow();
|
|
977
|
-
expect(() => config.setApprovalMode(ApprovalMode.DEFAULT)).not.toThrow();
|
|
978
|
-
});
|
|
979
|
-
it('should update system instruction when entering Plan mode', () => {
|
|
980
|
-
const config = new Config(baseParams);
|
|
981
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(true);
|
|
982
|
-
const updateSpy = vi.spyOn(config, 'updateSystemInstructionIfInitialized');
|
|
983
|
-
config.setApprovalMode(ApprovalMode.PLAN);
|
|
984
|
-
expect(updateSpy).toHaveBeenCalled();
|
|
985
|
-
});
|
|
986
|
-
it('should update system instruction when leaving Plan mode', () => {
|
|
987
|
-
const config = new Config({
|
|
988
|
-
...baseParams,
|
|
989
|
-
approvalMode: ApprovalMode.PLAN,
|
|
990
|
-
});
|
|
991
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(true);
|
|
992
|
-
const updateSpy = vi.spyOn(config, 'updateSystemInstructionIfInitialized');
|
|
993
|
-
config.setApprovalMode(ApprovalMode.DEFAULT);
|
|
994
|
-
expect(updateSpy).toHaveBeenCalled();
|
|
995
|
-
});
|
|
996
|
-
it('should not update system instruction when switching between non-Plan modes', () => {
|
|
997
|
-
const config = new Config(baseParams);
|
|
998
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(true);
|
|
999
|
-
const updateSpy = vi.spyOn(config, 'updateSystemInstructionIfInitialized');
|
|
1000
|
-
config.setApprovalMode(ApprovalMode.AUTO_EDIT);
|
|
1001
|
-
expect(updateSpy).not.toHaveBeenCalled();
|
|
1002
|
-
});
|
|
1003
|
-
describe('registerCoreTools', () => {
|
|
1004
|
-
beforeEach(() => {
|
|
1005
|
-
vi.clearAllMocks();
|
|
1006
|
-
});
|
|
1007
|
-
it('should register RipGrepTool when useRipgrep is true and it is available', async () => {
|
|
1008
|
-
canUseRipgrep.mockResolvedValue(true);
|
|
1009
|
-
const config = new Config({ ...baseParams, useRipgrep: true });
|
|
1010
|
-
await config.initialize();
|
|
1011
|
-
const calls = ToolRegistry.prototype.registerTool.mock.calls;
|
|
1012
|
-
const wasRipGrepRegistered = calls.some((call) => call[0] instanceof vi.mocked(RipGrepTool));
|
|
1013
|
-
const wasGrepRegistered = calls.some((call) => call[0] instanceof vi.mocked(GrepTool));
|
|
1014
|
-
expect(wasRipGrepRegistered).toBe(true);
|
|
1015
|
-
expect(wasGrepRegistered).toBe(false);
|
|
1016
|
-
expect(logRipgrepFallback).not.toHaveBeenCalled();
|
|
1017
|
-
});
|
|
1018
|
-
it('should register GrepTool as a fallback when useRipgrep is true but it is not available', async () => {
|
|
1019
|
-
canUseRipgrep.mockResolvedValue(false);
|
|
1020
|
-
const config = new Config({ ...baseParams, useRipgrep: true });
|
|
1021
|
-
await config.initialize();
|
|
1022
|
-
const calls = ToolRegistry.prototype.registerTool.mock.calls;
|
|
1023
|
-
const wasRipGrepRegistered = calls.some((call) => call[0] instanceof vi.mocked(RipGrepTool));
|
|
1024
|
-
const wasGrepRegistered = calls.some((call) => call[0] instanceof vi.mocked(GrepTool));
|
|
1025
|
-
expect(wasRipGrepRegistered).toBe(false);
|
|
1026
|
-
expect(wasGrepRegistered).toBe(true);
|
|
1027
|
-
expect(logRipgrepFallback).toHaveBeenCalledWith(config, expect.any(RipgrepFallbackEvent));
|
|
1028
|
-
const event = logRipgrepFallback.mock.calls[0][1];
|
|
1029
|
-
expect(event.error).toBeUndefined();
|
|
1030
|
-
});
|
|
1031
|
-
it('should register GrepTool as a fallback when canUseRipgrep throws an error', async () => {
|
|
1032
|
-
const error = new Error('ripGrep check failed');
|
|
1033
|
-
canUseRipgrep.mockRejectedValue(error);
|
|
1034
|
-
const config = new Config({ ...baseParams, useRipgrep: true });
|
|
1035
|
-
await config.initialize();
|
|
1036
|
-
const calls = ToolRegistry.prototype.registerTool.mock.calls;
|
|
1037
|
-
const wasRipGrepRegistered = calls.some((call) => call[0] instanceof vi.mocked(RipGrepTool));
|
|
1038
|
-
const wasGrepRegistered = calls.some((call) => call[0] instanceof vi.mocked(GrepTool));
|
|
1039
|
-
expect(wasRipGrepRegistered).toBe(false);
|
|
1040
|
-
expect(wasGrepRegistered).toBe(true);
|
|
1041
|
-
expect(logRipgrepFallback).toHaveBeenCalledWith(config, expect.any(RipgrepFallbackEvent));
|
|
1042
|
-
const event = logRipgrepFallback.mock.calls[0][1];
|
|
1043
|
-
expect(event.error).toBe(String(error));
|
|
1044
|
-
});
|
|
1045
|
-
it('should register GrepTool when useRipgrep is false', async () => {
|
|
1046
|
-
const config = new Config({ ...baseParams, useRipgrep: false });
|
|
1047
|
-
await config.initialize();
|
|
1048
|
-
const calls = ToolRegistry.prototype.registerTool.mock.calls;
|
|
1049
|
-
const wasRipGrepRegistered = calls.some((call) => call[0] instanceof vi.mocked(RipGrepTool));
|
|
1050
|
-
const wasGrepRegistered = calls.some((call) => call[0] instanceof vi.mocked(GrepTool));
|
|
1051
|
-
expect(wasRipGrepRegistered).toBe(false);
|
|
1052
|
-
expect(wasGrepRegistered).toBe(true);
|
|
1053
|
-
expect(canUseRipgrep).not.toHaveBeenCalled();
|
|
1054
|
-
expect(logRipgrepFallback).not.toHaveBeenCalled();
|
|
1055
|
-
});
|
|
1056
|
-
});
|
|
1057
|
-
});
|
|
1058
|
-
describe('isYoloModeDisabled', () => {
|
|
1059
|
-
const baseParams = {
|
|
1060
|
-
sessionId: 'test',
|
|
1061
|
-
targetDir: '.',
|
|
1062
|
-
debugMode: false,
|
|
1063
|
-
model: 'test-model',
|
|
1064
|
-
cwd: '.',
|
|
1065
|
-
};
|
|
1066
|
-
it('should return false when yolo mode is not disabled and folder is trusted', () => {
|
|
1067
|
-
const config = new Config(baseParams);
|
|
1068
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(true);
|
|
1069
|
-
expect(config.isYoloModeDisabled()).toBe(false);
|
|
1070
|
-
});
|
|
1071
|
-
it('should return true when yolo mode is disabled by parameter', () => {
|
|
1072
|
-
const config = new Config({ ...baseParams, disableYoloMode: true });
|
|
1073
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(true);
|
|
1074
|
-
expect(config.isYoloModeDisabled()).toBe(true);
|
|
1075
|
-
});
|
|
1076
|
-
it('should return true when folder is untrusted', () => {
|
|
1077
|
-
const config = new Config(baseParams);
|
|
1078
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(false);
|
|
1079
|
-
expect(config.isYoloModeDisabled()).toBe(true);
|
|
1080
|
-
});
|
|
1081
|
-
it('should return true when yolo is disabled and folder is untrusted', () => {
|
|
1082
|
-
const config = new Config({ ...baseParams, disableYoloMode: true });
|
|
1083
|
-
vi.spyOn(config, 'isTrustedFolder').mockReturnValue(false);
|
|
1084
|
-
expect(config.isYoloModeDisabled()).toBe(true);
|
|
1085
|
-
});
|
|
1086
|
-
});
|
|
1087
|
-
describe('BaseLlmClient Lifecycle', () => {
|
|
1088
|
-
const MODEL = 'gemini-pro';
|
|
1089
|
-
const SANDBOX = {
|
|
1090
|
-
command: 'docker',
|
|
1091
|
-
image: 'gemini-cli-sandbox',
|
|
1092
|
-
};
|
|
1093
|
-
const TARGET_DIR = '/path/to/target';
|
|
1094
|
-
const DEBUG_MODE = false;
|
|
1095
|
-
const QUESTION = 'test question';
|
|
1096
|
-
const USER_MEMORY = 'Test User Memory';
|
|
1097
|
-
const TELEMETRY_SETTINGS = { enabled: false };
|
|
1098
|
-
const EMBEDDING_MODEL = 'gemini-embedding';
|
|
1099
|
-
const SESSION_ID = 'test-session-id';
|
|
1100
|
-
const baseParams = {
|
|
1101
|
-
cwd: '/tmp',
|
|
1102
|
-
embeddingModel: EMBEDDING_MODEL,
|
|
1103
|
-
sandbox: SANDBOX,
|
|
1104
|
-
targetDir: TARGET_DIR,
|
|
1105
|
-
debugMode: DEBUG_MODE,
|
|
1106
|
-
question: QUESTION,
|
|
1107
|
-
userMemory: USER_MEMORY,
|
|
1108
|
-
telemetry: TELEMETRY_SETTINGS,
|
|
1109
|
-
sessionId: SESSION_ID,
|
|
1110
|
-
model: MODEL,
|
|
1111
|
-
usageStatisticsEnabled: false,
|
|
1112
|
-
};
|
|
1113
|
-
it('should throw an error if getBaseLlmClient is called before refreshAuth', () => {
|
|
1114
|
-
const config = new Config(baseParams);
|
|
1115
|
-
expect(() => config.getBaseLlmClient()).toThrow('BaseLlmClient not initialized. Ensure authentication has occurred and ContentGenerator is ready.');
|
|
1116
|
-
});
|
|
1117
|
-
it('should successfully initialize BaseLlmClient after refreshAuth is called', async () => {
|
|
1118
|
-
const config = new Config(baseParams);
|
|
1119
|
-
const authType = AuthType.USE_GEMINI;
|
|
1120
|
-
const mockContentConfig = { model: 'gemini-flash', apiKey: 'test-key' };
|
|
1121
|
-
vi.mocked(createContentGeneratorConfig).mockResolvedValue(mockContentConfig);
|
|
1122
|
-
await config.refreshAuth(authType);
|
|
1123
|
-
// Should not throw
|
|
1124
|
-
const llmService = config.getBaseLlmClient();
|
|
1125
|
-
expect(llmService).toBeDefined();
|
|
1126
|
-
expect(BaseLlmClient).toHaveBeenCalledWith(config.getContentGenerator(), config);
|
|
1127
|
-
});
|
|
1128
|
-
});
|
|
1129
|
-
describe('Generation Config Merging (HACK)', () => {
|
|
1130
|
-
const MODEL = 'gemini-pro';
|
|
1131
|
-
const SANDBOX = {
|
|
1132
|
-
command: 'docker',
|
|
1133
|
-
image: 'gemini-cli-sandbox',
|
|
1134
|
-
};
|
|
1135
|
-
const TARGET_DIR = '/path/to/target';
|
|
1136
|
-
const DEBUG_MODE = false;
|
|
1137
|
-
const QUESTION = 'test question';
|
|
1138
|
-
const USER_MEMORY = 'Test User Memory';
|
|
1139
|
-
const TELEMETRY_SETTINGS = { enabled: false };
|
|
1140
|
-
const EMBEDDING_MODEL = 'gemini-embedding';
|
|
1141
|
-
const SESSION_ID = 'test-session-id';
|
|
1142
|
-
const baseParams = {
|
|
1143
|
-
cwd: '/tmp',
|
|
1144
|
-
embeddingModel: EMBEDDING_MODEL,
|
|
1145
|
-
sandbox: SANDBOX,
|
|
1146
|
-
targetDir: TARGET_DIR,
|
|
1147
|
-
debugMode: DEBUG_MODE,
|
|
1148
|
-
question: QUESTION,
|
|
1149
|
-
userMemory: USER_MEMORY,
|
|
1150
|
-
telemetry: TELEMETRY_SETTINGS,
|
|
1151
|
-
sessionId: SESSION_ID,
|
|
1152
|
-
model: MODEL,
|
|
1153
|
-
usageStatisticsEnabled: false,
|
|
1154
|
-
};
|
|
1155
|
-
it('should merge default aliases when user provides only overrides', () => {
|
|
1156
|
-
const userOverrides = [
|
|
1157
|
-
{
|
|
1158
|
-
match: { model: 'test-model' },
|
|
1159
|
-
modelConfig: { generateContentConfig: { temperature: 0.1 } },
|
|
1160
|
-
},
|
|
1161
|
-
];
|
|
1162
|
-
const params = {
|
|
1163
|
-
...baseParams,
|
|
1164
|
-
modelConfigServiceConfig: {
|
|
1165
|
-
overrides: userOverrides,
|
|
1166
|
-
},
|
|
1167
|
-
};
|
|
1168
|
-
const config = new Config(params);
|
|
1169
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1170
|
-
const serviceConfig = config.modelConfigService.config;
|
|
1171
|
-
// Assert that the default aliases are present
|
|
1172
|
-
expect(serviceConfig.aliases).toEqual(DEFAULT_MODEL_CONFIGS.aliases);
|
|
1173
|
-
// Assert that the user's overrides are present
|
|
1174
|
-
expect(serviceConfig.overrides).toEqual(userOverrides);
|
|
1175
|
-
});
|
|
1176
|
-
it('should merge default overrides when user provides only aliases', () => {
|
|
1177
|
-
const userAliases = {
|
|
1178
|
-
'my-alias': {
|
|
1179
|
-
modelConfig: { model: 'my-model' },
|
|
1180
|
-
},
|
|
1181
|
-
};
|
|
1182
|
-
const params = {
|
|
1183
|
-
...baseParams,
|
|
1184
|
-
modelConfigServiceConfig: {
|
|
1185
|
-
aliases: userAliases,
|
|
1186
|
-
},
|
|
1187
|
-
};
|
|
1188
|
-
const config = new Config(params);
|
|
1189
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1190
|
-
const serviceConfig = config.modelConfigService.config;
|
|
1191
|
-
// Assert that the user's aliases are present
|
|
1192
|
-
expect(serviceConfig.aliases).toEqual(userAliases);
|
|
1193
|
-
// Assert that the default overrides are present
|
|
1194
|
-
expect(serviceConfig.overrides).toEqual(DEFAULT_MODEL_CONFIGS.overrides);
|
|
1195
|
-
});
|
|
1196
|
-
it('should use user-provided aliases if they exist', () => {
|
|
1197
|
-
const userAliases = {
|
|
1198
|
-
'my-alias': {
|
|
1199
|
-
modelConfig: { model: 'my-model' },
|
|
1200
|
-
},
|
|
1201
|
-
};
|
|
1202
|
-
const params = {
|
|
1203
|
-
...baseParams,
|
|
1204
|
-
modelConfigServiceConfig: {
|
|
1205
|
-
aliases: userAliases,
|
|
1206
|
-
},
|
|
1207
|
-
};
|
|
1208
|
-
const config = new Config(params);
|
|
1209
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1210
|
-
const serviceConfig = config.modelConfigService.config;
|
|
1211
|
-
// Assert that the user's aliases are used, not the defaults
|
|
1212
|
-
expect(serviceConfig.aliases).toEqual(userAliases);
|
|
1213
|
-
});
|
|
1214
|
-
it('should use default generation config if none is provided', () => {
|
|
1215
|
-
const params = { ...baseParams };
|
|
1216
|
-
const config = new Config(params);
|
|
1217
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1218
|
-
const serviceConfig = config.modelConfigService.config;
|
|
1219
|
-
// Assert that the full default config is used
|
|
1220
|
-
expect(serviceConfig).toEqual(DEFAULT_MODEL_CONFIGS);
|
|
1221
|
-
});
|
|
1222
|
-
});
|
|
1223
|
-
describe('Config getHooks', () => {
|
|
1224
|
-
const baseParams = {
|
|
1225
|
-
cwd: '/tmp',
|
|
1226
|
-
targetDir: '/path/to/target',
|
|
1227
|
-
debugMode: false,
|
|
1228
|
-
sessionId: 'test-session-id',
|
|
1229
|
-
model: 'gemini-pro',
|
|
1230
|
-
usageStatisticsEnabled: false,
|
|
1231
|
-
};
|
|
1232
|
-
it('should return undefined when no hooks are provided', () => {
|
|
1233
|
-
const config = new Config(baseParams);
|
|
1234
|
-
expect(config.getHooks()).toBeUndefined();
|
|
1235
|
-
});
|
|
1236
|
-
it('should return empty object when empty hooks are provided', () => {
|
|
1237
|
-
const configWithEmptyHooks = new Config({
|
|
1238
|
-
...baseParams,
|
|
1239
|
-
hooks: {},
|
|
1240
|
-
});
|
|
1241
|
-
expect(configWithEmptyHooks.getHooks()).toEqual({});
|
|
1242
|
-
});
|
|
1243
|
-
it('should return the hooks configuration when provided', () => {
|
|
1244
|
-
const mockHooks = {
|
|
1245
|
-
BeforeTool: [
|
|
1246
|
-
{
|
|
1247
|
-
hooks: [{ type: HookType.Command, command: 'echo 1' }],
|
|
1248
|
-
},
|
|
1249
|
-
],
|
|
1250
|
-
};
|
|
1251
|
-
const config = new Config({ ...baseParams, hooks: mockHooks });
|
|
1252
|
-
const retrievedHooks = config.getHooks();
|
|
1253
|
-
expect(retrievedHooks).toEqual(mockHooks);
|
|
1254
|
-
});
|
|
1255
|
-
it('should return hooks with all supported event types', () => {
|
|
1256
|
-
const allEventHooks = {
|
|
1257
|
-
[HookEventName.BeforeAgent]: [
|
|
1258
|
-
{ hooks: [{ type: HookType.Command, command: 'test1' }] },
|
|
1259
|
-
],
|
|
1260
|
-
[HookEventName.AfterAgent]: [
|
|
1261
|
-
{ hooks: [{ type: HookType.Command, command: 'test2' }] },
|
|
1262
|
-
],
|
|
1263
|
-
[HookEventName.BeforeTool]: [
|
|
1264
|
-
{ hooks: [{ type: HookType.Command, command: 'test3' }] },
|
|
1265
|
-
],
|
|
1266
|
-
[HookEventName.AfterTool]: [
|
|
1267
|
-
{ hooks: [{ type: HookType.Command, command: 'test4' }] },
|
|
1268
|
-
],
|
|
1269
|
-
[HookEventName.BeforeModel]: [
|
|
1270
|
-
{ hooks: [{ type: HookType.Command, command: 'test5' }] },
|
|
1271
|
-
],
|
|
1272
|
-
[HookEventName.AfterModel]: [
|
|
1273
|
-
{ hooks: [{ type: HookType.Command, command: 'test6' }] },
|
|
1274
|
-
],
|
|
1275
|
-
[HookEventName.BeforeToolSelection]: [
|
|
1276
|
-
{ hooks: [{ type: HookType.Command, command: 'test7' }] },
|
|
1277
|
-
],
|
|
1278
|
-
[HookEventName.Notification]: [
|
|
1279
|
-
{ hooks: [{ type: HookType.Command, command: 'test8' }] },
|
|
1280
|
-
],
|
|
1281
|
-
[HookEventName.SessionStart]: [
|
|
1282
|
-
{ hooks: [{ type: HookType.Command, command: 'test9' }] },
|
|
1283
|
-
],
|
|
1284
|
-
[HookEventName.SessionEnd]: [
|
|
1285
|
-
{ hooks: [{ type: HookType.Command, command: 'test10' }] },
|
|
1286
|
-
],
|
|
1287
|
-
[HookEventName.PreCompress]: [
|
|
1288
|
-
{ hooks: [{ type: HookType.Command, command: 'test11' }] },
|
|
1289
|
-
],
|
|
1290
|
-
};
|
|
1291
|
-
const config = new Config({
|
|
1292
|
-
...baseParams,
|
|
1293
|
-
hooks: allEventHooks,
|
|
1294
|
-
});
|
|
1295
|
-
const retrievedHooks = config.getHooks();
|
|
1296
|
-
expect(retrievedHooks).toEqual(allEventHooks);
|
|
1297
|
-
expect(Object.keys(retrievedHooks)).toHaveLength(11); // All hook event types
|
|
1298
|
-
});
|
|
1299
|
-
describe('setModel', () => {
|
|
1300
|
-
it('should allow setting a pro (any) model and reset availability', () => {
|
|
1301
|
-
const config = new Config(baseParams);
|
|
1302
|
-
const service = config.getModelAvailabilityService();
|
|
1303
|
-
const spy = vi.spyOn(service, 'reset');
|
|
1304
|
-
const proModel = 'gemini-2.5-pro';
|
|
1305
|
-
config.setModel(proModel);
|
|
1306
|
-
expect(config.getModel()).toBe(proModel);
|
|
1307
|
-
expect(mockCoreEvents.emitModelChanged).toHaveBeenCalledWith(proModel);
|
|
1308
|
-
expect(spy).toHaveBeenCalled();
|
|
1309
|
-
});
|
|
1310
|
-
it('should allow setting auto model from non-auto model and reset availability', () => {
|
|
1311
|
-
const config = new Config(baseParams);
|
|
1312
|
-
const service = config.getModelAvailabilityService();
|
|
1313
|
-
const spy = vi.spyOn(service, 'reset');
|
|
1314
|
-
config.setModel('auto');
|
|
1315
|
-
expect(config.getModel()).toBe('auto');
|
|
1316
|
-
expect(mockCoreEvents.emitModelChanged).toHaveBeenCalledWith('auto');
|
|
1317
|
-
expect(spy).toHaveBeenCalled();
|
|
1318
|
-
});
|
|
1319
|
-
it('should allow setting auto model from auto model and reset availability', () => {
|
|
1320
|
-
const config = new Config({
|
|
1321
|
-
cwd: '/tmp',
|
|
1322
|
-
targetDir: '/path/to/target',
|
|
1323
|
-
debugMode: false,
|
|
1324
|
-
sessionId: 'test-session-id',
|
|
1325
|
-
model: 'auto',
|
|
1326
|
-
usageStatisticsEnabled: false,
|
|
1327
|
-
});
|
|
1328
|
-
const service = config.getModelAvailabilityService();
|
|
1329
|
-
const spy = vi.spyOn(service, 'reset');
|
|
1330
|
-
config.setModel('auto');
|
|
1331
|
-
expect(config.getModel()).toBe('auto');
|
|
1332
|
-
expect(spy).toHaveBeenCalled();
|
|
1333
|
-
});
|
|
1334
|
-
it('should reset active model when setModel is called with the current model after a fallback', () => {
|
|
1335
|
-
const config = new Config(baseParams);
|
|
1336
|
-
const originalModel = config.getModel();
|
|
1337
|
-
const fallbackModel = 'fallback-model';
|
|
1338
|
-
config.setActiveModel(fallbackModel);
|
|
1339
|
-
expect(config.getActiveModel()).toBe(fallbackModel);
|
|
1340
|
-
config.setModel(originalModel);
|
|
1341
|
-
expect(config.getModel()).toBe(originalModel);
|
|
1342
|
-
expect(config.getActiveModel()).toBe(originalModel);
|
|
1343
|
-
});
|
|
1344
|
-
it('should call onModelChange when a new model is set and should persist', () => {
|
|
1345
|
-
const onModelChange = vi.fn();
|
|
1346
|
-
const config = new Config({
|
|
1347
|
-
...baseParams,
|
|
1348
|
-
onModelChange,
|
|
1349
|
-
});
|
|
1350
|
-
config.setModel(DEFAULT_GEMINI_MODEL, false);
|
|
1351
|
-
expect(onModelChange).toHaveBeenCalledWith(DEFAULT_GEMINI_MODEL);
|
|
1352
|
-
});
|
|
1353
|
-
it('should NOT call onModelChange when a new model is temporary', () => {
|
|
1354
|
-
const onModelChange = vi.fn();
|
|
1355
|
-
const config = new Config({
|
|
1356
|
-
...baseParams,
|
|
1357
|
-
onModelChange,
|
|
1358
|
-
});
|
|
1359
|
-
config.setModel(DEFAULT_GEMINI_MODEL, true);
|
|
1360
|
-
expect(onModelChange).not.toHaveBeenCalled();
|
|
1361
|
-
});
|
|
1362
|
-
});
|
|
1363
|
-
});
|
|
1364
|
-
describe('Config getExperiments', () => {
|
|
1365
|
-
const baseParams = {
|
|
1366
|
-
cwd: '/tmp',
|
|
1367
|
-
targetDir: '/path/to/target',
|
|
1368
|
-
debugMode: false,
|
|
1369
|
-
sessionId: 'test-session-id',
|
|
1370
|
-
model: 'gemini-pro',
|
|
1371
|
-
usageStatisticsEnabled: false,
|
|
1372
|
-
};
|
|
1373
|
-
it('should return undefined when no experiments are provided', () => {
|
|
1374
|
-
const config = new Config(baseParams);
|
|
1375
|
-
expect(config.getExperiments()).toBeUndefined();
|
|
1376
|
-
});
|
|
1377
|
-
it('should return empty object when empty experiments are provided', () => {
|
|
1378
|
-
const configWithEmptyExps = new Config({
|
|
1379
|
-
...baseParams,
|
|
1380
|
-
experiments: { flags: {}, experimentIds: [] },
|
|
1381
|
-
});
|
|
1382
|
-
expect(configWithEmptyExps.getExperiments()).toEqual({
|
|
1383
|
-
flags: {},
|
|
1384
|
-
experimentIds: [],
|
|
1385
|
-
});
|
|
1386
|
-
});
|
|
1387
|
-
it('should return the experiments configuration when provided', () => {
|
|
1388
|
-
const mockExps = {
|
|
1389
|
-
flags: {
|
|
1390
|
-
testFlag: { boolValue: true },
|
|
1391
|
-
},
|
|
1392
|
-
experimentIds: [],
|
|
1393
|
-
};
|
|
1394
|
-
const config = new Config({
|
|
1395
|
-
...baseParams,
|
|
1396
|
-
experiments: mockExps,
|
|
1397
|
-
});
|
|
1398
|
-
const retrievedExps = config.getExperiments();
|
|
1399
|
-
expect(retrievedExps).toEqual(mockExps);
|
|
1400
|
-
expect(retrievedExps).toBe(mockExps); // Should return the same reference
|
|
1401
|
-
});
|
|
1402
|
-
});
|
|
1403
|
-
describe('Config setExperiments logging', () => {
|
|
1404
|
-
const baseParams = {
|
|
1405
|
-
cwd: '/tmp',
|
|
1406
|
-
targetDir: '/path/to/target',
|
|
1407
|
-
debugMode: false,
|
|
1408
|
-
sessionId: 'test-session-id',
|
|
1409
|
-
model: 'gemini-pro',
|
|
1410
|
-
usageStatisticsEnabled: false,
|
|
1411
|
-
};
|
|
1412
|
-
it('logs a sorted, non-truncated summary of experiments when they are set', () => {
|
|
1413
|
-
const config = new Config(baseParams);
|
|
1414
|
-
const debugSpy = vi
|
|
1415
|
-
.spyOn(debugLogger, 'debug')
|
|
1416
|
-
.mockImplementation(() => { });
|
|
1417
|
-
const experiments = {
|
|
1418
|
-
flags: {
|
|
1419
|
-
ZetaFlag: {
|
|
1420
|
-
boolValue: true,
|
|
1421
|
-
stringValue: 'zeta',
|
|
1422
|
-
int32ListValue: { values: [1, 2] },
|
|
1423
|
-
},
|
|
1424
|
-
AlphaFlag: {
|
|
1425
|
-
boolValue: false,
|
|
1426
|
-
stringValue: 'alpha',
|
|
1427
|
-
stringListValue: { values: ['a', 'b', 'c'] },
|
|
1428
|
-
},
|
|
1429
|
-
MiddleFlag: {
|
|
1430
|
-
// Intentionally sparse to ensure undefined values are omitted
|
|
1431
|
-
floatValue: 0.42,
|
|
1432
|
-
int32ListValue: { values: [] },
|
|
1433
|
-
},
|
|
1434
|
-
},
|
|
1435
|
-
experimentIds: [101, 99],
|
|
1436
|
-
};
|
|
1437
|
-
config.setExperiments(experiments);
|
|
1438
|
-
const logCall = debugSpy.mock.calls.find(([message]) => message === 'Experiments loaded');
|
|
1439
|
-
expect(logCall).toBeDefined();
|
|
1440
|
-
const loggedSummary = logCall?.[1];
|
|
1441
|
-
expect(typeof loggedSummary).toBe('string');
|
|
1442
|
-
expect(loggedSummary).toContain('experimentIds');
|
|
1443
|
-
expect(loggedSummary).toContain('101');
|
|
1444
|
-
expect(loggedSummary).toContain('AlphaFlag');
|
|
1445
|
-
expect(loggedSummary).toContain('ZetaFlag');
|
|
1446
|
-
const alphaIndex = loggedSummary.indexOf('AlphaFlag');
|
|
1447
|
-
const zetaIndex = loggedSummary.indexOf('ZetaFlag');
|
|
1448
|
-
expect(alphaIndex).toBeGreaterThan(-1);
|
|
1449
|
-
expect(zetaIndex).toBeGreaterThan(-1);
|
|
1450
|
-
expect(alphaIndex).toBeLessThan(zetaIndex);
|
|
1451
|
-
expect(loggedSummary).toContain('\n');
|
|
1452
|
-
expect(loggedSummary).not.toContain('stringListLength: 0');
|
|
1453
|
-
expect(loggedSummary).not.toContain('int32ListLength: 0');
|
|
1454
|
-
debugSpy.mockRestore();
|
|
1455
|
-
});
|
|
1456
|
-
});
|
|
1457
|
-
describe('Availability Service Integration', () => {
|
|
1458
|
-
const baseModel = 'test-model';
|
|
1459
|
-
const baseParams = {
|
|
1460
|
-
sessionId: 'test',
|
|
1461
|
-
targetDir: '.',
|
|
1462
|
-
debugMode: false,
|
|
1463
|
-
model: baseModel,
|
|
1464
|
-
cwd: '.',
|
|
1465
|
-
};
|
|
1466
|
-
it('setActiveModel updates active model', async () => {
|
|
1467
|
-
const config = new Config(baseParams);
|
|
1468
|
-
const model1 = 'model1';
|
|
1469
|
-
const model2 = 'model2';
|
|
1470
|
-
config.setActiveModel(model1);
|
|
1471
|
-
expect(config.getActiveModel()).toBe(model1);
|
|
1472
|
-
config.setActiveModel(model2);
|
|
1473
|
-
expect(config.getActiveModel()).toBe(model2);
|
|
1474
|
-
});
|
|
1475
|
-
it('getActiveModel defaults to configured model if not set', () => {
|
|
1476
|
-
const config = new Config(baseParams);
|
|
1477
|
-
expect(config.getActiveModel()).toBe(baseModel);
|
|
1478
|
-
});
|
|
1479
|
-
it('resetTurn delegates to availability service', () => {
|
|
1480
|
-
const config = new Config(baseParams);
|
|
1481
|
-
const service = config.getModelAvailabilityService();
|
|
1482
|
-
const spy = vi.spyOn(service, 'resetTurn');
|
|
1483
|
-
config.resetTurn();
|
|
1484
|
-
expect(spy).toHaveBeenCalled();
|
|
1485
|
-
});
|
|
1486
|
-
});
|
|
1487
|
-
describe('Hooks configuration', () => {
|
|
1488
|
-
const baseParams = {
|
|
1489
|
-
sessionId: 'test',
|
|
1490
|
-
targetDir: '.',
|
|
1491
|
-
debugMode: false,
|
|
1492
|
-
model: 'test-model',
|
|
1493
|
-
cwd: '.',
|
|
1494
|
-
disabledHooks: ['initial-hook'],
|
|
1495
|
-
};
|
|
1496
|
-
it('updateDisabledHooks should update the disabled list', () => {
|
|
1497
|
-
const config = new Config(baseParams);
|
|
1498
|
-
expect(config.getDisabledHooks()).toEqual(['initial-hook']);
|
|
1499
|
-
const newDisabled = ['new-hook-1', 'new-hook-2'];
|
|
1500
|
-
config.updateDisabledHooks(newDisabled);
|
|
1501
|
-
expect(config.getDisabledHooks()).toEqual(['new-hook-1', 'new-hook-2']);
|
|
1502
|
-
});
|
|
1503
|
-
it('updateDisabledHooks should only update disabled list and not definitions', () => {
|
|
1504
|
-
const initialHooks = {
|
|
1505
|
-
BeforeAgent: [
|
|
1506
|
-
{
|
|
1507
|
-
hooks: [{ type: HookType.Command, command: 'initial' }],
|
|
1508
|
-
},
|
|
1509
|
-
],
|
|
1510
|
-
};
|
|
1511
|
-
const config = new Config({ ...baseParams, hooks: initialHooks });
|
|
1512
|
-
config.updateDisabledHooks(['some-hook']);
|
|
1513
|
-
expect(config.getDisabledHooks()).toEqual(['some-hook']);
|
|
1514
|
-
expect(config.getHooks()).toEqual(initialHooks);
|
|
1515
|
-
});
|
|
1516
|
-
});
|
|
1517
|
-
describe('Config Quota & Preview Model Access', () => {
|
|
1518
|
-
let config;
|
|
1519
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1520
|
-
let mockCodeAssistServer;
|
|
1521
|
-
const baseParams = {
|
|
1522
|
-
cwd: '/tmp',
|
|
1523
|
-
targetDir: '/tmp',
|
|
1524
|
-
debugMode: false,
|
|
1525
|
-
sessionId: 'test-session',
|
|
1526
|
-
model: 'gemini-pro',
|
|
1527
|
-
usageStatisticsEnabled: false,
|
|
1528
|
-
embeddingModel: 'gemini-embedding',
|
|
1529
|
-
sandbox: {
|
|
1530
|
-
command: 'docker',
|
|
1531
|
-
image: 'gemini-cli-sandbox',
|
|
1532
|
-
},
|
|
1533
|
-
};
|
|
1534
|
-
beforeEach(() => {
|
|
1535
|
-
vi.clearAllMocks();
|
|
1536
|
-
mockCodeAssistServer = {
|
|
1537
|
-
projectId: 'test-project',
|
|
1538
|
-
retrieveUserQuota: vi.fn(),
|
|
1539
|
-
};
|
|
1540
|
-
vi.mocked(getCodeAssistServer).mockReturnValue(mockCodeAssistServer);
|
|
1541
|
-
config = new Config(baseParams);
|
|
1542
|
-
});
|
|
1543
|
-
describe('refreshUserQuota', () => {
|
|
1544
|
-
it('should update hasAccessToPreviewModel to true if quota includes preview model', async () => {
|
|
1545
|
-
mockCodeAssistServer.retrieveUserQuota.mockResolvedValue({
|
|
1546
|
-
buckets: [{ modelId: PREVIEW_GEMINI_MODEL }],
|
|
1547
|
-
});
|
|
1548
|
-
await config.refreshUserQuota();
|
|
1549
|
-
expect(config.getHasAccessToPreviewModel()).toBe(true);
|
|
1550
|
-
});
|
|
1551
|
-
it('should update hasAccessToPreviewModel to false if quota does not include preview model', async () => {
|
|
1552
|
-
mockCodeAssistServer.retrieveUserQuota.mockResolvedValue({
|
|
1553
|
-
buckets: [{ modelId: 'some-other-model' }],
|
|
1554
|
-
});
|
|
1555
|
-
await config.refreshUserQuota();
|
|
1556
|
-
expect(config.getHasAccessToPreviewModel()).toBe(false);
|
|
1557
|
-
});
|
|
1558
|
-
it('should update hasAccessToPreviewModel to false if buckets are undefined', async () => {
|
|
1559
|
-
mockCodeAssistServer.retrieveUserQuota.mockResolvedValue({});
|
|
1560
|
-
await config.refreshUserQuota();
|
|
1561
|
-
expect(config.getHasAccessToPreviewModel()).toBe(false);
|
|
1562
|
-
});
|
|
1563
|
-
it('should return undefined and not update if codeAssistServer is missing', async () => {
|
|
1564
|
-
vi.mocked(getCodeAssistServer).mockReturnValue(undefined);
|
|
1565
|
-
const result = await config.refreshUserQuota();
|
|
1566
|
-
expect(result).toBeUndefined();
|
|
1567
|
-
expect(config.getHasAccessToPreviewModel()).toBe(false);
|
|
1568
|
-
});
|
|
1569
|
-
it('should return undefined if retrieveUserQuota fails', async () => {
|
|
1570
|
-
mockCodeAssistServer.retrieveUserQuota.mockRejectedValue(new Error('Network error'));
|
|
1571
|
-
const result = await config.refreshUserQuota();
|
|
1572
|
-
expect(result).toBeUndefined();
|
|
1573
|
-
// Should remain default (false)
|
|
1574
|
-
expect(config.getHasAccessToPreviewModel()).toBe(false);
|
|
1575
|
-
});
|
|
1576
|
-
});
|
|
1577
|
-
describe('setPreviewFeatures', () => {
|
|
1578
|
-
it('should reset model to default auto if disabling preview features while using a preview model', () => {
|
|
1579
|
-
config.setPreviewFeatures(true);
|
|
1580
|
-
config.setModel(PREVIEW_GEMINI_MODEL);
|
|
1581
|
-
config.setPreviewFeatures(false);
|
|
1582
|
-
expect(config.getModel()).toBe(DEFAULT_GEMINI_MODEL_AUTO);
|
|
1583
|
-
});
|
|
1584
|
-
it('should NOT reset model if disabling preview features while NOT using a preview model', () => {
|
|
1585
|
-
config.setPreviewFeatures(true);
|
|
1586
|
-
const nonPreviewModel = 'gemini-1.5-pro';
|
|
1587
|
-
config.setModel(nonPreviewModel);
|
|
1588
|
-
config.setPreviewFeatures(false);
|
|
1589
|
-
expect(config.getModel()).toBe(nonPreviewModel);
|
|
1590
|
-
});
|
|
1591
|
-
it('should switch to preview auto model if enabling preview features while using default auto model', () => {
|
|
1592
|
-
config.setPreviewFeatures(false);
|
|
1593
|
-
config.setModel(DEFAULT_GEMINI_MODEL_AUTO);
|
|
1594
|
-
config.setPreviewFeatures(true);
|
|
1595
|
-
expect(config.getModel()).toBe(PREVIEW_GEMINI_MODEL_AUTO);
|
|
1596
|
-
});
|
|
1597
|
-
it('should NOT reset model if enabling preview features', () => {
|
|
1598
|
-
config.setPreviewFeatures(false);
|
|
1599
|
-
config.setModel(PREVIEW_GEMINI_MODEL); // Just pretending it was set somehow
|
|
1600
|
-
config.setPreviewFeatures(true);
|
|
1601
|
-
expect(config.getModel()).toBe(PREVIEW_GEMINI_MODEL);
|
|
1602
|
-
});
|
|
1603
|
-
});
|
|
1604
|
-
describe('isPlanEnabled', () => {
|
|
1605
|
-
it('should return false by default', () => {
|
|
1606
|
-
const config = new Config(baseParams);
|
|
1607
|
-
expect(config.isPlanEnabled()).toBe(false);
|
|
1608
|
-
});
|
|
1609
|
-
it('should return true when plan is enabled', () => {
|
|
1610
|
-
const config = new Config({
|
|
1611
|
-
...baseParams,
|
|
1612
|
-
plan: true,
|
|
1613
|
-
});
|
|
1614
|
-
expect(config.isPlanEnabled()).toBe(true);
|
|
1615
|
-
});
|
|
1616
|
-
it('should return false when plan is explicitly disabled', () => {
|
|
1617
|
-
const config = new Config({
|
|
1618
|
-
...baseParams,
|
|
1619
|
-
plan: false,
|
|
1620
|
-
});
|
|
1621
|
-
expect(config.isPlanEnabled()).toBe(false);
|
|
1622
|
-
});
|
|
1623
|
-
});
|
|
1624
|
-
});
|
|
1625
|
-
describe('Config JIT Initialization', () => {
|
|
1626
|
-
let config;
|
|
1627
|
-
let mockContextManager;
|
|
1628
|
-
beforeEach(() => {
|
|
1629
|
-
vi.clearAllMocks();
|
|
1630
|
-
mockContextManager = {
|
|
1631
|
-
refresh: vi.fn(),
|
|
1632
|
-
getGlobalMemory: vi.fn().mockReturnValue('Global Memory'),
|
|
1633
|
-
getEnvironmentMemory: vi
|
|
1634
|
-
.fn()
|
|
1635
|
-
.mockReturnValue('Environment Memory\n\nMCP Instructions'),
|
|
1636
|
-
getLoadedPaths: vi.fn().mockReturnValue(new Set(['/path/to/GEMINI.md'])),
|
|
1637
|
-
};
|
|
1638
|
-
ContextManager.mockImplementation(() => mockContextManager);
|
|
1639
|
-
});
|
|
1640
|
-
it('should initialize ContextManager, load memory, and delegate to it when experimentalJitContext is enabled', async () => {
|
|
1641
|
-
const params = {
|
|
1642
|
-
sessionId: 'test-session',
|
|
1643
|
-
targetDir: '/tmp/test',
|
|
1644
|
-
debugMode: false,
|
|
1645
|
-
model: 'test-model',
|
|
1646
|
-
experimentalJitContext: true,
|
|
1647
|
-
userMemory: 'Initial Memory',
|
|
1648
|
-
cwd: '/tmp/test',
|
|
1649
|
-
};
|
|
1650
|
-
config = new Config(params);
|
|
1651
|
-
await config.initialize();
|
|
1652
|
-
expect(ContextManager).toHaveBeenCalledWith(config);
|
|
1653
|
-
expect(mockContextManager.refresh).toHaveBeenCalled();
|
|
1654
|
-
expect(config.getUserMemory()).toBe('Global Memory\n\nEnvironment Memory\n\nMCP Instructions');
|
|
1655
|
-
// Verify state update (delegated to ContextManager)
|
|
1656
|
-
expect(config.getGeminiMdFileCount()).toBe(1);
|
|
1657
|
-
expect(config.getGeminiMdFilePaths()).toEqual(['/path/to/GEMINI.md']);
|
|
1658
|
-
});
|
|
1659
|
-
it('should NOT initialize ContextManager when experimentalJitContext is disabled', async () => {
|
|
1660
|
-
const params = {
|
|
1661
|
-
sessionId: 'test-session',
|
|
1662
|
-
targetDir: '/tmp/test',
|
|
1663
|
-
debugMode: false,
|
|
1664
|
-
model: 'test-model',
|
|
1665
|
-
experimentalJitContext: false,
|
|
1666
|
-
userMemory: 'Initial Memory',
|
|
1667
|
-
cwd: '/tmp/test',
|
|
1668
|
-
};
|
|
1669
|
-
config = new Config(params);
|
|
1670
|
-
await config.initialize();
|
|
1671
|
-
expect(ContextManager).not.toHaveBeenCalled();
|
|
1672
|
-
expect(config.getUserMemory()).toBe('Initial Memory');
|
|
1673
|
-
});
|
|
1674
|
-
describe('reloadSkills', () => {
|
|
1675
|
-
it('should refresh disabledSkills and re-register ActivateSkillTool when skills exist', async () => {
|
|
1676
|
-
const mockOnReload = vi.fn().mockResolvedValue({
|
|
1677
|
-
disabledSkills: ['skill2'],
|
|
1678
|
-
});
|
|
1679
|
-
const params = {
|
|
1680
|
-
sessionId: 'test-session',
|
|
1681
|
-
targetDir: '/tmp/test',
|
|
1682
|
-
debugMode: false,
|
|
1683
|
-
model: 'test-model',
|
|
1684
|
-
cwd: '/tmp/test',
|
|
1685
|
-
skillsSupport: true,
|
|
1686
|
-
onReload: mockOnReload,
|
|
1687
|
-
};
|
|
1688
|
-
config = new Config(params);
|
|
1689
|
-
await config.initialize();
|
|
1690
|
-
const skillManager = config.getSkillManager();
|
|
1691
|
-
const toolRegistry = config.getToolRegistry();
|
|
1692
|
-
vi.spyOn(skillManager, 'discoverSkills').mockResolvedValue(undefined);
|
|
1693
|
-
vi.spyOn(skillManager, 'setDisabledSkills');
|
|
1694
|
-
vi.spyOn(toolRegistry, 'registerTool');
|
|
1695
|
-
vi.spyOn(toolRegistry, 'unregisterTool');
|
|
1696
|
-
const mockSkills = [{ name: 'skill1' }];
|
|
1697
|
-
vi.spyOn(skillManager, 'getSkills').mockReturnValue(mockSkills);
|
|
1698
|
-
await config.reloadSkills();
|
|
1699
|
-
expect(mockOnReload).toHaveBeenCalled();
|
|
1700
|
-
expect(skillManager.setDisabledSkills).toHaveBeenCalledWith(['skill2']);
|
|
1701
|
-
expect(toolRegistry.registerTool).toHaveBeenCalled();
|
|
1702
|
-
expect(toolRegistry.unregisterTool).toHaveBeenCalledWith(ACTIVATE_SKILL_TOOL_NAME);
|
|
1703
|
-
});
|
|
1704
|
-
it('should unregister ActivateSkillTool when no skills exist after reload', async () => {
|
|
1705
|
-
const params = {
|
|
1706
|
-
sessionId: 'test-session',
|
|
1707
|
-
targetDir: '/tmp/test',
|
|
1708
|
-
debugMode: false,
|
|
1709
|
-
model: 'test-model',
|
|
1710
|
-
cwd: '/tmp/test',
|
|
1711
|
-
skillsSupport: true,
|
|
1712
|
-
};
|
|
1713
|
-
config = new Config(params);
|
|
1714
|
-
await config.initialize();
|
|
1715
|
-
const skillManager = config.getSkillManager();
|
|
1716
|
-
const toolRegistry = config.getToolRegistry();
|
|
1717
|
-
vi.spyOn(skillManager, 'discoverSkills').mockResolvedValue(undefined);
|
|
1718
|
-
vi.spyOn(toolRegistry, 'registerTool');
|
|
1719
|
-
vi.spyOn(toolRegistry, 'unregisterTool');
|
|
1720
|
-
vi.spyOn(skillManager, 'getSkills').mockReturnValue([]);
|
|
1721
|
-
await config.reloadSkills();
|
|
1722
|
-
expect(toolRegistry.unregisterTool).toHaveBeenCalledWith(ACTIVATE_SKILL_TOOL_NAME);
|
|
1723
|
-
});
|
|
1724
|
-
it('should clear disabledSkills when onReload returns undefined for them', async () => {
|
|
1725
|
-
const mockOnReload = vi.fn().mockResolvedValue({
|
|
1726
|
-
disabledSkills: undefined,
|
|
1727
|
-
});
|
|
1728
|
-
const params = {
|
|
1729
|
-
sessionId: 'test-session',
|
|
1730
|
-
targetDir: '/tmp/test',
|
|
1731
|
-
debugMode: false,
|
|
1732
|
-
model: 'test-model',
|
|
1733
|
-
cwd: '/tmp/test',
|
|
1734
|
-
skillsSupport: true,
|
|
1735
|
-
onReload: mockOnReload,
|
|
1736
|
-
};
|
|
1737
|
-
config = new Config(params);
|
|
1738
|
-
// Initially set some disabled skills
|
|
1739
|
-
// @ts-expect-error - accessing private
|
|
1740
|
-
config.disabledSkills = ['skill1'];
|
|
1741
|
-
await config.initialize();
|
|
1742
|
-
const skillManager = config.getSkillManager();
|
|
1743
|
-
vi.spyOn(skillManager, 'discoverSkills').mockResolvedValue(undefined);
|
|
1744
|
-
vi.spyOn(skillManager, 'setDisabledSkills');
|
|
1745
|
-
await config.reloadSkills();
|
|
1746
|
-
expect(skillManager.setDisabledSkills).toHaveBeenCalledWith([]);
|
|
1747
|
-
});
|
|
1748
|
-
it('should update admin settings from onReload', async () => {
|
|
1749
|
-
const mockOnReload = vi.fn().mockResolvedValue({
|
|
1750
|
-
adminSkillsEnabled: false,
|
|
1751
|
-
});
|
|
1752
|
-
const params = {
|
|
1753
|
-
sessionId: 'test-session',
|
|
1754
|
-
targetDir: '/tmp/test',
|
|
1755
|
-
debugMode: false,
|
|
1756
|
-
model: 'test-model',
|
|
1757
|
-
cwd: '/tmp/test',
|
|
1758
|
-
skillsSupport: true,
|
|
1759
|
-
onReload: mockOnReload,
|
|
1760
|
-
};
|
|
1761
|
-
config = new Config(params);
|
|
1762
|
-
await config.initialize();
|
|
1763
|
-
const skillManager = config.getSkillManager();
|
|
1764
|
-
vi.spyOn(skillManager, 'setAdminSettings');
|
|
1765
|
-
await config.reloadSkills();
|
|
1766
|
-
expect(skillManager.setAdminSettings).toHaveBeenCalledWith(false);
|
|
1767
|
-
});
|
|
1768
|
-
});
|
|
1769
|
-
});
|
|
1770
|
-
describe('Plans Directory Initialization', () => {
|
|
1771
|
-
const baseParams = {
|
|
1772
|
-
sessionId: 'test-session',
|
|
1773
|
-
targetDir: '/tmp/test',
|
|
1774
|
-
debugMode: false,
|
|
1775
|
-
model: 'test-model',
|
|
1776
|
-
cwd: '/tmp/test',
|
|
1777
|
-
};
|
|
1778
|
-
beforeEach(() => {
|
|
1779
|
-
vi.spyOn(fs.promises, 'mkdir').mockResolvedValue(undefined);
|
|
1780
|
-
});
|
|
1781
|
-
afterEach(() => {
|
|
1782
|
-
vi.mocked(fs.promises.mkdir).mockRestore();
|
|
1783
|
-
});
|
|
1784
|
-
it('should create plans directory and add it to workspace context when plan is enabled', async () => {
|
|
1785
|
-
const config = new Config({
|
|
1786
|
-
...baseParams,
|
|
1787
|
-
plan: true,
|
|
1788
|
-
});
|
|
1789
|
-
await config.initialize();
|
|
1790
|
-
const plansDir = config.storage.getProjectTempPlansDir();
|
|
1791
|
-
expect(fs.promises.mkdir).toHaveBeenCalledWith(plansDir, {
|
|
1792
|
-
recursive: true,
|
|
1793
|
-
});
|
|
1794
|
-
const context = config.getWorkspaceContext();
|
|
1795
|
-
expect(context.getDirectories()).toContain(plansDir);
|
|
1796
|
-
});
|
|
1797
|
-
it('should NOT create plans directory or add it to workspace context when plan is disabled', async () => {
|
|
1798
|
-
const config = new Config({
|
|
1799
|
-
...baseParams,
|
|
1800
|
-
plan: false,
|
|
1801
|
-
});
|
|
1802
|
-
await config.initialize();
|
|
1803
|
-
const plansDir = config.storage.getProjectTempPlansDir();
|
|
1804
|
-
expect(fs.promises.mkdir).not.toHaveBeenCalledWith(plansDir, {
|
|
1805
|
-
recursive: true,
|
|
1806
|
-
});
|
|
1807
|
-
const context = config.getWorkspaceContext();
|
|
1808
|
-
expect(context.getDirectories()).not.toContain(plansDir);
|
|
1809
|
-
});
|
|
1810
|
-
});
|
|
1811
|
-
//# sourceMappingURL=config.test.js.map
|