open-agent-sdk 0.1.0-alpha.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/LICENSE +21 -0
- package/README.md +284 -0
- package/README.zh.md +285 -0
- package/dist/agent/agent-definition.d.ts +107 -0
- package/dist/agent/agent-definition.d.ts.map +1 -0
- package/dist/agent/agent-definition.js +90 -0
- package/dist/agent/agent-definition.js.map +1 -0
- package/dist/agent/react-loop.d.ts +117 -0
- package/dist/agent/react-loop.d.ts.map +1 -0
- package/dist/agent/react-loop.js +674 -0
- package/dist/agent/react-loop.js.map +1 -0
- package/dist/agent/subagent-runner.d.ts +67 -0
- package/dist/agent/subagent-runner.d.ts.map +1 -0
- package/dist/agent/subagent-runner.js +168 -0
- package/dist/agent/subagent-runner.js.map +1 -0
- package/dist/hooks/index.d.ts +8 -0
- package/dist/hooks/index.d.ts.map +1 -0
- package/dist/hooks/index.js +9 -0
- package/dist/hooks/index.js.map +1 -0
- package/dist/hooks/inputs.d.ts +56 -0
- package/dist/hooks/inputs.d.ts.map +1 -0
- package/dist/hooks/inputs.js +150 -0
- package/dist/hooks/inputs.js.map +1 -0
- package/dist/hooks/manager.d.ts +63 -0
- package/dist/hooks/manager.d.ts.map +1 -0
- package/dist/hooks/manager.js +137 -0
- package/dist/hooks/manager.js.map +1 -0
- package/dist/hooks/types.d.ts +191 -0
- package/dist/hooks/types.d.ts.map +1 -0
- package/dist/hooks/types.js +6 -0
- package/dist/hooks/types.js.map +1 -0
- package/dist/index.d.ts +109 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +218 -0
- package/dist/index.js.map +1 -0
- package/dist/mcp/errors.d.ts +26 -0
- package/dist/mcp/errors.d.ts.map +1 -0
- package/dist/mcp/errors.js +43 -0
- package/dist/mcp/errors.js.map +1 -0
- package/dist/mcp/index.d.ts +11 -0
- package/dist/mcp/index.d.ts.map +1 -0
- package/dist/mcp/index.js +13 -0
- package/dist/mcp/index.js.map +1 -0
- package/dist/mcp/manager.d.ts +50 -0
- package/dist/mcp/manager.d.ts.map +1 -0
- package/dist/mcp/manager.js +170 -0
- package/dist/mcp/manager.js.map +1 -0
- package/dist/mcp/server-registry.d.ts +48 -0
- package/dist/mcp/server-registry.d.ts.map +1 -0
- package/dist/mcp/server-registry.js +121 -0
- package/dist/mcp/server-registry.js.map +1 -0
- package/dist/mcp/tool-adapter.d.ts +42 -0
- package/dist/mcp/tool-adapter.d.ts.map +1 -0
- package/dist/mcp/tool-adapter.js +89 -0
- package/dist/mcp/tool-adapter.js.map +1 -0
- package/dist/mcp/types.d.ts +74 -0
- package/dist/mcp/types.d.ts.map +1 -0
- package/dist/mcp/types.js +21 -0
- package/dist/mcp/types.js.map +1 -0
- package/dist/permissions/index.d.ts +3 -0
- package/dist/permissions/index.d.ts.map +1 -0
- package/dist/permissions/index.js +4 -0
- package/dist/permissions/index.js.map +1 -0
- package/dist/permissions/manager.d.ts +40 -0
- package/dist/permissions/manager.d.ts.map +1 -0
- package/dist/permissions/manager.js +115 -0
- package/dist/permissions/manager.js.map +1 -0
- package/dist/permissions/types.d.ts +124 -0
- package/dist/permissions/types.d.ts.map +1 -0
- package/dist/permissions/types.js +25 -0
- package/dist/permissions/types.js.map +1 -0
- package/dist/providers/anthropic.d.ts +18 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +126 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/base.d.ts +85 -0
- package/dist/providers/base.d.ts.map +1 -0
- package/dist/providers/base.js +36 -0
- package/dist/providers/base.js.map +1 -0
- package/dist/providers/google.d.ts +12 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +123 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/openai.d.ts +12 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +110 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/session/factory.d.ts +156 -0
- package/dist/session/factory.d.ts.map +1 -0
- package/dist/session/factory.js +311 -0
- package/dist/session/factory.js.map +1 -0
- package/dist/session/index.d.ts +8 -0
- package/dist/session/index.d.ts.map +1 -0
- package/dist/session/index.js +7 -0
- package/dist/session/index.js.map +1 -0
- package/dist/session/session.d.ts +144 -0
- package/dist/session/session.d.ts.map +1 -0
- package/dist/session/session.js +319 -0
- package/dist/session/session.js.map +1 -0
- package/dist/session/storage.d.ts +105 -0
- package/dist/session/storage.d.ts.map +1 -0
- package/dist/session/storage.js +148 -0
- package/dist/session/storage.js.map +1 -0
- package/dist/tools/ask-user-question.d.ts +31 -0
- package/dist/tools/ask-user-question.d.ts.map +1 -0
- package/dist/tools/ask-user-question.js +66 -0
- package/dist/tools/ask-user-question.js.map +1 -0
- package/dist/tools/bash-output.d.ts +22 -0
- package/dist/tools/bash-output.d.ts.map +1 -0
- package/dist/tools/bash-output.js +43 -0
- package/dist/tools/bash-output.js.map +1 -0
- package/dist/tools/bash.d.ts +36 -0
- package/dist/tools/bash.d.ts.map +1 -0
- package/dist/tools/bash.js +161 -0
- package/dist/tools/bash.js.map +1 -0
- package/dist/tools/edit.d.ts +24 -0
- package/dist/tools/edit.d.ts.map +1 -0
- package/dist/tools/edit.js +83 -0
- package/dist/tools/edit.js.map +1 -0
- package/dist/tools/glob.d.ts +22 -0
- package/dist/tools/glob.d.ts.map +1 -0
- package/dist/tools/glob.js +248 -0
- package/dist/tools/glob.js.map +1 -0
- package/dist/tools/grep.d.ts +39 -0
- package/dist/tools/grep.d.ts.map +1 -0
- package/dist/tools/grep.js +312 -0
- package/dist/tools/grep.js.map +1 -0
- package/dist/tools/kill-bash.d.ts +19 -0
- package/dist/tools/kill-bash.d.ts.map +1 -0
- package/dist/tools/kill-bash.js +64 -0
- package/dist/tools/kill-bash.js.map +1 -0
- package/dist/tools/read.d.ts +26 -0
- package/dist/tools/read.d.ts.map +1 -0
- package/dist/tools/read.js +87 -0
- package/dist/tools/read.js.map +1 -0
- package/dist/tools/registry.d.ts +32 -0
- package/dist/tools/registry.d.ts.map +1 -0
- package/dist/tools/registry.js +91 -0
- package/dist/tools/registry.js.map +1 -0
- package/dist/tools/task-create.d.ts +22 -0
- package/dist/tools/task-create.d.ts.map +1 -0
- package/dist/tools/task-create.js +42 -0
- package/dist/tools/task-create.js.map +1 -0
- package/dist/tools/task-get.d.ts +19 -0
- package/dist/tools/task-get.d.ts.map +1 -0
- package/dist/tools/task-get.js +38 -0
- package/dist/tools/task-get.js.map +1 -0
- package/dist/tools/task-list.d.ts +18 -0
- package/dist/tools/task-list.d.ts.map +1 -0
- package/dist/tools/task-list.js +27 -0
- package/dist/tools/task-list.js.map +1 -0
- package/dist/tools/task-storage.d.ts +6 -0
- package/dist/tools/task-storage.d.ts.map +1 -0
- package/dist/tools/task-storage.js +83 -0
- package/dist/tools/task-storage.js.map +1 -0
- package/dist/tools/task-update.d.ts +28 -0
- package/dist/tools/task-update.d.ts.map +1 -0
- package/dist/tools/task-update.js +118 -0
- package/dist/tools/task-update.js.map +1 -0
- package/dist/tools/task.d.ts +80 -0
- package/dist/tools/task.d.ts.map +1 -0
- package/dist/tools/task.js +99 -0
- package/dist/tools/task.js.map +1 -0
- package/dist/tools/web-fetch.d.ts +21 -0
- package/dist/tools/web-fetch.d.ts.map +1 -0
- package/dist/tools/web-fetch.js +124 -0
- package/dist/tools/web-fetch.js.map +1 -0
- package/dist/tools/web-search.d.ts +20 -0
- package/dist/tools/web-search.d.ts.map +1 -0
- package/dist/tools/web-search.js +127 -0
- package/dist/tools/web-search.js.map +1 -0
- package/dist/tools/write.d.ts +22 -0
- package/dist/tools/write.d.ts.map +1 -0
- package/dist/tools/write.js +46 -0
- package/dist/tools/write.js.map +1 -0
- package/dist/types/messages.d.ts +138 -0
- package/dist/types/messages.d.ts.map +1 -0
- package/dist/types/messages.js +88 -0
- package/dist/types/messages.js.map +1 -0
- package/dist/types/task.d.ts +29 -0
- package/dist/types/task.d.ts.map +1 -0
- package/dist/types/task.js +5 -0
- package/dist/types/task.js.map +1 -0
- package/dist/types/tools.d.ts +56 -0
- package/dist/types/tools.d.ts.map +1 -0
- package/dist/types/tools.js +25 -0
- package/dist/types/tools.js.map +1 -0
- package/dist/utils/logger.d.ts +19 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +46 -0
- package/dist/utils/logger.js.map +1 -0
- package/dist/utils/uuid.d.ts +3 -0
- package/dist/utils/uuid.d.ts.map +1 -0
- package/dist/utils/uuid.js +5 -0
- package/dist/utils/uuid.js.map +1 -0
- package/package.json +38 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Octane
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,284 @@
|
|
|
1
|
+
# Open Agent SDK
|
|
2
|
+
|
|
3
|
+
[](https://twitter.com/octane0411)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
|
|
7
|
+
An open-source alternative to Claude Agent SDK — lightweight, customizable, and provider-agnostic.
|
|
8
|
+
|
|
9
|
+
[中文文档](./README.zh.md)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## What is this?
|
|
14
|
+
|
|
15
|
+
Open Agent SDK is a TypeScript framework for building AI agents. It provides a developer experience similar to Claude Agent SDK but with full transparency and no vendor lock-in.
|
|
16
|
+
|
|
17
|
+
**Key features:**
|
|
18
|
+
- **ReAct Loop** — Observation-thought-action cycle for autonomous agents
|
|
19
|
+
- **Built-in Tools** — File operations (read/write/edit), shell execution, code search (glob/grep), web search
|
|
20
|
+
- **Streaming Support** — Real-time response streaming with token usage tracking
|
|
21
|
+
- **Multi-Provider** — Works with OpenAI and Google Gemini
|
|
22
|
+
- **Session Management** — Persistent conversations with InMemory and File storage
|
|
23
|
+
- **Permission System** — 4 permission modes (default/acceptEdits/bypassPermissions/plan)
|
|
24
|
+
- **Hooks Framework** — Event-driven extensibility (9 hook events)
|
|
25
|
+
- **Subagent System** — Delegate tasks to specialized agents
|
|
26
|
+
- **Type Safety** — Full TypeScript support with strict type constraints
|
|
27
|
+
- **Cancellation** — AbortController support for interrupting long-running operations
|
|
28
|
+
|
|
29
|
+
## Installation
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install open-agent-sdk
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Or with specific package manager:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# npm
|
|
39
|
+
npm install open-agent-sdk
|
|
40
|
+
|
|
41
|
+
# yarn
|
|
42
|
+
yarn add open-agent-sdk
|
|
43
|
+
|
|
44
|
+
# pnpm
|
|
45
|
+
pnpm add open-agent-sdk
|
|
46
|
+
|
|
47
|
+
# bun
|
|
48
|
+
bun add open-agent-sdk
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**Requirements:**
|
|
52
|
+
- Bun >= 1.0.0 (primary runtime)
|
|
53
|
+
- Node.js >= 20 (with peer dependencies)
|
|
54
|
+
- TypeScript >= 5.0
|
|
55
|
+
|
|
56
|
+
## Quick Start
|
|
57
|
+
|
|
58
|
+
### Basic Usage
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
import { prompt } from 'open-agent-sdk';
|
|
62
|
+
|
|
63
|
+
const result = await prompt("What files are in the current directory?", {
|
|
64
|
+
model: 'gpt-4o',
|
|
65
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
console.log(result.result);
|
|
69
|
+
console.log(`Duration: ${result.duration_ms}ms`);
|
|
70
|
+
console.log(`Tokens: ${result.usage.input_tokens} in / ${result.usage.output_tokens} out`);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Using Gemini
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
const result = await prompt("Explain quantum computing", {
|
|
77
|
+
model: 'gemini-2.0-flash',
|
|
78
|
+
provider: 'google',
|
|
79
|
+
apiKey: process.env.GEMINI_API_KEY,
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### Session-Based Conversations
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { createSession } from 'open-agent-sdk';
|
|
87
|
+
|
|
88
|
+
const session = createSession({
|
|
89
|
+
model: 'gpt-4o',
|
|
90
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// Send message
|
|
94
|
+
await session.send("What is 5 + 3?");
|
|
95
|
+
|
|
96
|
+
// Stream the response
|
|
97
|
+
for await (const message of session.stream()) {
|
|
98
|
+
if (message.type === 'assistant') {
|
|
99
|
+
console.log(message.content);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// Continue conversation (context preserved)
|
|
104
|
+
await session.send("Multiply that by 2");
|
|
105
|
+
for await (const message of session.stream()) {
|
|
106
|
+
console.log(message.content);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
session.close();
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### Advanced Options
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
const result = await prompt("Analyze the codebase", {
|
|
116
|
+
model: 'gpt-4o',
|
|
117
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
118
|
+
systemPrompt: "You are a code review assistant.",
|
|
119
|
+
maxTurns: 15,
|
|
120
|
+
allowedTools: ['Read', 'Glob', 'Grep'],
|
|
121
|
+
cwd: './src',
|
|
122
|
+
env: { NODE_ENV: 'development' },
|
|
123
|
+
permissionMode: 'default', // 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan'
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### With Cancellation
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
const abortController = new AbortController();
|
|
131
|
+
|
|
132
|
+
setTimeout(() => abortController.abort(), 30000);
|
|
133
|
+
|
|
134
|
+
const result = await prompt("Long running analysis...", {
|
|
135
|
+
model: 'gpt-4o',
|
|
136
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
137
|
+
abortController,
|
|
138
|
+
});
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
## API Reference
|
|
142
|
+
|
|
143
|
+
### `prompt(prompt, options)`
|
|
144
|
+
|
|
145
|
+
Execute a single prompt with the agent using the ReAct loop.
|
|
146
|
+
|
|
147
|
+
**Parameters:**
|
|
148
|
+
- `prompt` (`string`): User's question or task
|
|
149
|
+
- `options` (`PromptOptions`): Configuration object
|
|
150
|
+
- `model` (`string`, **required**): Model identifier
|
|
151
|
+
- `apiKey` (`string`): API key (defaults to env var)
|
|
152
|
+
- `provider` (`'openai' | 'google'`): Provider (auto-detected if not specified)
|
|
153
|
+
- `baseURL` (`string`): Base URL for API (OpenAI-compatible)
|
|
154
|
+
- `maxTurns` (`number`): Maximum conversation turns (default: 10)
|
|
155
|
+
- `allowedTools` (`string[]`): Allowed tools whitelist
|
|
156
|
+
- `systemPrompt` (`string`): System prompt
|
|
157
|
+
- `cwd` (`string`): Working directory (default: `process.cwd()`)
|
|
158
|
+
- `env` (`Record<string, string>`): Environment variables
|
|
159
|
+
- `abortController` (`AbortController`): Cancellation support
|
|
160
|
+
- `permissionMode` (`PermissionMode`): Permission mode
|
|
161
|
+
- `hooks` (`HooksConfig`): Event hooks configuration
|
|
162
|
+
|
|
163
|
+
**Returns:** `Promise<PromptResult>`
|
|
164
|
+
- `result` (`string`): Final result text
|
|
165
|
+
- `duration_ms` (`number`): Execution time in milliseconds
|
|
166
|
+
- `usage` (`object`): Token usage statistics
|
|
167
|
+
|
|
168
|
+
### `createSession(options)` / `resumeSession(id, options)`
|
|
169
|
+
|
|
170
|
+
Create or resume a persistent conversation session.
|
|
171
|
+
|
|
172
|
+
**Methods:**
|
|
173
|
+
- `send(message: string): Promise<void>`
|
|
174
|
+
- `stream(): AsyncGenerator<SDKMessage>`
|
|
175
|
+
- `close(): void`
|
|
176
|
+
|
|
177
|
+
## Built-in Tools
|
|
178
|
+
|
|
179
|
+
| Tool | Description | Parameters |
|
|
180
|
+
|------|-------------|------------|
|
|
181
|
+
| `Read` | Read file contents, supports images | `file_path`, `offset?`, `limit?` |
|
|
182
|
+
| `Write` | Write content to a file | `file_path`, `content` |
|
|
183
|
+
| `Edit` | Edit file with search/replace | `file_path`, `old_string`, `new_string` |
|
|
184
|
+
| `Bash` | Execute shell commands | `command`, `timeout?`, `run_in_background?` |
|
|
185
|
+
| `Glob` | Find files matching patterns | `pattern`, `path?` |
|
|
186
|
+
| `Grep` | Search code with regex | `pattern`, `path?`, `output_mode?` |
|
|
187
|
+
| `WebSearch` | Search the web | `query`, `numResults?` |
|
|
188
|
+
| `WebFetch` | Fetch webpage content | `url`, `prompt?` |
|
|
189
|
+
| `Task` | Delegate to subagent (includes task management) | `description`, `prompt`, `subagent_type` |
|
|
190
|
+
|
|
191
|
+
## Provider Support
|
|
192
|
+
|
|
193
|
+
| Provider | Status | Models Tested |
|
|
194
|
+
|----------|--------|---------------|
|
|
195
|
+
| OpenAI | ✅ Supported | gpt-4o, gpt-4o-mini, gpt-4 |
|
|
196
|
+
| Google Gemini | ✅ Supported | gemini-2.0-flash, gemini-1.5-flash |
|
|
197
|
+
|
|
198
|
+
## Architecture
|
|
199
|
+
|
|
200
|
+
```
|
|
201
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
202
|
+
│ Open Agent SDK │
|
|
203
|
+
├─────────────────────────────────────────────────────────────┤
|
|
204
|
+
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
|
|
205
|
+
│ │ prompt() │ │ Session │ │ ReActLoop │ │
|
|
206
|
+
│ │ (One-shot) │ │ (Persistent) │ │ (Reason + Act) │ │
|
|
207
|
+
│ └──────┬───────┘ └──────┬───────┘ └────────┬─────────┘ │
|
|
208
|
+
│ └─────────────────┴───────────────────┘ │
|
|
209
|
+
│ │ │
|
|
210
|
+
│ ┌─────────────────┼─────────────────┐ │
|
|
211
|
+
│ ▼ ▼ ▼ │
|
|
212
|
+
│ ┌────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
213
|
+
│ │ Provider │ │ ToolRegistry │ │ Permission │ │
|
|
214
|
+
│ │(OpenAI/ │ │(Read/Write/ │ │ Manager │ │
|
|
215
|
+
│ │ Google) │ │ Bash/Web...) │ │(4 modes) │ │
|
|
216
|
+
│ └────────────┘ └──────────────┘ └──────────────┘ │
|
|
217
|
+
│ │ │ │ │
|
|
218
|
+
│ └─────────────────┴─────────────────┘ │
|
|
219
|
+
│ │ │
|
|
220
|
+
│ ┌──────▼──────┐ │
|
|
221
|
+
│ │HookManager │ │
|
|
222
|
+
│ │(9 events) │ │
|
|
223
|
+
│ └─────────────┘ │
|
|
224
|
+
└─────────────────────────────────────────────────────────────┘
|
|
225
|
+
```
|
|
226
|
+
|
|
227
|
+
## Project Status
|
|
228
|
+
|
|
229
|
+
**Current Version:** v0.1.0-alpha.0
|
|
230
|
+
|
|
231
|
+
This project is being developed in public. Follow our progress:
|
|
232
|
+
|
|
233
|
+
- Twitter: [@octane0411](https://twitter.com/octane0411)
|
|
234
|
+
- Discussions: [GitHub Discussions](../../discussions)
|
|
235
|
+
|
|
236
|
+
### Roadmap
|
|
237
|
+
|
|
238
|
+
| Version | Features | Status |
|
|
239
|
+
|---------|----------|--------|
|
|
240
|
+
| v0.1.0-alpha | Core ReAct loop, 17 tools, 3 providers, Session, Hooks, Permissions | ✅ Released |
|
|
241
|
+
| v0.1.0-beta | Structured outputs, File checkpointing, Session forking enhancements | 🚧 In Progress |
|
|
242
|
+
| v0.1.0 | Stable release | 📋 Planned |
|
|
243
|
+
| v0.2.0 | Browser automation, Skill system, Query class | 📋 Planned |
|
|
244
|
+
| v1.0.0 | Full Claude Agent SDK compatibility, Python SDK | 📋 Planned |
|
|
245
|
+
|
|
246
|
+
## Development
|
|
247
|
+
|
|
248
|
+
```bash
|
|
249
|
+
# Clone the repository
|
|
250
|
+
git clone https://github.com/Octane0411/open-agent-sdk.git
|
|
251
|
+
cd open-agent-sdk
|
|
252
|
+
|
|
253
|
+
# Install dependencies
|
|
254
|
+
bun install
|
|
255
|
+
|
|
256
|
+
# Run tests
|
|
257
|
+
bun test
|
|
258
|
+
|
|
259
|
+
# Run with coverage
|
|
260
|
+
bun test --coverage
|
|
261
|
+
|
|
262
|
+
# Type checking
|
|
263
|
+
cd packages/core && npx tsc --noEmit
|
|
264
|
+
|
|
265
|
+
# Run demo
|
|
266
|
+
GEMINI_API_KEY=your-key bun examples/demo.ts
|
|
267
|
+
```
|
|
268
|
+
|
|
269
|
+
## Why build this?
|
|
270
|
+
|
|
271
|
+
Claude Agent SDK is excellent but closed-source. We wanted:
|
|
272
|
+
|
|
273
|
+
1. **Full transparency** — Open code, free to customize
|
|
274
|
+
2. **Provider independence** — No lock-in to a single vendor
|
|
275
|
+
3. **Lightweight core** — Focused, understandable architecture
|
|
276
|
+
4. **Interview-friendly** — Every design decision is explainable
|
|
277
|
+
|
|
278
|
+
## Contributing
|
|
279
|
+
|
|
280
|
+
Contributions welcome. Please read [CONTRIBUTING.md](./CONTRIBUTING.md).
|
|
281
|
+
|
|
282
|
+
## License
|
|
283
|
+
|
|
284
|
+
[MIT](./LICENSE) © 2026 Octane0411
|
package/README.zh.md
ADDED
|
@@ -0,0 +1,285 @@
|
|
|
1
|
+
# Open Agent SDK
|
|
2
|
+
|
|
3
|
+
[](https://twitter.com/octane0411)
|
|
4
|
+
[](https://opensource.org/licenses/MIT)
|
|
5
|
+
[](https://www.typescriptlang.org/)
|
|
6
|
+
|
|
7
|
+
Claude Agent SDK 的开源替代品 —— 轻量、可定制、无供应商锁定。
|
|
8
|
+
|
|
9
|
+
[English Documentation](./README.md)
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## 这是什么?
|
|
14
|
+
|
|
15
|
+
Open Agent SDK 是一个用于构建 AI Agent 的 TypeScript 框架。它提供了与 Claude Agent SDK 类似的开发体验,但完全开源透明,没有供应商锁定。
|
|
16
|
+
|
|
17
|
+
**核心特性:**
|
|
18
|
+
- **ReAct 循环** —— 观察-思考-行动的自主 Agent 循环
|
|
19
|
+
- **内置工具** —— 文件操作(读/写/编辑)、Shell 执行、代码搜索(Glob/Grep)、网页搜索
|
|
20
|
+
- **流式支持** —— 实时响应流和 Token 使用量追踪
|
|
21
|
+
- **多供应商** —— 支持 OpenAI 和 Google Gemini
|
|
22
|
+
- **会话管理** —— 支持内存和文件存储的持久化对话
|
|
23
|
+
- **权限系统** —— 4 种权限模式(default/acceptEdits/bypassPermissions/plan)
|
|
24
|
+
- **Hooks 框架** —— 事件驱动的可扩展性(9 个钩子事件)
|
|
25
|
+
- **子 Agent 系统** —— 将任务委托给专门的 Agent
|
|
26
|
+
- **类型安全** —— 完整的 TypeScript 支持,严格的类型约束
|
|
27
|
+
- **取消支持** —— 通过 AbortController 中断长时间运行的操作
|
|
28
|
+
|
|
29
|
+
## 安装
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
npm install open-agent-sdk
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
或指定包管理器:
|
|
36
|
+
|
|
37
|
+
```bash
|
|
38
|
+
# npm
|
|
39
|
+
npm install open-agent-sdk
|
|
40
|
+
|
|
41
|
+
# yarn
|
|
42
|
+
yarn add open-agent-sdk
|
|
43
|
+
|
|
44
|
+
# pnpm
|
|
45
|
+
pnpm add open-agent-sdk
|
|
46
|
+
|
|
47
|
+
# bun
|
|
48
|
+
bun add open-agent-sdk
|
|
49
|
+
```
|
|
50
|
+
|
|
51
|
+
**环境要求:**
|
|
52
|
+
- Bun >= 1.0.0(主要运行环境)
|
|
53
|
+
- Node.js >= 20(需安装 peer dependencies)
|
|
54
|
+
- TypeScript >= 5.0
|
|
55
|
+
|
|
56
|
+
## 快速开始
|
|
57
|
+
|
|
58
|
+
### 基础用法
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
import { prompt } from 'open-agent-sdk';
|
|
62
|
+
|
|
63
|
+
const result = await prompt("当前目录有哪些文件?", {
|
|
64
|
+
model: 'gpt-4o',
|
|
65
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
66
|
+
});
|
|
67
|
+
|
|
68
|
+
console.log(result.result);
|
|
69
|
+
console.log(`耗时: ${result.duration_ms}ms`);
|
|
70
|
+
console.log(`Token: ${result.usage.input_tokens} 输入 / ${result.usage.output_tokens} 输出`);
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### 使用 Gemini
|
|
74
|
+
|
|
75
|
+
```typescript
|
|
76
|
+
const result = await prompt("解释量子计算", {
|
|
77
|
+
model: 'gemini-2.0-flash',
|
|
78
|
+
provider: 'google',
|
|
79
|
+
apiKey: process.env.GEMINI_API_KEY,
|
|
80
|
+
});
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
### 基于会话的对话
|
|
84
|
+
|
|
85
|
+
```typescript
|
|
86
|
+
import { createSession } from 'open-agent-sdk';
|
|
87
|
+
|
|
88
|
+
const session = createSession({
|
|
89
|
+
model: 'gpt-4o',
|
|
90
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
91
|
+
});
|
|
92
|
+
|
|
93
|
+
// 发送消息
|
|
94
|
+
await session.send("5 + 3 等于多少?");
|
|
95
|
+
|
|
96
|
+
// 流式获取响应
|
|
97
|
+
for await (const message of session.stream()) {
|
|
98
|
+
if (message.type === 'assistant') {
|
|
99
|
+
console.log(message.content);
|
|
100
|
+
}
|
|
101
|
+
}
|
|
102
|
+
|
|
103
|
+
// 继续对话(上下文会被保留)
|
|
104
|
+
await session.send("将结果乘以 2");
|
|
105
|
+
for await (const message of session.stream()) {
|
|
106
|
+
console.log(message.content);
|
|
107
|
+
}
|
|
108
|
+
|
|
109
|
+
session.close();
|
|
110
|
+
```
|
|
111
|
+
|
|
112
|
+
### 高级选项
|
|
113
|
+
|
|
114
|
+
```typescript
|
|
115
|
+
const result = await prompt("分析代码库", {
|
|
116
|
+
model: 'gpt-4o',
|
|
117
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
118
|
+
systemPrompt: "你是一个代码审查助手。",
|
|
119
|
+
maxTurns: 15,
|
|
120
|
+
allowedTools: ['Read', 'Glob', 'Grep'],
|
|
121
|
+
cwd: './src',
|
|
122
|
+
env: { NODE_ENV: 'development' },
|
|
123
|
+
permissionMode: 'default', // 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan'
|
|
124
|
+
});
|
|
125
|
+
```
|
|
126
|
+
|
|
127
|
+
### 取消操作
|
|
128
|
+
|
|
129
|
+
```typescript
|
|
130
|
+
const abortController = new AbortController();
|
|
131
|
+
|
|
132
|
+
// 30 秒后取消
|
|
133
|
+
setTimeout(() => abortController.abort(), 30000);
|
|
134
|
+
|
|
135
|
+
const result = await prompt("长时间运行的分析...", {
|
|
136
|
+
model: 'gpt-4o',
|
|
137
|
+
apiKey: process.env.OPENAI_API_KEY,
|
|
138
|
+
abortController,
|
|
139
|
+
});
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
## API 参考
|
|
143
|
+
|
|
144
|
+
### `prompt(prompt, options)`
|
|
145
|
+
|
|
146
|
+
使用 ReAct 循环执行单个提示。
|
|
147
|
+
|
|
148
|
+
**参数:**
|
|
149
|
+
- `prompt` (`string`): 用户的问题或任务
|
|
150
|
+
- `options` (`PromptOptions`): 配置对象
|
|
151
|
+
- `model` (`string`, **必需**): 模型标识符
|
|
152
|
+
- `apiKey` (`string`): API 密钥(默认从环境变量读取)
|
|
153
|
+
- `provider` (`'openai' | 'google'`): 供应商(未指定时自动检测)
|
|
154
|
+
- `baseURL` (`string`): API 基础 URL(OpenAI 兼容)
|
|
155
|
+
- `maxTurns` (`number`): 最大对话轮数(默认:10)
|
|
156
|
+
- `allowedTools` (`string[]`): 允许使用的工具白名单
|
|
157
|
+
- `systemPrompt` (`string`): 系统提示词
|
|
158
|
+
- `cwd` (`string`): 工作目录(默认:`process.cwd()`)
|
|
159
|
+
- `env` (`Record<string, string>`): 环境变量
|
|
160
|
+
- `abortController` (`AbortController`): 取消支持
|
|
161
|
+
- `permissionMode` (`PermissionMode`): 权限模式
|
|
162
|
+
- `hooks` (`HooksConfig`): 事件钩子配置
|
|
163
|
+
|
|
164
|
+
**返回:** `Promise<PromptResult>`
|
|
165
|
+
- `result` (`string`): 最终结果文本
|
|
166
|
+
- `duration_ms` (`number`): 执行时间(毫秒)
|
|
167
|
+
- `usage` (`object`): Token 使用统计
|
|
168
|
+
|
|
169
|
+
### `createSession(options)` / `resumeSession(id, options)`
|
|
170
|
+
|
|
171
|
+
创建或恢复持久化对话会话。
|
|
172
|
+
|
|
173
|
+
**方法:**
|
|
174
|
+
- `send(message: string): Promise<void>`
|
|
175
|
+
- `stream(): AsyncGenerator<SDKMessage>`
|
|
176
|
+
- `close(): void`
|
|
177
|
+
|
|
178
|
+
## 内置工具
|
|
179
|
+
|
|
180
|
+
| 工具 | 描述 | 参数 |
|
|
181
|
+
|------|------|------|
|
|
182
|
+
| `Read` | 读取文件内容,支持图片 | `file_path`, `offset?`, `limit?` |
|
|
183
|
+
| `Write` | 写入内容到文件 | `file_path`, `content` |
|
|
184
|
+
| `Edit` | 使用查找替换编辑文件 | `file_path`, `old_string`, `new_string` |
|
|
185
|
+
| `Bash` | 执行 Shell 命令 | `command`, `timeout?`, `run_in_background?` |
|
|
186
|
+
| `Glob` | 查找匹配模式的文件 | `pattern`, `path?` |
|
|
187
|
+
| `Grep` | 使用正则搜索代码 | `pattern`, `path?`, `output_mode?` |
|
|
188
|
+
| `WebSearch` | 网页搜索 | `query`, `numResults?` |
|
|
189
|
+
| `WebFetch` | 获取网页内容 | `url`, `prompt?` |
|
|
190
|
+
| `Task` | 委托给子 Agent(包含任务管理) | `description`, `prompt`, `subagent_type` |
|
|
191
|
+
|
|
192
|
+
## 供应商支持
|
|
193
|
+
|
|
194
|
+
| 供应商 | 状态 | 已测试模型 |
|
|
195
|
+
|--------|------|-----------|
|
|
196
|
+
| OpenAI | ✅ 已支持 | gpt-4o, gpt-4o-mini, gpt-4 |
|
|
197
|
+
| Google Gemini | ✅ 已支持 | gemini-2.0-flash, gemini-1.5-flash |
|
|
198
|
+
|
|
199
|
+
## 架构
|
|
200
|
+
|
|
201
|
+
```
|
|
202
|
+
┌─────────────────────────────────────────────────────────────┐
|
|
203
|
+
│ Open Agent SDK │
|
|
204
|
+
├─────────────────────────────────────────────────────────────┤
|
|
205
|
+
│ ┌──────────────┐ ┌──────────────┐ ┌──────────────────┐ │
|
|
206
|
+
│ │ prompt() │ │ Session │ │ ReActLoop │ │
|
|
207
|
+
│ │ (单次) │ │ (持久化) │ │ (推理 + 行动) │ │
|
|
208
|
+
│ └──────┬───────┘ └──────┬───────┘ └────────┬─────────┘ │
|
|
209
|
+
│ └─────────────────┴───────────────────┘ │
|
|
210
|
+
│ │ │
|
|
211
|
+
│ ┌─────────────────┼─────────────────┐ │
|
|
212
|
+
│ ▼ ▼ ▼ │
|
|
213
|
+
│ ┌────────────┐ ┌──────────────┐ ┌──────────────┐ │
|
|
214
|
+
│ │ Provider │ │ ToolRegistry │ │ Permission │ │
|
|
215
|
+
│ │(OpenAI/ │ │(Read/Write/ │ │ Manager │ │
|
|
216
|
+
│ │ Google) │ │ Bash/Web...) │ │(4 种模式) │ │
|
|
217
|
+
│ └────────────┘ └──────────────┘ └──────────────┘ │
|
|
218
|
+
│ │ │ │ │
|
|
219
|
+
│ └─────────────────┴─────────────────┘ │
|
|
220
|
+
│ │ │
|
|
221
|
+
│ ┌──────▼──────┐ │
|
|
222
|
+
│ │HookManager │ │
|
|
223
|
+
│ │(9 个事件) │ │
|
|
224
|
+
│ └─────────────┘ │
|
|
225
|
+
└─────────────────────────────────────────────────────────────┘
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## 项目状态
|
|
229
|
+
|
|
230
|
+
**当前版本:** v0.1.0-alpha.0
|
|
231
|
+
|
|
232
|
+
本项目正在公开开发中。关注我们的进展:
|
|
233
|
+
|
|
234
|
+
- Twitter: [@octane0411](https://twitter.com/octane0411)
|
|
235
|
+
- 讨论区: [GitHub Discussions](../../discussions)
|
|
236
|
+
|
|
237
|
+
### 路线图
|
|
238
|
+
|
|
239
|
+
| 版本 | 特性 | 状态 |
|
|
240
|
+
|---------|----------|--------|
|
|
241
|
+
| v0.1.0-alpha | 核心 ReAct 循环、17 个工具、3 个供应商、Session、Hooks、权限系统 | ✅ 已发布 |
|
|
242
|
+
| v0.1.0-beta | 结构化输出、文件检查点、会话分叉增强 | 🚧 开发中 |
|
|
243
|
+
| v0.1.0 | 稳定版本 | 📋 计划中 |
|
|
244
|
+
| v0.2.0 | 浏览器自动化、Skill 系统、Query 类 | 📋 计划中 |
|
|
245
|
+
| v1.0.0 | 完整的 Claude Agent SDK 兼容、Python SDK | 📋 计划中 |
|
|
246
|
+
|
|
247
|
+
## 开发
|
|
248
|
+
|
|
249
|
+
```bash
|
|
250
|
+
# 克隆仓库
|
|
251
|
+
git clone https://github.com/Octane0411/open-agent-sdk.git
|
|
252
|
+
cd open-agent-sdk
|
|
253
|
+
|
|
254
|
+
# 安装依赖
|
|
255
|
+
bun install
|
|
256
|
+
|
|
257
|
+
# 运行测试
|
|
258
|
+
bun test
|
|
259
|
+
|
|
260
|
+
# 覆盖率测试
|
|
261
|
+
bun test --coverage
|
|
262
|
+
|
|
263
|
+
# 类型检查
|
|
264
|
+
cd packages/core && npx tsc --noEmit
|
|
265
|
+
|
|
266
|
+
# 运行演示
|
|
267
|
+
GEMINI_API_KEY=your-key bun examples/demo.ts
|
|
268
|
+
```
|
|
269
|
+
|
|
270
|
+
## 为什么构建这个项目?
|
|
271
|
+
|
|
272
|
+
Claude Agent SDK 非常优秀,但是闭源的。我们想要:
|
|
273
|
+
|
|
274
|
+
1. **完全透明** —— 代码开源,可自由定制
|
|
275
|
+
2. **供应商独立** —— 不被单一供应商锁定
|
|
276
|
+
3. **轻量核心** —— 专注、易理解的架构
|
|
277
|
+
4. **面试友好** —— 每个设计决策都可解释
|
|
278
|
+
|
|
279
|
+
## 贡献
|
|
280
|
+
|
|
281
|
+
欢迎贡献。请阅读 [CONTRIBUTING.md](./CONTRIBUTING.md)。
|
|
282
|
+
|
|
283
|
+
## 许可证
|
|
284
|
+
|
|
285
|
+
[MIT](./LICENSE) © 2026 Octane0411
|
|
@@ -0,0 +1,107 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* AgentDefinition types and validation
|
|
3
|
+
* Aligned with Claude Agent SDK
|
|
4
|
+
*/
|
|
5
|
+
import { z } from 'zod';
|
|
6
|
+
/**
|
|
7
|
+
* Permission modes for agent execution
|
|
8
|
+
*/
|
|
9
|
+
export type PermissionMode = 'default' | 'acceptEdits' | 'bypassPermissions' | 'plan';
|
|
10
|
+
/**
|
|
11
|
+
* Model identifiers for subagent
|
|
12
|
+
* - 'sonnet' | 'opus' | 'haiku': Specific model presets
|
|
13
|
+
* - 'inherit': Inherit parent agent's model
|
|
14
|
+
*/
|
|
15
|
+
export type ModelIdentifier = 'sonnet' | 'opus' | 'haiku' | 'inherit';
|
|
16
|
+
/**
|
|
17
|
+
* Zod schema for AgentDefinition validation
|
|
18
|
+
*/
|
|
19
|
+
export declare const AgentDefinitionSchema: z.ZodObject<{
|
|
20
|
+
/** Natural language description of when to use this agent */
|
|
21
|
+
description: z.ZodString;
|
|
22
|
+
/** List of allowed tools (omit to inherit all from parent) */
|
|
23
|
+
tools: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
|
|
24
|
+
/** System prompt for the agent */
|
|
25
|
+
prompt: z.ZodString;
|
|
26
|
+
/** Model to use ('inherit' or omit to use parent's model) */
|
|
27
|
+
model: z.ZodOptional<z.ZodEnum<["sonnet", "opus", "haiku", "inherit"]>>;
|
|
28
|
+
/** Maximum turns for the agent (omit to use parent's maxTurns) */
|
|
29
|
+
maxTurns: z.ZodOptional<z.ZodNumber>;
|
|
30
|
+
/** Permission mode (omit to use parent's permissionMode) */
|
|
31
|
+
permissionMode: z.ZodOptional<z.ZodEnum<["default", "acceptEdits", "bypassPermissions", "plan"]>>;
|
|
32
|
+
}, "strip", z.ZodTypeAny, {
|
|
33
|
+
description: string;
|
|
34
|
+
prompt: string;
|
|
35
|
+
permissionMode?: "default" | "acceptEdits" | "bypassPermissions" | "plan" | undefined;
|
|
36
|
+
model?: "haiku" | "inherit" | "sonnet" | "opus" | undefined;
|
|
37
|
+
tools?: string[] | undefined;
|
|
38
|
+
maxTurns?: number | undefined;
|
|
39
|
+
}, {
|
|
40
|
+
description: string;
|
|
41
|
+
prompt: string;
|
|
42
|
+
permissionMode?: "default" | "acceptEdits" | "bypassPermissions" | "plan" | undefined;
|
|
43
|
+
model?: "haiku" | "inherit" | "sonnet" | "opus" | undefined;
|
|
44
|
+
tools?: string[] | undefined;
|
|
45
|
+
maxTurns?: number | undefined;
|
|
46
|
+
}>;
|
|
47
|
+
/**
|
|
48
|
+
* Agent definition type
|
|
49
|
+
* Defines the configuration for a subagent
|
|
50
|
+
*/
|
|
51
|
+
export type AgentDefinition = z.infer<typeof AgentDefinitionSchema>;
|
|
52
|
+
/**
|
|
53
|
+
* Collection of agent definitions
|
|
54
|
+
* Key is the subagent_type identifier
|
|
55
|
+
*/
|
|
56
|
+
export type AgentDefinitions = Record<string, AgentDefinition>;
|
|
57
|
+
/**
|
|
58
|
+
* Validate an agent definition
|
|
59
|
+
* @param definition The definition to validate
|
|
60
|
+
* @returns The validated definition
|
|
61
|
+
* @throws ZodError if validation fails
|
|
62
|
+
*/
|
|
63
|
+
export declare function validateAgentDefinition(definition: unknown): AgentDefinition;
|
|
64
|
+
/**
|
|
65
|
+
* Safely validate an agent definition
|
|
66
|
+
* @param definition The definition to validate
|
|
67
|
+
* @returns Object with success flag and data or error
|
|
68
|
+
*/
|
|
69
|
+
export declare function safeValidateAgentDefinition(definition: unknown): {
|
|
70
|
+
success: true;
|
|
71
|
+
data: AgentDefinition;
|
|
72
|
+
} | {
|
|
73
|
+
success: false;
|
|
74
|
+
error: z.ZodError;
|
|
75
|
+
};
|
|
76
|
+
/**
|
|
77
|
+
* Create a minimal agent definition with required fields
|
|
78
|
+
* @param description When to use this agent
|
|
79
|
+
* @param prompt System prompt for the agent
|
|
80
|
+
* @returns AgentDefinition with required fields
|
|
81
|
+
*/
|
|
82
|
+
export declare function createAgentDefinition(description: string, prompt: string): AgentDefinition;
|
|
83
|
+
/**
|
|
84
|
+
* Check if an agent definition has custom tools
|
|
85
|
+
* @param definition The agent definition
|
|
86
|
+
* @returns true if tools are explicitly defined
|
|
87
|
+
*/
|
|
88
|
+
export declare function hasCustomTools(definition: AgentDefinition): boolean;
|
|
89
|
+
/**
|
|
90
|
+
* Check if an agent definition inherits parent's model
|
|
91
|
+
* @param definition The agent definition
|
|
92
|
+
* @returns true if model is 'inherit' or undefined
|
|
93
|
+
*/
|
|
94
|
+
export declare function inheritsModel(definition: AgentDefinition): boolean;
|
|
95
|
+
/**
|
|
96
|
+
* Check if an agent definition has custom maxTurns
|
|
97
|
+
* @param definition The agent definition
|
|
98
|
+
* @returns true if maxTurns is explicitly defined
|
|
99
|
+
*/
|
|
100
|
+
export declare function hasCustomMaxTurns(definition: AgentDefinition): boolean;
|
|
101
|
+
/**
|
|
102
|
+
* Check if an agent definition has custom permission mode
|
|
103
|
+
* @param definition The agent definition
|
|
104
|
+
* @returns true if permissionMode is explicitly defined
|
|
105
|
+
*/
|
|
106
|
+
export declare function hasCustomPermissionMode(definition: AgentDefinition): boolean;
|
|
107
|
+
//# sourceMappingURL=agent-definition.d.ts.map
|