repoburg 1.3.148 → 1.3.150

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 (515) hide show
  1. package/backend/dist/src/core-entities/session.entity.d.ts +1 -0
  2. package/backend/dist/src/core-entities/session.entity.js +8 -0
  3. package/backend/dist/src/core-entities/session.entity.js.map +1 -1
  4. package/backend/dist/src/interactive-chat/chat.service.js +9 -0
  5. package/backend/dist/src/interactive-chat/chat.service.js.map +1 -1
  6. package/backend/dist/src/main.js +3 -0
  7. package/backend/dist/src/main.js.map +1 -1
  8. package/backend/dist/src/sessions/dto/session.dto.d.ts +1 -0
  9. package/backend/dist/src/sessions/dto/session.dto.js +9 -0
  10. package/backend/dist/src/sessions/dto/session.dto.js.map +1 -1
  11. package/backend/dist/src/sessions/sessions.service.d.ts +1 -0
  12. package/backend/dist/src/sessions/sessions.service.js +7 -0
  13. package/backend/dist/src/sessions/sessions.service.js.map +1 -1
  14. package/backend/dist/src/sub-agents/sub-agent-runner.service.js +17 -0
  15. package/backend/dist/src/sub-agents/sub-agent-runner.service.js.map +1 -1
  16. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  17. package/package.json +1 -1
  18. package/.claude/settings.local.json +0 -7
  19. package/.playwright-mcp/console-2026-05-12T09-54-31-560Z.log +0 -13
  20. package/.playwright-mcp/console-2026-05-12T10-04-14-892Z.log +0 -13
  21. package/.playwright-mcp/console-2026-05-12T10-50-32-398Z.log +0 -14
  22. package/.playwright-mcp/console-2026-05-12T12-50-09-889Z.log +0 -13
  23. package/.playwright-mcp/console-2026-05-12T12-58-49-817Z.log +0 -60
  24. package/.playwright-mcp/console-2026-05-13T18-41-50-654Z.log +0 -13
  25. package/.playwright-mcp/console-2026-05-13T18-54-58-000Z.log +0 -13
  26. package/.playwright-mcp/console-2026-05-13T19-13-30-875Z.log +0 -95
  27. package/.playwright-mcp/console-2026-05-13T20-09-13-456Z.log +0 -17
  28. package/.playwright-mcp/console-2026-05-13T20-21-01-662Z.log +0 -13
  29. package/.playwright-mcp/console-2026-05-13T20-22-00-038Z.log +0 -15
  30. package/.playwright-mcp/console-2026-05-13T20-26-26-665Z.log +0 -28
  31. package/.playwright-mcp/console-2026-05-13T20-35-49-544Z.log +0 -26
  32. package/.playwright-mcp/console-2026-05-13T20-38-10-958Z.log +0 -676
  33. package/.playwright-mcp/console-2026-05-14T21-27-06-074Z.log +0 -69
  34. package/.playwright-mcp/console-2026-05-14T22-13-07-470Z.log +0 -101
  35. package/.playwright-mcp/console-2026-05-14T23-58-12-858Z.log +0 -28
  36. package/.playwright-mcp/console-2026-05-15T00-15-00-760Z.log +0 -81
  37. package/.playwright-mcp/page-2026-05-12T09-54-32-920Z.yml +0 -223
  38. package/.playwright-mcp/page-2026-05-12T09-54-42-067Z.yml +0 -190
  39. package/.playwright-mcp/page-2026-05-12T09-55-12-019Z.yml +0 -389
  40. package/.playwright-mcp/page-2026-05-12T09-55-49-065Z.yml +0 -428
  41. package/.playwright-mcp/page-2026-05-12T09-56-06-607Z.yml +0 -389
  42. package/.playwright-mcp/page-2026-05-12T09-56-23-371Z.yml +0 -196
  43. package/.playwright-mcp/page-2026-05-12T09-56-55-792Z.yml +0 -389
  44. package/.playwright-mcp/page-2026-05-12T10-04-15-716Z.yml +0 -164
  45. package/.playwright-mcp/page-2026-05-12T10-04-43-994Z.yml +0 -190
  46. package/.playwright-mcp/page-2026-05-12T10-05-04-616Z.yml +0 -389
  47. package/.playwright-mcp/page-2026-05-12T10-05-27-643Z.yml +0 -428
  48. package/.playwright-mcp/page-2026-05-12T10-05-47-851Z.yml +0 -389
  49. package/.playwright-mcp/page-2026-05-12T10-06-13-429Z.yml +0 -196
  50. package/.playwright-mcp/page-2026-05-12T10-06-58-147Z.yml +0 -389
  51. package/.playwright-mcp/page-2026-05-12T10-08-20-216Z.yml +0 -428
  52. package/.playwright-mcp/page-2026-05-12T10-08-38-177Z.yml +0 -389
  53. package/.playwright-mcp/page-2026-05-12T10-09-01-851Z.yml +0 -196
  54. package/.playwright-mcp/page-2026-05-12T10-09-24-888Z.yml +0 -389
  55. package/.playwright-mcp/page-2026-05-12T10-50-33-049Z.yml +0 -212
  56. package/.playwright-mcp/page-2026-05-12T10-50-48-496Z.yml +0 -196
  57. package/.playwright-mcp/page-2026-05-12T10-51-51-308Z.yml +0 -196
  58. package/.playwright-mcp/page-2026-05-12T10-52-07-379Z.yml +0 -196
  59. package/.playwright-mcp/page-2026-05-12T12-50-10-589Z.yml +0 -143
  60. package/.playwright-mcp/page-2026-05-12T12-50-25-461Z.yml +0 -196
  61. package/.playwright-mcp/page-2026-05-12T12-51-11-190Z.yml +0 -394
  62. package/.playwright-mcp/page-2026-05-12T12-52-21-138Z.yml +0 -524
  63. package/.playwright-mcp/page-2026-05-12T12-53-42-423Z.yml +0 -431
  64. package/.playwright-mcp/page-2026-05-12T12-54-18-549Z.yml +0 -196
  65. package/.playwright-mcp/page-2026-05-12T12-54-26-818Z.yml +0 -390
  66. package/.playwright-mcp/page-2026-05-12T12-55-32-697Z.yml +0 -520
  67. package/.playwright-mcp/page-2026-05-12T12-58-50-450Z.yml +0 -164
  68. package/.playwright-mcp/page-2026-05-12T12-59-12-954Z.yml +0 -196
  69. package/.playwright-mcp/page-2026-05-12T12-59-38-479Z.yml +0 -394
  70. package/.playwright-mcp/page-2026-05-12T13-01-17-580Z.yml +0 -524
  71. package/.playwright-mcp/page-2026-05-12T13-01-58-447Z.yml +0 -271
  72. package/.playwright-mcp/page-2026-05-12T13-03-12-109Z.yml +0 -394
  73. package/.playwright-mcp/page-2026-05-13T18-41-51-436Z.yml +0 -159
  74. package/.playwright-mcp/page-2026-05-13T18-42-27-482Z.yml +0 -4814
  75. package/.playwright-mcp/page-2026-05-13T18-54-58-644Z.yml +0 -154
  76. package/.playwright-mcp/page-2026-05-13T18-56-11-217Z.yml +0 -1560
  77. package/.playwright-mcp/page-2026-05-13T18-56-32-205Z.yml +0 -1560
  78. package/.playwright-mcp/page-2026-05-13T19-13-31-457Z.yml +0 -164
  79. package/.playwright-mcp/page-2026-05-13T19-14-26-248Z.yml +0 -1560
  80. package/.playwright-mcp/page-2026-05-13T19-15-02-355Z.yml +0 -1560
  81. package/.playwright-mcp/page-2026-05-13T20-09-14-478Z.yml +0 -149
  82. package/.playwright-mcp/page-2026-05-13T20-10-49-292Z.yml +0 -4814
  83. package/.playwright-mcp/page-2026-05-13T20-21-02-852Z.yml +0 -143
  84. package/.playwright-mcp/page-2026-05-13T20-22-01-084Z.yml +0 -143
  85. package/.playwright-mcp/page-2026-05-13T20-22-09-334Z.yml +0 -1561
  86. package/.playwright-mcp/page-2026-05-13T20-26-27-690Z.yml +0 -143
  87. package/.playwright-mcp/page-2026-05-13T20-26-53-324Z.yml +0 -1561
  88. package/.playwright-mcp/page-2026-05-13T20-27-35-395Z.yml +0 -1561
  89. package/.playwright-mcp/page-2026-05-13T20-35-50-708Z.yml +0 -149
  90. package/.playwright-mcp/page-2026-05-13T20-37-41-379Z.yml +0 -0
  91. package/.playwright-mcp/page-2026-05-13T20-38-12-049Z.yml +0 -149
  92. package/.playwright-mcp/page-2026-05-13T20-38-19-708Z.yml +0 -1561
  93. package/.playwright-mcp/page-2026-05-14T21-27-07-278Z.yml +0 -164
  94. package/.playwright-mcp/page-2026-05-14T22-13-07-628Z.yml +0 -5
  95. package/.playwright-mcp/page-2026-05-14T22-13-27-676Z.yml +0 -1561
  96. package/.playwright-mcp/page-2026-05-14T23-58-13-064Z.yml +0 -3
  97. package/.playwright-mcp/page-2026-05-14T23-58-33-500Z.yml +0 -1561
  98. package/.playwright-mcp/page-2026-05-15T00-15-00-945Z.yml +0 -3
  99. package/.run/backend _ build.run.xml +0 -12
  100. package/.run/backend _ lint.run.xml +0 -12
  101. package/.run/backend _ test.run.xml +0 -12
  102. package/.run/frontend _ build.run.xml +0 -12
  103. package/.run/frontend _ lint_fix.run.xml +0 -12
  104. package/CODEMAP.md +0 -53
  105. package/backend/.repoburg/hooks/README.md +0 -53
  106. package/backend/.repoburg/hooks/eslint-hook.ts +0 -46
  107. package/backend/.repoburg/hooks/example-hook.ts +0 -62
  108. package/backend/CODEMAP.md +0 -48
  109. package/backend/README.md +0 -3
  110. package/backend/coverage/clover.xml +0 -12003
  111. package/backend/coverage/coverage-final.json +0 -313
  112. package/backend/coverage/lcov-report/base.css +0 -224
  113. package/backend/coverage/lcov-report/block-navigation.js +0 -87
  114. package/backend/coverage/lcov-report/favicon.png +0 -0
  115. package/backend/coverage/lcov-report/index.html +0 -1301
  116. package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +0 -116
  117. package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +0 -445
  118. package/backend/coverage/lcov-report/packages/gemini-core/index.html +0 -116
  119. package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +0 -127
  120. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +0 -193
  121. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +0 -832
  122. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +0 -206
  123. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +0 -469
  124. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +0 -1705
  125. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +0 -790
  126. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +0 -454
  127. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +0 -685
  128. package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +0 -307
  129. package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +0 -146
  130. package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +0 -151
  131. package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +0 -172
  132. package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +0 -490
  133. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +0 -1237
  134. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +0 -139
  135. package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +0 -176
  136. package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +0 -409
  137. package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +0 -181
  138. package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +0 -116
  139. package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +0 -187
  140. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +0 -229
  141. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +0 -634
  142. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +0 -373
  143. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +0 -191
  144. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +0 -124
  145. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +0 -835
  146. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +0 -211
  147. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +0 -421
  148. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +0 -191
  149. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +0 -592
  150. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +0 -388
  151. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +0 -877
  152. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +0 -112
  153. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +0 -502
  154. package/backend/coverage/lcov-report/packages/tokenpatch/index.html +0 -161
  155. package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +0 -415
  156. package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +0 -139
  157. package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +0 -1249
  158. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +0 -131
  159. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +0 -187
  160. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +0 -193
  161. package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +0 -178
  162. package/backend/coverage/lcov-report/prettify.css +0 -1
  163. package/backend/coverage/lcov-report/prettify.js +0 -2
  164. package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  165. package/backend/coverage/lcov-report/sorter.js +0 -210
  166. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +0 -1549
  167. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +0 -904
  168. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +0 -175
  169. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +0 -1534
  170. package/backend/coverage/lcov-report/src/ai-actions/index.html +0 -161
  171. package/backend/coverage/lcov-report/src/app.controller.ts.html +0 -151
  172. package/backend/coverage/lcov-report/src/app.module.ts.html +0 -451
  173. package/backend/coverage/lcov-report/src/app.service.ts.html +0 -163
  174. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +0 -1609
  175. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +0 -136
  176. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +0 -2281
  177. package/backend/coverage/lcov-report/src/application-state/dto/index.html +0 -416
  178. package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +0 -109
  179. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +0 -118
  180. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +0 -109
  181. package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +0 -124
  182. package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +0 -121
  183. package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +0 -124
  184. package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +0 -115
  185. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +0 -115
  186. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +0 -127
  187. package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +0 -118
  188. package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +0 -109
  189. package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +0 -139
  190. package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +0 -109
  191. package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +0 -109
  192. package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +0 -118
  193. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +0 -124
  194. package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +0 -118
  195. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +0 -109
  196. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +0 -124
  197. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +0 -118
  198. package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +0 -109
  199. package/backend/coverage/lcov-report/src/application-state/index.html +0 -146
  200. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +0 -1297
  201. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +0 -712
  202. package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +0 -379
  203. package/backend/coverage/lcov-report/src/common/cache/index.html +0 -146
  204. package/backend/coverage/lcov-report/src/common/common.module.ts.html +0 -121
  205. package/backend/coverage/lcov-report/src/common/index.html +0 -116
  206. package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +0 -337
  207. package/backend/coverage/lcov-report/src/common/interceptors/index.html +0 -116
  208. package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +0 -265
  209. package/backend/coverage/lcov-report/src/common/middleware/index.html +0 -116
  210. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +0 -118
  211. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +0 -1501
  212. package/backend/coverage/lcov-report/src/context-generation/index.html +0 -131
  213. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +0 -427
  214. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +0 -142
  215. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +0 -442
  216. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +0 -211
  217. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +0 -116
  218. package/backend/coverage/lcov-report/src/context-snippets/index.html +0 -146
  219. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +0 -724
  220. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +0 -142
  221. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +0 -1015
  222. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +0 -511
  223. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +0 -116
  224. package/backend/coverage/lcov-report/src/context-templates/index.html +0 -146
  225. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +0 -613
  226. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +0 -124
  227. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +0 -211
  228. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +0 -190
  229. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +0 -439
  230. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +0 -205
  231. package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +0 -241
  232. package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +0 -553
  233. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +0 -208
  234. package/backend/coverage/lcov-report/src/core-entities/index.html +0 -371
  235. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +0 -136
  236. package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +0 -388
  237. package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +0 -256
  238. package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +0 -256
  239. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +0 -181
  240. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +0 -745
  241. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +0 -688
  242. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +0 -349
  243. package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +0 -235
  244. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +0 -442
  245. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +0 -124
  246. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +0 -304
  247. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +0 -205
  248. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +0 -116
  249. package/backend/coverage/lcov-report/src/custom-snippets/index.html +0 -146
  250. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +0 -463
  251. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +0 -124
  252. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +0 -310
  253. package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +0 -244
  254. package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +0 -116
  255. package/backend/coverage/lcov-report/src/custom-variables/index.html +0 -146
  256. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +0 -295
  257. package/backend/coverage/lcov-report/src/events/events.module.ts.html +0 -109
  258. package/backend/coverage/lcov-report/src/events/index.html +0 -146
  259. package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +0 -466
  260. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +0 -130
  261. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +0 -116
  262. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +0 -130
  263. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +0 -124
  264. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +0 -238
  265. package/backend/coverage/lcov-report/src/execution-logs/index.html +0 -146
  266. package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +0 -553
  267. package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +0 -109
  268. package/backend/coverage/lcov-report/src/gemini/index.html +0 -131
  269. package/backend/coverage/lcov-report/src/global-config/dto/index.html +0 -116
  270. package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +0 -367
  271. package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +0 -220
  272. package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +0 -115
  273. package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +0 -397
  274. package/backend/coverage/lcov-report/src/global-config/index.html +0 -146
  275. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +0 -340
  276. package/backend/coverage/lcov-report/src/index.html +0 -206
  277. package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +0 -187
  278. package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +0 -1825
  279. package/backend/coverage/lcov-report/src/interactive-chat/index.html +0 -146
  280. package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +0 -343
  281. package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +0 -116
  282. package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +0 -214
  283. package/backend/coverage/lcov-report/src/llm-call-logs/index.html +0 -146
  284. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +0 -634
  285. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +0 -124
  286. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +0 -643
  287. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +0 -1090
  288. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +0 -433
  289. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +0 -757
  290. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +0 -586
  291. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +0 -1153
  292. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +0 -124
  293. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +0 -103
  294. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +0 -124
  295. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +0 -106
  296. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +0 -106
  297. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +0 -118
  298. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +0 -190
  299. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +0 -196
  300. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +0 -91
  301. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +0 -356
  302. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +0 -106
  303. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +0 -124
  304. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +0 -124
  305. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +0 -214
  306. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +0 -202
  307. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +0 -151
  308. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +0 -181
  309. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +0 -130
  310. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +0 -631
  311. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +0 -469
  312. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +0 -448
  313. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +0 -1351
  314. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +0 -868
  315. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +0 -481
  316. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +0 -416
  317. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +0 -580
  318. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +0 -352
  319. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +0 -1054
  320. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +0 -331
  321. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +0 -403
  322. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +0 -176
  323. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +0 -100
  324. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +0 -724
  325. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +0 -358
  326. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +0 -379
  327. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +0 -838
  328. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +0 -1702
  329. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +0 -1459
  330. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +0 -679
  331. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +0 -964
  332. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +0 -625
  333. package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +0 -103
  334. package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +0 -116
  335. package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +0 -1645
  336. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +0 -238
  337. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +0 -181
  338. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +0 -161
  339. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +0 -313
  340. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +0 -466
  341. package/backend/coverage/lcov-report/src/llm-orchestration/index.html +0 -176
  342. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +0 -319
  343. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +0 -706
  344. package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +0 -1150
  345. package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +0 -131
  346. package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +0 -658
  347. package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +0 -127
  348. package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +0 -547
  349. package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +0 -1681
  350. package/backend/coverage/lcov-report/src/llm-provider/index.html +0 -236
  351. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +0 -187
  352. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +0 -361
  353. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +0 -175
  354. package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +0 -1780
  355. package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +0 -1867
  356. package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +0 -1891
  357. package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +0 -304
  358. package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +0 -1666
  359. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +0 -131
  360. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +0 -436
  361. package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +0 -319
  362. package/backend/coverage/lcov-report/src/llm-responses/index.html +0 -146
  363. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +0 -283
  364. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +0 -184
  365. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +0 -1474
  366. package/backend/coverage/lcov-report/src/main.ts.html +0 -463
  367. package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +0 -145
  368. package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +0 -127
  369. package/backend/coverage/lcov-report/src/mcp/dto/index.html +0 -146
  370. package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +0 -112
  371. package/backend/coverage/lcov-report/src/mcp/index.html +0 -146
  372. package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +0 -340
  373. package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +0 -124
  374. package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +0 -1345
  375. package/backend/coverage/lcov-report/src/message-bus/dto/index.html +0 -116
  376. package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +0 -109
  377. package/backend/coverage/lcov-report/src/message-bus/index.html +0 -146
  378. package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +0 -148
  379. package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +0 -115
  380. package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +0 -151
  381. package/backend/coverage/lcov-report/src/projects/dto/index.html +0 -116
  382. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +0 -196
  383. package/backend/coverage/lcov-report/src/projects/index.html +0 -146
  384. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +0 -322
  385. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +0 -124
  386. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +0 -235
  387. package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +0 -280
  388. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +0 -439
  389. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +0 -271
  390. package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +0 -271
  391. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +0 -172
  392. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +0 -116
  393. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +0 -157
  394. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +0 -148
  395. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +0 -151
  396. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +0 -161
  397. package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +0 -247
  398. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +0 -94
  399. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +0 -100
  400. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +0 -97
  401. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +0 -100
  402. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +0 -304
  403. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +0 -94
  404. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +0 -341
  405. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +0 -100
  406. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +0 -97
  407. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +0 -94
  408. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +0 -94
  409. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +0 -94
  410. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +0 -94
  411. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +0 -94
  412. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +0 -100
  413. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +0 -94
  414. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +0 -94
  415. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +0 -94
  416. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +0 -97
  417. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +0 -131
  418. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +0 -121
  419. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +0 -116
  420. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +0 -115
  421. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +0 -136
  422. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +0 -131
  423. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +0 -190
  424. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +0 -421
  425. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +0 -265
  426. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +0 -161
  427. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +0 -388
  428. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +0 -265
  429. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +0 -274
  430. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +0 -146
  431. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +0 -250
  432. package/backend/coverage/lcov-report/src/seeding/index.html +0 -236
  433. package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +0 -193
  434. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +0 -211
  435. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +0 -187
  436. package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +0 -742
  437. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +0 -397
  438. package/backend/coverage/lcov-report/src/session-followup/index.html +0 -131
  439. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +0 -130
  440. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +0 -718
  441. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +0 -116
  442. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +0 -577
  443. package/backend/coverage/lcov-report/src/session-inputs/index.html +0 -176
  444. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +0 -832
  445. package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +0 -220
  446. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +0 -685
  447. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +0 -229
  448. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +0 -1981
  449. package/backend/coverage/lcov-report/src/session-transfer/index.html +0 -131
  450. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +0 -160
  451. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +0 -883
  452. package/backend/coverage/lcov-report/src/sessions/dto/index.html +0 -116
  453. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +0 -769
  454. package/backend/coverage/lcov-report/src/sessions/index.html +0 -146
  455. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +0 -1306
  456. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +0 -220
  457. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +0 -2797
  458. package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +0 -355
  459. package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +0 -131
  460. package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +0 -295
  461. package/backend/coverage/lcov-report/src/sub-agents/index.html +0 -221
  462. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +0 -463
  463. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +0 -2428
  464. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +0 -580
  465. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +0 -550
  466. package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +0 -475
  467. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +0 -373
  468. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +0 -205
  469. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +0 -619
  470. package/backend/coverage/lcov-report/src/syntax-validation/index.html +0 -131
  471. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +0 -109
  472. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +0 -724
  473. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +0 -176
  474. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +0 -157
  475. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +0 -148
  476. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +0 -517
  477. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +0 -121
  478. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +0 -118
  479. package/backend/coverage/lcov-report/src/system-prompts/index.html +0 -146
  480. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +0 -1060
  481. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +0 -160
  482. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +0 -2254
  483. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +0 -178
  484. package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +0 -181
  485. package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +0 -131
  486. package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +0 -178
  487. package/backend/coverage/lcov-report/src/tool-hooks/index.html +0 -146
  488. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +0 -481
  489. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +0 -127
  490. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +0 -1222
  491. package/backend/coverage/lcov-report/src/tracing.ts.html +0 -214
  492. package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +0 -130
  493. package/backend/coverage/lcov-report/src/types/index.html +0 -116
  494. package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +0 -253
  495. package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +0 -310
  496. package/backend/coverage/lcov-report/src/utils/index.html +0 -191
  497. package/backend/coverage/lcov-report/src/utils/index.ts.html +0 -100
  498. package/backend/coverage/lcov-report/src/utils/short-id.ts.html +0 -109
  499. package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +0 -412
  500. package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +0 -223
  501. package/backend/coverage/lcov-report/src/visual-editor/index.html +0 -146
  502. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +0 -409
  503. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +0 -130
  504. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +0 -118
  505. package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +0 -112
  506. package/backend/coverage/lcov-report/src/workspace/dto/index.html +0 -131
  507. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +0 -193
  508. package/backend/coverage/lcov-report/src/workspace/index.html +0 -146
  509. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +0 -394
  510. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +0 -121
  511. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +0 -1027
  512. package/backend/coverage/lcov.info +0 -20220
  513. package/backend/packages/tokenpatch/CODEMAP.md +0 -25
  514. package/daemon/CODEMAP.md +0 -23
  515. package/visual-editor-proxy/CODEMAP.md +0 -21
@@ -1,1345 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/mcp/mcp.service.ts</title>
7
- <meta charset="utf-8" />
8
- <link rel="stylesheet" href="../../prettify.css" />
9
- <link rel="stylesheet" href="../../base.css" />
10
- <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
- <meta name="viewport" content="width=device-width, initial-scale=1" />
12
- <style type='text/css'>
13
- .coverage-summary .sorter {
14
- background-image: url(../../sort-arrow-sprite.png);
15
- }
16
- </style>
17
- </head>
18
-
19
- <body>
20
- <div class='wrapper'>
21
- <div class='pad1'>
22
- <h1><a href="../../index.html">All files</a> / <a href="index.html">src/mcp</a> mcp.service.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">62.85% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>110/175</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">46.93% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>23/49</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">70.37% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>19/27</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">62.73% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>101/161</span>
50
- </div>
51
-
52
-
53
- </div>
54
- <p class="quiet">
55
- Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
- </p>
57
- <template id="filterTemplate">
58
- <div class="quiet">
59
- Filter:
60
- <input type="search" id="fileSearch">
61
- </div>
62
- </template>
63
- </div>
64
- <div class='status-line medium'></div>
65
- <pre><table class="coverage">
66
- <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
- <a name='L2'></a><a href='#L2'>2</a>
68
- <a name='L3'></a><a href='#L3'>3</a>
69
- <a name='L4'></a><a href='#L4'>4</a>
70
- <a name='L5'></a><a href='#L5'>5</a>
71
- <a name='L6'></a><a href='#L6'>6</a>
72
- <a name='L7'></a><a href='#L7'>7</a>
73
- <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a>
75
- <a name='L10'></a><a href='#L10'>10</a>
76
- <a name='L11'></a><a href='#L11'>11</a>
77
- <a name='L12'></a><a href='#L12'>12</a>
78
- <a name='L13'></a><a href='#L13'>13</a>
79
- <a name='L14'></a><a href='#L14'>14</a>
80
- <a name='L15'></a><a href='#L15'>15</a>
81
- <a name='L16'></a><a href='#L16'>16</a>
82
- <a name='L17'></a><a href='#L17'>17</a>
83
- <a name='L18'></a><a href='#L18'>18</a>
84
- <a name='L19'></a><a href='#L19'>19</a>
85
- <a name='L20'></a><a href='#L20'>20</a>
86
- <a name='L21'></a><a href='#L21'>21</a>
87
- <a name='L22'></a><a href='#L22'>22</a>
88
- <a name='L23'></a><a href='#L23'>23</a>
89
- <a name='L24'></a><a href='#L24'>24</a>
90
- <a name='L25'></a><a href='#L25'>25</a>
91
- <a name='L26'></a><a href='#L26'>26</a>
92
- <a name='L27'></a><a href='#L27'>27</a>
93
- <a name='L28'></a><a href='#L28'>28</a>
94
- <a name='L29'></a><a href='#L29'>29</a>
95
- <a name='L30'></a><a href='#L30'>30</a>
96
- <a name='L31'></a><a href='#L31'>31</a>
97
- <a name='L32'></a><a href='#L32'>32</a>
98
- <a name='L33'></a><a href='#L33'>33</a>
99
- <a name='L34'></a><a href='#L34'>34</a>
100
- <a name='L35'></a><a href='#L35'>35</a>
101
- <a name='L36'></a><a href='#L36'>36</a>
102
- <a name='L37'></a><a href='#L37'>37</a>
103
- <a name='L38'></a><a href='#L38'>38</a>
104
- <a name='L39'></a><a href='#L39'>39</a>
105
- <a name='L40'></a><a href='#L40'>40</a>
106
- <a name='L41'></a><a href='#L41'>41</a>
107
- <a name='L42'></a><a href='#L42'>42</a>
108
- <a name='L43'></a><a href='#L43'>43</a>
109
- <a name='L44'></a><a href='#L44'>44</a>
110
- <a name='L45'></a><a href='#L45'>45</a>
111
- <a name='L46'></a><a href='#L46'>46</a>
112
- <a name='L47'></a><a href='#L47'>47</a>
113
- <a name='L48'></a><a href='#L48'>48</a>
114
- <a name='L49'></a><a href='#L49'>49</a>
115
- <a name='L50'></a><a href='#L50'>50</a>
116
- <a name='L51'></a><a href='#L51'>51</a>
117
- <a name='L52'></a><a href='#L52'>52</a>
118
- <a name='L53'></a><a href='#L53'>53</a>
119
- <a name='L54'></a><a href='#L54'>54</a>
120
- <a name='L55'></a><a href='#L55'>55</a>
121
- <a name='L56'></a><a href='#L56'>56</a>
122
- <a name='L57'></a><a href='#L57'>57</a>
123
- <a name='L58'></a><a href='#L58'>58</a>
124
- <a name='L59'></a><a href='#L59'>59</a>
125
- <a name='L60'></a><a href='#L60'>60</a>
126
- <a name='L61'></a><a href='#L61'>61</a>
127
- <a name='L62'></a><a href='#L62'>62</a>
128
- <a name='L63'></a><a href='#L63'>63</a>
129
- <a name='L64'></a><a href='#L64'>64</a>
130
- <a name='L65'></a><a href='#L65'>65</a>
131
- <a name='L66'></a><a href='#L66'>66</a>
132
- <a name='L67'></a><a href='#L67'>67</a>
133
- <a name='L68'></a><a href='#L68'>68</a>
134
- <a name='L69'></a><a href='#L69'>69</a>
135
- <a name='L70'></a><a href='#L70'>70</a>
136
- <a name='L71'></a><a href='#L71'>71</a>
137
- <a name='L72'></a><a href='#L72'>72</a>
138
- <a name='L73'></a><a href='#L73'>73</a>
139
- <a name='L74'></a><a href='#L74'>74</a>
140
- <a name='L75'></a><a href='#L75'>75</a>
141
- <a name='L76'></a><a href='#L76'>76</a>
142
- <a name='L77'></a><a href='#L77'>77</a>
143
- <a name='L78'></a><a href='#L78'>78</a>
144
- <a name='L79'></a><a href='#L79'>79</a>
145
- <a name='L80'></a><a href='#L80'>80</a>
146
- <a name='L81'></a><a href='#L81'>81</a>
147
- <a name='L82'></a><a href='#L82'>82</a>
148
- <a name='L83'></a><a href='#L83'>83</a>
149
- <a name='L84'></a><a href='#L84'>84</a>
150
- <a name='L85'></a><a href='#L85'>85</a>
151
- <a name='L86'></a><a href='#L86'>86</a>
152
- <a name='L87'></a><a href='#L87'>87</a>
153
- <a name='L88'></a><a href='#L88'>88</a>
154
- <a name='L89'></a><a href='#L89'>89</a>
155
- <a name='L90'></a><a href='#L90'>90</a>
156
- <a name='L91'></a><a href='#L91'>91</a>
157
- <a name='L92'></a><a href='#L92'>92</a>
158
- <a name='L93'></a><a href='#L93'>93</a>
159
- <a name='L94'></a><a href='#L94'>94</a>
160
- <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a>
162
- <a name='L97'></a><a href='#L97'>97</a>
163
- <a name='L98'></a><a href='#L98'>98</a>
164
- <a name='L99'></a><a href='#L99'>99</a>
165
- <a name='L100'></a><a href='#L100'>100</a>
166
- <a name='L101'></a><a href='#L101'>101</a>
167
- <a name='L102'></a><a href='#L102'>102</a>
168
- <a name='L103'></a><a href='#L103'>103</a>
169
- <a name='L104'></a><a href='#L104'>104</a>
170
- <a name='L105'></a><a href='#L105'>105</a>
171
- <a name='L106'></a><a href='#L106'>106</a>
172
- <a name='L107'></a><a href='#L107'>107</a>
173
- <a name='L108'></a><a href='#L108'>108</a>
174
- <a name='L109'></a><a href='#L109'>109</a>
175
- <a name='L110'></a><a href='#L110'>110</a>
176
- <a name='L111'></a><a href='#L111'>111</a>
177
- <a name='L112'></a><a href='#L112'>112</a>
178
- <a name='L113'></a><a href='#L113'>113</a>
179
- <a name='L114'></a><a href='#L114'>114</a>
180
- <a name='L115'></a><a href='#L115'>115</a>
181
- <a name='L116'></a><a href='#L116'>116</a>
182
- <a name='L117'></a><a href='#L117'>117</a>
183
- <a name='L118'></a><a href='#L118'>118</a>
184
- <a name='L119'></a><a href='#L119'>119</a>
185
- <a name='L120'></a><a href='#L120'>120</a>
186
- <a name='L121'></a><a href='#L121'>121</a>
187
- <a name='L122'></a><a href='#L122'>122</a>
188
- <a name='L123'></a><a href='#L123'>123</a>
189
- <a name='L124'></a><a href='#L124'>124</a>
190
- <a name='L125'></a><a href='#L125'>125</a>
191
- <a name='L126'></a><a href='#L126'>126</a>
192
- <a name='L127'></a><a href='#L127'>127</a>
193
- <a name='L128'></a><a href='#L128'>128</a>
194
- <a name='L129'></a><a href='#L129'>129</a>
195
- <a name='L130'></a><a href='#L130'>130</a>
196
- <a name='L131'></a><a href='#L131'>131</a>
197
- <a name='L132'></a><a href='#L132'>132</a>
198
- <a name='L133'></a><a href='#L133'>133</a>
199
- <a name='L134'></a><a href='#L134'>134</a>
200
- <a name='L135'></a><a href='#L135'>135</a>
201
- <a name='L136'></a><a href='#L136'>136</a>
202
- <a name='L137'></a><a href='#L137'>137</a>
203
- <a name='L138'></a><a href='#L138'>138</a>
204
- <a name='L139'></a><a href='#L139'>139</a>
205
- <a name='L140'></a><a href='#L140'>140</a>
206
- <a name='L141'></a><a href='#L141'>141</a>
207
- <a name='L142'></a><a href='#L142'>142</a>
208
- <a name='L143'></a><a href='#L143'>143</a>
209
- <a name='L144'></a><a href='#L144'>144</a>
210
- <a name='L145'></a><a href='#L145'>145</a>
211
- <a name='L146'></a><a href='#L146'>146</a>
212
- <a name='L147'></a><a href='#L147'>147</a>
213
- <a name='L148'></a><a href='#L148'>148</a>
214
- <a name='L149'></a><a href='#L149'>149</a>
215
- <a name='L150'></a><a href='#L150'>150</a>
216
- <a name='L151'></a><a href='#L151'>151</a>
217
- <a name='L152'></a><a href='#L152'>152</a>
218
- <a name='L153'></a><a href='#L153'>153</a>
219
- <a name='L154'></a><a href='#L154'>154</a>
220
- <a name='L155'></a><a href='#L155'>155</a>
221
- <a name='L156'></a><a href='#L156'>156</a>
222
- <a name='L157'></a><a href='#L157'>157</a>
223
- <a name='L158'></a><a href='#L158'>158</a>
224
- <a name='L159'></a><a href='#L159'>159</a>
225
- <a name='L160'></a><a href='#L160'>160</a>
226
- <a name='L161'></a><a href='#L161'>161</a>
227
- <a name='L162'></a><a href='#L162'>162</a>
228
- <a name='L163'></a><a href='#L163'>163</a>
229
- <a name='L164'></a><a href='#L164'>164</a>
230
- <a name='L165'></a><a href='#L165'>165</a>
231
- <a name='L166'></a><a href='#L166'>166</a>
232
- <a name='L167'></a><a href='#L167'>167</a>
233
- <a name='L168'></a><a href='#L168'>168</a>
234
- <a name='L169'></a><a href='#L169'>169</a>
235
- <a name='L170'></a><a href='#L170'>170</a>
236
- <a name='L171'></a><a href='#L171'>171</a>
237
- <a name='L172'></a><a href='#L172'>172</a>
238
- <a name='L173'></a><a href='#L173'>173</a>
239
- <a name='L174'></a><a href='#L174'>174</a>
240
- <a name='L175'></a><a href='#L175'>175</a>
241
- <a name='L176'></a><a href='#L176'>176</a>
242
- <a name='L177'></a><a href='#L177'>177</a>
243
- <a name='L178'></a><a href='#L178'>178</a>
244
- <a name='L179'></a><a href='#L179'>179</a>
245
- <a name='L180'></a><a href='#L180'>180</a>
246
- <a name='L181'></a><a href='#L181'>181</a>
247
- <a name='L182'></a><a href='#L182'>182</a>
248
- <a name='L183'></a><a href='#L183'>183</a>
249
- <a name='L184'></a><a href='#L184'>184</a>
250
- <a name='L185'></a><a href='#L185'>185</a>
251
- <a name='L186'></a><a href='#L186'>186</a>
252
- <a name='L187'></a><a href='#L187'>187</a>
253
- <a name='L188'></a><a href='#L188'>188</a>
254
- <a name='L189'></a><a href='#L189'>189</a>
255
- <a name='L190'></a><a href='#L190'>190</a>
256
- <a name='L191'></a><a href='#L191'>191</a>
257
- <a name='L192'></a><a href='#L192'>192</a>
258
- <a name='L193'></a><a href='#L193'>193</a>
259
- <a name='L194'></a><a href='#L194'>194</a>
260
- <a name='L195'></a><a href='#L195'>195</a>
261
- <a name='L196'></a><a href='#L196'>196</a>
262
- <a name='L197'></a><a href='#L197'>197</a>
263
- <a name='L198'></a><a href='#L198'>198</a>
264
- <a name='L199'></a><a href='#L199'>199</a>
265
- <a name='L200'></a><a href='#L200'>200</a>
266
- <a name='L201'></a><a href='#L201'>201</a>
267
- <a name='L202'></a><a href='#L202'>202</a>
268
- <a name='L203'></a><a href='#L203'>203</a>
269
- <a name='L204'></a><a href='#L204'>204</a>
270
- <a name='L205'></a><a href='#L205'>205</a>
271
- <a name='L206'></a><a href='#L206'>206</a>
272
- <a name='L207'></a><a href='#L207'>207</a>
273
- <a name='L208'></a><a href='#L208'>208</a>
274
- <a name='L209'></a><a href='#L209'>209</a>
275
- <a name='L210'></a><a href='#L210'>210</a>
276
- <a name='L211'></a><a href='#L211'>211</a>
277
- <a name='L212'></a><a href='#L212'>212</a>
278
- <a name='L213'></a><a href='#L213'>213</a>
279
- <a name='L214'></a><a href='#L214'>214</a>
280
- <a name='L215'></a><a href='#L215'>215</a>
281
- <a name='L216'></a><a href='#L216'>216</a>
282
- <a name='L217'></a><a href='#L217'>217</a>
283
- <a name='L218'></a><a href='#L218'>218</a>
284
- <a name='L219'></a><a href='#L219'>219</a>
285
- <a name='L220'></a><a href='#L220'>220</a>
286
- <a name='L221'></a><a href='#L221'>221</a>
287
- <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a>
289
- <a name='L224'></a><a href='#L224'>224</a>
290
- <a name='L225'></a><a href='#L225'>225</a>
291
- <a name='L226'></a><a href='#L226'>226</a>
292
- <a name='L227'></a><a href='#L227'>227</a>
293
- <a name='L228'></a><a href='#L228'>228</a>
294
- <a name='L229'></a><a href='#L229'>229</a>
295
- <a name='L230'></a><a href='#L230'>230</a>
296
- <a name='L231'></a><a href='#L231'>231</a>
297
- <a name='L232'></a><a href='#L232'>232</a>
298
- <a name='L233'></a><a href='#L233'>233</a>
299
- <a name='L234'></a><a href='#L234'>234</a>
300
- <a name='L235'></a><a href='#L235'>235</a>
301
- <a name='L236'></a><a href='#L236'>236</a>
302
- <a name='L237'></a><a href='#L237'>237</a>
303
- <a name='L238'></a><a href='#L238'>238</a>
304
- <a name='L239'></a><a href='#L239'>239</a>
305
- <a name='L240'></a><a href='#L240'>240</a>
306
- <a name='L241'></a><a href='#L241'>241</a>
307
- <a name='L242'></a><a href='#L242'>242</a>
308
- <a name='L243'></a><a href='#L243'>243</a>
309
- <a name='L244'></a><a href='#L244'>244</a>
310
- <a name='L245'></a><a href='#L245'>245</a>
311
- <a name='L246'></a><a href='#L246'>246</a>
312
- <a name='L247'></a><a href='#L247'>247</a>
313
- <a name='L248'></a><a href='#L248'>248</a>
314
- <a name='L249'></a><a href='#L249'>249</a>
315
- <a name='L250'></a><a href='#L250'>250</a>
316
- <a name='L251'></a><a href='#L251'>251</a>
317
- <a name='L252'></a><a href='#L252'>252</a>
318
- <a name='L253'></a><a href='#L253'>253</a>
319
- <a name='L254'></a><a href='#L254'>254</a>
320
- <a name='L255'></a><a href='#L255'>255</a>
321
- <a name='L256'></a><a href='#L256'>256</a>
322
- <a name='L257'></a><a href='#L257'>257</a>
323
- <a name='L258'></a><a href='#L258'>258</a>
324
- <a name='L259'></a><a href='#L259'>259</a>
325
- <a name='L260'></a><a href='#L260'>260</a>
326
- <a name='L261'></a><a href='#L261'>261</a>
327
- <a name='L262'></a><a href='#L262'>262</a>
328
- <a name='L263'></a><a href='#L263'>263</a>
329
- <a name='L264'></a><a href='#L264'>264</a>
330
- <a name='L265'></a><a href='#L265'>265</a>
331
- <a name='L266'></a><a href='#L266'>266</a>
332
- <a name='L267'></a><a href='#L267'>267</a>
333
- <a name='L268'></a><a href='#L268'>268</a>
334
- <a name='L269'></a><a href='#L269'>269</a>
335
- <a name='L270'></a><a href='#L270'>270</a>
336
- <a name='L271'></a><a href='#L271'>271</a>
337
- <a name='L272'></a><a href='#L272'>272</a>
338
- <a name='L273'></a><a href='#L273'>273</a>
339
- <a name='L274'></a><a href='#L274'>274</a>
340
- <a name='L275'></a><a href='#L275'>275</a>
341
- <a name='L276'></a><a href='#L276'>276</a>
342
- <a name='L277'></a><a href='#L277'>277</a>
343
- <a name='L278'></a><a href='#L278'>278</a>
344
- <a name='L279'></a><a href='#L279'>279</a>
345
- <a name='L280'></a><a href='#L280'>280</a>
346
- <a name='L281'></a><a href='#L281'>281</a>
347
- <a name='L282'></a><a href='#L282'>282</a>
348
- <a name='L283'></a><a href='#L283'>283</a>
349
- <a name='L284'></a><a href='#L284'>284</a>
350
- <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a>
352
- <a name='L287'></a><a href='#L287'>287</a>
353
- <a name='L288'></a><a href='#L288'>288</a>
354
- <a name='L289'></a><a href='#L289'>289</a>
355
- <a name='L290'></a><a href='#L290'>290</a>
356
- <a name='L291'></a><a href='#L291'>291</a>
357
- <a name='L292'></a><a href='#L292'>292</a>
358
- <a name='L293'></a><a href='#L293'>293</a>
359
- <a name='L294'></a><a href='#L294'>294</a>
360
- <a name='L295'></a><a href='#L295'>295</a>
361
- <a name='L296'></a><a href='#L296'>296</a>
362
- <a name='L297'></a><a href='#L297'>297</a>
363
- <a name='L298'></a><a href='#L298'>298</a>
364
- <a name='L299'></a><a href='#L299'>299</a>
365
- <a name='L300'></a><a href='#L300'>300</a>
366
- <a name='L301'></a><a href='#L301'>301</a>
367
- <a name='L302'></a><a href='#L302'>302</a>
368
- <a name='L303'></a><a href='#L303'>303</a>
369
- <a name='L304'></a><a href='#L304'>304</a>
370
- <a name='L305'></a><a href='#L305'>305</a>
371
- <a name='L306'></a><a href='#L306'>306</a>
372
- <a name='L307'></a><a href='#L307'>307</a>
373
- <a name='L308'></a><a href='#L308'>308</a>
374
- <a name='L309'></a><a href='#L309'>309</a>
375
- <a name='L310'></a><a href='#L310'>310</a>
376
- <a name='L311'></a><a href='#L311'>311</a>
377
- <a name='L312'></a><a href='#L312'>312</a>
378
- <a name='L313'></a><a href='#L313'>313</a>
379
- <a name='L314'></a><a href='#L314'>314</a>
380
- <a name='L315'></a><a href='#L315'>315</a>
381
- <a name='L316'></a><a href='#L316'>316</a>
382
- <a name='L317'></a><a href='#L317'>317</a>
383
- <a name='L318'></a><a href='#L318'>318</a>
384
- <a name='L319'></a><a href='#L319'>319</a>
385
- <a name='L320'></a><a href='#L320'>320</a>
386
- <a name='L321'></a><a href='#L321'>321</a>
387
- <a name='L322'></a><a href='#L322'>322</a>
388
- <a name='L323'></a><a href='#L323'>323</a>
389
- <a name='L324'></a><a href='#L324'>324</a>
390
- <a name='L325'></a><a href='#L325'>325</a>
391
- <a name='L326'></a><a href='#L326'>326</a>
392
- <a name='L327'></a><a href='#L327'>327</a>
393
- <a name='L328'></a><a href='#L328'>328</a>
394
- <a name='L329'></a><a href='#L329'>329</a>
395
- <a name='L330'></a><a href='#L330'>330</a>
396
- <a name='L331'></a><a href='#L331'>331</a>
397
- <a name='L332'></a><a href='#L332'>332</a>
398
- <a name='L333'></a><a href='#L333'>333</a>
399
- <a name='L334'></a><a href='#L334'>334</a>
400
- <a name='L335'></a><a href='#L335'>335</a>
401
- <a name='L336'></a><a href='#L336'>336</a>
402
- <a name='L337'></a><a href='#L337'>337</a>
403
- <a name='L338'></a><a href='#L338'>338</a>
404
- <a name='L339'></a><a href='#L339'>339</a>
405
- <a name='L340'></a><a href='#L340'>340</a>
406
- <a name='L341'></a><a href='#L341'>341</a>
407
- <a name='L342'></a><a href='#L342'>342</a>
408
- <a name='L343'></a><a href='#L343'>343</a>
409
- <a name='L344'></a><a href='#L344'>344</a>
410
- <a name='L345'></a><a href='#L345'>345</a>
411
- <a name='L346'></a><a href='#L346'>346</a>
412
- <a name='L347'></a><a href='#L347'>347</a>
413
- <a name='L348'></a><a href='#L348'>348</a>
414
- <a name='L349'></a><a href='#L349'>349</a>
415
- <a name='L350'></a><a href='#L350'>350</a>
416
- <a name='L351'></a><a href='#L351'>351</a>
417
- <a name='L352'></a><a href='#L352'>352</a>
418
- <a name='L353'></a><a href='#L353'>353</a>
419
- <a name='L354'></a><a href='#L354'>354</a>
420
- <a name='L355'></a><a href='#L355'>355</a>
421
- <a name='L356'></a><a href='#L356'>356</a>
422
- <a name='L357'></a><a href='#L357'>357</a>
423
- <a name='L358'></a><a href='#L358'>358</a>
424
- <a name='L359'></a><a href='#L359'>359</a>
425
- <a name='L360'></a><a href='#L360'>360</a>
426
- <a name='L361'></a><a href='#L361'>361</a>
427
- <a name='L362'></a><a href='#L362'>362</a>
428
- <a name='L363'></a><a href='#L363'>363</a>
429
- <a name='L364'></a><a href='#L364'>364</a>
430
- <a name='L365'></a><a href='#L365'>365</a>
431
- <a name='L366'></a><a href='#L366'>366</a>
432
- <a name='L367'></a><a href='#L367'>367</a>
433
- <a name='L368'></a><a href='#L368'>368</a>
434
- <a name='L369'></a><a href='#L369'>369</a>
435
- <a name='L370'></a><a href='#L370'>370</a>
436
- <a name='L371'></a><a href='#L371'>371</a>
437
- <a name='L372'></a><a href='#L372'>372</a>
438
- <a name='L373'></a><a href='#L373'>373</a>
439
- <a name='L374'></a><a href='#L374'>374</a>
440
- <a name='L375'></a><a href='#L375'>375</a>
441
- <a name='L376'></a><a href='#L376'>376</a>
442
- <a name='L377'></a><a href='#L377'>377</a>
443
- <a name='L378'></a><a href='#L378'>378</a>
444
- <a name='L379'></a><a href='#L379'>379</a>
445
- <a name='L380'></a><a href='#L380'>380</a>
446
- <a name='L381'></a><a href='#L381'>381</a>
447
- <a name='L382'></a><a href='#L382'>382</a>
448
- <a name='L383'></a><a href='#L383'>383</a>
449
- <a name='L384'></a><a href='#L384'>384</a>
450
- <a name='L385'></a><a href='#L385'>385</a>
451
- <a name='L386'></a><a href='#L386'>386</a>
452
- <a name='L387'></a><a href='#L387'>387</a>
453
- <a name='L388'></a><a href='#L388'>388</a>
454
- <a name='L389'></a><a href='#L389'>389</a>
455
- <a name='L390'></a><a href='#L390'>390</a>
456
- <a name='L391'></a><a href='#L391'>391</a>
457
- <a name='L392'></a><a href='#L392'>392</a>
458
- <a name='L393'></a><a href='#L393'>393</a>
459
- <a name='L394'></a><a href='#L394'>394</a>
460
- <a name='L395'></a><a href='#L395'>395</a>
461
- <a name='L396'></a><a href='#L396'>396</a>
462
- <a name='L397'></a><a href='#L397'>397</a>
463
- <a name='L398'></a><a href='#L398'>398</a>
464
- <a name='L399'></a><a href='#L399'>399</a>
465
- <a name='L400'></a><a href='#L400'>400</a>
466
- <a name='L401'></a><a href='#L401'>401</a>
467
- <a name='L402'></a><a href='#L402'>402</a>
468
- <a name='L403'></a><a href='#L403'>403</a>
469
- <a name='L404'></a><a href='#L404'>404</a>
470
- <a name='L405'></a><a href='#L405'>405</a>
471
- <a name='L406'></a><a href='#L406'>406</a>
472
- <a name='L407'></a><a href='#L407'>407</a>
473
- <a name='L408'></a><a href='#L408'>408</a>
474
- <a name='L409'></a><a href='#L409'>409</a>
475
- <a name='L410'></a><a href='#L410'>410</a>
476
- <a name='L411'></a><a href='#L411'>411</a>
477
- <a name='L412'></a><a href='#L412'>412</a>
478
- <a name='L413'></a><a href='#L413'>413</a>
479
- <a name='L414'></a><a href='#L414'>414</a>
480
- <a name='L415'></a><a href='#L415'>415</a>
481
- <a name='L416'></a><a href='#L416'>416</a>
482
- <a name='L417'></a><a href='#L417'>417</a>
483
- <a name='L418'></a><a href='#L418'>418</a>
484
- <a name='L419'></a><a href='#L419'>419</a>
485
- <a name='L420'></a><a href='#L420'>420</a>
486
- <a name='L421'></a><a href='#L421'>421</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">22x</span>
487
- <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-neutral">&nbsp;</span>
489
- <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-neutral">&nbsp;</span>
491
- <span class="cline-any cline-neutral">&nbsp;</span>
492
- <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-neutral">&nbsp;</span>
494
- <span class="cline-any cline-yes">22x</span>
495
- <span class="cline-any cline-yes">22x</span>
496
- <span class="cline-any cline-yes">22x</span>
497
- <span class="cline-any cline-yes">22x</span>
498
- <span class="cline-any cline-yes">22x</span>
499
- <span class="cline-any cline-neutral">&nbsp;</span>
500
- <span class="cline-any cline-neutral">&nbsp;</span>
501
- <span class="cline-any cline-neutral">&nbsp;</span>
502
- <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-neutral">&nbsp;</span>
504
- <span class="cline-any cline-neutral">&nbsp;</span>
505
- <span class="cline-any cline-neutral">&nbsp;</span>
506
- <span class="cline-any cline-neutral">&nbsp;</span>
507
- <span class="cline-any cline-neutral">&nbsp;</span>
508
- <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-neutral">&nbsp;</span>
510
- <span class="cline-any cline-yes">22x</span>
511
- <span class="cline-any cline-yes">27x</span>
512
- <span class="cline-any cline-yes">27x</span>
513
- <span class="cline-any cline-neutral">&nbsp;</span>
514
- <span class="cline-any cline-neutral">&nbsp;</span>
515
- <span class="cline-any cline-neutral">&nbsp;</span>
516
- <span class="cline-any cline-yes">27x</span>
517
- <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-yes">27x</span>
519
- <span class="cline-any cline-neutral">&nbsp;</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-yes">7x</span>
523
- <span class="cline-any cline-yes">7x</span>
524
- <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-neutral">&nbsp;</span>
526
- <span class="cline-any cline-yes">7x</span>
527
- <span class="cline-any cline-yes">6x</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-neutral">&nbsp;</span>
530
- <span class="cline-any cline-yes">6x</span>
531
- <span class="cline-any cline-neutral">&nbsp;</span>
532
- <span class="cline-any cline-neutral">&nbsp;</span>
533
- <span class="cline-any cline-yes">1x</span>
534
- <span class="cline-any cline-yes">1x</span>
535
- <span class="cline-any cline-neutral">&nbsp;</span>
536
- <span class="cline-any cline-neutral">&nbsp;</span>
537
- <span class="cline-any cline-neutral">&nbsp;</span>
538
- <span class="cline-any cline-neutral">&nbsp;</span>
539
- <span class="cline-any cline-yes">6x</span>
540
- <span class="cline-any cline-yes">6x</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-no">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-neutral">&nbsp;</span>
545
- <span class="cline-any cline-neutral">&nbsp;</span>
546
- <span class="cline-any cline-neutral">&nbsp;</span>
547
- <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-yes">3x</span>
549
- <span class="cline-any cline-yes">3x</span>
550
- <span class="cline-any cline-no">&nbsp;</span>
551
- <span class="cline-any cline-no">&nbsp;</span>
552
- <span class="cline-any cline-neutral">&nbsp;</span>
553
- <span class="cline-any cline-yes">3x</span>
554
- <span class="cline-any cline-yes">3x</span>
555
- <span class="cline-any cline-yes">3x</span>
556
- <span class="cline-any cline-yes">3x</span>
557
- <span class="cline-any cline-neutral">&nbsp;</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-neutral">&nbsp;</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-yes">3x</span>
562
- <span class="cline-any cline-neutral">&nbsp;</span>
563
- <span class="cline-any cline-yes">3x</span>
564
- <span class="cline-any cline-yes">3x</span>
565
- <span class="cline-any cline-no">&nbsp;</span>
566
- <span class="cline-any cline-neutral">&nbsp;</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-yes">3x</span>
569
- <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-neutral">&nbsp;</span>
571
- <span class="cline-any cline-yes">3x</span>
572
- <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-yes">3x</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-yes">3x</span>
576
- <span class="cline-any cline-neutral">&nbsp;</span>
577
- <span class="cline-any cline-neutral">&nbsp;</span>
578
- <span class="cline-any cline-neutral">&nbsp;</span>
579
- <span class="cline-any cline-neutral">&nbsp;</span>
580
- <span class="cline-any cline-neutral">&nbsp;</span>
581
- <span class="cline-any cline-neutral">&nbsp;</span>
582
- <span class="cline-any cline-yes">2x</span>
583
- <span class="cline-any cline-yes">2x</span>
584
- <span class="cline-any cline-no">&nbsp;</span>
585
- <span class="cline-any cline-no">&nbsp;</span>
586
- <span class="cline-any cline-no">&nbsp;</span>
587
- <span class="cline-any cline-no">&nbsp;</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-no">&nbsp;</span>
590
- <span class="cline-any cline-neutral">&nbsp;</span>
591
- <span class="cline-any cline-neutral">&nbsp;</span>
592
- <span class="cline-any cline-neutral">&nbsp;</span>
593
- <span class="cline-any cline-neutral">&nbsp;</span>
594
- <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-neutral">&nbsp;</span>
596
- <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-yes">3x</span>
598
- <span class="cline-any cline-neutral">&nbsp;</span>
599
- <span class="cline-any cline-yes">3x</span>
600
- <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-yes">3x</span>
602
- <span class="cline-any cline-neutral">&nbsp;</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-yes">3x</span>
605
- <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-neutral">&nbsp;</span>
607
- <span class="cline-any cline-yes">3x</span>
608
- <span class="cline-any cline-no">&nbsp;</span>
609
- <span class="cline-any cline-neutral">&nbsp;</span>
610
- <span class="cline-any cline-neutral">&nbsp;</span>
611
- <span class="cline-any cline-no">&nbsp;</span>
612
- <span class="cline-any cline-no">&nbsp;</span>
613
- <span class="cline-any cline-no">&nbsp;</span>
614
- <span class="cline-any cline-no">&nbsp;</span>
615
- <span class="cline-any cline-neutral">&nbsp;</span>
616
- <span class="cline-any cline-no">&nbsp;</span>
617
- <span class="cline-any cline-no">&nbsp;</span>
618
- <span class="cline-any cline-no">&nbsp;</span>
619
- <span class="cline-any cline-neutral">&nbsp;</span>
620
- <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-no">&nbsp;</span>
622
- <span class="cline-any cline-neutral">&nbsp;</span>
623
- <span class="cline-any cline-neutral">&nbsp;</span>
624
- <span class="cline-any cline-neutral">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-neutral">&nbsp;</span>
627
- <span class="cline-any cline-neutral">&nbsp;</span>
628
- <span class="cline-any cline-neutral">&nbsp;</span>
629
- <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-neutral">&nbsp;</span>
631
- <span class="cline-any cline-neutral">&nbsp;</span>
632
- <span class="cline-any cline-no">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-no">&nbsp;</span>
635
- <span class="cline-any cline-no">&nbsp;</span>
636
- <span class="cline-any cline-no">&nbsp;</span>
637
- <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-no">&nbsp;</span>
639
- <span class="cline-any cline-no">&nbsp;</span>
640
- <span class="cline-any cline-neutral">&nbsp;</span>
641
- <span class="cline-any cline-neutral">&nbsp;</span>
642
- <span class="cline-any cline-no">&nbsp;</span>
643
- <span class="cline-any cline-neutral">&nbsp;</span>
644
- <span class="cline-any cline-neutral">&nbsp;</span>
645
- <span class="cline-any cline-neutral">&nbsp;</span>
646
- <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-neutral">&nbsp;</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-yes">1x</span>
650
- <span class="cline-any cline-yes">1x</span>
651
- <span class="cline-any cline-neutral">&nbsp;</span>
652
- <span class="cline-any cline-no">&nbsp;</span>
653
- <span class="cline-any cline-neutral">&nbsp;</span>
654
- <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-yes">1x</span>
656
- <span class="cline-any cline-yes">1x</span>
657
- <span class="cline-any cline-no">&nbsp;</span>
658
- <span class="cline-any cline-neutral">&nbsp;</span>
659
- <span class="cline-any cline-neutral">&nbsp;</span>
660
- <span class="cline-any cline-neutral">&nbsp;</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-yes">1x</span>
663
- <span class="cline-any cline-yes">1x</span>
664
- <span class="cline-any cline-no">&nbsp;</span>
665
- <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-neutral">&nbsp;</span>
667
- <span class="cline-any cline-neutral">&nbsp;</span>
668
- <span class="cline-any cline-neutral">&nbsp;</span>
669
- <span class="cline-any cline-yes">1x</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-neutral">&nbsp;</span>
672
- <span class="cline-any cline-yes">1x</span>
673
- <span class="cline-any cline-no">&nbsp;</span>
674
- <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-neutral">&nbsp;</span>
676
- <span class="cline-any cline-neutral">&nbsp;</span>
677
- <span class="cline-any cline-neutral">&nbsp;</span>
678
- <span class="cline-any cline-yes">1x</span>
679
- <span class="cline-any cline-neutral">&nbsp;</span>
680
- <span class="cline-any cline-neutral">&nbsp;</span>
681
- <span class="cline-any cline-neutral">&nbsp;</span>
682
- <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-neutral">&nbsp;</span>
684
- <span class="cline-any cline-neutral">&nbsp;</span>
685
- <span class="cline-any cline-neutral">&nbsp;</span>
686
- <span class="cline-any cline-yes">1x</span>
687
- <span class="cline-any cline-yes">1x</span>
688
- <span class="cline-any cline-yes">1x</span>
689
- <span class="cline-any cline-neutral">&nbsp;</span>
690
- <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-neutral">&nbsp;</span>
692
- <span class="cline-any cline-neutral">&nbsp;</span>
693
- <span class="cline-any cline-neutral">&nbsp;</span>
694
- <span class="cline-any cline-neutral">&nbsp;</span>
695
- <span class="cline-any cline-yes">2x</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-neutral">&nbsp;</span>
698
- <span class="cline-any cline-yes">2x</span>
699
- <span class="cline-any cline-no">&nbsp;</span>
700
- <span class="cline-any cline-neutral">&nbsp;</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-neutral">&nbsp;</span>
703
- <span class="cline-any cline-neutral">&nbsp;</span>
704
- <span class="cline-any cline-yes">2x</span>
705
- <span class="cline-any cline-yes">2x</span>
706
- <span class="cline-any cline-neutral">&nbsp;</span>
707
- <span class="cline-any cline-yes">2x</span>
708
- <span class="cline-any cline-yes">1x</span>
709
- <span class="cline-any cline-neutral">&nbsp;</span>
710
- <span class="cline-any cline-yes">1x</span>
711
- <span class="cline-any cline-neutral">&nbsp;</span>
712
- <span class="cline-any cline-neutral">&nbsp;</span>
713
- <span class="cline-any cline-neutral">&nbsp;</span>
714
- <span class="cline-any cline-yes">2x</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-neutral">&nbsp;</span>
717
- <span class="cline-any cline-neutral">&nbsp;</span>
718
- <span class="cline-any cline-yes">1x</span>
719
- <span class="cline-any cline-neutral">&nbsp;</span>
720
- <span class="cline-any cline-neutral">&nbsp;</span>
721
- <span class="cline-any cline-yes">1x</span>
722
- <span class="cline-any cline-no">&nbsp;</span>
723
- <span class="cline-any cline-neutral">&nbsp;</span>
724
- <span class="cline-any cline-neutral">&nbsp;</span>
725
- <span class="cline-any cline-neutral">&nbsp;</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-yes">1x</span>
728
- <span class="cline-any cline-yes">1x</span>
729
- <span class="cline-any cline-yes">1x</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-neutral">&nbsp;</span>
734
- <span class="cline-any cline-neutral">&nbsp;</span>
735
- <span class="cline-any cline-neutral">&nbsp;</span>
736
- <span class="cline-any cline-yes">1x</span>
737
- <span class="cline-any cline-no">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-yes">1x</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-neutral">&nbsp;</span>
742
- <span class="cline-any cline-neutral">&nbsp;</span>
743
- <span class="cline-any cline-yes">1x</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-neutral">&nbsp;</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-yes">2x</span>
748
- <span class="cline-any cline-neutral">&nbsp;</span>
749
- <span class="cline-any cline-neutral">&nbsp;</span>
750
- <span class="cline-any cline-yes">2x</span>
751
- <span class="cline-any cline-neutral">&nbsp;</span>
752
- <span class="cline-any cline-neutral">&nbsp;</span>
753
- <span class="cline-any cline-neutral">&nbsp;</span>
754
- <span class="cline-any cline-yes">2x</span>
755
- <span class="cline-any cline-yes">2x</span>
756
- <span class="cline-any cline-no">&nbsp;</span>
757
- <span class="cline-any cline-no">&nbsp;</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-no">&nbsp;</span>
760
- <span class="cline-any cline-neutral">&nbsp;</span>
761
- <span class="cline-any cline-neutral">&nbsp;</span>
762
- <span class="cline-any cline-neutral">&nbsp;</span>
763
- <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-neutral">&nbsp;</span>
765
- <span class="cline-any cline-neutral">&nbsp;</span>
766
- <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-neutral">&nbsp;</span>
768
- <span class="cline-any cline-yes">2x</span>
769
- <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-neutral">&nbsp;</span>
771
- <span class="cline-any cline-neutral">&nbsp;</span>
772
- <span class="cline-any cline-neutral">&nbsp;</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-neutral">&nbsp;</span>
776
- <span class="cline-any cline-neutral">&nbsp;</span>
777
- <span class="cline-any cline-neutral">&nbsp;</span>
778
- <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-neutral">&nbsp;</span>
780
- <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-no">&nbsp;</span>
782
- <span class="cline-any cline-neutral">&nbsp;</span>
783
- <span class="cline-any cline-neutral">&nbsp;</span>
784
- <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-neutral">&nbsp;</span>
786
- <span class="cline-any cline-neutral">&nbsp;</span>
787
- <span class="cline-any cline-no">&nbsp;</span>
788
- <span class="cline-any cline-no">&nbsp;</span>
789
- <span class="cline-any cline-no">&nbsp;</span>
790
- <span class="cline-any cline-no">&nbsp;</span>
791
- <span class="cline-any cline-no">&nbsp;</span>
792
- <span class="cline-any cline-neutral">&nbsp;</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-no">&nbsp;</span>
795
- <span class="cline-any cline-no">&nbsp;</span>
796
- <span class="cline-any cline-no">&nbsp;</span>
797
- <span class="cline-any cline-no">&nbsp;</span>
798
- <span class="cline-any cline-neutral">&nbsp;</span>
799
- <span class="cline-any cline-no">&nbsp;</span>
800
- <span class="cline-any cline-neutral">&nbsp;</span>
801
- <span class="cline-any cline-neutral">&nbsp;</span>
802
- <span class="cline-any cline-no">&nbsp;</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-neutral">&nbsp;</span>
805
- <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-neutral">&nbsp;</span>
807
- <span class="cline-any cline-yes">2x</span>
808
- <span class="cline-any cline-yes">2x</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-yes">2x</span>
811
- <span class="cline-any cline-yes">2x</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-neutral">&nbsp;</span>
814
- <span class="cline-any cline-no">&nbsp;</span>
815
- <span class="cline-any cline-no">&nbsp;</span>
816
- <span class="cline-any cline-no">&nbsp;</span>
817
- <span class="cline-any cline-no">&nbsp;</span>
818
- <span class="cline-any cline-neutral">&nbsp;</span>
819
- <span class="cline-any cline-no">&nbsp;</span>
820
- <span class="cline-any cline-no">&nbsp;</span>
821
- <span class="cline-any cline-no">&nbsp;</span>
822
- <span class="cline-any cline-no">&nbsp;</span>
823
- <span class="cline-any cline-no">&nbsp;</span>
824
- <span class="cline-any cline-no">&nbsp;</span>
825
- <span class="cline-any cline-no">&nbsp;</span>
826
- <span class="cline-any cline-neutral">&nbsp;</span>
827
- <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-neutral">&nbsp;</span>
829
- <span class="cline-any cline-no">&nbsp;</span>
830
- <span class="cline-any cline-neutral">&nbsp;</span>
831
- <span class="cline-any cline-no">&nbsp;</span>
832
- <span class="cline-any cline-neutral">&nbsp;</span>
833
- <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-neutral">&nbsp;</span>
835
- <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-neutral">&nbsp;</span>
837
- <span class="cline-any cline-neutral">&nbsp;</span>
838
- <span class="cline-any cline-neutral">&nbsp;</span>
839
- <span class="cline-any cline-yes">6x</span>
840
- <span class="cline-any cline-neutral">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-yes">6x</span>
843
- <span class="cline-any cline-neutral">&nbsp;</span>
844
- <span class="cline-any cline-yes">5x</span>
845
- <span class="cline-any cline-neutral">&nbsp;</span>
846
- <span class="cline-any cline-neutral">&nbsp;</span>
847
- <span class="cline-any cline-yes">5x</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-yes">5x</span>
850
- <span class="cline-any cline-yes">4x</span>
851
- <span class="cline-any cline-yes">8x</span>
852
- <span class="cline-any cline-yes">7x</span>
853
- <span class="cline-any cline-neutral">&nbsp;</span>
854
- <span class="cline-any cline-neutral">&nbsp;</span>
855
- <span class="cline-any cline-neutral">&nbsp;</span>
856
- <span class="cline-any cline-neutral">&nbsp;</span>
857
- <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-neutral">&nbsp;</span>
859
- <span class="cline-any cline-neutral">&nbsp;</span>
860
- <span class="cline-any cline-neutral">&nbsp;</span>
861
- <span class="cline-any cline-yes">9x</span>
862
- <span class="cline-any cline-neutral">&nbsp;</span>
863
- <span class="cline-any cline-neutral">&nbsp;</span>
864
- <span class="cline-any cline-yes">9x</span>
865
- <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-yes">8x</span>
867
- <span class="cline-any cline-neutral">&nbsp;</span>
868
- <span class="cline-any cline-neutral">&nbsp;</span>
869
- <span class="cline-any cline-yes">8x</span>
870
- <span class="cline-any cline-neutral">&nbsp;</span>
871
- <span class="cline-any cline-neutral">&nbsp;</span>
872
- <span class="cline-any cline-yes">8x</span>
873
- <span class="cline-any cline-neutral">&nbsp;</span>
874
- <span class="cline-any cline-yes">7x</span>
875
- <span class="cline-any cline-yes">7x</span>
876
- <span class="cline-any cline-yes">11x</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-neutral">&nbsp;</span>
879
- <span class="cline-any cline-yes">10x</span>
880
- <span class="cline-any cline-yes">10x</span>
881
- <span class="cline-any cline-yes">2x</span>
882
- <span class="cline-any cline-neutral">&nbsp;</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-yes">10x</span>
885
- <span class="cline-any cline-yes">1x</span>
886
- <span class="cline-any cline-neutral">&nbsp;</span>
887
- <span class="cline-any cline-neutral">&nbsp;</span>
888
- <span class="cline-any cline-yes">10x</span>
889
- <span class="cline-any cline-neutral">&nbsp;</span>
890
- <span class="cline-any cline-neutral">&nbsp;</span>
891
- <span class="cline-any cline-neutral">&nbsp;</span>
892
- <span class="cline-any cline-neutral">&nbsp;</span>
893
- <span class="cline-any cline-neutral">&nbsp;</span>
894
- <span class="cline-any cline-neutral">&nbsp;</span>
895
- <span class="cline-any cline-neutral">&nbsp;</span>
896
- <span class="cline-any cline-neutral">&nbsp;</span>
897
- <span class="cline-any cline-neutral">&nbsp;</span>
898
- <span class="cline-any cline-neutral">&nbsp;</span>
899
- <span class="cline-any cline-neutral">&nbsp;</span>
900
- <span class="cline-any cline-yes">7x</span>
901
- <span class="cline-any cline-neutral">&nbsp;</span>
902
- <span class="cline-any cline-neutral">&nbsp;</span>
903
- <span class="cline-any cline-yes">7x</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-neutral">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
907
- BadRequestException,
908
- Injectable,
909
- Logger,
910
- NotFoundException,
911
- OnModuleDestroy,
912
- OnModuleInit,
913
- } from '@nestjs/common';
914
- import { InjectRepository } from '@nestjs/typeorm';
915
- import { In, Repository } from 'typeorm';
916
- import { McpConfig, McpTool } from '../core-entities';
917
- import { Client } from '@modelcontextprotocol/sdk/client/index.js';
918
- import { StdioClientTransport } from '@modelcontextprotocol/sdk/client/stdio.js';
919
- import { LlmFunctionTool } from '../llm-provider/llm-provider.interface';
920
- &nbsp;
921
- // Local interface to match the shape of a tool from the MCP SDK
922
- // Properties are optional to match the inferred type from the SDK.
923
- interface McpSdkTool {
924
- name?: string;
925
- description?: string;
926
- inputSchema?: Record&lt;string, any&gt;;
927
- }
928
- &nbsp;
929
- @Injectable()
930
- export class McpService implements OnModuleInit, OnModuleDestroy {
931
- private readonly logger = new Logger(McpService.name);
932
- private readonly activeClients = new Map&lt;string, Client&gt;();
933
- &nbsp;
934
- constructor(
935
- @InjectRepository(McpConfig)
936
- private readonly mcpConfigRepository: Repository&lt;McpConfig&gt;,
937
- @InjectRepository(McpTool)
938
- private readonly mcpToolRepository: Repository&lt;McpTool&gt;,
939
- ) {}
940
- &nbsp;
941
- async onModuleInit() {
942
- this.logger.log('Initializing MCP connections...');
943
- const configs = await this.mcpConfigRepository.find({
944
- where: { is_active: true },
945
- });
946
- if (configs.length === 0) {
947
- this.logger.warn(
948
- 'No active MCP configurations found. MCP tools will be unavailable.',
949
- );
950
- return;
951
- }
952
- &nbsp;
953
- for (const config of configs) {
954
- await this.connectToServer(config);
955
- }
956
- }
957
- &nbsp;
958
- async onModuleDestroy() {
959
- this.logger.log('Closing all active MCP connections...');
960
- await Promise.all(
961
- Array.from(this.activeClients.keys()).map(<span class="fstat-no" title="function not covered" >(s</span>erverName) =&gt;
962
- <span class="cstat-no" title="statement not covered" > this.disconnectFromServer(serverName),</span>
963
- ),
964
- );
965
- }
966
- &nbsp;
967
- public async connectToServer(config: McpConfig) {
968
- const { server_name, command, args, env } = config;
969
- <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activeClients.has(server_name)) {
970
- <span class="cstat-no" title="statement not covered" > this.logger.log(`Already connected to ${server_name}. Skipping.`);</span>
971
- <span class="cstat-no" title="statement not covered" > return;</span>
972
- }
973
- this.logger.log(`Attempting to connect to MCP server: ${server_name}`);
974
- try {
975
- const transport = new StdioClientTransport({ command, args, env });
976
- const client = new Client({
977
- name: `repoburg-backend-${server_name}`,
978
- version: '1.0.0',
979
- });
980
- &nbsp;
981
- client.connect(transport);
982
- &nbsp;
983
- const toolsResult = await client.listTools();
984
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!toolsResult || !toolsResult.tools) {
985
- <span class="cstat-no" title="statement not covered" > throw new Error('Invalid or empty tool list received from server.');</span>
986
- }
987
- &nbsp;
988
- this.logger.log(
989
- `Connected to ${server_name}. Discovered ${toolsResult.tools.length} tools.`,
990
- );
991
- this.activeClients.set(server_name, client);
992
- &nbsp;
993
- await this.syncToolsToDb(server_name, toolsResult.tools as McpSdkTool[]);
994
- } catch (e) {
995
- this.logger.error(
996
- `Failed to connect to MCP server "${server_name}": ${e.message}`,
997
- );
998
- }
999
- }
1000
- &nbsp;
1001
- public async disconnectFromServer(serverName: string) {
1002
- const client = this.activeClients.get(serverName);
1003
- <span class="missing-if-branch" title="if path not taken" >I</span>if (client) {
1004
- <span class="cstat-no" title="statement not covered" > try {</span>
1005
- <span class="cstat-no" title="statement not covered" > await client.close();</span>
1006
- <span class="cstat-no" title="statement not covered" > this.activeClients.delete(serverName);</span>
1007
- <span class="cstat-no" title="statement not covered" > this.logger.log(`Disconnected from ${serverName}`);</span>
1008
- } catch (e) {
1009
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1010
- `Error disconnecting from ${serverName}: ${e.message}`,
1011
- );
1012
- }
1013
- }
1014
- }
1015
- &nbsp;
1016
- private async syncToolsToDb(serverName: string, tools: McpSdkTool[]) {
1017
- this.logger.log(`Syncing tools for server: ${serverName}`);
1018
- &nbsp;
1019
- const validTools = tools.filter(
1020
- (tool): tool is Required&lt;Pick&lt;McpSdkTool, 'name'&gt;&gt; &amp; McpSdkTool =&gt;
1021
- !!tool.name,
1022
- );
1023
- &nbsp;
1024
- const existingTools = await this.mcpToolRepository.find({
1025
- where: { server_name: serverName },
1026
- });
1027
- const existingToolsMap = new Map(
1028
- existingTools.map(<span class="fstat-no" title="function not covered" >(t</span>) =&gt; <span class="cstat-no" title="statement not covered" >[t.tool_name, t])</span>,
1029
- );
1030
- &nbsp;
1031
- const toolsToSave: McpTool[] = <span class="cstat-no" title="statement not covered" >[];</span>
1032
- <span class="cstat-no" title="statement not covered" > for (const sdkTool of validTools) {</span>
1033
- const existingTool = <span class="cstat-no" title="statement not covered" >existingToolsMap.get(sdkTool.name);</span>
1034
- <span class="cstat-no" title="statement not covered" > if (existingTool) {</span>
1035
- // Update existing tool but preserve its active state
1036
- <span class="cstat-no" title="statement not covered" > existingTool.description = sdkTool.description || '';</span>
1037
- <span class="cstat-no" title="statement not covered" > existingTool.input_schema = sdkTool.inputSchema || {};</span>
1038
- <span class="cstat-no" title="statement not covered" > toolsToSave.push(existingTool);</span>
1039
- } else {
1040
- // Create new tool, will default to is_active: true
1041
- <span class="cstat-no" title="statement not covered" > toolsToSave.push(</span>
1042
- this.mcpToolRepository.create({
1043
- server_name: serverName,
1044
- tool_name: sdkTool.name,
1045
- description: sdkTool.description || '',
1046
- input_schema: sdkTool.inputSchema || {},
1047
- }),
1048
- );
1049
- }
1050
- }
1051
- &nbsp;
1052
- <span class="cstat-no" title="statement not covered" > await this.mcpToolRepository.save(toolsToSave);</span>
1053
- &nbsp;
1054
- const newToolNames = <span class="cstat-no" title="statement not covered" >validTools.map(<span class="fstat-no" title="function not covered" >(t</span>) =&gt; <span class="cstat-no" title="statement not covered" >t.name)</span>;</span>
1055
- const toolsToDelete = <span class="cstat-no" title="statement not covered" >existingTools.filter(</span>
1056
- <span class="fstat-no" title="function not covered" > (t</span>) =&gt; <span class="cstat-no" title="statement not covered" >!newToolNames.includes(t.tool_name),</span>
1057
- );
1058
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (toolsToDelete.length &gt; 0) {</span>
1059
- <span class="cstat-no" title="statement not covered" > await this.mcpToolRepository.remove(toolsToDelete);</span>
1060
- }
1061
- &nbsp;
1062
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1063
- `Successfully synced tools for ${serverName}. Saved: ${toolsToSave.length}, Deleted: ${toolsToDelete.length}`,
1064
- );
1065
- }
1066
- &nbsp;
1067
- public async createMcpConfig(configJson: string): Promise&lt;McpConfig&gt; {
1068
- let parsedConfig: any;
1069
- try {
1070
- parsedConfig = JSON.parse(configJson);
1071
- } catch (e) {
1072
- <span class="cstat-no" title="statement not covered" > throw new BadRequestException('Invalid JSON format.');</span>
1073
- }
1074
- &nbsp;
1075
- const serverName = Object.keys(parsedConfig)[0];
1076
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!serverName) {
1077
- <span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
1078
- 'JSON must have a root key as the server name.',
1079
- );
1080
- }
1081
- &nbsp;
1082
- const configData = parsedConfig[serverName];
1083
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!configData || !configData.command || !configData.args) {
1084
- <span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
1085
- 'Configuration must include "command" and "args" properties.',
1086
- );
1087
- }
1088
- &nbsp;
1089
- const existingConfig = await this.mcpConfigRepository.findOneBy({
1090
- server_name: serverName,
1091
- });
1092
- <span class="missing-if-branch" title="if path not taken" >I</span>if (existingConfig) {
1093
- <span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
1094
- `A configuration for "${serverName}" already exists.`,
1095
- );
1096
- }
1097
- &nbsp;
1098
- const newConfig = this.mcpConfigRepository.create({
1099
- server_name: serverName,
1100
- command: configData.command,
1101
- args: configData.args,
1102
- env: configData.env || <span class="branch-1 cbranch-no" title="branch not covered" >{},</span>
1103
- is_active: true,
1104
- });
1105
- &nbsp;
1106
- const savedConfig = await this.mcpConfigRepository.save(newConfig);
1107
- await this.connectToServer(savedConfig);
1108
- return savedConfig;
1109
- }
1110
- &nbsp;
1111
- public async updateMcpConfigStatus(
1112
- serverName: string,
1113
- isActive: boolean,
1114
- ): Promise&lt;McpConfig&gt; {
1115
- const config = await this.mcpConfigRepository.findOneBy({
1116
- server_name: serverName,
1117
- });
1118
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!config) {
1119
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
1120
- `MCP configuration for "${serverName}" not found.`,
1121
- );
1122
- }
1123
- &nbsp;
1124
- config.is_active = isActive;
1125
- await this.mcpConfigRepository.save(config);
1126
- &nbsp;
1127
- if (isActive) {
1128
- await this.connectToServer(config);
1129
- } else {
1130
- await this.disconnectFromServer(serverName);
1131
- // Do not remove tools from DB, just mark them as inactive conceptually
1132
- }
1133
- &nbsp;
1134
- return config;
1135
- }
1136
- &nbsp;
1137
- public async deleteMcpConfig(serverName: string): Promise&lt;void&gt; {
1138
- const config = await this.mcpConfigRepository.findOneBy({
1139
- server_name: serverName,
1140
- });
1141
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!config) {
1142
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
1143
- `MCP configuration for "${serverName}" not found.`,
1144
- );
1145
- }
1146
- &nbsp;
1147
- await this.disconnectFromServer(serverName);
1148
- await this.mcpToolRepository.delete({ server_name: serverName });
1149
- await this.mcpConfigRepository.remove(config);
1150
- }
1151
- &nbsp;
1152
- public async batchUpdateToolStatus(
1153
- toolIds: string[],
1154
- isActive: boolean,
1155
- ): Promise&lt;{ affected: number }&gt; {
1156
- <span class="missing-if-branch" title="if path not taken" >I</span>if (toolIds.length === 0) {
1157
- <span class="cstat-no" title="statement not covered" > return { affected: 0 };</span>
1158
- }
1159
- const result = await this.mcpToolRepository.update(
1160
- { id: In(toolIds) },
1161
- { is_active: isActive },
1162
- );
1163
- return { affected: result.affected || 0 };
1164
- }
1165
- &nbsp;
1166
- public async getMcpServers(): Promise&lt;any[]&gt; {
1167
- const configs = await this.mcpConfigRepository.find({
1168
- order: { server_name: 'ASC' },
1169
- });
1170
- const tools = await this.mcpToolRepository.find({
1171
- order: { tool_name: 'ASC' },
1172
- });
1173
- &nbsp;
1174
- const toolsByServer = new Map&lt;string, any[]&gt;();
1175
- for (const tool of tools) {
1176
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!toolsByServer.has(tool.server_name)) {</span>
1177
- <span class="cstat-no" title="statement not covered" > toolsByServer.set(tool.server_name, []);</span>
1178
- }
1179
- <span class="cstat-no" title="statement not covered" > toolsByServer.get(tool.server_name).push({</span>
1180
- id: tool.id,
1181
- tool_name: tool.tool_name,
1182
- description: tool.description,
1183
- input_schema: tool.input_schema,
1184
- is_active: tool.is_active,
1185
- });
1186
- }
1187
- &nbsp;
1188
- return configs.map(<span class="fstat-no" title="function not covered" >(c</span>onfig) =&gt; (<span class="cstat-no" title="statement not covered" >{</span>
1189
- server_name: config.server_name,
1190
- description: `Tools available from the ${config.server_name} server.`,
1191
- is_active: config.is_active,
1192
- tools: toolsByServer.get(config.server_name) || [],
1193
- }));
1194
- }
1195
- &nbsp;
1196
- public <span class="fstat-no" title="function not covered" >async </span>executeMcpTool(
1197
- serverName: string,
1198
- toolName: string,
1199
- args: any,
1200
- ): Promise&lt;{ stdout: string; stderr: string }&gt; {
1201
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1202
- `Executing MCP tool: ${serverName}.${toolName} with args: ${JSON.stringify(
1203
- args,
1204
- )}`,
1205
- );
1206
- &nbsp;
1207
- const client = <span class="cstat-no" title="statement not covered" >this.activeClients.get(serverName);</span>
1208
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!client) {</span>
1209
- const errorMsg = <span class="cstat-no" title="statement not covered" >`No active MCP connection found for server: ${serverName}`;</span>
1210
- <span class="cstat-no" title="statement not covered" > this.logger.error(errorMsg);</span>
1211
- <span class="cstat-no" title="statement not covered" > return { stdout: '', stderr: errorMsg };</span>
1212
- }
1213
- &nbsp;
1214
- <span class="cstat-no" title="statement not covered" > try {</span>
1215
- const result = <span class="cstat-no" title="statement not covered" >await client.callTool({ name: toolName, arguments: args });</span>
1216
- const stdout = <span class="cstat-no" title="statement not covered" >JSON.stringify(result, null, 2);</span>
1217
- <span class="cstat-no" title="statement not covered" > return { stdout, stderr: '' };</span>
1218
- } catch (e) {
1219
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1220
- `Error calling tool ${toolName} on ${serverName}: ${e.message}`,
1221
- );
1222
- <span class="cstat-no" title="statement not covered" > return { stdout: '', stderr: e.message };</span>
1223
- }
1224
- }
1225
- &nbsp;
1226
- public async getMcpToolsDefinition(): Promise&lt;string&gt; {
1227
- const servers = await this.getMcpServers();
1228
- const activeServers = servers.filter(<span class="fstat-no" title="function not covered" >(s</span>) =&gt; <span class="cstat-no" title="statement not covered" >s.is_active)</span>;
1229
- &nbsp;
1230
- if (activeServers.length === 0) {
1231
- return 'No active MCP servers are currently connected.';
1232
- }
1233
- &nbsp;
1234
- let definition = <span class="cstat-no" title="statement not covered" >'';</span>
1235
- <span class="cstat-no" title="statement not covered" > for (const server of activeServers) {</span>
1236
- const activeTools = <span class="cstat-no" title="statement not covered" >server.tools.filter(<span class="fstat-no" title="function not covered" >(t</span>) =&gt; <span class="cstat-no" title="statement not covered" >t.is_active)</span>;</span>
1237
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (activeTools.length === 0) <span class="cstat-no" title="statement not covered" >continue;</span></span>
1238
- &nbsp;
1239
- <span class="cstat-no" title="statement not covered" > definition += `### Server: ${server.server_name}\n`;</span>
1240
- <span class="cstat-no" title="statement not covered" > definition += `Description: ${server.description}\n`;</span>
1241
- <span class="cstat-no" title="statement not covered" > definition += 'Tools:\n';</span>
1242
- <span class="cstat-no" title="statement not covered" > for (const tool of activeTools) {</span>
1243
- <span class="cstat-no" title="statement not covered" > definition += `- **${tool.tool_name}**\n`;</span>
1244
- <span class="cstat-no" title="statement not covered" > definition += ` - Description: ${tool.description}\n`;</span>
1245
- <span class="cstat-no" title="statement not covered" > definition += ` - Input Schema: \`${JSON.stringify(</span>
1246
- tool.input_schema,
1247
- )}\`\n`;
1248
- }
1249
- <span class="cstat-no" title="statement not covered" > definition += '\n';</span>
1250
- }
1251
- <span class="cstat-no" title="statement not covered" > return definition;</span>
1252
- }
1253
- &nbsp;
1254
- /**
1255
- * Get all active MCP tool names in serverName__toolName format.
1256
- * Used by SystemPromptsService to populate the MCP tool selection UI.
1257
- */
1258
- public async getActiveMcpToolNames(): Promise&lt;string[]&gt; {
1259
- const activeConfigs = await this.mcpConfigRepository.find({
1260
- where: { is_active: true },
1261
- });
1262
- if (activeConfigs.length === 0) return [];
1263
- &nbsp;
1264
- const activeTools = await this.mcpToolRepository.find({
1265
- where: { is_active: true },
1266
- });
1267
- if (activeTools.length === 0) return [];
1268
- &nbsp;
1269
- const activeServerNames = new Set(activeConfigs.map((c) =&gt; c.server_name));
1270
- return activeTools
1271
- .filter((t) =&gt; activeServerNames.has(t.server_name))
1272
- .map((t) =&gt; `${t.server_name}__${t.tool_name}`);
1273
- }
1274
- &nbsp;
1275
- /**
1276
- * Generate LlmFunctionTool definitions for all active MCP tools.
1277
- * Each tool is named `{server_name}__{tool_name}` (double underscore).
1278
- * These definitions are merged with built-in tool definitions for native tool calling.
1279
- */
1280
- public async getActiveMcpToolDefinitions(): Promise&lt;LlmFunctionTool[]&gt; {
1281
- const activeConfigs = await this.mcpConfigRepository.find({
1282
- where: { is_active: true },
1283
- });
1284
- if (activeConfigs.length === 0) return [];
1285
- &nbsp;
1286
- const activeTools = await this.mcpToolRepository.find({
1287
- where: { is_active: true },
1288
- });
1289
- if (activeTools.length === 0) return [];
1290
- &nbsp;
1291
- // Only include tools from active servers
1292
- const activeServerNames = new Set(activeConfigs.map((c) =&gt; c.server_name));
1293
- &nbsp;
1294
- const definitions: LlmFunctionTool[] = [];
1295
- for (const tool of activeTools) {
1296
- if (!activeServerNames.has(tool.server_name)) continue;
1297
- &nbsp;
1298
- // Use input_schema directly if it's a valid object, otherwise fallback
1299
- let parameters = tool.input_schema;
1300
- if (!parameters || typeof parameters !== 'object') {
1301
- parameters = { type: 'object', properties: {} };
1302
- }
1303
- // Ensure parameters has the required JSON Schema fields
1304
- if (!parameters.type) {
1305
- parameters = { type: 'object', ...parameters };
1306
- }
1307
- &nbsp;
1308
- definitions.push({
1309
- type: 'function',
1310
- function: {
1311
- name: `${tool.server_name}__${tool.tool_name}`,
1312
- description:
1313
- tool.description ||
1314
- `MCP tool: ${tool.server_name}.${tool.tool_name}`,
1315
- parameters,
1316
- },
1317
- });
1318
- }
1319
- &nbsp;
1320
- this.logger.log(
1321
- `Generated ${definitions.length} MCP tool definitions from ${activeServerNames.size} active servers.`,
1322
- );
1323
- return definitions;
1324
- }
1325
- }
1326
- &nbsp;</pre></td></tr></table></pre>
1327
-
1328
- <div class='push'></div><!-- for sticky footer -->
1329
- </div><!-- /wrapper -->
1330
- <div class='footer quiet pad2 space-top1 center small'>
1331
- Code coverage generated by
1332
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1333
- at 2026-05-09T01:03:45.353Z
1334
- </div>
1335
- <script src="../../prettify.js"></script>
1336
- <script>
1337
- window.onload = function () {
1338
- prettyPrint();
1339
- };
1340
- </script>
1341
- <script src="../../sorter.js"></script>
1342
- <script src="../../block-navigation.js"></script>
1343
- </body>
1344
- </html>
1345
-