mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-16 04:01:56 +00:00
Extensions: add pi.sendUserMessage() for sending user messages
Adds sendUserMessage() to the extension API, allowing extensions to send actual user messages (role: user) rather than custom messages. Unlike sendMessage(), this always triggers a turn and behaves as if the user typed the message. - Add SendUserMessageHandler type and sendUserMessage() to ExtensionAPI - Wire handler through loader, runner, and all modes - Implement via prompt() with expandPromptTemplates: false - Add send-user-message.ts example with /ask, /steer, /followup commands - Document in extensions.md fixes #483
This commit is contained in:
parent
f023af0dab
commit
7210086677
13 changed files with 222 additions and 1 deletions
|
|
@ -632,7 +632,7 @@ pi.registerTool({
|
|||
|
||||
### pi.sendMessage(message, options?)
|
||||
|
||||
Inject a message into the session:
|
||||
Inject a custom message into the session:
|
||||
|
||||
```typescript
|
||||
pi.sendMessage({
|
||||
|
|
@ -653,6 +653,34 @@ pi.sendMessage({
|
|||
- `"nextTurn"` - Queued for next user prompt. Does not interrupt or trigger anything.
|
||||
- `triggerTurn: true` - If agent is idle, trigger an LLM response immediately. Only applies to `"steer"` and `"followUp"` modes (ignored for `"nextTurn"`).
|
||||
|
||||
### pi.sendUserMessage(content, options?)
|
||||
|
||||
Send a user message to the agent. Unlike `sendMessage()` which sends custom messages, this sends an actual user message that appears as if typed by the user. Always triggers a turn.
|
||||
|
||||
```typescript
|
||||
// Simple text message
|
||||
pi.sendUserMessage("What is 2+2?");
|
||||
|
||||
// With content array (text + images)
|
||||
pi.sendUserMessage([
|
||||
{ type: "text", text: "Describe this image:" },
|
||||
{ type: "image", source: { type: "base64", mediaType: "image/png", data: "..." } },
|
||||
]);
|
||||
|
||||
// During streaming - must specify delivery mode
|
||||
pi.sendUserMessage("Focus on error handling", { deliverAs: "steer" });
|
||||
pi.sendUserMessage("And then summarize", { deliverAs: "followUp" });
|
||||
```
|
||||
|
||||
**Options:**
|
||||
- `deliverAs` - Required when agent is streaming:
|
||||
- `"steer"` - Interrupts after current tool, remaining tools skipped
|
||||
- `"followUp"` - Waits for agent to finish all tools
|
||||
|
||||
When not streaming, the message is sent immediately and triggers a new turn. When streaming without `deliverAs`, throws an error.
|
||||
|
||||
See [send-user-message.ts](../examples/extensions/send-user-message.ts) for a complete example.
|
||||
|
||||
### pi.appendEntry(customType, data?)
|
||||
|
||||
Persist extension state (does NOT participate in LLM context):
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue