digital-workers 2.1.3 → 2.4.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 (183) hide show
  1. package/.turbo/turbo-build.log +1 -1
  2. package/CHANGELOG.md +17 -0
  3. package/README.md +2 -0
  4. package/dist/actions.d.ts.map +1 -1
  5. package/dist/actions.js +33 -21
  6. package/dist/actions.js.map +1 -1
  7. package/dist/agent-comms.d.ts.map +1 -1
  8. package/dist/agent-comms.js +36 -25
  9. package/dist/agent-comms.js.map +1 -1
  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.js +3 -3
  23. package/dist/capability-tiers.js.map +1 -1
  24. package/dist/cascade-context.d.ts +28 -28
  25. package/dist/client.d.ts +162 -0
  26. package/dist/client.d.ts.map +1 -0
  27. package/dist/client.js +64 -0
  28. package/dist/client.js.map +1 -0
  29. package/dist/decide.d.ts +42 -6
  30. package/dist/decide.d.ts.map +1 -1
  31. package/dist/decide.js +54 -11
  32. package/dist/decide.js.map +1 -1
  33. package/dist/do.d.ts +36 -7
  34. package/dist/do.d.ts.map +1 -1
  35. package/dist/do.js +82 -39
  36. package/dist/do.js.map +1 -1
  37. package/dist/error-escalation.d.ts.map +1 -1
  38. package/dist/error-escalation.js +38 -38
  39. package/dist/error-escalation.js.map +1 -1
  40. package/dist/generate.d.ts +48 -7
  41. package/dist/generate.d.ts.map +1 -1
  42. package/dist/generate.js +49 -8
  43. package/dist/generate.js.map +1 -1
  44. package/dist/goals.d.ts +10 -9
  45. package/dist/goals.d.ts.map +1 -1
  46. package/dist/goals.js +30 -24
  47. package/dist/goals.js.map +1 -1
  48. package/dist/image.d.ts +189 -0
  49. package/dist/image.d.ts.map +1 -0
  50. package/dist/image.js +528 -0
  51. package/dist/image.js.map +1 -0
  52. package/dist/index.d.ts +49 -2
  53. package/dist/index.d.ts.map +1 -1
  54. package/dist/index.js +58 -2
  55. package/dist/index.js.map +1 -1
  56. package/dist/is.d.ts +45 -10
  57. package/dist/is.d.ts.map +1 -1
  58. package/dist/is.js +56 -21
  59. package/dist/is.js.map +1 -1
  60. package/dist/kpis.d.ts +24 -15
  61. package/dist/kpis.d.ts.map +1 -1
  62. package/dist/kpis.js +16 -14
  63. package/dist/kpis.js.map +1 -1
  64. package/dist/load-balancing.d.ts.map +1 -1
  65. package/dist/load-balancing.js +124 -38
  66. package/dist/load-balancing.js.map +1 -1
  67. package/dist/logger.d.ts +76 -0
  68. package/dist/logger.d.ts.map +1 -0
  69. package/dist/logger.js +39 -0
  70. package/dist/logger.js.map +1 -0
  71. package/dist/notify.d.ts +38 -9
  72. package/dist/notify.d.ts.map +1 -1
  73. package/dist/notify.js +72 -17
  74. package/dist/notify.js.map +1 -1
  75. package/dist/role.d.ts +5 -4
  76. package/dist/role.d.ts.map +1 -1
  77. package/dist/role.js +13 -10
  78. package/dist/role.js.map +1 -1
  79. package/dist/runtime.d.ts +310 -0
  80. package/dist/runtime.d.ts.map +1 -0
  81. package/dist/runtime.js +510 -0
  82. package/dist/runtime.js.map +1 -0
  83. package/dist/team.d.ts +11 -6
  84. package/dist/team.d.ts.map +1 -1
  85. package/dist/team.js +22 -15
  86. package/dist/team.js.map +1 -1
  87. package/dist/transports/email.d.ts +318 -0
  88. package/dist/transports/email.d.ts.map +1 -0
  89. package/dist/transports/email.js +779 -0
  90. package/dist/transports/email.js.map +1 -0
  91. package/dist/transports/slack.d.ts +515 -0
  92. package/dist/transports/slack.d.ts.map +1 -0
  93. package/dist/transports/slack.js +844 -0
  94. package/dist/transports/slack.js.map +1 -0
  95. package/dist/transports.d.ts.map +1 -1
  96. package/dist/transports.js +44 -25
  97. package/dist/transports.js.map +1 -1
  98. package/dist/types.d.ts +141 -19
  99. package/dist/types.d.ts.map +1 -1
  100. package/dist/types.js +5 -0
  101. package/dist/types.js.map +1 -1
  102. package/dist/utils/id.d.ts +19 -0
  103. package/dist/utils/id.d.ts.map +1 -0
  104. package/dist/utils/id.js +21 -0
  105. package/dist/utils/id.js.map +1 -0
  106. package/dist/video.d.ts +203 -0
  107. package/dist/video.d.ts.map +1 -0
  108. package/dist/video.js +528 -0
  109. package/dist/video.js.map +1 -0
  110. package/dist/worker.d.ts +343 -0
  111. package/dist/worker.d.ts.map +1 -0
  112. package/dist/worker.js +698 -0
  113. package/dist/worker.js.map +1 -0
  114. package/package.json +32 -14
  115. package/src/actions.ts +39 -30
  116. package/src/agent-comms.ts +54 -92
  117. package/src/approve.ts +91 -20
  118. package/src/ask.ts +99 -25
  119. package/src/browse.ts +627 -0
  120. package/src/capability-tiers.ts +5 -5
  121. package/src/client.ts +221 -0
  122. package/src/decide.ts +81 -35
  123. package/src/do.ts +98 -52
  124. package/src/error-escalation.ts +55 -67
  125. package/src/generate.ts +52 -18
  126. package/src/goals.ts +36 -27
  127. package/src/image.ts +816 -0
  128. package/src/index.ts +187 -2
  129. package/src/is.ts +59 -25
  130. package/src/kpis.ts +41 -36
  131. package/src/load-balancing.ts +132 -46
  132. package/src/logger.ts +93 -0
  133. package/src/notify.ts +78 -17
  134. package/src/role.ts +30 -20
  135. package/src/runtime.ts +796 -0
  136. package/src/team.ts +24 -19
  137. package/src/transports/email.ts +1160 -0
  138. package/src/transports/slack.ts +1320 -0
  139. package/src/transports.ts +58 -43
  140. package/src/types.ts +174 -46
  141. package/src/utils/id.ts +21 -0
  142. package/src/video.ts +906 -0
  143. package/src/worker.ts +1007 -0
  144. package/test/approve.test.ts +305 -0
  145. package/test/ask.test.ts +274 -0
  146. package/test/browse.test.ts +361 -0
  147. package/test/decide.test.ts +252 -0
  148. package/test/do.test.ts +144 -0
  149. package/test/error-logging.test.ts +357 -0
  150. package/test/generate.test.ts +319 -0
  151. package/test/image.test.ts +398 -0
  152. package/test/is.test.ts +287 -0
  153. package/test/load-balancing-safety.test.ts +404 -0
  154. package/test/notify.test.ts +434 -0
  155. package/test/primitives.test.ts +320 -0
  156. package/test/runtime-integration.test.ts +892 -0
  157. package/test/transports/crypto.test.ts +230 -0
  158. package/test/transports/email.test.ts +866 -0
  159. package/test/transports/id-generation.test.ts +91 -0
  160. package/test/transports/slack.test.ts +760 -0
  161. package/test/type-safety.test.ts +834 -0
  162. package/test/types.test.ts +60 -2
  163. package/test/video.test.ts +530 -0
  164. package/test/worker.test.ts +1433 -0
  165. package/tsconfig.json +4 -1
  166. package/vitest.config.ts +42 -0
  167. package/wrangler.jsonc +36 -0
  168. package/LICENSE +0 -21
  169. package/src/actions.js +0 -436
  170. package/src/approve.js +0 -234
  171. package/src/ask.js +0 -226
  172. package/src/decide.js +0 -244
  173. package/src/do.js +0 -227
  174. package/src/generate.js +0 -298
  175. package/src/goals.js +0 -205
  176. package/src/index.js +0 -68
  177. package/src/is.js +0 -317
  178. package/src/kpis.js +0 -270
  179. package/src/notify.js +0 -219
  180. package/src/role.js +0 -110
  181. package/src/team.js +0 -130
  182. package/src/transports.js +0 -357
  183. package/src/types.js +0 -71
package/dist/approve.js CHANGED
@@ -1,33 +1,65 @@
1
1
  /**
2
2
  * Approval request functionality for digital workers
3
+ *
4
+ * IMPORTANT: Worker Routing vs LLM Content Generation
5
+ * ---------------------------------------------------
6
+ * This module provides real approval workflows, NOT LLM-generated approval content.
7
+ *
8
+ * - `digital-workers.approve()` - Routes approval requests to Workers (Humans
9
+ * or AI Agents) via communication channels and waits for actual approval.
10
+ *
11
+ * - `ai-functions.approve()` - Generates approval request content via LLM
12
+ * for use in human interaction UIs.
13
+ *
14
+ * Use digital-workers when you need:
15
+ * - Real approval workflows with actual approvers
16
+ * - Routing to specific people via Slack, email, SMS
17
+ * - Approval audit trails (who, when, via what channel)
18
+ * - Multi-approver workflows (any/all must approve)
19
+ *
20
+ * Use ai-functions when you need:
21
+ * - LLM-generated approval request content
22
+ * - Generating UI/UX for approval flows
23
+ * - Approval request templates
24
+ *
25
+ * @module
3
26
  */
4
27
  /**
5
- * Request approval from a worker or team
28
+ * Route an approval request to a Worker (Human or AI Agent) and wait for response.
29
+ *
30
+ * **Key Difference from ai-functions.approve():**
31
+ * Unlike `ai-functions.approve()` which generates approval request content
32
+ * using the LLM, this function routes the request to an actual approver via
33
+ * real communication channels (Slack, email, SMS) and waits for their response.
6
34
  *
7
- * Routes approval requests through the specified channel and waits for a response.
35
+ * This is a **workflow approval primitive**, not a content generation primitive.
8
36
  *
9
37
  * @param request - What is being requested for approval
10
- * @param target - The worker or team to request approval from
11
- * @param options - Approval options
12
- * @returns Promise resolving to approval result
38
+ * @param target - The worker or team to request approval from (routes to their channels)
39
+ * @param options - Approval options including channel, timeout, and context
40
+ * @returns Promise resolving to approval result with metadata (who approved, when, notes)
13
41
  *
14
42
  * @example
15
43
  * ```ts
16
- * // Request approval from a worker
44
+ * // Request approval from a human via Slack
17
45
  * const result = await approve('Expense: $500 for AWS', manager, {
18
46
  * via: 'slack',
19
47
  * context: { amount: 500, category: 'Infrastructure' },
20
48
  * })
21
49
  *
22
50
  * if (result.approved) {
23
- * console.log(`Approved by ${result.approvedBy?.name}`)
51
+ * console.log(`Approved by ${result.approvedBy?.name} at ${result.approvedAt}`)
24
52
  * }
25
53
  *
26
- * // Request approval from a team
54
+ * // Request approval from a team (routes to lead or available member)
27
55
  * const result = await approve('Deploy v2.1.0 to production', opsTeam, {
28
56
  * via: 'slack',
29
57
  * })
30
58
  * ```
59
+ *
60
+ * @see {@link ai-functions#approve} for LLM-generated approval request content
61
+ * @see {@link approve.all} for multi-approver workflows (all must approve)
62
+ * @see {@link approve.any} for multi-approver workflows (any can approve)
31
63
  */
32
64
  export async function approve(request, target, options = {}) {
33
65
  const { via, timeout, context, escalate = false } = options;
@@ -40,8 +72,8 @@ export async function approve(request, target, options = {}) {
40
72
  }
41
73
  // Send the approval request and wait for response
42
74
  const response = await sendApprovalRequest(channel, request, contacts, {
43
- timeout,
44
- context,
75
+ ...(timeout !== undefined && { timeout }),
76
+ ...(context !== undefined && { context }),
45
77
  approver,
46
78
  escalate,
47
79
  });
@@ -49,7 +81,7 @@ export async function approve(request, target, options = {}) {
49
81
  approved: response.approved,
50
82
  approvedBy: approver,
51
83
  approvedAt: new Date(),
52
- notes: response.notes,
84
+ ...(response.notes !== undefined && { notes: response.notes }),
53
85
  via: channel,
54
86
  };
55
87
  }
@@ -219,17 +251,51 @@ async function sendApprovalRequest(channel, request, contacts, options) {
219
251
  if (!contact) {
220
252
  throw new Error(`No ${channel} contact configured`);
221
253
  }
222
- // In a real implementation, this would:
223
- // 1. Format the request for the channel (Slack blocks, email HTML, etc.)
224
- // 2. Send via the appropriate API
225
- // 3. Wait for response (polling, webhook, interactive message, etc.)
226
- // 4. Handle timeout and escalation
227
- // For now, simulate a pending response
228
- await new Promise((resolve) => setTimeout(resolve, 10));
229
- // Return a placeholder - real impl would wait for actual response
254
+ // Import transport functions dynamically to avoid circular dependencies
255
+ const { channelToTransport, sendViaTransport, hasTransport, resolveAddress } = await import('./transports.js');
256
+ const transport = channelToTransport(channel);
257
+ const address = resolveAddress(contacts, channel);
258
+ // If transport is registered, use it for real delivery
259
+ if (hasTransport(transport) && address) {
260
+ const { generateRequestId } = await import('./utils/id.js');
261
+ const requestId = generateRequestId('apr');
262
+ const payload = {
263
+ to: address.value,
264
+ body: request,
265
+ type: 'approval',
266
+ priority: 'normal',
267
+ threadId: requestId,
268
+ actions: [
269
+ { id: 'approve', label: 'Approve', style: 'primary', value: true },
270
+ { id: 'reject', label: 'Reject', style: 'danger', value: false },
271
+ ],
272
+ metadata: {
273
+ ...options.context,
274
+ approver: options.approver,
275
+ escalate: options.escalate,
276
+ },
277
+ ...(options.timeout !== undefined && { timeout: options.timeout }),
278
+ };
279
+ const result = await sendViaTransport(transport, payload);
280
+ if (result.success) {
281
+ // For real transports, we need to wait for a response
282
+ // This would integrate with the runtime's HumanRequestProcessor
283
+ // For now, return pending state - the response comes via webhook
284
+ return {
285
+ approved: false,
286
+ notes: `Approval request sent via ${transport}. Awaiting response. Request ID: ${requestId}`,
287
+ };
288
+ }
289
+ else {
290
+ throw new Error(`Failed to send approval request via ${transport}: ${result.error}`);
291
+ }
292
+ }
293
+ // No transport registered - return pending state
294
+ // In a real workflow, this would be processed when a transport is configured
295
+ // or the runtime handles the request via HumanRequestProcessor
230
296
  return {
231
297
  approved: false,
232
- notes: 'Approval pending - waiting for response',
298
+ notes: `Approval request pending - no transport registered for ${channel}. Configure a transport handler to enable real delivery.`,
233
299
  };
234
300
  }
235
301
  //# sourceMappingURL=approve.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"approve.js","sourceRoot":"","sources":["../src/approve.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"approve.js","sourceRoot":"","sources":["../src/approve.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;GAyBG;AAaH;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,MAAM,CAAC,KAAK,UAAU,OAAO,CAC3B,OAAe,EACf,MAAoB,EACpB,UAA2B,EAAE;IAE7B,MAAM,EAAE,GAAG,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG,KAAK,EAAE,GAAG,OAAO,CAAA;IAE3D,mDAAmD;IACnD,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IAEpD,iCAAiC;IACjC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAA;IACpE,CAAC;IAED,kDAAkD;IAClD,MAAM,QAAQ,GAAG,MAAM,mBAAmB,CAAC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE;QACrE,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC,GAAG,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,CAAC;QACzC,QAAQ;QACR,QAAQ;KACT,CAAC,CAAA;IAEF,OAAO;QACL,QAAQ,EAAE,QAAQ,CAAC,QAAQ;QAC3B,UAAU,EAAE,QAAQ;QACpB,UAAU,EAAE,IAAI,IAAI,EAAE;QACtB,GAAG,CAAC,QAAQ,CAAC,KAAK,KAAK,SAAS,IAAI,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC;QAC9D,GAAG,EAAE,OAAO;KACb,CAAA;AACH,CAAC;AAED;;;;;;;;;;;;;;;;;GAiBG;AACH,OAAO,CAAC,WAAW,GAAG,KAAK,EACzB,OAAe,EACf,MAAoB,EACpB,QAMC,EACD,UAA2B,EAAE,EACJ,EAAE;IAC3B,OAAO,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE;QAC9B,GAAG,OAAO;QACV,OAAO,EAAE;YACP,GAAG,OAAO,CAAC,OAAO;YAClB,QAAQ;SACT;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;;;;;;;;;;GAaG;AACH,OAAO,CAAC,KAAK,GAAG,KAAK,EACnB,QAAkB,EAClB,MAAoB,EACpB,UAA2B,EAAE,EACF,EAAE;IAC7B,OAAO,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;AAClF,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,OAAO,CAAC,YAAY,GAAG,KAAK,EAC1B,OAAe,EACf,MAAoB,EACpB,QAAc,EACd,UAA2B,EAAE,EACJ,EAAE;IAC3B,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC/C,OAAO,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE;QAC9B,GAAG,OAAO;QACV,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC;QAC7B,OAAO,EAAE;YACP,GAAG,OAAO,CAAC,OAAO;YAClB,QAAQ,EAAE,QAAQ,CAAC,WAAW,EAAE;SACjC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,OAAO,CAAC,GAAG,GAAG,KAAK,EACjB,OAAe,EACf,OAAuB,EACvB,UAA2B,EAAE,EACJ,EAAE;IAC3B,qDAAqD;IACrD,OAAO,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;AACjF,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,OAAO,CAAC,GAAG,GAAG,KAAK,EACjB,OAAe,EACf,OAAuB,EACvB,UAA2B,EAAE,EAC8B,EAAE;IAC7D,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;IAE7F,MAAM,WAAW,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAA;IAEpD,OAAO;QACL,QAAQ,EAAE,WAAW;QACrB,UAAU,EAAE,IAAI,IAAI,EAAE;QACtB,KAAK,EAAE,WAAW;YAChB,CAAC,CAAC,wBAAwB;YAC1B,CAAC,CAAC,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,MAAM,eAAe;QAC/D,SAAS,EAAE,OAAO;KACnB,CAAA;AACH,CAAC,CAAA;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,aAAa,CAAC,MAAoB;IAIzC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO;YACL,QAAQ,EAAE,EAAE;YACZ,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SACzB,CAAA;IACH,CAAC;IAED,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QACzB,iBAAiB;QACjB,IAAI,QAAmB,CAAA;QACvB,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACxB,kCAAkC;YAClC,QAAQ,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAA;QAClE,CAAC;aAAM,CAAC;YACN,SAAS;YACT,QAAQ,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;QACpE,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,QAAQ;SACT,CAAA;IACH,CAAC;IAED,YAAY;IACZ,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,QAAQ,EAAE,MAAM;KACjB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,GAAkD,EAClD,QAAkB;IAElB,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QACnD,IAAI,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;YACnD,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAqB,CAAA;IAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1B,OAAO,KAAK,IAAI,IAAI,CAAA;AACtB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAChC,OAAuB,EACvB,OAAe,EACf,QAAkB,EAClB,OAKC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAEjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAA;IACrD,CAAC;IAED,wEAAwE;IACxE,MAAM,EAAE,kBAAkB,EAAE,gBAAgB,EAAE,YAAY,EAAE,cAAc,EAAE,GAAG,MAAM,MAAM,CACzF,iBAAiB,CAClB,CAAA;IAED,MAAM,SAAS,GAAG,kBAAkB,CAAC,OAAO,CAAC,CAAA;IAC7C,MAAM,OAAO,GAAG,cAAc,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAA;IAEjD,uDAAuD;IACvD,IAAI,YAAY,CAAC,SAAS,CAAC,IAAI,OAAO,EAAE,CAAC;QACvC,MAAM,EAAE,iBAAiB,EAAE,GAAG,MAAM,MAAM,CAAC,eAAe,CAAC,CAAA;QAC3D,MAAM,SAAS,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAA;QAE1C,MAAM,OAAO,GAAG;YACd,EAAE,EAAE,OAAO,CAAC,KAAK;YACjB,IAAI,EAAE,OAAO;YACb,IAAI,EAAE,UAAmB;YACzB,QAAQ,EAAE,QAAiB;YAC3B,QAAQ,EAAE,SAAS;YACnB,OAAO,EAAE;gBACP,EAAE,EAAE,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,KAAK,EAAE,SAAkB,EAAE,KAAK,EAAE,IAAI,EAAE;gBAC3E,EAAE,EAAE,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAiB,EAAE,KAAK,EAAE,KAAK,EAAE;aAC1E;YACD,QAAQ,EAAE;gBACR,GAAG,OAAO,CAAC,OAAO;gBAClB,QAAQ,EAAE,OAAO,CAAC,QAAQ;gBAC1B,QAAQ,EAAE,OAAO,CAAC,QAAQ;aAC3B;YACD,GAAG,CAAC,OAAO,CAAC,OAAO,KAAK,SAAS,IAAI,EAAE,OAAO,EAAE,OAAO,CAAC,OAAO,EAAE,CAAC;SACnE,CAAA;QAED,MAAM,MAAM,GAAG,MAAM,gBAAgB,CAAC,SAAS,EAAE,OAAO,CAAC,CAAA;QAEzD,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACnB,sDAAsD;YACtD,gEAAgE;YAChE,iEAAiE;YACjE,OAAO;gBACL,QAAQ,EAAE,KAAK;gBACf,KAAK,EAAE,6BAA6B,SAAS,oCAAoC,SAAS,EAAE;aAC7F,CAAA;QACH,CAAC;aAAM,CAAC;YACN,MAAM,IAAI,KAAK,CAAC,uCAAuC,SAAS,KAAK,MAAM,CAAC,KAAK,EAAE,CAAC,CAAA;QACtF,CAAC;IACH,CAAC;IAED,iDAAiD;IACjD,6EAA6E;IAC7E,+DAA+D;IAC/D,OAAO;QACL,QAAQ,EAAE,KAAK;QACf,KAAK,EAAE,0DAA0D,OAAO,0DAA0D;KACnI,CAAA;AACH,CAAC"}
package/dist/ask.d.ts CHANGED
@@ -1,27 +1,56 @@
1
1
  /**
2
2
  * Question/answer functionality for digital workers
3
+ *
4
+ * IMPORTANT: Worker Routing vs Direct LLM Calls
5
+ * ---------------------------------------------
6
+ * This module provides worker-routed question handling, NOT direct LLM queries.
7
+ *
8
+ * - `digital-workers.ask()` - Routes questions to Workers (AI Agents or Humans)
9
+ * via communication channels (Slack, email, SMS, etc.) and waits for response.
10
+ *
11
+ * - `ai-functions.ask()` - Generates content for human interaction via LLM.
12
+ *
13
+ * Use digital-workers when you need:
14
+ * - To ask a specific person or team via real channels
15
+ * - Human responses with accountability (who answered)
16
+ * - Channel-based communication (Slack, email, SMS)
17
+ * - Team coordination and escalation
18
+ *
19
+ * Use ai-functions when you need:
20
+ * - LLM-generated question/answer content
21
+ * - Generating UI for human input
22
+ * - Direct AI text generation
23
+ *
24
+ * @module
3
25
  */
4
26
  import type { SimpleSchema } from 'ai-functions';
5
27
  import type { ActionTarget, AskResult, AskOptions } from './types.js';
6
28
  /**
7
- * Ask a question to a worker or team
29
+ * Route a question to a Worker (AI Agent or Human) via communication channels.
8
30
  *
9
- * Routes questions through the specified channel and waits for a response.
31
+ * **Key Difference from ai-functions.ask():**
32
+ * Unlike `ai-functions.ask()` which generates content for human interaction
33
+ * using the LLM, this function routes the question to an actual Worker (person
34
+ * or AI agent) via real communication channels (Slack, email, SMS, etc.) and
35
+ * waits for their response.
10
36
  *
11
- * @param target - The worker or team to ask
37
+ * This is a **worker communication primitive**, not a direct LLM primitive.
38
+ *
39
+ * @param target - The worker or team to ask (routes to their configured channels)
12
40
  * @param question - The question to ask
13
- * @param options - Ask options
14
- * @returns Promise resolving to the answer
41
+ * @param options - Ask options including channel, schema, and timeout
42
+ * @returns Promise resolving to the answer with metadata (who answered, when, via what channel)
15
43
  *
16
44
  * @example
17
45
  * ```ts
18
- * // Ask a simple question
46
+ * // Ask a human via Slack
19
47
  * const result = await ask(alice, 'What is the company holiday policy?', {
20
48
  * via: 'slack',
21
49
  * })
22
50
  * console.log(result.answer)
51
+ * console.log(`Answered by ${result.answeredBy.name} at ${result.answeredAt}`)
23
52
  *
24
- * // Ask with structured response
53
+ * // Ask with structured response schema
25
54
  * const result = await ask(ceo, 'What are our Q1 priorities?', {
26
55
  * via: 'email',
27
56
  * schema: {
@@ -30,6 +59,8 @@ import type { ActionTarget, AskResult, AskOptions } from './types.js';
30
59
  * },
31
60
  * })
32
61
  * ```
62
+ *
63
+ * @see {@link ai-functions#ask} for LLM-generated human interaction content
33
64
  */
34
65
  export declare function ask<T = string>(target: ActionTarget, question: string, options?: AskOptions): Promise<AskResult<T>>;
35
66
  export declare namespace ask {
package/dist/ask.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"AAAA;;GAEG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAIV,YAAY,EAEZ,SAAS,EACT,UAAU,EAEX,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,wBAAsB,GAAG,CAAC,CAAC,GAAG,MAAM,EAClC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CA2BvB;yBA/BqB,GAAG;aA4CT,CAAC,qBACL,MAAM,YACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WACxB,YAAY,KACpB,OAAO,CAAC,CAAC,CAAC;gBAqCM,CAAC,mBACV,YAAY,aACT,MAAM,EAAE,YACV,UAAU,KAClB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;0BAarB,YAAY,SACb,MAAM,YACJ,UAAU,KAClB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBAkBnB,YAAY,YACV,MAAM,YACP,UAAU,KAClB,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;iBAoBf,CAAC,SAAS,MAAM,UAC1B,YAAY,YACV,MAAM,WACP,CAAC,EAAE,YACH,UAAU,KAClB,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"ask.d.ts","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAGH,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,cAAc,CAAA;AAChD,OAAO,KAAK,EAIV,YAAY,EAEZ,SAAS,EACT,UAAU,EAEX,MAAM,YAAY,CAAA;AAEnB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAoCG;AACH,wBAAsB,GAAG,CAAC,CAAC,GAAG,MAAM,EAClC,MAAM,EAAE,YAAY,EACpB,QAAQ,EAAE,MAAM,EAChB,OAAO,GAAE,UAAe,GACvB,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CA2BvB;yBA/BqB,GAAG;aA4CT,CAAC,qBACL,MAAM,YACN,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,WACxB,YAAY,KACpB,OAAO,CAAC,CAAC,CAAC;gBA6CM,CAAC,mBACV,YAAY,aACT,MAAM,EAAE,YACV,UAAU,KAClB,OAAO,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,CAAC;0BAarB,YAAY,SACb,MAAM,YACJ,UAAU,KAClB,OAAO,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;wBAkBnB,YAAY,YACV,MAAM,YACP,UAAU,KAClB,OAAO,CAAC,SAAS,CAAC,KAAK,GAAG,IAAI,CAAC,CAAC;iBAoBf,CAAC,SAAS,MAAM,UAC1B,YAAY,YACV,MAAM,WACP,CAAC,EAAE,YACH,UAAU,KAClB,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC"}
package/dist/ask.js CHANGED
@@ -1,26 +1,55 @@
1
1
  /**
2
2
  * Question/answer functionality for digital workers
3
+ *
4
+ * IMPORTANT: Worker Routing vs Direct LLM Calls
5
+ * ---------------------------------------------
6
+ * This module provides worker-routed question handling, NOT direct LLM queries.
7
+ *
8
+ * - `digital-workers.ask()` - Routes questions to Workers (AI Agents or Humans)
9
+ * via communication channels (Slack, email, SMS, etc.) and waits for response.
10
+ *
11
+ * - `ai-functions.ask()` - Generates content for human interaction via LLM.
12
+ *
13
+ * Use digital-workers when you need:
14
+ * - To ask a specific person or team via real channels
15
+ * - Human responses with accountability (who answered)
16
+ * - Channel-based communication (Slack, email, SMS)
17
+ * - Team coordination and escalation
18
+ *
19
+ * Use ai-functions when you need:
20
+ * - LLM-generated question/answer content
21
+ * - Generating UI for human input
22
+ * - Direct AI text generation
23
+ *
24
+ * @module
3
25
  */
4
26
  import { generateObject } from 'ai-functions';
5
27
  /**
6
- * Ask a question to a worker or team
28
+ * Route a question to a Worker (AI Agent or Human) via communication channels.
29
+ *
30
+ * **Key Difference from ai-functions.ask():**
31
+ * Unlike `ai-functions.ask()` which generates content for human interaction
32
+ * using the LLM, this function routes the question to an actual Worker (person
33
+ * or AI agent) via real communication channels (Slack, email, SMS, etc.) and
34
+ * waits for their response.
7
35
  *
8
- * Routes questions through the specified channel and waits for a response.
36
+ * This is a **worker communication primitive**, not a direct LLM primitive.
9
37
  *
10
- * @param target - The worker or team to ask
38
+ * @param target - The worker or team to ask (routes to their configured channels)
11
39
  * @param question - The question to ask
12
- * @param options - Ask options
13
- * @returns Promise resolving to the answer
40
+ * @param options - Ask options including channel, schema, and timeout
41
+ * @returns Promise resolving to the answer with metadata (who answered, when, via what channel)
14
42
  *
15
43
  * @example
16
44
  * ```ts
17
- * // Ask a simple question
45
+ * // Ask a human via Slack
18
46
  * const result = await ask(alice, 'What is the company holiday policy?', {
19
47
  * via: 'slack',
20
48
  * })
21
49
  * console.log(result.answer)
50
+ * console.log(`Answered by ${result.answeredBy.name} at ${result.answeredAt}`)
22
51
  *
23
- * // Ask with structured response
52
+ * // Ask with structured response schema
24
53
  * const result = await ask(ceo, 'What are our Q1 priorities?', {
25
54
  * via: 'email',
26
55
  * schema: {
@@ -29,6 +58,8 @@ import { generateObject } from 'ai-functions';
29
58
  * },
30
59
  * })
31
60
  * ```
61
+ *
62
+ * @see {@link ai-functions#ask} for LLM-generated human interaction content
32
63
  */
33
64
  export async function ask(target, question, options = {}) {
34
65
  const { via, schema, timeout, context } = options;
@@ -41,9 +72,9 @@ export async function ask(target, question, options = {}) {
41
72
  }
42
73
  // Send the question and wait for response
43
74
  const response = await sendQuestion(channel, question, contacts, {
44
- schema,
45
- timeout,
46
- context,
75
+ ...(schema !== undefined && { schema }),
76
+ ...(timeout !== undefined && { timeout }),
77
+ ...(context !== undefined && { context }),
47
78
  recipient,
48
79
  });
49
80
  return {
@@ -70,9 +101,9 @@ ask.ai = async (question, context, schema) => {
70
101
  model: 'sonnet',
71
102
  schema,
72
103
  prompt: question,
73
- system: context
74
- ? `Use the following context to answer the question:\n\n${JSON.stringify(context, null, 2)}`
75
- : undefined,
104
+ ...(context !== undefined && {
105
+ system: `Use the following context to answer the question:\n\n${JSON.stringify(context, null, 2)}`,
106
+ }),
76
107
  });
77
108
  return result.object;
78
109
  }
@@ -80,9 +111,9 @@ ask.ai = async (question, context, schema) => {
80
111
  model: 'sonnet',
81
112
  schema: { answer: 'The answer to the question' },
82
113
  prompt: question,
83
- system: context
84
- ? `Use the following context to answer the question:\n\n${JSON.stringify(context, null, 2)}`
85
- : undefined,
114
+ ...(context !== undefined && {
115
+ system: `Use the following context to answer the question:\n\n${JSON.stringify(context, null, 2)}`,
116
+ }),
86
117
  });
87
118
  return result.object.answer;
88
119
  };
@@ -212,16 +243,45 @@ async function sendQuestion(channel, question, contacts, options) {
212
243
  if (!contact) {
213
244
  throw new Error(`No ${channel} contact configured`);
214
245
  }
215
- // In a real implementation, this would:
216
- // 1. Format the question for the channel
217
- // 2. Send via the appropriate API
218
- // 3. Wait for response (polling, webhook, etc.)
219
- // 4. Parse and validate the response
220
- // For now, simulate a pending response
221
- await new Promise((resolve) => setTimeout(resolve, 10));
222
- // Return a placeholder - real impl would wait for actual response
246
+ // Import transport functions dynamically to avoid circular dependencies
247
+ const { channelToTransport, sendViaTransport, hasTransport, resolveAddress } = await import('./transports.js');
248
+ const transport = channelToTransport(channel);
249
+ const address = resolveAddress(contacts, channel);
250
+ // If transport is registered, use it for real delivery
251
+ if (hasTransport(transport) && address) {
252
+ const { generateRequestId } = await import('./utils/id.js');
253
+ const requestId = generateRequestId('ask');
254
+ const payload = {
255
+ to: address.value,
256
+ body: question,
257
+ type: 'question',
258
+ priority: 'normal',
259
+ threadId: requestId,
260
+ ...(options.schema !== undefined && { schema: options.schema }),
261
+ ...(options.timeout !== undefined && { timeout: options.timeout }),
262
+ metadata: {
263
+ ...options.context,
264
+ recipient: options.recipient,
265
+ },
266
+ };
267
+ const result = await sendViaTransport(transport, payload);
268
+ if (result.success) {
269
+ // For real transports, we need to wait for a response
270
+ // This would integrate with the runtime's HumanRequestProcessor
271
+ // For now, return pending state - the response comes via webhook
272
+ return {
273
+ answer: `Question sent via ${transport}. Awaiting response. Request ID: ${requestId}`,
274
+ };
275
+ }
276
+ else {
277
+ throw new Error(`Failed to send question via ${transport}: ${result.error}`);
278
+ }
279
+ }
280
+ // No transport registered - return pending state
281
+ // In a real workflow, this would be processed when a transport is configured
282
+ // or the runtime handles the request via HumanRequestProcessor
223
283
  return {
224
- answer: 'Waiting for response...',
284
+ answer: `Question pending - no transport registered for ${channel}. Configure a transport handler to enable real delivery.`,
225
285
  };
226
286
  }
227
287
  //# sourceMappingURL=ask.js.map
package/dist/ask.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,cAAc,EAAE,MAAM,cAAc,CAAA;AAa7C;;;;;;;;;;;;;;;;;;;;;;;;;;;GA2BG;AACH,MAAM,CAAC,KAAK,UAAU,GAAG,CACvB,MAAoB,EACpB,QAAgB,EAChB,UAAsB,EAAE;IAExB,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,GAAG,OAAO,CAAA;IAEjD,oDAAoD;IACpD,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IAErD,iCAAiC;IACjC,MAAM,OAAO,GAAG,cAAc,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAA;IAE7C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,4CAA4C,CAAC,CAAA;IAC/D,CAAC;IAED,0CAA0C;IAC1C,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAI,OAAO,EAAE,QAAQ,EAAE,QAAQ,EAAE;QAClE,MAAM;QACN,OAAO;QACP,OAAO;QACP,SAAS;KACV,CAAC,CAAA;IAEF,OAAO;QACL,MAAM,EAAE,QAAQ,CAAC,MAAM;QACvB,UAAU,EAAE,SAAS;QACrB,UAAU,EAAE,IAAI,IAAI,EAAE;QACtB,GAAG,EAAE,OAAO;KACb,CAAA;AACH,CAAC;AAED;;;;;;;;;;GAUG;AACH,GAAG,CAAC,EAAE,GAAG,KAAK,EACZ,QAAgB,EAChB,OAAiC,EACjC,MAAqB,EACT,EAAE;IACd,IAAI,MAAM,EAAE,CAAC;QACX,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;YAClC,KAAK,EAAE,QAAQ;YACf,MAAM;YACN,MAAM,EAAE,QAAQ;YAChB,MAAM,EAAE,OAAO;gBACb,CAAC,CAAC,wDAAwD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;gBAC5F,CAAC,CAAC,SAAS;SACd,CAAC,CAAA;QACF,OAAO,MAAM,CAAC,MAAW,CAAA;IAC3B,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC;QAClC,KAAK,EAAE,QAAQ;QACf,MAAM,EAAE,EAAE,MAAM,EAAE,4BAA4B,EAAE;QAChD,MAAM,EAAE,QAAQ;QAChB,MAAM,EAAE,OAAO;YACb,CAAC,CAAC,wDAAwD,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE;YAC5F,CAAC,CAAC,SAAS;KACd,CAAC,CAAA;IAEF,OAAQ,MAAM,CAAC,MAAwB,CAAC,MAAM,CAAA;AAChD,CAAC,CAAA;AAED;;;;;;;;;;;GAWG;AACH,GAAG,CAAC,KAAK,GAAG,KAAK,EACf,MAAoB,EACpB,SAAmB,EACnB,UAAsB,EAAE,EACM,EAAE;IAChC,OAAO,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAI,MAAM,EAAE,CAAC,EAAE,OAAO,CAAC,CAAC,CAAC,CAAA;AACtE,CAAC,CAAA;AAED;;;;;;;GAOG;AACH,GAAG,CAAC,OAAO,GAAG,KAAK,EACjB,MAAoB,EACpB,KAAa,EACb,UAAsB,EAAE,EACI,EAAE;IAC9B,OAAO,GAAG,CAAS,MAAM,EAAE,oBAAoB,KAAK,EAAE,EAAE,OAAO,CAAC,CAAA;AAClE,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,GAAG,CAAC,KAAK,GAAG,KAAK,EACf,MAAoB,EACpB,QAAgB,EAChB,UAAsB,EAAE,EACU,EAAE;IACpC,OAAO,GAAG,CAAe,MAAM,EAAE,QAAQ,EAAE;QACzC,GAAG,OAAO;QACV,MAAM,EAAE;YACN,MAAM,EAAE,mBAAmB;SAC5B;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED;;;;;;;;;;GAUG;AACH,GAAG,CAAC,MAAM,GAAG,KAAK,EAChB,MAAoB,EACpB,QAAgB,EAChB,OAAY,EACZ,UAAsB,EAAE,EACD,EAAE;IACzB,MAAM,UAAU,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IACrE,MAAM,YAAY,GAAG,GAAG,QAAQ,iBAAiB,UAAU,EAAE,CAAA;IAE7D,OAAO,GAAG,CAAI,MAAM,EAAE,YAAY,EAAE;QAClC,GAAG,OAAO;QACV,MAAM,EAAE;YACN,MAAM,EAAE,WAAW,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACxC;KACF,CAAC,CAAA;AACJ,CAAC,CAAA;AAED,+EAA+E;AAC/E,mBAAmB;AACnB,+EAA+E;AAE/E;;GAEG;AACH,SAAS,aAAa,CAAC,MAAoB;IAIzC,IAAI,OAAO,MAAM,KAAK,QAAQ,EAAE,CAAC;QAC/B,OAAO;YACL,QAAQ,EAAE,EAAE;YACZ,SAAS,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE;SAC1B,CAAA;IACH,CAAC;IAED,IAAI,UAAU,IAAI,MAAM,EAAE,CAAC;QACzB,iBAAiB;QACjB,IAAI,SAAoB,CAAA;QACxB,IAAI,SAAS,IAAI,MAAM,EAAE,CAAC;YACxB,kCAAkC;YAClC,SAAS,GAAG,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,CAAA;QACnE,CAAC;aAAM,CAAC;YACN,SAAS;YACT,SAAS,GAAG,EAAE,EAAE,EAAE,MAAM,CAAC,EAAE,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,IAAI,EAAE,MAAM,CAAC,IAAI,EAAE,CAAA;QACrE,CAAC;QAED,OAAO;YACL,QAAQ,EAAE,MAAM,CAAC,QAAQ;YACzB,SAAS;SACV,CAAA;IACH,CAAC;IAED,YAAY;IACZ,OAAO;QACL,QAAQ,EAAE,EAAE;QACZ,SAAS,EAAE,MAAM;KAClB,CAAA;AACH,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CACrB,GAAkD,EAClD,QAAkB;IAElB,IAAI,GAAG,EAAE,CAAC;QACR,MAAM,SAAS,GAAG,KAAK,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAA;QACnD,IAAI,SAAS,IAAI,QAAQ,CAAC,SAAS,CAAC,KAAK,SAAS,EAAE,CAAC;YACnD,OAAO,SAAS,CAAA;QAClB,CAAC;IACH,CAAC;IAED,6BAA6B;IAC7B,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAqB,CAAA;IAC3D,MAAM,KAAK,GAAG,SAAS,CAAC,CAAC,CAAC,CAAA;IAC1B,OAAO,KAAK,IAAI,IAAI,CAAA;AACtB,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,YAAY,CACzB,OAAuB,EACvB,QAAgB,EAChB,QAAkB,EAClB,OAKC;IAED,MAAM,OAAO,GAAG,QAAQ,CAAC,OAAO,CAAC,CAAA;IAEjC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,MAAM,IAAI,KAAK,CAAC,MAAM,OAAO,qBAAqB,CAAC,CAAA;IACrD,CAAC;IAED,wCAAwC;IACxC,yCAAyC;IACzC,kCAAkC;IAClC,gDAAgD;IAChD,qCAAqC;IAErC,uCAAuC;IACvC,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAA;IAEvD,kEAAkE;IAClE,OAAO;QACL,MAAM,EAAE,yBAA8B;KACvC,CAAA;AACH,CAAC"}
1
+ {"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"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"}