@agentuity/runtime 0.0.60 → 0.0.61

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 (61) hide show
  1. package/dist/_context.d.ts +11 -7
  2. package/dist/_context.d.ts.map +1 -1
  3. package/dist/_context.js +9 -2
  4. package/dist/_context.js.map +1 -1
  5. package/dist/_server.d.ts +4 -2
  6. package/dist/_server.d.ts.map +1 -1
  7. package/dist/_server.js +71 -31
  8. package/dist/_server.js.map +1 -1
  9. package/dist/_services.d.ts +1 -1
  10. package/dist/_services.d.ts.map +1 -1
  11. package/dist/_services.js +4 -2
  12. package/dist/_services.js.map +1 -1
  13. package/dist/_waituntil.d.ts.map +1 -1
  14. package/dist/_waituntil.js +5 -2
  15. package/dist/_waituntil.js.map +1 -1
  16. package/dist/agent.d.ts +647 -19
  17. package/dist/agent.d.ts.map +1 -1
  18. package/dist/agent.js +55 -6
  19. package/dist/agent.js.map +1 -1
  20. package/dist/app.d.ts +205 -28
  21. package/dist/app.d.ts.map +1 -1
  22. package/dist/app.js +181 -13
  23. package/dist/app.js.map +1 -1
  24. package/dist/index.d.ts +41 -2
  25. package/dist/index.d.ts.map +1 -1
  26. package/dist/index.js +2 -2
  27. package/dist/index.js.map +1 -1
  28. package/dist/io/email.d.ts.map +1 -1
  29. package/dist/io/email.js +11 -3
  30. package/dist/io/email.js.map +1 -1
  31. package/dist/router.d.ts +282 -32
  32. package/dist/router.d.ts.map +1 -1
  33. package/dist/router.js +110 -35
  34. package/dist/router.js.map +1 -1
  35. package/dist/services/evalrun/http.d.ts.map +1 -1
  36. package/dist/services/evalrun/http.js +7 -5
  37. package/dist/services/evalrun/http.js.map +1 -1
  38. package/dist/services/local/_util.d.ts.map +1 -1
  39. package/dist/services/local/_util.js +3 -1
  40. package/dist/services/local/_util.js.map +1 -1
  41. package/dist/services/session/http.d.ts.map +1 -1
  42. package/dist/services/session/http.js +4 -3
  43. package/dist/services/session/http.js.map +1 -1
  44. package/dist/session.d.ts +284 -4
  45. package/dist/session.d.ts.map +1 -1
  46. package/dist/session.js +2 -2
  47. package/dist/session.js.map +1 -1
  48. package/package.json +5 -4
  49. package/src/_context.ts +37 -9
  50. package/src/_server.ts +88 -36
  51. package/src/_services.ts +9 -2
  52. package/src/_waituntil.ts +13 -2
  53. package/src/agent.ts +856 -68
  54. package/src/app.ts +238 -38
  55. package/src/index.ts +42 -2
  56. package/src/io/email.ts +23 -5
  57. package/src/router.ts +359 -83
  58. package/src/services/evalrun/http.ts +15 -4
  59. package/src/services/local/_util.ts +7 -1
  60. package/src/services/session/http.ts +5 -2
  61. package/src/session.ts +297 -4
package/dist/app.js CHANGED
@@ -2,26 +2,86 @@
2
2
  /** biome-ignore-all lint/suspicious/noExplicitAny: any are ok */
3
3
  import { Hono } from 'hono';
4
4
  import { createServer, getLogger } from './_server';
5
+ /**
6
+ * Main application instance created by createApp().
7
+ * Provides access to the router, server, logger, and app state.
8
+ *
9
+ * @template TAppState - The type of application state returned from setup function
10
+ *
11
+ * @example
12
+ * ```typescript
13
+ * const app = await createApp({
14
+ * setup: async () => ({ db: await connectDB() })
15
+ * });
16
+ *
17
+ * // Access state
18
+ * console.log(app.state.db);
19
+ *
20
+ * // Add routes
21
+ * app.router.get('/health', (c) => c.text('OK'));
22
+ *
23
+ * // Listen to events
24
+ * app.addEventListener('agent.started', (eventName, agent, ctx) => {
25
+ * console.log(`Agent ${agent.metadata.name} started`);
26
+ * });
27
+ * ```
28
+ */
5
29
  export class App {
6
30
  /**
7
- * the router instance
31
+ * The Hono router instance for defining routes.
8
32
  */
9
33
  router;
10
34
  /**
11
- * the server instance
35
+ * The Bun server instance.
12
36
  */
13
37
  server;
14
38
  /**
15
- * the logger instance
39
+ * The application logger instance.
16
40
  */
17
41
  logger;
42
+ /**
43
+ * The application state returned from the setup function.
44
+ * Available in all agents via ctx.app.
45
+ */
46
+ state;
18
47
  eventListeners = new Map();
19
- constructor(config) {
20
- this.router = new Hono();
21
- this.server = createServer(this.router, config);
48
+ constructor(state, router, server) {
49
+ this.state = state;
50
+ this.router = router;
51
+ this.server = server;
22
52
  this.logger = getLogger();
23
53
  setGlobalApp(this);
24
54
  }
55
+ /**
56
+ * Register an event listener for application lifecycle events.
57
+ *
58
+ * Available events:
59
+ * - `agent.started` - Fired when an agent begins execution
60
+ * - `agent.completed` - Fired when an agent completes successfully
61
+ * - `agent.errored` - Fired when an agent throws an error
62
+ * - `session.started` - Fired when a new session starts
63
+ * - `session.completed` - Fired when a session completes
64
+ * - `thread.created` - Fired when a thread is created
65
+ * - `thread.destroyed` - Fired when a thread is destroyed
66
+ *
67
+ * @param eventName - The event name to listen for
68
+ * @param callback - The callback function to execute when the event fires
69
+ *
70
+ * @example
71
+ * ```typescript
72
+ * app.addEventListener('agent.started', (eventName, agent, ctx) => {
73
+ * console.log(`${agent.metadata.name} started for session ${ctx.sessionId}`);
74
+ * });
75
+ *
76
+ * app.addEventListener('agent.errored', (eventName, agent, ctx, error) => {
77
+ * console.error(`${agent.metadata.name} failed:`, error.message);
78
+ * });
79
+ *
80
+ * app.addEventListener('session.started', (eventName, session) => {
81
+ * console.log(`New session: ${session.id}`);
82
+ * });
83
+ * ```
84
+ */
25
85
  addEventListener(eventName, callback) {
26
86
  let callbacks = this.eventListeners.get(eventName);
27
87
  if (!callbacks) {
@@ -30,12 +90,42 @@ export class App {
30
90
  }
31
91
  callbacks.add(callback);
32
92
  }
93
+ /**
94
+ * Remove a previously registered event listener.
95
+ *
96
+ * @param eventName - The event name to stop listening for
97
+ * @param callback - The callback function to remove
98
+ *
99
+ * @example
100
+ * ```typescript
101
+ * const handler = (eventName, agent, ctx) => {
102
+ * console.log('Agent started:', agent.metadata.name);
103
+ * };
104
+ *
105
+ * app.addEventListener('agent.started', handler);
106
+ * // Later...
107
+ * app.removeEventListener('agent.started', handler);
108
+ * ```
109
+ */
33
110
  removeEventListener(eventName, callback) {
34
111
  const callbacks = this.eventListeners.get(eventName);
35
112
  if (!callbacks)
36
113
  return;
37
114
  callbacks.delete(callback);
38
115
  }
116
+ /**
117
+ * Manually fire an application event.
118
+ * Typically used internally by the runtime, but can be used for custom events.
119
+ *
120
+ * @param eventName - The event name to fire
121
+ * @param args - The arguments to pass to event listeners
122
+ *
123
+ * @example
124
+ * ```typescript
125
+ * // Fire a session completed event
126
+ * await app.fireEvent('session.completed', session);
127
+ * ```
128
+ */
39
129
  async fireEvent(eventName, ...args) {
40
130
  const callbacks = this.eventListeners.get(eventName);
41
131
  if (!callbacks || callbacks.size === 0)
@@ -49,22 +139,100 @@ let globalApp = null;
49
139
  function setGlobalApp(app) {
50
140
  globalApp = app;
51
141
  }
142
+ /**
143
+ * Get the global app instance.
144
+ * Returns null if createApp() has not been called yet.
145
+ *
146
+ * @returns The global App instance or null
147
+ *
148
+ * @example
149
+ * ```typescript
150
+ * const app = getApp();
151
+ * if (app) {
152
+ * console.log('Server running on port:', app.server.port);
153
+ * }
154
+ * ```
155
+ */
52
156
  export function getApp() {
53
157
  return globalApp;
54
158
  }
55
159
  /**
56
- * create a new app instance
160
+ * Creates a new Agentuity application with optional lifecycle hooks and service configuration.
161
+ *
162
+ * This is the main entry point for creating an Agentuity app. The app will:
163
+ * 1. Run the setup function (if provided) to initialize app state
164
+ * 2. Start the Bun server
165
+ * 3. Make the app state available in all agents via ctx.app
166
+ *
167
+ * @template TAppState - The type of application state returned from setup function
168
+ *
169
+ * @param config - Optional application configuration
170
+ * @param config.setup - Function to initialize app state, runs before server starts
171
+ * @param config.shutdown - Function to clean up resources when server stops
172
+ * @param config.cors - CORS configuration for HTTP routes
173
+ * @param config.services - Override default storage and service providers
57
174
  *
58
- * @returns App instance
175
+ * @returns Promise resolving to App instance with running server
176
+ *
177
+ * @example
178
+ * ```typescript
179
+ * // Simple app with no state
180
+ * const app = await createApp();
181
+ *
182
+ * // App with database connection
183
+ * const app = await createApp({
184
+ * setup: async () => {
185
+ * const db = await connectDatabase();
186
+ * return { db };
187
+ * },
188
+ * shutdown: async (state) => {
189
+ * await state.db.close();
190
+ * }
191
+ * });
192
+ *
193
+ * // Access state in agents
194
+ * const agent = createAgent({
195
+ * handler: async (ctx, input) => {
196
+ * const db = ctx.app.db; // Strongly typed!
197
+ * return db.query('SELECT * FROM users');
198
+ * }
199
+ * });
200
+ *
201
+ * // App with custom services
202
+ * const app = await createApp({
203
+ * services: {
204
+ * useLocal: true, // Use local in-memory storage for development
205
+ * }
206
+ * });
207
+ * ```
59
208
  */
60
- export function createApp(config) {
61
- return new App(config);
209
+ export async function createApp(config) {
210
+ const initializer = async () => {
211
+ // Run setup if provided
212
+ if (config?.setup) {
213
+ return config.setup();
214
+ }
215
+ else {
216
+ return {};
217
+ }
218
+ };
219
+ const router = new Hono();
220
+ const [server, state] = await createServer(router, initializer, config);
221
+ return new App(state, router, server);
62
222
  }
63
223
  /**
64
- * fire a global event
224
+ * Fire a global application event.
225
+ * Convenience function that calls fireEvent on the global app instance.
226
+ *
227
+ * @param eventName - The event name to fire
228
+ * @param args - The arguments to pass to event listeners
65
229
  *
66
- * @param eventName
67
- * @param args
230
+ * @example
231
+ * ```typescript
232
+ * // Fire from anywhere in your app
233
+ * await fireEvent('session.started', session);
234
+ * await fireEvent('agent.completed', agent, ctx);
235
+ * ```
68
236
  */
69
237
  export async function fireEvent(eventName, ...args) {
70
238
  await globalApp?.fireEvent(eventName, ...args);
package/dist/app.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"AAAA,uDAAuD;AACvD,iEAAiE;AACjE,OAAO,EAAuB,IAAI,EAAE,MAAM,MAAM,CAAC;AAGjD,OAAO,EAAE,YAAY,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AAsHpD,MAAM,OAAO,GAAG;IACf;;OAEG;IACM,MAAM,CAAY;IAC3B;;OAEG;IACM,MAAM,CAAkC;IACjD;;OAEG;IACM,MAAM,CAAS;IAEhB,cAAc,GAAG,IAAI,GAAG,EAAiD,CAAC;IAElF,YAAY,MAAkB;QAC7B,IAAI,CAAC,MAAM,GAAG,IAAI,IAAI,EAAO,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;QAChD,IAAI,CAAC,MAAM,GAAG,SAAS,EAAY,CAAC;QACpC,YAAY,CAAC,IAAI,CAAC,CAAC;IACpB,CAAC;IAED,gBAAgB,CACf,SAAY,EACZ,QAA6B;QAE7B,IAAI,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACnD,IAAI,CAAC,SAAS,EAAE,CAAC;YAChB,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;QAC/C,CAAC;QACD,SAAS,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC;IACzB,CAAC;IAED,mBAAmB,CAClB,SAAY,EACZ,QAA6B;QAE7B,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS;YAAE,OAAO;QACvB,SAAS,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC;IAC5B,CAAC;IAED,KAAK,CAAC,SAAS,CACd,SAAY,EACZ,GAAG,IAAoB;QAEvB,MAAM,SAAS,GAAG,IAAI,CAAC,cAAc,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;QACrD,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,KAAK,CAAC;YAAE,OAAO;QAE/C,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;YAClC,MAAM,QAAQ,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;QACpC,CAAC;IACF,CAAC;CACD;AAED,IAAI,SAAS,GAAe,IAAI,CAAC;AAEjC,SAAS,YAAY,CAAC,GAAQ;IAC7B,SAAS,GAAG,GAAG,CAAC;AACjB,CAAC;AAED,MAAM,UAAU,MAAM;IACrB,OAAO,SAAS,CAAC;AAClB,CAAC;AAED;;;;GAIG;AACH,MAAM,UAAU,SAAS,CAAC,MAAkB;IAC3C,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC;AACxB,CAAC;AAED;;;;;GAKG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC9B,SAAY,EACZ,GAAG,IAAoB;IAEvB,MAAM,SAAS,EAAE,SAAS,CAAC,SAAS,EAAE,GAAG,IAAI,CAAC,CAAC;AAChD,CAAC"}
1
+ {"version":3,"file":"app.js","sourceRoot":"","sources":["../src/app.ts"],"names":[],"mappings":"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"}
package/dist/index.d.ts CHANGED
@@ -6,8 +6,47 @@ export * from './eval';
6
6
  export * from './session';
7
7
  export * from './workbench';
8
8
  export type { Logger } from './logger';
9
- export { getRouter } from './_server';
9
+ export { getRouter, getAppState } from './_server';
10
10
  export { Email, parseEmail } from './io/email';
11
11
  export * from './services/evalrun';
12
- export { getEvalRunEventProvider } from './_services';
12
+ export { getEvalRunEventProvider, getThreadProvider, getSessionProvider } from './_services';
13
+ /**
14
+ * Application state interface that gets automatically augmented based on your createApp setup function.
15
+ *
16
+ * This interface is empty by default but gets populated with strongly-typed properties
17
+ * when you define a setup function in createApp(). The Agentuity build tool automatically
18
+ * generates type augmentations in `.agentuity/.agentuity_runtime.ts`.
19
+ *
20
+ * **How it works:**
21
+ * 1. You define setup() in createApp() that returns an object
22
+ * 2. The build tool generates module augmentation for this interface
23
+ * 3. All agents get strongly-typed access to app state via `ctx.app`
24
+ *
25
+ * @example
26
+ * ```typescript
27
+ * // In your app.ts:
28
+ * const app = await createApp({
29
+ * setup: async () => {
30
+ * const db = await connectDatabase();
31
+ * const redis = await connectRedis();
32
+ * return { db, redis };
33
+ * }
34
+ * });
35
+ *
36
+ * // In your agent:
37
+ * const agent = createAgent({
38
+ * handler: async (ctx, input) => {
39
+ * // ctx.app is strongly typed with { db, redis }!
40
+ * const user = await ctx.app.db.query('SELECT * FROM users');
41
+ * await ctx.app.redis.set('key', 'value');
42
+ * return user;
43
+ * }
44
+ * });
45
+ * ```
46
+ *
47
+ * **Note:** If you're not seeing type hints for `ctx.app`, make sure you've run `bun run build`
48
+ * to generate the type augmentations.
49
+ */
50
+ export interface AppState {
51
+ }
13
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAC5B,YAAY,EAAE,MAAM,EAAE,MAAM,UAAU,CAAC;AACvC,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC;AAE7F;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AAEH,MAAM,WAAW,QAAQ;CAAG"}
package/dist/index.js CHANGED
@@ -5,8 +5,8 @@ export * from './router';
5
5
  export * from './eval';
6
6
  export * from './session';
7
7
  export * from './workbench';
8
- export { getRouter } from './_server';
8
+ export { getRouter, getAppState } from './_server';
9
9
  export { Email, parseEmail } from './io/email';
10
10
  export * from './services/evalrun';
11
- export { getEvalRunEventProvider } from './_services';
11
+ export { getEvalRunEventProvider, getThreadProvider, getSessionProvider } from './_services';
12
12
  //# sourceMappingURL=index.js.map
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,cAAc,SAAS,CAAC;AACxB,cAAc,OAAO,CAAC;AACtB,cAAc,WAAW,CAAC;AAC1B,cAAc,UAAU,CAAC;AACzB,cAAc,QAAQ,CAAC;AACvB,cAAc,WAAW,CAAC;AAC1B,cAAc,aAAa,CAAC;AAE5B,OAAO,EAAE,SAAS,EAAE,WAAW,EAAE,MAAM,WAAW,CAAC;AACnD,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/C,cAAc,oBAAoB,CAAC;AACnC,OAAO,EAAE,uBAAuB,EAAE,iBAAiB,EAAE,kBAAkB,EAAE,MAAM,aAAa,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/io/email.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,OAAO,EAAoC,MAAM,YAAY,CAAC;AAE7F;;;;;GAKG;AACH,qBAAa,KAAK;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,IAAI,EAAE,UAAU;IAI5B,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,IAAI,IAAI,IAAI,GAAG,IAAI;IAInB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;;;OAIG;IACH,EAAE,IAAI,MAAM,GAAG,IAAI;IAgBnB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,OAAO,IAAI,MAAM,GAAG,IAAI;IAaxB;;OAEG;IACH,MAAM,IAAI,MAAM,GAAG,IAAI;IAavB;;OAEG;IACH,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB;;OAEG;IACH,IAAI,IAAI,MAAM,GAAG,IAAI;IAIrB;;OAEG;IACH,IAAI,IAAI,MAAM,GAAG,IAAI;IAIrB;;;;;OAKG;IACH,WAAW,IAAI,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAS/D;AAED;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAoB7D"}
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/io/email.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,UAAU,EAAE,KAAK,OAAO,EAAoC,MAAM,YAAY,CAAC;AAE7F;;;;;GAKG;AACH,qBAAa,KAAK;IACjB,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAa;gBAE1B,IAAI,EAAE,UAAU;IAI5B,QAAQ,IAAI,MAAM;IAIlB;;OAEG;IACH,IAAI,IAAI,IAAI,GAAG,IAAI;IAInB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,OAAO,IAAI,OAAO;IAIlB;;;;OAIG;IACH,EAAE,IAAI,MAAM,GAAG,IAAI;IAgBnB;;OAEG;IACH,SAAS,IAAI,MAAM,GAAG,IAAI;IAI1B;;OAEG;IACH,QAAQ,IAAI,MAAM,GAAG,IAAI;IAIzB;;OAEG;IACH,OAAO,IAAI,MAAM,GAAG,IAAI;IAaxB;;OAEG;IACH,MAAM,IAAI,MAAM,GAAG,IAAI;IAavB;;OAEG;IACH,OAAO,IAAI,MAAM,GAAG,IAAI;IAIxB;;OAEG;IACH,IAAI,IAAI,MAAM,GAAG,IAAI;IAIrB;;OAEG;IACH,IAAI,IAAI,MAAM,GAAG,IAAI;IAIrB;;;;;OAKG;IACH,WAAW,IAAI,KAAK,CAAC;QAAE,QAAQ,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC;CAS/D;AAiBD;;;;;;GAMG;AACH,wBAAsB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC,CAsB7D"}
package/dist/io/email.js CHANGED
@@ -1,3 +1,4 @@
1
+ import { StructuredError } from '@agentuity/core';
1
2
  import { simpleParser } from 'mailparser';
2
3
  /**
3
4
  * A class representing an email with common information for processing.
@@ -127,6 +128,9 @@ export class Email {
127
128
  }));
128
129
  }
129
130
  }
131
+ const InvalidEmailEmptyError = StructuredError('InvalidEmailEmptyError', 'Failed to parse email: empty buffer');
132
+ const InvalidEmailHeadersError = StructuredError('InvalidEmailHeadersError', 'Failed to parse email: missing headers');
133
+ const InvalidEmailParseError = StructuredError('InvalidEmailParseError', 'Failed to parse email: body was invalid')();
130
134
  /**
131
135
  * Parse an email from a buffer and return an Email object.
132
136
  *
@@ -136,19 +140,23 @@ export class Email {
136
140
  */
137
141
  export async function parseEmail(data) {
138
142
  if (data.length === 0) {
139
- throw new Error('Failed to parse email: empty buffer');
143
+ throw new InvalidEmailEmptyError();
140
144
  }
141
145
  const first16KB = data.slice(0, 16384).toString('utf-8', 0, Math.min(data.length, 16384));
142
146
  const hasHeaders = /(^|\r?\n)[!-9;-~]+:\s/.test(first16KB);
143
147
  if (!hasHeaders) {
144
- throw new Error('Failed to parse email: missing headers');
148
+ throw new InvalidEmailHeadersError();
145
149
  }
146
150
  try {
147
151
  const message = await simpleParser(data);
148
152
  return new Email(message);
149
153
  }
150
154
  catch (error) {
151
- throw new Error(`Failed to parse email: ${error instanceof Error ? error.message : 'Unknown error'}`);
155
+ throw new InvalidEmailParseError({
156
+ bufferSize: data.length,
157
+ preview: data.subarray(0, 50).toString('hex'),
158
+ cause: error,
159
+ });
152
160
  }
153
161
  }
154
162
  //# sourceMappingURL=email.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/io/email.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/io/email.ts"],"names":[],"mappings":"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"}