@relaycast/engine 8.9.1 → 8.10.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/dist/adapters/node/index.d.ts.map +1 -1
- package/dist/adapters/node/index.js +6 -0
- package/dist/adapters/node/index.js.map +1 -1
- package/dist/db/migrations/0057_a2a_egress.sql +20 -0
- package/dist/db/migrations/0058_a2a_egress_context.sql +8 -0
- package/dist/db/migrations/0059_a2a_inbound_admission.sql +26 -0
- package/dist/db/schema.d.ts +603 -0
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +34 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/engine/a2a.d.ts +4 -1
- package/dist/engine/a2a.d.ts.map +1 -1
- package/dist/engine/a2a.js +43 -6
- package/dist/engine/a2a.js.map +1 -1
- package/dist/engine/a2aEgress.d.ts +19 -0
- package/dist/engine/a2aEgress.d.ts.map +1 -0
- package/dist/engine/a2aEgress.js +118 -0
- package/dist/engine/a2aEgress.js.map +1 -0
- package/dist/engine/action.d.ts.map +1 -1
- package/dist/engine/action.js +17 -2
- package/dist/engine/action.js.map +1 -1
- package/dist/engine/delivery.d.ts +2 -0
- package/dist/engine/delivery.d.ts.map +1 -1
- package/dist/engine/delivery.js +16 -1
- package/dist/engine/delivery.js.map +1 -1
- package/dist/engine/deliveryWire.d.ts.map +1 -1
- package/dist/engine/deliveryWire.js +1 -1
- package/dist/engine/deliveryWire.js.map +1 -1
- package/dist/engine/deliveryWrites.d.ts +9 -0
- package/dist/engine/deliveryWrites.d.ts.map +1 -1
- package/dist/engine/deliveryWrites.js +70 -19
- package/dist/engine/deliveryWrites.js.map +1 -1
- package/dist/engine/dm.d.ts +47 -8
- package/dist/engine/dm.d.ts.map +1 -1
- package/dist/engine/dm.js +239 -42
- package/dist/engine/dm.js.map +1 -1
- package/dist/engine/groupDm.d.ts +2 -0
- package/dist/engine/groupDm.d.ts.map +1 -1
- package/dist/engine/groupDm.js +2 -1
- package/dist/engine/groupDm.js.map +1 -1
- package/dist/engine/inboundWebhook.d.ts +3 -0
- package/dist/engine/inboundWebhook.d.ts.map +1 -1
- package/dist/engine/inboundWebhook.js +7 -1
- package/dist/engine/inboundWebhook.js.map +1 -1
- package/dist/engine/message.d.ts +2 -0
- package/dist/engine/message.d.ts.map +1 -1
- package/dist/engine/message.js +2 -1
- package/dist/engine/message.js.map +1 -1
- package/dist/engine/node.d.ts +2 -2
- package/dist/engine/thread.d.ts +2 -0
- package/dist/engine/thread.d.ts.map +1 -1
- package/dist/engine/thread.js +3 -1
- package/dist/engine/thread.js.map +1 -1
- package/dist/engine/workspaceDeliveryPolicy.d.ts +91 -0
- package/dist/engine/workspaceDeliveryPolicy.d.ts.map +1 -0
- package/dist/engine/workspaceDeliveryPolicy.js +130 -0
- package/dist/engine/workspaceDeliveryPolicy.js.map +1 -0
- package/dist/engine/workspaceEvents.d.ts +120 -0
- package/dist/engine/workspaceEvents.d.ts.map +1 -1
- package/dist/engine/workspaceEvents.js +8 -10
- package/dist/engine/workspaceEvents.js.map +1 -1
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/httpError.d.ts +1 -1
- package/dist/lib/httpError.d.ts.map +1 -1
- package/dist/lib/httpError.js +2 -0
- package/dist/lib/httpError.js.map +1 -1
- package/dist/lib/httpResponse.d.ts +6 -6
- package/dist/middleware/idempotency.d.ts +15 -10
- package/dist/middleware/idempotency.d.ts.map +1 -1
- package/dist/middleware/idempotency.js +9 -9
- package/dist/middleware/idempotency.js.map +1 -1
- package/dist/ports/database.d.ts +4 -20
- package/dist/ports/database.d.ts.map +1 -1
- package/dist/ports/database.js +28 -7
- package/dist/ports/database.js.map +1 -1
- package/dist/ports/index.d.ts +9 -0
- package/dist/ports/index.d.ts.map +1 -1
- package/dist/ports/workspaceDelivery.d.ts +31 -0
- package/dist/ports/workspaceDelivery.d.ts.map +1 -0
- package/dist/ports/workspaceDelivery.js +2 -0
- package/dist/ports/workspaceDelivery.js.map +1 -0
- package/dist/routes/a2a.d.ts.map +1 -1
- package/dist/routes/a2a.js +162 -26
- package/dist/routes/a2a.js.map +1 -1
- package/dist/routes/delivery.d.ts.map +1 -1
- package/dist/routes/delivery.js +15 -4
- package/dist/routes/delivery.js.map +1 -1
- package/dist/routes/deliveryRouting.d.ts +1 -1
- package/dist/routes/deliveryRouting.d.ts.map +1 -1
- package/dist/routes/deliveryRouting.js +8 -7
- package/dist/routes/deliveryRouting.js.map +1 -1
- package/dist/routes/dm.d.ts.map +1 -1
- package/dist/routes/dm.js +27 -8
- package/dist/routes/dm.js.map +1 -1
- package/dist/routes/fanout.d.ts +1 -1
- package/dist/routes/fanout.d.ts.map +1 -1
- package/dist/routes/fanout.js +2 -2
- package/dist/routes/fanout.js.map +1 -1
- package/dist/routes/groupDm.d.ts.map +1 -1
- package/dist/routes/groupDm.js +3 -2
- package/dist/routes/groupDm.js.map +1 -1
- package/dist/routes/inboundWebhook.d.ts.map +1 -1
- package/dist/routes/inboundWebhook.js +5 -1
- package/dist/routes/inboundWebhook.js.map +1 -1
- package/dist/routes/message.d.ts.map +1 -1
- package/dist/routes/message.js +3 -1
- package/dist/routes/message.js.map +1 -1
- package/dist/routes/relayfileInbound.d.ts.map +1 -1
- package/dist/routes/relayfileInbound.js +9 -3
- package/dist/routes/relayfileInbound.js.map +1 -1
- package/dist/routes/thread.d.ts.map +1 -1
- package/dist/routes/thread.js +3 -1
- package/dist/routes/thread.js.map +1 -1
- package/package.json +5 -4
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
import { and, eq, or, sql, lte, inArray, asc } from 'drizzle-orm';
|
|
2
|
+
import { a2aAgents, a2aEgress, a2aInbound, messages, agents } from '../db/schema.js';
|
|
3
|
+
import { runAtomicWrites } from '../ports/database.js';
|
|
4
|
+
import { randomUuid } from '../lib/crypto.js';
|
|
5
|
+
import { codedError } from '../lib/httpError.js';
|
|
6
|
+
import { sendToExternalAgent } from './a2a.js';
|
|
7
|
+
/** Same finite retry horizon as HTTP idempotency; payloads never dispatch after it. */
|
|
8
|
+
export const A2A_EGRESS_RETRY_WINDOW_MS = 24 * 60 * 60 * 1000;
|
|
9
|
+
const batchLimit = (limit) => Number.isFinite(limit) ? Math.max(1, Math.min(100, Math.floor(limit))) : 20;
|
|
10
|
+
const expired = (intent) => intent.createdAt.getTime() + A2A_EGRESS_RETRY_WINDOW_MS <= Date.now();
|
|
11
|
+
const notRetained = () => codedError('Accepted A2A message is no longer retained', 'a2a_message_not_retained', 410);
|
|
12
|
+
const targetGone = () => codedError('Accepted A2A target no longer registered at its original endpoint', 'a2a_target_gone', 410);
|
|
13
|
+
const windowExpired = () => codedError('Accepted A2A retry window expired', 'a2a_egress_expired', 410);
|
|
14
|
+
async function validateSource(db, intent) {
|
|
15
|
+
if (expired(intent))
|
|
16
|
+
throw windowExpired();
|
|
17
|
+
const [source] = await db.select({ id: messages.id }).from(messages).where(and(eq(messages.id, intent.messageId), eq(messages.workspaceId, intent.workspaceId)));
|
|
18
|
+
if (!source)
|
|
19
|
+
throw notRetained();
|
|
20
|
+
}
|
|
21
|
+
/** Durable admission and a lease exclude concurrent senders. A crash after remote
|
|
22
|
+
* acceptance can replay the same message_id and HTTP Idempotency-Key; receivers
|
|
23
|
+
* must deduplicate them. Arbitrary receivers still have at-least-once delivery.
|
|
24
|
+
*/
|
|
25
|
+
export async function dispatchA2aEgress(db, id) {
|
|
26
|
+
const [existing] = await db.select().from(a2aEgress).where(eq(a2aEgress.id, id));
|
|
27
|
+
if (!existing)
|
|
28
|
+
throw windowExpired();
|
|
29
|
+
if (existing.status === 'failed')
|
|
30
|
+
throw codedError(existing.lastError ?? 'A2A upstream rejected the accepted message', existing.errorCode ?? 'a2a_upstream_rejected', existing.errorStatus ?? 502);
|
|
31
|
+
if (existing.status === 'sent') {
|
|
32
|
+
await validateSource(db, existing);
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const token = randomUuid();
|
|
36
|
+
const [intent] = await db.update(a2aEgress).set({
|
|
37
|
+
status: 'sending', claimToken: token, leaseUntil: new Date(Date.now() + 120_000),
|
|
38
|
+
attempts: sql `${a2aEgress.attempts} + 1`,
|
|
39
|
+
}).where(and(eq(a2aEgress.id, id), or(and(eq(a2aEgress.status, 'pending'), or(sql `${a2aEgress.leaseUntil} IS NULL`, lte(a2aEgress.leaseUntil, new Date()), lte(a2aEgress.createdAt, new Date(Date.now() - A2A_EGRESS_RETRY_WINDOW_MS)), sql `NOT EXISTS (SELECT 1 FROM messages WHERE id = ${a2aEgress.messageId} AND workspace_id = ${a2aEgress.workspaceId})`, sql `NOT EXISTS (SELECT 1 FROM a2a_agents t JOIN agents a ON a.id = t.relay_agent_id AND a.workspace_id = t.workspace_id
|
|
40
|
+
WHERE t.id = ${a2aEgress.targetId} AND t.workspace_id = ${a2aEgress.workspaceId} AND t.external_url = ${a2aEgress.externalUrl})`)), and(eq(a2aEgress.status, 'sending'), lte(a2aEgress.leaseUntil, new Date()))))).returning();
|
|
41
|
+
if (!intent)
|
|
42
|
+
throw codedError('Accepted A2A message is being sent; retry the same key', 'a2a_egress_in_progress', 409);
|
|
43
|
+
try {
|
|
44
|
+
if (!intent.payload)
|
|
45
|
+
throw notRetained();
|
|
46
|
+
await sendToExternalAgent(intent.externalUrl, intent.payload, undefined, async () => {
|
|
47
|
+
// Read one coherent tuple immediately before EACH fetch, including transport
|
|
48
|
+
// retries. Credentials exist only in memory; never pair a rotated URL with
|
|
49
|
+
// the captured endpoint. A live lease also excludes concurrent cleanup.
|
|
50
|
+
const [current] = await db.select({ intent: a2aEgress, source: messages.id, target: a2aAgents, recipient: agents.id })
|
|
51
|
+
.from(a2aEgress)
|
|
52
|
+
.leftJoin(messages, and(eq(messages.id, a2aEgress.messageId), eq(messages.workspaceId, a2aEgress.workspaceId)))
|
|
53
|
+
.leftJoin(a2aAgents, and(eq(a2aAgents.id, a2aEgress.targetId), eq(a2aAgents.workspaceId, a2aEgress.workspaceId)))
|
|
54
|
+
.leftJoin(agents, and(eq(agents.id, a2aAgents.relayAgentId), eq(agents.workspaceId, a2aEgress.workspaceId)))
|
|
55
|
+
.where(and(eq(a2aEgress.id, id), eq(a2aEgress.claimToken, token), eq(a2aEgress.status, 'sending')));
|
|
56
|
+
if (!current || expired(current.intent))
|
|
57
|
+
throw windowExpired();
|
|
58
|
+
if (!current.source)
|
|
59
|
+
throw notRetained();
|
|
60
|
+
if (!current.target || !current.recipient || current.target.externalUrl !== intent.externalUrl)
|
|
61
|
+
throw targetGone();
|
|
62
|
+
return { scheme: current.target.authScheme, credential: current.target.authCredential };
|
|
63
|
+
}, intent.id);
|
|
64
|
+
}
|
|
65
|
+
catch (error) {
|
|
66
|
+
const failure = error;
|
|
67
|
+
const retryable = failure.retryable === true || (failure.retryable !== false && !(failure.status && failure.status >= 400 && failure.status < 500));
|
|
68
|
+
// Upstream error bodies may contain secrets; persist/report only engine text.
|
|
69
|
+
const message = failure.code === 'a2a_message_not_retained' ? notRetained().message
|
|
70
|
+
: failure.code === 'a2a_target_gone' ? targetGone().message
|
|
71
|
+
: failure.code === 'a2a_egress_expired' ? windowExpired().message
|
|
72
|
+
: 'A2A transport failed for the accepted message';
|
|
73
|
+
await db.update(a2aEgress).set({
|
|
74
|
+
status: retryable ? 'pending' : 'failed', claimToken: null,
|
|
75
|
+
leaseUntil: retryable ? new Date(Date.now() + 30_000) : null,
|
|
76
|
+
...(retryable ? {} : { payload: null }),
|
|
77
|
+
lastError: message, errorStatus: failure.status ?? 500, errorCode: failure.code ?? 'internal_error',
|
|
78
|
+
}).where(and(eq(a2aEgress.id, id), eq(a2aEgress.claimToken, token)));
|
|
79
|
+
throw codedError(message, failure.code ?? 'internal_error', failure.status ?? 500);
|
|
80
|
+
}
|
|
81
|
+
await runAtomicWrites(db, tx => [
|
|
82
|
+
tx.update(a2aAgents).set({ messagesSent: sql `${a2aAgents.messagesSent} + 1` })
|
|
83
|
+
.where(and(eq(a2aAgents.id, intent.targetId), sql `EXISTS (SELECT 1 FROM a2a_egress WHERE id = ${id} AND claim_token = ${token} AND status = 'sending')`)),
|
|
84
|
+
tx.update(a2aEgress).set({ status: 'sent', payload: null, claimToken: null, leaseUntil: null, lastError: null, errorStatus: null, errorCode: null })
|
|
85
|
+
.where(and(eq(a2aEgress.id, id), eq(a2aEgress.claimToken, token))),
|
|
86
|
+
], { requireAtomic: true });
|
|
87
|
+
}
|
|
88
|
+
/** Indexed, bounded deletion after the retry horizon. Active transport leases
|
|
89
|
+
* are retained until settlement/lease expiry; cleanup never revokes their claim.
|
|
90
|
+
* After deletion a key is fresh, as with the existing HTTP idempotency contract.
|
|
91
|
+
*/
|
|
92
|
+
export async function cleanupA2aEgress(db, limit = 20) {
|
|
93
|
+
const eligible = and(lte(a2aEgress.createdAt, new Date(Date.now() - A2A_EGRESS_RETRY_WINDOW_MS)), or(sql `${a2aEgress.leaseUntil} IS NULL`, lte(a2aEgress.leaseUntil, new Date()), sql `${a2aEgress.status} != 'sending'`));
|
|
94
|
+
const candidates = db.select({ id: a2aEgress.id }).from(a2aEgress).where(eligible)
|
|
95
|
+
.orderBy(asc(a2aEgress.createdAt), asc(a2aEgress.id)).limit(batchLimit(limit));
|
|
96
|
+
const deleted = await db.delete(a2aEgress).where(inArray(a2aEgress.id, candidates)).returning({ id: a2aEgress.id });
|
|
97
|
+
return deleted.length;
|
|
98
|
+
}
|
|
99
|
+
/** Existing Node/HOST maintenance entrypoint includes bounded retention cleanup. */
|
|
100
|
+
export async function sweepPendingA2aEgress(db, limit = 20) {
|
|
101
|
+
const due = await db.select({ id: a2aEgress.id }).from(a2aEgress).where(and(or(eq(a2aEgress.status, 'pending'), eq(a2aEgress.status, 'sending')), or(sql `${a2aEgress.leaseUntil} IS NULL`, lte(a2aEgress.leaseUntil, new Date())))).limit(batchLimit(limit));
|
|
102
|
+
let failed = 0;
|
|
103
|
+
for (const intent of due) {
|
|
104
|
+
try {
|
|
105
|
+
await dispatchA2aEgress(db, intent.id);
|
|
106
|
+
}
|
|
107
|
+
catch {
|
|
108
|
+
failed++;
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
await cleanupA2aEgress(db, limit);
|
|
112
|
+
const inboundExpired = db.select({ id: a2aInbound.id }).from(a2aInbound)
|
|
113
|
+
.where(lte(a2aInbound.createdAt, new Date(Date.now() - A2A_EGRESS_RETRY_WINDOW_MS)))
|
|
114
|
+
.orderBy(asc(a2aInbound.createdAt), asc(a2aInbound.id)).limit(batchLimit(limit));
|
|
115
|
+
await db.delete(a2aInbound).where(inArray(a2aInbound.id, inboundExpired));
|
|
116
|
+
return { attempted: due.length, failed };
|
|
117
|
+
}
|
|
118
|
+
//# sourceMappingURL=a2aEgress.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"a2aEgress.js","sourceRoot":"","sources":["../../src/engine/a2aEgress.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,aAAa,CAAC;AAClE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACrF,OAAO,EAAE,eAAe,EAAiB,MAAM,sBAAsB,CAAC;AACtE,OAAO,EAAE,UAAU,EAAE,MAAM,kBAAkB,CAAC;AAC9C,OAAO,EAAE,UAAU,EAAE,MAAM,qBAAqB,CAAC;AACjD,OAAO,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAE/C,uFAAuF;AACvF,MAAM,CAAC,MAAM,0BAA0B,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,CAAC;AAC9D,MAAM,UAAU,GAAG,CAAC,KAAa,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClH,MAAM,OAAO,GAAG,CAAC,MAAqC,EAAE,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,0BAA0B,IAAI,IAAI,CAAC,GAAG,EAAE,CAAC;AACjI,MAAM,WAAW,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,4CAA4C,EAAE,0BAA0B,EAAE,GAAG,CAAC,CAAC;AACpH,MAAM,UAAU,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,mEAAmE,EAAE,iBAAiB,EAAE,GAAG,CAAC,CAAC;AACjI,MAAM,aAAa,GAAG,GAAG,EAAE,CAAC,UAAU,CAAC,mCAAmC,EAAE,oBAAoB,EAAE,GAAG,CAAC,CAAC;AAEvG,KAAK,UAAU,cAAc,CAAC,EAAY,EAAE,MAAqC;IAC/E,IAAI,OAAO,CAAC,MAAM,CAAC;QAAE,MAAM,aAAa,EAAE,CAAC;IAC3C,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,KAAK,CAAC,GAAG,CAC5E,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,MAAM,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC,WAAW,CAAC,CAChF,CAAC,CAAC;IACH,IAAI,CAAC,MAAM;QAAE,MAAM,WAAW,EAAE,CAAC;AACnC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,EAAY,EAAE,EAAU;IAC9D,MAAM,CAAC,QAAQ,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,CAAC;IACjF,IAAI,CAAC,QAAQ;QAAE,MAAM,aAAa,EAAE,CAAC;IACrC,IAAI,QAAQ,CAAC,MAAM,KAAK,QAAQ;QAAE,MAAM,UAAU,CAAC,QAAQ,CAAC,SAAS,IAAI,4CAA4C,EAAE,QAAQ,CAAC,SAAS,IAAI,uBAAuB,EAAE,QAAQ,CAAC,WAAW,IAAI,GAAG,CAAC,CAAC;IACnM,IAAI,QAAQ,CAAC,MAAM,KAAK,MAAM,EAAE,CAAC;QAC/B,MAAM,cAAc,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAC;QACnC,OAAO;IACT,CAAC;IACD,MAAM,KAAK,GAAG,UAAU,EAAE,CAAC;IAC3B,MAAM,CAAC,MAAM,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;QAC9C,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,OAAO,CAAC;QAChF,QAAQ,EAAE,GAAG,CAAA,GAAG,SAAS,CAAC,QAAQ,MAAM;KACzC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CACnC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,CACrC,GAAG,CAAA,GAAG,SAAS,CAAC,UAAU,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,EAC3E,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,0BAA0B,CAAC,CAAC,EAC3E,GAAG,CAAA,iDAAiD,SAAS,CAAC,SAAS,uBAAuB,SAAS,CAAC,WAAW,GAAG,EACtH,GAAG,CAAA;uBACc,SAAS,CAAC,QAAQ,yBAAyB,SAAS,CAAC,WAAW,yBAAyB,SAAS,CAAC,WAAW,GAAG,CACnI,CAAC,EACF,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAC5E,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;IAChB,IAAI,CAAC,MAAM;QAAE,MAAM,UAAU,CAAC,wDAAwD,EAAE,wBAAwB,EAAE,GAAG,CAAC,CAAC;IACvH,IAAI,CAAC;QACH,IAAI,CAAC,MAAM,CAAC,OAAO;YAAE,MAAM,WAAW,EAAE,CAAC;QACzC,MAAM,mBAAmB,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,OAAO,EAAE,SAAS,EAAE,KAAK,IAAI,EAAE;YAClF,6EAA6E;YAC7E,2EAA2E;YAC3E,wEAAwE;YACxE,MAAM,CAAC,OAAO,CAAC,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC;iBACnH,IAAI,CAAC,SAAS,CAAC;iBACf,QAAQ,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,CAAC,SAAS,CAAC,EAAE,EAAE,CAAC,QAAQ,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;iBAC9G,QAAQ,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,SAAS,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;iBAChH,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,SAAS,CAAC,YAAY,CAAC,EAAE,EAAE,CAAC,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,WAAW,CAAC,CAAC,CAAC;iBAC3G,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC;YACtG,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,OAAO,CAAC,MAAM,CAAC;gBAAE,MAAM,aAAa,EAAE,CAAC;YAC/D,IAAI,CAAC,OAAO,CAAC,MAAM;gBAAE,MAAM,WAAW,EAAE,CAAC;YACzC,IAAI,CAAC,OAAO,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,SAAS,IAAI,OAAO,CAAC,MAAM,CAAC,WAAW,KAAK,MAAM,CAAC,WAAW;gBAAE,MAAM,UAAU,EAAE,CAAC;YACnH,OAAO,EAAE,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,CAAC,MAAM,CAAC,cAAc,EAAE,CAAC;QAC1F,CAAC,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;IAChB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,OAAO,GAAG,KAAwE,CAAC;QACzF,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,KAAK,IAAI,IAAI,CAAC,OAAO,CAAC,SAAS,KAAK,KAAK,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,MAAM,IAAI,GAAG,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;QACpJ,8EAA8E;QAC9E,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,KAAK,0BAA0B,CAAC,CAAC,CAAC,WAAW,EAAE,CAAC,OAAO;YACjF,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,iBAAiB,CAAC,CAAC,CAAC,UAAU,EAAE,CAAC,OAAO;gBAC3D,CAAC,CAAC,OAAO,CAAC,IAAI,KAAK,oBAAoB,CAAC,CAAC,CAAC,aAAa,EAAE,CAAC,OAAO;oBACjE,CAAC,CAAC,+CAA+C,CAAC;QACpD,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC;YAC7B,MAAM,EAAE,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,QAAQ,EAAE,UAAU,EAAE,IAAI;YAC1D,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,IAAI;YAC5D,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;YACvC,SAAS,EAAE,OAAO,EAAE,WAAW,EAAE,OAAO,CAAC,MAAM,IAAI,GAAG,EAAE,SAAS,EAAE,OAAO,CAAC,IAAI,IAAI,gBAAgB;SACpG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;QACrE,MAAM,UAAU,CAAC,OAAO,EAAE,OAAO,CAAC,IAAI,IAAI,gBAAgB,EAAE,OAAO,CAAC,MAAM,IAAI,GAAG,CAAC,CAAC;IACrF,CAAC;IACD,MAAM,eAAe,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC;QAC9B,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,YAAY,EAAE,GAAG,CAAA,GAAG,SAAS,CAAC,YAAY,MAAM,EAAE,CAAC;aAC3E,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,MAAM,CAAC,QAAQ,CAAC,EAAE,GAAG,CAAA,+CAA+C,EAAE,sBAAsB,KAAK,0BAA0B,CAAC,CAAC;QAC3J,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;aACjJ,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC,CAAC;KACrE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CAAC,EAAY,EAAE,KAAK,GAAG,EAAE;IAC7D,MAAM,QAAQ,GAAG,GAAG,CAClB,GAAG,CAAC,SAAS,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,0BAA0B,CAAC,CAAC,EAC3E,EAAE,CAAC,GAAG,CAAA,GAAG,SAAS,CAAC,UAAU,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,EAAE,GAAG,CAAA,GAAG,SAAS,CAAC,MAAM,eAAe,CAAC,CACvH,CAAC;IACF,MAAM,UAAU,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,QAAQ,CAAC;SAC/E,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACjF,MAAM,OAAO,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,SAAS,CAAC,EAAE,EAAE,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC;IACpH,OAAO,OAAO,CAAC,MAAM,CAAC;AACxB,CAAC;AAED,oFAAoF;AACpF,MAAM,CAAC,KAAK,UAAU,qBAAqB,CAAC,EAAY,EAAE,KAAK,GAAG,EAAE;IAClE,MAAM,GAAG,GAAG,MAAM,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,GAAG,CACzE,EAAE,CAAC,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,EAAE,EAAE,CAAC,SAAS,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EACpE,EAAE,CAAC,GAAG,CAAA,GAAG,SAAS,CAAC,UAAU,UAAU,EAAE,GAAG,CAAC,SAAS,CAAC,UAAU,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC,CAChF,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5B,IAAI,MAAM,GAAG,CAAC,CAAC;IACf,KAAK,MAAM,MAAM,IAAI,GAAG,EAAE,CAAC;QACzB,IAAI,CAAC;YAAC,MAAM,iBAAiB,CAAC,EAAE,EAAE,MAAM,CAAC,EAAE,CAAC,CAAC;QAAC,CAAC;QAAC,MAAM,CAAC;YAAC,MAAM,EAAE,CAAC;QAAC,CAAC;IACrE,CAAC;IACD,MAAM,gBAAgB,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IAClC,MAAM,cAAc,GAAG,EAAE,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC;SACrE,KAAK,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,EAAE,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,GAAG,0BAA0B,CAAC,CAAC,CAAC;SACnF,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;IACnF,MAAM,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,EAAE,cAAc,CAAC,CAAC,CAAC;IAC1E,OAAO,EAAE,SAAS,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,CAAC;AAC3C,CAAC"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/engine/action.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAW,iBAAiB,EAAoE,MAAM,iBAAiB,CAAC;AAQ/H,OAAO,EAIL,KAAK,wBAAwB,EAC9B,MAAM,2BAA2B,CAAC;AACnC,OAAO,KAAK,EAAE,sBAAsB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAMrF,KAAK,EAAE,GAAG,UAAU,CAAC,OAAO,KAAK,CAAC,CAAC;AAEnC,KAAK,aAAa,GAAG,OAAO,iBAAiB,CAAC,YAAY,CAAC;AAC3D,KAAK,sBAAsB,GAAG,IAAI,CAChC,aAAa,EACb,IAAI,GAAG,aAAa,GAAG,UAAU,GAAG,YAAY,GAAG,kBAAkB,GAAG,UAAU,GAAG,OAAO,GAAG,QAAQ,GAAG,kBAAkB,GAAG,yBAAyB,GAAG,iBAAiB,GAAG,kBAAkB,GAAG,kBAAkB,CACvN,CAAC;AAIF,eAAO,MAAM,0BAA0B,QAAS,CAAC;AACjD;;;;;;;GAOG;AACH,eAAO,MAAM,iCAAiC,SAAU,CAAC;AACzD;;;;;;;;;;;GAWG;AACH,eAAO,MAAM,6BAA6B,QAAsB,CAAC;AACjE;;;;;;;;;;GAUG;AACH,eAAO,MAAM,+BAA+B,OAAQ,CAAC;AAIrD,MAAM,WAAW,+BAA+B;IAC9C,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,8DAA8D;IAC9D,uBAAuB,CAAC,EAAE,MAAM,CAAC;IACjC,0DAA0D;IAC1D,yBAAyB,CAAC,EAAE,MAAM,CAAC;IACnC,4DAA4D;IAC5D,2BAA2B,CAAC,EAAE,MAAM,CAAC;IACrC,2EAA2E;IAC3E,cAAc,CAAC,EAAE,wBAAwB,CAAC;CAC3C;AAkPD,wBAAsB,cAAc,CAClC,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE;IACJ,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,YAAY,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACvC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IACxC,YAAY,CAAC,EAAE,MAAM,EAAE,CAAC;CACzB,EACD,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,wBAAwB,CAAA;CAAO;;;;;;;;;;;;;;;GAoJ5D;AAED,wBAAsB,WAAW,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;;;;;;;;;;;;KAuBjF;AAED,wBAAsB,SAAS,CAAC,EAAE,EAAE,EAAE,EAAE,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM;;;;;;;;;;;;UA4B7F;AAED,wBAAsB,YAAY,CAChC,EAAE,EAAE,EAAE,EACN,WAAW,EAAE,MAAM,EACnB,IAAI,EAAE,MAAM,EACZ,OAAO,GAAE;IAAE,cAAc,CAAC,EAAE,wBAAwB,CAAA;CAAO,oBAyB5D;AAuPD,wBAAgB,qBAAqB,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAE7D;
|
|
1
|
+
{"version":3,"file":"action.d.ts","sourceRoot":"","sources":["../../src/engine/action.ts"],"names":[],"mappings":"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"}
|
package/dist/engine/action.js
CHANGED
|
@@ -1036,10 +1036,25 @@ async function dispatchRelease(args) {
|
|
|
1036
1036
|
?? activeBindings.find((binding) => binding.nodeId === implicitDirectNodeId)?.nodeId
|
|
1037
1037
|
?? activeBindings[0]?.nodeId
|
|
1038
1038
|
?? (agent.locationType === 'via_node' ? agent.locationNodeId : null);
|
|
1039
|
-
|
|
1039
|
+
// An implicit direct node has no provider row and the Cloudflare edge adapter
|
|
1040
|
+
// cannot see the DO, so `isHandlerConnectionLive` reports it connected. For a
|
|
1041
|
+
// guarded release the node row is the only liveness signal: a never-attached
|
|
1042
|
+
// ghost (status 'offline', null heartbeat) can never accept the dispatch and
|
|
1043
|
+
// must complete locally; a connected real direct node is 'online' with a fresh
|
|
1044
|
+
// heartbeat and keeps the existing dispatch fence. Scoped to the implicit
|
|
1045
|
+
// direct node so all other node/legacy semantics are unchanged.
|
|
1046
|
+
let hostLive = !!registry
|
|
1040
1047
|
&& !!nodeId
|
|
1041
1048
|
&& await isHandlerConnectionLive(args.db, registry, args.workspaceId, nodeId, agent.providerName);
|
|
1042
|
-
if (
|
|
1049
|
+
if (hostLive && nodeId === implicitDirectNodeId) {
|
|
1050
|
+
const [directNode] = await args.db
|
|
1051
|
+
.select({ status: nodes.status, lastHeartbeatAt: nodes.lastHeartbeatAt })
|
|
1052
|
+
.from(nodes)
|
|
1053
|
+
.where(and(eq(nodes.workspaceId, args.workspaceId), eq(nodes.id, nodeId)));
|
|
1054
|
+
if (!directNode || !isNodeLive(directNode))
|
|
1055
|
+
hostLive = false;
|
|
1056
|
+
}
|
|
1057
|
+
if (!hostLive || !registry) {
|
|
1043
1058
|
return input.delete_agent === true ? completeLocally() : failClosed();
|
|
1044
1059
|
}
|
|
1045
1060
|
// Release is a capacity operation handled by the provider hosting the agent.
|