@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.
Files changed (202) hide show
  1. package/README.md +251 -0
  2. package/dist/__tests__/test-utils.d.ts +24 -0
  3. package/dist/__tests__/test-utils.d.ts.map +1 -0
  4. package/dist/__tests__/test-utils.js +32 -0
  5. package/dist/__tests__/test-utils.js.map +1 -0
  6. package/dist/core/execution/agents.d.ts +60 -0
  7. package/dist/core/execution/agents.d.ts.map +1 -0
  8. package/dist/core/execution/agents.js +249 -0
  9. package/dist/core/execution/agents.js.map +1 -0
  10. package/dist/core/execution/artifacts.d.ts +27 -0
  11. package/dist/core/execution/artifacts.d.ts.map +1 -0
  12. package/dist/core/execution/artifacts.js +93 -0
  13. package/dist/core/execution/artifacts.js.map +1 -0
  14. package/dist/core/execution/costs.d.ts +160 -0
  15. package/dist/core/execution/costs.d.ts.map +1 -0
  16. package/dist/core/execution/costs.js +196 -0
  17. package/dist/core/execution/costs.js.map +1 -0
  18. package/dist/core/execution/dagExecutor.d.ts +112 -0
  19. package/dist/core/execution/dagExecutor.d.ts.map +1 -0
  20. package/dist/core/execution/dagExecutor.js +647 -0
  21. package/dist/core/execution/dagExecutor.js.map +1 -0
  22. package/dist/core/execution/dags.d.ts +167 -0
  23. package/dist/core/execution/dags.d.ts.map +1 -0
  24. package/dist/core/execution/dags.js +713 -0
  25. package/dist/core/execution/dags.js.map +1 -0
  26. package/dist/core/execution/executions.d.ts +158 -0
  27. package/dist/core/execution/executions.d.ts.map +1 -0
  28. package/dist/core/execution/executions.js +258 -0
  29. package/dist/core/execution/executions.js.map +1 -0
  30. package/dist/core/execution/goals.d.ts +62 -0
  31. package/dist/core/execution/goals.d.ts.map +1 -0
  32. package/dist/core/execution/goals.js +245 -0
  33. package/dist/core/execution/goals.js.map +1 -0
  34. package/dist/core/execution/runs.d.ts +65 -0
  35. package/dist/core/execution/runs.d.ts.map +1 -0
  36. package/dist/core/execution/runs.js +219 -0
  37. package/dist/core/execution/runs.js.map +1 -0
  38. package/dist/core/execution/tools.d.ts +24 -0
  39. package/dist/core/execution/tools.d.ts.map +1 -0
  40. package/dist/core/execution/tools.js +33 -0
  41. package/dist/core/execution/tools.js.map +1 -0
  42. package/dist/core/orchestration/index.d.ts +7 -0
  43. package/dist/core/orchestration/index.d.ts.map +1 -0
  44. package/dist/core/orchestration/index.js +7 -0
  45. package/dist/core/orchestration/index.js.map +1 -0
  46. package/dist/core/orchestration/orchestrator.d.ts +39 -0
  47. package/dist/core/orchestration/orchestrator.d.ts.map +1 -0
  48. package/dist/core/orchestration/orchestrator.js +141 -0
  49. package/dist/core/orchestration/orchestrator.js.map +1 -0
  50. package/dist/core/orchestration/planner.d.ts +63 -0
  51. package/dist/core/orchestration/planner.d.ts.map +1 -0
  52. package/dist/core/orchestration/planner.js +99 -0
  53. package/dist/core/orchestration/planner.js.map +1 -0
  54. package/dist/core/providers/factory.d.ts +25 -0
  55. package/dist/core/providers/factory.d.ts.map +1 -0
  56. package/dist/core/providers/factory.js +86 -0
  57. package/dist/core/providers/factory.js.map +1 -0
  58. package/dist/core/providers/index.d.ts +11 -0
  59. package/dist/core/providers/index.d.ts.map +1 -0
  60. package/dist/core/providers/index.js +10 -0
  61. package/dist/core/providers/index.js.map +1 -0
  62. package/dist/core/providers/ollama.d.ts +36 -0
  63. package/dist/core/providers/ollama.d.ts.map +1 -0
  64. package/dist/core/providers/ollama.js +123 -0
  65. package/dist/core/providers/ollama.js.map +1 -0
  66. package/dist/core/providers/openai.d.ts +33 -0
  67. package/dist/core/providers/openai.d.ts.map +1 -0
  68. package/dist/core/providers/openai.js +114 -0
  69. package/dist/core/providers/openai.js.map +1 -0
  70. package/dist/core/providers/openrouter.d.ts +38 -0
  71. package/dist/core/providers/openrouter.d.ts.map +1 -0
  72. package/dist/core/providers/openrouter.js +269 -0
  73. package/dist/core/providers/openrouter.js.map +1 -0
  74. package/dist/core/providers/types.d.ts +101 -0
  75. package/dist/core/providers/types.d.ts.map +1 -0
  76. package/dist/core/providers/types.js +7 -0
  77. package/dist/core/providers/types.js.map +1 -0
  78. package/dist/core/tools/base.d.ts +56 -0
  79. package/dist/core/tools/base.d.ts.map +1 -0
  80. package/dist/core/tools/base.js +60 -0
  81. package/dist/core/tools/base.js.map +1 -0
  82. package/dist/core/tools/bash.d.ts +50 -0
  83. package/dist/core/tools/bash.d.ts.map +1 -0
  84. package/dist/core/tools/bash.js +179 -0
  85. package/dist/core/tools/bash.js.map +1 -0
  86. package/dist/core/tools/edit.d.ts +39 -0
  87. package/dist/core/tools/edit.d.ts.map +1 -0
  88. package/dist/core/tools/edit.js +67 -0
  89. package/dist/core/tools/edit.js.map +1 -0
  90. package/dist/core/tools/executor.d.ts +33 -0
  91. package/dist/core/tools/executor.d.ts.map +1 -0
  92. package/dist/core/tools/executor.js +105 -0
  93. package/dist/core/tools/executor.js.map +1 -0
  94. package/dist/core/tools/fetchPage.d.ts +46 -0
  95. package/dist/core/tools/fetchPage.d.ts.map +1 -0
  96. package/dist/core/tools/fetchPage.js +87 -0
  97. package/dist/core/tools/fetchPage.js.map +1 -0
  98. package/dist/core/tools/fetchURLs.d.ts +39 -0
  99. package/dist/core/tools/fetchURLs.d.ts.map +1 -0
  100. package/dist/core/tools/fetchURLs.js +67 -0
  101. package/dist/core/tools/fetchURLs.js.map +1 -0
  102. package/dist/core/tools/glob.d.ts +36 -0
  103. package/dist/core/tools/glob.d.ts.map +1 -0
  104. package/dist/core/tools/glob.js +78 -0
  105. package/dist/core/tools/glob.js.map +1 -0
  106. package/dist/core/tools/grep.d.ts +51 -0
  107. package/dist/core/tools/grep.d.ts.map +1 -0
  108. package/dist/core/tools/grep.js +152 -0
  109. package/dist/core/tools/grep.js.map +1 -0
  110. package/dist/core/tools/index.d.ts +22 -0
  111. package/dist/core/tools/index.d.ts.map +1 -0
  112. package/dist/core/tools/index.js +22 -0
  113. package/dist/core/tools/index.js.map +1 -0
  114. package/dist/core/tools/llmExecute.d.ts +153 -0
  115. package/dist/core/tools/llmExecute.d.ts.map +1 -0
  116. package/dist/core/tools/llmExecute.js +105 -0
  117. package/dist/core/tools/llmExecute.js.map +1 -0
  118. package/dist/core/tools/readEmail.d.ts +68 -0
  119. package/dist/core/tools/readEmail.d.ts.map +1 -0
  120. package/dist/core/tools/readEmail.js +182 -0
  121. package/dist/core/tools/readEmail.js.map +1 -0
  122. package/dist/core/tools/readFile.d.ts +42 -0
  123. package/dist/core/tools/readFile.d.ts.map +1 -0
  124. package/dist/core/tools/readFile.js +79 -0
  125. package/dist/core/tools/readFile.js.map +1 -0
  126. package/dist/core/tools/registry.d.ts +53 -0
  127. package/dist/core/tools/registry.d.ts.map +1 -0
  128. package/dist/core/tools/registry.js +112 -0
  129. package/dist/core/tools/registry.js.map +1 -0
  130. package/dist/core/tools/sendEmail.d.ts +83 -0
  131. package/dist/core/tools/sendEmail.d.ts.map +1 -0
  132. package/dist/core/tools/sendEmail.js +132 -0
  133. package/dist/core/tools/sendEmail.js.map +1 -0
  134. package/dist/core/tools/sendWebhook.d.ts +48 -0
  135. package/dist/core/tools/sendWebhook.d.ts.map +1 -0
  136. package/dist/core/tools/sendWebhook.js +61 -0
  137. package/dist/core/tools/sendWebhook.js.map +1 -0
  138. package/dist/core/tools/webSearch.d.ts +34 -0
  139. package/dist/core/tools/webSearch.d.ts.map +1 -0
  140. package/dist/core/tools/webSearch.js +104 -0
  141. package/dist/core/tools/webSearch.js.map +1 -0
  142. package/dist/core/tools/writeFile.d.ts +49 -0
  143. package/dist/core/tools/writeFile.d.ts.map +1 -0
  144. package/dist/core/tools/writeFile.js +120 -0
  145. package/dist/core/tools/writeFile.js.map +1 -0
  146. package/dist/db/client.d.ts +22 -0
  147. package/dist/db/client.d.ts.map +1 -0
  148. package/dist/db/client.js +178 -0
  149. package/dist/db/client.js.map +1 -0
  150. package/dist/db/schema.d.ts +1846 -0
  151. package/dist/db/schema.d.ts.map +1 -0
  152. package/dist/db/schema.js +175 -0
  153. package/dist/db/schema.js.map +1 -0
  154. package/dist/errors/index.d.ts +80 -0
  155. package/dist/errors/index.d.ts.map +1 -0
  156. package/dist/errors/index.js +135 -0
  157. package/dist/errors/index.js.map +1 -0
  158. package/dist/index.d.ts +52 -0
  159. package/dist/index.d.ts.map +1 -0
  160. package/dist/index.js +172 -0
  161. package/dist/index.js.map +1 -0
  162. package/dist/services/initDB.d.ts +17 -0
  163. package/dist/services/initDB.d.ts.map +1 -0
  164. package/dist/services/initDB.js +212 -0
  165. package/dist/services/initDB.js.map +1 -0
  166. package/dist/types/agent.d.ts +354 -0
  167. package/dist/types/agent.d.ts.map +1 -0
  168. package/dist/types/agent.js +63 -0
  169. package/dist/types/agent.js.map +1 -0
  170. package/dist/types/client.d.ts +309 -0
  171. package/dist/types/client.d.ts.map +1 -0
  172. package/dist/types/client.js +2 -0
  173. package/dist/types/client.js.map +1 -0
  174. package/dist/types/config.d.ts +96 -0
  175. package/dist/types/config.d.ts.map +1 -0
  176. package/dist/types/config.js +33 -0
  177. package/dist/types/config.js.map +1 -0
  178. package/dist/types/dag.d.ts +253 -0
  179. package/dist/types/dag.d.ts.map +1 -0
  180. package/dist/types/dag.js +46 -0
  181. package/dist/types/dag.js.map +1 -0
  182. package/dist/types/execution.d.ts +171 -0
  183. package/dist/types/execution.d.ts.map +1 -0
  184. package/dist/types/execution.js +41 -0
  185. package/dist/types/execution.js.map +1 -0
  186. package/dist/types/index.d.ts +12 -0
  187. package/dist/types/index.d.ts.map +1 -0
  188. package/dist/types/index.js +11 -0
  189. package/dist/types/index.js.map +1 -0
  190. package/dist/util/cron-validator.d.ts +16 -0
  191. package/dist/util/cron-validator.d.ts.map +1 -0
  192. package/dist/util/cron-validator.js +31 -0
  193. package/dist/util/cron-validator.js.map +1 -0
  194. package/dist/util/dag-utils.d.ts +54 -0
  195. package/dist/util/dag-utils.d.ts.map +1 -0
  196. package/dist/util/dag-utils.js +167 -0
  197. package/dist/util/dag-utils.js.map +1 -0
  198. package/dist/util/logger.d.ts +21 -0
  199. package/dist/util/logger.d.ts.map +1 -0
  200. package/dist/util/logger.js +87 -0
  201. package/dist/util/logger.js.map +1 -0
  202. 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"}