@rudderhq/server 0.7.16 → 0.7.19-canary.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (248) hide show
  1. package/dist/agent-runtimes/registry.d.ts.map +1 -1
  2. package/dist/agent-runtimes/registry.js +2 -1
  3. package/dist/agent-runtimes/registry.js.map +1 -1
  4. package/dist/bootstrap/create-http-app.d.ts.map +1 -1
  5. package/dist/bootstrap/create-http-app.js +3 -9
  6. package/dist/bootstrap/create-http-app.js.map +1 -1
  7. package/dist/file-system-durability.d.ts +5 -0
  8. package/dist/file-system-durability.d.ts.map +1 -0
  9. package/dist/file-system-durability.js +39 -0
  10. package/dist/file-system-durability.js.map +1 -0
  11. package/dist/home-paths.d.ts +1 -0
  12. package/dist/home-paths.d.ts.map +1 -1
  13. package/dist/home-paths.js +705 -102
  14. package/dist/home-paths.js.map +1 -1
  15. package/dist/routes/chats.d.ts.map +1 -1
  16. package/dist/routes/chats.js +18 -69
  17. package/dist/routes/chats.js.map +1 -1
  18. package/dist/routes/chats.message-query-routes.d.ts +9 -0
  19. package/dist/routes/chats.message-query-routes.d.ts.map +1 -0
  20. package/dist/routes/chats.message-query-routes.js +43 -0
  21. package/dist/routes/chats.message-query-routes.js.map +1 -0
  22. package/dist/routes/chats.stop-route.d.ts +3 -0
  23. package/dist/routes/chats.stop-route.d.ts.map +1 -0
  24. package/dist/routes/chats.stop-route.js +240 -0
  25. package/dist/routes/chats.stop-route.js.map +1 -0
  26. package/dist/routes/chats.stream-routes.d.ts.map +1 -1
  27. package/dist/routes/chats.stream-routes.js +94 -390
  28. package/dist/routes/chats.stream-routes.js.map +1 -1
  29. package/dist/routes/chats.stream-support.d.ts +41 -0
  30. package/dist/routes/chats.stream-support.d.ts.map +1 -1
  31. package/dist/routes/chats.stream-support.js +58 -0
  32. package/dist/routes/chats.stream-support.js.map +1 -1
  33. package/dist/routes/issues.d.ts.map +1 -1
  34. package/dist/routes/issues.js +27 -5
  35. package/dist/routes/issues.js.map +1 -1
  36. package/dist/routes/issues.mutations.d.ts.map +1 -1
  37. package/dist/routes/issues.mutations.js +10 -6
  38. package/dist/routes/issues.mutations.js.map +1 -1
  39. package/dist/routes/orgs.d.ts.map +1 -1
  40. package/dist/routes/orgs.js +28 -8
  41. package/dist/routes/orgs.js.map +1 -1
  42. package/dist/routes/rudder-plugins.d.ts +5 -0
  43. package/dist/routes/rudder-plugins.d.ts.map +1 -1
  44. package/dist/routes/rudder-plugins.js +21 -1
  45. package/dist/routes/rudder-plugins.js.map +1 -1
  46. package/dist/routes/rudder-plugins.test.d.ts +2 -0
  47. package/dist/routes/rudder-plugins.test.d.ts.map +1 -0
  48. package/dist/routes/rudder-plugins.test.js +42 -0
  49. package/dist/routes/rudder-plugins.test.js.map +1 -0
  50. package/dist/routes/run-intelligence.d.ts.map +1 -1
  51. package/dist/routes/run-intelligence.js +8 -0
  52. package/dist/routes/run-intelligence.js.map +1 -1
  53. package/dist/services/agent-issue-creation.d.ts.map +1 -1
  54. package/dist/services/agent-issue-creation.js +2 -0
  55. package/dist/services/agent-issue-creation.js.map +1 -1
  56. package/dist/services/chat-assistant.d.ts.map +1 -1
  57. package/dist/services/chat-assistant.helpers.d.ts +4 -2
  58. package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
  59. package/dist/services/chat-assistant.helpers.js +5 -0
  60. package/dist/services/chat-assistant.helpers.js.map +1 -1
  61. package/dist/services/chat-assistant.js +31 -8
  62. package/dist/services/chat-assistant.js.map +1 -1
  63. package/dist/services/chat-generation-locks.test.js +0 -8
  64. package/dist/services/chat-generation-locks.test.js.map +1 -1
  65. package/dist/services/chat-inline-annotation-validation.d.ts.map +1 -1
  66. package/dist/services/chat-inline-annotation-validation.js +3 -10
  67. package/dist/services/chat-inline-annotation-validation.js.map +1 -1
  68. package/dist/services/chat-inline-annotations.test.js +12 -15
  69. package/dist/services/chat-inline-annotations.test.js.map +1 -1
  70. package/dist/services/chat-message-mutation-fingerprint.d.ts +29 -1
  71. package/dist/services/chat-message-mutation-fingerprint.d.ts.map +1 -1
  72. package/dist/services/chat-message-mutation-fingerprint.js +55 -0
  73. package/dist/services/chat-message-mutation-fingerprint.js.map +1 -1
  74. package/dist/services/chats.annotation-persistence.d.ts +5 -0
  75. package/dist/services/chats.annotation-persistence.d.ts.map +1 -1
  76. package/dist/services/chats.annotation-persistence.js +33 -1
  77. package/dist/services/chats.annotation-persistence.js.map +1 -1
  78. package/dist/services/chats.d.ts +2 -28
  79. package/dist/services/chats.d.ts.map +1 -1
  80. package/dist/services/chats.js +3 -29
  81. package/dist/services/chats.js.map +1 -1
  82. package/dist/services/index.d.ts +1 -1
  83. package/dist/services/index.d.ts.map +1 -1
  84. package/dist/services/index.js.map +1 -1
  85. package/dist/services/issue-references.d.ts +10 -0
  86. package/dist/services/issue-references.d.ts.map +1 -0
  87. package/dist/services/issue-references.js +141 -0
  88. package/dist/services/issue-references.js.map +1 -0
  89. package/dist/services/issues.d.ts +1 -1
  90. package/dist/services/issues.d.ts.map +1 -1
  91. package/dist/services/issues.helpers.d.ts +4 -0
  92. package/dist/services/issues.helpers.d.ts.map +1 -1
  93. package/dist/services/issues.helpers.js.map +1 -1
  94. package/dist/services/issues.js +164 -97
  95. package/dist/services/issues.js.map +1 -1
  96. package/dist/services/organization-workspace-browser.d.ts +6 -2
  97. package/dist/services/organization-workspace-browser.d.ts.map +1 -1
  98. package/dist/services/organization-workspace-browser.js +212 -53
  99. package/dist/services/organization-workspace-browser.js.map +1 -1
  100. package/dist/services/plugin-archive-native.d.ts +10 -0
  101. package/dist/services/plugin-archive-native.d.ts.map +1 -0
  102. package/dist/services/plugin-archive-native.js +170 -0
  103. package/dist/services/plugin-archive-native.js.map +1 -0
  104. package/dist/services/plugin-archive-node.d.ts +3 -0
  105. package/dist/services/plugin-archive-node.d.ts.map +1 -0
  106. package/dist/services/plugin-archive-node.js +97 -0
  107. package/dist/services/plugin-archive-node.js.map +1 -0
  108. package/dist/services/product-analytics-collector.test.js +5 -1
  109. package/dist/services/product-analytics-collector.test.js.map +1 -1
  110. package/dist/services/rudder-plugin-catalog.d.ts.map +1 -1
  111. package/dist/services/rudder-plugin-catalog.js +10 -11
  112. package/dist/services/rudder-plugin-catalog.js.map +1 -1
  113. package/dist/services/rudder-plugins.d.ts +1 -3
  114. package/dist/services/rudder-plugins.d.ts.map +1 -1
  115. package/dist/services/rudder-plugins.js +57 -100
  116. package/dist/services/rudder-plugins.js.map +1 -1
  117. package/dist/services/rudder-plugins.test.js +52 -17
  118. package/dist/services/rudder-plugins.test.js.map +1 -1
  119. package/dist/services/run-intelligence.d.ts +1 -0
  120. package/dist/services/run-intelligence.d.ts.map +1 -1
  121. package/dist/services/run-intelligence.js +1 -1
  122. package/dist/services/run-intelligence.js.map +1 -1
  123. package/dist/services/run-log-store.d.ts +1 -0
  124. package/dist/services/run-log-store.d.ts.map +1 -1
  125. package/dist/services/run-log-store.js +123 -4
  126. package/dist/services/run-log-store.js.map +1 -1
  127. package/dist/services/runtime-kernel/heartbeat.core.d.ts +1 -0
  128. package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
  129. package/dist/services/runtime-kernel/heartbeat.core.js +11 -0
  130. package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
  131. package/dist/services/runtime-kernel/heartbeat.d.ts +1 -0
  132. package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
  133. package/dist/services/runtime-kernel/heartbeat.js +3 -33
  134. package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
  135. package/dist/services/runtime-kernel/heartbeat.recovery.d.ts +1 -0
  136. package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
  137. package/dist/services/runtime-kernel/heartbeat.recovery.js +23 -0
  138. package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
  139. package/dist/services/runtime-kernel/model-fallback.d.ts.map +1 -1
  140. package/dist/services/runtime-kernel/model-fallback.js +56 -11
  141. package/dist/services/runtime-kernel/model-fallback.js.map +1 -1
  142. package/dist/services/workspace-backup-v2.d.ts +1 -0
  143. package/dist/services/workspace-backup-v2.d.ts.map +1 -1
  144. package/dist/services/workspace-backup-v2.js +16 -0
  145. package/dist/services/workspace-backup-v2.js.map +1 -1
  146. package/dist/services/workspace-backups.d.ts.map +1 -1
  147. package/dist/services/workspace-backups.js +4 -2
  148. package/dist/services/workspace-backups.js.map +1 -1
  149. package/dist/services/workspace-files-native.d.ts +16 -0
  150. package/dist/services/workspace-files-native.d.ts.map +1 -0
  151. package/dist/services/workspace-files-native.js +212 -0
  152. package/dist/services/workspace-files-native.js.map +1 -0
  153. package/dist/services/workspace-manifest-native.d.ts +1 -1
  154. package/dist/services/workspace-manifest-native.d.ts.map +1 -1
  155. package/dist/services/workspace-manifest-native.js +49 -6
  156. package/dist/services/workspace-manifest-native.js.map +1 -1
  157. package/dist/services/workspace-runtime.helpers.d.ts.map +1 -1
  158. package/dist/services/workspace-runtime.helpers.js +13 -11
  159. package/dist/services/workspace-runtime.helpers.js.map +1 -1
  160. package/package.json +14 -14
  161. package/resources/bundled-skills/rudder-docs/SKILL.md +12 -12
  162. package/resources/bundled-skills/rudder-docs/references/source-map.md +7 -31
  163. package/skills/rudder-docs/SKILL.md +12 -12
  164. package/skills/rudder-docs/references/source-map.md +7 -31
  165. package/ui-dist/assets/{LibraryLiveSurface-DnY0wZep.js → LibraryLiveSurface-D-6Puw4N.js} +1 -1
  166. package/ui-dist/assets/{abnfDiagram-VRR7QNED-CT-9m1Vc.js → abnfDiagram-VRR7QNED-DjgQ9iD_.js} +1 -1
  167. package/ui-dist/assets/{addon-fit-C6aMSfRz.js → addon-fit-OOCvZY14.js} +1 -1
  168. package/ui-dist/assets/{arc-1nExaM-y.js → arc-D6yqUjH4.js} +1 -1
  169. package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-bILoPPs5.js → architectureDiagram-ZJ3FMSHR-eF-Es2a-.js} +1 -1
  170. package/ui-dist/assets/{blockDiagram-677ZJIJ3--zRFciqi.js → blockDiagram-677ZJIJ3-B7G2uxR7.js} +1 -1
  171. package/ui-dist/assets/{c4Diagram-LMCZKHZV-CrtaX6A_.js → c4Diagram-LMCZKHZV-YhY4bz85.js} +1 -1
  172. package/ui-dist/assets/channel-DISxdJMI.js +1 -0
  173. package/ui-dist/assets/{chunk-2Q5K7J3B-DoBb7ZYS.js → chunk-2Q5K7J3B-D7QxbIUK.js} +1 -1
  174. package/ui-dist/assets/{chunk-32BRIVSS-DilGswdp.js → chunk-32BRIVSS-CArPDsLy.js} +1 -1
  175. package/ui-dist/assets/{chunk-5VM5RSS4-D8q00d1k.js → chunk-5VM5RSS4-ByyAjdOI.js} +1 -1
  176. package/ui-dist/assets/{chunk-EX3LRPZG-Bl1KSAwQ.js → chunk-EX3LRPZG-B6Z9cEKa.js} +1 -1
  177. package/ui-dist/assets/{chunk-JWPE2WC7-DtdgLB7Y.js → chunk-JWPE2WC7-L5jYy4CI.js} +1 -1
  178. package/ui-dist/assets/{chunk-MOJQB5TN-UaG7L1QI.js → chunk-MOJQB5TN-BBTZZsOQ.js} +1 -1
  179. package/ui-dist/assets/{chunk-RYQCIY6F-mkz9qbQF.js → chunk-RYQCIY6F-DyV9CaPT.js} +1 -1
  180. package/ui-dist/assets/{chunk-V7JOEXUC-FGET6Myl.js → chunk-V7JOEXUC-CNztgBrF.js} +1 -1
  181. package/ui-dist/assets/{chunk-VR4S4FIN-BgfUmupS.js → chunk-VR4S4FIN-Bv62Xmto.js} +1 -1
  182. package/ui-dist/assets/{chunk-XXDRQBXY-B6I-gBFN.js → chunk-XXDRQBXY-B5AzJDaz.js} +1 -1
  183. package/ui-dist/assets/classDiagram-OUVF2IWQ-BssC8UiF.js +1 -0
  184. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-BssC8UiF.js +1 -0
  185. package/ui-dist/assets/{cose-bilkent-JH36ORCC-DVGWBjbO.js → cose-bilkent-JH36ORCC-DrzyjyO_.js} +1 -1
  186. package/ui-dist/assets/{cynefin-VYW2F7L2-CWjLXAiA.js → cynefin-VYW2F7L2-ChoChVKW.js} +1 -1
  187. package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-DWY5Jowv.js → cynefinDiagram-TSTJHNR4-Fv4ecj_f.js} +1 -1
  188. package/ui-dist/assets/{dagre-VKFMJZFB-Bp0SVTqP.js → dagre-VKFMJZFB-Zd466k0O.js} +1 -1
  189. package/ui-dist/assets/{diagram-FQU43EPY-EhsLuQCs.js → diagram-FQU43EPY-BgL3Uu7z.js} +1 -1
  190. package/ui-dist/assets/{diagram-G47NLZAW-C_ifHw4Q.js → diagram-G47NLZAW-Bcbg2TZF.js} +1 -1
  191. package/ui-dist/assets/{diagram-NH7WQ7WH-BCitqFNA.js → diagram-NH7WQ7WH-YS4gl6dx.js} +1 -1
  192. package/ui-dist/assets/{diagram-OA4YK3LP-BRjomHnO.js → diagram-OA4YK3LP-C-A8A6Xi.js} +1 -1
  193. package/ui-dist/assets/{diagram-WEI45ONY-Cr_E92JE.js → diagram-WEI45ONY-mqkaxwes.js} +1 -1
  194. package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-0WJQMwqt.js → ebnfDiagram-CCIWWBDH-CvH1cI4K.js} +1 -1
  195. package/ui-dist/assets/{erDiagram-Q63AITRT-B0EBivSu.js → erDiagram-Q63AITRT-Duhw1MUB.js} +1 -1
  196. package/ui-dist/assets/{flowDiagram-23GEKE2U-BwdRtCsd.js → flowDiagram-23GEKE2U-DUkAECUs.js} +1 -1
  197. package/ui-dist/assets/{ganttDiagram-NO4QXBWP-KxlqXAqZ.js → ganttDiagram-NO4QXBWP-B3cINaqn.js} +1 -1
  198. package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-DeTCa-SS.js → gitGraphDiagram-IHSO6WYX-BMEHvYy5.js} +1 -1
  199. package/ui-dist/assets/{graph-rdRwl3us.js → graph-B1-dUGRC.js} +1 -1
  200. package/ui-dist/assets/{index-B2jHUYti.js → index-BFmYzGL9.js} +1 -1
  201. package/ui-dist/assets/{index-DBPJ49Cn.js → index-BGAEBJze.js} +1 -1
  202. package/ui-dist/assets/{index-NxbW73mN.js → index-BMfPEMCH.js} +1 -1
  203. package/ui-dist/assets/{index-CcLF8pix.js → index-BglV2AAc.js} +1 -1
  204. package/ui-dist/assets/{index-BzLCEJCf.js → index-Blix7pGb.js} +1 -1
  205. package/ui-dist/assets/{index-D5pdKmHf.js → index-CBrXXiQ_.js} +1 -1
  206. package/ui-dist/assets/{index-7Mb8iY3g.js → index-CSMCUMYP.js} +1 -1
  207. package/ui-dist/assets/index-CUW-AUBO.css +32 -0
  208. package/ui-dist/assets/{index-D3RtGD1i.js → index-CaveK_TY.js} +1 -1
  209. package/ui-dist/assets/{index-CtFA44ZZ.js → index-DHcvu8nk.js} +1 -1
  210. package/ui-dist/assets/{index-CuP2P51w.js → index-DSz4Tjbh.js} +1 -1
  211. package/ui-dist/assets/{index-Bi7KPtJ3.js → index-DgNZ8Oto.js} +1 -1
  212. package/ui-dist/assets/{index-C2DKaTLo.js → index-Drmy6GaQ.js} +1 -1
  213. package/ui-dist/assets/{index-CbEMZXO1.js → index-DvrowL98.js} +1 -1
  214. package/ui-dist/assets/{index-CY1CWc3h.js → index-DxHCQu-4.js} +1 -1
  215. package/ui-dist/assets/{index-s8ZAOPE2.js → index-IJhIHwGp.js} +641 -641
  216. package/ui-dist/assets/{infoDiagram-FWYZ7A6U-Cun6yrS9.js → infoDiagram-FWYZ7A6U-BJ7smuOx.js} +1 -1
  217. package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-SHuCvm_3.js → ishikawaDiagram-FXEZZL3T-Bn7jPYRy.js} +1 -1
  218. package/ui-dist/assets/{journeyDiagram-5HDEW3XC-B2oa-ovF.js → journeyDiagram-5HDEW3XC-D5NYECBN.js} +1 -1
  219. package/ui-dist/assets/{kanban-definition-HUTT4EX6-DtG3RFW0.js → kanban-definition-HUTT4EX6-CcrYvDYt.js} +1 -1
  220. package/ui-dist/assets/{layout-DmSY_WKW.js → layout-32M7EWAw.js} +1 -1
  221. package/ui-dist/assets/{linear-BiklTv-9.js → linear-DT9kJUfH.js} +1 -1
  222. package/ui-dist/assets/{map-B3RAMPoy.js → map-C2crE4Bv.js} +1 -1
  223. package/ui-dist/assets/{mermaid.core-CQj0CvWy.js → mermaid.core-B9y8ebhy.js} +4 -4
  224. package/ui-dist/assets/{mindmap-definition-LN4V7U3C-BQrncLdk.js → mindmap-definition-LN4V7U3C-CaFsY4LT.js} +1 -1
  225. package/ui-dist/assets/{pegDiagram-2B236MQR-BmkmBhyS.js → pegDiagram-2B236MQR-BMTtqHzV.js} +1 -1
  226. package/ui-dist/assets/{pieDiagram-ENE6RG2P-B0dWJser.js → pieDiagram-ENE6RG2P-DRl32AMI.js} +1 -1
  227. package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-RS2o06NX.js → quadrantDiagram-ABIIQ3AL-pXeC4qE5.js} +1 -1
  228. package/ui-dist/assets/{railroadDiagram-RFXS5EU6-B4dlWUnB.js → railroadDiagram-RFXS5EU6-tGzWZNPI.js} +1 -1
  229. package/ui-dist/assets/{requirementDiagram-TGXJPOKE-7M1vICZA.js → requirementDiagram-TGXJPOKE-DEqEN1a0.js} +1 -1
  230. package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-LUpZrugG.js → sankeyDiagram-HTMAVEWB-DjVDCNO4.js} +1 -1
  231. package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-DB4ecUEg.js → sequenceDiagram-DBY2YBRQ-CRKMhKhd.js} +1 -1
  232. package/ui-dist/assets/{sizeCapture-X5ZJPWSS-CgLQGkEa.js → sizeCapture-X5ZJPWSS-CWl0gYed.js} +1 -1
  233. package/ui-dist/assets/{stateDiagram-2N3HPSRC-BxLcsZg0.js → stateDiagram-2N3HPSRC-BH6FVEBD.js} +1 -1
  234. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-DFWkP3y3.js +1 -0
  235. package/ui-dist/assets/{swimlanes-5IMT3BWC-CFoyzQNM.js → swimlanes-5IMT3BWC-BZdn1cQ5.js} +2 -2
  236. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-BwA91U1K.js +8 -0
  237. package/ui-dist/assets/{timeline-definition-FHXFAJF6-C1vajCzY.js → timeline-definition-FHXFAJF6-CMofE9DN.js} +1 -1
  238. package/ui-dist/assets/{vennDiagram-L72KCM5P-C42rETOq.js → vennDiagram-L72KCM5P-CszussGd.js} +1 -1
  239. package/ui-dist/assets/{wardleyDiagram-EHGQE667-BgzD6-QL.js → wardleyDiagram-EHGQE667-C1Op8a5q.js} +1 -1
  240. package/ui-dist/assets/{xterm-BeBaISmm.js → xterm-BM41mI-I.js} +1 -1
  241. package/ui-dist/assets/{xychartDiagram-FW5EYKEG-BdoJT_55.js → xychartDiagram-FW5EYKEG-zi-IHNrX.js} +1 -1
  242. package/ui-dist/index.html +11 -7
  243. package/ui-dist/assets/channel-C3jj6nd_.js +0 -1
  244. package/ui-dist/assets/classDiagram-OUVF2IWQ-CNsW5NoJ.js +0 -1
  245. package/ui-dist/assets/classDiagram-v2-EOCWNBFH-CNsW5NoJ.js +0 -1
  246. package/ui-dist/assets/index-CYaeM_68.css +0 -32
  247. package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-DAlIlXqa.js +0 -1
  248. package/ui-dist/assets/swimlanesDiagram-G3AALYLV-DXfnihCA.js +0 -8
@@ -8,6 +8,7 @@ import { logger } from "../middleware/logger.js";
8
8
  import { defaultIssueExecutionWorkspaceSettingsForProject, parseProjectExecutionWorkspacePolicy, } from "./execution-workspace-policy.js";
9
9
  import { instanceSettingsService } from "./instance-settings.js";
10
10
  import { issueMaterialUpdateActivitySql } from "./issue-activity-filters.js";
11
+ import { resolveIssueReferenceInputs } from "./issue-references.js";
11
12
  import { removeMessengerCustomGroupEntriesForItem } from "./messenger-saved-views.js";
12
13
  import { ensureProductAnalyticsWorkCycle, recordProductAnalyticsEvent } from "./product-analytics.js";
13
14
  import { createIssueCommentAttachmentMethods } from "./issues.comments-attachments.js";
@@ -15,6 +16,8 @@ import { BOARD_ORDER_STEP, TERMINAL_HEARTBEAT_RUN_STATUSES, activeRunMapForIssue
15
16
  export { deriveIssueUserContext } from "./issues.helpers.js";
16
17
  const DEFAULT_ISSUE_SEARCH_FIELDS = ["title"];
17
18
  const MAX_ISSUE_LIST_LIMIT = 500;
19
+ const DEFAULT_ISSUE_SORT_FIELD = "priority";
20
+ const DEFAULT_ISSUE_SORT_DIR = "asc";
18
21
  const ISSUE_DESCRIPTION_ASSET_PATH_RE = /\/api\/assets\/([^/?#\s)]+)\/content/g;
19
22
  export function extractIssueDescriptionAssetIds(description) {
20
23
  if (!description)
@@ -126,6 +129,52 @@ function normalizeIssueListOffset(offset) {
126
129
  return undefined;
127
130
  return normalized;
128
131
  }
132
+ function issueSortExpression(expression, direction) {
133
+ return direction === "desc" ? desc(expression) : asc(expression);
134
+ }
135
+ function issueCTextExpression(expression) {
136
+ return sql `${expression} COLLATE "C"`;
137
+ }
138
+ function issuePriorityOrderExpression() {
139
+ return sql `CASE ${issues.priority}
140
+ WHEN 'critical' THEN 0
141
+ WHEN 'high' THEN 1
142
+ WHEN 'medium' THEN 2
143
+ WHEN 'low' THEN 3
144
+ ELSE 4
145
+ END`;
146
+ }
147
+ function issueStatusOrderExpression() {
148
+ return sql `CASE ${issues.status}
149
+ WHEN 'in_progress' THEN 0
150
+ WHEN 'todo' THEN 1
151
+ WHEN 'backlog' THEN 2
152
+ WHEN 'in_review' THEN 3
153
+ WHEN 'blocked' THEN 4
154
+ WHEN 'done' THEN 5
155
+ WHEN 'cancelled' THEN 6
156
+ ELSE 7
157
+ END`;
158
+ }
159
+ function issueListOrderBy(sortField = DEFAULT_ISSUE_SORT_FIELD, sortDir = DEFAULT_ISSUE_SORT_DIR) {
160
+ const primary = sortField === "manual"
161
+ ? issues.boardOrder
162
+ : sortField === "status"
163
+ ? issueStatusOrderExpression()
164
+ : sortField === "priority"
165
+ ? issuePriorityOrderExpression()
166
+ : sortField === "title"
167
+ ? issueCTextExpression(issues.title)
168
+ : sortField === "created"
169
+ ? issues.createdAt
170
+ : issues.updatedAt;
171
+ return [
172
+ issueSortExpression(primary, sortDir),
173
+ desc(issues.updatedAt),
174
+ desc(issues.createdAt),
175
+ asc(sql `COALESCE(${issues.identifier}, ${issues.id}::text) COLLATE "C"`),
176
+ ];
177
+ }
129
178
  export function issueService(db, storage) {
130
179
  const instanceSettings = instanceSettingsService(db);
131
180
  const issueCreateResults = new WeakMap();
@@ -491,6 +540,9 @@ export function issueService(db, storage) {
491
540
  return Boolean(row);
492
541
  },
493
542
  list: async (orgId, filters) => {
543
+ if (filters) {
544
+ filters = await resolveIssueReferenceInputs(db, orgId, filters);
545
+ }
494
546
  const conditions = [eq(issues.orgId, orgId)];
495
547
  const touchedByUserId = filters?.touchedByUserId?.trim() || undefined;
496
548
  const unreadForUserId = filters?.unreadForUserId?.trim() || undefined;
@@ -623,7 +675,7 @@ export function issueService(db, storage) {
623
675
  : ne(issues.originKind, "automation_execution"));
624
676
  }
625
677
  conditions.push(isNull(issues.hiddenAt));
626
- const priorityOrder = sql `CASE ${issues.priority} WHEN 'critical' THEN 0 WHEN 'high' THEN 1 WHEN 'medium' THEN 2 WHEN 'low' THEN 3 ELSE 4 END`;
678
+ const priorityOrder = issuePriorityOrderExpression();
627
679
  const searchOrder = sql `
628
680
  CASE
629
681
  WHEN ${searchFields.has("title")} AND ${titleStartsWithMatch} THEN 0
@@ -639,7 +691,15 @@ export function issueService(db, storage) {
639
691
  .select()
640
692
  .from(issues)
641
693
  .where(and(...conditions))
642
- .orderBy(hasSearch ? asc(searchOrder) : asc(priorityOrder), asc(priorityOrder), desc(issues.updatedAt))
694
+ .orderBy(...(hasSearch
695
+ ? [
696
+ asc(searchOrder),
697
+ asc(priorityOrder),
698
+ desc(issues.updatedAt),
699
+ desc(issues.createdAt),
700
+ asc(sql `COALESCE(${issues.identifier}, ${issues.id}::text) COLLATE "C"`),
701
+ ]
702
+ : issueListOrderBy(filters?.sortField, filters?.sortDir)))
643
703
  .$dynamic();
644
704
  const limit = normalizeIssueListLimit(filters?.limit);
645
705
  if (limit !== undefined) {
@@ -821,6 +881,7 @@ export function issueService(db, storage) {
821
881
  };
822
882
  },
823
883
  create: async (orgId, data) => {
884
+ data = await resolveIssueReferenceInputs(db, orgId, data);
824
885
  const { labelIds: inputLabelIds, ...rawIssueData } = data;
825
886
  const issueData = { ...rawIssueData };
826
887
  const idempotentOrigin = resolveIdempotentIssueOrigin(issueData.originKind, issueData.originId);
@@ -1074,6 +1135,7 @@ export function issueService(db, storage) {
1074
1135
  .then((rows) => rows[0] ?? null);
1075
1136
  if (!existing)
1076
1137
  return null;
1138
+ data = await resolveIssueReferenceInputs(db, existing.orgId, data);
1077
1139
  const { labelIds: nextLabelIds, ...issueData } = data;
1078
1140
  const hasIssueFieldChangesFrom = (current) => Object.entries(issueData).some(([key, value]) => {
1079
1141
  const currentValue = current[key];
@@ -1340,106 +1402,109 @@ export function issueService(db, storage) {
1340
1402
  return enriched;
1341
1403
  });
1342
1404
  },
1343
- reorder: async (orgId, input) => db.transaction(async (tx) => {
1344
- const existing = await tx
1345
- .select()
1346
- .from(issues)
1347
- .where(and(eq(issues.id, input.issueId), eq(issues.orgId, orgId)))
1348
- .for("update")
1349
- .then((rows) => rows[0] ?? null);
1350
- if (!existing)
1351
- return null;
1352
- assertTransition(existing.status, input.targetStatus);
1353
- assertIssueReviewStateTransition({
1354
- currentStatus: existing.status,
1355
- nextStatus: input.targetStatus,
1356
- currentReviewerAgentId: existing.reviewerAgentId,
1357
- currentReviewerUserId: existing.reviewerUserId,
1358
- nextReviewerAgentId: existing.reviewerAgentId,
1359
- nextReviewerUserId: existing.reviewerUserId,
1360
- });
1361
- const targetRows = await tx
1362
- .select()
1363
- .from(issues)
1364
- .where(and(eq(issues.orgId, orgId), eq(issues.status, input.targetStatus), ne(issues.id, input.issueId), isNull(issues.hiddenAt)))
1365
- .orderBy(asc(issues.boardOrder), desc(issues.updatedAt), desc(issues.createdAt), asc(issues.id));
1366
- const targetIds = new Set(targetRows.map((row) => row.id));
1367
- if (input.previousIssueId && !targetIds.has(input.previousIssueId)) {
1368
- throw unprocessable("previousIssueId must belong to the target status lane");
1369
- }
1370
- if (input.nextIssueId && !targetIds.has(input.nextIssueId)) {
1371
- throw unprocessable("nextIssueId must belong to the target status lane");
1372
- }
1373
- let insertIndex = input.position === "start" ? 0 : targetRows.length;
1374
- const previousIndex = input.previousIssueId
1375
- ? targetRows.findIndex((row) => row.id === input.previousIssueId)
1376
- : -1;
1377
- const nextIndex = input.nextIssueId
1378
- ? targetRows.findIndex((row) => row.id === input.nextIssueId)
1379
- : -1;
1380
- if (previousIndex >= 0 && nextIndex >= 0) {
1381
- if (nextIndex !== previousIndex + 1) {
1382
- throw unprocessable("previousIssueId and nextIssueId must be adjacent in the target lane");
1405
+ reorder: async (orgId, input) => {
1406
+ input = await resolveIssueReferenceInputs(db, orgId, input);
1407
+ return db.transaction(async (tx) => {
1408
+ const existing = await tx
1409
+ .select()
1410
+ .from(issues)
1411
+ .where(and(eq(issues.id, input.issueId), eq(issues.orgId, orgId)))
1412
+ .for("update")
1413
+ .then((rows) => rows[0] ?? null);
1414
+ if (!existing)
1415
+ return null;
1416
+ assertTransition(existing.status, input.targetStatus);
1417
+ assertIssueReviewStateTransition({
1418
+ currentStatus: existing.status,
1419
+ nextStatus: input.targetStatus,
1420
+ currentReviewerAgentId: existing.reviewerAgentId,
1421
+ currentReviewerUserId: existing.reviewerUserId,
1422
+ nextReviewerAgentId: existing.reviewerAgentId,
1423
+ nextReviewerUserId: existing.reviewerUserId,
1424
+ });
1425
+ const targetRows = await tx
1426
+ .select()
1427
+ .from(issues)
1428
+ .where(and(eq(issues.orgId, orgId), eq(issues.status, input.targetStatus), ne(issues.id, input.issueId), isNull(issues.hiddenAt)))
1429
+ .orderBy(asc(issues.boardOrder), desc(issues.updatedAt), desc(issues.createdAt), asc(issues.id));
1430
+ const targetIds = new Set(targetRows.map((row) => row.id));
1431
+ if (input.previousIssueId && !targetIds.has(input.previousIssueId)) {
1432
+ throw unprocessable("previousIssueId must belong to the target status lane");
1383
1433
  }
1384
- insertIndex = nextIndex;
1385
- }
1386
- else if (previousIndex >= 0) {
1387
- insertIndex = previousIndex + 1;
1388
- }
1389
- else if (nextIndex >= 0) {
1390
- insertIndex = nextIndex;
1391
- }
1392
- const orderedRows = [...targetRows];
1393
- orderedRows.splice(insertIndex, 0, existing);
1394
- const now = new Date();
1395
- let updatedIssue = null;
1396
- for (const [index, row] of orderedRows.entries()) {
1397
- const nextOrder = (index + 1) * BOARD_ORDER_STEP;
1398
- if (row.id === existing.id) {
1399
- const patch = {
1400
- boardOrder: nextOrder,
1401
- };
1402
- if (existing.status !== input.targetStatus) {
1403
- patch.status = input.targetStatus;
1404
- patch.updatedAt = now;
1405
- applyStatusSideEffects(input.targetStatus, patch);
1406
- if (input.targetStatus !== "done") {
1407
- patch.completedAt = null;
1408
- }
1409
- if (input.targetStatus !== "cancelled") {
1410
- patch.cancelledAt = null;
1411
- }
1412
- if (input.targetStatus !== "in_progress") {
1413
- patch.checkoutRunId = null;
1414
- patch.executionRunId = null;
1415
- patch.executionAgentNameKey = null;
1416
- patch.executionLockedAt = null;
1434
+ if (input.nextIssueId && !targetIds.has(input.nextIssueId)) {
1435
+ throw unprocessable("nextIssueId must belong to the target status lane");
1436
+ }
1437
+ let insertIndex = input.position === "start" ? 0 : targetRows.length;
1438
+ const previousIndex = input.previousIssueId
1439
+ ? targetRows.findIndex((row) => row.id === input.previousIssueId)
1440
+ : -1;
1441
+ const nextIndex = input.nextIssueId
1442
+ ? targetRows.findIndex((row) => row.id === input.nextIssueId)
1443
+ : -1;
1444
+ if (previousIndex >= 0 && nextIndex >= 0) {
1445
+ if (nextIndex !== previousIndex + 1) {
1446
+ throw unprocessable("previousIssueId and nextIssueId must be adjacent in the target lane");
1447
+ }
1448
+ insertIndex = nextIndex;
1449
+ }
1450
+ else if (previousIndex >= 0) {
1451
+ insertIndex = previousIndex + 1;
1452
+ }
1453
+ else if (nextIndex >= 0) {
1454
+ insertIndex = nextIndex;
1455
+ }
1456
+ const orderedRows = [...targetRows];
1457
+ orderedRows.splice(insertIndex, 0, existing);
1458
+ const now = new Date();
1459
+ let updatedIssue = null;
1460
+ for (const [index, row] of orderedRows.entries()) {
1461
+ const nextOrder = (index + 1) * BOARD_ORDER_STEP;
1462
+ if (row.id === existing.id) {
1463
+ const patch = {
1464
+ boardOrder: nextOrder,
1465
+ };
1466
+ if (existing.status !== input.targetStatus) {
1467
+ patch.status = input.targetStatus;
1468
+ patch.updatedAt = now;
1469
+ applyStatusSideEffects(input.targetStatus, patch);
1470
+ if (input.targetStatus !== "done") {
1471
+ patch.completedAt = null;
1472
+ }
1473
+ if (input.targetStatus !== "cancelled") {
1474
+ patch.cancelledAt = null;
1475
+ }
1476
+ if (input.targetStatus !== "in_progress") {
1477
+ patch.checkoutRunId = null;
1478
+ patch.executionRunId = null;
1479
+ patch.executionAgentNameKey = null;
1480
+ patch.executionLockedAt = null;
1481
+ }
1417
1482
  }
1483
+ updatedIssue = await tx
1484
+ .update(issues)
1485
+ .set(patch)
1486
+ .where(and(eq(issues.id, row.id), eq(issues.orgId, orgId)))
1487
+ .returning()
1488
+ .then((rows) => rows[0] ?? null);
1489
+ continue;
1418
1490
  }
1419
- updatedIssue = await tx
1491
+ if (row.boardOrder === nextOrder)
1492
+ continue;
1493
+ await tx
1420
1494
  .update(issues)
1421
- .set(patch)
1422
- .where(and(eq(issues.id, row.id), eq(issues.orgId, orgId)))
1423
- .returning()
1424
- .then((rows) => rows[0] ?? null);
1425
- continue;
1495
+ .set({ boardOrder: nextOrder })
1496
+ .where(and(eq(issues.id, row.id), eq(issues.orgId, orgId)));
1426
1497
  }
1427
- if (row.boardOrder === nextOrder)
1428
- continue;
1429
- await tx
1430
- .update(issues)
1431
- .set({ boardOrder: nextOrder })
1432
- .where(and(eq(issues.id, row.id), eq(issues.orgId, orgId)));
1433
- }
1434
- if (!updatedIssue)
1435
- return null;
1436
- const [enriched] = await withIssueLabels(tx, [updatedIssue]);
1437
- return {
1438
- issue: enriched,
1439
- previousStatus: existing.status,
1440
- previousBoardOrder: existing.boardOrder,
1441
- };
1442
- }),
1498
+ if (!updatedIssue)
1499
+ return null;
1500
+ const [enriched] = await withIssueLabels(tx, [updatedIssue]);
1501
+ return {
1502
+ issue: enriched,
1503
+ previousStatus: existing.status,
1504
+ previousBoardOrder: existing.boardOrder,
1505
+ };
1506
+ });
1507
+ },
1443
1508
  remove: (id) => db.transaction(async (tx) => {
1444
1509
  const attachmentAssetIds = await tx
1445
1510
  .select({ assetId: issueAttachments.assetId })
@@ -1480,6 +1545,8 @@ export function issueService(db, storage) {
1480
1545
  .then((rows) => rows[0] ?? null);
1481
1546
  if (!issueCompany)
1482
1547
  throw notFound("Issue not found");
1548
+ const resolvedCheckout = await resolveIssueReferenceInputs(db, issueCompany.orgId, { agentId });
1549
+ agentId = resolvedCheckout.agentId;
1483
1550
  await assertAssignableAgent(issueCompany.orgId, agentId);
1484
1551
  const now = new Date();
1485
1552
  const sameRunAssigneeCondition = checkoutRunId