repoburg 1.3.128 → 1.3.129

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 (435) hide show
  1. package/backend/coverage/clover.xml +12003 -0
  2. package/backend/coverage/coverage-final.json +313 -0
  3. package/backend/coverage/lcov-report/base.css +224 -0
  4. package/backend/coverage/lcov-report/block-navigation.js +87 -0
  5. package/backend/coverage/lcov-report/favicon.png +0 -0
  6. package/backend/coverage/lcov-report/index.html +1301 -0
  7. package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +116 -0
  8. package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +445 -0
  9. package/backend/coverage/lcov-report/packages/gemini-core/index.html +116 -0
  10. package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +127 -0
  11. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +193 -0
  12. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +832 -0
  13. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +206 -0
  14. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +469 -0
  15. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +1705 -0
  16. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +790 -0
  17. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +454 -0
  18. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +685 -0
  19. package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +307 -0
  20. package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +146 -0
  21. package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +151 -0
  22. package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +172 -0
  23. package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +490 -0
  24. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +1237 -0
  25. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +139 -0
  26. package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +176 -0
  27. package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +409 -0
  28. package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +181 -0
  29. package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +116 -0
  30. package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +187 -0
  31. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +229 -0
  32. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +634 -0
  33. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +373 -0
  34. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +191 -0
  35. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +124 -0
  36. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +835 -0
  37. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +211 -0
  38. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +421 -0
  39. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +191 -0
  40. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +592 -0
  41. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +388 -0
  42. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +877 -0
  43. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +112 -0
  44. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +502 -0
  45. package/backend/coverage/lcov-report/packages/tokenpatch/index.html +161 -0
  46. package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +415 -0
  47. package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +139 -0
  48. package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +1249 -0
  49. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +131 -0
  50. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +187 -0
  51. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +193 -0
  52. package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +178 -0
  53. package/backend/coverage/lcov-report/prettify.css +1 -0
  54. package/backend/coverage/lcov-report/prettify.js +2 -0
  55. package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  56. package/backend/coverage/lcov-report/sorter.js +210 -0
  57. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +1549 -0
  58. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +904 -0
  59. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +175 -0
  60. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +1534 -0
  61. package/backend/coverage/lcov-report/src/ai-actions/index.html +161 -0
  62. package/backend/coverage/lcov-report/src/app.controller.ts.html +151 -0
  63. package/backend/coverage/lcov-report/src/app.module.ts.html +451 -0
  64. package/backend/coverage/lcov-report/src/app.service.ts.html +163 -0
  65. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +1609 -0
  66. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +136 -0
  67. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +2281 -0
  68. package/backend/coverage/lcov-report/src/application-state/dto/index.html +416 -0
  69. package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +109 -0
  70. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +118 -0
  71. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +109 -0
  72. package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +124 -0
  73. package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +121 -0
  74. package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +124 -0
  75. package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +115 -0
  76. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +115 -0
  77. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +127 -0
  78. package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +118 -0
  79. package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +109 -0
  80. package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +139 -0
  81. package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +109 -0
  82. package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +109 -0
  83. package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +118 -0
  84. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +124 -0
  85. package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +118 -0
  86. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +109 -0
  87. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +124 -0
  88. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +118 -0
  89. package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +109 -0
  90. package/backend/coverage/lcov-report/src/application-state/index.html +146 -0
  91. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +1297 -0
  92. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +712 -0
  93. package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +379 -0
  94. package/backend/coverage/lcov-report/src/common/cache/index.html +146 -0
  95. package/backend/coverage/lcov-report/src/common/common.module.ts.html +121 -0
  96. package/backend/coverage/lcov-report/src/common/index.html +116 -0
  97. package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +337 -0
  98. package/backend/coverage/lcov-report/src/common/interceptors/index.html +116 -0
  99. package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +265 -0
  100. package/backend/coverage/lcov-report/src/common/middleware/index.html +116 -0
  101. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +118 -0
  102. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +1501 -0
  103. package/backend/coverage/lcov-report/src/context-generation/index.html +131 -0
  104. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +427 -0
  105. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +142 -0
  106. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +442 -0
  107. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +211 -0
  108. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +116 -0
  109. package/backend/coverage/lcov-report/src/context-snippets/index.html +146 -0
  110. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +724 -0
  111. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +142 -0
  112. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +1015 -0
  113. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +511 -0
  114. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +116 -0
  115. package/backend/coverage/lcov-report/src/context-templates/index.html +146 -0
  116. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +613 -0
  117. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +124 -0
  118. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +211 -0
  119. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +190 -0
  120. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +439 -0
  121. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +205 -0
  122. package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +241 -0
  123. package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +553 -0
  124. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +208 -0
  125. package/backend/coverage/lcov-report/src/core-entities/index.html +371 -0
  126. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +136 -0
  127. package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +388 -0
  128. package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +256 -0
  129. package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +256 -0
  130. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +181 -0
  131. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +745 -0
  132. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +688 -0
  133. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +349 -0
  134. package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +235 -0
  135. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +442 -0
  136. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +124 -0
  137. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +304 -0
  138. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +205 -0
  139. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +116 -0
  140. package/backend/coverage/lcov-report/src/custom-snippets/index.html +146 -0
  141. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +463 -0
  142. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +124 -0
  143. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +310 -0
  144. package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +244 -0
  145. package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +116 -0
  146. package/backend/coverage/lcov-report/src/custom-variables/index.html +146 -0
  147. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +295 -0
  148. package/backend/coverage/lcov-report/src/events/events.module.ts.html +109 -0
  149. package/backend/coverage/lcov-report/src/events/index.html +146 -0
  150. package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +466 -0
  151. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +130 -0
  152. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +116 -0
  153. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +130 -0
  154. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +124 -0
  155. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +238 -0
  156. package/backend/coverage/lcov-report/src/execution-logs/index.html +146 -0
  157. package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +553 -0
  158. package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +109 -0
  159. package/backend/coverage/lcov-report/src/gemini/index.html +131 -0
  160. package/backend/coverage/lcov-report/src/global-config/dto/index.html +116 -0
  161. package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +367 -0
  162. package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +220 -0
  163. package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +115 -0
  164. package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +397 -0
  165. package/backend/coverage/lcov-report/src/global-config/index.html +146 -0
  166. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +340 -0
  167. package/backend/coverage/lcov-report/src/index.html +206 -0
  168. package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +187 -0
  169. package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +1825 -0
  170. package/backend/coverage/lcov-report/src/interactive-chat/index.html +146 -0
  171. package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +343 -0
  172. package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +116 -0
  173. package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +214 -0
  174. package/backend/coverage/lcov-report/src/llm-call-logs/index.html +146 -0
  175. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +634 -0
  176. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +124 -0
  177. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +643 -0
  178. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +1090 -0
  179. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +433 -0
  180. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +757 -0
  181. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +586 -0
  182. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +1153 -0
  183. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +124 -0
  184. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +103 -0
  185. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +124 -0
  186. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +106 -0
  187. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +106 -0
  188. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +118 -0
  189. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +190 -0
  190. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +196 -0
  191. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +91 -0
  192. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +356 -0
  193. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +106 -0
  194. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +124 -0
  195. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +124 -0
  196. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +214 -0
  197. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +202 -0
  198. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +151 -0
  199. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +181 -0
  200. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +130 -0
  201. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +631 -0
  202. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +469 -0
  203. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +448 -0
  204. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +1351 -0
  205. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +868 -0
  206. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +481 -0
  207. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +416 -0
  208. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +580 -0
  209. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +352 -0
  210. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +1054 -0
  211. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +331 -0
  212. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +403 -0
  213. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +176 -0
  214. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +100 -0
  215. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +724 -0
  216. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +358 -0
  217. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +379 -0
  218. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +838 -0
  219. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +1702 -0
  220. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +1459 -0
  221. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +679 -0
  222. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +964 -0
  223. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +625 -0
  224. package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +103 -0
  225. package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +116 -0
  226. package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +1645 -0
  227. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +238 -0
  228. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +181 -0
  229. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +161 -0
  230. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +313 -0
  231. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +466 -0
  232. package/backend/coverage/lcov-report/src/llm-orchestration/index.html +176 -0
  233. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +319 -0
  234. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +706 -0
  235. package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +1150 -0
  236. package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +131 -0
  237. package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +658 -0
  238. package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +127 -0
  239. package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +547 -0
  240. package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +1681 -0
  241. package/backend/coverage/lcov-report/src/llm-provider/index.html +236 -0
  242. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +187 -0
  243. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +361 -0
  244. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +175 -0
  245. package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +1780 -0
  246. package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +1867 -0
  247. package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +1891 -0
  248. package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +304 -0
  249. package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +1666 -0
  250. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +131 -0
  251. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +436 -0
  252. package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +319 -0
  253. package/backend/coverage/lcov-report/src/llm-responses/index.html +146 -0
  254. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +283 -0
  255. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +184 -0
  256. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +1474 -0
  257. package/backend/coverage/lcov-report/src/main.ts.html +463 -0
  258. package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +145 -0
  259. package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +127 -0
  260. package/backend/coverage/lcov-report/src/mcp/dto/index.html +146 -0
  261. package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +112 -0
  262. package/backend/coverage/lcov-report/src/mcp/index.html +146 -0
  263. package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +340 -0
  264. package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +124 -0
  265. package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +1345 -0
  266. package/backend/coverage/lcov-report/src/message-bus/dto/index.html +116 -0
  267. package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +109 -0
  268. package/backend/coverage/lcov-report/src/message-bus/index.html +146 -0
  269. package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +148 -0
  270. package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +115 -0
  271. package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +151 -0
  272. package/backend/coverage/lcov-report/src/projects/dto/index.html +116 -0
  273. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +196 -0
  274. package/backend/coverage/lcov-report/src/projects/index.html +146 -0
  275. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +322 -0
  276. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +124 -0
  277. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +235 -0
  278. package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +280 -0
  279. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +439 -0
  280. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +271 -0
  281. package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +271 -0
  282. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +172 -0
  283. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +116 -0
  284. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +157 -0
  285. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +148 -0
  286. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +151 -0
  287. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +161 -0
  288. package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +247 -0
  289. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +94 -0
  290. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +100 -0
  291. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +97 -0
  292. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +100 -0
  293. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +304 -0
  294. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +94 -0
  295. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +341 -0
  296. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +100 -0
  297. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +97 -0
  298. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +94 -0
  299. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +94 -0
  300. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +94 -0
  301. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +94 -0
  302. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +94 -0
  303. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +100 -0
  304. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +94 -0
  305. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +94 -0
  306. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +94 -0
  307. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +97 -0
  308. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +131 -0
  309. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +121 -0
  310. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +116 -0
  311. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +115 -0
  312. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +136 -0
  313. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +131 -0
  314. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +190 -0
  315. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +421 -0
  316. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +265 -0
  317. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +161 -0
  318. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +388 -0
  319. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +265 -0
  320. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +274 -0
  321. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +146 -0
  322. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +250 -0
  323. package/backend/coverage/lcov-report/src/seeding/index.html +236 -0
  324. package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +193 -0
  325. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +211 -0
  326. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +187 -0
  327. package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +742 -0
  328. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +397 -0
  329. package/backend/coverage/lcov-report/src/session-followup/index.html +131 -0
  330. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +130 -0
  331. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +718 -0
  332. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +116 -0
  333. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +577 -0
  334. package/backend/coverage/lcov-report/src/session-inputs/index.html +176 -0
  335. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +832 -0
  336. package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +220 -0
  337. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +685 -0
  338. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +229 -0
  339. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +1981 -0
  340. package/backend/coverage/lcov-report/src/session-transfer/index.html +131 -0
  341. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +160 -0
  342. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +883 -0
  343. package/backend/coverage/lcov-report/src/sessions/dto/index.html +116 -0
  344. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +769 -0
  345. package/backend/coverage/lcov-report/src/sessions/index.html +146 -0
  346. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +1306 -0
  347. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +220 -0
  348. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +2797 -0
  349. package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +355 -0
  350. package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +131 -0
  351. package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +295 -0
  352. package/backend/coverage/lcov-report/src/sub-agents/index.html +221 -0
  353. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +463 -0
  354. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +2428 -0
  355. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +580 -0
  356. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +550 -0
  357. package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +475 -0
  358. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +373 -0
  359. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +205 -0
  360. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +619 -0
  361. package/backend/coverage/lcov-report/src/syntax-validation/index.html +131 -0
  362. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +109 -0
  363. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +724 -0
  364. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +176 -0
  365. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +157 -0
  366. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +148 -0
  367. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +517 -0
  368. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +121 -0
  369. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +118 -0
  370. package/backend/coverage/lcov-report/src/system-prompts/index.html +146 -0
  371. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +1060 -0
  372. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +160 -0
  373. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +2254 -0
  374. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +178 -0
  375. package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +181 -0
  376. package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +131 -0
  377. package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +178 -0
  378. package/backend/coverage/lcov-report/src/tool-hooks/index.html +146 -0
  379. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +481 -0
  380. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +127 -0
  381. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +1222 -0
  382. package/backend/coverage/lcov-report/src/tracing.ts.html +214 -0
  383. package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +130 -0
  384. package/backend/coverage/lcov-report/src/types/index.html +116 -0
  385. package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +253 -0
  386. package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +310 -0
  387. package/backend/coverage/lcov-report/src/utils/index.html +191 -0
  388. package/backend/coverage/lcov-report/src/utils/index.ts.html +100 -0
  389. package/backend/coverage/lcov-report/src/utils/short-id.ts.html +109 -0
  390. package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +412 -0
  391. package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +223 -0
  392. package/backend/coverage/lcov-report/src/visual-editor/index.html +146 -0
  393. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +409 -0
  394. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +130 -0
  395. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +118 -0
  396. package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +112 -0
  397. package/backend/coverage/lcov-report/src/workspace/dto/index.html +131 -0
  398. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +193 -0
  399. package/backend/coverage/lcov-report/src/workspace/index.html +146 -0
  400. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +394 -0
  401. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +121 -0
  402. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +1027 -0
  403. package/backend/coverage/lcov.info +20220 -0
  404. package/backend/dist/src/context-templates/context-templates.service.js +0 -3
  405. package/backend/dist/src/context-templates/context-templates.service.js.map +1 -1
  406. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.d.ts +1 -1
  407. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js +4 -0
  408. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js.map +1 -1
  409. package/backend/dist/src/seeding/data/sub-agents/browser-use.d.ts +1 -1
  410. package/backend/dist/src/seeding/data/sub-agents/browser-use.js +1 -1
  411. package/backend/dist/src/seeding/data/sub-agents/browser-use.js.map +1 -1
  412. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.d.ts +1 -0
  413. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js +2 -1
  414. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js.map +1 -1
  415. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.d.ts +1 -0
  416. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js +2 -1
  417. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js.map +1 -1
  418. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.d.ts +1 -0
  419. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js +2 -1
  420. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js.map +1 -1
  421. package/backend/dist/src/seeding/system-prompt-seeding.service.js +3 -1
  422. package/backend/dist/src/seeding/system-prompt-seeding.service.js.map +1 -1
  423. package/backend/dist/src/sub-agents/sub-agent-run.entity.d.ts +1 -1
  424. package/backend/dist/src/sub-agents/sub-agent-run.entity.js +1 -1
  425. package/backend/dist/src/sub-agents/sub-agent-run.entity.js.map +1 -1
  426. package/backend/dist/src/sub-agents/sub-agent-runner.service.d.ts +1 -0
  427. package/backend/dist/src/sub-agents/sub-agent-runner.service.js +16 -2
  428. package/backend/dist/src/sub-agents/sub-agent-runner.service.js.map +1 -1
  429. package/backend/dist/src/sub-agents/sub-agents.service.js +0 -3
  430. package/backend/dist/src/sub-agents/sub-agents.service.js.map +1 -1
  431. package/backend/dist/src/system-prompts/system-prompts.service.d.ts +2 -1
  432. package/backend/dist/src/system-prompts/system-prompts.service.js +20 -14
  433. package/backend/dist/src/system-prompts/system-prompts.service.js.map +1 -1
  434. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  435. package/package.json +1 -1
@@ -0,0 +1,1351 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/llm-orchestration/action-handlers/get-messages.handler.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-orchestration/action-handlers</a> get-messages.handler.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">89.02% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>146/164</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">60.31% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>76/126</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">100% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>13/13</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">90.06% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>136/151</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>
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>
439
+ <a name='L374'></a><a href='#L374'>374</a>
440
+ <a name='L375'></a><a href='#L375'>375</a>
441
+ <a name='L376'></a><a href='#L376'>376</a>
442
+ <a name='L377'></a><a href='#L377'>377</a>
443
+ <a name='L378'></a><a href='#L378'>378</a>
444
+ <a name='L379'></a><a href='#L379'>379</a>
445
+ <a name='L380'></a><a href='#L380'>380</a>
446
+ <a name='L381'></a><a href='#L381'>381</a>
447
+ <a name='L382'></a><a href='#L382'>382</a>
448
+ <a name='L383'></a><a href='#L383'>383</a>
449
+ <a name='L384'></a><a href='#L384'>384</a>
450
+ <a name='L385'></a><a href='#L385'>385</a>
451
+ <a name='L386'></a><a href='#L386'>386</a>
452
+ <a name='L387'></a><a href='#L387'>387</a>
453
+ <a name='L388'></a><a href='#L388'>388</a>
454
+ <a name='L389'></a><a href='#L389'>389</a>
455
+ <a name='L390'></a><a href='#L390'>390</a>
456
+ <a name='L391'></a><a href='#L391'>391</a>
457
+ <a name='L392'></a><a href='#L392'>392</a>
458
+ <a name='L393'></a><a href='#L393'>393</a>
459
+ <a name='L394'></a><a href='#L394'>394</a>
460
+ <a name='L395'></a><a href='#L395'>395</a>
461
+ <a name='L396'></a><a href='#L396'>396</a>
462
+ <a name='L397'></a><a href='#L397'>397</a>
463
+ <a name='L398'></a><a href='#L398'>398</a>
464
+ <a name='L399'></a><a href='#L399'>399</a>
465
+ <a name='L400'></a><a href='#L400'>400</a>
466
+ <a name='L401'></a><a href='#L401'>401</a>
467
+ <a name='L402'></a><a href='#L402'>402</a>
468
+ <a name='L403'></a><a href='#L403'>403</a>
469
+ <a name='L404'></a><a href='#L404'>404</a>
470
+ <a name='L405'></a><a href='#L405'>405</a>
471
+ <a name='L406'></a><a href='#L406'>406</a>
472
+ <a name='L407'></a><a href='#L407'>407</a>
473
+ <a name='L408'></a><a href='#L408'>408</a>
474
+ <a name='L409'></a><a href='#L409'>409</a>
475
+ <a name='L410'></a><a href='#L410'>410</a>
476
+ <a name='L411'></a><a href='#L411'>411</a>
477
+ <a name='L412'></a><a href='#L412'>412</a>
478
+ <a name='L413'></a><a href='#L413'>413</a>
479
+ <a name='L414'></a><a href='#L414'>414</a>
480
+ <a name='L415'></a><a href='#L415'>415</a>
481
+ <a name='L416'></a><a href='#L416'>416</a>
482
+ <a name='L417'></a><a href='#L417'>417</a>
483
+ <a name='L418'></a><a href='#L418'>418</a>
484
+ <a name='L419'></a><a href='#L419'>419</a>
485
+ <a name='L420'></a><a href='#L420'>420</a>
486
+ <a name='L421'></a><a href='#L421'>421</a>
487
+ <a name='L422'></a><a href='#L422'>422</a>
488
+ <a name='L423'></a><a href='#L423'>423</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">8x</span>
489
+ <span class="cline-any cline-yes">8x</span>
490
+ <span class="cline-any cline-yes">8x</span>
491
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
495
+ <span class="cline-any cline-neutral">&nbsp;</span>
496
+ <span class="cline-any cline-yes">8x</span>
497
+ <span class="cline-any cline-yes">8x</span>
498
+ <span class="cline-any cline-neutral">&nbsp;</span>
499
+ <span class="cline-any cline-yes">8x</span>
500
+ <span class="cline-any cline-neutral">&nbsp;</span>
501
+ <span class="cline-any cline-yes">8x</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-yes">8x</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-yes">8x</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-yes">8x</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-yes">26x</span>
516
+ <span class="cline-any cline-yes">1x</span>
517
+ <span class="cline-any cline-neutral">&nbsp;</span>
518
+ <span class="cline-any cline-neutral">&nbsp;</span>
519
+ <span class="cline-any cline-neutral">&nbsp;</span>
520
+ <span class="cline-any cline-yes">15x</span>
521
+ <span class="cline-any cline-neutral">&nbsp;</span>
522
+ <span class="cline-any cline-yes">5x</span>
523
+ <span class="cline-any cline-neutral">&nbsp;</span>
524
+ <span class="cline-any cline-no">&nbsp;</span>
525
+ <span class="cline-any cline-neutral">&nbsp;</span>
526
+ <span class="cline-any cline-yes">1x</span>
527
+ <span class="cline-any cline-neutral">&nbsp;</span>
528
+ <span class="cline-any cline-no">&nbsp;</span>
529
+ <span class="cline-any cline-neutral">&nbsp;</span>
530
+ <span class="cline-any cline-no">&nbsp;</span>
531
+ <span class="cline-any cline-neutral">&nbsp;</span>
532
+ <span class="cline-any cline-no">&nbsp;</span>
533
+ <span class="cline-any cline-neutral">&nbsp;</span>
534
+ <span class="cline-any cline-yes">2x</span>
535
+ <span class="cline-any cline-neutral">&nbsp;</span>
536
+ <span class="cline-any cline-yes">1x</span>
537
+ <span class="cline-any cline-neutral">&nbsp;</span>
538
+ <span class="cline-any cline-yes">1x</span>
539
+ <span class="cline-any cline-neutral">&nbsp;</span>
540
+ <span class="cline-any cline-no">&nbsp;</span>
541
+ <span class="cline-any cline-neutral">&nbsp;</span>
542
+ <span class="cline-any cline-yes">1x</span>
543
+ <span class="cline-any cline-neutral">&nbsp;</span>
544
+ <span class="cline-any cline-no">&nbsp;</span>
545
+ <span class="cline-any cline-neutral">&nbsp;</span>
546
+ <span class="cline-any cline-yes">1x</span>
547
+ <span class="cline-any cline-neutral">&nbsp;</span>
548
+ <span class="cline-any cline-yes">1x</span>
549
+ <span class="cline-any cline-neutral">&nbsp;</span>
550
+ <span class="cline-any cline-no">&nbsp;</span>
551
+ <span class="cline-any cline-neutral">&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-no">&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-no">&nbsp;</span>
559
+ <span class="cline-any cline-neutral">&nbsp;</span>
560
+ <span class="cline-any cline-yes">1x</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-yes">1x</span>
564
+ <span class="cline-any cline-neutral">&nbsp;</span>
565
+ <span class="cline-any cline-neutral">&nbsp;</span>
566
+ <span class="cline-any cline-yes">1x</span>
567
+ <span class="cline-any cline-yes">1x</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-neutral">&nbsp;</span>
575
+ <span class="cline-any cline-neutral">&nbsp;</span>
576
+ <span class="cline-any cline-neutral">&nbsp;</span>
577
+ <span class="cline-any cline-yes">8x</span>
578
+ <span class="cline-any cline-yes">45x</span>
579
+ <span class="cline-any cline-yes">45x</span>
580
+ <span class="cline-any cline-yes">3x</span>
581
+ <span class="cline-any cline-neutral">&nbsp;</span>
582
+ <span class="cline-any cline-yes">45x</span>
583
+ <span class="cline-any cline-yes">4x</span>
584
+ <span class="cline-any cline-neutral">&nbsp;</span>
585
+ <span class="cline-any cline-yes">45x</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-yes">8x</span>
594
+ <span class="cline-any cline-neutral">&nbsp;</span>
595
+ <span class="cline-any cline-neutral">&nbsp;</span>
596
+ <span class="cline-any cline-neutral">&nbsp;</span>
597
+ <span class="cline-any cline-yes">32x</span>
598
+ <span class="cline-any cline-yes">32x</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-yes">32x</span>
601
+ <span class="cline-any cline-yes">46x</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-yes">46x</span>
604
+ <span class="cline-any cline-yes">10x</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-yes">10x</span>
609
+ <span class="cline-any cline-yes">36x</span>
610
+ <span class="cline-any cline-yes">27x</span>
611
+ <span class="cline-any cline-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-neutral">&nbsp;</span>
613
+ <span class="cline-any cline-neutral">&nbsp;</span>
614
+ <span class="cline-any cline-neutral">&nbsp;</span>
615
+ <span class="cline-any cline-yes">27x</span>
616
+ <span class="cline-any cline-yes">1x</span>
617
+ <span class="cline-any cline-neutral">&nbsp;</span>
618
+ <span class="cline-any cline-neutral">&nbsp;</span>
619
+ <span class="cline-any cline-yes">27x</span>
620
+ <span class="cline-any cline-yes">2x</span>
621
+ <span class="cline-any cline-yes">2x</span>
622
+ <span class="cline-any cline-neutral">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-neutral">&nbsp;</span>
625
+ <span class="cline-any cline-neutral">&nbsp;</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-yes">27x</span>
628
+ <span class="cline-any cline-yes">27x</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-yes">27x</span>
632
+ <span class="cline-any cline-neutral">&nbsp;</span>
633
+ <span class="cline-any cline-yes">2x</span>
634
+ <span class="cline-any cline-yes">2x</span>
635
+ <span class="cline-any cline-yes">2x</span>
636
+ <span class="cline-any cline-yes">2x</span>
637
+ <span class="cline-any cline-yes">2x</span>
638
+ <span class="cline-any cline-neutral">&nbsp;</span>
639
+ <span class="cline-any cline-neutral">&nbsp;</span>
640
+ <span class="cline-any cline-neutral">&nbsp;</span>
641
+ <span class="cline-any cline-neutral">&nbsp;</span>
642
+ <span class="cline-any cline-yes">2x</span>
643
+ <span class="cline-any cline-yes">2x</span>
644
+ <span class="cline-any cline-yes">2x</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-yes">2x</span>
647
+ <span class="cline-any cline-yes">2x</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-yes">2x</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-yes">2x</span>
653
+ <span class="cline-any cline-yes">1x</span>
654
+ <span class="cline-any cline-yes">1x</span>
655
+ <span class="cline-any cline-no">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-yes">1x</span>
658
+ <span class="cline-any cline-neutral">&nbsp;</span>
659
+ <span class="cline-any cline-neutral">&nbsp;</span>
660
+ <span class="cline-any cline-yes">2x</span>
661
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-neutral">&nbsp;</span>
666
+ <span class="cline-any cline-yes">2x</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-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-yes">32x</span>
673
+ <span class="cline-any cline-neutral">&nbsp;</span>
674
+ <span class="cline-any cline-neutral">&nbsp;</span>
675
+ <span class="cline-any cline-neutral">&nbsp;</span>
676
+ <span class="cline-any cline-yes">8x</span>
677
+ <span class="cline-any cline-yes">35x</span>
678
+ <span class="cline-any cline-neutral">&nbsp;</span>
679
+ <span class="cline-any cline-neutral">&nbsp;</span>
680
+ <span class="cline-any cline-neutral">&nbsp;</span>
681
+ <span class="cline-any cline-yes">35x</span>
682
+ <span class="cline-any cline-yes">35x</span>
683
+ <span class="cline-any cline-neutral">&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-yes">1x</span>
687
+ <span class="cline-any cline-neutral">&nbsp;</span>
688
+ <span class="cline-any cline-neutral">&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-neutral">&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-yes">3x</span>
696
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&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-neutral">&nbsp;</span>
712
+ <span class="cline-any cline-neutral">&nbsp;</span>
713
+ <span class="cline-any cline-neutral">&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-neutral">&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-neutral">&nbsp;</span>
723
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
729
+ <span class="cline-any cline-neutral">&nbsp;</span>
730
+ <span class="cline-any cline-neutral">&nbsp;</span>
731
+ <span class="cline-any cline-neutral">&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-yes">33x</span>
739
+ <span class="cline-any cline-yes">33x</span>
740
+ <span class="cline-any cline-neutral">&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-neutral">&nbsp;</span>
746
+ <span class="cline-any cline-yes">32x</span>
747
+ <span class="cline-any cline-neutral">&nbsp;</span>
748
+ <span class="cline-any cline-yes">32x</span>
749
+ <span class="cline-any cline-neutral">&nbsp;</span>
750
+ <span class="cline-any cline-neutral">&nbsp;</span>
751
+ <span class="cline-any cline-yes">32x</span>
752
+ <span class="cline-any cline-yes">32x</span>
753
+ <span class="cline-any cline-yes">39x</span>
754
+ <span class="cline-any cline-yes">39x</span>
755
+ <span class="cline-any cline-yes">39x</span>
756
+ <span class="cline-any cline-yes">39x</span>
757
+ <span class="cline-any cline-neutral">&nbsp;</span>
758
+ <span class="cline-any cline-neutral">&nbsp;</span>
759
+ <span class="cline-any cline-neutral">&nbsp;</span>
760
+ <span class="cline-any cline-neutral">&nbsp;</span>
761
+ <span class="cline-any cline-yes">32x</span>
762
+ <span class="cline-any cline-yes">32x</span>
763
+ <span class="cline-any cline-yes">32x</span>
764
+ <span class="cline-any cline-yes">38x</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-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-neutral">&nbsp;</span>
769
+ <span class="cline-any cline-yes">17x</span>
770
+ <span class="cline-any cline-yes">17x</span>
771
+ <span class="cline-any cline-neutral">&nbsp;</span>
772
+ <span class="cline-any cline-neutral">&nbsp;</span>
773
+ <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-yes">32x</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-neutral">&nbsp;</span>
777
+ <span class="cline-any cline-yes">17x</span>
778
+ <span class="cline-any cline-yes">17x</span>
779
+ <span class="cline-any cline-yes">25x</span>
780
+ <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-yes">17x</span>
782
+ <span class="cline-any cline-yes">5x</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-yes">32x</span>
787
+ <span class="cline-any cline-neutral">&nbsp;</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-yes">46x</span>
790
+ <span class="cline-any cline-yes">19x</span>
791
+ <span class="cline-any cline-yes">27x</span>
792
+ <span class="cline-any cline-yes">14x</span>
793
+ <span class="cline-any cline-yes">1x</span>
794
+ <span class="cline-any cline-yes">15x</span>
795
+ <span class="cline-any cline-neutral">&nbsp;</span>
796
+ <span class="cline-any cline-yes">14x</span>
797
+ <span class="cline-any cline-no">&nbsp;</span>
798
+ <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-yes">13x</span>
800
+ <span class="cline-any cline-yes">1x</span>
801
+ <span class="cline-any cline-yes">12x</span>
802
+ <span class="cline-any cline-yes">1x</span>
803
+ <span class="cline-any cline-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-yes">11x</span>
805
+ <span class="cline-any cline-neutral">&nbsp;</span>
806
+ <span class="cline-any cline-neutral">&nbsp;</span>
807
+ <span class="cline-any cline-neutral">&nbsp;</span>
808
+ <span class="cline-any cline-yes">46x</span>
809
+ <span class="cline-any cline-neutral">&nbsp;</span>
810
+ <span class="cline-any cline-neutral">&nbsp;</span>
811
+ <span class="cline-any cline-neutral">&nbsp;</span>
812
+ <span class="cline-any cline-yes">46x</span>
813
+ <span class="cline-any cline-neutral">&nbsp;</span>
814
+ <span class="cline-any cline-neutral">&nbsp;</span>
815
+ <span class="cline-any cline-neutral">&nbsp;</span>
816
+ <span class="cline-any cline-neutral">&nbsp;</span>
817
+ <span class="cline-any cline-neutral">&nbsp;</span>
818
+ <span class="cline-any cline-neutral">&nbsp;</span>
819
+ <span class="cline-any cline-neutral">&nbsp;</span>
820
+ <span class="cline-any cline-neutral">&nbsp;</span>
821
+ <span class="cline-any cline-neutral">&nbsp;</span>
822
+ <span class="cline-any cline-neutral">&nbsp;</span>
823
+ <span class="cline-any cline-neutral">&nbsp;</span>
824
+ <span class="cline-any cline-neutral">&nbsp;</span>
825
+ <span class="cline-any cline-neutral">&nbsp;</span>
826
+ <span class="cline-any cline-neutral">&nbsp;</span>
827
+ <span class="cline-any cline-yes">32x</span>
828
+ <span class="cline-any cline-neutral">&nbsp;</span>
829
+ <span class="cline-any cline-yes">32x</span>
830
+ <span class="cline-any cline-yes">32x</span>
831
+ <span class="cline-any cline-yes">32x</span>
832
+ <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-yes">32x</span>
834
+ <span class="cline-any cline-yes">46x</span>
835
+ <span class="cline-any cline-neutral">&nbsp;</span>
836
+ <span class="cline-any cline-yes">46x</span>
837
+ <span class="cline-any cline-neutral">&nbsp;</span>
838
+ <span class="cline-any cline-yes">4x</span>
839
+ <span class="cline-any cline-neutral">&nbsp;</span>
840
+ <span class="cline-any cline-neutral">&nbsp;</span>
841
+ <span class="cline-any cline-neutral">&nbsp;</span>
842
+ <span class="cline-any cline-neutral">&nbsp;</span>
843
+ <span class="cline-any cline-neutral">&nbsp;</span>
844
+ <span class="cline-any cline-neutral">&nbsp;</span>
845
+ <span class="cline-any cline-yes">4x</span>
846
+ <span class="cline-any cline-yes">4x</span>
847
+ <span class="cline-any cline-neutral">&nbsp;</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
849
+ <span class="cline-any cline-yes">46x</span>
850
+ <span class="cline-any cline-yes">34x</span>
851
+ <span class="cline-any cline-neutral">&nbsp;</span>
852
+ <span class="cline-any cline-neutral">&nbsp;</span>
853
+ <span class="cline-any cline-yes">46x</span>
854
+ <span class="cline-any cline-yes">46x</span>
855
+ <span class="cline-any cline-neutral">&nbsp;</span>
856
+ <span class="cline-any cline-neutral">&nbsp;</span>
857
+ <span class="cline-any cline-neutral">&nbsp;</span>
858
+ <span class="cline-any cline-yes">32x</span>
859
+ <span class="cline-any cline-neutral">&nbsp;</span>
860
+ <span class="cline-any cline-yes">30x</span>
861
+ <span class="cline-any cline-yes">30x</span>
862
+ <span class="cline-any cline-neutral">&nbsp;</span>
863
+ <span class="cline-any cline-neutral">&nbsp;</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-neutral">&nbsp;</span>
866
+ <span class="cline-any cline-neutral">&nbsp;</span>
867
+ <span class="cline-any cline-neutral">&nbsp;</span>
868
+ <span class="cline-any cline-neutral">&nbsp;</span>
869
+ <span class="cline-any cline-neutral">&nbsp;</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-yes">32x</span>
872
+ <span class="cline-any cline-yes">4x</span>
873
+ <span class="cline-any cline-neutral">&nbsp;</span>
874
+ <span class="cline-any cline-neutral">&nbsp;</span>
875
+ <span class="cline-any cline-yes">32x</span>
876
+ <span class="cline-any cline-yes">46x</span>
877
+ <span class="cline-any cline-neutral">&nbsp;</span>
878
+ <span class="cline-any cline-neutral">&nbsp;</span>
879
+ <span class="cline-any cline-neutral">&nbsp;</span>
880
+ <span class="cline-any cline-yes">32x</span>
881
+ <span class="cline-any cline-neutral">&nbsp;</span>
882
+ <span class="cline-any cline-neutral">&nbsp;</span>
883
+ <span class="cline-any cline-neutral">&nbsp;</span>
884
+ <span class="cline-any cline-neutral">&nbsp;</span>
885
+ <span class="cline-any cline-neutral">&nbsp;</span>
886
+ <span class="cline-any cline-neutral">&nbsp;</span>
887
+ <span class="cline-any cline-neutral">&nbsp;</span>
888
+ <span class="cline-any cline-neutral">&nbsp;</span>
889
+ <span class="cline-any cline-neutral">&nbsp;</span>
890
+ <span class="cline-any cline-neutral">&nbsp;</span>
891
+ <span class="cline-any cline-neutral">&nbsp;</span>
892
+ <span class="cline-any cline-neutral">&nbsp;</span>
893
+ <span class="cline-any cline-neutral">&nbsp;</span>
894
+ <span class="cline-any cline-neutral">&nbsp;</span>
895
+ <span class="cline-any cline-neutral">&nbsp;</span>
896
+ <span class="cline-any cline-neutral">&nbsp;</span>
897
+ <span class="cline-any cline-neutral">&nbsp;</span>
898
+ <span class="cline-any cline-yes">1x</span>
899
+ <span class="cline-any cline-neutral">&nbsp;</span>
900
+ <span class="cline-any cline-neutral">&nbsp;</span>
901
+ <span class="cline-any cline-neutral">&nbsp;</span>
902
+ <span class="cline-any cline-neutral">&nbsp;</span>
903
+ <span class="cline-any cline-neutral">&nbsp;</span>
904
+ <span class="cline-any cline-neutral">&nbsp;</span>
905
+ <span class="cline-any cline-neutral">&nbsp;</span>
906
+ <span class="cline-any cline-neutral">&nbsp;</span>
907
+ <span class="cline-any cline-neutral">&nbsp;</span>
908
+ <span class="cline-any cline-neutral">&nbsp;</span>
909
+ <span class="cline-any cline-neutral">&nbsp;</span>
910
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Injectable } from '@nestjs/common';
911
+ import { InjectRepository } from '@nestjs/typeorm';
912
+ import { Repository } from 'typeorm';
913
+ import { ActionHandler } from './action-handler.interface';
914
+ import {
915
+ ActionExecutionResult,
916
+ PlanExecutionContext,
917
+ } from '../llm-orchestration.interfaces';
918
+ import { SessionInput, AIAction } from '../../core-entities';
919
+ import { HistoryCompressionService } from '../history-compression.service';
920
+ import { LlmContent } from '../../llm-provider/llm-provider.interface';
921
+ import { toShortId } from '../../utils';
922
+ &nbsp;
923
+ const PREVIEW_MAX_LENGTH = 120;
924
+ &nbsp;
925
+ /** Default chars-per-token ratio used when no input_token_count is available. */
926
+ export const DEFAULT_CHARS_PER_TOKEN = 4;
927
+ &nbsp;
928
+ /** Target token count for context after discarding. */
929
+ export const CONTEXT_TARGET_TOKENS = 50000;
930
+ &nbsp;
931
+ /** Minimum token count — never discard below this. */
932
+ export const CONTEXT_FLOOR_TOKENS = 30000;
933
+ &nbsp;
934
+ function truncate(text: string, maxLen: number = PREVIEW_MAX_LENGTH): string {
935
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!text) <span class="cstat-no" title="statement not covered" >return '';</span>
936
+ const cleaned = text.replace(/\n/g, ' ').trim();
937
+ if (cleaned.length &lt;= maxLen) return cleaned;
938
+ return cleaned.slice(0, maxLen - 3) + '...';
939
+ }
940
+ &nbsp;
941
+ function buildActionPreview(action: AIAction): string {
942
+ switch (action.action_type) {
943
+ case 'create_file':
944
+ return `create_file: ${action.file_path || <span class="branch-1 cbranch-no" title="branch not covered" >''}</span>`;
945
+ <span class="branch-1 cbranch-no" title="branch not covered" > case 'overwrite_file':</span>
946
+ <span class="cstat-no" title="statement not covered" > return `overwrite_file: ${action.file_path || ''}`;</span>
947
+ case 'delete_file':
948
+ return `delete_file: ${action.file_path || <span class="branch-1 cbranch-no" title="branch not covered" >''}</span>`;
949
+ <span class="branch-3 cbranch-no" title="branch not covered" > case 'patch':</span>
950
+ <span class="cstat-no" title="statement not covered" > return `patch: ${action.file_path || ''}`;</span>
951
+ <span class="branch-4 cbranch-no" title="branch not covered" > case 'quick_edit':</span>
952
+ <span class="cstat-no" title="statement not covered" > return `quick_edit: ${action.file_path || ''}`;</span>
953
+ <span class="branch-5 cbranch-no" title="branch not covered" > case 'apply_diff':</span>
954
+ <span class="cstat-no" title="statement not covered" > return `apply_diff: ${action.file_path || ''}`;</span>
955
+ case 'run_command':
956
+ return `run_command: ${truncate(action.command_string || <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>}`;
957
+ case 'request_context':
958
+ return `request_context: ${truncate(action.files || <span class="branch-1 cbranch-no" title="branch not covered" >action.folders </span>|| <span class="branch-2 cbranch-no" title="branch not covered" >'')</span>}`;
959
+ case 'execute_code':
960
+ return `execute_code: ${truncate(action.command_string || <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>}`;
961
+ <span class="branch-9 cbranch-no" title="branch not covered" > case 'invoke_subagent':</span>
962
+ <span class="cstat-no" title="statement not covered" > return `invoke_subagent: ${truncate(action.arguments || '')}`;</span>
963
+ case 'list_sub_agents':
964
+ return 'list_sub_agents';
965
+ <span class="branch-11 cbranch-no" title="branch not covered" > case 'new_session':</span>
966
+ <span class="cstat-no" title="statement not covered" > return `new_session: ${truncate(action.handover_string || '')}`;</span>
967
+ case 'get_session_history':
968
+ return 'get_session_history';
969
+ case 'generate_title':
970
+ return 'generate_title';
971
+ <span class="branch-14 cbranch-no" title="branch not covered" > case 'ask_user':</span>
972
+ <span class="cstat-no" title="statement not covered" > return `ask_user: ${truncate(action.plain || '')}`;</span>
973
+ <span class="branch-15 cbranch-no" title="branch not covered" > case 'write_todo':</span>
974
+ <span class="cstat-no" title="statement not covered" > return `write_todo: ${action.file_path || ''}`;</span>
975
+ <span class="branch-16 cbranch-no" title="branch not covered" > case 'howto':</span>
976
+ <span class="cstat-no" title="statement not covered" > return 'howto';</span>
977
+ <span class="branch-17 cbranch-no" title="branch not covered" > case 'get_messages':</span>
978
+ <span class="cstat-no" title="statement not covered" > return 'get_messages';</span>
979
+ <span class="branch-18 cbranch-no" title="branch not covered" > case 'discard_messages':</span>
980
+ <span class="cstat-no" title="statement not covered" > return 'discard_messages';</span>
981
+ case 'final':
982
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (action.selections) {
983
+ <span class="cstat-no" title="statement not covered" > return `final: user selection`;</span>
984
+ }
985
+ return `final: ${truncate(action.plain || <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>}`;
986
+ default:
987
+ // Handle MCP tool names with double underscore (serverName__toolName)
988
+ if (action.action_type.includes('__')) {
989
+ return action.action_type;
990
+ }
991
+ <span class="cstat-no" title="statement not covered" > return `${action.action_type}: ${truncate(action.file_path || action.command_string || action.plain || '')}`;</span>
992
+ }
993
+ }
994
+ &nbsp;
995
+ /**
996
+ * Computes the character size of a compressed history turn as it would be
997
+ * serialized by LLM providers.
998
+ */
999
+ export function computeTurnCharSize(turn: LlmContent): number {
1000
+ let size = turn.parts.map((p) =&gt; p.text).join('').length;
1001
+ if (turn.thoughts) {
1002
+ size += turn.thoughts.length;
1003
+ }
1004
+ if (turn.tool_calls) {
1005
+ size += JSON.stringify(turn.tool_calls).length;
1006
+ }
1007
+ return size;
1008
+ }
1009
+ &nbsp;
1010
+ /**
1011
+ * Reconstructs chat history from SessionInputs, mirroring the logic in
1012
+ * chat.service.ts:getHistory(). Returns the history and a parallel array
1013
+ * mapping each turn index to the index of its source SessionInput.
1014
+ */
1015
+ export function buildHistory(inputs: SessionInput[]): {
1016
+ history: LlmContent[];
1017
+ turnToInputIndex: number[];
1018
+ } {
1019
+ const history: LlmContent[] = [];
1020
+ const turnToInputIndex: number[] = [];
1021
+ &nbsp;
1022
+ for (let inputIdx = 0; inputIdx &lt; inputs.length; inputIdx++) {
1023
+ const input = inputs[inputIdx];
1024
+ &nbsp;
1025
+ if (input.role === 'user' &amp;&amp; input.generated_context_string) {
1026
+ history.push({
1027
+ role: 'user',
1028
+ parts: [{ text: input.generated_context_string }],
1029
+ });
1030
+ turnToInputIndex.push(inputIdx);
1031
+ } else if (input.role === 'model') {
1032
+ const content: LlmContent = {
1033
+ role: 'model',
1034
+ parts: [{ text: input.raw_llm_response || '' }],
1035
+ };
1036
+ &nbsp;
1037
+ if (input.thoughts) {
1038
+ content.thoughts = input.thoughts;
1039
+ }
1040
+ &nbsp;
1041
+ if (input.tool_calls) {
1042
+ try {
1043
+ content.tool_calls = JSON.parse(input.tool_calls);
1044
+ } catch (_e) {
1045
+ // Skip malformed tool_calls
1046
+ }
1047
+ }
1048
+ &nbsp;
1049
+ history.push(content);
1050
+ turnToInputIndex.push(inputIdx);
1051
+ &nbsp;
1052
+ // Add tool result turns for each tool_call
1053
+ if (content.tool_calls &amp;&amp; content.tool_calls.length &gt; 0) {
1054
+ // Build map of tool_call_id -&gt; action for O(1) lookup
1055
+ const actionsByToolCallId = new Map&lt;string, AIAction&gt;();
1056
+ if (input.aiActions) {
1057
+ for (const action of input.aiActions) {
1058
+ if (action.tool_call_id) {
1059
+ actionsByToolCallId.set(action.tool_call_id, action);
1060
+ }
1061
+ }
1062
+ }
1063
+ &nbsp;
1064
+ for (const toolCall of content.tool_calls) {
1065
+ const action = actionsByToolCallId.get(toolCall.id);
1066
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!action) <span class="cstat-no" title="statement not covered" >continue;</span>
1067
+ &nbsp;
1068
+ const output = action.executionLogs?.[0]?.output || <span class="branch-1 cbranch-no" title="branch not covered" >'';</span>
1069
+ const errorMessage = action.executionLogs?.[0]?.error_message || '';
1070
+ &nbsp;
1071
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (!output &amp;&amp; <span class="branch-1 cbranch-no" title="branch not covered" >!errorMessage)</span> <span class="cstat-no" title="statement not covered" >continue;</span>
1072
+ &nbsp;
1073
+ let toolResult: string;
1074
+ if (output &amp;&amp; errorMessage) {
1075
+ toolResult = `${output}\n\nError: ${errorMessage}`;
1076
+ } else <span class="missing-if-branch" title="if path not taken" >I</span>if (errorMessage) {
1077
+ <span class="cstat-no" title="statement not covered" > toolResult = `Error: ${errorMessage}`;</span>
1078
+ } else {
1079
+ toolResult = output;
1080
+ }
1081
+ &nbsp;
1082
+ history.push({
1083
+ role: 'tool',
1084
+ tool_call_id: toolCall.id,
1085
+ tool_name: action.action_type,
1086
+ parts: [{ text: toolResult }],
1087
+ });
1088
+ turnToInputIndex.push(inputIdx);
1089
+ }
1090
+ }
1091
+ }
1092
+ }
1093
+ &nbsp;
1094
+ return { history, turnToInputIndex };
1095
+ }
1096
+ &nbsp;
1097
+ @Injectable()
1098
+ export class GetMessagesHandler implements ActionHandler {
1099
+ readonly toolName = 'get_messages';
1100
+ &nbsp;
1101
+ constructor(
1102
+ @InjectRepository(SessionInput)
1103
+ private readonly sessionInputsRepository: Repository&lt;SessionInput&gt;,
1104
+ private readonly historyCompressionService: HistoryCompressionService,
1105
+ ) {}
1106
+ &nbsp;
1107
+ getMetadata() {
1108
+ return {
1109
+ name: this.toolName,
1110
+ description:
1111
+ 'Get a summary of non-discarded messages in the current session, grouped by topic. Returns groups with labels, message counts, estimated tokens, and per-message details. Use this to identify completed work to discard from context.',
1112
+ arguments: [],
1113
+ };
1114
+ }
1115
+ &nbsp;
1116
+ getDefinition(): string {
1117
+ return `## get_messages
1118
+ &nbsp;
1119
+ Get a summary of non-discarded messages in the current session, organized into logical groups. Returns groups with topic labels, message counts, estimated tokens, and individual message details. Use this to identify messages to discard from the LLM context window.
1120
+ &nbsp;
1121
+ ### Parameters:
1122
+ No parameters required. Uses the current session context.
1123
+ &nbsp;
1124
+ ### Returns:
1125
+ JSON object with:
1126
+ - \`total_est_tokens\`: Sum of all estimated token counts across all messages
1127
+ - \`target_tokens\`: Target token count after discarding (${CONTEXT_TARGET_TOKENS}). Discard until near this value.
1128
+ - \`floor_tokens\`: Minimum token count (${CONTEXT_FLOOR_TOKENS}). **Never discard below this value.**
1129
+ - \`groups\`: Array of logical groups, each with:
1130
+ - \`label\`: Topic label derived from the first user message in the group (e.g., "Fix auth bug", "Explore database schema")
1131
+ - \`label_suffix\`: " (ongoing)" for the most recent group, empty otherwise
1132
+ - \`message_count\`: Number of messages in this group
1133
+ - \`est_tokens\`: Total estimated tokens for this group
1134
+ - \`messages\`: Array of message summaries, each with:
1135
+ - \`short_id\`: Compact ID (first 3 + last 2 chars of UUID, e.g. "a1b90") — use this with \`discard_messages\`
1136
+ - \`role\`: "user" or "model"
1137
+ - \`preview\`: brief description (user prompt text or tool name + args)
1138
+ - \`est_tokens\`: estimated token count for this message
1139
+ &nbsp;
1140
+ ### Token Estimation:
1141
+ Token counts are estimated by:
1142
+ 1. Reconstructing chat history from session inputs (same format sent to LLM)
1143
+ 2. Applying history compression (redacting older file contents)
1144
+ 3. Computing \`char_size\` from compressed history for each message
1145
+ 4. Deriving a \`char/token ratio\` from the last model input with a known \`input_token_count\` (cumulative tokens)
1146
+ 5. Using a fallback ratio of 4 chars/token if no token count is available
1147
+ 6. \`est_tokens = round(char_size / ratio)\`
1148
+ &nbsp;
1149
+ ### Example:
1150
+ \`\`\`typescript
1151
+ tool: get_messages
1152
+ args: {}
1153
+ \`\`\``;
1154
+ }
1155
+ &nbsp;
1156
+ async execute(
1157
+ _args: Record&lt;string, any&gt;,
1158
+ context: PlanExecutionContext,
1159
+ ): Promise&lt;ActionExecutionResult&gt; {
1160
+ try {
1161
+ const inputs = await this.sessionInputsRepository.find({
1162
+ where: { session: { id: context.session_id }, is_discarded: false },
1163
+ relations: ['aiActions', 'aiActions.executionLogs'],
1164
+ order: { sequence_number: 'ASC' },
1165
+ });
1166
+ &nbsp;
1167
+ // Build history and compress it (same as what the LLM actually receives)
1168
+ const { history, turnToInputIndex } = buildHistory(inputs);
1169
+ const compressedHistory =
1170
+ await this.historyCompressionService.compress(history);
1171
+ &nbsp;
1172
+ // Compute compressed char_size per SessionInput
1173
+ const compressedCharSizes = new Array&lt;number&gt;(inputs.length).fill(0);
1174
+ for (let i = 0; i &lt; compressedHistory.length; i++) {
1175
+ const turnCharSize = computeTurnCharSize(compressedHistory[i]);
1176
+ const inputIdx = turnToInputIndex[i];
1177
+ if (inputIdx &gt;= 0 &amp;&amp; inputIdx &lt; inputs.length) {
1178
+ compressedCharSizes[inputIdx] += turnCharSize;
1179
+ }
1180
+ }
1181
+ &nbsp;
1182
+ // Derive char/token ratio from last model input with input_token_count
1183
+ let ratio = DEFAULT_CHARS_PER_TOKEN;
1184
+ let ratioInputIndex = -1;
1185
+ for (let i = inputs.length - 1; i &gt;= 0; i--) {
1186
+ if (
1187
+ inputs[i].role === 'model' &amp;&amp;
1188
+ inputs[i].input_token_count != null &amp;&amp;
1189
+ inputs[i].input_token_count &gt; 0
1190
+ ) {
1191
+ ratioInputIndex = i;
1192
+ break;
1193
+ }
1194
+ }
1195
+ &nbsp;
1196
+ if (ratioInputIndex &gt;= 0) {
1197
+ // input_token_count is cumulative (total tokens of entire conversation)
1198
+ // Sum all compressed char_sizes up to and including that input
1199
+ let cumulativeChars = 0;
1200
+ for (let i = 0; i &lt;= ratioInputIndex; i++) {
1201
+ cumulativeChars += compressedCharSizes[i];
1202
+ }
1203
+ if (cumulativeChars &gt; 0) {
1204
+ ratio = cumulativeChars / inputs[ratioInputIndex].input_token_count!;
1205
+ }
1206
+ }
1207
+ &nbsp;
1208
+ const summaries = inputs.map((input, index) =&gt; {
1209
+ let preview: string;
1210
+ &nbsp;
1211
+ if (input.role === 'user') {
1212
+ preview = truncate(input.user_prompt || <span class="branch-1 cbranch-no" title="branch not covered" >'')</span>;
1213
+ } else if (input.aiActions &amp;&amp; input.aiActions.length &gt; 0) {
1214
+ preview = input.aiActions
1215
+ .sort((a, b) =&gt; a.order_of_execution - b.order_of_execution)
1216
+ .map((a) =&gt; buildActionPreview(a))
1217
+ .join(', ');
1218
+ <span class="missing-if-branch" title="if path not taken" >I</span>if (preview.length &gt; PREVIEW_MAX_LENGTH) {
1219
+ <span class="cstat-no" title="statement not covered" > preview = preview.slice(0, PREVIEW_MAX_LENGTH - 3) + '...';</span>
1220
+ }
1221
+ } else if (input.error_message) {
1222
+ preview = `error: ${truncate(input.error_message)}`;
1223
+ } else if (input.llm_response_explanation) {
1224
+ preview = truncate(input.llm_response_explanation);
1225
+ } else {
1226
+ preview = '(empty response)';
1227
+ }
1228
+ &nbsp;
1229
+ const estTokens =
1230
+ compressedCharSizes[index] &gt; 0
1231
+ ? Math.round(compressedCharSizes[index] / ratio)
1232
+ : 0;
1233
+ &nbsp;
1234
+ return {
1235
+ short_id: toShortId(input.id),
1236
+ role: input.role || <span class="branch-1 cbranch-no" title="branch not covered" >'user',</span>
1237
+ preview,
1238
+ est_tokens: estTokens,
1239
+ };
1240
+ });
1241
+ &nbsp;
1242
+ // Group messages by topic (user message starts a new group)
1243
+ const groups: Array&lt;{
1244
+ label: string;
1245
+ label_suffix: string;
1246
+ message_count: number;
1247
+ est_tokens: number;
1248
+ messages: typeof summaries;
1249
+ }&gt; = [];
1250
+ &nbsp;
1251
+ let currentGroup: (typeof summaries)[number][] = [];
1252
+ let currentLabel = '';
1253
+ let currentGroupTokens = 0;
1254
+ &nbsp;
1255
+ for (let i = 0; i &lt; summaries.length; i++) {
1256
+ const summary = summaries[i];
1257
+ &nbsp;
1258
+ if (summary.role === 'user' &amp;&amp; currentGroup.length &gt; 0) {
1259
+ // Close current group
1260
+ groups.push({
1261
+ label: currentLabel,
1262
+ label_suffix: '',
1263
+ message_count: currentGroup.length,
1264
+ est_tokens: currentGroupTokens,
1265
+ messages: currentGroup,
1266
+ });
1267
+ currentGroup = [];
1268
+ currentGroupTokens = 0;
1269
+ }
1270
+ &nbsp;
1271
+ if (summary.role === 'user' || currentGroup.length === 0) {
1272
+ currentLabel = summary.preview || <span class="branch-1 cbranch-no" title="branch not covered" >'User message';</span>
1273
+ }
1274
+ &nbsp;
1275
+ currentGroup.push(summary);
1276
+ currentGroupTokens += summary.est_tokens;
1277
+ }
1278
+ &nbsp;
1279
+ // Push last group
1280
+ if (currentGroup.length &gt; 0) {
1281
+ // Mark the most recent group as ongoing
1282
+ const isOngoing = true; // last group is always the current one
1283
+ groups.push({
1284
+ label: currentLabel,
1285
+ label_suffix: isOngoing ? ' (ongoing)' : <span class="branch-1 cbranch-no" title="branch not covered" >'',</span>
1286
+ message_count: currentGroup.length,
1287
+ est_tokens: currentGroupTokens,
1288
+ messages: currentGroup,
1289
+ });
1290
+ }
1291
+ &nbsp;
1292
+ // For all but the last group, label_suffix is empty
1293
+ for (let i = 0; i &lt; groups.length - 1; i++) {
1294
+ groups[i].label_suffix = '';
1295
+ }
1296
+ &nbsp;
1297
+ const totalEstTokens = summaries.reduce(
1298
+ (sum, s) =&gt; sum + s.est_tokens,
1299
+ 0,
1300
+ );
1301
+ &nbsp;
1302
+ return {
1303
+ status: 'SUCCESS',
1304
+ summary: `${summaries.length} messages in ${groups.length} groups, ~${totalEstTokens} est tokens`,
1305
+ execution_log: {
1306
+ output: JSON.stringify(
1307
+ {
1308
+ total_est_tokens: totalEstTokens,
1309
+ target_tokens: CONTEXT_TARGET_TOKENS,
1310
+ floor_tokens: CONTEXT_FLOOR_TOKENS,
1311
+ groups,
1312
+ },
1313
+ null,
1314
+ 2,
1315
+ ),
1316
+ },
1317
+ persisted_args: {},
1318
+ };
1319
+ } catch (error) {
1320
+ return {
1321
+ status: 'FAILURE',
1322
+ summary: 'Failed to get messages',
1323
+ error_message: error.message,
1324
+ execution_log: {
1325
+ output: '',
1326
+ error_message: error.message,
1327
+ },
1328
+ };
1329
+ }
1330
+ }
1331
+ }
1332
+ &nbsp;</pre></td></tr></table></pre>
1333
+
1334
+ <div class='push'></div><!-- for sticky footer -->
1335
+ </div><!-- /wrapper -->
1336
+ <div class='footer quiet pad2 space-top1 center small'>
1337
+ Code coverage generated by
1338
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1339
+ at 2026-05-09T01:03:45.353Z
1340
+ </div>
1341
+ <script src="../../../prettify.js"></script>
1342
+ <script>
1343
+ window.onload = function () {
1344
+ prettyPrint();
1345
+ };
1346
+ </script>
1347
+ <script src="../../../sorter.js"></script>
1348
+ <script src="../../../block-navigation.js"></script>
1349
+ </body>
1350
+ </html>
1351
+