robotrock 1.3.4 → 1.5.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 +577 -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 +507 -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 +334 -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 +1365 -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 +350 -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 +318 -16
  32. package/dist/eve/tools/admin/manage-team-members.js.map +1 -1
  33. package/dist/eve/tools/admin/query-tasks.d.ts +82 -7
  34. package/dist/eve/tools/admin/query-tasks.js +363 -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 +2077 -0
  38. package/dist/eve/tools/catalog/generate-image.js.map +1 -0
  39. package/dist/eve/tools/catalog/generate-random-chart.d.ts +77 -0
  40. package/dist/eve/tools/catalog/generate-random-chart.js +411 -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 +253 -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 +88 -3
  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 +964 -115
  61. package/dist/eve/tools/index.js.map +1 -1
  62. package/dist/index-amkHKVGs.d.ts +1054 -0
  63. package/dist/index.d.ts +5 -5
  64. package/dist/index.js +328 -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,202 @@ 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().describe("X-axis value when xKey is date/time"),
586
+ category: z.string().optional().describe("X-axis value when xKey is category"),
587
+ label: z.string().optional().describe("X-axis value when xKey is label")
588
+ }).catchall(z.union([z.string(), z.number()])).describe(
589
+ "Wide chart point: x-axis field + numeric columns named by yKeys (one series per column)"
590
+ );
591
+ var toolChartResultSchema = withAgentOnlyFields({
592
+ title: z.string().min(1).optional().describe("Chart title shown above the plot"),
593
+ description: z.string().min(1).optional().describe("Optional short subtitle"),
594
+ type: z.enum(["line", "bar", "area"]).describe("TRL/shadcn chart variant (time series \u2192 line, categories \u2192 bar)"),
595
+ xKey: z.string().min(1).describe('Field on each series row for the x-axis, e.g. "date" or "category"'),
596
+ yKeys: z.array(z.string().min(1)).min(1).describe(
597
+ 'Numeric series column names on each row, e.g. ["NL","BE"] or ["created","handled"]'
598
+ ),
599
+ series: z.array(metricPointEntityRowSchema).describe(
600
+ "Wide-format points only \u2014 one object per x value with yKeys as numeric fields"
601
+ )
602
+ });
603
+ var memberEntityRowSchema = z.object({
604
+ name: z.string(),
605
+ email: z.string(),
606
+ role: z.string(),
607
+ membershipKind: z.string(),
608
+ profilePictureUrl: z.string().nullable()
609
+ });
610
+ var taskEntityRowSchema = z.object({
611
+ id: z.string().min(1),
612
+ name: z.string().min(1),
613
+ status: z.string().min(1),
614
+ type: z.string().nullable(),
615
+ description: z.string().nullable(),
616
+ validUntil: z.number(),
617
+ createdAt: z.number(),
618
+ url: z.string().min(1),
619
+ threadPriority: z.string().nullable().optional()
620
+ });
621
+ var groupEntityRowSchema = z.object({
622
+ name: z.string().min(1),
623
+ slug: z.string().min(1),
624
+ description: z.string().nullable(),
625
+ memberCount: z.number().nullable(),
626
+ url: z.string().min(1)
627
+ });
628
+ var groupDetailEntitySchema = z.object({
629
+ name: z.string().min(1),
630
+ slug: z.string().min(1),
631
+ description: z.string().nullable(),
632
+ url: z.string().min(1),
633
+ members: z.array(
634
+ z.object({
635
+ name: z.string(),
636
+ email: z.string(),
637
+ profilePictureUrl: z.string().nullable()
638
+ })
639
+ )
640
+ });
641
+ var statusEntityRowSchema = z.object({
642
+ id: z.string().min(1),
643
+ name: z.string().min(1),
644
+ status: z.string().min(1),
645
+ url: z.string().min(1),
646
+ type: z.string().nullable().optional(),
647
+ description: z.string().nullable().optional()
648
+ });
649
+ var agentAdminErrorResultSchema = z.object({
650
+ ok: z.literal(false),
651
+ status: z.number().optional(),
652
+ message: z.string(),
653
+ response: z.unknown().optional()
654
+ });
655
+ var agentAdminMutationResultSchema = z.object({
656
+ ...agentOnlyFields
657
+ }).passthrough();
658
+ var searchProductsOutputSchema = withAgentOnlyFields({
659
+ items: z.array(productEntityRowSchema)
660
+ });
661
+ var generateRandomChartOutputSchema = toolChartResultSchema.extend({
662
+ title: z.string().min(1)
663
+ });
664
+ var generateImageOutputSchema = withAgentOnlyFields({
665
+ prompt: z.string().min(1),
666
+ mediaType: z.string().min(1),
667
+ model: z.string().min(1),
668
+ storageId: z.string().min(1),
669
+ url: z.string().min(1),
670
+ /** @deprecated Legacy sessions only — prefer storageId/url. */
671
+ base64: z.string().min(1).optional()
672
+ });
673
+ var manageTeamMembersListOutputSchema = withAgentOnlyFields({
674
+ members: z.array(memberEntityRowSchema)
675
+ });
676
+ var manageTeamMembersDetailOutputSchema = withAgentOnlyFields(
677
+ memberEntityRowSchema.shape
678
+ );
679
+ var manageTeamMembersOutputSchema = z.union([
680
+ manageTeamMembersListOutputSchema,
681
+ manageTeamMembersDetailOutputSchema,
682
+ agentAdminMutationResultSchema,
683
+ agentAdminErrorResultSchema
684
+ ]);
685
+ var manageGroupsListOutputSchema = withAgentOnlyFields({
686
+ groups: z.array(groupEntityRowSchema)
687
+ });
688
+ var manageGroupsDetailOutputSchema = withAgentOnlyFields(
689
+ groupDetailEntitySchema.shape
690
+ );
691
+ var manageGroupsSummaryOutputSchema = withAgentOnlyFields(
692
+ groupEntityRowSchema.shape
693
+ );
694
+ var manageGroupsOutputSchema = z.union([
695
+ manageGroupsListOutputSchema,
696
+ manageGroupsDetailOutputSchema,
697
+ manageGroupsSummaryOutputSchema,
698
+ agentAdminMutationResultSchema,
699
+ agentAdminErrorResultSchema
700
+ ]);
701
+ var queryTasksListOutputSchema = withAgentOnlyFields({
702
+ items: z.array(taskEntityRowSchema),
703
+ nextCursor: z.string().nullable().optional()
704
+ });
705
+ var queryTasksDetailOutputSchema = withAgentOnlyFields({
706
+ id: z.string().nullable(),
707
+ status: z.string().nullable(),
708
+ type: z.string().nullable(),
709
+ name: z.string().nullable(),
710
+ description: z.string().nullable(),
711
+ validUntil: z.number().nullable(),
712
+ createdAt: z.number().nullable(),
713
+ url: z.string().min(1).nullable()
714
+ });
715
+ var queryTasksOutputSchema = z.union([
716
+ queryTasksListOutputSchema,
717
+ queryTasksDetailOutputSchema,
718
+ agentAdminErrorResultSchema
719
+ ]);
720
+ var assignTasksOutputSchema = z.union([
721
+ withAgentOnlyFields({
722
+ results: z.array(statusEntityRowSchema)
723
+ }),
724
+ agentAdminErrorResultSchema
725
+ ]);
726
+ var workspaceUsageEntitySchema = z.object({
727
+ workspace: z.string(),
728
+ plan: z.string(),
729
+ planType: z.string(),
730
+ trialState: z.string(),
731
+ daysRemaining: z.number().nullable(),
732
+ isPaidPro: z.boolean(),
733
+ subscriptionStatus: z.string(),
734
+ tasksToday: z.string(),
735
+ tasksResetAt: z.string(),
736
+ openTasks: z.number(),
737
+ totalTasks: z.number(),
738
+ seats: z.string(),
739
+ groups: z.string(),
740
+ apiKeys: z.string(),
741
+ rateLimitPerSecond: z.number()
742
+ });
743
+ var getWorkspaceUsageOutputSchema = z.union([
744
+ withAgentOnlyFields({
745
+ usage: workspaceUsageEntitySchema
746
+ }),
747
+ agentAdminErrorResultSchema
748
+ ]);
749
+
554
750
  // src/eve/index.ts
555
751
  var ROBOTROCK_READY_HOOK_SLUG = "robotrock-ready";
556
752
 
@@ -865,10 +1061,10 @@ function robotrockEveChannel(options) {
865
1061
  }
866
1062
 
867
1063
  // src/schemas/index.ts
868
- import { z as z4 } from "zod";
1064
+ import { z as z5 } from "zod";
869
1065
 
870
1066
  // ../core/src/schemas/task.ts
871
- import { z } from "zod";
1067
+ import { z as z2 } from "zod";
872
1068
 
873
1069
  // ../core/src/schemas/context-urls.ts
874
1070
  function resolveLinkUrl(value) {
@@ -924,67 +1120,67 @@ function validateContextPublicUrls(context) {
924
1120
  }
925
1121
 
926
1122
  // ../core/src/schemas/task.ts
927
- var safeUrlSchema = z.string().refine((url) => isPublicHttpUrl(url), {
1123
+ var safeUrlSchema = z2.string().refine((url) => isPublicHttpUrl(url), {
928
1124
  message: PUBLIC_HTTP_URL_ERROR
929
1125
  });
930
- var handlerUrlSchema = z.string().refine((url) => isAllowedHandlerUrl(url), {
1126
+ var handlerUrlSchema = z2.string().refine((url) => isAllowedHandlerUrl(url), {
931
1127
  message: HANDLER_URL_ERROR
932
1128
  });
933
- var jsonSchema7Schema = z.custom(
1129
+ var jsonSchema7Schema = z2.custom(
934
1130
  (val) => typeof val === "object" && val !== null,
935
1131
  { message: "Must be a valid JSON Schema object" }
936
1132
  );
937
- var uiSchemaSchema = z.custom((val) => typeof val === "object" && val !== null, {
1133
+ var uiSchemaSchema = z2.custom((val) => typeof val === "object" && val !== null, {
938
1134
  message: "Must be a valid UiSchema object"
939
1135
  });
940
- var webhookHandlerSchema = z.object({
941
- type: z.literal("webhook"),
1136
+ var webhookHandlerSchema = z2.object({
1137
+ type: z2.literal("webhook"),
942
1138
  url: handlerUrlSchema,
943
- headers: z.record(z.string(), z.string())
1139
+ headers: z2.record(z2.string(), z2.string())
944
1140
  });
945
1141
  var triggerHandlerSchema = webhookHandlerSchema.extend({
946
- type: z.literal("trigger"),
947
- tokenId: z.string().min(1)
1142
+ type: z2.literal("trigger"),
1143
+ tokenId: z2.string().min(1)
948
1144
  });
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(),
1145
+ var handlerSchema = z2.discriminatedUnion("type", [webhookHandlerSchema, triggerHandlerSchema]);
1146
+ var taskActionInputSchema = z2.object({
1147
+ id: z2.string().min(1),
1148
+ title: z2.string().min(1),
1149
+ description: z2.string().optional(),
954
1150
  schema: jsonSchema7Schema.optional(),
955
1151
  ui: uiSchemaSchema.optional(),
956
- data: z.record(z.string(), z.unknown()).optional()
1152
+ data: z2.record(z2.string(), z2.unknown()).optional()
957
1153
  });
958
1154
  var taskActionSchema = taskActionInputSchema.extend({
959
1155
  // 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()
1156
+ handlers: z2.array(handlerSchema).min(1).optional()
1157
+ });
1158
+ var uiFieldSchemaSchema = z2.object({
1159
+ "ui:widget": z2.string().optional(),
1160
+ "ui:title": z2.string().optional(),
1161
+ "ui:description": z2.string().optional(),
1162
+ "ui:options": z2.record(z2.string(), z2.unknown()).optional(),
1163
+ items: z2.lazy(() => z2.record(z2.string(), uiFieldSchemaSchema)).optional()
968
1164
  }).passthrough();
969
- var contextUiSchema = z.record(z.string(), uiFieldSchemaSchema).optional();
970
- var contextDataSchema = z.object({
971
- data: z.record(z.string(), z.unknown()),
1165
+ var contextUiSchema = z2.record(z2.string(), uiFieldSchemaSchema).optional();
1166
+ var contextDataSchema = z2.object({
1167
+ data: z2.record(z2.string(), z2.unknown()),
972
1168
  ui: contextUiSchema
973
1169
  }).optional();
974
1170
  var TASK_CONTEXT_FORMAT_VERSION = 2;
975
- var taskContextObjectBaseSchema = z.object({
1171
+ var taskContextObjectBaseSchema = z2.object({
976
1172
  /** 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(),
1173
+ app: z2.string().min(1).optional(),
1174
+ type: z2.string().min(1),
1175
+ name: z2.string().min(1),
1176
+ description: z2.string().optional(),
1177
+ validUntil: z2.string().optional(),
982
1178
  context: contextDataSchema,
983
1179
  /** Task context wire format version. @default 2 */
984
- contextVersion: z.literal(2).optional(),
1180
+ contextVersion: z2.literal(2).optional(),
985
1181
  /** @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")
1182
+ version: z2.literal(2).optional(),
1183
+ actions: z2.array(taskActionSchema).min(1, "At least one action is required")
988
1184
  });
989
1185
  function normalizeTaskContextVersion(data) {
990
1186
  const { version: legacyVersion, contextVersion, ...rest } = data;
@@ -1000,7 +1196,7 @@ function refineContextPublicUrls(data, ctx) {
1000
1196
  const error = validateContextPublicUrls(data.context);
1001
1197
  if (error) {
1002
1198
  ctx.addIssue({
1003
- code: z.ZodIssueCode.custom,
1199
+ code: z2.ZodIssueCode.custom,
1004
1200
  message: error,
1005
1201
  path: ["context"]
1006
1202
  });
@@ -1009,9 +1205,9 @@ function refineContextPublicUrls(data, ctx) {
1009
1205
  var taskContextSchema = taskContextObjectSchema.superRefine(
1010
1206
  refineContextPublicUrls
1011
1207
  );
1012
- var assignToSchema = z.object({
1013
- users: z.array(z.string().email()).optional(),
1014
- groups: z.array(z.string().min(1)).optional()
1208
+ var assignToSchema = z2.object({
1209
+ users: z2.array(z2.string().email()).optional(),
1210
+ groups: z2.array(z2.string().min(1)).optional()
1015
1211
  }).refine(
1016
1212
  (data) => {
1017
1213
  const groups = data.groups ?? [];
@@ -1022,7 +1218,7 @@ var assignToSchema = z.object({
1022
1218
  },
1023
1219
  { message: 'Cannot combine "all" with other group slugs' }
1024
1220
  );
1025
- var threadUpdateMessageSchema = z.string().min(1).max(500);
1221
+ var threadUpdateMessageSchema = z2.string().min(1).max(500);
1026
1222
  var threadUpdateStatuses = [
1027
1223
  "info",
1028
1224
  "queued",
@@ -1032,16 +1228,16 @@ var threadUpdateStatuses = [
1032
1228
  "failed",
1033
1229
  "cancelled"
1034
1230
  ];
1035
- var threadUpdateStatusSchema = z.enum(threadUpdateStatuses);
1036
- var threadUpdateInputSchema = z.object({
1231
+ var threadUpdateStatusSchema = z2.enum(threadUpdateStatuses);
1232
+ var threadUpdateInputSchema = z2.object({
1037
1233
  message: threadUpdateMessageSchema,
1038
1234
  status: threadUpdateStatusSchema.optional()
1039
1235
  });
1040
1236
  var taskPriorities = ["low", "normal", "high", "urgent"];
1041
- var taskPrioritySchema = z.enum(taskPriorities);
1042
- var agentTelemetrySchema = z.object({
1237
+ var taskPrioritySchema = z2.enum(taskPriorities);
1238
+ var agentTelemetrySchema = z2.object({
1043
1239
  /** Agent or app version (semver, git SHA, deploy tag — caller-defined). */
1044
- version: z.string().min(1)
1240
+ version: z2.string().min(1)
1045
1241
  });
1046
1242
  var createTaskBodySchema = taskContextObjectBaseSchema.extend({
1047
1243
  assignTo: assignToSchema.optional(),
@@ -1049,7 +1245,7 @@ var createTaskBodySchema = taskContextObjectBaseSchema.extend({
1049
1245
  * Groups related tasks together. When omitted, the server generates one and
1050
1246
  * returns it so the caller can reuse it on later tasks in the same thread.
1051
1247
  */
1052
- threadId: z.string().min(1).optional(),
1248
+ threadId: z2.string().min(1).optional(),
1053
1249
  /**
1054
1250
  * Optional thread priority. When set, applies to the whole thread and
1055
1251
  * overwrites any previous priority. Omit on later tasks to leave unchanged.
@@ -1063,280 +1259,346 @@ var createTaskBodySchema = taskContextObjectBaseSchema.extend({
1063
1259
  /** Agent release version — not shown in inbox UI. */
1064
1260
  agent: agentTelemetrySchema.optional()
1065
1261
  }).transform(normalizeTaskContextVersion).superRefine(refineContextPublicUrls);
1066
- var agentChatSeedActionSchema = z.object({
1262
+ var agentChatSeedActionSchema = z2.object({
1067
1263
  /** 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(),
1264
+ id: z2.string().min(1).optional(),
1265
+ title: z2.string().min(1),
1266
+ description: z2.string().optional(),
1071
1267
  /** JSON Schema object for the form fields. */
1072
- schema: z.record(z.string(), z.unknown()).optional(),
1268
+ schema: z2.record(z2.string(), z2.unknown()).optional(),
1073
1269
  /** RJSF ui schema overrides (ui:widget, ui:enumNames, etc.). */
1074
- ui: z.record(z.string(), z.unknown()).optional(),
1270
+ ui: z2.record(z2.string(), z2.unknown()).optional(),
1075
1271
  /** Optional default field values. */
1076
- data: z.record(z.string(), z.unknown()).optional()
1272
+ data: z2.record(z2.string(), z2.unknown()).optional()
1077
1273
  });
1078
- var agentChatSeedMessageSchema = z.object({
1079
- role: z.enum(["user", "assistant"]),
1080
- text: z.string().min(1),
1274
+ var agentChatSeedMessageSchema = z2.object({
1275
+ role: z2.enum(["user", "assistant"]),
1276
+ text: z2.string().min(1),
1081
1277
  /** Optional display-name override for the message sender. */
1082
- senderName: z.string().min(1).optional(),
1278
+ senderName: z2.string().min(1).optional(),
1083
1279
  /**
1084
1280
  * Optional structured input request rendered as a styled RobotRock action
1085
1281
  * widget below the message text. Use this instead of asking the user to reply
1086
1282
  * in plain text so the request is always a proper action form.
1087
1283
  */
1088
- requestActionInput: z.object({
1089
- prompt: z.string().optional(),
1284
+ requestActionInput: z2.object({
1285
+ prompt: z2.string().optional(),
1090
1286
  action: agentChatSeedActionSchema
1091
1287
  }).optional()
1092
1288
  });
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()
1289
+ var eveAgentChatTransportSchema = z2.object({
1290
+ kind: z2.literal("eve"),
1291
+ chatId: z2.string().min(1),
1292
+ baseUrl: z2.string().url(),
1293
+ sessionId: z2.string().optional(),
1294
+ continuationToken: z2.string().optional(),
1295
+ streamIndex: z2.number().int().nonnegative().optional(),
1296
+ isStreaming: z2.boolean().optional()
1101
1297
  });
1102
- var createAgentChatBodySchema = z.object({
1298
+ var createAgentChatBodySchema = z2.object({
1103
1299
  /** Agent id (eve agent name). Required unless `parentChatId` is set. */
1104
- agentIdentifier: z.string().min(1).optional(),
1300
+ agentIdentifier: z2.string().min(1).optional(),
1105
1301
  /** Inherit tenant/connection/agent from an existing chat (agent-spawned chats). */
1106
- parentChatId: z.string().min(1).optional(),
1302
+ parentChatId: z2.string().min(1).optional(),
1107
1303
  /** Convex tenantEveConnections id; resolved from the tenant when omitted. */
1108
- eveConnectionId: z.string().min(1).optional(),
1304
+ eveConnectionId: z2.string().min(1).optional(),
1109
1305
  /** Source application id; groups the chat under an inbox section. */
1110
- app: z.string().min(1).optional(),
1306
+ app: z2.string().min(1).optional(),
1111
1307
  /** 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([]),
1308
+ ownerEmail: z2.string().email().optional(),
1309
+ title: z2.string().min(1),
1310
+ messages: z2.array(agentChatSeedMessageSchema).default([]),
1115
1311
  /** Provenance label stored on the session ("cron" | "agent" | ...). */
1116
- source: z.string().min(1).optional()
1312
+ source: z2.string().min(1).optional()
1117
1313
  }).refine((data) => Boolean(data.agentIdentifier || data.parentChatId), {
1118
1314
  message: "Provide either agentIdentifier or parentChatId"
1119
1315
  }).refine((data) => Boolean(data.ownerEmail || data.parentChatId), {
1120
1316
  message: "Provide ownerEmail unless parentChatId is set"
1121
1317
  });
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(),
1318
+ var agentChatAuditToolBodySchema = z2.object({
1319
+ eveSessionId: z2.string().min(1),
1320
+ userId: z2.string().min(1),
1321
+ toolCallId: z2.string().min(1),
1322
+ toolName: z2.string().min(1),
1323
+ input: z2.record(z2.string(), z2.unknown()).default({}),
1324
+ success: z2.boolean(),
1325
+ status: z2.enum(["completed", "failed", "rejected"]),
1326
+ error: z2.string().optional(),
1327
+ idempotencyKey: z2.string().optional()
1328
+ });
1329
+ var agentChatAuditInputBodySchema = z2.object({
1330
+ eveSessionId: z2.string().min(1),
1331
+ userId: z2.string().min(1),
1332
+ actionId: z2.string().min(1),
1333
+ actionTitle: z2.string().optional(),
1334
+ prompt: z2.string().optional(),
1335
+ data: z2.record(z2.string(), z2.unknown()).optional(),
1336
+ idempotencyKey: z2.string().optional(),
1141
1337
  /** Eve input request id — used to merge staged HITL metadata. */
1142
- requestId: z.string().optional(),
1338
+ requestId: z2.string().optional(),
1143
1339
  /** Eve tool call id — fallback lookup for staged HITL metadata. */
1144
- toolCallId: z.string().optional()
1340
+ toolCallId: z2.string().optional()
1145
1341
  });
1146
- var eveHitlStagedOptionSchema = z.object({
1147
- id: z.string(),
1148
- label: z.string()
1342
+ var eveHitlStagedOptionSchema = z2.object({
1343
+ id: z2.string(),
1344
+ label: z2.string()
1149
1345
  });
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()
1346
+ var agentChatStageHitlBodySchema = z2.object({
1347
+ eveSessionId: z2.string().min(1),
1348
+ requests: z2.array(
1349
+ z2.object({
1350
+ requestId: z2.string().min(1),
1351
+ toolCallId: z2.string().min(1),
1352
+ toolName: z2.string().min(1),
1353
+ prompt: z2.string().min(1),
1354
+ display: z2.enum(["confirmation", "select", "text"]).optional(),
1355
+ allowFreeform: z2.boolean().optional(),
1356
+ options: z2.array(eveHitlStagedOptionSchema).optional(),
1357
+ toolInput: z2.record(z2.string(), z2.unknown()).optional()
1162
1358
  })
1163
1359
  )
1164
1360
  });
1165
- var agentChatLinkTaskBodySchema = z.object({
1166
- eveSessionId: z.string().min(1),
1167
- publicTaskId: z.string().min(1),
1168
- toolCallId: z.string().min(1)
1361
+ var agentChatLinkTaskBodySchema = z2.object({
1362
+ eveSessionId: z2.string().min(1),
1363
+ publicTaskId: z2.string().min(1),
1364
+ toolCallId: z2.string().min(1)
1365
+ });
1366
+ var AGENT_FILE_TAGS_MAX = 20;
1367
+ var AGENT_FILE_TAG_MAX_LENGTH = 64;
1368
+ function normalizeAgentFileTags(tags) {
1369
+ if (!tags?.length) return void 0;
1370
+ const seen = /* @__PURE__ */ new Set();
1371
+ const out = [];
1372
+ for (const raw of tags) {
1373
+ const tag = raw.trim().toLowerCase().slice(0, AGENT_FILE_TAG_MAX_LENGTH);
1374
+ if (!tag || seen.has(tag)) continue;
1375
+ seen.add(tag);
1376
+ out.push(tag);
1377
+ if (out.length >= AGENT_FILE_TAGS_MAX) break;
1378
+ }
1379
+ return out.length > 0 ? out : void 0;
1380
+ }
1381
+ var agentChatUploadImageBodySchema = z2.object({
1382
+ mediaType: z2.string().min(1),
1383
+ /** Raw base64 (no data: URL prefix). */
1384
+ base64: z2.string().min(1),
1385
+ chatId: z2.string().min(1).optional(),
1386
+ publicTaskId: z2.string().min(1).optional(),
1387
+ source: z2.string().min(1).optional(),
1388
+ /** Display / search name (e.g. `sunset-robot.png`). */
1389
+ filename: z2.string().min(1).max(255).optional(),
1390
+ /** Human-readable description (e.g. generation prompt). */
1391
+ description: z2.string().min(1).max(2e3).optional(),
1392
+ /**
1393
+ * Optional labels for later grouping/filtering.
1394
+ * Normalized to lowercase trimmed unique strings (max 20, 64 chars each).
1395
+ */
1396
+ tags: z2.array(z2.string().min(1).max(AGENT_FILE_TAG_MAX_LENGTH)).max(AGENT_FILE_TAGS_MAX).optional().transform((tags) => normalizeAgentFileTags(tags))
1397
+ }).refine((data) => Boolean(data.chatId || data.publicTaskId), {
1398
+ message: "Provide chatId and/or publicTaskId"
1169
1399
  });
1170
1400
 
1171
1401
  // ../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()
1402
+ import { z as z3 } from "zod";
1403
+ var toolDisplayMetadataSchema = z3.object({
1404
+ widget: z3.string().optional(),
1405
+ title: z3.string().optional(),
1406
+ description: z3.string().optional()
1177
1407
  });
1178
- var toolDisplayEnvelopeSchema = z2.object({
1408
+ var toolDisplayEnvelopeSchema = z3.object({
1179
1409
  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()
1410
+ data: z3.record(z3.string(), z3.unknown()),
1411
+ ui: z3.record(
1412
+ z3.string(),
1413
+ z3.object({
1414
+ "ui:widget": z3.string().optional(),
1415
+ "ui:title": z3.string().optional(),
1416
+ "ui:description": z3.string().optional(),
1417
+ "ui:options": z3.record(z3.string(), z3.unknown()).optional()
1188
1418
  }).passthrough()
1189
1419
  ).optional()
1190
1420
  });
1191
1421
 
1192
1422
  // ../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(),
1423
+ import { z as z4 } from "zod";
1424
+ var tenantRoleSchema = z4.enum(["admin", "member"]);
1425
+ var agentAdminUserSchema = z4.object({
1426
+ id: z4.string(),
1427
+ email: z4.string().email(),
1428
+ name: z4.string(),
1429
+ profilePictureUrl: z4.string().nullable().optional()
1430
+ });
1431
+ var agentAdminMemberSchema = z4.object({
1432
+ userId: z4.string(),
1433
+ role: z4.string(),
1434
+ membershipKind: z4.enum(["team", "assignee"]),
1435
+ hasLoggedIn: z4.boolean(),
1205
1436
  user: agentAdminUserSchema
1206
1437
  });
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()
1438
+ var agentAdminGroupSchema = z4.object({
1439
+ id: z4.string(),
1440
+ name: z4.string(),
1441
+ slug: z4.string(),
1442
+ description: z4.string().nullable(),
1443
+ memberCount: z4.number().optional()
1213
1444
  });
1214
1445
  var agentAdminGroupDetailSchema = agentAdminGroupSchema.extend({
1215
- members: z3.array(
1216
- z3.object({
1217
- userId: z3.string(),
1446
+ members: z4.array(
1447
+ z4.object({
1448
+ userId: z4.string(),
1218
1449
  user: agentAdminUserSchema
1219
1450
  })
1220
1451
  )
1221
1452
  });
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(),
1453
+ var agentAdminTaskSummarySchema = z4.object({
1454
+ id: z4.string(),
1455
+ convexId: z4.string(),
1456
+ status: z4.string(),
1457
+ type: z4.string().nullable(),
1458
+ name: z4.string().nullable(),
1459
+ description: z4.string().nullable(),
1460
+ validUntil: z4.number(),
1461
+ createdAt: z4.number(),
1462
+ threadPriority: z4.string().nullable(),
1463
+ handledByUserId: z4.string().nullable()
1464
+ });
1465
+ var inviteMemberBodySchema = z4.object({
1466
+ email: z4.string().email(),
1236
1467
  role: tenantRoleSchema.optional()
1237
1468
  });
1238
- var updateMemberRoleBodySchema = z3.object({
1469
+ var updateMemberRoleBodySchema = z4.object({
1239
1470
  role: tenantRoleSchema
1240
1471
  });
1241
- var createGroupBodySchema = z3.object({
1242
- name: z3.string().min(1),
1243
- description: z3.string().optional()
1472
+ var createGroupBodySchema = z4.object({
1473
+ name: z4.string().min(1),
1474
+ description: z4.string().optional()
1244
1475
  });
1245
- var updateGroupBodySchema = z3.object({
1246
- name: z3.string().min(1).optional(),
1247
- description: z3.string().optional()
1476
+ var updateGroupBodySchema = z4.object({
1477
+ name: z4.string().min(1).optional(),
1478
+ description: z4.string().optional()
1479
+ });
1480
+ var addGroupMemberBodySchema = z4.object({
1481
+ userId: z4.string().min(1).describe("Convex user id or member email.")
1482
+ });
1483
+ var listTasksQuerySchema = z4.object({
1484
+ statusFilter: z4.enum(["all", "open", "handled", "expired"]).optional(),
1485
+ typeFilter: z4.string().optional(),
1486
+ appFilter: z4.string().optional(),
1487
+ sortField: z4.enum(["type", "date", "status", "validUntil"]).optional(),
1488
+ sortDirection: z4.enum(["asc", "desc"]).optional(),
1489
+ limit: z4.coerce.number().int().positive().max(100).optional(),
1490
+ cursor: z4.string().optional()
1491
+ });
1492
+ var searchTasksQuerySchema = z4.object({
1493
+ q: z4.string().min(1),
1494
+ limit: z4.coerce.number().int().positive().max(100).optional()
1495
+ });
1496
+ var assignTasksResultSchema = z4.object({
1497
+ taskId: z4.string(),
1498
+ success: z4.boolean(),
1499
+ message: z4.string().optional(),
1500
+ name: z4.string().nullable().optional(),
1501
+ description: z4.string().nullable().optional(),
1502
+ type: z4.string().nullable().optional()
1503
+ });
1504
+ var assignTasksResponseSchema = z4.object({
1505
+ results: z4.array(assignTasksResultSchema)
1248
1506
  });
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),
1507
+ var assignTasksBodySchema = z4.object({
1508
+ taskIds: z4.array(z4.string().min(1)).min(1).max(100),
1278
1509
  assignTo: assignToSchema.refine(
1279
1510
  (value) => (value.users?.length ?? 0) > 0 || (value.groups?.length ?? 0) > 0,
1280
1511
  { message: "assignTo needs at least one user email or group slug." }
1281
1512
  )
1282
1513
  });
1514
+ var agentAdminPlanLimitsSchema = z4.object({
1515
+ tasksPerDay: z4.number(),
1516
+ members: z4.number(),
1517
+ apiKeys: z4.number(),
1518
+ groups: z4.number(),
1519
+ auditLogRetention: z4.number(),
1520
+ rateLimitPerSecond: z4.number(),
1521
+ taskRetentionDays: z4.number()
1522
+ });
1523
+ var agentAdminUsageSchema = z4.object({
1524
+ workspace: z4.string(),
1525
+ planName: z4.string(),
1526
+ planType: z4.string(),
1527
+ trialState: z4.enum(["none", "active", "expired"]),
1528
+ daysRemaining: z4.number().nullable(),
1529
+ isPaidPro: z4.boolean(),
1530
+ subscriptionStatus: z4.string().nullable(),
1531
+ tasksToday: z4.number(),
1532
+ maxTasksPerDay: z4.number().nullable(),
1533
+ tasksResetAt: z4.number(),
1534
+ openTasks: z4.number(),
1535
+ totalTasks: z4.number(),
1536
+ seatsCurrent: z4.number(),
1537
+ seatsMax: z4.number().nullable(),
1538
+ groupsCurrent: z4.number(),
1539
+ groupsMax: z4.number().nullable(),
1540
+ apiKeysCurrent: z4.number(),
1541
+ apiKeysMax: z4.number().nullable(),
1542
+ rateLimitPerSecond: z4.number(),
1543
+ limits: agentAdminPlanLimitsSchema
1544
+ });
1283
1545
 
1284
1546
  // src/schemas/index.ts
1285
- var handlerUrlSchema2 = z4.string().refine((url) => isAllowedHandlerUrl(url), {
1547
+ var handlerUrlSchema2 = z5.string().refine((url) => isAllowedHandlerUrl(url), {
1286
1548
  message: HANDLER_URL_ERROR
1287
1549
  });
1288
- var jsonSchema7Schema2 = z4.custom(
1550
+ var jsonSchema7Schema2 = z5.custom(
1289
1551
  (val) => typeof val === "object" && val !== null,
1290
1552
  { message: "Must be a valid JSON Schema object" }
1291
1553
  );
1292
- var uiSchemaSchema2 = z4.custom((val) => typeof val === "object" && val !== null, {
1554
+ var uiSchemaSchema2 = z5.custom((val) => typeof val === "object" && val !== null, {
1293
1555
  message: "Must be a valid UiSchema object"
1294
1556
  });
1295
- var webhookHandlerSchema2 = z4.object({
1296
- type: z4.literal("webhook"),
1557
+ var webhookHandlerSchema2 = z5.object({
1558
+ type: z5.literal("webhook"),
1297
1559
  url: handlerUrlSchema2,
1298
- headers: z4.record(z4.string(), z4.string())
1560
+ headers: z5.record(z5.string(), z5.string())
1299
1561
  });
1300
1562
  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(),
1563
+ type: z5.literal("trigger"),
1564
+ tokenId: z5.string().min(1)
1565
+ });
1566
+ var handlerSchema2 = z5.discriminatedUnion("type", [webhookHandlerSchema2, triggerHandlerSchema2]);
1567
+ var taskActionInputSchema2 = z5.object({
1568
+ id: z5.string().min(1),
1569
+ title: z5.string().min(1),
1570
+ description: z5.string().optional(),
1309
1571
  schema: jsonSchema7Schema2.optional(),
1310
1572
  ui: uiSchemaSchema2.optional(),
1311
- data: z4.record(z4.string(), z4.unknown()).optional()
1573
+ data: z5.record(z5.string(), z5.unknown()).optional()
1312
1574
  });
1313
1575
  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()
1576
+ handlers: z5.array(handlerSchema2).min(1).optional()
1577
+ });
1578
+ var uiFieldSchemaSchema2 = z5.object({
1579
+ "ui:widget": z5.string().optional(),
1580
+ "ui:title": z5.string().optional(),
1581
+ "ui:description": z5.string().optional(),
1582
+ "ui:options": z5.record(z5.string(), z5.unknown()).optional(),
1583
+ items: z5.lazy(() => z5.record(z5.string(), uiFieldSchemaSchema2)).optional()
1322
1584
  }).passthrough();
1323
- var contextUiSchema2 = z4.record(z4.string(), uiFieldSchemaSchema2).optional();
1324
- var contextDataSchema2 = z4.object({
1325
- data: z4.record(z4.string(), z4.unknown()),
1585
+ var contextUiSchema2 = z5.record(z5.string(), uiFieldSchemaSchema2).optional();
1586
+ var contextDataSchema2 = z5.object({
1587
+ data: z5.record(z5.string(), z5.unknown()),
1326
1588
  ui: contextUiSchema2
1327
1589
  }).optional();
1328
1590
  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(),
1591
+ var taskContextObjectBaseSchema2 = z5.object({
1592
+ app: z5.string().min(1).optional(),
1593
+ type: z5.string().min(1),
1594
+ name: z5.string().min(1),
1595
+ description: z5.string().optional(),
1596
+ validUntil: z5.string().optional(),
1335
1597
  context: contextDataSchema2,
1336
- contextVersion: z4.literal(2).optional(),
1598
+ contextVersion: z5.literal(2).optional(),
1337
1599
  /** @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")
1600
+ version: z5.literal(2).optional(),
1601
+ actions: z5.array(taskActionSchema2).min(1, "At least one action is required")
1340
1602
  });
1341
1603
  function normalizeTaskContextVersion2(data) {
1342
1604
  const { version: legacyVersion, contextVersion, ...rest } = data;
@@ -1352,7 +1614,7 @@ function refineContextPublicUrls2(data, ctx) {
1352
1614
  const error = validateContextPublicUrls(data.context);
1353
1615
  if (error) {
1354
1616
  ctx.addIssue({
1355
- code: z4.ZodIssueCode.custom,
1617
+ code: z5.ZodIssueCode.custom,
1356
1618
  message: error,
1357
1619
  path: ["context"]
1358
1620
  });
@@ -1361,9 +1623,9 @@ function refineContextPublicUrls2(data, ctx) {
1361
1623
  var taskContextSchema2 = taskContextObjectSchema2.superRefine(
1362
1624
  refineContextPublicUrls2
1363
1625
  );
1364
- var assignToSchema2 = z4.object({
1365
- users: z4.array(z4.string().email()).optional(),
1366
- groups: z4.array(z4.string().min(1)).optional()
1626
+ var assignToSchema2 = z5.object({
1627
+ users: z5.array(z5.string().email()).optional(),
1628
+ groups: z5.array(z5.string().min(1)).optional()
1367
1629
  }).refine(
1368
1630
  (data) => {
1369
1631
  const groups = data.groups ?? [];
@@ -1374,7 +1636,7 @@ var assignToSchema2 = z4.object({
1374
1636
  },
1375
1637
  { message: 'Cannot combine "all" with other group slugs' }
1376
1638
  );
1377
- var threadUpdateMessageSchema2 = z4.string().min(1).max(500);
1639
+ var threadUpdateMessageSchema2 = z5.string().min(1).max(500);
1378
1640
  var threadUpdateStatuses2 = [
1379
1641
  "info",
1380
1642
  "queued",
@@ -1384,15 +1646,15 @@ var threadUpdateStatuses2 = [
1384
1646
  "failed",
1385
1647
  "cancelled"
1386
1648
  ];
1387
- var threadUpdateStatusSchema2 = z4.enum(threadUpdateStatuses2);
1388
- var threadUpdateInputSchema2 = z4.object({
1649
+ var threadUpdateStatusSchema2 = z5.enum(threadUpdateStatuses2);
1650
+ var threadUpdateInputSchema2 = z5.object({
1389
1651
  message: threadUpdateMessageSchema2,
1390
1652
  status: threadUpdateStatusSchema2.optional()
1391
1653
  });
1392
1654
  var taskPriorities2 = ["low", "normal", "high", "urgent"];
1393
- var taskPrioritySchema2 = z4.enum(taskPriorities2);
1394
- var agentTelemetrySchema2 = z4.object({
1395
- version: z4.string().min(1)
1655
+ var taskPrioritySchema2 = z5.enum(taskPriorities2);
1656
+ var agentTelemetrySchema2 = z5.object({
1657
+ version: z5.string().min(1)
1396
1658
  });
1397
1659
  var createTaskBodySchema2 = taskContextObjectBaseSchema2.extend({
1398
1660
  assignTo: assignToSchema2.optional(),
@@ -1400,7 +1662,7 @@ var createTaskBodySchema2 = taskContextObjectBaseSchema2.extend({
1400
1662
  * Groups related tasks together. When omitted, the server generates one and
1401
1663
  * returns it so the caller can reuse it on later tasks in the same thread.
1402
1664
  */
1403
- threadId: z4.string().min(1).optional(),
1665
+ threadId: z5.string().min(1).optional(),
1404
1666
  /**
1405
1667
  * Optional thread priority. When set, applies to the whole thread and
1406
1668
  * overwrites any previous priority. Omit on later tasks to leave unchanged.
@@ -1435,7 +1697,7 @@ var HANDLER_RETRY_DELAYS_MS = [
1435
1697
  var HANDLER_MAX_ATTEMPTS = HANDLER_RETRY_DELAYS_MS.length + 1;
1436
1698
 
1437
1699
  // ../core/src/attribution/index.ts
1438
- import { z as z5 } from "zod";
1700
+ import { z as z6 } from "zod";
1439
1701
 
1440
1702
  // ../core/src/app-url.ts
1441
1703
  var PRODUCTION_APP_URL = "https://app.robotrock.io";
@@ -1462,16 +1724,16 @@ function getRobotRockApiBaseUrl() {
1462
1724
 
1463
1725
  // ../core/src/attribution/index.ts
1464
1726
  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()
1727
+ var attributionSchema = z6.object({
1728
+ utmSource: z6.string().optional(),
1729
+ utmMedium: z6.string().optional(),
1730
+ utmCampaign: z6.string().optional(),
1731
+ utmContent: z6.string().optional(),
1732
+ utmTerm: z6.string().optional(),
1733
+ gclid: z6.string().optional(),
1734
+ landingUrl: z6.string().optional(),
1735
+ referrer: z6.string().optional(),
1736
+ capturedAt: z6.number()
1475
1737
  });
1476
1738
 
1477
1739
  // src/approval-result.ts
@@ -1583,7 +1845,11 @@ function resolveRobotRockAuthConfig(overrides) {
1583
1845
  "RobotRock auth is required. Set ROBOTROCK_API_KEY, ROBOTROCK_AGENT_SERVICE_TOKEN with tenant context, or pass auth when creating the client."
1584
1846
  );
1585
1847
  }
1586
- return { kind: "apiKey", apiKey };
1848
+ return {
1849
+ kind: "apiKey",
1850
+ apiKey,
1851
+ ...overrides?.actingUserId?.trim() ? { actingUserId: overrides.actingUserId.trim() } : {}
1852
+ };
1587
1853
  }
1588
1854
 
1589
1855
  // src/chat-correlation.ts
@@ -1788,6 +2054,51 @@ function createChatsApi(config) {
1788
2054
  data
1789
2055
  );
1790
2056
  }
2057
+ },
2058
+ async uploadImage(input) {
2059
+ const validation = agentChatUploadImageBodySchema.safeParse(input);
2060
+ if (!validation.success) {
2061
+ throw new RobotRockError(
2062
+ `Invalid image upload: ${validation.error.issues[0]?.message}`,
2063
+ 400,
2064
+ validation.error.issues
2065
+ );
2066
+ }
2067
+ const response = await fetch(`${config.baseUrl}/agent-chats/images`, {
2068
+ method: "POST",
2069
+ headers: headers(),
2070
+ body: JSON.stringify(validation.data)
2071
+ });
2072
+ const data = await parseResponseBody(response);
2073
+ if (!response.ok) {
2074
+ throw new RobotRockError(
2075
+ getErrorMessage(data, "Failed to upload chat image"),
2076
+ response.status,
2077
+ data
2078
+ );
2079
+ }
2080
+ const uploaded = data;
2081
+ if (typeof uploaded.storageId !== "string" || typeof uploaded.url !== "string" || typeof uploaded.mediaType !== "string") {
2082
+ throw new RobotRockError(
2083
+ "Image upload returned an invalid response",
2084
+ 500,
2085
+ data
2086
+ );
2087
+ }
2088
+ return {
2089
+ storageId: uploaded.storageId,
2090
+ url: uploaded.url,
2091
+ mediaType: uploaded.mediaType,
2092
+ ...typeof uploaded.chatId === "string" ? { chatId: uploaded.chatId } : {},
2093
+ ...typeof uploaded.publicTaskId === "string" ? { publicTaskId: uploaded.publicTaskId } : {},
2094
+ ...typeof uploaded.filename === "string" ? { filename: uploaded.filename } : {},
2095
+ ...typeof uploaded.description === "string" ? { description: uploaded.description } : {},
2096
+ ...Array.isArray(uploaded.tags) ? {
2097
+ tags: uploaded.tags.filter(
2098
+ (tag) => typeof tag === "string"
2099
+ )
2100
+ } : {}
2101
+ };
1791
2102
  }
1792
2103
  };
1793
2104
  }
@@ -1857,6 +2168,7 @@ var RobotRock = class {
1857
2168
  }
1858
2169
  this.auth = resolveRobotRockAuthConfig({
1859
2170
  ...apiKey ? { apiKey } : {},
2171
+ ...config.actingUserId ? { actingUserId: config.actingUserId } : {},
1860
2172
  ...agentService ? { agentService } : {}
1861
2173
  });
1862
2174
  this.chatCorrelation = config.chatCorrelation;
@@ -2186,6 +2498,7 @@ function tryCreateBoundRobotRockClient(ctx) {
2186
2498
  if (apiKey) {
2187
2499
  return createClient({
2188
2500
  apiKey,
2501
+ ...caller?.userId ? { actingUserId: caller.userId } : {},
2189
2502
  baseUrl: process.env.ROBOTROCK_BASE_URL?.trim(),
2190
2503
  chatCorrelation
2191
2504
  });
@@ -2615,6 +2928,9 @@ async function agentAdminFetch(config, path, init) {
2615
2928
  }
2616
2929
  function createAgentAdminApi(config) {
2617
2930
  return {
2931
+ usage: {
2932
+ get: () => agentAdminFetch(config, "/usage")
2933
+ },
2618
2934
  members: {
2619
2935
  list: () => agentAdminFetch(config, "/members"),
2620
2936
  get: (memberRef) => agentAdminFetch(config, `/members/${encodeURIComponent(memberRef)}`),