robotrock 1.3.4 → 1.4.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (80) hide show
  1. package/README.md +11 -1
  2. package/dist/agent-admin.d.ts +5 -0
  3. package/dist/agent-admin.js +75 -2
  4. package/dist/agent-admin.js.map +1 -1
  5. package/dist/ai/index.d.ts +5 -5
  6. package/dist/ai/index.js +120 -4
  7. package/dist/ai/index.js.map +1 -1
  8. package/dist/ai/trigger.d.ts +3 -3
  9. package/dist/ai/trigger.js +120 -4
  10. package/dist/ai/trigger.js.map +1 -1
  11. package/dist/ai/workflow.d.ts +3 -3
  12. package/dist/ai/workflow.js +120 -4
  13. package/dist/ai/workflow.js.map +1 -1
  14. package/dist/{client-CZ5eWH5v.d.ts → client-BxbxttFH.d.ts} +19 -1
  15. package/dist/eve/agent/index.d.ts +4 -4
  16. package/dist/eve/agent/index.js +565 -261
  17. package/dist/eve/agent/index.js.map +1 -1
  18. package/dist/eve/index.d.ts +4 -4
  19. package/dist/eve/index.js +384 -7
  20. package/dist/eve/index.js.map +1 -1
  21. package/dist/eve/tools/admin/assign-tasks.d.ts +40 -19
  22. package/dist/eve/tools/admin/assign-tasks.js +322 -25
  23. package/dist/eve/tools/admin/assign-tasks.js.map +1 -1
  24. package/dist/eve/tools/admin/get-workspace-usage.d.ts +71 -0
  25. package/dist/eve/tools/admin/get-workspace-usage.js +1353 -0
  26. package/dist/eve/tools/admin/get-workspace-usage.js.map +1 -0
  27. package/dist/eve/tools/admin/manage-groups.d.ts +122 -7
  28. package/dist/eve/tools/admin/manage-groups.js +338 -31
  29. package/dist/eve/tools/admin/manage-groups.js.map +1 -1
  30. package/dist/eve/tools/admin/manage-team-members.d.ts +86 -7
  31. package/dist/eve/tools/admin/manage-team-members.js +306 -16
  32. package/dist/eve/tools/admin/manage-team-members.js.map +1 -1
  33. package/dist/eve/tools/admin/query-tasks.d.ts +85 -10
  34. package/dist/eve/tools/admin/query-tasks.js +351 -40
  35. package/dist/eve/tools/admin/query-tasks.js.map +1 -1
  36. package/dist/eve/tools/catalog/generate-image.d.ts +64 -0
  37. package/dist/eve/tools/catalog/generate-image.js +2065 -0
  38. package/dist/eve/tools/catalog/generate-image.js.map +1 -0
  39. package/dist/eve/tools/catalog/generate-random-chart.d.ts +71 -0
  40. package/dist/eve/tools/catalog/generate-random-chart.js +372 -0
  41. package/dist/eve/tools/catalog/generate-random-chart.js.map +1 -0
  42. package/dist/eve/tools/catalog/search-products.d.ts +36 -43
  43. package/dist/eve/tools/catalog/search-products.js +241 -6
  44. package/dist/eve/tools/catalog/search-products.js.map +1 -1
  45. package/dist/eve/tools/identity/index.d.ts +2 -1
  46. package/dist/eve/tools/identity/index.js +26 -6
  47. package/dist/eve/tools/identity/index.js.map +1 -1
  48. package/dist/eve/tools/identity/my-access.d.ts +90 -5
  49. package/dist/eve/tools/identity/my-access.js +26 -6
  50. package/dist/eve/tools/identity/my-access.js.map +1 -1
  51. package/dist/eve/tools/identity/whoami.d.ts +1 -1
  52. package/dist/eve/tools/identity/whoami.js.map +1 -1
  53. package/dist/eve/tools/inbox/create-task.d.ts +1 -1
  54. package/dist/eve/tools/inbox/create-task.js +119 -2
  55. package/dist/eve/tools/inbox/create-task.js.map +1 -1
  56. package/dist/eve/tools/inbox/index.d.ts +1 -1
  57. package/dist/eve/tools/inbox/index.js +119 -2
  58. package/dist/eve/tools/inbox/index.js.map +1 -1
  59. package/dist/eve/tools/index.d.ts +5 -2
  60. package/dist/eve/tools/index.js +908 -115
  61. package/dist/eve/tools/index.js.map +1 -1
  62. package/dist/index-Drj0Rzf_.d.ts +905 -0
  63. package/dist/index.d.ts +5 -5
  64. package/dist/index.js +316 -13
  65. package/dist/index.js.map +1 -1
  66. package/dist/schemas/index.js +67 -1
  67. package/dist/schemas/index.js.map +1 -1
  68. package/dist/{tool-approval-bridge-DnGaRES4.d.ts → tool-approval-bridge-Cz7qQUpw.d.ts} +1 -1
  69. package/dist/{tool-reply-guidance-C3qrT1In.d.ts → tool-reply-guidance-CJko9liH.d.ts} +5 -2
  70. package/dist/tool-result-ui-meta-KT0VafEO.d.ts +52 -0
  71. package/dist/trigger/index.d.ts +1 -1
  72. package/dist/trigger/index.js +118 -2
  73. package/dist/trigger/index.js.map +1 -1
  74. package/dist/{trigger--qTIK0s6.d.ts → trigger-C1ooSegc.d.ts} +2 -2
  75. package/dist/workflow/index.d.ts +1 -1
  76. package/dist/workflow/index.js +118 -2
  77. package/dist/workflow/index.js.map +1 -1
  78. package/package.json +21 -4
  79. package/dist/index-Blq0XoAr.d.ts +0 -204
  80. package/dist/tool-ui-hint-CMpug5sC.d.ts +0 -13
@@ -551,6 +551,190 @@ function parseEveAskQuestionToolOutput(output) {
551
551
  return { ...optionId ? { optionId } : {}, ...text ? { text } : {} };
552
552
  }
553
553
 
554
+ // src/eve/tool-result-ui-meta.ts
555
+ var TOOL_RESULT_UI_ENTITY_ID_RE = /^[a-z][a-z0-9_]{0,63}$/;
556
+
557
+ // src/eve/entity-schemas.ts
558
+ import { z } from "zod";
559
+ var toolResultUiMetaSchema = z.object({
560
+ present: z.boolean().optional(),
561
+ entity: z.string().regex(TOOL_RESULT_UI_ENTITY_ID_RE).optional(),
562
+ rowsPath: z.string().min(1).optional(),
563
+ layout: z.enum(["list", "chart", "table"]).optional()
564
+ }).strict();
565
+ var agentOnlyFields = {
566
+ replyGuidance: z.string().optional(),
567
+ ui: toolResultUiMetaSchema.optional(),
568
+ uiHint: z.enum(["list", "chart", "table"]).optional()
569
+ };
570
+ function withAgentOnlyFields(shape) {
571
+ return z.object({
572
+ ...shape,
573
+ ...agentOnlyFields
574
+ });
575
+ }
576
+ var productEntityRowSchema = z.object({
577
+ id: z.string().min(1),
578
+ name: z.string().min(1),
579
+ price: z.number(),
580
+ currency: z.string().min(1),
581
+ inStock: z.boolean(),
582
+ url: z.string().min(1)
583
+ });
584
+ var metricPointEntityRowSchema = z.object({
585
+ date: z.string().optional(),
586
+ category: z.string().optional(),
587
+ label: z.string().optional()
588
+ }).catchall(z.union([z.string(), z.number()]));
589
+ var memberEntityRowSchema = z.object({
590
+ name: z.string(),
591
+ email: z.string(),
592
+ role: z.string(),
593
+ membershipKind: z.string(),
594
+ profilePictureUrl: z.string().nullable()
595
+ });
596
+ var taskEntityRowSchema = z.object({
597
+ id: z.string().min(1),
598
+ name: z.string().min(1),
599
+ status: z.string().min(1),
600
+ type: z.string().nullable(),
601
+ description: z.string().nullable(),
602
+ validUntil: z.number(),
603
+ createdAt: z.number(),
604
+ url: z.string().min(1),
605
+ threadPriority: z.string().nullable().optional()
606
+ });
607
+ var groupEntityRowSchema = z.object({
608
+ name: z.string().min(1),
609
+ slug: z.string().min(1),
610
+ description: z.string().nullable(),
611
+ memberCount: z.number().nullable(),
612
+ url: z.string().min(1)
613
+ });
614
+ var groupDetailEntitySchema = z.object({
615
+ name: z.string().min(1),
616
+ slug: z.string().min(1),
617
+ description: z.string().nullable(),
618
+ url: z.string().min(1),
619
+ members: z.array(
620
+ z.object({
621
+ name: z.string(),
622
+ email: z.string(),
623
+ profilePictureUrl: z.string().nullable()
624
+ })
625
+ )
626
+ });
627
+ var statusEntityRowSchema = z.object({
628
+ id: z.string().min(1),
629
+ name: z.string().min(1),
630
+ status: z.string().min(1),
631
+ url: z.string().min(1),
632
+ type: z.string().nullable().optional(),
633
+ description: z.string().nullable().optional()
634
+ });
635
+ var agentAdminErrorResultSchema = z.object({
636
+ ok: z.literal(false),
637
+ status: z.number().optional(),
638
+ message: z.string(),
639
+ response: z.unknown().optional()
640
+ });
641
+ var agentAdminMutationResultSchema = z.object({
642
+ ...agentOnlyFields
643
+ }).passthrough();
644
+ var searchProductsOutputSchema = withAgentOnlyFields({
645
+ items: z.array(productEntityRowSchema)
646
+ });
647
+ var generateRandomChartOutputSchema = withAgentOnlyFields({
648
+ title: z.string().min(1),
649
+ axis: z.enum(["time", "category"]),
650
+ series: z.array(metricPointEntityRowSchema)
651
+ });
652
+ var generateImageOutputSchema = withAgentOnlyFields({
653
+ prompt: z.string().min(1),
654
+ mediaType: z.string().min(1),
655
+ model: z.string().min(1),
656
+ storageId: z.string().min(1),
657
+ url: z.string().min(1),
658
+ /** @deprecated Legacy sessions only — prefer storageId/url. */
659
+ base64: z.string().min(1).optional()
660
+ });
661
+ var manageTeamMembersListOutputSchema = withAgentOnlyFields({
662
+ members: z.array(memberEntityRowSchema)
663
+ });
664
+ var manageTeamMembersDetailOutputSchema = withAgentOnlyFields(
665
+ memberEntityRowSchema.shape
666
+ );
667
+ var manageTeamMembersOutputSchema = z.union([
668
+ manageTeamMembersListOutputSchema,
669
+ manageTeamMembersDetailOutputSchema,
670
+ agentAdminMutationResultSchema,
671
+ agentAdminErrorResultSchema
672
+ ]);
673
+ var manageGroupsListOutputSchema = withAgentOnlyFields({
674
+ groups: z.array(groupEntityRowSchema)
675
+ });
676
+ var manageGroupsDetailOutputSchema = withAgentOnlyFields(
677
+ groupDetailEntitySchema.shape
678
+ );
679
+ var manageGroupsSummaryOutputSchema = withAgentOnlyFields(
680
+ groupEntityRowSchema.shape
681
+ );
682
+ var manageGroupsOutputSchema = z.union([
683
+ manageGroupsListOutputSchema,
684
+ manageGroupsDetailOutputSchema,
685
+ manageGroupsSummaryOutputSchema,
686
+ agentAdminMutationResultSchema,
687
+ agentAdminErrorResultSchema
688
+ ]);
689
+ var queryTasksListOutputSchema = withAgentOnlyFields({
690
+ items: z.array(taskEntityRowSchema),
691
+ nextCursor: z.string().nullable().optional()
692
+ });
693
+ var queryTasksDetailOutputSchema = withAgentOnlyFields({
694
+ id: z.string().nullable(),
695
+ status: z.string().nullable(),
696
+ type: z.string().nullable(),
697
+ name: z.string().nullable(),
698
+ description: z.string().nullable(),
699
+ validUntil: z.number().nullable(),
700
+ createdAt: z.number().nullable(),
701
+ url: z.string().min(1).nullable()
702
+ });
703
+ var queryTasksOutputSchema = z.union([
704
+ queryTasksListOutputSchema,
705
+ queryTasksDetailOutputSchema,
706
+ agentAdminErrorResultSchema
707
+ ]);
708
+ var assignTasksOutputSchema = z.union([
709
+ withAgentOnlyFields({
710
+ results: z.array(statusEntityRowSchema)
711
+ }),
712
+ agentAdminErrorResultSchema
713
+ ]);
714
+ var workspaceUsageEntitySchema = z.object({
715
+ workspace: z.string(),
716
+ plan: z.string(),
717
+ planType: z.string(),
718
+ trialState: z.string(),
719
+ daysRemaining: z.number().nullable(),
720
+ isPaidPro: z.boolean(),
721
+ subscriptionStatus: z.string(),
722
+ tasksToday: z.string(),
723
+ tasksResetAt: z.string(),
724
+ openTasks: z.number(),
725
+ totalTasks: z.number(),
726
+ seats: z.string(),
727
+ groups: z.string(),
728
+ apiKeys: z.string(),
729
+ rateLimitPerSecond: z.number()
730
+ });
731
+ var getWorkspaceUsageOutputSchema = z.union([
732
+ withAgentOnlyFields({
733
+ usage: workspaceUsageEntitySchema
734
+ }),
735
+ agentAdminErrorResultSchema
736
+ ]);
737
+
554
738
  // src/eve/index.ts
555
739
  var ROBOTROCK_READY_HOOK_SLUG = "robotrock-ready";
556
740
 
@@ -865,10 +1049,10 @@ function robotrockEveChannel(options) {
865
1049
  }
866
1050
 
867
1051
  // src/schemas/index.ts
868
- import { z as z4 } from "zod";
1052
+ import { z as z5 } from "zod";
869
1053
 
870
1054
  // ../core/src/schemas/task.ts
871
- import { z } from "zod";
1055
+ import { z as z2 } from "zod";
872
1056
 
873
1057
  // ../core/src/schemas/context-urls.ts
874
1058
  function resolveLinkUrl(value) {
@@ -924,67 +1108,67 @@ function validateContextPublicUrls(context) {
924
1108
  }
925
1109
 
926
1110
  // ../core/src/schemas/task.ts
927
- var safeUrlSchema = z.string().refine((url) => isPublicHttpUrl(url), {
1111
+ var safeUrlSchema = z2.string().refine((url) => isPublicHttpUrl(url), {
928
1112
  message: PUBLIC_HTTP_URL_ERROR
929
1113
  });
930
- var handlerUrlSchema = z.string().refine((url) => isAllowedHandlerUrl(url), {
1114
+ var handlerUrlSchema = z2.string().refine((url) => isAllowedHandlerUrl(url), {
931
1115
  message: HANDLER_URL_ERROR
932
1116
  });
933
- var jsonSchema7Schema = z.custom(
1117
+ var jsonSchema7Schema = z2.custom(
934
1118
  (val) => typeof val === "object" && val !== null,
935
1119
  { message: "Must be a valid JSON Schema object" }
936
1120
  );
937
- var uiSchemaSchema = z.custom((val) => typeof val === "object" && val !== null, {
1121
+ var uiSchemaSchema = z2.custom((val) => typeof val === "object" && val !== null, {
938
1122
  message: "Must be a valid UiSchema object"
939
1123
  });
940
- var webhookHandlerSchema = z.object({
941
- type: z.literal("webhook"),
1124
+ var webhookHandlerSchema = z2.object({
1125
+ type: z2.literal("webhook"),
942
1126
  url: handlerUrlSchema,
943
- headers: z.record(z.string(), z.string())
1127
+ headers: z2.record(z2.string(), z2.string())
944
1128
  });
945
1129
  var triggerHandlerSchema = webhookHandlerSchema.extend({
946
- type: z.literal("trigger"),
947
- tokenId: z.string().min(1)
1130
+ type: z2.literal("trigger"),
1131
+ tokenId: z2.string().min(1)
948
1132
  });
949
- var handlerSchema = z.discriminatedUnion("type", [webhookHandlerSchema, triggerHandlerSchema]);
950
- var taskActionInputSchema = z.object({
951
- id: z.string().min(1),
952
- title: z.string().min(1),
953
- description: z.string().optional(),
1133
+ var handlerSchema = z2.discriminatedUnion("type", [webhookHandlerSchema, triggerHandlerSchema]);
1134
+ var taskActionInputSchema = z2.object({
1135
+ id: z2.string().min(1),
1136
+ title: z2.string().min(1),
1137
+ description: z2.string().optional(),
954
1138
  schema: jsonSchema7Schema.optional(),
955
1139
  ui: uiSchemaSchema.optional(),
956
- data: z.record(z.string(), z.unknown()).optional()
1140
+ data: z2.record(z2.string(), z2.unknown()).optional()
957
1141
  });
958
1142
  var taskActionSchema = taskActionInputSchema.extend({
959
1143
  // Optional handlers for this action - if present, must have at least 1
960
- handlers: z.array(handlerSchema).min(1).optional()
961
- });
962
- var uiFieldSchemaSchema = z.object({
963
- "ui:widget": z.string().optional(),
964
- "ui:title": z.string().optional(),
965
- "ui:description": z.string().optional(),
966
- "ui:options": z.record(z.string(), z.unknown()).optional(),
967
- items: z.lazy(() => z.record(z.string(), uiFieldSchemaSchema)).optional()
1144
+ handlers: z2.array(handlerSchema).min(1).optional()
1145
+ });
1146
+ var uiFieldSchemaSchema = z2.object({
1147
+ "ui:widget": z2.string().optional(),
1148
+ "ui:title": z2.string().optional(),
1149
+ "ui:description": z2.string().optional(),
1150
+ "ui:options": z2.record(z2.string(), z2.unknown()).optional(),
1151
+ items: z2.lazy(() => z2.record(z2.string(), uiFieldSchemaSchema)).optional()
968
1152
  }).passthrough();
969
- var contextUiSchema = z.record(z.string(), uiFieldSchemaSchema).optional();
970
- var contextDataSchema = z.object({
971
- data: z.record(z.string(), z.unknown()),
1153
+ var contextUiSchema = z2.record(z2.string(), uiFieldSchemaSchema).optional();
1154
+ var contextDataSchema = z2.object({
1155
+ data: z2.record(z2.string(), z2.unknown()),
972
1156
  ui: contextUiSchema
973
1157
  }).optional();
974
1158
  var TASK_CONTEXT_FORMAT_VERSION = 2;
975
- var taskContextObjectBaseSchema = z.object({
1159
+ var taskContextObjectBaseSchema = z2.object({
976
1160
  /** Source application id; omitted tasks are grouped in the default inbox. */
977
- app: z.string().min(1).optional(),
978
- type: z.string().min(1),
979
- name: z.string().min(1),
980
- description: z.string().optional(),
981
- validUntil: z.string().optional(),
1161
+ app: z2.string().min(1).optional(),
1162
+ type: z2.string().min(1),
1163
+ name: z2.string().min(1),
1164
+ description: z2.string().optional(),
1165
+ validUntil: z2.string().optional(),
982
1166
  context: contextDataSchema,
983
1167
  /** Task context wire format version. @default 2 */
984
- contextVersion: z.literal(2).optional(),
1168
+ contextVersion: z2.literal(2).optional(),
985
1169
  /** @deprecated Use `contextVersion`. Accepted on ingest only. */
986
- version: z.literal(2).optional(),
987
- actions: z.array(taskActionSchema).min(1, "At least one action is required")
1170
+ version: z2.literal(2).optional(),
1171
+ actions: z2.array(taskActionSchema).min(1, "At least one action is required")
988
1172
  });
989
1173
  function normalizeTaskContextVersion(data) {
990
1174
  const { version: legacyVersion, contextVersion, ...rest } = data;
@@ -1000,7 +1184,7 @@ function refineContextPublicUrls(data, ctx) {
1000
1184
  const error = validateContextPublicUrls(data.context);
1001
1185
  if (error) {
1002
1186
  ctx.addIssue({
1003
- code: z.ZodIssueCode.custom,
1187
+ code: z2.ZodIssueCode.custom,
1004
1188
  message: error,
1005
1189
  path: ["context"]
1006
1190
  });
@@ -1009,9 +1193,9 @@ function refineContextPublicUrls(data, ctx) {
1009
1193
  var taskContextSchema = taskContextObjectSchema.superRefine(
1010
1194
  refineContextPublicUrls
1011
1195
  );
1012
- var assignToSchema = z.object({
1013
- users: z.array(z.string().email()).optional(),
1014
- groups: z.array(z.string().min(1)).optional()
1196
+ var assignToSchema = z2.object({
1197
+ users: z2.array(z2.string().email()).optional(),
1198
+ groups: z2.array(z2.string().min(1)).optional()
1015
1199
  }).refine(
1016
1200
  (data) => {
1017
1201
  const groups = data.groups ?? [];
@@ -1022,7 +1206,7 @@ var assignToSchema = z.object({
1022
1206
  },
1023
1207
  { message: 'Cannot combine "all" with other group slugs' }
1024
1208
  );
1025
- var threadUpdateMessageSchema = z.string().min(1).max(500);
1209
+ var threadUpdateMessageSchema = z2.string().min(1).max(500);
1026
1210
  var threadUpdateStatuses = [
1027
1211
  "info",
1028
1212
  "queued",
@@ -1032,16 +1216,16 @@ var threadUpdateStatuses = [
1032
1216
  "failed",
1033
1217
  "cancelled"
1034
1218
  ];
1035
- var threadUpdateStatusSchema = z.enum(threadUpdateStatuses);
1036
- var threadUpdateInputSchema = z.object({
1219
+ var threadUpdateStatusSchema = z2.enum(threadUpdateStatuses);
1220
+ var threadUpdateInputSchema = z2.object({
1037
1221
  message: threadUpdateMessageSchema,
1038
1222
  status: threadUpdateStatusSchema.optional()
1039
1223
  });
1040
1224
  var taskPriorities = ["low", "normal", "high", "urgent"];
1041
- var taskPrioritySchema = z.enum(taskPriorities);
1042
- var agentTelemetrySchema = z.object({
1225
+ var taskPrioritySchema = z2.enum(taskPriorities);
1226
+ var agentTelemetrySchema = z2.object({
1043
1227
  /** Agent or app version (semver, git SHA, deploy tag — caller-defined). */
1044
- version: z.string().min(1)
1228
+ version: z2.string().min(1)
1045
1229
  });
1046
1230
  var createTaskBodySchema = taskContextObjectBaseSchema.extend({
1047
1231
  assignTo: assignToSchema.optional(),
@@ -1049,7 +1233,7 @@ var createTaskBodySchema = taskContextObjectBaseSchema.extend({
1049
1233
  * Groups related tasks together. When omitted, the server generates one and
1050
1234
  * returns it so the caller can reuse it on later tasks in the same thread.
1051
1235
  */
1052
- threadId: z.string().min(1).optional(),
1236
+ threadId: z2.string().min(1).optional(),
1053
1237
  /**
1054
1238
  * Optional thread priority. When set, applies to the whole thread and
1055
1239
  * overwrites any previous priority. Omit on later tasks to leave unchanged.
@@ -1063,280 +1247,346 @@ var createTaskBodySchema = taskContextObjectBaseSchema.extend({
1063
1247
  /** Agent release version — not shown in inbox UI. */
1064
1248
  agent: agentTelemetrySchema.optional()
1065
1249
  }).transform(normalizeTaskContextVersion).superRefine(refineContextPublicUrls);
1066
- var agentChatSeedActionSchema = z.object({
1250
+ var agentChatSeedActionSchema = z2.object({
1067
1251
  /** Stable action id echoed back on submit; auto-derived from title when omitted. */
1068
- id: z.string().min(1).optional(),
1069
- title: z.string().min(1),
1070
- description: z.string().optional(),
1252
+ id: z2.string().min(1).optional(),
1253
+ title: z2.string().min(1),
1254
+ description: z2.string().optional(),
1071
1255
  /** JSON Schema object for the form fields. */
1072
- schema: z.record(z.string(), z.unknown()).optional(),
1256
+ schema: z2.record(z2.string(), z2.unknown()).optional(),
1073
1257
  /** RJSF ui schema overrides (ui:widget, ui:enumNames, etc.). */
1074
- ui: z.record(z.string(), z.unknown()).optional(),
1258
+ ui: z2.record(z2.string(), z2.unknown()).optional(),
1075
1259
  /** Optional default field values. */
1076
- data: z.record(z.string(), z.unknown()).optional()
1260
+ data: z2.record(z2.string(), z2.unknown()).optional()
1077
1261
  });
1078
- var agentChatSeedMessageSchema = z.object({
1079
- role: z.enum(["user", "assistant"]),
1080
- text: z.string().min(1),
1262
+ var agentChatSeedMessageSchema = z2.object({
1263
+ role: z2.enum(["user", "assistant"]),
1264
+ text: z2.string().min(1),
1081
1265
  /** Optional display-name override for the message sender. */
1082
- senderName: z.string().min(1).optional(),
1266
+ senderName: z2.string().min(1).optional(),
1083
1267
  /**
1084
1268
  * Optional structured input request rendered as a styled RobotRock action
1085
1269
  * widget below the message text. Use this instead of asking the user to reply
1086
1270
  * in plain text so the request is always a proper action form.
1087
1271
  */
1088
- requestActionInput: z.object({
1089
- prompt: z.string().optional(),
1272
+ requestActionInput: z2.object({
1273
+ prompt: z2.string().optional(),
1090
1274
  action: agentChatSeedActionSchema
1091
1275
  }).optional()
1092
1276
  });
1093
- var eveAgentChatTransportSchema = z.object({
1094
- kind: z.literal("eve"),
1095
- chatId: z.string().min(1),
1096
- baseUrl: z.string().url(),
1097
- sessionId: z.string().optional(),
1098
- continuationToken: z.string().optional(),
1099
- streamIndex: z.number().int().nonnegative().optional(),
1100
- isStreaming: z.boolean().optional()
1277
+ var eveAgentChatTransportSchema = z2.object({
1278
+ kind: z2.literal("eve"),
1279
+ chatId: z2.string().min(1),
1280
+ baseUrl: z2.string().url(),
1281
+ sessionId: z2.string().optional(),
1282
+ continuationToken: z2.string().optional(),
1283
+ streamIndex: z2.number().int().nonnegative().optional(),
1284
+ isStreaming: z2.boolean().optional()
1101
1285
  });
1102
- var createAgentChatBodySchema = z.object({
1286
+ var createAgentChatBodySchema = z2.object({
1103
1287
  /** Agent id (eve agent name). Required unless `parentChatId` is set. */
1104
- agentIdentifier: z.string().min(1).optional(),
1288
+ agentIdentifier: z2.string().min(1).optional(),
1105
1289
  /** Inherit tenant/connection/agent from an existing chat (agent-spawned chats). */
1106
- parentChatId: z.string().min(1).optional(),
1290
+ parentChatId: z2.string().min(1).optional(),
1107
1291
  /** Convex tenantEveConnections id; resolved from the tenant when omitted. */
1108
- eveConnectionId: z.string().min(1).optional(),
1292
+ eveConnectionId: z2.string().min(1).optional(),
1109
1293
  /** Source application id; groups the chat under an inbox section. */
1110
- app: z.string().min(1).optional(),
1294
+ app: z2.string().min(1).optional(),
1111
1295
  /** Email of the user who owns the chat. Required unless `parentChatId` is set. */
1112
- ownerEmail: z.string().email().optional(),
1113
- title: z.string().min(1),
1114
- messages: z.array(agentChatSeedMessageSchema).default([]),
1296
+ ownerEmail: z2.string().email().optional(),
1297
+ title: z2.string().min(1),
1298
+ messages: z2.array(agentChatSeedMessageSchema).default([]),
1115
1299
  /** Provenance label stored on the session ("cron" | "agent" | ...). */
1116
- source: z.string().min(1).optional()
1300
+ source: z2.string().min(1).optional()
1117
1301
  }).refine((data) => Boolean(data.agentIdentifier || data.parentChatId), {
1118
1302
  message: "Provide either agentIdentifier or parentChatId"
1119
1303
  }).refine((data) => Boolean(data.ownerEmail || data.parentChatId), {
1120
1304
  message: "Provide ownerEmail unless parentChatId is set"
1121
1305
  });
1122
- var agentChatAuditToolBodySchema = z.object({
1123
- eveSessionId: z.string().min(1),
1124
- userId: z.string().min(1),
1125
- toolCallId: z.string().min(1),
1126
- toolName: z.string().min(1),
1127
- input: z.record(z.string(), z.unknown()).default({}),
1128
- success: z.boolean(),
1129
- status: z.enum(["completed", "failed", "rejected"]),
1130
- error: z.string().optional(),
1131
- idempotencyKey: z.string().optional()
1132
- });
1133
- var agentChatAuditInputBodySchema = z.object({
1134
- eveSessionId: z.string().min(1),
1135
- userId: z.string().min(1),
1136
- actionId: z.string().min(1),
1137
- actionTitle: z.string().optional(),
1138
- prompt: z.string().optional(),
1139
- data: z.record(z.string(), z.unknown()).optional(),
1140
- idempotencyKey: z.string().optional(),
1306
+ var agentChatAuditToolBodySchema = z2.object({
1307
+ eveSessionId: z2.string().min(1),
1308
+ userId: z2.string().min(1),
1309
+ toolCallId: z2.string().min(1),
1310
+ toolName: z2.string().min(1),
1311
+ input: z2.record(z2.string(), z2.unknown()).default({}),
1312
+ success: z2.boolean(),
1313
+ status: z2.enum(["completed", "failed", "rejected"]),
1314
+ error: z2.string().optional(),
1315
+ idempotencyKey: z2.string().optional()
1316
+ });
1317
+ var agentChatAuditInputBodySchema = z2.object({
1318
+ eveSessionId: z2.string().min(1),
1319
+ userId: z2.string().min(1),
1320
+ actionId: z2.string().min(1),
1321
+ actionTitle: z2.string().optional(),
1322
+ prompt: z2.string().optional(),
1323
+ data: z2.record(z2.string(), z2.unknown()).optional(),
1324
+ idempotencyKey: z2.string().optional(),
1141
1325
  /** Eve input request id — used to merge staged HITL metadata. */
1142
- requestId: z.string().optional(),
1326
+ requestId: z2.string().optional(),
1143
1327
  /** Eve tool call id — fallback lookup for staged HITL metadata. */
1144
- toolCallId: z.string().optional()
1328
+ toolCallId: z2.string().optional()
1145
1329
  });
1146
- var eveHitlStagedOptionSchema = z.object({
1147
- id: z.string(),
1148
- label: z.string()
1330
+ var eveHitlStagedOptionSchema = z2.object({
1331
+ id: z2.string(),
1332
+ label: z2.string()
1149
1333
  });
1150
- var agentChatStageHitlBodySchema = z.object({
1151
- eveSessionId: z.string().min(1),
1152
- requests: z.array(
1153
- z.object({
1154
- requestId: z.string().min(1),
1155
- toolCallId: z.string().min(1),
1156
- toolName: z.string().min(1),
1157
- prompt: z.string().min(1),
1158
- display: z.enum(["confirmation", "select", "text"]).optional(),
1159
- allowFreeform: z.boolean().optional(),
1160
- options: z.array(eveHitlStagedOptionSchema).optional(),
1161
- toolInput: z.record(z.string(), z.unknown()).optional()
1334
+ var agentChatStageHitlBodySchema = z2.object({
1335
+ eveSessionId: z2.string().min(1),
1336
+ requests: z2.array(
1337
+ z2.object({
1338
+ requestId: z2.string().min(1),
1339
+ toolCallId: z2.string().min(1),
1340
+ toolName: z2.string().min(1),
1341
+ prompt: z2.string().min(1),
1342
+ display: z2.enum(["confirmation", "select", "text"]).optional(),
1343
+ allowFreeform: z2.boolean().optional(),
1344
+ options: z2.array(eveHitlStagedOptionSchema).optional(),
1345
+ toolInput: z2.record(z2.string(), z2.unknown()).optional()
1162
1346
  })
1163
1347
  )
1164
1348
  });
1165
- var agentChatLinkTaskBodySchema = z.object({
1166
- eveSessionId: z.string().min(1),
1167
- publicTaskId: z.string().min(1),
1168
- toolCallId: z.string().min(1)
1349
+ var agentChatLinkTaskBodySchema = z2.object({
1350
+ eveSessionId: z2.string().min(1),
1351
+ publicTaskId: z2.string().min(1),
1352
+ toolCallId: z2.string().min(1)
1353
+ });
1354
+ var AGENT_FILE_TAGS_MAX = 20;
1355
+ var AGENT_FILE_TAG_MAX_LENGTH = 64;
1356
+ function normalizeAgentFileTags(tags) {
1357
+ if (!tags?.length) return void 0;
1358
+ const seen = /* @__PURE__ */ new Set();
1359
+ const out = [];
1360
+ for (const raw of tags) {
1361
+ const tag = raw.trim().toLowerCase().slice(0, AGENT_FILE_TAG_MAX_LENGTH);
1362
+ if (!tag || seen.has(tag)) continue;
1363
+ seen.add(tag);
1364
+ out.push(tag);
1365
+ if (out.length >= AGENT_FILE_TAGS_MAX) break;
1366
+ }
1367
+ return out.length > 0 ? out : void 0;
1368
+ }
1369
+ var agentChatUploadImageBodySchema = z2.object({
1370
+ mediaType: z2.string().min(1),
1371
+ /** Raw base64 (no data: URL prefix). */
1372
+ base64: z2.string().min(1),
1373
+ chatId: z2.string().min(1).optional(),
1374
+ publicTaskId: z2.string().min(1).optional(),
1375
+ source: z2.string().min(1).optional(),
1376
+ /** Display / search name (e.g. `sunset-robot.png`). */
1377
+ filename: z2.string().min(1).max(255).optional(),
1378
+ /** Human-readable description (e.g. generation prompt). */
1379
+ description: z2.string().min(1).max(2e3).optional(),
1380
+ /**
1381
+ * Optional labels for later grouping/filtering.
1382
+ * Normalized to lowercase trimmed unique strings (max 20, 64 chars each).
1383
+ */
1384
+ tags: z2.array(z2.string().min(1).max(AGENT_FILE_TAG_MAX_LENGTH)).max(AGENT_FILE_TAGS_MAX).optional().transform((tags) => normalizeAgentFileTags(tags))
1385
+ }).refine((data) => Boolean(data.chatId || data.publicTaskId), {
1386
+ message: "Provide chatId and/or publicTaskId"
1169
1387
  });
1170
1388
 
1171
1389
  // ../core/src/schemas/tool-result-display.ts
1172
- import { z as z2 } from "zod";
1173
- var toolDisplayMetadataSchema = z2.object({
1174
- widget: z2.string().optional(),
1175
- title: z2.string().optional(),
1176
- description: z2.string().optional()
1390
+ import { z as z3 } from "zod";
1391
+ var toolDisplayMetadataSchema = z3.object({
1392
+ widget: z3.string().optional(),
1393
+ title: z3.string().optional(),
1394
+ description: z3.string().optional()
1177
1395
  });
1178
- var toolDisplayEnvelopeSchema = z2.object({
1396
+ var toolDisplayEnvelopeSchema = z3.object({
1179
1397
  display: toolDisplayMetadataSchema.optional(),
1180
- data: z2.record(z2.string(), z2.unknown()),
1181
- ui: z2.record(
1182
- z2.string(),
1183
- z2.object({
1184
- "ui:widget": z2.string().optional(),
1185
- "ui:title": z2.string().optional(),
1186
- "ui:description": z2.string().optional(),
1187
- "ui:options": z2.record(z2.string(), z2.unknown()).optional()
1398
+ data: z3.record(z3.string(), z3.unknown()),
1399
+ ui: z3.record(
1400
+ z3.string(),
1401
+ z3.object({
1402
+ "ui:widget": z3.string().optional(),
1403
+ "ui:title": z3.string().optional(),
1404
+ "ui:description": z3.string().optional(),
1405
+ "ui:options": z3.record(z3.string(), z3.unknown()).optional()
1188
1406
  }).passthrough()
1189
1407
  ).optional()
1190
1408
  });
1191
1409
 
1192
1410
  // ../core/src/schemas/agent-admin.ts
1193
- import { z as z3 } from "zod";
1194
- var tenantRoleSchema = z3.enum(["admin", "member"]);
1195
- var agentAdminUserSchema = z3.object({
1196
- id: z3.string(),
1197
- email: z3.string().email(),
1198
- name: z3.string()
1199
- });
1200
- var agentAdminMemberSchema = z3.object({
1201
- userId: z3.string(),
1202
- role: z3.string(),
1203
- membershipKind: z3.enum(["team", "assignee"]),
1204
- hasLoggedIn: z3.boolean(),
1411
+ import { z as z4 } from "zod";
1412
+ var tenantRoleSchema = z4.enum(["admin", "member"]);
1413
+ var agentAdminUserSchema = z4.object({
1414
+ id: z4.string(),
1415
+ email: z4.string().email(),
1416
+ name: z4.string(),
1417
+ profilePictureUrl: z4.string().nullable().optional()
1418
+ });
1419
+ var agentAdminMemberSchema = z4.object({
1420
+ userId: z4.string(),
1421
+ role: z4.string(),
1422
+ membershipKind: z4.enum(["team", "assignee"]),
1423
+ hasLoggedIn: z4.boolean(),
1205
1424
  user: agentAdminUserSchema
1206
1425
  });
1207
- var agentAdminGroupSchema = z3.object({
1208
- id: z3.string(),
1209
- name: z3.string(),
1210
- slug: z3.string(),
1211
- description: z3.string().nullable(),
1212
- memberCount: z3.number().optional()
1426
+ var agentAdminGroupSchema = z4.object({
1427
+ id: z4.string(),
1428
+ name: z4.string(),
1429
+ slug: z4.string(),
1430
+ description: z4.string().nullable(),
1431
+ memberCount: z4.number().optional()
1213
1432
  });
1214
1433
  var agentAdminGroupDetailSchema = agentAdminGroupSchema.extend({
1215
- members: z3.array(
1216
- z3.object({
1217
- userId: z3.string(),
1434
+ members: z4.array(
1435
+ z4.object({
1436
+ userId: z4.string(),
1218
1437
  user: agentAdminUserSchema
1219
1438
  })
1220
1439
  )
1221
1440
  });
1222
- var agentAdminTaskSummarySchema = z3.object({
1223
- id: z3.string(),
1224
- convexId: z3.string(),
1225
- status: z3.string(),
1226
- type: z3.string().nullable(),
1227
- name: z3.string().nullable(),
1228
- description: z3.string().nullable(),
1229
- validUntil: z3.number(),
1230
- createdAt: z3.number(),
1231
- threadPriority: z3.string().nullable(),
1232
- handledByUserId: z3.string().nullable()
1233
- });
1234
- var inviteMemberBodySchema = z3.object({
1235
- email: z3.string().email(),
1441
+ var agentAdminTaskSummarySchema = z4.object({
1442
+ id: z4.string(),
1443
+ convexId: z4.string(),
1444
+ status: z4.string(),
1445
+ type: z4.string().nullable(),
1446
+ name: z4.string().nullable(),
1447
+ description: z4.string().nullable(),
1448
+ validUntil: z4.number(),
1449
+ createdAt: z4.number(),
1450
+ threadPriority: z4.string().nullable(),
1451
+ handledByUserId: z4.string().nullable()
1452
+ });
1453
+ var inviteMemberBodySchema = z4.object({
1454
+ email: z4.string().email(),
1236
1455
  role: tenantRoleSchema.optional()
1237
1456
  });
1238
- var updateMemberRoleBodySchema = z3.object({
1457
+ var updateMemberRoleBodySchema = z4.object({
1239
1458
  role: tenantRoleSchema
1240
1459
  });
1241
- var createGroupBodySchema = z3.object({
1242
- name: z3.string().min(1),
1243
- description: z3.string().optional()
1460
+ var createGroupBodySchema = z4.object({
1461
+ name: z4.string().min(1),
1462
+ description: z4.string().optional()
1244
1463
  });
1245
- var updateGroupBodySchema = z3.object({
1246
- name: z3.string().min(1).optional(),
1247
- description: z3.string().optional()
1464
+ var updateGroupBodySchema = z4.object({
1465
+ name: z4.string().min(1).optional(),
1466
+ description: z4.string().optional()
1467
+ });
1468
+ var addGroupMemberBodySchema = z4.object({
1469
+ userId: z4.string().min(1).describe("Convex user id or member email.")
1470
+ });
1471
+ var listTasksQuerySchema = z4.object({
1472
+ statusFilter: z4.enum(["all", "open", "handled", "expired"]).optional(),
1473
+ typeFilter: z4.string().optional(),
1474
+ appFilter: z4.string().optional(),
1475
+ sortField: z4.enum(["type", "date", "status", "validUntil"]).optional(),
1476
+ sortDirection: z4.enum(["asc", "desc"]).optional(),
1477
+ limit: z4.coerce.number().int().positive().max(100).optional(),
1478
+ cursor: z4.string().optional()
1479
+ });
1480
+ var searchTasksQuerySchema = z4.object({
1481
+ q: z4.string().min(1),
1482
+ limit: z4.coerce.number().int().positive().max(100).optional()
1483
+ });
1484
+ var assignTasksResultSchema = z4.object({
1485
+ taskId: z4.string(),
1486
+ success: z4.boolean(),
1487
+ message: z4.string().optional(),
1488
+ name: z4.string().nullable().optional(),
1489
+ description: z4.string().nullable().optional(),
1490
+ type: z4.string().nullable().optional()
1248
1491
  });
1249
- var addGroupMemberBodySchema = z3.object({
1250
- userId: z3.string().min(1).describe("Convex user id or member email.")
1251
- });
1252
- var listTasksQuerySchema = z3.object({
1253
- statusFilter: z3.enum(["all", "open", "handled", "expired"]).optional(),
1254
- typeFilter: z3.string().optional(),
1255
- appFilter: z3.string().optional(),
1256
- sortField: z3.enum(["type", "date", "status", "validUntil"]).optional(),
1257
- sortDirection: z3.enum(["asc", "desc"]).optional(),
1258
- limit: z3.coerce.number().int().positive().max(100).optional(),
1259
- cursor: z3.string().optional()
1260
- });
1261
- var searchTasksQuerySchema = z3.object({
1262
- q: z3.string().min(1),
1263
- limit: z3.coerce.number().int().positive().max(100).optional()
1264
- });
1265
- var assignTasksResultSchema = z3.object({
1266
- taskId: z3.string(),
1267
- success: z3.boolean(),
1268
- message: z3.string().optional(),
1269
- name: z3.string().nullable().optional(),
1270
- description: z3.string().nullable().optional(),
1271
- type: z3.string().nullable().optional()
1272
- });
1273
- var assignTasksResponseSchema = z3.object({
1274
- results: z3.array(assignTasksResultSchema)
1275
- });
1276
- var assignTasksBodySchema = z3.object({
1277
- taskIds: z3.array(z3.string().min(1)).min(1).max(100),
1492
+ var assignTasksResponseSchema = z4.object({
1493
+ results: z4.array(assignTasksResultSchema)
1494
+ });
1495
+ var assignTasksBodySchema = z4.object({
1496
+ taskIds: z4.array(z4.string().min(1)).min(1).max(100),
1278
1497
  assignTo: assignToSchema.refine(
1279
1498
  (value) => (value.users?.length ?? 0) > 0 || (value.groups?.length ?? 0) > 0,
1280
1499
  { message: "assignTo needs at least one user email or group slug." }
1281
1500
  )
1282
1501
  });
1502
+ var agentAdminPlanLimitsSchema = z4.object({
1503
+ tasksPerDay: z4.number(),
1504
+ members: z4.number(),
1505
+ apiKeys: z4.number(),
1506
+ groups: z4.number(),
1507
+ auditLogRetention: z4.number(),
1508
+ rateLimitPerSecond: z4.number(),
1509
+ taskRetentionDays: z4.number()
1510
+ });
1511
+ var agentAdminUsageSchema = z4.object({
1512
+ workspace: z4.string(),
1513
+ planName: z4.string(),
1514
+ planType: z4.string(),
1515
+ trialState: z4.enum(["none", "active", "expired"]),
1516
+ daysRemaining: z4.number().nullable(),
1517
+ isPaidPro: z4.boolean(),
1518
+ subscriptionStatus: z4.string().nullable(),
1519
+ tasksToday: z4.number(),
1520
+ maxTasksPerDay: z4.number().nullable(),
1521
+ tasksResetAt: z4.number(),
1522
+ openTasks: z4.number(),
1523
+ totalTasks: z4.number(),
1524
+ seatsCurrent: z4.number(),
1525
+ seatsMax: z4.number().nullable(),
1526
+ groupsCurrent: z4.number(),
1527
+ groupsMax: z4.number().nullable(),
1528
+ apiKeysCurrent: z4.number(),
1529
+ apiKeysMax: z4.number().nullable(),
1530
+ rateLimitPerSecond: z4.number(),
1531
+ limits: agentAdminPlanLimitsSchema
1532
+ });
1283
1533
 
1284
1534
  // src/schemas/index.ts
1285
- var handlerUrlSchema2 = z4.string().refine((url) => isAllowedHandlerUrl(url), {
1535
+ var handlerUrlSchema2 = z5.string().refine((url) => isAllowedHandlerUrl(url), {
1286
1536
  message: HANDLER_URL_ERROR
1287
1537
  });
1288
- var jsonSchema7Schema2 = z4.custom(
1538
+ var jsonSchema7Schema2 = z5.custom(
1289
1539
  (val) => typeof val === "object" && val !== null,
1290
1540
  { message: "Must be a valid JSON Schema object" }
1291
1541
  );
1292
- var uiSchemaSchema2 = z4.custom((val) => typeof val === "object" && val !== null, {
1542
+ var uiSchemaSchema2 = z5.custom((val) => typeof val === "object" && val !== null, {
1293
1543
  message: "Must be a valid UiSchema object"
1294
1544
  });
1295
- var webhookHandlerSchema2 = z4.object({
1296
- type: z4.literal("webhook"),
1545
+ var webhookHandlerSchema2 = z5.object({
1546
+ type: z5.literal("webhook"),
1297
1547
  url: handlerUrlSchema2,
1298
- headers: z4.record(z4.string(), z4.string())
1548
+ headers: z5.record(z5.string(), z5.string())
1299
1549
  });
1300
1550
  var triggerHandlerSchema2 = webhookHandlerSchema2.extend({
1301
- type: z4.literal("trigger"),
1302
- tokenId: z4.string().min(1)
1303
- });
1304
- var handlerSchema2 = z4.discriminatedUnion("type", [webhookHandlerSchema2, triggerHandlerSchema2]);
1305
- var taskActionInputSchema2 = z4.object({
1306
- id: z4.string().min(1),
1307
- title: z4.string().min(1),
1308
- description: z4.string().optional(),
1551
+ type: z5.literal("trigger"),
1552
+ tokenId: z5.string().min(1)
1553
+ });
1554
+ var handlerSchema2 = z5.discriminatedUnion("type", [webhookHandlerSchema2, triggerHandlerSchema2]);
1555
+ var taskActionInputSchema2 = z5.object({
1556
+ id: z5.string().min(1),
1557
+ title: z5.string().min(1),
1558
+ description: z5.string().optional(),
1309
1559
  schema: jsonSchema7Schema2.optional(),
1310
1560
  ui: uiSchemaSchema2.optional(),
1311
- data: z4.record(z4.string(), z4.unknown()).optional()
1561
+ data: z5.record(z5.string(), z5.unknown()).optional()
1312
1562
  });
1313
1563
  var taskActionSchema2 = taskActionInputSchema2.extend({
1314
- handlers: z4.array(handlerSchema2).min(1).optional()
1315
- });
1316
- var uiFieldSchemaSchema2 = z4.object({
1317
- "ui:widget": z4.string().optional(),
1318
- "ui:title": z4.string().optional(),
1319
- "ui:description": z4.string().optional(),
1320
- "ui:options": z4.record(z4.string(), z4.unknown()).optional(),
1321
- items: z4.lazy(() => z4.record(z4.string(), uiFieldSchemaSchema2)).optional()
1564
+ handlers: z5.array(handlerSchema2).min(1).optional()
1565
+ });
1566
+ var uiFieldSchemaSchema2 = z5.object({
1567
+ "ui:widget": z5.string().optional(),
1568
+ "ui:title": z5.string().optional(),
1569
+ "ui:description": z5.string().optional(),
1570
+ "ui:options": z5.record(z5.string(), z5.unknown()).optional(),
1571
+ items: z5.lazy(() => z5.record(z5.string(), uiFieldSchemaSchema2)).optional()
1322
1572
  }).passthrough();
1323
- var contextUiSchema2 = z4.record(z4.string(), uiFieldSchemaSchema2).optional();
1324
- var contextDataSchema2 = z4.object({
1325
- data: z4.record(z4.string(), z4.unknown()),
1573
+ var contextUiSchema2 = z5.record(z5.string(), uiFieldSchemaSchema2).optional();
1574
+ var contextDataSchema2 = z5.object({
1575
+ data: z5.record(z5.string(), z5.unknown()),
1326
1576
  ui: contextUiSchema2
1327
1577
  }).optional();
1328
1578
  var TASK_CONTEXT_FORMAT_VERSION2 = 2;
1329
- var taskContextObjectBaseSchema2 = z4.object({
1330
- app: z4.string().min(1).optional(),
1331
- type: z4.string().min(1),
1332
- name: z4.string().min(1),
1333
- description: z4.string().optional(),
1334
- validUntil: z4.string().optional(),
1579
+ var taskContextObjectBaseSchema2 = z5.object({
1580
+ app: z5.string().min(1).optional(),
1581
+ type: z5.string().min(1),
1582
+ name: z5.string().min(1),
1583
+ description: z5.string().optional(),
1584
+ validUntil: z5.string().optional(),
1335
1585
  context: contextDataSchema2,
1336
- contextVersion: z4.literal(2).optional(),
1586
+ contextVersion: z5.literal(2).optional(),
1337
1587
  /** @deprecated Use `contextVersion`. Accepted on ingest only. */
1338
- version: z4.literal(2).optional(),
1339
- actions: z4.array(taskActionSchema2).min(1, "At least one action is required")
1588
+ version: z5.literal(2).optional(),
1589
+ actions: z5.array(taskActionSchema2).min(1, "At least one action is required")
1340
1590
  });
1341
1591
  function normalizeTaskContextVersion2(data) {
1342
1592
  const { version: legacyVersion, contextVersion, ...rest } = data;
@@ -1352,7 +1602,7 @@ function refineContextPublicUrls2(data, ctx) {
1352
1602
  const error = validateContextPublicUrls(data.context);
1353
1603
  if (error) {
1354
1604
  ctx.addIssue({
1355
- code: z4.ZodIssueCode.custom,
1605
+ code: z5.ZodIssueCode.custom,
1356
1606
  message: error,
1357
1607
  path: ["context"]
1358
1608
  });
@@ -1361,9 +1611,9 @@ function refineContextPublicUrls2(data, ctx) {
1361
1611
  var taskContextSchema2 = taskContextObjectSchema2.superRefine(
1362
1612
  refineContextPublicUrls2
1363
1613
  );
1364
- var assignToSchema2 = z4.object({
1365
- users: z4.array(z4.string().email()).optional(),
1366
- groups: z4.array(z4.string().min(1)).optional()
1614
+ var assignToSchema2 = z5.object({
1615
+ users: z5.array(z5.string().email()).optional(),
1616
+ groups: z5.array(z5.string().min(1)).optional()
1367
1617
  }).refine(
1368
1618
  (data) => {
1369
1619
  const groups = data.groups ?? [];
@@ -1374,7 +1624,7 @@ var assignToSchema2 = z4.object({
1374
1624
  },
1375
1625
  { message: 'Cannot combine "all" with other group slugs' }
1376
1626
  );
1377
- var threadUpdateMessageSchema2 = z4.string().min(1).max(500);
1627
+ var threadUpdateMessageSchema2 = z5.string().min(1).max(500);
1378
1628
  var threadUpdateStatuses2 = [
1379
1629
  "info",
1380
1630
  "queued",
@@ -1384,15 +1634,15 @@ var threadUpdateStatuses2 = [
1384
1634
  "failed",
1385
1635
  "cancelled"
1386
1636
  ];
1387
- var threadUpdateStatusSchema2 = z4.enum(threadUpdateStatuses2);
1388
- var threadUpdateInputSchema2 = z4.object({
1637
+ var threadUpdateStatusSchema2 = z5.enum(threadUpdateStatuses2);
1638
+ var threadUpdateInputSchema2 = z5.object({
1389
1639
  message: threadUpdateMessageSchema2,
1390
1640
  status: threadUpdateStatusSchema2.optional()
1391
1641
  });
1392
1642
  var taskPriorities2 = ["low", "normal", "high", "urgent"];
1393
- var taskPrioritySchema2 = z4.enum(taskPriorities2);
1394
- var agentTelemetrySchema2 = z4.object({
1395
- version: z4.string().min(1)
1643
+ var taskPrioritySchema2 = z5.enum(taskPriorities2);
1644
+ var agentTelemetrySchema2 = z5.object({
1645
+ version: z5.string().min(1)
1396
1646
  });
1397
1647
  var createTaskBodySchema2 = taskContextObjectBaseSchema2.extend({
1398
1648
  assignTo: assignToSchema2.optional(),
@@ -1400,7 +1650,7 @@ var createTaskBodySchema2 = taskContextObjectBaseSchema2.extend({
1400
1650
  * Groups related tasks together. When omitted, the server generates one and
1401
1651
  * returns it so the caller can reuse it on later tasks in the same thread.
1402
1652
  */
1403
- threadId: z4.string().min(1).optional(),
1653
+ threadId: z5.string().min(1).optional(),
1404
1654
  /**
1405
1655
  * Optional thread priority. When set, applies to the whole thread and
1406
1656
  * overwrites any previous priority. Omit on later tasks to leave unchanged.
@@ -1435,7 +1685,7 @@ var HANDLER_RETRY_DELAYS_MS = [
1435
1685
  var HANDLER_MAX_ATTEMPTS = HANDLER_RETRY_DELAYS_MS.length + 1;
1436
1686
 
1437
1687
  // ../core/src/attribution/index.ts
1438
- import { z as z5 } from "zod";
1688
+ import { z as z6 } from "zod";
1439
1689
 
1440
1690
  // ../core/src/app-url.ts
1441
1691
  var PRODUCTION_APP_URL = "https://app.robotrock.io";
@@ -1462,16 +1712,16 @@ function getRobotRockApiBaseUrl() {
1462
1712
 
1463
1713
  // ../core/src/attribution/index.ts
1464
1714
  var ATTRIBUTION_COOKIE_MAX_AGE = 60 * 60 * 24 * 90;
1465
- var attributionSchema = z5.object({
1466
- utmSource: z5.string().optional(),
1467
- utmMedium: z5.string().optional(),
1468
- utmCampaign: z5.string().optional(),
1469
- utmContent: z5.string().optional(),
1470
- utmTerm: z5.string().optional(),
1471
- gclid: z5.string().optional(),
1472
- landingUrl: z5.string().optional(),
1473
- referrer: z5.string().optional(),
1474
- capturedAt: z5.number()
1715
+ var attributionSchema = z6.object({
1716
+ utmSource: z6.string().optional(),
1717
+ utmMedium: z6.string().optional(),
1718
+ utmCampaign: z6.string().optional(),
1719
+ utmContent: z6.string().optional(),
1720
+ utmTerm: z6.string().optional(),
1721
+ gclid: z6.string().optional(),
1722
+ landingUrl: z6.string().optional(),
1723
+ referrer: z6.string().optional(),
1724
+ capturedAt: z6.number()
1475
1725
  });
1476
1726
 
1477
1727
  // src/approval-result.ts
@@ -1583,7 +1833,11 @@ function resolveRobotRockAuthConfig(overrides) {
1583
1833
  "RobotRock auth is required. Set ROBOTROCK_API_KEY, ROBOTROCK_AGENT_SERVICE_TOKEN with tenant context, or pass auth when creating the client."
1584
1834
  );
1585
1835
  }
1586
- return { kind: "apiKey", apiKey };
1836
+ return {
1837
+ kind: "apiKey",
1838
+ apiKey,
1839
+ ...overrides?.actingUserId?.trim() ? { actingUserId: overrides.actingUserId.trim() } : {}
1840
+ };
1587
1841
  }
1588
1842
 
1589
1843
  // src/chat-correlation.ts
@@ -1788,6 +2042,51 @@ function createChatsApi(config) {
1788
2042
  data
1789
2043
  );
1790
2044
  }
2045
+ },
2046
+ async uploadImage(input) {
2047
+ const validation = agentChatUploadImageBodySchema.safeParse(input);
2048
+ if (!validation.success) {
2049
+ throw new RobotRockError(
2050
+ `Invalid image upload: ${validation.error.issues[0]?.message}`,
2051
+ 400,
2052
+ validation.error.issues
2053
+ );
2054
+ }
2055
+ const response = await fetch(`${config.baseUrl}/agent-chats/images`, {
2056
+ method: "POST",
2057
+ headers: headers(),
2058
+ body: JSON.stringify(validation.data)
2059
+ });
2060
+ const data = await parseResponseBody(response);
2061
+ if (!response.ok) {
2062
+ throw new RobotRockError(
2063
+ getErrorMessage(data, "Failed to upload chat image"),
2064
+ response.status,
2065
+ data
2066
+ );
2067
+ }
2068
+ const uploaded = data;
2069
+ if (typeof uploaded.storageId !== "string" || typeof uploaded.url !== "string" || typeof uploaded.mediaType !== "string") {
2070
+ throw new RobotRockError(
2071
+ "Image upload returned an invalid response",
2072
+ 500,
2073
+ data
2074
+ );
2075
+ }
2076
+ return {
2077
+ storageId: uploaded.storageId,
2078
+ url: uploaded.url,
2079
+ mediaType: uploaded.mediaType,
2080
+ ...typeof uploaded.chatId === "string" ? { chatId: uploaded.chatId } : {},
2081
+ ...typeof uploaded.publicTaskId === "string" ? { publicTaskId: uploaded.publicTaskId } : {},
2082
+ ...typeof uploaded.filename === "string" ? { filename: uploaded.filename } : {},
2083
+ ...typeof uploaded.description === "string" ? { description: uploaded.description } : {},
2084
+ ...Array.isArray(uploaded.tags) ? {
2085
+ tags: uploaded.tags.filter(
2086
+ (tag) => typeof tag === "string"
2087
+ )
2088
+ } : {}
2089
+ };
1791
2090
  }
1792
2091
  };
1793
2092
  }
@@ -1857,6 +2156,7 @@ var RobotRock = class {
1857
2156
  }
1858
2157
  this.auth = resolveRobotRockAuthConfig({
1859
2158
  ...apiKey ? { apiKey } : {},
2159
+ ...config.actingUserId ? { actingUserId: config.actingUserId } : {},
1860
2160
  ...agentService ? { agentService } : {}
1861
2161
  });
1862
2162
  this.chatCorrelation = config.chatCorrelation;
@@ -2186,6 +2486,7 @@ function tryCreateBoundRobotRockClient(ctx) {
2186
2486
  if (apiKey) {
2187
2487
  return createClient({
2188
2488
  apiKey,
2489
+ ...caller?.userId ? { actingUserId: caller.userId } : {},
2189
2490
  baseUrl: process.env.ROBOTROCK_BASE_URL?.trim(),
2190
2491
  chatCorrelation
2191
2492
  });
@@ -2615,6 +2916,9 @@ async function agentAdminFetch(config, path, init) {
2615
2916
  }
2616
2917
  function createAgentAdminApi(config) {
2617
2918
  return {
2919
+ usage: {
2920
+ get: () => agentAdminFetch(config, "/usage")
2921
+ },
2618
2922
  members: {
2619
2923
  list: () => agentAdminFetch(config, "/members"),
2620
2924
  get: (memberRef) => agentAdminFetch(config, `/members/${encodeURIComponent(memberRef)}`),