veryfront 0.1.355 → 0.1.357

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 (30) hide show
  1. package/esm/cli/templates/manifest.d.ts +33 -0
  2. package/esm/cli/templates/manifest.js +40 -7
  3. package/esm/deno.js +1 -1
  4. package/esm/src/agent/fork-runtime-stream.d.ts +35 -0
  5. package/esm/src/agent/fork-runtime-stream.d.ts.map +1 -1
  6. package/esm/src/agent/fork-runtime-stream.js +116 -1
  7. package/esm/src/agent/index.d.ts +2 -1
  8. package/esm/src/agent/index.d.ts.map +1 -1
  9. package/esm/src/agent/index.js +2 -1
  10. package/esm/src/agent/runtime-agent-invocation-contract.d.ts +176 -0
  11. package/esm/src/agent/runtime-agent-invocation-contract.d.ts.map +1 -0
  12. package/esm/src/agent/runtime-agent-invocation-contract.js +184 -0
  13. package/esm/src/integrations/_data.js +1 -1
  14. package/esm/src/oauth/providers/google.d.ts.map +1 -1
  15. package/esm/src/oauth/providers/google.js +2 -0
  16. package/esm/src/utils/version-constant.d.ts +1 -1
  17. package/esm/src/utils/version-constant.js +1 -1
  18. package/package.json +1 -1
  19. package/src/cli/templates/manifest.js +40 -7
  20. package/src/deno.js +1 -1
  21. package/src/deps/esm.sh/@types/react-dom@19.2.3/client.d.ts +1 -1
  22. package/src/deps/esm.sh/@types/{react@19.2.3 → react@19.2.14}/global.d.ts +1 -0
  23. package/src/deps/esm.sh/@types/{react@19.2.3 → react@19.2.14}/index.d.ts +93 -24
  24. package/src/deps/esm.sh/react-dom@19.2.4/client.d.ts +1 -1
  25. package/src/src/agent/fork-runtime-stream.ts +187 -0
  26. package/src/src/agent/index.ts +30 -0
  27. package/src/src/agent/runtime-agent-invocation-contract.ts +260 -0
  28. package/src/src/integrations/_data.ts +1 -1
  29. package/src/src/oauth/providers/google.ts +2 -0
  30. package/src/src/utils/version-constant.ts +1 -1
@@ -0,0 +1,184 @@
1
+ import { z } from "zod";
2
+ import { parseAgUiJsonRequestOrError } from "./ag-ui-request-shared.js";
3
+ const MAX_TOOL_PARAMETERS_BYTES = 16_384;
4
+ const MAX_CONTEXT_ITEM_BYTES = 16_384;
5
+ const MAX_CONTEXT_TOTAL_BYTES = 65_536;
6
+ const MAX_FORWARDED_PROPS_BYTES = 65_536;
7
+ const encoder = new TextEncoder();
8
+ function isWithinJsonSizeLimit(value, maxBytes) {
9
+ try {
10
+ return encoder.encode(JSON.stringify(value)).byteLength <= maxBytes;
11
+ }
12
+ catch {
13
+ return false;
14
+ }
15
+ }
16
+ export const RuntimeAgentRunIdSchema = z.string().min(1).max(128).regex(/^[a-zA-Z0-9_-]+$/);
17
+ export const RuntimeAgentToolCallIdSchema = z.string().min(1).max(128);
18
+ export const RuntimeAgentServiceIdSchema = z
19
+ .string()
20
+ .min(1)
21
+ .max(128)
22
+ .regex(/^[a-zA-Z0-9][a-zA-Z0-9._:-]*$/, "Agent service ids must start with an alphanumeric character and use a valid service-id format");
23
+ export const RuntimeAgentIdSchema = z.string().min(1).max(128);
24
+ export const RuntimeAgentToolNameSchema = z
25
+ .string()
26
+ .min(1)
27
+ .max(128)
28
+ .regex(/^[a-zA-Z][a-zA-Z0-9._:-]*$/, "Tool names must start with a letter and use a valid client-tool format");
29
+ const RuntimeAgentToolJsonSchemaDocumentSchema = z.record(z.string(), z.unknown()).refine((value) => isWithinJsonSizeLimit(value, MAX_TOOL_PARAMETERS_BYTES), { message: "Tool schema metadata must be less than 16 KB" });
30
+ export const RuntimeAgentToolSchema = z.object({
31
+ name: RuntimeAgentToolNameSchema,
32
+ description: z.string().max(1024).optional(),
33
+ parameters: z.record(z.string(), z.unknown()).optional().refine((value) => value === undefined || isWithinJsonSizeLimit(value, MAX_TOOL_PARAMETERS_BYTES), { message: "Tool parameters must be less than 16 KB" }),
34
+ inputSchema: RuntimeAgentToolJsonSchemaDocumentSchema.optional(),
35
+ outputSchema: RuntimeAgentToolJsonSchemaDocumentSchema.optional(),
36
+ });
37
+ export const RuntimeAgentContextItemSchema = z.discriminatedUnion("type", [
38
+ z.object({
39
+ type: z.literal("text"),
40
+ title: z.string().max(256).optional(),
41
+ text: z.string().max(MAX_CONTEXT_ITEM_BYTES),
42
+ }),
43
+ z.object({
44
+ type: z.literal("json"),
45
+ title: z.string().max(256).optional(),
46
+ data: z.record(z.string(), z.unknown()).refine((value) => isWithinJsonSizeLimit(value, MAX_CONTEXT_ITEM_BYTES), { message: "JSON context item must be less than 16 KB" }),
47
+ }),
48
+ z.object({
49
+ type: z.literal("resource"),
50
+ title: z.string().max(256).optional(),
51
+ uri: z.string().max(2048),
52
+ mimeType: z.string().max(256).optional(),
53
+ text: z.string().max(MAX_CONTEXT_ITEM_BYTES).optional(),
54
+ }),
55
+ ]);
56
+ export const RuntimeAgentSourceContextSchema = z.discriminatedUnion("type", [
57
+ z.object({
58
+ type: z.literal("branch"),
59
+ branch: z.string().min(1).max(255),
60
+ }),
61
+ z.object({
62
+ type: z.literal("environment"),
63
+ environmentName: z.string().min(1).max(255),
64
+ releaseId: z.string().min(1).max(255).optional(),
65
+ }),
66
+ z.object({
67
+ type: z.literal("release"),
68
+ releaseId: z.string().min(1).max(255),
69
+ }),
70
+ ]);
71
+ export const RuntimeAgentTargetKindSchema = z.enum([
72
+ "production",
73
+ "environment",
74
+ "preview_branch",
75
+ ]);
76
+ export function validateRuntimeAgentTargetSelection(input, ctx) {
77
+ const kind = input.runtimeTargetKind;
78
+ if (!kind || kind === "production") {
79
+ if (input.runtimeTargetEnvironmentId || input.runtimeTargetBranchId) {
80
+ ctx.addIssue({
81
+ code: z.ZodIssueCode.custom,
82
+ message: "production target does not accept environment or branch identifiers",
83
+ path: ["runtimeTargetKind"],
84
+ });
85
+ }
86
+ return;
87
+ }
88
+ if (kind === "environment") {
89
+ if (!input.runtimeTargetEnvironmentId || input.runtimeTargetBranchId) {
90
+ ctx.addIssue({
91
+ code: z.ZodIssueCode.custom,
92
+ message: "environment target requires runtimeTargetEnvironmentId and no runtimeTargetBranchId",
93
+ path: ["runtimeTargetKind"],
94
+ });
95
+ }
96
+ return;
97
+ }
98
+ if (!input.runtimeTargetBranchId || input.runtimeTargetEnvironmentId) {
99
+ ctx.addIssue({
100
+ code: z.ZodIssueCode.custom,
101
+ message: "preview_branch target requires runtimeTargetBranchId and no runtimeTargetEnvironmentId",
102
+ path: ["runtimeTargetKind"],
103
+ });
104
+ }
105
+ }
106
+ export const RuntimeAgentProjectContextSchema = z.object({
107
+ projectId: z.string().uuid(),
108
+ projectSlug: z.string().min(1).max(255),
109
+ runtimeTargetKind: RuntimeAgentTargetKindSchema.nullable().optional(),
110
+ runtimeTargetEnvironmentId: z.string().uuid().nullable().optional(),
111
+ runtimeTargetBranchId: z.string().uuid().nullable().optional(),
112
+ }).superRefine(validateRuntimeAgentTargetSelection);
113
+ export const RuntimeAgentValidatedClaimsSchema = z.object({
114
+ subject: z.string().min(1).max(256),
115
+ projectId: z.string().uuid().optional(),
116
+ projectSlug: z.string().min(1).max(255).optional(),
117
+ scopes: z.array(z.string().min(1).max(128)).max(50).default([]),
118
+ });
119
+ export const RuntimeAgentRunContextSchema = z.object({
120
+ agentServiceId: RuntimeAgentServiceIdSchema,
121
+ agentId: RuntimeAgentIdSchema,
122
+ conversationId: z.string().uuid(),
123
+ runId: RuntimeAgentRunIdSchema,
124
+ messageId: z.string().uuid(),
125
+ inputAnchorMessageId: z.string().uuid(),
126
+ requestedByUserId: z.string().uuid(),
127
+ project: RuntimeAgentProjectContextSchema,
128
+ parentConversationId: z.string().uuid().nullable().optional(),
129
+ parentRunId: RuntimeAgentRunIdSchema.nullable().optional(),
130
+ spawnedFromMessageId: z.string().uuid().nullable().optional(),
131
+ spawnedFromToolCallId: RuntimeAgentToolCallIdSchema.nullable().optional(),
132
+ validatedClaims: RuntimeAgentValidatedClaimsSchema.optional(),
133
+ }).superRefine((input, ctx) => {
134
+ if (input.parentRunId && input.parentRunId === input.runId) {
135
+ ctx.addIssue({
136
+ code: z.ZodIssueCode.custom,
137
+ message: "parentRunId cannot match runId",
138
+ path: ["parentRunId"],
139
+ });
140
+ }
141
+ if (!input.parentRunId && input.spawnedFromMessageId) {
142
+ ctx.addIssue({
143
+ code: z.ZodIssueCode.custom,
144
+ message: "spawnedFromMessageId requires parentRunId",
145
+ path: ["spawnedFromMessageId"],
146
+ });
147
+ }
148
+ if (!input.parentRunId && input.spawnedFromToolCallId) {
149
+ ctx.addIssue({
150
+ code: z.ZodIssueCode.custom,
151
+ message: "spawnedFromToolCallId requires parentRunId",
152
+ path: ["spawnedFromToolCallId"],
153
+ });
154
+ }
155
+ if (input.validatedClaims?.projectId && input.validatedClaims.projectId !== input.project.projectId) {
156
+ ctx.addIssue({
157
+ code: z.ZodIssueCode.custom,
158
+ message: "validatedClaims.projectId must match project.projectId",
159
+ path: ["validatedClaims", "projectId"],
160
+ });
161
+ }
162
+ if (input.validatedClaims?.projectSlug &&
163
+ input.validatedClaims.projectSlug !== input.project.projectSlug) {
164
+ ctx.addIssue({
165
+ code: z.ZodIssueCode.custom,
166
+ message: "validatedClaims.projectSlug must match project.projectSlug",
167
+ path: ["validatedClaims", "projectSlug"],
168
+ });
169
+ }
170
+ });
171
+ export const RuntimeAgentRunInvocationSchema = z.object({
172
+ run: RuntimeAgentRunContextSchema,
173
+ messages: z.array(z.unknown()).default([]),
174
+ tools: z.array(RuntimeAgentToolSchema).max(50).default([]),
175
+ context: z.array(RuntimeAgentContextItemSchema).max(10).default([]).refine((value) => isWithinJsonSizeLimit(value, MAX_CONTEXT_TOTAL_BYTES), { message: "context must be less than 64 KB total" }),
176
+ agentSource: RuntimeAgentSourceContextSchema.optional(),
177
+ forwardedProps: z.record(z.string(), z.unknown()).optional().refine((value) => value === undefined || isWithinJsonSizeLimit(value, MAX_FORWARDED_PROPS_BYTES), { message: "forwardedProps must be less than 64 KB" }),
178
+ });
179
+ export async function parseRuntimeAgentRunInvocation(request) {
180
+ return RuntimeAgentRunInvocationSchema.parse(await request.json());
181
+ }
182
+ export async function parseRuntimeAgentRunInvocationOrError(request) {
183
+ return await parseAgUiJsonRequestOrError(() => parseRuntimeAgentRunInvocation(request), "Invalid runtime agent invocation");
184
+ }
@@ -13,7 +13,7 @@ export const connectors = [
13
13
  { "name": "figma", "displayName": "Figma", "icon": "figma.svg", "description": "Access Figma designs, files, comments, and collaborate on design projects", "auth": { "type": "oauth2", "provider": "figma", "authorizationUrl": "https://www.figma.com/oauth", "tokenUrl": "https://api.figma.com/v1/oauth/token", "scopes": ["file_content:read"], "tokenAuthMethod": "client_secret_basic", "requiredApis": [{ "name": "Figma OAuth App", "enableUrl": "https://www.figma.com/developers/apps" }] }, "envVars": [{ "name": "FIGMA_CLIENT_ID", "description": "Figma OAuth Client ID (from your app settings)", "required": true, "sensitive": false, "docsUrl": "https://www.figma.com/developers/apps" }, { "name": "FIGMA_CLIENT_SECRET", "description": "Figma OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://www.figma.com/developers/apps" }], "tools": [{ "id": "list_files", "name": "List Files", "description": "List recent Figma files accessible to the user", "requiresWrite": false }, { "id": "get_file", "name": "Get File", "description": "Get detailed information about a Figma file including components and styles", "requiresWrite": false }, { "id": "get_comments", "name": "Get Comments", "description": "Get all comments on a Figma file", "requiresWrite": false }, { "id": "post_comment", "name": "Post Comment", "description": "Post a comment on a Figma file", "requiresWrite": true }, { "id": "list_projects", "name": "List Projects", "description": "List all projects in a team", "requiresWrite": false }], "prompts": [{ "id": "review_design", "title": "Review a design", "prompt": "Review a Figma design file and provide feedback on the components, layout, and design system usage.", "category": "design", "icon": "eye" }, { "id": "summarize_comments", "title": "Summarize comments", "prompt": "Read all comments on a Figma file and summarize the feedback, action items, and unresolved discussions.", "category": "design", "icon": "message" }, { "id": "extract_components", "title": "Extract components", "prompt": "List all components in a Figma file and describe their structure, variants, and properties.", "category": "design", "icon": "component" }, { "id": "design_feedback", "title": "Give design feedback", "prompt": "Review the design file and post constructive feedback as comments on specific elements.", "category": "design", "icon": "plus" }], "suggestedWith": ["linear", "slack", "notion"] },
14
14
  { "name": "github", "displayName": "GitHub", "icon": "github.svg", "description": "Manage repositories, issues, and pull requests", "auth": { "type": "oauth2", "provider": "github", "authorizationUrl": "https://github.com/login/oauth/authorize", "tokenUrl": "https://github.com/login/oauth/access_token", "scopes": ["repo", "read:user", "read:org"] }, "envVars": [{ "name": "GITHUB_CLIENT_ID", "description": "GitHub OAuth App Client ID", "required": true, "sensitive": false, "docsUrl": "https://github.com/settings/developers" }, { "name": "GITHUB_CLIENT_SECRET", "description": "GitHub OAuth App Client Secret", "required": true, "sensitive": true, "docsUrl": "https://github.com/settings/developers" }], "tools": [{ "id": "list_repos", "name": "List Repositories", "description": "Get list of user's repositories", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/user/repos", "params": { "type": { "type": "string", "in": "query", "description": "Type: all, owner, public, private, member" }, "sort": { "type": "string", "in": "query", "description": "Sort: created, updated, pushed, full_name", "default": "updated" }, "per_page": { "type": "number", "in": "query", "description": "Results per page (max 100)", "default": 30 } } } }, { "id": "get_repo", "name": "Get Repository", "description": "Get details of a specific repository", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/repos/{owner}/{repo}", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true } } } }, { "id": "list_prs", "name": "List Pull Requests", "description": "Get pull requests for a repository", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/repos/{owner}/{repo}/pulls", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true }, "state": { "type": "string", "in": "query", "description": "State: open, closed, all", "default": "open" }, "per_page": { "type": "number", "in": "query", "description": "Results per page", "default": 30 } } } }, { "id": "create_issue", "name": "Create Issue", "description": "Create a new issue in a repository", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://api.github.com/repos/{owner}/{repo}/issues", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true } }, "body": { "title": { "type": "string", "description": "Issue title", "required": true }, "body": { "type": "string", "description": "Issue body (markdown)" }, "labels": { "type": "array", "description": "Label names" }, "assignees": { "type": "array", "description": "Usernames to assign" } } } }, { "id": "get_pr_diff", "name": "Get PR Diff", "description": "Get the diff for a pull request", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://api.github.com/repos/{owner}/{repo}/pulls/{pull_number}", "params": { "owner": { "type": "string", "in": "path", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "path", "description": "Repository name", "required": true }, "pull_number": { "type": "number", "in": "path", "description": "Pull request number", "required": true }, "Accept": { "type": "string", "in": "header", "description": "Response format", "default": "application/vnd.github.v3.diff" } } } }, { "id": "list_issues", "name": "List Issues", "description": "List issues for a repository", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.github.com/graphql", "query": "query($owner: String!, $repo: String!, $first: Int, $states: [IssueState!]) { repository(owner: $owner, name: $repo) { issues(first: $first, states: $states, orderBy: { field: UPDATED_AT, direction: DESC }) { nodes { id number title body state url createdAt updatedAt author { login } labels(first: 10) { nodes { name } } assignees(first: 10) { nodes { login } } } } } }", "params": { "owner": { "type": "string", "in": "body", "description": "Repository owner", "required": true }, "repo": { "type": "string", "in": "body", "description": "Repository name", "required": true }, "states": { "type": "string[]", "in": "body", "description": "Issue states to include (e.g. OPEN, CLOSED)", "default": ["OPEN"] }, "first": { "type": "number", "in": "body", "description": "Results per page", "default": 30 } }, "response": { "transform": "repository.issues.nodes" } } }], "prompts": [{ "id": "review_prs", "title": "Review my open PRs", "prompt": "Show me my open pull requests and help me review them. Summarize the changes and any comments.", "category": "development", "icon": "git-pull-request" }, { "id": "create_issue", "title": "Create GitHub issue", "prompt": "Help me create a new GitHub issue with a clear description and appropriate labels.", "category": "development", "icon": "circle-dot" }, { "id": "summarize_commits", "title": "Summarize recent commits", "prompt": "Summarize the recent commits in my repository and highlight significant changes.", "category": "development", "icon": "git-commit" }], "suggestedWith": ["jira", "slack"] },
15
15
  { "name": "gitlab", "displayName": "GitLab", "icon": "gitlab.svg", "description": "Search and manage GitLab issues, merge requests, and projects", "auth": { "type": "oauth2", "provider": "gitlab", "authorizationUrl": "https://gitlab.com/oauth/authorize", "tokenUrl": "https://gitlab.com/oauth/token", "scopes": ["api", "read_user", "read_repository"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "GitLab Application", "enableUrl": "https://gitlab.com/-/profile/applications" }] }, "envVars": [{ "name": "GITLAB_CLIENT_ID", "description": "GitLab OAuth Application ID", "required": true, "sensitive": false, "docsUrl": "https://docs.gitlab.com/ee/api/oauth2.html" }, { "name": "GITLAB_CLIENT_SECRET", "description": "GitLab OAuth Application Secret", "required": true, "sensitive": true, "docsUrl": "https://docs.gitlab.com/ee/api/oauth2.html" }], "tools": [{ "id": "search_issues", "name": "Search Issues", "description": "Search for issues across projects", "requiresWrite": false }, { "id": "get_issue", "name": "Get Issue", "description": "Get detailed information about a specific issue", "requiresWrite": false }, { "id": "create_issue", "name": "Create Issue", "description": "Create a new issue in a project", "requiresWrite": true }, { "id": "list_merge_requests", "name": "List Merge Requests", "description": "List merge requests for a project or across projects", "requiresWrite": false }, { "id": "list_projects", "name": "List Projects", "description": "List accessible GitLab projects", "requiresWrite": false }], "prompts": [{ "id": "find_issues", "title": "Find my issues", "prompt": "Search for issues assigned to me that are open. Show me the most important ones.", "category": "development", "icon": "bug" }, { "id": "review_mrs", "title": "Review merge requests", "prompt": "Show me all open merge requests that need my review. Summarize what each one does.", "category": "development", "icon": "git-merge" }, { "id": "create_bug_report", "title": "Create bug report", "prompt": "Help me create a detailed bug report issue with steps to reproduce, expected vs actual behavior.", "category": "development", "icon": "plus" }, { "id": "project_status", "title": "Project status", "prompt": "Give me a summary of my projects: open issues, merge requests, and recent activity.", "category": "development", "icon": "list" }], "suggestedWith": ["github", "jira", "slack"] },
16
- { "name": "gmail", "displayName": "Gmail", "icon": "gmail.svg", "description": "Read and send emails via Gmail API", "auth": { "type": "oauth2", "provider": "google", "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", "tokenUrl": "https://oauth2.googleapis.com/token", "scopes": ["https://www.googleapis.com/auth/gmail.readonly", "https://www.googleapis.com/auth/gmail.send", "https://www.googleapis.com/auth/gmail.modify"], "requiredApis": [{ "name": "Gmail API", "enableUrl": "https://console.cloud.google.com/apis/library/gmail.googleapis.com" }] }, "envVars": [{ "name": "GOOGLE_CLIENT_ID", "description": "Google OAuth Client ID", "required": true, "sensitive": false, "docsUrl": "https://console.cloud.google.com/apis/credentials" }, { "name": "GOOGLE_CLIENT_SECRET", "description": "Google OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://console.cloud.google.com/apis/credentials" }], "tools": [{ "id": "list_emails", "name": "List Emails", "description": "List email message IDs from inbox. Use get-email to fetch full content for each message.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum number of messages to return (1-500)", "default": 20 }, "q": { "type": "string", "in": "query", "description": "Gmail search query (e.g. is:unread, from:user@example.com)" }, "labelIds": { "type": "string[]", "in": "query", "description": "Only return messages with these label IDs (e.g. INBOX, UNREAD)" } }, "response": { "transform": "messages" } } }, { "id": "send_email", "name": "Send Email", "description": "Send an email to recipients", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/send", "body": { "raw": { "type": "string", "description": "Base64url-encoded RFC 2822 email message", "required": true } } } }, { "id": "get_email", "name": "Get Email", "description": "Get a specific email by ID with full content", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true }, "format": { "type": "string", "in": "query", "description": "Format: full, metadata, minimal, raw", "default": "full" } } } }, { "id": "search_emails", "name": "Search Emails", "description": "Search emails by query", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages", "params": { "q": { "type": "string", "in": "query", "description": "Gmail search query", "required": true }, "maxResults": { "type": "number", "in": "query", "description": "Maximum results", "default": 10 } }, "response": { "transform": "messages" } } }], "prompts": [{ "id": "summarize_emails", "title": "Summarize today's emails", "prompt": "Summarize my unread emails from today. Group them by priority and highlight any that need immediate attention.", "category": "productivity", "icon": "mail" }, { "id": "draft_reply", "title": "Draft a quick reply", "prompt": "Help me draft a reply to my most recent email. Keep it professional and concise.", "category": "productivity", "icon": "reply" }, { "id": "find_emails", "title": "Find important emails", "prompt": "Search my emails for important messages from the past week that I might have missed.", "category": "productivity", "icon": "search" }], "suggestedWith": ["calendar", "slack"] },
16
+ { "name": "gmail", "displayName": "Gmail", "icon": "gmail.svg", "description": "Read and send emails via Gmail API", "auth": { "type": "oauth2", "provider": "google", "authorizationUrl": "https://accounts.google.com/o/oauth2/v2/auth", "tokenUrl": "https://oauth2.googleapis.com/token", "scopes": ["https://www.googleapis.com/auth/gmail.readonly", "https://www.googleapis.com/auth/gmail.send", "https://www.googleapis.com/auth/gmail.modify", "https://www.googleapis.com/auth/gmail.labels", "https://www.googleapis.com/auth/gmail.compose", "https://mail.google.com/"], "requiredApis": [{ "name": "Gmail API", "enableUrl": "https://console.cloud.google.com/apis/library/gmail.googleapis.com" }] }, "envVars": [{ "name": "GOOGLE_CLIENT_ID", "description": "Google OAuth Client ID", "required": true, "sensitive": false, "docsUrl": "https://console.cloud.google.com/apis/credentials" }, { "name": "GOOGLE_CLIENT_SECRET", "description": "Google OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://console.cloud.google.com/apis/credentials" }], "tools": [{ "id": "list_emails", "name": "List Emails", "description": "List email message IDs from inbox. Use get-email to fetch full content for each message.", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum number of messages to return (1-500)", "default": 20 }, "q": { "type": "string", "in": "query", "description": "Gmail search query (e.g. is:unread, from:user@example.com)" }, "labelIds": { "type": "string[]", "in": "query", "description": "Only return messages with these label IDs (e.g. INBOX, UNREAD)" }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "transform": "messages" } } }, { "id": "send_email", "name": "Send Email", "description": "Send an email to recipients", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/send", "body": { "raw": { "type": "string", "description": "Base64url-encoded RFC 2822 email message", "required": true }, "threadId": { "type": "string", "description": "Thread ID for a reply" } } } }, { "id": "get_email", "name": "Get Email", "description": "Get a specific email by ID with full content", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true }, "format": { "type": "string", "in": "query", "description": "Format: full, metadata, minimal, raw", "default": "full" } } } }, { "id": "search_emails", "name": "Search Emails", "description": "Search emails by query", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages", "params": { "q": { "type": "string", "in": "query", "description": "Gmail search query", "required": true }, "maxResults": { "type": "number", "in": "query", "description": "Maximum results", "default": 10 }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "transform": "messages" } } }, { "id": "mark_email_read", "name": "Mark Email Read", "description": "Mark an email as read", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "removeLabelIds": { "type": "array", "description": "Label IDs to remove, use UNREAD", "default": ["UNREAD"] } } } }, { "id": "archive_email", "name": "Archive Email", "description": "Archive an email", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "removeLabelIds": { "type": "array", "description": "Label IDs to remove, use INBOX", "default": ["INBOX"] } } } }, { "id": "list_labels", "name": "List Labels", "description": "List Gmail labels", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels", "response": { "transform": "labels" } } }, { "id": "get_label", "name": "Get Label", "description": "Get a Gmail label", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels/{labelId}", "params": { "labelId": { "type": "string", "in": "path", "description": "Label ID", "required": true } } } }, { "id": "create_label", "name": "Create Label", "description": "Create a Gmail user label", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels", "body": { "name": { "type": "string", "description": "Label display name", "required": true }, "messageListVisibility": { "type": "string", "description": "Message list visibility: show or hide" }, "labelListVisibility": { "type": "string", "description": "Label list visibility" }, "color": { "type": "object", "description": "Label color object" } } } }, { "id": "update_label", "name": "Update Label", "description": "Update a Gmail user label", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels/{labelId}", "params": { "labelId": { "type": "string", "in": "path", "description": "Label ID", "required": true } }, "body": { "name": { "type": "string", "description": "Label display name", "required": true }, "messageListVisibility": { "type": "string", "description": "Message list visibility: show or hide" }, "labelListVisibility": { "type": "string", "description": "Label list visibility" }, "color": { "type": "object", "description": "Label color object" } } } }, { "id": "delete_label", "name": "Delete Label", "description": "Delete a Gmail user label", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/labels/{labelId}", "params": { "labelId": { "type": "string", "in": "path", "description": "Label ID", "required": true } } } }, { "id": "apply_labels", "name": "Apply Labels", "description": "Apply or remove labels on an email", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "modify_email_labels", "name": "Modify Email Labels", "description": "Modify labels on an email", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/modify", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } }, "body": { "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "trash_email", "name": "Trash Email", "description": "Move an email to trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/trash", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } } } }, { "id": "untrash_email", "name": "Untrash Email", "description": "Remove an email from trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/untrash", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } } } }, { "id": "delete_email", "name": "Delete Email", "description": "Permanently delete an email", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true } } } }, { "id": "batch_modify_emails", "name": "Batch Modify Emails", "description": "Modify labels on multiple emails", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/batchModify", "body": { "ids": { "type": "array", "description": "Email message IDs", "required": true }, "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "batch_delete_emails", "name": "Batch Delete Emails", "description": "Permanently delete multiple emails", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/batchDelete", "body": { "ids": { "type": "array", "description": "Email message IDs", "required": true } } } }, { "id": "list_threads", "name": "List Threads", "description": "List Gmail threads", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum number of threads to return (1-500)", "default": 20 }, "q": { "type": "string", "in": "query", "description": "Gmail search query" }, "labelIds": { "type": "string[]", "in": "query", "description": "Only return threads with these label IDs" }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "transform": "threads" } } }, { "id": "get_thread", "name": "Get Thread", "description": "Get a Gmail thread", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true }, "format": { "type": "string", "in": "query", "description": "Format: full, metadata, minimal", "default": "full" } } } }, { "id": "modify_thread_labels", "name": "Modify Thread Labels", "description": "Modify labels on a Gmail thread", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}/modify", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } }, "body": { "addLabelIds": { "type": "array", "description": "Label IDs to add" }, "removeLabelIds": { "type": "array", "description": "Label IDs to remove" } } } }, { "id": "trash_thread", "name": "Trash Thread", "description": "Move a Gmail thread to trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}/trash", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } } } }, { "id": "untrash_thread", "name": "Untrash Thread", "description": "Remove a Gmail thread from trash", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}/untrash", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } } } }, { "id": "delete_thread", "name": "Delete Thread", "description": "Permanently delete a Gmail thread", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/threads/{threadId}", "params": { "threadId": { "type": "string", "in": "path", "description": "Thread ID", "required": true } } } }, { "id": "create_draft", "name": "Create Draft", "description": "Create a Gmail draft", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts", "body": { "message": { "type": "object", "description": "Draft message containing raw RFC 2822 content", "required": true } } } }, { "id": "list_drafts", "name": "List Drafts", "description": "List Gmail drafts", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts", "params": { "maxResults": { "type": "number", "in": "query", "description": "Maximum number of drafts to return (1-500)", "default": 20 }, "q": { "type": "string", "in": "query", "description": "Gmail search query" }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" } }, "response": { "transform": "drafts" } } }, { "id": "get_draft", "name": "Get Draft", "description": "Get a Gmail draft", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/{draftId}", "params": { "draftId": { "type": "string", "in": "path", "description": "Draft ID", "required": true }, "format": { "type": "string", "in": "query", "description": "Format: full, metadata, minimal, raw", "default": "full" } } } }, { "id": "update_draft", "name": "Update Draft", "description": "Replace a Gmail draft", "requiresWrite": true, "endpoint": { "method": "PUT", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/{draftId}", "params": { "draftId": { "type": "string", "in": "path", "description": "Draft ID", "required": true } }, "body": { "message": { "type": "object", "description": "Draft message containing raw RFC 2822 content", "required": true } } } }, { "id": "send_draft", "name": "Send Draft", "description": "Send an existing Gmail draft", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/send", "body": { "id": { "type": "string", "description": "Draft ID", "required": true } } } }, { "id": "delete_draft", "name": "Delete Draft", "description": "Permanently delete a Gmail draft", "requiresWrite": true, "endpoint": { "method": "DELETE", "url": "https://gmail.googleapis.com/gmail/v1/users/me/drafts/{draftId}", "params": { "draftId": { "type": "string", "in": "path", "description": "Draft ID", "required": true } } } }, { "id": "get_attachment", "name": "Get Attachment", "description": "Get a Gmail message attachment", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/messages/{messageId}/attachments/{attachmentId}", "params": { "messageId": { "type": "string", "in": "path", "description": "Email message ID", "required": true }, "attachmentId": { "type": "string", "in": "path", "description": "Attachment ID", "required": true } } } }, { "id": "get_profile", "name": "Get Profile", "description": "Get the Gmail mailbox profile", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/profile" } }, { "id": "list_history", "name": "List History", "description": "List Gmail mailbox history changes", "requiresWrite": false, "endpoint": { "method": "GET", "url": "https://gmail.googleapis.com/gmail/v1/users/me/history", "params": { "startHistoryId": { "type": "string", "in": "query", "description": "History ID to start after", "required": true }, "maxResults": { "type": "number", "in": "query", "description": "Maximum history records", "default": 100 }, "pageToken": { "type": "string", "in": "query", "description": "Page token for pagination" }, "labelId": { "type": "string", "in": "query", "description": "Only return history for this label" }, "historyTypes": { "type": "string[]", "in": "query", "description": "History event types" } } } }, { "id": "watch_mailbox", "name": "Watch Mailbox", "description": "Start Gmail push notifications for mailbox changes", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/watch", "body": { "topicName": { "type": "string", "description": "Cloud Pub/Sub topic name", "required": true }, "labelIds": { "type": "array", "description": "Labels used to filter notifications" }, "labelFilterBehavior": { "type": "string", "description": "Label filter behavior: include or exclude" } } } }, { "id": "stop_mailbox_watch", "name": "Stop Mailbox Watch", "description": "Stop Gmail push notifications", "requiresWrite": true, "endpoint": { "method": "POST", "url": "https://gmail.googleapis.com/gmail/v1/users/me/stop" } }], "prompts": [{ "id": "summarize_emails", "title": "Summarize today's emails", "prompt": "Summarize my unread emails from today. Group them by priority and highlight any that need immediate attention.", "category": "productivity", "icon": "mail" }, { "id": "draft_reply", "title": "Draft a quick reply", "prompt": "Help me draft a reply to my most recent email. Keep it professional and concise.", "category": "productivity", "icon": "reply" }, { "id": "find_emails", "title": "Find important emails", "prompt": "Search my emails for important messages from the past week that I might have missed.", "category": "productivity", "icon": "search" }], "suggestedWith": ["calendar", "slack"] },
17
17
  { "name": "hubspot", "displayName": "HubSpot", "icon": "hubspot.svg", "description": "Manage contacts, companies, and deals in your HubSpot CRM", "auth": { "type": "oauth2", "provider": "hubspot", "authorizationUrl": "https://app.hubspot.com/oauth/authorize", "tokenUrl": "https://api.hubapi.com/oauth/v1/token", "scopes": ["crm.objects.contacts.read", "crm.objects.contacts.write", "crm.objects.companies.read", "crm.objects.deals.read"], "tokenAuthMethod": "request_body", "requiredApis": [{ "name": "HubSpot App", "enableUrl": "https://app.hubspot.com/developer" }] }, "envVars": [{ "name": "HUBSPOT_CLIENT_ID", "description": "HubSpot OAuth Client ID (from your app)", "required": true, "sensitive": false, "docsUrl": "https://app.hubspot.com/developer" }, { "name": "HUBSPOT_CLIENT_SECRET", "description": "HubSpot OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://app.hubspot.com/developer" }], "tools": [{ "id": "list_contacts", "name": "List Contacts", "description": "List contacts from your HubSpot CRM", "requiresWrite": false }, { "id": "get_contact", "name": "Get Contact", "description": "Get detailed information about a specific contact", "requiresWrite": false }, { "id": "create_contact", "name": "Create Contact", "description": "Create a new contact in HubSpot CRM", "requiresWrite": true }, { "id": "list_deals", "name": "List Deals", "description": "List sales deals from your HubSpot CRM", "requiresWrite": false }, { "id": "create_deal", "name": "Create Deal", "description": "Create a new deal in HubSpot CRM", "requiresWrite": true }], "prompts": [{ "id": "find_contacts", "title": "Find contacts", "prompt": "Search for contacts in my HubSpot CRM and show me their key information.", "category": "crm", "icon": "search" }, { "id": "create_contact", "title": "Create a contact", "prompt": "Create a new contact in HubSpot CRM with the information I provide.", "category": "crm", "icon": "plus" }, { "id": "pipeline_summary", "title": "Pipeline summary", "prompt": "Show me a summary of my current sales deals and pipeline status.", "category": "crm", "icon": "chart" }], "suggestedWith": ["gmail", "slack", "calendar"] },
18
18
  { "name": "jira", "displayName": "Jira", "icon": "jira.svg", "description": "Search, create, and manage Jira issues and projects", "auth": { "type": "oauth2", "provider": "atlassian", "authorizationUrl": "https://auth.atlassian.com/authorize", "tokenUrl": "https://auth.atlassian.com/oauth/token", "scopes": ["read:jira-work", "write:jira-work", "read:jira-user", "offline_access"], "tokenAuthMethod": "body", "requiredApis": [{ "name": "Atlassian OAuth 2.0", "enableUrl": "https://developer.atlassian.com/console/myapps/" }], "additionalAuthParams": { "audience": "api.atlassian.com", "prompt": "consent" } }, "envVars": [{ "name": "ATLASSIAN_CLIENT_ID", "description": "Atlassian OAuth 2.0 Client ID (from your app)", "required": true, "sensitive": false, "docsUrl": "https://developer.atlassian.com/console/myapps/" }, { "name": "ATLASSIAN_CLIENT_SECRET", "description": "Atlassian OAuth 2.0 Client Secret", "required": true, "sensitive": true, "docsUrl": "https://developer.atlassian.com/console/myapps/" }], "tools": [{ "id": "search_issues", "name": "Search Issues", "description": "Search Jira issues using JQL (Jira Query Language)", "requiresWrite": false }, { "id": "get_issue", "name": "Get Issue", "description": "Get detailed information about a specific Jira issue", "requiresWrite": false }, { "id": "create_issue", "name": "Create Issue", "description": "Create a new Jira issue in a project", "requiresWrite": true }, { "id": "update_issue", "name": "Update Issue", "description": "Update an existing Jira issue (status, fields, etc.)", "requiresWrite": true }, { "id": "list_projects", "name": "List Projects", "description": "List all accessible Jira projects", "requiresWrite": false }], "prompts": [{ "id": "find_bugs", "title": "Find open bugs", "prompt": "Search for all open bugs assigned to me or in my current sprint.", "category": "productivity", "icon": "bug" }, { "id": "create_task", "title": "Create a task", "prompt": "Create a new task in Jira with a title, description, and priority.", "category": "productivity", "icon": "plus" }, { "id": "sprint_summary", "title": "Sprint summary", "prompt": "Get a summary of all issues in the current sprint, organized by status.", "category": "productivity", "icon": "list" }, { "id": "update_status", "title": "Update issue status", "prompt": "Move an issue to a different status (To Do, In Progress, Done, etc.).", "category": "productivity", "icon": "check" }], "suggestedWith": ["github", "slack", "confluence"] },
19
19
  { "name": "linear", "displayName": "Linear", "icon": "linear.svg", "description": "Search, create, and manage Linear issues and projects", "auth": { "type": "oauth2", "provider": "linear", "authorizationUrl": "https://linear.app/oauth/authorize", "tokenUrl": "https://api.linear.app/oauth/token", "scopes": ["read", "write"], "tokenAuthMethod": "basic", "requiredApis": [{ "name": "Linear OAuth Application", "enableUrl": "https://linear.app/settings/api" }] }, "envVars": [{ "name": "LINEAR_CLIENT_ID", "description": "Linear OAuth Client ID (from your OAuth application)", "required": true, "sensitive": false, "docsUrl": "https://linear.app/settings/api" }, { "name": "LINEAR_CLIENT_SECRET", "description": "Linear OAuth Client Secret", "required": true, "sensitive": true, "docsUrl": "https://linear.app/settings/api" }], "tools": [{ "id": "search_issues", "name": "Search Issues", "description": "Search for Linear issues by title or description", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($query: String!, $first: Int) { issueSearch(query: $query, first: $first) { nodes { id identifier title description state { name } assignee { name } priority priorityLabel createdAt updatedAt } } }", "params": { "query": { "type": "string", "in": "body", "description": "Search query text", "required": true }, "first": { "type": "number", "in": "body", "description": "Max results", "default": 20 } }, "response": { "transform": "issueSearch" } } }, { "id": "get_issue", "name": "Get Issue", "description": "Get detailed information about a specific Linear issue", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($id: String!) { issue(id: $id) { id identifier title description state { name } assignee { name email } priority priorityLabel team { name } project { name } labels { nodes { name } } comments { nodes { body user { name } createdAt } } createdAt updatedAt } }", "params": { "id": { "type": "string", "in": "body", "description": "Issue ID or identifier (e.g. ENG-123)", "required": true } }, "response": { "transform": "issue" } } }, { "id": "create_issue", "name": "Create Issue", "description": "Create a new Linear issue in a team", "requiresWrite": true, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "mutation($teamId: String!, $title: String!, $description: String, $priority: Int) { issueCreate(input: { teamId: $teamId, title: $title, description: $description, priority: $priority }) { success issue { id identifier title url } } }", "params": { "teamId": { "type": "string", "in": "body", "description": "Team ID", "required": true }, "title": { "type": "string", "in": "body", "description": "Issue title", "required": true }, "description": { "type": "string", "in": "body", "description": "Issue description (markdown)" }, "priority": { "type": "number", "in": "body", "description": "Priority (0=none, 1=urgent, 2=high, 3=medium, 4=low)" } }, "response": { "transform": "issueCreate" } } }, { "id": "update_issue", "name": "Update Issue", "description": "Update the status, assignee, or other properties of an issue", "requiresWrite": true, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "mutation($id: String!, $stateId: String, $assigneeId: String, $priority: Int) { issueUpdate(id: $id, input: { stateId: $stateId, assigneeId: $assigneeId, priority: $priority }) { success issue { id identifier title state { name } assignee { name } } } }", "params": { "id": { "type": "string", "in": "body", "description": "Issue ID", "required": true }, "stateId": { "type": "string", "in": "body", "description": "New state ID" }, "assigneeId": { "type": "string", "in": "body", "description": "New assignee user ID" }, "priority": { "type": "number", "in": "body", "description": "New priority" } }, "response": { "transform": "issueUpdate" } } }, { "id": "list_projects", "name": "List Projects", "description": "List all projects in the workspace", "requiresWrite": false, "endpoint": { "type": "graphql", "method": "POST", "url": "https://api.linear.app/graphql", "query": "query($first: Int) { projects(first: $first) { nodes { id name description state startDate targetDate lead { name } teams { nodes { name } } } } }", "params": { "first": { "type": "number", "in": "body", "description": "Max results", "default": 50 } }, "response": { "transform": "projects" } } }], "prompts": [{ "id": "find_issues", "title": "Find my issues", "prompt": "Search for Linear issues assigned to me or related to a specific topic.", "category": "productivity", "icon": "search" }, { "id": "create_bug_report", "title": "Create bug report", "prompt": "Create a new bug report in Linear with title, description, and relevant labels.", "category": "productivity", "icon": "plus" }, { "id": "update_issue_status", "title": "Update issue status", "prompt": "Update the status of a Linear issue (e.g., mark as done, in progress, blocked).", "category": "productivity", "icon": "check" }, { "id": "project_overview", "title": "Project overview", "prompt": "Get an overview of all projects in Linear, including their status and key issues.", "category": "productivity", "icon": "list" }], "suggestedWith": ["github", "slack", "figma"] },
@@ -1 +1 @@
1
- {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../../src/src/oauth/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAiBtD,eAAO,MAAM,WAAW,EAAE,kBAWzB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,kBAS5B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,kBAS1B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,kBASzB,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKjB,CAAC"}
1
+ {"version":3,"file":"google.d.ts","sourceRoot":"","sources":["../../../../src/src/oauth/providers/google.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAiBtD,eAAO,MAAM,WAAW,EAAE,kBAazB,CAAC;AAEF,eAAO,MAAM,cAAc,EAAE,kBAS5B,CAAC;AAEF,eAAO,MAAM,YAAY,EAAE,kBAS1B,CAAC;AAEF,eAAO,MAAM,WAAW,EAAE,kBASzB,CAAC;AAEF,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAKjB,CAAC"}
@@ -20,8 +20,10 @@ export const gmailConfig = {
20
20
  defaultScopes: [
21
21
  "https://www.googleapis.com/auth/gmail.readonly",
22
22
  "https://www.googleapis.com/auth/gmail.send",
23
+ "https://www.googleapis.com/auth/gmail.modify",
23
24
  "https://www.googleapis.com/auth/gmail.compose",
24
25
  "https://www.googleapis.com/auth/gmail.labels",
26
+ "https://mail.google.com/",
25
27
  ],
26
28
  };
27
29
  export const calendarConfig = {
@@ -1,2 +1,2 @@
1
- export declare const VERSION = "0.1.355";
1
+ export declare const VERSION = "0.1.357";
2
2
  //# sourceMappingURL=version-constant.d.ts.map
@@ -1,3 +1,3 @@
1
1
  // Keep in sync with deno.json version.
2
2
  // scripts/release.ts updates this constant during releases.
3
- export const VERSION = "0.1.355";
3
+ export const VERSION = "0.1.357";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "veryfront",
3
- "version": "0.1.355",
3
+ "version": "0.1.357",
4
4
  "description": "The simplest way to build AI-powered apps",
5
5
  "keywords": [
6
6
  "react",