@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.
Files changed (1076) hide show
  1. package/package.json +6 -2
  2. package/dist/docs/00_project/ai_adapter/01-overview.md +0 -172
  3. package/dist/docs/00_project/ai_adapter/02-architecture.md +0 -448
  4. package/dist/docs/00_project/ai_adapter/03-technical-design.md +0 -1470
  5. package/dist/docs/00_project/ai_adapter/04-integration-design.md +0 -1934
  6. package/dist/docs/00_project/ai_adapter/05-implementation-plan.md +0 -336
  7. package/dist/docs/00_project/ai_adapter/06-didiaistudio-plan.md +0 -559
  8. package/dist/docs/00_project/ai_adapter/README.md +0 -145
  9. package/dist/docs/00_project/ai_adapter/agent_service_openapi.json +0 -1
  10. 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
  11. package/dist/docs/00_project/ai_adapter/event-mapping-matrix.md +0 -148
  12. package/dist/docs/00_project/ai_adapter/migration-plan.md +0 -205
  13. package/dist/docs/00_project/ai_adapter/template/00_vibecoding_workflow.md +0 -627
  14. package/dist/docs/00_project/ai_adapter/template/01_todolist_performance_template.md +0 -436
  15. package/dist/docs/00_project/ai_adapter/template/02_code_review_template.md +0 -248
  16. package/dist/docs/00_project/ai_adapter/template/03_work_result_report_template.md +0 -133
  17. package/dist/docs/00_project/ai_adapter/template/100_Python_Performance_Guide.md +0 -472
  18. package/dist/docs/00_project/ai_adapter/template/99_TDD_plan.md +0 -123
  19. package/dist/docs/00_project/ai_adapter/todolist/00_master_implementation_plan.md +0 -433
  20. package/dist/docs/00_project/ai_adapter/todolist/phase1_foundation_todolist.md +0 -726
  21. package/dist/docs/00_project/ai_adapter/todolist/phase2_core_refactoring_todolist.md +0 -974
  22. package/dist/docs/00_project/ai_adapter/todolist/phase3_handoff.md +0 -203
  23. package/dist/docs/00_project/ai_adapter/todolist/phase3_provider_extension_todolist.md +0 -1382
  24. package/dist/docs/00_project/ai_adapter/utility-migration.md +0 -237
  25. package/dist/docs/00_project/ai_adapter/working_history/.gitkeep +0 -0
  26. 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
  27. 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
  28. 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
  29. package/dist/docs/00_project/ai_adapter/working_history/Phase1_M1.3_Provider/354/204/240/355/203/235_20260206.md +0 -269
  30. 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
  31. 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
  32. 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
  33. 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
  34. package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.2_EventMapper/352/265/254/355/230/204_20260207.md +0 -372
  35. package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.3_GeminiAdapter/352/265/254/355/230/204_20260208.md +0 -205
  36. 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
  37. 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
  38. 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
  39. 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
  40. 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
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.1.1_ClaudeAdapter/352/265/254/355/230/204_20260209.md +0 -225
  47. 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
  48. 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
  49. package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.1.4_ClaudeErrorMapping_20260209.md +0 -98
  50. package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.2.A_OpenAIAdapterCore_20260210.md +0 -264
  51. package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.2.B_OpenAIStreamConverter_20260210.md +0 -204
  52. 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
  53. package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.3_OpenAICompatibleAdapter_20260211.md +0 -251
  54. 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
  55. 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
  56. 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
  57. 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
  58. 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
  59. package/dist/docs/00_project/ai_adapter/working_history/phase2_tradeoff_EventType/354/240/204/355/231/230_20260208.md +0 -286
  60. package/dist/docs/00_project/white_labeling/template/00_vibecoding_workflow.md +0 -627
  61. package/dist/docs/00_project/white_labeling/template/01_todolist_performance_template.md +0 -400
  62. package/dist/docs/00_project/white_labeling/template/02_code_review_template.md +0 -248
  63. package/dist/docs/00_project/white_labeling/template/03_work_result_report_template.md +0 -133
  64. package/dist/docs/00_project/white_labeling/template/100_Python_Performance_Guide.md +0 -472
  65. package/dist/docs/00_project/white_labeling/template/99_TDD_plan.md +0 -123
  66. 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
  67. 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
  68. package/dist/docs/00_project/white_labeling//354/225/261/352/265/254/354/241/260.md +0 -310
  69. package/dist/docs/CONTRIBUTING.md +0 -554
  70. package/dist/docs/ai_adapter/01-overview.md +0 -155
  71. package/dist/docs/ai_adapter/02-architecture.md +0 -452
  72. package/dist/docs/ai_adapter/03-technical-design.md +0 -1470
  73. package/dist/docs/ai_adapter/04-integration-design.md +0 -1904
  74. package/dist/docs/ai_adapter/05-implementation-plan.md +0 -312
  75. package/dist/docs/ai_adapter/06-didiaistudio-plan.md +0 -559
  76. package/dist/docs/ai_adapter/README.md +0 -118
  77. package/dist/docs/ai_adapter/agent_service_openapi.json +0 -1
  78. 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
  79. package/dist/docs/ai_adapter/event-mapping-matrix.md +0 -140
  80. package/dist/docs/ai_adapter/migration-plan.md +0 -205
  81. package/dist/docs/ai_adapter/template/00_vibecoding_workflow.md +0 -636
  82. package/dist/docs/ai_adapter/template/01_todolist_performance_template.md +0 -372
  83. package/dist/docs/ai_adapter/template/02_code_review_template.md +0 -220
  84. package/dist/docs/ai_adapter/template/03_work_result_report_template.md +0 -120
  85. package/dist/docs/ai_adapter/template/100_Python_Performance_Guide.md +0 -453
  86. package/dist/docs/ai_adapter/template/99_TDD_plan.md +0 -111
  87. package/dist/docs/ai_adapter/todolist/00_master_implementation_plan.md +0 -433
  88. package/dist/docs/ai_adapter/todolist/phase1_foundation_todolist.md +0 -726
  89. package/dist/docs/ai_adapter/todolist/phase2_core_refactoring_todolist.md +0 -974
  90. package/dist/docs/ai_adapter/todolist/phase3_handoff.md +0 -203
  91. package/dist/docs/ai_adapter/todolist/phase3_provider_extension_todolist.md +0 -1382
  92. package/dist/docs/ai_adapter/utility-migration.md +0 -237
  93. package/dist/docs/ai_adapter/working_history/.gitkeep +0 -0
  94. 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
  95. 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
  96. package/dist/docs/ai_adapter/working_history/Phase1_M1.2_Adapter/354/235/270/355/224/204/353/235/274_20260203.md +0 -378
  97. package/dist/docs/ai_adapter/working_history/Phase1_M1.3_Provider/354/204/240/355/203/235_20260206.md +0 -269
  98. 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
  99. 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
  100. 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
  101. 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
  102. package/dist/docs/ai_adapter/working_history/Phase2_M2.2_EventMapper/352/265/254/355/230/204_20260207.md +0 -372
  103. package/dist/docs/ai_adapter/working_history/Phase2_M2.3_GeminiAdapter/352/265/254/355/230/204_20260208.md +0 -205
  104. 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
  105. 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
  106. 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
  107. 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
  108. 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
  109. 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
  110. 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
  111. 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
  112. 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
  113. 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
  114. package/dist/docs/ai_adapter/working_history/Phase3_M3.1.1_ClaudeAdapter/352/265/254/355/230/204_20260209.md +0 -225
  115. 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
  116. 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
  117. package/dist/docs/ai_adapter/working_history/Phase3_M3.1.4_ClaudeErrorMapping_20260209.md +0 -98
  118. package/dist/docs/ai_adapter/working_history/Phase3_M3.2.A_OpenAIAdapterCore_20260210.md +0 -264
  119. package/dist/docs/ai_adapter/working_history/Phase3_M3.2.B_OpenAIStreamConverter_20260210.md +0 -204
  120. 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
  121. package/dist/docs/ai_adapter/working_history/Phase3_M3.3_OpenAICompatibleAdapter_20260211.md +0 -251
  122. 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
  123. 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
  124. 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
  125. 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
  126. 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
  127. package/dist/docs/ai_adapter/working_history/phase2_tradeoff_EventType/354/240/204/355/231/230_20260208.md +0 -286
  128. package/dist/docs/api/index.md +0 -5
  129. package/dist/docs/api/providers.md +0 -56
  130. package/dist/docs/architecture.md +0 -80
  131. package/dist/docs/assets/connected_devtools.png +0 -0
  132. package/dist/docs/assets/gemini-screenshot.png +0 -0
  133. package/dist/docs/assets/monitoring-dashboard-logs.png +0 -0
  134. package/dist/docs/assets/monitoring-dashboard-metrics.png +0 -0
  135. package/dist/docs/assets/monitoring-dashboard-overview.png +0 -0
  136. package/dist/docs/assets/release_patch.png +0 -0
  137. package/dist/docs/assets/theme-ansi-light.png +0 -0
  138. package/dist/docs/assets/theme-ansi.png +0 -0
  139. package/dist/docs/assets/theme-atom-one.png +0 -0
  140. package/dist/docs/assets/theme-ayu-light.png +0 -0
  141. package/dist/docs/assets/theme-ayu.png +0 -0
  142. package/dist/docs/assets/theme-custom.png +0 -0
  143. package/dist/docs/assets/theme-default-light.png +0 -0
  144. package/dist/docs/assets/theme-default.png +0 -0
  145. package/dist/docs/assets/theme-dracula.png +0 -0
  146. package/dist/docs/assets/theme-github-light.png +0 -0
  147. package/dist/docs/assets/theme-github.png +0 -0
  148. package/dist/docs/assets/theme-google-light.png +0 -0
  149. package/dist/docs/assets/theme-xcode-light.png +0 -0
  150. package/dist/docs/change_model/model_command_multi_provider_plan.md +0 -221
  151. package/dist/docs/change_model/model_command_multi_provider_todolist.md +0 -206
  152. package/dist/docs/changelogs/index.md +0 -726
  153. package/dist/docs/changelogs/latest.md +0 -370
  154. package/dist/docs/changelogs/preview.md +0 -332
  155. package/dist/docs/cli/authentication.md +0 -3
  156. package/dist/docs/cli/checkpointing.md +0 -94
  157. package/dist/docs/cli/commands.md +0 -375
  158. package/dist/docs/cli/custom-commands.md +0 -315
  159. package/dist/docs/cli/enterprise.md +0 -565
  160. package/dist/docs/cli/gemini-ignore.md +0 -71
  161. package/dist/docs/cli/gemini-md.md +0 -108
  162. package/dist/docs/cli/generation-settings.md +0 -210
  163. package/dist/docs/cli/headless.md +0 -388
  164. package/dist/docs/cli/index.md +0 -65
  165. package/dist/docs/cli/keyboard-shortcuts.md +0 -129
  166. package/dist/docs/cli/model-routing.md +0 -42
  167. package/dist/docs/cli/model.md +0 -62
  168. package/dist/docs/cli/sandbox.md +0 -171
  169. package/dist/docs/cli/session-management.md +0 -158
  170. package/dist/docs/cli/settings.md +0 -130
  171. package/dist/docs/cli/skills.md +0 -188
  172. package/dist/docs/cli/system-prompt.md +0 -125
  173. package/dist/docs/cli/telemetry.md +0 -826
  174. package/dist/docs/cli/themes.md +0 -235
  175. package/dist/docs/cli/token-caching.md +0 -20
  176. package/dist/docs/cli/trusted-folders.md +0 -95
  177. package/dist/docs/cli/tutorials/skills-getting-started.md +0 -124
  178. package/dist/docs/cli/tutorials.md +0 -87
  179. package/dist/docs/cli/uninstall.md +0 -65
  180. package/dist/docs/configuration.md +0 -108
  181. package/dist/docs/core/index.md +0 -105
  182. package/dist/docs/core/long-term-memory-design.md +0 -254
  183. package/dist/docs/core/long-term-memory-proposal.md +0 -112
  184. package/dist/docs/core/memport.md +0 -246
  185. package/dist/docs/core/policy-engine.md +0 -300
  186. package/dist/docs/core/tools-api.md +0 -131
  187. package/dist/docs/examples/proxy-script.md +0 -83
  188. package/dist/docs/extensions/best-practices.md +0 -139
  189. package/dist/docs/extensions/index.md +0 -44
  190. package/dist/docs/extensions/reference.md +0 -312
  191. package/dist/docs/extensions/releasing.md +0 -183
  192. package/dist/docs/extensions/writing-extensions.md +0 -283
  193. package/dist/docs/faq.md +0 -154
  194. package/dist/docs/get-started/authentication.md +0 -321
  195. package/dist/docs/get-started/configuration-v1.md +0 -888
  196. package/dist/docs/get-started/configuration.md +0 -1567
  197. package/dist/docs/get-started/examples.md +0 -219
  198. package/dist/docs/get-started/gemini-3.md +0 -101
  199. package/dist/docs/get-started/index.md +0 -71
  200. package/dist/docs/get-started/installation.md +0 -141
  201. package/dist/docs/hooks/best-practices.md +0 -677
  202. package/dist/docs/hooks/index.md +0 -178
  203. package/dist/docs/hooks/reference.md +0 -322
  204. package/dist/docs/hooks/writing-hooks.md +0 -450
  205. package/dist/docs/ide-integration/ide-companion-spec.md +0 -267
  206. package/dist/docs/ide-integration/index.md +0 -202
  207. package/dist/docs/index.md +0 -153
  208. package/dist/docs/integration-tests.md +0 -211
  209. package/dist/docs/issue-and-pr-automation.md +0 -134
  210. package/dist/docs/local-development.md +0 -128
  211. package/dist/docs/mermaid/context.mmd +0 -103
  212. package/dist/docs/mermaid/render-path.mmd +0 -64
  213. package/dist/docs/migration.md +0 -78
  214. package/dist/docs/npm.md +0 -62
  215. package/dist/docs/providers.md +0 -136
  216. package/dist/docs/quota-and-pricing.md +0 -158
  217. package/dist/docs/release-confidence.md +0 -164
  218. package/dist/docs/releases.md +0 -539
  219. package/dist/docs/sidebar.json +0 -140
  220. package/dist/docs/tools/file-system.md +0 -217
  221. package/dist/docs/tools/index.md +0 -98
  222. package/dist/docs/tools/mcp-server.md +0 -1068
  223. package/dist/docs/tools/memory.md +0 -54
  224. package/dist/docs/tools/shell.md +0 -260
  225. package/dist/docs/tools/todos.md +0 -57
  226. package/dist/docs/tools/web-fetch.md +0 -59
  227. package/dist/docs/tools/web-search.md +0 -42
  228. package/dist/docs/tos-privacy.md +0 -96
  229. package/dist/docs/troubleshooting.md +0 -173
  230. package/dist/src/agents/a2a-client-manager.test.d.ts +0 -6
  231. package/dist/src/agents/a2a-client-manager.test.js +0 -220
  232. package/dist/src/agents/a2a-client-manager.test.js.map +0 -1
  233. package/dist/src/agents/a2aUtils.test.d.ts +0 -6
  234. package/dist/src/agents/a2aUtils.test.js +0 -147
  235. package/dist/src/agents/a2aUtils.test.js.map +0 -1
  236. package/dist/src/agents/acknowledgedAgents.test.d.ts +0 -6
  237. package/dist/src/agents/acknowledgedAgents.test.js +0 -70
  238. package/dist/src/agents/acknowledgedAgents.test.js.map +0 -1
  239. package/dist/src/agents/agent-scheduler.test.d.ts +0 -6
  240. package/dist/src/agents/agent-scheduler.test.js +0 -56
  241. package/dist/src/agents/agent-scheduler.test.js.map +0 -1
  242. package/dist/src/agents/agentLoader.test.d.ts +0 -6
  243. package/dist/src/agents/agentLoader.test.js +0 -304
  244. package/dist/src/agents/agentLoader.test.js.map +0 -1
  245. package/dist/src/agents/cli-help-agent.test.d.ts +0 -6
  246. package/dist/src/agents/cli-help-agent.test.js +0 -67
  247. package/dist/src/agents/cli-help-agent.test.js.map +0 -1
  248. package/dist/src/agents/codebase-investigator.test.d.ts +0 -6
  249. package/dist/src/agents/codebase-investigator.test.js +0 -42
  250. package/dist/src/agents/codebase-investigator.test.js.map +0 -1
  251. package/dist/src/agents/generalist-agent.test.d.ts +0 -6
  252. package/dist/src/agents/generalist-agent.test.js +0 -31
  253. package/dist/src/agents/generalist-agent.test.js.map +0 -1
  254. package/dist/src/agents/local-executor.test.d.ts +0 -6
  255. package/dist/src/agents/local-executor.test.js +0 -1577
  256. package/dist/src/agents/local-executor.test.js.map +0 -1
  257. package/dist/src/agents/local-invocation.test.d.ts +0 -6
  258. package/dist/src/agents/local-invocation.test.js +0 -228
  259. package/dist/src/agents/local-invocation.test.js.map +0 -1
  260. package/dist/src/agents/registry.test.d.ts +0 -6
  261. package/dist/src/agents/registry.test.js +0 -773
  262. package/dist/src/agents/registry.test.js.map +0 -1
  263. package/dist/src/agents/registry_acknowledgement.test.d.ts +0 -6
  264. package/dist/src/agents/registry_acknowledgement.test.js +0 -130
  265. package/dist/src/agents/registry_acknowledgement.test.js.map +0 -1
  266. package/dist/src/agents/remote-invocation.test.d.ts +0 -6
  267. package/dist/src/agents/remote-invocation.test.js +0 -213
  268. package/dist/src/agents/remote-invocation.test.js.map +0 -1
  269. package/dist/src/agents/subagent-tool-wrapper.test.d.ts +0 -6
  270. package/dist/src/agents/subagent-tool-wrapper.test.js +0 -109
  271. package/dist/src/agents/subagent-tool-wrapper.test.js.map +0 -1
  272. package/dist/src/agents/utils.test.d.ts +0 -6
  273. package/dist/src/agents/utils.test.js +0 -87
  274. package/dist/src/agents/utils.test.js.map +0 -1
  275. package/dist/src/availability/fallbackIntegration.test.d.ts +0 -6
  276. package/dist/src/availability/fallbackIntegration.test.js +0 -58
  277. package/dist/src/availability/fallbackIntegration.test.js.map +0 -1
  278. package/dist/src/availability/modelAvailabilityService.test.d.ts +0 -6
  279. package/dist/src/availability/modelAvailabilityService.test.js +0 -140
  280. package/dist/src/availability/modelAvailabilityService.test.js.map +0 -1
  281. package/dist/src/availability/policyCatalog.test.d.ts +0 -6
  282. package/dist/src/availability/policyCatalog.test.js +0 -70
  283. package/dist/src/availability/policyCatalog.test.js.map +0 -1
  284. package/dist/src/availability/policyHelpers.test.d.ts +0 -6
  285. package/dist/src/availability/policyHelpers.test.js +0 -220
  286. package/dist/src/availability/policyHelpers.test.js.map +0 -1
  287. package/dist/src/code_assist/admin/admin_controls.test.d.ts +0 -6
  288. package/dist/src/code_assist/admin/admin_controls.test.js +0 -200
  289. package/dist/src/code_assist/admin/admin_controls.test.js.map +0 -1
  290. package/dist/src/code_assist/codeAssist.test.d.ts +0 -6
  291. package/dist/src/code_assist/codeAssist.test.js +0 -102
  292. package/dist/src/code_assist/codeAssist.test.js.map +0 -1
  293. package/dist/src/code_assist/converter.test.d.ts +0 -6
  294. package/dist/src/code_assist/converter.test.js +0 -391
  295. package/dist/src/code_assist/converter.test.js.map +0 -1
  296. package/dist/src/code_assist/experiments/client_metadata.test.d.ts +0 -6
  297. package/dist/src/code_assist/experiments/client_metadata.test.js +0 -96
  298. package/dist/src/code_assist/experiments/client_metadata.test.js.map +0 -1
  299. package/dist/src/code_assist/experiments/experiments.test.d.ts +0 -6
  300. package/dist/src/code_assist/experiments/experiments.test.js +0 -93
  301. package/dist/src/code_assist/experiments/experiments.test.js.map +0 -1
  302. package/dist/src/code_assist/experiments/experiments_local.test.d.ts +0 -6
  303. package/dist/src/code_assist/experiments/experiments_local.test.js +0 -115
  304. package/dist/src/code_assist/experiments/experiments_local.test.js.map +0 -1
  305. package/dist/src/code_assist/oauth-credential-storage.test.d.ts +0 -6
  306. package/dist/src/code_assist/oauth-credential-storage.test.js +0 -198
  307. package/dist/src/code_assist/oauth-credential-storage.test.js.map +0 -1
  308. package/dist/src/code_assist/oauth2.test.d.ts +0 -6
  309. package/dist/src/code_assist/oauth2.test.js +0 -1065
  310. package/dist/src/code_assist/oauth2.test.js.map +0 -1
  311. package/dist/src/code_assist/server.test.d.ts +0 -6
  312. package/dist/src/code_assist/server.test.js +0 -453
  313. package/dist/src/code_assist/server.test.js.map +0 -1
  314. package/dist/src/code_assist/setup.test.d.ts +0 -6
  315. package/dist/src/code_assist/setup.test.js +0 -517
  316. package/dist/src/code_assist/setup.test.js.map +0 -1
  317. package/dist/src/code_assist/telemetry.test.d.ts +0 -6
  318. package/dist/src/code_assist/telemetry.test.js +0 -301
  319. package/dist/src/code_assist/telemetry.test.js.map +0 -1
  320. package/dist/src/commands/extensions.test.d.ts +0 -6
  321. package/dist/src/commands/extensions.test.js +0 -19
  322. package/dist/src/commands/extensions.test.js.map +0 -1
  323. package/dist/src/commands/init.test.d.ts +0 -6
  324. package/dist/src/commands/init.test.js +0 -25
  325. package/dist/src/commands/init.test.js.map +0 -1
  326. package/dist/src/commands/memory.test.d.ts +0 -6
  327. package/dist/src/commands/memory.test.js +0 -182
  328. package/dist/src/commands/memory.test.js.map +0 -1
  329. package/dist/src/commands/restore.test.d.ts +0 -6
  330. package/dist/src/commands/restore.test.js +0 -137
  331. package/dist/src/commands/restore.test.js.map +0 -1
  332. package/dist/src/config/config.test.d.ts +0 -6
  333. package/dist/src/config/config.test.js +0 -1811
  334. package/dist/src/config/config.test.js.map +0 -1
  335. package/dist/src/config/flashFallback.test.d.ts +0 -6
  336. package/dist/src/config/flashFallback.test.js +0 -63
  337. package/dist/src/config/flashFallback.test.js.map +0 -1
  338. package/dist/src/config/models.test.d.ts +0 -6
  339. package/dist/src/config/models.test.js +0 -146
  340. package/dist/src/config/models.test.js.map +0 -1
  341. package/dist/src/config/storage.test.d.ts +0 -6
  342. package/dist/src/config/storage.test.js +0 -115
  343. package/dist/src/config/storage.test.js.map +0 -1
  344. package/dist/src/confirmation-bus/message-bus.test.d.ts +0 -6
  345. package/dist/src/confirmation-bus/message-bus.test.js +0 -170
  346. package/dist/src/confirmation-bus/message-bus.test.js.map +0 -1
  347. package/dist/src/core/apiKeyCredentialStorage.test.d.ts +0 -6
  348. package/dist/src/core/apiKeyCredentialStorage.test.js +0 -71
  349. package/dist/src/core/apiKeyCredentialStorage.test.js.map +0 -1
  350. package/dist/src/core/baseLlmClient.test.d.ts +0 -6
  351. package/dist/src/core/baseLlmClient.test.js +0 -569
  352. package/dist/src/core/baseLlmClient.test.js.map +0 -1
  353. package/dist/src/core/baseLlmClient_new_types.test.d.ts +0 -1
  354. package/dist/src/core/baseLlmClient_new_types.test.js +0 -387
  355. package/dist/src/core/baseLlmClient_new_types.test.js.map +0 -1
  356. package/dist/src/core/client.test.d.ts +0 -6
  357. package/dist/src/core/client.test.js +0 -2654
  358. package/dist/src/core/client.test.js.map +0 -1
  359. package/dist/src/core/contentGenerator.multiProvider.test.d.ts +0 -6
  360. package/dist/src/core/contentGenerator.multiProvider.test.js +0 -314
  361. package/dist/src/core/contentGenerator.multiProvider.test.js.map +0 -1
  362. package/dist/src/core/contentGenerator.test.d.ts +0 -6
  363. package/dist/src/core/contentGenerator.test.js +0 -299
  364. package/dist/src/core/contentGenerator.test.js.map +0 -1
  365. package/dist/src/core/contentGenerator_new_types.test.d.ts +0 -6
  366. package/dist/src/core/contentGenerator_new_types.test.js +0 -292
  367. package/dist/src/core/contentGenerator_new_types.test.js.map +0 -1
  368. package/dist/src/core/coreToolHookTriggers.test.d.ts +0 -6
  369. package/dist/src/core/coreToolHookTriggers.test.js +0 -159
  370. package/dist/src/core/coreToolHookTriggers.test.js.map +0 -1
  371. package/dist/src/core/coreToolScheduler.test.d.ts +0 -6
  372. package/dist/src/core/coreToolScheduler.test.js +0 -1684
  373. package/dist/src/core/coreToolScheduler.test.js.map +0 -1
  374. package/dist/src/core/fakeContentGenerator.test.d.ts +0 -6
  375. package/dist/src/core/fakeContentGenerator.test.js +0 -127
  376. package/dist/src/core/fakeContentGenerator.test.js.map +0 -1
  377. package/dist/src/core/geminiChat.test.d.ts +0 -6
  378. package/dist/src/core/geminiChat.test.js +0 -1773
  379. package/dist/src/core/geminiChat.test.js.map +0 -1
  380. package/dist/src/core/geminiChat_network_retry.test.d.ts +0 -6
  381. package/dist/src/core/geminiChat_network_retry.test.js +0 -201
  382. package/dist/src/core/geminiChat_network_retry.test.js.map +0 -1
  383. package/dist/src/core/logger.test.d.ts +0 -6
  384. package/dist/src/core/logger.test.js +0 -550
  385. package/dist/src/core/logger.test.js.map +0 -1
  386. package/dist/src/core/loggingContentGenerator.test.d.ts +0 -6
  387. package/dist/src/core/loggingContentGenerator.test.js +0 -221
  388. package/dist/src/core/loggingContentGenerator.test.js.map +0 -1
  389. package/dist/src/core/prompts-substitution.test.d.ts +0 -6
  390. package/dist/src/core/prompts-substitution.test.js +0 -101
  391. package/dist/src/core/prompts-substitution.test.js.map +0 -1
  392. package/dist/src/core/prompts.test.d.ts +0 -6
  393. package/dist/src/core/prompts.test.js +0 -391
  394. package/dist/src/core/prompts.test.js.map +0 -1
  395. package/dist/src/core/recordingContentGenerator.test.d.ts +0 -6
  396. package/dist/src/core/recordingContentGenerator.test.js +0 -101
  397. package/dist/src/core/recordingContentGenerator.test.js.map +0 -1
  398. package/dist/src/core/tokenLimits.test.d.ts +0 -6
  399. package/dist/src/core/tokenLimits.test.js +0 -30
  400. package/dist/src/core/tokenLimits.test.js.map +0 -1
  401. package/dist/src/core/turn.test.d.ts +0 -6
  402. package/dist/src/core/turn.test.js +0 -739
  403. package/dist/src/core/turn.test.js.map +0 -1
  404. package/dist/src/fallback/handler.test.d.ts +0 -6
  405. package/dist/src/fallback/handler.test.js +0 -242
  406. package/dist/src/fallback/handler.test.js.map +0 -1
  407. package/dist/src/hooks/hookAggregator.test.d.ts +0 -6
  408. package/dist/src/hooks/hookAggregator.test.js +0 -387
  409. package/dist/src/hooks/hookAggregator.test.js.map +0 -1
  410. package/dist/src/hooks/hookEventHandler.test.d.ts +0 -6
  411. package/dist/src/hooks/hookEventHandler.test.js +0 -603
  412. package/dist/src/hooks/hookEventHandler.test.js.map +0 -1
  413. package/dist/src/hooks/hookPlanner.test.d.ts +0 -6
  414. package/dist/src/hooks/hookPlanner.test.js +0 -315
  415. package/dist/src/hooks/hookPlanner.test.js.map +0 -1
  416. package/dist/src/hooks/hookRegistry.test.d.ts +0 -6
  417. package/dist/src/hooks/hookRegistry.test.js +0 -529
  418. package/dist/src/hooks/hookRegistry.test.js.map +0 -1
  419. package/dist/src/hooks/hookRunner.test.d.ts +0 -6
  420. package/dist/src/hooks/hookRunner.test.js +0 -606
  421. package/dist/src/hooks/hookRunner.test.js.map +0 -1
  422. package/dist/src/hooks/hookSystem.test.d.ts +0 -6
  423. package/dist/src/hooks/hookSystem.test.js +0 -330
  424. package/dist/src/hooks/hookSystem.test.js.map +0 -1
  425. package/dist/src/hooks/hookSystem_new_types.test.d.ts +0 -6
  426. package/dist/src/hooks/hookSystem_new_types.test.js +0 -243
  427. package/dist/src/hooks/hookSystem_new_types.test.js.map +0 -1
  428. package/dist/src/hooks/hookTranslator.test.d.ts +0 -6
  429. package/dist/src/hooks/hookTranslator.test.js +0 -192
  430. package/dist/src/hooks/hookTranslator.test.js.map +0 -1
  431. package/dist/src/hooks/trustedHooks.test.d.ts +0 -6
  432. package/dist/src/hooks/trustedHooks.test.js +0 -154
  433. package/dist/src/hooks/trustedHooks.test.js.map +0 -1
  434. package/dist/src/hooks/types.test.d.ts +0 -6
  435. package/dist/src/hooks/types.test.js +0 -278
  436. package/dist/src/hooks/types.test.js.map +0 -1
  437. package/dist/src/ide/detect-ide.test.d.ts +0 -6
  438. package/dist/src/ide/detect-ide.test.js +0 -195
  439. package/dist/src/ide/detect-ide.test.js.map +0 -1
  440. package/dist/src/ide/ide-client.test.d.ts +0 -6
  441. package/dist/src/ide/ide-client.test.js +0 -753
  442. package/dist/src/ide/ide-client.test.js.map +0 -1
  443. package/dist/src/ide/ide-installer.test.d.ts +0 -6
  444. package/dist/src/ide/ide-installer.test.js +0 -193
  445. package/dist/src/ide/ide-installer.test.js.map +0 -1
  446. package/dist/src/ide/ideContext.test.d.ts +0 -6
  447. package/dist/src/ide/ideContext.test.js +0 -393
  448. package/dist/src/ide/ideContext.test.js.map +0 -1
  449. package/dist/src/ide/process-utils.test.d.ts +0 -6
  450. package/dist/src/ide/process-utils.test.js +0 -151
  451. package/dist/src/ide/process-utils.test.js.map +0 -1
  452. package/dist/src/index.test.d.ts +0 -6
  453. package/dist/src/index.test.js +0 -53
  454. package/dist/src/index.test.js.map +0 -1
  455. package/dist/src/mcp/google-auth-provider.test.d.ts +0 -6
  456. package/dist/src/mcp/google-auth-provider.test.js +0 -167
  457. package/dist/src/mcp/google-auth-provider.test.js.map +0 -1
  458. package/dist/src/mcp/oauth-provider.test.d.ts +0 -6
  459. package/dist/src/mcp/oauth-provider.test.js +0 -1355
  460. package/dist/src/mcp/oauth-provider.test.js.map +0 -1
  461. package/dist/src/mcp/oauth-token-storage.test.d.ts +0 -6
  462. package/dist/src/mcp/oauth-token-storage.test.js +0 -305
  463. package/dist/src/mcp/oauth-token-storage.test.js.map +0 -1
  464. package/dist/src/mcp/oauth-utils.test.d.ts +0 -6
  465. package/dist/src/mcp/oauth-utils.test.js +0 -289
  466. package/dist/src/mcp/oauth-utils.test.js.map +0 -1
  467. package/dist/src/mcp/sa-impersonation-provider.test.d.ts +0 -6
  468. package/dist/src/mcp/sa-impersonation-provider.test.js +0 -117
  469. package/dist/src/mcp/sa-impersonation-provider.test.js.map +0 -1
  470. package/dist/src/mcp/token-storage/base-token-storage.test.d.ts +0 -6
  471. package/dist/src/mcp/token-storage/base-token-storage.test.js +0 -151
  472. package/dist/src/mcp/token-storage/base-token-storage.test.js.map +0 -1
  473. package/dist/src/mcp/token-storage/file-token-storage.test.d.ts +0 -6
  474. package/dist/src/mcp/token-storage/file-token-storage.test.js +0 -238
  475. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +0 -1
  476. package/dist/src/mcp/token-storage/hybrid-token-storage.test.d.ts +0 -6
  477. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +0 -193
  478. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +0 -1
  479. package/dist/src/mcp/token-storage/keychain-token-storage.test.d.ts +0 -6
  480. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +0 -305
  481. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +0 -1
  482. package/dist/src/output/json-formatter.test.d.ts +0 -6
  483. package/dist/src/output/json-formatter.test.js +0 -294
  484. package/dist/src/output/json-formatter.test.js.map +0 -1
  485. package/dist/src/output/stream-json-formatter.test.d.ts +0 -6
  486. package/dist/src/output/stream-json-formatter.test.js +0 -477
  487. package/dist/src/output/stream-json-formatter.test.js.map +0 -1
  488. package/dist/src/policy/config.test.d.ts +0 -6
  489. package/dist/src/policy/config.test.js +0 -598
  490. package/dist/src/policy/config.test.js.map +0 -1
  491. package/dist/src/policy/persistence.test.d.ts +0 -6
  492. package/dist/src/policy/persistence.test.js +0 -154
  493. package/dist/src/policy/persistence.test.js.map +0 -1
  494. package/dist/src/policy/policy-engine.test.d.ts +0 -6
  495. package/dist/src/policy/policy-engine.test.js +0 -1299
  496. package/dist/src/policy/policy-engine.test.js.map +0 -1
  497. package/dist/src/policy/policy-updater.test.d.ts +0 -6
  498. package/dist/src/policy/policy-updater.test.js +0 -116
  499. package/dist/src/policy/policy-updater.test.js.map +0 -1
  500. package/dist/src/policy/shell-safety.test.d.ts +0 -6
  501. package/dist/src/policy/shell-safety.test.js +0 -438
  502. package/dist/src/policy/shell-safety.test.js.map +0 -1
  503. package/dist/src/policy/toml-loader.test.d.ts +0 -6
  504. package/dist/src/policy/toml-loader.test.js +0 -409
  505. package/dist/src/policy/toml-loader.test.js.map +0 -1
  506. package/dist/src/policy/utils.test.d.ts +0 -6
  507. package/dist/src/policy/utils.test.js +0 -92
  508. package/dist/src/policy/utils.test.js.map +0 -1
  509. package/dist/src/prompts/mcp-prompts.test.d.ts +0 -6
  510. package/dist/src/prompts/mcp-prompts.test.js +0 -39
  511. package/dist/src/prompts/mcp-prompts.test.js.map +0 -1
  512. package/dist/src/prompts/prompt-registry.test.d.ts +0 -6
  513. package/dist/src/prompts/prompt-registry.test.js +0 -96
  514. package/dist/src/prompts/prompt-registry.test.js.map +0 -1
  515. package/dist/src/providers/__tests__/bundleSize.test.d.ts +0 -6
  516. package/dist/src/providers/__tests__/bundleSize.test.js +0 -75
  517. package/dist/src/providers/__tests__/bundleSize.test.js.map +0 -1
  518. package/dist/src/providers/__tests__/errorHandling.integration.test.d.ts +0 -6
  519. package/dist/src/providers/__tests__/errorHandling.integration.test.js +0 -339
  520. package/dist/src/providers/__tests__/errorHandling.integration.test.js.map +0 -1
  521. package/dist/src/providers/__tests__/multiProvider.integration.test.d.ts +0 -6
  522. package/dist/src/providers/__tests__/multiProvider.integration.test.js +0 -419
  523. package/dist/src/providers/__tests__/multiProvider.integration.test.js.map +0 -1
  524. package/dist/src/providers/__tests__/performance.test.d.ts +0 -6
  525. package/dist/src/providers/__tests__/performance.test.js +0 -270
  526. package/dist/src/providers/__tests__/performance.test.js.map +0 -1
  527. package/dist/src/providers/__tests__/providerConfigIntegration.test.d.ts +0 -6
  528. package/dist/src/providers/__tests__/providerConfigIntegration.test.js +0 -245
  529. package/dist/src/providers/__tests__/providerConfigIntegration.test.js.map +0 -1
  530. package/dist/src/providers/baseAdapter.test.d.ts +0 -1
  531. package/dist/src/providers/baseAdapter.test.js +0 -142
  532. package/dist/src/providers/baseAdapter.test.js.map +0 -1
  533. package/dist/src/providers/claude/adapter.test.d.ts +0 -6
  534. package/dist/src/providers/claude/adapter.test.js +0 -628
  535. package/dist/src/providers/claude/adapter.test.js.map +0 -1
  536. package/dist/src/providers/claude/bootstrap.test.d.ts +0 -6
  537. package/dist/src/providers/claude/bootstrap.test.js +0 -74
  538. package/dist/src/providers/claude/bootstrap.test.js.map +0 -1
  539. package/dist/src/providers/claude/converter.test.d.ts +0 -6
  540. package/dist/src/providers/claude/converter.test.js +0 -1002
  541. package/dist/src/providers/claude/converter.test.js.map +0 -1
  542. package/dist/src/providers/claude/exports.test.d.ts +0 -6
  543. package/dist/src/providers/claude/exports.test.js +0 -40
  544. package/dist/src/providers/claude/exports.test.js.map +0 -1
  545. package/dist/src/providers/configAdapter.test.d.ts +0 -1
  546. package/dist/src/providers/configAdapter.test.js +0 -150
  547. package/dist/src/providers/configAdapter.test.js.map +0 -1
  548. package/dist/src/providers/contentResolver.test.d.ts +0 -1
  549. package/dist/src/providers/contentResolver.test.js +0 -89
  550. package/dist/src/providers/contentResolver.test.js.map +0 -1
  551. package/dist/src/providers/factory.test.d.ts +0 -1
  552. package/dist/src/providers/factory.test.js +0 -151
  553. package/dist/src/providers/factory.test.js.map +0 -1
  554. package/dist/src/providers/gemini/adapterBridge.test.d.ts +0 -6
  555. package/dist/src/providers/gemini/adapterBridge.test.js +0 -164
  556. package/dist/src/providers/gemini/adapterBridge.test.js.map +0 -1
  557. package/dist/src/providers/gemini/bootstrap.test.d.ts +0 -6
  558. package/dist/src/providers/gemini/bootstrap.test.js +0 -72
  559. package/dist/src/providers/gemini/bootstrap.test.js.map +0 -1
  560. package/dist/src/providers/gemini/configConverter.test.d.ts +0 -6
  561. package/dist/src/providers/gemini/configConverter.test.js +0 -218
  562. package/dist/src/providers/gemini/configConverter.test.js.map +0 -1
  563. package/dist/src/providers/gemini/errorClassifier.test.d.ts +0 -6
  564. package/dist/src/providers/gemini/errorClassifier.test.js +0 -83
  565. package/dist/src/providers/gemini/errorClassifier.test.js.map +0 -1
  566. package/dist/src/providers/gemini/eventMapper.test.d.ts +0 -6
  567. package/dist/src/providers/gemini/eventMapper.test.js +0 -502
  568. package/dist/src/providers/gemini/eventMapper.test.js.map +0 -1
  569. package/dist/src/providers/gemini/exports.test.d.ts +0 -6
  570. package/dist/src/providers/gemini/exports.test.js +0 -90
  571. package/dist/src/providers/gemini/exports.test.js.map +0 -1
  572. package/dist/src/providers/gemini/featureFlag.test.d.ts +0 -6
  573. package/dist/src/providers/gemini/featureFlag.test.js +0 -139
  574. package/dist/src/providers/gemini/featureFlag.test.js.map +0 -1
  575. package/dist/src/providers/gemini/geminiAdapter.test.d.ts +0 -6
  576. package/dist/src/providers/gemini/geminiAdapter.test.js +0 -279
  577. package/dist/src/providers/gemini/geminiAdapter.test.js.map +0 -1
  578. package/dist/src/providers/gemini/geminiConverter.test.d.ts +0 -6
  579. package/dist/src/providers/gemini/geminiConverter.test.js +0 -474
  580. package/dist/src/providers/gemini/geminiConverter.test.js.map +0 -1
  581. package/dist/src/providers/gemini/geminiParity.test.d.ts +0 -6
  582. package/dist/src/providers/gemini/geminiParity.test.js +0 -754
  583. package/dist/src/providers/gemini/geminiParity.test.js.map +0 -1
  584. package/dist/src/providers/gemini/geminiStream.test.d.ts +0 -6
  585. package/dist/src/providers/gemini/geminiStream.test.js +0 -391
  586. package/dist/src/providers/gemini/geminiStream.test.js.map +0 -1
  587. package/dist/src/providers/gemini/historyBuilder.test.d.ts +0 -6
  588. package/dist/src/providers/gemini/historyBuilder.test.js +0 -207
  589. package/dist/src/providers/gemini/historyBuilder.test.js.map +0 -1
  590. package/dist/src/providers/gemini/requestBuilder.test.d.ts +0 -6
  591. package/dist/src/providers/gemini/requestBuilder.test.js +0 -358
  592. package/dist/src/providers/gemini/requestBuilder.test.js.map +0 -1
  593. package/dist/src/providers/gemini/streamConverter.test.d.ts +0 -6
  594. package/dist/src/providers/gemini/streamConverter.test.js +0 -131
  595. package/dist/src/providers/gemini/streamConverter.test.js.map +0 -1
  596. package/dist/src/providers/modelSpec.test.d.ts +0 -1
  597. package/dist/src/providers/modelSpec.test.js +0 -119
  598. package/dist/src/providers/modelSpec.test.js.map +0 -1
  599. package/dist/src/providers/openai/adapter.test.d.ts +0 -6
  600. package/dist/src/providers/openai/adapter.test.js +0 -274
  601. package/dist/src/providers/openai/adapter.test.js.map +0 -1
  602. package/dist/src/providers/openai/bootstrap.test.d.ts +0 -6
  603. package/dist/src/providers/openai/bootstrap.test.js +0 -76
  604. package/dist/src/providers/openai/bootstrap.test.js.map +0 -1
  605. package/dist/src/providers/openai/converter.test.d.ts +0 -6
  606. package/dist/src/providers/openai/converter.test.js +0 -1133
  607. package/dist/src/providers/openai/converter.test.js.map +0 -1
  608. package/dist/src/providers/openai-compatible/__tests__/compatibility.test.d.ts +0 -6
  609. package/dist/src/providers/openai-compatible/__tests__/compatibility.test.js +0 -356
  610. package/dist/src/providers/openai-compatible/__tests__/compatibility.test.js.map +0 -1
  611. package/dist/src/providers/openai-compatible/adapter.test.d.ts +0 -6
  612. package/dist/src/providers/openai-compatible/adapter.test.js +0 -240
  613. package/dist/src/providers/openai-compatible/adapter.test.js.map +0 -1
  614. package/dist/src/providers/openai-compatible/bootstrap.test.d.ts +0 -6
  615. package/dist/src/providers/openai-compatible/bootstrap.test.js +0 -145
  616. package/dist/src/providers/openai-compatible/bootstrap.test.js.map +0 -1
  617. package/dist/src/providers/openai-compatible/promptBuilder.test.d.ts +0 -6
  618. package/dist/src/providers/openai-compatible/promptBuilder.test.js +0 -154
  619. package/dist/src/providers/openai-compatible/promptBuilder.test.js.map +0 -1
  620. package/dist/src/providers/providerConfig.test.d.ts +0 -1
  621. package/dist/src/providers/providerConfig.test.js +0 -145
  622. package/dist/src/providers/providerConfig.test.js.map +0 -1
  623. package/dist/src/providers/providerConfigIntegration.test.d.ts +0 -6
  624. package/dist/src/providers/providerConfigIntegration.test.js +0 -187
  625. package/dist/src/providers/providerConfigIntegration.test.js.map +0 -1
  626. package/dist/src/providers/providerSelector.test.d.ts +0 -1
  627. package/dist/src/providers/providerSelector.test.js +0 -199
  628. package/dist/src/providers/providerSelector.test.js.map +0 -1
  629. package/dist/src/providers/providerTypes.test.d.ts +0 -1
  630. package/dist/src/providers/providerTypes.test.js +0 -95
  631. package/dist/src/providers/providerTypes.test.js.map +0 -1
  632. package/dist/src/providers/registry.test.d.ts +0 -1
  633. package/dist/src/providers/registry.test.js +0 -207
  634. package/dist/src/providers/registry.test.js.map +0 -1
  635. package/dist/src/providers/streamAssembler.test.d.ts +0 -1
  636. package/dist/src/providers/streamAssembler.test.js +0 -247
  637. package/dist/src/providers/streamAssembler.test.js.map +0 -1
  638. package/dist/src/providers/telemetryBridge.test.d.ts +0 -6
  639. package/dist/src/providers/telemetryBridge.test.js +0 -235
  640. package/dist/src/providers/telemetryBridge.test.js.map +0 -1
  641. package/dist/src/providers/types.test.d.ts +0 -6
  642. package/dist/src/providers/types.test.js +0 -253
  643. package/dist/src/providers/types.test.js.map +0 -1
  644. package/dist/src/resources/resource-registry.test.d.ts +0 -6
  645. package/dist/src/resources/resource-registry.test.js +0 -54
  646. package/dist/src/resources/resource-registry.test.js.map +0 -1
  647. package/dist/src/routing/modelRouterService.test.d.ts +0 -6
  648. package/dist/src/routing/modelRouterService.test.js +0 -106
  649. package/dist/src/routing/modelRouterService.test.js.map +0 -1
  650. package/dist/src/routing/strategies/classifierStrategy.test.d.ts +0 -6
  651. package/dist/src/routing/strategies/classifierStrategy.test.js +0 -249
  652. package/dist/src/routing/strategies/classifierStrategy.test.js.map +0 -1
  653. package/dist/src/routing/strategies/compositeStrategy.test.d.ts +0 -6
  654. package/dist/src/routing/strategies/compositeStrategy.test.js +0 -124
  655. package/dist/src/routing/strategies/compositeStrategy.test.js.map +0 -1
  656. package/dist/src/routing/strategies/defaultStrategy.test.d.ts +0 -6
  657. package/dist/src/routing/strategies/defaultStrategy.test.js +0 -102
  658. package/dist/src/routing/strategies/defaultStrategy.test.js.map +0 -1
  659. package/dist/src/routing/strategies/fallbackStrategy.test.d.ts +0 -6
  660. package/dist/src/routing/strategies/fallbackStrategy.test.js +0 -96
  661. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +0 -1
  662. package/dist/src/routing/strategies/numericalClassifierStrategy.test.d.ts +0 -6
  663. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +0 -367
  664. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +0 -1
  665. package/dist/src/routing/strategies/overrideStrategy.test.d.ts +0 -6
  666. package/dist/src/routing/strategies/overrideStrategy.test.js +0 -59
  667. package/dist/src/routing/strategies/overrideStrategy.test.js.map +0 -1
  668. package/dist/src/safety/built-in.test.d.ts +0 -6
  669. package/dist/src/safety/built-in.test.js +0 -199
  670. package/dist/src/safety/built-in.test.js.map +0 -1
  671. package/dist/src/safety/checker-runner.test.d.ts +0 -6
  672. package/dist/src/safety/checker-runner.test.js +0 -238
  673. package/dist/src/safety/checker-runner.test.js.map +0 -1
  674. package/dist/src/safety/context-builder.test.d.ts +0 -6
  675. package/dist/src/safety/context-builder.test.js +0 -49
  676. package/dist/src/safety/context-builder.test.js.map +0 -1
  677. package/dist/src/safety/registry.test.d.ts +0 -6
  678. package/dist/src/safety/registry.test.js +0 -31
  679. package/dist/src/safety/registry.test.js.map +0 -1
  680. package/dist/src/scheduler/confirmation.test.d.ts +0 -6
  681. package/dist/src/scheduler/confirmation.test.js +0 -325
  682. package/dist/src/scheduler/confirmation.test.js.map +0 -1
  683. package/dist/src/scheduler/policy.test.d.ts +0 -6
  684. package/dist/src/scheduler/policy.test.js +0 -299
  685. package/dist/src/scheduler/policy.test.js.map +0 -1
  686. package/dist/src/scheduler/scheduler.test.d.ts +0 -6
  687. package/dist/src/scheduler/scheduler.test.js +0 -822
  688. package/dist/src/scheduler/scheduler.test.js.map +0 -1
  689. package/dist/src/scheduler/state-manager.test.d.ts +0 -6
  690. package/dist/src/scheduler/state-manager.test.js +0 -429
  691. package/dist/src/scheduler/state-manager.test.js.map +0 -1
  692. package/dist/src/scheduler/tool-executor.test.d.ts +0 -6
  693. package/dist/src/scheduler/tool-executor.test.js +0 -232
  694. package/dist/src/scheduler/tool-executor.test.js.map +0 -1
  695. package/dist/src/scheduler/tool-modifier.test.d.ts +0 -6
  696. package/dist/src/scheduler/tool-modifier.test.js +0 -159
  697. package/dist/src/scheduler/tool-modifier.test.js.map +0 -1
  698. package/dist/src/services/chatCompressionService.test.d.ts +0 -6
  699. package/dist/src/services/chatCompressionService.test.js +0 -573
  700. package/dist/src/services/chatCompressionService.test.js.map +0 -1
  701. package/dist/src/services/chatRecordingService.test.d.ts +0 -6
  702. package/dist/src/services/chatRecordingService.test.js +0 -486
  703. package/dist/src/services/chatRecordingService.test.js.map +0 -1
  704. package/dist/src/services/contextManager.test.d.ts +0 -6
  705. package/dist/src/services/contextManager.test.js +0 -104
  706. package/dist/src/services/contextManager.test.js.map +0 -1
  707. package/dist/src/services/environmentSanitization.test.d.ts +0 -6
  708. package/dist/src/services/environmentSanitization.test.js +0 -284
  709. package/dist/src/services/environmentSanitization.test.js.map +0 -1
  710. package/dist/src/services/fileDiscoveryService.test.d.ts +0 -6
  711. package/dist/src/services/fileDiscoveryService.test.js +0 -223
  712. package/dist/src/services/fileDiscoveryService.test.js.map +0 -1
  713. package/dist/src/services/fileSystemService.test.d.ts +0 -6
  714. package/dist/src/services/fileSystemService.test.js +0 -41
  715. package/dist/src/services/fileSystemService.test.js.map +0 -1
  716. package/dist/src/services/gitService.test.d.ts +0 -6
  717. package/dist/src/services/gitService.test.js +0 -264
  718. package/dist/src/services/gitService.test.js.map +0 -1
  719. package/dist/src/services/loopDetectionService.test.d.ts +0 -6
  720. package/dist/src/services/loopDetectionService.test.js +0 -881
  721. package/dist/src/services/loopDetectionService.test.js.map +0 -1
  722. package/dist/src/services/modelConfig.golden.test.d.ts +0 -6
  723. package/dist/src/services/modelConfig.golden.test.js +0 -74
  724. package/dist/src/services/modelConfig.golden.test.js.map +0 -1
  725. package/dist/src/services/modelConfig.integration.test.d.ts +0 -6
  726. package/dist/src/services/modelConfig.integration.test.js +0 -247
  727. package/dist/src/services/modelConfig.integration.test.js.map +0 -1
  728. package/dist/src/services/modelConfigBridge.test.d.ts +0 -6
  729. package/dist/src/services/modelConfigBridge.test.js +0 -410
  730. package/dist/src/services/modelConfigBridge.test.js.map +0 -1
  731. package/dist/src/services/modelConfigService.test.d.ts +0 -6
  732. package/dist/src/services/modelConfigService.test.js +0 -868
  733. package/dist/src/services/modelConfigService.test.js.map +0 -1
  734. package/dist/src/services/sessionSummaryService.test.d.ts +0 -6
  735. package/dist/src/services/sessionSummaryService.test.js +0 -785
  736. package/dist/src/services/sessionSummaryService.test.js.map +0 -1
  737. package/dist/src/services/sessionSummaryUtils.test.d.ts +0 -6
  738. package/dist/src/services/sessionSummaryUtils.test.js +0 -160
  739. package/dist/src/services/sessionSummaryUtils.test.js.map +0 -1
  740. package/dist/src/services/shellExecutionService.test.d.ts +0 -6
  741. package/dist/src/services/shellExecutionService.test.js +0 -1080
  742. package/dist/src/services/shellExecutionService.test.js.map +0 -1
  743. package/dist/src/skills/skillLoader.test.d.ts +0 -6
  744. package/dist/src/skills/skillLoader.test.js +0 -185
  745. package/dist/src/skills/skillLoader.test.js.map +0 -1
  746. package/dist/src/skills/skillManager.test.d.ts +0 -6
  747. package/dist/src/skills/skillManager.test.js +0 -297
  748. package/dist/src/skills/skillManager.test.js.map +0 -1
  749. package/dist/src/telemetry/activity-detector.test.d.ts +0 -6
  750. package/dist/src/telemetry/activity-detector.test.js +0 -136
  751. package/dist/src/telemetry/activity-detector.test.js.map +0 -1
  752. package/dist/src/telemetry/activity-monitor.test.d.ts +0 -6
  753. package/dist/src/telemetry/activity-monitor.test.js +0 -251
  754. package/dist/src/telemetry/activity-monitor.test.js.map +0 -1
  755. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +0 -19
  756. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +0 -964
  757. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +0 -1
  758. package/dist/src/telemetry/config.test.d.ts +0 -6
  759. package/dist/src/telemetry/config.test.js +0 -149
  760. package/dist/src/telemetry/config.test.js.map +0 -1
  761. package/dist/src/telemetry/gcp-exporters.test.d.ts +0 -6
  762. package/dist/src/telemetry/gcp-exporters.test.js +0 -318
  763. package/dist/src/telemetry/gcp-exporters.test.js.map +0 -1
  764. package/dist/src/telemetry/high-water-mark-tracker.test.d.ts +0 -6
  765. package/dist/src/telemetry/high-water-mark-tracker.test.js +0 -152
  766. package/dist/src/telemetry/high-water-mark-tracker.test.js.map +0 -1
  767. package/dist/src/telemetry/integration.test.circular.d.ts +0 -6
  768. package/dist/src/telemetry/integration.test.circular.js +0 -54
  769. package/dist/src/telemetry/integration.test.circular.js.map +0 -1
  770. package/dist/src/telemetry/loggers.test.circular.d.ts +0 -6
  771. package/dist/src/telemetry/loggers.test.circular.js +0 -107
  772. package/dist/src/telemetry/loggers.test.circular.js.map +0 -1
  773. package/dist/src/telemetry/loggers.test.d.ts +0 -6
  774. package/dist/src/telemetry/loggers.test.js +0 -1618
  775. package/dist/src/telemetry/loggers.test.js.map +0 -1
  776. package/dist/src/telemetry/memory-monitor.test.d.ts +0 -6
  777. package/dist/src/telemetry/memory-monitor.test.js +0 -472
  778. package/dist/src/telemetry/memory-monitor.test.js.map +0 -1
  779. package/dist/src/telemetry/metrics.test.d.ts +0 -6
  780. package/dist/src/telemetry/metrics.test.js +0 -1176
  781. package/dist/src/telemetry/metrics.test.js.map +0 -1
  782. package/dist/src/telemetry/rate-limiter.test.d.ts +0 -6
  783. package/dist/src/telemetry/rate-limiter.test.js +0 -207
  784. package/dist/src/telemetry/rate-limiter.test.js.map +0 -1
  785. package/dist/src/telemetry/sanitize.test.d.ts +0 -6
  786. package/dist/src/telemetry/sanitize.test.js +0 -279
  787. package/dist/src/telemetry/sanitize.test.js.map +0 -1
  788. package/dist/src/telemetry/sdk.test.d.ts +0 -6
  789. package/dist/src/telemetry/sdk.test.js +0 -360
  790. package/dist/src/telemetry/sdk.test.js.map +0 -1
  791. package/dist/src/telemetry/semantic.test.d.ts +0 -6
  792. package/dist/src/telemetry/semantic.test.js +0 -387
  793. package/dist/src/telemetry/semantic.test.js.map +0 -1
  794. package/dist/src/telemetry/semantic.truncation.test.d.ts +0 -1
  795. package/dist/src/telemetry/semantic.truncation.test.js +0 -92
  796. package/dist/src/telemetry/semantic.truncation.test.js.map +0 -1
  797. package/dist/src/telemetry/startupProfiler.test.d.ts +0 -6
  798. package/dist/src/telemetry/startupProfiler.test.js +0 -285
  799. package/dist/src/telemetry/startupProfiler.test.js.map +0 -1
  800. package/dist/src/telemetry/telemetry-utils.test.d.ts +0 -6
  801. package/dist/src/telemetry/telemetry-utils.test.js +0 -41
  802. package/dist/src/telemetry/telemetry-utils.test.js.map +0 -1
  803. package/dist/src/telemetry/telemetry.test.d.ts +0 -6
  804. package/dist/src/telemetry/telemetry.test.js +0 -57
  805. package/dist/src/telemetry/telemetry.test.js.map +0 -1
  806. package/dist/src/telemetry/uiTelemetry.test.d.ts +0 -6
  807. package/dist/src/telemetry/uiTelemetry.test.js +0 -584
  808. package/dist/src/telemetry/uiTelemetry.test.js.map +0 -1
  809. package/dist/src/tools/activate-skill.test.d.ts +0 -6
  810. package/dist/src/tools/activate-skill.test.js +0 -113
  811. package/dist/src/tools/activate-skill.test.js.map +0 -1
  812. package/dist/src/tools/ask-user.test.d.ts +0 -6
  813. package/dist/src/tools/ask-user.test.js +0 -187
  814. package/dist/src/tools/ask-user.test.js.map +0 -1
  815. package/dist/src/tools/base-tool-invocation.test.d.ts +0 -6
  816. package/dist/src/tools/base-tool-invocation.test.js +0 -85
  817. package/dist/src/tools/base-tool-invocation.test.js.map +0 -1
  818. package/dist/src/tools/confirmation-policy.test.d.ts +0 -6
  819. package/dist/src/tools/confirmation-policy.test.js +0 -143
  820. package/dist/src/tools/confirmation-policy.test.js.map +0 -1
  821. package/dist/src/tools/diffOptions.test.d.ts +0 -6
  822. package/dist/src/tools/diffOptions.test.js +0 -172
  823. package/dist/src/tools/diffOptions.test.js.map +0 -1
  824. package/dist/src/tools/edit.test.d.ts +0 -6
  825. package/dist/src/tools/edit.test.js +0 -729
  826. package/dist/src/tools/edit.test.js.map +0 -1
  827. package/dist/src/tools/get-internal-docs.test.d.ts +0 -6
  828. package/dist/src/tools/get-internal-docs.test.js +0 -57
  829. package/dist/src/tools/get-internal-docs.test.js.map +0 -1
  830. package/dist/src/tools/glob.test.d.ts +0 -6
  831. package/dist/src/tools/glob.test.js +0 -433
  832. package/dist/src/tools/glob.test.js.map +0 -1
  833. package/dist/src/tools/grep.test.d.ts +0 -6
  834. package/dist/src/tools/grep.test.js +0 -328
  835. package/dist/src/tools/grep.test.js.map +0 -1
  836. package/dist/src/tools/ls.test.d.ts +0 -6
  837. package/dist/src/tools/ls.test.js +0 -242
  838. package/dist/src/tools/ls.test.js.map +0 -1
  839. package/dist/src/tools/mcp-client-manager.test.d.ts +0 -6
  840. package/dist/src/tools/mcp-client-manager.test.js +0 -251
  841. package/dist/src/tools/mcp-client-manager.test.js.map +0 -1
  842. package/dist/src/tools/mcp-client.test.d.ts +0 -6
  843. package/dist/src/tools/mcp-client.test.js +0 -1346
  844. package/dist/src/tools/mcp-client.test.js.map +0 -1
  845. package/dist/src/tools/mcp-tool.test.d.ts +0 -6
  846. package/dist/src/tools/mcp-tool.test.js +0 -657
  847. package/dist/src/tools/mcp-tool.test.js.map +0 -1
  848. package/dist/src/tools/memoryTool.test.d.ts +0 -6
  849. package/dist/src/tools/memoryTool.test.js +0 -302
  850. package/dist/src/tools/memoryTool.test.js.map +0 -1
  851. package/dist/src/tools/message-bus-integration.test.d.ts +0 -6
  852. package/dist/src/tools/message-bus-integration.test.js +0 -169
  853. package/dist/src/tools/message-bus-integration.test.js.map +0 -1
  854. package/dist/src/tools/modifiable-tool.test.d.ts +0 -6
  855. package/dist/src/tools/modifiable-tool.test.js +0 -237
  856. package/dist/src/tools/modifiable-tool.test.js.map +0 -1
  857. package/dist/src/tools/read-file.test.d.ts +0 -6
  858. package/dist/src/tools/read-file.test.js +0 -376
  859. package/dist/src/tools/read-file.test.js.map +0 -1
  860. package/dist/src/tools/read-many-files.test.d.ts +0 -6
  861. package/dist/src/tools/read-many-files.test.js +0 -567
  862. package/dist/src/tools/read-many-files.test.js.map +0 -1
  863. package/dist/src/tools/ripGrep.test.d.ts +0 -6
  864. package/dist/src/tools/ripGrep.test.js +0 -1139
  865. package/dist/src/tools/ripGrep.test.js.map +0 -1
  866. package/dist/src/tools/shell.test.d.ts +0 -6
  867. package/dist/src/tools/shell.test.js +0 -526
  868. package/dist/src/tools/shell.test.js.map +0 -1
  869. package/dist/src/tools/tool-names.test.d.ts +0 -6
  870. package/dist/src/tools/tool-names.test.js +0 -43
  871. package/dist/src/tools/tool-names.test.js.map +0 -1
  872. package/dist/src/tools/tool-registry.test.d.ts +0 -6
  873. package/dist/src/tools/tool-registry.test.js +0 -461
  874. package/dist/src/tools/tool-registry.test.js.map +0 -1
  875. package/dist/src/tools/tools.test.d.ts +0 -6
  876. package/dist/src/tools/tools.test.js +0 -207
  877. package/dist/src/tools/tools.test.js.map +0 -1
  878. package/dist/src/tools/web-fetch.test.d.ts +0 -6
  879. package/dist/src/tools/web-fetch.test.js +0 -442
  880. package/dist/src/tools/web-fetch.test.js.map +0 -1
  881. package/dist/src/tools/web-search.test.d.ts +0 -6
  882. package/dist/src/tools/web-search.test.js +0 -214
  883. package/dist/src/tools/web-search.test.js.map +0 -1
  884. package/dist/src/tools/write-file.test.d.ts +0 -6
  885. package/dist/src/tools/write-file.test.js +0 -681
  886. package/dist/src/tools/write-file.test.js.map +0 -1
  887. package/dist/src/tools/write-todos.test.d.ts +0 -6
  888. package/dist/src/tools/write-todos.test.js +0 -90
  889. package/dist/src/tools/write-todos.test.js.map +0 -1
  890. package/dist/src/utils/apiConversionUtils.test.d.ts +0 -6
  891. package/dist/src/utils/apiConversionUtils.test.js +0 -150
  892. package/dist/src/utils/apiConversionUtils.test.js.map +0 -1
  893. package/dist/src/utils/bfsFileSearch.test.d.ts +0 -6
  894. package/dist/src/utils/bfsFileSearch.test.js +0 -227
  895. package/dist/src/utils/bfsFileSearch.test.js.map +0 -1
  896. package/dist/src/utils/channel.test.d.ts +0 -6
  897. package/dist/src/utils/channel.test.js +0 -170
  898. package/dist/src/utils/channel.test.js.map +0 -1
  899. package/dist/src/utils/checkpointUtils.test.d.ts +0 -6
  900. package/dist/src/utils/checkpointUtils.test.js +0 -229
  901. package/dist/src/utils/checkpointUtils.test.js.map +0 -1
  902. package/dist/src/utils/customHeaderUtils.test.d.ts +0 -6
  903. package/dist/src/utils/customHeaderUtils.test.js +0 -77
  904. package/dist/src/utils/customHeaderUtils.test.js.map +0 -1
  905. package/dist/src/utils/debugLogger.test.d.ts +0 -6
  906. package/dist/src/utils/debugLogger.test.js +0 -69
  907. package/dist/src/utils/debugLogger.test.js.map +0 -1
  908. package/dist/src/utils/delay.test.d.ts +0 -6
  909. package/dist/src/utils/delay.test.js +0 -88
  910. package/dist/src/utils/delay.test.js.map +0 -1
  911. package/dist/src/utils/editCorrector.test.d.ts +0 -6
  912. package/dist/src/utils/editCorrector.test.js +0 -533
  913. package/dist/src/utils/editCorrector.test.js.map +0 -1
  914. package/dist/src/utils/editor.test.d.ts +0 -6
  915. package/dist/src/utils/editor.test.js +0 -429
  916. package/dist/src/utils/editor.test.js.map +0 -1
  917. package/dist/src/utils/environmentContext.test.d.ts +0 -6
  918. package/dist/src/utils/environmentContext.test.js +0 -114
  919. package/dist/src/utils/environmentContext.test.js.map +0 -1
  920. package/dist/src/utils/errorParsing.test.d.ts +0 -6
  921. package/dist/src/utils/errorParsing.test.js +0 -84
  922. package/dist/src/utils/errorParsing.test.js.map +0 -1
  923. package/dist/src/utils/errorReporting.test.d.ts +0 -6
  924. package/dist/src/utils/errorReporting.test.js +0 -133
  925. package/dist/src/utils/errorReporting.test.js.map +0 -1
  926. package/dist/src/utils/errors.test.d.ts +0 -6
  927. package/dist/src/utils/errors.test.js +0 -155
  928. package/dist/src/utils/errors.test.js.map +0 -1
  929. package/dist/src/utils/events.test.d.ts +0 -6
  930. package/dist/src/utils/events.test.js +0 -237
  931. package/dist/src/utils/events.test.js.map +0 -1
  932. package/dist/src/utils/extensionLoader.test.d.ts +0 -6
  933. package/dist/src/utils/extensionLoader.test.js +0 -176
  934. package/dist/src/utils/extensionLoader.test.js.map +0 -1
  935. package/dist/src/utils/fileDiffUtils.test.d.ts +0 -6
  936. package/dist/src/utils/fileDiffUtils.test.js +0 -84
  937. package/dist/src/utils/fileDiffUtils.test.js.map +0 -1
  938. package/dist/src/utils/fileUtils.test.d.ts +0 -6
  939. package/dist/src/utils/fileUtils.test.js +0 -780
  940. package/dist/src/utils/fileUtils.test.js.map +0 -1
  941. package/dist/src/utils/filesearch/crawlCache.test.d.ts +0 -6
  942. package/dist/src/utils/filesearch/crawlCache.test.js +0 -103
  943. package/dist/src/utils/filesearch/crawlCache.test.js.map +0 -1
  944. package/dist/src/utils/filesearch/crawler.test.d.ts +0 -6
  945. package/dist/src/utils/filesearch/crawler.test.js +0 -495
  946. package/dist/src/utils/filesearch/crawler.test.js.map +0 -1
  947. package/dist/src/utils/filesearch/fileSearch.test.d.ts +0 -6
  948. package/dist/src/utils/filesearch/fileSearch.test.js +0 -663
  949. package/dist/src/utils/filesearch/fileSearch.test.js.map +0 -1
  950. package/dist/src/utils/filesearch/ignore.test.d.ts +0 -6
  951. package/dist/src/utils/filesearch/ignore.test.js +0 -144
  952. package/dist/src/utils/filesearch/ignore.test.js.map +0 -1
  953. package/dist/src/utils/filesearch/result-cache.test.d.ts +0 -6
  954. package/dist/src/utils/filesearch/result-cache.test.js +0 -46
  955. package/dist/src/utils/filesearch/result-cache.test.js.map +0 -1
  956. package/dist/src/utils/flashFallback.test.d.ts +0 -6
  957. package/dist/src/utils/flashFallback.test.js +0 -103
  958. package/dist/src/utils/flashFallback.test.js.map +0 -1
  959. package/dist/src/utils/formatters.test.d.ts +0 -6
  960. package/dist/src/utils/formatters.test.js +0 -26
  961. package/dist/src/utils/formatters.test.js.map +0 -1
  962. package/dist/src/utils/geminiIgnoreParser.test.d.ts +0 -6
  963. package/dist/src/utils/geminiIgnoreParser.test.js +0 -98
  964. package/dist/src/utils/geminiIgnoreParser.test.js.map +0 -1
  965. package/dist/src/utils/geminiTypeConversion.test.d.ts +0 -6
  966. package/dist/src/utils/geminiTypeConversion.test.js +0 -310
  967. package/dist/src/utils/geminiTypeConversion.test.js.map +0 -1
  968. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +0 -6
  969. package/dist/src/utils/generateContentResponseUtilities.test.js +0 -512
  970. package/dist/src/utils/generateContentResponseUtilities.test.js.map +0 -1
  971. package/dist/src/utils/getFolderStructure.test.d.ts +0 -6
  972. package/dist/src/utils/getFolderStructure.test.js +0 -283
  973. package/dist/src/utils/getFolderStructure.test.js.map +0 -1
  974. package/dist/src/utils/gitIgnoreParser.test.d.ts +0 -6
  975. package/dist/src/utils/gitIgnoreParser.test.js +0 -243
  976. package/dist/src/utils/gitIgnoreParser.test.js.map +0 -1
  977. package/dist/src/utils/googleErrors.test.d.ts +0 -6
  978. package/dist/src/utils/googleErrors.test.js +0 -309
  979. package/dist/src/utils/googleErrors.test.js.map +0 -1
  980. package/dist/src/utils/googleQuotaErrors.test.d.ts +0 -6
  981. package/dist/src/utils/googleQuotaErrors.test.js +0 -548
  982. package/dist/src/utils/googleQuotaErrors.test.js.map +0 -1
  983. package/dist/src/utils/ignorePatterns.test.d.ts +0 -6
  984. package/dist/src/utils/ignorePatterns.test.js +0 -246
  985. package/dist/src/utils/ignorePatterns.test.js.map +0 -1
  986. package/dist/src/utils/installationManager.test.d.ts +0 -6
  987. package/dist/src/utils/installationManager.test.js +0 -93
  988. package/dist/src/utils/installationManager.test.js.map +0 -1
  989. package/dist/src/utils/llm-edit-fixer.test.d.ts +0 -6
  990. package/dist/src/utils/llm-edit-fixer.test.js +0 -223
  991. package/dist/src/utils/llm-edit-fixer.test.js.map +0 -1
  992. package/dist/src/utils/llmUtils.test.d.ts +0 -6
  993. package/dist/src/utils/llmUtils.test.js +0 -196
  994. package/dist/src/utils/llmUtils.test.js.map +0 -1
  995. package/dist/src/utils/memoryDiscovery.test.d.ts +0 -6
  996. package/dist/src/utils/memoryDiscovery.test.js +0 -542
  997. package/dist/src/utils/memoryDiscovery.test.js.map +0 -1
  998. package/dist/src/utils/memoryImportProcessor.test.d.ts +0 -6
  999. package/dist/src/utils/memoryImportProcessor.test.js +0 -581
  1000. package/dist/src/utils/memoryImportProcessor.test.js.map +0 -1
  1001. package/dist/src/utils/nextSpeakerChecker.test.d.ts +0 -6
  1002. package/dist/src/utils/nextSpeakerChecker.test.js +0 -191
  1003. package/dist/src/utils/nextSpeakerChecker.test.js.map +0 -1
  1004. package/dist/src/utils/partUtils.test.d.ts +0 -6
  1005. package/dist/src/utils/partUtils.test.js +0 -397
  1006. package/dist/src/utils/partUtils.test.js.map +0 -1
  1007. package/dist/src/utils/pathCorrector.test.d.ts +0 -6
  1008. package/dist/src/utils/pathCorrector.test.js +0 -87
  1009. package/dist/src/utils/pathCorrector.test.js.map +0 -1
  1010. package/dist/src/utils/pathReader.test.d.ts +0 -6
  1011. package/dist/src/utils/pathReader.test.js +0 -406
  1012. package/dist/src/utils/pathReader.test.js.map +0 -1
  1013. package/dist/src/utils/paths.test.d.ts +0 -6
  1014. package/dist/src/utils/paths.test.js +0 -402
  1015. package/dist/src/utils/paths.test.js.map +0 -1
  1016. package/dist/src/utils/retry.test.d.ts +0 -6
  1017. package/dist/src/utils/retry.test.js +0 -548
  1018. package/dist/src/utils/retry.test.js.map +0 -1
  1019. package/dist/src/utils/retry_llm_error.test.d.ts +0 -6
  1020. package/dist/src/utils/retry_llm_error.test.js +0 -280
  1021. package/dist/src/utils/retry_llm_error.test.js.map +0 -1
  1022. package/dist/src/utils/safeJsonStringify.test.d.ts +0 -6
  1023. package/dist/src/utils/safeJsonStringify.test.js +0 -61
  1024. package/dist/src/utils/safeJsonStringify.test.js.map +0 -1
  1025. package/dist/src/utils/schemaValidator.test.d.ts +0 -6
  1026. package/dist/src/utils/schemaValidator.test.js +0 -113
  1027. package/dist/src/utils/schemaValidator.test.js.map +0 -1
  1028. package/dist/src/utils/secure-browser-launcher.test.d.ts +0 -6
  1029. package/dist/src/utils/secure-browser-launcher.test.js +0 -149
  1030. package/dist/src/utils/secure-browser-launcher.test.js.map +0 -1
  1031. package/dist/src/utils/security.test.d.ts +0 -1
  1032. package/dist/src/utils/security.test.js +0 -121
  1033. package/dist/src/utils/security.test.js.map +0 -1
  1034. package/dist/src/utils/shell-utils.integration.test.d.ts +0 -1
  1035. package/dist/src/utils/shell-utils.integration.test.js +0 -58
  1036. package/dist/src/utils/shell-utils.integration.test.js.map +0 -1
  1037. package/dist/src/utils/shell-utils.test.d.ts +0 -6
  1038. package/dist/src/utils/shell-utils.test.js +0 -437
  1039. package/dist/src/utils/shell-utils.test.js.map +0 -1
  1040. package/dist/src/utils/stdio.test.d.ts +0 -6
  1041. package/dist/src/utils/stdio.test.js +0 -47
  1042. package/dist/src/utils/stdio.test.js.map +0 -1
  1043. package/dist/src/utils/summarizer.test.d.ts +0 -6
  1044. package/dist/src/utils/summarizer.test.js +0 -152
  1045. package/dist/src/utils/summarizer.test.js.map +0 -1
  1046. package/dist/src/utils/systemEncoding.test.d.ts +0 -6
  1047. package/dist/src/utils/systemEncoding.test.js +0 -369
  1048. package/dist/src/utils/systemEncoding.test.js.map +0 -1
  1049. package/dist/src/utils/terminalSerializer.test.d.ts +0 -6
  1050. package/dist/src/utils/terminalSerializer.test.js +0 -193
  1051. package/dist/src/utils/terminalSerializer.test.js.map +0 -1
  1052. package/dist/src/utils/textUtils.test.d.ts +0 -6
  1053. package/dist/src/utils/textUtils.test.js +0 -76
  1054. package/dist/src/utils/textUtils.test.js.map +0 -1
  1055. package/dist/src/utils/thoughtUtils.test.d.ts +0 -6
  1056. package/dist/src/utils/thoughtUtils.test.js +0 -78
  1057. package/dist/src/utils/thoughtUtils.test.js.map +0 -1
  1058. package/dist/src/utils/tokenCalculation.test.d.ts +0 -6
  1059. package/dist/src/utils/tokenCalculation.test.js +0 -184
  1060. package/dist/src/utils/tokenCalculation.test.js.map +0 -1
  1061. package/dist/src/utils/tool-utils.test.d.ts +0 -6
  1062. package/dist/src/utils/tool-utils.test.js +0 -84
  1063. package/dist/src/utils/tool-utils.test.js.map +0 -1
  1064. package/dist/src/utils/toolCallContext.test.d.ts +0 -6
  1065. package/dist/src/utils/toolCallContext.test.js +0 -68
  1066. package/dist/src/utils/toolCallContext.test.js.map +0 -1
  1067. package/dist/src/utils/userAccountManager.test.d.ts +0 -6
  1068. package/dist/src/utils/userAccountManager.test.js +0 -225
  1069. package/dist/src/utils/userAccountManager.test.js.map +0 -1
  1070. package/dist/src/utils/version.test.d.ts +0 -6
  1071. package/dist/src/utils/version.test.js +0 -39
  1072. package/dist/src/utils/version.test.js.map +0 -1
  1073. package/dist/src/utils/workspaceContext.test.d.ts +0 -6
  1074. package/dist/src/utils/workspaceContext.test.js +0 -374
  1075. package/dist/src/utils/workspaceContext.test.js.map +0 -1
  1076. package/dist/tsconfig.tsbuildinfo +0 -1
@@ -1,1382 +0,0 @@
1
- # Phase 3: 프로바이더 확장 및 통합
2
-
3
- > 기간: 4-6주 | 상태: ⏳ 대기 | 의존성: Phase 2 완료 **v0.8** - 리뷰 3건 반영
4
- > (중복 등록 안전성, 런타임 wiring 테스트 타깃, --provider 옵션 명확화)
5
-
6
- ## System Prompt
7
-
8
- Always follow TDD principles. For each provider adapter: write failing tests for
9
- message conversion, stream handling, and error mapping first. Implement minimum
10
- code to pass. Ensure cross-provider compatibility through integration tests.
11
-
12
- ---
13
-
14
- # PHASE OVERVIEW
15
-
16
- ## 설계서 참조 (Design Document References)
17
-
18
- | 설계서 | 관련 섹션 | 참조 목적 |
19
- | ------------------------------------------------------------------------------------- | ------------------------------------------------------------------------------------ | ------------------------------------- |
20
- | [03-technical-design.md](../03-technical-design.md) | §3.3.4-3.3.6 Claude 어댑터/변환기, §3.3.7-3.3.8 OpenAI 어댑터/변환기, §3.4 vLLM 확장 | 각 프로바이더별 어댑터 구현 상세 |
21
- | [04-integration-design.md](../04-integration-design.md) | §4.2 연동 아키텍처, §4.3 공통 타입 시스템 | DidimAIStudio 연동 시 프로바이더 통합 |
22
- | [05-implementation-plan.md](../05-implementation-plan.md) | §5.4 Phase 3 상세, §5.5 테스트 및 검증 | 마일스톤별 상세 계획, 검증 기준 |
23
- | [phase3_handoff.md](./phase3_handoff.md) | 연기 항목 카탈로그, messageInspectors 상세, 잔여 의존성 현황 | Phase 2 → 3 연기 항목 추적 |
24
- | [EventType 전환 결과서](../working_history/phase2_tradeoff_EventType전환_20260208.md) | 16개 파일 전환, 핸드오프 Critical #1/#2 해소 | EventType 전환 완료 근거 |
25
-
26
- ## 목표
27
-
28
- - 🆕 **Phase 2 연기 항목 해소**: Gemini 내부 리팩토링 (파일 이동, 텔레메트리,
29
- Agent 결합 해소)
30
- - Claude 어댑터/변환기 구현
31
- - OpenAI 어댑터/변환기 구현
32
- - OpenAI-Compatible(vLLM/sLM) 어댑터 템플릿
33
- - 통합 테스트 및 문서화
34
-
35
- ## ⚡ 실행 순서 변경 안내 (2026-02-10)
36
-
37
- **원래 계획**: M3.0 → M3.1 → M3.2 → M3.3 → M3.4 → M3.5
38
-
39
- **변경된 순서**: M3.0 ✅ → M3.1 ✅ → M3.2 ✅ → **M3.4.A (부분 선행)** → M3.3 →
40
- M3.4.B (잔여) → M3.5
41
-
42
- **변경 사유**:
43
-
44
- - M3.4의 90%는 M3.3 없이 진행 가능 (Gemini/Claude/OpenAI 3개 프로바이더로 충분)
45
- - 3-provider 통합 테스트를 조기에 수행하여 버그 조기 발견
46
- - M3.3 작업 전에 integration contract 확보
47
- - 성능 baseline 조기 확립하여 M3.3 영향도 측정 가능
48
-
49
- **M3.4.A 선행 범위** (M3.3 독립):
50
-
51
- - 3.4.1 전체 — 멀티 프로바이더 통합 테스트 (4개)
52
- - 3.4.2 중 3개 — Gemini/Claude/OpenAI E2E 테스트 (vLLM 제외)
53
- - 3.4.3 전체 — 성능 회귀 테스트 (3-provider baseline)
54
- - 3.4.4 전체 — 문서 업데이트 (vLLM은 placeholder)
55
- - 3.4.5 전체 — 안정화 작업 (6개)
56
-
57
- **M3.4.B 잔여 범위** (M3.3 의존):
58
-
59
- - 3.4.2.4 — vLLM E2E 테스트
60
- - 3.4.4 — vLLM 문서 상세화 (placeholder → full docs)
61
-
62
- ## 전제 조건
63
-
64
- - [x] Phase 2 모든 Milestone 완료 (M2.0~M2.6 + ETC)
65
- - [x] GeminiAdapter 동등성 검증 완료
66
- - [x] 기능 플래그 동작 확인
67
- - [x] 🆕 EventType 전환 완료 (M2.연기 — GeminiEventType→LlmEventType, 16개 파일)
68
- - [ ] Phase 3 핸드오프 문서 검토 완료
69
-
70
- ## Phase 2 연기 항목 추적 (핸드오프 기준)
71
-
72
- | # | 핸드오프 항목 | Priority | 상태 | 해소 위치 |
73
- | ---- | ----------------------------------------- | -------- | ----------- | ---------------------------- |
74
- | 1 | `client.ts` GeminiEventType 참조 정리 | Critical | ✅ 해소됨 | M2.연기 (EventType 전환) |
75
- | 2 | `turn.ts` 이벤트 생성점 전환 | Critical | ✅ 해소됨 | M2.연기 (EventType 전환) |
76
- | 3 | `chat.ts` → `providers/gemini/chat.ts` | Critical | ✅ 해소됨 | M3.0.1 (`f56845dab`) |
77
- | 4 | `turn.ts` → `providers/gemini/turn.ts` | Critical | ✅ 해소됨 | M3.0.1 (`f56845dab`) |
78
- | 5 | `messageInspectors` 마이그레이션 (4파일) | High | ✅ 해소됨 | M3.0.2 |
79
- | 6 | `loggingContentGenerator` 텔레메트리 변환 | High | ✅ 해소됨 | M3.0.3 (`6a09c831d`) |
80
- | 7 | `telemetry/semantic.ts` Gemini 결합 해소 | High | ✅ 해소됨 | M3.0.3 (`6a09c831d`) |
81
- | 8 | AuthType 처리 통합 (2.3.1.8) | Medium | ⬜ → M3.1+ | 신규 프로바이더 구현 시 함께 |
82
- | 9 | 성능 검증 (응답 지연/메모리/스트리밍) | Medium | ⬜ → M3.4 | M3.4.3 |
83
- | 10 | E2E 테스트 통과 검증 | Medium | ✅ 해소됨 | M3.4.2 (12 tests PASS) |
84
- | 11 | `geminiTypeConversion.ts` 브릿지 정리 | Medium | ✅ 해소됨 | M3.0.4 |
85
- | 12 | `telemetry/sdk.ts` 시그널 핸들러 누수 | Medium | ✅ 해소됨 | M3.0.3 (`6a09c831d`) |
86
- | M2.7 | Agent/Telemetry 결합 해소 | Watch | ✅ 해소됨 | M3.0.3 (`6a09c831d`) |
87
- | 신규 | 런타임 실행 경로 연결 (ProviderFactory) | High | ✅ 해소됨 | M3.0.5 |
88
- | 신규 | root index.ts re-export 회귀 테스트 | Medium | ✅ 해소됨 | M3.0.1.5 (`f56845dab`) |
89
- | 신규 | 프로바이더별 registry.register() 작업 | High | ⬜ → M3.1~3 | M3.1.0.2/M3.2.0.2/M3.3.0.1 |
90
- | 신규 | SDK 의존성 설치 (@anthropic-ai, openai) | Low | ⬜ → M3.1~2 | M3.1.0.1/M3.2.0.1 |
91
-
92
- ## 산출물
93
-
94
- ```
95
- packages/core/src/providers/
96
- ├── gemini/
97
- │ ├── chat.ts # 🆕 geminiChat.ts 물리적 이동 (M3.0)
98
- │ └── turn.ts # 🆕 Gemini 특화 Turn 이동 (M3.0)
99
-
100
- ├── claude/
101
- │ ├── adapter.ts
102
- │ ├── converter.ts
103
- │ ├── eventMapper.ts
104
- │ └── types.ts
105
- ├── openai/
106
- │ ├── adapter.ts
107
- │ ├── converter.ts
108
- │ ├── eventMapper.ts
109
- │ └── types.ts
110
- └── openai-compatible/
111
- ├── adapter.ts
112
- ├── converter.ts
113
- └── types.ts # eventMapper 선택적 (OpenAI 호환)
114
- ```
115
-
116
- ---
117
-
118
- # 3-STAGE WORK PROCESS (사전작업/본작업/사후작업)
119
-
120
- 각 Milestone 작업은 다음 3단계로 진행:
121
-
122
- ## 1️⃣ 사전작업 (Pre-work)
123
-
124
- - [ ] 작업 개요 파악: 현재 Milestone 목표 및 세부 작업 확인
125
- - [ ] 이전 작업 리뷰: Phase 2 완료 확인 및 작업 결과서 확인 (`working_history/`
126
- 디렉토리)
127
- - [ ] 이슈 파악: 이전 작업에서 전달된 이슈 및 Open Questions 확인
128
- - [ ] 설계서 참조: 관련 설계 문서 검토 (03-technical-design.md,
129
- 04-integration-design.md 등)
130
-
131
- ## 2️⃣ 본작업 (Main work) - TDD 사이클
132
-
133
- - [ ] **Red**: 실패하는 테스트 작성
134
- - [ ] **Green**: 최소한의 코드로 테스트 통과
135
- - [ ] **Refactor**: 코드 개선 (테스트 통과 유지)
136
- - [ ] 체크리스트 업데이트: 작업 완료 시 ✅ 표시
137
-
138
- ## 3️⃣ 사후작업 (Post-work)
139
-
140
- - [ ] 체크리스트 최종 확인: 해당 Milestone 모든 항목 완료 확인
141
- - [ ] 작업 결과서 작성: `working_history/Phase3_{Milestone}_{작업일자}.md`
142
- - [ ] 커밋: 변경사항 커밋 및 커밋 ID 기록
143
- - [ ] 이슈 전달: 다음 작업에 전달할 이슈 문서화
144
-
145
- ### 작업 결과서 템플릿
146
-
147
- - 경로: `docs/ai_adapter/template/03_work_result_report_template.md`
148
-
149
- ---
150
-
151
- # M3.0: 🆕 Phase 2 연기 항목 해소 — Gemini 내부 리팩토링 (3-5일)
152
-
153
- > 📚 **참조**: [phase3_handoff.md](./phase3_handoff.md) (연기 항목 카탈로그),
154
- > [Phase2 ETC 결과서](../working_history/Phase2_ETC_연기작업정리_20260208.md),
155
- > [EventType 전환 결과서](../working_history/phase2_tradeoff_EventType전환_20260208.md)
156
-
157
- ## 목표
158
-
159
- Phase 2에서 연기된 Gemini 내부 리팩토링 항목을 해소하여 신규 프로바이더 추가
160
- 기반 확보
161
-
162
- ## 배경
163
-
164
- Phase 2 M2.0~M2.6에서 타입 시스템 독립화를 완료했으나, 파일 물리적
165
- 이동/텔레메트리 결합 해소/Agent 레이어 전환 등은 대규모 동작 변경을 수반하여
166
- Phase 3으로 연기됨. M2.연기에서 EventType 전환(Critical #1, #2)은 이미 해소됨.
167
-
168
- ## 사전 결정 필요 사항 (Open Questions)
169
-
170
- M3.0 착수 전 다음 Open Question의 잠정 결정 권장:
171
-
172
- | OQ | 질문 | 영향 범위 | 잠정 방안 |
173
- | --- | ------------------------------------------ | ------------- | ---------------------------------------------------------------- |
174
- | Q5 | LocalAgentExecutor의 신규 인터페이스 형태? | 3.0.3.3 | AgentChat 추상 인터페이스 도입 (GeminiChat을 구현체로) |
175
- | Q6 | Telemetry usage 표준 스키마 정의? | 3.0.3.4 | LlmTokenUsage (필수 3필드) 유지, SDK 타입은 변환 |
176
- | Q7 | CLI `--provider` 옵션 노출 여부? | 3.0.5.5, M3.4 | 잠정: 환경변수(`LLM_PROVIDER`)로 충분. CLI 옵션은 M3.4 시점 결정 |
177
-
178
- ⚠️ 3.0.1~3.0.2, 3.0.4, 3.0.5는 Q5/Q6 무관하게 착수 가능. 3.0.3.3/3.0.3.4만 해당.
179
- ⚠️ Q7은 M3.0.5.5 우선순위 표의 1순위(명시적 provider 인자)가 내부 API 수준임을
180
- 전제. CLI 옵션 추가는 별도 결정.
181
-
182
- ## 작업 항목
183
-
184
- ### 3.0.1 Gemini 전용 파일 물리적 이동 (핸드오프 Critical #3, #4)
185
-
186
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
187
- | ------- | ------------------------------------------------------ | ---- | ---------------------------------- | --------------------------------------------------------------------------------------------------------------------------------------- |
188
- | 3.0.1.1 | `core/geminiChat.ts` → `providers/gemini/chat.ts` 이동 | ✅ | 기존 geminiChat.test.ts | 999라인, re-export로 하위 호환. import 변경 대상 13개 파일 |
189
- | 3.0.1.2 | `core/turn.ts` 전체 → `providers/gemini/turn.ts` 이동 | ✅ | 기존 turn.test.ts | 324라인, Turn 클래스 전체가 Gemini-specific (GeminiChat 생성자 의존). re-export로 하위 호환. import 변경 대상 10개 파일 |
190
- | 3.0.1.3 | 기존 import 경로 re-export 하위 호환성 유지 | ✅ | 기존 테스트 100% 통과 | M2.0 re-export 패턴 재활용 |
191
- | 3.0.1.4 | core/index.ts export 정리 | ✅ | `providers/gemini/exports.test.ts` | core/exports.test.ts는 미존재, gemini/ 내 파일 참조 |
192
- | 3.0.1.5 | root `index.ts` re-export 회귀 테스트 추가 | ✅ | `index.test.ts` | 7개 회귀 테스트 추가 완료. GeminiChat, StreamEventType, InvalidStreamError, Turn, CompressionStatus, LlmEventType, GeminiEventType 검증 |
193
-
194
- **Tidy First 체크리스트**:
195
-
196
- - [x] 모든 변경이 순수 구조적 (동작 변경 없음)
197
- - [x] 각 이동마다 테스트 실행하여 회귀 확인
198
- - [x] 커밋 메시지에 `[STRUCTURAL]` 태그
199
-
200
- ### 3.0.2 messageInspectors 마이그레이션 (핸드오프 High #5)
201
-
202
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
203
- | ------- | ----------------------------------------------------------------------------------------------- | ---- | ------------------------------ | ------------------------------------------------------------- |
204
- | 3.0.2.1 | `loopDetectionService.ts` — `isFunctionCall/Response` → `isToolCallMessage/isToolResultMessage` | ✅ | `loopDetectionService.test.ts` | L408,416,437 convertContentToLlmMessage 브릿지 사용 |
205
- | 3.0.2.2 | `geminiChat.ts` — `isFunctionResponse` 전환 | ✅ | `geminiChat.test.ts` | chat.ts 이동(3.0.1.1)과 연계, convertContentToLlmMessage 사용 |
206
- | 3.0.2.3 | `utils/editCorrector.ts` — `isFunctionCall/Response` 전환 | ✅ | `editCorrector.test.ts` | convertContentToLlmMessage 브릿지 사용 |
207
- | 3.0.2.4 | `utils/nextSpeakerChecker.ts` — `isFunctionResponse` 전환 | ✅ | `nextSpeakerChecker.test.ts` | convertContentToLlmMessage 브릿지 사용 |
208
-
209
- **대체 함수** (M2.6에서 구현 완료):
210
-
211
- - `isToolCallMessage(message: LlmMessage)` — `src/utils/llmUtils.ts:80`
212
- - `isToolResultMessage(message: LlmMessage)` — `src/utils/llmUtils.ts:92`
213
-
214
- ⚠️ **주의**: 단순 함수 교체가 아님. 기존 함수는 `Content` 타입, 대체 함수는
215
- `LlmMessage` 타입. 각 사용처에서 `Content` → `LlmMessage` 타입 전환이 선행되어야
216
- 함.
217
-
218
- ### 3.0.3 텔레메트리/Agent 레이어 독립화 (핸드오프 High #6, #7 + M2.7 + Medium #12)
219
-
220
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
221
- | ------- | --------------------------------------------------------------------------- | ---- | -------------------------------------------------- | ----------------------------------------------------------------------------------------- |
222
- | 3.0.3.1 | `loggingContentGenerator.ts` — @google/genai import 제거 | ✅ | `loggingContentGenerator.test.ts` | 11개 SDK 타입 import → 0. contentGenerator.ts re-export 경유 + telemetry 로컬 타입 |
223
- | 3.0.3.2 | `telemetry/semantic.ts` — Part/Content/Candidate 타입 독립화 | ✅ | `semantic.test.ts` | 6개 로컬 타입 + GeminiFinishReason const 객체. @google/genai 완전 제거 |
224
- | 3.0.3.3 | `LocalAgentExecutor` — GeminiChat 직접 결합 해소 (M2.7) | ✅ | `local-executor.test.ts` | Q5 잠정 방안 적용: AgentChatSession 인터페이스 + ChatSessionFactory 타입 도입 |
225
- | 3.0.3.4 | `telemetry/types.ts` — `GenerateContentResponseUsageMetadata` 독립화 (M2.7) | ✅ | `telemetry/sdk.test.ts` (types 전용 테스트 미존재) | TelemetryUsageMetadata + TelemetryGenerateConfig 로컬 인터페이스. @google/genai 완전 제거 |
226
- | 3.0.3.5 | `telemetry/sdk.ts` — SIGTERM/SIGINT 시그널 핸들러 누수 수정 (핸드오프 #12) | ✅ | `telemetry/sdk.test.ts` | named handler + removeListener in shutdown. 신규 테스트 2건 |
227
-
228
- ### 3.0.4 변환 브릿지 정리 (핸드오프 Medium #11)
229
-
230
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
231
- | ------- | -------------------------------------------------------------------- | ---- | ------------------------------ | -------------------------------------------------------- |
232
- | 3.0.4.1 | `geminiTypeConversion.ts` 브릿지 사용처 확인 | ✅ | N/A (분석) | 6개 사이트, 5개 함수 — 모두 Gemini SDK 타입 입력 |
233
- | 3.0.4.2 | `providers/gemini/typeConversion.ts`로 이동 | ✅ | 관련 테스트 파일 | 6개 import 전환 + index.ts export 추가 |
234
- | 3.0.4.3 | `utils/geminiTypeConversion.ts` @deprecated + messageInspectors 삭제 | ✅ | `geminiTypeConversion.test.ts` | re-export shim 유지, messageInspectors.ts dead code 삭제 |
235
-
236
- ### 3.0.5 런타임 실행 경로 연결 (리뷰 #1 반영)
237
-
238
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
239
- | ------- | ----------------------------------------------------------------------- | ---- | ----------------------------------------------- | --------------------------------------------------------------------------------------------------- |
240
- | 3.0.5.1 | `contentGenerator.ts` — `createContentGenerator()` 프로바이더 분기 추가 | ✅ | `contentGenerator.multiProvider.test.ts` | 멀티 프로바이더 분기 + `wrapAdapterAsGenerator()` 추가 |
241
- | 3.0.5.2 | `ProviderFactory` → 런타임 CLI 경로 통합 | ✅ | `contentGenerator.multiProvider.test.ts` | `ProviderFactory.create()` 호출이 contentGenerator에서 런타임 도달 확인 (시나리오 4, 5) |
242
- | 3.0.5.3 | `ENABLE_MULTI_PROVIDER` 플래그 분기 확장 및 검증 | ✅ | `contentGenerator.multiProvider.test.ts` | off→레거시(시나리오 1,2), on+Gemini→fall-through(시나리오 3,6,7), on+비Gemini→Factory(시나리오 4,5) |
243
- | 3.0.5.4 | `ProviderRegistry`에 Gemini 어댑터 팩토리 등록 부트스트랩 구현 | ✅ | `bootstrap.test.ts` (7개) | `has()` 가드 패턴 채택. `bootstrapGeminiProvider()` in `providers/gemini/bootstrap.ts` |
244
- | 3.0.5.5 | 프로바이더 선택 우선순위 통합 및 회귀 테스트 | ✅ | `contentGenerator.multiProvider.test.ts` (10개) | 7개 회귀 시나리오 전수 통과 + 3개 추가 (llm 위임, 레거시 throw, 부트스트랩 멱등) |
245
-
246
- ⚠️ **주의**: 이 작업 없이는 신규 프로바이더 어댑터(M3.1~M3.3)를 구현해도
247
- 런타임에서 도달 불가. `createContentGenerator()` (contentGenerator.ts:167-259,
248
- GoogleGenAI 생성: L235)가 `new GoogleGenAI()` 하드코딩.
249
- `ProviderFactory`/`ProviderSelector`는 테스트에서만 사용되며 런타임 경로 미연결.
250
- `ENABLE_MULTI_PROVIDER` 플래그는 현재 `adapterBridge.ts`에서만 제어
251
- (GeminiAdapter 래핑 여부)하며, contentGenerator의 프로바이더 선택에는 관여하지
252
- 않음.
253
-
254
- **레지스트리 부트스트랩 설계** (3.0.5.4):
255
-
256
- 현재 `ProviderRegistry`는 인프라만 존재하고 런타임에서 `register()` 호출이 없음.
257
- `factory.create('gemini', config)` 호출 시 `PROVIDER_NOT_FOUND` 에러 발생.
258
-
259
- **중복 등록 안전성**: `registry.register()` 는 동일 이름 중복 시 예외를 던짐
260
- (registry.ts:81, `has() && !force` 가드). 부트스트랩이 여러 번 호출될 수 있는
261
- 시나리오(HMR, 테스트 재초기화, Agent 재생성 등)에 대비해야 함.
262
-
263
- 구현 방안 (택 1):
264
-
265
- 1. **`has()` 가드 패턴** (권장): 부트스트랩에서 `if (!registry.has('gemini'))`
266
- 체크 후 등록
267
- 2. **`force: true` 패턴**: `register('gemini', factory, { force: true })` — 항상
268
- 덮어쓰기
269
- 3. **1회 초기화 보장**: 부트스트랩 함수에 `initialized` 플래그로 중복 호출 방지
270
-
271
- 초기화 위치 후보:
272
-
273
- - `createContentGenerator()` 진입부 (런타임 경로 확실, 단 호출마다 실행)
274
- - 앱 부트스트랩 (`packages/cli` 초기화 시점, 1회 보장)
275
- - lazy init (첫 `factory.create()` 호출 시 자동 등록)
276
-
277
- ```
278
- // 권장 패턴 (has() 가드)
279
- function bootstrapProviders(registry: ProviderRegistry): void {
280
- if (!registry.has('gemini')) {
281
- registry.register('gemini', (config) => new GeminiAdapter(config, modelsApi));
282
- }
283
- }
284
- ```
285
-
286
- M3.1~M3.3에서도 각 프로바이더 등록 작업이 필수 (아래 각 마일스톤에 명시).
287
- M3.1.0.2/M3.2.0.2/M3.3.0.1 모두 동일한 `has()` 가드 패턴 적용.
288
-
289
- **프로바이더 선택 우선순위 계약** (3.0.5.5):
290
-
291
- 현재 2개 분리된 시스템이 상충:
292
-
293
- - `contentGenerator.ts`: authType-only 분기 (L204-248), LLM_PROVIDER 미참조
294
- - `providerSelector.ts`: LLM_PROVIDER > authType > env key 순서
295
- - `getProviderFromConfig()`: explicit provider > authType > LLM_PROVIDER (또
296
- 다른 순서)
297
-
298
- 통합 후 최종 우선순위:
299
-
300
- | 순위 | 결정 소스 | 예시 | 비고 |
301
- | ---- | ------------------------------- | ------------------------ | ------------------------------------------------------------- |
302
- | 1 | 명시적 provider 인자 (내부 API) | `providerName: 'claude'` | 프로그래밍 API 수준. CLI `--provider` 옵션은 미존재 — Q7 참조 |
303
- | 2 | `LLM_PROVIDER` 환경변수 | `LLM_PROVIDER=openai` | 환경 기반 선택 |
304
- | 3 | `authType` (Gemini 한정) | `AuthType.USE_VERTEX_AI` | Gemini 내부 경로 분기 |
305
- | 4 | API Key 환경변수 존재 여부 | `GEMINI_API_KEY` 존재 | 자동 감지 폴백 |
306
- | 5 | 기본값 (Gemini) | 모든 미설정 시 | 하위 호환 |
307
-
308
- > ⚠️ **Q7**: CLI `--provider` 옵션 추가 여부. 현재
309
- > `packages/cli/src/config/config.ts`에 해당 옵션이 없음. 1순위는 내부
310
- > `getProviderFromConfig()`의 프로그래밍 인자로만 존재. CLI 옵션 노출은
311
- > M3.4(통합/문서) 시점에 결정 가능 — 환경변수(`LLM_PROVIDER`)만으로 충분할 수
312
- > 있음.
313
-
314
- 회귀 테스트 시나리오:
315
-
316
- | ENABLE_MULTI_PROVIDER | LLM_PROVIDER | authType | 기대 결과 | 테스트 |
317
- | --------------------- | ------------ | ------------- | --------- | ----------------------------- |
318
- | false | (미설정) | USE_GEMINI | Gemini | ✅ |
319
- | false | claude | USE_GEMINI | Gemini | ✅ (플래그 off → 레거시 경로) |
320
- | true | (미설정) | USE_GEMINI | Gemini | ✅ |
321
- | true | claude | (미설정) | Claude | ✅ |
322
- | true | openai | USE_VERTEX_AI | OpenAI | ✅ (LLM_PROVIDER 우선) |
323
- | true | (미설정) | USE_VERTEX_AI | Gemini | ✅ |
324
- | true | (미설정) | (미설정) | Gemini | ✅ (기본값 폴백) |
325
-
326
- **검증 기준**:
327
-
328
- - [x] `core/geminiChat.ts` → `providers/gemini/chat.ts` 이동 완료
329
- - [x] `core/turn.ts` Gemini 특화 분리 완료
330
- - [x] root `index.ts` re-export 회귀 테스트 통과 (CLI import 호환성)
331
- - [x] messageInspectors 4개 파일 마이그레이션 완료
332
- - [x] 텔레메트리 레이어 @google/genai 독립화
333
- - [x] LocalAgentExecutor GeminiChat 직접 결합 해소
334
- - [x] `createContentGenerator()` → ProviderFactory 런타임 연결 완료
335
- - [x] `ENABLE_MULTI_PROVIDER=true` 시 ProviderFactory 경로 도달 검증
336
- - [x] `registry.register('gemini', ...)` 부트스트랩 동작 확인
337
- - [x] 부트스트랩 중복 호출 시 예외 미발생 (has() 가드 또는 force 정책)
338
- - [x] 프로바이더 선택 우선순위 7개 회귀 시나리오 전수 통과
339
- - [x] 모든 기존 테스트 100% 통과
340
- - [x] TypeScript 컴파일 에러 없음
341
-
342
- ---
343
-
344
- # M3.1: Claude 어댑터/변환기 구현 (4-5일)
345
-
346
- > 📚 **설계서 참조**:
347
- > [03-technical-design.md §3.3.4 Claude 어댑터](../03-technical-design.md#334-claude-어댑터),
348
- > [§3.3.5 Claude 타입 변환기](../03-technical-design.md#335-claude-타입-변환기-추가),
349
- > [§3.3.6 Claude 어댑터 구현](../03-technical-design.md#336-claude-어댑터-추가),
350
- > [05-implementation-plan.md §M3.1](../05-implementation-plan.md#m31-claude-어댑터변환기-구현-4-5일)
351
-
352
- ## 목표
353
-
354
- Claude 메시지/툴/스트림 변환기 구현
355
-
356
- ## Claude 특화 고려사항
357
-
358
- - System 메시지 분리 필요 (별도 파라미터)
359
- - 이미지는 base64 필수 (URL 직접 지원 안함)
360
- - 스트리밍 tool delta 합성 필요
361
- - `content_block_delta` 이벤트 처리
362
-
363
- ## 작업 항목
364
-
365
- ### 3.1.0 사전 준비
366
-
367
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
368
- | ------- | ------------------------------------- | ---- | ------------------- | ----------------------------------------------------------- |
369
- | 3.1.0.1 | `@anthropic-ai/sdk` 의존성 설치 | ✅ | N/A | `^0.74.0` — packages/core/package.json에 추가 완료 (M3.1.0) |
370
- | 3.1.0.2 | ProviderRegistry에 Claude 팩토리 등록 | ✅ | `bootstrap.test.ts` | `bootstrapClaudeProvider()` + `has()` 가드 패턴 (M3.1.0) |
371
-
372
- ### 3.1.1 ClaudeAdapter 구현
373
-
374
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
375
- | ------- | ------------------------------ | ---- | ----------------- | ------------------------------------------------------- |
376
- | 3.1.1.1 | `ClaudeAdapter` 클래스 생성 | ✅ | `adapter.test.ts` | ClaudeClient DI 인터페이스 포함 (M3.1.1) |
377
- | 3.1.1.2 | `BaseAdapter` 상속 구현 | ✅ | `adapter.test.ts` | validateRequest 상속, mapToProviderConfig 구현 (M3.1.1) |
378
- | 3.1.1.3 | Anthropic SDK 연동 | ✅ | `adapter.test.ts` | ClaudeClient 인터페이스 통한 DI 패턴 (M3.1.1) |
379
- | 3.1.1.4 | `generate()` 메서드 구현 | ✅ | `adapter.test.ts` | generateContent + classifyError (M3.1.1+M3.1.3) |
380
- | 3.1.1.5 | `generateStream()` 메서드 구현 | ✅ | `adapter.test.ts` | generateContentStream + yield 패턴 (M3.1.1+M3.1.3) |
381
- | 3.1.1.6 | `getCapabilities()` 구현 | ✅ | `adapter.test.ts` | CLAUDE_CAPABILITIES const (M3.1.1) |
382
- | 3.1.1.7 | 설정 검증 (API Key) | ✅ | `adapter.test.ts` | BaseAdapter.validateRequest 위임 (M3.1.1) |
383
-
384
- **TDD 시나리오**:
385
-
386
- ```typescript
387
- describe('ClaudeAdapter', () => {
388
- it('should implement BaseAdapter interface', () => {
389
- const adapter = new ClaudeAdapter({
390
- apiKey: 'test-key',
391
- model: 'claude-sonnet-4-20250514',
392
- });
393
-
394
- expect(adapter).toBeInstanceOf(BaseAdapter);
395
- });
396
-
397
- it('should separate system message in API call', async () => {
398
- const adapter = new ClaudeAdapter(config);
399
- const request: LlmGenerateRequest = {
400
- messages: [
401
- {
402
- role: LlmRole.System,
403
- content: [{ type: 'text', text: 'Be helpful' }],
404
- },
405
- { role: LlmRole.User, content: [{ type: 'text', text: 'Hi' }] },
406
- ],
407
- };
408
-
409
- // Mock Anthropic SDK
410
- const mockCreate = vi.spyOn(anthropic.messages, 'create');
411
- await adapter.generate(request);
412
-
413
- expect(mockCreate).toHaveBeenCalledWith(
414
- expect.objectContaining({
415
- system: 'Be helpful',
416
- messages: [{ role: 'user', content: [{ type: 'text', text: 'Hi' }] }],
417
- }),
418
- );
419
- });
420
- });
421
- ```
422
-
423
- ### 3.1.2 Claude 메시지 변환기
424
-
425
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
426
- | ------- | -------------------------------- | ---- | ------------------- | -------------------------------------------------- |
427
- | 3.1.2.1 | `toClaudeMessage()` 변환 함수 | ✅ | `converter.test.ts` | toClaudeMessages + toClaudeContent (M3.1.1+M3.1.2) |
428
- | 3.1.2.2 | System 메시지 분리 로직 | ✅ | `converter.test.ts` | system 추출 + 복수 system 병합 (M3.1.1) |
429
- | 3.1.2.3 | 이미지 URL → base64 변환 | ✅ | `converter.test.ts` | base64 지원, URL은 경고 텍스트 (M3.1.2) |
430
- | 3.1.2.4 | `toClaudeTool()` 변환 함수 | ✅ | `converter.test.ts` | toClaudeTools + toClaudeToolChoice (M3.1.1) |
431
- | 3.1.2.5 | `fromClaudeResponse()` 변환 함수 | ✅ | `converter.test.ts` | thinking/redacted_thinking 포함 (M3.1.1) |
432
-
433
- **TDD 시나리오**:
434
-
435
- ```typescript
436
- describe('Claude Message Converter', () => {
437
- it('should extract system message separately', () => {
438
- const messages: LlmMessage[] = [
439
- {
440
- role: LlmRole.System,
441
- content: [{ type: 'text', text: 'System prompt' }],
442
- },
443
- { role: LlmRole.User, content: [{ type: 'text', text: 'User message' }] },
444
- ];
445
-
446
- const { systemPrompt, claudeMessages } = toClaudeMessages(messages);
447
-
448
- expect(systemPrompt).toBe('System prompt');
449
- expect(claudeMessages).toHaveLength(1);
450
- expect(claudeMessages[0].role).toBe('user');
451
- });
452
-
453
- it('should convert image URL to base64', async () => {
454
- const message: LlmMessage = {
455
- role: LlmRole.User,
456
- content: [
457
- {
458
- type: 'image',
459
- source: { type: 'url', url: 'https://example.com/image.png' },
460
- },
461
- ],
462
- };
463
-
464
- const claudeMessage = await toClaudeMessage(message);
465
-
466
- expect(claudeMessage.content[0].type).toBe('image');
467
- expect(claudeMessage.content[0].source.type).toBe('base64');
468
- });
469
- });
470
- ```
471
-
472
- ### 3.1.3 Claude 스트림 변환기
473
-
474
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
475
- | ------- | ------------------------------ | ---- | ------------------- | ------------------------------------------------------------------ |
476
- | 3.1.3.1 | `fromClaudeStreamEvent()` 변환 | ✅ | `converter.test.ts` | convertStreamEvent + createStreamState (M3.1.1) |
477
- | 3.1.3.2 | `content_block_start` 처리 | ✅ | `converter.test.ts` | tool_use 블록 시작 + index 기반 추적 (M3.1.1) |
478
- | 3.1.3.3 | `content_block_delta` 처리 | ✅ | `converter.test.ts` | text_delta, thinking_delta, input_json_delta (M3.1.1) |
479
- | 3.1.3.4 | `content_block_stop` 처리 | ✅ | `converter.test.ts` | tool call JSON 파싱 + ToolCallRequest emit (M3.1.1) |
480
- | 3.1.3.5 | Tool delta 합성 로직 | ✅ | `converter.test.ts` | parallel tool calls via index-based Map (M3.1.1) |
481
- | 3.1.3.6 | Usage 정보 추출 | ✅ | `converter.test.ts` | message_start input + message_delta output + cache tokens (M3.1.3) |
482
-
483
- **TDD 시나리오**:
484
-
485
- ```typescript
486
- describe('Claude Stream Converter', () => {
487
- it('should convert text delta events', async () => {
488
- const claudeEvents = [
489
- {
490
- type: 'content_block_start',
491
- content_block: { type: 'text', text: '' },
492
- },
493
- {
494
- type: 'content_block_delta',
495
- delta: { type: 'text_delta', text: 'Hello' },
496
- },
497
- { type: 'content_block_stop' },
498
- ];
499
-
500
- const events: LlmStreamEvent[] = [];
501
- for (const event of claudeEvents) {
502
- const converted = fromClaudeStreamEvent(event);
503
- if (converted) events.push(converted);
504
- }
505
-
506
- expect(events[0].type).toBe('text_delta');
507
- expect(events[0].text).toBe('Hello');
508
- });
509
-
510
- it('should assemble tool call deltas', async () => {
511
- const assembler = new StreamAssembler();
512
- // Claude tool delta events
513
- assembler.push(
514
- fromClaudeStreamEvent({
515
- type: 'content_block_start',
516
- content_block: { type: 'tool_use', id: 'tool_1', name: 'read_file' },
517
- }),
518
- );
519
- assembler.push(
520
- fromClaudeStreamEvent({
521
- type: 'content_block_delta',
522
- delta: { type: 'input_json_delta', partial_json: '{"path":' },
523
- }),
524
- );
525
- assembler.push(
526
- fromClaudeStreamEvent({
527
- type: 'content_block_delta',
528
- delta: { type: 'input_json_delta', partial_json: '"/tmp"}' },
529
- }),
530
- );
531
-
532
- const result = assembler.getMessage();
533
- expect(result.content[0].type).toBe('tool_call');
534
- expect(result.content[0].arguments).toEqual({ path: '/tmp' });
535
- });
536
- });
537
- ```
538
-
539
- ### 3.1.4 Claude 에러 매핑
540
-
541
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
542
- | ------- | ----------------------- | ---- | ----------------- | ------------------------------------------------------------- |
543
- | 3.1.4.1 | Anthropic SDK 에러 분석 | ✅ | N/A (분석) | M3.1.3에서 구현 완료 — classifyError duck typing 패턴 |
544
- | 3.1.4.2 | Rate limit 에러 매핑 | ✅ | `adapter.test.ts` | M3.1.3에서 구현 — 429→RateLimitError (retryable) |
545
- | 3.1.4.3 | Auth 에러 매핑 | ✅ | `adapter.test.ts` | M3.1.3에서 구현 — 401/403→AuthenticationError (non-retryable) |
546
- | 3.1.4.4 | Overloaded 에러 매핑 | ✅ | `adapter.test.ts` | M3.1.3에서 구현 — 529→MODEL_OVERLOADED (retryable) |
547
- | 3.1.4.5 | 에러 변환 유틸 함수 | ✅ | `adapter.test.ts` | M3.1.3에서 구현 — classifyError + LlmError passthrough |
548
-
549
- ⚠️ **참고**: M3.1.4 전체 범위가 M3.1.3 (스트림 에러 고도화) 작업에서 선행
550
- 구현됨. 설계서 §3.3.6 대비 추가 구현: 400/422→INVALID_REQUEST,
551
- 404→ModelNotFoundError, 500+→SERVER_ERROR, timeout/network 휴리스틱, LlmError
552
- passthrough.
553
-
554
- **검증 기준**:
555
-
556
- - [x] Claude 기본 대화 동작
557
- - [x] Claude 스트리밍 동작
558
- - [x] Claude 도구 호출 동작
559
- - [x] Claude 이미지 입력 동작
560
-
561
- ---
562
-
563
- # M3.2: OpenAI 어댑터/변환기 구현 (3-4일)
564
-
565
- > 📚 **설계서 참조**:
566
- > [03-technical-design.md §3.3.7 OpenAI 어댑터](../03-technical-design.md#337-openai-어댑터-구조-예시),
567
- > [§3.3.8 OpenAI 타입 변환기](../03-technical-design.md#338-openai-타입-변환기-추가),
568
- > [05-implementation-plan.md §M3.2](../05-implementation-plan.md#m32-openai-어댑터변환기-구현-3-4일)
569
-
570
- ## 목표
571
-
572
- OpenAI 메시지/툴/스트림 변환기 구현
573
-
574
- ## OpenAI 특화 고려사항
575
-
576
- - System 메시지 첫 번째로 위치
577
- - JSON mode / response_format 지원
578
- - function_call → tool_calls 전환
579
-
580
- ## 작업 항목
581
-
582
- ### 3.2.0 사전 준비
583
-
584
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
585
- | ------- | ------------------------------------- | ---- | ------------------- | ----------------------------------------------------------------------- |
586
- | 3.2.0.1 | `openai` SDK 의존성 설치 | ✅ | N/A | `openai@^6.18.0` 설치 (설계서 ^4.70.0보다 최신) |
587
- | 3.2.0.2 | ProviderRegistry에 OpenAI 팩토리 등록 | ✅ | `bootstrap.test.ts` | `bootstrapOpenAiProvider()` — has() 가드, singleton 기본값, config 전달 |
588
-
589
- ### 3.2.1 OpenAiAdapter 구현
590
-
591
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
592
- | ------- | ------------------------------ | ---- | ----------------- | ----------------------------------------------------------------- |
593
- | 3.2.1.1 | `OpenAiAdapter` 클래스 생성 | ✅ | `adapter.test.ts` | DI 패턴: `OpenAiClient` 인터페이스 |
594
- | 3.2.1.2 | `BaseAdapter` 상속 구현 | ✅ | `adapter.test.ts` | validateRequest, mapToProviderConfig 구현 |
595
- | 3.2.1.3 | OpenAI SDK 연동 | ✅ | `adapter.test.ts` | `client.chat.completions.create()` 호출 |
596
- | 3.2.1.4 | `generateContent()` 구현 | ✅ | `adapter.test.ts` | 변환→호출→역변환 패턴, classifyError 에러 분류 |
597
- | 3.2.1.5 | `generateContentStream()` 구현 | ✅ | `adapter.test.ts` | M3.2.A: 스켈레톤, M3.2.B: 변환기 완성 + `supportsStreaming: true` |
598
- | 3.2.1.6 | capabilities 선언 | ✅ | `adapter.test.ts` | `supportsTokenCount: false`, `supportsThought: false` |
599
-
600
- **TDD 시나리오**:
601
-
602
- ```typescript
603
- describe('OpenAIAdapter', () => {
604
- it('should generate response using OpenAI SDK', async () => {
605
- const adapter = new OpenAIAdapter({
606
- apiKey: 'test-key',
607
- model: 'gpt-4o'
608
- });
609
-
610
- const request: LlmGenerateRequest = {
611
- messages: [{ role: LlmRole.User, content: [{ type: 'text', text: 'Hi' }] }]
612
- };
613
-
614
- const response = await adapter.generate(request);
615
- expect(response.message).toBeDefined();
616
- });
617
-
618
- it('should support JSON mode', async () => {
619
- const adapter = new OpenAIAdapter(config);
620
- const request: LlmGenerateRequest = {
621
- messages: [...],
622
- responseFormat: { type: 'json_object' }
623
- };
624
-
625
- const mockCreate = vi.spyOn(openai.chat.completions, 'create');
626
- await adapter.generate(request);
627
-
628
- expect(mockCreate).toHaveBeenCalledWith(
629
- expect.objectContaining({
630
- response_format: { type: 'json_object' }
631
- })
632
- );
633
- });
634
- });
635
- ```
636
-
637
- ### 3.2.2 OpenAI 메시지 변환기
638
-
639
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
640
- | ------- | --------------------------- | ---- | ------------------- | ------------------------------------------------------- |
641
- | 3.2.2.1 | `toOpenAiMessages()` 변환 | ✅ | `converter.test.ts` | 4 role (system/user/assistant/tool) + 혼합 content 처리 |
642
- | 3.2.2.2 | System 메시지 순서 처리 | ✅ | `converter.test.ts` | systemInstruction → 첫 번째 system 메시지로 prepend |
643
- | 3.2.2.3 | 이미지 URL/base64 처리 | ✅ | `converter.test.ts` | URL 직접 전달, base64→data URI 변환 |
644
- | 3.2.2.4 | `toOpenAiTools()` 변환 | ✅ | `converter.test.ts` | `{ type: 'function', function: {...} }` 래핑 |
645
- | 3.2.2.5 | `fromOpenAiResponse()` 변환 | ✅ | `converter.test.ts` | text, tool_calls, usage, cached_tokens 추출 |
646
- | 3.2.2.6 | JSON mode 매핑 | ✅ | `converter.test.ts` | `responseFormat: 'json'` → `{ type: 'json_object' }` |
647
-
648
- **TDD 시나리오**:
649
-
650
- ```typescript
651
- describe('OpenAI Message Converter', () => {
652
- it('should place system message first', () => {
653
- const messages: LlmMessage[] = [
654
- { role: LlmRole.User, content: [{ type: 'text', text: 'Hi' }] },
655
- { role: LlmRole.System, content: [{ type: 'text', text: 'Be helpful' }] },
656
- ];
657
-
658
- const openaiMessages = toOpenAIMessages(messages);
659
-
660
- expect(openaiMessages[0].role).toBe('system');
661
- expect(openaiMessages[1].role).toBe('user');
662
- });
663
-
664
- it('should convert image URL directly', () => {
665
- const message: LlmMessage = {
666
- role: LlmRole.User,
667
- content: [
668
- {
669
- type: 'image',
670
- source: { type: 'url', url: 'https://example.com/image.png' },
671
- },
672
- ],
673
- };
674
-
675
- const openaiMessage = toOpenAIMessage(message);
676
-
677
- expect(openaiMessage.content[0].type).toBe('image_url');
678
- expect(openaiMessage.content[0].image_url.url).toBe(
679
- 'https://example.com/image.png',
680
- );
681
- });
682
- });
683
- ```
684
-
685
- ### 3.2.3 OpenAI 스트림 변환기
686
-
687
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
688
- | ------- | --------------------------- | ---- | ------------------- | ------------------------------------------------------------------------------------ |
689
- | 3.2.3.1 | `convertStreamEvent()` 변환 | ✅ | `converter.test.ts` | text delta 5건 + tool call 8건 + finish 4건 + usage 4건 + 통합 2건 + 엣지 2건 = 25건 |
690
- | 3.2.3.2 | 텍스트 델타 처리 | ✅ | `converter.test.ts` | T1-T5: delta.content 비empty → TextDelta, null/empty/role-only 필터링 |
691
- | 3.2.3.3 | Tool call 델타 처리 | ✅ | `converter.test.ts` | T6-T13: index 기반 축적, 병렬 추적, finish_reason=tool_calls 시 일괄 발행 |
692
- | 3.2.3.4 | Usage 정보 추출 | ✅ | `converter.test.ts` | T18-T21: usage-only 최종 청크 → MessageEnd, cached_tokens 추출 |
693
-
694
- ### 3.2.4 OpenAI 에러 매핑
695
-
696
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
697
- | ------- | -------------------- | ---- | ----------------- | --------------------------------------------------------------------- |
698
- | 3.2.4.1 | OpenAI SDK 에러 분석 | ✅ | N/A (분석) | M3.2.A 사전작업에서 SDK d.ts 전수 분석 완료 |
699
- | 3.2.4.2 | Rate limit 에러 매핑 | ✅ | `adapter.test.ts` | 429→RateLimitError, Claude와 동일 패턴 |
700
- | 3.2.4.3 | Auth 에러 매핑 | ✅ | `adapter.test.ts` | 401/403→AuthenticationError |
701
- | 3.2.4.4 | 에러 변환 유틸 함수 | ✅ | `adapter.test.ts` | `classifyError()` — 8 status code + message heuristic + LlmError 보존 |
702
-
703
- **검증 기준**:
704
-
705
- - [x] OpenAI 기본 대화 동작
706
- - [x] OpenAI 스트리밍 동작 (M3.2.B — `convertStreamEvent` 25건 + adapter
707
- streaming 3건)
708
- - [x] OpenAI 도구 호출 동작
709
- - [x] OpenAI JSON mode 동작
710
-
711
- ---
712
-
713
- # M3.3: OpenAI-Compatible(vLLM/sLM) 어댑터 템플릿 (3일)
714
-
715
- > 📚 **설계서 참조**:
716
- > [03-technical-design.md §3.4 vLLM 및 OpenAI 호환 프로바이더 확장](../03-technical-design.md#34-vllm-및-기타-openai-호환-프로바이더-확장),
717
- > [05-implementation-plan.md §M3.3](../05-implementation-plan.md#m33-openai-compatiblevllmslm-어댑터-템플릿-3일)
718
-
719
- ## 목표
720
-
721
- vLLM, TGI, LM Studio 등 OpenAI 호환 API 지원
722
-
723
- ## 특화 고려사항
724
-
725
- - Custom baseUrl 지원
726
- - Custom headers 지원
727
- - 다양한 API Key 헤더 지원
728
- - 모델별 ChatTemplate 훅
729
-
730
- ## 작업 항목
731
-
732
- ### 3.3.0 사전 준비
733
-
734
- | ID | 작업 | 상태 | 테스트 파일 | 비고 |
735
- | ------- | ------------------------------------------------ | ---- | ------------------- | ----------------------------------------------------------------------------------------------------------- |
736
- | 3.3.0.1 | ProviderRegistry에 OpenAI-Compatible 팩토리 등록 | ✅ | `bootstrap.test.ts` | `bootstrapOpenAiCompatibleProvider()` — has() guard, `LLM_CUSTOM_HEADERS`/`LLM_API_KEY_HEADER` env var 지원 |
737
-
738
- ### 3.3.1 OpenAICompatibleAdapter 구현
739
-
740
- | ID | 작업 | 상태 | 테스트 파일 |
741
- | ------- | -------------------------------- | ---- | ------------------- | ------------------------------------------------------------------- |
742
- | 3.3.1.1 | `OpenAICompatibleAdapter` 클래스 | ✅ | `adapter.test.ts` | BaseAdapter + OpenAiAdapter 상속, providerName='openai-compatible' |
743
- | 3.3.1.2 | `OpenAIAdapter` 상속 | ✅ | `adapter.test.ts` | `extends OpenAiAdapter` — converter/classifyError/generate\* 재사용 |
744
- | 3.3.1.3 | `baseUrl` 설정 지원 | ✅ | `bootstrap.test.ts` | OpenAI SDK `baseURL` 옵션으로 전달 |
745
- | 3.3.1.4 | Custom headers 지원 | ✅ | `bootstrap.test.ts` | `LLM_CUSTOM_HEADERS` env var (JSON) → SDK `defaultHeaders` |
746
- | 3.3.1.5 | `apiKeyHeaderName` 지원 | ✅ | `bootstrap.test.ts` | `LLM_API_KEY_HEADER` env var → custom auth header |
747
- | 3.3.1.6 | 연결 테스트 메서드 | ✅ | `adapter.test.ts` | `testConnection()` — HTTP응답=true, 네트워크에러=false |
748
-
749
- **TDD 시나리오**:
750
-
751
- ```typescript
752
- describe('OpenAICompatibleAdapter', () => {
753
- it('should use custom baseUrl', async () => {
754
- const adapter = new OpenAICompatibleAdapter({
755
- baseUrl: 'http://localhost:8000/v1',
756
- model: 'meta-llama/Llama-3.1-8B-Instruct',
757
- });
758
-
759
- const mockFetch = vi.spyOn(global, 'fetch');
760
- await adapter.generate(request);
761
-
762
- expect(mockFetch).toHaveBeenCalledWith(
763
- expect.stringContaining('http://localhost:8000/v1'),
764
- expect.any(Object),
765
- );
766
- });
767
-
768
- it('should support custom API key header', async () => {
769
- const adapter = new OpenAICompatibleAdapter({
770
- baseUrl: 'http://localhost:8000/v1',
771
- apiKey: 'my-key',
772
- apiKeyHeaderName: 'X-Custom-Auth',
773
- });
774
-
775
- const mockFetch = vi.spyOn(global, 'fetch');
776
- await adapter.generate(request);
777
-
778
- expect(mockFetch).toHaveBeenCalledWith(
779
- expect.any(String),
780
- expect.objectContaining({
781
- headers: expect.objectContaining({
782
- 'X-Custom-Auth': 'my-key',
783
- }),
784
- }),
785
- );
786
- });
787
- });
788
- ```
789
-
790
- ### 3.3.2 모델별 템플릿 훅
791
-
792
- | ID | 작업 | 상태 | 테스트 파일 |
793
- | ------- | -------------------------- | ---- | ----------------------- | ------------------------------------------------------------------ |
794
- | 3.3.2.1 | `PromptBuilder` 인터페이스 | ✅ | `promptBuilder.test.ts` | `formatPrompt()` 메서드 — 확장 포인트 |
795
- | 3.3.2.2 | Llama3 ChatTemplate | ✅ | `promptBuilder.test.ts` | `Llama3PromptBuilder` + model hook(`createPromptBuilderForModel`) |
796
- | 3.3.2.3 | Mistral ChatTemplate | ✅ | `promptBuilder.test.ts` | `MistralPromptBuilder` + model hook(`createPromptBuilderForModel`) |
797
- | 3.3.2.4 | 범용 ChatML 템플릿 | ✅ | `promptBuilder.test.ts` | `ChatMLPromptBuilder` — `<\|im_start\|>/<\|im_end\|>` 토큰 |
798
-
799
- ### 3.3.3 호환성 시나리오 테스트
800
-
801
- | ID | 작업 | 상태 | 테스트 파일 |
802
- | ------- | ----------------------- | ---- | ----------------------- | -------------------------------------------------------------- |
803
- | 3.3.3.1 | vLLM 호환성 테스트 | ✅ | `compatibility.test.ts` | chat completion + streaming + error + no apiKey (4 tests) |
804
- | 3.3.3.2 | TGI 호환성 테스트 | ✅ | `compatibility.test.ts` | chat completion + streaming + error (3 tests) |
805
- | 3.3.3.3 | LM Studio 호환성 테스트 | ✅ | `compatibility.test.ts` | chat completion + streaming (2 tests) |
806
- | 3.3.3.4 | Ollama 호환성 테스트 | ✅ | `compatibility.test.ts` | chat completion + streaming + missing usage graceful (3 tests) |
807
-
808
- **검증 기준**:
809
-
810
- - [x] vLLM 기본 대화 동작
811
- - [x] Custom baseUrl 동작
812
- - [x] Custom headers 동작
813
-
814
- ---
815
-
816
- # M3.4: 통합 테스트/문서/안정화 — ⚡ 부분 선행
817
-
818
- > 📚 **설계서 참조**:
819
- > [04-integration-design.md §4.2 연동 아키텍처](../04-integration-design.md#42-연동-아키텍처)
820
- > (통합 테스트 시나리오),
821
- > [05-implementation-plan.md §5.5 테스트 및 검증](../05-implementation-plan.md#55-테스트-및-검증),
822
- > [§M3.4](../05-implementation-plan.md#m34-통합-테스트문서안정화-5-7일)
823
- >
824
- > ⚡ **실행 순서**: M3.4.A (선행) → M3.3 → M3.4.B (잔여)
825
- >
826
- > **선행 범위**: Gemini/Claude/OpenAI (3 providers) 기반 통합 테스트 및 문서화
827
- > **M3.3 의존 항목**: vLLM E2E 테스트, OpenAI-Compatible 문서 상세화
828
-
829
- ## 목표
830
-
831
- 멀티 프로바이더 통합 검증 및 문서화 (Phase: 3 providers → 4 providers)
832
-
833
- ---
834
-
835
- ## M3.4.A: 선행 가능 항목 (3-Provider Integration)
836
-
837
- > **전제 조건**: M3.0 ✅, M3.1 ✅, M3.2 ✅
838
- >
839
- > **작업 기간**: 3-4일
840
-
841
- ## 작업 항목
842
-
843
- ### 3.4.1 멀티 프로바이더 통합 테스트
844
-
845
- | ID | 작업 | 상태 | 테스트 파일 | M3.3 의존 |
846
- | ------- | --------------------------- | ---- | ----------------------------------- | --------- |
847
- | 3.4.1.1 | 프로바이더 전환 테스트 | ✅ | `multiProvider.integration.test.ts` | ❌ |
848
- | 3.4.1.2 | 동시 프로바이더 사용 테스트 | ✅ | `multiProvider.integration.test.ts` | ❌ |
849
- | 3.4.1.3 | 설정 검증 통합 테스트 | ✅ | `providerConfigIntegration.test.ts` | ❌ |
850
- | 3.4.1.4 | 에러 처리 통합 테스트 | ✅ | `errorHandling.integration.test.ts` | ❌ |
851
-
852
- ### 3.4.2 E2E 테스트 시나리오
853
-
854
- | ID | 작업 | 상태 | 테스트 파일 | M3.3 의존 |
855
- | ------- | ---------------------- | ---- | ------------------------ | ----------- |
856
- | 3.4.2.1 | Gemini E2E 테스트 | ✅ | `multi-provider.test.ts` | ❌ |
857
- | 3.4.2.2 | Claude E2E 테스트 | ✅ | `multi-provider.test.ts` | ❌ |
858
- | 3.4.2.3 | OpenAI E2E 테스트 | ✅ | `multi-provider.test.ts` | ❌ |
859
- | 3.4.2.4 | vLLM E2E 테스트 (선택) | ⬜ | E2E | ✅ → M3.4.B |
860
-
861
- **E2E 테스트 매트릭스 (M3.4.A 선행 범위)**:
862
-
863
- | 시나리오 | Gemini | Claude | OpenAI | vLLM (M3.4.B) |
864
- | ------------- | ------ | ------ | ------ | ------------- |
865
- | 기본 대화 | ✅ | ✅ | ✅ | ⏳ M3.3 후 |
866
- | 스트리밍 대화 | ✅ | ✅ | ✅ | ⏳ M3.3 후 |
867
- | 도구 호출 | ✅ | ✅ | ✅ | ⏳ M3.3 후 |
868
- | 이미지 입력 | ⬜ | ⬜ | ⬜ | ⏳ M3.3 후 |
869
- | 에러 처리 | ✅ | ✅ | ✅ | ⏳ M3.3 후 |
870
-
871
- ### 3.4.3 성능 회귀 테스트 (3-Provider Baseline)
872
-
873
- | ID | 작업 | 상태 | 테스트 파일 | M3.3 의존 |
874
- | ------- | ------------------------- | ---- | ----------------------------------------- | --------- |
875
- | 3.4.3.1 | 응답 지연 벤치마크 | ✅ | `providers/__tests__/performance.test.ts` | ❌ |
876
- | 3.4.3.2 | 스트리밍 첫 토큰 벤치마크 | ✅ | `providers/__tests__/performance.test.ts` | ❌ |
877
- | 3.4.3.3 | 메모리 사용량 프로파일링 | ✅ | `providers/__tests__/performance.test.ts` | ❌ |
878
- | 3.4.3.4 | 번들 크기 분석 | ✅ | `providers/__tests__/bundleSize.test.ts` | ❌ |
879
-
880
- **성능 기준**:
881
-
882
- - 응답 지연 증가 < 50ms
883
- - 스트리밍 첫 토큰 지연 < 100ms
884
- - 메모리 증가 < 10%
885
- - 번들 크기 증가 < 500KB
886
-
887
- ### 3.4.4 문서 업데이트 (3-Provider + vLLM Placeholder)
888
-
889
- | ID | 작업 | 상태 | 산출물 | M3.3 의존 |
890
- | ------- | --------------------- | ---- | ----------------------- | --------- |
891
- | 3.4.4.1 | 사용자 가이드 작성 | ✅ | `docs/providers.md` | 🔶 |
892
- | 3.4.4.2 | API 레퍼런스 업데이트 | ✅ | `docs/api/` | ❌ |
893
- | 3.4.4.3 | 환경변수 문서화 | ✅ | `docs/configuration.md` | 🔶 |
894
- | 3.4.4.4 | 마이그레이션 가이드 | ✅ | `docs/migration.md` | ❌ |
895
- | 3.4.4.5 | README 업데이트 | ✅ | `README.md` | 🔶 |
896
-
897
- 🔶 = 3 providers 완전 문서화 + vLLM placeholder 포함, M3.4.B에서 상세화
898
-
899
- ### 3.4.5 안정화 작업 (3-Provider Scope)
900
-
901
- | ID | 작업 | 상태 | M3.3 의존 | 비고 |
902
- | ------- | ------------------ | ---- | --------- | -------------------------------------------------------------------------------------------------------------------------- |
903
- | 3.4.5.1 | 버그 수정 | ✅ | ❌ | non-Gemini provider + llm\* 메서드 불일치 가드 및 explicit error event 추가 |
904
- | 3.4.5.2 | 에지 케이스 처리 | ✅ | ❌ | llm stream throw 시 Error event 변환, model history 오염 방지 |
905
- | 3.4.5.3 | 에러 메시지 개선 | ✅ | ❌ | `PROVIDER_METHOD_MISMATCH`, `LLM_STREAM_FAILURE` 코드와 설명 메시지 추가 |
906
- | 3.4.5.4 | 로깅 개선 | ✅ | ❌ | debug mode에서 non-Gemini 경로 선택/stream throw 상황 로깅 |
907
- | 3.4.5.5 | 기능 플래그 정리 | ✅ | ❌ | featureFlag 테스트 재검증(16 PASS) + non-Gemini 경로 guard와 충돌 없는 동작 확인 |
908
- | 3.4.5.6 | 의존성 정합성 검증 | ✅ | ❌ | package/lockfile 검증, `npm ci --ignore-scripts` 성공, `npm run check:lockfile` PASS, bundle 내 anthropic/openai 포함 확인 |
909
-
910
- **M3.4.A 검증 기준** (선행 완료 조건):
911
-
912
- - [x] 멀티 프로바이더 통합 테스트 통과 (3.4.1.1~3.4.1.4)
913
- - [x] Gemini/Claude/OpenAI E2E 테스트 통과 (3.4.2.1~3.4.2.3)
914
- - [x] 성능 회귀 없음 (3-provider baseline 기준 내)
915
- - [x] 3-provider 문서 완성 (vLLM placeholder 포함)
916
- - [x] 의존성 검증 (`npm ci` 성공, esbuild bundle 포함 확인)
917
-
918
- ---
919
-
920
- ## M3.4.B: M3.3 의존 항목 (vLLM Integration)
921
-
922
- > **전제 조건**: M3.3 완료 (OpenAI-Compatible adapter)
923
- >
924
- > **작업 기간**: 1-2일
925
-
926
- ### 3.4.2 E2E 테스트 시나리오 (vLLM Subset)
927
-
928
- | ID | 작업 | 상태 | 테스트 파일 |
929
- | ------- | ---------------------- | ---- | ----------- |
930
- | 3.4.2.4 | vLLM E2E 테스트 (선택) | ⬜ | E2E |
931
-
932
- ### 3.4.4 문서 업데이트 (vLLM 상세화)
933
-
934
- | ID | 작업 | 상태 | 산출물 |
935
- | --------- | ------------------------ | ---- | ----------------------- |
936
- | 3.4.4.1-B | vLLM 섹션 상세화 | ✅ | `docs/providers.md` |
937
- | 3.4.4.3-B | LLM_BASE_URL 문서 상세화 | ✅ | `docs/configuration.md` |
938
- | 3.4.4.5-B | vLLM Quick Start 추가 | ✅ | `README.md` |
939
-
940
- **M3.4.B 검증 기준** (전체 M3.4 완료 조건):
941
-
942
- - [ ] vLLM E2E 테스트 통과 (또는 환경 의존 skip 처리)
943
- - [x] vLLM 문서 완성 (placeholder → full docs)
944
- - [ ] 전체 M3.4 완료 (M3.4.A + M3.4.B)
945
-
946
- ---
947
-
948
- # M3.5: 테스트 마이그레이션 (3-4일) [v0.2 신규]
949
-
950
- > 📚 **설계서 참조**:
951
- > [05-implementation-plan.md §5.5 테스트 및 검증](../05-implementation-plan.md#55-테스트-및-검증)
952
- > (테스트 전략),
953
- > [03-technical-design.md §3.1 타입 시스템](../03-technical-design.md#31-프로바이더-독립적-타입-시스템)
954
- > (Mock 타입 전환 참조)
955
-
956
- ## 목표
957
-
958
- Gemini 특화 테스트를 프로바이더 중립적 테스트로 전환
959
-
960
- ## 배경
961
-
962
- Phase 2에서 리팩토링된 코드에 대응하여 기존 테스트도 함께 마이그레이션 필요
963
-
964
- ## 작업 항목
965
-
966
- ### 3.5.1 테스트 파일 분석
967
-
968
- | ID | 작업 | 상태 | 산출물 |
969
- | ------- | ----------------------------------- | ---- | ---------------- |
970
- | 3.5.1.1 | Gemini 특화 테스트 파일 식별 | ⬜ | 테스트 파일 목록 |
971
- | 3.5.1.2 | 테스트 내 @google/genai 의존성 분석 | ⬜ | 의존성 매트릭스 |
972
- | 3.5.1.3 | Mock 객체 Gemini 특화 여부 분석 | ⬜ | Mock 분석 문서 |
973
- | 3.5.1.4 | 테스트 수정 범위 산정 | ⬜ | 수정 범위 문서 |
974
-
975
- **분석 대상 테스트 파일** (실제 존재 확인됨):
976
-
977
- ```
978
- packages/core/src/
979
- ├── core/
980
- │ ├── contentGenerator.test.ts # GenerateContentParameters 의존
981
- │ ├── turn.test.ts # GeminiEventType 의존
982
- │ ├── geminiChat.test.ts # Gemini 응답/스트리밍 의존 🆕
983
- │ ├── baseLlmClient.test.ts # 🆕 baseLlmClient 의존
984
- │ ├── loggingContentGenerator.test.ts # 래퍼 클래스
985
- │ ├── recordingContentGenerator.test.ts # 래퍼 클래스
986
- │ └── fakeContentGenerator.test.ts # Mock 구현
987
- ├── services/
988
- │ └── modelConfigService.test.ts # GenerateContentConfig 의존
989
- ├── routing/
990
- │ ├── modelRouterService.test.ts # 🆕 라우팅 레이어
991
- │ └── strategies/*.test.ts # 🆕 라우팅 전략
992
- └── utils/
993
- ├── tokenCalculation.test.ts # Part, Content 타입 의존
994
- └── partUtils.test.ts # Part 타입 의존
995
- ```
996
-
997
- ⚠️ **주의**: `session.test.ts`는 존재하지 않음 (원본 계획서 오류 수정됨)
998
-
999
- ### 3.5.2 테스트 마이그레이션 전략
1000
-
1001
- | ID | 작업 | 상태 | 테스트 파일 |
1002
- | ------- | ------------------------- | ---- | ------------------------------- |
1003
- | 3.5.2.1 | 공통 Mock Factory 설계 | ⬜ | `testUtils/mockFactory.ts` |
1004
- | 3.5.2.2 | 프로바이더 중립 Mock 구현 | ⬜ | `testUtils/mockFactory.test.ts` |
1005
- | 3.5.2.3 | 프로바이더별 Mock 어댑터 | ⬜ | `testUtils/mockAdapters.ts` |
1006
- | 3.5.2.4 | 테스트 데이터 팩토리 | ⬜ | `testUtils/testDataFactory.ts` |
1007
-
1008
- **TDD 시나리오**:
1009
-
1010
- ```typescript
1011
- describe('MockFactory', () => {
1012
- it('should create provider-agnostic mock message', () => {
1013
- const mockMessage = MockFactory.createMessage({
1014
- role: LlmRole.User,
1015
- text: 'Hello',
1016
- });
1017
-
1018
- expect(mockMessage.role).toBe(LlmRole.User);
1019
- expect(mockMessage.content[0].type).toBe('text');
1020
- });
1021
-
1022
- it('should create provider-specific response via adapter', () => {
1023
- const genericResponse = MockFactory.createResponse({ text: 'Hi' });
1024
-
1025
- // Gemini용 변환
1026
- const geminiResponse = MockAdapters.toGemini(genericResponse);
1027
- expect(geminiResponse).toHaveProperty('candidates');
1028
-
1029
- // Claude용 변환
1030
- const claudeResponse = MockAdapters.toClaude(genericResponse);
1031
- expect(claudeResponse).toHaveProperty('content');
1032
- });
1033
- });
1034
- ```
1035
-
1036
- ### 3.5.3 테스트 파일 마이그레이션
1037
-
1038
- | ID | 작업 | 상태 | 우선순위 |
1039
- | ------- | ------------------------------------------- | ---- | -------- |
1040
- | 3.5.3.1 | `contentGenerator.test.ts` 마이그레이션 | ⬜ | 높음 |
1041
- | 3.5.3.2 | `turn.test.ts` 마이그레이션 | ⬜ | 높음 |
1042
- | 3.5.3.3 | `geminiChat.test.ts` 마이그레이션 | ⬜ | 높음 |
1043
- | 3.5.3.4 | `baseLlmClient.test.ts` 마이그레이션 | ⬜ | 중간 |
1044
- | 3.5.3.5 | `modelConfigService.test.ts` 마이그레이션 | ⬜ | 중간 |
1045
- | 3.5.3.6 | `tokenCalculation.test.ts` 마이그레이션 | ⬜ | 낮음 |
1046
- | 3.5.3.7 | `partUtils.test.ts` 마이그레이션 | ⬜ | 낮음 |
1047
- | 3.5.3.8 | `routing/*.test.ts` 마이그레이션 (7개 파일) | ⬜ | 중간 |
1048
-
1049
- **마이그레이션 패턴**:
1050
-
1051
- ```typescript
1052
- // Before: Gemini 특화 테스트
1053
- import type { GenerateContentResponse } from '@google/genai';
1054
-
1055
- const mockResponse: GenerateContentResponse = {
1056
- candidates: [{ content: { parts: [{ text: 'Hello' }] } }],
1057
- };
1058
-
1059
- // After: 프로바이더 중립 테스트
1060
- import { MockFactory } from '../../testUtils/mockFactory';
1061
-
1062
- const mockResponse = MockFactory.createResponse({ text: 'Hello' });
1063
- // GeminiAdapter 테스트시 GeminiMockAdapter로 변환
1064
- ```
1065
-
1066
- ### 3.5.4 크로스 프로바이더 테스트 수트
1067
-
1068
- | ID | 작업 | 상태 | 테스트 파일 |
1069
- | ------- | ------------------------ | ---- | ------------------------------------------- |
1070
- | 3.5.4.1 | 공통 테스트 케이스 정의 | ⬜ | `providers/__tests__/common.ts` |
1071
- | 3.5.4.2 | 파라미터화된 테스트 구현 | ⬜ | `providers/__tests__/crossProvider.test.ts` |
1072
- | 3.5.4.3 | 프로바이더별 테스트 실행 | ⬜ | CI/CD 설정 |
1073
-
1074
- **TDD 시나리오**:
1075
-
1076
- ```typescript
1077
- describe.each([
1078
- ['gemini', GeminiAdapter],
1079
- ['claude', ClaudeAdapter],
1080
- ['openai', OpenAIAdapter],
1081
- ])('%s adapter', (name, AdapterClass) => {
1082
- it('should convert user message correctly', () => {
1083
- const adapter = new AdapterClass(testConfig);
1084
- const message = MockFactory.createUserMessage('Hello');
1085
-
1086
- const converted = adapter.convertMessage(message);
1087
-
1088
- // 각 프로바이더별 검증
1089
- expect(converted).toMatchProviderSchema(name);
1090
- });
1091
-
1092
- it('should handle streaming events', async () => {
1093
- const adapter = new AdapterClass(testConfig);
1094
- const events: LlmStreamEvent[] = [];
1095
-
1096
- for await (const event of adapter.generateStream(request)) {
1097
- events.push(event);
1098
- }
1099
-
1100
- expect(events.some((e) => e.type === 'text_delta')).toBe(true);
1101
- });
1102
- });
1103
- ```
1104
-
1105
- **검증 기준**:
1106
-
1107
- - [ ] 모든 기존 테스트 마이그레이션 완료
1108
- - [ ] 공통 Mock Factory 동작 확인
1109
- - [ ] 크로스 프로바이더 테스트 통과
1110
- - [ ] 테스트 커버리지 유지 (≥80%)
1111
-
1112
- ---
1113
-
1114
- # PHASE 3 COMPLETION CHECKLIST
1115
-
1116
- ## Phase 2 연기 항목 해소 (M3.0) [v0.4 추가]
1117
-
1118
- - [x] `geminiChat.ts` → `providers/gemini/chat.ts` 물리적 이동 완료 (M3.0.1)
1119
- - [x] `turn.ts` Gemini 특화 로직 분리 완료 (M3.0.1)
1120
- - [x] root `index.ts` re-export 회귀 테스트 통과 (M3.0.1.5)
1121
- - [x] messageInspectors 4개 파일 마이그레이션 완료 (M3.0.2)
1122
- - [x] 텔레메트리 레이어 @google/genai 독립화 (M3.0.3)
1123
- - [x] LocalAgentExecutor GeminiChat 직접 결합 해소 (M3.0.3)
1124
- - [x] `geminiTypeConversion.ts` 브릿지 정리 완료 (M3.0.4)
1125
- - [x] `telemetry/sdk.ts` 시그널 핸들러 누수 수정 (M3.0.3)
1126
- - [ ] `createContentGenerator()` → ProviderFactory 런타임 연결 완료 (3.0.5)
1127
- - [ ] ProviderRegistry Gemini 팩토리 부트스트랩 동작 (3.0.5.4)
1128
- - [ ] 부트스트랩 중복 호출 안전성 검증 (3.0.5.4)
1129
- - [ ] 프로바이더 선택 우선순위 통합 및 7개 회귀 시나리오 통과 (3.0.5.5)
1130
-
1131
- ## Quality Gates
1132
-
1133
- - [ ] 모든 단위 테스트 통과
1134
- - [ ] 모든 통합 테스트 통과
1135
- - [ ] 모든 E2E 테스트 통과
1136
- - [ ] TypeScript 컴파일 에러 없음
1137
- - [ ] ESLint 경고 없음
1138
-
1139
- ## 성능 검증
1140
-
1141
- - [ ] 응답 지연 증가 < 50ms
1142
- - [ ] 스트리밍 첫 토큰 지연 < 100ms
1143
- - [ ] 메모리 사용량 증가 < 10%
1144
- - [ ] 번들 크기 증가 < 500KB
1145
-
1146
- ## 기능 검증
1147
-
1148
- - [ ] Gemini 기존 기능 100% 동작
1149
- - [ ] Claude 핵심 기능 동작
1150
- - [ ] OpenAI 핵심 기능 동작
1151
- - [ ] OpenAI-Compatible 기본 동작
1152
-
1153
- ## 산출물 확인
1154
-
1155
- - [ ] `packages/core/src/providers/gemini/chat.ts` 이동 완료 (M3.0)
1156
- - [ ] `packages/core/src/providers/gemini/turn.ts` 분리 완료 (M3.0)
1157
- - [ ] `packages/core/src/providers/claude/` 디렉토리 생성
1158
- - [ ] `packages/core/src/providers/openai/` 디렉토리 생성
1159
- - [ ] `packages/core/src/providers/openai-compatible/` 디렉토리 생성
1160
- - [ ] `@anthropic-ai/sdk`, `openai` 의존성 설치 및 lockfile 동기화
1161
- - [ ] ProviderRegistry에 4개 팩토리 등록 (gemini, claude, openai,
1162
- openai-compatible)
1163
- - [ ] 사용자 문서 완성
1164
- - [ ] API 레퍼런스 완성
1165
-
1166
- ## 테스트 마이그레이션 검증 [v0.2 추가]
1167
-
1168
- - [ ] 모든 기존 테스트 파일 마이그레이션 완료
1169
- - [ ] 공통 Mock Factory 구현 및 테스트 통과
1170
- - [ ] 프로바이더별 Mock 어댑터 동작 확인
1171
- - [ ] 크로스 프로바이더 테스트 수트 통과
1172
- - [ ] 테스트 커버리지 ≥80% 유지
1173
-
1174
- ---
1175
-
1176
- # RELEASE PLAN
1177
-
1178
- ## 버전 출시 계획
1179
-
1180
- | 버전 | 포함 내용 | 시점 |
1181
- | ------------ | --------------------------------- | ----------------- |
1182
- | 0.28.0-alpha | GeminiAdapter + 타입 전환 | Phase 2 완료 후 |
1183
- | 0.28.0-beta | Claude/OpenAI + OpenAI-Compatible | Phase 3 일부 완료 |
1184
- | 0.28.0 | 안정화/문서/테스트 | Phase 3 종료 후 |
1185
-
1186
- ## 기능 플래그 관리
1187
-
1188
- ```typescript
1189
- // 점진적 활성화
1190
- ENABLE_MULTI_PROVIDER=false # 기본값: 기존 동작
1191
- ENABLE_MULTI_PROVIDER=true # 신규 아키텍처 활성화
1192
- ```
1193
-
1194
- ## 롤백 계획
1195
-
1196
- 1. 문제 발생 시 `ENABLE_MULTI_PROVIDER=false` 설정
1197
- 2. 기존 Gemini 전용 경로로 즉시 폴백
1198
- 3. 이슈 분석 및 수정 후 재배포
1199
-
1200
- ---
1201
-
1202
- # DEPENDENCY MANAGEMENT
1203
-
1204
- ## 신규 의존성
1205
-
1206
- ```json
1207
- {
1208
- "dependencies": {
1209
- "@anthropic-ai/sdk": "^0.30.0",
1210
- "openai": "^4.70.0"
1211
- }
1212
- }
1213
- ```
1214
-
1215
- ## 번들 최적화
1216
-
1217
- ```typescript
1218
- // Dynamic import로 번들 크기 관리
1219
- const ClaudeAdapter = await import('./claude/adapter');
1220
- const OpenAIAdapter = await import('./openai/adapter');
1221
- ```
1222
-
1223
- ---
1224
-
1225
- # NOTES
1226
-
1227
- ## 프로바이더별 주의사항
1228
-
1229
- ### Claude
1230
-
1231
- - System 메시지는 별도 파라미터로 전달
1232
- - 이미지 URL은 base64로 변환 필수
1233
- - tool delta 합성 필요
1234
-
1235
- ### OpenAI
1236
-
1237
- - System 메시지는 첫 번째 위치
1238
- - JSON mode 지원
1239
- - 이미지 URL 직접 지원
1240
-
1241
- ### OpenAI-Compatible
1242
-
1243
- - baseUrl 설정 필수
1244
- - 모델별 capability 차이 존재
1245
- - 일부 기능 미지원 가능
1246
-
1247
- ## TDD 원칙
1248
-
1249
- 1. 각 프로바이더별 변환 함수 테스트 우선
1250
- 2. 스트리밍 합성 테스트 필수
1251
- 3. 에러 매핑 테스트 필수
1252
-
1253
- ## 참고 문서
1254
-
1255
- - [03-technical-design.md](../03-technical-design.md)
1256
- - [04-integration-design.md](../04-integration-design.md)
1257
- - [05-implementation-plan.md](../05-implementation-plan.md)
1258
-
1259
- ---
1260
-
1261
- # CHANGE LOG
1262
-
1263
- ## v0.8 (리뷰 3건 반영)
1264
-
1265
- - **이슈 #1 [Medium] — 중복 등록 안전성**:
1266
- - M3.0.5.4 비고 보강: `registry.register()` 중복 호출 시 예외 발생
1267
- (registry.ts:81) — `has()` 가드/force 정책/초기화 위치 3가지 방안 명시
1268
- - 테스트 파일에 `contentGenerator.test.ts` 추가 (런타임 부트스트랩 검증)
1269
- - 부트스트랩 코드 예시(`has()` 가드 권장 패턴) 추가
1270
- - M3.1.0.2/M3.2.0.2/M3.3.0.1에 동일 가드 패턴 적용 주석 추가
1271
- - 검증 기준/Completion Checklist에 "중복 호출 안전성" 항목 추가
1272
- - **이슈 #2 [Medium] — 런타임 wiring 테스트 타깃 보강**:
1273
- - M3.0.5.2 테스트 파일: `providerConfigIntegration.test.ts` →
1274
- `contentGenerator.test.ts`, `providerConfigIntegration.test.ts` (복수)
1275
- - 비고에 "실제 런타임 분기점은 `createContentGenerator()` (L167)" 명시
1276
- - M3.0.5.4 테스트 파일에 `contentGenerator.test.ts` 추가
1277
- - **이슈 #3 [Low] — `--provider` CLI 옵션 미존재 명확화**:
1278
- - 우선순위 표 1순위: `--provider claude` → `providerName: 'claude'` (내부 API
1279
- 수준)
1280
- - Q7 Open Question 신규: CLI `--provider` 옵션 노출 여부 (잠정: 환경변수로
1281
- 충분)
1282
- - 비고에 "CLI `--provider` 옵션은 미존재 — Q7 참조" 추가
1283
-
1284
- ## v0.7 (리뷰 4건 반영)
1285
-
1286
- - **이슈 #1 [High] — 레지스트리 등록 누락**:
1287
- - M3.0.5.4 신규: ProviderRegistry Gemini 팩토리 부트스트랩 구현
1288
- - M3.0.5.5 신규: 프로바이더 선택 우선순위 통합 (5단계 우선순위 표 + 7개 회귀
1289
- 시나리오)
1290
- - M3.1.0.2 신규: `register('claude', ...)` 작업 추가
1291
- - M3.2.0.2 신규: `register('openai', ...)` 작업 추가
1292
- - M3.3.0.1 신규: `register('openai-compatible', ...)` 작업 추가
1293
- - **이슈 #2 [Medium] — root index.ts export 테스트 부재**:
1294
- - M3.0.1.5 신규: root `index.ts` re-export 회귀 테스트 추가 (현재 placeholder)
1295
- - 검증 기준 및 Completion Checklist에 CLI import 호환성 항목 추가
1296
- - **이슈 #3 [Medium] — 프로바이더 선택 우선순위 충돌**:
1297
- - M3.0.5.5에 통합 우선순위 표(5단계) 및 회귀 테스트(7시나리오) 추가
1298
- - 2개 분리 시스템(contentGenerator authType vs providerSelector LLM_PROVIDER)
1299
- 충돌 명시
1300
- - **이슈 #4 [Low] — 의존성 설치 작업 누락**:
1301
- - M3.1.0.1 신규: `@anthropic-ai/sdk` 설치 작업
1302
- - M3.2.0.1 신규: `openai` SDK 설치 작업
1303
- - M3.4.5.6 신규: 의존성 정합성 검증 (lockfile, npm ci, 번들링)
1304
- - 산출물 확인에 의존성/레지스트리 항목 추가
1305
-
1306
- ## v0.6 (코드 기반 검증 반영)
1307
-
1308
- - **geminiChat.ts 라인 수**: 988 → 999라인 정정
1309
- - **turn.ts 분석 정정**: "공통 인터페이스 core 유지" → Turn 클래스 전체가
1310
- Gemini-specific (324라인, GeminiChat 생성자 의존)
1311
- - **loopDetectionService.ts 라인 번호**: L444/452/473 → L408/416/437 정정
1312
- - **loggingContentGenerator import 수**: "8+" → "11개 SDK 타입" (L7-18 상세)
1313
- 정정
1314
- - **contentGenerator.ts 라인 범위**: "220~250" → "167-259 (GoogleGenAI 생성:
1315
- L235)" 정정
1316
- - **LocalAgentExecutor 결합 상세**: L753 직접 생성자 호출 + 3개 메서드 하드코딩
1317
- 명시
1318
- - **ENABLE_MULTI_PROVIDER 제어 범위**: adapterBridge에서만 제어,
1319
- contentGenerator 미연결 명시
1320
- - **import 변경 파일 수**: geminiChat 13개 + turn 10개 = 23개 파일 명시
1321
- - **핸드오프 문서 동기화**: phase3_handoff.md의 라인 번호/수치도 동일 정정
1322
-
1323
- ## v0.5 (리뷰 5건 반영)
1324
-
1325
- - **이슈 #1 [High]**: M3.0.5 신규 — 런타임 실행 경로 연결 (contentGenerator.ts →
1326
- ProviderFactory 연결 3개 작업)
1327
- - **이슈 #2 [High]**: phase3_handoff.md 마일스톤 순서 — 최신 계획서와의 매핑
1328
- 주석 및 H-1~H-5 라벨 추가
1329
- - **이슈 #3 [Medium]**: 테스트 파일명 3건 수정 — `localAgentExecutor.test.ts` →
1330
- `local-executor.test.ts`, `telemetry/types.test.ts` → `telemetry/sdk.test.ts`,
1331
- `exports.test.ts` → `providers/gemini/exports.test.ts`
1332
- - **이슈 #4 [Medium]**: 일정 산정 — Phase 3 기간 3-4주 → 4-6주, 전체 일정 8-10주
1333
- → 9-12주 (M3.0 추가분 반영)
1334
- - **이슈 #5 [Medium]**: Q5/Q6 의존성 명시 — M3.0.3.3/3.0.3.4에 Open Question
1335
- 의존성 주석 추가, 사전 결정 필요 사항 테이블 추가
1336
- - **검증 기준 보강**: 런타임 연결 검증 2건 추가, Completion Checklist에 3.0.5
1337
- 추가
1338
-
1339
- ## v0.4 (Phase 2 연기 항목 반영)
1340
-
1341
- - **M3.0 신규 추가**: Phase 2 연기 항목 해소 — Gemini 내부 리팩토링 (3-5일)
1342
- - 3.0.1: geminiChat.ts/turn.ts 물리적 이동 (핸드오프 Critical #3, #4)
1343
- - 3.0.2: messageInspectors 마이그레이션 4파일 (핸드오프 High #5)
1344
- - 3.0.3: 텔레메트리/Agent 레이어 독립화 (핸드오프 High #6, #7 + M2.7 + Medium
1345
- #12)
1346
- - 3.0.4: 변환 브릿지 정리 (핸드오프 Medium #11)
1347
- - **전제 조건 갱신**: Phase 2 완료(✅), EventType 전환 완료(✅) 반영
1348
- - **핸드오프 추적 테이블 추가**: 12개 연기 항목 + M2.7의 해소 상태 및 배정 위치
1349
- 추적
1350
- - **설계서 참조 확대**: phase3_handoff.md, EventType 전환 결과서 추가
1351
- - **산출물 갱신**: providers/gemini/chat.ts, turn.ts 이동 반영
1352
- - **Completion Checklist 보강**: M3.0 해소 항목 7건 추가, 산출물에
1353
- chat.ts/turn.ts 추가
1354
- - **배경**: Phase 2 핸드오프 Critical #1, #2는 M2.연기(EventType 전환)에서 이미
1355
- 해소됨. 나머지 10개 항목을 M3.0에 체계적으로 배정
1356
-
1357
- ## v0.3 (2차 리뷰 반영)
1358
-
1359
- - **산출물 디렉토리 구조 수정**: `eventMapper.ts` 추가로 마스터 플랜과 일관성
1360
- 확보
1361
- - **테스트 파일 목록 정정**:
1362
- - `session.test.ts` 제거 (존재하지 않는 파일)
1363
- - `geminiChat.test.ts`, `baseLlmClient.test.ts` 추가 (실제 존재 파일)
1364
- - `routing/*.test.ts` 7개 파일 추가
1365
- - **3.5.3 테스트 마이그레이션 작업 확대**: 6개 → 8개 항목
1366
-
1367
- ## v0.2 (소스코드 기반 리뷰 반영)
1368
-
1369
- - **M3.5 신규 추가**: 테스트 마이그레이션 마일스톤 (3-4일)
1370
- - 3.5.1: 테스트 파일 분석 (Gemini 특화 테스트 식별)
1371
- - 3.5.2: 테스트 마이그레이션 전략 (Mock Factory, 어댑터)
1372
- - 3.5.3: 테스트 파일 마이그레이션 (우선순위별)
1373
- - 3.5.4: 크로스 프로바이더 테스트 수트
1374
- - **완료 체크리스트 보강**: 테스트 마이그레이션 검증 항목 추가
1375
- - **배경**: Phase 2 리팩토링에 따른 테스트 코드 동기화 필요성 반영
1376
-
1377
- ## v0.1 (초기 버전)
1378
-
1379
- - M3.1: Claude 어댑터/변환기 구현 (4-5일)
1380
- - M3.2: OpenAI 어댑터/변환기 구현 (3-4일)
1381
- - M3.3: OpenAI-Compatible 어댑터 템플릿 (3일)
1382
- - M3.4: 통합 테스트/문서/안정화 (5-7일)