@recombine-ai/platform 0.3.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.
- package/README.md +2 -1
- package/build/agent/agent-analytics.d.ts +14 -0
- package/build/agent/agent-analytics.d.ts.map +1 -0
- package/build/agent/agent-analytics.js +29 -0
- package/build/agent/index.d.ts +1 -0
- package/build/agent/index.d.ts.map +1 -1
- package/build/agent/text-agent.d.ts +4 -3
- package/build/agent/text-agent.d.ts.map +1 -1
- package/build/agent/text-agent.js +8 -1
- package/build/agent/voice-agent.d.ts +4 -3
- package/build/agent/voice-agent.d.ts.map +1 -1
- package/build/agent/voice-agent.js +8 -1
- package/build/analytics/analytics.d.ts +49 -0
- package/build/analytics/analytics.d.ts.map +1 -0
- package/build/analytics/analytics.js +223 -0
- package/build/analytics/index.d.ts +7 -0
- package/build/analytics/index.d.ts.map +1 -0
- package/build/analytics/index.js +3 -0
- package/build/analytics/postgres-analytics-query.d.ts +117 -0
- package/build/analytics/postgres-analytics-query.d.ts.map +1 -0
- package/build/analytics/postgres-analytics-query.js +504 -0
- package/build/analytics/postgres-analytics.d.ts +33 -0
- package/build/analytics/postgres-analytics.d.ts.map +1 -0
- package/build/analytics/postgres-analytics.js +310 -0
- package/build/bosun/std-mocks/platform.d.ts.map +1 -1
- package/build/bosun/std-mocks/platform.js +2 -0
- package/build/bosun/test-agent.d.ts.map +1 -1
- package/build/bosun/test-agent.js +2 -1
- package/build/bosun-app/frontend/client/_app/immutable/assets/0.BhaOIA8N.css +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/assets/0.BhaOIA8N.css.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/assets/0.BhaOIA8N.css.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/-ZTJLlC3.js +2 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/-ZTJLlC3.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/-ZTJLlC3.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/0Q6TVg1G.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/0Q6TVg1G.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/0Q6TVg1G.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{DEz15oJb.js → 4OgEIyh1.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/4OgEIyh1.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/4OgEIyh1.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/8bHWYDyT.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/8bHWYDyT.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/8bHWYDyT.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{C0rPkxmP.js → 9pOOTteE.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/9pOOTteE.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/9pOOTteE.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/AlWqjAqK.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/AlWqjAqK.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/AlWqjAqK.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{B9pMb6OP.js → B9e8MCJ2.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B9e8MCJ2.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B9e8MCJ2.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{BEdAvgYp.js → BDIIq0ko.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BDIIq0ko.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BDIIq0ko.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BFiP5U7M.js +3 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BFiP5U7M.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BFiP5U7M.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{DnMQeiTY.js → BHU9AXbn.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BHU9AXbn.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BHU9AXbn.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{Bp8N7Z1t.js → BHwgmBN2.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BHwgmBN2.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BHwgmBN2.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BOlSQbHE.js +2 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BOlSQbHE.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BOlSQbHE.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BXO2WwQx.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BXO2WwQx.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BXO2WwQx.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{BQIf5msi.js → BZeEhZ9x.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BZeEhZ9x.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BZeEhZ9x.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BbB1C_YH.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BbB1C_YH.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BbB1C_YH.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{DJnDF3d9.js → BtJ1grIE.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BtJ1grIE.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BtJ1grIE.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/C5z36vOP.js +8 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/C5z36vOP.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/C5z36vOP.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CHNsNZYZ.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CHNsNZYZ.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CHNsNZYZ.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{B8q_gCwD.js → CINamuM5.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CINamuM5.js.br +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CINamuM5.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CR6hF_YT.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CR6hF_YT.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CR6hF_YT.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CbXT0Qet.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CbXT0Qet.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CbXT0Qet.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{sKHuRf4Z.js → CkCJ1-zx.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CkCJ1-zx.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CkCJ1-zx.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/Cm25Ihk6.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/Cm25Ihk6.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/Cm25Ihk6.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CmJrlnQL.js +64 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CmJrlnQL.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CmJrlnQL.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CofRL0YY.js +2 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CofRL0YY.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CofRL0YY.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{joiJcRPz.js → Csai_DUZ.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/Csai_DUZ.js.br +6 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/Csai_DUZ.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{CCYriF4C.js → D24F_tet.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/D24F_tet.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/D24F_tet.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{DNvczHUR.js → D35JKLYq.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/D35JKLYq.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/D35JKLYq.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{BcbX6huO.js → D6r2pB3T.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/D6r2pB3T.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/D6r2pB3T.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{ClLUwVGq.js → DJFKRYxi.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DJFKRYxi.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DJFKRYxi.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{BW6P0Ecp.js → DOVgTfHj.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DOVgTfHj.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DOVgTfHj.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DPfKTQVx.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DPfKTQVx.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DPfKTQVx.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{ouMvMh56.js → DSFEfk-V.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DSFEfk-V.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DSFEfk-V.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DbY589nb.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DbY589nb.js.br +2 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DbY589nb.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DfEgi1lN.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DfEgi1lN.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DfEgi1lN.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{BJ9KKLWf.js → DsRUoWL6.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DsRUoWL6.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DsRUoWL6.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{DjujL8K1.js → FLx39vZ1.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/FLx39vZ1.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/FLx39vZ1.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{BBk8_Xpk.js → NwoUwoIi.js} +2 -2
- package/build/bosun-app/frontend/client/_app/immutable/chunks/NwoUwoIi.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/NwoUwoIi.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/{C9yBjdYI.js → VLxbY_3V.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/VLxbY_3V.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/VLxbY_3V.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/uEzaTD9T.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/uEzaTD9T.js.br +2 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/uEzaTD9T.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/app.fITODAfp.js +2 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/app.fITODAfp.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/app.fITODAfp.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.CuqUO5EQ.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.CuqUO5EQ.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.CuqUO5EQ.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{0.CyFCeOko.js → 0.sWxZKx1V.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/0.sWxZKx1V.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/0.sWxZKx1V.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/1.PQXY4edq.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/1.PQXY4edq.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/1.PQXY4edq.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{10.CQP8ZYdc.js → 10.BP2gctlm.js} +7 -7
- package/build/bosun-app/frontend/client/_app/immutable/nodes/10.BP2gctlm.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/10.BP2gctlm.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{15.drIyAxl2.js → 15.D4h0JT65.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/15.D4h0JT65.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/15.D4h0JT65.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/17.D5wsHo5R.js +3 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/17.D5wsHo5R.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/17.D5wsHo5R.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CZp-IBH8.js +11 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CZp-IBH8.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CZp-IBH8.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{2.lZxPEqtw.js → 2.DaZm8LbH.js} +3 -3
- package/build/bosun-app/frontend/client/_app/immutable/nodes/2.DaZm8LbH.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/2.DaZm8LbH.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/3.Bk3buFqf.js +1 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/3.Bk3buFqf.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/3.Bk3buFqf.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{4.B_swg0wq.js → 4.BWY-PEkr.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/4.BWY-PEkr.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/4.BWY-PEkr.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{5.CJfS926N.js → 5.Cl70jzrZ.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/5.Cl70jzrZ.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/5.Cl70jzrZ.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{6.4aRjHu4u.js → 6.Cfkc99si.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/6.Cfkc99si.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/6.Cfkc99si.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{8.BZFIHe4g.js → 8.CmB3ZvKy.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/8.CmB3ZvKy.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/8.CmB3ZvKy.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/{9.BYJRzNt4.js → 9.8UAsXj0n.js} +1 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/9.8UAsXj0n.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/9.8UAsXj0n.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/version.json +1 -1
- package/build/bosun-app/frontend/client/_app/version.json.br +0 -0
- package/build/bosun-app/frontend/client/_app/version.json.gz +0 -0
- package/build/bosun-app/frontend/handler.js +4 -4
- package/build/bosun-app/frontend/index.js +4 -4
- package/build/bosun-app/frontend/server/chunks/chunks/{internal.js-V8Wfo1-F.js → internal.js-BYUssiWE.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/chunks/{internal.js-V8Wfo1-F.js.map → internal.js-BYUssiWE.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/chunks/{schemas.js-W-DP3mDr.js → schemas.js-b9Mui_5N.js} +187 -2
- package/build/bosun-app/frontend/server/chunks/chunks/schemas.js-b9Mui_5N.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/chunks/{source-selection.js-Cc6RX6-m.js → source-selection.js-BpCr9ar-.js} +47 -4
- package/build/bosun-app/frontend/server/chunks/chunks/source-selection.js-BpCr9ar-.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/chunks/{sources.server.js-B6fpC51P.js → sources.server.js-DIj2VjCx.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/chunks/{sources.server.js-B6fpC51P.js.map → sources.server.js-DIj2VjCx.js.map} +1 -1
- 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
- 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
- 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
- package/build/bosun-app/frontend/server/chunks/entries/endpoints/traces/api/proxy/_...path_/_server.ts.js-DDDiZFhL.js.map +1 -0
- 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
- 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
- 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
- package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/latency/_page.svelte.js-DXMXSrkC.js.map +1 -0
- 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
- package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/traces/_page.svelte.js-CZkbHRGl.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/{_layout.svelte.js-Dvn3tfM7.js → _layout.svelte.js-B4Yws-GS.js} +328 -35
- package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_layout.svelte.js-B4Yws-GS.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/{handler-I7zF-fv9.js → handler-B-UxYyko.js} +3 -3
- package/build/bosun-app/frontend/server/chunks/{handler-I7zF-fv9.js.map → handler-B-UxYyko.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/{index.js-Ca0Ef2Tt.js → index.js-CleJzVFo.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/{index.js-Ca0Ef2Tt.js.map → index.js-CleJzVFo.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/{manifest.js-D22OChaf.js → manifest.js-C8NquSUu.js} +18 -18
- package/build/bosun-app/frontend/server/chunks/{manifest.js-D22OChaf.js.map → manifest.js-C8NquSUu.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/0.js-BUVJh5Uv.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/0.js-BUVJh5Uv.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/nodes/1.js-BKMg62KW.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/{1.js-BesNpd2w.js.map → 1.js-BKMg62KW.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/10.js-Bz0enUzA.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/10.js-Bz0enUzA.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/nodes/{15.js-cNd06B9T.js → 15.js-nE6nl5S8.js} +2 -2
- package/build/bosun-app/frontend/server/chunks/nodes/{15.js-cNd06B9T.js.map → 15.js-nE6nl5S8.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/17.js-CplX6Ruz.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/17.js-CplX6Ruz.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/nodes/18.js-cGVVSoEn.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/18.js-cGVVSoEn.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/nodes/2.js-CliMdUrH.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/2.js-CliMdUrH.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/nodes/3.js-BQpmmrUv.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/3.js-BQpmmrUv.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/nodes/4.js-BgSyMW3D.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/4.js-BgSyMW3D.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/nodes/5.js-CqRWSoO5.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/{5.js-DNbqpjRZ.js.map → 5.js-CqRWSoO5.js.map} +1 -1
- package/build/bosun-app/frontend/server/chunks/nodes/6.js-CrEQ411L.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/6.js-CrEQ411L.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/nodes/8.js-CiOj2-c5.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/8.js-CiOj2-c5.js.map +1 -0
- package/build/bosun-app/frontend/server/chunks/nodes/9.js-BMwqRSfy.js +9 -0
- package/build/bosun-app/frontend/server/chunks/nodes/9.js-BMwqRSfy.js.map +1 -0
- package/build/build/build.d.ts +3 -0
- package/build/build/build.d.ts.map +1 -0
- package/build/build/build.js +73 -0
- package/build/build/cli.d.ts +2 -11
- package/build/build/cli.d.ts.map +1 -1
- package/build/build/cli.js +19 -81
- package/build/build/common.d.ts +6 -9
- package/build/build/common.d.ts.map +1 -1
- package/build/build/common.js +131 -40
- package/build/build/config.d.ts +9 -0
- package/build/build/config.d.ts.map +1 -0
- package/build/build/config.js +24 -0
- package/build/build/index.d.ts +4 -6
- package/build/build/index.d.ts.map +1 -1
- package/build/build/index.js +3 -3
- package/build/call-control/types.d.ts +1 -1
- package/build/call-control/types.d.ts.map +1 -1
- package/build/core/make-text-platform.d.ts +3 -1
- package/build/core/make-text-platform.d.ts.map +1 -1
- package/build/core/make-text-platform.js +3 -1
- package/build/core/make-voice-platform.d.ts +3 -1
- package/build/core/make-voice-platform.d.ts.map +1 -1
- package/build/core/make-voice-platform.js +3 -1
- package/build/core/platform.d.ts +2 -0
- package/build/core/platform.d.ts.map +1 -1
- package/build/voice-agent-api/call-end.d.ts +19 -0
- package/build/voice-agent-api/call-end.d.ts.map +1 -0
- package/build/voice-agent-api/call-end.js +58 -0
- package/build/voice-agent-api/voice-http.d.ts +3 -1
- package/build/voice-agent-api/voice-http.d.ts.map +1 -1
- package/build/voice-agent-api/voice-http.js +27 -7
- package/package.json +5 -1
- package/build/bosun-app/frontend/client/_app/immutable/assets/0.B5fEz2jr.css +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/assets/0.B5fEz2jr.css.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/assets/0.B5fEz2jr.css.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/9mOMnnWN.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/9mOMnnWN.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/9mOMnnWN.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B0nqNj93.js +0 -2
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B0nqNj93.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B0nqNj93.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B1dhmiqQ.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B1dhmiqQ.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B1dhmiqQ.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B8q_gCwD.js.br +0 -2
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B8q_gCwD.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B9pMb6OP.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/B9pMb6OP.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BBk8_Xpk.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BBk8_Xpk.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BEdAvgYp.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BEdAvgYp.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BJ9KKLWf.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BJ9KKLWf.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BKW04JRY.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BKW04JRY.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BKW04JRY.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BOiOqwrA.js +0 -3
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BOiOqwrA.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BOiOqwrA.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BQIf5msi.js.br +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BQIf5msi.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BUkXSKT3.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BUkXSKT3.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BUkXSKT3.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BW6P0Ecp.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BW6P0Ecp.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BcbX6huO.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BcbX6huO.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BoX_BZZY.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BoX_BZZY.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/BoX_BZZY.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/Bp8N7Z1t.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/Bp8N7Z1t.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/C0rPkxmP.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/C0rPkxmP.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/C3cROXCy.js +0 -9
- package/build/bosun-app/frontend/client/_app/immutable/chunks/C3cROXCy.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/C3cROXCy.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/C9yBjdYI.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/C9yBjdYI.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CCYriF4C.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CCYriF4C.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CHCMKZAC.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CHCMKZAC.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CHCMKZAC.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CR-uVjxM.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CR-uVjxM.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CR-uVjxM.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CR5IRTqC.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CR5IRTqC.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/CR5IRTqC.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/ClLUwVGq.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/ClLUwVGq.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DEz15oJb.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DEz15oJb.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DGc0An5V.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DGc0An5V.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DGc0An5V.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DJnDF3d9.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DJnDF3d9.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DNvczHUR.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DNvczHUR.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DXsF11_5.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DXsF11_5.js.br +0 -2
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DXsF11_5.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/Dba0_Upf.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/Dba0_Upf.js.br +0 -2
- package/build/bosun-app/frontend/client/_app/immutable/chunks/Dba0_Upf.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DjujL8K1.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DjujL8K1.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DnMQeiTY.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DnMQeiTY.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DuQdgMax.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DuQdgMax.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/DuQdgMax.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/OERrxy3_.js +0 -64
- package/build/bosun-app/frontend/client/_app/immutable/chunks/OERrxy3_.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/OERrxy3_.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/ddC1NP9R.js +0 -2
- package/build/bosun-app/frontend/client/_app/immutable/chunks/ddC1NP9R.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/ddC1NP9R.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/joiJcRPz.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/joiJcRPz.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/ouMvMh56.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/ouMvMh56.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/qiSVE_6c.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/chunks/qiSVE_6c.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/qiSVE_6c.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/sKHuRf4Z.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/chunks/sKHuRf4Z.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/app.Bni-2yHM.js +0 -2
- package/build/bosun-app/frontend/client/_app/immutable/entry/app.Bni-2yHM.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/app.Bni-2yHM.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.Bwh8stkk.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.Bwh8stkk.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/entry/start.Bwh8stkk.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/0.CyFCeOko.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/0.CyFCeOko.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/1.D9Za90TC.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/1.D9Za90TC.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/1.D9Za90TC.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/10.CQP8ZYdc.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/10.CQP8ZYdc.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/15.drIyAxl2.js.br +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/15.drIyAxl2.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/17.C-6g-4TG.js +0 -3
- package/build/bosun-app/frontend/client/_app/immutable/nodes/17.C-6g-4TG.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/17.C-6g-4TG.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CKu_cfLu.js +0 -11
- package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CKu_cfLu.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/18.CKu_cfLu.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/2.lZxPEqtw.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/2.lZxPEqtw.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/3.BjH4Ma-k.js +0 -1
- package/build/bosun-app/frontend/client/_app/immutable/nodes/3.BjH4Ma-k.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/3.BjH4Ma-k.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/4.B_swg0wq.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/4.B_swg0wq.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/5.CJfS926N.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/5.CJfS926N.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/6.4aRjHu4u.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/6.4aRjHu4u.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/8.BZFIHe4g.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/8.BZFIHe4g.js.gz +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/9.BYJRzNt4.js.br +0 -0
- package/build/bosun-app/frontend/client/_app/immutable/nodes/9.BYJRzNt4.js.gz +0 -0
- package/build/bosun-app/frontend/server/chunks/chunks/schemas.js-W-DP3mDr.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/chunks/source-selection.js-Cc6RX6-m.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/entries/endpoints/traces/api/proxy/_...path_/_server.ts.js-CHrOiduq.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/latency/_page.svelte.js-tdUdTo4m.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_conversationId_/traces/_page.svelte.js-Ca79DBzJ.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/entries/pages/traces/conversations/_layout.svelte.js-Dvn3tfM7.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/nodes/0.js-CoDyOiLt.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/0.js-CoDyOiLt.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/nodes/1.js-BesNpd2w.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/10.js-DN5elTKV.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/10.js-DN5elTKV.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/nodes/17.js-DExEAB_e.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/17.js-DExEAB_e.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/nodes/18.js-OLWFvVu0.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/18.js-OLWFvVu0.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/nodes/2.js-DdMhYSQT.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/2.js-DdMhYSQT.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/nodes/3.js-DRo_79wF.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/3.js-DRo_79wF.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/nodes/4.js-Bb8ZnG8K.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/4.js-Bb8ZnG8K.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/nodes/5.js-DNbqpjRZ.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/6.js-MMZWg86o.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/6.js-MMZWg86o.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/nodes/8.js-Cs981zJ4.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/8.js-Cs981zJ4.js.map +0 -1
- package/build/bosun-app/frontend/server/chunks/nodes/9.js-h4jeZZT-.js +0 -9
- package/build/bosun-app/frontend/server/chunks/nodes/9.js-h4jeZZT-.js.map +0 -1
- package/build/build/agent-service.d.ts +0 -8
- package/build/build/agent-service.d.ts.map +0 -1
- package/build/build/agent-service.js +0 -32
- package/build/build/text-function.d.ts +0 -6
- package/build/build/text-function.d.ts.map +0 -1
- package/build/build/text-function.js +0 -55
- /package/build/bosun-app/frontend/client/_app/immutable/assets/{ReadOnlyMonacoDiff.iiWNRlR-.css → Modal.iiWNRlR-.css} +0 -0
- /package/build/bosun-app/frontend/client/_app/immutable/assets/{ReadOnlyMonacoDiff.iiWNRlR-.css.br → Modal.iiWNRlR-.css.br} +0 -0
- /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. |
|
|
@@ -19,7 +20,7 @@ packages before. Each area has a subpath export:
|
|
|
19
20
|
| `@recombine-ai/platform/text-agent-handlers` | The handlers and ports of a text agent service. |
|
|
20
21
|
| `@recombine-ai/platform/steps` | Reusable workflow steps. |
|
|
21
22
|
| `@recombine-ai/platform/bosun` | The bindings that let the Bosun IDE run agents built on this package. |
|
|
22
|
-
| `@recombine-ai/platform/build` | The esbuild
|
|
23
|
+
| `@recombine-ai/platform/build` | The esbuild bundler for the deployable artifacts, run with `rc-build`. |
|
|
23
24
|
|
|
24
25
|
An area exports its public names only through its index file. The larger areas have their own
|
|
25
26
|
README with usage examples in their directory under `src/`.
|
|
@@ -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
|
+
}
|
package/build/agent/index.d.ts
CHANGED
|
@@ -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
|
|
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;
|
|
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
|
|
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
|
|
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
|
|
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;
|
|
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
|
|
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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"}
|