@rudderhq/server 0.4.5 → 0.4.6-canary.1

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 (327) hide show
  1. package/dist/app.d.ts.map +1 -1
  2. package/dist/app.js +2 -0
  3. package/dist/app.js.map +1 -1
  4. package/dist/auth/better-auth.d.ts +15 -3
  5. package/dist/auth/better-auth.d.ts.map +1 -1
  6. package/dist/auth/better-auth.js.map +1 -1
  7. package/dist/bootstrap/plugin-host-runtime.d.ts +8 -8
  8. package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
  9. package/dist/bootstrap/register-api-routes.js +2 -0
  10. package/dist/bootstrap/register-api-routes.js.map +1 -1
  11. package/dist/bundled-plugins/plugin-linear/dist/worker.js +27 -32
  12. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +2 -2
  13. package/dist/bundled-plugins/plugin-linear/package.json +1 -1
  14. package/dist/config.d.ts +0 -8
  15. package/dist/config.d.ts.map +1 -1
  16. package/dist/config.js +1 -30
  17. package/dist/config.js.map +1 -1
  18. package/dist/index.d.ts.map +1 -1
  19. package/dist/index.js +0 -18
  20. package/dist/index.js.map +1 -1
  21. package/dist/local-runtime.d.ts +0 -3
  22. package/dist/local-runtime.d.ts.map +1 -1
  23. package/dist/local-runtime.js +0 -34
  24. package/dist/local-runtime.js.map +1 -1
  25. package/dist/middleware/auth.d.ts.map +1 -1
  26. package/dist/middleware/auth.js +14 -2
  27. package/dist/middleware/auth.js.map +1 -1
  28. package/dist/onboarding-assets/ceo/SOUL.md +8 -5
  29. package/dist/routes/access-onboarding.helpers.d.ts.map +1 -1
  30. package/dist/routes/access-onboarding.helpers.js +2 -24
  31. package/dist/routes/access-onboarding.helpers.js.map +1 -1
  32. package/dist/routes/access.helpers.d.ts +1 -1
  33. package/dist/routes/approvals.d.ts.map +1 -1
  34. package/dist/routes/approvals.js +1 -89
  35. package/dist/routes/approvals.js.map +1 -1
  36. package/dist/routes/browser.d.ts +30 -0
  37. package/dist/routes/browser.d.ts.map +1 -0
  38. package/dist/routes/browser.js +263 -0
  39. package/dist/routes/browser.js.map +1 -0
  40. package/dist/routes/chats.d.ts.map +1 -1
  41. package/dist/routes/chats.js +13 -232
  42. package/dist/routes/chats.js.map +1 -1
  43. package/dist/routes/chats.stream-routes.d.ts.map +1 -1
  44. package/dist/routes/chats.stream-routes.js +46 -227
  45. package/dist/routes/chats.stream-routes.js.map +1 -1
  46. package/dist/routes/instance-settings.d.ts.map +1 -1
  47. package/dist/routes/instance-settings.js +26 -146
  48. package/dist/routes/instance-settings.js.map +1 -1
  49. package/dist/routes/onboarding.d.ts.map +1 -1
  50. package/dist/routes/onboarding.js +33 -31
  51. package/dist/routes/onboarding.js.map +1 -1
  52. package/dist/routes/plugin-ui-static.d.ts.map +1 -1
  53. package/dist/routes/plugin-ui-static.js +2 -4
  54. package/dist/routes/plugin-ui-static.js.map +1 -1
  55. package/dist/routes/plugins.d.ts.map +1 -1
  56. package/dist/routes/plugins.js +2 -4
  57. package/dist/routes/plugins.js.map +1 -1
  58. package/dist/services/access.d.ts +23 -23
  59. package/dist/services/activity-log.d.ts.map +1 -1
  60. package/dist/services/activity-log.js +2 -40
  61. package/dist/services/activity-log.js.map +1 -1
  62. package/dist/services/activity.d.ts +13 -13
  63. package/dist/services/agent-run-context.d.ts +2 -1
  64. package/dist/services/agent-run-context.d.ts.map +1 -1
  65. package/dist/services/agent-run-context.js +29 -4
  66. package/dist/services/agent-run-context.js.map +1 -1
  67. package/dist/services/agents.d.ts +36 -36
  68. package/dist/services/approvals.d.ts +18 -18
  69. package/dist/services/assets.d.ts +6 -6
  70. package/dist/services/automation-chat-output.d.ts +1 -1
  71. package/dist/services/automations.d.ts +37 -37
  72. package/dist/services/automations.d.ts.map +1 -1
  73. package/dist/services/automations.js +2 -6
  74. package/dist/services/automations.js.map +1 -1
  75. package/dist/services/board-auth.d.ts +38 -38
  76. package/dist/services/browser-broker.d.ts +43 -0
  77. package/dist/services/browser-broker.d.ts.map +1 -0
  78. package/dist/services/browser-broker.js +173 -0
  79. package/dist/services/browser-broker.js.map +1 -0
  80. package/dist/services/browser-broker.test.d.ts +2 -0
  81. package/dist/services/browser-broker.test.d.ts.map +1 -0
  82. package/dist/services/browser-broker.test.js +154 -0
  83. package/dist/services/browser-broker.test.js.map +1 -0
  84. package/dist/services/browser-capability.d.ts +20 -0
  85. package/dist/services/browser-capability.d.ts.map +1 -0
  86. package/dist/services/browser-capability.js +29 -0
  87. package/dist/services/browser-capability.js.map +1 -0
  88. package/dist/services/calendar.d.ts +34 -34
  89. package/dist/services/chat-agent-runs.d.ts.map +1 -1
  90. package/dist/services/chat-agent-runs.js +2 -4
  91. package/dist/services/chat-agent-runs.js.map +1 -1
  92. package/dist/services/chat-assistant.d.ts.map +1 -1
  93. package/dist/services/chat-assistant.js +6 -4
  94. package/dist/services/chat-assistant.js.map +1 -1
  95. package/dist/services/chat-assistant.runtime-batch.d.ts +3 -0
  96. package/dist/services/chat-assistant.runtime-batch.d.ts.map +1 -0
  97. package/dist/services/chat-assistant.runtime-batch.js +16 -0
  98. package/dist/services/chat-assistant.runtime-batch.js.map +1 -0
  99. package/dist/services/chat-work-manifest.d.ts +7 -0
  100. package/dist/services/chat-work-manifest.d.ts.map +1 -0
  101. package/dist/services/chat-work-manifest.js +235 -0
  102. package/dist/services/chat-work-manifest.js.map +1 -0
  103. package/dist/services/chats.d.ts +64 -64
  104. package/dist/services/chats.d.ts.map +1 -1
  105. package/dist/services/chats.js +2 -4
  106. package/dist/services/chats.js.map +1 -1
  107. package/dist/services/costs.d.ts +2 -2
  108. package/dist/services/costs.d.ts.map +1 -1
  109. package/dist/services/costs.js +0 -32
  110. package/dist/services/costs.js.map +1 -1
  111. package/dist/services/finance.d.ts +11 -11
  112. package/dist/services/goals.d.ts +20 -20
  113. package/dist/services/heartbeat.d.ts +1 -1
  114. package/dist/services/heartbeat.d.ts.map +1 -1
  115. package/dist/services/heartbeat.js +1 -1
  116. package/dist/services/heartbeat.js.map +1 -1
  117. package/dist/services/instance-settings.d.ts +3 -1
  118. package/dist/services/instance-settings.d.ts.map +1 -1
  119. package/dist/services/instance-settings.js +30 -1
  120. package/dist/services/instance-settings.js.map +1 -1
  121. package/dist/services/integrations/agent-integrations.d.ts +8 -8
  122. package/dist/services/integrations/custom-integrations.d.ts +3 -3
  123. package/dist/services/integrations/feishu/inbound-dispatcher-db.d.ts.map +1 -1
  124. package/dist/services/integrations/feishu/inbound-dispatcher-db.js +10 -11
  125. package/dist/services/integrations/feishu/inbound-dispatcher-db.js.map +1 -1
  126. package/dist/services/integrations/feishu/user-bindings.d.ts.map +1 -1
  127. package/dist/services/integrations/feishu/user-bindings.js +2 -4
  128. package/dist/services/integrations/feishu/user-bindings.js.map +1 -1
  129. package/dist/services/issue-approvals.d.ts +3 -3
  130. package/dist/services/issues.comments-attachments.d.ts +8 -8
  131. package/dist/services/issues.d.ts +19 -19
  132. package/dist/services/issues.helpers.d.ts.map +1 -1
  133. package/dist/services/issues.helpers.js +2 -6
  134. package/dist/services/issues.helpers.js.map +1 -1
  135. package/dist/services/knowledge-portability/organization-skills.d.ts +2 -1
  136. package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
  137. package/dist/services/knowledge-portability/organization-skills.js +16 -6
  138. package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
  139. package/dist/services/messenger.d.ts +3 -3
  140. package/dist/services/messenger.d.ts.map +1 -1
  141. package/dist/services/messenger.js +3 -0
  142. package/dist/services/messenger.js.map +1 -1
  143. package/dist/services/organization-intelligence-profiles.d.ts.map +1 -1
  144. package/dist/services/organization-intelligence-profiles.js +2 -0
  145. package/dist/services/organization-intelligence-profiles.js.map +1 -1
  146. package/dist/services/orgs.d.ts +1 -1
  147. package/dist/services/orgs.d.ts.map +1 -1
  148. package/dist/services/orgs.js +2 -10
  149. package/dist/services/orgs.js.map +1 -1
  150. package/dist/services/plugin-job-scheduler.d.ts.map +1 -1
  151. package/dist/services/plugin-job-scheduler.js +20 -132
  152. package/dist/services/plugin-job-scheduler.js.map +1 -1
  153. package/dist/services/plugin-registry.d.ts +71 -71
  154. package/dist/services/plugin-registry.d.ts.map +1 -1
  155. package/dist/services/plugin-registry.js +2 -5
  156. package/dist/services/plugin-registry.js.map +1 -1
  157. package/dist/services/postgres-errors.d.ts +6 -0
  158. package/dist/services/postgres-errors.d.ts.map +1 -0
  159. package/dist/services/postgres-errors.js +30 -0
  160. package/dist/services/postgres-errors.js.map +1 -0
  161. package/dist/services/projects.d.ts +2 -2
  162. package/dist/services/run-intelligence.d.ts +0 -5
  163. package/dist/services/run-intelligence.d.ts.map +1 -1
  164. package/dist/services/run-intelligence.js +1 -11
  165. package/dist/services/run-intelligence.js.map +1 -1
  166. package/dist/services/runtime-kernel/heartbeat.core.d.ts +1 -34
  167. package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
  168. package/dist/services/runtime-kernel/heartbeat.core.js +0 -35
  169. package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
  170. package/dist/services/runtime-kernel/heartbeat.d.ts +29 -29
  171. package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
  172. package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
  173. package/dist/services/runtime-kernel/heartbeat.execute.js +849 -950
  174. package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
  175. package/dist/services/runtime-kernel/heartbeat.js +2 -119
  176. package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
  177. package/dist/services/runtime-kernel/heartbeat.sessions.d.ts.map +1 -1
  178. package/dist/services/runtime-kernel/heartbeat.sessions.js +1 -1
  179. package/dist/services/runtime-kernel/heartbeat.sessions.js.map +1 -1
  180. package/dist/services/runtime-kernel/model-fallback.d.ts +2 -0
  181. package/dist/services/runtime-kernel/model-fallback.d.ts.map +1 -1
  182. package/dist/services/runtime-kernel/model-fallback.js +108 -9
  183. package/dist/services/runtime-kernel/model-fallback.js.map +1 -1
  184. package/dist/services/secrets.d.ts +20 -20
  185. package/dist/services/workspace-operations.d.ts.map +1 -1
  186. package/dist/services/workspace-operations.js +48 -74
  187. package/dist/services/workspace-operations.js.map +1 -1
  188. package/dist/services/workspace-runtime.services.d.ts +3 -3
  189. package/package.json +19 -23
  190. package/resources/bundled-skills/browser/SKILL.md +49 -0
  191. package/resources/bundled-skills/browser/agents/openai.yaml +4 -0
  192. package/resources/bundled-skills/browser/references/tool-contract.md +73 -0
  193. package/resources/bundled-skills/rudder/SKILL.md +5 -2
  194. package/resources/bundled-skills/rudder/references/cli-reference.md +17 -0
  195. package/skills/browser/SKILL.md +49 -0
  196. package/skills/browser/agents/openai.yaml +4 -0
  197. package/skills/browser/references/tool-contract.md +73 -0
  198. package/skills/rudder/SKILL.md +5 -2
  199. package/skills/rudder/references/cli-reference.md +17 -0
  200. package/ui-dist/assets/abnfDiagram-VRR7QNED-UdnRjOt5.js +1 -0
  201. package/ui-dist/assets/arc-DqWAOCPb.js +1 -0
  202. package/ui-dist/assets/architectureDiagram-ZJ3FMSHR-C0BVszD_.js +36 -0
  203. package/ui-dist/assets/blockDiagram-677ZJIJ3-jI1GYvsK.js +132 -0
  204. package/ui-dist/assets/c4Diagram-LMCZKHZV-BUskTH8O.js +10 -0
  205. package/ui-dist/assets/channel-DuVz3zrR.js +1 -0
  206. package/ui-dist/assets/{chunk-QZHKN3VN-CoUe43bE.js → chunk-2Q5K7J3B-DnXbkSRv.js} +1 -1
  207. package/ui-dist/assets/{chunk-JSJVCQXG-CGWgDKBb.js → chunk-32BRIVSS-CItDm5nZ.js} +1 -1
  208. package/ui-dist/assets/{chunk-FMBD7UC4-D_yZ_WmF.js → chunk-5VM5RSS4-DDWOtVg4.js} +1 -1
  209. package/ui-dist/assets/chunk-EX3LRPZG-3P2vrzg-.js +231 -0
  210. package/ui-dist/assets/{chunk-4BX2VUAB-Cd0jMFjT.js → chunk-JWPE2WC7-Cddilj_R.js} +1 -1
  211. package/ui-dist/assets/chunk-MOJQB5TN-lFfFNAzo.js +88 -0
  212. package/ui-dist/assets/chunk-RYQCIY6F-Bx6usdO8.js +1 -0
  213. package/ui-dist/assets/chunk-V7JOEXUC-DJJZibRk.js +206 -0
  214. package/ui-dist/assets/{chunk-KX2RTZJC-PgfQ6Dqz.js → chunk-VR4S4FIN-JsA7MsJ2.js} +1 -1
  215. package/ui-dist/assets/{chunk-55IACEB6-C-AmshGj.js → chunk-XXDRQBXY-ieRhxMcL.js} +1 -1
  216. package/ui-dist/assets/classDiagram-OUVF2IWQ-CPg_NswG.js +1 -0
  217. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-CPg_NswG.js +1 -0
  218. package/ui-dist/assets/{cose-bilkent-S5V4N54A-jsoDVyK9.js → cose-bilkent-JH36ORCC-C8RKSRW3.js} +1 -1
  219. package/ui-dist/assets/cynefin-VYW2F7L2-BpLH3NYF.js +178 -0
  220. package/ui-dist/assets/cynefinDiagram-TSTJHNR4-BE910bVh.js +62 -0
  221. package/ui-dist/assets/cytoscape.esm-DTSO7Bv0.js +331 -0
  222. package/ui-dist/assets/dagre-VKFMJZFB-Y3oEC2I7.js +4 -0
  223. package/ui-dist/assets/diagram-FQU43EPY-CRR8acur.js +3 -0
  224. package/ui-dist/assets/diagram-G47NLZAW-CYMkvxPa.js +24 -0
  225. package/ui-dist/assets/diagram-NH7WQ7WH-5pDqjsg8.js +24 -0
  226. package/ui-dist/assets/diagram-OA4YK3LP-BLftqX4w.js +30 -0
  227. package/ui-dist/assets/diagram-WEI45ONY-C8Wlpiya.js +41 -0
  228. package/ui-dist/assets/ebnfDiagram-CCIWWBDH-BkNqh_K_.js +1 -0
  229. package/ui-dist/assets/erDiagram-Q63AITRT-BMii4oU_.js +85 -0
  230. package/ui-dist/assets/flowDiagram-23GEKE2U-DDZzMurM.js +156 -0
  231. package/ui-dist/assets/ganttDiagram-NO4QXBWP-CAVNlZo_.js +292 -0
  232. package/ui-dist/assets/gitGraphDiagram-IHSO6WYX-CnVqJTno.js +106 -0
  233. package/ui-dist/assets/graph-UuBzmM6i.js +1 -0
  234. package/ui-dist/assets/{index-BBL80GJ3.js → index-B8KTqTd-.js} +1 -1
  235. package/ui-dist/assets/{index-BSRzECfZ.js → index-BCFDdipt.js} +1 -1
  236. package/ui-dist/assets/{index-Be_UUduv.js → index-BCRNL8Ur.js} +1 -1
  237. package/ui-dist/assets/{index-DgfqS5r-.js → index-BoYg6lnD.js} +1 -1
  238. package/ui-dist/assets/{index-LKZoMmLm.js → index-ByMcYjRc.js} +1 -1
  239. package/ui-dist/assets/index-C0SZ-iPk.css +1 -0
  240. package/ui-dist/assets/{index-DDvz8goz.js → index-CE8o_odr.js} +1 -1
  241. package/ui-dist/assets/{index-C2Ne_Flh.js → index-CUD9_zON.js} +1 -1
  242. package/ui-dist/assets/{index-Cd5DOkgF.js → index-CfJwloTV.js} +1 -1
  243. package/ui-dist/assets/{index-CMRK9PUO.js → index-Cps6JXnH.js} +1 -1
  244. package/ui-dist/assets/{index-CkdLQ1A4.js → index-DFFkOhH6.js} +1 -1
  245. package/ui-dist/assets/{index-ipqs2akW.js → index-DLcjSOvN.js} +1 -1
  246. package/ui-dist/assets/{index-B-4En24L.js → index-D_zjkSK9.js} +1 -1
  247. package/ui-dist/assets/{index-CjLYHamo.js → index-DhkpIEG5.js} +1 -1
  248. package/ui-dist/assets/{index-B4KMgdrI.js → index-HkHmJ1SI.js} +1 -1
  249. package/ui-dist/assets/{index-Dxe3o4t_.js → index-QU8L2MDH.js} +1 -1
  250. package/ui-dist/assets/{index-1Ubio04r.js → index-QXiy-HtS.js} +1 -1
  251. package/ui-dist/assets/{index-BXbeltXq.js → index-XYoWwmC5.js} +1 -1
  252. package/ui-dist/assets/{index-BL10wT_h.js → index-eXis7jEz.js} +454 -470
  253. package/ui-dist/assets/infoDiagram-FWYZ7A6U-zHkiZLiR.js +2 -0
  254. package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-C08ZUJEU.js → ishikawaDiagram-FXEZZL3T-Box-AMwH.js} +3 -3
  255. package/ui-dist/assets/journeyDiagram-5HDEW3XC-CFIzHPs2.js +139 -0
  256. package/ui-dist/assets/{kanban-definition-K7BYSVSG-BcJd4-9s.js → kanban-definition-HUTT4EX6-DHqpBUqM.js} +8 -8
  257. package/ui-dist/assets/katex-C5jXJg4s.js +257 -0
  258. package/ui-dist/assets/layout-C-yC2nBc.js +1 -0
  259. package/ui-dist/assets/{linear-CqN63wCD.js → linear-DUNXAcN5.js} +1 -1
  260. package/ui-dist/assets/map-BercEElL.js +1 -0
  261. package/ui-dist/assets/mermaid.core-Nehb2FR-.js +314 -0
  262. package/ui-dist/assets/mindmap-definition-LN4V7U3C-D0zryK2s.js +96 -0
  263. package/ui-dist/assets/pegDiagram-2B236MQR-C5vq9Ju0.js +1 -0
  264. package/ui-dist/assets/pieDiagram-ENE6RG2P-D0VOjPBZ.js +39 -0
  265. package/ui-dist/assets/quadrantDiagram-ABIIQ3AL-B8xuixyw.js +7 -0
  266. package/ui-dist/assets/railroadDiagram-RFXS5EU6-Bf9YgNO5.js +1 -0
  267. package/ui-dist/assets/requirementDiagram-TGXJPOKE-CDEqlFZu.js +84 -0
  268. package/ui-dist/assets/sankeyDiagram-HTMAVEWB-C7PsAz-L.js +40 -0
  269. package/ui-dist/assets/sequenceDiagram-DBY2YBRQ-DzvSiGUe.js +162 -0
  270. package/ui-dist/assets/sizeCapture-X5ZJPWSS-DSGNUJ8t.js +1 -0
  271. package/ui-dist/assets/stateDiagram-2N3HPSRC-BZtTZHzp.js +1 -0
  272. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-BGgjQnDH.js +1 -0
  273. package/ui-dist/assets/swimlanes-5IMT3BWC-DV7m1IAS.js +2 -0
  274. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-QL5BklQV.js +8 -0
  275. package/ui-dist/assets/timeline-definition-FHXFAJF6-BMOmWJRu.js +120 -0
  276. package/ui-dist/assets/vennDiagram-L72KCM5P-DS6i029a.js +34 -0
  277. package/ui-dist/assets/wardleyDiagram-EHGQE667-Ai7opcM1.js +78 -0
  278. package/ui-dist/assets/xychartDiagram-FW5EYKEG-BlA47Exk.js +7 -0
  279. package/ui-dist/index.html +2 -2
  280. package/dist/langfuse-transcript.d.ts +0 -33
  281. package/dist/langfuse-transcript.d.ts.map +0 -1
  282. package/dist/langfuse-transcript.js +0 -401
  283. package/dist/langfuse-transcript.js.map +0 -1
  284. package/dist/langfuse.d.ts +0 -93
  285. package/dist/langfuse.d.ts.map +0 -1
  286. package/dist/langfuse.js +0 -420
  287. package/dist/langfuse.js.map +0 -1
  288. package/ui-dist/assets/_basePickBy-Cniq5QAz.js +0 -1
  289. package/ui-dist/assets/_baseUniq-aSj0wr7H.js +0 -1
  290. package/ui-dist/assets/arc-C4Mg91_a.js +0 -1
  291. package/ui-dist/assets/architectureDiagram-2XIMDMQ5-DfqLRajq.js +0 -36
  292. package/ui-dist/assets/blockDiagram-WCTKOSBZ-BbefXkmh.js +0 -132
  293. package/ui-dist/assets/c4Diagram-IC4MRINW-BVPjmrfV.js +0 -10
  294. package/ui-dist/assets/channel-B-bxwuub.js +0 -1
  295. package/ui-dist/assets/chunk-NQ4KR5QH-D78Rqvef.js +0 -220
  296. package/ui-dist/assets/chunk-WL4C6EOR-CaI2CXRo.js +0 -189
  297. package/ui-dist/assets/classDiagram-VBA2DB6C-oNkrSzge.js +0 -1
  298. package/ui-dist/assets/classDiagram-v2-RAHNMMFH-oNkrSzge.js +0 -1
  299. package/ui-dist/assets/clone-D1LQw6bn.js +0 -1
  300. package/ui-dist/assets/cytoscape.esm-BQaXIfA_.js +0 -331
  301. package/ui-dist/assets/dagre-KLK3FWXG-Cedmep7r.js +0 -4
  302. package/ui-dist/assets/diagram-E7M64L7V-BWIKKX1f.js +0 -24
  303. package/ui-dist/assets/diagram-IFDJBPK2-De8ij4wb.js +0 -43
  304. package/ui-dist/assets/diagram-P4PSJMXO-DfqKc5zd.js +0 -24
  305. package/ui-dist/assets/erDiagram-INFDFZHY-CacJL_tU.js +0 -70
  306. package/ui-dist/assets/flowDiagram-PKNHOUZH-CQbuZmQW.js +0 -162
  307. package/ui-dist/assets/ganttDiagram-A5KZAMGK-uMPy8GwP.js +0 -292
  308. package/ui-dist/assets/gitGraphDiagram-K3NZZRJ6-D10Ck-1y.js +0 -65
  309. package/ui-dist/assets/graph-DMAYpSbz.js +0 -1
  310. package/ui-dist/assets/index-yhZee3iu.css +0 -1
  311. package/ui-dist/assets/infoDiagram-LFFYTUFH-WdYfk1ti.js +0 -2
  312. package/ui-dist/assets/journeyDiagram-4ABVD52K-A3rlVmO2.js +0 -139
  313. package/ui-dist/assets/katex-B1X10hvy.js +0 -261
  314. package/ui-dist/assets/layout-BjkotBZ2.js +0 -1
  315. package/ui-dist/assets/mermaid.core-D3iDEDQJ.js +0 -255
  316. package/ui-dist/assets/mindmap-definition-YRQLILUH-Cm-NQlLA.js +0 -68
  317. package/ui-dist/assets/pieDiagram-SKSYHLDU-BaDPvveA.js +0 -30
  318. package/ui-dist/assets/quadrantDiagram-337W2JSQ-0dX4kokb.js +0 -7
  319. package/ui-dist/assets/requirementDiagram-Z7DCOOCP-BdbJFOUK.js +0 -73
  320. package/ui-dist/assets/sankeyDiagram-WA2Y5GQK-ZMXNjh7n.js +0 -10
  321. package/ui-dist/assets/sequenceDiagram-2WXFIKYE-DfR6JqDW.js +0 -145
  322. package/ui-dist/assets/stateDiagram-RAJIS63D-BcGX6JIu.js +0 -1
  323. package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-D1SMoFW3.js +0 -1
  324. package/ui-dist/assets/timeline-definition-YZTLITO2-DrIAH8-G.js +0 -61
  325. package/ui-dist/assets/treemap-KZPCXAKY-DEopGTtM.js +0 -162
  326. package/ui-dist/assets/vennDiagram-LZ73GAT5-CM3yysPE.js +0 -34
  327. package/ui-dist/assets/xychartDiagram-JWTSCODW-C34pUeNV.js +0 -7
@@ -0,0 +1,263 @@
1
+ import { heartbeatRuns } from "@rudderhq/db";
2
+ import { eq } from "drizzle-orm";
3
+ import { Router } from "express";
4
+ import { z } from "zod";
5
+ import { forbidden, unprocessable } from "../errors.js";
6
+ import { logger } from "../middleware/logger.js";
7
+ import { BROWSER_ACTIONS, BrowserBrokerError, browserBrokerRegistry, } from "../services/browser-broker.js";
8
+ import { resolveBrowserCapability } from "../services/browser-capability.js";
9
+ import { instanceSettingsService, logActivity } from "../services/index.js";
10
+ import { assertInstanceAdmin } from "./authz.js";
11
+ const brokerRegistrationSchema = z.object({
12
+ endpoint: z.string().min(1).max(2_048),
13
+ token: z.string().min(32).max(512),
14
+ }).strict();
15
+ const safeWebUrlSchema = z.string().min(1).max(8_192).refine((value) => {
16
+ try {
17
+ const parsed = new URL(value);
18
+ return parsed.protocol === "http:" || parsed.protocol === "https:";
19
+ }
20
+ catch {
21
+ return false;
22
+ }
23
+ }, "Browser URL must use http or https.");
24
+ const tabIdSchema = z.string().trim().min(1).max(160);
25
+ const refSchema = z.string().trim().min(1).max(160);
26
+ const browserActionSchemas = {
27
+ tabs: z.object({}).strict(),
28
+ open: z.object({ url: safeWebUrlSchema }).strict(),
29
+ navigate: z.object({ tabId: tabIdSchema, url: safeWebUrlSchema }).strict(),
30
+ read: z.object({ tabId: tabIdSchema }).strict(),
31
+ click: z.object({ tabId: tabIdSchema, ref: refSchema }).strict(),
32
+ type: z.object({
33
+ tabId: tabIdSchema,
34
+ ref: refSchema,
35
+ text: z.string().max(100_000),
36
+ submit: z.boolean().optional(),
37
+ }).strict(),
38
+ screenshot: z.object({ tabId: tabIdSchema }).strict(),
39
+ close: z.object({ tabId: tabIdSchema }).strict(),
40
+ };
41
+ function sendBrowserError(res, status, code, message) {
42
+ res.status(status).json({ error: message, code });
43
+ }
44
+ function requireLocalBrowser(deploymentMode) {
45
+ if (deploymentMode !== "local_trusted") {
46
+ throw unprocessable("Rudder Browser is available only in local_trusted mode.");
47
+ }
48
+ }
49
+ function requireAgentBrowserIdentity(req, res) {
50
+ if (req.actor.type !== "agent" || !req.actor.orgId || !req.actor.agentId) {
51
+ throw forbidden("Agent access required");
52
+ }
53
+ if (req.actor.source !== "agent_jwt") {
54
+ sendBrowserError(res, 403, "browser_run_credential_required", "Rudder Browser tools require a run-scoped runtime credential.");
55
+ return null;
56
+ }
57
+ if (!req.actor.runId) {
58
+ sendBrowserError(res, 400, "browser_run_required", "Rudder Browser tools require a runtime-owned run ID.");
59
+ return null;
60
+ }
61
+ return {
62
+ orgId: req.actor.orgId,
63
+ agentId: req.actor.agentId,
64
+ runId: req.actor.runId,
65
+ };
66
+ }
67
+ function safeOrigin(value) {
68
+ if (typeof value !== "string")
69
+ return null;
70
+ try {
71
+ const parsed = new URL(value);
72
+ return parsed.protocol === "http:" || parsed.protocol === "https:" ? parsed.origin : null;
73
+ }
74
+ catch {
75
+ return null;
76
+ }
77
+ }
78
+ function browserBrokerStatus(code) {
79
+ if (code === "browser_unavailable")
80
+ return 503;
81
+ if (code === "browser_disabled")
82
+ return 409;
83
+ if (code === "browser_tab_limit")
84
+ return 429;
85
+ if (code === "browser_timeout")
86
+ return 504;
87
+ if (code === "browser_result_too_large")
88
+ return 413;
89
+ if (code === "browser_tab_forbidden")
90
+ return 403;
91
+ if (code === "browser_tab_not_found" || code === "browser_ref_not_found")
92
+ return 404;
93
+ if (code === "browser_invalid_argument" || code === "browser_unsafe_url")
94
+ return 422;
95
+ return 502;
96
+ }
97
+ export function browserRoutes(db, options) {
98
+ const router = Router();
99
+ const registry = options.registry ?? browserBrokerRegistry;
100
+ const settings = instanceSettingsService(db);
101
+ const getBrowserSettings = options.getBrowserSettings ?? (() => settings.getBrowser());
102
+ const findRun = options.findRun ?? (async (runId) => db
103
+ .select({
104
+ id: heartbeatRuns.id,
105
+ orgId: heartbeatRuns.orgId,
106
+ agentId: heartbeatRuns.agentId,
107
+ status: heartbeatRuns.status,
108
+ })
109
+ .from(heartbeatRuns)
110
+ .where(eq(heartbeatRuns.id, runId))
111
+ .then((rows) => rows[0] ?? null));
112
+ const recordActivity = options.recordActivity ?? ((event) => logActivity(db, event));
113
+ router.put("/instance/browser/broker", async (req, res) => {
114
+ assertInstanceAdmin(req);
115
+ requireLocalBrowser(options.deploymentMode);
116
+ const parsed = brokerRegistrationSchema.safeParse(req.body);
117
+ if (!parsed.success) {
118
+ sendBrowserError(res, 400, "browser_broker_invalid_registration", "Browser Broker registration is invalid.");
119
+ return;
120
+ }
121
+ try {
122
+ registry.register(parsed.data);
123
+ }
124
+ catch (error) {
125
+ if (error instanceof BrowserBrokerError) {
126
+ sendBrowserError(res, 400, error.code, error.message);
127
+ return;
128
+ }
129
+ throw error;
130
+ }
131
+ res.status(204).end();
132
+ });
133
+ router.delete("/instance/browser/broker", async (req, res) => {
134
+ assertInstanceAdmin(req);
135
+ requireLocalBrowser(options.deploymentMode);
136
+ const parsed = z.object({ token: z.string().min(32).max(512) }).strict().safeParse(req.body);
137
+ if (!parsed.success) {
138
+ sendBrowserError(res, 400, "browser_broker_invalid_registration", "Browser Broker credential is invalid.");
139
+ return;
140
+ }
141
+ registry.unregister(parsed.data.token);
142
+ res.status(204).end();
143
+ });
144
+ router.post("/browser/:action", async (req, res) => {
145
+ if (options.deploymentMode !== "local_trusted") {
146
+ sendBrowserError(res, 403, "browser_runtime_unsupported", "Rudder Browser tools are available only in local_trusted mode.");
147
+ return;
148
+ }
149
+ const identity = requireAgentBrowserIdentity(req, res);
150
+ if (!identity)
151
+ return;
152
+ const action = req.params.action;
153
+ if (!BROWSER_ACTIONS.includes(action)) {
154
+ sendBrowserError(res, 404, "browser_action_not_found", "Unknown Rudder Browser action.");
155
+ return;
156
+ }
157
+ const parsed = browserActionSchemas[action].safeParse(req.body ?? {});
158
+ if (!parsed.success) {
159
+ sendBrowserError(res, 400, "browser_invalid_argument", "Rudder Browser arguments are invalid.");
160
+ return;
161
+ }
162
+ const actionArgs = parsed.data;
163
+ const browserSettings = await getBrowserSettings();
164
+ const browserCapability = resolveBrowserCapability({
165
+ deploymentMode: options.deploymentMode,
166
+ browserEnabled: browserSettings.enabled,
167
+ agentRuntimeType: req.actor.adapterType,
168
+ });
169
+ if (!browserCapability.instanceEligible) {
170
+ sendBrowserError(res, 409, "browser_disabled", "Rudder Browser is disabled in Settings.");
171
+ return;
172
+ }
173
+ if (!browserCapability.runEligible) {
174
+ sendBrowserError(res, 403, "browser_runtime_unsupported", "The current Agent runtime does not support Rudder Browser tools.");
175
+ return;
176
+ }
177
+ if (!registry.isAvailable()) {
178
+ sendBrowserError(res, 503, "browser_unavailable", "Rudder Browser is unavailable because Desktop is not connected.");
179
+ return;
180
+ }
181
+ const run = await findRun(identity.runId);
182
+ if (!run || run.orgId !== identity.orgId || run.agentId !== identity.agentId) {
183
+ sendBrowserError(res, 403, "browser_run_forbidden", "The current run does not own this Browser session.");
184
+ return;
185
+ }
186
+ if (run.status !== "running") {
187
+ sendBrowserError(res, 409, "browser_run_inactive", "The current run is no longer active.");
188
+ return;
189
+ }
190
+ const requestedTabId = typeof actionArgs.tabId === "string" ? actionArgs.tabId : identity.runId;
191
+ const requestedOrigin = safeOrigin(actionArgs.url);
192
+ await recordActivity({
193
+ orgId: identity.orgId,
194
+ actorType: "agent",
195
+ actorId: identity.agentId,
196
+ agentId: identity.agentId,
197
+ runId: identity.runId,
198
+ action: `agent.browser.${action}.requested`,
199
+ entityType: "browser_tab",
200
+ entityId: requestedTabId,
201
+ details: {
202
+ action,
203
+ status: "requested",
204
+ ...(requestedOrigin ? { origin: requestedOrigin } : {}),
205
+ },
206
+ });
207
+ let result;
208
+ try {
209
+ result = await registry.forward({ identity, action, args: actionArgs });
210
+ }
211
+ catch (error) {
212
+ if (error instanceof BrowserBrokerError) {
213
+ void recordActivity({
214
+ orgId: identity.orgId,
215
+ actorType: "agent",
216
+ actorId: identity.agentId,
217
+ agentId: identity.agentId,
218
+ runId: identity.runId,
219
+ action: `agent.browser.${action}.failed`,
220
+ entityType: "browser_tab",
221
+ entityId: requestedTabId,
222
+ details: { action, status: "failed", code: error.code },
223
+ }).catch((activityError) => {
224
+ logger.warn({ err: activityError, action, runId: identity.runId }, "failed to record Browser action failure");
225
+ });
226
+ sendBrowserError(res, browserBrokerStatus(error.code), error.code, error.message);
227
+ return;
228
+ }
229
+ throw error;
230
+ }
231
+ const resultRecord = typeof result === "object" && result !== null && !Array.isArray(result)
232
+ ? result
233
+ : {};
234
+ const tabId = typeof actionArgs.tabId === "string"
235
+ ? actionArgs.tabId
236
+ : typeof resultRecord.tabId === "string"
237
+ ? resultRecord.tabId
238
+ : identity.runId;
239
+ const origin = requestedOrigin ?? safeOrigin(resultRecord.url);
240
+ void recordActivity({
241
+ orgId: identity.orgId,
242
+ actorType: "agent",
243
+ actorId: identity.agentId,
244
+ agentId: identity.agentId,
245
+ runId: identity.runId,
246
+ action: `agent.browser.${action}`,
247
+ entityType: "browser_tab",
248
+ entityId: tabId,
249
+ details: {
250
+ action,
251
+ status: "completed",
252
+ ...(origin ? { origin } : {}),
253
+ },
254
+ }).catch((error) => {
255
+ // The durable intent prevents an unlogged side effect. Returning the
256
+ // successful Broker result avoids an unsafe Agent retry.
257
+ logger.warn({ err: error, action, runId: identity.runId }, "failed to record Browser action completion");
258
+ });
259
+ res.json(result ?? {});
260
+ });
261
+ return router;
262
+ }
263
+ //# sourceMappingURL=browser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"browser.js","sourceRoot":"","sources":["../../src/routes/browser.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/routes/chats.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AA0EvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,wBAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,8CAm0DzD"}
1
+ {"version":3,"file":"chats.d.ts","sourceRoot":"","sources":["../../src/routes/chats.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AA+DvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAK1D,wBAAgB,UAAU,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,8CAujDzD"}
@@ -4,8 +4,6 @@ import multer from "multer";
4
4
  import { randomUUID } from "node:crypto";
5
5
  import { isAllowedContentType, MAX_ATTACHMENT_BYTES } from "../attachment-types.js";
6
6
  import { conflict, forbidden, HttpError, unauthorized, unprocessable } from "../errors.js";
7
- import { emitExecutionTranscriptTree } from "../langfuse-transcript.js";
8
- import { observeExecutionEvent, updateExecutionObservation, updateExecutionTraceIO, withExecutionObservation, } from "../langfuse.js";
9
7
  import { logger } from "../middleware/logger.js";
10
8
  import { validate } from "../middleware/validate.js";
11
9
  import { assertTimeZone } from "../services/automations.scheduler.js";
@@ -13,10 +11,9 @@ import { chatAgentRunService } from "../services/chat-agent-runs.js";
13
11
  import { CHAT_ASSISTANT_USER_ERROR_MESSAGE, chatAssistantService, ChatAssistantStreamError, userVisiblePartialBodyFromError, } from "../services/chat-assistant.js";
14
12
  import { cancelAndReleaseActiveChatGeneration, claimChatGeneration, getActiveChatGeneration, hasActiveChatGeneration } from "../services/chat-generation-locks.js";
15
13
  import { buildChatTitlePromptFromMessages, chatTitleGenerationService, } from "../services/chat-title-generation.js";
14
+ import { chatWorkManifestService } from "../services/chat-work-manifest.js";
16
15
  import { validateCron } from "../services/cron.js";
17
16
  import { accessService, agentService, automationService, chatService, goalService, heartbeatService, issueService, logActivity, operatorProfileService, organizationService, productIntelligenceService, projectService, } from "../services/index.js";
18
- import { sanitizeStartupContextPromptForPersistence } from "../services/runtime-kernel/heartbeat.core.js";
19
- import { summarizeRuntimeSkillsForTrace } from "../services/runtime-trace-metadata.js";
20
17
  import { runtimeResultText, sanitizeGeneratedTitle, } from "../services/title-generation.js";
21
18
  import { assertBoard, assertCompanyAccess, getActorInfo } from "./authz.js";
22
19
  import { wakeIssueAssigneeAfterChatConversion } from "./chat-issue-assignment-wakeup.js";
@@ -33,6 +30,7 @@ export function chatRoutes(db, storage) {
33
30
  const access = accessService(db);
34
31
  const assistantSvc = chatAssistantService(db, storage);
35
32
  const chatRunsSvc = chatAgentRunService(db);
33
+ const workManifestSvc = chatWorkManifestService(db);
36
34
  const operatorProfiles = operatorProfileService(db);
37
35
  const heartbeat = heartbeatService(db);
38
36
  const productIntelligence = productIntelligenceService(db);
@@ -180,106 +178,6 @@ export function chatRoutes(db, storage) {
180
178
  }
181
179
  throw unauthorized();
182
180
  }
183
- function buildChatObservabilityContext(conversation, input) {
184
- return {
185
- surface: input.surface ?? "chat_action",
186
- rootExecutionId: input.rootExecutionId,
187
- orgId: conversation.orgId,
188
- agentId: conversation.preferredAgentId ?? null,
189
- issueId: input.issueId ?? conversation.primaryIssueId ?? null,
190
- sessionKey: conversation.id,
191
- runtime: input.runtime ?? null,
192
- trigger: input.trigger,
193
- status: input.status ?? null,
194
- metadata: {
195
- conversationId: conversation.id,
196
- ...(input.metadata ?? {}),
197
- },
198
- };
199
- }
200
- async function withChatObservation(context, input, fn) {
201
- let executionError = null;
202
- try {
203
- return await withExecutionObservation(context, input, async (observation) => {
204
- try {
205
- return await fn(observation);
206
- }
207
- catch (error) {
208
- executionError = error;
209
- throw error;
210
- }
211
- });
212
- }
213
- catch (error) {
214
- if (executionError && error === executionError) {
215
- throw error;
216
- }
217
- logger.warn({
218
- rootExecutionId: context.rootExecutionId,
219
- trigger: context.trigger,
220
- err: error instanceof Error ? error.message : String(error),
221
- }, "Failed to emit Langfuse chat observation");
222
- return fn(null);
223
- }
224
- }
225
- async function emitChatObservationEvent(context, input) {
226
- try {
227
- await observeExecutionEvent(context, input);
228
- }
229
- catch (error) {
230
- logger.warn({
231
- rootExecutionId: context.rootExecutionId,
232
- eventName: input.name,
233
- err: error instanceof Error ? error.message : String(error),
234
- }, "Failed to emit Langfuse chat event");
235
- }
236
- }
237
- function summarizeChatObservationMessages(messages) {
238
- const proposalMessage = messages.find((message) => message.kind === "issue_proposal" || message.kind === "operation_proposal");
239
- const systemEventMessage = messages.find((message) => message.kind === "system_event");
240
- const systemPayload = systemEventMessage?.structuredPayload && typeof systemEventMessage.structuredPayload === "object"
241
- ? systemEventMessage.structuredPayload
242
- : null;
243
- return {
244
- createdMessageIds: messages.map((message) => message.id),
245
- assistantKind: proposalMessage?.kind ?? messages.find((message) => message.role === "assistant")?.kind ?? null,
246
- approvalId: proposalMessage?.approvalId ?? null,
247
- issueId: typeof systemPayload?.issueId === "string" ? systemPayload.issueId : null,
248
- issueIdentifier: typeof systemPayload?.issueIdentifier === "string" ? systemPayload.issueIdentifier : null,
249
- eventType: typeof systemPayload?.eventType === "string" ? systemPayload.eventType : null,
250
- };
251
- }
252
- function modelTurnInputFromInvocationMeta(invocationMeta) {
253
- const prompt = sanitizeStartupContextPromptForPersistence(invocationMeta.prompt);
254
- return typeof prompt === "string" && prompt.trim().length > 0
255
- ? prompt
256
- : undefined;
257
- }
258
- function buildChatTraceInput(input, invocationMeta) {
259
- return {
260
- conversationId: input.conversationId,
261
- body: input.body,
262
- userMessageId: input.userMessageId,
263
- instruction: typeof invocationMeta?.prompt === "string" && invocationMeta.prompt.trim().length > 0
264
- ? sanitizeStartupContextPromptForPersistence(invocationMeta.prompt)
265
- : null,
266
- promptMetrics: invocationMeta?.promptMetrics ?? null,
267
- };
268
- }
269
- function mergeChatInvocationTraceMetadata(context, invocationMeta) {
270
- context.metadata = {
271
- ...(context.metadata ?? {}),
272
- runtimeAgentType: invocationMeta.agentRuntimeType,
273
- runtimeCommand: invocationMeta.command,
274
- runtimeCwd: invocationMeta.cwd ?? null,
275
- runtimeCommandNotes: invocationMeta.commandNotes ?? [],
276
- runtimePromptMetrics: invocationMeta.promptMetrics ?? null,
277
- runtimePromptCaptured: typeof invocationMeta.prompt === "string" && invocationMeta.prompt.length > 0,
278
- ...(Array.isArray(invocationMeta.loadedSkills)
279
- ? summarizeRuntimeSkillsForTrace(invocationMeta.loadedSkills)
280
- : {}),
281
- };
282
- }
283
181
  async function logChatMessagesAdded(conversation, messages, actor) {
284
182
  await Promise.all(messages.map((message) => logActivity(db, {
285
183
  orgId: conversation.orgId,
@@ -999,6 +897,15 @@ export function chatRoutes(db, storage) {
999
897
  const refreshed = await svc.getById(conversation.id, userId);
1000
898
  res.json(await assistantSvc.enrichConversation(refreshed));
1001
899
  });
900
+ router.get("/chats/:id/work-manifest", async (req, res) => {
901
+ const conversation = await assertConversationAccess(req, req.params.id);
902
+ if (!conversation) {
903
+ res.status(404).json({ error: "Chat conversation not found" });
904
+ return;
905
+ }
906
+ await workManifestSvc.reconcileConversation(conversation.id);
907
+ res.json(await workManifestSvc.getConversationManifest(conversation.id));
908
+ });
1002
909
  router.patch("/chats/:id", validate(updateChatConversationSchema), async (req, res) => {
1003
910
  const existing = await assertConversationAccess(req, req.params.id);
1004
911
  if (!existing) {
@@ -1391,43 +1298,17 @@ export function chatRoutes(db, storage) {
1391
1298
  res.status(202).json({ queued: item });
1392
1299
  return;
1393
1300
  }
1394
- let chatObservation = null;
1395
1301
  try {
1396
1302
  const userMessage = await addUserMessage(conversation, req.body.body, actor, req.body.editUserMessageId ?? null);
1397
1303
  if (!req.body.editUserMessageId) {
1398
1304
  startChatTitleGeneration(conversation, userMessage);
1399
1305
  }
1400
1306
  const turnContext = turnContextFromUserMessage(userMessage);
1401
- chatObservation = buildChatObservabilityContext(conversation, {
1402
- surface: "chat_turn",
1403
- rootExecutionId: turnContext.chatTurnId,
1404
- trigger: "assistant_reply",
1405
- runtime: assistantAvailability.agentRuntimeType ?? null,
1406
- metadata: {
1407
- stream: false,
1408
- userMessageId: userMessage.id,
1409
- editUserMessageId: req.body.editUserMessageId ?? null,
1410
- },
1411
- });
1412
- const traceInputBase = {
1413
- conversationId: conversation.id,
1414
- body: req.body.body,
1415
- userMessageId: userMessage.id,
1416
- };
1417
- let currentChatTraceInput = buildChatTraceInput(traceInputBase);
1418
1307
  let activeChatRunId = null;
1419
- const persistedAssistantMessages = await withChatObservation(chatObservation, {
1420
- name: "chat_turn",
1421
- asType: "agent",
1422
- input: currentChatTraceInput,
1423
- }, async (observation) => {
1308
+ const persistedAssistantMessages = await (async () => {
1424
1309
  const assistantInput = await loadAssistantInput(conversation, actor);
1425
1310
  const transcript = [];
1426
- const observedTranscript = [];
1427
- let modelTurnInput;
1428
1311
  let fallbackOutput = null;
1429
- let finalChatOutput = null;
1430
- let finalChatStatus = "completed";
1431
1312
  try {
1432
1313
  const streamed = await assistantSvc.streamChatAssistantReply({
1433
1314
  ...assistantInput,
@@ -1438,44 +1319,21 @@ export function chatRoutes(db, storage) {
1438
1319
  onRunCreated: (runId) => {
1439
1320
  activeChatRunId = runId;
1440
1321
  },
1441
- onInvocationMeta: async (meta) => {
1442
- modelTurnInput = modelTurnInputFromInvocationMeta(meta);
1443
- currentChatTraceInput = buildChatTraceInput(traceInputBase, meta);
1444
- mergeChatInvocationTraceMetadata(chatObservation, meta);
1445
- updateExecutionObservation(observation, chatObservation, {
1446
- input: currentChatTraceInput,
1447
- });
1448
- updateExecutionTraceIO(observation, { input: currentChatTraceInput });
1449
- },
1450
1322
  onTranscriptEntry: async (entry) => {
1451
1323
  transcript.push(entry);
1452
1324
  },
1453
- onObservedTranscriptEntry: async (entry) => {
1454
- observedTranscript.push(entry);
1455
- },
1456
1325
  });
1457
1326
  fallbackOutput = streamed.partialBody;
1458
1327
  if (streamed.outcome !== "completed") {
1459
- finalChatStatus = "failed";
1460
1328
  throw new Error("Chat assistant reply was stopped before completion");
1461
1329
  }
1462
1330
  const created = await persistAssistantReply(req, assistantInput.conversation, actor, streamed.reply, turnContext, transcript, streamed.replyingAgentId, null, activeChatRunId);
1463
1331
  await linkChatRunMessages(assistantInput.conversation, activeChatRunId, created);
1464
- finalChatOutput = streamed.reply.body;
1465
1332
  await logChatMessagesAdded(assistantInput.conversation, created, {
1466
1333
  actorType: "system",
1467
1334
  actorId: "chat-assistant",
1468
1335
  agentId: streamed.replyingAgentId,
1469
1336
  });
1470
- const summary = summarizeChatObservationMessages(created);
1471
- await emitChatObservationEvent(chatObservation, {
1472
- name: "chat.reply.persisted",
1473
- metadata: {
1474
- transcriptEntries: transcript.length,
1475
- observedTranscriptEntries: observedTranscript.length,
1476
- ...summary,
1477
- },
1478
- });
1479
1337
  return created;
1480
1338
  }
1481
1339
  catch (error) {
@@ -1483,8 +1341,6 @@ export function chatRoutes(db, storage) {
1483
1341
  fallbackOutput = userVisiblePartialBodyFromError(error);
1484
1342
  const failurePayload = recoverableFailurePayload(error, activeChatRunId);
1485
1343
  const failureBody = fallbackOutput || recoverableFailureBody(failurePayload) || CHAT_ASSISTANT_USER_ERROR_MESSAGE;
1486
- const failure = failurePayload?.recoverableFailure;
1487
- const failureCode = typeof failure?.code === "string" ? failure.code : "chat_runtime_exception";
1488
1344
  const failedMessage = await persistPartialAssistantMessage(assistantInput.conversation, failureBody, "failed", turnContext, transcript, chatReplyingAgentId(assistantInput.conversation), null, activeChatRunId, failurePayload);
1489
1345
  const failedMessages = failedMessage ? [failedMessage] : [];
1490
1346
  await linkChatRunMessages(assistantInput.conversation, activeChatRunId, failedMessages);
@@ -1495,84 +1351,16 @@ export function chatRoutes(db, storage) {
1495
1351
  agentId: chatReplyingAgentId(assistantInput.conversation),
1496
1352
  });
1497
1353
  }
1498
- await emitChatObservationEvent(chatObservation, {
1499
- name: "chat.reply.failed",
1500
- level: "ERROR",
1501
- metadata: {
1502
- failedMessageId: failedMessage?.id ?? null,
1503
- runId: activeChatRunId,
1504
- errorCode: failureCode,
1505
- transcriptEntries: transcript.length,
1506
- observedTranscriptEntries: observedTranscript.length,
1507
- error: error.message,
1508
- },
1509
- statusMessage: failureCode,
1510
- });
1511
1354
  fallbackOutput = failureBody;
1512
- finalChatStatus = "failed";
1513
1355
  return failedMessages;
1514
1356
  }
1515
- finalChatStatus = "failed";
1516
1357
  throw error;
1517
1358
  }
1518
- finally {
1519
- try {
1520
- const observationFallbackOutput = finalChatOutput
1521
- || fallbackOutput
1522
- || (finalChatStatus === "failed" ? CHAT_ASSISTANT_USER_ERROR_MESSAGE : null);
1523
- const transcriptStats = emitExecutionTranscriptTree({
1524
- context: chatObservation,
1525
- parentObservation: observation,
1526
- transcript: observedTranscript,
1527
- initialTurnInput: modelTurnInput,
1528
- fallbackResult: observationFallbackOutput
1529
- ? {
1530
- output: observationFallbackOutput,
1531
- subtype: finalChatStatus,
1532
- isError: finalChatStatus === "failed",
1533
- }
1534
- : null,
1535
- });
1536
- finalChatOutput = finalChatOutput
1537
- || fallbackOutput
1538
- || (finalChatStatus === "failed" ? observationFallbackOutput : transcriptStats.finalOutput)
1539
- || null;
1540
- }
1541
- catch (error) {
1542
- logger.warn({
1543
- rootExecutionId: chatObservation.rootExecutionId,
1544
- err: error instanceof Error ? error.message : String(error),
1545
- }, "Failed to export chat transcript tree to Langfuse");
1546
- }
1547
- updateExecutionObservation(observation, {
1548
- ...chatObservation,
1549
- status: finalChatStatus,
1550
- }, {
1551
- input: currentChatTraceInput,
1552
- output: finalChatOutput,
1553
- level: finalChatStatus === "failed" ? "ERROR" : "DEFAULT",
1554
- statusMessage: finalChatStatus,
1555
- });
1556
- updateExecutionTraceIO(observation, {
1557
- input: currentChatTraceInput,
1558
- output: finalChatOutput,
1559
- });
1560
- }
1561
- });
1359
+ })();
1562
1360
  const createdMessages = [userMessage, ...persistedAssistantMessages];
1563
1361
  res.status(201).json({ messages: createdMessages });
1564
1362
  }
1565
1363
  catch (err) {
1566
- if (chatObservation) {
1567
- await emitChatObservationEvent(chatObservation, {
1568
- name: "chat.reply.failed",
1569
- level: "ERROR",
1570
- metadata: {
1571
- error: err instanceof Error ? err.message : String(err),
1572
- },
1573
- statusMessage: err instanceof Error ? err.message : "chat_reply_failed",
1574
- });
1575
- }
1576
1364
  logger.warn({ err, conversationId: conversation.id }, "chat assistant reply failed");
1577
1365
  if (err instanceof HttpError) {
1578
1366
  throw err;
@@ -1607,13 +1395,6 @@ export function chatRoutes(db, storage) {
1607
1395
  isMultipartRequest,
1608
1396
  uploadedMessageFiles,
1609
1397
  validateUploadedMessageFiles,
1610
- buildChatObservabilityContext,
1611
- withChatObservation,
1612
- emitChatObservationEvent,
1613
- summarizeChatObservationMessages,
1614
- modelTurnInputFromInvocationMeta,
1615
- buildChatTraceInput,
1616
- mergeChatInvocationTraceMetadata,
1617
1398
  logChatMessagesAdded,
1618
1399
  assertContextLinksBelongToCompany,
1619
1400
  turnContextFromUserMessage,