@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 x}from"./chunk-RSPVPEQ4.js";import{a as T}from"./chunk-UFBTR2BG.js";import{a as P}from"./chunk-5C3KCWYF.js";import{e as D}from"./chunk-JZHYGU3K.js";import{G as C,I as y,p as N}from"./chunk-SLSTIBOT.js";import{C as f,a as m,aa as o,b as _,h as O,jb as k,k as a,l as b,p as h,vb as g,xb as w,y as E}from"./chunk-TBMJSIBB.js";var A=class{static computeSocketUrlFromStatus(S,e){return e}};var L=class{static toDisplayString(S){if(S==null)return"";if(typeof S=="string")return S;if(typeof S=="object"&&S!==null){let t=S;if(typeof t.message=="string"&&t.message.trim().length>0)return t.message.trim();if(typeof t.error=="string"&&t.error.trim().length>0)return t.error.trim();if(typeof t.detail=="string"&&t.detail.trim().length>0)return t.detail.trim()}let e=String(S);return e==="[object Object]"?"\u2014":e}};var d=O(N());var F=(()=>{class r{baseUrl=`${y.api.baseUrl}/session`;http=f(w);getMessages(e){return h(this.http.get(`${this.baseUrl}/${e.sessionId}/messages`,{params:{viewMode:e.viewMode}}))}getMessagesChunked(e){let t={viewMode:e.viewMode};return e.beforeIndex!=null&&(t.beforeIndex=String(e.beforeIndex)),e.limit!=null&&(t.limit=String(e.limit)),e.latest&&(t.latest="1"),e.archiveScope&&(t.archiveScope=e.archiveScope),h(this.http.get(`${this.baseUrl}/${e.sessionId}/messages/chunk`,{params:t}))}sendMessage(e){return h(this.http.post(`${this.baseUrl}/${e.sessionId}/messages`,{content:e.content,imageAttachments:e.imageAttachments}))}static \u0275fac=function(t){return new(t||r)};static \u0275prov=E({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var R=(()=>{class r{baseUrl=`${y.api.baseUrl}/session`;http=f(w);peiContext_DS=f(P);currentCcapId(){return this.peiContext_DS.activeCcapId_$()}withCcapId(e){let t=this.currentCcapId();return t?e.set("ccapId",t):e}listSessions(){let e=this.withCcapId(new g);return h(this.http.get(this.baseUrl,{params:e}))}listArchivedSessions(){let e=this.withCcapId(new g);return e=e.set("archived","true"),h(this.http.get(this.baseUrl,{params:e}))}createSession(e){let t={},s=e?.name!==void 0?e.name.trim():void 0;s!==void 0&&s.length>0&&(t.name=s);let n=this.withCcapId(new g);return h(this.http.post(this.baseUrl,t,{params:n}))}getSession(e){let t=this.withCcapId(new g);return h(this.http.get(`${this.baseUrl}/${e}`,{params:t}))}updateSession(e){let t=this.withCcapId(new g);return h(this.http.patch(`${this.baseUrl}/${e.sessionId}`,e.updates,{params:t}))}getSessionInfo(e){let t=this.withCcapId(new g);return h(this.http.get(`${this.baseUrl}/${e}/session-info`,{params:t}))}copySession(e){let t={};e.name&&(t.name=e.name),e.forkUntilMessageKey&&(t.forkUntilMessageKey=e.forkUntilMessageKey);let s=this.withCcapId(new g);return h(this.http.post(`${this.baseUrl}/${e.sessionId}/copy`,t,{params:s}))}stopExecution(e){let t=this.withCcapId(new g);return h(this.http.post(`${this.baseUrl}/${e}/stop-execution`,{},{params:t}))}getLlmDebugTrace(e){let t=this.withCcapId(new g);return t=t.set("runId",e.runId),h(this.http.get(`${this.baseUrl}/${e.sessionId}/llm-debug-trace`,{params:t}))}static \u0275fac=function(t){return new(t||r)};static \u0275prov=E({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();var B="answer",V="notify-user",j="agent-events",z="context:updated",H="monitoring:event",G="user-interaction:request",q="user-interaction:resolved",W="ccap_notification",Q="notification-sent",X="waiting-for-user",Ce=(()=>{class r{sessionDetailBySessionId=new Map;sessionInfoBySessionId=new Map;activeSessionId_$=o("");requestSidebarCloseOnMobileBump_$=o(0);sessions_$=o([]);sessionsLoadError_$=o(null);sessionsLoading_$=o(!1);archivedSessions_$=o([]);archivedSessionsLoading_$=o(!1);messages_$=o([]);messagesLoading_$=o(!1);messagesLoadError_$=o(null);currentArchiveScope_$=o("active");chunkState_$=o({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:0});agentEvents_$=o({});activeRunExecutionMode_$=o("");contextUpdated_$=o(null);monitoringEvent_$=o(null);monitoringEvent_S=new b;pendingInteraction_$=o(null);pendingNotification_$=o(null);sessionDetailMap_$=o(new Map);sessionDetailLoading_$=o(!1);sessionInfoMap_$=o(new Map);sessionInfoLoading_$=o(!1);sessionInfoLoadError_$=o(null);llmDebugTraceEntries_$=o([]);llmDebugTraceLoading_$=o(!1);llmDebugTraceLoadError_$=o(null);eventSubscription=null;connectedEffectRef=null;session_AS=f(R);conversation_AS=f(F);serverStatus_AS=f(x);socket_CS=f(D);get connected_$(){return this.socket_CS.connected_$}get socketStatus_$(){return this.socket_CS.status_$}get lastSocketError_$(){return this.socket_CS.lastError_$}get connectAttemptCount_$(){return this.socket_CS.connectAttemptCount_$}diagnoseConnection(){return this.socket_CS.diagnoseConnection()}constructor(){this.eventSubscription=this.socket_CS.event$.subscribe(e=>{this.handleSocketEvent(e)}),this.connectedEffectRef=k(()=>{this.socket_CS.connected_$()&&this.getActiveSessionId()&&this.socket_CS.emit("session:attach",{sessionId:this.getActiveSessionId()})})}handleSocketEvent(e){let t=e.payload??{},s=this.getActiveSessionId(),n=typeof t.channelId=="string"?t.channelId:void 0,p=typeof t.sessionId=="string"?t.sessionId:void 0,v=!n&&!p||n===s||p===s;if(e.event===B&&v){let i=typeof t.content=="string"?t.content:"",c=typeof t.timestamp=="string"?t.timestamp:new Date().toISOString(),l=typeof t.runId=="string"?t.runId:void 0,I={role:"assistant",content:i,timestamp:new Date(c)},u=l?_(m({},I),{runId:l}):I,$=this.ensureClientListKey(u);this.messages_$.set([...this.messages_$(),$]);return}if(e.event===V&&v){let i=typeof t.content=="string"?t.content:"";d.DyFM_Log.info(`CCAP_SessionDS | notify-user received: ${i.substring(0,120)}\u2026`);let c=this.ensureClientListKey({role:"system",content:i,timestamp:new Date});this.messages_$.set([...this.messages_$(),c]);return}if(e.event===j){let i=typeof t.eventData=="object"&&t.eventData!==null?t.eventData:{};this.agentEvents_$.set(i),this.applyAgentEventRunExecutionModeLatch(i);let c=typeof i.toolId=="string"?i.toolId:"",l=typeof i.phase=="string"?i.phase:"";c===W&&(l===Q||l===X)?this.pendingNotification_$.set({phase:l,notificationTitle:typeof i.notificationTitle=="string"?i.notificationTitle:"",notificationType:typeof i.notificationType=="string"?i.notificationType:"",notificationPriority:typeof i.notificationPriority=="string"?i.notificationPriority:"info"}):this.pendingNotification_$()&&this.pendingNotification_$.set(null);let I=i.toolError,u=n??i.channelId,$=!u||u===s,M=L.toDisplayString(I).trim();if(M.length>0&&$){d.DyFM_Log.info(`CCAP_SessionDS | toolError from agent-events, pushing to chat: ${M.substring(0,80)}\u2026`);let K=this.ensureClientListKey({role:"system",content:M,timestamp:new Date});this.messages_$.set([...this.messages_$(),K])}return}if(e.event===z){let i=typeof t.sessionId=="string"?t.sessionId:"",c=typeof t.contextState=="object"&&t.contextState!==null?t.contextState:{};this.contextUpdated_$.set({sessionId:i,contextState:c});return}if(e.event===H){let i=typeof t.sessionId=="string"?t.sessionId:"",c=typeof t.event=="object"&&t.event!==null?t.event:{},l={sessionId:i,event:c};this.monitoringEvent_$.set(l),this.monitoringEvent_S.next(l);return}if(e.event===G&&v){this.pendingInteraction_$.set(t);return}if(e.event===q&&v){let i=typeof t.interactionId=="string"?t.interactionId:void 0;if(!i)return;this.pendingInteraction_$()?.interactionId===i&&this.pendingInteraction_$.set(null);return}}loadSessions(){return a(this,null,function*(){this.sessionsLoading_$.set(!0);try{this.sessionsLoadError_$.set(null);let e=yield this.session_AS.listSessions();return this.sessions_$.set(e.sessions),e.sessions}catch(e){return d.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load sessions",e),this.sessionsLoadError_$.set(e),[]}finally{this.sessionsLoading_$.set(!1)}})}createSession(e){return a(this,null,function*(){let t=yield this.session_AS.createSession(e);return yield this.loadSessions(),t.session})}copySession(e){return a(this,null,function*(){let t=yield this.session_AS.copySession(e);return yield this.loadSessions(),t.session})}forkSession(e){return a(this,null,function*(){let t=yield this.session_AS.copySession({sessionId:e.sessionId,name:e.name,forkUntilMessageKey:e.forkUntilMessageKey});return yield this.loadSessions(),t.session})}loadArchivedSessions(){return a(this,null,function*(){this.archivedSessionsLoading_$.set(!0);try{let e=yield this.session_AS.listArchivedSessions();return this.archivedSessions_$.set(e.sessions),e.sessions}catch(e){return d.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load archived sessions",e),this.archivedSessions_$.set([]),[]}finally{this.archivedSessionsLoading_$.set(!1)}})}setActiveSession(e){this.activeSessionId_$()!==e&&(this.activeSessionId_$.set(e),this.clearMessages(),this.pendingInteraction_$.set(null),this.activeRunExecutionMode_$.set("")),this.socket_CS.emit("session:attach",{sessionId:e})}getActiveSessionId(){return this.activeSessionId_$()}reconnectSocket(){return a(this,null,function*(){try{let e=yield this.serverStatus_AS.getStatus(),t=typeof window<"u"?window.location.origin:"",s=A.computeSocketUrlFromStatus({httpPort:e.httpPort,socketPort:e.socketPort},t),n=y.socketUrl??t;if(s!==n&&typeof window<"u"){y.socketUrl=s,d.DyFM_Log.info("CCAP_SessionDS | socketUrl changed on reconnect, reloading",s),window.location.reload();return}}catch{}this.socket_CS.reconnect()})}stopExecution(e){return a(this,null,function*(){try{return(yield this.session_AS.stopExecution(e)).success}catch(t){return d.DyFM_Error.logSimple("CCAP_Session_DS | stopExecution failed",t),!1}})}sendMessageViaSocket(e,t){return a(this,null,function*(){let s=e.trim();if(s==="/new")return{newSession:yield this.createSession(),sent:!0};let n=this.activeSessionId_$();if(!n)return{sent:!1};let p=(t?.length??0)>0;if(!s.length&&!p)return{sent:!1};let v={role:"user",content:e,timestamp:new Date},i=this.ensureClientListKey(v);this.messages_$.set([...this.messages_$(),i]);try{let l=(yield this.conversation_AS.sendMessage({sessionId:n,content:e,imageAttachments:t})).message,I=this.messages_$().map(u=>{if(u.clientListKey!==i.clientListKey)return u;let $=m({},u);return l.messageKey&&($.messageKey=l.messageKey),l.hasTtsAudio!==void 0&&($.hasTtsAudio=l.hasTtsAudio),$});return this.messages_$.set(I),{sent:!0}}catch(c){d.DyFM_Error.logSimple("CCAP_SessionDS | Failed to send message via REST",c);let l=this.messages_$().filter(u=>u.clientListKey!==i.clientListKey);return this.messages_$.set(l),{sent:!1,error:c instanceof Error?c.message:"\xDCzenet k\xFCld\xE9se sikertelen."}}})}sendMessageToSession(e){return a(this,null,function*(){yield this.conversation_AS.sendMessage({sessionId:e.sessionId,content:e.content})})}sendInteractionResponse(e){this.socket_CS.emit("user-interaction:response",e),this.pendingInteraction_$.set(null)}clearMessages(){this.messages_$.set([]),this.chunkState_$.set({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:0}),this.currentArchiveScope_$.set("active")}setMessages(e){let s=(e??[]).map(n=>this.ensureClientListKey(n));this.messages_$.set(s)}ensureClientListKey(e){if(e.clientListKey?.trim()?.length)return e;let s=e.messageKey?.trim();return s?.length?_(m({},e),{clientListKey:s}):_(m({},e),{clientListKey:globalThis.crypto.randomUUID()})}setMessageTtsCached(e){let s=this.messages_$().map(n=>n.messageKey===e?_(m({},n),{hasTtsAudio:!0}):n);this.messages_$.set(s)}loadMessagesForView(e){return a(this,null,function*(){this.messagesLoading_$.set(!0),this.messagesLoadError_$.set(null);try{let s=(yield this.conversation_AS.getMessages({sessionId:e,viewMode:"conversationFull"})).messages??[];return e===this.activeSessionId_$()&&this.setMessages(s),s}catch(t){return d.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load messages for view",t),this.messagesLoadError_$.set(t),[]}finally{this.messagesLoading_$.set(!1)}})}loadInitialChunk(e){return a(this,null,function*(){this.messagesLoading_$.set(!0),this.messagesLoadError_$.set(null);try{let t=yield this.conversation_AS.getMessagesChunked({sessionId:e.sessionId,viewMode:e.viewMode??"conversationFull",latest:!0,limit:e.limit??50,archiveScope:e.archiveScope});return e.sessionId===this.activeSessionId_$()&&(this.setMessages(t.messages??[]),this.chunkState_$.set({total:t.total,hasMore:t.hasMore,nextBeforeIndex:t.nextBeforeIndex,isLoadingOlder:!1,archivedTotal:t.archivedTotal})),t}catch(t){return d.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load initial chunk",t),this.messagesLoadError_$.set(t),null}finally{this.messagesLoading_$.set(!1)}})}loadOlderChunk(e){return a(this,null,function*(){let t=this.chunkState_$();if(!t.hasMore||t.nextBeforeIndex==null||t.isLoadingOlder)return null;this.chunkState_$.set(_(m({},t),{isLoadingOlder:!0}));try{let s=yield this.conversation_AS.getMessagesChunked({sessionId:e.sessionId,viewMode:e.viewMode??"conversationFull",beforeIndex:t.nextBeforeIndex,limit:e.limit??50,archiveScope:e.archiveScope});if(e.sessionId===this.activeSessionId_$()){let n=(s.messages??[]).map(p=>this.ensureClientListKey(p));this.messages_$.set([...n,...this.messages_$()]),this.chunkState_$.set({total:s.total,hasMore:s.hasMore,nextBeforeIndex:s.nextBeforeIndex,isLoadingOlder:!1,archivedTotal:s.archivedTotal})}else this.chunkState_$.set(_(m({},t),{isLoadingOlder:!1}));return s}catch(s){return d.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load older chunk",s),this.messagesLoadError_$.set(s),this.chunkState_$.set(_(m({},t),{isLoadingOlder:!1})),null}})}switchToArchiveView(e){return a(this,null,function*(){this.currentArchiveScope_$.set("archive");let t=this.chunkState_$().archivedTotal;return this.messages_$.set([]),this.chunkState_$.set({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:t}),this.loadInitialChunk({sessionId:e,archiveScope:"archive"})})}switchToActiveView(e){return a(this,null,function*(){return this.currentArchiveScope_$.set("active"),this.messages_$.set([]),this.chunkState_$.set({total:0,hasMore:!1,nextBeforeIndex:null,isLoadingOlder:!1,archivedTotal:0}),this.loadInitialChunk({sessionId:e,archiveScope:"active"})})}loadSessionDetail(e){return a(this,null,function*(){if(!e)return null;this.sessionDetailLoading_$.set(!0);try{let t=yield this.session_AS.getSession(e),s={session:t.session,lastRun:t.lastRun??null};return this.sessionDetailBySessionId.set(e,s),this.sessionDetailMap_$.set(new Map(this.sessionDetailBySessionId)),s}catch(t){return d.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load session detail",t),null}finally{this.sessionDetailLoading_$.set(!1)}})}getCachedSessionDetail(e){return this.sessionDetailBySessionId.get(e)??null}loadSessionInfo(e){return a(this,null,function*(){if(!e)return null;this.sessionInfoLoading_$.set(!0),this.sessionInfoLoadError_$.set(null);try{let t=yield this.session_AS.getSessionInfo(e);return this.sessionInfoBySessionId.set(e,t),this.sessionInfoMap_$.set(new Map(this.sessionInfoBySessionId)),t}catch(t){return d.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load session info",t),this.sessionInfoLoadError_$.set(t),null}finally{this.sessionInfoLoading_$.set(!1)}})}getCachedSessionInfo(e){return this.sessionInfoBySessionId.get(e)??null}fetchLlmDebugTraceEntriesForRun(e){return a(this,null,function*(){let t=e.sessionId?.trim()??"",s=e.runId?.trim()??"";if(!t||!s)return[];try{return(yield this.session_AS.getLlmDebugTrace({sessionId:t,runId:s})).entries??[]}catch{return[]}})}loadLlmDebugTrace(e){return a(this,null,function*(){let t=e.sessionId?.trim()??"",s=e.runId?.trim()??"";if(!t||!s){this.llmDebugTraceEntries_$.set([]);return}this.llmDebugTraceLoading_$.set(!0),this.llmDebugTraceLoadError_$.set(null);try{let n=yield this.session_AS.getLlmDebugTrace({sessionId:t,runId:s});this.llmDebugTraceEntries_$.set(n.entries)}catch(n){d.DyFM_Error.logSimple("CCAP_SessionDS | Failed to load LLM debug trace",n),this.llmDebugTraceLoadError_$.set(n),this.llmDebugTraceEntries_$.set([])}finally{this.llmDebugTraceLoading_$.set(!1)}})}updateSession(e){return a(this,null,function*(){try{let t=yield this.session_AS.updateSession(e),s=e.updates.archived;return s===!0||s===!1?(yield this.loadSessions(),yield this.loadArchivedSessions()):yield this.loadSessions(),t.session}catch(t){return d.DyFM_Error.logSimple("CCAP_SessionDS | Failed to update session",t),null}})}applyAgentEventRunExecutionModeLatch(e){let t=e.phase,s=typeof t=="string"?t.trim():"";if(s===T.analyzeResult){let n=e.runExecutionMode;if(typeof n=="string"&&n.trim()!==""){let p=r.normalizeRunExecutionModeSocketValue(n);p!==void 0&&this.activeRunExecutionMode_$.set(p)}return}(s===T.runFlowComplete||s===T.runInitialization)&&this.activeRunExecutionMode_$.set("")}static normalizeRunExecutionModeSocketValue(e){let t=e.trim(),s=[C.instant,C.agenticAny,C.ask,C.plan];for(let n of s)if(t===n)return n}ngOnDestroy(){this.monitoringEvent_S.complete(),this.eventSubscription&&(this.eventSubscription.unsubscribe(),this.eventSubscription=null),this.connectedEffectRef&&(this.connectedEffectRef.destroy(),this.connectedEffectRef=null)}static \u0275fac=function(t){return new(t||r)};static \u0275prov=E({token:r,factory:r.\u0275fac,providedIn:"root"})}return r})();export{A as a,L as b,Ce as c};
2
- //# sourceMappingURL=chunk-4GPIIB3D.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["src/app/_collections/utils/socket-url.util.ts", "src/app/_collections/display/display-string.util.ts", "src/app/_modules/session/_services/data-services/session.data-service.ts", "src/app/_modules/session/_services/api-services/ses-conversation.api-service.ts", "src/app/_modules/session/_services/api-services/session.api-service.ts"],
4
- "sourcesContent": ["/**\n * Socket URL számítás a GET /server/status válaszból (httpPort, socketPort).\n * Közös logika: main.ts bootstrap és reconnect flow (status refresh).\n */\n\nimport { CCAP_StatusPorts_Interface } from './socket-url.util.interface';\n\n/**\n * Socket URL util – statikus metódusokkal.\n */\nexport class SocketUrl_Util {\n /**\n * Status válaszból kiszámítja a socket URL-t.\n * Mindig same-origin (origin): dev-ben a proxy-local továbbítja 39052-re,\n * server-served HTTP (39050) esetén a socket ugyanazon a HTTP szerveren van,\n * HTTPS UI (39051) esetén a szerver /socket.io-t a belső HTTP port Engine.IO-jára proxyzza (wss).\n */\n static computeSocketUrlFromStatus(\n _data: CCAP_StatusPorts_Interface,\n origin: string,\n ): string {\n return origin;\n }\n}\n", "/**\n * Ismeretlen érték megjelenítési szöveggé alakítása.\n * Object esetén nem \"[object Object]\" hanem .message / .error / .detail vagy fallback.\n */\nexport class DisplayString_Util {\n /**\n * Ismeretlen érték megjelenítési szöveggé alakítása.\n */\n static toDisplayString(value: unknown): string {\n if (value === undefined || value === null) {\n return '';\n }\n if (typeof value === 'string') {\n return value;\n }\n if (typeof value === 'object' && value !== null) {\n const o: Record<string, unknown> = value as Record<string, unknown>;\n if (typeof o.message === 'string' && o.message.trim().length > 0) {\n return o.message.trim();\n }\n if (typeof o.error === 'string' && o.error.trim().length > 0) {\n return o.error.trim();\n }\n if (typeof o.detail === 'string' && o.detail.trim().length > 0) {\n return o.detail.trim();\n }\n }\n const s: string = String(value);\n if (s === '[object Object]') {\n return '—';\n }\n return s;\n }\n}\n", "import { effect, EffectRef, inject, Injectable, OnDestroy, signal } from '@angular/core';\n\nimport { Subject, Subscription } from 'rxjs';\n\nimport { DyFM_Error, DyFM_Log } from '@futdevpro/fsm-dynamo';\n\nimport { AC_RunExecutionMode_Type } from '@server-enums';\nimport { SocketUrl_Util } from '../../../../_collections/utils/socket-url.util';\nimport { DisplayString_Util } from '../../../../_collections/display/display-string.util';\nimport { AC_RunFlowPhase_Type } from '../../../../_enums/run-session/ccap-run-flow-phase.enum';\nimport { CCAP_SocketStatus_Type } from '../../../../_enums/ccap-socket-status.enum';\nimport { AC_LastRunSummary_Response } from '../../../../_models/interfaces/session/ccap-last-run-summary.interface';\nimport {\n CCAP_SessionListItem_Response,\n} from '../../../../_models/interfaces/session/ccap-session-list-item.interface';\nimport {\n AC_LlmDebugTraceEntry_Response,\n AC_SessionInfo_Response,\n UIn_UserInteractionRequest_Interface,\n UIn_UserInteractionResponse_Interface,\n} from '../../../../_models/server-index';\nimport {\n Ses_ArchiveScope_Type,\n Ses_ClientImageAttachment_Response,\n Ses_ClientMessage_Response,\n Ses_MessagesChunk_Response,\n} from '../api-services/conversation.api-service.interface';\nimport { Ses_Conversation_ApiService } from '../api-services/ses-conversation.api-service';\nimport { SSt_Server_ApiService } from '../../../system/_modules/system-status/_services/sst-server.api-service';\nimport { Session_ApiService } from '../api-services/session.api-service';\nimport { CCAP_Socket_ControlService } from '../../../../_services/control-services/ccap-socket.control-service';\nimport { environment } from '../../../../../environments/environment';\n\n/** Szerver event nevek (egyezzen a socket service konstansokkal). */\nconst SOCKET_EVENT_ANSWER: string = 'answer';\nconst SOCKET_EVENT_NOTIFY_USER: string = 'notify-user';\nconst SOCKET_EVENT_AGENT_EVENTS: string = 'agent-events';\nconst SOCKET_EVENT_CONTEXT_UPDATED: string = 'context:updated';\nconst SOCKET_EVENT_MONITORING_EVENT: string = 'monitoring:event';\nconst SOCKET_EVENT_USER_INTERACTION_REQUEST: string = 'user-interaction:request';\nconst SOCKET_EVENT_USER_INTERACTION_RESOLVED: string = 'user-interaction:resolved';\n\n/** NTF notification tool ID — agent-events toolId felismeréshez. */\nconst NTF_TOOL_ID: string = 'ccap_notification';\n/** Agent-events phase: notification elküldve (message típus). */\nconst NTF_PHASE_SENT: string = 'notification-sent';\n/** Agent-events phase: notification válaszra vár (interaktív típus). */\nconst NTF_PHASE_WAITING: string = 'waiting-for-user';\n\n/**\n * Session data service.\n * Session state management; real-time események a Socket Control Service event$ streamből szűrve.\n */\n@Injectable({ providedIn: 'root' })\nexport class Session_DataService implements OnDestroy {\n\n /** Session detail cache (session + lastRun) sessionId szerint. */\n private sessionDetailBySessionId: Map<\n string,\n { session: CCAP_SessionListItem_Response; lastRun: AC_LastRunSummary_Response | null }\n > = new Map();\n\n /** Session info cache sessionId szerint. */\n private sessionInfoBySessionId: Map<string, AC_SessionInfo_Response> = new Map();\n\n /** Aktív session ID (main frame WebSocket indikátor). */\n readonly activeSessionId_$ = signal<string>('');\n\n /**\n * REQ-UI-SES-MOB-AUTOCLOSE-001: bump-counter signal — explicit kérés a session-list\n * sidebar mobil-bezárására. A `ses-list` (`createNewSession` után) bumpolja, a\n * `ses-shell` effect-tel figyeli és isMobile esetén bezárja a sidebar-t. Ez kiegészíti\n * a NavigationEnd-alapú auto-close-t azokra az esetekre, ahol a route-snapshot lag\n * miatt a NavigationEnd-handler nem fut megfelelően (vagy a flow nem navigation-alapú).\n */\n readonly requestSidebarCloseOnMobileBump_$ = signal<number>(0);\n\n /** Session lista. */\n readonly sessions_$ = signal<CCAP_SessionListItem_Response[]>([]);\n\n /** Session lista betöltési hiba (null = nincs hiba); nyers error az app-ccap-error-display-nek. */\n readonly sessionsLoadError_$ = signal<unknown | null>(null);\n\n /** Session lista betöltés folyamatban (true = loading). */\n readonly sessionsLoading_$ = signal<boolean>(false);\n\n /** Archivált session lista. */\n readonly archivedSessions_$ = signal<CCAP_SessionListItem_Response[]>([]);\n\n /** Archivált session lista betöltés folyamatban (true = loading). */\n readonly archivedSessionsLoading_$ = signal<boolean>(false);\n\n /** Üzenetek (real-time chat). */\n readonly messages_$ = signal<Ses_ClientMessage_Response[]>([]);\n\n /** Üzenetek betöltés folyamatban (true = loading). */\n readonly messagesLoading_$ = signal<boolean>(false);\n\n /** Üzenetek betöltési hiba (null = nincs hiba); nyers error az app-ccap-error-display-nek. */\n readonly messagesLoadError_$ = signal<unknown | null>(null);\n\n /**\n * REQ-SES-CONTENT-CHUNK-LOAD-AND-ARCHIVE-001 Slice 5 — aktuális archive-view scope\n * (a chat-komponens „Archív szakasz megnyitása\" gomb-toggle-jétől). Default\n * `'active'` — session-switch is reset-eli erre. A `loadInitialChunk` /\n * `loadOlderChunk` callerek ezt olvassák, hogy a megfelelő scope-ot küldjék\n * az API-nak. `'archive'`-ban a chat csak archív üzeneteket lát.\n */\n readonly currentArchiveScope_$ = signal<Ses_ArchiveScope_Type>('active');\n\n /**\n * REQ-SES-CONTENT-CHUNK-LOAD-AND-ARCHIVE-001 Slice 3+4 — chunk-pagináció state.\n * `total`: aktív (scope-szerinti) message-count; `hasMore`: van-e még régebbi\n * szakasz; `nextBeforeIndex`: a következő prepend kursor (vagy null);\n * `isLoadingOlder`: true a backward-prepend fetch alatt (UI top-spinner);\n * `archivedTotal`: a session-ben lévő archív üzenetek száma (Slice 4 — UI\n * „Archív szakasz megnyitása\" gomb-szám).\n */\n readonly chunkState_$ = signal<{\n total: number;\n hasMore: boolean;\n nextBeforeIndex: number | null;\n isLoadingOlder: boolean;\n archivedTotal: number;\n }>({\n total: 0,\n hasMore: false,\n nextBeforeIndex: null,\n isLoadingOlder: false,\n archivedTotal: 0,\n });\n\n /** Agent event-ek (phase, status a chat status/typing-hoz). */\n readonly agentEvents_$ = signal<Record<string, unknown>>({});\n\n /**\n * Aktuális futás `runExecutionMode`-ja az utolsó analyze-result agent-event után;\n * törlődik run vége / új run init / session váltás után (run summary + chat badge).\n */\n readonly activeRunExecutionMode_$ = signal<string>('');\n\n /** Context frissítés event (real-time context panel). */\n readonly contextUpdated_$ = signal<{\n sessionId: string;\n contextState: Record<string, unknown>;\n } | null>(null);\n\n /** Monitoring event (real-time timeline); signal – backward compat, de nem elsődleges csatorna. */\n readonly monitoringEvent_$ = signal<{\n sessionId: string;\n event: Record<string, unknown>;\n } | null>(null);\n\n /**\n * Monitoring event Subject (megbízható event stream).\n * A signal-alapú monitoringEvent_$ batch-elés miatt köztes event-eket veszíthet;\n * ez a Subject minden event-et garantáltan továbbít a subscriber-eknek.\n */\n readonly monitoringEvent_S: Subject<{\n sessionId: string;\n event: Record<string, unknown>;\n }> = new Subject();\n\n /** Pending user interaction request (agent kérdez, user válaszol a UI card-on). */\n readonly pendingInteraction_$ = signal<UIn_UserInteractionRequest_Interface | null>(null);\n\n /**\n * Pending notification event az agent-events stream-ből (ccap_notification tool hívás közben).\n * A chat UI inline notification kártyát / status szöveget renderel ebből.\n * phase: 'notification-sent' (message típus, rövid flash) vagy 'waiting-for-user' (interaktív, amíg válasz jön).\n */\n readonly pendingNotification_$ = signal<{\n phase: string;\n notificationTitle: string;\n notificationType: string;\n notificationPriority: string;\n } | null>(null);\n\n /** Session detail map (cache). */\n readonly sessionDetailMap_$ = signal<\n Map<string, { session: CCAP_SessionListItem_Response; lastRun: AC_LastRunSummary_Response | null }>\n >(new Map());\n\n /** Session detail betöltés folyamatban. */\n readonly sessionDetailLoading_$ = signal<boolean>(false);\n\n /** Session info map (cache). */\n readonly sessionInfoMap_$ = signal<Map<string, AC_SessionInfo_Response>>(new Map());\n\n /** Session info betöltés folyamatban. */\n readonly sessionInfoLoading_$ = signal<boolean>(false);\n\n /** Session info betöltési hiba (null = nincs hiba). */\n readonly sessionInfoLoadError_$ = signal<unknown | null>(null);\n\n /** Utolsó betöltött LLM debug trace (Info panel). */\n readonly llmDebugTraceEntries_$ = signal<AC_LlmDebugTraceEntry_Response[]>([]);\n\n /** LLM debug trace betöltés folyamatban. */\n readonly llmDebugTraceLoading_$ = signal<boolean>(false);\n\n /** LLM debug trace betöltési hiba. */\n readonly llmDebugTraceLoadError_$ = signal<unknown | null>(null);\n\n /** Socket event$ feliratkozás (ngOnDestroy-ben lemondjuk). */\n private eventSubscription: Subscription | null = null;\n\n /** effect: reconnect után session:attach újraküldése. */\n private connectedEffectRef: EffectRef | null = null;\n\n private readonly session_AS: Session_ApiService = inject(Session_ApiService);\n private readonly conversation_AS: Ses_Conversation_ApiService =\n inject(Ses_Conversation_ApiService);\n private readonly serverStatus_AS: SSt_Server_ApiService =\n inject(SSt_Server_ApiService);\n private readonly socket_CS: CCAP_Socket_ControlService =\n inject(CCAP_Socket_ControlService);\n\n /** Csatlakozás signal (Socket Service-ből delegálva). */\n get connected_$() {\n return this.socket_CS.connected_$;\n }\n\n /** Socket státusz signal (main frame indikátor: connecting | connected | error). */\n get socketStatus_$() {\n return this.socket_CS.status_$;\n }\n\n /** Utolsó socket hiba signal (tooltip copy-hoz); nyers error. */\n get lastSocketError_$() {\n return this.socket_CS.lastError_$;\n }\n\n /** Csatlakozási kísérletek száma (connect_error-kor nő, sikeres connect-nél nullázódik). */\n get connectAttemptCount_$() {\n return this.socket_CS.connectAttemptCount_$;\n }\n\n /** Aktív kapcsolódási diagnosztika futtatása (probe: szerver API + socket.io endpoint). */\n diagnoseConnection(): Promise<Record<string, unknown>> {\n return this.socket_CS.diagnoseConnection();\n }\n\n constructor() {\n this.eventSubscription = this.socket_CS.event$.subscribe(\n (envelope: { event: string; payload: Record<string, unknown> }): void => {\n this.handleSocketEvent(envelope);\n },\n );\n this.connectedEffectRef = effect((): void => {\n if (this.socket_CS.connected_$() && this.getActiveSessionId()) {\n this.socket_CS.emit('session:attach', {\n sessionId: this.getActiveSessionId(),\n });\n }\n });\n }\n\n /**\n * Socket event kezelése: sessionId/channelId alapján szűr, majd a megfelelő subject-ekbe pushol.\n */\n private handleSocketEvent(envelope: { event: string; payload: Record<string, unknown> }): void {\n const payload: Record<string, unknown> = envelope.payload ?? {};\n const activeId: string = this.getActiveSessionId();\n const channelId: string | undefined =\n typeof payload.channelId === 'string' ? payload.channelId : undefined;\n const sessionIdFromPayload: string | undefined =\n typeof payload.sessionId === 'string' ? payload.sessionId : undefined;\n const isForActive: boolean =\n !channelId && !sessionIdFromPayload\n || channelId === activeId\n || sessionIdFromPayload === activeId;\n\n if (envelope.event === SOCKET_EVENT_ANSWER && isForActive) {\n const content: string = typeof payload.content === 'string' ? payload.content : '';\n const timestamp: string =\n typeof payload.timestamp === 'string' ? payload.timestamp : new Date().toISOString();\n const runId: string | undefined =\n typeof payload.runId === 'string' ? payload.runId : undefined;\n const base: Ses_ClientMessage_Response = {\n role: 'assistant',\n content: content,\n timestamp: new Date(timestamp),\n };\n const withRun: Ses_ClientMessage_Response = runId\n ? { ...base, runId: runId }\n : base;\n const stamped: Ses_ClientMessage_Response = this.ensureClientListKey(withRun);\n this.messages_$.set([...this.messages_$(), stamped]);\n return;\n }\n\n if (envelope.event === SOCKET_EVENT_NOTIFY_USER && isForActive) {\n const content: string = typeof payload.content === 'string' ? payload.content : '';\n DyFM_Log.info(\n `CCAP_SessionDS | notify-user received: ${content.substring(0, 120)}…`,\n );\n const stamped: Ses_ClientMessage_Response = this.ensureClientListKey({\n role: 'system',\n content: content,\n timestamp: new Date(),\n });\n this.messages_$.set([...this.messages_$(), stamped]);\n return;\n }\n\n if (envelope.event === SOCKET_EVENT_AGENT_EVENTS) {\n const eventData: Record<string, unknown> =\n (typeof payload.eventData === 'object' && payload.eventData !== null)\n ? (payload.eventData as Record<string, unknown>)\n : {};\n this.agentEvents_$.set(eventData);\n this.applyAgentEventRunExecutionModeLatch(eventData);\n\n // NTF notification tool hívás felismerése az agent-events stream-ből\n const toolId: string = typeof eventData.toolId === 'string' ? eventData.toolId : '';\n const eventPhase: string = typeof eventData.phase === 'string' ? eventData.phase : '';\n if (toolId === NTF_TOOL_ID\n && (eventPhase === NTF_PHASE_SENT || eventPhase === NTF_PHASE_WAITING)) {\n this.pendingNotification_$.set({\n phase: eventPhase,\n notificationTitle: typeof eventData.notificationTitle === 'string'\n ? eventData.notificationTitle : '',\n notificationType: typeof eventData.notificationType === 'string'\n ? eventData.notificationType : '',\n notificationPriority: typeof eventData.notificationPriority === 'string'\n ? eventData.notificationPriority : 'info',\n });\n } else if (this.pendingNotification_$()) {\n // Bármely más agent-event törli a pending notification-t (a tool befejeződött)\n this.pendingNotification_$.set(null);\n }\n\n const toolErrorContent: unknown = eventData.toolError;\n const chId: string | undefined =\n channelId ?? (eventData.channelId as string | undefined);\n const isForThisSession: boolean = !chId || chId === activeId;\n const toolErrorStr: string = DisplayString_Util.toDisplayString(toolErrorContent).trim();\n if (toolErrorStr.length > 0 && isForThisSession) {\n DyFM_Log.info(\n `CCAP_SessionDS | toolError from agent-events, pushing to chat: ${toolErrorStr.substring(0, 80)}…`,\n );\n const stamped: Ses_ClientMessage_Response = this.ensureClientListKey({\n role: 'system',\n content: toolErrorStr,\n timestamp: new Date(),\n });\n this.messages_$.set([...this.messages_$(), stamped]);\n }\n return;\n }\n\n if (envelope.event === SOCKET_EVENT_CONTEXT_UPDATED) {\n const sid: string =\n typeof payload.sessionId === 'string' ? payload.sessionId : '';\n const contextState: Record<string, unknown> =\n (typeof payload.contextState === 'object' && payload.contextState !== null)\n ? (payload.contextState as Record<string, unknown>)\n : {};\n this.contextUpdated_$.set({\n sessionId: sid,\n contextState: contextState,\n });\n return;\n }\n\n if (envelope.event === SOCKET_EVENT_MONITORING_EVENT) {\n const sid: string =\n typeof payload.sessionId === 'string' ? payload.sessionId : '';\n const ev: Record<string, unknown> =\n (typeof payload.event === 'object' && payload.event !== null)\n ? (payload.event as Record<string, unknown>)\n : {};\n const monitoringPayload: { sessionId: string; event: Record<string, unknown> } = {\n sessionId: sid,\n event: ev,\n };\n this.monitoringEvent_$.set(monitoringPayload);\n this.monitoringEvent_S.next(monitoringPayload);\n return;\n }\n\n if (envelope.event === SOCKET_EVENT_USER_INTERACTION_REQUEST && isForActive) {\n this.pendingInteraction_$.set(payload as unknown as UIn_UserInteractionRequest_Interface);\n return;\n }\n\n // User interaction resolved (bármely csatornáról érkező válasz) → inline card eltüntetése\n if (envelope.event === SOCKET_EVENT_USER_INTERACTION_RESOLVED && isForActive) {\n const resolvedId: string | undefined =\n typeof (payload as Record<string, unknown>).interactionId === 'string'\n ? (payload as Record<string, unknown>).interactionId as string\n : undefined;\n if (!resolvedId) {\n return;\n }\n const current: UIn_UserInteractionRequest_Interface | null = this.pendingInteraction_$();\n if (current?.interactionId === resolvedId) {\n this.pendingInteraction_$.set(null);\n }\n return;\n }\n }\n\n /**\n * Session lista frissítése a server-ről.\n * Hiba esetén sessionsLoadError$ értesül, hogy a UI megkülönböztesse az üres listát a hibától.\n * @returns A betöltött session lista (sikeres betöltésnél), hibánál üres tömb.\n */\n async loadSessions(): Promise<CCAP_SessionListItem_Response[]> {\n this.sessionsLoading_$.set(true);\n try {\n this.sessionsLoadError_$.set(null);\n\n const response = await this.session_AS.listSessions();\n\n this.sessions_$.set(response.sessions);\n return response.sessions;\n } catch (error: unknown) {\n DyFM_Error.logSimple('CCAP_SessionDS | Failed to load sessions', error);\n\n this.sessionsLoadError_$.set(error);\n return [];\n } finally {\n this.sessionsLoading_$.set(false);\n }\n }\n\n /**\n * Új session létrehozása (web UI \"New session\" gomb).\n * Létrehozza a session-t, frissíti a listát, visszaadja az új session-t.\n */\n async createSession(params?: { name?: string }): Promise<CCAP_SessionListItem_Response> {\n const response = await this.session_AS.createSession(params);\n\n await this.loadSessions();\n\n return response.session;\n }\n\n /**\n * Session másolása (conversation fork).\n * Új session-t hoz létre a forrás session összes conversation üzenetével.\n */\n async copySession(params: {\n sessionId: string;\n name?: string;\n }): Promise<CCAP_SessionListItem_Response> {\n const response = await this.session_AS.copySession(params);\n\n await this.loadSessions();\n\n return response.session;\n }\n\n /**\n * REQ-SES-FORK-001 Slice 2: session fork — új session a forrás üzeneteivel a megadott\n * `forkUntilMessageKey`-ig (inclusive). Ismeretlen key esetén a szerver `CCAP-SES-FORK-NF`\n * `DyFM_Error`-t ad vissza; a hívó komponens kezeli (pl. toast + popup bezárás).\n */\n async forkSession(params: {\n sessionId: string;\n forkUntilMessageKey: string;\n name?: string;\n }): Promise<CCAP_SessionListItem_Response> {\n const response = await this.session_AS.copySession({\n sessionId: params.sessionId,\n name: params.name,\n forkUntilMessageKey: params.forkUntilMessageKey,\n });\n\n await this.loadSessions();\n\n return response.session;\n }\n\n /**\n * Archivált session-ek betöltése (\"Archiváltak betöltése\" gomb).\n * Az eredmény az archivedSessions$-on keresztül érhető el.\n */\n async loadArchivedSessions(): Promise<CCAP_SessionListItem_Response[]> {\n this.archivedSessionsLoading_$.set(true);\n try {\n const response = await this.session_AS.listArchivedSessions();\n\n this.archivedSessions_$.set(response.sessions);\n return response.sessions;\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_SessionDS | Failed to load archived sessions',\n error,\n );\n\n this.archivedSessions_$.set([]);\n return [];\n } finally {\n this.archivedSessionsLoading_$.set(false);\n }\n }\n\n /**\n * Aktív session beállítása; session:attach küldése a Socket Service-en (ha csatlakozva van).\n * Session váltáskor az üzenetek törlődnek.\n * Ugyanarra az id-re második hívás (pl. effect dupla futás dev-ben) nem törli a chatet.\n */\n setActiveSession(sessionId: string): void {\n const previousId: string = this.activeSessionId_$();\n if (previousId !== sessionId) {\n this.activeSessionId_$.set(sessionId);\n this.clearMessages();\n this.pendingInteraction_$.set(null);\n this.activeRunExecutionMode_$.set('');\n }\n this.socket_CS.emit('session:attach', { sessionId: sessionId });\n }\n\n /**\n * Aktív session ID lekérdezése.\n */\n getActiveSessionId(): string {\n return this.activeSessionId_$();\n }\n\n /**\n * WebSocket újracsatlakozás (main frame indikátor kattintás).\n * Először status refresh: ha a socketUrl megváltozott (pl. szerver most lett elérhető), lap újratöltés;\n * különben csak socket reconnect.\n */\n async reconnectSocket(): Promise<void> {\n try {\n const status = await this.serverStatus_AS.getStatus();\n const origin: string =\n typeof window !== 'undefined' ? window.location.origin : '';\n const newSocketUrl: string = SocketUrl_Util.computeSocketUrlFromStatus(\n { httpPort: status.httpPort, socketPort: status.socketPort },\n origin,\n );\n const currentSocketUrl: string = environment.socketUrl ?? origin;\n if (newSocketUrl !== currentSocketUrl && typeof window !== 'undefined') {\n environment.socketUrl = newSocketUrl;\n DyFM_Log.info(\n 'CCAP_SessionDS | socketUrl changed on reconnect, reloading',\n newSocketUrl,\n );\n window.location.reload();\n return;\n }\n } catch {\n // Status fetch fail: csak socket reconnect (ugyanarra a címre).\n }\n this.socket_CS.reconnect();\n }\n\n /**\n * Futó execution leállítása (stop gomb).\n * Jelzi a szervernek, hogy a jelenlegi agentic loop-ot le kell állítani.\n */\n async stopExecution(sessionId: string): Promise<boolean> {\n try {\n const result: { success: boolean } =\n await this.session_AS.stopExecution(sessionId);\n return result.success;\n } catch (err: unknown) {\n DyFM_Error.logSimple('CCAP_Session_DS | stopExecution failed', err);\n return false;\n }\n }\n\n /**\n * Üzenet küldése REST API-n keresztül (POST /session/:id/messages).\n * A valós idejű válaszok (answer, notify-user, agent-events, stb.) továbbra is a WebSocketon érkeznek.\n * Ha a content \"/new\", új session-t hoz létre (REST) és visszaadja; különben az üzenet a REST végpontra megy.\n * Ha nincs sessionId vagy az API hiba, sent: false; a komponens jelezheti és megőrizheti a szöveget (opcionális error szöveg).\n */\n async sendMessageViaSocket(\n content: string,\n imageAttachments?: Ses_ClientImageAttachment_Response[],\n ): Promise<{\n newSession?: CCAP_SessionListItem_Response;\n sent: boolean;\n error?: string;\n }> {\n const trimmed: string = content.trim();\n if (trimmed === '/new') {\n const newSession: CCAP_SessionListItem_Response = await this.createSession();\n return { newSession: newSession, sent: true };\n }\n\n const sessionId: string = this.activeSessionId_$();\n if (!sessionId) {\n return { sent: false };\n }\n\n const hasImages: boolean = (imageAttachments?.length ?? 0) > 0;\n if (!trimmed.length && !hasImages) {\n return { sent: false };\n }\n\n // Optimista megjelenítés: a user üzenete azonnal megjelenik a chatben, mielőtt a REST hívás megtörténne.\n // Így a felhasználó azonnal látja a saját üzenetét, miközben a run elindul.\n const optimisticMsg: Ses_ClientMessage_Response = {\n role: 'user',\n content: content,\n timestamp: new Date(),\n };\n const optimisticStamped: Ses_ClientMessage_Response =\n this.ensureClientListKey(optimisticMsg);\n this.messages_$.set([...this.messages_$(), optimisticStamped]);\n\n try {\n const response = await this.conversation_AS.sendMessage({\n sessionId: sessionId,\n content: content,\n imageAttachments: imageAttachments,\n });\n\n // REST válasz után frissítjük az optimista üzenetet a szerver által adott mezőkkel (messageKey, hasTtsAudio).\n const serverMsg: Ses_ClientMessage_Response = response.message;\n const updatedMessages: Ses_ClientMessage_Response[] = this.messages_$().map(\n (msg: Ses_ClientMessage_Response): Ses_ClientMessage_Response => {\n if (msg.clientListKey !== optimisticStamped.clientListKey) {\n return msg;\n }\n const merged: Ses_ClientMessage_Response = { ...msg };\n if (serverMsg.messageKey) {\n merged.messageKey = serverMsg.messageKey;\n }\n if (serverMsg.hasTtsAudio !== undefined) {\n merged.hasTtsAudio = serverMsg.hasTtsAudio;\n }\n return merged;\n },\n );\n this.messages_$.set(updatedMessages);\n return { sent: true };\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_SessionDS | Failed to send message via REST',\n error,\n );\n\n // Hiba esetén eltávolítjuk az optimista üzenetet a chatből\n const rolledBack: Ses_ClientMessage_Response[] = this.messages_$().filter(\n (msg: Ses_ClientMessage_Response): boolean =>\n msg.clientListKey !== optimisticStamped.clientListKey,\n );\n this.messages_$.set(rolledBack);\n\n const errorMessage: string =\n error instanceof Error ? error.message : 'Üzenet küldése sikertelen.';\n return { sent: false, error: errorMessage };\n }\n }\n\n /**\n * Üzenet küldése egy tetszőleges CCAP Session-be REST API-n keresztül (POST /session/:id/messages).\n * Nem frissít lokális chat állapotot — kívülről (pl. Quick Input) hívható.\n */\n async sendMessageToSession(params: { sessionId: string; content: string }): Promise<void> {\n await this.conversation_AS.sendMessage({\n sessionId: params.sessionId,\n content: params.content,\n });\n }\n\n /**\n * User interaction válasz küldése a szerverre Socket.io-n keresztül.\n * Törli a pending interaction signal-t.\n */\n sendInteractionResponse(response: UIn_UserInteractionResponse_Interface): void {\n this.socket_CS.emit('user-interaction:response', response as unknown as Record<string, unknown>);\n this.pendingInteraction_$.set(null);\n }\n\n /**\n * Üzenetek törlése (session váltáskor). A chunk-state-et is reset-eli.\n */\n clearMessages(): void {\n this.messages_$.set([]);\n this.chunkState_$.set({\n total: 0,\n hasMore: false,\n nextBeforeIndex: null,\n isLoadingOlder: false,\n archivedTotal: 0,\n });\n this.currentArchiveScope_$.set('active');\n }\n\n /**\n * Üzenetek beállítása (pl. API-ból betöltött kezdeti üzenetek a chat single source of truth-hoz).\n */\n setMessages(messages: Ses_ClientMessage_Response[]): void {\n const raw: Ses_ClientMessage_Response[] = messages ?? [];\n const stamped: Ses_ClientMessage_Response[] = raw.map(\n (m: Ses_ClientMessage_Response): Ses_ClientMessage_Response =>\n this.ensureClientListKey(m),\n );\n this.messages_$.set(stamped);\n }\n\n /**\n * Stabil lista-track kulcs: meglévő clientListKey, különben messageKey (API), különben UUID.\n */\n private ensureClientListKey(\n msg: Ses_ClientMessage_Response,\n ): Ses_ClientMessage_Response {\n const kept: string | undefined = msg.clientListKey?.trim();\n if (kept?.length) {\n return msg;\n }\n const fromTts: string | undefined = msg.messageKey?.trim();\n if (fromTts?.length) {\n return { ...msg, clientListKey: fromTts };\n }\n return { ...msg, clientListKey: globalThis.crypto.randomUUID() };\n }\n\n /**\n * Egy üzenet TTS cache jelölése: a messageKey-hez tartozó üzenetnél hasTtsAudio = true.\n * A message bubble így audio lejátszót jelenít meg a következő render-nél.\n */\n setMessageTtsCached(messageKey: string): void {\n const current: Ses_ClientMessage_Response[] = this.messages_$();\n const updated: Ses_ClientMessage_Response[] = current.map(\n (msg: Ses_ClientMessage_Response): Ses_ClientMessage_Response =>\n msg.messageKey === messageKey\n ? { ...msg, hasTtsAudio: true }\n : msg,\n );\n this.messages_$.set(updated);\n }\n\n /**\n * Üzenetek betöltése (mindig teljes lista – conversationFull); ha aktív session, setMessages.\n * Chat komponens ezt hívja; navigáció után cache nem kell, mert messages$ az aktív session-é.\n */\n async loadMessagesForView(sessionId: string): Promise<Ses_ClientMessage_Response[]> {\n this.messagesLoading_$.set(true);\n this.messagesLoadError_$.set(null);\n try {\n const response = await this.conversation_AS.getMessages({\n sessionId: sessionId,\n viewMode: 'conversationFull',\n });\n const messages: Ses_ClientMessage_Response[] = response.messages ?? [];\n if (sessionId === this.activeSessionId_$()) {\n this.setMessages(messages);\n }\n return messages;\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_SessionDS | Failed to load messages for view',\n error,\n );\n this.messagesLoadError_$.set(error);\n return [];\n } finally {\n this.messagesLoading_$.set(false);\n }\n }\n\n /**\n * REQ-SES-CONTENT-CHUNK-LOAD-AND-ARCHIVE-001 Slice 3 — initial-chunk fetch:\n * a session megnyitásakor csak az utolsó N üzenetet hozza (default 50)\n * a tail-en. A chunk-state-et a válasz alapján beállítja.\n *\n * `messages_$`-t replace-eli (nem prepend), hogy a régi session üzenetek\n * ne ragadjanak benne. Ha a session közben nem aktív, a state nem változik.\n */\n async loadInitialChunk(params: {\n sessionId: string;\n viewMode?: string;\n limit?: number;\n archiveScope?: Ses_ArchiveScope_Type;\n }): Promise<Ses_MessagesChunk_Response | null> {\n this.messagesLoading_$.set(true);\n this.messagesLoadError_$.set(null);\n try {\n const response: Ses_MessagesChunk_Response =\n await this.conversation_AS.getMessagesChunked({\n sessionId: params.sessionId,\n viewMode: params.viewMode ?? 'conversationFull',\n latest: true,\n limit: params.limit ?? 50,\n archiveScope: params.archiveScope,\n });\n if (params.sessionId === this.activeSessionId_$()) {\n this.setMessages(response.messages ?? []);\n this.chunkState_$.set({\n total: response.total,\n hasMore: response.hasMore,\n nextBeforeIndex: response.nextBeforeIndex,\n isLoadingOlder: false,\n archivedTotal: response.archivedTotal,\n });\n }\n return response;\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_SessionDS | Failed to load initial chunk',\n error,\n );\n this.messagesLoadError_$.set(error);\n return null;\n } finally {\n this.messagesLoading_$.set(false);\n }\n }\n\n /**\n * REQ-SES-CONTENT-CHUNK-LOAD-AND-ARCHIVE-001 Slice 3 — backward-prepend:\n * a `chunkState_$().nextBeforeIndex` cursor alapján a régebbi szeletet\n * prepend-eli a `messages_$` elejére. Ha `hasMore=false` vagy már fut egy\n * fetch (`isLoadingOlder`), no-op.\n */\n async loadOlderChunk(params: {\n sessionId: string;\n viewMode?: string;\n limit?: number;\n archiveScope?: Ses_ArchiveScope_Type;\n }): Promise<Ses_MessagesChunk_Response | null> {\n const state = this.chunkState_$();\n if (!state.hasMore || state.nextBeforeIndex == null || state.isLoadingOlder) {\n return null;\n }\n this.chunkState_$.set({ ...state, isLoadingOlder: true });\n try {\n const response: Ses_MessagesChunk_Response =\n await this.conversation_AS.getMessagesChunked({\n sessionId: params.sessionId,\n viewMode: params.viewMode ?? 'conversationFull',\n beforeIndex: state.nextBeforeIndex,\n limit: params.limit ?? 50,\n archiveScope: params.archiveScope,\n });\n if (params.sessionId === this.activeSessionId_$()) {\n const older: Ses_ClientMessage_Response[] = (response.messages ?? []).map(\n (m: Ses_ClientMessage_Response): Ses_ClientMessage_Response =>\n this.ensureClientListKey(m),\n );\n this.messages_$.set([...older, ...this.messages_$()]);\n this.chunkState_$.set({\n total: response.total,\n hasMore: response.hasMore,\n nextBeforeIndex: response.nextBeforeIndex,\n isLoadingOlder: false,\n archivedTotal: response.archivedTotal,\n });\n } else {\n this.chunkState_$.set({ ...state, isLoadingOlder: false });\n }\n return response;\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_SessionDS | Failed to load older chunk',\n error,\n );\n this.messagesLoadError_$.set(error);\n this.chunkState_$.set({ ...state, isLoadingOlder: false });\n return null;\n }\n }\n\n /**\n * REQ-SES-CONTENT-CHUNK-LOAD-AND-ARCHIVE-001 Slice 5 — archív nézetre váltás.\n * A chat „Archív szakasz megnyitása\" gombja hívja: scope-ot átállítja, törli a\n * jelenlegi (aktív) message-listát, majd `loadInitialChunk`-kal betölti az\n * archív tail-t. Az archivedTotal-t megőrzi a chunk-state-ben (független\n * érték a session-szintű archív szám).\n */\n async switchToArchiveView(sessionId: string): Promise<Ses_MessagesChunk_Response | null> {\n this.currentArchiveScope_$.set('archive');\n const prevArchivedTotal: number = this.chunkState_$().archivedTotal;\n this.messages_$.set([]);\n this.chunkState_$.set({\n total: 0,\n hasMore: false,\n nextBeforeIndex: null,\n isLoadingOlder: false,\n archivedTotal: prevArchivedTotal,\n });\n return this.loadInitialChunk({\n sessionId: sessionId,\n archiveScope: 'archive',\n });\n }\n\n /**\n * REQ-SES-CONTENT-CHUNK-LOAD-AND-ARCHIVE-001 Slice 5 — vissza az aktív nézetre.\n * A chat „Vissza az aktívhoz\" gombja hívja: scope-ot átállítja, törli az\n * archív listát, majd `loadInitialChunk` default scope-pal (active).\n */\n async switchToActiveView(sessionId: string): Promise<Ses_MessagesChunk_Response | null> {\n this.currentArchiveScope_$.set('active');\n this.messages_$.set([]);\n this.chunkState_$.set({\n total: 0,\n hasMore: false,\n nextBeforeIndex: null,\n isLoadingOlder: false,\n archivedTotal: 0,\n });\n return this.loadInitialChunk({\n sessionId: sessionId,\n archiveScope: 'active',\n });\n }\n\n /**\n * Session detail (session + lastRun) betöltése; cache-be mentés.\n */\n async loadSessionDetail(sessionId: string): Promise<{\n session: CCAP_SessionListItem_Response;\n lastRun: AC_LastRunSummary_Response | null;\n } | null> {\n if (!sessionId) {\n return null;\n }\n this.sessionDetailLoading_$.set(true);\n try {\n const response = await this.session_AS.getSession(sessionId);\n const entry: {\n session: CCAP_SessionListItem_Response;\n lastRun: AC_LastRunSummary_Response | null;\n } = {\n session: response.session,\n lastRun: response.lastRun ?? null,\n };\n this.sessionDetailBySessionId.set(sessionId, entry);\n this.sessionDetailMap_$.set(new Map(this.sessionDetailBySessionId));\n return entry;\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_SessionDS | Failed to load session detail',\n error,\n );\n return null;\n } finally {\n this.sessionDetailLoading_$.set(false);\n }\n }\n\n /**\n * Cachelt session detail lekérdezése (sync).\n */\n getCachedSessionDetail(sessionId: string): {\n session: CCAP_SessionListItem_Response;\n lastRun: AC_LastRunSummary_Response | null;\n } | null {\n return this.sessionDetailBySessionId.get(sessionId) ?? null;\n }\n\n /**\n * Session info betöltése; cache-be mentés.\n */\n async loadSessionInfo(sessionId: string): Promise<AC_SessionInfo_Response | null> {\n if (!sessionId) {\n return null;\n }\n this.sessionInfoLoading_$.set(true);\n this.sessionInfoLoadError_$.set(null);\n try {\n const response: AC_SessionInfo_Response =\n await this.session_AS.getSessionInfo(sessionId);\n this.sessionInfoBySessionId.set(sessionId, response);\n this.sessionInfoMap_$.set(new Map(this.sessionInfoBySessionId));\n return response;\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_SessionDS | Failed to load session info',\n error,\n );\n this.sessionInfoLoadError_$.set(error);\n return null;\n } finally {\n this.sessionInfoLoading_$.set(false);\n }\n }\n\n /**\n * Cachelt session info lekérdezése (sync).\n */\n getCachedSessionInfo(sessionId: string): AC_SessionInfo_Response | null {\n return this.sessionInfoBySessionId.get(sessionId) ?? null;\n }\n\n /**\n * LLM debug trace bejegyzések lekérése egy run-hoz — nincs globális signal írás (több run trace blokk párhuzamosan).\n */\n async fetchLlmDebugTraceEntriesForRun(params: {\n sessionId: string;\n runId: string;\n }): Promise<AC_LlmDebugTraceEntry_Response[]> {\n const sid: string = params.sessionId?.trim() ?? '';\n const rid: string = params.runId?.trim() ?? '';\n if (!sid || !rid) {\n return [];\n }\n try {\n const response: { entries: AC_LlmDebugTraceEntry_Response[] } =\n await this.session_AS.getLlmDebugTrace({\n sessionId: sid,\n runId: rid,\n });\n return response.entries ?? [];\n } catch {\n return [];\n }\n }\n\n /**\n * LLM debug trace lista betöltése session + run alapján (MongoDB trace tábla).\n */\n async loadLlmDebugTrace(params: {\n sessionId: string;\n runId: string;\n }): Promise<void> {\n const sid: string = params.sessionId?.trim() ?? '';\n const rid: string = params.runId?.trim() ?? '';\n\n if (!sid || !rid) {\n this.llmDebugTraceEntries_$.set([]);\n return;\n }\n\n this.llmDebugTraceLoading_$.set(true);\n this.llmDebugTraceLoadError_$.set(null);\n\n try {\n const response: { entries: AC_LlmDebugTraceEntry_Response[] } =\n await this.session_AS.getLlmDebugTrace({\n sessionId: sid,\n runId: rid,\n });\n this.llmDebugTraceEntries_$.set(response.entries);\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_SessionDS | Failed to load LLM debug trace',\n error,\n );\n this.llmDebugTraceLoadError_$.set(error);\n this.llmDebugTraceEntries_$.set([]);\n } finally {\n this.llmDebugTraceLoading_$.set(false);\n }\n }\n\n /**\n * Session frissítése (pl. archive / de-archive); API hívás után lista frissítése.\n * Archive állapotváltáskor mindkét lista reload (aktív + archivált szekció szinkron).\n */\n async updateSession(params: {\n sessionId: string;\n updates: Record<string, unknown>;\n }): Promise<CCAP_SessionListItem_Response | null> {\n try {\n const response = await this.session_AS.updateSession(params);\n const archived: unknown = params.updates.archived;\n if (archived === true || archived === false) {\n await this.loadSessions();\n await this.loadArchivedSessions();\n } else {\n await this.loadSessions();\n }\n return response.session;\n } catch (error: unknown) {\n DyFM_Error.logSimple(\n 'CCAP_SessionDS | Failed to update session',\n error,\n );\n return null;\n }\n }\n\n /**\n * Agent-events alapján `activeRunExecutionMode_$` latch frissítése.\n */\n private applyAgentEventRunExecutionModeLatch(eventData: Record<string, unknown>): void {\n const phaseRaw: unknown = eventData.phase;\n const phaseStr: string = typeof phaseRaw === 'string' ? phaseRaw.trim() : '';\n if (phaseStr === AC_RunFlowPhase_Type.analyzeResult) {\n const modeRaw: unknown = eventData.runExecutionMode;\n if (typeof modeRaw === 'string' && modeRaw.trim() !== '') {\n const normalized: string | undefined =\n Session_DataService.normalizeRunExecutionModeSocketValue(modeRaw);\n if (normalized !== undefined) {\n this.activeRunExecutionMode_$.set(normalized);\n }\n }\n return;\n }\n if (\n phaseStr === AC_RunFlowPhase_Type.runFlowComplete\n || phaseStr === AC_RunFlowPhase_Type.runInitialization\n ) {\n this.activeRunExecutionMode_$.set('');\n }\n }\n\n /**\n * Socket `runExecutionMode` érték whitelist; ismeretlen string → undefined.\n */\n private static normalizeRunExecutionModeSocketValue(raw: string): string | undefined {\n const trimmed: string = raw.trim();\n const known: AC_RunExecutionMode_Type[] = [\n AC_RunExecutionMode_Type.instant,\n AC_RunExecutionMode_Type.agenticAny,\n AC_RunExecutionMode_Type.ask,\n AC_RunExecutionMode_Type.plan,\n ];\n for (const v of known) {\n if (trimmed === v) {\n return v;\n }\n }\n return undefined;\n }\n\n ngOnDestroy(): void {\n this.monitoringEvent_S.complete();\n if (this.eventSubscription) {\n this.eventSubscription.unsubscribe();\n this.eventSubscription = null;\n }\n if (this.connectedEffectRef) {\n this.connectedEffectRef.destroy();\n this.connectedEffectRef = null;\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 {\n Ses_ArchiveScope_Type,\n Ses_ClientImageAttachment_Response,\n Ses_ClientMessage_Response,\n Ses_MessagesChunk_Response,\n} from './conversation.api-service.interface';\n\n/**\n * Conversation API service.\n * HTTP hívások a server conversation endpoint-jaira.\n */\n@Injectable({ providedIn: 'root' })\nexport class Ses_Conversation_ApiService {\n\n /** API base URL. */\n private baseUrl: string = `${environment.api.baseUrl}/session`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n /**\n * Üzenetek lekérdezése viewMode alapján.\n */\n getMessages(params: {\n sessionId: string;\n viewMode: string;\n }): Promise<{\n messages: Ses_ClientMessage_Response[];\n }> {\n return firstValueFrom(\n this.http.get<{\n messages: Ses_ClientMessage_Response[];\n }>(\n `${this.baseUrl}/${params.sessionId}/messages`,\n { params: { viewMode: params.viewMode } },\n ),\n );\n }\n\n /**\n * REQ-SES-CONTENT-CHUNK-LOAD-AND-ARCHIVE-001 Slice 3 — chunk-fetch a CCAP\n * Session-en. `latest=true` boot-strap-re az utolsó N üzenetet kéri,\n * `beforeIndex` paraméterrel a régebbi szeletet (backward prepend).\n */\n getMessagesChunked(params: {\n sessionId: string;\n viewMode: string;\n beforeIndex?: number;\n limit?: number;\n latest?: boolean;\n archiveScope?: Ses_ArchiveScope_Type;\n }): Promise<Ses_MessagesChunk_Response> {\n const httpParams: Record<string, string> = {\n viewMode: params.viewMode,\n };\n if (params.beforeIndex != null) {\n httpParams['beforeIndex'] = String(params.beforeIndex);\n }\n if (params.limit != null) {\n httpParams['limit'] = String(params.limit);\n }\n if (params.latest) {\n httpParams['latest'] = '1';\n }\n if (params.archiveScope) {\n httpParams['archiveScope'] = params.archiveScope;\n }\n return firstValueFrom(\n this.http.get<Ses_MessagesChunk_Response>(\n `${this.baseUrl}/${params.sessionId}/messages/chunk`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Új üzenet küldése.\n */\n sendMessage(params: {\n sessionId: string;\n content: string;\n imageAttachments?: Ses_ClientImageAttachment_Response[];\n }): Promise<{\n message: Ses_ClientMessage_Response;\n }> {\n return firstValueFrom(\n this.http.post<{\n message: Ses_ClientMessage_Response;\n }>(\n `${this.baseUrl}/${params.sessionId}/messages`,\n {\n content: params.content,\n imageAttachments: params.imageAttachments,\n },\n ),\n );\n }\n}\n", "import { inject, Injectable } from '@angular/core';\nimport { HttpClient, HttpParams } from '@angular/common/http';\n\nimport { firstValueFrom } from 'rxjs';\n\nimport { environment } from '../../../../../environments/environment';\nimport { AC_LastRunSummary_Response } from '../../../../_models/interfaces/session/ccap-last-run-summary.interface';\nimport {\n AC_LlmDebugTraceEntry_Response,\n AC_SessionInfo_Response,\n} from '../../../../_models/server-index';\nimport {\n CCAP_SessionListItem_Response,\n} from '../../../../_models/interfaces/session/ccap-session-list-item.interface';\nimport { ExS_InstanceContext_DataService } from '../../../external-sessions/_services/exs-instance-context.data-service';\n\n/**\n * Session API service.\n * HTTP hívások a server session endpoint-jaira.\n * Minden hívás `?ccapId=<active>` paramot küld (REQ-PEI-016) —\n * a ccapId forrása az instance-szelektor (`ExS_InstanceContext_DataService.activeCcapId_$`).\n */\n@Injectable({ providedIn: 'root' })\nexport class Session_ApiService {\n\n /** API base URL. */\n private baseUrl: string = `${environment.api.baseUrl}/session`;\n\n private readonly http: HttpClient = inject(HttpClient);\n\n private readonly peiContext_DS: ExS_InstanceContext_DataService =\n inject(ExS_InstanceContext_DataService);\n\n /**\n * Aktuális ccapId — az instance-szelektor értékéből (REQ-PEI-016).\n */\n private currentCcapId(): string {\n return this.peiContext_DS.activeCcapId_$();\n }\n\n /**\n * ccapId hozzáfűzése HttpParams-hoz.\n */\n private withCcapId(params: HttpParams): HttpParams {\n const ccapId: string = this.currentCcapId();\n if (!ccapId) {\n return params;\n }\n return params.set('ccapId', ccapId);\n }\n\n /**\n * Session lista lekérdezése (csak nem archivált session-ök).\n */\n listSessions(): Promise<{\n sessions: CCAP_SessionListItem_Response[];\n }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.get<{\n sessions: CCAP_SessionListItem_Response[];\n }>(this.baseUrl, { params: httpParams }),\n );\n }\n\n /**\n * Archivált session-ek lekérdezése.\n */\n listArchivedSessions(): Promise<{\n sessions: CCAP_SessionListItem_Response[];\n }> {\n let httpParams: HttpParams = this.withCcapId(new HttpParams());\n httpParams = httpParams.set('archived', 'true');\n return firstValueFrom(\n this.http.get<{\n sessions: CCAP_SessionListItem_Response[];\n }>(this.baseUrl, { params: httpParams }),\n );\n }\n\n /**\n * Új session létrehozása (web UI \"New session\" gomb).\n * Opcionális `name`: kezdő lista-név (pl. Quick Input Send to session → új CCAP Session).\n */\n createSession(params?: { name?: string }): Promise<{\n session: CCAP_SessionListItem_Response;\n }> {\n const body: { name?: string } = {};\n const trimmedName: string | undefined =\n params?.name !== undefined ? params.name.trim() : undefined;\n if (trimmedName !== undefined && trimmedName.length > 0) {\n body.name = trimmedName;\n }\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{\n session: CCAP_SessionListItem_Response;\n }>(this.baseUrl, body, { params: httpParams }),\n );\n }\n\n /**\n * Session detail lekérdezése (session + opcionális lastRun intent/goal/summary).\n */\n getSession(sessionId: string): Promise<{\n session: CCAP_SessionListItem_Response;\n lastRun?: AC_LastRunSummary_Response;\n }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.get<{\n session: CCAP_SessionListItem_Response;\n lastRun?: AC_LastRunSummary_Response;\n }>(`${this.baseUrl}/${sessionId}`, { params: httpParams }),\n );\n }\n\n /**\n * Session frissítése (név, státusz).\n */\n updateSession(params: {\n sessionId: string;\n updates: Record<string, unknown>;\n }): Promise<{\n session: CCAP_SessionListItem_Response;\n }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.patch<{\n session: CCAP_SessionListItem_Response;\n }>(\n `${this.baseUrl}/${params.sessionId}`,\n params.updates,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session info lekérdezése (used inputs, used elements, full active context).\n */\n getSessionInfo(sessionId: string): Promise<AC_SessionInfo_Response> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.get<AC_SessionInfo_Response>(\n `${this.baseUrl}/${sessionId}/session-info`,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Session másolása — teljes history vagy fork a megadott `forkUntilMessageKey`-ig (REQ-SES-FORK-001).\n * `forkUntilMessageKey` hiányában a szerver változatlan copy-t csinál (az összes üzenettel).\n */\n copySession(params: {\n sessionId: string;\n name?: string;\n forkUntilMessageKey?: string;\n }): Promise<{ session: CCAP_SessionListItem_Response }> {\n const body: Record<string, unknown> = {};\n if (params.name) {\n body.name = params.name;\n }\n if (params.forkUntilMessageKey) {\n body.forkUntilMessageKey = params.forkUntilMessageKey;\n }\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ session: CCAP_SessionListItem_Response }>(\n `${this.baseUrl}/${params.sessionId}/copy`,\n body,\n { params: httpParams },\n ),\n );\n }\n\n /**\n * Futó execution leállítása (stop gomb).\n */\n stopExecution(sessionId: string): Promise<{ success: boolean }> {\n const httpParams: HttpParams = this.withCcapId(new HttpParams());\n return firstValueFrom(\n this.http.post<{ success: boolean }>(\n `${this.baseUrl}/${sessionId}/stop-execution`,\n {},\n { params: httpParams },\n ),\n );\n }\n\n /**\n * LLM debug trace bejegyzések egy session + run kombinációhoz (Info panel).\n */\n getLlmDebugTrace(params: {\n sessionId: string;\n runId: string;\n }): Promise<{ entries: AC_LlmDebugTraceEntry_Response[] }> {\n let httpParams: HttpParams = this.withCcapId(new HttpParams());\n httpParams = httpParams.set('runId', params.runId);\n return firstValueFrom(\n this.http.get<{ entries: AC_LlmDebugTraceEntry_Response[] }>(\n `${this.baseUrl}/${params.sessionId}/llm-debug-trace`,\n { params: httpParams },\n ),\n );\n }\n}\n"],
5
- "mappings": "+UAUM,IAAOA,EAAP,KAAqB,CAOzB,OAAOC,2BACLC,EACAC,EAAc,CAEd,OAAOA,CACT,GClBI,IAAOC,EAAP,KAAyB,CAI7B,OAAOC,gBAAgBC,EAAc,CACnC,GAA2BA,GAAU,KACnC,MAAO,GAET,GAAI,OAAOA,GAAU,SACnB,OAAOA,EAET,GAAI,OAAOA,GAAU,UAAYA,IAAU,KAAM,CAC/C,IAAMC,EAA6BD,EACnC,GAAI,OAAOC,EAAEC,SAAY,UAAYD,EAAEC,QAAQC,KAAI,EAAGC,OAAS,EAC7D,OAAOH,EAAEC,QAAQC,KAAI,EAEvB,GAAI,OAAOF,EAAEI,OAAU,UAAYJ,EAAEI,MAAMF,KAAI,EAAGC,OAAS,EACzD,OAAOH,EAAEI,MAAMF,KAAI,EAErB,GAAI,OAAOF,EAAEK,QAAW,UAAYL,EAAEK,OAAOH,KAAI,EAAGC,OAAS,EAC3D,OAAOH,EAAEK,OAAOH,KAAI,CAExB,CACA,IAAMI,EAAYC,OAAOR,CAAK,EAC9B,OAAIO,IAAM,kBACD,SAEFA,CACT,GC5BF,IAAAE,EAAqC,OCcrC,IAAaC,GAA2B,IAAA,CAAlC,MAAOA,CAA2B,CAG9BC,QAAkB,GAAGC,EAAYC,IAAIF,OAAO,WAEnCG,KAAmBC,EAAOC,CAAU,EAKrDC,YAAYC,EAGX,CAGC,OAAOC,EACL,KAAKL,KAAKM,IAGR,GAAG,KAAKT,OAAO,IAAIO,EAAOG,SAAS,YACnC,CAAEH,OAAQ,CAAEI,SAAUJ,EAAOI,QAAQ,CAAE,CAAE,CAC1C,CAEL,CAOAC,mBAAmBL,EAOlB,CACC,IAAMM,EAAqC,CACzCF,SAAUJ,EAAOI,UAEnB,OAAIJ,EAAOO,aAAe,OACxBD,EAAW,YAAiBE,OAAOR,EAAOO,WAAW,GAEnDP,EAAOS,OAAS,OAClBH,EAAW,MAAWE,OAAOR,EAAOS,KAAK,GAEvCT,EAAOU,SACTJ,EAAW,OAAY,KAErBN,EAAOW,eACTL,EAAW,aAAkBN,EAAOW,cAE/BV,EACL,KAAKL,KAAKM,IACR,GAAG,KAAKT,OAAO,IAAIO,EAAOG,SAAS,kBACnC,CAAEH,OAAQM,CAAU,CAAE,CACvB,CAEL,CAKAM,YAAYZ,EAIX,CAGC,OAAOC,EACL,KAAKL,KAAKiB,KAGR,GAAG,KAAKpB,OAAO,IAAIO,EAAOG,SAAS,YACnC,CACEW,QAASd,EAAOc,QAChBC,iBAAkBf,EAAOe,iBAC1B,CACF,CAEL,4CAnFWvB,EAA2B,6BAA3BA,EAA2BwB,QAA3BxB,EAA2ByB,UAAAC,WADd,MAAM,CAAA,SACnB1B,CAA2B,GAAA,ECKxC,IAAa2B,GAAkB,IAAA,CAAzB,MAAOA,CAAkB,CAGrBC,QAAkB,GAAGC,EAAYC,IAAIF,OAAO,WAEnCG,KAAmBC,EAAOC,CAAU,EAEpCC,cACfF,EAAOG,CAA+B,EAKhCC,eAAa,CACnB,OAAO,KAAKF,cAAcG,eAAc,CAC1C,CAKQC,WAAWC,EAAkB,CACnC,IAAMC,EAAiB,KAAKJ,cAAa,EACzC,OAAKI,EAGED,EAAOE,IAAI,SAAUD,CAAM,EAFzBD,CAGX,CAKAG,cAAY,CAGV,IAAMC,EAAyB,KAAKL,WAAW,IAAIM,CAAY,EAC/D,OAAOC,EACL,KAAKd,KAAKe,IAEP,KAAKlB,QAAS,CAAEW,OAAQI,CAAU,CAAE,CAAC,CAE5C,CAKAI,sBAAoB,CAGlB,IAAIJ,EAAyB,KAAKL,WAAW,IAAIM,CAAY,EAC7DD,OAAAA,EAAaA,EAAWF,IAAI,WAAY,MAAM,EACvCI,EACL,KAAKd,KAAKe,IAEP,KAAKlB,QAAS,CAAEW,OAAQI,CAAU,CAAE,CAAC,CAE5C,CAMAK,cAAcT,EAA0B,CAGtC,IAAMU,EAA0B,CAAA,EAC1BC,EACJX,GAAQY,OAASC,OAAYb,EAAOY,KAAKE,KAAI,EAAKD,OAChDF,IAAgBE,QAAaF,EAAYI,OAAS,IACpDL,EAAKE,KAAOD,GAEd,IAAMP,EAAyB,KAAKL,WAAW,IAAIM,CAAY,EAC/D,OAAOC,EACL,KAAKd,KAAKwB,KAEP,KAAK3B,QAASqB,EAAM,CAAEV,OAAQI,CAAU,CAAE,CAAC,CAElD,CAKAa,WAAWC,EAAiB,CAI1B,IAAMd,EAAyB,KAAKL,WAAW,IAAIM,CAAY,EAC/D,OAAOC,EACL,KAAKd,KAAKe,IAGP,GAAG,KAAKlB,OAAO,IAAI6B,CAAS,GAAI,CAAElB,OAAQI,CAAU,CAAE,CAAC,CAE9D,CAKAe,cAAcnB,EAGb,CAGC,IAAMI,EAAyB,KAAKL,WAAW,IAAIM,CAAY,EAC/D,OAAOC,EACL,KAAKd,KAAK4B,MAGR,GAAG,KAAK/B,OAAO,IAAIW,EAAOkB,SAAS,GACnClB,EAAOqB,QACP,CAAErB,OAAQI,CAAU,CAAE,CACvB,CAEL,CAKAkB,eAAeJ,EAAiB,CAC9B,IAAMd,EAAyB,KAAKL,WAAW,IAAIM,CAAY,EAC/D,OAAOC,EACL,KAAKd,KAAKe,IACR,GAAG,KAAKlB,OAAO,IAAI6B,CAAS,gBAC5B,CAAElB,OAAQI,CAAU,CAAE,CACvB,CAEL,CAMAmB,YAAYvB,EAIX,CACC,IAAMU,EAAgC,CAAA,EAClCV,EAAOY,OACTF,EAAKE,KAAOZ,EAAOY,MAEjBZ,EAAOwB,sBACTd,EAAKc,oBAAsBxB,EAAOwB,qBAEpC,IAAMpB,EAAyB,KAAKL,WAAW,IAAIM,CAAY,EAC/D,OAAOC,EACL,KAAKd,KAAKwB,KACR,GAAG,KAAK3B,OAAO,IAAIW,EAAOkB,SAAS,QACnCR,EACA,CAAEV,OAAQI,CAAU,CAAE,CACvB,CAEL,CAKAqB,cAAcP,EAAiB,CAC7B,IAAMd,EAAyB,KAAKL,WAAW,IAAIM,CAAY,EAC/D,OAAOC,EACL,KAAKd,KAAKwB,KACR,GAAG,KAAK3B,OAAO,IAAI6B,CAAS,kBAC5B,CAAA,EACA,CAAElB,OAAQI,CAAU,CAAE,CACvB,CAEL,CAKAsB,iBAAiB1B,EAGhB,CACC,IAAII,EAAyB,KAAKL,WAAW,IAAIM,CAAY,EAC7DD,OAAAA,EAAaA,EAAWF,IAAI,QAASF,EAAO2B,KAAK,EAC1CrB,EACL,KAAKd,KAAKe,IACR,GAAG,KAAKlB,OAAO,IAAIW,EAAOkB,SAAS,mBACnC,CAAElB,OAAQI,CAAU,CAAE,CACvB,CAEL,4CAvLWhB,EAAkB,6BAAlBA,EAAkBwC,QAAlBxC,EAAkByC,UAAAC,WADL,MAAM,CAAA,SACnB1C,CAAkB,GAAA,EFW/B,IAAM2C,EAA8B,SAC9BC,EAAmC,cACnCC,EAAoC,eACpCC,EAAuC,kBACvCC,EAAwC,mBACxCC,EAAgD,2BAChDC,EAAiD,4BAGjDC,EAAsB,oBAEtBC,EAAyB,oBAEzBC,EAA4B,mBAOrBC,IAAmB,IAAA,CAA1B,MAAOA,CAAmB,CAGtBC,yBAGJ,IAAIC,IAGAC,uBAA+D,IAAID,IAGlEE,kBAAoBC,EAAe,EAAE,EASrCC,kCAAoCD,EAAe,CAAC,EAGpDE,WAAaF,EAAwC,CAAA,CAAE,EAGvDG,oBAAsBH,EAAuB,IAAI,EAGjDI,kBAAoBJ,EAAgB,EAAK,EAGzCK,mBAAqBL,EAAwC,CAAA,CAAE,EAG/DM,0BAA4BN,EAAgB,EAAK,EAGjDO,WAAaP,EAAqC,CAAA,CAAE,EAGpDQ,kBAAoBR,EAAgB,EAAK,EAGzCS,oBAAsBT,EAAuB,IAAI,EASjDU,sBAAwBV,EAA8B,QAAQ,EAU9DW,aAAeX,EAMrB,CACDY,MAAO,EACPC,QAAS,GACTC,gBAAiB,KACjBC,eAAgB,GAChBC,cAAe,EAChB,EAGQC,cAAgBjB,EAAgC,CAAA,CAAE,EAMlDkB,yBAA2BlB,EAAe,EAAE,EAG5CmB,iBAAmBnB,EAGlB,IAAI,EAGLoB,kBAAoBpB,EAGnB,IAAI,EAOLqB,kBAGJ,IAAIC,EAGAC,qBAAuBvB,EAAoD,IAAI,EAO/EwB,sBAAwBxB,EAKvB,IAAI,EAGLyB,mBAAqBzB,EAE5B,IAAIH,GAAK,EAGF6B,uBAAyB1B,EAAgB,EAAK,EAG9C2B,iBAAmB3B,EAA6C,IAAIH,GAAK,EAGzE+B,qBAAuB5B,EAAgB,EAAK,EAG5C6B,uBAAyB7B,EAAuB,IAAI,EAGpD8B,uBAAyB9B,EAAyC,CAAA,CAAE,EAGpE+B,uBAAyB/B,EAAgB,EAAK,EAG9CgC,yBAA2BhC,EAAuB,IAAI,EAGvDiC,kBAAyC,KAGzCC,mBAAuC,KAE9BC,WAAiCC,EAAOC,CAAkB,EAC1DC,gBACfF,EAAOG,CAA2B,EACnBC,gBACfJ,EAAOK,CAAqB,EACbC,UACfN,EAAOO,CAA0B,EAGnC,IAAIC,aAAW,CACb,OAAO,KAAKF,UAAUE,WACxB,CAGA,IAAIC,gBAAc,CAChB,OAAO,KAAKH,UAAUI,QACxB,CAGA,IAAIC,mBAAiB,CACnB,OAAO,KAAKL,UAAUM,WACxB,CAGA,IAAIC,uBAAqB,CACvB,OAAO,KAAKP,UAAUO,qBACxB,CAGAC,oBAAkB,CAChB,OAAO,KAAKR,UAAUQ,mBAAkB,CAC1C,CAEAC,aAAA,CACE,KAAKlB,kBAAoB,KAAKS,UAAUU,OAAOC,UAC5CC,GAAuE,CACtE,KAAKC,kBAAkBD,CAAQ,CACjC,CAAC,EAEH,KAAKpB,mBAAqBsB,EAAO,IAAW,CACtC,KAAKd,UAAUE,YAAW,GAAM,KAAKa,mBAAkB,GACzD,KAAKf,UAAUgB,KAAK,iBAAkB,CACpCC,UAAW,KAAKF,mBAAkB,EACnC,CAEL,CAAC,CACH,CAKQF,kBAAkBD,EAA6D,CACrF,IAAMM,EAAmCN,EAASM,SAAW,CAAA,EACvDC,EAAmB,KAAKJ,mBAAkB,EAC1CK,EACJ,OAAOF,EAAQE,WAAc,SAAWF,EAAQE,UAAYC,OACxDC,EACJ,OAAOJ,EAAQD,WAAc,SAAWC,EAAQD,UAAYI,OACxDE,EACJ,CAACH,GAAa,CAACE,GACZF,IAAcD,GACdG,IAAyBH,EAE9B,GAAIP,EAASY,QAAUjF,GAAuBgF,EAAa,CACzD,IAAME,EAAkB,OAAOP,EAAQO,SAAY,SAAWP,EAAQO,QAAU,GAC1EC,EACJ,OAAOR,EAAQQ,WAAc,SAAWR,EAAQQ,UAAY,IAAIC,KAAI,EAAGC,YAAW,EAC9EC,EACJ,OAAOX,EAAQW,OAAU,SAAWX,EAAQW,MAAQR,OAChDS,EAAmC,CACvCC,KAAM,YACNN,QAASA,EACTC,UAAW,IAAIC,KAAKD,CAAS,GAEzBM,EAAsCH,EACxCI,EAAAC,EAAA,GAAKJ,GAAL,CAAWD,MAAOA,CAAK,GACvBC,EACEK,EAAsC,KAAKC,oBAAoBJ,CAAO,EAC5E,KAAKnE,WAAWwE,IAAI,CAAC,GAAG,KAAKxE,WAAU,EAAIsE,CAAO,CAAC,EACnD,MACF,CAEA,GAAIvB,EAASY,QAAUhF,GAA4B+E,EAAa,CAC9D,IAAME,EAAkB,OAAOP,EAAQO,SAAY,SAAWP,EAAQO,QAAU,GAChFa,WAASC,KACP,0CAA0Cd,EAAQe,UAAU,EAAG,GAAG,CAAC,QAAG,EAExE,IAAML,EAAsC,KAAKC,oBAAoB,CACnEL,KAAM,SACNN,QAASA,EACTC,UAAW,IAAIC,KAChB,EACD,KAAK9D,WAAWwE,IAAI,CAAC,GAAG,KAAKxE,WAAU,EAAIsE,CAAO,CAAC,EACnD,MACF,CAEA,GAAIvB,EAASY,QAAU/E,EAA2B,CAChD,IAAMgG,EACH,OAAOvB,EAAQuB,WAAc,UAAYvB,EAAQuB,YAAc,KAC3DvB,EAAQuB,UACT,CAAA,EACN,KAAKlE,cAAc8D,IAAII,CAAS,EAChC,KAAKC,qCAAqCD,CAAS,EAGnD,IAAME,EAAiB,OAAOF,EAAUE,QAAW,SAAWF,EAAUE,OAAS,GAC3EC,EAAqB,OAAOH,EAAUI,OAAU,SAAWJ,EAAUI,MAAQ,GAC/EF,IAAW7F,IACT8F,IAAe7F,GAAkB6F,IAAe5F,GACpD,KAAK8B,sBAAsBuD,IAAI,CAC7BQ,MAAOD,EACPE,kBAAmB,OAAOL,EAAUK,mBAAsB,SACtDL,EAAUK,kBAAoB,GAClCC,iBAAkB,OAAON,EAAUM,kBAAqB,SACpDN,EAAUM,iBAAmB,GACjCC,qBAAsB,OAAOP,EAAUO,sBAAyB,SAC5DP,EAAUO,qBAAuB,OACtC,EACQ,KAAKlE,sBAAqB,GAEnC,KAAKA,sBAAsBuD,IAAI,IAAI,EAGrC,IAAMY,EAA4BR,EAAUS,UACtCC,EACJ/B,GAAcqB,EAAUrB,UACpBgC,EAA4B,CAACD,GAAQA,IAAShC,EAC9CkC,EAAuBC,EAAmBC,gBAAgBN,CAAgB,EAAEO,KAAI,EACtF,GAAIH,EAAaI,OAAS,GAAKL,EAAkB,CAC/Cd,WAASC,KACP,kEAAkEc,EAAab,UAAU,EAAG,EAAE,CAAC,QAAG,EAEpG,IAAML,EAAsC,KAAKC,oBAAoB,CACnEL,KAAM,SACNN,QAAS4B,EACT3B,UAAW,IAAIC,KAChB,EACD,KAAK9D,WAAWwE,IAAI,CAAC,GAAG,KAAKxE,WAAU,EAAIsE,CAAO,CAAC,CACrD,CACA,MACF,CAEA,GAAIvB,EAASY,QAAU9E,EAA8B,CACnD,IAAMgH,EACJ,OAAOxC,EAAQD,WAAc,SAAWC,EAAQD,UAAY,GACxD0C,EACH,OAAOzC,EAAQyC,cAAiB,UAAYzC,EAAQyC,eAAiB,KACjEzC,EAAQyC,aACT,CAAA,EACN,KAAKlF,iBAAiB4D,IAAI,CACxBpB,UAAWyC,EACXC,aAAcA,EACf,EACD,MACF,CAEA,GAAI/C,EAASY,QAAU7E,EAA+B,CACpD,IAAM+G,EACJ,OAAOxC,EAAQD,WAAc,SAAWC,EAAQD,UAAY,GACxD2C,EACH,OAAO1C,EAAQM,OAAU,UAAYN,EAAQM,QAAU,KACnDN,EAAQM,MACT,CAAA,EACAqC,EAA2E,CAC/E5C,UAAWyC,EACXlC,MAAOoC,GAET,KAAKlF,kBAAkB2D,IAAIwB,CAAiB,EAC5C,KAAKlF,kBAAkBmF,KAAKD,CAAiB,EAC7C,MACF,CAEA,GAAIjD,EAASY,QAAU5E,GAAyC2E,EAAa,CAC3E,KAAK1C,qBAAqBwD,IAAInB,CAA0D,EACxF,MACF,CAGA,GAAIN,EAASY,QAAU3E,GAA0C0E,EAAa,CAC5E,IAAMwC,EACJ,OAAQ7C,EAAoC8C,eAAkB,SACzD9C,EAAoC8C,cACrC3C,OACN,GAAI,CAAC0C,EACH,OAE2D,KAAKlF,qBAAoB,GACzEmF,gBAAkBD,GAC7B,KAAKlF,qBAAqBwD,IAAI,IAAI,EAEpC,MACF,CACF,CAOM4B,cAAY,QAAAC,EAAA,sBAChB,KAAKxG,kBAAkB2E,IAAI,EAAI,EAC/B,GAAI,CACF,KAAK5E,oBAAoB4E,IAAI,IAAI,EAEjC,IAAM8B,EAAW,MAAM,KAAK1E,WAAW2E,aAAY,EAEnD,YAAK5G,WAAW6E,IAAI8B,EAASE,QAAQ,EAC9BF,EAASE,QAClB,OAASC,EAAgB,CACvBC,oBAAWC,UAAU,2CAA4CF,CAAK,EAEtE,KAAK7G,oBAAoB4E,IAAIiC,CAAK,EAC3B,CAAA,CACT,QAAC,CACC,KAAK5G,kBAAkB2E,IAAI,EAAK,CAClC,CACF,GAMMoC,cAAcC,EAA0B,QAAAR,EAAA,sBAC5C,IAAMC,EAAW,MAAM,KAAK1E,WAAWgF,cAAcC,CAAM,EAE3D,aAAM,KAAKT,aAAY,EAEhBE,EAASQ,OAClB,GAMMC,YAAYF,EAGjB,QAAAR,EAAA,sBACC,IAAMC,EAAW,MAAM,KAAK1E,WAAWmF,YAAYF,CAAM,EAEzD,aAAM,KAAKT,aAAY,EAEhBE,EAASQ,OAClB,GAOME,YAAYH,EAIjB,QAAAR,EAAA,sBACC,IAAMC,EAAW,MAAM,KAAK1E,WAAWmF,YAAY,CACjD3D,UAAWyD,EAAOzD,UAClB6D,KAAMJ,EAAOI,KACbC,oBAAqBL,EAAOK,oBAC7B,EAED,aAAM,KAAKd,aAAY,EAEhBE,EAASQ,OAClB,GAMMK,sBAAoB,QAAAd,EAAA,sBACxB,KAAKtG,0BAA0ByE,IAAI,EAAI,EACvC,GAAI,CACF,IAAM8B,EAAW,MAAM,KAAK1E,WAAWwF,qBAAoB,EAE3D,YAAKtH,mBAAmB0E,IAAI8B,EAASE,QAAQ,EACtCF,EAASE,QAClB,OAASC,EAAgB,CACvBC,oBAAWC,UACT,oDACAF,CAAK,EAGP,KAAK3G,mBAAmB0E,IAAI,CAAA,CAAE,EACvB,CAAA,CACT,QAAC,CACC,KAAKzE,0BAA0ByE,IAAI,EAAK,CAC1C,CACF,GAOA6C,iBAAiBjE,EAAiB,CACL,KAAK5D,kBAAiB,IAC9B4D,IACjB,KAAK5D,kBAAkBgF,IAAIpB,CAAS,EACpC,KAAKkE,cAAa,EAClB,KAAKtG,qBAAqBwD,IAAI,IAAI,EAClC,KAAK7D,yBAAyB6D,IAAI,EAAE,GAEtC,KAAKrC,UAAUgB,KAAK,iBAAkB,CAAEC,UAAWA,CAAS,CAAE,CAChE,CAKAF,oBAAkB,CAChB,OAAO,KAAK1D,kBAAiB,CAC/B,CAOM+H,iBAAe,QAAAlB,EAAA,sBACnB,GAAI,CACF,IAAMmB,EAAS,MAAM,KAAKvF,gBAAgBwF,UAAS,EAC7CC,EACJ,OAAOC,OAAW,IAAcA,OAAOC,SAASF,OAAS,GACrDG,EAAuBC,EAAeC,2BAC1C,CAAEC,SAAUR,EAAOQ,SAAUC,WAAYT,EAAOS,UAAU,EAC1DP,CAAM,EAEFQ,EAA2BC,EAAYC,WAAaV,EAC1D,GAAIG,IAAiBK,GAAoB,OAAOP,OAAW,IAAa,CACtEQ,EAAYC,UAAYP,EACxBpD,WAASC,KACP,6DACAmD,CAAY,EAEdF,OAAOC,SAASS,OAAM,EACtB,MACF,CACF,MAAQ,CACN,CAEF,KAAKlG,UAAUmG,UAAS,CAC1B,GAMMC,cAAcnF,EAAiB,QAAAiD,EAAA,sBACnC,GAAI,CAGF,OADE,MAAM,KAAKzE,WAAW2G,cAAcnF,CAAS,GACjCoF,OAChB,OAASC,EAAc,CACrB/B,oBAAWC,UAAU,yCAA0C8B,CAAG,EAC3D,EACT,CACF,GAQMC,qBACJ9E,EACA+E,EAAuD,QAAAtC,EAAA,sBAMvD,IAAMuC,EAAkBhF,EAAQ+B,KAAI,EACpC,GAAIiD,IAAY,OAEd,MAAO,CAAEC,WADyC,MAAM,KAAKjC,cAAa,EACzCkC,KAAM,EAAI,EAG7C,IAAM1F,EAAoB,KAAK5D,kBAAiB,EAChD,GAAI,CAAC4D,EACH,MAAO,CAAE0F,KAAM,EAAK,EAGtB,IAAMC,GAAsBJ,GAAkB/C,QAAU,GAAK,EAC7D,GAAI,CAACgD,EAAQhD,QAAU,CAACmD,EACtB,MAAO,CAAED,KAAM,EAAK,EAKtB,IAAME,EAA4C,CAChD9E,KAAM,OACNN,QAASA,EACTC,UAAW,IAAIC,MAEXmF,EACJ,KAAK1E,oBAAoByE,CAAa,EACxC,KAAKhJ,WAAWwE,IAAI,CAAC,GAAG,KAAKxE,WAAU,EAAIiJ,CAAiB,CAAC,EAE7D,GAAI,CAQF,IAAMC,GAPW,MAAM,KAAKnH,gBAAgBoH,YAAY,CACtD/F,UAAWA,EACXQ,QAASA,EACT+E,iBAAkBA,EACnB,GAGsDS,QACjDC,EAAgD,KAAKrJ,WAAU,EAAGsJ,IACrEC,GAA+D,CAC9D,GAAIA,EAAIC,gBAAkBP,EAAkBO,cAC1C,OAAOD,EAET,IAAME,EAAqCpF,EAAA,GAAKkF,GAChD,OAAIL,EAAUQ,aACZD,EAAOC,WAAaR,EAAUQ,YAE5BR,EAAUS,cAAgBnG,SAC5BiG,EAAOE,YAAcT,EAAUS,aAE1BF,CACT,CAAC,EAEH,YAAKzJ,WAAWwE,IAAI6E,CAAe,EAC5B,CAAEP,KAAM,EAAI,CACrB,OAASrC,EAAgB,CACvBC,aAAWC,UACT,mDACAF,CAAK,EAIP,IAAMmD,EAA2C,KAAK5J,WAAU,EAAG6J,OAChEN,GACCA,EAAIC,gBAAkBP,EAAkBO,aAAa,EAEzD,YAAKxJ,WAAWwE,IAAIoF,CAAU,EAIvB,CAAEd,KAAM,GAAOrC,MADpBA,aAAiBqD,MAAQrD,EAAM2C,QAAU,qCACF,CAC3C,CACF,GAMMW,qBAAqBlD,EAA8C,QAAAR,EAAA,sBACvE,MAAM,KAAKtE,gBAAgBoH,YAAY,CACrC/F,UAAWyD,EAAOzD,UAClBQ,QAASiD,EAAOjD,QACjB,CACH,GAMAoG,wBAAwB1D,EAA+C,CACrE,KAAKnE,UAAUgB,KAAK,4BAA6BmD,CAA8C,EAC/F,KAAKtF,qBAAqBwD,IAAI,IAAI,CACpC,CAKA8C,eAAa,CACX,KAAKtH,WAAWwE,IAAI,CAAA,CAAE,EACtB,KAAKpE,aAAaoE,IAAI,CACpBnE,MAAO,EACPC,QAAS,GACTC,gBAAiB,KACjBC,eAAgB,GAChBC,cAAe,EAChB,EACD,KAAKN,sBAAsBqE,IAAI,QAAQ,CACzC,CAKAyF,YAAYC,EAAsC,CAEhD,IAAM5F,GADoC4F,GAAY,CAAA,GACJZ,IAC/Ca,GACC,KAAK5F,oBAAoB4F,CAAC,CAAC,EAE/B,KAAKnK,WAAWwE,IAAIF,CAAO,CAC7B,CAKQC,oBACNgF,EAA+B,CAG/B,GADiCA,EAAIC,eAAe7D,KAAI,GAC9CC,OACR,OAAO2D,EAET,IAAMa,EAA8Bb,EAAIG,YAAY/D,KAAI,EACxD,OAAIyE,GAASxE,OACJxB,EAAAC,EAAA,GAAKkF,GAAL,CAAUC,cAAeY,CAAO,GAElChG,EAAAC,EAAA,GAAKkF,GAAL,CAAUC,cAAea,WAAWC,OAAOC,WAAU,CAAE,EAChE,CAMAC,oBAAoBd,EAAkB,CAEpC,IAAMe,EADwC,KAAKzK,WAAU,EACPsJ,IACnDC,GACCA,EAAIG,aAAeA,EACftF,EAAAC,EAAA,GAAKkF,GAAL,CAAUI,YAAa,EAAI,GAC3BJ,CAAG,EAEX,KAAKvJ,WAAWwE,IAAIiG,CAAO,CAC7B,CAMMC,oBAAoBtH,EAAiB,QAAAiD,EAAA,sBACzC,KAAKpG,kBAAkBuE,IAAI,EAAI,EAC/B,KAAKtE,oBAAoBsE,IAAI,IAAI,EACjC,GAAI,CAKF,IAAM0F,GAJW,MAAM,KAAKnI,gBAAgB4I,YAAY,CACtDvH,UAAWA,EACXwH,SAAU,mBACX,GACuDV,UAAY,CAAA,EACpE,OAAI9G,IAAc,KAAK5D,kBAAiB,GACtC,KAAKyK,YAAYC,CAAQ,EAEpBA,CACT,OAASzD,EAAgB,CACvBC,oBAAWC,UACT,oDACAF,CAAK,EAEP,KAAKvG,oBAAoBsE,IAAIiC,CAAK,EAC3B,CAAA,CACT,QAAC,CACC,KAAKxG,kBAAkBuE,IAAI,EAAK,CAClC,CACF,GAUMqG,iBAAiBhE,EAKtB,QAAAR,EAAA,sBACC,KAAKpG,kBAAkBuE,IAAI,EAAI,EAC/B,KAAKtE,oBAAoBsE,IAAI,IAAI,EACjC,GAAI,CACF,IAAM8B,EACJ,MAAM,KAAKvE,gBAAgB+I,mBAAmB,CAC5C1H,UAAWyD,EAAOzD,UAClBwH,SAAU/D,EAAO+D,UAAY,mBAC7BG,OAAQ,GACRC,MAAOnE,EAAOmE,OAAS,GACvBC,aAAcpE,EAAOoE,aACtB,EACH,OAAIpE,EAAOzD,YAAc,KAAK5D,kBAAiB,IAC7C,KAAKyK,YAAY3D,EAAS4D,UAAY,CAAA,CAAE,EACxC,KAAK9J,aAAaoE,IAAI,CACpBnE,MAAOiG,EAASjG,MAChBC,QAASgG,EAAShG,QAClBC,gBAAiB+F,EAAS/F,gBAC1BC,eAAgB,GAChBC,cAAe6F,EAAS7F,cACzB,GAEI6F,CACT,OAASG,EAAgB,CACvBC,oBAAWC,UACT,gDACAF,CAAK,EAEP,KAAKvG,oBAAoBsE,IAAIiC,CAAK,EAC3B,IACT,QAAC,CACC,KAAKxG,kBAAkBuE,IAAI,EAAK,CAClC,CACF,GAQM0G,eAAerE,EAKpB,QAAAR,EAAA,sBACC,IAAM8E,EAAQ,KAAK/K,aAAY,EAC/B,GAAI,CAAC+K,EAAM7K,SAAW6K,EAAM5K,iBAAmB,MAAQ4K,EAAM3K,eAC3D,OAAO,KAET,KAAKJ,aAAaoE,IAAIJ,EAAAC,EAAA,GAAK8G,GAAL,CAAY3K,eAAgB,EAAI,EAAE,EACxD,GAAI,CACF,IAAM8F,EACJ,MAAM,KAAKvE,gBAAgB+I,mBAAmB,CAC5C1H,UAAWyD,EAAOzD,UAClBwH,SAAU/D,EAAO+D,UAAY,mBAC7BQ,YAAaD,EAAM5K,gBACnByK,MAAOnE,EAAOmE,OAAS,GACvBC,aAAcpE,EAAOoE,aACtB,EACH,GAAIpE,EAAOzD,YAAc,KAAK5D,kBAAiB,EAAI,CACjD,IAAM6L,GAAuC/E,EAAS4D,UAAY,CAAA,GAAIZ,IACnEa,GACC,KAAK5F,oBAAoB4F,CAAC,CAAC,EAE/B,KAAKnK,WAAWwE,IAAI,CAAC,GAAG6G,EAAO,GAAG,KAAKrL,WAAU,CAAE,CAAC,EACpD,KAAKI,aAAaoE,IAAI,CACpBnE,MAAOiG,EAASjG,MAChBC,QAASgG,EAAShG,QAClBC,gBAAiB+F,EAAS/F,gBAC1BC,eAAgB,GAChBC,cAAe6F,EAAS7F,cACzB,CACH,MACE,KAAKL,aAAaoE,IAAIJ,EAAAC,EAAA,GAAK8G,GAAL,CAAY3K,eAAgB,EAAK,EAAE,EAE3D,OAAO8F,CACT,OAASG,EAAgB,CACvBC,oBAAWC,UACT,8CACAF,CAAK,EAEP,KAAKvG,oBAAoBsE,IAAIiC,CAAK,EAClC,KAAKrG,aAAaoE,IAAIJ,EAAAC,EAAA,GAAK8G,GAAL,CAAY3K,eAAgB,EAAK,EAAE,EAClD,IACT,CACF,GASM8K,oBAAoBlI,EAAiB,QAAAiD,EAAA,sBACzC,KAAKlG,sBAAsBqE,IAAI,SAAS,EACxC,IAAM+G,EAA4B,KAAKnL,aAAY,EAAGK,cACtD,YAAKT,WAAWwE,IAAI,CAAA,CAAE,EACtB,KAAKpE,aAAaoE,IAAI,CACpBnE,MAAO,EACPC,QAAS,GACTC,gBAAiB,KACjBC,eAAgB,GAChBC,cAAe8K,EAChB,EACM,KAAKV,iBAAiB,CAC3BzH,UAAWA,EACX6H,aAAc,UACf,CACH,GAOMO,mBAAmBpI,EAAiB,QAAAiD,EAAA,sBACxC,YAAKlG,sBAAsBqE,IAAI,QAAQ,EACvC,KAAKxE,WAAWwE,IAAI,CAAA,CAAE,EACtB,KAAKpE,aAAaoE,IAAI,CACpBnE,MAAO,EACPC,QAAS,GACTC,gBAAiB,KACjBC,eAAgB,GAChBC,cAAe,EAChB,EACM,KAAKoK,iBAAiB,CAC3BzH,UAAWA,EACX6H,aAAc,SACf,CACH,GAKMQ,kBAAkBrI,EAAiB,QAAAiD,EAAA,sBAIvC,GAAI,CAACjD,EACH,OAAO,KAET,KAAKjC,uBAAuBqD,IAAI,EAAI,EACpC,GAAI,CACF,IAAM8B,EAAW,MAAM,KAAK1E,WAAW8J,WAAWtI,CAAS,EACrDuI,EAGF,CACF7E,QAASR,EAASQ,QAClB8E,QAAStF,EAASsF,SAAW,MAE/B,YAAKvM,yBAAyBmF,IAAIpB,EAAWuI,CAAK,EAClD,KAAKzK,mBAAmBsD,IAAI,IAAIlF,IAAI,KAAKD,wBAAwB,CAAC,EAC3DsM,CACT,OAASlF,EAAgB,CACvBC,oBAAWC,UACT,iDACAF,CAAK,EAEA,IACT,QAAC,CACC,KAAKtF,uBAAuBqD,IAAI,EAAK,CACvC,CACF,GAKAqH,uBAAuBzI,EAAiB,CAItC,OAAO,KAAK/D,yBAAyByM,IAAI1I,CAAS,GAAK,IACzD,CAKM2I,gBAAgB3I,EAAiB,QAAAiD,EAAA,sBACrC,GAAI,CAACjD,EACH,OAAO,KAET,KAAK/B,qBAAqBmD,IAAI,EAAI,EAClC,KAAKlD,uBAAuBkD,IAAI,IAAI,EACpC,GAAI,CACF,IAAM8B,EACJ,MAAM,KAAK1E,WAAWoK,eAAe5I,CAAS,EAChD,YAAK7D,uBAAuBiF,IAAIpB,EAAWkD,CAAQ,EACnD,KAAKlF,iBAAiBoD,IAAI,IAAIlF,IAAI,KAAKC,sBAAsB,CAAC,EACvD+G,CACT,OAASG,EAAgB,CACvBC,oBAAWC,UACT,+CACAF,CAAK,EAEP,KAAKnF,uBAAuBkD,IAAIiC,CAAK,EAC9B,IACT,QAAC,CACC,KAAKpF,qBAAqBmD,IAAI,EAAK,CACrC,CACF,GAKAyH,qBAAqB7I,EAAiB,CACpC,OAAO,KAAK7D,uBAAuBuM,IAAI1I,CAAS,GAAK,IACvD,CAKM8I,gCAAgCrF,EAGrC,QAAAR,EAAA,sBACC,IAAMR,EAAcgB,EAAOzD,WAAWuC,KAAI,GAAM,GAC1CwG,EAActF,EAAO7C,OAAO2B,KAAI,GAAM,GAC5C,GAAI,CAACE,GAAO,CAACsG,EACX,MAAO,CAAA,EAET,GAAI,CAMF,OAJE,MAAM,KAAKvK,WAAWwK,iBAAiB,CACrChJ,UAAWyC,EACX7B,MAAOmI,EACR,GACaE,SAAW,CAAA,CAC7B,MAAQ,CACN,MAAO,CAAA,CACT,CACF,GAKMC,kBAAkBzF,EAGvB,QAAAR,EAAA,sBACC,IAAMR,EAAcgB,EAAOzD,WAAWuC,KAAI,GAAM,GAC1CwG,EAActF,EAAO7C,OAAO2B,KAAI,GAAM,GAE5C,GAAI,CAACE,GAAO,CAACsG,EAAK,CAChB,KAAK5K,uBAAuBiD,IAAI,CAAA,CAAE,EAClC,MACF,CAEA,KAAKhD,uBAAuBgD,IAAI,EAAI,EACpC,KAAK/C,yBAAyB+C,IAAI,IAAI,EAEtC,GAAI,CACF,IAAM8B,EACJ,MAAM,KAAK1E,WAAWwK,iBAAiB,CACrChJ,UAAWyC,EACX7B,MAAOmI,EACR,EACH,KAAK5K,uBAAuBiD,IAAI8B,EAAS+F,OAAO,CAClD,OAAS5F,EAAgB,CACvBC,aAAWC,UACT,kDACAF,CAAK,EAEP,KAAKhF,yBAAyB+C,IAAIiC,CAAK,EACvC,KAAKlF,uBAAuBiD,IAAI,CAAA,CAAE,CACpC,QAAC,CACC,KAAKhD,uBAAuBgD,IAAI,EAAK,CACvC,CACF,GAMM+H,cAAc1F,EAGnB,QAAAR,EAAA,sBACC,GAAI,CACF,IAAMC,EAAW,MAAM,KAAK1E,WAAW2K,cAAc1F,CAAM,EACrD2F,EAAoB3F,EAAO4F,QAAQD,SACzC,OAAIA,IAAa,IAAQA,IAAa,IACpC,MAAM,KAAKpG,aAAY,EACvB,MAAM,KAAKe,qBAAoB,GAE/B,MAAM,KAAKf,aAAY,EAElBE,EAASQ,OAClB,OAASL,EAAgB,CACvBC,oBAAWC,UACT,4CACAF,CAAK,EAEA,IACT,CACF,GAKQ5B,qCAAqCD,EAAkC,CAC7E,IAAM8H,EAAoB9H,EAAUI,MAC9B2H,EAAmB,OAAOD,GAAa,SAAWA,EAAS/G,KAAI,EAAK,GAC1E,GAAIgH,IAAaC,EAAqBC,cAAe,CACnD,IAAMC,EAAmBlI,EAAUmI,iBACnC,GAAI,OAAOD,GAAY,UAAYA,EAAQnH,KAAI,IAAO,GAAI,CACxD,IAAMqH,EACJ5N,EAAoB6N,qCAAqCH,CAAO,EAC9DE,IAAexJ,QACjB,KAAK7C,yBAAyB6D,IAAIwI,CAAU,CAEhD,CACA,MACF,EAEEL,IAAaC,EAAqBM,iBAC/BP,IAAaC,EAAqBO,oBAErC,KAAKxM,yBAAyB6D,IAAI,EAAE,CAExC,CAKQ,OAAOyI,qCAAqCG,EAAW,CAC7D,IAAMxE,EAAkBwE,EAAIzH,KAAI,EAC1B0H,EAAoC,CACxCC,EAAyBC,QACzBD,EAAyBE,WACzBF,EAAyBG,IACzBH,EAAyBI,IAAI,EAE/B,QAAWC,KAAKN,EACd,GAAIzE,IAAY+E,EACd,OAAOA,CAIb,CAEAC,aAAW,CACT,KAAK9M,kBAAkB+M,SAAQ,EAC3B,KAAKnM,oBACP,KAAKA,kBAAkBoM,YAAW,EAClC,KAAKpM,kBAAoB,MAEvB,KAAKC,qBACP,KAAKA,mBAAmBoM,QAAO,EAC/B,KAAKpM,mBAAqB,KAE9B,4CAnjCWvC,EAAmB,6BAAnBA,EAAmB4O,QAAnB5O,EAAmB6O,UAAAC,WADN,MAAM,CAAA,SACnB9O,CAAmB,GAAA",
6
- "names": ["SocketUrl_Util", "computeSocketUrlFromStatus", "_data", "origin", "DisplayString_Util", "toDisplayString", "value", "o", "message", "trim", "length", "error", "detail", "s", "String", "import_fsm_dynamo", "Ses_Conversation_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "getMessages", "params", "firstValueFrom", "get", "sessionId", "viewMode", "getMessagesChunked", "httpParams", "beforeIndex", "String", "limit", "latest", "archiveScope", "sendMessage", "post", "content", "imageAttachments", "factory", "\u0275fac", "providedIn", "Session_ApiService", "baseUrl", "environment", "api", "http", "inject", "HttpClient", "peiContext_DS", "ExS_InstanceContext_DataService", "currentCcapId", "activeCcapId_$", "withCcapId", "params", "ccapId", "set", "listSessions", "httpParams", "HttpParams", "firstValueFrom", "get", "listArchivedSessions", "createSession", "body", "trimmedName", "name", "undefined", "trim", "length", "post", "getSession", "sessionId", "updateSession", "patch", "updates", "getSessionInfo", "copySession", "forkUntilMessageKey", "stopExecution", "getLlmDebugTrace", "runId", "factory", "\u0275fac", "providedIn", "SOCKET_EVENT_ANSWER", "SOCKET_EVENT_NOTIFY_USER", "SOCKET_EVENT_AGENT_EVENTS", "SOCKET_EVENT_CONTEXT_UPDATED", "SOCKET_EVENT_MONITORING_EVENT", "SOCKET_EVENT_USER_INTERACTION_REQUEST", "SOCKET_EVENT_USER_INTERACTION_RESOLVED", "NTF_TOOL_ID", "NTF_PHASE_SENT", "NTF_PHASE_WAITING", "Session_DataService", "sessionDetailBySessionId", "Map", "sessionInfoBySessionId", "activeSessionId_$", "signal", "requestSidebarCloseOnMobileBump_$", "sessions_$", "sessionsLoadError_$", "sessionsLoading_$", "archivedSessions_$", "archivedSessionsLoading_$", "messages_$", "messagesLoading_$", "messagesLoadError_$", "currentArchiveScope_$", "chunkState_$", "total", "hasMore", "nextBeforeIndex", "isLoadingOlder", "archivedTotal", "agentEvents_$", "activeRunExecutionMode_$", "contextUpdated_$", "monitoringEvent_$", "monitoringEvent_S", "Subject", "pendingInteraction_$", "pendingNotification_$", "sessionDetailMap_$", "sessionDetailLoading_$", "sessionInfoMap_$", "sessionInfoLoading_$", "sessionInfoLoadError_$", "llmDebugTraceEntries_$", "llmDebugTraceLoading_$", "llmDebugTraceLoadError_$", "eventSubscription", "connectedEffectRef", "session_AS", "inject", "Session_ApiService", "conversation_AS", "Ses_Conversation_ApiService", "serverStatus_AS", "SSt_Server_ApiService", "socket_CS", "CCAP_Socket_ControlService", "connected_$", "socketStatus_$", "status_$", "lastSocketError_$", "lastError_$", "connectAttemptCount_$", "diagnoseConnection", "constructor", "event$", "subscribe", "envelope", "handleSocketEvent", "effect", "getActiveSessionId", "emit", "sessionId", "payload", "activeId", "channelId", "undefined", "sessionIdFromPayload", "isForActive", "event", "content", "timestamp", "Date", "toISOString", "runId", "base", "role", "withRun", "__spreadProps", "__spreadValues", "stamped", "ensureClientListKey", "set", "DyFM_Log", "info", "substring", "eventData", "applyAgentEventRunExecutionModeLatch", "toolId", "eventPhase", "phase", "notificationTitle", "notificationType", "notificationPriority", "toolErrorContent", "toolError", "chId", "isForThisSession", "toolErrorStr", "DisplayString_Util", "toDisplayString", "trim", "length", "sid", "contextState", "ev", "monitoringPayload", "next", "resolvedId", "interactionId", "loadSessions", "__async", "response", "listSessions", "sessions", "error", "DyFM_Error", "logSimple", "createSession", "params", "session", "copySession", "forkSession", "name", "forkUntilMessageKey", "loadArchivedSessions", "listArchivedSessions", "setActiveSession", "clearMessages", "reconnectSocket", "status", "getStatus", "origin", "window", "location", "newSocketUrl", "SocketUrl_Util", "computeSocketUrlFromStatus", "httpPort", "socketPort", "currentSocketUrl", "environment", "socketUrl", "reload", "reconnect", "stopExecution", "success", "err", "sendMessageViaSocket", "imageAttachments", "trimmed", "newSession", "sent", "hasImages", "optimisticMsg", "optimisticStamped", "serverMsg", "sendMessage", "message", "updatedMessages", "map", "msg", "clientListKey", "merged", "messageKey", "hasTtsAudio", "rolledBack", "filter", "Error", "sendMessageToSession", "sendInteractionResponse", "setMessages", "messages", "m", "fromTts", "globalThis", "crypto", "randomUUID", "setMessageTtsCached", "updated", "loadMessagesForView", "getMessages", "viewMode", "loadInitialChunk", "getMessagesChunked", "latest", "limit", "archiveScope", "loadOlderChunk", "state", "beforeIndex", "older", "switchToArchiveView", "prevArchivedTotal", "switchToActiveView", "loadSessionDetail", "getSession", "entry", "lastRun", "getCachedSessionDetail", "get", "loadSessionInfo", "getSessionInfo", "getCachedSessionInfo", "fetchLlmDebugTraceEntriesForRun", "rid", "getLlmDebugTrace", "entries", "loadLlmDebugTrace", "updateSession", "archived", "updates", "phaseRaw", "phaseStr", "AC_RunFlowPhase_Type", "analyzeResult", "modeRaw", "runExecutionMode", "normalized", "normalizeRunExecutionModeSocketValue", "runFlowComplete", "runInitialization", "raw", "known", "AC_RunExecutionMode_Type", "instant", "agenticAny", "ask", "plan", "v", "ngOnDestroy", "complete", "unsubscribe", "destroy", "factory", "\u0275fac", "providedIn"]
7
- }
@@ -1 +0,0 @@
1
- //# sourceMappingURL=chunk-EGRHWZRV.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": [],
4
- "sourcesContent": [],
5
- "mappings": "",
6
- "names": []
7
- }
@@ -1,2 +0,0 @@
1
- import{h as f,i as A}from"./chunk-7SAFEFWU.js";import{C as E,a as l,aa as i,b as u,k as d,y as _}from"./chunk-TBMJSIBB.js";var m=class o{static buildAnnotationIndex(e){let r=new Map;for(let t of e)t.errorCode&&t.errorCode.length>0&&r.set(t.errorCode,t);return r}static classify(e,r){let t=e.errorCode;if(!t)return{classification:"UNFIXED"};let s=r.get(t);if(!s||!s.fixedInVersion)return{classification:"UNFIXED"};let a=o.parseVersion(s.fixedInVersion),n=o.extractMaxVersion(e.versions);return!a||!n?{classification:"UNFIXED"}:{classification:o.compareVersions(n,a)<0?"STALE-BUILD":"REGRESSION",fixedInVersion:s.fixedInVersion,fixedInCycle:s.fixedInCycle,summary:s.summary}}static classifyAll(e,r){let t=o.buildAnnotationIndex(r);return e.map(s=>u(l({},s),{fixAnnotation:o.classify(s,t)}))}static parseVersion(e){let r=e.match(/(\d+)\.(\d+)\.(\d+)/);return r?[parseInt(r[1],10),parseInt(r[2],10),parseInt(r[3],10)]:null}static extractMaxVersion(e){if(!e||!e.length)return null;let r=null;for(let t of e){let s=o.parseVersion(t);s!=null&&(r==null||o.compareVersions(s,r)>0)&&(r=s)}return r}static compareVersions(e,r){for(let t=0;t<3;t++){let s=e[t]??0,a=r[t]??0;if(s!==a)return s<a?-1:1}return 0}};var p=class{static sortCcapErrorListItemsNewestFirst(e){let r=[...e];return r.sort((t,s)=>{let a=$(t),n=$(s);if(n!==a)return n-a;let c=t._id??"";return(s._id??"").localeCompare(c)}),r}};function $(o){let e=o.lastOccurrenceAt??o.timestamp;if(!e||typeof e!="string"||e.trim().length===0)return 0;let r=Date.parse(e);return Number.isFinite(r)?r:0}var S=(()=>{class o{errors_$=i([]);errorsTotalCount_$=i(0);errorsLoading_$=i(!1);errorsLoadError_$=i(null);errorsLoadErrorRaw_$=i(null);lastRefreshedAt_$=i(null);hideStaleBuild_$=i(!0);fixAnnotations_$=i([]);errors_AS=E(A);loadErrors(){return d(this,null,function*(){this.errorsLoading_$.set(!0),this.errorsLoadError_$.set(null),this.errorsLoadErrorRaw_$.set(null);try{let r=yield this.errors_AS.listErrors(),t=r.errors??[],s=[];try{s=yield this.errors_AS.listFixAnnotations()}catch{s=[]}this.fixAnnotations_$.set(s);let a=m.classifyAll(t,s);this.errors_$.set(p.sortCcapErrorListItemsNewestFirst(a)),this.errorsTotalCount_$.set(r.total),this.lastRefreshedAt_$.set(new Date)}catch(r){this.errorsLoadErrorRaw_$.set(r);let t=f.getErrorMessageForDisplay(r);this.errorsLoadError_$.set(t),this.errors_$.set([]),this.errorsTotalCount_$.set(0)}finally{this.errorsLoading_$.set(!1)}})}clearAll(){return d(this,null,function*(){try{yield this.errors_AS.deleteAllErrors(),yield this.loadErrors()}catch(r){this.errorsLoadErrorRaw_$.set(r);let t=f.getErrorMessageForDisplay(r);this.errorsLoadError_$.set(t)}})}clearOne(r){return d(this,null,function*(){try{yield this.errors_AS.deleteError(r),this.errors_$.update(t=>t.filter(s=>s._id!==r)),this.errorsTotalCount_$.update(t=>Math.max(0,t-1))}catch(t){this.errorsLoadErrorRaw_$.set(t);let s=f.getErrorMessageForDisplay(t);this.errorsLoadError_$.set(s)}})}setPmUserMark(r,t){return d(this,null,function*(){try{let s=yield this.errors_AS.setPmUserMark(r,t),a=s.pmUserMarkedAt!=null&&s.pmUserMarkedAt.trim().length>0?s.pmUserMarkedAt.trim():void 0;this.errors_$.update(n=>n.map(c=>{if(c._id!==r)return c;if(a!=null)return u(l({},c),{pmUserMarkedAt:a});let h=l({},c);return delete h.pmUserMarkedAt,h}))}catch(s){this.errorsLoadErrorRaw_$.set(s);let a=f.getErrorMessageForDisplay(s);this.errorsLoadError_$.set(a)}})}static \u0275fac=function(t){return new(t||o)};static \u0275prov=_({token:o,factory:o.\u0275fac,providedIn:"root"})}return o})();export{S as a};
2
- //# sourceMappingURL=chunk-GZDOO5NB.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["src/app/_collections/error/fix-annotation/ccap-error-fix-classifier.util.ts", "src/app/_collections/error/sort-ccap-error-list-items-newest-first.util.ts", "src/app/_modules/system/_modules/errors/_services/errors.data-service.ts"],
4
- "sourcesContent": ["import {\n CCAP_ErrorListItem_Response,\n CCAP_ErrorFixClassification_Type,\n CCAP_ErrorFixAnnotation_Response,\n} from '../../../_models/interfaces/feedback-errors/ccap-error-list-item.interface';\nimport { CCAP_FixAnnotation_Response } from '../../../_models/interfaces/feedback-errors/ccap-fix-annotation.interface';\n\n/**\n * Cycle 780 (REQ-SYS-EH-FIX-ANNOTATION-001) — kliens-oldali klasszifikáló util.\n *\n * Egy lekért fix-annotation lista + egy error-rekord versions tömb alapján\n * eldönti, hogy az error STALE-BUILD (régi build, már fixelt), REGRESSION\n * (fix utáni új keletkezés) vagy UNFIXED (nincs annotation az errorCode-ra).\n *\n * Spec: `__specifications/system/runtime-error-fix-annotation.md`.\n */\nexport class CCAP_ErrorFixClassifier_Util {\n\n /**\n * Egy fix-annotation lista (server-side response) → errorCode-indexelt Map.\n */\n static buildAnnotationIndex(\n annotations: CCAP_FixAnnotation_Response[],\n ): Map<string, CCAP_FixAnnotation_Response> {\n const out: Map<string, CCAP_FixAnnotation_Response> = new Map();\n for (const a of annotations) {\n if (a.errorCode && a.errorCode.length > 0) {\n out.set(a.errorCode, a);\n }\n }\n return out;\n }\n\n /**\n * Egy error-rekord klasszifikálása. Az item.fixAnnotation-t adja vissza\n * (a hívó set-eli az item-re vagy egy mapped másolatra).\n */\n static classify(\n item: CCAP_ErrorListItem_Response,\n index: Map<string, CCAP_FixAnnotation_Response>,\n ): CCAP_ErrorFixAnnotation_Response {\n const errorCode: string | undefined = item.errorCode;\n if (!errorCode) {\n return { classification: 'UNFIXED' };\n }\n const ann: CCAP_FixAnnotation_Response | undefined = index.get(errorCode);\n if (!ann || !ann.fixedInVersion) {\n return { classification: 'UNFIXED' };\n }\n const fixV: number[] | null = CCAP_ErrorFixClassifier_Util.parseVersion(ann.fixedInVersion);\n const itemV: number[] | null = CCAP_ErrorFixClassifier_Util.extractMaxVersion(item.versions);\n if (!fixV || !itemV) {\n return { classification: 'UNFIXED' };\n }\n const cls: CCAP_ErrorFixClassification_Type =\n CCAP_ErrorFixClassifier_Util.compareVersions(itemV, fixV) < 0\n ? 'STALE-BUILD'\n : 'REGRESSION';\n return {\n classification: cls,\n fixedInVersion: ann.fixedInVersion,\n fixedInCycle: ann.fixedInCycle,\n summary: ann.summary,\n };\n }\n\n /**\n * Klasszifikáció a teljes listára (új tömb, az eredeti item-ek + fixAnnotation\n * mező).\n */\n static classifyAll(\n items: CCAP_ErrorListItem_Response[],\n annotations: CCAP_FixAnnotation_Response[],\n ): CCAP_ErrorListItem_Response[] {\n const index: Map<string, CCAP_FixAnnotation_Response> =\n CCAP_ErrorFixClassifier_Util.buildAnnotationIndex(annotations);\n return items.map((it: CCAP_ErrorListItem_Response): CCAP_ErrorListItem_Response => ({\n ...it,\n fixAnnotation: CCAP_ErrorFixClassifier_Util.classify(it, index),\n }));\n }\n\n /**\n * Verzió-string parse (`1.1.2473` → `[1, 1, 2473]`). null ha nem semver-szerű.\n * `SERVER-1.1.2469` prefix is elfogadott.\n */\n static parseVersion(v: string): number[] | null {\n const match: RegExpMatchArray | null = v.match(/(\\d+)\\.(\\d+)\\.(\\d+)/);\n if (!match) {\n return null;\n }\n return [\n parseInt(match[1], 10),\n parseInt(match[2], 10),\n parseInt(match[3], 10),\n ];\n }\n\n /**\n * Egy versions tömbből a legmagasabb verziót adja vissza.\n */\n static extractMaxVersion(versions: string[] | undefined): number[] | null {\n if (!versions || !versions.length) {\n return null;\n }\n let best: number[] | null = null;\n for (const v of versions) {\n const parsed: number[] | null = CCAP_ErrorFixClassifier_Util.parseVersion(v);\n if (parsed != null && (best == null || CCAP_ErrorFixClassifier_Util.compareVersions(parsed, best) > 0)) {\n best = parsed;\n }\n }\n return best;\n }\n\n /**\n * Két parse-elt verzió összehasonlítása. -1 / 0 / 1.\n */\n static compareVersions(a: number[], b: number[]): number {\n for (let i: number = 0; i < 3; i++) {\n const av: number = a[i] ?? 0;\n const bv: number = b[i] ?? 0;\n if (av !== bv) {\n return av < bv ? -1 : 1;\n }\n }\n return 0;\n }\n}\n", "import { CCAP_ErrorListItem_Response } from '../../_models/interfaces/feedback-errors/ccap-error-list-item.interface';\n\n/**\n * Hibalista rendezési util – statikus metódusokkal.\n */\nexport class SortCcapErrorListItemsNewestFirst_Util {\n /**\n * Hibalista másolatának rendezése: legfrissebb utolsó előfordulás (vagy első rögzítés) felülre.\n * Nem módosítja az input tömböt.\n */\n static sortCcapErrorListItemsNewestFirst(\n items: CCAP_ErrorListItem_Response[],\n ): CCAP_ErrorListItem_Response[] {\n const copy: CCAP_ErrorListItem_Response[] = [...items];\n copy.sort((a: CCAP_ErrorListItem_Response, b: CCAP_ErrorListItem_Response): number => {\n const msA: number = getErrorListItemSortTimeMs(a);\n const msB: number = getErrorListItemSortTimeMs(b);\n if (msB !== msA) {\n return msB - msA;\n }\n const idA: string = a._id ?? '';\n const idB: string = b._id ?? '';\n return idB.localeCompare(idA);\n });\n return copy;\n }\n}\n\n/**\n * Egy hibalista-elem időbélyege ms-ban a rendezéshez: először lastOccurrenceAt, különben timestamp.\n * Hiányos / érvénytelen dátum → 0 (a lista alja, egymás között _id tie-break).\n */\nfunction getErrorListItemSortTimeMs(item: CCAP_ErrorListItem_Response): number {\n const raw: string | undefined = item.lastOccurrenceAt ?? item.timestamp;\n if (!raw || typeof raw !== 'string' || raw.trim().length === 0) {\n return 0;\n }\n const ms: number = Date.parse(raw);\n return Number.isFinite(ms) ? ms : 0;\n}\n", "import { inject, Injectable, signal } from '@angular/core';\n\nimport { CCAP_ErrorDisplay_Util } from '../../../../../_collections/error/error-display.util';\nimport { CCAP_ErrorFixClassifier_Util } from '../../../../../_collections/error/fix-annotation/ccap-error-fix-classifier.util';\nimport { SortCcapErrorListItemsNewestFirst_Util } from '../../../../../_collections/error/sort-ccap-error-list-items-newest-first.util';\nimport { CCAP_ErrorListItem_Response } from '../../../../../_models/interfaces/feedback-errors/ccap-error-list-item.interface';\nimport { CCAP_FixAnnotation_Response } from '../../../../../_models/interfaces/feedback-errors/ccap-fix-annotation.interface';\nimport { Errors_ApiService } from './errors.api-service';\n\n/**\n * Errors data-service.\n * Egyetlen forrás a hibák listájához: loadErrors, clearAll, clearOne.\n */\n@Injectable({ providedIn: 'root' })\nexport class Errors_DataService {\n\n /** Hibák listája (lastOccurrenceAt DESC). */\n readonly errors_$ = signal<CCAP_ErrorListItem_Response[]>([]);\n\n /**\n * BUG-ERR-COUNT-CAP-001 (cycle 436): teljes szerveroldali error-szám,\n * NEM csak a lekért lap mérete (`errors_$.length` 100/30 cap).\n * A main-menu badge a tényleges szám megjelenítésére használja.\n */\n readonly errorsTotalCount_$ = signal<number>(0);\n\n /** Lista betöltés folyamatban. */\n readonly errorsLoading_$ = signal<boolean>(false);\n\n /** Lista betöltési hiba (null = nincs hiba); rövid szöveg (összefoglaló megjelenítéshez). */\n readonly errorsLoadError_$ = signal<string | null>(null);\n\n /**\n * Lista / törlés művelet nyers hibája (null = nincs hiba); Shared Error komponens input (HttpErrorResponse is).\n */\n readonly errorsLoadErrorRaw_$ = signal<unknown | null>(null);\n\n /** Utolsó sikeres frissítés időpontja (null = még nem volt betöltés). */\n readonly lastRefreshedAt_$ = signal<Date | null>(null);\n\n /**\n * Cycle 780 (REQ-SYS-EH-FIX-ANNOTATION-001) — a /errors UI default szűrője:\n * `STALE-BUILD` items elrejtve. A user toggle-vel kapcsolhatja vissza.\n */\n readonly hideStaleBuild_$ = signal<boolean>(true);\n\n /**\n * Cycle 780 — fix-annotation registry (errorCode → annotation), az utolsó load\n * eredménye. A `/errors` UI a klasszifikáció + summary megjelenítéséhez\n * használja. Üres tömb ha a server nem támogatja még az endpoint-ot.\n */\n readonly fixAnnotations_$ = signal<CCAP_FixAnnotation_Response[]>([]);\n\n private readonly errors_AS: Errors_ApiService = inject(Errors_ApiService);\n\n /**\n * Hibák listájának betöltése a szerverről.\n */\n async loadErrors(): Promise<void> {\n this.errorsLoading_$.set(true);\n this.errorsLoadError_$.set(null);\n this.errorsLoadErrorRaw_$.set(null);\n try {\n const result = await this.errors_AS.listErrors();\n const raw: CCAP_ErrorListItem_Response[] = result.errors ?? [];\n\n // Cycle 780: fix-annotations lekérése + per-item klasszifikáció. Best-effort\n // — ha az endpoint hiányzik (pl. régebbi server build), üres lista mellett\n // minden item UNFIXED-ként klasszifikálódik (default).\n let annotations: CCAP_FixAnnotation_Response[] = [];\n try {\n annotations = await this.errors_AS.listFixAnnotations();\n } catch {\n annotations = [];\n }\n this.fixAnnotations_$.set(annotations);\n const classified: CCAP_ErrorListItem_Response[] =\n CCAP_ErrorFixClassifier_Util.classifyAll(raw, annotations);\n\n this.errors_$.set(SortCcapErrorListItemsNewestFirst_Util.sortCcapErrorListItemsNewestFirst(classified));\n // BUG-ERR-COUNT-CAP-001 (cycle 436): a paged.total a teljes szervert szám\n // (nem a lekért lap mérete) — a main-menu badge ezt használja.\n this.errorsTotalCount_$.set(result.total);\n this.lastRefreshedAt_$.set(new Date());\n } catch (err: unknown) {\n this.errorsLoadErrorRaw_$.set(err);\n const message: string = CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err);\n this.errorsLoadError_$.set(message);\n this.errors_$.set([]);\n this.errorsTotalCount_$.set(0);\n } finally {\n this.errorsLoading_$.set(false);\n }\n }\n\n /**\n * Összes hiba törlése, majd lista frissítése.\n */\n async clearAll(): Promise<void> {\n try {\n await this.errors_AS.deleteAllErrors();\n await this.loadErrors();\n } catch (err: unknown) {\n this.errorsLoadErrorRaw_$.set(err);\n const message: string = CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err);\n this.errorsLoadError_$.set(message);\n }\n }\n\n /**\n * Egy hiba törlése id alapján, majd lista frissítése (vagy elem eltávolítása a signal-ból).\n */\n async clearOne(id: string): Promise<void> {\n try {\n await this.errors_AS.deleteError(id);\n this.errors_$.update((list: CCAP_ErrorListItem_Response[]) =>\n list.filter((e: CCAP_ErrorListItem_Response) => e._id !== id),\n );\n // BUG-ERR-COUNT-CAP-001 (cycle 436): a teljes szám is dekrementálódik —\n // különben a badge stale számot mutatna a következő loadErrors-ig.\n this.errorsTotalCount_$.update((count: number): number => Math.max(0, count - 1));\n } catch (err: unknown) {\n this.errorsLoadErrorRaw_$.set(err);\n const message: string = CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err);\n this.errorsLoadError_$.set(message);\n }\n }\n\n /**\n * PM / user manuális megjelölés; siker esetén a lista signal-ban frissíti az adott sor `pmUserMarkedAt` mezőjét.\n */\n async setPmUserMark(id: string, marked: boolean): Promise<void> {\n try {\n const result: { pmUserMarkedAt: string | null } =\n await this.errors_AS.setPmUserMark(id, marked);\n const nextAt: string | undefined =\n result.pmUserMarkedAt != null && result.pmUserMarkedAt.trim().length > 0\n ? result.pmUserMarkedAt.trim()\n : undefined;\n this.errors_$.update((list: CCAP_ErrorListItem_Response[]) =>\n list.map((e: CCAP_ErrorListItem_Response): CCAP_ErrorListItem_Response => {\n if (e._id !== id) {\n return e;\n }\n // Cycle 780: object-spread, hogy a versions / errorCode / fixAnnotation\n // mezők ne vesszenek el (eddig a kézi tér-a-tér mapping tisztára felülírta).\n if (nextAt != null) {\n return { ...e, pmUserMarkedAt: nextAt };\n }\n const next: CCAP_ErrorListItem_Response = { ...e };\n delete next.pmUserMarkedAt;\n return next;\n }),\n );\n } catch (err: unknown) {\n this.errorsLoadErrorRaw_$.set(err);\n const message: string = CCAP_ErrorDisplay_Util.getErrorMessageForDisplay(err);\n this.errorsLoadError_$.set(message);\n }\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["CCAP_ErrorFixClassifier_Util", "buildAnnotationIndex", "annotations", "out", "Map", "a", "errorCode", "length", "set", "classify", "item", "index", "classification", "ann", "get", "fixedInVersion", "fixV", "parseVersion", "itemV", "extractMaxVersion", "versions", "compareVersions", "fixedInCycle", "summary", "classifyAll", "items", "map", "it", "__spreadProps", "__spreadValues", "fixAnnotation", "v", "match", "parseInt", "best", "parsed", "b", "i", "av", "bv", "SortCcapErrorListItemsNewestFirst_Util", "sortCcapErrorListItemsNewestFirst", "items", "copy", "sort", "a", "b", "msA", "getErrorListItemSortTimeMs", "msB", "idA", "_id", "localeCompare", "item", "raw", "lastOccurrenceAt", "timestamp", "trim", "length", "ms", "Date", "parse", "Number", "isFinite", "Errors_DataService", "errors_$", "signal", "errorsTotalCount_$", "errorsLoading_$", "errorsLoadError_$", "errorsLoadErrorRaw_$", "lastRefreshedAt_$", "hideStaleBuild_$", "fixAnnotations_$", "errors_AS", "inject", "Errors_ApiService", "loadErrors", "__async", "set", "result", "listErrors", "raw", "errors", "annotations", "listFixAnnotations", "classified", "CCAP_ErrorFixClassifier_Util", "classifyAll", "SortCcapErrorListItemsNewestFirst_Util", "sortCcapErrorListItemsNewestFirst", "total", "Date", "err", "message", "CCAP_ErrorDisplay_Util", "getErrorMessageForDisplay", "clearAll", "deleteAllErrors", "clearOne", "id", "deleteError", "update", "list", "filter", "e", "_id", "count", "Math", "max", "setPmUserMark", "marked", "nextAt", "pmUserMarkedAt", "trim", "length", "undefined", "map", "__spreadProps", "__spreadValues", "next", "factory", "\u0275fac", "providedIn"]
7
- }
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["src/app/_modules/dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-input-ui.data-service.ts", "src/app/_enums/voice/ccap-stt-qa-word-diff-segment-kind.enum.ts", "src/app/_collections/utils/model-testing/ccap-stt-qa-text-diff.util.ts", "src/app/_components/ccap-voice-record-button/ccap-voice-record-button.component.ts", "src/app/_components/ccap-voice-record-button/ccap-voice-record-button.component.html"],
4
- "sourcesContent": ["import { Injectable, signal, WritableSignal } from '@angular/core';\n\nimport { Shr_LocalStoragePersistence_Util } from '../../../../../../shared/_collections/utils/storage/shr-local-storage-persistence.util';\n\n/** localStorage kulcs — hang input után azonnali küldés (chat / külső konzolok). */\nconst CCAP_VOICE_INPUT_AUTO_SEND_AFTER_VOICE_KEY: string = 'ccap-voiceInput:autoSendAfterVoice';\n\n/**\n * Voice input composer globális UI állapot — a hang gomb beállítások paneljéből vezérelhető,\n * minden `app-ccap-voice-record-button` kontextusban ugyanaz a döntés érvényesül.\n *\n * REQ-UI-MENU-STATE-001 (cycle 459): a localStorage I/O most a shared\n * `Shr_LocalStoragePersistence_Util.readString / writeString` metódusokra\n * delegál. Az on-disk format (`'true'` / `'false'` literális string) változatlan\n * — szándékosan `writeString(String(value))` a `writeBoolean` (`'1'`/`'0'`)\n * helyett, hogy a meglévő spec round-trip elvárás (`getItem === 'true'`)\n * + a backward-compat felhasználói localStorage értékek konzisztensek\n * maradjanak. A best-effort try/catch most a shared util-ban van. A korábbi\n * top-level `function readAutoSendAfterVoiceFromStorage()` private static\n * methodként került be a class-ba (CLAUDE.md no-top-level-function).\n */\n@Injectable({ providedIn: 'root' })\nexport class VNP_InputUi_DataService {\n\n /** Ha true, a STT transcript után azonnal küldés fut (Mimik-minta); ha false, csak hozzáfűzés a mezőhöz. */\n readonly autoSendAfterVoice_$: WritableSignal<boolean> =\n signal<boolean>(VNP_InputUi_DataService.readAutoSendAfterVoiceFromStorage());\n\n /**\n * „Hang után azonnal\" toggle — signal + localStorage perzisztencia.\n */\n setAutoSendAfterVoice(value: boolean): void {\n this.autoSendAfterVoice_$.set(value);\n Shr_LocalStoragePersistence_Util.writeString(CCAP_VOICE_INPUT_AUTO_SEND_AFTER_VOICE_KEY, String(value));\n }\n\n /**\n * Böngészőből olvassa az „azonnal küldés hang után\" flag-et (default: false).\n */\n private static readAutoSendAfterVoiceFromStorage(): boolean {\n return Shr_LocalStoragePersistence_Util.readString(CCAP_VOICE_INPUT_AUTO_SEND_AFTER_VOICE_KEY) === 'true';\n }\n}\n", "/**\n * STT QA szöveg word-diff szegmens típusa (egyenlő / törölt / új).\n */\nexport enum CCAP_SttQaWordDiffSegmentKind_Type {\n equal = 'equal',\n removed = 'removed',\n added = 'added',\n}\n", "import { CCAP_SttQaWordDiffSegmentKind_Type } from '../../../_enums/voice/ccap-stt-qa-word-diff-segment-kind.enum';\nimport { CCAP_SttQaWordDiffSegment_Interface } from '../../../_models/interfaces/voice/transcribe/ccap-stt-qa-word-diff-segment.interface';\n\ntype CCAP_SttQaWordDiffRawSegment_Interface = {\n kind: CCAP_SttQaWordDiffSegmentKind_Type;\n text: string;\n};\n\n/**\n * STT QA eredeti vs javított szöveg word-token alapú diff (LCS) — modal összefoglaló highlight-hoz.\n */\nexport class CCAP_SttQaTextDiff_Util {\n /**\n * Whitespace-megtartó tokenizálás: szavak és whitespace külön token (LCS egy sorban tartja a szerkezetet).\n */\n private static tokenize(input: string): string[] {\n const trimmed: string = input;\n if (trimmed.length === 0) {\n return [];\n }\n const parts: string[] = trimmed.split(/(\\s+)/);\n const out: string[] = [];\n for (let i: number = 0; i < parts.length; i++) {\n const p: string = parts[i];\n if (p.length > 0) {\n out.push(p);\n }\n }\n return out;\n }\n\n /**\n * Egymás melletti azonos kind szegmensek összefűzése, majd id kiosztás.\n */\n private static mergeAndAssignIds(\n raw: CCAP_SttQaWordDiffRawSegment_Interface[],\n ): CCAP_SttQaWordDiffSegment_Interface[] {\n if (raw.length === 0) {\n return [];\n }\n const merged: CCAP_SttQaWordDiffRawSegment_Interface[] = [];\n for (let i: number = 0; i < raw.length; i++) {\n const cur: CCAP_SttQaWordDiffRawSegment_Interface = raw[i];\n const last: CCAP_SttQaWordDiffRawSegment_Interface | undefined = merged[merged.length - 1];\n if (last !== undefined && last.kind === cur.kind) {\n last.text = last.text + cur.text;\n } else {\n merged.push({ kind: cur.kind, text: cur.text });\n }\n }\n const withIds: CCAP_SttQaWordDiffSegment_Interface[] = [];\n for (let k: number = 0; k < merged.length; k++) {\n const m: CCAP_SttQaWordDiffRawSegment_Interface = merged[k];\n withIds.push({\n id: k,\n kind: m.kind,\n text: m.text,\n });\n }\n return withIds;\n }\n\n /**\n * Word-token LCS diff: unified sor — equal / removed / added szegmensek sorrendben (javított szöveg kontextusához).\n */\n static buildWordDiff(oldText: string, newText: string): CCAP_SttQaWordDiffSegment_Interface[] {\n const a: string[] = CCAP_SttQaTextDiff_Util.tokenize(oldText);\n const b: string[] = CCAP_SttQaTextDiff_Util.tokenize(newText);\n const n: number = a.length;\n const m: number = b.length;\n const dp: number[][] = [];\n for (let i: number = 0; i <= n; i++) {\n const row: number[] = [];\n for (let j: number = 0; j <= m; j++) {\n row.push(0);\n }\n dp.push(row);\n }\n for (let i: number = 1; i <= n; i++) {\n for (let j: number = 1; j <= m; j++) {\n if (a[i - 1] === b[j - 1]) {\n dp[i][j] = dp[i - 1][j - 1] + 1;\n } else {\n const up: number = dp[i - 1][j];\n const left: number = dp[i][j - 1];\n dp[i][j] = up > left ? up : left;\n }\n }\n }\n const rawBackwards: CCAP_SttQaWordDiffRawSegment_Interface[] = [];\n let i: number = n;\n let j: number = m;\n while (i > 0 || j > 0) {\n if (i > 0 && j > 0 && a[i - 1] === b[j - 1]) {\n rawBackwards.push({\n kind: CCAP_SttQaWordDiffSegmentKind_Type.equal,\n text: a[i - 1],\n });\n i -= 1;\n j -= 1;\n } else if (j > 0 && (i === 0 || dp[i][j - 1] >= dp[i - 1][j])) {\n rawBackwards.push({\n kind: CCAP_SttQaWordDiffSegmentKind_Type.added,\n text: b[j - 1],\n });\n j -= 1;\n } else if (i > 0) {\n rawBackwards.push({\n kind: CCAP_SttQaWordDiffSegmentKind_Type.removed,\n text: a[i - 1],\n });\n i -= 1;\n }\n }\n const rawForward: CCAP_SttQaWordDiffRawSegment_Interface[] = [];\n for (let k: number = rawBackwards.length - 1; k >= 0; k--) {\n rawForward.push(rawBackwards[k]);\n }\n return CCAP_SttQaTextDiff_Util.mergeAndAssignIds(rawForward);\n }\n}\n", "import {\n Component,\n OnInit,\n OnDestroy,\n input,\n InputSignal,\n Output,\n EventEmitter,\n inject,\n signal,\n computed,\n HostListener,\n} from '@angular/core';\nimport { FormsModule } from '@angular/forms';\n\nimport type { CCAP_TranscribeSuccess_Response } from '../../_models/interfaces/voice/transcribe/ccap-transcribe-success-response.interface';\nimport type { CCAP_Transcribe_Response } from '../../_models/interfaces/voice/transcribe/ccap-transcribe-response.interface';\nimport type { CCAP_VoiceNotesQaSettings_Response as CCAP_VoiceNotesQaSettingsResponse_Interface } from '../../_models/interfaces/voice/voice-notes/ccap-voice-notes-qa-settings-response.interface';\nimport type { CCAP_LlmProviderSelectOption_Interface } from '../../_models/interfaces/settings/ccap-llm-provider-select-option.interface';\nimport type {\n Voc_SttQaConfusionMapEntry_Response,\n Voc_SttQaInput_Response,\n} from '../../_models/server-index';\nimport { CCAP_GlobalError_ControlService } from '../../_services/control-services/ccap-global-error.control-service';\nimport { CCAP_SoundRecorder_ControlService } from '../../_services/control-services/ccap-sound-recorder.control-service';\nimport { VNP_SttQaUi_DataService } from '../../_modules/dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-stt-qa-ui.data-service';\nimport { VNP_InputUi_DataService } from '../../_modules/dev/_modules/poc/_modules/voice-notes-poc/_services/vnp-input-ui.data-service';\nimport { CCAP_SoundRecorderState_State } from '../../_enums/ccap-sound-recorder-state.enum';\nimport { CCAP_SoundRecorderChunkMeta_Interface } from '../../_services/control-services/ccap-sound-recorder-chunk-meta.interface';\nimport { CCAP_MediaRecording_Util } from '../../_collections/utils/media-recording/media-recording.util';\nimport { CCAP_SttQaTextDiff_Util } from '../../_collections/utils/model-testing/ccap-stt-qa-text-diff.util';\nimport { CCAP_SttQaWordDiffSegmentKind_Type } from '../../_enums/voice/ccap-stt-qa-word-diff-segment-kind.enum';\nimport { CCAP_SttQaWordDiffSegment_Interface } from '../../_models/interfaces/voice/transcribe/ccap-stt-qa-word-diff-segment.interface';\nimport { S_Modal_Component } from '../../_modules/shared/_components/s-modal/s-modal.component';\n\n/**\n * Beágyazható hangrögzítő gomb: rögzít → STT (és opcionális QA) → transcriptReady emit.\n * Inputokra rakható (pl. chat input felső border közepére).\n */\n@Component({\n selector: 'app-ccap-voice-record-button',\n standalone: true,\n imports: [FormsModule, S_Modal_Component],\n templateUrl: './ccap-voice-record-button.component.html',\n})\n/** CCAP_VoiceRecordButton_Component class. */\nexport class CCAP_VoiceRecordButton_Component implements OnInit, OnDestroy {\n\n private readonly globalError_CS: CCAP_GlobalError_ControlService =\n inject(CCAP_GlobalError_ControlService);\n private readonly soundRecorder_CS: CCAP_SoundRecorder_ControlService =\n inject(CCAP_SoundRecorder_ControlService);\n private readonly voiceSttQaUi_DS: VNP_SttQaUi_DataService =\n inject(VNP_SttQaUi_DataService);\n readonly voiceInputUi_DS: VNP_InputUi_DataService = inject(VNP_InputUi_DataService);\n\n /** STT QA bekapcsolva; ha nincs megadva, a mentett QA beállításból töltjük (GET qa-settings). */\n readonly qaEnabled: InputSignal<boolean | undefined> = input<boolean | undefined>(undefined);\n\n /** Compact layout: beállítás + infó gombok a rekordgomb fölé kerülnek (két oldal helyett). */\n readonly compactLayout: InputSignal<boolean> = input<boolean>(false);\n\n /** Sikeres transcribe után a végső szöveg (corrected vagy transcript). */\n @Output() transcriptReady = new EventEmitter<string>();\n\n /** Szegmens transcribe eredmény: szöveg + isFinal flag (auto-send akkumuláció a consumer-ben). */\n @Output() transcriptSegmentReady = new EventEmitter<{ text: string; isFinal: boolean }>();\n\n /** Felvétel / feldolgozás folyamatban (legalább egy transzkripció fut). */\n readonly busy_$ = signal<boolean>(false);\n /** Párhuzamos transzkripciók száma (mid-recording flush + final flush egyszerre futhat). */\n private pendingTranscriptionCount: number = 0;\n /**\n * Emit-sorrendesítő lánc: a transzkripciók párhuzamosan futnak (sebesség), de a\n * `transcriptReady` + `transcriptSegmentReady` emit-ek szigorúan chunkIndex-sorrendben\n * mennek ki. Enélkül ha egy rövidebb, `isFinal=true` szegmens előbb tér vissza a\n * hosszabb első szegmensnél, a consumer auto-send-je a teljes akkumulálás ELŐTT tüzelhet\n * (BUG-VO-001: 30s+ voice input elejének elvesztése).\n */\n private emitChain: Promise<void> = Promise.resolve();\n /** Hangerő 0..1 (volume gate indikátor). */\n readonly volume_$ = signal<number>(0);\n /** Betöltött QA beállítás qaEnabled (ha nem volt @Input). */\n private readonly isQaEnabledFromSettings_$ = signal<boolean>(false);\n /** Beállítások overlay nyitva. */\n readonly settingsOpen_$ = signal<boolean>(false);\n /** STT QA beállítások (betöltve); null ha még nincs. */\n readonly qaSettings_$ = signal<CCAP_VoiceNotesQaSettingsResponse_Interface | null>(null);\n /** Confusion map a beállításokban szerkesztve. */\n readonly confusionMapList_$ = signal<Voc_SttQaConfusionMapEntry_Response[]>([]);\n /** QA beállítások mentése folyamatban. */\n readonly qaSettingsSaving_$ = signal<boolean>(false);\n /** QA beállítások betöltése folyamatban. */\n readonly qaSettingsLoading_$ = signal<boolean>(false);\n /** STT QA toggle a beállításokban (szinkron isQaEnabledFromSettings-szel mentéskor). */\n settingsQaEnabled: boolean = false;\n /** STT QA provider és modell (beállítások form). */\n qaProviderName: string = '';\n qaModelName: string = '';\n /** LLM provider választó sorok (value + label), LLM settings-szel megegyező címkék. */\n readonly llmProviderSelectOptions_$ = signal<CCAP_LlmProviderSelectOption_Interface[]>([]);\n /** Kiválasztott QA provider modell listája. */\n readonly qaModelsForProvider_$ = signal<string[]>([]);\n /** list-llm-models hibaüzenet (üres = nincs); cloud provider / API hiba. */\n readonly qaModelsListFetchError_$ = signal<string>('');\n /** Utolsó STT QA javítás (eredeti → javított + opcionális magyarázat); null ha nem volt QA. */\n readonly lastQaTransformation_$ = signal<{\n original: string;\n corrected: string;\n explanation?: string;\n input?: Voc_SttQaInput_Response;\n } | null>(null);\n /** QA eredmény (infó) overlay nyitva. */\n readonly infoOpen_$ = signal<boolean>(false);\n /** Hangfelvétel nem elérhető (pl. nem secure context); null ha elérhető. User-facing message (title/aria). */\n readonly mediaUnavailable_$ = signal<string | null>(null);\n\n /** Globál alapértelmezett LLM provider (override jelzéshez). */\n readonly defaultLlmProvider_$ = signal<string>('');\n /** Globál alapértelmezett LLM modell (override jelzéshez). */\n readonly defaultLlmModel_$ = signal<string>('');\n\n /** Hangerő százalék (computed). */\n readonly volumePercent_$ = computed((): number => Math.min(100, this.volume_$() * 250));\n\n /** Modell választó: van lista a szerverről (vagy mentett modell merge). */\n readonly qaShowModelSelect_$ = computed((): boolean => this.qaModelsForProvider_$().length > 0);\n\n /**\n * Utolsó QA futás után a nyers STT és a corrected szöveg eltér — Info gomb vizuális kiemelése (még apró eltérés is).\n */\n readonly lastQaTextWasModified_$ = computed((): boolean => {\n const t: {\n original: string;\n corrected: string;\n explanation?: string;\n input?: Voc_SttQaInput_Response;\n } | null = this.lastQaTransformation_$();\n if (t === null) {\n return false;\n }\n return t.original !== t.corrected;\n });\n\n /**\n * Utolsó QA eredeti vs javított word-diff szegmensek — infó modal tetején highlighted összefoglaló.\n */\n readonly lastQaWordDiffSegments_$ = computed((): CCAP_SttQaWordDiffSegment_Interface[] => {\n const t: {\n original: string;\n corrected: string;\n explanation?: string;\n input?: Voc_SttQaInput_Response;\n } | null = this.lastQaTransformation_$();\n if (t === null || t.original === t.corrected) {\n return [];\n }\n return CCAP_SttQaTextDiff_Util.buildWordDiff(t.original, t.corrected);\n });\n\n /** Template: STT QA diff szegmens kind összehasonlítás. */\n readonly SttQaDiffKind: typeof CCAP_SttQaWordDiffSegmentKind_Type = CCAP_SttQaWordDiffSegmentKind_Type;\n\n /** Globál default provider megjelenített címke. */\n readonly defaultLlmProviderDisplayLabel_$ = computed((): string => {\n const opts: CCAP_LlmProviderSelectOption_Interface[] = this.llmProviderSelectOptions_$();\n const id: string = this.defaultLlmProvider_$().trim();\n if (!id.length) {\n return '';\n }\n const hit: CCAP_LlmProviderSelectOption_Interface | undefined = opts.find(\n (o: CCAP_LlmProviderSelectOption_Interface): boolean => o.value === id,\n );\n return hit?.label ?? id;\n });\n\n /** QA override provider címke (ha nincs az opciók között, nyers id). */\n readonly qaProviderDisplayLabel_$ = computed((): string => {\n const id: string = this.qaProviderName.trim();\n if (!id.length) {\n return '';\n }\n const opts: CCAP_LlmProviderSelectOption_Interface[] = this.llmProviderSelectOptions_$();\n const hit: CCAP_LlmProviderSelectOption_Interface | undefined = opts.find(\n (o: CCAP_LlmProviderSelectOption_Interface): boolean => o.value === id,\n );\n return hit?.label ?? id;\n });\n\n ngOnInit(): void {\n const availability = CCAP_MediaRecording_Util.getMediaRecordingAvailability();\n if (!availability.supported && availability.reason) {\n const reason: string = availability.reason;\n this.mediaUnavailable_$.set(CCAP_MediaRecording_Util.getMediaUnavailableMessage(reason));\n this.globalError_CS.reportErrorOnly({\n message: CCAP_MediaRecording_Util.getMediaUnavailableReportMessage(reason),\n source: 'ccap-voice-record-button',\n });\n }\n this.soundRecorder_CS.setOnChunk((blob: Blob, meta: CCAP_SoundRecorderChunkMeta_Interface): void => {\n void this.onChunk(blob, meta);\n });\n this.soundRecorder_CS.setOnVolume((value: number): void => {\n this.volume_$.set(value);\n });\n this.soundRecorder_CS.setOnError((err: unknown): void => {\n this.globalError_CS.showError(err, 'ccap-voice-record-button');\n });\n }\n\n ngOnDestroy(): void {\n this.soundRecorder_CS.stopListening();\n // Callback-eket NEM töröljük szándékosan:\n // 1. A stopListening aszinkron onstop handler-jének szüksége van az onChunkCb-re az utolsó chunk flush-jához.\n // 2. Ha navigáció történik és új voice-record-button jön létre, annak ngOnInit felülírja a callback-eket.\n // 3. setTimeout-os késleltetett törlés race condition-t okoz: ha az új component ngOnInit hamarabb fut\n // mint a setTimeout (mindig!), az új component callback-jeit is no-op-ra írja → volume indikátor\n // nem mozdul, chunk-ok elvesznek. A singleton service (providedIn: 'root') miatt ez 8 oldalon\n // minden navigáláskor reprodukálható bug.\n }\n\n /** Felvétel indítása vagy leállítása. */\n async toggleRecord(): Promise<void> {\n if (this.mediaUnavailable_$() !== null) {\n return;\n }\n const state: CCAP_SoundRecorderState_State = this.soundRecorder_CS.state_$();\n if (state === CCAP_SoundRecorderState_State.stopped) {\n if (this.qaEnabled() === undefined) {\n await this.loadQaEnabledOnce();\n }\n try {\n await this.soundRecorder_CS.startListening();\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ccap-voice-record-button');\n }\n } else {\n this.soundRecorder_CS.stopListening();\n }\n }\n\n /** QA beállítás egyszeri betöltése (qaEnabled tárolására). */\n private async loadQaEnabledOnce(): Promise<void> {\n this.isQaEnabledFromSettings_$.set(await this.voiceSttQaUi_DS.fetchQaEnabledFlag());\n }\n\n /**\n * „Hang után azonnali küldés” — Voice Input beállítások panel; globál UI + localStorage.\n */\n handleAutoSendAfterVoiceChange(value: boolean): void {\n this.voiceInputUi_DS.setAutoSendAfterVoice(value);\n }\n\n /** Beállítások overlay megnyitása/bezárása. */\n toggleSettings(): void {\n this.settingsOpen_$.update((v: boolean): boolean => !v);\n if (!this.settingsOpen_$()) {\n return;\n }\n void this.loadQaSettings();\n }\n\n /** QA eredmény (infó) overlay megnyitása/bezárása. */\n toggleInfo(): void {\n this.infoOpen_$.update((v: boolean): boolean => !v);\n }\n\n /** STT QA beállítások betöltése (beállítások megnyitásakor). */\n async loadQaSettings(): Promise<void> {\n this.qaSettingsLoading_$.set(true);\n try {\n const state = await this.voiceSttQaUi_DS.loadSttQaSettingsPanelState();\n const res = state.qa;\n this.qaSettings_$.set(res);\n this.confusionMapList_$.set([...(res.confusionMap ?? [])]);\n this.settingsQaEnabled = res.qaEnabled === true;\n this.isQaEnabledFromSettings_$.set(res.qaEnabled === true);\n this.qaProviderName = res.providerName ?? '';\n this.qaModelName = res.modelName ?? '';\n this.llmProviderSelectOptions_$.set(state.llmProviderSelectOptions);\n this.defaultLlmProvider_$.set(state.defaultLlmProvider);\n this.defaultLlmModel_$.set(state.defaultLlmModel);\n this.qaModelsForProvider_$.set(state.qaModelsForProvider);\n this.qaModelsListFetchError_$.set(state.qaModelsListFetchError);\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ccap-voice-record-button');\n this.qaSettings_$.set(null);\n this.confusionMapList_$.set([]);\n this.llmProviderSelectOptions_$.set([]);\n this.qaModelsListFetchError_$.set('');\n this.qaModelsForProvider_$.set([]);\n } finally {\n this.qaSettingsLoading_$.set(false);\n }\n }\n\n /** Kiválasztott QA provider modell listájának betöltése. */\n async loadQaModelsForProvider(providerId: string): Promise<void> {\n const out = await this.voiceSttQaUi_DS.fetchLlmModelsListForSttQa(providerId);\n this.qaModelsForProvider_$.set(out.models);\n this.qaModelsListFetchError_$.set(out.errorMessage);\n }\n\n /** QA provider megváltozott: modell lista újratöltése. */\n onQaProviderChange(): void {\n void this.loadQaModelsForProvider(this.qaProviderName);\n this.qaModelName = '';\n }\n\n /** Új confusion map sor hozzáadása. */\n addConfusionEntry(): void {\n this.confusionMapList_$.update(\n (list: Voc_SttQaConfusionMapEntry_Response[]): Voc_SttQaConfusionMapEntry_Response[] =>\n [...list, { from: '', to: '' }],\n );\n }\n\n /** Confusion map sor törlése. */\n removeConfusionEntry(index: number): void {\n this.confusionMapList_$.update(\n (list: Voc_SttQaConfusionMapEntry_Response[]): Voc_SttQaConfusionMapEntry_Response[] =>\n list.filter((_: Voc_SttQaConfusionMapEntry_Response, i: number): boolean => i !== index),\n );\n }\n\n /** Confusion map sor „from” mezőjének frissítése. */\n updateConfusionFrom(index: number, value: string): void {\n this.confusionMapList_$.update(\n (list: Voc_SttQaConfusionMapEntry_Response[]): Voc_SttQaConfusionMapEntry_Response[] => {\n const next: Voc_SttQaConfusionMapEntry_Response[] = [...list];\n if (next[index]) {\n next[index] = { from: value, to: next[index].to };\n }\n return next;\n },\n );\n }\n\n /** Confusion map sor „to” mezőjének frissítése. */\n updateConfusionTo(index: number, value: string): void {\n this.confusionMapList_$.update(\n (list: Voc_SttQaConfusionMapEntry_Response[]): Voc_SttQaConfusionMapEntry_Response[] => {\n const next: Voc_SttQaConfusionMapEntry_Response[] = [...list];\n if (next[index]) {\n next[index] = { from: next[index].from, to: value };\n }\n return next;\n },\n );\n }\n\n /** QA beállítások mentése a szerverre. */\n async saveQaSettings(): Promise<void> {\n this.qaSettingsSaving_$.set(true);\n try {\n const list: Voc_SttQaConfusionMapEntry_Response[] =\n this.voiceSttQaUi_DS.normalizeConfusionMapEntries(this.confusionMapList_$());\n\n await this.voiceSttQaUi_DS.saveVoiceNotesQaSettings({\n confusionMap: list,\n providerName: this.qaProviderName.trim() || undefined,\n modelName: this.qaModelName.trim() || undefined,\n qaEnabled: this.settingsQaEnabled,\n });\n this.confusionMapList_$.set([...list]);\n this.isQaEnabledFromSettings_$.set(this.settingsQaEnabled);\n const current = this.qaSettings_$();\n if (current !== null) {\n this.qaSettings_$.set({\n systemPrompt: current.systemPrompt,\n userPromptTemplate: current.userPromptTemplate,\n confusionMap: list,\n providerName: this.qaProviderName.trim() || '',\n modelName: this.qaModelName.trim() || '',\n qaEnabled: this.settingsQaEnabled,\n });\n }\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ccap-voice-record-button');\n } finally {\n this.qaSettingsSaving_$.set(false);\n }\n }\n\n /** Escape: beállítások és QA eredmény overlay bezárása. */\n @HostListener('document:keydown.escape')\n onEscape(): void {\n if (this.settingsOpen_$()) {\n this.settingsOpen_$.set(false);\n }\n if (this.infoOpen_$()) {\n this.infoOpen_$.set(false);\n }\n }\n\n private readonly effectiveQaEnabled_$ = computed((): boolean => {\n if (this.qaEnabled() !== undefined) {\n return this.qaEnabled()!;\n }\n return this.isQaEnabledFromSettings_$();\n });\n\n /**\n * Chunk megérkezett: transcribe párhuzamosan, emit szigorúan chunkIndex-sorrendben.\n *\n * Sorrend-garancia: minden `onChunk` hívás captolja a korábbi `emitChain`-t, és a saját\n * új Promise-ét kiköti rá; a transzkripció azonnal indul (párhuzam megtartva), de az emit\n * csak a `prevEmitQueue` lejárta után történik. Ezzel az `isFinal=true` szegmens emit-je\n * mindig a korábbi (non-final) szegmensek emit-je UTÁN megy ki, akkor is, ha hamarabb\n * végez a transzkripcióval.\n */\n private async onChunk(\n blob: Blob,\n meta: CCAP_SoundRecorderChunkMeta_Interface,\n ): Promise<void> {\n this.pendingTranscriptionCount++;\n this.busy_$.set(true);\n // Emit-slot foglalás: captoljuk a korábbi láncot, és saját Promise-szal hosszabbítjuk.\n // A `releaseEmitSlot` a finally blokkban kell minden ágon lefusson, különben a következő\n // szegmens emit-je örökre blokkolódik.\n const prevEmitQueue: Promise<void> = this.emitChain;\n let releaseEmitSlot: () => void = () => {};\n this.emitChain = new Promise<void>((resolve: () => void) => {\n releaseEmitSlot = resolve;\n });\n try {\n const res: CCAP_Transcribe_Response = await this.voiceSttQaUi_DS.transcribeVoiceChunk({\n blob: blob,\n mimeType: meta.mimeType,\n filename: meta.filename,\n qaEnabled: this.effectiveQaEnabled_$(),\n noteContext: '',\n skipClassification: true,\n });\n // Várjunk a korábbi chunk-ok emit-jeinek befejeződésére, mielőtt mi emitelünk.\n // Transzkripció már megtörtént — csak az emit van sorrendesítve.\n await prevEmitQueue;\n if (res.ok === false) {\n // non_speech: a szegmensben nem volt felismerhető beszéd — nem hiba, de jelezzük a consumer-nek\n // hogy a szegmens feldolgozódott (isFinal propagálás a soron következő szegmensekhez).\n this.transcriptSegmentReady.emit({ text: '', isFinal: meta.isFinal });\n return;\n }\n const success: CCAP_TranscribeSuccess_Response = res;\n if (success.qaFailed === true) {\n const qfm: string = success.qaFailureMessage?.trim() ?? '';\n if (qfm.length > 0) {\n this.globalError_CS.showError(new Error(qfm), 'voice-stt-qa');\n }\n }\n const text: string =\n (success.correctedTranscript != null && success.correctedTranscript.trim().length > 0)\n ? success.correctedTranscript.trim()\n : (success.transcript ?? '').trim();\n // Csak usedQa=true eseten frissitjuk — parhuzamos chunk-oknal a QA nelkuli chunk ne torolje\n // az elozo chunk QA eredmenyet. \"Utolso QA eredmeny\" = utolso QA-t hasznalo chunk eredmenye.\n if (\n success.usedQa === true\n && (success.transcript ?? '').trim().length > 0\n && (success.correctedTranscript ?? '').trim().length > 0\n ) {\n this.lastQaTransformation_$.set({\n original: (success.transcript ?? '').trim(),\n corrected: (success.correctedTranscript ?? '').trim(),\n explanation: (success.qaExplanation ?? '').trim() || undefined,\n input: success.qaInput,\n });\n }\n if (text) {\n this.transcriptReady.emit(text);\n this.transcriptSegmentReady.emit({ text: text, isFinal: meta.isFinal });\n }\n } catch (err: unknown) {\n this.globalError_CS.showError(err, 'ccap-voice-record-button');\n } finally {\n // Emit-slot mindig fel kell oldani — különben a következő chunk emit-je blokkolódik.\n releaseEmitSlot();\n this.pendingTranscriptionCount--;\n if (this.pendingTranscriptionCount <= 0) {\n this.pendingTranscriptionCount = 0;\n this.busy_$.set(false);\n }\n }\n }\n\n /** Felvétel állapot (gomb szöveghez). */\n readonly recordStateLabel_$ = computed(\n (): string =>\n this.soundRecorder_CS.state_$() === CCAP_SoundRecorderState_State.stopped\n ? 'Felvétel'\n : 'Stop',\n );\n\n readonly isRecordActive_$ = computed((): boolean => {\n const s: CCAP_SoundRecorderState_State = this.soundRecorder_CS.state_$();\n return (\n s === CCAP_SoundRecorderState_State.standby\n || s === CCAP_SoundRecorderState_State.running\n );\n });\n\n readonly isRecording_$ = computed(\n (): boolean => this.soundRecorder_CS.state_$() === CCAP_SoundRecorderState_State.running,\n );\n\n /** Felvétel gomb aria-label: felvétel közben „Stop\"; feldolgozás alatt a gomb új felvételt indít (REQ-VO-002). */\n readonly recordButtonAriaLabel_$ = computed((): string => {\n const unavail: string | null = this.mediaUnavailable_$();\n if (unavail) return unavail;\n if (this.isRecordActive_$()) return 'Stop';\n return this.busy_$() ? 'Új felvétel (feldolgozás folyamatban)' : 'Felvétel';\n });\n\n /** Felvétel gomb title (tooltip): ugyanaz mint aria-label; feldolgozás alatt explicit utalás, hogy új felvétel indítható. */\n readonly recordButtonTitle_$ = computed((): string => {\n const unavail: string | null = this.mediaUnavailable_$();\n if (unavail) return unavail;\n if (this.isRecordActive_$()) return 'Stop';\n return this.busy_$() ? 'Új felvétel — előző feldolgozás folyamatban' : 'Felvétel';\n });\n}\n", "@if (compactLayout()) {\n <!-- Compact layout: beállítás + infó gombok a rekordgomb FÖLÉ -->\n <div class=\"flex flex-col items-center gap-1\">\n <div class=\"flex items-center gap-2\">\n <button type=\"button\"\n (click)=\"toggleSettings(); $event.stopPropagation()\"\n class=\"w-5 h-5 rounded-full flex items-center justify-center\n bg-neutral-900 border-2 border-neonDefault text-neonCyan\n hover:border-neonCyan hover:shadow-neon-glow-cyan transition-all duration-200\n focus:outline-none focus:ring-2 focus:ring-neonCyan focus:ring-offset-2 focus:ring-offset-neutral-900\"\n aria-label=\"Beállítások\"\n title=\"Beállítások\">\n <svg class=\"w-2.5 h-2.5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n </button>\n <button type=\"button\"\n (click)=\"toggleInfo(); $event.stopPropagation()\"\n class=\"w-5 h-5 rounded-full flex items-center justify-center\n bg-neutral-900 border-2 transition-all duration-200\n focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [class.border-neonDefault]=\"!lastQaTextWasModified_$()\"\n [class.text-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.hover:border-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.hover:shadow-neon-glow-cyan]=\"!lastQaTextWasModified_$()\"\n [class.focus:ring-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.border-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.text-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.shadow-neon-glow-orange]=\"lastQaTextWasModified_$()\"\n [class.hover:border-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.hover:shadow-neon-glow-orange]=\"lastQaTextWasModified_$()\"\n [class.focus:ring-neonAmber]=\"lastQaTextWasModified_$()\"\n [attr.aria-label]=\"lastQaTextWasModified_$()\n ? 'Utolsó QA eredmény — a szöveg módosult'\n : 'Utolsó QA eredmény'\"\n [attr.title]=\"lastQaTextWasModified_$()\n ? 'Utolsó QA eredmény — a szöveg módosult (részletek)'\n : 'Utolsó QA eredmény'\">\n <svg class=\"w-2.5 h-2.5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n </button>\n </div>\n <button type=\"button\"\n (click)=\"toggleRecord()\"\n [disabled]=\"mediaUnavailable_$() !== null\"\n class=\"flex items-center justify-center min-w-[44px] min-h-[44px] w-10 h-10 rounded-full shrink-0\n bg-neutral-900 border-2 text-white transition-all duration-200 disabled:opacity-50\n border-neonDefault hover:border-neonCyan hover:shadow-neon-glow-cyan\n focus:outline-none focus:ring-2 focus:ring-neonCyan focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [class.border-neonCyan]=\"isRecordActive_$() || busy_$()\"\n [class.shadow-neon-glow-cyan]=\"isRecordActive_$() || busy_$()\"\n [class.animate-pulse]=\"isRecording_$()\"\n [attr.aria-label]=\"recordButtonAriaLabel_$()\"\n [attr.title]=\"recordButtonTitle_$()\">\n @if (busy_$() && !isRecordActive_$()) {\n <span class=\"inline-block w-5 h-5 shrink-0 animate-spin rounded-full border-2 border-neonCyan/40 border-t-neonCyan\"\n aria-hidden=\"true\"></span>\n } @else {\n <div class=\"flex flex-col items-center gap-0.5 shrink-0\">\n @if (isRecordActive_$()) {\n <div class=\"relative w-2 h-6 rounded-sm bg-neutral-800 overflow-hidden\"\n aria-hidden=\"true\">\n <div class=\"absolute inset-x-0 bottom-0 bg-neonCyan transition-[height] duration-75\"\n [style.height.%]=\"volumePercent_$()\"></div>\n <div class=\"absolute inset-x-0 h-0.5 bg-neonAmber rounded-sm z-10\"\n style=\"bottom: 5%;\"></div>\n </div>\n }\n <svg class=\"w-5 h-5 shrink-0 text-neonCyan\"\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 2a3 3 0 0 1 3 3v7a3 3 0 0 1-6 0V5a3 3 0 0 1 3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\" />\n </svg>\n </div>\n }\n </button>\n @if (mediaUnavailable_$(); as reason) {\n <!-- REQ-UI-VHTTPS-001: látható warning-blokk, ha nincs secure context / nem elérhető a mikrofon. -->\n <p class=\"text-[11px] text-amber-300 leading-tight max-w-[180px] text-center\"\n [attr.aria-live]=\"'polite'\">\n <span aria-hidden=\"true\" class=\"mr-1\">⚠</span>{{ reason }}\n </p>\n }\n </div>\n} @else {\n <!-- Default layout: beállítás balra, rekordgomb középen, infó jobbra (absolute) -->\n <div class=\"relative inline-flex\">\n <button type=\"button\"\n (click)=\"toggleRecord()\"\n [disabled]=\"mediaUnavailable_$() !== null\"\n class=\"flex items-center justify-center min-w-[44px] min-h-[44px] w-10 h-10 rounded-full shrink-0\n bg-neutral-900 border-2 text-white transition-all duration-200 disabled:opacity-50\n border-neonDefault hover:border-neonCyan hover:shadow-neon-glow-cyan\n focus:outline-none focus:ring-2 focus:ring-neonCyan focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [class.border-neonCyan]=\"isRecordActive_$() || busy_$()\"\n [class.shadow-neon-glow-cyan]=\"isRecordActive_$() || busy_$()\"\n [class.animate-pulse]=\"isRecording_$()\"\n [attr.aria-label]=\"recordButtonAriaLabel_$()\"\n [attr.title]=\"recordButtonTitle_$()\">\n @if (busy_$() && !isRecordActive_$()) {\n <span class=\"inline-block w-5 h-5 shrink-0 animate-spin rounded-full border-2 border-neonCyan/40 border-t-neonCyan\"\n aria-hidden=\"true\"></span>\n } @else {\n <div class=\"flex flex-col items-center gap-0.5 shrink-0\">\n @if (isRecordActive_$()) {\n <div class=\"relative w-2 h-6 rounded-sm bg-neutral-800 overflow-hidden\"\n aria-hidden=\"true\">\n <div class=\"absolute inset-x-0 bottom-0 bg-neonCyan transition-[height] duration-75\"\n [style.height.%]=\"volumePercent_$()\"></div>\n <div class=\"absolute inset-x-0 h-0.5 bg-neonAmber rounded-sm z-10\"\n style=\"bottom: 5%;\"></div>\n </div>\n }\n <svg class=\"w-5 h-5 shrink-0 text-neonCyan\"\n viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 2a3 3 0 0 1 3 3v7a3 3 0 0 1-6 0V5a3 3 0 0 1 3-3Z\" />\n <path d=\"M19 10v2a7 7 0 0 1-14 0v-2\" />\n <line x1=\"12\" y1=\"19\" x2=\"12\" y2=\"22\" />\n </svg>\n </div>\n }\n </button>\n <button type=\"button\"\n (click)=\"toggleSettings(); $event.stopPropagation()\"\n class=\"absolute right-full mr-4 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center\n bg-neutral-900 border-2 border-neonDefault text-neonCyan\n hover:border-neonCyan hover:shadow-neon-glow-cyan transition-all duration-200\n focus:outline-none focus:ring-2 focus:ring-neonCyan focus:ring-offset-2 focus:ring-offset-neutral-900\"\n aria-label=\"Beállítások\"\n title=\"Beállítások\">\n <svg class=\"w-2.5 h-2.5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <path d=\"M12 15a3 3 0 1 0 0-6 3 3 0 0 0 0 6Z\" />\n <path d=\"M19.4 15a1.65 1.65 0 0 0 .33 1.82l.06.06a2 2 0 0 1 0 2.83 2 2 0 0 1-2.83 0l-.06-.06a1.65 1.65 0 0 0-1.82-.33 1.65 1.65 0 0 0-1 1.51V21a2 2 0 0 1-2 2 2 2 0 0 1-2-2v-.09A1.65 1.65 0 0 0 9 19.4a1.65 1.65 0 0 0-1.82.33l-.06.06a2 2 0 0 1-2.83 0 2 2 0 0 1 0-2.83l.06-.06a1.65 1.65 0 0 0 .33-1.82 1.65 1.65 0 0 0-1.51-1H3a2 2 0 0 1-2-2 2 2 0 0 1 2-2h.09A1.65 1.65 0 0 0 4.6 9a1.65 1.65 0 0 0-.33-1.82l-.06-.06a2 2 0 0 1 0-2.83 2 2 0 0 1 2.83 0l.06.06a1.65 1.65 0 0 0 1.82.33H9a1.65 1.65 0 0 0 1-1.51V3a2 2 0 0 1 2-2 2 2 0 0 1 2 2v.09a1.65 1.65 0 0 0 1 1.51 1.65 1.65 0 0 0 1.82-.33l.06-.06a2 2 0 0 1 2.83 0 2 2 0 0 1 0 2.83l-.06.06a1.65 1.65 0 0 0-.33 1.82V9a1.65 1.65 0 0 0 1.51 1H21a2 2 0 0 1 2 2 2 2 0 0 1-2 2h-.09a1.65 1.65 0 0 0-1.51 1z\" />\n </svg>\n </button>\n <button type=\"button\"\n (click)=\"toggleInfo(); $event.stopPropagation()\"\n class=\"absolute left-full ml-4 top-1/2 -translate-y-1/2 w-5 h-5 rounded-full flex items-center justify-center\n bg-neutral-900 border-2 transition-all duration-200\n focus:outline-none focus:ring-2 focus:ring-offset-2 focus:ring-offset-neutral-900\"\n [class.border-neonDefault]=\"!lastQaTextWasModified_$()\"\n [class.text-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.hover:border-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.hover:shadow-neon-glow-cyan]=\"!lastQaTextWasModified_$()\"\n [class.focus:ring-neonCyan]=\"!lastQaTextWasModified_$()\"\n [class.border-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.text-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.shadow-neon-glow-orange]=\"lastQaTextWasModified_$()\"\n [class.hover:border-neonAmber]=\"lastQaTextWasModified_$()\"\n [class.hover:shadow-neon-glow-orange]=\"lastQaTextWasModified_$()\"\n [class.focus:ring-neonAmber]=\"lastQaTextWasModified_$()\"\n [attr.aria-label]=\"lastQaTextWasModified_$()\n ? 'Utolsó QA eredmény — a szöveg módosult'\n : 'Utolsó QA eredmény'\"\n [attr.title]=\"lastQaTextWasModified_$()\n ? 'Utolsó QA eredmény — a szöveg módosult (részletek)'\n : 'Utolsó QA eredmény'\">\n <svg class=\"w-2.5 h-2.5 shrink-0\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\"\n stroke-linecap=\"round\" stroke-linejoin=\"round\" aria-hidden=\"true\">\n <circle cx=\"12\" cy=\"12\" r=\"10\" />\n <path d=\"M12 16v-4\" />\n <path d=\"M12 8h.01\" />\n </svg>\n </button>\n </div>\n @if (mediaUnavailable_$(); as reason) {\n <!-- REQ-UI-VHTTPS-001: látható warning-blokk, ha nincs secure context / nem elérhető a mikrofon. -->\n <p class=\"text-[11px] text-amber-300 leading-tight max-w-[240px] mt-1\"\n [attr.aria-live]=\"'polite'\">\n <span aria-hidden=\"true\" class=\"mr-1\">⚠</span>{{ reason }}\n </p>\n }\n}\n\n<app-s-modal [isOpen]=\"settingsOpen_$()\"\n [title]=\"'Voice Input beállítások'\"\n [maxWidth]=\"'lg'\"\n [zIndex]=\"'40'\"\n [bodyFlexColumn]=\"true\"\n (closed)=\"settingsOpen_$.set(false)\">\n <!-- Teljes body egy scroll region: mobil-on a hosszú promptok nem lógnak ki a max-h-[90vh] panel alól. -->\n <div class=\"flex flex-col flex-1 min-h-0 w-full overflow-y-auto overflow-x-hidden overscroll-y-contain\">\n <div class=\"flex flex-col gap-2 shrink-0\">\n <label class=\"flex items-center gap-2 cursor-pointer select-none\">\n <input type=\"checkbox\" [(ngModel)]=\"settingsQaEnabled\" name=\"settingsQaEnabled\" />\n <span class=\"text-sm text-neutral-300\">STT QA</span>\n </label>\n <label class=\"flex items-center gap-2 cursor-pointer select-none\">\n <input type=\"checkbox\"\n name=\"autoSendAfterVoice\"\n [ngModel]=\"voiceInputUi_DS.autoSendAfterVoice_$()\"\n (ngModelChange)=\"handleAutoSendAfterVoiceChange($event)\" />\n <span class=\"text-sm text-neutral-300\">Send immediately after voice (Mimik-style)</span>\n </label>\n </div>\n\n @if (qaSettings_$(); as qaSettings) {\n <div class=\"mt-3 pt-3 border-t border-neonDefault flex flex-col gap-3 shrink-0\">\n <div class=\"shrink-0\">\n <p class=\"text-xs font-medium text-neutral-400 mb-1\">System prompt (LLM-nek)</p>\n <p class=\"text-xs text-neutral-300 whitespace-pre-wrap break-words\">{{ qaSettings.systemPrompt }}</p>\n </div>\n <div class=\"shrink-0\">\n <p class=\"text-xs font-medium text-neutral-400 mb-1\">\n User prompt sablon (ide fűződik be a felvétel adata)\n </p>\n <p class=\"text-xs text-neutral-300 whitespace-pre-wrap break-words font-mono\">\n {{ qaSettings.userPromptTemplate }}\n </p>\n <p class=\"text-[10px] text-neonAmber mt-1\">\n Placeholderek: {{ '{{TRANSCRIPT}}' }} = nyers szöveg, {{ '{{NOTE_CONTEXT}}' }} = jegyzet,\n {{ '{{CONFUSION_MAP}}' }} = az alábbi elírás lista JSON-ban.\n </p>\n </div>\n <div class=\"shrink-0\">\n <p class=\"text-xs font-medium text-neutral-400 mb-1\">STT QA provider és modell</p>\n @if (qaProviderName.trim()) {\n <p class=\"text-[10px] text-neutral-500 mb-1\">\n Override: {{ qaProviderDisplayLabel_$() }} / {{ qaModelName || '—' }}\n (globál: {{ defaultLlmProviderDisplayLabel_$() || '—' }} / {{ defaultLlmModel_$() || '—' }}).\n </p>\n } @else {\n <p class=\"text-[10px] text-neutral-500 mb-1\">\n Nincs beállítva – használt: {{ defaultLlmProviderDisplayLabel_$() || '—' }} /\n {{ defaultLlmModel_$() || '—' }} (globál).\n </p>\n }\n <div class=\"flex flex-wrap gap-2 items-center\">\n <select [(ngModel)]=\"qaProviderName\"\n (ngModelChange)=\"onQaProviderChange()\"\n name=\"qaProviderName\"\n class=\"px-2 py-1 text-xs bg-neutral-800 border border-neonDefault rounded text-neutral-200 min-w-[120px]\">\n <option value=\"\">— default —</option>\n @for (opt of llmProviderSelectOptions_$(); track opt.value) {\n <option [value]=\"opt.value\">{{ opt.label }}</option>\n }\n </select>\n @if (qaShowModelSelect_$()) {\n <select [(ngModel)]=\"qaModelName\"\n name=\"qaModelName\"\n class=\"px-2 py-1 text-xs bg-neutral-800 border border-neonDefault rounded text-neutral-200 min-w-[140px]\">\n <option value=\"\">— default —</option>\n @for (m of qaModelsForProvider_$(); track m) {\n <option [value]=\"m\">{{ m }}</option>\n }\n </select>\n } @else {\n <input type=\"text\"\n [(ngModel)]=\"qaModelName\"\n name=\"qaModelNameText\"\n placeholder=\"Modell id (lista nem elérhető ehhez a providerhez)\"\n class=\"px-2 py-1 text-xs bg-neutral-800 border border-neonDefault rounded text-neutral-200 min-w-[140px] font-mono\" />\n }\n </div>\n @if (qaModelsListFetchError_$().trim()) {\n <p class=\"text-[10px] text-amber-300/90 mt-1\">{{ qaModelsListFetchError_$() }}</p>\n }\n </div>\n <div class=\"flex flex-col shrink-0\">\n <p class=\"text-xs font-medium text-neutral-400 mb-1 shrink-0\">\n Tipikus elírások / tipók (confusion map) – ezekre javít a QA\n </p>\n <div class=\"space-y-1.5 rounded border border-neonDefault/50 bg-neutral-800/20 p-2\">\n @for (entry of confusionMapList_$(); track $index; let i = $index) {\n <div class=\"flex items-center gap-2\">\n <input type=\"text\"\n [value]=\"entry.from\"\n (input)=\"updateConfusionFrom(i, $any($event.target).value)\"\n placeholder=\"Elírás / félrehallás\"\n class=\"flex-1 min-w-0 px-2 py-1 text-xs bg-neutral-800 border border-neonDefault rounded\n text-neutral-200 placeholder-neutral-500\" />\n <span class=\"text-neutral-500 shrink-0\">→</span>\n <input type=\"text\"\n [value]=\"entry.to\"\n (input)=\"updateConfusionTo(i, $any($event.target).value)\"\n placeholder=\"Helyes forma\"\n class=\"flex-1 min-w-0 px-2 py-1 text-xs bg-neutral-800 border border-neonDefault rounded\n text-neutral-200 placeholder-neutral-500\" />\n <button type=\"button\"\n (click)=\"removeConfusionEntry(i)\"\n class=\"shrink-0 p-1 text-neutral-500 hover:text-neonRed transition-colors\"\n aria-label=\"Sor törlése\"\n title=\"Sor törlése\">\n <span class=\"sr-only\">Törlés</span>\n <svg class=\"w-3.5 h-3.5\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\">\n <path d=\"M18 6L6 18M6 6l12 12\" />\n </svg>\n </button>\n </div>\n }\n </div>\n <div class=\"flex flex-wrap gap-2 items-center shrink-0 mt-2\">\n <button type=\"button\"\n (click)=\"addConfusionEntry()\"\n class=\"px-2 py-1 text-xs border border-neonDefault rounded text-neutral-400\n hover:border-neonCyan hover:text-neonCyan transition-colors\">\n + Sor hozzáadása\n </button>\n <button type=\"button\"\n (click)=\"saveQaSettings()\"\n [disabled]=\"qaSettingsSaving_$()\"\n class=\"px-2 py-1 text-xs border border-neonCyan rounded text-neonCyan\n hover:shadow-neon-glow-cyan disabled:opacity-50 transition-colors\">\n {{ qaSettingsSaving_$() ? 'Mentés…' : 'QA beállítások mentése' }}\n </button>\n </div>\n </div>\n </div>\n } @else if (qaSettingsLoading_$()) {\n <p class=\"mt-3 pt-3 border-t border-neonDefault text-xs text-neutral-400\">QA beállítások betöltése…</p>\n } @else {\n <p class=\"mt-3 pt-3 border-t border-neonDefault text-xs text-neutral-500\">\n A QA beállítások betöltése sikertelen.\n </p>\n <button type=\"button\"\n (click)=\"loadQaSettings()\"\n class=\"mt-1.5 px-2 py-1 text-xs border border-neonDefault rounded text-neutral-400\n hover:border-neonCyan hover:text-neonCyan transition-colors\">\n Újra betöltés\n </button>\n }\n </div>\n <div modal-footer class=\"shrink-0 px-4 py-3 border-t border-neonDefault\">\n <button type=\"button\"\n class=\"w-full px-3 py-1.5 text-sm border border-neonCyan rounded text-neutral-300\n hover:shadow-neon-glow-cyan transition-colors\"\n (click)=\"settingsOpen_$.set(false)\">\n Bezárás\n </button>\n </div>\n</app-s-modal>\n\n<app-s-modal [isOpen]=\"infoOpen_$()\"\n [title]=\"'Utolsó QA eredmény'\"\n [maxWidth]=\"'md'\"\n [zIndex]=\"'40'\"\n (closed)=\"infoOpen_$.set(false)\">\n @if (lastQaTransformation_$(); as qa) {\n <div class=\"space-y-2 text-sm\">\n @if (lastQaWordDiffSegments_$().length > 0) {\n <div class=\"rounded-md border border-neonAmber/45 bg-neutral-950/95 p-2.5 mb-1\">\n <p class=\"text-[10px] font-semibold uppercase tracking-wide text-neonAmber/90 mb-1.5\">\n Változások (kiemelve)\n </p>\n <p class=\"text-xs leading-relaxed whitespace-pre-wrap break-words\">\n @for (seg of lastQaWordDiffSegments_$(); track seg.id) {\n @if (seg.kind === SttQaDiffKind.equal) {\n <span class=\"text-neutral-300\">{{ seg.text }}</span>\n } @else if (seg.kind === SttQaDiffKind.removed) {\n <span class=\"mx-0.5 inline rounded px-0.5 text-red-300/95 line-through decoration-red-400/85\n bg-red-950/50 border border-red-900/45\">{{ seg.text }}</span>\n } @else {\n <span class=\"mx-0.5 inline rounded px-0.5 text-neonAmber bg-amber-950/55 border border-neonAmber/50\n shadow-[0_0_10px_rgb(251_191_36/0.28)]\">{{ seg.text }}</span>\n }\n }\n </p>\n <p class=\"text-[10px] text-neutral-500 mt-1.5 leading-snug\">\n Áthúzva: nyers STT; kiemelve: javított szöveg. Alább a teljes két változat.\n </p>\n </div>\n }\n <p class=\"font-medium text-neonAmber\">Volt módosítás: igen.</p>\n <p class=\"text-neutral-400 text-xs\">Eredeti (nyers STT):</p>\n <p class=\"text-neutral-200 break-words\">{{ qa.original }}</p>\n <p class=\"text-neutral-400 text-xs mt-2\">Javított:</p>\n <p class=\"text-neutral-200 break-words\">{{ qa.corrected }}</p>\n @if (qa.explanation) {\n <p class=\"text-neutral-400 text-xs mt-2\">Magyarázat:</p>\n <p class=\"text-neutral-300 break-words\">{{ qa.explanation }}</p>\n }\n </div>\n } @else {\n <p class=\"text-xs text-neutral-500\">\n Még nem volt STT QA javítás.\n </p>\n }\n <div modal-footer class=\"shrink-0 px-4 py-3 border-t border-neonDefault\">\n <button type=\"button\"\n class=\"w-full px-3 py-1.5 text-sm border border-neonCyan rounded text-neutral-300\n hover:shadow-neon-glow-cyan transition-colors\"\n (click)=\"infoOpen_$.set(false)\">\n Bezárás\n </button>\n </div>\n</app-s-modal>\n"],
5
- "mappings": "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",
6
- "names": ["CCAP_VOICE_INPUT_AUTO_SEND_AFTER_VOICE_KEY", "VNP_InputUi_DataService", "autoSendAfterVoice_$", "signal", "readAutoSendAfterVoiceFromStorage", "setAutoSendAfterVoice", "value", "set", "Shr_LocalStoragePersistence_Util", "writeString", "String", "readString", "factory", "\u0275fac", "providedIn", "CCAP_SttQaWordDiffSegmentKind_Type", "CCAP_SttQaTextDiff_Util", "tokenize", "input", "trimmed", "length", "parts", "split", "out", "i", "p", "push", "mergeAndAssignIds", "raw", "merged", "cur", "last", "undefined", "kind", "text", "withIds", "k", "m", "id", "buildWordDiff", "oldText", "newText", "a", "b", "n", "dp", "row", "j", "up", "left", "rawBackwards", "CCAP_SttQaWordDiffSegmentKind_Type", "equal", "added", "removed", "rawForward", "\u0275\u0275element", "\u0275\u0275elementStart", "\u0275\u0275elementEnd", "\u0275\u0275advance", "\u0275\u0275styleProp", "ctx_r1", "volumePercent_$", "\u0275\u0275template", "CCAP_VoiceRecordButton_Component_Conditional_0_Conditional_13_Conditional_1_Template", "\u0275\u0275conditional", "isRecordActive_$", "\u0275\u0275text", "\u0275\u0275textInterpolate1", "ctx", "\u0275\u0275listener", "$event", "i0", "\u0275\u0275restoreView", "_r1", "\u0275\u0275nextContext", "toggleSettings", "\u0275\u0275resetView", "stopPropagation", "toggleInfo", "toggleRecord", "CCAP_VoiceRecordButton_Component_Conditional_0_Conditional_12_Template", "CCAP_VoiceRecordButton_Component_Conditional_0_Conditional_13_Template", "CCAP_VoiceRecordButton_Component_Conditional_0_Conditional_14_Template", "\u0275\u0275classProp", "lastQaTextWasModified_$", "busy_$", "isRecording_$", "\u0275\u0275property", "mediaUnavailable_$", "tmp_21_0", "CCAP_VoiceRecordButton_Component_Conditional_1_Conditional_3_Conditional_1_Template", "_r3", "CCAP_VoiceRecordButton_Component_Conditional_1_Conditional_2_Template", "CCAP_VoiceRecordButton_Component_Conditional_1_Conditional_3_Template", "CCAP_VoiceRecordButton_Component_Conditional_1_Conditional_13_Template", "\u0275\u0275textInterpolate4", "qaProviderDisplayLabel_$", "qaModelName", "defaultLlmProviderDisplayLabel_$", "defaultLlmModel_$", "\u0275\u0275textInterpolate2", "opt_r5", "value", "\u0275\u0275textInterpolate", "label", "m_r7", "\u0275\u0275twoWayListener", "_r6", "\u0275\u0275twoWayBindingSet", "\u0275\u0275repeaterCreate", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_24_For_4_Template", "\u0275\u0275repeaterTrackByIdentity", "\u0275\u0275twoWayProperty", "\u0275\u0275repeater", "qaModelsForProvider_$", "_r8", "qaModelsListFetchError_$", "\u0275$index_195_r10", "_r9", "$index", "updateConfusionFrom", "target", "updateConfusionTo", "removeConfusionEntry", "entry_r11", "from", "to", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_16_Template", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_17_Template", "_r4", "qaProviderName", "onQaProviderChange", "CCAP_VoiceRecordButton_Component_Conditional_13_For_23_Template", "_forTrack0", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_24_Template", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_25_Template", "CCAP_VoiceRecordButton_Component_Conditional_13_Conditional_26_Template", "CCAP_VoiceRecordButton_Component_Conditional_13_For_32_Template", "\u0275\u0275repeaterTrackByIndex", "addConfusionEntry", "saveQaSettings", "qaSettings_r12", "systemPrompt", "userPromptTemplate", "\u0275\u0275textInterpolate3", "trim", "llmProviderSelectOptions_$", "qaShowModelSelect_$", "confusionMapList_$", "qaSettingsSaving_$", "_r13", "loadQaSettings", "seg_r14", "text", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_1_For_5_Conditional_0_Template", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_1_For_5_Conditional_1_Template", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_1_For_5_Conditional_2_Template", "kind", "SttQaDiffKind", "equal", "removed", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_1_For_5_Template", "_forTrack1", "lastQaWordDiffSegments_$", "qa_r15", "explanation", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_1_Template", "CCAP_VoiceRecordButton_Component_Conditional_20_Conditional_12_Template", "length", "original", "corrected", "CCAP_VoiceRecordButton_Component", "globalError_CS", "inject", "CCAP_GlobalError_ControlService", "soundRecorder_CS", "CCAP_SoundRecorder_ControlService", "voiceSttQaUi_DS", "VNP_SttQaUi_DataService", "voiceInputUi_DS", "VNP_InputUi_DataService", "qaEnabled", "input", "undefined", "compactLayout", "transcriptReady", "EventEmitter", "transcriptSegmentReady", "signal", "pendingTranscriptionCount", "emitChain", "Promise", "resolve", "volume_$", "isQaEnabledFromSettings_$", "settingsOpen_$", "qaSettings_$", "qaSettingsLoading_$", "settingsQaEnabled", "lastQaTransformation_$", "infoOpen_$", "defaultLlmProvider_$", "computed", "Math", "min", "t", "CCAP_SttQaTextDiff_Util", "buildWordDiff", "CCAP_SttQaWordDiffSegmentKind_Type", "opts", "id", "find", "o", "ngOnInit", "availability", "CCAP_MediaRecording_Util", "getMediaRecordingAvailability", "supported", "reason", "set", "getMediaUnavailableMessage", "reportErrorOnly", "message", "getMediaUnavailableReportMessage", "source", "setOnChunk", "blob", "meta", "onChunk", "setOnVolume", "setOnError", "err", "showError", "ngOnDestroy", "stopListening", "__async", "state_$", "CCAP_SoundRecorderState_State", "stopped", "loadQaEnabledOnce", "startListening", "fetchQaEnabledFlag", "handleAutoSendAfterVoiceChange", "setAutoSendAfterVoice", "update", "v", "state", "loadSttQaSettingsPanelState", "res", "qa", "confusionMap", "providerName", "modelName", "llmProviderSelectOptions", "defaultLlmProvider", "defaultLlmModel", "qaModelsForProvider", "qaModelsListFetchError", "loadQaModelsForProvider", "providerId", "out", "fetchLlmModelsListForSttQa", "models", "errorMessage", "list", "index", "filter", "_", "i", "next", "normalizeConfusionMapEntries", "saveVoiceNotesQaSettings", "current", "onEscape", "effectiveQaEnabled_$", "prevEmitQueue", "releaseEmitSlot", "transcribeVoiceChunk", "mimeType", "filename", "noteContext", "skipClassification", "ok", "emit", "isFinal", "success", "qaFailed", "qfm", "qaFailureMessage", "Error", "correctedTranscript", "transcript", "usedQa", "qaExplanation", "qaInput", "recordStateLabel_$", "s", "standby", "running", "recordButtonAriaLabel_$", "unavail", "recordButtonTitle_$", "selectors", "hostBindings", "rf", "\u0275\u0275resolveDocument", "CCAP_VoiceRecordButton_Component_Conditional_0_Template", "CCAP_VoiceRecordButton_Component_Conditional_1_Template", "CCAP_VoiceRecordButton_Component_Conditional_13_Template", "CCAP_VoiceRecordButton_Component_Conditional_14_Template", "CCAP_VoiceRecordButton_Component_Conditional_15_Template", "CCAP_VoiceRecordButton_Component_Conditional_20_Template", "CCAP_VoiceRecordButton_Component_Conditional_21_Template", "autoSendAfterVoice_$", "tmp_8_0", "tmp_13_0", "FormsModule", "NgSelectOption", "\u0275NgSelectMultipleOption", "DefaultValueAccessor", "CheckboxControlValueAccessor", "SelectControlValueAccessor", "NgControlStatus", "NgModel", "S_Modal_Component", "encapsulation"]
7
- }