diff --git a/src/components/templates/agent-connectors/_section-after-setup-dartai-common-workflows.mdx b/src/components/templates/agent-connectors/_section-after-setup-dartai-common-workflows.mdx new file mode 100644 index 000000000..c904b0067 --- /dev/null +++ b/src/components/templates/agent-connectors/_section-after-setup-dartai-common-workflows.mdx @@ -0,0 +1,78 @@ +{/* TODO: stub cloned from _section-after-setup-atlassianmcp-common-workflows.mdx for Dart AI MCP. Review and update connector-specific references (URLs, scopes, app-registration steps) before merging. */} +export const sectionTitle = 'Common workflows' + +import { Tabs, TabItem, Aside } from '@astrojs/starlight/components' + +### Get your cloud ID + +Most Dart AI MCP tools require a `cloudId` — the UUID that identifies your Atlassian cloud site. Call `dartai_getaccessibleatlassianresources` once to retrieve it, then pass the `id` field value in every subsequent tool call. + + + + + + ```typescript + // Step 1 — get the cloud ID + const resources = await actions.executeTool({ + connectionName: 'dartai', + identifier: 'user_123', + toolName: 'dartai_getaccessibleatlassianresources', + toolInput: {}, + }); + const cloudId = resources[0].id; + + // Step 2 — use cloudId in subsequent calls + const issue = await actions.executeTool({ + connectionName: 'dartai', + identifier: 'user_123', + toolName: 'dartai_getjiraissue', + toolInput: { + cloudId, + issueIdOrKey: 'KAN-1', + }, + }); + console.log(issue); + ``` + + + ```python + # Step 1 — get the cloud ID + resources = actions.execute_tool( + connection_name="dartai", + identifier="user_123", + tool_name="dartai_getaccessibleatlassianresources", + tool_input={}, + ) + cloud_id = resources[0]["id"] + + # Step 2 — use cloud_id in subsequent calls + issue = actions.execute_tool( + connection_name="dartai", + identifier="user_123", + tool_name="dartai_getjiraissue", + tool_input={ + "cloudId": cloud_id, + "issueIdOrKey": "KAN-1", + }, + ) + print(issue) + ``` + + + +The `dartai_getaccessibleatlassianresources` response looks like this: + +```json +[ + { + "id": "a4c9b3e2-1234-5678-abcd-ef0123456789", + "name": "My Company", + "url": "https://mycompany.atlassian.net", + "scopes": ["read:jira-work", "write:jira-work", "read:confluence-content.all"] + } +] +``` + +Use `id` as the `cloudId` parameter. If the user belongs to multiple Atlassian sites, the list contains one entry per site — pick the one matching the target `url`. diff --git a/src/components/templates/agent-connectors/_setup-dartai.mdx b/src/components/templates/agent-connectors/_setup-dartai.mdx new file mode 100644 index 000000000..cf02fba81 --- /dev/null +++ b/src/components/templates/agent-connectors/_setup-dartai.mdx @@ -0,0 +1,26 @@ +{/* TODO: stub cloned from _setup-atlassianmcp.mdx for Dart AI MCP. Review and update connector-specific references (URLs, scopes, app-registration steps) before merging. */} +import { Steps, Aside } from '@astrojs/starlight/components' + +Dart AI MCP uses OAuth 2.1 with Dynamic Client Registration (DCR) and PKCE — no client ID or secret is needed. Scalekit automatically registers an OAuth client on behalf of each user and handles token management. + + +1. ### Create a connection in Scalekit + + In the [Scalekit dashboard](https://app.scalekit.com), go to **AgentKit** > **Connections** and click **Create Connection**. Find **Dart AI MCP** in the catalog and click **Create**. + + {/* TODO: add screenshot — alt: "Create connection for Dart AI MCP in Scalekit dashboard", original src: @/assets/docs/agent-connectors/dartai/create-connection.png */} + +2. ### Authorize the connection + + Click **Authorize** on the connection detail page. Scalekit initiates the OAuth 2.1 + PKCE flow with Dynamic Client Registration. You will be redirected to Dart AI to grant access. + + {/* TODO: add provider-specific steps — describe where in Dart AI the authorization consent screen appears and what permissions are requested */} + + {/* TODO: add screenshot — alt: "Dart AI MCP OAuth consent screen", original src: @/assets/docs/agent-connectors/dartai/oauth-consent.png */} + +3. ### Verify the connection is active + + After authorizing, you are redirected back to Scalekit. The connection status should show **Active**. You can now call Dart AI tools through Scalekit AgentKit. + + {/* TODO: add screenshot — alt: "Active Dart AI MCP connection in Scalekit dashboard", original src: @/assets/docs/agent-connectors/dartai/connection-active.png */} + diff --git a/src/components/templates/agent-connectors/index.ts b/src/components/templates/agent-connectors/index.ts index ded5fb340..c996672f7 100644 --- a/src/components/templates/agent-connectors/index.ts +++ b/src/components/templates/agent-connectors/index.ts @@ -22,6 +22,7 @@ export { default as SetupCloseSection } from './_setup-close.mdx' export { default as SetupCommonroommcpSection } from './_setup-commonroommcp.mdx' export { default as SetupConfluenceSection } from './_setup-confluence.mdx' export { default as SetupCustomeriomcpSection } from './_setup-customeriomcp.mdx' +export { default as SetupDartaiSection } from './_setup-dartai.mdx' export { default as SetupDatabricksSection } from './_setup-databricks.mdx' export { default as SetupDatadogSection } from './_setup-datadog.mdx' export { default as SetupDevinmcpSection } from './_setup-devinmcp.mdx' @@ -132,6 +133,7 @@ export { default as SectionAfterSetupCloseCommonWorkflows } from './_section-aft export { default as SectionAfterSetupCommonroommcpCommonWorkflows } from './_section-after-setup-commonroommcp-common-workflows.mdx' export { default as SectionAfterSetupConfluenceCommonWorkflows } from './_section-after-setup-confluence-common-workflows.mdx' export { default as SectionAfterSetupCustomeriomcpCommonWorkflows } from './_section-after-setup-customeriomcp-common-workflows.mdx' +export { default as SectionAfterSetupDartaiCommonWorkflows } from './_section-after-setup-dartai-common-workflows.mdx' export { default as SectionAfterSetupDatabricksCommonWorkflows } from './_section-after-setup-databricks-common-workflows.mdx' export { default as SectionAfterSetupDatadogCommonWorkflows } from './_section-after-setup-datadog-common-workflows.mdx' export { default as SectionAfterSetupDiarizeCommonWorkflows } from './_section-after-setup-diarize-common-workflows.mdx' diff --git a/src/content/docs/agentkit/connectors/dartai.mdx b/src/content/docs/agentkit/connectors/dartai.mdx new file mode 100644 index 000000000..2dd1e208c --- /dev/null +++ b/src/content/docs/agentkit/connectors/dartai.mdx @@ -0,0 +1,72 @@ +--- +title: 'Dart AI MCP connector' +tableOfContents: true +description: 'AI-native project management tool for task and document management with deep AI integration.' +sidebar: + label: 'Dart AI MCP' +overviewTitle: 'Quickstart' +connectorIcon: https://cdn.scalekit.com/sk-connect/assets/provider-icons/dartai.svg +connectorAuthType: OAuth2.1/DCR +connectorCategories: [Project Management, AI, Productivity] +head: + - tag: style + content: | + .sl-markdown-content h2 { + font-size: var(--sl-text-xl); + } + .sl-markdown-content h3 { + font-size: var(--sl-text-lg); + } +--- + +import ToolList from '@/components/ToolList.astro' +import { tools } from '@/data/agent-connectors/dartai' +import { Steps, Tabs, TabItem } from '@astrojs/starlight/components' +import { AgentKitCredentials } from '@components/templates' +import { QuickstartGenericOauthSection } from '@components/templates' + + + +1. ### Install the SDK + + + + ```bash frame="terminal" + npm install @scalekit-sdk/node + ``` + + + ```bash frame="terminal" + pip install scalekit + ``` + + + + Full SDK reference: [Node.js](/agentkit/sdks/node/) | [Python](/agentkit/sdks/python/) + +2. ### Set your credentials + + + +3. ### Authorize and make your first call + + + + + +## What you can do + +Connect this agent connector to let your agent: + +- **Url add task attachment from** — Attach a file from a provided URL to a task +- **Comment add task** — Record a new comment that the user intends to add to a given task +- **Tracking add task time** — Record an additional time tracking entry on a task +- **Create agent, doc, task** — Create a new agent in the workspace with a name and optional description or instructions +- **Delete agent, doc, task** — Delete an agent by its ID +- **Get agent, config, dartboard** — Retrieve an existing agent by its ID, including its name and current description + +## Tool list + +Use the exact tool names from the **Tool list** below when you call `execute_tool`. If you're not sure which name to use, list the tools available for the current user first. + + diff --git a/src/data/agent-connectors/catalog.ts b/src/data/agent-connectors/catalog.ts index c8951b28f..4d642fbfe 100644 --- a/src/data/agent-connectors/catalog.ts +++ b/src/data/agent-connectors/catalog.ts @@ -1249,4 +1249,9 @@ export const catalog: Record = { authType: 'OAuth 2.0', categories: ['Communication'], }, + dartai: { + iconUrl: 'https://cdn.scalekit.com/sk-connect/assets/provider-icons/dartai.svg', + authType: 'OAuth2.1/DCR', + categories: ['Project Management', 'AI', 'Productivity'], + }, } diff --git a/src/data/agent-connectors/dartai.ts b/src/data/agent-connectors/dartai.ts new file mode 100644 index 000000000..e3b527252 --- /dev/null +++ b/src/data/agent-connectors/dartai.ts @@ -0,0 +1,818 @@ +import type { Tool } from '../../types/agent-connectors' + +export const tools: Tool[] = [ + { + name: 'dartai_add_task_attachment_from_url', + description: `Attach a file from a provided URL to a task.`, + params: [ + { name: 'taskDuid', type: 'string', required: true, description: `The ID of the task.` }, + { + name: 'url', + type: 'string', + required: true, + description: `The URL of the file to attach.`, + }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'name', + type: 'string', + required: false, + description: `Optional display name for the attachment.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_add_task_comment', + description: `Record a new comment that the user intends to add to a given task.`, + params: [ + { + name: 'taskDuid', + type: 'string', + required: true, + description: `The ID of the task to add a comment to.`, + }, + { name: 'text', type: 'string', required: true, description: `The comment text.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_add_task_time_tracking', + description: `Record an additional time tracking entry on a task.`, + params: [ + { + name: 'minutes', + type: 'integer', + required: true, + description: `Number of minutes to log.`, + }, + { name: 'taskDuid', type: 'string', required: true, description: `The ID of the task.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + { + name: 'startedAt', + type: 'string', + required: false, + description: `When the time tracking started.`, + }, + ], + }, + { + name: 'dartai_create_agent', + description: `Create a new agent in the workspace with a name and optional description or instructions.`, + params: [ + { + name: 'item_name', + type: 'string', + required: true, + description: `The display name of the new agent.`, + }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'item_executionMode', + type: 'string', + required: false, + description: `How the agent runs when triggered.`, + }, + { + name: 'item_forwarding_body', + type: 'string', + required: false, + description: `Custom request body template for the forwarding webhook.`, + }, + { + name: 'item_forwarding_responseKey', + type: 'string', + required: false, + description: `Key in the webhook response to extract as the agent's output.`, + }, + { + name: 'item_forwarding_url', + type: 'string', + required: false, + description: `Webhook URL to forward tasks to (used when executionMode is Forwarding).`, + }, + { + name: 'item_instructions_markdown', + type: 'string', + required: false, + description: `Markdown instructions for the agent (used when executionMode is Instructions).`, + }, + { + name: 'item_instructions_model', + type: 'string', + required: false, + description: `LLM model to use for the agent's instructions.`, + }, + { + name: 'item_instructions_thinkingLevel', + type: 'string', + required: false, + description: `Thinking depth level for the agent's LLM.`, + }, + { + name: 'item_instructions_webEnabled', + type: 'boolean', + required: false, + description: `Whether the agent can browse the web.`, + }, + { + name: 'item_local_agent', + type: 'string', + required: false, + description: `Local CLI agent to use when executionMode is Local.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_create_doc', + description: `Record a new doc that the user intends to write down.`, + params: [ + { name: 'item_title', type: 'string', required: true, description: `The title of the doc.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'item_dartboardDuid', + type: 'string', + required: false, + description: `The ID of the dartboard to place the doc in.`, + }, + { + name: 'item_text', + type: 'string', + required: false, + description: `The doc content in markdown format.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_create_task', + description: `Record a new task that the user intends to do.`, + params: [ + { name: 'item', type: 'object', required: true, description: `The task object to create.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_delete_agent', + description: `Delete an agent by its ID.`, + params: [ + { + name: 'duid', + type: 'string', + required: true, + description: `The ID of the agent to delete.`, + }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_delete_doc', + description: `Move an existing doc to the trash.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the doc to delete.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_delete_task', + description: `Move an existing task to the trash.`, + params: [ + { + name: 'duid', + type: 'string', + required: true, + description: `The ID of the task to delete.`, + }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_get_agent', + description: `Retrieve an existing agent by its ID, including its name and current description.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the agent.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_get_config', + description: `Get information about the user's space, including all possible values.`, + params: [ + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_get_dartboard', + description: `Retrieve an existing dartboard.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the dartboard.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_get_doc', + description: `Retrieve an existing doc.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the doc.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_get_folder', + description: `Retrieve an existing folder by its ID.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the folder.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_get_task', + description: `Retrieve an existing task by its ID.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the task.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_get_view', + description: `Retrieve an existing view by its ID.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the view.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_list_agents', + description: `List all agents in the workspace.`, + params: [ + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_list_comments', + description: `List comments for a task with filtering options.`, + params: [ + { name: 'taskDuid', type: 'string', required: true, description: `The ID of the task.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Max number of comments to return.`, + }, + { + name: 'offset', + type: 'integer', + required: false, + description: `Number of comments to skip.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_list_docs', + description: `List docs with filtering and search capabilities.`, + params: [ + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'dartboardDuid', + type: 'string', + required: false, + description: `Filter by dartboard ID.`, + }, + { + name: 'limit', + type: 'integer', + required: false, + description: `Max number of docs to return.`, + }, + { name: 'offset', type: 'integer', required: false, description: `Number of docs to skip.` }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + { name: 'text', type: 'string', required: false, description: `Search text.` }, + ], + }, + { + name: 'dartai_list_help_center_articles', + description: `Search for up to two help center articles by semantic similarity to a query.`, + params: [ + { name: 'text', type: 'string', required: true, description: `The search query text.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_list_tasks', + description: `List tasks with powerful filtering options.`, + params: [ + { + name: 'assigneeDuid', + type: 'string', + required: false, + description: `Filter by assignee user ID.`, + }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'dartboardDuid', + type: 'string', + required: false, + description: `Filter by dartboard ID.`, + }, + { name: 'limit', type: 'integer', required: false, description: `Max number of tasks.` }, + { name: 'offset', type: 'integer', required: false, description: `Number of tasks to skip.` }, + { name: 'priority', type: 'string', required: false, description: `Filter by priority.` }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + { name: 'statusDuid', type: 'string', required: false, description: `Filter by status ID.` }, + { name: 'text', type: 'string', required: false, description: `Search text.` }, + ], + }, + { + name: 'dartai_move_task', + description: `Move a task to a specific position within results.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the task to move.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'dartboardDuid', + type: 'string', + required: false, + description: `The target dartboard ID.`, + }, + { name: 'order', type: 'number', required: false, description: `The order/position value.` }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_report_issue', + description: `Create a concise markdown issue report for Dart Support.`, + params: [ + { + name: 'description', + type: 'string', + required: true, + description: `Detailed description of the issue.`, + }, + { name: 'title', type: 'string', required: true, description: `The issue title.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_retrieve_skill_by_title', + description: `Retrieve a skill by its title.`, + params: [ + { + name: 'title', + type: 'string', + required: true, + description: `The title of the skill to retrieve.`, + }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_update_agent', + description: `Update an agent's name and/or description. Only the fields provided will be changed.`, + params: [ + { + name: 'duid', + type: 'string', + required: true, + description: `The ID of the agent to update.`, + }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'item_executionMode', + type: 'string', + required: false, + description: `How the agent runs when triggered.`, + }, + { + name: 'item_forwarding_body', + type: 'string', + required: false, + description: `Updated custom request body for the forwarding webhook.`, + }, + { + name: 'item_forwarding_responseKey', + type: 'string', + required: false, + description: `Updated key in the webhook response to extract.`, + }, + { + name: 'item_forwarding_url', + type: 'string', + required: false, + description: `Updated webhook URL for forwarding mode.`, + }, + { + name: 'item_instructions_markdown', + type: 'string', + required: false, + description: `Updated markdown instructions for the agent.`, + }, + { + name: 'item_instructions_model', + type: 'string', + required: false, + description: `Updated LLM model for the agent.`, + }, + { + name: 'item_instructions_thinkingLevel', + type: 'string', + required: false, + description: `Updated thinking depth level for the agent's LLM.`, + }, + { + name: 'item_instructions_webEnabled', + type: 'boolean', + required: false, + description: `Whether the agent can browse the web.`, + }, + { + name: 'item_local_agent', + type: 'string', + required: false, + description: `Updated local CLI agent for Local execution mode.`, + }, + { + name: 'item_name', + type: 'string', + required: false, + description: `New display name for the agent.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_update_doc', + description: `Update certain properties of an existing doc.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the doc to update.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'item_dartboardDuid', + type: 'string', + required: false, + description: `Updated dartboard ID to move the doc to.`, + }, + { + name: 'item_title', + type: 'string', + required: false, + description: `Updated title for the doc.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_update_doc_text', + description: `Apply targeted text updates to a doc's content.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the doc.` }, + { + name: 'operations', + type: 'array', + required: true, + description: `List of text update operations to apply.`, + }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_update_task', + description: `Update properties of an existing task.`, + params: [ + { + name: 'duid', + type: 'string', + required: true, + description: `The ID of the task to update.`, + }, + { name: 'item', type: 'object', required: true, description: `The task fields to update.` }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, + { + name: 'dartai_update_task_description', + description: `Apply targeted text updates to a task's description.`, + params: [ + { name: 'duid', type: 'string', required: true, description: `The ID of the task.` }, + { + name: 'operations', + type: 'array', + required: true, + description: `List of text update operations.`, + }, + { + name: 'conversation_id', + type: 'string', + required: false, + description: `Conversation correlation ID. Present only when an earlier tool response in this conversation returned one; that value is carried unchanged on subsequent calls. Omitted on the first call.`, + }, + { + name: 'reason_for_invocation', + type: 'string', + required: false, + description: `Brief explanation of why you chose this tool for the current task. Optional audit field; max 500 characters (longer values are truncated). Plain text only.`, + }, + ], + }, +]