robotrock 1.3.3 → 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 (79) hide show
  1. package/README.md +32 -0
  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 +128 -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 +128 -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 +128 -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 -3
  16. package/dist/eve/agent/index.js +736 -414
  17. package/dist/eve/agent/index.js.map +1 -1
  18. package/dist/eve/index.d.ts +4 -3
  19. package/dist/eve/index.js +437 -45
  20. package/dist/eve/index.js.map +1 -1
  21. package/dist/eve/tools/admin/assign-tasks.d.ts +40 -8
  22. package/dist/eve/tools/admin/assign-tasks.js +328 -66
  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 -8
  28. package/dist/eve/tools/admin/manage-groups.js +348 -94
  29. package/dist/eve/tools/admin/manage-groups.js.map +1 -1
  30. package/dist/eve/tools/admin/manage-team-members.d.ts +86 -8
  31. package/dist/eve/tools/admin/manage-team-members.js +318 -72
  32. package/dist/eve/tools/admin/manage-team-members.js.map +1 -1
  33. package/dist/eve/tools/admin/query-tasks.d.ts +82 -8
  34. package/dist/eve/tools/admin/query-tasks.js +360 -113
  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 -44
  43. package/dist/eve/tools/catalog/search-products.js +237 -33
  44. package/dist/eve/tools/catalog/search-products.js.map +1 -1
  45. package/dist/eve/tools/identity/index.d.ts +2 -2
  46. package/dist/eve/tools/identity/index.js +35 -44
  47. package/dist/eve/tools/identity/index.js.map +1 -1
  48. package/dist/eve/tools/identity/my-access.d.ts +90 -6
  49. package/dist/eve/tools/identity/my-access.js +35 -44
  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 +932 -288
  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 -4
  64. package/dist/index.js +335 -20
  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-DePyAbTI.d.ts +0 -203
@@ -1,6 +1,4 @@
1
1
  import * as eve_tools from 'eve/tools';
2
- import { T as ToolResultWithReplyGuidance } from '../../../tool-reply-guidance-C3qrT1In.js';
3
- import * as _robotrock_core from '@robotrock/core';
4
2
  import { z } from 'zod';
5
3
 
6
4
  declare const MANAGE_TEAM_MEMBERS_TOOL_NAME = "manage_team_members";
@@ -24,22 +22,102 @@ declare function defineManageTeamMembersTool(): eve_tools.ToolDefinition<{
24
22
  userId?: string | undefined;
25
23
  email?: string | undefined;
26
24
  role?: "admin" | "member" | undefined;
27
- }, ToolResultWithReplyGuidance<_robotrock_core.ToolDisplayEnvelope<Record<string, unknown>>> | {
25
+ }, {
26
+ members: {
27
+ name: string;
28
+ email: string;
29
+ role: string;
30
+ membershipKind: string;
31
+ profilePictureUrl: string | null;
32
+ }[];
33
+ replyGuidance?: string | undefined;
34
+ ui?: {
35
+ present?: boolean | undefined;
36
+ entity?: string | undefined;
37
+ rowsPath?: string | undefined;
38
+ layout?: "list" | "chart" | "table" | undefined;
39
+ } | undefined;
40
+ uiHint?: "list" | "chart" | "table" | undefined;
41
+ } | {
42
+ name: string;
43
+ email: string;
44
+ role: string;
45
+ membershipKind: string;
46
+ profilePictureUrl: string | null;
47
+ replyGuidance?: string | undefined;
48
+ ui?: {
49
+ present?: boolean | undefined;
50
+ entity?: string | undefined;
51
+ rowsPath?: string | undefined;
52
+ layout?: "list" | "chart" | "table" | undefined;
53
+ } | undefined;
54
+ uiHint?: "list" | "chart" | "table" | undefined;
55
+ } | {
28
56
  ok: false;
29
- status: number;
30
57
  message: string;
31
- response: unknown;
58
+ status?: number | undefined;
59
+ response?: unknown;
60
+ } | {
61
+ [x: string]: unknown;
62
+ replyGuidance?: string | undefined;
63
+ ui?: {
64
+ present?: boolean | undefined;
65
+ entity?: string | undefined;
66
+ rowsPath?: string | undefined;
67
+ layout?: "list" | "chart" | "table" | undefined;
68
+ } | undefined;
69
+ uiHint?: "list" | "chart" | "table" | undefined;
32
70
  }>;
33
71
  declare const manageTeamMembersTool: eve_tools.ToolDefinition<{
34
72
  action: "list" | "get" | "invite" | "update_role" | "remove";
35
73
  userId?: string | undefined;
36
74
  email?: string | undefined;
37
75
  role?: "admin" | "member" | undefined;
38
- }, ToolResultWithReplyGuidance<_robotrock_core.ToolDisplayEnvelope<Record<string, unknown>>> | {
76
+ }, {
77
+ members: {
78
+ name: string;
79
+ email: string;
80
+ role: string;
81
+ membershipKind: string;
82
+ profilePictureUrl: string | null;
83
+ }[];
84
+ replyGuidance?: string | undefined;
85
+ ui?: {
86
+ present?: boolean | undefined;
87
+ entity?: string | undefined;
88
+ rowsPath?: string | undefined;
89
+ layout?: "list" | "chart" | "table" | undefined;
90
+ } | undefined;
91
+ uiHint?: "list" | "chart" | "table" | undefined;
92
+ } | {
93
+ name: string;
94
+ email: string;
95
+ role: string;
96
+ membershipKind: string;
97
+ profilePictureUrl: string | null;
98
+ replyGuidance?: string | undefined;
99
+ ui?: {
100
+ present?: boolean | undefined;
101
+ entity?: string | undefined;
102
+ rowsPath?: string | undefined;
103
+ layout?: "list" | "chart" | "table" | undefined;
104
+ } | undefined;
105
+ uiHint?: "list" | "chart" | "table" | undefined;
106
+ } | {
39
107
  ok: false;
40
- status: number;
41
108
  message: string;
42
- response: unknown;
109
+ status?: number | undefined;
110
+ response?: unknown;
111
+ } | {
112
+ [x: string]: unknown;
113
+ replyGuidance?: string | undefined;
114
+ ui?: {
115
+ present?: boolean | undefined;
116
+ entity?: string | undefined;
117
+ rowsPath?: string | undefined;
118
+ layout?: "list" | "chart" | "table" | undefined;
119
+ } | undefined;
120
+ uiHint?: "list" | "chart" | "table" | undefined;
43
121
  }>;
44
122
 
45
123
  export { MANAGE_TEAM_MEMBERS_TOOL_NAME, defineManageTeamMembersTool, manageTeamMembersInputSchema, manageTeamMembersTool };
@@ -489,6 +489,40 @@ var agentChatLinkTaskBodySchema = z.object({
489
489
  publicTaskId: z.string().min(1),
490
490
  toolCallId: z.string().min(1)
491
491
  });
492
+ var AGENT_FILE_TAGS_MAX = 20;
493
+ var AGENT_FILE_TAG_MAX_LENGTH = 64;
494
+ function normalizeAgentFileTags(tags) {
495
+ if (!tags?.length) return void 0;
496
+ const seen = /* @__PURE__ */ new Set();
497
+ const out = [];
498
+ for (const raw of tags) {
499
+ const tag = raw.trim().toLowerCase().slice(0, AGENT_FILE_TAG_MAX_LENGTH);
500
+ if (!tag || seen.has(tag)) continue;
501
+ seen.add(tag);
502
+ out.push(tag);
503
+ if (out.length >= AGENT_FILE_TAGS_MAX) break;
504
+ }
505
+ return out.length > 0 ? out : void 0;
506
+ }
507
+ var agentChatUploadImageBodySchema = z.object({
508
+ mediaType: z.string().min(1),
509
+ /** Raw base64 (no data: URL prefix). */
510
+ base64: z.string().min(1),
511
+ chatId: z.string().min(1).optional(),
512
+ publicTaskId: z.string().min(1).optional(),
513
+ source: z.string().min(1).optional(),
514
+ /** Display / search name (e.g. `sunset-robot.png`). */
515
+ filename: z.string().min(1).max(255).optional(),
516
+ /** Human-readable description (e.g. generation prompt). */
517
+ description: z.string().min(1).max(2e3).optional(),
518
+ /**
519
+ * Optional labels for later grouping/filtering.
520
+ * Normalized to lowercase trimmed unique strings (max 20, 64 chars each).
521
+ */
522
+ tags: z.array(z.string().min(1).max(AGENT_FILE_TAG_MAX_LENGTH)).max(AGENT_FILE_TAGS_MAX).optional().transform((tags) => normalizeAgentFileTags(tags))
523
+ }).refine((data) => Boolean(data.chatId || data.publicTaskId), {
524
+ message: "Provide chatId and/or publicTaskId"
525
+ });
492
526
 
493
527
  // ../core/src/schemas/tool-result-display.ts
494
528
  import { z as z2 } from "zod";
@@ -517,7 +551,8 @@ var tenantRoleSchema = z3.enum(["admin", "member"]);
517
551
  var agentAdminUserSchema = z3.object({
518
552
  id: z3.string(),
519
553
  email: z3.string().email(),
520
- name: z3.string()
554
+ name: z3.string(),
555
+ profilePictureUrl: z3.string().nullable().optional()
521
556
  });
522
557
  var agentAdminMemberSchema = z3.object({
523
558
  userId: z3.string(),
@@ -602,6 +637,37 @@ var assignTasksBodySchema = z3.object({
602
637
  { message: "assignTo needs at least one user email or group slug." }
603
638
  )
604
639
  });
640
+ var agentAdminPlanLimitsSchema = z3.object({
641
+ tasksPerDay: z3.number(),
642
+ members: z3.number(),
643
+ apiKeys: z3.number(),
644
+ groups: z3.number(),
645
+ auditLogRetention: z3.number(),
646
+ rateLimitPerSecond: z3.number(),
647
+ taskRetentionDays: z3.number()
648
+ });
649
+ var agentAdminUsageSchema = z3.object({
650
+ workspace: z3.string(),
651
+ planName: z3.string(),
652
+ planType: z3.string(),
653
+ trialState: z3.enum(["none", "active", "expired"]),
654
+ daysRemaining: z3.number().nullable(),
655
+ isPaidPro: z3.boolean(),
656
+ subscriptionStatus: z3.string().nullable(),
657
+ tasksToday: z3.number(),
658
+ maxTasksPerDay: z3.number().nullable(),
659
+ tasksResetAt: z3.number(),
660
+ openTasks: z3.number(),
661
+ totalTasks: z3.number(),
662
+ seatsCurrent: z3.number(),
663
+ seatsMax: z3.number().nullable(),
664
+ groupsCurrent: z3.number(),
665
+ groupsMax: z3.number().nullable(),
666
+ apiKeysCurrent: z3.number(),
667
+ apiKeysMax: z3.number().nullable(),
668
+ rateLimitPerSecond: z3.number(),
669
+ limits: agentAdminPlanLimitsSchema
670
+ });
605
671
 
606
672
  // ../core/src/handler-retry.ts
607
673
  var HANDLER_RETRY_DELAYS_MS = [
@@ -697,7 +763,11 @@ function resolveRobotRockAuthConfig(overrides) {
697
763
  "RobotRock auth is required. Set ROBOTROCK_API_KEY, ROBOTROCK_AGENT_SERVICE_TOKEN with tenant context, or pass auth when creating the client."
698
764
  );
699
765
  }
700
- return { kind: "apiKey", apiKey };
766
+ return {
767
+ kind: "apiKey",
768
+ apiKey,
769
+ ...overrides?.actingUserId?.trim() ? { actingUserId: overrides.actingUserId.trim() } : {}
770
+ };
701
771
  }
702
772
 
703
773
  // src/eve/agent/attributes.ts
@@ -833,6 +903,9 @@ async function agentAdminFetch(config, path, init) {
833
903
  }
834
904
  function createAgentAdminApi(config) {
835
905
  return {
906
+ usage: {
907
+ get: () => agentAdminFetch(config, "/usage")
908
+ },
836
909
  members: {
837
910
  list: () => agentAdminFetch(config, "/members"),
838
911
  get: (memberRef) => agentAdminFetch(config, `/members/${encodeURIComponent(memberRef)}`),
@@ -975,20 +1048,212 @@ function requireBoundAgentAdminClient(ctx) {
975
1048
  return createBoundAgentAdminClient(ctx);
976
1049
  }
977
1050
 
978
- // src/eve/tool-result-display.ts
979
- function toolDisplayResult(data, options) {
980
- const display = options?.widget || options?.title || options?.description ? {
981
- ...options.widget ? { widget: options.widget } : {},
982
- ...options.title ? { title: options.title } : {},
983
- ...options.description ? { description: options.description } : {}
984
- } : void 0;
1051
+ // src/eve/entity-schemas.ts
1052
+ import { z as z5 } from "zod";
1053
+
1054
+ // src/eve/tool-ui-hint.ts
1055
+ var TOOL_UI_HINT_FIELD = "uiHint";
1056
+ function withUiHint(result, hint) {
985
1057
  return {
986
- ...display ? { display } : {},
987
- data,
988
- ...options?.ui ? { ui: options.ui } : {}
1058
+ ...result,
1059
+ [TOOL_UI_HINT_FIELD]: hint
989
1060
  };
990
1061
  }
991
1062
 
1063
+ // src/eve/tool-result-ui-meta.ts
1064
+ var TOOL_UI_FIELD = "ui";
1065
+ var TOOL_RESULT_UI_ENTITY_ID_RE = /^[a-z][a-z0-9_]{0,63}$/;
1066
+ function withToolUi(result, ui) {
1067
+ const existing = typeof result[TOOL_UI_FIELD] === "object" && result[TOOL_UI_FIELD] !== null && !Array.isArray(result[TOOL_UI_FIELD]) ? result[TOOL_UI_FIELD] : {};
1068
+ return {
1069
+ ...result,
1070
+ [TOOL_UI_FIELD]: {
1071
+ ...existing,
1072
+ ...ui
1073
+ }
1074
+ };
1075
+ }
1076
+
1077
+ // src/eve/entity-schemas.ts
1078
+ var toolResultUiMetaSchema = z5.object({
1079
+ present: z5.boolean().optional(),
1080
+ entity: z5.string().regex(TOOL_RESULT_UI_ENTITY_ID_RE).optional(),
1081
+ rowsPath: z5.string().min(1).optional(),
1082
+ layout: z5.enum(["list", "chart", "table"]).optional()
1083
+ }).strict();
1084
+ var agentOnlyFields = {
1085
+ replyGuidance: z5.string().optional(),
1086
+ ui: toolResultUiMetaSchema.optional(),
1087
+ uiHint: z5.enum(["list", "chart", "table"]).optional()
1088
+ };
1089
+ function withAgentOnlyFields(shape) {
1090
+ return z5.object({
1091
+ ...shape,
1092
+ ...agentOnlyFields
1093
+ });
1094
+ }
1095
+ var productEntityRowSchema = z5.object({
1096
+ id: z5.string().min(1),
1097
+ name: z5.string().min(1),
1098
+ price: z5.number(),
1099
+ currency: z5.string().min(1),
1100
+ inStock: z5.boolean(),
1101
+ url: z5.string().min(1)
1102
+ });
1103
+ var metricPointEntityRowSchema = z5.object({
1104
+ date: z5.string().optional(),
1105
+ category: z5.string().optional(),
1106
+ label: z5.string().optional()
1107
+ }).catchall(z5.union([z5.string(), z5.number()]));
1108
+ var memberEntityRowSchema = z5.object({
1109
+ name: z5.string(),
1110
+ email: z5.string(),
1111
+ role: z5.string(),
1112
+ membershipKind: z5.string(),
1113
+ profilePictureUrl: z5.string().nullable()
1114
+ });
1115
+ var taskEntityRowSchema = z5.object({
1116
+ id: z5.string().min(1),
1117
+ name: z5.string().min(1),
1118
+ status: z5.string().min(1),
1119
+ type: z5.string().nullable(),
1120
+ description: z5.string().nullable(),
1121
+ validUntil: z5.number(),
1122
+ createdAt: z5.number(),
1123
+ url: z5.string().min(1),
1124
+ threadPriority: z5.string().nullable().optional()
1125
+ });
1126
+ var groupEntityRowSchema = z5.object({
1127
+ name: z5.string().min(1),
1128
+ slug: z5.string().min(1),
1129
+ description: z5.string().nullable(),
1130
+ memberCount: z5.number().nullable(),
1131
+ url: z5.string().min(1)
1132
+ });
1133
+ var groupDetailEntitySchema = z5.object({
1134
+ name: z5.string().min(1),
1135
+ slug: z5.string().min(1),
1136
+ description: z5.string().nullable(),
1137
+ url: z5.string().min(1),
1138
+ members: z5.array(
1139
+ z5.object({
1140
+ name: z5.string(),
1141
+ email: z5.string(),
1142
+ profilePictureUrl: z5.string().nullable()
1143
+ })
1144
+ )
1145
+ });
1146
+ var statusEntityRowSchema = z5.object({
1147
+ id: z5.string().min(1),
1148
+ name: z5.string().min(1),
1149
+ status: z5.string().min(1),
1150
+ url: z5.string().min(1),
1151
+ type: z5.string().nullable().optional(),
1152
+ description: z5.string().nullable().optional()
1153
+ });
1154
+ var agentAdminErrorResultSchema = z5.object({
1155
+ ok: z5.literal(false),
1156
+ status: z5.number().optional(),
1157
+ message: z5.string(),
1158
+ response: z5.unknown().optional()
1159
+ });
1160
+ var agentAdminMutationResultSchema = z5.object({
1161
+ ...agentOnlyFields
1162
+ }).passthrough();
1163
+ var searchProductsOutputSchema = withAgentOnlyFields({
1164
+ items: z5.array(productEntityRowSchema)
1165
+ });
1166
+ var generateRandomChartOutputSchema = withAgentOnlyFields({
1167
+ title: z5.string().min(1),
1168
+ axis: z5.enum(["time", "category"]),
1169
+ series: z5.array(metricPointEntityRowSchema)
1170
+ });
1171
+ var generateImageOutputSchema = withAgentOnlyFields({
1172
+ prompt: z5.string().min(1),
1173
+ mediaType: z5.string().min(1),
1174
+ model: z5.string().min(1),
1175
+ storageId: z5.string().min(1),
1176
+ url: z5.string().min(1),
1177
+ /** @deprecated Legacy sessions only — prefer storageId/url. */
1178
+ base64: z5.string().min(1).optional()
1179
+ });
1180
+ var manageTeamMembersListOutputSchema = withAgentOnlyFields({
1181
+ members: z5.array(memberEntityRowSchema)
1182
+ });
1183
+ var manageTeamMembersDetailOutputSchema = withAgentOnlyFields(
1184
+ memberEntityRowSchema.shape
1185
+ );
1186
+ var manageTeamMembersOutputSchema = z5.union([
1187
+ manageTeamMembersListOutputSchema,
1188
+ manageTeamMembersDetailOutputSchema,
1189
+ agentAdminMutationResultSchema,
1190
+ agentAdminErrorResultSchema
1191
+ ]);
1192
+ var manageGroupsListOutputSchema = withAgentOnlyFields({
1193
+ groups: z5.array(groupEntityRowSchema)
1194
+ });
1195
+ var manageGroupsDetailOutputSchema = withAgentOnlyFields(
1196
+ groupDetailEntitySchema.shape
1197
+ );
1198
+ var manageGroupsSummaryOutputSchema = withAgentOnlyFields(
1199
+ groupEntityRowSchema.shape
1200
+ );
1201
+ var manageGroupsOutputSchema = z5.union([
1202
+ manageGroupsListOutputSchema,
1203
+ manageGroupsDetailOutputSchema,
1204
+ manageGroupsSummaryOutputSchema,
1205
+ agentAdminMutationResultSchema,
1206
+ agentAdminErrorResultSchema
1207
+ ]);
1208
+ var queryTasksListOutputSchema = withAgentOnlyFields({
1209
+ items: z5.array(taskEntityRowSchema),
1210
+ nextCursor: z5.string().nullable().optional()
1211
+ });
1212
+ var queryTasksDetailOutputSchema = withAgentOnlyFields({
1213
+ id: z5.string().nullable(),
1214
+ status: z5.string().nullable(),
1215
+ type: z5.string().nullable(),
1216
+ name: z5.string().nullable(),
1217
+ description: z5.string().nullable(),
1218
+ validUntil: z5.number().nullable(),
1219
+ createdAt: z5.number().nullable(),
1220
+ url: z5.string().min(1).nullable()
1221
+ });
1222
+ var queryTasksOutputSchema = z5.union([
1223
+ queryTasksListOutputSchema,
1224
+ queryTasksDetailOutputSchema,
1225
+ agentAdminErrorResultSchema
1226
+ ]);
1227
+ var assignTasksOutputSchema = z5.union([
1228
+ withAgentOnlyFields({
1229
+ results: z5.array(statusEntityRowSchema)
1230
+ }),
1231
+ agentAdminErrorResultSchema
1232
+ ]);
1233
+ var workspaceUsageEntitySchema = z5.object({
1234
+ workspace: z5.string(),
1235
+ plan: z5.string(),
1236
+ planType: z5.string(),
1237
+ trialState: z5.string(),
1238
+ daysRemaining: z5.number().nullable(),
1239
+ isPaidPro: z5.boolean(),
1240
+ subscriptionStatus: z5.string(),
1241
+ tasksToday: z5.string(),
1242
+ tasksResetAt: z5.string(),
1243
+ openTasks: z5.number(),
1244
+ totalTasks: z5.number(),
1245
+ seats: z5.string(),
1246
+ groups: z5.string(),
1247
+ apiKeys: z5.string(),
1248
+ rateLimitPerSecond: z5.number()
1249
+ });
1250
+ var getWorkspaceUsageOutputSchema = z5.union([
1251
+ withAgentOnlyFields({
1252
+ usage: workspaceUsageEntitySchema
1253
+ }),
1254
+ agentAdminErrorResultSchema
1255
+ ]);
1256
+
992
1257
  // src/eve/tool-reply-guidance.ts
993
1258
  var TOOL_REPLY_GUIDANCE_FIELD = "replyGuidance";
994
1259
  var MANAGE_TEAM_MEMBERS_LIST_REPLY_GUIDANCE = "Team members render as a list card in chat. Do not restate names, emails, or roles from the list. Only add context not shown (e.g. duplicates, next admin actions).";
@@ -1003,86 +1268,75 @@ function withReplyGuidance(result, guidance) {
1003
1268
 
1004
1269
  // src/eve/tool-display-format.ts
1005
1270
  function formatToolObjectResult(data, options) {
1006
- return withReplyGuidance(
1007
- toolDisplayResult(data, {
1008
- title: options.title,
1009
- description: options.description,
1010
- ui: options.ui
1011
- }),
1271
+ let result = withReplyGuidance(
1272
+ data,
1012
1273
  options.replyGuidance
1013
1274
  );
1275
+ if (options.ui) {
1276
+ result = withToolUi(result, options.ui);
1277
+ }
1278
+ if (options.uiHint) {
1279
+ result = withUiHint(result, options.uiHint);
1280
+ }
1281
+ return result;
1014
1282
  }
1015
1283
  function formatToolListResult(listKey, items, options) {
1016
- const listFieldUi = options.itemWidget ? {
1017
- "ui:widget": "list",
1018
- items: {
1019
- "ui:widget": options.itemWidget,
1020
- ...options.itemUi ?? {}
1021
- }
1022
- } : {
1023
- "ui:widget": "table",
1024
- ...options.itemUi ? { items: options.itemUi } : {}
1284
+ const ui = {
1285
+ ...options.ui,
1286
+ layout: "list",
1287
+ rowsPath: listKey,
1288
+ ...options.entity ? { entity: options.entity } : {},
1289
+ ...options.present !== void 0 ? { present: options.present } : {}
1025
1290
  };
1026
- return formatToolObjectResult(
1027
- { [listKey]: items },
1028
- {
1029
- title: options.title,
1030
- ui: {
1031
- [listKey]: listFieldUi
1032
- },
1033
- replyGuidance: options.replyGuidance
1034
- }
1291
+ return withUiHint(
1292
+ withToolUi(
1293
+ withReplyGuidance({ [listKey]: items }, options.replyGuidance),
1294
+ ui
1295
+ ),
1296
+ "list"
1035
1297
  );
1036
1298
  }
1037
1299
 
1038
1300
  // src/eve/tools/admin/format-team-members-list.ts
1039
- var MEMBER_DETAIL_UI = {
1040
- name: { "ui:title": "Name" },
1041
- email: { "ui:title": "Email" },
1042
- role: { "ui:title": "Role" },
1043
- membershipKind: { "ui:title": "Membership" }
1044
- };
1045
1301
  function serializeMemberRow(member) {
1046
1302
  return {
1047
1303
  name: member.user.name,
1048
1304
  email: member.user.email,
1049
1305
  role: member.role,
1050
- membershipKind: member.membershipKind
1306
+ membershipKind: member.membershipKind,
1307
+ profilePictureUrl: member.user.profilePictureUrl ?? null
1051
1308
  };
1052
1309
  }
1053
1310
  function formatTeamMembersListResult(members) {
1054
- const countLabel = members.length === 1 ? "1 team member" : `${members.length} team members`;
1055
1311
  return formatToolListResult(
1056
1312
  "members",
1057
1313
  members.map(serializeMemberRow),
1058
1314
  {
1059
- title: countLabel,
1060
- itemWidget: "tenantMember",
1061
- replyGuidance: MANAGE_TEAM_MEMBERS_LIST_REPLY_GUIDANCE
1315
+ replyGuidance: MANAGE_TEAM_MEMBERS_LIST_REPLY_GUIDANCE,
1316
+ entity: "member"
1062
1317
  }
1063
1318
  );
1064
1319
  }
1065
- function formatTeamMemberDetailResult(member, options) {
1320
+ function formatTeamMemberDetailResult(member) {
1066
1321
  return formatToolObjectResult(serializeMemberRow(member), {
1067
- title: options?.title ?? member.user.name,
1068
- ui: MEMBER_DETAIL_UI,
1069
- replyGuidance: MANAGE_TEAM_MEMBERS_DETAIL_REPLY_GUIDANCE
1322
+ replyGuidance: MANAGE_TEAM_MEMBERS_DETAIL_REPLY_GUIDANCE,
1323
+ ui: { entity: "member" }
1070
1324
  });
1071
1325
  }
1072
1326
 
1073
1327
  // src/eve/tools/admin/manage-team-members.ts
1074
1328
  import { defineTool } from "eve/tools";
1075
- import { z as z5 } from "zod";
1329
+ import { z as z6 } from "zod";
1076
1330
  var MANAGE_TEAM_MEMBERS_TOOL_NAME = "manage_team_members";
1077
- var manageTeamMembersInputSchema = z5.object({
1078
- action: z5.enum(["list", "get", "invite", "update_role", "remove"]),
1079
- userId: z5.string().min(1).optional().describe(
1331
+ var manageTeamMembersInputSchema = z6.object({
1332
+ action: z6.enum(["list", "get", "invite", "update_role", "remove"]),
1333
+ userId: z6.string().min(1).optional().describe(
1080
1334
  "Convex users table id for get, update_role, and remove. Prefer email when the member list only shows email."
1081
1335
  ),
1082
- email: z5.string().email().optional().describe(
1336
+ email: z6.string().email().optional().describe(
1083
1337
  "Member email for get, update_role, and remove; invitee email for invite."
1084
1338
  ),
1085
- role: z5.enum(["admin", "member"]).optional().describe("Role for invite and update_role.")
1339
+ role: z6.enum(["admin", "member"]).optional().describe("Role for invite and update_role.")
1086
1340
  }).superRefine((input, ctx) => {
1087
1341
  const requireField = (field, message) => {
1088
1342
  if (!input[field]) {
@@ -1117,20 +1371,16 @@ var manageTeamMembersInputSchema = z5.object({
1117
1371
  function resolveMemberRef(input) {
1118
1372
  return input.userId ?? input.email;
1119
1373
  }
1120
- function formatMemberMutationResult(payload, title) {
1374
+ function formatMemberMutationResult(payload) {
1121
1375
  return formatToolObjectResult(payload, {
1122
- title,
1123
- ui: {
1124
- success: { "ui:title": "Success", "ui:widget": "boolean" },
1125
- promoted: { "ui:title": "Promoted existing user", "ui:widget": "boolean" }
1126
- },
1127
1376
  replyGuidance: ADMIN_MUTATION_REPLY_GUIDANCE
1128
1377
  });
1129
1378
  }
1130
1379
  function defineManageTeamMembersTool() {
1131
1380
  return defineTool({
1132
- description: "Tenant-admin tool for workspace team members: list, get, invite, change role, or remove. Requires tenant admin access. Use member email from list results for get, update_role, and remove \u2014 internal ids are optional. Results render as chat UI cards \u2014 do not restate member names, emails, or roles in your reply.",
1381
+ description: "Tenant-admin tool for workspace team members: list, get, invite, change role, or remove. Requires tenant admin access. Call get_my_access in the same turn before this tool to verify admin access (the check stays a compact success marker unless it is the only presentable result). Use member email from list results for get, update_role, and remove \u2014 internal ids are optional. Results render as chat UI cards \u2014 do not restate member names, emails, or roles in your reply.",
1133
1382
  inputSchema: manageTeamMembersInputSchema,
1383
+ outputSchema: manageTeamMembersOutputSchema,
1134
1384
  async execute(input, ctx) {
1135
1385
  const api = requireBoundAgentAdminClient(ctx);
1136
1386
  try {
@@ -1152,13 +1402,11 @@ function defineManageTeamMembersTool() {
1152
1402
  });
1153
1403
  if (result.member) {
1154
1404
  return formatTeamMemberDetailResult(
1155
- result.member,
1156
- { title: "Member invited" }
1405
+ result.member
1157
1406
  );
1158
1407
  }
1159
1408
  return formatMemberMutationResult(
1160
- result,
1161
- "Invitation sent"
1409
+ result
1162
1410
  );
1163
1411
  }
1164
1412
  case "update_role": {
@@ -1167,16 +1415,14 @@ function defineManageTeamMembersTool() {
1167
1415
  input.role
1168
1416
  );
1169
1417
  return formatMemberMutationResult(
1170
- result,
1171
- "Member role updated"
1418
+ result
1172
1419
  );
1173
1420
  }
1174
1421
  case "remove": {
1175
1422
  const memberId = resolveMemberRef(input);
1176
1423
  const result = await api.members.remove(memberId);
1177
1424
  return formatMemberMutationResult(
1178
- result,
1179
- "Member removed"
1425
+ result
1180
1426
  );
1181
1427
  }
1182
1428
  }