repoburg 1.0.55 → 1.0.57

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 (186) 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/context-generation/context-generation.service.d.ts +2 -2
  169. package/backend/dist/context-generation/context-generation.service.js.map +1 -1
  170. package/backend/dist/orchestration/orchestration.service.js +1 -0
  171. package/backend/dist/orchestration/orchestration.service.js.map +1 -1
  172. package/backend/dist/session-inputs/dto/session-input.dto.d.ts +1 -0
  173. package/backend/dist/session-inputs/dto/session-input.dto.js +5 -0
  174. package/backend/dist/session-inputs/dto/session-input.dto.js.map +1 -1
  175. package/backend/dist/session-inputs/session-input-context.service.js +4 -5
  176. package/backend/dist/session-inputs/session-input-context.service.js.map +1 -1
  177. package/backend/dist/session-inputs/session-inputs.service.js +2 -1
  178. package/backend/dist/session-inputs/session-inputs.service.js.map +1 -1
  179. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  180. package/backend/dist/utils/fuzzy-search.js +13 -4
  181. package/backend/dist/utils/fuzzy-search.js.map +1 -1
  182. package/backend/dist/workspace/workspace.service.d.ts +1 -0
  183. package/backend/dist/workspace/workspace.service.js +14 -3
  184. package/backend/dist/workspace/workspace.service.js.map +1 -1
  185. package/package.json +1 -1
  186. 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">80.55% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/108</span>
28
+ <span class='fraction'>87/108</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">56.25% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/32</span>
35
+ <span class='fraction'>18/32</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">100% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/5</span>
42
+ <span class='fraction'>5/5</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">80.18% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/106</span>
49
+ <span class='fraction'>85/106</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>
@@ -348,45 +348,45 @@
348
348
  <a name='L283'></a><a href='#L283'>283</a>
349
349
  <a name='L284'></a><a href='#L284'>284</a>
350
350
  <a name='L285'></a><a href='#L285'>285</a>
351
- <a name='L286'></a><a href='#L286'>286</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
352
- <span class="cline-any cline-no">&nbsp;</span>
353
- <span class="cline-any cline-no">&nbsp;</span>
354
- <span class="cline-any cline-no">&nbsp;</span>
355
- <span class="cline-any cline-no">&nbsp;</span>
351
+ <a name='L286'></a><a href='#L286'>286</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">7x</span>
352
+ <span class="cline-any cline-yes">7x</span>
353
+ <span class="cline-any cline-yes">7x</span>
354
+ <span class="cline-any cline-yes">7x</span>
355
+ <span class="cline-any cline-yes">7x</span>
356
356
  <span class="cline-any cline-neutral">&nbsp;</span>
357
357
  <span class="cline-any cline-neutral">&nbsp;</span>
358
358
  <span class="cline-any cline-neutral">&nbsp;</span>
359
359
  <span class="cline-any cline-neutral">&nbsp;</span>
360
360
  <span class="cline-any cline-neutral">&nbsp;</span>
361
361
  <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-no">&nbsp;</span>
363
- <span class="cline-any cline-no">&nbsp;</span>
362
+ <span class="cline-any cline-yes">7x</span>
363
+ <span class="cline-any cline-yes">7x</span>
364
364
  <span class="cline-any cline-neutral">&nbsp;</span>
365
365
  <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-no">&nbsp;</span>
367
- <span class="cline-any cline-no">&nbsp;</span>
366
+ <span class="cline-any cline-yes">7x</span>
367
+ <span class="cline-any cline-yes">11x</span>
368
368
  <span class="cline-any cline-neutral">&nbsp;</span>
369
369
  <span class="cline-any cline-neutral">&nbsp;</span>
370
370
  <span class="cline-any cline-neutral">&nbsp;</span>
371
- <span class="cline-any cline-no">&nbsp;</span>
371
+ <span class="cline-any cline-yes">11x</span>
372
372
  <span class="cline-any cline-neutral">&nbsp;</span>
373
- <span class="cline-any cline-no">&nbsp;</span>
374
- <span class="cline-any cline-no">&nbsp;</span>
375
- <span class="cline-any cline-no">&nbsp;</span>
376
- <span class="cline-any cline-no">&nbsp;</span>
373
+ <span class="cline-any cline-yes">11x</span>
374
+ <span class="cline-any cline-yes">11x</span>
375
+ <span class="cline-any cline-yes">11x</span>
376
+ <span class="cline-any cline-yes">11x</span>
377
377
  <span class="cline-any cline-neutral">&nbsp;</span>
378
378
  <span class="cline-any cline-neutral">&nbsp;</span>
379
379
  <span class="cline-any cline-neutral">&nbsp;</span>
380
- <span class="cline-any cline-no">&nbsp;</span>
380
+ <span class="cline-any cline-yes">6x</span>
381
381
  <span class="cline-any cline-neutral">&nbsp;</span>
382
382
  <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-no">&nbsp;</span>
384
- <span class="cline-any cline-no">&nbsp;</span>
383
+ <span class="cline-any cline-yes">6x</span>
384
+ <span class="cline-any cline-yes">1x</span>
385
385
  <span class="cline-any cline-neutral">&nbsp;</span>
386
386
  <span class="cline-any cline-neutral">&nbsp;</span>
387
387
  <span class="cline-any cline-neutral">&nbsp;</span>
388
388
  <span class="cline-any cline-neutral">&nbsp;</span>
389
- <span class="cline-any cline-no">&nbsp;</span>
389
+ <span class="cline-any cline-yes">5x</span>
390
390
  <span class="cline-any cline-neutral">&nbsp;</span>
391
391
  <span class="cline-any cline-neutral">&nbsp;</span>
392
392
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -394,43 +394,43 @@
394
394
  <span class="cline-any cline-neutral">&nbsp;</span>
395
395
  <span class="cline-any cline-neutral">&nbsp;</span>
396
396
  <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-no">&nbsp;</span>
398
- <span class="cline-any cline-no">&nbsp;</span>
397
+ <span class="cline-any cline-yes">5x</span>
398
+ <span class="cline-any cline-yes">1x</span>
399
399
  <span class="cline-any cline-neutral">&nbsp;</span>
400
400
  <span class="cline-any cline-neutral">&nbsp;</span>
401
- <span class="cline-any cline-no">&nbsp;</span>
401
+ <span class="cline-any cline-yes">1x</span>
402
402
  <span class="cline-any cline-neutral">&nbsp;</span>
403
403
  <span class="cline-any cline-neutral">&nbsp;</span>
404
- <span class="cline-any cline-no">&nbsp;</span>
404
+ <span class="cline-any cline-yes">4x</span>
405
405
  <span class="cline-any cline-neutral">&nbsp;</span>
406
- <span class="cline-any cline-no">&nbsp;</span>
407
- <span class="cline-any cline-no">&nbsp;</span>
408
- <span class="cline-any cline-no">&nbsp;</span>
409
- <span class="cline-any cline-no">&nbsp;</span>
406
+ <span class="cline-any cline-yes">4x</span>
407
+ <span class="cline-any cline-yes">7x</span>
408
+ <span class="cline-any cline-yes">7x</span>
409
+ <span class="cline-any cline-yes">7x</span>
410
410
  <span class="cline-any cline-neutral">&nbsp;</span>
411
- <span class="cline-any cline-no">&nbsp;</span>
412
- <span class="cline-any cline-no">&nbsp;</span>
411
+ <span class="cline-any cline-yes">7x</span>
412
+ <span class="cline-any cline-yes">7x</span>
413
413
  <span class="cline-any cline-neutral">&nbsp;</span>
414
414
  <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-no">&nbsp;</span>
415
+ <span class="cline-any cline-yes">7x</span>
416
416
  <span class="cline-any cline-neutral">&nbsp;</span>
417
- <span class="cline-any cline-no">&nbsp;</span>
417
+ <span class="cline-any cline-yes">5x</span>
418
418
  <span class="cline-any cline-neutral">&nbsp;</span>
419
419
  <span class="cline-any cline-neutral">&nbsp;</span>
420
420
  <span class="cline-any cline-neutral">&nbsp;</span>
421
421
  <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-no">&nbsp;</span>
422
+ <span class="cline-any cline-yes">1x</span>
423
423
  <span class="cline-any cline-neutral">&nbsp;</span>
424
424
  <span class="cline-any cline-neutral">&nbsp;</span>
425
425
  <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-no">&nbsp;</span>
426
+ <span class="cline-any cline-yes">4x</span>
427
427
  <span class="cline-any cline-neutral">&nbsp;</span>
428
428
  <span class="cline-any cline-neutral">&nbsp;</span>
429
429
  <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-no">&nbsp;</span>
431
- <span class="cline-any cline-no">&nbsp;</span>
430
+ <span class="cline-any cline-yes">4x</span>
431
+ <span class="cline-any cline-yes">4x</span>
432
432
  <span class="cline-any cline-neutral">&nbsp;</span>
433
- <span class="cline-any cline-no">&nbsp;</span>
433
+ <span class="cline-any cline-yes">1x</span>
434
434
  <span class="cline-any cline-neutral">&nbsp;</span>
435
435
  <span class="cline-any cline-neutral">&nbsp;</span>
436
436
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -439,17 +439,17 @@
439
439
  <span class="cline-any cline-neutral">&nbsp;</span>
440
440
  <span class="cline-any cline-neutral">&nbsp;</span>
441
441
  <span class="cline-any cline-neutral">&nbsp;</span>
442
- <span class="cline-any cline-no">&nbsp;</span>
442
+ <span class="cline-any cline-yes">1x</span>
443
443
  <span class="cline-any cline-neutral">&nbsp;</span>
444
444
  <span class="cline-any cline-neutral">&nbsp;</span>
445
445
  <span class="cline-any cline-neutral">&nbsp;</span>
446
- <span class="cline-any cline-no">&nbsp;</span>
447
- <span class="cline-any cline-no">&nbsp;</span>
446
+ <span class="cline-any cline-yes">1x</span>
447
+ <span class="cline-any cline-yes">1x</span>
448
448
  <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-no">&nbsp;</span>
449
+ <span class="cline-any cline-yes">1x</span>
450
450
  <span class="cline-any cline-no">&nbsp;</span>
451
451
  <span class="cline-any cline-neutral">&nbsp;</span>
452
- <span class="cline-any cline-no">&nbsp;</span>
452
+ <span class="cline-any cline-yes">1x</span>
453
453
  <span class="cline-any cline-no">&nbsp;</span>
454
454
  <span class="cline-any cline-no">&nbsp;</span>
455
455
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -472,50 +472,50 @@
472
472
  <span class="cline-any cline-neutral">&nbsp;</span>
473
473
  <span class="cline-any cline-no">&nbsp;</span>
474
474
  <span class="cline-any cline-neutral">&nbsp;</span>
475
- <span class="cline-any cline-no">&nbsp;</span>
476
- <span class="cline-any cline-no">&nbsp;</span>
477
- <span class="cline-any cline-no">&nbsp;</span>
475
+ <span class="cline-any cline-yes">5x</span>
476
+ <span class="cline-any cline-yes">5x</span>
477
+ <span class="cline-any cline-yes">5x</span>
478
478
  <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-no">&nbsp;</span>
479
+ <span class="cline-any cline-yes">2x</span>
480
480
  <span class="cline-any cline-neutral">&nbsp;</span>
481
481
  <span class="cline-any cline-neutral">&nbsp;</span>
482
482
  <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-no">&nbsp;</span>
484
- <span class="cline-any cline-no">&nbsp;</span>
485
- <span class="cline-any cline-no">&nbsp;</span>
483
+ <span class="cline-any cline-yes">2x</span>
484
+ <span class="cline-any cline-yes">2x</span>
485
+ <span class="cline-any cline-yes">2x</span>
486
486
  <span class="cline-any cline-neutral">&nbsp;</span>
487
487
  <span class="cline-any cline-neutral">&nbsp;</span>
488
- <span class="cline-any cline-no">&nbsp;</span>
488
+ <span class="cline-any cline-yes">7x</span>
489
489
  <span class="cline-any cline-neutral">&nbsp;</span>
490
490
  <span class="cline-any cline-neutral">&nbsp;</span>
491
491
  <span class="cline-any cline-neutral">&nbsp;</span>
492
492
  <span class="cline-any cline-neutral">&nbsp;</span>
493
- <span class="cline-any cline-no">&nbsp;</span>
493
+ <span class="cline-any cline-yes">7x</span>
494
494
  <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-no">&nbsp;</span>
495
+ <span class="cline-any cline-yes">7x</span>
496
496
  <span class="cline-any cline-neutral">&nbsp;</span>
497
- <span class="cline-any cline-no">&nbsp;</span>
497
+ <span class="cline-any cline-yes">7x</span>
498
498
  <span class="cline-any cline-neutral">&nbsp;</span>
499
499
  <span class="cline-any cline-neutral">&nbsp;</span>
500
500
  <span class="cline-any cline-neutral">&nbsp;</span>
501
501
  <span class="cline-any cline-neutral">&nbsp;</span>
502
502
  <span class="cline-any cline-neutral">&nbsp;</span>
503
- <span class="cline-any cline-no">&nbsp;</span>
503
+ <span class="cline-any cline-yes">4x</span>
504
504
  <span class="cline-any cline-neutral">&nbsp;</span>
505
505
  <span class="cline-any cline-neutral">&nbsp;</span>
506
506
  <span class="cline-any cline-neutral">&nbsp;</span>
507
507
  <span class="cline-any cline-neutral">&nbsp;</span>
508
508
  <span class="cline-any cline-neutral">&nbsp;</span>
509
- <span class="cline-any cline-no">&nbsp;</span>
509
+ <span class="cline-any cline-yes">2x</span>
510
510
  <span class="cline-any cline-neutral">&nbsp;</span>
511
511
  <span class="cline-any cline-neutral">&nbsp;</span>
512
- <span class="cline-any cline-no">&nbsp;</span>
512
+ <span class="cline-any cline-yes">2x</span>
513
513
  <span class="cline-any cline-no">&nbsp;</span>
514
514
  <span class="cline-any cline-neutral">&nbsp;</span>
515
515
  <span class="cline-any cline-neutral">&nbsp;</span>
516
516
  <span class="cline-any cline-neutral">&nbsp;</span>
517
517
  <span class="cline-any cline-neutral">&nbsp;</span>
518
- <span class="cline-any cline-no">&nbsp;</span>
518
+ <span class="cline-any cline-yes">2x</span>
519
519
  <span class="cline-any cline-neutral">&nbsp;</span>
520
520
  <span class="cline-any cline-neutral">&nbsp;</span>
521
521
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -525,83 +525,83 @@
525
525
  <span class="cline-any cline-neutral">&nbsp;</span>
526
526
  <span class="cline-any cline-neutral">&nbsp;</span>
527
527
  <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-no">&nbsp;</span>
528
+ <span class="cline-any cline-yes">2x</span>
529
529
  <span class="cline-any cline-no">&nbsp;</span>
530
530
  <span class="cline-any cline-neutral">&nbsp;</span>
531
531
  <span class="cline-any cline-neutral">&nbsp;</span>
532
532
  <span class="cline-any cline-no">&nbsp;</span>
533
533
  <span class="cline-any cline-neutral">&nbsp;</span>
534
534
  <span class="cline-any cline-neutral">&nbsp;</span>
535
- <span class="cline-any cline-no">&nbsp;</span>
536
- <span class="cline-any cline-no">&nbsp;</span>
537
- <span class="cline-any cline-no">&nbsp;</span>
538
- <span class="cline-any cline-no">&nbsp;</span>
539
- <span class="cline-any cline-no">&nbsp;</span>
535
+ <span class="cline-any cline-yes">2x</span>
536
+ <span class="cline-any cline-yes">2x</span>
537
+ <span class="cline-any cline-yes">4x</span>
538
+ <span class="cline-any cline-yes">4x</span>
539
+ <span class="cline-any cline-yes">4x</span>
540
540
  <span class="cline-any cline-neutral">&nbsp;</span>
541
541
  <span class="cline-any cline-neutral">&nbsp;</span>
542
542
  <span class="cline-any cline-neutral">&nbsp;</span>
543
- <span class="cline-any cline-no">&nbsp;</span>
543
+ <span class="cline-any cline-yes">4x</span>
544
544
  <span class="cline-any cline-neutral">&nbsp;</span>
545
545
  <span class="cline-any cline-neutral">&nbsp;</span>
546
546
  <span class="cline-any cline-neutral">&nbsp;</span>
547
547
  <span class="cline-any cline-neutral">&nbsp;</span>
548
- <span class="cline-any cline-no">&nbsp;</span>
548
+ <span class="cline-any cline-yes">2x</span>
549
549
  <span class="cline-any cline-neutral">&nbsp;</span>
550
550
  <span class="cline-any cline-neutral">&nbsp;</span>
551
551
  <span class="cline-any cline-neutral">&nbsp;</span>
552
552
  <span class="cline-any cline-neutral">&nbsp;</span>
553
553
  <span class="cline-any cline-neutral">&nbsp;</span>
554
- <span class="cline-any cline-no">&nbsp;</span>
554
+ <span class="cline-any cline-yes">2x</span>
555
555
  <span class="cline-any cline-neutral">&nbsp;</span>
556
556
  <span class="cline-any cline-neutral">&nbsp;</span>
557
- <span class="cline-any cline-no">&nbsp;</span>
557
+ <span class="cline-any cline-yes">2x</span>
558
558
  <span class="cline-any cline-no">&nbsp;</span>
559
559
  <span class="cline-any cline-neutral">&nbsp;</span>
560
560
  <span class="cline-any cline-neutral">&nbsp;</span>
561
561
  <span class="cline-any cline-neutral">&nbsp;</span>
562
562
  <span class="cline-any cline-neutral">&nbsp;</span>
563
- <span class="cline-any cline-no">&nbsp;</span>
563
+ <span class="cline-any cline-yes">2x</span>
564
564
  <span class="cline-any cline-neutral">&nbsp;</span>
565
565
  <span class="cline-any cline-neutral">&nbsp;</span>
566
566
  <span class="cline-any cline-neutral">&nbsp;</span>
567
567
  <span class="cline-any cline-neutral">&nbsp;</span>
568
568
  <span class="cline-any cline-neutral">&nbsp;</span>
569
569
  <span class="cline-any cline-neutral">&nbsp;</span>
570
- <span class="cline-any cline-no">&nbsp;</span>
570
+ <span class="cline-any cline-yes">2x</span>
571
571
  <span class="cline-any cline-no">&nbsp;</span>
572
572
  <span class="cline-any cline-neutral">&nbsp;</span>
573
573
  <span class="cline-any cline-neutral">&nbsp;</span>
574
574
  <span class="cline-any cline-no">&nbsp;</span>
575
575
  <span class="cline-any cline-neutral">&nbsp;</span>
576
576
  <span class="cline-any cline-neutral">&nbsp;</span>
577
- <span class="cline-any cline-no">&nbsp;</span>
578
- <span class="cline-any cline-no">&nbsp;</span>
579
- <span class="cline-any cline-no">&nbsp;</span>
580
- <span class="cline-any cline-no">&nbsp;</span>
581
- <span class="cline-any cline-no">&nbsp;</span>
577
+ <span class="cline-any cline-yes">2x</span>
578
+ <span class="cline-any cline-yes">2x</span>
579
+ <span class="cline-any cline-yes">2x</span>
580
+ <span class="cline-any cline-yes">2x</span>
581
+ <span class="cline-any cline-yes">2x</span>
582
582
  <span class="cline-any cline-neutral">&nbsp;</span>
583
583
  <span class="cline-any cline-neutral">&nbsp;</span>
584
584
  <span class="cline-any cline-neutral">&nbsp;</span>
585
- <span class="cline-any cline-no">&nbsp;</span>
585
+ <span class="cline-any cline-yes">2x</span>
586
586
  <span class="cline-any cline-neutral">&nbsp;</span>
587
587
  <span class="cline-any cline-neutral">&nbsp;</span>
588
588
  <span class="cline-any cline-neutral">&nbsp;</span>
589
- <span class="cline-any cline-no">&nbsp;</span>
589
+ <span class="cline-any cline-yes">2x</span>
590
590
  <span class="cline-any cline-neutral">&nbsp;</span>
591
591
  <span class="cline-any cline-neutral">&nbsp;</span>
592
592
  <span class="cline-any cline-neutral">&nbsp;</span>
593
593
  <span class="cline-any cline-neutral">&nbsp;</span>
594
594
  <span class="cline-any cline-neutral">&nbsp;</span>
595
- <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-yes">4x</span>
596
596
  <span class="cline-any cline-neutral">&nbsp;</span>
597
597
  <span class="cline-any cline-neutral">&nbsp;</span>
598
- <span class="cline-any cline-no">&nbsp;</span>
599
- <span class="cline-any cline-no">&nbsp;</span>
598
+ <span class="cline-any cline-yes">4x</span>
599
+ <span class="cline-any cline-yes">1x</span>
600
600
  <span class="cline-any cline-neutral">&nbsp;</span>
601
601
  <span class="cline-any cline-neutral">&nbsp;</span>
602
602
  <span class="cline-any cline-neutral">&nbsp;</span>
603
603
  <span class="cline-any cline-neutral">&nbsp;</span>
604
- <span class="cline-any cline-no">&nbsp;</span>
604
+ <span class="cline-any cline-yes">3x</span>
605
605
  <span class="cline-any cline-neutral">&nbsp;</span>
606
606
  <span class="cline-any cline-neutral">&nbsp;</span>
607
607
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -609,69 +609,69 @@
609
609
  <span class="cline-any cline-neutral">&nbsp;</span>
610
610
  <span class="cline-any cline-neutral">&nbsp;</span>
611
611
  <span class="cline-any cline-neutral">&nbsp;</span>
612
- <span class="cline-any cline-no">&nbsp;</span>
612
+ <span class="cline-any cline-yes">3x</span>
613
613
  <span class="cline-any cline-no">&nbsp;</span>
614
614
  <span class="cline-any cline-neutral">&nbsp;</span>
615
615
  <span class="cline-any cline-neutral">&nbsp;</span>
616
616
  <span class="cline-any cline-no">&nbsp;</span>
617
617
  <span class="cline-any cline-neutral">&nbsp;</span>
618
618
  <span class="cline-any cline-neutral">&nbsp;</span>
619
- <span class="cline-any cline-no">&nbsp;</span>
620
- <span class="cline-any cline-no">&nbsp;</span>
621
- <span class="cline-any cline-no">&nbsp;</span>
619
+ <span class="cline-any cline-yes">3x</span>
620
+ <span class="cline-any cline-yes">3x</span>
621
+ <span class="cline-any cline-yes">5x</span>
622
622
  <span class="cline-any cline-neutral">&nbsp;</span>
623
623
  <span class="cline-any cline-neutral">&nbsp;</span>
624
- <span class="cline-any cline-no">&nbsp;</span>
624
+ <span class="cline-any cline-yes">5x</span>
625
625
  <span class="cline-any cline-neutral">&nbsp;</span>
626
626
  <span class="cline-any cline-neutral">&nbsp;</span>
627
627
  <span class="cline-any cline-neutral">&nbsp;</span>
628
628
  <span class="cline-any cline-neutral">&nbsp;</span>
629
629
  <span class="cline-any cline-neutral">&nbsp;</span>
630
- <span class="cline-any cline-no">&nbsp;</span>
630
+ <span class="cline-any cline-yes">3x</span>
631
631
  <span class="cline-any cline-neutral">&nbsp;</span>
632
632
  <span class="cline-any cline-neutral">&nbsp;</span>
633
- <span class="cline-any cline-no">&nbsp;</span>
633
+ <span class="cline-any cline-yes">3x</span>
634
634
  <span class="cline-any cline-neutral">&nbsp;</span>
635
635
  <span class="cline-any cline-neutral">&nbsp;</span>
636
- <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 { Injectable, Logger, NotFoundException } from '@nestjs/common';</span>
637
- <span class="cstat-no" title="statement not covered" >import { InjectRepository } from '@nestjs/typeorm';</span>
638
- <span class="cstat-no" title="statement not covered" >import { In, Repository } from 'typeorm';</span>
639
- <span class="cstat-no" title="statement not covered" >import { AIAction, SessionInput } from '../core-entities';</span>
640
- <span class="cstat-no" title="statement not covered" >import {</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Injectable, Logger, NotFoundException } from '@nestjs/common';
637
+ import { InjectRepository } from '@nestjs/typeorm';
638
+ import { In, Repository } from 'typeorm';
639
+ import { AIAction, SessionInput } from '../core-entities';
640
+ import {
641
641
  AIActionsService,
642
642
  AIActionStatus,
643
643
  ActionResult,
644
644
  ConfirmedActionInfo,
645
645
  DiscardedActionInfo,
646
646
  } from './ai-actions.service';
647
- <span class="cstat-no" title="statement not covered" >import { ExecutionLogsService } from '../execution-logs/execution-logs.service';</span>
648
- <span class="cstat-no" title="statement not covered" >import { ActionExecutionService } from '../action-execution/action-execution.service';</span>
647
+ import { ExecutionLogsService } from '../execution-logs/execution-logs.service';
648
+ import { ActionExecutionService } from '../action-execution/action-execution.service';
649
649
  &nbsp;
650
650
  @Injectable()
651
- export class <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" >AIActionBatchService<span class="cstat-no" title="statement not covered" > </span>{</span></span>
652
- private readonly <span class="cstat-no" title="statement not covered" >logger = new Logger(AIActionBatchService.name);</span>
651
+ export class AIActionBatchService {
652
+ private readonly logger = new Logger(AIActionBatchService.name);
653
653
  &nbsp;
654
- <span class="fstat-no" title="function not covered" > constructor(</span>
654
+ constructor(
655
655
  @InjectRepository(AIAction)
656
- private <span class="cstat-no" title="statement not covered" >aiActionsRepository: R</span>epository&lt;AIAction&gt;,
656
+ private aiActionsRepository: Repository&lt;AIAction&gt;,
657
657
  @InjectRepository(SessionInput)
658
- private <span class="cstat-no" title="statement not covered" >sessionInputsRepository: R</span>epository&lt;SessionInput&gt;,
659
- private readonly <span class="cstat-no" title="statement not covered" >aiActionsService: A</span>IActionsService,
660
- private readonly <span class="cstat-no" title="statement not covered" >executionLogsService: E</span>xecutionLogsService,
661
- private readonly <span class="cstat-no" title="statement not covered" >actionExecutionService: A</span>ctionExecutionService,
658
+ private sessionInputsRepository: Repository&lt;SessionInput&gt;,
659
+ private readonly aiActionsService: AIActionsService,
660
+ private readonly executionLogsService: ExecutionLogsService,
661
+ private readonly actionExecutionService: ActionExecutionService,
662
662
  ) {}
663
663
  &nbsp;
664
- <span class="fstat-no" title="function not covered" > async </span>applyApprovedActions(inputId: string): Promise&lt;ActionResult[]&gt; {
665
- const sessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOneBy({</span>
664
+ async applyApprovedActions(inputId: string): Promise&lt;ActionResult[]&gt; {
665
+ const sessionInput = await this.sessionInputsRepository.findOneBy({
666
666
  id: inputId,
667
667
  });
668
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput) {</span>
669
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
668
+ if (!sessionInput) {
669
+ throw new NotFoundException(
670
670
  `SessionInput with ID "${inputId}" not found.`,
671
671
  );
672
672
  }
673
673
  &nbsp;
674
- const actionsToApply = <span class="cstat-no" title="statement not covered" >await this.aiActionsRepository.find({</span>
674
+ const actionsToApply = await this.aiActionsRepository.find({
675
675
  where: {
676
676
  input_id: inputId,
677
677
  status: AIActionStatus.APPROVED_FOR_APPLY,
@@ -679,43 +679,43 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
679
679
  order: { order_of_execution: 'ASC', created_at: 'ASC' },
680
680
  });
681
681
  &nbsp;
682
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (actionsToApply.length === 0) {</span>
683
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
682
+ if (actionsToApply.length === 0) {
683
+ this.logger.log(
684
684
  `No actions in "approved_for_apply" state for input ID "${inputId}".`,
685
685
  );
686
- <span class="cstat-no" title="statement not covered" > return [];</span>
686
+ return [];
687
687
  }
688
688
  &nbsp;
689
- const results: ActionResult[] = <span class="cstat-no" title="statement not covered" >[];</span>
689
+ const results: ActionResult[] = [];
690
690
  &nbsp;
691
- <span class="cstat-no" title="statement not covered" > for (const action of actionsToApply) {</span>
692
- let outcomeMessage = <span class="cstat-no" title="statement not covered" >'';</span>
693
- let errorMessage: string | undefined = <span class="cstat-no" title="statement not covered" >undefined;</span>
694
- let actionSucceeded = <span class="cstat-no" title="statement not covered" >false;</span>
691
+ for (const action of actionsToApply) {
692
+ let outcomeMessage = '';
693
+ let errorMessage: string | undefined = undefined;
694
+ let actionSucceeded = false;
695
695
  &nbsp;
696
- <span class="cstat-no" title="statement not covered" > try {</span>
697
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
696
+ try {
697
+ this.logger.log(
698
698
  `Attempting to apply action ID ${action.id}, type ${action.action_type}`,
699
699
  );
700
- <span class="cstat-no" title="statement not covered" > switch (action.action_type) {</span>
700
+ switch (action.action_type) {
701
701
  case 'create_file':
702
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
702
+ if (
703
703
  !action.file_path ||
704
704
  action.content === null ||
705
705
  action.content === undefined
706
706
  ) {
707
- <span class="cstat-no" title="statement not covered" > throw new Error(</span>
707
+ throw new Error(
708
708
  'Missing file_path or content for create_file action.',
709
709
  );
710
710
  }
711
- <span class="cstat-no" title="statement not covered" > await this.actionExecutionService.createFile(</span>
711
+ await this.actionExecutionService.createFile(
712
712
  action.file_path,
713
713
  action.content,
714
714
  );
715
- <span class="cstat-no" title="statement not covered" > outcomeMessage = `File "${action.file_path}" created successfully.`;</span>
716
- <span class="cstat-no" title="statement not covered" > break;</span>
715
+ outcomeMessage = `File "${action.file_path}" created successfully.`;
716
+ break;
717
717
  case 'edit_file':
718
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
718
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (
719
719
  !action.file_path ||
720
720
  action.content === null ||
721
721
  action.content === undefined
@@ -724,20 +724,20 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
724
724
  'Missing file_path or content for edit_file action.',
725
725
  );
726
726
  }
727
- <span class="cstat-no" title="statement not covered" > await this.actionExecutionService.editFile(</span>
727
+ await this.actionExecutionService.editFile(
728
728
  action.file_path,
729
729
  action.content,
730
730
  );
731
- <span class="cstat-no" title="statement not covered" > outcomeMessage = `File "${action.file_path}" edited successfully.`;</span>
732
- <span class="cstat-no" title="statement not covered" > break;</span>
731
+ outcomeMessage = `File "${action.file_path}" edited successfully.`;
732
+ break;
733
733
  case 'delete_file':
734
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!action.file_path) {</span>
734
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!action.file_path) {
735
735
  <span class="cstat-no" title="statement not covered" > throw new Error('Missing file_path for delete_file action.');</span>
736
736
  }
737
- <span class="cstat-no" title="statement not covered" > await this.actionExecutionService.deleteFile(action.file_path);</span>
737
+ await this.actionExecutionService.deleteFile(action.file_path);
738
738
  <span class="cstat-no" title="statement not covered" > outcomeMessage = `File "${action.file_path}" deleted successfully.`;</span>
739
739
  <span class="cstat-no" title="statement not covered" > break;</span>
740
- case 'run_command':
740
+ <span class="branch-3 cbranch-no" title="branch not covered" > case 'run_command':</span>
741
741
  <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!action.command_string) {</span>
742
742
  <span class="cstat-no" title="statement not covered" > throw new Error('Missing command_string for run_command action.');</span>
743
743
  }
@@ -754,53 +754,53 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
754
754
  <span class="cstat-no" title="statement not covered" > outcomeMessage += `\nStderr: ${cmdResult.stderr}`;</span>
755
755
  }
756
756
  <span class="cstat-no" title="statement not covered" > break;</span>
757
- default:
757
+ <span class="branch-4 cbranch-no" title="branch not covered" > default:</span>
758
758
  <span class="cstat-no" title="statement not covered" > throw new Error(`Unsupported action_type: "${action.action_type}"`);</span>
759
759
  }
760
- <span class="cstat-no" title="statement not covered" > action.status = AIActionStatus.CONFIRMED_KEPT;</span>
761
- <span class="cstat-no" title="statement not covered" > actionSucceeded = true;</span>
762
- <span class="cstat-no" title="statement not covered" > this.logger.log(`Action ID ${action.id} applied successfully.`);</span>
760
+ action.status = AIActionStatus.CONFIRMED_KEPT;
761
+ actionSucceeded = true;
762
+ this.logger.log(`Action ID ${action.id} applied successfully.`);
763
763
  } catch (error) {
764
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
764
+ this.logger.error(
765
765
  `Failed to apply action ID ${action.id}: ${error.message}`,
766
766
  error.stack,
767
767
  );
768
- <span class="cstat-no" title="statement not covered" > action.status = AIActionStatus.EXECUTION_FAILED;</span>
769
- <span class="cstat-no" title="statement not covered" > errorMessage = error.message;</span>
770
- <span class="cstat-no" title="statement not covered" > outcomeMessage = `Failed to apply action: ${error.message}`;</span>
768
+ action.status = AIActionStatus.EXECUTION_FAILED;
769
+ errorMessage = error.message;
770
+ outcomeMessage = `Failed to apply action: ${error.message}`;
771
771
  }
772
772
  &nbsp;
773
- const log = <span class="cstat-no" title="statement not covered" >await this.executionLogsService.createLog({</span>
773
+ const log = await this.executionLogsService.createLog({
774
774
  action_id: action.id,
775
775
  output: actionSucceeded ? outcomeMessage : undefined,
776
776
  error_message: errorMessage,
777
777
  });
778
- <span class="cstat-no" title="statement not covered" > await this.aiActionsRepository.save(action);</span>
778
+ await this.aiActionsRepository.save(action);
779
779
  &nbsp;
780
- const reloadedAction = <span class="cstat-no" title="statement not covered" >await this.aiActionsService.findOne(action.id);</span>
780
+ const reloadedAction = await this.aiActionsService.findOne(action.id);
781
781
  &nbsp;
782
- <span class="cstat-no" title="statement not covered" > results.push({</span>
782
+ results.push({
783
783
  action_id: action.id,
784
784
  status: reloadedAction.status,
785
- logs: reloadedAction.executionLogs || [log],
785
+ logs: reloadedAction.executionLogs || <span class="branch-1 cbranch-no" title="branch not covered" >[log],</span>
786
786
  });
787
787
  }
788
- <span class="cstat-no" title="statement not covered" > return results;</span>
788
+ return results;
789
789
  }
790
790
  &nbsp;
791
- <span class="fstat-no" title="function not covered" > async </span>discardAllActionsForInput(
791
+ async discardAllActionsForInput(
792
792
  inputId: string,
793
793
  ): Promise&lt;DiscardedActionInfo[]&gt; {
794
- const sessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOneBy({</span>
794
+ const sessionInput = await this.sessionInputsRepository.findOneBy({
795
795
  id: inputId,
796
796
  });
797
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput) {</span>
797
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput) {
798
798
  <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
799
799
  `SessionInput with ID "${inputId}" not found.`,
800
800
  );
801
801
  }
802
802
  &nbsp;
803
- const actionsToDiscard = <span class="cstat-no" title="statement not covered" >await this.aiActionsRepository.find({</span>
803
+ const actionsToDiscard = await this.aiActionsRepository.find({
804
804
  where: {
805
805
  input_id: inputId,
806
806
  status: In([
@@ -810,83 +810,83 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
810
810
  },
811
811
  });
812
812
  &nbsp;
813
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (actionsToDiscard.length === 0) {</span>
813
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (actionsToDiscard.length === 0) {
814
814
  <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
815
815
  `No actions in "proposed" or "approved_for_apply" state for input ID "${inputId}" to discard.`,
816
816
  );
817
817
  <span class="cstat-no" title="statement not covered" > return [];</span>
818
818
  }
819
819
  &nbsp;
820
- const results: DiscardedActionInfo[] = <span class="cstat-no" title="statement not covered" >[];</span>
821
- <span class="cstat-no" title="statement not covered" > for (const action of actionsToDiscard) {</span>
822
- <span class="cstat-no" title="statement not covered" > action.status = AIActionStatus.REJECTED_BEFORE_APPLY;</span>
823
- <span class="cstat-no" title="statement not covered" > await this.aiActionsRepository.save(action);</span>
824
- <span class="cstat-no" title="statement not covered" > results.push({</span>
820
+ const results: DiscardedActionInfo[] = [];
821
+ for (const action of actionsToDiscard) {
822
+ action.status = AIActionStatus.REJECTED_BEFORE_APPLY;
823
+ await this.aiActionsRepository.save(action);
824
+ results.push({
825
825
  action_id: action.id,
826
826
  status: action.status,
827
827
  });
828
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
828
+ this.logger.log(
829
829
  `Action ID ${action.id} for input ${inputId} discarded, status set to ${action.status}.`,
830
830
  );
831
831
  }
832
832
  &nbsp;
833
- <span class="cstat-no" title="statement not covered" > return results;</span>
833
+ return results;
834
834
  }
835
835
  &nbsp;
836
- <span class="fstat-no" title="function not covered" > async </span>confirmAllAppliedActionsForInput(
836
+ async confirmAllAppliedActionsForInput(
837
837
  inputId: string,
838
838
  ): Promise&lt;ConfirmedActionInfo[]&gt; {
839
- const sessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOneBy({</span>
839
+ const sessionInput = await this.sessionInputsRepository.findOneBy({
840
840
  id: inputId,
841
841
  });
842
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput) {</span>
842
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput) {
843
843
  <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
844
844
  `SessionInput with ID "${inputId}" not found.`,
845
845
  );
846
846
  }
847
847
  &nbsp;
848
- const actionsToConfirm = <span class="cstat-no" title="statement not covered" >await this.aiActionsRepository.find({</span>
848
+ const actionsToConfirm = await this.aiActionsRepository.find({
849
849
  where: {
850
850
  input_id: inputId,
851
851
  status: AIActionStatus.APPLIED_PENDING_REVIEW,
852
852
  },
853
853
  });
854
854
  &nbsp;
855
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (actionsToConfirm.length === 0) {</span>
855
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (actionsToConfirm.length === 0) {
856
856
  <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
857
857
  `No actions in "${AIActionStatus.APPLIED_PENDING_REVIEW}" state for input ID "${inputId}" to confirm.`,
858
858
  );
859
859
  <span class="cstat-no" title="statement not covered" > return [];</span>
860
860
  }
861
861
  &nbsp;
862
- const results: ConfirmedActionInfo[] = <span class="cstat-no" title="statement not covered" >[];</span>
863
- <span class="cstat-no" title="statement not covered" > for (const action of actionsToConfirm) {</span>
864
- <span class="cstat-no" title="statement not covered" > action.status = AIActionStatus.CONFIRMED_KEPT;</span>
865
- <span class="cstat-no" title="statement not covered" > await this.aiActionsRepository.save(action);</span>
866
- <span class="cstat-no" title="statement not covered" > results.push({</span>
862
+ const results: ConfirmedActionInfo[] = [];
863
+ for (const action of actionsToConfirm) {
864
+ action.status = AIActionStatus.CONFIRMED_KEPT;
865
+ await this.aiActionsRepository.save(action);
866
+ results.push({
867
867
  action_id: action.id,
868
868
  status: action.status,
869
869
  });
870
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
870
+ this.logger.log(
871
871
  `Action ID ${action.id} for input ${inputId} confirmed kept, status set to ${action.status}.`,
872
872
  );
873
873
  }
874
- <span class="cstat-no" title="statement not covered" > return results;</span>
874
+ return results;
875
875
  }
876
876
  &nbsp;
877
- <span class="fstat-no" title="function not covered" > async </span>revertAllAppliedActionsForInput(
877
+ async revertAllAppliedActionsForInput(
878
878
  inputId: string,
879
879
  ): Promise&lt;ActionResult[]&gt; {
880
- const sessionInput = <span class="cstat-no" title="statement not covered" >await this.sessionInputsRepository.findOneBy({</span>
880
+ const sessionInput = await this.sessionInputsRepository.findOneBy({
881
881
  id: inputId,
882
882
  });
883
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!sessionInput) {</span>
884
- <span class="cstat-no" title="statement not covered" > throw new NotFoundException(</span>
883
+ if (!sessionInput) {
884
+ throw new NotFoundException(
885
885
  `SessionInput with ID "${inputId}" not found. Cannot revert actions.`,
886
886
  );
887
887
  }
888
888
  &nbsp;
889
- const actionsToRevert = <span class="cstat-no" title="statement not covered" >await this.aiActionsRepository.find({</span>
889
+ const actionsToRevert = await this.aiActionsRepository.find({
890
890
  where: {
891
891
  input_id: inputId,
892
892
  status: AIActionStatus.APPLIED_PENDING_REVIEW,
@@ -894,28 +894,28 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
894
894
  order: { order_of_execution: 'DESC', created_at: 'DESC' }, // Revert in reverse order
895
895
  });
896
896
  &nbsp;
897
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (actionsToRevert.length === 0) {</span>
897
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (actionsToRevert.length === 0) {
898
898
  <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
899
899
  `No actions in "${AIActionStatus.APPLIED_PENDING_REVIEW}" state for input ID "${inputId}" to revert.`,
900
900
  );
901
901
  <span class="cstat-no" title="statement not covered" > return [];</span>
902
902
  }
903
903
  &nbsp;
904
- const results: ActionResult[] = <span class="cstat-no" title="statement not covered" >[];</span>
905
- <span class="cstat-no" title="statement not covered" > for (const action of actionsToRevert) {</span>
906
- const revertedAction = <span class="cstat-no" title="statement not covered" >await this.aiActionsService.revertAction(</span>
904
+ const results: ActionResult[] = [];
905
+ for (const action of actionsToRevert) {
906
+ const revertedAction = await this.aiActionsService.revertAction(
907
907
  action.id,
908
908
  );
909
- <span class="cstat-no" title="statement not covered" > results.push({</span>
909
+ results.push({
910
910
  action_id: revertedAction.id,
911
911
  status: revertedAction.status,
912
912
  logs: revertedAction.executionLogs || [],
913
913
  });
914
914
  }
915
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
915
+ this.logger.log(
916
916
  `Attempted to revert ${actionsToRevert.length} actions for input ID "${inputId}".`,
917
917
  );
918
- <span class="cstat-no" title="statement not covered" > return results;</span>
918
+ return results;
919
919
  }
920
920
  }
921
921
  &nbsp;</pre></td></tr></table></pre>
@@ -925,7 +925,7 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
925
925
  <div class='footer quiet pad2 space-top1 center small'>
926
926
  Code coverage generated by
927
927
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
928
- at 2025-07-30T23:37:05.373Z
928
+ at 2025-09-12T19:21:55.945Z
929
929
  </div>
930
930
  <script src="../../prettify.js"></script>
931
931
  <script>