@blocksdiy/blocks-client-sdk 1.22.0 → 1.23.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/dist/Action.d.ts +11 -0
- package/dist/Action.d.ts.map +1 -1
- package/dist/Action.js +17 -0
- package/dist/ClientSdk.d.ts +33 -0
- package/dist/ClientSdk.d.ts.map +1 -1
- package/dist/ClientSdk.js +32 -0
- package/dist/ReactClientSdk.d.ts +68 -1
- package/dist/ReactClientSdk.d.ts.map +1 -1
- package/dist/ReactClientSdk.jsx +106 -3
- package/package.json +3 -3
package/dist/Action.d.ts
CHANGED
|
@@ -101,5 +101,16 @@ export declare class Action<AC extends ActionConfig = ActionConfig> {
|
|
|
101
101
|
execute(input: AC["inputInstanceType"], { onChunk }?: {
|
|
102
102
|
onChunk?: (chunk: any) => void;
|
|
103
103
|
}): Promise<AC["outputInstanceType"]>;
|
|
104
|
+
/**
|
|
105
|
+
* Starts the action in the background and returns its run id at once, without waiting for the
|
|
106
|
+
* result. Use it for a long-running action (`execute` would wait in the browser for hours and
|
|
107
|
+
* lose the run on reload). Keep the id — e.g. on a row — and check on the run with
|
|
108
|
+
* `client.getActionRunStatus(workflowId)` or the `useActionRun` hook.
|
|
109
|
+
*
|
|
110
|
+
* @throws {ActionRunError} with a structured `code` when the platform refuses, e.g. DURABLE_RUN_LIMIT
|
|
111
|
+
*/
|
|
112
|
+
start(input: AC["inputInstanceType"]): Promise<{
|
|
113
|
+
workflowId: string;
|
|
114
|
+
}>;
|
|
104
115
|
}
|
|
105
116
|
//# sourceMappingURL=Action.d.ts.map
|
package/dist/Action.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"Action.d.ts","sourceRoot":"","sources":["../src/Action.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,YAAY,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE;IAC5G,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,EAAE,CAAC;IACtB,kBAAkB,EAAE,EAAE,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,qBAAa,MAAM,CAAC,EAAE,SAAS,YAAY,GAAG,YAAY;IACxD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAC,CAAyB;IACzC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB;;;OAGG;gBAED,MAAM,EAAE,EAAE,EACV,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAUhG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmDG;IACG,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,OAAO,EAAE,GAAE;QAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;KAAO;
|
|
1
|
+
{"version":3,"file":"Action.d.ts","sourceRoot":"","sources":["../src/Action.ts"],"names":[],"mappings":"AAEA;;;;;;;;;;;;;;GAcG;AACH,MAAM,WAAW,YAAY,CAAC,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE,EAAE,EAAE,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,EAAE;IAC5G,aAAa,EAAE,MAAM,CAAC;IACtB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,iBAAiB,EAAE,EAAE,CAAC;IACtB,kBAAkB,EAAE,EAAE,CAAC;CACxB;AAED;;;;;;;;;GASG;AACH,qBAAa,MAAM,CAAC,EAAE,SAAS,YAAY,GAAG,YAAY;IACxD,OAAO,CAAC,aAAa,CAAS;IAC9B,OAAO,CAAC,KAAK,CAAS;IACtB,OAAO,CAAC,SAAS,CAAC,CAAS;IAC3B,OAAO,CAAC,MAAM,CAAC,CAAS;IACxB,OAAO,CAAC,OAAO,CAAC,CAAyB;IACzC,OAAO,CAAC,KAAK,CAAC,CAAS;IACvB;;;OAGG;gBAED,MAAM,EAAE,EAAE,EACV,EAAE,KAAK,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAA;KAAE;IAUhG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;OAmDG;IACG,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,EAAE,EAAE,OAAO,EAAE,GAAE;QAAE,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,GAAG,KAAK,IAAI,CAAA;KAAO;IAwBlG;;;;;;;OAOG;IACG,KAAK,CAAC,KAAK,EAAE,EAAE,CAAC,mBAAmB,CAAC,GAAG,OAAO,CAAC;QAAE,UAAU,EAAE,MAAM,CAAA;KAAE,CAAC;CAS7E"}
|
package/dist/Action.js
CHANGED
|
@@ -102,4 +102,21 @@ export class Action {
|
|
|
102
102
|
});
|
|
103
103
|
return result;
|
|
104
104
|
}
|
|
105
|
+
/**
|
|
106
|
+
* Starts the action in the background and returns its run id at once, without waiting for the
|
|
107
|
+
* result. Use it for a long-running action (`execute` would wait in the browser for hours and
|
|
108
|
+
* lose the run on reload). Keep the id — e.g. on a row — and check on the run with
|
|
109
|
+
* `client.getActionRunStatus(workflowId)` or the `useActionRun` hook.
|
|
110
|
+
*
|
|
111
|
+
* @throws {ActionRunError} with a structured `code` when the platform refuses, e.g. DURABLE_RUN_LIMIT
|
|
112
|
+
*/
|
|
113
|
+
async start(input) {
|
|
114
|
+
return WorkflowRequest.start({
|
|
115
|
+
workflowBlockId: this.actionBlockId,
|
|
116
|
+
appId: this.appId,
|
|
117
|
+
token: this.token,
|
|
118
|
+
input: { ...input, toolId: this.toolId },
|
|
119
|
+
context: { appId: this.appId, toolSetId: this.toolSetId },
|
|
120
|
+
});
|
|
121
|
+
}
|
|
105
122
|
}
|
package/dist/ClientSdk.d.ts
CHANGED
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { type ActionRunStatus } from "@blocksdiy/blocks-client-api/workflowService";
|
|
1
2
|
import { Action, type ActionConfig } from "./Action.js";
|
|
2
3
|
import { Agent, type AgentConfig } from "./Agent.js";
|
|
3
4
|
import { AgentChat, AgentChatConfig } from "./AgentChat.js";
|
|
@@ -140,6 +141,38 @@ export declare class ClientSdk {
|
|
|
140
141
|
* ```
|
|
141
142
|
*/
|
|
142
143
|
action<AC extends ActionConfig = ActionConfig>(actionConfig: AC): Action<AC>;
|
|
144
|
+
/**
|
|
145
|
+
* The state of a run started with `action(...).start(...)`: `status` (RUNNING / COMPLETED /
|
|
146
|
+
* FAILED / CANCELLED), loop `progress`, `awaitingRetry` while the run is paused after a failure, `paused`, and
|
|
147
|
+
* `pausable` (false while something waits synchronously on the run).
|
|
148
|
+
*/
|
|
149
|
+
getActionRunStatus(workflowId: string): Promise<ActionRunStatus>;
|
|
150
|
+
/** Stops a long-running run: no new steps start; steps already running finish. */
|
|
151
|
+
cancelActionRun(workflowId: string): Promise<{
|
|
152
|
+
workflowId: string;
|
|
153
|
+
status: string;
|
|
154
|
+
}>;
|
|
155
|
+
/**
|
|
156
|
+
* Pauses a long-running run: no new steps start until `resumeActionRun`; what is running
|
|
157
|
+
* finishes, and nothing fails. Throws an `ActionRunError` with code RUN_NOT_RUNNING once the
|
|
158
|
+
* run has ended, RUN_NOT_PAUSABLE when something is waiting synchronously on it,
|
|
159
|
+
* RUN_NOT_CONTROLLABLE for a run started before run control existed.
|
|
160
|
+
*/
|
|
161
|
+
pauseActionRun(workflowId: string): Promise<{
|
|
162
|
+
workflowId: string;
|
|
163
|
+
status: string;
|
|
164
|
+
}>;
|
|
165
|
+
/**
|
|
166
|
+
* Resumes a paused long-running run — paused on request (`paused`) or after a failure (its
|
|
167
|
+
* status lists `awaitingRetry`): failed steps and loop items run again, what succeeded stays
|
|
168
|
+
* done. Throws an `ActionRunError` with code RUN_NOT_RESUMABLE once the run has ended,
|
|
169
|
+
* NOTHING_TO_RESUME when it isn't paused, RUN_NOT_CONTROLLABLE for a run started before run
|
|
170
|
+
* control existed.
|
|
171
|
+
*/
|
|
172
|
+
resumeActionRun(workflowId: string): Promise<{
|
|
173
|
+
workflowId: string;
|
|
174
|
+
retried: import("@blocksdiy/blocks-client-api").ActionRunWaitingEntry[];
|
|
175
|
+
}>;
|
|
143
176
|
/**
|
|
144
177
|
* Gets or creates a Page instance for the specified page configuration
|
|
145
178
|
*
|
package/dist/ClientSdk.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ClientSdk.d.ts","sourceRoot":"","sources":["../src/ClientSdk.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ClientSdk.d.ts","sourceRoot":"","sources":["../src/ClientSdk.ts"],"names":[],"mappings":"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"}
|
package/dist/ClientSdk.js
CHANGED
|
@@ -2,6 +2,7 @@ import { DataApiService } from "@blocksdiy/blocks-client-api";
|
|
|
2
2
|
import { AppVersionService } from "@blocksdiy/blocks-client-api/appVersionService";
|
|
3
3
|
import { BlocksApiService } from "@blocksdiy/blocks-client-api/blocksStoreService";
|
|
4
4
|
import { getGoogleBaseUrl, getHost } from "@blocksdiy/blocks-client-api/envService";
|
|
5
|
+
import { WorkflowRequest } from "@blocksdiy/blocks-client-api/workflowService";
|
|
5
6
|
import { Action } from "./Action.js";
|
|
6
7
|
import { Agent } from "./Agent.js";
|
|
7
8
|
import { AgentChat } from "./AgentChat.js";
|
|
@@ -148,6 +149,37 @@ export class ClientSdk {
|
|
|
148
149
|
}
|
|
149
150
|
return this.actions.get(key);
|
|
150
151
|
}
|
|
152
|
+
/**
|
|
153
|
+
* The state of a run started with `action(...).start(...)`: `status` (RUNNING / COMPLETED /
|
|
154
|
+
* FAILED / CANCELLED), loop `progress`, `awaitingRetry` while the run is paused after a failure, `paused`, and
|
|
155
|
+
* `pausable` (false while something waits synchronously on the run).
|
|
156
|
+
*/
|
|
157
|
+
getActionRunStatus(workflowId) {
|
|
158
|
+
return WorkflowRequest.getRunStatus({ appId: this.appId, token: this.token, workflowId });
|
|
159
|
+
}
|
|
160
|
+
/** Stops a long-running run: no new steps start; steps already running finish. */
|
|
161
|
+
cancelActionRun(workflowId) {
|
|
162
|
+
return WorkflowRequest.cancelRun({ appId: this.appId, token: this.token, workflowId });
|
|
163
|
+
}
|
|
164
|
+
/**
|
|
165
|
+
* Pauses a long-running run: no new steps start until `resumeActionRun`; what is running
|
|
166
|
+
* finishes, and nothing fails. Throws an `ActionRunError` with code RUN_NOT_RUNNING once the
|
|
167
|
+
* run has ended, RUN_NOT_PAUSABLE when something is waiting synchronously on it,
|
|
168
|
+
* RUN_NOT_CONTROLLABLE for a run started before run control existed.
|
|
169
|
+
*/
|
|
170
|
+
pauseActionRun(workflowId) {
|
|
171
|
+
return WorkflowRequest.pauseRun({ appId: this.appId, token: this.token, workflowId });
|
|
172
|
+
}
|
|
173
|
+
/**
|
|
174
|
+
* Resumes a paused long-running run — paused on request (`paused`) or after a failure (its
|
|
175
|
+
* status lists `awaitingRetry`): failed steps and loop items run again, what succeeded stays
|
|
176
|
+
* done. Throws an `ActionRunError` with code RUN_NOT_RESUMABLE once the run has ended,
|
|
177
|
+
* NOTHING_TO_RESUME when it isn't paused, RUN_NOT_CONTROLLABLE for a run started before run
|
|
178
|
+
* control existed.
|
|
179
|
+
*/
|
|
180
|
+
resumeActionRun(workflowId) {
|
|
181
|
+
return WorkflowRequest.resumeRun({ appId: this.appId, token: this.token, workflowId });
|
|
182
|
+
}
|
|
151
183
|
/**
|
|
152
184
|
* Gets or creates a Page instance for the specified page configuration
|
|
153
185
|
*
|
package/dist/ReactClientSdk.d.ts
CHANGED
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
import { ActionRunError } from "@blocksdiy/blocks-client-api/errors";
|
|
2
|
+
import { type ActionRunStatus, type ActionRunWaitingEntry } from "@blocksdiy/blocks-client-api/workflowService";
|
|
1
3
|
import { type AgentContext, type AgentContextShare, type AgentScreenRead } from "@blocksdiy/react-common/agent-threads";
|
|
2
4
|
import type { ActionConfig } from "./Action.js";
|
|
3
5
|
import type { AgentConfig } from "./Agent.js";
|
|
@@ -463,12 +465,15 @@ export declare const useEntityDeleteMany: <EC extends EntityConfig = EntityConfi
|
|
|
463
465
|
* @param {AC} actionConfig - Configuration for the action
|
|
464
466
|
* @returns {Object} Action execution object with functions, state, and results
|
|
465
467
|
* @returns {Function} returns.executeFunction - Function to execute the action with inputs
|
|
468
|
+
* @returns {Function} returns.executeBackgroundRunFunction - Starts the action on the server and resolves with `{ runId }` as soon as the run is accepted; the run keeps going after a reload or unmount. Store the id (e.g. on a row) and follow it with `useActionRun`. Rejects with an `ActionRunError` (branch on `code`, e.g. DURABLE_RUN_LIMIT).
|
|
466
469
|
* @returns {AC["outputInstanceType"]} returns.result - Final result after action completes
|
|
467
470
|
* @returns {AC["outputInstanceType"]} returns.streamResult - Incrementally updated result during streaming
|
|
468
471
|
* @returns {boolean} returns.isLoading - Whether the action is currently executing
|
|
469
472
|
* @returns {boolean} returns.isDone - Whether the action has completed
|
|
470
473
|
* @returns {Error | null} returns.error - Any error that occurred during execution
|
|
471
|
-
* @returns {
|
|
474
|
+
* @returns {boolean} returns.isStartingBackgroundRun - Whether `executeBackgroundRunFunction` is waiting for the run to be accepted (not for it to finish)
|
|
475
|
+
* @returns {Error | null} returns.backgroundRunError - The error of the last `executeBackgroundRunFunction` call
|
|
476
|
+
* @returns {Function} returns.clear - Function to clear result, streamResult and both errors
|
|
472
477
|
* @example
|
|
473
478
|
* ```tsx
|
|
474
479
|
* import { ExportDataAction, ProcessPaymentAction } from '@/product-types';
|
|
@@ -548,13 +553,75 @@ export declare const useEntityDeleteMany: <EC extends EntityConfig = EntityConfi
|
|
|
548
553
|
*/
|
|
549
554
|
export declare const useExecuteAction: <AC extends ActionConfig = ActionConfig>(actionConfig: AC) => {
|
|
550
555
|
executeFunction: import("@tanstack/react-query").UseMutateAsyncFunction<AC["outputInstanceType"], Error, AC["inputInstanceType"], unknown>;
|
|
556
|
+
executeBackgroundRunFunction: import("@tanstack/react-query").UseMutateAsyncFunction<{
|
|
557
|
+
runId: string;
|
|
558
|
+
}, Error, AC["inputInstanceType"], unknown>;
|
|
551
559
|
result: AC["outputInstanceType"] | undefined;
|
|
552
560
|
streamResult: AC["outputInstanceType"] | undefined;
|
|
553
561
|
isLoading: boolean;
|
|
554
562
|
isDone: boolean;
|
|
555
563
|
error: Error | null;
|
|
564
|
+
isStartingBackgroundRun: boolean;
|
|
565
|
+
backgroundRunError: Error | null;
|
|
556
566
|
clear: () => void;
|
|
557
567
|
};
|
|
568
|
+
export { ActionRunError };
|
|
569
|
+
export type { ActionRunStatus, ActionRunWaitingEntry };
|
|
570
|
+
/**
|
|
571
|
+
* Hook to follow a run started with `useExecuteAction`'s `executeBackgroundRunFunction` (or by a
|
|
572
|
+
* code action): its `status`, loop `progress`, whether it waits for `resume` (`canResume`: paused
|
|
573
|
+
* by `pause`, or after a failure — then `awaitingRetry` lists what failed) — polled until the run
|
|
574
|
+
* ends — plus `pause`, `resume` and `cancel`. Pass `undefined` until there is a run.
|
|
575
|
+
*
|
|
576
|
+
* Errors from `pause` / `resume` / `cancel` are `ActionRunError`s: branch on `error.code`
|
|
577
|
+
* (RUN_NOT_RESUMABLE, NOTHING_TO_RESUME, RUN_NOT_FOUND, …), never on the message.
|
|
578
|
+
*
|
|
579
|
+
* @example
|
|
580
|
+
* ```tsx
|
|
581
|
+
* const { status, progress, awaitingRetry, canPause, canResume, pause, resume, cancel } = useActionRun(run.runId);
|
|
582
|
+
* {canPause && <Button onClick={() => pause()}>Pause</Button>}
|
|
583
|
+
* {canResume && <Button onClick={() => resume()}>Resume</Button>}
|
|
584
|
+
* ```
|
|
585
|
+
*/
|
|
586
|
+
export declare const useActionRun: (runId: string | undefined | null) => {
|
|
587
|
+
status: string | undefined;
|
|
588
|
+
progress: {
|
|
589
|
+
loops: {
|
|
590
|
+
loopKey: string;
|
|
591
|
+
blockId: string;
|
|
592
|
+
total: number;
|
|
593
|
+
succeeded: number;
|
|
594
|
+
failed: number;
|
|
595
|
+
inFlight: number;
|
|
596
|
+
}[];
|
|
597
|
+
} | undefined;
|
|
598
|
+
awaitingRetry: ActionRunWaitingEntry[];
|
|
599
|
+
/** Paused by a `pause()` call, until `resume()`. A step already running can still fail meanwhile, so `awaitingRetry` alone can't tell this apart. */
|
|
600
|
+
isManuallyPaused: boolean;
|
|
601
|
+
/** The run waits for `resume()`: paused by `pause()`, or after a failure (then `awaitingRetry` lists it). Show the Resume button on this. */
|
|
602
|
+
canResume: boolean;
|
|
603
|
+
/** `pause` would be accepted: the run is running, not already paused, and nothing waits on it synchronously. */
|
|
604
|
+
canPause: boolean;
|
|
605
|
+
/** The run has ended (completed, failed or cancelled); polling has stopped. */
|
|
606
|
+
isDone: boolean;
|
|
607
|
+
isLoading: boolean;
|
|
608
|
+
error: Error | null;
|
|
609
|
+
cancel: import("@tanstack/react-query").UseMutateAsyncFunction<{
|
|
610
|
+
workflowId: string;
|
|
611
|
+
status: string;
|
|
612
|
+
}, Error, void, unknown>;
|
|
613
|
+
isCancelling: boolean;
|
|
614
|
+
pause: import("@tanstack/react-query").UseMutateAsyncFunction<{
|
|
615
|
+
workflowId: string;
|
|
616
|
+
status: string;
|
|
617
|
+
}, Error, void, unknown>;
|
|
618
|
+
isPausing: boolean;
|
|
619
|
+
resume: import("@tanstack/react-query").UseMutateAsyncFunction<{
|
|
620
|
+
workflowId: string;
|
|
621
|
+
retried: ActionRunWaitingEntry[];
|
|
622
|
+
}, Error, void, unknown>;
|
|
623
|
+
isResuming: boolean;
|
|
624
|
+
};
|
|
558
625
|
/**
|
|
559
626
|
* Hook to get an AgentChat instance
|
|
560
627
|
*
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ReactClientSdk.d.ts","sourceRoot":"","sources":["../src/ReactClientSdk.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"ReactClientSdk.d.ts","sourceRoot":"","sources":["../src/ReactClientSdk.tsx"],"names":[],"mappings":"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"}
|
package/dist/ReactClientSdk.jsx
CHANGED
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { AppVersionService } from "@blocksdiy/blocks-client-api/appVersionService";
|
|
2
|
-
import { FatalAppError } from "@blocksdiy/blocks-client-api/errors";
|
|
2
|
+
import { ActionRunError, FatalAppError } from "@blocksdiy/blocks-client-api/errors";
|
|
3
3
|
import { useWebsockets, useWebsocketsAppSubscribe } from "@blocksdiy/blocks-client-api/websocketService";
|
|
4
4
|
import { websocketsService } from "@blocksdiy/blocks-client-api/websocketService";
|
|
5
|
+
import { isTerminalWorkflowStatus, } from "@blocksdiy/blocks-client-api/workflowService";
|
|
5
6
|
import { createAgentContextStore, useAgentContextRegistration, useAgentContextValues, } from "@blocksdiy/react-common/agent-threads";
|
|
6
7
|
import { useAiStreamChunks } from "@blocksdiy/react-common/useAiStreamChunks";
|
|
7
8
|
import { QueryClient, QueryClientProvider, useInfiniteQuery, useMutation, useQuery, useQueryClient, } from "@tanstack/react-query";
|
|
@@ -818,12 +819,15 @@ export const useEntityDeleteMany = (entityConfig) => {
|
|
|
818
819
|
* @param {AC} actionConfig - Configuration for the action
|
|
819
820
|
* @returns {Object} Action execution object with functions, state, and results
|
|
820
821
|
* @returns {Function} returns.executeFunction - Function to execute the action with inputs
|
|
822
|
+
* @returns {Function} returns.executeBackgroundRunFunction - Starts the action on the server and resolves with `{ runId }` as soon as the run is accepted; the run keeps going after a reload or unmount. Store the id (e.g. on a row) and follow it with `useActionRun`. Rejects with an `ActionRunError` (branch on `code`, e.g. DURABLE_RUN_LIMIT).
|
|
821
823
|
* @returns {AC["outputInstanceType"]} returns.result - Final result after action completes
|
|
822
824
|
* @returns {AC["outputInstanceType"]} returns.streamResult - Incrementally updated result during streaming
|
|
823
825
|
* @returns {boolean} returns.isLoading - Whether the action is currently executing
|
|
824
826
|
* @returns {boolean} returns.isDone - Whether the action has completed
|
|
825
827
|
* @returns {Error | null} returns.error - Any error that occurred during execution
|
|
826
|
-
* @returns {
|
|
828
|
+
* @returns {boolean} returns.isStartingBackgroundRun - Whether `executeBackgroundRunFunction` is waiting for the run to be accepted (not for it to finish)
|
|
829
|
+
* @returns {Error | null} returns.backgroundRunError - The error of the last `executeBackgroundRunFunction` call
|
|
830
|
+
* @returns {Function} returns.clear - Function to clear result, streamResult and both errors
|
|
827
831
|
* @example
|
|
828
832
|
* ```tsx
|
|
829
833
|
* import { ExportDataAction, ProcessPaymentAction } from '@/product-types';
|
|
@@ -943,14 +947,113 @@ export const useExecuteAction = (actionConfig) => {
|
|
|
943
947
|
setIsDone(true);
|
|
944
948
|
},
|
|
945
949
|
});
|
|
950
|
+
// Starts the run and resolves with its id; the run carries on server-side. Its state is kept
|
|
951
|
+
// apart on purpose: result, streamResult, isDone, isLoading and error describe executeFunction.
|
|
952
|
+
// Same rate-limit budget: a start loop is costlier than an execute loop (a run can last hours).
|
|
953
|
+
const { mutateAsync: executeBackgroundRunFunction, isPending: isStartingBackgroundRun, error: backgroundRunError, reset: resetBackgroundRun, } = useMutation({
|
|
954
|
+
mutationFn: async (inputs) => {
|
|
955
|
+
validateExceededMaxCount(inputs);
|
|
956
|
+
const { workflowId } = await client.action(actionConfig).start(inputs);
|
|
957
|
+
return { runId: workflowId };
|
|
958
|
+
},
|
|
959
|
+
});
|
|
946
960
|
if (error instanceof FatalAppError) {
|
|
947
961
|
throw error;
|
|
948
962
|
}
|
|
963
|
+
if (backgroundRunError instanceof FatalAppError) {
|
|
964
|
+
throw backgroundRunError;
|
|
965
|
+
}
|
|
949
966
|
const clear = useCallback(() => {
|
|
950
967
|
reset();
|
|
968
|
+
resetBackgroundRun();
|
|
951
969
|
setStreamResult(undefined);
|
|
952
970
|
}, []);
|
|
953
|
-
return {
|
|
971
|
+
return {
|
|
972
|
+
executeFunction,
|
|
973
|
+
executeBackgroundRunFunction,
|
|
974
|
+
result,
|
|
975
|
+
streamResult,
|
|
976
|
+
isLoading,
|
|
977
|
+
isDone,
|
|
978
|
+
error,
|
|
979
|
+
isStartingBackgroundRun,
|
|
980
|
+
backgroundRunError,
|
|
981
|
+
clear,
|
|
982
|
+
};
|
|
983
|
+
};
|
|
984
|
+
export { ActionRunError };
|
|
985
|
+
/** How often `useActionRun` re-reads a run that hasn't ended. */
|
|
986
|
+
const ACTION_RUN_POLL_MS = 5000;
|
|
987
|
+
/**
|
|
988
|
+
* Hook to follow a run started with `useExecuteAction`'s `executeBackgroundRunFunction` (or by a
|
|
989
|
+
* code action): its `status`, loop `progress`, whether it waits for `resume` (`canResume`: paused
|
|
990
|
+
* by `pause`, or after a failure — then `awaitingRetry` lists what failed) — polled until the run
|
|
991
|
+
* ends — plus `pause`, `resume` and `cancel`. Pass `undefined` until there is a run.
|
|
992
|
+
*
|
|
993
|
+
* Errors from `pause` / `resume` / `cancel` are `ActionRunError`s: branch on `error.code`
|
|
994
|
+
* (RUN_NOT_RESUMABLE, NOTHING_TO_RESUME, RUN_NOT_FOUND, …), never on the message.
|
|
995
|
+
*
|
|
996
|
+
* @example
|
|
997
|
+
* ```tsx
|
|
998
|
+
* const { status, progress, awaitingRetry, canPause, canResume, pause, resume, cancel } = useActionRun(run.runId);
|
|
999
|
+
* {canPause && <Button onClick={() => pause()}>Pause</Button>}
|
|
1000
|
+
* {canResume && <Button onClick={() => resume()}>Resume</Button>}
|
|
1001
|
+
* ```
|
|
1002
|
+
*/
|
|
1003
|
+
export const useActionRun = (runId) => {
|
|
1004
|
+
const client = useClient();
|
|
1005
|
+
const queryClient = useQueryClient();
|
|
1006
|
+
const queryKey = ["actionRun", client.appId, runId];
|
|
1007
|
+
// An ended run never changes again, so nothing re-reads it (a status read of a closed
|
|
1008
|
+
// long-running run replays its history on a worker).
|
|
1009
|
+
const stillRunning = (query) => !isTerminalWorkflowStatus(query.state.data?.status);
|
|
1010
|
+
const { data, isLoading, error } = useQuery({
|
|
1011
|
+
queryKey,
|
|
1012
|
+
queryFn: () => client.getActionRunStatus(runId),
|
|
1013
|
+
enabled: !!runId,
|
|
1014
|
+
refetchInterval: (query) => (stillRunning(query) ? ACTION_RUN_POLL_MS : false),
|
|
1015
|
+
refetchOnWindowFocus: stillRunning,
|
|
1016
|
+
refetchOnReconnect: stillRunning,
|
|
1017
|
+
refetchOnMount: stillRunning,
|
|
1018
|
+
});
|
|
1019
|
+
// Read the run again right after a control call, so the UI doesn't wait for the next poll.
|
|
1020
|
+
const refresh = () => queryClient.invalidateQueries({ queryKey });
|
|
1021
|
+
const cancelMutation = useMutation({
|
|
1022
|
+
mutationFn: () => client.cancelActionRun(runId),
|
|
1023
|
+
onSettled: refresh,
|
|
1024
|
+
});
|
|
1025
|
+
const pauseMutation = useMutation({
|
|
1026
|
+
mutationFn: () => client.pauseActionRun(runId),
|
|
1027
|
+
onSettled: refresh,
|
|
1028
|
+
});
|
|
1029
|
+
const resumeMutation = useMutation({
|
|
1030
|
+
mutationFn: () => client.resumeActionRun(runId),
|
|
1031
|
+
onSettled: refresh,
|
|
1032
|
+
});
|
|
1033
|
+
const awaitingRetry = data?.awaitingRetry ?? [];
|
|
1034
|
+
const isManuallyPaused = data?.paused === true;
|
|
1035
|
+
const canResume = isManuallyPaused || awaitingRetry.length > 0;
|
|
1036
|
+
return {
|
|
1037
|
+
status: data?.status,
|
|
1038
|
+
progress: data?.progress,
|
|
1039
|
+
awaitingRetry,
|
|
1040
|
+
/** Paused by a `pause()` call, until `resume()`. A step already running can still fail meanwhile, so `awaitingRetry` alone can't tell this apart. */
|
|
1041
|
+
isManuallyPaused,
|
|
1042
|
+
/** The run waits for `resume()`: paused by `pause()`, or after a failure (then `awaitingRetry` lists it). Show the Resume button on this. */
|
|
1043
|
+
canResume,
|
|
1044
|
+
/** `pause` would be accepted: the run is running, not already paused, and nothing waits on it synchronously. */
|
|
1045
|
+
canPause: data?.status === "RUNNING" && data?.pausable !== false && !canResume,
|
|
1046
|
+
/** The run has ended (completed, failed or cancelled); polling has stopped. */
|
|
1047
|
+
isDone: isTerminalWorkflowStatus(data?.status),
|
|
1048
|
+
isLoading,
|
|
1049
|
+
error,
|
|
1050
|
+
cancel: cancelMutation.mutateAsync,
|
|
1051
|
+
isCancelling: cancelMutation.isPending,
|
|
1052
|
+
pause: pauseMutation.mutateAsync,
|
|
1053
|
+
isPausing: pauseMutation.isPending,
|
|
1054
|
+
resume: resumeMutation.mutateAsync,
|
|
1055
|
+
isResuming: resumeMutation.isPending,
|
|
1056
|
+
};
|
|
954
1057
|
};
|
|
955
1058
|
/**
|
|
956
1059
|
* Hook to get an AgentChat instance
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@blocksdiy/blocks-client-sdk",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.23.0",
|
|
4
4
|
"type": "module",
|
|
5
5
|
"description": "Blocks client sdk",
|
|
6
6
|
"keywords": [],
|
|
@@ -46,8 +46,8 @@
|
|
|
46
46
|
]
|
|
47
47
|
},
|
|
48
48
|
"dependencies": {
|
|
49
|
-
"@blocksdiy/blocks-client-api": "1.
|
|
50
|
-
"@blocksdiy/react-common": "1.61.
|
|
49
|
+
"@blocksdiy/blocks-client-api": "1.28.0",
|
|
50
|
+
"@blocksdiy/react-common": "1.61.1",
|
|
51
51
|
"@tanstack/react-query": "^5.101.0"
|
|
52
52
|
},
|
|
53
53
|
"devDependencies": {
|