@futdevpro/ccap 1.1.3223 → 1.1.3441

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 (437) 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-V7DKSWVC.js → agent-instances.module-4ADMPXCV.js} +2 -2
  53. package/client-dist/ca.module-RVGC3WQC.js +5 -0
  54. package/client-dist/{ca.module-MVE3OLDD.js.map → ca.module-RVGC3WQC.js.map} +3 -3
  55. package/client-dist/cc-usage-dashboard.component-OQS2BC4L.js +2 -0
  56. package/client-dist/cc-usage-dashboard.component-OQS2BC4L.js.map +7 -0
  57. package/client-dist/cc.module-SPB35JNX.js +4 -0
  58. package/client-dist/cc.module-SPB35JNX.js.map +7 -0
  59. package/client-dist/{chunk-7HSUCNW5.js → chunk-2ATSF4KC.js} +7 -3
  60. package/client-dist/{chunk-7HSUCNW5.js.map → chunk-2ATSF4KC.js.map} +2 -2
  61. package/client-dist/{chunk-CRYF37M7.js → chunk-3HJWN4W6.js} +2 -2
  62. package/client-dist/{chunk-D2UUXA6L.js → chunk-4EV32FFZ.js} +2 -2
  63. package/client-dist/{chunk-AX7QIINI.js → chunk-4H3E32UH.js} +2 -2
  64. package/client-dist/{chunk-KYVIZZWW.js → chunk-4LCJ4GNK.js} +19 -19
  65. package/client-dist/chunk-4LCJ4GNK.js.map +7 -0
  66. package/client-dist/{chunk-OUBNMT7L.js → chunk-5NW5UGVZ.js} +2 -2
  67. package/client-dist/{chunk-HLNT234H.js → chunk-AM5URSKV.js} +2 -2
  68. package/client-dist/{chunk-SYCUR4MY.js → chunk-AMROWQBM.js} +2 -2
  69. package/client-dist/{chunk-PTCJL62W.js → chunk-AR6EOT63.js} +2 -2
  70. package/client-dist/{chunk-OLK5MJ4J.js → chunk-B25EGDHU.js} +2 -2
  71. package/client-dist/{chunk-4SFV57IQ.js → chunk-BQTJHETS.js} +2 -2
  72. package/client-dist/{chunk-XTUQJ3W6.js → chunk-COOWEMEW.js} +2 -2
  73. package/client-dist/{chunk-TOFOK5W7.js → chunk-E3JXFFHE.js} +2 -2
  74. package/client-dist/{chunk-OQW6FXRJ.js → chunk-ESIGVRCK.js} +2 -2
  75. package/client-dist/{chunk-JMZKJLUE.js → chunk-EVMDNGBK.js} +2 -2
  76. package/client-dist/{chunk-6GSTJE3R.js → chunk-F6VMAVI5.js} +2 -2
  77. package/client-dist/chunk-FRVRMJQF.js +2 -0
  78. package/client-dist/chunk-FRVRMJQF.js.map +7 -0
  79. package/client-dist/chunk-G5SK3OBM.js +2 -0
  80. package/client-dist/chunk-G5SK3OBM.js.map +7 -0
  81. package/client-dist/{chunk-VO5ZLOZM.js → chunk-GBOES7QW.js} +2 -2
  82. package/client-dist/{chunk-2OAF6FCL.js → chunk-GTERKRTR.js} +2 -2
  83. package/client-dist/{chunk-7X22BWF7.js → chunk-HD4CODAD.js} +2 -2
  84. package/client-dist/{chunk-2EMFCVYO.js → chunk-I3FSMGMK.js} +2 -2
  85. package/client-dist/{chunk-VGTXKD6D.js → chunk-IFYHOOVA.js} +2 -2
  86. package/client-dist/{chunk-IINV7GMO.js → chunk-IUAZJ3PT.js} +2 -2
  87. package/client-dist/chunk-IUAZJ3PT.js.map +7 -0
  88. package/client-dist/{chunk-PFBJ7ZHP.js → chunk-IVLMVAVJ.js} +2 -2
  89. package/client-dist/chunk-KBMXCICX.js +2 -0
  90. package/client-dist/chunk-KBMXCICX.js.map +7 -0
  91. package/client-dist/{chunk-3D32XY5M.js → chunk-KIKSSJKL.js} +2 -2
  92. package/client-dist/{chunk-U2EBQMSE.js → chunk-LPNQ5PRN.js} +2 -2
  93. package/client-dist/{chunk-4JKJRGJX.js → chunk-MO37SUK2.js} +2 -2
  94. package/client-dist/{chunk-BC7H7K5F.js → chunk-MYVEHPA7.js} +2 -2
  95. package/client-dist/{chunk-JEHOIN7Y.js → chunk-N55GOFVU.js} +2 -2
  96. package/client-dist/{chunk-R5WCLLO5.js → chunk-NNUHTCXG.js} +2 -2
  97. package/client-dist/{chunk-TP2634XD.js → chunk-OKTAADTQ.js} +2 -2
  98. package/client-dist/{chunk-DURLBTAJ.js → chunk-ONS7XQYD.js} +2 -2
  99. package/client-dist/chunk-OYB7GU43.js +2 -0
  100. package/client-dist/chunk-OYB7GU43.js.map +7 -0
  101. package/client-dist/{chunk-7SAFEFWU.js → chunk-PVSQ5ZEZ.js} +14 -14
  102. package/client-dist/{chunk-7SAFEFWU.js.map → chunk-PVSQ5ZEZ.js.map} +3 -3
  103. package/client-dist/{chunk-PG7CJVEP.js → chunk-PZN2OI7U.js} +2 -2
  104. package/client-dist/{chunk-C4JDDOQR.js → chunk-QUD3BEHN.js} +2 -2
  105. package/client-dist/{chunk-DJVWZQNB.js → chunk-QUEYZI42.js} +2 -2
  106. package/client-dist/chunk-R2IBKJ4K.js +2 -0
  107. package/client-dist/chunk-R2IBKJ4K.js.map +7 -0
  108. package/client-dist/{chunk-3TMVRWAB.js → chunk-RAHCHCWR.js} +2 -2
  109. package/client-dist/{chunk-SQWHJTFE.js → chunk-RCCUSGIN.js} +2 -2
  110. package/client-dist/{chunk-GADEZIXI.js → chunk-RL5LPTPO.js} +2 -2
  111. package/client-dist/{chunk-5C3KCWYF.js → chunk-SDVXPGB7.js} +2 -2
  112. package/client-dist/{chunk-CLQC45GB.js → chunk-TNLHQRL7.js} +2 -2
  113. package/client-dist/{chunk-JZHYGU3K.js → chunk-TWK7BOB7.js} +2 -2
  114. package/client-dist/{chunk-ILG5WENK.js → chunk-U62YECNK.js} +2 -2
  115. package/client-dist/{chunk-RSPVPEQ4.js → chunk-UOC6UYZT.js} +2 -2
  116. package/client-dist/{chunk-AI7WKHRQ.js → chunk-VDQROW6J.js} +2 -2
  117. package/client-dist/{chunk-3PA6BJES.js → chunk-VMXIXZV2.js} +2 -2
  118. package/client-dist/chunk-VQ4GBHH7.js +2 -0
  119. package/client-dist/chunk-VQ4GBHH7.js.map +7 -0
  120. package/client-dist/{chunk-CFHQS3UB.js → chunk-WRI37SX4.js} +2 -2
  121. package/client-dist/{chunk-MS5OG7JD.js → chunk-XLSL262Q.js} +2 -2
  122. package/client-dist/{chunk-SLSTIBOT.js → chunk-Y6V4NGLU.js} +2 -2
  123. package/client-dist/{chunk-SLSTIBOT.js.map → chunk-Y6V4NGLU.js.map} +1 -1
  124. package/client-dist/{chunk-3PLWSRB4.js → chunk-YN4H6MW2.js} +2 -2
  125. package/client-dist/{chunk-OEEQNIJG.js → chunk-Z5FUR5ZW.js} +2 -2
  126. package/client-dist/{chunk-MY75XBDH.js → chunk-ZCHMBEHT.js} +2 -2
  127. package/client-dist/{chunk-LIQPVSH3.js → chunk-ZPJ6KYMA.js} +2 -2
  128. package/client-dist/consultant.module-UWXLFLDS.js +3 -0
  129. package/client-dist/{consultant.module-WUUVSVHL.js.map → consultant.module-UWXLFLDS.js.map} +3 -3
  130. package/client-dist/{crd.module-IRGVOYD5.js → crd.module-2I2BDC3A.js} +2 -2
  131. package/client-dist/{dashboard.module-NPPSZHO6.js → dashboard.module-X2A6LOTA.js} +2 -2
  132. package/client-dist/{do.module-GKQTJOXR.js → do.module-CJWEKZ4L.js} +2 -2
  133. package/client-dist/{document-library.module-JK3K7QNJ.js → document-library.module-WJSFZPA7.js} +2 -2
  134. package/client-dist/{embedding-eval.module-LVESAMPN.js → embedding-eval.module-FOALIAQW.js} +2 -2
  135. package/client-dist/{embedding-registry.module-3ECACZZ3.js → embedding-registry.module-SS646R4H.js} +2 -2
  136. package/client-dist/err.module-SR4ZAOQH.js +6 -0
  137. package/client-dist/err.module-SR4ZAOQH.js.map +7 -0
  138. package/client-dist/{feedback.module-AHG7462C.js → feedback.module-T3MZQKXV.js} +2 -2
  139. package/client-dist/{host-runtime-mcp.module-XFUI7B65.js → host-runtime-mcp.module-FBZZGQGD.js} +2 -2
  140. package/client-dist/index.html +2 -2
  141. package/client-dist/{live-dev-pipeline.module-OMK67DGM.js → live-dev-pipeline.module-OKQYFSJL.js} +2 -2
  142. package/client-dist/{logs.module-FWACECVV.js → logs.module-SHHOD5XW.js} +2 -2
  143. package/client-dist/{main-H4AYPQ2E.js → main-L3WW2VTB.js} +4 -4
  144. package/client-dist/{main-H4AYPQ2E.js.map → main-L3WW2VTB.js.map} +3 -3
  145. package/client-dist/{master-control-remote-poc.module-GQ6RMPRB.js → master-control-remote-poc.module-ITXHYU5K.js} +2 -2
  146. package/client-dist/{mobile-app.module-YSARX6QC.js → mobile-app.module-Q3W3PU4O.js} +2 -2
  147. package/client-dist/{model-registry.module-SJOUSDXZ.js → model-registry.module-DGN55LTQ.js} +2 -2
  148. package/client-dist/oc.module-DYSATWML.js +3 -0
  149. package/client-dist/{oc.module-CDGBJ6I4.js.map → oc.module-DYSATWML.js.map} +3 -3
  150. package/client-dist/orc.module-NQO6OLPK.js +2 -0
  151. package/client-dist/orc.module-NQO6OLPK.js.map +7 -0
  152. package/client-dist/{project-management.module-LWZLB6VU.js → project-management.module-T7NBKKSR.js} +2 -2
  153. package/client-dist/project-source-routed.module-YO54LEGN.js +2 -0
  154. package/client-dist/{scheduler.module-VH647PWD.js → scheduler.module-4CMBOTGZ.js} +2 -2
  155. package/client-dist/session.module-V4SRPQRZ.js +12 -0
  156. package/client-dist/session.module-V4SRPQRZ.js.map +7 -0
  157. package/client-dist/{set.module-XHJR4XUD.js → set.module-32SVEWTG.js} +5 -5
  158. package/client-dist/{set.module-XHJR4XUD.js.map → set.module-32SVEWTG.js.map} +3 -3
  159. package/client-dist/{setup.module-RRQZ62B2.js → setup.module-5T6MCMR4.js} +2 -2
  160. package/client-dist/styles-CTUT42AQ.css +2 -0
  161. package/client-dist/styles-CTUT42AQ.css.map +7 -0
  162. package/client-dist/{terminals.module-QKIQS6FH.js → terminals.module-AQO2TVO2.js} +2 -2
  163. package/client-dist/{voice-notes-poc.module-K3FB6OIB.js → voice-notes-poc.module-EI2HY7YJ.js} +2 -2
  164. package/client-dist/{wfs.module-JVR53PGJ.js → wfs.module-AHRZE5WB.js} +2 -2
  165. package/package.json +1 -1
  166. package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.d.ts.map +1 -1
  167. package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.js +5 -0
  168. package/server/build/src/_collections/core/ccap-post-services-bootstrap.util.js.map +1 -1
  169. package/server/build/src/_modules/ccap-agent/_modules/agent-core/_modules/run/_services/control-services/run-flow.control-service.d.ts.map +1 -1
  170. package/server/build/src/_modules/ccap-agent/_modules/agent-core/_modules/run/_services/control-services/run-flow.control-service.js +8 -1
  171. package/server/build/src/_modules/ccap-agent/_modules/agent-core/_modules/run/_services/control-services/run-flow.control-service.js.map +1 -1
  172. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.d.ts +11 -0
  173. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.d.ts.map +1 -0
  174. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.js +20 -0
  175. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/error-handling-stats-range.const.js.map +1 -0
  176. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.d.ts +65 -0
  177. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.d.ts.map +1 -0
  178. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.js +222 -0
  179. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.js.map +1 -0
  180. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.d.ts +7 -0
  181. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.d.ts.map +1 -0
  182. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.js +213 -0
  183. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_collections/utils/error-handling-stats.util.spec.js.map +1 -0
  184. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.d.ts +58 -0
  185. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.d.ts.map +1 -0
  186. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.js +3 -0
  187. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_models/interfaces/error-handling-stats.interface.js.map +1 -0
  188. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_routes/error-handling.controller.d.ts.map +1 -1
  189. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_routes/error-handling.controller.js +14 -0
  190. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_routes/error-handling.controller.js.map +1 -1
  191. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.d.ts +35 -0
  192. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.d.ts.map +1 -0
  193. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.js +80 -0
  194. package/server/build/src/_modules/ccap-agent/_modules/error-handling/_services/errorhandling-stats.control-service.js.map +1 -0
  195. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.d.ts +47 -0
  196. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.d.ts.map +1 -0
  197. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.js +100 -0
  198. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.js.map +1 -0
  199. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.spec.d.ts +2 -0
  200. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.spec.d.ts.map +1 -0
  201. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.spec.js +162 -0
  202. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_collections/utils/voc-mp3-id3-strip.util.spec.js.map +1 -0
  203. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.d.ts +2 -0
  204. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.d.ts.map +1 -1
  205. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.js +16 -0
  206. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/stt/voc-transcribe.control-service.js.map +1 -1
  207. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/tts/voc-tts.control-service.d.ts.map +1 -1
  208. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/tts/voc-tts.control-service.js +22 -4
  209. package/server/build/src/_modules/ccap-agent/_modules/integrations/_modules/voice/_services/control-services/tts/voc-tts.control-service.js.map +1 -1
  210. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.d.ts +58 -0
  211. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.d.ts.map +1 -1
  212. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.js +64 -0
  213. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/consts/cc-kill-reasons.const.js.map +1 -1
  214. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-list-item-serialize.util.d.ts.map +1 -1
  215. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-list-item-serialize.util.js +3 -0
  216. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-list-item-serialize.util.js.map +1 -1
  217. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.d.ts +17 -0
  218. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.d.ts.map +1 -1
  219. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.js +65 -5
  220. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.js.map +1 -1
  221. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.spec.d.ts +9 -0
  222. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.spec.d.ts.map +1 -0
  223. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.spec.js +213 -0
  224. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/cc-stream-parser.util.spec.js.map +1 -0
  225. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.d.ts +47 -0
  226. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.d.ts.map +1 -0
  227. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.js +71 -0
  228. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-exit-diagnostics.util.js.map +1 -0
  229. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.d.ts +36 -0
  230. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.d.ts.map +1 -1
  231. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.js +93 -6
  232. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.js.map +1 -1
  233. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.spec.js +85 -21
  234. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-process-exit.util.spec.js.map +1 -1
  235. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.d.ts.map +1 -1
  236. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.js +81 -1
  237. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/lifecycle/cc-recovery.util.js.map +1 -1
  238. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.d.ts.map +1 -1
  239. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.js +14 -2
  240. package/server/build/src/_modules/external-sessions/_modules/claude-code/_collections/utils/terminal/cc-terminal-session-closed-guard.util.js.map +1 -1
  241. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/claude-code.controller.d.ts.map +1 -1
  242. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/claude-code.controller.js +19 -0
  243. package/server/build/src/_modules/external-sessions/_modules/claude-code/_routes/claude-code.controller.js.map +1 -1
  244. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.d.ts +4 -0
  245. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.d.ts.map +1 -1
  246. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.js +6 -0
  247. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/blocked-resume/cc-blocked-resume.control-service.js.map +1 -1
  248. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.d.ts +13 -0
  249. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.d.ts.map +1 -1
  250. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.js +21 -0
  251. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.control-service.js.map +1 -1
  252. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.interface.d.ts +33 -0
  253. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-adapter.interface.d.ts.map +1 -1
  254. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-event.data-service.d.ts.map +1 -1
  255. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-event.data-service.js +10 -3
  256. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-event.data-service.js.map +1 -1
  257. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.d.ts +54 -0
  258. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.d.ts.map +1 -1
  259. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.js +163 -75
  260. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-manager.control-service.js.map +1 -1
  261. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.d.ts +6 -1
  262. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.d.ts.map +1 -1
  263. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.js +32 -9
  264. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.js.map +1 -1
  265. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.spec.js +20 -2
  266. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-monitoring.control-service.spec.js.map +1 -1
  267. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.d.ts +25 -0
  268. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.d.ts.map +1 -1
  269. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.js +301 -1
  270. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/cc-route.control-service.js.map +1 -1
  271. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.d.ts +20 -3
  272. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.d.ts.map +1 -1
  273. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js +62 -7
  274. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.js.map +1 -1
  275. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.spec.js +10 -0
  276. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/status/cc-status-transition.control-service.spec.js.map +1 -1
  277. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts +11 -18
  278. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.d.ts.map +1 -1
  279. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js +40 -48
  280. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-adapter-terminal.control-service.js.map +1 -1
  281. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.d.ts +8 -0
  282. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.d.ts.map +1 -1
  283. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.js +13 -2
  284. package/server/build/src/_modules/external-sessions/_modules/claude-code/_services/core/terminal/cc-terminal-lifecycle.control-service.js.map +1 -1
  285. package/server/build/src/_modules/external-sessions/_modules/openclaw/_services/core/oc-event.data-service.d.ts.map +1 -1
  286. package/server/build/src/_modules/external-sessions/_modules/openclaw/_services/core/oc-event.data-service.js +8 -3
  287. package/server/build/src/_modules/external-sessions/_modules/openclaw/_services/core/oc-event.data-service.js.map +1 -1
  288. package/server/build/src/_modules/messaging/_services/control-services/providers/msg-client-socket-server.service.d.ts.map +1 -1
  289. package/server/build/src/_modules/messaging/_services/control-services/providers/msg-client-socket-server.service.js +12 -0
  290. package/server/build/src/_modules/messaging/_services/control-services/providers/msg-client-socket-server.service.js.map +1 -1
  291. package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.d.ts +10 -0
  292. package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.d.ts.map +1 -1
  293. package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.js +18 -0
  294. package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.js.map +1 -1
  295. package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.spec.js +32 -3
  296. package/server/build/src/_modules/notification/_collections/utils/ntf-system-event.util.spec.js.map +1 -1
  297. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.d.ts +42 -0
  298. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.d.ts.map +1 -0
  299. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.js +73 -0
  300. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.js.map +1 -0
  301. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.d.ts +10 -0
  302. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.d.ts.map +1 -0
  303. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.js +89 -0
  304. package/server/build/src/_modules/peer-instance/_collections/utils/pei-error-recording.util.spec.js.map +1 -0
  305. package/server/build/src/_modules/peer-instance/_models/interfaces/pei-bootstrap-attempt.interface.d.ts +8 -1
  306. package/server/build/src/_modules/peer-instance/_models/interfaces/pei-bootstrap-attempt.interface.d.ts.map +1 -1
  307. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.d.ts +10 -0
  308. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.d.ts.map +1 -0
  309. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.js +74 -0
  310. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap-watchdog.spec.js.map +1 -0
  311. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.d.ts +37 -0
  312. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.d.ts.map +1 -1
  313. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.js +117 -0
  314. package/server/build/src/_modules/peer-instance/_services/pei-bootstrap.control-service.js.map +1 -1
  315. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.d.ts +11 -0
  316. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.d.ts.map +1 -1
  317. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.js +11 -1
  318. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.js.map +1 -1
  319. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.spec.js +65 -0
  320. package/server/build/src/_modules/peer-instance/_services/pei-dispatch.control-service.spec.js.map +1 -1
  321. package/server/build/src/_modules/peer-instance/_services/pei-event-relay.control-service.spec.d.ts +15 -0
  322. package/server/build/src/_modules/peer-instance/_services/pei-event-relay.control-service.spec.d.ts.map +1 -0
  323. package/server/build/src/_modules/peer-instance/_services/pei-event-relay.control-service.spec.js +122 -0
  324. package/server/build/src/_modules/peer-instance/_services/pei-event-relay.control-service.spec.js.map +1 -0
  325. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.d.ts.map +1 -1
  326. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.js +24 -0
  327. package/server/build/src/_modules/peer-instance/_services/pei-heartbeat.control-service.js.map +1 -1
  328. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.d.ts +30 -0
  329. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.d.ts.map +1 -1
  330. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.js +91 -2
  331. package/server/build/src/_modules/peer-instance/_services/pei-ws-client.control-service.js.map +1 -1
  332. package/server/build/src/_modules/peer-instance/_services/pei-ws-server.control-service.d.ts.map +1 -1
  333. package/server/build/src/_modules/peer-instance/_services/pei-ws-server.control-service.js +10 -0
  334. package/server/build/src/_modules/peer-instance/_services/pei-ws-server.control-service.js.map +1 -1
  335. package/server/build/src/_modules/scheduler/_collections/utils/sch-jitter.util.spec.js +4 -2
  336. package/server/build/src/_modules/scheduler/_collections/utils/sch-jitter.util.spec.js.map +1 -1
  337. package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.d.ts +9 -0
  338. package/server/build/src/_modules/setup-config/_models/interfaces/cluster/sc-cluster-diagnostics-result.interface.d.ts.map +1 -1
  339. package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.d.ts.map +1 -1
  340. package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.js +1 -0
  341. package/server/build/src/_modules/setup-config/_services/control-services/sc-cluster.control-service.js.map +1 -1
  342. package/client-dist/ca.module-MVE3OLDD.js +0 -5
  343. package/client-dist/cc-usage-dashboard.component-F7S4MG67.js +0 -2
  344. package/client-dist/cc-usage-dashboard.component-F7S4MG67.js.map +0 -7
  345. package/client-dist/cc.module-GOXYWYW2.js +0 -4
  346. package/client-dist/cc.module-GOXYWYW2.js.map +0 -7
  347. package/client-dist/chunk-4GPIIB3D.js +0 -2
  348. package/client-dist/chunk-4GPIIB3D.js.map +0 -7
  349. package/client-dist/chunk-EGRHWZRV.js +0 -1
  350. package/client-dist/chunk-EGRHWZRV.js.map +0 -7
  351. package/client-dist/chunk-GZDOO5NB.js +0 -2
  352. package/client-dist/chunk-GZDOO5NB.js.map +0 -7
  353. package/client-dist/chunk-IINV7GMO.js.map +0 -7
  354. package/client-dist/chunk-KYVIZZWW.js.map +0 -7
  355. package/client-dist/chunk-MZLFEWAN.js +0 -2
  356. package/client-dist/chunk-MZLFEWAN.js.map +0 -7
  357. package/client-dist/chunk-QPEW5PI4.js +0 -2
  358. package/client-dist/chunk-QPEW5PI4.js.map +0 -7
  359. package/client-dist/consultant.module-WUUVSVHL.js +0 -3
  360. package/client-dist/err.module-B666YXQT.js +0 -6
  361. package/client-dist/err.module-B666YXQT.js.map +0 -7
  362. package/client-dist/oc.module-CDGBJ6I4.js +0 -3
  363. package/client-dist/orc.module-5S7GBE4E.js +0 -2
  364. package/client-dist/orc.module-5S7GBE4E.js.map +0 -7
  365. package/client-dist/project-source-routed.module-FDCQCUUB.js +0 -2
  366. package/client-dist/session.module-AKETH5O2.js +0 -12
  367. package/client-dist/session.module-AKETH5O2.js.map +0 -7
  368. package/client-dist/styles-KHQAHCL5.css +0 -2
  369. package/client-dist/styles-KHQAHCL5.css.map +0 -7
  370. /package/client-dist/{agent-instances.module-V7DKSWVC.js.map → agent-instances.module-4ADMPXCV.js.map} +0 -0
  371. /package/client-dist/{chunk-CRYF37M7.js.map → chunk-3HJWN4W6.js.map} +0 -0
  372. /package/client-dist/{chunk-D2UUXA6L.js.map → chunk-4EV32FFZ.js.map} +0 -0
  373. /package/client-dist/{chunk-AX7QIINI.js.map → chunk-4H3E32UH.js.map} +0 -0
  374. /package/client-dist/{chunk-OUBNMT7L.js.map → chunk-5NW5UGVZ.js.map} +0 -0
  375. /package/client-dist/{chunk-HLNT234H.js.map → chunk-AM5URSKV.js.map} +0 -0
  376. /package/client-dist/{chunk-SYCUR4MY.js.map → chunk-AMROWQBM.js.map} +0 -0
  377. /package/client-dist/{chunk-PTCJL62W.js.map → chunk-AR6EOT63.js.map} +0 -0
  378. /package/client-dist/{chunk-OLK5MJ4J.js.map → chunk-B25EGDHU.js.map} +0 -0
  379. /package/client-dist/{chunk-4SFV57IQ.js.map → chunk-BQTJHETS.js.map} +0 -0
  380. /package/client-dist/{chunk-XTUQJ3W6.js.map → chunk-COOWEMEW.js.map} +0 -0
  381. /package/client-dist/{chunk-TOFOK5W7.js.map → chunk-E3JXFFHE.js.map} +0 -0
  382. /package/client-dist/{chunk-OQW6FXRJ.js.map → chunk-ESIGVRCK.js.map} +0 -0
  383. /package/client-dist/{chunk-JMZKJLUE.js.map → chunk-EVMDNGBK.js.map} +0 -0
  384. /package/client-dist/{chunk-6GSTJE3R.js.map → chunk-F6VMAVI5.js.map} +0 -0
  385. /package/client-dist/{chunk-VO5ZLOZM.js.map → chunk-GBOES7QW.js.map} +0 -0
  386. /package/client-dist/{chunk-2OAF6FCL.js.map → chunk-GTERKRTR.js.map} +0 -0
  387. /package/client-dist/{chunk-7X22BWF7.js.map → chunk-HD4CODAD.js.map} +0 -0
  388. /package/client-dist/{chunk-2EMFCVYO.js.map → chunk-I3FSMGMK.js.map} +0 -0
  389. /package/client-dist/{chunk-VGTXKD6D.js.map → chunk-IFYHOOVA.js.map} +0 -0
  390. /package/client-dist/{chunk-PFBJ7ZHP.js.map → chunk-IVLMVAVJ.js.map} +0 -0
  391. /package/client-dist/{chunk-3D32XY5M.js.map → chunk-KIKSSJKL.js.map} +0 -0
  392. /package/client-dist/{chunk-U2EBQMSE.js.map → chunk-LPNQ5PRN.js.map} +0 -0
  393. /package/client-dist/{chunk-4JKJRGJX.js.map → chunk-MO37SUK2.js.map} +0 -0
  394. /package/client-dist/{chunk-BC7H7K5F.js.map → chunk-MYVEHPA7.js.map} +0 -0
  395. /package/client-dist/{chunk-JEHOIN7Y.js.map → chunk-N55GOFVU.js.map} +0 -0
  396. /package/client-dist/{chunk-R5WCLLO5.js.map → chunk-NNUHTCXG.js.map} +0 -0
  397. /package/client-dist/{chunk-TP2634XD.js.map → chunk-OKTAADTQ.js.map} +0 -0
  398. /package/client-dist/{chunk-DURLBTAJ.js.map → chunk-ONS7XQYD.js.map} +0 -0
  399. /package/client-dist/{chunk-PG7CJVEP.js.map → chunk-PZN2OI7U.js.map} +0 -0
  400. /package/client-dist/{chunk-C4JDDOQR.js.map → chunk-QUD3BEHN.js.map} +0 -0
  401. /package/client-dist/{chunk-DJVWZQNB.js.map → chunk-QUEYZI42.js.map} +0 -0
  402. /package/client-dist/{chunk-3TMVRWAB.js.map → chunk-RAHCHCWR.js.map} +0 -0
  403. /package/client-dist/{chunk-SQWHJTFE.js.map → chunk-RCCUSGIN.js.map} +0 -0
  404. /package/client-dist/{chunk-GADEZIXI.js.map → chunk-RL5LPTPO.js.map} +0 -0
  405. /package/client-dist/{chunk-5C3KCWYF.js.map → chunk-SDVXPGB7.js.map} +0 -0
  406. /package/client-dist/{chunk-CLQC45GB.js.map → chunk-TNLHQRL7.js.map} +0 -0
  407. /package/client-dist/{chunk-JZHYGU3K.js.map → chunk-TWK7BOB7.js.map} +0 -0
  408. /package/client-dist/{chunk-ILG5WENK.js.map → chunk-U62YECNK.js.map} +0 -0
  409. /package/client-dist/{chunk-RSPVPEQ4.js.map → chunk-UOC6UYZT.js.map} +0 -0
  410. /package/client-dist/{chunk-AI7WKHRQ.js.map → chunk-VDQROW6J.js.map} +0 -0
  411. /package/client-dist/{chunk-3PA6BJES.js.map → chunk-VMXIXZV2.js.map} +0 -0
  412. /package/client-dist/{chunk-CFHQS3UB.js.map → chunk-WRI37SX4.js.map} +0 -0
  413. /package/client-dist/{chunk-MS5OG7JD.js.map → chunk-XLSL262Q.js.map} +0 -0
  414. /package/client-dist/{chunk-3PLWSRB4.js.map → chunk-YN4H6MW2.js.map} +0 -0
  415. /package/client-dist/{chunk-OEEQNIJG.js.map → chunk-Z5FUR5ZW.js.map} +0 -0
  416. /package/client-dist/{chunk-MY75XBDH.js.map → chunk-ZCHMBEHT.js.map} +0 -0
  417. /package/client-dist/{chunk-LIQPVSH3.js.map → chunk-ZPJ6KYMA.js.map} +0 -0
  418. /package/client-dist/{crd.module-IRGVOYD5.js.map → crd.module-2I2BDC3A.js.map} +0 -0
  419. /package/client-dist/{dashboard.module-NPPSZHO6.js.map → dashboard.module-X2A6LOTA.js.map} +0 -0
  420. /package/client-dist/{do.module-GKQTJOXR.js.map → do.module-CJWEKZ4L.js.map} +0 -0
  421. /package/client-dist/{document-library.module-JK3K7QNJ.js.map → document-library.module-WJSFZPA7.js.map} +0 -0
  422. /package/client-dist/{embedding-eval.module-LVESAMPN.js.map → embedding-eval.module-FOALIAQW.js.map} +0 -0
  423. /package/client-dist/{embedding-registry.module-3ECACZZ3.js.map → embedding-registry.module-SS646R4H.js.map} +0 -0
  424. /package/client-dist/{feedback.module-AHG7462C.js.map → feedback.module-T3MZQKXV.js.map} +0 -0
  425. /package/client-dist/{host-runtime-mcp.module-XFUI7B65.js.map → host-runtime-mcp.module-FBZZGQGD.js.map} +0 -0
  426. /package/client-dist/{live-dev-pipeline.module-OMK67DGM.js.map → live-dev-pipeline.module-OKQYFSJL.js.map} +0 -0
  427. /package/client-dist/{logs.module-FWACECVV.js.map → logs.module-SHHOD5XW.js.map} +0 -0
  428. /package/client-dist/{master-control-remote-poc.module-GQ6RMPRB.js.map → master-control-remote-poc.module-ITXHYU5K.js.map} +0 -0
  429. /package/client-dist/{mobile-app.module-YSARX6QC.js.map → mobile-app.module-Q3W3PU4O.js.map} +0 -0
  430. /package/client-dist/{model-registry.module-SJOUSDXZ.js.map → model-registry.module-DGN55LTQ.js.map} +0 -0
  431. /package/client-dist/{project-management.module-LWZLB6VU.js.map → project-management.module-T7NBKKSR.js.map} +0 -0
  432. /package/client-dist/{project-source-routed.module-FDCQCUUB.js.map → project-source-routed.module-YO54LEGN.js.map} +0 -0
  433. /package/client-dist/{scheduler.module-VH647PWD.js.map → scheduler.module-4CMBOTGZ.js.map} +0 -0
  434. /package/client-dist/{setup.module-RRQZ62B2.js.map → setup.module-5T6MCMR4.js.map} +0 -0
  435. /package/client-dist/{terminals.module-QKIQS6FH.js.map → terminals.module-AQO2TVO2.js.map} +0 -0
  436. /package/client-dist/{voice-notes-poc.module-K3FB6OIB.js.map → voice-notes-poc.module-EI2HY7YJ.js.map} +0 -0
  437. /package/client-dist/{wfs.module-JVR53PGJ.js.map → wfs.module-AHRZE5WB.js.map} +0 -0
@@ -1,2 +0,0 @@
1
- import{a as k}from"./chunk-R5WCLLO5.js";import{a as C}from"./chunk-V3VQWJQL.js";import{I as U,L as P,t as A}from"./chunk-SLSTIBOT.js";import{C as h,k as m,p as a,xb as M,y as b}from"./chunk-TBMJSIBB.js";var y=class{static readLlmCloudBucketsFromSectionResponse(n){return{anthropicLlm:v(n.anthropicSettings,{includeBaseUrl:!1}),googleLlm:v(n.googleSettings,{includeBaseUrl:!1}),deepseekLlm:v(n.deepseekSettings,{includeBaseUrl:!1}),fdpaiLlm:v(n.fdpaiSettings,{includeBaseUrl:!0})}}};function v(s,n){if(s==null||typeof s!="object"||Array.isArray(s))return{enabled:!1,defaultModel:"",baseUrl:"",apiKey:"",apiKeyMasked:""};let e=Reflect.get(s,"defaultModel"),o=Reflect.get(s,"apiKeyMasked"),i=Reflect.get(s,"baseUrl");return{enabled:Reflect.get(s,"enabled")===!0,defaultModel:typeof e=="string"?e:"",baseUrl:n.includeBaseUrl&&typeof i=="string"?i:"",apiKey:"",apiKeyMasked:typeof o=="string"?o:""}}var L=class{static parseLlmSettingsSectionForUi(n){let e=n.openAiSettings,o=!1,i="gpt-4o";if(e!=null&&typeof e=="object"&&!Array.isArray(e)){o=Reflect.get(e,"enabled")===!0;let t=Reflect.get(e,"defaultModel");typeof t=="string"&&(i=t)}let c=(Array.isArray(n.localAiSettings)?n.localAiSettings:[]).filter(t=>t!=null&&typeof t=="object"&&!Array.isArray(t)).map(t=>{let g=typeof t.key=="string"?t.key.trim():"";if(!g.length)return null;let S=typeof t.name=="string"?t.name:"",$=k.build({localAiKey:g}),T=S.trim().length>0?S.trim():"Local AI",_=t.enabled!==!1;return{id:$,baseUrl:(typeof t.baseUrl=="string"?t.baseUrl:"").trim(),model:(typeof t.defaultModel=="string"?t.defaultModel:"").trim(),label:T,enabled:_}}).filter(t=>t!=null),d=y.readLlmCloudBucketsFromSectionResponse(n),l=[];o&&l.push("open-ai"),d.anthropicLlm.enabled&&l.push("anthropic"),d.googleLlm.enabled&&l.push("google"),d.deepseekLlm.enabled&&l.push("deepseek"),d.fdpaiLlm.enabled&&l.push("fdp-ai");for(let t of c)t.enabled&&l.push(t.id);l.length===0&&l.push("open-ai");let F=c.map(t=>({id:t.id,label:t.label})),V=l.map(t=>({value:t,label:C.resolve(t,F)})),p=typeof n.defaultLlmProvider=="string"?n.defaultLlmProvider:"open-ai",u="";if(p==="open-ai")u=i;else if(p==="anthropic")u=d.anthropicLlm.defaultModel;else if(p==="google")u=d.googleLlm.defaultModel;else if(p==="deepseek")u=d.deepseekLlm.defaultModel;else if(p==="fdp-ai")u=d.fdpaiLlm.defaultModel;else{let t=c.find(g=>g.id===p);t&&(u=t.model)}return{enabledLlmProviderIds:l,llmProviderSelectOptions:V,defaultLlmProvider:p.trim(),defaultLlmModel:u.trim()}}};var I=(()=>{class s{baseUrl=`${U.api.baseUrl}/voice`;http=h(M);fetchVoiceNotesPoc(){return a(this.http.get(`${this.baseUrl}/poc/get-notes`))}fetchVoiceNotesQaSettings(){return a(this.http.get(`${this.baseUrl}/notes/qa-settings`))}saveVoiceNotesQaSettings(e){return a(this.http.put(`${this.baseUrl}/notes/qa-settings`,e,{headers:{"Content-Type":"application/json"}}))}saveVoiceNotesPoc(e){return a(this.http.put(`${this.baseUrl}/notes/poc`,e))}transcribeVoiceChunk(e){let o={qa:e.qaEnabled===!0?"1":"0",skip_classification:e.skipClassification!==!1?"true":"false"};e.confidenceThreshold!==void 0&&(o.confidence_threshold=String(e.confidenceThreshold)),e.noteContext!==void 0&&(o.note_context=e.noteContext);let i=Object.keys(o).map(c=>`${encodeURIComponent(c)}=${encodeURIComponent(o[c])}`).join("&"),f=`${this.baseUrl}/notes/transcribe${i?`?${i}`:""}`,r={"Content-Type":e.mimeType,Filename:e.filename};return a(this.http.post(f,e.blob,{headers:r}))}generateTtsSpeechBlob(e){return a(this.http.post(`${this.baseUrl}/tts/speech`,{input:e.text},{responseType:"blob"}))}getTtsMessageAudioUrl(e){let o=typeof e=="string"?e.trim():"";return o?`${this.baseUrl}/tts/message-audio/${encodeURIComponent(o)}`:""}getOrCreateTtsMessageAudio(e){return a(this.http.post(`${this.baseUrl}/tts/message-audio`,{sessionId:e.sessionId,role:e.role,content:e.content,timestamp:e.timestamp},{responseType:"blob",headers:{"Content-Type":"application/json"}}))}getVoiceSettings(){return a(this.http.get(`${this.baseUrl}/settings`))}saveTtsProvider(e){return a(this.http.post(`${this.baseUrl}/settings/tts-provider`,{provider:e}))}saveElevenLabsKey(e){return a(this.http.post(`${this.baseUrl}/settings/elevenlabs-key`,{apiKey:e}))}testElevenLabsApiKey(){return a(this.http.post(`${this.baseUrl}/settings/test-elevenlabs-key`,{}))}saveVoiceConfig(e){return a(this.http.post(`${this.baseUrl}/settings/voice-config`,{elevenLabsModelId:e.elevenLabsModelId,elevenLabsVoiceId:e.elevenLabsVoiceId}))}static \u0275fac=function(o){return new(o||s)};static \u0275prov=b({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();var Y=(()=>{class s{voice_AS=h(I);settings_AS=h(P);fetchQaEnabledFlag(){return m(this,null,function*(){try{return(yield this.voice_AS.fetchVoiceNotesQaSettings()).qaEnabled===!0}catch{return!1}})}loadSttQaSettingsPanelState(){return m(this,null,function*(){let e=yield this.voice_AS.fetchVoiceNotesQaSettings(),o=yield this.settings_AS.getSection(A.llmProviders),i=L.parseLlmSettingsSectionForUi(o),f=(e.providerName??"").trim(),r=[],c="";if(f.length>0){let d=yield this.fetchLlmModelsListForSttQa(f);r=[...d.models],c=d.errorMessage;let l=(e.modelName??"").trim();l.length>0&&!r.includes(l)&&(r=[l,...r])}return{qa:e,llmProviderSelectOptions:i.llmProviderSelectOptions,defaultLlmProvider:i.defaultLlmProvider,defaultLlmModel:i.defaultLlmModel,qaModelsForProvider:r,qaModelsListFetchError:c}})}fetchLlmModelsListForSttQa(e){return m(this,null,function*(){let o=e.trim();if(!o.length)return{models:[],errorMessage:""};try{let i=yield this.settings_AS.postListLlmModels({providerId:o}),f=i.models??[],r=typeof i.error=="string"?i.error.trim():"",c=i.success===!1;return f.length>0?{models:f,errorMessage:c?r.length>0?r:"Model list request failed.":""}:c?{models:[],errorMessage:r.length>0?r:"Model list request failed."}:{models:[],errorMessage:r}}catch(i){let f=i instanceof Error?i.message:String(i);return{models:[],errorMessage:f}}})}fetchLlmModelIdsForProvider(e){return m(this,null,function*(){return(yield this.fetchLlmModelsListForSttQa(e)).models})}normalizeConfusionMapEntries(e){return e.map(o=>({from:String(o.from).trim(),to:String(o.to).trim()})).filter(o=>o.from.length>0||o.to.length>0)}saveVoiceNotesQaSettings(e){return m(this,null,function*(){yield this.voice_AS.saveVoiceNotesQaSettings(e)})}fetchVoiceNotesPoc(){return this.voice_AS.fetchVoiceNotesPoc()}saveVoiceNotesPoc(e){return this.voice_AS.saveVoiceNotesPoc(e)}transcribeVoiceChunk(e){return this.voice_AS.transcribeVoiceChunk(e)}getTtsMessageAudioUrl(e){return this.voice_AS.getTtsMessageAudioUrl(e)}getOrCreateTtsMessageAudio(e){return this.voice_AS.getOrCreateTtsMessageAudio(e)}static \u0275fac=function(o){return new(o||s)};static \u0275prov=b({token:s,factory:s.\u0275fac,providedIn:"root"})}return s})();export{y as a,I as b,Y as c};
2
- //# sourceMappingURL=chunk-MZLFEWAN.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["src/app/_collections/settings/read-llm-cloud-buckets-from-section-response.util.ts", "src/app/_collections/settings/parse-llm-settings-section-for-ui.util.ts", "src/app/_modules/dev/_modules/poc/_modules/voice-notes-poc/_services/voice-notes-poc.api-service.ts", "src/app/_modules/dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-stt-qa-ui.data-service.ts"],
4
- "sourcesContent": ["import { Set_LlmCloudProviderBucketForm_Interface } from '../../_modules/config/_modules/settings/_models/interfaces/llm-providers/set-llm-cloud-provider-bucket-form.interface';\n\n/**\n * Cloud LLM bucket kiolvasó util – statikus metódusokkal.\n */\nexport class ReadLlmCloudBucketsFromSectionResponse_Util {\n /**\n * Cloud / FDPAI LLM bucket-ek kiolvasása a szerver get-section (llmProviders) válaszból.\n */\n static readLlmCloudBucketsFromSectionResponse(response: Record<string, unknown>): {\n anthropicLlm: Set_LlmCloudProviderBucketForm_Interface;\n googleLlm: Set_LlmCloudProviderBucketForm_Interface;\n deepseekLlm: Set_LlmCloudProviderBucketForm_Interface;\n fdpaiLlm: Set_LlmCloudProviderBucketForm_Interface;\n } {\n return {\n anthropicLlm: readLlmCloudBucketFromUnknown(response.anthropicSettings, { includeBaseUrl: false }),\n googleLlm: readLlmCloudBucketFromUnknown(response.googleSettings, { includeBaseUrl: false }),\n deepseekLlm: readLlmCloudBucketFromUnknown(response.deepseekSettings, { includeBaseUrl: false }),\n fdpaiLlm: readLlmCloudBucketFromUnknown(response.fdpaiSettings, { includeBaseUrl: true }),\n };\n }\n}\n\n/**\n * GET settings section válasz egy provider bucket-jének kiolvasása (cloud LLM, FDPAI baseUrl-lel).\n */\nfunction readLlmCloudBucketFromUnknown(\n raw: unknown,\n options: { includeBaseUrl: boolean },\n): Set_LlmCloudProviderBucketForm_Interface {\n if (raw == null || typeof raw !== 'object' || Array.isArray(raw)) {\n return {\n enabled: false,\n defaultModel: '',\n baseUrl: '',\n apiKey: '',\n apiKeyMasked: '',\n };\n }\n const defaultModel: unknown = Reflect.get(raw, 'defaultModel');\n const apiKeyMasked: unknown = Reflect.get(raw, 'apiKeyMasked');\n const baseUrlRaw: unknown = Reflect.get(raw, 'baseUrl');\n return {\n enabled: Reflect.get(raw, 'enabled') === true,\n defaultModel: typeof defaultModel === 'string' ? defaultModel : '',\n baseUrl: options.includeBaseUrl && typeof baseUrlRaw === 'string' ? baseUrlRaw : '',\n apiKey: '',\n apiKeyMasked: typeof apiKeyMasked === 'string' ? apiKeyMasked : '',\n };\n}\n", "import { CCAP_LlmProviderSelectOption_Interface } from '../../_models/interfaces/settings/ccap-llm-provider-select-option.interface';\nimport { CCAP_CustomLocalOpenAiLlmInstanceId_Util } from './ccap-custom-local-openai-llm-instance-id.util';\nimport { CCAP_LlmProviderDisplayLabelForUi_Util } from './llm-provider-display-label-for-ui.util';\nimport { ReadLlmCloudBucketsFromSectionResponse_Util } from './read-llm-cloud-buckets-from-section-response.util';\n\n/**\n * LLM settings section parse util – statikus metódusokkal.\n */\nexport class ParseLlmSettingsSectionForUi_Util {\n /**\n * LLM settings get-section válasz feldolgozása: engedélyezett provider id-k + globál default provider/modell.\n * Logika igazodik a Set_LlmProviders_DataService doLoad metódusához (voice overlay, voice-notes POC).\n */\n static parseLlmSettingsSectionForUi(response: Record<string, unknown>): {\n enabledLlmProviderIds: string[];\n llmProviderSelectOptions: CCAP_LlmProviderSelectOption_Interface[];\n defaultLlmProvider: string;\n defaultLlmModel: string;\n } {\n const oai: unknown = response.openAiSettings;\n let openAiEnabled: boolean = false;\n let openaiModel: string = 'gpt-4o';\n if (oai != null && typeof oai === 'object' && !Array.isArray(oai)) {\n openAiEnabled = Reflect.get(oai, 'enabled') === true;\n const dm: unknown = Reflect.get(oai, 'defaultModel');\n if (typeof dm === 'string') {\n openaiModel = dm;\n }\n }\n\n const localAiRaw: unknown[] = Array.isArray(response.localAiSettings)\n ? response.localAiSettings\n : [];\n type LocalEntry = { id: string; model: string; label: string; baseUrl: string; enabled: boolean };\n const localAiEntries: LocalEntry[] = localAiRaw\n .filter((item: unknown): item is Record<string, unknown> =>\n item != null && typeof item === 'object' && !Array.isArray(item),\n )\n .map((item: Record<string, unknown>): LocalEntry | null => {\n const key: string = typeof item.key === 'string' ? item.key.trim() : '';\n if (!key.length) {\n return null;\n }\n const name: string = typeof item.name === 'string' ? item.name : '';\n const id: string = CCAP_CustomLocalOpenAiLlmInstanceId_Util.build({ localAiKey: key });\n const label: string = name.trim().length > 0 ? name.trim() : 'Local AI';\n const rowEnabled: boolean = item.enabled !== false;\n return {\n id: id,\n baseUrl: (typeof item.baseUrl === 'string' ? item.baseUrl : '').trim(),\n model: (typeof item.defaultModel === 'string' ? item.defaultModel : '').trim(),\n label: label,\n enabled: rowEnabled,\n };\n })\n .filter((row: LocalEntry | null): row is LocalEntry => row != null);\n\n const finalLocalAi: LocalEntry[] = localAiEntries;\n\n const clouds = ReadLlmCloudBucketsFromSectionResponse_Util.readLlmCloudBucketsFromSectionResponse(response);\n\n const enabledLlmProviderIds: string[] = [];\n if (openAiEnabled) enabledLlmProviderIds.push('open-ai');\n if (clouds.anthropicLlm.enabled) enabledLlmProviderIds.push('anthropic');\n if (clouds.googleLlm.enabled) enabledLlmProviderIds.push('google');\n if (clouds.deepseekLlm.enabled) enabledLlmProviderIds.push('deepseek');\n if (clouds.fdpaiLlm.enabled) enabledLlmProviderIds.push('fdp-ai');\n for (const entry of finalLocalAi) {\n if (entry.enabled) enabledLlmProviderIds.push(entry.id);\n }\n if (enabledLlmProviderIds.length === 0) enabledLlmProviderIds.push('open-ai');\n\n const localRowsForLabel: { id: string; label: string }[] = finalLocalAi.map(\n (e: LocalEntry): { id: string; label: string } => ({ id: e.id, label: e.label }),\n );\n const llmProviderSelectOptions: CCAP_LlmProviderSelectOption_Interface[] = enabledLlmProviderIds.map(\n (pid: string): CCAP_LlmProviderSelectOption_Interface => ({\n value: pid,\n label: CCAP_LlmProviderDisplayLabelForUi_Util.resolve(pid, localRowsForLabel),\n }),\n );\n\n const defaultLlmProvider: string = typeof response.defaultLlmProvider === 'string'\n ? response.defaultLlmProvider\n : 'open-ai';\n\n let defaultLlmModel: string = '';\n if (defaultLlmProvider === 'open-ai') {\n defaultLlmModel = openaiModel;\n } else if (defaultLlmProvider === 'anthropic') {\n defaultLlmModel = clouds.anthropicLlm.defaultModel;\n } else if (defaultLlmProvider === 'google') {\n defaultLlmModel = clouds.googleLlm.defaultModel;\n } else if (defaultLlmProvider === 'deepseek') {\n defaultLlmModel = clouds.deepseekLlm.defaultModel;\n } else if (defaultLlmProvider === 'fdp-ai') {\n defaultLlmModel = clouds.fdpaiLlm.defaultModel;\n } else {\n const matchEntry: LocalEntry | undefined = finalLocalAi.find(\n (e: LocalEntry): boolean => e.id === defaultLlmProvider,\n );\n if (matchEntry) defaultLlmModel = matchEntry.model;\n }\n\n return {\n enabledLlmProviderIds: enabledLlmProviderIds,\n llmProviderSelectOptions: llmProviderSelectOptions,\n defaultLlmProvider: defaultLlmProvider.trim(),\n defaultLlmModel: defaultLlmModel.trim(),\n };\n }\n}\n", "import { inject, Injectable } from '@angular/core';\nimport { HttpClient } from '@angular/common/http';\n\nimport { firstValueFrom } from 'rxjs';\n\nimport { environment } from '../../../../../../../../environments/environment';\nimport { CCAP_VoiceNotesPoc_Response } from '../../../../../../../_models/interfaces/voice/voice-notes/ccap-voice-notes-poc-response.interface';\nimport { CCAP_VoiceNotesPocSaveBody_Request } from '../../../../../../../_models/interfaces/voice/voice-notes/ccap-voice-notes-poc-save-body.interface';\nimport {\n CCAP_Transcribe_Response,\n CCAP_TranscribeSuccess_Response,\n CCAP_TranscribeNonSpeech_Response,\n} from '../../../../../../../_models/interfaces/voice/transcribe/ccap-transcribe-response.interface';\nimport {\n Voc_SttQaConfusionMapEntry_Response,\n Voc_SttQaInput_Response,\n} from '../../../../../../../_models/server-index';\nimport { CCAP_VoiceNotesQaSettings_Response } from '../../../../../../../_models/interfaces/voice/voice-notes/ccap-voice-notes-qa-settings-response.interface';\nimport { CCAP_VoiceNotesQaSettingsSaveBody_Request } from '../../../../../../../_models/interfaces/voice/voice-notes/ccap-voice-notes-qa-settings-save-body.interface';\nimport { CCAP_VoiceSettings_Response } from '../../../../../../../_models/interfaces/voice/ccap-voice-settings-response.interface';\nimport { CCAP_TestElevenLabsApiKey_Response } from '../../../../../../../_models/interfaces/voice/transcribe/ccap-test-elevenlabs-api-key-response.interface';\n\n/**\n * Voice API service.\n * GET/PUT POC note, POST transcribe, POST TTS speech, GET/POST voice settings.\n */\n@Injectable({ providedIn: 'root' })\nexport class VoiceNotesPoc_ApiService {\n\n private readonly baseUrl: string = `${environment.api.baseUrl}/voice`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * POC jegyzet lekérése (GET /voice/poc/get-notes; a szerver voice.controller endpoint-ja).\n */\n fetchVoiceNotesPoc(): Promise<CCAP_VoiceNotesPoc_Response> {\n return firstValueFrom(\n this.http.get<CCAP_VoiceNotesPoc_Response>(`${this.baseUrl}/poc/get-notes`),\n );\n }\n\n /**\n * STT QA beállítások lekérése (GET /voice/notes/qa-settings): system prompt, user prompt sablon, confusion map.\n */\n fetchVoiceNotesQaSettings(): Promise<CCAP_VoiceNotesQaSettings_Response> {\n return firstValueFrom(\n this.http.get<CCAP_VoiceNotesQaSettings_Response>(`${this.baseUrl}/notes/qa-settings`),\n );\n }\n\n /**\n * STT QA beállítások mentése (PUT /voice/notes/qa-settings): confusion map + opcionális provider/modell.\n * Explicit JSON header, hogy a szerver mindig JSON-ként dolgozza a body-t.\n */\n saveVoiceNotesQaSettings(\n body: CCAP_VoiceNotesQaSettingsSaveBody_Request,\n ): Promise<{\n ok: boolean;\n confusionMap?: Voc_SttQaConfusionMapEntry_Response[];\n providerName?: string;\n modelName?: string;\n }> {\n return firstValueFrom(\n this.http.put<{\n ok: boolean;\n confusionMap?: Voc_SttQaConfusionMapEntry_Response[];\n providerName?: string;\n modelName?: string;\n }>(`${this.baseUrl}/notes/qa-settings`, body, {\n headers: { 'Content-Type': 'application/json' },\n }),\n );\n }\n\n /**\n * POC jegyzet mentése (PUT /voice/notes/poc).\n */\n saveVoiceNotesPoc(body: CCAP_VoiceNotesPocSaveBody_Request): Promise<{ ok?: boolean }> {\n return firstValueFrom(\n this.http.put<{ ok?: boolean }>(`${this.baseUrl}/notes/poc`, body),\n );\n }\n\n /**\n * Nyers audio feltöltése, STT + opcionális QA (POST /voice/notes/transcribe).\n * Raw body = blob; headers Content-Type, Filename (ASCII); query qa, skip_classification, note_context.\n * Megjegyzés: XMLHttpRequest header érték csak ISO-8859-1 — a jegyzet kontextus (UTF-8, pl. magyar)\n * query param `note_context`-ben megy (`encodeURIComponent`), nem headerben.\n */\n transcribeVoiceChunk(params: {\n blob: Blob;\n mimeType: string;\n filename: string;\n qaEnabled?: boolean;\n noteContext?: string;\n skipClassification?: boolean;\n confidenceThreshold?: number;\n }): Promise<CCAP_Transcribe_Response> {\n const queryParams: Record<string, string> = {\n qa: params.qaEnabled === true ? '1' : '0',\n skip_classification: params.skipClassification !== false ? 'true' : 'false',\n };\n if (params.confidenceThreshold !== undefined) {\n queryParams.confidence_threshold = String(params.confidenceThreshold);\n }\n if (params.noteContext !== undefined) {\n queryParams.note_context = params.noteContext;\n }\n const query: string = Object.keys(queryParams)\n .map((k: string): string => `${encodeURIComponent(k)}=${encodeURIComponent(queryParams[k])}`)\n .join('&');\n const url: string = `${this.baseUrl}/notes/transcribe${query ? `?${query}` : ''}`;\n const headers: Record<string, string> = {\n 'Content-Type': params.mimeType,\n 'Filename': params.filename,\n };\n return firstValueFrom(\n this.http.post<CCAP_Transcribe_Response>(url, params.blob, {\n headers: headers,\n }),\n );\n }\n\n /**\n * TTS speech generálás (POST /voice/tts/speech).\n * Jelenleg csak ElevenLabs sync (200 + blob); 202/task flow nincs.\n */\n generateTtsSpeechBlob(params: { text: string }): Promise<Blob> {\n return firstValueFrom(\n this.http.post(`${this.baseUrl}/tts/speech`, { input: params.text }, {\n responseType: 'blob',\n }),\n );\n }\n\n /**\n * TTS message audio URL (GET /voice/tts/message-audio/:messageKey).\n * A kliens ezt használja audio src-ként, ha hasTtsAudio true.\n * Üres messageKey esetén ne adjunk URL-t (ne hívjuk a szervert messageKey nélkül).\n */\n getTtsMessageAudioUrl(messageKey: string): string {\n const key: string = typeof messageKey === 'string' ? messageKey.trim() : '';\n if (!key) {\n return '';\n }\n return `${this.baseUrl}/tts/message-audio/${encodeURIComponent(key)}`;\n }\n\n /**\n * TTS message audio get-or-create (POST /voice/tts/message-audio).\n * Visszaadja a blob-ot (cache-ből vagy új generálásból); mindig 200 + blob.\n */\n getOrCreateTtsMessageAudio(params: {\n sessionId: string;\n role: string;\n content: string;\n timestamp: string;\n }): Promise<Blob> {\n return firstValueFrom(\n this.http.post(\n `${this.baseUrl}/tts/message-audio`,\n {\n sessionId: params.sessionId,\n role: params.role,\n content: params.content,\n timestamp: params.timestamp,\n },\n {\n responseType: 'blob',\n headers: { 'Content-Type': 'application/json' },\n },\n ),\n );\n }\n\n /**\n * Voice beállítások lekérése (GET /voice/settings).\n */\n getVoiceSettings(): Promise<CCAP_VoiceSettings_Response> {\n return firstValueFrom(\n this.http.get<CCAP_VoiceSettings_Response>(`${this.baseUrl}/settings`),\n );\n }\n\n /**\n * TTS provider mentése (POST /voice/settings/tts-provider).\n */\n saveTtsProvider(provider: 'fdpai' | 'elevenlabs'): Promise<{ ok: boolean; provider: string }> {\n return firstValueFrom(\n this.http.post<{ ok: boolean; provider: string }>(\n `${this.baseUrl}/settings/tts-provider`,\n { provider: provider },\n ),\n );\n }\n\n /**\n * ElevenLabs API kulcs mentése (POST /voice/settings/elevenlabs-key).\n */\n saveElevenLabsKey(apiKey: string): Promise<{ ok: boolean; maskedKey?: string }> {\n return firstValueFrom(\n this.http.post<{ ok: boolean; maskedKey?: string }>(\n `${this.baseUrl}/settings/elevenlabs-key`,\n { apiKey: apiKey },\n ),\n );\n }\n\n /**\n * ElevenLabs API kulcs tesztelése a tárolt kulccsal (POST /voice/settings/test-elevenlabs-key).\n * Nem küld body-t – a szerver a titkosítva mentett kulcsot használja.\n */\n testElevenLabsApiKey(): Promise<CCAP_TestElevenLabsApiKey_Response> {\n return firstValueFrom(\n this.http.post<CCAP_TestElevenLabsApiKey_Response>(\n `${this.baseUrl}/settings/test-elevenlabs-key`,\n {},\n ),\n );\n }\n\n /**\n * Voice config (ElevenLabs model/voice id) mentése (POST /voice/settings/voice-config).\n */\n saveVoiceConfig(params: {\n elevenLabsModelId?: string;\n elevenLabsVoiceId?: string;\n }): Promise<{\n ok: boolean;\n elevenLabsModelId?: string;\n elevenLabsVoiceId?: string;\n }> {\n return firstValueFrom(\n this.http.post<{\n ok: boolean;\n elevenLabsModelId?: string;\n elevenLabsVoiceId?: string;\n }>(`${this.baseUrl}/settings/voice-config`, {\n elevenLabsModelId: params.elevenLabsModelId,\n elevenLabsVoiceId: params.elevenLabsVoiceId,\n }),\n );\n }\n}\n", "import { inject, Injectable } from '@angular/core';\n\nimport { SC_Type } from '@server-enums';\nimport { ParseLlmSettingsSectionForUi_Util } from '../../../../../../../_collections/settings/parse-llm-settings-section-for-ui.util';\nimport { Voc_SttQaConfusionMapEntry_Response } from '../../../../../../../_models/server-index';\nimport { CCAP_VoiceNotesQaSettings_Response } from '../../../../../../../_models/interfaces/voice/voice-notes/ccap-voice-notes-qa-settings-response.interface';\nimport { CCAP_VoiceNotesQaSettingsSaveBody_Request } from '../../../../../../../_models/interfaces/voice/voice-notes/ccap-voice-notes-qa-settings-save-body.interface';\nimport { CCAP_VoiceNotesPoc_Response } from '../../../../../../../_models/interfaces/voice/voice-notes/ccap-voice-notes-poc-response.interface';\nimport { CCAP_VoiceNotesPocSaveBody_Request } from '../../../../../../../_models/interfaces/voice/voice-notes/ccap-voice-notes-poc-save-body.interface';\nimport { CCAP_ListAiModels_Response } from '../../../../../../../_models/interfaces/settings/response/ccap-list-ai-models-response.interface';\nimport { CCAP_Transcribe_Response } from '../../../../../../../_models/interfaces/voice/transcribe/ccap-transcribe-response.interface';\nimport { CCAP_VoiceSttQaUiLoadResult_Interface } from '../../../../../../../_models/interfaces/voice/ccap-voice-stt-qa-ui-load-result.interface';\nimport { Settings_ApiService } from '../../../../../../config/_modules/settings/_services/settings.api-service';\nimport { VoiceNotesPoc_ApiService } from './voice-notes-poc.api-service';\n\n/**\n * Voice kliens SSOT: STT chunk, QA panel állapot, TTS message audio URL/blob (komponensek nem hívják közvetlenül a Voice ApiService-t).\n */\n@Injectable({ providedIn: 'root' })\nexport class VNP_SttQaUi_DataService {\n\n private readonly voice_AS: VoiceNotesPoc_ApiService = inject(VoiceNotesPoc_ApiService);\n private readonly settings_AS: Settings_ApiService = inject(Settings_ApiService);\n\n /**\n * Szerverről: QA engedélyezett-e (egyszeri flag betöltéshez).\n */\n async fetchQaEnabledFlag(): Promise<boolean> {\n try {\n const res: CCAP_VoiceNotesQaSettings_Response =\n await this.voice_AS.fetchVoiceNotesQaSettings();\n return res.qaEnabled === true;\n } catch {\n return false;\n }\n }\n\n /**\n * QA beállítások panelhez: GET qa-settings + LLM szekció + opcionális modell lista.\n */\n async loadSttQaSettingsPanelState(): Promise<CCAP_VoiceSttQaUiLoadResult_Interface> {\n const qa: CCAP_VoiceNotesQaSettings_Response =\n await this.voice_AS.fetchVoiceNotesQaSettings();\n const llmSection: Record<string, unknown> = await this.settings_AS.getSection(\n SC_Type.llmProviders,\n );\n const snap = ParseLlmSettingsSectionForUi_Util.parseLlmSettingsSectionForUi(llmSection);\n const providerTrimmed: string = (qa.providerName ?? '').trim();\n let qaModelsForProvider: string[] = [];\n let qaModelsListFetchError: string = '';\n if (providerTrimmed.length > 0) {\n const fetchRes = await this.fetchLlmModelsListForSttQa(providerTrimmed);\n qaModelsForProvider = [...fetchRes.models];\n qaModelsListFetchError = fetchRes.errorMessage;\n const savedModel: string = (qa.modelName ?? '').trim();\n if (savedModel.length > 0 && !qaModelsForProvider.includes(savedModel)) {\n qaModelsForProvider = [savedModel, ...qaModelsForProvider];\n }\n }\n return {\n qa: qa,\n llmProviderSelectOptions: snap.llmProviderSelectOptions,\n defaultLlmProvider: snap.defaultLlmProvider,\n defaultLlmModel: snap.defaultLlmModel,\n qaModelsForProvider: qaModelsForProvider,\n qaModelsListFetchError: qaModelsListFetchError,\n };\n }\n\n /**\n * Egy providerhez modell lista + hiba szöveg (settings list-llm-models); cloud provider esetén üres lista és error.\n */\n async fetchLlmModelsListForSttQa(providerId: string): Promise<{\n models: string[];\n errorMessage: string;\n }> {\n const id: string = providerId.trim();\n if (!id.length) {\n return { models: [], errorMessage: '' };\n }\n try {\n const res: CCAP_ListAiModels_Response = await this.settings_AS.postListLlmModels({\n providerId: id,\n });\n const models: string[] = res.models ?? [];\n const errRaw: string = typeof res.error === 'string' ? res.error.trim() : '';\n const isExplicitFailure: boolean = res.success === false;\n if (models.length > 0) {\n return {\n models: models,\n errorMessage: isExplicitFailure ? (errRaw.length > 0 ? errRaw : 'Model list request failed.') : '',\n };\n }\n if (isExplicitFailure) {\n return {\n models: [],\n errorMessage: errRaw.length > 0 ? errRaw : 'Model list request failed.',\n };\n }\n return { models: [], errorMessage: errRaw };\n } catch (error: unknown) {\n const message: string = error instanceof Error ? error.message : String(error);\n return { models: [], errorMessage: message };\n }\n }\n\n /**\n * Csak a modell id-k (legacy hívók / egyszerű UI); hiba esetén üres tömb.\n */\n async fetchLlmModelIdsForProvider(providerId: string): Promise<string[]> {\n const out = await this.fetchLlmModelsListForSttQa(providerId);\n return out.models;\n }\n\n /**\n * Confusion map mentés előtti normalizálás (trim + üres sorok megtartása opcionálisan kiszűrve).\n */\n normalizeConfusionMapEntries(\n list: Voc_SttQaConfusionMapEntry_Response[],\n ): Voc_SttQaConfusionMapEntry_Response[] {\n return list\n .map((e: Voc_SttQaConfusionMapEntry_Response): Voc_SttQaConfusionMapEntry_Response => ({\n from: String(e.from).trim(),\n to: String(e.to).trim(),\n }))\n .filter((e: Voc_SttQaConfusionMapEntry_Response): boolean =>\n e.from.length > 0 || e.to.length > 0);\n }\n\n /**\n * PUT /voice/notes/qa-settings.\n */\n async saveVoiceNotesQaSettings(\n body: CCAP_VoiceNotesQaSettingsSaveBody_Request,\n ): Promise<void> {\n await this.voice_AS.saveVoiceNotesQaSettings(body);\n }\n\n /**\n * Voice Notes POC jegyzet GET.\n */\n fetchVoiceNotesPoc(): Promise<CCAP_VoiceNotesPoc_Response> {\n return this.voice_AS.fetchVoiceNotesPoc();\n }\n\n /**\n * Voice Notes POC jegyzet PUT.\n */\n saveVoiceNotesPoc(body: CCAP_VoiceNotesPocSaveBody_Request): Promise<{ ok?: boolean }> {\n return this.voice_AS.saveVoiceNotesPoc(body);\n }\n\n /**\n * Hang chunk STT (+ opcionális QA) — POST /voice/notes/transcribe.\n */\n transcribeVoiceChunk(params: {\n blob: Blob;\n mimeType: string;\n filename: string;\n qaEnabled?: boolean;\n noteContext?: string;\n skipClassification?: boolean;\n confidenceThreshold?: number;\n }): Promise<CCAP_Transcribe_Response> {\n return this.voice_AS.transcribeVoiceChunk(params);\n }\n\n /**\n * TTS message audio URL (üres key → üres string).\n */\n getTtsMessageAudioUrl(messageKey: string): string {\n return this.voice_AS.getTtsMessageAudioUrl(messageKey);\n }\n\n /**\n * TTS message audio get-or-create (blob).\n */\n getOrCreateTtsMessageAudio(params: {\n sessionId: string;\n role: string;\n content: string;\n timestamp: string;\n }): Promise<Blob> {\n return this.voice_AS.getOrCreateTtsMessageAudio(params);\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["ReadLlmCloudBucketsFromSectionResponse_Util", "readLlmCloudBucketsFromSectionResponse", "response", "anthropicLlm", "readLlmCloudBucketFromUnknown", "anthropicSettings", "includeBaseUrl", "googleLlm", "googleSettings", "deepseekLlm", "deepseekSettings", "fdpaiLlm", "fdpaiSettings", "raw", "options", "Array", "isArray", "enabled", "defaultModel", "baseUrl", "apiKey", "apiKeyMasked", "Reflect", "get", "baseUrlRaw", "ParseLlmSettingsSectionForUi_Util", "parseLlmSettingsSectionForUi", "response", "oai", "openAiSettings", "openAiEnabled", "openaiModel", "Array", "isArray", "Reflect", "get", "dm", "finalLocalAi", "localAiSettings", "filter", "item", "map", "key", "trim", "length", "name", "id", "CCAP_CustomLocalOpenAiLlmInstanceId_Util", "build", "localAiKey", "label", "rowEnabled", "enabled", "baseUrl", "model", "defaultModel", "row", "clouds", "ReadLlmCloudBucketsFromSectionResponse_Util", "readLlmCloudBucketsFromSectionResponse", "enabledLlmProviderIds", "push", "anthropicLlm", "googleLlm", "deepseekLlm", "fdpaiLlm", "entry", "localRowsForLabel", "e", "llmProviderSelectOptions", "pid", "value", "CCAP_LlmProviderDisplayLabelForUi_Util", "resolve", "defaultLlmProvider", "defaultLlmModel", "matchEntry", "find", "VoiceNotesPoc_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "fetchVoiceNotesPoc", "firstValueFrom", "get", "fetchVoiceNotesQaSettings", "saveVoiceNotesQaSettings", "body", "put", "headers", "saveVoiceNotesPoc", "transcribeVoiceChunk", "params", "queryParams", "qa", "qaEnabled", "skip_classification", "skipClassification", "confidenceThreshold", "undefined", "confidence_threshold", "String", "noteContext", "note_context", "query", "Object", "keys", "map", "k", "encodeURIComponent", "join", "url", "mimeType", "filename", "post", "blob", "generateTtsSpeechBlob", "input", "text", "responseType", "getTtsMessageAudioUrl", "messageKey", "key", "trim", "getOrCreateTtsMessageAudio", "sessionId", "role", "content", "timestamp", "getVoiceSettings", "saveTtsProvider", "provider", "saveElevenLabsKey", "apiKey", "testElevenLabsApiKey", "saveVoiceConfig", "elevenLabsModelId", "elevenLabsVoiceId", "factory", "\u0275fac", "providedIn", "VNP_SttQaUi_DataService", "voice_AS", "inject", "VoiceNotesPoc_ApiService", "settings_AS", "Settings_ApiService", "fetchQaEnabledFlag", "__async", "fetchVoiceNotesQaSettings", "qaEnabled", "loadSttQaSettingsPanelState", "qa", "llmSection", "getSection", "SC_Type", "llmProviders", "snap", "ParseLlmSettingsSectionForUi_Util", "parseLlmSettingsSectionForUi", "providerTrimmed", "providerName", "trim", "qaModelsForProvider", "qaModelsListFetchError", "length", "fetchRes", "fetchLlmModelsListForSttQa", "models", "errorMessage", "savedModel", "modelName", "includes", "llmProviderSelectOptions", "defaultLlmProvider", "defaultLlmModel", "providerId", "id", "res", "postListLlmModels", "errRaw", "error", "isExplicitFailure", "success", "message", "Error", "String", "fetchLlmModelIdsForProvider", "normalizeConfusionMapEntries", "list", "map", "e", "from", "to", "filter", "saveVoiceNotesQaSettings", "body", "fetchVoiceNotesPoc", "saveVoiceNotesPoc", "transcribeVoiceChunk", "params", "getTtsMessageAudioUrl", "messageKey", "getOrCreateTtsMessageAudio", "factory", "\u0275fac", "providedIn"]
7
- }
@@ -1,2 +0,0 @@
1
- import{p as C}from"./chunk-SLSTIBOT.js";import{aa as f,h as p,k as h,y as m}from"./chunk-TBMJSIBB.js";var a=function(o){return o.stopped="stopped",o.standby="standby",o.running="running",o}(a||{});var k={navigator_unavailable:"A hangfelv\xE9tel nem el\xE9rhet\u0151: a b\xF6ng\xE9sz\u0151 k\xF6rnyezet nem t\xE1mogatja a navigator API-t.",media_devices_unavailable:"A hangfelv\xE9tel nem el\xE9rhet\u0151: a b\xF6ng\xE9sz\u0151 ezen az oldalon nem ad hozz\xE1f\xE9r\xE9st a mikrofonhoz.",secure_context_required:"A hangfelv\xE9tel ezen az oldalon nem el\xE9rhet\u0151: a b\xF6ng\xE9sz\u0151 csak biztons\xE1gos kapcsolatban (HTTPS vagy localhost) enged\xE9lyezi a mikrofont."},v={media_devices_unavailable:"A mikrofonhoz haszn\xE1ld az alkalmaz\xE1st HTTPS c\xEDmen (pl. https://localhost:39051) vagy localhost-on.",secure_context_required:"A mikrofonhoz haszn\xE1ld az alkalmaz\xE1st HTTPS c\xEDmen (pl. https://localhost:39051) vagy localhost-on."},d=class{static wrapGetUserMediaError(s){if(s instanceof Error&&"code"in s&&typeof s.code=="string"&&s.code.startsWith("CCAP_"))return s;let e=s instanceof DOMException||s instanceof Error?s.name:"UnknownError",t,i;switch(e){case"NotAllowedError":t="CCAP_MIC_PERMISSION_DENIED",i="Microphone access denied by user or browser policy";break;case"NotFoundError":t="CCAP_MIC_NOT_FOUND",i="No microphone device found on this device";break;case"NotReadableError":t="CCAP_MIC_NOT_READABLE",i="Microphone hardware error or device already in use by another application";break;case"OverconstrainedError":t="CCAP_MIC_OVERCONSTRAINED",i="Microphone does not support the requested audio constraints";break;case"AbortError":t="CCAP_MIC_ABORTED",i="Microphone access request was aborted by the system";break;case"SecurityError":t="CCAP_MIC_SECURITY_ERROR",i="Microphone access blocked by document security policy (Permissions-Policy / iframe)";break;default:t="CCAP_MIC_UNKNOWN_ERROR",i=`getUserMedia failed with ${e}`;break}let n=new Error(i);return n.code=t,n.cause=s,n}static getGetUserMediaErrorMessage(s){switch(s instanceof DOMException||s instanceof Error?s.name:""){case"NotAllowedError":return"A mikrofon haszn\xE1lata nem enged\xE9lyezett: a b\xF6ng\xE9sz\u0151 vagy a felhaszn\xE1l\xF3 megtagadta a hozz\xE1f\xE9r\xE9st.";case"NotFoundError":return"Nem tal\xE1lhat\xF3 mikrofon ezen az eszk\xF6z\xF6n.";case"NotReadableError":return"A mikrofon nem olvashat\xF3: hardverhiba vagy egy m\xE1sik alkalmaz\xE1s haszn\xE1lja.";case"OverconstrainedError":return"A mikrofon nem t\xE1mogatja a k\xE9rt audio be\xE1ll\xEDt\xE1sokat.";case"AbortError":return"A mikrofon-hozz\xE1f\xE9r\xE9si k\xE9r\xE9s megszakadt.";case"SecurityError":return"A mikrofon-hozz\xE1f\xE9r\xE9st a biztons\xE1gi szab\xE1lyzat (Permissions-Policy / iframe) blokkolta.";default:return"A mikrofon el\xE9r\xE9se sikertelen (ismeretlen hiba)."}}static getGetUserMediaErrorHint(s){switch(s instanceof DOMException||s instanceof Error?s.name:""){case"NotAllowedError":return"Enged\xE9lyezd a mikrofont a b\xF6ng\xE9sz\u0151 c\xEDmsor\xE1ban (lakat ikon \u2192 Mikrofon \u2192 Enged\xE9lyez\xE9s), majd pr\xF3b\xE1ld \xFAjra. Androidon: Be\xE1ll\xEDt\xE1sok \u2192 Alkalmaz\xE1sok \u2192 Chrome \u2192 Enged\xE9lyek \u2192 Mikrofon.";case"NotReadableError":return"Z\xE1rd be a mikrofont haszn\xE1l\xF3 m\xE1sik alkalmaz\xE1st (pl. vide\xF3h\xEDv\xE1s, diktafon), majd pr\xF3b\xE1ld \xFAjra.";case"SecurityError":return'Ha az alkalmaz\xE1s iframe-ben fut, az iframe-nek "allow=microphone" attrib\xFAtumra van sz\xFCks\xE9ge.';default:return""}}static getMediaRecordingAvailability(){return typeof navigator>"u"?{supported:!1,reason:"navigator_unavailable"}:typeof window<"u"&&window.isSecureContext===!1?{supported:!1,reason:"secure_context_required"}:navigator.mediaDevices==null?{supported:!1,reason:"media_devices_unavailable"}:{supported:!0}}static getMediaUnavailableReportMessage(s){return`Media recording not available (reason: ${s}). Use HTTPS or localhost for microphone access.`}static getMediaUnavailableHint(s){return v[s]??""}static getMediaUnavailableMessage(s){return k[s]??"A hangfelv\xE9tel nem el\xE9rhet\u0151 ezen az oldalon."}};var r=p(C());var A=["audio/webm;codecs=opus","audio/webm","audio/ogg;codecs=opus","audio/ogg","audio/mp4"],z=(()=>{class o{volumeGate=.05;silenceTimeLimitMs=5*r.second;timesliceMs=5*r.second;segmentMaxChunks=6;segmentSoftFlushMinChunks=4;getUserMediaTimeoutMs=15*r.second;state_$=f(a.stopped);mediaStream=null;mediaRecorder=null;audioContext=null;analyser=null;audioSourceNode=null;volumeAnimationId=null;chunkIndex=0;chunks=[];isRestartingForFlush=!1;selectedMime="";onChunkCb=null;onVolumeCb=null;onErrorCb=null;deviceChangeHandler=null;silenceStartTime=null;setOnChunk(e){this.onChunkCb=e}setOnVolume(e){this.onVolumeCb=e}setOnError(e){this.onErrorCb=e}selectMime(){for(let e of A)if(MediaRecorder.isTypeSupported(e))return e;return"audio/webm"}getExtension(){return this.selectedMime.startsWith("audio/webm")?"webm":this.selectedMime.startsWith("audio/ogg")?"ogg":this.selectedMime.startsWith("audio/mp4")?"mp4":"webm"}startListening(){return h(this,null,function*(){if(this.state_$()===a.stopped)try{let e=d.getMediaRecordingAvailability();if(!e.supported){let n=`Media recording not available (reason: ${e.reason??"unknown"})`,l=new Error(n);throw l.code="CCAP_MEDIA_NOT_AVAILABLE",l}let t=null;try{let n=navigator.mediaDevices.getUserMedia({audio:{echoCancellation:!0,noiseSuppression:!0,autoGainControl:!0,channelCount:1}}),l=new Promise((c,g)=>{t=setTimeout(()=>{let u=new Error(`getUserMedia timed out after ${this.getUserMediaTimeoutMs}ms`);u.code="CCAP_MIC_TIMEOUT",g(u)},this.getUserMediaTimeoutMs)});this.mediaStream=yield Promise.race([n,l])}catch(n){throw d.wrapGetUserMediaError(n)}finally{t!==null&&clearTimeout(t)}let i=this.mediaStream.getAudioTracks()[0];i&&(r.DyFM_Log.info("[CCAP] mic track settings",i.getSettings()),i.onended=()=>{r.DyFM_Log.info("[CCAP] mic track ended unexpectedly"),this.stopListening(),this.onErrorCb?.(new Error("Microphone track ended unexpectedly (device disconnected?)"))}),this.registerDeviceChangeListener(),this.selectedMime=this.selectMime(),this.startVolumeLoop(),this.state_$.set(a.standby)}catch(e){throw this.state_$.set(a.stopped),e}})}stopListening(){let e=this.state_$()===a.running;e&&this.stopCapture(!0),this.stopVolumeLoop(),e||this.stopMediaRecorder(),this.silenceStartTime=null,this.unregisterDeviceChangeListener(),this.mediaStream&&(this.mediaStream.getTracks().forEach(t=>t.stop()),this.mediaStream=null),this.state_$.set(a.stopped)}startCapture(){return h(this,null,function*(){try{if(this.mediaStream==null&&(yield this.startListening()),this.mediaStream==null)return;this.silenceStartTime=null,this.chunks=[],this.createAndStartRecorder(),this.state_$.set(a.running)}catch(e){this.stopVolumeLoop(),this.state_$.set(a.stopped),this.onErrorCb?.(e)}})}stopCapture(e=!1,t=!1){if(this.isRestartingForFlush=!1,!(this.mediaRecorder==null||this.state_$()!==a.running)){try{this.mediaRecorder.stop()}catch(i){r.DyFM_Log.info("[CCAP] mediaRecorder.stop() failed (likely already inactive)",i),this.mediaRecorder=null,this.flushChunksAsSegment(e),this.state_$.set(this.mediaStream?a.standby:a.stopped);return}if(t){this.mediaRecorder=null,this.flushChunksAsSegment(e),this.state_$.set(this.mediaStream?a.standby:a.stopped);return}this.mediaRecorder.onstop=()=>{this.mediaRecorder=null,this.flushChunksAsSegment(e),this.state_$.set(this.mediaStream?a.standby:a.stopped)}}}createAndStartRecorder(){this.mediaStream&&(this.mediaRecorder=new MediaRecorder(this.mediaStream,{mimeType:this.selectedMime,audioBitsPerSecond:128e3}),this.mediaRecorder.ondataavailable=e=>{if(e.data.size>0&&this.chunks.push(e.data),this.state_$()!==a.running||this.isRestartingForFlush)return;let t=this.chunks.length>=this.segmentMaxChunks,i=this.chunks.length>=this.segmentSoftFlushMinChunks&&this.silenceStartTime!==null;(t||i)&&this.restartRecorderForFlush()},this.mediaRecorder.start(this.timesliceMs))}restartRecorderForFlush(){if(!(!this.mediaRecorder||this.mediaRecorder.state==="inactive")){this.isRestartingForFlush=!0,this.silenceStartTime=null,r.DyFM_Log.info("[CCAP] restartRecorderForFlush: stopping current recorder for mid-recording flush"),this.mediaRecorder.onstop=()=>{this.isRestartingForFlush=!1,this.mediaRecorder=null;let e=this.chunks.length;if(this.flushChunksAsSegment(!1),r.DyFM_Log.info(`[CCAP] restartRecorderForFlush: flushed ${e} chunks as segment`),this.state_$()!==a.running||!this.mediaStream){r.DyFM_Log.info("[CCAP] restartRecorderForFlush: not restarting (state changed or no stream)");return}this.createAndStartRecorder(),r.DyFM_Log.info("[CCAP] restartRecorderForFlush: new recorder started for next segment")};try{this.mediaRecorder.stop()}catch{this.isRestartingForFlush=!1,this.mediaRecorder=null,this.flushChunksAsSegment(!1)}}}flushChunksAsSegment(e){if(this.chunks.length===0)return;let t=new Blob(this.chunks,{type:this.selectedMime}),i={mimeType:this.selectedMime,filename:`audio-${Date.now()}.${this.getExtension()}`,chunkIndex:this.chunkIndex++,isFinal:e};this.chunks=[],this.onChunkCb?.(t,i)}startVolumeLoop(){if(this.mediaStream==null||this.onVolumeCb==null)return;this.audioContext=new AudioContext,this.audioContext.state==="suspended"&&this.audioContext.resume().catch(()=>{}),this.audioContext.onstatechange=()=>{let i=this.audioContext?.state??"unknown";r.DyFM_Log.info("[CCAP] AudioContext state changed:",i),i==="suspended"&&this.state_$()!==a.stopped&&this.audioContext?.resume().catch(()=>{})},this.audioSourceNode=this.audioContext.createMediaStreamSource(this.mediaStream),this.analyser=this.audioContext.createAnalyser(),this.analyser.fftSize=2048,this.analyser.smoothingTimeConstant=.8,this.audioSourceNode.connect(this.analyser);let e=new Float32Array(this.analyser.fftSize),t=()=>{if(this.analyser==null||this.onVolumeCb==null)return;this.analyser.getFloatTimeDomainData(e);let i=0;for(let c=0;c<e.length;c++)i+=Math.abs(e[c]);let n=i/e.length;this.onVolumeCb(n);let l=this.state_$();if(l===a.standby&&n>=this.volumeGate){this.startCapture(),this.volumeAnimationId=requestAnimationFrame(t);return}l===a.running&&!this.isRestartingForFlush&&(n<this.volumeGate?this.silenceStartTime===null?this.silenceStartTime=Date.now():Date.now()-this.silenceStartTime>=this.silenceTimeLimitMs&&(this.stopCapture(),this.silenceStartTime=null):this.silenceStartTime=null),this.volumeAnimationId=requestAnimationFrame(t)};t()}stopVolumeLoop(){this.volumeAnimationId!=null&&(cancelAnimationFrame(this.volumeAnimationId),this.volumeAnimationId=null),this.audioSourceNode=null,this.audioContext!=null&&(this.audioContext.onstatechange=null,this.audioContext.close().catch(()=>{}),this.audioContext=null),this.analyser=null}stopMediaRecorder(){if(this.mediaRecorder!=null&&this.mediaRecorder.state!=="inactive"){try{this.mediaRecorder.stop()}catch{}this.mediaRecorder=null}this.chunks=[],this.isRestartingForFlush=!1}registerDeviceChangeListener(){try{this.deviceChangeHandler=()=>{r.DyFM_Log.info("[CCAP] media device change detected")},navigator.mediaDevices.addEventListener("devicechange",this.deviceChangeHandler)}catch{this.deviceChangeHandler=null}}unregisterDeviceChangeListener(){if(this.deviceChangeHandler){try{navigator.mediaDevices.removeEventListener("devicechange",this.deviceChangeHandler)}catch{}this.deviceChangeHandler=null}}static \u0275fac=function(t){return new(t||o)};static \u0275prov=m({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})();export{a,d as b,z as c};
2
- //# sourceMappingURL=chunk-QPEW5PI4.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["src/app/_enums/ccap-sound-recorder-state.enum.ts", "src/app/_collections/utils/media-recording/media-recording.util.ts", "src/app/_services/control-services/ccap-sound-recorder.control-service.ts"],
4
- "sourcesContent": ["/**\n * Hangfelvétel állapot típusok.\n * Felvételi állapot: stopped = inaktív, standby = figyelés (várakozás beszédre),\n * running = rögzítés aktív.\n */\nexport enum CCAP_SoundRecorderState_State {\n stopped = 'stopped',\n standby = 'standby',\n running = 'running',\n}\n", "import { CCAP_MediaRecordingAvailability_Interface } from './media-recording.util.interface';\n\n/** Reason → felhasználóbarát üzenet (UI inline / tooltip). */\nconst MEDIA_UNAVAILABLE_MESSAGE_MAP: Record<string, string> = {\n navigator_unavailable:\n 'A hangfelvétel nem elérhető: a böngésző környezet nem támogatja a navigator API-t.',\n media_devices_unavailable:\n 'A hangfelvétel nem elérhető: a böngésző ezen az oldalon nem ad hozzáférést a mikrofonhoz.',\n secure_context_required:\n 'A hangfelvétel ezen az oldalon nem elérhető: a böngésző csak biztonságos kapcsolatban ' +\n '(HTTPS vagy localhost) engedélyezi a mikrofont.',\n};\n\n/** Reason esetén megjeleníthető rövid megoldás (HTTPS/localhost), üres ha nincs ilyen. */\nconst MEDIA_UNAVAILABLE_HINT_MAP: Record<string, string> = {\n media_devices_unavailable:\n 'A mikrofonhoz használd az alkalmazást HTTPS címen (pl. https://localhost:39051) vagy localhost-on.',\n secure_context_required:\n 'A mikrofonhoz használd az alkalmazást HTTPS címen (pl. https://localhost:39051) vagy localhost-on.',\n};\n\n/**\n * Media recording util: mikrofon elérhetőség, hibaüzenetek, hint szövegek, getUserMedia hiba-wrapping.\n */\nexport class CCAP_MediaRecording_Util {\n\n/**\n * getUserMedia DOMException / Error → strukturált diagnosztikai Error wrapper-be csomagolás.\n * A böngésző getUserMedia hívása DOMException-t dob (NotAllowedError, NotFoundError stb.),\n * ami gyakran stack nélkül érkezik; ez a wrapper saját stack-et biztosít, egyedi error code-ot\n * ad (CCAP_MIC_*), és az eredetit cause-ként tartja meg a lánc számára.\n */\nstatic wrapGetUserMediaError(err: unknown): Error & { code: string } {\n // Ha az error már CCAP_ kóddal rendelkezik (pl. timeout), közvetlenül visszaadjuk (dupla wrap elkerülése).\n if (\n err instanceof Error\n && 'code' in err\n && typeof (err as Record<string, unknown>).code === 'string'\n && ((err as Record<string, unknown>).code as string).startsWith('CCAP_')\n ) {\n return err as Error & { code: string };\n }\n\n // DOMException.name azonosítja a hiba típusát (W3C MediaDevices spec).\n const name: string = (err instanceof DOMException || err instanceof Error)\n ? err.name\n : 'UnknownError';\n\n let code: string;\n let message: string;\n\n switch (name) {\n case 'NotAllowedError':\n code = 'CCAP_MIC_PERMISSION_DENIED';\n message = 'Microphone access denied by user or browser policy';\n break;\n case 'NotFoundError':\n code = 'CCAP_MIC_NOT_FOUND';\n message = 'No microphone device found on this device';\n break;\n case 'NotReadableError':\n code = 'CCAP_MIC_NOT_READABLE';\n message = 'Microphone hardware error or device already in use by another application';\n break;\n case 'OverconstrainedError':\n code = 'CCAP_MIC_OVERCONSTRAINED';\n message = 'Microphone does not support the requested audio constraints';\n break;\n case 'AbortError':\n code = 'CCAP_MIC_ABORTED';\n message = 'Microphone access request was aborted by the system';\n break;\n case 'SecurityError':\n code = 'CCAP_MIC_SECURITY_ERROR';\n message = 'Microphone access blocked by document security policy (Permissions-Policy / iframe)';\n break;\n default:\n code = 'CCAP_MIC_UNKNOWN_ERROR';\n message = `getUserMedia failed with ${name}`;\n break;\n }\n\n const wrapped: Error & { code: string } = new Error(message) as Error & { code: string };\n wrapped.code = code;\n wrapped.cause = err;\n return wrapped;\n}\n\n/**\n * getUserMedia error name → user-facing üzenet (Hunglish, notification / tooltip).\n * Nem tanácsot ad — leírja, mi történt; hint-et a getGetUserMediaErrorHint adja.\n */\nstatic getGetUserMediaErrorMessage(err: unknown): string {\n const name: string = (err instanceof DOMException || err instanceof Error)\n ? err.name\n : '';\n\n switch (name) {\n case 'NotAllowedError':\n return 'A mikrofon használata nem engedélyezett: a böngésző vagy a felhasználó megtagadta a hozzáférést.';\n case 'NotFoundError':\n return 'Nem található mikrofon ezen az eszközön.';\n case 'NotReadableError':\n return 'A mikrofon nem olvasható: hardverhiba vagy egy másik alkalmazás használja.';\n case 'OverconstrainedError':\n return 'A mikrofon nem támogatja a kért audio beállításokat.';\n case 'AbortError':\n return 'A mikrofon-hozzáférési kérés megszakadt.';\n case 'SecurityError':\n return 'A mikrofon-hozzáférést a biztonsági szabályzat (Permissions-Policy / iframe) blokkolta.';\n default:\n return 'A mikrofon elérése sikertelen (ismeretlen hiba).';\n }\n}\n\n/**\n * getUserMedia error name → hint szöveg, ha van releváns megoldás; egyébként üres string.\n */\nstatic getGetUserMediaErrorHint(err: unknown): string {\n const name: string = (err instanceof DOMException || err instanceof Error)\n ? err.name\n : '';\n\n switch (name) {\n case 'NotAllowedError':\n return 'Engedélyezd a mikrofont a böngésző címsorában (lakat ikon → Mikrofon → Engedélyezés), '\n + 'majd próbáld újra. Androidon: Beállítások → Alkalmazások → Chrome → Engedélyek → Mikrofon.';\n case 'NotReadableError':\n return 'Zárd be a mikrofont használó másik alkalmazást (pl. videóhívás, diktafon), majd próbáld újra.';\n case 'SecurityError':\n return 'Ha az alkalmazás iframe-ben fut, az iframe-nek \"allow=microphone\" attribútumra van szüksége.';\n default:\n return '';\n }\n}\n\n/**\n * Ellenőrzi, hogy a böngésző környezetben elérhető-e a hangfelvétel (navigator.mediaDevices).\n * Secure context (HTTPS vagy localhost) szükséges a mikrofonhoz; HTTP-n mobilon/desktopon undefined.\n * A reason értékek: navigator_unavailable | media_devices_unavailable | secure_context_required.\n */\nstatic getMediaRecordingAvailability(): CCAP_MediaRecordingAvailability_Interface {\n if (typeof navigator === 'undefined') {\n return { supported: false, reason: 'navigator_unavailable' };\n }\n // HTTP + LAN IP: a böngésző gyakran elrejti a mediaDevices-t; előbb secure context, hogy a reason pontos legyen.\n if (typeof window !== 'undefined' && window.isSecureContext === false) {\n return { supported: false, reason: 'secure_context_required' };\n }\n if (navigator.mediaDevices == null) {\n return { supported: false, reason: 'media_devices_unavailable' };\n }\n return { supported: true };\n}\n\n/**\n * Technikai üzenet a hibalistába (reportError): reason + rövid megoldás.\n */\nstatic getMediaUnavailableReportMessage(reason: string): string {\n return `Media recording not available (reason: ${reason}). Use HTTPS or localhost for microphone access.`;\n}\n\n/**\n * Megoldás-hint a felhasználónak (UI), ha a reason miatt HTTPS/localhost kell; egyébként üres string.\n */\nstatic getMediaUnavailableHint(reason: string): string {\n return MEDIA_UNAVAILABLE_HINT_MAP[reason] ?? '';\n}\n\n/**\n * Capability reason-ból user-facing üzenet (Hunglish).\n */\nstatic getMediaUnavailableMessage(reason: string): string {\n return MEDIA_UNAVAILABLE_MESSAGE_MAP[reason] ?? 'A hangfelvétel nem elérhető ezen az oldalon.';\n}\n\n}\n", "import { Injectable, signal } from '@angular/core';\n\nimport { DyFM_Log, second } from '@futdevpro/fsm-dynamo';\n\nimport { CCAP_SoundRecorderState_State } from '../../_enums/ccap-sound-recorder-state.enum';\nimport { CCAP_MediaRecording_Util } from '../../_collections/utils/media-recording/media-recording.util';\nimport { CCAP_SoundRecorderChunkMeta_Interface } from './ccap-sound-recorder-chunk-meta.interface';\n\n/** MIME típusok sorrendje (első támogatottat használjuk). */\nconst MIME_CANDIDATES: string[] = [\n 'audio/webm;codecs=opus',\n 'audio/webm',\n 'audio/ogg;codecs=opus',\n 'audio/ogg',\n 'audio/mp4',\n];\n\n/**\n * Sound recorder control service.\n * Mikrofon felvétel MediaRecorder-rel; chunk és volume callback.\n * Állapot: stopped | standby | running.\n * Android/mobile támogatás: explicit getUserMedia constraints, track.onended figyelés,\n * AudioContext state kezelés, devicechange listener, getUserMedia timeout.\n */\n@Injectable({ providedIn: 'root' })\nexport class CCAP_SoundRecorder_ControlService {\n\n /** VLA küszöb (time-domain átlag); ha volume >= gate, beszédnek tekintjük. */\n readonly volumeGate: number = 0.05;\n\n /** Csend időtartam (ms), után standby-ba váltunk running-ból. */\n readonly silenceTimeLimitMs: number = 5 * second;\n\n /** MediaRecorder timeslice: ondataavailable intervallum (ms). */\n private readonly timesliceMs: number = 5 * second;\n\n /** Max chunk szám szegmensenként; ha eléri, mid-recording flush (6 × 5s = 30s). */\n private readonly segmentMaxChunks: number = 6;\n\n /** Puha szegmens határ: min chunk szám ahonnan csend alapú flush érvényesül (4 × 5s = 20s). */\n private readonly segmentSoftFlushMinChunks: number = 4;\n\n /** getUserMedia timeout (ms); Samsung Knox és egyéb Android device-okon a hívás akadhat. */\n private readonly getUserMediaTimeoutMs: number = 15 * second;\n\n /** Jelenlegi állapot. */\n readonly state_$ = signal<CCAP_SoundRecorderState_State>(CCAP_SoundRecorderState_State.stopped);\n\n private mediaStream: MediaStream | null = null;\n private mediaRecorder: MediaRecorder | null = null;\n private audioContext: AudioContext | null = null;\n private analyser: AnalyserNode | null = null;\n /** AudioContext source node referencia: GC-védelem (lokálisként egyes WebView-kban eltávolítható). */\n private audioSourceNode: MediaStreamAudioSourceNode | null = null;\n private volumeAnimationId: number | null = null;\n private chunkIndex: number = 0;\n private chunks: Blob[] = [];\n /**\n * True amíg mid-recording flush (restartRecorderForFlush) zajlik: a stop() után az onstop\n * handler flush-olja a chunks-ot és új recorder-t indít. Eközben az ondataavailable nem\n * vizsgálja a flush feltételt.\n */\n private isRestartingForFlush: boolean = false;\n private selectedMime: string = '';\n private onChunkCb: ((blob: Blob, meta: CCAP_SoundRecorderChunkMeta_Interface) => void) | null = null;\n private onVolumeCb: ((value: number) => void) | null = null;\n /** Hiba esetén meghívandó callback (pl. voice-notes-poc → hibalista); aszinkron hibák (volume loop startCapture). */\n private onErrorCb: ((err: unknown) => void) | null = null;\n /** devicechange listener referencia a cleanup-hoz. */\n private deviceChangeHandler: (() => void) | null = null;\n\n /** Csend kezdete (ms); VLA running→standby időzítőhöz. */\n private silenceStartTime: number | null = null;\n\n /**\n * Chunk callback beállítása (minden szegmens után hívódik).\n */\n setOnChunk(cb: (blob: Blob, meta: CCAP_SoundRecorderChunkMeta_Interface) => void): void {\n this.onChunkCb = cb;\n }\n\n /**\n * Volume callback beállítása (0..1; volume gate indikátorhoz).\n */\n setOnVolume(cb: (value: number) => void): void {\n this.onVolumeCb = cb;\n }\n\n /**\n * Hiba callback beállítása (pl. voice-notes-poc: showError → reportError a szerverre).\n * A volume loop-ból induló startCapture hibáinál hívódik, hogy a hiba a hibalistába kerüljön.\n */\n setOnError(cb: (err: unknown) => void): void {\n this.onErrorCb = cb;\n }\n\n /**\n * Támogatott MIME kiválasztása (első a listából, amit a böngésző támogat).\n */\n private selectMime(): string {\n for (const mime of MIME_CANDIDATES) {\n if (MediaRecorder.isTypeSupported(mime)) {\n return mime;\n }\n }\n return 'audio/webm';\n }\n\n /**\n * Fájlnév kiterjesztés MIME alapján.\n */\n private getExtension(): string {\n if (this.selectedMime.startsWith('audio/webm')) return 'webm';\n if (this.selectedMime.startsWith('audio/ogg')) return 'ogg';\n if (this.selectedMime.startsWith('audio/mp4')) return 'mp4';\n return 'webm';\n }\n\n /**\n * Figyelés indítása (standby): mikrofon stream, volume callback indul.\n * Rögzítés még nem indul; startCapture() indítja.\n * getUserMedia explicit audio constraints-szel hívódik (echoCancellation, noiseSuppression,\n * autoGainControl, channelCount) — Android/mobile eszközöknél fontos.\n * Timeout-tal védett (getUserMediaTimeoutMs) Samsung Knox és hasonló esetek ellen.\n * Track ended + devicechange listener-eket regisztrál; hiba esetén wrapGetUserMediaError.\n */\n async startListening(): Promise<void> {\n if (this.state_$() !== CCAP_SoundRecorderState_State.stopped) {\n return;\n }\n try {\n const availability = CCAP_MediaRecording_Util.getMediaRecordingAvailability();\n if (!availability.supported) {\n const msg: string =\n `Media recording not available (reason: ${availability.reason ?? 'unknown'})`;\n const err: Error & { code?: string } = new Error(msg);\n err.code = 'CCAP_MEDIA_NOT_AVAILABLE';\n throw err;\n }\n // getUserMedia explicit constraints-szel + timeout védelem.\n // A timeout-ot clearTimeout-tal takarítjuk, hogy ne maradjon orphaned reject a tesztben.\n let getUserMediaTimeoutId: ReturnType<typeof setTimeout> | null = null;\n try {\n const mediaPromise: Promise<MediaStream> = navigator.mediaDevices.getUserMedia({\n audio: {\n echoCancellation: true,\n noiseSuppression: true,\n autoGainControl: true,\n channelCount: 1,\n },\n });\n const timeoutPromise: Promise<never> = new Promise<never>(\n (_resolve: (value: never) => void, reject: (reason: unknown) => void): void => {\n getUserMediaTimeoutId = setTimeout((): void => {\n const err: Error & { code?: string } = new Error(\n `getUserMedia timed out after ${this.getUserMediaTimeoutMs}ms`,\n ) as Error & { code?: string };\n err.code = 'CCAP_MIC_TIMEOUT';\n reject(err);\n }, this.getUserMediaTimeoutMs);\n },\n );\n this.mediaStream = await Promise.race([mediaPromise, timeoutPromise]);\n } catch (mediaErr: unknown) {\n throw CCAP_MediaRecording_Util.wrapGetUserMediaError(mediaErr);\n } finally {\n if (getUserMediaTimeoutId !== null) {\n clearTimeout(getUserMediaTimeoutId);\n }\n }\n // Track settings diagnosztika (Android-on a tényleges settings eltérhet a kérttől).\n const audioTrack: MediaStreamTrack | undefined = this.mediaStream.getAudioTracks()[0];\n if (audioTrack) {\n DyFM_Log.info('[CCAP] mic track settings', audioTrack.getSettings());\n // Track ended figyelés: BT disconnect, hardver hiba, OS-szintű mikrofon visszavonás.\n audioTrack.onended = (): void => {\n DyFM_Log.info('[CCAP] mic track ended unexpectedly');\n this.stopListening();\n this.onErrorCb?.(new Error('Microphone track ended unexpectedly (device disconnected?)'));\n };\n }\n // Device change figyelés (BT device csatlakozás/lecsatlakozás diagnosztika).\n this.registerDeviceChangeListener();\n this.selectedMime = this.selectMime();\n this.startVolumeLoop();\n this.state_$.set(CCAP_SoundRecorderState_State.standby);\n } catch (err: unknown) {\n this.state_$.set(CCAP_SoundRecorderState_State.stopped);\n throw err;\n }\n }\n\n /**\n * Figyelés és rögzítés leállítása; stream felszabadítása.\n * Ha running állapotban vagyunk, stopCapture aszinkron módban (isFinalStop=true): a mediaRecorder.stop()\n * triggereli az utolsó ondataavailable-t (a bufferelt hang), majd az onstop flush-olja a chunks-ot.\n * A szinkron flush NEM használható itt, mert a mediaRecorder.stop() utáni utolsó ondataavailable\n * aszinkron jön — szinkron flush-sal a bufferelt hang elveszne.\n */\n stopListening(): void {\n const wasRunning: boolean = this.state_$() === CCAP_SoundRecorderState_State.running;\n if (wasRunning) {\n // isFinalStop=true: a user megállította a felvételt; synchronous=false (default): onstop flush.\n this.stopCapture(true);\n }\n this.stopVolumeLoop();\n if (!wasRunning) {\n this.stopMediaRecorder();\n }\n this.silenceStartTime = null;\n this.unregisterDeviceChangeListener();\n if (this.mediaStream) {\n this.mediaStream.getTracks().forEach((t: MediaStreamTrack): void => t.stop());\n this.mediaStream = null;\n }\n this.state_$.set(CCAP_SoundRecorderState_State.stopped);\n }\n\n /**\n * Rögzítés indítása (standby-ból VLA vagy manuálisan). Ha még nincs stream, startListening előbb.\n * Hiba esetén (pl. getUserMedia/MediaRecorder telefonon) onErrorCb hívása, állapot stopped,\n * és stopVolumeLoop (resource leak elkerülés ha startCapture hiba után state=stopped).\n */\n async startCapture(): Promise<void> {\n try {\n if (this.mediaStream == null) {\n await this.startListening();\n }\n if (this.mediaStream == null) {\n return;\n }\n this.silenceStartTime = null;\n this.chunks = [];\n this.createAndStartRecorder();\n this.state_$.set(CCAP_SoundRecorderState_State.running);\n } catch (err: unknown) {\n // Resource leak elkerülés: volume loop leállítása ha startCapture hibázik.\n this.stopVolumeLoop();\n this.state_$.set(CCAP_SoundRecorderState_State.stopped);\n this.onErrorCb?.(err);\n }\n }\n\n /**\n * Rögzítés leállítása; chunk összeállítása és callback hívása.\n * isFinalStop: true ha a user explicit megállította a felvételt (stopListening) — a consumer\n * komponensek (auto-send) ezt használják az utolsó chunk küldéséhez.\n * synchronous: true esetén a flush szinkronban fut (nem async onstop-ban) — ngOnDestroy race fix.\n * try-catch a mediaRecorder.stop()-on: ha a recorder már inactive (race: silence + user stop egyszerre).\n */\n stopCapture(isFinalStop: boolean = false, synchronous: boolean = false): void {\n this.isRestartingForFlush = false;\n if (this.mediaRecorder == null || this.state_$() !== CCAP_SoundRecorderState_State.running) {\n return;\n }\n // mediaRecorder.stop() InvalidStateError-t dobhat ha a recorder már inactive (race condition).\n try {\n this.mediaRecorder.stop();\n } catch (stopErr: unknown) {\n DyFM_Log.info('[CCAP] mediaRecorder.stop() failed (likely already inactive)', stopErr);\n this.mediaRecorder = null;\n this.flushChunksAsSegment(isFinalStop);\n this.state_$.set(\n this.mediaStream\n ? CCAP_SoundRecorderState_State.standby\n : CCAP_SoundRecorderState_State.stopped,\n );\n return;\n }\n // Szinkron mód: flush most (stopListening-ből hívva), hogy az ngOnDestroy callback cseréje előtt megtörténjen.\n if (synchronous) {\n this.mediaRecorder = null;\n this.flushChunksAsSegment(isFinalStop);\n this.state_$.set(\n this.mediaStream\n ? CCAP_SoundRecorderState_State.standby\n : CCAP_SoundRecorderState_State.stopped,\n );\n return;\n }\n // Aszinkron mód (silence detection hívja): az onstop event flush-olja a chunks-ot.\n this.mediaRecorder.onstop = (): void => {\n this.mediaRecorder = null;\n this.flushChunksAsSegment(isFinalStop);\n this.state_$.set(\n this.mediaStream\n ? CCAP_SoundRecorderState_State.standby\n : CCAP_SoundRecorderState_State.stopped,\n );\n };\n }\n\n /**\n * MediaRecorder létrehozása és indítása a meglévő stream-mel.\n * Közös logika startCapture és restartRecorderForFlush között.\n */\n private createAndStartRecorder(): void {\n if (!this.mediaStream) {\n return;\n }\n this.mediaRecorder = new MediaRecorder(this.mediaStream, {\n mimeType: this.selectedMime,\n audioBitsPerSecond: 128000,\n });\n this.mediaRecorder.ondataavailable = (ev: BlobEvent): void => {\n if (ev.data.size > 0) {\n this.chunks.push(ev.data);\n }\n // Mid-flush restart közben vagy nem running állapotban: flush feltétel nem vizsgálandó.\n if (this.state_$() !== CCAP_SoundRecorderState_State.running || this.isRestartingForFlush) {\n return;\n }\n // Hard szegmens határ (max chunks elérve) → flush.\n const reachedMax: boolean = this.chunks.length >= this.segmentMaxChunks;\n // Puha szegmens határ: elég chunk gyűlt és csend van → szóhatáron vágunk, nem szó közepén.\n const isSoftFlush: boolean = this.chunks.length >= this.segmentSoftFlushMinChunks\n && this.silenceStartTime !== null;\n if (reachedMax || isSoftFlush) {\n this.restartRecorderForFlush();\n }\n };\n this.mediaRecorder.start(this.timesliceMs);\n }\n\n /**\n * Mid-recording flush: MediaRecorder újraindítása a meglévő stream-mel.\n * A stop() triggereli az utolsó ondataavailable-t (bufferelt hang), majd onstop-ban flush + új\n * recorder indítás. Ez biztosítja, hogy minden szegmens saját WebM init szegmenst kap (EBML header +\n * Segment + Tracks) és a Cluster timestamp-ek 0-tól indulnak.\n */\n private restartRecorderForFlush(): void {\n if (!this.mediaRecorder || this.mediaRecorder.state === 'inactive') {\n return;\n }\n this.isRestartingForFlush = true;\n // Silence timer reset: a restart utáni új recorder friss csendidőzítőt kap.\n // Ha nem töröljük, a volume loop tick a régi silenceStartTime-mal azonnal stopCapture-t hívna,\n // mert Date.now() - silenceStartTime >= 5000ms már igaz a flush előtti csendből.\n this.silenceStartTime = null;\n DyFM_Log.info('[CCAP] restartRecorderForFlush: stopping current recorder for mid-recording flush');\n this.mediaRecorder.onstop = (): void => {\n this.isRestartingForFlush = false;\n this.mediaRecorder = null;\n const chunkCount: number = this.chunks.length;\n this.flushChunksAsSegment(false);\n DyFM_Log.info(`[CCAP] restartRecorderForFlush: flushed ${chunkCount} chunks as segment`);\n // Ha közben stopListening hívódott (state nem running), nem indítunk új recorder-t.\n if (this.state_$() !== CCAP_SoundRecorderState_State.running || !this.mediaStream) {\n DyFM_Log.info('[CCAP] restartRecorderForFlush: not restarting (state changed or no stream)');\n return;\n }\n this.createAndStartRecorder();\n DyFM_Log.info('[CCAP] restartRecorderForFlush: new recorder started for next segment');\n };\n try {\n this.mediaRecorder.stop();\n } catch {\n // MediaRecorder már inactive — kézi flush.\n this.isRestartingForFlush = false;\n this.mediaRecorder = null;\n this.flushChunksAsSegment(false);\n }\n }\n\n /**\n * Aktuális chunks[] blob-ba összeáll, onChunkCb hívás, chunks ürítés.\n * isFinal: true ha a user megállította a felvételt; false mid-recording és silence flush esetén.\n */\n private flushChunksAsSegment(isFinal: boolean): void {\n if (this.chunks.length === 0) {\n return;\n }\n const blob: Blob = new Blob(this.chunks, { type: this.selectedMime });\n const meta: CCAP_SoundRecorderChunkMeta_Interface = {\n mimeType: this.selectedMime,\n filename: `audio-${Date.now()}.${this.getExtension()}`,\n chunkIndex: this.chunkIndex++,\n isFinal: isFinal,\n };\n this.chunks = [];\n this.onChunkCb?.(blob, meta);\n }\n\n /**\n * Volume loop indítása: AudioContext + AnalyserNode, requestAnimationFrame tick.\n * AudioContext onstatechange: suspended állapot kezelése (háttér tab, Android audio focus loss).\n * Explicit resume() hívás: Android WebView-ban a new AudioContext() suspended állapotba kerülhet\n * ha a user gesture context lejárt (pl. az await getUserMedia() után). Az onstatechange nem tüzel\n * ha már eleve suspended — ezért kell explicit resume().\n */\n private startVolumeLoop(): void {\n if (this.mediaStream == null || this.onVolumeCb == null) {\n return;\n }\n this.audioContext = new AudioContext();\n // Android WebView: AudioContext suspended-ként jöhet létre ha a user gesture context lejárt.\n // Explicit resume() szükséges — az onstatechange nem tüzel ha nincs állapotváltás.\n if (this.audioContext.state === 'suspended') {\n void this.audioContext.resume().catch((): void => {});\n }\n // AudioContext state változás figyelés (Android háttérbe rakás, audio focus loss).\n this.audioContext.onstatechange = (): void => {\n const ctxState: string = this.audioContext?.state ?? 'unknown';\n DyFM_Log.info('[CCAP] AudioContext state changed:', ctxState);\n if (ctxState === 'suspended' && this.state_$() !== CCAP_SoundRecorderState_State.stopped) {\n void this.audioContext?.resume().catch((): void => {});\n }\n };\n // Source node class field-ben tároljuk (nem lokális változóban): egyes Android WebView-kban\n // a lokális referencia GC-elődhet és az audio graph szakad.\n this.audioSourceNode =\n this.audioContext.createMediaStreamSource(this.mediaStream);\n this.analyser = this.audioContext.createAnalyser();\n this.analyser.fftSize = 2048;\n this.analyser.smoothingTimeConstant = 0.8;\n this.audioSourceNode.connect(this.analyser);\n const timeDomainArray: Float32Array = new Float32Array(this.analyser.fftSize);\n\n const tick = (): void => {\n if (this.analyser == null || this.onVolumeCb == null) {\n return;\n }\n this.analyser.getFloatTimeDomainData(timeDomainArray);\n let sum: number = 0;\n for (let i: number = 0; i < timeDomainArray.length; i++) {\n sum += Math.abs(timeDomainArray[i]);\n }\n const volume: number = sum / timeDomainArray.length;\n this.onVolumeCb(volume);\n\n const state = this.state_$();\n if (state === CCAP_SoundRecorderState_State.standby && volume >= this.volumeGate) {\n void this.startCapture();\n this.volumeAnimationId = requestAnimationFrame(tick);\n return;\n }\n if (state === CCAP_SoundRecorderState_State.running && !this.isRestartingForFlush) {\n if (volume < this.volumeGate) {\n if (this.silenceStartTime === null) {\n this.silenceStartTime = Date.now();\n } else if (Date.now() - this.silenceStartTime >= this.silenceTimeLimitMs) {\n // Silence detection: isFinalStop=false (nem user stop), synchronous=false (aszinkron onstop).\n this.stopCapture();\n this.silenceStartTime = null;\n }\n } else {\n this.silenceStartTime = null;\n }\n }\n\n this.volumeAnimationId = requestAnimationFrame(tick);\n };\n tick();\n }\n\n /**\n * Volume loop leállítása: cancelAnimationFrame, AudioContext close, analyser null.\n */\n private stopVolumeLoop(): void {\n if (this.volumeAnimationId != null) {\n cancelAnimationFrame(this.volumeAnimationId);\n this.volumeAnimationId = null;\n }\n this.audioSourceNode = null;\n if (this.audioContext != null) {\n this.audioContext.onstatechange = null;\n this.audioContext.close().catch((): void => {});\n this.audioContext = null;\n }\n this.analyser = null;\n }\n\n /**\n * MediaRecorder leállítása (standby/stopped állapotból hívva).\n * try-catch: ha a recorder state nem egyezik (defense in depth).\n */\n private stopMediaRecorder(): void {\n if (this.mediaRecorder != null && this.mediaRecorder.state !== 'inactive') {\n try {\n this.mediaRecorder.stop();\n } catch {\n // MediaRecorder már inactive — figyelmen kívül hagyjuk.\n }\n this.mediaRecorder = null;\n }\n this.chunks = [];\n this.isRestartingForFlush = false;\n }\n\n /**\n * Device change listener regisztrálása (BT device csatlakozás/lecsatlakozás diagnosztika).\n * try-catch: nem minden böngésző/teszt környezet támogatja az addEventListener-t a mediaDevices-en.\n */\n private registerDeviceChangeListener(): void {\n try {\n this.deviceChangeHandler = (): void => {\n DyFM_Log.info('[CCAP] media device change detected');\n };\n navigator.mediaDevices.addEventListener('devicechange', this.deviceChangeHandler);\n } catch {\n this.deviceChangeHandler = null;\n }\n }\n\n /**\n * Device change listener eltávolítása.\n */\n private unregisterDeviceChangeListener(): void {\n if (this.deviceChangeHandler) {\n try {\n navigator.mediaDevices.removeEventListener('devicechange', this.deviceChangeHandler);\n } catch {\n // Figyelmen kívül hagyjuk — nem minden környezetben elérhető.\n }\n this.deviceChangeHandler = null;\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["CCAP_SoundRecorderState_State", "MEDIA_UNAVAILABLE_MESSAGE_MAP", "navigator_unavailable", "media_devices_unavailable", "secure_context_required", "MEDIA_UNAVAILABLE_HINT_MAP", "CCAP_MediaRecording_Util", "wrapGetUserMediaError", "err", "Error", "code", "startsWith", "name", "DOMException", "message", "wrapped", "cause", "getGetUserMediaErrorMessage", "getGetUserMediaErrorHint", "getMediaRecordingAvailability", "navigator", "supported", "reason", "window", "isSecureContext", "mediaDevices", "getMediaUnavailableReportMessage", "getMediaUnavailableHint", "getMediaUnavailableMessage", "import_fsm_dynamo", "MIME_CANDIDATES", "CCAP_SoundRecorder_ControlService", "volumeGate", "silenceTimeLimitMs", "second", "timesliceMs", "segmentMaxChunks", "segmentSoftFlushMinChunks", "getUserMediaTimeoutMs", "state_$", "signal", "CCAP_SoundRecorderState_State", "stopped", "mediaStream", "mediaRecorder", "audioContext", "analyser", "audioSourceNode", "volumeAnimationId", "chunkIndex", "chunks", "isRestartingForFlush", "selectedMime", "onChunkCb", "onVolumeCb", "onErrorCb", "deviceChangeHandler", "silenceStartTime", "setOnChunk", "cb", "setOnVolume", "setOnError", "selectMime", "mime", "MediaRecorder", "isTypeSupported", "getExtension", "startsWith", "startListening", "__async", "availability", "CCAP_MediaRecording_Util", "getMediaRecordingAvailability", "supported", "msg", "reason", "err", "Error", "code", "getUserMediaTimeoutId", "mediaPromise", "navigator", "mediaDevices", "getUserMedia", "audio", "echoCancellation", "noiseSuppression", "autoGainControl", "channelCount", "timeoutPromise", "Promise", "_resolve", "reject", "setTimeout", "race", "mediaErr", "wrapGetUserMediaError", "clearTimeout", "audioTrack", "getAudioTracks", "DyFM_Log", "info", "getSettings", "onended", "stopListening", "registerDeviceChangeListener", "startVolumeLoop", "set", "standby", "wasRunning", "running", "stopCapture", "stopVolumeLoop", "stopMediaRecorder", "unregisterDeviceChangeListener", "getTracks", "forEach", "t", "stop", "startCapture", "createAndStartRecorder", "isFinalStop", "synchronous", "stopErr", "flushChunksAsSegment", "onstop", "mimeType", "audioBitsPerSecond", "ondataavailable", "ev", "data", "size", "push", "reachedMax", "length", "isSoftFlush", "restartRecorderForFlush", "start", "state", "chunkCount", "isFinal", "blob", "Blob", "type", "meta", "filename", "Date", "now", "AudioContext", "resume", "catch", "onstatechange", "ctxState", "createMediaStreamSource", "createAnalyser", "fftSize", "smoothingTimeConstant", "connect", "timeDomainArray", "Float32Array", "tick", "getFloatTimeDomainData", "sum", "i", "Math", "abs", "volume", "requestAnimationFrame", "cancelAnimationFrame", "close", "addEventListener", "removeEventListener", "factory", "\u0275fac", "providedIn"]
7
- }
@@ -1,3 +0,0 @@
1
- import"./chunk-EGRHWZRV.js";import{a as Ve}from"./chunk-Q2PKIGLB.js";import{a as we}from"./chunk-TOFOK5W7.js";import{a as Ie,b as X}from"./chunk-IINV7GMO.js";import"./chunk-QPEW5PI4.js";import{g as Re}from"./chunk-7HSUCNW5.js";import"./chunk-CRYF37M7.js";import"./chunk-7JUIBZEE.js";import{a as Pe,b as Ee,c as q}from"./chunk-C7XPBJTG.js";import{b as te,f as ke,g as Ae}from"./chunk-JMZKJLUE.js";import"./chunk-WPHEQXWB.js";import{b as Me}from"./chunk-VGTXKD6D.js";import"./chunk-DJVWZQNB.js";import"./chunk-MZLFEWAN.js";import"./chunk-OEEQNIJG.js";import"./chunk-Q2NVIOCY.js";import{a as De}from"./chunk-AX7QIINI.js";import{a as ee}from"./chunk-J32YRK3S.js";import"./chunk-U2EBQMSE.js";import"./chunk-SYCUR4MY.js";import"./chunk-R5WCLLO5.js";import"./chunk-V3VQWJQL.js";import"./chunk-6GSTJE3R.js";import"./chunk-JZHYGU3K.js";import"./chunk-ZBTWQZNB.js";import"./chunk-FLAJXIYW.js";import{b as ve,c as N,f as W,i as B,n as z,o as j,p as H,v as Se}from"./chunk-EO4DNTT4.js";import{k as Te}from"./chunk-KYVIZZWW.js";import{a as V}from"./chunk-5UPNU54P.js";import{j as ye}from"./chunk-7SAFEFWU.js";import{I as $e}from"./chunk-SLSTIBOT.js";import{Aa as he,Ba as me,C as x,D as I,E as se,Eb as xe,Fa as _,Fb as ge,Ga as k,Gb as U,J as m,K as u,Kb as be,L as le,M as de,Z as d,aa as l,ca as ce,da as M,ga as f,ha as _e,hb as b,ia as R,jb as ue,k as C,la as y,na as P,oa as S,p as v,pa as $,q as re,qa as r,ra as s,sa as w,ua as E,ub as fe,va as h,wa as c,xb as Ce,y as F,z as ae,za as pe}from"./chunk-TBMJSIBB.js";var Q="ccap-consultant",T=class{static savePanelOpen(a,e){V.writeBoolean(`${Q}:panelOpen:${a}`,e)}static loadPanelOpen(a,e){return V.readBoolean(`${Q}:panelOpen:${a}`,e)}static savePanelWidth(a,e){V.writeNumber(`${Q}:panelWidth:${a}`,e)}static loadPanelWidth(a,e){return V.readNumber(`${Q}:panelWidth:${a}`,e)}};var Oe=(()=>{class i{baseUrl=`${$e.api.baseUrl}/consultant`;http=x(Ce);listThreads(){return v(this.http.get(this.baseUrl))}getPickerOptions(){return v(this.http.get(`${this.baseUrl}/picker-options`))}createThread(e){return v(this.http.post(this.baseUrl,e))}getThread(e){return v(this.http.get(`${this.baseUrl}/${encodeURIComponent(e)}`))}patchThread(e){let t={};return e.label!=null&&(t.label=e.label),e.providerInstanceId!=null&&(t.providerInstanceId=e.providerInstanceId),e.model!=null&&(t.model=e.model),v(this.http.patch(`${this.baseUrl}/${encodeURIComponent(e.threadId)}`,t))}deleteThread(e){return v(this.http.delete(`${this.baseUrl}/${encodeURIComponent(e)}`))}postMessage(e){return v(this.http.post(`${this.baseUrl}/${encodeURIComponent(e.threadId)}/messages`,{text:e.text,allowWebSearch:e.allowWebSearch,attachments:e.attachments}))}static \u0275fac=function(t){return new(t||i)};static \u0275prov=F({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var G=(()=>{class i{consultant_AS=x(Oe);globalError_CS=x(ye);threads_$=l([]);threadsLoading_$=l(!1);threadsError_$=l(null);selectedThread_$=l(null);selectedThreadLoading_$=l(!1);selectedThreadError_$=l(null);sending_$=l(!1);activeThreadId_$=l("");defaults_$=l({providerInstanceId:"",model:""});pickerOptions_$=l([]);pickerOptionsLoading_$=l(!1);loadPickerOptions(){return C(this,null,function*(){this.pickerOptionsLoading_$.set(!0);try{let e=yield this.consultant_AS.getPickerOptions(),t=Array.isArray(e.entries)?e.entries.map(i.parseRegistryEntry).filter(n=>n!==null):[];this.pickerOptions_$.set(t),this.defaults_$.set({providerInstanceId:typeof e.defaults?.providerInstanceId=="string"?e.defaults.providerInstanceId:"",model:typeof e.defaults?.model=="string"?e.defaults.model:""})}catch(e){this.globalError_CS.showError(e,"Consultant_DataService.loadPickerOptions")}finally{this.pickerOptionsLoading_$.set(!1)}})}loadThreads(){return C(this,null,function*(){this.threadsLoading_$.set(!0),this.threadsError_$.set(null);try{let e=yield this.consultant_AS.listThreads(),n=(Array.isArray(e.threads)?e.threads:[]).map(o=>({threadId:typeof o.threadId=="string"?o.threadId:"",label:typeof o.label=="string"?o.label:"",providerInstanceId:typeof o.providerInstanceId=="string"?o.providerInstanceId:"",model:typeof o.model=="string"?o.model:"",messageCount:typeof o.messageCount=="number"?o.messageCount:0,updatedAt:typeof o.updatedAt=="string"?o.updatedAt:""}));this.threads_$.set(n)}catch(e){this.threadsError_$.set(e),this.globalError_CS.showError(e,"Consultant_DataService.loadThreads")}finally{this.threadsLoading_$.set(!1)}})}loadThreadDetail(e){return C(this,null,function*(){this.activeThreadId_$.set(e),this.selectedThreadLoading_$.set(!0),this.selectedThreadError_$.set(null);try{let t=yield this.consultant_AS.getThread(e),n=i.parseThreadDetail(t.thread);this.selectedThread_$.set(n)}catch(t){this.selectedThreadError_$.set(t),this.globalError_CS.showError(t,"Consultant_DataService.loadThreadDetail")}finally{this.selectedThreadLoading_$.set(!1)}})}sendMessage(e){return C(this,null,function*(){this.sending_$.set(!0);try{let n=(yield this.consultant_AS.postMessage(e)).thread;if(i.isPlainRecord(n)){let o=i.parseThreadDetail(n);this.selectedThread_$.set(o)}yield this.loadThreads()}catch(t){throw this.globalError_CS.showError(t,"Consultant_DataService.sendMessage"),t}finally{this.sending_$.set(!1)}})}updateThreadConfig(e){return C(this,null,function*(){try{let t=yield this.consultant_AS.patchThread(e),n=i.parseThreadDetail(t.thread);this.selectedThread_$.set(n),yield this.loadThreads()}catch(t){throw this.globalError_CS.showError(t,"Consultant_DataService.updateThreadConfig"),t}})}createThread(e){return C(this,null,function*(){try{let n=(yield this.consultant_AS.createThread(e)).thread.threadId,o=typeof n=="string"?n:"";return yield this.loadThreads(),o}catch(t){throw this.globalError_CS.showError(t,"Consultant_DataService.createThread"),t}})}deleteThread(e){return C(this,null,function*(){try{yield this.consultant_AS.deleteThread(e),this.activeThreadId_$()===e&&(this.selectedThread_$.set(null),this.activeThreadId_$.set("")),yield this.loadThreads()}catch(t){throw this.globalError_CS.showError(t,"Consultant_DataService.deleteThread"),t}})}static parseThreadDetail(e){let t=typeof e.threadId=="string"?e.threadId:"";if(!t.length)return null;let n=e.messages,o=[];if(Array.isArray(n))for(let p of n){if(!i.isPlainRecord(p))continue;let A=typeof p.id=="string"?p.id:"",Y=p.role;if(Y!=="user"&&Y!=="assistant")continue;let L={id:A,role:Y};typeof p.rawUserText=="string"&&(L.rawUserText=p.rawUserText),typeof p.content=="string"&&(L.content=p.content);let ie=p.userParts;if(Array.isArray(ie)){let oe=[];for(let D of ie){if(!i.isPlainRecord(D))continue;let J=D.type;if(J!=="text"&&J!=="image_url")continue;let Z={type:J};typeof D.text=="string"&&(Z.text=D.text),typeof D.imageUrl=="string"&&(Z.imageUrl=D.imageUrl),oe.push(Z)}L.userParts=oe}o.push(L)}return{threadId:t,label:typeof e.label=="string"?e.label:"",providerInstanceId:typeof e.providerInstanceId=="string"?e.providerInstanceId:"",model:typeof e.model=="string"?e.model:"",messages:o,updatedAt:typeof e.updatedAt=="string"?e.updatedAt:""}}static isPlainRecord(e){return e!==null&&typeof e=="object"&&!Array.isArray(e)}static parseRegistryEntry(e){if(!i.isPlainRecord(e))return null;let t=typeof e.provider=="string"?e.provider:"",n=typeof e.modelName=="string"?e.modelName:"";if(!t.length||!n.length)return null;let o=e.capabilities,p=Array.isArray(o)?o.filter(A=>typeof A=="string"):void 0;return{id:typeof e.id=="string"?e.id:"",provider:t,modelName:n,enabled:e.enabled===!0,capabilities:p}}static \u0275fac=function(t){return new(t||i)};static \u0275prov=F({token:i,factory:i.\u0275fac,providedIn:"root"})}return i})();var g=class{static collectSortedProviders(a){let e=new Set;for(let t of a){let n=t.provider.trim();n.length>0&&e.add(n)}return[...e].sort()}static collectSortedModelsForProvider(a,e){let t=e.trim();if(!t.length)return[];let n=[];for(let o of a){let p=o.modelName.trim();o.provider===t&&p.length>0&&n.push(p)}return[...new Set(n)].sort()}};var ze=(i,a)=>a.id;function je(i,a){i&1&&(r(0,"div",5),_(1,"Loading..."),s())}function He(i,a){if(i&1){let e=E();r(0,"app-s-session-info-card",9),h("selected",function(n){m(e);let o=c(2);return u(o.handleSelectThread(n))})("contextMenu",function(n){m(e);let o=c(2);return u(o.handleRowContextMenu(n))}),s()}if(i&2){let e=a.$implicit,t=c(2);f("view",e)("isActive",t.consultant_DS.activeThreadId_$()===e.id)}}function Xe(i,a){if(i&1&&S(0,He,1,2,"app-s-session-info-card",8,ze),i&2){let e=c();$(e.threadRowViews_$())}}function qe(i,a){i&1&&(r(0,"div",6),_(1,"No threads"),s())}function Qe(i,a){if(i&1&&(r(0,"option",16),_(1),s()),i&2){let e=a.$implicit,t=c(2);f("value",e),d(),k(t.providerDisplayLabelsMap_$()[e]||e)}}function Ge(i,a){if(i&1&&(r(0,"option",16),_(1),s()),i&2){let e=a.$implicit;f("value",e),d(),k(e)}}function Ke(i,a){if(i&1){let e=E();r(0,"div",10),h("click",function(){m(e);let n=c();return u(n.handleCloseCreate())}),r(1,"div",11),h("click",function(n){return m(e),u(n.stopPropagation())}),r(2,"h3",12),_(3,"New consultant thread"),s(),r(4,"div",13)(5,"label",14),_(6,"Label (optional)"),s(),r(7,"input",15),h("ngModelChange",function(n){m(e);let o=c();return u(o.newLabel_$.set(n))}),s(),r(8,"label",14),_(9,"Provider"),s(),r(10,"select",15),h("ngModelChange",function(n){m(e);let o=c();return u(o.handleProviderChange(n))}),S(11,Qe,2,2,"option",16,P),s(),r(13,"label",14),_(14,"Model"),s(),r(15,"select",15),h("ngModelChange",function(n){m(e);let o=c();return u(o.newModel_$.set(n))}),S(16,Ge,2,2,"option",16,P),s()(),r(18,"div",17)(19,"button",18),h("click",function(){m(e);let n=c();return u(n.handleCloseCreate())}),_(20," Cancel "),s(),r(21,"button",19),h("click",function(){m(e);let n=c();return u(n.handleCreateThread())}),_(22," Create "),s()()()()}if(i&2){let e=c();d(7),f("ngModel",e.newLabel_$()),d(3),f("ngModel",e.newProvider_$()),d(),$(e.providerOptions_$()),d(4),f("ngModel",e.newModel_$()),d(),$(e.modelsForNewProvider_$()),d(5),f("disabled",e.isCreating_$()||!e.newProvider_$().trim()||!e.newModel_$().trim())}}function Ye(i,a){if(i&1){let e=E();r(0,"div",20),h("click",function(){m(e);let n=c();return u(n.handleCloseCtxMenu())}),s(),r(1,"div",21)(2,"button",22),h("click",function(){m(e);let n=c();return u(n.handleCtxDelete())}),_(3," Delete "),s()()}if(i&2){let e=c();d(),_e("left",e.ctxMenuPos_$().x,"px")("top",e.ctxMenuPos_$().y,"px")}}var Le=(()=>{class i{consultant_DS=x(G);router=x(U);modelRegistry_DS=x(De);isCreateOpen_$=l(!1);newLabel_$=l("");newProvider_$=l("");newModel_$=l("");isCreating_$=l(!1);providerOptions_$=b(()=>g.collectSortedProviders(this.consultant_DS.pickerOptions_$()));modelsForNewProvider_$=b(()=>g.collectSortedModelsForProvider(this.consultant_DS.pickerOptions_$(),this.newProvider_$()));providerDisplayLabelsMap_$=b(()=>{let e=this.modelRegistry_DS.setupConfigForRegistry_$(),t=this.providerOptions_$(),n={};for(let o of t)n[o]==null&&(n[o]=ee.getProviderDisplayLabel(o,e));return n});threadProviderDisplayLabels_$=b(()=>{let e=this.modelRegistry_DS.setupConfigForRegistry_$(),t=new Set;for(let o of this.consultant_DS.threads_$()){let p=o.providerInstanceId.trim();p.length>0&&t.add(p)}for(let o of this.providerOptions_$())t.add(o);let n={};for(let o of t)n[o]=ee.getProviderDisplayLabel(o,e);return n});threadRowViews_$=b(()=>this.consultant_DS.threads_$().map(e=>({id:e.threadId,label:e.label||e.threadId,status:"",statusColorClass:"bg-neutral-600",isArchived:!1,lastActivityAt:e.updatedAt,isRunning:!1})));ctxMenuThread_$=l(null);ctxMenuPos_$=l({x:0,y:0});ngOnInit(){this.consultant_DS.loadThreads(),this.consultant_DS.loadPickerOptions(),this.modelRegistry_DS.loadSetupConfigForRegistry()}handleSelectThread(e){this.router.navigate(["/consultant",e])}handleOpenCreate(){return C(this,null,function*(){yield this.consultant_DS.loadPickerOptions();let e=this.consultant_DS.defaults_$(),t=this.providerOptions_$();if(e.providerInstanceId.length>0&&t.includes(e.providerInstanceId)){let n=g.collectSortedModelsForProvider(this.consultant_DS.pickerOptions_$(),e.providerInstanceId);e.model.length>0&&n.includes(e.model)?(this.newProvider_$.set(e.providerInstanceId),this.newModel_$.set(e.model)):(this.newProvider_$.set(e.providerInstanceId),this.newModel_$.set(n[0]??""))}else{let n=t[0]??"";this.newProvider_$.set(n);let o=g.collectSortedModelsForProvider(this.consultant_DS.pickerOptions_$(),n);this.newModel_$.set(o[0]??"")}this.newLabel_$.set(""),this.isCreateOpen_$.set(!0)})}handleCloseCreate(){this.isCreateOpen_$.set(!1)}handleProviderChange(e){this.newProvider_$.set(e);let t=g.collectSortedModelsForProvider(this.consultant_DS.pickerOptions_$(),e);this.newModel_$.set(t[0]??"")}handleCreateThread(){return C(this,null,function*(){let e=this.newProvider_$().trim(),t=this.newModel_$().trim();if(!(!e.length||!t.length)){this.isCreating_$.set(!0);try{let n=this.newLabel_$().trim(),o=yield this.consultant_DS.createThread({label:n.length>0?n:void 0,providerInstanceId:e,model:t});this.isCreateOpen_$.set(!1),o.length>0&&this.router.navigate(["/consultant",o])}finally{this.isCreating_$.set(!1)}}})}handleRowContextMenu(e){let t=this.consultant_DS.threads_$().find(n=>n.threadId===e.id);t&&(this.ctxMenuThread_$.set(t),this.ctxMenuPos_$.set({x:e.event.clientX,y:e.event.clientY}))}handleCloseCtxMenu(){this.ctxMenuThread_$.set(null)}handleCtxDelete(){return C(this,null,function*(){let e=this.ctxMenuThread_$();if(e){this.handleCloseCtxMenu();try{yield this.consultant_DS.deleteThread(e.threadId),this.router.navigate(["/consultant"])}catch{}}})}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=I({type:i,selectors:[["app-ccap-consultant-dashboard"]],hostAttrs:[1,"flex","flex-col","flex-1","min-h-0","overflow-hidden"],decls:12,vars:3,consts:[[1,"flex","flex-col","flex-1","min-h-0"],[1,"shrink-0","p-2","border-b","border-neonDefault","flex","items-center","gap-2"],[1,"text-xs","font-semibold","text-neutral-300","flex-1","truncate"],["type","button",1,"px-2","py-1","text-xs","border","border-neonDefault","text-neutral-300","hover:bg-neutral-700","rounded","transition-colors",3,"click"],[1,"flex-1","overflow-y-auto"],[1,"p-3","text-xs","text-neutral-500"],[1,"p-4","text-center","text-neutral-500","text-xs"],[1,"fixed","inset-0","z-40","flex","items-center","justify-center","bg-black/60","p-4"],[3,"view","isActive"],[3,"selected","contextMenu","view","isActive"],[1,"fixed","inset-0","z-40","flex","items-center","justify-center","bg-black/60","p-4",3,"click"],[1,"w-full","max-w-md","rounded-lg","border","border-neonDefault","bg-neutral-900","p-4","shadow-xl",3,"click"],[1,"text-sm","font-semibold","text-neutral-200","mb-3"],[1,"flex","flex-col","gap-2","text-xs"],[1,"text-neutral-400"],[1,"w-full","px-2","py-1","rounded","bg-neutral-800","border","border-neutral-600","text-neutral-200",3,"ngModelChange","ngModel"],[3,"value"],[1,"flex","justify-end","gap-2","mt-4"],["type","button",1,"px-2","py-1","text-xs","border","border-neutral-600","text-neutral-400","rounded",3,"click"],["type","button",1,"px-2","py-1","text-xs","border","border-neonDefault","text-neutral-200","rounded","disabled:opacity-40",3,"click","disabled"],[1,"fixed","inset-0","z-40",3,"click"],[1,"fixed","z-50","min-w-[140px]","bg-neutral-900","border","border-neutral-700","rounded-lg","shadow-xl","py-1","text-xs"],[1,"w-full","text-left","px-3","py-1.5","text-red-400","hover:bg-red-500/10","transition-colors",3,"click"]],template:function(t,n){if(t&1&&(r(0,"div",0)(1,"div",1)(2,"span",2),_(3,"Consultant"),s(),r(4,"button",3),h("click",function(){return n.handleOpenCreate()}),_(5," + New "),s()(),r(6,"div",4),M(7,je,2,0,"div",5)(8,Xe,2,0)(9,qe,2,0,"div",6),s()(),M(10,Ke,23,4,"div",7)(11,Ye,4,4)),t&2){let o;d(7),y(n.consultant_DS.threadsLoading_$()?7:n.threadRowViews_$().length?8:9),d(3),y(n.isCreateOpen_$()?10:-1),d(),y((o=n.ctxMenuThread_$())?11:-1,o)}},dependencies:[j,H,N,z,W,B,Me],encapsulation:2})}return i})();var We=(()=>{class i{sidebarWidth_$=l(320);isSidebarOpen_$=l(!0);isResizing_$=l(!1);ngOnInit(){let e=T.loadPanelWidth("sidebar",320);this.sidebarWidth_$.set(Math.max(200,Math.min(600,e))),this.isSidebarOpen_$.set(T.loadPanelOpen("sidebar",!0))}handleSidebarResizeStart(e){let t=e.clientX,n=this.sidebarWidth_$();this.isResizing_$.set(!0),Ve.attachUntilPointerUp({startEvent:e,onMove:o=>{let p=o.clientX-t,A=Math.max(200,Math.min(600,n+p));this.sidebarWidth_$.set(A)},onEnd:()=>{this.isResizing_$.set(!1),T.savePanelWidth("sidebar",this.sidebarWidth_$())}})}handleToggleSidebar(){this.isSidebarOpen_$.update(e=>!e),T.savePanelOpen("sidebar",this.isSidebarOpen_$())}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=I({type:i,selectors:[["app-ccap-consultant-shell"]],hostAttrs:[1,"flex","min-h-0","w-full","flex-1","flex-col","overflow-hidden"],decls:14,vars:9,consts:[[1,"flex","min-h-0","w-full","flex-1","flex-col","overflow-hidden"],["sSessionToolbarLeft","",1,"flex","items-center","gap-1","min-w-0"],["type","button",1,"px-2","py-1","text-xs","border","border-neonDefault","text-neutral-300","hover:bg-neutral-700","rounded","transition-colors","flex","items-center","gap-1","shrink-0",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round",1,"w-3","h-3","shrink-0","transition-transform","duration-150"],["points","6 9 12 15 18 9"],["sSessionToolbarCenter","",1,"min-w-0"],["sSessionToolbarRight","",1,"min-w-0"],[3,"sidebarResizeStart","isSidebarOpen","sidebarWidthPx","isResizing"],["sSessionShellSidebar","",1,"flex","flex-col","overflow-hidden","h-full"],["sSessionShellMain","",1,"flex","min-h-0","flex-1","flex-col","overflow-hidden","[&>router-outlet]:contents"]],template:function(t,n){t&1&&(r(0,"div",0)(1,"app-s-session-shell-toolbar")(2,"div",1)(3,"button",2),h("click",function(){return n.handleToggleSidebar()}),le(),r(4,"svg",3),w(5,"polyline",4),s(),_(6," Consultant "),s()(),de(),w(7,"div",5)(8,"div",6),s(),r(9,"app-s-resizable-session-shell-layout",7),h("sidebarResizeStart",function(p){return n.handleSidebarResizeStart(p)}),r(10,"div",8),w(11,"app-ccap-consultant-dashboard"),s(),r(12,"div",9),w(13,"router-outlet"),s()()()),t&2&&(R("select-none",n.isResizing_$()),d(4),R("rotate-90",n.isSidebarOpen_$())("-rotate-90",!n.isSidebarOpen_$()),d(5),f("isSidebarOpen",n.isSidebarOpen_$())("sidebarWidthPx",n.sidebarWidth_$())("isResizing",n.isResizing_$()))},dependencies:[ge,Pe,Ee,Le],encapsulation:2})}return i})();var K=class i{static fromMessage(a){let e=a.role==="user",t=e?i.buildUserBodyText(a):a.content??"";return{listKey:a.id,kind:e?te.userPrompt:te.assistant,bodyText:t,isUserAligned:e,flags:{showCopy:!0,showRawInfo:!1,useEditDiffForExpandable:!1}}}static buildUserBodyText(a){let e=(a.rawUserText??"").trim();return(a.userParts?.length??0)>1?e.length>0?`${e}
2
- [attachments]`:"[attachments]":e.length>0?e:a.content??""}};var Ze=(i,a)=>a.listKey;function et(i,a){i&1&&(r(0,"div",0),_(1," Select a thread or create a new consultant chat. "),s())}function tt(i,a){i&1&&(r(0,"div",1),_(1,"Loading\u2026"),s())}function nt(i,a){if(i&1&&(r(0,"option",8),_(1),s()),i&2){let e=a.$implicit;f("value",e),d(),k(e)}}function it(i,a){if(i&1&&(r(0,"option",8),_(1),s()),i&2){let e=a.$implicit;f("value",e),d(),k(e)}}function ot(i,a){if(i&1&&(r(0,"div",18),w(1,"app-s-agent-console-message-bubble",19),s()),i&2){let e=a.$implicit;R("self-end",e.isUserAligned===!0)("self-start",e.isUserAligned!==!0),d(),f("view",e)}}function rt(i,a){if(i&1){let e=E();r(0,"app-s-session-chat-column-layout")(1,"div",2)(2,"div",3)(3,"div",4)(4,"span",5),_(5,"Label"),s(),r(6,"input",6),h("ngModelChange",function(n){m(e);let o=c(2);return u(o.localLabel_$.set(n))}),s()(),r(7,"div",4)(8,"span",5),_(9,"Provider"),s(),r(10,"select",7),h("ngModelChange",function(n){m(e);let o=c(2);return u(o.handleProviderChange(n))}),S(11,nt,2,2,"option",8,P),s()(),r(13,"div",4)(14,"span",5),_(15,"Model"),s(),r(16,"select",6),h("ngModelChange",function(n){m(e);let o=c(2);return u(o.localModel_$.set(n))}),S(17,it,2,2,"option",8,P),s()(),r(19,"button",9),h("click",function(){m(e);let n=c(2);return u(n.handleApplyConfig())}),_(20," Apply "),s(),r(21,"button",10),h("click",function(){m(e);let n=c(2);return u(n.handleDeleteThread())}),_(22," Delete "),s()()(),r(23,"div",11),S(24,ot,2,5,"div",12,Ze),s(),r(26,"div",13)(27,"label",14)(28,"input",15),h("ngModelChange",function(n){m(e);let o=c(2);return u(o.allowWebSearch_$.set(n))}),s(),_(29," Allow web search (Brave) "),s(),r(30,"app-s-session-input",16),h("draftTextChange",function(n){m(e);let o=c(2);return u(o.composerText_$.set(n))})("sendRequested",function(){m(e);let n=c(2);return u(n.handleSend())})("attachmentsChanged",function(n){m(e);let o=c(2);return u(o.handleAttachmentsChanged(n))}),r(31,"app-ccap-voice-record-button",17),h("transcriptSegmentReady",function(n){m(e);let o=c(2);return u(o.handleVoiceSegment(n))}),s()()()()}if(i&2){let e=c(2);d(6),f("ngModel",e.localLabel_$()),d(4),f("ngModel",e.localProvider_$()),d(),$(e.providerOptions_$()),d(5),f("ngModel",e.localModel_$()),d(),$(e.modelsForSelectedProvider_$()),d(7),$(e.consultantBubbleViews_$()),d(4),f("ngModel",e.allowWebSearch_$()),d(2),f("draftText",e.composerText_$())("isSending",e.consultant_DS.sending_$())("enableAttachments",!0)("textareaRows",3),d(),f("compactLayout",!0)}}function at(i,a){i&1&&(r(0,"div",0),_(1," Thread not loaded. "),s())}function st(i,a){if(i&1&&M(0,rt,32,9,"app-s-session-chat-column-layout")(1,at,2,0,"div",0),i&2){let e=c();y(e.consultant_DS.selectedThread_$()?0:1)}}var ne=(()=>{class i extends we{consultant_DS=x(G);route=x(xe);router=x(U);voiceInputUi_DS=x(Ie);sessionInputRef;composerText_$=l("");allowWebSearch_$=l(!1);localLabel_$=l("");localProvider_$=l("");localModel_$=l("");providerOptions_$=b(()=>g.collectSortedProviders(this.consultant_DS.pickerOptions_$()));modelsForSelectedProvider_$=b(()=>g.collectSortedModelsForProvider(this.consultant_DS.pickerOptions_$(),this.localProvider_$()));consultantBubbleViews_$=b(()=>{let e=this.consultant_DS.selectedThread_$();return e?e.messages.map(t=>K.fromMessage(t)):[]});pendingAttachments=[];constructor(){super(),this.addSubscription(this.route.paramMap.pipe(re(e=>e.get("threadId")??"")).subscribe(e=>{e.length>0?this.consultant_DS.loadThreadDetail(e):(this.consultant_DS.selectedThread_$.set(null),this.consultant_DS.activeThreadId_$.set(""))})),ue(()=>{let e=this.consultant_DS.selectedThread_$();e!=null&&(this.localLabel_$.set(e.label),this.localProvider_$.set(e.providerInstanceId),this.localModel_$.set(e.model))},{allowSignalWrites:!0}),this.consultant_DS.loadPickerOptions()}ngOnDestroy(){super.ngOnDestroy()}handleProviderChange(e){this.localProvider_$.set(e);let t=g.collectSortedModelsForProvider(this.consultant_DS.pickerOptions_$(),e),n=this.localModel_$();t.includes(n)||this.localModel_$.set(t[0]??"")}handleApplyConfig(){return C(this,null,function*(){let e=this.consultant_DS.activeThreadId_$();e.length&&(yield this.consultant_DS.updateThreadConfig({threadId:e,label:this.localLabel_$(),providerInstanceId:this.localProvider_$(),model:this.localModel_$()}))})}handleDeleteThread(){return C(this,null,function*(){let e=this.consultant_DS.activeThreadId_$();e.length&&(yield this.consultant_DS.deleteThread(e),this.router.navigate(["/consultant"]))})}handleAttachmentsChanged(e){this.pendingAttachments=e}handleVoiceSegment(e){let t=e.text.trim();if(!t.length)return;let n=this.composerText_$().trim();this.composerText_$.set(n.length>0?`${n} ${t}`:t),this.voiceInputUi_DS.autoSendAfterVoice_$()&&e.isFinal&&this.handleSend()}handleSend(){return C(this,null,function*(){let e=this.consultant_DS.activeThreadId_$();if(!e.length)return;let t=this.composerText_$().trim(),n=[...this.pendingAttachments];if(!t.length&&!n.length)return;let o=n.map(p=>({kind:p.isImage?"image":"textDocument",mimeType:p.mimeType,fileName:p.fileName,dataBase64:p.base64}));yield this.consultant_DS.sendMessage({threadId:e,text:t,allowWebSearch:this.allowWebSearch_$(),attachments:o}),this.composerText_$.set(""),this.pendingAttachments=[],this.sessionInputRef?.clearAttachments()})}static \u0275fac=function(t){return new(t||i)};static \u0275cmp=I({type:i,selectors:[["app-ccap-consultant-detail"]],viewQuery:function(t,n){if(t&1&&pe(q,5),t&2){let o;he(o=me())&&(n.sessionInputRef=o.first)}},hostAttrs:[1,"flex","flex-col","flex-1","min-h-0","overflow-hidden"],features:[ce],decls:3,vars:1,consts:[[1,"flex","flex-1","items-center","justify-center","p-4","text-xs","text-neutral-500"],[1,"flex","flex-1","items-center","justify-center","text-xs","text-neutral-500"],["sChatColumnHeader","",1,"flex","shrink-0","flex-col","gap-2","border-b","border-neonDefault","bg-ccapSurface","p-2"],[1,"flex","flex-wrap","items-end","gap-2"],[1,"flex","flex-col","gap-0.5"],[1,"text-[10px]","text-neutral-500"],[1,"w-40","rounded","border","border-neutral-600","bg-neutral-800","px-2","py-1","text-xs","text-neutral-200",3,"ngModelChange","ngModel"],[1,"w-36","rounded","border","border-neutral-600","bg-neutral-800","px-2","py-1","text-xs","text-neutral-200",3,"ngModelChange","ngModel"],[3,"value"],["type","button",1,"rounded","border","border-neonDefault","px-2","py-1","text-xs","text-neutral-300",3,"click"],["type","button",1,"ml-auto","rounded","border","border-red-900","px-2","py-1","text-xs","text-red-300",3,"click"],["sChatColumnScroll","",1,"flex","flex-col","gap-3","p-3"],[1,"max-w-[85%]",3,"self-end","self-start"],["sChatColumnComposer","",1,"flex","flex-col"],[1,"flex","cursor-pointer","items-center","gap-2","px-2","pt-1","text-[10px]","text-neutral-400"],["type","checkbox",3,"ngModelChange","ngModel"],["acceptedFileTypes","image/png,image/jpeg,image/webp,image/gif,.txt,.md,text/plain,text/markdown","placeholder","Message\u2026",3,"draftTextChange","sendRequested","attachmentsChanged","draftText","isSending","enableAttachments","textareaRows"],["sInputTextareaAccessory","",3,"transcriptSegmentReady","compactLayout"],[1,"max-w-[85%]"],[3,"view"]],template:function(t,n){t&1&&M(0,et,2,0,"div",0)(1,tt,2,0,"div",1)(2,st,2,1),t&2&&y(n.consultant_DS.activeThreadId_$()?n.consultant_DS.selectedThreadLoading_$()?1:2:0)},dependencies:[j,H,N,ve,z,W,B,X,q,ke,Ae],encapsulation:2})}return i})();var lt=[{path:"",component:We,children:[{path:"",component:ne},{path:":threadId",component:ne}]}],xn=(()=>{class i{static \u0275fac=function(t){return new(t||i)};static \u0275mod=se({type:i});static \u0275inj=ae({imports:[fe,Se,be.forChild(lt),Te,X,Re]})}return i})();export{xn as Consultant_Module};
3
- //# sourceMappingURL=consultant.module-WUUVSVHL.js.map
@@ -1,6 +0,0 @@
1
- import{a as q}from"./chunk-GZDOO5NB.js";import{a as M}from"./chunk-U2EBQMSE.js";import{k as w}from"./chunk-KYVIZZWW.js";import"./chunk-5UPNU54P.js";import{c as T}from"./chunk-7SAFEFWU.js";import{p as et}from"./chunk-SLSTIBOT.js";import{$a as J,C as V,D as O,E as P,Fa as d,Ga as k,Ha as f,Hb as H,Ia as z,J as y,K as v,Kb as X,L as j,Ua as N,Z as s,a as S,aa as I,b as A,bb as K,d as R,da as x,ga as E,h as tt,hb as h,ia as F,la as m,oa as L,pa as B,pb as G,qa as l,ra as a,sa as D,ua as $,ub as W,va as b,wa as u,z as U}from"./chunk-TBMJSIBB.js";var Q=tt(et());var it=(i,c)=>c._id,rt=(i,c)=>c.label,ot=()=>[];function st(i,c){if(i&1&&(l(0,"span",6),d(1),a()),i&2){let t=u();s(),f(" ",t.lastRefreshedAgo_$()," ")}}function at(i,c){if(i&1&&(l(0,"div",9)(1,"p",15),d(2,"A lista nem t\xF6lthet\u0151 be."),a(),D(3,"app-ccap-error-display",16),a()),i&2){let t,e=u();s(3),E("error",(t=e.errors_DS.errorsLoadErrorRaw_$())!==null&&t!==void 0?t:e.errors_DS.errorsLoadError_$())}}function lt(i,c){i&1&&(l(0,"p",10),d(1,"Bet\xF6lt\xE9s\u2026"),a())}function dt(i,c){i&1&&(l(0,"p",11),d(1,"Nincs r\xF6gz\xEDtett hiba."),a())}function ut(i,c){i&1&&(l(0,"p",11),d(1," Csak STALE-BUILD bejegyz\xE9sek vannak (r\xE9gebbi server-build-ekb\u0151l, m\xE1r fixelt). Kapcsold ki a sz\u0171r\u0151t a megjelen\xEDt\xE9shez vagy haszn\xE1ld az "),l(2,"code",3),d(3,"errors-cleanup-stale.sh"),a(),d(4,"-t a takar\xEDt\xE1shoz. "),a())}function ct(i,c){if(i&1){let t=$();l(0,"button",31),b("click",function(){y(t);let n=u().$implicit,r=u(2);return v(r.handlePmUserMark(n,!1))}),d(1," Jel\xF6l\xE9s t\xF6rl\xE9se "),a()}if(i&2){let t=u().$implicit,e=u(2);E("disabled",!t._id||e.pmUserMarkBusyErrorId_$()===t._id)}}function _t(i,c){if(i&1){let t=$();l(0,"button",32),b("click",function(){y(t);let n=u().$implicit,r=u(2);return v(r.handlePmUserMark(n,!0))}),d(1," Megjel\xF6l\xE9s "),a()}if(i&2){let t=u().$implicit,e=u(2);E("disabled",!t._id||e.pmUserMarkBusyErrorId_$()===t._id)}}function pt(i,c){i&1&&(l(0,"span",33),d(1," STALE "),a())}function mt(i,c){i&1&&(l(0,"span",34),d(1," REGRESSION "),a())}function xt(i,c){if(i&1&&(l(0,"span",36),d(1),a()),i&2){let t=u(2).$implicit;s(),f(" \u2014 ",t.fixAnnotation.summary," ")}}function ft(i,c){if(i&1&&(l(0,"div",25),x(1,pt,2,0,"span",33)(2,mt,2,0,"span",34),l(3,"span",35),d(4),a(),x(5,xt,2,1,"span",36),a()),i&2){let t=u().$implicit;s(),m(t.fixAnnotation.classification==="STALE-BUILD"?1:t.fixAnnotation.classification==="REGRESSION"?2:-1),s(3),z(" Fixed in ",t.fixAnnotation.fixedInVersion," (cycle ",t.fixAnnotation.fixedInCycle,") "),s(),m(t.fixAnnotation.summary?5:-1)}}function gt(i,c){i&1&&(l(0,"span",28),d(1,"Megjel\xF6lve (PM)"),a())}function bt(i,c){if(i&1&&(l(0,"span",29),d(1),a()),i&2){let t=u().$implicit;s(),f("\xB7 El\u0151fordul\xE1sok: ",t.occurrenceCount,"")}}function Ct(i,c){if(i&1&&(l(0,"span",29),d(1),a()),i&2){let t=u().$implicit;s(),f("\xB7 CCAP: ",t.ccapId,"")}}function Et(i,c){if(i&1&&(l(0,"span",29),d(1),a()),i&2){let t=u().$implicit;s(),f("\xB7 Session: ",t.sessionId,"")}}function ht(i,c){if(i&1&&(l(0,"span",29),d(1),a()),i&2){let t=u().$implicit;s(),f("\xB7 Run: ",t.runId,"")}}function St(i,c){if(i&1&&(l(0,"span",29),d(1),a()),i&2){let t,e=u().$implicit,n=u(2);s(),f("\xB7 ",n.errorContextLineMap_$()[(t=e._id)!==null&&t!==void 0?t:""],"")}}function yt(i,c){if(i&1&&(l(0,"div",43),d(1),a(),l(2,"pre",44),d(3),a()),i&2){let t=u().$implicit;s(),k(t.label),s(2),k(t.value)}}function vt(i,c){if(i&1&&(l(0,"div",42)(1,"span",45),d(2),a(),l(3,"span",46),d(4),a()()),i&2){let t=u().$implicit;s(2),f("",t.label,":"),s(2),k(t.value)}}function $t(i,c){if(i&1&&(l(0,"div",41),x(1,yt,4,2)(2,vt,5,2,"div",42),a()),i&2){let t=c.$implicit;s(),m(t.isMultiline?1:2)}}function kt(i,c){if(i&1&&(l(0,"div",40),L(1,$t,3,1,"div",41,rt),a()),i&2){let t,e=u(2).$implicit,n=u(2);s(),B((t=n.contextDetailEntries_$()[(t=e._id)!==null&&t!==void 0?t:""])!==null&&t!==void 0?t:N(0,ot))}}function It(i,c){if(i&1){let t=$();l(0,"div",30)(1,"button",37),b("click",function(){let n;y(t);let r=u().$implicit,o=u(2);return v(o.toggleContextExpanded((n=r._id)!==null&&n!==void 0?n:""))}),j(),l(2,"svg",38),D(3,"polyline",39),a(),d(4),a(),x(5,kt,3,1,"div",40),a()}if(i&2){let t,e,n,r=u().$implicit,o=u(2);s(2),F("-rotate-90",!o.contextExpandedId_$()[(t=r._id)!==null&&t!==void 0?t:""]),s(2),f(" ",o.contextExpandedId_$()[(e=r._id)!==null&&e!==void 0?e:""]?"Kontextus r\xE9szletek elrejt\xE9se":"Kontextus r\xE9szletek"," "),s(),m(o.contextExpandedId_$()[(n=r._id)!==null&&n!==void 0?n:""]?5:-1)}}function Dt(i,c){if(i&1&&(l(0,"pre",47),d(1),a()),i&2){let t=u(2).$implicit;s(),k(t.stack)}}function Ft(i,c){if(i&1){let t=$();l(0,"div",30)(1,"button",37),b("click",function(){let n;y(t);let r=u().$implicit,o=u(2);return v(o.toggleExpanded((n=r._id)!==null&&n!==void 0?n:""))}),j(),l(2,"svg",38),D(3,"polyline",39),a(),d(4),a(),x(5,Dt,2,1,"pre",47),a()}if(i&2){let t,e,n,r=u().$implicit,o=u(2);s(2),F("-rotate-90",!o.expandedId_$()[(t=r._id)!==null&&t!==void 0?t:""]),s(2),f(" ",o.expandedId_$()[(e=r._id)!==null&&e!==void 0?e:""]?"Stack elrejt\xE9se":"Stack megjelen\xEDt\xE9se"," "),s(),m(o.expandedId_$()[(n=r._id)!==null&&n!==void 0?n:""]?5:-1)}}function Tt(i,c){if(i&1){let t=$();l(0,"div",17)(1,"div",18)(2,"div",19),D(3,"app-s-copy-button",20),x(4,ct,2,1,"button",21)(5,_t,2,1,"button",22),l(6,"button",23),b("click",function(){let n,r=y(t).$implicit,o=u(2);return v(o.clearOne((n=r._id)!==null&&n!==void 0?n:""))}),d(7," T\xF6rl\xE9s "),a()(),l(8,"div",24),x(9,ft,6,4,"div",25),l(10,"p",26),d(11),a(),l(12,"p",27),x(13,gt,2,0,"span",28),l(14,"span",29),d(15),a(),x(16,bt,2,1,"span",29),l(17,"span",29),d(18),J(19,"date"),a(),x(20,Ct,2,1,"span",29)(21,Et,2,1,"span",29)(22,ht,2,1,"span",29)(23,St,2,1,"span",29),a()()(),x(24,It,6,4,"div",30)(25,Ft,6,4,"div",30),a()}if(i&2){let t,e,n,r,o=c.$implicit,g=u(2);s(3),E("content",g.getErrorCopyText(o)),s(),m(o.pmUserMarkedAt!=null&&o.pmUserMarkedAt.trim()?4:5),s(2),E("disabled",!o._id),s(3),m(o.fixAnnotation&&o.fixAnnotation.classification!=="UNFIXED"?9:-1),s(2),k((t=o.message)!==null&&t!==void 0?t:"\u2013"),s(2),m(o.pmUserMarkedAt!=null&&o.pmUserMarkedAt.trim()?13:-1),s(2),f("Forr\xE1s: ",(e=o.source)!==null&&e!==void 0?e:"\u2013",""),s(),m(o.occurrenceCount!=null&&o.occurrenceCount>1?16:-1),s(2),f("\xB7 Utols\xF3: ",((n=o.lastOccurrenceAt)!==null&&n!==void 0?n:o.timestamp)?K(19,15,(n=o.lastOccurrenceAt)!==null&&n!==void 0?n:o.timestamp,"short"):"\u2013",""),s(2),m(o.ccapId!=null&&o.ccapId.trim()?20:-1),s(),m(o.sessionId!=null&&o.sessionId.trim()?21:-1),s(),m(o.runId!=null&&o.runId.trim()?22:-1),s(),m(g.errorContextLineMap_$()[(r=o._id)!==null&&r!==void 0?r:""]?23:-1),s(),m(g.hasContextDetailText(o._id)?24:-1),s(),m(o.stack!=null&&o.stack.trim()?25:-1)}}function wt(i,c){if(i&1&&(l(0,"div",12),L(1,Tt,26,18,"div",17,it),a()),i&2){let t=u();s(),B(t.visibleErrors_$())}}var Y=(()=>{class i{errors_DS=V(q);refreshTick_$=I(0);refreshTickInterval=null;lastRefreshedAgo_$=h(()=>{this.refreshTick_$();let t=this.errors_DS.lastRefreshedAt_$();if(!t)return"";let e=Date.now()-t.getTime(),n=Math.floor(e/1e3),r=Math.floor(n/60),o=Math.floor(r/60);return n<10?"most":n<60?`${n} mp`:r<60?`${r} perce`:`${o} \xF3r\xE1ja`});pmUserMarkBusyErrorId_$=I("");visibleErrors_$=h(()=>{let t=this.errors_DS.errors_$();return this.errors_DS.hideStaleBuild_$()?t.filter(e=>e.fixAnnotation?.classification!=="STALE-BUILD"):t});visibleVsTotalLabel_$=h(()=>{let t=this.errors_DS.errors_$().length,e=this.visibleErrors_$().length;return e===t?`${t}`:`${e} / ${t}`});expandedId_$=I({});contextExpandedId_$=I({});errorContextLineMap_$=h(()=>{let t=this.errors_DS.errors_$(),e={};for(let n of t){let r=n._id??"";e[r]=i.buildRouteUrlLine(n.surroundingState)}return e});contextDetailTextMap_$=h(()=>{let t=this.errors_DS.errors_$(),e={};for(let n of t){let r=n._id??"";e[r]=i.buildSurroundingStateExtraDetail(n.surroundingState)}return e});contextDetailEntries_$=h(()=>{let t=this.errors_DS.errors_$(),e={};for(let n of t){let r=n._id??"";e[r]=i.buildContextDetailEntries(n.surroundingState)}return e});ngOnInit(){this.errors_DS.loadErrors(),this.refreshTickInterval=setInterval(()=>{this.refreshTick_$.update(t=>t+1)},10*Q.second)}ngOnDestroy(){this.refreshTickInterval&&clearInterval(this.refreshTickInterval)}refresh(){this.errors_DS.loadErrors()}clearAll(){this.errors_DS.clearAll()}clearOne(t){this.errors_DS.clearOne(t)}handlePmUserMark(t,e){let n=t._id??"";!n.length||this.pmUserMarkBusyErrorId_$()===n||(this.pmUserMarkBusyErrorId_$.set(n),this.errors_DS.setPmUserMark(n,e).finally(()=>{this.pmUserMarkBusyErrorId_$.set("")}))}isExpanded(t){return this.expandedId_$()[t]===!0}getErrorId(t){return t._id??""}static buildRouteUrlLine(t){if(!t||typeof t!="object")return"";let e=t.route,n=t.url,r=typeof e=="string"&&e.trim().length>0?e.trim():"",o=typeof n=="string"&&n.trim().length>0?n.trim():"";return r&&o?`Route: ${r} \xB7 URL: ${o}`:r?`Route: ${r}`:o?`URL: ${o}`:""}static buildContextLine(t){let e=[];t.ccapId?.trim()&&e.push(`CCAP: ${t.ccapId.trim()}`),t.sessionId?.trim()&&e.push(`Session: ${t.sessionId.trim()}`),t.runId?.trim()&&e.push(`Run: ${t.runId.trim()}`);let n=i.buildRouteUrlLine(t.surroundingState);return n.length>0&&e.push(n),e.join(" \xB7 ")}static buildSurroundingStateExtraDetail(t){let e=i.flattenSurroundingStateForDisplay(t);if(Object.keys(e).length===0)return"";let n=[],r=(p,_)=>{typeof _=="string"&&_.trim().length>0&&n.push(`${p}: ${_.trim()}`)};r("userMessage",e.userMessage),r("sessionId (surroundingState)",e.sessionId),r("runId (surroundingState)",e.runId),r("nodeVersion",e.nodeVersion),r("platform",e.platform),r("timestamp",e.timestamp),r("userAgent",e.userAgent);let o=e.additionalContext;if(T.isRecord(o))try{let p=JSON.stringify(o,null,2);n.push(`additionalContext:
2
- ${p}`)}catch{n.push("additionalContext: [not serializable]")}let g=new Set(["userMessage","sessionId","runId","nodeVersion","platform","timestamp","userAgent","additionalContext","route","url"]),C=Object.keys(e).filter(p=>!g.has(p));C.sort();for(let p of C){let _=e[p];if(_!=null){if(typeof _=="string"||typeof _=="number"||typeof _=="boolean"){n.push(`${p}: ${String(_)}`);continue}try{n.push(`${p}:
3
- ${JSON.stringify(_,null,2)}`)}catch{n.push(`${p}: [not serializable]`)}}}return n.join(`
4
- `)}static buildContextDetailEntries(t){let e=i.flattenSurroundingStateForDisplay(t);if(Object.keys(e).length===0)return[];let n=[],r=(p,_)=>{typeof _=="string"&&_.trim().length>0&&n.push({label:p,value:_.trim(),isMultiline:!1})};r("sessionId (surroundingState)",e.sessionId),r("runId (surroundingState)",e.runId),r("nodeVersion",e.nodeVersion),r("platform",e.platform),r("timestamp",e.timestamp),r("userMessage",e.userMessage),r("userAgent",e.userAgent);let o=e.additionalContext;if(T.isRecord(o)){let p=i.formatObjectDeep(o);n.push({label:"additionalContext",value:p,isMultiline:!0})}let g=new Set(["userMessage","sessionId","runId","nodeVersion","platform","timestamp","userAgent","additionalContext","route","url"]),C=Object.keys(e).filter(p=>!g.has(p));C.sort();for(let p of C){let _=e[p];if(_!=null){if(typeof _=="string"||typeof _=="number"||typeof _=="boolean"){n.push({label:p,value:String(_),isMultiline:!1});continue}try{let Z=JSON.stringify(_,null,2);n.push({label:p,value:Z,isMultiline:!0})}catch{n.push({label:p,value:"[not serializable]",isMultiline:!1})}}}return n}static formatObjectDeep(t){let e={};for(let n of Object.keys(t))e[n]=i.tryParseJsonString(t[n]);return JSON.stringify(e,null,2)}static tryParseJsonString(t){if(typeof t!="string")return t;let e=t.trim();if(e.startsWith("{")&&e.endsWith("}")||e.startsWith("[")&&e.endsWith("]"))try{return JSON.parse(e)}catch{return t}return t}static flattenSurroundingStateForDisplay(t){if(!t||typeof t!="object")return{};let e=t.surroundingState;if(T.isRecord(e)){let n=t,{surroundingState:r}=n,o=R(n,["surroundingState"]);return S(S({},o),e)}return S({},t)}toggleExpanded(t){this.expandedId_$.update(e=>A(S({},e),{[t]:!e[t]}))}toggleContextExpanded(t){this.contextExpandedId_$.update(e=>A(S({},e),{[t]:!e[t]}))}hasContextDetailText(t){return t?this.contextDetailEntries_$()[t]?.length?!0:this.contextDetailTextMap_$()[t]?.trim().length>0:!1}getErrorCopyText(t){let e=[];t.message?.trim()&&e.push(t.message.trim());let n=[];t.source?.trim()&&n.push(`Forr\xE1s: ${t.source.trim()}`),t.occurrenceCount!=null&&t.occurrenceCount>1&&n.push(`El\u0151fordul\xE1sok: ${t.occurrenceCount}`);let r=t.lastOccurrenceAt??t.timestamp,o=r?(()=>{try{return new Date(r).toLocaleString(void 0,{dateStyle:"short",timeStyle:"short"})}catch{return r}})():"\u2013";o!=="\u2013"&&n.push(`Utols\xF3: ${o}`),n.length>0&&e.push(n.join(" \xB7 "));let g=i.buildContextLine(t);g.trim().length>0&&(e.push(""),e.push(g));let C=i.buildSurroundingStateExtraDetail(t.surroundingState);return C.trim().length>0&&(e.push(""),e.push("Kontextus r\xE9szletek:"),e.push(C.trim())),t.stack?.trim()&&(e.push(""),e.push("Stack:"),e.push(t.stack.trim())),e.join(`
5
- `)}getErrorContextLine(t){return i.buildContextLine(t)}static \u0275fac=function(e){return new(e||i)};static \u0275cmp=O({type:i,selectors:[["app-ccap-errors"]],decls:24,vars:18,consts:[[1,"max-w-4xl","mx-auto","p-3","gt-xs:p-6","text-neutral-100"],[1,"text-xl","gt-xs:text-2xl","font-bold","mb-4","gt-xs:mb-6"],[1,"text-neutral-400","text-sm","gt-xs:text-base","mb-4","gt-xs:mb-6"],[1,"bg-neutral-800","px-1","rounded"],[1,"flex","flex-wrap","gap-1.5","gt-xs:gap-2","items-center","mb-3","gt-xs:mb-4"],["type","button",1,"px-3","py-1.5","gt-xs:px-4","gt-xs:py-2","text-sm","gt-xs:text-base","border","border-neonCyan","rounded","text-neutral-300","hover:bg-neutral-700","disabled:opacity-50","transition-colors",3,"click","disabled"],[1,"text-neutral-500","text-xs","gt-xs:text-sm"],["type","button",1,"px-3","py-1.5","gt-xs:px-4","gt-xs:py-2","text-sm","gt-xs:text-base","bg-red-900/60","border","border-red-500/70","rounded","text-red-200","hover:bg-red-900/80","disabled:opacity-50","transition-colors",3,"click","disabled"],["type","button","title","R\xE9gebbi server-build-ekb\u0151l sz\xE1rmaz\xF3, m\xE1r fixelt errorok elrejt\xE9se (cycle 780 fix-annotation registry)",1,"ml-auto","px-3","py-1.5","gt-xs:px-4","gt-xs:py-2","text-sm","gt-xs:text-base","border","rounded","transition-colors",3,"click"],[1,"mb-4"],[1,"text-neutral-400"],[1,"text-neutral-500"],[1,"space-y-2","gt-xs:space-y-3"],[1,"pt-4","gt-xs:pt-6"],["routerLink","/",1,"inline-flex","px-3","py-1.5","gt-xs:px-4","gt-xs:py-2","text-sm","gt-xs:text-base","border","border-neonCyan","rounded","text-neutral-300","hover:bg-neutral-700"],[1,"text-neutral-300","mb-3"],[3,"error"],[1,"p-2.5","gt-xs:p-4","bg-neutral-800/50","border","border-neonDefault","rounded-lg"],[1,"min-w-0","flex","flex-col","gap-2","gt-xs:flex-row","gt-xs:items-start","gt-xs:justify-between","gt-xs:gap-2"],[1,"flex","items-center","gap-1.5","gt-xs:gap-2","flex-wrap","justify-end","gt-xs:justify-end","order-1","gt-xs:order-2","shrink-0","w-full","gt-xs:w-auto"],[3,"content"],["type","button",1,"px-2","py-1","gt-xs:px-3","gt-xs:py-1.5","text-amber-300","hover:bg-amber-900/25","rounded","border","border-amber-600/50","text-xs","gt-xs:text-sm","disabled:opacity-50","transition-colors","shrink-0",3,"disabled"],["type","button",1,"px-2","py-1","gt-xs:px-3","gt-xs:py-1.5","text-neutral-300","hover:bg-neutral-700/50","rounded","border","border-neutral-600","text-xs","gt-xs:text-sm","disabled:opacity-50","transition-colors","shrink-0",3,"disabled"],["type","button",1,"px-2","py-1","gt-xs:px-3","gt-xs:py-1.5","text-red-400","hover:bg-red-900/30","rounded","text-xs","gt-xs:text-sm","disabled:opacity-50","transition-colors","shrink-0",3,"click","disabled"],[1,"min-w-0","flex-1","order-2","gt-xs:order-1","w-full","gt-xs:w-auto"],[1,"mb-1","gt-xs:mb-1.5","flex","flex-wrap","items-center","gap-1.5"],[1,"font-medium","text-neutral-200","text-sm","gt-xs:text-base","break-words"],[1,"text-neutral-500","text-[11px]","gt-xs:text-sm","mt-1.5","gt-xs:mt-1","flex","flex-wrap","gap-x-2","gap-y-1"],[1,"break-words","text-amber-400/90","font-medium"],[1,"break-words"],[1,"mt-1.5","gt-xs:mt-2"],["type","button",1,"px-2","py-1","gt-xs:px-3","gt-xs:py-1.5","text-amber-300","hover:bg-amber-900/25","rounded","border","border-amber-600/50","text-xs","gt-xs:text-sm","disabled:opacity-50","transition-colors","shrink-0",3,"click","disabled"],["type","button",1,"px-2","py-1","gt-xs:px-3","gt-xs:py-1.5","text-neutral-300","hover:bg-neutral-700/50","rounded","border","border-neutral-600","text-xs","gt-xs:text-sm","disabled:opacity-50","transition-colors","shrink-0",3,"click","disabled"],["title","R\xE9gebbi server-build, m\xE1r fixelt \u2014 biztons\xE1gosan mark-done-olhat\xF3.",1,"px-1.5","py-0.5","text-[10px]","gt-xs:text-xs","font-mono","uppercase","tracking-wider","bg-emerald-900/60","border","border-emerald-600","rounded","text-emerald-200"],["title","A fix ut\xE1n \xFAjra el\u0151fordult \u2014 val\xF3di regresszi\xF3, vissza implementre.",1,"px-1.5","py-0.5","text-[10px]","gt-xs:text-xs","font-mono","uppercase","tracking-wider","bg-red-900/60","border","border-red-600","rounded","text-red-200"],[1,"text-[11px]","gt-xs:text-xs","text-neutral-400","font-mono"],[1,"text-[11px]","gt-xs:text-xs","text-neutral-500","italic","break-words"],["type","button",1,"text-neutral-400","hover:text-neutral-200","text-xs","gt-xs:text-sm","flex","items-center","gap-1",3,"click"],["viewBox","0 0 24 24","fill","none","stroke","currentColor","stroke-width","2","stroke-linecap","round","stroke-linejoin","round",1,"w-3","h-3","shrink-0","transition-transform","duration-150"],["points","6 9 12 15 18 9"],[1,"mt-1.5","p-2","gt-xs:p-3","bg-neutral-900","rounded","max-h-[70vh]","overflow-y-auto","space-y-1.5","gt-xs:space-y-2"],[1,"text-xs"],[1,"flex","flex-wrap","gap-x-1.5"],[1,"text-neutral-500","font-medium","mb-0.5"],[1,"p-1.5","gt-xs:p-2","bg-neutral-950/60","rounded","text-neutral-300","font-mono","whitespace-pre-wrap","break-words","overflow-x-auto"],[1,"text-neutral-500","font-medium","shrink-0"],[1,"text-neutral-300","break-all","font-mono"],[1,"mt-1","p-1.5","gt-xs:p-2","bg-neutral-900","rounded","text-xs","text-neutral-300","font-mono","whitespace-pre-wrap","break-words","overflow-x-auto","max-h-[70vh]","overflow-y-auto"]],template:function(e,n){e&1&&(l(0,"div",0)(1,"h1",1),d(2,"Hib\xE1k"),a(),l(3,"p",2),d(4," A rendszerben r\xF6gz\xEDtett hib\xE1k list\xE1ja (szerver \xE9s kliens). Sorrend: legfel\xFCl a legfrissebb utols\xF3 el\u0151fordul\xE1s ("),l(5,"code",3),d(6,"lastOccurrenceAt"),a(),d(7," / els\u0151 r\xF6gz\xEDt\xE9s ideje). Azonos hiba t\xF6bbsz\xF6ri el\u0151fordul\xE1sa egy sorban jelenik meg (el\u0151fordul\xE1sok sz\xE1ma). T\xF6r\xF6lheted egyenk\xE9nt vagy mindegyiket egyszerre. "),a(),l(8,"div",4)(9,"button",5),b("click",function(){return n.refresh()}),d(10),a(),x(11,st,2,1,"span",6),l(12,"button",7),b("click",function(){return n.clearAll()}),d(13," \xD6sszes t\xF6rl\xE9se "),a(),l(14,"button",8),b("click",function(){return n.errors_DS.hideStaleBuild_$.set(!n.errors_DS.hideStaleBuild_$())}),d(15),a()(),x(16,at,4,1,"div",9)(17,lt,2,0,"p",10)(18,dt,2,0,"p",11)(19,ut,5,0,"p",11)(20,wt,3,0,"div",12),l(21,"div",13)(22,"a",14),d(23," Vissza "),a()()()),e&2&&(s(9),E("disabled",n.errors_DS.errorsLoading_$()),s(),f(" ",n.errors_DS.errorsLoading_$()?"Bet\xF6lt\xE9s\u2026":"Friss\xEDt\xE9s"," "),s(),m(n.lastRefreshedAgo_$()?11:-1),s(),E("disabled",n.errors_DS.errorsLoading_$()||n.errors_DS.errors_$().length===0),s(2),F("bg-emerald-900",n.errors_DS.hideStaleBuild_$())("border-emerald-500",n.errors_DS.hideStaleBuild_$())("text-emerald-200",n.errors_DS.hideStaleBuild_$())("border-neutral-600",!n.errors_DS.hideStaleBuild_$())("text-neutral-300",!n.errors_DS.hideStaleBuild_$()),s(),z(" ",n.errors_DS.hideStaleBuild_$()?"\u2713 STALE elrejtve":"STALE mutat\xE1sa"," (",n.visibleVsTotalLabel_$(),") "),s(),m(n.errors_DS.errorsLoadError_$()?16:-1),s(),m(n.errors_DS.errorsLoading_$()&&n.errors_DS.errors_$().length===0?17:n.errors_DS.errors_$().length===0&&!n.errors_DS.errorsLoadError_$()?18:n.visibleErrors_$().length===0&&n.errors_DS.hideStaleBuild_$()?19:n.errors_DS.errors_$().length>0?20:-1))},dependencies:[H,w,M,G],encapsulation:2})}return i})();var Mt=[{path:"",pathMatch:"full",component:Y}],Ht=(()=>{class i{static \u0275fac=function(e){return new(e||i)};static \u0275mod=P({type:i});static \u0275inj=U({imports:[W,X.forChild(Mt),w,M]})}return i})();export{Ht as Errors_Module};
6
- //# sourceMappingURL=err.module-B666YXQT.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["src/app/_modules/system/_modules/errors/_components/ccap-errors/errors.component.ts", "src/app/_modules/system/_modules/errors/_components/ccap-errors/errors.component.html", "src/app/_modules/system/_modules/errors/err.module.ts"],
4
- "sourcesContent": ["import { Component, OnInit, OnDestroy, inject, signal, computed } from '@angular/core';\n\nimport { second } from '@futdevpro/fsm-dynamo';\n\nimport { ObjectTypeGuards_Util } from '../../../../../../_collections/utils/object-type-guards.util';\nimport { CCAP_ErrorContextDetailEntry_Interface } from '../../../../../../_models/interfaces/feedback-errors/ccap-error-context-detail-entry.interface';\nimport { CCAP_ErrorListItem_Response } from '../../../../../../_models/interfaces/feedback-errors/ccap-error-list-item.interface';\nimport { Errors_DataService } from '../../_services/errors.data-service';\n\n/**\n * Hibák oldal: lista (message, source, CCAP/session/run, occurrenceCount, lastOccurrenceAt), route/URL;\n * kontextus részletek és stack kinyitható; Clear all, soronkénti Clear, Másolás.\n */\n@Component({\n selector: 'app-ccap-errors',\n templateUrl: './errors.component.html',\n})\n/** Errors_Component class. */\nexport class Errors_Component implements OnInit, OnDestroy {\n\n readonly errors_DS: Errors_DataService = inject(Errors_DataService);\n\n /** Tick signal — 10 másodpercenként frissül a relatív idő kijelzéshez. */\n private readonly refreshTick_$ = signal<number>(0);\n private refreshTickInterval: ReturnType<typeof setInterval> | null = null;\n\n /** Utolsó frissítés óta eltelt idő szövegesen (pl. \"most\", \"2 perce\"). */\n readonly lastRefreshedAgo_$ = computed((): string => {\n void this.refreshTick_$();\n const lastDate: Date | null = this.errors_DS.lastRefreshedAt_$();\n if (!lastDate) {\n return '';\n }\n const diffMs: number = Date.now() - lastDate.getTime();\n const seconds: number = Math.floor(diffMs / 1000);\n const minutes: number = Math.floor(seconds / 60);\n const hours: number = Math.floor(minutes / 60);\n\n if (seconds < 10) {\n return 'most';\n }\n if (seconds < 60) {\n return `${seconds} mp`;\n }\n if (minutes < 60) {\n return `${minutes} perce`;\n }\n return `${hours} órája`;\n });\n\n /** PM / user megjelölés POST folyamatban erre az `_id`-re (üres = nincs). */\n readonly pmUserMarkBusyErrorId_$ = signal<string>('');\n\n /**\n * Cycle 780 (REQ-SYS-EH-FIX-ANNOTATION-001) — szűrt lista a default\n * `hideStaleBuild_$` toggle figyelembevételével. Default: STALE-BUILD elrejtve.\n */\n readonly visibleErrors_$ = computed<CCAP_ErrorListItem_Response[]>((): CCAP_ErrorListItem_Response[] => {\n const all: CCAP_ErrorListItem_Response[] = this.errors_DS.errors_$();\n if (!this.errors_DS.hideStaleBuild_$()) {\n return all;\n }\n return all.filter((e: CCAP_ErrorListItem_Response): boolean =>\n e.fixAnnotation?.classification !== 'STALE-BUILD',\n );\n });\n\n /** A teljes és szűrt lista méretét egyben mutató szöveg (pl. „24 / 38\"). */\n readonly visibleVsTotalLabel_$ = computed<string>((): string => {\n const total: number = this.errors_DS.errors_$().length;\n const visible: number = this.visibleErrors_$().length;\n if (visible === total) {\n return `${total}`;\n }\n return `${visible} / ${total}`;\n });\n\n /** Soronként kinyitott stack (_id → true). */\n readonly expandedId_$ = signal<Record<string, boolean>>({});\n\n /** Soronként kinyitott surroundingState extra részlet (_id → true). */\n readonly contextExpandedId_$ = signal<Record<string, boolean>>({});\n\n /** Hiba id → route / URL sor (template; CCAP/session/run külön a HTML-ben). */\n readonly errorContextLineMap_$ = computed<Record<string, string>>(() => {\n const errs: CCAP_ErrorListItem_Response[] = this.errors_DS.errors_$();\n const m: Record<string, string> = {};\n for (const err of errs) {\n const id: string = err._id ?? '';\n m[id] = Errors_Component.buildRouteUrlLine(err.surroundingState);\n }\n return m;\n });\n\n /** Hiba id → surroundingState extra (userMessage, baseline, userAgent, additionalContext, stb.) a blokkba. */\n readonly contextDetailTextMap_$ = computed<Record<string, string>>(() => {\n const errs: CCAP_ErrorListItem_Response[] = this.errors_DS.errors_$();\n const m: Record<string, string> = {};\n for (const err of errs) {\n const id: string = err._id ?? '';\n m[id] = Errors_Component.buildSurroundingStateExtraDetail(err.surroundingState);\n }\n return m;\n });\n\n /** Hiba id → strukturált kontextus bejegyzések a formázott megjelenítéshez. */\n readonly contextDetailEntries_$ = computed<Partial<Record<string, CCAP_ErrorContextDetailEntry_Interface[]>>>(() => {\n const errs: CCAP_ErrorListItem_Response[] = this.errors_DS.errors_$();\n const m: Partial<Record<string, CCAP_ErrorContextDetailEntry_Interface[]>> = {};\n for (const err of errs) {\n const id: string = err._id ?? '';\n m[id] = Errors_Component.buildContextDetailEntries(err.surroundingState);\n }\n return m;\n });\n\n ngOnInit(): void {\n void this.errors_DS.loadErrors();\n this.refreshTickInterval = setInterval((): void => {\n this.refreshTick_$.update((v: number): number => v + 1);\n }, 10 * second);\n }\n\n ngOnDestroy(): void {\n if (this.refreshTickInterval) {\n clearInterval(this.refreshTickInterval);\n }\n }\n\n /** Lista újratöltése. */\n refresh(): void {\n void this.errors_DS.loadErrors();\n }\n\n /** Összes hiba törlése. */\n clearAll(): void {\n void this.errors_DS.clearAll();\n }\n\n /** Egy hiba törlése. */\n clearOne(id: string): void {\n void this.errors_DS.clearOne(id);\n }\n\n /**\n * PM / user manuális megjelölés vagy törlése.\n */\n handlePmUserMark(err: CCAP_ErrorListItem_Response, marked: boolean): void {\n const id: string = err._id ?? '';\n if (!id.length || this.pmUserMarkBusyErrorId_$() === id) {\n return;\n }\n this.pmUserMarkBusyErrorId_$.set(id);\n void this.errors_DS.setPmUserMark(id, marked).finally((): void => {\n this.pmUserMarkBusyErrorId_$.set('');\n });\n }\n\n /** Stack kinyitva van-e az adott id-hez (tesztekhez; template expandedId_$()[id]-t használ). */\n isExpanded(id: string): boolean {\n return this.expandedId_$()[id] === true;\n }\n\n /** Hiba azonosító (tesztekhez; template err._id-t használ). */\n getErrorId(err: CCAP_ErrorListItem_Response): string {\n return err._id ?? '';\n }\n\n /**\n * Route / URL a surroundingState-ből (meta sor; azonosítók külön a template-ben).\n */\n private static buildRouteUrlLine(\n state: Record<string, unknown> | undefined,\n ): string {\n if (!state || typeof state !== 'object') {\n return '';\n }\n const route: unknown = state.route;\n const url: unknown = state.url;\n const routeStr: string =\n typeof route === 'string' && route.trim().length > 0 ? route.trim() : '';\n const urlStr: string =\n typeof url === 'string' && url.trim().length > 0 ? url.trim() : '';\n if (routeStr && urlStr) {\n return `Route: ${routeStr} · URL: ${urlStr}`;\n }\n if (routeStr) {\n return `Route: ${routeStr}`;\n }\n if (urlStr) {\n return `URL: ${urlStr}`;\n }\n return '';\n }\n\n /**\n * Másolás / getErrorContextLine: azonosítók + route/URL egy blokkban.\n */\n private static buildContextLine(err: CCAP_ErrorListItem_Response): string {\n const parts: string[] = [];\n if (err.ccapId?.trim()) {\n parts.push(`CCAP: ${err.ccapId.trim()}`);\n }\n if (err.sessionId?.trim()) {\n parts.push(`Session: ${err.sessionId.trim()}`);\n }\n if (err.runId?.trim()) {\n parts.push(`Run: ${err.runId.trim()}`);\n }\n const routeUrl: string = Errors_Component.buildRouteUrlLine(err.surroundingState);\n if (routeUrl.length > 0) {\n parts.push(routeUrl);\n }\n return parts.join(' · ');\n }\n\n /**\n * SurroundingState-ből több sor: userMessage, session/run (ha csak itt vannak), szerver baseline, kliens mezők, additionalContext.\n */\n private static buildSurroundingStateExtraDetail(\n state: Record<string, unknown> | undefined,\n ): string {\n const flat: Record<string, unknown> =\n Errors_Component.flattenSurroundingStateForDisplay(state);\n if (Object.keys(flat).length === 0) {\n return '';\n }\n const lines: string[] = [];\n const pushStringLine = (label: string, value: unknown): void => {\n if (typeof value === 'string' && value.trim().length > 0) {\n lines.push(`${label}: ${value.trim()}`);\n }\n };\n pushStringLine('userMessage', flat.userMessage);\n pushStringLine('sessionId (surroundingState)', flat.sessionId);\n pushStringLine('runId (surroundingState)', flat.runId);\n pushStringLine('nodeVersion', flat.nodeVersion);\n pushStringLine('platform', flat.platform);\n pushStringLine('timestamp', flat.timestamp);\n pushStringLine('userAgent', flat.userAgent);\n const additionalContext: unknown = flat.additionalContext;\n if (ObjectTypeGuards_Util.isRecord(additionalContext)) {\n try {\n const json: string = JSON.stringify(additionalContext, null, 2);\n lines.push(`additionalContext:\\n${json}`);\n } catch {\n lines.push('additionalContext: [not serializable]');\n }\n }\n const printedKeys: Set<string> = new Set<string>([\n 'userMessage',\n 'sessionId',\n 'runId',\n 'nodeVersion',\n 'platform',\n 'timestamp',\n 'userAgent',\n 'additionalContext',\n 'route',\n 'url',\n ]);\n const restKeys: string[] = Object.keys(flat).filter(\n (k: string): boolean => !printedKeys.has(k),\n );\n restKeys.sort();\n for (const key of restKeys) {\n const v: unknown = flat[key];\n if (v === undefined || v === null) {\n continue;\n }\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n lines.push(`${key}: ${String(v)}`);\n continue;\n }\n try {\n lines.push(`${key}:\\n${JSON.stringify(v, null, 2)}`);\n } catch {\n lines.push(`${key}: [not serializable]`);\n }\n }\n return lines.join('\\n');\n }\n\n /**\n * Strukturált kontextus bejegyzéseket épít a surroundingState-ből a formázott megjelenítéshez.\n */\n private static buildContextDetailEntries(\n state: Record<string, unknown> | undefined,\n ): CCAP_ErrorContextDetailEntry_Interface[] {\n const flat: Record<string, unknown> =\n Errors_Component.flattenSurroundingStateForDisplay(state);\n if (Object.keys(flat).length === 0) {\n return [];\n }\n const entries: CCAP_ErrorContextDetailEntry_Interface[] = [];\n\n /** Egyszerű string mezőt bejegyzéssé alakít, ha nem üres. */\n const pushIfString = (label: string, value: unknown): void => {\n if (typeof value === 'string' && value.trim().length > 0) {\n entries.push({ label: label, value: value.trim(), isMultiline: false });\n }\n };\n\n pushIfString('sessionId (surroundingState)', flat.sessionId);\n pushIfString('runId (surroundingState)', flat.runId);\n pushIfString('nodeVersion', flat.nodeVersion);\n pushIfString('platform', flat.platform);\n pushIfString('timestamp', flat.timestamp);\n pushIfString('userMessage', flat.userMessage);\n pushIfString('userAgent', flat.userAgent);\n\n // additionalContext — rekurzívan stringified JSON mezőket is kifejtjük\n const additionalContext: unknown = flat.additionalContext;\n if (ObjectTypeGuards_Util.isRecord(additionalContext)) {\n const formatted: string = Errors_Component.formatObjectDeep(additionalContext);\n entries.push({ label: 'additionalContext', value: formatted, isMultiline: true });\n }\n\n // Maradék mezők (route, url, stb. kihagyva, mert a meta sorban jelennek meg)\n const printedKeys: Set<string> = new Set<string>([\n 'userMessage', 'sessionId', 'runId', 'nodeVersion', 'platform',\n 'timestamp', 'userAgent', 'additionalContext', 'route', 'url',\n ]);\n const restKeys: string[] = Object.keys(flat).filter(\n (k: string): boolean => !printedKeys.has(k),\n );\n restKeys.sort();\n for (const key of restKeys) {\n const v: unknown = flat[key];\n if (v === undefined || v === null) {\n continue;\n }\n if (typeof v === 'string' || typeof v === 'number' || typeof v === 'boolean') {\n entries.push({ label: key, value: String(v), isMultiline: false });\n continue;\n }\n try {\n const json: string = JSON.stringify(v, null, 2);\n entries.push({ label: key, value: json, isMultiline: true });\n } catch {\n entries.push({ label: key, value: '[not serializable]', isMultiline: false });\n }\n }\n return entries;\n }\n\n /**\n * JSON objektumot formáz megjelenítéshez — stringified JSON értékeket is kifejtve.\n */\n private static formatObjectDeep(obj: Record<string, unknown>): string {\n const parsed: Record<string, unknown> = {};\n for (const key of Object.keys(obj)) {\n parsed[key] = Errors_Component.tryParseJsonString(obj[key]);\n }\n return JSON.stringify(parsed, null, 2);\n }\n\n /**\n * Ha az érték stringified JSON, parse-olja; egyébként visszaadja az eredetit.\n */\n private static tryParseJsonString(value: unknown): unknown {\n if (typeof value !== 'string') {\n return value;\n }\n const trimmed: string = value.trim();\n if (\n (trimmed.startsWith('{') && trimmed.endsWith('}')) ||\n (trimmed.startsWith('[') && trimmed.endsWith(']'))\n ) {\n try {\n return JSON.parse(trimmed);\n } catch {\n return value;\n }\n }\n return value;\n }\n\n /**\n * Egyszintű surroundingState a megjelenítéshez: beágyazott surroundingState egy szintre lapítása.\n */\n private static flattenSurroundingStateForDisplay(\n state: Record<string, unknown> | undefined,\n ): Record<string, unknown> {\n if (!state || typeof state !== 'object') {\n return {};\n }\n const nested: unknown = state.surroundingState;\n if (ObjectTypeGuards_Util.isRecord(nested)) {\n const { surroundingState: _drop, ...outerRest } = state;\n return {\n ...outerRest,\n ...nested,\n };\n }\n return { ...state };\n }\n\n /** Stack toggle. */\n toggleExpanded(id: string): void {\n this.expandedId_$.update((prev: Record<string, boolean>) => ({\n ...prev,\n [id]: !prev[id],\n }));\n }\n\n /**\n * SurroundingState extra részlet (userAgent, timestamp, additionalContext) kinyitása / bezárása.\n */\n toggleContextExpanded(id: string): void {\n this.contextExpandedId_$.update((prev: Record<string, boolean>) => ({\n ...prev,\n [id]: !prev[id],\n }));\n }\n\n /**\n * Van-e kinyitható kontextus részlet (userMessage, baseline, userAgent, additionalContext, egyéb) a map alapján.\n */\n hasContextDetailText(id: string | undefined): boolean {\n if (!id) {\n return false;\n }\n const entries: CCAP_ErrorContextDetailEntry_Interface[] | undefined = this.contextDetailEntries_$()[id];\n if (entries?.length) {\n return true;\n }\n return this.contextDetailTextMap_$()[id]?.trim().length > 0;\n }\n\n /**\n * Egy hiba teljes tartalmának szöveges összeállítása másoláshoz (message, source, stack, stb.).\n * Az s-copy-button komponens kezeli a vágólapra másolást és a visszajelzést.\n */\n getErrorCopyText(err: CCAP_ErrorListItem_Response): string {\n const parts: string[] = [];\n if (err.message?.trim()) {\n parts.push(err.message.trim());\n }\n const meta: string[] = [];\n if (err.source?.trim()) {\n meta.push(`Forrás: ${err.source.trim()}`);\n }\n if (err.occurrenceCount != null && err.occurrenceCount > 1) {\n meta.push(`Előfordulások: ${err.occurrenceCount}`);\n }\n const raw: string | undefined = err.lastOccurrenceAt ?? err.timestamp;\n const dateStr: string =\n !raw ? '–' : ((): string => {\n try {\n return new Date(raw).toLocaleString(undefined, { dateStyle: 'short', timeStyle: 'short' });\n } catch {\n return raw;\n }\n })();\n if (dateStr !== '–') {\n meta.push(`Utolsó: ${dateStr}`);\n }\n if (meta.length > 0) {\n parts.push(meta.join(' · '));\n }\n const contextSummary: string = Errors_Component.buildContextLine(err);\n if (contextSummary.trim().length > 0) {\n parts.push('');\n parts.push(contextSummary);\n }\n const contextExtra: string = Errors_Component.buildSurroundingStateExtraDetail(\n err.surroundingState,\n );\n if (contextExtra.trim().length > 0) {\n parts.push('');\n parts.push('Kontextus részletek:');\n parts.push(contextExtra.trim());\n }\n if (err.stack?.trim()) {\n parts.push('');\n parts.push('Stack:');\n parts.push(err.stack.trim());\n }\n return parts.join('\\n');\n }\n\n /** Kontextus sor (tesztekhez; template errorContextLineMap_$-t használ). */\n getErrorContextLine(err: CCAP_ErrorListItem_Response): string {\n return Errors_Component.buildContextLine(err);\n }\n}\n", "<div class=\"max-w-4xl mx-auto p-3 gt-xs:p-6 text-neutral-100\">\n <h1 class=\"text-xl gt-xs:text-2xl font-bold mb-4 gt-xs:mb-6\">Hibák</h1>\n <p class=\"text-neutral-400 text-sm gt-xs:text-base mb-4 gt-xs:mb-6\">\n A rendszerben rögzített hibák listája (szerver és kliens). Sorrend: legfelül a legfrissebb utolsó előfordulás\n (<code class=\"bg-neutral-800 px-1 rounded\">lastOccurrenceAt</code> / első rögzítés ideje). Azonos hiba többszöri\n előfordulása egy sorban jelenik meg (előfordulások száma). Törölheted egyenként vagy mindegyiket egyszerre.\n </p>\n\n <div class=\"flex flex-wrap gap-1.5 gt-xs:gap-2 items-center mb-3 gt-xs:mb-4\">\n <button type=\"button\"\n (click)=\"refresh()\"\n [disabled]=\"errors_DS.errorsLoading_$()\"\n class=\"px-3 py-1.5 gt-xs:px-4 gt-xs:py-2 text-sm gt-xs:text-base border border-neonCyan rounded\n text-neutral-300 hover:bg-neutral-700 disabled:opacity-50 transition-colors\">\n {{ errors_DS.errorsLoading_$() ? 'Betöltés…' : 'Frissítés' }}\n </button>\n @if (lastRefreshedAgo_$()) {\n <span class=\"text-neutral-500 text-xs gt-xs:text-sm\">\n {{ lastRefreshedAgo_$() }}\n </span>\n }\n <button type=\"button\"\n (click)=\"clearAll()\"\n [disabled]=\"errors_DS.errorsLoading_$() || errors_DS.errors_$().length === 0\"\n class=\"px-3 py-1.5 gt-xs:px-4 gt-xs:py-2 text-sm gt-xs:text-base bg-red-900/60 border border-red-500/70\n rounded text-red-200 hover:bg-red-900/80 disabled:opacity-50 transition-colors\">\n Összes törlése\n </button>\n <!-- Cycle 780 (REQ-SYS-EH-FIX-ANNOTATION-001): STALE-BUILD szűrő toggle. -->\n <button type=\"button\"\n (click)=\"errors_DS.hideStaleBuild_$.set(!errors_DS.hideStaleBuild_$())\"\n class=\"ml-auto px-3 py-1.5 gt-xs:px-4 gt-xs:py-2 text-sm gt-xs:text-base border rounded\n transition-colors\"\n [class.bg-emerald-900]=\"errors_DS.hideStaleBuild_$()\"\n [class.border-emerald-500]=\"errors_DS.hideStaleBuild_$()\"\n [class.text-emerald-200]=\"errors_DS.hideStaleBuild_$()\"\n [class.border-neutral-600]=\"!errors_DS.hideStaleBuild_$()\"\n [class.text-neutral-300]=\"!errors_DS.hideStaleBuild_$()\"\n title=\"Régebbi server-build-ekből származó, már fixelt errorok elrejtése (cycle 780 fix-annotation registry)\">\n {{ errors_DS.hideStaleBuild_$() ? '✓ STALE elrejtve' : 'STALE mutatása' }}\n ({{ visibleVsTotalLabel_$() }})\n </button>\n </div>\n\n @if (errors_DS.errorsLoadError_$()) {\n <div class=\"mb-4\">\n <p class=\"text-neutral-300 mb-3\">A lista nem tölthető be.</p>\n <app-ccap-error-display\n [error]=\"errors_DS.errorsLoadErrorRaw_$() ?? errors_DS.errorsLoadError_$()\" />\n </div>\n }\n\n @if (errors_DS.errorsLoading_$() && errors_DS.errors_$().length === 0) {\n <p class=\"text-neutral-400\">Betöltés…</p>\n } @else if (errors_DS.errors_$().length === 0 && !errors_DS.errorsLoadError_$()) {\n <p class=\"text-neutral-500\">Nincs rögzített hiba.</p>\n } @else if (visibleErrors_$().length === 0 && errors_DS.hideStaleBuild_$()) {\n <p class=\"text-neutral-500\">\n Csak STALE-BUILD bejegyzések vannak (régebbi server-build-ekből, már fixelt). Kapcsold ki a szűrőt\n a megjelenítéshez vagy használd az\n <code class=\"bg-neutral-800 px-1 rounded\">errors-cleanup-stale.sh</code>-t a takarításhoz.\n </p>\n } @else if (errors_DS.errors_$().length > 0) {\n <div class=\"space-y-2 gt-xs:space-y-3\">\n @for (err of visibleErrors_$(); track err._id) {\n <div class=\"p-2.5 gt-xs:p-4 bg-neutral-800/50 border border-neonDefault rounded-lg\">\n <!-- xs: műveletek felül; gt-xs: jobb oszlop. Üzenet + meta alatta / balon. -->\n <div class=\"min-w-0 flex flex-col gap-2 gt-xs:flex-row gt-xs:items-start gt-xs:justify-between gt-xs:gap-2\">\n <div class=\"flex items-center gap-1.5 gt-xs:gap-2 flex-wrap justify-end gt-xs:justify-end order-1\n gt-xs:order-2 shrink-0 w-full gt-xs:w-auto\">\n <app-s-copy-button [content]=\"getErrorCopyText(err)\" />\n @if (err.pmUserMarkedAt?.trim()) {\n <button type=\"button\"\n (click)=\"handlePmUserMark(err, false)\"\n [disabled]=\"!err._id || pmUserMarkBusyErrorId_$() === err._id\"\n class=\"px-2 py-1 gt-xs:px-3 gt-xs:py-1.5 text-amber-300 hover:bg-amber-900/25 rounded\n border border-amber-600/50 text-xs gt-xs:text-sm disabled:opacity-50\n transition-colors shrink-0\">\n Jelölés törlése\n </button>\n } @else {\n <button type=\"button\"\n (click)=\"handlePmUserMark(err, true)\"\n [disabled]=\"!err._id || pmUserMarkBusyErrorId_$() === err._id\"\n class=\"px-2 py-1 gt-xs:px-3 gt-xs:py-1.5 text-neutral-300 hover:bg-neutral-700/50 rounded\n border border-neutral-600 text-xs gt-xs:text-sm disabled:opacity-50\n transition-colors shrink-0\">\n Megjelölés\n </button>\n }\n <button type=\"button\"\n (click)=\"clearOne(err._id ?? '')\"\n [disabled]=\"!err._id\"\n class=\"px-2 py-1 gt-xs:px-3 gt-xs:py-1.5 text-red-400 hover:bg-red-900/30 rounded\n text-xs gt-xs:text-sm disabled:opacity-50 transition-colors shrink-0\">\n Törlés\n </button>\n </div>\n <div class=\"min-w-0 flex-1 order-2 gt-xs:order-1 w-full gt-xs:w-auto\">\n <!-- Cycle 780 fix-annotation badge: a message FÖLÖTT, hogy jól látsszon. -->\n @if (err.fixAnnotation && err.fixAnnotation.classification !== 'UNFIXED') {\n <div class=\"mb-1 gt-xs:mb-1.5 flex flex-wrap items-center gap-1.5\">\n @if (err.fixAnnotation.classification === 'STALE-BUILD') {\n <span class=\"px-1.5 py-0.5 text-[10px] gt-xs:text-xs font-mono uppercase tracking-wider\n bg-emerald-900/60 border border-emerald-600 rounded text-emerald-200\"\n title=\"Régebbi server-build, már fixelt — biztonságosan mark-done-olható.\">\n STALE\n </span>\n } @else if (err.fixAnnotation.classification === 'REGRESSION') {\n <span class=\"px-1.5 py-0.5 text-[10px] gt-xs:text-xs font-mono uppercase tracking-wider\n bg-red-900/60 border border-red-600 rounded text-red-200\"\n title=\"A fix után újra előfordult — valódi regresszió, vissza implementre.\">\n REGRESSION\n </span>\n }\n <span class=\"text-[11px] gt-xs:text-xs text-neutral-400 font-mono\">\n Fixed in {{ err.fixAnnotation.fixedInVersion }} (cycle {{ err.fixAnnotation.fixedInCycle }})\n </span>\n @if (err.fixAnnotation.summary) {\n <span class=\"text-[11px] gt-xs:text-xs text-neutral-500 italic break-words\">\n — {{ err.fixAnnotation.summary }}\n </span>\n }\n </div>\n }\n <p class=\"font-medium text-neutral-200 text-sm gt-xs:text-base break-words\">{{\n err.message ?? '–' }}</p>\n <p class=\"text-neutral-500 text-[11px] gt-xs:text-sm mt-1.5 gt-xs:mt-1 flex flex-wrap gap-x-2 gap-y-1\">\n @if (err.pmUserMarkedAt?.trim()) {\n <span class=\"break-words text-amber-400/90 font-medium\">Megjelölve (PM)</span>\n }\n <span class=\"break-words\">Forrás: {{ err.source ?? '–' }}</span>\n @if (err.occurrenceCount != null && err.occurrenceCount > 1) {\n <span class=\"break-words\">· Előfordulások: {{ err.occurrenceCount }}</span>\n }\n <span class=\"break-words\">· Utolsó: {{ (err.lastOccurrenceAt ?? err.timestamp) ?\n ((err.lastOccurrenceAt ?? err.timestamp) | date:'short') : '–' }}</span>\n @if (err.ccapId?.trim()) {\n <span class=\"break-words\">· CCAP: {{ err.ccapId }}</span>\n }\n @if (err.sessionId?.trim()) {\n <span class=\"break-words\">· Session: {{ err.sessionId }}</span>\n }\n @if (err.runId?.trim()) {\n <span class=\"break-words\">· Run: {{ err.runId }}</span>\n }\n @if (errorContextLineMap_$()[err._id ?? '']) {\n <span class=\"break-words\">· {{ errorContextLineMap_$()[err._id ?? ''] }}</span>\n }\n </p>\n </div>\n </div>\n @if (hasContextDetailText(err._id)) {\n <div class=\"mt-1.5 gt-xs:mt-2\">\n <button type=\"button\"\n (click)=\"toggleContextExpanded(err._id ?? '')\"\n class=\"text-neutral-400 hover:text-neutral-200 text-xs gt-xs:text-sm flex items-center gap-1\">\n <svg class=\"w-3 h-3 shrink-0 transition-transform duration-150\"\n [class.-rotate-90]=\"!contextExpandedId_$()[err._id ?? '']\"\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n {{ contextExpandedId_$()[err._id ?? ''] ? 'Kontextus részletek elrejtése' : 'Kontextus részletek' }}\n </button>\n @if (contextExpandedId_$()[err._id ?? '']) {\n <div class=\"mt-1.5 p-2 gt-xs:p-3 bg-neutral-900 rounded max-h-[70vh] overflow-y-auto\n space-y-1.5 gt-xs:space-y-2\">\n @for (entry of contextDetailEntries_$()[err._id ?? ''] ?? []; track entry.label) {\n <div class=\"text-xs\">\n @if (entry.isMultiline) {\n <div class=\"text-neutral-500 font-medium mb-0.5\">{{ entry.label }}</div>\n <pre class=\"p-1.5 gt-xs:p-2 bg-neutral-950/60 rounded text-neutral-300 font-mono\n whitespace-pre-wrap break-words overflow-x-auto\">{{ entry.value }}</pre>\n } @else {\n <div class=\"flex flex-wrap gap-x-1.5\">\n <span class=\"text-neutral-500 font-medium shrink-0\">{{ entry.label }}:</span>\n <span class=\"text-neutral-300 break-all font-mono\">{{ entry.value }}</span>\n </div>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n @if (err.stack?.trim()) {\n <div class=\"mt-1.5 gt-xs:mt-2\">\n <button type=\"button\"\n (click)=\"toggleExpanded(err._id ?? '')\"\n class=\"text-neutral-400 hover:text-neutral-200 text-xs gt-xs:text-sm flex items-center gap-1\">\n <svg class=\"w-3 h-3 shrink-0 transition-transform duration-150\"\n [class.-rotate-90]=\"!expandedId_$()[err._id ?? '']\"\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\"\n stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\">\n <polyline points=\"6 9 12 15 18 9\"></polyline>\n </svg>\n {{ expandedId_$()[err._id ?? ''] ? 'Stack elrejtése' : 'Stack megjelenítése' }}\n </button>\n @if (expandedId_$()[err._id ?? '']) {\n <pre class=\"mt-1 p-1.5 gt-xs:p-2 bg-neutral-900 rounded text-xs text-neutral-300 font-mono\n whitespace-pre-wrap break-words overflow-x-auto max-h-[70vh] overflow-y-auto\">{{\n err.stack }}</pre>\n }\n </div>\n }\n </div>\n }\n </div>\n }\n\n <div class=\"pt-4 gt-xs:pt-6\">\n <a routerLink=\"/\"\n class=\"inline-flex px-3 py-1.5 gt-xs:px-4 gt-xs:py-2 text-sm gt-xs:text-base border border-neonCyan rounded\n text-neutral-300 hover:bg-neutral-700\">\n Vissza\n </a>\n </div>\n</div>\n", "import { NgModule } from '@angular/core';\nimport { CommonModule } from '@angular/common';\nimport { RouterModule, Routes } from '@angular/router';\n\nimport { CCAP_ErrorDisplay_Component } from '../../../../_components/ccap-error-display/ccap-error-display.component';\nimport { S_CopyButton_Component } from '../../../shared/_components/s-copy-button/s-copy-button.component';\nimport { Errors_Component } from './_components/ccap-errors/errors.component';\n\n/** Errors modul route: errors path → hibák listája. */\nconst errorsRoutes: Routes = [\n { path: '', pathMatch: 'full', component: Errors_Component },\n];\n\n/**\n * Errors (Hibák) modul.\n * Rögzített hibák listázása, törlése (egyenként vagy mind).\n */\n@NgModule({\n declarations: [Errors_Component],\n imports: [\n CommonModule,\n RouterModule.forChild(errorsRoutes),\n CCAP_ErrorDisplay_Component,\n S_CopyButton_Component,\n ],\n})\n/** Errors_Module class. */\nexport class Errors_Module {}\n"],
5
- "mappings": "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",
6
- "names": ["import_fsm_dynamo", "\u0275\u0275elementStart", "\u0275\u0275text", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275textInterpolate1", "ctx_r0", "lastRefreshedAgo_$", "\u0275\u0275element", "\u0275\u0275property", "tmp_1_0", "errors_DS", "errorsLoadErrorRaw_$", "undefined", "errorsLoadError_$", "\u0275\u0275listener", "\u0275\u0275restoreView", "_r3", "err_r4", "\u0275\u0275nextContext", "$implicit", "\u0275\u0275resetView", "handlePmUserMark", "_id", "pmUserMarkBusyErrorId_$", "_r5", "fixAnnotation", "summary", "\u0275\u0275template", "Errors_Component_Conditional_20_For_2_Conditional_9_Conditional_1_Template", "Errors_Component_Conditional_20_For_2_Conditional_9_Conditional_2_Template", "Errors_Component_Conditional_20_For_2_Conditional_9_Conditional_5_Template", "\u0275\u0275conditional", "classification", "\u0275\u0275textInterpolate2", "fixedInVersion", "fixedInCycle", "occurrenceCount", "ccapId", "sessionId", "runId", "errorContextLineMap_$", "tmp_12_0", "\u0275\u0275textInterpolate", "entry_r7", "label", "value", "Errors_Component_Conditional_20_For_2_Conditional_24_Conditional_5_For_2_Conditional_1_Template", "Errors_Component_Conditional_20_For_2_Conditional_24_Conditional_5_For_2_Conditional_2_Template", "isMultiline", "\u0275\u0275repeaterCreate", "Errors_Component_Conditional_20_For_2_Conditional_24_Conditional_5_For_2_Template", "_forTrack1", "\u0275\u0275repeater", "tmp_13_0", "contextDetailEntries_$", "\u0275\u0275pureFunction0", "_c0", "_r6", "toggleContextExpanded", "Errors_Component_Conditional_20_For_2_Conditional_24_Conditional_5_Template", "\u0275\u0275classProp", "contextExpandedId_$", "tmp_14_0", "stack", "_r8", "toggleExpanded", "Errors_Component_Conditional_20_For_2_Conditional_25_Conditional_5_Template", "expandedId_$", "Errors_Component_Conditional_20_For_2_Conditional_4_Template", "Errors_Component_Conditional_20_For_2_Conditional_5_Template", "_r2", "clearOne", "Errors_Component_Conditional_20_For_2_Conditional_9_Template", "Errors_Component_Conditional_20_For_2_Conditional_13_Template", "Errors_Component_Conditional_20_For_2_Conditional_16_Template", "Errors_Component_Conditional_20_For_2_Conditional_20_Template", "Errors_Component_Conditional_20_For_2_Conditional_21_Template", "Errors_Component_Conditional_20_For_2_Conditional_22_Template", "Errors_Component_Conditional_20_For_2_Conditional_23_Template", "Errors_Component_Conditional_20_For_2_Conditional_24_Template", "Errors_Component_Conditional_20_For_2_Conditional_25_Template", "getErrorCopyText", "pmUserMarkedAt", "trim", "tmp_15_0", "message", "tmp_17_0", "source", "tmp_19_0", "lastOccurrenceAt", "timestamp", "\u0275\u0275pipeBind2", "tmp_23_0", "hasContextDetailText", "Errors_Component_Conditional_20_For_2_Template", "_forTrack0", "visibleErrors_$", "Errors_Component", "inject", "Errors_DataService", "refreshTick_$", "signal", "refreshTickInterval", "computed", "lastDate", "lastRefreshedAt_$", "diffMs", "Date", "now", "getTime", "seconds", "Math", "floor", "minutes", "hours", "all", "errors_$", "hideStaleBuild_$", "filter", "e", "visibleVsTotalLabel_$", "total", "length", "visible", "errs", "m", "err", "id", "buildRouteUrlLine", "surroundingState", "contextDetailTextMap_$", "buildSurroundingStateExtraDetail", "buildContextDetailEntries", "ngOnInit", "loadErrors", "setInterval", "update", "v", "second", "ngOnDestroy", "clearInterval", "refresh", "clearAll", "marked", "set", "setPmUserMark", "finally", "isExpanded", "getErrorId", "state", "route", "url", "routeStr", "urlStr", "buildContextLine", "parts", "push", "routeUrl", "join", "flat", "flattenSurroundingStateForDisplay", "Object", "keys", "lines", "pushStringLine", "userMessage", "nodeVersion", "platform", "userAgent", "additionalContext", "ObjectTypeGuards_Util", "isRecord", "json", "JSON", "stringify", "printedKeys", "Set", "restKeys", "k", "has", "sort", "key", "String", "entries", "pushIfString", "formatted", "formatObjectDeep", "obj", "parsed", "tryParseJsonString", "trimmed", "startsWith", "endsWith", "parse", "nested", "_drop", "outerRest", "__spreadValues", "prev", "__spreadProps", "meta", "raw", "dateStr", "toLocaleString", "dateStyle", "timeStyle", "contextSummary", "contextExtra", "getErrorContextLine", "selectors", "decls", "vars", "consts", "template", "rf", "ctx", "Errors_Component_Conditional_11_Template", "Errors_Component_Conditional_16_Template", "Errors_Component_Conditional_17_Template", "Errors_Component_Conditional_18_Template", "Errors_Component_Conditional_19_Template", "Errors_Component_Conditional_20_Template", "errorsLoading_$", "errorsRoutes", "path", "pathMatch", "component", "Errors_Component", "Errors_Module", "CommonModule", "RouterModule", "forChild", "CCAP_ErrorDisplay_Component", "S_CopyButton_Component"]
7
- }