digital-workers 2.1.1 → 2.3.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.
Files changed (197) hide show
  1. package/CHANGELOG.md +23 -0
  2. package/README.md +136 -180
  3. package/dist/actions.d.ts.map +1 -1
  4. package/dist/actions.js +34 -21
  5. package/dist/actions.js.map +1 -1
  6. package/dist/agent-comms.d.ts +438 -0
  7. package/dist/agent-comms.d.ts.map +1 -0
  8. package/dist/agent-comms.js +677 -0
  9. package/dist/agent-comms.js.map +1 -0
  10. package/dist/approve.d.ts +40 -8
  11. package/dist/approve.d.ts.map +1 -1
  12. package/dist/approve.js +86 -20
  13. package/dist/approve.js.map +1 -1
  14. package/dist/ask.d.ts +38 -7
  15. package/dist/ask.d.ts.map +1 -1
  16. package/dist/ask.js +85 -25
  17. package/dist/ask.js.map +1 -1
  18. package/dist/browse.d.ts +223 -0
  19. package/dist/browse.d.ts.map +1 -0
  20. package/dist/browse.js +392 -0
  21. package/dist/browse.js.map +1 -0
  22. package/dist/capability-tiers.d.ts +230 -0
  23. package/dist/capability-tiers.d.ts.map +1 -0
  24. package/dist/capability-tiers.js +388 -0
  25. package/dist/capability-tiers.js.map +1 -0
  26. package/dist/cascade-context.d.ts +523 -0
  27. package/dist/cascade-context.d.ts.map +1 -0
  28. package/dist/cascade-context.js +494 -0
  29. package/dist/cascade-context.js.map +1 -0
  30. package/dist/client.d.ts +162 -0
  31. package/dist/client.d.ts.map +1 -0
  32. package/dist/client.js +64 -0
  33. package/dist/client.js.map +1 -0
  34. package/dist/decide.d.ts +42 -6
  35. package/dist/decide.d.ts.map +1 -1
  36. package/dist/decide.js +54 -11
  37. package/dist/decide.js.map +1 -1
  38. package/dist/do.d.ts +36 -7
  39. package/dist/do.d.ts.map +1 -1
  40. package/dist/do.js +82 -39
  41. package/dist/do.js.map +1 -1
  42. package/dist/error-escalation.d.ts +416 -0
  43. package/dist/error-escalation.d.ts.map +1 -0
  44. package/dist/error-escalation.js +656 -0
  45. package/dist/error-escalation.js.map +1 -0
  46. package/dist/generate.d.ts +48 -7
  47. package/dist/generate.d.ts.map +1 -1
  48. package/dist/generate.js +49 -8
  49. package/dist/generate.js.map +1 -1
  50. package/dist/goals.d.ts +10 -9
  51. package/dist/goals.d.ts.map +1 -1
  52. package/dist/goals.js +30 -24
  53. package/dist/goals.js.map +1 -1
  54. package/dist/image.d.ts +189 -0
  55. package/dist/image.d.ts.map +1 -0
  56. package/dist/image.js +528 -0
  57. package/dist/image.js.map +1 -0
  58. package/dist/index.d.ts +59 -2
  59. package/dist/index.d.ts.map +1 -1
  60. package/dist/index.js +92 -2
  61. package/dist/index.js.map +1 -1
  62. package/dist/is.d.ts +45 -10
  63. package/dist/is.d.ts.map +1 -1
  64. package/dist/is.js +56 -21
  65. package/dist/is.js.map +1 -1
  66. package/dist/kpis.d.ts +24 -15
  67. package/dist/kpis.d.ts.map +1 -1
  68. package/dist/kpis.js +16 -14
  69. package/dist/kpis.js.map +1 -1
  70. package/dist/load-balancing.d.ts +395 -0
  71. package/dist/load-balancing.d.ts.map +1 -0
  72. package/dist/load-balancing.js +991 -0
  73. package/dist/load-balancing.js.map +1 -0
  74. package/dist/logger.d.ts +76 -0
  75. package/dist/logger.d.ts.map +1 -0
  76. package/dist/logger.js +39 -0
  77. package/dist/logger.js.map +1 -0
  78. package/dist/notify.d.ts +38 -9
  79. package/dist/notify.d.ts.map +1 -1
  80. package/dist/notify.js +72 -17
  81. package/dist/notify.js.map +1 -1
  82. package/dist/role.d.ts +5 -4
  83. package/dist/role.d.ts.map +1 -1
  84. package/dist/role.js +13 -10
  85. package/dist/role.js.map +1 -1
  86. package/dist/runtime.d.ts +310 -0
  87. package/dist/runtime.d.ts.map +1 -0
  88. package/dist/runtime.js +510 -0
  89. package/dist/runtime.js.map +1 -0
  90. package/dist/team.d.ts +11 -6
  91. package/dist/team.d.ts.map +1 -1
  92. package/dist/team.js +22 -15
  93. package/dist/team.js.map +1 -1
  94. package/dist/transports/email.d.ts +318 -0
  95. package/dist/transports/email.d.ts.map +1 -0
  96. package/dist/transports/email.js +779 -0
  97. package/dist/transports/email.js.map +1 -0
  98. package/dist/transports/slack.d.ts +515 -0
  99. package/dist/transports/slack.d.ts.map +1 -0
  100. package/dist/transports/slack.js +844 -0
  101. package/dist/transports/slack.js.map +1 -0
  102. package/dist/transports.d.ts.map +1 -1
  103. package/dist/transports.js +44 -25
  104. package/dist/transports.js.map +1 -1
  105. package/dist/types.d.ts +149 -19
  106. package/dist/types.d.ts.map +1 -1
  107. package/dist/types.js +6 -0
  108. package/dist/types.js.map +1 -1
  109. package/dist/utils/id.d.ts +19 -0
  110. package/dist/utils/id.d.ts.map +1 -0
  111. package/dist/utils/id.js +21 -0
  112. package/dist/utils/id.js.map +1 -0
  113. package/dist/video.d.ts +203 -0
  114. package/dist/video.d.ts.map +1 -0
  115. package/dist/video.js +528 -0
  116. package/dist/video.js.map +1 -0
  117. package/dist/worker.d.ts +343 -0
  118. package/dist/worker.d.ts.map +1 -0
  119. package/dist/worker.js +698 -0
  120. package/dist/worker.js.map +1 -0
  121. package/package.json +24 -5
  122. package/src/actions.ts +48 -38
  123. package/src/agent-comms.ts +1200 -0
  124. package/src/approve.ts +91 -20
  125. package/src/ask.ts +99 -25
  126. package/src/browse.ts +627 -0
  127. package/src/capability-tiers.ts +545 -0
  128. package/src/cascade-context.ts +648 -0
  129. package/src/client.ts +221 -0
  130. package/src/decide.ts +81 -35
  131. package/src/do.ts +98 -52
  132. package/src/error-escalation.ts +1123 -0
  133. package/src/generate.ts +52 -18
  134. package/src/goals.ts +36 -27
  135. package/src/image.ts +816 -0
  136. package/src/index.ts +410 -2
  137. package/src/is.ts +59 -25
  138. package/src/kpis.ts +41 -36
  139. package/src/load-balancing.ts +1467 -0
  140. package/src/logger.ts +93 -0
  141. package/src/notify.ts +78 -17
  142. package/src/role.ts +30 -20
  143. package/src/runtime.ts +796 -0
  144. package/src/team.ts +24 -19
  145. package/src/transports/email.ts +1160 -0
  146. package/src/transports/slack.ts +1320 -0
  147. package/src/transports.ts +58 -43
  148. package/src/types.ts +182 -46
  149. package/src/utils/id.ts +21 -0
  150. package/src/video.ts +906 -0
  151. package/src/worker.ts +1007 -0
  152. package/test/agent-comms.test.ts +1397 -0
  153. package/test/approve.test.ts +305 -0
  154. package/test/ask.test.ts +274 -0
  155. package/test/browse.test.ts +361 -0
  156. package/test/capability-tiers.test.ts +631 -0
  157. package/test/cascade-context.test.ts +692 -0
  158. package/test/decide.test.ts +252 -0
  159. package/test/do.test.ts +144 -0
  160. package/test/error-escalation.test.ts +1205 -0
  161. package/test/error-logging.test.ts +357 -0
  162. package/test/generate.test.ts +319 -0
  163. package/test/image.test.ts +398 -0
  164. package/test/is.test.ts +287 -0
  165. package/test/load-balancing-safety.test.ts +404 -0
  166. package/test/load-balancing-thread-safety.test.ts +464 -0
  167. package/test/load-balancing.test.ts +1145 -0
  168. package/test/notify.test.ts +434 -0
  169. package/test/primitives.test.ts +320 -0
  170. package/test/runtime-integration.test.ts +892 -0
  171. package/test/transports/crypto.test.ts +230 -0
  172. package/test/transports/email.test.ts +866 -0
  173. package/test/transports/id-generation.test.ts +91 -0
  174. package/test/transports/slack.test.ts +760 -0
  175. package/test/type-safety.test.ts +834 -0
  176. package/test/types.test.ts +95 -2
  177. package/test/video.test.ts +530 -0
  178. package/test/worker.test.ts +1433 -0
  179. package/tsconfig.json +4 -1
  180. package/vitest.config.ts +42 -0
  181. package/wrangler.jsonc +36 -0
  182. package/.turbo/turbo-build.log +0 -5
  183. package/src/actions.js +0 -436
  184. package/src/approve.js +0 -234
  185. package/src/ask.js +0 -226
  186. package/src/decide.js +0 -244
  187. package/src/do.js +0 -227
  188. package/src/generate.js +0 -298
  189. package/src/goals.js +0 -205
  190. package/src/index.js +0 -68
  191. package/src/is.js +0 -317
  192. package/src/kpis.js +0 -270
  193. package/src/notify.js +0 -219
  194. package/src/role.js +0 -110
  195. package/src/team.js +0 -130
  196. package/src/transports.js +0 -357
  197. package/src/types.js +0 -71
package/dist/team.js CHANGED
@@ -1,6 +1,7 @@
1
1
  /**
2
2
  * Team definition for digital workers
3
3
  */
4
+ // Note: Team type is re-exported from types.ts which imports from org.ai
4
5
  /**
5
6
  * Define a team of workers
6
7
  *
@@ -12,7 +13,8 @@
12
13
  *
13
14
  * @example
14
15
  * ```ts
15
- * const engineeringTeam = Team({
16
+ * const engineeringTeam = defineTeam({
17
+ * id: 'team_eng',
16
18
  * name: 'Engineering',
17
19
  * description: 'Product engineering team',
18
20
  * members: [
@@ -21,18 +23,20 @@
21
23
  * { id: 'ai-reviewer', name: 'Code Reviewer', role: 'Code Reviewer', type: 'ai' },
22
24
  * { id: 'ai-tester', name: 'Test Generator', role: 'Test Engineer', type: 'ai' },
23
25
  * ],
26
+ * contacts: { slack: '#engineering', email: 'eng@company.com' },
24
27
  * goals: [
25
28
  * 'Ship features on schedule',
26
29
  * 'Maintain code quality',
27
30
  * 'Reduce technical debt',
28
31
  * ],
29
- * lead: 'alice',
32
+ * lead: { id: 'alice', type: 'human', name: 'Alice' },
30
33
  * })
31
34
  * ```
32
35
  *
33
36
  * @example
34
37
  * ```ts
35
- * const supportTeam = Team({
38
+ * const supportTeam = defineTeam({
39
+ * id: 'team_support',
36
40
  * name: 'Customer Support',
37
41
  * description: '24/7 customer support team',
38
42
  * members: [
@@ -40,16 +44,17 @@
40
44
  * { id: 'support-ai-2', name: 'Support Bot Beta', role: 'Support Agent', type: 'ai' },
41
45
  * { id: 'escalation-human', name: 'Jane', role: 'Senior Support', type: 'human' },
42
46
  * ],
47
+ * contacts: { slack: '#support' },
43
48
  * goals: [
44
49
  * 'Maintain 95% satisfaction rate',
45
50
  * 'Response time under 5 minutes',
46
51
  * 'First contact resolution > 80%',
47
52
  * ],
48
- * lead: 'escalation-human',
53
+ * lead: { id: 'escalation-human', type: 'human', name: 'Jane' },
49
54
  * })
50
55
  * ```
51
56
  */
52
- export function Team(definition) {
57
+ export function defineTeam(definition) {
53
58
  return definition;
54
59
  }
55
60
  /**
@@ -61,7 +66,7 @@ export function Team(definition) {
61
66
  *
62
67
  * @example
63
68
  * ```ts
64
- * const updatedTeam = Team.addMember(engineeringTeam, {
69
+ * const updatedTeam = defineTeam.addMember(engineeringTeam, {
65
70
  * id: 'charlie',
66
71
  * name: 'Charlie',
67
72
  * role: 'Junior Engineer',
@@ -69,7 +74,7 @@ export function Team(definition) {
69
74
  * })
70
75
  * ```
71
76
  */
72
- Team.addMember = (team, member) => ({
77
+ defineTeam.addMember = (team, member) => ({
73
78
  ...team,
74
79
  members: [...team.members, member],
75
80
  });
@@ -82,10 +87,10 @@ Team.addMember = (team, member) => ({
82
87
  *
83
88
  * @example
84
89
  * ```ts
85
- * const updatedTeam = Team.removeMember(engineeringTeam, 'bob')
90
+ * const updatedTeam = defineTeam.removeMember(engineeringTeam, 'bob')
86
91
  * ```
87
92
  */
88
- Team.removeMember = (team, memberId) => ({
93
+ defineTeam.removeMember = (team, memberId) => ({
89
94
  ...team,
90
95
  members: team.members.filter((m) => m.id !== memberId),
91
96
  });
@@ -97,11 +102,11 @@ Team.removeMember = (team, memberId) => ({
97
102
  *
98
103
  * @example
99
104
  * ```ts
100
- * const aiMembers = Team.aiMembers(supportTeam)
105
+ * const aiMembers = defineTeam.aiMembers(supportTeam)
101
106
  * console.log(aiMembers) // [Support Bot Alpha, Support Bot Beta]
102
107
  * ```
103
108
  */
104
- Team.aiMembers = (team) => team.members.filter((m) => m.type === 'agent');
109
+ defineTeam.aiMembers = (team) => team.members.filter((m) => m.type === 'agent');
105
110
  /**
106
111
  * Get all human members of a team
107
112
  *
@@ -110,11 +115,11 @@ Team.aiMembers = (team) => team.members.filter((m) => m.type === 'agent');
110
115
  *
111
116
  * @example
112
117
  * ```ts
113
- * const humans = Team.humanMembers(engineeringTeam)
118
+ * const humans = defineTeam.humanMembers(engineeringTeam)
114
119
  * console.log(humans) // [Alice, Bob]
115
120
  * ```
116
121
  */
117
- Team.humanMembers = (team) => team.members.filter((m) => m.type === 'human');
122
+ defineTeam.humanMembers = (team) => team.members.filter((m) => m.type === 'human');
118
123
  /**
119
124
  * Get members by role
120
125
  *
@@ -124,8 +129,10 @@ Team.humanMembers = (team) => team.members.filter((m) => m.type === 'human');
124
129
  *
125
130
  * @example
126
131
  * ```ts
127
- * const engineers = Team.byRole(engineeringTeam, 'Engineer')
132
+ * const engineers = defineTeam.byRole(engineeringTeam, 'Engineer')
128
133
  * ```
129
134
  */
130
- Team.byRole = (team, role) => team.members.filter((m) => m.role === role);
135
+ defineTeam.byRole = (team, role) => team.members.filter((m) => m.role === role);
136
+ // Legacy alias for backward compatibility
137
+ export { defineTeam as Team };
131
138
  //# sourceMappingURL=team.js.map
package/dist/team.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"team.js","sourceRoot":"","sources":["../src/team.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GA+CG;AACH,MAAM,UAAU,IAAI,CAAC,UAAsB;IACzC,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,IAAI,CAAC,SAAS,GAAG,CACf,IAAgB,EAChB,MAAqC,EACzB,EAAE,CAAC,CAAC;IAChB,GAAG,IAAI;IACP,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;CACnC,CAAC,CAAA;AAEF;;;;;;;;;;;GAWG;AACH,IAAI,CAAC,YAAY,GAAG,CAAC,IAAgB,EAAE,QAAgB,EAAc,EAAE,CAAC,CAAC;IACvE,GAAG,IAAI;IACP,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;CACvD,CAAC,CAAA;AAEF;;;;;;;;;;;GAWG;AACH,IAAI,CAAC,SAAS,GAAG,CAAC,IAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;AAErF;;;;;;;;;;;GAWG;AACH,IAAI,CAAC,YAAY,GAAG,CAAC,IAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;AAExF;;;;;;;;;;;GAWG;AACH,IAAI,CAAC,MAAM,GAAG,CAAC,IAAgB,EAAE,IAAY,EAAE,EAAE,CAC/C,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA"}
1
+ {"version":3,"file":"team.js","sourceRoot":"","sources":["../src/team.ts"],"names":[],"mappings":"AAAA;;GAEG;AAIH,yEAAyE;AAEzE;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAmDG;AACH,MAAM,UAAU,UAAU,CAAC,UAAsB;IAC/C,OAAO,UAAU,CAAA;AACnB,CAAC;AAED;;;;;;;;;;;;;;;;GAgBG;AACH,UAAU,CAAC,SAAS,GAAG,CAAC,IAAgB,EAAE,MAAqC,EAAc,EAAE,CAAC,CAAC;IAC/F,GAAG,IAAI;IACP,OAAO,EAAE,CAAC,GAAG,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;CACnC,CAAC,CAAA;AAEF;;;;;;;;;;;GAWG;AACH,UAAU,CAAC,YAAY,GAAG,CAAC,IAAgB,EAAE,QAAgB,EAAc,EAAE,CAAC,CAAC;IAC7E,GAAG,IAAI;IACP,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,QAAQ,CAAC;CACvD,CAAC,CAAA;AAEF;;;;;;;;;;;GAWG;AACH,UAAU,CAAC,SAAS,GAAG,CAAC,IAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;AAE3F;;;;;;;;;;;GAWG;AACH,UAAU,CAAC,YAAY,GAAG,CAAC,IAAgB,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,OAAO,CAAC,CAAA;AAE9F;;;;;;;;;;;GAWG;AACH,UAAU,CAAC,MAAM,GAAG,CAAC,IAAgB,EAAE,IAAY,EAAE,EAAE,CAAC,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,CAAC,CAAA;AAEnG,0CAA0C;AAC1C,OAAO,EAAE,UAAU,IAAI,IAAI,EAAE,CAAA"}
@@ -0,0 +1,318 @@
1
+ /**
2
+ * Email Transport Adapter for digital-workers
3
+ *
4
+ * Implements the transport interface for sending notifications, approval requests,
5
+ * and handling email replies. Designed primarily for Resend but with a
6
+ * provider-agnostic interface.
7
+ *
8
+ * @packageDocumentation
9
+ */
10
+ import type { TransportConfig, DeliveryResult, TransportHandler } from '../transports.js';
11
+ import type { WorkerRef, ApprovalResult } from '../types.js';
12
+ /**
13
+ * Email message to be sent
14
+ */
15
+ export interface EmailMessage {
16
+ /** Recipient email address(es) */
17
+ to: string | string[];
18
+ /** Sender email address */
19
+ from: string;
20
+ /** Reply-to address */
21
+ replyTo?: string;
22
+ /** Email subject line */
23
+ subject: string;
24
+ /** Plain text body */
25
+ text?: string;
26
+ /** HTML body */
27
+ html?: string;
28
+ /** Custom headers */
29
+ headers?: Record<string, string>;
30
+ /** Attachments */
31
+ attachments?: EmailAttachment[];
32
+ /** Tags for categorization */
33
+ tags?: EmailTag[];
34
+ }
35
+ /**
36
+ * Email attachment
37
+ */
38
+ export interface EmailAttachment {
39
+ /** Filename */
40
+ filename: string;
41
+ /** Content as base64 or Buffer */
42
+ content: string | ArrayBuffer;
43
+ /** MIME type */
44
+ contentType?: string;
45
+ }
46
+ /**
47
+ * Email tag for categorization
48
+ */
49
+ export interface EmailTag {
50
+ /** Tag name */
51
+ name: string;
52
+ /** Tag value */
53
+ value: string;
54
+ }
55
+ /**
56
+ * Result of sending an email
57
+ */
58
+ export interface EmailSendResult {
59
+ /** Whether the send was successful */
60
+ success: boolean;
61
+ /** Provider-specific message ID */
62
+ messageId?: string;
63
+ /** Error message if failed */
64
+ error?: string;
65
+ /** Raw provider response */
66
+ raw?: unknown;
67
+ }
68
+ /**
69
+ * Email provider interface - implement this for different email services
70
+ */
71
+ export interface EmailProvider {
72
+ /** Provider name (e.g., 'resend', 'sendgrid', 'ses') */
73
+ name: string;
74
+ /** Send an email */
75
+ send(message: EmailMessage): Promise<EmailSendResult>;
76
+ /** Verify the provider is configured correctly */
77
+ verify?(): Promise<boolean>;
78
+ }
79
+ /**
80
+ * Email transport configuration
81
+ */
82
+ export interface EmailTransportConfig extends TransportConfig {
83
+ transport: 'email';
84
+ /** Email provider to use */
85
+ provider?: 'resend' | 'sendgrid' | 'ses' | 'smtp' | 'custom';
86
+ /** API key for the provider */
87
+ apiKey?: string;
88
+ /** API URL (for custom providers) */
89
+ apiUrl?: string;
90
+ /** Default sender address */
91
+ from?: string;
92
+ /** Default reply-to address */
93
+ replyTo?: string;
94
+ /** Base URL for approval links */
95
+ approvalBaseUrl?: string;
96
+ /** Custom email provider instance */
97
+ customProvider?: EmailProvider;
98
+ /** Template options */
99
+ templates?: EmailTemplateOptions;
100
+ }
101
+ /**
102
+ * Template customization options
103
+ */
104
+ export interface EmailTemplateOptions {
105
+ /** Custom CSS styles */
106
+ styles?: string;
107
+ /** Company/product name */
108
+ brandName?: string;
109
+ /** Logo URL */
110
+ logoUrl?: string;
111
+ /** Primary brand color */
112
+ primaryColor?: string;
113
+ /** Footer text */
114
+ footerText?: string;
115
+ }
116
+ /**
117
+ * Approval request data encoded in email
118
+ */
119
+ export interface ApprovalRequestData {
120
+ /** Unique approval request ID */
121
+ requestId: string;
122
+ /** What is being requested */
123
+ request: string;
124
+ /** Who initiated the request */
125
+ requestedBy?: WorkerRef | string;
126
+ /** Additional context */
127
+ context?: Record<string, unknown>;
128
+ /** Expiration timestamp */
129
+ expiresAt?: number;
130
+ /** Callback URL for webhook notifications */
131
+ callbackUrl?: string;
132
+ }
133
+ /**
134
+ * Parsed email reply for approval
135
+ */
136
+ export interface ParsedEmailReply {
137
+ /** Whether this is an approval response */
138
+ isApprovalResponse: boolean;
139
+ /** The decision */
140
+ approved?: boolean;
141
+ /** The approval request ID */
142
+ requestId?: string;
143
+ /** Any notes/comments from the approver */
144
+ notes?: string;
145
+ /** Who replied */
146
+ from?: string;
147
+ /** When they replied */
148
+ repliedAt?: Date;
149
+ /** Raw email content */
150
+ rawContent?: string;
151
+ }
152
+ /**
153
+ * Inbound email for parsing
154
+ */
155
+ export interface InboundEmail {
156
+ /** Sender address */
157
+ from: string;
158
+ /** Recipient address */
159
+ to: string | string[];
160
+ /** Email subject */
161
+ subject: string;
162
+ /** Plain text body */
163
+ text?: string;
164
+ /** HTML body */
165
+ html?: string;
166
+ /** In-Reply-To header */
167
+ inReplyTo?: string;
168
+ /** References header */
169
+ references?: string;
170
+ /** Custom headers */
171
+ headers?: Record<string, string>;
172
+ }
173
+ /**
174
+ * Resend email provider
175
+ *
176
+ * @example
177
+ * ```ts
178
+ * const resend = createResendProvider({ apiKey: 'your-api-key' })
179
+ * const transport = new EmailTransport({ provider: resend })
180
+ * ```
181
+ */
182
+ export declare function createResendProvider(config: {
183
+ apiKey: string;
184
+ apiUrl?: string;
185
+ }): EmailProvider;
186
+ /**
187
+ * Generate notification email HTML
188
+ */
189
+ export declare function generateNotificationEmail(message: string, options?: {
190
+ subject?: string;
191
+ priority?: 'low' | 'normal' | 'high' | 'urgent';
192
+ metadata?: Record<string, unknown>;
193
+ templates?: EmailTemplateOptions;
194
+ }): {
195
+ subject: string;
196
+ html: string;
197
+ text: string;
198
+ };
199
+ /**
200
+ * Generate approval request email HTML
201
+ */
202
+ export declare function generateApprovalEmail(request: string, requestData: ApprovalRequestData, options?: {
203
+ approveUrl?: string;
204
+ rejectUrl?: string;
205
+ templates?: EmailTemplateOptions;
206
+ }): {
207
+ subject: string;
208
+ html: string;
209
+ text: string;
210
+ };
211
+ /**
212
+ * Parse an email reply for approval response
213
+ */
214
+ export declare function parseApprovalReply(email: InboundEmail): ParsedEmailReply;
215
+ /**
216
+ * Email transport for digital-workers notifications and approvals
217
+ *
218
+ * @example
219
+ * ```ts
220
+ * // Create with Resend
221
+ * const transport = new EmailTransport({
222
+ * apiKey: process.env.RESEND_API_KEY,
223
+ * from: 'notifications@example.com',
224
+ * approvalBaseUrl: 'https://app.example.com/approvals',
225
+ * })
226
+ *
227
+ * // Send notification
228
+ * await transport.sendNotification({
229
+ * to: 'user@example.com',
230
+ * message: 'Deployment completed',
231
+ * priority: 'normal',
232
+ * })
233
+ *
234
+ * // Send approval request
235
+ * await transport.sendApprovalRequest({
236
+ * to: 'manager@example.com',
237
+ * request: 'Expense: $500 for cloud services',
238
+ * requestId: 'apr_123',
239
+ * context: { amount: 500, category: 'Infrastructure' },
240
+ * })
241
+ * ```
242
+ */
243
+ export declare class EmailTransport {
244
+ private provider;
245
+ private config;
246
+ constructor(config: EmailTransportConfig);
247
+ /**
248
+ * Get the underlying email provider
249
+ */
250
+ getProvider(): EmailProvider;
251
+ /**
252
+ * Get the transport configuration
253
+ */
254
+ getConfig(): EmailTransportConfig;
255
+ /**
256
+ * Send a notification email
257
+ */
258
+ sendNotification(options: {
259
+ to: string | string[];
260
+ message: string;
261
+ subject?: string;
262
+ priority?: 'low' | 'normal' | 'high' | 'urgent';
263
+ metadata?: Record<string, unknown>;
264
+ from?: string;
265
+ replyTo?: string;
266
+ }): Promise<DeliveryResult>;
267
+ /**
268
+ * Send an approval request email
269
+ */
270
+ sendApprovalRequest(options: {
271
+ to: string | string[];
272
+ request: string;
273
+ requestId: string;
274
+ requestedBy?: WorkerRef | string;
275
+ context?: Record<string, unknown>;
276
+ expiresAt?: Date | number;
277
+ callbackUrl?: string;
278
+ from?: string;
279
+ replyTo?: string;
280
+ }): Promise<DeliveryResult>;
281
+ /**
282
+ * Parse an email reply for approval response
283
+ */
284
+ parseReply(email: InboundEmail): ParsedEmailReply;
285
+ /**
286
+ * Convert parsed reply to ApprovalResult
287
+ */
288
+ toApprovalResult(reply: ParsedEmailReply, approver?: WorkerRef): ApprovalResult;
289
+ /**
290
+ * Create transport handler for registration
291
+ */
292
+ createHandler(): TransportHandler;
293
+ /**
294
+ * Register this transport with the transport registry
295
+ */
296
+ register(): void;
297
+ }
298
+ /**
299
+ * Create an email transport with Resend
300
+ */
301
+ export declare function createEmailTransport(config: Omit<EmailTransportConfig, 'transport'>): EmailTransport;
302
+ /**
303
+ * Create an email transport with a custom provider
304
+ */
305
+ export declare function createEmailTransportWithProvider(provider: EmailProvider, config?: Partial<Omit<EmailTransportConfig, 'transport' | 'customProvider'>>): EmailTransport;
306
+ /**
307
+ * Check if an object is an EmailTransportConfig
308
+ */
309
+ export declare function isEmailTransportConfig(config: unknown): config is EmailTransportConfig;
310
+ /**
311
+ * Check if a parsed reply indicates approval
312
+ */
313
+ export declare function isApproved(reply: ParsedEmailReply): boolean;
314
+ /**
315
+ * Check if a parsed reply indicates rejection
316
+ */
317
+ export declare function isRejected(reply: ParsedEmailReply): boolean;
318
+ //# sourceMappingURL=email.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"email.d.ts","sourceRoot":"","sources":["../../src/transports/email.ts"],"names":[],"mappings":"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"}