@relaycast/engine 8.10.1 → 8.11.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/kv.d.ts +1 -1
- package/dist/adapters/node/kv.d.ts.map +1 -1
- package/dist/adapters/node/kv.js +9 -4
- package/dist/adapters/node/kv.js.map +1 -1
- package/dist/adapters/node/rate-limit.d.ts.map +1 -1
- package/dist/adapters/node/rate-limit.js +10 -5
- package/dist/adapters/node/rate-limit.js.map +1 -1
- package/dist/db/migrations/0060_durable_task_invocations.sql +7 -0
- package/dist/db/migrations/0061_messages_workspace_length_id_index.sql +7 -0
- package/dist/db/schema.d.ts +51 -1
- package/dist/db/schema.d.ts.map +1 -1
- package/dist/db/schema.js +3 -0
- package/dist/db/schema.js.map +1 -1
- package/dist/engine/action.d.ts +30 -0
- package/dist/engine/action.d.ts.map +1 -1
- package/dist/engine/action.js +16 -1
- package/dist/engine/action.js.map +1 -1
- package/dist/engine/inbox.d.ts.map +1 -1
- package/dist/engine/inbox.js +73 -27
- package/dist/engine/inbox.js.map +1 -1
- package/dist/engine/node.d.ts +10 -0
- package/dist/engine/node.d.ts.map +1 -1
- package/dist/engine/node.js +20 -0
- package/dist/engine/node.js.map +1 -1
- package/dist/engine/nodeProvider.d.ts.map +1 -1
- package/dist/engine/nodeProvider.js +5 -1
- package/dist/engine/nodeProvider.js.map +1 -1
- package/dist/engine/taskInvocation.d.ts +110 -0
- package/dist/engine/taskInvocation.d.ts.map +1 -0
- package/dist/engine/taskInvocation.js +141 -0
- package/dist/engine/taskInvocation.js.map +1 -0
- package/dist/engine/usage.d.ts +17 -8
- package/dist/engine/usage.d.ts.map +1 -1
- package/dist/engine/usage.js +35 -18
- package/dist/engine/usage.js.map +1 -1
- package/dist/index.d.ts +1 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -0
- package/dist/index.js.map +1 -1
- package/dist/lib/throttle.d.ts +20 -0
- package/dist/lib/throttle.d.ts.map +1 -0
- package/dist/lib/throttle.js +28 -0
- package/dist/lib/throttle.js.map +1 -0
- package/dist/middleware/planLimits.d.ts.map +1 -1
- package/dist/middleware/planLimits.js +22 -1
- package/dist/middleware/planLimits.js.map +1 -1
- package/dist/middleware/rateLimit.d.ts.map +1 -1
- package/dist/middleware/rateLimit.js +17 -3
- package/dist/middleware/rateLimit.js.map +1 -1
- package/dist/ports/entitlements.d.ts +8 -0
- package/dist/ports/entitlements.d.ts.map +1 -1
- package/dist/ports/kv.d.ts +7 -1
- package/dist/ports/kv.d.ts.map +1 -1
- package/dist/ports/rate-limit.d.ts +5 -0
- package/dist/ports/rate-limit.d.ts.map +1 -1
- package/dist/providers/static-entitlements.d.ts +4 -2
- package/dist/providers/static-entitlements.d.ts.map +1 -1
- package/dist/providers/static-entitlements.js +8 -4
- package/dist/providers/static-entitlements.js.map +1 -1
- package/dist/routes/workspace.d.ts.map +1 -1
- package/dist/routes/workspace.js +25 -22
- package/dist/routes/workspace.js.map +1 -1
- package/package.json +3 -3
|
@@ -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;
|
|
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
|
@@ -12,6 +12,7 @@ import { runAtomic, runAtomicWrites } from '../ports/database.js';
|
|
|
12
12
|
import { claimSpawnNode, chooseNodeForAction, isNodeLive, releaseNodeCapacity, reserveNodeCapacity } from './placement.js';
|
|
13
13
|
import { DEFAULT_PROVIDER_NAME, capacityProviderName, getProvider, isProviderLive } from './nodeProvider.js';
|
|
14
14
|
import { AGENT_TOKEN_HASH_PATTERN } from '@relaycast/types';
|
|
15
|
+
import { createTaskState, expireTaskInvocation, expireTaskInvocations, taskExecution } from './taskInvocation.js';
|
|
15
16
|
const OPEN_INVOCATION_STATUSES = ['pending', 'dispatched', 'invoked'];
|
|
16
17
|
const REPLAYED_INVOCATION = Symbol('replayed-action-invocation');
|
|
17
18
|
export const ACTION_DISPATCH_TIMEOUT_MS = 30_000;
|
|
@@ -424,6 +425,9 @@ export async function deleteAction(db, workspaceId, name, options = {}) {
|
|
|
424
425
|
return deleted;
|
|
425
426
|
}
|
|
426
427
|
async function createInvocation(db, workspaceId, action, data) {
|
|
428
|
+
if (action?.executionMode === 'task' && !data.invocation_id) {
|
|
429
|
+
throw codedError('Task actions require the idempotent action invoke route', 'task_idempotency_required', 400);
|
|
430
|
+
}
|
|
427
431
|
const invocationId = data.invocation_id ?? `inv_${generateId()}`;
|
|
428
432
|
const expectedActionName = action?.name ?? data.action_name ?? 'spawn';
|
|
429
433
|
const [created] = await db
|
|
@@ -439,6 +443,7 @@ async function createInvocation(db, workspaceId, action, data) {
|
|
|
439
443
|
handlerAgentId: data.handler_agent_id ?? action?.handlerAgentId ?? null,
|
|
440
444
|
handlerNodeId: data.handler_node_id ?? action?.handlerNodeId ?? null,
|
|
441
445
|
input: data.input ?? {},
|
|
446
|
+
taskState: action?.executionMode === 'task' ? createTaskState(data.input ?? {}) : null,
|
|
442
447
|
status: data.status ?? 'pending',
|
|
443
448
|
})
|
|
444
449
|
.onConflictDoNothing()
|
|
@@ -1355,6 +1360,9 @@ export async function invokeAction(db, workspaceId, actionName, data, options =
|
|
|
1355
1360
|
}
|
|
1356
1361
|
}
|
|
1357
1362
|
// Check availableTo access control — deny if caller is absent OR not in the list
|
|
1363
|
+
if (action?.executionMode === 'task' && (!action.handlerNodeId || options.idempotencyKey === undefined)) {
|
|
1364
|
+
throw codedError('Task actions require a node handler and Idempotency-Key', 'task_idempotency_required', 400);
|
|
1365
|
+
}
|
|
1358
1366
|
if (action?.availableTo && action.availableTo.length > 0) {
|
|
1359
1367
|
if (!data.caller_name || !action.availableTo.includes(data.caller_name)) {
|
|
1360
1368
|
const who = data.caller_name ? `Agent "${data.caller_name}"` : 'Caller';
|
|
@@ -1595,6 +1603,7 @@ function publicInvocation(row) {
|
|
|
1595
1603
|
dispatched_at: row.dispatchedAt?.toISOString() ?? null,
|
|
1596
1604
|
created_at: row.createdAt.toISOString(),
|
|
1597
1605
|
completed_at: row.completedAt?.toISOString() ?? null,
|
|
1606
|
+
...(row.taskState ? { task_execution: taskExecution(row) } : {}),
|
|
1598
1607
|
};
|
|
1599
1608
|
}
|
|
1600
1609
|
async function completeGuardedReleaseNodeInvocation(db, workspaceId, nodeId, providerName, invocation, data, deps) {
|
|
@@ -2001,11 +2010,13 @@ async function claimRegisteredActionHandoff(db, args) {
|
|
|
2001
2010
|
actionId: actionInvocations.actionId,
|
|
2002
2011
|
actionName: actionInvocations.actionName,
|
|
2003
2012
|
dispatchAttempts: actionInvocations.dispatchAttempts,
|
|
2013
|
+
taskState: actionInvocations.taskState,
|
|
2004
2014
|
});
|
|
2005
2015
|
return claimed?.actionId ? {
|
|
2006
2016
|
actionId: claimed.actionId,
|
|
2007
2017
|
actionName: claimed.actionName,
|
|
2008
2018
|
dispatchAttempts: claimed.dispatchAttempts,
|
|
2019
|
+
taskState: claimed.taskState,
|
|
2009
2020
|
} : null;
|
|
2010
2021
|
}
|
|
2011
2022
|
async function bindInvocationToRegisteredNodeAction(db, args) {
|
|
@@ -2162,6 +2173,9 @@ async function dispatchNodeInvocation(args) {
|
|
|
2162
2173
|
return { accepted: false, pending: false, sent: false, settled };
|
|
2163
2174
|
}
|
|
2164
2175
|
}
|
|
2176
|
+
if (registeredNodeClaim?.taskState) {
|
|
2177
|
+
frame.task_execution = taskExecution({ id: args.invocationId, ...registeredNodeClaim });
|
|
2178
|
+
}
|
|
2165
2179
|
const sent = args.agent && args.actionId
|
|
2166
2180
|
? await (args.registry.sendAuthorizedActionToProvider?.(args.workspaceId, args.nodeId, args.providerName, frame, {
|
|
2167
2181
|
kind: 'agent-action-v1',
|
|
@@ -2863,6 +2877,7 @@ async function failNeverDispatchedInvocationRows(db, workspaceId, invocationIds,
|
|
|
2863
2877
|
.returning();
|
|
2864
2878
|
}
|
|
2865
2879
|
export async function sweepTimedOutInvocations(db, registry, opts = {}) {
|
|
2880
|
+
await expireTaskInvocations(db);
|
|
2866
2881
|
const sweepOpts = typeof opts === 'number' || opts === null ? {} : opts;
|
|
2867
2882
|
const timeoutMs = typeof opts === 'number' ? opts : sweepOpts.timeoutMs ?? ACTION_DISPATCH_TIMEOUT_MS;
|
|
2868
2883
|
await failUnreachableAgentInvocations(db, registry, sweepOpts.handlerUnreachableTtlMs ?? ACTION_HANDLER_UNREACHABLE_TTL_MS, sweepOpts.completionDeps);
|
|
@@ -2901,6 +2916,6 @@ export async function getInvocation(db, workspaceId, actionName, invocationId) {
|
|
|
2901
2916
|
.where(and(eq(actionInvocations.workspaceId, workspaceId), eq(actionInvocations.id, invocationId), eq(actionInvocations.actionName, actionName)));
|
|
2902
2917
|
if (!row)
|
|
2903
2918
|
return null;
|
|
2904
|
-
return publicInvocation(row);
|
|
2919
|
+
return publicInvocation(await expireTaskInvocation(db, row));
|
|
2905
2920
|
}
|
|
2906
2921
|
//# sourceMappingURL=action.js.map
|