@rudderhq/server 0.1.0-canary.2 → 0.1.0-canary.20
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/dev-server-status.d.ts +1 -7
- package/dist/dev-server-status.d.ts.map +1 -1
- package/dist/dev-server-status.js +1 -4
- package/dist/dev-server-status.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/dist/routes/chats.d.ts.map +1 -1
- package/dist/routes/chats.js +149 -21
- package/dist/routes/chats.js.map +1 -1
- package/dist/routes/dashboard.d.ts.map +1 -1
- package/dist/routes/dashboard.js +24 -0
- package/dist/routes/dashboard.js.map +1 -1
- package/dist/routes/health.d.ts.map +1 -1
- package/dist/routes/health.js +3 -12
- package/dist/routes/health.js.map +1 -1
- package/dist/routes/instance-settings.d.ts.map +1 -1
- package/dist/routes/instance-settings.js +1 -26
- package/dist/routes/instance-settings.js.map +1 -1
- package/dist/routes/issues.d.ts.map +1 -1
- package/dist/routes/issues.js +19 -17
- package/dist/routes/issues.js.map +1 -1
- package/dist/services/agent-run-context.d.ts +1 -1
- package/dist/services/agents.d.ts +13 -13
- package/dist/services/chat-assistant.d.ts.map +1 -1
- package/dist/services/chat-assistant.js +75 -15
- package/dist/services/chat-assistant.js.map +1 -1
- package/dist/services/chat-generation-locks.d.ts +2 -1
- package/dist/services/chat-generation-locks.d.ts.map +1 -1
- package/dist/services/chat-generation-locks.js +12 -3
- package/dist/services/chat-generation-locks.js.map +1 -1
- package/dist/services/chats.d.ts +1 -1
- package/dist/services/costs.d.ts +1 -1
- package/dist/services/documents.d.ts +23 -0
- package/dist/services/documents.d.ts.map +1 -1
- package/dist/services/documents.js +17 -1
- package/dist/services/documents.js.map +1 -1
- package/dist/services/finance.d.ts +2 -2
- package/dist/services/heartbeat.d.ts +1 -1
- package/dist/services/heartbeat.d.ts.map +1 -1
- package/dist/services/heartbeat.js +1 -1
- package/dist/services/heartbeat.js.map +1 -1
- package/dist/services/instance-settings.d.ts +1 -3
- package/dist/services/instance-settings.d.ts.map +1 -1
- package/dist/services/instance-settings.js +1 -38
- package/dist/services/instance-settings.js.map +1 -1
- package/dist/services/messenger.d.ts +1 -1
- package/dist/services/messenger.d.ts.map +1 -1
- package/dist/services/messenger.js +59 -12
- package/dist/services/messenger.js.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.d.ts +15 -0
- package/dist/services/runtime-kernel/heartbeat.d.ts.map +1 -1
- package/dist/services/runtime-kernel/heartbeat.js +143 -100
- package/dist/services/runtime-kernel/heartbeat.js.map +1 -1
- package/dist/services/runtime-kernel/model-fallback.d.ts +10 -0
- package/dist/services/runtime-kernel/model-fallback.d.ts.map +1 -0
- package/dist/services/runtime-kernel/model-fallback.js +147 -0
- package/dist/services/runtime-kernel/model-fallback.js.map +1 -0
- package/package.json +14 -14
- package/resources/bundled-skills/rudder-create-agent/SKILL.md +1 -1
- package/resources/bundled-skills/rudder-create-agent/references/api-reference.md +4 -2
- package/resources/bundled-skills/rudder-create-agent/references/cli-reference.md +1 -1
- package/skills/rudder-create-agent/SKILL.md +1 -1
- package/skills/rudder-create-agent/references/api-reference.md +4 -2
- package/skills/rudder-create-agent/references/cli-reference.md +1 -1
- package/ui-dist/assets/{_basePickBy-C8ZhuJlI.js → _basePickBy-8ndlG73I.js} +1 -1
- package/ui-dist/assets/{_baseUniq-BRCVYeJb.js → _baseUniq-CdTmd3cs.js} +1 -1
- package/ui-dist/assets/{arc-B1R0dxYm.js → arc-Dg3IWr1w.js} +1 -1
- package/ui-dist/assets/{architectureDiagram-2XIMDMQ5-D7sRWBaf.js → architectureDiagram-2XIMDMQ5-CL4FzMl4.js} +1 -1
- package/ui-dist/assets/{blockDiagram-WCTKOSBZ-Byw6t-Eq.js → blockDiagram-WCTKOSBZ-CPAHP8wf.js} +1 -1
- package/ui-dist/assets/{c4Diagram-IC4MRINW-RsrU80Hc.js → c4Diagram-IC4MRINW-D9LRotnb.js} +1 -1
- package/ui-dist/assets/channel-W_reUgPl.js +1 -0
- package/ui-dist/assets/{chunk-4BX2VUAB-D9oP4FJ_.js → chunk-4BX2VUAB-CXYF-alC.js} +1 -1
- package/ui-dist/assets/{chunk-55IACEB6-DT8xQAKU.js → chunk-55IACEB6-_6gEPxwb.js} +1 -1
- package/ui-dist/assets/{chunk-FMBD7UC4-FwqsP6AV.js → chunk-FMBD7UC4-DBztD7i6.js} +1 -1
- package/ui-dist/assets/{chunk-JSJVCQXG-CTOvJxU3.js → chunk-JSJVCQXG-D_JITQMs.js} +1 -1
- package/ui-dist/assets/{chunk-KX2RTZJC-8oze7Khf.js → chunk-KX2RTZJC-CDYC8R4t.js} +1 -1
- package/ui-dist/assets/{chunk-NQ4KR5QH-D38LrSCR.js → chunk-NQ4KR5QH-CuyjnaxX.js} +1 -1
- package/ui-dist/assets/{chunk-QZHKN3VN-B3ZhJA7D.js → chunk-QZHKN3VN-BcmldUA2.js} +1 -1
- package/ui-dist/assets/{chunk-WL4C6EOR-CSTjCHX6.js → chunk-WL4C6EOR-Csc-gUp3.js} +1 -1
- package/ui-dist/assets/classDiagram-VBA2DB6C-Z8KHPV3I.js +1 -0
- package/ui-dist/assets/classDiagram-v2-RAHNMMFH-Z8KHPV3I.js +1 -0
- package/ui-dist/assets/clone-C8TVMdfS.js +1 -0
- package/ui-dist/assets/{cose-bilkent-S5V4N54A-CI_3Qz62.js → cose-bilkent-S5V4N54A-AQtv05lK.js} +1 -1
- package/ui-dist/assets/{dagre-KLK3FWXG-BNakeJ5Q.js → dagre-KLK3FWXG-qsyPc9zE.js} +1 -1
- package/ui-dist/assets/{diagram-E7M64L7V-UubVu-IN.js → diagram-E7M64L7V-D1y3CfX-.js} +1 -1
- package/ui-dist/assets/{diagram-IFDJBPK2-DRu8FSPT.js → diagram-IFDJBPK2-CXddZqNx.js} +1 -1
- package/ui-dist/assets/{diagram-P4PSJMXO-t2_nA6WC.js → diagram-P4PSJMXO-bH_AOwhx.js} +1 -1
- package/ui-dist/assets/{erDiagram-INFDFZHY-ET8QDHtO.js → erDiagram-INFDFZHY-Dm0NQ5o9.js} +1 -1
- package/ui-dist/assets/{flowDiagram-PKNHOUZH-QXQeM_4d.js → flowDiagram-PKNHOUZH-Bw0gdk4S.js} +1 -1
- package/ui-dist/assets/{ganttDiagram-A5KZAMGK-B6yFn5Hd.js → ganttDiagram-A5KZAMGK-DDg3IOSh.js} +1 -1
- package/ui-dist/assets/{gitGraphDiagram-K3NZZRJ6-DZAeG6MG.js → gitGraphDiagram-K3NZZRJ6-COVQ396E.js} +1 -1
- package/ui-dist/assets/{graph-BaTTyfU1.js → graph-bwl15Qpv.js} +1 -1
- package/ui-dist/assets/{index-CRtxHtSg.js → index--J4W4di0.js} +1 -1
- package/ui-dist/assets/{index-ym7ZDmXE.js → index-9o_SvY62.js} +1 -1
- package/ui-dist/assets/{index-qVKE_HM2.js → index-B0lMF-6n.js} +1 -1
- package/ui-dist/assets/{index-D-mb6cn2.js → index-B4zUm3gQ.js} +1 -1
- package/ui-dist/assets/{index-D_ZvBEXt.js → index-BFOm-l2T.js} +1 -1
- package/ui-dist/assets/{index-h_UqLbty.js → index-BQMKQUTE.js} +1 -1
- package/ui-dist/assets/index-C8zmIhnp.css +1 -0
- package/ui-dist/assets/{index-MYVA1f40.js → index-CC_A8kzq.js} +1 -1
- package/ui-dist/assets/{index-C7kEQtA_.js → index-CGKSC15M.js} +1 -1
- package/ui-dist/assets/{index-BXxi8m3U.js → index-CUPVi6ek.js} +1 -1
- package/ui-dist/assets/{index-DQeEMbWr.js → index-C_bGxC5L.js} +1 -1
- package/ui-dist/assets/{index-Cftoq4bF.js → index-Cej9C4tf.js} +1 -1
- package/ui-dist/assets/index-D7r_XRYD.js +1363 -0
- package/ui-dist/assets/{index-BSfIb9qw.js → index-DBLGXUKf.js} +1 -1
- package/ui-dist/assets/{index-C2T1FM7J.js → index-DSuhUSKb.js} +1 -1
- package/ui-dist/assets/{index-BWEA-ibM.js → index-DTsttLIs.js} +1 -1
- package/ui-dist/assets/{index-DvQZ5FJk.js → index-DozeI_ea.js} +1 -1
- package/ui-dist/assets/{index-Bo1sSJ7x.js → index-DxMAOmox.js} +1 -1
- package/ui-dist/assets/{index-BGOxzMvq.js → index-J1ga5P92.js} +1 -1
- package/ui-dist/assets/{index-CAcJz5d9.js → index-RhFrB2n9.js} +1 -1
- package/ui-dist/assets/{index-DBsb_N5Q.js → index-WRD2om5d.js} +1 -1
- package/ui-dist/assets/{index-eessTUZm.js → index-bWQpv8XB.js} +1 -1
- package/ui-dist/assets/{index-DPbDGs74.js → index-dewwxxca.js} +1 -1
- package/ui-dist/assets/{index-ZHLqhZdz.js → index-stSzYVUi.js} +1 -1
- package/ui-dist/assets/{infoDiagram-LFFYTUFH-BOnKcq7S.js → infoDiagram-LFFYTUFH-DjdShR-K.js} +1 -1
- package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-etV-MroN.js → ishikawaDiagram-PHBUUO56-DXZf7GwF.js} +1 -1
- package/ui-dist/assets/{journeyDiagram-4ABVD52K-mvjGNrBx.js → journeyDiagram-4ABVD52K-70bcudq0.js} +1 -1
- package/ui-dist/assets/{kanban-definition-K7BYSVSG-CW-Dw_bU.js → kanban-definition-K7BYSVSG-BCdouCZ4.js} +1 -1
- package/ui-dist/assets/{layout-DUcWZ3H3.js → layout-Mhq2HNeN.js} +1 -1
- package/ui-dist/assets/{linear-B0r1V0oG.js → linear-6jA82SeB.js} +1 -1
- package/ui-dist/assets/{mermaid.core-Bo_YuNee.js → mermaid.core-Bytv0x0U.js} +4 -4
- package/ui-dist/assets/{mindmap-definition-YRQLILUH-BmEjkBnz.js → mindmap-definition-YRQLILUH-DK1H9m3i.js} +1 -1
- package/ui-dist/assets/{pieDiagram-SKSYHLDU-BRER3VVx.js → pieDiagram-SKSYHLDU-DOIMV3g5.js} +1 -1
- package/ui-dist/assets/{quadrantDiagram-337W2JSQ-oYnSbQKi.js → quadrantDiagram-337W2JSQ-DTfxtKqh.js} +1 -1
- package/ui-dist/assets/{requirementDiagram-Z7DCOOCP-BRLFZsts.js → requirementDiagram-Z7DCOOCP-DjXfzNQ_.js} +1 -1
- package/ui-dist/assets/{sankeyDiagram-WA2Y5GQK-YOKeMxIU.js → sankeyDiagram-WA2Y5GQK-DCIL8YBw.js} +1 -1
- package/ui-dist/assets/{sequenceDiagram-2WXFIKYE-Bj-YKQMs.js → sequenceDiagram-2WXFIKYE-DB7gJ2NE.js} +1 -1
- package/ui-dist/assets/{stateDiagram-RAJIS63D-BYf-CeWe.js → stateDiagram-RAJIS63D-ByB0ZTgH.js} +1 -1
- package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-DHKGN5HJ.js +1 -0
- package/ui-dist/assets/{timeline-definition-YZTLITO2-CG6r3GP4.js → timeline-definition-YZTLITO2-BgCHIIAF.js} +1 -1
- package/ui-dist/assets/{treemap-KZPCXAKY-DCX4FLGH.js → treemap-KZPCXAKY-CN3Dkmq8.js} +1 -1
- package/ui-dist/assets/{vennDiagram-LZ73GAT5-CpbbhHdY.js → vennDiagram-LZ73GAT5-DoESURJl.js} +1 -1
- package/ui-dist/assets/{xychartDiagram-JWTSCODW-Biq5EV_L.js → xychartDiagram-JWTSCODW-CRDlcdUc.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":"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"}
|
|
@@ -16,14 +16,8 @@ export type DevServerHealthStatus = {
|
|
|
16
16
|
changedPathsSample: string[];
|
|
17
17
|
envFileChanged: boolean;
|
|
18
18
|
pendingMigrations: string[];
|
|
19
|
-
autoRestartEnabled: boolean;
|
|
20
|
-
activeRunCount: number;
|
|
21
|
-
waitingForIdle: boolean;
|
|
22
19
|
lastRestartAt: string | null;
|
|
23
20
|
};
|
|
24
21
|
export declare function readPersistedDevServerStatus(env?: NodeJS.ProcessEnv): PersistedDevServerStatus | null;
|
|
25
|
-
export declare function toDevServerHealthStatus(persisted: PersistedDevServerStatus
|
|
26
|
-
autoRestartEnabled: boolean;
|
|
27
|
-
activeRunCount: number;
|
|
28
|
-
}): DevServerHealthStatus;
|
|
22
|
+
export declare function toDevServerHealthStatus(persisted: PersistedDevServerStatus): DevServerHealthStatus;
|
|
29
23
|
//# sourceMappingURL=dev-server-status.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-server-status.d.ts","sourceRoot":"","sources":["../src/dev-server-status.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,wCAAwC,GAAG,IAAI,CAAC;IACnG,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,
|
|
1
|
+
{"version":3,"file":"dev-server-status.d.ts","sourceRoot":"","sources":["../src/dev-server-status.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,wBAAwB,GAAG;IACrC,KAAK,EAAE,OAAO,CAAC;IACf,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAEF,MAAM,MAAM,qBAAqB,GAAG;IAClC,OAAO,EAAE,IAAI,CAAC;IACd,eAAe,EAAE,OAAO,CAAC;IACzB,MAAM,EAAE,iBAAiB,GAAG,oBAAoB,GAAG,wCAAwC,GAAG,IAAI,CAAC;IACnG,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,EAAE,CAAC;IAC7B,cAAc,EAAE,OAAO,CAAC;IACxB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,aAAa,EAAE,MAAM,GAAG,IAAI,CAAC;CAC9B,CAAC;AAgBF,wBAAgB,4BAA4B,CAC1C,GAAG,GAAE,MAAM,CAAC,UAAwB,GACnC,wBAAwB,GAAG,IAAI,CAmCjC;AAED,wBAAgB,uBAAuB,CACrC,SAAS,EAAE,wBAAwB,GAClC,qBAAqB,CAwBvB"}
|
|
@@ -46,7 +46,7 @@ export function readPersistedDevServerStatus(env = process.env) {
|
|
|
46
46
|
return null;
|
|
47
47
|
}
|
|
48
48
|
}
|
|
49
|
-
export function toDevServerHealthStatus(persisted
|
|
49
|
+
export function toDevServerHealthStatus(persisted) {
|
|
50
50
|
const hasPathChanges = persisted.changedPathCount > 0;
|
|
51
51
|
const hasPendingMigrations = persisted.pendingMigrations.length > 0;
|
|
52
52
|
const reason = hasPathChanges && hasPendingMigrations
|
|
@@ -66,9 +66,6 @@ export function toDevServerHealthStatus(persisted, opts) {
|
|
|
66
66
|
changedPathsSample: persisted.changedPathsSample,
|
|
67
67
|
envFileChanged: persisted.envFileChanged,
|
|
68
68
|
pendingMigrations: persisted.pendingMigrations,
|
|
69
|
-
autoRestartEnabled: opts.autoRestartEnabled,
|
|
70
|
-
activeRunCount: opts.activeRunCount,
|
|
71
|
-
waitingForIdle: restartRequired && opts.autoRestartEnabled && opts.activeRunCount > 0,
|
|
72
69
|
lastRestartAt: persisted.lastRestartAt,
|
|
73
70
|
};
|
|
74
71
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"dev-server-status.js","sourceRoot":"","sources":["../src/dev-server-status.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;
|
|
1
|
+
{"version":3,"file":"dev-server-status.js","sourceRoot":"","sources":["../src/dev-server-status.ts"],"names":[],"mappings":"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"}
|
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: {
|