repoburg 1.3.127 → 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 (470) hide show
  1. package/backend/.env +2 -2
  2. package/backend/coverage/clover.xml +12003 -0
  3. package/backend/coverage/coverage-final.json +313 -0
  4. package/backend/coverage/lcov-report/base.css +224 -0
  5. package/backend/coverage/lcov-report/block-navigation.js +87 -0
  6. package/backend/coverage/lcov-report/favicon.png +0 -0
  7. package/backend/coverage/lcov-report/index.html +1301 -0
  8. package/backend/coverage/lcov-report/packages/gemini-core/examples/index.html +116 -0
  9. package/backend/coverage/lcov-report/packages/gemini-core/examples/simple.ts.html +445 -0
  10. package/backend/coverage/lcov-report/packages/gemini-core/index.html +116 -0
  11. package/backend/coverage/lcov-report/packages/gemini-core/index.ts.html +127 -0
  12. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/codeAssist.ts.html +193 -0
  13. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/converter.ts.html +832 -0
  14. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/index.html +206 -0
  15. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth-credential-storage.ts.html +469 -0
  16. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/oauth2.ts.html +1705 -0
  17. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/server.ts.html +790 -0
  18. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/setup.ts.html +454 -0
  19. package/backend/coverage/lcov-report/packages/gemini-core/src/code_assist/types.ts.html +685 -0
  20. package/backend/coverage/lcov-report/packages/gemini-core/src/config/config.ts.html +307 -0
  21. package/backend/coverage/lcov-report/packages/gemini-core/src/config/index.html +146 -0
  22. package/backend/coverage/lcov-report/packages/gemini-core/src/config/models.ts.html +151 -0
  23. package/backend/coverage/lcov-report/packages/gemini-core/src/config/storage.ts.html +172 -0
  24. package/backend/coverage/lcov-report/packages/gemini-core/src/core/contentGenerator.ts.html +490 -0
  25. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiChat.ts.html +1237 -0
  26. package/backend/coverage/lcov-report/packages/gemini-core/src/core/geminiRequest.ts.html +139 -0
  27. package/backend/coverage/lcov-report/packages/gemini-core/src/core/index.html +176 -0
  28. package/backend/coverage/lcov-report/packages/gemini-core/src/core/prompts.ts.html +409 -0
  29. package/backend/coverage/lcov-report/packages/gemini-core/src/core/tokenLimits.ts.html +181 -0
  30. package/backend/coverage/lcov-report/packages/gemini-core/src/index.html +116 -0
  31. package/backend/coverage/lcov-report/packages/gemini-core/src/index.ts.html +187 -0
  32. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/base-token-storage.ts.html +229 -0
  33. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/file-token-storage.ts.html +634 -0
  34. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/hybrid-token-storage.ts.html +373 -0
  35. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.html +191 -0
  36. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/index.ts.html +124 -0
  37. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/keychain-token-storage.ts.html +835 -0
  38. package/backend/coverage/lcov-report/packages/gemini-core/src/mcp/token-storage/types.ts.html +211 -0
  39. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/errors.ts.html +421 -0
  40. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/index.html +191 -0
  41. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/partUtils.ts.html +592 -0
  42. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/quotaErrorDetection.ts.html +388 -0
  43. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/retry.ts.html +877 -0
  44. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/session.ts.html +112 -0
  45. package/backend/coverage/lcov-report/packages/gemini-core/src/utils/userAccountManager.ts.html +502 -0
  46. package/backend/coverage/lcov-report/packages/tokenpatch/index.html +161 -0
  47. package/backend/coverage/lcov-report/packages/tokenpatch/index.ts.html +415 -0
  48. package/backend/coverage/lcov-report/packages/tokenpatch/parser.ts.html +139 -0
  49. package/backend/coverage/lcov-report/packages/tokenpatch/patcher.ts.html +1249 -0
  50. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/index.html +131 -0
  51. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tiktoken-tokenizer.ts.html +187 -0
  52. package/backend/coverage/lcov-report/packages/tokenpatch/strategies/tree-sitter-tokenizer.ts.html +193 -0
  53. package/backend/coverage/lcov-report/packages/tokenpatch/tokens.ts.html +178 -0
  54. package/backend/coverage/lcov-report/prettify.css +1 -0
  55. package/backend/coverage/lcov-report/prettify.js +2 -0
  56. package/backend/coverage/lcov-report/sort-arrow-sprite.png +0 -0
  57. package/backend/coverage/lcov-report/sorter.js +210 -0
  58. package/backend/coverage/lcov-report/src/ai-actions/ai-action-batch.service.ts.html +1549 -0
  59. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.controller.ts.html +904 -0
  60. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.module.ts.html +175 -0
  61. package/backend/coverage/lcov-report/src/ai-actions/ai-actions.service.ts.html +1534 -0
  62. package/backend/coverage/lcov-report/src/ai-actions/index.html +161 -0
  63. package/backend/coverage/lcov-report/src/app.controller.ts.html +151 -0
  64. package/backend/coverage/lcov-report/src/app.module.ts.html +451 -0
  65. package/backend/coverage/lcov-report/src/app.service.ts.html +163 -0
  66. package/backend/coverage/lcov-report/src/application-state/application-state.controller.ts.html +1609 -0
  67. package/backend/coverage/lcov-report/src/application-state/application-state.module.ts.html +136 -0
  68. package/backend/coverage/lcov-report/src/application-state/application-state.service.ts.html +2281 -0
  69. package/backend/coverage/lcov-report/src/application-state/dto/index.html +416 -0
  70. package/backend/coverage/lcov-report/src/application-state/dto/set-alibaba-config.dto.ts.html +109 -0
  71. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-context-fetch-enabled.dto.ts.html +118 -0
  72. package/backend/coverage/lcov-report/src/application-state/dto/set-auto-send-to-ai-studio-enabled.dto.ts.html +109 -0
  73. package/backend/coverage/lcov-report/src/application-state/dto/set-context-token-limit.dto.ts.html +124 -0
  74. package/backend/coverage/lcov-report/src/application-state/dto/set-execution-strategy.dto.ts.html +121 -0
  75. package/backend/coverage/lcov-report/src/application-state/dto/set-followup-token-limit.dto.ts.html +124 -0
  76. package/backend/coverage/lcov-report/src/application-state/dto/set-history-compression-enabled.dto.ts.html +115 -0
  77. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-enabled.dto.ts.html +115 -0
  78. package/backend/coverage/lcov-report/src/application-state/dto/set-llm-retry-max-attempts.dto.ts.html +127 -0
  79. package/backend/coverage/lcov-report/src/application-state/dto/set-manual-llm-enabled.dto.ts.html +118 -0
  80. package/backend/coverage/lcov-report/src/application-state/dto/set-ollama-config.dto.ts.html +109 -0
  81. package/backend/coverage/lcov-report/src/application-state/dto/set-openai-config.dto.ts.html +139 -0
  82. package/backend/coverage/lcov-report/src/application-state/dto/set-openrouter-config.dto.ts.html +109 -0
  83. package/backend/coverage/lcov-report/src/application-state/dto/set-streaming-enabled.dto.ts.html +109 -0
  84. package/backend/coverage/lcov-report/src/application-state/dto/set-syntax-validation-enabled.dto.ts.html +118 -0
  85. package/backend/coverage/lcov-report/src/application-state/dto/set-theme.dto.ts.html +124 -0
  86. package/backend/coverage/lcov-report/src/application-state/dto/set-tools-enabled.dto.ts.html +118 -0
  87. package/backend/coverage/lcov-report/src/application-state/dto/set-websocket-enabled.dto.ts.html +109 -0
  88. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode-message.dto.ts.html +124 -0
  89. package/backend/coverage/lcov-report/src/application-state/dto/set-yolo-mode.dto.ts.html +118 -0
  90. package/backend/coverage/lcov-report/src/application-state/dto/set-zai-config.dto.ts.html +109 -0
  91. package/backend/coverage/lcov-report/src/application-state/index.html +146 -0
  92. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.service.ts.html +1297 -0
  93. package/backend/coverage/lcov-report/src/common/cache/cache-invalidation.subscriber.ts.html +712 -0
  94. package/backend/coverage/lcov-report/src/common/cache/etag-cache.service.ts.html +379 -0
  95. package/backend/coverage/lcov-report/src/common/cache/index.html +146 -0
  96. package/backend/coverage/lcov-report/src/common/common.module.ts.html +121 -0
  97. package/backend/coverage/lcov-report/src/common/index.html +116 -0
  98. package/backend/coverage/lcov-report/src/common/interceptors/etag-cache.interceptor.ts.html +337 -0
  99. package/backend/coverage/lcov-report/src/common/interceptors/index.html +116 -0
  100. package/backend/coverage/lcov-report/src/common/middleware/cache.middleware.ts.html +265 -0
  101. package/backend/coverage/lcov-report/src/common/middleware/index.html +116 -0
  102. package/backend/coverage/lcov-report/src/context-generation/context-generation.module.ts.html +118 -0
  103. package/backend/coverage/lcov-report/src/context-generation/context-generation.service.ts.html +1501 -0
  104. package/backend/coverage/lcov-report/src/context-generation/index.html +131 -0
  105. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.controller.ts.html +427 -0
  106. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.module.ts.html +142 -0
  107. package/backend/coverage/lcov-report/src/context-snippets/context-snippets.service.ts.html +442 -0
  108. package/backend/coverage/lcov-report/src/context-snippets/dto/context-snippet.dto.ts.html +211 -0
  109. package/backend/coverage/lcov-report/src/context-snippets/dto/index.html +116 -0
  110. package/backend/coverage/lcov-report/src/context-snippets/index.html +146 -0
  111. package/backend/coverage/lcov-report/src/context-templates/context-templates.controller.ts.html +724 -0
  112. package/backend/coverage/lcov-report/src/context-templates/context-templates.module.ts.html +142 -0
  113. package/backend/coverage/lcov-report/src/context-templates/context-templates.service.ts.html +1015 -0
  114. package/backend/coverage/lcov-report/src/context-templates/dto/context-template.dto.ts.html +511 -0
  115. package/backend/coverage/lcov-report/src/context-templates/dto/index.html +116 -0
  116. package/backend/coverage/lcov-report/src/context-templates/index.html +146 -0
  117. package/backend/coverage/lcov-report/src/core-entities/ai-action.entity.ts.html +613 -0
  118. package/backend/coverage/lcov-report/src/core-entities/application-state.entity.ts.html +124 -0
  119. package/backend/coverage/lcov-report/src/core-entities/base.entity.ts.html +211 -0
  120. package/backend/coverage/lcov-report/src/core-entities/context-snippet.entity.ts.html +190 -0
  121. package/backend/coverage/lcov-report/src/core-entities/context-template.entity.ts.html +439 -0
  122. package/backend/coverage/lcov-report/src/core-entities/custom-snippet.entity.ts.html +205 -0
  123. package/backend/coverage/lcov-report/src/core-entities/custom-variable.entity.ts.html +241 -0
  124. package/backend/coverage/lcov-report/src/core-entities/enums.ts.html +553 -0
  125. package/backend/coverage/lcov-report/src/core-entities/execution-log.entity.ts.html +208 -0
  126. package/backend/coverage/lcov-report/src/core-entities/index.html +371 -0
  127. package/backend/coverage/lcov-report/src/core-entities/index.ts.html +136 -0
  128. package/backend/coverage/lcov-report/src/core-entities/llm-call-log.entity.ts.html +388 -0
  129. package/backend/coverage/lcov-report/src/core-entities/mcp-config.entity.ts.html +256 -0
  130. package/backend/coverage/lcov-report/src/core-entities/mcp-tool.entity.ts.html +256 -0
  131. package/backend/coverage/lcov-report/src/core-entities/project.entity.ts.html +181 -0
  132. package/backend/coverage/lcov-report/src/core-entities/session-input.entity.ts.html +745 -0
  133. package/backend/coverage/lcov-report/src/core-entities/session.entity.ts.html +688 -0
  134. package/backend/coverage/lcov-report/src/core-entities/system-prompt.entity.ts.html +349 -0
  135. package/backend/coverage/lcov-report/src/core-entities/tool-hook.entity.ts.html +235 -0
  136. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.controller.ts.html +442 -0
  137. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.module.ts.html +124 -0
  138. package/backend/coverage/lcov-report/src/custom-snippets/custom-snippets.service.ts.html +304 -0
  139. package/backend/coverage/lcov-report/src/custom-snippets/dto/custom-snippet.dto.ts.html +205 -0
  140. package/backend/coverage/lcov-report/src/custom-snippets/dto/index.html +116 -0
  141. package/backend/coverage/lcov-report/src/custom-snippets/index.html +146 -0
  142. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.controller.ts.html +463 -0
  143. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.module.ts.html +124 -0
  144. package/backend/coverage/lcov-report/src/custom-variables/custom-variables.service.ts.html +310 -0
  145. package/backend/coverage/lcov-report/src/custom-variables/dto/custom-variable.dto.ts.html +244 -0
  146. package/backend/coverage/lcov-report/src/custom-variables/dto/index.html +116 -0
  147. package/backend/coverage/lcov-report/src/custom-variables/index.html +146 -0
  148. package/backend/coverage/lcov-report/src/events/events.gateway.ts.html +295 -0
  149. package/backend/coverage/lcov-report/src/events/events.module.ts.html +109 -0
  150. package/backend/coverage/lcov-report/src/events/index.html +146 -0
  151. package/backend/coverage/lcov-report/src/events/websocket.events.ts.html +466 -0
  152. package/backend/coverage/lcov-report/src/execution-logs/dto/execution-log.dto.ts.html +130 -0
  153. package/backend/coverage/lcov-report/src/execution-logs/dto/index.html +116 -0
  154. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.controller.ts.html +130 -0
  155. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.module.ts.html +124 -0
  156. package/backend/coverage/lcov-report/src/execution-logs/execution-logs.service.ts.html +238 -0
  157. package/backend/coverage/lcov-report/src/execution-logs/index.html +146 -0
  158. package/backend/coverage/lcov-report/src/gemini/gemini-llm.provider.ts.html +553 -0
  159. package/backend/coverage/lcov-report/src/gemini/gemini.module.ts.html +109 -0
  160. package/backend/coverage/lcov-report/src/gemini/index.html +131 -0
  161. package/backend/coverage/lcov-report/src/global-config/dto/index.html +116 -0
  162. package/backend/coverage/lcov-report/src/global-config/dto/update-global-config.dto.ts.html +367 -0
  163. package/backend/coverage/lcov-report/src/global-config/global-config.controller.ts.html +220 -0
  164. package/backend/coverage/lcov-report/src/global-config/global-config.module.ts.html +115 -0
  165. package/backend/coverage/lcov-report/src/global-config/global-config.service.ts.html +397 -0
  166. package/backend/coverage/lcov-report/src/global-config/index.html +146 -0
  167. package/backend/coverage/lcov-report/src/http-exception.filter.ts.html +340 -0
  168. package/backend/coverage/lcov-report/src/index.html +206 -0
  169. package/backend/coverage/lcov-report/src/interactive-chat/chat.module.ts.html +187 -0
  170. package/backend/coverage/lcov-report/src/interactive-chat/chat.service.ts.html +1825 -0
  171. package/backend/coverage/lcov-report/src/interactive-chat/index.html +146 -0
  172. package/backend/coverage/lcov-report/src/interactive-chat/streaming.controller.ts.html +343 -0
  173. package/backend/coverage/lcov-report/src/llm-call-logs/dto/index.html +116 -0
  174. package/backend/coverage/lcov-report/src/llm-call-logs/dto/llm-call-log.dto.ts.html +214 -0
  175. package/backend/coverage/lcov-report/src/llm-call-logs/index.html +146 -0
  176. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.controller.ts.html +634 -0
  177. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.module.ts.html +124 -0
  178. package/backend/coverage/lcov-report/src/llm-call-logs/llm-call-logs.service.ts.html +643 -0
  179. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/apply-diff.handler.ts.html +1090 -0
  180. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/ask-user.handler.ts.html +433 -0
  181. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/create-file.handler.ts.html +757 -0
  182. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/delete-file.handler.ts.html +586 -0
  183. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/discard-messages.handler.ts.html +1153 -0
  184. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/apply-diff.args.dto.ts.html +124 -0
  185. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/ask-user.args.dto.ts.html +103 -0
  186. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/create-file.args.dto.ts.html +124 -0
  187. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/delete-file.args.dto.ts.html +106 -0
  188. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/execute-code.args.dto.ts.html +106 -0
  189. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/final.args.dto.ts.html +118 -0
  190. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/generate-title.args.dto.ts.html +190 -0
  191. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/get-session-history.args.dto.ts.html +196 -0
  192. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/howto.args.dto.ts.html +91 -0
  193. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/index.html +356 -0
  194. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/new-session.args.dto.ts.html +106 -0
  195. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/overwrite-file.args.dto.ts.html +124 -0
  196. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/patch.args.dto.ts.html +124 -0
  197. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/quick-edit.args.dto.ts.html +214 -0
  198. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/request-context.args.dto.ts.html +202 -0
  199. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/run-command.args.dto.ts.html +151 -0
  200. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/sanitizer.decorator.ts.html +181 -0
  201. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/dto/write-todo.args.dto.ts.html +130 -0
  202. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/execute-code.handler.ts.html +631 -0
  203. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/final.handler.ts.html +469 -0
  204. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/generate-title.handler.ts.html +448 -0
  205. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-messages.handler.ts.html +1351 -0
  206. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/get-session-history.handler.ts.html +868 -0
  207. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/howto.handler.ts.html +481 -0
  208. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/index.html +416 -0
  209. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/invoke-subagent.handler.ts.html +580 -0
  210. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/list-sub-agents.handler.ts.html +352 -0
  211. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/context-aware.matcher.ts.html +1054 -0
  212. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/exact.matcher.ts.html +331 -0
  213. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/hybrid.matcher.ts.html +403 -0
  214. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.html +176 -0
  215. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/index.ts.html +100 -0
  216. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/matchers/normalized.matcher.ts.html +724 -0
  217. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/mcp-tool-action.handler.ts.html +358 -0
  218. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/new-session.handler.ts.html +379 -0
  219. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/overwrite-file.handler.ts.html +838 -0
  220. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/patch.handler.ts.html +1702 -0
  221. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/quick-edit.handler.ts.html +1459 -0
  222. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/request-context.handler.ts.html +679 -0
  223. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/run-command.handler.ts.html +964 -0
  224. package/backend/coverage/lcov-report/src/llm-orchestration/action-handlers/write-todo.handler.ts.html +625 -0
  225. package/backend/coverage/lcov-report/src/llm-orchestration/errors/handler-validation.error.ts.html +103 -0
  226. package/backend/coverage/lcov-report/src/llm-orchestration/errors/index.html +116 -0
  227. package/backend/coverage/lcov-report/src/llm-orchestration/history-compression.service.ts.html +1645 -0
  228. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/follow-up-post-execution.hook.ts.html +238 -0
  229. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/frontend-notification.hook.ts.html +181 -0
  230. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/index.html +161 -0
  231. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/invalid-tool-feedback.hook.ts.html +313 -0
  232. package/backend/coverage/lcov-report/src/llm-orchestration/hooks/yolo-mode-post-execution.hook.ts.html +466 -0
  233. package/backend/coverage/lcov-report/src/llm-orchestration/index.html +176 -0
  234. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.interfaces.ts.html +319 -0
  235. package/backend/coverage/lcov-report/src/llm-orchestration/llm-orchestration.module.ts.html +706 -0
  236. package/backend/coverage/lcov-report/src/llm-orchestration/llm-turn-processor.service.ts.html +1150 -0
  237. package/backend/coverage/lcov-report/src/llm-orchestration/parser/index.html +131 -0
  238. package/backend/coverage/lcov-report/src/llm-orchestration/parser/llm-output-parser.service.ts.html +658 -0
  239. package/backend/coverage/lcov-report/src/llm-orchestration/parser/parsing.constants.ts.html +127 -0
  240. package/backend/coverage/lcov-report/src/llm-orchestration/tool-schema.service.ts.html +547 -0
  241. package/backend/coverage/lcov-report/src/llm-provider/alibaba-llm.provider.ts.html +1681 -0
  242. package/backend/coverage/lcov-report/src/llm-provider/index.html +236 -0
  243. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.controller.ts.html +187 -0
  244. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.interface.ts.html +361 -0
  245. package/backend/coverage/lcov-report/src/llm-provider/llm-provider.module.ts.html +175 -0
  246. package/backend/coverage/lcov-report/src/llm-provider/ollama-llm.provider.ts.html +1780 -0
  247. package/backend/coverage/lcov-report/src/llm-provider/openai-llm.provider.ts.html +1867 -0
  248. package/backend/coverage/lcov-report/src/llm-provider/openrouter-llm.provider.ts.html +1891 -0
  249. package/backend/coverage/lcov-report/src/llm-provider/proxy-llm.provider.ts.html +304 -0
  250. package/backend/coverage/lcov-report/src/llm-provider/zai-llm.provider.ts.html +1666 -0
  251. package/backend/coverage/lcov-report/src/llm-responses/dto/index.html +131 -0
  252. package/backend/coverage/lcov-report/src/llm-responses/dto/submit-llm-response.dto.ts.html +436 -0
  253. package/backend/coverage/lcov-report/src/llm-responses/dto/sync-conversation.dto.ts.html +319 -0
  254. package/backend/coverage/lcov-report/src/llm-responses/index.html +146 -0
  255. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.controller.ts.html +283 -0
  256. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.module.ts.html +184 -0
  257. package/backend/coverage/lcov-report/src/llm-responses/llm-responses.service.ts.html +1474 -0
  258. package/backend/coverage/lcov-report/src/main.ts.html +463 -0
  259. package/backend/coverage/lcov-report/src/mcp/dto/batch-update-mcp-tools.dto.ts.html +145 -0
  260. package/backend/coverage/lcov-report/src/mcp/dto/create-mcp-config.dto.ts.html +127 -0
  261. package/backend/coverage/lcov-report/src/mcp/dto/index.html +146 -0
  262. package/backend/coverage/lcov-report/src/mcp/dto/update-mcp-config.dto.ts.html +112 -0
  263. package/backend/coverage/lcov-report/src/mcp/index.html +146 -0
  264. package/backend/coverage/lcov-report/src/mcp/mcp.controller.ts.html +340 -0
  265. package/backend/coverage/lcov-report/src/mcp/mcp.module.ts.html +124 -0
  266. package/backend/coverage/lcov-report/src/mcp/mcp.service.ts.html +1345 -0
  267. package/backend/coverage/lcov-report/src/message-bus/dto/index.html +116 -0
  268. package/backend/coverage/lcov-report/src/message-bus/dto/submit-message.dto.ts.html +109 -0
  269. package/backend/coverage/lcov-report/src/message-bus/index.html +146 -0
  270. package/backend/coverage/lcov-report/src/message-bus/message-bus.controller.ts.html +148 -0
  271. package/backend/coverage/lcov-report/src/message-bus/message-bus.module.ts.html +115 -0
  272. package/backend/coverage/lcov-report/src/message-bus/message-bus.service.ts.html +151 -0
  273. package/backend/coverage/lcov-report/src/projects/dto/index.html +116 -0
  274. package/backend/coverage/lcov-report/src/projects/dto/project.dto.ts.html +196 -0
  275. package/backend/coverage/lcov-report/src/projects/index.html +146 -0
  276. package/backend/coverage/lcov-report/src/projects/projects.controller.ts.html +322 -0
  277. package/backend/coverage/lcov-report/src/projects/projects.module.ts.html +124 -0
  278. package/backend/coverage/lcov-report/src/projects/projects.service.ts.html +235 -0
  279. package/backend/coverage/lcov-report/src/seeding/context-snippet-seeding.service.ts.html +280 -0
  280. package/backend/coverage/lcov-report/src/seeding/context-template-seeding.service.ts.html +439 -0
  281. package/backend/coverage/lcov-report/src/seeding/custom-snippet-seeding.service.ts.html +271 -0
  282. package/backend/coverage/lcov-report/src/seeding/custom-variable-seeding.service.ts.html +271 -0
  283. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/compress.ts.html +172 -0
  284. package/backend/coverage/lcov-report/src/seeding/data/context-snippets/index.html +116 -0
  285. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-followup_ad-hoc-focused-context.ts.html +157 -0
  286. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_condensed-project-context.ts.html +148 -0
  287. package/backend/coverage/lcov-report/src/seeding/data/context-templates/default-initial_full-project-context.ts.html +151 -0
  288. package/backend/coverage/lcov-report/src/seeding/data/context-templates/index.html +161 -0
  289. package/backend/coverage/lcov-report/src/seeding/data/context-templates/open-pr-command.ts.html +247 -0
  290. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/default_rglob.ts.html +94 -0
  291. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-for.ts.html +100 -0
  292. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-if.ts.html +97 -0
  293. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/eta-ifelse.ts.html +100 -0
  294. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/everest-playwright-auth.ts.html +304 -0
  295. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/git-diff.ts.html +94 -0
  296. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/index.html +341 -0
  297. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-mcp.ts.html +100 -0
  298. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/it-tools.ts.html +97 -0
  299. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-exclude.ts.html +94 -0
  300. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search-glob.ts.html +94 -0
  301. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/rg-search.ts.html +94 -0
  302. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/run-command.ts.html +94 -0
  303. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/tree.ts.html +94 -0
  304. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-adhoc-incl.ts.html +100 -0
  305. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-cmd-output-incl.ts.html +94 -0
  306. package/backend/coverage/lcov-report/src/seeding/data/custom-snippets/usr-input-incl.ts.html +94 -0
  307. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-auto-execute-code.ts.html +94 -0
  308. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/default-plan-mode.ts.html +97 -0
  309. package/backend/coverage/lcov-report/src/seeding/data/custom-variables/index.html +131 -0
  310. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/default-configs.ts.html +121 -0
  311. package/backend/coverage/lcov-report/src/seeding/data/mcp-configs/index.html +116 -0
  312. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/browser-use.ts.html +115 -0
  313. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/explore-codebase.ts.html +136 -0
  314. package/backend/coverage/lcov-report/src/seeding/data/sub-agents/index.html +131 -0
  315. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/browser-use-agent.ts.html +190 -0
  316. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/default_native_tool_agent.ts.html +421 -0
  317. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/explore-codebase-agent.ts.html +265 -0
  318. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/index.html +161 -0
  319. package/backend/coverage/lcov-report/src/seeding/data/system-prompts/master-agent.ts.html +388 -0
  320. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/eslint-hook.ts.html +265 -0
  321. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/example-hook.ts.html +274 -0
  322. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/index.html +146 -0
  323. package/backend/coverage/lcov-report/src/seeding/data/tool-hooks/readme.ts.html +250 -0
  324. package/backend/coverage/lcov-report/src/seeding/index.html +236 -0
  325. package/backend/coverage/lcov-report/src/seeding/mcp-config-seeding.service.ts.html +193 -0
  326. package/backend/coverage/lcov-report/src/seeding/seeding.module.ts.html +211 -0
  327. package/backend/coverage/lcov-report/src/seeding/seeding.service.ts.html +187 -0
  328. package/backend/coverage/lcov-report/src/seeding/sub-agent-seeding.service.ts.html +742 -0
  329. package/backend/coverage/lcov-report/src/seeding/system-prompt-seeding.service.ts.html +397 -0
  330. package/backend/coverage/lcov-report/src/session-followup/index.html +131 -0
  331. package/backend/coverage/lcov-report/src/session-followup/session-followup.module.ts.html +130 -0
  332. package/backend/coverage/lcov-report/src/session-followup/session-followup.service.ts.html +718 -0
  333. package/backend/coverage/lcov-report/src/session-inputs/dto/index.html +116 -0
  334. package/backend/coverage/lcov-report/src/session-inputs/dto/session-input.dto.ts.html +577 -0
  335. package/backend/coverage/lcov-report/src/session-inputs/index.html +176 -0
  336. package/backend/coverage/lcov-report/src/session-inputs/session-input-context.service.ts.html +832 -0
  337. package/backend/coverage/lcov-report/src/session-inputs/session-input.subscriber.ts.html +220 -0
  338. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.controller.ts.html +685 -0
  339. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.module.ts.html +229 -0
  340. package/backend/coverage/lcov-report/src/session-inputs/session-inputs.service.ts.html +1981 -0
  341. package/backend/coverage/lcov-report/src/session-transfer/index.html +131 -0
  342. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.module.ts.html +160 -0
  343. package/backend/coverage/lcov-report/src/session-transfer/session-transfer.service.ts.html +883 -0
  344. package/backend/coverage/lcov-report/src/sessions/dto/index.html +116 -0
  345. package/backend/coverage/lcov-report/src/sessions/dto/session.dto.ts.html +769 -0
  346. package/backend/coverage/lcov-report/src/sessions/index.html +146 -0
  347. package/backend/coverage/lcov-report/src/sessions/sessions.controller.ts.html +1306 -0
  348. package/backend/coverage/lcov-report/src/sessions/sessions.module.ts.html +220 -0
  349. package/backend/coverage/lcov-report/src/sessions/sessions.service.ts.html +2797 -0
  350. package/backend/coverage/lcov-report/src/sub-agents/dto/create-sub-agent.dto.ts.html +355 -0
  351. package/backend/coverage/lcov-report/src/sub-agents/dto/index.html +131 -0
  352. package/backend/coverage/lcov-report/src/sub-agents/dto/update-sub-agent.dto.ts.html +295 -0
  353. package/backend/coverage/lcov-report/src/sub-agents/index.html +221 -0
  354. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-run.entity.ts.html +463 -0
  355. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runner.service.ts.html +2428 -0
  356. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.controller.ts.html +580 -0
  357. package/backend/coverage/lcov-report/src/sub-agents/sub-agent-runs.service.ts.html +550 -0
  358. package/backend/coverage/lcov-report/src/sub-agents/sub-agent.entity.ts.html +475 -0
  359. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.controller.ts.html +373 -0
  360. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.module.ts.html +205 -0
  361. package/backend/coverage/lcov-report/src/sub-agents/sub-agents.service.ts.html +619 -0
  362. package/backend/coverage/lcov-report/src/syntax-validation/index.html +131 -0
  363. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.module.ts.html +109 -0
  364. package/backend/coverage/lcov-report/src/syntax-validation/syntax-validation.service.ts.html +724 -0
  365. package/backend/coverage/lcov-report/src/system-prompts/dto/index.html +176 -0
  366. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-mcp-tools.dto.ts.html +157 -0
  367. package/backend/coverage/lcov-report/src/system-prompts/dto/set-enabled-tools.dto.ts.html +148 -0
  368. package/backend/coverage/lcov-report/src/system-prompts/dto/system-prompt.dto.ts.html +517 -0
  369. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-mcp-tool.dto.ts.html +121 -0
  370. package/backend/coverage/lcov-report/src/system-prompts/dto/toggle-tool.dto.ts.html +118 -0
  371. package/backend/coverage/lcov-report/src/system-prompts/index.html +146 -0
  372. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.controller.ts.html +1060 -0
  373. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.module.ts.html +160 -0
  374. package/backend/coverage/lcov-report/src/system-prompts/system-prompts.service.ts.html +2254 -0
  375. package/backend/coverage/lcov-report/src/timeout.interceptor.ts.html +178 -0
  376. package/backend/coverage/lcov-report/src/tool-hooks/dto/create-tool-hook.dto.ts.html +181 -0
  377. package/backend/coverage/lcov-report/src/tool-hooks/dto/index.html +131 -0
  378. package/backend/coverage/lcov-report/src/tool-hooks/dto/update-tool-hook.dto.ts.html +178 -0
  379. package/backend/coverage/lcov-report/src/tool-hooks/index.html +146 -0
  380. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.controller.ts.html +481 -0
  381. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.module.ts.html +127 -0
  382. package/backend/coverage/lcov-report/src/tool-hooks/tool-hooks.service.ts.html +1222 -0
  383. package/backend/coverage/lcov-report/src/tracing.ts.html +214 -0
  384. package/backend/coverage/lcov-report/src/types/express-multer.d.ts.html +130 -0
  385. package/backend/coverage/lcov-report/src/types/index.html +116 -0
  386. package/backend/coverage/lcov-report/src/utils/ai-format-generator.ts.html +253 -0
  387. package/backend/coverage/lcov-report/src/utils/fuzzy-search.ts.html +310 -0
  388. package/backend/coverage/lcov-report/src/utils/index.html +191 -0
  389. package/backend/coverage/lcov-report/src/utils/index.ts.html +100 -0
  390. package/backend/coverage/lcov-report/src/utils/short-id.ts.html +109 -0
  391. package/backend/coverage/lcov-report/src/utils/spawn-with-kill.ts.html +412 -0
  392. package/backend/coverage/lcov-report/src/utils/trace.decorator.ts.html +223 -0
  393. package/backend/coverage/lcov-report/src/visual-editor/index.html +146 -0
  394. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.controller.ts.html +409 -0
  395. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.dto.ts.html +130 -0
  396. package/backend/coverage/lcov-report/src/visual-editor/visual-editor.module.ts.html +118 -0
  397. package/backend/coverage/lcov-report/src/workspace/dto/file-tree.dto.ts.html +112 -0
  398. package/backend/coverage/lcov-report/src/workspace/dto/index.html +131 -0
  399. package/backend/coverage/lcov-report/src/workspace/dto/search-workspace.dto.ts.html +193 -0
  400. package/backend/coverage/lcov-report/src/workspace/index.html +146 -0
  401. package/backend/coverage/lcov-report/src/workspace/workspace.controller.ts.html +394 -0
  402. package/backend/coverage/lcov-report/src/workspace/workspace.module.ts.html +121 -0
  403. package/backend/coverage/lcov-report/src/workspace/workspace.service.ts.html +1027 -0
  404. package/backend/coverage/lcov.info +20220 -0
  405. package/backend/dist/src/context-templates/context-templates.service.js +0 -3
  406. package/backend/dist/src/context-templates/context-templates.service.js.map +1 -1
  407. package/backend/dist/src/core-entities/system-prompt.entity.d.ts +1 -0
  408. package/backend/dist/src/core-entities/system-prompt.entity.js +8 -0
  409. package/backend/dist/src/core-entities/system-prompt.entity.js.map +1 -1
  410. package/backend/dist/src/llm-orchestration/action-handlers/mcp-tool-action.handler.js +2 -0
  411. package/backend/dist/src/llm-orchestration/action-handlers/mcp-tool-action.handler.js.map +1 -1
  412. package/backend/dist/src/llm-orchestration/tool-schema.service.js +8 -4
  413. package/backend/dist/src/llm-orchestration/tool-schema.service.js.map +1 -1
  414. package/backend/dist/src/mcp/mcp.service.d.ts +1 -0
  415. package/backend/dist/src/mcp/mcp.service.js +16 -0
  416. package/backend/dist/src/mcp/mcp.service.js.map +1 -1
  417. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.d.ts +1 -1
  418. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js +4 -0
  419. package/backend/dist/src/seeding/data/context-templates/default-initial_full-project-context.js.map +1 -1
  420. package/backend/dist/src/seeding/data/sub-agents/browser-use.d.ts +9 -0
  421. package/backend/dist/src/seeding/data/sub-agents/browser-use.js +13 -0
  422. package/backend/dist/src/seeding/data/sub-agents/browser-use.js.map +1 -0
  423. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.d.ts +4 -0
  424. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js +40 -0
  425. package/backend/dist/src/seeding/data/system-prompts/browser-use-agent.js.map +1 -0
  426. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.d.ts +1 -0
  427. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js +2 -1
  428. package/backend/dist/src/seeding/data/system-prompts/default_native_tool_agent.js.map +1 -1
  429. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.d.ts +1 -0
  430. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js +2 -1
  431. package/backend/dist/src/seeding/data/system-prompts/explore-codebase-agent.js.map +1 -1
  432. package/backend/dist/src/seeding/sub-agent-seeding.service.js +14 -1
  433. package/backend/dist/src/seeding/sub-agent-seeding.service.js.map +1 -1
  434. package/backend/dist/src/seeding/system-prompt-seeding.service.js +3 -1
  435. package/backend/dist/src/seeding/system-prompt-seeding.service.js.map +1 -1
  436. package/backend/dist/src/sub-agents/dto/create-sub-agent.dto.d.ts +1 -0
  437. package/backend/dist/src/sub-agents/dto/create-sub-agent.dto.js +8 -0
  438. package/backend/dist/src/sub-agents/dto/create-sub-agent.dto.js.map +1 -1
  439. package/backend/dist/src/sub-agents/dto/update-sub-agent.dto.d.ts +1 -0
  440. package/backend/dist/src/sub-agents/dto/update-sub-agent.dto.js +7 -0
  441. package/backend/dist/src/sub-agents/dto/update-sub-agent.dto.js.map +1 -1
  442. package/backend/dist/src/sub-agents/sub-agent-run.entity.d.ts +1 -1
  443. package/backend/dist/src/sub-agents/sub-agent-run.entity.js +1 -1
  444. package/backend/dist/src/sub-agents/sub-agent-run.entity.js.map +1 -1
  445. package/backend/dist/src/sub-agents/sub-agent-runner.service.d.ts +2 -0
  446. package/backend/dist/src/sub-agents/sub-agent-runner.service.js +68 -2
  447. package/backend/dist/src/sub-agents/sub-agent-runner.service.js.map +1 -1
  448. package/backend/dist/src/sub-agents/sub-agent.entity.d.ts +1 -0
  449. package/backend/dist/src/sub-agents/sub-agent.entity.js +8 -0
  450. package/backend/dist/src/sub-agents/sub-agent.entity.js.map +1 -1
  451. package/backend/dist/src/sub-agents/sub-agents.service.d.ts +2 -0
  452. package/backend/dist/src/sub-agents/sub-agents.service.js +42 -5
  453. package/backend/dist/src/sub-agents/sub-agents.service.js.map +1 -1
  454. package/backend/dist/src/system-prompts/dto/set-enabled-mcp-tools.dto.d.ts +4 -0
  455. package/backend/dist/src/system-prompts/dto/set-enabled-mcp-tools.dto.js +38 -0
  456. package/backend/dist/src/system-prompts/dto/set-enabled-mcp-tools.dto.js.map +1 -0
  457. package/backend/dist/src/system-prompts/dto/system-prompt.dto.d.ts +2 -0
  458. package/backend/dist/src/system-prompts/dto/system-prompt.dto.js +16 -0
  459. package/backend/dist/src/system-prompts/dto/system-prompt.dto.js.map +1 -1
  460. package/backend/dist/src/system-prompts/dto/toggle-mcp-tool.dto.d.ts +3 -0
  461. package/backend/dist/src/system-prompts/dto/toggle-mcp-tool.dto.js +27 -0
  462. package/backend/dist/src/system-prompts/dto/toggle-mcp-tool.dto.js.map +1 -0
  463. package/backend/dist/src/system-prompts/system-prompts.controller.d.ts +17 -0
  464. package/backend/dist/src/system-prompts/system-prompts.controller.js +83 -0
  465. package/backend/dist/src/system-prompts/system-prompts.controller.js.map +1 -1
  466. package/backend/dist/src/system-prompts/system-prompts.service.d.ts +13 -1
  467. package/backend/dist/src/system-prompts/system-prompts.service.js +125 -5
  468. package/backend/dist/src/system-prompts/system-prompts.service.js.map +1 -1
  469. package/backend/dist/tsconfig.build.tsbuildinfo +1 -1
  470. package/package.json +1 -1
@@ -0,0 +1,1681 @@
1
+
2
+ <!doctype html>
3
+ <html lang="en">
4
+
5
+ <head>
6
+ <title>Code coverage report for src/llm-provider/alibaba-llm.provider.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-provider</a> alibaba-llm.provider.ts</h1>
23
+ <div class='clearfix'>
24
+
25
+ <div class='fl pad1y space-right2'>
26
+ <span class="strong">5.58% </span>
27
+ <span class="quiet">Statements</span>
28
+ <span class='fraction'>10/179</span>
29
+ </div>
30
+
31
+
32
+ <div class='fl pad1y space-right2'>
33
+ <span class="strong">0% </span>
34
+ <span class="quiet">Branches</span>
35
+ <span class='fraction'>0/94</span>
36
+ </div>
37
+
38
+
39
+ <div class='fl pad1y space-right2'>
40
+ <span class="strong">7.69% </span>
41
+ <span class="quiet">Functions</span>
42
+ <span class='fraction'>1/13</span>
43
+ </div>
44
+
45
+
46
+ <div class='fl pad1y space-right2'>
47
+ <span class="strong">4.67% </span>
48
+ <span class="quiet">Lines</span>
49
+ <span class='fraction'>8/171</span>
50
+ </div>
51
+
52
+
53
+ </div>
54
+ <p class="quiet">
55
+ Press <em>n</em> or <em>j</em> to go to the next uncovered block, <em>b</em>, <em>p</em> or <em>k</em> for the previous block.
56
+ </p>
57
+ <template id="filterTemplate">
58
+ <div class="quiet">
59
+ Filter:
60
+ <input type="search" id="fileSearch">
61
+ </div>
62
+ </template>
63
+ </div>
64
+ <div class='status-line low'></div>
65
+ <pre><table class="coverage">
66
+ <tr><td class="line-count quiet"><a name='L1'></a><a href='#L1'>1</a>
67
+ <a name='L2'></a><a href='#L2'>2</a>
68
+ <a name='L3'></a><a href='#L3'>3</a>
69
+ <a name='L4'></a><a href='#L4'>4</a>
70
+ <a name='L5'></a><a href='#L5'>5</a>
71
+ <a name='L6'></a><a href='#L6'>6</a>
72
+ <a name='L7'></a><a href='#L7'>7</a>
73
+ <a name='L8'></a><a href='#L8'>8</a>
74
+ <a name='L9'></a><a href='#L9'>9</a>
75
+ <a name='L10'></a><a href='#L10'>10</a>
76
+ <a name='L11'></a><a href='#L11'>11</a>
77
+ <a name='L12'></a><a href='#L12'>12</a>
78
+ <a name='L13'></a><a href='#L13'>13</a>
79
+ <a name='L14'></a><a href='#L14'>14</a>
80
+ <a name='L15'></a><a href='#L15'>15</a>
81
+ <a name='L16'></a><a href='#L16'>16</a>
82
+ <a name='L17'></a><a href='#L17'>17</a>
83
+ <a name='L18'></a><a href='#L18'>18</a>
84
+ <a name='L19'></a><a href='#L19'>19</a>
85
+ <a name='L20'></a><a href='#L20'>20</a>
86
+ <a name='L21'></a><a href='#L21'>21</a>
87
+ <a name='L22'></a><a href='#L22'>22</a>
88
+ <a name='L23'></a><a href='#L23'>23</a>
89
+ <a name='L24'></a><a href='#L24'>24</a>
90
+ <a name='L25'></a><a href='#L25'>25</a>
91
+ <a name='L26'></a><a href='#L26'>26</a>
92
+ <a name='L27'></a><a href='#L27'>27</a>
93
+ <a name='L28'></a><a href='#L28'>28</a>
94
+ <a name='L29'></a><a href='#L29'>29</a>
95
+ <a name='L30'></a><a href='#L30'>30</a>
96
+ <a name='L31'></a><a href='#L31'>31</a>
97
+ <a name='L32'></a><a href='#L32'>32</a>
98
+ <a name='L33'></a><a href='#L33'>33</a>
99
+ <a name='L34'></a><a href='#L34'>34</a>
100
+ <a name='L35'></a><a href='#L35'>35</a>
101
+ <a name='L36'></a><a href='#L36'>36</a>
102
+ <a name='L37'></a><a href='#L37'>37</a>
103
+ <a name='L38'></a><a href='#L38'>38</a>
104
+ <a name='L39'></a><a href='#L39'>39</a>
105
+ <a name='L40'></a><a href='#L40'>40</a>
106
+ <a name='L41'></a><a href='#L41'>41</a>
107
+ <a name='L42'></a><a href='#L42'>42</a>
108
+ <a name='L43'></a><a href='#L43'>43</a>
109
+ <a name='L44'></a><a href='#L44'>44</a>
110
+ <a name='L45'></a><a href='#L45'>45</a>
111
+ <a name='L46'></a><a href='#L46'>46</a>
112
+ <a name='L47'></a><a href='#L47'>47</a>
113
+ <a name='L48'></a><a href='#L48'>48</a>
114
+ <a name='L49'></a><a href='#L49'>49</a>
115
+ <a name='L50'></a><a href='#L50'>50</a>
116
+ <a name='L51'></a><a href='#L51'>51</a>
117
+ <a name='L52'></a><a href='#L52'>52</a>
118
+ <a name='L53'></a><a href='#L53'>53</a>
119
+ <a name='L54'></a><a href='#L54'>54</a>
120
+ <a name='L55'></a><a href='#L55'>55</a>
121
+ <a name='L56'></a><a href='#L56'>56</a>
122
+ <a name='L57'></a><a href='#L57'>57</a>
123
+ <a name='L58'></a><a href='#L58'>58</a>
124
+ <a name='L59'></a><a href='#L59'>59</a>
125
+ <a name='L60'></a><a href='#L60'>60</a>
126
+ <a name='L61'></a><a href='#L61'>61</a>
127
+ <a name='L62'></a><a href='#L62'>62</a>
128
+ <a name='L63'></a><a href='#L63'>63</a>
129
+ <a name='L64'></a><a href='#L64'>64</a>
130
+ <a name='L65'></a><a href='#L65'>65</a>
131
+ <a name='L66'></a><a href='#L66'>66</a>
132
+ <a name='L67'></a><a href='#L67'>67</a>
133
+ <a name='L68'></a><a href='#L68'>68</a>
134
+ <a name='L69'></a><a href='#L69'>69</a>
135
+ <a name='L70'></a><a href='#L70'>70</a>
136
+ <a name='L71'></a><a href='#L71'>71</a>
137
+ <a name='L72'></a><a href='#L72'>72</a>
138
+ <a name='L73'></a><a href='#L73'>73</a>
139
+ <a name='L74'></a><a href='#L74'>74</a>
140
+ <a name='L75'></a><a href='#L75'>75</a>
141
+ <a name='L76'></a><a href='#L76'>76</a>
142
+ <a name='L77'></a><a href='#L77'>77</a>
143
+ <a name='L78'></a><a href='#L78'>78</a>
144
+ <a name='L79'></a><a href='#L79'>79</a>
145
+ <a name='L80'></a><a href='#L80'>80</a>
146
+ <a name='L81'></a><a href='#L81'>81</a>
147
+ <a name='L82'></a><a href='#L82'>82</a>
148
+ <a name='L83'></a><a href='#L83'>83</a>
149
+ <a name='L84'></a><a href='#L84'>84</a>
150
+ <a name='L85'></a><a href='#L85'>85</a>
151
+ <a name='L86'></a><a href='#L86'>86</a>
152
+ <a name='L87'></a><a href='#L87'>87</a>
153
+ <a name='L88'></a><a href='#L88'>88</a>
154
+ <a name='L89'></a><a href='#L89'>89</a>
155
+ <a name='L90'></a><a href='#L90'>90</a>
156
+ <a name='L91'></a><a href='#L91'>91</a>
157
+ <a name='L92'></a><a href='#L92'>92</a>
158
+ <a name='L93'></a><a href='#L93'>93</a>
159
+ <a name='L94'></a><a href='#L94'>94</a>
160
+ <a name='L95'></a><a href='#L95'>95</a>
161
+ <a name='L96'></a><a href='#L96'>96</a>
162
+ <a name='L97'></a><a href='#L97'>97</a>
163
+ <a name='L98'></a><a href='#L98'>98</a>
164
+ <a name='L99'></a><a href='#L99'>99</a>
165
+ <a name='L100'></a><a href='#L100'>100</a>
166
+ <a name='L101'></a><a href='#L101'>101</a>
167
+ <a name='L102'></a><a href='#L102'>102</a>
168
+ <a name='L103'></a><a href='#L103'>103</a>
169
+ <a name='L104'></a><a href='#L104'>104</a>
170
+ <a name='L105'></a><a href='#L105'>105</a>
171
+ <a name='L106'></a><a href='#L106'>106</a>
172
+ <a name='L107'></a><a href='#L107'>107</a>
173
+ <a name='L108'></a><a href='#L108'>108</a>
174
+ <a name='L109'></a><a href='#L109'>109</a>
175
+ <a name='L110'></a><a href='#L110'>110</a>
176
+ <a name='L111'></a><a href='#L111'>111</a>
177
+ <a name='L112'></a><a href='#L112'>112</a>
178
+ <a name='L113'></a><a href='#L113'>113</a>
179
+ <a name='L114'></a><a href='#L114'>114</a>
180
+ <a name='L115'></a><a href='#L115'>115</a>
181
+ <a name='L116'></a><a href='#L116'>116</a>
182
+ <a name='L117'></a><a href='#L117'>117</a>
183
+ <a name='L118'></a><a href='#L118'>118</a>
184
+ <a name='L119'></a><a href='#L119'>119</a>
185
+ <a name='L120'></a><a href='#L120'>120</a>
186
+ <a name='L121'></a><a href='#L121'>121</a>
187
+ <a name='L122'></a><a href='#L122'>122</a>
188
+ <a name='L123'></a><a href='#L123'>123</a>
189
+ <a name='L124'></a><a href='#L124'>124</a>
190
+ <a name='L125'></a><a href='#L125'>125</a>
191
+ <a name='L126'></a><a href='#L126'>126</a>
192
+ <a name='L127'></a><a href='#L127'>127</a>
193
+ <a name='L128'></a><a href='#L128'>128</a>
194
+ <a name='L129'></a><a href='#L129'>129</a>
195
+ <a name='L130'></a><a href='#L130'>130</a>
196
+ <a name='L131'></a><a href='#L131'>131</a>
197
+ <a name='L132'></a><a href='#L132'>132</a>
198
+ <a name='L133'></a><a href='#L133'>133</a>
199
+ <a name='L134'></a><a href='#L134'>134</a>
200
+ <a name='L135'></a><a href='#L135'>135</a>
201
+ <a name='L136'></a><a href='#L136'>136</a>
202
+ <a name='L137'></a><a href='#L137'>137</a>
203
+ <a name='L138'></a><a href='#L138'>138</a>
204
+ <a name='L139'></a><a href='#L139'>139</a>
205
+ <a name='L140'></a><a href='#L140'>140</a>
206
+ <a name='L141'></a><a href='#L141'>141</a>
207
+ <a name='L142'></a><a href='#L142'>142</a>
208
+ <a name='L143'></a><a href='#L143'>143</a>
209
+ <a name='L144'></a><a href='#L144'>144</a>
210
+ <a name='L145'></a><a href='#L145'>145</a>
211
+ <a name='L146'></a><a href='#L146'>146</a>
212
+ <a name='L147'></a><a href='#L147'>147</a>
213
+ <a name='L148'></a><a href='#L148'>148</a>
214
+ <a name='L149'></a><a href='#L149'>149</a>
215
+ <a name='L150'></a><a href='#L150'>150</a>
216
+ <a name='L151'></a><a href='#L151'>151</a>
217
+ <a name='L152'></a><a href='#L152'>152</a>
218
+ <a name='L153'></a><a href='#L153'>153</a>
219
+ <a name='L154'></a><a href='#L154'>154</a>
220
+ <a name='L155'></a><a href='#L155'>155</a>
221
+ <a name='L156'></a><a href='#L156'>156</a>
222
+ <a name='L157'></a><a href='#L157'>157</a>
223
+ <a name='L158'></a><a href='#L158'>158</a>
224
+ <a name='L159'></a><a href='#L159'>159</a>
225
+ <a name='L160'></a><a href='#L160'>160</a>
226
+ <a name='L161'></a><a href='#L161'>161</a>
227
+ <a name='L162'></a><a href='#L162'>162</a>
228
+ <a name='L163'></a><a href='#L163'>163</a>
229
+ <a name='L164'></a><a href='#L164'>164</a>
230
+ <a name='L165'></a><a href='#L165'>165</a>
231
+ <a name='L166'></a><a href='#L166'>166</a>
232
+ <a name='L167'></a><a href='#L167'>167</a>
233
+ <a name='L168'></a><a href='#L168'>168</a>
234
+ <a name='L169'></a><a href='#L169'>169</a>
235
+ <a name='L170'></a><a href='#L170'>170</a>
236
+ <a name='L171'></a><a href='#L171'>171</a>
237
+ <a name='L172'></a><a href='#L172'>172</a>
238
+ <a name='L173'></a><a href='#L173'>173</a>
239
+ <a name='L174'></a><a href='#L174'>174</a>
240
+ <a name='L175'></a><a href='#L175'>175</a>
241
+ <a name='L176'></a><a href='#L176'>176</a>
242
+ <a name='L177'></a><a href='#L177'>177</a>
243
+ <a name='L178'></a><a href='#L178'>178</a>
244
+ <a name='L179'></a><a href='#L179'>179</a>
245
+ <a name='L180'></a><a href='#L180'>180</a>
246
+ <a name='L181'></a><a href='#L181'>181</a>
247
+ <a name='L182'></a><a href='#L182'>182</a>
248
+ <a name='L183'></a><a href='#L183'>183</a>
249
+ <a name='L184'></a><a href='#L184'>184</a>
250
+ <a name='L185'></a><a href='#L185'>185</a>
251
+ <a name='L186'></a><a href='#L186'>186</a>
252
+ <a name='L187'></a><a href='#L187'>187</a>
253
+ <a name='L188'></a><a href='#L188'>188</a>
254
+ <a name='L189'></a><a href='#L189'>189</a>
255
+ <a name='L190'></a><a href='#L190'>190</a>
256
+ <a name='L191'></a><a href='#L191'>191</a>
257
+ <a name='L192'></a><a href='#L192'>192</a>
258
+ <a name='L193'></a><a href='#L193'>193</a>
259
+ <a name='L194'></a><a href='#L194'>194</a>
260
+ <a name='L195'></a><a href='#L195'>195</a>
261
+ <a name='L196'></a><a href='#L196'>196</a>
262
+ <a name='L197'></a><a href='#L197'>197</a>
263
+ <a name='L198'></a><a href='#L198'>198</a>
264
+ <a name='L199'></a><a href='#L199'>199</a>
265
+ <a name='L200'></a><a href='#L200'>200</a>
266
+ <a name='L201'></a><a href='#L201'>201</a>
267
+ <a name='L202'></a><a href='#L202'>202</a>
268
+ <a name='L203'></a><a href='#L203'>203</a>
269
+ <a name='L204'></a><a href='#L204'>204</a>
270
+ <a name='L205'></a><a href='#L205'>205</a>
271
+ <a name='L206'></a><a href='#L206'>206</a>
272
+ <a name='L207'></a><a href='#L207'>207</a>
273
+ <a name='L208'></a><a href='#L208'>208</a>
274
+ <a name='L209'></a><a href='#L209'>209</a>
275
+ <a name='L210'></a><a href='#L210'>210</a>
276
+ <a name='L211'></a><a href='#L211'>211</a>
277
+ <a name='L212'></a><a href='#L212'>212</a>
278
+ <a name='L213'></a><a href='#L213'>213</a>
279
+ <a name='L214'></a><a href='#L214'>214</a>
280
+ <a name='L215'></a><a href='#L215'>215</a>
281
+ <a name='L216'></a><a href='#L216'>216</a>
282
+ <a name='L217'></a><a href='#L217'>217</a>
283
+ <a name='L218'></a><a href='#L218'>218</a>
284
+ <a name='L219'></a><a href='#L219'>219</a>
285
+ <a name='L220'></a><a href='#L220'>220</a>
286
+ <a name='L221'></a><a href='#L221'>221</a>
287
+ <a name='L222'></a><a href='#L222'>222</a>
288
+ <a name='L223'></a><a href='#L223'>223</a>
289
+ <a name='L224'></a><a href='#L224'>224</a>
290
+ <a name='L225'></a><a href='#L225'>225</a>
291
+ <a name='L226'></a><a href='#L226'>226</a>
292
+ <a name='L227'></a><a href='#L227'>227</a>
293
+ <a name='L228'></a><a href='#L228'>228</a>
294
+ <a name='L229'></a><a href='#L229'>229</a>
295
+ <a name='L230'></a><a href='#L230'>230</a>
296
+ <a name='L231'></a><a href='#L231'>231</a>
297
+ <a name='L232'></a><a href='#L232'>232</a>
298
+ <a name='L233'></a><a href='#L233'>233</a>
299
+ <a name='L234'></a><a href='#L234'>234</a>
300
+ <a name='L235'></a><a href='#L235'>235</a>
301
+ <a name='L236'></a><a href='#L236'>236</a>
302
+ <a name='L237'></a><a href='#L237'>237</a>
303
+ <a name='L238'></a><a href='#L238'>238</a>
304
+ <a name='L239'></a><a href='#L239'>239</a>
305
+ <a name='L240'></a><a href='#L240'>240</a>
306
+ <a name='L241'></a><a href='#L241'>241</a>
307
+ <a name='L242'></a><a href='#L242'>242</a>
308
+ <a name='L243'></a><a href='#L243'>243</a>
309
+ <a name='L244'></a><a href='#L244'>244</a>
310
+ <a name='L245'></a><a href='#L245'>245</a>
311
+ <a name='L246'></a><a href='#L246'>246</a>
312
+ <a name='L247'></a><a href='#L247'>247</a>
313
+ <a name='L248'></a><a href='#L248'>248</a>
314
+ <a name='L249'></a><a href='#L249'>249</a>
315
+ <a name='L250'></a><a href='#L250'>250</a>
316
+ <a name='L251'></a><a href='#L251'>251</a>
317
+ <a name='L252'></a><a href='#L252'>252</a>
318
+ <a name='L253'></a><a href='#L253'>253</a>
319
+ <a name='L254'></a><a href='#L254'>254</a>
320
+ <a name='L255'></a><a href='#L255'>255</a>
321
+ <a name='L256'></a><a href='#L256'>256</a>
322
+ <a name='L257'></a><a href='#L257'>257</a>
323
+ <a name='L258'></a><a href='#L258'>258</a>
324
+ <a name='L259'></a><a href='#L259'>259</a>
325
+ <a name='L260'></a><a href='#L260'>260</a>
326
+ <a name='L261'></a><a href='#L261'>261</a>
327
+ <a name='L262'></a><a href='#L262'>262</a>
328
+ <a name='L263'></a><a href='#L263'>263</a>
329
+ <a name='L264'></a><a href='#L264'>264</a>
330
+ <a name='L265'></a><a href='#L265'>265</a>
331
+ <a name='L266'></a><a href='#L266'>266</a>
332
+ <a name='L267'></a><a href='#L267'>267</a>
333
+ <a name='L268'></a><a href='#L268'>268</a>
334
+ <a name='L269'></a><a href='#L269'>269</a>
335
+ <a name='L270'></a><a href='#L270'>270</a>
336
+ <a name='L271'></a><a href='#L271'>271</a>
337
+ <a name='L272'></a><a href='#L272'>272</a>
338
+ <a name='L273'></a><a href='#L273'>273</a>
339
+ <a name='L274'></a><a href='#L274'>274</a>
340
+ <a name='L275'></a><a href='#L275'>275</a>
341
+ <a name='L276'></a><a href='#L276'>276</a>
342
+ <a name='L277'></a><a href='#L277'>277</a>
343
+ <a name='L278'></a><a href='#L278'>278</a>
344
+ <a name='L279'></a><a href='#L279'>279</a>
345
+ <a name='L280'></a><a href='#L280'>280</a>
346
+ <a name='L281'></a><a href='#L281'>281</a>
347
+ <a name='L282'></a><a href='#L282'>282</a>
348
+ <a name='L283'></a><a href='#L283'>283</a>
349
+ <a name='L284'></a><a href='#L284'>284</a>
350
+ <a name='L285'></a><a href='#L285'>285</a>
351
+ <a name='L286'></a><a href='#L286'>286</a>
352
+ <a name='L287'></a><a href='#L287'>287</a>
353
+ <a name='L288'></a><a href='#L288'>288</a>
354
+ <a name='L289'></a><a href='#L289'>289</a>
355
+ <a name='L290'></a><a href='#L290'>290</a>
356
+ <a name='L291'></a><a href='#L291'>291</a>
357
+ <a name='L292'></a><a href='#L292'>292</a>
358
+ <a name='L293'></a><a href='#L293'>293</a>
359
+ <a name='L294'></a><a href='#L294'>294</a>
360
+ <a name='L295'></a><a href='#L295'>295</a>
361
+ <a name='L296'></a><a href='#L296'>296</a>
362
+ <a name='L297'></a><a href='#L297'>297</a>
363
+ <a name='L298'></a><a href='#L298'>298</a>
364
+ <a name='L299'></a><a href='#L299'>299</a>
365
+ <a name='L300'></a><a href='#L300'>300</a>
366
+ <a name='L301'></a><a href='#L301'>301</a>
367
+ <a name='L302'></a><a href='#L302'>302</a>
368
+ <a name='L303'></a><a href='#L303'>303</a>
369
+ <a name='L304'></a><a href='#L304'>304</a>
370
+ <a name='L305'></a><a href='#L305'>305</a>
371
+ <a name='L306'></a><a href='#L306'>306</a>
372
+ <a name='L307'></a><a href='#L307'>307</a>
373
+ <a name='L308'></a><a href='#L308'>308</a>
374
+ <a name='L309'></a><a href='#L309'>309</a>
375
+ <a name='L310'></a><a href='#L310'>310</a>
376
+ <a name='L311'></a><a href='#L311'>311</a>
377
+ <a name='L312'></a><a href='#L312'>312</a>
378
+ <a name='L313'></a><a href='#L313'>313</a>
379
+ <a name='L314'></a><a href='#L314'>314</a>
380
+ <a name='L315'></a><a href='#L315'>315</a>
381
+ <a name='L316'></a><a href='#L316'>316</a>
382
+ <a name='L317'></a><a href='#L317'>317</a>
383
+ <a name='L318'></a><a href='#L318'>318</a>
384
+ <a name='L319'></a><a href='#L319'>319</a>
385
+ <a name='L320'></a><a href='#L320'>320</a>
386
+ <a name='L321'></a><a href='#L321'>321</a>
387
+ <a name='L322'></a><a href='#L322'>322</a>
388
+ <a name='L323'></a><a href='#L323'>323</a>
389
+ <a name='L324'></a><a href='#L324'>324</a>
390
+ <a name='L325'></a><a href='#L325'>325</a>
391
+ <a name='L326'></a><a href='#L326'>326</a>
392
+ <a name='L327'></a><a href='#L327'>327</a>
393
+ <a name='L328'></a><a href='#L328'>328</a>
394
+ <a name='L329'></a><a href='#L329'>329</a>
395
+ <a name='L330'></a><a href='#L330'>330</a>
396
+ <a name='L331'></a><a href='#L331'>331</a>
397
+ <a name='L332'></a><a href='#L332'>332</a>
398
+ <a name='L333'></a><a href='#L333'>333</a>
399
+ <a name='L334'></a><a href='#L334'>334</a>
400
+ <a name='L335'></a><a href='#L335'>335</a>
401
+ <a name='L336'></a><a href='#L336'>336</a>
402
+ <a name='L337'></a><a href='#L337'>337</a>
403
+ <a name='L338'></a><a href='#L338'>338</a>
404
+ <a name='L339'></a><a href='#L339'>339</a>
405
+ <a name='L340'></a><a href='#L340'>340</a>
406
+ <a name='L341'></a><a href='#L341'>341</a>
407
+ <a name='L342'></a><a href='#L342'>342</a>
408
+ <a name='L343'></a><a href='#L343'>343</a>
409
+ <a name='L344'></a><a href='#L344'>344</a>
410
+ <a name='L345'></a><a href='#L345'>345</a>
411
+ <a name='L346'></a><a href='#L346'>346</a>
412
+ <a name='L347'></a><a href='#L347'>347</a>
413
+ <a name='L348'></a><a href='#L348'>348</a>
414
+ <a name='L349'></a><a href='#L349'>349</a>
415
+ <a name='L350'></a><a href='#L350'>350</a>
416
+ <a name='L351'></a><a href='#L351'>351</a>
417
+ <a name='L352'></a><a href='#L352'>352</a>
418
+ <a name='L353'></a><a href='#L353'>353</a>
419
+ <a name='L354'></a><a href='#L354'>354</a>
420
+ <a name='L355'></a><a href='#L355'>355</a>
421
+ <a name='L356'></a><a href='#L356'>356</a>
422
+ <a name='L357'></a><a href='#L357'>357</a>
423
+ <a name='L358'></a><a href='#L358'>358</a>
424
+ <a name='L359'></a><a href='#L359'>359</a>
425
+ <a name='L360'></a><a href='#L360'>360</a>
426
+ <a name='L361'></a><a href='#L361'>361</a>
427
+ <a name='L362'></a><a href='#L362'>362</a>
428
+ <a name='L363'></a><a href='#L363'>363</a>
429
+ <a name='L364'></a><a href='#L364'>364</a>
430
+ <a name='L365'></a><a href='#L365'>365</a>
431
+ <a name='L366'></a><a href='#L366'>366</a>
432
+ <a name='L367'></a><a href='#L367'>367</a>
433
+ <a name='L368'></a><a href='#L368'>368</a>
434
+ <a name='L369'></a><a href='#L369'>369</a>
435
+ <a name='L370'></a><a href='#L370'>370</a>
436
+ <a name='L371'></a><a href='#L371'>371</a>
437
+ <a name='L372'></a><a href='#L372'>372</a>
438
+ <a name='L373'></a><a href='#L373'>373</a>
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>
489
+ <a name='L424'></a><a href='#L424'>424</a>
490
+ <a name='L425'></a><a href='#L425'>425</a>
491
+ <a name='L426'></a><a href='#L426'>426</a>
492
+ <a name='L427'></a><a href='#L427'>427</a>
493
+ <a name='L428'></a><a href='#L428'>428</a>
494
+ <a name='L429'></a><a href='#L429'>429</a>
495
+ <a name='L430'></a><a href='#L430'>430</a>
496
+ <a name='L431'></a><a href='#L431'>431</a>
497
+ <a name='L432'></a><a href='#L432'>432</a>
498
+ <a name='L433'></a><a href='#L433'>433</a>
499
+ <a name='L434'></a><a href='#L434'>434</a>
500
+ <a name='L435'></a><a href='#L435'>435</a>
501
+ <a name='L436'></a><a href='#L436'>436</a>
502
+ <a name='L437'></a><a href='#L437'>437</a>
503
+ <a name='L438'></a><a href='#L438'>438</a>
504
+ <a name='L439'></a><a href='#L439'>439</a>
505
+ <a name='L440'></a><a href='#L440'>440</a>
506
+ <a name='L441'></a><a href='#L441'>441</a>
507
+ <a name='L442'></a><a href='#L442'>442</a>
508
+ <a name='L443'></a><a href='#L443'>443</a>
509
+ <a name='L444'></a><a href='#L444'>444</a>
510
+ <a name='L445'></a><a href='#L445'>445</a>
511
+ <a name='L446'></a><a href='#L446'>446</a>
512
+ <a name='L447'></a><a href='#L447'>447</a>
513
+ <a name='L448'></a><a href='#L448'>448</a>
514
+ <a name='L449'></a><a href='#L449'>449</a>
515
+ <a name='L450'></a><a href='#L450'>450</a>
516
+ <a name='L451'></a><a href='#L451'>451</a>
517
+ <a name='L452'></a><a href='#L452'>452</a>
518
+ <a name='L453'></a><a href='#L453'>453</a>
519
+ <a name='L454'></a><a href='#L454'>454</a>
520
+ <a name='L455'></a><a href='#L455'>455</a>
521
+ <a name='L456'></a><a href='#L456'>456</a>
522
+ <a name='L457'></a><a href='#L457'>457</a>
523
+ <a name='L458'></a><a href='#L458'>458</a>
524
+ <a name='L459'></a><a href='#L459'>459</a>
525
+ <a name='L460'></a><a href='#L460'>460</a>
526
+ <a name='L461'></a><a href='#L461'>461</a>
527
+ <a name='L462'></a><a href='#L462'>462</a>
528
+ <a name='L463'></a><a href='#L463'>463</a>
529
+ <a name='L464'></a><a href='#L464'>464</a>
530
+ <a name='L465'></a><a href='#L465'>465</a>
531
+ <a name='L466'></a><a href='#L466'>466</a>
532
+ <a name='L467'></a><a href='#L467'>467</a>
533
+ <a name='L468'></a><a href='#L468'>468</a>
534
+ <a name='L469'></a><a href='#L469'>469</a>
535
+ <a name='L470'></a><a href='#L470'>470</a>
536
+ <a name='L471'></a><a href='#L471'>471</a>
537
+ <a name='L472'></a><a href='#L472'>472</a>
538
+ <a name='L473'></a><a href='#L473'>473</a>
539
+ <a name='L474'></a><a href='#L474'>474</a>
540
+ <a name='L475'></a><a href='#L475'>475</a>
541
+ <a name='L476'></a><a href='#L476'>476</a>
542
+ <a name='L477'></a><a href='#L477'>477</a>
543
+ <a name='L478'></a><a href='#L478'>478</a>
544
+ <a name='L479'></a><a href='#L479'>479</a>
545
+ <a name='L480'></a><a href='#L480'>480</a>
546
+ <a name='L481'></a><a href='#L481'>481</a>
547
+ <a name='L482'></a><a href='#L482'>482</a>
548
+ <a name='L483'></a><a href='#L483'>483</a>
549
+ <a name='L484'></a><a href='#L484'>484</a>
550
+ <a name='L485'></a><a href='#L485'>485</a>
551
+ <a name='L486'></a><a href='#L486'>486</a>
552
+ <a name='L487'></a><a href='#L487'>487</a>
553
+ <a name='L488'></a><a href='#L488'>488</a>
554
+ <a name='L489'></a><a href='#L489'>489</a>
555
+ <a name='L490'></a><a href='#L490'>490</a>
556
+ <a name='L491'></a><a href='#L491'>491</a>
557
+ <a name='L492'></a><a href='#L492'>492</a>
558
+ <a name='L493'></a><a href='#L493'>493</a>
559
+ <a name='L494'></a><a href='#L494'>494</a>
560
+ <a name='L495'></a><a href='#L495'>495</a>
561
+ <a name='L496'></a><a href='#L496'>496</a>
562
+ <a name='L497'></a><a href='#L497'>497</a>
563
+ <a name='L498'></a><a href='#L498'>498</a>
564
+ <a name='L499'></a><a href='#L499'>499</a>
565
+ <a name='L500'></a><a href='#L500'>500</a>
566
+ <a name='L501'></a><a href='#L501'>501</a>
567
+ <a name='L502'></a><a href='#L502'>502</a>
568
+ <a name='L503'></a><a href='#L503'>503</a>
569
+ <a name='L504'></a><a href='#L504'>504</a>
570
+ <a name='L505'></a><a href='#L505'>505</a>
571
+ <a name='L506'></a><a href='#L506'>506</a>
572
+ <a name='L507'></a><a href='#L507'>507</a>
573
+ <a name='L508'></a><a href='#L508'>508</a>
574
+ <a name='L509'></a><a href='#L509'>509</a>
575
+ <a name='L510'></a><a href='#L510'>510</a>
576
+ <a name='L511'></a><a href='#L511'>511</a>
577
+ <a name='L512'></a><a href='#L512'>512</a>
578
+ <a name='L513'></a><a href='#L513'>513</a>
579
+ <a name='L514'></a><a href='#L514'>514</a>
580
+ <a name='L515'></a><a href='#L515'>515</a>
581
+ <a name='L516'></a><a href='#L516'>516</a>
582
+ <a name='L517'></a><a href='#L517'>517</a>
583
+ <a name='L518'></a><a href='#L518'>518</a>
584
+ <a name='L519'></a><a href='#L519'>519</a>
585
+ <a name='L520'></a><a href='#L520'>520</a>
586
+ <a name='L521'></a><a href='#L521'>521</a>
587
+ <a name='L522'></a><a href='#L522'>522</a>
588
+ <a name='L523'></a><a href='#L523'>523</a>
589
+ <a name='L524'></a><a href='#L524'>524</a>
590
+ <a name='L525'></a><a href='#L525'>525</a>
591
+ <a name='L526'></a><a href='#L526'>526</a>
592
+ <a name='L527'></a><a href='#L527'>527</a>
593
+ <a name='L528'></a><a href='#L528'>528</a>
594
+ <a name='L529'></a><a href='#L529'>529</a>
595
+ <a name='L530'></a><a href='#L530'>530</a>
596
+ <a name='L531'></a><a href='#L531'>531</a>
597
+ <a name='L532'></a><a href='#L532'>532</a>
598
+ <a name='L533'></a><a href='#L533'>533</a></td><td class="line-coverage quiet"><span class="cline-any cline-yes">6x</span>
599
+ <span class="cline-any cline-neutral">&nbsp;</span>
600
+ <span class="cline-any cline-neutral">&nbsp;</span>
601
+ <span class="cline-any cline-neutral">&nbsp;</span>
602
+ <span class="cline-any cline-neutral">&nbsp;</span>
603
+ <span class="cline-any cline-neutral">&nbsp;</span>
604
+ <span class="cline-any cline-neutral">&nbsp;</span>
605
+ <span class="cline-any cline-neutral">&nbsp;</span>
606
+ <span class="cline-any cline-neutral">&nbsp;</span>
607
+ <span class="cline-any cline-neutral">&nbsp;</span>
608
+ <span class="cline-any cline-yes">6x</span>
609
+ <span class="cline-any cline-yes">6x</span>
610
+ <span class="cline-any cline-neutral">&nbsp;</span>
611
+ <span class="cline-any cline-neutral">&nbsp;</span>
612
+ <span class="cline-any cline-yes">6x</span>
613
+ <span class="cline-any cline-yes">6x</span>
614
+ <span class="cline-any cline-yes">6x</span>
615
+ <span class="cline-any cline-neutral">&nbsp;</span>
616
+ <span class="cline-any cline-neutral">&nbsp;</span>
617
+ <span class="cline-any cline-yes">6x</span>
618
+ <span class="cline-any cline-yes">6x</span>
619
+ <span class="cline-any cline-neutral">&nbsp;</span>
620
+ <span class="cline-any cline-neutral">&nbsp;</span>
621
+ <span class="cline-any cline-neutral">&nbsp;</span>
622
+ <span class="cline-any cline-no">&nbsp;</span>
623
+ <span class="cline-any cline-neutral">&nbsp;</span>
624
+ <span class="cline-any cline-no">&nbsp;</span>
625
+ <span class="cline-any cline-no">&nbsp;</span>
626
+ <span class="cline-any cline-neutral">&nbsp;</span>
627
+ <span class="cline-any cline-neutral">&nbsp;</span>
628
+ <span class="cline-any cline-no">&nbsp;</span>
629
+ <span class="cline-any cline-neutral">&nbsp;</span>
630
+ <span class="cline-any cline-neutral">&nbsp;</span>
631
+ <span class="cline-any cline-neutral">&nbsp;</span>
632
+ <span class="cline-any cline-no">&nbsp;</span>
633
+ <span class="cline-any cline-neutral">&nbsp;</span>
634
+ <span class="cline-any cline-no">&nbsp;</span>
635
+ <span class="cline-any cline-neutral">&nbsp;</span>
636
+ <span class="cline-any cline-neutral">&nbsp;</span>
637
+ <span class="cline-any cline-neutral">&nbsp;</span>
638
+ <span class="cline-any cline-no">&nbsp;</span>
639
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
643
+ <span class="cline-any cline-no">&nbsp;</span>
644
+ <span class="cline-any cline-no">&nbsp;</span>
645
+ <span class="cline-any cline-neutral">&nbsp;</span>
646
+ <span class="cline-any cline-neutral">&nbsp;</span>
647
+ <span class="cline-any cline-neutral">&nbsp;</span>
648
+ <span class="cline-any cline-neutral">&nbsp;</span>
649
+ <span class="cline-any cline-neutral">&nbsp;</span>
650
+ <span class="cline-any cline-neutral">&nbsp;</span>
651
+ <span class="cline-any cline-neutral">&nbsp;</span>
652
+ <span class="cline-any cline-neutral">&nbsp;</span>
653
+ <span class="cline-any cline-neutral">&nbsp;</span>
654
+ <span class="cline-any cline-neutral">&nbsp;</span>
655
+ <span class="cline-any cline-neutral">&nbsp;</span>
656
+ <span class="cline-any cline-neutral">&nbsp;</span>
657
+ <span class="cline-any cline-neutral">&nbsp;</span>
658
+ <span class="cline-any cline-no">&nbsp;</span>
659
+ <span class="cline-any cline-neutral">&nbsp;</span>
660
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
664
+ <span class="cline-any cline-neutral">&nbsp;</span>
665
+ <span class="cline-any cline-no">&nbsp;</span>
666
+ <span class="cline-any cline-neutral">&nbsp;</span>
667
+ <span class="cline-any cline-neutral">&nbsp;</span>
668
+ <span class="cline-any cline-neutral">&nbsp;</span>
669
+ <span class="cline-any cline-neutral">&nbsp;</span>
670
+ <span class="cline-any cline-neutral">&nbsp;</span>
671
+ <span class="cline-any cline-neutral">&nbsp;</span>
672
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
677
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
681
+ <span class="cline-any cline-neutral">&nbsp;</span>
682
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</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-no">&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-neutral">&nbsp;</span>
696
+ <span class="cline-any cline-no">&nbsp;</span>
697
+ <span class="cline-any cline-no">&nbsp;</span>
698
+ <span class="cline-any cline-no">&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-no">&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-no">&nbsp;</span>
715
+ <span class="cline-any cline-neutral">&nbsp;</span>
716
+ <span class="cline-any cline-neutral">&nbsp;</span>
717
+ <span class="cline-any cline-neutral">&nbsp;</span>
718
+ <span class="cline-any cline-no">&nbsp;</span>
719
+ <span class="cline-any cline-no">&nbsp;</span>
720
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
725
+ <span class="cline-any cline-no">&nbsp;</span>
726
+ <span class="cline-any cline-neutral">&nbsp;</span>
727
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
731
+ <span class="cline-any cline-neutral">&nbsp;</span>
732
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
736
+ <span class="cline-any cline-no">&nbsp;</span>
737
+ <span class="cline-any cline-neutral">&nbsp;</span>
738
+ <span class="cline-any cline-no">&nbsp;</span>
739
+ <span class="cline-any cline-no">&nbsp;</span>
740
+ <span class="cline-any cline-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-neutral">&nbsp;</span>
747
+ <span class="cline-any cline-neutral">&nbsp;</span>
748
+ <span class="cline-any cline-neutral">&nbsp;</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-neutral">&nbsp;</span>
752
+ <span class="cline-any cline-neutral">&nbsp;</span>
753
+ <span class="cline-any cline-neutral">&nbsp;</span>
754
+ <span class="cline-any cline-neutral">&nbsp;</span>
755
+ <span class="cline-any cline-neutral">&nbsp;</span>
756
+ <span class="cline-any cline-neutral">&nbsp;</span>
757
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
761
+ <span class="cline-any cline-no">&nbsp;</span>
762
+ <span class="cline-any cline-neutral">&nbsp;</span>
763
+ <span class="cline-any cline-neutral">&nbsp;</span>
764
+ <span class="cline-any cline-neutral">&nbsp;</span>
765
+ <span class="cline-any cline-neutral">&nbsp;</span>
766
+ <span class="cline-any cline-neutral">&nbsp;</span>
767
+ <span class="cline-any cline-neutral">&nbsp;</span>
768
+ <span class="cline-any cline-neutral">&nbsp;</span>
769
+ <span class="cline-any cline-no">&nbsp;</span>
770
+ <span class="cline-any cline-no">&nbsp;</span>
771
+ <span class="cline-any cline-no">&nbsp;</span>
772
+ <span class="cline-any cline-no">&nbsp;</span>
773
+ <span class="cline-any cline-neutral">&nbsp;</span>
774
+ <span class="cline-any cline-neutral">&nbsp;</span>
775
+ <span class="cline-any cline-neutral">&nbsp;</span>
776
+ <span class="cline-any cline-no">&nbsp;</span>
777
+ <span class="cline-any cline-no">&nbsp;</span>
778
+ <span class="cline-any cline-no">&nbsp;</span>
779
+ <span class="cline-any cline-neutral">&nbsp;</span>
780
+ <span class="cline-any cline-neutral">&nbsp;</span>
781
+ <span class="cline-any cline-no">&nbsp;</span>
782
+ <span class="cline-any cline-no">&nbsp;</span>
783
+ <span class="cline-any cline-no">&nbsp;</span>
784
+ <span class="cline-any cline-no">&nbsp;</span>
785
+ <span class="cline-any cline-no">&nbsp;</span>
786
+ <span class="cline-any cline-no">&nbsp;</span>
787
+ <span class="cline-any cline-no">&nbsp;</span>
788
+ <span class="cline-any cline-neutral">&nbsp;</span>
789
+ <span class="cline-any cline-neutral">&nbsp;</span>
790
+ <span class="cline-any cline-no">&nbsp;</span>
791
+ <span class="cline-any cline-no">&nbsp;</span>
792
+ <span class="cline-any cline-neutral">&nbsp;</span>
793
+ <span class="cline-any cline-neutral">&nbsp;</span>
794
+ <span class="cline-any cline-neutral">&nbsp;</span>
795
+ <span class="cline-any cline-no">&nbsp;</span>
796
+ <span class="cline-any cline-neutral">&nbsp;</span>
797
+ <span class="cline-any cline-neutral">&nbsp;</span>
798
+ <span class="cline-any cline-neutral">&nbsp;</span>
799
+ <span class="cline-any cline-neutral">&nbsp;</span>
800
+ <span class="cline-any cline-neutral">&nbsp;</span>
801
+ <span class="cline-any cline-neutral">&nbsp;</span>
802
+ <span class="cline-any cline-neutral">&nbsp;</span>
803
+ <span class="cline-any cline-neutral">&nbsp;</span>
804
+ <span class="cline-any cline-neutral">&nbsp;</span>
805
+ <span class="cline-any cline-no">&nbsp;</span>
806
+ <span class="cline-any cline-no">&nbsp;</span>
807
+ <span class="cline-any cline-no">&nbsp;</span>
808
+ <span class="cline-any cline-neutral">&nbsp;</span>
809
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
813
+ <span class="cline-any cline-no">&nbsp;</span>
814
+ <span class="cline-any cline-no">&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-no">&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-no">&nbsp;</span>
828
+ <span class="cline-any cline-no">&nbsp;</span>
829
+ <span class="cline-any cline-no">&nbsp;</span>
830
+ <span class="cline-any cline-neutral">&nbsp;</span>
831
+ <span class="cline-any cline-neutral">&nbsp;</span>
832
+ <span class="cline-any cline-neutral">&nbsp;</span>
833
+ <span class="cline-any cline-no">&nbsp;</span>
834
+ <span class="cline-any cline-no">&nbsp;</span>
835
+ <span class="cline-any cline-no">&nbsp;</span>
836
+ <span class="cline-any cline-no">&nbsp;</span>
837
+ <span class="cline-any cline-no">&nbsp;</span>
838
+ <span class="cline-any cline-no">&nbsp;</span>
839
+ <span class="cline-any cline-no">&nbsp;</span>
840
+ <span class="cline-any cline-no">&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-neutral">&nbsp;</span>
846
+ <span class="cline-any cline-neutral">&nbsp;</span>
847
+ <span class="cline-any cline-no">&nbsp;</span>
848
+ <span class="cline-any cline-neutral">&nbsp;</span>
849
+ <span class="cline-any cline-neutral">&nbsp;</span>
850
+ <span class="cline-any cline-no">&nbsp;</span>
851
+ <span class="cline-any cline-neutral">&nbsp;</span>
852
+ <span class="cline-any cline-no">&nbsp;</span>
853
+ <span class="cline-any cline-no">&nbsp;</span>
854
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
858
+ <span class="cline-any cline-no">&nbsp;</span>
859
+ <span class="cline-any cline-no">&nbsp;</span>
860
+ <span class="cline-any cline-neutral">&nbsp;</span>
861
+ <span class="cline-any cline-no">&nbsp;</span>
862
+ <span class="cline-any cline-no">&nbsp;</span>
863
+ <span class="cline-any cline-no">&nbsp;</span>
864
+ <span class="cline-any cline-neutral">&nbsp;</span>
865
+ <span class="cline-any cline-no">&nbsp;</span>
866
+ <span class="cline-any cline-no">&nbsp;</span>
867
+ <span class="cline-any cline-no">&nbsp;</span>
868
+ <span class="cline-any cline-no">&nbsp;</span>
869
+ <span class="cline-any cline-no">&nbsp;</span>
870
+ <span class="cline-any cline-neutral">&nbsp;</span>
871
+ <span class="cline-any cline-no">&nbsp;</span>
872
+ <span class="cline-any cline-no">&nbsp;</span>
873
+ <span class="cline-any cline-no">&nbsp;</span>
874
+ <span class="cline-any cline-no">&nbsp;</span>
875
+ <span class="cline-any cline-no">&nbsp;</span>
876
+ <span class="cline-any cline-no">&nbsp;</span>
877
+ <span class="cline-any cline-no">&nbsp;</span>
878
+ <span class="cline-any cline-no">&nbsp;</span>
879
+ <span class="cline-any cline-neutral">&nbsp;</span>
880
+ <span class="cline-any cline-neutral">&nbsp;</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-no">&nbsp;</span>
885
+ <span class="cline-any cline-neutral">&nbsp;</span>
886
+ <span class="cline-any cline-no">&nbsp;</span>
887
+ <span class="cline-any cline-no">&nbsp;</span>
888
+ <span class="cline-any cline-no">&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-no">&nbsp;</span>
893
+ <span class="cline-any cline-no">&nbsp;</span>
894
+ <span class="cline-any cline-no">&nbsp;</span>
895
+ <span class="cline-any cline-no">&nbsp;</span>
896
+ <span class="cline-any cline-no">&nbsp;</span>
897
+ <span class="cline-any cline-neutral">&nbsp;</span>
898
+ <span class="cline-any cline-no">&nbsp;</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-no">&nbsp;</span>
910
+ <span class="cline-any cline-no">&nbsp;</span>
911
+ <span class="cline-any cline-no">&nbsp;</span>
912
+ <span class="cline-any cline-neutral">&nbsp;</span>
913
+ <span class="cline-any cline-neutral">&nbsp;</span>
914
+ <span class="cline-any cline-neutral">&nbsp;</span>
915
+ <span class="cline-any cline-neutral">&nbsp;</span>
916
+ <span class="cline-any cline-neutral">&nbsp;</span>
917
+ <span class="cline-any cline-no">&nbsp;</span>
918
+ <span class="cline-any cline-no">&nbsp;</span>
919
+ <span class="cline-any cline-neutral">&nbsp;</span>
920
+ <span class="cline-any cline-no">&nbsp;</span>
921
+ <span class="cline-any cline-neutral">&nbsp;</span>
922
+ <span class="cline-any cline-neutral">&nbsp;</span>
923
+ <span class="cline-any cline-no">&nbsp;</span>
924
+ <span class="cline-any cline-neutral">&nbsp;</span>
925
+ <span class="cline-any cline-neutral">&nbsp;</span>
926
+ <span class="cline-any cline-neutral">&nbsp;</span>
927
+ <span class="cline-any cline-neutral">&nbsp;</span>
928
+ <span class="cline-any cline-neutral">&nbsp;</span>
929
+ <span class="cline-any cline-neutral">&nbsp;</span>
930
+ <span class="cline-any cline-no">&nbsp;</span>
931
+ <span class="cline-any cline-no">&nbsp;</span>
932
+ <span class="cline-any cline-no">&nbsp;</span>
933
+ <span class="cline-any cline-no">&nbsp;</span>
934
+ <span class="cline-any cline-neutral">&nbsp;</span>
935
+ <span class="cline-any cline-neutral">&nbsp;</span>
936
+ <span class="cline-any cline-neutral">&nbsp;</span>
937
+ <span class="cline-any cline-neutral">&nbsp;</span>
938
+ <span class="cline-any cline-neutral">&nbsp;</span>
939
+ <span class="cline-any cline-neutral">&nbsp;</span>
940
+ <span class="cline-any cline-neutral">&nbsp;</span>
941
+ <span class="cline-any cline-neutral">&nbsp;</span>
942
+ <span class="cline-any cline-neutral">&nbsp;</span>
943
+ <span class="cline-any cline-neutral">&nbsp;</span>
944
+ <span class="cline-any cline-no">&nbsp;</span>
945
+ <span class="cline-any cline-neutral">&nbsp;</span>
946
+ <span class="cline-any cline-neutral">&nbsp;</span>
947
+ <span class="cline-any cline-neutral">&nbsp;</span>
948
+ <span class="cline-any cline-neutral">&nbsp;</span>
949
+ <span class="cline-any cline-neutral">&nbsp;</span>
950
+ <span class="cline-any cline-neutral">&nbsp;</span>
951
+ <span class="cline-any cline-no">&nbsp;</span>
952
+ <span class="cline-any cline-no">&nbsp;</span>
953
+ <span class="cline-any cline-neutral">&nbsp;</span>
954
+ <span class="cline-any cline-neutral">&nbsp;</span>
955
+ <span class="cline-any cline-neutral">&nbsp;</span>
956
+ <span class="cline-any cline-neutral">&nbsp;</span>
957
+ <span class="cline-any cline-no">&nbsp;</span>
958
+ <span class="cline-any cline-no">&nbsp;</span>
959
+ <span class="cline-any cline-no">&nbsp;</span>
960
+ <span class="cline-any cline-neutral">&nbsp;</span>
961
+ <span class="cline-any cline-neutral">&nbsp;</span>
962
+ <span class="cline-any cline-neutral">&nbsp;</span>
963
+ <span class="cline-any cline-neutral">&nbsp;</span>
964
+ <span class="cline-any cline-neutral">&nbsp;</span>
965
+ <span class="cline-any cline-neutral">&nbsp;</span>
966
+ <span class="cline-any cline-neutral">&nbsp;</span>
967
+ <span class="cline-any cline-neutral">&nbsp;</span>
968
+ <span class="cline-any cline-neutral">&nbsp;</span>
969
+ <span class="cline-any cline-neutral">&nbsp;</span>
970
+ <span class="cline-any cline-no">&nbsp;</span>
971
+ <span class="cline-any cline-neutral">&nbsp;</span>
972
+ <span class="cline-any cline-neutral">&nbsp;</span>
973
+ <span class="cline-any cline-neutral">&nbsp;</span>
974
+ <span class="cline-any cline-neutral">&nbsp;</span>
975
+ <span class="cline-any cline-neutral">&nbsp;</span>
976
+ <span class="cline-any cline-no">&nbsp;</span>
977
+ <span class="cline-any cline-neutral">&nbsp;</span>
978
+ <span class="cline-any cline-neutral">&nbsp;</span>
979
+ <span class="cline-any cline-neutral">&nbsp;</span>
980
+ <span class="cline-any cline-neutral">&nbsp;</span>
981
+ <span class="cline-any cline-neutral">&nbsp;</span>
982
+ <span class="cline-any cline-neutral">&nbsp;</span>
983
+ <span class="cline-any cline-neutral">&nbsp;</span>
984
+ <span class="cline-any cline-neutral">&nbsp;</span>
985
+ <span class="cline-any cline-neutral">&nbsp;</span>
986
+ <span class="cline-any cline-neutral">&nbsp;</span>
987
+ <span class="cline-any cline-neutral">&nbsp;</span>
988
+ <span class="cline-any cline-neutral">&nbsp;</span>
989
+ <span class="cline-any cline-no">&nbsp;</span>
990
+ <span class="cline-any cline-no">&nbsp;</span>
991
+ <span class="cline-any cline-no">&nbsp;</span>
992
+ <span class="cline-any cline-neutral">&nbsp;</span>
993
+ <span class="cline-any cline-neutral">&nbsp;</span>
994
+ <span class="cline-any cline-neutral">&nbsp;</span>
995
+ <span class="cline-any cline-neutral">&nbsp;</span>
996
+ <span class="cline-any cline-neutral">&nbsp;</span>
997
+ <span class="cline-any cline-neutral">&nbsp;</span>
998
+ <span class="cline-any cline-neutral">&nbsp;</span>
999
+ <span class="cline-any cline-no">&nbsp;</span>
1000
+ <span class="cline-any cline-neutral">&nbsp;</span>
1001
+ <span class="cline-any cline-neutral">&nbsp;</span>
1002
+ <span class="cline-any cline-neutral">&nbsp;</span>
1003
+ <span class="cline-any cline-neutral">&nbsp;</span>
1004
+ <span class="cline-any cline-neutral">&nbsp;</span>
1005
+ <span class="cline-any cline-no">&nbsp;</span>
1006
+ <span class="cline-any cline-neutral">&nbsp;</span>
1007
+ <span class="cline-any cline-neutral">&nbsp;</span>
1008
+ <span class="cline-any cline-neutral">&nbsp;</span>
1009
+ <span class="cline-any cline-neutral">&nbsp;</span>
1010
+ <span class="cline-any cline-neutral">&nbsp;</span>
1011
+ <span class="cline-any cline-neutral">&nbsp;</span>
1012
+ <span class="cline-any cline-neutral">&nbsp;</span>
1013
+ <span class="cline-any cline-no">&nbsp;</span>
1014
+ <span class="cline-any cline-no">&nbsp;</span>
1015
+ <span class="cline-any cline-no">&nbsp;</span>
1016
+ <span class="cline-any cline-neutral">&nbsp;</span>
1017
+ <span class="cline-any cline-no">&nbsp;</span>
1018
+ <span class="cline-any cline-neutral">&nbsp;</span>
1019
+ <span class="cline-any cline-no">&nbsp;</span>
1020
+ <span class="cline-any cline-neutral">&nbsp;</span>
1021
+ <span class="cline-any cline-neutral">&nbsp;</span>
1022
+ <span class="cline-any cline-neutral">&nbsp;</span>
1023
+ <span class="cline-any cline-no">&nbsp;</span>
1024
+ <span class="cline-any cline-no">&nbsp;</span>
1025
+ <span class="cline-any cline-neutral">&nbsp;</span>
1026
+ <span class="cline-any cline-neutral">&nbsp;</span>
1027
+ <span class="cline-any cline-neutral">&nbsp;</span>
1028
+ <span class="cline-any cline-neutral">&nbsp;</span>
1029
+ <span class="cline-any cline-neutral">&nbsp;</span>
1030
+ <span class="cline-any cline-neutral">&nbsp;</span>
1031
+ <span class="cline-any cline-neutral">&nbsp;</span>
1032
+ <span class="cline-any cline-neutral">&nbsp;</span>
1033
+ <span class="cline-any cline-neutral">&nbsp;</span>
1034
+ <span class="cline-any cline-neutral">&nbsp;</span>
1035
+ <span class="cline-any cline-neutral">&nbsp;</span>
1036
+ <span class="cline-any cline-neutral">&nbsp;</span>
1037
+ <span class="cline-any cline-no">&nbsp;</span>
1038
+ <span class="cline-any cline-no">&nbsp;</span>
1039
+ <span class="cline-any cline-neutral">&nbsp;</span>
1040
+ <span class="cline-any cline-neutral">&nbsp;</span>
1041
+ <span class="cline-any cline-no">&nbsp;</span>
1042
+ <span class="cline-any cline-no">&nbsp;</span>
1043
+ <span class="cline-any cline-neutral">&nbsp;</span>
1044
+ <span class="cline-any cline-neutral">&nbsp;</span>
1045
+ <span class="cline-any cline-no">&nbsp;</span>
1046
+ <span class="cline-any cline-no">&nbsp;</span>
1047
+ <span class="cline-any cline-neutral">&nbsp;</span>
1048
+ <span class="cline-any cline-neutral">&nbsp;</span>
1049
+ <span class="cline-any cline-neutral">&nbsp;</span>
1050
+ <span class="cline-any cline-neutral">&nbsp;</span>
1051
+ <span class="cline-any cline-no">&nbsp;</span>
1052
+ <span class="cline-any cline-no">&nbsp;</span>
1053
+ <span class="cline-any cline-no">&nbsp;</span>
1054
+ <span class="cline-any cline-neutral">&nbsp;</span>
1055
+ <span class="cline-any cline-neutral">&nbsp;</span>
1056
+ <span class="cline-any cline-neutral">&nbsp;</span>
1057
+ <span class="cline-any cline-neutral">&nbsp;</span>
1058
+ <span class="cline-any cline-neutral">&nbsp;</span>
1059
+ <span class="cline-any cline-neutral">&nbsp;</span>
1060
+ <span class="cline-any cline-neutral">&nbsp;</span>
1061
+ <span class="cline-any cline-neutral">&nbsp;</span>
1062
+ <span class="cline-any cline-no">&nbsp;</span>
1063
+ <span class="cline-any cline-neutral">&nbsp;</span>
1064
+ <span class="cline-any cline-neutral">&nbsp;</span>
1065
+ <span class="cline-any cline-neutral">&nbsp;</span>
1066
+ <span class="cline-any cline-neutral">&nbsp;</span>
1067
+ <span class="cline-any cline-neutral">&nbsp;</span>
1068
+ <span class="cline-any cline-no">&nbsp;</span>
1069
+ <span class="cline-any cline-neutral">&nbsp;</span>
1070
+ <span class="cline-any cline-neutral">&nbsp;</span>
1071
+ <span class="cline-any cline-neutral">&nbsp;</span>
1072
+ <span class="cline-any cline-neutral">&nbsp;</span>
1073
+ <span class="cline-any cline-neutral">&nbsp;</span>
1074
+ <span class="cline-any cline-neutral">&nbsp;</span>
1075
+ <span class="cline-any cline-neutral">&nbsp;</span>
1076
+ <span class="cline-any cline-neutral">&nbsp;</span>
1077
+ <span class="cline-any cline-neutral">&nbsp;</span>
1078
+ <span class="cline-any cline-neutral">&nbsp;</span>
1079
+ <span class="cline-any cline-neutral">&nbsp;</span>
1080
+ <span class="cline-any cline-neutral">&nbsp;</span>
1081
+ <span class="cline-any cline-no">&nbsp;</span>
1082
+ <span class="cline-any cline-no">&nbsp;</span>
1083
+ <span class="cline-any cline-no">&nbsp;</span>
1084
+ <span class="cline-any cline-neutral">&nbsp;</span>
1085
+ <span class="cline-any cline-neutral">&nbsp;</span>
1086
+ <span class="cline-any cline-neutral">&nbsp;</span>
1087
+ <span class="cline-any cline-neutral">&nbsp;</span>
1088
+ <span class="cline-any cline-neutral">&nbsp;</span>
1089
+ <span class="cline-any cline-no">&nbsp;</span>
1090
+ <span class="cline-any cline-neutral">&nbsp;</span>
1091
+ <span class="cline-any cline-neutral">&nbsp;</span>
1092
+ <span class="cline-any cline-neutral">&nbsp;</span>
1093
+ <span class="cline-any cline-neutral">&nbsp;</span>
1094
+ <span class="cline-any cline-neutral">&nbsp;</span>
1095
+ <span class="cline-any cline-no">&nbsp;</span>
1096
+ <span class="cline-any cline-neutral">&nbsp;</span>
1097
+ <span class="cline-any cline-neutral">&nbsp;</span>
1098
+ <span class="cline-any cline-neutral">&nbsp;</span>
1099
+ <span class="cline-any cline-neutral">&nbsp;</span>
1100
+ <span class="cline-any cline-neutral">&nbsp;</span>
1101
+ <span class="cline-any cline-no">&nbsp;</span>
1102
+ <span class="cline-any cline-neutral">&nbsp;</span>
1103
+ <span class="cline-any cline-neutral">&nbsp;</span>
1104
+ <span class="cline-any cline-no">&nbsp;</span>
1105
+ <span class="cline-any cline-no">&nbsp;</span>
1106
+ <span class="cline-any cline-no">&nbsp;</span>
1107
+ <span class="cline-any cline-neutral">&nbsp;</span>
1108
+ <span class="cline-any cline-neutral">&nbsp;</span>
1109
+ <span class="cline-any cline-neutral">&nbsp;</span>
1110
+ <span class="cline-any cline-neutral">&nbsp;</span>
1111
+ <span class="cline-any cline-neutral">&nbsp;</span>
1112
+ <span class="cline-any cline-no">&nbsp;</span>
1113
+ <span class="cline-any cline-neutral">&nbsp;</span>
1114
+ <span class="cline-any cline-neutral">&nbsp;</span>
1115
+ <span class="cline-any cline-neutral">&nbsp;</span>
1116
+ <span class="cline-any cline-neutral">&nbsp;</span>
1117
+ <span class="cline-any cline-neutral">&nbsp;</span>
1118
+ <span class="cline-any cline-no">&nbsp;</span>
1119
+ <span class="cline-any cline-neutral">&nbsp;</span>
1120
+ <span class="cline-any cline-neutral">&nbsp;</span>
1121
+ <span class="cline-any cline-neutral">&nbsp;</span>
1122
+ <span class="cline-any cline-neutral">&nbsp;</span>
1123
+ <span class="cline-any cline-no">&nbsp;</span>
1124
+ <span class="cline-any cline-no">&nbsp;</span>
1125
+ <span class="cline-any cline-neutral">&nbsp;</span>
1126
+ <span class="cline-any cline-no">&nbsp;</span>
1127
+ <span class="cline-any cline-neutral">&nbsp;</span>
1128
+ <span class="cline-any cline-neutral">&nbsp;</span>
1129
+ <span class="cline-any cline-neutral">&nbsp;</span>
1130
+ <span class="cline-any cline-neutral">&nbsp;</span></td><td class="text"><pre class="prettyprint lang-js">import { Injectable, Logger } from '@nestjs/common';
1131
+ import {
1132
+ LlmProvider,
1133
+ LlmProviderRequest,
1134
+ LlmContent,
1135
+ LlmModel,
1136
+ LlmResponse,
1137
+ LlmFunctionTool,
1138
+ LlmToolCall,
1139
+ } from './llm-provider.interface';
1140
+ import { ApplicationStateService } from '../application-state/application-state.service';
1141
+ import { LlmCallLogsService } from '../llm-call-logs/llm-call-logs.service';
1142
+ &nbsp;
1143
+ @Injectable()
1144
+ export class AlibabaLlmProvider implements LlmProvider {
1145
+ private readonly logger = new Logger(AlibabaLlmProvider.name);
1146
+ private readonly baseUrl = 'https://coding-intl.dashscope.aliyuncs.com/v1';
1147
+ &nbsp;
1148
+ constructor(
1149
+ private readonly applicationStateService: ApplicationStateService,
1150
+ private readonly llmCallLogsService: LlmCallLogsService,
1151
+ ) {}
1152
+ &nbsp;
1153
+ private <span class="fstat-no" title="function not covered" >mapHistory(</span>history: LlmContent[]) {
1154
+ <span class="cstat-no" title="statement not covered" > return history.map(<span class="fstat-no" title="function not covered" >(t</span>urn) =&gt; {</span>
1155
+ // Handle tool result messages
1156
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (turn.role === 'tool') {</span>
1157
+ <span class="cstat-no" title="statement not covered" > return {</span>
1158
+ role: 'tool',
1159
+ tool_call_id: turn.tool_call_id,
1160
+ content: turn.parts.map(<span class="fstat-no" title="function not covered" >(p</span>) =&gt; <span class="cstat-no" title="statement not covered" >p.text)</span>.join(''),
1161
+ };
1162
+ }
1163
+ &nbsp;
1164
+ const mappedTurn: any = <span class="cstat-no" title="statement not covered" >{</span>
1165
+ role: turn.role === 'model' ? 'assistant' : 'user',
1166
+ content: turn.parts.map(<span class="fstat-no" title="function not covered" >(p</span>) =&gt; <span class="cstat-no" title="statement not covered" >p.text)</span>.join(''),
1167
+ };
1168
+ &nbsp;
1169
+ // Attach thoughts if they exist in history
1170
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (turn.thoughts) {</span>
1171
+ <span class="cstat-no" title="statement not covered" > mappedTurn.thoughts = turn.thoughts;</span>
1172
+ }
1173
+ &nbsp;
1174
+ // Handle tool_calls if present
1175
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (turn.tool_calls) {</span>
1176
+ <span class="cstat-no" title="statement not covered" > mappedTurn.tool_calls = turn.tool_calls.map(<span class="fstat-no" title="function not covered" >(t</span>c) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
1177
+ id: tc.id,
1178
+ type: tc.type,
1179
+ function: {
1180
+ name: tc.function.name,
1181
+ // API requires arguments to be a JSON string
1182
+ arguments:
1183
+ typeof tc.function.arguments === 'string'
1184
+ ? tc.function.arguments
1185
+ : JSON.stringify(tc.function.arguments),
1186
+ },
1187
+ }));
1188
+ }
1189
+ &nbsp;
1190
+ <span class="cstat-no" title="statement not covered" > return mappedTurn;</span>
1191
+ });
1192
+ }
1193
+ &nbsp;
1194
+ private <span class="fstat-no" title="function not covered" >mapTools(</span>tools?: LlmFunctionTool[]): any[] | undefined {
1195
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!tools || tools.length === 0) <span class="cstat-no" title="statement not covered" >return undefined;</span></span>
1196
+ &nbsp;
1197
+ <span class="cstat-no" title="statement not covered" > return tools.map(<span class="fstat-no" title="function not covered" >(t</span>ool) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
1198
+ type: tool.type,
1199
+ function: {
1200
+ name: tool.function.name,
1201
+ description: tool.function.description,
1202
+ parameters: tool.function.parameters,
1203
+ },
1204
+ }));
1205
+ }
1206
+ &nbsp;
1207
+ <span class="fstat-no" title="function not covered" > async </span>getModels(): Promise&lt;LlmModel[]&gt; {
1208
+ const apiKey = <span class="cstat-no" title="statement not covered" >await this.applicationStateService.getAlibabaApiKey();</span>
1209
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!apiKey) <span class="cstat-no" title="statement not covered" >return [];</span></span>
1210
+ &nbsp;
1211
+ // Alibaba does not have a public /models endpoint, so we hardcode them
1212
+ const models = <span class="cstat-no" title="statement not covered" >[</span>
1213
+ { id: 'alibaba/qwen3.6-plus', name: 'Qwen3.6 Plus (Vision)' },
1214
+ { id: 'alibaba/qwen3.5-plus', name: 'Qwen3.5 Plus (Vision)' },
1215
+ { id: 'alibaba/kimi-k2.5', name: 'Kimi K2.5 (Vision)' },
1216
+ { id: 'alibaba/glm-5', name: 'GLM-5' },
1217
+ { id: 'alibaba/MiniMax-M2.5', name: 'MiniMax M2.5' },
1218
+ { id: 'alibaba/qwen3-max-2026-01-23', name: 'Qwen3 Max' },
1219
+ { id: 'alibaba/qwen3-coder-next', name: 'Qwen3 Coder Next' },
1220
+ { id: 'alibaba/qwen3-coder-plus', name: 'Qwen3 Coder Plus' },
1221
+ { id: 'alibaba/glm-4.7', name: 'GLM-4.7' },
1222
+ ];
1223
+ &nbsp;
1224
+ <span class="cstat-no" title="statement not covered" > return models.map(<span class="fstat-no" title="function not covered" >(m</span>) =&gt; (<span class="cstat-no" title="statement not covered" >{ ...m, provider: 'alibaba' })</span>);</span>
1225
+ }
1226
+ &nbsp;
1227
+ <span class="fstat-no" title="function not covered" > async </span>generateContent(request: LlmProviderRequest): Promise&lt;LlmResponse&gt; {
1228
+ const apiKey = <span class="cstat-no" title="statement not covered" >await this.applicationStateService.getAlibabaApiKey();</span>
1229
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!apiKey) {</span>
1230
+ <span class="cstat-no" title="statement not covered" > throw new Error('Alibaba API Key is not configured in settings.');</span>
1231
+ }
1232
+ &nbsp;
1233
+ const {
1234
+ prompt,
1235
+ systemInstruction,
1236
+ history,
1237
+ modelId,
1238
+ generationConfig,
1239
+ tools,
1240
+ tool_choice,
1241
+ onToken,
1242
+ abortController,
1243
+ } = <span class="cstat-no" title="statement not covered" >request;</span>
1244
+ &nbsp;
1245
+ // Strip the 'alibaba/' prefix
1246
+ const alibabaModelId = <span class="cstat-no" title="statement not covered" >modelId</span>
1247
+ ? modelId.replace(/^alibaba\//, '')
1248
+ : 'qwen3.5-plus';
1249
+ &nbsp;
1250
+ const messages = <span class="cstat-no" title="statement not covered" >[];</span>
1251
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (systemInstruction) {</span>
1252
+ <span class="cstat-no" title="statement not covered" > messages.push({ role: 'system', content: systemInstruction });</span>
1253
+ }
1254
+ &nbsp;
1255
+ // If history is provided, it includes the latest user input
1256
+ <span class="cstat-no" title="statement not covered" > if (history &amp;&amp; history.length &gt; 0) {</span>
1257
+ <span class="cstat-no" title="statement not covered" > messages.push(...this.mapHistory(history));</span>
1258
+ } else {
1259
+ <span class="cstat-no" title="statement not covered" > messages.push({ role: 'user', content: prompt });</span>
1260
+ }
1261
+ &nbsp;
1262
+ <span class="cstat-no" title="statement not covered" > await this.applicationStateService.trackUsedModel(modelId);</span>
1263
+ &nbsp;
1264
+ <span class="cstat-no" title="statement not covered" > this.logger.log(`Calling Alibaba API with model: ${alibabaModelId}`);</span>
1265
+ &nbsp;
1266
+ // Create LLM call log
1267
+ const startTime = <span class="cstat-no" title="statement not covered" >Date.now();</span>
1268
+ let llmCallLogId: string | null = <span class="cstat-no" title="statement not covered" >null;</span>
1269
+ &nbsp;
1270
+ <span class="cstat-no" title="statement not covered" > try {</span>
1271
+ <span class="cstat-no" title="statement not covered" > llmCallLogId = (</span>
1272
+ await this.llmCallLogsService.createLog({
1273
+ session_input_id: 'pending',
1274
+ provider: 'alibaba',
1275
+ model_id: alibabaModelId,
1276
+ request_body: JSON.stringify({
1277
+ model: alibabaModelId,
1278
+ messages,
1279
+ tools,
1280
+ tool_choice,
1281
+ stream: !!onToken,
1282
+ temperature: generationConfig?.temperature,
1283
+ max_tokens: generationConfig?.maxOutputTokens,
1284
+ top_p: generationConfig?.topP,
1285
+ }),
1286
+ })
1287
+ ).id;
1288
+ } catch (logError) {
1289
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(`Failed to create LLM call log: ${logError.message}`);</span>
1290
+ }
1291
+ &nbsp;
1292
+ <span class="cstat-no" title="statement not covered" > try {</span>
1293
+ const body: any = <span class="cstat-no" title="statement not covered" >{</span>
1294
+ model: alibabaModelId,
1295
+ messages,
1296
+ extra_body: { enable_thinking: true },
1297
+ parallel_tool_calls: true, // Enable parallel tool calls for better performance
1298
+ };
1299
+ &nbsp;
1300
+ // Add tools if provided
1301
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (tools &amp;&amp; tools.length &gt; 0) {</span>
1302
+ <span class="cstat-no" title="statement not covered" > body.tools = this.mapTools(tools);</span>
1303
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (tool_choice) {</span>
1304
+ <span class="cstat-no" title="statement not covered" > body.tool_choice = tool_choice;</span>
1305
+ }
1306
+ }
1307
+ &nbsp;
1308
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (onToken) {</span>
1309
+ <span class="cstat-no" title="statement not covered" > body.stream = true;</span>
1310
+ <span class="cstat-no" title="statement not covered" > body.stream_options = { include_usage: true };</span>
1311
+ }
1312
+ &nbsp;
1313
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (generationConfig) {</span>
1314
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (generationConfig.temperature !== undefined)</span>
1315
+ <span class="cstat-no" title="statement not covered" > body.temperature = generationConfig.temperature;</span>
1316
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (generationConfig.maxOutputTokens !== undefined)</span>
1317
+ <span class="cstat-no" title="statement not covered" > body.max_tokens = generationConfig.maxOutputTokens;</span>
1318
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (generationConfig.topP !== undefined)</span>
1319
+ <span class="cstat-no" title="statement not covered" > body.top_p = generationConfig.topP;</span>
1320
+ &nbsp;
1321
+ // Alibaba-specific: enable_thinking for reasoning models
1322
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (generationConfig.reasoning) {</span>
1323
+ <span class="cstat-no" title="statement not covered" > body.enable_thinking = true;</span>
1324
+ }
1325
+ }
1326
+ &nbsp;
1327
+ const response = <span class="cstat-no" title="statement not covered" >await fetch(`${this.baseUrl}/chat/completions`, {</span>
1328
+ method: 'POST',
1329
+ headers: {
1330
+ 'Content-Type': 'application/json',
1331
+ Authorization: `Bearer ${apiKey}`,
1332
+ },
1333
+ body: JSON.stringify(body),
1334
+ signal: abortController?.signal,
1335
+ });
1336
+ &nbsp;
1337
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!response.ok) {</span>
1338
+ const errorText = <span class="cstat-no" title="statement not covered" >await response.text();</span>
1339
+ const errorData = <span class="cstat-no" title="statement not covered" >this.tryParseJson(errorText);</span>
1340
+ const errorMessage =
1341
+ <span class="cstat-no" title="statement not covered" > errorData?.message || `Alibaba API error: ${response.statusText}`;</span>
1342
+ &nbsp;
1343
+ // Update log with error
1344
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (llmCallLogId) {</span>
1345
+ <span class="cstat-no" title="statement not covered" > try {</span>
1346
+ <span class="cstat-no" title="statement not covered" > await this.llmCallLogsService.updateLog(llmCallLogId, {</span>
1347
+ status_code: response.status,
1348
+ latency_ms: Date.now() - startTime,
1349
+ error_message: errorMessage,
1350
+ response_body: errorText,
1351
+ });
1352
+ } catch (updateError) {
1353
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1354
+ `Failed to update LLM call log: ${updateError.message}`,
1355
+ );
1356
+ }
1357
+ }
1358
+ &nbsp;
1359
+ const error = <span class="cstat-no" title="statement not covered" >new Error(errorMessage) as Error &amp; { status: number };</span>
1360
+ <span class="cstat-no" title="statement not covered" > error.status = response.status;</span>
1361
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
1362
+ }
1363
+ &nbsp;
1364
+ // Handle streaming response
1365
+ let accumulatedResponseBody = <span class="cstat-no" title="statement not covered" >'';</span>
1366
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (onToken &amp;&amp; response.body) {</span>
1367
+ const reader = <span class="cstat-no" title="statement not covered" >response.body.getReader();</span>
1368
+ const decoder = <span class="cstat-no" title="statement not covered" >new TextDecoder();</span>
1369
+ let buffer = <span class="cstat-no" title="statement not covered" >'';</span>
1370
+ let accumulatedResponse = <span class="cstat-no" title="statement not covered" >'';</span>
1371
+ let accumulatedReasoning = <span class="cstat-no" title="statement not covered" >'';</span>
1372
+ let isFirst = <span class="cstat-no" title="statement not covered" >true;</span>
1373
+ let usageData: {
1374
+ prompt_tokens: number;
1375
+ completion_tokens: number;
1376
+ prompt_tokens_details?: {
1377
+ cached_tokens: number;
1378
+ };
1379
+ } | null = <span class="cstat-no" title="statement not covered" >null;</span>
1380
+ &nbsp;
1381
+ // Accumulate tool calls across streaming chunks
1382
+ const accumulatedToolCalls = <span class="cstat-no" title="statement not covered" >new Map&lt;number, LlmToolCall&gt;();</span>
1383
+ &nbsp;
1384
+ <span class="cstat-no" title="statement not covered" > while (true) {</span>
1385
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (abortController?.signal?.aborted) {</span>
1386
+ <span class="cstat-no" title="statement not covered" > throw new DOMException('The operation was aborted', 'AbortError');</span>
1387
+ }
1388
+ &nbsp;
1389
+ const { done, value } = <span class="cstat-no" title="statement not covered" >await reader.read();</span>
1390
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (done) {</span>
1391
+ <span class="cstat-no" title="statement not covered" > break;</span>
1392
+ }
1393
+ <span class="cstat-no" title="statement not covered" > buffer += decoder.decode(value, { stream: true });</span>
1394
+ const lines = <span class="cstat-no" title="statement not covered" >buffer.split('\n');</span>
1395
+ <span class="cstat-no" title="statement not covered" > buffer = lines.pop() || '';</span>
1396
+ &nbsp;
1397
+ <span class="cstat-no" title="statement not covered" > for (const line of lines) {</span>
1398
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (line.startsWith('data: ')) {</span>
1399
+ const dataStr = <span class="cstat-no" title="statement not covered" >line.substring(6);</span>
1400
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (dataStr.trim() === '[DONE]') {</span>
1401
+ <span class="cstat-no" title="statement not covered" > break;</span>
1402
+ }
1403
+ <span class="cstat-no" title="statement not covered" > try {</span>
1404
+ const parsed = <span class="cstat-no" title="statement not covered" >JSON.parse(dataStr);</span>
1405
+ const chunk = <span class="cstat-no" title="statement not covered" >parsed.choices?.[0]?.delta?.content;</span>
1406
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (chunk) {</span>
1407
+ <span class="cstat-no" title="statement not covered" > accumulatedResponse += chunk;</span>
1408
+ <span class="cstat-no" title="statement not covered" > onToken(chunk, isFirst);</span>
1409
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (isFirst) {</span>
1410
+ <span class="cstat-no" title="statement not covered" > isFirst = false;</span>
1411
+ }
1412
+ }
1413
+ &nbsp;
1414
+ // Capture reasoning content from streaming
1415
+ const reasoningChunk =
1416
+ <span class="cstat-no" title="statement not covered" > parsed.choices?.[0]?.delta?.reasoning_content ||</span>
1417
+ parsed.choices?.[0]?.delta?.reasoning;
1418
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (reasoningChunk) {</span>
1419
+ <span class="cstat-no" title="statement not covered" > accumulatedReasoning += reasoningChunk;</span>
1420
+ <span class="cstat-no" title="statement not covered" > onToken?.('', false, reasoningChunk);</span>
1421
+ }
1422
+ &nbsp;
1423
+ // Handle streaming tool_calls
1424
+ const deltaToolCalls = <span class="cstat-no" title="statement not covered" >parsed.choices?.[0]?.delta?.tool_calls;</span>
1425
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (deltaToolCalls) {</span>
1426
+ <span class="cstat-no" title="statement not covered" > for (const deltaCall of deltaToolCalls) {</span>
1427
+ const index = <span class="cstat-no" title="statement not covered" >deltaCall.index;</span>
1428
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!accumulatedToolCalls.has(index)) {</span>
1429
+ // New tool call
1430
+ <span class="cstat-no" title="statement not covered" > accumulatedToolCalls.set(index, {</span>
1431
+ id: deltaCall.id,
1432
+ type: deltaCall.type,
1433
+ function: {
1434
+ name: deltaCall.function?.name || '',
1435
+ arguments: '',
1436
+ },
1437
+ });
1438
+ }
1439
+ &nbsp;
1440
+ // Accumulate partial arguments
1441
+ const existing = <span class="cstat-no" title="statement not covered" >accumulatedToolCalls.get(index)!;</span>
1442
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (deltaCall.function?.arguments) {</span>
1443
+ <span class="cstat-no" title="statement not covered" > existing.function.arguments +=</span>
1444
+ deltaCall.function.arguments;
1445
+ }
1446
+ }
1447
+ }
1448
+ &nbsp;
1449
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (parsed.usage) {</span>
1450
+ <span class="cstat-no" title="statement not covered" > usageData = parsed.usage;</span>
1451
+ // Accumulate response body for logging
1452
+ <span class="cstat-no" title="statement not covered" > accumulatedResponseBody += dataStr + '\n';</span>
1453
+ }
1454
+ } catch (e) {
1455
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(`Error parsing stream chunk: ${dataStr}`, e);</span>
1456
+ }
1457
+ }
1458
+ }
1459
+ }
1460
+ &nbsp;
1461
+ // Parse accumulated tool call arguments from JSON string to object
1462
+ const finalToolCalls: LlmToolCall[] = <span class="cstat-no" title="statement not covered" >[];</span>
1463
+ <span class="cstat-no" title="statement not covered" > for (const toolCall of accumulatedToolCalls.values()) {</span>
1464
+ <span class="cstat-no" title="statement not covered" > try {</span>
1465
+ <span class="cstat-no" title="statement not covered" > finalToolCalls.push({</span>
1466
+ ...toolCall,
1467
+ function: {
1468
+ ...toolCall.function,
1469
+ arguments:
1470
+ typeof toolCall.function.arguments === 'string'
1471
+ ? JSON.parse(toolCall.function.arguments as string)
1472
+ : toolCall.function.arguments,
1473
+ },
1474
+ });
1475
+ } catch (e) {
1476
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1477
+ `Failed to parse tool call arguments: ${toolCall.function.arguments}`,
1478
+ e,
1479
+ );
1480
+ }
1481
+ }
1482
+ &nbsp;
1483
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (usageData) {</span>
1484
+ <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1485
+ `Alibaba stream finished. Usage: ${usageData.prompt_tokens} prompt, ${usageData.completion_tokens} completion tokens.`,
1486
+ );
1487
+ &nbsp;
1488
+ // Update log with successful streaming response
1489
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (llmCallLogId) {</span>
1490
+ <span class="cstat-no" title="statement not covered" > try {</span>
1491
+ <span class="cstat-no" title="statement not covered" > await this.llmCallLogsService.updateLog(llmCallLogId, {</span>
1492
+ status_code: response.status,
1493
+ latency_ms: Date.now() - startTime,
1494
+ response_body:
1495
+ accumulatedResponseBody ||
1496
+ JSON.stringify({ usage: usageData, stream_chunks: '...' }),
1497
+ input_tokens: usageData.prompt_tokens,
1498
+ output_tokens: usageData.completion_tokens,
1499
+ cached_tokens: usageData.prompt_tokens_details?.cached_tokens,
1500
+ });
1501
+ } catch (updateError) {
1502
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1503
+ `Failed to update LLM call log: ${updateError.message}`,
1504
+ );
1505
+ }
1506
+ }
1507
+ &nbsp;
1508
+ <span class="cstat-no" title="statement not covered" > return {</span>
1509
+ text: accumulatedResponse,
1510
+ usage: {
1511
+ inputTokens: usageData.prompt_tokens,
1512
+ outputTokens: usageData.completion_tokens,
1513
+ cachedTokens: usageData.prompt_tokens_details?.cached_tokens,
1514
+ },
1515
+ tool_calls: finalToolCalls.length &gt; 0 ? finalToolCalls : undefined,
1516
+ thoughts: accumulatedReasoning || undefined,
1517
+ };
1518
+ }
1519
+ &nbsp;
1520
+ // Update log even without usage data
1521
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (llmCallLogId) {</span>
1522
+ <span class="cstat-no" title="statement not covered" > try {</span>
1523
+ <span class="cstat-no" title="statement not covered" > await this.llmCallLogsService.updateLog(llmCallLogId, {</span>
1524
+ status_code: response.status,
1525
+ latency_ms: Date.now() - startTime,
1526
+ response_body:
1527
+ accumulatedResponseBody ||
1528
+ JSON.stringify({ stream_chunks: '...' }),
1529
+ });
1530
+ } catch (updateError) {
1531
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1532
+ `Failed to update LLM call log: ${updateError.message}`,
1533
+ );
1534
+ }
1535
+ }
1536
+ &nbsp;
1537
+ <span class="cstat-no" title="statement not covered" > return {</span>
1538
+ text: accumulatedResponse,
1539
+ tool_calls: finalToolCalls.length &gt; 0 ? finalToolCalls : undefined,
1540
+ thoughts: accumulatedReasoning || undefined,
1541
+ };
1542
+ }
1543
+ &nbsp;
1544
+ // Handle non-streaming response
1545
+ const data = <span class="cstat-no" title="statement not covered" >await response.json();</span>
1546
+ const content = <span class="cstat-no" title="statement not covered" >data.choices?.[0]?.message?.content;</span>
1547
+ const rawToolCalls = <span class="cstat-no" title="statement not covered" >data.choices?.[0]?.message?.tool_calls;</span>
1548
+ const reasoningContent =
1549
+ <span class="cstat-no" title="statement not covered" > data.choices?.[0]?.message?.reasoning_content ||</span>
1550
+ data.choices?.[0]?.message?.reasoning;
1551
+ const usage = <span class="cstat-no" title="statement not covered" >data.usage;</span>
1552
+ &nbsp;
1553
+ // Parse tool calls if present
1554
+ let parsedToolCalls: LlmToolCall[] | undefined;
1555
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (rawToolCalls &amp;&amp; rawToolCalls.length &gt; 0) {</span>
1556
+ <span class="cstat-no" title="statement not covered" > parsedToolCalls = rawToolCalls.map(<span class="fstat-no" title="function not covered" >(t</span>c: any) =&gt; (<span class="cstat-no" title="statement not covered" >{</span></span>
1557
+ id: tc.id,
1558
+ type: tc.type,
1559
+ function: {
1560
+ name: tc.function.name,
1561
+ arguments:
1562
+ typeof tc.function.arguments === 'string'
1563
+ ? JSON.parse(tc.function.arguments)
1564
+ : tc.function.arguments,
1565
+ },
1566
+ }));
1567
+ }
1568
+ &nbsp;
1569
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (!content &amp;&amp; !parsedToolCalls) {</span>
1570
+ const error = <span class="cstat-no" title="statement not covered" >new Error(</span>
1571
+ 'Alibaba returned an empty response.',
1572
+ ) as Error &amp; { status: number };
1573
+ <span class="cstat-no" title="statement not covered" > error.status = response.status || 0;</span>
1574
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
1575
+ }
1576
+ &nbsp;
1577
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (usage) {</span>
1578
+ <span class="cstat-no" title="statement not covered" > this.logger.log(</span>
1579
+ `Alibaba response. Usage: ${usage.prompt_tokens} prompt, ${usage.completion_tokens} completion tokens`,
1580
+ );
1581
+ &nbsp;
1582
+ // Update log with successful non-streaming response
1583
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (llmCallLogId) {</span>
1584
+ <span class="cstat-no" title="statement not covered" > try {</span>
1585
+ <span class="cstat-no" title="statement not covered" > await this.llmCallLogsService.updateLog(llmCallLogId, {</span>
1586
+ status_code: response.status,
1587
+ latency_ms: Date.now() - startTime,
1588
+ response_body: JSON.stringify(data),
1589
+ input_tokens: usage.prompt_tokens,
1590
+ output_tokens: usage.completion_tokens,
1591
+ cached_tokens: usage.prompt_tokens_details?.cached_tokens,
1592
+ });
1593
+ } catch (updateError) {
1594
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1595
+ `Failed to update LLM call log: ${updateError.message}`,
1596
+ );
1597
+ }
1598
+ }
1599
+ &nbsp;
1600
+ <span class="cstat-no" title="statement not covered" > return {</span>
1601
+ text: content || '',
1602
+ usage: {
1603
+ inputTokens: usage.prompt_tokens,
1604
+ outputTokens: usage.completion_tokens,
1605
+ cachedTokens: usage.prompt_tokens_details?.cached_tokens,
1606
+ },
1607
+ tool_calls: parsedToolCalls,
1608
+ thoughts: reasoningContent || undefined,
1609
+ };
1610
+ }
1611
+ &nbsp;
1612
+ // Update log even without usage data
1613
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (llmCallLogId) {</span>
1614
+ <span class="cstat-no" title="statement not covered" > try {</span>
1615
+ <span class="cstat-no" title="statement not covered" > await this.llmCallLogsService.updateLog(llmCallLogId, {</span>
1616
+ status_code: response.status,
1617
+ latency_ms: Date.now() - startTime,
1618
+ response_body: JSON.stringify(data),
1619
+ });
1620
+ } catch (updateError) {
1621
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1622
+ `Failed to update LLM call log: ${updateError.message}`,
1623
+ );
1624
+ }
1625
+ }
1626
+ &nbsp;
1627
+ <span class="cstat-no" title="statement not covered" > return {</span>
1628
+ text: content || '',
1629
+ tool_calls: parsedToolCalls,
1630
+ thoughts: reasoningContent || undefined,
1631
+ };
1632
+ } catch (error) {
1633
+ <span class="cstat-no" title="statement not covered" > this.logger.error(`Alibaba generation failed: ${error.message}`);</span>
1634
+ &nbsp;
1635
+ // Update log with error if it wasn't already updated
1636
+ <span class="cstat-no" title="statement not covered" > <span class="missing-if-branch" title="if path not taken" >I</span>if (llmCallLogId) {</span>
1637
+ <span class="cstat-no" title="statement not covered" > try {</span>
1638
+ <span class="cstat-no" title="statement not covered" > await this.llmCallLogsService.updateLog(llmCallLogId, {</span>
1639
+ status_code: null,
1640
+ latency_ms: Date.now() - startTime,
1641
+ error_message: error.message,
1642
+ });
1643
+ } catch (updateError) {
1644
+ <span class="cstat-no" title="statement not covered" > this.logger.warn(</span>
1645
+ `Failed to update LLM call log: ${updateError.message}`,
1646
+ );
1647
+ }
1648
+ }
1649
+ &nbsp;
1650
+ <span class="cstat-no" title="statement not covered" > throw error;</span>
1651
+ }
1652
+ }
1653
+ &nbsp;
1654
+ private <span class="fstat-no" title="function not covered" >tryParseJson(</span>text: string): any {
1655
+ <span class="cstat-no" title="statement not covered" > try {</span>
1656
+ <span class="cstat-no" title="statement not covered" > return JSON.parse(text);</span>
1657
+ } catch {
1658
+ <span class="cstat-no" title="statement not covered" > return null;</span>
1659
+ }
1660
+ }
1661
+ }
1662
+ &nbsp;</pre></td></tr></table></pre>
1663
+
1664
+ <div class='push'></div><!-- for sticky footer -->
1665
+ </div><!-- /wrapper -->
1666
+ <div class='footer quiet pad2 space-top1 center small'>
1667
+ Code coverage generated by
1668
+ <a href="https://istanbul.js.org/" target="_blank" rel="noopener noreferrer">istanbul</a>
1669
+ at 2026-05-09T01:03:45.353Z
1670
+ </div>
1671
+ <script src="../../prettify.js"></script>
1672
+ <script>
1673
+ window.onload = function () {
1674
+ prettyPrint();
1675
+ };
1676
+ </script>
1677
+ <script src="../../sorter.js"></script>
1678
+ <script src="../../block-navigation.js"></script>
1679
+ </body>
1680
+ </html>
1681
+