@rudderhq/server 0.7.12 → 0.7.14
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/bootstrap/types.d.ts +5 -0
- package/dist/bootstrap/types.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/routes/agents.management-routes.d.ts.map +1 -1
- package/dist/routes/agents.management-routes.js +15 -9
- package/dist/routes/agents.management-routes.js.map +1 -1
- package/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.js +57 -14
- package/dist/routes/chats.js.map +1 -1
- package/dist/routes/goals.d.ts.map +1 -1
- package/dist/routes/goals.js +24 -0
- package/dist/routes/goals.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +4 -5
- package/dist/routes/issues.js.map +1 -1
- package/dist/routes/run-intelligence.d.ts.map +1 -1
- package/dist/routes/run-intelligence.js +1 -0
- package/dist/routes/run-intelligence.js.map +1 -1
- package/dist/services/agent-issue-creation.d.ts +1 -1
- package/dist/services/agent-run-context.d.ts +1 -1
- package/dist/services/agent-run-context.d.ts.map +1 -1
- package/dist/services/agent-run-context.js +6 -12
- package/dist/services/agent-run-context.js.map +1 -1
- package/dist/services/agent-startup-context.d.ts.map +1 -1
- package/dist/services/agent-startup-context.js +7 -6
- package/dist/services/agent-startup-context.js.map +1 -1
- package/dist/services/agents.d.ts +35 -0
- package/dist/services/agents.d.ts.map +1 -1
- package/dist/services/automations.js +2 -2
- package/dist/services/automations.js.map +1 -1
- package/dist/services/chat-agent-runs.d.ts +1 -0
- package/dist/services/chat-agent-runs.d.ts.map +1 -1
- package/dist/services/chat-agent-runs.js +16 -2
- package/dist/services/chat-agent-runs.js.map +1 -1
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.d.ts +2 -2
- package/dist/services/chat-assistant.helpers.d.ts.map +1 -1
- package/dist/services/chat-assistant.helpers.js +3 -0
- package/dist/services/chat-assistant.helpers.js.map +1 -1
- package/dist/services/chat-assistant.js +5 -1
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chats.d.ts +2 -1
- package/dist/services/chats.d.ts.map +1 -1
- package/dist/services/chats.js +2 -2
- package/dist/services/chats.js.map +1 -1
- package/dist/services/finance.d.ts +1 -1
- package/dist/services/goals.d.ts +11 -7
- package/dist/services/goals.d.ts.map +1 -1
- package/dist/services/goals.js +54 -33
- package/dist/services/goals.js.map +1 -1
- package/dist/services/issue-assignment-wakeup.d.ts +1 -0
- package/dist/services/issue-assignment-wakeup.d.ts.map +1 -1
- package/dist/services/issue-assignment-wakeup.js +2 -0
- package/dist/services/issue-assignment-wakeup.js.map +1 -1
- package/dist/services/issues.d.ts +6 -3
- package/dist/services/issues.d.ts.map +1 -1
- package/dist/services/issues.js +134 -5
- package/dist/services/issues.js.map +1 -1
- package/dist/services/knowledge-portability/organization-portability.js +1 -1
- package/dist/services/knowledge-portability/organization-portability.js.map +1 -1
- package/dist/services/projects.d.ts +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 +6 -0
- package/dist/services/run-intelligence.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.d.ts +19 -1
- package/dist/services/runtime-kernel/heartbeat.core.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.core.js +53 -4
- package/dist/services/runtime-kernel/heartbeat.core.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.d.ts +9 -0
- package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.js +17 -0
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.js +17 -1
- package/dist/services/runtime-kernel/heartbeat.recovery.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.release.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.release.js +1 -0
- package/dist/services/runtime-kernel/heartbeat.release.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.sessions.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.sessions.js +10 -2
- package/dist/services/runtime-kernel/heartbeat.sessions.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.terminal.d.ts +8 -0
- package/dist/services/runtime-kernel/heartbeat.terminal.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.wakeup.js +28 -0
- package/dist/services/runtime-kernel/heartbeat.wakeup.js.map +1 -1
- package/package.json +14 -14
- package/resources/bundled-skills/rudder-docs/references/agent-creation.md +5 -2
- package/resources/bundled-skills/rudder-docs/references/api-reference.md +6 -4
- package/resources/bundled-skills/rudder-docs/references/cli-reference.md +1 -1
- package/skills/rudder-docs/references/agent-creation.md +5 -2
- package/skills/rudder-docs/references/api-reference.md +6 -4
- package/skills/rudder-docs/references/cli-reference.md +1 -1
- package/ui-dist/assets/{LibraryLiveSurface-tCWxJKp5.js → LibraryLiveSurface-Dl_mRBqL.js} +1 -1
- package/ui-dist/assets/{abnfDiagram-VRR7QNED-BcCms-hs.js → abnfDiagram-VRR7QNED-4MIrDcN0.js} +1 -1
- package/ui-dist/assets/{addon-fit-CH3xNHN4.js → addon-fit-DaLbwAfQ.js} +1 -1
- package/ui-dist/assets/{arc-h5W-EkRK.js → arc-DrbWjUWY.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-ZJ3FMSHR-Bdehm1PB.js → architectureDiagram-ZJ3FMSHR-Bt-JYYfG.js} +1 -1
- package/ui-dist/assets/{blockDiagram-677ZJIJ3-BJ3W91Su.js → blockDiagram-677ZJIJ3-OXUbGv47.js} +1 -1
- package/ui-dist/assets/{c4Diagram-LMCZKHZV-Bnft_fRy.js → c4Diagram-LMCZKHZV-C_EcNhSw.js} +1 -1
- package/ui-dist/assets/channel-DL45J6-6.js +1 -0
- package/ui-dist/assets/{chunk-2Q5K7J3B-w1SF0tSk.js → chunk-2Q5K7J3B-DY-Rya7u.js} +1 -1
- package/ui-dist/assets/{chunk-32BRIVSS-C1UzXTFZ.js → chunk-32BRIVSS-CTrRcC7g.js} +1 -1
- package/ui-dist/assets/{chunk-5VM5RSS4-COVI3rNd.js → chunk-5VM5RSS4-CFfB2lwI.js} +1 -1
- package/ui-dist/assets/{chunk-EX3LRPZG-DxQOLy7z.js → chunk-EX3LRPZG-C0nNM3QW.js} +1 -1
- package/ui-dist/assets/{chunk-JWPE2WC7-KTwmElcL.js → chunk-JWPE2WC7-Bzqz4lCp.js} +1 -1
- package/ui-dist/assets/{chunk-MOJQB5TN-BynL4lzA.js → chunk-MOJQB5TN-B7JFd8bM.js} +1 -1
- package/ui-dist/assets/{chunk-RYQCIY6F-CJksBfuJ.js → chunk-RYQCIY6F-a5E8W5cO.js} +1 -1
- package/ui-dist/assets/{chunk-V7JOEXUC-C_zED5WJ.js → chunk-V7JOEXUC-lhKPx7D_.js} +1 -1
- package/ui-dist/assets/{chunk-VR4S4FIN-BHDtMeiT.js → chunk-VR4S4FIN-bZBK3VoP.js} +1 -1
- package/ui-dist/assets/{chunk-XXDRQBXY-C0VvJgte.js → chunk-XXDRQBXY-Di3ho8vJ.js} +1 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-DuHN7Tz9.js +1 -0
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-DuHN7Tz9.js +1 -0
- package/ui-dist/assets/{cose-bilkent-JH36ORCC-DsTTzpP7.js → cose-bilkent-JH36ORCC-CGSlPnRr.js} +1 -1
- package/ui-dist/assets/{cynefin-VYW2F7L2-BfULw90s.js → cynefin-VYW2F7L2-BfELv7kL.js} +1 -1
- package/ui-dist/assets/{cynefinDiagram-TSTJHNR4-BukSzKVC.js → cynefinDiagram-TSTJHNR4-iMVux7wr.js} +1 -1
- package/ui-dist/assets/{dagre-VKFMJZFB-BbZY_Ipf.js → dagre-VKFMJZFB-imUTNZ-g.js} +1 -1
- package/ui-dist/assets/{diagram-FQU43EPY-BTYIYn2p.js → diagram-FQU43EPY-i0bYfkK2.js} +1 -1
- package/ui-dist/assets/{diagram-G47NLZAW-CikY_FKi.js → diagram-G47NLZAW-CN7P8lGu.js} +1 -1
- package/ui-dist/assets/{diagram-NH7WQ7WH-BfZ7AlT8.js → diagram-NH7WQ7WH-BJ4dmUnA.js} +1 -1
- package/ui-dist/assets/{diagram-OA4YK3LP-f5AikxJj.js → diagram-OA4YK3LP-DDWgQGqt.js} +1 -1
- package/ui-dist/assets/{diagram-WEI45ONY-BCbG5yas.js → diagram-WEI45ONY-3At0yiVq.js} +1 -1
- package/ui-dist/assets/{ebnfDiagram-CCIWWBDH-DT-3mJLY.js → ebnfDiagram-CCIWWBDH-Dk6Q1_n0.js} +1 -1
- package/ui-dist/assets/{erDiagram-Q63AITRT-BsfOhDfe.js → erDiagram-Q63AITRT-DIQXCD2C.js} +1 -1
- package/ui-dist/assets/{flowDiagram-23GEKE2U-BfaeQCsg.js → flowDiagram-23GEKE2U-D19_Ed2R.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-NO4QXBWP-CgPQruVz.js → ganttDiagram-NO4QXBWP-JdDX_faf.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-IHSO6WYX-CNrBFzjY.js → gitGraphDiagram-IHSO6WYX-D1H6mGeL.js} +1 -1
- package/ui-dist/assets/{graph-QqDTzUUJ.js → graph-BG22o1KD.js} +1 -1
- package/ui-dist/assets/{index-Dc_DUpPj.js → index-BDNVVxYy.js} +1 -1
- package/ui-dist/assets/{index-BAt16m_U.js → index-BRGW3KLv.js} +1 -1
- package/ui-dist/assets/{index-sFJMMyA3.js → index-BxHKdZbS.js} +1 -1
- package/ui-dist/assets/{index-DZ4gAeDM.js → index-C0wGrz8h.js} +1 -1
- package/ui-dist/assets/{index-2cYcOpZB.js → index-CVu9lnBy.js} +1 -1
- package/ui-dist/assets/{index-BY8xCKIE.js → index-CqaANx_i.js} +1 -1
- package/ui-dist/assets/{index-CQ92CxVC.js → index-CwdDPdqf.js} +1 -1
- package/ui-dist/assets/{index-CQFwlD-o.js → index-D3lUbbsS.js} +1 -1
- package/ui-dist/assets/{index-Befy20DN.js → index-DDIA_6o8.js} +1 -1
- package/ui-dist/assets/{index-BuIyK71w.js → index-DL6O5Ix-.js} +553 -554
- package/ui-dist/assets/{index-2ZQZC89T.js → index-DXA-HNO5.js} +1 -1
- package/ui-dist/assets/{index-Dqv46mWS.js → index-KZiKwV4T.js} +1 -1
- package/ui-dist/assets/{index-BogOyxlk.js → index-MrGb7TRh.js} +1 -1
- package/ui-dist/assets/{index-BfAP3xNl.js → index-inavbYTa.js} +1 -1
- package/ui-dist/assets/index-rHP5bnon.css +32 -0
- package/ui-dist/assets/{index-Cu4qo_D7.js → index-uHZfZjdL.js} +1 -1
- package/ui-dist/assets/{infoDiagram-FWYZ7A6U-BJHuaNA9.js → infoDiagram-FWYZ7A6U-CVUn5UCu.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-FXEZZL3T-CmsA1Knp.js → ishikawaDiagram-FXEZZL3T-5BbuWr6T.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-5HDEW3XC-iV_Nt9d4.js → journeyDiagram-5HDEW3XC-DoCwetKy.js} +1 -1
- package/ui-dist/assets/{kanban-definition-HUTT4EX6-D45s70Ny.js → kanban-definition-HUTT4EX6-BNDYA9Vo.js} +1 -1
- package/ui-dist/assets/{layout-DDC-iOzY.js → layout-DUhTcIiA.js} +1 -1
- package/ui-dist/assets/{linear-DCTJ7Pq3.js → linear-CCEHbSzg.js} +1 -1
- package/ui-dist/assets/{map-RGy5k616.js → map-C8V41jZb.js} +1 -1
- package/ui-dist/assets/{mermaid.core-6MH04cvi.js → mermaid.core-UAa_NJSl.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-LN4V7U3C-CA2LFmda.js → mindmap-definition-LN4V7U3C-C_ygOwPG.js} +1 -1
- package/ui-dist/assets/{pegDiagram-2B236MQR-DDsUr2du.js → pegDiagram-2B236MQR-Dz0Nw1iK.js} +1 -1
- package/ui-dist/assets/{pieDiagram-ENE6RG2P-D7jEL8xK.js → pieDiagram-ENE6RG2P-DSn9W4hM.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-ABIIQ3AL-BsJxgVLb.js → quadrantDiagram-ABIIQ3AL-D6cn2p2u.js} +1 -1
- package/ui-dist/assets/{railroadDiagram-RFXS5EU6-CBI457f6.js → railroadDiagram-RFXS5EU6-DkQOZUbI.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-TGXJPOKE-_GAc0NOO.js → requirementDiagram-TGXJPOKE-CVxaeOzG.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-HTMAVEWB-DNIaj5hu.js → sankeyDiagram-HTMAVEWB-DsCkJ9Sr.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-DBY2YBRQ-BHDZs2dc.js → sequenceDiagram-DBY2YBRQ-DSVgeeYC.js} +1 -1
- package/ui-dist/assets/{sizeCapture-X5ZJPWSS-DwKT6aTP.js → sizeCapture-X5ZJPWSS-jYNNSFFN.js} +1 -1
- package/ui-dist/assets/{stateDiagram-2N3HPSRC-D2hDsltG.js → stateDiagram-2N3HPSRC-HMmvTfZO.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-Ij5NPf9Z.js +1 -0
- package/ui-dist/assets/{swimlanes-5IMT3BWC-BV8xA0iq.js → swimlanes-5IMT3BWC-B7lpTS-P.js} +2 -2
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-VbzuYi16.js +8 -0
- package/ui-dist/assets/{timeline-definition-FHXFAJF6-BPJMubhV.js → timeline-definition-FHXFAJF6-CfjkTbE1.js} +1 -1
- package/ui-dist/assets/{vennDiagram-L72KCM5P-CY76J0Px.js → vennDiagram-L72KCM5P-gK5ZOhfi.js} +1 -1
- package/ui-dist/assets/{wardleyDiagram-EHGQE667-pmNWLdE_.js → wardleyDiagram-EHGQE667-ClAgPp4O.js} +1 -1
- package/ui-dist/assets/{xterm-UByodpzD.js → xterm-CI3dnrG9.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-FW5EYKEG-BWZC7gWV.js → xychartDiagram-FW5EYKEG-CMu8n5xR.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/channel-G6qIOCiV.js +0 -1
- package/ui-dist/assets/classDiagram-OUVF2IWQ-D15_PFCL.js +0 -1
- package/ui-dist/assets/classDiagram-v2-EOCWNBFH-D15_PFCL.js +0 -1
- package/ui-dist/assets/index-DRuC5g8V.css +0 -32
- package/ui-dist/assets/stateDiagram-v2-6OUMAXLB-CMTeJdkk.js +0 -1
- package/ui-dist/assets/swimlanesDiagram-G3AALYLV-ChF8QLeM.js +0 -8
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-assignment-wakeup.d.ts","sourceRoot":"","sources":["../../src/services/issue-assignment-wakeup.ts"],"names":[],"mappings":"AAGA,KAAK,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AACrE,KAAK,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAEnF,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,CACN,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,aAAa,CAAC,EAAE,mBAAmB,CAAC;QACpC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACzC,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;QACnD,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3C,KACE,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;
|
|
1
|
+
{"version":3,"file":"issue-assignment-wakeup.d.ts","sourceRoot":"","sources":["../../src/services/issue-assignment-wakeup.ts"],"names":[],"mappings":"AAGA,KAAK,mBAAmB,GAAG,QAAQ,GAAG,MAAM,GAAG,UAAU,GAAG,QAAQ,CAAC;AACrE,KAAK,YAAY,GAAG,OAAO,GAAG,YAAY,GAAG,QAAQ,GAAG,WAAW,GAAG,YAAY,CAAC;AAEnF,MAAM,WAAW,yBAAyB;IACxC,MAAM,EAAE,CACN,OAAO,EAAE,MAAM,EACf,IAAI,EAAE;QACJ,MAAM,CAAC,EAAE,YAAY,CAAC;QACtB,aAAa,CAAC,EAAE,mBAAmB,CAAC;QACpC,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;QACzC,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;QACnD,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACnC,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;KAC3C,KACE,OAAO,CAAC,OAAO,CAAC,CAAC;CACvB;AAmCD,wBAAgB,0BAA0B,CAAC,KAAK,EAAE;IAChD,SAAS,EAAE,yBAAyB,CAAC;IACrC,KAAK,EAAE;QACL,EAAE,EAAE,MAAM,CAAC;QACX,MAAM,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QACvB,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;QAC/B,MAAM,EAAE,MAAM,CAAC;QACf,KAAK,EAAE,MAAM,CAAC;QACd,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;KAC1B,CAAC;IACF,MAAM,EAAE,MAAM,CAAC;IACf,QAAQ,EAAE,MAAM,CAAC;IACjB,aAAa,EAAE,MAAM,CAAC;IACtB,oBAAoB,CAAC,EAAE,MAAM,GAAG,OAAO,GAAG,QAAQ,CAAC;IACnD,kBAAkB,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;IACnC,cAAc,CAAC,EAAE,OAAO,CAAC;CAC1B,gCA0BA"}
|
|
@@ -3,6 +3,7 @@ import { logger } from "../middleware/logger.js";
|
|
|
3
3
|
function buildIssueContextSnapshot(issue) {
|
|
4
4
|
return {
|
|
5
5
|
id: issue.id,
|
|
6
|
+
goalId: issue.goalId ?? null,
|
|
6
7
|
title: issue.title,
|
|
7
8
|
description: issue.description,
|
|
8
9
|
status: issue.status,
|
|
@@ -26,6 +27,7 @@ export function queueIssueAssignmentWakeup(input) {
|
|
|
26
27
|
requestedByActorId: input.requestedByActorId ?? null,
|
|
27
28
|
contextSnapshot: {
|
|
28
29
|
issueId: input.issue.id,
|
|
30
|
+
goalId: input.issue.goalId ?? null,
|
|
29
31
|
source: input.contextSource,
|
|
30
32
|
wakeSource: "assignment",
|
|
31
33
|
wakeReason: input.reason,
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issue-assignment-wakeup.js","sourceRoot":"","sources":["../../src/services/issue-assignment-wakeup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;
|
|
1
|
+
{"version":3,"file":"issue-assignment-wakeup.js","sourceRoot":"","sources":["../../src/services/issue-assignment-wakeup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mCAAmC,EAAE,MAAM,iCAAiC,CAAC;AACtF,OAAO,EAAE,MAAM,EAAE,MAAM,yBAAyB,CAAC;AA8BjD,SAAS,yBAAyB,CAAC,KAOlC;IACC,OAAO;QACL,EAAE,EAAE,KAAK,CAAC,EAAE;QACZ,MAAM,EAAE,KAAK,CAAC,MAAM,IAAI,IAAI;QAC5B,KAAK,EAAE,KAAK,CAAC,KAAK;QAClB,WAAW,EAAE,KAAK,CAAC,WAAW;QAC9B,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,QAAQ,EAAE,KAAK,CAAC,QAAQ;KACzB,CAAC;AACJ,CAAC;AAED,SAAS,6BAA6B,CAAC,WAAsC;IAC3E,MAAM,QAAQ,GAAG,mCAAmC,CAAC,WAAW,CAAC,CAAC;IAClE,OAAO,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;AACjD,CAAC;AAED,MAAM,UAAU,0BAA0B,CAAC,KAiB1C;IACC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,SAAS;QAAE,OAAO;IAE7E,OAAO,KAAK,CAAC,SAAS;SACnB,MAAM,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,EAAE;QACnC,MAAM,EAAE,YAAY;QACpB,aAAa,EAAE,QAAQ;QACvB,MAAM,EAAE,KAAK,CAAC,MAAM;QACpB,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,QAAQ,EAAE,KAAK,CAAC,QAAQ,EAAE;QAC9D,oBAAoB,EAAE,KAAK,CAAC,oBAAoB;QAChD,kBAAkB,EAAE,KAAK,CAAC,kBAAkB,IAAI,IAAI;QACpD,eAAe,EAAE;YACf,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE;YACvB,MAAM,EAAE,KAAK,CAAC,KAAK,CAAC,MAAM,IAAI,IAAI;YAClC,MAAM,EAAE,KAAK,CAAC,aAAa;YAC3B,UAAU,EAAE,YAAY;YACxB,UAAU,EAAE,KAAK,CAAC,MAAM;YACxB,KAAK,EAAE,yBAAyB,CAAC,KAAK,CAAC,KAAK,CAAC;YAC7C,GAAG,6BAA6B,CAAC,KAAK,CAAC,KAAK,CAAC,WAAW,CAAC;SAC1D;KACF,CAAC;SACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;QACb,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,6CAA6C,CAAC,CAAC;QAC7F,IAAI,KAAK,CAAC,cAAc;YAAE,MAAM,GAAG,CAAC;QACpC,OAAO,IAAI,CAAC;IACd,CAAC,CAAC,CAAC;AACP,CAAC"}
|
|
@@ -9,10 +9,13 @@
|
|
|
9
9
|
import type { Db } from "@rudderhq/db";
|
|
10
10
|
import { issues, labels } from "@rudderhq/db";
|
|
11
11
|
import { type ReorderIssue } from "@rudderhq/shared";
|
|
12
|
+
import type { StorageService } from "../storage/types.js";
|
|
12
13
|
import { type IssueFilters, type IssueWithLabelsAndRun } from "./issues.helpers.js";
|
|
13
14
|
export { deriveIssueUserContext } from "./issues.helpers.js";
|
|
14
15
|
export type { IssueFilters } from "./issues.helpers.js";
|
|
15
|
-
export declare function
|
|
16
|
+
export declare function extractIssueDescriptionAssetIds(description: string | null | undefined): string[];
|
|
17
|
+
export declare function rewriteIssueDescriptionAssetPaths(description: string, replacements: ReadonlyMap<string, string>): string;
|
|
18
|
+
export declare function issueService(db: Db, storage?: StorageService): {
|
|
16
19
|
getAncestors: (issueId: string) => Promise<{
|
|
17
20
|
project: {
|
|
18
21
|
id: string;
|
|
@@ -354,10 +357,10 @@ export declare function issueService(db: Db): {
|
|
|
354
357
|
id?: string | undefined;
|
|
355
358
|
startedAt?: Date | null | undefined;
|
|
356
359
|
updatedAt?: Date | undefined;
|
|
360
|
+
goalId?: string | null | undefined;
|
|
357
361
|
description?: string | null | undefined;
|
|
358
362
|
createdAt?: Date | undefined;
|
|
359
363
|
identifier?: string | null | undefined;
|
|
360
|
-
goalId?: string | null | undefined;
|
|
361
364
|
priority?: string | undefined;
|
|
362
365
|
parentId?: string | null | undefined;
|
|
363
366
|
assigneeAgentId?: string | null | undefined;
|
|
@@ -399,10 +402,10 @@ export declare function issueService(db: Db): {
|
|
|
399
402
|
id?: string | undefined;
|
|
400
403
|
startedAt?: Date | null | undefined;
|
|
401
404
|
updatedAt?: Date | undefined;
|
|
405
|
+
goalId?: string | null | undefined;
|
|
402
406
|
description?: string | null | undefined;
|
|
403
407
|
createdAt?: Date | undefined;
|
|
404
408
|
identifier?: string | null | undefined;
|
|
405
|
-
goalId?: string | null | undefined;
|
|
406
409
|
priority?: string | undefined;
|
|
407
410
|
parentId?: string | null | undefined;
|
|
408
411
|
assigneeAgentId?: string | null | undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/services/issues.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AACH,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAcL,MAAM,EACN,MAAM,EAMP,MAAM,cAAc,CAAC;AACtB,OAAO,
|
|
1
|
+
{"version":3,"file":"issues.d.ts","sourceRoot":"","sources":["../../src/services/issues.ts"],"names":[],"mappings":"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"}
|
package/dist/services/issues.js
CHANGED
|
@@ -1,7 +1,10 @@
|
|
|
1
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
|
+
import { isUuidLike } from "@rudderhq/shared";
|
|
2
3
|
import { and, asc, desc, eq, inArray, isNull, ne, or, sql } from "drizzle-orm";
|
|
4
|
+
import { randomUUID } from "node:crypto";
|
|
3
5
|
import { conflict, notFound, unprocessable } from "../errors.js";
|
|
4
6
|
import { redactCurrentUserText } from "../log-redaction.js";
|
|
7
|
+
import { logger } from "../middleware/logger.js";
|
|
5
8
|
import { defaultIssueExecutionWorkspaceSettingsForProject, parseProjectExecutionWorkspacePolicy, } from "./execution-workspace-policy.js";
|
|
6
9
|
import { instanceSettingsService } from "./instance-settings.js";
|
|
7
10
|
import { issueMaterialUpdateActivitySql } from "./issue-activity-filters.js";
|
|
@@ -12,6 +15,96 @@ import { BOARD_ORDER_STEP, TERMINAL_HEARTBEAT_RUN_STATUSES, activeRunMapForIssue
|
|
|
12
15
|
export { deriveIssueUserContext } from "./issues.helpers.js";
|
|
13
16
|
const DEFAULT_ISSUE_SEARCH_FIELDS = ["title"];
|
|
14
17
|
const MAX_ISSUE_LIST_LIMIT = 500;
|
|
18
|
+
const ISSUE_DESCRIPTION_ASSET_PATH_RE = /\/api\/assets\/([^/?#\s)]+)\/content/g;
|
|
19
|
+
export function extractIssueDescriptionAssetIds(description) {
|
|
20
|
+
if (!description)
|
|
21
|
+
return [];
|
|
22
|
+
const ids = new Set();
|
|
23
|
+
for (const match of description.matchAll(ISSUE_DESCRIPTION_ASSET_PATH_RE)) {
|
|
24
|
+
const assetId = match[1]?.trim();
|
|
25
|
+
if (assetId && isUuidLike(assetId))
|
|
26
|
+
ids.add(assetId.toLowerCase());
|
|
27
|
+
}
|
|
28
|
+
return [...ids];
|
|
29
|
+
}
|
|
30
|
+
export function rewriteIssueDescriptionAssetPaths(description, replacements) {
|
|
31
|
+
return description.replace(ISSUE_DESCRIPTION_ASSET_PATH_RE, (full, assetId) => {
|
|
32
|
+
return replacements.get(assetId.toLowerCase()) ?? full;
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
async function readStorageObject(stream) {
|
|
36
|
+
const chunks = [];
|
|
37
|
+
for await (const chunk of stream) {
|
|
38
|
+
chunks.push(Buffer.isBuffer(chunk) ? chunk : Buffer.from(chunk));
|
|
39
|
+
}
|
|
40
|
+
return Buffer.concat(chunks);
|
|
41
|
+
}
|
|
42
|
+
async function stageIssueDescriptionAssets(input) {
|
|
43
|
+
const sourceAssetIds = extractIssueDescriptionAssetIds(input.description);
|
|
44
|
+
if (sourceAssetIds.length === 0) {
|
|
45
|
+
return {
|
|
46
|
+
description: input.description,
|
|
47
|
+
attachments: [],
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
const sourceAssets = await input.tx
|
|
51
|
+
.select()
|
|
52
|
+
.from(assets)
|
|
53
|
+
.where(and(eq(assets.orgId, input.orgId), inArray(assets.id, sourceAssetIds)));
|
|
54
|
+
const sourceAssetsById = new Map(sourceAssets.map((asset) => [asset.id, asset]));
|
|
55
|
+
const replacements = new Map();
|
|
56
|
+
const attachments = [];
|
|
57
|
+
for (const sourceAssetId of sourceAssetIds) {
|
|
58
|
+
const sourceAsset = sourceAssetsById.get(sourceAssetId);
|
|
59
|
+
if (!sourceAsset) {
|
|
60
|
+
throw unprocessable("Issue description image asset is missing or outside the organization");
|
|
61
|
+
}
|
|
62
|
+
let stored;
|
|
63
|
+
try {
|
|
64
|
+
const object = await input.storage.getObject(input.orgId, sourceAsset.objectKey);
|
|
65
|
+
const body = await readStorageObject(object.stream);
|
|
66
|
+
if (body.length === 0)
|
|
67
|
+
throw new Error("Issue description image asset is empty");
|
|
68
|
+
stored = await input.storage.putFile({
|
|
69
|
+
orgId: input.orgId,
|
|
70
|
+
namespace: `issues/${input.issueId}/description`,
|
|
71
|
+
originalFilename: sourceAsset.originalFilename,
|
|
72
|
+
contentType: sourceAsset.contentType || object.contentType || "application/octet-stream",
|
|
73
|
+
body,
|
|
74
|
+
});
|
|
75
|
+
}
|
|
76
|
+
catch (error) {
|
|
77
|
+
logger.warn({ err: error, orgId: input.orgId, assetId: sourceAsset.id, issueId: input.issueId }, "failed to preserve an Issue description asset");
|
|
78
|
+
throw unprocessable("Issue description image could not be saved; please retry the Issue creation");
|
|
79
|
+
}
|
|
80
|
+
input.copiedObjectKeys.push({ orgId: input.orgId, objectKey: stored.objectKey });
|
|
81
|
+
const [copiedAsset] = await input.tx
|
|
82
|
+
.insert(assets)
|
|
83
|
+
.values({
|
|
84
|
+
orgId: input.orgId,
|
|
85
|
+
provider: stored.provider,
|
|
86
|
+
objectKey: stored.objectKey,
|
|
87
|
+
contentType: stored.contentType,
|
|
88
|
+
byteSize: stored.byteSize,
|
|
89
|
+
sha256: stored.sha256,
|
|
90
|
+
originalFilename: stored.originalFilename,
|
|
91
|
+
createdByAgentId: input.createdByAgentId ?? null,
|
|
92
|
+
createdByUserId: input.createdByUserId ?? null,
|
|
93
|
+
})
|
|
94
|
+
.returning({ id: assets.id });
|
|
95
|
+
if (!copiedAsset)
|
|
96
|
+
throw new Error("Failed to create preserved Issue description asset");
|
|
97
|
+
const attachmentId = randomUUID();
|
|
98
|
+
attachments.push({ attachmentId, assetId: copiedAsset.id });
|
|
99
|
+
replacements.set(sourceAsset.id, `/api/attachments/${attachmentId}/content`);
|
|
100
|
+
}
|
|
101
|
+
return {
|
|
102
|
+
description: typeof input.description === "string"
|
|
103
|
+
? rewriteIssueDescriptionAssetPaths(input.description, replacements)
|
|
104
|
+
: input.description,
|
|
105
|
+
attachments,
|
|
106
|
+
};
|
|
107
|
+
}
|
|
15
108
|
function normalizeIssueSearchFields(fields) {
|
|
16
109
|
const allowed = new Set(["title", "description", "comment"]);
|
|
17
110
|
const normalized = (fields ?? DEFAULT_ISSUE_SEARCH_FIELDS).filter((field) => allowed.has(field));
|
|
@@ -33,7 +126,7 @@ function normalizeIssueListOffset(offset) {
|
|
|
33
126
|
return undefined;
|
|
34
127
|
return normalized;
|
|
35
128
|
}
|
|
36
|
-
export function issueService(db) {
|
|
129
|
+
export function issueService(db, storage) {
|
|
37
130
|
const instanceSettings = instanceSettingsService(db);
|
|
38
131
|
const issueCreateResults = new WeakMap();
|
|
39
132
|
let createIssue;
|
|
@@ -785,8 +878,9 @@ export function issueService(db) {
|
|
|
785
878
|
if (data.status === "in_progress" && !data.assigneeAgentId && !data.assigneeUserId) {
|
|
786
879
|
throw unprocessable("in_progress issues require an assignee");
|
|
787
880
|
}
|
|
881
|
+
const copiedObjectKeys = [];
|
|
788
882
|
try {
|
|
789
|
-
|
|
883
|
+
const createdIssue = await db.transaction(async (tx) => {
|
|
790
884
|
let executionWorkspaceSettings = issueData.executionWorkspaceSettings ?? null;
|
|
791
885
|
if (executionWorkspaceSettings == null && issueData.projectId) {
|
|
792
886
|
const project = await tx
|
|
@@ -827,8 +921,27 @@ export function issueService(db) {
|
|
|
827
921
|
.returning({ issueCounter: organizations.issueCounter, issuePrefix: organizations.issuePrefix });
|
|
828
922
|
const issueNumber = organization.issueCounter;
|
|
829
923
|
const identifier = `${organization.issuePrefix}-${issueNumber}`;
|
|
924
|
+
const issueId = issueData.id ?? randomUUID();
|
|
925
|
+
const sourceAssetIds = extractIssueDescriptionAssetIds(issueData.description);
|
|
926
|
+
if (sourceAssetIds.length > 0 && !storage) {
|
|
927
|
+
throw unprocessable("Issue description image storage is unavailable; please retry the Issue creation");
|
|
928
|
+
}
|
|
929
|
+
const stagedDescriptionAssets = storage
|
|
930
|
+
? await stageIssueDescriptionAssets({
|
|
931
|
+
tx,
|
|
932
|
+
storage,
|
|
933
|
+
orgId,
|
|
934
|
+
issueId,
|
|
935
|
+
description: issueData.description,
|
|
936
|
+
copiedObjectKeys,
|
|
937
|
+
createdByAgentId: issueData.createdByAgentId,
|
|
938
|
+
createdByUserId: issueData.createdByUserId,
|
|
939
|
+
})
|
|
940
|
+
: null;
|
|
830
941
|
const values = {
|
|
831
942
|
...issueData,
|
|
943
|
+
id: issueId,
|
|
944
|
+
...(stagedDescriptionAssets ? { description: stagedDescriptionAssets.description } : {}),
|
|
832
945
|
originKind: issueData.originKind ?? "manual",
|
|
833
946
|
goalId: issueData.goalId ?? null,
|
|
834
947
|
...(projectWorkspaceId ? { projectWorkspaceId } : {}),
|
|
@@ -857,6 +970,15 @@ export function issueService(db) {
|
|
|
857
970
|
}
|
|
858
971
|
const resolvedLabelIds = await resolveCreateLabelIds(orgId, issueData, inputLabelIds, tx);
|
|
859
972
|
const [issue] = await tx.insert(issues).values(values).returning();
|
|
973
|
+
if (stagedDescriptionAssets && stagedDescriptionAssets.attachments.length > 0) {
|
|
974
|
+
await tx.insert(issueAttachments).values(stagedDescriptionAssets.attachments.map((attachment) => ({
|
|
975
|
+
id: attachment.attachmentId,
|
|
976
|
+
orgId,
|
|
977
|
+
issueId: issue.id,
|
|
978
|
+
assetId: attachment.assetId,
|
|
979
|
+
usage: "description_inline",
|
|
980
|
+
})));
|
|
981
|
+
}
|
|
860
982
|
if (resolvedLabelIds) {
|
|
861
983
|
await syncIssueLabels(issue.id, orgId, resolvedLabelIds, tx);
|
|
862
984
|
}
|
|
@@ -924,8 +1046,15 @@ export function issueService(db) {
|
|
|
924
1046
|
const [enriched] = await withIssueLabels(tx, [issue]);
|
|
925
1047
|
return rememberIssueCreateResult(enriched, true);
|
|
926
1048
|
});
|
|
1049
|
+
copiedObjectKeys.length = 0;
|
|
1050
|
+
return createdIssue;
|
|
927
1051
|
}
|
|
928
1052
|
catch (error) {
|
|
1053
|
+
if (storage) {
|
|
1054
|
+
await Promise.all(copiedObjectKeys.map((object) => storage.deleteObject(object.orgId, object.objectKey).catch((cleanupError) => {
|
|
1055
|
+
logger.warn({ err: cleanupError, orgId: object.orgId, objectKey: object.objectKey }, "failed to clean up a staged Issue description asset");
|
|
1056
|
+
})));
|
|
1057
|
+
}
|
|
929
1058
|
if (!agentIssueCreationOrigin || !isUniqueConstraintConflict(error, "issues_agent_issue_creation_origin_uq")) {
|
|
930
1059
|
throw error;
|
|
931
1060
|
}
|
|
@@ -995,9 +1124,9 @@ export function issueService(db) {
|
|
|
995
1124
|
const relationshipCondition = authorization
|
|
996
1125
|
? authorization.relationship === "reviewer"
|
|
997
1126
|
? eq(issues.reviewerAgentId, authorization.agentId)
|
|
998
|
-
: or(eq(issues.reviewerAgentId, authorization.agentId), and(eq(issues.assigneeAgentId, authorization.agentId), or(ne(issues.status, "in_progress"), authorization.runId
|
|
999
|
-
?
|
|
1000
|
-
: sql `false`)))
|
|
1127
|
+
: or(eq(issues.reviewerAgentId, authorization.agentId), and(eq(issues.assigneeAgentId, authorization.agentId), or(ne(issues.status, "in_progress"), and(eq(issues.status, "in_progress"), or(isNull(issues.checkoutRunId), authorization.runId
|
|
1128
|
+
? eq(issues.checkoutRunId, authorization.runId)
|
|
1129
|
+
: sql `false`)))))
|
|
1001
1130
|
: undefined;
|
|
1002
1131
|
const authorizationCondition = relationshipCondition && authorization?.requireReviewableStatus
|
|
1003
1132
|
? and(relationshipCondition, inArray(issues.status, ["in_review", "blocked"]))
|