Use CompactionResult type for hook compaction return value

- Import CompactionResult in hooks/types.ts
- Replace inline type with CompactionResult for SessionEventResult.compaction
- Add labels feature to changelog
This commit is contained in:
Mario Zechner 2025-12-26 21:34:48 +01:00
parent 9e68a59fed
commit e841942377
3 changed files with 28 additions and 7 deletions

View file

@ -30,7 +30,8 @@
- **Entry IDs**: Session entries now use short 8-character hex IDs instead of full UUIDs
- **API key priority**: `ANTHROPIC_OAUTH_TOKEN` now takes precedence over `ANTHROPIC_API_KEY`
- **New entry types**: `BranchSummaryEntry` for branch context, `CustomEntry` for hook data
- **New entry types**: `BranchSummaryEntry` for branch context, `CustomEntry` for hook data, `LabelEntry` for user-defined bookmarks
- **Entry labels**: New `getLabel(id)` and `appendLabelChange(targetId, label)` methods for labeling entries. Labels are included in `SessionTreeNode` for UI/export.
### Fixed

View file

@ -91,6 +91,30 @@ Questions to resolve:
- [ ] Display labels in UI (tree view, path view) - deferred to UI phase
- [ ] `/label` command - deferred to UI phase
### CustomMessageEntry<T>
Hooks can define their own custom message entry types and inject them into the session.
```typescript
export interface CustomMessageEntry<T = unknown> extends SessionEntryBase {
type: "custom_message";
customType: string; // Hook identifier
content: (string | Attachment)[]; // Message content
details?: T; // Hook-specific data (like tool result details)
display: boolean; // Whether to display in TUI
}
```
Behavior:
- [ ] Participates in context and compaction as user messages (after messageTransformer)
- [ ] Not displayed as user messages in TUI
- [ ] Display options:
- `display: false` - hidden entirely
- `display: true` - baseline renderer (content with different bg/fg color)
- Custom renderer defined by the hook that contributes it
- [ ] Define injection mechanism for hooks to add CustomMessageEntry
- [ ] Hook registration for custom renderers
### HTML Export
- [ ] Add collapsible sidebar showing full tree structure

View file

@ -7,7 +7,7 @@
import type { AppMessage, Attachment } from "@mariozechner/pi-agent-core";
import type { ImageContent, Model, TextContent, ToolResultMessage } from "@mariozechner/pi-ai";
import type { CutPointResult } from "../compaction.js";
import type { CompactionResult, CutPointResult } from "../compaction.js";
import type { CompactionEntry, SessionEntry } from "../session-manager.js";
import type {
BashToolDetails,
@ -354,11 +354,7 @@ export interface SessionEventResult {
/** If true (for before_branch only), skip restoring conversation to branch point while still creating the branched session file */
skipConversationRestore?: boolean;
/** Custom compaction result (for before_compact event) - SessionManager adds id/parentId */
compaction?: {
summary: string;
firstKeptEntryId: string;
tokensBefore: number;
};
compaction?: CompactionResult;
}
// ============================================================================