repoburg 1.3.147 → 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 (503) hide show
  1. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.d.ts +1 -1
  2. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js +0 -3
  3. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js.map +1 -1
  4. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  5. package/package.json +1 -1
  6. package/.claude/settings.local.json +0 -7
  7. package/.playwright-mcp/console-2026-05-12T09-54-31-560Z.log +0 -13
  8. package/.playwright-mcp/console-2026-05-12T10-04-14-892Z.log +0 -13
  9. package/.playwright-mcp/console-2026-05-12T10-50-32-398Z.log +0 -14
  10. package/.playwright-mcp/console-2026-05-12T12-50-09-889Z.log +0 -13
  11. package/.playwright-mcp/console-2026-05-12T12-58-49-817Z.log +0 -60
  12. package/.playwright-mcp/console-2026-05-13T18-41-50-654Z.log +0 -13
  13. package/.playwright-mcp/console-2026-05-13T18-54-58-000Z.log +0 -13
  14. package/.playwright-mcp/console-2026-05-13T19-13-30-875Z.log +0 -95
  15. package/.playwright-mcp/console-2026-05-13T20-09-13-456Z.log +0 -17
  16. package/.playwright-mcp/console-2026-05-13T20-21-01-662Z.log +0 -13
  17. package/.playwright-mcp/console-2026-05-13T20-22-00-038Z.log +0 -15
  18. package/.playwright-mcp/console-2026-05-13T20-26-26-665Z.log +0 -28
  19. package/.playwright-mcp/console-2026-05-13T20-35-49-544Z.log +0 -26
  20. package/.playwright-mcp/console-2026-05-13T20-38-10-958Z.log +0 -676
  21. package/.playwright-mcp/console-2026-05-14T21-27-06-074Z.log +0 -69
  22. package/.playwright-mcp/console-2026-05-14T22-13-07-470Z.log +0 -101
  23. package/.playwright-mcp/console-2026-05-14T23-58-12-858Z.log +0 -28
  24. package/.playwright-mcp/console-2026-05-15T00-15-00-760Z.log +0 -81
  25. package/.playwright-mcp/page-2026-05-12T09-54-32-920Z.yml +0 -223
  26. package/.playwright-mcp/page-2026-05-12T09-54-42-067Z.yml +0 -190
  27. package/.playwright-mcp/page-2026-05-12T09-55-12-019Z.yml +0 -389
  28. package/.playwright-mcp/page-2026-05-12T09-55-49-065Z.yml +0 -428
  29. package/.playwright-mcp/page-2026-05-12T09-56-06-607Z.yml +0 -389
  30. package/.playwright-mcp/page-2026-05-12T09-56-23-371Z.yml +0 -196
  31. package/.playwright-mcp/page-2026-05-12T09-56-55-792Z.yml +0 -389
  32. package/.playwright-mcp/page-2026-05-12T10-04-15-716Z.yml +0 -164
  33. package/.playwright-mcp/page-2026-05-12T10-04-43-994Z.yml +0 -190
  34. package/.playwright-mcp/page-2026-05-12T10-05-04-616Z.yml +0 -389
  35. package/.playwright-mcp/page-2026-05-12T10-05-27-643Z.yml +0 -428
  36. package/.playwright-mcp/page-2026-05-12T10-05-47-851Z.yml +0 -389
  37. package/.playwright-mcp/page-2026-05-12T10-06-13-429Z.yml +0 -196
  38. package/.playwright-mcp/page-2026-05-12T10-06-58-147Z.yml +0 -389
  39. package/.playwright-mcp/page-2026-05-12T10-08-20-216Z.yml +0 -428
  40. package/.playwright-mcp/page-2026-05-12T10-08-38-177Z.yml +0 -389
  41. package/.playwright-mcp/page-2026-05-12T10-09-01-851Z.yml +0 -196
  42. package/.playwright-mcp/page-2026-05-12T10-09-24-888Z.yml +0 -389
  43. package/.playwright-mcp/page-2026-05-12T10-50-33-049Z.yml +0 -212
  44. package/.playwright-mcp/page-2026-05-12T10-50-48-496Z.yml +0 -196
  45. package/.playwright-mcp/page-2026-05-12T10-51-51-308Z.yml +0 -196
  46. package/.playwright-mcp/page-2026-05-12T10-52-07-379Z.yml +0 -196
  47. package/.playwright-mcp/page-2026-05-12T12-50-10-589Z.yml +0 -143
  48. package/.playwright-mcp/page-2026-05-12T12-50-25-461Z.yml +0 -196
  49. package/.playwright-mcp/page-2026-05-12T12-51-11-190Z.yml +0 -394
  50. package/.playwright-mcp/page-2026-05-12T12-52-21-138Z.yml +0 -524
  51. package/.playwright-mcp/page-2026-05-12T12-53-42-423Z.yml +0 -431
  52. package/.playwright-mcp/page-2026-05-12T12-54-18-549Z.yml +0 -196
  53. package/.playwright-mcp/page-2026-05-12T12-54-26-818Z.yml +0 -390
  54. package/.playwright-mcp/page-2026-05-12T12-55-32-697Z.yml +0 -520
  55. package/.playwright-mcp/page-2026-05-12T12-58-50-450Z.yml +0 -164
  56. package/.playwright-mcp/page-2026-05-12T12-59-12-954Z.yml +0 -196
  57. package/.playwright-mcp/page-2026-05-12T12-59-38-479Z.yml +0 -394
  58. package/.playwright-mcp/page-2026-05-12T13-01-17-580Z.yml +0 -524
  59. package/.playwright-mcp/page-2026-05-12T13-01-58-447Z.yml +0 -271
  60. package/.playwright-mcp/page-2026-05-12T13-03-12-109Z.yml +0 -394
  61. package/.playwright-mcp/page-2026-05-13T18-41-51-436Z.yml +0 -159
  62. package/.playwright-mcp/page-2026-05-13T18-42-27-482Z.yml +0 -4814
  63. package/.playwright-mcp/page-2026-05-13T18-54-58-644Z.yml +0 -154
  64. package/.playwright-mcp/page-2026-05-13T18-56-11-217Z.yml +0 -1560
  65. package/.playwright-mcp/page-2026-05-13T18-56-32-205Z.yml +0 -1560
  66. package/.playwright-mcp/page-2026-05-13T19-13-31-457Z.yml +0 -164
  67. package/.playwright-mcp/page-2026-05-13T19-14-26-248Z.yml +0 -1560
  68. package/.playwright-mcp/page-2026-05-13T19-15-02-355Z.yml +0 -1560
  69. package/.playwright-mcp/page-2026-05-13T20-09-14-478Z.yml +0 -149
  70. package/.playwright-mcp/page-2026-05-13T20-10-49-292Z.yml +0 -4814
  71. package/.playwright-mcp/page-2026-05-13T20-21-02-852Z.yml +0 -143
  72. package/.playwright-mcp/page-2026-05-13T20-22-01-084Z.yml +0 -143
  73. package/.playwright-mcp/page-2026-05-13T20-22-09-334Z.yml +0 -1561
  74. package/.playwright-mcp/page-2026-05-13T20-26-27-690Z.yml +0 -143
  75. package/.playwright-mcp/page-2026-05-13T20-26-53-324Z.yml +0 -1561
  76. package/.playwright-mcp/page-2026-05-13T20-27-35-395Z.yml +0 -1561
  77. package/.playwright-mcp/page-2026-05-13T20-35-50-708Z.yml +0 -149
  78. package/.playwright-mcp/page-2026-05-13T20-37-41-379Z.yml +0 -0
  79. package/.playwright-mcp/page-2026-05-13T20-38-12-049Z.yml +0 -149
  80. package/.playwright-mcp/page-2026-05-13T20-38-19-708Z.yml +0 -1561
  81. package/.playwright-mcp/page-2026-05-14T21-27-07-278Z.yml +0 -164
  82. package/.playwright-mcp/page-2026-05-14T22-13-07-628Z.yml +0 -5
  83. package/.playwright-mcp/page-2026-05-14T22-13-27-676Z.yml +0 -1561
  84. package/.playwright-mcp/page-2026-05-14T23-58-13-064Z.yml +0 -3
  85. package/.playwright-mcp/page-2026-05-14T23-58-33-500Z.yml +0 -1561
  86. package/.playwright-mcp/page-2026-05-15T00-15-00-945Z.yml +0 -3
  87. package/.run/backend _ build.run.xml +0 -12
  88. package/.run/backend _ lint.run.xml +0 -12
  89. package/.run/backend _ test.run.xml +0 -12
  90. package/.run/frontend _ build.run.xml +0 -12
  91. package/.run/frontend _ lint_fix.run.xml +0 -12
  92. package/CODEMAP.md +0 -53
  93. package/backend/.repoburg/hooks/README.md +0 -53
  94. package/backend/.repoburg/hooks/eslint-hook.ts +0 -46
  95. package/backend/.repoburg/hooks/example-hook.ts +0 -62
  96. package/backend/CODEMAP.md +0 -48
  97. package/backend/README.md +0 -3
  98. package/backend/coverage/clover.xml +0 -12003
  99. package/backend/coverage/coverage-final.json +0 -313
  100. package/backend/coverage/lcov-report/base.css +0 -224
  101. package/backend/coverage/lcov-report/block-navigation.js +0 -87
  102. package/backend/coverage/lcov-report/favicon.png +0 -0
  103. package/backend/coverage/lcov-report/index.html +0 -1301
  104. package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +0 -116
  105. package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +0 -445
  106. package/backend/coverage/lcov-report/packages/gemini-core/index.html +0 -116
  107. package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +0 -127
  108. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +0 -193
  109. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +0 -832
  110. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +0 -206
  111. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +0 -469
  112. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +0 -1705
  113. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +0 -790
  114. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +0 -454
  115. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +0 -685
  116. package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +0 -307
  117. package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +0 -146
  118. package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +0 -151
  119. package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +0 -172
  120. package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +0 -490
  121. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +0 -1237
  122. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +0 -139
  123. package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +0 -176
  124. package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +0 -409
  125. package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +0 -181
  126. package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +0 -116
  127. package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +0 -187
  128. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +0 -229
  129. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +0 -634
  130. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +0 -373
  131. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +0 -191
  132. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +0 -124
  133. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +0 -835
  134. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +0 -211
  135. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +0 -421
  136. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +0 -191
  137. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +0 -592
  138. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +0 -388
  139. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +0 -877
  140. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +0 -112
  141. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +0 -502
  142. package/backend/coverage/lcov-report/packages/tokenpatch/index.html +0 -161
  143. package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +0 -415
  144. package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +0 -139
  145. package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +0 -1249
  146. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +0 -131
  147. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +0 -187
  148. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +0 -193
  149. package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +0 -178
  150. package/backend/coverage/lcov-report/prettify.css +0 -1
  151. package/backend/coverage/lcov-report/prettify.js +0 -2
  152. package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  153. package/backend/coverage/lcov-report/sorter.js +0 -210
  154. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +0 -1549
  155. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +0 -904
  156. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +0 -175
  157. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +0 -1534
  158. package/backend/coverage/lcov-report/src/ai-actions/index.html +0 -161
  159. package/backend/coverage/lcov-report/src/app.controller.ts.html +0 -151
  160. package/backend/coverage/lcov-report/src/app.module.ts.html +0 -451
  161. package/backend/coverage/lcov-report/src/app.service.ts.html +0 -163
  162. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +0 -1609
  163. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +0 -136
  164. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +0 -2281
  165. package/backend/coverage/lcov-report/src/application-state/dto/index.html +0 -416
  166. package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +0 -109
  167. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +0 -118
  168. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +0 -109
  169. package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +0 -124
  170. package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +0 -121
  171. package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +0 -124
  172. package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +0 -115
  173. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +0 -115
  174. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +0 -127
  175. package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +0 -118
  176. package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +0 -109
  177. package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +0 -139
  178. package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +0 -109
  179. package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +0 -109
  180. package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +0 -118
  181. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +0 -124
  182. package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +0 -118
  183. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +0 -109
  184. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +0 -124
  185. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +0 -118
  186. package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +0 -109
  187. package/backend/coverage/lcov-report/src/application-state/index.html +0 -146
  188. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +0 -1297
  189. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +0 -712
  190. package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +0 -379
  191. package/backend/coverage/lcov-report/src/common/cache/index.html +0 -146
  192. package/backend/coverage/lcov-report/src/common/common.module.ts.html +0 -121
  193. package/backend/coverage/lcov-report/src/common/index.html +0 -116
  194. package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +0 -337
  195. package/backend/coverage/lcov-report/src/common/interceptors/index.html +0 -116
  196. package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +0 -265
  197. package/backend/coverage/lcov-report/src/common/middleware/index.html +0 -116
  198. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +0 -118
  199. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +0 -1501
  200. package/backend/coverage/lcov-report/src/context-generation/index.html +0 -131
  201. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +0 -427
  202. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +0 -142
  203. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +0 -442
  204. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +0 -211
  205. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +0 -116
  206. package/backend/coverage/lcov-report/src/context-snippets/index.html +0 -146
  207. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +0 -724
  208. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +0 -142
  209. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +0 -1015
  210. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +0 -511
  211. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +0 -116
  212. package/backend/coverage/lcov-report/src/context-templates/index.html +0 -146
  213. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +0 -613
  214. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +0 -124
  215. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +0 -211
  216. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +0 -190
  217. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +0 -439
  218. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +0 -205
  219. package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +0 -241
  220. package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +0 -553
  221. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +0 -208
  222. package/backend/coverage/lcov-report/src/core-entities/index.html +0 -371
  223. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +0 -136
  224. package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +0 -388
  225. package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +0 -256
  226. package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +0 -256
  227. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +0 -181
  228. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +0 -745
  229. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +0 -688
  230. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +0 -349
  231. package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +0 -235
  232. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +0 -442
  233. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +0 -124
  234. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +0 -304
  235. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +0 -205
  236. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +0 -116
  237. package/backend/coverage/lcov-report/src/custom-snippets/index.html +0 -146
  238. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +0 -463
  239. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +0 -124
  240. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +0 -310
  241. package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +0 -244
  242. package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +0 -116
  243. package/backend/coverage/lcov-report/src/custom-variables/index.html +0 -146
  244. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +0 -295
  245. package/backend/coverage/lcov-report/src/events/events.module.ts.html +0 -109
  246. package/backend/coverage/lcov-report/src/events/index.html +0 -146
  247. package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +0 -466
  248. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +0 -130
  249. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +0 -116
  250. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +0 -130
  251. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +0 -124
  252. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +0 -238
  253. package/backend/coverage/lcov-report/src/execution-logs/index.html +0 -146
  254. package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +0 -553
  255. package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +0 -109
  256. package/backend/coverage/lcov-report/src/gemini/index.html +0 -131
  257. package/backend/coverage/lcov-report/src/global-config/dto/index.html +0 -116
  258. package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +0 -367
  259. package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +0 -220
  260. package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +0 -115
  261. package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +0 -397
  262. package/backend/coverage/lcov-report/src/global-config/index.html +0 -146
  263. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +0 -340
  264. package/backend/coverage/lcov-report/src/index.html +0 -206
  265. package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +0 -187
  266. package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +0 -1825
  267. package/backend/coverage/lcov-report/src/interactive-chat/index.html +0 -146
  268. package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +0 -343
  269. package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +0 -116
  270. package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +0 -214
  271. package/backend/coverage/lcov-report/src/llm-call-logs/index.html +0 -146
  272. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +0 -634
  273. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +0 -124
  274. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +0 -643
  275. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +0 -1090
  276. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +0 -433
  277. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +0 -757
  278. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +0 -586
  279. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +0 -1153
  280. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +0 -124
  281. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +0 -103
  282. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +0 -124
  283. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +0 -106
  284. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +0 -106
  285. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +0 -118
  286. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +0 -190
  287. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +0 -196
  288. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +0 -91
  289. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +0 -356
  290. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +0 -106
  291. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +0 -124
  292. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +0 -124
  293. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +0 -214
  294. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +0 -202
  295. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +0 -151
  296. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +0 -181
  297. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +0 -130
  298. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +0 -631
  299. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +0 -469
  300. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +0 -448
  301. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +0 -1351
  302. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +0 -868
  303. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +0 -481
  304. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +0 -416
  305. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +0 -580
  306. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +0 -352
  307. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +0 -1054
  308. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +0 -331
  309. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +0 -403
  310. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +0 -176
  311. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +0 -100
  312. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +0 -724
  313. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +0 -358
  314. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +0 -379
  315. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +0 -838
  316. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +0 -1702
  317. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +0 -1459
  318. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +0 -679
  319. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +0 -964
  320. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +0 -625
  321. package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +0 -103
  322. package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +0 -116
  323. package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +0 -1645
  324. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +0 -238
  325. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +0 -181
  326. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +0 -161
  327. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +0 -313
  328. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +0 -466
  329. package/backend/coverage/lcov-report/src/llm-orchestration/index.html +0 -176
  330. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +0 -319
  331. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +0 -706
  332. package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +0 -1150
  333. package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +0 -131
  334. package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +0 -658
  335. package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +0 -127
  336. package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +0 -547
  337. package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +0 -1681
  338. package/backend/coverage/lcov-report/src/llm-provider/index.html +0 -236
  339. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +0 -187
  340. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +0 -361
  341. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +0 -175
  342. package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +0 -1780
  343. package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +0 -1867
  344. package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +0 -1891
  345. package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +0 -304
  346. package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +0 -1666
  347. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +0 -131
  348. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +0 -436
  349. package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +0 -319
  350. package/backend/coverage/lcov-report/src/llm-responses/index.html +0 -146
  351. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +0 -283
  352. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +0 -184
  353. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +0 -1474
  354. package/backend/coverage/lcov-report/src/main.ts.html +0 -463
  355. package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +0 -145
  356. package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +0 -127
  357. package/backend/coverage/lcov-report/src/mcp/dto/index.html +0 -146
  358. package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +0 -112
  359. package/backend/coverage/lcov-report/src/mcp/index.html +0 -146
  360. package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +0 -340
  361. package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +0 -124
  362. package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +0 -1345
  363. package/backend/coverage/lcov-report/src/message-bus/dto/index.html +0 -116
  364. package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +0 -109
  365. package/backend/coverage/lcov-report/src/message-bus/index.html +0 -146
  366. package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +0 -148
  367. package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +0 -115
  368. package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +0 -151
  369. package/backend/coverage/lcov-report/src/projects/dto/index.html +0 -116
  370. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +0 -196
  371. package/backend/coverage/lcov-report/src/projects/index.html +0 -146
  372. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +0 -322
  373. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +0 -124
  374. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +0 -235
  375. package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +0 -280
  376. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +0 -439
  377. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +0 -271
  378. package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +0 -271
  379. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +0 -172
  380. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +0 -116
  381. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +0 -157
  382. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +0 -148
  383. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +0 -151
  384. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +0 -161
  385. package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +0 -247
  386. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +0 -94
  387. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +0 -100
  388. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +0 -97
  389. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +0 -100
  390. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +0 -304
  391. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +0 -94
  392. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +0 -341
  393. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +0 -100
  394. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +0 -97
  395. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +0 -94
  396. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +0 -94
  397. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +0 -94
  398. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +0 -94
  399. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +0 -94
  400. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +0 -100
  401. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +0 -94
  402. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +0 -94
  403. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +0 -94
  404. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +0 -97
  405. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +0 -131
  406. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +0 -121
  407. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +0 -116
  408. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +0 -115
  409. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +0 -136
  410. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +0 -131
  411. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +0 -190
  412. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +0 -421
  413. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +0 -265
  414. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +0 -161
  415. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +0 -388
  416. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +0 -265
  417. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +0 -274
  418. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +0 -146
  419. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +0 -250
  420. package/backend/coverage/lcov-report/src/seeding/index.html +0 -236
  421. package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +0 -193
  422. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +0 -211
  423. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +0 -187
  424. package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +0 -742
  425. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +0 -397
  426. package/backend/coverage/lcov-report/src/session-followup/index.html +0 -131
  427. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +0 -130
  428. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +0 -718
  429. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +0 -116
  430. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +0 -577
  431. package/backend/coverage/lcov-report/src/session-inputs/index.html +0 -176
  432. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +0 -832
  433. package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +0 -220
  434. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +0 -685
  435. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +0 -229
  436. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +0 -1981
  437. package/backend/coverage/lcov-report/src/session-transfer/index.html +0 -131
  438. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +0 -160
  439. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +0 -883
  440. package/backend/coverage/lcov-report/src/sessions/dto/index.html +0 -116
  441. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +0 -769
  442. package/backend/coverage/lcov-report/src/sessions/index.html +0 -146
  443. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +0 -1306
  444. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +0 -220
  445. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +0 -2797
  446. package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +0 -355
  447. package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +0 -131
  448. package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +0 -295
  449. package/backend/coverage/lcov-report/src/sub-agents/index.html +0 -221
  450. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +0 -463
  451. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +0 -2428
  452. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +0 -580
  453. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +0 -550
  454. package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +0 -475
  455. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +0 -373
  456. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +0 -205
  457. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +0 -619
  458. package/backend/coverage/lcov-report/src/syntax-validation/index.html +0 -131
  459. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +0 -109
  460. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +0 -724
  461. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +0 -176
  462. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +0 -157
  463. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +0 -148
  464. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +0 -517
  465. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +0 -121
  466. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +0 -118
  467. package/backend/coverage/lcov-report/src/system-prompts/index.html +0 -146
  468. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +0 -1060
  469. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +0 -160
  470. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +0 -2254
  471. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +0 -178
  472. package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +0 -181
  473. package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +0 -131
  474. package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +0 -178
  475. package/backend/coverage/lcov-report/src/tool-hooks/index.html +0 -146
  476. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +0 -481
  477. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +0 -127
  478. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +0 -1222
  479. package/backend/coverage/lcov-report/src/tracing.ts.html +0 -214
  480. package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +0 -130
  481. package/backend/coverage/lcov-report/src/types/index.html +0 -116
  482. package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +0 -253
  483. package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +0 -310
  484. package/backend/coverage/lcov-report/src/utils/index.html +0 -191
  485. package/backend/coverage/lcov-report/src/utils/index.ts.html +0 -100
  486. package/backend/coverage/lcov-report/src/utils/short-id.ts.html +0 -109
  487. package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +0 -412
  488. package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +0 -223
  489. package/backend/coverage/lcov-report/src/visual-editor/index.html +0 -146
  490. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +0 -409
  491. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +0 -130
  492. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +0 -118
  493. package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +0 -112
  494. package/backend/coverage/lcov-report/src/workspace/dto/index.html +0 -131
  495. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +0 -193
  496. package/backend/coverage/lcov-report/src/workspace/index.html +0 -146
  497. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +0 -394
  498. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +0 -121
  499. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +0 -1027
  500. package/backend/coverage/lcov.info +0 -20220
  501. package/backend/packages/tokenpatch/CODEMAP.md +0 -25
  502. package/daemon/CODEMAP.md +0 -23
  503. 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
-