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,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">72.84% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/151</span>
28
+ <span class='fraction'>110/151</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">68.96% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/56</span>
35
+ <span class='fraction'>40/58</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">69.23% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/13</span>
42
+ <span class='fraction'>9/13</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">72.48% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/149</span>
49
+ <span class='fraction'>108/149</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>
@@ -573,7 +573,9 @@
573
573
  <a name='L508'></a><a href='#L508'>508</a>
574
574
  <a name='L509'></a><a href='#L509'>509</a>
575
575
  <a name='L510'></a><a href='#L510'>510</a>
576
- <a name='L511'></a><a href='#L511'>511</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">8x</span>
577
579
  <span class="cline-any cline-neutral">&nbsp;</span>
578
580
  <span class="cline-any cline-neutral">&nbsp;</span>
579
581
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -581,9 +583,9 @@
581
583
  <span class="cline-any cline-neutral">&nbsp;</span>
582
584
  <span class="cline-any cline-neutral">&nbsp;</span>
583
585
  <span class="cline-any cline-neutral">&nbsp;</span>
584
- <span class="cline-any cline-no">&nbsp;</span>
585
- <span class="cline-any cline-no">&nbsp;</span>
586
- <span class="cline-any cline-no">&nbsp;</span>
586
+ <span class="cline-any cline-yes">8x</span>
587
+ <span class="cline-any cline-yes">8x</span>
588
+ <span class="cline-any cline-yes">8x</span>
587
589
  <span class="cline-any cline-neutral">&nbsp;</span>
588
590
  <span class="cline-any cline-neutral">&nbsp;</span>
589
591
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -594,77 +596,77 @@
594
596
  <span class="cline-any cline-neutral">&nbsp;</span>
595
597
  <span class="cline-any cline-neutral">&nbsp;</span>
596
598
  <span class="cline-any cline-neutral">&nbsp;</span>
597
- <span class="cline-any cline-no">&nbsp;</span>
599
+ <span class="cline-any cline-yes">8x</span>
598
600
  <span class="cline-any cline-neutral">&nbsp;</span>
599
601
  <span class="cline-any cline-neutral">&nbsp;</span>
600
602
  <span class="cline-any cline-neutral">&nbsp;</span>
601
- <span class="cline-any cline-no">&nbsp;</span>
602
- <span class="cline-any cline-no">&nbsp;</span>
603
+ <span class="cline-any cline-yes">8x</span>
604
+ <span class="cline-any cline-yes">8x</span>
603
605
  <span class="cline-any cline-neutral">&nbsp;</span>
604
606
  <span class="cline-any cline-neutral">&nbsp;</span>
605
607
  <span class="cline-any cline-neutral">&nbsp;</span>
606
- <span class="cline-any cline-no">&nbsp;</span>
607
- <span class="cline-any cline-no">&nbsp;</span>
608
- <span class="cline-any cline-no">&nbsp;</span>
609
- <span class="cline-any cline-no">&nbsp;</span>
608
+ <span class="cline-any cline-yes">8x</span>
609
+ <span class="cline-any cline-yes">8x</span>
610
+ <span class="cline-any cline-yes">8x</span>
611
+ <span class="cline-any cline-yes">8x</span>
610
612
  <span class="cline-any cline-neutral">&nbsp;</span>
611
613
  <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-no">&nbsp;</span>
613
- <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-yes">8x</span>
615
+ <span class="cline-any cline-yes">16x</span>
614
616
  <span class="cline-any cline-neutral">&nbsp;</span>
615
617
  <span class="cline-any cline-neutral">&nbsp;</span>
616
618
  <span class="cline-any cline-neutral">&nbsp;</span>
617
- <span class="cline-any cline-no">&nbsp;</span>
619
+ <span class="cline-any cline-yes">16x</span>
618
620
  <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-no">&nbsp;</span>
621
+ <span class="cline-any cline-yes">16x</span>
620
622
  <span class="cline-any cline-neutral">&nbsp;</span>
621
- <span class="cline-any cline-no">&nbsp;</span>
622
- <span class="cline-any cline-no">&nbsp;</span>
623
- <span class="cline-any cline-no">&nbsp;</span>
624
- <span class="cline-any cline-no">&nbsp;</span>
625
- <span class="cline-any cline-no">&nbsp;</span>
626
- <span class="cline-any cline-no">&nbsp;</span>
627
- <span class="cline-any cline-no">&nbsp;</span>
628
- <span class="cline-any cline-no">&nbsp;</span>
623
+ <span class="cline-any cline-yes">16x</span>
624
+ <span class="cline-any cline-yes">16x</span>
625
+ <span class="cline-any cline-yes">16x</span>
626
+ <span class="cline-any cline-yes">16x</span>
627
+ <span class="cline-any cline-yes">16x</span>
628
+ <span class="cline-any cline-yes">16x</span>
629
+ <span class="cline-any cline-yes">16x</span>
630
+ <span class="cline-any cline-yes">16x</span>
629
631
  <span class="cline-any cline-neutral">&nbsp;</span>
630
632
  <span class="cline-any cline-neutral">&nbsp;</span>
631
633
  <span class="cline-any cline-neutral">&nbsp;</span>
632
634
  <span class="cline-any cline-neutral">&nbsp;</span>
633
635
  <span class="cline-any cline-neutral">&nbsp;</span>
634
636
  <span class="cline-any cline-neutral">&nbsp;</span>
635
- <span class="cline-any cline-no">&nbsp;</span>
636
- <span class="cline-any cline-no">&nbsp;</span>
637
+ <span class="cline-any cline-yes">9x</span>
638
+ <span class="cline-any cline-yes">9x</span>
637
639
  <span class="cline-any cline-neutral">&nbsp;</span>
638
- <span class="cline-any cline-no">&nbsp;</span>
639
- <span class="cline-any cline-no">&nbsp;</span>
640
+ <span class="cline-any cline-yes">9x</span>
641
+ <span class="cline-any cline-yes">1x</span>
640
642
  <span class="cline-any cline-neutral">&nbsp;</span>
641
643
  <span class="cline-any cline-neutral">&nbsp;</span>
642
644
  <span class="cline-any cline-neutral">&nbsp;</span>
643
- <span class="cline-any cline-no">&nbsp;</span>
644
- <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-yes">1x</span>
646
+ <span class="cline-any cline-yes">1x</span>
645
647
  <span class="cline-any cline-neutral">&nbsp;</span>
646
648
  <span class="cline-any cline-neutral">&nbsp;</span>
647
- <span class="cline-any cline-no">&nbsp;</span>
649
+ <span class="cline-any cline-yes">1x</span>
648
650
  <span class="cline-any cline-neutral">&nbsp;</span>
649
651
  <span class="cline-any cline-neutral">&nbsp;</span>
650
652
  <span class="cline-any cline-neutral">&nbsp;</span>
651
653
  <span class="cline-any cline-neutral">&nbsp;</span>
652
654
  <span class="cline-any cline-neutral">&nbsp;</span>
653
- <span class="cline-any cline-no">&nbsp;</span>
655
+ <span class="cline-any cline-yes">1x</span>
654
656
  <span class="cline-any cline-neutral">&nbsp;</span>
655
- <span class="cline-any cline-no">&nbsp;</span>
657
+ <span class="cline-any cline-yes">1x</span>
656
658
  <span class="cline-any cline-neutral">&nbsp;</span>
657
659
  <span class="cline-any cline-neutral">&nbsp;</span>
658
- <span class="cline-any cline-no">&nbsp;</span>
660
+ <span class="cline-any cline-yes">8x</span>
659
661
  <span class="cline-any cline-neutral">&nbsp;</span>
660
662
  <span class="cline-any cline-neutral">&nbsp;</span>
661
663
  <span class="cline-any cline-neutral">&nbsp;</span>
662
- <span class="cline-any cline-no">&nbsp;</span>
663
- <span class="cline-any cline-no">&nbsp;</span>
664
+ <span class="cline-any cline-yes">19x</span>
665
+ <span class="cline-any cline-yes">17x</span>
664
666
  <span class="cline-any cline-neutral">&nbsp;</span>
665
667
  <span class="cline-any cline-neutral">&nbsp;</span>
666
- <span class="cline-any cline-no">&nbsp;</span>
667
- <span class="cline-any cline-no">&nbsp;</span>
668
+ <span class="cline-any cline-yes">2x</span>
669
+ <span class="cline-any cline-yes">2x</span>
668
670
  <span class="cline-any cline-neutral">&nbsp;</span>
669
671
  <span class="cline-any cline-neutral">&nbsp;</span>
670
672
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -672,7 +674,7 @@
672
674
  <span class="cline-any cline-no">&nbsp;</span>
673
675
  <span class="cline-any cline-neutral">&nbsp;</span>
674
676
  <span class="cline-any cline-neutral">&nbsp;</span>
675
- <span class="cline-any cline-no">&nbsp;</span>
677
+ <span class="cline-any cline-yes">2x</span>
676
678
  <span class="cline-any cline-neutral">&nbsp;</span>
677
679
  <span class="cline-any cline-neutral">&nbsp;</span>
678
680
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -680,20 +682,20 @@
680
682
  <span class="cline-any cline-neutral">&nbsp;</span>
681
683
  <span class="cline-any cline-neutral">&nbsp;</span>
682
684
  <span class="cline-any cline-neutral">&nbsp;</span>
683
- <span class="cline-any cline-no">&nbsp;</span>
684
- <span class="cline-any cline-no">&nbsp;</span>
685
+ <span class="cline-any cline-yes">2x</span>
686
+ <span class="cline-any cline-yes">2x</span>
685
687
  <span class="cline-any cline-neutral">&nbsp;</span>
686
688
  <span class="cline-any cline-neutral">&nbsp;</span>
687
- <span class="cline-any cline-no">&nbsp;</span>
689
+ <span class="cline-any cline-yes">2x</span>
688
690
  <span class="cline-any cline-no">&nbsp;</span>
689
691
  <span class="cline-any cline-neutral">&nbsp;</span>
690
692
  <span class="cline-any cline-neutral">&nbsp;</span>
691
- <span class="cline-any cline-no">&nbsp;</span>
693
+ <span class="cline-any cline-yes">2x</span>
692
694
  <span class="cline-any cline-neutral">&nbsp;</span>
693
695
  <span class="cline-any cline-neutral">&nbsp;</span>
694
696
  <span class="cline-any cline-neutral">&nbsp;</span>
695
697
  <span class="cline-any cline-neutral">&nbsp;</span>
696
- <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-yes">2x</span>
697
699
  <span class="cline-any cline-neutral">&nbsp;</span>
698
700
  <span class="cline-any cline-neutral">&nbsp;</span>
699
701
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -705,7 +707,7 @@
705
707
  <span class="cline-any cline-neutral">&nbsp;</span>
706
708
  <span class="cline-any cline-neutral">&nbsp;</span>
707
709
  <span class="cline-any cline-neutral">&nbsp;</span>
708
- <span class="cline-any cline-no">&nbsp;</span>
710
+ <span class="cline-any cline-yes">10x</span>
709
711
  <span class="cline-any cline-neutral">&nbsp;</span>
710
712
  <span class="cline-any cline-neutral">&nbsp;</span>
711
713
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -717,20 +719,20 @@
717
719
  <span class="cline-any cline-neutral">&nbsp;</span>
718
720
  <span class="cline-any cline-neutral">&nbsp;</span>
719
721
  <span class="cline-any cline-neutral">&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-yes">10x</span>
723
+ <span class="cline-any cline-yes">1x</span>
722
724
  <span class="cline-any cline-neutral">&nbsp;</span>
723
725
  <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-no">&nbsp;</span>
726
+ <span class="cline-any cline-yes">9x</span>
727
+ <span class="cline-any cline-yes">9x</span>
728
+ <span class="cline-any cline-yes">9x</span>
727
729
  <span class="cline-any cline-neutral">&nbsp;</span>
728
- <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-yes">9x</span>
729
731
  <span class="cline-any cline-neutral">&nbsp;</span>
730
732
  <span class="cline-any cline-neutral">&nbsp;</span>
731
733
  <span class="cline-any cline-neutral">&nbsp;</span>
732
- <span class="cline-any cline-no">&nbsp;</span>
733
- <span class="cline-any cline-no">&nbsp;</span>
734
+ <span class="cline-any cline-yes">9x</span>
735
+ <span class="cline-any cline-yes">9x</span>
734
736
  <span class="cline-any cline-no">&nbsp;</span>
735
737
  <span class="cline-any cline-neutral">&nbsp;</span>
736
738
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -742,17 +744,17 @@
742
744
  <span class="cline-any cline-neutral">&nbsp;</span>
743
745
  <span class="cline-any cline-neutral">&nbsp;</span>
744
746
  <span class="cline-any cline-neutral">&nbsp;</span>
745
- <span class="cline-any cline-no">&nbsp;</span>
747
+ <span class="cline-any cline-yes">9x</span>
746
748
  <span class="cline-any cline-neutral">&nbsp;</span>
747
749
  <span class="cline-any cline-neutral">&nbsp;</span>
748
- <span class="cline-any cline-no">&nbsp;</span>
750
+ <span class="cline-any cline-yes">9x</span>
749
751
  <span class="cline-any cline-neutral">&nbsp;</span>
750
752
  <span class="cline-any cline-neutral">&nbsp;</span>
751
753
  <span class="cline-any cline-neutral">&nbsp;</span>
752
754
  <span class="cline-any cline-neutral">&nbsp;</span>
753
755
  <span class="cline-any cline-neutral">&nbsp;</span>
754
756
  <span class="cline-any cline-neutral">&nbsp;</span>
755
- <span class="cline-any cline-no">&nbsp;</span>
757
+ <span class="cline-any cline-yes">9x</span>
756
758
  <span class="cline-any cline-neutral">&nbsp;</span>
757
759
  <span class="cline-any cline-neutral">&nbsp;</span>
758
760
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -761,34 +763,34 @@
761
763
  <span class="cline-any cline-neutral">&nbsp;</span>
762
764
  <span class="cline-any cline-neutral">&nbsp;</span>
763
765
  <span class="cline-any cline-neutral">&nbsp;</span>
764
- <span class="cline-any cline-no">&nbsp;</span>
765
766
  <span class="cline-any cline-neutral">&nbsp;</span>
767
+ <span class="cline-any cline-yes">9x</span>
766
768
  <span class="cline-any cline-neutral">&nbsp;</span>
767
- <span class="cline-any cline-no">&nbsp;</span>
768
769
  <span class="cline-any cline-neutral">&nbsp;</span>
770
+ <span class="cline-any cline-yes">9x</span>
769
771
  <span class="cline-any cline-neutral">&nbsp;</span>
770
- <span class="cline-any cline-no">&nbsp;</span>
771
- <span class="cline-any cline-no">&nbsp;</span>
772
772
  <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-yes">9x</span>
774
+ <span class="cline-any cline-yes">5x</span>
773
775
  <span class="cline-any cline-neutral">&nbsp;</span>
774
776
  <span class="cline-any cline-neutral">&nbsp;</span>
775
- <span class="cline-any cline-no">&nbsp;</span>
776
- <span class="cline-any cline-no">&nbsp;</span>
777
777
  <span class="cline-any cline-neutral">&nbsp;</span>
778
+ <span class="cline-any cline-yes">4x</span>
779
+ <span class="cline-any cline-yes">2x</span>
778
780
  <span class="cline-any cline-neutral">&nbsp;</span>
779
- <span class="cline-any cline-no">&nbsp;</span>
780
781
  <span class="cline-any cline-neutral">&nbsp;</span>
781
- <span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-yes">2x</span>
782
783
  <span class="cline-any cline-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-yes">1x</span>
783
785
  <span class="cline-any cline-neutral">&nbsp;</span>
784
786
  <span class="cline-any cline-neutral">&nbsp;</span>
785
- <span class="cline-any cline-no">&nbsp;</span>
786
787
  <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-yes">1x</span>
787
789
  <span class="cline-any cline-neutral">&nbsp;</span>
788
790
  <span class="cline-any cline-neutral">&nbsp;</span>
789
791
  <span class="cline-any cline-neutral">&nbsp;</span>
790
- <span class="cline-any cline-no">&nbsp;</span>
791
792
  <span class="cline-any cline-neutral">&nbsp;</span>
793
+ <span class="cline-any cline-yes">7x</span>
792
794
  <span class="cline-any cline-neutral">&nbsp;</span>
793
795
  <span class="cline-any cline-neutral">&nbsp;</span>
794
796
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -797,23 +799,24 @@
797
799
  <span class="cline-any cline-neutral">&nbsp;</span>
798
800
  <span class="cline-any cline-neutral">&nbsp;</span>
799
801
  <span class="cline-any cline-neutral">&nbsp;</span>
800
- <span class="cline-any cline-no">&nbsp;</span>
802
+ <span class="cline-any cline-neutral">&nbsp;</span>
803
+ <span class="cline-any cline-yes">7x</span>
801
804
  <span class="cline-any cline-no">&nbsp;</span>
802
805
  <span class="cline-any cline-neutral">&nbsp;</span>
803
806
  <span class="cline-any cline-neutral">&nbsp;</span>
804
807
  <span class="cline-any cline-neutral">&nbsp;</span>
805
808
  <span class="cline-any cline-neutral">&nbsp;</span>
806
- <span class="cline-any cline-no">&nbsp;</span>
809
+ <span class="cline-any cline-yes">7x</span>
807
810
  <span class="cline-any cline-neutral">&nbsp;</span>
808
811
  <span class="cline-any cline-neutral">&nbsp;</span>
809
812
  <span class="cline-any cline-neutral">&nbsp;</span>
810
813
  <span class="cline-any cline-neutral">&nbsp;</span>
811
814
  <span class="cline-any cline-neutral">&nbsp;</span>
812
815
  <span class="cline-any cline-neutral">&nbsp;</span>
813
- <span class="cline-any cline-no">&nbsp;</span>
816
+ <span class="cline-any cline-yes">12x</span>
814
817
  <span class="cline-any cline-neutral">&nbsp;</span>
815
818
  <span class="cline-any cline-neutral">&nbsp;</span>
816
- <span class="cline-any cline-no">&nbsp;</span>
819
+ <span class="cline-any cline-yes">12x</span>
817
820
  <span class="cline-any cline-neutral">&nbsp;</span>
818
821
  <span class="cline-any cline-neutral">&nbsp;</span>
819
822
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -825,42 +828,42 @@
825
828
  <span class="cline-any cline-neutral">&nbsp;</span>
826
829
  <span class="cline-any cline-neutral">&nbsp;</span>
827
830
  <span class="cline-any cline-neutral">&nbsp;</span>
828
- <span class="cline-any cline-no">&nbsp;</span>
829
- <span class="cline-any cline-no">&nbsp;</span>
831
+ <span class="cline-any cline-yes">12x</span>
832
+ <span class="cline-any cline-yes">1x</span>
830
833
  <span class="cline-any cline-neutral">&nbsp;</span>
831
834
  <span class="cline-any cline-neutral">&nbsp;</span>
832
- <span class="cline-any cline-no">&nbsp;</span>
833
- <span class="cline-any cline-no">&nbsp;</span>
834
- <span class="cline-any cline-no">&nbsp;</span>
835
+ <span class="cline-any cline-yes">11x</span>
836
+ <span class="cline-any cline-yes">11x</span>
837
+ <span class="cline-any cline-yes">11x</span>
835
838
  <span class="cline-any cline-neutral">&nbsp;</span>
836
- <span class="cline-any cline-no">&nbsp;</span>
839
+ <span class="cline-any cline-yes">11x</span>
837
840
  <span class="cline-any cline-neutral">&nbsp;</span>
838
841
  <span class="cline-any cline-neutral">&nbsp;</span>
839
842
  <span class="cline-any cline-neutral">&nbsp;</span>
840
- <span class="cline-any cline-no">&nbsp;</span>
841
- <span class="cline-any cline-no">&nbsp;</span>
842
- <span class="cline-any cline-no">&nbsp;</span>
843
+ <span class="cline-any cline-yes">11x</span>
844
+ <span class="cline-any cline-yes">11x</span>
845
+ <span class="cline-any cline-yes">4x</span>
843
846
  <span class="cline-any cline-neutral">&nbsp;</span>
844
847
  <span class="cline-any cline-neutral">&nbsp;</span>
845
- <span class="cline-any cline-no">&nbsp;</span>
846
- <span class="cline-any cline-no">&nbsp;</span>
848
+ <span class="cline-any cline-yes">4x</span>
849
+ <span class="cline-any cline-yes">1x</span>
847
850
  <span class="cline-any cline-neutral">&nbsp;</span>
848
851
  <span class="cline-any cline-neutral">&nbsp;</span>
849
852
  <span class="cline-any cline-neutral">&nbsp;</span>
850
853
  <span class="cline-any cline-neutral">&nbsp;</span>
851
854
  <span class="cline-any cline-neutral">&nbsp;</span>
852
855
  <span class="cline-any cline-neutral">&nbsp;</span>
853
- <span class="cline-any cline-no">&nbsp;</span>
856
+ <span class="cline-any cline-yes">10x</span>
854
857
  <span class="cline-any cline-neutral">&nbsp;</span>
855
858
  <span class="cline-any cline-neutral">&nbsp;</span>
856
- <span class="cline-any cline-no">&nbsp;</span>
859
+ <span class="cline-any cline-yes">10x</span>
857
860
  <span class="cline-any cline-neutral">&nbsp;</span>
858
861
  <span class="cline-any cline-neutral">&nbsp;</span>
859
862
  <span class="cline-any cline-neutral">&nbsp;</span>
860
863
  <span class="cline-any cline-neutral">&nbsp;</span>
861
864
  <span class="cline-any cline-neutral">&nbsp;</span>
862
865
  <span class="cline-any cline-neutral">&nbsp;</span>
863
- <span class="cline-any cline-no">&nbsp;</span>
866
+ <span class="cline-any cline-yes">10x</span>
864
867
  <span class="cline-any cline-neutral">&nbsp;</span>
865
868
  <span class="cline-any cline-neutral">&nbsp;</span>
866
869
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -872,17 +875,17 @@
872
875
  <span class="cline-any cline-neutral">&nbsp;</span>
873
876
  <span class="cline-any cline-neutral">&nbsp;</span>
874
877
  <span class="cline-any cline-neutral">&nbsp;</span>
875
- <span class="cline-any cline-no">&nbsp;</span>
876
- <span class="cline-any cline-no">&nbsp;</span>
878
+ <span class="cline-any cline-yes">10x</span>
879
+ <span class="cline-any cline-yes">10x</span>
877
880
  <span class="cline-any cline-neutral">&nbsp;</span>
878
881
  <span class="cline-any cline-neutral">&nbsp;</span>
879
882
  <span class="cline-any cline-neutral">&nbsp;</span>
880
- <span class="cline-any cline-no">&nbsp;</span>
883
+ <span class="cline-any cline-yes">10x</span>
881
884
  <span class="cline-any cline-neutral">&nbsp;</span>
882
885
  <span class="cline-any cline-neutral">&nbsp;</span>
883
- <span class="cline-any cline-no">&nbsp;</span>
886
+ <span class="cline-any cline-yes">10x</span>
884
887
  <span class="cline-any cline-neutral">&nbsp;</span>
885
- <span class="cline-any cline-no">&nbsp;</span>
888
+ <span class="cline-any cline-yes">10x</span>
886
889
  <span class="cline-any cline-neutral">&nbsp;</span>
887
890
  <span class="cline-any cline-neutral">&nbsp;</span>
888
891
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -893,45 +896,45 @@
893
896
  <span class="cline-any cline-neutral">&nbsp;</span>
894
897
  <span class="cline-any cline-neutral">&nbsp;</span>
895
898
  <span class="cline-any cline-neutral">&nbsp;</span>
896
- <span class="cline-any cline-no">&nbsp;</span>
899
+ <span class="cline-any cline-yes">11x</span>
897
900
  <span class="cline-any cline-neutral">&nbsp;</span>
898
901
  <span class="cline-any cline-neutral">&nbsp;</span>
899
902
  <span class="cline-any cline-neutral">&nbsp;</span>
900
- <span class="cline-any cline-no">&nbsp;</span>
903
+ <span class="cline-any cline-yes">11x</span>
901
904
  <span class="cline-any cline-neutral">&nbsp;</span>
902
905
  <span class="cline-any cline-neutral">&nbsp;</span>
903
906
  <span class="cline-any cline-neutral">&nbsp;</span>
904
- <span class="cline-any cline-no">&nbsp;</span>
905
- <span class="cline-any cline-no">&nbsp;</span>
907
+ <span class="cline-any cline-yes">11x</span>
908
+ <span class="cline-any cline-yes">2x</span>
906
909
  <span class="cline-any cline-neutral">&nbsp;</span>
907
910
  <span class="cline-any cline-neutral">&nbsp;</span>
908
911
  <span class="cline-any cline-neutral">&nbsp;</span>
909
- <span class="cline-any cline-no">&nbsp;</span>
912
+ <span class="cline-any cline-yes">9x</span>
910
913
  <span class="cline-any cline-neutral">&nbsp;</span>
911
- <span class="cline-any cline-no">&nbsp;</span>
914
+ <span class="cline-any cline-yes">9x</span>
912
915
  <span class="cline-any cline-neutral">&nbsp;</span>
913
- <span class="cline-any cline-no">&nbsp;</span>
916
+ <span class="cline-any cline-yes">9x</span>
914
917
  <span class="cline-any cline-neutral">&nbsp;</span>
915
918
  <span class="cline-any cline-neutral">&nbsp;</span>
916
919
  <span class="cline-any cline-neutral">&nbsp;</span>
917
- <span class="cline-any cline-no">&nbsp;</span>
920
+ <span class="cline-any cline-yes">9x</span>
918
921
  <span class="cline-any cline-neutral">&nbsp;</span>
919
- <span class="cline-any cline-no">&nbsp;</span>
920
- <span class="cline-any cline-no">&nbsp;</span>
922
+ <span class="cline-any cline-yes">9x</span>
923
+ <span class="cline-any cline-yes">9x</span>
921
924
  <span class="cline-any cline-neutral">&nbsp;</span>
922
925
  <span class="cline-any cline-neutral">&nbsp;</span>
923
926
  <span class="cline-any cline-neutral">&nbsp;</span>
924
- <span class="cline-any cline-no">&nbsp;</span>
925
- <span class="cline-any cline-no">&nbsp;</span>
927
+ <span class="cline-any cline-yes">9x</span>
928
+ <span class="cline-any cline-yes">4x</span>
926
929
  <span class="cline-any cline-neutral">&nbsp;</span>
927
930
  <span class="cline-any cline-neutral">&nbsp;</span>
928
931
  <span class="cline-any cline-neutral">&nbsp;</span>
929
- <span class="cline-any cline-no">&nbsp;</span>
930
- <span class="cline-any cline-no">&nbsp;</span>
932
+ <span class="cline-any cline-yes">5x</span>
933
+ <span class="cline-any cline-yes">2x</span>
931
934
  <span class="cline-any cline-neutral">&nbsp;</span>
932
935
  <span class="cline-any cline-neutral">&nbsp;</span>
933
- <span class="cline-any cline-no">&nbsp;</span>
934
- <span class="cline-any cline-no">&nbsp;</span>
936
+ <span class="cline-any cline-yes">3x</span>
937
+ <span class="cline-any cline-yes">3x</span>
935
938
  <span class="cline-any cline-neutral">&nbsp;</span>
936
939
  <span class="cline-any cline-neutral">&nbsp;</span>
937
940
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -940,7 +943,7 @@
940
943
  <span class="cline-any cline-neutral">&nbsp;</span>
941
944
  <span class="cline-any cline-neutral">&nbsp;</span>
942
945
  <span class="cline-any cline-neutral">&nbsp;</span>
943
- <span class="cline-any cline-no">&nbsp;</span>
946
+ <span class="cline-any cline-yes">8x</span>
944
947
  <span class="cline-any cline-neutral">&nbsp;</span>
945
948
  <span class="cline-any cline-neutral">&nbsp;</span>
946
949
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -950,15 +953,15 @@
950
953
  <span class="cline-any cline-neutral">&nbsp;</span>
951
954
  <span class="cline-any cline-neutral">&nbsp;</span>
952
955
  <span class="cline-any cline-neutral">&nbsp;</span>
953
- <span class="cline-any cline-no">&nbsp;</span>
956
+ <span class="cline-any cline-yes">8x</span>
954
957
  <span class="cline-any cline-no">&nbsp;</span>
955
958
  <span class="cline-any cline-neutral">&nbsp;</span>
956
959
  <span class="cline-any cline-neutral">&nbsp;</span>
957
960
  <span class="cline-any cline-neutral">&nbsp;</span>
958
- <span class="cline-any cline-no">&nbsp;</span>
961
+ <span class="cline-any cline-yes">8x</span>
959
962
  <span class="cline-any cline-neutral">&nbsp;</span>
960
963
  <span class="cline-any cline-neutral">&nbsp;</span>
961
- <span class="cline-any cline-no">&nbsp;</span>
964
+ <span class="cline-any cline-yes">8x</span>
962
965
  <span class="cline-any cline-neutral">&nbsp;</span>
963
966
  <span class="cline-any cline-neutral">&nbsp;</span>
964
967
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -1083,7 +1086,8 @@
1083
1086
  <span class="cline-any cline-neutral">&nbsp;</span>
1084
1087
  <span class="cline-any cline-neutral">&nbsp;</span>
1085
1088
  <span class="cline-any cline-neutral">&nbsp;</span>
1086
- <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>
1089
+ <span class="cline-any cline-neutral">&nbsp;</span>
1090
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import {
1087
1091
  Injectable,
1088
1092
  NotFoundException,
1089
1093
  BadRequestException,
@@ -1091,9 +1095,9 @@
1091
1095
  forwardRef,
1092
1096
  Inject,
1093
1097
  } from '@nestjs/common';
1094
- <span class="cstat-no" title="statement not covered" >import { InjectRepository } from '@nestjs/typeorm';</span>
1095
- <span class="cstat-no" title="statement not covered" >import { Repository } from 'typeorm';</span>
1096
- <span class="cstat-no" title="statement not covered" >import {</span>
1098
+ import { InjectRepository } from '@nestjs/typeorm';
1099
+ import { Repository } from 'typeorm';
1100
+ import {
1097
1101
  Session,
1098
1102
  SessionInput,
1099
1103
  ContextTemplate,
@@ -1104,77 +1108,77 @@ import {
1104
1108
  PrepareLlmInputResponseDto,
1105
1109
  SubmitLlmOutputDto,
1106
1110
  } from './dto/session-input.dto';
1107
- <span class="cstat-no" title="statement not covered" >import {</span>
1111
+ import {
1108
1112
  AIActionsService,
1109
1113
  AIActionStatus,
1110
1114
  } from '../ai-actions/ai-actions.service';
1111
- <span class="cstat-no" title="statement not covered" >import { SystemPromptsService } from '../system-prompts/system-prompts.service';</span>
1112
- <span class="cstat-no" title="statement not covered" >import {</span>
1115
+ import { SystemPromptsService } from '../system-prompts/system-prompts.service';
1116
+ import {
1113
1117
  TITLE_END_TAG,
1114
1118
  TITLE_START_TAG,
1115
1119
  } from '../llm-response-parser/parsing.constants';
1116
- <span class="cstat-no" title="statement not covered" >import { AIActionCreationService } from '../ai-actions/ai-action-creation.service';</span>
1117
- <span class="cstat-no" title="statement not covered" >import { SessionInputContextService } from './session-input-context.service';</span>
1118
- <span class="cstat-no" title="statement not covered" >import { ApplicationStateService } from '../application-state/application-state.service';</span>
1119
- <span class="cstat-no" title="statement not covered" >import { OrchestrationService } from '../orchestration/orchestration.service';</span>
1120
+ import { AIActionCreationService } from '../ai-actions/ai-action-creation.service';
1121
+ import { SessionInputContextService } from './session-input-context.service';
1122
+ import { ApplicationStateService } from '../application-state/application-state.service';
1123
+ import { OrchestrationService } from '../orchestration/orchestration.service';
1120
1124
  &nbsp;
1121
1125
  @Injectable()
1122
- export class <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" >SessionInputsService<span class="cstat-no" title="statement not covered" > </span>{</span></span>
1123
- private readonly <span class="cstat-no" title="statement not covered" >logger = new Logger(SessionInputsService.name);</span>
1126
+ export class SessionInputsService {
1127
+ private readonly logger = new Logger(SessionInputsService.name);
1124
1128
  &nbsp;
1125
- <span class="fstat-no" title="function not covered" > constructor(</span>
1129
+ constructor(
1126
1130
  @InjectRepository(Session)
1127
- private <span class="cstat-no" title="statement not covered" >sessionsRepository: R</span>epository&lt;Session&gt;,
1131
+ private sessionsRepository: Repository&lt;Session&gt;,
1128
1132
  @InjectRepository(SessionInput)
1129
- private <span class="cstat-no" title="statement not covered" >sessionInputsRepository: R</span>epository&lt;SessionInput&gt;,
1133
+ private sessionInputsRepository: Repository&lt;SessionInput&gt;,
1130
1134
  @InjectRepository(ContextTemplate)
1131
- private <span class="cstat-no" title="statement not covered" >contextTemplatesRepository: R</span>epository&lt;ContextTemplate&gt;,
1132
- private readonly <span class="cstat-no" title="statement not covered" >aiActionsService: A</span>IActionsService,
1133
- private readonly <span class="cstat-no" title="statement not covered" >aiActionCreationService: A</span>IActionCreationService,
1134
- private readonly <span class="cstat-no" title="statement not covered" >systemPromptsService: S</span>ystemPromptsService,
1135
- private readonly <span class="cstat-no" title="statement not covered" >sessionInputContextService: S</span>essionInputContextService,
1136
- private readonly <span class="cstat-no" title="statement not covered" >applicationStateService: A</span>pplicationStateService,
1137
- @Inject(forwardRef(<span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >OrchestrationService)</span>)
1138
- private readonly <span class="cstat-no" title="statement not covered" >orchestrationService: O</span>rchestrationService,
1135
+ private contextTemplatesRepository: Repository&lt;ContextTemplate&gt;,
1136
+ private readonly aiActionsService: AIActionsService,
1137
+ private readonly aiActionCreationService: AIActionCreationService,
1138
+ private readonly systemPromptsService: SystemPromptsService,
1139
+ private readonly sessionInputContextService: SessionInputContextService,
1140
+ private readonly applicationStateService: ApplicationStateService,
1141
+ @Inject(forwardRef(() =&gt; OrchestrationService))
1142
+ private readonly orchestrationService: OrchestrationService,
1139
1143
  ) {}
1140
1144
  &nbsp;
1141
- private <span class="fstat-no" title="function not covered" >async </span>extractAndUpdateSessionTitle(
1145
+ private async extractAndUpdateSessionTitle(
1142
1146
  sessionId: string,
1143
1147
  rawResponse: string,
1144
1148
  ): Promise&lt;string&gt; {
1145
- const startIndex = <span class="cstat-no" title="statement not covered" >rawResponse.indexOf(TITLE_START_TAG);</span>
1146
- const endIndex = <span class="cstat-no" title="statement not covered" >rawResponse.indexOf(TITLE_END_TAG);</span>
1149
+ const startIndex = rawResponse.indexOf(TITLE_START_TAG);
1150
+ const endIndex = rawResponse.indexOf(TITLE_END_TAG);
1147
1151
  &nbsp;
1148
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (startIndex !== -1 &amp;&amp; endIndex !== -1 &amp;&amp; endIndex &gt; startIndex) {</span>
1149
- const title = <span class="cstat-no" title="statement not covered" >rawResponse</span>
1152
+ if (startIndex !== -1 &amp;&amp; endIndex !== -1 &amp;&amp; endIndex &gt; startIndex) {
1153
+ const title = rawResponse
1150
1154
  .substring(startIndex + TITLE_START_TAG.length, endIndex)
1151
1155
  .trim();
1152
1156
  &nbsp;
1153
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (title) {</span>
1154
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1157
+ if (title) {
1158
+ this.logger.log(
1155
1159
  `Extracted session title: "${title}" for session ID ${sessionId}`,
1156
1160
  );
1157
- <span class="cstat-no" title="statement not covered" > await this.sessionsRepository.update(sessionId, {</span>
1161
+ await this.sessionsRepository.update(sessionId, {
1158
1162
  session_title: title,
1159
1163
  });
1160
1164
  }
1161
1165
  &nbsp;
1162
1166
  const cleanedResponse =
1163
- <span class="cstat-no" title="statement not covered" > rawResponse.substring(0, startIndex) +</span>
1167
+ rawResponse.substring(0, startIndex) +
1164
1168
  rawResponse.substring(endIndex + TITLE_END_TAG.length);
1165
- <span class="cstat-no" title="statement not covered" > return cleanedResponse.trim();</span>
1169
+ return cleanedResponse.trim();
1166
1170
  }
1167
1171
  &nbsp;
1168
- <span class="cstat-no" title="statement not covered" > return rawResponse;</span>
1172
+ return rawResponse;
1169
1173
  }
1170
1174
  &nbsp;
1171
- private <span class="fstat-no" title="function not covered" >generatePreviousActionsSummary(</span>session: Session): string {
1172
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!session.sessionInputs || session.sessionInputs.length === 0) {</span>
1173
- <span class="cstat-no" title="statement not covered" > return '';</span>
1175
+ private generatePreviousActionsSummary(session: Session): string {
1176
+ if (!session.sessionInputs || session.sessionInputs.length === 0) {
1177
+ return '';
1174
1178
  }
1175
1179
  &nbsp;
1176
- const lastInput = <span class="cstat-no" title="statement not covered" >session.sessionInputs[session.sessionInputs.length - 1];</span>
1177
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
1180
+ const lastInput = session.sessionInputs[session.sessionInputs.length - 1];
1181
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (
1178
1182
  !lastInput ||
1179
1183
  !lastInput.aiActions ||
1180
1184
  lastInput.aiActions.length === 0
@@ -1182,7 +1186,7 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
1182
1186
  <span class="cstat-no" title="statement not covered" > return '';</span>
1183
1187
  }
1184
1188
  &nbsp;
1185
- const finalStatuses: string[] = <span class="cstat-no" title="statement not covered" >[</span>
1189
+ const finalStatuses: string[] = [
1186
1190
  AIActionStatus.REJECTED_BEFORE_APPLY,
1187
1191
  AIActionStatus.CONFIRMED_KEPT,
1188
1192
  AIActionStatus.CONFIRMED_REVERTED,
@@ -1190,32 +1194,32 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
1190
1194
  AIActionStatus.REVERT_FAILED,
1191
1195
  ];
1192
1196
  &nbsp;
1193
- const finalActions = <span class="cstat-no" title="statement not covered" >lastInput.aiActions.filter(<span class="fstat-no" title="function not covered" >(a</span>ction: AIAction) =&gt;</span>
1194
- <span class="cstat-no" title="statement not covered" > finalStatuses.includes(action.status),</span>
1197
+ const finalActions = lastInput.aiActions.filter((action: AIAction) =&gt;
1198
+ finalStatuses.includes(action.status),
1195
1199
  );
1196
1200
  &nbsp;
1197
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (finalActions.length === 0) {</span>
1201
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (finalActions.length === 0) {
1198
1202
  <span class="cstat-no" title="statement not covered" > return '';</span>
1199
1203
  }
1200
1204
  &nbsp;
1201
- <span class="cstat-no" title="statement not covered" > return (</span>
1205
+ return (
1202
1206
  'Summary of previous actions:\n' +
1203
1207
  finalActions
1204
1208
  .map(
1205
- <span class="fstat-no" title="function not covered" > (a</span>ction) =&gt;
1206
- <span class="cstat-no" title="statement not covered" > `- ${action.action_type}(${</span>
1207
- action.file_path || action.command_string || 'N/A'
1209
+ (action) =&gt;
1210
+ `- ${action.action_type}(${
1211
+ action.file_path || <span class="branch-1 cbranch-no" title="branch not covered" >action.command_string </span>|| <span class="branch-2 cbranch-no" title="branch not covered" >'N/A'</span>
1208
1212
  }): ${action.status}`,
1209
1213
  )
1210
1214
  .join('\n')
1211
1215
  );
1212
1216
  }
1213
1217
  &nbsp;
1214
- <span class="fstat-no" title="function not covered" > async </span>create(
1218
+ async create(
1215
1219
  sessionId: string,
1216
1220
  createSessionInputDto: CreateSessionInputDto,
1217
1221
  ): Promise&lt;SessionInput&gt; {
1218
- const session = <span class="cstat-no" title="statement not covered" >await this.sessionsRepository.findOne({</span>
1222
+ const session = await this.sessionsRepository.findOne({
1219
1223
  where: { id: sessionId },
1220
1224
  relations: ['systemPrompt', 'sessionInputs', 'sessionInputs.aiActions'],
1221
1225
  order: {
@@ -1227,20 +1231,20 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
1227
1231
  },
1228
1232
  },
1229
1233
  });
1230
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!session) {</span>
1231
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(`Session with ID "${sessionId}" not found`);</span>
1234
+ if (!session) {
1235
+ throw new NotFoundException(`Session with ID "${sessionId}" not found`);
1232
1236
  }
1233
1237
  &nbsp;
1234
- let activeSystemPrompt = <span class="cstat-no" title="statement not covered" >session.systemPrompt;</span>
1235
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!activeSystemPrompt) {</span>
1236
- <span class="cstat-no" title="statement not covered" > activeSystemPrompt = await this.systemPromptsService.findDefault();</span>
1238
+ let activeSystemPrompt = session.systemPrompt;
1239
+ if (!activeSystemPrompt) {
1240
+ activeSystemPrompt = await this.systemPromptsService.findDefault();
1237
1241
  }
1238
- const systemPromptContent = <span class="cstat-no" title="statement not covered" >activeSystemPrompt</span>
1242
+ const systemPromptContent = activeSystemPrompt
1239
1243
  ? activeSystemPrompt.prompt_content
1240
1244
  : '';
1241
1245
  &nbsp;
1242
- let contextTemplate: ContextTemplate | null = <span class="cstat-no" title="statement not covered" >null;</span>
1243
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (createSessionInputDto.context_template_id) {</span>
1246
+ let contextTemplate: ContextTemplate | null = null;
1247
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (createSessionInputDto.context_template_id) {
1244
1248
  <span class="cstat-no" title="statement not covered" > contextTemplate = await this.contextTemplatesRepository.findOneBy({</span>
1245
1249
  id: createSessionInputDto.context_template_id,
1246
1250
  });
@@ -1252,52 +1256,53 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
1252
1256
  }
1253
1257
  &nbsp;
1254
1258
  const previous_actions_summary =
1255
- <span class="cstat-no" title="statement not covered" > this.generatePreviousActionsSummary(session);</span>
1259
+ this.generatePreviousActionsSummary(session);
1256
1260
  &nbsp;
1257
1261
  const generated_context_string =
1258
- <span class="cstat-no" title="statement not covered" > await this.sessionInputContextService.generateContext(</span>
1262
+ await this.sessionInputContextService.generateContext(
1259
1263
  createSessionInputDto,
1260
1264
  contextTemplate,
1261
1265
  systemPromptContent,
1262
1266
  previous_actions_summary,
1263
1267
  );
1264
1268
  &nbsp;
1265
- const newSessionInputEntity = <span class="cstat-no" title="statement not covered" >this.sessionInputsRepository.create({</span>
1269
+ const newSessionInputEntity = this.sessionInputsRepository.create({
1266
1270
  ...createSessionInputDto,
1267
1271
  session: session,
1268
1272
  contextTemplate: contextTemplate,
1269
1273
  generated_context_string: generated_context_string,
1270
1274
  raw_llm_response:
1275
+ createSessionInputDto.raw_llm_response ||
1271
1276
  'This response is generated for a non-manual flow and is not intended to be user-facing.',
1272
1277
  });
1273
1278
  &nbsp;
1274
- const savedSessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.save(</span>
1279
+ const savedSessionInput = await this.sessionInputsRepository.save(
1275
1280
  newSessionInputEntity,
1276
1281
  );
1277
- <span class="cstat-no" title="statement not covered" > await this.applicationStateService.setActiveSessionId(sessionId);</span>
1282
+ await this.applicationStateService.setActiveSessionId(sessionId);
1278
1283
  &nbsp;
1279
1284
  // Process AI Actions based on execution strategy
1280
- <span class="cstat-no" title="statement not covered" > if (createSessionInputDto.execution_strategy === 'review_first') {</span>
1281
- <span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createActionsFromLlmResponse(</span>
1285
+ if (createSessionInputDto.execution_strategy === 'review_first') {
1286
+ await this.aiActionCreationService.createActionsFromLlmResponse(
1282
1287
  savedSessionInput,
1283
1288
  AIActionStatus.PROPOSED,
1284
1289
  );
1285
- } else <span class="cstat-no" title="statement not covered" >if (createSessionInputDto.execution_strategy === 'apply_revert') {</span>
1286
- <span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createAndTentativelyApplyActions(</span>
1290
+ } else if (createSessionInputDto.execution_strategy === 'apply_revert') {
1291
+ await this.aiActionCreationService.createAndTentativelyApplyActions(
1287
1292
  savedSessionInput,
1288
1293
  );
1289
- } else <span class="cstat-no" title="statement not covered" >if (createSessionInputDto.execution_strategy === 'auto_apply') {</span>
1294
+ } else if (createSessionInputDto.execution_strategy === 'auto_apply') {
1290
1295
  // This path is used by the orchestration engine. It will throw on failure.
1291
- <span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createAndAutoApplyActions(</span>
1296
+ await this.aiActionCreationService.createAndAutoApplyActions(
1292
1297
  savedSessionInput,
1293
1298
  );
1294
1299
  } else {
1295
- <span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
1300
+ throw new BadRequestException(
1296
1301
  `Unsupported execution_strategy: ${createSessionInputDto.execution_strategy}`,
1297
1302
  );
1298
1303
  }
1299
1304
  &nbsp;
1300
- const populatedSessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOne({</span>
1305
+ const populatedSessionInput = await this.sessionInputsRepository.findOne({
1301
1306
  where: { id: savedSessionInput.id },
1302
1307
  relations: ['contextTemplate', 'aiActions', 'aiActions.executionLogs'],
1303
1308
  order: {
@@ -1307,23 +1312,23 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
1307
1312
  },
1308
1313
  });
1309
1314
  &nbsp;
1310
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!populatedSessionInput) {</span>
1315
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!populatedSessionInput) {
1311
1316
  <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
1312
1317
  `Failed to retrieve session input with ID "${savedSessionInput.id}" after creating/processing actions.`,
1313
1318
  );
1314
1319
  }
1315
1320
  &nbsp;
1316
- <span class="cstat-no" title="statement not covered" > return populatedSessionInput;</span>
1321
+ return populatedSessionInput;
1317
1322
  }
1318
1323
  &nbsp;
1319
- <span class="fstat-no" title="function not covered" > async </span>prepareLlmInput(
1324
+ async prepareLlmInput(
1320
1325
  sessionId: string,
1321
1326
  createDto: CreateSessionInputDto,
1322
1327
  ): Promise&lt;PrepareLlmInputResponseDto&gt; {
1323
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1328
+ this.logger.log(
1324
1329
  `Preparing LLM input for session ${sessionId} with strategy ${createDto.execution_strategy}`,
1325
1330
  );
1326
- const session = <span class="cstat-no" title="statement not covered" >await this.sessionsRepository.findOne({</span>
1331
+ const session = await this.sessionsRepository.findOne({
1327
1332
  where: { id: sessionId },
1328
1333
  relations: ['systemPrompt', 'sessionInputs', 'sessionInputs.aiActions'],
1329
1334
  order: {
@@ -1335,42 +1340,42 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
1335
1340
  },
1336
1341
  },
1337
1342
  });
1338
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!session) {</span>
1339
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(`Session with ID "${sessionId}" not found`);</span>
1343
+ if (!session) {
1344
+ throw new NotFoundException(`Session with ID "${sessionId}" not found`);
1340
1345
  }
1341
1346
  &nbsp;
1342
- let activeSystemPrompt = <span class="cstat-no" title="statement not covered" >session.systemPrompt;</span>
1343
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!activeSystemPrompt) {</span>
1344
- <span class="cstat-no" title="statement not covered" > activeSystemPrompt = await this.systemPromptsService.findDefault();</span>
1347
+ let activeSystemPrompt = session.systemPrompt;
1348
+ if (!activeSystemPrompt) {
1349
+ activeSystemPrompt = await this.systemPromptsService.findDefault();
1345
1350
  }
1346
- const systemPromptContent = <span class="cstat-no" title="statement not covered" >activeSystemPrompt</span>
1351
+ const systemPromptContent = activeSystemPrompt
1347
1352
  ? activeSystemPrompt.prompt_content
1348
1353
  : '';
1349
1354
  &nbsp;
1350
- let contextTemplate: ContextTemplate | null = <span class="cstat-no" title="statement not covered" >null;</span>
1351
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (createDto.context_template_id) {</span>
1352
- <span class="cstat-no" title="statement not covered" > contextTemplate = await this.contextTemplatesRepository.findOneBy({</span>
1355
+ let contextTemplate: ContextTemplate | null = null;
1356
+ if (createDto.context_template_id) {
1357
+ contextTemplate = await this.contextTemplatesRepository.findOneBy({
1353
1358
  id: createDto.context_template_id,
1354
1359
  });
1355
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!contextTemplate) {</span>
1356
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
1360
+ if (!contextTemplate) {
1361
+ throw new NotFoundException(
1357
1362
  `ContextTemplate with ID "${createDto.context_template_id}" not found`,
1358
1363
  );
1359
1364
  }
1360
1365
  }
1361
1366
  &nbsp;
1362
1367
  const previous_actions_summary =
1363
- <span class="cstat-no" title="statement not covered" > this.generatePreviousActionsSummary(session);</span>
1368
+ this.generatePreviousActionsSummary(session);
1364
1369
  &nbsp;
1365
1370
  const generated_context_string =
1366
- <span class="cstat-no" title="statement not covered" > await this.sessionInputContextService.generateContext(</span>
1371
+ await this.sessionInputContextService.generateContext(
1367
1372
  createDto,
1368
1373
  contextTemplate,
1369
1374
  systemPromptContent,
1370
1375
  previous_actions_summary,
1371
1376
  );
1372
1377
  &nbsp;
1373
- const newSessionInput = <span class="cstat-no" title="statement not covered" >this.sessionInputsRepository.create({</span>
1378
+ const newSessionInput = this.sessionInputsRepository.create({
1374
1379
  session: { id: sessionId },
1375
1380
  user_prompt: createDto.user_prompt,
1376
1381
  context_template_id: createDto.context_template_id || null,
@@ -1382,75 +1387,75 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
1382
1387
  });
1383
1388
  &nbsp;
1384
1389
  const savedSessionInput =
1385
- <span class="cstat-no" title="statement not covered" > await this.sessionInputsRepository.save(newSessionInput);</span>
1386
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1390
+ await this.sessionInputsRepository.save(newSessionInput);
1391
+ this.logger.log(
1387
1392
  `Created SessionInput ${savedSessionInput.id} for manual LLM flow preparation.`,
1388
1393
  );
1389
1394
  &nbsp;
1390
- <span class="cstat-no" title="statement not covered" > await this.applicationStateService.setActiveSessionId(sessionId);</span>
1395
+ await this.applicationStateService.setActiveSessionId(sessionId);
1391
1396
  &nbsp;
1392
1397
  // If an orchestration is running, update its state.
1393
- <span class="cstat-no" title="statement not covered" > this.orchestrationService.onPromptPrepared(savedSessionInput.id);</span>
1398
+ this.orchestrationService.onPromptPrepared(savedSessionInput.id);
1394
1399
  &nbsp;
1395
- <span class="cstat-no" title="statement not covered" > return {</span>
1400
+ return {
1396
1401
  input_id: savedSessionInput.id,
1397
1402
  llm_input_string: generated_context_string,
1398
1403
  };
1399
1404
  }
1400
1405
  &nbsp;
1401
- <span class="fstat-no" title="function not covered" > async </span>submitLlmOutput(
1406
+ async submitLlmOutput(
1402
1407
  sessionId: string,
1403
1408
  inputId: string,
1404
1409
  submitDto: SubmitLlmOutputDto,
1405
1410
  ): Promise&lt;SessionInput&gt; {
1406
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1411
+ this.logger.log(
1407
1412
  `Submitting LLM output for SessionInput ${inputId} in Session ${sessionId}.`,
1408
1413
  );
1409
1414
  &nbsp;
1410
- const sessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOne({</span>
1415
+ const sessionInput = await this.sessionInputsRepository.findOne({
1411
1416
  where: { id: inputId, session_id: sessionId },
1412
1417
  });
1413
1418
  &nbsp;
1414
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput) {</span>
1415
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
1419
+ if (!sessionInput) {
1420
+ throw new NotFoundException(
1416
1421
  `SessionInput with ID "${inputId}" not found in Session "${sessionId}".`,
1417
1422
  );
1418
1423
  }
1419
- <span class="cstat-no" title="statement not covered" > await this.applicationStateService.setActiveSessionId(sessionId);</span>
1424
+ await this.applicationStateService.setActiveSessionId(sessionId);
1420
1425
  &nbsp;
1421
- <span class="cstat-no" title="statement not covered" > await this.aiActionsService.deleteAllByInputId(inputId);</span>
1426
+ await this.aiActionsService.deleteAllByInputId(inputId);
1422
1427
  &nbsp;
1423
- const cleanedLlmResponse = <span class="cstat-no" title="statement not covered" >await this.extractAndUpdateSessionTitle(</span>
1428
+ const cleanedLlmResponse = await this.extractAndUpdateSessionTitle(
1424
1429
  sessionId,
1425
1430
  submitDto.raw_llm_response,
1426
1431
  );
1427
- <span class="cstat-no" title="statement not covered" > sessionInput.raw_llm_response = cleanedLlmResponse;</span>
1432
+ sessionInput.raw_llm_response = cleanedLlmResponse;
1428
1433
  const updatedSessionInput =
1429
- <span class="cstat-no" title="statement not covered" > await this.sessionInputsRepository.save(sessionInput);</span>
1430
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1434
+ await this.sessionInputsRepository.save(sessionInput);
1435
+ this.logger.log(
1431
1436
  `Updated SessionInput ${updatedSessionInput.id} with raw_llm_response.`,
1432
1437
  );
1433
1438
  &nbsp;
1434
- <span class="cstat-no" title="statement not covered" > if (updatedSessionInput.execution_strategy === 'review_first') {</span>
1435
- <span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createActionsFromLlmResponse(</span>
1439
+ if (updatedSessionInput.execution_strategy === 'review_first') {
1440
+ await this.aiActionCreationService.createActionsFromLlmResponse(
1436
1441
  updatedSessionInput,
1437
1442
  AIActionStatus.PROPOSED,
1438
1443
  );
1439
- } else <span class="cstat-no" title="statement not covered" >if (updatedSessionInput.execution_strategy === 'apply_revert') {</span>
1440
- <span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createAndTentativelyApplyActions(</span>
1444
+ } else if (updatedSessionInput.execution_strategy === 'apply_revert') {
1445
+ await this.aiActionCreationService.createAndTentativelyApplyActions(
1441
1446
  updatedSessionInput,
1442
1447
  );
1443
- } else <span class="cstat-no" title="statement not covered" >if (updatedSessionInput.execution_strategy === 'auto_apply') {</span>
1444
- <span class="cstat-no" title="statement not covered" > await this.aiActionCreationService.createAndAutoApplyActions(</span>
1448
+ } else if (updatedSessionInput.execution_strategy === 'auto_apply') {
1449
+ await this.aiActionCreationService.createAndAutoApplyActions(
1445
1450
  updatedSessionInput,
1446
1451
  );
1447
- } else {
1452
+ } else <span class="missing-if-branch" title="else path not taken" >E</span>{
1448
1453
  <span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
1449
1454
  `Unsupported execution_strategy: ${updatedSessionInput.execution_strategy}`,
1450
1455
  );
1451
1456
  }
1452
1457
  &nbsp;
1453
- const populatedSessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOne({</span>
1458
+ const populatedSessionInput = await this.sessionInputsRepository.findOne({
1454
1459
  where: { id: updatedSessionInput.id },
1455
1460
  relations: ['contextTemplate', 'aiActions', 'aiActions.executionLogs'],
1456
1461
  order: {
@@ -1460,15 +1465,15 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
1460
1465
  },
1461
1466
  });
1462
1467
  &nbsp;
1463
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!populatedSessionInput) {</span>
1468
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!populatedSessionInput) {
1464
1469
  <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
1465
1470
  `Failed to retrieve session input with ID "${updatedSessionInput.id}" after processing LLM output.`,
1466
1471
  );
1467
1472
  }
1468
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1473
+ this.logger.log(
1469
1474
  `LLM output processed for SessionInput ${populatedSessionInput.id}, ${populatedSessionInput.aiActions.length} actions generated/processed.`,
1470
1475
  );
1471
- <span class="cstat-no" title="statement not covered" > return populatedSessionInput;</span>
1476
+ return populatedSessionInput;
1472
1477
  }
1473
1478
  &nbsp;
1474
1479
  <span class="fstat-no" title="function not covered" > async </span>createFromRawLlmResponse(
@@ -1593,14 +1598,15 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
1593
1598
  `Deleted SessionInput ${inputId} from Session ${sessionId}.`,
1594
1599
  );
1595
1600
  }
1596
- }</pre></td></tr></table></pre>
1601
+ }
1602
+ &nbsp;</pre></td></tr></table></pre>
1597
1603
 
1598
1604
  <div class='push'></div><!-- for sticky footer -->
1599
1605
  </div><!-- /wrapper -->
1600
1606
  <div class='footer quiet pad2 space-top1 center small'>
1601
1607
  Code coverage generated by
1602
1608
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1603
- at 2025-07-30T23:37:05.373Z
1609
+ at 2025-09-12T19:21:55.945Z
1604
1610
  </div>
1605
1611
  <script src="../../prettify.js"></script>
1606
1612
  <script>