@codeany/open-agent-sdk 0.1.0 → 0.2.1
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/README.md +144 -31
- package/dist/agent.d.ts +113 -0
- package/dist/agent.d.ts.map +1 -0
- package/dist/agent.js +446 -0
- package/dist/agent.js.map +1 -0
- package/dist/engine.d.ts +62 -0
- package/dist/engine.d.ts.map +1 -0
- package/dist/engine.js +494 -0
- package/dist/engine.js.map +1 -0
- package/dist/hooks.d.ts +111 -0
- package/dist/hooks.d.ts.map +1 -0
- package/dist/hooks.js +179 -0
- package/dist/hooks.js.map +1 -0
- package/dist/index.d.ts +66 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +133 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/client.d.ts +19 -0
- package/dist/mcp/client.d.ts.map +1 -0
- package/dist/mcp/client.js +126 -0
- package/dist/mcp/client.js.map +1 -0
- package/dist/providers/anthropic.d.ts +17 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +47 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/index.d.ts +20 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +26 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai.d.ts +26 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +212 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/types.d.ts +84 -0
- package/dist/providers/types.d.ts.map +1 -0
- package/dist/providers/types.js +11 -0
- package/dist/providers/types.js.map +1 -0
- package/dist/sdk-mcp-server.d.ts +52 -0
- package/dist/sdk-mcp-server.d.ts.map +1 -0
- package/dist/sdk-mcp-server.js +57 -0
- package/dist/sdk-mcp-server.js.map +1 -0
- package/dist/session.d.ts +73 -0
- package/dist/session.d.ts.map +1 -0
- package/dist/session.js +159 -0
- package/dist/session.js.map +1 -0
- package/dist/skills/bundled/commit.d.ts +7 -0
- package/dist/skills/bundled/commit.d.ts.map +1 -0
- package/dist/skills/bundled/commit.js +35 -0
- package/dist/skills/bundled/commit.js.map +1 -0
- package/dist/skills/bundled/debug.d.ts +7 -0
- package/dist/skills/bundled/debug.d.ts.map +1 -0
- package/dist/skills/bundled/debug.js +46 -0
- package/dist/skills/bundled/debug.js.map +1 -0
- package/dist/skills/bundled/index.d.ts +11 -0
- package/dist/skills/bundled/index.d.ts.map +1 -0
- package/dist/skills/bundled/index.js +26 -0
- package/dist/skills/bundled/index.js.map +1 -0
- package/dist/skills/bundled/review.d.ts +7 -0
- package/dist/skills/bundled/review.d.ts.map +1 -0
- package/dist/skills/bundled/review.js +38 -0
- package/dist/skills/bundled/review.js.map +1 -0
- package/dist/skills/bundled/simplify.d.ts +8 -0
- package/dist/skills/bundled/simplify.d.ts.map +1 -0
- package/dist/skills/bundled/simplify.js +48 -0
- package/dist/skills/bundled/simplify.js.map +1 -0
- package/dist/skills/bundled/test.d.ts +7 -0
- package/dist/skills/bundled/test.d.ts.map +1 -0
- package/dist/skills/bundled/test.js +40 -0
- package/dist/skills/bundled/test.js.map +1 -0
- package/dist/skills/index.d.ts +7 -0
- package/dist/skills/index.d.ts.map +1 -0
- package/dist/skills/index.js +8 -0
- package/dist/skills/index.js.map +1 -0
- package/dist/skills/registry.d.ts +43 -0
- package/dist/skills/registry.d.ts.map +1 -0
- package/dist/skills/registry.js +111 -0
- package/dist/skills/registry.js.map +1 -0
- package/dist/skills/types.d.ts +83 -0
- package/dist/skills/types.d.ts.map +1 -0
- package/dist/skills/types.js +8 -0
- package/dist/skills/types.js.map +1 -0
- package/dist/tool-helper.d.ts +73 -0
- package/dist/tool-helper.d.ts.map +1 -0
- package/dist/tool-helper.js +86 -0
- package/dist/tool-helper.js.map +1 -0
- package/dist/tools/agent-tool.d.ts +17 -0
- package/dist/tools/agent-tool.d.ts.map +1 -0
- package/dist/tools/agent-tool.js +146 -0
- package/dist/tools/agent-tool.js.map +1 -0
- package/dist/tools/ask-user.d.ts +18 -0
- package/dist/tools/ask-user.d.ts.map +1 -0
- package/dist/tools/ask-user.js +72 -0
- package/dist/tools/ask-user.js.map +1 -0
- package/dist/tools/bash.d.ts +5 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +67 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/config-tool.d.ts +20 -0
- package/dist/tools/config-tool.d.ts.map +1 -0
- package/dist/tools/config-tool.js +83 -0
- package/dist/tools/config-tool.js.map +1 -0
- package/dist/tools/cron-tools.d.ts +33 -0
- package/dist/tools/cron-tools.d.ts.map +1 -0
- package/dist/tools/cron-tools.js +128 -0
- package/dist/tools/cron-tools.js.map +1 -0
- package/dist/tools/edit.d.ts +5 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +70 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/glob.d.ts +5 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +75 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +5 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +168 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/index.d.ts +45 -0
- package/dist/tools/index.d.ts.map +1 -0
- package/dist/tools/index.js +162 -0
- package/dist/tools/index.js.map +1 -0
- package/dist/tools/lsp-tool.d.ts +9 -0
- package/dist/tools/lsp-tool.d.ts.map +1 -0
- package/dist/tools/lsp-tool.js +137 -0
- package/dist/tools/lsp-tool.js.map +1 -0
- package/dist/tools/mcp-resource-tools.d.ts +14 -0
- package/dist/tools/mcp-resource-tools.d.ts.map +1 -0
- package/dist/tools/mcp-resource-tools.js +117 -0
- package/dist/tools/mcp-resource-tools.js.map +1 -0
- package/dist/tools/notebook-edit.d.ts +5 -0
- package/dist/tools/notebook-edit.d.ts.map +1 -0
- package/dist/tools/notebook-edit.js +85 -0
- package/dist/tools/notebook-edit.js.map +1 -0
- package/dist/tools/plan-tools.d.ts +12 -0
- package/dist/tools/plan-tools.d.ts.map +1 -0
- package/dist/tools/plan-tools.js +77 -0
- package/dist/tools/plan-tools.js.map +1 -0
- package/dist/tools/read.d.ts +5 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +66 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/send-message.d.ts +31 -0
- package/dist/tools/send-message.d.ts.map +1 -0
- package/dist/tools/send-message.js +77 -0
- package/dist/tools/send-message.js.map +1 -0
- package/dist/tools/skill-tool.d.ts +9 -0
- package/dist/tools/skill-tool.d.ts.map +1 -0
- package/dist/tools/skill-tool.js +115 -0
- package/dist/tools/skill-tool.js.map +1 -0
- package/dist/tools/task-tools.d.ts +48 -0
- package/dist/tools/task-tools.d.ts.map +1 -0
- package/dist/tools/task-tools.js +242 -0
- package/dist/tools/task-tools.js.map +1 -0
- package/dist/tools/team-tools.d.ts +34 -0
- package/dist/tools/team-tools.d.ts.map +1 -0
- package/dist/tools/team-tools.js +103 -0
- package/dist/tools/team-tools.js.map +1 -0
- package/dist/tools/todo-tool.d.ts +22 -0
- package/dist/tools/todo-tool.d.ts.map +1 -0
- package/dist/tools/todo-tool.js +93 -0
- package/dist/tools/todo-tool.js.map +1 -0
- package/dist/tools/tool-search.d.ts +13 -0
- package/dist/tools/tool-search.d.ts.map +1 -0
- package/dist/tools/tool-search.js +76 -0
- package/dist/tools/tool-search.js.map +1 -0
- package/dist/tools/types.d.ts +29 -0
- package/dist/tools/types.d.ts.map +1 -0
- package/dist/tools/types.js +52 -0
- package/dist/tools/types.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +5 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +60 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +5 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +77 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/worktree-tools.d.ts +10 -0
- package/dist/tools/worktree-tools.d.ts.map +1 -0
- package/dist/tools/worktree-tools.js +130 -0
- package/dist/tools/worktree-tools.js.map +1 -0
- package/dist/tools/write.d.ts +5 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +40 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types.d.ts +423 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/compact.d.ts +44 -0
- package/dist/utils/compact.d.ts.map +1 -0
- package/dist/utils/compact.js +162 -0
- package/dist/utils/compact.js.map +1 -0
- package/dist/utils/context.d.ts +35 -0
- package/dist/utils/context.d.ts.map +1 -0
- package/dist/utils/context.js +174 -0
- package/dist/utils/context.js.map +1 -0
- package/dist/utils/fileCache.d.ts +64 -0
- package/dist/utils/fileCache.d.ts.map +1 -0
- package/dist/utils/fileCache.js +117 -0
- package/dist/utils/fileCache.js.map +1 -0
- package/dist/utils/messages.d.ts +57 -0
- package/dist/utils/messages.d.ts.map +1 -0
- package/dist/utils/messages.js +152 -0
- package/dist/utils/messages.js.map +1 -0
- package/dist/utils/retry.d.ts +48 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +111 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/tokens.d.ts +57 -0
- package/dist/utils/tokens.d.ts.map +1 -0
- package/dist/utils/tokens.js +134 -0
- package/dist/utils/tokens.js.map +1 -0
- package/package.json +7 -1
- package/src/agent.ts +106 -15
- package/src/engine.ts +169 -59
- package/src/index.ts +51 -1
- package/src/providers/anthropic.ts +60 -0
- package/src/providers/index.ts +34 -0
- package/src/providers/openai.ts +315 -0
- package/src/providers/types.ts +85 -0
- package/src/session.ts +5 -5
- package/src/skills/bundled/commit.ts +38 -0
- package/src/skills/bundled/debug.ts +48 -0
- package/src/skills/bundled/index.ts +28 -0
- package/src/skills/bundled/review.ts +41 -0
- package/src/skills/bundled/simplify.ts +51 -0
- package/src/skills/bundled/test.ts +43 -0
- package/src/skills/index.ts +25 -0
- package/src/skills/registry.ts +133 -0
- package/src/skills/types.ts +99 -0
- package/src/tools/agent-tool.ts +13 -2
- package/src/tools/index.ts +8 -0
- package/src/tools/skill-tool.ts +133 -0
- package/src/tools/types.ts +7 -3
- package/src/types.ts +35 -8
- package/src/utils/compact.ts +18 -17
- package/src/utils/messages.ts +12 -13
- package/src/utils/tokens.ts +29 -6
- package/.env.example +0 -8
- package/examples/01-simple-query.ts +0 -43
- package/examples/02-multi-tool.ts +0 -44
- package/examples/03-multi-turn.ts +0 -39
- package/examples/04-prompt-api.ts +0 -29
- package/examples/05-custom-system-prompt.ts +0 -26
- package/examples/06-mcp-server.ts +0 -49
- package/examples/07-custom-tools.ts +0 -87
- package/examples/08-official-api-compat.ts +0 -38
- package/examples/09-subagents.ts +0 -48
- package/examples/10-permissions.ts +0 -40
- package/examples/11-custom-mcp-tools.ts +0 -101
- package/examples/web/index.html +0 -365
- package/examples/web/server.ts +0 -157
- package/tsconfig.json +0 -19
package/dist/engine.js
ADDED
|
@@ -0,0 +1,494 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* QueryEngine - Core agentic loop
|
|
3
|
+
*
|
|
4
|
+
* Manages the full conversation lifecycle:
|
|
5
|
+
* 1. Take user prompt
|
|
6
|
+
* 2. Build system prompt with context (git status, project context, tools)
|
|
7
|
+
* 3. Call LLM API with tools (via provider abstraction)
|
|
8
|
+
* 4. Stream response
|
|
9
|
+
* 5. Execute tool calls (concurrent for read-only, serial for mutations)
|
|
10
|
+
* 6. Send results back, repeat until done
|
|
11
|
+
* 7. Auto-compact when context exceeds threshold
|
|
12
|
+
* 8. Retry with exponential backoff on transient errors
|
|
13
|
+
*/
|
|
14
|
+
import { estimateCost, } from './utils/tokens.js';
|
|
15
|
+
import { shouldAutoCompact, compactConversation, microCompactMessages, createAutoCompactState, } from './utils/compact.js';
|
|
16
|
+
import { withRetry, isPromptTooLongError, } from './utils/retry.js';
|
|
17
|
+
import { getSystemContext, getUserContext } from './utils/context.js';
|
|
18
|
+
import { normalizeMessagesForAPI } from './utils/messages.js';
|
|
19
|
+
// ============================================================================
|
|
20
|
+
// Tool format conversion
|
|
21
|
+
// ============================================================================
|
|
22
|
+
/** Convert a ToolDefinition to the normalized provider tool format. */
|
|
23
|
+
function toProviderTool(tool) {
|
|
24
|
+
return {
|
|
25
|
+
name: tool.name,
|
|
26
|
+
description: tool.description,
|
|
27
|
+
input_schema: tool.inputSchema,
|
|
28
|
+
};
|
|
29
|
+
}
|
|
30
|
+
// ============================================================================
|
|
31
|
+
// System Prompt Builder
|
|
32
|
+
// ============================================================================
|
|
33
|
+
async function buildSystemPrompt(config) {
|
|
34
|
+
if (config.systemPrompt) {
|
|
35
|
+
const base = config.systemPrompt;
|
|
36
|
+
return config.appendSystemPrompt
|
|
37
|
+
? base + '\n\n' + config.appendSystemPrompt
|
|
38
|
+
: base;
|
|
39
|
+
}
|
|
40
|
+
const parts = [];
|
|
41
|
+
parts.push('You are an AI assistant with access to tools. Use the tools provided to help the user accomplish their tasks.', 'You should use tools when they would help you complete the task more accurately or efficiently.');
|
|
42
|
+
// List available tools with descriptions
|
|
43
|
+
parts.push('\n# Available Tools\n');
|
|
44
|
+
for (const tool of config.tools) {
|
|
45
|
+
parts.push(`- **${tool.name}**: ${tool.description}`);
|
|
46
|
+
}
|
|
47
|
+
// Add agent definitions
|
|
48
|
+
if (config.agents && Object.keys(config.agents).length > 0) {
|
|
49
|
+
parts.push('\n# Available Subagents\n');
|
|
50
|
+
for (const [name, def] of Object.entries(config.agents)) {
|
|
51
|
+
parts.push(`- **${name}**: ${def.description}`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
// System context (git status, etc.)
|
|
55
|
+
try {
|
|
56
|
+
const sysCtx = await getSystemContext(config.cwd);
|
|
57
|
+
if (sysCtx) {
|
|
58
|
+
parts.push('\n# Environment\n');
|
|
59
|
+
parts.push(sysCtx);
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
catch {
|
|
63
|
+
// Context is best-effort
|
|
64
|
+
}
|
|
65
|
+
// User context (AGENT.md, date)
|
|
66
|
+
try {
|
|
67
|
+
const userCtx = await getUserContext(config.cwd);
|
|
68
|
+
if (userCtx) {
|
|
69
|
+
parts.push('\n# Project Context\n');
|
|
70
|
+
parts.push(userCtx);
|
|
71
|
+
}
|
|
72
|
+
}
|
|
73
|
+
catch {
|
|
74
|
+
// Context is best-effort
|
|
75
|
+
}
|
|
76
|
+
// Working directory
|
|
77
|
+
parts.push(`\n# Working Directory\n${config.cwd}`);
|
|
78
|
+
if (config.appendSystemPrompt) {
|
|
79
|
+
parts.push('\n' + config.appendSystemPrompt);
|
|
80
|
+
}
|
|
81
|
+
return parts.join('\n');
|
|
82
|
+
}
|
|
83
|
+
// ============================================================================
|
|
84
|
+
// QueryEngine
|
|
85
|
+
// ============================================================================
|
|
86
|
+
export class QueryEngine {
|
|
87
|
+
config;
|
|
88
|
+
provider;
|
|
89
|
+
messages = [];
|
|
90
|
+
totalUsage = { input_tokens: 0, output_tokens: 0 };
|
|
91
|
+
totalCost = 0;
|
|
92
|
+
turnCount = 0;
|
|
93
|
+
compactState;
|
|
94
|
+
sessionId;
|
|
95
|
+
apiTimeMs = 0;
|
|
96
|
+
hookRegistry;
|
|
97
|
+
constructor(config) {
|
|
98
|
+
this.config = config;
|
|
99
|
+
this.provider = config.provider;
|
|
100
|
+
this.compactState = createAutoCompactState();
|
|
101
|
+
this.sessionId = config.sessionId || crypto.randomUUID();
|
|
102
|
+
this.hookRegistry = config.hookRegistry;
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Execute hooks for a lifecycle event.
|
|
106
|
+
* Returns hook outputs; never throws.
|
|
107
|
+
*/
|
|
108
|
+
async executeHooks(event, extra) {
|
|
109
|
+
if (!this.hookRegistry?.hasHooks(event))
|
|
110
|
+
return [];
|
|
111
|
+
try {
|
|
112
|
+
return await this.hookRegistry.execute(event, {
|
|
113
|
+
event,
|
|
114
|
+
sessionId: this.sessionId,
|
|
115
|
+
cwd: this.config.cwd,
|
|
116
|
+
...extra,
|
|
117
|
+
});
|
|
118
|
+
}
|
|
119
|
+
catch {
|
|
120
|
+
return [];
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* Submit a user message and run the agentic loop.
|
|
125
|
+
* Yields SDKMessage events as the agent works.
|
|
126
|
+
*/
|
|
127
|
+
async *submitMessage(prompt) {
|
|
128
|
+
// Hook: SessionStart
|
|
129
|
+
await this.executeHooks('SessionStart');
|
|
130
|
+
// Hook: UserPromptSubmit
|
|
131
|
+
const userHookResults = await this.executeHooks('UserPromptSubmit', {
|
|
132
|
+
toolInput: prompt,
|
|
133
|
+
});
|
|
134
|
+
// Check if any hook blocks the submission
|
|
135
|
+
if (userHookResults.some((r) => r.block)) {
|
|
136
|
+
yield {
|
|
137
|
+
type: 'result',
|
|
138
|
+
subtype: 'error_during_execution',
|
|
139
|
+
is_error: true,
|
|
140
|
+
usage: this.totalUsage,
|
|
141
|
+
num_turns: 0,
|
|
142
|
+
cost: 0,
|
|
143
|
+
errors: ['Blocked by UserPromptSubmit hook'],
|
|
144
|
+
};
|
|
145
|
+
return;
|
|
146
|
+
}
|
|
147
|
+
// Add user message
|
|
148
|
+
this.messages.push({ role: 'user', content: prompt });
|
|
149
|
+
// Build tool definitions for provider
|
|
150
|
+
const tools = this.config.tools.map(toProviderTool);
|
|
151
|
+
// Build system prompt
|
|
152
|
+
const systemPrompt = await buildSystemPrompt(this.config);
|
|
153
|
+
// Emit init system message
|
|
154
|
+
yield {
|
|
155
|
+
type: 'system',
|
|
156
|
+
subtype: 'init',
|
|
157
|
+
session_id: this.sessionId,
|
|
158
|
+
tools: this.config.tools.map(t => t.name),
|
|
159
|
+
model: this.config.model,
|
|
160
|
+
cwd: this.config.cwd,
|
|
161
|
+
mcp_servers: [],
|
|
162
|
+
permission_mode: 'bypassPermissions',
|
|
163
|
+
};
|
|
164
|
+
// Agentic loop
|
|
165
|
+
let turnsRemaining = this.config.maxTurns;
|
|
166
|
+
let budgetExceeded = false;
|
|
167
|
+
let maxOutputRecoveryAttempts = 0;
|
|
168
|
+
const MAX_OUTPUT_RECOVERY = 3;
|
|
169
|
+
while (turnsRemaining > 0) {
|
|
170
|
+
if (this.config.abortSignal?.aborted)
|
|
171
|
+
break;
|
|
172
|
+
// Check budget
|
|
173
|
+
if (this.config.maxBudgetUsd && this.totalCost >= this.config.maxBudgetUsd) {
|
|
174
|
+
budgetExceeded = true;
|
|
175
|
+
break;
|
|
176
|
+
}
|
|
177
|
+
// Auto-compact if context is too large
|
|
178
|
+
if (shouldAutoCompact(this.messages, this.config.model, this.compactState)) {
|
|
179
|
+
await this.executeHooks('PreCompact');
|
|
180
|
+
try {
|
|
181
|
+
const result = await compactConversation(this.provider, this.config.model, this.messages, this.compactState);
|
|
182
|
+
this.messages = result.compactedMessages;
|
|
183
|
+
this.compactState = result.state;
|
|
184
|
+
await this.executeHooks('PostCompact');
|
|
185
|
+
}
|
|
186
|
+
catch {
|
|
187
|
+
// Continue with uncompacted messages
|
|
188
|
+
}
|
|
189
|
+
}
|
|
190
|
+
// Micro-compact: truncate large tool results
|
|
191
|
+
const apiMessages = microCompactMessages(normalizeMessagesForAPI(this.messages));
|
|
192
|
+
this.turnCount++;
|
|
193
|
+
turnsRemaining--;
|
|
194
|
+
// Make API call with retry via provider
|
|
195
|
+
let response;
|
|
196
|
+
const apiStart = performance.now();
|
|
197
|
+
try {
|
|
198
|
+
response = await withRetry(async () => {
|
|
199
|
+
return this.provider.createMessage({
|
|
200
|
+
model: this.config.model,
|
|
201
|
+
maxTokens: this.config.maxTokens,
|
|
202
|
+
system: systemPrompt,
|
|
203
|
+
messages: apiMessages,
|
|
204
|
+
tools: tools.length > 0 ? tools : undefined,
|
|
205
|
+
thinking: this.config.thinking?.type === 'enabled' &&
|
|
206
|
+
this.config.thinking.budgetTokens
|
|
207
|
+
? {
|
|
208
|
+
type: 'enabled',
|
|
209
|
+
budget_tokens: this.config.thinking.budgetTokens,
|
|
210
|
+
}
|
|
211
|
+
: undefined,
|
|
212
|
+
});
|
|
213
|
+
}, undefined, this.config.abortSignal);
|
|
214
|
+
}
|
|
215
|
+
catch (err) {
|
|
216
|
+
// Handle prompt-too-long by compacting
|
|
217
|
+
if (isPromptTooLongError(err) && !this.compactState.compacted) {
|
|
218
|
+
try {
|
|
219
|
+
const result = await compactConversation(this.provider, this.config.model, this.messages, this.compactState);
|
|
220
|
+
this.messages = result.compactedMessages;
|
|
221
|
+
this.compactState = result.state;
|
|
222
|
+
turnsRemaining++; // Retry this turn
|
|
223
|
+
this.turnCount--;
|
|
224
|
+
continue;
|
|
225
|
+
}
|
|
226
|
+
catch {
|
|
227
|
+
// Can't compact, give up
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
yield {
|
|
231
|
+
type: 'result',
|
|
232
|
+
subtype: 'error',
|
|
233
|
+
usage: this.totalUsage,
|
|
234
|
+
num_turns: this.turnCount,
|
|
235
|
+
cost: this.totalCost,
|
|
236
|
+
};
|
|
237
|
+
return;
|
|
238
|
+
}
|
|
239
|
+
// Track API timing
|
|
240
|
+
this.apiTimeMs += performance.now() - apiStart;
|
|
241
|
+
// Track usage (normalized by provider)
|
|
242
|
+
if (response.usage) {
|
|
243
|
+
this.totalUsage.input_tokens += response.usage.input_tokens;
|
|
244
|
+
this.totalUsage.output_tokens += response.usage.output_tokens;
|
|
245
|
+
if (response.usage.cache_creation_input_tokens) {
|
|
246
|
+
this.totalUsage.cache_creation_input_tokens =
|
|
247
|
+
(this.totalUsage.cache_creation_input_tokens || 0) +
|
|
248
|
+
response.usage.cache_creation_input_tokens;
|
|
249
|
+
}
|
|
250
|
+
if (response.usage.cache_read_input_tokens) {
|
|
251
|
+
this.totalUsage.cache_read_input_tokens =
|
|
252
|
+
(this.totalUsage.cache_read_input_tokens || 0) +
|
|
253
|
+
response.usage.cache_read_input_tokens;
|
|
254
|
+
}
|
|
255
|
+
this.totalCost += estimateCost(this.config.model, response.usage);
|
|
256
|
+
}
|
|
257
|
+
// Add assistant message to conversation
|
|
258
|
+
this.messages.push({ role: 'assistant', content: response.content });
|
|
259
|
+
// Yield assistant message
|
|
260
|
+
yield {
|
|
261
|
+
type: 'assistant',
|
|
262
|
+
message: {
|
|
263
|
+
role: 'assistant',
|
|
264
|
+
content: response.content,
|
|
265
|
+
},
|
|
266
|
+
};
|
|
267
|
+
// Handle max_output_tokens recovery
|
|
268
|
+
if (response.stopReason === 'max_tokens' &&
|
|
269
|
+
maxOutputRecoveryAttempts < MAX_OUTPUT_RECOVERY) {
|
|
270
|
+
maxOutputRecoveryAttempts++;
|
|
271
|
+
// Add continuation prompt
|
|
272
|
+
this.messages.push({
|
|
273
|
+
role: 'user',
|
|
274
|
+
content: 'Please continue from where you left off.',
|
|
275
|
+
});
|
|
276
|
+
continue;
|
|
277
|
+
}
|
|
278
|
+
// Check for tool use
|
|
279
|
+
const toolUseBlocks = response.content.filter((block) => block.type === 'tool_use');
|
|
280
|
+
if (toolUseBlocks.length === 0) {
|
|
281
|
+
break; // No tool calls - agent is done
|
|
282
|
+
}
|
|
283
|
+
// Reset max_output recovery counter on successful tool use
|
|
284
|
+
maxOutputRecoveryAttempts = 0;
|
|
285
|
+
// Execute tools (concurrent read-only, serial mutations)
|
|
286
|
+
const toolResults = await this.executeTools(toolUseBlocks);
|
|
287
|
+
// Yield tool results
|
|
288
|
+
for (const result of toolResults) {
|
|
289
|
+
yield {
|
|
290
|
+
type: 'tool_result',
|
|
291
|
+
result: {
|
|
292
|
+
tool_use_id: result.tool_use_id,
|
|
293
|
+
tool_name: result.tool_name || '',
|
|
294
|
+
output: typeof result.content === 'string'
|
|
295
|
+
? result.content
|
|
296
|
+
: JSON.stringify(result.content),
|
|
297
|
+
},
|
|
298
|
+
};
|
|
299
|
+
}
|
|
300
|
+
// Add tool results to conversation
|
|
301
|
+
this.messages.push({
|
|
302
|
+
role: 'user',
|
|
303
|
+
content: toolResults.map((r) => ({
|
|
304
|
+
type: 'tool_result',
|
|
305
|
+
tool_use_id: r.tool_use_id,
|
|
306
|
+
content: typeof r.content === 'string'
|
|
307
|
+
? r.content
|
|
308
|
+
: JSON.stringify(r.content),
|
|
309
|
+
is_error: r.is_error,
|
|
310
|
+
})),
|
|
311
|
+
});
|
|
312
|
+
if (response.stopReason === 'end_turn')
|
|
313
|
+
break;
|
|
314
|
+
}
|
|
315
|
+
// Hook: Stop (end of agentic loop)
|
|
316
|
+
await this.executeHooks('Stop');
|
|
317
|
+
// Hook: SessionEnd
|
|
318
|
+
await this.executeHooks('SessionEnd');
|
|
319
|
+
// Yield enriched final result
|
|
320
|
+
const endSubtype = budgetExceeded
|
|
321
|
+
? 'error_max_budget_usd'
|
|
322
|
+
: turnsRemaining <= 0
|
|
323
|
+
? 'error_max_turns'
|
|
324
|
+
: 'success';
|
|
325
|
+
yield {
|
|
326
|
+
type: 'result',
|
|
327
|
+
subtype: endSubtype,
|
|
328
|
+
session_id: this.sessionId,
|
|
329
|
+
is_error: endSubtype !== 'success',
|
|
330
|
+
num_turns: this.turnCount,
|
|
331
|
+
total_cost_usd: this.totalCost,
|
|
332
|
+
duration_api_ms: Math.round(this.apiTimeMs),
|
|
333
|
+
usage: this.totalUsage,
|
|
334
|
+
model_usage: { [this.config.model]: { input_tokens: this.totalUsage.input_tokens, output_tokens: this.totalUsage.output_tokens } },
|
|
335
|
+
cost: this.totalCost,
|
|
336
|
+
};
|
|
337
|
+
}
|
|
338
|
+
/**
|
|
339
|
+
* Execute tool calls with concurrency control.
|
|
340
|
+
*
|
|
341
|
+
* Read-only tools run concurrently (up to 10 at a time).
|
|
342
|
+
* Mutation tools run sequentially.
|
|
343
|
+
*/
|
|
344
|
+
async executeTools(toolUseBlocks) {
|
|
345
|
+
const context = {
|
|
346
|
+
cwd: this.config.cwd,
|
|
347
|
+
abortSignal: this.config.abortSignal,
|
|
348
|
+
provider: this.provider,
|
|
349
|
+
model: this.config.model,
|
|
350
|
+
apiType: this.provider.apiType,
|
|
351
|
+
};
|
|
352
|
+
const MAX_CONCURRENCY = parseInt(process.env.AGENT_SDK_MAX_TOOL_CONCURRENCY || '10');
|
|
353
|
+
// Partition into read-only (concurrent) and mutation (serial)
|
|
354
|
+
const readOnly = [];
|
|
355
|
+
const mutations = [];
|
|
356
|
+
for (const block of toolUseBlocks) {
|
|
357
|
+
const tool = this.config.tools.find((t) => t.name === block.name);
|
|
358
|
+
if (tool?.isReadOnly?.()) {
|
|
359
|
+
readOnly.push({ block, tool });
|
|
360
|
+
}
|
|
361
|
+
else {
|
|
362
|
+
mutations.push({ block, tool });
|
|
363
|
+
}
|
|
364
|
+
}
|
|
365
|
+
const results = [];
|
|
366
|
+
// Execute read-only tools concurrently (batched by MAX_CONCURRENCY)
|
|
367
|
+
for (let i = 0; i < readOnly.length; i += MAX_CONCURRENCY) {
|
|
368
|
+
const batch = readOnly.slice(i, i + MAX_CONCURRENCY);
|
|
369
|
+
const batchResults = await Promise.all(batch.map((item) => this.executeSingleTool(item.block, item.tool, context)));
|
|
370
|
+
results.push(...batchResults);
|
|
371
|
+
}
|
|
372
|
+
// Execute mutation tools sequentially
|
|
373
|
+
for (const item of mutations) {
|
|
374
|
+
const result = await this.executeSingleTool(item.block, item.tool, context);
|
|
375
|
+
results.push(result);
|
|
376
|
+
}
|
|
377
|
+
return results;
|
|
378
|
+
}
|
|
379
|
+
/**
|
|
380
|
+
* Execute a single tool with permission checking.
|
|
381
|
+
*/
|
|
382
|
+
async executeSingleTool(block, tool, context) {
|
|
383
|
+
if (!tool) {
|
|
384
|
+
return {
|
|
385
|
+
type: 'tool_result',
|
|
386
|
+
tool_use_id: block.id,
|
|
387
|
+
content: `Error: Unknown tool "${block.name}"`,
|
|
388
|
+
is_error: true,
|
|
389
|
+
tool_name: block.name,
|
|
390
|
+
};
|
|
391
|
+
}
|
|
392
|
+
// Check enabled
|
|
393
|
+
if (tool.isEnabled && !tool.isEnabled()) {
|
|
394
|
+
return {
|
|
395
|
+
type: 'tool_result',
|
|
396
|
+
tool_use_id: block.id,
|
|
397
|
+
content: `Error: Tool "${block.name}" is not enabled`,
|
|
398
|
+
is_error: true,
|
|
399
|
+
tool_name: block.name,
|
|
400
|
+
};
|
|
401
|
+
}
|
|
402
|
+
// Check permissions
|
|
403
|
+
if (this.config.canUseTool) {
|
|
404
|
+
try {
|
|
405
|
+
const permission = await this.config.canUseTool(tool, block.input);
|
|
406
|
+
if (permission.behavior === 'deny') {
|
|
407
|
+
return {
|
|
408
|
+
type: 'tool_result',
|
|
409
|
+
tool_use_id: block.id,
|
|
410
|
+
content: permission.message || `Permission denied for tool "${block.name}"`,
|
|
411
|
+
is_error: true,
|
|
412
|
+
tool_name: block.name,
|
|
413
|
+
};
|
|
414
|
+
}
|
|
415
|
+
if (permission.updatedInput !== undefined) {
|
|
416
|
+
block = { ...block, input: permission.updatedInput };
|
|
417
|
+
}
|
|
418
|
+
}
|
|
419
|
+
catch (err) {
|
|
420
|
+
return {
|
|
421
|
+
type: 'tool_result',
|
|
422
|
+
tool_use_id: block.id,
|
|
423
|
+
content: `Permission check error: ${err.message}`,
|
|
424
|
+
is_error: true,
|
|
425
|
+
tool_name: block.name,
|
|
426
|
+
};
|
|
427
|
+
}
|
|
428
|
+
}
|
|
429
|
+
// Hook: PreToolUse
|
|
430
|
+
const preHookResults = await this.executeHooks('PreToolUse', {
|
|
431
|
+
toolName: block.name,
|
|
432
|
+
toolInput: block.input,
|
|
433
|
+
toolUseId: block.id,
|
|
434
|
+
});
|
|
435
|
+
// Check if any hook blocks this tool
|
|
436
|
+
if (preHookResults.some((r) => r.block)) {
|
|
437
|
+
const msg = preHookResults.find((r) => r.message)?.message || 'Blocked by PreToolUse hook';
|
|
438
|
+
return {
|
|
439
|
+
type: 'tool_result',
|
|
440
|
+
tool_use_id: block.id,
|
|
441
|
+
content: msg,
|
|
442
|
+
is_error: true,
|
|
443
|
+
tool_name: block.name,
|
|
444
|
+
};
|
|
445
|
+
}
|
|
446
|
+
// Execute the tool
|
|
447
|
+
try {
|
|
448
|
+
const result = await tool.call(block.input, context);
|
|
449
|
+
// Hook: PostToolUse
|
|
450
|
+
await this.executeHooks('PostToolUse', {
|
|
451
|
+
toolName: block.name,
|
|
452
|
+
toolInput: block.input,
|
|
453
|
+
toolOutput: typeof result.content === 'string' ? result.content : JSON.stringify(result.content),
|
|
454
|
+
toolUseId: block.id,
|
|
455
|
+
});
|
|
456
|
+
return { ...result, tool_use_id: block.id, tool_name: block.name };
|
|
457
|
+
}
|
|
458
|
+
catch (err) {
|
|
459
|
+
// Hook: PostToolUseFailure
|
|
460
|
+
await this.executeHooks('PostToolUseFailure', {
|
|
461
|
+
toolName: block.name,
|
|
462
|
+
toolInput: block.input,
|
|
463
|
+
toolUseId: block.id,
|
|
464
|
+
error: err.message,
|
|
465
|
+
});
|
|
466
|
+
return {
|
|
467
|
+
type: 'tool_result',
|
|
468
|
+
tool_use_id: block.id,
|
|
469
|
+
content: `Tool execution error: ${err.message}`,
|
|
470
|
+
is_error: true,
|
|
471
|
+
tool_name: block.name,
|
|
472
|
+
};
|
|
473
|
+
}
|
|
474
|
+
}
|
|
475
|
+
/**
|
|
476
|
+
* Get current messages for session persistence.
|
|
477
|
+
*/
|
|
478
|
+
getMessages() {
|
|
479
|
+
return [...this.messages];
|
|
480
|
+
}
|
|
481
|
+
/**
|
|
482
|
+
* Get total usage across all turns.
|
|
483
|
+
*/
|
|
484
|
+
getUsage() {
|
|
485
|
+
return { ...this.totalUsage };
|
|
486
|
+
}
|
|
487
|
+
/**
|
|
488
|
+
* Get total cost.
|
|
489
|
+
*/
|
|
490
|
+
getCost() {
|
|
491
|
+
return this.totalCost;
|
|
492
|
+
}
|
|
493
|
+
}
|
|
494
|
+
//# sourceMappingURL=engine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"engine.js","sourceRoot":"","sources":["../src/engine.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAgBH,OAAO,EAEL,YAAY,GAEb,MAAM,mBAAmB,CAAA;AAC1B,OAAO,EACL,iBAAiB,EACjB,mBAAmB,EACnB,oBAAoB,EACpB,sBAAsB,GAEvB,MAAM,oBAAoB,CAAA;AAC3B,OAAO,EACL,SAAS,EACT,oBAAoB,GACrB,MAAM,kBAAkB,CAAA;AACzB,OAAO,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAA;AACrE,OAAO,EAAE,uBAAuB,EAAE,MAAM,qBAAqB,CAAA;AAG7D,+EAA+E;AAC/E,yBAAyB;AACzB,+EAA+E;AAE/E,uEAAuE;AACvE,SAAS,cAAc,CAAC,IAAoB;IAC1C,OAAO;QACL,IAAI,EAAE,IAAI,CAAC,IAAI;QACf,WAAW,EAAE,IAAI,CAAC,WAAW;QAC7B,YAAY,EAAE,IAAI,CAAC,WAAW;KAC/B,CAAA;AACH,CAAC;AAaD,+EAA+E;AAC/E,wBAAwB;AACxB,+EAA+E;AAE/E,KAAK,UAAU,iBAAiB,CAAC,MAAyB;IACxD,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAAA;QAChC,OAAO,MAAM,CAAC,kBAAkB;YAC9B,CAAC,CAAC,IAAI,GAAG,MAAM,GAAG,MAAM,CAAC,kBAAkB;YAC3C,CAAC,CAAC,IAAI,CAAA;IACV,CAAC;IAED,MAAM,KAAK,GAAa,EAAE,CAAA;IAE1B,KAAK,CAAC,IAAI,CACR,+GAA+G,EAC/G,iGAAiG,CAClG,CAAA;IAED,yCAAyC;IACzC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;IACnC,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QAChC,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,CAAC,IAAI,OAAO,IAAI,CAAC,WAAW,EAAE,CAAC,CAAA;IACvD,CAAC;IAED,wBAAwB;IACxB,IAAI,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC3D,KAAK,CAAC,IAAI,CAAC,2BAA2B,CAAC,CAAA;QACvC,KAAK,MAAM,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,MAAM,CAAC,EAAE,CAAC;YACxD,KAAK,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC,CAAA;QACjD,CAAC;IACH,CAAC;IAED,oCAAoC;IACpC,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QACjD,IAAI,MAAM,EAAE,CAAC;YACX,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAA;YAC/B,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACpB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IAED,gCAAgC;IAChC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,MAAM,cAAc,CAAC,MAAM,CAAC,GAAG,CAAC,CAAA;QAChD,IAAI,OAAO,EAAE,CAAC;YACZ,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAA;YACnC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;QACrB,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,yBAAyB;IAC3B,CAAC;IAED,oBAAoB;IACpB,KAAK,CAAC,IAAI,CAAC,0BAA0B,MAAM,CAAC,GAAG,EAAE,CAAC,CAAA;IAElD,IAAI,MAAM,CAAC,kBAAkB,EAAE,CAAC;QAC9B,KAAK,CAAC,IAAI,CAAC,IAAI,GAAG,MAAM,CAAC,kBAAkB,CAAC,CAAA;IAC9C,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AACzB,CAAC;AAED,+EAA+E;AAC/E,cAAc;AACd,+EAA+E;AAE/E,MAAM,OAAO,WAAW;IACd,MAAM,CAAmB;IACzB,QAAQ,CAAa;IACtB,QAAQ,GAA6B,EAAE,CAAA;IACtC,UAAU,GAAe,EAAE,YAAY,EAAE,CAAC,EAAE,aAAa,EAAE,CAAC,EAAE,CAAA;IAC9D,SAAS,GAAG,CAAC,CAAA;IACb,SAAS,GAAG,CAAC,CAAA;IACb,YAAY,CAAkB;IAC9B,SAAS,CAAQ;IACjB,SAAS,GAAG,CAAC,CAAA;IACb,YAAY,CAAe;IAEnC,YAAY,MAAyB;QACnC,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;QACpB,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,QAAQ,CAAA;QAC/B,IAAI,CAAC,YAAY,GAAG,sBAAsB,EAAE,CAAA;QAC5C,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,SAAS,IAAI,MAAM,CAAC,UAAU,EAAE,CAAA;QACxD,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,YAAY,CAAA;IACzC,CAAC;IAED;;;OAGG;IACK,KAAK,CAAC,YAAY,CACxB,KAAqC,EACrC,KAA0B;QAE1B,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,EAAE,CAAA;QAClD,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,KAAK,EAAE;gBAC5C,KAAK;gBACL,SAAS,EAAE,IAAI,CAAC,SAAS;gBACzB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;gBACpB,GAAG,KAAK;aACT,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED;;;OAGG;IACH,KAAK,CAAC,CAAC,aAAa,CAClB,MAAsB;QAEtB,qBAAqB;QACrB,MAAM,IAAI,CAAC,YAAY,CAAC,cAAc,CAAC,CAAA;QAEvC,yBAAyB;QACzB,MAAM,eAAe,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE;YAClE,SAAS,EAAE,MAAM;SAClB,CAAC,CAAA;QACF,0CAA0C;QAC1C,IAAI,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACzC,MAAM;gBACJ,IAAI,EAAE,QAAQ;gBACd,OAAO,EAAE,wBAAwB;gBACjC,QAAQ,EAAE,IAAI;gBACd,KAAK,EAAE,IAAI,CAAC,UAAU;gBACtB,SAAS,EAAE,CAAC;gBACZ,IAAI,EAAE,CAAC;gBACP,MAAM,EAAE,CAAC,kCAAkC,CAAC;aAC7C,CAAA;YACD,OAAM;QACR,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAa,EAAE,CAAC,CAAA;QAE5D,sCAAsC;QACtC,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,CAAA;QAEnD,sBAAsB;QACtB,MAAM,YAAY,GAAG,MAAM,iBAAiB,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QAEzD,2BAA2B;QAC3B,MAAM;YACJ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,MAAM;YACf,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC;YACzC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;YACpB,WAAW,EAAE,EAAE;YACf,eAAe,EAAE,mBAAmB;SACvB,CAAA;QAEf,eAAe;QACf,IAAI,cAAc,GAAG,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAA;QACzC,IAAI,cAAc,GAAG,KAAK,CAAA;QAC1B,IAAI,yBAAyB,GAAG,CAAC,CAAA;QACjC,MAAM,mBAAmB,GAAG,CAAC,CAAA;QAE7B,OAAO,cAAc,GAAG,CAAC,EAAE,CAAC;YAC1B,IAAI,IAAI,CAAC,MAAM,CAAC,WAAW,EAAE,OAAO;gBAAE,MAAK;YAE3C,eAAe;YACf,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,IAAI,IAAI,CAAC,SAAS,IAAI,IAAI,CAAC,MAAM,CAAC,YAAY,EAAE,CAAC;gBAC3E,cAAc,GAAG,IAAI,CAAA;gBACrB,MAAK;YACP,CAAC;YAED,uCAAuC;YACvC,IAAI,iBAAiB,CAAC,IAAI,CAAC,QAAiB,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,YAAY,CAAC,EAAE,CAAC;gBACpF,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;gBACrC,IAAI,CAAC;oBACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,IAAI,CAAC,QAAiB,EACtB,IAAI,CAAC,YAAY,CAClB,CAAA;oBACD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAA6C,CAAA;oBACpE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAA;oBAChC,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;gBACxC,CAAC;gBAAC,MAAM,CAAC;oBACP,qCAAqC;gBACvC,CAAC;YACH,CAAC;YAED,6CAA6C;YAC7C,MAAM,WAAW,GAAG,oBAAoB,CACtC,uBAAuB,CAAC,IAAI,CAAC,QAAiB,CAAC,CACpB,CAAA;YAE7B,IAAI,CAAC,SAAS,EAAE,CAAA;YAChB,cAAc,EAAE,CAAA;YAEhB,wCAAwC;YACxC,IAAI,QAA+B,CAAA;YACnC,MAAM,QAAQ,GAAG,WAAW,CAAC,GAAG,EAAE,CAAA;YAClC,IAAI,CAAC;gBACH,QAAQ,GAAG,MAAM,SAAS,CACxB,KAAK,IAAI,EAAE;oBACT,OAAO,IAAI,CAAC,QAAQ,CAAC,aAAa,CAAC;wBACjC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;wBACxB,SAAS,EAAE,IAAI,CAAC,MAAM,CAAC,SAAS;wBAChC,MAAM,EAAE,YAAY;wBACpB,QAAQ,EAAE,WAAW;wBACrB,KAAK,EAAE,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,SAAS;wBAC3C,QAAQ,EACN,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,IAAI,KAAK,SAAS;4BACxC,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY;4BAC/B,CAAC,CAAC;gCACE,IAAI,EAAE,SAAS;gCACf,aAAa,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY;6BACjD;4BACH,CAAC,CAAC,SAAS;qBAChB,CAAC,CAAA;gBACJ,CAAC,EACD,SAAS,EACT,IAAI,CAAC,MAAM,CAAC,WAAW,CACxB,CAAA;YACH,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,uCAAuC;gBACvC,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC;oBAC9D,IAAI,CAAC;wBACH,MAAM,MAAM,GAAG,MAAM,mBAAmB,CACtC,IAAI,CAAC,QAAQ,EACb,IAAI,CAAC,MAAM,CAAC,KAAK,EACjB,IAAI,CAAC,QAAiB,EACtB,IAAI,CAAC,YAAY,CAClB,CAAA;wBACD,IAAI,CAAC,QAAQ,GAAG,MAAM,CAAC,iBAA6C,CAAA;wBACpE,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,KAAK,CAAA;wBAChC,cAAc,EAAE,CAAA,CAAC,kBAAkB;wBACnC,IAAI,CAAC,SAAS,EAAE,CAAA;wBAChB,SAAQ;oBACV,CAAC;oBAAC,MAAM,CAAC;wBACP,yBAAyB;oBAC3B,CAAC;gBACH,CAAC;gBAED,MAAM;oBACJ,IAAI,EAAE,QAAQ;oBACd,OAAO,EAAE,OAAO;oBAChB,KAAK,EAAE,IAAI,CAAC,UAAU;oBACtB,SAAS,EAAE,IAAI,CAAC,SAAS;oBACzB,IAAI,EAAE,IAAI,CAAC,SAAS;iBACrB,CAAA;gBACD,OAAM;YACR,CAAC;YAED,mBAAmB;YACnB,IAAI,CAAC,SAAS,IAAI,WAAW,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAA;YAE9C,uCAAuC;YACvC,IAAI,QAAQ,CAAC,KAAK,EAAE,CAAC;gBACnB,IAAI,CAAC,UAAU,CAAC,YAAY,IAAI,QAAQ,CAAC,KAAK,CAAC,YAAY,CAAA;gBAC3D,IAAI,CAAC,UAAU,CAAC,aAAa,IAAI,QAAQ,CAAC,KAAK,CAAC,aAAa,CAAA;gBAC7D,IAAI,QAAQ,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC;oBAC/C,IAAI,CAAC,UAAU,CAAC,2BAA2B;wBACzC,CAAC,IAAI,CAAC,UAAU,CAAC,2BAA2B,IAAI,CAAC,CAAC;4BAClD,QAAQ,CAAC,KAAK,CAAC,2BAA2B,CAAA;gBAC9C,CAAC;gBACD,IAAI,QAAQ,CAAC,KAAK,CAAC,uBAAuB,EAAE,CAAC;oBAC3C,IAAI,CAAC,UAAU,CAAC,uBAAuB;wBACrC,CAAC,IAAI,CAAC,UAAU,CAAC,uBAAuB,IAAI,CAAC,CAAC;4BAC9C,QAAQ,CAAC,KAAK,CAAC,uBAAuB,CAAA;gBAC1C,CAAC;gBACD,IAAI,CAAC,SAAS,IAAI,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAA;YACnE,CAAC;YAED,wCAAwC;YACxC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,QAAQ,CAAC,OAAc,EAAE,CAAC,CAAA;YAE3E,0BAA0B;YAC1B,MAAM;gBACJ,IAAI,EAAE,WAAW;gBACjB,OAAO,EAAE;oBACP,IAAI,EAAE,WAAW;oBACjB,OAAO,EAAE,QAAQ,CAAC,OAAc;iBACjC;aACF,CAAA;YAED,oCAAoC;YACpC,IACE,QAAQ,CAAC,UAAU,KAAK,YAAY;gBACpC,yBAAyB,GAAG,mBAAmB,EAC/C,CAAC;gBACD,yBAAyB,EAAE,CAAA;gBAC3B,0BAA0B;gBAC1B,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;oBACjB,IAAI,EAAE,MAAM;oBACZ,OAAO,EAAE,0CAA0C;iBACpD,CAAC,CAAA;gBACF,SAAQ;YACV,CAAC;YAED,qBAAqB;YACrB,MAAM,aAAa,GAAG,QAAQ,CAAC,OAAO,CAAC,MAAM,CAC3C,CAAC,KAAK,EAAyB,EAAE,CAAC,KAAK,CAAC,IAAI,KAAK,UAAU,CAC5D,CAAA;YAED,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBAC/B,MAAK,CAAC,gCAAgC;YACxC,CAAC;YAED,2DAA2D;YAC3D,yBAAyB,GAAG,CAAC,CAAA;YAE7B,yDAAyD;YACzD,MAAM,WAAW,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,CAAC,CAAA;YAE1D,qBAAqB;YACrB,KAAK,MAAM,MAAM,IAAI,WAAW,EAAE,CAAC;gBACjC,MAAM;oBACJ,IAAI,EAAE,aAAa;oBACnB,MAAM,EAAE;wBACN,WAAW,EAAE,MAAM,CAAC,WAAW;wBAC/B,SAAS,EAAE,MAAM,CAAC,SAAS,IAAI,EAAE;wBACjC,MAAM,EACJ,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ;4BAChC,CAAC,CAAC,MAAM,CAAC,OAAO;4BAChB,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;qBACrC;iBACF,CAAA;YACH,CAAC;YAED,mCAAmC;YACnC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACjB,IAAI,EAAE,MAAM;gBACZ,OAAO,EAAE,WAAW,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBAC/B,IAAI,EAAE,aAAsB;oBAC5B,WAAW,EAAE,CAAC,CAAC,WAAW;oBAC1B,OAAO,EACL,OAAO,CAAC,CAAC,OAAO,KAAK,QAAQ;wBAC3B,CAAC,CAAC,CAAC,CAAC,OAAO;wBACX,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC;oBAC/B,QAAQ,EAAE,CAAC,CAAC,QAAQ;iBACrB,CAAC,CAAC;aACJ,CAAC,CAAA;YAEF,IAAI,QAAQ,CAAC,UAAU,KAAK,UAAU;gBAAE,MAAK;QAC/C,CAAC;QAED,mCAAmC;QACnC,MAAM,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAA;QAE/B,mBAAmB;QACnB,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,CAAC,CAAA;QAErC,8BAA8B;QAC9B,MAAM,UAAU,GAAG,cAAc;YAC/B,CAAC,CAAC,sBAAsB;YACxB,CAAC,CAAC,cAAc,IAAI,CAAC;gBACnB,CAAC,CAAC,iBAAiB;gBACnB,CAAC,CAAC,SAAS,CAAA;QAEf,MAAM;YACJ,IAAI,EAAE,QAAQ;YACd,OAAO,EAAE,UAAU;YACnB,UAAU,EAAE,IAAI,CAAC,SAAS;YAC1B,QAAQ,EAAE,UAAU,KAAK,SAAS;YAClC,SAAS,EAAE,IAAI,CAAC,SAAS;YACzB,cAAc,EAAE,IAAI,CAAC,SAAS;YAC9B,eAAe,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC;YAC3C,KAAK,EAAE,IAAI,CAAC,UAAU;YACtB,WAAW,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,EAAE,YAAY,EAAE,IAAI,CAAC,UAAU,CAAC,YAAY,EAAE,aAAa,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa,EAAE,EAAE;YAClI,IAAI,EAAE,IAAI,CAAC,SAAS;SACrB,CAAA;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,YAAY,CACxB,aAA6B;QAE7B,MAAM,OAAO,GAAgB;YAC3B,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC,GAAG;YACpB,WAAW,EAAE,IAAI,CAAC,MAAM,CAAC,WAAW;YACpC,QAAQ,EAAE,IAAI,CAAC,QAAQ;YACvB,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,KAAK;YACxB,OAAO,EAAE,IAAI,CAAC,QAAQ,CAAC,OAAO;SAC/B,CAAA;QAED,MAAM,eAAe,GAAG,QAAQ,CAC9B,OAAO,CAAC,GAAG,CAAC,8BAA8B,IAAI,IAAI,CACnD,CAAA;QAED,8DAA8D;QAC9D,MAAM,QAAQ,GAA0D,EAAE,CAAA;QAC1E,MAAM,SAAS,GAA0D,EAAE,CAAA;QAE3E,KAAK,MAAM,KAAK,IAAI,aAAa,EAAE,CAAC;YAClC,MAAM,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,KAAK,CAAC,IAAI,CAAC,CAAA;YACjE,IAAI,IAAI,EAAE,UAAU,EAAE,EAAE,EAAE,CAAC;gBACzB,QAAQ,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YAChC,CAAC;iBAAM,CAAC;gBACN,SAAS,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QAED,MAAM,OAAO,GAA4C,EAAE,CAAA;QAE3D,oEAAoE;QACpE,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,IAAI,eAAe,EAAE,CAAC;YAC1D,MAAM,KAAK,GAAG,QAAQ,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,eAAe,CAAC,CAAA;YACpD,MAAM,YAAY,GAAG,MAAM,OAAO,CAAC,GAAG,CACpC,KAAK,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CACjB,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CACvD,CACF,CAAA;YACD,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,CAAC,CAAA;QAC/B,CAAC;QAED,sCAAsC;QACtC,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;YAC7B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAA;YAC3E,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;QACtB,CAAC;QAED,OAAO,OAAO,CAAA;IAChB,CAAC;IAED;;OAEG;IACK,KAAK,CAAC,iBAAiB,CAC7B,KAAmB,EACnB,IAAgC,EAChC,OAAoB;QAEpB,IAAI,CAAC,IAAI,EAAE,CAAC;YACV,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,KAAK,CAAC,EAAE;gBACrB,OAAO,EAAE,wBAAwB,KAAK,CAAC,IAAI,GAAG;gBAC9C,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,KAAK,CAAC,IAAI;aACtB,CAAA;QACH,CAAC;QAED,gBAAgB;QAChB,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,EAAE,CAAC;YACxC,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,KAAK,CAAC,EAAE;gBACrB,OAAO,EAAE,gBAAgB,KAAK,CAAC,IAAI,kBAAkB;gBACrD,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,KAAK,CAAC,IAAI;aACtB,CAAA;QACH,CAAC;QAED,oBAAoB;QACpB,IAAI,IAAI,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC;YAC3B,IAAI,CAAC;gBACH,MAAM,UAAU,GAAG,MAAM,IAAI,CAAC,MAAM,CAAC,UAAU,CAAC,IAAI,EAAE,KAAK,CAAC,KAAK,CAAC,CAAA;gBAClE,IAAI,UAAU,CAAC,QAAQ,KAAK,MAAM,EAAE,CAAC;oBACnC,OAAO;wBACL,IAAI,EAAE,aAAa;wBACnB,WAAW,EAAE,KAAK,CAAC,EAAE;wBACrB,OAAO,EAAE,UAAU,CAAC,OAAO,IAAI,+BAA+B,KAAK,CAAC,IAAI,GAAG;wBAC3E,QAAQ,EAAE,IAAI;wBACd,SAAS,EAAE,KAAK,CAAC,IAAI;qBACtB,CAAA;gBACH,CAAC;gBACD,IAAI,UAAU,CAAC,YAAY,KAAK,SAAS,EAAE,CAAC;oBAC1C,KAAK,GAAG,EAAE,GAAG,KAAK,EAAE,KAAK,EAAE,UAAU,CAAC,YAAY,EAAE,CAAA;gBACtD,CAAC;YACH,CAAC;YAAC,OAAO,GAAQ,EAAE,CAAC;gBAClB,OAAO;oBACL,IAAI,EAAE,aAAa;oBACnB,WAAW,EAAE,KAAK,CAAC,EAAE;oBACrB,OAAO,EAAE,2BAA2B,GAAG,CAAC,OAAO,EAAE;oBACjD,QAAQ,EAAE,IAAI;oBACd,SAAS,EAAE,KAAK,CAAC,IAAI;iBACtB,CAAA;YACH,CAAC;QACH,CAAC;QAED,mBAAmB;QACnB,MAAM,cAAc,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE;YAC3D,QAAQ,EAAE,KAAK,CAAC,IAAI;YACpB,SAAS,EAAE,KAAK,CAAC,KAAK;YACtB,SAAS,EAAE,KAAK,CAAC,EAAE;SACpB,CAAC,CAAA;QACF,qCAAqC;QACrC,IAAI,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC;YACxC,MAAM,GAAG,GAAG,cAAc,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,EAAE,OAAO,IAAI,4BAA4B,CAAA;YAC1F,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,KAAK,CAAC,EAAE;gBACrB,OAAO,EAAE,GAAG;gBACZ,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,KAAK,CAAC,IAAI;aACtB,CAAA;QACH,CAAC;QAED,mBAAmB;QACnB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,OAAO,CAAC,CAAA;YAEpD,oBAAoB;YACpB,MAAM,IAAI,CAAC,YAAY,CAAC,aAAa,EAAE;gBACrC,QAAQ,EAAE,KAAK,CAAC,IAAI;gBACpB,SAAS,EAAE,KAAK,CAAC,KAAK;gBACtB,UAAU,EAAE,OAAO,MAAM,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC;gBAChG,SAAS,EAAE,KAAK,CAAC,EAAE;aACpB,CAAC,CAAA;YAEF,OAAO,EAAE,GAAG,MAAM,EAAE,WAAW,EAAE,KAAK,CAAC,EAAE,EAAE,SAAS,EAAE,KAAK,CAAC,IAAI,EAAE,CAAA;QACpE,CAAC;QAAC,OAAO,GAAQ,EAAE,CAAC;YAClB,2BAA2B;YAC3B,MAAM,IAAI,CAAC,YAAY,CAAC,oBAAoB,EAAE;gBAC5C,QAAQ,EAAE,KAAK,CAAC,IAAI;gBACpB,SAAS,EAAE,KAAK,CAAC,KAAK;gBACtB,SAAS,EAAE,KAAK,CAAC,EAAE;gBACnB,KAAK,EAAE,GAAG,CAAC,OAAO;aACnB,CAAC,CAAA;YAEF,OAAO;gBACL,IAAI,EAAE,aAAa;gBACnB,WAAW,EAAE,KAAK,CAAC,EAAE;gBACrB,OAAO,EAAE,yBAAyB,GAAG,CAAC,OAAO,EAAE;gBAC/C,QAAQ,EAAE,IAAI;gBACd,SAAS,EAAE,KAAK,CAAC,IAAI;aACtB,CAAA;QACH,CAAC;IACH,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAA;IAC3B,CAAC;IAED;;OAEG;IACH,QAAQ;QACN,OAAO,EAAE,GAAG,IAAI,CAAC,UAAU,EAAE,CAAA;IAC/B,CAAC;IAED;;OAEG;IACH,OAAO;QACL,OAAO,IAAI,CAAC,SAAS,CAAA;IACvB,CAAC;CACF"}
|
package/dist/hooks.d.ts
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Hook System
|
|
3
|
+
*
|
|
4
|
+
* Lifecycle hooks for intercepting agent behavior.
|
|
5
|
+
* Supports pre/post tool use, session lifecycle, and custom events.
|
|
6
|
+
*
|
|
7
|
+
* Hook events:
|
|
8
|
+
* - PreToolUse: before tool execution
|
|
9
|
+
* - PostToolUse: after tool execution
|
|
10
|
+
* - PostToolUseFailure: after tool failure
|
|
11
|
+
* - SessionStart: session initialization
|
|
12
|
+
* - SessionEnd: session cleanup
|
|
13
|
+
* - Stop: when turn completes
|
|
14
|
+
* - SubagentStart: subagent spawned
|
|
15
|
+
* - SubagentStop: subagent completed
|
|
16
|
+
* - UserPromptSubmit: user sends message
|
|
17
|
+
* - PermissionRequest: permission check triggered
|
|
18
|
+
* - TaskCreated: task created
|
|
19
|
+
* - TaskCompleted: task finished
|
|
20
|
+
* - ConfigChange: settings changed
|
|
21
|
+
* - CwdChanged: working directory changed
|
|
22
|
+
* - FileChanged: file modified
|
|
23
|
+
* - Notification: system notification
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* All supported hook events.
|
|
27
|
+
*/
|
|
28
|
+
export declare const HOOK_EVENTS: readonly ["PreToolUse", "PostToolUse", "PostToolUseFailure", "SessionStart", "SessionEnd", "Stop", "SubagentStart", "SubagentStop", "UserPromptSubmit", "PermissionRequest", "PermissionDenied", "TaskCreated", "TaskCompleted", "ConfigChange", "CwdChanged", "FileChanged", "Notification", "PreCompact", "PostCompact", "TeammateIdle"];
|
|
29
|
+
export type HookEvent = typeof HOOK_EVENTS[number];
|
|
30
|
+
/**
|
|
31
|
+
* Hook definition.
|
|
32
|
+
*/
|
|
33
|
+
export interface HookDefinition {
|
|
34
|
+
/** Shell command or function to execute */
|
|
35
|
+
command?: string;
|
|
36
|
+
/** Function handler */
|
|
37
|
+
handler?: (input: HookInput) => Promise<HookOutput | void>;
|
|
38
|
+
/** Tool name matcher (regex pattern) */
|
|
39
|
+
matcher?: string;
|
|
40
|
+
/** Timeout in milliseconds */
|
|
41
|
+
timeout?: number;
|
|
42
|
+
}
|
|
43
|
+
/**
|
|
44
|
+
* Hook input passed to handlers.
|
|
45
|
+
*/
|
|
46
|
+
export interface HookInput {
|
|
47
|
+
event: HookEvent;
|
|
48
|
+
toolName?: string;
|
|
49
|
+
toolInput?: unknown;
|
|
50
|
+
toolOutput?: unknown;
|
|
51
|
+
toolUseId?: string;
|
|
52
|
+
sessionId?: string;
|
|
53
|
+
cwd?: string;
|
|
54
|
+
error?: string;
|
|
55
|
+
[key: string]: unknown;
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Hook output returned by handlers.
|
|
59
|
+
*/
|
|
60
|
+
export interface HookOutput {
|
|
61
|
+
/** Message to append to conversation */
|
|
62
|
+
message?: string;
|
|
63
|
+
/** Permission update */
|
|
64
|
+
permissionUpdate?: {
|
|
65
|
+
tool: string;
|
|
66
|
+
behavior: 'allow' | 'deny';
|
|
67
|
+
};
|
|
68
|
+
/** Whether to block the action */
|
|
69
|
+
block?: boolean;
|
|
70
|
+
/** Notification */
|
|
71
|
+
notification?: {
|
|
72
|
+
title: string;
|
|
73
|
+
body: string;
|
|
74
|
+
level?: 'info' | 'warning' | 'error';
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
/**
|
|
78
|
+
* Hook configuration (from settings).
|
|
79
|
+
*/
|
|
80
|
+
export type HookConfig = Record<string, HookDefinition[]>;
|
|
81
|
+
/**
|
|
82
|
+
* Hook registry for managing and executing hooks.
|
|
83
|
+
*/
|
|
84
|
+
export declare class HookRegistry {
|
|
85
|
+
private hooks;
|
|
86
|
+
/**
|
|
87
|
+
* Register hooks from configuration.
|
|
88
|
+
*/
|
|
89
|
+
registerFromConfig(config: HookConfig): void;
|
|
90
|
+
/**
|
|
91
|
+
* Register a single hook.
|
|
92
|
+
*/
|
|
93
|
+
register(event: HookEvent, definition: HookDefinition): void;
|
|
94
|
+
/**
|
|
95
|
+
* Execute hooks for an event.
|
|
96
|
+
*/
|
|
97
|
+
execute(event: HookEvent, input: HookInput): Promise<HookOutput[]>;
|
|
98
|
+
/**
|
|
99
|
+
* Check if any hooks are registered for an event.
|
|
100
|
+
*/
|
|
101
|
+
hasHooks(event: HookEvent): boolean;
|
|
102
|
+
/**
|
|
103
|
+
* Clear all hooks.
|
|
104
|
+
*/
|
|
105
|
+
clear(): void;
|
|
106
|
+
}
|
|
107
|
+
/**
|
|
108
|
+
* Create a default hook registry.
|
|
109
|
+
*/
|
|
110
|
+
export declare function createHookRegistry(config?: HookConfig): HookRegistry;
|
|
111
|
+
//# sourceMappingURL=hooks.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"hooks.d.ts","sourceRoot":"","sources":["../src/hooks.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAIH;;GAEG;AACH,eAAO,MAAM,WAAW,4UAqBd,CAAA;AAEV,MAAM,MAAM,SAAS,GAAG,OAAO,WAAW,CAAC,MAAM,CAAC,CAAA;AAElD;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,2CAA2C;IAC3C,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,uBAAuB;IACvB,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,SAAS,KAAK,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAAA;IAC1D,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,8BAA8B;IAC9B,OAAO,CAAC,EAAE,MAAM,CAAA;CACjB;AAED;;GAEG;AACH,MAAM,WAAW,SAAS;IACxB,KAAK,EAAE,SAAS,CAAA;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAA;IACjB,SAAS,CAAC,EAAE,OAAO,CAAA;IACnB,UAAU,CAAC,EAAE,OAAO,CAAA;IACpB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,SAAS,CAAC,EAAE,MAAM,CAAA;IAClB,GAAG,CAAC,EAAE,MAAM,CAAA;IACZ,KAAK,CAAC,EAAE,MAAM,CAAA;IACd,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAA;CACvB;AAED;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,wCAAwC;IACxC,OAAO,CAAC,EAAE,MAAM,CAAA;IAChB,wBAAwB;IACxB,gBAAgB,CAAC,EAAE;QACjB,IAAI,EAAE,MAAM,CAAA;QACZ,QAAQ,EAAE,OAAO,GAAG,MAAM,CAAA;KAC3B,CAAA;IACD,kCAAkC;IAClC,KAAK,CAAC,EAAE,OAAO,CAAA;IACf,mBAAmB;IACnB,YAAY,CAAC,EAAE;QACb,KAAK,EAAE,MAAM,CAAA;QACb,IAAI,EAAE,MAAM,CAAA;QACZ,KAAK,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;KACrC,CAAA;CACF;AAED;;GAEG;AACH,MAAM,MAAM,UAAU,GAAG,MAAM,CAAC,MAAM,EAAE,cAAc,EAAE,CAAC,CAAA;AAEzD;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAA8C;IAE3D;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,UAAU,GAAG,IAAI;IAU5C;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,cAAc,GAAG,IAAI;IAM5D;;OAEG;IACG,OAAO,CACX,KAAK,EAAE,SAAS,EAChB,KAAK,EAAE,SAAS,GACf,OAAO,CAAC,UAAU,EAAE,CAAC;IAuCxB;;OAEG;IACH,QAAQ,CAAC,KAAK,EAAE,SAAS,GAAG,OAAO;IAInC;;OAEG;IACH,KAAK,IAAI,IAAI;CAGd;AAuDD;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,MAAM,CAAC,EAAE,UAAU,GAAG,YAAY,CAMpE"}
|