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.
- package/.turbo/turbo-build.log +1 -1
- package/CHANGELOG.md +17 -0
- package/README.md +2 -0
- package/dist/actions.d.ts.map +1 -1
- package/dist/actions.js +33 -21
- package/dist/actions.js.map +1 -1
- package/dist/agent-comms.d.ts.map +1 -1
- package/dist/agent-comms.js +36 -25
- package/dist/agent-comms.js.map +1 -1
- package/dist/approve.d.ts +40 -8
- package/dist/approve.d.ts.map +1 -1
- package/dist/approve.js +86 -20
- package/dist/approve.js.map +1 -1
- package/dist/ask.d.ts +38 -7
- package/dist/ask.d.ts.map +1 -1
- package/dist/ask.js +85 -25
- package/dist/ask.js.map +1 -1
- package/dist/browse.d.ts +223 -0
- package/dist/browse.d.ts.map +1 -0
- package/dist/browse.js +392 -0
- package/dist/browse.js.map +1 -0
- package/dist/capability-tiers.js +3 -3
- package/dist/capability-tiers.js.map +1 -1
- package/dist/cascade-context.d.ts +28 -28
- package/dist/client.d.ts +162 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +64 -0
- package/dist/client.js.map +1 -0
- package/dist/decide.d.ts +42 -6
- package/dist/decide.d.ts.map +1 -1
- package/dist/decide.js +54 -11
- package/dist/decide.js.map +1 -1
- package/dist/do.d.ts +36 -7
- package/dist/do.d.ts.map +1 -1
- package/dist/do.js +82 -39
- package/dist/do.js.map +1 -1
- package/dist/error-escalation.d.ts.map +1 -1
- package/dist/error-escalation.js +38 -38
- package/dist/error-escalation.js.map +1 -1
- package/dist/generate.d.ts +48 -7
- package/dist/generate.d.ts.map +1 -1
- package/dist/generate.js +49 -8
- package/dist/generate.js.map +1 -1
- package/dist/goals.d.ts +10 -9
- package/dist/goals.d.ts.map +1 -1
- package/dist/goals.js +30 -24
- package/dist/goals.js.map +1 -1
- package/dist/image.d.ts +189 -0
- package/dist/image.d.ts.map +1 -0
- package/dist/image.js +528 -0
- package/dist/image.js.map +1 -0
- package/dist/index.d.ts +49 -2
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +58 -2
- package/dist/index.js.map +1 -1
- package/dist/is.d.ts +45 -10
- package/dist/is.d.ts.map +1 -1
- package/dist/is.js +56 -21
- package/dist/is.js.map +1 -1
- package/dist/kpis.d.ts +24 -15
- package/dist/kpis.d.ts.map +1 -1
- package/dist/kpis.js +16 -14
- package/dist/kpis.js.map +1 -1
- package/dist/load-balancing.d.ts.map +1 -1
- package/dist/load-balancing.js +124 -38
- package/dist/load-balancing.js.map +1 -1
- package/dist/logger.d.ts +76 -0
- package/dist/logger.d.ts.map +1 -0
- package/dist/logger.js +39 -0
- package/dist/logger.js.map +1 -0
- package/dist/notify.d.ts +38 -9
- package/dist/notify.d.ts.map +1 -1
- package/dist/notify.js +72 -17
- package/dist/notify.js.map +1 -1
- package/dist/role.d.ts +5 -4
- package/dist/role.d.ts.map +1 -1
- package/dist/role.js +13 -10
- package/dist/role.js.map +1 -1
- package/dist/runtime.d.ts +310 -0
- package/dist/runtime.d.ts.map +1 -0
- package/dist/runtime.js +510 -0
- package/dist/runtime.js.map +1 -0
- package/dist/team.d.ts +11 -6
- package/dist/team.d.ts.map +1 -1
- package/dist/team.js +22 -15
- package/dist/team.js.map +1 -1
- package/dist/transports/email.d.ts +318 -0
- package/dist/transports/email.d.ts.map +1 -0
- package/dist/transports/email.js +779 -0
- package/dist/transports/email.js.map +1 -0
- package/dist/transports/slack.d.ts +515 -0
- package/dist/transports/slack.d.ts.map +1 -0
- package/dist/transports/slack.js +844 -0
- package/dist/transports/slack.js.map +1 -0
- package/dist/transports.d.ts.map +1 -1
- package/dist/transports.js +44 -25
- package/dist/transports.js.map +1 -1
- package/dist/types.d.ts +141 -19
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js +5 -0
- package/dist/types.js.map +1 -1
- package/dist/utils/id.d.ts +19 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +21 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/video.d.ts +203 -0
- package/dist/video.d.ts.map +1 -0
- package/dist/video.js +528 -0
- package/dist/video.js.map +1 -0
- package/dist/worker.d.ts +343 -0
- package/dist/worker.d.ts.map +1 -0
- package/dist/worker.js +698 -0
- package/dist/worker.js.map +1 -0
- package/package.json +32 -14
- package/src/actions.ts +39 -30
- package/src/agent-comms.ts +54 -92
- package/src/approve.ts +91 -20
- package/src/ask.ts +99 -25
- package/src/browse.ts +627 -0
- package/src/capability-tiers.ts +5 -5
- package/src/client.ts +221 -0
- package/src/decide.ts +81 -35
- package/src/do.ts +98 -52
- package/src/error-escalation.ts +55 -67
- package/src/generate.ts +52 -18
- package/src/goals.ts +36 -27
- package/src/image.ts +816 -0
- package/src/index.ts +187 -2
- package/src/is.ts +59 -25
- package/src/kpis.ts +41 -36
- package/src/load-balancing.ts +132 -46
- package/src/logger.ts +93 -0
- package/src/notify.ts +78 -17
- package/src/role.ts +30 -20
- package/src/runtime.ts +796 -0
- package/src/team.ts +24 -19
- package/src/transports/email.ts +1160 -0
- package/src/transports/slack.ts +1320 -0
- package/src/transports.ts +58 -43
- package/src/types.ts +174 -46
- package/src/utils/id.ts +21 -0
- package/src/video.ts +906 -0
- package/src/worker.ts +1007 -0
- package/test/approve.test.ts +305 -0
- package/test/ask.test.ts +274 -0
- package/test/browse.test.ts +361 -0
- package/test/decide.test.ts +252 -0
- package/test/do.test.ts +144 -0
- package/test/error-logging.test.ts +357 -0
- package/test/generate.test.ts +319 -0
- package/test/image.test.ts +398 -0
- package/test/is.test.ts +287 -0
- package/test/load-balancing-safety.test.ts +404 -0
- package/test/notify.test.ts +434 -0
- package/test/primitives.test.ts +320 -0
- package/test/runtime-integration.test.ts +892 -0
- package/test/transports/crypto.test.ts +230 -0
- package/test/transports/email.test.ts +866 -0
- package/test/transports/id-generation.test.ts +91 -0
- package/test/transports/slack.test.ts +760 -0
- package/test/type-safety.test.ts +834 -0
- package/test/types.test.ts +60 -2
- package/test/video.test.ts +530 -0
- package/test/worker.test.ts +1433 -0
- package/tsconfig.json +4 -1
- package/vitest.config.ts +42 -0
- package/wrangler.jsonc +36 -0
- package/LICENSE +0 -21
- package/src/actions.js +0 -436
- package/src/approve.js +0 -234
- package/src/ask.js +0 -226
- package/src/decide.js +0 -244
- package/src/do.js +0 -227
- package/src/generate.js +0 -298
- package/src/goals.js +0 -205
- package/src/index.js +0 -68
- package/src/is.js +0 -317
- package/src/kpis.js +0 -270
- package/src/notify.js +0 -219
- package/src/role.js +0 -110
- package/src/team.js +0 -130
- package/src/transports.js +0 -357
- 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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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
|
-
//
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
//
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
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:
|
|
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
|
package/dist/approve.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../src/approve.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"approve.js","sourceRoot":"","sources":["../src/approve.ts"],"names":[],"mappings":"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"}
|
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
|
-
*
|
|
29
|
+
* Route a question to a Worker (AI Agent or Human) via communication channels.
|
|
8
30
|
*
|
|
9
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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
|
|
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
|
-
*
|
|
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
|
-
*
|
|
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
|
|
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
|
-
|
|
74
|
-
|
|
75
|
-
|
|
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
|
-
|
|
84
|
-
|
|
85
|
-
|
|
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
|
-
//
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
//
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
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:
|
|
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
|
|
1
|
+
{"version":3,"file":"ask.js","sourceRoot":"","sources":["../src/ask.ts"],"names":[],"mappings":"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"}
|