indusagi-coding-agent 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +2249 -0
- package/README.md +546 -0
- package/dist/cli/args.js +282 -0
- package/dist/cli/config-selector.js +30 -0
- package/dist/cli/file-processor.js +78 -0
- package/dist/cli/list-models.js +91 -0
- package/dist/cli/session-picker.js +31 -0
- package/dist/cli.js +10 -0
- package/dist/config.js +158 -0
- package/dist/core/agent-session.js +2097 -0
- package/dist/core/auth-storage.js +278 -0
- package/dist/core/bash-executor.js +211 -0
- package/dist/core/compaction/branch-summarization.js +241 -0
- package/dist/core/compaction/compaction.js +606 -0
- package/dist/core/compaction/index.js +6 -0
- package/dist/core/compaction/utils.js +137 -0
- package/dist/core/diagnostics.js +1 -0
- package/dist/core/event-bus.js +24 -0
- package/dist/core/exec.js +70 -0
- package/dist/core/export-html/ansi-to-html.js +248 -0
- package/dist/core/export-html/index.js +221 -0
- package/dist/core/export-html/template.css +905 -0
- package/dist/core/export-html/template.html +54 -0
- package/dist/core/export-html/template.js +1549 -0
- package/dist/core/export-html/tool-renderer.js +56 -0
- package/dist/core/export-html/vendor/highlight.min.js +1213 -0
- package/dist/core/export-html/vendor/marked.min.js +6 -0
- package/dist/core/extensions/index.js +8 -0
- package/dist/core/extensions/loader.js +395 -0
- package/dist/core/extensions/runner.js +499 -0
- package/dist/core/extensions/types.js +31 -0
- package/dist/core/extensions/wrapper.js +101 -0
- package/dist/core/footer-data-provider.js +133 -0
- package/dist/core/index.js +8 -0
- package/dist/core/keybindings.js +140 -0
- package/dist/core/messages.js +122 -0
- package/dist/core/model-registry.js +454 -0
- package/dist/core/model-resolver.js +309 -0
- package/dist/core/package-manager.js +1142 -0
- package/dist/core/prompt-templates.js +250 -0
- package/dist/core/resource-loader.js +569 -0
- package/dist/core/sdk.js +225 -0
- package/dist/core/session-manager.js +1078 -0
- package/dist/core/settings-manager.js +430 -0
- package/dist/core/skills.js +339 -0
- package/dist/core/system-prompt.js +136 -0
- package/dist/core/timings.js +24 -0
- package/dist/core/tools/bash.js +226 -0
- package/dist/core/tools/edit-diff.js +242 -0
- package/dist/core/tools/edit.js +145 -0
- package/dist/core/tools/find.js +205 -0
- package/dist/core/tools/grep.js +238 -0
- package/dist/core/tools/index.js +60 -0
- package/dist/core/tools/ls.js +117 -0
- package/dist/core/tools/path-utils.js +52 -0
- package/dist/core/tools/read.js +165 -0
- package/dist/core/tools/truncate.js +204 -0
- package/dist/core/tools/write.js +77 -0
- package/dist/index.js +41 -0
- package/dist/main.js +565 -0
- package/dist/migrations.js +260 -0
- package/dist/modes/index.js +7 -0
- package/dist/modes/interactive/components/armin.js +328 -0
- package/dist/modes/interactive/components/assistant-message.js +86 -0
- package/dist/modes/interactive/components/bash-execution.js +155 -0
- package/dist/modes/interactive/components/bordered-loader.js +47 -0
- package/dist/modes/interactive/components/branch-summary-message.js +41 -0
- package/dist/modes/interactive/components/compaction-summary-message.js +42 -0
- package/dist/modes/interactive/components/config-selector.js +458 -0
- package/dist/modes/interactive/components/countdown-timer.js +27 -0
- package/dist/modes/interactive/components/custom-editor.js +61 -0
- package/dist/modes/interactive/components/custom-message.js +80 -0
- package/dist/modes/interactive/components/diff.js +132 -0
- package/dist/modes/interactive/components/dynamic-border.js +19 -0
- package/dist/modes/interactive/components/extension-editor.js +96 -0
- package/dist/modes/interactive/components/extension-input.js +54 -0
- package/dist/modes/interactive/components/extension-selector.js +70 -0
- package/dist/modes/interactive/components/footer.js +213 -0
- package/dist/modes/interactive/components/index.js +31 -0
- package/dist/modes/interactive/components/keybinding-hints.js +60 -0
- package/dist/modes/interactive/components/login-dialog.js +138 -0
- package/dist/modes/interactive/components/model-selector.js +253 -0
- package/dist/modes/interactive/components/oauth-selector.js +91 -0
- package/dist/modes/interactive/components/scoped-models-selector.js +262 -0
- package/dist/modes/interactive/components/session-selector-search.js +145 -0
- package/dist/modes/interactive/components/session-selector.js +698 -0
- package/dist/modes/interactive/components/settings-selector.js +250 -0
- package/dist/modes/interactive/components/show-images-selector.js +33 -0
- package/dist/modes/interactive/components/skill-invocation-message.js +44 -0
- package/dist/modes/interactive/components/theme-selector.js +43 -0
- package/dist/modes/interactive/components/thinking-selector.js +45 -0
- package/dist/modes/interactive/components/tool-execution.js +608 -0
- package/dist/modes/interactive/components/tree-selector.js +892 -0
- package/dist/modes/interactive/components/user-message-selector.js +109 -0
- package/dist/modes/interactive/components/user-message.js +15 -0
- package/dist/modes/interactive/components/visual-truncate.js +32 -0
- package/dist/modes/interactive/interactive-mode.js +3576 -0
- package/dist/modes/interactive/theme/dark.json +85 -0
- package/dist/modes/interactive/theme/light.json +84 -0
- package/dist/modes/interactive/theme/theme-schema.json +335 -0
- package/dist/modes/interactive/theme/theme.js +938 -0
- package/dist/modes/print-mode.js +96 -0
- package/dist/modes/rpc/rpc-client.js +390 -0
- package/dist/modes/rpc/rpc-mode.js +448 -0
- package/dist/modes/rpc/rpc-types.js +7 -0
- package/dist/utils/changelog.js +86 -0
- package/dist/utils/clipboard-image.js +116 -0
- package/dist/utils/clipboard.js +58 -0
- package/dist/utils/frontmatter.js +25 -0
- package/dist/utils/git.js +5 -0
- package/dist/utils/image-convert.js +34 -0
- package/dist/utils/image-resize.js +180 -0
- package/dist/utils/mime.js +25 -0
- package/dist/utils/photon.js +120 -0
- package/dist/utils/shell.js +164 -0
- package/dist/utils/sleep.js +16 -0
- package/dist/utils/tools-manager.js +186 -0
- package/docs/compaction.md +390 -0
- package/docs/custom-provider.md +538 -0
- package/docs/development.md +69 -0
- package/docs/extensions.md +1733 -0
- package/docs/images/doom-extension.png +0 -0
- package/docs/images/interactive-mode.png +0 -0
- package/docs/images/tree-view.png +0 -0
- package/docs/json.md +79 -0
- package/docs/keybindings.md +162 -0
- package/docs/models.md +193 -0
- package/docs/packages.md +163 -0
- package/docs/prompt-templates.md +67 -0
- package/docs/providers.md +147 -0
- package/docs/rpc.md +1048 -0
- package/docs/sdk.md +957 -0
- package/docs/session.md +412 -0
- package/docs/settings.md +216 -0
- package/docs/shell-aliases.md +13 -0
- package/docs/skills.md +226 -0
- package/docs/terminal-setup.md +65 -0
- package/docs/themes.md +295 -0
- package/docs/tree.md +219 -0
- package/docs/tui.md +887 -0
- package/docs/windows.md +17 -0
- package/examples/README.md +25 -0
- package/examples/extensions/README.md +192 -0
- package/examples/extensions/antigravity-image-gen.ts +414 -0
- package/examples/extensions/auto-commit-on-exit.ts +49 -0
- package/examples/extensions/bookmark.ts +50 -0
- package/examples/extensions/claude-rules.ts +86 -0
- package/examples/extensions/confirm-destructive.ts +59 -0
- package/examples/extensions/custom-compaction.ts +115 -0
- package/examples/extensions/custom-footer.ts +65 -0
- package/examples/extensions/custom-header.ts +73 -0
- package/examples/extensions/custom-provider-anthropic/index.ts +605 -0
- package/examples/extensions/custom-provider-anthropic/package-lock.json +24 -0
- package/examples/extensions/custom-provider-anthropic/package.json +19 -0
- package/examples/extensions/custom-provider-gitlab-duo/index.ts +350 -0
- package/examples/extensions/custom-provider-gitlab-duo/package.json +16 -0
- package/examples/extensions/custom-provider-gitlab-duo/test.ts +83 -0
- package/examples/extensions/dirty-repo-guard.ts +56 -0
- package/examples/extensions/doom-overlay/README.md +46 -0
- package/examples/extensions/doom-overlay/doom/build/doom.js +21 -0
- package/examples/extensions/doom-overlay/doom/build/doom.wasm +0 -0
- package/examples/extensions/doom-overlay/doom/build.sh +152 -0
- package/examples/extensions/doom-overlay/doom/doomgeneric_pi.c +72 -0
- package/examples/extensions/doom-overlay/doom-component.ts +133 -0
- package/examples/extensions/doom-overlay/doom-engine.ts +173 -0
- package/examples/extensions/doom-overlay/doom-keys.ts +105 -0
- package/examples/extensions/doom-overlay/index.ts +74 -0
- package/examples/extensions/doom-overlay/wad-finder.ts +51 -0
- package/examples/extensions/event-bus.ts +43 -0
- package/examples/extensions/file-trigger.ts +41 -0
- package/examples/extensions/git-checkpoint.ts +53 -0
- package/examples/extensions/handoff.ts +151 -0
- package/examples/extensions/hello.ts +25 -0
- package/examples/extensions/inline-bash.ts +94 -0
- package/examples/extensions/input-transform.ts +43 -0
- package/examples/extensions/interactive-shell.ts +196 -0
- package/examples/extensions/mac-system-theme.ts +47 -0
- package/examples/extensions/message-renderer.ts +60 -0
- package/examples/extensions/modal-editor.ts +86 -0
- package/examples/extensions/model-status.ts +31 -0
- package/examples/extensions/notify.ts +25 -0
- package/examples/extensions/overlay-qa-tests.ts +882 -0
- package/examples/extensions/overlay-test.ts +151 -0
- package/examples/extensions/permission-gate.ts +34 -0
- package/examples/extensions/pirate.ts +47 -0
- package/examples/extensions/plan-mode/README.md +65 -0
- package/examples/extensions/plan-mode/index.ts +341 -0
- package/examples/extensions/plan-mode/utils.ts +168 -0
- package/examples/extensions/preset.ts +399 -0
- package/examples/extensions/protected-paths.ts +30 -0
- package/examples/extensions/qna.ts +120 -0
- package/examples/extensions/question.ts +265 -0
- package/examples/extensions/questionnaire.ts +428 -0
- package/examples/extensions/rainbow-editor.ts +88 -0
- package/examples/extensions/sandbox/index.ts +318 -0
- package/examples/extensions/sandbox/package-lock.json +92 -0
- package/examples/extensions/sandbox/package.json +19 -0
- package/examples/extensions/send-user-message.ts +97 -0
- package/examples/extensions/session-name.ts +27 -0
- package/examples/extensions/shutdown-command.ts +63 -0
- package/examples/extensions/snake.ts +344 -0
- package/examples/extensions/space-invaders.ts +561 -0
- package/examples/extensions/ssh.ts +220 -0
- package/examples/extensions/status-line.ts +40 -0
- package/examples/extensions/subagent/README.md +172 -0
- package/examples/extensions/subagent/agents/planner.md +37 -0
- package/examples/extensions/subagent/agents/reviewer.md +35 -0
- package/examples/extensions/subagent/agents/scout.md +50 -0
- package/examples/extensions/subagent/agents/worker.md +24 -0
- package/examples/extensions/subagent/agents.ts +127 -0
- package/examples/extensions/subagent/index.ts +964 -0
- package/examples/extensions/subagent/prompts/implement-and-review.md +10 -0
- package/examples/extensions/subagent/prompts/implement.md +10 -0
- package/examples/extensions/subagent/prompts/scout-and-plan.md +9 -0
- package/examples/extensions/summarize.ts +196 -0
- package/examples/extensions/timed-confirm.ts +70 -0
- package/examples/extensions/todo.ts +300 -0
- package/examples/extensions/tool-override.ts +144 -0
- package/examples/extensions/tools.ts +147 -0
- package/examples/extensions/trigger-compact.ts +40 -0
- package/examples/extensions/truncated-tool.ts +193 -0
- package/examples/extensions/widget-placement.ts +17 -0
- package/examples/extensions/with-deps/index.ts +36 -0
- package/examples/extensions/with-deps/package-lock.json +31 -0
- package/examples/extensions/with-deps/package.json +22 -0
- package/examples/sdk/01-minimal.ts +22 -0
- package/examples/sdk/02-custom-model.ts +50 -0
- package/examples/sdk/03-custom-prompt.ts +55 -0
- package/examples/sdk/04-skills.ts +46 -0
- package/examples/sdk/05-tools.ts +56 -0
- package/examples/sdk/06-extensions.ts +88 -0
- package/examples/sdk/07-context-files.ts +40 -0
- package/examples/sdk/08-prompt-templates.ts +47 -0
- package/examples/sdk/09-api-keys-and-oauth.ts +48 -0
- package/examples/sdk/10-settings.ts +38 -0
- package/examples/sdk/11-sessions.ts +48 -0
- package/examples/sdk/12-full-control.ts +82 -0
- package/examples/sdk/13-codex-oauth.ts +37 -0
- package/examples/sdk/README.md +144 -0
- package/package.json +85 -0
package/docs/tree.md
ADDED
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
# Session Tree Navigation
|
|
2
|
+
|
|
3
|
+
The `/tree` command provides tree-based navigation of the session history.
|
|
4
|
+
|
|
5
|
+
## Overview
|
|
6
|
+
|
|
7
|
+
Sessions are stored as trees where each entry has an `id` and `parentId`. The "leaf" pointer tracks the current position. `/tree` lets you navigate to any point and optionally summarize the branch you're leaving.
|
|
8
|
+
|
|
9
|
+
### Comparison with `/fork`
|
|
10
|
+
|
|
11
|
+
| Feature | `/fork` | `/tree` |
|
|
12
|
+
|---------|---------|---------|
|
|
13
|
+
| View | Flat list of user messages | Full tree structure |
|
|
14
|
+
| Action | Extracts path to **new session file** | Changes leaf in **same session** |
|
|
15
|
+
| Summary | Never | Optional (user prompted) |
|
|
16
|
+
| Events | `session_before_fork` / `session_fork` | `session_before_tree` / `session_tree` |
|
|
17
|
+
|
|
18
|
+
## Tree UI
|
|
19
|
+
|
|
20
|
+
```
|
|
21
|
+
├─ user: "Hello, can you help..."
|
|
22
|
+
│ └─ assistant: "Of course! I can..."
|
|
23
|
+
│ ├─ user: "Let's try approach A..."
|
|
24
|
+
│ │ └─ assistant: "For approach A..."
|
|
25
|
+
│ │ └─ [compaction: 12k tokens]
|
|
26
|
+
│ │ └─ user: "That worked..." ← active
|
|
27
|
+
│ └─ user: "Actually, approach B..."
|
|
28
|
+
│ └─ assistant: "For approach B..."
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
### Controls
|
|
32
|
+
|
|
33
|
+
| Key | Action |
|
|
34
|
+
|-----|--------|
|
|
35
|
+
| ↑/↓ | Navigate (depth-first order) |
|
|
36
|
+
| Enter | Select node |
|
|
37
|
+
| Escape/Ctrl+C | Cancel |
|
|
38
|
+
| Ctrl+U | Toggle: user messages only |
|
|
39
|
+
| Ctrl+O | Toggle: show all (including custom/label entries) |
|
|
40
|
+
|
|
41
|
+
### Display
|
|
42
|
+
|
|
43
|
+
- Height: half terminal height
|
|
44
|
+
- Current leaf marked with `← active`
|
|
45
|
+
- Labels shown inline: `[label-name]`
|
|
46
|
+
- Default filter hides `label` and `custom` entries (shown in Ctrl+O mode)
|
|
47
|
+
- Children sorted by timestamp (oldest first)
|
|
48
|
+
|
|
49
|
+
## Selection Behavior
|
|
50
|
+
|
|
51
|
+
### User Message or Custom Message
|
|
52
|
+
1. Leaf set to **parent** of selected node (or `null` if root)
|
|
53
|
+
2. Message text placed in **editor** for re-submission
|
|
54
|
+
3. User edits and submits, creating a new branch
|
|
55
|
+
|
|
56
|
+
### Non-User Message (assistant, compaction, etc.)
|
|
57
|
+
1. Leaf set to **selected node**
|
|
58
|
+
2. Editor stays empty
|
|
59
|
+
3. User continues from that point
|
|
60
|
+
|
|
61
|
+
### Selecting Root User Message
|
|
62
|
+
If user selects the very first message (has no parent):
|
|
63
|
+
1. Leaf reset to `null` (empty conversation)
|
|
64
|
+
2. Message text placed in editor
|
|
65
|
+
3. User effectively restarts from scratch
|
|
66
|
+
|
|
67
|
+
## Branch Summarization
|
|
68
|
+
|
|
69
|
+
When switching branches, user is presented with three options:
|
|
70
|
+
|
|
71
|
+
1. **No summary** - Switch immediately without summarizing
|
|
72
|
+
2. **Summarize** - Generate a summary using the default prompt
|
|
73
|
+
3. **Summarize with custom prompt** - Opens an editor to enter additional focus instructions that are appended to the default summarization prompt
|
|
74
|
+
|
|
75
|
+
### What Gets Summarized
|
|
76
|
+
|
|
77
|
+
Path from old leaf back to common ancestor with target:
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
A → B → C → D → E → F ← old leaf
|
|
81
|
+
↘ G → H ← target
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Abandoned path: D → E → F (summarized)
|
|
85
|
+
|
|
86
|
+
Summarization stops at:
|
|
87
|
+
1. Common ancestor (always)
|
|
88
|
+
2. Compaction node (if encountered first)
|
|
89
|
+
|
|
90
|
+
### Summary Storage
|
|
91
|
+
|
|
92
|
+
Stored as `BranchSummaryEntry`:
|
|
93
|
+
|
|
94
|
+
```typescript
|
|
95
|
+
interface BranchSummaryEntry {
|
|
96
|
+
type: "branch_summary";
|
|
97
|
+
id: string;
|
|
98
|
+
parentId: string; // New leaf position
|
|
99
|
+
timestamp: string;
|
|
100
|
+
fromId: string; // Old leaf we abandoned
|
|
101
|
+
summary: string; // LLM-generated summary
|
|
102
|
+
details?: unknown; // Optional hook data
|
|
103
|
+
}
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Implementation
|
|
107
|
+
|
|
108
|
+
### AgentSession.navigateTree()
|
|
109
|
+
|
|
110
|
+
```typescript
|
|
111
|
+
async navigateTree(
|
|
112
|
+
targetId: string,
|
|
113
|
+
options?: {
|
|
114
|
+
summarize?: boolean;
|
|
115
|
+
customInstructions?: string;
|
|
116
|
+
replaceInstructions?: boolean;
|
|
117
|
+
label?: string;
|
|
118
|
+
}
|
|
119
|
+
): Promise<{ editorText?: string; cancelled: boolean }>
|
|
120
|
+
```
|
|
121
|
+
|
|
122
|
+
Options:
|
|
123
|
+
- `summarize`: Whether to generate a summary of the abandoned branch
|
|
124
|
+
- `customInstructions`: Custom instructions for the summarizer
|
|
125
|
+
- `replaceInstructions`: If true, `customInstructions` replaces the default prompt instead of being appended
|
|
126
|
+
- `label`: Label to attach to the branch summary entry (or target entry if not summarizing)
|
|
127
|
+
|
|
128
|
+
Flow:
|
|
129
|
+
1. Validate target, check no-op (target === current leaf)
|
|
130
|
+
2. Find common ancestor between old leaf and target
|
|
131
|
+
3. Collect entries to summarize (if requested)
|
|
132
|
+
4. Fire `session_before_tree` event (hook can cancel or provide summary)
|
|
133
|
+
5. Run default summarizer if needed
|
|
134
|
+
6. Switch leaf via `branch()` or `branchWithSummary()`
|
|
135
|
+
7. Update agent: `agent.replaceMessages(sessionManager.buildSessionContext().messages)`
|
|
136
|
+
8. Fire `session_tree` event
|
|
137
|
+
9. Notify custom tools via session event
|
|
138
|
+
10. Return result with `editorText` if user message was selected
|
|
139
|
+
|
|
140
|
+
### SessionManager
|
|
141
|
+
|
|
142
|
+
- `getLeafUuid(): string | null` - Current leaf (null if empty)
|
|
143
|
+
- `resetLeaf(): void` - Set leaf to null (for root user message navigation)
|
|
144
|
+
- `getTree(): SessionTreeNode[]` - Full tree with children sorted by timestamp
|
|
145
|
+
- `branch(id)` - Change leaf pointer
|
|
146
|
+
- `branchWithSummary(id, summary)` - Change leaf and create summary entry
|
|
147
|
+
|
|
148
|
+
### InteractiveMode
|
|
149
|
+
|
|
150
|
+
`/tree` command shows `TreeSelectorComponent`, then:
|
|
151
|
+
1. Prompt for summarization
|
|
152
|
+
2. Call `session.navigateTree()`
|
|
153
|
+
3. Clear and re-render chat
|
|
154
|
+
4. Set editor text if applicable
|
|
155
|
+
|
|
156
|
+
## Hook Events
|
|
157
|
+
|
|
158
|
+
### `session_before_tree`
|
|
159
|
+
|
|
160
|
+
```typescript
|
|
161
|
+
interface TreePreparation {
|
|
162
|
+
targetId: string;
|
|
163
|
+
oldLeafId: string | null;
|
|
164
|
+
commonAncestorId: string | null;
|
|
165
|
+
entriesToSummarize: SessionEntry[];
|
|
166
|
+
userWantsSummary: boolean;
|
|
167
|
+
customInstructions?: string;
|
|
168
|
+
replaceInstructions?: boolean;
|
|
169
|
+
label?: string;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
interface SessionBeforeTreeEvent {
|
|
173
|
+
type: "session_before_tree";
|
|
174
|
+
preparation: TreePreparation;
|
|
175
|
+
signal: AbortSignal;
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
interface SessionBeforeTreeResult {
|
|
179
|
+
cancel?: boolean;
|
|
180
|
+
summary?: { summary: string; details?: unknown };
|
|
181
|
+
customInstructions?: string; // Override custom instructions
|
|
182
|
+
replaceInstructions?: boolean; // Override replace mode
|
|
183
|
+
label?: string; // Override label
|
|
184
|
+
}
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
Extensions can override `customInstructions`, `replaceInstructions`, and `label` by returning them from the `session_before_tree` handler.
|
|
188
|
+
|
|
189
|
+
### `session_tree`
|
|
190
|
+
|
|
191
|
+
```typescript
|
|
192
|
+
interface SessionTreeEvent {
|
|
193
|
+
type: "session_tree";
|
|
194
|
+
newLeafId: string | null;
|
|
195
|
+
oldLeafId: string | null;
|
|
196
|
+
summaryEntry?: BranchSummaryEntry;
|
|
197
|
+
fromHook?: boolean;
|
|
198
|
+
}
|
|
199
|
+
```
|
|
200
|
+
|
|
201
|
+
### Example: Custom Summarizer
|
|
202
|
+
|
|
203
|
+
```typescript
|
|
204
|
+
export default function(indusagi: HookAPI) {
|
|
205
|
+
indusagi.on("session_before_tree", async (event, ctx) => {
|
|
206
|
+
if (!event.preparation.userWantsSummary) return;
|
|
207
|
+
if (event.preparation.entriesToSummarize.length === 0) return;
|
|
208
|
+
|
|
209
|
+
const summary = await myCustomSummarizer(event.preparation.entriesToSummarize);
|
|
210
|
+
return { summary: { summary, details: { custom: true } } };
|
|
211
|
+
});
|
|
212
|
+
}
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## Error Handling
|
|
216
|
+
|
|
217
|
+
- Summarization failure: cancels navigation, shows error
|
|
218
|
+
- User abort (Escape): cancels navigation
|
|
219
|
+
- Hook returns `cancel: true`: cancels navigation silently
|