digital-workers 0.1.1 → 2.0.2

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 (83) hide show
  1. package/.turbo/turbo-build.log +5 -0
  2. package/CHANGELOG.md +17 -0
  3. package/README.md +290 -106
  4. package/dist/actions.d.ts +95 -0
  5. package/dist/actions.d.ts.map +1 -0
  6. package/dist/actions.js +437 -0
  7. package/dist/actions.js.map +1 -0
  8. package/dist/approve.d.ts +49 -0
  9. package/dist/approve.d.ts.map +1 -0
  10. package/dist/approve.js +235 -0
  11. package/dist/approve.js.map +1 -0
  12. package/dist/ask.d.ts +42 -0
  13. package/dist/ask.d.ts.map +1 -0
  14. package/dist/ask.js +227 -0
  15. package/dist/ask.js.map +1 -0
  16. package/dist/decide.d.ts +62 -0
  17. package/dist/decide.d.ts.map +1 -0
  18. package/dist/decide.js +245 -0
  19. package/dist/decide.js.map +1 -0
  20. package/dist/do.d.ts +63 -0
  21. package/dist/do.d.ts.map +1 -0
  22. package/dist/do.js +228 -0
  23. package/dist/do.js.map +1 -0
  24. package/dist/generate.d.ts +61 -0
  25. package/dist/generate.d.ts.map +1 -0
  26. package/dist/generate.js +299 -0
  27. package/dist/generate.js.map +1 -0
  28. package/dist/goals.d.ts +89 -0
  29. package/dist/goals.d.ts.map +1 -0
  30. package/dist/goals.js +206 -0
  31. package/dist/goals.js.map +1 -0
  32. package/dist/index.d.ts +68 -0
  33. package/dist/index.d.ts.map +1 -0
  34. package/dist/index.js +69 -0
  35. package/dist/index.js.map +1 -0
  36. package/dist/is.d.ts +54 -0
  37. package/dist/is.d.ts.map +1 -0
  38. package/dist/is.js +318 -0
  39. package/dist/is.js.map +1 -0
  40. package/dist/kpis.d.ts +103 -0
  41. package/dist/kpis.d.ts.map +1 -0
  42. package/dist/kpis.js +271 -0
  43. package/dist/kpis.js.map +1 -0
  44. package/dist/notify.d.ts +47 -0
  45. package/dist/notify.d.ts.map +1 -0
  46. package/dist/notify.js +220 -0
  47. package/dist/notify.js.map +1 -0
  48. package/dist/role.d.ts +53 -0
  49. package/dist/role.d.ts.map +1 -0
  50. package/dist/role.js +111 -0
  51. package/dist/role.js.map +1 -0
  52. package/dist/team.d.ts +61 -0
  53. package/dist/team.d.ts.map +1 -0
  54. package/dist/team.js +131 -0
  55. package/dist/team.js.map +1 -0
  56. package/dist/transports.d.ts +164 -0
  57. package/dist/transports.d.ts.map +1 -0
  58. package/dist/transports.js +358 -0
  59. package/dist/transports.js.map +1 -0
  60. package/dist/types.d.ts +693 -0
  61. package/dist/types.d.ts.map +1 -0
  62. package/dist/types.js +72 -0
  63. package/dist/types.js.map +1 -0
  64. package/package.json +27 -61
  65. package/src/actions.ts +615 -0
  66. package/src/approve.ts +317 -0
  67. package/src/ask.ts +304 -0
  68. package/src/decide.ts +295 -0
  69. package/src/do.ts +275 -0
  70. package/src/generate.ts +364 -0
  71. package/src/goals.ts +220 -0
  72. package/src/index.ts +118 -0
  73. package/src/is.ts +372 -0
  74. package/src/kpis.ts +348 -0
  75. package/src/notify.ts +303 -0
  76. package/src/role.ts +116 -0
  77. package/src/team.ts +142 -0
  78. package/src/transports.ts +504 -0
  79. package/src/types.ts +843 -0
  80. package/test/actions.test.ts +546 -0
  81. package/test/standalone.test.ts +299 -0
  82. package/test/types.test.ts +460 -0
  83. package/tsconfig.json +9 -0
@@ -0,0 +1,358 @@
1
+ /**
2
+ * Communication Transports Bridge
3
+ *
4
+ * Connects digital-workers contact channels to digital-tools
5
+ * communication providers (Message, Call).
6
+ *
7
+ * @packageDocumentation
8
+ */
9
+ // =============================================================================
10
+ // Channel to Transport Mapping
11
+ // =============================================================================
12
+ /**
13
+ * Map contact channel to transport
14
+ */
15
+ export function channelToTransport(channel) {
16
+ const mapping = {
17
+ email: 'email',
18
+ slack: 'slack',
19
+ teams: 'teams',
20
+ discord: 'discord',
21
+ phone: 'voice',
22
+ sms: 'sms',
23
+ whatsapp: 'whatsapp',
24
+ telegram: 'telegram',
25
+ web: 'web',
26
+ api: 'webhook',
27
+ webhook: 'webhook',
28
+ };
29
+ return mapping[channel] || 'webhook';
30
+ }
31
+ /**
32
+ * Get available transports for a worker
33
+ */
34
+ export function getWorkerTransports(worker) {
35
+ const transports = [];
36
+ const contacts = worker.contacts;
37
+ if (contacts.email)
38
+ transports.push('email');
39
+ if (contacts.slack)
40
+ transports.push('slack');
41
+ if (contacts.teams)
42
+ transports.push('teams');
43
+ if (contacts.discord)
44
+ transports.push('discord');
45
+ if (contacts.phone)
46
+ transports.push('voice');
47
+ if (contacts.sms)
48
+ transports.push('sms');
49
+ if (contacts.whatsapp)
50
+ transports.push('whatsapp');
51
+ if (contacts.telegram)
52
+ transports.push('telegram');
53
+ if (contacts.web)
54
+ transports.push('web');
55
+ if (contacts.webhook)
56
+ transports.push('webhook');
57
+ return transports;
58
+ }
59
+ /**
60
+ * Get team transports (union of all member transports + team contacts)
61
+ */
62
+ export function getTeamTransports(team) {
63
+ const transports = new Set();
64
+ // Add team-level contacts
65
+ const contacts = team.contacts;
66
+ if (contacts.email)
67
+ transports.add('email');
68
+ if (contacts.slack)
69
+ transports.add('slack');
70
+ if (contacts.teams)
71
+ transports.add('teams');
72
+ if (contacts.discord)
73
+ transports.add('discord');
74
+ if (contacts.phone)
75
+ transports.add('voice');
76
+ if (contacts.sms)
77
+ transports.add('sms');
78
+ if (contacts.whatsapp)
79
+ transports.add('whatsapp');
80
+ if (contacts.telegram)
81
+ transports.add('telegram');
82
+ if (contacts.web)
83
+ transports.add('web');
84
+ if (contacts.webhook)
85
+ transports.add('webhook');
86
+ return Array.from(transports);
87
+ }
88
+ /**
89
+ * Resolve contact to address
90
+ */
91
+ export function resolveAddress(contacts, channel) {
92
+ const contact = contacts[channel];
93
+ if (!contact)
94
+ return null;
95
+ const transport = channelToTransport(channel);
96
+ if (typeof contact === 'string') {
97
+ return { transport, value: contact };
98
+ }
99
+ // Handle structured contact types
100
+ switch (channel) {
101
+ case 'email':
102
+ const emailContact = contact;
103
+ return { transport, value: emailContact.address, name: emailContact.name };
104
+ case 'phone':
105
+ case 'sms':
106
+ case 'whatsapp':
107
+ const phoneContact = contact;
108
+ return { transport, value: phoneContact.number };
109
+ case 'slack':
110
+ const slackContact = contact;
111
+ return {
112
+ transport,
113
+ value: slackContact.user || slackContact.channel || '',
114
+ metadata: { workspace: slackContact.workspace },
115
+ };
116
+ case 'teams':
117
+ const teamsContact = contact;
118
+ return {
119
+ transport,
120
+ value: teamsContact.user || teamsContact.channel || '',
121
+ metadata: { team: teamsContact.team },
122
+ };
123
+ case 'discord':
124
+ const discordContact = contact;
125
+ return {
126
+ transport,
127
+ value: discordContact.user || discordContact.channel || '',
128
+ metadata: { server: discordContact.server },
129
+ };
130
+ case 'telegram':
131
+ const telegramContact = contact;
132
+ return { transport, value: telegramContact.user || telegramContact.chat || '' };
133
+ case 'web':
134
+ const webContact = contact;
135
+ return { transport, value: webContact.userId || '', metadata: { url: webContact.url } };
136
+ case 'webhook':
137
+ const webhookContact = contact;
138
+ return { transport, value: webhookContact.url, metadata: { secret: webhookContact.secret } };
139
+ case 'api':
140
+ const apiContact = contact;
141
+ return { transport, value: apiContact.endpoint, metadata: { auth: apiContact.auth } };
142
+ default:
143
+ return null;
144
+ }
145
+ }
146
+ /**
147
+ * Resolve all addresses for a worker
148
+ */
149
+ export function resolveWorkerAddresses(worker) {
150
+ const addresses = [];
151
+ const channels = [
152
+ 'email', 'slack', 'teams', 'discord', 'phone', 'sms',
153
+ 'whatsapp', 'telegram', 'web', 'api', 'webhook',
154
+ ];
155
+ for (const channel of channels) {
156
+ const address = resolveAddress(worker.contacts, channel);
157
+ if (address)
158
+ addresses.push(address);
159
+ }
160
+ return addresses;
161
+ }
162
+ /**
163
+ * Get primary address for a worker based on preferences
164
+ */
165
+ export function getPrimaryAddress(worker) {
166
+ const preferences = worker.preferences;
167
+ if (preferences?.primary) {
168
+ return resolveAddress(worker.contacts, preferences.primary);
169
+ }
170
+ // Default priority: slack > email > teams > sms > phone
171
+ const defaultPriority = ['slack', 'email', 'teams', 'sms', 'phone'];
172
+ for (const channel of defaultPriority) {
173
+ const address = resolveAddress(worker.contacts, channel);
174
+ if (address)
175
+ return address;
176
+ }
177
+ // Fall back to any available
178
+ const addresses = resolveWorkerAddresses(worker);
179
+ return addresses[0] || null;
180
+ }
181
+ /**
182
+ * Transport registry
183
+ */
184
+ const transportRegistry = new Map();
185
+ /**
186
+ * Register a transport handler
187
+ */
188
+ export function registerTransport(transport, handler) {
189
+ transportRegistry.set(transport, handler);
190
+ }
191
+ /**
192
+ * Get transport handler
193
+ */
194
+ export function getTransportHandler(transport) {
195
+ return transportRegistry.get(transport);
196
+ }
197
+ /**
198
+ * Check if transport is registered
199
+ */
200
+ export function hasTransport(transport) {
201
+ return transportRegistry.has(transport);
202
+ }
203
+ /**
204
+ * List registered transports
205
+ */
206
+ export function listTransports() {
207
+ return Array.from(transportRegistry.keys());
208
+ }
209
+ // =============================================================================
210
+ // Default Transport Handlers (Stubs - implemented by providers)
211
+ // =============================================================================
212
+ /**
213
+ * Send via transport
214
+ */
215
+ export async function sendViaTransport(transport, payload, config) {
216
+ const handler = transportRegistry.get(transport);
217
+ if (!handler) {
218
+ return {
219
+ success: false,
220
+ transport,
221
+ error: `Transport '${transport}' not registered`,
222
+ };
223
+ }
224
+ try {
225
+ return await handler(payload, config || { transport });
226
+ }
227
+ catch (error) {
228
+ return {
229
+ success: false,
230
+ transport,
231
+ error: error instanceof Error ? error.message : String(error),
232
+ };
233
+ }
234
+ }
235
+ /**
236
+ * Send to multiple transports (fan-out)
237
+ */
238
+ export async function sendToMultipleTransports(transports, payload, configs) {
239
+ const results = await Promise.all(transports.map(transport => sendViaTransport(transport, payload, configs?.[transport])));
240
+ return results;
241
+ }
242
+ // =============================================================================
243
+ // Worker Action to Transport
244
+ // =============================================================================
245
+ /**
246
+ * Build message payload from notify action
247
+ */
248
+ export function buildNotifyPayload(action) {
249
+ return {
250
+ to: resolveActionTarget(action.object),
251
+ body: action.message,
252
+ type: 'notification',
253
+ priority: action.priority || 'normal',
254
+ metadata: action.metadata,
255
+ };
256
+ }
257
+ /**
258
+ * Build message payload from ask action
259
+ */
260
+ export function buildAskPayload(action) {
261
+ return {
262
+ to: resolveActionTarget(action.object),
263
+ body: action.question,
264
+ type: 'question',
265
+ schema: action.schema,
266
+ timeout: action.timeout,
267
+ metadata: action.metadata,
268
+ };
269
+ }
270
+ /**
271
+ * Build message payload from approve action
272
+ */
273
+ export function buildApprovePayload(action) {
274
+ return {
275
+ to: resolveActionTarget(action.object),
276
+ body: action.request,
277
+ type: 'approval',
278
+ timeout: action.timeout,
279
+ actions: [
280
+ { id: 'approve', label: 'Approve', style: 'primary', value: true },
281
+ { id: 'reject', label: 'Reject', style: 'danger', value: false },
282
+ ],
283
+ metadata: {
284
+ ...action.metadata,
285
+ context: action.context,
286
+ },
287
+ };
288
+ }
289
+ /**
290
+ * Resolve action target to address string
291
+ */
292
+ function resolveActionTarget(target) {
293
+ if (typeof target === 'string')
294
+ return target;
295
+ if ('contacts' in target) {
296
+ const address = getPrimaryAddress(target);
297
+ return address?.value || target.id;
298
+ }
299
+ return target.id;
300
+ }
301
+ // =============================================================================
302
+ // Integration with digital-tools Message/Call types
303
+ // =============================================================================
304
+ /**
305
+ * Message type mapping (from digital-tools)
306
+ */
307
+ export const MessageTypeMapping = {
308
+ email: 'email',
309
+ sms: 'text',
310
+ slack: 'chat',
311
+ teams: 'chat',
312
+ discord: 'chat',
313
+ whatsapp: 'text',
314
+ telegram: 'text',
315
+ voice: 'voicemail', // For voicemail messages
316
+ };
317
+ /**
318
+ * Call type mapping (from digital-tools)
319
+ */
320
+ export const CallTypeMapping = {
321
+ phone: 'phone',
322
+ voice: 'phone',
323
+ web: 'web',
324
+ video: 'video',
325
+ };
326
+ /**
327
+ * Convert worker notification to digital-tools Message format
328
+ */
329
+ export function toDigitalToolsMessage(payload, transport) {
330
+ const messageType = MessageTypeMapping[transport] || 'chat';
331
+ return {
332
+ type: messageType,
333
+ to: Array.isArray(payload.to) ? payload.to : [payload.to],
334
+ from: payload.from,
335
+ subject: payload.subject,
336
+ body: payload.body,
337
+ html: payload.html,
338
+ metadata: {
339
+ ...payload.metadata,
340
+ workerActionType: payload.type,
341
+ priority: payload.priority,
342
+ },
343
+ };
344
+ }
345
+ /**
346
+ * Convert digital-tools Message to worker notification format
347
+ */
348
+ export function fromDigitalToolsMessage(message) {
349
+ return {
350
+ to: message.to,
351
+ from: message.from,
352
+ subject: message.subject,
353
+ body: message.body,
354
+ html: message.html,
355
+ metadata: message.metadata,
356
+ };
357
+ }
358
+ //# sourceMappingURL=transports.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"transports.js","sourceRoot":"","sources":["../src/transports.ts"],"names":[],"mappings":"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"}