feat(ai-chat): add navigation menu item + webhook tool providers (#20759)

## Summary

Exposes two Twenty primitives to the AI chat that it could not
previously manage:

- **Navigation menu items** — workspace nav and personal favorites
(favorites are just nav items with `scope: 'user'`).
- **Webhooks** — full CRUD with a structured operations input (record +
metadata events).

Page layouts and workflow runs were originally in this PR but have been
split out — they touch heavier surfaces (21 widget configurations and
the workflow runner cycle, respectively) and deserve their own focused
PRs.

### Tool inventory (8 new tools across 2 providers)

| Provider | Tools |
|---|---|
| NavigationMenuItem | `list_`, `create_`, `update_`,
`delete_navigation_menu_item` |
| Webhook | `list_`, `create_`, `update_`, `delete_webhook` |

### Design notes

- Both providers follow the established **view-style pattern**: tool
workspace service lives in the entity module's `tools/` folder, is
provided + exported by the entity module, and `ToolProviderModule`
imports the entity module. No `@Global()` modules or injection tokens
introduced.
- `create_navigation_menu_item` uses a Zod `discriminatedUnion` on
`type` (`FOLDER` / `LINK` / `OBJECT` / `VIEW` / `RECORD` /
`PAGE_LAYOUT`). `scope: 'workspace' | 'user'` switches between shared
nav and personal favorites — the underlying
`NavigationMenuItemAccessService` enforces LAYOUTS for workspace writes.
- Webhook operations accept both record events (`{kind:'record', object,
event}` → `<object>.<event>`) and metadata events (`{kind:'metadata',
metadataName, operation}` → `metadata.<metadataName>.<operation>`).
- Permissions reuse existing flags (`LAYOUTS`, `API_KEYS_AND_WEBHOOKS`).
No new permission flags, no migrations.

### Category cleanup

- New: `ToolCategory.NAVIGATION_MENU_ITEM`, `ToolCategory.WEBHOOK`.
- `ToolCategory.VIEW_FIELD` → folded into `VIEW`. Same permission gate,
same domain — separate category was organizational drift.
- `navigate_app` action stays in `ToolCategory.ACTION` where it belongs.

### System prompt addition


[chat-system-prompts.const.ts](packages/twenty-server/src/engine/metadata-modules/ai/ai-chat/constants/chat-system-prompts.const.ts)
now teaches the AI:
- Favorites are nav items with `scope: 'user'`.
- A default OBJECT nav item is auto-created with
`create_object_metadata` — don't double-create.

### One file = one export

Every new schema / type / util file has exactly one top-level export.

## Test plan

- [ ] `npx nx typecheck twenty-server` — passes
- [ ] Spin up locally and exercise via AI chat:
- [ ] "Pin the Companies view to my favorites in a folder called
Important." → `create_navigation_menu_item` (FOLDER, user) then (VIEW,
user, folderId)
- [ ] "Register a webhook to https://example.com firing when any person
is created or updated." → `create_webhook` with discriminated operations
- [ ] Verify workspace-scoped nav writes are denied for a user without
LAYOUTS permission
- [ ] Verify user-scoped nav writes work without LAYOUTS permission

## Follow-ups (separate PRs)

- Page layout tools (record-page, record-index, standalone) — needs
widget-config strategy.
- Workflow run tools (list, get, run, stop) — uses the workflow-runner
cycle path.
- Dashboard / page-layout tool unification —
`DashboardToolWorkspaceService` and a future
`PageLayoutToolWorkspaceService` both inject the same trio
(PageLayout/Tab/Widget services).
- Webhook Settings page reads from raw Apollo query — switch to the
metadata store so it refreshes when the AI mutates webhooks.
This commit is contained in:
Félix Malfait
2026-05-22 17:27:06 +02:00
committed by GitHub
parent e3c79c803c
commit de044f4b45
31 changed files with 1323 additions and 378 deletions
@@ -2476,6 +2476,18 @@ type ImapSmtpCaldavConnectionSuccess {
connectedAccountId: String!
}
type Webhook {
id: UUID!
targetUrl: String!
operations: [String!]!
description: String
secret: String!
applicationId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
}
type ToolIndexEntry {
name: String!
description: String!
@@ -2902,18 +2914,6 @@ type MinimalMetadata {
collectionHashes: [CollectionHash!]!
}
type Webhook {
id: UUID!
targetUrl: String!
operations: [String!]!
description: String
secret: String!
applicationId: UUID!
createdAt: DateTime!
updatedAt: DateTime!
deletedAt: DateTime
}
type Query {
navigationMenuItems: [NavigationMenuItem!]!
navigationMenuItem(id: UUID!): NavigationMenuItem
@@ -2982,6 +2982,8 @@ type Query {
getRoles: [Role!]!
getToolIndex: [ToolIndexEntry!]!
getToolInputSchema(toolName: String!): JSON
webhooks: [Webhook!]!
webhook(id: UUID!): Webhook
field(
"""The id of the record to find."""
id: UUID!
@@ -2999,8 +3001,6 @@ type Query {
myMessageChannels(connectedAccountId: UUID): [MessageChannel!]!
myConnectedAccounts: [ConnectedAccountPublicDTO!]!
myCalendarChannels(connectedAccountId: UUID): [CalendarChannel!]!
webhooks: [Webhook!]!
webhook(id: UUID!): Webhook
minimalMetadata: MinimalMetadata!
chatThreads: [AgentChatThread!]!
chatThread(id: UUID!): AgentChatThread!
@@ -3222,6 +3222,9 @@ type Mutation {
upsertRowLevelPermissionPredicates(input: UpsertRowLevelPermissionPredicatesInput!): UpsertRowLevelPermissionPredicatesResult!
assignRoleToAgent(agentId: UUID!, roleId: UUID!): Boolean!
removeRoleFromAgent(agentId: UUID!): Boolean!
createWebhook(input: CreateWebhookInput!): Webhook!
updateWebhook(input: UpdateWebhookInput!): Webhook!
deleteWebhook(id: UUID!): Webhook!
createOneField(input: CreateOneFieldMetadataInput!): Field!
updateOneField(input: UpdateOneFieldMetadataInput!): Field!
deleteOneField(input: DeleteOneFieldInput!): Field!
@@ -3238,9 +3241,6 @@ type Mutation {
deleteEmailGroupChannel(id: UUID!): MessageChannel!
deleteConnectedAccount(id: UUID!): ConnectedAccountPublicDTO!
updateCalendarChannel(input: UpdateCalendarChannelInput!): CalendarChannel!
createWebhook(input: CreateWebhookInput!): Webhook!
updateWebhook(input: UpdateWebhookInput!): Webhook!
deleteWebhook(id: UUID!): Webhook!
createChatThread: AgentChatThread!
sendChatMessage(threadId: UUID!, text: String!, messageId: UUID!, browsingContext: JSON, modelId: String, fileAttachments: [FileAttachmentInput!]): SendChatMessageResult!
stopAgentChatStream(threadId: UUID!): Boolean!
@@ -4047,6 +4047,29 @@ input RowLevelPermissionPredicateGroupInput {
positionInRowLevelPermissionPredicateGroup: Float
}
input CreateWebhookInput {
id: UUID
targetUrl: String!
operations: [String!]!
description: String
secret: String
}
input UpdateWebhookInput {
"""The id of the webhook to update"""
id: UUID!
"""The webhook fields to update"""
update: UpdateWebhookInputUpdates!
}
input UpdateWebhookInputUpdates {
targetUrl: String
operations: [String!]
description: String
secret: String
}
input CreateOneFieldMetadataInput {
"""The record to create"""
field: CreateFieldInput!
@@ -4184,29 +4207,6 @@ input UpdateCalendarChannelInputUpdates {
isSyncEnabled: Boolean
}
input CreateWebhookInput {
id: UUID
targetUrl: String!
operations: [String!]!
description: String
secret: String
}
input UpdateWebhookInput {
"""The id of the webhook to update"""
id: UUID!
"""The webhook fields to update"""
update: UpdateWebhookInputUpdates!
}
input UpdateWebhookInputUpdates {
targetUrl: String
operations: [String!]
description: String
secret: String
}
input FileAttachmentInput {
id: UUID!
filename: String!
@@ -2160,6 +2160,19 @@ export interface ImapSmtpCaldavConnectionSuccess {
__typename: 'ImapSmtpCaldavConnectionSuccess'
}
export interface Webhook {
id: Scalars['UUID']
targetUrl: Scalars['String']
operations: Scalars['String'][]
description?: Scalars['String']
secret: Scalars['String']
applicationId: Scalars['UUID']
createdAt: Scalars['DateTime']
updatedAt: Scalars['DateTime']
deletedAt?: Scalars['DateTime']
__typename: 'Webhook'
}
export interface ToolIndexEntry {
name: Scalars['String']
description: Scalars['String']
@@ -2528,19 +2541,6 @@ export interface MinimalMetadata {
__typename: 'MinimalMetadata'
}
export interface Webhook {
id: Scalars['UUID']
targetUrl: Scalars['String']
operations: Scalars['String'][]
description?: Scalars['String']
secret: Scalars['String']
applicationId: Scalars['UUID']
createdAt: Scalars['DateTime']
updatedAt: Scalars['DateTime']
deletedAt?: Scalars['DateTime']
__typename: 'Webhook'
}
export interface Query {
navigationMenuItems: NavigationMenuItem[]
navigationMenuItem?: NavigationMenuItem
@@ -2591,6 +2591,8 @@ export interface Query {
getRoles: Role[]
getToolIndex: ToolIndexEntry[]
getToolInputSchema?: Scalars['JSON']
webhooks: Webhook[]
webhook?: Webhook
field: Field
fields: FieldConnection
getViewGroups: ViewGroup[]
@@ -2599,8 +2601,6 @@ export interface Query {
myMessageChannels: MessageChannel[]
myConnectedAccounts: ConnectedAccountPublicDTO[]
myCalendarChannels: CalendarChannel[]
webhooks: Webhook[]
webhook?: Webhook
minimalMetadata: MinimalMetadata
chatThreads: AgentChatThread[]
chatThread: AgentChatThread
@@ -2755,6 +2755,9 @@ export interface Mutation {
upsertRowLevelPermissionPredicates: UpsertRowLevelPermissionPredicatesResult
assignRoleToAgent: Scalars['Boolean']
removeRoleFromAgent: Scalars['Boolean']
createWebhook: Webhook
updateWebhook: Webhook
deleteWebhook: Webhook
createOneField: Field
updateOneField: Field
deleteOneField: Field
@@ -2771,9 +2774,6 @@ export interface Mutation {
deleteEmailGroupChannel: MessageChannel
deleteConnectedAccount: ConnectedAccountPublicDTO
updateCalendarChannel: CalendarChannel
createWebhook: Webhook
updateWebhook: Webhook
deleteWebhook: Webhook
createChatThread: AgentChatThread
sendChatMessage: SendChatMessageResult
stopAgentChatStream: Scalars['Boolean']
@@ -5166,6 +5166,20 @@ export interface ImapSmtpCaldavConnectionSuccessGenqlSelection{
__scalar?: boolean | number
}
export interface WebhookGenqlSelection{
id?: boolean | number
targetUrl?: boolean | number
operations?: boolean | number
description?: boolean | number
secret?: boolean | number
applicationId?: boolean | number
createdAt?: boolean | number
updatedAt?: boolean | number
deletedAt?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface ToolIndexEntryGenqlSelection{
name?: boolean | number
description?: boolean | number
@@ -5541,20 +5555,6 @@ export interface MinimalMetadataGenqlSelection{
__scalar?: boolean | number
}
export interface WebhookGenqlSelection{
id?: boolean | number
targetUrl?: boolean | number
operations?: boolean | number
description?: boolean | number
secret?: boolean | number
applicationId?: boolean | number
createdAt?: boolean | number
updatedAt?: boolean | number
deletedAt?: boolean | number
__typename?: boolean | number
__scalar?: boolean | number
}
export interface QueryGenqlSelection{
navigationMenuItems?: NavigationMenuItemGenqlSelection
navigationMenuItem?: (NavigationMenuItemGenqlSelection & { __args: {id: Scalars['UUID']} })
@@ -5617,6 +5617,8 @@ export interface QueryGenqlSelection{
getRoles?: RoleGenqlSelection
getToolIndex?: ToolIndexEntryGenqlSelection
getToolInputSchema?: { __args: {toolName: Scalars['String']} }
webhooks?: WebhookGenqlSelection
webhook?: (WebhookGenqlSelection & { __args: {id: Scalars['UUID']} })
field?: (FieldGenqlSelection & { __args: {
/** The id of the record to find. */
id: Scalars['UUID']} })
@@ -5631,8 +5633,6 @@ export interface QueryGenqlSelection{
myMessageChannels?: (MessageChannelGenqlSelection & { __args?: {connectedAccountId?: (Scalars['UUID'] | null)} })
myConnectedAccounts?: ConnectedAccountPublicDTOGenqlSelection
myCalendarChannels?: (CalendarChannelGenqlSelection & { __args?: {connectedAccountId?: (Scalars['UUID'] | null)} })
webhooks?: WebhookGenqlSelection
webhook?: (WebhookGenqlSelection & { __args: {id: Scalars['UUID']} })
minimalMetadata?: MinimalMetadataGenqlSelection
chatThreads?: AgentChatThreadGenqlSelection
chatThread?: (AgentChatThreadGenqlSelection & { __args: {id: Scalars['UUID']} })
@@ -5808,6 +5808,9 @@ export interface MutationGenqlSelection{
upsertRowLevelPermissionPredicates?: (UpsertRowLevelPermissionPredicatesResultGenqlSelection & { __args: {input: UpsertRowLevelPermissionPredicatesInput} })
assignRoleToAgent?: { __args: {agentId: Scalars['UUID'], roleId: Scalars['UUID']} }
removeRoleFromAgent?: { __args: {agentId: Scalars['UUID']} }
createWebhook?: (WebhookGenqlSelection & { __args: {input: CreateWebhookInput} })
updateWebhook?: (WebhookGenqlSelection & { __args: {input: UpdateWebhookInput} })
deleteWebhook?: (WebhookGenqlSelection & { __args: {id: Scalars['UUID']} })
createOneField?: (FieldGenqlSelection & { __args: {input: CreateOneFieldMetadataInput} })
updateOneField?: (FieldGenqlSelection & { __args: {input: UpdateOneFieldMetadataInput} })
deleteOneField?: (FieldGenqlSelection & { __args: {input: DeleteOneFieldInput} })
@@ -5824,9 +5827,6 @@ export interface MutationGenqlSelection{
deleteEmailGroupChannel?: (MessageChannelGenqlSelection & { __args: {id: Scalars['UUID']} })
deleteConnectedAccount?: (ConnectedAccountPublicDTOGenqlSelection & { __args: {id: Scalars['UUID']} })
updateCalendarChannel?: (CalendarChannelGenqlSelection & { __args: {input: UpdateCalendarChannelInput} })
createWebhook?: (WebhookGenqlSelection & { __args: {input: CreateWebhookInput} })
updateWebhook?: (WebhookGenqlSelection & { __args: {input: UpdateWebhookInput} })
deleteWebhook?: (WebhookGenqlSelection & { __args: {id: Scalars['UUID']} })
createChatThread?: AgentChatThreadGenqlSelection
sendChatMessage?: (SendChatMessageResultGenqlSelection & { __args: {threadId: Scalars['UUID'], text: Scalars['String'], messageId: Scalars['UUID'], browsingContext?: (Scalars['JSON'] | null), modelId?: (Scalars['String'] | null), fileAttachments?: (FileAttachmentInput[] | null)} })
stopAgentChatStream?: { __args: {threadId: Scalars['UUID']} }
@@ -6154,6 +6154,16 @@ export interface RowLevelPermissionPredicateInput {id?: (Scalars['UUID'] | null)
export interface RowLevelPermissionPredicateGroupInput {id?: (Scalars['UUID'] | null),objectMetadataId: Scalars['UUID'],parentRowLevelPermissionPredicateGroupId?: (Scalars['UUID'] | null),logicalOperator: RowLevelPermissionPredicateGroupLogicalOperator,positionInRowLevelPermissionPredicateGroup?: (Scalars['Float'] | null)}
export interface CreateWebhookInput {id?: (Scalars['UUID'] | null),targetUrl: Scalars['String'],operations: Scalars['String'][],description?: (Scalars['String'] | null),secret?: (Scalars['String'] | null)}
export interface UpdateWebhookInput {
/** The id of the webhook to update */
id: Scalars['UUID'],
/** The webhook fields to update */
update: UpdateWebhookInputUpdates}
export interface UpdateWebhookInputUpdates {targetUrl?: (Scalars['String'] | null),operations?: (Scalars['String'][] | null),description?: (Scalars['String'] | null),secret?: (Scalars['String'] | null)}
export interface CreateOneFieldMetadataInput {
/** The record to create */
field: CreateFieldInput}
@@ -6206,16 +6216,6 @@ export interface UpdateCalendarChannelInput {id: Scalars['UUID'],update: UpdateC
export interface UpdateCalendarChannelInputUpdates {visibility?: (CalendarChannelVisibility | null),isContactAutoCreationEnabled?: (Scalars['Boolean'] | null),contactAutoCreationPolicy?: (CalendarChannelContactAutoCreationPolicy | null),isSyncEnabled?: (Scalars['Boolean'] | null)}
export interface CreateWebhookInput {id?: (Scalars['UUID'] | null),targetUrl: Scalars['String'],operations: Scalars['String'][],description?: (Scalars['String'] | null),secret?: (Scalars['String'] | null)}
export interface UpdateWebhookInput {
/** The id of the webhook to update */
id: Scalars['UUID'],
/** The webhook fields to update */
update: UpdateWebhookInputUpdates}
export interface UpdateWebhookInputUpdates {targetUrl?: (Scalars['String'] | null),operations?: (Scalars['String'][] | null),description?: (Scalars['String'] | null),secret?: (Scalars['String'] | null)}
export interface FileAttachmentInput {id: Scalars['UUID'],filename: Scalars['String']}
export interface CreateSkillInput {id?: (Scalars['UUID'] | null),name: Scalars['String'],label: Scalars['String'],icon?: (Scalars['String'] | null),description?: (Scalars['String'] | null),content: Scalars['String']}
@@ -7937,6 +7937,14 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const Webhook_possibleTypes: string[] = ['Webhook']
export const isWebhook = (obj?: { __typename?: any } | null): obj is Webhook => {
if (!obj?.__typename) throw new Error('__typename is missing in "isWebhook"')
return Webhook_possibleTypes.includes(obj.__typename)
}
const ToolIndexEntry_possibleTypes: string[] = ['ToolIndexEntry']
export const isToolIndexEntry = (obj?: { __typename?: any } | null): obj is ToolIndexEntry => {
if (!obj?.__typename) throw new Error('__typename is missing in "isToolIndexEntry"')
@@ -8201,14 +8209,6 @@ export interface LogicFunctionLogsInput {applicationId?: (Scalars['UUID'] | null
const Webhook_possibleTypes: string[] = ['Webhook']
export const isWebhook = (obj?: { __typename?: any } | null): obj is Webhook => {
if (!obj?.__typename) throw new Error('__typename is missing in "isWebhook"')
return Webhook_possibleTypes.includes(obj.__typename)
}
const Query_possibleTypes: string[] = ['Query']
export const isQuery = (obj?: { __typename?: any } | null): obj is Query => {
if (!obj?.__typename) throw new Error('__typename is missing in "isQuery"')
@@ -60,20 +60,20 @@ export default {
226,
262,
263,
292,
301,
293,
302,
303,
304,
306,
305,
307,
308,
309,
310,
311,
312,
315,
317,
313,
316,
318,
327,
334,
341,
@@ -4912,6 +4912,38 @@ export default {
1
]
},
"Webhook": {
"id": [
3
],
"targetUrl": [
1
],
"operations": [
1
],
"description": [
1
],
"secret": [
1
],
"applicationId": [
3
],
"createdAt": [
4
],
"updatedAt": [
4
],
"deletedAt": [
4
],
"__typename": [
1
]
},
"ToolIndexEntry": {
"name": [
1
@@ -5051,7 +5083,7 @@ export default {
1
],
"series": [
277
278
],
"xAxisLabel": [
1
@@ -5100,7 +5132,7 @@ export default {
1
],
"data": [
279
280
],
"__typename": [
1
@@ -5108,7 +5140,7 @@ export default {
},
"LineChartData": {
"series": [
280
281
],
"xAxisLabel": [
1
@@ -5145,7 +5177,7 @@ export default {
},
"PieChartData": {
"data": [
282
283
],
"showLegend": [
6
@@ -5239,13 +5271,13 @@ export default {
},
"EventLogQueryResult": {
"records": [
286
287
],
"totalCount": [
21
],
"pageInfo": [
287
288
],
"__typename": [
1
@@ -5309,7 +5341,7 @@ export default {
1
],
"parts": [
275
276
],
"processedAt": [
4
@@ -5323,7 +5355,7 @@ export default {
},
"AgentChatThread": {
"id": [
292
293
],
"title": [
1
@@ -5379,7 +5411,7 @@ export default {
},
"AiSystemPromptPreview": {
"sections": [
293
294
],
"estimatedTokenCount": [
21
@@ -5455,10 +5487,10 @@ export default {
3
],
"evaluations": [
298
299
],
"messages": [
290
291
],
"createdAt": [
4
@@ -5475,19 +5507,19 @@ export default {
1
],
"syncStatus": [
301
],
"syncStage": [
302
],
"visibility": [
"syncStage": [
303
],
"visibility": [
304
],
"isContactAutoCreationEnabled": [
6
],
"contactAutoCreationPolicy": [
304
305
],
"isSyncEnabled": [
6
@@ -5523,22 +5555,22 @@ export default {
3
],
"visibility": [
306
307
],
"handle": [
1
],
"type": [
307
308
],
"isContactAutoCreationEnabled": [
6
],
"contactAutoCreationPolicy": [
308
309
],
"messageFolderImportPolicy": [
309
310
],
"excludeNonProfessionalEmails": [
6
@@ -5547,7 +5579,7 @@ export default {
6
],
"pendingGroupEmailsAction": [
310
311
],
"isSyncEnabled": [
6
@@ -5556,10 +5588,10 @@ export default {
4
],
"syncStatus": [
311
312
],
"syncStage": [
312
313
],
"syncStageStartedAt": [
4
@@ -5595,7 +5627,7 @@ export default {
"MessageChannelSyncStage": {},
"CreateEmailGroupChannelOutput": {
"messageChannel": [
305
306
],
"forwardingAddress": [
1
@@ -5624,7 +5656,7 @@ export default {
1
],
"pendingSyncAction": [
315
316
],
"messageChannelId": [
3
@@ -5642,7 +5674,7 @@ export default {
"MessageFolderPendingSyncAction": {},
"CollectionHash": {
"collectionName": [
317
318
],
"hash": [
1
@@ -5709,45 +5741,13 @@ export default {
},
"MinimalMetadata": {
"objectMetadataItems": [
318
],
"views": [
319
],
"views": [
320
],
"collectionHashes": [
316
],
"__typename": [
1
]
},
"Webhook": {
"id": [
3
],
"targetUrl": [
1
],
"operations": [
1
],
"description": [
1
],
"secret": [
1
],
"applicationId": [
3
],
"createdAt": [
4
],
"updatedAt": [
4
],
"deletedAt": [
4
317
],
"__typename": [
1
@@ -6107,7 +6107,7 @@ export default {
29
],
"getToolIndex": [
274
275
],
"getToolInputSchema": [
15,
@@ -6118,6 +6118,18 @@ export default {
]
}
],
"webhooks": [
274
],
"webhook": [
274,
{
"id": [
3,
"UUID!"
]
}
],
"field": [
43,
{
@@ -6158,7 +6170,7 @@ export default {
}
],
"myMessageFolders": [
314,
315,
{
"messageChannelId": [
3
@@ -6166,7 +6178,7 @@ export default {
}
],
"myMessageChannels": [
305,
306,
{
"connectedAccountId": [
3
@@ -6177,33 +6189,21 @@ export default {
269
],
"myCalendarChannels": [
300,
301,
{
"connectedAccountId": [
3
]
}
],
"webhooks": [
"minimalMetadata": [
321
],
"webhook": [
321,
{
"id": [
3,
"UUID!"
]
}
],
"minimalMetadata": [
320
],
"chatThreads": [
291
292
],
"chatThread": [
291,
292,
{
"id": [
3,
@@ -6212,7 +6212,7 @@ export default {
}
],
"chatMessages": [
290,
291,
{
"threadId": [
3,
@@ -6221,7 +6221,7 @@ export default {
}
],
"chatStreamCatchupChunks": [
295,
296,
{
"threadId": [
3,
@@ -6230,13 +6230,13 @@ export default {
}
],
"getAiSystemPromptPreview": [
294
295
],
"skills": [
289
290
],
"skill": [
289,
290,
{
"id": [
3,
@@ -6245,7 +6245,7 @@ export default {
}
],
"agentTurns": [
299,
300,
{
"agentId": [
3,
@@ -6390,7 +6390,7 @@ export default {
219
],
"eventLogs": [
288,
289,
{
"input": [
326,
@@ -6399,7 +6399,7 @@ export default {
}
],
"pieChartData": [
283,
284,
{
"input": [
330,
@@ -6408,7 +6408,7 @@ export default {
}
],
"lineChartData": [
281,
282,
{
"input": [
331,
@@ -6417,7 +6417,7 @@ export default {
}
],
"barChartData": [
278,
279,
{
"input": [
332,
@@ -6506,7 +6506,7 @@ export default {
},
"LogicFunctionIdInput": {
"id": [
292
293
],
"__typename": [
1
@@ -7616,11 +7616,38 @@ export default {
]
}
],
"createWebhook": [
274,
{
"input": [
418,
"CreateWebhookInput!"
]
}
],
"updateWebhook": [
274,
{
"input": [
419,
"UpdateWebhookInput!"
]
}
],
"deleteWebhook": [
274,
{
"id": [
3,
"UUID!"
]
}
],
"createOneField": [
43,
{
"input": [
418,
421,
"CreateOneFieldMetadataInput!"
]
}
@@ -7629,7 +7656,7 @@ export default {
43,
{
"input": [
420,
423,
"UpdateOneFieldMetadataInput!"
]
}
@@ -7638,7 +7665,7 @@ export default {
43,
{
"input": [
422,
425,
"DeleteOneFieldInput!"
]
}
@@ -7647,7 +7674,7 @@ export default {
65,
{
"input": [
423,
426,
"CreateViewGroupInput!"
]
}
@@ -7656,7 +7683,7 @@ export default {
65,
{
"inputs": [
423,
426,
"[CreateViewGroupInput!]!"
]
}
@@ -7665,7 +7692,7 @@ export default {
65,
{
"input": [
424,
427,
"UpdateViewGroupInput!"
]
}
@@ -7674,7 +7701,7 @@ export default {
65,
{
"inputs": [
424,
427,
"[UpdateViewGroupInput!]!"
]
}
@@ -7683,7 +7710,7 @@ export default {
65,
{
"input": [
426,
429,
"DeleteViewGroupInput!"
]
}
@@ -7692,49 +7719,49 @@ export default {
65,
{
"input": [
427,
430,
"DestroyViewGroupInput!"
]
}
],
"updateMessageFolder": [
314,
315,
{
"input": [
428,
431,
"UpdateMessageFolderInput!"
]
}
],
"updateMessageFolders": [
314,
315,
{
"input": [
430,
433,
"UpdateMessageFoldersInput!"
]
}
],
"updateMessageChannel": [
305,
306,
{
"input": [
431,
434,
"UpdateMessageChannelInput!"
]
}
],
"createEmailGroupChannel": [
313,
314,
{
"input": [
433,
436,
"CreateEmailGroupChannelInput!"
]
}
],
"deleteEmailGroupChannel": [
305,
306,
{
"id": [
3,
@@ -7752,46 +7779,19 @@ export default {
}
],
"updateCalendarChannel": [
300,
301,
{
"input": [
434,
437,
"UpdateCalendarChannelInput!"
]
}
],
"createWebhook": [
321,
{
"input": [
436,
"CreateWebhookInput!"
]
}
],
"updateWebhook": [
321,
{
"input": [
437,
"UpdateWebhookInput!"
]
}
],
"deleteWebhook": [
321,
{
"id": [
3,
"UUID!"
]
}
],
"createChatThread": [
291
292
],
"sendChatMessage": [
296,
297,
{
"threadId": [
3,
@@ -7827,7 +7827,7 @@ export default {
}
],
"renameChatThread": [
291,
292,
{
"id": [
3,
@@ -7840,7 +7840,7 @@ export default {
}
],
"archiveChatThread": [
291,
292,
{
"id": [
3,
@@ -7849,7 +7849,7 @@ export default {
}
],
"unarchiveChatThread": [
291,
292,
{
"id": [
3,
@@ -7876,7 +7876,7 @@ export default {
}
],
"createSkill": [
289,
290,
{
"input": [
440,
@@ -7885,7 +7885,7 @@ export default {
}
],
"updateSkill": [
289,
290,
{
"input": [
441,
@@ -7894,7 +7894,7 @@ export default {
}
],
"deleteSkill": [
289,
290,
{
"id": [
3,
@@ -7903,7 +7903,7 @@ export default {
}
],
"activateSkill": [
289,
290,
{
"id": [
3,
@@ -7912,7 +7912,7 @@ export default {
}
],
"deactivateSkill": [
289,
290,
{
"id": [
3,
@@ -7921,7 +7921,7 @@ export default {
}
],
"evaluateAgentTurn": [
298,
299,
{
"turnId": [
3,
@@ -7930,7 +7930,7 @@ export default {
}
],
"runEvaluationInput": [
299,
300,
{
"agentId": [
3,
@@ -8443,7 +8443,7 @@ export default {
}
],
"duplicateDashboard": [
284,
285,
{
"id": [
3,
@@ -8465,7 +8465,7 @@ export default {
}
],
"sendEmail": [
285,
286,
{
"input": [
459,
@@ -8474,7 +8474,7 @@ export default {
}
],
"startChannelSync": [
276,
277,
{
"connectedAccountId": [
3,
@@ -10320,9 +10320,57 @@ export default {
1
]
},
"CreateWebhookInput": {
"id": [
3
],
"targetUrl": [
1
],
"operations": [
1
],
"description": [
1
],
"secret": [
1
],
"__typename": [
1
]
},
"UpdateWebhookInput": {
"id": [
3
],
"update": [
420
],
"__typename": [
1
]
},
"UpdateWebhookInputUpdates": {
"targetUrl": [
1
],
"operations": [
1
],
"description": [
1
],
"secret": [
1
],
"__typename": [
1
]
},
"CreateOneFieldMetadataInput": {
"field": [
419
422
],
"__typename": [
1
@@ -10395,7 +10443,7 @@ export default {
3
],
"update": [
421
424
],
"__typename": [
1
@@ -10487,7 +10535,7 @@ export default {
3
],
"update": [
425
428
],
"__typename": [
1
@@ -10531,7 +10579,7 @@ export default {
3
],
"update": [
429
432
],
"__typename": [
1
@@ -10550,7 +10598,7 @@ export default {
3
],
"update": [
429
432
],
"__typename": [
1
@@ -10561,7 +10609,7 @@ export default {
3
],
"update": [
432
435
],
"__typename": [
1
@@ -10569,16 +10617,16 @@ export default {
},
"UpdateMessageChannelInputUpdates": {
"visibility": [
306
307
],
"isContactAutoCreationEnabled": [
6
],
"contactAutoCreationPolicy": [
308
309
],
"messageFolderImportPolicy": [
309
310
],
"isSyncEnabled": [
6
@@ -10606,7 +10654,7 @@ export default {
3
],
"update": [
435
438
],
"__typename": [
1
@@ -10614,13 +10662,13 @@ export default {
},
"UpdateCalendarChannelInputUpdates": {
"visibility": [
303
304
],
"isContactAutoCreationEnabled": [
6
],
"contactAutoCreationPolicy": [
304
305
],
"isSyncEnabled": [
6
@@ -10629,54 +10677,6 @@ export default {
1
]
},
"CreateWebhookInput": {
"id": [
3
],
"targetUrl": [
1
],
"operations": [
1
],
"description": [
1
],
"secret": [
1
],
"__typename": [
1
]
},
"UpdateWebhookInput": {
"id": [
3
],
"update": [
438
],
"__typename": [
1
]
},
"UpdateWebhookInputUpdates": {
"targetUrl": [
1
],
"operations": [
1
],
"description": [
1
],
"secret": [
1
],
"__typename": [
1
]
},
"FileAttachmentInput": {
"id": [
3
@@ -10947,7 +10947,7 @@ export default {
454
],
"metadataName": [
317
318
],
"universalIdentifier": [
1
@@ -11138,7 +11138,7 @@ export default {
}
],
"onAgentChatEvent": [
297,
298,
{
"threadId": [
3,