Add messages support to runAgent for multi-turn bot conversations (#23395)
- Extend `runAgent` so callers can pass either a one-shot prompt or a multi-turn messages array (user / assistant text), matching AI SDK’s XOR shape — for Slack/Discord/Teams bots that need thread history. - Enforce exactly one of prompt | messages in AgentRunService; map messages 1:1 to AI SDK ModelMessages in AgentAsyncExecutorService - Update shared types, GraphQL/SDK inputs, docs (skills-and-agents), and regenerate metadata clients; existing prompt-only callers stay unchanged <!-- This is an auto-generated description by cubic. --> <a href="https://cubic.dev/pr/twentyhq/twenty/pull/23395?utm_source=github" target="_blank" rel="noopener noreferrer" data-no-image-dialog="true"><picture><source media="(prefers-color-scheme: dark)" srcset="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"><source media="(prefers-color-scheme: light)" srcset="https://www.cubic.dev/buttons/review-in-cubic-light.svg"><img alt="Review in cubic" src="https://www.cubic.dev/buttons/review-in-cubic-dark.svg"></picture></a> <!-- End of auto-generated description by cubic. -->
This commit is contained in:
@@ -102,7 +102,8 @@ Schema notes:
|
||||
|
||||
`runAgent()` lets a logic function run one of your app's agents (with its
|
||||
skills and tools). Identify the agent by the `universalIdentifier` you passed
|
||||
to `defineAgent()`:
|
||||
to `defineAgent()`. Pass either a `prompt` string or a `messages` conversation
|
||||
history — not both:
|
||||
|
||||
```ts src/logic-functions/run-enricher.ts
|
||||
import { runAgent } from 'twenty-sdk/logic-function';
|
||||
@@ -113,7 +114,25 @@ const { result, error, success } = await runAgent({
|
||||
});
|
||||
```
|
||||
|
||||
For multi-turn bots (Slack, Discord, Teams, …), pass thread history as
|
||||
`messages` instead of a single `prompt`:
|
||||
|
||||
```ts src/logic-functions/reply-in-thread.ts
|
||||
import { runAgent } from 'twenty-sdk/logic-function';
|
||||
|
||||
const { result, error, success } = await runAgent({
|
||||
agentUniversalIdentifier: 'b3c4d5e6-f7a8-9012-bcde-f34567890123',
|
||||
messages: [
|
||||
{ role: 'user', content: 'Who owns Acme?' },
|
||||
{ role: 'assistant', content: 'Sarah owns the Acme account.' },
|
||||
{ role: 'user', content: 'What was the last touchpoint?' },
|
||||
],
|
||||
});
|
||||
```
|
||||
|
||||
Key points:
|
||||
- Provide **exactly one** of `prompt` (string) or `messages` (1 to 100 entries
|
||||
of `{ role: 'user' | 'assistant', content: string }`).
|
||||
- The agent runs **synchronously** and can read/update records itself via its
|
||||
own tools — `runAgent()` resolves once the run completes.
|
||||
- An app can only run its own agents.
|
||||
|
||||
Reference in New Issue
Block a user