repoburg 1.0.55 → 1.0.58

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 (212) hide show
  1. package/backend/.env +1 -0
  2. package/backend/coverage/clover.xml +2409 -2355
  3. package/backend/coverage/coverage-final.json +99 -96
  4. package/backend/coverage/lcov-report/index.html +356 -341
  5. package/backend/coverage/lcov-report/src/action-execution/action-execution.module.ts.html +12 -12
  6. package/backend/coverage/lcov-report/src/action-execution/action-execution.service.ts.html +140 -62
  7. package/backend/coverage/lcov-report/src/action-execution/index.html +28 -28
  8. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +188 -188
  9. package/backend/coverage/lcov-report/src/ai-actions/ai-action-creation.service.ts.html +284 -236
  10. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +109 -109
  11. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +28 -28
  12. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +193 -193
  13. package/backend/coverage/lcov-report/src/ai-actions/index.html +61 -61
  14. package/backend/coverage/lcov-report/src/app.controller.ts.html +24 -24
  15. package/backend/coverage/lcov-report/src/app.module.ts.html +68 -65
  16. package/backend/coverage/lcov-report/src/app.service.ts.html +46 -13
  17. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +87 -33
  18. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +18 -18
  19. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +113 -68
  20. package/backend/coverage/lcov-report/src/application-state/dto/index.html +42 -27
  21. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +12 -12
  22. package/backend/coverage/lcov-report/src/application-state/dto/set-orchestration-timeout.dto.ts.html +103 -0
  23. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +12 -12
  24. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +12 -12
  25. package/backend/coverage/lcov-report/src/application-state/index.html +37 -37
  26. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +16 -16
  27. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +222 -222
  28. package/backend/coverage/lcov-report/src/context-generation/index.html +28 -28
  29. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +31 -31
  30. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +20 -20
  31. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +26 -26
  32. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +28 -28
  33. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +13 -13
  34. package/backend/coverage/lcov-report/src/context-snippets/index.html +31 -31
  35. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +45 -45
  36. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +20 -20
  37. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +87 -84
  38. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +48 -48
  39. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +13 -13
  40. package/backend/coverage/lcov-report/src/context-templates/index.html +36 -36
  41. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +48 -48
  42. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +14 -14
  43. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +22 -22
  44. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +18 -18
  45. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +52 -52
  46. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +20 -20
  47. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +26 -26
  48. package/backend/coverage/lcov-report/src/core-entities/index.html +112 -112
  49. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +28 -28
  50. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +24 -24
  51. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +59 -50
  52. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +56 -56
  53. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +28 -28
  54. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +30 -30
  55. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +18 -18
  56. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +20 -20
  57. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +28 -28
  58. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +13 -13
  59. package/backend/coverage/lcov-report/src/custom-snippets/index.html +32 -32
  60. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +46 -46
  61. package/backend/coverage/lcov-report/src/events/events.module.ts.html +12 -12
  62. package/backend/coverage/lcov-report/src/events/index.html +28 -28
  63. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +1 -1
  64. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +1 -1
  65. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +18 -18
  66. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +18 -18
  67. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +32 -32
  68. package/backend/coverage/lcov-report/src/execution-logs/index.html +33 -33
  69. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +55 -55
  70. package/backend/coverage/lcov-report/src/index.html +44 -44
  71. package/backend/coverage/lcov-report/src/llm-response-parser/dto/ai-action.dto.ts.html +67 -67
  72. package/backend/coverage/lcov-report/src/llm-response-parser/dto/index.html +21 -21
  73. package/backend/coverage/lcov-report/src/llm-response-parser/errors/index.html +17 -17
  74. package/backend/coverage/lcov-report/src/llm-response-parser/errors/parsing.error.ts.html +19 -19
  75. package/backend/coverage/lcov-report/src/llm-response-parser/index.html +35 -35
  76. package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.module.ts.html +12 -12
  77. package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.service.ts.html +208 -208
  78. package/backend/coverage/lcov-report/src/llm-response-parser/parsing.constants.ts.html +38 -38
  79. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +21 -21
  80. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +28 -28
  81. package/backend/coverage/lcov-report/src/llm-responses/index.html +38 -38
  82. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +24 -24
  83. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +38 -35
  84. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +107 -86
  85. package/backend/coverage/lcov-report/src/main.ts.html +1 -1
  86. package/backend/coverage/lcov-report/src/orchestration/dto/index.html +13 -13
  87. package/backend/coverage/lcov-report/src/orchestration/dto/orchestration.dto.ts.html +30 -45
  88. package/backend/coverage/lcov-report/src/orchestration/index.html +74 -74
  89. package/backend/coverage/lcov-report/src/orchestration/orchestration-fs.service.ts.html +245 -128
  90. package/backend/coverage/lcov-report/src/orchestration/orchestration-parser.service.ts.html +32 -200
  91. package/backend/coverage/lcov-report/src/orchestration/orchestration.controller.ts.html +72 -102
  92. package/backend/coverage/lcov-report/src/orchestration/orchestration.module.ts.html +35 -38
  93. package/backend/coverage/lcov-report/src/orchestration/orchestration.service.ts.html +317 -425
  94. package/backend/coverage/lcov-report/src/orchestration/orchestration.types.ts.html +41 -35
  95. package/backend/coverage/lcov-report/src/projects/dto/index.html +13 -13
  96. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +20 -20
  97. package/backend/coverage/lcov-report/src/projects/index.html +32 -32
  98. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +28 -28
  99. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +18 -18
  100. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +20 -20
  101. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +22 -22
  102. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +21 -21
  103. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +1 -1
  104. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +1 -1
  105. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +1 -1
  106. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +1 -1
  107. package/backend/coverage/lcov-report/src/seeding/data/context-templates/pm-context.ts.html +1 -1
  108. package/backend/coverage/lcov-report/src/seeding/data/context-templates/pr-description.ts.html +1 -1
  109. package/backend/coverage/lcov-report/src/seeding/data/context-templates/sample_focused-tree.ts.html +1 -1
  110. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +1 -1
  111. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +1 -1
  112. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +1 -1
  113. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +1 -1
  114. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +1 -1
  115. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +1 -1
  116. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +1 -1
  117. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +1 -1
  118. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +1 -1
  119. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +1 -1
  120. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/codebase-explorer.ts.html +1 -1
  121. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_multi-file-action-generator-with-requester.ts.html +8 -2
  122. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +3 -3
  123. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/packup.ts.html +1 -1
  124. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/refactor-split.ts.html +244 -0
  125. package/backend/coverage/lcov-report/src/seeding/index.html +47 -47
  126. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +24 -24
  127. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +27 -27
  128. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +21 -21
  129. package/backend/coverage/lcov-report/src/session-followup/index.html +28 -28
  130. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +22 -22
  131. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +44 -41
  132. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +13 -13
  133. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +40 -28
  134. package/backend/coverage/lcov-report/src/session-inputs/index.html +50 -50
  135. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +168 -156
  136. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +36 -36
  137. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +40 -37
  138. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +242 -236
  139. package/backend/coverage/lcov-report/src/session-transfer/index.html +22 -22
  140. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +16 -16
  141. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +30 -30
  142. package/backend/coverage/lcov-report/src/sessions/dto/index.html +21 -21
  143. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +54 -54
  144. package/backend/coverage/lcov-report/src/sessions/index.html +39 -39
  145. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +55 -55
  146. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +30 -30
  147. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +120 -120
  148. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +19 -19
  149. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +38 -29
  150. package/backend/coverage/lcov-report/src/system-prompts/index.html +37 -37
  151. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +34 -34
  152. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +20 -20
  153. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +62 -62
  154. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +1 -1
  155. package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +310 -0
  156. package/backend/coverage/lcov-report/src/utils/index.html +131 -0
  157. package/backend/coverage/lcov-report/src/utils/index.ts.html +88 -0
  158. package/backend/coverage/lcov-report/src/workspace/dto/index.html +13 -13
  159. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +24 -24
  160. package/backend/coverage/lcov-report/src/workspace/index.html +37 -37
  161. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +26 -26
  162. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +16 -16
  163. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +259 -214
  164. package/backend/coverage/lcov.info +3284 -3186
  165. package/backend/dist/action-execution/action-execution.service.d.ts +2 -0
  166. package/backend/dist/action-execution/action-execution.service.js +31 -13
  167. package/backend/dist/action-execution/action-execution.service.js.map +1 -1
  168. package/backend/dist/ai-actions/ai-action-batch.service.d.ts +5 -1
  169. package/backend/dist/ai-actions/ai-action-batch.service.js +15 -2
  170. package/backend/dist/ai-actions/ai-action-batch.service.js.map +1 -1
  171. package/backend/dist/ai-actions/ai-action-creation.service.d.ts +5 -1
  172. package/backend/dist/ai-actions/ai-action-creation.service.js +32 -7
  173. package/backend/dist/ai-actions/ai-action-creation.service.js.map +1 -1
  174. package/backend/dist/ai-actions/ai-actions.module.js +4 -0
  175. package/backend/dist/ai-actions/ai-actions.module.js.map +1 -1
  176. package/backend/dist/application-state/application-state.controller.d.ts +5 -0
  177. package/backend/dist/application-state/application-state.controller.js +22 -0
  178. package/backend/dist/application-state/application-state.controller.js.map +1 -1
  179. package/backend/dist/application-state/application-state.service.d.ts +2 -0
  180. package/backend/dist/application-state/application-state.service.js +11 -0
  181. package/backend/dist/application-state/application-state.service.js.map +1 -1
  182. package/backend/dist/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.d.ts +3 -0
  183. package/backend/dist/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.js +21 -0
  184. package/backend/dist/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.js.map +1 -0
  185. package/backend/dist/context-generation/context-generation.service.d.ts +2 -2
  186. package/backend/dist/context-generation/context-generation.service.js.map +1 -1
  187. package/backend/dist/orchestration/orchestration.service.js +1 -0
  188. package/backend/dist/orchestration/orchestration.service.js.map +1 -1
  189. package/backend/dist/seeding/data/context-templates/default-followup_ad-hoc-focused-context.d.ts +1 -1
  190. package/backend/dist/seeding/data/context-templates/default-followup_ad-hoc-focused-context.js +2 -0
  191. package/backend/dist/seeding/data/context-templates/default-followup_ad-hoc-focused-context.js.map +1 -1
  192. package/backend/dist/seeding/data/custom-snippets/usr-cmd-output-incl.d.ts +3 -0
  193. package/backend/dist/seeding/data/custom-snippets/usr-cmd-output-incl.js +7 -0
  194. package/backend/dist/seeding/data/custom-snippets/usr-cmd-output-incl.js.map +1 -0
  195. package/backend/dist/seeding/data/system-prompts/codebase-explorer.d.ts +1 -1
  196. package/backend/dist/seeding/data/system-prompts/codebase-explorer.js +31 -4
  197. package/backend/dist/seeding/data/system-prompts/codebase-explorer.js.map +1 -1
  198. package/backend/dist/session-inputs/dto/session-input.dto.d.ts +1 -0
  199. package/backend/dist/session-inputs/dto/session-input.dto.js +5 -0
  200. package/backend/dist/session-inputs/dto/session-input.dto.js.map +1 -1
  201. package/backend/dist/session-inputs/session-input-context.service.js +13 -5
  202. package/backend/dist/session-inputs/session-input-context.service.js.map +1 -1
  203. package/backend/dist/session-inputs/session-inputs.service.js +2 -1
  204. package/backend/dist/session-inputs/session-inputs.service.js.map +1 -1
  205. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  206. package/backend/dist/utils/fuzzy-search.js +13 -4
  207. package/backend/dist/utils/fuzzy-search.js.map +1 -1
  208. package/backend/dist/workspace/workspace.service.d.ts +1 -0
  209. package/backend/dist/workspace/workspace.service.js +14 -3
  210. package/backend/dist/workspace/workspace.service.js.map +1 -1
  211. package/package.json +1 -1
  212. package/orchestration-test.txt +0 -3
@@ -23,9 +23,9 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
26
+ <span class="strong">100% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/5</span>
28
+ <span class='fraction'>5/5</span>
29
29
  </div>
30
30
 
31
31
 
@@ -44,9 +44,9 @@
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
47
+ <span class="strong">100% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/3</span>
49
+ <span class='fraction'>3/3</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line high'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -71,22 +71,22 @@
71
71
  <a name='L6'></a><a href='#L6'>6</a>
72
72
  <a name='L7'></a><a href='#L7'>7</a>
73
73
  <a name='L8'></a><a href='#L8'>8</a>
74
- <a name='L9'></a><a href='#L9'>9</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
75
- <span class="cline-any cline-no">&nbsp;</span>
74
+ <a name='L9'></a><a href='#L9'>9</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">6x</span>
75
+ <span class="cline-any cline-yes">6x</span>
76
76
  <span class="cline-any cline-neutral">&nbsp;</span>
77
77
  <span class="cline-any cline-neutral">&nbsp;</span>
78
78
  <span class="cline-any cline-neutral">&nbsp;</span>
79
79
  <span class="cline-any cline-neutral">&nbsp;</span>
80
80
  <span class="cline-any cline-neutral">&nbsp;</span>
81
- <span class="cline-any cline-no">&nbsp;</span>
82
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import { Module } from '@nestjs/common';</span>
83
- <span class="cstat-no" title="statement not covered" >import { ActionExecutionService } from './action-execution.service';</span>
81
+ <span class="cline-any cline-yes">6x</span>
82
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Module } from '@nestjs/common';
83
+ import { ActionExecutionService } from './action-execution.service';
84
84
  &nbsp;
85
85
  @Module({
86
86
  providers: [ActionExecutionService],
87
87
  exports: [ActionExecutionService],
88
88
  })
89
- export <span class="cstat-no" title="statement not covered" >class <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" >ActionExecutionModule </span>{}</span></span>
89
+ export class ActionExecutionModule {}
90
90
  &nbsp;</pre></td></tr></table></pre>
91
91
 
92
92
  <div class='push'></div><!-- for sticky footer -->
@@ -94,7 +94,7 @@ export <span class="cstat-no" title="statement not covered" >class <span class="
94
94
  <div class='footer quiet pad2 space-top1 center small'>
95
95
  Code coverage generated by
96
96
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
97
- at 2025-07-30T23:37:05.373Z
97
+ at 2025-09-12T19:21:55.945Z
98
98
  </div>
99
99
  <script src="../../prettify.js"></script>
100
100
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
26
+ <span class="strong">64.81% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/42</span>
28
+ <span class='fraction'>35/54</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">33.33% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/8</span>
35
+ <span class='fraction'>4/12</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">83.33% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/5</span>
42
+ <span class='fraction'>5/6</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
47
+ <span class="strong">63.46% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/40</span>
49
+ <span class='fraction'>33/52</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line medium'></div>
65
65
  <pre><table class="coverage">
66
66
  <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
67
  <a name='L2'></a><a href='#L2'>2</a>
@@ -158,62 +158,112 @@
158
158
  <a name='L93'></a><a href='#L93'>93</a>
159
159
  <a name='L94'></a><a href='#L94'>94</a>
160
160
  <a name='L95'></a><a href='#L95'>95</a>
161
- <a name='L96'></a><a href='#L96'>96</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">11x</span>
162
188
  <span class="cline-any cline-neutral">&nbsp;</span>
163
189
  <span class="cline-any cline-neutral">&nbsp;</span>
164
190
  <span class="cline-any cline-neutral">&nbsp;</span>
165
191
  <span class="cline-any cline-neutral">&nbsp;</span>
166
192
  <span class="cline-any cline-neutral">&nbsp;</span>
167
- <span class="cline-any cline-no">&nbsp;</span>
168
- <span class="cline-any cline-no">&nbsp;</span>
169
- <span class="cline-any cline-no">&nbsp;</span>
170
- <span class="cline-any cline-no">&nbsp;</span>
171
193
  <span class="cline-any cline-neutral">&nbsp;</span>
172
- <span class="cline-any cline-no">&nbsp;</span>
194
+ <span class="cline-any cline-yes">11x</span>
195
+ <span class="cline-any cline-yes">11x</span>
196
+ <span class="cline-any cline-yes">11x</span>
197
+ <span class="cline-any cline-yes">11x</span>
173
198
  <span class="cline-any cline-neutral">&nbsp;</span>
199
+ <span class="cline-any cline-yes">11x</span>
174
200
  <span class="cline-any cline-neutral">&nbsp;</span>
175
- <span class="cline-any cline-no">&nbsp;</span>
176
- <span class="cline-any cline-no">&nbsp;</span>
177
201
  <span class="cline-any cline-neutral">&nbsp;</span>
202
+ <span class="cline-any cline-yes">11x</span>
203
+ <span class="cline-any cline-yes">6x</span>
204
+ <span class="cline-any cline-yes">6x</span>
178
205
  <span class="cline-any cline-neutral">&nbsp;</span>
179
- <span class="cline-any cline-no">&nbsp;</span>
180
- <span class="cline-any cline-no">&nbsp;</span>
181
- <span class="cline-any cline-no">&nbsp;</span>
182
- <span class="cline-any cline-no">&nbsp;</span>
183
- <span class="cline-any cline-no">&nbsp;</span>
184
206
  <span class="cline-any cline-neutral">&nbsp;</span>
207
+ <span class="cline-any cline-neutral">&nbsp;</span>
208
+ <span class="cline-any cline-yes">12x</span>
209
+ <span class="cline-any cline-yes">12x</span>
210
+ <span class="cline-any cline-yes">1x</span>
211
+ <span class="cline-any cline-neutral">&nbsp;</span>
212
+ <span class="cline-any cline-neutral">&nbsp;</span>
213
+ <span class="cline-any cline-neutral">&nbsp;</span>
214
+ <span class="cline-any cline-yes">11x</span>
215
+ <span class="cline-any cline-neutral">&nbsp;</span>
216
+ <span class="cline-any cline-yes">11x</span>
185
217
  <span class="cline-any cline-no">&nbsp;</span>
186
218
  <span class="cline-any cline-no">&nbsp;</span>
187
219
  <span class="cline-any cline-neutral">&nbsp;</span>
188
220
  <span class="cline-any cline-neutral">&nbsp;</span>
189
221
  <span class="cline-any cline-neutral">&nbsp;</span>
222
+ <span class="cline-any cline-yes">11x</span>
190
223
  <span class="cline-any cline-neutral">&nbsp;</span>
191
224
  <span class="cline-any cline-neutral">&nbsp;</span>
192
225
  <span class="cline-any cline-neutral">&nbsp;</span>
193
- <span class="cline-any cline-no">&nbsp;</span>
226
+ <span class="cline-any cline-yes">7x</span>
227
+ <span class="cline-any cline-yes">6x</span>
228
+ <span class="cline-any cline-yes">6x</span>
229
+ <span class="cline-any cline-yes">6x</span>
230
+ <span class="cline-any cline-yes">6x</span>
231
+ <span class="cline-any cline-yes">6x</span>
194
232
  <span class="cline-any cline-neutral">&nbsp;</span>
195
233
  <span class="cline-any cline-no">&nbsp;</span>
196
234
  <span class="cline-any cline-no">&nbsp;</span>
197
- <span class="cline-any cline-no">&nbsp;</span>
198
- <span class="cline-any cline-no">&nbsp;</span>
199
235
  <span class="cline-any cline-neutral">&nbsp;</span>
200
- <span class="cline-any cline-no">&nbsp;</span>
201
- <span class="cline-any cline-no">&nbsp;</span>
202
236
  <span class="cline-any cline-neutral">&nbsp;</span>
203
237
  <span class="cline-any cline-neutral">&nbsp;</span>
204
238
  <span class="cline-any cline-neutral">&nbsp;</span>
205
239
  <span class="cline-any cline-neutral">&nbsp;</span>
206
240
  <span class="cline-any cline-neutral">&nbsp;</span>
241
+ <span class="cline-any cline-yes">4x</span>
242
+ <span class="cline-any cline-yes">4x</span>
243
+ <span class="cline-any cline-neutral">&nbsp;</span>
244
+ <span class="cline-any cline-yes">4x</span>
245
+ <span class="cline-any cline-yes">4x</span>
246
+ <span class="cline-any cline-yes">4x</span>
247
+ <span class="cline-any cline-yes">4x</span>
207
248
  <span class="cline-any cline-neutral">&nbsp;</span>
208
- <span class="cline-any cline-no">&nbsp;</span>
209
- <span class="cline-any cline-no">&nbsp;</span>
210
249
  <span class="cline-any cline-no">&nbsp;</span>
211
250
  <span class="cline-any cline-no">&nbsp;</span>
212
251
  <span class="cline-any cline-neutral">&nbsp;</span>
213
- <span class="cline-any cline-no">&nbsp;</span>
252
+ <span class="cline-any cline-neutral">&nbsp;</span>
253
+ <span class="cline-any cline-neutral">&nbsp;</span>
254
+ <span class="cline-any cline-neutral">&nbsp;</span>
255
+ <span class="cline-any cline-neutral">&nbsp;</span>
256
+ <span class="cline-any cline-neutral">&nbsp;</span>
257
+ <span class="cline-any cline-yes">1x</span>
258
+ <span class="cline-any cline-yes">1x</span>
259
+ <span class="cline-any cline-yes">1x</span>
214
260
  <span class="cline-any cline-no">&nbsp;</span>
215
261
  <span class="cline-any cline-no">&nbsp;</span>
216
262
  <span class="cline-any cline-neutral">&nbsp;</span>
263
+ <span class="cline-any cline-yes">1x</span>
264
+ <span class="cline-any cline-yes">1x</span>
265
+ <span class="cline-any cline-yes">1x</span>
266
+ <span class="cline-any cline-neutral">&nbsp;</span>
217
267
  <span class="cline-any cline-neutral">&nbsp;</span>
218
268
  <span class="cline-any cline-neutral">&nbsp;</span>
219
269
  <span class="cline-any cline-no">&nbsp;</span>
@@ -228,6 +278,8 @@
228
278
  <span class="cline-any cline-no">&nbsp;</span>
229
279
  <span class="cline-any cline-no">&nbsp;</span>
230
280
  <span class="cline-any cline-no">&nbsp;</span>
281
+ <span class="cline-any cline-neutral">&nbsp;</span>
282
+ <span class="cline-any cline-neutral">&nbsp;</span>
231
283
  <span class="cline-any cline-no">&nbsp;</span>
232
284
  <span class="cline-any cline-no">&nbsp;</span>
233
285
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -253,61 +305,85 @@
253
305
  <span class="cline-any cline-neutral">&nbsp;</span>
254
306
  <span class="cline-any cline-neutral">&nbsp;</span>
255
307
  <span class="cline-any cline-neutral">&nbsp;</span>
256
- <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import {</span>
308
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
257
309
  Injectable,
258
310
  InternalServerErrorException,
259
311
  Logger,
260
312
  NotFoundException,
313
+ BadRequestException,
261
314
  } from '@nestjs/common';
262
- <span class="cstat-no" title="statement not covered" >import * as fs from 'fs/promises';</span>
263
- <span class="cstat-no" title="statement not covered" >import * as path from 'path';</span>
264
- <span class="cstat-no" title="statement not covered" >import { exec } from 'child_process';</span>
265
- <span class="cstat-no" title="statement not covered" >import { promisify } from 'util';</span>
315
+ import * as fs from 'fs/promises';
316
+ import * as path from 'path';
317
+ import { exec } from 'child_process';
318
+ import { promisify } from 'util';
266
319
  &nbsp;
267
- const execAsync = <span class="cstat-no" title="statement not covered" >promisify(exec);</span>
320
+ const execAsync = promisify(exec);
268
321
  &nbsp;
269
322
  @Injectable()
270
- export <span class="fstat-no" title="function not covered" >class <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" >A</span>ctionExecutionService<span class="cstat-no" title="statement not covered" > </span>{</span></span>
271
- private readonly <span class="cstat-no" title="statement not covered" >logger = new Logger(ActionExecutionService.name);</span>
323
+ export class ActionExecutionService {
324
+ private readonly logger = new Logger(ActionExecutionService.name);
325
+ private readonly projectRoot: string =
326
+ process.env.REPOBURG_PROJECT_PATH || process.cwd();
272
327
  &nbsp;
273
- public <span class="fstat-no" title="function not covered" >async </span>createFile(filePath: string, content: string): Promise&lt;void&gt; {
274
- const dir = <span class="cstat-no" title="statement not covered" >path.dirname(filePath);</span>
275
- <span class="cstat-no" title="statement not covered" > try {</span>
276
- <span class="cstat-no" title="statement not covered" > await fs.mkdir(dir, { recursive: true });</span>
277
- <span class="cstat-no" title="statement not covered" > await fs.writeFile(filePath, content, 'utf8');</span>
278
- <span class="cstat-no" title="statement not covered" > this.logger.log(`Created file: ${filePath}`);</span>
328
+ private resolveAndValidatePath(unsafePath: string): string {
329
+ const normalizedPath = path.normalize(unsafePath);
330
+ if (path.isAbsolute(normalizedPath)) {
331
+ throw new BadRequestException(
332
+ `Absolute paths are not allowed: ${unsafePath}`,
333
+ );
334
+ }
335
+ const resolvedPath = path.resolve(this.projectRoot, normalizedPath);
336
+ &nbsp;
337
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!resolvedPath.startsWith(this.projectRoot)) {
338
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(`Path traversal attempt detected: ${unsafePath}`);</span>
339
+ <span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
340
+ `Path traversal is not allowed. Access denied for path: ${unsafePath}`,
341
+ );
342
+ }
343
+ return resolvedPath;
344
+ }
345
+ &nbsp;
346
+ public async createFile(filePath: string, content: string): Promise&lt;void&gt; {
347
+ const safePath = this.resolveAndValidatePath(filePath);
348
+ const dir = path.dirname(safePath);
349
+ try {
350
+ await fs.mkdir(dir, { recursive: true });
351
+ await fs.writeFile(safePath, content, 'utf8');
352
+ this.logger.log(`Created file: ${safePath}`);
279
353
  } catch (error) {
280
- <span class="cstat-no" title="statement not covered" > this.logger.error(`Error creating file ${filePath}: ${error.message}`);</span>
354
+ <span class="cstat-no" title="statement not covered" > this.logger.error(`Error creating file ${safePath}: ${error.message}`);</span>
281
355
  <span class="cstat-no" title="statement not covered" > throw new InternalServerErrorException(</span>
282
356
  `Failed to create file "${filePath}": ${error.message}`,
283
357
  );
284
358
  }
285
359
  }
286
360
  &nbsp;
287
- public <span class="fstat-no" title="function not covered" >async </span>editFile(filePath: string, newContent: string): Promise&lt;void&gt; {
288
- <span class="cstat-no" title="statement not covered" > try {</span>
361
+ public async editFile(filePath: string, newContent: string): Promise&lt;void&gt; {
362
+ const safePath = this.resolveAndValidatePath(filePath);
363
+ try {
289
364
  // For edit, ensure directory exists, then write. This handles cases where edit implies creation.
290
- const dir = <span class="cstat-no" title="statement not covered" >path.dirname(filePath);</span>
291
- <span class="cstat-no" title="statement not covered" > await fs.mkdir(dir, { recursive: true });</span>
292
- <span class="cstat-no" title="statement not covered" > await fs.writeFile(filePath, newContent, 'utf8');</span>
293
- <span class="cstat-no" title="statement not covered" > this.logger.log(`Edited file: ${filePath}`);</span>
365
+ const dir = path.dirname(safePath);
366
+ await fs.mkdir(dir, { recursive: true });
367
+ await fs.writeFile(safePath, newContent, 'utf8');
368
+ this.logger.log(`Edited file: ${safePath}`);
294
369
  } catch (error) {
295
- <span class="cstat-no" title="statement not covered" > this.logger.error(`Error editing file ${filePath}: ${error.message}`);</span>
370
+ <span class="cstat-no" title="statement not covered" > this.logger.error(`Error editing file ${safePath}: ${error.message}`);</span>
296
371
  <span class="cstat-no" title="statement not covered" > throw new InternalServerErrorException(</span>
297
372
  `Failed to edit file "${filePath}": ${error.message}`,
298
373
  );
299
374
  }
300
375
  }
301
376
  &nbsp;
302
- public <span class="fstat-no" title="function not covered" >async </span>deleteFile(filePath: string): Promise&lt;void&gt; {
303
- <span class="cstat-no" title="statement not covered" > try {</span>
304
- <span class="cstat-no" title="statement not covered" > await fs.access(filePath); </span>// Check if file exists
305
- <span class="cstat-no" title="statement not covered" > await fs.unlink(filePath);</span>
306
- <span class="cstat-no" title="statement not covered" > this.logger.log(`Deleted file: ${filePath}`);</span>
377
+ public async deleteFile(filePath: string): Promise&lt;void&gt; {
378
+ const safePath = this.resolveAndValidatePath(filePath);
379
+ try {
380
+ await fs.access(safePath); // Check if file exists
381
+ <span class="cstat-no" title="statement not covered" > await fs.unlink(safePath);</span>
382
+ <span class="cstat-no" title="statement not covered" > this.logger.log(`Deleted file: ${safePath}`);</span>
307
383
  } catch (error) {
308
- <span class="cstat-no" title="statement not covered" > this.logger.error(`Error deleting file ${filePath}: ${error.message}`);</span>
309
- <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>
310
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
384
+ this.logger.error(`Error deleting file ${safePath}: ${error.message}`);
385
+ if (error.code === 'ENOENT') {
386
+ throw new NotFoundException(
311
387
  `File not found, cannot delete: "${filePath}"`,
312
388
  );
313
389
  }
@@ -322,7 +398,9 @@ export <span class="fstat-no" title="function not covered" >class <span class="c
322
398
  ): Promise&lt;{ stdout: string; stderr: string }&gt; {
323
399
  <span class="cstat-no" title="statement not covered" > this.logger.log(`Executing command: ${commandString}`);</span>
324
400
  <span class="cstat-no" title="statement not covered" > try {</span>
325
- const { stdout, stderr } = <span class="cstat-no" title="statement not covered" >await execAsync(commandString);</span>
401
+ const { stdout, stderr } = <span class="cstat-no" title="statement not covered" >await execAsync(commandString, {</span>
402
+ cwd: this.projectRoot,
403
+ });
326
404
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (stderr) {</span>
327
405
  <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
328
406
  `Command "${commandString}" produced stderr: ${stderr}`,
@@ -355,7 +433,7 @@ export <span class="fstat-no" title="function not covered" >class <span class="c
355
433
  <div class='footer quiet pad2 space-top1 center small'>
356
434
  Code coverage generated by
357
435
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
358
- at 2025-07-30T23:37:05.373Z
436
+ at 2025-09-12T19:21:55.945Z
359
437
  </div>
360
438
  <script src="../../prettify.js"></script>
361
439
  <script>
@@ -23,30 +23,30 @@
23
23
  <div class='clearfix'>
24
24
 
25
25
  <div class='fl pad1y space-right2'>
26
- <span class="strong">0% </span>
26
+ <span class="strong">67.79% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/47</span>
28
+ <span class='fraction'>40/59</span>
29
29
  </div>
30
30
 
31
31
 
32
32
  <div class='fl pad1y space-right2'>
33
- <span class="strong">0% </span>
33
+ <span class="strong">33.33% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/8</span>
35
+ <span class='fraction'>4/12</span>
36
36
  </div>
37
37
 
38
38
 
39
39
  <div class='fl pad1y space-right2'>
40
- <span class="strong">0% </span>
40
+ <span class="strong">83.33% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/5</span>
42
+ <span class='fraction'>5/6</span>
43
43
  </div>
44
44
 
45
45
 
46
46
  <div class='fl pad1y space-right2'>
47
- <span class="strong">0% </span>
47
+ <span class="strong">65.45% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/43</span>
49
+ <span class='fraction'>36/55</span>
50
50
  </div>
51
51
 
52
52
 
@@ -61,7 +61,7 @@
61
61
  </div>
62
62
  </template>
63
63
  </div>
64
- <div class='status-line low'></div>
64
+ <div class='status-line medium'></div>
65
65
  <div class="pad1">
66
66
  <table class="coverage-summary">
67
67
  <thead>
@@ -79,33 +79,33 @@
79
79
  </tr>
80
80
  </thead>
81
81
  <tbody><tr>
82
- <td class="file low" data-value="action-execution.module.ts"><a href="action-execution.module.ts.html">action-execution.module.ts</a></td>
83
- <td data-value="0" class="pic low">
84
- <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
82
+ <td class="file high" data-value="action-execution.module.ts"><a href="action-execution.module.ts.html">action-execution.module.ts</a></td>
83
+ <td data-value="100" class="pic high">
84
+ <div class="chart"><div class="cover-fill cover-full" style="width: 100%"></div><div class="cover-empty" style="width: 0%"></div></div>
85
85
  </td>
86
- <td data-value="0" class="pct low">0%</td>
87
- <td data-value="5" class="abs low">0/5</td>
86
+ <td data-value="100" class="pct high">100%</td>
87
+ <td data-value="5" class="abs high">5/5</td>
88
88
  <td data-value="100" class="pct high">100%</td>
89
89
  <td data-value="0" class="abs high">0/0</td>
90
90
  <td data-value="100" class="pct high">100%</td>
91
91
  <td data-value="0" class="abs high">0/0</td>
92
- <td data-value="0" class="pct low">0%</td>
93
- <td data-value="3" class="abs low">0/3</td>
92
+ <td data-value="100" class="pct high">100%</td>
93
+ <td data-value="3" class="abs high">3/3</td>
94
94
  </tr>
95
95
 
96
96
  <tr>
97
- <td class="file low" data-value="action-execution.service.ts"><a href="action-execution.service.ts.html">action-execution.service.ts</a></td>
98
- <td data-value="0" class="pic low">
99
- <div class="chart"><div class="cover-fill" style="width: 0%"></div><div class="cover-empty" style="width: 100%"></div></div>
97
+ <td class="file medium" data-value="action-execution.service.ts"><a href="action-execution.service.ts.html">action-execution.service.ts</a></td>
98
+ <td data-value="64.81" class="pic medium">
99
+ <div class="chart"><div class="cover-fill" style="width: 64%"></div><div class="cover-empty" style="width: 36%"></div></div>
100
100
  </td>
101
- <td data-value="0" class="pct low">0%</td>
102
- <td data-value="42" class="abs low">0/42</td>
103
- <td data-value="0" class="pct low">0%</td>
104
- <td data-value="8" class="abs low">0/8</td>
105
- <td data-value="0" class="pct low">0%</td>
106
- <td data-value="5" class="abs low">0/5</td>
107
- <td data-value="0" class="pct low">0%</td>
108
- <td data-value="40" class="abs low">0/40</td>
101
+ <td data-value="64.81" class="pct medium">64.81%</td>
102
+ <td data-value="54" class="abs medium">35/54</td>
103
+ <td data-value="33.33" class="pct low">33.33%</td>
104
+ <td data-value="12" class="abs low">4/12</td>
105
+ <td data-value="83.33" class="pct high">83.33%</td>
106
+ <td data-value="6" class="abs high">5/6</td>
107
+ <td data-value="63.46" class="pct medium">63.46%</td>
108
+ <td data-value="52" class="abs medium">33/52</td>
109
109
  </tr>
110
110
 
111
111
  </tbody>
@@ -116,7 +116,7 @@
116
116
  <div class='footer quiet pad2 space-top1 center small'>
117
117
  Code coverage generated by
118
118
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
119
- at 2025-07-30T23:37:05.373Z
119
+ at 2025-09-12T19:21:55.945Z
120
120
  </div>
121
121
  <script src="../../prettify.js"></script>
122
122
  <script>