@futdevpro/ccap 1.1.3215 → 1.1.3371

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 (397) hide show
  1. package/cli/build/_collections/update/update-verify-install.interface.d.ts +23 -0
  2. package/cli/build/_collections/update/update-verify-install.interface.d.ts.map +1 -0
  3. package/cli/build/_collections/update/update-verify-install.interface.js +3 -0
  4. package/cli/build/_collections/update/update-verify-install.interface.js.map +1 -0
  5. package/cli/build/_collections/update/update-verify-install.util.d.ts +50 -0
  6. package/cli/build/_collections/update/update-verify-install.util.d.ts.map +1 -0
  7. package/cli/build/_collections/update/update-verify-install.util.js +179 -0
  8. package/cli/build/_collections/update/update-verify-install.util.js.map +1 -0
  9. package/cli/build/_collections/update/update-verify-install.util.spec.d.ts +6 -0
  10. package/cli/build/_collections/update/update-verify-install.util.spec.d.ts.map +1 -0
  11. package/cli/build/_collections/update/update-verify-install.util.spec.js +117 -0
  12. package/cli/build/_collections/update/update-verify-install.util.spec.js.map +1 -0
  13. package/cli/build/_commands/cc-inspect-options.interface.d.ts +11 -0
  14. package/cli/build/_commands/cc-inspect-options.interface.d.ts.map +1 -0
  15. package/cli/build/_commands/cc-inspect-options.interface.js +3 -0
  16. package/cli/build/_commands/cc-inspect-options.interface.js.map +1 -0
  17. package/cli/build/_commands/cc-inspect.d.ts +33 -0
  18. package/cli/build/_commands/cc-inspect.d.ts.map +1 -0
  19. package/cli/build/_commands/cc-inspect.js +228 -0
  20. package/cli/build/_commands/cc-inspect.js.map +1 -0
  21. package/cli/build/_commands/input.d.ts +55 -0
  22. package/cli/build/_commands/input.d.ts.map +1 -0
  23. package/cli/build/_commands/input.interface.d.ts +21 -0
  24. package/cli/build/_commands/input.interface.d.ts.map +1 -0
  25. package/cli/build/_commands/input.interface.js +3 -0
  26. package/cli/build/_commands/input.interface.js.map +1 -0
  27. package/cli/build/_commands/input.js +183 -0
  28. package/cli/build/_commands/input.js.map +1 -0
  29. package/cli/build/_commands/input.spec.d.ts +8 -0
  30. package/cli/build/_commands/input.spec.d.ts.map +1 -0
  31. package/cli/build/_commands/input.spec.js +63 -0
  32. package/cli/build/_commands/input.spec.js.map +1 -0
  33. package/cli/build/_commands/skill-doc.d.ts +63 -0
  34. package/cli/build/_commands/skill-doc.d.ts.map +1 -0
  35. package/cli/build/_commands/skill-doc.interface.d.ts +19 -0
  36. package/cli/build/_commands/skill-doc.interface.d.ts.map +1 -0
  37. package/cli/build/_commands/skill-doc.interface.js +3 -0
  38. package/cli/build/_commands/skill-doc.interface.js.map +1 -0
  39. package/cli/build/_commands/skill-doc.js +421 -0
  40. package/cli/build/_commands/skill-doc.js.map +1 -0
  41. package/cli/build/_commands/skill-doc.spec.d.ts +10 -0
  42. package/cli/build/_commands/skill-doc.spec.d.ts.map +1 -0
  43. package/cli/build/_commands/skill-doc.spec.js +112 -0
  44. package/cli/build/_commands/skill-doc.spec.js.map +1 -0
  45. package/cli/build/_commands/update.d.ts.map +1 -1
  46. package/cli/build/_commands/update.js +59 -0
  47. package/cli/build/_commands/update.js.map +1 -1
  48. package/cli/build/_commands/update.spec.js +12 -0
  49. package/cli/build/_commands/update.spec.js.map +1 -1
  50. package/cli/build/program.js +51 -0
  51. package/cli/build/program.js.map +1 -1
  52. package/client-dist/{agent-instances.module-CPUH35EZ.js → agent-instances.module-TPKOBI3N.js} +2 -2
  53. package/client-dist/ca.module-I5N6QWSU.js +5 -0
  54. package/client-dist/{ca.module-U7YZDJ2S.js.map → ca.module-I5N6QWSU.js.map} +3 -3
  55. package/client-dist/cc-usage-dashboard.component-7SPVADUQ.js +2 -0
  56. package/client-dist/cc-usage-dashboard.component-7SPVADUQ.js.map +7 -0
  57. package/client-dist/cc.module-7IL3QO5Q.js +4 -0
  58. package/client-dist/cc.module-7IL3QO5Q.js.map +7 -0
  59. package/client-dist/{chunk-UL3CZNH7.js → chunk-25KTNALK.js} +2 -2
  60. package/client-dist/{chunk-OKI5V6YQ.js → chunk-26YUXPZI.js} +2 -2
  61. package/client-dist/{chunk-VYHAGBS4.js → chunk-3AG5X2MY.js} +2 -2
  62. package/client-dist/{chunk-VYHAGBS4.js.map → chunk-3AG5X2MY.js.map} +3 -3
  63. package/client-dist/chunk-3G2ZGV66.js +2 -0
  64. package/client-dist/chunk-3G2ZGV66.js.map +7 -0
  65. package/client-dist/{chunk-4ZFB25GK.js → chunk-44TWBJUK.js} +2 -2
  66. package/client-dist/{chunk-X3MZFTMO.js → chunk-4EOSKDXN.js} +2 -2
  67. package/client-dist/{chunk-4LLJ2OWZ.js → chunk-4FK2D2PX.js} +2 -2
  68. package/client-dist/chunk-4JL2Q6FO.js +2 -0
  69. package/client-dist/chunk-4JL2Q6FO.js.map +7 -0
  70. package/client-dist/{chunk-IAE5NGVM.js → chunk-4PBNHSRW.js} +2 -2
  71. package/client-dist/{chunk-MHOWIGRN.js → chunk-5RLDT3NY.js} +2 -2
  72. package/client-dist/{chunk-LHK7W77S.js → chunk-5YDHEFSD.js} +2 -2
  73. package/client-dist/{chunk-IZCGZPDO.js → chunk-657E66YR.js} +2 -2
  74. package/client-dist/{chunk-7NMJB7CI.js → chunk-6BYNIFJY.js} +2 -2
  75. package/client-dist/{chunk-4CLEKS5Z.js → chunk-77YTUUCR.js} +7 -3
  76. package/client-dist/{chunk-4CLEKS5Z.js.map → chunk-77YTUUCR.js.map} +2 -2
  77. package/client-dist/{chunk-CRSKI2X4.js → chunk-7CMPZXAO.js} +2 -2
  78. package/client-dist/{chunk-SARZNHM5.js → chunk-7VY64KMU.js} +2 -2
  79. package/client-dist/{chunk-QIGBGNDG.js → chunk-A33MCHYC.js} +2 -2
  80. package/client-dist/{chunk-U6C6SLYE.js → chunk-BH3GMEZZ.js} +19 -19
  81. package/client-dist/chunk-BH3GMEZZ.js.map +7 -0
  82. package/client-dist/{chunk-PIXU7VL6.js → chunk-BJ4I73WC.js} +2 -2
  83. package/client-dist/{chunk-SZ5YB5I5.js → chunk-C2BQQRVH.js} +2 -2
  84. package/client-dist/{chunk-2PQXI7I7.js → chunk-C4FOSX27.js} +2 -2
  85. package/client-dist/chunk-C4FOSX27.js.map +7 -0
  86. package/client-dist/{chunk-33VVBKU2.js → chunk-CAMM4S7P.js} +2 -2
  87. package/client-dist/{chunk-6BFD2NWY.js → chunk-CDNAFC73.js} +2 -2
  88. package/client-dist/{chunk-FWTMQSVZ.js → chunk-CU5YQ2M4.js} +2 -2
  89. package/client-dist/{chunk-ROQIRXTO.js → chunk-DXF2FJLD.js} +2 -2
  90. package/client-dist/{chunk-AYF66J6F.js → chunk-E6WOJOGT.js} +2 -2
  91. package/client-dist/{chunk-PTO335OR.js → chunk-EDMLVG72.js} +2 -2
  92. package/client-dist/chunk-G5SK3OBM.js +2 -0
  93. package/client-dist/chunk-G5SK3OBM.js.map +7 -0
  94. package/client-dist/{chunk-TTTWIDBQ.js → chunk-GG2WP2KM.js} +2 -2
  95. package/client-dist/{chunk-VSFMGBJ5.js → chunk-IHNAAEA2.js} +2 -2
  96. package/client-dist/{chunk-MC4INR7S.js → chunk-J5INQQ5M.js} +2 -2
  97. package/client-dist/{chunk-OHLE7T6H.js → chunk-KX2KGHQZ.js} +2 -2
  98. package/client-dist/{chunk-QRP3ANHZ.js → chunk-L2XJGYW4.js} +2 -2
  99. package/client-dist/{chunk-AWXOKP4G.js → chunk-L42Z7YNK.js} +2 -2
  100. package/client-dist/{chunk-OG3BXORU.js → chunk-LCKABD2M.js} +2 -2
  101. package/client-dist/{chunk-MW4XS5NJ.js → chunk-LIGODF4I.js} +2 -2
  102. package/client-dist/{chunk-MVVOW5DK.js → chunk-LMK3IOKN.js} +2 -2
  103. package/client-dist/{chunk-IDUC3D4V.js → chunk-OCNDLQG5.js} +2 -2
  104. package/client-dist/{chunk-BW23SNBJ.js → chunk-OKUYYDGV.js} +2 -2
  105. package/client-dist/{chunk-Q4JCVLZX.js → chunk-OLLHHMTV.js} +2 -2
  106. package/client-dist/{chunk-HL6WDI7B.js → chunk-OS5KCUZD.js} +2 -2
  107. package/client-dist/{chunk-S72KII3A.js → chunk-PMJP2N4K.js} +2 -2
  108. package/client-dist/{chunk-MHKJKJVA.js → chunk-PW5BAINL.js} +2 -2
  109. package/client-dist/{chunk-JZY65LIL.js → chunk-QQ2GRU2N.js} +2 -2
  110. package/client-dist/{chunk-CFK7FARI.js → chunk-RUSAMFGS.js} +2 -2
  111. package/client-dist/{chunk-CFK7FARI.js.map → chunk-RUSAMFGS.js.map} +1 -1
  112. package/client-dist/{chunk-GO5RFW3F.js → chunk-RYD462IO.js} +2 -2
  113. package/client-dist/{chunk-EEPAM5ZQ.js → chunk-SK3XGSYF.js} +2 -2
  114. package/client-dist/{chunk-5ZJE7DIO.js → chunk-TFB7ULAV.js} +2 -2
  115. package/client-dist/{chunk-6JOKYIHX.js → chunk-U3Y5GO6O.js} +2 -2
  116. package/client-dist/{chunk-S7U2FMEE.js → chunk-U64N3LCA.js} +2 -2
  117. package/client-dist/{chunk-QHOO5EGB.js → chunk-UD4PV7CD.js} +2 -2
  118. package/client-dist/{chunk-6C4DDRK2.js → chunk-UM7AS2IW.js} +2 -2
  119. package/client-dist/{chunk-PVZP6QNW.js → chunk-UVVGFHUG.js} +2 -2
  120. package/client-dist/{chunk-O4Z7O66B.js → chunk-VOFDBT5T.js} +2 -2
  121. package/client-dist/{chunk-YWMRQJRC.js → chunk-VRG74DKK.js} +2 -2
  122. package/client-dist/{chunk-LPDRQ6SN.js → chunk-W7HIS2QA.js} +2 -2
  123. package/client-dist/{chunk-XGSTC65N.js → chunk-XFXMWTQS.js} +2 -2
  124. package/client-dist/chunk-XWYXBY7S.js +2 -0
  125. package/client-dist/chunk-XWYXBY7S.js.map +7 -0
  126. package/client-dist/consultant.module-HHTHUWRL.js +3 -0
  127. package/client-dist/{consultant.module-4Z3WDA2D.js.map → consultant.module-HHTHUWRL.js.map} +3 -3
  128. package/client-dist/{crd.module-EVPCDOWY.js → crd.module-ER6AHSX5.js} +2 -2
  129. package/client-dist/{dashboard.module-XOGM4333.js → dashboard.module-TSNGGBCI.js} +2 -2
  130. package/client-dist/{do.module-2QODL2MZ.js → do.module-NMZD5VSM.js} +2 -2
  131. package/client-dist/{document-library.module-6W5KJ6EM.js → document-library.module-GHDNXP3T.js} +2 -2
  132. package/client-dist/{embedding-eval.module-VBH5UZ2A.js → embedding-eval.module-XPXBOIP5.js} +2 -2
  133. package/client-dist/{embedding-registry.module-4QXZMK6L.js → embedding-registry.module-45TQGZI2.js} +2 -2
  134. package/client-dist/{err.module-4WYVCGZK.js → err.module-GCKYDYCK.js} +2 -2
  135. package/client-dist/{feedback.module-O32WDW4G.js → feedback.module-TLKZ4B4N.js} +2 -2
  136. package/client-dist/{host-runtime-mcp.module-JNYMDS2F.js → host-runtime-mcp.module-HVJZN5R5.js} +2 -2
  137. package/client-dist/index.html +2 -2
  138. package/client-dist/{live-dev-pipeline.module-BAG7LJBJ.js → live-dev-pipeline.module-5PE4ZFFW.js} +2 -2
  139. package/client-dist/{logs.module-PZQTAXGV.js → logs.module-335EXKCD.js} +2 -2
  140. package/client-dist/{main-PYXFCW2K.js → main-FRD6VXVH.js} +4 -4
  141. package/client-dist/{main-PYXFCW2K.js.map → main-FRD6VXVH.js.map} +3 -3
  142. package/client-dist/{master-control-remote-poc.module-K2PT5FB2.js → master-control-remote-poc.module-ORHRUCZH.js} +2 -2
  143. package/client-dist/{mobile-app.module-TUVMDOPA.js → mobile-app.module-BYYNVKQR.js} +2 -2
  144. package/client-dist/{model-registry.module-E7NAPF2Y.js → model-registry.module-KIHIJ2Z6.js} +2 -2
  145. package/client-dist/oc.module-DAGIRW3Z.js +3 -0
  146. package/client-dist/{oc.module-HFDDW2XD.js.map → oc.module-DAGIRW3Z.js.map} +3 -3
  147. package/client-dist/{orc.module-K277LTLC.js → orc.module-KZELL6XR.js} +2 -2
  148. package/client-dist/{project-management.module-JZVMTKGP.js → project-management.module-IJNPSUQZ.js} +2 -2
  149. package/client-dist/project-source-routed.module-DP3RD454.js +2 -0
  150. package/client-dist/{scheduler.module-6NC3BKNE.js → scheduler.module-S3IKZCLL.js} +2 -2
  151. package/client-dist/session.module-FZC22UUN.js +12 -0
  152. package/client-dist/session.module-FZC22UUN.js.map +7 -0
  153. package/client-dist/{set.module-I3FJ3Q2M.js → set.module-Y2RHKW7A.js} +5 -5
  154. package/client-dist/{set.module-I3FJ3Q2M.js.map → set.module-Y2RHKW7A.js.map} +3 -3
  155. package/client-dist/{setup.module-JT7PN7FK.js → setup.module-VTI5EZ3Q.js} +2 -2
  156. package/client-dist/styles-MX7ZZMTH.css +2 -0
  157. package/client-dist/styles-MX7ZZMTH.css.map +7 -0
  158. package/client-dist/{terminals.module-EDF4WYNX.js → terminals.module-KHEDY6QN.js} +2 -2
  159. package/client-dist/{voice-notes-poc.module-CENJQVZI.js → voice-notes-poc.module-EMDLJJIT.js} +2 -2
  160. package/client-dist/{wfs.module-XGMD3EUF.js → wfs.module-LUTFNQG5.js} +2 -2
  161. package/package.json +1 -1
  162. package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.d.ts.map +1 -1
  163. package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.js +5 -0
  164. package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.js.map +1 -1
  165. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.d.ts +11 -0
  166. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.d.ts.map +1 -0
  167. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.js +20 -0
  168. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.js.map +1 -0
  169. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.d.ts +65 -0
  170. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.d.ts.map +1 -0
  171. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.js +222 -0
  172. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.js.map +1 -0
  173. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.d.ts +7 -0
  174. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.d.ts.map +1 -0
  175. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.js +213 -0
  176. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.js.map +1 -0
  177. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.d.ts +58 -0
  178. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.d.ts.map +1 -0
  179. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.js +3 -0
  180. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.js.map +1 -0
  181. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_routes/error-handling.controller.d.ts.map +1 -1
  182. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_routes/error-handling.controller.js +14 -0
  183. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_routes/error-handling.controller.js.map +1 -1
  184. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.d.ts +35 -0
  185. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.d.ts.map +1 -0
  186. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.js +80 -0
  187. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.js.map +1 -0
  188. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.d.ts +2 -0
  189. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.d.ts.map +1 -1
  190. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.js +16 -0
  191. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.js.map +1 -1
  192. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.d.ts +58 -0
  193. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.d.ts.map +1 -1
  194. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.js +64 -0
  195. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.js.map +1 -1
  196. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-list-item-serialize.util.d.ts.map +1 -1
  197. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-list-item-serialize.util.js +3 -0
  198. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-list-item-serialize.util.js.map +1 -1
  199. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.d.ts +47 -0
  200. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.d.ts.map +1 -0
  201. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.js +71 -0
  202. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.js.map +1 -0
  203. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.d.ts +36 -0
  204. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.d.ts.map +1 -1
  205. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.js +93 -6
  206. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.js.map +1 -1
  207. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.spec.js +85 -21
  208. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.spec.js.map +1 -1
  209. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.d.ts.map +1 -1
  210. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.js +81 -1
  211. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.js.map +1 -1
  212. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.d.ts.map +1 -1
  213. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.js +14 -2
  214. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.js.map +1 -1
  215. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/claude-code.controller.d.ts.map +1 -1
  216. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/claude-code.controller.js +19 -0
  217. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/claude-code.controller.js.map +1 -1
  218. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.d.ts +4 -0
  219. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.d.ts.map +1 -1
  220. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.js +6 -0
  221. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.js.map +1 -1
  222. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.d.ts +13 -0
  223. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.d.ts.map +1 -1
  224. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.js +13 -0
  225. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.js.map +1 -1
  226. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.interface.d.ts +23 -0
  227. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.interface.d.ts.map +1 -1
  228. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-event.data-service.d.ts.map +1 -1
  229. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-event.data-service.js +10 -3
  230. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-event.data-service.js.map +1 -1
  231. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.d.ts +15 -0
  232. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.d.ts.map +1 -1
  233. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.js +75 -75
  234. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.js.map +1 -1
  235. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.d.ts +6 -1
  236. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.d.ts.map +1 -1
  237. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.js +32 -9
  238. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.js.map +1 -1
  239. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.spec.js +20 -2
  240. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.spec.js.map +1 -1
  241. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.d.ts +25 -0
  242. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.d.ts.map +1 -1
  243. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.js +301 -1
  244. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.js.map +1 -1
  245. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.d.ts +7 -3
  246. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.d.ts.map +1 -1
  247. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js +23 -7
  248. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js.map +1 -1
  249. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.spec.js +10 -0
  250. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.spec.js.map +1 -1
  251. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts +11 -18
  252. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts.map +1 -1
  253. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js +31 -48
  254. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js.map +1 -1
  255. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.d.ts +8 -0
  256. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.d.ts.map +1 -1
  257. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.js +13 -2
  258. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.js.map +1 -1
  259. package/server/build/src/_modules/external-sessions/_modules/openclaw/_services/core/oc-event.data-service.d.ts.map +1 -1
  260. package/server/build/src/_modules/external-sessions/_modules/openclaw/_services/core/oc-event.data-service.js +8 -3
  261. package/server/build/src/_modules/external-sessions/_modules/openclaw/_services/core/oc-event.data-service.js.map +1 -1
  262. package/server/build/src/_modules/messaging/_services/control-services/providers/msg-client-socket-server.service.d.ts.map +1 -1
  263. package/server/build/src/_modules/messaging/_services/control-services/providers/msg-client-socket-server.service.js +12 -0
  264. package/server/build/src/_modules/messaging/_services/control-services/providers/msg-client-socket-server.service.js.map +1 -1
  265. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.d.ts +42 -0
  266. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.d.ts.map +1 -0
  267. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.js +73 -0
  268. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.js.map +1 -0
  269. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.d.ts +10 -0
  270. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.d.ts.map +1 -0
  271. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.js +89 -0
  272. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.js.map +1 -0
  273. package/server/build/src/_modules/peer-instance/_models/interfaces/pei-bootstrap-attempt.interface.d.ts +8 -1
  274. package/server/build/src/_modules/peer-instance/_models/interfaces/pei-bootstrap-attempt.interface.d.ts.map +1 -1
  275. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.d.ts +10 -0
  276. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.d.ts.map +1 -0
  277. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.js +74 -0
  278. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.js.map +1 -0
  279. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.d.ts +37 -0
  280. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.d.ts.map +1 -1
  281. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.js +117 -0
  282. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.js.map +1 -1
  283. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.d.ts +11 -0
  284. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.d.ts.map +1 -1
  285. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.js +11 -1
  286. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.js.map +1 -1
  287. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.spec.js +65 -0
  288. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.spec.js.map +1 -1
  289. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.d.ts.map +1 -1
  290. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.js +24 -0
  291. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.js.map +1 -1
  292. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.d.ts +30 -0
  293. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.d.ts.map +1 -1
  294. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.js +91 -2
  295. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.js.map +1 -1
  296. package/server/build/src/_modules/peer-instance/_services/pei-ws-server.control-service.d.ts.map +1 -1
  297. package/server/build/src/_modules/peer-instance/_services/pei-ws-server.control-service.js +10 -0
  298. package/server/build/src/_modules/peer-instance/_services/pei-ws-server.control-service.js.map +1 -1
  299. package/server/build/src/_modules/scheduler/_collections/utils/sch-jitter.util.spec.js +4 -2
  300. package/server/build/src/_modules/scheduler/_collections/utils/sch-jitter.util.spec.js.map +1 -1
  301. package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.d.ts +9 -0
  302. package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.d.ts.map +1 -1
  303. package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.d.ts.map +1 -1
  304. package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.js +1 -0
  305. package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.js.map +1 -1
  306. package/client-dist/ca.module-U7YZDJ2S.js +0 -5
  307. package/client-dist/cc-usage-dashboard.component-A3NQVGUQ.js +0 -2
  308. package/client-dist/cc-usage-dashboard.component-A3NQVGUQ.js.map +0 -7
  309. package/client-dist/cc.module-4FCJFHDX.js +0 -4
  310. package/client-dist/cc.module-4FCJFHDX.js.map +0 -7
  311. package/client-dist/chunk-2PQXI7I7.js.map +0 -7
  312. package/client-dist/chunk-AC2BVG34.js +0 -2
  313. package/client-dist/chunk-AC2BVG34.js.map +0 -7
  314. package/client-dist/chunk-EGRHWZRV.js +0 -1
  315. package/client-dist/chunk-EGRHWZRV.js.map +0 -7
  316. package/client-dist/chunk-EVTV632M.js +0 -2
  317. package/client-dist/chunk-EVTV632M.js.map +0 -7
  318. package/client-dist/chunk-U6C6SLYE.js.map +0 -7
  319. package/client-dist/consultant.module-4Z3WDA2D.js +0 -3
  320. package/client-dist/oc.module-HFDDW2XD.js +0 -3
  321. package/client-dist/project-source-routed.module-MD2ZFK3N.js +0 -2
  322. package/client-dist/session.module-DG7H2GJT.js +0 -12
  323. package/client-dist/session.module-DG7H2GJT.js.map +0 -7
  324. package/client-dist/styles-KHQAHCL5.css +0 -2
  325. package/client-dist/styles-KHQAHCL5.css.map +0 -7
  326. /package/client-dist/{agent-instances.module-CPUH35EZ.js.map → agent-instances.module-TPKOBI3N.js.map} +0 -0
  327. /package/client-dist/{chunk-UL3CZNH7.js.map → chunk-25KTNALK.js.map} +0 -0
  328. /package/client-dist/{chunk-OKI5V6YQ.js.map → chunk-26YUXPZI.js.map} +0 -0
  329. /package/client-dist/{chunk-4ZFB25GK.js.map → chunk-44TWBJUK.js.map} +0 -0
  330. /package/client-dist/{chunk-X3MZFTMO.js.map → chunk-4EOSKDXN.js.map} +0 -0
  331. /package/client-dist/{chunk-4LLJ2OWZ.js.map → chunk-4FK2D2PX.js.map} +0 -0
  332. /package/client-dist/{chunk-IAE5NGVM.js.map → chunk-4PBNHSRW.js.map} +0 -0
  333. /package/client-dist/{chunk-MHOWIGRN.js.map → chunk-5RLDT3NY.js.map} +0 -0
  334. /package/client-dist/{chunk-LHK7W77S.js.map → chunk-5YDHEFSD.js.map} +0 -0
  335. /package/client-dist/{chunk-IZCGZPDO.js.map → chunk-657E66YR.js.map} +0 -0
  336. /package/client-dist/{chunk-7NMJB7CI.js.map → chunk-6BYNIFJY.js.map} +0 -0
  337. /package/client-dist/{chunk-CRSKI2X4.js.map → chunk-7CMPZXAO.js.map} +0 -0
  338. /package/client-dist/{chunk-SARZNHM5.js.map → chunk-7VY64KMU.js.map} +0 -0
  339. /package/client-dist/{chunk-QIGBGNDG.js.map → chunk-A33MCHYC.js.map} +0 -0
  340. /package/client-dist/{chunk-PIXU7VL6.js.map → chunk-BJ4I73WC.js.map} +0 -0
  341. /package/client-dist/{chunk-SZ5YB5I5.js.map → chunk-C2BQQRVH.js.map} +0 -0
  342. /package/client-dist/{chunk-33VVBKU2.js.map → chunk-CAMM4S7P.js.map} +0 -0
  343. /package/client-dist/{chunk-6BFD2NWY.js.map → chunk-CDNAFC73.js.map} +0 -0
  344. /package/client-dist/{chunk-FWTMQSVZ.js.map → chunk-CU5YQ2M4.js.map} +0 -0
  345. /package/client-dist/{chunk-ROQIRXTO.js.map → chunk-DXF2FJLD.js.map} +0 -0
  346. /package/client-dist/{chunk-AYF66J6F.js.map → chunk-E6WOJOGT.js.map} +0 -0
  347. /package/client-dist/{chunk-PTO335OR.js.map → chunk-EDMLVG72.js.map} +0 -0
  348. /package/client-dist/{chunk-TTTWIDBQ.js.map → chunk-GG2WP2KM.js.map} +0 -0
  349. /package/client-dist/{chunk-VSFMGBJ5.js.map → chunk-IHNAAEA2.js.map} +0 -0
  350. /package/client-dist/{chunk-MC4INR7S.js.map → chunk-J5INQQ5M.js.map} +0 -0
  351. /package/client-dist/{chunk-OHLE7T6H.js.map → chunk-KX2KGHQZ.js.map} +0 -0
  352. /package/client-dist/{chunk-QRP3ANHZ.js.map → chunk-L2XJGYW4.js.map} +0 -0
  353. /package/client-dist/{chunk-AWXOKP4G.js.map → chunk-L42Z7YNK.js.map} +0 -0
  354. /package/client-dist/{chunk-OG3BXORU.js.map → chunk-LCKABD2M.js.map} +0 -0
  355. /package/client-dist/{chunk-MW4XS5NJ.js.map → chunk-LIGODF4I.js.map} +0 -0
  356. /package/client-dist/{chunk-MVVOW5DK.js.map → chunk-LMK3IOKN.js.map} +0 -0
  357. /package/client-dist/{chunk-IDUC3D4V.js.map → chunk-OCNDLQG5.js.map} +0 -0
  358. /package/client-dist/{chunk-BW23SNBJ.js.map → chunk-OKUYYDGV.js.map} +0 -0
  359. /package/client-dist/{chunk-Q4JCVLZX.js.map → chunk-OLLHHMTV.js.map} +0 -0
  360. /package/client-dist/{chunk-HL6WDI7B.js.map → chunk-OS5KCUZD.js.map} +0 -0
  361. /package/client-dist/{chunk-S72KII3A.js.map → chunk-PMJP2N4K.js.map} +0 -0
  362. /package/client-dist/{chunk-MHKJKJVA.js.map → chunk-PW5BAINL.js.map} +0 -0
  363. /package/client-dist/{chunk-JZY65LIL.js.map → chunk-QQ2GRU2N.js.map} +0 -0
  364. /package/client-dist/{chunk-GO5RFW3F.js.map → chunk-RYD462IO.js.map} +0 -0
  365. /package/client-dist/{chunk-EEPAM5ZQ.js.map → chunk-SK3XGSYF.js.map} +0 -0
  366. /package/client-dist/{chunk-5ZJE7DIO.js.map → chunk-TFB7ULAV.js.map} +0 -0
  367. /package/client-dist/{chunk-6JOKYIHX.js.map → chunk-U3Y5GO6O.js.map} +0 -0
  368. /package/client-dist/{chunk-S7U2FMEE.js.map → chunk-U64N3LCA.js.map} +0 -0
  369. /package/client-dist/{chunk-QHOO5EGB.js.map → chunk-UD4PV7CD.js.map} +0 -0
  370. /package/client-dist/{chunk-6C4DDRK2.js.map → chunk-UM7AS2IW.js.map} +0 -0
  371. /package/client-dist/{chunk-PVZP6QNW.js.map → chunk-UVVGFHUG.js.map} +0 -0
  372. /package/client-dist/{chunk-O4Z7O66B.js.map → chunk-VOFDBT5T.js.map} +0 -0
  373. /package/client-dist/{chunk-YWMRQJRC.js.map → chunk-VRG74DKK.js.map} +0 -0
  374. /package/client-dist/{chunk-LPDRQ6SN.js.map → chunk-W7HIS2QA.js.map} +0 -0
  375. /package/client-dist/{chunk-XGSTC65N.js.map → chunk-XFXMWTQS.js.map} +0 -0
  376. /package/client-dist/{crd.module-EVPCDOWY.js.map → crd.module-ER6AHSX5.js.map} +0 -0
  377. /package/client-dist/{dashboard.module-XOGM4333.js.map → dashboard.module-TSNGGBCI.js.map} +0 -0
  378. /package/client-dist/{do.module-2QODL2MZ.js.map → do.module-NMZD5VSM.js.map} +0 -0
  379. /package/client-dist/{document-library.module-6W5KJ6EM.js.map → document-library.module-GHDNXP3T.js.map} +0 -0
  380. /package/client-dist/{embedding-eval.module-VBH5UZ2A.js.map → embedding-eval.module-XPXBOIP5.js.map} +0 -0
  381. /package/client-dist/{embedding-registry.module-4QXZMK6L.js.map → embedding-registry.module-45TQGZI2.js.map} +0 -0
  382. /package/client-dist/{err.module-4WYVCGZK.js.map → err.module-GCKYDYCK.js.map} +0 -0
  383. /package/client-dist/{feedback.module-O32WDW4G.js.map → feedback.module-TLKZ4B4N.js.map} +0 -0
  384. /package/client-dist/{host-runtime-mcp.module-JNYMDS2F.js.map → host-runtime-mcp.module-HVJZN5R5.js.map} +0 -0
  385. /package/client-dist/{live-dev-pipeline.module-BAG7LJBJ.js.map → live-dev-pipeline.module-5PE4ZFFW.js.map} +0 -0
  386. /package/client-dist/{logs.module-PZQTAXGV.js.map → logs.module-335EXKCD.js.map} +0 -0
  387. /package/client-dist/{master-control-remote-poc.module-K2PT5FB2.js.map → master-control-remote-poc.module-ORHRUCZH.js.map} +0 -0
  388. /package/client-dist/{mobile-app.module-TUVMDOPA.js.map → mobile-app.module-BYYNVKQR.js.map} +0 -0
  389. /package/client-dist/{model-registry.module-E7NAPF2Y.js.map → model-registry.module-KIHIJ2Z6.js.map} +0 -0
  390. /package/client-dist/{orc.module-K277LTLC.js.map → orc.module-KZELL6XR.js.map} +0 -0
  391. /package/client-dist/{project-management.module-JZVMTKGP.js.map → project-management.module-IJNPSUQZ.js.map} +0 -0
  392. /package/client-dist/{project-source-routed.module-MD2ZFK3N.js.map → project-source-routed.module-DP3RD454.js.map} +0 -0
  393. /package/client-dist/{scheduler.module-6NC3BKNE.js.map → scheduler.module-S3IKZCLL.js.map} +0 -0
  394. /package/client-dist/{setup.module-JT7PN7FK.js.map → setup.module-VTI5EZ3Q.js.map} +0 -0
  395. /package/client-dist/{terminals.module-EDF4WYNX.js.map → terminals.module-KHEDY6QN.js.map} +0 -0
  396. /package/client-dist/{voice-notes-poc.module-CENJQVZI.js.map → voice-notes-poc.module-EMDLJJIT.js.map} +0 -0
  397. /package/client-dist/{wfs.module-XGMD3EUF.js.map → wfs.module-LUTFNQG5.js.map} +0 -0
@@ -1,2 +1,2 @@
1
- import{a as M}from"./chunk-SARZNHM5.js";import{a as z,b as K}from"./chunk-BW23SNBJ.js";import{b as N,c as U}from"./chunk-JZY65LIL.js";import{e as H}from"./chunk-UL3CZNH7.js";import{a as P}from"./chunk-FLAJXIYW.js";import{a as k}from"./chunk-5UPNU54P.js";import{j as O}from"./chunk-QIGBGNDG.js";import{I as L,p as Y}from"./chunk-CFK7FARI.js";import{$a as b,C as m,D as w,Fa as a,Ga as A,Ha as u,T as D,Ta as T,U as S,Z as s,aa as C,ab as g,da as x,ga as _,h as G,hb as $,k as h,la as c,mb as F,na as q,oa as v,p as f,pa as I,qa as r,ra as n,ub as Q,va as R,wa as d,xb as j,y}from"./chunk-TBMJSIBB.js";var J=(t,o)=>o._id;function Z(t,o){t&1&&(r(0,"div",1),a(1,"Nincs kiv\xE1lasztott session."),n())}function ee(t,o){t&1&&(r(0,"div",1),a(1," Ehhez a sessionh\xF6z nincs akt\xEDv schedule job. "),n())}function te(t,o){t&1&&(r(0,"span",7),a(1,"paused"),n())}function ie(t,o){t&1&&(r(0,"span",8),a(1,"disabled"),n())}function ne(t,o){t&1&&(r(0,"span",9),a(1,"dry-run"),n())}function oe(t,o){if(t&1&&(r(0,"div",10),a(1),n()),t&2){let e=d().$implicit;s(),A(e.description)}}function se(t,o){if(t&1&&(r(0,"span")(1,"span",15),a(2,"tz:"),n(),a(3),n()),t&2){let e=d().$implicit;s(3),u(" ",e.timezone,"")}}function ae(t,o){if(t&1&&(r(0,"span",12),b(1,"sAbsoluteTime"),r(2,"span",15),a(3,"next:"),n(),a(4),b(5,"sTimeAgo"),n()),t&2){let e=d().$implicit;_("title",g(1,2,e.nextDueAt)),s(4),u(" ",g(5,4,e.nextDueAt),"")}}function re(t,o){if(t&1&&(r(0,"span",12),b(1,"sAbsoluteTime"),r(2,"span",15),a(3,"last:"),n(),a(4),b(5,"sTimeAgo"),n()),t&2){let e=d().$implicit;_("title",g(1,2,e.lastTriggeredAt)),s(4),u(" ",g(5,4,e.lastTriggeredAt),"")}}function le(t,o){if(t&1&&(r(0,"span",16),a(1),n()),t&2){let e=o.$implicit,i=d(4);_("ngClass",i.getStatusColorClass(e.status))("title",(e.scheduledAt||"\u2014")+" \u2014 "+(e.status||"\u2014")+(e.skipReason?" ("+e.skipReason+")":"")+(e.errorDetails!=null&&e.errorDetails.message?": "+e.errorDetails.message:"")),s(),u(" ",i.getStatusLabel(e.status)," ")}}function de(t,o){if(t&1&&(r(0,"div",13),v(1,le,2,3,"span",16,J),n()),t&2){let e=d().$implicit,i=d(2);s(),I(i.getRecentExecutionsForJob(e._id))}}function ue(t,o){t&1&&(r(0,"div",14),a(1,"M\xE9g nem volt execution."),n())}function ce(t,o){if(t&1&&(r(0,"div",3)(1,"div",4)(2,"span",5),a(3),n(),r(4,"span",6),a(5),b(6,"schSchedulePresetLabel"),n(),x(7,te,2,0,"span",7)(8,ie,2,0,"span",8)(9,ne,2,0,"span",9),n(),x(10,oe,2,1,"div",10),r(11,"div",11),x(12,se,4,1,"span")(13,ae,6,6,"span",12)(14,re,6,6,"span",12),n(),x(15,de,3,0,"div",13)(16,ue,2,0,"div",14),n()),t&2){let e=o.$implicit,i=d(2);s(3),u(" ",e.name||e._id," "),s(2),u(" ",g(6,10,e.schedule)," "),s(2),c(e.paused?7:-1),s(),c(e.enabled===!1?8:-1),s(),c(e.dryRun?9:-1),s(),c(e.description?10:-1),s(2),c(e.timezone?12:-1),s(),c(e.nextDueAt?13:-1),s(),c(e.lastTriggeredAt?14:-1),s(),c(i.getRecentExecutionsForJob(e._id).length>0?15:16)}}function pe(t,o){if(t&1&&(r(0,"div",2),v(1,ce,17,12,"div",3,J),n()),t&2){let e=d();s(),I(e.jobsForSession_$())}}var Be=(()=>{class t{sessionId=S.required();isOpen=S.required();closed=D();jobs_DS=m(z);jobsForSession_$=$(()=>{let e=this.sessionId();return e?this.jobs_DS.jobs_$().filter(i=>i.target?.payload?.sessionId===e):[]});executionsByJob_$=$(()=>this.jobs_DS.recentExecutions_$());ngOnInit(){this.jobs_DS.jobs_$().length===0&&this.jobs_DS.loadAll()}getRecentExecutionsForJob(e){return e?(this.executionsByJob_$().get(e)??[]).slice(0,5):[]}getStatusColorClass(e){switch(e){case"completed":return"bg-green-500/20 text-green-400";case"triggered":return"bg-blue-500/20 text-blue-400";case"skipped":return"bg-yellow-500/20 text-yellow-400";case"failed":return"bg-red-500/20 text-red-400";case"cancelled":return"bg-neutral-500/20 text-neutral-400";case"dry-run":return"bg-purple-500/20 text-purple-400";default:return"bg-neutral-700/30 text-neutral-300"}}getStatusLabel(e){switch(e){case"completed":return"OK";case"triggered":return"RUN";case"skipped":return"SKP";case"failed":return"FAIL";case"cancelled":return"CNL";case"dry-run":return"DRY";default:return e??"\u2014"}}handleClose(){this.closed.emit()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=w({type:t,selectors:[["app-sch-schedule-popup"]],inputs:{sessionId:[1,"sessionId"],isOpen:[1,"isOpen"]},outputs:{closed:"closed"},standalone:!0,features:[T],decls:4,vars:6,consts:[[3,"closed","isOpen","title","maxWidth","bodyFlexColumn","headerBorderClass"],[1,"p-4","text-center","text-neutral-500","text-sm"],[1,"flex-1","overflow-y-auto","space-y-3","pr-1"],[1,"border","border-neutral-700/60","rounded-md","p-2.5","bg-neutral-900/40"],[1,"flex","items-center","gap-2","mb-1.5"],[1,"text-sm","font-medium","text-neutral-200","truncate"],[1,"text-[10px]","text-neutral-400"],[1,"text-[10px]","px-1","rounded","bg-yellow-500/20","text-yellow-400"],[1,"text-[10px]","px-1","rounded","bg-neutral-500/20","text-neutral-400"],[1,"text-[10px]","px-1","rounded","bg-purple-500/20","text-purple-400"],[1,"text-[11px]","text-neutral-400","mb-1.5","truncate"],[1,"flex","flex-wrap","gap-x-3","gap-y-0.5","text-[10px]","text-neutral-500","mb-2"],[3,"title"],[1,"flex","flex-wrap","gap-1"],[1,"text-[10px]","text-neutral-500"],[1,"text-neutral-600"],[1,"text-[10px]","px-1.5","py-0.5","rounded","font-mono",3,"ngClass","title"]],template:function(i,l){i&1&&(r(0,"app-s-modal",0),R("closed",function(){return l.handleClose()}),x(1,Z,2,0,"div",1)(2,ee,2,0,"div",1)(3,pe,3,0,"div",2),n()),i&2&&(_("isOpen",l.isOpen())("title","Schedule inf\xF3k ehhez a session-h\xF6z")("maxWidth","lg")("bodyFlexColumn",!0)("headerBorderClass","border-neonCyan/50"),s(),c(l.sessionId()?l.jobsForSession_$().length===0?2:3:1))},dependencies:[Q,F,P,N,U,K],encapsulation:2})}return t})();var _e=(t,o)=>o._id;function me(t,o){t&1&&(r(0,"div",1),a(1,"Nincs kiv\xE1lasztott session."),n())}function xe(t,o){t&1&&(r(0,"div",1),a(1," Ehhez a sessionh\xF6z nincs koordin\xE1tor. "),n())}function he(t,o){if(t&1&&(r(0,"span")(1,"span",9),a(2,"provider:"),n(),a(3),n()),t&2){let e=d().$implicit;s(3),u(" ",e.providerName,"")}}function fe(t,o){if(t&1&&(r(0,"span")(1,"span",9),a(2,"model:"),n(),a(3),n()),t&2){let e=d().$implicit;s(3),u(" ",e.model,"")}}function Se(t,o){if(t&1&&(r(0,"span")(1,"span",9),a(2,"project:"),n(),a(3),n()),t&2){let e=d().$implicit;s(3),u(" ",e.projectId,"")}}function Ce(t,o){if(t&1&&(r(0,"div",10)(1,"span",9),a(2,"paused:"),n(),a(3),n()),t&2){let e=d().$implicit;_("title",e.pauseReason),s(3),u(" ",e.pauseReason," ")}}function ve(t,o){if(t&1&&(r(0,"div",11)(1,"span",9),a(2,"last:"),n(),a(3),n()),t&2){let e=d().$implicit;_("title",e.lastResponseSummary),s(3),u(" ",e.lastResponseSummary," ")}}function Ie(t,o){if(t&1&&(r(0,"span",13),a(1),n()),t&2){let e=o.$implicit;_("title",e),s(),u(" blocker: ",e," ")}}function be(t,o){if(t&1&&(r(0,"div",12),v(1,Ie,2,2,"span",13,q),n()),t&2){let e=d().$implicit;s(),I(e.blockers)}}function ge(t,o){if(t&1&&(r(0,"div",3)(1,"div",4)(2,"span",5),a(3),n(),r(4,"span",6),a(5),n()(),r(6,"div",7),x(7,he,4,1,"span")(8,fe,4,1,"span")(9,Se,4,1,"span"),n(),r(10,"div",8)(11,"span",9),a(12,"phase:"),n(),a(13),r(14,"span",9),a(15,"\xB7"),n(),r(16,"span",9),a(17,"phase-step:"),n(),a(18),r(19,"span",9),a(20,"\xB7"),n(),r(21,"span",9),a(22,"total:"),n(),a(23),n(),x(24,Ce,4,2,"div",10)(25,ve,4,2,"div",11)(26,be,3,0,"div",12),n()),t&2){let e=o.$implicit,i=d(2);s(3),u(" ",e.workflowId||e._id," "),s(),_("ngClass",i.getStatusColorClass(e.status)),s(),u(" ",e.status||"\u2014"," "),s(2),c(e.providerName?7:-1),s(),c(e.model?8:-1),s(),c(e.projectId?9:-1),s(4),u(" ",e.currentPhaseIndex," "),s(5),u(" ",e.currentPhaseStepCount," "),s(5),u(" ",e.totalStepCount," "),s(),c(e.pauseReason?24:-1),s(),c(e.lastResponseSummary?25:-1),s(),c(e.blockers&&e.blockers.length>0?26:-1)}}function Ee(t,o){if(t&1&&(r(0,"div",2),v(1,ge,27,12,"div",3,_e),n()),t&2){let e=d();s(),I(e.coordinatorsForSession_$())}}var Ne=(()=>{class t{sessionId=S.required();isOpen=S.required();closed=D();coordinator_DS=m(M);coordinatorsForSession_$=$(()=>{let e=this.sessionId();return e?this.coordinator_DS.globalCoordinatorsList_$().filter(i=>i.sessionId===e):[]});ngOnInit(){this.coordinator_DS.globalCoordinatorsList_$().length===0&&this.coordinator_DS.loadAllCoordinatorsForManagementPage()}getStatusColorClass(e){switch((e??"").trim().toLowerCase()){case"active":return"bg-green-500/20 text-green-400";case"running":return"bg-green-500/20 text-green-400";case"paused":return"bg-yellow-500/20 text-yellow-400";case"idle":return"bg-blue-500/20 text-blue-400";case"stopped":return"bg-neutral-500/20 text-neutral-400";case"completed":return"bg-neutral-600/20 text-neutral-400";case"failed":return"bg-red-500/20 text-red-400";default:return"bg-neutral-700/30 text-neutral-300"}}handleClose(){this.closed.emit()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=w({type:t,selectors:[["app-crd-info-popup"]],inputs:{sessionId:[1,"sessionId"],isOpen:[1,"isOpen"]},outputs:{closed:"closed"},standalone:!0,features:[T],decls:4,vars:6,consts:[[3,"closed","isOpen","title","maxWidth","bodyFlexColumn","headerBorderClass"],[1,"p-4","text-center","text-neutral-500","text-sm"],[1,"flex-1","overflow-y-auto","space-y-3","pr-1"],[1,"border","border-neutral-700/60","rounded-md","p-2.5","bg-neutral-900/40"],[1,"flex","items-center","gap-2","mb-1.5"],[1,"text-sm","font-medium","text-neutral-200","truncate"],[1,"text-[10px]","px-1.5","py-0.5","rounded","font-mono",3,"ngClass"],[1,"flex","flex-wrap","gap-x-3","gap-y-0.5","text-[10px]","text-neutral-500","mb-2"],[1,"text-[11px]","text-neutral-400","mb-1.5"],[1,"text-neutral-600"],[1,"text-[11px]","text-yellow-400/80","mb-1.5","truncate",3,"title"],[1,"text-[11px]","text-neutral-400","mb-1.5","line-clamp-2",3,"title"],[1,"flex","flex-wrap","gap-1","mt-1"],[1,"text-[10px]","px-1.5","py-0.5","rounded","bg-red-500/15","text-red-400","truncate","max-w-full",3,"title"]],template:function(i,l){i&1&&(r(0,"app-s-modal",0),R("closed",function(){return l.handleClose()}),x(1,me,2,0,"div",1)(2,xe,2,0,"div",1)(3,Ee,3,0,"div",2),n()),i&2&&(_("isOpen",l.isOpen())("title","Koordin\xE1tor inf\xF3k ehhez a session-h\xF6z")("maxWidth","lg")("bodyFlexColumn",!0)("headerBorderClass","border-neonAmber/50"),s(),c(l.sessionId()?l.coordinatorsForSession_$().length===0?2:3:1))},dependencies:[Q,F,P],encapsulation:2})}return t})();var W=(()=>{class t{apiBase=L.api.baseUrl;http=m(j);getQueue(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}?_t=${Date.now()}`;return f(this.http.get(i))}editItem(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/${e.queueItemId}`;return f(this.http.patch(i,{text:e.text}))}removeItem(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/${e.queueItemId}`;return f(this.http.delete(i))}sendNow(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/${e.queueItemId}/send-now`;return f(this.http.post(i,{}))}reorderItem(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/${e.queueItemId}/reorder`;return f(this.http.post(i,{direction:e.direction}))}lockQueue(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/lock`;return f(this.http.post(i,{}))}unlockQueue(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/unlock`;return f(this.http.post(i,{}))}buildUrl(e,i){return`${this.apiBase}/${e}-queue/${i}`}static \u0275fac=function(i){return new(i||t)};static \u0275prov=y({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var p=G(Y());var $e="session-queue:updated",ye="session-queue:lock-changed",tt=(()=>{class t{sessionQueue_AS=m(W);socket_CS=m(H);globalError_CS=m(O);eventSubscription=null;reconnectSubscription=null;activeSessionId="";activeBaseRoute="";queueSnapshot_$=C(null);isLocked_$=C(!1);editingItemId_$=C(null);editingText_$=C("");items_$=C([]);constructor(){this.eventSubscription=this.socket_CS.event$.subscribe(e=>{this.handleSocketEvent(e)}),this.reconnectSubscription=this.socket_CS.connected$.subscribe(e=>{e&&this.activeSessionId&&(p.DyFM_Log.info(`ExS_Queue_DS | Socket reconnected, reloading queue | session: ${this.activeSessionId}`),this.loadQueue())})}ngOnDestroy(){this.eventSubscription?.unsubscribe(),this.eventSubscription=null,this.reconnectSubscription?.unsubscribe(),this.reconnectSubscription=null}subscribeToSession(e){this.activeSessionId=e.sessionId,this.activeBaseRoute=e.baseRoute,p.DyFM_Log.info(`ExS_Queue_DS | subscribeToSession | session: ${e.sessionId} | baseRoute: ${e.baseRoute}`),this.loadQueue()}unsubscribe(){this.activeSessionId="",this.activeBaseRoute="",this.queueSnapshot_$.set(null),this.items_$.set([]),this.isLocked_$.set(!1),this.editingItemId_$.set(null),this.editingText_$.set("")}startEditing(e){return h(this,null,function*(){if(!this.activeSessionId||!this.activeBaseRoute)return;if(!this.isItemInCurrentSnapshot(e)){p.DyFM_Log.info(`ExS_Queue_DS | startEditing \u2014 stale item, reloading | queueItemId: ${e}`),yield this.loadQueue();return}try{yield this.sessionQueue_AS.lockQueue({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId})}catch{return}let i=this.items_$().find(l=>l.queueItemId===e);this.isLocked_$.set(!0),this.editingItemId_$.set(e),this.editingText_$.set(i?.text??"")})}saveEdit(){return h(this,null,function*(){let e=this.editingItemId_$();if(!(!e||!this.activeSessionId||!this.activeBaseRoute)){try{if((yield this.sessionQueue_AS.editItem({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId,queueItemId:e,text:this.editingText_$()})).item===null){this.globalError_CS.showError(new Error("Queue item not found \u2014 it may have been delivered while editing"),"session-queue-edit"),yield this.finishEditing(),yield this.loadQueue();return}}catch(i){this.globalError_CS.showError(i,"session-queue-edit-save");return}yield this.finishEditing()}})}cancelEdit(){return h(this,null,function*(){yield this.finishEditing()})}removeItem(e){return h(this,null,function*(){if(!(!this.activeSessionId||!this.activeBaseRoute)){if(!this.isItemInCurrentSnapshot(e)){p.DyFM_Log.info(`ExS_Queue_DS | removeItem \u2014 stale item, reloading | queueItemId: ${e}`),yield this.loadQueue();return}try{(yield this.sessionQueue_AS.removeItem({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId,queueItemId:e})).success===!1&&(p.DyFM_Log.info(`ExS_Queue_DS | removeItem \u2014 server: item not found, reloading | queueItemId: ${e}`),yield this.loadQueue())}catch{yield this.loadQueue()}}})}sendNow(e){return h(this,null,function*(){if(!(!this.activeSessionId||!this.activeBaseRoute)){if(!this.isItemInCurrentSnapshot(e)){p.DyFM_Log.info(`ExS_Queue_DS | sendNow \u2014 stale item, reloading | queueItemId: ${e}`),yield this.loadQueue();return}try{let i=yield this.sessionQueue_AS.sendNow({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId,queueItemId:e});if(i.success===!1){let l=typeof i.reason=="string"?i.reason:"unknown";l==="Item not found in queue"?p.DyFM_Log.info(`ExS_Queue_DS | sendNow \u2014 server: item already delivered, reloading | queueItemId: ${e}`):this.globalError_CS.showError(new Error(`Send-now delivery failed: ${l}`),"session-queue-send-now"),yield this.loadQueue()}}catch{yield this.loadQueue()}}})}reorderItem(e){return h(this,null,function*(){if(!(!this.activeSessionId||!this.activeBaseRoute)){if(!this.isItemInCurrentSnapshot(e.queueItemId)){p.DyFM_Log.info(`ExS_Queue_DS | reorderItem \u2014 stale item, reloading | queueItemId: ${e.queueItemId}`),yield this.loadQueue();return}try{(yield this.sessionQueue_AS.reorderItem({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId,queueItemId:e.queueItemId,direction:e.direction})).success===!1&&(p.DyFM_Log.info(`ExS_Queue_DS | reorderItem \u2014 server: item not found, reloading | queueItemId: ${e.queueItemId}`),yield this.loadQueue())}catch{yield this.loadQueue()}}})}isItemInCurrentSnapshot(e){return this.items_$().some(i=>i.queueItemId===e)}loadQueue(){return h(this,null,function*(){let e=this.activeSessionId,i=this.activeBaseRoute;if(!(!e||!i))try{let l=yield this.sessionQueue_AS.getQueue({baseRoute:i,sessionId:e});if(this.activeSessionId!==e){p.DyFM_Log.info(`ExS_Queue_DS | loadQueue result discarded (session changed) | requested: ${e} | current: ${this.activeSessionId}`);return}let E=l?.queue?.items?.length??0;p.DyFM_Log.info(`ExS_Queue_DS | loadQueue OK | session: ${e} | items: ${E}`),this.applySnapshot(l.queue)}catch(l){if(this.activeSessionId!==e)return;p.DyFM_Log.warn(`ExS_Queue_DS | loadQueue FAILED | session: ${e} | baseRoute: ${i} | error: ${l instanceof Error?l.message:String(l)}`),this.queueSnapshot_$.set(null),this.items_$.set([])}})}applySnapshot(e){this.queueSnapshot_$.set(e),this.items_$.set(e.items??[]),this.isLocked_$.set(e.isLocked)}finishEditing(){return h(this,null,function*(){if(this.editingItemId_$.set(null),this.editingText_$.set(""),this.isLocked_$.set(!1),!(!this.activeSessionId||!this.activeBaseRoute))try{yield this.sessionQueue_AS.unlockQueue({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId})}catch(e){this.globalError_CS.showError(e,"session-queue-unlock")}})}handleSocketEvent(e){let i=e.payload;if((typeof i.sessionId=="string"?i.sessionId:"")===this.activeSessionId&&(e.event===$e&&this.applySnapshot(i),e.event===ye)){let E=typeof i.isLocked=="boolean"?i.isLocked:!1;this.isLocked_$.set(E)}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=y({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var V=class t{static saveDraft(o,e,i){!o||!e||k.writeString(`${o}:promptDraft:${e}`,i)}static loadDraft(o,e){return!o||!e?"":k.readString(`${o}:promptDraft:${e}`)??""}static clearDraft(o,e){!o||!e||k.remove(`${o}:promptDraft:${e}`)}static hasDraft(o,e){return!o||!e?!1:t.loadDraft(o,e).trim().length>0}};export{V as a,Be as b,Ne as c,tt as d};
2
- //# sourceMappingURL=chunk-PIXU7VL6.js.map
1
+ import{a as M}from"./chunk-7VY64KMU.js";import{a as z,b as K}from"./chunk-OKUYYDGV.js";import{b as N,c as U}from"./chunk-QQ2GRU2N.js";import{e as H}from"./chunk-25KTNALK.js";import{a as P}from"./chunk-FLAJXIYW.js";import{a as k}from"./chunk-5UPNU54P.js";import{j as O}from"./chunk-A33MCHYC.js";import{I as L,p as Y}from"./chunk-RUSAMFGS.js";import{$a as b,C as m,D as w,Fa as a,Ga as A,Ha as u,T as D,Ta as T,U as S,Z as s,aa as C,ab as g,da as x,ga as _,h as G,hb as $,k as h,la as c,mb as F,na as q,oa as v,p as f,pa as I,qa as r,ra as n,ub as Q,va as R,wa as d,xb as j,y}from"./chunk-TBMJSIBB.js";var J=(t,o)=>o._id;function Z(t,o){t&1&&(r(0,"div",1),a(1,"Nincs kiv\xE1lasztott session."),n())}function ee(t,o){t&1&&(r(0,"div",1),a(1," Ehhez a sessionh\xF6z nincs akt\xEDv schedule job. "),n())}function te(t,o){t&1&&(r(0,"span",7),a(1,"paused"),n())}function ie(t,o){t&1&&(r(0,"span",8),a(1,"disabled"),n())}function ne(t,o){t&1&&(r(0,"span",9),a(1,"dry-run"),n())}function oe(t,o){if(t&1&&(r(0,"div",10),a(1),n()),t&2){let e=d().$implicit;s(),A(e.description)}}function se(t,o){if(t&1&&(r(0,"span")(1,"span",15),a(2,"tz:"),n(),a(3),n()),t&2){let e=d().$implicit;s(3),u(" ",e.timezone,"")}}function ae(t,o){if(t&1&&(r(0,"span",12),b(1,"sAbsoluteTime"),r(2,"span",15),a(3,"next:"),n(),a(4),b(5,"sTimeAgo"),n()),t&2){let e=d().$implicit;_("title",g(1,2,e.nextDueAt)),s(4),u(" ",g(5,4,e.nextDueAt),"")}}function re(t,o){if(t&1&&(r(0,"span",12),b(1,"sAbsoluteTime"),r(2,"span",15),a(3,"last:"),n(),a(4),b(5,"sTimeAgo"),n()),t&2){let e=d().$implicit;_("title",g(1,2,e.lastTriggeredAt)),s(4),u(" ",g(5,4,e.lastTriggeredAt),"")}}function le(t,o){if(t&1&&(r(0,"span",16),a(1),n()),t&2){let e=o.$implicit,i=d(4);_("ngClass",i.getStatusColorClass(e.status))("title",(e.scheduledAt||"\u2014")+" \u2014 "+(e.status||"\u2014")+(e.skipReason?" ("+e.skipReason+")":"")+(e.errorDetails!=null&&e.errorDetails.message?": "+e.errorDetails.message:"")),s(),u(" ",i.getStatusLabel(e.status)," ")}}function de(t,o){if(t&1&&(r(0,"div",13),v(1,le,2,3,"span",16,J),n()),t&2){let e=d().$implicit,i=d(2);s(),I(i.getRecentExecutionsForJob(e._id))}}function ue(t,o){t&1&&(r(0,"div",14),a(1,"M\xE9g nem volt execution."),n())}function ce(t,o){if(t&1&&(r(0,"div",3)(1,"div",4)(2,"span",5),a(3),n(),r(4,"span",6),a(5),b(6,"schSchedulePresetLabel"),n(),x(7,te,2,0,"span",7)(8,ie,2,0,"span",8)(9,ne,2,0,"span",9),n(),x(10,oe,2,1,"div",10),r(11,"div",11),x(12,se,4,1,"span")(13,ae,6,6,"span",12)(14,re,6,6,"span",12),n(),x(15,de,3,0,"div",13)(16,ue,2,0,"div",14),n()),t&2){let e=o.$implicit,i=d(2);s(3),u(" ",e.name||e._id," "),s(2),u(" ",g(6,10,e.schedule)," "),s(2),c(e.paused?7:-1),s(),c(e.enabled===!1?8:-1),s(),c(e.dryRun?9:-1),s(),c(e.description?10:-1),s(2),c(e.timezone?12:-1),s(),c(e.nextDueAt?13:-1),s(),c(e.lastTriggeredAt?14:-1),s(),c(i.getRecentExecutionsForJob(e._id).length>0?15:16)}}function pe(t,o){if(t&1&&(r(0,"div",2),v(1,ce,17,12,"div",3,J),n()),t&2){let e=d();s(),I(e.jobsForSession_$())}}var Be=(()=>{class t{sessionId=S.required();isOpen=S.required();closed=D();jobs_DS=m(z);jobsForSession_$=$(()=>{let e=this.sessionId();return e?this.jobs_DS.jobs_$().filter(i=>i.target?.payload?.sessionId===e):[]});executionsByJob_$=$(()=>this.jobs_DS.recentExecutions_$());ngOnInit(){this.jobs_DS.jobs_$().length===0&&this.jobs_DS.loadAll()}getRecentExecutionsForJob(e){return e?(this.executionsByJob_$().get(e)??[]).slice(0,5):[]}getStatusColorClass(e){switch(e){case"completed":return"bg-green-500/20 text-green-400";case"triggered":return"bg-blue-500/20 text-blue-400";case"skipped":return"bg-yellow-500/20 text-yellow-400";case"failed":return"bg-red-500/20 text-red-400";case"cancelled":return"bg-neutral-500/20 text-neutral-400";case"dry-run":return"bg-purple-500/20 text-purple-400";default:return"bg-neutral-700/30 text-neutral-300"}}getStatusLabel(e){switch(e){case"completed":return"OK";case"triggered":return"RUN";case"skipped":return"SKP";case"failed":return"FAIL";case"cancelled":return"CNL";case"dry-run":return"DRY";default:return e??"\u2014"}}handleClose(){this.closed.emit()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=w({type:t,selectors:[["app-sch-schedule-popup"]],inputs:{sessionId:[1,"sessionId"],isOpen:[1,"isOpen"]},outputs:{closed:"closed"},standalone:!0,features:[T],decls:4,vars:6,consts:[[3,"closed","isOpen","title","maxWidth","bodyFlexColumn","headerBorderClass"],[1,"p-4","text-center","text-neutral-500","text-sm"],[1,"flex-1","overflow-y-auto","space-y-3","pr-1"],[1,"border","border-neutral-700/60","rounded-md","p-2.5","bg-neutral-900/40"],[1,"flex","items-center","gap-2","mb-1.5"],[1,"text-sm","font-medium","text-neutral-200","truncate"],[1,"text-[10px]","text-neutral-400"],[1,"text-[10px]","px-1","rounded","bg-yellow-500/20","text-yellow-400"],[1,"text-[10px]","px-1","rounded","bg-neutral-500/20","text-neutral-400"],[1,"text-[10px]","px-1","rounded","bg-purple-500/20","text-purple-400"],[1,"text-[11px]","text-neutral-400","mb-1.5","truncate"],[1,"flex","flex-wrap","gap-x-3","gap-y-0.5","text-[10px]","text-neutral-500","mb-2"],[3,"title"],[1,"flex","flex-wrap","gap-1"],[1,"text-[10px]","text-neutral-500"],[1,"text-neutral-600"],[1,"text-[10px]","px-1.5","py-0.5","rounded","font-mono",3,"ngClass","title"]],template:function(i,l){i&1&&(r(0,"app-s-modal",0),R("closed",function(){return l.handleClose()}),x(1,Z,2,0,"div",1)(2,ee,2,0,"div",1)(3,pe,3,0,"div",2),n()),i&2&&(_("isOpen",l.isOpen())("title","Schedule inf\xF3k ehhez a session-h\xF6z")("maxWidth","lg")("bodyFlexColumn",!0)("headerBorderClass","border-neonCyan/50"),s(),c(l.sessionId()?l.jobsForSession_$().length===0?2:3:1))},dependencies:[Q,F,P,N,U,K],encapsulation:2})}return t})();var _e=(t,o)=>o._id;function me(t,o){t&1&&(r(0,"div",1),a(1,"Nincs kiv\xE1lasztott session."),n())}function xe(t,o){t&1&&(r(0,"div",1),a(1," Ehhez a sessionh\xF6z nincs koordin\xE1tor. "),n())}function he(t,o){if(t&1&&(r(0,"span")(1,"span",9),a(2,"provider:"),n(),a(3),n()),t&2){let e=d().$implicit;s(3),u(" ",e.providerName,"")}}function fe(t,o){if(t&1&&(r(0,"span")(1,"span",9),a(2,"model:"),n(),a(3),n()),t&2){let e=d().$implicit;s(3),u(" ",e.model,"")}}function Se(t,o){if(t&1&&(r(0,"span")(1,"span",9),a(2,"project:"),n(),a(3),n()),t&2){let e=d().$implicit;s(3),u(" ",e.projectId,"")}}function Ce(t,o){if(t&1&&(r(0,"div",10)(1,"span",9),a(2,"paused:"),n(),a(3),n()),t&2){let e=d().$implicit;_("title",e.pauseReason),s(3),u(" ",e.pauseReason," ")}}function ve(t,o){if(t&1&&(r(0,"div",11)(1,"span",9),a(2,"last:"),n(),a(3),n()),t&2){let e=d().$implicit;_("title",e.lastResponseSummary),s(3),u(" ",e.lastResponseSummary," ")}}function Ie(t,o){if(t&1&&(r(0,"span",13),a(1),n()),t&2){let e=o.$implicit;_("title",e),s(),u(" blocker: ",e," ")}}function be(t,o){if(t&1&&(r(0,"div",12),v(1,Ie,2,2,"span",13,q),n()),t&2){let e=d().$implicit;s(),I(e.blockers)}}function ge(t,o){if(t&1&&(r(0,"div",3)(1,"div",4)(2,"span",5),a(3),n(),r(4,"span",6),a(5),n()(),r(6,"div",7),x(7,he,4,1,"span")(8,fe,4,1,"span")(9,Se,4,1,"span"),n(),r(10,"div",8)(11,"span",9),a(12,"phase:"),n(),a(13),r(14,"span",9),a(15,"\xB7"),n(),r(16,"span",9),a(17,"phase-step:"),n(),a(18),r(19,"span",9),a(20,"\xB7"),n(),r(21,"span",9),a(22,"total:"),n(),a(23),n(),x(24,Ce,4,2,"div",10)(25,ve,4,2,"div",11)(26,be,3,0,"div",12),n()),t&2){let e=o.$implicit,i=d(2);s(3),u(" ",e.workflowId||e._id," "),s(),_("ngClass",i.getStatusColorClass(e.status)),s(),u(" ",e.status||"\u2014"," "),s(2),c(e.providerName?7:-1),s(),c(e.model?8:-1),s(),c(e.projectId?9:-1),s(4),u(" ",e.currentPhaseIndex," "),s(5),u(" ",e.currentPhaseStepCount," "),s(5),u(" ",e.totalStepCount," "),s(),c(e.pauseReason?24:-1),s(),c(e.lastResponseSummary?25:-1),s(),c(e.blockers&&e.blockers.length>0?26:-1)}}function Ee(t,o){if(t&1&&(r(0,"div",2),v(1,ge,27,12,"div",3,_e),n()),t&2){let e=d();s(),I(e.coordinatorsForSession_$())}}var Ne=(()=>{class t{sessionId=S.required();isOpen=S.required();closed=D();coordinator_DS=m(M);coordinatorsForSession_$=$(()=>{let e=this.sessionId();return e?this.coordinator_DS.globalCoordinatorsList_$().filter(i=>i.sessionId===e):[]});ngOnInit(){this.coordinator_DS.globalCoordinatorsList_$().length===0&&this.coordinator_DS.loadAllCoordinatorsForManagementPage()}getStatusColorClass(e){switch((e??"").trim().toLowerCase()){case"active":return"bg-green-500/20 text-green-400";case"running":return"bg-green-500/20 text-green-400";case"paused":return"bg-yellow-500/20 text-yellow-400";case"idle":return"bg-blue-500/20 text-blue-400";case"stopped":return"bg-neutral-500/20 text-neutral-400";case"completed":return"bg-neutral-600/20 text-neutral-400";case"failed":return"bg-red-500/20 text-red-400";default:return"bg-neutral-700/30 text-neutral-300"}}handleClose(){this.closed.emit()}static \u0275fac=function(i){return new(i||t)};static \u0275cmp=w({type:t,selectors:[["app-crd-info-popup"]],inputs:{sessionId:[1,"sessionId"],isOpen:[1,"isOpen"]},outputs:{closed:"closed"},standalone:!0,features:[T],decls:4,vars:6,consts:[[3,"closed","isOpen","title","maxWidth","bodyFlexColumn","headerBorderClass"],[1,"p-4","text-center","text-neutral-500","text-sm"],[1,"flex-1","overflow-y-auto","space-y-3","pr-1"],[1,"border","border-neutral-700/60","rounded-md","p-2.5","bg-neutral-900/40"],[1,"flex","items-center","gap-2","mb-1.5"],[1,"text-sm","font-medium","text-neutral-200","truncate"],[1,"text-[10px]","px-1.5","py-0.5","rounded","font-mono",3,"ngClass"],[1,"flex","flex-wrap","gap-x-3","gap-y-0.5","text-[10px]","text-neutral-500","mb-2"],[1,"text-[11px]","text-neutral-400","mb-1.5"],[1,"text-neutral-600"],[1,"text-[11px]","text-yellow-400/80","mb-1.5","truncate",3,"title"],[1,"text-[11px]","text-neutral-400","mb-1.5","line-clamp-2",3,"title"],[1,"flex","flex-wrap","gap-1","mt-1"],[1,"text-[10px]","px-1.5","py-0.5","rounded","bg-red-500/15","text-red-400","truncate","max-w-full",3,"title"]],template:function(i,l){i&1&&(r(0,"app-s-modal",0),R("closed",function(){return l.handleClose()}),x(1,me,2,0,"div",1)(2,xe,2,0,"div",1)(3,Ee,3,0,"div",2),n()),i&2&&(_("isOpen",l.isOpen())("title","Koordin\xE1tor inf\xF3k ehhez a session-h\xF6z")("maxWidth","lg")("bodyFlexColumn",!0)("headerBorderClass","border-neonAmber/50"),s(),c(l.sessionId()?l.coordinatorsForSession_$().length===0?2:3:1))},dependencies:[Q,F,P],encapsulation:2})}return t})();var W=(()=>{class t{apiBase=L.api.baseUrl;http=m(j);getQueue(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}?_t=${Date.now()}`;return f(this.http.get(i))}editItem(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/${e.queueItemId}`;return f(this.http.patch(i,{text:e.text}))}removeItem(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/${e.queueItemId}`;return f(this.http.delete(i))}sendNow(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/${e.queueItemId}/send-now`;return f(this.http.post(i,{}))}reorderItem(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/${e.queueItemId}/reorder`;return f(this.http.post(i,{direction:e.direction}))}lockQueue(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/lock`;return f(this.http.post(i,{}))}unlockQueue(e){let i=`${this.buildUrl(e.baseRoute,e.sessionId)}/unlock`;return f(this.http.post(i,{}))}buildUrl(e,i){return`${this.apiBase}/${e}-queue/${i}`}static \u0275fac=function(i){return new(i||t)};static \u0275prov=y({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var p=G(Y());var $e="session-queue:updated",ye="session-queue:lock-changed",tt=(()=>{class t{sessionQueue_AS=m(W);socket_CS=m(H);globalError_CS=m(O);eventSubscription=null;reconnectSubscription=null;activeSessionId="";activeBaseRoute="";queueSnapshot_$=C(null);isLocked_$=C(!1);editingItemId_$=C(null);editingText_$=C("");items_$=C([]);constructor(){this.eventSubscription=this.socket_CS.event$.subscribe(e=>{this.handleSocketEvent(e)}),this.reconnectSubscription=this.socket_CS.connected$.subscribe(e=>{e&&this.activeSessionId&&(p.DyFM_Log.info(`ExS_Queue_DS | Socket reconnected, reloading queue | session: ${this.activeSessionId}`),this.loadQueue())})}ngOnDestroy(){this.eventSubscription?.unsubscribe(),this.eventSubscription=null,this.reconnectSubscription?.unsubscribe(),this.reconnectSubscription=null}subscribeToSession(e){this.activeSessionId=e.sessionId,this.activeBaseRoute=e.baseRoute,p.DyFM_Log.info(`ExS_Queue_DS | subscribeToSession | session: ${e.sessionId} | baseRoute: ${e.baseRoute}`),this.loadQueue()}unsubscribe(){this.activeSessionId="",this.activeBaseRoute="",this.queueSnapshot_$.set(null),this.items_$.set([]),this.isLocked_$.set(!1),this.editingItemId_$.set(null),this.editingText_$.set("")}startEditing(e){return h(this,null,function*(){if(!this.activeSessionId||!this.activeBaseRoute)return;if(!this.isItemInCurrentSnapshot(e)){p.DyFM_Log.info(`ExS_Queue_DS | startEditing \u2014 stale item, reloading | queueItemId: ${e}`),yield this.loadQueue();return}try{yield this.sessionQueue_AS.lockQueue({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId})}catch{return}let i=this.items_$().find(l=>l.queueItemId===e);this.isLocked_$.set(!0),this.editingItemId_$.set(e),this.editingText_$.set(i?.text??"")})}saveEdit(){return h(this,null,function*(){let e=this.editingItemId_$();if(!(!e||!this.activeSessionId||!this.activeBaseRoute)){try{if((yield this.sessionQueue_AS.editItem({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId,queueItemId:e,text:this.editingText_$()})).item===null){this.globalError_CS.showError(new Error("Queue item not found \u2014 it may have been delivered while editing"),"session-queue-edit"),yield this.finishEditing(),yield this.loadQueue();return}}catch(i){this.globalError_CS.showError(i,"session-queue-edit-save");return}yield this.finishEditing()}})}cancelEdit(){return h(this,null,function*(){yield this.finishEditing()})}removeItem(e){return h(this,null,function*(){if(!(!this.activeSessionId||!this.activeBaseRoute)){if(!this.isItemInCurrentSnapshot(e)){p.DyFM_Log.info(`ExS_Queue_DS | removeItem \u2014 stale item, reloading | queueItemId: ${e}`),yield this.loadQueue();return}try{(yield this.sessionQueue_AS.removeItem({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId,queueItemId:e})).success===!1&&(p.DyFM_Log.info(`ExS_Queue_DS | removeItem \u2014 server: item not found, reloading | queueItemId: ${e}`),yield this.loadQueue())}catch{yield this.loadQueue()}}})}sendNow(e){return h(this,null,function*(){if(!(!this.activeSessionId||!this.activeBaseRoute)){if(!this.isItemInCurrentSnapshot(e)){p.DyFM_Log.info(`ExS_Queue_DS | sendNow \u2014 stale item, reloading | queueItemId: ${e}`),yield this.loadQueue();return}try{let i=yield this.sessionQueue_AS.sendNow({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId,queueItemId:e});if(i.success===!1){let l=typeof i.reason=="string"?i.reason:"unknown";l==="Item not found in queue"?p.DyFM_Log.info(`ExS_Queue_DS | sendNow \u2014 server: item already delivered, reloading | queueItemId: ${e}`):this.globalError_CS.showError(new Error(`Send-now delivery failed: ${l}`),"session-queue-send-now"),yield this.loadQueue()}}catch{yield this.loadQueue()}}})}reorderItem(e){return h(this,null,function*(){if(!(!this.activeSessionId||!this.activeBaseRoute)){if(!this.isItemInCurrentSnapshot(e.queueItemId)){p.DyFM_Log.info(`ExS_Queue_DS | reorderItem \u2014 stale item, reloading | queueItemId: ${e.queueItemId}`),yield this.loadQueue();return}try{(yield this.sessionQueue_AS.reorderItem({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId,queueItemId:e.queueItemId,direction:e.direction})).success===!1&&(p.DyFM_Log.info(`ExS_Queue_DS | reorderItem \u2014 server: item not found, reloading | queueItemId: ${e.queueItemId}`),yield this.loadQueue())}catch{yield this.loadQueue()}}})}isItemInCurrentSnapshot(e){return this.items_$().some(i=>i.queueItemId===e)}loadQueue(){return h(this,null,function*(){let e=this.activeSessionId,i=this.activeBaseRoute;if(!(!e||!i))try{let l=yield this.sessionQueue_AS.getQueue({baseRoute:i,sessionId:e});if(this.activeSessionId!==e){p.DyFM_Log.info(`ExS_Queue_DS | loadQueue result discarded (session changed) | requested: ${e} | current: ${this.activeSessionId}`);return}let E=l?.queue?.items?.length??0;p.DyFM_Log.info(`ExS_Queue_DS | loadQueue OK | session: ${e} | items: ${E}`),this.applySnapshot(l.queue)}catch(l){if(this.activeSessionId!==e)return;p.DyFM_Log.warn(`ExS_Queue_DS | loadQueue FAILED | session: ${e} | baseRoute: ${i} | error: ${l instanceof Error?l.message:String(l)}`),this.queueSnapshot_$.set(null),this.items_$.set([])}})}applySnapshot(e){this.queueSnapshot_$.set(e),this.items_$.set(e.items??[]),this.isLocked_$.set(e.isLocked)}finishEditing(){return h(this,null,function*(){if(this.editingItemId_$.set(null),this.editingText_$.set(""),this.isLocked_$.set(!1),!(!this.activeSessionId||!this.activeBaseRoute))try{yield this.sessionQueue_AS.unlockQueue({baseRoute:this.activeBaseRoute,sessionId:this.activeSessionId})}catch(e){this.globalError_CS.showError(e,"session-queue-unlock")}})}handleSocketEvent(e){let i=e.payload;if((typeof i.sessionId=="string"?i.sessionId:"")===this.activeSessionId&&(e.event===$e&&this.applySnapshot(i),e.event===ye)){let E=typeof i.isLocked=="boolean"?i.isLocked:!1;this.isLocked_$.set(E)}}static \u0275fac=function(i){return new(i||t)};static \u0275prov=y({token:t,factory:t.\u0275fac,providedIn:"root"})}return t})();var V=class t{static saveDraft(o,e,i){!o||!e||k.writeString(`${o}:promptDraft:${e}`,i)}static loadDraft(o,e){return!o||!e?"":k.readString(`${o}:promptDraft:${e}`)??""}static clearDraft(o,e){!o||!e||k.remove(`${o}:promptDraft:${e}`)}static hasDraft(o,e){return!o||!e?!1:t.loadDraft(o,e).trim().length>0}};export{V as a,Be as b,Ne as c,tt as d};
2
+ //# sourceMappingURL=chunk-BJ4I73WC.js.map
@@ -1,2 +1,2 @@
1
- import{a as h}from"./chunk-S7U2FMEE.js";import{I as c,p as _}from"./chunk-CFK7FARI.js";import{C as a,aa as r,h as u,k as n,p as o,xb as f,y as l}from"./chunk-TBMJSIBB.js";var p=u(_());var $=6e4,y=(()=>{class i{api_AS=a(h);instancePresenceMap_$=r(new Map);intervalHandle=void 0;lastRefreshAt_$=r(null);startPeriodicRefresh(){this.intervalHandle===void 0&&(this.refreshNow(),this.intervalHandle=setInterval(()=>{this.refreshNow()},$))}stopPeriodicRefresh(){this.intervalHandle!==void 0&&(clearInterval(this.intervalHandle),this.intervalHandle=void 0)}refreshNow(){return n(this,null,function*(){try{let t=yield this.api_AS.getPresence(),e=new Map;for(let s of t.list??[])s.instanceKey&&e.set(s.instanceKey,s);this.instancePresenceMap_$.set(e),this.lastRefreshAt_$.set(new Date().toISOString())}catch(t){p.DyFM_Log.warn(`[CCAP] ExS_InstancePresence_DataService refresh failed (non-fatal): ${t instanceof Error?t.message:String(t)}`)}})}getPresence(t){let e=this.instancePresenceMap_$().get(t);return e||{instanceKey:t,presence:"unknown",wsConnected:!1,reason:"presence map not loaded yet"}}ngOnDestroy(){this.stopPeriodicRefresh()}static \u0275fac=function(e){return new(e||i)};static \u0275prov=l({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var g=5e3,P=18,v=5e3,L=(()=>{class i{versionInfo_$=r(null);loading_$=r(!1);loadError_$=r(null);lastLoadedAt_$=r(null);triggering_$=r(!1);triggerResult_$=r(null);triggerError_$=r(null);pollingPostUpdate_$=r(!1);triggerSucceeded_$=r(null);triggerTimedOut_$=r(!1);http=a(f);pollTimer=null;loadVersionInfo(){return n(this,null,function*(){this.loading_$.set(!0),this.loadError_$.set(null);try{let t=`${c.api.baseUrl}/server/health/version-info`,e=yield o(this.http.get(t));this.versionInfo_$.set(e),this.lastLoadedAt_$.set(new Date)}catch(t){let e=t instanceof Error?t.message:String(t);this.loadError_$.set(e),this.versionInfo_$.set(null)}finally{this.loading_$.set(!1)}})}triggerUpdate(t){return n(this,null,function*(){this.cancelPostUpdatePolling(),this.triggerSucceeded_$.set(null),this.triggerTimedOut_$.set(!1),this.triggering_$.set(!0),this.triggerError_$.set(null),this.triggerResult_$.set(null);try{let e=`${c.api.baseUrl}/server/health/trigger-update`,s=yield o(this.http.post(e,{force:t===!0}));this.triggerResult_$.set(s),s.status==="started"&&s.currentVersion&&this.startPostUpdatePolling(s.currentVersion)}catch(e){let s=e instanceof Error?e.message:String(e);this.triggerError_$.set(s)}finally{this.triggering_$.set(!1)}})}startPostUpdatePolling(t){this.pollingPostUpdate_$.set(!0);let e=0,s=()=>n(this,null,function*(){e+=1;let d=yield this.pollHealthPid();if(d&&d!==t){this.triggerSucceeded_$.set({oldVersion:t,newVersion:d,detectedAtMs:Date.now()}),this.pollingPostUpdate_$.set(!1),this.pollTimer=null,setTimeout(()=>{typeof window<"u"&&window?.location&&window.location.reload()},v);return}if(e>=P){this.triggerTimedOut_$.set(!0),this.pollingPostUpdate_$.set(!1),this.pollTimer=null;return}this.pollTimer=setTimeout(()=>{s()},g)});this.pollTimer=setTimeout(()=>{s()},g)}cancelPostUpdatePolling(){this.pollTimer&&(clearTimeout(this.pollTimer),this.pollTimer=null),this.pollingPostUpdate_$.set(!1)}pollHealthPid(){return n(this,null,function*(){try{let t=`${c.api.baseUrl}/server/health/pid`,e=yield o(this.http.get(t));return typeof e?.ccapVersion=="string"?e.ccapVersion:null}catch{return null}})}static \u0275fac=function(e){return new(e||i)};static \u0275prov=l({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();export{y as a,L as b};
2
- //# sourceMappingURL=chunk-SZ5YB5I5.js.map
1
+ import{a as h}from"./chunk-U64N3LCA.js";import{I as c,p as _}from"./chunk-RUSAMFGS.js";import{C as a,aa as r,h as u,k as n,p as o,xb as f,y as l}from"./chunk-TBMJSIBB.js";var p=u(_());var $=6e4,y=(()=>{class i{api_AS=a(h);instancePresenceMap_$=r(new Map);intervalHandle=void 0;lastRefreshAt_$=r(null);startPeriodicRefresh(){this.intervalHandle===void 0&&(this.refreshNow(),this.intervalHandle=setInterval(()=>{this.refreshNow()},$))}stopPeriodicRefresh(){this.intervalHandle!==void 0&&(clearInterval(this.intervalHandle),this.intervalHandle=void 0)}refreshNow(){return n(this,null,function*(){try{let t=yield this.api_AS.getPresence(),e=new Map;for(let s of t.list??[])s.instanceKey&&e.set(s.instanceKey,s);this.instancePresenceMap_$.set(e),this.lastRefreshAt_$.set(new Date().toISOString())}catch(t){p.DyFM_Log.warn(`[CCAP] ExS_InstancePresence_DataService refresh failed (non-fatal): ${t instanceof Error?t.message:String(t)}`)}})}getPresence(t){let e=this.instancePresenceMap_$().get(t);return e||{instanceKey:t,presence:"unknown",wsConnected:!1,reason:"presence map not loaded yet"}}ngOnDestroy(){this.stopPeriodicRefresh()}static \u0275fac=function(e){return new(e||i)};static \u0275prov=l({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var g=5e3,P=18,v=5e3,L=(()=>{class i{versionInfo_$=r(null);loading_$=r(!1);loadError_$=r(null);lastLoadedAt_$=r(null);triggering_$=r(!1);triggerResult_$=r(null);triggerError_$=r(null);pollingPostUpdate_$=r(!1);triggerSucceeded_$=r(null);triggerTimedOut_$=r(!1);http=a(f);pollTimer=null;loadVersionInfo(){return n(this,null,function*(){this.loading_$.set(!0),this.loadError_$.set(null);try{let t=`${c.api.baseUrl}/server/health/version-info`,e=yield o(this.http.get(t));this.versionInfo_$.set(e),this.lastLoadedAt_$.set(new Date)}catch(t){let e=t instanceof Error?t.message:String(t);this.loadError_$.set(e),this.versionInfo_$.set(null)}finally{this.loading_$.set(!1)}})}triggerUpdate(t){return n(this,null,function*(){this.cancelPostUpdatePolling(),this.triggerSucceeded_$.set(null),this.triggerTimedOut_$.set(!1),this.triggering_$.set(!0),this.triggerError_$.set(null),this.triggerResult_$.set(null);try{let e=`${c.api.baseUrl}/server/health/trigger-update`,s=yield o(this.http.post(e,{force:t===!0}));this.triggerResult_$.set(s),s.status==="started"&&s.currentVersion&&this.startPostUpdatePolling(s.currentVersion)}catch(e){let s=e instanceof Error?e.message:String(e);this.triggerError_$.set(s)}finally{this.triggering_$.set(!1)}})}startPostUpdatePolling(t){this.pollingPostUpdate_$.set(!0);let e=0,s=()=>n(this,null,function*(){e+=1;let d=yield this.pollHealthPid();if(d&&d!==t){this.triggerSucceeded_$.set({oldVersion:t,newVersion:d,detectedAtMs:Date.now()}),this.pollingPostUpdate_$.set(!1),this.pollTimer=null,setTimeout(()=>{typeof window<"u"&&window?.location&&window.location.reload()},v);return}if(e>=P){this.triggerTimedOut_$.set(!0),this.pollingPostUpdate_$.set(!1),this.pollTimer=null;return}this.pollTimer=setTimeout(()=>{s()},g)});this.pollTimer=setTimeout(()=>{s()},g)}cancelPostUpdatePolling(){this.pollTimer&&(clearTimeout(this.pollTimer),this.pollTimer=null),this.pollingPostUpdate_$.set(!1)}pollHealthPid(){return n(this,null,function*(){try{let t=`${c.api.baseUrl}/server/health/pid`,e=yield o(this.http.get(t));return typeof e?.ccapVersion=="string"?e.ccapVersion:null}catch{return null}})}static \u0275fac=function(e){return new(e||i)};static \u0275prov=l({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();export{y as a,L as b};
2
+ //# sourceMappingURL=chunk-C2BQQRVH.js.map
@@ -1,2 +1,2 @@
1
- import{a as R,b as z,c as Ce}from"./chunk-EVTV632M.js";import{c as ge}from"./chunk-AC2BVG34.js";import{a as xe}from"./chunk-FLAJXIYW.js";import{b as le,c as se,f as de,i as ce,n as ue,o as _e,p as me,v as pe}from"./chunk-EO4DNTT4.js";import{a as K}from"./chunk-5UPNU54P.js";import{j as fe}from"./chunk-QIGBGNDG.js";import{C as q,D as Y,Fa as d,Ga as $,Ha as L,Ia as ie,J as f,Ja as oe,K as x,Ka as re,L as A,M as I,Ma as N,Na as W,Oa as O,Q as j,Ta as ae,U as H,Y as ee,Z as l,aa as p,da as C,fa as V,ga as y,ha as G,hb as v,ia as F,k as P,la as g,ma as te,na as ne,oa as B,pa as D,qa as o,ra as r,sa as S,ua as T,va as m,wa as c,y as X}from"./chunk-TBMJSIBB.js";var he="ccap-voiceInput:autoSendAfterVoice",be=(()=>{class n{autoSendAfterVoice_$=p(n.readAutoSendAfterVoiceFromStorage());setAutoSendAfterVoice(e){this.autoSendAfterVoice_$.set(e),K.writeString(he,String(e))}static readAutoSendAfterVoiceFromStorage(){return K.readString(he)==="true"}static \u0275fac=function(t){return new(t||n)};static \u0275prov=X({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var k=function(n){return n.equal="equal",n.removed="removed",n.added="added",n}(k||{});var U=class n{static tokenize(s){let e=s;if(e.length===0)return[];let t=e.split(/(\s+)/),i=[];for(let a=0;a<t.length;a++){let u=t[a];u.length>0&&i.push(u)}return i}static mergeAndAssignIds(s){if(s.length===0)return[];let e=[];for(let i=0;i<s.length;i++){let a=s[i],u=e[e.length-1];u!==void 0&&u.kind===a.kind?u.text=u.text+a.text:e.push({kind:a.kind,text:a.text})}let t=[];for(let i=0;i<e.length;i++){let a=e[i];t.push({id:i,kind:a.kind,text:a.text})}return t}static buildWordDiff(s,e){let t=n.tokenize(s),i=n.tokenize(e),a=t.length,u=i.length,_=[];for(let h=0;h<=a;h++){let E=[];for(let Q=0;Q<=u;Q++)E.push(0);_.push(E)}for(let h=1;h<=a;h++)for(let E=1;E<=u;E++)if(t[h-1]===i[E-1])_[h][E]=_[h-1][E-1]+1;else{let Q=_[h-1][E],Z=_[h][E-1];_[h][E]=Q>Z?Q:Z}let w=[],b=a,M=u;for(;b>0||M>0;)b>0&&M>0&&t[b-1]===i[M-1]?(w.push({kind:k.equal,text:t[b-1]}),b-=1,M-=1):M>0&&(b===0||_[b][M-1]>=_[b-1][M])?(w.push({kind:k.added,text:i[M-1]}),M-=1):b>0&&(w.push({kind:k.removed,text:t[b-1]}),b-=1);let J=[];for(let h=w.length-1;h>=0;h--)J.push(w[h]);return n.mergeAndAssignIds(J)}};var Se=(n,s)=>s.value,Ee=(n,s)=>s.id;function ye(n,s){n&1&&S(0,"span",25)}function $e(n,s){if(n&1&&(o(0,"div",28),S(1,"div",33)(2,"div",34),r()),n&2){let e=c(3);l(),G("height",e.volumePercent_$(),"%")}}function we(n,s){if(n&1&&(o(0,"div",26),C(1,$e,3,2,"div",28),A(),o(2,"svg",29),S(3,"path",30)(4,"path",31)(5,"line",32),r()()),n&2){let e=c(2);l(),g(e.isRecordActive_$()?1:-1)}}function Me(n,s){n&1&&(o(0,"p",27)(1,"span",35),d(2,"\u26A0"),r(),d(3),r()),n&2&&(V("aria-live","polite"),l(3),L("",s," "))}function Ae(n,s){if(n&1){let e=T();o(0,"div",0)(1,"div",15)(2,"button",16),m("click",function(i){return f(e),c().toggleSettings(),x(i.stopPropagation())}),A(),o(3,"svg",17),S(4,"path",18)(5,"path",19),r()(),I(),o(6,"button",20),m("click",function(i){return f(e),c().toggleInfo(),x(i.stopPropagation())}),A(),o(7,"svg",17),S(8,"circle",21)(9,"path",22)(10,"path",23),r()()(),I(),o(11,"button",24),m("click",function(){f(e);let i=c();return x(i.toggleRecord())}),C(12,ye,1,0,"span",25)(13,we,6,1,"div",26),r(),C(14,Me,4,2,"p",27),r()}if(n&2){let e,t=c();l(6),F("border-neonDefault",!t.lastQaTextWasModified_$())("text-neonCyan",!t.lastQaTextWasModified_$())("hover:border-neonCyan",!t.lastQaTextWasModified_$())("hover:shadow-neon-glow-cyan",!t.lastQaTextWasModified_$())("focus:ring-neonCyan",!t.lastQaTextWasModified_$())("border-neonAmber",t.lastQaTextWasModified_$())("text-neonAmber",t.lastQaTextWasModified_$())("shadow-neon-glow-orange",t.lastQaTextWasModified_$())("hover:border-neonAmber",t.lastQaTextWasModified_$())("hover:shadow-neon-glow-orange",t.lastQaTextWasModified_$())("focus:ring-neonAmber",t.lastQaTextWasModified_$()),V("aria-label",t.lastQaTextWasModified_$()?"Utols\xF3 QA eredm\xE9ny \u2014 a sz\xF6veg m\xF3dosult":"Utols\xF3 QA eredm\xE9ny")("title",t.lastQaTextWasModified_$()?"Utols\xF3 QA eredm\xE9ny \u2014 a sz\xF6veg m\xF3dosult (r\xE9szletek)":"Utols\xF3 QA eredm\xE9ny"),l(5),F("border-neonCyan",t.isRecordActive_$()||t.busy_$())("shadow-neon-glow-cyan",t.isRecordActive_$()||t.busy_$())("animate-pulse",t.isRecording_$()),y("disabled",t.mediaUnavailable_$()!==null),V("aria-label",t.recordButtonAriaLabel_$())("title",t.recordButtonTitle_$()),l(),g(t.busy_$()&&!t.isRecordActive_$()?12:13),l(2),g((e=t.mediaUnavailable_$())?14:-1,e)}}function Te(n,s){n&1&&S(0,"span",25)}function Pe(n,s){if(n&1&&(o(0,"div",28),S(1,"div",33)(2,"div",34),r()),n&2){let e=c(3);l(),G("height",e.volumePercent_$(),"%")}}function Ve(n,s){if(n&1&&(o(0,"div",26),C(1,Pe,3,2,"div",28),A(),o(2,"svg",29),S(3,"path",30)(4,"path",31)(5,"line",32),r()()),n&2){let e=c(2);l(),g(e.isRecordActive_$()?1:-1)}}function ke(n,s){n&1&&(o(0,"p",39)(1,"span",35),d(2,"\u26A0"),r(),d(3),r()),n&2&&(V("aria-live","polite"),l(3),L("",s," "))}function Re(n,s){if(n&1){let e=T();o(0,"div",36)(1,"button",24),m("click",function(){f(e);let i=c();return x(i.toggleRecord())}),C(2,Te,1,0,"span",25)(3,Ve,6,1,"div",26),r(),o(4,"button",37),m("click",function(i){return f(e),c().toggleSettings(),x(i.stopPropagation())}),A(),o(5,"svg",17),S(6,"path",18)(7,"path",19),r()(),I(),o(8,"button",38),m("click",function(i){return f(e),c().toggleInfo(),x(i.stopPropagation())}),A(),o(9,"svg",17),S(10,"circle",21)(11,"path",22)(12,"path",23),r()()(),C(13,ke,4,2,"p",39)}if(n&2){let e,t=c();l(),F("border-neonCyan",t.isRecordActive_$()||t.busy_$())("shadow-neon-glow-cyan",t.isRecordActive_$()||t.busy_$())("animate-pulse",t.isRecording_$()),y("disabled",t.mediaUnavailable_$()!==null),V("aria-label",t.recordButtonAriaLabel_$())("title",t.recordButtonTitle_$()),l(),g(t.busy_$()&&!t.isRecordActive_$()?2:3),l(6),F("border-neonDefault",!t.lastQaTextWasModified_$())("text-neonCyan",!t.lastQaTextWasModified_$())("hover:border-neonCyan",!t.lastQaTextWasModified_$())("hover:shadow-neon-glow-cyan",!t.lastQaTextWasModified_$())("focus:ring-neonCyan",!t.lastQaTextWasModified_$())("border-neonAmber",t.lastQaTextWasModified_$())("text-neonAmber",t.lastQaTextWasModified_$())("shadow-neon-glow-orange",t.lastQaTextWasModified_$())("hover:border-neonAmber",t.lastQaTextWasModified_$())("hover:shadow-neon-glow-orange",t.lastQaTextWasModified_$())("focus:ring-neonAmber",t.lastQaTextWasModified_$()),V("aria-label",t.lastQaTextWasModified_$()?"Utols\xF3 QA eredm\xE9ny \u2014 a sz\xF6veg m\xF3dosult":"Utols\xF3 QA eredm\xE9ny")("title",t.lastQaTextWasModified_$()?"Utols\xF3 QA eredm\xE9ny \u2014 a sz\xF6veg m\xF3dosult (r\xE9szletek)":"Utols\xF3 QA eredm\xE9ny"),l(5),g((e=t.mediaUnavailable_$())?13:-1,e)}}function Qe(n,s){if(n&1&&(o(0,"p",45),d(1),r()),n&2){let e=c(2);l(),re(" Override: ",e.qaProviderDisplayLabel_$()," / ",e.qaModelName||"\u2014"," (glob\xE1l: ",e.defaultLlmProviderDisplayLabel_$()||"\u2014"," / ",e.defaultLlmModel_$()||"\u2014","). ")}}function qe(n,s){if(n&1&&(o(0,"p",45),d(1),r()),n&2){let e=c(2);l(),ie(" Nincs be\xE1ll\xEDtva \u2013 haszn\xE1lt: ",e.defaultLlmProviderDisplayLabel_$()||"\u2014"," / ",e.defaultLlmModel_$()||"\u2014"," (glob\xE1l). ")}}function Fe(n,s){if(n&1&&(o(0,"option",49),d(1),r()),n&2){let e=s.$implicit;y("value",e.value),l(),$(e.label)}}function Be(n,s){if(n&1&&(o(0,"option",49),d(1),r()),n&2){let e=s.$implicit;y("value",e),l(),$(e)}}function De(n,s){if(n&1){let e=T();o(0,"select",59),O("ngModelChange",function(i){f(e);let a=c(2);return W(a.qaModelName,i)||(a.qaModelName=i),x(i)}),o(1,"option",48),d(2,"\u2014 default \u2014"),r(),B(3,Be,2,2,"option",49,ne),r()}if(n&2){let e=c(2);N("ngModel",e.qaModelName),l(3),D(e.qaModelsForProvider_$())}}function Le(n,s){if(n&1){let e=T();o(0,"input",60),O("ngModelChange",function(i){f(e);let a=c(2);return W(a.qaModelName,i)||(a.qaModelName=i),x(i)}),r()}if(n&2){let e=c(2);N("ngModel",e.qaModelName)}}function Ne(n,s){if(n&1&&(o(0,"p",52),d(1),r()),n&2){let e=c(2);l(),$(e.qaModelsListFetchError_$())}}function We(n,s){if(n&1){let e=T();o(0,"div",15)(1,"input",61),m("input",function(i){let a=f(e).$index,u=c(2);return x(u.updateConfusionFrom(a,i.target.value))}),r(),o(2,"span",62),d(3,"\u2192"),r(),o(4,"input",63),m("input",function(i){let a=f(e).$index,u=c(2);return x(u.updateConfusionTo(a,i.target.value))}),r(),o(5,"button",64),m("click",function(){let i=f(e).$index,a=c(2);return x(a.removeConfusionEntry(i))}),o(6,"span",65),d(7,"T\xF6rl\xE9s"),r(),A(),o(8,"svg",66),S(9,"path",67),r()()()}if(n&2){let e=s.$implicit;l(),y("value",e.from),l(3),y("value",e.to)}}function Oe(n,s){if(n&1){let e=T();o(0,"div",8)(1,"div",40)(2,"p",41),d(3,"System prompt (LLM-nek)"),r(),o(4,"p",42),d(5),r()(),o(6,"div",40)(7,"p",41),d(8," User prompt sablon (ide f\u0171z\u0151dik be a felv\xE9tel adata) "),r(),o(9,"p",43),d(10),r(),o(11,"p",44),d(12),r()(),o(13,"div",40)(14,"p",41),d(15,"STT QA provider \xE9s modell"),r(),C(16,Qe,2,4,"p",45)(17,qe,2,2,"p",45),o(18,"div",46)(19,"select",47),O("ngModelChange",function(i){f(e);let a=c();return W(a.qaProviderName,i)||(a.qaProviderName=i),x(i)}),m("ngModelChange",function(){f(e);let i=c();return x(i.onQaProviderChange())}),o(20,"option",48),d(21,"\u2014 default \u2014"),r(),B(22,Fe,2,2,"option",49,Se),r(),C(24,De,5,1,"select",50)(25,Le,1,1,"input",51),r(),C(26,Ne,2,1,"p",52),r(),o(27,"div",53)(28,"p",54),d(29," Tipikus el\xEDr\xE1sok / tip\xF3k (confusion map) \u2013 ezekre jav\xEDt a QA "),r(),o(30,"div",55),B(31,We,10,2,"div",15,te),r(),o(33,"div",56)(34,"button",57),m("click",function(){f(e);let i=c();return x(i.addConfusionEntry())}),d(35," + Sor hozz\xE1ad\xE1sa "),r(),o(36,"button",58),m("click",function(){f(e);let i=c();return x(i.saveQaSettings())}),d(37),r()()()()}if(n&2){let e=s,t=c();l(5),$(e.systemPrompt),l(5),L(" ",e.userPromptTemplate," "),l(2),oe(" Placeholderek: ","{{TRANSCRIPT}}"," = nyers sz\xF6veg, ","{{NOTE_CONTEXT}}"," = jegyzet, ","{{CONFUSION_MAP}}"," = az al\xE1bbi el\xEDr\xE1s lista JSON-ban. "),l(4),g(t.qaProviderName.trim()?16:17),l(3),N("ngModel",t.qaProviderName),l(3),D(t.llmProviderSelectOptions_$()),l(2),g(t.qaShowModelSelect_$()?24:25),l(2),g(t.qaModelsListFetchError_$().trim()?26:-1),l(5),D(t.confusionMapList_$()),l(5),y("disabled",t.qaSettingsSaving_$()),l(),L(" ",t.qaSettingsSaving_$()?"Ment\xE9s\u2026":"QA be\xE1ll\xEDt\xE1sok ment\xE9se"," ")}}function Ie(n,s){n&1&&(o(0,"p",9),d(1,"QA be\xE1ll\xEDt\xE1sok bet\xF6lt\xE9se\u2026"),r())}function ze(n,s){if(n&1){let e=T();o(0,"p",68),d(1," A QA be\xE1ll\xEDt\xE1sok bet\xF6lt\xE9se sikertelen. "),r(),o(2,"button",69),m("click",function(){f(e);let i=c();return x(i.loadQaSettings())}),d(3," \xDAjra bet\xF6lt\xE9s "),r()}}function Ue(n,s){if(n&1&&(o(0,"span",78),d(1),r()),n&2){let e=c().$implicit;l(),$(e.text)}}function je(n,s){if(n&1&&(o(0,"span",79),d(1),r()),n&2){let e=c().$implicit;l(),$(e.text)}}function He(n,s){if(n&1&&(o(0,"span",80),d(1),r()),n&2){let e=c().$implicit;l(),$(e.text)}}function Ge(n,s){if(n&1&&C(0,Ue,2,1,"span",78)(1,je,2,1,"span",79)(2,He,2,1,"span",80),n&2){let e=s.$implicit,t=c(3);g(e.kind===t.SttQaDiffKind.equal?0:e.kind===t.SttQaDiffKind.removed?1:2)}}function Ke(n,s){if(n&1&&(o(0,"div",70)(1,"p",75),d(2," V\xE1ltoz\xE1sok (kiemelve) "),r(),o(3,"p",76),B(4,Ge,3,1,null,null,Ee),r(),o(6,"p",77),d(7," \xC1th\xFAzva: nyers STT; kiemelve: jav\xEDtott sz\xF6veg. Al\xE1bb a teljes k\xE9t v\xE1ltozat. "),r()()),n&2){let e=c(2);l(4),D(e.lastQaWordDiffSegments_$())}}function Je(n,s){if(n&1&&(o(0,"p",74),d(1,"Magyar\xE1zat:"),r(),o(2,"p",81),d(3),r()),n&2){let e=c();l(3),$(e.explanation)}}function Ze(n,s){if(n&1&&(o(0,"div",13),C(1,Ke,8,0,"div",70),o(2,"p",71),d(3,"Volt m\xF3dos\xEDt\xE1s: igen."),r(),o(4,"p",72),d(5,"Eredeti (nyers STT):"),r(),o(6,"p",73),d(7),r(),o(8,"p",74),d(9,"Jav\xEDtott:"),r(),o(10,"p",73),d(11),r(),C(12,Je,4,1),r()),n&2){let e=s,t=c();l(),g(t.lastQaWordDiffSegments_$().length>0?1:-1),l(6),$(e.original),l(4),$(e.corrected),l(),g(e.explanation?12:-1)}}function Xe(n,s){n&1&&(o(0,"p",14),d(1," M\xE9g nem volt STT QA jav\xEDt\xE1s. "),r())}var vt=(()=>{class n{globalError_CS=q(fe);soundRecorder_CS=q(Ce);voiceSttQaUi_DS=q(ge);voiceInputUi_DS=q(be);qaEnabled=H(void 0);compactLayout=H(!1);transcriptReady=new j;transcriptSegmentReady=new j;busy_$=p(!1);pendingTranscriptionCount=0;emitChain=Promise.resolve();volume_$=p(0);isQaEnabledFromSettings_$=p(!1);settingsOpen_$=p(!1);qaSettings_$=p(null);confusionMapList_$=p([]);qaSettingsSaving_$=p(!1);qaSettingsLoading_$=p(!1);settingsQaEnabled=!1;qaProviderName="";qaModelName="";llmProviderSelectOptions_$=p([]);qaModelsForProvider_$=p([]);qaModelsListFetchError_$=p("");lastQaTransformation_$=p(null);infoOpen_$=p(!1);mediaUnavailable_$=p(null);defaultLlmProvider_$=p("");defaultLlmModel_$=p("");volumePercent_$=v(()=>Math.min(100,this.volume_$()*250));qaShowModelSelect_$=v(()=>this.qaModelsForProvider_$().length>0);lastQaTextWasModified_$=v(()=>{let e=this.lastQaTransformation_$();return e===null?!1:e.original!==e.corrected});lastQaWordDiffSegments_$=v(()=>{let e=this.lastQaTransformation_$();return e===null||e.original===e.corrected?[]:U.buildWordDiff(e.original,e.corrected)});SttQaDiffKind=k;defaultLlmProviderDisplayLabel_$=v(()=>{let e=this.llmProviderSelectOptions_$(),t=this.defaultLlmProvider_$().trim();return t.length?e.find(a=>a.value===t)?.label??t:""});qaProviderDisplayLabel_$=v(()=>{let e=this.qaProviderName.trim();return e.length?this.llmProviderSelectOptions_$().find(a=>a.value===e)?.label??e:""});ngOnInit(){let e=z.getMediaRecordingAvailability();if(!e.supported&&e.reason){let t=e.reason;this.mediaUnavailable_$.set(z.getMediaUnavailableMessage(t)),this.globalError_CS.reportErrorOnly({message:z.getMediaUnavailableReportMessage(t),source:"ccap-voice-record-button"})}this.soundRecorder_CS.setOnChunk((t,i)=>{this.onChunk(t,i)}),this.soundRecorder_CS.setOnVolume(t=>{this.volume_$.set(t)}),this.soundRecorder_CS.setOnError(t=>{this.globalError_CS.showError(t,"ccap-voice-record-button")})}ngOnDestroy(){this.soundRecorder_CS.stopListening()}toggleRecord(){return P(this,null,function*(){if(this.mediaUnavailable_$()!==null)return;if(this.soundRecorder_CS.state_$()===R.stopped){this.qaEnabled()===void 0&&(yield this.loadQaEnabledOnce());try{yield this.soundRecorder_CS.startListening()}catch(t){this.globalError_CS.showError(t,"ccap-voice-record-button")}}else this.soundRecorder_CS.stopListening()})}loadQaEnabledOnce(){return P(this,null,function*(){this.isQaEnabledFromSettings_$.set(yield this.voiceSttQaUi_DS.fetchQaEnabledFlag())})}handleAutoSendAfterVoiceChange(e){this.voiceInputUi_DS.setAutoSendAfterVoice(e)}toggleSettings(){this.settingsOpen_$.update(e=>!e),this.settingsOpen_$()&&this.loadQaSettings()}toggleInfo(){this.infoOpen_$.update(e=>!e)}loadQaSettings(){return P(this,null,function*(){this.qaSettingsLoading_$.set(!0);try{let e=yield this.voiceSttQaUi_DS.loadSttQaSettingsPanelState(),t=e.qa;this.qaSettings_$.set(t),this.confusionMapList_$.set([...t.confusionMap??[]]),this.settingsQaEnabled=t.qaEnabled===!0,this.isQaEnabledFromSettings_$.set(t.qaEnabled===!0),this.qaProviderName=t.providerName??"",this.qaModelName=t.modelName??"",this.llmProviderSelectOptions_$.set(e.llmProviderSelectOptions),this.defaultLlmProvider_$.set(e.defaultLlmProvider),this.defaultLlmModel_$.set(e.defaultLlmModel),this.qaModelsForProvider_$.set(e.qaModelsForProvider),this.qaModelsListFetchError_$.set(e.qaModelsListFetchError)}catch(e){this.globalError_CS.showError(e,"ccap-voice-record-button"),this.qaSettings_$.set(null),this.confusionMapList_$.set([]),this.llmProviderSelectOptions_$.set([]),this.qaModelsListFetchError_$.set(""),this.qaModelsForProvider_$.set([])}finally{this.qaSettingsLoading_$.set(!1)}})}loadQaModelsForProvider(e){return P(this,null,function*(){let t=yield this.voiceSttQaUi_DS.fetchLlmModelsListForSttQa(e);this.qaModelsForProvider_$.set(t.models),this.qaModelsListFetchError_$.set(t.errorMessage)})}onQaProviderChange(){this.loadQaModelsForProvider(this.qaProviderName),this.qaModelName=""}addConfusionEntry(){this.confusionMapList_$.update(e=>[...e,{from:"",to:""}])}removeConfusionEntry(e){this.confusionMapList_$.update(t=>t.filter((i,a)=>a!==e))}updateConfusionFrom(e,t){this.confusionMapList_$.update(i=>{let a=[...i];return a[e]&&(a[e]={from:t,to:a[e].to}),a})}updateConfusionTo(e,t){this.confusionMapList_$.update(i=>{let a=[...i];return a[e]&&(a[e]={from:a[e].from,to:t}),a})}saveQaSettings(){return P(this,null,function*(){this.qaSettingsSaving_$.set(!0);try{let e=this.voiceSttQaUi_DS.normalizeConfusionMapEntries(this.confusionMapList_$());yield this.voiceSttQaUi_DS.saveVoiceNotesQaSettings({confusionMap:e,providerName:this.qaProviderName.trim()||void 0,modelName:this.qaModelName.trim()||void 0,qaEnabled:this.settingsQaEnabled}),this.confusionMapList_$.set([...e]),this.isQaEnabledFromSettings_$.set(this.settingsQaEnabled);let t=this.qaSettings_$();t!==null&&this.qaSettings_$.set({systemPrompt:t.systemPrompt,userPromptTemplate:t.userPromptTemplate,confusionMap:e,providerName:this.qaProviderName.trim()||"",modelName:this.qaModelName.trim()||"",qaEnabled:this.settingsQaEnabled})}catch(e){this.globalError_CS.showError(e,"ccap-voice-record-button")}finally{this.qaSettingsSaving_$.set(!1)}})}onEscape(){this.settingsOpen_$()&&this.settingsOpen_$.set(!1),this.infoOpen_$()&&this.infoOpen_$.set(!1)}effectiveQaEnabled_$=v(()=>this.qaEnabled()!==void 0?this.qaEnabled():this.isQaEnabledFromSettings_$());onChunk(e,t){return P(this,null,function*(){this.pendingTranscriptionCount++,this.busy_$.set(!0);let i=this.emitChain,a=()=>{};this.emitChain=new Promise(u=>{a=u});try{let u=yield this.voiceSttQaUi_DS.transcribeVoiceChunk({blob:e,mimeType:t.mimeType,filename:t.filename,qaEnabled:this.effectiveQaEnabled_$(),noteContext:"",skipClassification:!0});if(yield i,u.ok===!1){this.transcriptSegmentReady.emit({text:"",isFinal:t.isFinal});return}let _=u;if(_.qaFailed===!0){let b=_.qaFailureMessage?.trim()??"";b.length>0&&this.globalError_CS.showError(new Error(b),"voice-stt-qa")}let w=_.correctedTranscript!=null&&_.correctedTranscript.trim().length>0?_.correctedTranscript.trim():(_.transcript??"").trim();_.usedQa===!0&&(_.transcript??"").trim().length>0&&(_.correctedTranscript??"").trim().length>0&&this.lastQaTransformation_$.set({original:(_.transcript??"").trim(),corrected:(_.correctedTranscript??"").trim(),explanation:(_.qaExplanation??"").trim()||void 0,input:_.qaInput}),w&&(this.transcriptReady.emit(w),this.transcriptSegmentReady.emit({text:w,isFinal:t.isFinal}))}catch(u){this.globalError_CS.showError(u,"ccap-voice-record-button")}finally{a(),this.pendingTranscriptionCount--,this.pendingTranscriptionCount<=0&&(this.pendingTranscriptionCount=0,this.busy_$.set(!1))}})}recordStateLabel_$=v(()=>this.soundRecorder_CS.state_$()===R.stopped?"Felv\xE9tel":"Stop");isRecordActive_$=v(()=>{let e=this.soundRecorder_CS.state_$();return e===R.standby||e===R.running});isRecording_$=v(()=>this.soundRecorder_CS.state_$()===R.running);recordButtonAriaLabel_$=v(()=>{let e=this.mediaUnavailable_$();return e||(this.isRecordActive_$()?"Stop":this.busy_$()?"\xDAj felv\xE9tel (feldolgoz\xE1s folyamatban)":"Felv\xE9tel")});recordButtonTitle_$=v(()=>{let e=this.mediaUnavailable_$();return e||(this.isRecordActive_$()?"Stop":this.busy_$()?"\xDAj felv\xE9tel \u2014 el\u0151z\u0151 feldolgoz\xE1s folyamatban":"Felv\xE9tel")});static \u0275fac=function(t){return new(t||n)};static \u0275cmp=Y({type:n,selectors:[["app-ccap-voice-record-button"]],hostBindings:function(t,i){t&1&&m("keydown.escape",function(){return i.onEscape()},!1,ee)},inputs:{qaEnabled:[1,"qaEnabled"],compactLayout:[1,"compactLayout"]},outputs:{transcriptReady:"transcriptReady",transcriptSegmentReady:"transcriptSegmentReady"},standalone:!0,features:[ae],decls:25,vars:14,consts:[[1,"flex","flex-col","items-center","gap-1"],[3,"closed","isOpen","title","maxWidth","zIndex","bodyFlexColumn"],[1,"flex","flex-col","flex-1","min-h-0","w-full","overflow-y-auto","overflow-x-hidden","overscroll-y-contain"],[1,"flex","flex-col","gap-2","shrink-0"],[1,"flex","items-center","gap-2","cursor-pointer","select-none"],["type","checkbox","name","settingsQaEnabled",3,"ngModelChange","ngModel"],[1,"text-sm","text-neutral-300"],["type","checkbox","name","autoSendAfterVoice",3,"ngModelChange","ngModel"],[1,"mt-3","pt-3","border-t","border-neonDefault","flex","flex-col","gap-3","shrink-0"],[1,"mt-3","pt-3","border-t","border-neonDefault","text-xs","text-neutral-400"],["modal-footer","",1,"shrink-0","px-4","py-3","border-t","border-neonDefault"],["type","button",1,"w-full","px-3","py-1.5","text-sm","border","border-neonCyan","rounded","text-neutral-300","hover:shadow-neon-glow-cyan","transition-colors",3,"click"],[3,"closed","isOpen","title","maxWidth","zIndex"],[1,"space-y-2","text-sm"],[1,"text-xs","text-neutral-500"],[1,"flex","items-center","gap-2"],["type","button","aria-label","Be\xE1ll\xEDt\xE1sok","title","Be\xE1ll\xEDt\xE1sok",1,"w-5","h-5","rounded-full","flex","items-center","justify-center","bg-neutral-900","border-2","border-neonDefault","text-neonCyan","hover:border-neonCyan","hover:shadow-neon-glow-cyan","transition-all","duration-200","focus:outline-none","focus:ring-2","focus:ring-neonCyan","focus:ring-offset-2","focus:ring-offset-neutral-900",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"w-2.5","h-2.5","shrink-0"],["d","M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"],["d","M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"],["type","button",1,"w-5","h-5","rounded-full","flex","items-center","justify-center","bg-neutral-900","border-2","transition-all","duration-200","focus:outline-none","focus:ring-2","focus:ring-offset-2","focus:ring-offset-neutral-900",3,"click"],["cx","12","cy","12","r","10"],["d","M12 16v-4"],["d","M12 8h.01"],["type","button",1,"flex","items-center","justify-center","min-w-[44px]","min-h-[44px]","w-10","h-10","rounded-full","shrink-0","bg-neutral-900","border-2","text-white","transition-all","duration-200","disabled:opacity-50","border-neonDefault","hover:border-neonCyan","hover:shadow-neon-glow-cyan","focus:outline-none","focus:ring-2","focus:ring-neonCyan","focus:ring-offset-2","focus:ring-offset-neutral-900",3,"click","disabled"],["aria-hidden","true",1,"inline-block","w-5","h-5","shrink-0","animate-spin","rounded-full","border-2","border-neonCyan/40","border-t-neonCyan"],[1,"flex","flex-col","items-center","gap-0.5","shrink-0"],[1,"text-[11px]","text-amber-300","leading-tight","max-w-[180px]","text-center"],["aria-hidden","true",1,"relative","w-2","h-6","rounded-sm","bg-neutral-800","overflow-hidden"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"w-5","h-5","shrink-0","text-neonCyan"],["d","M12 2a3 3 0 0 1 3 3v7a3 3 0 0 1-6 0V5a3 3 0 0 1 3-3Z"],["d","M19 10v2a7 7 0 0 1-14 0v-2"],["x1","12","y1","19","x2","12","y2","22"],[1,"absolute","inset-x-0","bottom-0","bg-neonCyan","transition-[height]","duration-75"],[1,"absolute","inset-x-0","h-0.5","bg-neonAmber","rounded-sm","z-10",2,"bottom","5%"],["aria-hidden","true",1,"mr-1"],[1,"relative","inline-flex"],["type","button","aria-label","Be\xE1ll\xEDt\xE1sok","title","Be\xE1ll\xEDt\xE1sok",1,"absolute","right-full","mr-4","top-1/2","-translate-y-1/2","w-5","h-5","rounded-full","flex","items-center","justify-center","bg-neutral-900","border-2","border-neonDefault","text-neonCyan","hover:border-neonCyan","hover:shadow-neon-glow-cyan","transition-all","duration-200","focus:outline-none","focus:ring-2","focus:ring-neonCyan","focus:ring-offset-2","focus:ring-offset-neutral-900",3,"click"],["type","button",1,"absolute","left-full","ml-4","top-1/2","-translate-y-1/2","w-5","h-5","rounded-full","flex","items-center","justify-center","bg-neutral-900","border-2","transition-all","duration-200","focus:outline-none","focus:ring-2","focus:ring-offset-2","focus:ring-offset-neutral-900",3,"click"],[1,"text-[11px]","text-amber-300","leading-tight","max-w-[240px]","mt-1"],[1,"shrink-0"],[1,"text-xs","font-medium","text-neutral-400","mb-1"],[1,"text-xs","text-neutral-300","whitespace-pre-wrap","break-words"],[1,"text-xs","text-neutral-300","whitespace-pre-wrap","break-words","font-mono"],[1,"text-[10px]","text-neonAmber","mt-1"],[1,"text-[10px]","text-neutral-500","mb-1"],[1,"flex","flex-wrap","gap-2","items-center"],["name","qaProviderName",1,"px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","min-w-[120px]",3,"ngModelChange","ngModel"],["value",""],[3,"value"],["name","qaModelName",1,"px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","min-w-[140px]",3,"ngModel"],["type","text","name","qaModelNameText","placeholder","Modell id (lista nem el\xE9rhet\u0151 ehhez a providerhez)",1,"px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","min-w-[140px]","font-mono",3,"ngModel"],[1,"text-[10px]","text-amber-300/90","mt-1"],[1,"flex","flex-col","shrink-0"],[1,"text-xs","font-medium","text-neutral-400","mb-1","shrink-0"],[1,"space-y-1.5","rounded","border","border-neonDefault/50","bg-neutral-800/20","p-2"],[1,"flex","flex-wrap","gap-2","items-center","shrink-0","mt-2"],["type","button",1,"px-2","py-1","text-xs","border","border-neonDefault","rounded","text-neutral-400","hover:border-neonCyan","hover:text-neonCyan","transition-colors",3,"click"],["type","button",1,"px-2","py-1","text-xs","border","border-neonCyan","rounded","text-neonCyan","hover:shadow-neon-glow-cyan","disabled:opacity-50","transition-colors",3,"click","disabled"],["name","qaModelName",1,"px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","min-w-[140px]",3,"ngModelChange","ngModel"],["type","text","name","qaModelNameText","placeholder","Modell id (lista nem el\xE9rhet\u0151 ehhez a providerhez)",1,"px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","min-w-[140px]","font-mono",3,"ngModelChange","ngModel"],["type","text","placeholder","El\xEDr\xE1s / f\xE9lrehall\xE1s",1,"flex-1","min-w-0","px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","placeholder-neutral-500",3,"input","value"],[1,"text-neutral-500","shrink-0"],["type","text","placeholder","Helyes forma",1,"flex-1","min-w-0","px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","placeholder-neutral-500",3,"input","value"],["type","button","aria-label","Sor t\xF6rl\xE9se","title","Sor t\xF6rl\xE9se",1,"shrink-0","p-1","text-neutral-500","hover:text-neonRed","transition-colors",3,"click"],[1,"sr-only"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",1,"w-3.5","h-3.5"],["d","M18 6L6 18M6 6l12 12"],[1,"mt-3","pt-3","border-t","border-neonDefault","text-xs","text-neutral-500"],["type","button",1,"mt-1.5","px-2","py-1","text-xs","border","border-neonDefault","rounded","text-neutral-400","hover:border-neonCyan","hover:text-neonCyan","transition-colors",3,"click"],[1,"rounded-md","border","border-neonAmber/45","bg-neutral-950/95","p-2.5","mb-1"],[1,"font-medium","text-neonAmber"],[1,"text-neutral-400","text-xs"],[1,"text-neutral-200","break-words"],[1,"text-neutral-400","text-xs","mt-2"],[1,"text-[10px]","font-semibold","uppercase","tracking-wide","text-neonAmber/90","mb-1.5"],[1,"text-xs","leading-relaxed","whitespace-pre-wrap","break-words"],[1,"text-[10px]","text-neutral-500","mt-1.5","leading-snug"],[1,"text-neutral-300"],[1,"mx-0.5","inline","rounded","px-0.5","text-red-300/95","line-through","decoration-red-400/85","bg-red-950/50","border","border-red-900/45"],[1,"mx-0.5","inline","rounded","px-0.5","text-neonAmber","bg-amber-950/55","border","border-neonAmber/50","shadow-[0_0_10px_rgb(251_191_36/0.28)]"],[1,"text-neutral-300","break-words"]],template:function(t,i){if(t&1&&(C(0,Ae,15,35,"div",0)(1,Re,14,35),o(2,"app-s-modal",1),m("closed",function(){return i.settingsOpen_$.set(!1)}),o(3,"div",2)(4,"div",3)(5,"label",4)(6,"input",5),O("ngModelChange",function(u){return W(i.settingsQaEnabled,u)||(i.settingsQaEnabled=u),u}),r(),o(7,"span",6),d(8,"STT QA"),r()(),o(9,"label",4)(10,"input",7),m("ngModelChange",function(u){return i.handleAutoSendAfterVoiceChange(u)}),r(),o(11,"span",6),d(12,"Send immediately after voice (Mimik-style)"),r()()(),C(13,Oe,38,11,"div",8)(14,Ie,2,0,"p",9)(15,ze,4,0),r(),o(16,"div",10)(17,"button",11),m("click",function(){return i.settingsOpen_$.set(!1)}),d(18," Bez\xE1r\xE1s "),r()()(),o(19,"app-s-modal",12),m("closed",function(){return i.infoOpen_$.set(!1)}),C(20,Ze,13,4,"div",13)(21,Xe,2,0,"p",14),o(22,"div",10)(23,"button",11),m("click",function(){return i.infoOpen_$.set(!1)}),d(24," Bez\xE1r\xE1s "),r()()()),t&2){let a,u;g(i.compactLayout()?0:1),l(2),y("isOpen",i.settingsOpen_$())("title","Voice Input be\xE1ll\xEDt\xE1sok")("maxWidth","lg")("zIndex","40")("bodyFlexColumn",!0),l(4),N("ngModel",i.settingsQaEnabled),l(4),y("ngModel",i.voiceInputUi_DS.autoSendAfterVoice_$()),l(3),g((a=i.qaSettings_$())?13:i.qaSettingsLoading_$()?14:15,a),l(6),y("isOpen",i.infoOpen_$())("title","Utols\xF3 QA eredm\xE9ny")("maxWidth","md")("zIndex","40"),l(),g((u=i.lastQaTransformation_$())?20:21,u)}},dependencies:[pe,_e,me,se,le,ue,de,ce,xe],encapsulation:2})}return n})();export{be as a,vt as b};
2
- //# sourceMappingURL=chunk-2PQXI7I7.js.map
1
+ import{a as R,b as z,c as Ce}from"./chunk-4JL2Q6FO.js";import{c as ge}from"./chunk-XWYXBY7S.js";import{a as xe}from"./chunk-FLAJXIYW.js";import{b as le,c as se,f as de,i as ce,n as ue,o as _e,p as me,v as pe}from"./chunk-EO4DNTT4.js";import{a as K}from"./chunk-5UPNU54P.js";import{j as fe}from"./chunk-A33MCHYC.js";import{C as q,D as Y,Fa as d,Ga as $,Ha as L,Ia as ie,J as f,Ja as oe,K as x,Ka as re,L as A,M as I,Ma as N,Na as W,Oa as O,Q as j,Ta as ae,U as H,Y as ee,Z as l,aa as p,da as C,fa as V,ga as y,ha as G,hb as b,ia as F,k as T,la as g,ma as te,na as ne,oa as B,pa as D,qa as o,ra as r,sa as S,ua as P,va as m,wa as c,y as X}from"./chunk-TBMJSIBB.js";var he="ccap-voiceInput:autoSendAfterVoice",ve=(()=>{class n{autoSendAfterVoice_$=p(n.readAutoSendAfterVoiceFromStorage());setAutoSendAfterVoice(e){this.autoSendAfterVoice_$.set(e),K.writeString(he,String(e))}static readAutoSendAfterVoiceFromStorage(){return K.readString(he)==="true"}static \u0275fac=function(t){return new(t||n)};static \u0275prov=X({token:n,factory:n.\u0275fac,providedIn:"root"})}return n})();var k=function(n){return n.equal="equal",n.removed="removed",n.added="added",n}(k||{});var U=class n{static tokenize(s){let e=s;if(e.length===0)return[];let t=e.split(/(\s+)/),i=[];for(let a=0;a<t.length;a++){let u=t[a];u.length>0&&i.push(u)}return i}static mergeAndAssignIds(s){if(s.length===0)return[];let e=[];for(let i=0;i<s.length;i++){let a=s[i],u=e[e.length-1];u!==void 0&&u.kind===a.kind?u.text=u.text+a.text:e.push({kind:a.kind,text:a.text})}let t=[];for(let i=0;i<e.length;i++){let a=e[i];t.push({id:i,kind:a.kind,text:a.text})}return t}static buildWordDiff(s,e){let t=n.tokenize(s),i=n.tokenize(e),a=t.length,u=i.length,_=[];for(let h=0;h<=a;h++){let E=[];for(let Q=0;Q<=u;Q++)E.push(0);_.push(E)}for(let h=1;h<=a;h++)for(let E=1;E<=u;E++)if(t[h-1]===i[E-1])_[h][E]=_[h-1][E-1]+1;else{let Q=_[h-1][E],Z=_[h][E-1];_[h][E]=Q>Z?Q:Z}let w=[],v=a,M=u;for(;v>0||M>0;)v>0&&M>0&&t[v-1]===i[M-1]?(w.push({kind:k.equal,text:t[v-1]}),v-=1,M-=1):M>0&&(v===0||_[v][M-1]>=_[v-1][M])?(w.push({kind:k.added,text:i[M-1]}),M-=1):v>0&&(w.push({kind:k.removed,text:t[v-1]}),v-=1);let J=[];for(let h=w.length-1;h>=0;h--)J.push(w[h]);return n.mergeAndAssignIds(J)}};var Se=(n,s)=>s.value,Ee=(n,s)=>s.id;function ye(n,s){n&1&&S(0,"span",25)}function $e(n,s){if(n&1&&(o(0,"div",28),S(1,"div",33)(2,"div",34),r()),n&2){let e=c(3);l(),G("height",e.volumePercent_$(),"%")}}function we(n,s){if(n&1&&(o(0,"div",26),C(1,$e,3,2,"div",28),A(),o(2,"svg",29),S(3,"path",30)(4,"path",31)(5,"line",32),r()()),n&2){let e=c(2);l(),g(e.isRecordActive_$()?1:-1)}}function Me(n,s){n&1&&(o(0,"p",27)(1,"span",35),d(2,"\u26A0"),r(),d(3),r()),n&2&&(V("aria-live","polite"),l(3),L("",s," "))}function Ae(n,s){if(n&1){let e=P();o(0,"div",0)(1,"div",15)(2,"button",16),m("click",function(i){return f(e),c().toggleSettings(),x(i.stopPropagation())}),A(),o(3,"svg",17),S(4,"path",18)(5,"path",19),r()(),I(),o(6,"button",20),m("click",function(i){return f(e),c().toggleInfo(),x(i.stopPropagation())}),A(),o(7,"svg",17),S(8,"circle",21)(9,"path",22)(10,"path",23),r()()(),I(),o(11,"button",24),m("click",function(){f(e);let i=c();return x(i.toggleRecord())}),C(12,ye,1,0,"span",25)(13,we,6,1,"div",26),r(),C(14,Me,4,2,"p",27),r()}if(n&2){let e,t=c();l(6),F("border-neonDefault",!t.lastQaTextWasModified_$())("text-neonCyan",!t.lastQaTextWasModified_$())("hover:border-neonCyan",!t.lastQaTextWasModified_$())("hover:shadow-neon-glow-cyan",!t.lastQaTextWasModified_$())("focus:ring-neonCyan",!t.lastQaTextWasModified_$())("border-neonAmber",t.lastQaTextWasModified_$())("text-neonAmber",t.lastQaTextWasModified_$())("shadow-neon-glow-orange",t.lastQaTextWasModified_$())("hover:border-neonAmber",t.lastQaTextWasModified_$())("hover:shadow-neon-glow-orange",t.lastQaTextWasModified_$())("focus:ring-neonAmber",t.lastQaTextWasModified_$()),V("aria-label",t.lastQaTextWasModified_$()?"Utols\xF3 QA eredm\xE9ny \u2014 a sz\xF6veg m\xF3dosult":"Utols\xF3 QA eredm\xE9ny")("title",t.lastQaTextWasModified_$()?"Utols\xF3 QA eredm\xE9ny \u2014 a sz\xF6veg m\xF3dosult (r\xE9szletek)":"Utols\xF3 QA eredm\xE9ny"),l(5),F("border-neonCyan",t.isRecordActive_$()||t.busy_$())("shadow-neon-glow-cyan",t.isRecordActive_$()||t.busy_$())("animate-pulse",t.isRecording_$()),y("disabled",t.mediaUnavailable_$()!==null),V("aria-label",t.recordButtonAriaLabel_$())("title",t.recordButtonTitle_$()),l(),g(t.busy_$()&&!t.isRecordActive_$()?12:13),l(2),g((e=t.mediaUnavailable_$())?14:-1,e)}}function Pe(n,s){n&1&&S(0,"span",25)}function Te(n,s){if(n&1&&(o(0,"div",28),S(1,"div",33)(2,"div",34),r()),n&2){let e=c(3);l(),G("height",e.volumePercent_$(),"%")}}function Ve(n,s){if(n&1&&(o(0,"div",26),C(1,Te,3,2,"div",28),A(),o(2,"svg",29),S(3,"path",30)(4,"path",31)(5,"line",32),r()()),n&2){let e=c(2);l(),g(e.isRecordActive_$()?1:-1)}}function ke(n,s){n&1&&(o(0,"p",39)(1,"span",35),d(2,"\u26A0"),r(),d(3),r()),n&2&&(V("aria-live","polite"),l(3),L("",s," "))}function Re(n,s){if(n&1){let e=P();o(0,"div",36)(1,"button",24),m("click",function(){f(e);let i=c();return x(i.toggleRecord())}),C(2,Pe,1,0,"span",25)(3,Ve,6,1,"div",26),r(),o(4,"button",37),m("click",function(i){return f(e),c().toggleSettings(),x(i.stopPropagation())}),A(),o(5,"svg",17),S(6,"path",18)(7,"path",19),r()(),I(),o(8,"button",38),m("click",function(i){return f(e),c().toggleInfo(),x(i.stopPropagation())}),A(),o(9,"svg",17),S(10,"circle",21)(11,"path",22)(12,"path",23),r()()(),C(13,ke,4,2,"p",39)}if(n&2){let e,t=c();l(),F("border-neonCyan",t.isRecordActive_$()||t.busy_$())("shadow-neon-glow-cyan",t.isRecordActive_$()||t.busy_$())("animate-pulse",t.isRecording_$()),y("disabled",t.mediaUnavailable_$()!==null),V("aria-label",t.recordButtonAriaLabel_$())("title",t.recordButtonTitle_$()),l(),g(t.busy_$()&&!t.isRecordActive_$()?2:3),l(6),F("border-neonDefault",!t.lastQaTextWasModified_$())("text-neonCyan",!t.lastQaTextWasModified_$())("hover:border-neonCyan",!t.lastQaTextWasModified_$())("hover:shadow-neon-glow-cyan",!t.lastQaTextWasModified_$())("focus:ring-neonCyan",!t.lastQaTextWasModified_$())("border-neonAmber",t.lastQaTextWasModified_$())("text-neonAmber",t.lastQaTextWasModified_$())("shadow-neon-glow-orange",t.lastQaTextWasModified_$())("hover:border-neonAmber",t.lastQaTextWasModified_$())("hover:shadow-neon-glow-orange",t.lastQaTextWasModified_$())("focus:ring-neonAmber",t.lastQaTextWasModified_$()),V("aria-label",t.lastQaTextWasModified_$()?"Utols\xF3 QA eredm\xE9ny \u2014 a sz\xF6veg m\xF3dosult":"Utols\xF3 QA eredm\xE9ny")("title",t.lastQaTextWasModified_$()?"Utols\xF3 QA eredm\xE9ny \u2014 a sz\xF6veg m\xF3dosult (r\xE9szletek)":"Utols\xF3 QA eredm\xE9ny"),l(5),g((e=t.mediaUnavailable_$())?13:-1,e)}}function Qe(n,s){if(n&1&&(o(0,"p",45),d(1),r()),n&2){let e=c(2);l(),re(" Override: ",e.qaProviderDisplayLabel_$()," / ",e.qaModelName||"\u2014"," (glob\xE1l: ",e.defaultLlmProviderDisplayLabel_$()||"\u2014"," / ",e.defaultLlmModel_$()||"\u2014","). ")}}function qe(n,s){if(n&1&&(o(0,"p",45),d(1),r()),n&2){let e=c(2);l(),ie(" Nincs be\xE1ll\xEDtva \u2013 haszn\xE1lt: ",e.defaultLlmProviderDisplayLabel_$()||"\u2014"," / ",e.defaultLlmModel_$()||"\u2014"," (glob\xE1l). ")}}function Fe(n,s){if(n&1&&(o(0,"option",49),d(1),r()),n&2){let e=s.$implicit;y("value",e.value),l(),$(e.label)}}function Be(n,s){if(n&1&&(o(0,"option",49),d(1),r()),n&2){let e=s.$implicit;y("value",e),l(),$(e)}}function De(n,s){if(n&1){let e=P();o(0,"select",59),O("ngModelChange",function(i){f(e);let a=c(2);return W(a.qaModelName,i)||(a.qaModelName=i),x(i)}),o(1,"option",48),d(2,"\u2014 default \u2014"),r(),B(3,Be,2,2,"option",49,ne),r()}if(n&2){let e=c(2);N("ngModel",e.qaModelName),l(3),D(e.qaModelsForProvider_$())}}function Le(n,s){if(n&1){let e=P();o(0,"input",60),O("ngModelChange",function(i){f(e);let a=c(2);return W(a.qaModelName,i)||(a.qaModelName=i),x(i)}),r()}if(n&2){let e=c(2);N("ngModel",e.qaModelName)}}function Ne(n,s){if(n&1&&(o(0,"p",52),d(1),r()),n&2){let e=c(2);l(),$(e.qaModelsListFetchError_$())}}function We(n,s){if(n&1){let e=P();o(0,"div",15)(1,"input",61),m("input",function(i){let a=f(e).$index,u=c(2);return x(u.updateConfusionFrom(a,i.target.value))}),r(),o(2,"span",62),d(3,"\u2192"),r(),o(4,"input",63),m("input",function(i){let a=f(e).$index,u=c(2);return x(u.updateConfusionTo(a,i.target.value))}),r(),o(5,"button",64),m("click",function(){let i=f(e).$index,a=c(2);return x(a.removeConfusionEntry(i))}),o(6,"span",65),d(7,"T\xF6rl\xE9s"),r(),A(),o(8,"svg",66),S(9,"path",67),r()()()}if(n&2){let e=s.$implicit;l(),y("value",e.from),l(3),y("value",e.to)}}function Oe(n,s){if(n&1){let e=P();o(0,"div",8)(1,"div",40)(2,"p",41),d(3,"System prompt (LLM-nek)"),r(),o(4,"p",42),d(5),r()(),o(6,"div",40)(7,"p",41),d(8," User prompt sablon (ide f\u0171z\u0151dik be a felv\xE9tel adata) "),r(),o(9,"p",43),d(10),r(),o(11,"p",44),d(12),r()(),o(13,"div",40)(14,"p",41),d(15,"STT QA provider \xE9s modell"),r(),C(16,Qe,2,4,"p",45)(17,qe,2,2,"p",45),o(18,"div",46)(19,"select",47),O("ngModelChange",function(i){f(e);let a=c();return W(a.qaProviderName,i)||(a.qaProviderName=i),x(i)}),m("ngModelChange",function(){f(e);let i=c();return x(i.onQaProviderChange())}),o(20,"option",48),d(21,"\u2014 default \u2014"),r(),B(22,Fe,2,2,"option",49,Se),r(),C(24,De,5,1,"select",50)(25,Le,1,1,"input",51),r(),C(26,Ne,2,1,"p",52),r(),o(27,"div",53)(28,"p",54),d(29," Tipikus el\xEDr\xE1sok / tip\xF3k (confusion map) \u2013 ezekre jav\xEDt a QA "),r(),o(30,"div",55),B(31,We,10,2,"div",15,te),r(),o(33,"div",56)(34,"button",57),m("click",function(){f(e);let i=c();return x(i.addConfusionEntry())}),d(35," + Sor hozz\xE1ad\xE1sa "),r(),o(36,"button",58),m("click",function(){f(e);let i=c();return x(i.saveQaSettings())}),d(37),r()()()()}if(n&2){let e=s,t=c();l(5),$(e.systemPrompt),l(5),L(" ",e.userPromptTemplate," "),l(2),oe(" Placeholderek: ","{{TRANSCRIPT}}"," = nyers sz\xF6veg, ","{{NOTE_CONTEXT}}"," = jegyzet, ","{{CONFUSION_MAP}}"," = az al\xE1bbi el\xEDr\xE1s lista JSON-ban. "),l(4),g(t.qaProviderName.trim()?16:17),l(3),N("ngModel",t.qaProviderName),l(3),D(t.llmProviderSelectOptions_$()),l(2),g(t.qaShowModelSelect_$()?24:25),l(2),g(t.qaModelsListFetchError_$().trim()?26:-1),l(5),D(t.confusionMapList_$()),l(5),y("disabled",t.qaSettingsSaving_$()),l(),L(" ",t.qaSettingsSaving_$()?"Ment\xE9s\u2026":"QA be\xE1ll\xEDt\xE1sok ment\xE9se"," ")}}function Ie(n,s){n&1&&(o(0,"p",9),d(1,"QA be\xE1ll\xEDt\xE1sok bet\xF6lt\xE9se\u2026"),r())}function ze(n,s){if(n&1){let e=P();o(0,"p",68),d(1," A QA be\xE1ll\xEDt\xE1sok bet\xF6lt\xE9se sikertelen. "),r(),o(2,"button",69),m("click",function(){f(e);let i=c();return x(i.loadQaSettings())}),d(3," \xDAjra bet\xF6lt\xE9s "),r()}}function Ue(n,s){if(n&1&&(o(0,"span",78),d(1),r()),n&2){let e=c().$implicit;l(),$(e.text)}}function je(n,s){if(n&1&&(o(0,"span",79),d(1),r()),n&2){let e=c().$implicit;l(),$(e.text)}}function He(n,s){if(n&1&&(o(0,"span",80),d(1),r()),n&2){let e=c().$implicit;l(),$(e.text)}}function Ge(n,s){if(n&1&&C(0,Ue,2,1,"span",78)(1,je,2,1,"span",79)(2,He,2,1,"span",80),n&2){let e=s.$implicit,t=c(3);g(e.kind===t.SttQaDiffKind.equal?0:e.kind===t.SttQaDiffKind.removed?1:2)}}function Ke(n,s){if(n&1&&(o(0,"div",70)(1,"p",75),d(2," V\xE1ltoz\xE1sok (kiemelve) "),r(),o(3,"p",76),B(4,Ge,3,1,null,null,Ee),r(),o(6,"p",77),d(7," \xC1th\xFAzva: nyers STT; kiemelve: jav\xEDtott sz\xF6veg. Al\xE1bb a teljes k\xE9t v\xE1ltozat. "),r()()),n&2){let e=c(2);l(4),D(e.lastQaWordDiffSegments_$())}}function Je(n,s){if(n&1&&(o(0,"p",74),d(1,"Magyar\xE1zat:"),r(),o(2,"p",81),d(3),r()),n&2){let e=c();l(3),$(e.explanation)}}function Ze(n,s){if(n&1&&(o(0,"div",13),C(1,Ke,8,0,"div",70),o(2,"p",71),d(3,"Volt m\xF3dos\xEDt\xE1s: igen."),r(),o(4,"p",72),d(5,"Eredeti (nyers STT):"),r(),o(6,"p",73),d(7),r(),o(8,"p",74),d(9,"Jav\xEDtott:"),r(),o(10,"p",73),d(11),r(),C(12,Je,4,1),r()),n&2){let e=s,t=c();l(),g(t.lastQaWordDiffSegments_$().length>0?1:-1),l(6),$(e.original),l(4),$(e.corrected),l(),g(e.explanation?12:-1)}}function Xe(n,s){n&1&&(o(0,"p",14),d(1," M\xE9g nem volt STT QA jav\xEDt\xE1s. "),r())}var bt=(()=>{class n{globalError_CS=q(fe);soundRecorder_CS=q(Ce);voiceSttQaUi_DS=q(ge);voiceInputUi_DS=q(ve);qaEnabled=H(void 0);compactLayout=H(!1);transcriptReady=new j;transcriptSegmentReady=new j;busy_$=p(!1);pendingTranscriptionCount=0;emitChain=Promise.resolve();volume_$=p(0);isQaEnabledFromSettings_$=p(!1);settingsOpen_$=p(!1);qaSettings_$=p(null);confusionMapList_$=p([]);qaSettingsSaving_$=p(!1);qaSettingsLoading_$=p(!1);settingsQaEnabled=!1;qaProviderName="";qaModelName="";llmProviderSelectOptions_$=p([]);qaModelsForProvider_$=p([]);qaModelsListFetchError_$=p("");lastQaTransformation_$=p(null);infoOpen_$=p(!1);mediaUnavailable_$=p(null);defaultLlmProvider_$=p("");defaultLlmModel_$=p("");volumePercent_$=b(()=>Math.min(100,this.volume_$()*250));qaShowModelSelect_$=b(()=>this.qaModelsForProvider_$().length>0);lastQaTextWasModified_$=b(()=>{let e=this.lastQaTransformation_$();return e===null?!1:e.original!==e.corrected});lastQaWordDiffSegments_$=b(()=>{let e=this.lastQaTransformation_$();return e===null||e.original===e.corrected?[]:U.buildWordDiff(e.original,e.corrected)});SttQaDiffKind=k;defaultLlmProviderDisplayLabel_$=b(()=>{let e=this.llmProviderSelectOptions_$(),t=this.defaultLlmProvider_$().trim();return t.length?e.find(a=>a.value===t)?.label??t:""});qaProviderDisplayLabel_$=b(()=>{let e=this.qaProviderName.trim();return e.length?this.llmProviderSelectOptions_$().find(a=>a.value===e)?.label??e:""});ngOnInit(){let e=z.getMediaRecordingAvailability();if(!e.supported&&e.reason){let t=e.reason;this.mediaUnavailable_$.set(z.getMediaUnavailableMessage(t)),this.globalError_CS.reportErrorOnly({message:z.getMediaUnavailableReportMessage(t),source:"ccap-voice-record-button"})}this.soundRecorder_CS.setOnChunk((t,i)=>{this.onChunk(t,i)}),this.soundRecorder_CS.setOnVolume(t=>{this.volume_$.set(t)}),this.soundRecorder_CS.setOnError(t=>{this.globalError_CS.showError(t,"ccap-voice-record-button")})}ngOnDestroy(){this.soundRecorder_CS.stopListening()}toggleRecord(){return T(this,null,function*(){if(this.mediaUnavailable_$()!==null)return;if(this.soundRecorder_CS.state_$()===R.stopped){this.qaEnabled()===void 0&&(yield this.loadQaEnabledOnce());try{yield this.soundRecorder_CS.startListening()}catch(t){this.globalError_CS.showError(t,"ccap-voice-record-button")}}else this.soundRecorder_CS.stopListening()})}loadQaEnabledOnce(){return T(this,null,function*(){this.isQaEnabledFromSettings_$.set(yield this.voiceSttQaUi_DS.fetchQaEnabledFlag())})}handleAutoSendAfterVoiceChange(e){this.voiceInputUi_DS.setAutoSendAfterVoice(e)}toggleSettings(){this.settingsOpen_$.update(e=>!e),this.settingsOpen_$()&&this.loadQaSettings()}toggleInfo(){this.infoOpen_$.update(e=>!e)}loadQaSettings(){return T(this,null,function*(){this.qaSettingsLoading_$.set(!0);try{let e=yield this.voiceSttQaUi_DS.loadSttQaSettingsPanelState(),t=e.qa;this.qaSettings_$.set(t),this.confusionMapList_$.set([...t.confusionMap??[]]),this.settingsQaEnabled=t.qaEnabled===!0,this.isQaEnabledFromSettings_$.set(t.qaEnabled===!0),this.qaProviderName=t.providerName??"",this.qaModelName=t.modelName??"",this.llmProviderSelectOptions_$.set(e.llmProviderSelectOptions),this.defaultLlmProvider_$.set(e.defaultLlmProvider),this.defaultLlmModel_$.set(e.defaultLlmModel),this.qaModelsForProvider_$.set(e.qaModelsForProvider),this.qaModelsListFetchError_$.set(e.qaModelsListFetchError)}catch(e){this.globalError_CS.showError(e,"ccap-voice-record-button"),this.qaSettings_$.set(null),this.confusionMapList_$.set([]),this.llmProviderSelectOptions_$.set([]),this.qaModelsListFetchError_$.set(""),this.qaModelsForProvider_$.set([])}finally{this.qaSettingsLoading_$.set(!1)}})}loadQaModelsForProvider(e){return T(this,null,function*(){let t=yield this.voiceSttQaUi_DS.fetchLlmModelsListForSttQa(e);this.qaModelsForProvider_$.set(t.models),this.qaModelsListFetchError_$.set(t.errorMessage)})}onQaProviderChange(){this.loadQaModelsForProvider(this.qaProviderName),this.qaModelName=""}addConfusionEntry(){this.confusionMapList_$.update(e=>[...e,{from:"",to:""}])}removeConfusionEntry(e){this.confusionMapList_$.update(t=>t.filter((i,a)=>a!==e))}updateConfusionFrom(e,t){this.confusionMapList_$.update(i=>{let a=[...i];return a[e]&&(a[e]={from:t,to:a[e].to}),a})}updateConfusionTo(e,t){this.confusionMapList_$.update(i=>{let a=[...i];return a[e]&&(a[e]={from:a[e].from,to:t}),a})}saveQaSettings(){return T(this,null,function*(){this.qaSettingsSaving_$.set(!0);try{let e=this.voiceSttQaUi_DS.normalizeConfusionMapEntries(this.confusionMapList_$());yield this.voiceSttQaUi_DS.saveVoiceNotesQaSettings({confusionMap:e,providerName:this.qaProviderName.trim()||void 0,modelName:this.qaModelName.trim()||void 0,qaEnabled:this.settingsQaEnabled}),this.confusionMapList_$.set([...e]),this.isQaEnabledFromSettings_$.set(this.settingsQaEnabled);let t=this.qaSettings_$();t!==null&&this.qaSettings_$.set({systemPrompt:t.systemPrompt,userPromptTemplate:t.userPromptTemplate,confusionMap:e,providerName:this.qaProviderName.trim()||"",modelName:this.qaModelName.trim()||"",qaEnabled:this.settingsQaEnabled})}catch(e){this.globalError_CS.showError(e,"ccap-voice-record-button")}finally{this.qaSettingsSaving_$.set(!1)}})}onEscape(){this.settingsOpen_$()&&this.settingsOpen_$.set(!1),this.infoOpen_$()&&this.infoOpen_$.set(!1)}effectiveQaEnabled_$=b(()=>this.qaEnabled()!==void 0?this.qaEnabled():this.isQaEnabledFromSettings_$());onChunk(e,t){return T(this,null,function*(){this.pendingTranscriptionCount++,this.busy_$.set(!0);let i=this.emitChain,a=()=>{};this.emitChain=new Promise(u=>{a=u});try{let u=yield this.voiceSttQaUi_DS.transcribeVoiceChunk({blob:e,mimeType:t.mimeType,filename:t.filename,qaEnabled:this.effectiveQaEnabled_$(),noteContext:"",skipClassification:!0,overlapPrevMs:t.overlapPrevMs});if(yield i,u.ok===!1){this.transcriptSegmentReady.emit({text:"",isFinal:t.isFinal,overlapPrevMs:t.overlapPrevMs});return}let _=u;if(_.qaFailed===!0){let v=_.qaFailureMessage?.trim()??"";v.length>0&&this.globalError_CS.showError(new Error(v),"voice-stt-qa")}let w=_.correctedTranscript!=null&&_.correctedTranscript.trim().length>0?_.correctedTranscript.trim():(_.transcript??"").trim();_.usedQa===!0&&(_.transcript??"").trim().length>0&&(_.correctedTranscript??"").trim().length>0&&this.lastQaTransformation_$.set({original:(_.transcript??"").trim(),corrected:(_.correctedTranscript??"").trim(),explanation:(_.qaExplanation??"").trim()||void 0,input:_.qaInput}),w&&(this.transcriptReady.emit(w),this.transcriptSegmentReady.emit({text:w,isFinal:t.isFinal,overlapPrevMs:t.overlapPrevMs}))}catch(u){this.globalError_CS.showError(u,"ccap-voice-record-button")}finally{a(),this.pendingTranscriptionCount--,this.pendingTranscriptionCount<=0&&(this.pendingTranscriptionCount=0,this.busy_$.set(!1))}})}recordStateLabel_$=b(()=>this.soundRecorder_CS.state_$()===R.stopped?"Felv\xE9tel":"Stop");isRecordActive_$=b(()=>{let e=this.soundRecorder_CS.state_$();return e===R.standby||e===R.running});isRecording_$=b(()=>this.soundRecorder_CS.state_$()===R.running);recordButtonAriaLabel_$=b(()=>{let e=this.mediaUnavailable_$();return e||(this.isRecordActive_$()?"Stop":this.busy_$()?"\xDAj felv\xE9tel (feldolgoz\xE1s folyamatban)":"Felv\xE9tel")});recordButtonTitle_$=b(()=>{let e=this.mediaUnavailable_$();return e||(this.isRecordActive_$()?"Stop":this.busy_$()?"\xDAj felv\xE9tel \u2014 el\u0151z\u0151 feldolgoz\xE1s folyamatban":"Felv\xE9tel")});static \u0275fac=function(t){return new(t||n)};static \u0275cmp=Y({type:n,selectors:[["app-ccap-voice-record-button"]],hostBindings:function(t,i){t&1&&m("keydown.escape",function(){return i.onEscape()},!1,ee)},inputs:{qaEnabled:[1,"qaEnabled"],compactLayout:[1,"compactLayout"]},outputs:{transcriptReady:"transcriptReady",transcriptSegmentReady:"transcriptSegmentReady"},standalone:!0,features:[ae],decls:25,vars:14,consts:[[1,"flex","flex-col","items-center","gap-1"],[3,"closed","isOpen","title","maxWidth","zIndex","bodyFlexColumn"],[1,"flex","flex-col","flex-1","min-h-0","w-full","overflow-y-auto","overflow-x-hidden","overscroll-y-contain"],[1,"flex","flex-col","gap-2","shrink-0"],[1,"flex","items-center","gap-2","cursor-pointer","select-none"],["type","checkbox","name","settingsQaEnabled",3,"ngModelChange","ngModel"],[1,"text-sm","text-neutral-300"],["type","checkbox","name","autoSendAfterVoice",3,"ngModelChange","ngModel"],[1,"mt-3","pt-3","border-t","border-neonDefault","flex","flex-col","gap-3","shrink-0"],[1,"mt-3","pt-3","border-t","border-neonDefault","text-xs","text-neutral-400"],["modal-footer","",1,"shrink-0","px-4","py-3","border-t","border-neonDefault"],["type","button",1,"w-full","px-3","py-1.5","text-sm","border","border-neonCyan","rounded","text-neutral-300","hover:shadow-neon-glow-cyan","transition-colors",3,"click"],[3,"closed","isOpen","title","maxWidth","zIndex"],[1,"space-y-2","text-sm"],[1,"text-xs","text-neutral-500"],[1,"flex","items-center","gap-2"],["type","button","aria-label","Be\xE1ll\xEDt\xE1sok","title","Be\xE1ll\xEDt\xE1sok",1,"w-5","h-5","rounded-full","flex","items-center","justify-center","bg-neutral-900","border-2","border-neonDefault","text-neonCyan","hover:border-neonCyan","hover:shadow-neon-glow-cyan","transition-all","duration-200","focus:outline-none","focus:ring-2","focus:ring-neonCyan","focus:ring-offset-2","focus:ring-offset-neutral-900",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"w-2.5","h-2.5","shrink-0"],["d","M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z"],["d","M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z"],["type","button",1,"w-5","h-5","rounded-full","flex","items-center","justify-center","bg-neutral-900","border-2","transition-all","duration-200","focus:outline-none","focus:ring-2","focus:ring-offset-2","focus:ring-offset-neutral-900",3,"click"],["cx","12","cy","12","r","10"],["d","M12 16v-4"],["d","M12 8h.01"],["type","button",1,"flex","items-center","justify-center","min-w-[44px]","min-h-[44px]","w-10","h-10","rounded-full","shrink-0","bg-neutral-900","border-2","text-white","transition-all","duration-200","disabled:opacity-50","border-neonDefault","hover:border-neonCyan","hover:shadow-neon-glow-cyan","focus:outline-none","focus:ring-2","focus:ring-neonCyan","focus:ring-offset-2","focus:ring-offset-neutral-900",3,"click","disabled"],["aria-hidden","true",1,"inline-block","w-5","h-5","shrink-0","animate-spin","rounded-full","border-2","border-neonCyan/40","border-t-neonCyan"],[1,"flex","flex-col","items-center","gap-0.5","shrink-0"],[1,"text-[11px]","text-amber-300","leading-tight","max-w-[180px]","text-center"],["aria-hidden","true",1,"relative","w-2","h-6","rounded-sm","bg-neutral-800","overflow-hidden"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round","aria-hidden","true",1,"w-5","h-5","shrink-0","text-neonCyan"],["d","M12 2a3 3 0 0 1 3 3v7a3 3 0 0 1-6 0V5a3 3 0 0 1 3-3Z"],["d","M19 10v2a7 7 0 0 1-14 0v-2"],["x1","12","y1","19","x2","12","y2","22"],[1,"absolute","inset-x-0","bottom-0","bg-neonCyan","transition-[height]","duration-75"],[1,"absolute","inset-x-0","h-0.5","bg-neonAmber","rounded-sm","z-10",2,"bottom","5%"],["aria-hidden","true",1,"mr-1"],[1,"relative","inline-flex"],["type","button","aria-label","Be\xE1ll\xEDt\xE1sok","title","Be\xE1ll\xEDt\xE1sok",1,"absolute","right-full","mr-4","top-1/2","-translate-y-1/2","w-5","h-5","rounded-full","flex","items-center","justify-center","bg-neutral-900","border-2","border-neonDefault","text-neonCyan","hover:border-neonCyan","hover:shadow-neon-glow-cyan","transition-all","duration-200","focus:outline-none","focus:ring-2","focus:ring-neonCyan","focus:ring-offset-2","focus:ring-offset-neutral-900",3,"click"],["type","button",1,"absolute","left-full","ml-4","top-1/2","-translate-y-1/2","w-5","h-5","rounded-full","flex","items-center","justify-center","bg-neutral-900","border-2","transition-all","duration-200","focus:outline-none","focus:ring-2","focus:ring-offset-2","focus:ring-offset-neutral-900",3,"click"],[1,"text-[11px]","text-amber-300","leading-tight","max-w-[240px]","mt-1"],[1,"shrink-0"],[1,"text-xs","font-medium","text-neutral-400","mb-1"],[1,"text-xs","text-neutral-300","whitespace-pre-wrap","break-words"],[1,"text-xs","text-neutral-300","whitespace-pre-wrap","break-words","font-mono"],[1,"text-[10px]","text-neonAmber","mt-1"],[1,"text-[10px]","text-neutral-500","mb-1"],[1,"flex","flex-wrap","gap-2","items-center"],["name","qaProviderName",1,"px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","min-w-[120px]",3,"ngModelChange","ngModel"],["value",""],[3,"value"],["name","qaModelName",1,"px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","min-w-[140px]",3,"ngModel"],["type","text","name","qaModelNameText","placeholder","Modell id (lista nem el\xE9rhet\u0151 ehhez a providerhez)",1,"px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","min-w-[140px]","font-mono",3,"ngModel"],[1,"text-[10px]","text-amber-300/90","mt-1"],[1,"flex","flex-col","shrink-0"],[1,"text-xs","font-medium","text-neutral-400","mb-1","shrink-0"],[1,"space-y-1.5","rounded","border","border-neonDefault/50","bg-neutral-800/20","p-2"],[1,"flex","flex-wrap","gap-2","items-center","shrink-0","mt-2"],["type","button",1,"px-2","py-1","text-xs","border","border-neonDefault","rounded","text-neutral-400","hover:border-neonCyan","hover:text-neonCyan","transition-colors",3,"click"],["type","button",1,"px-2","py-1","text-xs","border","border-neonCyan","rounded","text-neonCyan","hover:shadow-neon-glow-cyan","disabled:opacity-50","transition-colors",3,"click","disabled"],["name","qaModelName",1,"px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","min-w-[140px]",3,"ngModelChange","ngModel"],["type","text","name","qaModelNameText","placeholder","Modell id (lista nem el\xE9rhet\u0151 ehhez a providerhez)",1,"px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","min-w-[140px]","font-mono",3,"ngModelChange","ngModel"],["type","text","placeholder","El\xEDr\xE1s / f\xE9lrehall\xE1s",1,"flex-1","min-w-0","px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","placeholder-neutral-500",3,"input","value"],[1,"text-neutral-500","shrink-0"],["type","text","placeholder","Helyes forma",1,"flex-1","min-w-0","px-2","py-1","text-xs","bg-neutral-800","border","border-neonDefault","rounded","text-neutral-200","placeholder-neutral-500",3,"input","value"],["type","button","aria-label","Sor t\xF6rl\xE9se","title","Sor t\xF6rl\xE9se",1,"shrink-0","p-1","text-neutral-500","hover:text-neonRed","transition-colors",3,"click"],[1,"sr-only"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2",1,"w-3.5","h-3.5"],["d","M18 6L6 18M6 6l12 12"],[1,"mt-3","pt-3","border-t","border-neonDefault","text-xs","text-neutral-500"],["type","button",1,"mt-1.5","px-2","py-1","text-xs","border","border-neonDefault","rounded","text-neutral-400","hover:border-neonCyan","hover:text-neonCyan","transition-colors",3,"click"],[1,"rounded-md","border","border-neonAmber/45","bg-neutral-950/95","p-2.5","mb-1"],[1,"font-medium","text-neonAmber"],[1,"text-neutral-400","text-xs"],[1,"text-neutral-200","break-words"],[1,"text-neutral-400","text-xs","mt-2"],[1,"text-[10px]","font-semibold","uppercase","tracking-wide","text-neonAmber/90","mb-1.5"],[1,"text-xs","leading-relaxed","whitespace-pre-wrap","break-words"],[1,"text-[10px]","text-neutral-500","mt-1.5","leading-snug"],[1,"text-neutral-300"],[1,"mx-0.5","inline","rounded","px-0.5","text-red-300/95","line-through","decoration-red-400/85","bg-red-950/50","border","border-red-900/45"],[1,"mx-0.5","inline","rounded","px-0.5","text-neonAmber","bg-amber-950/55","border","border-neonAmber/50","shadow-[0_0_10px_rgb(251_191_36/0.28)]"],[1,"text-neutral-300","break-words"]],template:function(t,i){if(t&1&&(C(0,Ae,15,35,"div",0)(1,Re,14,35),o(2,"app-s-modal",1),m("closed",function(){return i.settingsOpen_$.set(!1)}),o(3,"div",2)(4,"div",3)(5,"label",4)(6,"input",5),O("ngModelChange",function(u){return W(i.settingsQaEnabled,u)||(i.settingsQaEnabled=u),u}),r(),o(7,"span",6),d(8,"STT QA"),r()(),o(9,"label",4)(10,"input",7),m("ngModelChange",function(u){return i.handleAutoSendAfterVoiceChange(u)}),r(),o(11,"span",6),d(12,"Send immediately after voice (Mimik-style)"),r()()(),C(13,Oe,38,11,"div",8)(14,Ie,2,0,"p",9)(15,ze,4,0),r(),o(16,"div",10)(17,"button",11),m("click",function(){return i.settingsOpen_$.set(!1)}),d(18," Bez\xE1r\xE1s "),r()()(),o(19,"app-s-modal",12),m("closed",function(){return i.infoOpen_$.set(!1)}),C(20,Ze,13,4,"div",13)(21,Xe,2,0,"p",14),o(22,"div",10)(23,"button",11),m("click",function(){return i.infoOpen_$.set(!1)}),d(24," Bez\xE1r\xE1s "),r()()()),t&2){let a,u;g(i.compactLayout()?0:1),l(2),y("isOpen",i.settingsOpen_$())("title","Voice Input be\xE1ll\xEDt\xE1sok")("maxWidth","lg")("zIndex","40")("bodyFlexColumn",!0),l(4),N("ngModel",i.settingsQaEnabled),l(4),y("ngModel",i.voiceInputUi_DS.autoSendAfterVoice_$()),l(3),g((a=i.qaSettings_$())?13:i.qaSettingsLoading_$()?14:15,a),l(6),y("isOpen",i.infoOpen_$())("title","Utols\xF3 QA eredm\xE9ny")("maxWidth","md")("zIndex","40"),l(),g((u=i.lastQaTransformation_$())?20:21,u)}},dependencies:[pe,_e,me,se,le,ue,de,ce,xe],encapsulation:2})}return n})();export{ve as a,bt as b};
2
+ //# sourceMappingURL=chunk-C4FOSX27.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["src/app/_modules/dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-input-ui.data-service.ts", "src/app/_enums/voice/ccap-stt-qa-word-diff-segment-kind.enum.ts", "src/app/_collections/utils/model-testing/ccap-stt-qa-text-diff.util.ts", "src/app/_components/ccap-voice-record-button/ccap-voice-record-button.component.ts", "src/app/_components/ccap-voice-record-button/ccap-voice-record-button.component.html"],
4
+ "sourcesContent": ["import { Injectable, signal, WritableSignal } from '@angular/core';\n\nimport { Shr_LocalStoragePersistence_Util } from '../../../../../../shared/_collections/utils/storage/shr-local-storage-persistence.util';\n\n/** localStorage kulcs — hang input után azonnali küldés (chat / külső konzolok). */\nconst CCAP_VOICE_INPUT_AUTO_SEND_AFTER_VOICE_KEY: string = 'ccap-voiceInput:autoSendAfterVoice';\n\n/**\n * Voice input composer globális UI állapot — a hang gomb beállítások paneljéből vezérelhető,\n * minden `app-ccap-voice-record-button` kontextusban ugyanaz a döntés érvényesül.\n *\n * REQ-UI-MENU-STATE-001 (cycle 459): a localStorage I/O most a shared\n * `Shr_LocalStoragePersistence_Util.readString / writeString` metódusokra\n * delegál. Az on-disk format (`'true'` / `'false'` literális string) változatlan\n * — szándékosan `writeString(String(value))` a `writeBoolean` (`'1'`/`'0'`)\n * helyett, hogy a meglévő spec round-trip elvárás (`getItem === 'true'`)\n * + a backward-compat felhasználói localStorage értékek konzisztensek\n * maradjanak. A best-effort try/catch most a shared util-ban van. A korábbi\n * top-level `function readAutoSendAfterVoiceFromStorage()` private static\n * methodként került be a class-ba (CLAUDE.md no-top-level-function).\n */\n@Injectable({ providedIn: 'root' })\nexport class VNP_InputUi_DataService {\n\n /** Ha true, a STT transcript után azonnal küldés fut (Mimik-minta); ha false, csak hozzáfűzés a mezőhöz. */\n readonly autoSendAfterVoice_$: WritableSignal<boolean> =\n signal<boolean>(VNP_InputUi_DataService.readAutoSendAfterVoiceFromStorage());\n\n /**\n * „Hang után azonnal\" toggle — signal + localStorage perzisztencia.\n */\n setAutoSendAfterVoice(value: boolean): void {\n this.autoSendAfterVoice_$.set(value);\n Shr_LocalStoragePersistence_Util.writeString(CCAP_VOICE_INPUT_AUTO_SEND_AFTER_VOICE_KEY, String(value));\n }\n\n /**\n * Böngészőből olvassa az „azonnal küldés hang után\" flag-et (default: false).\n */\n private static readAutoSendAfterVoiceFromStorage(): boolean {\n return Shr_LocalStoragePersistence_Util.readString(CCAP_VOICE_INPUT_AUTO_SEND_AFTER_VOICE_KEY) === 'true';\n }\n}\n", "/**\n * STT QA szöveg word-diff szegmens típusa (egyenlő / törölt / új).\n */\nexport enum CCAP_SttQaWordDiffSegmentKind_Type {\n equal = 'equal',\n removed = 'removed',\n added = 'added',\n}\n", "import { CCAP_SttQaWordDiffSegmentKind_Type } from '../../../_enums/voice/ccap-stt-qa-word-diff-segment-kind.enum';\nimport { CCAP_SttQaWordDiffSegment_Interface } from '../../../_models/interfaces/voice/transcribe/ccap-stt-qa-word-diff-segment.interface';\n\ntype CCAP_SttQaWordDiffRawSegment_Interface = {\n kind: CCAP_SttQaWordDiffSegmentKind_Type;\n text: string;\n};\n\n/**\n * STT QA eredeti vs javított szöveg word-token alapú diff (LCS) — modal összefoglaló highlight-hoz.\n */\nexport class CCAP_SttQaTextDiff_Util {\n /**\n * Whitespace-megtartó tokenizálás: szavak és whitespace külön token (LCS egy sorban tartja a szerkezetet).\n */\n private static tokenize(input: string): string[] {\n const trimmed: string = input;\n if (trimmed.length === 0) {\n return [];\n }\n const parts: string[] = trimmed.split(/(\\s+)/);\n const out: string[] = [];\n for (let i: number = 0; i < parts.length; i++) {\n const p: string = parts[i];\n if (p.length > 0) {\n out.push(p);\n }\n }\n return out;\n }\n\n /**\n * Egymás melletti azonos kind szegmensek összefűzése, majd id kiosztás.\n */\n private static mergeAndAssignIds(\n raw: CCAP_SttQaWordDiffRawSegment_Interface[],\n ): CCAP_SttQaWordDiffSegment_Interface[] {\n if (raw.length === 0) {\n return [];\n }\n const merged: CCAP_SttQaWordDiffRawSegment_Interface[] = [];\n for (let i: number = 0; i < raw.length; i++) {\n const cur: CCAP_SttQaWordDiffRawSegment_Interface = raw[i];\n const last: CCAP_SttQaWordDiffRawSegment_Interface | undefined = merged[merged.length - 1];\n if (last !== undefined && last.kind === cur.kind) {\n last.text = last.text + cur.text;\n } else {\n merged.push({ kind: cur.kind, text: cur.text });\n }\n }\n const withIds: CCAP_SttQaWordDiffSegment_Interface[] = [];\n for (let k: number = 0; k < merged.length; k++) {\n const m: CCAP_SttQaWordDiffRawSegment_Interface = merged[k];\n withIds.push({\n id: k,\n kind: m.kind,\n text: m.text,\n });\n }\n return withIds;\n }\n\n /**\n * Word-token LCS diff: unified sor — equal / removed / added szegmensek sorrendben (javított szöveg kontextusához).\n */\n static buildWordDiff(oldText: string, newText: string): CCAP_SttQaWordDiffSegment_Interface[] {\n const a: string[] = CCAP_SttQaTextDiff_Util.tokenize(oldText);\n const b: string[] = CCAP_SttQaTextDiff_Util.tokenize(newText);\n const n: number = a.length;\n const m: number = b.length;\n const dp: number[][] = [];\n for (let i: number = 0; i <= n; i++) {\n const row: number[] = [];\n for (let j: number = 0; j <= m; j++) {\n row.push(0);\n }\n dp.push(row);\n }\n for (let i: number = 1; i <= n; i++) {\n for (let j: number = 1; j <= m; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1;\n } else {\n const up: number = dp[i - 1][j];\n const left: number = dp[i][j - 1];\n dp[i][j] = up > left ? up : left;\n }\n }\n }\n const rawBackwards: CCAP_SttQaWordDiffRawSegment_Interface[] = [];\n let i: number = n;\n let j: number = m;\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && a[i - 1] === b[j - 1]) {\n rawBackwards.push({\n kind: CCAP_SttQaWordDiffSegmentKind_Type.equal,\n text: a[i - 1],\n });\n i -= 1;\n j -= 1;\n } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n rawBackwards.push({\n kind: CCAP_SttQaWordDiffSegmentKind_Type.added,\n text: b[j - 1],\n });\n j -= 1;\n } else if (i > 0) {\n rawBackwards.push({\n kind: CCAP_SttQaWordDiffSegmentKind_Type.removed,\n text: a[i - 1],\n });\n i -= 1;\n }\n }\n const rawForward: CCAP_SttQaWordDiffRawSegment_Interface[] = [];\n for (let k: number = rawBackwards.length - 1; k >= 0; k--) {\n rawForward.push(rawBackwards[k]);\n }\n return CCAP_SttQaTextDiff_Util.mergeAndAssignIds(rawForward);\n }\n}\n", "import {\n Component,\n OnInit,\n OnDestroy,\n input,\n InputSignal,\n Output,\n EventEmitter,\n inject,\n signal,\n computed,\n HostListener,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport type { CCAP_TranscribeSuccess_Response } from '../../_models/interfaces/voice/transcribe/ccap-transcribe-success-response.interface';\nimport type { CCAP_Transcribe_Response } from '../../_models/interfaces/voice/transcribe/ccap-transcribe-response.interface';\nimport type { CCAP_VoiceNotesQaSettings_Response as CCAP_VoiceNotesQaSettingsResponse_Interface } from '../../_models/interfaces/voice/voice-notes/ccap-voice-notes-qa-settings-response.interface';\nimport type { CCAP_LlmProviderSelectOption_Interface } from '../../_models/interfaces/settings/ccap-llm-provider-select-option.interface';\nimport type {\n Voc_SttQaConfusionMapEntry_Response,\n Voc_SttQaInput_Response,\n} from '../../_models/server-index';\nimport { CCAP_GlobalError_ControlService } from '../../_services/control-services/ccap-global-error.control-service';\nimport { CCAP_SoundRecorder_ControlService } from '../../_services/control-services/ccap-sound-recorder.control-service';\nimport { VNP_SttQaUi_DataService } from '../../_modules/dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-stt-qa-ui.data-service';\nimport { VNP_InputUi_DataService } from '../../_modules/dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-input-ui.data-service';\nimport { CCAP_SoundRecorderState_State } from '../../_enums/ccap-sound-recorder-state.enum';\nimport { CCAP_SoundRecorderChunkMeta_Interface } from '../../_services/control-services/ccap-sound-recorder-chunk-meta.interface';\nimport { CCAP_MediaRecording_Util } from '../../_collections/utils/media-recording/media-recording.util';\nimport { CCAP_SttQaTextDiff_Util } from '../../_collections/utils/model-testing/ccap-stt-qa-text-diff.util';\nimport { CCAP_SttQaWordDiffSegmentKind_Type } from '../../_enums/voice/ccap-stt-qa-word-diff-segment-kind.enum';\nimport { CCAP_SttQaWordDiffSegment_Interface } from '../../_models/interfaces/voice/transcribe/ccap-stt-qa-word-diff-segment.interface';\nimport { S_Modal_Component } from '../../_modules/shared/_components/s-modal/s-modal.component';\n\n/**\n * Beágyazható hangrögzítő gomb: rögzít → STT (és opcionális QA) → transcriptReady emit.\n * Inputokra rakható (pl. chat input felső border közepére).\n */\n@Component({\n selector: 'app-ccap-voice-record-button',\n standalone: true,\n imports: [FormsModule, S_Modal_Component],\n templateUrl: './ccap-voice-record-button.component.html',\n})\n/** CCAP_VoiceRecordButton_Component class. */\nexport class CCAP_VoiceRecordButton_Component implements OnInit, OnDestroy {\n\n private readonly globalError_CS: CCAP_GlobalError_ControlService =\n inject(CCAP_GlobalError_ControlService);\n private readonly soundRecorder_CS: CCAP_SoundRecorder_ControlService =\n inject(CCAP_SoundRecorder_ControlService);\n private readonly voiceSttQaUi_DS: VNP_SttQaUi_DataService =\n inject(VNP_SttQaUi_DataService);\n readonly voiceInputUi_DS: VNP_InputUi_DataService = inject(VNP_InputUi_DataService);\n\n /** STT QA bekapcsolva; ha nincs megadva, a mentett QA beállításból töltjük (GET qa-settings). */\n readonly qaEnabled: InputSignal<boolean | undefined> = input<boolean | undefined>(undefined);\n\n /** Compact layout: beállítás + infó gombok a rekordgomb fölé kerülnek (két oldal helyett). */\n readonly compactLayout: InputSignal<boolean> = input<boolean>(false);\n\n /** Sikeres transcribe után a végső szöveg (corrected vagy transcript). */\n @Output() transcriptReady = new EventEmitter<string>();\n\n /**\n * Szegmens transcribe eredmény: szöveg + isFinal flag (auto-send akkumuláció a consumer-ben).\n * Slice 3 (cycle 947): `overlapPrevMs` echo a dual-recorder swap átfedés-jelölésére —\n * a consumer a `CCAP_VoiceInputDedup_Util.deduplicateOverlap()`-pel távolíthatja el\n * a szegmens prefix-éből az átfedési duplikációt mielőtt akkumulál.\n */\n @Output() transcriptSegmentReady = new EventEmitter<{\n text: string;\n isFinal: boolean;\n overlapPrevMs: number;\n }>();\n\n /** Felvétel / feldolgozás folyamatban (legalább egy transzkripció fut). */\n readonly busy_$ = signal<boolean>(false);\n /** Párhuzamos transzkripciók száma (mid-recording flush + final flush egyszerre futhat). */\n private pendingTranscriptionCount: number = 0;\n /**\n * Emit-sorrendesítő lánc: a transzkripciók párhuzamosan futnak (sebesség), de a\n * `transcriptReady` + `transcriptSegmentReady` emit-ek szigorúan chunkIndex-sorrendben\n * mennek ki. Enélkül ha egy rövidebb, `isFinal=true` szegmens előbb tér vissza a\n * hosszabb első szegmensnél, a consumer auto-send-je a teljes akkumulálás ELŐTT tüzelhet\n * (BUG-VO-001: 30s+ voice input elejének elvesztése).\n */\n private emitChain: Promise<void> = Promise.resolve();\n /** Hangerő 0..1 (volume gate indikátor). */\n readonly volume_$ = signal<number>(0);\n /** Betöltött QA beállítás qaEnabled (ha nem volt @Input). */\n private readonly isQaEnabledFromSettings_$ = signal<boolean>(false);\n /** Beállítások overlay nyitva. */\n readonly settingsOpen_$ = signal<boolean>(false);\n /** STT QA beállítások (betöltve); null ha még nincs. */\n readonly qaSettings_$ = signal<CCAP_VoiceNotesQaSettingsResponse_Interface | null>(null);\n /** Confusion map a beállításokban szerkesztve. */\n readonly confusionMapList_$ = signal<Voc_SttQaConfusionMapEntry_Response[]>([]);\n /** QA beállítások mentése folyamatban. */\n readonly qaSettingsSaving_$ = signal<boolean>(false);\n /** QA beállítások betöltése folyamatban. */\n readonly qaSettingsLoading_$ = signal<boolean>(false);\n /** STT QA toggle a beállításokban (szinkron isQaEnabledFromSettings-szel mentéskor). */\n settingsQaEnabled: boolean = false;\n /** STT QA provider és modell (beállítások form). */\n qaProviderName: string = '';\n qaModelName: string = '';\n /** LLM provider választó sorok (value + label), LLM settings-szel megegyező címkék. */\n readonly llmProviderSelectOptions_$ = signal<CCAP_LlmProviderSelectOption_Interface[]>([]);\n /** Kiválasztott QA provider modell listája. */\n readonly qaModelsForProvider_$ = signal<string[]>([]);\n /** list-llm-models hibaüzenet (üres = nincs); cloud provider / API hiba. */\n readonly qaModelsListFetchError_$ = signal<string>('');\n /** Utolsó STT QA javítás (eredeti → javított + opcionális magyarázat); null ha nem volt QA. */\n readonly lastQaTransformation_$ = signal<{\n original: string;\n corrected: string;\n explanation?: string;\n input?: Voc_SttQaInput_Response;\n } | null>(null);\n /** QA eredmény (infó) overlay nyitva. */\n readonly infoOpen_$ = signal<boolean>(false);\n /** Hangfelvétel nem elérhető (pl. nem secure context); null ha elérhető. User-facing message (title/aria). */\n readonly mediaUnavailable_$ = signal<string | null>(null);\n\n /** Globál alapértelmezett LLM provider (override jelzéshez). */\n readonly defaultLlmProvider_$ = signal<string>('');\n /** Globál alapértelmezett LLM modell (override jelzéshez). */\n readonly defaultLlmModel_$ = signal<string>('');\n\n /** Hangerő százalék (computed). */\n readonly volumePercent_$ = computed((): number => Math.min(100, this.volume_$() * 250));\n\n /** Modell választó: van lista a szerverről (vagy mentett modell merge). */\n readonly qaShowModelSelect_$ = computed((): boolean => this.qaModelsForProvider_$().length > 0);\n\n /**\n * Utolsó QA futás után a nyers STT és a corrected szöveg eltér — Info gomb vizuális kiemelése (még apró eltérés is).\n */\n readonly lastQaTextWasModified_$ = computed((): boolean => {\n const t: {\n original: string;\n corrected: string;\n explanation?: string;\n input?: Voc_SttQaInput_Response;\n } | null = this.lastQaTransformation_$();\n if (t === null) {\n return false;\n }\n return t.original !== t.corrected;\n });\n\n /**\n * Utolsó QA eredeti vs javított word-diff szegmensek — infó modal tetején highlighted összefoglaló.\n */\n readonly lastQaWordDiffSegments_$ = computed((): CCAP_SttQaWordDiffSegment_Interface[] => {\n const t: {\n original: string;\n corrected: string;\n explanation?: string;\n input?: Voc_SttQaInput_Response;\n } | null = this.lastQaTransformation_$();\n if (t === null || t.original === t.corrected) {\n return [];\n }\n return CCAP_SttQaTextDiff_Util.buildWordDiff(t.original, t.corrected);\n });\n\n /** Template: STT QA diff szegmens kind összehasonlítás. */\n readonly SttQaDiffKind: typeof CCAP_SttQaWordDiffSegmentKind_Type = CCAP_SttQaWordDiffSegmentKind_Type;\n\n /** Globál default provider megjelenített címke. */\n readonly defaultLlmProviderDisplayLabel_$ = computed((): string => {\n const opts: CCAP_LlmProviderSelectOption_Interface[] = this.llmProviderSelectOptions_$();\n const id: string = this.defaultLlmProvider_$().trim();\n if (!id.length) {\n return '';\n }\n const hit: CCAP_LlmProviderSelectOption_Interface | undefined = opts.find(\n (o: CCAP_LlmProviderSelectOption_Interface): boolean => o.value === id,\n );\n return hit?.label ?? id;\n });\n\n /** QA override provider címke (ha nincs az opciók között, nyers id). */\n readonly qaProviderDisplayLabel_$ = computed((): string => {\n const id: string = this.qaProviderName.trim();\n if (!id.length) {\n return '';\n }\n const opts: CCAP_LlmProviderSelectOption_Interface[] = this.llmProviderSelectOptions_$();\n const hit: CCAP_LlmProviderSelectOption_Interface | undefined = opts.find(\n (o: CCAP_LlmProviderSelectOption_Interface): boolean => o.value === id,\n );\n return hit?.label ?? id;\n });\n\n ngOnInit(): void {\n const availability = CCAP_MediaRecording_Util.getMediaRecordingAvailability();\n if (!availability.supported && availability.reason) {\n const reason: string = availability.reason;\n this.mediaUnavailable_$.set(CCAP_MediaRecording_Util.getMediaUnavailableMessage(reason));\n this.globalError_CS.reportErrorOnly({\n message: CCAP_MediaRecording_Util.getMediaUnavailableReportMessage(reason),\n source: 'ccap-voice-record-button',\n });\n }\n this.soundRecorder_CS.setOnChunk((blob: Blob, meta: CCAP_SoundRecorderChunkMeta_Interface): void => {\n void this.onChunk(blob, meta);\n });\n this.soundRecorder_CS.setOnVolume((value: number): void => {\n this.volume_$.set(value);\n });\n this.soundRecorder_CS.setOnError((err: unknown): void => {\n this.globalError_CS.showError(err, 'ccap-voice-record-button');\n });\n }\n\n ngOnDestroy(): void {\n this.soundRecorder_CS.stopListening();\n // Callback-eket NEM töröljük szándékosan:\n // 1. A stopListening aszinkron onstop handler-jének szüksége van az onChunkCb-re az utolsó chunk flush-jához.\n // 2. Ha navigáció történik és új voice-record-button jön létre, annak ngOnInit felülírja a callback-eket.\n // 3. setTimeout-os késleltetett törlés race condition-t okoz: ha az új component ngOnInit hamarabb fut\n // mint a setTimeout (mindig!), az új component callback-jeit is no-op-ra írja → volume indikátor\n // nem mozdul, chunk-ok elvesznek. A singleton service (providedIn: 'root') miatt ez 8 oldalon\n // minden navigáláskor reprodukálható bug.\n }\n\n /** Felvétel indítása vagy leállítása. */\n async toggleRecord(): Promise<void> {\n if (this.mediaUnavailable_$() !== null) {\n return;\n }\n const state: CCAP_SoundRecorderState_State = this.soundRecorder_CS.state_$();\n if (state === CCAP_SoundRecorderState_State.stopped) {\n if (this.qaEnabled() === undefined) {\n await this.loadQaEnabledOnce();\n }\n try {\n await this.soundRecorder_CS.startListening();\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ccap-voice-record-button');\n }\n } else {\n this.soundRecorder_CS.stopListening();\n }\n }\n\n /** QA beállítás egyszeri betöltése (qaEnabled tárolására). */\n private async loadQaEnabledOnce(): Promise<void> {\n this.isQaEnabledFromSettings_$.set(await this.voiceSttQaUi_DS.fetchQaEnabledFlag());\n }\n\n /**\n * „Hang után azonnali küldés” — Voice Input beállítások panel; globál UI + localStorage.\n */\n handleAutoSendAfterVoiceChange(value: boolean): void {\n this.voiceInputUi_DS.setAutoSendAfterVoice(value);\n }\n\n /** Beállítások overlay megnyitása/bezárása. */\n toggleSettings(): void {\n this.settingsOpen_$.update((v: boolean): boolean => !v);\n if (!this.settingsOpen_$()) {\n return;\n }\n void this.loadQaSettings();\n }\n\n /** QA eredmény (infó) overlay megnyitása/bezárása. */\n toggleInfo(): void {\n this.infoOpen_$.update((v: boolean): boolean => !v);\n }\n\n /** STT QA beállítások betöltése (beállítások megnyitásakor). */\n async loadQaSettings(): Promise<void> {\n this.qaSettingsLoading_$.set(true);\n try {\n const state = await this.voiceSttQaUi_DS.loadSttQaSettingsPanelState();\n const res = state.qa;\n this.qaSettings_$.set(res);\n this.confusionMapList_$.set([...(res.confusionMap ?? [])]);\n this.settingsQaEnabled = res.qaEnabled === true;\n this.isQaEnabledFromSettings_$.set(res.qaEnabled === true);\n this.qaProviderName = res.providerName ?? '';\n this.qaModelName = res.modelName ?? '';\n this.llmProviderSelectOptions_$.set(state.llmProviderSelectOptions);\n this.defaultLlmProvider_$.set(state.defaultLlmProvider);\n this.defaultLlmModel_$.set(state.defaultLlmModel);\n this.qaModelsForProvider_$.set(state.qaModelsForProvider);\n this.qaModelsListFetchError_$.set(state.qaModelsListFetchError);\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ccap-voice-record-button');\n this.qaSettings_$.set(null);\n this.confusionMapList_$.set([]);\n this.llmProviderSelectOptions_$.set([]);\n this.qaModelsListFetchError_$.set('');\n this.qaModelsForProvider_$.set([]);\n } finally {\n this.qaSettingsLoading_$.set(false);\n }\n }\n\n /** Kiválasztott QA provider modell listájának betöltése. */\n async loadQaModelsForProvider(providerId: string): Promise<void> {\n const out = await this.voiceSttQaUi_DS.fetchLlmModelsListForSttQa(providerId);\n this.qaModelsForProvider_$.set(out.models);\n this.qaModelsListFetchError_$.set(out.errorMessage);\n }\n\n /** QA provider megváltozott: modell lista újratöltése. */\n onQaProviderChange(): void {\n void this.loadQaModelsForProvider(this.qaProviderName);\n this.qaModelName = '';\n }\n\n /** Új confusion map sor hozzáadása. */\n addConfusionEntry(): void {\n this.confusionMapList_$.update(\n (list: Voc_SttQaConfusionMapEntry_Response[]): Voc_SttQaConfusionMapEntry_Response[] =>\n [...list, { from: '', to: '' }],\n );\n }\n\n /** Confusion map sor törlése. */\n removeConfusionEntry(index: number): void {\n this.confusionMapList_$.update(\n (list: Voc_SttQaConfusionMapEntry_Response[]): Voc_SttQaConfusionMapEntry_Response[] =>\n list.filter((_: Voc_SttQaConfusionMapEntry_Response, i: number): boolean => i !== index),\n );\n }\n\n /** Confusion map sor „from” mezőjének frissítése. */\n updateConfusionFrom(index: number, value: string): void {\n this.confusionMapList_$.update(\n (list: Voc_SttQaConfusionMapEntry_Response[]): Voc_SttQaConfusionMapEntry_Response[] => {\n const next: Voc_SttQaConfusionMapEntry_Response[] = [...list];\n if (next[index]) {\n next[index] = { from: value, to: next[index].to };\n }\n return next;\n },\n );\n }\n\n /** Confusion map sor „to” mezőjének frissítése. */\n updateConfusionTo(index: number, value: string): void {\n this.confusionMapList_$.update(\n (list: Voc_SttQaConfusionMapEntry_Response[]): Voc_SttQaConfusionMapEntry_Response[] => {\n const next: Voc_SttQaConfusionMapEntry_Response[] = [...list];\n if (next[index]) {\n next[index] = { from: next[index].from, to: value };\n }\n return next;\n },\n );\n }\n\n /** QA beállítások mentése a szerverre. */\n async saveQaSettings(): Promise<void> {\n this.qaSettingsSaving_$.set(true);\n try {\n const list: Voc_SttQaConfusionMapEntry_Response[] =\n this.voiceSttQaUi_DS.normalizeConfusionMapEntries(this.confusionMapList_$());\n\n await this.voiceSttQaUi_DS.saveVoiceNotesQaSettings({\n confusionMap: list,\n providerName: this.qaProviderName.trim() || undefined,\n modelName: this.qaModelName.trim() || undefined,\n qaEnabled: this.settingsQaEnabled,\n });\n this.confusionMapList_$.set([...list]);\n this.isQaEnabledFromSettings_$.set(this.settingsQaEnabled);\n const current = this.qaSettings_$();\n if (current !== null) {\n this.qaSettings_$.set({\n systemPrompt: current.systemPrompt,\n userPromptTemplate: current.userPromptTemplate,\n confusionMap: list,\n providerName: this.qaProviderName.trim() || '',\n modelName: this.qaModelName.trim() || '',\n qaEnabled: this.settingsQaEnabled,\n });\n }\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ccap-voice-record-button');\n } finally {\n this.qaSettingsSaving_$.set(false);\n }\n }\n\n /** Escape: beállítások és QA eredmény overlay bezárása. */\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.settingsOpen_$()) {\n this.settingsOpen_$.set(false);\n }\n if (this.infoOpen_$()) {\n this.infoOpen_$.set(false);\n }\n }\n\n private readonly effectiveQaEnabled_$ = computed((): boolean => {\n if (this.qaEnabled() !== undefined) {\n return this.qaEnabled()!;\n }\n return this.isQaEnabledFromSettings_$();\n });\n\n /**\n * Chunk megérkezett: transcribe párhuzamosan, emit szigorúan chunkIndex-sorrendben.\n *\n * Sorrend-garancia: minden `onChunk` hívás captolja a korábbi `emitChain`-t, és a saját\n * új Promise-ét kiköti rá; a transzkripció azonnal indul (párhuzam megtartva), de az emit\n * csak a `prevEmitQueue` lejárta után történik. Ezzel az `isFinal=true` szegmens emit-je\n * mindig a korábbi (non-final) szegmensek emit-je UTÁN megy ki, akkor is, ha hamarabb\n * végez a transzkripcióval.\n */\n private async onChunk(\n blob: Blob,\n meta: CCAP_SoundRecorderChunkMeta_Interface,\n ): Promise<void> {\n this.pendingTranscriptionCount++;\n this.busy_$.set(true);\n // Emit-slot foglalás: captoljuk a korábbi láncot, és saját Promise-szal hosszabbítjuk.\n // A `releaseEmitSlot` a finally blokkban kell minden ágon lefusson, különben a következő\n // szegmens emit-je örökre blokkolódik.\n const prevEmitQueue: Promise<void> = this.emitChain;\n let releaseEmitSlot: () => void = () => {};\n this.emitChain = new Promise<void>((resolve: () => void) => {\n releaseEmitSlot = resolve;\n });\n try {\n const res: CCAP_Transcribe_Response = await this.voiceSttQaUi_DS.transcribeVoiceChunk({\n blob: blob,\n mimeType: meta.mimeType,\n filename: meta.filename,\n qaEnabled: this.effectiveQaEnabled_$(),\n noteContext: '',\n skipClassification: true,\n // Slice 3 (cycle 947): dual-recorder swap overlap-ms a szerverhez headerben.\n overlapPrevMs: meta.overlapPrevMs,\n });\n // Várjunk a korábbi chunk-ok emit-jeinek befejeződésére, mielőtt mi emitelünk.\n // Transzkripció már megtörtént — csak az emit van sorrendesítve.\n await prevEmitQueue;\n if (res.ok === false) {\n // non_speech: a szegmensben nem volt felismerhető beszéd — nem hiba, de jelezzük a consumer-nek\n // hogy a szegmens feldolgozódott (isFinal propagálás a soron következő szegmensekhez).\n this.transcriptSegmentReady.emit({\n text: '',\n isFinal: meta.isFinal,\n overlapPrevMs: meta.overlapPrevMs,\n });\n return;\n }\n const success: CCAP_TranscribeSuccess_Response = res;\n if (success.qaFailed === true) {\n const qfm: string = success.qaFailureMessage?.trim() ?? '';\n if (qfm.length > 0) {\n this.globalError_CS.showError(new Error(qfm), 'voice-stt-qa');\n }\n }\n const text: string =\n (success.correctedTranscript != null && success.correctedTranscript.trim().length > 0)\n ? success.correctedTranscript.trim()\n : (success.transcript ?? '').trim();\n // Csak usedQa=true eseten frissitjuk — parhuzamos chunk-oknal a QA nelkuli chunk ne torolje\n // az elozo chunk QA eredmenyet. \"Utolso QA eredmeny\" = utolso QA-t hasznalo chunk eredmenye.\n if (\n success.usedQa === true\n && (success.transcript ?? '').trim().length > 0\n && (success.correctedTranscript ?? '').trim().length > 0\n ) {\n this.lastQaTransformation_$.set({\n original: (success.transcript ?? '').trim(),\n corrected: (success.correctedTranscript ?? '').trim(),\n explanation: (success.qaExplanation ?? '').trim() || undefined,\n input: success.qaInput,\n });\n }\n if (text) {\n this.transcriptReady.emit(text);\n this.transcriptSegmentReady.emit({\n text: text,\n isFinal: meta.isFinal,\n overlapPrevMs: meta.overlapPrevMs,\n });\n }\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ccap-voice-record-button');\n } finally {\n // Emit-slot mindig fel kell oldani — különben a következő chunk emit-je blokkolódik.\n releaseEmitSlot();\n this.pendingTranscriptionCount--;\n if (this.pendingTranscriptionCount <= 0) {\n this.pendingTranscriptionCount = 0;\n this.busy_$.set(false);\n }\n }\n }\n\n /** Felvétel állapot (gomb szöveghez). */\n readonly recordStateLabel_$ = computed(\n (): string =>\n this.soundRecorder_CS.state_$() === CCAP_SoundRecorderState_State.stopped\n ? 'Felvétel'\n : 'Stop',\n );\n\n readonly isRecordActive_$ = computed((): boolean => {\n const s: CCAP_SoundRecorderState_State = this.soundRecorder_CS.state_$();\n return (\n s === CCAP_SoundRecorderState_State.standby\n || s === CCAP_SoundRecorderState_State.running\n );\n });\n\n readonly isRecording_$ = computed(\n (): boolean => this.soundRecorder_CS.state_$() === CCAP_SoundRecorderState_State.running,\n );\n\n /** Felvétel gomb aria-label: felvétel közben „Stop\"; feldolgozás alatt a gomb új felvételt indít (REQ-VO-002). */\n readonly recordButtonAriaLabel_$ = computed((): string => {\n const unavail: string | null = this.mediaUnavailable_$();\n if (unavail) return unavail;\n if (this.isRecordActive_$()) return 'Stop';\n return this.busy_$() ? 'Új felvétel (feldolgozás folyamatban)' : 'Felvétel';\n });\n\n /** Felvétel gomb title (tooltip): ugyanaz mint aria-label; feldolgozás alatt explicit utalás, hogy új felvétel indítható. */\n readonly recordButtonTitle_$ = computed((): string => {\n const unavail: string | null = this.mediaUnavailable_$();\n if (unavail) return unavail;\n if (this.isRecordActive_$()) return 'Stop';\n return this.busy_$() ? 'Új felvétel — előző feldolgozás folyamatban' : 'Felvétel';\n });\n}\n", "@if (compactLayout()) {\n <!-- Compact layout: beállítás + infó gombok a rekordgomb FÖLÉ -->\n <div class=\"flex flex-col items-center gap-1\">\n <div class=\"flex items-center gap-2\">\n <button type=\"button\"\n (click)=\"toggleSettings(); $event.stopPropagation()\"\n class=\"w-5 h-5 rounded-full flex items-center justify-center\n bg-neutral-900 border-2 border-neonDefault text-neonCyan\n hover:border-neonCyan hover:shadow-neon-glow-cyan transition-all duration-200\n focus:outline-none focus:ring-2 focus:ring-neonCyan focus:ring-offset-2 focus:ring-offset-neutral-900\"\n aria-label=\"Beállítások\"\n title=\"Beállítások\">\n <svg class=\"w-2.5 h-2.5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n </button>\n <button type=\"button\"\n (click)=\"toggleInfo(); $event.stopPropagation()\"\n class=\"w-5 h-5 rounded-full flex items-center justify-center\n bg-neutral-900 border-2 transition-all duration-200\n focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [class.border-neonDefault]=\"!lastQaTextWasModified_$()\"\n [class.text-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.hover:border-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.hover:shadow-neon-glow-cyan]=\"!lastQaTextWasModified_$()\"\n [class.focus:ring-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.border-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.text-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.shadow-neon-glow-orange]=\"lastQaTextWasModified_$()\"\n [class.hover:border-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.hover:shadow-neon-glow-orange]=\"lastQaTextWasModified_$()\"\n [class.focus:ring-neonAmber]=\"lastQaTextWasModified_$()\"\n [attr.aria-label]=\"lastQaTextWasModified_$()\n ? 'Utolsó QA eredmény — a szöveg módosult'\n : 'Utolsó QA eredmény'\"\n [attr.title]=\"lastQaTextWasModified_$()\n ? 'Utolsó QA eredmény — a szöveg módosult (részletek)'\n : 'Utolsó QA eredmény'\">\n <svg class=\"w-2.5 h-2.5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n </button>\n </div>\n <button type=\"button\"\n (click)=\"toggleRecord()\"\n [disabled]=\"mediaUnavailable_$() !== null\"\n class=\"flex items-center justify-center min-w-[44px] min-h-[44px] w-10 h-10 rounded-full shrink-0\n bg-neutral-900 border-2 text-white transition-all duration-200 disabled:opacity-50\n border-neonDefault hover:border-neonCyan hover:shadow-neon-glow-cyan\n focus:outline-none focus:ring-2 focus:ring-neonCyan focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [class.border-neonCyan]=\"isRecordActive_$() || busy_$()\"\n [class.shadow-neon-glow-cyan]=\"isRecordActive_$() || busy_$()\"\n [class.animate-pulse]=\"isRecording_$()\"\n [attr.aria-label]=\"recordButtonAriaLabel_$()\"\n [attr.title]=\"recordButtonTitle_$()\">\n @if (busy_$() && !isRecordActive_$()) {\n <span class=\"inline-block w-5 h-5 shrink-0 animate-spin rounded-full border-2 border-neonCyan/40 border-t-neonCyan\"\n aria-hidden=\"true\"></span>\n } @else {\n <div class=\"flex flex-col items-center gap-0.5 shrink-0\">\n @if (isRecordActive_$()) {\n <div class=\"relative w-2 h-6 rounded-sm bg-neutral-800 overflow-hidden\"\n aria-hidden=\"true\">\n <div class=\"absolute inset-x-0 bottom-0 bg-neonCyan transition-[height] duration-75\"\n [style.height.%]=\"volumePercent_$()\"></div>\n <div class=\"absolute inset-x-0 h-0.5 bg-neonAmber rounded-sm z-10\"\n style=\"bottom: 5%;\"></div>\n </div>\n }\n <svg class=\"w-5 h-5 shrink-0 text-neonCyan\"\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 2a3 3 0 0 1 3 3v7a3 3 0 0 1-6 0V5a3 3 0 0 1 3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\" />\n </svg>\n </div>\n }\n </button>\n @if (mediaUnavailable_$(); as reason) {\n <!-- REQ-UI-VHTTPS-001: látható warning-blokk, ha nincs secure context / nem elérhető a mikrofon. -->\n <p class=\"text-[11px] text-amber-300 leading-tight max-w-[180px] text-center\"\n [attr.aria-live]=\"'polite'\">\n <span aria-hidden=\"true\" class=\"mr-1\">⚠</span>{{ reason }}\n </p>\n }\n </div>\n} @else {\n <!-- Default layout: beállítás balra, rekordgomb középen, infó jobbra (absolute) -->\n <div class=\"relative inline-flex\">\n <button type=\"button\"\n (click)=\"toggleRecord()\"\n [disabled]=\"mediaUnavailable_$() !== null\"\n class=\"flex items-center justify-center min-w-[44px] min-h-[44px] w-10 h-10 rounded-full shrink-0\n bg-neutral-900 border-2 text-white transition-all duration-200 disabled:opacity-50\n border-neonDefault hover:border-neonCyan hover:shadow-neon-glow-cyan\n focus:outline-none focus:ring-2 focus:ring-neonCyan focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [class.border-neonCyan]=\"isRecordActive_$() || busy_$()\"\n [class.shadow-neon-glow-cyan]=\"isRecordActive_$() || busy_$()\"\n [class.animate-pulse]=\"isRecording_$()\"\n [attr.aria-label]=\"recordButtonAriaLabel_$()\"\n [attr.title]=\"recordButtonTitle_$()\">\n @if (busy_$() && !isRecordActive_$()) {\n <span class=\"inline-block w-5 h-5 shrink-0 animate-spin rounded-full border-2 border-neonCyan/40 border-t-neonCyan\"\n aria-hidden=\"true\"></span>\n } @else {\n <div class=\"flex flex-col items-center gap-0.5 shrink-0\">\n @if (isRecordActive_$()) {\n <div class=\"relative w-2 h-6 rounded-sm bg-neutral-800 overflow-hidden\"\n aria-hidden=\"true\">\n <div class=\"absolute inset-x-0 bottom-0 bg-neonCyan transition-[height] duration-75\"\n [style.height.%]=\"volumePercent_$()\"></div>\n <div class=\"absolute inset-x-0 h-0.5 bg-neonAmber rounded-sm z-10\"\n style=\"bottom: 5%;\"></div>\n </div>\n }\n <svg class=\"w-5 h-5 shrink-0 text-neonCyan\"\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 2a3 3 0 0 1 3 3v7a3 3 0 0 1-6 0V5a3 3 0 0 1 3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\" />\n </svg>\n </div>\n }\n </button>\n <button type=\"button\"\n (click)=\"toggleSettings(); $event.stopPropagation()\"\n class=\"absolute right-full mr-4 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center\n bg-neutral-900 border-2 border-neonDefault text-neonCyan\n hover:border-neonCyan hover:shadow-neon-glow-cyan transition-all duration-200\n focus:outline-none focus:ring-2 focus:ring-neonCyan focus:ring-offset-2 focus:ring-offset-neutral-900\"\n aria-label=\"Beállítások\"\n title=\"Beállítások\">\n <svg class=\"w-2.5 h-2.5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n </button>\n <button type=\"button\"\n (click)=\"toggleInfo(); $event.stopPropagation()\"\n class=\"absolute left-full ml-4 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center\n bg-neutral-900 border-2 transition-all duration-200\n focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [class.border-neonDefault]=\"!lastQaTextWasModified_$()\"\n [class.text-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.hover:border-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.hover:shadow-neon-glow-cyan]=\"!lastQaTextWasModified_$()\"\n [class.focus:ring-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.border-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.text-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.shadow-neon-glow-orange]=\"lastQaTextWasModified_$()\"\n [class.hover:border-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.hover:shadow-neon-glow-orange]=\"lastQaTextWasModified_$()\"\n [class.focus:ring-neonAmber]=\"lastQaTextWasModified_$()\"\n [attr.aria-label]=\"lastQaTextWasModified_$()\n ? 'Utolsó QA eredmény — a szöveg módosult'\n : 'Utolsó QA eredmény'\"\n [attr.title]=\"lastQaTextWasModified_$()\n ? 'Utolsó QA eredmény — a szöveg módosult (részletek)'\n : 'Utolsó QA eredmény'\">\n <svg class=\"w-2.5 h-2.5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n </button>\n </div>\n @if (mediaUnavailable_$(); as reason) {\n <!-- REQ-UI-VHTTPS-001: látható warning-blokk, ha nincs secure context / nem elérhető a mikrofon. -->\n <p class=\"text-[11px] text-amber-300 leading-tight max-w-[240px] mt-1\"\n [attr.aria-live]=\"'polite'\">\n <span aria-hidden=\"true\" class=\"mr-1\">⚠</span>{{ reason }}\n </p>\n }\n}\n\n<app-s-modal [isOpen]=\"settingsOpen_$()\"\n [title]=\"'Voice Input beállítások'\"\n [maxWidth]=\"'lg'\"\n [zIndex]=\"'40'\"\n [bodyFlexColumn]=\"true\"\n (closed)=\"settingsOpen_$.set(false)\">\n <!-- Teljes body egy scroll region: mobil-on a hosszú promptok nem lógnak ki a max-h-[90vh] panel alól. -->\n <div class=\"flex flex-col flex-1 min-h-0 w-full overflow-y-auto overflow-x-hidden overscroll-y-contain\">\n <div class=\"flex flex-col gap-2 shrink-0\">\n <label class=\"flex items-center gap-2 cursor-pointer select-none\">\n <input type=\"checkbox\" [(ngModel)]=\"settingsQaEnabled\" name=\"settingsQaEnabled\" />\n <span class=\"text-sm text-neutral-300\">STT QA</span>\n </label>\n <label class=\"flex items-center gap-2 cursor-pointer select-none\">\n <input type=\"checkbox\"\n name=\"autoSendAfterVoice\"\n [ngModel]=\"voiceInputUi_DS.autoSendAfterVoice_$()\"\n (ngModelChange)=\"handleAutoSendAfterVoiceChange($event)\" />\n <span class=\"text-sm text-neutral-300\">Send immediately after voice (Mimik-style)</span>\n </label>\n </div>\n\n @if (qaSettings_$(); as qaSettings) {\n <div class=\"mt-3 pt-3 border-t border-neonDefault flex flex-col gap-3 shrink-0\">\n <div class=\"shrink-0\">\n <p class=\"text-xs font-medium text-neutral-400 mb-1\">System prompt (LLM-nek)</p>\n <p class=\"text-xs text-neutral-300 whitespace-pre-wrap break-words\">{{ qaSettings.systemPrompt }}</p>\n </div>\n <div class=\"shrink-0\">\n <p class=\"text-xs font-medium text-neutral-400 mb-1\">\n User prompt sablon (ide fűződik be a felvétel adata)\n </p>\n <p class=\"text-xs text-neutral-300 whitespace-pre-wrap break-words font-mono\">\n {{ qaSettings.userPromptTemplate }}\n </p>\n <p class=\"text-[10px] text-neonAmber mt-1\">\n Placeholderek: {{ '{{TRANSCRIPT}}' }} = nyers szöveg, {{ '{{NOTE_CONTEXT}}' }} = jegyzet,\n {{ '{{CONFUSION_MAP}}' }} = az alábbi elírás lista JSON-ban.\n </p>\n </div>\n <div class=\"shrink-0\">\n <p class=\"text-xs font-medium text-neutral-400 mb-1\">STT QA provider és modell</p>\n @if (qaProviderName.trim()) {\n <p class=\"text-[10px] text-neutral-500 mb-1\">\n Override: {{ qaProviderDisplayLabel_$() }} / {{ qaModelName || '—' }}\n (globál: {{ defaultLlmProviderDisplayLabel_$() || '—' }} / {{ defaultLlmModel_$() || '—' }}).\n </p>\n } @else {\n <p class=\"text-[10px] text-neutral-500 mb-1\">\n Nincs beállítva – használt: {{ defaultLlmProviderDisplayLabel_$() || '—' }} /\n {{ defaultLlmModel_$() || '—' }} (globál).\n </p>\n }\n <div class=\"flex flex-wrap gap-2 items-center\">\n <select [(ngModel)]=\"qaProviderName\"\n (ngModelChange)=\"onQaProviderChange()\"\n name=\"qaProviderName\"\n class=\"px-2 py-1 text-xs bg-neutral-800 border border-neonDefault rounded text-neutral-200 min-w-[120px]\">\n <option value=\"\">— default —</option>\n @for (opt of llmProviderSelectOptions_$(); track opt.value) {\n <option [value]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n @if (qaShowModelSelect_$()) {\n <select [(ngModel)]=\"qaModelName\"\n name=\"qaModelName\"\n class=\"px-2 py-1 text-xs bg-neutral-800 border border-neonDefault rounded text-neutral-200 min-w-[140px]\">\n <option value=\"\">— default —</option>\n @for (m of qaModelsForProvider_$(); track m) {\n <option [value]=\"m\">{{ m }}</option>\n }\n </select>\n } @else {\n <input type=\"text\"\n [(ngModel)]=\"qaModelName\"\n name=\"qaModelNameText\"\n placeholder=\"Modell id (lista nem elérhető ehhez a providerhez)\"\n class=\"px-2 py-1 text-xs bg-neutral-800 border border-neonDefault rounded text-neutral-200 min-w-[140px] font-mono\" />\n }\n </div>\n @if (qaModelsListFetchError_$().trim()) {\n <p class=\"text-[10px] text-amber-300/90 mt-1\">{{ qaModelsListFetchError_$() }}</p>\n }\n </div>\n <div class=\"flex flex-col shrink-0\">\n <p class=\"text-xs font-medium text-neutral-400 mb-1 shrink-0\">\n Tipikus elírások / tipók (confusion map) – ezekre javít a QA\n </p>\n <div class=\"space-y-1.5 rounded border border-neonDefault/50 bg-neutral-800/20 p-2\">\n @for (entry of confusionMapList_$(); track $index; let i = $index) {\n <div class=\"flex items-center gap-2\">\n <input type=\"text\"\n [value]=\"entry.from\"\n (input)=\"updateConfusionFrom(i, $any($event.target).value)\"\n placeholder=\"Elírás / félrehallás\"\n class=\"flex-1 min-w-0 px-2 py-1 text-xs bg-neutral-800 border border-neonDefault rounded\n text-neutral-200 placeholder-neutral-500\" />\n <span class=\"text-neutral-500 shrink-0\">→</span>\n <input type=\"text\"\n [value]=\"entry.to\"\n (input)=\"updateConfusionTo(i, $any($event.target).value)\"\n placeholder=\"Helyes forma\"\n class=\"flex-1 min-w-0 px-2 py-1 text-xs bg-neutral-800 border border-neonDefault rounded\n text-neutral-200 placeholder-neutral-500\" />\n <button type=\"button\"\n (click)=\"removeConfusionEntry(i)\"\n class=\"shrink-0 p-1 text-neutral-500 hover:text-neonRed transition-colors\"\n aria-label=\"Sor törlése\"\n title=\"Sor törlése\">\n <span class=\"sr-only\">Törlés</span>\n <svg class=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n }\n </div>\n <div class=\"flex flex-wrap gap-2 items-center shrink-0 mt-2\">\n <button type=\"button\"\n (click)=\"addConfusionEntry()\"\n class=\"px-2 py-1 text-xs border border-neonDefault rounded text-neutral-400\n hover:border-neonCyan hover:text-neonCyan transition-colors\">\n + Sor hozzáadása\n </button>\n <button type=\"button\"\n (click)=\"saveQaSettings()\"\n [disabled]=\"qaSettingsSaving_$()\"\n class=\"px-2 py-1 text-xs border border-neonCyan rounded text-neonCyan\n hover:shadow-neon-glow-cyan disabled:opacity-50 transition-colors\">\n {{ qaSettingsSaving_$() ? 'Mentés…' : 'QA beállítások mentése' }}\n </button>\n </div>\n </div>\n </div>\n } @else if (qaSettingsLoading_$()) {\n <p class=\"mt-3 pt-3 border-t border-neonDefault text-xs text-neutral-400\">QA beállítások betöltése…</p>\n } @else {\n <p class=\"mt-3 pt-3 border-t border-neonDefault text-xs text-neutral-500\">\n A QA beállítások betöltése sikertelen.\n </p>\n <button type=\"button\"\n (click)=\"loadQaSettings()\"\n class=\"mt-1.5 px-2 py-1 text-xs border border-neonDefault rounded text-neutral-400\n hover:border-neonCyan hover:text-neonCyan transition-colors\">\n Újra betöltés\n </button>\n }\n </div>\n <div modal-footer class=\"shrink-0 px-4 py-3 border-t border-neonDefault\">\n <button type=\"button\"\n class=\"w-full px-3 py-1.5 text-sm border border-neonCyan rounded text-neutral-300\n hover:shadow-neon-glow-cyan transition-colors\"\n (click)=\"settingsOpen_$.set(false)\">\n Bezárás\n </button>\n </div>\n</app-s-modal>\n\n<app-s-modal [isOpen]=\"infoOpen_$()\"\n [title]=\"'Utolsó QA eredmény'\"\n [maxWidth]=\"'md'\"\n [zIndex]=\"'40'\"\n (closed)=\"infoOpen_$.set(false)\">\n @if (lastQaTransformation_$(); as qa) {\n <div class=\"space-y-2 text-sm\">\n @if (lastQaWordDiffSegments_$().length > 0) {\n <div class=\"rounded-md border border-neonAmber/45 bg-neutral-950/95 p-2.5 mb-1\">\n <p class=\"text-[10px] font-semibold uppercase tracking-wide text-neonAmber/90 mb-1.5\">\n Változások (kiemelve)\n </p>\n <p class=\"text-xs leading-relaxed whitespace-pre-wrap break-words\">\n @for (seg of lastQaWordDiffSegments_$(); track seg.id) {\n @if (seg.kind === SttQaDiffKind.equal) {\n <span class=\"text-neutral-300\">{{ seg.text }}</span>\n } @else if (seg.kind === SttQaDiffKind.removed) {\n <span class=\"mx-0.5 inline rounded px-0.5 text-red-300/95 line-through decoration-red-400/85\n bg-red-950/50 border border-red-900/45\">{{ seg.text }}</span>\n } @else {\n <span class=\"mx-0.5 inline rounded px-0.5 text-neonAmber bg-amber-950/55 border border-neonAmber/50\n shadow-[0_0_10px_rgb(251_191_36/0.28)]\">{{ seg.text }}</span>\n }\n }\n </p>\n <p class=\"text-[10px] text-neutral-500 mt-1.5 leading-snug\">\n Áthúzva: nyers STT; kiemelve: javított szöveg. Alább a teljes két változat.\n </p>\n </div>\n }\n <p class=\"font-medium text-neonAmber\">Volt módosítás: igen.</p>\n <p class=\"text-neutral-400 text-xs\">Eredeti (nyers STT):</p>\n <p class=\"text-neutral-200 break-words\">{{ qa.original }}</p>\n <p class=\"text-neutral-400 text-xs mt-2\">Javított:</p>\n <p class=\"text-neutral-200 break-words\">{{ qa.corrected }}</p>\n @if (qa.explanation) {\n <p class=\"text-neutral-400 text-xs mt-2\">Magyarázat:</p>\n <p class=\"text-neutral-300 break-words\">{{ qa.explanation }}</p>\n }\n </div>\n } @else {\n <p class=\"text-xs text-neutral-500\">\n Még nem volt STT QA javítás.\n </p>\n }\n <div modal-footer class=\"shrink-0 px-4 py-3 border-t border-neonDefault\">\n <button type=\"button\"\n class=\"w-full px-3 py-1.5 text-sm border border-neonCyan rounded text-neutral-300\n hover:shadow-neon-glow-cyan transition-colors\"\n (click)=\"infoOpen_$.set(false)\">\n Bezárás\n </button>\n </div>\n</app-s-modal>\n"],
5
+ "mappings": "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",
6
+ "names": ["CCAP_VOICE_INPUT_AUTO_SEND_AFTER_VOICE_KEY", "VNP_InputUi_DataService", "autoSendAfterVoice_$", "signal", "readAutoSendAfterVoiceFromStorage", "setAutoSendAfterVoice", "value", "set", "Shr_LocalStoragePersistence_Util", "writeString", "String", "readString", "factory", "\u0275fac", "providedIn", "CCAP_SttQaWordDiffSegmentKind_Type", "CCAP_SttQaTextDiff_Util", "tokenize", "input", "trimmed", "length", "parts", "split", "out", "i", "p", "push", "mergeAndAssignIds", "raw", "merged", "cur", "last", "undefined", "kind", "text", "withIds", "k", "m", "id", "buildWordDiff", "oldText", "newText", "a", "b", "n", "dp", "row", "j", "up", "left", "rawBackwards", "CCAP_SttQaWordDiffSegmentKind_Type", "equal", "added", "removed", "rawForward", "\u0275\u0275element", "\u0275\u0275elementStart", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275styleProp", "ctx_r1", "volumePercent_$", "\u0275\u0275template", "CCAP_VoiceRecordButton_Component_Conditional_0_Conditional_13_Conditional_1_Template", "\u0275\u0275conditional", "isRecordActive_$", "\u0275\u0275text", "\u0275\u0275textInterpolate1", "ctx", "\u0275\u0275listener", "$event", "i0", "\u0275\u0275restoreView", "_r1", "\u0275\u0275nextContext", "toggleSettings", "\u0275\u0275resetView", "stopPropagation", "toggleInfo", "toggleRecord", "CCAP_VoiceRecordButton_Component_Conditional_0_Conditional_12_Template", "CCAP_VoiceRecordButton_Component_Conditional_0_Conditional_13_Template", "CCAP_VoiceRecordButton_Component_Conditional_0_Conditional_14_Template", "\u0275\u0275classProp", "lastQaTextWasModified_$", "busy_$", "isRecording_$", "\u0275\u0275property", "mediaUnavailable_$", "tmp_21_0", "CCAP_VoiceRecordButton_Component_Conditional_1_Conditional_3_Conditional_1_Template", "_r3", "CCAP_VoiceRecordButton_Component_Conditional_1_Conditional_2_Template", "CCAP_VoiceRecordButton_Component_Conditional_1_Conditional_3_Template", "CCAP_VoiceRecordButton_Component_Conditional_1_Conditional_13_Template", "\u0275\u0275textInterpolate4", "qaProviderDisplayLabel_$", "qaModelName", "defaultLlmProviderDisplayLabel_$", "defaultLlmModel_$", "\u0275\u0275textInterpolate2", "opt_r5", "value", "\u0275\u0275textInterpolate", "label", "m_r7", "\u0275\u0275twoWayListener", "_r6", "\u0275\u0275twoWayBindingSet", "\u0275\u0275repeaterCreate", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_24_For_4_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275twoWayProperty", "\u0275\u0275repeater", "qaModelsForProvider_$", "_r8", "qaModelsListFetchError_$", "\u0275$index_195_r10", "_r9", "$index", "updateConfusionFrom", "target", "updateConfusionTo", "removeConfusionEntry", "entry_r11", "from", "to", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_16_Template", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_17_Template", "_r4", "qaProviderName", "onQaProviderChange", "CCAP_VoiceRecordButton_Component_Conditional_13_For_23_Template", "_forTrack0", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_24_Template", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_25_Template", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_26_Template", "CCAP_VoiceRecordButton_Component_Conditional_13_For_32_Template", "\u0275\u0275repeaterTrackByIndex", "addConfusionEntry", "saveQaSettings", "qaSettings_r12", "systemPrompt", "userPromptTemplate", "\u0275\u0275textInterpolate3", "trim", "llmProviderSelectOptions_$", "qaShowModelSelect_$", "confusionMapList_$", "qaSettingsSaving_$", "_r13", "loadQaSettings", "seg_r14", "text", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_1_For_5_Conditional_0_Template", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_1_For_5_Conditional_1_Template", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_1_For_5_Conditional_2_Template", "kind", "SttQaDiffKind", "equal", "removed", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_1_For_5_Template", "_forTrack1", "lastQaWordDiffSegments_$", "qa_r15", "explanation", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_1_Template", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_12_Template", "length", "original", "corrected", "CCAP_VoiceRecordButton_Component", "globalError_CS", "inject", "CCAP_GlobalError_ControlService", "soundRecorder_CS", "CCAP_SoundRecorder_ControlService", "voiceSttQaUi_DS", "VNP_SttQaUi_DataService", "voiceInputUi_DS", "VNP_InputUi_DataService", "qaEnabled", "input", "undefined", "compactLayout", "transcriptReady", "EventEmitter", "transcriptSegmentReady", "signal", "pendingTranscriptionCount", "emitChain", "Promise", "resolve", "volume_$", "isQaEnabledFromSettings_$", "settingsOpen_$", "qaSettings_$", "qaSettingsLoading_$", "settingsQaEnabled", "lastQaTransformation_$", "infoOpen_$", "defaultLlmProvider_$", "computed", "Math", "min", "t", "CCAP_SttQaTextDiff_Util", "buildWordDiff", "CCAP_SttQaWordDiffSegmentKind_Type", "opts", "id", "find", "o", "ngOnInit", "availability", "CCAP_MediaRecording_Util", "getMediaRecordingAvailability", "supported", "reason", "set", "getMediaUnavailableMessage", "reportErrorOnly", "message", "getMediaUnavailableReportMessage", "source", "setOnChunk", "blob", "meta", "onChunk", "setOnVolume", "setOnError", "err", "showError", "ngOnDestroy", "stopListening", "__async", "state_$", "CCAP_SoundRecorderState_State", "stopped", "loadQaEnabledOnce", "startListening", "fetchQaEnabledFlag", "handleAutoSendAfterVoiceChange", "setAutoSendAfterVoice", "update", "v", "state", "loadSttQaSettingsPanelState", "res", "qa", "confusionMap", "providerName", "modelName", "llmProviderSelectOptions", "defaultLlmProvider", "defaultLlmModel", "qaModelsForProvider", "qaModelsListFetchError", "loadQaModelsForProvider", "providerId", "out", "fetchLlmModelsListForSttQa", "models", "errorMessage", "list", "index", "filter", "_", "i", "next", "normalizeConfusionMapEntries", "saveVoiceNotesQaSettings", "current", "onEscape", "effectiveQaEnabled_$", "prevEmitQueue", "releaseEmitSlot", "transcribeVoiceChunk", "mimeType", "filename", "noteContext", "skipClassification", "overlapPrevMs", "ok", "emit", "isFinal", "success", "qaFailed", "qfm", "qaFailureMessage", "Error", "correctedTranscript", "transcript", "usedQa", "qaExplanation", "qaInput", "recordStateLabel_$", "s", "standby", "running", "recordButtonAriaLabel_$", "unavail", "recordButtonTitle_$", "selectors", "hostBindings", "rf", "\u0275\u0275resolveDocument", "CCAP_VoiceRecordButton_Component_Conditional_0_Template", "CCAP_VoiceRecordButton_Component_Conditional_1_Template", "CCAP_VoiceRecordButton_Component_Conditional_13_Template", "CCAP_VoiceRecordButton_Component_Conditional_14_Template", "CCAP_VoiceRecordButton_Component_Conditional_15_Template", "CCAP_VoiceRecordButton_Component_Conditional_20_Template", "CCAP_VoiceRecordButton_Component_Conditional_21_Template", "autoSendAfterVoice_$", "tmp_8_0", "tmp_13_0", "FormsModule", "NgSelectOption", "\u0275NgSelectMultipleOption", "DefaultValueAccessor", "CheckboxControlValueAccessor", "SelectControlValueAccessor", "NgControlStatus", "NgModel", "S_Modal_Component", "encapsulation"]
7
+ }