@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.
- package/dist/agent-runtimes/registry.d.ts.map +1 -1
- package/dist/agent-runtimes/registry.js +2 -1
- package/dist/agent-runtimes/registry.js.map +1 -1
- package/dist/bootstrap/create-http-app.d.ts.map +1 -1
- package/dist/bootstrap/create-http-app.js +3 -9
- package/dist/bootstrap/create-http-app.js.map +1 -1
- package/dist/file-system-durability.d.ts +5 -0
- package/dist/file-system-durability.d.ts.map +1 -0
- package/dist/file-system-durability.js +39 -0
- package/dist/file-system-durability.js.map +1 -0
- package/dist/home-paths.d.ts +1 -0
- package/dist/home-paths.d.ts.map +1 -1
- package/dist/home-paths.js +705 -102
- package/dist/home-paths.js.map +1 -1
- package/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.js +18 -69
- package/dist/routes/chats.js.map +1 -1
- package/dist/routes/chats.message-query-routes.d.ts +9 -0
- package/dist/routes/chats.message-query-routes.d.ts.map +1 -0
- package/dist/routes/chats.message-query-routes.js +43 -0
- package/dist/routes/chats.message-query-routes.js.map +1 -0
- package/dist/routes/chats.stop-route.d.ts +3 -0
- package/dist/routes/chats.stop-route.d.ts.map +1 -0
- package/dist/routes/chats.stop-route.js +240 -0
- package/dist/routes/chats.stop-route.js.map +1 -0
- package/dist/routes/chats.stream-routes.d.ts.map +1 -1
- package/dist/routes/chats.stream-routes.js +94 -390
- package/dist/routes/chats.stream-routes.js.map +1 -1
- package/dist/routes/chats.stream-support.d.ts +41 -0
- package/dist/routes/chats.stream-support.d.ts.map +1 -1
- package/dist/routes/chats.stream-support.js +58 -0
- package/dist/routes/chats.stream-support.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +27 -5
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/issues.mutations.d.ts.map +1 -1
- package/dist/routes/issues.mutations.js +10 -6
- package/dist/routes/issues.mutations.js.map +1 -1
- package/dist/routes/orgs.d.ts.map +1 -1
- package/dist/routes/orgs.js +28 -8
- package/dist/routes/orgs.js.map +1 -1
- package/dist/routes/rudder-plugins.d.ts +5 -0
- package/dist/routes/rudder-plugins.d.ts.map +1 -1
- package/dist/routes/rudder-plugins.js +21 -1
- package/dist/routes/rudder-plugins.js.map +1 -1
- package/dist/routes/rudder-plugins.test.d.ts +2 -0
- package/dist/routes/rudder-plugins.test.d.ts.map +1 -0
- package/dist/routes/rudder-plugins.test.js +42 -0
- package/dist/routes/rudder-plugins.test.js.map +1 -0
- package/dist/routes/run-intelligence.d.ts.map +1 -1
- package/dist/routes/run-intelligence.js +8 -0
- package/dist/routes/run-intelligence.js.map +1 -1
- package/dist/services/agent-issue-creation.d.ts.map +1 -1
- package/dist/services/agent-issue-creation.js +2 -0
- package/dist/services/agent-issue-creation.js.map +1 -1
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.d.ts +4 -2
- package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.js +5 -0
- package/dist/services/chat-assistant.helpers.js.map +1 -1
- package/dist/services/chat-assistant.js +31 -8
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chat-generation-locks.test.js +0 -8
- package/dist/services/chat-generation-locks.test.js.map +1 -1
- package/dist/services/chat-inline-annotation-validation.d.ts.map +1 -1
- package/dist/services/chat-inline-annotation-validation.js +3 -10
- package/dist/services/chat-inline-annotation-validation.js.map +1 -1
- package/dist/services/chat-inline-annotations.test.js +12 -15
- package/dist/services/chat-inline-annotations.test.js.map +1 -1
- package/dist/services/chat-message-mutation-fingerprint.d.ts +29 -1
- package/dist/services/chat-message-mutation-fingerprint.d.ts.map +1 -1
- package/dist/services/chat-message-mutation-fingerprint.js +55 -0
- package/dist/services/chat-message-mutation-fingerprint.js.map +1 -1
- package/dist/services/chats.annotation-persistence.d.ts +5 -0
- package/dist/services/chats.annotation-persistence.d.ts.map +1 -1
- package/dist/services/chats.annotation-persistence.js +33 -1
- package/dist/services/chats.annotation-persistence.js.map +1 -1
- package/dist/services/chats.d.ts +2 -28
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +3 -29
- package/dist/services/chats.js.map +1 -1
- package/dist/services/index.d.ts +1 -1
- package/dist/services/index.d.ts.map +1 -1
- package/dist/services/index.js.map +1 -1
- package/dist/services/issue-references.d.ts +10 -0
- package/dist/services/issue-references.d.ts.map +1 -0
- package/dist/services/issue-references.js +141 -0
- package/dist/services/issue-references.js.map +1 -0
- package/dist/services/issues.d.ts +1 -1
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.helpers.d.ts +4 -0
- package/dist/services/issues.helpers.d.ts.map +1 -1
- package/dist/services/issues.helpers.js.map +1 -1
- package/dist/services/issues.js +164 -97
- package/dist/services/issues.js.map +1 -1
- package/dist/services/organization-workspace-browser.d.ts +6 -2
- package/dist/services/organization-workspace-browser.d.ts.map +1 -1
- package/dist/services/organization-workspace-browser.js +212 -53
- package/dist/services/organization-workspace-browser.js.map +1 -1
- package/dist/services/plugin-archive-native.d.ts +10 -0
- package/dist/services/plugin-archive-native.d.ts.map +1 -0
- package/dist/services/plugin-archive-native.js +170 -0
- package/dist/services/plugin-archive-native.js.map +1 -0
- package/dist/services/plugin-archive-node.d.ts +3 -0
- package/dist/services/plugin-archive-node.d.ts.map +1 -0
- package/dist/services/plugin-archive-node.js +97 -0
- package/dist/services/plugin-archive-node.js.map +1 -0
- package/dist/services/product-analytics-collector.test.js +5 -1
- package/dist/services/product-analytics-collector.test.js.map +1 -1
- package/dist/services/rudder-plugin-catalog.d.ts.map +1 -1
- package/dist/services/rudder-plugin-catalog.js +10 -11
- package/dist/services/rudder-plugin-catalog.js.map +1 -1
- package/dist/services/rudder-plugins.d.ts +1 -3
- package/dist/services/rudder-plugins.d.ts.map +1 -1
- package/dist/services/rudder-plugins.js +57 -100
- package/dist/services/rudder-plugins.js.map +1 -1
- package/dist/services/rudder-plugins.test.js +52 -17
- package/dist/services/rudder-plugins.test.js.map +1 -1
- package/dist/services/run-intelligence.d.ts +1 -0
- package/dist/services/run-intelligence.d.ts.map +1 -1
- package/dist/services/run-intelligence.js +1 -1
- package/dist/services/run-intelligence.js.map +1 -1
- package/dist/services/run-log-store.d.ts +1 -0
- package/dist/services/run-log-store.d.ts.map +1 -1
- package/dist/services/run-log-store.js +123 -4
- package/dist/services/run-log-store.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.d.ts +1 -0
- package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.js +11 -0
- package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.d.ts +1 -0
- package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.js +3 -33
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts +1 -0
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.js +23 -0
- package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
- package/dist/services/runtime-kernel/model-fallback.d.ts.map +1 -1
- package/dist/services/runtime-kernel/model-fallback.js +56 -11
- package/dist/services/runtime-kernel/model-fallback.js.map +1 -1
- package/dist/services/workspace-backup-v2.d.ts +1 -0
- package/dist/services/workspace-backup-v2.d.ts.map +1 -1
- package/dist/services/workspace-backup-v2.js +16 -0
- package/dist/services/workspace-backup-v2.js.map +1 -1
- package/dist/services/workspace-backups.d.ts.map +1 -1
- package/dist/services/workspace-backups.js +4 -2
- package/dist/services/workspace-backups.js.map +1 -1
- package/dist/services/workspace-files-native.d.ts +16 -0
- package/dist/services/workspace-files-native.d.ts.map +1 -0
- package/dist/services/workspace-files-native.js +212 -0
- package/dist/services/workspace-files-native.js.map +1 -0
- package/dist/services/workspace-manifest-native.d.ts +1 -1
- package/dist/services/workspace-manifest-native.d.ts.map +1 -1
- package/dist/services/workspace-manifest-native.js +49 -6
- package/dist/services/workspace-manifest-native.js.map +1 -1
- package/dist/services/workspace-runtime.helpers.d.ts.map +1 -1
- package/dist/services/workspace-runtime.helpers.js +13 -11
- package/dist/services/workspace-runtime.helpers.js.map +1 -1
- package/package.json +14 -14
- package/resources/bundled-skills/rudder-docs/SKILL.md +12 -12
- package/resources/bundled-skills/rudder-docs/references/source-map.md +7 -31
- package/skills/rudder-docs/SKILL.md +12 -12
- package/skills/rudder-docs/references/source-map.md +7 -31
- package/ui-dist/assets/{LibraryLiveSurface-DnY0wZep.js → LibraryLiveSurface-D-6Puw4N.js} +1 -1
- package/ui-dist/assets/{abnfDiagram-VRR7QNED-CT-9m1Vc.js → abnfDiagram-VRR7QNED-DjgQ9iD_.js} +1 -1
- package/ui-dist/assets/{addon-fit-C6aMSfRz.js → addon-fit-OOCvZY14.js} +1 -1
- package/ui-dist/assets/{arc-1nExaM-y.js → arc-D6yqUjH4.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-bILoPPs5.js → architectureDiagram-ZJ3FMSHR-eF-Es2a-.js} +1 -1
- package/ui-dist/assets/{blockDiagram-677ZJIJ3--zRFciqi.js → blockDiagram-677ZJIJ3-B7G2uxR7.js} +1 -1
- package/ui-dist/assets/{c4Diagram-LMCZKHZV-CrtaX6A_.js → c4Diagram-LMCZKHZV-YhY4bz85.js} +1 -1
- package/ui-dist/assets/channel-DISxdJMI.js +1 -0
- package/ui-dist/assets/{chunk-2Q5K7J3B-DoBb7ZYS.js → chunk-2Q5K7J3B-D7QxbIUK.js} +1 -1
- package/ui-dist/assets/{chunk-32BRIVSS-DilGswdp.js → chunk-32BRIVSS-CArPDsLy.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-D8q00d1k.js → chunk-5VM5RSS4-ByyAjdOI.js} +1 -1
- package/ui-dist/assets/{chunk-EX3LRPZG-Bl1KSAwQ.js → chunk-EX3LRPZG-B6Z9cEKa.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-DtdgLB7Y.js → chunk-JWPE2WC7-L5jYy4CI.js} +1 -1
- package/ui-dist/assets/{chunk-MOJQB5TN-UaG7L1QI.js → chunk-MOJQB5TN-BBTZZsOQ.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-mkz9qbQF.js → chunk-RYQCIY6F-DyV9CaPT.js} +1 -1
- package/ui-dist/assets/{chunk-V7JOEXUC-FGET6Myl.js → chunk-V7JOEXUC-CNztgBrF.js} +1 -1
- package/ui-dist/assets/{chunk-VR4S4FIN-BgfUmupS.js → chunk-VR4S4FIN-Bv62Xmto.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-B6I-gBFN.js → chunk-XXDRQBXY-B5AzJDaz.js} +1 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-BssC8UiF.js +1 -0
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-BssC8UiF.js +1 -0
- package/ui-dist/assets/{cose-bilkent-JH36ORCC-DVGWBjbO.js → cose-bilkent-JH36ORCC-DrzyjyO_.js} +1 -1
- package/ui-dist/assets/{cynefin-VYW2F7L2-CWjLXAiA.js → cynefin-VYW2F7L2-ChoChVKW.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-DWY5Jowv.js → cynefinDiagram-TSTJHNR4-Fv4ecj_f.js} +1 -1
- package/ui-dist/assets/{dagre-VKFMJZFB-Bp0SVTqP.js → dagre-VKFMJZFB-Zd466k0O.js} +1 -1
- package/ui-dist/assets/{diagram-FQU43EPY-EhsLuQCs.js → diagram-FQU43EPY-BgL3Uu7z.js} +1 -1
- package/ui-dist/assets/{diagram-G47NLZAW-C_ifHw4Q.js → diagram-G47NLZAW-Bcbg2TZF.js} +1 -1
- package/ui-dist/assets/{diagram-NH7WQ7WH-BCitqFNA.js → diagram-NH7WQ7WH-YS4gl6dx.js} +1 -1
- package/ui-dist/assets/{diagram-OA4YK3LP-BRjomHnO.js → diagram-OA4YK3LP-C-A8A6Xi.js} +1 -1
- package/ui-dist/assets/{diagram-WEI45ONY-Cr_E92JE.js → diagram-WEI45ONY-mqkaxwes.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-0WJQMwqt.js → ebnfDiagram-CCIWWBDH-CvH1cI4K.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q63AITRT-B0EBivSu.js → erDiagram-Q63AITRT-Duhw1MUB.js} +1 -1
- package/ui-dist/assets/{flowDiagram-23GEKE2U-BwdRtCsd.js → flowDiagram-23GEKE2U-DUkAECUs.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-NO4QXBWP-KxlqXAqZ.js → ganttDiagram-NO4QXBWP-B3cINaqn.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-DeTCa-SS.js → gitGraphDiagram-IHSO6WYX-BMEHvYy5.js} +1 -1
- package/ui-dist/assets/{graph-rdRwl3us.js → graph-B1-dUGRC.js} +1 -1
- package/ui-dist/assets/{index-B2jHUYti.js → index-BFmYzGL9.js} +1 -1
- package/ui-dist/assets/{index-DBPJ49Cn.js → index-BGAEBJze.js} +1 -1
- package/ui-dist/assets/{index-NxbW73mN.js → index-BMfPEMCH.js} +1 -1
- package/ui-dist/assets/{index-CcLF8pix.js → index-BglV2AAc.js} +1 -1
- package/ui-dist/assets/{index-BzLCEJCf.js → index-Blix7pGb.js} +1 -1
- package/ui-dist/assets/{index-D5pdKmHf.js → index-CBrXXiQ_.js} +1 -1
- package/ui-dist/assets/{index-7Mb8iY3g.js → index-CSMCUMYP.js} +1 -1
- package/ui-dist/assets/index-CUW-AUBO.css +32 -0
- package/ui-dist/assets/{index-D3RtGD1i.js → index-CaveK_TY.js} +1 -1
- package/ui-dist/assets/{index-CtFA44ZZ.js → index-DHcvu8nk.js} +1 -1
- package/ui-dist/assets/{index-CuP2P51w.js → index-DSz4Tjbh.js} +1 -1
- package/ui-dist/assets/{index-Bi7KPtJ3.js → index-DgNZ8Oto.js} +1 -1
- package/ui-dist/assets/{index-C2DKaTLo.js → index-Drmy6GaQ.js} +1 -1
- package/ui-dist/assets/{index-CbEMZXO1.js → index-DvrowL98.js} +1 -1
- package/ui-dist/assets/{index-CY1CWc3h.js → index-DxHCQu-4.js} +1 -1
- package/ui-dist/assets/{index-s8ZAOPE2.js → index-IJhIHwGp.js} +641 -641
- package/ui-dist/assets/{infoDiagram-FWYZ7A6U-Cun6yrS9.js → infoDiagram-FWYZ7A6U-BJ7smuOx.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-SHuCvm_3.js → ishikawaDiagram-FXEZZL3T-Bn7jPYRy.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-5HDEW3XC-B2oa-ovF.js → journeyDiagram-5HDEW3XC-D5NYECBN.js} +1 -1
- package/ui-dist/assets/{kanban-definition-HUTT4EX6-DtG3RFW0.js → kanban-definition-HUTT4EX6-CcrYvDYt.js} +1 -1
- package/ui-dist/assets/{layout-DmSY_WKW.js → layout-32M7EWAw.js} +1 -1
- package/ui-dist/assets/{linear-BiklTv-9.js → linear-DT9kJUfH.js} +1 -1
- package/ui-dist/assets/{map-B3RAMPoy.js → map-C2crE4Bv.js} +1 -1
- package/ui-dist/assets/{mermaid.core-CQj0CvWy.js → mermaid.core-B9y8ebhy.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-LN4V7U3C-BQrncLdk.js → mindmap-definition-LN4V7U3C-CaFsY4LT.js} +1 -1
- package/ui-dist/assets/{pegDiagram-2B236MQR-BmkmBhyS.js → pegDiagram-2B236MQR-BMTtqHzV.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ENE6RG2P-B0dWJser.js → pieDiagram-ENE6RG2P-DRl32AMI.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-RS2o06NX.js → quadrantDiagram-ABIIQ3AL-pXeC4qE5.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-RFXS5EU6-B4dlWUnB.js → railroadDiagram-RFXS5EU6-tGzWZNPI.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-TGXJPOKE-7M1vICZA.js → requirementDiagram-TGXJPOKE-DEqEN1a0.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-LUpZrugG.js → sankeyDiagram-HTMAVEWB-DjVDCNO4.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-DB4ecUEg.js → sequenceDiagram-DBY2YBRQ-CRKMhKhd.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-CgLQGkEa.js → sizeCapture-X5ZJPWSS-CWl0gYed.js} +1 -1
- package/ui-dist/assets/{stateDiagram-2N3HPSRC-BxLcsZg0.js → stateDiagram-2N3HPSRC-BH6FVEBD.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-DFWkP3y3.js +1 -0
- package/ui-dist/assets/{swimlanes-5IMT3BWC-CFoyzQNM.js → swimlanes-5IMT3BWC-BZdn1cQ5.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-BwA91U1K.js +8 -0
- package/ui-dist/assets/{timeline-definition-FHXFAJF6-C1vajCzY.js → timeline-definition-FHXFAJF6-CMofE9DN.js} +1 -1
- package/ui-dist/assets/{vennDiagram-L72KCM5P-C42rETOq.js → vennDiagram-L72KCM5P-CszussGd.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-EHGQE667-BgzD6-QL.js → wardleyDiagram-EHGQE667-C1Op8a5q.js} +1 -1
- package/ui-dist/assets/{xterm-BeBaISmm.js → xterm-BM41mI-I.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-FW5EYKEG-BdoJT_55.js → xychartDiagram-FW5EYKEG-zi-IHNrX.js} +1 -1
- package/ui-dist/index.html +11 -7
- package/ui-dist/assets/channel-C3jj6nd_.js +0 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-CNsW5NoJ.js +0 -1
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-CNsW5NoJ.js +0 -1
- package/ui-dist/assets/index-CYaeM_68.css +0 -32
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-DAlIlXqa.js +0 -1
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-DXfnihCA.js +0 -8
package/dist/services/issues.js
CHANGED
|
@@ -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 =
|
|
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
|
|
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) =>
|
|
1344
|
-
|
|
1345
|
-
|
|
1346
|
-
|
|
1347
|
-
|
|
1348
|
-
|
|
1349
|
-
|
|
1350
|
-
|
|
1351
|
-
|
|
1352
|
-
|
|
1353
|
-
|
|
1354
|
-
|
|
1355
|
-
|
|
1356
|
-
|
|
1357
|
-
|
|
1358
|
-
|
|
1359
|
-
|
|
1360
|
-
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1369
|
-
|
|
1370
|
-
|
|
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
|
-
|
|
1385
|
-
|
|
1386
|
-
|
|
1387
|
-
insertIndex =
|
|
1388
|
-
|
|
1389
|
-
|
|
1390
|
-
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1394
|
-
|
|
1395
|
-
|
|
1396
|
-
|
|
1397
|
-
|
|
1398
|
-
|
|
1399
|
-
|
|
1400
|
-
|
|
1401
|
-
|
|
1402
|
-
|
|
1403
|
-
|
|
1404
|
-
|
|
1405
|
-
|
|
1406
|
-
|
|
1407
|
-
|
|
1408
|
-
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1412
|
-
|
|
1413
|
-
|
|
1414
|
-
|
|
1415
|
-
|
|
1416
|
-
|
|
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
|
-
|
|
1491
|
+
if (row.boardOrder === nextOrder)
|
|
1492
|
+
continue;
|
|
1493
|
+
await tx
|
|
1420
1494
|
.update(issues)
|
|
1421
|
-
.set(
|
|
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 (
|
|
1428
|
-
|
|
1429
|
-
await tx
|
|
1430
|
-
|
|
1431
|
-
|
|
1432
|
-
|
|
1433
|
-
|
|
1434
|
-
|
|
1435
|
-
|
|
1436
|
-
|
|
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
|