@ugm/desiagent 0.1.21
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 +251 -0
- package/dist/__tests__/test-utils.d.ts +24 -0
- package/dist/__tests__/test-utils.d.ts.map +1 -0
- package/dist/__tests__/test-utils.js +32 -0
- package/dist/__tests__/test-utils.js.map +1 -0
- package/dist/core/execution/agents.d.ts +60 -0
- package/dist/core/execution/agents.d.ts.map +1 -0
- package/dist/core/execution/agents.js +249 -0
- package/dist/core/execution/agents.js.map +1 -0
- package/dist/core/execution/artifacts.d.ts +27 -0
- package/dist/core/execution/artifacts.d.ts.map +1 -0
- package/dist/core/execution/artifacts.js +93 -0
- package/dist/core/execution/artifacts.js.map +1 -0
- package/dist/core/execution/costs.d.ts +160 -0
- package/dist/core/execution/costs.d.ts.map +1 -0
- package/dist/core/execution/costs.js +196 -0
- package/dist/core/execution/costs.js.map +1 -0
- package/dist/core/execution/dagExecutor.d.ts +112 -0
- package/dist/core/execution/dagExecutor.d.ts.map +1 -0
- package/dist/core/execution/dagExecutor.js +647 -0
- package/dist/core/execution/dagExecutor.js.map +1 -0
- package/dist/core/execution/dags.d.ts +167 -0
- package/dist/core/execution/dags.d.ts.map +1 -0
- package/dist/core/execution/dags.js +713 -0
- package/dist/core/execution/dags.js.map +1 -0
- package/dist/core/execution/executions.d.ts +158 -0
- package/dist/core/execution/executions.d.ts.map +1 -0
- package/dist/core/execution/executions.js +258 -0
- package/dist/core/execution/executions.js.map +1 -0
- package/dist/core/execution/goals.d.ts +62 -0
- package/dist/core/execution/goals.d.ts.map +1 -0
- package/dist/core/execution/goals.js +245 -0
- package/dist/core/execution/goals.js.map +1 -0
- package/dist/core/execution/runs.d.ts +65 -0
- package/dist/core/execution/runs.d.ts.map +1 -0
- package/dist/core/execution/runs.js +219 -0
- package/dist/core/execution/runs.js.map +1 -0
- package/dist/core/execution/tools.d.ts +24 -0
- package/dist/core/execution/tools.d.ts.map +1 -0
- package/dist/core/execution/tools.js +33 -0
- package/dist/core/execution/tools.js.map +1 -0
- package/dist/core/orchestration/index.d.ts +7 -0
- package/dist/core/orchestration/index.d.ts.map +1 -0
- package/dist/core/orchestration/index.js +7 -0
- package/dist/core/orchestration/index.js.map +1 -0
- package/dist/core/orchestration/orchestrator.d.ts +39 -0
- package/dist/core/orchestration/orchestrator.d.ts.map +1 -0
- package/dist/core/orchestration/orchestrator.js +141 -0
- package/dist/core/orchestration/orchestrator.js.map +1 -0
- package/dist/core/orchestration/planner.d.ts +63 -0
- package/dist/core/orchestration/planner.d.ts.map +1 -0
- package/dist/core/orchestration/planner.js +99 -0
- package/dist/core/orchestration/planner.js.map +1 -0
- package/dist/core/providers/factory.d.ts +25 -0
- package/dist/core/providers/factory.d.ts.map +1 -0
- package/dist/core/providers/factory.js +86 -0
- package/dist/core/providers/factory.js.map +1 -0
- package/dist/core/providers/index.d.ts +11 -0
- package/dist/core/providers/index.d.ts.map +1 -0
- package/dist/core/providers/index.js +10 -0
- package/dist/core/providers/index.js.map +1 -0
- package/dist/core/providers/ollama.d.ts +36 -0
- package/dist/core/providers/ollama.d.ts.map +1 -0
- package/dist/core/providers/ollama.js +123 -0
- package/dist/core/providers/ollama.js.map +1 -0
- package/dist/core/providers/openai.d.ts +33 -0
- package/dist/core/providers/openai.d.ts.map +1 -0
- package/dist/core/providers/openai.js +114 -0
- package/dist/core/providers/openai.js.map +1 -0
- package/dist/core/providers/openrouter.d.ts +38 -0
- package/dist/core/providers/openrouter.d.ts.map +1 -0
- package/dist/core/providers/openrouter.js +269 -0
- package/dist/core/providers/openrouter.js.map +1 -0
- package/dist/core/providers/types.d.ts +101 -0
- package/dist/core/providers/types.d.ts.map +1 -0
- package/dist/core/providers/types.js +7 -0
- package/dist/core/providers/types.js.map +1 -0
- package/dist/core/tools/base.d.ts +56 -0
- package/dist/core/tools/base.d.ts.map +1 -0
- package/dist/core/tools/base.js +60 -0
- package/dist/core/tools/base.js.map +1 -0
- package/dist/core/tools/bash.d.ts +50 -0
- package/dist/core/tools/bash.d.ts.map +1 -0
- package/dist/core/tools/bash.js +179 -0
- package/dist/core/tools/bash.js.map +1 -0
- package/dist/core/tools/edit.d.ts +39 -0
- package/dist/core/tools/edit.d.ts.map +1 -0
- package/dist/core/tools/edit.js +67 -0
- package/dist/core/tools/edit.js.map +1 -0
- package/dist/core/tools/executor.d.ts +33 -0
- package/dist/core/tools/executor.d.ts.map +1 -0
- package/dist/core/tools/executor.js +105 -0
- package/dist/core/tools/executor.js.map +1 -0
- package/dist/core/tools/fetchPage.d.ts +46 -0
- package/dist/core/tools/fetchPage.d.ts.map +1 -0
- package/dist/core/tools/fetchPage.js +87 -0
- package/dist/core/tools/fetchPage.js.map +1 -0
- package/dist/core/tools/fetchURLs.d.ts +39 -0
- package/dist/core/tools/fetchURLs.d.ts.map +1 -0
- package/dist/core/tools/fetchURLs.js +67 -0
- package/dist/core/tools/fetchURLs.js.map +1 -0
- package/dist/core/tools/glob.d.ts +36 -0
- package/dist/core/tools/glob.d.ts.map +1 -0
- package/dist/core/tools/glob.js +78 -0
- package/dist/core/tools/glob.js.map +1 -0
- package/dist/core/tools/grep.d.ts +51 -0
- package/dist/core/tools/grep.d.ts.map +1 -0
- package/dist/core/tools/grep.js +152 -0
- package/dist/core/tools/grep.js.map +1 -0
- package/dist/core/tools/index.d.ts +22 -0
- package/dist/core/tools/index.d.ts.map +1 -0
- package/dist/core/tools/index.js +22 -0
- package/dist/core/tools/index.js.map +1 -0
- package/dist/core/tools/llmExecute.d.ts +153 -0
- package/dist/core/tools/llmExecute.d.ts.map +1 -0
- package/dist/core/tools/llmExecute.js +105 -0
- package/dist/core/tools/llmExecute.js.map +1 -0
- package/dist/core/tools/readEmail.d.ts +68 -0
- package/dist/core/tools/readEmail.d.ts.map +1 -0
- package/dist/core/tools/readEmail.js +182 -0
- package/dist/core/tools/readEmail.js.map +1 -0
- package/dist/core/tools/readFile.d.ts +42 -0
- package/dist/core/tools/readFile.d.ts.map +1 -0
- package/dist/core/tools/readFile.js +79 -0
- package/dist/core/tools/readFile.js.map +1 -0
- package/dist/core/tools/registry.d.ts +53 -0
- package/dist/core/tools/registry.d.ts.map +1 -0
- package/dist/core/tools/registry.js +112 -0
- package/dist/core/tools/registry.js.map +1 -0
- package/dist/core/tools/sendEmail.d.ts +83 -0
- package/dist/core/tools/sendEmail.d.ts.map +1 -0
- package/dist/core/tools/sendEmail.js +132 -0
- package/dist/core/tools/sendEmail.js.map +1 -0
- package/dist/core/tools/sendWebhook.d.ts +48 -0
- package/dist/core/tools/sendWebhook.d.ts.map +1 -0
- package/dist/core/tools/sendWebhook.js +61 -0
- package/dist/core/tools/sendWebhook.js.map +1 -0
- package/dist/core/tools/webSearch.d.ts +34 -0
- package/dist/core/tools/webSearch.d.ts.map +1 -0
- package/dist/core/tools/webSearch.js +104 -0
- package/dist/core/tools/webSearch.js.map +1 -0
- package/dist/core/tools/writeFile.d.ts +49 -0
- package/dist/core/tools/writeFile.d.ts.map +1 -0
- package/dist/core/tools/writeFile.js +120 -0
- package/dist/core/tools/writeFile.js.map +1 -0
- package/dist/db/client.d.ts +22 -0
- package/dist/db/client.d.ts.map +1 -0
- package/dist/db/client.js +178 -0
- package/dist/db/client.js.map +1 -0
- package/dist/db/schema.d.ts +1846 -0
- package/dist/db/schema.d.ts.map +1 -0
- package/dist/db/schema.js +175 -0
- package/dist/db/schema.js.map +1 -0
- package/dist/errors/index.d.ts +80 -0
- package/dist/errors/index.d.ts.map +1 -0
- package/dist/errors/index.js +135 -0
- package/dist/errors/index.js.map +1 -0
- package/dist/index.d.ts +52 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +172 -0
- package/dist/index.js.map +1 -0
- package/dist/services/initDB.d.ts +17 -0
- package/dist/services/initDB.d.ts.map +1 -0
- package/dist/services/initDB.js +212 -0
- package/dist/services/initDB.js.map +1 -0
- package/dist/types/agent.d.ts +354 -0
- package/dist/types/agent.d.ts.map +1 -0
- package/dist/types/agent.js +63 -0
- package/dist/types/agent.js.map +1 -0
- package/dist/types/client.d.ts +309 -0
- package/dist/types/client.d.ts.map +1 -0
- package/dist/types/client.js +2 -0
- package/dist/types/client.js.map +1 -0
- package/dist/types/config.d.ts +96 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +33 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/dag.d.ts +253 -0
- package/dist/types/dag.d.ts.map +1 -0
- package/dist/types/dag.js +46 -0
- package/dist/types/dag.js.map +1 -0
- package/dist/types/execution.d.ts +171 -0
- package/dist/types/execution.d.ts.map +1 -0
- package/dist/types/execution.js +41 -0
- package/dist/types/execution.js.map +1 -0
- package/dist/types/index.d.ts +12 -0
- package/dist/types/index.d.ts.map +1 -0
- package/dist/types/index.js +11 -0
- package/dist/types/index.js.map +1 -0
- package/dist/util/cron-validator.d.ts +16 -0
- package/dist/util/cron-validator.d.ts.map +1 -0
- package/dist/util/cron-validator.js +31 -0
- package/dist/util/cron-validator.js.map +1 -0
- package/dist/util/dag-utils.d.ts +54 -0
- package/dist/util/dag-utils.d.ts.map +1 -0
- package/dist/util/dag-utils.js +167 -0
- package/dist/util/dag-utils.js.map +1 -0
- package/dist/util/logger.d.ts +21 -0
- package/dist/util/logger.d.ts.map +1 -0
- package/dist/util/logger.js +87 -0
- package/dist/util/logger.js.map +1 -0
- package/package.json +82 -0
package/README.md
ADDED
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
# desiAgent
|
|
2
|
+
|
|
3
|
+
A library-first async agent system for building autonomous workflows with TypeScript.
|
|
4
|
+
|
|
5
|
+
## Features
|
|
6
|
+
|
|
7
|
+
- **Multiple LLM Providers**: OpenAI, OpenRouter, and Ollama support
|
|
8
|
+
- **Autonomous Execution**: Let agents execute objectives autonomously
|
|
9
|
+
- **DAG Workflows**: Decompose complex objectives into directed acyclic graphs
|
|
10
|
+
- **Built-in Tools**: Web scraping, file operations, bash commands, and more
|
|
11
|
+
- **Event Streaming**: Track execution progress in real-time
|
|
12
|
+
- **SQLite Storage**: Persistent storage using bun:sqlite
|
|
13
|
+
|
|
14
|
+
## Installation
|
|
15
|
+
|
|
16
|
+
### Prerequisites
|
|
17
|
+
|
|
18
|
+
- [Bun](https://bun.sh) 1.3.5 or higher
|
|
19
|
+
|
|
20
|
+
### Install
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
bun add desiagent
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
Or with npm/pnpm:
|
|
27
|
+
|
|
28
|
+
```bash
|
|
29
|
+
npm install desiagent
|
|
30
|
+
# or
|
|
31
|
+
pnpm add desiagent
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## Environment Variables
|
|
35
|
+
|
|
36
|
+
Create a `.env` file in your project root with the appropriate API keys for your chosen provider:
|
|
37
|
+
|
|
38
|
+
### OpenAI
|
|
39
|
+
|
|
40
|
+
```bash
|
|
41
|
+
OPENAI_API_KEY=sk-...
|
|
42
|
+
```
|
|
43
|
+
|
|
44
|
+
### OpenRouter
|
|
45
|
+
|
|
46
|
+
```bash
|
|
47
|
+
OPENROUTER_API_KEY=sk-or-...
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### Ollama (Local)
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
OLLAMA_BASE_URL=http://localhost:11434 # Optional, this is the default
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Quick Start
|
|
57
|
+
|
|
58
|
+
### Basic Example (OpenAI)
|
|
59
|
+
|
|
60
|
+
```typescript
|
|
61
|
+
import { setupDesiAgent } from 'desiagent';
|
|
62
|
+
|
|
63
|
+
const client = await setupDesiAgent({
|
|
64
|
+
llmProvider: 'openai',
|
|
65
|
+
openaiApiKey: process.env.OPENAI_API_KEY,
|
|
66
|
+
modelName: 'gpt-4o',
|
|
67
|
+
});
|
|
68
|
+
|
|
69
|
+
// Create and execute a DAG
|
|
70
|
+
const execution = await client.dags.createAndExecute('Summarize the latest tech news');
|
|
71
|
+
console.log(`Execution: ${execution.id}, Status: ${execution.status}`);
|
|
72
|
+
|
|
73
|
+
await client.shutdown();
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
### Using OpenRouter
|
|
77
|
+
|
|
78
|
+
```typescript
|
|
79
|
+
import { setupDesiAgent } from 'desiagent';
|
|
80
|
+
|
|
81
|
+
const client = await setupDesiAgent({
|
|
82
|
+
llmProvider: 'openrouter',
|
|
83
|
+
openrouterApiKey: process.env.OPENROUTER_API_KEY,
|
|
84
|
+
modelName: 'google/gemini-2.5-flash-lite-preview-06-2025',
|
|
85
|
+
});
|
|
86
|
+
|
|
87
|
+
const execution = await client.dags.createAndExecute('Research best practices for API design');
|
|
88
|
+
await client.shutdown();
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
### Using Ollama (Local LLM)
|
|
92
|
+
|
|
93
|
+
```typescript
|
|
94
|
+
import { setupDesiAgent } from 'desiagent';
|
|
95
|
+
|
|
96
|
+
const client = await setupDesiAgent({
|
|
97
|
+
llmProvider: 'ollama',
|
|
98
|
+
ollamaBaseUrl: process.env.OLLAMA_BASE_URL || 'http://localhost:11434',
|
|
99
|
+
modelName: 'llama3.2',
|
|
100
|
+
});
|
|
101
|
+
|
|
102
|
+
const execution = await client.dags.createAndExecute('Explain quantum computing in simple terms');
|
|
103
|
+
await client.shutdown();
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
## Configuration Options
|
|
107
|
+
|
|
108
|
+
```typescript
|
|
109
|
+
interface DesiAgentConfig {
|
|
110
|
+
// LLM Provider (required)
|
|
111
|
+
llmProvider: 'openai' | 'openrouter' | 'ollama';
|
|
112
|
+
modelName: string;
|
|
113
|
+
|
|
114
|
+
// Provider-specific API keys
|
|
115
|
+
openaiApiKey?: string; // Required for 'openai' provider
|
|
116
|
+
openrouterApiKey?: string; // Required for 'openrouter' provider
|
|
117
|
+
ollamaBaseUrl?: string; // Optional for 'ollama', defaults to http://localhost:11434
|
|
118
|
+
|
|
119
|
+
// Database (optional)
|
|
120
|
+
databasePath?: string; // Default: ~/.desiAgent/data/agent.db
|
|
121
|
+
|
|
122
|
+
// Agent definitions (optional)
|
|
123
|
+
agentDefinitionsPath?: string; // Default: ~/.desiAgent/agents
|
|
124
|
+
|
|
125
|
+
// Logging (optional)
|
|
126
|
+
logLevel?: 'debug' | 'info' | 'warn' | 'error'; // Default: 'info'
|
|
127
|
+
|
|
128
|
+
// Callbacks (optional)
|
|
129
|
+
onExecutionStart?: (executionId: string) => void;
|
|
130
|
+
onExecutionEnd?: (executionId: string, result: any) => void;
|
|
131
|
+
}
|
|
132
|
+
```
|
|
133
|
+
|
|
134
|
+
## API Reference
|
|
135
|
+
|
|
136
|
+
### Agents
|
|
137
|
+
|
|
138
|
+
```typescript
|
|
139
|
+
// Create a new agent
|
|
140
|
+
const agent = await client.agents.create(name, version, prompt, params?);
|
|
141
|
+
|
|
142
|
+
// List all agents
|
|
143
|
+
const agents = await client.agents.list(filter?);
|
|
144
|
+
|
|
145
|
+
// Get a specific agent
|
|
146
|
+
const agent = await client.agents.get(id);
|
|
147
|
+
|
|
148
|
+
// Update an agent
|
|
149
|
+
await client.agents.update(id, updates);
|
|
150
|
+
|
|
151
|
+
// Activate/Delete an agent
|
|
152
|
+
await client.agents.activate(id);
|
|
153
|
+
await client.agents.delete(id);
|
|
154
|
+
|
|
155
|
+
// Resolve agent by name
|
|
156
|
+
const agent = await client.agents.resolve(name);
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
### DAGs (Directed Acyclic Graphs)
|
|
160
|
+
|
|
161
|
+
```typescript
|
|
162
|
+
// Create a DAG from an objective
|
|
163
|
+
const dag = await client.dags.create(objective, params?);
|
|
164
|
+
|
|
165
|
+
// Create and immediately execute
|
|
166
|
+
const execution = await client.dags.createAndExecute(objective, params?);
|
|
167
|
+
|
|
168
|
+
// Execute an existing DAG
|
|
169
|
+
const execution = await client.dags.execute(dagId, params?);
|
|
170
|
+
|
|
171
|
+
// List DAGs
|
|
172
|
+
const dags = await client.dags.list(filter?);
|
|
173
|
+
const scheduled = await client.dags.listScheduled();
|
|
174
|
+
|
|
175
|
+
// Get/Update/Delete
|
|
176
|
+
const dag = await client.dags.get(id);
|
|
177
|
+
await client.dags.update(id, updates);
|
|
178
|
+
await client.dags.delete(id);
|
|
179
|
+
|
|
180
|
+
// Resume a paused execution
|
|
181
|
+
await client.dags.resume(executionId);
|
|
182
|
+
```
|
|
183
|
+
|
|
184
|
+
### Executions
|
|
185
|
+
|
|
186
|
+
```typescript
|
|
187
|
+
// List executions
|
|
188
|
+
const executions = await client.executions.list(filter?);
|
|
189
|
+
|
|
190
|
+
// Get execution details
|
|
191
|
+
const execution = await client.executions.get(id);
|
|
192
|
+
const subSteps = await client.executions.getSubSteps(id);
|
|
193
|
+
|
|
194
|
+
// Delete an execution
|
|
195
|
+
await client.executions.delete(id);
|
|
196
|
+
|
|
197
|
+
// Stream execution events (AsyncIterable)
|
|
198
|
+
for await (const event of client.executions.streamEvents(id)) {
|
|
199
|
+
console.log(event.type, event.data);
|
|
200
|
+
}
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
## Examples
|
|
204
|
+
|
|
205
|
+
### News Bulletin Generator
|
|
206
|
+
|
|
207
|
+
See [`examples/news-bulletin.ts`](./examples/news-bulletin.ts) for a complete example that creates a news bulletin with multiple categories.
|
|
208
|
+
|
|
209
|
+
```bash
|
|
210
|
+
# Run with Ollama
|
|
211
|
+
bun run examples/news-bulletin.ts
|
|
212
|
+
|
|
213
|
+
# Run with OpenRouter
|
|
214
|
+
OPENROUTER_API_KEY=your-key bun run examples/news-bulletin-openrouter.ts
|
|
215
|
+
```
|
|
216
|
+
|
|
217
|
+
## Development
|
|
218
|
+
|
|
219
|
+
### Setup
|
|
220
|
+
|
|
221
|
+
```bash
|
|
222
|
+
# Install dependencies
|
|
223
|
+
pnpm install
|
|
224
|
+
|
|
225
|
+
# Run in development mode
|
|
226
|
+
bun run dev
|
|
227
|
+
```
|
|
228
|
+
|
|
229
|
+
### Commands
|
|
230
|
+
|
|
231
|
+
```bash
|
|
232
|
+
# Build
|
|
233
|
+
pnpm build
|
|
234
|
+
|
|
235
|
+
# Type check
|
|
236
|
+
pnpm type-check
|
|
237
|
+
|
|
238
|
+
# Run tests
|
|
239
|
+
pnpm test
|
|
240
|
+
pnpm test:watch
|
|
241
|
+
pnpm test:coverage
|
|
242
|
+
|
|
243
|
+
# Database commands
|
|
244
|
+
pnpm db:generate
|
|
245
|
+
pnpm db:push
|
|
246
|
+
pnpm db:studio
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## License
|
|
250
|
+
|
|
251
|
+
MIT
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Utilities
|
|
3
|
+
*
|
|
4
|
+
* Helper functions for setting up test environments
|
|
5
|
+
*/
|
|
6
|
+
import type { DrizzleDB } from '../db/client.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create an in-memory test database
|
|
9
|
+
*/
|
|
10
|
+
export declare function createTestDatabase(): DrizzleDB;
|
|
11
|
+
/**
|
|
12
|
+
* Clean up test database
|
|
13
|
+
*/
|
|
14
|
+
export declare function cleanupTestDatabase(): void;
|
|
15
|
+
/**
|
|
16
|
+
* Create mock logger for tests
|
|
17
|
+
*/
|
|
18
|
+
export declare function createMockLogger(): {
|
|
19
|
+
debug: () => void;
|
|
20
|
+
info: () => void;
|
|
21
|
+
warn: () => void;
|
|
22
|
+
error: () => void;
|
|
23
|
+
};
|
|
24
|
+
//# sourceMappingURL=test-utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-utils.d.ts","sourceRoot":"","sources":["../../src/__tests__/test-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,iBAAiB,CAAC;AAEjD;;GAEG;AACH,wBAAgB,kBAAkB,IAAI,SAAS,CAI9C;AAED;;GAEG;AACH,wBAAgB,mBAAmB,IAAI,IAAI,CAE1C;AAED;;GAEG;AACH,wBAAgB,gBAAgB;;;;;EAO/B"}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Test Utilities
|
|
3
|
+
*
|
|
4
|
+
* Helper functions for setting up test environments
|
|
5
|
+
*/
|
|
6
|
+
import { getDatabase, closeDatabase } from '../db/client.js';
|
|
7
|
+
/**
|
|
8
|
+
* Create an in-memory test database
|
|
9
|
+
*/
|
|
10
|
+
export function createTestDatabase() {
|
|
11
|
+
// Use a unique in-memory database for each test
|
|
12
|
+
const dbPath = `:memory:`;
|
|
13
|
+
return getDatabase(dbPath);
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* Clean up test database
|
|
17
|
+
*/
|
|
18
|
+
export function cleanupTestDatabase() {
|
|
19
|
+
closeDatabase();
|
|
20
|
+
}
|
|
21
|
+
/**
|
|
22
|
+
* Create mock logger for tests
|
|
23
|
+
*/
|
|
24
|
+
export function createMockLogger() {
|
|
25
|
+
return {
|
|
26
|
+
debug: () => { },
|
|
27
|
+
info: () => { },
|
|
28
|
+
warn: () => { },
|
|
29
|
+
error: () => { },
|
|
30
|
+
};
|
|
31
|
+
}
|
|
32
|
+
//# sourceMappingURL=test-utils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"test-utils.js","sourceRoot":"","sources":["../../src/__tests__/test-utils.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAG7D;;GAEG;AACH,MAAM,UAAU,kBAAkB;IAChC,gDAAgD;IAChD,MAAM,MAAM,GAAG,UAAU,CAAC;IAC1B,OAAO,WAAW,CAAC,MAAM,CAAC,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB;IACjC,aAAa,EAAE,CAAC;AAClB,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,OAAO;QACL,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;QACf,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,IAAI,EAAE,GAAG,EAAE,GAAE,CAAC;QACd,KAAK,EAAE,GAAG,EAAE,GAAE,CAAC;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,60 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agents Service
|
|
3
|
+
*
|
|
4
|
+
* Manages agent creation, configuration, activation, and resolution.
|
|
5
|
+
*/
|
|
6
|
+
import type { DrizzleDB } from '../../db/client.js';
|
|
7
|
+
import type { Agent } from '../../types/index.js';
|
|
8
|
+
/**
|
|
9
|
+
* Create an agent ID with 'agent_' prefix
|
|
10
|
+
*/
|
|
11
|
+
export declare function generateAgentId(): string;
|
|
12
|
+
/**
|
|
13
|
+
* AgentsService handles all agent-related operations
|
|
14
|
+
*/
|
|
15
|
+
export declare class AgentsService {
|
|
16
|
+
private db;
|
|
17
|
+
private logger;
|
|
18
|
+
private static agentCache;
|
|
19
|
+
private static readonly CACHE_TTL_MS;
|
|
20
|
+
private static readonly MAX_CACHE_SIZE;
|
|
21
|
+
constructor(db: DrizzleDB);
|
|
22
|
+
/**
|
|
23
|
+
* Clear the agent cache (call after updates/activations)
|
|
24
|
+
*/
|
|
25
|
+
static clearCache(agentName?: string): void;
|
|
26
|
+
/**
|
|
27
|
+
* Create a new agent
|
|
28
|
+
*/
|
|
29
|
+
create(name: string, version: string, systemPrompt: string, params?: Record<string, any>): Promise<Agent>;
|
|
30
|
+
/**
|
|
31
|
+
* Get an agent by ID
|
|
32
|
+
*/
|
|
33
|
+
get(id: string): Promise<Agent>;
|
|
34
|
+
/**
|
|
35
|
+
* List all agents with optional filtering
|
|
36
|
+
*/
|
|
37
|
+
list(filter?: Record<string, any>): Promise<Agent[]>;
|
|
38
|
+
/**
|
|
39
|
+
* Update an agent
|
|
40
|
+
*/
|
|
41
|
+
update(id: string, updates: Partial<Agent>): Promise<Agent>;
|
|
42
|
+
/**
|
|
43
|
+
* Activate an agent (only one active per name)
|
|
44
|
+
*/
|
|
45
|
+
activate(id: string): Promise<Agent>;
|
|
46
|
+
/**
|
|
47
|
+
* Resolve an agent by name (gets active agent with that name)
|
|
48
|
+
* Uses caching for performance
|
|
49
|
+
*/
|
|
50
|
+
resolve(name: string): Promise<Agent | null>;
|
|
51
|
+
/**
|
|
52
|
+
* Delete an agent (cannot delete active agents)
|
|
53
|
+
*/
|
|
54
|
+
delete(id: string): Promise<void>;
|
|
55
|
+
/**
|
|
56
|
+
* Map database record to Agent type
|
|
57
|
+
*/
|
|
58
|
+
private mapAgent;
|
|
59
|
+
}
|
|
60
|
+
//# sourceMappingURL=agents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.d.ts","sourceRoot":"","sources":["../../../src/core/execution/agents.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAIH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,oBAAoB,CAAC;AAEpD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,sBAAsB,CAAC;AAIlD;;GAEG;AACH,wBAAgB,eAAe,IAAI,MAAM,CAExC;AAUD;;GAEG;AACH,qBAAa,aAAa;IACxB,OAAO,CAAC,EAAE,CAAY;IACtB,OAAO,CAAC,MAAM,CAAe;IAG7B,OAAO,CAAC,MAAM,CAAC,UAAU,CAAkC;IAC3D,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,YAAY,CAAU;IAC9C,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,cAAc,CAAM;gBAEhC,EAAE,EAAE,SAAS;IAIzB;;OAEG;IACH,MAAM,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,MAAM,GAAG,IAAI;IAQ3C;;OAEG;IACG,MAAM,CACV,IAAI,EAAE,MAAM,EACZ,OAAO,EAAE,MAAM,EACf,YAAY,EAAE,MAAM,EACpB,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAC3B,OAAO,CAAC,KAAK,CAAC;IA2CjB;;OAEG;IACG,GAAG,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAYrC;;OAEG;IACG,IAAI,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,GAAG,OAAO,CAAC,KAAK,EAAE,CAAC;IAmB1D;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,KAAK,CAAC,GAAG,OAAO,CAAC,KAAK,CAAC;IAoEjE;;OAEG;IACG,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAiC1C;;;OAGG;IACG,OAAO,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA+BlD;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBvC;;OAEG;IACH,OAAO,CAAC,QAAQ;CAgBjB"}
|
|
@@ -0,0 +1,249 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Agents Service
|
|
3
|
+
*
|
|
4
|
+
* Manages agent creation, configuration, activation, and resolution.
|
|
5
|
+
*/
|
|
6
|
+
import { eq, and } from 'drizzle-orm';
|
|
7
|
+
import { nanoid } from 'nanoid';
|
|
8
|
+
import { agents } from '../../db/schema.js';
|
|
9
|
+
import { NotFoundError, ValidationError } from '../../errors/index.js';
|
|
10
|
+
import { getLogger } from '../../util/logger.js';
|
|
11
|
+
/**
|
|
12
|
+
* Create an agent ID with 'agent_' prefix
|
|
13
|
+
*/
|
|
14
|
+
export function generateAgentId() {
|
|
15
|
+
return `agent_${nanoid(21)}`;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* AgentsService handles all agent-related operations
|
|
19
|
+
*/
|
|
20
|
+
export class AgentsService {
|
|
21
|
+
db;
|
|
22
|
+
logger = getLogger();
|
|
23
|
+
// LRU-style cache for resolved agents (by name)
|
|
24
|
+
static agentCache = new Map();
|
|
25
|
+
static CACHE_TTL_MS = 60_000; // 1 minute TTL
|
|
26
|
+
static MAX_CACHE_SIZE = 50;
|
|
27
|
+
constructor(db) {
|
|
28
|
+
this.db = db;
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* Clear the agent cache (call after updates/activations)
|
|
32
|
+
*/
|
|
33
|
+
static clearCache(agentName) {
|
|
34
|
+
if (agentName) {
|
|
35
|
+
AgentsService.agentCache.delete(agentName);
|
|
36
|
+
}
|
|
37
|
+
else {
|
|
38
|
+
AgentsService.agentCache.clear();
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Create a new agent
|
|
43
|
+
*/
|
|
44
|
+
async create(name, version, systemPrompt, params) {
|
|
45
|
+
this.logger.debug(`Creating agent: ${name}@${version}`);
|
|
46
|
+
// Check for duplicate name+version
|
|
47
|
+
const existing = await this.db.query.agents.findFirst({
|
|
48
|
+
where: and(eq(agents.name, name), eq(agents.version, version)),
|
|
49
|
+
});
|
|
50
|
+
if (existing) {
|
|
51
|
+
throw new ValidationError(`Agent with name "${name}" and version "${version}" already exists`, 'name_version', { name, version });
|
|
52
|
+
}
|
|
53
|
+
const agentId = generateAgentId();
|
|
54
|
+
const now = new Date();
|
|
55
|
+
await this.db.insert(agents).values({
|
|
56
|
+
id: agentId,
|
|
57
|
+
name,
|
|
58
|
+
version,
|
|
59
|
+
promptTemplate: systemPrompt,
|
|
60
|
+
provider: params?.provider,
|
|
61
|
+
model: params?.model,
|
|
62
|
+
active: false,
|
|
63
|
+
metadata: params?.metadata || {},
|
|
64
|
+
createdAt: now,
|
|
65
|
+
updatedAt: now,
|
|
66
|
+
});
|
|
67
|
+
const agent = await this.db.query.agents.findFirst({
|
|
68
|
+
where: eq(agents.id, agentId),
|
|
69
|
+
});
|
|
70
|
+
if (!agent) {
|
|
71
|
+
throw new Error('Failed to create agent');
|
|
72
|
+
}
|
|
73
|
+
return this.mapAgent(agent);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get an agent by ID
|
|
77
|
+
*/
|
|
78
|
+
async get(id) {
|
|
79
|
+
const agent = await this.db.query.agents.findFirst({
|
|
80
|
+
where: eq(agents.id, id),
|
|
81
|
+
});
|
|
82
|
+
if (!agent) {
|
|
83
|
+
throw new NotFoundError('Agent', id);
|
|
84
|
+
}
|
|
85
|
+
return this.mapAgent(agent);
|
|
86
|
+
}
|
|
87
|
+
/**
|
|
88
|
+
* List all agents with optional filtering
|
|
89
|
+
*/
|
|
90
|
+
async list(filter) {
|
|
91
|
+
const conditions = [];
|
|
92
|
+
if (filter?.name) {
|
|
93
|
+
conditions.push(eq(agents.name, filter.name));
|
|
94
|
+
}
|
|
95
|
+
if (filter?.active !== undefined) {
|
|
96
|
+
conditions.push(eq(agents.active, filter.active));
|
|
97
|
+
}
|
|
98
|
+
const allAgents = await this.db.query.agents.findMany({
|
|
99
|
+
where: conditions.length > 0 ? and(...conditions) : undefined,
|
|
100
|
+
orderBy: (agents, { desc }) => [desc(agents.createdAt)],
|
|
101
|
+
});
|
|
102
|
+
return allAgents.map((a) => this.mapAgent(a));
|
|
103
|
+
}
|
|
104
|
+
/**
|
|
105
|
+
* Update an agent
|
|
106
|
+
*/
|
|
107
|
+
async update(id, updates) {
|
|
108
|
+
const existing = await this.db.query.agents.findFirst({
|
|
109
|
+
where: eq(agents.id, id),
|
|
110
|
+
});
|
|
111
|
+
if (!existing) {
|
|
112
|
+
throw new NotFoundError('Agent', id);
|
|
113
|
+
}
|
|
114
|
+
// Check for duplicate name+version if updating those fields
|
|
115
|
+
if ((updates.name || updates.version) &&
|
|
116
|
+
(updates.name !== existing.name || updates.version !== existing.version)) {
|
|
117
|
+
const duplicate = await this.db.query.agents.findFirst({
|
|
118
|
+
where: and(eq(agents.name, updates.name || existing.name), eq(agents.version, updates.version || existing.version)),
|
|
119
|
+
});
|
|
120
|
+
if (duplicate && duplicate.id !== id) {
|
|
121
|
+
throw new ValidationError(`Agent with name and version already exists`, 'name_version');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
const updateData = {
|
|
125
|
+
updatedAt: new Date(),
|
|
126
|
+
};
|
|
127
|
+
if (updates.name !== undefined) {
|
|
128
|
+
updateData.name = updates.name;
|
|
129
|
+
}
|
|
130
|
+
if (updates.version !== undefined) {
|
|
131
|
+
updateData.version = updates.version;
|
|
132
|
+
}
|
|
133
|
+
if (updates.systemPrompt !== undefined) {
|
|
134
|
+
updateData.promptTemplate = updates.systemPrompt;
|
|
135
|
+
}
|
|
136
|
+
if (updates.constraints?.maxTokens !== undefined) {
|
|
137
|
+
updateData.model = updates.constraints.maxTokens;
|
|
138
|
+
}
|
|
139
|
+
if (updates.metadata !== undefined) {
|
|
140
|
+
updateData.metadata = updates.metadata;
|
|
141
|
+
}
|
|
142
|
+
await this.db.update(agents).set(updateData).where(eq(agents.id, id));
|
|
143
|
+
// Invalidate cache for this agent
|
|
144
|
+
AgentsService.clearCache(existing.name);
|
|
145
|
+
if (updates.name && updates.name !== existing.name) {
|
|
146
|
+
AgentsService.clearCache(updates.name);
|
|
147
|
+
}
|
|
148
|
+
const updated = await this.db.query.agents.findFirst({
|
|
149
|
+
where: eq(agents.id, id),
|
|
150
|
+
});
|
|
151
|
+
if (!updated) {
|
|
152
|
+
throw new Error('Failed to update agent');
|
|
153
|
+
}
|
|
154
|
+
return this.mapAgent(updated);
|
|
155
|
+
}
|
|
156
|
+
/**
|
|
157
|
+
* Activate an agent (only one active per name)
|
|
158
|
+
*/
|
|
159
|
+
async activate(id) {
|
|
160
|
+
const agent = await this.db.query.agents.findFirst({
|
|
161
|
+
where: eq(agents.id, id),
|
|
162
|
+
});
|
|
163
|
+
if (!agent) {
|
|
164
|
+
throw new NotFoundError('Agent', id);
|
|
165
|
+
}
|
|
166
|
+
// Deactivate all other agents with the same name
|
|
167
|
+
await this.db.update(agents)
|
|
168
|
+
.set({ active: false, updatedAt: new Date() })
|
|
169
|
+
.where(eq(agents.name, agent.name));
|
|
170
|
+
// Activate this agent
|
|
171
|
+
await this.db.update(agents)
|
|
172
|
+
.set({ active: true, updatedAt: new Date() })
|
|
173
|
+
.where(eq(agents.id, id));
|
|
174
|
+
// Invalidate cache for this agent name
|
|
175
|
+
AgentsService.clearCache(agent.name);
|
|
176
|
+
const updated = await this.db.query.agents.findFirst({
|
|
177
|
+
where: eq(agents.id, id),
|
|
178
|
+
});
|
|
179
|
+
if (!updated) {
|
|
180
|
+
throw new Error('Failed to activate agent');
|
|
181
|
+
}
|
|
182
|
+
return this.mapAgent(updated);
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* Resolve an agent by name (gets active agent with that name)
|
|
186
|
+
* Uses caching for performance
|
|
187
|
+
*/
|
|
188
|
+
async resolve(name) {
|
|
189
|
+
// Check cache first
|
|
190
|
+
const cached = AgentsService.agentCache.get(name);
|
|
191
|
+
const now = Date.now();
|
|
192
|
+
if (cached && (now - cached.timestamp) < AgentsService.CACHE_TTL_MS) {
|
|
193
|
+
this.logger.debug(`Agent cache hit: ${name}`);
|
|
194
|
+
return cached.agent;
|
|
195
|
+
}
|
|
196
|
+
// Cache miss or expired - fetch from DB
|
|
197
|
+
const agent = await this.db.query.agents.findFirst({
|
|
198
|
+
where: and(eq(agents.name, name), eq(agents.active, true)),
|
|
199
|
+
});
|
|
200
|
+
if (agent) {
|
|
201
|
+
const mappedAgent = this.mapAgent(agent);
|
|
202
|
+
// Evict oldest if cache is full
|
|
203
|
+
if (AgentsService.agentCache.size >= AgentsService.MAX_CACHE_SIZE) {
|
|
204
|
+
const firstKey = AgentsService.agentCache.keys().next().value;
|
|
205
|
+
if (firstKey)
|
|
206
|
+
AgentsService.agentCache.delete(firstKey);
|
|
207
|
+
}
|
|
208
|
+
AgentsService.agentCache.set(name, { agent: mappedAgent, timestamp: now });
|
|
209
|
+
return mappedAgent;
|
|
210
|
+
}
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
/**
|
|
214
|
+
* Delete an agent (cannot delete active agents)
|
|
215
|
+
*/
|
|
216
|
+
async delete(id) {
|
|
217
|
+
const agent = await this.db.query.agents.findFirst({
|
|
218
|
+
where: eq(agents.id, id),
|
|
219
|
+
});
|
|
220
|
+
if (!agent) {
|
|
221
|
+
throw new NotFoundError('Agent', id);
|
|
222
|
+
}
|
|
223
|
+
if (agent.active) {
|
|
224
|
+
throw new ValidationError('Cannot delete active agent. Activate another version first.', 'active', agent.active);
|
|
225
|
+
}
|
|
226
|
+
await this.db.delete(agents).where(eq(agents.id, id));
|
|
227
|
+
this.logger.debug(`Deleted agent: ${id}`);
|
|
228
|
+
}
|
|
229
|
+
/**
|
|
230
|
+
* Map database record to Agent type
|
|
231
|
+
*/
|
|
232
|
+
mapAgent(record) {
|
|
233
|
+
return {
|
|
234
|
+
id: record.id,
|
|
235
|
+
name: record.name,
|
|
236
|
+
version: record.version,
|
|
237
|
+
description: record.metadata?.description,
|
|
238
|
+
systemPrompt: record.promptTemplate,
|
|
239
|
+
provider: (record.provider || 'openai'),
|
|
240
|
+
model: record.model || 'gpt-4o',
|
|
241
|
+
isActive: record.active,
|
|
242
|
+
constraints: record.metadata?.constraints,
|
|
243
|
+
metadata: record.metadata,
|
|
244
|
+
createdAt: record.createdAt,
|
|
245
|
+
updatedAt: record.updatedAt,
|
|
246
|
+
};
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
//# sourceMappingURL=agents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agents.js","sourceRoot":"","sources":["../../../src/core/execution/agents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Artifacts Service
|
|
3
|
+
*
|
|
4
|
+
* Manages artifact files generated during execution.
|
|
5
|
+
* Artifacts are output files created by agents and stored for later retrieval.
|
|
6
|
+
*/
|
|
7
|
+
/**
|
|
8
|
+
* ArtifactsService handles artifact listing and retrieval
|
|
9
|
+
*/
|
|
10
|
+
export declare class ArtifactsService {
|
|
11
|
+
private artifactsDir;
|
|
12
|
+
private logger;
|
|
13
|
+
constructor(artifactsDir?: string);
|
|
14
|
+
/**
|
|
15
|
+
* List all artifacts
|
|
16
|
+
*/
|
|
17
|
+
list(): Promise<string[]>;
|
|
18
|
+
/**
|
|
19
|
+
* Get an artifact by filename
|
|
20
|
+
*/
|
|
21
|
+
get(filename: string): Promise<Buffer>;
|
|
22
|
+
/**
|
|
23
|
+
* Internal: Save an artifact
|
|
24
|
+
*/
|
|
25
|
+
_save(filename: string, content: Buffer | string): Promise<void>;
|
|
26
|
+
}
|
|
27
|
+
//# sourceMappingURL=artifacts.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"artifacts.d.ts","sourceRoot":"","sources":["../../../src/core/execution/artifacts.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAQH;;GAEG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,MAAM,CAAe;gBAEjB,YAAY,CAAC,EAAE,MAAM;IAIjC;;OAEG;IACG,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAmB/B;;OAEG;IACG,GAAG,CAAC,QAAQ,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC;IAuB5C;;OAEG;IACG,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CA6BvE"}
|