@rudderhq/server 0.7.2 → 0.7.3

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 (428) hide show
  1. package/dist/agent-runtimes/registry.d.ts.map +1 -1
  2. package/dist/agent-runtimes/registry.js +0 -2
  3. package/dist/agent-runtimes/registry.js.map +1 -1
  4. package/dist/app.d.ts.map +1 -1
  5. package/dist/app.js +1 -5
  6. package/dist/app.js.map +1 -1
  7. package/dist/bootstrap/create-http-app.d.ts +1 -2
  8. package/dist/bootstrap/create-http-app.d.ts.map +1 -1
  9. package/dist/bootstrap/create-http-app.js +13 -12
  10. package/dist/bootstrap/create-http-app.js.map +1 -1
  11. package/dist/bootstrap/register-api-routes.d.ts +1 -2
  12. package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
  13. package/dist/bootstrap/register-api-routes.js +20 -4
  14. package/dist/bootstrap/register-api-routes.js.map +1 -1
  15. package/dist/middleware/logger.js +2 -2
  16. package/dist/middleware/logger.js.map +1 -1
  17. package/dist/middleware/logger.test.js +26 -10
  18. package/dist/middleware/logger.test.js.map +1 -1
  19. package/dist/routes/agent-issue-creation.d.ts +25 -0
  20. package/dist/routes/agent-issue-creation.d.ts.map +1 -0
  21. package/dist/routes/agent-issue-creation.js +201 -0
  22. package/dist/routes/agent-issue-creation.js.map +1 -0
  23. package/dist/routes/app-builder.d.ts +3 -1
  24. package/dist/routes/app-builder.d.ts.map +1 -1
  25. package/dist/routes/app-builder.js +31 -11
  26. package/dist/routes/app-builder.js.map +1 -1
  27. package/dist/routes/computer.d.ts +30 -0
  28. package/dist/routes/computer.d.ts.map +1 -0
  29. package/dist/routes/computer.js +231 -0
  30. package/dist/routes/computer.js.map +1 -0
  31. package/dist/routes/health.d.ts.map +1 -1
  32. package/dist/routes/health.js +2 -0
  33. package/dist/routes/health.js.map +1 -1
  34. package/dist/routes/instance-settings.d.ts.map +1 -1
  35. package/dist/routes/instance-settings.js +3 -0
  36. package/dist/routes/instance-settings.js.map +1 -1
  37. package/dist/routes/issues.comments-attachments.d.ts.map +1 -1
  38. package/dist/routes/issues.comments-attachments.js +90 -8
  39. package/dist/routes/issues.comments-attachments.js.map +1 -1
  40. package/dist/routes/issues.d.ts.map +1 -1
  41. package/dist/routes/issues.js +12 -1
  42. package/dist/routes/issues.js.map +1 -1
  43. package/dist/routes/issues.mutations.d.ts.map +1 -1
  44. package/dist/routes/issues.mutations.js +85 -33
  45. package/dist/routes/issues.mutations.js.map +1 -1
  46. package/dist/routes/managed-mcp-runtime.d.ts.map +1 -1
  47. package/dist/routes/managed-mcp-runtime.js +109 -7
  48. package/dist/routes/managed-mcp-runtime.js.map +1 -1
  49. package/dist/routes/rudder-plugins.d.ts +4 -0
  50. package/dist/routes/rudder-plugins.d.ts.map +1 -0
  51. package/dist/routes/rudder-plugins.js +213 -0
  52. package/dist/routes/rudder-plugins.js.map +1 -0
  53. package/dist/services/activity-log.d.ts +0 -3
  54. package/dist/services/activity-log.d.ts.map +1 -1
  55. package/dist/services/activity-log.js +0 -33
  56. package/dist/services/activity-log.js.map +1 -1
  57. package/dist/services/activity.d.ts +3 -3
  58. package/dist/services/agent-issue-creation.d.ts +344 -0
  59. package/dist/services/agent-issue-creation.d.ts.map +1 -0
  60. package/dist/services/agent-issue-creation.js +675 -0
  61. package/dist/services/agent-issue-creation.js.map +1 -0
  62. package/dist/services/agent-run-context.d.ts.map +1 -1
  63. package/dist/services/agent-run-context.js +13 -2
  64. package/dist/services/agent-run-context.js.map +1 -1
  65. package/dist/services/app-builder.d.ts.map +1 -1
  66. package/dist/services/app-builder.js +24 -3
  67. package/dist/services/app-builder.js.map +1 -1
  68. package/dist/services/chat-assistant.d.ts.map +1 -1
  69. package/dist/services/chat-assistant.helpers.d.ts +1 -1
  70. package/dist/services/chat-assistant.js +11 -2
  71. package/dist/services/chat-assistant.js.map +1 -1
  72. package/dist/services/chat-generation-protocol.test.js +2 -2
  73. package/dist/services/chat-generation-protocol.test.js.map +1 -1
  74. package/dist/services/chats.d.ts +2 -2
  75. package/dist/services/computer-broker.d.ts +35 -0
  76. package/dist/services/computer-broker.d.ts.map +1 -0
  77. package/dist/services/computer-broker.js +211 -0
  78. package/dist/services/computer-broker.js.map +1 -0
  79. package/dist/services/computer-broker.test.d.ts +2 -0
  80. package/dist/services/computer-broker.test.d.ts.map +1 -0
  81. package/dist/services/computer-broker.test.js +70 -0
  82. package/dist/services/computer-broker.test.js.map +1 -0
  83. package/dist/services/computer-capability.d.ts +13 -0
  84. package/dist/services/computer-capability.d.ts.map +1 -0
  85. package/dist/services/computer-capability.js +11 -0
  86. package/dist/services/computer-capability.js.map +1 -0
  87. package/dist/services/computer-capability.test.d.ts +2 -0
  88. package/dist/services/computer-capability.test.d.ts.map +1 -0
  89. package/dist/services/computer-capability.test.js +27 -0
  90. package/dist/services/computer-capability.test.js.map +1 -0
  91. package/dist/services/finance.d.ts +1 -1
  92. package/dist/services/index.d.ts +2 -0
  93. package/dist/services/index.d.ts.map +1 -1
  94. package/dist/services/index.js +2 -0
  95. package/dist/services/index.js.map +1 -1
  96. package/dist/services/instance-settings.d.ts.map +1 -1
  97. package/dist/services/instance-settings.js +15 -2
  98. package/dist/services/instance-settings.js.map +1 -1
  99. package/dist/services/integrations/agent-integrations.d.ts +1 -1
  100. package/dist/services/issues.d.ts +86 -1
  101. package/dist/services/issues.d.ts.map +1 -1
  102. package/dist/services/issues.helpers.d.ts +4 -0
  103. package/dist/services/issues.helpers.d.ts.map +1 -1
  104. package/dist/services/issues.helpers.js +28 -6
  105. package/dist/services/issues.helpers.js.map +1 -1
  106. package/dist/services/issues.js +207 -127
  107. package/dist/services/issues.js.map +1 -1
  108. package/dist/services/knowledge-portability/organization-portability.files.d.ts +1 -1
  109. package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +7 -1
  110. package/dist/services/knowledge-portability/organization-skills.catalog.d.ts.map +1 -1
  111. package/dist/services/knowledge-portability/organization-skills.catalog.js +10 -0
  112. package/dist/services/knowledge-portability/organization-skills.catalog.js.map +1 -1
  113. package/dist/services/knowledge-portability/organization-skills.d.ts +1 -0
  114. package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
  115. package/dist/services/knowledge-portability/organization-skills.js +36 -3
  116. package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
  117. package/dist/services/mcp/managed-bindings.d.ts +3 -1
  118. package/dist/services/mcp/managed-bindings.d.ts.map +1 -1
  119. package/dist/services/mcp/managed-bindings.js +20 -3
  120. package/dist/services/mcp/managed-bindings.js.map +1 -1
  121. package/dist/services/mcp/managed-client.d.ts +15 -0
  122. package/dist/services/mcp/managed-client.d.ts.map +1 -1
  123. package/dist/services/mcp/managed-client.js +23 -1
  124. package/dist/services/mcp/managed-client.js.map +1 -1
  125. package/dist/services/mcp/managed-client.test.js +73 -9
  126. package/dist/services/mcp/managed-client.test.js.map +1 -1
  127. package/dist/services/messenger.d.ts +2 -2
  128. package/dist/services/messenger.d.ts.map +1 -1
  129. package/dist/services/messenger.js +126 -49
  130. package/dist/services/messenger.js.map +1 -1
  131. package/dist/services/product-analytics.d.ts +1 -1
  132. package/dist/services/rudder-plugins.d.ts +107 -0
  133. package/dist/services/rudder-plugins.d.ts.map +1 -0
  134. package/dist/services/rudder-plugins.js +1746 -0
  135. package/dist/services/rudder-plugins.js.map +1 -0
  136. package/dist/services/rudder-plugins.test.d.ts +2 -0
  137. package/dist/services/rudder-plugins.test.d.ts.map +1 -0
  138. package/dist/services/rudder-plugins.test.js +191 -0
  139. package/dist/services/rudder-plugins.test.js.map +1 -0
  140. package/dist/services/runtime-kernel/heartbeat.core.d.ts +1 -0
  141. package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
  142. package/dist/services/runtime-kernel/heartbeat.core.js +1 -1
  143. package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
  144. package/dist/services/runtime-kernel/heartbeat.d.ts +53 -0
  145. package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
  146. package/dist/services/runtime-kernel/heartbeat.js +227 -107
  147. package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
  148. package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
  149. package/dist/services/runtime-kernel/heartbeat.recovery.js +23 -2
  150. package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
  151. package/dist/services/runtime-kernel/heartbeat.terminal.d.ts +14 -1
  152. package/dist/services/runtime-kernel/heartbeat.terminal.d.ts.map +1 -1
  153. package/dist/services/runtime-kernel/heartbeat.terminal.js +31 -0
  154. package/dist/services/runtime-kernel/heartbeat.terminal.js.map +1 -1
  155. package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -1
  156. package/dist/services/runtime-kernel/heartbeat.wakeup.js +35 -3
  157. package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
  158. package/package.json +18 -18
  159. package/resources/bundled-skills/app-builder/SKILL.md +39 -9
  160. package/resources/bundled-skills/app-builder/assets/scaffold/app/globals.css +109 -16
  161. package/resources/bundled-skills/app-builder/assets/scaffold/components/contacts-workspace.tsx +176 -152
  162. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/alert.tsx +12 -0
  163. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/badge.tsx +27 -0
  164. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/button.tsx +9 -7
  165. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/card.tsx +15 -3
  166. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/empty.tsx +18 -0
  167. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/field.tsx +23 -0
  168. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/input.tsx +1 -1
  169. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/label.tsx +1 -1
  170. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/separator.tsx +6 -0
  171. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/skeleton.tsx +6 -0
  172. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/table.tsx +30 -0
  173. package/resources/bundled-skills/app-builder/assets/scaffold/components.json +20 -0
  174. package/resources/bundled-skills/app-builder/assets/scaffold/next-env.d.ts +1 -1
  175. package/resources/bundled-skills/app-builder/assets/scaffold/next.config.ts +19 -0
  176. package/resources/bundled-skills/app-builder/assets/scaffold/package.json +2 -1
  177. package/resources/bundled-skills/app-builder/assets/scaffold/rudder.app.json +1 -1
  178. package/resources/bundled-skills/app-builder/assets/scaffold/rudder.ui.json +13 -0
  179. package/resources/bundled-skills/app-builder/assets/scaffold/scripts/validate-rudder-ui.mjs +50 -0
  180. package/resources/bundled-skills/app-builder/assets/scaffold/tests/e2e/app.spec.ts +35 -1
  181. package/resources/bundled-skills/app-builder/evals/evals.json +2 -1
  182. package/resources/bundled-skills/app-builder/references/design-guidelines.md +19 -2
  183. package/resources/bundled-skills/app-builder/references/rudder-ui-preset.md +73 -0
  184. package/resources/bundled-skills/app-builder/references/scaffold-contract.md +12 -0
  185. package/resources/bundled-skills/app-builder/references/verification.md +6 -0
  186. package/resources/bundled-skills/app-builder/scripts/report-build-status.mjs +83 -0
  187. package/resources/bundled-skills/rudder-docs/SKILL.md +2 -2
  188. package/resources/bundled-skills/rudder-docs/evals/retrieval-authority-evals.json +40 -0
  189. package/resources/bundled-skills/rudder-docs/evals/trigger-evals.json +2 -2
  190. package/resources/bundled-skills/rudder-docs/references/api-reference.md +0 -2
  191. package/resources/bundled-skills/rudder-docs/references/plugin-authoring.md +38 -114
  192. package/resources/bundled-skills/rudder-docs/references/source-map.md +2 -0
  193. package/skills/app-builder/SKILL.md +39 -9
  194. package/skills/app-builder/assets/scaffold/app/globals.css +109 -16
  195. package/skills/app-builder/assets/scaffold/components/contacts-workspace.tsx +176 -152
  196. package/skills/app-builder/assets/scaffold/components/ui/alert.tsx +12 -0
  197. package/skills/app-builder/assets/scaffold/components/ui/badge.tsx +27 -0
  198. package/skills/app-builder/assets/scaffold/components/ui/button.tsx +9 -7
  199. package/skills/app-builder/assets/scaffold/components/ui/card.tsx +15 -3
  200. package/skills/app-builder/assets/scaffold/components/ui/empty.tsx +18 -0
  201. package/skills/app-builder/assets/scaffold/components/ui/field.tsx +23 -0
  202. package/skills/app-builder/assets/scaffold/components/ui/input.tsx +1 -1
  203. package/skills/app-builder/assets/scaffold/components/ui/label.tsx +1 -1
  204. package/skills/app-builder/assets/scaffold/components/ui/separator.tsx +6 -0
  205. package/skills/app-builder/assets/scaffold/components/ui/skeleton.tsx +6 -0
  206. package/skills/app-builder/assets/scaffold/components/ui/table.tsx +30 -0
  207. package/skills/app-builder/assets/scaffold/components.json +20 -0
  208. package/skills/app-builder/assets/scaffold/next-env.d.ts +1 -1
  209. package/skills/app-builder/assets/scaffold/next.config.ts +19 -0
  210. package/skills/app-builder/assets/scaffold/package.json +2 -1
  211. package/skills/app-builder/assets/scaffold/rudder.app.json +1 -1
  212. package/skills/app-builder/assets/scaffold/rudder.ui.json +13 -0
  213. package/skills/app-builder/assets/scaffold/scripts/validate-rudder-ui.mjs +50 -0
  214. package/skills/app-builder/assets/scaffold/tests/e2e/app.spec.ts +35 -1
  215. package/skills/app-builder/evals/evals.json +2 -1
  216. package/skills/app-builder/references/design-guidelines.md +19 -2
  217. package/skills/app-builder/references/rudder-ui-preset.md +73 -0
  218. package/skills/app-builder/references/scaffold-contract.md +12 -0
  219. package/skills/app-builder/references/verification.md +6 -0
  220. package/skills/app-builder/scripts/report-build-status.mjs +83 -0
  221. package/skills/rudder-docs/SKILL.md +2 -2
  222. package/skills/rudder-docs/evals/retrieval-authority-evals.json +40 -0
  223. package/skills/rudder-docs/evals/trigger-evals.json +2 -2
  224. package/skills/rudder-docs/references/api-reference.md +0 -2
  225. package/skills/rudder-docs/references/plugin-authoring.md +38 -114
  226. package/skills/rudder-docs/references/source-map.md +2 -0
  227. package/ui-dist/assets/{LibraryLiveSurface-cHCJmmsl.js → LibraryLiveSurface-CoGcDfo0.js} +1 -1
  228. package/ui-dist/assets/{abnfDiagram-VRR7QNED-BORJvkew.js → abnfDiagram-VRR7QNED-BnPHHNfu.js} +1 -1
  229. package/ui-dist/assets/{arc-DPUzhx87.js → arc-CAvqQQR_.js} +1 -1
  230. package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-Bz_hY8LM.js → architectureDiagram-ZJ3FMSHR-DDa31YAK.js} +1 -1
  231. package/ui-dist/assets/{blockDiagram-677ZJIJ3-Bq1X3YkP.js → blockDiagram-677ZJIJ3-DDXLU9Ej.js} +1 -1
  232. package/ui-dist/assets/{c4Diagram-LMCZKHZV-BawEM9Pc.js → c4Diagram-LMCZKHZV-zEm0rHCp.js} +1 -1
  233. package/ui-dist/assets/channel-M_3GhwHQ.js +1 -0
  234. package/ui-dist/assets/{chunk-2Q5K7J3B-D0D5ZOaA.js → chunk-2Q5K7J3B-y1Rw45sz.js} +1 -1
  235. package/ui-dist/assets/{chunk-32BRIVSS-T90P7lug.js → chunk-32BRIVSS-Cq8cQBba.js} +1 -1
  236. package/ui-dist/assets/{chunk-5VM5RSS4-jcAERTgh.js → chunk-5VM5RSS4-CjQA6jGI.js} +1 -1
  237. package/ui-dist/assets/{chunk-EX3LRPZG-t9-JXwnR.js → chunk-EX3LRPZG-VVYt7jh3.js} +1 -1
  238. package/ui-dist/assets/{chunk-JWPE2WC7-hqgD1saC.js → chunk-JWPE2WC7-BJC3ISop.js} +1 -1
  239. package/ui-dist/assets/{chunk-MOJQB5TN-BsSUoYzd.js → chunk-MOJQB5TN-ClZgTqQk.js} +1 -1
  240. package/ui-dist/assets/{chunk-RYQCIY6F-YcdDh2Zn.js → chunk-RYQCIY6F-DRei3pn2.js} +1 -1
  241. package/ui-dist/assets/{chunk-V7JOEXUC-ChFyH9Su.js → chunk-V7JOEXUC-BGWrQfpZ.js} +1 -1
  242. package/ui-dist/assets/{chunk-VR4S4FIN-BjVK8IyX.js → chunk-VR4S4FIN-BBYT57Lt.js} +1 -1
  243. package/ui-dist/assets/{chunk-XXDRQBXY-D-TvO9vT.js → chunk-XXDRQBXY-D7P4SoZB.js} +1 -1
  244. package/ui-dist/assets/classDiagram-OUVF2IWQ-G44FJFnB.js +1 -0
  245. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-G44FJFnB.js +1 -0
  246. package/ui-dist/assets/{cose-bilkent-JH36ORCC-DBwhASJG.js → cose-bilkent-JH36ORCC-mJXY7GQo.js} +1 -1
  247. package/ui-dist/assets/{cynefin-VYW2F7L2-SlCRmwl2.js → cynefin-VYW2F7L2-C-I_lPmH.js} +1 -1
  248. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-DImV6N_p.js → cynefinDiagram-TSTJHNR4-Bm1S_w7H.js} +1 -1
  249. package/ui-dist/assets/{dagre-VKFMJZFB-FH4Wv8Zn.js → dagre-VKFMJZFB-BuPIm1AB.js} +1 -1
  250. package/ui-dist/assets/{diagram-FQU43EPY-CrZvQjId.js → diagram-FQU43EPY-DTBCuV0W.js} +1 -1
  251. package/ui-dist/assets/{diagram-G47NLZAW-B7IGl_T3.js → diagram-G47NLZAW-B4CK8uR2.js} +1 -1
  252. package/ui-dist/assets/{diagram-NH7WQ7WH-CB4i7H1a.js → diagram-NH7WQ7WH-BkbS0GkL.js} +1 -1
  253. package/ui-dist/assets/{diagram-OA4YK3LP-DNyWPYY9.js → diagram-OA4YK3LP-C_mkRe0c.js} +1 -1
  254. package/ui-dist/assets/{diagram-WEI45ONY-BAhxbhpi.js → diagram-WEI45ONY-CHUb3TIJ.js} +1 -1
  255. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-ClXtQ9qt.js → ebnfDiagram-CCIWWBDH-D_lN4ZOY.js} +1 -1
  256. package/ui-dist/assets/{erDiagram-Q63AITRT-DGXiMYfn.js → erDiagram-Q63AITRT-CRnDqcsy.js} +1 -1
  257. package/ui-dist/assets/{flowDiagram-23GEKE2U-CdZ-02zc.js → flowDiagram-23GEKE2U-ChELY-8y.js} +1 -1
  258. package/ui-dist/assets/{ganttDiagram-NO4QXBWP-TxhzNpta.js → ganttDiagram-NO4QXBWP-QIML25-M.js} +1 -1
  259. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-D6Q_w6wR.js → gitGraphDiagram-IHSO6WYX-TB_AKH8l.js} +1 -1
  260. package/ui-dist/assets/{graph-CxNmbpl9.js → graph-HKPvyYQ1.js} +1 -1
  261. package/ui-dist/assets/{index-C12QC1Ex.js → index-Ar0zIwom.js} +1 -1
  262. package/ui-dist/assets/{index-CW21qWFm.js → index-BeNxgoKd.js} +1 -1
  263. package/ui-dist/assets/{index-BujwWE3j.js → index-CB-UdrKN.js} +1 -1
  264. package/ui-dist/assets/{index-Cx6oIZPm.js → index-CfpFS1Tl.js} +555 -581
  265. package/ui-dist/assets/{index-C_nwI4Yj.js → index-CjIeIR2m.js} +1 -1
  266. package/ui-dist/assets/{index-Rau2cGm0.js → index-DCgbySwf.js} +1 -1
  267. package/ui-dist/assets/{index-Do78GymY.js → index-DDMaBNLI.js} +1 -1
  268. package/ui-dist/assets/{index-DU2LI7f9.js → index-DSZmO4bA.js} +1 -1
  269. package/ui-dist/assets/{index-BA9tMBhO.js → index-DfzFi2fx.js} +1 -1
  270. package/ui-dist/assets/{index-BoTz5S-X.js → index-DmEf_U5I.js} +1 -1
  271. package/ui-dist/assets/{index-kbWUQ1um.js → index-OfGDMJiA.js} +1 -1
  272. package/ui-dist/assets/{index-AkhgKOxC.js → index-ZzX8P4M5.js} +1 -1
  273. package/ui-dist/assets/{index-BQ87dGIq.js → index-fDtlbG8Y.js} +1 -1
  274. package/ui-dist/assets/{index-CXnqg1Oq.js → index-gdvFtffQ.js} +1 -1
  275. package/ui-dist/assets/index-noipz8bE.css +1 -0
  276. package/ui-dist/assets/{index-Bxz75ICF.js → index-rnOTiIXd.js} +1 -1
  277. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-CnJd4-Jq.js → infoDiagram-FWYZ7A6U-DUR3sDTd.js} +1 -1
  278. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-Bq-qc3pD.js → ishikawaDiagram-FXEZZL3T-CcnYT0s0.js} +1 -1
  279. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-NSmpUGUA.js → journeyDiagram-5HDEW3XC-CqfbG8T1.js} +1 -1
  280. package/ui-dist/assets/{kanban-definition-HUTT4EX6-D7pgWtfA.js → kanban-definition-HUTT4EX6-CYwQM9eR.js} +1 -1
  281. package/ui-dist/assets/{layout-BRuo6LWe.js → layout-B2IlJgLE.js} +1 -1
  282. package/ui-dist/assets/{linear-CkaWI9Nd.js → linear-CcEPcfbO.js} +1 -1
  283. package/ui-dist/assets/{map-CgA6tTpZ.js → map-Bmhfvlpu.js} +1 -1
  284. package/ui-dist/assets/{mermaid.core-DrXOt-P6.js → mermaid.core-T9Q0CuQx.js} +4 -4
  285. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-D9ImeWBe.js → mindmap-definition-LN4V7U3C-CRjQlwN4.js} +1 -1
  286. package/ui-dist/assets/{pegDiagram-2B236MQR-Cq-zZ_zz.js → pegDiagram-2B236MQR-DenccdY8.js} +1 -1
  287. package/ui-dist/assets/{pieDiagram-ENE6RG2P-FgNgy726.js → pieDiagram-ENE6RG2P-CPiTrJcY.js} +1 -1
  288. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-BxQbmGmi.js → quadrantDiagram-ABIIQ3AL-fKbvGl_-.js} +1 -1
  289. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-CrpbkPH2.js → railroadDiagram-RFXS5EU6-D6uOjEmA.js} +1 -1
  290. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-DQ-65ZW6.js → requirementDiagram-TGXJPOKE-CQIQ387O.js} +1 -1
  291. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-Bom0lMZm.js → sankeyDiagram-HTMAVEWB-CKrnONJL.js} +1 -1
  292. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-C1MSDLDj.js → sequenceDiagram-DBY2YBRQ-C3vaOiZO.js} +1 -1
  293. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-Bn1vxebD.js → sizeCapture-X5ZJPWSS-F39EvxY0.js} +1 -1
  294. package/ui-dist/assets/{stateDiagram-2N3HPSRC-GRRQpmzI.js → stateDiagram-2N3HPSRC-Bq2sVFQq.js} +1 -1
  295. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-B94IPtHC.js +1 -0
  296. package/ui-dist/assets/{swimlanes-5IMT3BWC-BcOOCZ4q.js → swimlanes-5IMT3BWC-CSrygB7m.js} +2 -2
  297. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-9WQr2_E9.js +8 -0
  298. package/ui-dist/assets/{timeline-definition-FHXFAJF6-gi6amswh.js → timeline-definition-FHXFAJF6-DSMMlntv.js} +1 -1
  299. package/ui-dist/assets/{vennDiagram-L72KCM5P-B9uqeyQt.js → vennDiagram-L72KCM5P-D5XH96zV.js} +1 -1
  300. package/ui-dist/assets/{wardleyDiagram-EHGQE667-BnqWAMiE.js → wardleyDiagram-EHGQE667-BXX2RFsU.js} +1 -1
  301. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-BJXKltIN.js → xychartDiagram-FW5EYKEG-awBW2lwG.js} +1 -1
  302. package/ui-dist/index.html +2 -2
  303. package/dist/bootstrap/plugin-host-runtime.d.ts +0 -116
  304. package/dist/bootstrap/plugin-host-runtime.d.ts.map +0 -1
  305. package/dist/bootstrap/plugin-host-runtime.js +0 -179
  306. package/dist/bootstrap/plugin-host-runtime.js.map +0 -1
  307. package/dist/bundled-plugins/plugin-linear/README.md +0 -22
  308. package/dist/bundled-plugins/plugin-linear/dist/manifest.js +0 -183
  309. package/dist/bundled-plugins/plugin-linear/dist/manifest.js.map +0 -7
  310. package/dist/bundled-plugins/plugin-linear/dist/ui/index.js +0 -1285
  311. package/dist/bundled-plugins/plugin-linear/dist/ui/index.js.map +0 -7
  312. package/dist/bundled-plugins/plugin-linear/dist/worker.js +0 -10699
  313. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +0 -7
  314. package/dist/bundled-plugins/plugin-linear/package.json +0 -42
  315. package/dist/routes/plugin-ui-static.d.ts +0 -70
  316. package/dist/routes/plugin-ui-static.d.ts.map +0 -1
  317. package/dist/routes/plugin-ui-static.js +0 -375
  318. package/dist/routes/plugin-ui-static.js.map +0 -1
  319. package/dist/routes/plugins.d.ts +0 -120
  320. package/dist/routes/plugins.d.ts.map +0 -1
  321. package/dist/routes/plugins.js +0 -1125
  322. package/dist/routes/plugins.js.map +0 -1
  323. package/dist/routes/plugins.operations-routes.d.ts +0 -28
  324. package/dist/routes/plugins.operations-routes.d.ts.map +0 -1
  325. package/dist/routes/plugins.operations-routes.js +0 -720
  326. package/dist/routes/plugins.operations-routes.js.map +0 -1
  327. package/dist/services/plugin-capability-validator.d.ts +0 -108
  328. package/dist/services/plugin-capability-validator.d.ts.map +0 -1
  329. package/dist/services/plugin-capability-validator.js +0 -268
  330. package/dist/services/plugin-capability-validator.js.map +0 -1
  331. package/dist/services/plugin-config-validator.d.ts +0 -26
  332. package/dist/services/plugin-config-validator.d.ts.map +0 -1
  333. package/dist/services/plugin-config-validator.js +0 -41
  334. package/dist/services/plugin-config-validator.js.map +0 -1
  335. package/dist/services/plugin-dev-watcher.d.ts +0 -47
  336. package/dist/services/plugin-dev-watcher.d.ts.map +0 -1
  337. package/dist/services/plugin-dev-watcher.js +0 -275
  338. package/dist/services/plugin-dev-watcher.js.map +0 -1
  339. package/dist/services/plugin-event-bus.d.ts +0 -149
  340. package/dist/services/plugin-event-bus.d.ts.map +0 -1
  341. package/dist/services/plugin-event-bus.js +0 -258
  342. package/dist/services/plugin-event-bus.js.map +0 -1
  343. package/dist/services/plugin-host-service-cleanup.d.ts +0 -14
  344. package/dist/services/plugin-host-service-cleanup.d.ts.map +0 -1
  345. package/dist/services/plugin-host-service-cleanup.js +0 -37
  346. package/dist/services/plugin-host-service-cleanup.js.map +0 -1
  347. package/dist/services/plugin-host-services.d.ts +0 -13
  348. package/dist/services/plugin-host-services.d.ts.map +0 -1
  349. package/dist/services/plugin-host-services.js +0 -933
  350. package/dist/services/plugin-host-services.js.map +0 -1
  351. package/dist/services/plugin-job-coordinator.d.ts +0 -81
  352. package/dist/services/plugin-job-coordinator.d.ts.map +0 -1
  353. package/dist/services/plugin-job-coordinator.js +0 -172
  354. package/dist/services/plugin-job-coordinator.js.map +0 -1
  355. package/dist/services/plugin-job-scheduler.d.ts +0 -163
  356. package/dist/services/plugin-job-scheduler.d.ts.map +0 -1
  357. package/dist/services/plugin-job-scheduler.js +0 -452
  358. package/dist/services/plugin-job-scheduler.js.map +0 -1
  359. package/dist/services/plugin-job-store.d.ts +0 -208
  360. package/dist/services/plugin-job-store.d.ts.map +0 -1
  361. package/dist/services/plugin-job-store.js +0 -350
  362. package/dist/services/plugin-job-store.js.map +0 -1
  363. package/dist/services/plugin-lifecycle.d.ts +0 -240
  364. package/dist/services/plugin-lifecycle.d.ts.map +0 -1
  365. package/dist/services/plugin-lifecycle.js +0 -439
  366. package/dist/services/plugin-lifecycle.js.map +0 -1
  367. package/dist/services/plugin-loader.core.d.ts +0 -40
  368. package/dist/services/plugin-loader.core.d.ts.map +0 -1
  369. package/dist/services/plugin-loader.core.js +0 -879
  370. package/dist/services/plugin-loader.core.js.map +0 -1
  371. package/dist/services/plugin-loader.d.ts +0 -30
  372. package/dist/services/plugin-loader.d.ts.map +0 -1
  373. package/dist/services/plugin-loader.helpers.d.ts +0 -495
  374. package/dist/services/plugin-loader.helpers.d.ts.map +0 -1
  375. package/dist/services/plugin-loader.helpers.js +0 -238
  376. package/dist/services/plugin-loader.helpers.js.map +0 -1
  377. package/dist/services/plugin-loader.js +0 -30
  378. package/dist/services/plugin-loader.js.map +0 -1
  379. package/dist/services/plugin-loader.worker-paths.d.ts +0 -37
  380. package/dist/services/plugin-loader.worker-paths.d.ts.map +0 -1
  381. package/dist/services/plugin-loader.worker-paths.js +0 -62
  382. package/dist/services/plugin-loader.worker-paths.js.map +0 -1
  383. package/dist/services/plugin-log-retention.d.ts +0 -20
  384. package/dist/services/plugin-log-retention.d.ts.map +0 -1
  385. package/dist/services/plugin-log-retention.js +0 -63
  386. package/dist/services/plugin-log-retention.js.map +0 -1
  387. package/dist/services/plugin-manifest-validator.d.ts +0 -90
  388. package/dist/services/plugin-manifest-validator.d.ts.map +0 -1
  389. package/dist/services/plugin-manifest-validator.js +0 -72
  390. package/dist/services/plugin-manifest-validator.js.map +0 -1
  391. package/dist/services/plugin-registry.d.ts +0 -2542
  392. package/dist/services/plugin-registry.d.ts.map +0 -1
  393. package/dist/services/plugin-registry.js +0 -536
  394. package/dist/services/plugin-registry.js.map +0 -1
  395. package/dist/services/plugin-runtime-sandbox.d.ts +0 -40
  396. package/dist/services/plugin-runtime-sandbox.d.ts.map +0 -1
  397. package/dist/services/plugin-runtime-sandbox.js +0 -154
  398. package/dist/services/plugin-runtime-sandbox.js.map +0 -1
  399. package/dist/services/plugin-secrets-handler.d.ts +0 -81
  400. package/dist/services/plugin-secrets-handler.d.ts.map +0 -1
  401. package/dist/services/plugin-secrets-handler.js +0 -275
  402. package/dist/services/plugin-secrets-handler.js.map +0 -1
  403. package/dist/services/plugin-state-store.d.ts +0 -92
  404. package/dist/services/plugin-state-store.d.ts.map +0 -1
  405. package/dist/services/plugin-state-store.js +0 -190
  406. package/dist/services/plugin-state-store.js.map +0 -1
  407. package/dist/services/plugin-stream-bus.d.ts +0 -29
  408. package/dist/services/plugin-stream-bus.d.ts.map +0 -1
  409. package/dist/services/plugin-stream-bus.js +0 -48
  410. package/dist/services/plugin-stream-bus.js.map +0 -1
  411. package/dist/services/plugin-tool-dispatcher.d.ts +0 -180
  412. package/dist/services/plugin-tool-dispatcher.d.ts.map +0 -1
  413. package/dist/services/plugin-tool-dispatcher.js +0 -224
  414. package/dist/services/plugin-tool-dispatcher.js.map +0 -1
  415. package/dist/services/plugin-tool-registry.d.ts +0 -192
  416. package/dist/services/plugin-tool-registry.d.ts.map +0 -1
  417. package/dist/services/plugin-tool-registry.js +0 -224
  418. package/dist/services/plugin-tool-registry.js.map +0 -1
  419. package/dist/services/plugin-worker-manager.d.ts +0 -260
  420. package/dist/services/plugin-worker-manager.d.ts.map +0 -1
  421. package/dist/services/plugin-worker-manager.js +0 -836
  422. package/dist/services/plugin-worker-manager.js.map +0 -1
  423. package/ui-dist/assets/channel-C08AyYJr.js +0 -1
  424. package/ui-dist/assets/classDiagram-OUVF2IWQ-BIXq6fec.js +0 -1
  425. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-BIXq6fec.js +0 -1
  426. package/ui-dist/assets/index-BmXb0yC1.css +0 -1
  427. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-KvSJhiLM.js +0 -1
  428. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-Cr92NnJ4.js +0 -8
@@ -1,4 +1,4 @@
1
- import { agents, assets, documents, executionWorkspaces, goals, heartbeatRuns, issueAttachments, issueComments, issueDocuments, issueFollows, issueLabels, issueReadStates, issues, labels, organizationIssuePrefixAliases, organizationMemberships, organizations, projectWorkspaces, projects } from "@rudderhq/db";
1
+ import { activityLog, agents, assets, documents, executionWorkspaces, goals, heartbeatRuns, issueAttachments, issueComments, issueDocuments, issueFollows, issueLabels, issueReadStates, issues, labels, organizationIssuePrefixAliases, organizationMemberships, organizations, projectWorkspaces, projects } from "@rudderhq/db";
2
2
  import { and, asc, desc, eq, inArray, isNull, ne, or, sql } from "drizzle-orm";
3
3
  import { conflict, notFound, unprocessable } from "../errors.js";
4
4
  import { redactCurrentUserText } from "../log-redaction.js";
@@ -35,6 +35,12 @@ function normalizeIssueListOffset(offset) {
35
35
  }
36
36
  export function issueService(db) {
37
37
  const instanceSettings = instanceSettingsService(db);
38
+ const issueCreateResults = new WeakMap();
39
+ let createIssue;
40
+ function rememberIssueCreateResult(issue, created) {
41
+ issueCreateResults.set(issue, created);
42
+ return issue;
43
+ }
38
44
  function redactIssueComment(comment, censorUsernameInLogs) {
39
45
  return {
40
46
  ...comment,
@@ -298,7 +304,7 @@ export function issueService(db) {
298
304
  searchMatch: matchesByIssueId.get(row.id) ?? null,
299
305
  }));
300
306
  }
301
- return {
307
+ const service = {
302
308
  listFollows: async (orgId, userId) => {
303
309
  const rows = await db
304
310
  .select({
@@ -553,6 +559,17 @@ export function issueService(db) {
553
559
  .from(issueComments)
554
560
  .where(and(eq(issueComments.orgId, orgId), inArray(issueComments.issueId, issueIds), isNull(issueComments.deletedAt)))
555
561
  .groupBy(issueComments.issueId);
562
+ const notificationRows = await db
563
+ .select({
564
+ issueId: activityLog.entityId,
565
+ lastExternalActivityAt: sql `MAX(${activityLog.createdAt})`,
566
+ })
567
+ .from(activityLog)
568
+ .where(and(eq(activityLog.orgId, orgId), eq(activityLog.entityType, "issue"), inArray(activityLog.entityId, issueIds), inArray(activityLog.action, [
569
+ "automation.issue_created_notification",
570
+ "agent.issue_created_notification",
571
+ ]), sql `${activityLog.details}->>'userId' = ${contextUserId}`))
572
+ .groupBy(activityLog.entityId);
556
573
  const readRows = await db
557
574
  .select({
558
575
  issueId: issueReadStates.issueId,
@@ -561,6 +578,17 @@ export function issueService(db) {
561
578
  .from(issueReadStates)
562
579
  .where(and(eq(issueReadStates.orgId, orgId), eq(issueReadStates.userId, contextUserId), inArray(issueReadStates.issueId, issueIds)));
563
580
  const statsByIssueId = new Map(statsRows.map((row) => [row.issueId, row]));
581
+ for (const row of notificationRows) {
582
+ const existing = statsByIssueId.get(row.issueId);
583
+ statsByIssueId.set(row.issueId, {
584
+ ...(existing ?? {
585
+ issueId: row.issueId,
586
+ myLastCommentAt: null,
587
+ lastExternalCommentAt: null,
588
+ }),
589
+ lastExternalActivityAt: row.lastExternalActivityAt,
590
+ });
591
+ }
564
592
  const readByIssueId = new Map(readRows.map((row) => [row.issueId, row.myLastReadAt]));
565
593
  return withSearchMatches.map((row) => ({
566
594
  ...row,
@@ -568,6 +596,7 @@ export function issueService(db) {
568
596
  myLastCommentAt: statsByIssueId.get(row.id)?.myLastCommentAt ?? null,
569
597
  myLastReadAt: readByIssueId.get(row.id) ?? null,
570
598
  lastExternalCommentAt: statsByIssueId.get(row.id)?.lastExternalCommentAt ?? null,
599
+ lastExternalActivityAt: statsByIssueId.get(row.id)?.lastExternalActivityAt ?? null,
571
600
  }),
572
601
  }));
573
602
  },
@@ -654,9 +683,42 @@ export function issueService(db) {
654
683
  const [enriched] = await withIssueLabels(db, [row]);
655
684
  return enriched;
656
685
  },
686
+ getByOrigin: async (orgId, originKind, originId) => {
687
+ const row = await db
688
+ .select()
689
+ .from(issues)
690
+ .where(and(eq(issues.orgId, orgId), eq(issues.originKind, originKind), eq(issues.originId, originId)))
691
+ .then((rows) => rows[0] ?? null);
692
+ if (!row)
693
+ return null;
694
+ const [enriched] = await withIssueLabels(db, [row]);
695
+ return enriched;
696
+ },
697
+ createWithResult: async (orgId, data) => {
698
+ const issue = await createIssue(orgId, data);
699
+ return {
700
+ issue,
701
+ created: issueCreateResults.get(issue) ?? true,
702
+ };
703
+ },
657
704
  create: async (orgId, data) => {
658
705
  const { labelIds: inputLabelIds, ...rawIssueData } = data;
659
706
  const issueData = { ...rawIssueData };
707
+ const agentIssueCreationOrigin = issueData.originKind === "agent_issue_creation"
708
+ && typeof issueData.originId === "string"
709
+ ? issueData.originId
710
+ : null;
711
+ if (agentIssueCreationOrigin) {
712
+ const existing = await db
713
+ .select()
714
+ .from(issues)
715
+ .where(and(eq(issues.orgId, orgId), eq(issues.originKind, "agent_issue_creation"), eq(issues.originId, agentIssueCreationOrigin)))
716
+ .then((rows) => rows[0] ?? null);
717
+ if (existing) {
718
+ const [enriched] = await withIssueLabels(db, [existing]);
719
+ return rememberIssueCreateResult(enriched, false);
720
+ }
721
+ }
660
722
  if (data.assigneeAgentId && data.assigneeUserId) {
661
723
  throw unprocessable("Issue can only have one assignee");
662
724
  }
@@ -691,144 +753,160 @@ export function issueService(db) {
691
753
  if (data.status === "in_progress" && !data.assigneeAgentId && !data.assigneeUserId) {
692
754
  throw unprocessable("in_progress issues require an assignee");
693
755
  }
694
- return db.transaction(async (tx) => {
695
- let executionWorkspaceSettings = issueData.executionWorkspaceSettings ?? null;
696
- if (executionWorkspaceSettings == null && issueData.projectId) {
697
- const project = await tx
698
- .select({ executionWorkspacePolicy: projects.executionWorkspacePolicy })
699
- .from(projects)
700
- .where(and(eq(projects.id, issueData.projectId), eq(projects.orgId, orgId)))
701
- .then((rows) => rows[0] ?? null);
702
- executionWorkspaceSettings =
703
- defaultIssueExecutionWorkspaceSettingsForProject(parseProjectExecutionWorkspacePolicy(project?.executionWorkspacePolicy));
704
- }
705
- // Legacy fallback: keep old project_workspace_id population for
706
- // existing runtime resolution paths. Current run workspace behavior is
707
- // configured through executionWorkspaceSettings / executionWorkspaces.
708
- let projectWorkspaceId = issueData.projectWorkspaceId ?? null;
709
- if (!projectWorkspaceId && issueData.projectId) {
710
- const project = await tx
711
- .select({
712
- executionWorkspacePolicy: projects.executionWorkspacePolicy,
713
- })
714
- .from(projects)
715
- .where(and(eq(projects.id, issueData.projectId), eq(projects.orgId, orgId)))
716
- .then((rows) => rows[0] ?? null);
717
- const projectPolicy = parseProjectExecutionWorkspacePolicy(project?.executionWorkspacePolicy);
718
- projectWorkspaceId = projectPolicy?.defaultProjectWorkspaceId ?? null;
719
- if (!projectWorkspaceId) {
720
- projectWorkspaceId = await tx
721
- .select({ id: projectWorkspaces.id })
722
- .from(projectWorkspaces)
723
- .where(and(eq(projectWorkspaces.projectId, issueData.projectId), eq(projectWorkspaces.orgId, orgId)))
724
- .orderBy(desc(projectWorkspaces.isPrimary), asc(projectWorkspaces.createdAt), asc(projectWorkspaces.id))
725
- .then((rows) => rows[0]?.id ?? null);
756
+ try {
757
+ return await db.transaction(async (tx) => {
758
+ let executionWorkspaceSettings = issueData.executionWorkspaceSettings ?? null;
759
+ if (executionWorkspaceSettings == null && issueData.projectId) {
760
+ const project = await tx
761
+ .select({ executionWorkspacePolicy: projects.executionWorkspacePolicy })
762
+ .from(projects)
763
+ .where(and(eq(projects.id, issueData.projectId), eq(projects.orgId, orgId)))
764
+ .then((rows) => rows[0] ?? null);
765
+ executionWorkspaceSettings =
766
+ defaultIssueExecutionWorkspaceSettingsForProject(parseProjectExecutionWorkspacePolicy(project?.executionWorkspacePolicy));
726
767
  }
727
- }
728
- const [organization] = await tx
729
- .update(organizations)
730
- .set({ issueCounter: sql `${organizations.issueCounter} + 1` })
731
- .where(eq(organizations.id, orgId))
732
- .returning({ issueCounter: organizations.issueCounter, issuePrefix: organizations.issuePrefix });
733
- const issueNumber = organization.issueCounter;
734
- const identifier = `${organization.issuePrefix}-${issueNumber}`;
735
- const values = {
736
- ...issueData,
737
- originKind: issueData.originKind ?? "manual",
738
- goalId: issueData.goalId ?? null,
739
- ...(projectWorkspaceId ? { projectWorkspaceId } : {}),
740
- ...(executionWorkspaceSettings ? { executionWorkspaceSettings } : {}),
741
- orgId,
742
- issueNumber,
743
- identifier,
744
- };
745
- if (values.status === "in_progress" && !values.startedAt) {
746
- values.startedAt = new Date();
747
- }
748
- if (values.status === "done") {
749
- values.completedAt = new Date();
750
- }
751
- if (values.status === "cancelled") {
752
- values.cancelledAt = new Date();
753
- }
754
- if (values.boardOrder === undefined) {
755
- const statusForOrder = values.status ?? "backlog";
756
- const currentMax = await tx
757
- .select({ value: sql `coalesce(max(${issues.boardOrder}), 0)` })
758
- .from(issues)
759
- .where(and(eq(issues.orgId, orgId), eq(issues.status, statusForOrder)))
760
- .then((rows) => Number(rows[0]?.value ?? 0));
761
- values.boardOrder = currentMax + BOARD_ORDER_STEP;
762
- }
763
- const resolvedLabelIds = await resolveCreateLabelIds(orgId, issueData, inputLabelIds, tx);
764
- const [issue] = await tx.insert(issues).values(values).returning();
765
- if (resolvedLabelIds) {
766
- await syncIssueLabels(issue.id, orgId, resolvedLabelIds, tx);
767
- }
768
- const creationActorType = issue.createdByUserId
769
- ? "human"
770
- : issue.originKind === "automation_execution"
771
- ? "automation"
772
- : issue.createdByAgentId
773
- ? "agent"
774
- : "system";
775
- const creationOrigin = creationActorType === "human"
776
- ? "human"
777
- : creationActorType === "automation"
778
- ? "automation"
779
- : "system";
780
- await recordProductAnalyticsEvent(tx, {
781
- orgId,
782
- eventName: "issue_created",
783
- occurredAt: issue.createdAt,
784
- sourceTransition: "issue.create",
785
- confidence: "exact",
786
- actorType: creationActorType,
787
- actorId: issue.createdByUserId ?? issue.createdByAgentId ?? null,
788
- entityType: "issue",
789
- entityId: issue.id,
790
- workSurface: "issue",
791
- workId: issue.id,
792
- origin: creationOrigin,
793
- dedupeKey: `issue_created:${issue.id}`,
794
- properties: {
795
- creation_path: issue.originKind,
796
- has_goal_link: issue.goalId !== null,
797
- has_project_link: issue.projectId !== null,
798
- is_sub_issue: issue.parentId !== null,
799
- },
800
- });
801
- if (issue.createdByUserId && (issue.status === "in_progress" || issue.executionRunId !== null)) {
802
- const workCycleId = `issue:${issue.id}`;
803
- await ensureProductAnalyticsWorkCycle(tx, {
768
+ // Legacy fallback: keep old project_workspace_id population for
769
+ // existing runtime resolution paths. Current run workspace behavior is
770
+ // configured through executionWorkspaceSettings / executionWorkspaces.
771
+ let projectWorkspaceId = issueData.projectWorkspaceId ?? null;
772
+ if (!projectWorkspaceId && issueData.projectId) {
773
+ const project = await tx
774
+ .select({
775
+ executionWorkspacePolicy: projects.executionWorkspacePolicy,
776
+ })
777
+ .from(projects)
778
+ .where(and(eq(projects.id, issueData.projectId), eq(projects.orgId, orgId)))
779
+ .then((rows) => rows[0] ?? null);
780
+ const projectPolicy = parseProjectExecutionWorkspacePolicy(project?.executionWorkspacePolicy);
781
+ projectWorkspaceId = projectPolicy?.defaultProjectWorkspaceId ?? null;
782
+ if (!projectWorkspaceId) {
783
+ projectWorkspaceId = await tx
784
+ .select({ id: projectWorkspaces.id })
785
+ .from(projectWorkspaces)
786
+ .where(and(eq(projectWorkspaces.projectId, issueData.projectId), eq(projectWorkspaces.orgId, orgId)))
787
+ .orderBy(desc(projectWorkspaces.isPrimary), asc(projectWorkspaces.createdAt), asc(projectWorkspaces.id))
788
+ .then((rows) => rows[0]?.id ?? null);
789
+ }
790
+ }
791
+ const [organization] = await tx
792
+ .update(organizations)
793
+ .set({ issueCounter: sql `${organizations.issueCounter} + 1` })
794
+ .where(eq(organizations.id, orgId))
795
+ .returning({ issueCounter: organizations.issueCounter, issuePrefix: organizations.issuePrefix });
796
+ const issueNumber = organization.issueCounter;
797
+ const identifier = `${organization.issuePrefix}-${issueNumber}`;
798
+ const values = {
799
+ ...issueData,
800
+ originKind: issueData.originKind ?? "manual",
801
+ goalId: issueData.goalId ?? null,
802
+ ...(projectWorkspaceId ? { projectWorkspaceId } : {}),
803
+ ...(executionWorkspaceSettings ? { executionWorkspaceSettings } : {}),
804
804
  orgId,
805
- workSurface: "issue",
806
- workId: issue.id,
807
- workCycleId,
808
- actorId: issue.createdByUserId,
809
- startedAt: issue.createdAt,
810
- });
805
+ issueNumber,
806
+ identifier,
807
+ };
808
+ if (values.status === "in_progress" && !values.startedAt) {
809
+ values.startedAt = new Date();
810
+ }
811
+ if (values.status === "done") {
812
+ values.completedAt = new Date();
813
+ }
814
+ if (values.status === "cancelled") {
815
+ values.cancelledAt = new Date();
816
+ }
817
+ if (values.boardOrder === undefined) {
818
+ const statusForOrder = values.status ?? "backlog";
819
+ const currentMax = await tx
820
+ .select({ value: sql `coalesce(max(${issues.boardOrder}), 0)` })
821
+ .from(issues)
822
+ .where(and(eq(issues.orgId, orgId), eq(issues.status, statusForOrder)))
823
+ .then((rows) => Number(rows[0]?.value ?? 0));
824
+ values.boardOrder = currentMax + BOARD_ORDER_STEP;
825
+ }
826
+ const resolvedLabelIds = await resolveCreateLabelIds(orgId, issueData, inputLabelIds, tx);
827
+ const [issue] = await tx.insert(issues).values(values).returning();
828
+ if (resolvedLabelIds) {
829
+ await syncIssueLabels(issue.id, orgId, resolvedLabelIds, tx);
830
+ }
831
+ const creationActorType = issue.createdByUserId
832
+ ? "human"
833
+ : issue.originKind === "automation_execution"
834
+ ? "automation"
835
+ : issue.createdByAgentId
836
+ ? "agent"
837
+ : "system";
838
+ const creationOrigin = creationActorType === "human"
839
+ ? "human"
840
+ : creationActorType === "automation"
841
+ ? "automation"
842
+ : "system";
811
843
  await recordProductAnalyticsEvent(tx, {
812
844
  orgId,
813
- eventName: "human_work_started",
845
+ eventName: "issue_created",
814
846
  occurredAt: issue.createdAt,
815
847
  sourceTransition: "issue.create",
816
848
  confidence: "exact",
817
- actorType: "human",
818
- actorId: issue.createdByUserId,
849
+ actorType: creationActorType,
850
+ actorId: issue.createdByUserId ?? issue.createdByAgentId ?? null,
819
851
  entityType: "issue",
820
852
  entityId: issue.id,
821
853
  workSurface: "issue",
822
854
  workId: issue.id,
823
- workCycleId,
824
- origin: "human",
825
- dedupeKey: `human_work_started:${workCycleId}`,
826
- properties: { work_surface: "issue", origin: "human" },
855
+ origin: creationOrigin,
856
+ dedupeKey: `issue_created:${issue.id}`,
857
+ properties: {
858
+ creation_path: issue.originKind,
859
+ has_goal_link: issue.goalId !== null,
860
+ has_project_link: issue.projectId !== null,
861
+ is_sub_issue: issue.parentId !== null,
862
+ },
827
863
  });
864
+ if (issue.createdByUserId && (issue.status === "in_progress" || issue.executionRunId !== null)) {
865
+ const workCycleId = `issue:${issue.id}`;
866
+ await ensureProductAnalyticsWorkCycle(tx, {
867
+ orgId,
868
+ workSurface: "issue",
869
+ workId: issue.id,
870
+ workCycleId,
871
+ actorId: issue.createdByUserId,
872
+ startedAt: issue.createdAt,
873
+ });
874
+ await recordProductAnalyticsEvent(tx, {
875
+ orgId,
876
+ eventName: "human_work_started",
877
+ occurredAt: issue.createdAt,
878
+ sourceTransition: "issue.create",
879
+ confidence: "exact",
880
+ actorType: "human",
881
+ actorId: issue.createdByUserId,
882
+ entityType: "issue",
883
+ entityId: issue.id,
884
+ workSurface: "issue",
885
+ workId: issue.id,
886
+ workCycleId,
887
+ origin: "human",
888
+ dedupeKey: `human_work_started:${workCycleId}`,
889
+ properties: { work_surface: "issue", origin: "human" },
890
+ });
891
+ }
892
+ const [enriched] = await withIssueLabels(tx, [issue]);
893
+ return rememberIssueCreateResult(enriched, true);
894
+ });
895
+ }
896
+ catch (error) {
897
+ if (!agentIssueCreationOrigin || !isUniqueConstraintConflict(error, "issues_agent_issue_creation_origin_uq")) {
898
+ throw error;
828
899
  }
829
- const [enriched] = await withIssueLabels(tx, [issue]);
830
- return enriched;
831
- });
900
+ const existing = await db
901
+ .select()
902
+ .from(issues)
903
+ .where(and(eq(issues.orgId, orgId), eq(issues.originKind, "agent_issue_creation"), eq(issues.originId, agentIssueCreationOrigin)))
904
+ .then((rows) => rows[0] ?? null);
905
+ if (!existing)
906
+ throw error;
907
+ const [enriched] = await withIssueLabels(db, [existing]);
908
+ return rememberIssueCreateResult(enriched, false);
909
+ }
832
910
  },
833
911
  update: async (id, data, authorization) => {
834
912
  const existing = await db
@@ -1483,5 +1561,7 @@ export function issueService(db) {
1483
1561
  }));
1484
1562
  },
1485
1563
  };
1564
+ createIssue = service.create;
1565
+ return service;
1486
1566
  }
1487
1567
  //# sourceMappingURL=issues.js.map