@didim365/agent-cli-core 0.1.1 → 0.1.3

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 (1081) hide show
  1. package/dist/src/core/apiKeyCredentialStorage.d.ts +23 -3
  2. package/dist/src/core/apiKeyCredentialStorage.js +56 -16
  3. package/dist/src/core/apiKeyCredentialStorage.js.map +1 -1
  4. package/dist/src/generated/git-commit.d.ts +1 -1
  5. package/dist/src/generated/git-commit.js +1 -1
  6. package/package.json +6 -2
  7. package/dist/docs/00_project/ai_adapter/01-overview.md +0 -172
  8. package/dist/docs/00_project/ai_adapter/02-architecture.md +0 -448
  9. package/dist/docs/00_project/ai_adapter/03-technical-design.md +0 -1470
  10. package/dist/docs/00_project/ai_adapter/04-integration-design.md +0 -1934
  11. package/dist/docs/00_project/ai_adapter/05-implementation-plan.md +0 -336
  12. package/dist/docs/00_project/ai_adapter/06-didiaistudio-plan.md +0 -559
  13. package/dist/docs/00_project/ai_adapter/README.md +0 -145
  14. package/dist/docs/00_project/ai_adapter/agent_service_openapi.json +0 -1
  15. 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
  16. package/dist/docs/00_project/ai_adapter/event-mapping-matrix.md +0 -148
  17. package/dist/docs/00_project/ai_adapter/migration-plan.md +0 -205
  18. package/dist/docs/00_project/ai_adapter/template/00_vibecoding_workflow.md +0 -627
  19. package/dist/docs/00_project/ai_adapter/template/01_todolist_performance_template.md +0 -436
  20. package/dist/docs/00_project/ai_adapter/template/02_code_review_template.md +0 -248
  21. package/dist/docs/00_project/ai_adapter/template/03_work_result_report_template.md +0 -133
  22. package/dist/docs/00_project/ai_adapter/template/100_Python_Performance_Guide.md +0 -472
  23. package/dist/docs/00_project/ai_adapter/template/99_TDD_plan.md +0 -123
  24. package/dist/docs/00_project/ai_adapter/todolist/00_master_implementation_plan.md +0 -433
  25. package/dist/docs/00_project/ai_adapter/todolist/phase1_foundation_todolist.md +0 -726
  26. package/dist/docs/00_project/ai_adapter/todolist/phase2_core_refactoring_todolist.md +0 -974
  27. package/dist/docs/00_project/ai_adapter/todolist/phase3_handoff.md +0 -203
  28. package/dist/docs/00_project/ai_adapter/todolist/phase3_provider_extension_todolist.md +0 -1382
  29. package/dist/docs/00_project/ai_adapter/utility-migration.md +0 -237
  30. package/dist/docs/00_project/ai_adapter/working_history/.gitkeep +0 -0
  31. 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
  32. 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
  33. 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
  34. package/dist/docs/00_project/ai_adapter/working_history/Phase1_M1.3_Provider/354/204/240/355/203/235_20260206.md +0 -269
  35. 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
  36. 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
  37. 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
  38. 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
  39. package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.2_EventMapper/352/265/254/355/230/204_20260207.md +0 -372
  40. package/dist/docs/00_project/ai_adapter/working_history/Phase2_M2.3_GeminiAdapter/352/265/254/355/230/204_20260208.md +0 -205
  41. 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
  42. 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
  43. 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
  44. 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
  45. 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
  46. 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
  47. 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
  48. 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
  49. 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
  50. 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
  51. package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.1.1_ClaudeAdapter/352/265/254/355/230/204_20260209.md +0 -225
  52. 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
  53. 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
  54. package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.1.4_ClaudeErrorMapping_20260209.md +0 -98
  55. package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.2.A_OpenAIAdapterCore_20260210.md +0 -264
  56. package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.2.B_OpenAIStreamConverter_20260210.md +0 -204
  57. 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
  58. package/dist/docs/00_project/ai_adapter/working_history/Phase3_M3.3_OpenAICompatibleAdapter_20260211.md +0 -251
  59. 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
  60. 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
  61. 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
  62. 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
  63. 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
  64. package/dist/docs/00_project/ai_adapter/working_history/phase2_tradeoff_EventType/354/240/204/355/231/230_20260208.md +0 -286
  65. package/dist/docs/00_project/white_labeling/template/00_vibecoding_workflow.md +0 -627
  66. package/dist/docs/00_project/white_labeling/template/01_todolist_performance_template.md +0 -400
  67. package/dist/docs/00_project/white_labeling/template/02_code_review_template.md +0 -248
  68. package/dist/docs/00_project/white_labeling/template/03_work_result_report_template.md +0 -133
  69. package/dist/docs/00_project/white_labeling/template/100_Python_Performance_Guide.md +0 -472
  70. package/dist/docs/00_project/white_labeling/template/99_TDD_plan.md +0 -123
  71. 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
  72. 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
  73. package/dist/docs/00_project/white_labeling//354/225/261/352/265/254/354/241/260.md +0 -310
  74. package/dist/docs/CONTRIBUTING.md +0 -554
  75. package/dist/docs/ai_adapter/01-overview.md +0 -155
  76. package/dist/docs/ai_adapter/02-architecture.md +0 -452
  77. package/dist/docs/ai_adapter/03-technical-design.md +0 -1470
  78. package/dist/docs/ai_adapter/04-integration-design.md +0 -1904
  79. package/dist/docs/ai_adapter/05-implementation-plan.md +0 -312
  80. package/dist/docs/ai_adapter/06-didiaistudio-plan.md +0 -559
  81. package/dist/docs/ai_adapter/README.md +0 -118
  82. package/dist/docs/ai_adapter/agent_service_openapi.json +0 -1
  83. 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
  84. package/dist/docs/ai_adapter/event-mapping-matrix.md +0 -140
  85. package/dist/docs/ai_adapter/migration-plan.md +0 -205
  86. package/dist/docs/ai_adapter/template/00_vibecoding_workflow.md +0 -636
  87. package/dist/docs/ai_adapter/template/01_todolist_performance_template.md +0 -372
  88. package/dist/docs/ai_adapter/template/02_code_review_template.md +0 -220
  89. package/dist/docs/ai_adapter/template/03_work_result_report_template.md +0 -120
  90. package/dist/docs/ai_adapter/template/100_Python_Performance_Guide.md +0 -453
  91. package/dist/docs/ai_adapter/template/99_TDD_plan.md +0 -111
  92. package/dist/docs/ai_adapter/todolist/00_master_implementation_plan.md +0 -433
  93. package/dist/docs/ai_adapter/todolist/phase1_foundation_todolist.md +0 -726
  94. package/dist/docs/ai_adapter/todolist/phase2_core_refactoring_todolist.md +0 -974
  95. package/dist/docs/ai_adapter/todolist/phase3_handoff.md +0 -203
  96. package/dist/docs/ai_adapter/todolist/phase3_provider_extension_todolist.md +0 -1382
  97. package/dist/docs/ai_adapter/utility-migration.md +0 -237
  98. package/dist/docs/ai_adapter/working_history/.gitkeep +0 -0
  99. 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
  100. 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
  101. package/dist/docs/ai_adapter/working_history/Phase1_M1.2_Adapter/354/235/270/355/224/204/353/235/274_20260203.md +0 -378
  102. package/dist/docs/ai_adapter/working_history/Phase1_M1.3_Provider/354/204/240/355/203/235_20260206.md +0 -269
  103. 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
  104. 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
  105. 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
  106. 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
  107. package/dist/docs/ai_adapter/working_history/Phase2_M2.2_EventMapper/352/265/254/355/230/204_20260207.md +0 -372
  108. package/dist/docs/ai_adapter/working_history/Phase2_M2.3_GeminiAdapter/352/265/254/355/230/204_20260208.md +0 -205
  109. 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
  110. 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
  111. 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
  112. 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
  113. 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
  114. 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
  115. 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
  116. 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
  117. 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
  118. 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
  119. package/dist/docs/ai_adapter/working_history/Phase3_M3.1.1_ClaudeAdapter/352/265/254/355/230/204_20260209.md +0 -225
  120. 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
  121. 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
  122. package/dist/docs/ai_adapter/working_history/Phase3_M3.1.4_ClaudeErrorMapping_20260209.md +0 -98
  123. package/dist/docs/ai_adapter/working_history/Phase3_M3.2.A_OpenAIAdapterCore_20260210.md +0 -264
  124. package/dist/docs/ai_adapter/working_history/Phase3_M3.2.B_OpenAIStreamConverter_20260210.md +0 -204
  125. 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
  126. package/dist/docs/ai_adapter/working_history/Phase3_M3.3_OpenAICompatibleAdapter_20260211.md +0 -251
  127. 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
  128. 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
  129. 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
  130. 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
  131. 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
  132. package/dist/docs/ai_adapter/working_history/phase2_tradeoff_EventType/354/240/204/355/231/230_20260208.md +0 -286
  133. package/dist/docs/api/index.md +0 -5
  134. package/dist/docs/api/providers.md +0 -56
  135. package/dist/docs/architecture.md +0 -80
  136. package/dist/docs/assets/connected_devtools.png +0 -0
  137. package/dist/docs/assets/gemini-screenshot.png +0 -0
  138. package/dist/docs/assets/monitoring-dashboard-logs.png +0 -0
  139. package/dist/docs/assets/monitoring-dashboard-metrics.png +0 -0
  140. package/dist/docs/assets/monitoring-dashboard-overview.png +0 -0
  141. package/dist/docs/assets/release_patch.png +0 -0
  142. package/dist/docs/assets/theme-ansi-light.png +0 -0
  143. package/dist/docs/assets/theme-ansi.png +0 -0
  144. package/dist/docs/assets/theme-atom-one.png +0 -0
  145. package/dist/docs/assets/theme-ayu-light.png +0 -0
  146. package/dist/docs/assets/theme-ayu.png +0 -0
  147. package/dist/docs/assets/theme-custom.png +0 -0
  148. package/dist/docs/assets/theme-default-light.png +0 -0
  149. package/dist/docs/assets/theme-default.png +0 -0
  150. package/dist/docs/assets/theme-dracula.png +0 -0
  151. package/dist/docs/assets/theme-github-light.png +0 -0
  152. package/dist/docs/assets/theme-github.png +0 -0
  153. package/dist/docs/assets/theme-google-light.png +0 -0
  154. package/dist/docs/assets/theme-xcode-light.png +0 -0
  155. package/dist/docs/change_model/model_command_multi_provider_plan.md +0 -221
  156. package/dist/docs/change_model/model_command_multi_provider_todolist.md +0 -206
  157. package/dist/docs/changelogs/index.md +0 -726
  158. package/dist/docs/changelogs/latest.md +0 -370
  159. package/dist/docs/changelogs/preview.md +0 -332
  160. package/dist/docs/cli/authentication.md +0 -3
  161. package/dist/docs/cli/checkpointing.md +0 -94
  162. package/dist/docs/cli/commands.md +0 -375
  163. package/dist/docs/cli/custom-commands.md +0 -315
  164. package/dist/docs/cli/enterprise.md +0 -565
  165. package/dist/docs/cli/gemini-ignore.md +0 -71
  166. package/dist/docs/cli/gemini-md.md +0 -108
  167. package/dist/docs/cli/generation-settings.md +0 -210
  168. package/dist/docs/cli/headless.md +0 -388
  169. package/dist/docs/cli/index.md +0 -65
  170. package/dist/docs/cli/keyboard-shortcuts.md +0 -129
  171. package/dist/docs/cli/model-routing.md +0 -42
  172. package/dist/docs/cli/model.md +0 -62
  173. package/dist/docs/cli/sandbox.md +0 -171
  174. package/dist/docs/cli/session-management.md +0 -158
  175. package/dist/docs/cli/settings.md +0 -130
  176. package/dist/docs/cli/skills.md +0 -188
  177. package/dist/docs/cli/system-prompt.md +0 -125
  178. package/dist/docs/cli/telemetry.md +0 -826
  179. package/dist/docs/cli/themes.md +0 -235
  180. package/dist/docs/cli/token-caching.md +0 -20
  181. package/dist/docs/cli/trusted-folders.md +0 -95
  182. package/dist/docs/cli/tutorials/skills-getting-started.md +0 -124
  183. package/dist/docs/cli/tutorials.md +0 -87
  184. package/dist/docs/cli/uninstall.md +0 -65
  185. package/dist/docs/configuration.md +0 -108
  186. package/dist/docs/core/index.md +0 -105
  187. package/dist/docs/core/long-term-memory-design.md +0 -254
  188. package/dist/docs/core/long-term-memory-proposal.md +0 -112
  189. package/dist/docs/core/memport.md +0 -246
  190. package/dist/docs/core/policy-engine.md +0 -300
  191. package/dist/docs/core/tools-api.md +0 -131
  192. package/dist/docs/examples/proxy-script.md +0 -83
  193. package/dist/docs/extensions/best-practices.md +0 -139
  194. package/dist/docs/extensions/index.md +0 -44
  195. package/dist/docs/extensions/reference.md +0 -312
  196. package/dist/docs/extensions/releasing.md +0 -183
  197. package/dist/docs/extensions/writing-extensions.md +0 -283
  198. package/dist/docs/faq.md +0 -154
  199. package/dist/docs/get-started/authentication.md +0 -321
  200. package/dist/docs/get-started/configuration-v1.md +0 -888
  201. package/dist/docs/get-started/configuration.md +0 -1567
  202. package/dist/docs/get-started/examples.md +0 -219
  203. package/dist/docs/get-started/gemini-3.md +0 -101
  204. package/dist/docs/get-started/index.md +0 -71
  205. package/dist/docs/get-started/installation.md +0 -141
  206. package/dist/docs/hooks/best-practices.md +0 -677
  207. package/dist/docs/hooks/index.md +0 -178
  208. package/dist/docs/hooks/reference.md +0 -322
  209. package/dist/docs/hooks/writing-hooks.md +0 -450
  210. package/dist/docs/ide-integration/ide-companion-spec.md +0 -267
  211. package/dist/docs/ide-integration/index.md +0 -202
  212. package/dist/docs/index.md +0 -153
  213. package/dist/docs/integration-tests.md +0 -211
  214. package/dist/docs/issue-and-pr-automation.md +0 -134
  215. package/dist/docs/local-development.md +0 -128
  216. package/dist/docs/mermaid/context.mmd +0 -103
  217. package/dist/docs/mermaid/render-path.mmd +0 -64
  218. package/dist/docs/migration.md +0 -78
  219. package/dist/docs/npm.md +0 -62
  220. package/dist/docs/providers.md +0 -136
  221. package/dist/docs/quota-and-pricing.md +0 -158
  222. package/dist/docs/release-confidence.md +0 -164
  223. package/dist/docs/releases.md +0 -539
  224. package/dist/docs/sidebar.json +0 -140
  225. package/dist/docs/tools/file-system.md +0 -217
  226. package/dist/docs/tools/index.md +0 -98
  227. package/dist/docs/tools/mcp-server.md +0 -1068
  228. package/dist/docs/tools/memory.md +0 -54
  229. package/dist/docs/tools/shell.md +0 -260
  230. package/dist/docs/tools/todos.md +0 -57
  231. package/dist/docs/tools/web-fetch.md +0 -59
  232. package/dist/docs/tools/web-search.md +0 -42
  233. package/dist/docs/tos-privacy.md +0 -96
  234. package/dist/docs/troubleshooting.md +0 -173
  235. package/dist/src/agents/a2a-client-manager.test.d.ts +0 -6
  236. package/dist/src/agents/a2a-client-manager.test.js +0 -220
  237. package/dist/src/agents/a2a-client-manager.test.js.map +0 -1
  238. package/dist/src/agents/a2aUtils.test.d.ts +0 -6
  239. package/dist/src/agents/a2aUtils.test.js +0 -147
  240. package/dist/src/agents/a2aUtils.test.js.map +0 -1
  241. package/dist/src/agents/acknowledgedAgents.test.d.ts +0 -6
  242. package/dist/src/agents/acknowledgedAgents.test.js +0 -70
  243. package/dist/src/agents/acknowledgedAgents.test.js.map +0 -1
  244. package/dist/src/agents/agent-scheduler.test.d.ts +0 -6
  245. package/dist/src/agents/agent-scheduler.test.js +0 -56
  246. package/dist/src/agents/agent-scheduler.test.js.map +0 -1
  247. package/dist/src/agents/agentLoader.test.d.ts +0 -6
  248. package/dist/src/agents/agentLoader.test.js +0 -304
  249. package/dist/src/agents/agentLoader.test.js.map +0 -1
  250. package/dist/src/agents/cli-help-agent.test.d.ts +0 -6
  251. package/dist/src/agents/cli-help-agent.test.js +0 -67
  252. package/dist/src/agents/cli-help-agent.test.js.map +0 -1
  253. package/dist/src/agents/codebase-investigator.test.d.ts +0 -6
  254. package/dist/src/agents/codebase-investigator.test.js +0 -42
  255. package/dist/src/agents/codebase-investigator.test.js.map +0 -1
  256. package/dist/src/agents/generalist-agent.test.d.ts +0 -6
  257. package/dist/src/agents/generalist-agent.test.js +0 -31
  258. package/dist/src/agents/generalist-agent.test.js.map +0 -1
  259. package/dist/src/agents/local-executor.test.d.ts +0 -6
  260. package/dist/src/agents/local-executor.test.js +0 -1577
  261. package/dist/src/agents/local-executor.test.js.map +0 -1
  262. package/dist/src/agents/local-invocation.test.d.ts +0 -6
  263. package/dist/src/agents/local-invocation.test.js +0 -228
  264. package/dist/src/agents/local-invocation.test.js.map +0 -1
  265. package/dist/src/agents/registry.test.d.ts +0 -6
  266. package/dist/src/agents/registry.test.js +0 -773
  267. package/dist/src/agents/registry.test.js.map +0 -1
  268. package/dist/src/agents/registry_acknowledgement.test.d.ts +0 -6
  269. package/dist/src/agents/registry_acknowledgement.test.js +0 -130
  270. package/dist/src/agents/registry_acknowledgement.test.js.map +0 -1
  271. package/dist/src/agents/remote-invocation.test.d.ts +0 -6
  272. package/dist/src/agents/remote-invocation.test.js +0 -213
  273. package/dist/src/agents/remote-invocation.test.js.map +0 -1
  274. package/dist/src/agents/subagent-tool-wrapper.test.d.ts +0 -6
  275. package/dist/src/agents/subagent-tool-wrapper.test.js +0 -109
  276. package/dist/src/agents/subagent-tool-wrapper.test.js.map +0 -1
  277. package/dist/src/agents/utils.test.d.ts +0 -6
  278. package/dist/src/agents/utils.test.js +0 -87
  279. package/dist/src/agents/utils.test.js.map +0 -1
  280. package/dist/src/availability/fallbackIntegration.test.d.ts +0 -6
  281. package/dist/src/availability/fallbackIntegration.test.js +0 -58
  282. package/dist/src/availability/fallbackIntegration.test.js.map +0 -1
  283. package/dist/src/availability/modelAvailabilityService.test.d.ts +0 -6
  284. package/dist/src/availability/modelAvailabilityService.test.js +0 -140
  285. package/dist/src/availability/modelAvailabilityService.test.js.map +0 -1
  286. package/dist/src/availability/policyCatalog.test.d.ts +0 -6
  287. package/dist/src/availability/policyCatalog.test.js +0 -70
  288. package/dist/src/availability/policyCatalog.test.js.map +0 -1
  289. package/dist/src/availability/policyHelpers.test.d.ts +0 -6
  290. package/dist/src/availability/policyHelpers.test.js +0 -220
  291. package/dist/src/availability/policyHelpers.test.js.map +0 -1
  292. package/dist/src/code_assist/admin/admin_controls.test.d.ts +0 -6
  293. package/dist/src/code_assist/admin/admin_controls.test.js +0 -200
  294. package/dist/src/code_assist/admin/admin_controls.test.js.map +0 -1
  295. package/dist/src/code_assist/codeAssist.test.d.ts +0 -6
  296. package/dist/src/code_assist/codeAssist.test.js +0 -102
  297. package/dist/src/code_assist/codeAssist.test.js.map +0 -1
  298. package/dist/src/code_assist/converter.test.d.ts +0 -6
  299. package/dist/src/code_assist/converter.test.js +0 -391
  300. package/dist/src/code_assist/converter.test.js.map +0 -1
  301. package/dist/src/code_assist/experiments/client_metadata.test.d.ts +0 -6
  302. package/dist/src/code_assist/experiments/client_metadata.test.js +0 -96
  303. package/dist/src/code_assist/experiments/client_metadata.test.js.map +0 -1
  304. package/dist/src/code_assist/experiments/experiments.test.d.ts +0 -6
  305. package/dist/src/code_assist/experiments/experiments.test.js +0 -93
  306. package/dist/src/code_assist/experiments/experiments.test.js.map +0 -1
  307. package/dist/src/code_assist/experiments/experiments_local.test.d.ts +0 -6
  308. package/dist/src/code_assist/experiments/experiments_local.test.js +0 -115
  309. package/dist/src/code_assist/experiments/experiments_local.test.js.map +0 -1
  310. package/dist/src/code_assist/oauth-credential-storage.test.d.ts +0 -6
  311. package/dist/src/code_assist/oauth-credential-storage.test.js +0 -198
  312. package/dist/src/code_assist/oauth-credential-storage.test.js.map +0 -1
  313. package/dist/src/code_assist/oauth2.test.d.ts +0 -6
  314. package/dist/src/code_assist/oauth2.test.js +0 -1065
  315. package/dist/src/code_assist/oauth2.test.js.map +0 -1
  316. package/dist/src/code_assist/server.test.d.ts +0 -6
  317. package/dist/src/code_assist/server.test.js +0 -453
  318. package/dist/src/code_assist/server.test.js.map +0 -1
  319. package/dist/src/code_assist/setup.test.d.ts +0 -6
  320. package/dist/src/code_assist/setup.test.js +0 -517
  321. package/dist/src/code_assist/setup.test.js.map +0 -1
  322. package/dist/src/code_assist/telemetry.test.d.ts +0 -6
  323. package/dist/src/code_assist/telemetry.test.js +0 -301
  324. package/dist/src/code_assist/telemetry.test.js.map +0 -1
  325. package/dist/src/commands/extensions.test.d.ts +0 -6
  326. package/dist/src/commands/extensions.test.js +0 -19
  327. package/dist/src/commands/extensions.test.js.map +0 -1
  328. package/dist/src/commands/init.test.d.ts +0 -6
  329. package/dist/src/commands/init.test.js +0 -25
  330. package/dist/src/commands/init.test.js.map +0 -1
  331. package/dist/src/commands/memory.test.d.ts +0 -6
  332. package/dist/src/commands/memory.test.js +0 -182
  333. package/dist/src/commands/memory.test.js.map +0 -1
  334. package/dist/src/commands/restore.test.d.ts +0 -6
  335. package/dist/src/commands/restore.test.js +0 -137
  336. package/dist/src/commands/restore.test.js.map +0 -1
  337. package/dist/src/config/config.test.d.ts +0 -6
  338. package/dist/src/config/config.test.js +0 -1811
  339. package/dist/src/config/config.test.js.map +0 -1
  340. package/dist/src/config/flashFallback.test.d.ts +0 -6
  341. package/dist/src/config/flashFallback.test.js +0 -63
  342. package/dist/src/config/flashFallback.test.js.map +0 -1
  343. package/dist/src/config/models.test.d.ts +0 -6
  344. package/dist/src/config/models.test.js +0 -146
  345. package/dist/src/config/models.test.js.map +0 -1
  346. package/dist/src/config/storage.test.d.ts +0 -6
  347. package/dist/src/config/storage.test.js +0 -115
  348. package/dist/src/config/storage.test.js.map +0 -1
  349. package/dist/src/confirmation-bus/message-bus.test.d.ts +0 -6
  350. package/dist/src/confirmation-bus/message-bus.test.js +0 -170
  351. package/dist/src/confirmation-bus/message-bus.test.js.map +0 -1
  352. package/dist/src/core/apiKeyCredentialStorage.test.d.ts +0 -6
  353. package/dist/src/core/apiKeyCredentialStorage.test.js +0 -71
  354. package/dist/src/core/apiKeyCredentialStorage.test.js.map +0 -1
  355. package/dist/src/core/baseLlmClient.test.d.ts +0 -6
  356. package/dist/src/core/baseLlmClient.test.js +0 -569
  357. package/dist/src/core/baseLlmClient.test.js.map +0 -1
  358. package/dist/src/core/baseLlmClient_new_types.test.d.ts +0 -1
  359. package/dist/src/core/baseLlmClient_new_types.test.js +0 -387
  360. package/dist/src/core/baseLlmClient_new_types.test.js.map +0 -1
  361. package/dist/src/core/client.test.d.ts +0 -6
  362. package/dist/src/core/client.test.js +0 -2654
  363. package/dist/src/core/client.test.js.map +0 -1
  364. package/dist/src/core/contentGenerator.multiProvider.test.d.ts +0 -6
  365. package/dist/src/core/contentGenerator.multiProvider.test.js +0 -314
  366. package/dist/src/core/contentGenerator.multiProvider.test.js.map +0 -1
  367. package/dist/src/core/contentGenerator.test.d.ts +0 -6
  368. package/dist/src/core/contentGenerator.test.js +0 -299
  369. package/dist/src/core/contentGenerator.test.js.map +0 -1
  370. package/dist/src/core/contentGenerator_new_types.test.d.ts +0 -6
  371. package/dist/src/core/contentGenerator_new_types.test.js +0 -292
  372. package/dist/src/core/contentGenerator_new_types.test.js.map +0 -1
  373. package/dist/src/core/coreToolHookTriggers.test.d.ts +0 -6
  374. package/dist/src/core/coreToolHookTriggers.test.js +0 -159
  375. package/dist/src/core/coreToolHookTriggers.test.js.map +0 -1
  376. package/dist/src/core/coreToolScheduler.test.d.ts +0 -6
  377. package/dist/src/core/coreToolScheduler.test.js +0 -1684
  378. package/dist/src/core/coreToolScheduler.test.js.map +0 -1
  379. package/dist/src/core/fakeContentGenerator.test.d.ts +0 -6
  380. package/dist/src/core/fakeContentGenerator.test.js +0 -127
  381. package/dist/src/core/fakeContentGenerator.test.js.map +0 -1
  382. package/dist/src/core/geminiChat.test.d.ts +0 -6
  383. package/dist/src/core/geminiChat.test.js +0 -1773
  384. package/dist/src/core/geminiChat.test.js.map +0 -1
  385. package/dist/src/core/geminiChat_network_retry.test.d.ts +0 -6
  386. package/dist/src/core/geminiChat_network_retry.test.js +0 -201
  387. package/dist/src/core/geminiChat_network_retry.test.js.map +0 -1
  388. package/dist/src/core/logger.test.d.ts +0 -6
  389. package/dist/src/core/logger.test.js +0 -550
  390. package/dist/src/core/logger.test.js.map +0 -1
  391. package/dist/src/core/loggingContentGenerator.test.d.ts +0 -6
  392. package/dist/src/core/loggingContentGenerator.test.js +0 -221
  393. package/dist/src/core/loggingContentGenerator.test.js.map +0 -1
  394. package/dist/src/core/prompts-substitution.test.d.ts +0 -6
  395. package/dist/src/core/prompts-substitution.test.js +0 -101
  396. package/dist/src/core/prompts-substitution.test.js.map +0 -1
  397. package/dist/src/core/prompts.test.d.ts +0 -6
  398. package/dist/src/core/prompts.test.js +0 -391
  399. package/dist/src/core/prompts.test.js.map +0 -1
  400. package/dist/src/core/recordingContentGenerator.test.d.ts +0 -6
  401. package/dist/src/core/recordingContentGenerator.test.js +0 -101
  402. package/dist/src/core/recordingContentGenerator.test.js.map +0 -1
  403. package/dist/src/core/tokenLimits.test.d.ts +0 -6
  404. package/dist/src/core/tokenLimits.test.js +0 -30
  405. package/dist/src/core/tokenLimits.test.js.map +0 -1
  406. package/dist/src/core/turn.test.d.ts +0 -6
  407. package/dist/src/core/turn.test.js +0 -739
  408. package/dist/src/core/turn.test.js.map +0 -1
  409. package/dist/src/fallback/handler.test.d.ts +0 -6
  410. package/dist/src/fallback/handler.test.js +0 -242
  411. package/dist/src/fallback/handler.test.js.map +0 -1
  412. package/dist/src/hooks/hookAggregator.test.d.ts +0 -6
  413. package/dist/src/hooks/hookAggregator.test.js +0 -387
  414. package/dist/src/hooks/hookAggregator.test.js.map +0 -1
  415. package/dist/src/hooks/hookEventHandler.test.d.ts +0 -6
  416. package/dist/src/hooks/hookEventHandler.test.js +0 -603
  417. package/dist/src/hooks/hookEventHandler.test.js.map +0 -1
  418. package/dist/src/hooks/hookPlanner.test.d.ts +0 -6
  419. package/dist/src/hooks/hookPlanner.test.js +0 -315
  420. package/dist/src/hooks/hookPlanner.test.js.map +0 -1
  421. package/dist/src/hooks/hookRegistry.test.d.ts +0 -6
  422. package/dist/src/hooks/hookRegistry.test.js +0 -529
  423. package/dist/src/hooks/hookRegistry.test.js.map +0 -1
  424. package/dist/src/hooks/hookRunner.test.d.ts +0 -6
  425. package/dist/src/hooks/hookRunner.test.js +0 -606
  426. package/dist/src/hooks/hookRunner.test.js.map +0 -1
  427. package/dist/src/hooks/hookSystem.test.d.ts +0 -6
  428. package/dist/src/hooks/hookSystem.test.js +0 -330
  429. package/dist/src/hooks/hookSystem.test.js.map +0 -1
  430. package/dist/src/hooks/hookSystem_new_types.test.d.ts +0 -6
  431. package/dist/src/hooks/hookSystem_new_types.test.js +0 -243
  432. package/dist/src/hooks/hookSystem_new_types.test.js.map +0 -1
  433. package/dist/src/hooks/hookTranslator.test.d.ts +0 -6
  434. package/dist/src/hooks/hookTranslator.test.js +0 -192
  435. package/dist/src/hooks/hookTranslator.test.js.map +0 -1
  436. package/dist/src/hooks/trustedHooks.test.d.ts +0 -6
  437. package/dist/src/hooks/trustedHooks.test.js +0 -154
  438. package/dist/src/hooks/trustedHooks.test.js.map +0 -1
  439. package/dist/src/hooks/types.test.d.ts +0 -6
  440. package/dist/src/hooks/types.test.js +0 -278
  441. package/dist/src/hooks/types.test.js.map +0 -1
  442. package/dist/src/ide/detect-ide.test.d.ts +0 -6
  443. package/dist/src/ide/detect-ide.test.js +0 -195
  444. package/dist/src/ide/detect-ide.test.js.map +0 -1
  445. package/dist/src/ide/ide-client.test.d.ts +0 -6
  446. package/dist/src/ide/ide-client.test.js +0 -753
  447. package/dist/src/ide/ide-client.test.js.map +0 -1
  448. package/dist/src/ide/ide-installer.test.d.ts +0 -6
  449. package/dist/src/ide/ide-installer.test.js +0 -193
  450. package/dist/src/ide/ide-installer.test.js.map +0 -1
  451. package/dist/src/ide/ideContext.test.d.ts +0 -6
  452. package/dist/src/ide/ideContext.test.js +0 -393
  453. package/dist/src/ide/ideContext.test.js.map +0 -1
  454. package/dist/src/ide/process-utils.test.d.ts +0 -6
  455. package/dist/src/ide/process-utils.test.js +0 -151
  456. package/dist/src/ide/process-utils.test.js.map +0 -1
  457. package/dist/src/index.test.d.ts +0 -6
  458. package/dist/src/index.test.js +0 -53
  459. package/dist/src/index.test.js.map +0 -1
  460. package/dist/src/mcp/google-auth-provider.test.d.ts +0 -6
  461. package/dist/src/mcp/google-auth-provider.test.js +0 -167
  462. package/dist/src/mcp/google-auth-provider.test.js.map +0 -1
  463. package/dist/src/mcp/oauth-provider.test.d.ts +0 -6
  464. package/dist/src/mcp/oauth-provider.test.js +0 -1355
  465. package/dist/src/mcp/oauth-provider.test.js.map +0 -1
  466. package/dist/src/mcp/oauth-token-storage.test.d.ts +0 -6
  467. package/dist/src/mcp/oauth-token-storage.test.js +0 -305
  468. package/dist/src/mcp/oauth-token-storage.test.js.map +0 -1
  469. package/dist/src/mcp/oauth-utils.test.d.ts +0 -6
  470. package/dist/src/mcp/oauth-utils.test.js +0 -289
  471. package/dist/src/mcp/oauth-utils.test.js.map +0 -1
  472. package/dist/src/mcp/sa-impersonation-provider.test.d.ts +0 -6
  473. package/dist/src/mcp/sa-impersonation-provider.test.js +0 -117
  474. package/dist/src/mcp/sa-impersonation-provider.test.js.map +0 -1
  475. package/dist/src/mcp/token-storage/base-token-storage.test.d.ts +0 -6
  476. package/dist/src/mcp/token-storage/base-token-storage.test.js +0 -151
  477. package/dist/src/mcp/token-storage/base-token-storage.test.js.map +0 -1
  478. package/dist/src/mcp/token-storage/file-token-storage.test.d.ts +0 -6
  479. package/dist/src/mcp/token-storage/file-token-storage.test.js +0 -238
  480. package/dist/src/mcp/token-storage/file-token-storage.test.js.map +0 -1
  481. package/dist/src/mcp/token-storage/hybrid-token-storage.test.d.ts +0 -6
  482. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js +0 -193
  483. package/dist/src/mcp/token-storage/hybrid-token-storage.test.js.map +0 -1
  484. package/dist/src/mcp/token-storage/keychain-token-storage.test.d.ts +0 -6
  485. package/dist/src/mcp/token-storage/keychain-token-storage.test.js +0 -305
  486. package/dist/src/mcp/token-storage/keychain-token-storage.test.js.map +0 -1
  487. package/dist/src/output/json-formatter.test.d.ts +0 -6
  488. package/dist/src/output/json-formatter.test.js +0 -294
  489. package/dist/src/output/json-formatter.test.js.map +0 -1
  490. package/dist/src/output/stream-json-formatter.test.d.ts +0 -6
  491. package/dist/src/output/stream-json-formatter.test.js +0 -477
  492. package/dist/src/output/stream-json-formatter.test.js.map +0 -1
  493. package/dist/src/policy/config.test.d.ts +0 -6
  494. package/dist/src/policy/config.test.js +0 -598
  495. package/dist/src/policy/config.test.js.map +0 -1
  496. package/dist/src/policy/persistence.test.d.ts +0 -6
  497. package/dist/src/policy/persistence.test.js +0 -154
  498. package/dist/src/policy/persistence.test.js.map +0 -1
  499. package/dist/src/policy/policy-engine.test.d.ts +0 -6
  500. package/dist/src/policy/policy-engine.test.js +0 -1299
  501. package/dist/src/policy/policy-engine.test.js.map +0 -1
  502. package/dist/src/policy/policy-updater.test.d.ts +0 -6
  503. package/dist/src/policy/policy-updater.test.js +0 -116
  504. package/dist/src/policy/policy-updater.test.js.map +0 -1
  505. package/dist/src/policy/shell-safety.test.d.ts +0 -6
  506. package/dist/src/policy/shell-safety.test.js +0 -438
  507. package/dist/src/policy/shell-safety.test.js.map +0 -1
  508. package/dist/src/policy/toml-loader.test.d.ts +0 -6
  509. package/dist/src/policy/toml-loader.test.js +0 -409
  510. package/dist/src/policy/toml-loader.test.js.map +0 -1
  511. package/dist/src/policy/utils.test.d.ts +0 -6
  512. package/dist/src/policy/utils.test.js +0 -92
  513. package/dist/src/policy/utils.test.js.map +0 -1
  514. package/dist/src/prompts/mcp-prompts.test.d.ts +0 -6
  515. package/dist/src/prompts/mcp-prompts.test.js +0 -39
  516. package/dist/src/prompts/mcp-prompts.test.js.map +0 -1
  517. package/dist/src/prompts/prompt-registry.test.d.ts +0 -6
  518. package/dist/src/prompts/prompt-registry.test.js +0 -96
  519. package/dist/src/prompts/prompt-registry.test.js.map +0 -1
  520. package/dist/src/providers/__tests__/bundleSize.test.d.ts +0 -6
  521. package/dist/src/providers/__tests__/bundleSize.test.js +0 -75
  522. package/dist/src/providers/__tests__/bundleSize.test.js.map +0 -1
  523. package/dist/src/providers/__tests__/errorHandling.integration.test.d.ts +0 -6
  524. package/dist/src/providers/__tests__/errorHandling.integration.test.js +0 -339
  525. package/dist/src/providers/__tests__/errorHandling.integration.test.js.map +0 -1
  526. package/dist/src/providers/__tests__/multiProvider.integration.test.d.ts +0 -6
  527. package/dist/src/providers/__tests__/multiProvider.integration.test.js +0 -419
  528. package/dist/src/providers/__tests__/multiProvider.integration.test.js.map +0 -1
  529. package/dist/src/providers/__tests__/performance.test.d.ts +0 -6
  530. package/dist/src/providers/__tests__/performance.test.js +0 -270
  531. package/dist/src/providers/__tests__/performance.test.js.map +0 -1
  532. package/dist/src/providers/__tests__/providerConfigIntegration.test.d.ts +0 -6
  533. package/dist/src/providers/__tests__/providerConfigIntegration.test.js +0 -245
  534. package/dist/src/providers/__tests__/providerConfigIntegration.test.js.map +0 -1
  535. package/dist/src/providers/baseAdapter.test.d.ts +0 -1
  536. package/dist/src/providers/baseAdapter.test.js +0 -142
  537. package/dist/src/providers/baseAdapter.test.js.map +0 -1
  538. package/dist/src/providers/claude/adapter.test.d.ts +0 -6
  539. package/dist/src/providers/claude/adapter.test.js +0 -628
  540. package/dist/src/providers/claude/adapter.test.js.map +0 -1
  541. package/dist/src/providers/claude/bootstrap.test.d.ts +0 -6
  542. package/dist/src/providers/claude/bootstrap.test.js +0 -74
  543. package/dist/src/providers/claude/bootstrap.test.js.map +0 -1
  544. package/dist/src/providers/claude/converter.test.d.ts +0 -6
  545. package/dist/src/providers/claude/converter.test.js +0 -1002
  546. package/dist/src/providers/claude/converter.test.js.map +0 -1
  547. package/dist/src/providers/claude/exports.test.d.ts +0 -6
  548. package/dist/src/providers/claude/exports.test.js +0 -40
  549. package/dist/src/providers/claude/exports.test.js.map +0 -1
  550. package/dist/src/providers/configAdapter.test.d.ts +0 -1
  551. package/dist/src/providers/configAdapter.test.js +0 -150
  552. package/dist/src/providers/configAdapter.test.js.map +0 -1
  553. package/dist/src/providers/contentResolver.test.d.ts +0 -1
  554. package/dist/src/providers/contentResolver.test.js +0 -89
  555. package/dist/src/providers/contentResolver.test.js.map +0 -1
  556. package/dist/src/providers/factory.test.d.ts +0 -1
  557. package/dist/src/providers/factory.test.js +0 -151
  558. package/dist/src/providers/factory.test.js.map +0 -1
  559. package/dist/src/providers/gemini/adapterBridge.test.d.ts +0 -6
  560. package/dist/src/providers/gemini/adapterBridge.test.js +0 -164
  561. package/dist/src/providers/gemini/adapterBridge.test.js.map +0 -1
  562. package/dist/src/providers/gemini/bootstrap.test.d.ts +0 -6
  563. package/dist/src/providers/gemini/bootstrap.test.js +0 -72
  564. package/dist/src/providers/gemini/bootstrap.test.js.map +0 -1
  565. package/dist/src/providers/gemini/configConverter.test.d.ts +0 -6
  566. package/dist/src/providers/gemini/configConverter.test.js +0 -218
  567. package/dist/src/providers/gemini/configConverter.test.js.map +0 -1
  568. package/dist/src/providers/gemini/errorClassifier.test.d.ts +0 -6
  569. package/dist/src/providers/gemini/errorClassifier.test.js +0 -83
  570. package/dist/src/providers/gemini/errorClassifier.test.js.map +0 -1
  571. package/dist/src/providers/gemini/eventMapper.test.d.ts +0 -6
  572. package/dist/src/providers/gemini/eventMapper.test.js +0 -502
  573. package/dist/src/providers/gemini/eventMapper.test.js.map +0 -1
  574. package/dist/src/providers/gemini/exports.test.d.ts +0 -6
  575. package/dist/src/providers/gemini/exports.test.js +0 -90
  576. package/dist/src/providers/gemini/exports.test.js.map +0 -1
  577. package/dist/src/providers/gemini/featureFlag.test.d.ts +0 -6
  578. package/dist/src/providers/gemini/featureFlag.test.js +0 -139
  579. package/dist/src/providers/gemini/featureFlag.test.js.map +0 -1
  580. package/dist/src/providers/gemini/geminiAdapter.test.d.ts +0 -6
  581. package/dist/src/providers/gemini/geminiAdapter.test.js +0 -279
  582. package/dist/src/providers/gemini/geminiAdapter.test.js.map +0 -1
  583. package/dist/src/providers/gemini/geminiConverter.test.d.ts +0 -6
  584. package/dist/src/providers/gemini/geminiConverter.test.js +0 -474
  585. package/dist/src/providers/gemini/geminiConverter.test.js.map +0 -1
  586. package/dist/src/providers/gemini/geminiParity.test.d.ts +0 -6
  587. package/dist/src/providers/gemini/geminiParity.test.js +0 -754
  588. package/dist/src/providers/gemini/geminiParity.test.js.map +0 -1
  589. package/dist/src/providers/gemini/geminiStream.test.d.ts +0 -6
  590. package/dist/src/providers/gemini/geminiStream.test.js +0 -391
  591. package/dist/src/providers/gemini/geminiStream.test.js.map +0 -1
  592. package/dist/src/providers/gemini/historyBuilder.test.d.ts +0 -6
  593. package/dist/src/providers/gemini/historyBuilder.test.js +0 -207
  594. package/dist/src/providers/gemini/historyBuilder.test.js.map +0 -1
  595. package/dist/src/providers/gemini/requestBuilder.test.d.ts +0 -6
  596. package/dist/src/providers/gemini/requestBuilder.test.js +0 -358
  597. package/dist/src/providers/gemini/requestBuilder.test.js.map +0 -1
  598. package/dist/src/providers/gemini/streamConverter.test.d.ts +0 -6
  599. package/dist/src/providers/gemini/streamConverter.test.js +0 -131
  600. package/dist/src/providers/gemini/streamConverter.test.js.map +0 -1
  601. package/dist/src/providers/modelSpec.test.d.ts +0 -1
  602. package/dist/src/providers/modelSpec.test.js +0 -119
  603. package/dist/src/providers/modelSpec.test.js.map +0 -1
  604. package/dist/src/providers/openai/adapter.test.d.ts +0 -6
  605. package/dist/src/providers/openai/adapter.test.js +0 -274
  606. package/dist/src/providers/openai/adapter.test.js.map +0 -1
  607. package/dist/src/providers/openai/bootstrap.test.d.ts +0 -6
  608. package/dist/src/providers/openai/bootstrap.test.js +0 -76
  609. package/dist/src/providers/openai/bootstrap.test.js.map +0 -1
  610. package/dist/src/providers/openai/converter.test.d.ts +0 -6
  611. package/dist/src/providers/openai/converter.test.js +0 -1133
  612. package/dist/src/providers/openai/converter.test.js.map +0 -1
  613. package/dist/src/providers/openai-compatible/__tests__/compatibility.test.d.ts +0 -6
  614. package/dist/src/providers/openai-compatible/__tests__/compatibility.test.js +0 -356
  615. package/dist/src/providers/openai-compatible/__tests__/compatibility.test.js.map +0 -1
  616. package/dist/src/providers/openai-compatible/adapter.test.d.ts +0 -6
  617. package/dist/src/providers/openai-compatible/adapter.test.js +0 -240
  618. package/dist/src/providers/openai-compatible/adapter.test.js.map +0 -1
  619. package/dist/src/providers/openai-compatible/bootstrap.test.d.ts +0 -6
  620. package/dist/src/providers/openai-compatible/bootstrap.test.js +0 -145
  621. package/dist/src/providers/openai-compatible/bootstrap.test.js.map +0 -1
  622. package/dist/src/providers/openai-compatible/promptBuilder.test.d.ts +0 -6
  623. package/dist/src/providers/openai-compatible/promptBuilder.test.js +0 -154
  624. package/dist/src/providers/openai-compatible/promptBuilder.test.js.map +0 -1
  625. package/dist/src/providers/providerConfig.test.d.ts +0 -1
  626. package/dist/src/providers/providerConfig.test.js +0 -145
  627. package/dist/src/providers/providerConfig.test.js.map +0 -1
  628. package/dist/src/providers/providerConfigIntegration.test.d.ts +0 -6
  629. package/dist/src/providers/providerConfigIntegration.test.js +0 -187
  630. package/dist/src/providers/providerConfigIntegration.test.js.map +0 -1
  631. package/dist/src/providers/providerSelector.test.d.ts +0 -1
  632. package/dist/src/providers/providerSelector.test.js +0 -199
  633. package/dist/src/providers/providerSelector.test.js.map +0 -1
  634. package/dist/src/providers/providerTypes.test.d.ts +0 -1
  635. package/dist/src/providers/providerTypes.test.js +0 -95
  636. package/dist/src/providers/providerTypes.test.js.map +0 -1
  637. package/dist/src/providers/registry.test.d.ts +0 -1
  638. package/dist/src/providers/registry.test.js +0 -207
  639. package/dist/src/providers/registry.test.js.map +0 -1
  640. package/dist/src/providers/streamAssembler.test.d.ts +0 -1
  641. package/dist/src/providers/streamAssembler.test.js +0 -247
  642. package/dist/src/providers/streamAssembler.test.js.map +0 -1
  643. package/dist/src/providers/telemetryBridge.test.d.ts +0 -6
  644. package/dist/src/providers/telemetryBridge.test.js +0 -235
  645. package/dist/src/providers/telemetryBridge.test.js.map +0 -1
  646. package/dist/src/providers/types.test.d.ts +0 -6
  647. package/dist/src/providers/types.test.js +0 -253
  648. package/dist/src/providers/types.test.js.map +0 -1
  649. package/dist/src/resources/resource-registry.test.d.ts +0 -6
  650. package/dist/src/resources/resource-registry.test.js +0 -54
  651. package/dist/src/resources/resource-registry.test.js.map +0 -1
  652. package/dist/src/routing/modelRouterService.test.d.ts +0 -6
  653. package/dist/src/routing/modelRouterService.test.js +0 -106
  654. package/dist/src/routing/modelRouterService.test.js.map +0 -1
  655. package/dist/src/routing/strategies/classifierStrategy.test.d.ts +0 -6
  656. package/dist/src/routing/strategies/classifierStrategy.test.js +0 -249
  657. package/dist/src/routing/strategies/classifierStrategy.test.js.map +0 -1
  658. package/dist/src/routing/strategies/compositeStrategy.test.d.ts +0 -6
  659. package/dist/src/routing/strategies/compositeStrategy.test.js +0 -124
  660. package/dist/src/routing/strategies/compositeStrategy.test.js.map +0 -1
  661. package/dist/src/routing/strategies/defaultStrategy.test.d.ts +0 -6
  662. package/dist/src/routing/strategies/defaultStrategy.test.js +0 -102
  663. package/dist/src/routing/strategies/defaultStrategy.test.js.map +0 -1
  664. package/dist/src/routing/strategies/fallbackStrategy.test.d.ts +0 -6
  665. package/dist/src/routing/strategies/fallbackStrategy.test.js +0 -96
  666. package/dist/src/routing/strategies/fallbackStrategy.test.js.map +0 -1
  667. package/dist/src/routing/strategies/numericalClassifierStrategy.test.d.ts +0 -6
  668. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js +0 -367
  669. package/dist/src/routing/strategies/numericalClassifierStrategy.test.js.map +0 -1
  670. package/dist/src/routing/strategies/overrideStrategy.test.d.ts +0 -6
  671. package/dist/src/routing/strategies/overrideStrategy.test.js +0 -59
  672. package/dist/src/routing/strategies/overrideStrategy.test.js.map +0 -1
  673. package/dist/src/safety/built-in.test.d.ts +0 -6
  674. package/dist/src/safety/built-in.test.js +0 -199
  675. package/dist/src/safety/built-in.test.js.map +0 -1
  676. package/dist/src/safety/checker-runner.test.d.ts +0 -6
  677. package/dist/src/safety/checker-runner.test.js +0 -238
  678. package/dist/src/safety/checker-runner.test.js.map +0 -1
  679. package/dist/src/safety/context-builder.test.d.ts +0 -6
  680. package/dist/src/safety/context-builder.test.js +0 -49
  681. package/dist/src/safety/context-builder.test.js.map +0 -1
  682. package/dist/src/safety/registry.test.d.ts +0 -6
  683. package/dist/src/safety/registry.test.js +0 -31
  684. package/dist/src/safety/registry.test.js.map +0 -1
  685. package/dist/src/scheduler/confirmation.test.d.ts +0 -6
  686. package/dist/src/scheduler/confirmation.test.js +0 -325
  687. package/dist/src/scheduler/confirmation.test.js.map +0 -1
  688. package/dist/src/scheduler/policy.test.d.ts +0 -6
  689. package/dist/src/scheduler/policy.test.js +0 -299
  690. package/dist/src/scheduler/policy.test.js.map +0 -1
  691. package/dist/src/scheduler/scheduler.test.d.ts +0 -6
  692. package/dist/src/scheduler/scheduler.test.js +0 -822
  693. package/dist/src/scheduler/scheduler.test.js.map +0 -1
  694. package/dist/src/scheduler/state-manager.test.d.ts +0 -6
  695. package/dist/src/scheduler/state-manager.test.js +0 -429
  696. package/dist/src/scheduler/state-manager.test.js.map +0 -1
  697. package/dist/src/scheduler/tool-executor.test.d.ts +0 -6
  698. package/dist/src/scheduler/tool-executor.test.js +0 -232
  699. package/dist/src/scheduler/tool-executor.test.js.map +0 -1
  700. package/dist/src/scheduler/tool-modifier.test.d.ts +0 -6
  701. package/dist/src/scheduler/tool-modifier.test.js +0 -159
  702. package/dist/src/scheduler/tool-modifier.test.js.map +0 -1
  703. package/dist/src/services/chatCompressionService.test.d.ts +0 -6
  704. package/dist/src/services/chatCompressionService.test.js +0 -573
  705. package/dist/src/services/chatCompressionService.test.js.map +0 -1
  706. package/dist/src/services/chatRecordingService.test.d.ts +0 -6
  707. package/dist/src/services/chatRecordingService.test.js +0 -486
  708. package/dist/src/services/chatRecordingService.test.js.map +0 -1
  709. package/dist/src/services/contextManager.test.d.ts +0 -6
  710. package/dist/src/services/contextManager.test.js +0 -104
  711. package/dist/src/services/contextManager.test.js.map +0 -1
  712. package/dist/src/services/environmentSanitization.test.d.ts +0 -6
  713. package/dist/src/services/environmentSanitization.test.js +0 -284
  714. package/dist/src/services/environmentSanitization.test.js.map +0 -1
  715. package/dist/src/services/fileDiscoveryService.test.d.ts +0 -6
  716. package/dist/src/services/fileDiscoveryService.test.js +0 -223
  717. package/dist/src/services/fileDiscoveryService.test.js.map +0 -1
  718. package/dist/src/services/fileSystemService.test.d.ts +0 -6
  719. package/dist/src/services/fileSystemService.test.js +0 -41
  720. package/dist/src/services/fileSystemService.test.js.map +0 -1
  721. package/dist/src/services/gitService.test.d.ts +0 -6
  722. package/dist/src/services/gitService.test.js +0 -264
  723. package/dist/src/services/gitService.test.js.map +0 -1
  724. package/dist/src/services/loopDetectionService.test.d.ts +0 -6
  725. package/dist/src/services/loopDetectionService.test.js +0 -881
  726. package/dist/src/services/loopDetectionService.test.js.map +0 -1
  727. package/dist/src/services/modelConfig.golden.test.d.ts +0 -6
  728. package/dist/src/services/modelConfig.golden.test.js +0 -74
  729. package/dist/src/services/modelConfig.golden.test.js.map +0 -1
  730. package/dist/src/services/modelConfig.integration.test.d.ts +0 -6
  731. package/dist/src/services/modelConfig.integration.test.js +0 -247
  732. package/dist/src/services/modelConfig.integration.test.js.map +0 -1
  733. package/dist/src/services/modelConfigBridge.test.d.ts +0 -6
  734. package/dist/src/services/modelConfigBridge.test.js +0 -410
  735. package/dist/src/services/modelConfigBridge.test.js.map +0 -1
  736. package/dist/src/services/modelConfigService.test.d.ts +0 -6
  737. package/dist/src/services/modelConfigService.test.js +0 -868
  738. package/dist/src/services/modelConfigService.test.js.map +0 -1
  739. package/dist/src/services/sessionSummaryService.test.d.ts +0 -6
  740. package/dist/src/services/sessionSummaryService.test.js +0 -785
  741. package/dist/src/services/sessionSummaryService.test.js.map +0 -1
  742. package/dist/src/services/sessionSummaryUtils.test.d.ts +0 -6
  743. package/dist/src/services/sessionSummaryUtils.test.js +0 -160
  744. package/dist/src/services/sessionSummaryUtils.test.js.map +0 -1
  745. package/dist/src/services/shellExecutionService.test.d.ts +0 -6
  746. package/dist/src/services/shellExecutionService.test.js +0 -1080
  747. package/dist/src/services/shellExecutionService.test.js.map +0 -1
  748. package/dist/src/skills/skillLoader.test.d.ts +0 -6
  749. package/dist/src/skills/skillLoader.test.js +0 -185
  750. package/dist/src/skills/skillLoader.test.js.map +0 -1
  751. package/dist/src/skills/skillManager.test.d.ts +0 -6
  752. package/dist/src/skills/skillManager.test.js +0 -297
  753. package/dist/src/skills/skillManager.test.js.map +0 -1
  754. package/dist/src/telemetry/activity-detector.test.d.ts +0 -6
  755. package/dist/src/telemetry/activity-detector.test.js +0 -136
  756. package/dist/src/telemetry/activity-detector.test.js.map +0 -1
  757. package/dist/src/telemetry/activity-monitor.test.d.ts +0 -6
  758. package/dist/src/telemetry/activity-monitor.test.js +0 -251
  759. package/dist/src/telemetry/activity-monitor.test.js.map +0 -1
  760. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.d.ts +0 -19
  761. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js +0 -964
  762. package/dist/src/telemetry/clearcut-logger/clearcut-logger.test.js.map +0 -1
  763. package/dist/src/telemetry/config.test.d.ts +0 -6
  764. package/dist/src/telemetry/config.test.js +0 -149
  765. package/dist/src/telemetry/config.test.js.map +0 -1
  766. package/dist/src/telemetry/gcp-exporters.test.d.ts +0 -6
  767. package/dist/src/telemetry/gcp-exporters.test.js +0 -318
  768. package/dist/src/telemetry/gcp-exporters.test.js.map +0 -1
  769. package/dist/src/telemetry/high-water-mark-tracker.test.d.ts +0 -6
  770. package/dist/src/telemetry/high-water-mark-tracker.test.js +0 -152
  771. package/dist/src/telemetry/high-water-mark-tracker.test.js.map +0 -1
  772. package/dist/src/telemetry/integration.test.circular.d.ts +0 -6
  773. package/dist/src/telemetry/integration.test.circular.js +0 -54
  774. package/dist/src/telemetry/integration.test.circular.js.map +0 -1
  775. package/dist/src/telemetry/loggers.test.circular.d.ts +0 -6
  776. package/dist/src/telemetry/loggers.test.circular.js +0 -107
  777. package/dist/src/telemetry/loggers.test.circular.js.map +0 -1
  778. package/dist/src/telemetry/loggers.test.d.ts +0 -6
  779. package/dist/src/telemetry/loggers.test.js +0 -1618
  780. package/dist/src/telemetry/loggers.test.js.map +0 -1
  781. package/dist/src/telemetry/memory-monitor.test.d.ts +0 -6
  782. package/dist/src/telemetry/memory-monitor.test.js +0 -472
  783. package/dist/src/telemetry/memory-monitor.test.js.map +0 -1
  784. package/dist/src/telemetry/metrics.test.d.ts +0 -6
  785. package/dist/src/telemetry/metrics.test.js +0 -1176
  786. package/dist/src/telemetry/metrics.test.js.map +0 -1
  787. package/dist/src/telemetry/rate-limiter.test.d.ts +0 -6
  788. package/dist/src/telemetry/rate-limiter.test.js +0 -207
  789. package/dist/src/telemetry/rate-limiter.test.js.map +0 -1
  790. package/dist/src/telemetry/sanitize.test.d.ts +0 -6
  791. package/dist/src/telemetry/sanitize.test.js +0 -279
  792. package/dist/src/telemetry/sanitize.test.js.map +0 -1
  793. package/dist/src/telemetry/sdk.test.d.ts +0 -6
  794. package/dist/src/telemetry/sdk.test.js +0 -360
  795. package/dist/src/telemetry/sdk.test.js.map +0 -1
  796. package/dist/src/telemetry/semantic.test.d.ts +0 -6
  797. package/dist/src/telemetry/semantic.test.js +0 -387
  798. package/dist/src/telemetry/semantic.test.js.map +0 -1
  799. package/dist/src/telemetry/semantic.truncation.test.d.ts +0 -1
  800. package/dist/src/telemetry/semantic.truncation.test.js +0 -92
  801. package/dist/src/telemetry/semantic.truncation.test.js.map +0 -1
  802. package/dist/src/telemetry/startupProfiler.test.d.ts +0 -6
  803. package/dist/src/telemetry/startupProfiler.test.js +0 -285
  804. package/dist/src/telemetry/startupProfiler.test.js.map +0 -1
  805. package/dist/src/telemetry/telemetry-utils.test.d.ts +0 -6
  806. package/dist/src/telemetry/telemetry-utils.test.js +0 -41
  807. package/dist/src/telemetry/telemetry-utils.test.js.map +0 -1
  808. package/dist/src/telemetry/telemetry.test.d.ts +0 -6
  809. package/dist/src/telemetry/telemetry.test.js +0 -57
  810. package/dist/src/telemetry/telemetry.test.js.map +0 -1
  811. package/dist/src/telemetry/uiTelemetry.test.d.ts +0 -6
  812. package/dist/src/telemetry/uiTelemetry.test.js +0 -584
  813. package/dist/src/telemetry/uiTelemetry.test.js.map +0 -1
  814. package/dist/src/tools/activate-skill.test.d.ts +0 -6
  815. package/dist/src/tools/activate-skill.test.js +0 -113
  816. package/dist/src/tools/activate-skill.test.js.map +0 -1
  817. package/dist/src/tools/ask-user.test.d.ts +0 -6
  818. package/dist/src/tools/ask-user.test.js +0 -187
  819. package/dist/src/tools/ask-user.test.js.map +0 -1
  820. package/dist/src/tools/base-tool-invocation.test.d.ts +0 -6
  821. package/dist/src/tools/base-tool-invocation.test.js +0 -85
  822. package/dist/src/tools/base-tool-invocation.test.js.map +0 -1
  823. package/dist/src/tools/confirmation-policy.test.d.ts +0 -6
  824. package/dist/src/tools/confirmation-policy.test.js +0 -143
  825. package/dist/src/tools/confirmation-policy.test.js.map +0 -1
  826. package/dist/src/tools/diffOptions.test.d.ts +0 -6
  827. package/dist/src/tools/diffOptions.test.js +0 -172
  828. package/dist/src/tools/diffOptions.test.js.map +0 -1
  829. package/dist/src/tools/edit.test.d.ts +0 -6
  830. package/dist/src/tools/edit.test.js +0 -729
  831. package/dist/src/tools/edit.test.js.map +0 -1
  832. package/dist/src/tools/get-internal-docs.test.d.ts +0 -6
  833. package/dist/src/tools/get-internal-docs.test.js +0 -57
  834. package/dist/src/tools/get-internal-docs.test.js.map +0 -1
  835. package/dist/src/tools/glob.test.d.ts +0 -6
  836. package/dist/src/tools/glob.test.js +0 -433
  837. package/dist/src/tools/glob.test.js.map +0 -1
  838. package/dist/src/tools/grep.test.d.ts +0 -6
  839. package/dist/src/tools/grep.test.js +0 -328
  840. package/dist/src/tools/grep.test.js.map +0 -1
  841. package/dist/src/tools/ls.test.d.ts +0 -6
  842. package/dist/src/tools/ls.test.js +0 -242
  843. package/dist/src/tools/ls.test.js.map +0 -1
  844. package/dist/src/tools/mcp-client-manager.test.d.ts +0 -6
  845. package/dist/src/tools/mcp-client-manager.test.js +0 -251
  846. package/dist/src/tools/mcp-client-manager.test.js.map +0 -1
  847. package/dist/src/tools/mcp-client.test.d.ts +0 -6
  848. package/dist/src/tools/mcp-client.test.js +0 -1346
  849. package/dist/src/tools/mcp-client.test.js.map +0 -1
  850. package/dist/src/tools/mcp-tool.test.d.ts +0 -6
  851. package/dist/src/tools/mcp-tool.test.js +0 -657
  852. package/dist/src/tools/mcp-tool.test.js.map +0 -1
  853. package/dist/src/tools/memoryTool.test.d.ts +0 -6
  854. package/dist/src/tools/memoryTool.test.js +0 -302
  855. package/dist/src/tools/memoryTool.test.js.map +0 -1
  856. package/dist/src/tools/message-bus-integration.test.d.ts +0 -6
  857. package/dist/src/tools/message-bus-integration.test.js +0 -169
  858. package/dist/src/tools/message-bus-integration.test.js.map +0 -1
  859. package/dist/src/tools/modifiable-tool.test.d.ts +0 -6
  860. package/dist/src/tools/modifiable-tool.test.js +0 -237
  861. package/dist/src/tools/modifiable-tool.test.js.map +0 -1
  862. package/dist/src/tools/read-file.test.d.ts +0 -6
  863. package/dist/src/tools/read-file.test.js +0 -376
  864. package/dist/src/tools/read-file.test.js.map +0 -1
  865. package/dist/src/tools/read-many-files.test.d.ts +0 -6
  866. package/dist/src/tools/read-many-files.test.js +0 -567
  867. package/dist/src/tools/read-many-files.test.js.map +0 -1
  868. package/dist/src/tools/ripGrep.test.d.ts +0 -6
  869. package/dist/src/tools/ripGrep.test.js +0 -1139
  870. package/dist/src/tools/ripGrep.test.js.map +0 -1
  871. package/dist/src/tools/shell.test.d.ts +0 -6
  872. package/dist/src/tools/shell.test.js +0 -526
  873. package/dist/src/tools/shell.test.js.map +0 -1
  874. package/dist/src/tools/tool-names.test.d.ts +0 -6
  875. package/dist/src/tools/tool-names.test.js +0 -43
  876. package/dist/src/tools/tool-names.test.js.map +0 -1
  877. package/dist/src/tools/tool-registry.test.d.ts +0 -6
  878. package/dist/src/tools/tool-registry.test.js +0 -461
  879. package/dist/src/tools/tool-registry.test.js.map +0 -1
  880. package/dist/src/tools/tools.test.d.ts +0 -6
  881. package/dist/src/tools/tools.test.js +0 -207
  882. package/dist/src/tools/tools.test.js.map +0 -1
  883. package/dist/src/tools/web-fetch.test.d.ts +0 -6
  884. package/dist/src/tools/web-fetch.test.js +0 -442
  885. package/dist/src/tools/web-fetch.test.js.map +0 -1
  886. package/dist/src/tools/web-search.test.d.ts +0 -6
  887. package/dist/src/tools/web-search.test.js +0 -214
  888. package/dist/src/tools/web-search.test.js.map +0 -1
  889. package/dist/src/tools/write-file.test.d.ts +0 -6
  890. package/dist/src/tools/write-file.test.js +0 -681
  891. package/dist/src/tools/write-file.test.js.map +0 -1
  892. package/dist/src/tools/write-todos.test.d.ts +0 -6
  893. package/dist/src/tools/write-todos.test.js +0 -90
  894. package/dist/src/tools/write-todos.test.js.map +0 -1
  895. package/dist/src/utils/apiConversionUtils.test.d.ts +0 -6
  896. package/dist/src/utils/apiConversionUtils.test.js +0 -150
  897. package/dist/src/utils/apiConversionUtils.test.js.map +0 -1
  898. package/dist/src/utils/bfsFileSearch.test.d.ts +0 -6
  899. package/dist/src/utils/bfsFileSearch.test.js +0 -227
  900. package/dist/src/utils/bfsFileSearch.test.js.map +0 -1
  901. package/dist/src/utils/channel.test.d.ts +0 -6
  902. package/dist/src/utils/channel.test.js +0 -170
  903. package/dist/src/utils/channel.test.js.map +0 -1
  904. package/dist/src/utils/checkpointUtils.test.d.ts +0 -6
  905. package/dist/src/utils/checkpointUtils.test.js +0 -229
  906. package/dist/src/utils/checkpointUtils.test.js.map +0 -1
  907. package/dist/src/utils/customHeaderUtils.test.d.ts +0 -6
  908. package/dist/src/utils/customHeaderUtils.test.js +0 -77
  909. package/dist/src/utils/customHeaderUtils.test.js.map +0 -1
  910. package/dist/src/utils/debugLogger.test.d.ts +0 -6
  911. package/dist/src/utils/debugLogger.test.js +0 -69
  912. package/dist/src/utils/debugLogger.test.js.map +0 -1
  913. package/dist/src/utils/delay.test.d.ts +0 -6
  914. package/dist/src/utils/delay.test.js +0 -88
  915. package/dist/src/utils/delay.test.js.map +0 -1
  916. package/dist/src/utils/editCorrector.test.d.ts +0 -6
  917. package/dist/src/utils/editCorrector.test.js +0 -533
  918. package/dist/src/utils/editCorrector.test.js.map +0 -1
  919. package/dist/src/utils/editor.test.d.ts +0 -6
  920. package/dist/src/utils/editor.test.js +0 -429
  921. package/dist/src/utils/editor.test.js.map +0 -1
  922. package/dist/src/utils/environmentContext.test.d.ts +0 -6
  923. package/dist/src/utils/environmentContext.test.js +0 -114
  924. package/dist/src/utils/environmentContext.test.js.map +0 -1
  925. package/dist/src/utils/errorParsing.test.d.ts +0 -6
  926. package/dist/src/utils/errorParsing.test.js +0 -84
  927. package/dist/src/utils/errorParsing.test.js.map +0 -1
  928. package/dist/src/utils/errorReporting.test.d.ts +0 -6
  929. package/dist/src/utils/errorReporting.test.js +0 -133
  930. package/dist/src/utils/errorReporting.test.js.map +0 -1
  931. package/dist/src/utils/errors.test.d.ts +0 -6
  932. package/dist/src/utils/errors.test.js +0 -155
  933. package/dist/src/utils/errors.test.js.map +0 -1
  934. package/dist/src/utils/events.test.d.ts +0 -6
  935. package/dist/src/utils/events.test.js +0 -237
  936. package/dist/src/utils/events.test.js.map +0 -1
  937. package/dist/src/utils/extensionLoader.test.d.ts +0 -6
  938. package/dist/src/utils/extensionLoader.test.js +0 -176
  939. package/dist/src/utils/extensionLoader.test.js.map +0 -1
  940. package/dist/src/utils/fileDiffUtils.test.d.ts +0 -6
  941. package/dist/src/utils/fileDiffUtils.test.js +0 -84
  942. package/dist/src/utils/fileDiffUtils.test.js.map +0 -1
  943. package/dist/src/utils/fileUtils.test.d.ts +0 -6
  944. package/dist/src/utils/fileUtils.test.js +0 -780
  945. package/dist/src/utils/fileUtils.test.js.map +0 -1
  946. package/dist/src/utils/filesearch/crawlCache.test.d.ts +0 -6
  947. package/dist/src/utils/filesearch/crawlCache.test.js +0 -103
  948. package/dist/src/utils/filesearch/crawlCache.test.js.map +0 -1
  949. package/dist/src/utils/filesearch/crawler.test.d.ts +0 -6
  950. package/dist/src/utils/filesearch/crawler.test.js +0 -495
  951. package/dist/src/utils/filesearch/crawler.test.js.map +0 -1
  952. package/dist/src/utils/filesearch/fileSearch.test.d.ts +0 -6
  953. package/dist/src/utils/filesearch/fileSearch.test.js +0 -663
  954. package/dist/src/utils/filesearch/fileSearch.test.js.map +0 -1
  955. package/dist/src/utils/filesearch/ignore.test.d.ts +0 -6
  956. package/dist/src/utils/filesearch/ignore.test.js +0 -144
  957. package/dist/src/utils/filesearch/ignore.test.js.map +0 -1
  958. package/dist/src/utils/filesearch/result-cache.test.d.ts +0 -6
  959. package/dist/src/utils/filesearch/result-cache.test.js +0 -46
  960. package/dist/src/utils/filesearch/result-cache.test.js.map +0 -1
  961. package/dist/src/utils/flashFallback.test.d.ts +0 -6
  962. package/dist/src/utils/flashFallback.test.js +0 -103
  963. package/dist/src/utils/flashFallback.test.js.map +0 -1
  964. package/dist/src/utils/formatters.test.d.ts +0 -6
  965. package/dist/src/utils/formatters.test.js +0 -26
  966. package/dist/src/utils/formatters.test.js.map +0 -1
  967. package/dist/src/utils/geminiIgnoreParser.test.d.ts +0 -6
  968. package/dist/src/utils/geminiIgnoreParser.test.js +0 -98
  969. package/dist/src/utils/geminiIgnoreParser.test.js.map +0 -1
  970. package/dist/src/utils/geminiTypeConversion.test.d.ts +0 -6
  971. package/dist/src/utils/geminiTypeConversion.test.js +0 -310
  972. package/dist/src/utils/geminiTypeConversion.test.js.map +0 -1
  973. package/dist/src/utils/generateContentResponseUtilities.test.d.ts +0 -6
  974. package/dist/src/utils/generateContentResponseUtilities.test.js +0 -512
  975. package/dist/src/utils/generateContentResponseUtilities.test.js.map +0 -1
  976. package/dist/src/utils/getFolderStructure.test.d.ts +0 -6
  977. package/dist/src/utils/getFolderStructure.test.js +0 -283
  978. package/dist/src/utils/getFolderStructure.test.js.map +0 -1
  979. package/dist/src/utils/gitIgnoreParser.test.d.ts +0 -6
  980. package/dist/src/utils/gitIgnoreParser.test.js +0 -243
  981. package/dist/src/utils/gitIgnoreParser.test.js.map +0 -1
  982. package/dist/src/utils/googleErrors.test.d.ts +0 -6
  983. package/dist/src/utils/googleErrors.test.js +0 -309
  984. package/dist/src/utils/googleErrors.test.js.map +0 -1
  985. package/dist/src/utils/googleQuotaErrors.test.d.ts +0 -6
  986. package/dist/src/utils/googleQuotaErrors.test.js +0 -548
  987. package/dist/src/utils/googleQuotaErrors.test.js.map +0 -1
  988. package/dist/src/utils/ignorePatterns.test.d.ts +0 -6
  989. package/dist/src/utils/ignorePatterns.test.js +0 -246
  990. package/dist/src/utils/ignorePatterns.test.js.map +0 -1
  991. package/dist/src/utils/installationManager.test.d.ts +0 -6
  992. package/dist/src/utils/installationManager.test.js +0 -93
  993. package/dist/src/utils/installationManager.test.js.map +0 -1
  994. package/dist/src/utils/llm-edit-fixer.test.d.ts +0 -6
  995. package/dist/src/utils/llm-edit-fixer.test.js +0 -223
  996. package/dist/src/utils/llm-edit-fixer.test.js.map +0 -1
  997. package/dist/src/utils/llmUtils.test.d.ts +0 -6
  998. package/dist/src/utils/llmUtils.test.js +0 -196
  999. package/dist/src/utils/llmUtils.test.js.map +0 -1
  1000. package/dist/src/utils/memoryDiscovery.test.d.ts +0 -6
  1001. package/dist/src/utils/memoryDiscovery.test.js +0 -542
  1002. package/dist/src/utils/memoryDiscovery.test.js.map +0 -1
  1003. package/dist/src/utils/memoryImportProcessor.test.d.ts +0 -6
  1004. package/dist/src/utils/memoryImportProcessor.test.js +0 -581
  1005. package/dist/src/utils/memoryImportProcessor.test.js.map +0 -1
  1006. package/dist/src/utils/nextSpeakerChecker.test.d.ts +0 -6
  1007. package/dist/src/utils/nextSpeakerChecker.test.js +0 -191
  1008. package/dist/src/utils/nextSpeakerChecker.test.js.map +0 -1
  1009. package/dist/src/utils/partUtils.test.d.ts +0 -6
  1010. package/dist/src/utils/partUtils.test.js +0 -397
  1011. package/dist/src/utils/partUtils.test.js.map +0 -1
  1012. package/dist/src/utils/pathCorrector.test.d.ts +0 -6
  1013. package/dist/src/utils/pathCorrector.test.js +0 -87
  1014. package/dist/src/utils/pathCorrector.test.js.map +0 -1
  1015. package/dist/src/utils/pathReader.test.d.ts +0 -6
  1016. package/dist/src/utils/pathReader.test.js +0 -406
  1017. package/dist/src/utils/pathReader.test.js.map +0 -1
  1018. package/dist/src/utils/paths.test.d.ts +0 -6
  1019. package/dist/src/utils/paths.test.js +0 -402
  1020. package/dist/src/utils/paths.test.js.map +0 -1
  1021. package/dist/src/utils/retry.test.d.ts +0 -6
  1022. package/dist/src/utils/retry.test.js +0 -548
  1023. package/dist/src/utils/retry.test.js.map +0 -1
  1024. package/dist/src/utils/retry_llm_error.test.d.ts +0 -6
  1025. package/dist/src/utils/retry_llm_error.test.js +0 -280
  1026. package/dist/src/utils/retry_llm_error.test.js.map +0 -1
  1027. package/dist/src/utils/safeJsonStringify.test.d.ts +0 -6
  1028. package/dist/src/utils/safeJsonStringify.test.js +0 -61
  1029. package/dist/src/utils/safeJsonStringify.test.js.map +0 -1
  1030. package/dist/src/utils/schemaValidator.test.d.ts +0 -6
  1031. package/dist/src/utils/schemaValidator.test.js +0 -113
  1032. package/dist/src/utils/schemaValidator.test.js.map +0 -1
  1033. package/dist/src/utils/secure-browser-launcher.test.d.ts +0 -6
  1034. package/dist/src/utils/secure-browser-launcher.test.js +0 -149
  1035. package/dist/src/utils/secure-browser-launcher.test.js.map +0 -1
  1036. package/dist/src/utils/security.test.d.ts +0 -1
  1037. package/dist/src/utils/security.test.js +0 -121
  1038. package/dist/src/utils/security.test.js.map +0 -1
  1039. package/dist/src/utils/shell-utils.integration.test.d.ts +0 -1
  1040. package/dist/src/utils/shell-utils.integration.test.js +0 -58
  1041. package/dist/src/utils/shell-utils.integration.test.js.map +0 -1
  1042. package/dist/src/utils/shell-utils.test.d.ts +0 -6
  1043. package/dist/src/utils/shell-utils.test.js +0 -437
  1044. package/dist/src/utils/shell-utils.test.js.map +0 -1
  1045. package/dist/src/utils/stdio.test.d.ts +0 -6
  1046. package/dist/src/utils/stdio.test.js +0 -47
  1047. package/dist/src/utils/stdio.test.js.map +0 -1
  1048. package/dist/src/utils/summarizer.test.d.ts +0 -6
  1049. package/dist/src/utils/summarizer.test.js +0 -152
  1050. package/dist/src/utils/summarizer.test.js.map +0 -1
  1051. package/dist/src/utils/systemEncoding.test.d.ts +0 -6
  1052. package/dist/src/utils/systemEncoding.test.js +0 -369
  1053. package/dist/src/utils/systemEncoding.test.js.map +0 -1
  1054. package/dist/src/utils/terminalSerializer.test.d.ts +0 -6
  1055. package/dist/src/utils/terminalSerializer.test.js +0 -193
  1056. package/dist/src/utils/terminalSerializer.test.js.map +0 -1
  1057. package/dist/src/utils/textUtils.test.d.ts +0 -6
  1058. package/dist/src/utils/textUtils.test.js +0 -76
  1059. package/dist/src/utils/textUtils.test.js.map +0 -1
  1060. package/dist/src/utils/thoughtUtils.test.d.ts +0 -6
  1061. package/dist/src/utils/thoughtUtils.test.js +0 -78
  1062. package/dist/src/utils/thoughtUtils.test.js.map +0 -1
  1063. package/dist/src/utils/tokenCalculation.test.d.ts +0 -6
  1064. package/dist/src/utils/tokenCalculation.test.js +0 -184
  1065. package/dist/src/utils/tokenCalculation.test.js.map +0 -1
  1066. package/dist/src/utils/tool-utils.test.d.ts +0 -6
  1067. package/dist/src/utils/tool-utils.test.js +0 -84
  1068. package/dist/src/utils/tool-utils.test.js.map +0 -1
  1069. package/dist/src/utils/toolCallContext.test.d.ts +0 -6
  1070. package/dist/src/utils/toolCallContext.test.js +0 -68
  1071. package/dist/src/utils/toolCallContext.test.js.map +0 -1
  1072. package/dist/src/utils/userAccountManager.test.d.ts +0 -6
  1073. package/dist/src/utils/userAccountManager.test.js +0 -225
  1074. package/dist/src/utils/userAccountManager.test.js.map +0 -1
  1075. package/dist/src/utils/version.test.d.ts +0 -6
  1076. package/dist/src/utils/version.test.js +0 -39
  1077. package/dist/src/utils/version.test.js.map +0 -1
  1078. package/dist/src/utils/workspaceContext.test.d.ts +0 -6
  1079. package/dist/src/utils/workspaceContext.test.js +0 -374
  1080. package/dist/src/utils/workspaceContext.test.js.map +0 -1
  1081. 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일)