mirror of
https://github.com/getcompanion-ai/co-mono.git
synced 2026-04-16 12:03:23 +00:00
Expose full tool result content and details in hook tool_result event
Breaking change: ToolResultEvent now exposes content and typed details
instead of just a result string. Hook handlers returning { result: ... }
must change to { content: [...] }.
- ToolResultEvent is now a discriminated union based on toolName
- Each built-in tool has typed details (BashToolDetails, etc.)
- Export tool details types and TruncationResult
- Update hooks.md documentation
Closes #233
This commit is contained in:
parent
05b7b81338
commit
3d9bad8fb6
12 changed files with 187 additions and 34 deletions
|
|
@ -222,13 +222,60 @@ Fired after tool executes. **Can modify result.**
|
|||
|
||||
```typescript
|
||||
pi.on("tool_result", async (event, ctx) => {
|
||||
// event.toolName, event.toolCallId, event.input
|
||||
// event.result: string
|
||||
// event.toolName: string
|
||||
// event.toolCallId: string
|
||||
// event.input: Record<string, unknown>
|
||||
// event.content: (TextContent | ImageContent)[]
|
||||
// event.details: tool-specific (see below)
|
||||
// event.isError: boolean
|
||||
return { result: "modified" }; // or undefined to keep original
|
||||
|
||||
// Return modified content/details, or undefined to keep original
|
||||
return { content: [...], details: {...} };
|
||||
});
|
||||
```
|
||||
|
||||
The event type is a discriminated union based on `toolName`. TypeScript will narrow `details` to the correct type:
|
||||
|
||||
```typescript
|
||||
pi.on("tool_result", async (event, ctx) => {
|
||||
if (event.toolName === "bash") {
|
||||
// event.details is BashToolDetails | undefined
|
||||
if (event.details?.truncation?.truncated) {
|
||||
// Access full output from temp file
|
||||
const fullPath = event.details.fullOutputPath;
|
||||
}
|
||||
}
|
||||
});
|
||||
```
|
||||
|
||||
#### Tool Details Types
|
||||
|
||||
Each built-in tool has a typed `details` field. Types are exported from `@mariozechner/pi-coding-agent`:
|
||||
|
||||
| Tool | Details Type | Source |
|
||||
|------|-------------|--------|
|
||||
| `bash` | `BashToolDetails` | `src/core/tools/bash.ts` |
|
||||
| `read` | `ReadToolDetails` | `src/core/tools/read.ts` |
|
||||
| `edit` | `undefined` | - |
|
||||
| `write` | `undefined` | - |
|
||||
| `grep` | `GrepToolDetails` | `src/core/tools/grep.ts` |
|
||||
| `find` | `FindToolDetails` | `src/core/tools/find.ts` |
|
||||
| `ls` | `LsToolDetails` | `src/core/tools/ls.ts` |
|
||||
|
||||
Common fields in details:
|
||||
- `truncation?: TruncationResult` - present when output was truncated
|
||||
- `fullOutputPath?: string` - path to temp file with full output (bash only)
|
||||
|
||||
`TruncationResult` contains:
|
||||
- `truncated: boolean` - whether truncation occurred
|
||||
- `truncatedBy: "lines" | "bytes" | null` - which limit was hit
|
||||
- `totalLines`, `totalBytes` - original size
|
||||
- `outputLines`, `outputBytes` - truncated size
|
||||
|
||||
Custom tools use `CustomToolResultEvent` with `details: unknown`.
|
||||
|
||||
**Note:** If you modify `content`, you should also update `details` accordingly. The TUI uses `details` (e.g., truncation info) for rendering, so inconsistent values will cause display issues.
|
||||
|
||||
## Context API
|
||||
|
||||
Every event handler receives a context object with these methods:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue