@rudderhq/server 0.7.2-canary.0 → 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 (570) hide show
  1. package/dist/agent-runtimes/codex-models.d.ts +11 -0
  2. package/dist/agent-runtimes/codex-models.d.ts.map +1 -1
  3. package/dist/agent-runtimes/codex-models.js +155 -2
  4. package/dist/agent-runtimes/codex-models.js.map +1 -1
  5. package/dist/agent-runtimes/cursor-models.d.ts.map +1 -1
  6. package/dist/agent-runtimes/cursor-models.js +31 -9
  7. package/dist/agent-runtimes/cursor-models.js.map +1 -1
  8. package/dist/agent-runtimes/index.d.ts +1 -1
  9. package/dist/agent-runtimes/index.d.ts.map +1 -1
  10. package/dist/agent-runtimes/index.js +1 -1
  11. package/dist/agent-runtimes/index.js.map +1 -1
  12. package/dist/agent-runtimes/registry.d.ts +11 -4
  13. package/dist/agent-runtimes/registry.d.ts.map +1 -1
  14. package/dist/agent-runtimes/registry.js +52 -3
  15. package/dist/agent-runtimes/registry.js.map +1 -1
  16. package/dist/app.d.ts.map +1 -1
  17. package/dist/app.js +1 -5
  18. package/dist/app.js.map +1 -1
  19. package/dist/bootstrap/create-http-app.d.ts +1 -2
  20. package/dist/bootstrap/create-http-app.d.ts.map +1 -1
  21. package/dist/bootstrap/create-http-app.js +13 -12
  22. package/dist/bootstrap/create-http-app.js.map +1 -1
  23. package/dist/bootstrap/register-api-routes.d.ts +1 -2
  24. package/dist/bootstrap/register-api-routes.d.ts.map +1 -1
  25. package/dist/bootstrap/register-api-routes.js +20 -4
  26. package/dist/bootstrap/register-api-routes.js.map +1 -1
  27. package/dist/index.d.ts.map +1 -1
  28. package/dist/index.js +86 -30
  29. package/dist/index.js.map +1 -1
  30. package/dist/middleware/logger.js +2 -2
  31. package/dist/middleware/logger.js.map +1 -1
  32. package/dist/middleware/logger.test.js +26 -10
  33. package/dist/middleware/logger.test.js.map +1 -1
  34. package/dist/redaction.d.ts +1 -0
  35. package/dist/redaction.d.ts.map +1 -1
  36. package/dist/redaction.js +13 -0
  37. package/dist/redaction.js.map +1 -1
  38. package/dist/routes/access.helpers.d.ts +1 -1
  39. package/dist/routes/agent-issue-creation.d.ts +25 -0
  40. package/dist/routes/agent-issue-creation.d.ts.map +1 -0
  41. package/dist/routes/agent-issue-creation.js +201 -0
  42. package/dist/routes/agent-issue-creation.js.map +1 -0
  43. package/dist/routes/agents.d.ts.map +1 -1
  44. package/dist/routes/agents.js +20 -6
  45. package/dist/routes/agents.js.map +1 -1
  46. package/dist/routes/agents.management-routes.d.ts.map +1 -1
  47. package/dist/routes/agents.management-routes.js +13 -10
  48. package/dist/routes/agents.management-routes.js.map +1 -1
  49. package/dist/routes/app-builder.d.ts +3 -1
  50. package/dist/routes/app-builder.d.ts.map +1 -1
  51. package/dist/routes/app-builder.js +31 -11
  52. package/dist/routes/app-builder.js.map +1 -1
  53. package/dist/routes/approvals.d.ts.map +1 -1
  54. package/dist/routes/approvals.js +77 -1
  55. package/dist/routes/approvals.js.map +1 -1
  56. package/dist/routes/chats.d.ts.map +1 -1
  57. package/dist/routes/chats.js +1 -0
  58. package/dist/routes/chats.js.map +1 -1
  59. package/dist/routes/chats.stream-routes.d.ts.map +1 -1
  60. package/dist/routes/chats.stream-routes.js +4 -0
  61. package/dist/routes/chats.stream-routes.js.map +1 -1
  62. package/dist/routes/computer.d.ts +30 -0
  63. package/dist/routes/computer.d.ts.map +1 -0
  64. package/dist/routes/computer.js +231 -0
  65. package/dist/routes/computer.js.map +1 -0
  66. package/dist/routes/goals.d.ts.map +1 -1
  67. package/dist/routes/goals.js +349 -23
  68. package/dist/routes/goals.js.map +1 -1
  69. package/dist/routes/health.d.ts.map +1 -1
  70. package/dist/routes/health.js +3 -0
  71. package/dist/routes/health.js.map +1 -1
  72. package/dist/routes/instance-settings.d.ts.map +1 -1
  73. package/dist/routes/instance-settings.js +3 -0
  74. package/dist/routes/instance-settings.js.map +1 -1
  75. package/dist/routes/issues.comments-attachments.d.ts.map +1 -1
  76. package/dist/routes/issues.comments-attachments.js +90 -8
  77. package/dist/routes/issues.comments-attachments.js.map +1 -1
  78. package/dist/routes/issues.d.ts.map +1 -1
  79. package/dist/routes/issues.js +12 -1
  80. package/dist/routes/issues.js.map +1 -1
  81. package/dist/routes/issues.mutations.d.ts.map +1 -1
  82. package/dist/routes/issues.mutations.js +85 -33
  83. package/dist/routes/issues.mutations.js.map +1 -1
  84. package/dist/routes/managed-mcp-connections.d.ts.map +1 -1
  85. package/dist/routes/managed-mcp-connections.js +46 -7
  86. package/dist/routes/managed-mcp-connections.js.map +1 -1
  87. package/dist/routes/managed-mcp-runtime.d.ts.map +1 -1
  88. package/dist/routes/managed-mcp-runtime.js +109 -7
  89. package/dist/routes/managed-mcp-runtime.js.map +1 -1
  90. package/dist/routes/product-analytics-collector-report.d.ts +29 -0
  91. package/dist/routes/product-analytics-collector-report.d.ts.map +1 -1
  92. package/dist/routes/product-analytics-collector-report.js +57 -1
  93. package/dist/routes/product-analytics-collector-report.js.map +1 -1
  94. package/dist/routes/product-analytics-collector-report.test.d.ts +2 -0
  95. package/dist/routes/product-analytics-collector-report.test.d.ts.map +1 -0
  96. package/dist/routes/product-analytics-collector-report.test.js +50 -0
  97. package/dist/routes/product-analytics-collector-report.test.js.map +1 -0
  98. package/dist/routes/rudder-plugins.d.ts +4 -0
  99. package/dist/routes/rudder-plugins.d.ts.map +1 -0
  100. package/dist/routes/rudder-plugins.js +213 -0
  101. package/dist/routes/rudder-plugins.js.map +1 -0
  102. package/dist/services/activity-log.d.ts +0 -3
  103. package/dist/services/activity-log.d.ts.map +1 -1
  104. package/dist/services/activity-log.js +0 -33
  105. package/dist/services/activity-log.js.map +1 -1
  106. package/dist/services/activity.d.ts +3 -3
  107. package/dist/services/agent-issue-creation.d.ts +344 -0
  108. package/dist/services/agent-issue-creation.d.ts.map +1 -0
  109. package/dist/services/agent-issue-creation.js +675 -0
  110. package/dist/services/agent-issue-creation.js.map +1 -0
  111. package/dist/services/agent-run-context.d.ts.map +1 -1
  112. package/dist/services/agent-run-context.js +13 -2
  113. package/dist/services/agent-run-context.js.map +1 -1
  114. package/dist/services/app-builder.d.ts.map +1 -1
  115. package/dist/services/app-builder.js +24 -3
  116. package/dist/services/app-builder.js.map +1 -1
  117. package/dist/services/automation-chat-output.d.ts +1 -1
  118. package/dist/services/automation-chat-output.d.ts.map +1 -1
  119. package/dist/services/automation-chat-output.js +24 -14
  120. package/dist/services/automation-chat-output.js.map +1 -1
  121. package/dist/services/chat-annotation-copy-lineage.d.ts +1 -1
  122. package/dist/services/chat-assistant.d.ts.map +1 -1
  123. package/dist/services/chat-assistant.helpers.d.ts +4 -4
  124. package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
  125. package/dist/services/chat-assistant.helpers.js.map +1 -1
  126. package/dist/services/chat-assistant.js +45 -13
  127. package/dist/services/chat-assistant.js.map +1 -1
  128. package/dist/services/chat-assistant.runtime-overrides.d.ts +2 -1
  129. package/dist/services/chat-assistant.runtime-overrides.d.ts.map +1 -1
  130. package/dist/services/chat-assistant.runtime-overrides.js +47 -18
  131. package/dist/services/chat-assistant.runtime-overrides.js.map +1 -1
  132. package/dist/services/chat-assistant.runtime-overrides.test.d.ts +2 -0
  133. package/dist/services/chat-assistant.runtime-overrides.test.d.ts.map +1 -0
  134. package/dist/services/chat-assistant.runtime-overrides.test.js +37 -0
  135. package/dist/services/chat-assistant.runtime-overrides.test.js.map +1 -0
  136. package/dist/services/chat-generation-protocol.d.ts.map +1 -1
  137. package/dist/services/chat-generation-protocol.js +1 -12
  138. package/dist/services/chat-generation-protocol.js.map +1 -1
  139. package/dist/services/chat-generation-protocol.test.js +16 -25
  140. package/dist/services/chat-generation-protocol.test.js.map +1 -1
  141. package/dist/services/chat-generation-provenance.d.ts.map +1 -1
  142. package/dist/services/chat-generation-provenance.js +4 -2
  143. package/dist/services/chat-generation-provenance.js.map +1 -1
  144. package/dist/services/chat-queued-message-materialization.d.ts.map +1 -1
  145. package/dist/services/chat-queued-message-materialization.js +12 -2
  146. package/dist/services/chat-queued-message-materialization.js.map +1 -1
  147. package/dist/services/chat-transcript-persistence.d.ts +49 -0
  148. package/dist/services/chat-transcript-persistence.d.ts.map +1 -0
  149. package/dist/services/chat-transcript-persistence.js +238 -0
  150. package/dist/services/chat-transcript-persistence.js.map +1 -0
  151. package/dist/services/chat-transcript-persistence.test.d.ts +2 -0
  152. package/dist/services/chat-transcript-persistence.test.d.ts.map +1 -0
  153. package/dist/services/chat-transcript-persistence.test.js +23 -0
  154. package/dist/services/chat-transcript-persistence.test.js.map +1 -0
  155. package/dist/services/chat-work-manifest.d.ts.map +1 -1
  156. package/dist/services/chat-work-manifest.js +36 -10
  157. package/dist/services/chat-work-manifest.js.map +1 -1
  158. package/dist/services/chats.annotation-persistence.d.ts.map +1 -1
  159. package/dist/services/chats.annotation-persistence.js +25 -6
  160. package/dist/services/chats.annotation-persistence.js.map +1 -1
  161. package/dist/services/chats.create.d.ts.map +1 -1
  162. package/dist/services/chats.create.js +49 -4
  163. package/dist/services/chats.create.js.map +1 -1
  164. package/dist/services/chats.d.ts +10 -10
  165. package/dist/services/chats.d.ts.map +1 -1
  166. package/dist/services/chats.inline-visual-persistence.d.ts +2 -1
  167. package/dist/services/chats.inline-visual-persistence.d.ts.map +1 -1
  168. package/dist/services/chats.inline-visual-persistence.js +19 -2
  169. package/dist/services/chats.inline-visual-persistence.js.map +1 -1
  170. package/dist/services/chats.js +177 -95
  171. package/dist/services/chats.js.map +1 -1
  172. package/dist/services/computer-broker.d.ts +35 -0
  173. package/dist/services/computer-broker.d.ts.map +1 -0
  174. package/dist/services/computer-broker.js +211 -0
  175. package/dist/services/computer-broker.js.map +1 -0
  176. package/dist/services/computer-broker.test.d.ts +2 -0
  177. package/dist/services/computer-broker.test.d.ts.map +1 -0
  178. package/dist/services/computer-broker.test.js +70 -0
  179. package/dist/services/computer-broker.test.js.map +1 -0
  180. package/dist/services/computer-capability.d.ts +13 -0
  181. package/dist/services/computer-capability.d.ts.map +1 -0
  182. package/dist/services/computer-capability.js +11 -0
  183. package/dist/services/computer-capability.js.map +1 -0
  184. package/dist/services/computer-capability.test.d.ts +2 -0
  185. package/dist/services/computer-capability.test.d.ts.map +1 -0
  186. package/dist/services/computer-capability.test.js +27 -0
  187. package/dist/services/computer-capability.test.js.map +1 -0
  188. package/dist/services/finance.d.ts +2 -2
  189. package/dist/services/goals.d.ts +2041 -126
  190. package/dist/services/goals.d.ts.map +1 -1
  191. package/dist/services/goals.js +1533 -176
  192. package/dist/services/goals.js.map +1 -1
  193. package/dist/services/index.d.ts +2 -0
  194. package/dist/services/index.d.ts.map +1 -1
  195. package/dist/services/index.js +2 -0
  196. package/dist/services/index.js.map +1 -1
  197. package/dist/services/instance-settings.d.ts.map +1 -1
  198. package/dist/services/instance-settings.js +17 -2
  199. package/dist/services/instance-settings.js.map +1 -1
  200. package/dist/services/integrations/agent-integrations.d.ts +1 -1
  201. package/dist/services/issues.d.ts +86 -1
  202. package/dist/services/issues.d.ts.map +1 -1
  203. package/dist/services/issues.helpers.d.ts +4 -0
  204. package/dist/services/issues.helpers.d.ts.map +1 -1
  205. package/dist/services/issues.helpers.js +28 -6
  206. package/dist/services/issues.helpers.js.map +1 -1
  207. package/dist/services/issues.js +208 -109
  208. package/dist/services/issues.js.map +1 -1
  209. package/dist/services/knowledge-portability/organization-portability.files.d.ts +1 -1
  210. package/dist/services/knowledge-portability/organization-skills.catalog.d.ts +7 -1
  211. package/dist/services/knowledge-portability/organization-skills.catalog.d.ts.map +1 -1
  212. package/dist/services/knowledge-portability/organization-skills.catalog.js +10 -0
  213. package/dist/services/knowledge-portability/organization-skills.catalog.js.map +1 -1
  214. package/dist/services/knowledge-portability/organization-skills.d.ts +1 -0
  215. package/dist/services/knowledge-portability/organization-skills.d.ts.map +1 -1
  216. package/dist/services/knowledge-portability/organization-skills.js +36 -3
  217. package/dist/services/knowledge-portability/organization-skills.js.map +1 -1
  218. package/dist/services/mcp/managed-bindings.d.ts +3 -1
  219. package/dist/services/mcp/managed-bindings.d.ts.map +1 -1
  220. package/dist/services/mcp/managed-bindings.js +31 -7
  221. package/dist/services/mcp/managed-bindings.js.map +1 -1
  222. package/dist/services/mcp/managed-client.d.ts +15 -0
  223. package/dist/services/mcp/managed-client.d.ts.map +1 -1
  224. package/dist/services/mcp/managed-client.js +23 -1
  225. package/dist/services/mcp/managed-client.js.map +1 -1
  226. package/dist/services/mcp/managed-client.test.js +73 -9
  227. package/dist/services/mcp/managed-client.test.js.map +1 -1
  228. package/dist/services/mcp/managed-connections.d.ts +19 -1
  229. package/dist/services/mcp/managed-connections.d.ts.map +1 -1
  230. package/dist/services/mcp/managed-connections.js +211 -37
  231. package/dist/services/mcp/managed-connections.js.map +1 -1
  232. package/dist/services/mcp/managed-runtime.js +1 -1
  233. package/dist/services/mcp/managed-runtime.js.map +1 -1
  234. package/dist/services/mcp/oauth.d.ts.map +1 -1
  235. package/dist/services/mcp/oauth.js +3 -0
  236. package/dist/services/mcp/oauth.js.map +1 -1
  237. package/dist/services/mcp/provider-registry.d.ts +24 -1
  238. package/dist/services/mcp/provider-registry.d.ts.map +1 -1
  239. package/dist/services/mcp/provider-registry.js +26 -0
  240. package/dist/services/mcp/provider-registry.js.map +1 -1
  241. package/dist/services/mcp/provider-registry.test.js +26 -0
  242. package/dist/services/mcp/provider-registry.test.js.map +1 -1
  243. package/dist/services/messenger-saved-views.d.ts.map +1 -1
  244. package/dist/services/messenger-saved-views.js +1 -0
  245. package/dist/services/messenger-saved-views.js.map +1 -1
  246. package/dist/services/messenger.d.ts +2 -2
  247. package/dist/services/messenger.d.ts.map +1 -1
  248. package/dist/services/messenger.js +142 -51
  249. package/dist/services/messenger.js.map +1 -1
  250. package/dist/services/product-analytics.d.ts +21 -5
  251. package/dist/services/product-analytics.d.ts.map +1 -1
  252. package/dist/services/product-analytics.js +47 -0
  253. package/dist/services/product-analytics.js.map +1 -1
  254. package/dist/services/product-analytics.test.js +63 -1
  255. package/dist/services/product-analytics.test.js.map +1 -1
  256. package/dist/services/rudder-plugins.d.ts +107 -0
  257. package/dist/services/rudder-plugins.d.ts.map +1 -0
  258. package/dist/services/rudder-plugins.js +1746 -0
  259. package/dist/services/rudder-plugins.js.map +1 -0
  260. package/dist/services/rudder-plugins.test.d.ts +2 -0
  261. package/dist/services/rudder-plugins.test.d.ts.map +1 -0
  262. package/dist/services/rudder-plugins.test.js +191 -0
  263. package/dist/services/rudder-plugins.test.js.map +1 -0
  264. package/dist/services/run-events.d.ts +1 -1
  265. package/dist/services/runtime-kernel/heartbeat.core.d.ts +1 -0
  266. package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
  267. package/dist/services/runtime-kernel/heartbeat.core.js +1 -1
  268. package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
  269. package/dist/services/runtime-kernel/heartbeat.d.ts +57 -0
  270. package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
  271. package/dist/services/runtime-kernel/heartbeat.execute.d.ts.map +1 -1
  272. package/dist/services/runtime-kernel/heartbeat.execute.js +51 -3
  273. package/dist/services/runtime-kernel/heartbeat.execute.js.map +1 -1
  274. package/dist/services/runtime-kernel/heartbeat.js +400 -102
  275. package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
  276. package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
  277. package/dist/services/runtime-kernel/heartbeat.recovery.js +23 -2
  278. package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
  279. package/dist/services/runtime-kernel/heartbeat.terminal.d.ts +17 -2
  280. package/dist/services/runtime-kernel/heartbeat.terminal.d.ts.map +1 -1
  281. package/dist/services/runtime-kernel/heartbeat.terminal.js +33 -1
  282. package/dist/services/runtime-kernel/heartbeat.terminal.js.map +1 -1
  283. package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -1
  284. package/dist/services/runtime-kernel/heartbeat.wakeup.js +35 -3
  285. package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
  286. package/dist/services/side-chats.d.ts.map +1 -1
  287. package/dist/services/side-chats.js +12 -0
  288. package/dist/services/side-chats.js.map +1 -1
  289. package/dist/services/workspace-runtime.services.d.ts +1 -1
  290. package/package.json +19 -17
  291. package/resources/bundled-skills/app-builder/SKILL.md +39 -9
  292. package/resources/bundled-skills/app-builder/assets/scaffold/app/globals.css +109 -16
  293. package/resources/bundled-skills/app-builder/assets/scaffold/components/contacts-workspace.tsx +176 -152
  294. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/alert.tsx +12 -0
  295. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/badge.tsx +27 -0
  296. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/button.tsx +9 -7
  297. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/card.tsx +15 -3
  298. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/empty.tsx +18 -0
  299. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/field.tsx +23 -0
  300. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/input.tsx +1 -1
  301. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/label.tsx +1 -1
  302. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/separator.tsx +6 -0
  303. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/skeleton.tsx +6 -0
  304. package/resources/bundled-skills/app-builder/assets/scaffold/components/ui/table.tsx +30 -0
  305. package/resources/bundled-skills/app-builder/assets/scaffold/components.json +20 -0
  306. package/resources/bundled-skills/app-builder/assets/scaffold/next-env.d.ts +1 -1
  307. package/resources/bundled-skills/app-builder/assets/scaffold/next.config.ts +19 -0
  308. package/resources/bundled-skills/app-builder/assets/scaffold/package.json +2 -1
  309. package/resources/bundled-skills/app-builder/assets/scaffold/rudder.app.json +1 -1
  310. package/resources/bundled-skills/app-builder/assets/scaffold/rudder.ui.json +13 -0
  311. package/resources/bundled-skills/app-builder/assets/scaffold/scripts/validate-rudder-ui.mjs +50 -0
  312. package/resources/bundled-skills/app-builder/assets/scaffold/tests/e2e/app.spec.ts +35 -1
  313. package/resources/bundled-skills/app-builder/evals/evals.json +2 -1
  314. package/resources/bundled-skills/app-builder/references/design-guidelines.md +19 -2
  315. package/resources/bundled-skills/app-builder/references/rudder-ui-preset.md +73 -0
  316. package/resources/bundled-skills/app-builder/references/scaffold-contract.md +12 -0
  317. package/resources/bundled-skills/app-builder/references/verification.md +6 -0
  318. package/resources/bundled-skills/app-builder/scripts/report-build-status.mjs +83 -0
  319. package/resources/bundled-skills/browser/SKILL.md +11 -4
  320. package/resources/bundled-skills/browser/agents/openai.yaml +2 -2
  321. package/resources/bundled-skills/browser/evals/trigger-evals.json +22 -0
  322. package/resources/bundled-skills/rudder-docs/SKILL.md +2 -2
  323. package/resources/bundled-skills/rudder-docs/evals/retrieval-authority-evals.json +40 -0
  324. package/resources/bundled-skills/rudder-docs/evals/trigger-evals.json +2 -2
  325. package/resources/bundled-skills/rudder-docs/references/api-reference.md +0 -2
  326. package/resources/bundled-skills/rudder-docs/references/plugin-authoring.md +38 -114
  327. package/resources/bundled-skills/rudder-docs/references/source-map.md +2 -0
  328. package/skills/app-builder/SKILL.md +39 -9
  329. package/skills/app-builder/assets/scaffold/app/globals.css +109 -16
  330. package/skills/app-builder/assets/scaffold/components/contacts-workspace.tsx +176 -152
  331. package/skills/app-builder/assets/scaffold/components/ui/alert.tsx +12 -0
  332. package/skills/app-builder/assets/scaffold/components/ui/badge.tsx +27 -0
  333. package/skills/app-builder/assets/scaffold/components/ui/button.tsx +9 -7
  334. package/skills/app-builder/assets/scaffold/components/ui/card.tsx +15 -3
  335. package/skills/app-builder/assets/scaffold/components/ui/empty.tsx +18 -0
  336. package/skills/app-builder/assets/scaffold/components/ui/field.tsx +23 -0
  337. package/skills/app-builder/assets/scaffold/components/ui/input.tsx +1 -1
  338. package/skills/app-builder/assets/scaffold/components/ui/label.tsx +1 -1
  339. package/skills/app-builder/assets/scaffold/components/ui/separator.tsx +6 -0
  340. package/skills/app-builder/assets/scaffold/components/ui/skeleton.tsx +6 -0
  341. package/skills/app-builder/assets/scaffold/components/ui/table.tsx +30 -0
  342. package/skills/app-builder/assets/scaffold/components.json +20 -0
  343. package/skills/app-builder/assets/scaffold/next-env.d.ts +1 -1
  344. package/skills/app-builder/assets/scaffold/next.config.ts +19 -0
  345. package/skills/app-builder/assets/scaffold/package.json +2 -1
  346. package/skills/app-builder/assets/scaffold/rudder.app.json +1 -1
  347. package/skills/app-builder/assets/scaffold/rudder.ui.json +13 -0
  348. package/skills/app-builder/assets/scaffold/scripts/validate-rudder-ui.mjs +50 -0
  349. package/skills/app-builder/assets/scaffold/tests/e2e/app.spec.ts +35 -1
  350. package/skills/app-builder/evals/evals.json +2 -1
  351. package/skills/app-builder/references/design-guidelines.md +19 -2
  352. package/skills/app-builder/references/rudder-ui-preset.md +73 -0
  353. package/skills/app-builder/references/scaffold-contract.md +12 -0
  354. package/skills/app-builder/references/verification.md +6 -0
  355. package/skills/app-builder/scripts/report-build-status.mjs +83 -0
  356. package/skills/browser/SKILL.md +11 -4
  357. package/skills/browser/agents/openai.yaml +2 -2
  358. package/skills/browser/evals/trigger-evals.json +22 -0
  359. package/skills/rudder-docs/SKILL.md +2 -2
  360. package/skills/rudder-docs/evals/retrieval-authority-evals.json +40 -0
  361. package/skills/rudder-docs/evals/trigger-evals.json +2 -2
  362. package/skills/rudder-docs/references/api-reference.md +0 -2
  363. package/skills/rudder-docs/references/plugin-authoring.md +38 -114
  364. package/skills/rudder-docs/references/source-map.md +2 -0
  365. package/ui-dist/assets/{LibraryLiveSurface-CcsYG18H.js → LibraryLiveSurface-CoGcDfo0.js} +1 -1
  366. package/ui-dist/assets/{abnfDiagram-VRR7QNED-C34K70lu.js → abnfDiagram-VRR7QNED-BnPHHNfu.js} +1 -1
  367. package/ui-dist/assets/{arc-BYztEqom.js → arc-CAvqQQR_.js} +1 -1
  368. package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-BQKKX-d7.js → architectureDiagram-ZJ3FMSHR-DDa31YAK.js} +1 -1
  369. package/ui-dist/assets/{blockDiagram-677ZJIJ3-DPfaIbqb.js → blockDiagram-677ZJIJ3-DDXLU9Ej.js} +1 -1
  370. package/ui-dist/assets/{c4Diagram-LMCZKHZV-BnwCM567.js → c4Diagram-LMCZKHZV-zEm0rHCp.js} +1 -1
  371. package/ui-dist/assets/channel-M_3GhwHQ.js +1 -0
  372. package/ui-dist/assets/{chunk-2Q5K7J3B-CFviCRuZ.js → chunk-2Q5K7J3B-y1Rw45sz.js} +1 -1
  373. package/ui-dist/assets/{chunk-32BRIVSS-FoIxWB1d.js → chunk-32BRIVSS-Cq8cQBba.js} +1 -1
  374. package/ui-dist/assets/{chunk-5VM5RSS4-EbAfuwwN.js → chunk-5VM5RSS4-CjQA6jGI.js} +1 -1
  375. package/ui-dist/assets/{chunk-EX3LRPZG-CsStqjdd.js → chunk-EX3LRPZG-VVYt7jh3.js} +1 -1
  376. package/ui-dist/assets/{chunk-JWPE2WC7-Dw5KEviU.js → chunk-JWPE2WC7-BJC3ISop.js} +1 -1
  377. package/ui-dist/assets/{chunk-MOJQB5TN-BlHlEWfj.js → chunk-MOJQB5TN-ClZgTqQk.js} +1 -1
  378. package/ui-dist/assets/{chunk-RYQCIY6F-BWw7BE01.js → chunk-RYQCIY6F-DRei3pn2.js} +1 -1
  379. package/ui-dist/assets/{chunk-V7JOEXUC-CxRvHZbj.js → chunk-V7JOEXUC-BGWrQfpZ.js} +1 -1
  380. package/ui-dist/assets/{chunk-VR4S4FIN-DZa_KwY9.js → chunk-VR4S4FIN-BBYT57Lt.js} +1 -1
  381. package/ui-dist/assets/{chunk-XXDRQBXY-Cnimf5j2.js → chunk-XXDRQBXY-D7P4SoZB.js} +1 -1
  382. package/ui-dist/assets/classDiagram-OUVF2IWQ-G44FJFnB.js +1 -0
  383. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-G44FJFnB.js +1 -0
  384. package/ui-dist/assets/{cose-bilkent-JH36ORCC-COCPT6B8.js → cose-bilkent-JH36ORCC-mJXY7GQo.js} +1 -1
  385. package/ui-dist/assets/{cynefin-VYW2F7L2-C5CybQ7c.js → cynefin-VYW2F7L2-C-I_lPmH.js} +1 -1
  386. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-BDrPLGpv.js → cynefinDiagram-TSTJHNR4-Bm1S_w7H.js} +1 -1
  387. package/ui-dist/assets/{dagre-VKFMJZFB-DXxPiE9D.js → dagre-VKFMJZFB-BuPIm1AB.js} +1 -1
  388. package/ui-dist/assets/{diagram-FQU43EPY-CdC2pj_S.js → diagram-FQU43EPY-DTBCuV0W.js} +1 -1
  389. package/ui-dist/assets/{diagram-G47NLZAW-sEOwPe0_.js → diagram-G47NLZAW-B4CK8uR2.js} +1 -1
  390. package/ui-dist/assets/{diagram-NH7WQ7WH-CwoTfWmv.js → diagram-NH7WQ7WH-BkbS0GkL.js} +1 -1
  391. package/ui-dist/assets/{diagram-OA4YK3LP-Cksc-JQa.js → diagram-OA4YK3LP-C_mkRe0c.js} +1 -1
  392. package/ui-dist/assets/{diagram-WEI45ONY-1lHRkCse.js → diagram-WEI45ONY-CHUb3TIJ.js} +1 -1
  393. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-BJ6dNjJ2.js → ebnfDiagram-CCIWWBDH-D_lN4ZOY.js} +1 -1
  394. package/ui-dist/assets/{erDiagram-Q63AITRT-DVTmCmE1.js → erDiagram-Q63AITRT-CRnDqcsy.js} +1 -1
  395. package/ui-dist/assets/{flowDiagram-23GEKE2U-B2A6w103.js → flowDiagram-23GEKE2U-ChELY-8y.js} +1 -1
  396. package/ui-dist/assets/{ganttDiagram-NO4QXBWP-BoqdQOBD.js → ganttDiagram-NO4QXBWP-QIML25-M.js} +1 -1
  397. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-BPWVpzXj.js → gitGraphDiagram-IHSO6WYX-TB_AKH8l.js} +1 -1
  398. package/ui-dist/assets/{graph-W8QGT1XQ.js → graph-HKPvyYQ1.js} +1 -1
  399. package/ui-dist/assets/{index-DTqh4VW9.js → index-Ar0zIwom.js} +1 -1
  400. package/ui-dist/assets/{index-UkFXcg--.js → index-BeNxgoKd.js} +1 -1
  401. package/ui-dist/assets/{index-CRe48ije.js → index-CB-UdrKN.js} +1 -1
  402. package/ui-dist/assets/{index-C8VKPswh.js → index-CfpFS1Tl.js} +573 -588
  403. package/ui-dist/assets/{index-BYt_CWxk.js → index-CjIeIR2m.js} +1 -1
  404. package/ui-dist/assets/{index-DFhr5xg9.js → index-DCgbySwf.js} +1 -1
  405. package/ui-dist/assets/{index-BT3SfQnV.js → index-DDMaBNLI.js} +1 -1
  406. package/ui-dist/assets/{index-96_7QHQ5.js → index-DSZmO4bA.js} +1 -1
  407. package/ui-dist/assets/{index-D5okPECv.js → index-DfzFi2fx.js} +1 -1
  408. package/ui-dist/assets/{index-CG59QbM3.js → index-DmEf_U5I.js} +1 -1
  409. package/ui-dist/assets/{index-CaNgMg06.js → index-OfGDMJiA.js} +1 -1
  410. package/ui-dist/assets/{index-CrOrmmHY.js → index-ZzX8P4M5.js} +1 -1
  411. package/ui-dist/assets/{index-9ogi82-q.js → index-fDtlbG8Y.js} +1 -1
  412. package/ui-dist/assets/{index-Cjq0R1QI.js → index-gdvFtffQ.js} +1 -1
  413. package/ui-dist/assets/index-noipz8bE.css +1 -0
  414. package/ui-dist/assets/{index-CjRwrGKt.js → index-rnOTiIXd.js} +1 -1
  415. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-CGKM1qd0.js → infoDiagram-FWYZ7A6U-DUR3sDTd.js} +1 -1
  416. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-BMINXmgJ.js → ishikawaDiagram-FXEZZL3T-CcnYT0s0.js} +1 -1
  417. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-lLpvO5ye.js → journeyDiagram-5HDEW3XC-CqfbG8T1.js} +1 -1
  418. package/ui-dist/assets/{kanban-definition-HUTT4EX6-B1o_jb4m.js → kanban-definition-HUTT4EX6-CYwQM9eR.js} +1 -1
  419. package/ui-dist/assets/{layout-CfhTVz4J.js → layout-B2IlJgLE.js} +1 -1
  420. package/ui-dist/assets/{linear-Cyfw5mer.js → linear-CcEPcfbO.js} +1 -1
  421. package/ui-dist/assets/{map-BJC9PnTS.js → map-Bmhfvlpu.js} +1 -1
  422. package/ui-dist/assets/{mermaid.core-FscMPm7s.js → mermaid.core-T9Q0CuQx.js} +4 -4
  423. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-DRgxKOO8.js → mindmap-definition-LN4V7U3C-CRjQlwN4.js} +1 -1
  424. package/ui-dist/assets/{pegDiagram-2B236MQR-Dvz4qHu-.js → pegDiagram-2B236MQR-DenccdY8.js} +1 -1
  425. package/ui-dist/assets/{pieDiagram-ENE6RG2P-Dk2JI7ZR.js → pieDiagram-ENE6RG2P-CPiTrJcY.js} +1 -1
  426. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-rDcmmQtb.js → quadrantDiagram-ABIIQ3AL-fKbvGl_-.js} +1 -1
  427. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-DuGw7Ver.js → railroadDiagram-RFXS5EU6-D6uOjEmA.js} +1 -1
  428. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-B9FO6PRO.js → requirementDiagram-TGXJPOKE-CQIQ387O.js} +1 -1
  429. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-Dvy9IKWr.js → sankeyDiagram-HTMAVEWB-CKrnONJL.js} +1 -1
  430. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-BMNm3icE.js → sequenceDiagram-DBY2YBRQ-C3vaOiZO.js} +1 -1
  431. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-D9g2vtWC.js → sizeCapture-X5ZJPWSS-F39EvxY0.js} +1 -1
  432. package/ui-dist/assets/{stateDiagram-2N3HPSRC-kQ3-sJWr.js → stateDiagram-2N3HPSRC-Bq2sVFQq.js} +1 -1
  433. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-B94IPtHC.js +1 -0
  434. package/ui-dist/assets/{swimlanes-5IMT3BWC-Cx_ksQRH.js → swimlanes-5IMT3BWC-CSrygB7m.js} +2 -2
  435. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-9WQr2_E9.js +8 -0
  436. package/ui-dist/assets/{timeline-definition-FHXFAJF6-CyArjIWu.js → timeline-definition-FHXFAJF6-DSMMlntv.js} +1 -1
  437. package/ui-dist/assets/{vennDiagram-L72KCM5P-Bjdg_skC.js → vennDiagram-L72KCM5P-D5XH96zV.js} +1 -1
  438. package/ui-dist/assets/{wardleyDiagram-EHGQE667-BLV-S7cE.js → wardleyDiagram-EHGQE667-BXX2RFsU.js} +1 -1
  439. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-BTtly2sn.js → xychartDiagram-FW5EYKEG-awBW2lwG.js} +1 -1
  440. package/ui-dist/index.html +2 -2
  441. package/dist/bootstrap/plugin-host-runtime.d.ts +0 -116
  442. package/dist/bootstrap/plugin-host-runtime.d.ts.map +0 -1
  443. package/dist/bootstrap/plugin-host-runtime.js +0 -179
  444. package/dist/bootstrap/plugin-host-runtime.js.map +0 -1
  445. package/dist/bundled-plugins/plugin-linear/README.md +0 -22
  446. package/dist/bundled-plugins/plugin-linear/dist/manifest.js +0 -183
  447. package/dist/bundled-plugins/plugin-linear/dist/manifest.js.map +0 -7
  448. package/dist/bundled-plugins/plugin-linear/dist/ui/index.js +0 -1285
  449. package/dist/bundled-plugins/plugin-linear/dist/ui/index.js.map +0 -7
  450. package/dist/bundled-plugins/plugin-linear/dist/worker.js +0 -10430
  451. package/dist/bundled-plugins/plugin-linear/dist/worker.js.map +0 -7
  452. package/dist/bundled-plugins/plugin-linear/package.json +0 -42
  453. package/dist/routes/plugin-ui-static.d.ts +0 -70
  454. package/dist/routes/plugin-ui-static.d.ts.map +0 -1
  455. package/dist/routes/plugin-ui-static.js +0 -375
  456. package/dist/routes/plugin-ui-static.js.map +0 -1
  457. package/dist/routes/plugins.d.ts +0 -120
  458. package/dist/routes/plugins.d.ts.map +0 -1
  459. package/dist/routes/plugins.js +0 -1125
  460. package/dist/routes/plugins.js.map +0 -1
  461. package/dist/routes/plugins.operations-routes.d.ts +0 -28
  462. package/dist/routes/plugins.operations-routes.d.ts.map +0 -1
  463. package/dist/routes/plugins.operations-routes.js +0 -720
  464. package/dist/routes/plugins.operations-routes.js.map +0 -1
  465. package/dist/services/issue-goal-fallback.d.ts +0 -15
  466. package/dist/services/issue-goal-fallback.d.ts.map +0 -1
  467. package/dist/services/issue-goal-fallback.js +0 -27
  468. package/dist/services/issue-goal-fallback.js.map +0 -1
  469. package/dist/services/plugin-capability-validator.d.ts +0 -108
  470. package/dist/services/plugin-capability-validator.d.ts.map +0 -1
  471. package/dist/services/plugin-capability-validator.js +0 -268
  472. package/dist/services/plugin-capability-validator.js.map +0 -1
  473. package/dist/services/plugin-config-validator.d.ts +0 -26
  474. package/dist/services/plugin-config-validator.d.ts.map +0 -1
  475. package/dist/services/plugin-config-validator.js +0 -41
  476. package/dist/services/plugin-config-validator.js.map +0 -1
  477. package/dist/services/plugin-dev-watcher.d.ts +0 -47
  478. package/dist/services/plugin-dev-watcher.d.ts.map +0 -1
  479. package/dist/services/plugin-dev-watcher.js +0 -275
  480. package/dist/services/plugin-dev-watcher.js.map +0 -1
  481. package/dist/services/plugin-event-bus.d.ts +0 -149
  482. package/dist/services/plugin-event-bus.d.ts.map +0 -1
  483. package/dist/services/plugin-event-bus.js +0 -258
  484. package/dist/services/plugin-event-bus.js.map +0 -1
  485. package/dist/services/plugin-host-service-cleanup.d.ts +0 -14
  486. package/dist/services/plugin-host-service-cleanup.d.ts.map +0 -1
  487. package/dist/services/plugin-host-service-cleanup.js +0 -37
  488. package/dist/services/plugin-host-service-cleanup.js.map +0 -1
  489. package/dist/services/plugin-host-services.d.ts +0 -13
  490. package/dist/services/plugin-host-services.d.ts.map +0 -1
  491. package/dist/services/plugin-host-services.js +0 -935
  492. package/dist/services/plugin-host-services.js.map +0 -1
  493. package/dist/services/plugin-job-coordinator.d.ts +0 -81
  494. package/dist/services/plugin-job-coordinator.d.ts.map +0 -1
  495. package/dist/services/plugin-job-coordinator.js +0 -172
  496. package/dist/services/plugin-job-coordinator.js.map +0 -1
  497. package/dist/services/plugin-job-scheduler.d.ts +0 -163
  498. package/dist/services/plugin-job-scheduler.d.ts.map +0 -1
  499. package/dist/services/plugin-job-scheduler.js +0 -452
  500. package/dist/services/plugin-job-scheduler.js.map +0 -1
  501. package/dist/services/plugin-job-store.d.ts +0 -208
  502. package/dist/services/plugin-job-store.d.ts.map +0 -1
  503. package/dist/services/plugin-job-store.js +0 -350
  504. package/dist/services/plugin-job-store.js.map +0 -1
  505. package/dist/services/plugin-lifecycle.d.ts +0 -240
  506. package/dist/services/plugin-lifecycle.d.ts.map +0 -1
  507. package/dist/services/plugin-lifecycle.js +0 -439
  508. package/dist/services/plugin-lifecycle.js.map +0 -1
  509. package/dist/services/plugin-loader.core.d.ts +0 -40
  510. package/dist/services/plugin-loader.core.d.ts.map +0 -1
  511. package/dist/services/plugin-loader.core.js +0 -879
  512. package/dist/services/plugin-loader.core.js.map +0 -1
  513. package/dist/services/plugin-loader.d.ts +0 -30
  514. package/dist/services/plugin-loader.d.ts.map +0 -1
  515. package/dist/services/plugin-loader.helpers.d.ts +0 -495
  516. package/dist/services/plugin-loader.helpers.d.ts.map +0 -1
  517. package/dist/services/plugin-loader.helpers.js +0 -238
  518. package/dist/services/plugin-loader.helpers.js.map +0 -1
  519. package/dist/services/plugin-loader.js +0 -30
  520. package/dist/services/plugin-loader.js.map +0 -1
  521. package/dist/services/plugin-loader.worker-paths.d.ts +0 -37
  522. package/dist/services/plugin-loader.worker-paths.d.ts.map +0 -1
  523. package/dist/services/plugin-loader.worker-paths.js +0 -62
  524. package/dist/services/plugin-loader.worker-paths.js.map +0 -1
  525. package/dist/services/plugin-log-retention.d.ts +0 -20
  526. package/dist/services/plugin-log-retention.d.ts.map +0 -1
  527. package/dist/services/plugin-log-retention.js +0 -63
  528. package/dist/services/plugin-log-retention.js.map +0 -1
  529. package/dist/services/plugin-manifest-validator.d.ts +0 -90
  530. package/dist/services/plugin-manifest-validator.d.ts.map +0 -1
  531. package/dist/services/plugin-manifest-validator.js +0 -72
  532. package/dist/services/plugin-manifest-validator.js.map +0 -1
  533. package/dist/services/plugin-registry.d.ts +0 -2542
  534. package/dist/services/plugin-registry.d.ts.map +0 -1
  535. package/dist/services/plugin-registry.js +0 -536
  536. package/dist/services/plugin-registry.js.map +0 -1
  537. package/dist/services/plugin-runtime-sandbox.d.ts +0 -40
  538. package/dist/services/plugin-runtime-sandbox.d.ts.map +0 -1
  539. package/dist/services/plugin-runtime-sandbox.js +0 -154
  540. package/dist/services/plugin-runtime-sandbox.js.map +0 -1
  541. package/dist/services/plugin-secrets-handler.d.ts +0 -81
  542. package/dist/services/plugin-secrets-handler.d.ts.map +0 -1
  543. package/dist/services/plugin-secrets-handler.js +0 -275
  544. package/dist/services/plugin-secrets-handler.js.map +0 -1
  545. package/dist/services/plugin-state-store.d.ts +0 -92
  546. package/dist/services/plugin-state-store.d.ts.map +0 -1
  547. package/dist/services/plugin-state-store.js +0 -190
  548. package/dist/services/plugin-state-store.js.map +0 -1
  549. package/dist/services/plugin-stream-bus.d.ts +0 -29
  550. package/dist/services/plugin-stream-bus.d.ts.map +0 -1
  551. package/dist/services/plugin-stream-bus.js +0 -48
  552. package/dist/services/plugin-stream-bus.js.map +0 -1
  553. package/dist/services/plugin-tool-dispatcher.d.ts +0 -180
  554. package/dist/services/plugin-tool-dispatcher.d.ts.map +0 -1
  555. package/dist/services/plugin-tool-dispatcher.js +0 -224
  556. package/dist/services/plugin-tool-dispatcher.js.map +0 -1
  557. package/dist/services/plugin-tool-registry.d.ts +0 -192
  558. package/dist/services/plugin-tool-registry.d.ts.map +0 -1
  559. package/dist/services/plugin-tool-registry.js +0 -224
  560. package/dist/services/plugin-tool-registry.js.map +0 -1
  561. package/dist/services/plugin-worker-manager.d.ts +0 -260
  562. package/dist/services/plugin-worker-manager.d.ts.map +0 -1
  563. package/dist/services/plugin-worker-manager.js +0 -836
  564. package/dist/services/plugin-worker-manager.js.map +0 -1
  565. package/ui-dist/assets/channel-Bmzlyjow.js +0 -1
  566. package/ui-dist/assets/classDiagram-OUVF2IWQ-VR7MKiEz.js +0 -1
  567. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-VR7MKiEz.js +0 -1
  568. package/ui-dist/assets/index-CxPYXL3t.css +0 -1
  569. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-BYK8scZh.js +0 -1
  570. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-irU0aSS8.js +0 -8
@@ -75,6 +75,10 @@ export function fieldSearchMatch(row, query, searchFields) {
75
75
  }
76
76
  return null;
77
77
  }
78
+ const ISSUE_CREATED_NOTIFICATION_ACTIONS = [
79
+ "automation.issue_created_notification",
80
+ "agent.issue_created_notification",
81
+ ];
78
82
  export function touchedByUserCondition(orgId, userId) {
79
83
  return sql `
80
84
  (
@@ -82,7 +86,7 @@ export function touchedByUserCondition(orgId, userId) {
82
86
  OR ${issues.assigneeUserId} = ${userId}
83
87
  OR ${issues.reviewerUserId} = ${userId}
84
88
  OR ${followedByUserCondition(orgId, userId)}
85
- OR ${automationIssueNotifiedToUserCondition(orgId, userId)}
89
+ OR ${issueCreatedNotificationToUserCondition(orgId, userId)}
86
90
  OR EXISTS (
87
91
  SELECT 1
88
92
  FROM ${issueReadStates}
@@ -113,6 +117,9 @@ export function followedByUserCondition(orgId, userId) {
113
117
  `;
114
118
  }
115
119
  export function automationIssueNotifiedToUserCondition(orgId, userId) {
120
+ return issueCreatedNotificationToUserCondition(orgId, userId);
121
+ }
122
+ export function issueCreatedNotificationToUserCondition(orgId, userId) {
116
123
  return sql `
117
124
  EXISTS (
118
125
  SELECT 1
@@ -120,7 +127,7 @@ export function automationIssueNotifiedToUserCondition(orgId, userId) {
120
127
  WHERE ${activityLog.orgId} = ${orgId}
121
128
  AND ${activityLog.entityType} = 'issue'
122
129
  AND ${activityLog.entityId} = ${issues.id}::text
123
- AND ${activityLog.action} = 'automation.issue_created_notification'
130
+ AND ${activityLog.action} IN (${sql.join(ISSUE_CREATED_NOTIFICATION_ACTIONS.map((action) => sql `${action}`), sql `, `)})
124
131
  AND ${activityLog.details}->>'userId' = ${userId}
125
132
  )
126
133
  `;
@@ -130,7 +137,7 @@ export function automationExecutionVisibleToUserCondition(orgId, userId) {
130
137
  (
131
138
  ${issues.originKind} <> 'automation_execution'
132
139
  OR ${followedByUserCondition(orgId, userId)}
133
- OR ${automationIssueNotifiedToUserCondition(orgId, userId)}
140
+ OR ${issueCreatedNotificationToUserCondition(orgId, userId)}
134
141
  )
135
142
  `;
136
143
  }
@@ -212,6 +219,16 @@ export function unreadForUserCondition(orgId, userId) {
212
219
  )
213
220
  AND ${issueComments.createdAt} > ${myLastTouchAt}
214
221
  )
222
+ OR EXISTS (
223
+ SELECT 1
224
+ FROM ${activityLog}
225
+ WHERE ${activityLog.orgId} = ${orgId}
226
+ AND ${activityLog.entityType} = 'issue'
227
+ AND ${activityLog.entityId} = ${issues.id}::text
228
+ AND ${activityLog.action} IN (${sql.join(ISSUE_CREATED_NOTIFICATION_ACTIONS.map((action) => sql `${action}`), sql `, `)})
229
+ AND ${activityLog.details}->>'userId' = ${userId}
230
+ AND ${activityLog.createdAt} > ${myLastTouchAt}
231
+ )
215
232
  )
216
233
  `;
217
234
  }
@@ -233,12 +250,17 @@ export function deriveIssueUserContext(issue, userId, stats) {
233
250
  .filter((value) => value instanceof Date)
234
251
  .sort((a, b) => b.getTime() - a.getTime())[0] ?? null;
235
252
  const lastExternalCommentAt = normalizeDate(stats?.lastExternalCommentAt);
236
- const isUnreadForMe = Boolean(myLastTouchAt &&
237
- lastExternalCommentAt &&
238
- lastExternalCommentAt.getTime() > myLastTouchAt.getTime());
253
+ const lastExternalActivityAt = normalizeDate(stats?.lastExternalActivityAt);
254
+ const latestExternalAt = [lastExternalCommentAt, lastExternalActivityAt]
255
+ .filter((value) => value instanceof Date)
256
+ .sort((a, b) => b.getTime() - a.getTime())[0] ?? null;
257
+ const isUnreadForMe = Boolean(latestExternalAt &&
258
+ ((lastExternalActivityAt && !myLastTouchAt) ||
259
+ (myLastTouchAt && latestExternalAt.getTime() > myLastTouchAt.getTime())));
239
260
  return {
240
261
  myLastTouchAt,
241
262
  lastExternalCommentAt,
263
+ lastExternalActivityAt,
242
264
  isUnreadForMe,
243
265
  };
244
266
  }
@@ -1 +1 @@
1
- {"version":3,"file":"issues.helpers.js","sourceRoot":"","sources":["../../src/services/issues.helpers.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"issues.helpers.js","sourceRoot":"","sources":["../../src/services/issues.helpers.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,10 @@
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";
5
5
  import { defaultIssueExecutionWorkspaceSettingsForProject, parseProjectExecutionWorkspacePolicy, } from "./execution-workspace-policy.js";
6
- import { getDefaultCompanyGoal } from "./goals.js";
7
6
  import { instanceSettingsService } from "./instance-settings.js";
8
7
  import { issueMaterialUpdateActivitySql } from "./issue-activity-filters.js";
9
- import { resolveIssueGoalId, resolveNextIssueGoalId } from "./issue-goal-fallback.js";
10
8
  import { removeMessengerCustomGroupEntriesForItem } from "./messenger-saved-views.js";
11
9
  import { ensureProductAnalyticsWorkCycle, recordProductAnalyticsEvent } from "./product-analytics.js";
12
10
  import { createIssueCommentAttachmentMethods } from "./issues.comments-attachments.js";
@@ -37,6 +35,12 @@ function normalizeIssueListOffset(offset) {
37
35
  }
38
36
  export function issueService(db) {
39
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
+ }
40
44
  function redactIssueComment(comment, censorUsernameInLogs) {
41
45
  return {
42
46
  ...comment,
@@ -300,7 +304,7 @@ export function issueService(db) {
300
304
  searchMatch: matchesByIssueId.get(row.id) ?? null,
301
305
  }));
302
306
  }
303
- return {
307
+ const service = {
304
308
  listFollows: async (orgId, userId) => {
305
309
  const rows = await db
306
310
  .select({
@@ -555,6 +559,17 @@ export function issueService(db) {
555
559
  .from(issueComments)
556
560
  .where(and(eq(issueComments.orgId, orgId), inArray(issueComments.issueId, issueIds), isNull(issueComments.deletedAt)))
557
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);
558
573
  const readRows = await db
559
574
  .select({
560
575
  issueId: issueReadStates.issueId,
@@ -563,6 +578,17 @@ export function issueService(db) {
563
578
  .from(issueReadStates)
564
579
  .where(and(eq(issueReadStates.orgId, orgId), eq(issueReadStates.userId, contextUserId), inArray(issueReadStates.issueId, issueIds)));
565
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
+ }
566
592
  const readByIssueId = new Map(readRows.map((row) => [row.issueId, row.myLastReadAt]));
567
593
  return withSearchMatches.map((row) => ({
568
594
  ...row,
@@ -570,6 +596,7 @@ export function issueService(db) {
570
596
  myLastCommentAt: statsByIssueId.get(row.id)?.myLastCommentAt ?? null,
571
597
  myLastReadAt: readByIssueId.get(row.id) ?? null,
572
598
  lastExternalCommentAt: statsByIssueId.get(row.id)?.lastExternalCommentAt ?? null,
599
+ lastExternalActivityAt: statsByIssueId.get(row.id)?.lastExternalActivityAt ?? null,
573
600
  }),
574
601
  }));
575
602
  },
@@ -656,9 +683,42 @@ export function issueService(db) {
656
683
  const [enriched] = await withIssueLabels(db, [row]);
657
684
  return enriched;
658
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
+ },
659
704
  create: async (orgId, data) => {
660
705
  const { labelIds: inputLabelIds, ...rawIssueData } = data;
661
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
+ }
662
722
  if (data.assigneeAgentId && data.assigneeUserId) {
663
723
  throw unprocessable("Issue can only have one assignee");
664
724
  }
@@ -693,116 +753,160 @@ export function issueService(db) {
693
753
  if (data.status === "in_progress" && !data.assigneeAgentId && !data.assigneeUserId) {
694
754
  throw unprocessable("in_progress issues require an assignee");
695
755
  }
696
- return db.transaction(async (tx) => {
697
- const defaultCompanyGoal = await getDefaultCompanyGoal(tx, orgId);
698
- let executionWorkspaceSettings = issueData.executionWorkspaceSettings ?? null;
699
- if (executionWorkspaceSettings == null && issueData.projectId) {
700
- const project = await tx
701
- .select({ executionWorkspacePolicy: projects.executionWorkspacePolicy })
702
- .from(projects)
703
- .where(and(eq(projects.id, issueData.projectId), eq(projects.orgId, orgId)))
704
- .then((rows) => rows[0] ?? null);
705
- executionWorkspaceSettings =
706
- defaultIssueExecutionWorkspaceSettingsForProject(parseProjectExecutionWorkspacePolicy(project?.executionWorkspacePolicy));
707
- }
708
- // Legacy fallback: keep old project_workspace_id population for
709
- // existing runtime resolution paths. Current run workspace behavior is
710
- // configured through executionWorkspaceSettings / executionWorkspaces.
711
- let projectWorkspaceId = issueData.projectWorkspaceId ?? null;
712
- if (!projectWorkspaceId && issueData.projectId) {
713
- const project = await tx
714
- .select({
715
- executionWorkspacePolicy: projects.executionWorkspacePolicy,
716
- })
717
- .from(projects)
718
- .where(and(eq(projects.id, issueData.projectId), eq(projects.orgId, orgId)))
719
- .then((rows) => rows[0] ?? null);
720
- const projectPolicy = parseProjectExecutionWorkspacePolicy(project?.executionWorkspacePolicy);
721
- projectWorkspaceId = projectPolicy?.defaultProjectWorkspaceId ?? null;
722
- if (!projectWorkspaceId) {
723
- projectWorkspaceId = await tx
724
- .select({ id: projectWorkspaces.id })
725
- .from(projectWorkspaces)
726
- .where(and(eq(projectWorkspaces.projectId, issueData.projectId), eq(projectWorkspaces.orgId, orgId)))
727
- .orderBy(desc(projectWorkspaces.isPrimary), asc(projectWorkspaces.createdAt), asc(projectWorkspaces.id))
728
- .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));
729
767
  }
730
- }
731
- const [organization] = await tx
732
- .update(organizations)
733
- .set({ issueCounter: sql `${organizations.issueCounter} + 1` })
734
- .where(eq(organizations.id, orgId))
735
- .returning({ issueCounter: organizations.issueCounter, issuePrefix: organizations.issuePrefix });
736
- const issueNumber = organization.issueCounter;
737
- const identifier = `${organization.issuePrefix}-${issueNumber}`;
738
- const values = {
739
- ...issueData,
740
- originKind: issueData.originKind ?? "manual",
741
- goalId: resolveIssueGoalId({
742
- projectId: issueData.projectId,
743
- goalId: issueData.goalId,
744
- defaultGoalId: defaultCompanyGoal?.id ?? null,
745
- }),
746
- ...(projectWorkspaceId ? { projectWorkspaceId } : {}),
747
- ...(executionWorkspaceSettings ? { executionWorkspaceSettings } : {}),
748
- orgId,
749
- issueNumber,
750
- identifier,
751
- };
752
- if (values.status === "in_progress" && !values.startedAt) {
753
- values.startedAt = new Date();
754
- }
755
- if (values.status === "done") {
756
- values.completedAt = new Date();
757
- }
758
- if (values.status === "cancelled") {
759
- values.cancelledAt = new Date();
760
- }
761
- if (values.boardOrder === undefined) {
762
- const statusForOrder = values.status ?? "backlog";
763
- const currentMax = await tx
764
- .select({ value: sql `coalesce(max(${issues.boardOrder}), 0)` })
765
- .from(issues)
766
- .where(and(eq(issues.orgId, orgId), eq(issues.status, statusForOrder)))
767
- .then((rows) => Number(rows[0]?.value ?? 0));
768
- values.boardOrder = currentMax + BOARD_ORDER_STEP;
769
- }
770
- const resolvedLabelIds = await resolveCreateLabelIds(orgId, issueData, inputLabelIds, tx);
771
- const [issue] = await tx.insert(issues).values(values).returning();
772
- if (resolvedLabelIds) {
773
- await syncIssueLabels(issue.id, orgId, resolvedLabelIds, tx);
774
- }
775
- if (issue.createdByUserId && (issue.status === "in_progress" || issue.executionRunId !== null)) {
776
- const workCycleId = `issue:${issue.id}`;
777
- 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 } : {}),
778
804
  orgId,
779
- workSurface: "issue",
780
- workId: issue.id,
781
- workCycleId,
782
- actorId: issue.createdByUserId,
783
- startedAt: issue.createdAt,
784
- });
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";
785
843
  await recordProductAnalyticsEvent(tx, {
786
844
  orgId,
787
- eventName: "human_work_started",
845
+ eventName: "issue_created",
788
846
  occurredAt: issue.createdAt,
789
847
  sourceTransition: "issue.create",
790
848
  confidence: "exact",
791
- actorType: "human",
792
- actorId: issue.createdByUserId,
849
+ actorType: creationActorType,
850
+ actorId: issue.createdByUserId ?? issue.createdByAgentId ?? null,
793
851
  entityType: "issue",
794
852
  entityId: issue.id,
795
853
  workSurface: "issue",
796
854
  workId: issue.id,
797
- workCycleId,
798
- origin: "human",
799
- dedupeKey: `human_work_started:${workCycleId}`,
800
- 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
+ },
801
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;
802
899
  }
803
- const [enriched] = await withIssueLabels(tx, [issue]);
804
- return enriched;
805
- });
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
+ }
806
910
  },
807
911
  update: async (id, data, authorization) => {
808
912
  const existing = await db
@@ -969,14 +1073,7 @@ export function issueService(db) {
969
1073
  }
970
1074
  }
971
1075
  return db.transaction(async (tx) => {
972
- const defaultCompanyGoal = await getDefaultCompanyGoal(tx, existing.orgId);
973
- patch.goalId = resolveNextIssueGoalId({
974
- currentProjectId: existing.projectId,
975
- currentGoalId: existing.goalId,
976
- projectId: issueData.projectId,
977
- goalId: issueData.goalId,
978
- defaultGoalId: defaultCompanyGoal?.id ?? null,
979
- });
1076
+ patch.goalId = issueData.goalId !== undefined ? issueData.goalId ?? null : existing.goalId;
980
1077
  const updated = await tx
981
1078
  .update(issues)
982
1079
  .set(patch)
@@ -1464,5 +1561,7 @@ export function issueService(db) {
1464
1561
  }));
1465
1562
  },
1466
1563
  };
1564
+ createIssue = service.create;
1565
+ return service;
1467
1566
  }
1468
1567
  //# sourceMappingURL=issues.js.map