@recombine-ai/platform 0.4.0 → 0.5.0-test.0

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 (441) hide show
  1. package/README.md +1 -0
  2. package/build/agent/agent-analytics.d.ts +14 -0
  3. package/build/agent/agent-analytics.d.ts.map +1 -0
  4. package/build/agent/agent-analytics.js +29 -0
  5. package/build/agent/index.d.ts +1 -0
  6. package/build/agent/index.d.ts.map +1 -1
  7. package/build/agent/text-agent.d.ts +4 -3
  8. package/build/agent/text-agent.d.ts.map +1 -1
  9. package/build/agent/text-agent.js +8 -1
  10. package/build/agent/voice-agent.d.ts +4 -3
  11. package/build/agent/voice-agent.d.ts.map +1 -1
  12. package/build/agent/voice-agent.js +8 -1
  13. package/build/analytics/analytics.d.ts +49 -0
  14. package/build/analytics/analytics.d.ts.map +1 -0
  15. package/build/analytics/analytics.js +223 -0
  16. package/build/analytics/index.d.ts +7 -0
  17. package/build/analytics/index.d.ts.map +1 -0
  18. package/build/analytics/index.js +3 -0
  19. package/build/analytics/postgres-analytics-query.d.ts +117 -0
  20. package/build/analytics/postgres-analytics-query.d.ts.map +1 -0
  21. package/build/analytics/postgres-analytics-query.js +504 -0
  22. package/build/analytics/postgres-analytics.d.ts +33 -0
  23. package/build/analytics/postgres-analytics.d.ts.map +1 -0
  24. package/build/analytics/postgres-analytics.js +310 -0
  25. package/build/bosun/std-mocks/platform.d.ts.map +1 -1
  26. package/build/bosun/std-mocks/platform.js +2 -0
  27. package/build/bosun/test-agent.d.ts.map +1 -1
  28. package/build/bosun/test-agent.js +2 -1
  29. package/build/bosun-app/frontend/client/_app/immutable/assets/0.BhaOIA8N.css +1 -0
  30. package/build/bosun-app/frontend/client/_app/immutable/assets/0.BhaOIA8N.css.br +0 -0
  31. package/build/bosun-app/frontend/client/_app/immutable/assets/0.BhaOIA8N.css.gz +0 -0
  32. package/build/bosun-app/frontend/client/_app/immutable/chunks/-ZTJLlC3.js +2 -0
  33. package/build/bosun-app/frontend/client/_app/immutable/chunks/-ZTJLlC3.js.br +0 -0
  34. package/build/bosun-app/frontend/client/_app/immutable/chunks/-ZTJLlC3.js.gz +0 -0
  35. package/build/bosun-app/frontend/client/_app/immutable/chunks/0Q6TVg1G.js +1 -0
  36. package/build/bosun-app/frontend/client/_app/immutable/chunks/0Q6TVg1G.js.br +0 -0
  37. package/build/bosun-app/frontend/client/_app/immutable/chunks/0Q6TVg1G.js.gz +0 -0
  38. package/build/bosun-app/frontend/client/_app/immutable/chunks/{DEz15oJb.js → 4OgEIyh1.js} +1 -1
  39. package/build/bosun-app/frontend/client/_app/immutable/chunks/4OgEIyh1.js.br +0 -0
  40. package/build/bosun-app/frontend/client/_app/immutable/chunks/4OgEIyh1.js.gz +0 -0
  41. package/build/bosun-app/frontend/client/_app/immutable/chunks/8bHWYDyT.js +1 -0
  42. package/build/bosun-app/frontend/client/_app/immutable/chunks/8bHWYDyT.js.br +0 -0
  43. package/build/bosun-app/frontend/client/_app/immutable/chunks/8bHWYDyT.js.gz +0 -0
  44. package/build/bosun-app/frontend/client/_app/immutable/chunks/{C0rPkxmP.js → 9pOOTteE.js} +1 -1
  45. package/build/bosun-app/frontend/client/_app/immutable/chunks/9pOOTteE.js.br +0 -0
  46. package/build/bosun-app/frontend/client/_app/immutable/chunks/9pOOTteE.js.gz +0 -0
  47. package/build/bosun-app/frontend/client/_app/immutable/chunks/AlWqjAqK.js +1 -0
  48. package/build/bosun-app/frontend/client/_app/immutable/chunks/AlWqjAqK.js.br +0 -0
  49. package/build/bosun-app/frontend/client/_app/immutable/chunks/AlWqjAqK.js.gz +0 -0
  50. package/build/bosun-app/frontend/client/_app/immutable/chunks/{B9pMb6OP.js → B9e8MCJ2.js} +1 -1
  51. package/build/bosun-app/frontend/client/_app/immutable/chunks/B9e8MCJ2.js.br +0 -0
  52. package/build/bosun-app/frontend/client/_app/immutable/chunks/B9e8MCJ2.js.gz +0 -0
  53. package/build/bosun-app/frontend/client/_app/immutable/chunks/{BEdAvgYp.js → BDIIq0ko.js} +1 -1
  54. package/build/bosun-app/frontend/client/_app/immutable/chunks/BDIIq0ko.js.br +0 -0
  55. package/build/bosun-app/frontend/client/_app/immutable/chunks/BDIIq0ko.js.gz +0 -0
  56. package/build/bosun-app/frontend/client/_app/immutable/chunks/BFiP5U7M.js +3 -0
  57. package/build/bosun-app/frontend/client/_app/immutable/chunks/BFiP5U7M.js.br +0 -0
  58. package/build/bosun-app/frontend/client/_app/immutable/chunks/BFiP5U7M.js.gz +0 -0
  59. package/build/bosun-app/frontend/client/_app/immutable/chunks/{DnMQeiTY.js → BHU9AXbn.js} +1 -1
  60. package/build/bosun-app/frontend/client/_app/immutable/chunks/BHU9AXbn.js.br +0 -0
  61. package/build/bosun-app/frontend/client/_app/immutable/chunks/BHU9AXbn.js.gz +0 -0
  62. package/build/bosun-app/frontend/client/_app/immutable/chunks/{Bp8N7Z1t.js → BHwgmBN2.js} +1 -1
  63. package/build/bosun-app/frontend/client/_app/immutable/chunks/BHwgmBN2.js.br +0 -0
  64. package/build/bosun-app/frontend/client/_app/immutable/chunks/BHwgmBN2.js.gz +0 -0
  65. package/build/bosun-app/frontend/client/_app/immutable/chunks/BOlSQbHE.js +2 -0
  66. package/build/bosun-app/frontend/client/_app/immutable/chunks/BOlSQbHE.js.br +0 -0
  67. package/build/bosun-app/frontend/client/_app/immutable/chunks/BOlSQbHE.js.gz +0 -0
  68. package/build/bosun-app/frontend/client/_app/immutable/chunks/BXO2WwQx.js +1 -0
  69. package/build/bosun-app/frontend/client/_app/immutable/chunks/BXO2WwQx.js.br +0 -0
  70. package/build/bosun-app/frontend/client/_app/immutable/chunks/BXO2WwQx.js.gz +0 -0
  71. package/build/bosun-app/frontend/client/_app/immutable/chunks/{BQIf5msi.js → BZeEhZ9x.js} +1 -1
  72. package/build/bosun-app/frontend/client/_app/immutable/chunks/BZeEhZ9x.js.br +0 -0
  73. package/build/bosun-app/frontend/client/_app/immutable/chunks/BZeEhZ9x.js.gz +0 -0
  74. package/build/bosun-app/frontend/client/_app/immutable/chunks/BbB1C_YH.js +1 -0
  75. package/build/bosun-app/frontend/client/_app/immutable/chunks/BbB1C_YH.js.br +0 -0
  76. package/build/bosun-app/frontend/client/_app/immutable/chunks/BbB1C_YH.js.gz +0 -0
  77. package/build/bosun-app/frontend/client/_app/immutable/chunks/{DJnDF3d9.js → BtJ1grIE.js} +1 -1
  78. package/build/bosun-app/frontend/client/_app/immutable/chunks/BtJ1grIE.js.br +0 -0
  79. package/build/bosun-app/frontend/client/_app/immutable/chunks/BtJ1grIE.js.gz +0 -0
  80. package/build/bosun-app/frontend/client/_app/immutable/chunks/C5z36vOP.js +8 -0
  81. package/build/bosun-app/frontend/client/_app/immutable/chunks/C5z36vOP.js.br +0 -0
  82. package/build/bosun-app/frontend/client/_app/immutable/chunks/C5z36vOP.js.gz +0 -0
  83. package/build/bosun-app/frontend/client/_app/immutable/chunks/CHNsNZYZ.js +1 -0
  84. package/build/bosun-app/frontend/client/_app/immutable/chunks/CHNsNZYZ.js.br +0 -0
  85. package/build/bosun-app/frontend/client/_app/immutable/chunks/CHNsNZYZ.js.gz +0 -0
  86. package/build/bosun-app/frontend/client/_app/immutable/chunks/{BEtU89l8.js → CINamuM5.js} +1 -1
  87. package/build/bosun-app/frontend/client/_app/immutable/chunks/CINamuM5.js.br +1 -0
  88. package/build/bosun-app/frontend/client/_app/immutable/chunks/CINamuM5.js.gz +0 -0
  89. package/build/bosun-app/frontend/client/_app/immutable/chunks/CR6hF_YT.js +1 -0
  90. package/build/bosun-app/frontend/client/_app/immutable/chunks/CR6hF_YT.js.br +0 -0
  91. package/build/bosun-app/frontend/client/_app/immutable/chunks/CR6hF_YT.js.gz +0 -0
  92. package/build/bosun-app/frontend/client/_app/immutable/chunks/CbXT0Qet.js +1 -0
  93. package/build/bosun-app/frontend/client/_app/immutable/chunks/CbXT0Qet.js.br +0 -0
  94. package/build/bosun-app/frontend/client/_app/immutable/chunks/CbXT0Qet.js.gz +0 -0
  95. package/build/bosun-app/frontend/client/_app/immutable/chunks/{sKHuRf4Z.js → CkCJ1-zx.js} +1 -1
  96. package/build/bosun-app/frontend/client/_app/immutable/chunks/CkCJ1-zx.js.br +0 -0
  97. package/build/bosun-app/frontend/client/_app/immutable/chunks/CkCJ1-zx.js.gz +0 -0
  98. package/build/bosun-app/frontend/client/_app/immutable/chunks/Cm25Ihk6.js +1 -0
  99. package/build/bosun-app/frontend/client/_app/immutable/chunks/Cm25Ihk6.js.br +0 -0
  100. package/build/bosun-app/frontend/client/_app/immutable/chunks/Cm25Ihk6.js.gz +0 -0
  101. package/build/bosun-app/frontend/client/_app/immutable/chunks/CmJrlnQL.js +64 -0
  102. package/build/bosun-app/frontend/client/_app/immutable/chunks/CmJrlnQL.js.br +0 -0
  103. package/build/bosun-app/frontend/client/_app/immutable/chunks/CmJrlnQL.js.gz +0 -0
  104. package/build/bosun-app/frontend/client/_app/immutable/chunks/CofRL0YY.js +2 -0
  105. package/build/bosun-app/frontend/client/_app/immutable/chunks/CofRL0YY.js.br +0 -0
  106. package/build/bosun-app/frontend/client/_app/immutable/chunks/CofRL0YY.js.gz +0 -0
  107. package/build/bosun-app/frontend/client/_app/immutable/chunks/{joiJcRPz.js → Csai_DUZ.js} +1 -1
  108. package/build/bosun-app/frontend/client/_app/immutable/chunks/Csai_DUZ.js.br +6 -0
  109. package/build/bosun-app/frontend/client/_app/immutable/chunks/Csai_DUZ.js.gz +0 -0
  110. package/build/bosun-app/frontend/client/_app/immutable/chunks/{CCYriF4C.js → D24F_tet.js} +1 -1
  111. package/build/bosun-app/frontend/client/_app/immutable/chunks/D24F_tet.js.br +0 -0
  112. package/build/bosun-app/frontend/client/_app/immutable/chunks/D24F_tet.js.gz +0 -0
  113. package/build/bosun-app/frontend/client/_app/immutable/chunks/{DNvczHUR.js → D35JKLYq.js} +1 -1
  114. package/build/bosun-app/frontend/client/_app/immutable/chunks/D35JKLYq.js.br +0 -0
  115. package/build/bosun-app/frontend/client/_app/immutable/chunks/D35JKLYq.js.gz +0 -0
  116. package/build/bosun-app/frontend/client/_app/immutable/chunks/{BcbX6huO.js → D6r2pB3T.js} +1 -1
  117. package/build/bosun-app/frontend/client/_app/immutable/chunks/D6r2pB3T.js.br +0 -0
  118. package/build/bosun-app/frontend/client/_app/immutable/chunks/D6r2pB3T.js.gz +0 -0
  119. package/build/bosun-app/frontend/client/_app/immutable/chunks/{ClLUwVGq.js → DJFKRYxi.js} +1 -1
  120. package/build/bosun-app/frontend/client/_app/immutable/chunks/DJFKRYxi.js.br +0 -0
  121. package/build/bosun-app/frontend/client/_app/immutable/chunks/DJFKRYxi.js.gz +0 -0
  122. package/build/bosun-app/frontend/client/_app/immutable/chunks/{BW6P0Ecp.js → DOVgTfHj.js} +1 -1
  123. package/build/bosun-app/frontend/client/_app/immutable/chunks/DOVgTfHj.js.br +0 -0
  124. package/build/bosun-app/frontend/client/_app/immutable/chunks/DOVgTfHj.js.gz +0 -0
  125. package/build/bosun-app/frontend/client/_app/immutable/chunks/DPfKTQVx.js +1 -0
  126. package/build/bosun-app/frontend/client/_app/immutable/chunks/DPfKTQVx.js.br +0 -0
  127. package/build/bosun-app/frontend/client/_app/immutable/chunks/DPfKTQVx.js.gz +0 -0
  128. package/build/bosun-app/frontend/client/_app/immutable/chunks/{ouMvMh56.js → DSFEfk-V.js} +1 -1
  129. package/build/bosun-app/frontend/client/_app/immutable/chunks/DSFEfk-V.js.br +0 -0
  130. package/build/bosun-app/frontend/client/_app/immutable/chunks/DSFEfk-V.js.gz +0 -0
  131. package/build/bosun-app/frontend/client/_app/immutable/chunks/DbY589nb.js +1 -0
  132. package/build/bosun-app/frontend/client/_app/immutable/chunks/DbY589nb.js.br +2 -0
  133. package/build/bosun-app/frontend/client/_app/immutable/chunks/DbY589nb.js.gz +0 -0
  134. package/build/bosun-app/frontend/client/_app/immutable/chunks/DfEgi1lN.js +1 -0
  135. package/build/bosun-app/frontend/client/_app/immutable/chunks/DfEgi1lN.js.br +0 -0
  136. package/build/bosun-app/frontend/client/_app/immutable/chunks/DfEgi1lN.js.gz +0 -0
  137. package/build/bosun-app/frontend/client/_app/immutable/chunks/{BJ9KKLWf.js → DsRUoWL6.js} +1 -1
  138. package/build/bosun-app/frontend/client/_app/immutable/chunks/DsRUoWL6.js.br +0 -0
  139. package/build/bosun-app/frontend/client/_app/immutable/chunks/DsRUoWL6.js.gz +0 -0
  140. package/build/bosun-app/frontend/client/_app/immutable/chunks/{DjujL8K1.js → FLx39vZ1.js} +1 -1
  141. package/build/bosun-app/frontend/client/_app/immutable/chunks/FLx39vZ1.js.br +0 -0
  142. package/build/bosun-app/frontend/client/_app/immutable/chunks/FLx39vZ1.js.gz +0 -0
  143. package/build/bosun-app/frontend/client/_app/immutable/chunks/{BBk8_Xpk.js → NwoUwoIi.js} +2 -2
  144. package/build/bosun-app/frontend/client/_app/immutable/chunks/NwoUwoIi.js.br +0 -0
  145. package/build/bosun-app/frontend/client/_app/immutable/chunks/NwoUwoIi.js.gz +0 -0
  146. package/build/bosun-app/frontend/client/_app/immutable/chunks/{C9yBjdYI.js → VLxbY_3V.js} +1 -1
  147. package/build/bosun-app/frontend/client/_app/immutable/chunks/VLxbY_3V.js.br +0 -0
  148. package/build/bosun-app/frontend/client/_app/immutable/chunks/VLxbY_3V.js.gz +0 -0
  149. package/build/bosun-app/frontend/client/_app/immutable/chunks/uEzaTD9T.js +1 -0
  150. package/build/bosun-app/frontend/client/_app/immutable/chunks/uEzaTD9T.js.br +2 -0
  151. package/build/bosun-app/frontend/client/_app/immutable/chunks/uEzaTD9T.js.gz +0 -0
  152. package/build/bosun-app/frontend/client/_app/immutable/entry/app.fITODAfp.js +2 -0
  153. package/build/bosun-app/frontend/client/_app/immutable/entry/app.fITODAfp.js.br +0 -0
  154. package/build/bosun-app/frontend/client/_app/immutable/entry/app.fITODAfp.js.gz +0 -0
  155. package/build/bosun-app/frontend/client/_app/immutable/entry/start.CuqUO5EQ.js +1 -0
  156. package/build/bosun-app/frontend/client/_app/immutable/entry/start.CuqUO5EQ.js.br +0 -0
  157. package/build/bosun-app/frontend/client/_app/immutable/entry/start.CuqUO5EQ.js.gz +0 -0
  158. package/build/bosun-app/frontend/client/_app/immutable/nodes/{0.BrSNCmq3.js → 0.sWxZKx1V.js} +1 -1
  159. package/build/bosun-app/frontend/client/_app/immutable/nodes/0.sWxZKx1V.js.br +0 -0
  160. package/build/bosun-app/frontend/client/_app/immutable/nodes/0.sWxZKx1V.js.gz +0 -0
  161. package/build/bosun-app/frontend/client/_app/immutable/nodes/1.PQXY4edq.js +1 -0
  162. package/build/bosun-app/frontend/client/_app/immutable/nodes/1.PQXY4edq.js.br +0 -0
  163. package/build/bosun-app/frontend/client/_app/immutable/nodes/1.PQXY4edq.js.gz +0 -0
  164. package/build/bosun-app/frontend/client/_app/immutable/nodes/{10.BI2Z0Is-.js → 10.BP2gctlm.js} +7 -7
  165. package/build/bosun-app/frontend/client/_app/immutable/nodes/10.BP2gctlm.js.br +0 -0
  166. package/build/bosun-app/frontend/client/_app/immutable/nodes/10.BP2gctlm.js.gz +0 -0
  167. package/build/bosun-app/frontend/client/_app/immutable/nodes/{15.drIyAxl2.js → 15.D4h0JT65.js} +1 -1
  168. package/build/bosun-app/frontend/client/_app/immutable/nodes/15.D4h0JT65.js.br +0 -0
  169. package/build/bosun-app/frontend/client/_app/immutable/nodes/15.D4h0JT65.js.gz +0 -0
  170. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.D5wsHo5R.js +3 -0
  171. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.D5wsHo5R.js.br +0 -0
  172. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.D5wsHo5R.js.gz +0 -0
  173. package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CZp-IBH8.js +11 -0
  174. package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CZp-IBH8.js.br +0 -0
  175. package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CZp-IBH8.js.gz +0 -0
  176. package/build/bosun-app/frontend/client/_app/immutable/nodes/{2.BYBSEm-Y.js → 2.DaZm8LbH.js} +3 -3
  177. package/build/bosun-app/frontend/client/_app/immutable/nodes/2.DaZm8LbH.js.br +0 -0
  178. package/build/bosun-app/frontend/client/_app/immutable/nodes/2.DaZm8LbH.js.gz +0 -0
  179. package/build/bosun-app/frontend/client/_app/immutable/nodes/3.Bk3buFqf.js +1 -0
  180. package/build/bosun-app/frontend/client/_app/immutable/nodes/3.Bk3buFqf.js.br +0 -0
  181. package/build/bosun-app/frontend/client/_app/immutable/nodes/3.Bk3buFqf.js.gz +0 -0
  182. package/build/bosun-app/frontend/client/_app/immutable/nodes/{4.Dlg932RB.js → 4.BWY-PEkr.js} +1 -1
  183. package/build/bosun-app/frontend/client/_app/immutable/nodes/4.BWY-PEkr.js.br +0 -0
  184. package/build/bosun-app/frontend/client/_app/immutable/nodes/4.BWY-PEkr.js.gz +0 -0
  185. package/build/bosun-app/frontend/client/_app/immutable/nodes/{5.BWt6bVnz.js → 5.Cl70jzrZ.js} +1 -1
  186. package/build/bosun-app/frontend/client/_app/immutable/nodes/5.Cl70jzrZ.js.br +0 -0
  187. package/build/bosun-app/frontend/client/_app/immutable/nodes/5.Cl70jzrZ.js.gz +0 -0
  188. package/build/bosun-app/frontend/client/_app/immutable/nodes/{6.DL1bd1xV.js → 6.Cfkc99si.js} +1 -1
  189. package/build/bosun-app/frontend/client/_app/immutable/nodes/6.Cfkc99si.js.br +0 -0
  190. package/build/bosun-app/frontend/client/_app/immutable/nodes/6.Cfkc99si.js.gz +0 -0
  191. package/build/bosun-app/frontend/client/_app/immutable/nodes/{8.BJXaarvf.js → 8.CmB3ZvKy.js} +1 -1
  192. package/build/bosun-app/frontend/client/_app/immutable/nodes/8.CmB3ZvKy.js.br +0 -0
  193. package/build/bosun-app/frontend/client/_app/immutable/nodes/8.CmB3ZvKy.js.gz +0 -0
  194. package/build/bosun-app/frontend/client/_app/immutable/nodes/{9.DZnil4g8.js → 9.8UAsXj0n.js} +1 -1
  195. package/build/bosun-app/frontend/client/_app/immutable/nodes/9.8UAsXj0n.js.br +0 -0
  196. package/build/bosun-app/frontend/client/_app/immutable/nodes/9.8UAsXj0n.js.gz +0 -0
  197. package/build/bosun-app/frontend/client/_app/version.json +1 -1
  198. package/build/bosun-app/frontend/client/_app/version.json.br +0 -0
  199. package/build/bosun-app/frontend/client/_app/version.json.gz +0 -0
  200. package/build/bosun-app/frontend/handler.js +4 -4
  201. package/build/bosun-app/frontend/index.js +4 -4
  202. package/build/bosun-app/frontend/server/chunks/chunks/{internal.js-Bu4L_cnE.js → internal.js-BYUssiWE.js} +2 -2
  203. package/build/bosun-app/frontend/server/chunks/chunks/{internal.js-Bu4L_cnE.js.map → internal.js-BYUssiWE.js.map} +1 -1
  204. package/build/bosun-app/frontend/server/chunks/chunks/{schemas.js-W-DP3mDr.js → schemas.js-b9Mui_5N.js} +187 -2
  205. package/build/bosun-app/frontend/server/chunks/chunks/schemas.js-b9Mui_5N.js.map +1 -0
  206. package/build/bosun-app/frontend/server/chunks/chunks/{source-selection.js-Cc6RX6-m.js → source-selection.js-BpCr9ar-.js} +47 -4
  207. package/build/bosun-app/frontend/server/chunks/chunks/source-selection.js-BpCr9ar-.js.map +1 -0
  208. package/build/bosun-app/frontend/server/chunks/chunks/{sources.server.js-B6fpC51P.js → sources.server.js-DIj2VjCx.js} +2 -2
  209. package/build/bosun-app/frontend/server/chunks/chunks/{sources.server.js-B6fpC51P.js.map → sources.server.js-DIj2VjCx.js.map} +1 -1
  210. package/build/bosun-app/frontend/server/chunks/entries/endpoints/traces/api/latency/_conversationId_/{_server.ts.js-hHR2eFvt.js → _server.ts.js-mL82mAit.js} +2 -2
  211. package/build/bosun-app/frontend/server/chunks/entries/endpoints/traces/api/latency/_conversationId_/{_server.ts.js-hHR2eFvt.js.map → _server.ts.js-mL82mAit.js.map} +1 -1
  212. package/build/bosun-app/frontend/server/chunks/entries/endpoints/traces/api/proxy/_...path_/{_server.ts.js-CHrOiduq.js → _server.ts.js-DDDiZFhL.js} +17 -10
  213. package/build/bosun-app/frontend/server/chunks/entries/endpoints/traces/api/proxy/_...path_/_server.ts.js-DDDiZFhL.js.map +1 -0
  214. package/build/bosun-app/frontend/server/chunks/entries/endpoints/traces/api/sources/{_server.ts.js-C2FIU8Kr.js → _server.ts.js-D_UoR_Ph.js} +3 -3
  215. package/build/bosun-app/frontend/server/chunks/entries/endpoints/traces/api/sources/{_server.ts.js-C2FIU8Kr.js.map → _server.ts.js-D_UoR_Ph.js.map} +1 -1
  216. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/latency/{_page.svelte.js-tdUdTo4m.js → _page.svelte.js-DXMXSrkC.js} +5 -5
  217. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/latency/_page.svelte.js-DXMXSrkC.js.map +1 -0
  218. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/traces/{_page.svelte.js-Ca79DBzJ.js → _page.svelte.js-CZkbHRGl.js} +28 -9
  219. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/traces/_page.svelte.js-CZkbHRGl.js.map +1 -0
  220. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/{_layout.svelte.js-Dvn3tfM7.js → _layout.svelte.js-B4Yws-GS.js} +328 -35
  221. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_layout.svelte.js-B4Yws-GS.js.map +1 -0
  222. package/build/bosun-app/frontend/server/chunks/{handler-Caqo1h-B.js → handler-B-UxYyko.js} +3 -3
  223. package/build/bosun-app/frontend/server/chunks/{handler-Caqo1h-B.js.map → handler-B-UxYyko.js.map} +1 -1
  224. package/build/bosun-app/frontend/server/chunks/{index.js-B6JFIJIn.js → index.js-CleJzVFo.js} +2 -2
  225. package/build/bosun-app/frontend/server/chunks/{index.js-B6JFIJIn.js.map → index.js-CleJzVFo.js.map} +1 -1
  226. package/build/bosun-app/frontend/server/chunks/{manifest.js-BQmpznei.js → manifest.js-C8NquSUu.js} +18 -18
  227. package/build/bosun-app/frontend/server/chunks/{manifest.js-BQmpznei.js.map → manifest.js-C8NquSUu.js.map} +1 -1
  228. package/build/bosun-app/frontend/server/chunks/nodes/0.js-BUVJh5Uv.js +9 -0
  229. package/build/bosun-app/frontend/server/chunks/nodes/0.js-BUVJh5Uv.js.map +1 -0
  230. package/build/bosun-app/frontend/server/chunks/nodes/1.js-BKMg62KW.js +9 -0
  231. package/build/bosun-app/frontend/server/chunks/nodes/{1.js-BujyKhW9.js.map → 1.js-BKMg62KW.js.map} +1 -1
  232. package/build/bosun-app/frontend/server/chunks/nodes/10.js-Bz0enUzA.js +9 -0
  233. package/build/bosun-app/frontend/server/chunks/nodes/10.js-Bz0enUzA.js.map +1 -0
  234. package/build/bosun-app/frontend/server/chunks/nodes/{15.js-cNd06B9T.js → 15.js-nE6nl5S8.js} +2 -2
  235. package/build/bosun-app/frontend/server/chunks/nodes/{15.js-cNd06B9T.js.map → 15.js-nE6nl5S8.js.map} +1 -1
  236. package/build/bosun-app/frontend/server/chunks/nodes/17.js-CplX6Ruz.js +9 -0
  237. package/build/bosun-app/frontend/server/chunks/nodes/17.js-CplX6Ruz.js.map +1 -0
  238. package/build/bosun-app/frontend/server/chunks/nodes/18.js-cGVVSoEn.js +9 -0
  239. package/build/bosun-app/frontend/server/chunks/nodes/18.js-cGVVSoEn.js.map +1 -0
  240. package/build/bosun-app/frontend/server/chunks/nodes/2.js-CliMdUrH.js +9 -0
  241. package/build/bosun-app/frontend/server/chunks/nodes/2.js-CliMdUrH.js.map +1 -0
  242. package/build/bosun-app/frontend/server/chunks/nodes/3.js-BQpmmrUv.js +9 -0
  243. package/build/bosun-app/frontend/server/chunks/nodes/3.js-BQpmmrUv.js.map +1 -0
  244. package/build/bosun-app/frontend/server/chunks/nodes/4.js-BgSyMW3D.js +9 -0
  245. package/build/bosun-app/frontend/server/chunks/nodes/4.js-BgSyMW3D.js.map +1 -0
  246. package/build/bosun-app/frontend/server/chunks/nodes/5.js-CqRWSoO5.js +9 -0
  247. package/build/bosun-app/frontend/server/chunks/nodes/{5.js-C3vjOcSE.js.map → 5.js-CqRWSoO5.js.map} +1 -1
  248. package/build/bosun-app/frontend/server/chunks/nodes/6.js-CrEQ411L.js +9 -0
  249. package/build/bosun-app/frontend/server/chunks/nodes/6.js-CrEQ411L.js.map +1 -0
  250. package/build/bosun-app/frontend/server/chunks/nodes/8.js-CiOj2-c5.js +9 -0
  251. package/build/bosun-app/frontend/server/chunks/nodes/8.js-CiOj2-c5.js.map +1 -0
  252. package/build/bosun-app/frontend/server/chunks/nodes/9.js-BMwqRSfy.js +9 -0
  253. package/build/bosun-app/frontend/server/chunks/nodes/9.js-BMwqRSfy.js.map +1 -0
  254. package/build/build/build.d.ts.map +1 -1
  255. package/build/build/build.js +3 -1
  256. package/build/build/common.d.ts +1 -0
  257. package/build/build/common.d.ts.map +1 -1
  258. package/build/build/common.js +12 -0
  259. package/build/call-control/types.d.ts +1 -1
  260. package/build/call-control/types.d.ts.map +1 -1
  261. package/build/core/make-text-platform.d.ts +3 -1
  262. package/build/core/make-text-platform.d.ts.map +1 -1
  263. package/build/core/make-text-platform.js +3 -1
  264. package/build/core/make-voice-platform.d.ts +3 -1
  265. package/build/core/make-voice-platform.d.ts.map +1 -1
  266. package/build/core/make-voice-platform.js +3 -1
  267. package/build/core/platform.d.ts +2 -0
  268. package/build/core/platform.d.ts.map +1 -1
  269. package/build/voice-agent-api/call-end.d.ts +19 -0
  270. package/build/voice-agent-api/call-end.d.ts.map +1 -0
  271. package/build/voice-agent-api/call-end.js +58 -0
  272. package/build/voice-agent-api/voice-http.d.ts +3 -1
  273. package/build/voice-agent-api/voice-http.d.ts.map +1 -1
  274. package/build/voice-agent-api/voice-http.js +27 -7
  275. package/package.json +5 -1
  276. package/build/bosun-app/frontend/client/_app/immutable/assets/0.B5fEz2jr.css +0 -1
  277. package/build/bosun-app/frontend/client/_app/immutable/assets/0.B5fEz2jr.css.br +0 -0
  278. package/build/bosun-app/frontend/client/_app/immutable/assets/0.B5fEz2jr.css.gz +0 -0
  279. package/build/bosun-app/frontend/client/_app/immutable/chunks/9mOMnnWN.js +0 -1
  280. package/build/bosun-app/frontend/client/_app/immutable/chunks/9mOMnnWN.js.br +0 -0
  281. package/build/bosun-app/frontend/client/_app/immutable/chunks/9mOMnnWN.js.gz +0 -0
  282. package/build/bosun-app/frontend/client/_app/immutable/chunks/B0nqNj93.js +0 -2
  283. package/build/bosun-app/frontend/client/_app/immutable/chunks/B0nqNj93.js.br +0 -0
  284. package/build/bosun-app/frontend/client/_app/immutable/chunks/B0nqNj93.js.gz +0 -0
  285. package/build/bosun-app/frontend/client/_app/immutable/chunks/B1dhmiqQ.js +0 -1
  286. package/build/bosun-app/frontend/client/_app/immutable/chunks/B1dhmiqQ.js.br +0 -0
  287. package/build/bosun-app/frontend/client/_app/immutable/chunks/B1dhmiqQ.js.gz +0 -0
  288. package/build/bosun-app/frontend/client/_app/immutable/chunks/B9pMb6OP.js.br +0 -0
  289. package/build/bosun-app/frontend/client/_app/immutable/chunks/B9pMb6OP.js.gz +0 -0
  290. package/build/bosun-app/frontend/client/_app/immutable/chunks/BBk8_Xpk.js.br +0 -0
  291. package/build/bosun-app/frontend/client/_app/immutable/chunks/BBk8_Xpk.js.gz +0 -0
  292. package/build/bosun-app/frontend/client/_app/immutable/chunks/BEdAvgYp.js.br +0 -0
  293. package/build/bosun-app/frontend/client/_app/immutable/chunks/BEdAvgYp.js.gz +0 -0
  294. package/build/bosun-app/frontend/client/_app/immutable/chunks/BEtU89l8.js.br +0 -0
  295. package/build/bosun-app/frontend/client/_app/immutable/chunks/BEtU89l8.js.gz +0 -0
  296. package/build/bosun-app/frontend/client/_app/immutable/chunks/BJ9KKLWf.js.br +0 -0
  297. package/build/bosun-app/frontend/client/_app/immutable/chunks/BJ9KKLWf.js.gz +0 -0
  298. package/build/bosun-app/frontend/client/_app/immutable/chunks/BOj6p3qj.js +0 -3
  299. package/build/bosun-app/frontend/client/_app/immutable/chunks/BOj6p3qj.js.br +0 -0
  300. package/build/bosun-app/frontend/client/_app/immutable/chunks/BOj6p3qj.js.gz +0 -0
  301. package/build/bosun-app/frontend/client/_app/immutable/chunks/BQIf5msi.js.br +0 -1
  302. package/build/bosun-app/frontend/client/_app/immutable/chunks/BQIf5msi.js.gz +0 -0
  303. package/build/bosun-app/frontend/client/_app/immutable/chunks/BVp4hYzT.js +0 -1
  304. package/build/bosun-app/frontend/client/_app/immutable/chunks/BVp4hYzT.js.br +0 -0
  305. package/build/bosun-app/frontend/client/_app/immutable/chunks/BVp4hYzT.js.gz +0 -0
  306. package/build/bosun-app/frontend/client/_app/immutable/chunks/BW6P0Ecp.js.br +0 -0
  307. package/build/bosun-app/frontend/client/_app/immutable/chunks/BW6P0Ecp.js.gz +0 -0
  308. package/build/bosun-app/frontend/client/_app/immutable/chunks/BcbX6huO.js.br +0 -0
  309. package/build/bosun-app/frontend/client/_app/immutable/chunks/BcbX6huO.js.gz +0 -0
  310. package/build/bosun-app/frontend/client/_app/immutable/chunks/BoX_BZZY.js +0 -1
  311. package/build/bosun-app/frontend/client/_app/immutable/chunks/BoX_BZZY.js.br +0 -0
  312. package/build/bosun-app/frontend/client/_app/immutable/chunks/BoX_BZZY.js.gz +0 -0
  313. package/build/bosun-app/frontend/client/_app/immutable/chunks/Bp8N7Z1t.js.br +0 -0
  314. package/build/bosun-app/frontend/client/_app/immutable/chunks/Bp8N7Z1t.js.gz +0 -0
  315. package/build/bosun-app/frontend/client/_app/immutable/chunks/C0rPkxmP.js.br +0 -0
  316. package/build/bosun-app/frontend/client/_app/immutable/chunks/C0rPkxmP.js.gz +0 -0
  317. package/build/bosun-app/frontend/client/_app/immutable/chunks/C3cROXCy.js +0 -9
  318. package/build/bosun-app/frontend/client/_app/immutable/chunks/C3cROXCy.js.br +0 -0
  319. package/build/bosun-app/frontend/client/_app/immutable/chunks/C3cROXCy.js.gz +0 -0
  320. package/build/bosun-app/frontend/client/_app/immutable/chunks/C9yBjdYI.js.br +0 -0
  321. package/build/bosun-app/frontend/client/_app/immutable/chunks/C9yBjdYI.js.gz +0 -0
  322. package/build/bosun-app/frontend/client/_app/immutable/chunks/CCYriF4C.js.br +0 -0
  323. package/build/bosun-app/frontend/client/_app/immutable/chunks/CCYriF4C.js.gz +0 -0
  324. package/build/bosun-app/frontend/client/_app/immutable/chunks/CHCMKZAC.js +0 -1
  325. package/build/bosun-app/frontend/client/_app/immutable/chunks/CHCMKZAC.js.br +0 -0
  326. package/build/bosun-app/frontend/client/_app/immutable/chunks/CHCMKZAC.js.gz +0 -0
  327. package/build/bosun-app/frontend/client/_app/immutable/chunks/CNWRsnQ2.js +0 -1
  328. package/build/bosun-app/frontend/client/_app/immutable/chunks/CNWRsnQ2.js.br +0 -0
  329. package/build/bosun-app/frontend/client/_app/immutable/chunks/CNWRsnQ2.js.gz +0 -0
  330. package/build/bosun-app/frontend/client/_app/immutable/chunks/CR-uVjxM.js +0 -1
  331. package/build/bosun-app/frontend/client/_app/immutable/chunks/CR-uVjxM.js.br +0 -0
  332. package/build/bosun-app/frontend/client/_app/immutable/chunks/CR-uVjxM.js.gz +0 -0
  333. package/build/bosun-app/frontend/client/_app/immutable/chunks/CR5IRTqC.js +0 -1
  334. package/build/bosun-app/frontend/client/_app/immutable/chunks/CR5IRTqC.js.br +0 -0
  335. package/build/bosun-app/frontend/client/_app/immutable/chunks/CR5IRTqC.js.gz +0 -0
  336. package/build/bosun-app/frontend/client/_app/immutable/chunks/ClLUwVGq.js.br +0 -0
  337. package/build/bosun-app/frontend/client/_app/immutable/chunks/ClLUwVGq.js.gz +0 -0
  338. package/build/bosun-app/frontend/client/_app/immutable/chunks/DEz15oJb.js.br +0 -0
  339. package/build/bosun-app/frontend/client/_app/immutable/chunks/DEz15oJb.js.gz +0 -0
  340. package/build/bosun-app/frontend/client/_app/immutable/chunks/DJnDF3d9.js.br +0 -0
  341. package/build/bosun-app/frontend/client/_app/immutable/chunks/DJnDF3d9.js.gz +0 -0
  342. package/build/bosun-app/frontend/client/_app/immutable/chunks/DNvczHUR.js.br +0 -0
  343. package/build/bosun-app/frontend/client/_app/immutable/chunks/DNvczHUR.js.gz +0 -0
  344. package/build/bosun-app/frontend/client/_app/immutable/chunks/DXsF11_5.js +0 -1
  345. package/build/bosun-app/frontend/client/_app/immutable/chunks/DXsF11_5.js.br +0 -2
  346. package/build/bosun-app/frontend/client/_app/immutable/chunks/DXsF11_5.js.gz +0 -0
  347. package/build/bosun-app/frontend/client/_app/immutable/chunks/Dba0_Upf.js +0 -1
  348. package/build/bosun-app/frontend/client/_app/immutable/chunks/Dba0_Upf.js.br +0 -2
  349. package/build/bosun-app/frontend/client/_app/immutable/chunks/Dba0_Upf.js.gz +0 -0
  350. package/build/bosun-app/frontend/client/_app/immutable/chunks/DjujL8K1.js.br +0 -0
  351. package/build/bosun-app/frontend/client/_app/immutable/chunks/DjujL8K1.js.gz +0 -0
  352. package/build/bosun-app/frontend/client/_app/immutable/chunks/DnMQeiTY.js.br +0 -0
  353. package/build/bosun-app/frontend/client/_app/immutable/chunks/DnMQeiTY.js.gz +0 -0
  354. package/build/bosun-app/frontend/client/_app/immutable/chunks/DuQdgMax.js +0 -1
  355. package/build/bosun-app/frontend/client/_app/immutable/chunks/DuQdgMax.js.br +0 -0
  356. package/build/bosun-app/frontend/client/_app/immutable/chunks/DuQdgMax.js.gz +0 -0
  357. package/build/bosun-app/frontend/client/_app/immutable/chunks/OERrxy3_.js +0 -64
  358. package/build/bosun-app/frontend/client/_app/immutable/chunks/OERrxy3_.js.br +0 -0
  359. package/build/bosun-app/frontend/client/_app/immutable/chunks/OERrxy3_.js.gz +0 -0
  360. package/build/bosun-app/frontend/client/_app/immutable/chunks/ddC1NP9R.js +0 -2
  361. package/build/bosun-app/frontend/client/_app/immutable/chunks/ddC1NP9R.js.br +0 -0
  362. package/build/bosun-app/frontend/client/_app/immutable/chunks/ddC1NP9R.js.gz +0 -0
  363. package/build/bosun-app/frontend/client/_app/immutable/chunks/joiJcRPz.js.br +0 -0
  364. package/build/bosun-app/frontend/client/_app/immutable/chunks/joiJcRPz.js.gz +0 -0
  365. package/build/bosun-app/frontend/client/_app/immutable/chunks/ouMvMh56.js.br +0 -0
  366. package/build/bosun-app/frontend/client/_app/immutable/chunks/ouMvMh56.js.gz +0 -0
  367. package/build/bosun-app/frontend/client/_app/immutable/chunks/qiSVE_6c.js +0 -1
  368. package/build/bosun-app/frontend/client/_app/immutable/chunks/qiSVE_6c.js.br +0 -0
  369. package/build/bosun-app/frontend/client/_app/immutable/chunks/qiSVE_6c.js.gz +0 -0
  370. package/build/bosun-app/frontend/client/_app/immutable/chunks/sKHuRf4Z.js.br +0 -0
  371. package/build/bosun-app/frontend/client/_app/immutable/chunks/sKHuRf4Z.js.gz +0 -0
  372. package/build/bosun-app/frontend/client/_app/immutable/chunks/zpyNGpfC.js +0 -1
  373. package/build/bosun-app/frontend/client/_app/immutable/chunks/zpyNGpfC.js.br +0 -0
  374. package/build/bosun-app/frontend/client/_app/immutable/chunks/zpyNGpfC.js.gz +0 -0
  375. package/build/bosun-app/frontend/client/_app/immutable/entry/app.DJfhEB0w.js +0 -2
  376. package/build/bosun-app/frontend/client/_app/immutable/entry/app.DJfhEB0w.js.br +0 -0
  377. package/build/bosun-app/frontend/client/_app/immutable/entry/app.DJfhEB0w.js.gz +0 -0
  378. package/build/bosun-app/frontend/client/_app/immutable/entry/start.CvCep2Ct.js +0 -1
  379. package/build/bosun-app/frontend/client/_app/immutable/entry/start.CvCep2Ct.js.br +0 -0
  380. package/build/bosun-app/frontend/client/_app/immutable/entry/start.CvCep2Ct.js.gz +0 -0
  381. package/build/bosun-app/frontend/client/_app/immutable/nodes/0.BrSNCmq3.js.br +0 -0
  382. package/build/bosun-app/frontend/client/_app/immutable/nodes/0.BrSNCmq3.js.gz +0 -0
  383. package/build/bosun-app/frontend/client/_app/immutable/nodes/1.br7GI-g3.js +0 -1
  384. package/build/bosun-app/frontend/client/_app/immutable/nodes/1.br7GI-g3.js.br +0 -0
  385. package/build/bosun-app/frontend/client/_app/immutable/nodes/1.br7GI-g3.js.gz +0 -0
  386. package/build/bosun-app/frontend/client/_app/immutable/nodes/10.BI2Z0Is-.js.br +0 -0
  387. package/build/bosun-app/frontend/client/_app/immutable/nodes/10.BI2Z0Is-.js.gz +0 -0
  388. package/build/bosun-app/frontend/client/_app/immutable/nodes/15.drIyAxl2.js.br +0 -1
  389. package/build/bosun-app/frontend/client/_app/immutable/nodes/15.drIyAxl2.js.gz +0 -0
  390. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.BpaLQSZh.js +0 -3
  391. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.BpaLQSZh.js.br +0 -0
  392. package/build/bosun-app/frontend/client/_app/immutable/nodes/17.BpaLQSZh.js.gz +0 -0
  393. package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CYbvSJai.js +0 -11
  394. package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CYbvSJai.js.br +0 -0
  395. package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CYbvSJai.js.gz +0 -0
  396. package/build/bosun-app/frontend/client/_app/immutable/nodes/2.BYBSEm-Y.js.br +0 -0
  397. package/build/bosun-app/frontend/client/_app/immutable/nodes/2.BYBSEm-Y.js.gz +0 -0
  398. package/build/bosun-app/frontend/client/_app/immutable/nodes/3.BuP4tAto.js +0 -1
  399. package/build/bosun-app/frontend/client/_app/immutable/nodes/3.BuP4tAto.js.br +0 -0
  400. package/build/bosun-app/frontend/client/_app/immutable/nodes/3.BuP4tAto.js.gz +0 -0
  401. package/build/bosun-app/frontend/client/_app/immutable/nodes/4.Dlg932RB.js.br +0 -0
  402. package/build/bosun-app/frontend/client/_app/immutable/nodes/4.Dlg932RB.js.gz +0 -0
  403. package/build/bosun-app/frontend/client/_app/immutable/nodes/5.BWt6bVnz.js.br +0 -0
  404. package/build/bosun-app/frontend/client/_app/immutable/nodes/5.BWt6bVnz.js.gz +0 -0
  405. package/build/bosun-app/frontend/client/_app/immutable/nodes/6.DL1bd1xV.js.br +0 -0
  406. package/build/bosun-app/frontend/client/_app/immutable/nodes/6.DL1bd1xV.js.gz +0 -0
  407. package/build/bosun-app/frontend/client/_app/immutable/nodes/8.BJXaarvf.js.br +0 -0
  408. package/build/bosun-app/frontend/client/_app/immutable/nodes/8.BJXaarvf.js.gz +0 -0
  409. package/build/bosun-app/frontend/client/_app/immutable/nodes/9.DZnil4g8.js.br +0 -0
  410. package/build/bosun-app/frontend/client/_app/immutable/nodes/9.DZnil4g8.js.gz +0 -0
  411. package/build/bosun-app/frontend/server/chunks/chunks/schemas.js-W-DP3mDr.js.map +0 -1
  412. package/build/bosun-app/frontend/server/chunks/chunks/source-selection.js-Cc6RX6-m.js.map +0 -1
  413. package/build/bosun-app/frontend/server/chunks/entries/endpoints/traces/api/proxy/_...path_/_server.ts.js-CHrOiduq.js.map +0 -1
  414. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/latency/_page.svelte.js-tdUdTo4m.js.map +0 -1
  415. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/traces/_page.svelte.js-Ca79DBzJ.js.map +0 -1
  416. package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_layout.svelte.js-Dvn3tfM7.js.map +0 -1
  417. package/build/bosun-app/frontend/server/chunks/nodes/0.js-DFPCfgZg.js +0 -9
  418. package/build/bosun-app/frontend/server/chunks/nodes/0.js-DFPCfgZg.js.map +0 -1
  419. package/build/bosun-app/frontend/server/chunks/nodes/1.js-BujyKhW9.js +0 -9
  420. package/build/bosun-app/frontend/server/chunks/nodes/10.js-Dbiu4FpX.js +0 -9
  421. package/build/bosun-app/frontend/server/chunks/nodes/10.js-Dbiu4FpX.js.map +0 -1
  422. package/build/bosun-app/frontend/server/chunks/nodes/17.js-9Acvxo6X.js +0 -9
  423. package/build/bosun-app/frontend/server/chunks/nodes/17.js-9Acvxo6X.js.map +0 -1
  424. package/build/bosun-app/frontend/server/chunks/nodes/18.js-D294qrHb.js +0 -9
  425. package/build/bosun-app/frontend/server/chunks/nodes/18.js-D294qrHb.js.map +0 -1
  426. package/build/bosun-app/frontend/server/chunks/nodes/2.js-DiVDZRco.js +0 -9
  427. package/build/bosun-app/frontend/server/chunks/nodes/2.js-DiVDZRco.js.map +0 -1
  428. package/build/bosun-app/frontend/server/chunks/nodes/3.js-DiaPSM0a.js +0 -9
  429. package/build/bosun-app/frontend/server/chunks/nodes/3.js-DiaPSM0a.js.map +0 -1
  430. package/build/bosun-app/frontend/server/chunks/nodes/4.js-DQhC-gZ_.js +0 -9
  431. package/build/bosun-app/frontend/server/chunks/nodes/4.js-DQhC-gZ_.js.map +0 -1
  432. package/build/bosun-app/frontend/server/chunks/nodes/5.js-C3vjOcSE.js +0 -9
  433. package/build/bosun-app/frontend/server/chunks/nodes/6.js-DpCeETlI.js +0 -9
  434. package/build/bosun-app/frontend/server/chunks/nodes/6.js-DpCeETlI.js.map +0 -1
  435. package/build/bosun-app/frontend/server/chunks/nodes/8.js-BjNCuX0D.js +0 -9
  436. package/build/bosun-app/frontend/server/chunks/nodes/8.js-BjNCuX0D.js.map +0 -1
  437. package/build/bosun-app/frontend/server/chunks/nodes/9.js-BuUuEII0.js +0 -9
  438. package/build/bosun-app/frontend/server/chunks/nodes/9.js-BuUuEII0.js.map +0 -1
  439. /package/build/bosun-app/frontend/client/_app/immutable/assets/{ReadOnlyMonacoDiff.iiWNRlR-.css → Modal.iiWNRlR-.css} +0 -0
  440. /package/build/bosun-app/frontend/client/_app/immutable/assets/{ReadOnlyMonacoDiff.iiWNRlR-.css.br → Modal.iiWNRlR-.css.br} +0 -0
  441. /package/build/bosun-app/frontend/client/_app/immutable/assets/{ReadOnlyMonacoDiff.iiWNRlR-.css.gz → Modal.iiWNRlR-.css.gz} +0 -0
package/README.md CHANGED
@@ -7,6 +7,7 @@ packages before. Each area has a subpath export:
7
7
  | -------------------------------------------- | ------------------------------------------------------------------------- |
8
8
  | `@recombine-ai/platform` | The platform shapes and their factories, plus the telescope re-export. |
9
9
  | `@recombine-ai/platform/agent` | The voice and text agent contracts and their factories. |
10
+ | `@recombine-ai/platform/analytics` | Typed conversation analytics and PostgreSQL persistence. |
10
11
  | `@recombine-ai/platform/engine` | Agentic workflows: steps, conversations, prompts, Zod structured outputs. |
11
12
  | `@recombine-ai/platform/telescope` | Observability: step, API call, conversational, and latency tracers. |
12
13
  | `@recombine-ai/platform/dockyard` | The logger, with request context and redaction. |
@@ -0,0 +1,14 @@
1
+ import { type AgentAnalytics, type AnalyticsStore } from '../analytics';
2
+ export type AgentPlatform<TPlatform extends {
3
+ analytics: AnalyticsStore;
4
+ }> = Omit<TPlatform, 'analytics'> & {
5
+ analytics: AgentAnalytics;
6
+ };
7
+ type BindAgentAnalytics = (store: AnalyticsStore, agentId: string) => AgentAnalytics;
8
+ export interface DeferredAgentAnalytics {
9
+ analytics: AgentAnalytics;
10
+ bind(agentId: string): void;
11
+ }
12
+ export declare function createDeferredAgentAnalytics(store: AnalyticsStore, bindAgent?: BindAgentAnalytics): DeferredAgentAnalytics;
13
+ export {};
14
+ //# sourceMappingURL=agent-analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"agent-analytics.d.ts","sourceRoot":"","sources":["../../src/agent/agent-analytics.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,cAAc,EAAE,KAAK,cAAc,EAAsB,MAAM,cAAc,CAAA;AAE3F,MAAM,MAAM,aAAa,CAAC,SAAS,SAAS;IAAE,SAAS,EAAE,cAAc,CAAA;CAAE,IAAI,IAAI,CAC7E,SAAS,EACT,WAAW,CACd,GAAG;IACA,SAAS,EAAE,cAAc,CAAA;CAC5B,CAAA;AAED,KAAK,kBAAkB,GAAG,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,MAAM,KAAK,cAAc,CAAA;AAEpF,MAAM,WAAW,sBAAsB;IACnC,SAAS,EAAE,cAAc,CAAA;IACzB,IAAI,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;CAC9B;AAED,wBAAgB,4BAA4B,CACxC,KAAK,EAAE,cAAc,EACrB,SAAS,GAAE,kBAAuC,GACnD,sBAAsB,CA6BxB"}
@@ -0,0 +1,29 @@
1
+ import { bindAgentAnalytics } from '../analytics';
2
+ export function createDeferredAgentAnalytics(store, bindAgent = bindAgentAnalytics) {
3
+ let boundAnalytics;
4
+ const getBoundAnalytics = () => {
5
+ if (!boundAnalytics) {
6
+ throw new Error('Cannot use conversation analytics while the agent is being created');
7
+ }
8
+ return boundAnalytics;
9
+ };
10
+ return {
11
+ analytics: {
12
+ set(conversationId, values) {
13
+ return getBoundAnalytics().set(conversationId, values);
14
+ },
15
+ clear(conversationId, fieldNames) {
16
+ return getBoundAnalytics().clear(conversationId, fieldNames);
17
+ },
18
+ get(conversationId, fieldName) {
19
+ return getBoundAnalytics().get(conversationId, fieldName);
20
+ },
21
+ },
22
+ bind(agentId) {
23
+ if (boundAnalytics) {
24
+ throw new Error('Conversation analytics is already bound to an agent');
25
+ }
26
+ boundAnalytics = bindAgent(store, agentId);
27
+ },
28
+ };
29
+ }
@@ -2,4 +2,5 @@ export { createVoiceAgent } from './voice-agent';
2
2
  export type { CallInfo, VoiceAgent } from './voice-agent';
3
3
  export { createTextAgent } from './text-agent';
4
4
  export type { TextAgent } from './text-agent';
5
+ export type { AgentPlatform } from './agent-analytics';
5
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/agent/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,YAAY,EAAE,QAAQ,EAAE,UAAU,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,eAAe,EAAE,MAAM,cAAc,CAAA;AAC9C,YAAY,EAAE,SAAS,EAAE,MAAM,cAAc,CAAA;AAC7C,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAA"}
@@ -1,5 +1,6 @@
1
- import { IModels, TextPlatform } from '../core';
2
- import { Event } from '../text-agent-handlers';
1
+ import type { IModels, TextPlatform } from '../core';
2
+ import type { Event } from '../text-agent-handlers';
3
+ import { type AgentPlatform } from './agent-analytics';
3
4
  export interface TextAgent<TMeta> {
4
5
  name: string;
5
6
  sender: string;
@@ -10,5 +11,5 @@ export interface TextAgent<TMeta> {
10
11
  respondToMessage(event: Event<TMeta>): Promise<void>;
11
12
  onFatalError(error: Error | string, conversationId?: string): Promise<void>;
12
13
  }
13
- export declare function createTextAgent<TContext extends object, TServices, TMeta, TModels extends IModels>(creator: (platform: TextPlatform<TContext, TModels>, services: TServices) => TextAgent<TMeta>): (platform: TextPlatform<TContext, TModels>, services: TServices) => TextAgent<TMeta>;
14
+ export declare function createTextAgent<TContext extends object, TServices, TMeta, TModels extends IModels>(creator: (platform: AgentPlatform<TextPlatform<TContext, TModels>>, services: TServices) => TextAgent<TMeta>): (platform: TextPlatform<TContext, TModels>, services: TServices) => TextAgent<TMeta>;
14
15
  //# sourceMappingURL=text-agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"text-agent.d.ts","sourceRoot":"","sources":["../../src/agent/text-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAE/C,OAAO,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AAG9C,MAAM,WAAW,SAAS,CAAC,KAAK;IAE5B,IAAI,EAAE,MAAM,CAAA;IAEZ,MAAM,EAAE,MAAM,CAAA;IAId,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAKpD,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAIpD,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAM/D,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAKrD,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAMpD,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9E;AAOD,wBAAgB,eAAe,CAAC,QAAQ,SAAS,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,SAAS,OAAO,EAC9F,OAAO,EAAE,CAAC,QAAQ,EAAE,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,KAAK,SAAS,CAAC,KAAK,CAAC,IAErF,UAAU,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,UAAU,SAAS,KAAG,SAAS,CAAC,KAAK,CAAC,CA4B5F"}
1
+ {"version":3,"file":"text-agent.d.ts","sourceRoot":"","sources":["../../src/agent/text-agent.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAA;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,EAAE,KAAK,aAAa,EAAgC,MAAM,mBAAmB,CAAA;AAGpF,MAAM,WAAW,SAAS,CAAC,KAAK;IAE5B,IAAI,EAAE,MAAM,CAAA;IAEZ,MAAM,EAAE,MAAM,CAAA;IAId,aAAa,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAKpD,UAAU,CAAC,cAAc,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAIpD,WAAW,CAAC,cAAc,EAAE,MAAM,EAAE,IAAI,EAAE,KAAK,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAM/D,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;IAKrD,gBAAgB,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;IAMpD,YAAY,CAAC,KAAK,EAAE,KAAK,GAAG,MAAM,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAA;CAC9E;AAOD,wBAAgB,eAAe,CAAC,QAAQ,SAAS,MAAM,EAAE,SAAS,EAAE,KAAK,EAAE,OAAO,SAAS,OAAO,EAC9F,OAAO,EAAE,CACL,QAAQ,EAAE,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EACxD,QAAQ,EAAE,SAAS,KAClB,SAAS,CAAC,KAAK,CAAC,IAEb,UAAU,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,UAAU,SAAS,KAAG,SAAS,CAAC,KAAK,CAAC,CAkC5F"}
@@ -1,4 +1,5 @@
1
1
  import { emitAgentFatalError } from '../telescope';
2
+ import { createDeferredAgentAnalytics } from './agent-analytics';
2
3
  import { timed } from './timed';
3
4
  function regionOf(event) {
4
5
  const region = event.metadata?.region;
@@ -6,7 +7,13 @@ function regionOf(event) {
6
7
  }
7
8
  export function createTextAgent(creator) {
8
9
  return (platform, services) => {
9
- const agent = creator(platform, services);
10
+ const deferredAnalytics = createDeferredAgentAnalytics(platform.analytics);
11
+ const agentPlatform = {
12
+ ...platform,
13
+ analytics: deferredAnalytics.analytics,
14
+ };
15
+ const agent = creator(agentPlatform, services);
16
+ deferredAnalytics.bind(agent.name);
10
17
  const inner = agent.onFatalError.bind(agent);
11
18
  agent.onFatalError = async (error, conversationId) => {
12
19
  emitAgentFatalError(platform.telescope, agent.name, error, conversationId);
@@ -1,6 +1,7 @@
1
1
  import { ReadableStream } from 'node:stream/web';
2
2
  import type { IModels, VoicePlatform } from '../core';
3
- import { Message, ResponseChunk } from '../engine';
3
+ import type { Conversation, Message, ResponseChunk } from '../engine';
4
+ import { type AgentPlatform } from './agent-analytics';
4
5
  export interface CallInfo<TMeta> {
5
6
  callId: string;
6
7
  phoneNumber?: string;
@@ -16,9 +17,9 @@ export interface VoiceAgent<TMeta> {
16
17
  }>;
17
18
  streamResponse: (messages: Message[], call: CallInfo<TMeta>) => Promise<ReadableStream<ResponseChunk>>;
18
19
  onAgentSpeechDone: (messages: Message[], call: CallInfo<TMeta>) => Promise<void>;
19
- onCallEnd: (call: CallInfo<TMeta>) => Promise<void>;
20
+ onCallEnd: (call: CallInfo<TMeta>, completedConversation?: Conversation) => Promise<void>;
20
21
  onFatalError: (call: CallInfo<TMeta>, err: string | Error) => Promise<void>;
21
22
  handleNotification?: (callId: string, payload: unknown) => Promise<void>;
22
23
  }
23
- export declare function createVoiceAgent<TContext extends object, TServices, TMeta, TModels extends IModels>(creator: (platform: VoicePlatform<TContext, TModels>, services: TServices) => VoiceAgent<TMeta>): (platform: VoicePlatform<TContext, TModels>, services: TServices) => VoiceAgent<TMeta>;
24
+ export declare function createVoiceAgent<TContext extends object, TServices, TMeta, TModels extends IModels>(creator: (platform: AgentPlatform<VoicePlatform<TContext, TModels>>, services: TServices) => VoiceAgent<TMeta>): (platform: VoicePlatform<TContext, TModels>, services: TServices) => VoiceAgent<TMeta>;
24
25
  //# sourceMappingURL=voice-agent.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"voice-agent.d.ts","sourceRoot":"","sources":["../../src/agent/voice-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAIlD,MAAM,WAAW,QAAQ,CAAC,KAAK;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,CAAA;CACf;AAED,MAAM,WAAW,UAAU,CAAC,KAAK;IAE7B,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;QAC5C,cAAc,EAAE,MAAM,CAAA;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAA;KAC/D,CAAC,CAAA;IACF,cAAc,EAAE,CACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KACpB,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAA;IAC3C,iBAAiB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChF,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACnD,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAK3E,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3E;AAID,wBAAgB,gBAAgB,CAC5B,QAAQ,SAAS,MAAM,EACvB,SAAS,EACT,KAAK,EACL,OAAO,SAAS,OAAO,EACzB,OAAO,EAAE,CAAC,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,QAAQ,EAAE,SAAS,KAAK,UAAU,CAAC,KAAK,CAAC,IACrF,UAAU,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,UAAU,SAAS,KAAG,UAAU,CAAC,KAAK,CAAC,CA0B9F"}
1
+ {"version":3,"file":"voice-agent.d.ts","sourceRoot":"","sources":["../../src/agent/voice-agent.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAA;AAEhD,OAAO,KAAK,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,SAAS,CAAA;AACrD,OAAO,KAAK,EAAE,YAAY,EAAE,OAAO,EAAE,aAAa,EAAE,MAAM,WAAW,CAAA;AAErE,OAAO,EAAE,KAAK,aAAa,EAAgC,MAAM,mBAAmB,CAAA;AAGpF,MAAM,WAAW,QAAQ,CAAC,KAAK;IAC3B,MAAM,EAAE,MAAM,CAAA;IACd,WAAW,CAAC,EAAE,MAAM,CAAA;IACpB,IAAI,CAAC,EAAE,KAAK,CAAA;CACf;AAED,MAAM,WAAW,UAAU,CAAC,KAAK;IAE7B,IAAI,EAAE,MAAM,CAAA;IACZ,gBAAgB,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAA;IACrC,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACrD,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC;QAC5C,cAAc,EAAE,MAAM,CAAA;QACtB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,MAAM,EAAE,CAAC,CAAA;KAC/D,CAAC,CAAA;IACF,cAAc,EAAE,CACZ,QAAQ,EAAE,OAAO,EAAE,EACnB,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KACpB,OAAO,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC,CAAA;IAC3C,iBAAiB,EAAE,CAAC,QAAQ,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAChF,SAAS,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,qBAAqB,CAAC,EAAE,YAAY,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IACzF,YAAY,EAAE,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,GAAG,KAAK,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;IAK3E,kBAAkB,CAAC,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC,IAAI,CAAC,CAAA;CAC3E;AAID,wBAAgB,gBAAgB,CAC5B,QAAQ,SAAS,MAAM,EACvB,SAAS,EACT,KAAK,EACL,OAAO,SAAS,OAAO,EAEvB,OAAO,EAAE,CACL,QAAQ,EAAE,aAAa,CAAC,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC,EACzD,QAAQ,EAAE,SAAS,KAClB,UAAU,CAAC,KAAK,CAAC,IAEd,UAAU,aAAa,CAAC,QAAQ,EAAE,OAAO,CAAC,EAAE,UAAU,SAAS,KAAG,UAAU,CAAC,KAAK,CAAC,CAgC9F"}
@@ -1,9 +1,16 @@
1
1
  import { emitAgentFatalError } from '../telescope';
2
+ import { createDeferredAgentAnalytics } from './agent-analytics';
2
3
  import { timed } from './timed';
3
4
  const ANALYTICAL_WORKFLOW_NAME = 'onAgentSpeechDone';
4
5
  export function createVoiceAgent(creator) {
5
6
  return (platform, services) => {
6
- const agent = creator(platform, services);
7
+ const deferredAnalytics = createDeferredAgentAnalytics(platform.analytics);
8
+ const agentPlatform = {
9
+ ...platform,
10
+ analytics: deferredAnalytics.analytics,
11
+ };
12
+ const agent = creator(agentPlatform, services);
13
+ deferredAnalytics.bind(agent.name);
7
14
  const inner = agent.onFatalError.bind(agent);
8
15
  agent.onFatalError = async (call, err) => {
9
16
  emitAgentFatalError(platform.telescope, agent.name, err, call.callId);
@@ -0,0 +1,49 @@
1
+ export type AnalyticsScalar = boolean | number | string;
2
+ export type AnalyticsFieldType = 'boolean' | 'number' | 'string';
3
+ export interface AnalyticsFieldDefinition {
4
+ readonly type: AnalyticsFieldType;
5
+ readonly values?: readonly string[];
6
+ }
7
+ export type AnalyticsFieldDefinitions = Readonly<Record<string, AnalyticsFieldDefinition>>;
8
+ export type AnalyticsConfiguration = Readonly<Record<string, AnalyticsFieldDefinitions>>;
9
+ export interface AnalyticsStore {
10
+ set(conversationId: string, agentId: string, values: Readonly<Record<string, AnalyticsScalar>>): Promise<void>;
11
+ clear(conversationId: string, agentId: string, fieldNames: readonly string[]): Promise<void>;
12
+ get(conversationId: string, agentId: string, fieldName: string): Promise<unknown>;
13
+ }
14
+ export interface ConversationRecord {
15
+ conversationId: string;
16
+ agentId: string;
17
+ channel: string;
18
+ region?: string;
19
+ startedAt: Date;
20
+ endedAt?: Date;
21
+ }
22
+ export interface PhoneCallRecord {
23
+ phoneNumber?: string;
24
+ recordingUrl?: string;
25
+ endedReason?: string;
26
+ durationSeconds?: number;
27
+ }
28
+ export interface ConversationRepository {
29
+ saveConversation(conversation: ConversationRecord, phoneCall?: PhoneCallRecord): Promise<{
30
+ changed: boolean;
31
+ created: boolean;
32
+ }>;
33
+ }
34
+ export interface AgentAnalytics {
35
+ set(conversationId: string, values: Record<string, AnalyticsScalar>): Promise<void>;
36
+ clear(conversationId: string, fieldNames: readonly string[]): Promise<void>;
37
+ get(conversationId: string, fieldName: string): Promise<AnalyticsScalar | undefined>;
38
+ }
39
+ export declare const analyticsConfigurationPath = "src/analytics.yaml";
40
+ export declare function bindAgentAnalytics(store: AnalyticsStore, agentId: string, projectRoot?: string): AgentAnalytics;
41
+ export declare function loadAnalyticsConfiguration(projectRoot?: string): AnalyticsConfiguration;
42
+ export declare function getAgentAnalyticsConfiguration(configuration: AnalyticsConfiguration, agentId: string): AnalyticsFieldDefinitions;
43
+ export declare function createAgentAnalytics(store: AnalyticsStore, agentId: string, fields: AnalyticsFieldDefinitions): AgentAnalytics;
44
+ export declare function createInMemoryAnalytics(seededConversations?: readonly {
45
+ conversationId: string;
46
+ agentId: string;
47
+ }[]): AnalyticsStore;
48
+ export declare function assertAnalyticsScalar(value: unknown): asserts value is AnalyticsScalar;
49
+ //# sourceMappingURL=analytics.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"analytics.d.ts","sourceRoot":"","sources":["../../src/analytics/analytics.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,223 @@
1
+ import { readFileSync } from 'node:fs';
2
+ import { resolve } from 'node:path';
3
+ import { parse as parseYaml } from 'yaml';
4
+ export const analyticsConfigurationPath = 'src/analytics.yaml';
5
+ export function bindAgentAnalytics(store, agentId, projectRoot = process.cwd()) {
6
+ if (agentId.trim() === '') {
7
+ throw new Error('Analytics agent ID must not be empty');
8
+ }
9
+ let analytics;
10
+ const getAnalytics = () => {
11
+ analytics ??= createAgentAnalytics(store, agentId, getAgentAnalyticsConfiguration(loadAnalyticsConfiguration(projectRoot), agentId));
12
+ return analytics;
13
+ };
14
+ return {
15
+ set(conversationId, values) {
16
+ return getAnalytics().set(conversationId, values);
17
+ },
18
+ clear(conversationId, fieldNames) {
19
+ return getAnalytics().clear(conversationId, fieldNames);
20
+ },
21
+ get(conversationId, fieldName) {
22
+ return getAnalytics().get(conversationId, fieldName);
23
+ },
24
+ };
25
+ }
26
+ export function loadAnalyticsConfiguration(projectRoot = process.cwd()) {
27
+ const filePath = resolve(projectRoot, analyticsConfigurationPath);
28
+ let source;
29
+ try {
30
+ source = readFileSync(filePath, 'utf8');
31
+ }
32
+ catch (cause) {
33
+ throw new Error(`Cannot read analytics configuration at '${filePath}': ${getErrorMessage(cause)}`, { cause });
34
+ }
35
+ try {
36
+ return parseAnalyticsConfiguration(parseYaml(source));
37
+ }
38
+ catch (cause) {
39
+ throw new Error(`Invalid analytics configuration at '${filePath}': ${getErrorMessage(cause)}`, { cause });
40
+ }
41
+ }
42
+ export function getAgentAnalyticsConfiguration(configuration, agentId) {
43
+ if (agentId.trim() === '') {
44
+ throw new Error('Analytics agent ID must not be empty');
45
+ }
46
+ if (!Object.hasOwn(configuration, agentId)) {
47
+ throw new Error(`Analytics configuration does not contain agent '${agentId}'`);
48
+ }
49
+ const fields = configuration[agentId];
50
+ return fields;
51
+ }
52
+ export function createAgentAnalytics(store, agentId, fields) {
53
+ validateAgentAnalytics(agentId, fields);
54
+ const getDefinition = (fieldName) => {
55
+ if (!Object.hasOwn(fields, fieldName)) {
56
+ throw new Error(`Analytics field '${fieldName}' is not declared for agent '${agentId}'`);
57
+ }
58
+ const definition = fields[fieldName];
59
+ return definition;
60
+ };
61
+ const parseFieldValue = (fieldName, value) => {
62
+ try {
63
+ return parseAnalyticsValue(getDefinition(fieldName), value);
64
+ }
65
+ catch (cause) {
66
+ const message = cause instanceof Error ? cause.message : String(cause);
67
+ throw new Error(`Invalid analytics value for field '${fieldName}' on agent '${agentId}': ${message}`, { cause });
68
+ }
69
+ };
70
+ return {
71
+ async set(conversationId, values) {
72
+ if (!isRecord(values)) {
73
+ throw new Error('Analytics values must be an object');
74
+ }
75
+ const parsedValues = Object.fromEntries(Object.entries(values).map(([fieldName, value]) => [
76
+ fieldName,
77
+ parseFieldValue(fieldName, value),
78
+ ]));
79
+ await store.set(conversationId, agentId, parsedValues);
80
+ },
81
+ async clear(conversationId, fieldNames) {
82
+ if (!Array.isArray(fieldNames)) {
83
+ throw new Error('Analytics field names must be an array');
84
+ }
85
+ for (const fieldName of fieldNames) {
86
+ if (typeof fieldName !== 'string') {
87
+ throw new Error('Analytics field name must be a string');
88
+ }
89
+ getDefinition(fieldName);
90
+ }
91
+ await store.clear(conversationId, agentId, fieldNames);
92
+ },
93
+ async get(conversationId, fieldName) {
94
+ getDefinition(fieldName);
95
+ const value = await store.get(conversationId, agentId, fieldName);
96
+ return value === undefined ? undefined : parseFieldValue(fieldName, value);
97
+ },
98
+ };
99
+ }
100
+ export function createInMemoryAnalytics(seededConversations = []) {
101
+ const conversations = new Map();
102
+ const conversationAgents = new Map(seededConversations.map(({ conversationId, agentId }) => [conversationId, agentId]));
103
+ return {
104
+ async set(conversationId, agentId, values) {
105
+ claimConversation(conversationAgents, conversationId, agentId);
106
+ const parsedValues = Object.entries(values).map(([fieldName, value]) => {
107
+ assertAnalyticsScalar(value);
108
+ return [fieldName, value];
109
+ });
110
+ const conversation = conversations.get(conversationId) ?? new Map();
111
+ for (const [fieldName, value] of parsedValues) {
112
+ conversation.set(fieldName, value);
113
+ }
114
+ conversations.set(conversationId, conversation);
115
+ },
116
+ async clear(conversationId, agentId, fieldNames) {
117
+ claimConversation(conversationAgents, conversationId, agentId);
118
+ const conversation = conversations.get(conversationId);
119
+ for (const fieldName of fieldNames) {
120
+ conversation?.delete(fieldName);
121
+ }
122
+ if (conversation?.size === 0) {
123
+ conversations.delete(conversationId);
124
+ }
125
+ },
126
+ async get(conversationId, agentId, fieldName) {
127
+ if (conversationAgents.get(conversationId) !== agentId) {
128
+ return undefined;
129
+ }
130
+ return conversations.get(conversationId)?.get(fieldName);
131
+ },
132
+ };
133
+ }
134
+ export function assertAnalyticsScalar(value) {
135
+ if (typeof value === 'boolean' ||
136
+ typeof value === 'string' ||
137
+ (typeof value === 'number' && Number.isFinite(value))) {
138
+ return;
139
+ }
140
+ throw new Error('Analytics value must be a boolean, finite number, or string');
141
+ }
142
+ function parseAnalyticsConfiguration(value) {
143
+ if (!isRecord(value)) {
144
+ throw new Error('Analytics configuration must be an object');
145
+ }
146
+ return Object.freeze(Object.fromEntries(Object.entries(value).map(([agentId, fields]) => {
147
+ if (agentId.trim() === '') {
148
+ throw new Error('Analytics agent ID must not be empty');
149
+ }
150
+ if (!isRecord(fields)) {
151
+ throw new Error(`Analytics configuration for agent '${agentId}' must be an object`);
152
+ }
153
+ const definitions = Object.freeze(Object.fromEntries(Object.entries(fields).map(([fieldName, definition]) => [
154
+ fieldName,
155
+ parseFieldDefinition(agentId, fieldName, definition),
156
+ ])));
157
+ validateAgentAnalytics(agentId, definitions);
158
+ return [agentId, definitions];
159
+ })));
160
+ }
161
+ function parseFieldDefinition(agentId, fieldName, value) {
162
+ if (!isRecord(value) || typeof value.type !== 'string') {
163
+ throw new Error(`Analytics field '${fieldName}' for agent '${agentId}' must declare a type`);
164
+ }
165
+ if (value.type === 'boolean' || value.type === 'number' || value.type === 'string') {
166
+ if (Object.keys(value).some((key) => key !== 'type')) {
167
+ throw new Error(`Analytics field '${fieldName}' for agent '${agentId}' has unknown options`);
168
+ }
169
+ return Object.freeze({ type: value.type });
170
+ }
171
+ if (value.type === 'enum') {
172
+ if (Object.keys(value).some((key) => key !== 'type' && key !== 'values')) {
173
+ throw new Error(`Analytics field '${fieldName}' for agent '${agentId}' has unknown options`);
174
+ }
175
+ if (!Array.isArray(value.values) ||
176
+ value.values.length === 0 ||
177
+ value.values.some((item) => typeof item !== 'string')) {
178
+ throw new Error(`Analytics enum field '${fieldName}' for agent '${agentId}' must contain string values`);
179
+ }
180
+ const values = value.values;
181
+ if (new Set(values).size !== values.length) {
182
+ throw new Error(`Analytics enum field '${fieldName}' for agent '${agentId}' contains duplicate values`);
183
+ }
184
+ return Object.freeze({ type: 'string', values: Object.freeze([...values]) });
185
+ }
186
+ throw new Error(`Analytics field '${fieldName}' for agent '${agentId}' has unsupported type '${value.type}'`);
187
+ }
188
+ function validateAgentAnalytics(agentId, fields) {
189
+ if (agentId.trim() === '') {
190
+ throw new Error('Analytics agent ID must not be empty');
191
+ }
192
+ for (const fieldName of Object.keys(fields)) {
193
+ if (!/^[A-Za-z0-9_.:-]{1,128}$/.test(fieldName)) {
194
+ throw new Error('Analytics field name contains unsupported characters');
195
+ }
196
+ }
197
+ }
198
+ function parseAnalyticsValue(definition, value) {
199
+ assertAnalyticsScalar(value);
200
+ if (typeof value !== definition.type) {
201
+ throw new Error(`Analytics value must be a ${definition.type}`);
202
+ }
203
+ if (definition.values && !definition.values.includes(value)) {
204
+ throw new Error('Analytics value is not in the configured enum');
205
+ }
206
+ return value;
207
+ }
208
+ function claimConversation(conversationAgents, conversationId, agentId) {
209
+ const existingAgentId = conversationAgents.get(conversationId);
210
+ if (existingAgentId === undefined) {
211
+ conversationAgents.set(conversationId, agentId);
212
+ return;
213
+ }
214
+ if (existingAgentId !== agentId) {
215
+ throw new Error(`Conversation '${conversationId}' belongs to another agent`);
216
+ }
217
+ }
218
+ function isRecord(value) {
219
+ return typeof value === 'object' && value !== null && !Array.isArray(value);
220
+ }
221
+ function getErrorMessage(error) {
222
+ return error instanceof Error ? error.message : String(error);
223
+ }
@@ -0,0 +1,7 @@
1
+ export { analyticsConfigurationPath, assertAnalyticsScalar, bindAgentAnalytics, createAgentAnalytics, createInMemoryAnalytics, getAgentAnalyticsConfiguration, loadAnalyticsConfiguration, } from './analytics';
2
+ export type { AgentAnalytics, AnalyticsConfiguration, AnalyticsFieldDefinition, AnalyticsFieldDefinitions, AnalyticsFieldType, AnalyticsScalar, AnalyticsStore, ConversationRecord, ConversationRepository, PhoneCallRecord, } from './analytics';
3
+ export { PostgresAnalytics, PostgresConversationRepository, createPostgresAnalyticsServices, migrateAnalyticsDatabase, } from './postgres-analytics';
4
+ export type { PostgresAnalyticsServices } from './postgres-analytics';
5
+ export { AnalyticsFieldNotFoundError, AnalyticsQueryError, PostgresAnalyticsQueryService, createPostgresAnalyticsQueryServices, } from './postgres-analytics-query';
6
+ export type { AnalyticsFieldMetadata, AnalyticsFieldValue, AnalyticsFieldValues, AnalyticsFields, AnalyticsFilter, AnalyticsMetric, AnalyticsQueryParameters, AnalyticsTimeGranularity, AnalyticsTimeSeries, AnalyticsTimeSeriesItem, AnalyticsTimeSeriesRequest, PostgresAnalyticsQueryServices, TelescopeConversation, TelescopeConversationPage, } from './postgres-analytics-query';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/analytics/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACH,0BAA0B,EAC1B,qBAAqB,EACrB,kBAAkB,EAClB,oBAAoB,EACpB,uBAAuB,EACvB,8BAA8B,EAC9B,0BAA0B,GAC7B,MAAM,aAAa,CAAA;AACpB,YAAY,EACR,cAAc,EACd,sBAAsB,EACtB,wBAAwB,EACxB,yBAAyB,EACzB,kBAAkB,EAClB,eAAe,EACf,cAAc,EACd,kBAAkB,EAClB,sBAAsB,EACtB,eAAe,GAClB,MAAM,aAAa,CAAA;AACpB,OAAO,EACH,iBAAiB,EACjB,8BAA8B,EAC9B,+BAA+B,EAC/B,wBAAwB,GAC3B,MAAM,sBAAsB,CAAA;AAC7B,YAAY,EAAE,yBAAyB,EAAE,MAAM,sBAAsB,CAAA;AACrE,OAAO,EACH,2BAA2B,EAC3B,mBAAmB,EACnB,6BAA6B,EAC7B,oCAAoC,GACvC,MAAM,4BAA4B,CAAA;AACnC,YAAY,EACR,sBAAsB,EACtB,mBAAmB,EACnB,oBAAoB,EACpB,eAAe,EACf,eAAe,EACf,eAAe,EACf,wBAAwB,EACxB,wBAAwB,EACxB,mBAAmB,EACnB,uBAAuB,EACvB,0BAA0B,EAC1B,8BAA8B,EAC9B,qBAAqB,EACrB,yBAAyB,GAC5B,MAAM,4BAA4B,CAAA"}
@@ -0,0 +1,3 @@
1
+ export { analyticsConfigurationPath, assertAnalyticsScalar, bindAgentAnalytics, createAgentAnalytics, createInMemoryAnalytics, getAgentAnalyticsConfiguration, loadAnalyticsConfiguration, } from './analytics';
2
+ export { PostgresAnalytics, PostgresConversationRepository, createPostgresAnalyticsServices, migrateAnalyticsDatabase, } from './postgres-analytics';
3
+ export { AnalyticsFieldNotFoundError, AnalyticsQueryError, PostgresAnalyticsQueryService, createPostgresAnalyticsQueryServices, } from './postgres-analytics-query';
@@ -0,0 +1,117 @@
1
+ import { PoolConfig, QueryResult } from 'pg';
2
+ import { AnalyticsFieldType, AnalyticsScalar } from './analytics';
3
+ export type AnalyticsFilter = {
4
+ field: string;
5
+ operator: 'exists';
6
+ } | {
7
+ field: string;
8
+ operator: 'eq';
9
+ value: AnalyticsScalar;
10
+ } | {
11
+ field: string;
12
+ operator: 'in';
13
+ values: AnalyticsScalar[];
14
+ } | {
15
+ field: string;
16
+ operator: 'gt' | 'gte' | 'lt' | 'lte';
17
+ value: number;
18
+ };
19
+ export type AnalyticsMetric = {
20
+ operation: 'count';
21
+ } | {
22
+ operation: 'rate';
23
+ filter: AnalyticsFilter;
24
+ } | {
25
+ operation: 'average' | 'sum';
26
+ field: string;
27
+ };
28
+ export type AnalyticsTimeGranularity = 'hour' | 'day' | 'week' | 'month';
29
+ export type AnalyticsQueryParameters = Readonly<Record<string, unknown>>;
30
+ export interface AnalyticsTimeSeriesRequest {
31
+ agentId: string;
32
+ from: string | number;
33
+ to: string | number;
34
+ granularity: AnalyticsTimeGranularity;
35
+ metric: AnalyticsMetric;
36
+ filters?: AnalyticsFilter[];
37
+ region?: string;
38
+ channel?: string;
39
+ phoneNumber?: string;
40
+ minDurationSeconds?: number;
41
+ maxDurationSeconds?: number;
42
+ }
43
+ export interface TelescopeConversation {
44
+ conversationId: string;
45
+ medium: string;
46
+ agentId: string;
47
+ region?: string;
48
+ phoneNumber?: string;
49
+ duration?: number;
50
+ audioUrl?: string;
51
+ createdAt: number;
52
+ endedAt?: number;
53
+ analytics: Record<string, AnalyticsScalar>;
54
+ }
55
+ export interface TelescopeConversationPage {
56
+ limit: number;
57
+ items: TelescopeConversation[];
58
+ lastConversationId?: string;
59
+ }
60
+ export interface AnalyticsFieldValue {
61
+ value: AnalyticsScalar;
62
+ count: number;
63
+ }
64
+ export interface AnalyticsFieldMetadata {
65
+ field: string;
66
+ type: AnalyticsFieldType;
67
+ distinctValueCount: number;
68
+ }
69
+ export interface AnalyticsFields {
70
+ items: AnalyticsFieldMetadata[];
71
+ }
72
+ export interface AnalyticsFieldValues {
73
+ items: AnalyticsFieldValue[];
74
+ nextCursor: string | null;
75
+ }
76
+ export interface AnalyticsTimeSeriesItem {
77
+ startAt: string;
78
+ value: number | null;
79
+ numerator?: number;
80
+ denominator?: number;
81
+ }
82
+ export interface AnalyticsTimeSeries {
83
+ metric: AnalyticsMetric;
84
+ granularity: AnalyticsTimeGranularity;
85
+ from: string;
86
+ to: string;
87
+ items: AnalyticsTimeSeriesItem[];
88
+ }
89
+ interface Queryable {
90
+ query<TResult extends Record<string, unknown> = Record<string, unknown>>(text: string, values?: unknown[]): Promise<QueryResult<TResult>>;
91
+ }
92
+ export declare class AnalyticsQueryError extends Error {
93
+ name: string;
94
+ }
95
+ export declare class AnalyticsFieldNotFoundError extends Error {
96
+ readonly agentId: string;
97
+ readonly field: string;
98
+ name: string;
99
+ constructor(agentId: string, field: string);
100
+ }
101
+ export declare class PostgresAnalyticsQueryService {
102
+ private readonly database;
103
+ constructor(database: Queryable);
104
+ getConversation(conversationId: string): Promise<TelescopeConversation | undefined>;
105
+ getConversations(query: AnalyticsQueryParameters): Promise<TelescopeConversationPage>;
106
+ getAnalyticsFields(query: AnalyticsQueryParameters): Promise<AnalyticsFields>;
107
+ getAnalyticsFieldValues(field: string, query: AnalyticsQueryParameters): Promise<AnalyticsFieldValues>;
108
+ getTimeSeries(request: AnalyticsTimeSeriesRequest): Promise<AnalyticsTimeSeries>;
109
+ private assertNumericAnalyticsField;
110
+ }
111
+ export interface PostgresAnalyticsQueryServices {
112
+ queries: PostgresAnalyticsQueryService;
113
+ close(): Promise<void>;
114
+ }
115
+ export declare function createPostgresAnalyticsQueryServices(config: PoolConfig): PostgresAnalyticsQueryServices;
116
+ export {};
117
+ //# sourceMappingURL=postgres-analytics-query.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"postgres-analytics-query.d.ts","sourceRoot":"","sources":["../../src/analytics/postgres-analytics-query.ts"],"names":[],"mappings":"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"}