@adonis-agora/agent 0.64.1 → 0.65.1
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/CHANGELOG.md +17 -0
- package/dist/src/agent-service.d.ts +16 -1
- package/dist/src/agent-service.d.ts.map +1 -1
- package/dist/src/agent-service.js +11 -2
- package/dist/src/agent-service.js.map +1 -1
- package/dist/src/channels/adapters/evolution_api.d.ts.map +1 -1
- package/dist/src/channels/adapters/evolution_api.js +25 -1
- package/dist/src/channels/adapters/evolution_api.js.map +1 -1
- package/dist/src/channels/adapters/telegram.d.ts +2 -1
- package/dist/src/channels/adapters/telegram.d.ts.map +1 -1
- package/dist/src/channels/adapters/telegram.js +57 -4
- package/dist/src/channels/adapters/telegram.js.map +1 -1
- package/dist/src/channels/adapters/whatsapp_cloud.d.ts +3 -2
- package/dist/src/channels/adapters/whatsapp_cloud.d.ts.map +1 -1
- package/dist/src/channels/adapters/whatsapp_cloud.js +55 -4
- package/dist/src/channels/adapters/whatsapp_cloud.js.map +1 -1
- package/dist/src/channels/executor.d.ts +116 -0
- package/dist/src/channels/executor.d.ts.map +1 -0
- package/dist/src/channels/executor.js +138 -0
- package/dist/src/channels/executor.js.map +1 -0
- package/dist/src/channels/handler.d.ts +228 -89
- package/dist/src/channels/handler.d.ts.map +1 -1
- package/dist/src/channels/handler.js +856 -388
- package/dist/src/channels/handler.js.map +1 -1
- package/dist/src/channels/http.d.ts +15 -0
- package/dist/src/channels/http.d.ts.map +1 -1
- package/dist/src/channels/http.js +43 -0
- package/dist/src/channels/http.js.map +1 -1
- package/dist/src/channels/index.d.ts +7 -4
- package/dist/src/channels/index.d.ts.map +1 -1
- package/dist/src/channels/index.js +6 -3
- package/dist/src/channels/index.js.map +1 -1
- package/dist/src/channels/texts.d.ts +102 -0
- package/dist/src/channels/texts.d.ts.map +1 -0
- package/dist/src/channels/texts.js +79 -0
- package/dist/src/channels/texts.js.map +1 -0
- package/dist/src/channels/types.d.ts +41 -1
- package/dist/src/channels/types.d.ts.map +1 -1
- package/dist/src/durable/agent-run-context.d.ts +10 -0
- package/dist/src/durable/agent-run-context.d.ts.map +1 -1
- package/dist/src/durable/agent-run-context.js +22 -0
- package/dist/src/durable/agent-run-context.js.map +1 -1
- package/dist/src/durable/agent-run-workflow.d.ts.map +1 -1
- package/dist/src/durable/agent-run-workflow.js +1 -27
- package/dist/src/durable/agent-run-workflow.js.map +1 -1
- package/dist/src/durable/drive-pending-runs.d.ts +17 -0
- package/dist/src/durable/drive-pending-runs.d.ts.map +1 -0
- package/dist/src/durable/drive-pending-runs.js +41 -0
- package/dist/src/durable/drive-pending-runs.js.map +1 -0
- package/dist/src/durable/durable-agent-runner.d.ts +4 -0
- package/dist/src/durable/durable-agent-runner.d.ts.map +1 -1
- package/dist/src/durable/durable-agent-runner.js +7 -0
- package/dist/src/durable/durable-agent-runner.js.map +1 -1
- package/dist/src/durable/outside-workflow-ctx.d.ts +27 -0
- package/dist/src/durable/outside-workflow-ctx.d.ts.map +1 -0
- package/dist/src/durable/outside-workflow-ctx.js +29 -0
- package/dist/src/durable/outside-workflow-ctx.js.map +1 -0
- package/dist/src/index.d.ts +2 -2
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/index.js +1 -1
- package/dist/src/index.js.map +1 -1
- package/dist/src/opencode/durable/runner.d.ts +4 -0
- package/dist/src/opencode/durable/runner.d.ts.map +1 -1
- package/dist/src/opencode/durable/runner.js +7 -0
- package/dist/src/opencode/durable/runner.js.map +1 -1
- package/dist/src/spi/agent-runner.d.ts +8 -0
- package/dist/src/spi/agent-runner.d.ts.map +1 -1
- package/package.json +1 -1
- package/skills/agent-setup/SKILL.md +9 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../../src/channels/adapters/telegram.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,oBAAoB,EAEpB,yBAAyB,EACzB,UAAU,EACV,QAAQ,EACR,MAAM,EACN,SAAS,EACT,MAAM,EACN,GAAG,GACJ,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,wBAAwB,EAAE,MAAM,gBAAgB,CAAC;
|
|
1
|
+
{"version":3,"file":"telegram.js","sourceRoot":"","sources":["../../../../src/channels/adapters/telegram.ts"],"names":[],"mappings":"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"}
|
|
@@ -24,8 +24,9 @@ export interface WhatsappCloudOptions {
|
|
|
24
24
|
*
|
|
25
25
|
* Verifies `X-Hub-Signature-256` over the raw body; reads text, interactive button/list replies,
|
|
26
26
|
* template quick replies and media (image, audio, video, document, sticker — downloaded through the
|
|
27
|
-
* Graph API media endpoint) addressed to `phoneNumberId` (status updates are ignored); sends text
|
|
28
|
-
* interactive reply buttons (at most 3, 20-character titles)
|
|
27
|
+
* Graph API media endpoint) addressed to `phoneNumberId` (status updates are ignored); sends text,
|
|
28
|
+
* interactive reply buttons (at most 3, 20-character titles, with a footer) and files (image,
|
|
29
|
+
* document, audio, video — by link, or uploaded first when given as bytes).
|
|
29
30
|
*/
|
|
30
31
|
export declare function whatsappCloud(options: WhatsappCloudOptions): ChannelAdapter;
|
|
31
32
|
//# sourceMappingURL=whatsapp_cloud.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whatsapp_cloud.d.ts","sourceRoot":"","sources":["../../../../src/channels/adapters/whatsapp_cloud.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,YAAY,
|
|
1
|
+
{"version":3,"file":"whatsapp_cloud.d.ts","sourceRoot":"","sources":["../../../../src/channels/adapters/whatsapp_cloud.ts"],"names":[],"mappings":"AACA,OAAO,EAEL,KAAK,YAAY,EAWlB,MAAM,YAAY,CAAC;AACpB,OAAO,KAAK,EACV,cAAc,EAMf,MAAM,aAAa,CAAC;AAErB,MAAM,WAAW,oBAAoB;IACnC,6FAA6F;IAC7F,aAAa,EAAE,MAAM,CAAC;IACtB,oFAAoF;IACpF,WAAW,EAAE,MAAM,CAAC;IACpB,wFAAwF;IACxF,SAAS,EAAE,MAAM,CAAC;IAClB,kGAAkG;IAClG,WAAW,EAAE,MAAM,CAAC;IACpB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,6FAA6F;IAC7F,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,YAAY,CAAC;CACtB;AA0DD;;;;;;;;;;GAUG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,oBAAoB,GAAG,cAAc,CA2L3E"}
|
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
import { createHmac } from 'node:crypto';
|
|
2
|
-
import { ChannelDeliveryError, ChannelMediaTooLargeError, fetchBytes, postJson, queryParam, record, safeEqual, sizeOf, str, } from '../http.js';
|
|
2
|
+
import { ChannelDeliveryError, ChannelMediaTooLargeError, fetchBytes, mediaFilename, postForm, postJson, queryParam, record, safeEqual, sizeOf, str, } from '../http.js';
|
|
3
3
|
/** Cloud API limits: text body, interactive body, button title. */
|
|
4
4
|
const MAX_TEXT = 4096;
|
|
5
5
|
const MAX_INTERACTIVE_BODY = 1024;
|
|
6
6
|
const MAX_BUTTON_TITLE = 20;
|
|
7
7
|
const MAX_BUTTONS = 3;
|
|
8
|
+
const MAX_CAPTION = 1024;
|
|
9
|
+
const MAX_FOOTER = 60;
|
|
8
10
|
const MEDIA_TYPES = ['image', 'audio', 'video', 'document', 'sticker'];
|
|
9
11
|
/** The file a Cloud API message carries (`{ id, mime_type, caption?, filename? }`), and its caption. */
|
|
10
12
|
function mediaOf(message) {
|
|
@@ -58,8 +60,9 @@ function parseMessage(message) {
|
|
|
58
60
|
*
|
|
59
61
|
* Verifies `X-Hub-Signature-256` over the raw body; reads text, interactive button/list replies,
|
|
60
62
|
* template quick replies and media (image, audio, video, document, sticker — downloaded through the
|
|
61
|
-
* Graph API media endpoint) addressed to `phoneNumberId` (status updates are ignored); sends text
|
|
62
|
-
* interactive reply buttons (at most 3, 20-character titles)
|
|
63
|
+
* Graph API media endpoint) addressed to `phoneNumberId` (status updates are ignored); sends text,
|
|
64
|
+
* interactive reply buttons (at most 3, 20-character titles, with a footer) and files (image,
|
|
65
|
+
* document, audio, video — by link, or uploaded first when given as bytes).
|
|
63
66
|
*/
|
|
64
67
|
export function whatsappCloud(options) {
|
|
65
68
|
const name = options.name ?? 'whatsapp';
|
|
@@ -69,9 +72,31 @@ export function whatsappCloud(options) {
|
|
|
69
72
|
const endpoint = `https://graph.facebook.com/${graphVersion}/${encodeURIComponent(options.phoneNumberId)}/messages`;
|
|
70
73
|
const post = (body) => postJson(name, fetcher, endpoint, { authorization: `Bearer ${options.accessToken}` }, { messaging_product: 'whatsapp', recipient_type: 'individual', ...body }, timeoutMs);
|
|
71
74
|
const sendText = (to, body) => post({ to, type: 'text', text: { body, preview_url: false } });
|
|
75
|
+
/** Bytes are uploaded first (`POST /{phone-number-id}/media`); the message names the upload. */
|
|
76
|
+
const upload = async (media) => {
|
|
77
|
+
const answer = record(await postForm(name, fetcher, endpoint.replace(/\/messages$/, '/media'), { authorization: `Bearer ${options.accessToken}` }, {
|
|
78
|
+
messaging_product: 'whatsapp',
|
|
79
|
+
type: media.contentType ?? 'application/octet-stream',
|
|
80
|
+
file: {
|
|
81
|
+
data: media.data,
|
|
82
|
+
contentType: media.contentType ?? 'application/octet-stream',
|
|
83
|
+
filename: mediaFilename(media),
|
|
84
|
+
},
|
|
85
|
+
}, timeoutMs));
|
|
86
|
+
const id = str(answer?.id);
|
|
87
|
+
if (id === undefined)
|
|
88
|
+
throw new ChannelDeliveryError(name, null, `${name}: upload failed`);
|
|
89
|
+
return id;
|
|
90
|
+
};
|
|
72
91
|
return {
|
|
73
92
|
name,
|
|
74
|
-
capabilities: {
|
|
93
|
+
capabilities: {
|
|
94
|
+
buttons: MAX_BUTTONS,
|
|
95
|
+
markdown: 'whatsapp',
|
|
96
|
+
maxLength: MAX_TEXT,
|
|
97
|
+
media: true,
|
|
98
|
+
maxCaptionLength: MAX_CAPTION,
|
|
99
|
+
},
|
|
75
100
|
challenge(request) {
|
|
76
101
|
if (request.method !== 'GET')
|
|
77
102
|
return null;
|
|
@@ -144,6 +169,29 @@ export function whatsappCloud(options) {
|
|
|
144
169
|
};
|
|
145
170
|
},
|
|
146
171
|
async send(conversation, message) {
|
|
172
|
+
if (message.media !== undefined) {
|
|
173
|
+
const { media } = message;
|
|
174
|
+
const source = media.url !== undefined
|
|
175
|
+
? { link: media.url }
|
|
176
|
+
: media.data !== undefined
|
|
177
|
+
? { id: await upload({ ...media, data: media.data }) }
|
|
178
|
+
: undefined;
|
|
179
|
+
if (source === undefined)
|
|
180
|
+
throw new Error(`${name}: a file needs a url or its data`);
|
|
181
|
+
await post({
|
|
182
|
+
to: conversation,
|
|
183
|
+
type: media.kind,
|
|
184
|
+
[media.kind]: {
|
|
185
|
+
...source,
|
|
186
|
+
// Audio carries no caption on WhatsApp.
|
|
187
|
+
...(message.text !== '' && media.kind !== 'audio'
|
|
188
|
+
? { caption: message.text.slice(0, MAX_CAPTION) }
|
|
189
|
+
: {}),
|
|
190
|
+
...(media.kind === 'document' ? { filename: mediaFilename(media) } : {}),
|
|
191
|
+
},
|
|
192
|
+
});
|
|
193
|
+
return;
|
|
194
|
+
}
|
|
147
195
|
if (message.buttons === undefined || message.buttons.length === 0) {
|
|
148
196
|
await sendText(conversation, message.buttons === undefined ? message.text : message.fallbackText);
|
|
149
197
|
return;
|
|
@@ -163,6 +211,9 @@ export function whatsappCloud(options) {
|
|
|
163
211
|
interactive: {
|
|
164
212
|
type: 'button',
|
|
165
213
|
body: { text: body },
|
|
214
|
+
...(message.footer !== undefined && message.footer.trim() !== ''
|
|
215
|
+
? { footer: { text: message.footer.replace(/[*_~]/g, '').trim().slice(0, MAX_FOOTER) } }
|
|
216
|
+
: {}),
|
|
166
217
|
action: {
|
|
167
218
|
buttons: message.buttons.slice(0, MAX_BUTTONS).map((button) => ({
|
|
168
219
|
type: 'reply',
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"whatsapp_cloud.js","sourceRoot":"","sources":["../../../../src/channels/adapters/whatsapp_cloud.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EACL,oBAAoB,EAEpB,yBAAyB,EACzB,UAAU,EACV,QAAQ,EACR,UAAU,EACV,MAAM,EACN,SAAS,EACT,MAAM,EACN,GAAG,GACJ,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"whatsapp_cloud.js","sourceRoot":"","sources":["../../../../src/channels/adapters/whatsapp_cloud.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,116 @@
|
|
|
1
|
+
import type { Actor } from '../types.js';
|
|
2
|
+
import type { InboundMessage } from './types.js';
|
|
3
|
+
/**
|
|
4
|
+
* How a channel's inbound messages are processed: one {@link ChannelJob} per message, in order per
|
|
5
|
+
* conversation, each made of named phases ({@link ChannelStepRunner}).
|
|
6
|
+
*
|
|
7
|
+
* - {@link inlineExecutor}: in this process, after the `200`. A restart loses what was in flight.
|
|
8
|
+
* - {@link durableExecutor}: as `@adonis-agora/durable` runs — persisted before the `200`, one at a
|
|
9
|
+
* time per conversation (a singleton key), each phase a checkpointed step, and resumed by the
|
|
10
|
+
* engine's recovery after a crash.
|
|
11
|
+
*/
|
|
12
|
+
/** What a channel processes: a message, the rest of a run after its question, a question timing out. */
|
|
13
|
+
export type ChannelJob = {
|
|
14
|
+
kind: 'message';
|
|
15
|
+
channel: string;
|
|
16
|
+
conversation: string;
|
|
17
|
+
message: InboundMessage;
|
|
18
|
+
} | {
|
|
19
|
+
/** Read a run's stream (again) and deliver what was not delivered yet. */
|
|
20
|
+
kind: 'resume';
|
|
21
|
+
channel: string;
|
|
22
|
+
conversation: string;
|
|
23
|
+
runId: string;
|
|
24
|
+
threadId: string | null;
|
|
25
|
+
actor: Actor;
|
|
26
|
+
} | {
|
|
27
|
+
/** A question nobody answered in time: skip it, then resume the run. Runs outside the lock. */
|
|
28
|
+
kind: 'timeout';
|
|
29
|
+
channel: string;
|
|
30
|
+
conversation: string;
|
|
31
|
+
/** The run parked on the question (a delegate's, sometimes). */
|
|
32
|
+
runId: string;
|
|
33
|
+
toolCallId: string;
|
|
34
|
+
/** The run whose stream the person reads. */
|
|
35
|
+
streamRunId: string;
|
|
36
|
+
threadId: string | null;
|
|
37
|
+
actor: Actor;
|
|
38
|
+
};
|
|
39
|
+
/** Runs one phase of a job: checkpointed (durable) or just called (inline). Results are JSON. */
|
|
40
|
+
export type ChannelStepRunner = <T>(name: string, fn: () => Promise<T>) => Promise<T>;
|
|
41
|
+
/** What runs a job — the registered channel's processor. */
|
|
42
|
+
export type ChannelJobRunner = (job: ChannelJob, step: ChannelStepRunner) => Promise<void>;
|
|
43
|
+
export interface ChannelExecutor {
|
|
44
|
+
readonly durable: boolean;
|
|
45
|
+
/**
|
|
46
|
+
* Take a job: persisted (durable) or queued (inline) when this resolves — what the webhook waits
|
|
47
|
+
* for before its `200`. Jobs of one conversation run one at a time, in the order they were taken.
|
|
48
|
+
*/
|
|
49
|
+
enqueue(job: ChannelJob, id: string): Promise<void>;
|
|
50
|
+
/** Run a job at `at` (epoch ms), outside the conversation's order. */
|
|
51
|
+
later(job: ChannelJob, id: string, at: number): Promise<void>;
|
|
52
|
+
/** Resolves once every job taken by this executor so far has finished. */
|
|
53
|
+
drain(): Promise<void>;
|
|
54
|
+
}
|
|
55
|
+
/** Ids a store / engine takes whatever the provider's message id looks like. */
|
|
56
|
+
export declare function jobId(...parts: string[]): string;
|
|
57
|
+
/** In this process: a promise chain per conversation. Nothing survives a restart. */
|
|
58
|
+
export declare function inlineExecutor(run: (job: ChannelJob) => Promise<void>): ChannelExecutor;
|
|
59
|
+
/**
|
|
60
|
+
* The slice of an `@adonis-agora/durable` `WorkflowEngine` the channels use — the engine itself
|
|
61
|
+
* satisfies it (`channels.handle(adapter, { durable: engine })`).
|
|
62
|
+
*/
|
|
63
|
+
export interface ChannelWorkflowEngine {
|
|
64
|
+
register(name: string, version: string, fn: (ctx: ChannelWorkflowCtx, input: unknown) => Promise<unknown>, opts?: {
|
|
65
|
+
singleton?: {
|
|
66
|
+
key: (input: unknown) => string;
|
|
67
|
+
limit?: number;
|
|
68
|
+
};
|
|
69
|
+
}): void;
|
|
70
|
+
start(workflow: string, input: unknown, runId: string, opts?: {
|
|
71
|
+
startAt?: number | Date;
|
|
72
|
+
}): Promise<unknown>;
|
|
73
|
+
waitForRun?(runId: string, opts?: {
|
|
74
|
+
timeoutMs?: number;
|
|
75
|
+
terminal?: boolean;
|
|
76
|
+
}): Promise<unknown>;
|
|
77
|
+
}
|
|
78
|
+
/** The slice of a durable `WorkflowCtx` a channel job uses. */
|
|
79
|
+
export interface ChannelWorkflowCtx {
|
|
80
|
+
localStep<T>(name: string, fn: () => Promise<T>, options?: {
|
|
81
|
+
retries?: number;
|
|
82
|
+
backoff?: 'fixed' | 'exp';
|
|
83
|
+
backoffMs?: number;
|
|
84
|
+
}): Promise<T>;
|
|
85
|
+
}
|
|
86
|
+
/** The workflow a message (or a resume) runs as: one at a time per channel conversation. */
|
|
87
|
+
export declare const CHANNEL_JOB_WORKFLOW = "agora.channel.job";
|
|
88
|
+
/** A question's timeout: runs on its own, so it never waits behind the conversation. */
|
|
89
|
+
export declare const CHANNEL_TIMER_WORKFLOW = "agora.channel.timer";
|
|
90
|
+
/**
|
|
91
|
+
* Register the channel workflows on `engine`, once. Their body finds the job's channel with
|
|
92
|
+
* `runnerFor` — the handler `channels.handle()` registered under that name IN THIS PROCESS. A
|
|
93
|
+
* process that resumes channel jobs must have created the same handlers.
|
|
94
|
+
*/
|
|
95
|
+
export declare function registerChannelWorkflows(engine: ChannelWorkflowEngine, runnerFor: (channel: string) => ChannelJobRunner | undefined): void;
|
|
96
|
+
/** As durable runs on `engine` — see {@link registerChannelWorkflows}. */
|
|
97
|
+
export declare function durableExecutor(engine: ChannelWorkflowEngine): ChannelExecutor;
|
|
98
|
+
export interface ChannelRetryOptions {
|
|
99
|
+
/** Attempts per phase (the first included). Default 3. */
|
|
100
|
+
attempts?: number;
|
|
101
|
+
/** Delay before the second attempt; doubles each time (with jitter). Default 1 s. */
|
|
102
|
+
backoffMs?: number;
|
|
103
|
+
/** The longest delay between two attempts. Default 30 s. */
|
|
104
|
+
maxBackoffMs?: number;
|
|
105
|
+
/**
|
|
106
|
+
* Retry after this error? Default: not a refusal that retrying cannot change — a definite 4xx
|
|
107
|
+
* from the provider (`ChannelDeliveryError.definite`), an error carrying a 4xx `status`, a
|
|
108
|
+
* `QuotaBlockedError` — everything else yes.
|
|
109
|
+
*/
|
|
110
|
+
retryable?(error: unknown): boolean;
|
|
111
|
+
}
|
|
112
|
+
/** {@link ChannelRetryOptions.retryable}'s default. */
|
|
113
|
+
export declare function retryableByDefault(error: unknown): boolean;
|
|
114
|
+
/** Run `fn`, again after a growing delay while it fails with a retryable error. */
|
|
115
|
+
export declare function withRetries<T>(fn: () => Promise<T>, options?: ChannelRetryOptions): Promise<T>;
|
|
116
|
+
//# sourceMappingURL=executor.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.d.ts","sourceRoot":"","sources":["../../../src/channels/executor.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
import { createHash } from 'node:crypto';
|
|
2
|
+
import { ChannelDeliveryError } from './http.js';
|
|
3
|
+
/** Ids a store / engine takes whatever the provider's message id looks like. */
|
|
4
|
+
export function jobId(...parts) {
|
|
5
|
+
const id = `agora.channel:${parts.join(':')}`;
|
|
6
|
+
return id.length <= 160 ? id : `agora.channel:${createHash('sha256').update(id).digest('hex')}`;
|
|
7
|
+
}
|
|
8
|
+
/** The order key: one channel conversation. */
|
|
9
|
+
const lockKey = (job) => `${job.channel}:${job.conversation}`;
|
|
10
|
+
/** In this process: a promise chain per conversation. Nothing survives a restart. */
|
|
11
|
+
export function inlineExecutor(run) {
|
|
12
|
+
const chains = new Map();
|
|
13
|
+
const inFlight = new Set();
|
|
14
|
+
const track = (work) => {
|
|
15
|
+
inFlight.add(work);
|
|
16
|
+
void work.finally(() => inFlight.delete(work));
|
|
17
|
+
return work;
|
|
18
|
+
};
|
|
19
|
+
return {
|
|
20
|
+
durable: false,
|
|
21
|
+
async enqueue(job) {
|
|
22
|
+
const key = lockKey(job);
|
|
23
|
+
const previous = chains.get(key) ?? Promise.resolve();
|
|
24
|
+
const next = track(previous.then(() => run(job)).catch(() => { }));
|
|
25
|
+
chains.set(key, next);
|
|
26
|
+
void next.finally(() => {
|
|
27
|
+
if (chains.get(key) === next)
|
|
28
|
+
chains.delete(key);
|
|
29
|
+
});
|
|
30
|
+
},
|
|
31
|
+
async later(job, _id, at) {
|
|
32
|
+
const timer = setTimeout(() => track(run(job).catch(() => { })), Math.max(0, at - Date.now()));
|
|
33
|
+
timer.unref?.();
|
|
34
|
+
},
|
|
35
|
+
async drain() {
|
|
36
|
+
while (inFlight.size > 0)
|
|
37
|
+
await Promise.allSettled([...inFlight]);
|
|
38
|
+
},
|
|
39
|
+
};
|
|
40
|
+
}
|
|
41
|
+
/** The workflow a message (or a resume) runs as: one at a time per channel conversation. */
|
|
42
|
+
export const CHANNEL_JOB_WORKFLOW = 'agora.channel.job';
|
|
43
|
+
/** A question's timeout: runs on its own, so it never waits behind the conversation. */
|
|
44
|
+
export const CHANNEL_TIMER_WORKFLOW = 'agora.channel.timer';
|
|
45
|
+
/** A control-flow signal a driving dispatcher may surface out of `start` — not a failure. */
|
|
46
|
+
const isControlFlowSignal = (error) => {
|
|
47
|
+
const name = error?.name;
|
|
48
|
+
return name === 'WorkflowSuspended' || name === 'ContinueAsNew';
|
|
49
|
+
};
|
|
50
|
+
const registeredOn = new WeakSet();
|
|
51
|
+
/**
|
|
52
|
+
* Register the channel workflows on `engine`, once. Their body finds the job's channel with
|
|
53
|
+
* `runnerFor` — the handler `channels.handle()` registered under that name IN THIS PROCESS. A
|
|
54
|
+
* process that resumes channel jobs must have created the same handlers.
|
|
55
|
+
*/
|
|
56
|
+
export function registerChannelWorkflows(engine, runnerFor) {
|
|
57
|
+
if (registeredOn.has(engine))
|
|
58
|
+
return;
|
|
59
|
+
registeredOn.add(engine);
|
|
60
|
+
const body = async (ctx, input) => {
|
|
61
|
+
const job = input;
|
|
62
|
+
// A handler created lazily (on its first webhook) may not exist yet in the process that
|
|
63
|
+
// recovered this run: give it a minute before failing the job.
|
|
64
|
+
await ctx.localStep('channel', async () => {
|
|
65
|
+
if (runnerFor(job.channel) === undefined)
|
|
66
|
+
throw new Error(`[@adonis-agora/agent] channel "${job.channel}" is not registered in this process — create its handler (channels.handle) at boot in every process that runs durable work`);
|
|
67
|
+
return true;
|
|
68
|
+
}, { retries: 30, backoff: 'fixed', backoffMs: 2000 });
|
|
69
|
+
const run = runnerFor(job.channel);
|
|
70
|
+
if (run === undefined)
|
|
71
|
+
return null;
|
|
72
|
+
await run(job, (name, fn) => ctx.localStep(name, fn));
|
|
73
|
+
return null;
|
|
74
|
+
};
|
|
75
|
+
engine.register(CHANNEL_JOB_WORKFLOW, '1', body, {
|
|
76
|
+
singleton: { key: (input) => lockKey(input), limit: 1 },
|
|
77
|
+
});
|
|
78
|
+
engine.register(CHANNEL_TIMER_WORKFLOW, '1', body);
|
|
79
|
+
}
|
|
80
|
+
/** As durable runs on `engine` — see {@link registerChannelWorkflows}. */
|
|
81
|
+
export function durableExecutor(engine) {
|
|
82
|
+
const started = new Set();
|
|
83
|
+
const start = async (workflow, job, id, at) => {
|
|
84
|
+
try {
|
|
85
|
+
await engine.start(workflow, job, id, at === undefined ? undefined : { startAt: at });
|
|
86
|
+
}
|
|
87
|
+
catch (error) {
|
|
88
|
+
if (!isControlFlowSignal(error))
|
|
89
|
+
throw error;
|
|
90
|
+
}
|
|
91
|
+
};
|
|
92
|
+
return {
|
|
93
|
+
durable: true,
|
|
94
|
+
async enqueue(job, id) {
|
|
95
|
+
await start(CHANNEL_JOB_WORKFLOW, job, id);
|
|
96
|
+
started.add(id);
|
|
97
|
+
},
|
|
98
|
+
async later(job, id, at) {
|
|
99
|
+
await start(CHANNEL_TIMER_WORKFLOW, job, id, at);
|
|
100
|
+
},
|
|
101
|
+
async drain() {
|
|
102
|
+
while (started.size > 0) {
|
|
103
|
+
const ids = [...started];
|
|
104
|
+
started.clear();
|
|
105
|
+
await Promise.allSettled(ids.map((id) => engine.waitForRun?.(id, { terminal: true }) ?? Promise.resolve()));
|
|
106
|
+
}
|
|
107
|
+
},
|
|
108
|
+
};
|
|
109
|
+
}
|
|
110
|
+
/** {@link ChannelRetryOptions.retryable}'s default. */
|
|
111
|
+
export function retryableByDefault(error) {
|
|
112
|
+
if (error instanceof ChannelDeliveryError)
|
|
113
|
+
return !error.definite;
|
|
114
|
+
const status = error?.status;
|
|
115
|
+
if (typeof status === 'number' && status >= 400 && status < 500)
|
|
116
|
+
return false;
|
|
117
|
+
const name = error?.name;
|
|
118
|
+
return name !== 'QuotaBlockedError' && name !== 'AttachmentRefusedError';
|
|
119
|
+
}
|
|
120
|
+
/** Run `fn`, again after a growing delay while it fails with a retryable error. */
|
|
121
|
+
export async function withRetries(fn, options = {}) {
|
|
122
|
+
const attempts = Math.max(1, options.attempts ?? 3);
|
|
123
|
+
const base = Math.max(0, options.backoffMs ?? 1000);
|
|
124
|
+
const max = Math.max(base, options.maxBackoffMs ?? 30_000);
|
|
125
|
+
const retryable = options.retryable ?? retryableByDefault;
|
|
126
|
+
for (let attempt = 1;; attempt++) {
|
|
127
|
+
try {
|
|
128
|
+
return await fn();
|
|
129
|
+
}
|
|
130
|
+
catch (error) {
|
|
131
|
+
if (attempt >= attempts || !retryable(error))
|
|
132
|
+
throw error;
|
|
133
|
+
const delay = Math.min(max, base * 2 ** (attempt - 1));
|
|
134
|
+
await new Promise((resolve) => setTimeout(resolve, delay * (0.5 + Math.random() / 2)));
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
//# sourceMappingURL=executor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../../src/channels/executor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AAEzC,OAAO,EAAE,oBAAoB,EAAE,MAAM,WAAW,CAAC;AA0DjD,gFAAgF;AAChF,MAAM,UAAU,KAAK,CAAC,GAAG,KAAe;IACtC,MAAM,EAAE,GAAG,iBAAiB,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC;IAC9C,OAAO,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,iBAAiB,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;AAClG,CAAC;AAED,+CAA+C;AAC/C,MAAM,OAAO,GAAG,CAAC,GAAiD,EAAE,EAAE,CACpE,GAAG,GAAG,CAAC,OAAO,IAAI,GAAG,CAAC,YAAY,EAAE,CAAC;AAEvC,qFAAqF;AACrF,MAAM,UAAU,cAAc,CAAC,GAAuC;IACpE,MAAM,MAAM,GAAG,IAAI,GAAG,EAAyB,CAAC;IAChD,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAiB,CAAC;IAC1C,MAAM,KAAK,GAAG,CAAC,IAAmB,EAAE,EAAE;QACpC,QAAQ,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACnB,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,KAAK;QACd,KAAK,CAAC,OAAO,CAAC,GAAG;YACf,MAAM,GAAG,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;YACzB,MAAM,QAAQ,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;YACtD,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,CAAC;YAClE,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;YACtB,KAAK,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE;gBACrB,IAAI,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;oBAAE,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YACnD,CAAC,CAAC,CAAC;QACL,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;YACtB,MAAM,KAAK,GAAG,UAAU,CAAC,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC;YAC9F,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,KAAK;YACT,OAAO,QAAQ,CAAC,IAAI,GAAG,CAAC;gBAAE,MAAM,OAAO,CAAC,UAAU,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;QACpE,CAAC;KACF,CAAC;AACJ,CAAC;AA+BD,4FAA4F;AAC5F,MAAM,CAAC,MAAM,oBAAoB,GAAG,mBAAmB,CAAC;AACxD,wFAAwF;AACxF,MAAM,CAAC,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAE5D,6FAA6F;AAC7F,MAAM,mBAAmB,GAAG,CAAC,KAAc,EAAE,EAAE;IAC7C,MAAM,IAAI,GAAI,KAAmC,EAAE,IAAI,CAAC;IACxD,OAAO,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,eAAe,CAAC;AAClE,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,IAAI,OAAO,EAAU,CAAC;AAE3C;;;;GAIG;AACH,MAAM,UAAU,wBAAwB,CACtC,MAA6B,EAC7B,SAA4D;IAE5D,IAAI,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC;QAAE,OAAO;IACrC,YAAY,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzB,MAAM,IAAI,GAAG,KAAK,EAAE,GAAuB,EAAE,KAAc,EAAE,EAAE;QAC7D,MAAM,GAAG,GAAG,KAAmB,CAAC;QAChC,wFAAwF;QACxF,+DAA+D;QAC/D,MAAM,GAAG,CAAC,SAAS,CACjB,SAAS,EACT,KAAK,IAAI,EAAE;YACT,IAAI,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,KAAK,SAAS;gBACtC,MAAM,IAAI,KAAK,CACb,kCAAkC,GAAG,CAAC,OAAO,4HAA4H,CAC1K,CAAC;YACJ,OAAO,IAAI,CAAC;QACd,CAAC,EACD,EAAE,OAAO,EAAE,EAAE,EAAE,OAAO,EAAE,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CACnD,CAAC;QACF,MAAM,GAAG,GAAG,SAAS,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC;QACnC,IAAI,GAAG,KAAK,SAAS;YAAE,OAAO,IAAI,CAAC;QACnC,MAAM,GAAG,CAAC,GAAG,EAAE,CAAC,IAAI,EAAE,EAAE,EAAE,EAAE,CAAC,GAAG,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC,CAAC;QACtD,OAAO,IAAI,CAAC;IACd,CAAC,CAAC;IACF,MAAM,CAAC,QAAQ,CAAC,oBAAoB,EAAE,GAAG,EAAE,IAAI,EAAE;QAC/C,SAAS,EAAE,EAAE,GAAG,EAAE,CAAC,KAAK,EAAE,EAAE,CAAC,OAAO,CAAC,KAAmB,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE;KACtE,CAAC,CAAC;IACH,MAAM,CAAC,QAAQ,CAAC,sBAAsB,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;AACrD,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,eAAe,CAAC,MAA6B;IAC3D,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,MAAM,KAAK,GAAG,KAAK,EAAE,QAAgB,EAAE,GAAe,EAAE,EAAU,EAAE,EAAW,EAAE,EAAE;QACjF,IAAI,CAAC;YACH,MAAM,MAAM,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,EAAE,EAAE,CAAC,CAAC;QACxF,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;QAC/C,CAAC;IACH,CAAC,CAAC;IACF,OAAO;QACL,OAAO,EAAE,IAAI;QACb,KAAK,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE;YACnB,MAAM,KAAK,CAAC,oBAAoB,EAAE,GAAG,EAAE,EAAE,CAAC,CAAC;YAC3C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QAClB,CAAC;QACD,KAAK,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,EAAE,EAAE;YACrB,MAAM,KAAK,CAAC,sBAAsB,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,CAAC,CAAC;QACnD,CAAC;QACD,KAAK,CAAC,KAAK;YACT,OAAO,OAAO,CAAC,IAAI,GAAG,CAAC,EAAE,CAAC;gBACxB,MAAM,GAAG,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC;gBACzB,OAAO,CAAC,KAAK,EAAE,CAAC;gBAChB,MAAM,OAAO,CAAC,UAAU,CACtB,GAAG,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC,CAClF,CAAC;YACJ,CAAC;QACH,CAAC;KACF,CAAC;AACJ,CAAC;AAiBD,uDAAuD;AACvD,MAAM,UAAU,kBAAkB,CAAC,KAAc;IAC/C,IAAI,KAAK,YAAY,oBAAoB;QAAE,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC;IAClE,MAAM,MAAM,GAAI,KAAqC,EAAE,MAAM,CAAC;IAC9D,IAAI,OAAO,MAAM,KAAK,QAAQ,IAAI,MAAM,IAAI,GAAG,IAAI,MAAM,GAAG,GAAG;QAAE,OAAO,KAAK,CAAC;IAC9E,MAAM,IAAI,GAAI,KAAmC,EAAE,IAAI,CAAC;IACxD,OAAO,IAAI,KAAK,mBAAmB,IAAI,IAAI,KAAK,wBAAwB,CAAC;AAC3E,CAAC;AAED,mFAAmF;AACnF,MAAM,CAAC,KAAK,UAAU,WAAW,CAC/B,EAAoB,EACpB,OAAO,GAAwB,EAAE;IAEjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,QAAQ,IAAI,CAAC,CAAC,CAAC;IACpD,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC,CAAC;IACpD,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,OAAO,CAAC,YAAY,IAAI,MAAM,CAAC,CAAC;IAC3D,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,kBAAkB,CAAC;IAC1D,KAAK,IAAI,OAAO,GAAG,CAAC,GAAI,OAAO,EAAE,EAAE,CAAC;QAClC,IAAI,CAAC;YACH,OAAO,MAAM,EAAE,EAAE,CAAC;QACpB,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,IAAI,OAAO,IAAI,QAAQ,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC;gBAAE,MAAM,KAAK,CAAC;YAC1D,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,CAAC;YACvD,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,KAAK,GAAG,CAAC,GAAG,GAAG,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzF,CAAC;IACH,CAAC;AACH,CAAC"}
|