@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.
Files changed (86) hide show
  1. package/dist/bootstrap/register-api-routes.js +1 -1
  2. package/dist/bootstrap/register-api-routes.js.map +1 -1
  3. package/dist/routes/agents.d.ts +2 -1
  4. package/dist/routes/agents.d.ts.map +1 -1
  5. package/dist/routes/agents.js +158 -1
  6. package/dist/routes/agents.js.map +1 -1
  7. package/package.json +13 -13
  8. package/ui-dist/assets/{_basePickBy-C8ZhuJlI.js → _basePickBy-DiflZcaT.js} +1 -1
  9. package/ui-dist/assets/{_baseUniq-BRCVYeJb.js → _baseUniq-WNVeFtdg.js} +1 -1
  10. package/ui-dist/assets/{arc-B1R0dxYm.js → arc-Dm6ZFJCm.js} +1 -1
  11. package/ui-dist/assets/{architectureDiagram-2XIMDMQ5-D7sRWBaf.js → architectureDiagram-2XIMDMQ5-Cu_xKrZM.js} +1 -1
  12. package/ui-dist/assets/{blockDiagram-WCTKOSBZ-Byw6t-Eq.js → blockDiagram-WCTKOSBZ-DxchsBtZ.js} +1 -1
  13. package/ui-dist/assets/{c4Diagram-IC4MRINW-RsrU80Hc.js → c4Diagram-IC4MRINW-C2F0q52j.js} +1 -1
  14. package/ui-dist/assets/channel-C9uLq2ne.js +1 -0
  15. package/ui-dist/assets/{chunk-4BX2VUAB-D9oP4FJ_.js → chunk-4BX2VUAB-BdGsQndN.js} +1 -1
  16. package/ui-dist/assets/{chunk-55IACEB6-DT8xQAKU.js → chunk-55IACEB6-tVNa4a7V.js} +1 -1
  17. package/ui-dist/assets/{chunk-FMBD7UC4-FwqsP6AV.js → chunk-FMBD7UC4-B6qs4IZg.js} +1 -1
  18. package/ui-dist/assets/{chunk-JSJVCQXG-CTOvJxU3.js → chunk-JSJVCQXG--L96Hq_0.js} +1 -1
  19. package/ui-dist/assets/{chunk-KX2RTZJC-8oze7Khf.js → chunk-KX2RTZJC-FD4Is8Ig.js} +1 -1
  20. package/ui-dist/assets/{chunk-NQ4KR5QH-D38LrSCR.js → chunk-NQ4KR5QH-BqUr6CKu.js} +1 -1
  21. package/ui-dist/assets/{chunk-QZHKN3VN-B3ZhJA7D.js → chunk-QZHKN3VN-6Fhv42we.js} +1 -1
  22. package/ui-dist/assets/{chunk-WL4C6EOR-CSTjCHX6.js → chunk-WL4C6EOR-Bd-cqonO.js} +1 -1
  23. package/ui-dist/assets/classDiagram-VBA2DB6C-DMd9031b.js +1 -0
  24. package/ui-dist/assets/classDiagram-v2-RAHNMMFH-DMd9031b.js +1 -0
  25. package/ui-dist/assets/clone-D3GNjEgQ.js +1 -0
  26. package/ui-dist/assets/{cose-bilkent-S5V4N54A-CI_3Qz62.js → cose-bilkent-S5V4N54A-CQv2RgGd.js} +1 -1
  27. package/ui-dist/assets/{dagre-KLK3FWXG-BNakeJ5Q.js → dagre-KLK3FWXG-B3sbEeHE.js} +1 -1
  28. package/ui-dist/assets/{diagram-E7M64L7V-UubVu-IN.js → diagram-E7M64L7V-BXBbVShN.js} +1 -1
  29. package/ui-dist/assets/{diagram-IFDJBPK2-DRu8FSPT.js → diagram-IFDJBPK2-BQ3B1y6R.js} +1 -1
  30. package/ui-dist/assets/{diagram-P4PSJMXO-t2_nA6WC.js → diagram-P4PSJMXO-BD_o5H4_.js} +1 -1
  31. package/ui-dist/assets/{erDiagram-INFDFZHY-ET8QDHtO.js → erDiagram-INFDFZHY-D-I_1ZS9.js} +1 -1
  32. package/ui-dist/assets/{flowDiagram-PKNHOUZH-QXQeM_4d.js → flowDiagram-PKNHOUZH-DqIK64_6.js} +1 -1
  33. package/ui-dist/assets/{ganttDiagram-A5KZAMGK-B6yFn5Hd.js → ganttDiagram-A5KZAMGK-CSkjiZM8.js} +1 -1
  34. package/ui-dist/assets/{gitGraphDiagram-K3NZZRJ6-DZAeG6MG.js → gitGraphDiagram-K3NZZRJ6-BdesCCzH.js} +1 -1
  35. package/ui-dist/assets/{graph-BaTTyfU1.js → graph-BEmj48Kf.js} +1 -1
  36. package/ui-dist/assets/{index-h_UqLbty.js → index-5MN_tPYE.js} +1 -1
  37. package/ui-dist/assets/{index-DPbDGs74.js → index-8b4lhNPF.js} +1 -1
  38. package/ui-dist/assets/{index-BXxi8m3U.js → index-9cXU799z.js} +1 -1
  39. package/ui-dist/assets/{index-ZHLqhZdz.js → index-B7Q0JqTH.js} +1 -1
  40. package/ui-dist/assets/{index-DvQZ5FJk.js → index-B7XXDzP9.js} +1 -1
  41. package/ui-dist/assets/{index-CAcJz5d9.js → index-B93zB3MO.js} +1 -1
  42. package/ui-dist/assets/{index-D_ZvBEXt.js → index-BFgC6KDr.js} +1 -1
  43. package/ui-dist/assets/index-BGzafGwp.js +1358 -0
  44. package/ui-dist/assets/index-BPWooswR.css +1 -0
  45. package/ui-dist/assets/{index-DBsb_N5Q.js → index-BX43avLA.js} +1 -1
  46. package/ui-dist/assets/{index-C2T1FM7J.js → index-Bwn7KuxW.js} +1 -1
  47. package/ui-dist/assets/{index-Cftoq4bF.js → index-CHJUy-7d.js} +1 -1
  48. package/ui-dist/assets/{index-BWEA-ibM.js → index-CNtu-77P.js} +1 -1
  49. package/ui-dist/assets/{index-qVKE_HM2.js → index-CVg6DV-Q.js} +1 -1
  50. package/ui-dist/assets/{index-eessTUZm.js → index-CbOQJGyt.js} +1 -1
  51. package/ui-dist/assets/{index-MYVA1f40.js → index-CoCFDlbF.js} +1 -1
  52. package/ui-dist/assets/{index-CRtxHtSg.js → index-CyesUln3.js} +1 -1
  53. package/ui-dist/assets/{index-ym7ZDmXE.js → index-D22Qvoge.js} +1 -1
  54. package/ui-dist/assets/{index-DQeEMbWr.js → index-D9wUK2Kq.js} +1 -1
  55. package/ui-dist/assets/{index-D-mb6cn2.js → index-DEW6jw2J.js} +1 -1
  56. package/ui-dist/assets/{index-BGOxzMvq.js → index-DN7IdNUO.js} +1 -1
  57. package/ui-dist/assets/{index-Bo1sSJ7x.js → index-DUhTV_xP.js} +1 -1
  58. package/ui-dist/assets/{index-C7kEQtA_.js → index-Dw6R_sNu.js} +1 -1
  59. package/ui-dist/assets/{index-BSfIb9qw.js → index-JyTXi0zP.js} +1 -1
  60. package/ui-dist/assets/{infoDiagram-LFFYTUFH-BOnKcq7S.js → infoDiagram-LFFYTUFH-CrC1FNai.js} +1 -1
  61. package/ui-dist/assets/{ishikawaDiagram-PHBUUO56-etV-MroN.js → ishikawaDiagram-PHBUUO56-BDudUfbY.js} +1 -1
  62. package/ui-dist/assets/{journeyDiagram-4ABVD52K-mvjGNrBx.js → journeyDiagram-4ABVD52K-gVjNrtGJ.js} +1 -1
  63. package/ui-dist/assets/{kanban-definition-K7BYSVSG-CW-Dw_bU.js → kanban-definition-K7BYSVSG-C34bYY1F.js} +1 -1
  64. package/ui-dist/assets/{layout-DUcWZ3H3.js → layout-BTNQIM3k.js} +1 -1
  65. package/ui-dist/assets/{linear-B0r1V0oG.js → linear-DdsenbCN.js} +1 -1
  66. package/ui-dist/assets/{mermaid.core-Bo_YuNee.js → mermaid.core-D2a-RfQK.js} +4 -4
  67. package/ui-dist/assets/{mindmap-definition-YRQLILUH-BmEjkBnz.js → mindmap-definition-YRQLILUH-AbDiyRTs.js} +1 -1
  68. package/ui-dist/assets/{pieDiagram-SKSYHLDU-BRER3VVx.js → pieDiagram-SKSYHLDU-BQPnQMnm.js} +1 -1
  69. package/ui-dist/assets/{quadrantDiagram-337W2JSQ-oYnSbQKi.js → quadrantDiagram-337W2JSQ-oRTRdPwu.js} +1 -1
  70. package/ui-dist/assets/{requirementDiagram-Z7DCOOCP-BRLFZsts.js → requirementDiagram-Z7DCOOCP-9vVefU8-.js} +1 -1
  71. package/ui-dist/assets/{sankeyDiagram-WA2Y5GQK-YOKeMxIU.js → sankeyDiagram-WA2Y5GQK-CVJhYIrx.js} +1 -1
  72. package/ui-dist/assets/{sequenceDiagram-2WXFIKYE-Bj-YKQMs.js → sequenceDiagram-2WXFIKYE-Cagg26V2.js} +1 -1
  73. package/ui-dist/assets/{stateDiagram-RAJIS63D-BYf-CeWe.js → stateDiagram-RAJIS63D-Bu7qGuJx.js} +1 -1
  74. package/ui-dist/assets/stateDiagram-v2-FVOUBMTO-CMlQFIdt.js +1 -0
  75. package/ui-dist/assets/{timeline-definition-YZTLITO2-CG6r3GP4.js → timeline-definition-YZTLITO2-B9x3pkC2.js} +1 -1
  76. package/ui-dist/assets/{treemap-KZPCXAKY-DCX4FLGH.js → treemap-KZPCXAKY-Bxg-dvKE.js} +1 -1
  77. package/ui-dist/assets/{vennDiagram-LZ73GAT5-CpbbhHdY.js → vennDiagram-LZ73GAT5-CjoSQirJ.js} +1 -1
  78. package/ui-dist/assets/{xychartDiagram-JWTSCODW-Biq5EV_L.js → xychartDiagram-JWTSCODW-BlBmxd8k.js} +1 -1
  79. package/ui-dist/index.html +2 -2
  80. package/ui-dist/assets/channel-BExT12GI.js +0 -1
  81. package/ui-dist/assets/classDiagram-VBA2DB6C-B3FSZmLP.js +0 -1
  82. package/ui-dist/assets/classDiagram-v2-RAHNMMFH-B3FSZmLP.js +0 -1
  83. package/ui-dist/assets/clone-DxXNeJhJ.js +0 -1
  84. package/ui-dist/assets/index-2Hx2TlnA.css +0 -1
  85. package/ui-dist/assets/index-wzjO7KZw.js +0 -1343
  86. 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":"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"}
1
+ {"version":3,"file":"register-api-routes.js","sourceRoot":"","sources":["../../src/bootstrap/register-api-routes.ts"],"names":[],"mappings":"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"}
@@ -1,3 +1,4 @@
1
1
  import type { Db } from "@rudderhq/db";
2
- export declare function agentRoutes(db: Db): import("express-serve-static-core").Router;
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":"AAGA,OAAO,KAAK,EAAE,EAAE,EAAE,MAAM,cAAc,CAAC;AA4DvC,wBAAgB,WAAW,CAAC,EAAE,EAAE,EAAE,8CAy1EjC"}
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"}
@@ -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
- export function agentRoutes(db) {
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: {