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">88.6% </span>
27
27
  <span class="quiet">Statements</span>
28
- <span class='fraction'>0/77</span>
28
+ <span class='fraction'>70/79</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">89.28% </span>
34
34
  <span class="quiet">Branches</span>
35
- <span class='fraction'>0/28</span>
35
+ <span class='fraction'>25/28</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">85.71% </span>
41
41
  <span class="quiet">Functions</span>
42
- <span class='fraction'>0/7</span>
42
+ <span class='fraction'>6/7</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">88.15% </span>
48
48
  <span class="quiet">Lines</span>
49
- <span class='fraction'>0/75</span>
49
+ <span class='fraction'>67/76</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>
@@ -285,68 +285,73 @@
285
285
  <a name='L220'></a><a href='#L220'>220</a>
286
286
  <a name='L221'></a><a href='#L221'>221</a>
287
287
  <a name='L222'></a><a href='#L222'>222</a>
288
- <a name='L223'></a><a href='#L223'>223</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">9x</span>
289
293
  <span class="cline-any cline-neutral">&nbsp;</span>
290
294
  <span class="cline-any cline-neutral">&nbsp;</span>
291
- <span class="cline-any cline-no">&nbsp;</span>
292
- <span class="cline-any cline-no">&nbsp;</span>
293
- <span class="cline-any cline-no">&nbsp;</span>
294
- <span class="cline-any cline-no">&nbsp;</span>
295
+ <span class="cline-any cline-yes">9x</span>
296
+ <span class="cline-any cline-yes">9x</span>
297
+ <span class="cline-any cline-yes">9x</span>
298
+ <span class="cline-any cline-yes">9x</span>
295
299
  <span class="cline-any cline-neutral">&nbsp;</span>
296
300
  <span class="cline-any cline-neutral">&nbsp;</span>
297
301
  <span class="cline-any cline-neutral">&nbsp;</span>
298
302
  <span class="cline-any cline-neutral">&nbsp;</span>
299
303
  <span class="cline-any cline-neutral">&nbsp;</span>
300
304
  <span class="cline-any cline-neutral">&nbsp;</span>
301
- <span class="cline-any cline-no">&nbsp;</span>
302
- <span class="cline-any cline-no">&nbsp;</span>
305
+ <span class="cline-any cline-yes">9x</span>
306
+ <span class="cline-any cline-yes">13x</span>
303
307
  <span class="cline-any cline-neutral">&nbsp;</span>
304
308
  <span class="cline-any cline-neutral">&nbsp;</span>
305
- <span class="cline-any cline-no">&nbsp;</span>
306
- <span class="cline-any cline-no">&nbsp;</span>
307
- <span class="cline-any cline-no">&nbsp;</span>
308
- <span class="cline-any cline-no">&nbsp;</span>
309
+ <span class="cline-any cline-yes">13x</span>
310
+ <span class="cline-any cline-yes">13x</span>
311
+ <span class="cline-any cline-yes">13x</span>
312
+ <span class="cline-any cline-yes">13x</span>
309
313
  <span class="cline-any cline-neutral">&nbsp;</span>
310
314
  <span class="cline-any cline-neutral">&nbsp;</span>
311
315
  <span class="cline-any cline-neutral">&nbsp;</span>
312
316
  <span class="cline-any cline-neutral">&nbsp;</span>
313
317
  <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-no">&nbsp;</span>
315
- <span class="cline-any cline-no">&nbsp;</span>
316
318
  <span class="cline-any cline-neutral">&nbsp;</span>
317
- <span class="cline-any cline-no">&nbsp;</span>
318
- <span class="cline-any cline-no">&nbsp;</span>
319
+ <span class="cline-any cline-yes">20x</span>
320
+ <span class="cline-any cline-yes">20x</span>
319
321
  <span class="cline-any cline-neutral">&nbsp;</span>
322
+ <span class="cline-any cline-yes">20x</span>
323
+ <span class="cline-any cline-yes">17x</span>
320
324
  <span class="cline-any cline-neutral">&nbsp;</span>
321
- <span class="cline-any cline-no">&nbsp;</span>
322
325
  <span class="cline-any cline-neutral">&nbsp;</span>
326
+ <span class="cline-any cline-yes">3x</span>
327
+ <span class="cline-any cline-yes">3x</span>
323
328
  <span class="cline-any cline-neutral">&nbsp;</span>
324
329
  <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-no">&nbsp;</span>
326
330
  <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-no">&nbsp;</span>
328
- <span class="cline-any cline-no">&nbsp;</span>
329
- <span class="cline-any cline-no">&nbsp;</span>
330
- <span class="cline-any cline-no">&nbsp;</span>
331
+ <span class="cline-any cline-yes">3x</span>
331
332
  <span class="cline-any cline-neutral">&nbsp;</span>
333
+ <span class="cline-any cline-yes">3x</span>
334
+ <span class="cline-any cline-yes">3x</span>
335
+ <span class="cline-any cline-yes">3x</span>
336
+ <span class="cline-any cline-yes">2x</span>
332
337
  <span class="cline-any cline-neutral">&nbsp;</span>
333
- <span class="cline-any cline-no">&nbsp;</span>
334
338
  <span class="cline-any cline-neutral">&nbsp;</span>
335
- <span class="cline-any cline-no">&nbsp;</span>
339
+ <span class="cline-any cline-yes">2x</span>
336
340
  <span class="cline-any cline-neutral">&nbsp;</span>
341
+ <span class="cline-any cline-yes">1x</span>
337
342
  <span class="cline-any cline-neutral">&nbsp;</span>
338
- <span class="cline-any cline-no">&nbsp;</span>
339
343
  <span class="cline-any cline-neutral">&nbsp;</span>
344
+ <span class="cline-any cline-yes">1x</span>
340
345
  <span class="cline-any cline-neutral">&nbsp;</span>
341
346
  <span class="cline-any cline-neutral">&nbsp;</span>
342
347
  <span class="cline-any cline-neutral">&nbsp;</span>
343
- <span class="cline-any cline-no">&nbsp;</span>
344
348
  <span class="cline-any cline-neutral">&nbsp;</span>
345
- <span class="cline-any cline-no">&nbsp;</span>
349
+ <span class="cline-any cline-yes">3x</span>
346
350
  <span class="cline-any cline-neutral">&nbsp;</span>
347
351
  <span class="cline-any cline-neutral">&nbsp;</span>
348
352
  <span class="cline-any cline-neutral">&nbsp;</span>
349
353
  <span class="cline-any cline-neutral">&nbsp;</span>
354
+ <span class="cline-any cline-yes">3x</span>
350
355
  <span class="cline-any cline-neutral">&nbsp;</span>
351
356
  <span class="cline-any cline-neutral">&nbsp;</span>
352
357
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -355,22 +360,22 @@
355
360
  <span class="cline-any cline-neutral">&nbsp;</span>
356
361
  <span class="cline-any cline-neutral">&nbsp;</span>
357
362
  <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-no">&nbsp;</span>
359
- <span class="cline-any cline-no">&nbsp;</span>
360
363
  <span class="cline-any cline-neutral">&nbsp;</span>
361
- <span class="cline-any cline-no">&nbsp;</span>
362
364
  <span class="cline-any cline-neutral">&nbsp;</span>
363
365
  <span class="cline-any cline-neutral">&nbsp;</span>
364
366
  <span class="cline-any cline-neutral">&nbsp;</span>
367
+ <span class="cline-any cline-yes">20x</span>
368
+ <span class="cline-any cline-yes">20x</span>
365
369
  <span class="cline-any cline-neutral">&nbsp;</span>
370
+ <span class="cline-any cline-yes">20x</span>
366
371
  <span class="cline-any cline-neutral">&nbsp;</span>
367
372
  <span class="cline-any cline-neutral">&nbsp;</span>
368
373
  <span class="cline-any cline-neutral">&nbsp;</span>
369
- <span class="cline-any cline-no">&nbsp;</span>
370
374
  <span class="cline-any cline-neutral">&nbsp;</span>
371
375
  <span class="cline-any cline-neutral">&nbsp;</span>
372
376
  <span class="cline-any cline-neutral">&nbsp;</span>
373
377
  <span class="cline-any cline-neutral">&nbsp;</span>
378
+ <span class="cline-any cline-yes">20x</span>
374
379
  <span class="cline-any cline-neutral">&nbsp;</span>
375
380
  <span class="cline-any cline-neutral">&nbsp;</span>
376
381
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -378,9 +383,12 @@
378
383
  <span class="cline-any cline-neutral">&nbsp;</span>
379
384
  <span class="cline-any cline-neutral">&nbsp;</span>
380
385
  <span class="cline-any cline-neutral">&nbsp;</span>
381
- <span class="cline-any cline-no">&nbsp;</span>
382
386
  <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-no">&nbsp;</span>
387
+ <span class="cline-any cline-neutral">&nbsp;</span>
388
+ <span class="cline-any cline-neutral">&nbsp;</span>
389
+ <span class="cline-any cline-yes">20x</span>
390
+ <span class="cline-any cline-neutral">&nbsp;</span>
391
+ <span class="cline-any cline-yes">20x</span>
384
392
  <span class="cline-any cline-no">&nbsp;</span>
385
393
  <span class="cline-any cline-neutral">&nbsp;</span>
386
394
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -390,13 +398,13 @@
390
398
  <span class="cline-any cline-neutral">&nbsp;</span>
391
399
  <span class="cline-any cline-neutral">&nbsp;</span>
392
400
  <span class="cline-any cline-neutral">&nbsp;</span>
393
- <span class="cline-any cline-no">&nbsp;</span>
401
+ <span class="cline-any cline-yes">20x</span>
394
402
  <span class="cline-any cline-neutral">&nbsp;</span>
395
403
  <span class="cline-any cline-neutral">&nbsp;</span>
396
404
  <span class="cline-any cline-neutral">&nbsp;</span>
397
405
  <span class="cline-any cline-neutral">&nbsp;</span>
398
- <span class="cline-any cline-no">&nbsp;</span>
399
- <span class="cline-any cline-no">&nbsp;</span>
406
+ <span class="cline-any cline-yes">20x</span>
407
+ <span class="cline-any cline-yes">20x</span>
400
408
  <span class="cline-any cline-no">&nbsp;</span>
401
409
  <span class="cline-any cline-no">&nbsp;</span>
402
410
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -406,10 +414,10 @@
406
414
  <span class="cline-any cline-neutral">&nbsp;</span>
407
415
  <span class="cline-any cline-neutral">&nbsp;</span>
408
416
  <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-no">&nbsp;</span>
410
- <span class="cline-any cline-no">&nbsp;</span>
411
- <span class="cline-any cline-no">&nbsp;</span>
412
- <span class="cline-any cline-no">&nbsp;</span>
417
+ <span class="cline-any cline-yes">20x</span>
418
+ <span class="cline-any cline-yes">20x</span>
419
+ <span class="cline-any cline-yes">3x</span>
420
+ <span class="cline-any cline-yes">3x</span>
413
421
  <span class="cline-any cline-neutral">&nbsp;</span>
414
422
  <span class="cline-any cline-no">&nbsp;</span>
415
423
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -417,50 +425,50 @@
417
425
  <span class="cline-any cline-neutral">&nbsp;</span>
418
426
  <span class="cline-any cline-neutral">&nbsp;</span>
419
427
  <span class="cline-any cline-neutral">&nbsp;</span>
420
- <span class="cline-any cline-no">&nbsp;</span>
428
+ <span class="cline-any cline-yes">20x</span>
421
429
  <span class="cline-any cline-neutral">&nbsp;</span>
422
430
  <span class="cline-any cline-neutral">&nbsp;</span>
423
431
  <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-no">&nbsp;</span>
432
+ <span class="cline-any cline-yes">20x</span>
425
433
  <span class="cline-any cline-neutral">&nbsp;</span>
426
- <span class="cline-any cline-no">&nbsp;</span>
434
+ <span class="cline-any cline-yes">20x</span>
427
435
  <span class="cline-any cline-neutral">&nbsp;</span>
428
436
  <span class="cline-any cline-neutral">&nbsp;</span>
429
437
  <span class="cline-any cline-neutral">&nbsp;</span>
430
- <span class="cline-any cline-no">&nbsp;</span>
438
+ <span class="cline-any cline-yes">20x</span>
431
439
  <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-no">&nbsp;</span>
433
- <span class="cline-any cline-no">&nbsp;</span>
440
+ <span class="cline-any cline-yes">20x</span>
441
+ <span class="cline-any cline-yes">3x</span>
434
442
  <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-no">&nbsp;</span>
443
+ <span class="cline-any cline-yes">3x</span>
436
444
  <span class="cline-any cline-neutral">&nbsp;</span>
437
445
  <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-no">&nbsp;</span>
446
+ <span class="cline-any cline-yes">3x</span>
439
447
  <span class="cline-any cline-neutral">&nbsp;</span>
440
448
  <span class="cline-any cline-neutral">&nbsp;</span>
441
- <span class="cline-any cline-no">&nbsp;</span>
442
- <span class="cline-any cline-no">&nbsp;</span>
449
+ <span class="cline-any cline-yes">20x</span>
450
+ <span class="cline-any cline-yes">1x</span>
443
451
  <span class="cline-any cline-neutral">&nbsp;</span>
444
452
  <span class="cline-any cline-neutral">&nbsp;</span>
445
- <span class="cline-any cline-no">&nbsp;</span>
446
- <span class="cline-any cline-no">&nbsp;</span>
453
+ <span class="cline-any cline-yes">1x</span>
454
+ <span class="cline-any cline-yes">1x</span>
447
455
  <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-no">&nbsp;</span>
456
+ <span class="cline-any cline-yes">1x</span>
449
457
  <span class="cline-any cline-neutral">&nbsp;</span>
450
458
  <span class="cline-any cline-neutral">&nbsp;</span>
451
- <span class="cline-any cline-no">&nbsp;</span>
459
+ <span class="cline-any cline-yes">1x</span>
452
460
  <span class="cline-any cline-neutral">&nbsp;</span>
453
461
  <span class="cline-any cline-no">&nbsp;</span>
454
462
  <span class="cline-any cline-neutral">&nbsp;</span>
455
463
  <span class="cline-any cline-neutral">&nbsp;</span>
456
464
  <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-no">&nbsp;</span>
465
+ <span class="cline-any cline-yes">1x</span>
458
466
  <span class="cline-any cline-neutral">&nbsp;</span>
459
467
  <span class="cline-any cline-neutral">&nbsp;</span>
460
- <span class="cline-any cline-no">&nbsp;</span>
468
+ <span class="cline-any cline-yes">1x</span>
461
469
  <span class="cline-any cline-neutral">&nbsp;</span>
462
470
  <span class="cline-any cline-neutral">&nbsp;</span>
463
- <span class="cline-any cline-no">&nbsp;</span>
471
+ <span class="cline-any cline-yes">20x</span>
464
472
  <span class="cline-any cline-neutral">&nbsp;</span>
465
473
  <span class="cline-any cline-neutral">&nbsp;</span>
466
474
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -469,33 +477,33 @@
469
477
  <span class="cline-any cline-neutral">&nbsp;</span>
470
478
  <span class="cline-any cline-neutral">&nbsp;</span>
471
479
  <span class="cline-any cline-neutral">&nbsp;</span>
472
- <span class="cline-any cline-no">&nbsp;</span>
473
- <span class="cline-any cline-no">&nbsp;</span>
480
+ <span class="cline-any cline-yes">20x</span>
481
+ <span class="cline-any cline-yes">20x</span>
474
482
  <span class="cline-any cline-neutral">&nbsp;</span>
475
483
  <span class="cline-any cline-neutral">&nbsp;</span>
476
484
  <span class="cline-any cline-neutral">&nbsp;</span>
477
485
  <span class="cline-any cline-neutral">&nbsp;</span>
478
486
  <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-no">&nbsp;</span>
480
- <span class="cline-any cline-no">&nbsp;</span>
481
- <span class="cline-any cline-no">&nbsp;</span>
487
+ <span class="cline-any cline-yes">20x</span>
488
+ <span class="cline-any cline-yes">20x</span>
489
+ <span class="cline-any cline-yes">20x</span>
482
490
  <span class="cline-any cline-neutral">&nbsp;</span>
483
491
  <span class="cline-any cline-neutral">&nbsp;</span>
484
492
  <span class="cline-any cline-neutral">&nbsp;</span>
485
493
  <span class="cline-any cline-neutral">&nbsp;</span>
486
- <span class="cline-any cline-no">&nbsp;</span>
487
- <span class="cline-any cline-no">&nbsp;</span>
494
+ <span class="cline-any cline-yes">20x</span>
495
+ <span class="cline-any cline-yes">1x</span>
488
496
  <span class="cline-any cline-neutral">&nbsp;</span>
489
497
  <span class="cline-any cline-neutral">&nbsp;</span>
490
- <span class="cline-any cline-no">&nbsp;</span>
498
+ <span class="cline-any cline-yes">1x</span>
491
499
  <span class="cline-any cline-neutral">&nbsp;</span>
492
500
  <span class="cline-any cline-neutral">&nbsp;</span>
493
501
  <span class="cline-any cline-neutral">&nbsp;</span>
494
502
  <span class="cline-any cline-neutral">&nbsp;</span>
495
- <span class="cline-any cline-no">&nbsp;</span>
503
+ <span class="cline-any cline-yes">19x</span>
496
504
  <span class="cline-any cline-neutral">&nbsp;</span>
497
505
  <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-no">&nbsp;</span>
506
+ <span class="cline-any cline-yes">19x</span>
499
507
  <span class="cline-any cline-neutral">&nbsp;</span>
500
508
  <span class="cline-any cline-no">&nbsp;</span>
501
509
  <span class="cline-any cline-neutral">&nbsp;</span>
@@ -507,80 +515,85 @@
507
515
  <span class="cline-any cline-neutral">&nbsp;</span>
508
516
  <span class="cline-any cline-neutral">&nbsp;</span>
509
517
  <span class="cline-any cline-neutral">&nbsp;</span>
510
- <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, BadRequestException } from '@nestjs/common';</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Injectable, Logger, BadRequestException } from '@nestjs/common';
511
519
  import { ContextTemplate } from '../core-entities';
512
520
  import { CreateSessionInputDto } from './dto/session-input.dto';
513
- <span class="cstat-no" title="statement not covered" >import { ContextGenerationService } from '../context-generation/context-generation.service';</span>
514
- <span class="cstat-no" title="statement not covered" >import { EventsGateway } from '../events/events.gateway';</span>
515
- <span class="cstat-no" title="statement not covered" >import { ApplicationStateService } from '../application-state/application-state.service';</span>
516
- <span class="cstat-no" title="statement not covered" >import { ContextSnippetsService } from '../context-snippets/context-snippets.service';</span>
521
+ import { ContextGenerationService } from '../context-generation/context-generation.service';
522
+ import { EventsGateway } from '../events/events.gateway';
523
+ import { ApplicationStateService } from '../application-state/application-state.service';
524
+ import { ContextSnippetsService } from '../context-snippets/context-snippets.service';
517
525
  &nbsp;
518
526
  interface ContextDefinition {
519
527
  files?: string[];
520
528
  folders?: string[];
521
529
  }
522
530
  @Injectable()
523
- export class <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" >SessionInputContextService<span class="cstat-no" title="statement not covered" > </span>{</span></span>
524
- private readonly <span class="cstat-no" title="statement not covered" >logger = new Logger(SessionInputContextService.name);</span>
525
- &nbsp;
526
- <span class="fstat-no" title="function not covered" > constructor(</span>
527
- private readonly <span class="cstat-no" title="statement not covered" >contextGenerationService: C</span>ontextGenerationService,
528
- private readonly <span class="cstat-no" title="statement not covered" >eventsGateway: E</span>ventsGateway,
529
- private readonly <span class="cstat-no" title="statement not covered" >applicationStateService: A</span>pplicationStateService,
530
- private readonly <span class="cstat-no" title="statement not covered" >contextSnippetsService: C</span>ontextSnippetsService,
531
+ export class SessionInputContextService {
532
+ private readonly logger = new Logger(SessionInputContextService.name);
533
+ &nbsp;
534
+ constructor(
535
+ private readonly contextGenerationService: ContextGenerationService,
536
+ private readonly eventsGateway: EventsGateway,
537
+ private readonly applicationStateService: ApplicationStateService,
538
+ private readonly contextSnippetsService: ContextSnippetsService,
531
539
  ) {}
532
540
  &nbsp;
533
- private <span class="fstat-no" title="function not covered" >async </span>resolveContextSnippets(
541
+ private async resolveContextSnippets(
534
542
  prompt: string,
535
543
  ): Promise&lt;{ resolvedContent: string; cleanedPrompt: string }&gt; {
536
- const snippetHandles = <span class="cstat-no" title="statement not covered" >[...prompt.matchAll(/\!(\w[-\w]*)/g)].map(</span>
537
- <span class="fstat-no" title="function not covered" > (m</span>atch) =&gt; <span class="cstat-no" title="statement not covered" >match[1],</span>
538
- );
539
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (snippetHandles.length === 0) {</span>
540
- <span class="cstat-no" title="statement not covered" > return { resolvedContent: '', cleanedPrompt: prompt };</span>
544
+ // Regex to find !handle that is a whole word (preceded by space/start, followed by space/end)
545
+ const snippetRegex = /(^|\s)\!(\w[-\w]*)(?=\s|$)/g;
546
+ const matches = [...prompt.matchAll(snippetRegex)];
547
+ &nbsp;
548
+ if (matches.length === 0) {
549
+ return { resolvedContent: '', cleanedPrompt: prompt };
541
550
  }
542
551
  &nbsp;
543
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
552
+ const snippetHandles = matches.map((match) =&gt; match[2]);
553
+ this.logger.log(
544
554
  `Found context snippet handles: ${snippetHandles.join(', ')}`,
545
555
  );
546
556
  &nbsp;
547
- const resolvedContents: string[] = <span class="cstat-no" title="statement not covered" >[];</span>
557
+ const resolvedContents: string[] = [];
548
558
  &nbsp;
549
- <span class="cstat-no" title="statement not covered" > for (const handle of snippetHandles) {</span>
550
- <span class="cstat-no" title="statement not covered" > try {</span>
551
- const snippet = <span class="cstat-no" title="statement not covered" >await this.contextSnippetsService.findByHandle(handle);</span>
552
- const content = <span class="cstat-no" title="statement not covered" >await this.contextGenerationService.render(</span>
559
+ for (const handle of snippetHandles) {
560
+ try {
561
+ const snippet = await this.contextSnippetsService.findByHandle(handle);
562
+ const content = await this.contextGenerationService.render(
553
563
  snippet.template_content,
554
564
  );
555
- <span class="cstat-no" title="statement not covered" > resolvedContents.push(content);</span>
565
+ resolvedContents.push(content);
556
566
  } catch (error) {
557
- <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
567
+ this.logger.error(
558
568
  `Failed to resolve context snippet "!${handle}": ${error.message}`,
559
569
  );
560
- <span class="cstat-no" title="statement not covered" > resolvedContents.push(`Error resolving !${handle}: ${error.message}`);</span>
570
+ resolvedContents.push(`Error resolving !${handle}: ${error.message}`);
561
571
  }
562
572
  }
563
573
  &nbsp;
564
- // Remove the !handle from the prompt
565
- const cleanedPrompt = <span class="cstat-no" title="statement not covered" >prompt.replace(/\!(\w[-\w]*)\s*/g, '').trim();</span>
574
+ // Remove the !handle and potential extra spaces from the prompt.
575
+ const cleanedPrompt = prompt
576
+ .replace(/(^|\s)\!(\w[-\w]*)(?=\s|$)\s*/g, '$1')
577
+ .replace(/\s{2,}/g, ' ')
578
+ .trim();
566
579
  &nbsp;
567
- <span class="cstat-no" title="statement not covered" > return {</span>
580
+ return {
568
581
  resolvedContent: resolvedContents.join('\n\n'),
569
582
  cleanedPrompt,
570
583
  };
571
584
  }
572
585
  &nbsp;
573
- <span class="fstat-no" title="function not covered" > async </span>generateContext(
586
+ async generateContext(
574
587
  dto: CreateSessionInputDto,
575
588
  contextTemplate: ContextTemplate | null,
576
589
  systemPromptContent: string,
577
590
  previousActionsSummary?: string,
578
591
  ): Promise&lt;string&gt; {
579
592
  const { resolvedContent: context_snippets_content, cleanedPrompt } =
580
- <span class="cstat-no" title="statement not covered" > await this.resolveContextSnippets(dto.user_prompt);</span>
581
- <span class="cstat-no" title="statement not covered" > dto.user_prompt = cleanedPrompt; </span>// Update DTO with cleaned prompt for template rendering
593
+ await this.resolveContextSnippets(dto.user_prompt);
594
+ dto.user_prompt = cleanedPrompt; // Update DTO with cleaned prompt for template rendering
582
595
  &nbsp;
583
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
596
+ this.logger.log(
584
597
  `Generating context. Template: ${
585
598
  contextTemplate?.template_name || 'None'
586
599
  }. Ad-hoc: ${!!dto.ad_hoc_context_definition}. Snippets: ${
@@ -588,21 +601,20 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
588
601
  }.`,
589
602
  );
590
603
  &nbsp;
591
- const defaultTemplate = <span class="cstat-no" title="statement not covered" >`&lt;%~ it.system_prompt %&gt;</span>
604
+ const defaultTemplate = `&lt;%~ it.system_prompt %&gt;
592
605
  &nbsp;
593
606
  &lt;%~ it.context_snippets_content %&gt;
594
607
  &nbsp;
595
- &lt;%~ it.user_input %&gt;
608
+ &lt;%~ it.adhoc_files_content %&gt;
609
+ &nbsp;
610
+ &lt;%~ it.adhoc_folders_content %&gt;
596
611
  &nbsp;
597
- &lt;% if (it.ad_hoc_context_definition) { %&gt;
598
- --- Ad-hoc Context ---
599
- &lt;%- it.ad_hoc_context_definition %&gt;
600
- &lt;% } %&gt;`;
612
+ &lt;%~ it.user_input %&gt;`;
601
613
  &nbsp;
602
614
  const templateContent =
603
- <span class="cstat-no" title="statement not covered" > contextTemplate?.template_content ?? defaultTemplate;</span>
615
+ contextTemplate?.template_content ?? defaultTemplate;
604
616
  &nbsp;
605
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (templateContent.trim() === '') {</span>
617
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (templateContent.trim() === '') {
606
618
  <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
607
619
  'Context template is empty. Using only the user prompt.',
608
620
  );
@@ -612,13 +624,13 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
612
624
  const adHocData: {
613
625
  adhoc_files_content: string;
614
626
  adhoc_folders_content: string;
615
- } = <span class="cstat-no" title="statement not covered" >{</span>
627
+ } = {
616
628
  adhoc_files_content: '',
617
629
  adhoc_folders_content: '',
618
630
  };
619
631
  &nbsp;
620
- let templateContextDef: ContextDefinition = <span class="cstat-no" title="statement not covered" >{};</span>
621
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (contextTemplate?.context_definition) {</span>
632
+ let templateContextDef: ContextDefinition = {};
633
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (contextTemplate?.context_definition) {
622
634
  <span class="cstat-no" title="statement not covered" > try {</span>
623
635
  <span class="cstat-no" title="statement not covered" > templateContextDef = JSON.parse(contextTemplate.context_definition);</span>
624
636
  } catch (e) {
@@ -628,10 +640,10 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
628
640
  }
629
641
  }
630
642
  &nbsp;
631
- let adhocContextDef: ContextDefinition = <span class="cstat-no" title="statement not covered" >{};</span>
632
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (dto.ad_hoc_context_definition) {</span>
633
- <span class="cstat-no" title="statement not covered" > try {</span>
634
- <span class="cstat-no" title="statement not covered" > adhocContextDef = JSON.parse(dto.ad_hoc_context_definition);</span>
643
+ let adhocContextDef: ContextDefinition = {};
644
+ if (dto.ad_hoc_context_definition) {
645
+ try {
646
+ adhocContextDef = JSON.parse(dto.ad_hoc_context_definition);
635
647
  } catch (e) {
636
648
  <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
637
649
  `Could not parse ad_hoc_context_definition as JSON: ${dto.ad_hoc_context_definition}`,
@@ -639,50 +651,50 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
639
651
  }
640
652
  }
641
653
  &nbsp;
642
- const mergedFiles = <span class="cstat-no" title="statement not covered" >[</span>
654
+ const mergedFiles = [
643
655
  ...(templateContextDef.files || []),
644
656
  ...(adhocContextDef.files || []),
645
657
  ];
646
- const uniqueFiles = <span class="cstat-no" title="statement not covered" >[...new Set(mergedFiles)];</span>
658
+ const uniqueFiles = [...new Set(mergedFiles)];
647
659
  &nbsp;
648
- const mergedFolders = <span class="cstat-no" title="statement not covered" >[</span>
660
+ const mergedFolders = [
649
661
  ...(templateContextDef.folders || []),
650
662
  ...(adhocContextDef.folders || []),
651
663
  ];
652
- const uniqueFolders = <span class="cstat-no" title="statement not covered" >[...new Set(mergedFolders)];</span>
664
+ const uniqueFolders = [...new Set(mergedFolders)];
653
665
  &nbsp;
654
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (uniqueFiles.length &gt; 0) {</span>
655
- const fileContents = <span class="cstat-no" title="statement not covered" >await Promise.all(</span>
656
- uniqueFiles.map(<span class="fstat-no" title="function not covered" >(f</span>ilePath: string) =&gt;
657
- <span class="cstat-no" title="statement not covered" > this.contextGenerationService.secureReadFile(filePath),</span>
666
+ if (uniqueFiles.length &gt; 0) {
667
+ const fileContents = await Promise.all(
668
+ uniqueFiles.map((filePath: string) =&gt;
669
+ this.contextGenerationService.secureReadFile(filePath),
658
670
  ),
659
671
  );
660
- <span class="cstat-no" title="statement not covered" > adHocData.adhoc_files_content = fileContents.join('\n\n');</span>
672
+ adHocData.adhoc_files_content = fileContents.join('\n\n');
661
673
  }
662
674
  &nbsp;
663
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (uniqueFolders.length &gt; 0) {</span>
664
- const folderContexts = <span class="cstat-no" title="statement not covered" >await Promise.all(</span>
665
- uniqueFolders.map(<span class="fstat-no" title="function not covered" >async </span>(folderPath: string) =&gt; {
675
+ if (uniqueFolders.length &gt; 0) {
676
+ const folderContexts = await Promise.all(
677
+ uniqueFolders.map(async (folderPath: string) =&gt; {
666
678
  const tree =
667
- <span class="cstat-no" title="statement not covered" > await this.contextGenerationService.secureTree(folderPath);</span>
668
- const header = <span class="cstat-no" title="statement not covered" >`// Tree for: ${folderPath}\n\`\`\`\n${tree}\n\`\`\``;</span>
679
+ await this.contextGenerationService.secureTree(folderPath);
680
+ const header = `// Tree for: ${folderPath}\n\`\`\`\n${tree}\n\`\`\``;
669
681
  &nbsp;
670
- const filesInFolder = <span class="cstat-no" title="statement not covered" >await this.contextGenerationService.secureGlob(</span>
682
+ const filesInFolder = await this.contextGenerationService.secureGlob(
671
683
  `${folderPath}/**/*`,
672
684
  );
673
- const fileContents = <span class="cstat-no" title="statement not covered" >await Promise.all(</span>
685
+ const fileContents = await Promise.all(
674
686
  filesInFolder.map(<span class="fstat-no" title="function not covered" >(f</span>ilePath: string) =&gt;
675
687
  <span class="cstat-no" title="statement not covered" > this.contextGenerationService.secureReadFile(filePath),</span>
676
688
  ),
677
689
  );
678
690
  &nbsp;
679
- <span class="cstat-no" title="statement not covered" > return [header, ...fileContents].join('\n\n');</span>
691
+ return [header, ...fileContents].join('\n\n');
680
692
  }),
681
693
  );
682
- <span class="cstat-no" title="statement not covered" > adHocData.adhoc_folders_content = folderContexts.join('\n\n---\n\n');</span>
694
+ adHocData.adhoc_folders_content = folderContexts.join('\n\n---\n\n');
683
695
  }
684
696
  &nbsp;
685
- const data = <span class="cstat-no" title="statement not covered" >{</span>
697
+ const data = {
686
698
  ad_hoc_context_definition: dto.ad_hoc_context_definition || null,
687
699
  user_input: dto.user_prompt,
688
700
  system_prompt: systemPromptContent,
@@ -691,33 +703,33 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
691
703
  ...adHocData,
692
704
  };
693
705
  &nbsp;
694
- <span class="cstat-no" title="statement not covered" > try {</span>
695
- const generatedString = <span class="cstat-no" title="statement not covered" >await this.contextGenerationService.render(</span>
706
+ try {
707
+ const generatedString = await this.contextGenerationService.render(
696
708
  templateContent,
697
709
  data,
698
710
  );
699
711
  &nbsp;
700
712
  const websocketEnabled =
701
- <span class="cstat-no" title="statement not covered" > await this.applicationStateService.getWebsocketEnabled();</span>
702
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (websocketEnabled) {</span>
703
- <span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('llm-input-generated', {</span>
713
+ await this.applicationStateService.getWebsocketEnabled();
714
+ if (websocketEnabled) {
715
+ this.eventsGateway.sendToAll('llm-input-generated', {
704
716
  prompt: generatedString,
705
717
  });
706
718
  }
707
719
  &nbsp;
708
- <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!templateContent.includes('it.user_input')) {</span>
709
- <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
720
+ if (!templateContent.includes('it.user_input')) {
721
+ this.logger.warn(
710
722
  "Template does not explicitly use 'it.user_input'. Appending user prompt to the end.",
711
723
  );
712
- <span class="cstat-no" title="statement not covered" > return generatedString.trim()</span>
724
+ return generatedString.trim()
713
725
  ? `${generatedString}\n\n${dto.user_prompt}`
714
- : dto.user_prompt;
726
+ : <span class="branch-1 cbranch-no" title="branch not covered" >dto.user_prompt;</span>
715
727
  }
716
728
  &nbsp;
717
- <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
729
+ this.logger.log(
718
730
  `Generated context string of length ${generatedString.length}`,
719
731
  );
720
- <span class="cstat-no" title="statement not covered" > return generatedString;</span>
732
+ return generatedString;
721
733
  } catch (error) {
722
734
  <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
723
735
  `Context generation failed: ${error.message}`,
@@ -736,7 +748,7 @@ export class <span class="cstat-no" title="statement not covered" ><span class="
736
748
  <div class='footer quiet pad2 space-top1 center small'>
737
749
  Code coverage generated by
738
750
  <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
739
- at 2025-07-30T23:37:05.373Z
751
+ at 2025-09-12T19:21:55.945Z
740
752
  </div>
741
753
  <script src="../../prettify.js"></script>
742
754
  <script>