repoburg 1.3.9 → 1.3.10

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 (226) hide show
  1. package/backend/dist/bin/grammar/tree-sitter-bash.wasm +0 -0
  2. package/backend/dist/bin/grammar/tree-sitter-css.wasm +0 -0
  3. package/backend/dist/bin/grammar/tree-sitter-html.wasm +0 -0
  4. package/backend/dist/bin/grammar/tree-sitter-javascript.wasm +0 -0
  5. package/backend/dist/bin/grammar/tree-sitter-json.wasm +0 -0
  6. package/backend/dist/bin/grammar/tree-sitter-python.wasm +0 -0
  7. package/backend/dist/bin/grammar/tree-sitter-rust.wasm +0 -0
  8. package/backend/dist/bin/grammar/tree-sitter-toml.wasm +0 -0
  9. package/backend/dist/bin/grammar/tree-sitter-tsx.wasm +0 -0
  10. package/backend/dist/bin/grammar/tree-sitter-typescript.wasm +0 -0
  11. package/backend/dist/bin/grammar/tree-sitter-yaml.wasm +0 -0
  12. package/backend/dist/packages/tokenpatch/index.d.ts +1 -0
  13. package/backend/dist/packages/tokenpatch/index.js +52 -0
  14. package/backend/dist/packages/tokenpatch/index.js.map +1 -0
  15. package/backend/dist/packages/tokenpatch/parser.d.ts +2 -0
  16. package/backend/dist/packages/tokenpatch/parser.js +17 -0
  17. package/backend/dist/packages/tokenpatch/parser.js.map +1 -0
  18. package/backend/dist/packages/tokenpatch/patcher.d.ts +11 -0
  19. package/backend/dist/packages/tokenpatch/patcher.js +189 -0
  20. package/backend/dist/packages/tokenpatch/patcher.js.map +1 -0
  21. package/backend/dist/packages/tokenpatch/tokens.d.ts +6 -0
  22. package/backend/dist/packages/tokenpatch/tokens.js +49 -0
  23. package/backend/dist/packages/tokenpatch/tokens.js.map +1 -0
  24. package/backend/dist/packages/tokenpatch/types.d.ts +8 -0
  25. package/backend/dist/packages/tokenpatch/types.js +3 -0
  26. package/backend/dist/packages/tokenpatch/types.js.map +1 -0
  27. package/backend/dist/src/ai-actions/ai-actions.service.d.ts +1 -0
  28. package/backend/dist/src/ai-actions/ai-actions.service.js +2 -0
  29. package/backend/dist/src/ai-actions/ai-actions.service.js.map +1 -1
  30. package/backend/dist/src/llm-orchestration/action-handlers/dto/patch.args.dto.d.ts +4 -0
  31. package/backend/dist/src/llm-orchestration/action-handlers/dto/patch.args.dto.js +29 -0
  32. package/backend/dist/src/llm-orchestration/action-handlers/dto/patch.args.dto.js.map +1 -0
  33. package/backend/dist/src/llm-orchestration/action-handlers/patch.handler.d.ts +12 -0
  34. package/backend/dist/src/llm-orchestration/action-handlers/patch.handler.js +142 -0
  35. package/backend/dist/src/llm-orchestration/action-handlers/patch.handler.js.map +1 -0
  36. package/backend/dist/src/llm-orchestration/llm-orchestration.module.js +2 -0
  37. package/backend/dist/src/llm-orchestration/llm-orchestration.module.js.map +1 -1
  38. package/backend/dist/src/llm-orchestration/llm-turn-processor.service.js +1 -0
  39. package/backend/dist/src/llm-orchestration/llm-turn-processor.service.js.map +1 -1
  40. package/backend/dist/src/seeding/data/system-prompts/experimental_patch_master-agent.d.ts +2 -0
  41. package/backend/dist/src/seeding/data/system-prompts/experimental_patch_master-agent.js +463 -0
  42. package/backend/dist/src/seeding/data/system-prompts/experimental_patch_master-agent.js.map +1 -0
  43. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  44. package/backend/package.json +6 -3
  45. package/backend/packages/tokenpatch/grammar/tree-sitter-tsx.wasm +0 -0
  46. package/backend/packages/tokenpatch/grammar/tree-sitter-typescript.wasm +0 -0
  47. package/backend/packages/tokenpatch/index.spec.ts +579 -0
  48. package/backend/packages/tokenpatch/index.ts +80 -0
  49. package/backend/packages/tokenpatch/parser.ts +18 -0
  50. package/backend/packages/tokenpatch/patcher.spec.ts +194 -0
  51. package/backend/packages/tokenpatch/patcher.ts +300 -0
  52. package/backend/packages/tokenpatch/tokens.spec.ts +84 -0
  53. package/backend/packages/tokenpatch/tokens.ts +50 -0
  54. package/backend/packages/tokenpatch/types.ts +9 -0
  55. package/package.json +13 -12
  56. package/backend/coverage/clover.xml +0 -3434
  57. package/backend/coverage/coverage-final.json +0 -120
  58. package/backend/coverage/lcov-report/base.css +0 -224
  59. package/backend/coverage/lcov-report/block-navigation.js +0 -87
  60. package/backend/coverage/lcov-report/favicon.png +0 -0
  61. package/backend/coverage/lcov-report/index.html +0 -701
  62. package/backend/coverage/lcov-report/prettify.css +0 -1
  63. package/backend/coverage/lcov-report/prettify.js +0 -2
  64. package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  65. package/backend/coverage/lcov-report/sorter.js +0 -196
  66. package/backend/coverage/lcov-report/src/action-execution/action-execution.module.ts.html +0 -109
  67. package/backend/coverage/lcov-report/src/action-execution/action-execution.service.ts.html +0 -448
  68. package/backend/coverage/lcov-report/src/action-execution/index.html +0 -131
  69. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +0 -940
  70. package/backend/coverage/lcov-report/src/ai-actions/ai-action-creation.service.ts.html +0 -1243
  71. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +0 -664
  72. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +0 -154
  73. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +0 -859
  74. package/backend/coverage/lcov-report/src/ai-actions/index.html +0 -176
  75. package/backend/coverage/lcov-report/src/app.controller.ts.html +0 -151
  76. package/backend/coverage/lcov-report/src/app.module.ts.html +0 -373
  77. package/backend/coverage/lcov-report/src/app.service.ts.html +0 -196
  78. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +0 -319
  79. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +0 -124
  80. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +0 -439
  81. package/backend/coverage/lcov-report/src/application-state/dto/index.html +0 -161
  82. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +0 -103
  83. package/backend/coverage/lcov-report/src/application-state/dto/set-orchestration-timeout.dto.ts.html +0 -103
  84. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +0 -106
  85. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +0 -103
  86. package/backend/coverage/lcov-report/src/application-state/index.html +0 -146
  87. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +0 -118
  88. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +0 -1348
  89. package/backend/coverage/lcov-report/src/context-generation/index.html +0 -131
  90. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +0 -289
  91. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +0 -136
  92. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +0 -400
  93. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +0 -211
  94. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +0 -116
  95. package/backend/coverage/lcov-report/src/context-snippets/index.html +0 -146
  96. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +0 -397
  97. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +0 -136
  98. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +0 -835
  99. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +0 -358
  100. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +0 -116
  101. package/backend/coverage/lcov-report/src/context-templates/index.html +0 -146
  102. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +0 -241
  103. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +0 -115
  104. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +0 -145
  105. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +0 -130
  106. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +0 -223
  107. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +0 -136
  108. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +0 -157
  109. package/backend/coverage/lcov-report/src/core-entities/index.html +0 -281
  110. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +0 -118
  111. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +0 -130
  112. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +0 -289
  113. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +0 -280
  114. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +0 -148
  115. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +0 -277
  116. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +0 -124
  117. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +0 -304
  118. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +0 -205
  119. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +0 -116
  120. package/backend/coverage/lcov-report/src/custom-snippets/index.html +0 -146
  121. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +0 -292
  122. package/backend/coverage/lcov-report/src/events/events.module.ts.html +0 -109
  123. package/backend/coverage/lcov-report/src/events/index.html +0 -131
  124. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +0 -130
  125. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +0 -116
  126. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +0 -130
  127. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +0 -124
  128. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +0 -238
  129. package/backend/coverage/lcov-report/src/execution-logs/index.html +0 -146
  130. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +0 -340
  131. package/backend/coverage/lcov-report/src/index.html +0 -191
  132. package/backend/coverage/lcov-report/src/llm-response-parser/dto/ai-action.dto.ts.html +0 -400
  133. package/backend/coverage/lcov-report/src/llm-response-parser/dto/index.html +0 -116
  134. package/backend/coverage/lcov-report/src/llm-response-parser/errors/index.html +0 -116
  135. package/backend/coverage/lcov-report/src/llm-response-parser/errors/parsing.error.ts.html +0 -118
  136. package/backend/coverage/lcov-report/src/llm-response-parser/index.html +0 -146
  137. package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.module.ts.html +0 -109
  138. package/backend/coverage/lcov-report/src/llm-response-parser/llm-response-parser.service.ts.html +0 -808
  139. package/backend/coverage/lcov-report/src/llm-response-parser/parsing.constants.ts.html +0 -139
  140. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +0 -116
  141. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +0 -172
  142. package/backend/coverage/lcov-report/src/llm-responses/index.html +0 -146
  143. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +0 -154
  144. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +0 -166
  145. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +0 -787
  146. package/backend/coverage/lcov-report/src/main.ts.html +0 -382
  147. package/backend/coverage/lcov-report/src/orchestration/dto/index.html +0 -116
  148. package/backend/coverage/lcov-report/src/orchestration/dto/orchestration.dto.ts.html +0 -169
  149. package/backend/coverage/lcov-report/src/orchestration/index.html +0 -191
  150. package/backend/coverage/lcov-report/src/orchestration/orchestration-fs.service.ts.html +0 -595
  151. package/backend/coverage/lcov-report/src/orchestration/orchestration-parser.service.ts.html +0 -142
  152. package/backend/coverage/lcov-report/src/orchestration/orchestration.controller.ts.html +0 -406
  153. package/backend/coverage/lcov-report/src/orchestration/orchestration.module.ts.html +0 -169
  154. package/backend/coverage/lcov-report/src/orchestration/orchestration.service.ts.html +0 -1093
  155. package/backend/coverage/lcov-report/src/orchestration/orchestration.types.ts.html +0 -175
  156. package/backend/coverage/lcov-report/src/projects/dto/index.html +0 -116
  157. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +0 -154
  158. package/backend/coverage/lcov-report/src/projects/index.html +0 -146
  159. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +0 -232
  160. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +0 -124
  161. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +0 -223
  162. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +0 -355
  163. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +0 -271
  164. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +0 -136
  165. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +0 -148
  166. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +0 -247
  167. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +0 -190
  168. package/backend/coverage/lcov-report/src/seeding/data/context-templates/pm-context.ts.html +0 -250
  169. package/backend/coverage/lcov-report/src/seeding/data/context-templates/pr-description.ts.html +0 -186
  170. package/backend/coverage/lcov-report/src/seeding/data/context-templates/sample_focused-tree.ts.html +0 -124
  171. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +0 -94
  172. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +0 -94
  173. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +0 -236
  174. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +0 -94
  175. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +0 -94
  176. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +0 -94
  177. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +0 -94
  178. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +0 -94
  179. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +0 -100
  180. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +0 -94
  181. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/codebase-explorer.ts.html +0 -331
  182. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_multi-file-action-generator-with-requester.ts.html +0 -675
  183. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +0 -160
  184. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/multi-file-action-generator.ts.html +0 -550
  185. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/packup.ts.html +0 -184
  186. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/refactor-split.ts.html +0 -244
  187. package/backend/coverage/lcov-report/src/seeding/index.html +0 -176
  188. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +0 -145
  189. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +0 -151
  190. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +0 -289
  191. package/backend/coverage/lcov-report/src/session-followup/index.html +0 -131
  192. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +0 -130
  193. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +0 -670
  194. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +0 -116
  195. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +0 -247
  196. package/backend/coverage/lcov-report/src/session-inputs/index.html +0 -161
  197. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +0 -763
  198. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +0 -337
  199. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +0 -205
  200. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +0 -1621
  201. package/backend/coverage/lcov-report/src/session-transfer/index.html +0 -131
  202. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +0 -172
  203. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +0 -574
  204. package/backend/coverage/lcov-report/src/sessions/dto/index.html +0 -116
  205. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +0 -340
  206. package/backend/coverage/lcov-report/src/sessions/index.html +0 -146
  207. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +0 -457
  208. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +0 -214
  209. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +0 -844
  210. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +0 -116
  211. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +0 -217
  212. package/backend/coverage/lcov-report/src/system-prompts/index.html +0 -146
  213. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +0 -298
  214. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +0 -127
  215. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +0 -352
  216. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +0 -178
  217. package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +0 -310
  218. package/backend/coverage/lcov-report/src/utils/index.html +0 -131
  219. package/backend/coverage/lcov-report/src/utils/index.ts.html +0 -88
  220. package/backend/coverage/lcov-report/src/workspace/dto/index.html +0 -116
  221. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +0 -193
  222. package/backend/coverage/lcov-report/src/workspace/index.html +0 -146
  223. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +0 -247
  224. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +0 -121
  225. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +0 -745
  226. package/backend/coverage/lcov.info +0 -5590
@@ -1,808 +0,0 @@
1
-
2
- <!doctype html>
3
- <html lang="en">
4
-
5
- <head>
6
- <title>Code coverage report for src/llm-response-parser/llm-response-parser.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/llm-response-parser</a> llm-response-parser.service.ts</h1>
23
- <div class='clearfix'>
24
-
25
- <div class='fl pad1y space-right2'>
26
- <span class="strong">91.81% </span>
27
- <span class="quiet">Statements</span>
28
- <span class='fraction'>101/110</span>
29
- </div>
30
-
31
-
32
- <div class='fl pad1y space-right2'>
33
- <span class="strong">79.16% </span>
34
- <span class="quiet">Branches</span>
35
- <span class='fraction'>38/48</span>
36
- </div>
37
-
38
-
39
- <div class='fl pad1y space-right2'>
40
- <span class="strong">83.33% </span>
41
- <span class="quiet">Functions</span>
42
- <span class='fraction'>5/6</span>
43
- </div>
44
-
45
-
46
- <div class='fl pad1y space-right2'>
47
- <span class="strong">93.26% </span>
48
- <span class="quiet">Lines</span>
49
- <span class='fraction'>97/104</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 high'></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></td><td class="line-coverage quiet"><span class="cline-any cline-yes">10x</span>
308
- <span class="cline-any cline-yes">10x</span>
309
- <span class="cline-any cline-yes">10x</span>
310
- <span class="cline-any cline-yes">10x</span>
311
- <span class="cline-any cline-yes">10x</span>
312
- <span class="cline-any cline-neutral">&nbsp;</span>
313
- <span class="cline-any cline-neutral">&nbsp;</span>
314
- <span class="cline-any cline-neutral">&nbsp;</span>
315
- <span class="cline-any cline-neutral">&nbsp;</span>
316
- <span class="cline-any cline-neutral">&nbsp;</span>
317
- <span class="cline-any cline-neutral">&nbsp;</span>
318
- <span class="cline-any cline-neutral">&nbsp;</span>
319
- <span class="cline-any cline-neutral">&nbsp;</span>
320
- <span class="cline-any cline-neutral">&nbsp;</span>
321
- <span class="cline-any cline-neutral">&nbsp;</span>
322
- <span class="cline-any cline-neutral">&nbsp;</span>
323
- <span class="cline-any cline-neutral">&nbsp;</span>
324
- <span class="cline-any cline-neutral">&nbsp;</span>
325
- <span class="cline-any cline-neutral">&nbsp;</span>
326
- <span class="cline-any cline-neutral">&nbsp;</span>
327
- <span class="cline-any cline-neutral">&nbsp;</span>
328
- <span class="cline-any cline-yes">10x</span>
329
- <span class="cline-any cline-yes">33x</span>
330
- <span class="cline-any cline-neutral">&nbsp;</span>
331
- <span class="cline-any cline-neutral">&nbsp;</span>
332
- <span class="cline-any cline-yes">36x</span>
333
- <span class="cline-any cline-yes">34x</span>
334
- <span class="cline-any cline-yes">34x</span>
335
- <span class="cline-any cline-neutral">&nbsp;</span>
336
- <span class="cline-any cline-neutral">&nbsp;</span>
337
- <span class="cline-any cline-yes">19x</span>
338
- <span class="cline-any cline-neutral">&nbsp;</span>
339
- <span class="cline-any cline-neutral">&nbsp;</span>
340
- <span class="cline-any cline-yes">5x</span>
341
- <span class="cline-any cline-neutral">&nbsp;</span>
342
- <span class="cline-any cline-neutral">&nbsp;</span>
343
- <span class="cline-any cline-yes">4x</span>
344
- <span class="cline-any cline-neutral">&nbsp;</span>
345
- <span class="cline-any cline-yes">4x</span>
346
- <span class="cline-any cline-neutral">&nbsp;</span>
347
- <span class="cline-any cline-yes">1x</span>
348
- <span class="cline-any cline-neutral">&nbsp;</span>
349
- <span class="cline-any cline-no">&nbsp;</span>
350
- <span class="cline-any cline-neutral">&nbsp;</span>
351
- <span class="cline-any cline-yes">1x</span>
352
- <span class="cline-any cline-yes">1x</span>
353
- <span class="cline-any cline-neutral">&nbsp;</span>
354
- <span class="cline-any cline-neutral">&nbsp;</span>
355
- <span class="cline-any cline-neutral">&nbsp;</span>
356
- <span class="cline-any cline-neutral">&nbsp;</span>
357
- <span class="cline-any cline-neutral">&nbsp;</span>
358
- <span class="cline-any cline-neutral">&nbsp;</span>
359
- <span class="cline-any cline-neutral">&nbsp;</span>
360
- <span class="cline-any cline-neutral">&nbsp;</span>
361
- <span class="cline-any cline-neutral">&nbsp;</span>
362
- <span class="cline-any cline-neutral">&nbsp;</span>
363
- <span class="cline-any cline-neutral">&nbsp;</span>
364
- <span class="cline-any cline-neutral">&nbsp;</span>
365
- <span class="cline-any cline-neutral">&nbsp;</span>
366
- <span class="cline-any cline-yes">36x</span>
367
- <span class="cline-any cline-yes">2x</span>
368
- <span class="cline-any cline-neutral">&nbsp;</span>
369
- <span class="cline-any cline-neutral">&nbsp;</span>
370
- <span class="cline-any cline-yes">34x</span>
371
- <span class="cline-any cline-yes">34x</span>
372
- <span class="cline-any cline-yes">34x</span>
373
- <span class="cline-any cline-neutral">&nbsp;</span>
374
- <span class="cline-any cline-yes">34x</span>
375
- <span class="cline-any cline-yes">21x</span>
376
- <span class="cline-any cline-yes">21x</span>
377
- <span class="cline-any cline-yes">13x</span>
378
- <span class="cline-any cline-neutral">&nbsp;</span>
379
- <span class="cline-any cline-yes">2x</span>
380
- <span class="cline-any cline-neutral">&nbsp;</span>
381
- <span class="cline-any cline-neutral">&nbsp;</span>
382
- <span class="cline-any cline-neutral">&nbsp;</span>
383
- <span class="cline-any cline-yes">2x</span>
384
- <span class="cline-any cline-neutral">&nbsp;</span>
385
- <span class="cline-any cline-neutral">&nbsp;</span>
386
- <span class="cline-any cline-neutral">&nbsp;</span>
387
- <span class="cline-any cline-neutral">&nbsp;</span>
388
- <span class="cline-any cline-yes">32x</span>
389
- <span class="cline-any cline-neutral">&nbsp;</span>
390
- <span class="cline-any cline-yes">70x</span>
391
- <span class="cline-any cline-neutral">&nbsp;</span>
392
- <span class="cline-any cline-yes">32x</span>
393
- <span class="cline-any cline-no">&nbsp;</span>
394
- <span class="cline-any cline-no">&nbsp;</span>
395
- <span class="cline-any cline-neutral">&nbsp;</span>
396
- <span class="cline-any cline-neutral">&nbsp;</span>
397
- <span class="cline-any cline-yes">32x</span>
398
- <span class="cline-any cline-yes">32x</span>
399
- <span class="cline-any cline-yes">38x</span>
400
- <span class="cline-any cline-neutral">&nbsp;</span>
401
- <span class="cline-any cline-neutral">&nbsp;</span>
402
- <span class="cline-any cline-neutral">&nbsp;</span>
403
- <span class="cline-any cline-neutral">&nbsp;</span>
404
- <span class="cline-any cline-yes">38x</span>
405
- <span class="cline-any cline-yes">38x</span>
406
- <span class="cline-any cline-neutral">&nbsp;</span>
407
- <span class="cline-any cline-yes">38x</span>
408
- <span class="cline-any cline-neutral">&nbsp;</span>
409
- <span class="cline-any cline-yes">36x</span>
410
- <span class="cline-any cline-yes">2x</span>
411
- <span class="cline-any cline-neutral">&nbsp;</span>
412
- <span class="cline-any cline-neutral">&nbsp;</span>
413
- <span class="cline-any cline-yes">1x</span>
414
- <span class="cline-any cline-neutral">&nbsp;</span>
415
- <span class="cline-any cline-neutral">&nbsp;</span>
416
- <span class="cline-any cline-yes">1x</span>
417
- <span class="cline-any cline-neutral">&nbsp;</span>
418
- <span class="cline-any cline-neutral">&nbsp;</span>
419
- <span class="cline-any cline-yes">1x</span>
420
- <span class="cline-any cline-neutral">&nbsp;</span>
421
- <span class="cline-any cline-neutral">&nbsp;</span>
422
- <span class="cline-any cline-neutral">&nbsp;</span>
423
- <span class="cline-any cline-neutral">&nbsp;</span>
424
- <span class="cline-any cline-neutral">&nbsp;</span>
425
- <span class="cline-any cline-yes">37x</span>
426
- <span class="cline-any cline-yes">1x</span>
427
- <span class="cline-any cline-yes">1x</span>
428
- <span class="cline-any cline-yes">1x</span>
429
- <span class="cline-any cline-yes">1x</span>
430
- <span class="cline-any cline-neutral">&nbsp;</span>
431
- <span class="cline-any cline-neutral">&nbsp;</span>
432
- <span class="cline-any cline-yes">1x</span>
433
- <span class="cline-any cline-neutral">&nbsp;</span>
434
- <span class="cline-any cline-neutral">&nbsp;</span>
435
- <span class="cline-any cline-yes">1x</span>
436
- <span class="cline-any cline-neutral">&nbsp;</span>
437
- <span class="cline-any cline-neutral">&nbsp;</span>
438
- <span class="cline-any cline-neutral">&nbsp;</span>
439
- <span class="cline-any cline-yes">36x</span>
440
- <span class="cline-any cline-yes">36x</span>
441
- <span class="cline-any cline-yes">36x</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-yes">36x</span>
445
- <span class="cline-any cline-yes">25x</span>
446
- <span class="cline-any cline-yes">25x</span>
447
- <span class="cline-any cline-neutral">&nbsp;</span>
448
- <span class="cline-any cline-neutral">&nbsp;</span>
449
- <span class="cline-any cline-yes">25x</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-yes">25x</span>
453
- <span class="cline-any cline-yes">25x</span>
454
- <span class="cline-any cline-neutral">&nbsp;</span>
455
- <span class="cline-any cline-yes">11x</span>
456
- <span class="cline-any cline-neutral">&nbsp;</span>
457
- <span class="cline-any cline-neutral">&nbsp;</span>
458
- <span class="cline-any cline-neutral">&nbsp;</span>
459
- <span class="cline-any cline-yes">36x</span>
460
- <span class="cline-any cline-yes">36x</span>
461
- <span class="cline-any cline-yes">176x</span>
462
- <span class="cline-any cline-yes">105x</span>
463
- <span class="cline-any cline-yes">105x</span>
464
- <span class="cline-any cline-yes">105x</span>
465
- <span class="cline-any cline-yes">105x</span>
466
- <span class="cline-any cline-neutral">&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-yes">36x</span>
470
- <span class="cline-any cline-neutral">&nbsp;</span>
471
- <span class="cline-any cline-yes">36x</span>
472
- <span class="cline-any cline-yes">36x</span>
473
- <span class="cline-any cline-yes">36x</span>
474
- <span class="cline-any cline-yes">3x</span>
475
- <span class="cline-any cline-neutral">&nbsp;</span>
476
- <span class="cline-any cline-neutral">&nbsp;</span>
477
- <span class="cline-any cline-neutral">&nbsp;</span>
478
- <span class="cline-any cline-neutral">&nbsp;</span>
479
- <span class="cline-any cline-yes">33x</span>
480
- <span class="cline-any cline-yes">32x</span>
481
- <span class="cline-any cline-neutral">&nbsp;</span>
482
- <span class="cline-any cline-neutral">&nbsp;</span>
483
- <span class="cline-any cline-neutral">&nbsp;</span>
484
- <span class="cline-any cline-yes">32x</span>
485
- <span class="cline-any cline-yes">1x</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-yes">32x</span>
492
- <span class="cline-any cline-yes">32x</span>
493
- <span class="cline-any cline-yes">32x</span>
494
- <span class="cline-any cline-yes">32x</span>
495
- <span class="cline-any cline-yes">32x</span>
496
- <span class="cline-any cline-yes">32x</span>
497
- <span class="cline-any cline-neutral">&nbsp;</span>
498
- <span class="cline-any cline-neutral">&nbsp;</span>
499
- <span class="cline-any cline-yes">32x</span>
500
- <span class="cline-any cline-yes">32x</span>
501
- <span class="cline-any cline-yes">29x</span>
502
- <span class="cline-any cline-yes">27x</span>
503
- <span class="cline-any cline-yes">26x</span>
504
- <span class="cline-any cline-neutral">&nbsp;</span>
505
- <span class="cline-any cline-yes">6x</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-neutral">&nbsp;</span>
509
- <span class="cline-any cline-neutral">&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-yes">26x</span>
514
- <span class="cline-any cline-yes">26x</span>
515
- <span class="cline-any cline-no">&nbsp;</span>
516
- <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
520
- <span class="cline-any cline-neutral">&nbsp;</span>
521
- <span class="cline-any cline-neutral">&nbsp;</span>
522
- <span class="cline-any cline-neutral">&nbsp;</span>
523
- <span class="cline-any cline-yes">26x</span>
524
- <span class="cline-any cline-neutral">&nbsp;</span>
525
- <span class="cline-any cline-yes">11x</span>
526
- <span class="cline-any cline-neutral">&nbsp;</span>
527
- <span class="cline-any cline-neutral">&nbsp;</span>
528
- <span class="cline-any cline-neutral">&nbsp;</span>
529
- <span class="cline-any cline-neutral">&nbsp;</span>
530
- <span class="cline-any cline-neutral">&nbsp;</span>
531
- <span class="cline-any cline-neutral">&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-yes">31x</span>
535
- <span class="cline-any cline-yes">5x</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-neutral">&nbsp;</span>
539
- <span class="cline-any cline-no">&nbsp;</span>
540
- <span class="cline-any cline-yes">5x</span>
541
- <span class="cline-any cline-yes">5x</span>
542
- <span class="cline-any cline-yes">5x</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-yes">31x</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></td><td class="text"><pre class="prettyprint lang-js">import { Injectable, Logger } from '@nestjs/common';
549
- import { validate } from 'class-validator';
550
- import { AIActionDto, AIActionType } from './dto/ai-action.dto';
551
- import { ParsingError } from './errors/parsing.error';
552
- import {
553
- ACTION_ITEM_START_TAG,
554
- ACTION_ITEM_END_TAG,
555
- FIELD_CODE,
556
- FIELD_FILE_ACTION,
557
- FIELD_ACTION_TYPE,
558
- FIELD_ACTION_NUMBER,
559
- FIELD_FILE_PATH,
560
- FIELD_COMMAND_STRING,
561
- FIELD_FILES_STRING,
562
- FIELD_FOLDERS_STRING,
563
- FIELD_REASON_STRING,
564
- PARTIAL_ACTION_ITEM_END_TAG,
565
- FIELD_PLAIN,
566
- } from './parsing.constants';
567
- &nbsp;
568
- @Injectable()
569
- export class LlmResponseParserService {
570
- private readonly logger = new Logger(LlmResponseParserService.name);
571
- &nbsp;
572
- private mapActionType(type: string): AIActionType | undefined {
573
- if (!type) return undefined;
574
- const lowerType = type.toLowerCase().trim();
575
- switch (lowerType) {
576
- case 'create':
577
- case 'create_file':
578
- return AIActionType.CREATE_FILE;
579
- case 'edit':
580
- case 'edit_file':
581
- return AIActionType.EDIT_FILE;
582
- case 'delete':
583
- case 'delete_file':
584
- return AIActionType.DELETE_FILE;
585
- case 'run_command':
586
- return AIActionType.RUN_COMMAND;
587
- case 'request_context':
588
- return AIActionType.REQUEST_CONTEXT;
589
- <span class="branch-8 cbranch-no" title="branch not covered" > case 'final':</span>
590
- <span class="cstat-no" title="statement not covered" > return AIActionType.FINAL;</span>
591
- default:
592
- this.logger.warn(`Unsupported action type found: "${type}"`);
593
- return undefined;
594
- }
595
- }
596
- &nbsp;
597
- /**
598
- * Parses a raw LLM response string into an array of AIActionDto objects and an explanation string.
599
- * If parsing fails, it logs a warning and returns an empty array for actions.
600
- * Malformed individual action blocks are skipped.
601
- * @param rawResponse The raw string response from the LLM.
602
- * @returns A Promise resolving to an object with an array of AIActionDto objects and an explanation string.
603
- */
604
- async parse(
605
- rawResponse: string,
606
- ): Promise&lt;{ dtos: AIActionDto[]; explanation: string | null }&gt; {
607
- if (!rawResponse || rawResponse.trim() === '') {
608
- return { dtos: [], explanation: null };
609
- }
610
- &nbsp;
611
- const firstActionStart = rawResponse.indexOf(ACTION_ITEM_START_TAG);
612
- let explanation: string | null = null;
613
- let actionsPart = rawResponse;
614
- &nbsp;
615
- if (firstActionStart &gt; 0) {
616
- explanation = rawResponse.substring(0, firstActionStart).trim();
617
- actionsPart = rawResponse.substring(firstActionStart);
618
- } else if (firstActionStart === -1) {
619
- // No action item start tags. If no end tags either, consider it all explanation.
620
- if (
621
- !rawResponse.includes(ACTION_ITEM_END_TAG) &amp;&amp;
622
- !rawResponse.includes(PARTIAL_ACTION_ITEM_END_TAG)
623
- ) {
624
- return { dtos: [], explanation: rawResponse.trim() };
625
- }
626
- // Otherwise, it might be a malformed response, so let the block parser handle it.
627
- }
628
- &nbsp;
629
- const actionBlocks = actionsPart
630
- .split(ACTION_ITEM_START_TAG)
631
- .filter((block) =&gt; block.trim() !== '');
632
- &nbsp;
633
- <span class="missing-if-branch" title="if path not taken" >I</span>if (actionBlocks.length === 0) {
634
- <span class="cstat-no" title="statement not covered" > this.logger.log('No action item blocks found in the response.');</span>
635
- <span class="cstat-no" title="statement not covered" > return { dtos: [], explanation };</span>
636
- }
637
- &nbsp;
638
- const dtos: AIActionDto[] = [];
639
- for (const block of actionBlocks) {
640
- try {
641
- let cleanBlock: string;
642
- &nbsp;
643
- // Use a regex to split by either the full end tag or the partial one.
644
- // This makes the parser more robust to truncated LLM outputs.
645
- const endTagRegex = new RegExp(`${PARTIAL_ACTION_ITEM_END_TAG}§?`);
646
- const parts = block.split(endTagRegex);
647
- &nbsp;
648
- if (parts.length &gt;= 2) {
649
- // Normal case: End tag was found.
650
- cleanBlock = parts[0];
651
- } else if (actionBlocks.length === 1 &amp;&amp; parts.length === 1) {
652
- // Special case: Only one action block and it's missing an end tag.
653
- // We assume the rest of the response is the content of this single block.
654
- this.logger.log(
655
- 'Only one action block found and it is missing an end tag. Assuming end of response is end of block.',
656
- );
657
- cleanBlock = parts[0];
658
- } else {
659
- // Malformed block that is not the special case above.
660
- throw new ParsingError(
661
- `Malformed action block, missing an end marker like '${ACTION_ITEM_END_TAG}'.`,
662
- );
663
- }
664
- &nbsp;
665
- // Special handling for 'final' action with a 'plain' multiline field
666
- if (/¦FileAction¦\s*final/.test(cleanBlock)) {
667
- const plainSeparator = `¦${FIELD_PLAIN}¦`;
668
- const plainIndex = cleanBlock.indexOf(plainSeparator);
669
- if (plainIndex !== -1) {
670
- const plainContent = cleanBlock
671
- .substring(plainIndex + plainSeparator.length)
672
- .trim();
673
- this.logger.log(
674
- `Parsed 'final' action with plain content. Returning as explanation.`,
675
- );
676
- return { dtos: [], explanation: plainContent };
677
- }
678
- }
679
- &nbsp;
680
- const actionData: { [key: string]: string } = {};
681
- const codeSeparator = `¦${FIELD_CODE}¦`;
682
- const codeIndex = cleanBlock.indexOf(codeSeparator);
683
- &nbsp;
684
- let metadataPart: string;
685
- if (codeIndex !== -1) {
686
- metadataPart = cleanBlock.substring(0, codeIndex);
687
- let codePart = cleanBlock.substring(codeIndex + codeSeparator.length);
688
- &nbsp;
689
- // trim and extract from code block
690
- codePart = codePart.trim();
691
- // Use an anchored regex to only match if the fences are at the very start and end.
692
- // This is more robust against code that contains ``` in string literals.
693
- const codeMatch = codePart.match(/^```(?:\w*\n)?([\s\S]*)```$/);
694
- actionData[FIELD_CODE] = codeMatch ? codeMatch[1].trim() : <span class="branch-1 cbranch-no" title="branch not covered" >codePart;</span>
695
- } else {
696
- metadataPart = cleanBlock;
697
- // No code part
698
- }
699
- &nbsp;
700
- const lines = metadataPart.split('\n');
701
- for (const line of lines) {
702
- if (!line.trim()) continue;
703
- const match = line.match(/¦(.*?)¦\s*(.*)/);
704
- if (match) {
705
- const [, key, value] = match;
706
- actionData[key.trim()] = value.trim();
707
- }
708
- }
709
- &nbsp;
710
- const dto = new AIActionDto();
711
- const actionTypeRaw =
712
- actionData[FIELD_FILE_ACTION] || actionData[FIELD_ACTION_TYPE];
713
- dto.action_type = this.mapActionType(actionTypeRaw);
714
- if (!dto.action_type) {
715
- throw new ParsingError(
716
- `Unsupported or missing action type: "${actionTypeRaw}"`,
717
- );
718
- }
719
- &nbsp;
720
- if (actionData[FIELD_ACTION_NUMBER]) {
721
- dto.order_of_execution = parseInt(
722
- actionData[FIELD_ACTION_NUMBER],
723
- 10,
724
- );
725
- if (isNaN(dto.order_of_execution)) {
726
- throw new ParsingError(
727
- `Invalid ActionNumber: ${actionData[FIELD_ACTION_NUMBER]}`,
728
- );
729
- }
730
- }
731
- &nbsp;
732
- dto.file_path = actionData[FIELD_FILE_PATH];
733
- dto.command_string = actionData[FIELD_COMMAND_STRING];
734
- dto.content = actionData[FIELD_CODE];
735
- dto.files = actionData[FIELD_FILES_STRING];
736
- dto.folders = actionData[FIELD_FOLDERS_STRING];
737
- dto.reason = actionData[FIELD_REASON_STRING];
738
- &nbsp;
739
- // Manual validation for context-dependent fields
740
- try {
741
- AIActionDto.validateFilePath(dto);
742
- AIActionDto.validateContentForFileOps(dto);
743
- AIActionDto.validateCommandString(dto);
744
- AIActionDto.validateRequestContext(dto);
745
- } catch (manualValidationError) {
746
- throw new ParsingError(
747
- `Validation failed for action: ${
748
- (manualValidationError as Error).message
749
- }`,
750
- manualValidationError,
751
- );
752
- }
753
- &nbsp;
754
- const errors = await validate(dto);
755
- <span class="missing-if-branch" title="if path not taken" >I</span>if (errors.length &gt; 0) {
756
- const errorMessages = <span class="cstat-no" title="statement not covered" >errors</span>
757
- .map(<span class="fstat-no" title="function not covered" >(e</span>rr) =&gt; <span class="cstat-no" title="statement not covered" >Object.values(err.constraints || {}).join(', '))</span>
758
- .join('; ');
759
- <span class="cstat-no" title="statement not covered" > throw new ParsingError(</span>
760
- `Validation failed for an action: ${errorMessages}`,
761
- errors,
762
- );
763
- }
764
- dtos.push(dto);
765
- } catch (error) {
766
- this.logger.warn(
767
- `Skipping malformed action block due to error: ${error.message}`,
768
- `Block content: ${block.substring(0, 200)}...`,
769
- );
770
- // Continue to the next block instead of throwing
771
- }
772
- }
773
- &nbsp;
774
- // Sort by order_of_execution if present
775
- dtos.sort((a, b) =&gt; {
776
- <span class="missing-if-branch" title="if path not taken" >I</span>if (
777
- a.order_of_execution === undefined &amp;&amp;
778
- <span class="branch-1 cbranch-no" title="branch not covered" > b.order_of_execution === undefined</span>
779
- )
780
- <span class="cstat-no" title="statement not covered" > return 0;</span>
781
- <span class="missing-if-branch" title="if path not taken" >I</span>if (a.order_of_execution === undefined) <span class="cstat-no" title="statement not covered" >return 1;</span>
782
- <span class="missing-if-branch" title="if path not taken" >I</span>if (b.order_of_execution === undefined) <span class="cstat-no" title="statement not covered" >return -1;</span>
783
- return a.order_of_execution - b.order_of_execution;
784
- });
785
- &nbsp;
786
- return { dtos, explanation };
787
- }
788
- }
789
- &nbsp;</pre></td></tr></table></pre>
790
-
791
- <div class='push'></div><!-- for sticky footer -->
792
- </div><!-- /wrapper -->
793
- <div class='footer quiet pad2 space-top1 center small'>
794
- Code coverage generated by
795
- <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
796
- at 2025-09-12T19:21:55.945Z
797
- </div>
798
- <script src="../../prettify.js"></script>
799
- <script>
800
- window.onload = function () {
801
- prettyPrint();
802
- };
803
- </script>
804
- <script src="../../sorter.js"></script>
805
- <script src="../../block-navigation.js"></script>
806
- </body>
807
- </html>
808
-