robotrock 1.1.0 → 1.3.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 (70) hide show
  1. package/dist/agent-admin.d.ts +82 -0
  2. package/dist/agent-admin.js +938 -0
  3. package/dist/agent-admin.js.map +1 -0
  4. package/dist/ai/index.d.ts +6 -5
  5. package/dist/ai/index.js +407 -188
  6. package/dist/ai/index.js.map +1 -1
  7. package/dist/ai/trigger.d.ts +4 -3
  8. package/dist/ai/trigger.js +407 -188
  9. package/dist/ai/trigger.js.map +1 -1
  10. package/dist/ai/workflow.d.ts +4 -3
  11. package/dist/ai/workflow.js +404 -185
  12. package/dist/ai/workflow.js.map +1 -1
  13. package/dist/auth-headers-qL-ZeEtd.d.ts +13 -0
  14. package/dist/{client-XTnFHGFE.d.ts → client-YO9Y1rkH.d.ts} +29 -17
  15. package/dist/eve/agent/index.d.ts +11 -35
  16. package/dist/eve/agent/index.js +678 -146
  17. package/dist/eve/agent/index.js.map +1 -1
  18. package/dist/eve/index.d.ts +5 -2
  19. package/dist/eve/index.js +195 -2
  20. package/dist/eve/index.js.map +1 -1
  21. package/dist/eve/tools/admin/assign-tasks.d.ts +39 -0
  22. package/dist/eve/tools/admin/assign-tasks.js +1060 -0
  23. package/dist/eve/tools/admin/assign-tasks.js.map +1 -0
  24. package/dist/eve/tools/admin/manage-groups.d.ts +53 -0
  25. package/dist/eve/tools/admin/manage-groups.js +1218 -0
  26. package/dist/eve/tools/admin/manage-groups.js.map +1 -0
  27. package/dist/eve/tools/admin/manage-team-members.d.ts +45 -0
  28. package/dist/eve/tools/admin/manage-team-members.js +1160 -0
  29. package/dist/eve/tools/admin/manage-team-members.js.map +1 -0
  30. package/dist/eve/tools/admin/query-tasks.d.ts +71 -0
  31. package/dist/eve/tools/admin/query-tasks.js +1161 -0
  32. package/dist/eve/tools/admin/query-tasks.js.map +1 -0
  33. package/dist/eve/tools/catalog/search-products.d.ts +57 -0
  34. package/dist/eve/tools/catalog/search-products.js +94 -0
  35. package/dist/eve/tools/catalog/search-products.js.map +1 -0
  36. package/dist/eve/tools/identity/index.d.ts +2 -0
  37. package/dist/eve/tools/identity/index.js +117 -27
  38. package/dist/eve/tools/identity/index.js.map +1 -1
  39. package/dist/eve/tools/identity/my-access.d.ts +6 -46
  40. package/dist/eve/tools/identity/my-access.js +91 -10
  41. package/dist/eve/tools/identity/my-access.js.map +1 -1
  42. package/dist/eve/tools/identity/whoami.d.ts +7 -8
  43. package/dist/eve/tools/identity/whoami.js +33 -17
  44. package/dist/eve/tools/identity/whoami.js.map +1 -1
  45. package/dist/eve/tools/inbox/create-task.d.ts +5 -4
  46. package/dist/eve/tools/inbox/create-task.js +365 -137
  47. package/dist/eve/tools/inbox/create-task.js.map +1 -1
  48. package/dist/eve/tools/inbox/index.d.ts +1 -0
  49. package/dist/eve/tools/inbox/index.js +365 -137
  50. package/dist/eve/tools/inbox/index.js.map +1 -1
  51. package/dist/eve/tools/index.d.ts +7 -0
  52. package/dist/eve/tools/index.js +1362 -168
  53. package/dist/eve/tools/index.js.map +1 -1
  54. package/dist/{index-BL9qKHA8.d.ts → index-DoQN48Bm.d.ts} +61 -2
  55. package/dist/index.d.ts +6 -3
  56. package/dist/index.js +325 -119
  57. package/dist/index.js.map +1 -1
  58. package/dist/schemas/index.d.ts +6 -1
  59. package/dist/schemas/index.js +177 -48
  60. package/dist/schemas/index.js.map +1 -1
  61. package/dist/{tool-approval-bridge-C4bTm8vu.d.ts → tool-approval-bridge-aMA79Z1B.d.ts} +1 -1
  62. package/dist/tool-reply-guidance-C3qrT1In.d.ts +25 -0
  63. package/dist/trigger/index.d.ts +2 -1
  64. package/dist/trigger/index.js +310 -108
  65. package/dist/trigger/index.js.map +1 -1
  66. package/dist/{trigger-Dn0DFiyU.d.ts → trigger-CXrbKVCL.d.ts} +2 -2
  67. package/dist/workflow/index.d.ts +2 -1
  68. package/dist/workflow/index.js +310 -108
  69. package/dist/workflow/index.js.map +1 -1
  70. package/package.json +28 -4
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  // src/schemas/index.ts
2
- import { z as z2 } from "zod";
2
+ import { z as z4 } from "zod";
3
3
 
4
4
  // ../core/src/utils/safe-url.ts
5
5
  var BLOCKED_HOSTNAMES = /* @__PURE__ */ new Set([
@@ -386,13 +386,27 @@ var createAgentChatBodySchema = z.object({
386
386
  eveConnectionId: z.string().min(1).optional(),
387
387
  /** Source application id; groups the chat under an inbox section. */
388
388
  app: z.string().min(1).optional(),
389
- assignTo: assignToSchema.optional(),
389
+ /** Email of the user who owns the chat. Required unless `parentChatId` is set. */
390
+ ownerEmail: z.string().email().optional(),
390
391
  title: z.string().min(1),
391
392
  messages: z.array(agentChatSeedMessageSchema).default([]),
392
393
  /** Provenance label stored on the session ("cron" | "agent" | ...). */
393
394
  source: z.string().min(1).optional()
394
395
  }).refine((data) => Boolean(data.agentIdentifier || data.parentChatId), {
395
396
  message: "Provide either agentIdentifier or parentChatId"
397
+ }).refine((data) => Boolean(data.ownerEmail || data.parentChatId), {
398
+ message: "Provide ownerEmail unless parentChatId is set"
399
+ });
400
+ var agentChatAuditToolBodySchema = z.object({
401
+ eveSessionId: z.string().min(1),
402
+ userId: z.string().min(1),
403
+ toolCallId: z.string().min(1),
404
+ toolName: z.string().min(1),
405
+ input: z.record(z.string(), z.unknown()).default({}),
406
+ success: z.boolean(),
407
+ status: z.enum(["completed", "failed", "rejected"]),
408
+ error: z.string().optional(),
409
+ idempotencyKey: z.string().optional()
396
410
  });
397
411
  var agentChatAuditInputBodySchema = z.object({
398
412
  eveSessionId: z.string().min(1),
@@ -432,62 +446,175 @@ var agentChatLinkTaskBodySchema = z.object({
432
446
  toolCallId: z.string().min(1)
433
447
  });
434
448
 
449
+ // ../core/src/schemas/tool-result-display.ts
450
+ import { z as z2 } from "zod";
451
+ var toolDisplayMetadataSchema = z2.object({
452
+ widget: z2.string().optional(),
453
+ title: z2.string().optional(),
454
+ description: z2.string().optional()
455
+ });
456
+ var toolDisplayEnvelopeSchema = z2.object({
457
+ display: toolDisplayMetadataSchema.optional(),
458
+ data: z2.record(z2.string(), z2.unknown()),
459
+ ui: z2.record(
460
+ z2.string(),
461
+ z2.object({
462
+ "ui:widget": z2.string().optional(),
463
+ "ui:title": z2.string().optional(),
464
+ "ui:description": z2.string().optional(),
465
+ "ui:options": z2.record(z2.string(), z2.unknown()).optional()
466
+ }).passthrough()
467
+ ).optional()
468
+ });
469
+
470
+ // ../core/src/schemas/agent-admin.ts
471
+ import { z as z3 } from "zod";
472
+ var tenantRoleSchema = z3.enum(["admin", "member"]);
473
+ var agentAdminUserSchema = z3.object({
474
+ id: z3.string(),
475
+ email: z3.string().email(),
476
+ name: z3.string()
477
+ });
478
+ var agentAdminMemberSchema = z3.object({
479
+ userId: z3.string(),
480
+ role: z3.string(),
481
+ membershipKind: z3.enum(["team", "assignee"]),
482
+ hasLoggedIn: z3.boolean(),
483
+ user: agentAdminUserSchema
484
+ });
485
+ var agentAdminGroupSchema = z3.object({
486
+ id: z3.string(),
487
+ name: z3.string(),
488
+ slug: z3.string(),
489
+ description: z3.string().nullable(),
490
+ memberCount: z3.number().optional()
491
+ });
492
+ var agentAdminGroupDetailSchema = agentAdminGroupSchema.extend({
493
+ members: z3.array(
494
+ z3.object({
495
+ userId: z3.string(),
496
+ user: agentAdminUserSchema
497
+ })
498
+ )
499
+ });
500
+ var agentAdminTaskSummarySchema = z3.object({
501
+ id: z3.string(),
502
+ convexId: z3.string(),
503
+ status: z3.string(),
504
+ type: z3.string().nullable(),
505
+ name: z3.string().nullable(),
506
+ description: z3.string().nullable(),
507
+ validUntil: z3.number(),
508
+ createdAt: z3.number(),
509
+ threadPriority: z3.string().nullable(),
510
+ handledByUserId: z3.string().nullable()
511
+ });
512
+ var inviteMemberBodySchema = z3.object({
513
+ email: z3.string().email(),
514
+ role: tenantRoleSchema.optional()
515
+ });
516
+ var updateMemberRoleBodySchema = z3.object({
517
+ role: tenantRoleSchema
518
+ });
519
+ var createGroupBodySchema = z3.object({
520
+ name: z3.string().min(1),
521
+ description: z3.string().optional()
522
+ });
523
+ var updateGroupBodySchema = z3.object({
524
+ name: z3.string().min(1).optional(),
525
+ description: z3.string().optional()
526
+ });
527
+ var addGroupMemberBodySchema = z3.object({
528
+ userId: z3.string().min(1).describe("Convex user id or member email.")
529
+ });
530
+ var listTasksQuerySchema = z3.object({
531
+ statusFilter: z3.enum(["all", "open", "handled", "expired"]).optional(),
532
+ typeFilter: z3.string().optional(),
533
+ appFilter: z3.string().optional(),
534
+ sortField: z3.enum(["type", "date", "status", "validUntil"]).optional(),
535
+ sortDirection: z3.enum(["asc", "desc"]).optional(),
536
+ limit: z3.coerce.number().int().positive().max(100).optional(),
537
+ cursor: z3.string().optional()
538
+ });
539
+ var searchTasksQuerySchema = z3.object({
540
+ q: z3.string().min(1),
541
+ limit: z3.coerce.number().int().positive().max(100).optional()
542
+ });
543
+ var assignTasksResultSchema = z3.object({
544
+ taskId: z3.string(),
545
+ success: z3.boolean(),
546
+ message: z3.string().optional(),
547
+ name: z3.string().nullable().optional(),
548
+ description: z3.string().nullable().optional(),
549
+ type: z3.string().nullable().optional()
550
+ });
551
+ var assignTasksResponseSchema = z3.object({
552
+ results: z3.array(assignTasksResultSchema)
553
+ });
554
+ var assignTasksBodySchema = z3.object({
555
+ taskIds: z3.array(z3.string().min(1)).min(1).max(100),
556
+ assignTo: assignToSchema.refine(
557
+ (value) => (value.users?.length ?? 0) > 0 || (value.groups?.length ?? 0) > 0,
558
+ { message: "assignTo needs at least one user email or group slug." }
559
+ )
560
+ });
561
+
435
562
  // src/schemas/index.ts
436
- var handlerUrlSchema2 = z2.string().refine((url) => isAllowedHandlerUrl(url), {
563
+ var handlerUrlSchema2 = z4.string().refine((url) => isAllowedHandlerUrl(url), {
437
564
  message: HANDLER_URL_ERROR
438
565
  });
439
- var jsonSchema7Schema2 = z2.custom(
566
+ var jsonSchema7Schema2 = z4.custom(
440
567
  (val) => typeof val === "object" && val !== null,
441
568
  { message: "Must be a valid JSON Schema object" }
442
569
  );
443
- var uiSchemaSchema2 = z2.custom((val) => typeof val === "object" && val !== null, {
570
+ var uiSchemaSchema2 = z4.custom((val) => typeof val === "object" && val !== null, {
444
571
  message: "Must be a valid UiSchema object"
445
572
  });
446
- var webhookHandlerSchema2 = z2.object({
447
- type: z2.literal("webhook"),
573
+ var webhookHandlerSchema2 = z4.object({
574
+ type: z4.literal("webhook"),
448
575
  url: handlerUrlSchema2,
449
- headers: z2.record(z2.string(), z2.string())
576
+ headers: z4.record(z4.string(), z4.string())
450
577
  });
451
578
  var triggerHandlerSchema2 = webhookHandlerSchema2.extend({
452
- type: z2.literal("trigger"),
453
- tokenId: z2.string().min(1)
579
+ type: z4.literal("trigger"),
580
+ tokenId: z4.string().min(1)
454
581
  });
455
- var handlerSchema2 = z2.discriminatedUnion("type", [webhookHandlerSchema2, triggerHandlerSchema2]);
456
- var taskActionInputSchema2 = z2.object({
457
- id: z2.string().min(1),
458
- title: z2.string().min(1),
459
- description: z2.string().optional(),
582
+ var handlerSchema2 = z4.discriminatedUnion("type", [webhookHandlerSchema2, triggerHandlerSchema2]);
583
+ var taskActionInputSchema2 = z4.object({
584
+ id: z4.string().min(1),
585
+ title: z4.string().min(1),
586
+ description: z4.string().optional(),
460
587
  schema: jsonSchema7Schema2.optional(),
461
588
  ui: uiSchemaSchema2.optional(),
462
- data: z2.record(z2.string(), z2.unknown()).optional()
589
+ data: z4.record(z4.string(), z4.unknown()).optional()
463
590
  });
464
591
  var taskActionSchema2 = taskActionInputSchema2.extend({
465
- handlers: z2.array(handlerSchema2).min(1).optional()
592
+ handlers: z4.array(handlerSchema2).min(1).optional()
466
593
  });
467
- var uiFieldSchemaSchema2 = z2.object({
468
- "ui:widget": z2.string().optional(),
469
- "ui:title": z2.string().optional(),
470
- "ui:description": z2.string().optional(),
471
- "ui:options": z2.record(z2.string(), z2.unknown()).optional(),
472
- items: z2.lazy(() => z2.record(z2.string(), uiFieldSchemaSchema2)).optional()
594
+ var uiFieldSchemaSchema2 = z4.object({
595
+ "ui:widget": z4.string().optional(),
596
+ "ui:title": z4.string().optional(),
597
+ "ui:description": z4.string().optional(),
598
+ "ui:options": z4.record(z4.string(), z4.unknown()).optional(),
599
+ items: z4.lazy(() => z4.record(z4.string(), uiFieldSchemaSchema2)).optional()
473
600
  }).passthrough();
474
- var contextUiSchema2 = z2.record(z2.string(), uiFieldSchemaSchema2).optional();
475
- var contextDataSchema2 = z2.object({
476
- data: z2.record(z2.string(), z2.unknown()),
601
+ var contextUiSchema2 = z4.record(z4.string(), uiFieldSchemaSchema2).optional();
602
+ var contextDataSchema2 = z4.object({
603
+ data: z4.record(z4.string(), z4.unknown()),
477
604
  ui: contextUiSchema2
478
605
  }).optional();
479
606
  var TASK_CONTEXT_FORMAT_VERSION2 = 2;
480
- var taskContextObjectBaseSchema2 = z2.object({
481
- app: z2.string().min(1).optional(),
482
- type: z2.string().min(1),
483
- name: z2.string().min(1),
484
- description: z2.string().optional(),
485
- validUntil: z2.string().optional(),
607
+ var taskContextObjectBaseSchema2 = z4.object({
608
+ app: z4.string().min(1).optional(),
609
+ type: z4.string().min(1),
610
+ name: z4.string().min(1),
611
+ description: z4.string().optional(),
612
+ validUntil: z4.string().optional(),
486
613
  context: contextDataSchema2,
487
- contextVersion: z2.literal(2).optional(),
614
+ contextVersion: z4.literal(2).optional(),
488
615
  /** @deprecated Use `contextVersion`. Accepted on ingest only. */
489
- version: z2.literal(2).optional(),
490
- actions: z2.array(taskActionSchema2).min(1, "At least one action is required")
616
+ version: z4.literal(2).optional(),
617
+ actions: z4.array(taskActionSchema2).min(1, "At least one action is required")
491
618
  });
492
619
  function normalizeTaskContextVersion2(data) {
493
620
  const { version: legacyVersion, contextVersion, ...rest } = data;
@@ -503,7 +630,7 @@ function refineContextPublicUrls2(data, ctx) {
503
630
  const error = validateContextPublicUrls(data.context);
504
631
  if (error) {
505
632
  ctx.addIssue({
506
- code: z2.ZodIssueCode.custom,
633
+ code: z4.ZodIssueCode.custom,
507
634
  message: error,
508
635
  path: ["context"]
509
636
  });
@@ -512,9 +639,9 @@ function refineContextPublicUrls2(data, ctx) {
512
639
  var taskContextSchema2 = taskContextObjectSchema2.superRefine(
513
640
  refineContextPublicUrls2
514
641
  );
515
- var assignToSchema2 = z2.object({
516
- users: z2.array(z2.string().email()).optional(),
517
- groups: z2.array(z2.string().min(1)).optional()
642
+ var assignToSchema2 = z4.object({
643
+ users: z4.array(z4.string().email()).optional(),
644
+ groups: z4.array(z4.string().min(1)).optional()
518
645
  }).refine(
519
646
  (data) => {
520
647
  const groups = data.groups ?? [];
@@ -525,7 +652,7 @@ var assignToSchema2 = z2.object({
525
652
  },
526
653
  { message: 'Cannot combine "all" with other group slugs' }
527
654
  );
528
- var threadUpdateMessageSchema2 = z2.string().min(1).max(500);
655
+ var threadUpdateMessageSchema2 = z4.string().min(1).max(500);
529
656
  var threadUpdateStatuses2 = [
530
657
  "info",
531
658
  "queued",
@@ -535,14 +662,14 @@ var threadUpdateStatuses2 = [
535
662
  "failed",
536
663
  "cancelled"
537
664
  ];
538
- var threadUpdateStatusSchema2 = z2.enum(threadUpdateStatuses2);
665
+ var threadUpdateStatusSchema2 = z4.enum(threadUpdateStatuses2);
539
666
  var DEFAULT_THREAD_UPDATE_STATUS = "info";
540
- var threadUpdateInputSchema2 = z2.object({
667
+ var threadUpdateInputSchema2 = z4.object({
541
668
  message: threadUpdateMessageSchema2,
542
669
  status: threadUpdateStatusSchema2.optional()
543
670
  });
544
671
  var taskPriorities2 = ["low", "normal", "high", "urgent"];
545
- var taskPrioritySchema2 = z2.enum(taskPriorities2);
672
+ var taskPrioritySchema2 = z4.enum(taskPriorities2);
546
673
  var DEFAULT_TASK_PRIORITY = "normal";
547
674
  var LOWEST_TASK_PRIORITY = "low";
548
675
  var TASK_PRIORITY_RANK = {
@@ -551,8 +678,8 @@ var TASK_PRIORITY_RANK = {
551
678
  high: 3,
552
679
  urgent: 4
553
680
  };
554
- var agentTelemetrySchema2 = z2.object({
555
- version: z2.string().min(1)
681
+ var agentTelemetrySchema2 = z4.object({
682
+ version: z4.string().min(1)
556
683
  });
557
684
  var createTaskBodySchema2 = taskContextObjectBaseSchema2.extend({
558
685
  assignTo: assignToSchema2.optional(),
@@ -560,7 +687,7 @@ var createTaskBodySchema2 = taskContextObjectBaseSchema2.extend({
560
687
  * Groups related tasks together. When omitted, the server generates one and
561
688
  * returns it so the caller can reuse it on later tasks in the same thread.
562
689
  */
563
- threadId: z2.string().min(1).optional(),
690
+ threadId: z4.string().min(1).optional(),
564
691
  /**
565
692
  * Optional thread priority. When set, applies to the whole thread and
566
693
  * overwrites any previous priority. Omit on later tasks to leave unchanged.
@@ -575,6 +702,65 @@ var createTaskBodySchema2 = taskContextObjectBaseSchema2.extend({
575
702
  }).transform(normalizeTaskContextVersion2).superRefine(refineContextPublicUrls2);
576
703
  var threadUpdateBodySchema = threadUpdateInputSchema2;
577
704
 
705
+ // ../core/src/handler-retry.ts
706
+ var HANDLER_RETRY_DELAYS_MS = [
707
+ 6e4,
708
+ // 1m
709
+ 3e5,
710
+ // 5m
711
+ 18e5,
712
+ // 30m
713
+ 36e5,
714
+ // 1h
715
+ 216e5,
716
+ // 6h
717
+ 864e5,
718
+ // 24h
719
+ 1728e5
720
+ // 48h
721
+ ];
722
+ var HANDLER_MAX_ATTEMPTS = HANDLER_RETRY_DELAYS_MS.length + 1;
723
+
724
+ // ../core/src/attribution/index.ts
725
+ import { z as z5 } from "zod";
726
+
727
+ // ../core/src/app-url.ts
728
+ var PRODUCTION_APP_URL = "https://app.robotrock.io";
729
+ var PRODUCTION_API_URL = "https://api.robotrock.io/v1";
730
+ var DEV_API_URL = "http://localhost:4001/v1";
731
+ var APP_SIGNUP_URL = `${PRODUCTION_APP_URL}/sign-up`;
732
+ function normalizeRobotRockApiBaseUrl(baseUrl) {
733
+ const trimmed = baseUrl.trim().replace(/\/+$/, "");
734
+ if (trimmed.endsWith("/v1")) {
735
+ return trimmed;
736
+ }
737
+ return `${trimmed}/v1`;
738
+ }
739
+ function getRobotRockApiBaseUrl() {
740
+ const explicit = process.env.ROBOTROCK_BASE_URL?.trim() || process.env.ROBOTROCK_API_URL?.trim();
741
+ if (explicit) {
742
+ return normalizeRobotRockApiBaseUrl(explicit);
743
+ }
744
+ if (process.env.NODE_ENV === "production") {
745
+ return PRODUCTION_API_URL;
746
+ }
747
+ return DEV_API_URL;
748
+ }
749
+
750
+ // ../core/src/attribution/index.ts
751
+ var ATTRIBUTION_COOKIE_MAX_AGE = 60 * 60 * 24 * 90;
752
+ var attributionSchema = z5.object({
753
+ utmSource: z5.string().optional(),
754
+ utmMedium: z5.string().optional(),
755
+ utmCampaign: z5.string().optional(),
756
+ utmContent: z5.string().optional(),
757
+ utmTerm: z5.string().optional(),
758
+ gclid: z5.string().optional(),
759
+ landingUrl: z5.string().optional(),
760
+ referrer: z5.string().optional(),
761
+ capturedAt: z5.number()
762
+ });
763
+
578
764
  // src/approval-result.ts
579
765
  var TaskTimeoutError = class extends Error {
580
766
  constructor(message) {
@@ -649,77 +835,27 @@ function getErrorMessage(data, fallback) {
649
835
  return fallback;
650
836
  }
651
837
 
652
- // ../core/src/handler-retry.ts
653
- var HANDLER_RETRY_DELAYS_MS = [
654
- 6e4,
655
- // 1m
656
- 3e5,
657
- // 5m
658
- 18e5,
659
- // 30m
660
- 36e5,
661
- // 1h
662
- 216e5,
663
- // 6h
664
- 864e5,
665
- // 24h
666
- 1728e5
667
- // 48h
668
- ];
669
- var HANDLER_MAX_ATTEMPTS = HANDLER_RETRY_DELAYS_MS.length + 1;
670
-
671
- // ../core/src/attribution/index.ts
672
- import { z as z3 } from "zod";
673
-
674
- // ../core/src/app-url.ts
675
- var PRODUCTION_APP_URL = "https://app.robotrock.io";
676
- var PRODUCTION_API_URL = "https://api.robotrock.io/v1";
677
- var DEV_API_URL = "http://localhost:4001/v1";
678
- var APP_SIGNUP_URL = `${PRODUCTION_APP_URL}/sign-up`;
679
- function normalizeRobotRockApiBaseUrl(baseUrl) {
680
- const trimmed = baseUrl.trim().replace(/\/+$/, "");
681
- if (trimmed.endsWith("/v1")) {
682
- return trimmed;
683
- }
684
- return `${trimmed}/v1`;
685
- }
686
- function getRobotRockApiBaseUrl() {
687
- const explicit = process.env.ROBOTROCK_BASE_URL?.trim() || process.env.ROBOTROCK_API_URL?.trim();
688
- if (explicit) {
689
- return normalizeRobotRockApiBaseUrl(explicit);
690
- }
691
- if (process.env.NODE_ENV === "production") {
692
- return PRODUCTION_API_URL;
693
- }
694
- return DEV_API_URL;
695
- }
696
-
697
- // ../core/src/attribution/index.ts
698
- var ATTRIBUTION_COOKIE_MAX_AGE = 60 * 60 * 24 * 90;
699
- var attributionSchema = z3.object({
700
- utmSource: z3.string().optional(),
701
- utmMedium: z3.string().optional(),
702
- utmCampaign: z3.string().optional(),
703
- utmContent: z3.string().optional(),
704
- utmTerm: z3.string().optional(),
705
- gclid: z3.string().optional(),
706
- landingUrl: z3.string().optional(),
707
- referrer: z3.string().optional(),
708
- capturedAt: z3.number()
709
- });
710
-
711
838
  // src/auth-headers.ts
839
+ var ROBOTROCK_ACTING_USER_ID_HEADER = "x-robotrock-acting-user-id";
712
840
  function buildRobotRockAuthHeaders(auth) {
713
841
  if (auth.kind === "apiKey") {
714
- return {
842
+ const headers2 = {
715
843
  "X-Api-Key": auth.apiKey
716
844
  };
845
+ if (auth.actingUserId?.trim()) {
846
+ headers2[ROBOTROCK_ACTING_USER_ID_HEADER] = auth.actingUserId.trim();
847
+ }
848
+ return headers2;
717
849
  }
718
- return {
850
+ const headers = {
719
851
  Authorization: `Bearer ${auth.token}`,
720
852
  "X-RobotRock-Tenant-Slug": auth.tenantSlug,
721
853
  "X-RobotRock-Connection-Id": auth.connectionId
722
854
  };
855
+ if (auth.actingUserId?.trim()) {
856
+ headers[ROBOTROCK_ACTING_USER_ID_HEADER] = auth.actingUserId.trim();
857
+ }
858
+ return headers;
723
859
  }
724
860
  function resolveRobotRockAuthConfig(overrides) {
725
861
  if (overrides?.agentService) {
@@ -863,6 +999,29 @@ function createChatsApi(config) {
863
999
  );
864
1000
  }
865
1001
  },
1002
+ async logToolExecution(input) {
1003
+ const validation = agentChatAuditToolBodySchema.safeParse(input);
1004
+ if (!validation.success) {
1005
+ throw new RobotRockError(
1006
+ `Invalid audit tool input: ${validation.error.issues[0]?.message}`,
1007
+ 400,
1008
+ validation.error.issues
1009
+ );
1010
+ }
1011
+ const response = await fetch(`${config.baseUrl}/agent-chats/audit-tool`, {
1012
+ method: "POST",
1013
+ headers: headers(),
1014
+ body: JSON.stringify(validation.data)
1015
+ });
1016
+ if (!response.ok) {
1017
+ const data = await parseResponseBody(response);
1018
+ throw new RobotRockError(
1019
+ getErrorMessage(data, "Failed to log chat tool execution"),
1020
+ response.status,
1021
+ data
1022
+ );
1023
+ }
1024
+ },
866
1025
  async linkTask(input) {
867
1026
  const validation = agentChatLinkTaskBodySchema.safeParse(input);
868
1027
  if (!validation.success) {
@@ -965,7 +1124,9 @@ var RobotRock = class {
965
1124
  create: (task) => this.createTaskRequest(task),
966
1125
  get: (taskId) => this.getTaskById(taskId),
967
1126
  cancel: (taskId) => this.cancelTaskRequest(taskId),
968
- sendUpdate: (input) => this.sendThreadUpdate(input)
1127
+ sendUpdate: (input) => this.sendThreadUpdate(input),
1128
+ list: (input) => this.listTasksRequest(input),
1129
+ search: (input) => this.searchTasksRequest(input)
969
1130
  };
970
1131
  this.chats = createChatsApi({
971
1132
  baseUrl: this.baseUrl,
@@ -1162,6 +1323,47 @@ var RobotRock = class {
1162
1323
  );
1163
1324
  }
1164
1325
  }
1326
+ async listTasksRequest(input) {
1327
+ const params = new URLSearchParams();
1328
+ for (const [key, value] of Object.entries(input ?? {})) {
1329
+ if (value !== void 0 && value !== "") {
1330
+ params.set(key, String(value));
1331
+ }
1332
+ }
1333
+ const suffix = params.size > 0 ? `?${params.toString()}` : "";
1334
+ const response = await fetch(`${this.baseUrl}/tasks${suffix}`, {
1335
+ method: "GET",
1336
+ headers: this.authHeaders()
1337
+ });
1338
+ const data = await parseResponseBody(response);
1339
+ if (!response.ok) {
1340
+ throw new RobotRockError(
1341
+ getErrorMessage(data, "Failed to list tasks"),
1342
+ response.status,
1343
+ data
1344
+ );
1345
+ }
1346
+ return data;
1347
+ }
1348
+ async searchTasksRequest(input) {
1349
+ const params = new URLSearchParams({ q: input.q });
1350
+ if (input.limit !== void 0) {
1351
+ params.set("limit", String(input.limit));
1352
+ }
1353
+ const response = await fetch(`${this.baseUrl}/tasks/search?${params.toString()}`, {
1354
+ method: "GET",
1355
+ headers: this.authHeaders()
1356
+ });
1357
+ const data = await parseResponseBody(response);
1358
+ if (!response.ok) {
1359
+ throw new RobotRockError(
1360
+ getErrorMessage(data, "Failed to search tasks"),
1361
+ response.status,
1362
+ data
1363
+ );
1364
+ }
1365
+ return data;
1366
+ }
1165
1367
  };
1166
1368
  function createClient(config) {
1167
1369
  return new RobotRock(config);
@@ -1558,7 +1760,11 @@ var DEFAULT_TOOL_DISPLAY_LABELS = {
1558
1760
  get_weather: "Get weather",
1559
1761
  get_my_access: "Check my access",
1560
1762
  whoami: "Who am I",
1561
- create_robotrock_task: "Create a RobotRock task"
1763
+ create_robotrock_task: "Create a RobotRock task",
1764
+ search_products: "Search products",
1765
+ manage_team_members: "Manage team members",
1766
+ manage_groups: "Manage groups",
1767
+ query_tasks: "Query tasks"
1562
1768
  };
1563
1769
  var toolDisplayLabelOverrides = {};
1564
1770
  function setToolDisplayLabelOverrides(overrides) {
@@ -1598,18 +1804,18 @@ var ROBOTROCK_READY_HOOK_SLUG = "robotrock-ready";
1598
1804
 
1599
1805
  // src/webhook.ts
1600
1806
  import { createHmac, timingSafeEqual } from "crypto";
1601
- import { z as z4 } from "zod";
1807
+ import { z as z6 } from "zod";
1602
1808
  var ROBOTROCK_SIGNATURE_HEADER = "x-robotrock-signature";
1603
- var robotRockWebhookPayloadBodySchema = z4.object({
1604
- taskId: z4.string().min(1),
1605
- action: z4.object({
1606
- id: z4.string().min(1),
1607
- title: z4.string().min(1),
1608
- data: z4.unknown()
1809
+ var robotRockWebhookPayloadBodySchema = z6.object({
1810
+ taskId: z6.string().min(1),
1811
+ action: z6.object({
1812
+ id: z6.string().min(1),
1813
+ title: z6.string().min(1),
1814
+ data: z6.unknown()
1609
1815
  }),
1610
- handledBy: z4.string().min(1).optional(),
1611
- handledAt: z4.string().min(1),
1612
- handlerType: z4.string().min(1)
1816
+ handledBy: z6.string().min(1).optional(),
1817
+ handledAt: z6.string().min(1),
1818
+ handlerType: z6.string().min(1)
1613
1819
  });
1614
1820
  var RobotRockWebhookError = class extends Error {
1615
1821
  constructor(message, code, details) {