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.
- package/README.md +11 -1
- package/dist/agent-admin.d.ts +5 -0
- package/dist/agent-admin.js +75 -2
- package/dist/agent-admin.js.map +1 -1
- package/dist/ai/index.d.ts +5 -5
- package/dist/ai/index.js +120 -4
- package/dist/ai/index.js.map +1 -1
- package/dist/ai/trigger.d.ts +3 -3
- package/dist/ai/trigger.js +120 -4
- package/dist/ai/trigger.js.map +1 -1
- package/dist/ai/workflow.d.ts +3 -3
- package/dist/ai/workflow.js +120 -4
- package/dist/ai/workflow.js.map +1 -1
- package/dist/{client-CZ5eWH5v.d.ts → client-BxbxttFH.d.ts} +19 -1
- package/dist/eve/agent/index.d.ts +4 -4
- package/dist/eve/agent/index.js +565 -261
- package/dist/eve/agent/index.js.map +1 -1
- package/dist/eve/index.d.ts +4 -4
- package/dist/eve/index.js +384 -7
- package/dist/eve/index.js.map +1 -1
- package/dist/eve/tools/admin/assign-tasks.d.ts +40 -19
- package/dist/eve/tools/admin/assign-tasks.js +322 -25
- package/dist/eve/tools/admin/assign-tasks.js.map +1 -1
- package/dist/eve/tools/admin/get-workspace-usage.d.ts +71 -0
- package/dist/eve/tools/admin/get-workspace-usage.js +1353 -0
- package/dist/eve/tools/admin/get-workspace-usage.js.map +1 -0
- package/dist/eve/tools/admin/manage-groups.d.ts +122 -7
- package/dist/eve/tools/admin/manage-groups.js +338 -31
- package/dist/eve/tools/admin/manage-groups.js.map +1 -1
- package/dist/eve/tools/admin/manage-team-members.d.ts +86 -7
- package/dist/eve/tools/admin/manage-team-members.js +306 -16
- package/dist/eve/tools/admin/manage-team-members.js.map +1 -1
- package/dist/eve/tools/admin/query-tasks.d.ts +85 -10
- package/dist/eve/tools/admin/query-tasks.js +351 -40
- package/dist/eve/tools/admin/query-tasks.js.map +1 -1
- package/dist/eve/tools/catalog/generate-image.d.ts +64 -0
- package/dist/eve/tools/catalog/generate-image.js +2065 -0
- package/dist/eve/tools/catalog/generate-image.js.map +1 -0
- package/dist/eve/tools/catalog/generate-random-chart.d.ts +71 -0
- package/dist/eve/tools/catalog/generate-random-chart.js +372 -0
- package/dist/eve/tools/catalog/generate-random-chart.js.map +1 -0
- package/dist/eve/tools/catalog/search-products.d.ts +36 -43
- package/dist/eve/tools/catalog/search-products.js +241 -6
- package/dist/eve/tools/catalog/search-products.js.map +1 -1
- package/dist/eve/tools/identity/index.d.ts +2 -1
- package/dist/eve/tools/identity/index.js +26 -6
- package/dist/eve/tools/identity/index.js.map +1 -1
- package/dist/eve/tools/identity/my-access.d.ts +90 -5
- package/dist/eve/tools/identity/my-access.js +26 -6
- package/dist/eve/tools/identity/my-access.js.map +1 -1
- package/dist/eve/tools/identity/whoami.d.ts +1 -1
- package/dist/eve/tools/identity/whoami.js.map +1 -1
- package/dist/eve/tools/inbox/create-task.d.ts +1 -1
- package/dist/eve/tools/inbox/create-task.js +119 -2
- package/dist/eve/tools/inbox/create-task.js.map +1 -1
- package/dist/eve/tools/inbox/index.d.ts +1 -1
- package/dist/eve/tools/inbox/index.js +119 -2
- package/dist/eve/tools/inbox/index.js.map +1 -1
- package/dist/eve/tools/index.d.ts +5 -2
- package/dist/eve/tools/index.js +908 -115
- package/dist/eve/tools/index.js.map +1 -1
- package/dist/index-Drj0Rzf_.d.ts +905 -0
- package/dist/index.d.ts +5 -5
- package/dist/index.js +316 -13
- package/dist/index.js.map +1 -1
- package/dist/schemas/index.js +67 -1
- package/dist/schemas/index.js.map +1 -1
- package/dist/{tool-approval-bridge-DnGaRES4.d.ts → tool-approval-bridge-Cz7qQUpw.d.ts} +1 -1
- package/dist/{tool-reply-guidance-C3qrT1In.d.ts → tool-reply-guidance-CJko9liH.d.ts} +5 -2
- package/dist/tool-result-ui-meta-KT0VafEO.d.ts +52 -0
- package/dist/trigger/index.d.ts +1 -1
- package/dist/trigger/index.js +118 -2
- package/dist/trigger/index.js.map +1 -1
- package/dist/{trigger--qTIK0s6.d.ts → trigger-C1ooSegc.d.ts} +2 -2
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.js +118 -2
- package/dist/workflow/index.js.map +1 -1
- package/package.json +21 -4
- package/dist/index-Blq0XoAr.d.ts +0 -204
- package/dist/tool-ui-hint-CMpug5sC.d.ts +0 -13
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// src/eve/tools/admin/manage-groups.ts
|
|
2
2
|
import { defineTool } from "eve/tools";
|
|
3
|
-
import { z as
|
|
3
|
+
import { z as z6 } from "zod";
|
|
4
4
|
|
|
5
5
|
// src/http.ts
|
|
6
6
|
var RobotRockError = class extends Error {
|
|
@@ -493,6 +493,40 @@ var agentChatLinkTaskBodySchema = z.object({
|
|
|
493
493
|
publicTaskId: z.string().min(1),
|
|
494
494
|
toolCallId: z.string().min(1)
|
|
495
495
|
});
|
|
496
|
+
var AGENT_FILE_TAGS_MAX = 20;
|
|
497
|
+
var AGENT_FILE_TAG_MAX_LENGTH = 64;
|
|
498
|
+
function normalizeAgentFileTags(tags) {
|
|
499
|
+
if (!tags?.length) return void 0;
|
|
500
|
+
const seen = /* @__PURE__ */ new Set();
|
|
501
|
+
const out = [];
|
|
502
|
+
for (const raw of tags) {
|
|
503
|
+
const tag = raw.trim().toLowerCase().slice(0, AGENT_FILE_TAG_MAX_LENGTH);
|
|
504
|
+
if (!tag || seen.has(tag)) continue;
|
|
505
|
+
seen.add(tag);
|
|
506
|
+
out.push(tag);
|
|
507
|
+
if (out.length >= AGENT_FILE_TAGS_MAX) break;
|
|
508
|
+
}
|
|
509
|
+
return out.length > 0 ? out : void 0;
|
|
510
|
+
}
|
|
511
|
+
var agentChatUploadImageBodySchema = z.object({
|
|
512
|
+
mediaType: z.string().min(1),
|
|
513
|
+
/** Raw base64 (no data: URL prefix). */
|
|
514
|
+
base64: z.string().min(1),
|
|
515
|
+
chatId: z.string().min(1).optional(),
|
|
516
|
+
publicTaskId: z.string().min(1).optional(),
|
|
517
|
+
source: z.string().min(1).optional(),
|
|
518
|
+
/** Display / search name (e.g. `sunset-robot.png`). */
|
|
519
|
+
filename: z.string().min(1).max(255).optional(),
|
|
520
|
+
/** Human-readable description (e.g. generation prompt). */
|
|
521
|
+
description: z.string().min(1).max(2e3).optional(),
|
|
522
|
+
/**
|
|
523
|
+
* Optional labels for later grouping/filtering.
|
|
524
|
+
* Normalized to lowercase trimmed unique strings (max 20, 64 chars each).
|
|
525
|
+
*/
|
|
526
|
+
tags: z.array(z.string().min(1).max(AGENT_FILE_TAG_MAX_LENGTH)).max(AGENT_FILE_TAGS_MAX).optional().transform((tags) => normalizeAgentFileTags(tags))
|
|
527
|
+
}).refine((data) => Boolean(data.chatId || data.publicTaskId), {
|
|
528
|
+
message: "Provide chatId and/or publicTaskId"
|
|
529
|
+
});
|
|
496
530
|
|
|
497
531
|
// ../core/src/schemas/tool-result-display.ts
|
|
498
532
|
import { z as z2 } from "zod";
|
|
@@ -521,7 +555,8 @@ var tenantRoleSchema = z3.enum(["admin", "member"]);
|
|
|
521
555
|
var agentAdminUserSchema = z3.object({
|
|
522
556
|
id: z3.string(),
|
|
523
557
|
email: z3.string().email(),
|
|
524
|
-
name: z3.string()
|
|
558
|
+
name: z3.string(),
|
|
559
|
+
profilePictureUrl: z3.string().nullable().optional()
|
|
525
560
|
});
|
|
526
561
|
var agentAdminMemberSchema = z3.object({
|
|
527
562
|
userId: z3.string(),
|
|
@@ -606,6 +641,37 @@ var assignTasksBodySchema = z3.object({
|
|
|
606
641
|
{ message: "assignTo needs at least one user email or group slug." }
|
|
607
642
|
)
|
|
608
643
|
});
|
|
644
|
+
var agentAdminPlanLimitsSchema = z3.object({
|
|
645
|
+
tasksPerDay: z3.number(),
|
|
646
|
+
members: z3.number(),
|
|
647
|
+
apiKeys: z3.number(),
|
|
648
|
+
groups: z3.number(),
|
|
649
|
+
auditLogRetention: z3.number(),
|
|
650
|
+
rateLimitPerSecond: z3.number(),
|
|
651
|
+
taskRetentionDays: z3.number()
|
|
652
|
+
});
|
|
653
|
+
var agentAdminUsageSchema = z3.object({
|
|
654
|
+
workspace: z3.string(),
|
|
655
|
+
planName: z3.string(),
|
|
656
|
+
planType: z3.string(),
|
|
657
|
+
trialState: z3.enum(["none", "active", "expired"]),
|
|
658
|
+
daysRemaining: z3.number().nullable(),
|
|
659
|
+
isPaidPro: z3.boolean(),
|
|
660
|
+
subscriptionStatus: z3.string().nullable(),
|
|
661
|
+
tasksToday: z3.number(),
|
|
662
|
+
maxTasksPerDay: z3.number().nullable(),
|
|
663
|
+
tasksResetAt: z3.number(),
|
|
664
|
+
openTasks: z3.number(),
|
|
665
|
+
totalTasks: z3.number(),
|
|
666
|
+
seatsCurrent: z3.number(),
|
|
667
|
+
seatsMax: z3.number().nullable(),
|
|
668
|
+
groupsCurrent: z3.number(),
|
|
669
|
+
groupsMax: z3.number().nullable(),
|
|
670
|
+
apiKeysCurrent: z3.number(),
|
|
671
|
+
apiKeysMax: z3.number().nullable(),
|
|
672
|
+
rateLimitPerSecond: z3.number(),
|
|
673
|
+
limits: agentAdminPlanLimitsSchema
|
|
674
|
+
});
|
|
609
675
|
|
|
610
676
|
// ../core/src/handler-retry.ts
|
|
611
677
|
var HANDLER_RETRY_DELAYS_MS = [
|
|
@@ -701,7 +767,11 @@ function resolveRobotRockAuthConfig(overrides) {
|
|
|
701
767
|
"RobotRock auth is required. Set ROBOTROCK_API_KEY, ROBOTROCK_AGENT_SERVICE_TOKEN with tenant context, or pass auth when creating the client."
|
|
702
768
|
);
|
|
703
769
|
}
|
|
704
|
-
return {
|
|
770
|
+
return {
|
|
771
|
+
kind: "apiKey",
|
|
772
|
+
apiKey,
|
|
773
|
+
...overrides?.actingUserId?.trim() ? { actingUserId: overrides.actingUserId.trim() } : {}
|
|
774
|
+
};
|
|
705
775
|
}
|
|
706
776
|
|
|
707
777
|
// src/eve/agent/attributes.ts
|
|
@@ -837,6 +907,9 @@ async function agentAdminFetch(config, path, init) {
|
|
|
837
907
|
}
|
|
838
908
|
function createAgentAdminApi(config) {
|
|
839
909
|
return {
|
|
910
|
+
usage: {
|
|
911
|
+
get: () => agentAdminFetch(config, "/usage")
|
|
912
|
+
},
|
|
840
913
|
members: {
|
|
841
914
|
list: () => agentAdminFetch(config, "/members"),
|
|
842
915
|
get: (memberRef) => agentAdminFetch(config, `/members/${encodeURIComponent(memberRef)}`),
|
|
@@ -979,6 +1052,9 @@ function requireBoundAgentAdminClient(ctx) {
|
|
|
979
1052
|
return createBoundAgentAdminClient(ctx);
|
|
980
1053
|
}
|
|
981
1054
|
|
|
1055
|
+
// src/eve/entity-schemas.ts
|
|
1056
|
+
import { z as z5 } from "zod";
|
|
1057
|
+
|
|
982
1058
|
// src/eve/tool-ui-hint.ts
|
|
983
1059
|
var TOOL_UI_HINT_FIELD = "uiHint";
|
|
984
1060
|
function withUiHint(result, hint) {
|
|
@@ -988,6 +1064,203 @@ function withUiHint(result, hint) {
|
|
|
988
1064
|
};
|
|
989
1065
|
}
|
|
990
1066
|
|
|
1067
|
+
// src/eve/tool-result-ui-meta.ts
|
|
1068
|
+
var TOOL_UI_FIELD = "ui";
|
|
1069
|
+
var TOOL_RESULT_UI_ENTITY_ID_RE = /^[a-z][a-z0-9_]{0,63}$/;
|
|
1070
|
+
function withToolUi(result, ui) {
|
|
1071
|
+
const existing = typeof result[TOOL_UI_FIELD] === "object" && result[TOOL_UI_FIELD] !== null && !Array.isArray(result[TOOL_UI_FIELD]) ? result[TOOL_UI_FIELD] : {};
|
|
1072
|
+
return {
|
|
1073
|
+
...result,
|
|
1074
|
+
[TOOL_UI_FIELD]: {
|
|
1075
|
+
...existing,
|
|
1076
|
+
...ui
|
|
1077
|
+
}
|
|
1078
|
+
};
|
|
1079
|
+
}
|
|
1080
|
+
|
|
1081
|
+
// src/eve/entity-schemas.ts
|
|
1082
|
+
function buildTenantGroupUrl(tenantSlug, slug) {
|
|
1083
|
+
return `/${tenantSlug}/team/groups/${slug}`;
|
|
1084
|
+
}
|
|
1085
|
+
var toolResultUiMetaSchema = z5.object({
|
|
1086
|
+
present: z5.boolean().optional(),
|
|
1087
|
+
entity: z5.string().regex(TOOL_RESULT_UI_ENTITY_ID_RE).optional(),
|
|
1088
|
+
rowsPath: z5.string().min(1).optional(),
|
|
1089
|
+
layout: z5.enum(["list", "chart", "table"]).optional()
|
|
1090
|
+
}).strict();
|
|
1091
|
+
var agentOnlyFields = {
|
|
1092
|
+
replyGuidance: z5.string().optional(),
|
|
1093
|
+
ui: toolResultUiMetaSchema.optional(),
|
|
1094
|
+
uiHint: z5.enum(["list", "chart", "table"]).optional()
|
|
1095
|
+
};
|
|
1096
|
+
function withAgentOnlyFields(shape) {
|
|
1097
|
+
return z5.object({
|
|
1098
|
+
...shape,
|
|
1099
|
+
...agentOnlyFields
|
|
1100
|
+
});
|
|
1101
|
+
}
|
|
1102
|
+
var productEntityRowSchema = z5.object({
|
|
1103
|
+
id: z5.string().min(1),
|
|
1104
|
+
name: z5.string().min(1),
|
|
1105
|
+
price: z5.number(),
|
|
1106
|
+
currency: z5.string().min(1),
|
|
1107
|
+
inStock: z5.boolean(),
|
|
1108
|
+
url: z5.string().min(1)
|
|
1109
|
+
});
|
|
1110
|
+
var metricPointEntityRowSchema = z5.object({
|
|
1111
|
+
date: z5.string().optional(),
|
|
1112
|
+
category: z5.string().optional(),
|
|
1113
|
+
label: z5.string().optional()
|
|
1114
|
+
}).catchall(z5.union([z5.string(), z5.number()]));
|
|
1115
|
+
var memberEntityRowSchema = z5.object({
|
|
1116
|
+
name: z5.string(),
|
|
1117
|
+
email: z5.string(),
|
|
1118
|
+
role: z5.string(),
|
|
1119
|
+
membershipKind: z5.string(),
|
|
1120
|
+
profilePictureUrl: z5.string().nullable()
|
|
1121
|
+
});
|
|
1122
|
+
var taskEntityRowSchema = z5.object({
|
|
1123
|
+
id: z5.string().min(1),
|
|
1124
|
+
name: z5.string().min(1),
|
|
1125
|
+
status: z5.string().min(1),
|
|
1126
|
+
type: z5.string().nullable(),
|
|
1127
|
+
description: z5.string().nullable(),
|
|
1128
|
+
validUntil: z5.number(),
|
|
1129
|
+
createdAt: z5.number(),
|
|
1130
|
+
url: z5.string().min(1),
|
|
1131
|
+
threadPriority: z5.string().nullable().optional()
|
|
1132
|
+
});
|
|
1133
|
+
var groupEntityRowSchema = z5.object({
|
|
1134
|
+
name: z5.string().min(1),
|
|
1135
|
+
slug: z5.string().min(1),
|
|
1136
|
+
description: z5.string().nullable(),
|
|
1137
|
+
memberCount: z5.number().nullable(),
|
|
1138
|
+
url: z5.string().min(1)
|
|
1139
|
+
});
|
|
1140
|
+
var groupDetailEntitySchema = z5.object({
|
|
1141
|
+
name: z5.string().min(1),
|
|
1142
|
+
slug: z5.string().min(1),
|
|
1143
|
+
description: z5.string().nullable(),
|
|
1144
|
+
url: z5.string().min(1),
|
|
1145
|
+
members: z5.array(
|
|
1146
|
+
z5.object({
|
|
1147
|
+
name: z5.string(),
|
|
1148
|
+
email: z5.string(),
|
|
1149
|
+
profilePictureUrl: z5.string().nullable()
|
|
1150
|
+
})
|
|
1151
|
+
)
|
|
1152
|
+
});
|
|
1153
|
+
var statusEntityRowSchema = z5.object({
|
|
1154
|
+
id: z5.string().min(1),
|
|
1155
|
+
name: z5.string().min(1),
|
|
1156
|
+
status: z5.string().min(1),
|
|
1157
|
+
url: z5.string().min(1),
|
|
1158
|
+
type: z5.string().nullable().optional(),
|
|
1159
|
+
description: z5.string().nullable().optional()
|
|
1160
|
+
});
|
|
1161
|
+
var agentAdminErrorResultSchema = z5.object({
|
|
1162
|
+
ok: z5.literal(false),
|
|
1163
|
+
status: z5.number().optional(),
|
|
1164
|
+
message: z5.string(),
|
|
1165
|
+
response: z5.unknown().optional()
|
|
1166
|
+
});
|
|
1167
|
+
var agentAdminMutationResultSchema = z5.object({
|
|
1168
|
+
...agentOnlyFields
|
|
1169
|
+
}).passthrough();
|
|
1170
|
+
var searchProductsOutputSchema = withAgentOnlyFields({
|
|
1171
|
+
items: z5.array(productEntityRowSchema)
|
|
1172
|
+
});
|
|
1173
|
+
var generateRandomChartOutputSchema = withAgentOnlyFields({
|
|
1174
|
+
title: z5.string().min(1),
|
|
1175
|
+
axis: z5.enum(["time", "category"]),
|
|
1176
|
+
series: z5.array(metricPointEntityRowSchema)
|
|
1177
|
+
});
|
|
1178
|
+
var generateImageOutputSchema = withAgentOnlyFields({
|
|
1179
|
+
prompt: z5.string().min(1),
|
|
1180
|
+
mediaType: z5.string().min(1),
|
|
1181
|
+
model: z5.string().min(1),
|
|
1182
|
+
storageId: z5.string().min(1),
|
|
1183
|
+
url: z5.string().min(1),
|
|
1184
|
+
/** @deprecated Legacy sessions only — prefer storageId/url. */
|
|
1185
|
+
base64: z5.string().min(1).optional()
|
|
1186
|
+
});
|
|
1187
|
+
var manageTeamMembersListOutputSchema = withAgentOnlyFields({
|
|
1188
|
+
members: z5.array(memberEntityRowSchema)
|
|
1189
|
+
});
|
|
1190
|
+
var manageTeamMembersDetailOutputSchema = withAgentOnlyFields(
|
|
1191
|
+
memberEntityRowSchema.shape
|
|
1192
|
+
);
|
|
1193
|
+
var manageTeamMembersOutputSchema = z5.union([
|
|
1194
|
+
manageTeamMembersListOutputSchema,
|
|
1195
|
+
manageTeamMembersDetailOutputSchema,
|
|
1196
|
+
agentAdminMutationResultSchema,
|
|
1197
|
+
agentAdminErrorResultSchema
|
|
1198
|
+
]);
|
|
1199
|
+
var manageGroupsListOutputSchema = withAgentOnlyFields({
|
|
1200
|
+
groups: z5.array(groupEntityRowSchema)
|
|
1201
|
+
});
|
|
1202
|
+
var manageGroupsDetailOutputSchema = withAgentOnlyFields(
|
|
1203
|
+
groupDetailEntitySchema.shape
|
|
1204
|
+
);
|
|
1205
|
+
var manageGroupsSummaryOutputSchema = withAgentOnlyFields(
|
|
1206
|
+
groupEntityRowSchema.shape
|
|
1207
|
+
);
|
|
1208
|
+
var manageGroupsOutputSchema = z5.union([
|
|
1209
|
+
manageGroupsListOutputSchema,
|
|
1210
|
+
manageGroupsDetailOutputSchema,
|
|
1211
|
+
manageGroupsSummaryOutputSchema,
|
|
1212
|
+
agentAdminMutationResultSchema,
|
|
1213
|
+
agentAdminErrorResultSchema
|
|
1214
|
+
]);
|
|
1215
|
+
var queryTasksListOutputSchema = withAgentOnlyFields({
|
|
1216
|
+
items: z5.array(taskEntityRowSchema),
|
|
1217
|
+
nextCursor: z5.string().nullable().optional()
|
|
1218
|
+
});
|
|
1219
|
+
var queryTasksDetailOutputSchema = withAgentOnlyFields({
|
|
1220
|
+
id: z5.string().nullable(),
|
|
1221
|
+
status: z5.string().nullable(),
|
|
1222
|
+
type: z5.string().nullable(),
|
|
1223
|
+
name: z5.string().nullable(),
|
|
1224
|
+
description: z5.string().nullable(),
|
|
1225
|
+
validUntil: z5.number().nullable(),
|
|
1226
|
+
createdAt: z5.number().nullable(),
|
|
1227
|
+
url: z5.string().min(1).nullable()
|
|
1228
|
+
});
|
|
1229
|
+
var queryTasksOutputSchema = z5.union([
|
|
1230
|
+
queryTasksListOutputSchema,
|
|
1231
|
+
queryTasksDetailOutputSchema,
|
|
1232
|
+
agentAdminErrorResultSchema
|
|
1233
|
+
]);
|
|
1234
|
+
var assignTasksOutputSchema = z5.union([
|
|
1235
|
+
withAgentOnlyFields({
|
|
1236
|
+
results: z5.array(statusEntityRowSchema)
|
|
1237
|
+
}),
|
|
1238
|
+
agentAdminErrorResultSchema
|
|
1239
|
+
]);
|
|
1240
|
+
var workspaceUsageEntitySchema = z5.object({
|
|
1241
|
+
workspace: z5.string(),
|
|
1242
|
+
plan: z5.string(),
|
|
1243
|
+
planType: z5.string(),
|
|
1244
|
+
trialState: z5.string(),
|
|
1245
|
+
daysRemaining: z5.number().nullable(),
|
|
1246
|
+
isPaidPro: z5.boolean(),
|
|
1247
|
+
subscriptionStatus: z5.string(),
|
|
1248
|
+
tasksToday: z5.string(),
|
|
1249
|
+
tasksResetAt: z5.string(),
|
|
1250
|
+
openTasks: z5.number(),
|
|
1251
|
+
totalTasks: z5.number(),
|
|
1252
|
+
seats: z5.string(),
|
|
1253
|
+
groups: z5.string(),
|
|
1254
|
+
apiKeys: z5.string(),
|
|
1255
|
+
rateLimitPerSecond: z5.number()
|
|
1256
|
+
});
|
|
1257
|
+
var getWorkspaceUsageOutputSchema = z5.union([
|
|
1258
|
+
withAgentOnlyFields({
|
|
1259
|
+
usage: workspaceUsageEntitySchema
|
|
1260
|
+
}),
|
|
1261
|
+
agentAdminErrorResultSchema
|
|
1262
|
+
]);
|
|
1263
|
+
|
|
991
1264
|
// src/eve/tool-reply-guidance.ts
|
|
992
1265
|
var TOOL_REPLY_GUIDANCE_FIELD = "replyGuidance";
|
|
993
1266
|
var MANAGE_GROUPS_LIST_REPLY_GUIDANCE = "Groups render as a list card in chat. Do not restate group names, slugs, or descriptions from the list. Use slug (not internal id) for get, update, delete, and membership actions. Only add context not shown.";
|
|
@@ -1002,63 +1275,85 @@ function withReplyGuidance(result, guidance) {
|
|
|
1002
1275
|
|
|
1003
1276
|
// src/eve/tool-display-format.ts
|
|
1004
1277
|
function formatToolObjectResult(data, options) {
|
|
1005
|
-
|
|
1278
|
+
let result = withReplyGuidance(
|
|
1279
|
+
data,
|
|
1280
|
+
options.replyGuidance
|
|
1281
|
+
);
|
|
1282
|
+
if (options.ui) {
|
|
1283
|
+
result = withToolUi(result, options.ui);
|
|
1284
|
+
}
|
|
1006
1285
|
if (options.uiHint) {
|
|
1007
|
-
|
|
1286
|
+
result = withUiHint(result, options.uiHint);
|
|
1008
1287
|
}
|
|
1009
|
-
return
|
|
1288
|
+
return result;
|
|
1010
1289
|
}
|
|
1011
1290
|
function formatToolListResult(listKey, items, options) {
|
|
1291
|
+
const ui = {
|
|
1292
|
+
...options.ui,
|
|
1293
|
+
layout: "list",
|
|
1294
|
+
rowsPath: listKey,
|
|
1295
|
+
...options.entity ? { entity: options.entity } : {},
|
|
1296
|
+
...options.present !== void 0 ? { present: options.present } : {}
|
|
1297
|
+
};
|
|
1012
1298
|
return withUiHint(
|
|
1013
|
-
|
|
1299
|
+
withToolUi(
|
|
1300
|
+
withReplyGuidance({ [listKey]: items }, options.replyGuidance),
|
|
1301
|
+
ui
|
|
1302
|
+
),
|
|
1014
1303
|
"list"
|
|
1015
1304
|
);
|
|
1016
1305
|
}
|
|
1017
1306
|
|
|
1018
1307
|
// src/eve/tools/admin/format-groups-list.ts
|
|
1019
|
-
function serializeGroupRow(group) {
|
|
1308
|
+
function serializeGroupRow(group, tenantSlug) {
|
|
1020
1309
|
return {
|
|
1021
1310
|
name: group.name,
|
|
1022
1311
|
slug: group.slug,
|
|
1023
1312
|
description: group.description,
|
|
1024
|
-
memberCount: group.memberCount ?? null
|
|
1313
|
+
memberCount: group.memberCount ?? null,
|
|
1314
|
+
url: buildTenantGroupUrl(tenantSlug, group.slug)
|
|
1025
1315
|
};
|
|
1026
1316
|
}
|
|
1027
|
-
function formatGroupsListResult(groups) {
|
|
1317
|
+
function formatGroupsListResult(groups, options) {
|
|
1028
1318
|
return formatToolListResult(
|
|
1029
1319
|
"groups",
|
|
1030
|
-
groups.map(serializeGroupRow),
|
|
1320
|
+
groups.map((group) => serializeGroupRow(group, options.tenantSlug)),
|
|
1031
1321
|
{
|
|
1032
|
-
replyGuidance: MANAGE_GROUPS_LIST_REPLY_GUIDANCE
|
|
1322
|
+
replyGuidance: MANAGE_GROUPS_LIST_REPLY_GUIDANCE,
|
|
1323
|
+
entity: "group"
|
|
1033
1324
|
}
|
|
1034
1325
|
);
|
|
1035
1326
|
}
|
|
1036
|
-
function formatGroupDetailResult(group) {
|
|
1327
|
+
function formatGroupDetailResult(group, options) {
|
|
1037
1328
|
return formatToolObjectResult(
|
|
1038
1329
|
{
|
|
1039
1330
|
name: group.name,
|
|
1040
1331
|
slug: group.slug,
|
|
1041
1332
|
description: group.description,
|
|
1333
|
+
url: buildTenantGroupUrl(options.tenantSlug, group.slug),
|
|
1042
1334
|
members: group.members.map((member) => ({
|
|
1043
1335
|
name: member.user.name,
|
|
1044
|
-
email: member.user.email
|
|
1336
|
+
email: member.user.email,
|
|
1337
|
+
profilePictureUrl: member.user.profilePictureUrl ?? null
|
|
1045
1338
|
}))
|
|
1046
1339
|
},
|
|
1047
1340
|
{
|
|
1048
|
-
replyGuidance: MANAGE_GROUPS_DETAIL_REPLY_GUIDANCE
|
|
1341
|
+
replyGuidance: MANAGE_GROUPS_DETAIL_REPLY_GUIDANCE,
|
|
1342
|
+
ui: { entity: "group" }
|
|
1049
1343
|
}
|
|
1050
1344
|
);
|
|
1051
1345
|
}
|
|
1052
|
-
function formatGroupSummaryResult(group) {
|
|
1053
|
-
return formatToolObjectResult(serializeGroupRow(group), {
|
|
1054
|
-
replyGuidance: MANAGE_GROUPS_DETAIL_REPLY_GUIDANCE
|
|
1346
|
+
function formatGroupSummaryResult(group, options) {
|
|
1347
|
+
return formatToolObjectResult(serializeGroupRow(group, options.tenantSlug), {
|
|
1348
|
+
replyGuidance: MANAGE_GROUPS_DETAIL_REPLY_GUIDANCE,
|
|
1349
|
+
ui: { entity: "group" }
|
|
1055
1350
|
});
|
|
1056
1351
|
}
|
|
1057
1352
|
|
|
1058
1353
|
// src/eve/tools/admin/manage-groups.ts
|
|
1059
1354
|
var MANAGE_GROUPS_TOOL_NAME = "manage_groups";
|
|
1060
|
-
var manageGroupsInputSchema =
|
|
1061
|
-
action:
|
|
1355
|
+
var manageGroupsInputSchema = z6.object({
|
|
1356
|
+
action: z6.enum([
|
|
1062
1357
|
"list",
|
|
1063
1358
|
"get",
|
|
1064
1359
|
"create",
|
|
@@ -1067,18 +1362,18 @@ var manageGroupsInputSchema = z5.object({
|
|
|
1067
1362
|
"add_member",
|
|
1068
1363
|
"remove_member"
|
|
1069
1364
|
]),
|
|
1070
|
-
groupId:
|
|
1365
|
+
groupId: z6.string().min(1).optional().describe(
|
|
1071
1366
|
"Convex group id for get, update, delete, and membership actions. Prefer slug when the group list only shows slug."
|
|
1072
1367
|
),
|
|
1073
|
-
slug:
|
|
1368
|
+
slug: z6.string().min(1).optional().describe(
|
|
1074
1369
|
"Group slug (e.g. finance) for get, update, delete, and membership actions."
|
|
1075
1370
|
),
|
|
1076
|
-
userId:
|
|
1371
|
+
userId: z6.string().min(1).optional().describe(
|
|
1077
1372
|
"User id for add_member and remove_member. Prefer email when the member list only shows email."
|
|
1078
1373
|
),
|
|
1079
|
-
email:
|
|
1080
|
-
name:
|
|
1081
|
-
description:
|
|
1374
|
+
email: z6.string().email().optional().describe("Member email for add_member and remove_member."),
|
|
1375
|
+
name: z6.string().min(1).optional().describe("Group name for create and update."),
|
|
1376
|
+
description: z6.string().optional().describe("Group description for create and update.")
|
|
1082
1377
|
}).superRefine((input, ctx) => {
|
|
1083
1378
|
const requireField = (field, message) => {
|
|
1084
1379
|
if (!input[field]) {
|
|
@@ -1132,33 +1427,45 @@ function resolveMemberRef(input) {
|
|
|
1132
1427
|
}
|
|
1133
1428
|
function defineManageGroupsTool() {
|
|
1134
1429
|
return defineTool({
|
|
1135
|
-
description: "Tenant-admin tool for workspace groups: list, get, create, update, delete, and manage group membership. Requires tenant admin access. Call get_my_access in the same turn before this tool to verify admin access (the check
|
|
1430
|
+
description: "Tenant-admin tool for workspace groups: list, get, create, update, delete, and manage group membership. 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 group slug (e.g. finance) from list results for get and membership actions \u2014 internal ids are optional. Use member email for add_member and remove_member when user ids are unknown. Results render as chat UI cards \u2014 do not restate group or member fields in your reply.",
|
|
1136
1431
|
inputSchema: manageGroupsInputSchema,
|
|
1432
|
+
outputSchema: manageGroupsOutputSchema,
|
|
1137
1433
|
async execute(input, ctx) {
|
|
1434
|
+
const caller = requireAdminCaller(ctx);
|
|
1138
1435
|
const api = requireBoundAgentAdminClient(ctx);
|
|
1436
|
+
const tenantSlug = caller.tenantSlug;
|
|
1139
1437
|
try {
|
|
1140
1438
|
switch (input.action) {
|
|
1141
1439
|
case "list": {
|
|
1142
1440
|
const result = await api.groups.list();
|
|
1143
|
-
return formatGroupsListResult(result.groups
|
|
1441
|
+
return formatGroupsListResult(result.groups, {
|
|
1442
|
+
tenantSlug
|
|
1443
|
+
});
|
|
1144
1444
|
}
|
|
1145
1445
|
case "get": {
|
|
1146
1446
|
const result = await api.groups.get(resolveGroupRef(input));
|
|
1147
|
-
return formatGroupDetailResult(
|
|
1447
|
+
return formatGroupDetailResult(
|
|
1448
|
+
result.group,
|
|
1449
|
+
{ tenantSlug }
|
|
1450
|
+
);
|
|
1148
1451
|
}
|
|
1149
1452
|
case "create": {
|
|
1150
1453
|
const result = await api.groups.create({
|
|
1151
1454
|
name: input.name,
|
|
1152
1455
|
description: input.description
|
|
1153
1456
|
});
|
|
1154
|
-
return formatGroupSummaryResult(result.group
|
|
1457
|
+
return formatGroupSummaryResult(result.group, {
|
|
1458
|
+
tenantSlug
|
|
1459
|
+
});
|
|
1155
1460
|
}
|
|
1156
1461
|
case "update": {
|
|
1157
1462
|
const result = await api.groups.update(resolveGroupRef(input), {
|
|
1158
1463
|
name: input.name,
|
|
1159
1464
|
description: input.description
|
|
1160
1465
|
});
|
|
1161
|
-
return formatGroupSummaryResult(result.group
|
|
1466
|
+
return formatGroupSummaryResult(result.group, {
|
|
1467
|
+
tenantSlug
|
|
1468
|
+
});
|
|
1162
1469
|
}
|
|
1163
1470
|
case "delete": {
|
|
1164
1471
|
const result = await api.groups.delete(resolveGroupRef(input));
|