robotrock 0.9.0 → 1.1.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 (52) hide show
  1. package/dist/ai/index.d.ts +18 -7
  2. package/dist/ai/index.js +852 -115
  3. package/dist/ai/index.js.map +1 -1
  4. package/dist/ai/trigger.d.ts +4 -3
  5. package/dist/ai/trigger.js +810 -115
  6. package/dist/ai/trigger.js.map +1 -1
  7. package/dist/ai/workflow.d.ts +15 -4
  8. package/dist/ai/workflow.js +729 -115
  9. package/dist/ai/workflow.js.map +1 -1
  10. package/dist/client-XTnFHGFE.d.ts +248 -0
  11. package/dist/eve/agent/index.d.ts +188 -0
  12. package/dist/eve/agent/index.js +2322 -0
  13. package/dist/eve/agent/index.js.map +1 -0
  14. package/dist/eve/index.d.ts +5 -0
  15. package/dist/eve/index.js +446 -0
  16. package/dist/eve/index.js.map +1 -0
  17. package/dist/eve/tools/identity/index.d.ts +6 -0
  18. package/dist/eve/tools/identity/index.js +144 -0
  19. package/dist/eve/tools/identity/index.js.map +1 -0
  20. package/dist/eve/tools/identity/my-access.d.ts +58 -0
  21. package/dist/eve/tools/identity/my-access.js +106 -0
  22. package/dist/eve/tools/identity/my-access.js.map +1 -0
  23. package/dist/eve/tools/identity/whoami.d.ts +45 -0
  24. package/dist/eve/tools/identity/whoami.js +101 -0
  25. package/dist/eve/tools/identity/whoami.js.map +1 -0
  26. package/dist/eve/tools/inbox/create-task.d.ts +113 -0
  27. package/dist/eve/tools/inbox/create-task.js +1557 -0
  28. package/dist/eve/tools/inbox/create-task.js.map +1 -0
  29. package/dist/eve/tools/inbox/index.d.ts +5 -0
  30. package/dist/eve/tools/inbox/index.js +1557 -0
  31. package/dist/eve/tools/inbox/index.js.map +1 -0
  32. package/dist/eve/tools/index.d.ts +17 -0
  33. package/dist/eve/tools/index.js +1654 -0
  34. package/dist/eve/tools/index.js.map +1 -0
  35. package/dist/index-BL9qKHA8.d.ts +141 -0
  36. package/dist/index.d.ts +12 -44
  37. package/dist/index.js +793 -97
  38. package/dist/index.js.map +1 -1
  39. package/dist/schemas/index.d.ts +11 -1
  40. package/dist/schemas/index.js +126 -8
  41. package/dist/schemas/index.js.map +1 -1
  42. package/dist/tenant-5YKDrdC-.d.ts +23 -0
  43. package/dist/{tool-approval-bridge-G765kMJR.d.ts → tool-approval-bridge-C4bTm8vu.d.ts} +93 -2
  44. package/dist/trigger/index.d.ts +2 -1
  45. package/dist/trigger/index.js +495 -87
  46. package/dist/trigger/index.js.map +1 -1
  47. package/dist/{trigger-D0shjqk0.d.ts → trigger-Dn0DFiyU.d.ts} +64 -3
  48. package/dist/workflow/index.d.ts +2 -1
  49. package/dist/workflow/index.js +496 -88
  50. package/dist/workflow/index.js.map +1 -1
  51. package/package.json +44 -7
  52. package/dist/client-Cy7YLxms.d.ts +0 -145
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/eve/tools/identity/whoami.ts","../../../../src/eve/agent/attributes.ts","../../../../src/eve/agent/tenant.ts","../../../../src/eve/tools/identity/my-access.ts"],"sourcesContent":["import { defineTool } from \"eve/tools\";\nimport { z } from \"zod\";\nimport { tryResolveTenantCaller } from \"../../agent/tenant.js\";\n\nexport const WHOAMI_TOOL_NAME = \"whoami\";\n\nexport const whoamiInputSchema = z.object({});\n\nexport function defineWhoamiTool() {\n return defineTool({\n description:\n \"Return the authenticated RobotRock user, tenant, role, and group memberships for the current chat session.\",\n inputSchema: whoamiInputSchema,\n async execute(_input, ctx) {\n const caller = tryResolveTenantCaller(ctx);\n if (!caller) {\n return {\n authenticated: false as const,\n message:\n \"No RobotRock user is attached to this session. Dashboard chat supplies user context via the Eve proxy.\",\n };\n }\n\n return {\n authenticated: true as const,\n userId: caller.userId,\n name: caller.name,\n email: caller.email,\n tenantSlug: caller.tenantSlug,\n role: caller.role,\n isAdmin: caller.isAdmin,\n groups: caller.groups.map((slug) => ({ slug })),\n ...(caller.workosUserId ? { workosUserId: caller.workosUserId } : {}),\n sessionId: ctx.session.id,\n };\n },\n });\n}\n\nexport const whoamiTool = defineWhoamiTool();\n","export function readStringAttribute(\n attributes: Readonly<Record<string, string | readonly string[]>> | undefined,\n key: string\n): string | undefined {\n const value = attributes?.[key];\n if (typeof value === \"string\" && value.length > 0) {\n return value;\n }\n if (Array.isArray(value) && typeof value[0] === \"string\" && value[0].length > 0) {\n return value[0];\n }\n return undefined;\n}\n\nexport function readStringArrayAttribute(\n attributes: Readonly<Record<string, string | readonly string[]>> | undefined,\n key: string\n): string[] {\n const value = attributes?.[key];\n if (typeof value === \"string\" && value.length > 0) {\n return [value];\n }\n if (Array.isArray(value)) {\n return value.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.length > 0\n );\n }\n return [];\n}\n\nexport function parseTenantRole(\n value: string | undefined\n): \"admin\" | \"member\" | null {\n if (value === \"admin\" || value === \"member\") {\n return value;\n }\n return null;\n}\n","import type { SessionContext } from \"eve/context\";\nimport {\n parseTenantRole,\n readStringArrayAttribute,\n readStringAttribute,\n} from \"./attributes.js\";\n\nexport type TenantRole = \"admin\" | \"member\";\n\nexport type TenantCaller = {\n userId: string;\n email: string;\n name: string;\n tenantSlug: string;\n connectionId?: string;\n role: TenantRole;\n isAdmin: boolean;\n groups: string[];\n workosUserId?: string;\n};\n\n/** Resolve the authenticated RobotRock dashboard user for the current session. */\nexport function tryResolveTenantCaller(ctx: SessionContext): TenantCaller | null {\n const caller = ctx.session.auth.initiator ?? ctx.session.auth.current;\n if (caller?.principalType !== \"user\") {\n return null;\n }\n\n const email = readStringAttribute(caller.attributes, \"email\");\n const name = readStringAttribute(caller.attributes, \"name\");\n const tenantSlug =\n readStringAttribute(caller.attributes, \"tenantSlug\") ??\n readStringAttribute(caller.attributes, \"tenantId\");\n const role = parseTenantRole(readStringAttribute(caller.attributes, \"role\"));\n if (!email || !tenantSlug || !caller.principalId || !role) {\n return null;\n }\n\n const workosUserId = readStringAttribute(caller.attributes, \"workosUserId\");\n const connectionId = readStringAttribute(caller.attributes, \"connectionId\");\n const groups = readStringArrayAttribute(caller.attributes, \"groups\");\n\n return {\n userId: caller.principalId,\n email,\n name: name ?? email.split(\"@\")[0] ?? email,\n tenantSlug,\n ...(connectionId ? { connectionId } : {}),\n role,\n isAdmin: role === \"admin\",\n groups,\n ...(workosUserId ? { workosUserId } : {}),\n };\n}\n\n/** Like {@link tryResolveTenantCaller} but throws when the session has no user. */\nexport function requireTenantCaller(ctx: SessionContext): TenantCaller {\n const caller = tryResolveTenantCaller(ctx);\n if (!caller) {\n throw new Error(\"An authenticated RobotRock tenant user is required.\");\n }\n return caller;\n}\n\nexport function isAdminCaller(ctx: SessionContext): boolean {\n return tryResolveTenantCaller(ctx)?.isAdmin === true;\n}\n\n/** Require an authenticated tenant admin for the current session. */\nexport function requireAdminCaller(ctx: SessionContext): TenantCaller {\n const caller = requireTenantCaller(ctx);\n if (!caller.isAdmin) {\n throw new Error(\"Tenant admin access is required.\");\n }\n return caller;\n}\n","import { defineTool } from \"eve/tools\";\nimport { z } from \"zod\";\nimport { tryResolveTenantCaller } from \"../../agent/tenant.js\";\n\n/** Eve tool slug — must match the agent tool filename `get_my_access.ts`. */\nexport const MY_ACCESS_TOOL_NAME = \"get_my_access\";\n\nexport const myAccessInputSchema = z.object({});\n\nfunction tenantCapabilities(isAdmin: boolean) {\n return {\n manageSettings: isAdmin,\n manageBilling: isAdmin,\n manageTeam: isAdmin,\n manageIntegrations: isAdmin,\n };\n}\n\nexport function defineMyAccessTool() {\n return defineTool({\n description:\n \"Check the authenticated user's tenant role, group memberships, and admin capabilities in RobotRock.\",\n inputSchema: myAccessInputSchema,\n async execute(_input, ctx) {\n const caller = tryResolveTenantCaller(ctx);\n if (!caller) {\n return {\n authenticated: false as const,\n message:\n \"No RobotRock user is attached to this session. Dashboard chat supplies user context via the Eve proxy.\",\n };\n }\n\n return {\n authenticated: true as const,\n tenantRole: caller.role,\n isTenantAdmin: caller.isAdmin,\n groupSlugs: caller.groups,\n capabilities: tenantCapabilities(caller.isAdmin),\n email: caller.email,\n tenantSlug: caller.tenantSlug,\n };\n },\n });\n}\n\nexport const myAccessTool = defineMyAccessTool();\n"],"mappings":"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","names":["defineTool","z","z","defineTool"]}
@@ -0,0 +1,58 @@
1
+ import * as eve_tools from 'eve/tools';
2
+ import { T as TenantRole } from '../../../tenant-5YKDrdC-.js';
3
+ import { z } from 'zod';
4
+ import 'eve/context';
5
+
6
+ /** Eve tool slug — must match the agent tool filename `get_my_access.ts`. */
7
+ declare const MY_ACCESS_TOOL_NAME = "get_my_access";
8
+ declare const myAccessInputSchema: z.ZodObject<{}, z.core.$strip>;
9
+ declare function defineMyAccessTool(): eve_tools.ToolDefinition<Record<string, never>, {
10
+ authenticated: false;
11
+ message: string;
12
+ tenantRole?: undefined;
13
+ isTenantAdmin?: undefined;
14
+ groupSlugs?: undefined;
15
+ capabilities?: undefined;
16
+ email?: undefined;
17
+ tenantSlug?: undefined;
18
+ } | {
19
+ authenticated: true;
20
+ tenantRole: TenantRole;
21
+ isTenantAdmin: boolean;
22
+ groupSlugs: string[];
23
+ capabilities: {
24
+ manageSettings: boolean;
25
+ manageBilling: boolean;
26
+ manageTeam: boolean;
27
+ manageIntegrations: boolean;
28
+ };
29
+ email: string;
30
+ tenantSlug: string;
31
+ message?: undefined;
32
+ }>;
33
+ declare const myAccessTool: eve_tools.ToolDefinition<Record<string, never>, {
34
+ authenticated: false;
35
+ message: string;
36
+ tenantRole?: undefined;
37
+ isTenantAdmin?: undefined;
38
+ groupSlugs?: undefined;
39
+ capabilities?: undefined;
40
+ email?: undefined;
41
+ tenantSlug?: undefined;
42
+ } | {
43
+ authenticated: true;
44
+ tenantRole: TenantRole;
45
+ isTenantAdmin: boolean;
46
+ groupSlugs: string[];
47
+ capabilities: {
48
+ manageSettings: boolean;
49
+ manageBilling: boolean;
50
+ manageTeam: boolean;
51
+ manageIntegrations: boolean;
52
+ };
53
+ email: string;
54
+ tenantSlug: string;
55
+ message?: undefined;
56
+ }>;
57
+
58
+ export { MY_ACCESS_TOOL_NAME, defineMyAccessTool, myAccessInputSchema, myAccessTool };
@@ -0,0 +1,106 @@
1
+ // src/eve/tools/identity/my-access.ts
2
+ import { defineTool } from "eve/tools";
3
+ import { z } from "zod";
4
+
5
+ // src/eve/agent/attributes.ts
6
+ function readStringAttribute(attributes, key) {
7
+ const value = attributes?.[key];
8
+ if (typeof value === "string" && value.length > 0) {
9
+ return value;
10
+ }
11
+ if (Array.isArray(value) && typeof value[0] === "string" && value[0].length > 0) {
12
+ return value[0];
13
+ }
14
+ return void 0;
15
+ }
16
+ function readStringArrayAttribute(attributes, key) {
17
+ const value = attributes?.[key];
18
+ if (typeof value === "string" && value.length > 0) {
19
+ return [value];
20
+ }
21
+ if (Array.isArray(value)) {
22
+ return value.filter(
23
+ (entry) => typeof entry === "string" && entry.length > 0
24
+ );
25
+ }
26
+ return [];
27
+ }
28
+ function parseTenantRole(value) {
29
+ if (value === "admin" || value === "member") {
30
+ return value;
31
+ }
32
+ return null;
33
+ }
34
+
35
+ // src/eve/agent/tenant.ts
36
+ function tryResolveTenantCaller(ctx) {
37
+ const caller = ctx.session.auth.initiator ?? ctx.session.auth.current;
38
+ if (caller?.principalType !== "user") {
39
+ return null;
40
+ }
41
+ const email = readStringAttribute(caller.attributes, "email");
42
+ const name = readStringAttribute(caller.attributes, "name");
43
+ const tenantSlug = readStringAttribute(caller.attributes, "tenantSlug") ?? readStringAttribute(caller.attributes, "tenantId");
44
+ const role = parseTenantRole(readStringAttribute(caller.attributes, "role"));
45
+ if (!email || !tenantSlug || !caller.principalId || !role) {
46
+ return null;
47
+ }
48
+ const workosUserId = readStringAttribute(caller.attributes, "workosUserId");
49
+ const connectionId = readStringAttribute(caller.attributes, "connectionId");
50
+ const groups = readStringArrayAttribute(caller.attributes, "groups");
51
+ return {
52
+ userId: caller.principalId,
53
+ email,
54
+ name: name ?? email.split("@")[0] ?? email,
55
+ tenantSlug,
56
+ ...connectionId ? { connectionId } : {},
57
+ role,
58
+ isAdmin: role === "admin",
59
+ groups,
60
+ ...workosUserId ? { workosUserId } : {}
61
+ };
62
+ }
63
+
64
+ // src/eve/tools/identity/my-access.ts
65
+ var MY_ACCESS_TOOL_NAME = "get_my_access";
66
+ var myAccessInputSchema = z.object({});
67
+ function tenantCapabilities(isAdmin) {
68
+ return {
69
+ manageSettings: isAdmin,
70
+ manageBilling: isAdmin,
71
+ manageTeam: isAdmin,
72
+ manageIntegrations: isAdmin
73
+ };
74
+ }
75
+ function defineMyAccessTool() {
76
+ return defineTool({
77
+ description: "Check the authenticated user's tenant role, group memberships, and admin capabilities in RobotRock.",
78
+ inputSchema: myAccessInputSchema,
79
+ async execute(_input, ctx) {
80
+ const caller = tryResolveTenantCaller(ctx);
81
+ if (!caller) {
82
+ return {
83
+ authenticated: false,
84
+ message: "No RobotRock user is attached to this session. Dashboard chat supplies user context via the Eve proxy."
85
+ };
86
+ }
87
+ return {
88
+ authenticated: true,
89
+ tenantRole: caller.role,
90
+ isTenantAdmin: caller.isAdmin,
91
+ groupSlugs: caller.groups,
92
+ capabilities: tenantCapabilities(caller.isAdmin),
93
+ email: caller.email,
94
+ tenantSlug: caller.tenantSlug
95
+ };
96
+ }
97
+ });
98
+ }
99
+ var myAccessTool = defineMyAccessTool();
100
+ export {
101
+ MY_ACCESS_TOOL_NAME,
102
+ defineMyAccessTool,
103
+ myAccessInputSchema,
104
+ myAccessTool
105
+ };
106
+ //# sourceMappingURL=my-access.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/eve/tools/identity/my-access.ts","../../../../src/eve/agent/attributes.ts","../../../../src/eve/agent/tenant.ts"],"sourcesContent":["import { defineTool } from \"eve/tools\";\nimport { z } from \"zod\";\nimport { tryResolveTenantCaller } from \"../../agent/tenant.js\";\n\n/** Eve tool slug — must match the agent tool filename `get_my_access.ts`. */\nexport const MY_ACCESS_TOOL_NAME = \"get_my_access\";\n\nexport const myAccessInputSchema = z.object({});\n\nfunction tenantCapabilities(isAdmin: boolean) {\n return {\n manageSettings: isAdmin,\n manageBilling: isAdmin,\n manageTeam: isAdmin,\n manageIntegrations: isAdmin,\n };\n}\n\nexport function defineMyAccessTool() {\n return defineTool({\n description:\n \"Check the authenticated user's tenant role, group memberships, and admin capabilities in RobotRock.\",\n inputSchema: myAccessInputSchema,\n async execute(_input, ctx) {\n const caller = tryResolveTenantCaller(ctx);\n if (!caller) {\n return {\n authenticated: false as const,\n message:\n \"No RobotRock user is attached to this session. Dashboard chat supplies user context via the Eve proxy.\",\n };\n }\n\n return {\n authenticated: true as const,\n tenantRole: caller.role,\n isTenantAdmin: caller.isAdmin,\n groupSlugs: caller.groups,\n capabilities: tenantCapabilities(caller.isAdmin),\n email: caller.email,\n tenantSlug: caller.tenantSlug,\n };\n },\n });\n}\n\nexport const myAccessTool = defineMyAccessTool();\n","export function readStringAttribute(\n attributes: Readonly<Record<string, string | readonly string[]>> | undefined,\n key: string\n): string | undefined {\n const value = attributes?.[key];\n if (typeof value === \"string\" && value.length > 0) {\n return value;\n }\n if (Array.isArray(value) && typeof value[0] === \"string\" && value[0].length > 0) {\n return value[0];\n }\n return undefined;\n}\n\nexport function readStringArrayAttribute(\n attributes: Readonly<Record<string, string | readonly string[]>> | undefined,\n key: string\n): string[] {\n const value = attributes?.[key];\n if (typeof value === \"string\" && value.length > 0) {\n return [value];\n }\n if (Array.isArray(value)) {\n return value.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.length > 0\n );\n }\n return [];\n}\n\nexport function parseTenantRole(\n value: string | undefined\n): \"admin\" | \"member\" | null {\n if (value === \"admin\" || value === \"member\") {\n return value;\n }\n return null;\n}\n","import type { SessionContext } from \"eve/context\";\nimport {\n parseTenantRole,\n readStringArrayAttribute,\n readStringAttribute,\n} from \"./attributes.js\";\n\nexport type TenantRole = \"admin\" | \"member\";\n\nexport type TenantCaller = {\n userId: string;\n email: string;\n name: string;\n tenantSlug: string;\n connectionId?: string;\n role: TenantRole;\n isAdmin: boolean;\n groups: string[];\n workosUserId?: string;\n};\n\n/** Resolve the authenticated RobotRock dashboard user for the current session. */\nexport function tryResolveTenantCaller(ctx: SessionContext): TenantCaller | null {\n const caller = ctx.session.auth.initiator ?? ctx.session.auth.current;\n if (caller?.principalType !== \"user\") {\n return null;\n }\n\n const email = readStringAttribute(caller.attributes, \"email\");\n const name = readStringAttribute(caller.attributes, \"name\");\n const tenantSlug =\n readStringAttribute(caller.attributes, \"tenantSlug\") ??\n readStringAttribute(caller.attributes, \"tenantId\");\n const role = parseTenantRole(readStringAttribute(caller.attributes, \"role\"));\n if (!email || !tenantSlug || !caller.principalId || !role) {\n return null;\n }\n\n const workosUserId = readStringAttribute(caller.attributes, \"workosUserId\");\n const connectionId = readStringAttribute(caller.attributes, \"connectionId\");\n const groups = readStringArrayAttribute(caller.attributes, \"groups\");\n\n return {\n userId: caller.principalId,\n email,\n name: name ?? email.split(\"@\")[0] ?? email,\n tenantSlug,\n ...(connectionId ? { connectionId } : {}),\n role,\n isAdmin: role === \"admin\",\n groups,\n ...(workosUserId ? { workosUserId } : {}),\n };\n}\n\n/** Like {@link tryResolveTenantCaller} but throws when the session has no user. */\nexport function requireTenantCaller(ctx: SessionContext): TenantCaller {\n const caller = tryResolveTenantCaller(ctx);\n if (!caller) {\n throw new Error(\"An authenticated RobotRock tenant user is required.\");\n }\n return caller;\n}\n\nexport function isAdminCaller(ctx: SessionContext): boolean {\n return tryResolveTenantCaller(ctx)?.isAdmin === true;\n}\n\n/** Require an authenticated tenant admin for the current session. */\nexport function requireAdminCaller(ctx: SessionContext): TenantCaller {\n const caller = requireTenantCaller(ctx);\n if (!caller.isAdmin) {\n throw new Error(\"Tenant admin access is required.\");\n }\n return caller;\n}\n"],"mappings":";AAAA,SAAS,kBAAkB;AAC3B,SAAS,SAAS;;;ACDX,SAAS,oBACd,YACA,KACoB;AACpB,QAAM,QAAQ,aAAa,GAAG;AAC9B,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG;AACjD,WAAO;AAAA,EACT;AACA,MAAI,MAAM,QAAQ,KAAK,KAAK,OAAO,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,EAAE,SAAS,GAAG;AAC/E,WAAO,MAAM,CAAC;AAAA,EAChB;AACA,SAAO;AACT;AAEO,SAAS,yBACd,YACA,KACU;AACV,QAAM,QAAQ,aAAa,GAAG;AAC9B,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG;AACjD,WAAO,CAAC,KAAK;AAAA,EACf;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM;AAAA,MACX,CAAC,UAA2B,OAAO,UAAU,YAAY,MAAM,SAAS;AAAA,IAC1E;AAAA,EACF;AACA,SAAO,CAAC;AACV;AAEO,SAAS,gBACd,OAC2B;AAC3B,MAAI,UAAU,WAAW,UAAU,UAAU;AAC3C,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACfO,SAAS,uBAAuB,KAA0C;AAC/E,QAAM,SAAS,IAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK;AAC9D,MAAI,QAAQ,kBAAkB,QAAQ;AACpC,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,oBAAoB,OAAO,YAAY,OAAO;AAC5D,QAAM,OAAO,oBAAoB,OAAO,YAAY,MAAM;AAC1D,QAAM,aACJ,oBAAoB,OAAO,YAAY,YAAY,KACnD,oBAAoB,OAAO,YAAY,UAAU;AACnD,QAAM,OAAO,gBAAgB,oBAAoB,OAAO,YAAY,MAAM,CAAC;AAC3E,MAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM;AACzD,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,oBAAoB,OAAO,YAAY,cAAc;AAC1E,QAAM,eAAe,oBAAoB,OAAO,YAAY,cAAc;AAC1E,QAAM,SAAS,yBAAyB,OAAO,YAAY,QAAQ;AAEnE,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf;AAAA,IACA,MAAM,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,IACrC;AAAA,IACA,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,IACvC;AAAA,IACA,SAAS,SAAS;AAAA,IAClB;AAAA,IACA,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,EACzC;AACF;;;AFhDO,IAAM,sBAAsB;AAE5B,IAAM,sBAAsB,EAAE,OAAO,CAAC,CAAC;AAE9C,SAAS,mBAAmB,SAAkB;AAC5C,SAAO;AAAA,IACL,gBAAgB;AAAA,IAChB,eAAe;AAAA,IACf,YAAY;AAAA,IACZ,oBAAoB;AAAA,EACtB;AACF;AAEO,SAAS,qBAAqB;AACnC,SAAO,WAAW;AAAA,IAChB,aACE;AAAA,IACF,aAAa;AAAA,IACb,MAAM,QAAQ,QAAQ,KAAK;AACzB,YAAM,SAAS,uBAAuB,GAAG;AACzC,UAAI,CAAC,QAAQ;AACX,eAAO;AAAA,UACL,eAAe;AAAA,UACf,SACE;AAAA,QACJ;AAAA,MACF;AAEA,aAAO;AAAA,QACL,eAAe;AAAA,QACf,YAAY,OAAO;AAAA,QACnB,eAAe,OAAO;AAAA,QACtB,YAAY,OAAO;AAAA,QACnB,cAAc,mBAAmB,OAAO,OAAO;AAAA,QAC/C,OAAO,OAAO;AAAA,QACd,YAAY,OAAO;AAAA,MACrB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,IAAM,eAAe,mBAAmB;","names":[]}
@@ -0,0 +1,45 @@
1
+ import * as eve_tools from 'eve/tools';
2
+ import { T as TenantRole } from '../../../tenant-5YKDrdC-.js';
3
+ import { z } from 'zod';
4
+ import 'eve/context';
5
+
6
+ declare const WHOAMI_TOOL_NAME = "whoami";
7
+ declare const whoamiInputSchema: z.ZodObject<{}, z.core.$strip>;
8
+ declare function defineWhoamiTool(): eve_tools.ToolDefinition<Record<string, never>, {
9
+ authenticated: false;
10
+ message: string;
11
+ } | {
12
+ sessionId: string;
13
+ workosUserId?: string | undefined;
14
+ authenticated: true;
15
+ userId: string;
16
+ name: string;
17
+ email: string;
18
+ tenantSlug: string;
19
+ role: TenantRole;
20
+ isAdmin: boolean;
21
+ groups: {
22
+ slug: string;
23
+ }[];
24
+ message?: undefined;
25
+ }>;
26
+ declare const whoamiTool: eve_tools.ToolDefinition<Record<string, never>, {
27
+ authenticated: false;
28
+ message: string;
29
+ } | {
30
+ sessionId: string;
31
+ workosUserId?: string | undefined;
32
+ authenticated: true;
33
+ userId: string;
34
+ name: string;
35
+ email: string;
36
+ tenantSlug: string;
37
+ role: TenantRole;
38
+ isAdmin: boolean;
39
+ groups: {
40
+ slug: string;
41
+ }[];
42
+ message?: undefined;
43
+ }>;
44
+
45
+ export { WHOAMI_TOOL_NAME, defineWhoamiTool, whoamiInputSchema, whoamiTool };
@@ -0,0 +1,101 @@
1
+ // src/eve/tools/identity/whoami.ts
2
+ import { defineTool } from "eve/tools";
3
+ import { z } from "zod";
4
+
5
+ // src/eve/agent/attributes.ts
6
+ function readStringAttribute(attributes, key) {
7
+ const value = attributes?.[key];
8
+ if (typeof value === "string" && value.length > 0) {
9
+ return value;
10
+ }
11
+ if (Array.isArray(value) && typeof value[0] === "string" && value[0].length > 0) {
12
+ return value[0];
13
+ }
14
+ return void 0;
15
+ }
16
+ function readStringArrayAttribute(attributes, key) {
17
+ const value = attributes?.[key];
18
+ if (typeof value === "string" && value.length > 0) {
19
+ return [value];
20
+ }
21
+ if (Array.isArray(value)) {
22
+ return value.filter(
23
+ (entry) => typeof entry === "string" && entry.length > 0
24
+ );
25
+ }
26
+ return [];
27
+ }
28
+ function parseTenantRole(value) {
29
+ if (value === "admin" || value === "member") {
30
+ return value;
31
+ }
32
+ return null;
33
+ }
34
+
35
+ // src/eve/agent/tenant.ts
36
+ function tryResolveTenantCaller(ctx) {
37
+ const caller = ctx.session.auth.initiator ?? ctx.session.auth.current;
38
+ if (caller?.principalType !== "user") {
39
+ return null;
40
+ }
41
+ const email = readStringAttribute(caller.attributes, "email");
42
+ const name = readStringAttribute(caller.attributes, "name");
43
+ const tenantSlug = readStringAttribute(caller.attributes, "tenantSlug") ?? readStringAttribute(caller.attributes, "tenantId");
44
+ const role = parseTenantRole(readStringAttribute(caller.attributes, "role"));
45
+ if (!email || !tenantSlug || !caller.principalId || !role) {
46
+ return null;
47
+ }
48
+ const workosUserId = readStringAttribute(caller.attributes, "workosUserId");
49
+ const connectionId = readStringAttribute(caller.attributes, "connectionId");
50
+ const groups = readStringArrayAttribute(caller.attributes, "groups");
51
+ return {
52
+ userId: caller.principalId,
53
+ email,
54
+ name: name ?? email.split("@")[0] ?? email,
55
+ tenantSlug,
56
+ ...connectionId ? { connectionId } : {},
57
+ role,
58
+ isAdmin: role === "admin",
59
+ groups,
60
+ ...workosUserId ? { workosUserId } : {}
61
+ };
62
+ }
63
+
64
+ // src/eve/tools/identity/whoami.ts
65
+ var WHOAMI_TOOL_NAME = "whoami";
66
+ var whoamiInputSchema = z.object({});
67
+ function defineWhoamiTool() {
68
+ return defineTool({
69
+ description: "Return the authenticated RobotRock user, tenant, role, and group memberships for the current chat session.",
70
+ inputSchema: whoamiInputSchema,
71
+ async execute(_input, ctx) {
72
+ const caller = tryResolveTenantCaller(ctx);
73
+ if (!caller) {
74
+ return {
75
+ authenticated: false,
76
+ message: "No RobotRock user is attached to this session. Dashboard chat supplies user context via the Eve proxy."
77
+ };
78
+ }
79
+ return {
80
+ authenticated: true,
81
+ userId: caller.userId,
82
+ name: caller.name,
83
+ email: caller.email,
84
+ tenantSlug: caller.tenantSlug,
85
+ role: caller.role,
86
+ isAdmin: caller.isAdmin,
87
+ groups: caller.groups.map((slug) => ({ slug })),
88
+ ...caller.workosUserId ? { workosUserId: caller.workosUserId } : {},
89
+ sessionId: ctx.session.id
90
+ };
91
+ }
92
+ });
93
+ }
94
+ var whoamiTool = defineWhoamiTool();
95
+ export {
96
+ WHOAMI_TOOL_NAME,
97
+ defineWhoamiTool,
98
+ whoamiInputSchema,
99
+ whoamiTool
100
+ };
101
+ //# sourceMappingURL=whoami.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../../src/eve/tools/identity/whoami.ts","../../../../src/eve/agent/attributes.ts","../../../../src/eve/agent/tenant.ts"],"sourcesContent":["import { defineTool } from \"eve/tools\";\nimport { z } from \"zod\";\nimport { tryResolveTenantCaller } from \"../../agent/tenant.js\";\n\nexport const WHOAMI_TOOL_NAME = \"whoami\";\n\nexport const whoamiInputSchema = z.object({});\n\nexport function defineWhoamiTool() {\n return defineTool({\n description:\n \"Return the authenticated RobotRock user, tenant, role, and group memberships for the current chat session.\",\n inputSchema: whoamiInputSchema,\n async execute(_input, ctx) {\n const caller = tryResolveTenantCaller(ctx);\n if (!caller) {\n return {\n authenticated: false as const,\n message:\n \"No RobotRock user is attached to this session. Dashboard chat supplies user context via the Eve proxy.\",\n };\n }\n\n return {\n authenticated: true as const,\n userId: caller.userId,\n name: caller.name,\n email: caller.email,\n tenantSlug: caller.tenantSlug,\n role: caller.role,\n isAdmin: caller.isAdmin,\n groups: caller.groups.map((slug) => ({ slug })),\n ...(caller.workosUserId ? { workosUserId: caller.workosUserId } : {}),\n sessionId: ctx.session.id,\n };\n },\n });\n}\n\nexport const whoamiTool = defineWhoamiTool();\n","export function readStringAttribute(\n attributes: Readonly<Record<string, string | readonly string[]>> | undefined,\n key: string\n): string | undefined {\n const value = attributes?.[key];\n if (typeof value === \"string\" && value.length > 0) {\n return value;\n }\n if (Array.isArray(value) && typeof value[0] === \"string\" && value[0].length > 0) {\n return value[0];\n }\n return undefined;\n}\n\nexport function readStringArrayAttribute(\n attributes: Readonly<Record<string, string | readonly string[]>> | undefined,\n key: string\n): string[] {\n const value = attributes?.[key];\n if (typeof value === \"string\" && value.length > 0) {\n return [value];\n }\n if (Array.isArray(value)) {\n return value.filter(\n (entry): entry is string => typeof entry === \"string\" && entry.length > 0\n );\n }\n return [];\n}\n\nexport function parseTenantRole(\n value: string | undefined\n): \"admin\" | \"member\" | null {\n if (value === \"admin\" || value === \"member\") {\n return value;\n }\n return null;\n}\n","import type { SessionContext } from \"eve/context\";\nimport {\n parseTenantRole,\n readStringArrayAttribute,\n readStringAttribute,\n} from \"./attributes.js\";\n\nexport type TenantRole = \"admin\" | \"member\";\n\nexport type TenantCaller = {\n userId: string;\n email: string;\n name: string;\n tenantSlug: string;\n connectionId?: string;\n role: TenantRole;\n isAdmin: boolean;\n groups: string[];\n workosUserId?: string;\n};\n\n/** Resolve the authenticated RobotRock dashboard user for the current session. */\nexport function tryResolveTenantCaller(ctx: SessionContext): TenantCaller | null {\n const caller = ctx.session.auth.initiator ?? ctx.session.auth.current;\n if (caller?.principalType !== \"user\") {\n return null;\n }\n\n const email = readStringAttribute(caller.attributes, \"email\");\n const name = readStringAttribute(caller.attributes, \"name\");\n const tenantSlug =\n readStringAttribute(caller.attributes, \"tenantSlug\") ??\n readStringAttribute(caller.attributes, \"tenantId\");\n const role = parseTenantRole(readStringAttribute(caller.attributes, \"role\"));\n if (!email || !tenantSlug || !caller.principalId || !role) {\n return null;\n }\n\n const workosUserId = readStringAttribute(caller.attributes, \"workosUserId\");\n const connectionId = readStringAttribute(caller.attributes, \"connectionId\");\n const groups = readStringArrayAttribute(caller.attributes, \"groups\");\n\n return {\n userId: caller.principalId,\n email,\n name: name ?? email.split(\"@\")[0] ?? email,\n tenantSlug,\n ...(connectionId ? { connectionId } : {}),\n role,\n isAdmin: role === \"admin\",\n groups,\n ...(workosUserId ? { workosUserId } : {}),\n };\n}\n\n/** Like {@link tryResolveTenantCaller} but throws when the session has no user. */\nexport function requireTenantCaller(ctx: SessionContext): TenantCaller {\n const caller = tryResolveTenantCaller(ctx);\n if (!caller) {\n throw new Error(\"An authenticated RobotRock tenant user is required.\");\n }\n return caller;\n}\n\nexport function isAdminCaller(ctx: SessionContext): boolean {\n return tryResolveTenantCaller(ctx)?.isAdmin === true;\n}\n\n/** Require an authenticated tenant admin for the current session. */\nexport function requireAdminCaller(ctx: SessionContext): TenantCaller {\n const caller = requireTenantCaller(ctx);\n if (!caller.isAdmin) {\n throw new Error(\"Tenant admin access is required.\");\n }\n return caller;\n}\n"],"mappings":";AAAA,SAAS,kBAAkB;AAC3B,SAAS,SAAS;;;ACDX,SAAS,oBACd,YACA,KACoB;AACpB,QAAM,QAAQ,aAAa,GAAG;AAC9B,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG;AACjD,WAAO;AAAA,EACT;AACA,MAAI,MAAM,QAAQ,KAAK,KAAK,OAAO,MAAM,CAAC,MAAM,YAAY,MAAM,CAAC,EAAE,SAAS,GAAG;AAC/E,WAAO,MAAM,CAAC;AAAA,EAChB;AACA,SAAO;AACT;AAEO,SAAS,yBACd,YACA,KACU;AACV,QAAM,QAAQ,aAAa,GAAG;AAC9B,MAAI,OAAO,UAAU,YAAY,MAAM,SAAS,GAAG;AACjD,WAAO,CAAC,KAAK;AAAA,EACf;AACA,MAAI,MAAM,QAAQ,KAAK,GAAG;AACxB,WAAO,MAAM;AAAA,MACX,CAAC,UAA2B,OAAO,UAAU,YAAY,MAAM,SAAS;AAAA,IAC1E;AAAA,EACF;AACA,SAAO,CAAC;AACV;AAEO,SAAS,gBACd,OAC2B;AAC3B,MAAI,UAAU,WAAW,UAAU,UAAU;AAC3C,WAAO;AAAA,EACT;AACA,SAAO;AACT;;;ACfO,SAAS,uBAAuB,KAA0C;AAC/E,QAAM,SAAS,IAAI,QAAQ,KAAK,aAAa,IAAI,QAAQ,KAAK;AAC9D,MAAI,QAAQ,kBAAkB,QAAQ;AACpC,WAAO;AAAA,EACT;AAEA,QAAM,QAAQ,oBAAoB,OAAO,YAAY,OAAO;AAC5D,QAAM,OAAO,oBAAoB,OAAO,YAAY,MAAM;AAC1D,QAAM,aACJ,oBAAoB,OAAO,YAAY,YAAY,KACnD,oBAAoB,OAAO,YAAY,UAAU;AACnD,QAAM,OAAO,gBAAgB,oBAAoB,OAAO,YAAY,MAAM,CAAC;AAC3E,MAAI,CAAC,SAAS,CAAC,cAAc,CAAC,OAAO,eAAe,CAAC,MAAM;AACzD,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,oBAAoB,OAAO,YAAY,cAAc;AAC1E,QAAM,eAAe,oBAAoB,OAAO,YAAY,cAAc;AAC1E,QAAM,SAAS,yBAAyB,OAAO,YAAY,QAAQ;AAEnE,SAAO;AAAA,IACL,QAAQ,OAAO;AAAA,IACf;AAAA,IACA,MAAM,QAAQ,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK;AAAA,IACrC;AAAA,IACA,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,IACvC;AAAA,IACA,SAAS,SAAS;AAAA,IAClB;AAAA,IACA,GAAI,eAAe,EAAE,aAAa,IAAI,CAAC;AAAA,EACzC;AACF;;;AFjDO,IAAM,mBAAmB;AAEzB,IAAM,oBAAoB,EAAE,OAAO,CAAC,CAAC;AAErC,SAAS,mBAAmB;AACjC,SAAO,WAAW;AAAA,IAChB,aACE;AAAA,IACF,aAAa;AAAA,IACb,MAAM,QAAQ,QAAQ,KAAK;AACzB,YAAM,SAAS,uBAAuB,GAAG;AACzC,UAAI,CAAC,QAAQ;AACX,eAAO;AAAA,UACL,eAAe;AAAA,UACf,SACE;AAAA,QACJ;AAAA,MACF;AAEA,aAAO;AAAA,QACL,eAAe;AAAA,QACf,QAAQ,OAAO;AAAA,QACf,MAAM,OAAO;AAAA,QACb,OAAO,OAAO;AAAA,QACd,YAAY,OAAO;AAAA,QACnB,MAAM,OAAO;AAAA,QACb,SAAS,OAAO;AAAA,QAChB,QAAQ,OAAO,OAAO,IAAI,CAAC,UAAU,EAAE,KAAK,EAAE;AAAA,QAC9C,GAAI,OAAO,eAAe,EAAE,cAAc,OAAO,aAAa,IAAI,CAAC;AAAA,QACnE,WAAW,IAAI,QAAQ;AAAA,MACzB;AAAA,IACF;AAAA,EACF,CAAC;AACH;AAEO,IAAM,aAAa,iBAAiB;","names":[]}
@@ -0,0 +1,113 @@
1
+ import * as eve_tools from 'eve/tools';
2
+ import { z } from 'zod';
3
+ import { a as TenantCaller } from '../../../tenant-5YKDrdC-.js';
4
+ import 'eve/context';
5
+
6
+ /** Eve tool slug — must match the agent tool filename `create_robotrock_task.ts`. */
7
+ declare const CREATE_INBOX_TASK_TOOL_NAME = "create_robotrock_task";
8
+ declare const createInboxTaskInputSchema: z.ZodObject<{
9
+ type: z.ZodString;
10
+ name: z.ZodString;
11
+ description: z.ZodOptional<z.ZodString>;
12
+ actions: z.ZodArray<z.ZodObject<{
13
+ id: z.ZodString;
14
+ title: z.ZodString;
15
+ description: z.ZodOptional<z.ZodString>;
16
+ }, z.core.$strip>>;
17
+ assignTo: z.ZodOptional<z.ZodObject<{
18
+ users: z.ZodOptional<z.ZodArray<z.ZodString>>;
19
+ groups: z.ZodOptional<z.ZodArray<z.ZodString>>;
20
+ }, z.core.$strip>>;
21
+ context: z.ZodOptional<z.ZodObject<{
22
+ data: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
23
+ ui: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
24
+ }, z.core.$strip>>;
25
+ validUntilHours: z.ZodOptional<z.ZodNumber>;
26
+ priority: z.ZodOptional<z.ZodEnum<{
27
+ low: "low";
28
+ normal: "normal";
29
+ high: "high";
30
+ urgent: "urgent";
31
+ }>>;
32
+ updateMessage: z.ZodOptional<z.ZodString>;
33
+ delegationReason: z.ZodOptional<z.ZodString>;
34
+ }, z.core.$strip>;
35
+ type CreateInboxTaskToolInput = z.infer<typeof createInboxTaskInputSchema>;
36
+ type DefineCreateInboxTaskToolOptions = {
37
+ defaultApp?: string;
38
+ resolveDelegationReason?: (input: CreateInboxTaskToolInput, caller: TenantCaller) => string | undefined;
39
+ };
40
+ declare function defineCreateInboxTaskTool(options?: DefineCreateInboxTaskToolOptions): eve_tools.ToolDefinition<{
41
+ type: string;
42
+ name: string;
43
+ actions: {
44
+ id: string;
45
+ title: string;
46
+ description?: string | undefined;
47
+ }[];
48
+ description?: string | undefined;
49
+ assignTo?: {
50
+ users?: string[] | undefined;
51
+ groups?: string[] | undefined;
52
+ } | undefined;
53
+ context?: {
54
+ data?: Record<string, unknown> | undefined;
55
+ ui?: Record<string, unknown> | undefined;
56
+ } | undefined;
57
+ validUntilHours?: number | undefined;
58
+ priority?: "low" | "normal" | "high" | "urgent" | undefined;
59
+ updateMessage?: string | undefined;
60
+ delegationReason?: string | undefined;
61
+ }, {
62
+ name: string;
63
+ assignedTo: {
64
+ users?: string[] | undefined;
65
+ groups?: string[] | undefined;
66
+ } | null;
67
+ requestedBy: string;
68
+ delegationReason: string | null;
69
+ message: string;
70
+ taskId: string;
71
+ threadId: string;
72
+ status: "pending" | "open";
73
+ validUntil: string;
74
+ submittedAt: string;
75
+ }>;
76
+ declare const createInboxTaskTool: eve_tools.ToolDefinition<{
77
+ type: string;
78
+ name: string;
79
+ actions: {
80
+ id: string;
81
+ title: string;
82
+ description?: string | undefined;
83
+ }[];
84
+ description?: string | undefined;
85
+ assignTo?: {
86
+ users?: string[] | undefined;
87
+ groups?: string[] | undefined;
88
+ } | undefined;
89
+ context?: {
90
+ data?: Record<string, unknown> | undefined;
91
+ ui?: Record<string, unknown> | undefined;
92
+ } | undefined;
93
+ validUntilHours?: number | undefined;
94
+ priority?: "low" | "normal" | "high" | "urgent" | undefined;
95
+ updateMessage?: string | undefined;
96
+ delegationReason?: string | undefined;
97
+ }, {
98
+ name: string;
99
+ assignedTo: {
100
+ users?: string[] | undefined;
101
+ groups?: string[] | undefined;
102
+ } | null;
103
+ requestedBy: string;
104
+ delegationReason: string | null;
105
+ message: string;
106
+ taskId: string;
107
+ threadId: string;
108
+ status: "pending" | "open";
109
+ validUntil: string;
110
+ submittedAt: string;
111
+ }>;
112
+
113
+ export { CREATE_INBOX_TASK_TOOL_NAME, type CreateInboxTaskToolInput, type DefineCreateInboxTaskToolOptions, createInboxTaskInputSchema, createInboxTaskTool, defineCreateInboxTaskTool };