repoburg 1.3.148 → 1.3.149

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 (499) hide show
  1. package/package.json +1 -1
  2. package/.claude/settings.local.json +0 -7
  3. package/.playwright-mcp/console-2026-05-12T09-54-31-560Z.log +0 -13
  4. package/.playwright-mcp/console-2026-05-12T10-04-14-892Z.log +0 -13
  5. package/.playwright-mcp/console-2026-05-12T10-50-32-398Z.log +0 -14
  6. package/.playwright-mcp/console-2026-05-12T12-50-09-889Z.log +0 -13
  7. package/.playwright-mcp/console-2026-05-12T12-58-49-817Z.log +0 -60
  8. package/.playwright-mcp/console-2026-05-13T18-41-50-654Z.log +0 -13
  9. package/.playwright-mcp/console-2026-05-13T18-54-58-000Z.log +0 -13
  10. package/.playwright-mcp/console-2026-05-13T19-13-30-875Z.log +0 -95
  11. package/.playwright-mcp/console-2026-05-13T20-09-13-456Z.log +0 -17
  12. package/.playwright-mcp/console-2026-05-13T20-21-01-662Z.log +0 -13
  13. package/.playwright-mcp/console-2026-05-13T20-22-00-038Z.log +0 -15
  14. package/.playwright-mcp/console-2026-05-13T20-26-26-665Z.log +0 -28
  15. package/.playwright-mcp/console-2026-05-13T20-35-49-544Z.log +0 -26
  16. package/.playwright-mcp/console-2026-05-13T20-38-10-958Z.log +0 -676
  17. package/.playwright-mcp/console-2026-05-14T21-27-06-074Z.log +0 -69
  18. package/.playwright-mcp/console-2026-05-14T22-13-07-470Z.log +0 -101
  19. package/.playwright-mcp/console-2026-05-14T23-58-12-858Z.log +0 -28
  20. package/.playwright-mcp/console-2026-05-15T00-15-00-760Z.log +0 -81
  21. package/.playwright-mcp/page-2026-05-12T09-54-32-920Z.yml +0 -223
  22. package/.playwright-mcp/page-2026-05-12T09-54-42-067Z.yml +0 -190
  23. package/.playwright-mcp/page-2026-05-12T09-55-12-019Z.yml +0 -389
  24. package/.playwright-mcp/page-2026-05-12T09-55-49-065Z.yml +0 -428
  25. package/.playwright-mcp/page-2026-05-12T09-56-06-607Z.yml +0 -389
  26. package/.playwright-mcp/page-2026-05-12T09-56-23-371Z.yml +0 -196
  27. package/.playwright-mcp/page-2026-05-12T09-56-55-792Z.yml +0 -389
  28. package/.playwright-mcp/page-2026-05-12T10-04-15-716Z.yml +0 -164
  29. package/.playwright-mcp/page-2026-05-12T10-04-43-994Z.yml +0 -190
  30. package/.playwright-mcp/page-2026-05-12T10-05-04-616Z.yml +0 -389
  31. package/.playwright-mcp/page-2026-05-12T10-05-27-643Z.yml +0 -428
  32. package/.playwright-mcp/page-2026-05-12T10-05-47-851Z.yml +0 -389
  33. package/.playwright-mcp/page-2026-05-12T10-06-13-429Z.yml +0 -196
  34. package/.playwright-mcp/page-2026-05-12T10-06-58-147Z.yml +0 -389
  35. package/.playwright-mcp/page-2026-05-12T10-08-20-216Z.yml +0 -428
  36. package/.playwright-mcp/page-2026-05-12T10-08-38-177Z.yml +0 -389
  37. package/.playwright-mcp/page-2026-05-12T10-09-01-851Z.yml +0 -196
  38. package/.playwright-mcp/page-2026-05-12T10-09-24-888Z.yml +0 -389
  39. package/.playwright-mcp/page-2026-05-12T10-50-33-049Z.yml +0 -212
  40. package/.playwright-mcp/page-2026-05-12T10-50-48-496Z.yml +0 -196
  41. package/.playwright-mcp/page-2026-05-12T10-51-51-308Z.yml +0 -196
  42. package/.playwright-mcp/page-2026-05-12T10-52-07-379Z.yml +0 -196
  43. package/.playwright-mcp/page-2026-05-12T12-50-10-589Z.yml +0 -143
  44. package/.playwright-mcp/page-2026-05-12T12-50-25-461Z.yml +0 -196
  45. package/.playwright-mcp/page-2026-05-12T12-51-11-190Z.yml +0 -394
  46. package/.playwright-mcp/page-2026-05-12T12-52-21-138Z.yml +0 -524
  47. package/.playwright-mcp/page-2026-05-12T12-53-42-423Z.yml +0 -431
  48. package/.playwright-mcp/page-2026-05-12T12-54-18-549Z.yml +0 -196
  49. package/.playwright-mcp/page-2026-05-12T12-54-26-818Z.yml +0 -390
  50. package/.playwright-mcp/page-2026-05-12T12-55-32-697Z.yml +0 -520
  51. package/.playwright-mcp/page-2026-05-12T12-58-50-450Z.yml +0 -164
  52. package/.playwright-mcp/page-2026-05-12T12-59-12-954Z.yml +0 -196
  53. package/.playwright-mcp/page-2026-05-12T12-59-38-479Z.yml +0 -394
  54. package/.playwright-mcp/page-2026-05-12T13-01-17-580Z.yml +0 -524
  55. package/.playwright-mcp/page-2026-05-12T13-01-58-447Z.yml +0 -271
  56. package/.playwright-mcp/page-2026-05-12T13-03-12-109Z.yml +0 -394
  57. package/.playwright-mcp/page-2026-05-13T18-41-51-436Z.yml +0 -159
  58. package/.playwright-mcp/page-2026-05-13T18-42-27-482Z.yml +0 -4814
  59. package/.playwright-mcp/page-2026-05-13T18-54-58-644Z.yml +0 -154
  60. package/.playwright-mcp/page-2026-05-13T18-56-11-217Z.yml +0 -1560
  61. package/.playwright-mcp/page-2026-05-13T18-56-32-205Z.yml +0 -1560
  62. package/.playwright-mcp/page-2026-05-13T19-13-31-457Z.yml +0 -164
  63. package/.playwright-mcp/page-2026-05-13T19-14-26-248Z.yml +0 -1560
  64. package/.playwright-mcp/page-2026-05-13T19-15-02-355Z.yml +0 -1560
  65. package/.playwright-mcp/page-2026-05-13T20-09-14-478Z.yml +0 -149
  66. package/.playwright-mcp/page-2026-05-13T20-10-49-292Z.yml +0 -4814
  67. package/.playwright-mcp/page-2026-05-13T20-21-02-852Z.yml +0 -143
  68. package/.playwright-mcp/page-2026-05-13T20-22-01-084Z.yml +0 -143
  69. package/.playwright-mcp/page-2026-05-13T20-22-09-334Z.yml +0 -1561
  70. package/.playwright-mcp/page-2026-05-13T20-26-27-690Z.yml +0 -143
  71. package/.playwright-mcp/page-2026-05-13T20-26-53-324Z.yml +0 -1561
  72. package/.playwright-mcp/page-2026-05-13T20-27-35-395Z.yml +0 -1561
  73. package/.playwright-mcp/page-2026-05-13T20-35-50-708Z.yml +0 -149
  74. package/.playwright-mcp/page-2026-05-13T20-37-41-379Z.yml +0 -0
  75. package/.playwright-mcp/page-2026-05-13T20-38-12-049Z.yml +0 -149
  76. package/.playwright-mcp/page-2026-05-13T20-38-19-708Z.yml +0 -1561
  77. package/.playwright-mcp/page-2026-05-14T21-27-07-278Z.yml +0 -164
  78. package/.playwright-mcp/page-2026-05-14T22-13-07-628Z.yml +0 -5
  79. package/.playwright-mcp/page-2026-05-14T22-13-27-676Z.yml +0 -1561
  80. package/.playwright-mcp/page-2026-05-14T23-58-13-064Z.yml +0 -3
  81. package/.playwright-mcp/page-2026-05-14T23-58-33-500Z.yml +0 -1561
  82. package/.playwright-mcp/page-2026-05-15T00-15-00-945Z.yml +0 -3
  83. package/.run/backend _ build.run.xml +0 -12
  84. package/.run/backend _ lint.run.xml +0 -12
  85. package/.run/backend _ test.run.xml +0 -12
  86. package/.run/frontend _ build.run.xml +0 -12
  87. package/.run/frontend _ lint_fix.run.xml +0 -12
  88. package/CODEMAP.md +0 -53
  89. package/backend/.repoburg/hooks/README.md +0 -53
  90. package/backend/.repoburg/hooks/eslint-hook.ts +0 -46
  91. package/backend/.repoburg/hooks/example-hook.ts +0 -62
  92. package/backend/CODEMAP.md +0 -48
  93. package/backend/README.md +0 -3
  94. package/backend/coverage/clover.xml +0 -12003
  95. package/backend/coverage/coverage-final.json +0 -313
  96. package/backend/coverage/lcov-report/base.css +0 -224
  97. package/backend/coverage/lcov-report/block-navigation.js +0 -87
  98. package/backend/coverage/lcov-report/favicon.png +0 -0
  99. package/backend/coverage/lcov-report/index.html +0 -1301
  100. package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +0 -116
  101. package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +0 -445
  102. package/backend/coverage/lcov-report/packages/gemini-core/index.html +0 -116
  103. package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +0 -127
  104. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +0 -193
  105. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +0 -832
  106. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +0 -206
  107. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +0 -469
  108. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +0 -1705
  109. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +0 -790
  110. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +0 -454
  111. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +0 -685
  112. package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +0 -307
  113. package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +0 -146
  114. package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +0 -151
  115. package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +0 -172
  116. package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +0 -490
  117. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +0 -1237
  118. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +0 -139
  119. package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +0 -176
  120. package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +0 -409
  121. package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +0 -181
  122. package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +0 -116
  123. package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +0 -187
  124. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +0 -229
  125. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +0 -634
  126. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +0 -373
  127. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +0 -191
  128. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +0 -124
  129. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +0 -835
  130. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +0 -211
  131. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +0 -421
  132. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +0 -191
  133. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +0 -592
  134. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +0 -388
  135. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +0 -877
  136. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +0 -112
  137. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +0 -502
  138. package/backend/coverage/lcov-report/packages/tokenpatch/index.html +0 -161
  139. package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +0 -415
  140. package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +0 -139
  141. package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +0 -1249
  142. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +0 -131
  143. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +0 -187
  144. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +0 -193
  145. package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +0 -178
  146. package/backend/coverage/lcov-report/prettify.css +0 -1
  147. package/backend/coverage/lcov-report/prettify.js +0 -2
  148. package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  149. package/backend/coverage/lcov-report/sorter.js +0 -210
  150. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +0 -1549
  151. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +0 -904
  152. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +0 -175
  153. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +0 -1534
  154. package/backend/coverage/lcov-report/src/ai-actions/index.html +0 -161
  155. package/backend/coverage/lcov-report/src/app.controller.ts.html +0 -151
  156. package/backend/coverage/lcov-report/src/app.module.ts.html +0 -451
  157. package/backend/coverage/lcov-report/src/app.service.ts.html +0 -163
  158. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +0 -1609
  159. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +0 -136
  160. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +0 -2281
  161. package/backend/coverage/lcov-report/src/application-state/dto/index.html +0 -416
  162. package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +0 -109
  163. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +0 -118
  164. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +0 -109
  165. package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +0 -124
  166. package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +0 -121
  167. package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +0 -124
  168. package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +0 -115
  169. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +0 -115
  170. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +0 -127
  171. package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +0 -118
  172. package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +0 -109
  173. package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +0 -139
  174. package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +0 -109
  175. package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +0 -109
  176. package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +0 -118
  177. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +0 -124
  178. package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +0 -118
  179. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +0 -109
  180. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +0 -124
  181. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +0 -118
  182. package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +0 -109
  183. package/backend/coverage/lcov-report/src/application-state/index.html +0 -146
  184. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +0 -1297
  185. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +0 -712
  186. package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +0 -379
  187. package/backend/coverage/lcov-report/src/common/cache/index.html +0 -146
  188. package/backend/coverage/lcov-report/src/common/common.module.ts.html +0 -121
  189. package/backend/coverage/lcov-report/src/common/index.html +0 -116
  190. package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +0 -337
  191. package/backend/coverage/lcov-report/src/common/interceptors/index.html +0 -116
  192. package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +0 -265
  193. package/backend/coverage/lcov-report/src/common/middleware/index.html +0 -116
  194. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +0 -118
  195. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +0 -1501
  196. package/backend/coverage/lcov-report/src/context-generation/index.html +0 -131
  197. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +0 -427
  198. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +0 -142
  199. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +0 -442
  200. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +0 -211
  201. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +0 -116
  202. package/backend/coverage/lcov-report/src/context-snippets/index.html +0 -146
  203. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +0 -724
  204. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +0 -142
  205. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +0 -1015
  206. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +0 -511
  207. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +0 -116
  208. package/backend/coverage/lcov-report/src/context-templates/index.html +0 -146
  209. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +0 -613
  210. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +0 -124
  211. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +0 -211
  212. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +0 -190
  213. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +0 -439
  214. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +0 -205
  215. package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +0 -241
  216. package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +0 -553
  217. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +0 -208
  218. package/backend/coverage/lcov-report/src/core-entities/index.html +0 -371
  219. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +0 -136
  220. package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +0 -388
  221. package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +0 -256
  222. package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +0 -256
  223. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +0 -181
  224. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +0 -745
  225. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +0 -688
  226. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +0 -349
  227. package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +0 -235
  228. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +0 -442
  229. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +0 -124
  230. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +0 -304
  231. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +0 -205
  232. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +0 -116
  233. package/backend/coverage/lcov-report/src/custom-snippets/index.html +0 -146
  234. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +0 -463
  235. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +0 -124
  236. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +0 -310
  237. package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +0 -244
  238. package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +0 -116
  239. package/backend/coverage/lcov-report/src/custom-variables/index.html +0 -146
  240. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +0 -295
  241. package/backend/coverage/lcov-report/src/events/events.module.ts.html +0 -109
  242. package/backend/coverage/lcov-report/src/events/index.html +0 -146
  243. package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +0 -466
  244. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +0 -130
  245. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +0 -116
  246. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +0 -130
  247. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +0 -124
  248. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +0 -238
  249. package/backend/coverage/lcov-report/src/execution-logs/index.html +0 -146
  250. package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +0 -553
  251. package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +0 -109
  252. package/backend/coverage/lcov-report/src/gemini/index.html +0 -131
  253. package/backend/coverage/lcov-report/src/global-config/dto/index.html +0 -116
  254. package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +0 -367
  255. package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +0 -220
  256. package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +0 -115
  257. package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +0 -397
  258. package/backend/coverage/lcov-report/src/global-config/index.html +0 -146
  259. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +0 -340
  260. package/backend/coverage/lcov-report/src/index.html +0 -206
  261. package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +0 -187
  262. package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +0 -1825
  263. package/backend/coverage/lcov-report/src/interactive-chat/index.html +0 -146
  264. package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +0 -343
  265. package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +0 -116
  266. package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +0 -214
  267. package/backend/coverage/lcov-report/src/llm-call-logs/index.html +0 -146
  268. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +0 -634
  269. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +0 -124
  270. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +0 -643
  271. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +0 -1090
  272. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +0 -433
  273. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +0 -757
  274. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +0 -586
  275. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +0 -1153
  276. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +0 -124
  277. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +0 -103
  278. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +0 -124
  279. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +0 -106
  280. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +0 -106
  281. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +0 -118
  282. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +0 -190
  283. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +0 -196
  284. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +0 -91
  285. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +0 -356
  286. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +0 -106
  287. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +0 -124
  288. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +0 -124
  289. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +0 -214
  290. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +0 -202
  291. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +0 -151
  292. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +0 -181
  293. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +0 -130
  294. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +0 -631
  295. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +0 -469
  296. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +0 -448
  297. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +0 -1351
  298. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +0 -868
  299. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +0 -481
  300. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +0 -416
  301. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +0 -580
  302. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +0 -352
  303. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +0 -1054
  304. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +0 -331
  305. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +0 -403
  306. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +0 -176
  307. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +0 -100
  308. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +0 -724
  309. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +0 -358
  310. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +0 -379
  311. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +0 -838
  312. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +0 -1702
  313. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +0 -1459
  314. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +0 -679
  315. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +0 -964
  316. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +0 -625
  317. package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +0 -103
  318. package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +0 -116
  319. package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +0 -1645
  320. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +0 -238
  321. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +0 -181
  322. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +0 -161
  323. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +0 -313
  324. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +0 -466
  325. package/backend/coverage/lcov-report/src/llm-orchestration/index.html +0 -176
  326. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +0 -319
  327. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +0 -706
  328. package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +0 -1150
  329. package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +0 -131
  330. package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +0 -658
  331. package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +0 -127
  332. package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +0 -547
  333. package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +0 -1681
  334. package/backend/coverage/lcov-report/src/llm-provider/index.html +0 -236
  335. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +0 -187
  336. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +0 -361
  337. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +0 -175
  338. package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +0 -1780
  339. package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +0 -1867
  340. package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +0 -1891
  341. package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +0 -304
  342. package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +0 -1666
  343. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +0 -131
  344. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +0 -436
  345. package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +0 -319
  346. package/backend/coverage/lcov-report/src/llm-responses/index.html +0 -146
  347. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +0 -283
  348. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +0 -184
  349. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +0 -1474
  350. package/backend/coverage/lcov-report/src/main.ts.html +0 -463
  351. package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +0 -145
  352. package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +0 -127
  353. package/backend/coverage/lcov-report/src/mcp/dto/index.html +0 -146
  354. package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +0 -112
  355. package/backend/coverage/lcov-report/src/mcp/index.html +0 -146
  356. package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +0 -340
  357. package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +0 -124
  358. package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +0 -1345
  359. package/backend/coverage/lcov-report/src/message-bus/dto/index.html +0 -116
  360. package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +0 -109
  361. package/backend/coverage/lcov-report/src/message-bus/index.html +0 -146
  362. package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +0 -148
  363. package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +0 -115
  364. package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +0 -151
  365. package/backend/coverage/lcov-report/src/projects/dto/index.html +0 -116
  366. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +0 -196
  367. package/backend/coverage/lcov-report/src/projects/index.html +0 -146
  368. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +0 -322
  369. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +0 -124
  370. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +0 -235
  371. package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +0 -280
  372. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +0 -439
  373. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +0 -271
  374. package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +0 -271
  375. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +0 -172
  376. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +0 -116
  377. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +0 -157
  378. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +0 -148
  379. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +0 -151
  380. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +0 -161
  381. package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +0 -247
  382. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +0 -94
  383. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +0 -100
  384. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +0 -97
  385. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +0 -100
  386. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +0 -304
  387. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +0 -94
  388. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +0 -341
  389. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +0 -100
  390. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +0 -97
  391. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +0 -94
  392. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +0 -94
  393. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +0 -94
  394. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +0 -94
  395. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +0 -94
  396. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +0 -100
  397. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +0 -94
  398. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +0 -94
  399. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +0 -94
  400. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +0 -97
  401. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +0 -131
  402. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +0 -121
  403. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +0 -116
  404. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +0 -115
  405. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +0 -136
  406. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +0 -131
  407. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +0 -190
  408. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +0 -421
  409. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +0 -265
  410. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +0 -161
  411. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +0 -388
  412. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +0 -265
  413. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +0 -274
  414. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +0 -146
  415. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +0 -250
  416. package/backend/coverage/lcov-report/src/seeding/index.html +0 -236
  417. package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +0 -193
  418. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +0 -211
  419. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +0 -187
  420. package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +0 -742
  421. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +0 -397
  422. package/backend/coverage/lcov-report/src/session-followup/index.html +0 -131
  423. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +0 -130
  424. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +0 -718
  425. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +0 -116
  426. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +0 -577
  427. package/backend/coverage/lcov-report/src/session-inputs/index.html +0 -176
  428. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +0 -832
  429. package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +0 -220
  430. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +0 -685
  431. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +0 -229
  432. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +0 -1981
  433. package/backend/coverage/lcov-report/src/session-transfer/index.html +0 -131
  434. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +0 -160
  435. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +0 -883
  436. package/backend/coverage/lcov-report/src/sessions/dto/index.html +0 -116
  437. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +0 -769
  438. package/backend/coverage/lcov-report/src/sessions/index.html +0 -146
  439. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +0 -1306
  440. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +0 -220
  441. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +0 -2797
  442. package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +0 -355
  443. package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +0 -131
  444. package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +0 -295
  445. package/backend/coverage/lcov-report/src/sub-agents/index.html +0 -221
  446. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +0 -463
  447. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +0 -2428
  448. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +0 -580
  449. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +0 -550
  450. package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +0 -475
  451. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +0 -373
  452. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +0 -205
  453. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +0 -619
  454. package/backend/coverage/lcov-report/src/syntax-validation/index.html +0 -131
  455. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +0 -109
  456. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +0 -724
  457. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +0 -176
  458. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +0 -157
  459. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +0 -148
  460. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +0 -517
  461. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +0 -121
  462. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +0 -118
  463. package/backend/coverage/lcov-report/src/system-prompts/index.html +0 -146
  464. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +0 -1060
  465. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +0 -160
  466. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +0 -2254
  467. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +0 -178
  468. package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +0 -181
  469. package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +0 -131
  470. package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +0 -178
  471. package/backend/coverage/lcov-report/src/tool-hooks/index.html +0 -146
  472. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +0 -481
  473. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +0 -127
  474. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +0 -1222
  475. package/backend/coverage/lcov-report/src/tracing.ts.html +0 -214
  476. package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +0 -130
  477. package/backend/coverage/lcov-report/src/types/index.html +0 -116
  478. package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +0 -253
  479. package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +0 -310
  480. package/backend/coverage/lcov-report/src/utils/index.html +0 -191
  481. package/backend/coverage/lcov-report/src/utils/index.ts.html +0 -100
  482. package/backend/coverage/lcov-report/src/utils/short-id.ts.html +0 -109
  483. package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +0 -412
  484. package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +0 -223
  485. package/backend/coverage/lcov-report/src/visual-editor/index.html +0 -146
  486. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +0 -409
  487. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +0 -130
  488. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +0 -118
  489. package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +0 -112
  490. package/backend/coverage/lcov-report/src/workspace/dto/index.html +0 -131
  491. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +0 -193
  492. package/backend/coverage/lcov-report/src/workspace/index.html +0 -146
  493. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +0 -394
  494. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +0 -121
  495. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +0 -1027
  496. package/backend/coverage/lcov.info +0 -20220
  497. package/backend/packages/tokenpatch/CODEMAP.md +0 -25
  498. package/daemon/CODEMAP.md +0 -23
  499. package/visual-editor-proxy/CODEMAP.md +0 -21
@@ -1,1501 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/context-generation/context-generation.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/context-generation</a> context-generation.service.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">63.31% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>126/199</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">41.66% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>20/48</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">76.19% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>16/21</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">63.58% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>124/195</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>
487
- <a name='L422'></a><a href='#L422'>422</a>
488
- <a name='L423'></a><a href='#L423'>423</a>
489
- <a name='L424'></a><a href='#L424'>424</a>
490
- <a name='L425'></a><a href='#L425'>425</a>
491
- <a name='L426'></a><a href='#L426'>426</a>
492
- <a name='L427'></a><a href='#L427'>427</a>
493
- <a name='L428'></a><a href='#L428'>428</a>
494
- <a name='L429'></a><a href='#L429'>429</a>
495
- <a name='L430'></a><a href='#L430'>430</a>
496
- <a name='L431'></a><a href='#L431'>431</a>
497
- <a name='L432'></a><a href='#L432'>432</a>
498
- <a name='L433'></a><a href='#L433'>433</a>
499
- <a name='L434'></a><a href='#L434'>434</a>
500
- <a name='L435'></a><a href='#L435'>435</a>
501
- <a name='L436'></a><a href='#L436'>436</a>
502
- <a name='L437'></a><a href='#L437'>437</a>
503
- <a name='L438'></a><a href='#L438'>438</a>
504
- <a name='L439'></a><a href='#L439'>439</a>
505
- <a name='L440'></a><a href='#L440'>440</a>
506
- <a name='L441'></a><a href='#L441'>441</a>
507
- <a name='L442'></a><a href='#L442'>442</a>
508
- <a name='L443'></a><a href='#L443'>443</a>
509
- <a name='L444'></a><a href='#L444'>444</a>
510
- <a name='L445'></a><a href='#L445'>445</a>
511
- <a name='L446'></a><a href='#L446'>446</a>
512
- <a name='L447'></a><a href='#L447'>447</a>
513
- <a name='L448'></a><a href='#L448'>448</a>
514
- <a name='L449'></a><a href='#L449'>449</a>
515
- <a name='L450'></a><a href='#L450'>450</a>
516
- <a name='L451'></a><a href='#L451'>451</a>
517
- <a name='L452'></a><a href='#L452'>452</a>
518
- <a name='L453'></a><a href='#L453'>453</a>
519
- <a name='L454'></a><a href='#L454'>454</a>
520
- <a name='L455'></a><a href='#L455'>455</a>
521
- <a name='L456'></a><a href='#L456'>456</a>
522
- <a name='L457'></a><a href='#L457'>457</a>
523
- <a name='L458'></a><a href='#L458'>458</a>
524
- <a name='L459'></a><a href='#L459'>459</a>
525
- <a name='L460'></a><a href='#L460'>460</a>
526
- <a name='L461'></a><a href='#L461'>461</a>
527
- <a name='L462'></a><a href='#L462'>462</a>
528
- <a name='L463'></a><a href='#L463'>463</a>
529
- <a name='L464'></a><a href='#L464'>464</a>
530
- <a name='L465'></a><a href='#L465'>465</a>
531
- <a name='L466'></a><a href='#L466'>466</a>
532
- <a name='L467'></a><a href='#L467'>467</a>
533
- <a name='L468'></a><a href='#L468'>468</a>
534
- <a name='L469'></a><a href='#L469'>469</a>
535
- <a name='L470'></a><a href='#L470'>470</a>
536
- <a name='L471'></a><a href='#L471'>471</a>
537
- <a name='L472'></a><a href='#L472'>472</a>
538
- <a name='L473'></a><a href='#L473'>473</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">25x</span>
539
- <span class="cline-any cline-neutral">&nbsp;</span>
540
- <span class="cline-any cline-neutral">&nbsp;</span>
541
- <span class="cline-any cline-neutral">&nbsp;</span>
542
- <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-neutral">&nbsp;</span>
544
- <span class="cline-any cline-yes">25x</span>
545
- <span class="cline-any cline-yes">25x</span>
546
- <span class="cline-any cline-yes">25x</span>
547
- <span class="cline-any cline-yes">25x</span>
548
- <span class="cline-any cline-yes">25x</span>
549
- <span class="cline-any cline-yes">25x</span>
550
- <span class="cline-any cline-yes">25x</span>
551
- <span class="cline-any cline-yes">25x</span>
552
- <span class="cline-any cline-yes">25x</span>
553
- <span class="cline-any cline-yes">25x</span>
554
- <span class="cline-any cline-neutral">&nbsp;</span>
555
- <span class="cline-any cline-neutral">&nbsp;</span>
556
- <span class="cline-any cline-yes">25x</span>
557
- <span class="cline-any cline-yes">22x</span>
558
- <span class="cline-any cline-neutral">&nbsp;</span>
559
- <span class="cline-any cline-yes">22x</span>
560
- <span class="cline-any cline-neutral">&nbsp;</span>
561
- <span class="cline-any cline-neutral">&nbsp;</span>
562
- <span class="cline-any cline-yes">22x</span>
563
- <span class="cline-any cline-neutral">&nbsp;</span>
564
- <span class="cline-any cline-neutral">&nbsp;</span>
565
- <span class="cline-any cline-neutral">&nbsp;</span>
566
- <span class="cline-any cline-yes">22x</span>
567
- <span class="cline-any cline-neutral">&nbsp;</span>
568
- <span class="cline-any cline-yes">22x</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-neutral">&nbsp;</span>
572
- <span class="cline-any cline-neutral">&nbsp;</span>
573
- <span class="cline-any cline-yes">22x</span>
574
- <span class="cline-any cline-neutral">&nbsp;</span>
575
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
583
- <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-neutral">&nbsp;</span>
586
- <span class="cline-any cline-neutral">&nbsp;</span>
587
- <span class="cline-any cline-neutral">&nbsp;</span>
588
- <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-neutral">&nbsp;</span>
590
- <span class="cline-any cline-yes">6x</span>
591
- <span class="cline-any cline-yes">6x</span>
592
- <span class="cline-any cline-yes">6x</span>
593
- <span class="cline-any cline-yes">6x</span>
594
- <span class="cline-any cline-yes">6x</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-yes">3x</span>
599
- <span class="cline-any cline-yes">3x</span>
600
- <span class="cline-any cline-yes">3x</span>
601
- <span class="cline-any cline-neutral">&nbsp;</span>
602
- <span class="cline-any cline-yes">3x</span>
603
- <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
608
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
612
- <span class="cline-any cline-neutral">&nbsp;</span>
613
- <span class="cline-any cline-yes">25x</span>
614
- <span class="cline-any cline-yes">2x</span>
615
- <span class="cline-any cline-yes">2x</span>
616
- <span class="cline-any cline-yes">2x</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-yes">2x</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-no">&nbsp;</span>
625
- <span class="cline-any cline-neutral">&nbsp;</span>
626
- <span class="cline-any cline-yes">2x</span>
627
- <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
633
- <span class="cline-any cline-neutral">&nbsp;</span>
634
- <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-neutral">&nbsp;</span>
636
- <span class="cline-any cline-neutral">&nbsp;</span>
637
- <span class="cline-any cline-yes">25x</span>
638
- <span class="cline-any cline-neutral">&nbsp;</span>
639
- <span class="cline-any cline-yes">5x</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-neutral">&nbsp;</span>
643
- <span class="cline-any cline-yes">5x</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-yes">5x</span>
648
- <span class="cline-any cline-neutral">&nbsp;</span>
649
- <span class="cline-any cline-yes">5x</span>
650
- <span class="cline-any cline-yes">5x</span>
651
- <span class="cline-any cline-no">&nbsp;</span>
652
- <span class="cline-any cline-neutral">&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-no">&nbsp;</span>
656
- <span class="cline-any cline-neutral">&nbsp;</span>
657
- <span class="cline-any cline-yes">5x</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-yes">5x</span>
661
- <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-neutral">&nbsp;</span>
663
- <span class="cline-any cline-neutral">&nbsp;</span>
664
- <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
670
- <span class="cline-any cline-neutral">&nbsp;</span>
671
- <span class="cline-any cline-yes">5x</span>
672
- <span class="cline-any cline-yes">5x</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-yes">5x</span>
678
- <span class="cline-any cline-neutral">&nbsp;</span>
679
- <span class="cline-any cline-yes">5x</span>
680
- <span class="cline-any cline-yes">1x</span>
681
- <span class="cline-any cline-yes">1x</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-yes">4x</span>
686
- <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-neutral">&nbsp;</span>
688
- <span class="cline-any cline-neutral">&nbsp;</span>
689
- <span class="cline-any cline-yes">25x</span>
690
- <span class="cline-any cline-yes">5x</span>
691
- <span class="cline-any cline-yes">4x</span>
692
- <span class="cline-any cline-yes">4x</span>
693
- <span class="cline-any cline-yes">2x</span>
694
- <span class="cline-any cline-no">&nbsp;</span>
695
- <span class="cline-any cline-no">&nbsp;</span>
696
- <span class="cline-any cline-neutral">&nbsp;</span>
697
- <span class="cline-any cline-yes">2x</span>
698
- <span class="cline-any cline-yes">2x</span>
699
- <span class="cline-any cline-yes">2x</span>
700
- <span class="cline-any cline-yes">2x</span>
701
- <span class="cline-any cline-neutral">&nbsp;</span>
702
- <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
709
- <span class="cline-any cline-no">&nbsp;</span>
710
- <span class="cline-any cline-neutral">&nbsp;</span>
711
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
715
- <span class="cline-any cline-neutral">&nbsp;</span>
716
- <span class="cline-any cline-yes">25x</span>
717
- <span class="cline-any cline-no">&nbsp;</span>
718
- <span class="cline-any cline-no">&nbsp;</span>
719
- <span class="cline-any cline-no">&nbsp;</span>
720
- <span class="cline-any cline-no">&nbsp;</span>
721
- <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
725
- <span class="cline-any cline-no">&nbsp;</span>
726
- <span class="cline-any cline-neutral">&nbsp;</span>
727
- <span class="cline-any cline-no">&nbsp;</span>
728
- <span class="cline-any cline-no">&nbsp;</span>
729
- <span class="cline-any cline-neutral">&nbsp;</span>
730
- <span class="cline-any cline-neutral">&nbsp;</span>
731
- <span class="cline-any cline-no">&nbsp;</span>
732
- <span class="cline-any cline-neutral">&nbsp;</span>
733
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
737
- <span class="cline-any cline-neutral">&nbsp;</span>
738
- <span class="cline-any cline-neutral">&nbsp;</span>
739
- <span class="cline-any cline-neutral">&nbsp;</span>
740
- <span class="cline-any cline-neutral">&nbsp;</span>
741
- <span class="cline-any cline-no">&nbsp;</span>
742
- <span class="cline-any cline-no">&nbsp;</span>
743
- <span class="cline-any cline-no">&nbsp;</span>
744
- <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-no">&nbsp;</span>
746
- <span class="cline-any cline-neutral">&nbsp;</span>
747
- <span class="cline-any cline-no">&nbsp;</span>
748
- <span class="cline-any cline-no">&nbsp;</span>
749
- <span class="cline-any cline-no">&nbsp;</span>
750
- <span class="cline-any cline-neutral">&nbsp;</span>
751
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
755
- <span class="cline-any cline-neutral">&nbsp;</span>
756
- <span class="cline-any cline-neutral">&nbsp;</span>
757
- <span class="cline-any cline-neutral">&nbsp;</span>
758
- <span class="cline-any cline-neutral">&nbsp;</span>
759
- <span class="cline-any cline-yes">25x</span>
760
- <span class="cline-any cline-yes">2x</span>
761
- <span class="cline-any cline-yes">1x</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-yes">1x</span>
767
- <span class="cline-any cline-yes">1x</span>
768
- <span class="cline-any cline-neutral">&nbsp;</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-yes">1x</span>
773
- <span class="cline-any cline-neutral">&nbsp;</span>
774
- <span class="cline-any cline-no">&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-no">&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-neutral">&nbsp;</span>
782
- <span class="cline-any cline-yes">25x</span>
783
- <span class="cline-any cline-yes">3x</span>
784
- <span class="cline-any cline-yes">3x</span>
785
- <span class="cline-any cline-yes">3x</span>
786
- <span class="cline-any cline-yes">3x</span>
787
- <span class="cline-any cline-yes">3x</span>
788
- <span class="cline-any cline-neutral">&nbsp;</span>
789
- <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-neutral">&nbsp;</span>
791
- <span class="cline-any cline-neutral">&nbsp;</span>
792
- <span class="cline-any cline-yes">1x</span>
793
- <span class="cline-any cline-neutral">&nbsp;</span>
794
- <span class="cline-any cline-yes">2x</span>
795
- <span class="cline-any cline-yes">1x</span>
796
- <span class="cline-any cline-yes">1x</span>
797
- <span class="cline-any cline-neutral">&nbsp;</span>
798
- <span class="cline-any cline-yes">1x</span>
799
- <span class="cline-any cline-yes">1x</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-yes">1x</span>
803
- <span class="cline-any cline-neutral">&nbsp;</span>
804
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
808
- <span class="cline-any cline-no">&nbsp;</span>
809
- <span class="cline-any cline-neutral">&nbsp;</span>
810
- <span class="cline-any cline-neutral">&nbsp;</span>
811
- <span class="cline-any cline-neutral">&nbsp;</span>
812
- <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-yes">25x</span>
814
- <span class="cline-any cline-yes">2x</span>
815
- <span class="cline-any cline-yes">2x</span>
816
- <span class="cline-any cline-yes">2x</span>
817
- <span class="cline-any cline-yes">2x</span>
818
- <span class="cline-any cline-yes">2x</span>
819
- <span class="cline-any cline-yes">2x</span>
820
- <span class="cline-any cline-neutral">&nbsp;</span>
821
- <span class="cline-any cline-neutral">&nbsp;</span>
822
- <span class="cline-any cline-neutral">&nbsp;</span>
823
- <span class="cline-any cline-neutral">&nbsp;</span>
824
- <span class="cline-any cline-yes">1x</span>
825
- <span class="cline-any cline-neutral">&nbsp;</span>
826
- <span class="cline-any cline-yes">1x</span>
827
- <span class="cline-any cline-no">&nbsp;</span>
828
- <span class="cline-any cline-no">&nbsp;</span>
829
- <span class="cline-any cline-neutral">&nbsp;</span>
830
- <span class="cline-any cline-yes">1x</span>
831
- <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-yes">1x</span>
833
- <span class="cline-any cline-neutral">&nbsp;</span>
834
- <span class="cline-any cline-no">&nbsp;</span>
835
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
839
- <span class="cline-any cline-neutral">&nbsp;</span>
840
- <span class="cline-any cline-no">&nbsp;</span>
841
- <span class="cline-any cline-neutral">&nbsp;</span>
842
- <span class="cline-any cline-neutral">&nbsp;</span>
843
- <span class="cline-any cline-neutral">&nbsp;</span>
844
- <span class="cline-any cline-no">&nbsp;</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-neutral">&nbsp;</span>
848
- <span class="cline-any cline-neutral">&nbsp;</span>
849
- <span class="cline-any cline-neutral">&nbsp;</span>
850
- <span class="cline-any cline-neutral">&nbsp;</span>
851
- <span class="cline-any cline-yes">25x</span>
852
- <span class="cline-any cline-yes">1x</span>
853
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
857
- <span class="cline-any cline-neutral">&nbsp;</span>
858
- <span class="cline-any cline-yes">1x</span>
859
- <span class="cline-any cline-yes">1x</span>
860
- <span class="cline-any cline-yes">1x</span>
861
- <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</span>
865
- <span class="cline-any cline-neutral">&nbsp;</span>
866
- <span class="cline-any cline-yes">1x</span>
867
- <span class="cline-any cline-neutral">&nbsp;</span>
868
- <span class="cline-any cline-no">&nbsp;</span>
869
- <span class="cline-any cline-no">&nbsp;</span>
870
- <span class="cline-any cline-no">&nbsp;</span>
871
- <span class="cline-any cline-neutral">&nbsp;</span>
872
- <span class="cline-any cline-no">&nbsp;</span>
873
- <span class="cline-any cline-no">&nbsp;</span>
874
- <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-neutral">&nbsp;</span>
876
- <span class="cline-any cline-no">&nbsp;</span>
877
- <span class="cline-any cline-neutral">&nbsp;</span>
878
- <span class="cline-any cline-no">&nbsp;</span>
879
- <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-neutral">&nbsp;</span>
881
- <span class="cline-any cline-neutral">&nbsp;</span>
882
- <span class="cline-any cline-no">&nbsp;</span>
883
- <span class="cline-any cline-neutral">&nbsp;</span>
884
- <span class="cline-any cline-neutral">&nbsp;</span>
885
- <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
889
- <span class="cline-any cline-yes">25x</span>
890
- <span class="cline-any cline-no">&nbsp;</span>
891
- <span class="cline-any cline-no">&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-no">&nbsp;</span>
895
- <span class="cline-any cline-no">&nbsp;</span>
896
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
901
- <span class="cline-any cline-no">&nbsp;</span>
902
- <span class="cline-any cline-no">&nbsp;</span>
903
- <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-neutral">&nbsp;</span>
905
- <span class="cline-any cline-no">&nbsp;</span>
906
- <span class="cline-any cline-neutral">&nbsp;</span>
907
- <span class="cline-any cline-no">&nbsp;</span>
908
- <span class="cline-any cline-neutral">&nbsp;</span>
909
- <span class="cline-any cline-no">&nbsp;</span>
910
- <span class="cline-any cline-no">&nbsp;</span>
911
- <span class="cline-any cline-neutral">&nbsp;</span>
912
- <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-no">&nbsp;</span>
914
- <span class="cline-any cline-neutral">&nbsp;</span>
915
- <span class="cline-any cline-no">&nbsp;</span>
916
- <span class="cline-any cline-neutral">&nbsp;</span>
917
- <span class="cline-any cline-neutral">&nbsp;</span>
918
- <span class="cline-any cline-neutral">&nbsp;</span>
919
- <span class="cline-any cline-no">&nbsp;</span>
920
- <span class="cline-any cline-neutral">&nbsp;</span>
921
- <span class="cline-any cline-neutral">&nbsp;</span>
922
- <span class="cline-any cline-neutral">&nbsp;</span>
923
- <span class="cline-any cline-neutral">&nbsp;</span>
924
- <span class="cline-any cline-neutral">&nbsp;</span>
925
- <span class="cline-any cline-neutral">&nbsp;</span>
926
- <span class="cline-any cline-neutral">&nbsp;</span>
927
- <span class="cline-any cline-yes">3x</span>
928
- <span class="cline-any cline-yes">1x</span>
929
- <span class="cline-any cline-neutral">&nbsp;</span>
930
- <span class="cline-any cline-neutral">&nbsp;</span>
931
- <span class="cline-any cline-yes">1x</span>
932
- <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-neutral">&nbsp;</span>
934
- <span class="cline-any cline-yes">2x</span>
935
- <span class="cline-any cline-neutral">&nbsp;</span>
936
- <span class="cline-any cline-yes">2x</span>
937
- <span class="cline-any cline-yes">2x</span>
938
- <span class="cline-any cline-neutral">&nbsp;</span>
939
- <span class="cline-any cline-neutral">&nbsp;</span>
940
- <span class="cline-any cline-yes">2x</span>
941
- <span class="cline-any cline-neutral">&nbsp;</span>
942
- <span class="cline-any cline-neutral">&nbsp;</span>
943
- <span class="cline-any cline-neutral">&nbsp;</span>
944
- <span class="cline-any cline-yes">2x</span>
945
- <span class="cline-any cline-neutral">&nbsp;</span>
946
- <span class="cline-any cline-no">&nbsp;</span>
947
- <span class="cline-any cline-neutral">&nbsp;</span>
948
- <span class="cline-any cline-neutral">&nbsp;</span>
949
- <span class="cline-any cline-yes">2x</span>
950
- <span class="cline-any cline-no">&nbsp;</span>
951
- <span class="cline-any cline-neutral">&nbsp;</span>
952
- <span class="cline-any cline-neutral">&nbsp;</span>
953
- <span class="cline-any cline-no">&nbsp;</span>
954
- <span class="cline-any cline-neutral">&nbsp;</span>
955
- <span class="cline-any cline-neutral">&nbsp;</span>
956
- <span class="cline-any cline-neutral">&nbsp;</span>
957
- <span class="cline-any cline-yes">2x</span>
958
- <span class="cline-any cline-neutral">&nbsp;</span>
959
- <span class="cline-any cline-neutral">&nbsp;</span>
960
- <span class="cline-any cline-yes">2x</span>
961
- <span class="cline-any cline-neutral">&nbsp;</span>
962
- <span class="cline-any cline-neutral">&nbsp;</span>
963
- <span class="cline-any cline-neutral">&nbsp;</span>
964
- <span class="cline-any cline-neutral">&nbsp;</span>
965
- <span class="cline-any cline-neutral">&nbsp;</span>
966
- <span class="cline-any cline-yes">2x</span>
967
- <span class="cline-any cline-neutral">&nbsp;</span>
968
- <span class="cline-any cline-yes">2x</span>
969
- <span class="cline-any cline-neutral">&nbsp;</span>
970
- <span class="cline-any cline-neutral">&nbsp;</span>
971
- <span class="cline-any cline-neutral">&nbsp;</span>
972
- <span class="cline-any cline-neutral">&nbsp;</span>
973
- <span class="cline-any cline-neutral">&nbsp;</span>
974
- <span class="cline-any cline-neutral">&nbsp;</span>
975
- <span class="cline-any cline-neutral">&nbsp;</span>
976
- <span class="cline-any cline-neutral">&nbsp;</span>
977
- <span class="cline-any cline-neutral">&nbsp;</span>
978
- <span class="cline-any cline-yes">25x</span>
979
- <span class="cline-any cline-neutral">&nbsp;</span>
980
- <span class="cline-any cline-neutral">&nbsp;</span>
981
- <span class="cline-any cline-neutral">&nbsp;</span>
982
- <span class="cline-any cline-yes">12x</span>
983
- <span class="cline-any cline-yes">12x</span>
984
- <span class="cline-any cline-neutral">&nbsp;</span>
985
- <span class="cline-any cline-neutral">&nbsp;</span>
986
- <span class="cline-any cline-neutral">&nbsp;</span>
987
- <span class="cline-any cline-neutral">&nbsp;</span>
988
- <span class="cline-any cline-neutral">&nbsp;</span>
989
- <span class="cline-any cline-neutral">&nbsp;</span>
990
- <span class="cline-any cline-neutral">&nbsp;</span>
991
- <span class="cline-any cline-neutral">&nbsp;</span>
992
- <span class="cline-any cline-neutral">&nbsp;</span>
993
- <span class="cline-any cline-yes">12x</span>
994
- <span class="cline-any cline-yes">3x</span>
995
- <span class="cline-any cline-neutral">&nbsp;</span>
996
- <span class="cline-any cline-yes">12x</span>
997
- <span class="cline-any cline-neutral">&nbsp;</span>
998
- <span class="cline-any cline-neutral">&nbsp;</span>
999
- <span class="cline-any cline-neutral">&nbsp;</span>
1000
- <span class="cline-any cline-yes">11x</span>
1001
- <span class="cline-any cline-neutral">&nbsp;</span>
1002
- <span class="cline-any cline-yes">1x</span>
1003
- <span class="cline-any cline-neutral">&nbsp;</span>
1004
- <span class="cline-any cline-neutral">&nbsp;</span>
1005
- <span class="cline-any cline-neutral">&nbsp;</span>
1006
- <span class="cline-any cline-yes">1x</span>
1007
- <span class="cline-any cline-neutral">&nbsp;</span>
1008
- <span class="cline-any cline-neutral">&nbsp;</span>
1009
- <span class="cline-any cline-neutral">&nbsp;</span>
1010
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
1011
- Injectable,
1012
- Logger,
1013
- BadRequestException,
1014
- NotFoundException,
1015
- } from '@nestjs/common';
1016
- import { Eta } from 'eta';
1017
- import * as fs from 'fs/promises';
1018
- import { glob } from 'glob';
1019
- import * as path from 'path';
1020
- import { exec, ExecOptions } from 'child_process';
1021
- import { InjectRepository } from '@nestjs/typeorm';
1022
- import { ContextTemplate } from '../core-entities';
1023
- import { Repository } from 'typeorm';
1024
- import { TemplateType } from '../core-entities/context-template.entity';
1025
- import { Trace } from '../utils';
1026
- &nbsp;
1027
- @Injectable()
1028
- export class ContextGenerationService {
1029
- private readonly logger = new Logger(ContextGenerationService.name);
1030
- private eta: Eta;
1031
- private projectRoot: string =
1032
- process.env.REPOBURG_PROJECT_PATH || process.cwd();
1033
- private templateHelpers: { [key: string]: (...args: any[]) =&gt; Promise&lt;any&gt; };
1034
- private partialCache = new Map&lt;string, ContextTemplate | null&gt;();
1035
- &nbsp;
1036
- constructor(
1037
- @InjectRepository(ContextTemplate)
1038
- private contextTemplatesRepository: Repository&lt;ContextTemplate&gt;,
1039
- ) {
1040
- this.eta = new Eta({
1041
- views: this.projectRoot, // Using 'views' path as a security measure for includes/layouts
1042
- useWith: true, // Allows using properties of data object as local variables
1043
- });
1044
- &nbsp;
1045
- this.templateHelpers = {
1046
- readFile: this.secureReadFile.bind(this),
1047
- readDir: this.secureReadDir.bind(this),
1048
- glob: this.secureGlob.bind(this),
1049
- tree: this.secureTree.bind(this),
1050
- ripGrep: this.secureRipGrep.bind(this),
1051
- gitDiff: this.secureGitDiff.bind(this),
1052
- runCommand: this.runCommand.bind(this),
1053
- include: this.include.bind(this),
1054
- fetchFileContent: this.fetchFileContent.bind(this),
1055
- };
1056
- }
1057
- &nbsp;
1058
- private execPromise(
1059
- command: string,
1060
- options: ExecOptions,
1061
- ): Promise&lt;{ stdout: string; stderr: string }&gt; {
1062
- return new Promise((resolve, reject) =&gt; {
1063
- exec(command, options, (error, stdout, stderr) =&gt; {
1064
- const stdoutStr = stdout.toString();
1065
- const stderrStr = stderr.toString();
1066
- if (error) {
1067
- // Attach stdout and stderr to the error object for more context in catch block.
1068
- // This mirrors the behavior of the promisified exec.
1069
- error['stdout'] = stdoutStr;
1070
- error['stderr'] = stderrStr;
1071
- reject(error);
1072
- return;
1073
- }
1074
- resolve({ stdout: stdoutStr, stderr: stderrStr });
1075
- });
1076
- });
1077
- }
1078
- &nbsp;
1079
- /**
1080
- * Gets ripgrep ignore flags based on the presence of .rgignore file.
1081
- * If .rgignore exists, it overrides .gitignore behavior.
1082
- * Otherwise, ripgrep uses its default .gitignore/.ignore behavior.
1083
- */
1084
- @Trace()
1085
- public async getRipGrepIgnoreFlags(): Promise&lt;string&gt; {
1086
- const rgignorePath = path.join(this.projectRoot, '.rgignore');
1087
- try {
1088
- await fs.access(rgignorePath, fs.constants.R_OK);
1089
- <span class="cstat-no" title="statement not covered" > this.logger.log('.rgignore found, using it instead of .gitignore');</span>
1090
- <span class="cstat-no" title="statement not covered" > return '--ignore-file .rgignore --no-ignore-vcs';</span>
1091
- } catch (error) {
1092
- <span class="missing-if-branch" title="if path not taken" >I</span>if (error.code === 'ENOENT') {
1093
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1094
- '.rgignore not found, using default .gitignore behavior',
1095
- );
1096
- <span class="cstat-no" title="statement not covered" > return ''; </span>// Empty string means use default gitignore behavior
1097
- }
1098
- this.logger.error(`Error checking for .rgignore: ${error.message}`);
1099
- return '';
1100
- }
1101
- }
1102
- &nbsp;
1103
- /**
1104
- * Helper function to resolve the command path.
1105
- * Tries to find the executable in the local `bin` directory first.
1106
- * The path is resolved relative to this file's location, which works for both `src` and `dist`.
1107
- */
1108
- @Trace()
1109
- public async getCommandPath(commandName: string): Promise&lt;string&gt; {
1110
- // Check if running from the compiled 'dist' directory
1111
- const inDist = __dirname.includes(path.join('backend', 'dist'));
1112
- &nbsp;
1113
- // In 'dist', bin is a sibling: `dist/context-generation` -&gt; `dist/bin`
1114
- // In 'src', bin is in the parent: `src/context-generation` -&gt; `../bin`
1115
- const relativePath = inDist
1116
- ? <span class="branch-0 cbranch-no" title="branch not covered" >path.join(__dirname, '..', 'bin', commandName)</span>
1117
- : path.join(__dirname, '..', '..', 'src', 'bin', commandName);
1118
- &nbsp;
1119
- const bundledPath = path.resolve(relativePath);
1120
- &nbsp;
1121
- try {
1122
- await fs.access(bundledPath, fs.constants.X_OK);
1123
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1124
- `Using bundled executable for '${commandName}' at: ${bundledPath}`,
1125
- );
1126
- // Return the absolute, quoted path to be safe.
1127
- <span class="cstat-no" title="statement not covered" > return `'${bundledPath}'`;</span>
1128
- } catch (error) {
1129
- this.logger.warn(
1130
- `Bundled executable for '${commandName}' not found or not executable at '${bundledPath}'. Falling back to system PATH.`,
1131
- );
1132
- return commandName; // Fallback to system command
1133
- }
1134
- }
1135
- &nbsp;
1136
- /**
1137
- * Resolves a given path against the project root and ensures it does not traverse outside.
1138
- * @param unsafePath The user-provided path.
1139
- * @returns A validated, absolute path.
1140
- * @throws BadRequestException if path traversal is detected.
1141
- */
1142
- private resolveAndValidatePath(unsafePath: string): string {
1143
- const normalizedPath = path.normalize(unsafePath);
1144
- <span class="missing-if-branch" title="if path not taken" >I</span>if (path.isAbsolute(normalizedPath)) {
1145
- <span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
1146
- `Absolute paths are not allowed: ${unsafePath}`,
1147
- );
1148
- }
1149
- const resolvedPath = path.resolve(this.projectRoot, normalizedPath);
1150
- &nbsp;
1151
- if (!resolvedPath.startsWith(this.projectRoot)) {
1152
- this.logger.warn(`Path traversal attempt detected: ${unsafePath}`);
1153
- throw new BadRequestException(
1154
- `Path traversal is not allowed. Access denied for path: ${unsafePath}`,
1155
- );
1156
- }
1157
- return resolvedPath;
1158
- }
1159
- &nbsp;
1160
- @Trace()
1161
- public async secureReadFile(filePath: string): Promise&lt;string&gt; {
1162
- const safePath = this.resolveAndValidatePath(filePath);
1163
- try {
1164
- const stats = await fs.lstat(safePath);
1165
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!stats.isFile()) {
1166
- <span class="cstat-no" title="statement not covered" > this.logger.warn(`Path is not a file: ${safePath}`);</span>
1167
- <span class="cstat-no" title="statement not covered" > return `Error: '${filePath}' is not a file`;</span>
1168
- }
1169
- const content = await fs.readFile(safePath, 'utf8');
1170
- const lines = content.split('\n');
1171
- const contentWithLineNumbers = lines
1172
- .map((line, index) =&gt; `${index + 1}:${line}`)
1173
- .join('\n');
1174
- return `// File: ${filePath}\n\`\`\`\n${contentWithLineNumbers}\n\`\`\``;
1175
- } catch (error) {
1176
- if (error.code === 'ENOENT') {
1177
- this.logger.warn(`File not found in template render: ${safePath}`);
1178
- // Return a user-friendly error message within the template
1179
- return `Error: File not found at '${filePath}'`;
1180
- }
1181
- <span class="cstat-no" title="statement not covered" > this.logger.error(`Error reading file ${safePath}: ${error.message}`);</span>
1182
- // Re-throwing will cause template rendering to fail, which is appropriate here.
1183
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1184
- }
1185
- }
1186
- &nbsp;
1187
- @Trace()
1188
- public <span class="fstat-no" title="function not covered" >async </span>fetchFileContent(filePath: string): Promise&lt;string&gt; {
1189
- const safePath = <span class="cstat-no" title="statement not covered" >this.resolveAndValidatePath(filePath);</span>
1190
- <span class="cstat-no" title="statement not covered" > try {</span>
1191
- const stats = <span class="cstat-no" title="statement not covered" >await fs.lstat(safePath);</span>
1192
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!stats.isFile()) {</span>
1193
- <span class="cstat-no" title="statement not covered" > this.logger.warn(`Path is not a file: ${safePath}`);</span>
1194
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(`'${filePath}' is not a file`);</span>
1195
- }
1196
- const content = <span class="cstat-no" title="statement not covered" >await fs.readFile(safePath, 'utf8');</span>
1197
- <span class="cstat-no" title="statement not covered" > return content;</span>
1198
- } catch (error) {
1199
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.code === 'ENOENT') {</span>
1200
- <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1201
- `File not found when fetching raw content: ${safePath}`,
1202
- );
1203
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(`File not found: ${filePath}`);</span>
1204
- }
1205
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1206
- `Error fetching raw file content from ${safePath}: ${error.message}`,
1207
- );
1208
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1209
- }
1210
- }
1211
- &nbsp;
1212
- private <span class="fstat-no" title="function not covered" >async </span>secureReadDir(dirPath: string): Promise&lt;string[]&gt; {
1213
- const safePath = <span class="cstat-no" title="statement not covered" >this.resolveAndValidatePath(dirPath);</span>
1214
- <span class="cstat-no" title="statement not covered" > try {</span>
1215
- const entries = <span class="cstat-no" title="statement not covered" >await fs.readdir(safePath, { withFileTypes: true });</span>
1216
- // Return file names within the directory
1217
- <span class="cstat-no" title="statement not covered" > return entries.filter(<span class="fstat-no" title="function not covered" >(e</span>) =&gt; <span class="cstat-no" title="statement not covered" >e.isFile())</span>.map(<span class="fstat-no" title="function not covered" >(e</span>ntry) =&gt; <span class="cstat-no" title="statement not covered" >entry.name)</span>;</span>
1218
- } catch (error) {
1219
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.code === 'ENOENT') {</span>
1220
- <span class="cstat-no" title="statement not covered" > this.logger.warn(`Directory not found in template render: ${safePath}`);</span>
1221
- <span class="cstat-no" title="statement not covered" > return [`Error: Directory not found at '${dirPath}'`];</span>
1222
- }
1223
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1224
- `Error reading directory ${safePath}: ${error.message}`,
1225
- );
1226
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1227
- }
1228
- }
1229
- &nbsp;
1230
- @Trace()
1231
- public async secureGlob(pattern: string): Promise&lt;string[]&gt; {
1232
- if (path.isAbsolute(pattern)) {
1233
- throw new BadRequestException(
1234
- `Absolute paths are not allowed in glob patterns: ${pattern}`,
1235
- );
1236
- }
1237
- &nbsp;
1238
- try {
1239
- const files: string[] = await glob(pattern, {
1240
- cwd: this.projectRoot,
1241
- nodir: true, // we only want files
1242
- absolute: false, // return paths relative to cwd
1243
- });
1244
- return files;
1245
- } catch (error) {
1246
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1247
- `Error resolving glob pattern "${pattern}": ${error.message}`,
1248
- );
1249
- <span class="cstat-no" title="statement not covered" > throw error;</span>
1250
- }
1251
- }
1252
- &nbsp;
1253
- @Trace()
1254
- public async secureTree(args?: string): Promise&lt;string&gt; {
1255
- const treeCommand = await this.getCommandPath('tree');
1256
- const command = `${treeCommand} ${args || ''}`;
1257
- try {
1258
- this.logger.log(`Executing command: ${command}`);
1259
- const { stdout } = await this.execPromise(command, {
1260
- cwd: this.projectRoot,
1261
- maxBuffer: 32 * 1024 * 1024,
1262
- timeout: 3000,
1263
- });
1264
- return stdout;
1265
- } catch (error) {
1266
- if (error.signal === 'SIGTERM') {
1267
- this.logger.warn(`'tree' command timed out after 3 seconds.`);
1268
- return `'tree' command timed out after 3 seconds.`;
1269
- }
1270
- if (error.message.includes('command not found')) {
1271
- this.logger.warn(
1272
- `'tree' command not found. Please ensure it is installed and in your PATH or bundled in 'backend/bin'.`,
1273
- );
1274
- return `'tree' command not found. Please ensure it is installed and in your PATH or bundled in 'backend/bin'.`;
1275
- }
1276
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1277
- `Error executing tree command: ${error.message}`,
1278
- error,
1279
- );
1280
- <span class="cstat-no" title="statement not covered" > return `Error executing tree command: ${error.stderr || error.message}`;</span>
1281
- }
1282
- }
1283
- &nbsp;
1284
- @Trace()
1285
- public async secureRipGrep(args?: string): Promise&lt;string&gt; {
1286
- const rgCommand = await this.getCommandPath('rg');
1287
- const ignoreFlags = await this.getRipGrepIgnoreFlags();
1288
- const command = `${rgCommand} ${ignoreFlags} ${args || <span class="branch-1 cbranch-no" title="branch not covered" >''}</span>`;
1289
- try {
1290
- this.logger.log(`Executing command: ${command}`);
1291
- const { stdout } = await this.execPromise(command, {
1292
- cwd: this.projectRoot,
1293
- maxBuffer: 256 * 1024 * 1024,
1294
- timeout: 3000,
1295
- });
1296
- return stdout;
1297
- } catch (error) {
1298
- <span class="missing-if-branch" title="if path not taken" >I</span>if (error.signal === 'SIGTERM') {
1299
- <span class="cstat-no" title="statement not covered" > this.logger.warn(`'rg' command timed out after 3 seconds.`);</span>
1300
- <span class="cstat-no" title="statement not covered" > return `'rg' command timed out after 3 seconds.`;</span>
1301
- }
1302
- if (error.code === 1) {
1303
- // Exit code 1 means no matches were found, which is not a failure.
1304
- return error.stdout; // Return stdout, which is likely empty.
1305
- }
1306
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.message.includes('command not found')) {</span>
1307
- <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1308
- `'rg' (ripgrep) command not found. Please ensure it is installed and in your PATH or bundled in 'backend/bin'.`,
1309
- );
1310
- <span class="cstat-no" title="statement not covered" > return `'rg' (ripgrep) command not found. Please ensure it is installed and in your PATH or bundled in 'backend/bin'.`;</span>
1311
- }
1312
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1313
- `Error executing ripgrep command: ${error.message}`,
1314
- error,
1315
- );
1316
- <span class="cstat-no" title="statement not covered" > return `Error executing ripgrep command: ${</span>
1317
- error.stderr || error.message
1318
- }`;
1319
- }
1320
- }
1321
- &nbsp;
1322
- @Trace()
1323
- public async secureGitDiff(args?: string): Promise&lt;string&gt; {
1324
- <span class="missing-if-branch" title="if path not taken" >I</span>if (args &amp;&amp; /[`$&amp;|;()&lt;&gt;*]/.test(args)) {
1325
- <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1326
- `Potential command injection attempt in gitDiff args: ${args}`,
1327
- );
1328
- <span class="cstat-no" title="statement not covered" > return `Error: Invalid characters in gitDiff arguments.`;</span>
1329
- }
1330
- const command = `git --no-pager diff ${args || <span class="branch-1 cbranch-no" title="branch not covered" >''}</span>`;
1331
- try {
1332
- this.logger.log(`Executing command: ${command}`);
1333
- const { stdout } = await this.execPromise(command, {
1334
- cwd: this.projectRoot,
1335
- maxBuffer: 256 * 1024 * 1024,
1336
- timeout: 30000,
1337
- });
1338
- return stdout;
1339
- } catch (error) {
1340
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.signal === 'SIGTERM') {</span>
1341
- <span class="cstat-no" title="statement not covered" > this.logger.warn(`'git diff' command timed out after 30 seconds.`);</span>
1342
- <span class="cstat-no" title="statement not covered" > return `'git diff' command timed out after 30 seconds.`;</span>
1343
- }
1344
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.message.includes('command not found')) {</span>
1345
- <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1346
- `'git' command not found. Please ensure it is installed and in your PATH.`,
1347
- );
1348
- <span class="cstat-no" title="statement not covered" > return `'git' command not found. Please ensure it is installed and in your PATH.`;</span>
1349
- }
1350
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1351
- `Error executing git diff command: ${error.message}`,
1352
- error,
1353
- );
1354
- <span class="cstat-no" title="statement not covered" > return `Error executing git diff command: ${</span>
1355
- error.stderr || error.message
1356
- }`;
1357
- }
1358
- }
1359
- &nbsp;
1360
- @Trace()
1361
- public <span class="fstat-no" title="function not covered" >async </span>runCommand(commandString: string): Promise&lt;string&gt; {
1362
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!commandString) {</span>
1363
- <span class="cstat-no" title="statement not covered" > return 'Error: command cannot be empty.';</span>
1364
- }
1365
- &nbsp;
1366
- <span class="cstat-no" title="statement not covered" > try {</span>
1367
- <span class="cstat-no" title="statement not covered" > this.logger.log(`Executing command from template: ${commandString}`);</span>
1368
- const { stdout, stderr } = <span class="cstat-no" title="statement not covered" >await this.execPromise(commandString, {</span>
1369
- cwd: this.projectRoot,
1370
- maxBuffer: 256 * 1024 * 1024, // 256MB buffer
1371
- timeout: 30000, // 30 second timeout
1372
- });
1373
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (stderr) {</span>
1374
- <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1375
- `Command "${commandString}" produced stderr: ${stderr}`,
1376
- );
1377
- <span class="cstat-no" title="statement not covered" > return `STDOUT:\n${stdout}\n\nSTDERR:\n${stderr}`;</span>
1378
- }
1379
- <span class="cstat-no" title="statement not covered" > return stdout;</span>
1380
- } catch (error) {
1381
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (error.signal === 'SIGTERM') {</span>
1382
- <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1383
- `Command "${commandString}" timed out after 30 seconds.`,
1384
- );
1385
- <span class="cstat-no" title="statement not covered" > return `Error: Command "${commandString}" timed out after 30 seconds.`;</span>
1386
- }
1387
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1388
- `Error executing command "${commandString}": ${error.message}`,
1389
- error,
1390
- );
1391
- <span class="cstat-no" title="statement not covered" > return `Error executing command "${commandString}": ${</span>
1392
- error.stderr || error.message
1393
- }`;
1394
- }
1395
- }
1396
- &nbsp;
1397
- private async include(templateName: string, data: any): Promise&lt;string&gt; {
1398
- // Recursion check
1399
- if (data.__included_partials.has(templateName)) {
1400
- this.logger.error(
1401
- `Recursive inclusion of partial "${templateName}" detected.`,
1402
- );
1403
- return `[Error: Recursive inclusion of partial "${templateName}" detected]`;
1404
- }
1405
- &nbsp;
1406
- let partial = this.partialCache.get(templateName);
1407
- &nbsp;
1408
- if (partial === undefined) {
1409
- this.logger.log(
1410
- `Cache miss for partial: "${templateName}". Fetching from DB.`,
1411
- );
1412
- partial = await this.contextTemplatesRepository.findOneBy({
1413
- template_name: templateName,
1414
- template_type: TemplateType.PARTIAL,
1415
- });
1416
- this.partialCache.set(templateName, partial || <span class="branch-1 cbranch-no" title="branch not covered" >null)</span>;
1417
- } else <span class="missing-if-branch" title="else path not taken" >E</span>{
1418
- <span class="cstat-no" title="statement not covered" > this.logger.log(`Cache hit for partial: "${templateName}".`);</span>
1419
- }
1420
- &nbsp;
1421
- <span class="missing-if-branch" title="if path not taken" >I</span>if (!partial) {
1422
- <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1423
- `Partial template "${templateName}" not found or is not of type 'partial'.`,
1424
- );
1425
- <span class="cstat-no" title="statement not covered" > return `[Error: Partial template "${templateName}" not found]`;</span>
1426
- }
1427
- &nbsp;
1428
- // Add to the set for the duration of this sub-render
1429
- data.__included_partials.add(templateName);
1430
- &nbsp;
1431
- // Render the partial with the same data context
1432
- const result = await this.eta.renderStringAsync(
1433
- partial.template_content,
1434
- data,
1435
- );
1436
- &nbsp;
1437
- // Backtrack: remove from the set after rendering is complete
1438
- data.__included_partials.delete(templateName);
1439
- &nbsp;
1440
- return result;
1441
- }
1442
- &nbsp;
1443
- /**
1444
- * Renders a context string from an Eta template and provided data.
1445
- * @param templateContent The Eta template string.
1446
- * @param data An object containing data to be injected into the template.
1447
- * @returns The rendered string.
1448
- */
1449
- @Trace()
1450
- public async render(
1451
- templateContent: string,
1452
- data: object = {},
1453
- ): Promise&lt;string&gt; {
1454
- try {
1455
- const renderData = {
1456
- ...data,
1457
- ...this.templateHelpers,
1458
- // Add a property to the data object to track included partials and prevent recursion
1459
- __included_partials: new Set&lt;string&gt;(),
1460
- };
1461
- &nbsp;
1462
- // The `include` helper expects the data object as its second argument.
1463
- // The template author must call it like: &lt;%~ await it.include('my-partial', it) %&gt;
1464
- // We are binding `this` to the `include` function, so it has access to the repository and cache.
1465
- renderData['include'] = (templateName: string) =&gt;
1466
- this.include(templateName, renderData);
1467
- &nbsp;
1468
- const result = await this.eta.renderStringAsync(
1469
- templateContent,
1470
- renderData,
1471
- );
1472
- return result;
1473
- } catch (error) {
1474
- this.logger.error(
1475
- `Error rendering Eta template: ${error.message}`,
1476
- error.stack,
1477
- );
1478
- throw new Error(`Template rendering failed: ${error.message}`);
1479
- }
1480
- }
1481
- }
1482
- &nbsp;</pre></td></tr></table></pre>
1483
-
1484
- <div class='push'></div><!-- for sticky footer -->
1485
- </div><!-- /wrapper -->
1486
- <div class='footer quiet pad2 space-top1 center small'>
1487
- Code coverage generated by
1488
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1489
- at 2026-05-09T01:03:45.353Z
1490
- </div>
1491
- <script src="../../prettify.js"></script>
1492
- <script>
1493
- window.onload = function () {
1494
- prettyPrint();
1495
- };
1496
- </script>
1497
- <script src="../../sorter.js"></script>
1498
- <script src="../../block-navigation.js"></script>
1499
- </body>
1500
- </html>
1501
-