terse-types 0.0.1 → 0.0.2

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/dist/Tools.js CHANGED
@@ -37,7 +37,7 @@ export const linearIssueSummarySchema = z.object({
37
37
  title: z.string(),
38
38
  description: z.string().nullable().optional(),
39
39
  state: z.string(),
40
- priority: z.number().nullable().optional(),
40
+ priority: z.number().int().nullable().optional(),
41
41
  assignee: linearIssueAssigneeSchema.nullable(),
42
42
  url: z.string(),
43
43
  createdAt: dateLikeSchema,
@@ -98,7 +98,7 @@ export const linearUserSummarySchema = z.object({
98
98
  export const linearSearchPaginationSchema = z.object({
99
99
  hasNextPage: z.boolean(),
100
100
  endCursor: z.string().nullable(),
101
- limit: z.number().nullable()
101
+ limit: z.number().int().nullable()
102
102
  });
103
103
  export const slackUserResponseSchema = z.object({
104
104
  id: z.string(),
@@ -145,7 +145,7 @@ export const jiraIssueSummarySchema = z.object({
145
145
  title: z.string().optional(),
146
146
  description: jiraRichDescriptionSchema.optional(),
147
147
  state: jiraIssueStateSchema.optional(),
148
- priority: z.number().optional(),
148
+ priority: z.number().int().optional(),
149
149
  assignee: jiraIssueAssigneeSchema.nullable().optional(),
150
150
  labels: z.array(z.string()).optional(),
151
151
  dueDate: z.string().optional(),
@@ -156,26 +156,26 @@ export const jiraIssueSummarySchema = z.object({
156
156
  updatedAt: z.string().optional()
157
157
  });
158
158
  export const gitHubPaginationSchema = z.object({
159
- page: z.number(),
160
- perPage: z.number(),
159
+ page: z.number().int(),
160
+ perPage: z.number().int(),
161
161
  hasMore: z.boolean()
162
162
  });
163
163
  export const gitHubCodeSearchResultSchema = z.object({
164
- index: z.number(),
164
+ index: z.number().int(),
165
165
  repository: z.string(),
166
166
  path: z.string(),
167
167
  url: z.string(),
168
168
  snippets: z.string()
169
169
  });
170
170
  export const gitHubCodeGrepResultSchema = z.object({
171
- index: z.number(),
171
+ index: z.number().int(),
172
172
  repository: z.string(),
173
173
  file: z.string(),
174
174
  url: z.string(),
175
175
  matches: z.string()
176
176
  });
177
177
  export const gitHubPullRequestSummarySchema = z.object({
178
- number: z.number(),
178
+ number: z.number().int(),
179
179
  title: z.string(),
180
180
  description: z.string(),
181
181
  author: z.string(),
@@ -198,7 +198,7 @@ export const gitHubFileEntrySchema = z.object({
198
198
  name: z.string().optional(),
199
199
  path: z.string(),
200
200
  type: z.literal("file").optional(),
201
- size: z.number().optional()
201
+ size: z.number().int().optional()
202
202
  });
203
203
  export const gitHubOtherEntrySchema = z.object({
204
204
  name: z.string(),
@@ -213,8 +213,18 @@ export const gitHubCommitSummarySchema = z.object({
213
213
  date: z.string(),
214
214
  url: z.string()
215
215
  });
216
+ export const gitHubPullRequestListSummarySchema = z.object({
217
+ total: z.number().int(),
218
+ merged: z.number().int(),
219
+ open: z.number().int(),
220
+ closed: z.number().int()
221
+ });
222
+ export const gitHubCommitListSummarySchema = z.object({
223
+ total: z.number().int(),
224
+ byAuthor: z.record(z.string(), z.number().int())
225
+ });
216
226
  export const gitHubPullRequestRefSchema = z.object({
217
- number: z.number(),
227
+ number: z.number().int(),
218
228
  title: z.string(),
219
229
  state: z.string(),
220
230
  merged: z.boolean(),
@@ -267,7 +277,7 @@ export const notionPageBlockSchema = z.lazy(() => z.object({
267
277
  checked: z.boolean().optional(),
268
278
  language: z.string().optional(),
269
279
  icon: notionLooseObjectSchema.optional(),
270
- table_width: z.number().optional(),
280
+ table_width: z.number().int().optional(),
271
281
  has_column_header: z.boolean().optional(),
272
282
  has_row_header: z.boolean().optional(),
273
283
  caption: z.string().optional(),
@@ -321,7 +331,7 @@ export const notionQueryDatabaseFailureSchema = toolOutputFailureSchema.extend({
321
331
  });
322
332
  export const notionQueryDatabaseSuccessSchema = toolOutputSuccessSchema.extend({
323
333
  pages: z.array(notionDatabaseQueryPageSchema),
324
- total_returned: z.number(),
334
+ total_returned: z.number().int(),
325
335
  has_more: z.boolean(),
326
336
  next_cursor: z.string().nullable()
327
337
  });
@@ -329,7 +339,7 @@ export const notionModifyBlocksAppendResultSchema = z.object({
329
339
  operation: z.literal("append"),
330
340
  actions: z.array(runHistoryActionBaseSchema),
331
341
  block_ids: z.array(z.string()),
332
- blocks_count: z.number()
342
+ blocks_count: z.number().int()
333
343
  });
334
344
  export const notionModifyBlocksUpdateResultSchema = z.object({
335
345
  operation: z.literal("update"),
@@ -345,7 +355,7 @@ export const notionModifyBlocksOperationResultSchema = z.union([notionModifyBloc
345
355
  export const notionModifyBlocksAppendSuccessSchema = toolOutputSuccessSchema.extend({
346
356
  operation: z.literal("append"),
347
357
  block_ids: z.array(z.string()),
348
- blocks_count: z.number()
358
+ blocks_count: z.number().int()
349
359
  });
350
360
  export const notionModifyBlocksSingleBlockSuccessSchema = toolOutputSuccessSchema.extend({
351
361
  operation: z.enum(["update", "delete"]),
@@ -354,15 +364,15 @@ export const notionModifyBlocksSingleBlockSuccessSchema = toolOutputSuccessSchem
354
364
  export const notionModifyBlocksBatchSuccessSchema = toolOutputSuccessSchema.extend({
355
365
  operations: z.array(notionModifyBlocksOperationResultSchema),
356
366
  block_ids: z.array(z.string()),
357
- total_operations: z.number()
367
+ total_operations: z.number().int()
358
368
  });
359
369
  export const notionModifyBlocksSuccessSchema = z.union([notionModifyBlocksAppendSuccessSchema, notionModifyBlocksSingleBlockSuccessSchema, notionModifyBlocksBatchSuccessSchema]);
360
370
  export const notionModifyBlocksFailureSchema = toolOutputFailureSchema.extend({
361
371
  error: z.string(),
362
372
  block_ids: z.array(z.string()),
363
373
  operations: z.array(notionModifyBlocksOperationResultSchema).optional(),
364
- failed_at_index: z.number().optional(),
365
- total_operations: z.number().optional(),
374
+ failed_at_index: z.number().int().optional(),
375
+ total_operations: z.number().int().optional(),
366
376
  hint: z.string().optional(),
367
377
  retry_instructions: z.string().optional()
368
378
  });
@@ -407,7 +417,7 @@ export const confluencePageVersionAuthorSchema = z.object({
407
417
  displayName: z.string().optional()
408
418
  });
409
419
  export const confluencePageVersionSchema = z.object({
410
- number: z.number(),
420
+ number: z.number().int(),
411
421
  when: z.string(),
412
422
  message: z.string().optional(),
413
423
  by: confluencePageVersionAuthorSchema.optional()
@@ -427,8 +437,8 @@ export const confluencePageRelationSchema = z.object({
427
437
  type: z.string()
428
438
  });
429
439
  export const confluenceCommentPositionSchema = z.object({
430
- start: z.number(),
431
- end: z.number()
440
+ start: z.number().int(),
441
+ end: z.number().int()
432
442
  });
433
443
  export const confluencePageQueryResultSchema = z.object({
434
444
  page_id: z.string(),
@@ -444,8 +454,8 @@ export const confluencePageQueryResultSchema = z.object({
444
454
  body_text: z.string(),
445
455
  ancestors: z.array(confluencePageRelationSchema),
446
456
  descendants: z.array(confluencePageRelationSchema),
447
- ancestors_count: z.number(),
448
- descendants_count: z.number()
457
+ ancestors_count: z.number().int(),
458
+ descendants_count: z.number().int()
449
459
  });
450
460
  export const posthogSeverityLevelSchema = z.enum(["error", "warn", "info", "debug"]);
451
461
  export const posthogSessionSummarySchema = z.object({
@@ -453,18 +463,18 @@ export const posthogSessionSummarySchema = z.object({
453
463
  startTime: z.string().optional(),
454
464
  endTime: z.string().optional(),
455
465
  duration: z.number().optional(),
456
- eventsCount: z.number(),
466
+ eventsCount: z.number().int(),
457
467
  sessionUrl: z.string(),
458
468
  personId: z.string(),
459
469
  distinctId: z.string()
460
470
  });
461
471
  export const posthogSearchSessionsPaginationSchema = z.object({
462
- limit: z.number(),
463
- offset: z.number(),
472
+ limit: z.number().int(),
473
+ offset: z.number().int(),
464
474
  hasNext: z.boolean(),
465
475
  hasPrevious: z.boolean(),
466
- nextOffset: z.number().nullable(),
467
- previousOffset: z.number().nullable()
476
+ nextOffset: z.number().int().nullable(),
477
+ previousOffset: z.number().int().nullable()
468
478
  });
469
479
  export const posthogSearchSessionsFoundSchema = toolOutputSuccessSchema.extend({
470
480
  userEmail: z.string(),
@@ -472,7 +482,7 @@ export const posthogSearchSessionsFoundSchema = toolOutputSuccessSchema.extend({
472
482
  personFound: z.literal(true),
473
483
  personId: z.string(),
474
484
  distinctId: z.string(),
475
- totalSessions: z.number(),
485
+ totalSessions: z.number().int(),
476
486
  sessions: z.array(posthogSessionSummarySchema),
477
487
  sessionsLink: z.string(),
478
488
  pagination: posthogSearchSessionsPaginationSchema,
@@ -495,15 +505,15 @@ export const posthogLogEntrySchema = z.object({
495
505
  attributes: z.record(z.string(), z.unknown())
496
506
  });
497
507
  export const posthogOffsetPaginationSchema = z.object({
498
- limit: z.number(),
499
- offset: z.number(),
508
+ limit: z.number().int(),
509
+ offset: z.number().int(),
500
510
  hasMore: z.boolean(),
501
- nextOffset: z.number().nullable(),
511
+ nextOffset: z.number().int().nullable(),
502
512
  showing: z.string()
503
513
  });
504
514
  export const posthogEventCountSchema = z.object({
505
515
  eventName: z.string(),
506
- count: z.number()
516
+ count: z.number().int()
507
517
  });
508
518
  export const posthogEventSummarySchema = z.object({
509
519
  id: z.string(),
@@ -525,28 +535,33 @@ export const posthogSessionConsoleLogSchema = z.object({
525
535
  message: z.string()
526
536
  });
527
537
  export const posthogSessionEventsSummarySchema = z.object({
528
- totalRawEvents: z.number(),
529
- meaningfulEventsReturned: z.number(),
530
- consoleLogsReturned: z.number()
538
+ totalRawEvents: z.number().int(),
539
+ meaningfulEventsReturned: z.number().int(),
540
+ consoleLogsReturned: z.number().int()
541
+ });
542
+ export const posthogSessionEventsTimeWindowSchema = z.object({
543
+ startSeconds: z.number(),
544
+ endSeconds: z.number().nullable()
545
+ });
546
+ export const linearCreateTicketPayloadSchema = z.object({
547
+ title: z.string(),
548
+ teamId: z.string(),
549
+ description: z.string().nullable().optional(),
550
+ stateId: z.string().nullable().optional(),
551
+ priority: z.number().int().nullable().optional(),
552
+ projectId: z.string().nullable().optional(),
553
+ labelIds: z.array(z.string()).nullable().optional(),
554
+ assigneeId: z.string().nullable().optional()
531
555
  });
532
556
  export const linearCreateTicketInputSchema = z.object({
533
557
  integrationId: z.string().describe("The integration ID of the Linear workspace to use."),
534
- ticket: z.object({
535
- title: z.string(),
536
- teamId: z.string(),
537
- description: z.string().nullable().optional(),
538
- stateId: z.string().nullable().optional(),
539
- priority: z.number().nullable().optional(),
540
- projectId: z.string().nullable().optional(),
541
- labelIds: z.array(z.string()).nullable().optional(),
542
- assigneeId: z.string().nullable().optional()
543
- })
558
+ ticket: linearCreateTicketPayloadSchema
544
559
  });
545
560
  export const linearUpdateTicketUpdatesSchema = z.object({
546
561
  title: z.string().nullable().optional().describe("The updated title of the ticket."),
547
562
  description: z.string().nullable().optional().describe("The updated description of the ticket."),
548
563
  stateId: z.string().nullable().optional().describe("The ID of the state to set. Use linear_get_states to find available states."),
549
- priority: z.number().nullable().optional().describe("The priority of the ticket. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low."),
564
+ priority: z.number().int().nullable().optional().describe("The priority of the ticket. 0 = No priority, 1 = Urgent, 2 = High, 3 = Normal, 4 = Low."),
550
565
  projectId: z.string().nullable().optional().describe("The ID of the project to associate with the ticket. Use linear_get_projects to find available projects."),
551
566
  labelIds: z.array(z.string()).nullable().optional().describe("The IDs of labels to add to the ticket. Use linear_get_labels to find available labels."),
552
567
  assigneeId: z.string().nullable().optional().describe("The ID of the user to assign the ticket to. Use linear_get_users to find available users and their IDs.")
@@ -591,7 +606,7 @@ export const linearSearchTicketInputSchema = z.object({
591
606
  .nullable()
592
607
  .optional()
593
608
  .describe("Filter to only include issues where the dateFilterField is on or before this date. ISO 8601 format (e.g., '2026-02-01' or '2026-02-01T23:59:59Z')."),
594
- limit: z.number().nullable().optional().describe("Maximum number of issues to return. Defaults to 10 if not provided."),
609
+ limit: z.number().int().nullable().optional().describe("Maximum number of issues to return. Defaults to 10 if not provided."),
595
610
  after: z.string().nullable().optional().describe("Cursor for pagination. Use the endCursor from the previous response to fetch the next page of results.")
596
611
  });
597
612
  export const linearReadTicketInputSchema = z.object({
@@ -632,7 +647,7 @@ export const slackListChannelsTypesSchema = z.enum(["public", "private", "im", "
632
647
  export const slackListChannelsInputSchema = z.object({
633
648
  integrationId: z.string().describe("The integration ID of the Slack workspace (user_slack_integrations id)."),
634
649
  types: slackListChannelsTypesSchema.nullable().optional().describe("Filter by type: public (public channels), private (private channels), im (DMs), mpim (group DMs), or all. Defaults to all."),
635
- limit: z.number().min(1).max(500).nullable().optional().default(100).describe("Maximum number of conversations to return."),
650
+ limit: z.number().int().min(1).max(500).nullable().optional().default(100).describe("Maximum number of conversations to return."),
636
651
  cursor: z.string().nullable().optional().describe("Pagination cursor from a previous response (nextCursor). Omit on first call.")
637
652
  });
638
653
  export const slackListUsersInputSchema = z.object({
@@ -642,7 +657,7 @@ export const slackListUsersInputSchema = z.object({
642
657
  export const slackReadConversationInputSchema = z.object({
643
658
  integrationId: z.string().describe("The integration ID of the Slack workspace (user_slack_integrations id)."),
644
659
  channelId: z.string().describe("The Slack channel ID to read (from slack_list_channels)."),
645
- limit: z.number().min(1).max(200).nullable().optional().default(50).describe("Maximum number of messages to return."),
660
+ limit: z.number().int().min(1).max(200).nullable().optional().default(50).describe("Maximum number of messages to return."),
646
661
  cursor: z.string().nullable().optional().describe("Pagination cursor from a previous response (nextCursor). Omit on first call.")
647
662
  });
648
663
  export const jiraAssigneeInputSchema = z
@@ -657,7 +672,7 @@ export const jiraCreateTicketInputSchema = z.object({
657
672
  projectKey: z.string().describe('The Jira project key (e.g., "PROJ", "TEAM"). This is required.'),
658
673
  issueType: z.string().nullable().optional().describe('The Jira issue type (e.g., "Task", "Bug", "Story", "Epic", "Subtask", "Improvement", "New Feature")').default("Task"),
659
674
  assignee: jiraAssigneeInputSchema.optional().describe("The assignee of the ticket"),
660
- priority: z.number().nullable().optional().describe("The priority of the ticket (number, typically 1-5)"),
675
+ priority: z.number().int().nullable().optional().describe("The priority of the ticket (number, typically 1-5)"),
661
676
  labels: z.array(z.string()).nullable().optional().describe("The labels for the ticket (array of label names)"),
662
677
  dueDate: z.string().nullable().optional().describe('The due date for the ticket in format "yyyy-MM-dd" (e.g., "2024-12-31"). Note: Jira requires the due date format to be yyyy-MM-dd.')
663
678
  });
@@ -668,7 +683,7 @@ export const jiraUpdateTicketInputSchema = z.object({
668
683
  description: z.string().nullable().optional().describe("The issue description in plain text or markdown format."),
669
684
  status: z.string().nullable().optional().describe('The status name to transition to (e.g., "In Progress", "Done", "To Do").'),
670
685
  assignee: jiraAssigneeInputSchema.optional().describe("The assignee of the ticket. Set to null to unassign."),
671
- priority: z.number().nullable().optional().describe("The priority of the ticket (number, typically 1-5)."),
686
+ priority: z.number().int().nullable().optional().describe("The priority of the ticket (number, typically 1-5)."),
672
687
  labels: z.array(z.string()).nullable().optional().describe("The labels for the ticket (array of label names). This replaces all existing labels."),
673
688
  dueDate: z
674
689
  .string()
@@ -683,7 +698,7 @@ export const jiraSearchTicketInputSchema = z.object({
683
698
  projectKey: z.string().nullable().optional().describe('Filter by Jira project key (e.g., "PROJ", "TEAM")'),
684
699
  assigneeEmail: z.string().nullable().optional().describe("Filter by assignee email address"),
685
700
  status: z.string().nullable().optional().describe('Filter by status name (e.g., "In Progress", "Done", "To Do")'),
686
- limit: z.number().nullable().optional().describe("Maximum number of issues to return. Defaults to 50 if not provided."),
701
+ limit: z.number().int().nullable().optional().describe("Maximum number of issues to return. Defaults to 50 if not provided."),
687
702
  nextPageToken: z
688
703
  .string()
689
704
  .nullable()
@@ -696,7 +711,7 @@ export const searchGitHubCodeInputSchema = z.object({
696
711
  language: z.string().nullable().optional().describe('Filter by programming language (e.g., "typescript", "python", "javascript"). Use null to search all languages.'),
697
712
  filename: z.string().nullable().optional().describe('Filter by filename pattern (e.g., "*.test.ts" for test files, "*.config.*" for config files). Use null to search all files.'),
698
713
  path: z.string().nullable().optional().describe('Filter by path (e.g., "src/components" to only search in that directory). Use null to search everywhere.'),
699
- perPage: z.number().describe("Number of results to return (default: 10, max: 100)"),
714
+ perPage: z.number().int().describe("Number of results to return (default: 10, max: 100)"),
700
715
  page: z
701
716
  .number()
702
717
  .int()
@@ -709,7 +724,7 @@ export const grepGitHubCodeInputSchema = z.object({
709
724
  pattern: z.string().describe('The exact text pattern to search for. For function calls, include the opening parenthesis (e.g., "fetchUser("). For strings, include quotes if needed.'),
710
725
  fileExtension: z.string().nullable().optional().describe('Filter by file extension (e.g., "ts", "js", "py"). Do not include the dot. Use null to search all file types.'),
711
726
  path: z.string().nullable().optional().describe('Filter by directory path (e.g., "src/services" to only search in that directory). Use null to search everywhere.'),
712
- perPage: z.number().describe("Number of results to return (default: 20, max: 100)"),
727
+ perPage: z.number().int().describe("Number of results to return (default: 20, max: 100)"),
713
728
  page: z
714
729
  .number()
715
730
  .int()
@@ -720,8 +735,8 @@ export const grepGitHubCodeInputSchema = z.object({
720
735
  export const readGitHubFileInputSchema = z.object({
721
736
  repository: z.string().describe('The repository in "owner/repo" format (e.g., "facebook/react"). Must be one of the configured repositories.'),
722
737
  path: z.string().describe('The file path within the repository (e.g., "src/components/Button.tsx" or "README.md")'),
723
- startLine: z.number().nullable().optional().describe("Start reading from this line number (1-indexed). Use with endLine for partial file reads. Use null to start from beginning."),
724
- endLine: z.number().nullable().optional().describe("Stop reading at this line number (1-indexed, inclusive). Use with startLine for partial file reads. Use null to read to end.")
738
+ startLine: z.number().int().nullable().optional().describe("Start reading from this line number (1-indexed). Use with endLine for partial file reads. Use null to start from beginning."),
739
+ endLine: z.number().int().nullable().optional().describe("Stop reading at this line number (1-indexed, inclusive). Use with startLine for partial file reads. Use null to read to end.")
725
740
  });
726
741
  export const listGitHubDirectoryInputSchema = z.object({
727
742
  repository: z.string().describe('The repository in "owner/repo" format (e.g., "facebook/react"). Must be one of the configured repositories.'),
@@ -736,7 +751,7 @@ export const listGitHubPullRequestsInputSchema = z.object({
736
751
  .nullable()
737
752
  .describe('Start date in YYYY-MM-DD format (e.g., "2024-01-15"). Only PRs updated on or after this date (starting at 00:00:00) are included. Use null for no start filter.'),
738
753
  until: z.string().nullable().describe('End date in YYYY-MM-DD format (e.g., "2024-01-15"). Only PRs updated on or before this date (ending at 23:59:59) are included. Use null for no end filter.'),
739
- perPage: z.number().describe("Number of results to return (default: 20, max: 100)"),
754
+ perPage: z.number().int().describe("Number of results to return (default: 20, max: 100)"),
740
755
  page: z
741
756
  .number()
742
757
  .int()
@@ -754,11 +769,11 @@ export const listGitHubCommitsInputSchema = z.object({
754
769
  branch: z.string().nullable().optional().describe('Branch name to list commits from (e.g., "main", "develop"). Use null for the repository\'s default branch.'),
755
770
  path: z.string().nullable().optional().describe('Only include commits that affect this file or directory path (e.g., "src/components" or "package.json"). Use null for all paths.'),
756
771
  author: z.string().nullable().optional().describe("Filter commits by author (GitHub username or email). Use null for all authors."),
757
- perPage: z.number().describe("Number of results to return (default: 30, max: 100)")
772
+ perPage: z.number().int().describe("Number of results to return (default: 30, max: 100)")
758
773
  });
759
774
  export const summarizeGitHubPullRequestDiffInputSchema = z.object({
760
775
  repository: z.string().describe('The repository in "owner/repo" format (e.g., "facebook/react"). Must be one of the configured repositories.'),
761
- pullNumber: z.number().describe("The pull request number (e.g., 123 for PR #123)"),
776
+ pullNumber: z.number().int().describe("The pull request number (e.g., 123 for PR #123)"),
762
777
  page: z
763
778
  .number()
764
779
  .int()
@@ -994,11 +1009,13 @@ export const confluenceAddCommentInputSchema = z.object({
994
1009
  .describe("Optional: The specific text in the page that this comment refers to. If provided, the tool will try to find this text and attach the comment to it. If not provided, you must specify start_position and end_position."),
995
1010
  start_position: z
996
1011
  .number()
1012
+ .int()
997
1013
  .nullable()
998
1014
  .optional()
999
1015
  .describe("Optional: The start character position (offset) in the page storage format where the comment should be attached. Required if text_to_comment_on is not provided."),
1000
1016
  end_position: z
1001
1017
  .number()
1018
+ .int()
1002
1019
  .nullable()
1003
1020
  .optional()
1004
1021
  .describe("Optional: The end character position (offset) in the page storage format where the comment should be attached. Required if text_to_comment_on is not provided.")
@@ -1007,8 +1024,8 @@ export const searchPosthogSessionsInputSchema = z.object({
1007
1024
  integrationId: z.string().describe("The integration ID of the PostHog skill to use."),
1008
1025
  projectId: z.string().describe("The PostHog project ID."),
1009
1026
  userEmail: z.string().describe("The email address of the user to query session recordings for. Must be a valid email address."),
1010
- limit: z.number().default(10).describe("Maximum number of session recordings to return (default: 10, max: 100)"),
1011
- offset: z.number().default(0).describe("Offset for pagination (default: 0)"),
1027
+ limit: z.number().int().default(10).describe("Maximum number of session recordings to return (default: 10, max: 100)"),
1028
+ offset: z.number().int().default(0).describe("Offset for pagination (default: 0)"),
1012
1029
  last7Days: z
1013
1030
  .boolean()
1014
1031
  .default(false)
@@ -1026,8 +1043,8 @@ export const searchPosthogLogsInputSchema = z.object({
1026
1043
  .union([z.array(posthogSeverityLevelSchema), z.null()])
1027
1044
  .describe('Optional: Array of log severity levels to filter by (e.g., ["error", "warn"]). If not provided, all severity levels are included.'),
1028
1045
  messageSearch: z.string().nullable().optional().describe("Optional: Text to search for within log messages. Searches are case-insensitive and match partial text."),
1029
- limit: z.number().default(50).describe("Maximum number of log entries to return (default: 50, max: 250)"),
1030
- offset: z.number().default(0).describe("Offset for pagination (default: 0). Use with limit to page through results. For example, offset=0 gets logs 1-50, offset=50 gets logs 51-100, etc."),
1046
+ limit: z.number().int().default(50).describe("Maximum number of log entries to return (default: 50, max: 250)"),
1047
+ offset: z.number().int().default(0).describe("Offset for pagination (default: 0). Use with limit to page through results. For example, offset=0 gets logs 1-50, offset=50 gets logs 51-100, etc."),
1031
1048
  last7Days: z
1032
1049
  .boolean()
1033
1050
  .default(false)
@@ -1065,8 +1082,8 @@ export const searchPosthogEventsInputSchema = z.object({
1065
1082
  .union([z.array(posthogPropertyFilterSchema), z.null()])
1066
1083
  .optional()
1067
1084
  .describe("Optional: Array of property filters to apply. Each filter has a key, value, and operator."),
1068
- limit: z.number().default(50).describe("Maximum number of events to return when countByEventNameOnly is false (default: 50, max: 100). Ignored when countByEventNameOnly is true."),
1069
- offset: z.number().default(0).describe("Offset for pagination when countByEventNameOnly is false (default: 0). Ignored when countByEventNameOnly is true."),
1085
+ limit: z.number().int().default(50).describe("Maximum number of events to return when countByEventNameOnly is false (default: 50, max: 100). Ignored when countByEventNameOnly is true."),
1086
+ offset: z.number().int().default(0).describe("Offset for pagination when countByEventNameOnly is false (default: 0). Ignored when countByEventNameOnly is true."),
1070
1087
  last7Days: z
1071
1088
  .boolean()
1072
1089
  .default(false)
@@ -1104,7 +1121,7 @@ export const linearSearchTicketTool = defineTool({
1104
1121
  inputSchema: linearSearchTicketInputSchema,
1105
1122
  outputSchema: toolOutputBaseSchema.extend({
1106
1123
  issues: z.array(linearIssueSummarySchema),
1107
- count: z.number(),
1124
+ count: z.number().int(),
1108
1125
  query: z.string(),
1109
1126
  pagination: linearSearchPaginationSchema
1110
1127
  })
@@ -1168,7 +1185,7 @@ export const slackListChannelsTool = defineTool({
1168
1185
  inputSchema: slackListChannelsInputSchema,
1169
1186
  outputSchema: toolOutputBaseSchema.extend({
1170
1187
  channels: z.array(slackChannelListItemSchema),
1171
- count: z.number(),
1188
+ count: z.number().int(),
1172
1189
  nextCursor: z.string().nullable(),
1173
1190
  hasMore: z.boolean()
1174
1191
  })
@@ -1178,7 +1195,7 @@ export const slackListUsersTool = defineTool({
1178
1195
  inputSchema: slackListUsersInputSchema,
1179
1196
  outputSchema: toolOutputBaseSchema.extend({
1180
1197
  users: z.array(slackUserResponseSchema),
1181
- count: z.number()
1198
+ count: z.number().int()
1182
1199
  })
1183
1200
  });
1184
1201
  export const slackReadConversationTool = defineTool({
@@ -1188,7 +1205,7 @@ export const slackReadConversationTool = defineTool({
1188
1205
  channelId: z.string(),
1189
1206
  channelName: z.string().optional(),
1190
1207
  messages: z.array(slackConversationMessageSchema),
1191
- count: z.number(),
1208
+ count: z.number().int(),
1192
1209
  hasMore: z.boolean(),
1193
1210
  nextCursor: z.string().nullable()
1194
1211
  })
@@ -1213,9 +1230,9 @@ export const jiraSearchTicketTool = defineTool({
1213
1230
  inputSchema: jiraSearchTicketInputSchema,
1214
1231
  outputSchema: toolOutputBaseSchema.extend({
1215
1232
  issues: z.array(jiraIssueSummarySchema),
1216
- count: z.number(),
1217
- total: z.number(),
1218
- maxResults: z.number(),
1233
+ count: z.number().int(),
1234
+ total: z.number().int(),
1235
+ maxResults: z.number().int(),
1219
1236
  isLast: z.boolean(),
1220
1237
  nextPageToken: z.string().optional(),
1221
1238
  jql: z.string()
@@ -1225,8 +1242,8 @@ export const searchGitHubCodeTool = defineTool({
1225
1242
  name: "searchGitHubCode",
1226
1243
  inputSchema: searchGitHubCodeInputSchema,
1227
1244
  outputSchema: toolOutputBaseSchema.extend({
1228
- totalCount: z.number(),
1229
- resultsReturned: z.number(),
1245
+ totalCount: z.number().int(),
1246
+ resultsReturned: z.number().int(),
1230
1247
  query: z.string(),
1231
1248
  repositories: z.array(z.string()),
1232
1249
  pagination: gitHubPaginationSchema,
@@ -1239,8 +1256,8 @@ export const grepGitHubCodeTool = defineTool({
1239
1256
  name: "grepGitHubCode",
1240
1257
  inputSchema: grepGitHubCodeInputSchema,
1241
1258
  outputSchema: toolOutputBaseSchema.extend({
1242
- totalCount: z.number(),
1243
- resultsReturned: z.number(),
1259
+ totalCount: z.number().int(),
1260
+ resultsReturned: z.number().int(),
1244
1261
  pattern: z.string(),
1245
1262
  query: z.string(),
1246
1263
  repositories: z.array(z.string()),
@@ -1257,9 +1274,9 @@ export const readGitHubFileTool = defineTool({
1257
1274
  repository: z.string(),
1258
1275
  path: z.string(),
1259
1276
  url: z.string(),
1260
- totalLines: z.number(),
1277
+ totalLines: z.number().int(),
1261
1278
  displayedLines: z.string(),
1262
- size: z.number(),
1279
+ size: z.number().int(),
1263
1280
  content: z.string(),
1264
1281
  warning: z.string().optional()
1265
1282
  })
@@ -1271,7 +1288,7 @@ export const listGitHubDirectoryTool = defineTool({
1271
1288
  repository: z.string(),
1272
1289
  path: z.string(),
1273
1290
  recursive: z.boolean(),
1274
- totalItems: z.number(),
1291
+ totalItems: z.number().int(),
1275
1292
  directories: z.array(z.union([gitHubDirectoryEntrySchema, z.string()])),
1276
1293
  files: z.array(gitHubFileEntrySchema),
1277
1294
  warning: z.string().optional(),
@@ -1286,12 +1303,7 @@ export const listGitHubPullRequestsTool = defineTool({
1286
1303
  outputSchema: toolOutputBaseSchema.extend({
1287
1304
  repository: z.string(),
1288
1305
  timeWindow: z.string(),
1289
- summary: z.object({
1290
- total: z.number(),
1291
- merged: z.number(),
1292
- open: z.number(),
1293
- closed: z.number()
1294
- }),
1306
+ summary: gitHubPullRequestListSummarySchema,
1295
1307
  pagination: gitHubPaginationSchema,
1296
1308
  pullRequests: z.array(gitHubPullRequestSummarySchema),
1297
1309
  message: z.string()
@@ -1304,10 +1316,7 @@ export const listGitHubCommitsTool = defineTool({
1304
1316
  repository: z.string(),
1305
1317
  timeWindow: z.string(),
1306
1318
  filters: z.string(),
1307
- summary: z.object({
1308
- total: z.number(),
1309
- byAuthor: z.record(z.string(), z.number())
1310
- }),
1319
+ summary: gitHubCommitListSummarySchema,
1311
1320
  commits: z.array(gitHubCommitSummarySchema),
1312
1321
  message: z.string(),
1313
1322
  tip: z.string()
@@ -1349,7 +1358,7 @@ export const notionQueryPageTool = defineTool({
1349
1358
  properties: z.record(z.string(), notionReadablePropertyValueSchema),
1350
1359
  properties_raw: z.record(z.string(), z.unknown()).optional(),
1351
1360
  blocks: z.array(notionPageBlockSchema),
1352
- blocks_count: z.number()
1361
+ blocks_count: z.number().int()
1353
1362
  })
1354
1363
  });
1355
1364
  export const notionQueryDatabaseTool = defineTool({
@@ -1364,14 +1373,14 @@ export const notionGetSchemaTool = defineTool({
1364
1373
  data_source_id: z.string(),
1365
1374
  database_name: z.string(),
1366
1375
  schema: z.record(z.string(), notionSchemaPropertySchema),
1367
- property_count: z.number()
1376
+ property_count: z.number().int()
1368
1377
  })
1369
1378
  });
1370
1379
  export const notionFetchRelatedEventsTool = defineTool({
1371
1380
  name: "notion_fetch_related_events",
1372
1381
  inputSchema: notionFetchRelatedEventsInputSchema,
1373
1382
  outputSchema: toolOutputSuccessSchema.extend({
1374
- events_count: z.number(),
1383
+ events_count: z.number().int(),
1375
1384
  events: z.string().optional(),
1376
1385
  message: z.string()
1377
1386
  })
@@ -1381,7 +1390,7 @@ export const notionListUsersTool = defineTool({
1381
1390
  inputSchema: notionListUsersInputSchema,
1382
1391
  outputSchema: toolOutputSuccessSchema.extend({
1383
1392
  users: z.array(notionWorkspaceUserSchema),
1384
- count: z.number()
1393
+ count: z.number().int()
1385
1394
  })
1386
1395
  });
1387
1396
  export const gmailSendEmailTool = defineTool({
@@ -1423,7 +1432,7 @@ export const searchPosthogLogsTool = defineTool({
1423
1432
  severityLevels: z.array(posthogSeverityLevelSchema).nullable(),
1424
1433
  messageSearch: z.string().nullable(),
1425
1434
  projectId: z.string(),
1426
- totalLogs: z.number(),
1435
+ totalLogs: z.number().int(),
1427
1436
  logs: z.array(posthogLogEntrySchema),
1428
1437
  logsLink: z.string(),
1429
1438
  pagination: posthogOffsetPaginationSchema,
@@ -1438,39 +1447,35 @@ export const getPosthogSessionEventsTool = defineTool({
1438
1447
  sessionUrl: z.string(),
1439
1448
  startTime: z.string(),
1440
1449
  duration: z.number().optional(),
1441
- timeWindow: z.object({
1442
- startSeconds: z.number(),
1443
- endSeconds: z.number().nullable()
1444
- }),
1450
+ timeWindow: posthogSessionEventsTimeWindowSchema,
1445
1451
  summary: posthogSessionEventsSummarySchema,
1446
1452
  events: z.array(posthogSessionEventSchema),
1447
1453
  consoleLogs: z.array(posthogSessionConsoleLogSchema),
1448
1454
  message: z.string()
1449
1455
  })
1450
1456
  });
1457
+ export const searchPosthogEventsCountSummarySchema = toolOutputSuccessSchema.extend({
1458
+ countByEventNameOnly: z.literal(true),
1459
+ customEventsOnly: z.boolean(),
1460
+ eventCounts: z.array(posthogEventCountSchema),
1461
+ totalEventTypes: z.number().int(),
1462
+ eventsLink: z.string(),
1463
+ message: z.string()
1464
+ });
1465
+ export const searchPosthogEventsEventListSchema = toolOutputSuccessSchema.extend({
1466
+ userEmail: z.string().nullable(),
1467
+ eventName: z.string().nullable(),
1468
+ projectId: z.string(),
1469
+ totalEvents: z.number().int(),
1470
+ events: z.array(posthogEventSummarySchema),
1471
+ eventsLink: z.string(),
1472
+ pagination: posthogOffsetPaginationSchema,
1473
+ message: z.string()
1474
+ });
1451
1475
  export const searchPosthogEventsTool = defineTool({
1452
1476
  name: "searchPosthogEvents",
1453
1477
  inputSchema: searchPosthogEventsInputSchema,
1454
- outputSchema: z.union([
1455
- toolOutputSuccessSchema.extend({
1456
- countByEventNameOnly: z.literal(true),
1457
- customEventsOnly: z.boolean(),
1458
- eventCounts: z.array(posthogEventCountSchema),
1459
- totalEventTypes: z.number(),
1460
- eventsLink: z.string(),
1461
- message: z.string()
1462
- }),
1463
- toolOutputSuccessSchema.extend({
1464
- userEmail: z.string().nullable(),
1465
- eventName: z.string().nullable(),
1466
- projectId: z.string(),
1467
- totalEvents: z.number(),
1468
- events: z.array(posthogEventSummarySchema),
1469
- eventsLink: z.string(),
1470
- pagination: posthogOffsetPaginationSchema,
1471
- message: z.string()
1472
- })
1473
- ])
1478
+ outputSchema: z.union([searchPosthogEventsCountSummarySchema, searchPosthogEventsEventListSchema])
1474
1479
  });
1475
1480
  // Datadog schemas
1476
1481
  export const datadogLogEntrySchema = z.object({
@@ -1484,12 +1489,13 @@ export const datadogLogEntrySchema = z.object({
1484
1489
  customAttributes: z.record(z.string(), z.unknown())
1485
1490
  });
1486
1491
  export const datadogCursorPaginationSchema = z.object({
1487
- limit: z.number(),
1492
+ limit: z.number().int(),
1488
1493
  cursor: z.string().nullable().optional(),
1489
1494
  nextCursor: z.string().nullable(),
1490
1495
  hasMore: z.boolean(),
1491
1496
  showing: z.string()
1492
1497
  });
1498
+ export const datadogPagePaginationSchema = datadogCursorPaginationSchema.omit({ cursor: true });
1493
1499
  export const datadogRumSessionDetailsSchema = z.object({
1494
1500
  id: z.string().optional(),
1495
1501
  type: z.string().optional(),
@@ -1521,7 +1527,7 @@ export const datadogRumResourceDetailsSchema = z.object({
1521
1527
  type: z.string().optional(),
1522
1528
  url: z.string().optional(),
1523
1529
  method: z.string().optional(),
1524
- statusCode: z.number().optional(),
1530
+ statusCode: z.number().int().optional(),
1525
1531
  duration: z.number().optional()
1526
1532
  });
1527
1533
  export const datadogRumLongTaskDetailsSchema = z.object({
@@ -1562,6 +1568,16 @@ export const datadogAggregationMetaSchema = z.object({
1562
1568
  requestId: z.string().optional(),
1563
1569
  status: z.unknown().optional()
1564
1570
  });
1571
+ export const datadogAggregationComputeSchema = z.object({
1572
+ aggregation: z.enum(["count", "pc90", "pc95", "pc99", "avg", "sum", "min", "max", "cardinality"]).describe("Aggregation: count, pc90/pc95/pc99, avg, sum, min, max, cardinality"),
1573
+ metric: z.string().describe('Metric to compute (e.g., @view.loading_time, @duration). Use "*" for count of all events.'),
1574
+ type: z.enum(["total", "timeseries"]).default("total").describe('Computation type: "total" (overall) or "timeseries" (time-bucketed)')
1575
+ });
1576
+ export const datadogAggregationGroupBySchema = z.object({
1577
+ facet: z.string().describe("Facet to group by (e.g., @view.name, @service, @browser.name)"),
1578
+ limit: z.number().int().default(10).describe("Maximum number of groups to return (default: 10)"),
1579
+ total: z.boolean().default(false).describe('Include "total" group with all events combined (default: false)')
1580
+ });
1565
1581
  // Datadog input schemas
1566
1582
  export const searchDatadogLogsInputSchema = z.object({
1567
1583
  integrationId: z.string().describe("The integration ID of the Datadog skill to use."),
@@ -1576,7 +1592,7 @@ export const searchDatadogLogsInputSchema = z.object({
1576
1592
  .describe('Log indexes to search (e.g., ["main"]). Defaults to defaultIndexes if not provided.'),
1577
1593
  from: z.string().nullable().optional().describe('Start time (ISO8601 or relative like "now-1h")'),
1578
1594
  to: z.string().nullable().optional().describe("End time (ISO8601). Defaults to now if not provided."),
1579
- limit: z.number().default(50).describe("Maximum number of log entries to return (default: 50)"),
1595
+ limit: z.number().int().default(50).describe("Maximum number of log entries to return (default: 50)"),
1580
1596
  cursor: z.string().nullable().optional().describe("Pagination cursor from previous response"),
1581
1597
  sort: z.enum(["timestamp", "-timestamp"]).default("timestamp").describe('Sort order: "timestamp" (ascending) or "-timestamp" (descending)')
1582
1598
  });
@@ -1585,7 +1601,7 @@ export const searchRumEventsInputSchema = z.object({
1585
1601
  query: z.string().nullable().optional().describe("Datadog RUM search query (e.g., @type:error AND @error.source:network)"),
1586
1602
  from: z.string().describe('Start time (ISO8601 or relative like "now-15m")'),
1587
1603
  to: z.string().nullable().optional().describe('End time (ISO8601). Defaults to "now" if not provided.'),
1588
- limit: z.number().default(25).describe("Maximum number of RUM events to return (default: 25, max: 1000)"),
1604
+ limit: z.number().int().default(25).describe("Maximum number of RUM events to return (default: 25, max: 1000)"),
1589
1605
  pageCursor: z.string().nullable().optional().describe("Pagination cursor from previous response"),
1590
1606
  sort: z.enum(["timestamp", "-timestamp"]).default("timestamp").describe('Sort order: "timestamp" (ascending) or "-timestamp" (descending)'),
1591
1607
  timezone: z.string().default("GMT").describe('Timezone for time-based queries (default: "GMT")')
@@ -1595,7 +1611,7 @@ export const listRumEventsInputSchema = z.object({
1595
1611
  query: z.string().nullable().optional().describe("Datadog RUM search query to filter events (e.g., @type:view)"),
1596
1612
  from: z.string().nullable().optional().describe('Minimum timestamp (ISO8601 only, e.g., "2020-09-17T11:48:36+01:00")'),
1597
1613
  to: z.string().nullable().optional().describe("Maximum timestamp (ISO8601 only). Defaults to now if not provided."),
1598
- limit: z.number().default(25).describe("Maximum number of RUM events to return (default: 25, max: 1000)"),
1614
+ limit: z.number().int().default(25).describe("Maximum number of RUM events to return (default: 25, max: 1000)"),
1599
1615
  pageCursor: z.string().nullable().optional().describe("Pagination cursor from previous response"),
1600
1616
  sort: z.enum(["timestamp", "-timestamp"]).default("timestamp").describe('Sort order: "timestamp" (ascending) or "-timestamp" (descending)')
1601
1617
  });
@@ -1603,25 +1619,10 @@ export const aggregateRumEventsInputSchema = z.object({
1603
1619
  query: z.string().nullable().optional().describe("Datadog RUM search query to filter events before aggregation (e.g., @type:view)"),
1604
1620
  from: z.string().describe('Start time (ISO8601 or relative like "now-15m")'),
1605
1621
  to: z.string().nullable().optional().describe('End time (ISO8601). Defaults to "now" if not provided.'),
1606
- compute: z
1607
- .array(z.object({
1608
- aggregation: z.enum(["count", "pc90", "pc95", "pc99", "avg", "sum", "min", "max", "cardinality"]).describe("Aggregation: count, pc90/pc95/pc99, avg, sum, min, max, cardinality"),
1609
- metric: z.string().describe('Metric to compute (e.g., @view.loading_time, @duration). Use "*" for count of all events.'),
1610
- type: z.enum(["total", "timeseries"]).default("total").describe('Computation type: "total" (overall) or "timeseries" (time-bucketed)')
1611
- }))
1612
- .describe("Array of metrics to compute. At least one required."),
1613
- groupBy: z
1614
- .union([
1615
- z.array(z.object({
1616
- facet: z.string().describe("Facet to group by (e.g., @view.name, @service, @browser.name)"),
1617
- limit: z.number().default(10).describe("Maximum number of groups to return (default: 10)"),
1618
- total: z.boolean().default(false).describe('Include "total" group with all events combined (default: false)')
1619
- })),
1620
- z.null()
1621
- ])
1622
- .describe("Facets to group results by"),
1622
+ compute: z.array(datadogAggregationComputeSchema).describe("Array of metrics to compute. At least one required."),
1623
+ groupBy: z.union([z.array(datadogAggregationGroupBySchema), z.null()]).describe("Facets to group results by"),
1623
1624
  timezone: z.string().default("GMT").describe('Timezone for time-based queries (default: "GMT")'),
1624
- pageLimit: z.number().default(25).describe("Maximum number of buckets to return (default: 25)"),
1625
+ pageLimit: z.number().int().default(25).describe("Maximum number of buckets to return (default: 25)"),
1625
1626
  integrationId: z.string().describe("The integration ID of the Datadog skill to use.")
1626
1627
  });
1627
1628
  // Terse tool schemas
@@ -1672,7 +1673,7 @@ export const searchDatadogLogsTool = defineTool({
1672
1673
  outputSchema: toolOutputBaseSchema.extend({
1673
1674
  query: z.string().nullable(),
1674
1675
  indexes: z.array(z.string()),
1675
- totalLogs: z.number(),
1676
+ totalLogs: z.number().int(),
1676
1677
  logs: z.array(datadogLogEntrySchema),
1677
1678
  logsLink: z.string(),
1678
1679
  pagination: datadogCursorPaginationSchema,
@@ -1685,9 +1686,9 @@ export const searchRumEventsTool = defineTool({
1685
1686
  inputSchema: searchRumEventsInputSchema,
1686
1687
  outputSchema: toolOutputBaseSchema.extend({
1687
1688
  query: z.string().nullable(),
1688
- totalEvents: z.number(),
1689
+ totalEvents: z.number().int(),
1689
1690
  events: z.array(datadogRumEventSchema),
1690
- eventsByType: z.record(z.string(), z.number()),
1691
+ eventsByType: z.record(z.string(), z.number().int()),
1691
1692
  rumLink: z.string(),
1692
1693
  pagination: datadogCursorPaginationSchema,
1693
1694
  warnings: z.string().nullable(),
@@ -1699,9 +1700,9 @@ export const listRumEventsTool = defineTool({
1699
1700
  inputSchema: listRumEventsInputSchema,
1700
1701
  outputSchema: toolOutputBaseSchema.extend({
1701
1702
  query: z.string().nullable(),
1702
- totalEvents: z.number(),
1703
+ totalEvents: z.number().int(),
1703
1704
  events: z.array(datadogRumEventSchema),
1704
- eventsByType: z.record(z.string(), z.number()),
1705
+ eventsByType: z.record(z.string(), z.number().int()),
1705
1706
  rumLink: z.string(),
1706
1707
  pagination: datadogCursorPaginationSchema,
1707
1708
  warnings: z.string().nullable(),
@@ -1717,10 +1718,10 @@ export const aggregateRumEventsTool = defineTool({
1717
1718
  to: z.string().nullable(),
1718
1719
  compute: z.string(),
1719
1720
  groupBy: z.string(),
1720
- totalBuckets: z.number(),
1721
+ totalBuckets: z.number().int(),
1721
1722
  buckets: z.array(datadogAggregationBucketSchema),
1722
1723
  rumLink: z.string(),
1723
- pagination: datadogCursorPaginationSchema.omit({ cursor: true }),
1724
+ pagination: datadogPagePaginationSchema,
1724
1725
  warnings: z.string().nullable(),
1725
1726
  meta: datadogAggregationMetaSchema,
1726
1727
  message: z.string()
@@ -1775,7 +1776,7 @@ export const attioRecordSchema = z
1775
1776
  })
1776
1777
  .catchall(z.unknown());
1777
1778
  export const attioUpsertErrorSchema = z.object({
1778
- index: z.number(),
1779
+ index: z.number().int(),
1779
1780
  message: z.string()
1780
1781
  });
1781
1782
  // WorkOS schemas
@@ -1825,7 +1826,7 @@ export const launchDarklyEnvironmentConfigSchema = z.object({
1825
1826
  contextTargets: z.array(z.record(z.string(), z.unknown())),
1826
1827
  rules: z.array(z.record(z.string(), z.unknown())),
1827
1828
  fallthrough: z.record(z.string(), z.unknown()).nullable(),
1828
- offVariation: z.number().nullable(),
1829
+ offVariation: z.number().int().nullable(),
1829
1830
  prerequisites: z.array(z.record(z.string(), z.unknown()))
1830
1831
  });
1831
1832
  export const launchDarklyHistoryEntrySchema = z.object({
@@ -1840,7 +1841,7 @@ export const launchDarklyHistoryEntrySchema = z.object({
1840
1841
  });
1841
1842
  export const launchDarklyHistoryResultSchema = z.object({
1842
1843
  entries: z.array(launchDarklyHistoryEntrySchema),
1843
- totalEntries: z.number(),
1844
+ totalEntries: z.number().int(),
1844
1845
  url: z.string()
1845
1846
  });
1846
1847
  // Snowflake schemas
@@ -1856,7 +1857,7 @@ export const attioQueryRecordsInputSchema = z.object({
1856
1857
  .string()
1857
1858
  .nullable()
1858
1859
  .describe('Optional Attio filter as a JSON string. Pass null for no filtering. Use shorthand (e.g. \'{"email_addresses":"test@example.com"}\') or verbose syntax with operators.'),
1859
- limit: z.number().nullable().describe("Maximum number of records to return. Pass null to use the default of 20.")
1860
+ limit: z.number().int().nullable().describe("Maximum number of records to return. Pass null to use the default of 20.")
1860
1861
  });
1861
1862
  export const attioUpsertRecordInputSchema = z.object({
1862
1863
  integrationId: z.string().describe("The integration ID of the Attio workspace to use."),
@@ -1871,12 +1872,12 @@ export const listWorkOSUsersInputSchema = z.object({
1871
1872
  integrationId: z.string().describe("The integration ID of the WorkOS skill to use."),
1872
1873
  email: z.string().nullable().optional().describe("Optional exact email address filter. Omit or pass null to list all users."),
1873
1874
  organizationId: z.string().nullable().optional().describe("Optional WorkOS organization ID filter. Omit or pass null for all organizations."),
1874
- limit: z.number().default(20).describe("Maximum number of users to return (default: 20, max: 100)."),
1875
+ limit: z.number().int().default(20).describe("Maximum number of users to return (default: 20, max: 100)."),
1875
1876
  after: z.string().nullable().optional().describe("Optional pagination cursor. Use the 'after' value from a previous response to get the next page.")
1876
1877
  });
1877
1878
  export const listWorkOSOrganizationsInputSchema = z.object({
1878
1879
  integrationId: z.string().describe("The integration ID of the WorkOS skill to use."),
1879
- limit: z.number().default(20).describe("Maximum number of organizations to return (default: 20, max: 100)."),
1880
+ limit: z.number().int().default(20).describe("Maximum number of organizations to return (default: 20, max: 100)."),
1880
1881
  after: z.string().nullable().optional().describe("Optional pagination cursor. Use the 'after' value from a previous response to get the next page.")
1881
1882
  });
1882
1883
  export const getWorkOSUserInputSchema = z.object({
@@ -1904,7 +1905,7 @@ export const getLaunchDarklyFlagDetailsInputSchema = z.object({
1904
1905
  includeHistory: z.boolean().default(false).describe("If true, includes change history for the flag over the specified time window."),
1905
1906
  before: z.string().nullable().optional().describe("Optional: ISO date - only return history entries before this date (only used if includeHistory is true)."),
1906
1907
  after: z.string().nullable().optional().describe("Optional: ISO date - only return history entries after this date (only used if includeHistory is true)."),
1907
- historyLimit: z.number().default(20).describe("Number of history entries to return if includeHistory is true (default: 20, max: 20).")
1908
+ historyLimit: z.number().int().default(20).describe("Number of history entries to return if includeHistory is true (default: 20, max: 20).")
1908
1909
  });
1909
1910
  // Snowflake input schemas
1910
1911
  export const snowflakeExecuteQueryInputSchema = z.object({
@@ -1931,7 +1932,7 @@ export const attioListObjectsTool = defineTool({
1931
1932
  inputSchema: attioListObjectsInputSchema,
1932
1933
  outputSchema: toolOutputBaseSchema.extend({
1933
1934
  objects: z.array(attioObjectWithAttributesSchema),
1934
- count: z.number()
1935
+ count: z.number().int()
1935
1936
  })
1936
1937
  });
1937
1938
  export const attioQueryRecordsTool = defineTool({
@@ -1939,7 +1940,7 @@ export const attioQueryRecordsTool = defineTool({
1939
1940
  inputSchema: attioQueryRecordsInputSchema,
1940
1941
  outputSchema: toolOutputBaseSchema.extend({
1941
1942
  records: z.array(attioRecordSchema),
1942
- count: z.number()
1943
+ count: z.number().int()
1943
1944
  })
1944
1945
  });
1945
1946
  export const attioUpsertRecordTool = defineTool({
@@ -1947,10 +1948,10 @@ export const attioUpsertRecordTool = defineTool({
1947
1948
  inputSchema: attioUpsertRecordInputSchema,
1948
1949
  outputSchema: toolOutputBaseSchema.extend({
1949
1950
  records: z.array(attioRecordSchema).optional(),
1950
- count: z.number().optional(),
1951
- requestedCount: z.number().optional(),
1952
- successCount: z.number().optional(),
1953
- failureCount: z.number().optional(),
1951
+ count: z.number().int().optional(),
1952
+ requestedCount: z.number().int().optional(),
1953
+ successCount: z.number().int().optional(),
1954
+ failureCount: z.number().int().optional(),
1954
1955
  partial: z.boolean().optional(),
1955
1956
  errors: z.array(attioUpsertErrorSchema).optional()
1956
1957
  })
@@ -1986,7 +1987,7 @@ export const listLaunchDarklyFlagsTool = defineTool({
1986
1987
  inputSchema: listLaunchDarklyFlagsInputSchema,
1987
1988
  outputSchema: toolOutputBaseSchema.extend({
1988
1989
  projectKey: z.string(),
1989
- totalFlags: z.number(),
1990
+ totalFlags: z.number().int(),
1990
1991
  flags: z.array(launchDarklyFlagSummarySchema),
1991
1992
  flagsLink: z.string(),
1992
1993
  message: z.string()
@@ -2010,7 +2011,7 @@ export const snowflakeExecuteQueryTool = defineTool({
2010
2011
  outputSchema: toolOutputBaseSchema.extend({
2011
2012
  rows: z.array(snowflakeQueryRowSchema),
2012
2013
  columns: z.array(z.string()),
2013
- rowCount: z.number()
2014
+ rowCount: z.number().int()
2014
2015
  })
2015
2016
  });
2016
2017
  export const snowflakeExplainQueryTool = defineTool({
@@ -2019,7 +2020,7 @@ export const snowflakeExplainQueryTool = defineTool({
2019
2020
  outputSchema: toolOutputBaseSchema.extend({
2020
2021
  explainPlan: z.array(snowflakeQueryRowSchema),
2021
2022
  columns: z.array(z.string()),
2022
- rowCount: z.number()
2023
+ rowCount: z.number().int()
2023
2024
  })
2024
2025
  });
2025
2026
  export const webSearchTool = defineTool({
@@ -2094,6 +2095,12 @@ export const ToolDefinitions = {
2094
2095
  [webResearchTool.name]: webResearchTool,
2095
2096
  [imageEditTool.name]: imageEditTool
2096
2097
  };
2098
+ export const toolsWithIntegrationId = new Set(Object.entries(ToolDefinitions)
2099
+ .filter(([, def]) => {
2100
+ const shape = def.inputSchema instanceof z.ZodObject ? def.inputSchema.shape : undefined;
2101
+ return shape?.integrationId !== undefined;
2102
+ })
2103
+ .map(([name]) => name));
2097
2104
  export function isValidToolName(name) {
2098
2105
  return name in ToolDefinitions;
2099
2106
  }