@workflow/core 5.0.0-beta.30 → 5.0.0-beta.31
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/attribute-changes.js +2 -2
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -2
- package/dist/runtime/start.d.ts +1 -1
- package/dist/runtime/start.js +1 -1
- package/dist/runtime/step-executor.js +2 -2
- package/dist/runtime/step-latency.d.ts +1 -1
- package/dist/runtime/step-latency.js +2 -2
- package/dist/runtime/suspension-handler.js +2 -2
- package/dist/set-attributes.d.ts +12 -7
- package/dist/set-attributes.d.ts.map +1 -1
- package/dist/set-attributes.js +12 -7
- package/dist/step/context-storage.d.ts +1 -1
- package/dist/step/context-storage.js +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +2 -2
- package/dist/workflow/index.d.ts +1 -1
- package/dist/workflow/index.d.ts.map +1 -1
- package/dist/workflow/index.js +2 -2
- package/dist/workflow/set-attributes.d.ts +20 -16
- package/dist/workflow/set-attributes.d.ts.map +1 -1
- package/dist/workflow/set-attributes.js +19 -19
- package/docs/api-reference/index.mdx +2 -2
- package/docs/api-reference/{experimental-set-attributes.mdx → set-attributes.mdx} +14 -14
- package/package.json +4 -4
|
@@ -4,11 +4,6 @@ import { WORKFLOW_SET_ATTRIBUTES } from '../symbols.js';
|
|
|
4
4
|
/**
|
|
5
5
|
* Attach plaintext string key/value metadata to the current workflow run.
|
|
6
6
|
*
|
|
7
|
-
* **EXPERIMENTAL.** The `experimental_` prefix is deliberate — the
|
|
8
|
-
* shape, semantics, and dispatch path are likely to change before this
|
|
9
|
-
* is renamed to a stable export. Use only when you can absorb a
|
|
10
|
-
* breaking rename later.
|
|
11
|
-
*
|
|
12
7
|
* Callable only from a workflow body (`'use workflow'`). The call is
|
|
13
8
|
* dispatched as a native `attr_set` event and materialized on the run.
|
|
14
9
|
*
|
|
@@ -22,44 +17,49 @@ import { WORKFLOW_SET_ATTRIBUTES } from '../symbols.js';
|
|
|
22
17
|
* trying to write a `$`-prefixed key throws `FatalError`. If you are a
|
|
23
18
|
* framework author and need to set a reserved key, pass
|
|
24
19
|
* `{ allowReservedAttributes: true }` as the second argument — see
|
|
25
|
-
* `
|
|
20
|
+
* `SetAttributesOptions` for the trade-offs.
|
|
26
21
|
*
|
|
27
|
-
* **WARNING**:
|
|
28
|
-
* `Promise.all([
|
|
22
|
+
* **WARNING**: Calling e.g.
|
|
23
|
+
* `Promise.all([setAttributes({ a: '1' }), setAttributes({ a: '2' })])`
|
|
29
24
|
* is not guaranteed to be ordered consistently, but the equivalent
|
|
30
25
|
* sequential `.then()` chain is.
|
|
31
26
|
*
|
|
32
27
|
* @example
|
|
33
28
|
* ```ts
|
|
34
|
-
* import {
|
|
29
|
+
* import { setAttributes } from 'workflow';
|
|
35
30
|
*
|
|
36
31
|
* export async function myWorkflow() {
|
|
37
32
|
* 'use workflow';
|
|
38
|
-
* await
|
|
33
|
+
* await setAttributes({ phase: 'init' });
|
|
39
34
|
* // ... work ...
|
|
40
|
-
* await
|
|
41
|
-
* await
|
|
35
|
+
* await setAttributes({ phase: 'done', orderId: 'ord_123' });
|
|
36
|
+
* await setAttributes({ orderId: undefined }); // remove
|
|
42
37
|
* }
|
|
43
38
|
* ```
|
|
44
39
|
*
|
|
45
40
|
* @example Framework / library code writing into the reserved namespace.
|
|
46
41
|
* ```ts
|
|
47
|
-
* await
|
|
42
|
+
* await setAttributes(
|
|
48
43
|
* { '$agent.kind': 'durable-agent' },
|
|
49
44
|
* { allowReservedAttributes: true }
|
|
50
45
|
* );
|
|
51
46
|
* ```
|
|
52
47
|
*/
|
|
53
|
-
export async function
|
|
48
|
+
export async function setAttributes(attrs, options = {}) {
|
|
54
49
|
const changes = normalizeAttributeChanges(attrs, options);
|
|
55
50
|
if (changes.length === 0)
|
|
56
51
|
return;
|
|
57
52
|
const allowReservedAttributes = options.allowReservedAttributes === true;
|
|
58
|
-
const
|
|
59
|
-
if (!
|
|
60
|
-
throw new FatalError('
|
|
53
|
+
const dispatchSetAttributes = globalThis[WORKFLOW_SET_ATTRIBUTES];
|
|
54
|
+
if (!dispatchSetAttributes) {
|
|
55
|
+
throw new FatalError('setAttributes() called outside a workflow runtime context. ' +
|
|
61
56
|
'It must be called from within a workflow body (`use workflow`).');
|
|
62
57
|
}
|
|
63
|
-
await
|
|
58
|
+
await dispatchSetAttributes(changes, allowReservedAttributes ? { allowReservedAttributes: true } : {});
|
|
64
59
|
}
|
|
65
|
-
|
|
60
|
+
/**
|
|
61
|
+
* @deprecated The feature is no longer experimental — use
|
|
62
|
+
* {@link setAttributes} instead.
|
|
63
|
+
*/
|
|
64
|
+
export const experimental_setAttributes = setAttributes;
|
|
65
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic2V0LWF0dHJpYnV0ZXMuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvd29ya2Zsb3cvc2V0LWF0dHJpYnV0ZXMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFVBQVUsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRTlDLE9BQU8sRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHlCQUF5QixDQUFDO0FBQ3BFLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLGVBQWUsQ0FBQztBQThCeEQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7R0EyQ0c7QUFDSCxNQUFNLENBQUMsS0FBSyxVQUFVLGFBQWEsQ0FDakMsS0FBeUMsRUFDekMsVUFBZ0MsRUFBRTtJQUVsQyxNQUFNLE9BQU8sR0FBRyx5QkFBeUIsQ0FBQyxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7SUFDMUQsSUFBSSxPQUFPLENBQUMsTUFBTSxLQUFLLENBQUM7UUFBRSxPQUFPO0lBQ2pDLE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDLHVCQUF1QixLQUFLLElBQUksQ0FBQztJQUN6RSxNQUFNLHFCQUFxQixHQUFJLFVBQXNDLENBQ25FLHVCQUF1QixDQU1aLENBQUM7SUFDZCxJQUFJLENBQUMscUJBQXFCLEVBQUUsQ0FBQztRQUMzQixNQUFNLElBQUksVUFBVSxDQUNsQiw2REFBNkQ7WUFDM0QsaUVBQWlFLENBQ3BFLENBQUM7SUFDSixDQUFDO0lBQ0QsTUFBTSxxQkFBcUIsQ0FDekIsT0FBTyxFQUNQLHVCQUF1QixDQUFDLENBQUMsQ0FBQyxFQUFFLHVCQUF1QixFQUFFLElBQUksRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQ2pFLENBQUM7QUFDSixDQUFDO0FBRUQ7OztHQUdHO0FBQ0gsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsYUFBYSxDQUFDIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgRmF0YWxFcnJvciB9IGZyb20gJ0B3b3JrZmxvdy9lcnJvcnMnO1xuaW1wb3J0IHR5cGUgeyBBdHRyaWJ1dGVDaGFuZ2UgfSBmcm9tICdAd29ya2Zsb3cvd29ybGQnO1xuaW1wb3J0IHsgbm9ybWFsaXplQXR0cmlidXRlQ2hhbmdlcyB9IGZyb20gJy4uL2F0dHJpYnV0ZS1jaGFuZ2VzLmpzJztcbmltcG9ydCB7IFdPUktGTE9XX1NFVF9BVFRSSUJVVEVTIH0gZnJvbSAnLi4vc3ltYm9scy5qcyc7XG5cbi8qKlxuICogT3B0aW9ucyBhY2NlcHRlZCBieSBgc2V0QXR0cmlidXRlc2AuXG4gKi9cbmV4cG9ydCBpbnRlcmZhY2UgU2V0QXR0cmlidXRlc09wdGlvbnMge1xuICAvKipcbiAgICogUGVybWl0IGF0dHJpYnV0ZSBrZXlzIHRoYXQgc3RhcnQgd2l0aCB0aGUgcmVzZXJ2ZWQgYCRgIHByZWZpeC5cbiAgICogKipEZWZhdWx0OiBgZmFsc2VgLioqXG4gICAqXG4gICAqIFRoZSBgJGAgbmFtZXNwYWNlIGlzIHJlc2VydmVkIGZvciBmcmFtZXdvcmsgYW5kIGxpYnJhcnkgY29kZSB0aGF0XG4gICAqIGlzIGJ1aWx0IG9uIHRvcCBvZiB0aGUgd29ya2Zsb3cgU0RLICh0ZWxlbWV0cnksIGFnZW50IG1ldGFkYXRhLFxuICAgKiBwbGF0Zm9ybS1lbWl0dGVkIHRhZ3MsIGV0Yy4pLiBVc2VyIGNvZGUgTVVTVCBOT1Qgd3JpdGUga2V5cyBpblxuICAgKiB0aGlzIG5hbWVzcGFjZTsgdmFsaWRhdGlvbiByZWplY3RzIHRoZW0gc28gYWNjaWRlbnRhbCBjb2xsaXNpb25zXG4gICAqIHdpdGggdG9vbGluZy1vd25lZCBrZXlzIGNhbid0IHNsaXAgdGhyb3VnaC5cbiAgICpcbiAgICogT25seSBmbGlwIHRoaXMgdG8gYHRydWVgIGlmIHlvdXIgY2FsbGVyIGlzIGl0c2VsZiBhIGZyYW1ld29yayBvclxuICAgKiBsaWJyYXJ5IHRoYXQgb3ducyBhIGAkYC1wcmVmaXhlZCBzdWItbmFtZXNwYWNlIGFuZCBrbm93cyB0aGVcbiAgICogY29udmVudGlvbnMgb2YgYW55IG90aGVyIHRvb2xzIHdyaXRpbmcgaW50byBpdC4gTWlzdXNlIGNhblxuICAgKiBjb25mbGljdCB3aXRoIG9ic2VydmFiaWxpdHkgc3VyZmFjZXMsIGFnZW50IGRhc2hib2FyZHMsIG9yIGZ1dHVyZVxuICAgKiBwbGF0Zm9ybSBmZWF0dXJlcyB0aGF0IHJlbHkgb24gdGhlIHJlc2VydmVkIG5hbWVzcGFjZS5cbiAgICovXG4gIGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzPzogYm9vbGVhbjtcbn1cblxuLyoqXG4gKiBAZGVwcmVjYXRlZCBVc2Uge0BsaW5rIFNldEF0dHJpYnV0ZXNPcHRpb25zfSBpbnN0ZWFkLlxuICovXG5leHBvcnQgdHlwZSBFeHBlcmltZW50YWxTZXRBdHRyaWJ1dGVzT3B0aW9ucyA9IFNldEF0dHJpYnV0ZXNPcHRpb25zO1xuXG4vKipcbiAqIEF0dGFjaCBwbGFpbnRleHQgc3RyaW5nIGtleS92YWx1ZSBtZXRhZGF0YSB0byB0aGUgY3VycmVudCB3b3JrZmxvdyBydW4uXG4gKlxuICogQ2FsbGFibGUgb25seSBmcm9tIGEgd29ya2Zsb3cgYm9keSAoYCd1c2Ugd29ya2Zsb3cnYCkuIFRoZSBjYWxsIGlzXG4gKiBkaXNwYXRjaGVkIGFzIGEgbmF0aXZlIGBhdHRyX3NldGAgZXZlbnQgYW5kIG1hdGVyaWFsaXplZCBvbiB0aGUgcnVuLlxuICpcbiAqIFZhbGlkYXRpb24gcnVucyBpbiB0aGUgVk0gKGNoZWFwLCBkZXRlcm1pbmlzdGljKSBiZWZvcmUgZXZlbnRcbiAqIGRpc3BhdGNoIC0gdmlvbGF0aW9ucyB0aHJvdyBgRmF0YWxFcnJvcmAgd2l0aG91dCB3cml0aW5nIGFuIGV2ZW50LiBBblxuICogZW1wdHkgcmVjb3JkIGlzIGEgbm8tb3AuIGB2YWx1ZTogdW5kZWZpbmVkYCByZW1vdmVzIHRoZSBrZXkgZnJvbSB0aGVcbiAqIHJ1bidzIGF0dHJpYnV0ZSBtYXAuXG4gKlxuICogKipSZXNlcnZlZCBuYW1lc3BhY2UuKiogS2V5cyBzdGFydGluZyB3aXRoIGAkYCBhcmUgcmVzZXJ2ZWQgZm9yXG4gKiBmcmFtZXdvcmsvbGlicmFyeSBjb2RlICh0ZWxlbWV0cnksIGFnZW50IG1ldGFkYXRhLCBldGMuKS4gVXNlciBjb2RlXG4gKiB0cnlpbmcgdG8gd3JpdGUgYSBgJGAtcHJlZml4ZWQga2V5IHRocm93cyBgRmF0YWxFcnJvcmAuIElmIHlvdSBhcmUgYVxuICogZnJhbWV3b3JrIGF1dGhvciBhbmQgbmVlZCB0byBzZXQgYSByZXNlcnZlZCBrZXksIHBhc3NcbiAqIGB7IGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzOiB0cnVlIH1gIGFzIHRoZSBzZWNvbmQgYXJndW1lbnQg4oCUIHNlZVxuICogYFNldEF0dHJpYnV0ZXNPcHRpb25zYCBmb3IgdGhlIHRyYWRlLW9mZnMuXG4gKlxuICogKipXQVJOSU5HKio6IENhbGxpbmcgZS5nLlxuICogYFByb21pc2UuYWxsKFtzZXRBdHRyaWJ1dGVzKHsgYTogJzEnIH0pLCBzZXRBdHRyaWJ1dGVzKHsgYTogJzInIH0pXSlgXG4gKiBpcyBub3QgZ3VhcmFudGVlZCB0byBiZSBvcmRlcmVkIGNvbnNpc3RlbnRseSwgYnV0IHRoZSBlcXVpdmFsZW50XG4gKiBzZXF1ZW50aWFsIGAudGhlbigpYCBjaGFpbiBpcy5cbiAqXG4gKiBAZXhhbXBsZVxuICogYGBgdHNcbiAqIGltcG9ydCB7IHNldEF0dHJpYnV0ZXMgfSBmcm9tICd3b3JrZmxvdyc7XG4gKlxuICogZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG15V29ya2Zsb3coKSB7XG4gKiAgICd1c2Ugd29ya2Zsb3cnO1xuICogICBhd2FpdCBzZXRBdHRyaWJ1dGVzKHsgcGhhc2U6ICdpbml0JyB9KTtcbiAqICAgLy8gLi4uIHdvcmsgLi4uXG4gKiAgIGF3YWl0IHNldEF0dHJpYnV0ZXMoeyBwaGFzZTogJ2RvbmUnLCBvcmRlcklkOiAnb3JkXzEyMycgfSk7XG4gKiAgIGF3YWl0IHNldEF0dHJpYnV0ZXMoeyBvcmRlcklkOiB1bmRlZmluZWQgfSk7IC8vIHJlbW92ZVxuICogfVxuICogYGBgXG4gKlxuICogQGV4YW1wbGUgRnJhbWV3b3JrIC8gbGlicmFyeSBjb2RlIHdyaXRpbmcgaW50byB0aGUgcmVzZXJ2ZWQgbmFtZXNwYWNlLlxuICogYGBgdHNcbiAqIGF3YWl0IHNldEF0dHJpYnV0ZXMoXG4gKiAgIHsgJyRhZ2VudC5raW5kJzogJ2R1cmFibGUtYWdlbnQnIH0sXG4gKiAgIHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM6IHRydWUgfVxuICogKTtcbiAqIGBgYFxuICovXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gc2V0QXR0cmlidXRlcyhcbiAgYXR0cnM6IFJlY29yZDxzdHJpbmcsIHN0cmluZyB8IHVuZGVmaW5lZD4sXG4gIG9wdGlvbnM6IFNldEF0dHJpYnV0ZXNPcHRpb25zID0ge31cbik6IFByb21pc2U8dm9pZD4ge1xuICBjb25zdCBjaGFuZ2VzID0gbm9ybWFsaXplQXR0cmlidXRlQ2hhbmdlcyhhdHRycywgb3B0aW9ucyk7XG4gIGlmIChjaGFuZ2VzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuICBjb25zdCBhbGxvd1Jlc2VydmVkQXR0cmlidXRlcyA9IG9wdGlvbnMuYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMgPT09IHRydWU7XG4gIGNvbnN0IGRpc3BhdGNoU2V0QXR0cmlidXRlcyA9IChnbG9iYWxUaGlzIGFzIFJlY29yZDxzeW1ib2wsIHVua25vd24+KVtcbiAgICBXT1JLRkxPV19TRVRfQVRUUklCVVRFU1xuICBdIGFzXG4gICAgfCAoKFxuICAgICAgICBjaGFuZ2VzOiBBdHRyaWJ1dGVDaGFuZ2VbXSxcbiAgICAgICAgb3B0aW9ucz86IHsgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXM/OiBib29sZWFuIH1cbiAgICAgICkgPT4gUHJvbWlzZTx2b2lkPilcbiAgICB8IHVuZGVmaW5lZDtcbiAgaWYgKCFkaXNwYXRjaFNldEF0dHJpYnV0ZXMpIHtcbiAgICB0aHJvdyBuZXcgRmF0YWxFcnJvcihcbiAgICAgICdzZXRBdHRyaWJ1dGVzKCkgY2FsbGVkIG91dHNpZGUgYSB3b3JrZmxvdyBydW50aW1lIGNvbnRleHQuICcgK1xuICAgICAgICAnSXQgbXVzdCBiZSBjYWxsZWQgZnJvbSB3aXRoaW4gYSB3b3JrZmxvdyBib2R5IChgdXNlIHdvcmtmbG93YCkuJ1xuICAgICk7XG4gIH1cbiAgYXdhaXQgZGlzcGF0Y2hTZXRBdHRyaWJ1dGVzKFxuICAgIGNoYW5nZXMsXG4gICAgYWxsb3dSZXNlcnZlZEF0dHJpYnV0ZXMgPyB7IGFsbG93UmVzZXJ2ZWRBdHRyaWJ1dGVzOiB0cnVlIH0gOiB7fVxuICApO1xufVxuXG4vKipcbiAqIEBkZXByZWNhdGVkIFRoZSBmZWF0dXJlIGlzIG5vIGxvbmdlciBleHBlcmltZW50YWwg4oCUIHVzZVxuICoge0BsaW5rIHNldEF0dHJpYnV0ZXN9IGluc3RlYWQuXG4gKi9cbmV4cG9ydCBjb25zdCBleHBlcmltZW50YWxfc2V0QXR0cmlidXRlcyA9IHNldEF0dHJpYnV0ZXM7XG4iXX0=
|
|
@@ -47,8 +47,8 @@ Workflow SDK contains the following functions you can use inside your workflow f
|
|
|
47
47
|
<Card href="/docs/api-reference/workflow/get-writable" title="getWritable()">
|
|
48
48
|
Access the current workflow run's default stream.
|
|
49
49
|
</Card>
|
|
50
|
-
<Card href="/docs/api-reference/workflow/
|
|
51
|
-
Attach
|
|
50
|
+
<Card href="/docs/api-reference/workflow/set-attributes" title="setAttributes()">
|
|
51
|
+
Attach string metadata to the current workflow run.
|
|
52
52
|
</Card>
|
|
53
53
|
</Cards>
|
|
54
54
|
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
---
|
|
2
|
-
title:
|
|
2
|
+
title: setAttributes
|
|
3
3
|
description: Attach string metadata to workflow run for observability.
|
|
4
4
|
type: reference
|
|
5
|
-
summary: Use
|
|
5
|
+
summary: Use setAttributes inside a workflow or step function to set run attributes.
|
|
6
6
|
prerequisites:
|
|
7
7
|
- /docs/foundations/workflows-and-steps
|
|
8
8
|
related:
|
|
@@ -12,17 +12,13 @@ related:
|
|
|
12
12
|
|
|
13
13
|
Attaches string metadata to the current workflow run.
|
|
14
14
|
|
|
15
|
-
<Callout>
|
|
16
|
-
This API is experimental and may change before the stable attributes API is released.
|
|
17
|
-
</Callout>
|
|
18
|
-
|
|
19
15
|
```typescript lineNumbers
|
|
20
|
-
import {
|
|
16
|
+
import { setAttributes } from "workflow"
|
|
21
17
|
|
|
22
18
|
export async function orderWorkflow(orderId: string) {
|
|
23
19
|
"use workflow"
|
|
24
20
|
|
|
25
|
-
await
|
|
21
|
+
await setAttributes({
|
|
26
22
|
phase: "received",
|
|
27
23
|
orderId,
|
|
28
24
|
})
|
|
@@ -35,24 +31,24 @@ export async function orderWorkflow(orderId: string) {
|
|
|
35
31
|
|
|
36
32
|
<TSDoc
|
|
37
33
|
definition={`
|
|
38
|
-
import {
|
|
39
|
-
export default
|
|
34
|
+
import { setAttributes } from "workflow";
|
|
35
|
+
export default setAttributes;`}
|
|
40
36
|
showSections={['parameters']}
|
|
41
37
|
/>
|
|
42
38
|
|
|
43
39
|
## Usage
|
|
44
40
|
|
|
45
|
-
Call `
|
|
41
|
+
Call `setAttributes` from a `"use workflow"` function or a `"use step"` function. Calling it from plain application code is not supported because there is no active workflow run.
|
|
46
42
|
|
|
47
43
|
Attribute values must be strings. Pass `undefined` to remove an attribute:
|
|
48
44
|
|
|
49
45
|
```typescript lineNumbers
|
|
50
|
-
import {
|
|
46
|
+
import { setAttributes } from "workflow"
|
|
51
47
|
|
|
52
48
|
export async function cleanupAttributes() {
|
|
53
49
|
"use workflow"
|
|
54
50
|
|
|
55
|
-
await
|
|
51
|
+
await setAttributes({ staleKey: undefined })
|
|
56
52
|
}
|
|
57
53
|
```
|
|
58
54
|
|
|
@@ -62,4 +58,8 @@ Validation errors throw [`FatalError`](/docs/api-reference/workflow/fatal-error)
|
|
|
62
58
|
|
|
63
59
|
Calls from both workflow and step bodies append a native `attr_set` event, which the World materializes onto `run.attributes`. Workflow-originated events record a workflow writer; step-originated events record the originating step ID and attempt.
|
|
64
60
|
|
|
65
|
-
Native attributes require spec version 4 or later. Step-body storage errors throw from `
|
|
61
|
+
Native attributes require spec version 4 or later. Step-body storage errors throw from `setAttributes`; catch them inside the step if the write should be best-effort. Workflow-body writes are committed when the workflow suspends: transient storage errors are retried with the suspension, while a write the World rejects as invalid — such as exceeding the per-run attribute cap across multiple calls — fails the run with the validation error.
|
|
62
|
+
|
|
63
|
+
<Callout>
|
|
64
|
+
This function was previously exported as `experimental_setAttributes`. The old name still works as a deprecated alias — update imports to `setAttributes`.
|
|
65
|
+
</Callout>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@workflow/core",
|
|
3
|
-
"version": "5.0.0-beta.
|
|
3
|
+
"version": "5.0.0-beta.31",
|
|
4
4
|
"description": "Core runtime and engine for Workflow SDK",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "dist/index.js",
|
|
@@ -101,9 +101,9 @@
|
|
|
101
101
|
"@workflow/errors": "5.0.0-beta.10",
|
|
102
102
|
"@workflow/serde": "5.0.0-beta.2",
|
|
103
103
|
"@workflow/utils": "5.0.0-beta.6",
|
|
104
|
-
"@workflow/world": "5.0.0-beta.
|
|
105
|
-
"@workflow/world-local": "5.0.0-beta.
|
|
106
|
-
"@workflow/world-vercel": "5.0.0-beta.
|
|
104
|
+
"@workflow/world": "5.0.0-beta.19",
|
|
105
|
+
"@workflow/world-local": "5.0.0-beta.27",
|
|
106
|
+
"@workflow/world-vercel": "5.0.0-beta.27"
|
|
107
107
|
},
|
|
108
108
|
"devDependencies": {
|
|
109
109
|
"@opentelemetry/api": "1.9.0",
|