@rudderhq/server 0.1.0-canary.2 → 0.1.0-canary.4
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/register-api-routes.js +1 -1
- package/dist/bootstrap/register-api-routes.js.map +1 -1
- package/dist/routes/agents.d.ts +2 -1
- package/dist/routes/agents.d.ts.map +1 -1
- package/dist/routes/agents.js +158 -1
- package/dist/routes/agents.js.map +1 -1
- package/package.json +13 -13
- package/ui-dist/assets/{_basePickBy-C8ZhuJlI.js → _basePickBy-DiflZcaT.js} +1 -1
- package/ui-dist/assets/{_baseUniq-BRCVYeJb.js → _baseUniq-WNVeFtdg.js} +1 -1
- package/ui-dist/assets/{arc-B1R0dxYm.js → arc-Dm6ZFJCm.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-2XIMDMQ5-D7sRWBaf.js → architectureDiagram-2XIMDMQ5-Cu_xKrZM.js} +1 -1
- package/ui-dist/assets/{blockDiagram-WCTKOSBZ-Byw6t-Eq.js → blockDiagram-WCTKOSBZ-DxchsBtZ.js} +1 -1
- package/ui-dist/assets/{c4Diagram-IC4MRINW-RsrU80Hc.js → c4Diagram-IC4MRINW-C2F0q52j.js} +1 -1
- package/ui-dist/assets/channel-C9uLq2ne.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-D9oP4FJ_.js → chunk-4BX2VUAB-BdGsQndN.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-DT8xQAKU.js → chunk-55IACEB6-tVNa4a7V.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-FwqsP6AV.js → chunk-FMBD7UC4-B6qs4IZg.js} +1 -1
- package/ui-dist/assets/{chunk-JSJVCQXG-CTOvJxU3.js → chunk-JSJVCQXG--L96Hq_0.js} +1 -1
- package/ui-dist/assets/{chunk-KX2RTZJC-8oze7Khf.js → chunk-KX2RTZJC-FD4Is8Ig.js} +1 -1
- package/ui-dist/assets/{chunk-NQ4KR5QH-D38LrSCR.js → chunk-NQ4KR5QH-BqUr6CKu.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-B3ZhJA7D.js → chunk-QZHKN3VN-6Fhv42we.js} +1 -1
- package/ui-dist/assets/{chunk-WL4C6EOR-CSTjCHX6.js → chunk-WL4C6EOR-Bd-cqonO.js} +1 -1
- package/ui-dist/assets/classDiagram-VBA2DB6C-DMd9031b.js +1 -0
- package/ui-dist/assets/classDiagram-v2-RAHNMMFH-DMd9031b.js +1 -0
- package/ui-dist/assets/clone-D3GNjEgQ.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-CI_3Qz62.js → cose-bilkent-S5V4N54A-CQv2RgGd.js} +1 -1
- package/ui-dist/assets/{dagre-KLK3FWXG-BNakeJ5Q.js → dagre-KLK3FWXG-B3sbEeHE.js} +1 -1
- package/ui-dist/assets/{diagram-E7M64L7V-UubVu-IN.js → diagram-E7M64L7V-BXBbVShN.js} +1 -1
- package/ui-dist/assets/{diagram-IFDJBPK2-DRu8FSPT.js → diagram-IFDJBPK2-BQ3B1y6R.js} +1 -1
- package/ui-dist/assets/{diagram-P4PSJMXO-t2_nA6WC.js → diagram-P4PSJMXO-BD_o5H4_.js} +1 -1
- package/ui-dist/assets/{erDiagram-INFDFZHY-ET8QDHtO.js → erDiagram-INFDFZHY-D-I_1ZS9.js} +1 -1
- package/ui-dist/assets/{flowDiagram-PKNHOUZH-QXQeM_4d.js → flowDiagram-PKNHOUZH-DqIK64_6.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-A5KZAMGK-B6yFn5Hd.js → ganttDiagram-A5KZAMGK-CSkjiZM8.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-K3NZZRJ6-DZAeG6MG.js → gitGraphDiagram-K3NZZRJ6-BdesCCzH.js} +1 -1
- package/ui-dist/assets/{graph-BaTTyfU1.js → graph-BEmj48Kf.js} +1 -1
- package/ui-dist/assets/{index-h_UqLbty.js → index-5MN_tPYE.js} +1 -1
- package/ui-dist/assets/{index-DPbDGs74.js → index-8b4lhNPF.js} +1 -1
- package/ui-dist/assets/{index-BXxi8m3U.js → index-9cXU799z.js} +1 -1
- package/ui-dist/assets/{index-ZHLqhZdz.js → index-B7Q0JqTH.js} +1 -1
- package/ui-dist/assets/{index-DvQZ5FJk.js → index-B7XXDzP9.js} +1 -1
- package/ui-dist/assets/{index-CAcJz5d9.js → index-B93zB3MO.js} +1 -1
- package/ui-dist/assets/{index-D_ZvBEXt.js → index-BFgC6KDr.js} +1 -1
- package/ui-dist/assets/index-BGzafGwp.js +1358 -0
- package/ui-dist/assets/index-BPWooswR.css +1 -0
- package/ui-dist/assets/{index-DBsb_N5Q.js → index-BX43avLA.js} +1 -1
- package/ui-dist/assets/{index-C2T1FM7J.js → index-Bwn7KuxW.js} +1 -1
- package/ui-dist/assets/{index-Cftoq4bF.js → index-CHJUy-7d.js} +1 -1
- package/ui-dist/assets/{index-BWEA-ibM.js → index-CNtu-77P.js} +1 -1
- package/ui-dist/assets/{index-qVKE_HM2.js → index-CVg6DV-Q.js} +1 -1
- package/ui-dist/assets/{index-eessTUZm.js → index-CbOQJGyt.js} +1 -1
- package/ui-dist/assets/{index-MYVA1f40.js → index-CoCFDlbF.js} +1 -1
- package/ui-dist/assets/{index-CRtxHtSg.js → index-CyesUln3.js} +1 -1
- package/ui-dist/assets/{index-ym7ZDmXE.js → index-D22Qvoge.js} +1 -1
- package/ui-dist/assets/{index-DQeEMbWr.js → index-D9wUK2Kq.js} +1 -1
- package/ui-dist/assets/{index-D-mb6cn2.js → index-DEW6jw2J.js} +1 -1
- package/ui-dist/assets/{index-BGOxzMvq.js → index-DN7IdNUO.js} +1 -1
- package/ui-dist/assets/{index-Bo1sSJ7x.js → index-DUhTV_xP.js} +1 -1
- package/ui-dist/assets/{index-C7kEQtA_.js → index-Dw6R_sNu.js} +1 -1
- package/ui-dist/assets/{index-BSfIb9qw.js → index-JyTXi0zP.js} +1 -1
- package/ui-dist/assets/{infoDiagram-LFFYTUFH-BOnKcq7S.js → infoDiagram-LFFYTUFH-CrC1FNai.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-etV-MroN.js → ishikawaDiagram-PHBUUO56-BDudUfbY.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-4ABVD52K-mvjGNrBx.js → journeyDiagram-4ABVD52K-gVjNrtGJ.js} +1 -1
- package/ui-dist/assets/{kanban-definition-K7BYSVSG-CW-Dw_bU.js → kanban-definition-K7BYSVSG-C34bYY1F.js} +1 -1
- package/ui-dist/assets/{layout-DUcWZ3H3.js → layout-BTNQIM3k.js} +1 -1
- package/ui-dist/assets/{linear-B0r1V0oG.js → linear-DdsenbCN.js} +1 -1
- package/ui-dist/assets/{mermaid.core-Bo_YuNee.js → mermaid.core-D2a-RfQK.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-YRQLILUH-BmEjkBnz.js → mindmap-definition-YRQLILUH-AbDiyRTs.js} +1 -1
- package/ui-dist/assets/{pieDiagram-SKSYHLDU-BRER3VVx.js → pieDiagram-SKSYHLDU-BQPnQMnm.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-337W2JSQ-oYnSbQKi.js → quadrantDiagram-337W2JSQ-oRTRdPwu.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-Z7DCOOCP-BRLFZsts.js → requirementDiagram-Z7DCOOCP-9vVefU8-.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-WA2Y5GQK-YOKeMxIU.js → sankeyDiagram-WA2Y5GQK-CVJhYIrx.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-2WXFIKYE-Bj-YKQMs.js → sequenceDiagram-2WXFIKYE-Cagg26V2.js} +1 -1
- package/ui-dist/assets/{stateDiagram-RAJIS63D-BYf-CeWe.js → stateDiagram-RAJIS63D-Bu7qGuJx.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-CMlQFIdt.js +1 -0
- package/ui-dist/assets/{timeline-definition-YZTLITO2-CG6r3GP4.js → timeline-definition-YZTLITO2-B9x3pkC2.js} +1 -1
- package/ui-dist/assets/{treemap-KZPCXAKY-DCX4FLGH.js → treemap-KZPCXAKY-Bxg-dvKE.js} +1 -1
- package/ui-dist/assets/{vennDiagram-LZ73GAT5-CpbbhHdY.js → vennDiagram-LZ73GAT5-CjoSQirJ.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-JWTSCODW-Biq5EV_L.js → xychartDiagram-JWTSCODW-BlBmxd8k.js} +1 -1
- package/ui-dist/index.html +2 -2
- package/ui-dist/assets/channel-BExT12GI.js +0 -1
- package/ui-dist/assets/classDiagram-VBA2DB6C-B3FSZmLP.js +0 -1
- package/ui-dist/assets/classDiagram-v2-RAHNMMFH-B3FSZmLP.js +0 -1
- package/ui-dist/assets/clone-DxXNeJhJ.js +0 -1
- package/ui-dist/assets/index-2Hx2TlnA.css +0 -1
- package/ui-dist/assets/index-wzjO7KZw.js +0 -1343
- package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-g0byx18e.js +0 -1
|
@@ -36,7 +36,7 @@ export function registerApiRoutes(db, opts, pluginRuntime) {
|
|
|
36
36
|
}));
|
|
37
37
|
api.use("/orgs", organizationRoutes(db, opts.storageService));
|
|
38
38
|
api.use(organizationSkillRoutes(db));
|
|
39
|
-
api.use(agentRoutes(db));
|
|
39
|
+
api.use(agentRoutes(db, opts.storageService));
|
|
40
40
|
api.use(assetRoutes(db, opts.storageService));
|
|
41
41
|
api.use(projectRoutes(db));
|
|
42
42
|
api.use(issueRoutes(db, opts.storageService));
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"register-api-routes.js","sourceRoot":"","sources":["../../src/bootstrap/register-api-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAIxE,MAAM,UAAU,iBAAiB,CAC/B,EAAM,EACN,IAAsB,EACtB,aAAgC;IAEhC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IAErB,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,CACL,SAAS,EACT,YAAY,CAAC,EAAE,EAAE;QACf,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;QACnD,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAC,CACH,CAAC;IACF,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC,CAAC;
|
|
1
|
+
{"version":3,"file":"register-api-routes.js","sourceRoot":"","sources":["../../src/bootstrap/register-api-routes.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEjC,OAAO,EAAE,kBAAkB,EAAE,MAAM,uCAAuC,CAAC;AAC3E,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,cAAc,EAAE,MAAM,wBAAwB,CAAC;AACxD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,wBAAwB,EAAE,MAAM,mCAAmC,CAAC;AAC7E,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AACzD,OAAO,EAAE,uBAAuB,EAAE,MAAM,kCAAkC,CAAC;AAC3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,mBAAmB,CAAC;AACvD,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,aAAa,EAAE,MAAM,uBAAuB,CAAC;AACtD,OAAO,EAAE,qBAAqB,EAAE,MAAM,+BAA+B,CAAC;AACtE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,kBAAkB,EAAE,MAAM,6BAA6B,CAAC;AACjE,OAAO,EAAE,sBAAsB,EAAE,MAAM,gCAAgC,CAAC;AAIxE,MAAM,UAAU,iBAAiB,CAC/B,EAAM,EACN,IAAsB,EACtB,aAAgC;IAEhC,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC;IAErB,GAAG,CAAC,GAAG,CAAC,kBAAkB,EAAE,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,CACL,SAAS,EACT,YAAY,CAAC,EAAE,EAAE;QACf,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,SAAS,EAAE,IAAI,CAAC,SAAS;QACzB,sBAAsB,EAAE,IAAI,CAAC,sBAAsB;QACnD,UAAU,EAAE,IAAI,CAAC,UAAU;QAC3B,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAC,CACH,CAAC;IACF,GAAG,CAAC,GAAG,CAAC,OAAO,EAAE,kBAAkB,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9D,GAAG,CAAC,GAAG,CAAC,uBAAuB,CAAC,EAAE,CAAC,CAAC,CAAC;IACrC,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9C,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9C,GAAG,CAAC,GAAG,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAC;IAC3B,GAAG,CAAC,GAAG,CAAC,WAAW,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC9C,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC;IAC7C,GAAG,CAAC,GAAG,CAAC,gBAAgB,CAAC,EAAE,CAAC,CAAC,CAAC;IAC9B,GAAG,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CAAC,CAAC,CAAC;IACtC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,CAAC,YAAY,CAAC,EAAE,CAAC,CAAC,CAAC;IAC1B,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;IACxB,GAAG,CAAC,GAAG,CAAC,cAAc,CAAC,EAAE,CAAC,CAAC,CAAC;IAC5B,GAAG,CAAC,GAAG,CAAC,qBAAqB,CAAC,EAAE,CAAC,CAAC,CAAC;IACnC,GAAG,CAAC,GAAG,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,CAAC;IAC7B,GAAG,CAAC,GAAG,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC,CAAC;IAChC,GAAG,CAAC,GAAG,CAAC,sBAAsB,CAAC,EAAE,EAAE,EAAE,cAAc,EAAE,IAAI,CAAC,cAAc,EAAE,CAAC,CAAC,CAAC;IAC7E,GAAG,CAAC,GAAG,CACL,YAAY,CACV,EAAE,EACF,aAAa,CAAC,MAAM,EACpB,EAAE,SAAS,EAAE,aAAa,CAAC,SAAS,EAAE,QAAQ,EAAE,aAAa,CAAC,QAAQ,EAAE,EACxE,EAAE,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE,EAC9C,EAAE,cAAc,EAAE,aAAa,CAAC,cAAc,EAAE,EAChD,EAAE,aAAa,EAAE,aAAa,CAAC,aAAa,EAAE,CAC/C,CACF,CAAC;IACF,GAAG,CAAC,GAAG,CACL,YAAY,CAAC,EAAE,EAAE;QACf,cAAc,EAAE,IAAI,CAAC,cAAc;QACnC,kBAAkB,EAAE,IAAI,CAAC,kBAAkB;QAC3C,QAAQ,EAAE,IAAI,CAAC,QAAQ;QACvB,gBAAgB,EAAE,IAAI,CAAC,gBAAgB;KACxC,CAAC,CACH,CAAC;IAEF,OAAO,GAAG,CAAC;AACb,CAAC"}
|
package/dist/routes/agents.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
1
|
import type { Db } from "@rudderhq/db";
|
|
2
|
-
|
|
2
|
+
import type { StorageService } from "../storage/types.js";
|
|
3
|
+
export declare function agentRoutes(db: Db, storage?: StorageService): import("express-serve-static-core").Router;
|
|
3
4
|
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../src/routes/agents.ts"],"names":[],"mappings":"AAKA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AAwCvC,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,qBAAqB,CAAC;AAmF1D,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,OAAO,CAAC,EAAE,cAAc,8CA08E3D"}
|
package/dist/routes/agents.js
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
1
|
import { Router } from "express";
|
|
2
|
+
import multer from "multer";
|
|
3
|
+
import sharp from "sharp";
|
|
2
4
|
import { generateKeyPairSync, randomUUID } from "node:crypto";
|
|
3
5
|
import path from "node:path";
|
|
4
6
|
import { agents as agentsTable, organizations, heartbeatRuns } from "@rudderhq/db";
|
|
@@ -6,11 +8,13 @@ import { and, desc, eq, inArray, not, sql } from "drizzle-orm";
|
|
|
6
8
|
import { agentSkillSyncSchema, createAgentKeySchema, createAgentHireSchema, createAgentSchema, deriveAgentUrlKey, isUuidLike, organizationSkillCreateSchema, resetAgentSessionSchema, testAgentRuntimeEnvironmentSchema, upsertAgentInstructionsFileSchema, updateAgentInstructionsBundleSchema, updateAgentPermissionsSchema, updateAgentInstructionsPathSchema, wakeAgentSchema, updateAgentSchema, } from "@rudderhq/shared";
|
|
7
9
|
import { validate } from "../middleware/validate.js";
|
|
8
10
|
import { agentService, agentInstructionsService, accessService, approvalService, organizationSkillService, budgetService, heartbeatService, issueApprovalService, issueService, logActivity, secretService, syncInstructionsBundleConfigFromFilePath, workspaceOperationService, } from "../services/index.js";
|
|
11
|
+
import { assetService } from "../services/assets.js";
|
|
9
12
|
import { conflict, forbidden, notFound, unprocessable } from "../errors.js";
|
|
10
13
|
import { assertBoard, assertCompanyAccess, assertInstanceAdmin, getActorInfo } from "./authz.js";
|
|
11
14
|
import { findServerAdapter, listAgentRuntimeModels } from "../agent-runtimes/index.js";
|
|
12
15
|
import { redactEventPayload } from "../redaction.js";
|
|
13
16
|
import { redactCurrentUserValue } from "../log-redaction.js";
|
|
17
|
+
import { MAX_ATTACHMENT_BYTES } from "../attachment-types.js";
|
|
14
18
|
import { renderOrgChartSvg, renderOrgChartPng, ORG_CHART_STYLES } from "./org-chart-svg.js";
|
|
15
19
|
import { instanceSettingsService } from "../services/instance-settings.js";
|
|
16
20
|
import { runClaudeLogin } from "@rudderhq/agent-runtime-claude-local/server";
|
|
@@ -19,7 +23,56 @@ import { DEFAULT_CURSOR_LOCAL_MODEL } from "@rudderhq/agent-runtime-cursor-local
|
|
|
19
23
|
import { DEFAULT_GEMINI_LOCAL_MODEL } from "@rudderhq/agent-runtime-gemini-local";
|
|
20
24
|
import { ensureOpenCodeModelConfiguredAndAvailable } from "@rudderhq/agent-runtime-opencode-local/server";
|
|
21
25
|
import { loadDefaultAgentInstructionsBundle, resolveDefaultAgentInstructionsBundleRole, } from "../services/default-agent-instructions.js";
|
|
22
|
-
|
|
26
|
+
const AGENT_AVATAR_CONTENT_TYPES = new Set([
|
|
27
|
+
"image/png",
|
|
28
|
+
"image/jpeg",
|
|
29
|
+
"image/jpg",
|
|
30
|
+
"image/webp",
|
|
31
|
+
"image/gif",
|
|
32
|
+
]);
|
|
33
|
+
const AGENT_AVATAR_SIZE_PX = 256;
|
|
34
|
+
const AGENT_AVATAR_WEBP_QUALITY = 82;
|
|
35
|
+
const AGENT_AVATAR_ASSET_RE = /^asset:([0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12})$/i;
|
|
36
|
+
function extractAgentAvatarAssetId(icon) {
|
|
37
|
+
if (typeof icon !== "string")
|
|
38
|
+
return null;
|
|
39
|
+
const match = icon.trim().match(AGENT_AVATAR_ASSET_RE);
|
|
40
|
+
return match?.[1] ?? null;
|
|
41
|
+
}
|
|
42
|
+
async function runSingleFileUpload(upload, req, res) {
|
|
43
|
+
await new Promise((resolve, reject) => {
|
|
44
|
+
upload.single("file")(req, res, (err) => {
|
|
45
|
+
if (err)
|
|
46
|
+
reject(err);
|
|
47
|
+
else
|
|
48
|
+
resolve();
|
|
49
|
+
});
|
|
50
|
+
});
|
|
51
|
+
}
|
|
52
|
+
async function compressAgentAvatar(file) {
|
|
53
|
+
try {
|
|
54
|
+
const output = await sharp(file.buffer, {
|
|
55
|
+
animated: false,
|
|
56
|
+
limitInputPixels: 24_000_000,
|
|
57
|
+
})
|
|
58
|
+
.rotate()
|
|
59
|
+
.resize(AGENT_AVATAR_SIZE_PX, AGENT_AVATAR_SIZE_PX, {
|
|
60
|
+
fit: "cover",
|
|
61
|
+
position: "center",
|
|
62
|
+
withoutEnlargement: true,
|
|
63
|
+
})
|
|
64
|
+
.webp({ quality: AGENT_AVATAR_WEBP_QUALITY, effort: 4 })
|
|
65
|
+
.toBuffer();
|
|
66
|
+
if (output.length <= 0) {
|
|
67
|
+
throw new Error("empty avatar output");
|
|
68
|
+
}
|
|
69
|
+
return output;
|
|
70
|
+
}
|
|
71
|
+
catch {
|
|
72
|
+
throw unprocessable("Avatar image could not be processed");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
export function agentRoutes(db, storage) {
|
|
23
76
|
function stripPersistedSkillSyncConfig(config) {
|
|
24
77
|
const next = { ...config };
|
|
25
78
|
delete next.rudderSkillSync;
|
|
@@ -56,6 +109,7 @@ export function agentRoutes(db) {
|
|
|
56
109
|
];
|
|
57
110
|
const router = Router();
|
|
58
111
|
const svc = agentService(db);
|
|
112
|
+
const assets = assetService(db);
|
|
59
113
|
const access = accessService(db);
|
|
60
114
|
const approvalsSvc = approvalService(db);
|
|
61
115
|
const budgets = budgetService(db);
|
|
@@ -67,6 +121,10 @@ export function agentRoutes(db) {
|
|
|
67
121
|
const workspaceOperations = workspaceOperationService(db);
|
|
68
122
|
const instanceSettings = instanceSettingsService(db);
|
|
69
123
|
const strictSecretsMode = process.env.RUDDER_SECRETS_STRICT_MODE === "true";
|
|
124
|
+
const avatarUpload = multer({
|
|
125
|
+
storage: multer.memoryStorage(),
|
|
126
|
+
limits: { fileSize: MAX_ATTACHMENT_BYTES, files: 1 },
|
|
127
|
+
});
|
|
70
128
|
async function persistReconciledInstructionsBundle(agent, result) {
|
|
71
129
|
if (!result.changed)
|
|
72
130
|
return agent;
|
|
@@ -177,6 +235,21 @@ export function agentRoutes(db) {
|
|
|
177
235
|
const allowedByGrant = await access.hasPermission(orgId, "agent", actorAgent.id, "agents:create");
|
|
178
236
|
return allowedByGrant || canCreateAgents(actorAgent);
|
|
179
237
|
}
|
|
238
|
+
async function assertAgentAvatarAssetBelongsToOrg(orgId, icon) {
|
|
239
|
+
const assetId = extractAgentAvatarAssetId(icon);
|
|
240
|
+
if (!assetId)
|
|
241
|
+
return;
|
|
242
|
+
const asset = await assets.getById(assetId);
|
|
243
|
+
if (!asset) {
|
|
244
|
+
throw unprocessable("Avatar asset not found");
|
|
245
|
+
}
|
|
246
|
+
if (asset.orgId !== orgId) {
|
|
247
|
+
throw forbidden("Avatar asset belongs to another organization");
|
|
248
|
+
}
|
|
249
|
+
if (!asset.contentType.toLowerCase().startsWith("image/")) {
|
|
250
|
+
throw unprocessable("Avatar asset must be an image");
|
|
251
|
+
}
|
|
252
|
+
}
|
|
180
253
|
async function assertCanUpdateAgent(req, targetAgent) {
|
|
181
254
|
assertCompanyAccess(req, targetAgent.orgId);
|
|
182
255
|
if (req.actor.type === "board")
|
|
@@ -983,6 +1056,7 @@ export function agentRoutes(db) {
|
|
|
983
1056
|
...hireInput,
|
|
984
1057
|
agentRuntimeConfig: normalizedAdapterConfig,
|
|
985
1058
|
};
|
|
1059
|
+
await assertAgentAvatarAssetBelongsToOrg(orgId, normalizedHireInput.icon);
|
|
986
1060
|
const organization = await db
|
|
987
1061
|
.select()
|
|
988
1062
|
.from(organizations)
|
|
@@ -1096,6 +1170,7 @@ export function agentRoutes(db) {
|
|
|
1096
1170
|
const { config: runtimeAdapterConfig } = await secretsSvc.resolveAdapterConfigForRuntime(orgId, normalizedAdapterConfig);
|
|
1097
1171
|
const desiredSkillAssignment = await resolveDesiredSkillAssignment(orgId, createInput.agentRuntimeType, runtimeAdapterConfig, Array.isArray(requestedDesiredSkills) ? requestedDesiredSkills : undefined);
|
|
1098
1172
|
await assertAdapterConfigConstraints(orgId, createInput.agentRuntimeType, normalizedAdapterConfig);
|
|
1173
|
+
await assertAgentAvatarAssetBelongsToOrg(orgId, createInput.icon);
|
|
1099
1174
|
const createdAgent = await svc.create(orgId, {
|
|
1100
1175
|
...createInput,
|
|
1101
1176
|
agentRuntimeConfig: normalizedAdapterConfig,
|
|
@@ -1176,6 +1251,85 @@ export function agentRoutes(db) {
|
|
|
1176
1251
|
});
|
|
1177
1252
|
res.json(await buildAgentDetail(agent));
|
|
1178
1253
|
});
|
|
1254
|
+
router.post("/agents/:id/avatar", async (req, res) => {
|
|
1255
|
+
if (!storage) {
|
|
1256
|
+
res.status(500).json({ error: "Storage service unavailable" });
|
|
1257
|
+
return;
|
|
1258
|
+
}
|
|
1259
|
+
const id = req.params.id;
|
|
1260
|
+
const existing = await svc.getById(id);
|
|
1261
|
+
if (!existing) {
|
|
1262
|
+
res.status(404).json({ error: "Agent not found" });
|
|
1263
|
+
return;
|
|
1264
|
+
}
|
|
1265
|
+
await assertCanUpdateAgent(req, existing);
|
|
1266
|
+
try {
|
|
1267
|
+
await runSingleFileUpload(avatarUpload, req, res);
|
|
1268
|
+
}
|
|
1269
|
+
catch (err) {
|
|
1270
|
+
if (err instanceof multer.MulterError) {
|
|
1271
|
+
if (err.code === "LIMIT_FILE_SIZE") {
|
|
1272
|
+
res.status(422).json({ error: `Image exceeds ${MAX_ATTACHMENT_BYTES} bytes` });
|
|
1273
|
+
return;
|
|
1274
|
+
}
|
|
1275
|
+
res.status(400).json({ error: err.message });
|
|
1276
|
+
return;
|
|
1277
|
+
}
|
|
1278
|
+
throw err;
|
|
1279
|
+
}
|
|
1280
|
+
const file = req.file;
|
|
1281
|
+
if (!file) {
|
|
1282
|
+
res.status(400).json({ error: "Missing file field 'file'" });
|
|
1283
|
+
return;
|
|
1284
|
+
}
|
|
1285
|
+
const inputContentType = (file.mimetype || "").toLowerCase();
|
|
1286
|
+
if (!AGENT_AVATAR_CONTENT_TYPES.has(inputContentType)) {
|
|
1287
|
+
res.status(422).json({ error: `Unsupported avatar image type: ${inputContentType || "unknown"}` });
|
|
1288
|
+
return;
|
|
1289
|
+
}
|
|
1290
|
+
const compressed = await compressAgentAvatar(file);
|
|
1291
|
+
const actor = getActorInfo(req);
|
|
1292
|
+
const stored = await storage.putFile({
|
|
1293
|
+
orgId: existing.orgId,
|
|
1294
|
+
namespace: `assets/agents/${existing.id}/avatars`,
|
|
1295
|
+
originalFilename: file.originalname || "avatar.webp",
|
|
1296
|
+
contentType: "image/webp",
|
|
1297
|
+
body: compressed,
|
|
1298
|
+
});
|
|
1299
|
+
const asset = await assets.create(existing.orgId, {
|
|
1300
|
+
provider: stored.provider,
|
|
1301
|
+
objectKey: stored.objectKey,
|
|
1302
|
+
contentType: stored.contentType,
|
|
1303
|
+
byteSize: stored.byteSize,
|
|
1304
|
+
sha256: stored.sha256,
|
|
1305
|
+
originalFilename: stored.originalFilename,
|
|
1306
|
+
createdByAgentId: actor.agentId,
|
|
1307
|
+
createdByUserId: actor.actorType === "user" ? actor.actorId : null,
|
|
1308
|
+
});
|
|
1309
|
+
const avatarIcon = `asset:${asset.id}`;
|
|
1310
|
+
const agent = await svc.update(existing.id, { icon: avatarIcon });
|
|
1311
|
+
if (!agent) {
|
|
1312
|
+
res.status(404).json({ error: "Agent not found" });
|
|
1313
|
+
return;
|
|
1314
|
+
}
|
|
1315
|
+
await logActivity(db, {
|
|
1316
|
+
orgId: agent.orgId,
|
|
1317
|
+
actorType: actor.actorType,
|
|
1318
|
+
actorId: actor.actorId,
|
|
1319
|
+
agentId: actor.agentId,
|
|
1320
|
+
runId: actor.runId,
|
|
1321
|
+
action: "agent.avatar_updated",
|
|
1322
|
+
entityType: "agent",
|
|
1323
|
+
entityId: agent.id,
|
|
1324
|
+
details: {
|
|
1325
|
+
assetId: asset.id,
|
|
1326
|
+
contentType: asset.contentType,
|
|
1327
|
+
byteSize: asset.byteSize,
|
|
1328
|
+
originalFilename: asset.originalFilename,
|
|
1329
|
+
},
|
|
1330
|
+
});
|
|
1331
|
+
res.status(201).json(agent);
|
|
1332
|
+
});
|
|
1179
1333
|
router.patch("/agents/:id/instructions-path", validate(updateAgentInstructionsPathSchema), async (req, res) => {
|
|
1180
1334
|
const id = req.params.id;
|
|
1181
1335
|
const existing = await svc.getInternalById(id);
|
|
@@ -1435,6 +1589,9 @@ export function agentRoutes(db) {
|
|
|
1435
1589
|
const effectiveAdapterConfig = asRecord(patchData.agentRuntimeConfig) ?? {};
|
|
1436
1590
|
await assertAdapterConfigConstraints(existing.orgId, requestedAdapterType, effectiveAdapterConfig);
|
|
1437
1591
|
}
|
|
1592
|
+
if (Object.prototype.hasOwnProperty.call(patchData, "icon")) {
|
|
1593
|
+
await assertAgentAvatarAssetBelongsToOrg(existing.orgId, patchData.icon);
|
|
1594
|
+
}
|
|
1438
1595
|
const actor = getActorInfo(req);
|
|
1439
1596
|
const agent = await svc.update(id, patchData, {
|
|
1440
1597
|
recordRevision: {
|