repoburg 1.0.39 → 1.0.40

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 (215) hide show
  1. package/backend/.env +1 -7
  2. package/backend/coverage/clover.xml +3380 -0
  3. package/backend/coverage/coverage-final.json +117 -0
  4. package/backend/coverage/lcov-report/base.css +224 -0
  5. package/backend/coverage/lcov-report/block-navigation.js +87 -0
  6. package/backend/coverage/lcov-report/favicon.png +0 -0
  7. package/backend/coverage/lcov-report/index.html +686 -0
  8. package/backend/coverage/lcov-report/prettify.css +1 -0
  9. package/backend/coverage/lcov-report/prettify.js +2 -0
  10. package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  11. package/backend/coverage/lcov-report/sorter.js +196 -0
  12. package/backend/coverage/lcov-report/src/action-execution/action-execution.module.ts.html +109 -0
  13. package/backend/coverage/lcov-report/src/action-execution/action-execution.service.ts.html +370 -0
  14. package/backend/coverage/lcov-report/src/action-execution/index.html +131 -0
  15. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +940 -0
  16. package/backend/coverage/lcov-report/src/ai-actions/ai-action-creation.service.ts.html +1195 -0
  17. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +664 -0
  18. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +154 -0
  19. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +859 -0
  20. package/backend/coverage/lcov-report/src/ai-actions/index.html +176 -0
  21. package/backend/coverage/lcov-report/src/app.controller.ts.html +151 -0
  22. package/backend/coverage/lcov-report/src/app.module.ts.html +370 -0
  23. package/backend/coverage/lcov-report/src/app.service.ts.html +163 -0
  24. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +265 -0
  25. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +124 -0
  26. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +394 -0
  27. package/backend/coverage/lcov-report/src/application-state/dto/index.html +146 -0
  28. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +103 -0
  29. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +106 -0
  30. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +103 -0
  31. package/backend/coverage/lcov-report/src/application-state/index.html +146 -0
  32. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +118 -0
  33. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +1348 -0
  34. package/backend/coverage/lcov-report/src/context-generation/index.html +131 -0
  35. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +289 -0
  36. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +136 -0
  37. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +400 -0
  38. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +211 -0
  39. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +116 -0
  40. package/backend/coverage/lcov-report/src/context-snippets/index.html +146 -0
  41. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +397 -0
  42. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +136 -0
  43. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +832 -0
  44. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +358 -0
  45. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +116 -0
  46. package/backend/coverage/lcov-report/src/context-templates/index.html +146 -0
  47. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +241 -0
  48. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +115 -0
  49. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +145 -0
  50. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +130 -0
  51. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +223 -0
  52. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +136 -0
  53. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +157 -0
  54. package/backend/coverage/lcov-report/src/core-entities/index.html +281 -0
  55. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +118 -0
  56. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +130 -0
  57. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +280 -0
  58. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +280 -0
  59. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +148 -0
  60. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +277 -0
  61. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +124 -0
  62. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +304 -0
  63. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +205 -0
  64. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +116 -0
  65. package/backend/coverage/lcov-report/src/custom-snippets/index.html +146 -0
  66. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +292 -0
  67. package/backend/coverage/lcov-report/src/events/events.module.ts.html +109 -0
  68. package/backend/coverage/lcov-report/src/events/index.html +131 -0
  69. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +130 -0
  70. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +116 -0
  71. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +130 -0
  72. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +124 -0
  73. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +238 -0
  74. package/backend/coverage/lcov-report/src/execution-logs/index.html +146 -0
  75. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +340 -0
  76. package/backend/coverage/lcov-report/src/index.html +191 -0
  77. package/backend/coverage/lcov-report/src/llm-response-parser/dto/ai-action.dto.ts.html +400 -0
  78. package/backend/coverage/lcov-report/src/llm-response-parser/dto/index.html +116 -0
  79. package/backend/coverage/lcov-report/src/llm-response-parser/errors/index.html +116 -0
  80. package/backend/coverage/lcov-report/src/llm-response-parser/errors/parsing.error.ts.html +118 -0
  81. package/backend/coverage/lcov-report/src/llm-response-parser/index.html +146 -0
  82. package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.module.ts.html +109 -0
  83. package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.service.ts.html +808 -0
  84. package/backend/coverage/lcov-report/src/llm-response-parser/parsing.constants.ts.html +139 -0
  85. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +116 -0
  86. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +172 -0
  87. package/backend/coverage/lcov-report/src/llm-responses/index.html +146 -0
  88. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +154 -0
  89. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +163 -0
  90. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +766 -0
  91. package/backend/coverage/lcov-report/src/main.ts.html +382 -0
  92. package/backend/coverage/lcov-report/src/orchestration/dto/index.html +116 -0
  93. package/backend/coverage/lcov-report/src/orchestration/dto/orchestration.dto.ts.html +184 -0
  94. package/backend/coverage/lcov-report/src/orchestration/index.html +191 -0
  95. package/backend/coverage/lcov-report/src/orchestration/orchestration-fs.service.ts.html +478 -0
  96. package/backend/coverage/lcov-report/src/orchestration/orchestration-parser.service.ts.html +310 -0
  97. package/backend/coverage/lcov-report/src/orchestration/orchestration.controller.ts.html +436 -0
  98. package/backend/coverage/lcov-report/src/orchestration/orchestration.module.ts.html +172 -0
  99. package/backend/coverage/lcov-report/src/orchestration/orchestration.service.ts.html +1201 -0
  100. package/backend/coverage/lcov-report/src/orchestration/orchestration.types.ts.html +169 -0
  101. package/backend/coverage/lcov-report/src/projects/dto/index.html +116 -0
  102. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +154 -0
  103. package/backend/coverage/lcov-report/src/projects/index.html +146 -0
  104. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +232 -0
  105. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +124 -0
  106. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +223 -0
  107. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +355 -0
  108. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +271 -0
  109. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +136 -0
  110. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +148 -0
  111. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +247 -0
  112. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +191 -0
  113. package/backend/coverage/lcov-report/src/seeding/data/context-templates/pm-context.ts.html +250 -0
  114. package/backend/coverage/lcov-report/src/seeding/data/context-templates/pr-description.ts.html +187 -0
  115. package/backend/coverage/lcov-report/src/seeding/data/context-templates/sample_focused-tree.ts.html +124 -0
  116. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +94 -0
  117. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +94 -0
  118. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +236 -0
  119. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +94 -0
  120. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +94 -0
  121. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +94 -0
  122. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +94 -0
  123. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +94 -0
  124. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +100 -0
  125. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +94 -0
  126. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/codebase-explorer.ts.html +331 -0
  127. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_multi-file-action-generator-with-requester.ts.html +670 -0
  128. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +161 -0
  129. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/multi-file-action-generator.ts.html +550 -0
  130. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/packup.ts.html +184 -0
  131. package/backend/coverage/lcov-report/src/seeding/index.html +176 -0
  132. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +145 -0
  133. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +151 -0
  134. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +289 -0
  135. package/backend/coverage/lcov-report/src/session-followup/index.html +131 -0
  136. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +130 -0
  137. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +667 -0
  138. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +116 -0
  139. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +235 -0
  140. package/backend/coverage/lcov-report/src/session-inputs/index.html +161 -0
  141. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +751 -0
  142. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +337 -0
  143. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +202 -0
  144. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +1615 -0
  145. package/backend/coverage/lcov-report/src/session-transfer/index.html +131 -0
  146. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +172 -0
  147. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +574 -0
  148. package/backend/coverage/lcov-report/src/sessions/dto/index.html +116 -0
  149. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +340 -0
  150. package/backend/coverage/lcov-report/src/sessions/index.html +146 -0
  151. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +457 -0
  152. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +214 -0
  153. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +844 -0
  154. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +116 -0
  155. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +208 -0
  156. package/backend/coverage/lcov-report/src/system-prompts/index.html +146 -0
  157. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +298 -0
  158. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +127 -0
  159. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +352 -0
  160. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +178 -0
  161. package/backend/coverage/lcov-report/src/workspace/dto/index.html +116 -0
  162. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +193 -0
  163. package/backend/coverage/lcov-report/src/workspace/index.html +146 -0
  164. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +247 -0
  165. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +121 -0
  166. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +700 -0
  167. package/backend/coverage/lcov.info +5492 -0
  168. package/backend/dist/ai-actions/ai-action-creation.service.d.ts +2 -0
  169. package/backend/dist/ai-actions/ai-action-creation.service.js +65 -0
  170. package/backend/dist/ai-actions/ai-action-creation.service.js.map +1 -1
  171. package/backend/dist/app.module.js +2 -0
  172. package/backend/dist/app.module.js.map +1 -1
  173. package/backend/dist/application-state/application-state.service.d.ts +4 -0
  174. package/backend/dist/application-state/application-state.service.js +25 -0
  175. package/backend/dist/application-state/application-state.service.js.map +1 -1
  176. package/backend/dist/context-templates/context-templates.service.d.ts +1 -0
  177. package/backend/dist/context-templates/context-templates.service.js +3 -0
  178. package/backend/dist/context-templates/context-templates.service.js.map +1 -1
  179. package/backend/dist/llm-responses/llm-responses.module.js +4 -1
  180. package/backend/dist/llm-responses/llm-responses.module.js.map +1 -1
  181. package/backend/dist/llm-responses/llm-responses.service.d.ts +3 -1
  182. package/backend/dist/llm-responses/llm-responses.service.js +29 -2
  183. package/backend/dist/llm-responses/llm-responses.service.js.map +1 -1
  184. package/backend/dist/orchestration/dto/orchestration.dto.d.ts +15 -0
  185. package/backend/dist/orchestration/dto/orchestration.dto.js +58 -0
  186. package/backend/dist/orchestration/dto/orchestration.dto.js.map +1 -0
  187. package/backend/dist/orchestration/orchestration-fs.service.d.ts +18 -0
  188. package/backend/dist/orchestration/orchestration-fs.service.js +124 -0
  189. package/backend/dist/orchestration/orchestration-fs.service.js.map +1 -0
  190. package/backend/dist/orchestration/orchestration-parser.service.d.ts +16 -0
  191. package/backend/dist/orchestration/orchestration-parser.service.js +78 -0
  192. package/backend/dist/orchestration/orchestration-parser.service.js.map +1 -0
  193. package/backend/dist/orchestration/orchestration.controller.d.ts +28 -0
  194. package/backend/dist/orchestration/orchestration.controller.js +158 -0
  195. package/backend/dist/orchestration/orchestration.controller.js.map +1 -0
  196. package/backend/dist/orchestration/orchestration.module.d.ts +2 -0
  197. package/backend/dist/orchestration/orchestration.module.js +43 -0
  198. package/backend/dist/orchestration/orchestration.module.js.map +1 -0
  199. package/backend/dist/orchestration/orchestration.service.d.ts +38 -0
  200. package/backend/dist/orchestration/orchestration.service.js +301 -0
  201. package/backend/dist/orchestration/orchestration.service.js.map +1 -0
  202. package/backend/dist/orchestration/orchestration.types.d.ts +27 -0
  203. package/backend/dist/orchestration/orchestration.types.js +20 -0
  204. package/backend/dist/orchestration/orchestration.types.js.map +1 -0
  205. package/backend/dist/session-inputs/session-inputs.module.js +2 -0
  206. package/backend/dist/session-inputs/session-inputs.module.js.map +1 -1
  207. package/backend/dist/session-inputs/session-inputs.service.d.ts +3 -1
  208. package/backend/dist/session-inputs/session-inputs.service.js +13 -2
  209. package/backend/dist/session-inputs/session-inputs.service.js.map +1 -1
  210. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  211. package/backend/orchestration-test-2.txt +1 -0
  212. package/backend/orchestration-test.txt +1 -0
  213. package/backend/package.json +1 -1
  214. package/orchestration-test.txt +3 -0
  215. package/package.json +1 -1
@@ -0,0 +1,1201 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/orchestration/orchestration.service.ts</title>
7
+ <meta charset="utf-8" />
8
+ <link rel="stylesheet" href="../../prettify.css" />
9
+ <link rel="stylesheet" href="../../base.css" />
10
+ <link rel="shortcut icon" type="image/x-icon" href="../../favicon.png" />
11
+ <meta name="viewport" content="width=device-width, initial-scale=1" />
12
+ <style type='text/css'>
13
+ .coverage-summary .sorter {
14
+ background-image: url(../../sort-arrow-sprite.png);
15
+ }
16
+ </style>
17
+ </head>
18
+
19
+ <body>
20
+ <div class='wrapper'>
21
+ <div class='pad1'>
22
+ <h1><a href="../../index.html">All files</a> / <a href="index.html">src/orchestration</a> orchestration.service.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">0% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>0/174</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/49</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">0% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>0/25</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">0% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>0/160</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a></td><td class="line-coverage quiet"><span class="cline-any cline-no">&nbsp;</span>
439
+ <span class="cline-any cline-neutral">&nbsp;</span>
440
+ <span class="cline-any cline-neutral">&nbsp;</span>
441
+ <span class="cline-any cline-neutral">&nbsp;</span>
442
+ <span class="cline-any cline-neutral">&nbsp;</span>
443
+ <span class="cline-any cline-neutral">&nbsp;</span>
444
+ <span class="cline-any cline-neutral">&nbsp;</span>
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>
448
+ <span class="cline-any cline-no">&nbsp;</span>
449
+ <span class="cline-any cline-neutral">&nbsp;</span>
450
+ <span class="cline-any cline-neutral">&nbsp;</span>
451
+ <span class="cline-any cline-neutral">&nbsp;</span>
452
+ <span class="cline-any cline-neutral">&nbsp;</span>
453
+ <span class="cline-any cline-neutral">&nbsp;</span>
454
+ <span class="cline-any cline-no">&nbsp;</span>
455
+ <span class="cline-any cline-no">&nbsp;</span>
456
+ <span class="cline-any cline-no">&nbsp;</span>
457
+ <span class="cline-any cline-no">&nbsp;</span>
458
+ <span class="cline-any cline-no">&nbsp;</span>
459
+ <span class="cline-any cline-no">&nbsp;</span>
460
+ <span class="cline-any cline-neutral">&nbsp;</span>
461
+ <span class="cline-any cline-neutral">&nbsp;</span>
462
+ <span class="cline-any cline-no">&nbsp;</span>
463
+ <span class="cline-any cline-no">&nbsp;</span>
464
+ <span class="cline-any cline-no">&nbsp;</span>
465
+ <span class="cline-any cline-no">&nbsp;</span>
466
+ <span class="cline-any cline-no">&nbsp;</span>
467
+ <span class="cline-any cline-neutral">&nbsp;</span>
468
+ <span class="cline-any cline-neutral">&nbsp;</span>
469
+ <span class="cline-any cline-no">&nbsp;</span>
470
+ <span class="cline-any cline-no">&nbsp;</span>
471
+ <span class="cline-any cline-no">&nbsp;</span>
472
+ <span class="cline-any cline-no">&nbsp;</span>
473
+ <span class="cline-any cline-no">&nbsp;</span>
474
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
478
+ <span class="cline-any cline-no">&nbsp;</span>
479
+ <span class="cline-any cline-neutral">&nbsp;</span>
480
+ <span class="cline-any cline-neutral">&nbsp;</span>
481
+ <span class="cline-any cline-neutral">&nbsp;</span>
482
+ <span class="cline-any cline-no">&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>
486
+ <span class="cline-any cline-neutral">&nbsp;</span>
487
+ <span class="cline-any cline-neutral">&nbsp;</span>
488
+ <span class="cline-any cline-neutral">&nbsp;</span>
489
+ <span class="cline-any cline-neutral">&nbsp;</span>
490
+ <span class="cline-any cline-neutral">&nbsp;</span>
491
+ <span class="cline-any cline-no">&nbsp;</span>
492
+ <span class="cline-any cline-neutral">&nbsp;</span>
493
+ <span class="cline-any cline-neutral">&nbsp;</span>
494
+ <span class="cline-any cline-no">&nbsp;</span>
495
+ <span class="cline-any cline-no">&nbsp;</span>
496
+ <span class="cline-any cline-neutral">&nbsp;</span>
497
+ <span class="cline-any cline-no">&nbsp;</span>
498
+ <span class="cline-any cline-no">&nbsp;</span>
499
+ <span class="cline-any cline-no">&nbsp;</span>
500
+ <span class="cline-any cline-no">&nbsp;</span>
501
+ <span class="cline-any cline-neutral">&nbsp;</span>
502
+ <span class="cline-any cline-neutral">&nbsp;</span>
503
+ <span class="cline-any cline-neutral">&nbsp;</span>
504
+ <span class="cline-any cline-neutral">&nbsp;</span>
505
+ <span class="cline-any cline-neutral">&nbsp;</span>
506
+ <span class="cline-any cline-neutral">&nbsp;</span>
507
+ <span class="cline-any cline-neutral">&nbsp;</span>
508
+ <span class="cline-any cline-no">&nbsp;</span>
509
+ <span class="cline-any cline-no">&nbsp;</span>
510
+ <span class="cline-any cline-neutral">&nbsp;</span>
511
+ <span class="cline-any cline-neutral">&nbsp;</span>
512
+ <span class="cline-any cline-neutral">&nbsp;</span>
513
+ <span class="cline-any cline-neutral">&nbsp;</span>
514
+ <span class="cline-any cline-neutral">&nbsp;</span>
515
+ <span class="cline-any cline-neutral">&nbsp;</span>
516
+ <span class="cline-any cline-neutral">&nbsp;</span>
517
+ <span class="cline-any cline-neutral">&nbsp;</span>
518
+ <span class="cline-any cline-no">&nbsp;</span>
519
+ <span class="cline-any cline-no">&nbsp;</span>
520
+ <span class="cline-any cline-no">&nbsp;</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-no">&nbsp;</span>
523
+ <span class="cline-any cline-no">&nbsp;</span>
524
+ <span class="cline-any cline-no">&nbsp;</span>
525
+ <span class="cline-any cline-no">&nbsp;</span>
526
+ <span class="cline-any cline-neutral">&nbsp;</span>
527
+ <span class="cline-any cline-no">&nbsp;</span>
528
+ <span class="cline-any cline-neutral">&nbsp;</span>
529
+ <span class="cline-any cline-no">&nbsp;</span>
530
+ <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-no">&nbsp;</span>
532
+ <span class="cline-any cline-neutral">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-neutral">&nbsp;</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-neutral">&nbsp;</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-no">&nbsp;</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-neutral">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-no">&nbsp;</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-neutral">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-neutral">&nbsp;</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-neutral">&nbsp;</span>
549
+ <span class="cline-any cline-no">&nbsp;</span>
550
+ <span class="cline-any cline-no">&nbsp;</span>
551
+ <span class="cline-any cline-no">&nbsp;</span>
552
+ <span class="cline-any cline-no">&nbsp;</span>
553
+ <span class="cline-any cline-neutral">&nbsp;</span>
554
+ <span class="cline-any cline-neutral">&nbsp;</span>
555
+ <span class="cline-any cline-neutral">&nbsp;</span>
556
+ <span class="cline-any cline-no">&nbsp;</span>
557
+ <span class="cline-any cline-neutral">&nbsp;</span>
558
+ <span class="cline-any cline-neutral">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-no">&nbsp;</span>
561
+ <span class="cline-any cline-no">&nbsp;</span>
562
+ <span class="cline-any cline-neutral">&nbsp;</span>
563
+ <span class="cline-any cline-neutral">&nbsp;</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-no">&nbsp;</span>
566
+ <span class="cline-any cline-no">&nbsp;</span>
567
+ <span class="cline-any cline-no">&nbsp;</span>
568
+ <span class="cline-any cline-neutral">&nbsp;</span>
569
+ <span class="cline-any cline-no">&nbsp;</span>
570
+ <span class="cline-any cline-neutral">&nbsp;</span>
571
+ <span class="cline-any cline-neutral">&nbsp;</span>
572
+ <span class="cline-any cline-neutral">&nbsp;</span>
573
+ <span class="cline-any cline-neutral">&nbsp;</span>
574
+ <span class="cline-any cline-no">&nbsp;</span>
575
+ <span class="cline-any cline-no">&nbsp;</span>
576
+ <span class="cline-any cline-no">&nbsp;</span>
577
+ <span class="cline-any cline-no">&nbsp;</span>
578
+ <span class="cline-any cline-neutral">&nbsp;</span>
579
+ <span class="cline-any cline-neutral">&nbsp;</span>
580
+ <span class="cline-any cline-no">&nbsp;</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-neutral">&nbsp;</span>
583
+ <span class="cline-any cline-neutral">&nbsp;</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-neutral">&nbsp;</span>
586
+ <span class="cline-any cline-neutral">&nbsp;</span>
587
+ <span class="cline-any cline-neutral">&nbsp;</span>
588
+ <span class="cline-any cline-neutral">&nbsp;</span>
589
+ <span class="cline-any cline-neutral">&nbsp;</span>
590
+ <span class="cline-any cline-neutral">&nbsp;</span>
591
+ <span class="cline-any cline-neutral">&nbsp;</span>
592
+ <span class="cline-any cline-neutral">&nbsp;</span>
593
+ <span class="cline-any cline-no">&nbsp;</span>
594
+ <span class="cline-any cline-no">&nbsp;</span>
595
+ <span class="cline-any cline-no">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
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>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-no">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-no">&nbsp;</span>
609
+ <span class="cline-any cline-neutral">&nbsp;</span>
610
+ <span class="cline-any cline-no">&nbsp;</span>
611
+ <span class="cline-any cline-no">&nbsp;</span>
612
+ <span class="cline-any cline-no">&nbsp;</span>
613
+ <span class="cline-any cline-no">&nbsp;</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-neutral">&nbsp;</span>
616
+ <span class="cline-any cline-no">&nbsp;</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-no">&nbsp;</span>
619
+ <span class="cline-any cline-no">&nbsp;</span>
620
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
+ <span class="cline-any cline-neutral">&nbsp;</span>
622
+ <span class="cline-any cline-no">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-no">&nbsp;</span>
625
+ <span class="cline-any cline-no">&nbsp;</span>
626
+ <span class="cline-any cline-no">&nbsp;</span>
627
+ <span class="cline-any cline-no">&nbsp;</span>
628
+ <span class="cline-any cline-no">&nbsp;</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-neutral">&nbsp;</span>
631
+ <span class="cline-any cline-no">&nbsp;</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-no">&nbsp;</span>
634
+ <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-no">&nbsp;</span>
636
+ <span class="cline-any cline-no">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-no">&nbsp;</span>
640
+ <span class="cline-any cline-no">&nbsp;</span>
641
+ <span class="cline-any cline-no">&nbsp;</span>
642
+ <span class="cline-any cline-no">&nbsp;</span>
643
+ <span class="cline-any cline-no">&nbsp;</span>
644
+ <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-no">&nbsp;</span>
646
+ <span class="cline-any cline-neutral">&nbsp;</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</span>
648
+ <span class="cline-any cline-no">&nbsp;</span>
649
+ <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-no">&nbsp;</span>
654
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
+ <span class="cline-any cline-neutral">&nbsp;</span>
656
+ <span class="cline-any cline-no">&nbsp;</span>
657
+ <span class="cline-any cline-no">&nbsp;</span>
658
+ <span class="cline-any cline-no">&nbsp;</span>
659
+ <span class="cline-any cline-neutral">&nbsp;</span>
660
+ <span class="cline-any cline-no">&nbsp;</span>
661
+ <span class="cline-any cline-no">&nbsp;</span>
662
+ <span class="cline-any cline-neutral">&nbsp;</span>
663
+ <span class="cline-any cline-neutral">&nbsp;</span>
664
+ <span class="cline-any cline-no">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-no">&nbsp;</span>
672
+ <span class="cline-any cline-no">&nbsp;</span>
673
+ <span class="cline-any cline-no">&nbsp;</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-no">&nbsp;</span>
676
+ <span class="cline-any cline-neutral">&nbsp;</span>
677
+ <span class="cline-any cline-neutral">&nbsp;</span>
678
+ <span class="cline-any cline-no">&nbsp;</span>
679
+ <span class="cline-any cline-no">&nbsp;</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-neutral">&nbsp;</span>
682
+ <span class="cline-any cline-no">&nbsp;</span>
683
+ <span class="cline-any cline-no">&nbsp;</span>
684
+ <span class="cline-any cline-neutral">&nbsp;</span>
685
+ <span class="cline-any cline-neutral">&nbsp;</span>
686
+ <span class="cline-any cline-neutral">&nbsp;</span>
687
+ <span class="cline-any cline-no">&nbsp;</span>
688
+ <span class="cline-any cline-no">&nbsp;</span>
689
+ <span class="cline-any cline-neutral">&nbsp;</span>
690
+ <span class="cline-any cline-neutral">&nbsp;</span>
691
+ <span class="cline-any cline-no">&nbsp;</span>
692
+ <span class="cline-any cline-neutral">&nbsp;</span>
693
+ <span class="cline-any cline-neutral">&nbsp;</span>
694
+ <span class="cline-any cline-neutral">&nbsp;</span>
695
+ <span class="cline-any cline-no">&nbsp;</span>
696
+ <span class="cline-any cline-no">&nbsp;</span>
697
+ <span class="cline-any cline-neutral">&nbsp;</span>
698
+ <span class="cline-any cline-neutral">&nbsp;</span>
699
+ <span class="cline-any cline-no">&nbsp;</span>
700
+ <span class="cline-any cline-neutral">&nbsp;</span>
701
+ <span class="cline-any cline-neutral">&nbsp;</span>
702
+ <span class="cline-any cline-neutral">&nbsp;</span>
703
+ <span class="cline-any cline-neutral">&nbsp;</span>
704
+ <span class="cline-any cline-neutral">&nbsp;</span>
705
+ <span class="cline-any cline-neutral">&nbsp;</span>
706
+ <span class="cline-any cline-no">&nbsp;</span>
707
+ <span class="cline-any cline-neutral">&nbsp;</span>
708
+ <span class="cline-any cline-neutral">&nbsp;</span>
709
+ <span class="cline-any cline-neutral">&nbsp;</span>
710
+ <span class="cline-any cline-neutral">&nbsp;</span>
711
+ <span class="cline-any cline-no">&nbsp;</span>
712
+ <span class="cline-any cline-no">&nbsp;</span>
713
+ <span class="cline-any cline-no">&nbsp;</span>
714
+ <span class="cline-any cline-neutral">&nbsp;</span>
715
+ <span class="cline-any cline-neutral">&nbsp;</span>
716
+ <span class="cline-any cline-neutral">&nbsp;</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
+ <span class="cline-any cline-no">&nbsp;</span>
719
+ <span class="cline-any cline-neutral">&nbsp;</span>
720
+ <span class="cline-any cline-neutral">&nbsp;</span>
721
+ <span class="cline-any cline-neutral">&nbsp;</span>
722
+ <span class="cline-any cline-no">&nbsp;</span>
723
+ <span class="cline-any cline-no">&nbsp;</span>
724
+ <span class="cline-any cline-neutral">&nbsp;</span>
725
+ <span class="cline-any cline-neutral">&nbsp;</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-neutral">&nbsp;</span>
728
+ <span class="cline-any cline-no">&nbsp;</span>
729
+ <span class="cline-any cline-no">&nbsp;</span>
730
+ <span class="cline-any cline-no">&nbsp;</span>
731
+ <span class="cline-any cline-no">&nbsp;</span>
732
+ <span class="cline-any cline-neutral">&nbsp;</span>
733
+ <span class="cline-any cline-neutral">&nbsp;</span>
734
+ <span class="cline-any cline-neutral">&nbsp;</span>
735
+ <span class="cline-any cline-neutral">&nbsp;</span>
736
+ <span class="cline-any cline-neutral">&nbsp;</span>
737
+ <span class="cline-any cline-neutral">&nbsp;</span>
738
+ <span class="cline-any cline-no">&nbsp;</span>
739
+ <span class="cline-any cline-no">&nbsp;</span>
740
+ <span class="cline-any cline-no">&nbsp;</span>
741
+ <span class="cline-any cline-neutral">&nbsp;</span>
742
+ <span class="cline-any cline-neutral">&nbsp;</span>
743
+ <span class="cline-any cline-neutral">&nbsp;</span>
744
+ <span class="cline-any cline-neutral">&nbsp;</span>
745
+ <span class="cline-any cline-no">&nbsp;</span>
746
+ <span class="cline-any cline-neutral">&nbsp;</span>
747
+ <span class="cline-any cline-neutral">&nbsp;</span>
748
+ <span class="cline-any cline-no">&nbsp;</span>
749
+ <span class="cline-any cline-no">&nbsp;</span>
750
+ <span class="cline-any cline-no">&nbsp;</span>
751
+ <span class="cline-any cline-neutral">&nbsp;</span>
752
+ <span class="cline-any cline-no">&nbsp;</span>
753
+ <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-neutral">&nbsp;</span>
755
+ <span class="cline-any cline-no">&nbsp;</span>
756
+ <span class="cline-any cline-neutral">&nbsp;</span>
757
+ <span class="cline-any cline-neutral">&nbsp;</span>
758
+ <span class="cline-any cline-no">&nbsp;</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-no">&nbsp;</span>
761
+ <span class="cline-any cline-no">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-no">&nbsp;</span>
765
+ <span class="cline-any cline-neutral">&nbsp;</span>
766
+ <span class="cline-any cline-neutral">&nbsp;</span>
767
+ <span class="cline-any cline-no">&nbsp;</span>
768
+ <span class="cline-any cline-no">&nbsp;</span>
769
+ <span class="cline-any cline-neutral">&nbsp;</span>
770
+ <span class="cline-any cline-neutral">&nbsp;</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-no">&nbsp;</span>
773
+ <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
775
+ <span class="cline-any cline-no">&nbsp;</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span>
777
+ <span class="cline-any cline-no">&nbsp;</span>
778
+ <span class="cline-any cline-no">&nbsp;</span>
779
+ <span class="cline-any cline-neutral">&nbsp;</span>
780
+ <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-no">&nbsp;</span>
783
+ <span class="cline-any cline-neutral">&nbsp;</span>
784
+ <span class="cline-any cline-neutral">&nbsp;</span>
785
+ <span class="cline-any cline-neutral">&nbsp;</span>
786
+ <span class="cline-any cline-neutral">&nbsp;</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-no">&nbsp;</span>
789
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-neutral">&nbsp;</span>
791
+ <span class="cline-any cline-neutral">&nbsp;</span>
792
+ <span class="cline-any cline-neutral">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-no">&nbsp;</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-neutral">&nbsp;</span>
798
+ <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-no">&nbsp;</span>
800
+ <span class="cline-any cline-no">&nbsp;</span>
801
+ <span class="cline-any cline-neutral">&nbsp;</span>
802
+ <span class="cline-any cline-neutral">&nbsp;</span>
803
+ <span class="cline-any cline-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-no">&nbsp;</span>
805
+ <span class="cline-any cline-no">&nbsp;</span>
806
+ <span class="cline-any cline-no">&nbsp;</span>
807
+ <span class="cline-any cline-no">&nbsp;</span>
808
+ <span class="cline-any cline-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-neutral">&nbsp;</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js"><span class="cstat-no" title="statement not covered" >import {</span>
811
+ Injectable,
812
+ Logger,
813
+ Scope,
814
+ Inject,
815
+ forwardRef,
816
+ BadRequestException,
817
+ } from '@nestjs/common';
818
+ <span class="cstat-no" title="statement not covered" >import { OrchestrationFsService } from './orchestration-fs.service';</span>
819
+ <span class="cstat-no" title="statement not covered" >import { ApplicationStateService } from '../application-state/application-state.service';</span>
820
+ <span class="cstat-no" title="statement not covered" >import {</span>
821
+ OrchestrationMode,
822
+ OrchestrationRunState,
823
+ OrchestrationStatus,
824
+ } from './orchestration.types';
825
+ import { StartOrchestrationDto } from './dto/orchestration.dto';
826
+ <span class="cstat-no" title="statement not covered" >import { randomUUID } from 'crypto';</span>
827
+ <span class="cstat-no" title="statement not covered" >import { EventsGateway } from '../events/events.gateway';</span>
828
+ <span class="cstat-no" title="statement not covered" >import { SessionInputsService } from '../session-inputs/session-inputs.service';</span>
829
+ <span class="cstat-no" title="statement not covered" >import { ContextTemplatesService } from '../context-templates/context-templates.service';</span>
830
+ <span class="cstat-no" title="statement not covered" >import { SessionsService } from '../sessions/sessions.service';</span>
831
+ <span class="cstat-no" title="statement not covered" >import { OrchestrationParserService } from './orchestration-parser.service';</span>
832
+ &nbsp;
833
+ @Injectable({ scope: Scope.DEFAULT }) // Singleton
834
+ export class <span class="cstat-no" title="statement not covered" ><span class="cstat-no" title="statement not covered" >OrchestrationService<span class="cstat-no" title="statement not covered" > </span>{</span></span>
835
+ private readonly <span class="cstat-no" title="statement not covered" >logger = new Logger(OrchestrationService.name);</span>
836
+ private <span class="cstat-no" title="statement not covered" >activeRun: OrchestrationRunState | null = null;</span>
837
+ private <span class="cstat-no" title="statement not covered" >timeoutTimer: NodeJS.Timeout | null = null;</span>
838
+ private readonly <span class="cstat-no" title="statement not covered" >TIMEOUT_MS = 6 * 60 * 1000; </span>// 6 minutes
839
+ &nbsp;
840
+ <span class="fstat-no" title="function not covered" > constructor(</span>
841
+ private readonly <span class="cstat-no" title="statement not covered" >fsService: O</span>rchestrationFsService,
842
+ private readonly <span class="cstat-no" title="statement not covered" >appStateService: A</span>pplicationStateService,
843
+ private readonly <span class="cstat-no" title="statement not covered" >eventsGateway: E</span>ventsGateway,
844
+ private readonly <span class="cstat-no" title="statement not covered" >parserService: O</span>rchestrationParserService,
845
+ @Inject(forwardRef(<span class="fstat-no" title="function not covered" >() =</span>&gt; <span class="cstat-no" title="statement not covered" >SessionInputsService)</span>)
846
+ private readonly <span class="cstat-no" title="statement not covered" >sessionInputsService: S</span>essionInputsService,
847
+ private readonly <span class="cstat-no" title="statement not covered" >contextTemplatesService: C</span>ontextTemplatesService,
848
+ private readonly <span class="cstat-no" title="statement not covered" >sessionsService: S</span>essionsService,
849
+ ) {
850
+ <span class="cstat-no" title="statement not covered" > this.loadStateFromPersistence();</span>
851
+ }
852
+ &nbsp;
853
+ private <span class="fstat-no" title="function not covered" >async </span>loadStateFromPersistence() {
854
+ const persistedState = <span class="cstat-no" title="statement not covered" >await this.appStateService.getOrchestrationRunState();</span>
855
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (persistedState) {</span>
856
+ <span class="cstat-no" title="statement not covered" > this.logger.log('Loading persisted orchestration state:', persistedState);</span>
857
+ <span class="cstat-no" title="statement not covered" > if (</span>
858
+ [
859
+ OrchestrationStatus.RUNNING,
860
+ OrchestrationStatus.WAITING_FOR_LLM_RESPONSE,
861
+ ].includes(persistedState.status)
862
+ ) {
863
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
864
+ `Server restarted during an active orchestration run (${persistedState.runId}). Setting status to FAILED.`,
865
+ );
866
+ <span class="cstat-no" title="statement not covered" > persistedState.status = OrchestrationStatus.FAILED;</span>
867
+ <span class="cstat-no" title="statement not covered" > persistedState.error =</span>
868
+ 'Orchestration failed due to an unexpected server restart.';
869
+ <span class="cstat-no" title="statement not covered" > this.activeRun = persistedState;</span>
870
+ <span class="cstat-no" title="statement not covered" > await this.persistState();</span>
871
+ <span class="cstat-no" title="statement not covered" > this.emitStatus();</span>
872
+ } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
873
+ [
874
+ OrchestrationStatus.COMPLETED,
875
+ OrchestrationStatus.FAILED,
876
+ OrchestrationStatus.STOPPED,
877
+ ].includes(persistedState.status)
878
+ ) {
879
+ // If the server restarts after a terminal state, load it so the user can dismiss it.
880
+ <span class="cstat-no" title="statement not covered" > this.activeRun = persistedState;</span>
881
+ <span class="cstat-no" title="statement not covered" > this.emitStatus();</span>
882
+ }
883
+ }
884
+ }
885
+ &nbsp;
886
+ private <span class="fstat-no" title="function not covered" >async </span>setState(
887
+ status: OrchestrationStatus,
888
+ newState?: Partial&lt;Omit&lt;OrchestrationRunState, 'status'&gt;&gt;,
889
+ ) {
890
+ <span class="cstat-no" title="statement not covered" > if (this.activeRun) {</span>
891
+ <span class="cstat-no" title="statement not covered" > this.activeRun.status = status;</span>
892
+ <span class="cstat-no" title="statement not covered" > Object.assign(this.activeRun, newState);</span>
893
+ &nbsp;
894
+ <span class="cstat-no" title="statement not covered" > if (status === OrchestrationStatus.IDLE) {</span>
895
+ <span class="cstat-no" title="statement not covered" > this.activeRun = null;</span>
896
+ <span class="cstat-no" title="statement not covered" > await this.appStateService.setOrchestrationRunState(null);</span>
897
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.timeoutTimer) <span class="cstat-no" title="statement not covered" >clearTimeout(this.timeoutTimer);</span></span>
898
+ } else {
899
+ <span class="cstat-no" title="statement not covered" > await this.persistState();</span>
900
+ }
901
+ <span class="cstat-no" title="statement not covered" > this.emitStatus();</span>
902
+ } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (status !== OrchestrationStatus.IDLE) {</span>
903
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
904
+ `Cannot set status to ${status} without an active run.`,
905
+ );
906
+ }
907
+ }
908
+ &nbsp;
909
+ private <span class="fstat-no" title="function not covered" >async </span>persistState() {
910
+ <span class="cstat-no" title="statement not covered" > await this.appStateService.setOrchestrationRunState(this.activeRun);</span>
911
+ }
912
+ &nbsp;
913
+ private <span class="fstat-no" title="function not covered" >emitStatus(</span>) {
914
+ <span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll(</span>
915
+ 'orchestration_status_update',
916
+ this.activeRun,
917
+ );
918
+ }
919
+ &nbsp;
920
+ private <span class="fstat-no" title="function not covered" >log(</span>message: string) {
921
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.activeRun) <span class="cstat-no" title="statement not covered" >return;</span></span>
922
+ <span class="cstat-no" title="statement not covered" > this.logger.log(`[Run ${this.activeRun.runId}] ${message}`);</span>
923
+ <span class="cstat-no" title="statement not covered" > this.activeRun.log.push(`${new Date().toISOString()} - ${message}`);</span>
924
+ <span class="cstat-no" title="statement not covered" > this.eventsGateway.sendToAll('orchestration_log', { message });</span>
925
+ }
926
+ &nbsp;
927
+ <span class="fstat-no" title="function not covered" > getActiveRun(</span>): OrchestrationRunState | null {
928
+ <span class="cstat-no" title="statement not covered" > return this.activeRun;</span>
929
+ }
930
+ &nbsp;
931
+ <span class="fstat-no" title="function not covered" > async </span>start(dto: StartOrchestrationDto): Promise&lt;void&gt; {
932
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activeRun) {</span>
933
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
934
+ this.activeRun.scriptName === dto.scriptName &amp;&amp;
935
+ this.activeRun.status === OrchestrationStatus.STOPPED
936
+ ) {
937
+ <span class="cstat-no" title="statement not covered" > this.log('Resuming stopped orchestration.');</span>
938
+ <span class="cstat-no" title="statement not covered" > this.execute().catch(<span class="fstat-no" title="function not covered" >(e</span>rror) =&gt; <span class="cstat-no" title="statement not covered" >this.fail(error.message))</span>;</span>
939
+ <span class="cstat-no" title="statement not covered" > return;</span>
940
+ }
941
+ <span class="cstat-no" title="statement not covered" > throw new BadRequestException(</span>
942
+ `An orchestration is already running or paused: "${this.activeRun.scriptName}" is in state "${this.activeRun.status}".`,
943
+ );
944
+ }
945
+ &nbsp;
946
+ const scriptContent = <span class="cstat-no" title="statement not covered" >await this.fsService.readScript(dto.scriptName);</span>
947
+ const allCommands = <span class="cstat-no" title="statement not covered" >await this.parserService.parseScript(scriptContent);</span>
948
+ const taskCommands = <span class="cstat-no" title="statement not covered" >allCommands.filter(</span>
949
+ <span class="fstat-no" title="function not covered" > (c</span>md) =&gt; <span class="cstat-no" title="statement not covered" >cmd.type === 'send_and_wait',</span>
950
+ );
951
+ &nbsp;
952
+ <span class="cstat-no" title="statement not covered" > this.activeRun = {</span>
953
+ runId: randomUUID(),
954
+ status: OrchestrationStatus.RUNNING,
955
+ mode: dto.mode,
956
+ scriptName: dto.scriptName,
957
+ sessionId: dto.sessionId,
958
+ currentStep: 0,
959
+ totalSteps: taskCommands.length,
960
+ waitStartTime: null,
961
+ waitingOnInputId: null,
962
+ error: null,
963
+ log: [],
964
+ };
965
+ <span class="cstat-no" title="statement not covered" > await this.persistState();</span>
966
+ <span class="cstat-no" title="statement not covered" > this.log(`Orchestration started in ${dto.mode} mode.`);</span>
967
+ <span class="cstat-no" title="statement not covered" > this.emitStatus();</span>
968
+ &nbsp;
969
+ // Non-blocking execution
970
+ <span class="cstat-no" title="statement not covered" > this.execute().catch(<span class="fstat-no" title="function not covered" >(e</span>rror) =&gt; {</span>
971
+ <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
972
+ `Unhandled error in orchestration execution: ${error.message}`,
973
+ error.stack,
974
+ );
975
+ <span class="cstat-no" title="statement not covered" > this.fail(`Unhandled error: ${error.message}`);</span>
976
+ });
977
+ }
978
+ &nbsp;
979
+ private <span class="fstat-no" title="function not covered" >async </span>execute() {
980
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.activeRun) <span class="cstat-no" title="statement not covered" >return;</span></span>
981
+ &nbsp;
982
+ const { scriptName, mode, sessionId } = <span class="cstat-no" title="statement not covered" >this.activeRun;</span>
983
+ const session = <span class="cstat-no" title="statement not covered" >await this.sessionsService.findOne(sessionId);</span>
984
+ const scriptContent = <span class="cstat-no" title="statement not covered" >await this.fsService.readScript(scriptName);</span>
985
+ const allCommands = <span class="cstat-no" title="statement not covered" >await this.parserService.parseScript(scriptContent);</span>
986
+ &nbsp;
987
+ const { commandIndex, taskStepCounter } =
988
+ <span class="cstat-no" title="statement not covered" > await this.parserService.findResumeState(scriptName, allCommands);</span>
989
+
990
+ <span class="cstat-no" title="statement not covered" > this.log(`Execution loop starting/resuming at command ${commandIndex}. Current task step is ${taskStepCounter}.`);</span>
991
+ <span class="cstat-no" title="statement not covered" > this.activeRun.currentStep = taskStepCounter;</span>
992
+ &nbsp;
993
+ let initialContextTemplateId: string | null =
994
+ <span class="cstat-no" title="statement not covered" > session.default_initial_context_template_id;</span>
995
+ &nbsp;
996
+ <span class="cstat-no" title="statement not covered" > for (let i = <span class="cstat-no" title="statement not covered" >commandIndex;</span> i &lt; allCommands.length; i++) {</span>
997
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activeRun.status === OrchestrationStatus.STOPPING) {</span>
998
+ <span class="cstat-no" title="statement not covered" > this.log('Execution loop halted due to STOPPING state.');</span>
999
+ <span class="cstat-no" title="statement not covered" > this.setState(OrchestrationStatus.STOPPED);</span>
1000
+ <span class="cstat-no" title="statement not covered" > return;</span>
1001
+ }
1002
+ &nbsp;
1003
+ const command = <span class="cstat-no" title="statement not covered" >allCommands[i];</span>
1004
+ &nbsp;
1005
+ <span class="cstat-no" title="statement not covered" > try {</span>
1006
+ <span class="cstat-no" title="statement not covered" > if (command.type === 'set_initial_context') {</span>
1007
+ <span class="cstat-no" title="statement not covered" > this.log(`Executing setup command: ${command.originalLine}`);</span>
1008
+ const template = <span class="cstat-no" title="statement not covered" >await this.contextTemplatesService.findByName(</span>
1009
+ command.value,
1010
+ );
1011
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!template)</span>
1012
+ <span class="cstat-no" title="statement not covered" > throw new Error(`Context template "${command.value}" not found.`);</span>
1013
+ <span class="cstat-no" title="statement not covered" > initialContextTemplateId = template.id;</span>
1014
+ <span class="cstat-no" title="statement not covered" > this.log(`Initial context template set to "${command.value}".`);</span>
1015
+ } else <span class="cstat-no" title="statement not covered" ><span class="missing-if-branch" title="if path not taken" >I</span>if (command.type === 'send_and_wait') {</span>
1016
+ <span class="cstat-no" title="statement not covered" > this.activeRun.currentStep++;</span>
1017
+ <span class="cstat-no" title="statement not covered" > this.setState(OrchestrationStatus.RUNNING, {</span>
1018
+ currentStep: this.activeRun.currentStep,
1019
+ });
1020
+ <span class="cstat-no" title="statement not covered" > this.log(</span>
1021
+ `Executing step ${this.activeRun.currentStep}/${this.activeRun.totalSteps}: ${command.originalLine}`,
1022
+ );
1023
+ &nbsp;
1024
+ // Use initial context only for the very first prompt, then use session's followup
1025
+ const isFirstSendAndWait = <span class="cstat-no" title="statement not covered" >!allCommands.slice(0, i).some(<span class="fstat-no" title="function not covered" >cmd </span>=&gt; <span class="cstat-no" title="statement not covered" >cmd.type === 'send_and_wait')</span>;</span>
1026
+ &nbsp;
1027
+ let contextTemplateId: string | null;
1028
+ <span class="cstat-no" title="statement not covered" > if (isFirstSendAndWait) {</span>
1029
+ <span class="cstat-no" title="statement not covered" > contextTemplateId = initialContextTemplateId;</span>
1030
+ <span class="cstat-no" title="statement not covered" > this.log(`Using one-time initial context template: ${contextTemplateId || 'session default'}`);</span>
1031
+ } else {
1032
+ <span class="cstat-no" title="statement not covered" > contextTemplateId = session.default_followup_context_template_id;</span>
1033
+ <span class="cstat-no" title="statement not covered" > this.log(`Using session's default follow-up context template.`);</span>
1034
+ }
1035
+
1036
+ <span class="cstat-no" title="statement not covered" > await this.sessionInputsService.prepareLlmInput(sessionId, {</span>
1037
+ user_prompt: command.value,
1038
+ execution_strategy:
1039
+ mode === OrchestrationMode.AUTO ? 'auto_apply' : 'review_first',
1040
+ context_template_id: contextTemplateId,
1041
+ });
1042
+ &nbsp;
1043
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (mode === OrchestrationMode.INTERACTIVE) {</span>
1044
+ <span class="cstat-no" title="statement not covered" > this.setState(OrchestrationStatus.PAUSED_INTERACTIVE);</span>
1045
+ <span class="cstat-no" title="statement not covered" > return;</span>
1046
+ }
1047
+ <span class="cstat-no" title="statement not covered" > return;</span>
1048
+ }
1049
+ } catch (error) {
1050
+ <span class="cstat-no" title="statement not covered" > await this.fail(error.message);</span>
1051
+ <span class="cstat-no" title="statement not covered" > return;</span>
1052
+ }
1053
+ }
1054
+ <span class="cstat-no" title="statement not covered" > this.log('Orchestration completed successfully.');</span>
1055
+ <span class="cstat-no" title="statement not covered" > this.setState(OrchestrationStatus.COMPLETED);</span>
1056
+ }
1057
+ &nbsp;
1058
+ <span class="fstat-no" title="function not covered" > onPromptPrepared(</span>inputId: string) {
1059
+ <span class="cstat-no" title="statement not covered" > if (this.activeRun?.status === OrchestrationStatus.RUNNING) {</span>
1060
+ <span class="cstat-no" title="statement not covered" > this.log(</span>
1061
+ `[onPromptPrepared] Prompt prepared for input ${inputId}. Awaiting LLM response.`,
1062
+ );
1063
+ <span class="cstat-no" title="statement not covered" > this.setState(OrchestrationStatus.WAITING_FOR_LLM_RESPONSE, {</span>
1064
+ waitingOnInputId: inputId,
1065
+ waitStartTime: Date.now(),
1066
+ });
1067
+ <span class="cstat-no" title="statement not covered" > this.timeoutTimer = setTimeout(<span class="fstat-no" title="function not covered" >() =</span>&gt; {</span>
1068
+ <span class="cstat-no" title="statement not covered" > this.fail('Orchestration timed out waiting for LLM response.');</span>
1069
+ }, this.TIMEOUT_MS);
1070
+ } else {
1071
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1072
+ `[onPromptPrepared] Called but active run status is not 'RUNNING'. Current status: ${this.activeRun?.status}`,
1073
+ );
1074
+ }
1075
+ }
1076
+ &nbsp;
1077
+ <span class="fstat-no" title="function not covered" > async </span>stop(): Promise&lt;void&gt; {
1078
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
1079
+ this.activeRun &amp;&amp;
1080
+ (this.activeRun.status === OrchestrationStatus.RUNNING ||
1081
+ this.activeRun.status === OrchestrationStatus.WAITING_FOR_LLM_RESPONSE)
1082
+ ) {
1083
+ <span class="cstat-no" title="statement not covered" > this.log('Graceful stop requested.');</span>
1084
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.timeoutTimer) <span class="cstat-no" title="statement not covered" >clearTimeout(this.timeoutTimer);</span></span>
1085
+ <span class="cstat-no" title="statement not covered" > this.setState(OrchestrationStatus.STOPPING);</span>
1086
+ }
1087
+ }
1088
+ &nbsp;
1089
+ <span class="fstat-no" title="function not covered" > async </span>proceed(): Promise&lt;void&gt; {
1090
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
1091
+ this.activeRun &amp;&amp;
1092
+ this.activeRun.status === OrchestrationStatus.PAUSED_INTERACTIVE
1093
+ ) {
1094
+ <span class="cstat-no" title="statement not covered" > this.log('Proceeding to next step...');</span>
1095
+ <span class="cstat-no" title="statement not covered" > this.execute().catch(<span class="fstat-no" title="function not covered" >(e</span>) =&gt; <span class="cstat-no" title="statement not covered" >this.fail(e.message))</span>;</span>
1096
+ }
1097
+ }
1098
+ &nbsp;
1099
+ <span class="fstat-no" title="function not covered" > async </span>emergencyStop(): Promise&lt;void&gt; {
1100
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activeRun) {</span>
1101
+ <span class="cstat-no" title="statement not covered" > this.log('Emergency stop triggered!');</span>
1102
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.timeoutTimer) <span class="cstat-no" title="statement not covered" >clearTimeout(this.timeoutTimer);</span></span>
1103
+ <span class="cstat-no" title="statement not covered" > this.setState(OrchestrationStatus.FAILED, {</span>
1104
+ error: 'Forcefully stopped by user.',
1105
+ });
1106
+ }
1107
+ }
1108
+ &nbsp;
1109
+ <span class="fstat-no" title="function not covered" > async </span>clearActiveRun(): Promise&lt;void&gt; {
1110
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activeRun) {</span>
1111
+ <span class="cstat-no" title="statement not covered" > this.log('Clearing active run state.');</span>
1112
+ <span class="cstat-no" title="statement not covered" > this.setState(OrchestrationStatus.IDLE);</span>
1113
+ }
1114
+ }
1115
+ &nbsp;
1116
+ <span class="fstat-no" title="function not covered" > async </span>resumeFromInput(inputId: string): Promise&lt;void&gt; {
1117
+ <span class="cstat-no" title="statement not covered" > this.log(</span>
1118
+ `[resumeFromInput] Attempting to resume for completed input ID: ${inputId}`,
1119
+ );
1120
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!this.activeRun) {</span>
1121
+ <span class="cstat-no" title="statement not covered" > this.logger.error('[resumeFromInput] Cannot resume, no active run.');</span>
1122
+ <span class="cstat-no" title="statement not covered" > return;</span>
1123
+ }
1124
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (</span>
1125
+ this.activeRun.status !== OrchestrationStatus.WAITING_FOR_LLM_RESPONSE
1126
+ ) {
1127
+ <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1128
+ `[resumeFromInput] Cannot resume, status is '${this.activeRun.status}', not 'waiting_for_llm_response'.`,
1129
+ );
1130
+ <span class="cstat-no" title="statement not covered" > return;</span>
1131
+ }
1132
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activeRun.waitingOnInputId !== inputId) {</span>
1133
+ <span class="cstat-no" title="statement not covered" > this.logger.error(</span>
1134
+ `[resumeFromInput] Mismatched input ID. Expected '${this.activeRun.waitingOnInputId}', but got '${inputId}'.`,
1135
+ );
1136
+ <span class="cstat-no" title="statement not covered" > return;</span>
1137
+ }
1138
+ &nbsp;
1139
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.timeoutTimer) <span class="cstat-no" title="statement not covered" >clearTimeout(this.timeoutTimer);</span></span>
1140
+ <span class="cstat-no" title="statement not covered" > this.log(</span>
1141
+ `[resumeFromInput] Resuming orchestration after receiving response for ${inputId}`,
1142
+ );
1143
+ &nbsp;
1144
+ const scriptContent = <span class="cstat-no" title="statement not covered" >await this.fsService.readScript(</span>
1145
+ this.activeRun.scriptName,
1146
+ );
1147
+ const allCommands = <span class="cstat-no" title="statement not covered" >await this.parserService.parseScript(scriptContent);</span>
1148
+ &nbsp;
1149
+ const commandToUpdate = <span class="cstat-no" title="statement not covered" >allCommands</span>
1150
+ .filter(<span class="fstat-no" title="function not covered" >(c</span>md) =&gt; <span class="cstat-no" title="statement not covered" >cmd.type === 'send_and_wait')</span>
1151
+ [this.activeRun.currentStep - 1];
1152
+ &nbsp;
1153
+ <span class="cstat-no" title="statement not covered" > if (commandToUpdate) {</span>
1154
+ <span class="cstat-no" title="statement not covered" > this.log(</span>
1155
+ `[resumeFromInput] Updating task status for: ${commandToUpdate.value.substring(
1156
+ 0,
1157
+ 50,
1158
+ )}...`,
1159
+ );
1160
+ <span class="cstat-no" title="statement not covered" > await this.fsService.updateTaskStatus(</span>
1161
+ this.activeRun.scriptName,
1162
+ commandToUpdate.value,
1163
+ true,
1164
+ );
1165
+ } else {
1166
+ <span class="cstat-no" title="statement not covered" > this.log(</span>
1167
+ `[resumeFromInput] Could not find command to update task status for step ${this.activeRun.currentStep}.`,
1168
+ );
1169
+ }
1170
+ &nbsp;
1171
+ <span class="cstat-no" title="statement not covered" > this.log(`[resumeFromInput] Re-triggering execution loop.`);</span>
1172
+ <span class="cstat-no" title="statement not covered" > this.execute().catch(<span class="fstat-no" title="function not covered" >(e</span>) =&gt; <span class="cstat-no" title="statement not covered" >this.fail(e.message))</span>;</span>
1173
+ }
1174
+ &nbsp;
1175
+ <span class="fstat-no" title="function not covered" > async </span>fail(error: string): Promise&lt;void&gt; {
1176
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.activeRun) {</span>
1177
+ <span class="cstat-no" title="statement not covered" > this.logger.error(`Orchestration failed: ${error}`);</span>
1178
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (this.timeoutTimer) <span class="cstat-no" title="statement not covered" >clearTimeout(this.timeoutTimer);</span></span>
1179
+ <span class="cstat-no" title="statement not covered" > this.setState(OrchestrationStatus.FAILED, { error });</span>
1180
+ }
1181
+ }
1182
+ }</pre></td></tr></table></pre>
1183
+
1184
+ <div class='push'></div><!-- for sticky footer -->
1185
+ </div><!-- /wrapper -->
1186
+ <div class='footer quiet pad2 space-top1 center small'>
1187
+ Code coverage generated by
1188
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1189
+ at 2025-07-30T23:37:05.373Z
1190
+ </div>
1191
+ <script src="../../prettify.js"></script>
1192
+ <script>
1193
+ window.onload = function () {
1194
+ prettyPrint();
1195
+ };
1196
+ </script>
1197
+ <script src="../../sorter.js"></script>
1198
+ <script src="../../block-navigation.js"></script>
1199
+ </body>
1200
+ </html>
1201
+