@positronic/core 0.0.18 → 0.0.20

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.
@@ -273,7 +273,7 @@ function _ts_values(o) {
273
273
  };
274
274
  throw new TypeError(s ? "Object is not iterable." : "Symbol.iterator is not defined.");
275
275
  }
276
- import { BRAIN_EVENTS } from './constants.js';
276
+ import { BRAIN_EVENTS, STATUS } from './constants.js';
277
277
  import { applyPatches } from './json-patch.js';
278
278
  export var BrainRunner = /*#__PURE__*/ function() {
279
279
  "use strict";
@@ -312,12 +312,12 @@ export var BrainRunner = /*#__PURE__*/ function() {
312
312
  key: "run",
313
313
  value: function run(_0) {
314
314
  return _async_to_generator(function(brain) {
315
- var _ref, _ref_initialState, initialState, options, initialCompletedSteps, brainRunId, endAfter, _this_options, adapters, client, resources, currentState, stepNumber, brainRun, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, _ret, err;
315
+ var _ref, _ref_initialState, initialState, options, initialCompletedSteps, brainRunId, endAfter, signal, response, _this_options, adapters, client, resources, currentState, stepNumber, brainRun, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _loop, _iterator, _step, _ret, err, error, cancelledEvent;
316
316
  var _arguments = arguments;
317
317
  return _ts_generator(this, function(_state) {
318
318
  switch(_state.label){
319
319
  case 0:
320
- _ref = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, _ref_initialState = _ref.initialState, initialState = _ref_initialState === void 0 ? {} : _ref_initialState, options = _ref.options, initialCompletedSteps = _ref.initialCompletedSteps, brainRunId = _ref.brainRunId, endAfter = _ref.endAfter;
320
+ _ref = _arguments.length > 1 && _arguments[1] !== void 0 ? _arguments[1] : {}, _ref_initialState = _ref.initialState, initialState = _ref_initialState === void 0 ? {} : _ref_initialState, options = _ref.options, initialCompletedSteps = _ref.initialCompletedSteps, brainRunId = _ref.brainRunId, endAfter = _ref.endAfter, signal = _ref.signal, response = _ref.response;
321
321
  _this_options = this.options, adapters = _this_options.adapters, client = _this_options.client, resources = _this_options.resources;
322
322
  currentState = initialState !== null && initialState !== void 0 ? initialState : {};
323
323
  stepNumber = 1;
@@ -339,7 +339,8 @@ export var BrainRunner = /*#__PURE__*/ function() {
339
339
  brainRunId: brainRunId,
340
340
  options: options,
341
341
  client: client,
342
- resources: resources !== null && resources !== void 0 ? resources : {}
342
+ resources: resources !== null && resources !== void 0 ? resources : {},
343
+ response: response
343
344
  }) : brain.run({
344
345
  initialState: initialState,
345
346
  options: options,
@@ -347,22 +348,58 @@ export var BrainRunner = /*#__PURE__*/ function() {
347
348
  brainRunId: brainRunId,
348
349
  resources: resources !== null && resources !== void 0 ? resources : {}
349
350
  });
350
- _iteratorAbruptCompletion = false, _didIteratorError = false;
351
351
  _state.label = 1;
352
352
  case 1:
353
353
  _state.trys.push([
354
354
  1,
355
- 7,
355
+ 15,
356
+ ,
357
+ 18
358
+ ]);
359
+ _iteratorAbruptCompletion = false, _didIteratorError = false;
360
+ _state.label = 2;
361
+ case 2:
362
+ _state.trys.push([
363
+ 2,
356
364
  8,
357
- 13
365
+ 9,
366
+ 14
358
367
  ]);
359
368
  _loop = function() {
360
- var _value, event;
369
+ var _value, event, cancelledEvent;
361
370
  return _ts_generator(this, function(_state) {
362
371
  switch(_state.label){
363
372
  case 0:
364
373
  _value = _step.value;
365
374
  event = _value;
375
+ if (!(signal === null || signal === void 0 ? void 0 : signal.aborted)) return [
376
+ 3,
377
+ 2
378
+ ];
379
+ // Emit a cancelled event
380
+ cancelledEvent = {
381
+ type: BRAIN_EVENTS.CANCELLED,
382
+ status: STATUS.CANCELLED,
383
+ brainTitle: brain.title,
384
+ brainDescription: brain.structure.description,
385
+ brainRunId: brainRunId || event.brainRunId,
386
+ options: event.options
387
+ };
388
+ return [
389
+ 4,
390
+ Promise.all(adapters.map(function(adapter) {
391
+ return adapter.dispatch(cancelledEvent);
392
+ }))
393
+ ];
394
+ case 1:
395
+ _state.sent();
396
+ return [
397
+ 2,
398
+ {
399
+ v: currentState
400
+ }
401
+ ];
402
+ case 2:
366
403
  // Dispatch event to all adapters
367
404
  return [
368
405
  4,
@@ -370,7 +407,7 @@ export var BrainRunner = /*#__PURE__*/ function() {
370
407
  return adapter.dispatch(event);
371
408
  }))
372
409
  ];
373
- case 1:
410
+ case 3:
374
411
  _state.sent();
375
412
  // Update current state when steps complete
376
413
  if (event.type === BRAIN_EVENTS.STEP_COMPLETE) {
@@ -390,6 +427,15 @@ export var BrainRunner = /*#__PURE__*/ function() {
390
427
  }
391
428
  stepNumber++;
392
429
  }
430
+ // Stop execution when webhook event is encountered
431
+ if (event.type === BRAIN_EVENTS.WEBHOOK) {
432
+ return [
433
+ 2,
434
+ {
435
+ v: currentState
436
+ }
437
+ ];
438
+ }
393
439
  return [
394
440
  2
395
441
  ];
@@ -397,82 +443,115 @@ export var BrainRunner = /*#__PURE__*/ function() {
397
443
  });
398
444
  };
399
445
  _iterator = _async_iterator(brainRun);
400
- _state.label = 2;
401
- case 2:
446
+ _state.label = 3;
447
+ case 3:
402
448
  return [
403
449
  4,
404
450
  _iterator.next()
405
451
  ];
406
- case 3:
452
+ case 4:
407
453
  if (!(_iteratorAbruptCompletion = !(_step = _state.sent()).done)) return [
408
454
  3,
409
- 6
455
+ 7
410
456
  ];
411
457
  return [
412
458
  5,
413
459
  _ts_values(_loop())
414
460
  ];
415
- case 4:
461
+ case 5:
416
462
  _ret = _state.sent();
417
463
  if (_type_of(_ret) === "object") return [
418
464
  2,
419
465
  _ret.v
420
466
  ];
421
- _state.label = 5;
422
- case 5:
467
+ _state.label = 6;
468
+ case 6:
423
469
  _iteratorAbruptCompletion = false;
424
470
  return [
425
471
  3,
426
- 2
472
+ 3
427
473
  ];
428
- case 6:
474
+ case 7:
429
475
  return [
430
476
  3,
431
- 13
477
+ 14
432
478
  ];
433
- case 7:
479
+ case 8:
434
480
  err = _state.sent();
435
481
  _didIteratorError = true;
436
482
  _iteratorError = err;
437
483
  return [
438
484
  3,
439
- 13
485
+ 14
440
486
  ];
441
- case 8:
487
+ case 9:
442
488
  _state.trys.push([
443
- 8,
489
+ 9,
444
490
  ,
445
- 11,
446
- 12
491
+ 12,
492
+ 13
447
493
  ]);
448
494
  if (!(_iteratorAbruptCompletion && _iterator.return != null)) return [
449
495
  3,
450
- 10
496
+ 11
451
497
  ];
452
498
  return [
453
499
  4,
454
500
  _iterator.return()
455
501
  ];
456
- case 9:
457
- _state.sent();
458
- _state.label = 10;
459
502
  case 10:
503
+ _state.sent();
504
+ _state.label = 11;
505
+ case 11:
460
506
  return [
461
507
  3,
462
- 12
508
+ 13
463
509
  ];
464
- case 11:
510
+ case 12:
465
511
  if (_didIteratorError) {
466
512
  throw _iteratorError;
467
513
  }
468
514
  return [
469
515
  7
470
516
  ];
471
- case 12:
517
+ case 13:
472
518
  return [
473
519
  7
474
520
  ];
475
- case 13:
521
+ case 14:
522
+ return [
523
+ 3,
524
+ 18
525
+ ];
526
+ case 15:
527
+ error = _state.sent();
528
+ if (!(signal === null || signal === void 0 ? void 0 : signal.aborted)) return [
529
+ 3,
530
+ 17
531
+ ];
532
+ cancelledEvent = {
533
+ type: BRAIN_EVENTS.CANCELLED,
534
+ status: STATUS.CANCELLED,
535
+ brainTitle: brain.title,
536
+ brainDescription: brain.structure.description,
537
+ brainRunId: brainRunId || '',
538
+ options: options || {}
539
+ };
540
+ return [
541
+ 4,
542
+ Promise.all(adapters.map(function(adapter) {
543
+ return adapter.dispatch(cancelledEvent);
544
+ }))
545
+ ];
546
+ case 16:
547
+ _state.sent();
548
+ return [
549
+ 2,
550
+ currentState
551
+ ];
552
+ case 17:
553
+ throw error;
554
+ case 18:
476
555
  return [
477
556
  2,
478
557
  currentState
@@ -289,6 +289,10 @@ function _overload_yield(value, kind) {
289
289
  this.v = value;
290
290
  this.k = kind;
291
291
  }
292
+ function _type_of(obj) {
293
+ "@swc/helpers - typeof";
294
+ return obj && typeof Symbol !== "undefined" && obj.constructor === Symbol ? "symbol" : typeof obj;
295
+ }
292
296
  function _wrap_async_generator(fn) {
293
297
  return function() {
294
298
  return new _async_generator(fn.apply(this, arguments));
@@ -473,7 +477,11 @@ export var Brain = /*#__PURE__*/ function() {
473
477
  action: action
474
478
  };
475
479
  this.blocks.push(stepBlock);
476
- return this.nextBrain();
480
+ // Create next brain with inferred response type
481
+ var nextBrain = new Brain(this.title, this.description).withBlocks(this.blocks);
482
+ nextBrain.services = this.services;
483
+ nextBrain.optionsSchema = this.optionsSchema;
484
+ return nextBrain;
477
485
  }
478
486
  },
479
487
  {
@@ -510,15 +518,16 @@ export var Brain = /*#__PURE__*/ function() {
510
518
  title: title,
511
519
  action: function(_param) {
512
520
  return _async_to_generator(function() {
513
- var state, runClient, options, resources, services, template, outputSchema, stepClient, schema, schemaName, client, prompt, response, stateWithResponse;
521
+ var state, runClient, options, resources, webhookResponse, services, template, outputSchema, stepClient, schema, schemaName, client, prompt, response, stateWithResponse;
514
522
  return _ts_generator(this, function(_state) {
515
523
  switch(_state.label){
516
524
  case 0:
517
- state = _param.state, runClient = _param.client, options = _param.options, resources = _param.resources, services = _object_without_properties(_param, [
525
+ state = _param.state, runClient = _param.client, options = _param.options, resources = _param.resources, webhookResponse = _param.response, services = _object_without_properties(_param, [
518
526
  "state",
519
527
  "client",
520
528
  "options",
521
- "resources"
529
+ "resources",
530
+ "response"
522
531
  ]);
523
532
  template = config.template, outputSchema = config.outputSchema, stepClient = config.client;
524
533
  schema = outputSchema.schema, schemaName = outputSchema.name;
@@ -679,7 +688,8 @@ var BrainEventStream = /*#__PURE__*/ function() {
679
688
  _define_property(this, "options", void 0);
680
689
  _define_property(this, "services", void 0);
681
690
  _define_property(this, "resources", void 0);
682
- var _params_initialState = params.initialState, initialState = _params_initialState === void 0 ? {} : _params_initialState, initialCompletedSteps = params.initialCompletedSteps, blocks = params.blocks, title = params.title, description = params.description, providedBrainRunId = params.brainRunId, _params_options = params.options, options = _params_options === void 0 ? {} : _params_options, client = params.client, services = params.services, _params_resources = params.resources, resources = _params_resources === void 0 ? {} : _params_resources;
691
+ _define_property(this, "currentResponse", undefined);
692
+ var _params_initialState = params.initialState, initialState = _params_initialState === void 0 ? {} : _params_initialState, initialCompletedSteps = params.initialCompletedSteps, blocks = params.blocks, title = params.title, description = params.description, providedBrainRunId = params.brainRunId, _params_options = params.options, options = _params_options === void 0 ? {} : _params_options, client = params.client, services = params.services, _params_resources = params.resources, resources = _params_resources === void 0 ? {} : _params_resources, response = params.response;
683
693
  this.initialState = initialState;
684
694
  this.title = title;
685
695
  this.description = description;
@@ -722,6 +732,10 @@ var BrainEventStream = /*#__PURE__*/ function() {
722
732
  }
723
733
  // Use provided ID if available, otherwise generate one
724
734
  this.brainRunId = providedBrainRunId !== null && providedBrainRunId !== void 0 ? providedBrainRunId : uuidv4();
735
+ // Set initial response if provided (for webhook restarts)
736
+ if (response) {
737
+ this.currentResponse = response;
738
+ }
725
739
  }
726
740
  _create_class(BrainEventStream, [
727
741
  {
@@ -924,7 +938,7 @@ var BrainEventStream = /*#__PURE__*/ function() {
924
938
  key: "executeStep",
925
939
  value: function executeStep(step) {
926
940
  return _wrap_async_generator(function() {
927
- var block, initialState, patches, _this_options, innerRun, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, event, err, innerState, prevState, _, prevState1, _this_options1, _1;
941
+ var block, initialState, patches, _this_options, innerRun, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, event, err, innerState, prevState, _, prevState1, _this_options1, result, serializedWaitFor;
928
942
  return _ts_generator(this, function(_state) {
929
943
  switch(_state.label){
930
944
  case 0:
@@ -1049,32 +1063,55 @@ var BrainEventStream = /*#__PURE__*/ function() {
1049
1063
  _state.sent();
1050
1064
  return [
1051
1065
  3,
1052
- 19
1066
+ 20
1053
1067
  ];
1054
1068
  case 16:
1055
1069
  // Get previous state before action
1056
1070
  prevState1 = this.currentState;
1057
- // Execute regular step
1058
- _1 = this;
1059
1071
  return [
1060
1072
  4,
1061
1073
  _await_async_generator(block.action(_object_spread({
1062
1074
  state: this.currentState,
1063
1075
  options: (_this_options1 = this.options) !== null && _this_options1 !== void 0 ? _this_options1 : {},
1064
1076
  client: this.client,
1065
- resources: this.resources
1077
+ resources: this.resources,
1078
+ response: this.currentResponse
1066
1079
  }, this.services)))
1067
1080
  ];
1068
1081
  case 17:
1069
- _1.currentState = _state.sent();
1082
+ result = _state.sent();
1083
+ this.currentState = result && (typeof result === "undefined" ? "undefined" : _type_of(result)) === 'object' && 'waitFor' in result ? result.state : result;
1070
1084
  return [
1071
1085
  5,
1072
1086
  _ts_values(_async_generator_delegate(_async_iterator(this.completeStep(step, prevState1))))
1073
1087
  ];
1074
1088
  case 18:
1075
1089
  _state.sent();
1076
- _state.label = 19;
1090
+ if (!(result && (typeof result === "undefined" ? "undefined" : _type_of(result)) === 'object' && 'waitFor' in result)) return [
1091
+ 3,
1092
+ 20
1093
+ ];
1094
+ // Serialize webhook registrations (remove Zod schemas for event serializability)
1095
+ serializedWaitFor = result.waitFor.map(function(registration) {
1096
+ return {
1097
+ slug: registration.slug,
1098
+ identifier: registration.identifier
1099
+ };
1100
+ });
1101
+ return [
1102
+ 4,
1103
+ {
1104
+ type: BRAIN_EVENTS.WEBHOOK,
1105
+ waitFor: serializedWaitFor,
1106
+ state: this.currentState,
1107
+ options: this.options,
1108
+ brainRunId: this.brainRunId
1109
+ }
1110
+ ];
1077
1111
  case 19:
1112
+ _state.sent();
1113
+ _state.label = 20;
1114
+ case 20:
1078
1115
  return [
1079
1116
  2
1080
1117
  ];
@@ -5,11 +5,14 @@ export var BRAIN_EVENTS = {
5
5
  STEP_COMPLETE: 'step:complete',
6
6
  STEP_STATUS: 'step:status',
7
7
  ERROR: 'brain:error',
8
- COMPLETE: 'brain:complete'
8
+ COMPLETE: 'brain:complete',
9
+ CANCELLED: 'brain:cancelled',
10
+ WEBHOOK: 'brain:webhook'
9
11
  };
10
12
  export var STATUS = {
11
13
  PENDING: 'pending',
12
14
  RUNNING: 'running',
13
15
  COMPLETE: 'complete',
14
- ERROR: 'error'
16
+ ERROR: 'error',
17
+ CANCELLED: 'cancelled'
15
18
  };
@@ -0,0 +1,269 @@
1
+ function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
2
+ try {
3
+ var info = gen[key](arg);
4
+ var value = info.value;
5
+ } catch (error) {
6
+ reject(error);
7
+ return;
8
+ }
9
+ if (info.done) {
10
+ resolve(value);
11
+ } else {
12
+ Promise.resolve(value).then(_next, _throw);
13
+ }
14
+ }
15
+ function _async_to_generator(fn) {
16
+ return function() {
17
+ var self = this, args = arguments;
18
+ return new Promise(function(resolve, reject) {
19
+ var gen = fn.apply(self, args);
20
+ function _next(value) {
21
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
22
+ }
23
+ function _throw(err) {
24
+ asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
25
+ }
26
+ _next(undefined);
27
+ });
28
+ };
29
+ }
30
+ function _define_property(obj, key, value) {
31
+ if (key in obj) {
32
+ Object.defineProperty(obj, key, {
33
+ value: value,
34
+ enumerable: true,
35
+ configurable: true,
36
+ writable: true
37
+ });
38
+ } else {
39
+ obj[key] = value;
40
+ }
41
+ return obj;
42
+ }
43
+ function _object_spread(target) {
44
+ for(var i = 1; i < arguments.length; i++){
45
+ var source = arguments[i] != null ? arguments[i] : {};
46
+ var ownKeys = Object.keys(source);
47
+ if (typeof Object.getOwnPropertySymbols === "function") {
48
+ ownKeys = ownKeys.concat(Object.getOwnPropertySymbols(source).filter(function(sym) {
49
+ return Object.getOwnPropertyDescriptor(source, sym).enumerable;
50
+ }));
51
+ }
52
+ ownKeys.forEach(function(key) {
53
+ _define_property(target, key, source[key]);
54
+ });
55
+ }
56
+ return target;
57
+ }
58
+ function ownKeys(object, enumerableOnly) {
59
+ var keys = Object.keys(object);
60
+ if (Object.getOwnPropertySymbols) {
61
+ var symbols = Object.getOwnPropertySymbols(object);
62
+ if (enumerableOnly) {
63
+ symbols = symbols.filter(function(sym) {
64
+ return Object.getOwnPropertyDescriptor(object, sym).enumerable;
65
+ });
66
+ }
67
+ keys.push.apply(keys, symbols);
68
+ }
69
+ return keys;
70
+ }
71
+ function _object_spread_props(target, source) {
72
+ source = source != null ? source : {};
73
+ if (Object.getOwnPropertyDescriptors) {
74
+ Object.defineProperties(target, Object.getOwnPropertyDescriptors(source));
75
+ } else {
76
+ ownKeys(Object(source)).forEach(function(key) {
77
+ Object.defineProperty(target, key, Object.getOwnPropertyDescriptor(source, key));
78
+ });
79
+ }
80
+ return target;
81
+ }
82
+ function _ts_generator(thisArg, body) {
83
+ var f, y, t, _ = {
84
+ label: 0,
85
+ sent: function() {
86
+ if (t[0] & 1) throw t[1];
87
+ return t[1];
88
+ },
89
+ trys: [],
90
+ ops: []
91
+ }, g = Object.create((typeof Iterator === "function" ? Iterator : Object).prototype);
92
+ return g.next = verb(0), g["throw"] = verb(1), g["return"] = verb(2), typeof Symbol === "function" && (g[Symbol.iterator] = function() {
93
+ return this;
94
+ }), g;
95
+ function verb(n) {
96
+ return function(v) {
97
+ return step([
98
+ n,
99
+ v
100
+ ]);
101
+ };
102
+ }
103
+ function step(op) {
104
+ if (f) throw new TypeError("Generator is already executing.");
105
+ while(g && (g = 0, op[0] && (_ = 0)), _)try {
106
+ if (f = 1, y && (t = op[0] & 2 ? y["return"] : op[0] ? y["throw"] || ((t = y["return"]) && t.call(y), 0) : y.next) && !(t = t.call(y, op[1])).done) return t;
107
+ if (y = 0, t) op = [
108
+ op[0] & 2,
109
+ t.value
110
+ ];
111
+ switch(op[0]){
112
+ case 0:
113
+ case 1:
114
+ t = op;
115
+ break;
116
+ case 4:
117
+ _.label++;
118
+ return {
119
+ value: op[1],
120
+ done: false
121
+ };
122
+ case 5:
123
+ _.label++;
124
+ y = op[1];
125
+ op = [
126
+ 0
127
+ ];
128
+ continue;
129
+ case 7:
130
+ op = _.ops.pop();
131
+ _.trys.pop();
132
+ continue;
133
+ default:
134
+ if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) {
135
+ _ = 0;
136
+ continue;
137
+ }
138
+ if (op[0] === 3 && (!t || op[1] > t[0] && op[1] < t[3])) {
139
+ _.label = op[1];
140
+ break;
141
+ }
142
+ if (op[0] === 6 && _.label < t[1]) {
143
+ _.label = t[1];
144
+ t = op;
145
+ break;
146
+ }
147
+ if (t && _.label < t[2]) {
148
+ _.label = t[2];
149
+ _.ops.push(op);
150
+ break;
151
+ }
152
+ if (t[2]) _.ops.pop();
153
+ _.trys.pop();
154
+ continue;
155
+ }
156
+ op = body.call(thisArg, _);
157
+ } catch (e) {
158
+ op = [
159
+ 6,
160
+ e
161
+ ];
162
+ y = 0;
163
+ } finally{
164
+ f = t = 0;
165
+ }
166
+ if (op[0] & 5) throw op[1];
167
+ return {
168
+ value: op[0] ? op[1] : void 0,
169
+ done: true
170
+ };
171
+ }
172
+ }
173
+ import { brain } from './brain.js';
174
+ import { z } from 'zod';
175
+ import { createWebhook } from './webhook.js';
176
+ // Example webhooks using createWebhook factory
177
+ export var slackWebhook = createWebhook('slack', z.object({
178
+ message: z.string(),
179
+ threadId: z.string()
180
+ }), function(request) {
181
+ return _async_to_generator(function() {
182
+ var body;
183
+ return _ts_generator(this, function(_state) {
184
+ switch(_state.label){
185
+ case 0:
186
+ return [
187
+ 4,
188
+ request.json()
189
+ ];
190
+ case 1:
191
+ body = _state.sent();
192
+ return [
193
+ 2,
194
+ {
195
+ identifier: body.thread_ts,
196
+ response: {
197
+ message: body.text,
198
+ threadId: body.thread_ts
199
+ }
200
+ }
201
+ ];
202
+ }
203
+ });
204
+ })();
205
+ });
206
+ export var emailWebhook = createWebhook('email', z.object({
207
+ subject: z.string(),
208
+ body: z.string(),
209
+ from: z.string()
210
+ }), function(request) {
211
+ return _async_to_generator(function() {
212
+ var body;
213
+ return _ts_generator(this, function(_state) {
214
+ switch(_state.label){
215
+ case 0:
216
+ return [
217
+ 4,
218
+ request.json()
219
+ ];
220
+ case 1:
221
+ body = _state.sent();
222
+ return [
223
+ 2,
224
+ {
225
+ identifier: body.messageId,
226
+ response: {
227
+ subject: body.subject,
228
+ body: body.body,
229
+ from: body.from
230
+ }
231
+ }
232
+ ];
233
+ }
234
+ });
235
+ })();
236
+ });
237
+ var myBrain = brain('My Brain').step('My Step', function(param) {
238
+ var state = param.state;
239
+ return {
240
+ state: _object_spread({
241
+ cool: 'thing'
242
+ }, state),
243
+ waitFor: [
244
+ slackWebhook('thread-123'),
245
+ emailWebhook('email-456')
246
+ ]
247
+ };
248
+ }).step('My Step 2', function(param) {
249
+ var state = param.state, response = param.response;
250
+ if (response) {
251
+ if ('threadId' in response) {
252
+ // Handle Slack webhook response
253
+ return _object_spread_props(_object_spread({}, state), {
254
+ slackMessage: 'slack'
255
+ });
256
+ } else if ('subject' in response) {
257
+ // Handle Email webhook response
258
+ var subject = response.subject; // This should work if type inference is correct
259
+ return _object_spread_props(_object_spread({}, state), {
260
+ emailSubject: subject
261
+ });
262
+ }
263
+ }
264
+ return state;
265
+ }).step('My Step 3', function(param) {
266
+ var state = param.state;
267
+ return state;
268
+ });
269
+ export default myBrain;
@@ -0,0 +1,16 @@
1
+ // Factory function to create webhooks
2
+ export function createWebhook(slug, schema, handler) {
3
+ // Create the registration function
4
+ var webhookFn = function(identifier) {
5
+ return {
6
+ slug: slug,
7
+ identifier: identifier,
8
+ schema: schema
9
+ };
10
+ };
11
+ // Attach properties to the function
12
+ webhookFn.handler = handler;
13
+ webhookFn.slug = slug;
14
+ webhookFn.schema = schema;
15
+ return webhookFn;
16
+ }
package/dist/src/index.js CHANGED
@@ -8,4 +8,5 @@ export { createPatch, applyPatches } from './dsl/json-patch.js';
8
8
  // NOTE: Not 100% sure this is still needed - worth re-evaluating if we can remove this.
9
9
  export { z } from 'zod';
10
10
  export { createResources } from './resources/resources.js';
11
+ export { createWebhook } from './dsl/webhook.js';
11
12
  export { RESOURCE_TYPES } from './resources/resources.js';
@@ -13,12 +13,14 @@ export declare class BrainRunner {
13
13
  withAdapters(adapters: Adapter[]): BrainRunner;
14
14
  withClient(client: ObjectGenerator): BrainRunner;
15
15
  withResources(resources: Resources): BrainRunner;
16
- run<TOptions extends JsonObject = {}, TState extends State = {}>(brain: Brain<TOptions, TState, any>, { initialState, options, initialCompletedSteps, brainRunId, endAfter, }?: {
16
+ run<TOptions extends JsonObject = {}, TState extends State = {}>(brain: Brain<TOptions, TState, any>, { initialState, options, initialCompletedSteps, brainRunId, endAfter, signal, response, }?: {
17
17
  initialState?: TState;
18
18
  options?: TOptions;
19
19
  initialCompletedSteps?: SerializedStep[] | never;
20
20
  brainRunId?: string | never;
21
21
  endAfter?: number;
22
+ signal?: AbortSignal;
23
+ response?: JsonObject;
22
24
  }): Promise<TState>;
23
25
  }
24
26
  //# sourceMappingURL=brain-runner.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"brain-runner.d.ts","sourceRoot":"","sources":["../../../src/dsl/brain-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,qBAAa,WAAW;IAEpB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE;QACf,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,eAAe,CAAC;QACxB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB;IAGH,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW;IAQ9C,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW;IAOhD,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,WAAW;IAO1C,GAAG,CAAC,QAAQ,SAAS,UAAU,GAAG,EAAE,EAAE,MAAM,SAAS,KAAK,GAAG,EAAE,EACnE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EACnC,EACE,YAA2B,EAC3B,OAAO,EACP,qBAAqB,EACrB,UAAU,EACV,QAAQ,GACT,GAAE;QACD,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,qBAAqB,CAAC,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;QACjD,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;KACd,GACL,OAAO,CAAC,MAAM,CAAC;CAwDnB"}
1
+ {"version":3,"file":"brain-runner.d.ts","sourceRoot":"","sources":["../../../src/dsl/brain-runner.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AACxD,OAAO,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AACpD,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,qBAAa,WAAW;IAEpB,OAAO,CAAC,OAAO;gBAAP,OAAO,EAAE;QACf,QAAQ,EAAE,OAAO,EAAE,CAAC;QACpB,MAAM,EAAE,eAAe,CAAC;QACxB,SAAS,CAAC,EAAE,SAAS,CAAC;KACvB;IAGH,YAAY,CAAC,QAAQ,EAAE,OAAO,EAAE,GAAG,WAAW;IAQ9C,UAAU,CAAC,MAAM,EAAE,eAAe,GAAG,WAAW;IAOhD,aAAa,CAAC,SAAS,EAAE,SAAS,GAAG,WAAW;IAO1C,GAAG,CAAC,QAAQ,SAAS,UAAU,GAAG,EAAE,EAAE,MAAM,SAAS,KAAK,GAAG,EAAE,EACnE,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,GAAG,CAAC,EACnC,EACE,YAA2B,EAC3B,OAAO,EACP,qBAAqB,EACrB,UAAU,EACV,QAAQ,EACR,MAAM,EACN,QAAQ,GACT,GAAE;QACD,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,OAAO,CAAC,EAAE,QAAQ,CAAC;QACnB,qBAAqB,CAAC,EAAE,cAAc,EAAE,GAAG,KAAK,CAAC;QACjD,UAAU,CAAC,EAAE,MAAM,GAAG,KAAK,CAAC;QAC5B,QAAQ,CAAC,EAAE,MAAM,CAAC;QAClB,MAAM,CAAC,EAAE,WAAW,CAAC;QACrB,QAAQ,CAAC,EAAE,UAAU,CAAC;KAClB,GACL,OAAO,CAAC,MAAM,CAAC;CA8FnB"}
@@ -3,11 +3,25 @@ import type { ObjectGenerator } from '../clients/types.js';
3
3
  import type { State, JsonPatch, JsonObject } from './types.js';
4
4
  import { STATUS, BRAIN_EVENTS } from './constants.js';
5
5
  import type { Resources } from '../resources/resources.js';
6
+ import type { ExtractWebhookResponses, SerializedWebhookRegistration } from './webhook.js';
6
7
  export type SerializedError = {
7
8
  name: string;
8
9
  message: string;
9
10
  stack?: string;
10
11
  };
12
+ export type StepAction<TStateIn, TStateOut, TOptions extends JsonObject = JsonObject, TServices extends object = object, TResponseIn extends JsonObject | undefined = undefined, TWaitFor extends readonly any[] = readonly []> = (params: {
13
+ state: TStateIn;
14
+ options: TOptions;
15
+ client: ObjectGenerator;
16
+ resources: Resources;
17
+ response: TResponseIn;
18
+ } & TServices) => TStateOut | Promise<TStateOut> | {
19
+ state: TStateOut;
20
+ waitFor: TWaitFor;
21
+ } | Promise<{
22
+ state: TStateOut;
23
+ waitFor: TWaitFor;
24
+ }>;
11
25
  interface BaseEvent<TOptions extends JsonObject = JsonObject> {
12
26
  type: (typeof BRAIN_EVENTS)[keyof typeof BRAIN_EVENTS];
13
27
  options: TOptions;
@@ -31,6 +45,10 @@ export interface BrainErrorEvent<TOptions extends JsonObject = JsonObject> exten
31
45
  status: typeof STATUS.ERROR;
32
46
  error: SerializedError;
33
47
  }
48
+ export interface BrainCancelledEvent<TOptions extends JsonObject = JsonObject> extends BrainBaseEvent<TOptions> {
49
+ type: typeof BRAIN_EVENTS.CANCELLED;
50
+ status: typeof STATUS.CANCELLED;
51
+ }
34
52
  export interface StepStatusEvent<TOptions extends JsonObject = JsonObject> extends BaseEvent<TOptions> {
35
53
  type: typeof BRAIN_EVENTS.STEP_STATUS;
36
54
  steps: SerializedStepStatus[];
@@ -48,7 +66,12 @@ export interface StepCompletedEvent<TOptions extends JsonObject = JsonObject> ex
48
66
  stepId: string;
49
67
  patch: JsonPatch;
50
68
  }
51
- export type BrainEvent<TOptions extends JsonObject = JsonObject> = BrainStartEvent<TOptions> | BrainCompleteEvent<TOptions> | BrainErrorEvent<TOptions> | StepStatusEvent<TOptions> | StepStartedEvent<TOptions> | StepCompletedEvent<TOptions>;
69
+ export interface WebhookEvent<TOptions extends JsonObject = JsonObject> extends BaseEvent<TOptions> {
70
+ type: typeof BRAIN_EVENTS.WEBHOOK;
71
+ waitFor: SerializedWebhookRegistration[];
72
+ state: State;
73
+ }
74
+ export type BrainEvent<TOptions extends JsonObject = JsonObject> = BrainStartEvent<TOptions> | BrainCompleteEvent<TOptions> | BrainErrorEvent<TOptions> | BrainCancelledEvent<TOptions> | StepStatusEvent<TOptions> | StepStartedEvent<TOptions> | StepCompletedEvent<TOptions> | WebhookEvent<TOptions>;
52
75
  export interface SerializedStep {
53
76
  title: string;
54
77
  status: (typeof STATUS)[keyof typeof STATUS];
@@ -85,8 +108,9 @@ export interface RerunParams<TOptions extends JsonObject = JsonObject> extends B
85
108
  initialState: State;
86
109
  initialCompletedSteps: SerializedStep[];
87
110
  brainRunId: string;
111
+ response?: JsonObject;
88
112
  }
89
- export declare class Brain<TOptions extends JsonObject = JsonObject, TState extends State = object, TServices extends object = object> {
113
+ export declare class Brain<TOptions extends JsonObject = JsonObject, TState extends State = object, TServices extends object = object, TResponse extends JsonObject | undefined = undefined> {
90
114
  readonly title: string;
91
115
  private description?;
92
116
  private blocks;
@@ -95,19 +119,26 @@ export declare class Brain<TOptions extends JsonObject = JsonObject, TState exte
95
119
  private optionsSchema?;
96
120
  constructor(title: string, description?: string | undefined);
97
121
  get structure(): BrainStructure;
98
- withServices<TNewServices extends object>(services: TNewServices): Brain<TOptions, TState, TNewServices>;
99
- withOptionsSchema<TSchema extends z.ZodSchema>(schema: TSchema): Brain<z.infer<TSchema>, TState, TServices>;
100
- step<TNewState extends State>(title: string, action: (params: {
122
+ withServices<TNewServices extends object>(services: TNewServices): Brain<TOptions, TState, TNewServices, TResponse>;
123
+ withOptionsSchema<TSchema extends z.ZodSchema>(schema: TSchema): Brain<z.infer<TSchema>, TState, TServices, TResponse>;
124
+ step<TNewState extends State, TWaitFor extends readonly any[] = readonly []>(title: string, action: (params: {
101
125
  state: TState;
102
126
  options: TOptions;
103
127
  client: ObjectGenerator;
104
128
  resources: Resources;
105
- } & TServices) => TNewState | Promise<TNewState>): Brain<TOptions, TNewState, TServices>;
129
+ response: TResponse;
130
+ } & TServices) => TNewState | Promise<TNewState> | {
131
+ state: TNewState;
132
+ waitFor: TWaitFor;
133
+ } | Promise<{
134
+ state: TNewState;
135
+ waitFor: TWaitFor;
136
+ }>): Brain<TOptions, TNewState, TServices, ExtractWebhookResponses<TWaitFor>>;
106
137
  brain<TInnerState extends State, TNewState extends State>(title: string, innerBrain: Brain<TOptions, TInnerState, TServices>, action: (params: {
107
138
  state: TState;
108
139
  brainState: TInnerState;
109
140
  services: TServices;
110
- }) => TNewState, initialState?: State | ((state: TState) => State)): Brain<TOptions, TNewState, TServices>;
141
+ }) => TNewState, initialState?: State | ((state: TState) => State)): Brain<TOptions, TNewState, TServices, undefined>;
111
142
  prompt<TResponseKey extends string & {
112
143
  readonly brand?: unique symbol;
113
144
  }, TSchema extends z.ZodObject<any>, TNewState extends State = TState & {
@@ -125,7 +156,7 @@ export declare class Brain<TOptions extends JsonObject = JsonObject, TState exte
125
156
  options: TOptions;
126
157
  prompt: string;
127
158
  resources: Resources;
128
- } & TServices) => TNewState | Promise<TNewState>): Brain<TOptions, TNewState, TServices>;
159
+ } & TServices) => TNewState | Promise<TNewState>): Brain<TOptions, TNewState, TServices, undefined>;
129
160
  run(params: InitialRunParams<TOptions>): AsyncGenerator<BrainEvent<TOptions>>;
130
161
  run(params: RerunParams<TOptions>): AsyncGenerator<BrainEvent<TOptions>>;
131
162
  private withBlocks;
@@ -1 +1 @@
1
- {"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../../src/dsl/brain.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,KAAK,EAAE,KAAK,EAAE,SAAS,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEtD,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,2BAA2B,CAAC;AAE3D,MAAM,MAAM,eAAe,GAAG;IAC5B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB,CAAC;AAIF,UAAU,SAAS,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU;IAC1D,IAAI,EAAE,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,OAAO,YAAY,CAAC,CAAC;IACvD,OAAO,EAAE,QAAQ,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;CACpB;AAGD,UAAU,cAAc,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CAC/D,SAAQ,SAAS,CAAC,QAAQ,CAAC;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CACvE,SAAQ,cAAc,CAAC,QAAQ,CAAC;IAChC,IAAI,EAAE,OAAO,YAAY,CAAC,KAAK,GAAG,OAAO,YAAY,CAAC,OAAO,CAAC;IAC9D,YAAY,EAAE,KAAK,CAAC;IACpB,MAAM,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC;CAC/B;AAED,MAAM,WAAW,kBAAkB,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CAC1E,SAAQ,cAAc,CAAC,QAAQ,CAAC;IAChC,IAAI,EAAE,OAAO,YAAY,CAAC,QAAQ,CAAC;IACnC,MAAM,EAAE,OAAO,MAAM,CAAC,QAAQ,CAAC;CAChC;AAED,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CACvE,SAAQ,cAAc,CAAC,QAAQ,CAAC;IAChC,IAAI,EAAE,OAAO,YAAY,CAAC,KAAK,CAAC;IAChC,MAAM,EAAE,OAAO,MAAM,CAAC,KAAK,CAAC;IAC5B,KAAK,EAAE,eAAe,CAAC;CACxB;AAGD,MAAM,WAAW,eAAe,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CACvE,SAAQ,SAAS,CAAC,QAAQ,CAAC;IAC3B,IAAI,EAAE,OAAO,YAAY,CAAC,WAAW,CAAC;IACtC,KAAK,EAAE,oBAAoB,EAAE,CAAC;CAC/B;AAGD,MAAM,WAAW,gBAAgB,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CACxE,SAAQ,SAAS,CAAC,QAAQ,CAAC;IAC3B,IAAI,EAAE,OAAO,YAAY,CAAC,UAAU,CAAC;IACrC,MAAM,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,kBAAkB,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CAC1E,SAAQ,SAAS,CAAC,QAAQ,CAAC;IAC3B,IAAI,EAAE,OAAO,YAAY,CAAC,aAAa,CAAC;IACxC,MAAM,EAAE,OAAO,MAAM,CAAC,OAAO,CAAC;IAC9B,SAAS,EAAE,MAAM,CAAC;IAClB,MAAM,EAAE,MAAM,CAAC;IACf,KAAK,EAAE,SAAS,CAAC;CAClB;AAGD,MAAM,MAAM,UAAU,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,IAC3D,eAAe,CAAC,QAAQ,CAAC,GACzB,kBAAkB,CAAC,QAAQ,CAAC,GAC5B,eAAe,CAAC,QAAQ,CAAC,GACzB,eAAe,CAAC,QAAQ,CAAC,GACzB,gBAAgB,CAAC,QAAQ,CAAC,GAC1B,kBAAkB,CAAC,QAAQ,CAAC,CAAC;AAEjC,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,MAAM,EAAE,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,OAAO,MAAM,CAAC,CAAC;IAC7C,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,CAAC,EAAE,SAAS,CAAC;CACnB;AAGD,MAAM,MAAM,oBAAoB,GAAG,IAAI,CAAC,cAAc,EAAE,OAAO,CAAC,CAAC;AAGjE,MAAM,WAAW,cAAc;IAC7B,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC;QACvB,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,CAAC,EAAE,cAAc,CAAC;KAC7B,CAAC,CAAC;CACJ;AAGD,MAAM,WAAW,YAAY;IAC3B,CACE,QAAQ,SAAS,UAAU,GAAG,UAAU,EACxC,MAAM,SAAS,KAAK,GAAG,MAAM,EAC7B,SAAS,SAAS,MAAM,GAAG,MAAM,EAEjC,WAAW,EAAE,MAAM,GAAG;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,WAAW,CAAC,EAAE,MAAM,CAAA;KAAE,GAC5D,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;CACvC;AA+CD,UAAU,aAAa,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU;IAC9D,MAAM,EAAE,eAAe,CAAC;IACxB,SAAS,CAAC,EAAE,SAAS,CAAC;IACtB,OAAO,CAAC,EAAE,QAAQ,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CACxE,SAAQ,aAAa,CAAC,QAAQ,CAAC;IAC/B,YAAY,CAAC,EAAE,KAAK,CAAC;IACrB,qBAAqB,CAAC,EAAE,KAAK,CAAC;IAC9B,UAAU,CAAC,EAAE,MAAM,CAAC;CACrB;AAED,MAAM,WAAW,WAAW,CAAC,QAAQ,SAAS,UAAU,GAAG,UAAU,CACnE,SAAQ,aAAa,CAAC,QAAQ,CAAC;IAC/B,YAAY,EAAE,KAAK,CAAC;IACpB,qBAAqB,EAAE,cAAc,EAAE,CAAC;IACxC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,qBAAa,KAAK,CAChB,QAAQ,SAAS,UAAU,GAAG,UAAU,EACxC,MAAM,SAAS,KAAK,GAAG,MAAM,EAC7B,SAAS,SAAS,MAAM,GAAG,MAAM;aAOL,KAAK,EAAE,MAAM;IAAE,OAAO,CAAC,WAAW,CAAC;IAL/D,OAAO,CAAC,MAAM,CAA8C;IACrD,IAAI,EAAE,OAAO,CAAW;IAC/B,OAAO,CAAC,QAAQ,CAA8B;IAC9C,OAAO,CAAC,aAAa,CAAC,CAAmB;gBAEb,KAAK,EAAE,MAAM,EAAU,WAAW,CAAC,EAAE,MAAM,YAAA;IAEvE,IAAI,SAAS,IAAI,cAAc,CAoB9B;IAID,YAAY,CAAC,YAAY,SAAS,MAAM,EACtC,QAAQ,EAAE,YAAY,GACrB,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,CAAC;IAcxC,iBAAiB,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,EAC3C,MAAM,EAAE,OAAO,GACd,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,EAAE,MAAM,EAAE,SAAS,CAAC;IAY7C,IAAI,CAAC,SAAS,SAAS,KAAK,EAC1B,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,CACN,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,OAAO,EAAE,QAAQ,CAAC;QAClB,MAAM,EAAE,eAAe,CAAC;QACxB,SAAS,EAAE,SAAS,CAAC;KACtB,GAAG,SAAS,KACV,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IAWrC,KAAK,CAAC,WAAW,SAAS,KAAK,EAAE,SAAS,SAAS,KAAK,EACtD,KAAK,EAAE,MAAM,EACb,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE,SAAS,CAAC,EACnD,MAAM,EAAE,CAAC,MAAM,EAAE;QACf,KAAK,EAAE,MAAM,CAAC;QACd,UAAU,EAAE,WAAW,CAAC;QACxB,QAAQ,EAAE,SAAS,CAAC;KACrB,KAAK,SAAS,EACf,YAAY,CAAC,EAAE,KAAK,GAAG,CAAC,CAAC,KAAK,EAAE,MAAM,KAAK,KAAK,CAAC;IAwBnD,MAAM,CACJ,YAAY,SAAS,MAAM,GAAG;QAAE,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,MAAM,CAAA;KAAE,EAChE,OAAO,SAAS,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAChC,SAAS,SAAS,KAAK,GAAG,MAAM,GAAG;SAChC,CAAC,IAAI,YAAY,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC;KACtC,EAED,KAAK,EAAE,MAAM,EACb,MAAM,EAAE;QACN,QAAQ,EAAE,CACR,KAAK,EAAE,MAAM,EACb,SAAS,EAAE,SAAS,KACjB,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC;QAC9B,YAAY,EAAE;YACZ,MAAM,EAAE,OAAO,CAAC;YAChB,IAAI,EAAE,YAAY,GAAG,CAAC,MAAM,SAAS,YAAY,GAAG,KAAK,GAAG,OAAO,CAAC,CAAC;SACtE,CAAC;QACF,MAAM,CAAC,EAAE,eAAe,CAAC;KAC1B,EACD,MAAM,CAAC,EAAE,CACP,MAAM,EAAE;QACN,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC3B,OAAO,EAAE,QAAQ,CAAC;QAClB,MAAM,EAAE,MAAM,CAAC;QACf,SAAS,EAAE,SAAS,CAAC;KACtB,GAAG,SAAS,KACV,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC;IA2CrC,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAC7E,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAAG,cAAc,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;IAiCxE,OAAO,CAAC,UAAU;IAKlB,OAAO,CAAC,SAAS;CAkBlB;AAoTD,eAAO,MAAM,KAAK,EAAE,YAkBnB,CAAC"}
1
+ {"version":3,"file":"brain.d.ts","sourceRoot":"","sources":["../../../src/dsl/brain.ts"],"names":[],"mappings":"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"}
@@ -6,11 +6,14 @@ export declare const BRAIN_EVENTS: {
6
6
  readonly STEP_STATUS: "step:status";
7
7
  readonly ERROR: "brain:error";
8
8
  readonly COMPLETE: "brain:complete";
9
+ readonly CANCELLED: "brain:cancelled";
10
+ readonly WEBHOOK: "brain:webhook";
9
11
  };
10
12
  export declare const STATUS: {
11
13
  readonly PENDING: "pending";
12
14
  readonly RUNNING: "running";
13
15
  readonly COMPLETE: "complete";
14
16
  readonly ERROR: "error";
17
+ readonly CANCELLED: "cancelled";
15
18
  };
16
19
  //# sourceMappingURL=constants.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/dsl/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;CAQf,CAAC;AAEX,eAAO,MAAM,MAAM;;;;;CAKT,CAAC"}
1
+ {"version":3,"file":"constants.d.ts","sourceRoot":"","sources":["../../../src/dsl/constants.ts"],"names":[],"mappings":"AAAA,eAAO,MAAM,YAAY;;;;;;;;;;CAUf,CAAC;AAEX,eAAO,MAAM,MAAM;;;;;;CAMT,CAAC"}
@@ -0,0 +1,35 @@
1
+ import { z } from 'zod';
2
+ export declare const slackWebhook: import("./webhook.js").WebhookFunction<z.ZodObject<{
3
+ message: z.ZodString;
4
+ threadId: z.ZodString;
5
+ }, "strip", z.ZodTypeAny, {
6
+ message: string;
7
+ threadId: string;
8
+ }, {
9
+ message: string;
10
+ threadId: string;
11
+ }>>;
12
+ export declare const emailWebhook: import("./webhook.js").WebhookFunction<z.ZodObject<{
13
+ subject: z.ZodString;
14
+ body: z.ZodString;
15
+ from: z.ZodString;
16
+ }, "strip", z.ZodTypeAny, {
17
+ from: string;
18
+ subject: string;
19
+ body: string;
20
+ }, {
21
+ from: string;
22
+ subject: string;
23
+ body: string;
24
+ }>>;
25
+ declare const myBrain: import("./brain.js").Brain<import("./types.js").JsonObject, {
26
+ cool: string;
27
+ } | {
28
+ slackMessage: string;
29
+ cool: string;
30
+ } | {
31
+ emailSubject: string;
32
+ cool: string;
33
+ }, object, never>;
34
+ export default myBrain;
35
+ //# sourceMappingURL=example-webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"example-webhook.d.ts","sourceRoot":"","sources":["../../../src/dsl/example-webhook.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY;;;;;;;;;GAgBxB,CAAC;AAEF,eAAO,MAAM,YAAY;;;;;;;;;;;;GAkBxB,CAAC;AAEF,QAAA,MAAM,OAAO;;;;;;;;iBAsBT,CAAC;AAEL,eAAe,OAAO,CAAC"}
@@ -0,0 +1,29 @@
1
+ import { z } from 'zod';
2
+ export type WebhookRegistration<TSchema extends z.ZodSchema = z.ZodSchema> = {
3
+ slug: string;
4
+ identifier: string;
5
+ schema: TSchema;
6
+ };
7
+ export type SerializedWebhookRegistration = {
8
+ slug: string;
9
+ identifier: string;
10
+ };
11
+ export interface WebhookFunction<TSchema extends z.ZodSchema = z.ZodSchema> {
12
+ (identifier: string): WebhookRegistration<TSchema>;
13
+ handler: (request: Request) => Promise<{
14
+ identifier: string;
15
+ response: z.infer<TSchema>;
16
+ }>;
17
+ slug: string;
18
+ schema: TSchema;
19
+ }
20
+ export declare function createWebhook<TSchema extends z.ZodSchema>(slug: string, schema: TSchema, handler: (request: Request) => Promise<{
21
+ identifier: string;
22
+ response: z.infer<TSchema>;
23
+ }>): WebhookFunction<TSchema>;
24
+ type ExtractSchema<T> = T extends {
25
+ schema: infer S;
26
+ } ? S extends z.ZodSchema ? z.infer<S> : never : never;
27
+ export type ExtractWebhookResponses<T> = T extends readonly [...infer Items] ? Items[number] extends infer Item ? ExtractSchema<Item> : never : never;
28
+ export {};
29
+ //# sourceMappingURL=webhook.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"webhook.d.ts","sourceRoot":"","sources":["../../../src/dsl/webhook.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAGxB,MAAM,MAAM,mBAAmB,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS,IAAI;IAC3E,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,MAAM,EAAE,OAAO,CAAC;CACjB,CAAC;AAGF,MAAM,MAAM,6BAA6B,GAAG;IAC1C,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;CACpB,CAAC;AAGF,MAAM,WAAW,eAAe,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,GAAG,CAAC,CAAC,SAAS;IACxE,CAAC,UAAU,EAAE,MAAM,GAAG,mBAAmB,CAAC,OAAO,CAAC,CAAC;IACnD,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;QACrC,UAAU,EAAE,MAAM,CAAC;QACnB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;KAC5B,CAAC,CAAC;IACH,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,OAAO,CAAC;CACjB;AAGD,wBAAgB,aAAa,CAAC,OAAO,SAAS,CAAC,CAAC,SAAS,EACvD,IAAI,EAAE,MAAM,EACZ,MAAM,EAAE,OAAO,EACf,OAAO,EAAE,CAAC,OAAO,EAAE,OAAO,KAAK,OAAO,CAAC;IACrC,UAAU,EAAE,MAAM,CAAC;IACnB,QAAQ,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;CAC5B,CAAC,GACD,eAAe,CAAC,OAAO,CAAC,CAc1B;AAGD,KAAK,aAAa,CAAC,CAAC,IAAI,CAAC,SAAS;IAAE,MAAM,EAAE,MAAM,CAAC,CAAA;CAAE,GACjD,CAAC,SAAS,CAAC,CAAC,SAAS,GACnB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GACV,KAAK,GACP,KAAK,CAAC;AAGV,MAAM,MAAM,uBAAuB,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,GAAG,MAAM,KAAK,CAAC,GACxE,KAAK,CAAC,MAAM,CAAC,SAAS,MAAM,IAAI,GAC9B,aAAa,CAAC,IAAI,CAAC,GACnB,KAAK,GACP,KAAK,CAAC"}
@@ -9,6 +9,8 @@ export { createPatch, applyPatches } from './dsl/json-patch.js';
9
9
  export { z } from 'zod';
10
10
  export type { ResourceLoader } from './resources/resource-loader.js';
11
11
  export { createResources, type Resources } from './resources/resources.js';
12
+ export { createWebhook } from './dsl/webhook.js';
13
+ export type { WebhookFunction, WebhookRegistration } from './dsl/webhook.js';
12
14
  export type { Manifest as ResourceManifest, Entry as ResourceEntry, ResourceType, } from './resources/resources.js';
13
15
  export { RESOURCE_TYPES } from './resources/resources.js';
14
16
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMhE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC3E,YAAY,EACV,QAAQ,IAAI,gBAAgB,EAC5B,KAAK,IAAI,aAAa,EACtB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC9C,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAC1D,YAAY,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AACnD,YAAY,EACV,UAAU,EACV,cAAc,EACd,gBAAgB,EAChB,WAAW,EACX,eAAe,EACf,kBAAkB,EAClB,eAAe,EACf,eAAe,EACf,gBAAgB,EAChB,kBAAkB,EAClB,cAAc,EACd,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAC;AACnE,YAAY,EAAE,KAAK,EAAE,MAAM,gBAAgB,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AAMhE,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,YAAY,EAAE,cAAc,EAAE,MAAM,gCAAgC,CAAC;AACrE,OAAO,EAAE,eAAe,EAAE,KAAK,SAAS,EAAE,MAAM,0BAA0B,CAAC;AAC3E,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,kBAAkB,CAAC;AAC7E,YAAY,EACV,QAAQ,IAAI,gBAAgB,EAC5B,KAAK,IAAI,aAAa,EACtB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@positronic/core",
3
- "version": "0.0.18",
3
+ "version": "0.0.20",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },