@digipair/skill-temporal 0.113.1 → 0.114.2

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.
Files changed (44) hide show
  1. package/README.md +11 -0
  2. package/dist/src/index.d.ts +2 -0
  3. package/dist/src/index.d.ts.map +1 -0
  4. package/{src → dist/src}/index.js +1 -1
  5. package/dist/src/index.js.map +1 -0
  6. package/{src → dist/src}/lib/activities.d.ts +1 -1
  7. package/dist/src/lib/activities.d.ts.map +1 -0
  8. package/dist/src/lib/activities.js +8 -0
  9. package/dist/src/lib/activities.js.map +1 -0
  10. package/{src → dist/src}/lib/shared.d.ts +1 -1
  11. package/dist/src/lib/shared.d.ts.map +1 -0
  12. package/dist/src/lib/shared.js.map +1 -0
  13. package/{src → dist/src}/lib/skill-temporal.d.ts +1 -1
  14. package/dist/src/lib/skill-temporal.d.ts.map +1 -0
  15. package/dist/src/lib/skill-temporal.js +102 -0
  16. package/dist/src/lib/skill-temporal.js.map +1 -0
  17. package/{src → dist/src}/lib/workflows.d.ts +2 -1
  18. package/dist/src/lib/workflows.d.ts.map +1 -0
  19. package/dist/src/lib/workflows.js +123 -0
  20. package/dist/src/lib/workflows.js.map +1 -0
  21. package/package.json +58 -10
  22. package/src/digipair-engine.d.ts +23 -0
  23. package/src/handlebars.d.ts +1 -0
  24. package/src/index.ts +1 -0
  25. package/src/lib/activities.ts +11 -0
  26. package/src/lib/shared.ts +11 -0
  27. package/src/lib/skill-temporal.spec.ts +7 -0
  28. package/src/lib/skill-temporal.ts +126 -0
  29. package/src/lib/workflows.ts +153 -0
  30. package/src/schema.fr.json +443 -0
  31. package/src/schema.json +443 -0
  32. package/src/index.d.ts +0 -1
  33. package/src/index.js.map +0 -1
  34. package/src/lib/activities.js +0 -12
  35. package/src/lib/activities.js.map +0 -1
  36. package/src/lib/shared.js.map +0 -1
  37. package/src/lib/skill-temporal.js +0 -115
  38. package/src/lib/skill-temporal.js.map +0 -1
  39. package/src/lib/workflows.js +0 -121
  40. package/src/lib/workflows.js.map +0 -1
  41. /package/{index.d.ts → dist/index.d.ts} +0 -0
  42. /package/{schema.fr.json → dist/schema.fr.json} +0 -0
  43. /package/{schema.json → dist/schema.json} +0 -0
  44. /package/{src → dist/src}/lib/shared.js +0 -0
@@ -0,0 +1,443 @@
1
+ {
2
+ "openapi": "3.0.0",
3
+ "info": {
4
+ "title": "@digipair/skill-temporal",
5
+ "summary": "Temporal workflow management",
6
+ "description": "This skill allows managing temporal workflows",
7
+ "version": "0.1.0",
8
+ "x-icon": "👩‍💻"
9
+ },
10
+ "paths": {
11
+ "/activity": {
12
+ "post": {
13
+ "tags": [
14
+ "service"
15
+ ],
16
+ "summary": "Activity",
17
+ "description": "Defines an activity",
18
+ "parameters": [
19
+ {
20
+ "name": "name",
21
+ "summary": "Name",
22
+ "required": false,
23
+ "description": "Name of the step",
24
+ "schema": {
25
+ "type": "string"
26
+ }
27
+ },
28
+ {
29
+ "name": "execute",
30
+ "summary": "Execute",
31
+ "required": true,
32
+ "description": "List of actions to execute",
33
+ "schema": {
34
+ "type": "array",
35
+ "items": {
36
+ "$ref": "https://schemas.digipair.ai/pinsSettings"
37
+ }
38
+ }
39
+ }
40
+ ],
41
+ "x-events": [],
42
+ "responses": {
43
+ "200": {
44
+ "description": "Activity execution result",
45
+ "content": {
46
+ "application/json": {
47
+ "schema": {
48
+ "type": "string",
49
+ "description": "Result of the activity execution"
50
+ }
51
+ }
52
+ }
53
+ }
54
+ }
55
+ }
56
+ },
57
+ "/sleep": {
58
+ "post": {
59
+ "tags": [
60
+ "service"
61
+ ],
62
+ "summary": "Wait",
63
+ "parameters": [
64
+ {
65
+ "name": "name",
66
+ "summary": "Name",
67
+ "required": false,
68
+ "description": "Name of the step",
69
+ "schema": {
70
+ "type": "string"
71
+ }
72
+ },
73
+ {
74
+ "name": "duration",
75
+ "summary": "Duration",
76
+ "required": true,
77
+ "description": "Duration of the wait",
78
+ "schema": {
79
+ "type": "string"
80
+ }
81
+ }
82
+ ],
83
+ "x-events": [],
84
+ "responses": {
85
+ "200": {
86
+ "description": "Sleep duration confirmation",
87
+ "content": {
88
+ "application/json": {
89
+ "schema": {
90
+ "type": "string",
91
+ "description": "Confirmation that sleep duration has been applied"
92
+ }
93
+ }
94
+ }
95
+ }
96
+ }
97
+ }
98
+ },
99
+ "/condition": {
100
+ "post": {
101
+ "tags": [
102
+ "service"
103
+ ],
104
+ "summary": "Wait condition",
105
+ "description": "Wait condition in a workflow",
106
+ "parameters": [
107
+ {
108
+ "name": "condition",
109
+ "summary": "Condition",
110
+ "required": true,
111
+ "description": "Wait condition in Feel format",
112
+ "schema": {
113
+ "type": "string"
114
+ }
115
+ },
116
+ {
117
+ "name": "timeout",
118
+ "summary": "Timeout",
119
+ "required": false,
120
+ "description": "Timeout of the condition",
121
+ "schema": {
122
+ "type": "number"
123
+ }
124
+ }
125
+ ],
126
+ "x-events": [],
127
+ "responses": {
128
+ "200": {
129
+ "description": "Wait condition result",
130
+ "content": {
131
+ "application/json": {
132
+ "schema": {
133
+ "type": "boolean",
134
+ "description": "Whether the condition was met before timeout"
135
+ }
136
+ }
137
+ }
138
+ }
139
+ }
140
+ }
141
+ },
142
+ "/goto": {
143
+ "post": {
144
+ "tags": [
145
+ "service"
146
+ ],
147
+ "summary": "Go to step",
148
+ "parameters": [
149
+ {
150
+ "name": "target",
151
+ "summary": "Destination name",
152
+ "required": true,
153
+ "description": "Name of the destination step",
154
+ "schema": {
155
+ "type": "string"
156
+ }
157
+ },
158
+ {
159
+ "name": "name",
160
+ "summary": "Name",
161
+ "required": false,
162
+ "description": "Name of the step",
163
+ "schema": {
164
+ "type": "string"
165
+ }
166
+ }
167
+ ],
168
+ "x-events": [],
169
+ "responses": {
170
+ "200": {
171
+ "description": "Step number after goto",
172
+ "content": {
173
+ "application/json": {
174
+ "schema": {
175
+ "type": "number",
176
+ "description": "Target step number in the workflow"
177
+ }
178
+ }
179
+ }
180
+ }
181
+ }
182
+ }
183
+ },
184
+ "/stop": {
185
+ "post": {
186
+ "tags": [
187
+ "service"
188
+ ],
189
+ "summary": "Stop the workflow",
190
+ "description": "Stop the workflow",
191
+ "parameters": [
192
+ {
193
+ "name": "name",
194
+ "summary": "Name",
195
+ "required": false,
196
+ "description": "Name of the step",
197
+ "schema": {
198
+ "type": "string"
199
+ }
200
+ }
201
+ ],
202
+ "x-events": [],
203
+ "responses": {
204
+ "200": {
205
+ "description": "Workflow stop confirmation",
206
+ "content": {
207
+ "application/json": {
208
+ "schema": {
209
+ "type": "null",
210
+ "description": "Workflow has been stopped"
211
+ }
212
+ }
213
+ }
214
+ }
215
+ }
216
+ }
217
+ },
218
+ "/push": {
219
+ "post": {
220
+ "tags": [
221
+ "service"
222
+ ],
223
+ "summary": "Send new data to a workflow",
224
+ "description": "Send new data to the workflow",
225
+ "parameters": [
226
+ {
227
+ "name": "id",
228
+ "summary": "Workflow ID",
229
+ "required": true,
230
+ "description": "Workflow ID",
231
+ "schema": {
232
+ "type": "string"
233
+ }
234
+ },
235
+ {
236
+ "name": "data",
237
+ "summary": "Data",
238
+ "required": true,
239
+ "description": "Data",
240
+ "schema": {
241
+ "type": "object"
242
+ }
243
+ }
244
+ ],
245
+ "x-events": [],
246
+ "responses": {
247
+ "200": {
248
+ "description": "Data push confirmation",
249
+ "content": {
250
+ "application/json": {
251
+ "schema": {
252
+ "type": "null",
253
+ "description": "Data has been successfully pushed to the workflow"
254
+ }
255
+ }
256
+ }
257
+ }
258
+ }
259
+ }
260
+ },
261
+ "/terminate": {
262
+ "post": {
263
+ "tags": [
264
+ "service"
265
+ ],
266
+ "summary": "Stop a workflow",
267
+ "description": "Stop a workflow",
268
+ "parameters": [
269
+ {
270
+ "name": "id",
271
+ "summary": "Workflow ID",
272
+ "required": true,
273
+ "description": "Workflow ID",
274
+ "schema": {
275
+ "type": "string"
276
+ }
277
+ }
278
+ ],
279
+ "x-events": [],
280
+ "responses": {
281
+ "200": {
282
+ "description": "Workflow termination confirmation",
283
+ "content": {
284
+ "application/json": {
285
+ "schema": {
286
+ "type": "null",
287
+ "description": "Workflow has been successfully terminated"
288
+ }
289
+ }
290
+ }
291
+ }
292
+ }
293
+ }
294
+ },
295
+ "/list": {
296
+ "post": {
297
+ "tags": [
298
+ "service"
299
+ ],
300
+ "summary": "List workflows",
301
+ "description": "List workflows",
302
+ "parameters": [
303
+ {
304
+ "name": "query",
305
+ "summary": "Query",
306
+ "required": false,
307
+ "description": "Search query",
308
+ "schema": {
309
+ "type": "string"
310
+ }
311
+ }
312
+ ],
313
+ "x-events": [],
314
+ "responses": {
315
+ "200": {
316
+ "description": "List of workflows",
317
+ "content": {
318
+ "application/json": {
319
+ "schema": {
320
+ "type": "array",
321
+ "items": {
322
+ "$ref": "#/components/schemas/WorkflowExecutionInfo"
323
+ }
324
+ }
325
+ }
326
+ }
327
+ }
328
+ }
329
+ }
330
+ }
331
+ },
332
+ "components": {
333
+ "schemas": {
334
+ "WorkflowExecutionInfo": {
335
+ "tags": [],
336
+ "type": "object",
337
+ "description": "Information about a Temporal workflow execution",
338
+ "properties": {
339
+ "workflowId": {
340
+ "type": "string",
341
+ "description": "Unique identifier of the workflow"
342
+ },
343
+ "runId": {
344
+ "type": "string",
345
+ "description": "Unique identifier of the workflow run"
346
+ },
347
+ "type": {
348
+ "type": "object",
349
+ "properties": {
350
+ "name": {
351
+ "type": "string",
352
+ "description": "Name of the workflow type"
353
+ }
354
+ }
355
+ },
356
+ "status": {
357
+ "type": "string",
358
+ "enum": [
359
+ "Running",
360
+ "Completed",
361
+ "Failed",
362
+ "Cancelled",
363
+ "Terminated"
364
+ ],
365
+ "description": "Current status of the workflow"
366
+ },
367
+ "startTime": {
368
+ "type": "string",
369
+ "format": "date-time",
370
+ "description": "When the workflow was started"
371
+ },
372
+ "taskQueue": {
373
+ "type": "string",
374
+ "description": "Task queue name used by the workflow"
375
+ }
376
+ }
377
+ }
378
+ }
379
+ },
380
+ "x-scene-blocks": {
381
+ "/workflow": {
382
+ "summary": "Temporal Workflow",
383
+ "description": "Execute a Temporal workflow",
384
+ "tags": [
385
+ "service"
386
+ ],
387
+ "metadata": [],
388
+ "parameters": [
389
+ {
390
+ "name": "id",
391
+ "summary": "ID",
392
+ "required": true,
393
+ "description": "Workflow ID",
394
+ "schema": {
395
+ "type": "string"
396
+ }
397
+ },
398
+ {
399
+ "name": "steps",
400
+ "summary": "Execute the following steps",
401
+ "required": true,
402
+ "description": "Content of the page",
403
+ "schema": {
404
+ "type": "array",
405
+ "items": {
406
+ "$ref": "https://schemas.digipair.ai/pinsSettings"
407
+ }
408
+ }
409
+ },
410
+ {
411
+ "name": "data",
412
+ "summary": "Workflow data",
413
+ "required": false,
414
+ "description": "Temporal workflow data",
415
+ "schema": {
416
+ "type": "object"
417
+ }
418
+ },
419
+ {
420
+ "name": "options",
421
+ "summary": "Temporal options",
422
+ "required": false,
423
+ "description": "Temporal workflow options",
424
+ "schema": {
425
+ "type": "object"
426
+ }
427
+ }
428
+ ],
429
+ "responses": {
430
+ "200": {
431
+ "description": "Workflow execution result",
432
+ "content": {
433
+ "application/json": {
434
+ "schema": {
435
+ "description": "The result of the last executed step in the workflow"
436
+ }
437
+ }
438
+ }
439
+ }
440
+ }
441
+ }
442
+ }
443
+ }
package/src/index.d.ts DELETED
@@ -1 +0,0 @@
1
- export * from './lib/skill-temporal';
package/src/index.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../../libs/skill-temporal/src/index.ts"],"names":[],"mappings":";;;AAAA,+DAAqC"}
@@ -1,12 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.executePinsList = void 0;
4
- const tslib_1 = require("tslib");
5
- const engine_1 = require("@digipair/engine");
6
- function executePinsList(_a) {
7
- return tslib_1.__awaiter(this, arguments, void 0, function* ({ pinsSettingsList, context, }) {
8
- return yield (0, engine_1.executePinsList)(pinsSettingsList, context);
9
- });
10
- }
11
- exports.executePinsList = executePinsList;
12
- //# sourceMappingURL=activities.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"activities.js","sourceRoot":"","sources":["../../../../../libs/skill-temporal/src/lib/activities.ts"],"names":[],"mappings":";;;;AAAA,6CAA0F;AAE1F,SAAsB,eAAe;iEAAC,EACpC,gBAAgB,EAChB,OAAO,GAIR;QACC,OAAO,MAAM,IAAA,wBAAqB,EAAC,gBAAgB,EAAE,OAAO,CAAC,CAAC;IAChE,CAAC;CAAA;AARD,0CAQC"}
@@ -1 +0,0 @@
1
- {"version":3,"file":"shared.js","sourceRoot":"","sources":["../../../../../libs/skill-temporal/src/lib/shared.ts"],"names":[],"mappings":";;;AASa,QAAA,SAAS,GAAG,8BAA8B,CAAC;AAC3C,QAAA,SAAS,GAAG,SAAS,CAAC"}
@@ -1,115 +0,0 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.list = exports.terminate = exports.push = exports.workflow = exports.initialize = void 0;
4
- const tslib_1 = require("tslib");
5
- const client_1 = require("@temporalio/client");
6
- const worker_1 = require("@temporalio/worker");
7
- const workflows_1 = require("./workflows");
8
- const shared_1 = require("./shared");
9
- const activities = require("./activities");
10
- class TemporalService {
11
- initialize() {
12
- return tslib_1.__awaiter(this, arguments, void 0, function* (address = 'localhost:7233') {
13
- yield this.startClient(address);
14
- yield this.startWorker(address);
15
- });
16
- }
17
- startClient(address) {
18
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
19
- const connection = yield client_1.Connection.connect({
20
- address,
21
- });
22
- this.client = new client_1.WorkflowClient({
23
- connection,
24
- namespace: shared_1.namespace,
25
- });
26
- });
27
- }
28
- startWorker(address) {
29
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
30
- const connection = yield worker_1.NativeConnection.connect({
31
- address,
32
- });
33
- const worker = yield worker_1.Worker.create({
34
- connection,
35
- namespace: shared_1.namespace,
36
- workflowsPath: require.resolve('./workflows'),
37
- activities,
38
- taskQueue: shared_1.taskQueue,
39
- });
40
- // Start accepting tasks from the Task Queue.
41
- worker.run();
42
- });
43
- }
44
- workflow(params, _pinsSettingsList, context) {
45
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
46
- var _a, _b, _c;
47
- const { id, steps, data = {}, options = (_a = context.privates.TEMPORAL_OPTIONS) !== null && _a !== void 0 ? _a : {} } = params;
48
- const prefix = (_c = (_b = context.privates.TEMPORAL_PREFIX) !== null && _b !== void 0 ? _b : process.env['TEMPORAL_PREFIX']) !== null && _c !== void 0 ? _c : `digipair-workflow-${context.request.digipair}-${context.request.reasoning}-`;
49
- const workflowOptions = Object.assign({
50
- // RetryPolicy specifies how to automatically handle retries if an Activity fails.
51
- retry: Object.assign({ initialInterval: '1 second', maximumInterval: '1 minute', backoffCoefficient: 2, maximumAttempts: 50, nonRetryableErrorTypes: [] }, (options.retry || {})), startToCloseTimeout: '1 minute' }, options);
52
- this.client.start(workflows_1.workflow, {
53
- args: [{ steps, context: Object.assign(Object.assign({}, context), { protected: undefined, requester: Object.assign(Object.assign({}, context.requester), { protected: undefined }) }), data, options: workflowOptions }],
54
- taskQueue: shared_1.taskQueue,
55
- workflowId: `${prefix}${id}`,
56
- });
57
- });
58
- }
59
- push(params, _pinsSettingsList, context) {
60
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
61
- var _a, _b;
62
- const { id, data } = params;
63
- const prefix = (_b = (_a = context.privates.TEMPORAL_PREFIX) !== null && _a !== void 0 ? _a : process.env['TEMPORAL_PREFIX']) !== null && _b !== void 0 ? _b : `digipair-workflow-${context.request.digipair}-${context.request.reasoning}-`;
64
- const handle = this.client.getHandle(`${prefix}${id}`);
65
- yield handle.signal(workflows_1.dataSignal, data);
66
- });
67
- }
68
- terminate(params, _pinsSettingsList, context) {
69
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
70
- var _a, _b;
71
- const { id } = params;
72
- const prefix = (_b = (_a = context.privates.TEMPORAL_PREFIX) !== null && _a !== void 0 ? _a : process.env['TEMPORAL_PREFIX']) !== null && _b !== void 0 ? _b : `digipair-workflow-${context.request.digipair}-${context.request.reasoning}-`;
73
- const handle = this.client.getHandle(`${prefix}${id}`);
74
- yield handle.terminate();
75
- });
76
- }
77
- list(params, _pinsSettingsList, context) {
78
- return tslib_1.__awaiter(this, void 0, void 0, function* () {
79
- var _a, e_1, _b, _c;
80
- var _d, _e;
81
- const { query = `ExecutionStatus = "Running"` } = params;
82
- const prefix = (_e = (_d = context.privates.TEMPORAL_PREFIX) !== null && _d !== void 0 ? _d : process.env['TEMPORAL_PREFIX']) !== null && _e !== void 0 ? _e : `digipair-workflow-${context.request.digipair}-${context.request.reasoning}-`;
83
- const workflowIterator = this.client.list({ query: `(WorkflowId > '${prefix}' and WorkflowId < '${prefix}~') and (${query})` });
84
- const workflows = [];
85
- try {
86
- for (var _f = true, workflowIterator_1 = tslib_1.__asyncValues(workflowIterator), workflowIterator_1_1; workflowIterator_1_1 = yield workflowIterator_1.next(), _a = workflowIterator_1_1.done, !_a; _f = true) {
87
- _c = workflowIterator_1_1.value;
88
- _f = false;
89
- const workflow = _c;
90
- workflows.push(workflow);
91
- }
92
- }
93
- catch (e_1_1) { e_1 = { error: e_1_1 }; }
94
- finally {
95
- try {
96
- if (!_f && !_a && (_b = workflowIterator_1.return)) yield _b.call(workflowIterator_1);
97
- }
98
- finally { if (e_1) throw e_1.error; }
99
- }
100
- return workflows;
101
- });
102
- }
103
- }
104
- let instance;
105
- const initialize = (adresse) => (instance = new TemporalService()).initialize(adresse);
106
- exports.initialize = initialize;
107
- const workflow = (params, pinsSettingsList, context) => instance.workflow(params, pinsSettingsList, context);
108
- exports.workflow = workflow;
109
- const push = (params, pinsSettingsList, context) => instance.push(params, pinsSettingsList, context);
110
- exports.push = push;
111
- const terminate = (params, pinsSettingsList, context) => instance.terminate(params, pinsSettingsList, context);
112
- exports.terminate = terminate;
113
- const list = (params, pinsSettingsList, context) => instance.list(params, pinsSettingsList, context);
114
- exports.list = list;
115
- //# sourceMappingURL=skill-temporal.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"skill-temporal.js","sourceRoot":"","sources":["../../../../../libs/skill-temporal/src/lib/skill-temporal.ts"],"names":[],"mappings":"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"}