@positronic/core 0.0.49 → 0.0.52

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.
@@ -276,7 +276,7 @@ function _ts_values(o) {
276
276
  import { BRAIN_EVENTS } from './constants.js';
277
277
  import { applyPatches } from './json-patch.js';
278
278
  import { reconstructLoopContext } from './loop-messages.js';
279
- import { createBrainExecutionMachine, sendEvent, sendAction, BRAIN_ACTIONS } from './brain-state-machine.js';
279
+ import { createBrainExecutionMachine, sendEvent } from './brain-state-machine.js';
280
280
  import { DEFAULT_ENV } from './brain.js';
281
281
  export var BrainRunner = /*#__PURE__*/ function() {
282
282
  "use strict";
@@ -407,7 +407,9 @@ export var BrainRunner = /*#__PURE__*/ function() {
407
407
  2
408
408
  ];
409
409
  // Use state machine to create cancelled event
410
- sendAction(machine, BRAIN_ACTIONS.CANCEL_BRAIN, {});
410
+ sendEvent(machine, {
411
+ type: BRAIN_EVENTS.CANCELLED
412
+ });
411
413
  cancelledEvent = machine.context.currentEvent;
412
414
  return [
413
415
  4,
@@ -554,7 +556,9 @@ export var BrainRunner = /*#__PURE__*/ function() {
554
556
  3,
555
557
  17
556
558
  ];
557
- sendAction(machine, BRAIN_ACTIONS.CANCEL_BRAIN, {});
559
+ sendEvent(machine, {
560
+ type: BRAIN_EVENTS.CANCELLED
561
+ });
558
562
  cancelledEvent = machine.context.currentEvent;
559
563
  return [
560
564
  4,
@@ -109,9 +109,104 @@ import * as robot3 from 'robot3';
109
109
  var createMachine = robot3.createMachine, state = robot3.state, transition = robot3.transition, reduce = robot3.reduce, guard = robot3.guard, interpret = robot3.interpret;
110
110
  import { BRAIN_EVENTS, STATUS } from './constants.js';
111
111
  import { applyPatches } from './json-patch.js';
112
+ // ============================================================================
113
+ // Tree Helper Functions
114
+ // ============================================================================
115
+ /**
116
+ * Get the deepest (currently executing) brain in the tree.
117
+ */ function getDeepestBrain(root) {
118
+ if (!root) return null;
119
+ var current = root;
120
+ while(current.innerBrain){
121
+ current = current.innerBrain;
122
+ }
123
+ return current;
124
+ }
125
+ /**
126
+ * Clone tree with a new innerBrain attached to the deepest node.
127
+ */ function cloneTreeWithNewInner(root, newInner) {
128
+ if (!root.innerBrain) {
129
+ return _object_spread_props(_object_spread({}, root), {
130
+ innerBrain: newInner
131
+ });
132
+ }
133
+ return _object_spread_props(_object_spread({}, root), {
134
+ innerBrain: cloneTreeWithNewInner(root.innerBrain, newInner)
135
+ });
136
+ }
137
+ /**
138
+ * Clone tree replacing the deepest brain.
139
+ */ function cloneTreeReplacingDeepest(root, replacement) {
140
+ if (!root.innerBrain) {
141
+ return replacement;
142
+ }
143
+ return _object_spread_props(_object_spread({}, root), {
144
+ innerBrain: cloneTreeReplacingDeepest(root.innerBrain, replacement)
145
+ });
146
+ }
147
+ /**
148
+ * Clone tree updating steps on the deepest brain.
149
+ */ function cloneTreeUpdatingDeepestSteps(root, newSteps) {
150
+ if (!root.innerBrain) {
151
+ return _object_spread_props(_object_spread({}, root), {
152
+ steps: newSteps
153
+ });
154
+ }
155
+ return _object_spread_props(_object_spread({}, root), {
156
+ innerBrain: cloneTreeUpdatingDeepestSteps(root.innerBrain, newSteps)
157
+ });
158
+ }
159
+ /**
160
+ * Clone tree removing the deepest brain and attaching its steps to parent step.
161
+ * Returns null if root is the deepest (no parent).
162
+ */ function cloneTreeRemovingDeepest(root) {
163
+ if (!root.innerBrain) {
164
+ // Root is the deepest - can't remove, return null
165
+ return null;
166
+ }
167
+ if (!root.innerBrain.innerBrain) {
168
+ // root.innerBrain is the deepest - remove it and attach steps to parent step
169
+ var completedBrain = root.innerBrain;
170
+ var updatedSteps = root.steps.map(function(step) {
171
+ if (step.id === completedBrain.parentStepId) {
172
+ return _object_spread_props(_object_spread({}, step), {
173
+ innerSteps: completedBrain.steps,
174
+ status: STATUS.COMPLETE
175
+ });
176
+ }
177
+ return step;
178
+ });
179
+ return _object_spread_props(_object_spread({}, root), {
180
+ steps: updatedSteps,
181
+ innerBrain: null
182
+ });
183
+ }
184
+ // Recurse down
185
+ return _object_spread_props(_object_spread({}, root), {
186
+ innerBrain: cloneTreeRemovingDeepest(root.innerBrain)
187
+ });
188
+ }
189
+ /**
190
+ * Convert tree to flat array (for backwards compatibility).
191
+ */ function treeToStack(root) {
192
+ var stack = [];
193
+ var current = root;
194
+ while(current){
195
+ stack.push({
196
+ brainRunId: current.brainRunId,
197
+ brainTitle: current.brainTitle,
198
+ brainDescription: current.brainDescription,
199
+ parentStepId: current.parentStepId,
200
+ steps: current.steps
201
+ });
202
+ current = current.innerBrain;
203
+ }
204
+ return stack;
205
+ }
112
206
  var createInitialContext = function(opts) {
113
207
  var _opts_initialState, _opts_options;
114
208
  return {
209
+ rootBrain: null,
115
210
  brainStack: [],
116
211
  depth: 0,
117
212
  brainRunId: null,
@@ -122,6 +217,7 @@ var createInitialContext = function(opts) {
122
217
  currentState: (_opts_initialState = opts === null || opts === void 0 ? void 0 : opts.initialState) !== null && _opts_initialState !== void 0 ? _opts_initialState : {},
123
218
  currentEvent: null,
124
219
  options: (_opts_options = opts === null || opts === void 0 ? void 0 : opts.options) !== null && _opts_options !== void 0 ? _opts_options : {},
220
+ status: STATUS.PENDING,
125
221
  isTopLevel: false,
126
222
  isRunning: false,
127
223
  isComplete: false,
@@ -135,7 +231,33 @@ var createInitialContext = function(opts) {
135
231
  // Helper to update derived state
136
232
  // ============================================================================
137
233
  var updateDerivedState = function(ctx, executionState) {
234
+ // Map ExecutionState to STATUS - this gives consumers the authoritative status
235
+ var status;
236
+ switch(executionState){
237
+ case 'idle':
238
+ status = STATUS.PENDING;
239
+ break;
240
+ case 'running':
241
+ status = STATUS.RUNNING;
242
+ break;
243
+ case 'paused':
244
+ // Paused brains are still considered "running" in terms of database status
245
+ status = STATUS.RUNNING;
246
+ break;
247
+ case 'complete':
248
+ status = STATUS.COMPLETE;
249
+ break;
250
+ case 'error':
251
+ status = STATUS.ERROR;
252
+ break;
253
+ case 'cancelled':
254
+ status = STATUS.CANCELLED;
255
+ break;
256
+ default:
257
+ status = STATUS.RUNNING;
258
+ }
138
259
  return _object_spread_props(_object_spread({}, ctx), {
260
+ status: status,
139
261
  isTopLevel: ctx.depth === 1,
140
262
  isRunning: executionState === 'running',
141
263
  isComplete: executionState === 'complete',
@@ -149,19 +271,22 @@ var updateDerivedState = function(ctx, executionState) {
149
271
  // ============================================================================
150
272
  var startBrain = reduce(function(ctx, param) {
151
273
  var brainRunId = param.brainRunId, brainTitle = param.brainTitle, brainDescription = param.brainDescription, initialState = param.initialState;
152
- var currentStepId = ctx.currentStepId, brainStack = ctx.brainStack, depth = ctx.depth, existingBrainRunId = ctx.brainRunId, currentState = ctx.currentState, options = ctx.options;
153
- var newEntry = {
274
+ var currentStepId = ctx.currentStepId, rootBrain = ctx.rootBrain, depth = ctx.depth, existingBrainRunId = ctx.brainRunId, currentState = ctx.currentState, options = ctx.options;
275
+ var newDepth = depth + 1;
276
+ var newBrain = {
154
277
  brainRunId: brainRunId,
155
278
  brainTitle: brainTitle,
156
279
  brainDescription: brainDescription,
157
280
  parentStepId: currentStepId,
158
- steps: []
281
+ steps: [],
282
+ innerBrain: null,
283
+ depth: newDepth
159
284
  };
160
- var newDepth = depth + 1;
285
+ // Build tree: if no root, this is root; else attach to deepest
286
+ var newRootBrain = rootBrain ? cloneTreeWithNewInner(rootBrain, newBrain) : newBrain;
161
287
  var newCtx = _object_spread_props(_object_spread({}, ctx), {
162
- brainStack: _to_consumable_array(brainStack).concat([
163
- newEntry
164
- ]),
288
+ rootBrain: newRootBrain,
289
+ brainStack: treeToStack(newRootBrain),
165
290
  depth: newDepth,
166
291
  brainRunId: existingBrainRunId !== null && existingBrainRunId !== void 0 ? existingBrainRunId : brainRunId,
167
292
  currentState: newDepth === 1 ? initialState !== null && initialState !== void 0 ? initialState : currentState : currentState,
@@ -179,26 +304,27 @@ var startBrain = reduce(function(ctx, param) {
179
304
  });
180
305
  var restartBrain = reduce(function(ctx, param) {
181
306
  var brainRunId = param.brainRunId, brainTitle = param.brainTitle, brainDescription = param.brainDescription, initialState = param.initialState;
182
- var currentStepId = ctx.currentStepId, brainStack = ctx.brainStack, depth = ctx.depth, existingBrainRunId = ctx.brainRunId, options = ctx.options;
307
+ var currentStepId = ctx.currentStepId, rootBrain = ctx.rootBrain, depth = ctx.depth, existingBrainRunId = ctx.brainRunId, options = ctx.options;
183
308
  // brain:restart can be either:
184
309
  // 1. A resume of an existing brain on the stack (same brainTitle) - should REPLACE
185
310
  // 2. A nested inner brain restarting (different brainTitle) - should ADD
186
- if (brainStack.length > 0) {
187
- var lastBrain = brainStack[brainStack.length - 1];
188
- // If the last brain has the same title, this is a resume - replace it
189
- if (lastBrain.brainTitle === brainTitle) {
190
- var newEntry = {
311
+ if (rootBrain) {
312
+ var deepestBrain = getDeepestBrain(rootBrain);
313
+ // If the deepest brain has the same title, this is a resume - replace it
314
+ if (deepestBrain && deepestBrain.brainTitle === brainTitle) {
315
+ var replacementBrain = {
191
316
  brainRunId: brainRunId,
192
317
  brainTitle: brainTitle,
193
318
  brainDescription: brainDescription,
194
- parentStepId: lastBrain.parentStepId,
195
- steps: []
319
+ parentStepId: deepestBrain.parentStepId,
320
+ steps: [],
321
+ innerBrain: null,
322
+ depth: deepestBrain.depth
196
323
  };
197
- var newStack = _to_consumable_array(brainStack.slice(0, -1)).concat([
198
- newEntry
199
- ]);
324
+ var newRootBrain = cloneTreeReplacingDeepest(rootBrain, replacementBrain);
200
325
  var newCtx = _object_spread_props(_object_spread({}, ctx), {
201
- brainStack: newStack,
326
+ rootBrain: newRootBrain,
327
+ brainStack: treeToStack(newRootBrain),
202
328
  // depth stays the same - we're replacing, not nesting
203
329
  brainRunId: existingBrainRunId !== null && existingBrainRunId !== void 0 ? existingBrainRunId : brainRunId,
204
330
  currentEvent: {
@@ -213,19 +339,21 @@ var restartBrain = reduce(function(ctx, param) {
213
339
  });
214
340
  return updateDerivedState(newCtx, 'running');
215
341
  }
216
- // Different title - this is a nested inner brain restarting, ADD to stack
217
- var newEntry1 = {
342
+ // Different title - this is a nested inner brain restarting, ADD to tree
343
+ var newDepth = depth + 1;
344
+ var newBrain = {
218
345
  brainRunId: brainRunId,
219
346
  brainTitle: brainTitle,
220
347
  brainDescription: brainDescription,
221
348
  parentStepId: currentStepId,
222
- steps: []
349
+ steps: [],
350
+ innerBrain: null,
351
+ depth: newDepth
223
352
  };
224
- var newDepth = depth + 1;
353
+ var newRootBrain1 = cloneTreeWithNewInner(rootBrain, newBrain);
225
354
  var newCtx1 = _object_spread_props(_object_spread({}, ctx), {
226
- brainStack: _to_consumable_array(brainStack).concat([
227
- newEntry1
228
- ]),
355
+ rootBrain: newRootBrain1,
356
+ brainStack: treeToStack(newRootBrain1),
229
357
  depth: newDepth,
230
358
  brainRunId: existingBrainRunId !== null && existingBrainRunId !== void 0 ? existingBrainRunId : brainRunId,
231
359
  currentEvent: {
@@ -241,17 +369,18 @@ var restartBrain = reduce(function(ctx, param) {
241
369
  return updateDerivedState(newCtx1, 'running');
242
370
  }
243
371
  // No brain on stack - this is a fresh restart from idle state
244
- var newEntry2 = {
372
+ var newBrain1 = {
245
373
  brainRunId: brainRunId,
246
374
  brainTitle: brainTitle,
247
375
  brainDescription: brainDescription,
248
376
  parentStepId: null,
249
- steps: []
377
+ steps: [],
378
+ innerBrain: null,
379
+ depth: 1
250
380
  };
251
381
  var newCtx2 = _object_spread_props(_object_spread({}, ctx), {
252
- brainStack: [
253
- newEntry2
254
- ],
382
+ rootBrain: newBrain1,
383
+ brainStack: treeToStack(newBrain1),
255
384
  depth: 1,
256
385
  brainRunId: existingBrainRunId !== null && existingBrainRunId !== void 0 ? existingBrainRunId : brainRunId,
257
386
  currentEvent: {
@@ -267,25 +396,18 @@ var restartBrain = reduce(function(ctx, param) {
267
396
  return updateDerivedState(newCtx2, 'running');
268
397
  });
269
398
  var completeBrain = reduce(function(ctx) {
270
- var brainStack = ctx.brainStack, depth = ctx.depth, brainRunId = ctx.brainRunId, options = ctx.options;
271
- if (brainStack.length === 0) return ctx;
272
- var completedBrain = brainStack[brainStack.length - 1];
273
- var newStack = brainStack.slice(0, -1);
274
- // Attach completed brain's steps to parent step if nested
275
- if (newStack.length > 0 && completedBrain.parentStepId) {
276
- var parentBrain = newStack[newStack.length - 1];
277
- var parentStep = parentBrain.steps.find(function(s) {
278
- return s.id === completedBrain.parentStepId;
279
- });
280
- if (parentStep) {
281
- parentStep.innerSteps = completedBrain.steps;
282
- parentStep.status = STATUS.COMPLETE;
283
- }
284
- }
399
+ var rootBrain = ctx.rootBrain, depth = ctx.depth, brainRunId = ctx.brainRunId, options = ctx.options;
400
+ if (!rootBrain) return ctx;
401
+ var completedBrain = getDeepestBrain(rootBrain);
402
+ if (!completedBrain) return ctx;
285
403
  var newDepth = depth - 1;
286
- var isNowComplete = newDepth === 0;
404
+ var isOuterBrainComplete = newDepth === 0;
405
+ // When the outer brain completes, keep rootBrain so we can still display
406
+ // the final state. Only remove inner brains (attaching their steps to parent).
407
+ var newRootBrain = isOuterBrainComplete ? rootBrain : cloneTreeRemovingDeepest(rootBrain);
287
408
  var newCtx = _object_spread_props(_object_spread({}, ctx), {
288
- brainStack: newStack,
409
+ rootBrain: newRootBrain,
410
+ brainStack: treeToStack(newRootBrain),
289
411
  depth: newDepth,
290
412
  currentEvent: {
291
413
  type: BRAIN_EVENTS.COMPLETE,
@@ -296,12 +418,12 @@ var completeBrain = reduce(function(ctx) {
296
418
  options: options
297
419
  }
298
420
  });
299
- return updateDerivedState(newCtx, isNowComplete ? 'complete' : 'running');
421
+ return updateDerivedState(newCtx, isOuterBrainComplete ? 'complete' : 'running');
300
422
  });
301
423
  var errorBrain = reduce(function(ctx, param) {
302
424
  var error = param.error;
303
- var brainStack = ctx.brainStack, brainRunId = ctx.brainRunId, options = ctx.options;
304
- var currentBrain = brainStack[brainStack.length - 1];
425
+ var rootBrain = ctx.rootBrain, brainRunId = ctx.brainRunId, options = ctx.options;
426
+ var currentBrain = getDeepestBrain(rootBrain);
305
427
  var newCtx = _object_spread_props(_object_spread({}, ctx), {
306
428
  error: error,
307
429
  currentEvent: {
@@ -317,8 +439,8 @@ var errorBrain = reduce(function(ctx, param) {
317
439
  return updateDerivedState(newCtx, 'error');
318
440
  });
319
441
  var cancelBrain = reduce(function(ctx) {
320
- var brainStack = ctx.brainStack, brainRunId = ctx.brainRunId, options = ctx.options;
321
- var currentBrain = brainStack[brainStack.length - 1];
442
+ var rootBrain = ctx.rootBrain, brainRunId = ctx.brainRunId, options = ctx.options;
443
+ var currentBrain = getDeepestBrain(rootBrain);
322
444
  var newCtx = _object_spread_props(_object_spread({}, ctx), {
323
445
  currentEvent: {
324
446
  type: BRAIN_EVENTS.CANCELLED,
@@ -333,24 +455,37 @@ var cancelBrain = reduce(function(ctx) {
333
455
  });
334
456
  var startStep = reduce(function(ctx, param) {
335
457
  var stepId = param.stepId, stepTitle = param.stepTitle;
336
- var brainStack = ctx.brainStack, brainRunId = ctx.brainRunId, options = ctx.options;
458
+ var rootBrain = ctx.rootBrain, brainRunId = ctx.brainRunId, options = ctx.options;
337
459
  // Add step to current brain's steps if not already there
338
- if (brainStack.length > 0) {
339
- var currentBrain = brainStack[brainStack.length - 1];
340
- var existingStep = currentBrain.steps.find(function(s) {
341
- return s.id === stepId;
342
- });
343
- if (!existingStep) {
344
- currentBrain.steps.push({
345
- id: stepId,
346
- title: stepTitle,
347
- status: STATUS.RUNNING
460
+ var newRootBrain = rootBrain;
461
+ if (rootBrain) {
462
+ var currentBrain = getDeepestBrain(rootBrain);
463
+ if (currentBrain) {
464
+ var existingStep = currentBrain.steps.find(function(s) {
465
+ return s.id === stepId;
348
466
  });
349
- } else {
350
- existingStep.status = STATUS.RUNNING;
467
+ var newSteps;
468
+ if (!existingStep) {
469
+ newSteps = _to_consumable_array(currentBrain.steps).concat([
470
+ {
471
+ id: stepId,
472
+ title: stepTitle,
473
+ status: STATUS.RUNNING
474
+ }
475
+ ]);
476
+ } else {
477
+ newSteps = currentBrain.steps.map(function(s) {
478
+ return s.id === stepId ? _object_spread_props(_object_spread({}, s), {
479
+ status: STATUS.RUNNING
480
+ }) : s;
481
+ });
482
+ }
483
+ newRootBrain = cloneTreeUpdatingDeepestSteps(rootBrain, newSteps);
351
484
  }
352
485
  }
353
486
  return _object_spread_props(_object_spread({}, ctx), {
487
+ rootBrain: newRootBrain,
488
+ brainStack: treeToStack(newRootBrain),
354
489
  currentStepId: stepId,
355
490
  currentStepTitle: stepTitle,
356
491
  currentEvent: {
@@ -365,15 +500,18 @@ var startStep = reduce(function(ctx, param) {
365
500
  });
366
501
  var completeStep = reduce(function(ctx, param) {
367
502
  var stepId = param.stepId, stepTitle = param.stepTitle, patch = param.patch;
368
- var brainStack = ctx.brainStack, depth = ctx.depth, currentState = ctx.currentState, topLevelStepCount = ctx.topLevelStepCount, brainRunId = ctx.brainRunId, options = ctx.options;
369
- if (brainStack.length > 0) {
370
- var currentBrain = brainStack[brainStack.length - 1];
371
- var step = currentBrain.steps.find(function(s) {
372
- return s.id === stepId;
373
- });
374
- if (step) {
375
- step.status = STATUS.COMPLETE;
376
- step.patch = patch;
503
+ var rootBrain = ctx.rootBrain, depth = ctx.depth, currentState = ctx.currentState, topLevelStepCount = ctx.topLevelStepCount, brainRunId = ctx.brainRunId, options = ctx.options;
504
+ var newRootBrain = rootBrain;
505
+ if (rootBrain) {
506
+ var currentBrain = getDeepestBrain(rootBrain);
507
+ if (currentBrain) {
508
+ var newSteps = currentBrain.steps.map(function(s) {
509
+ return s.id === stepId ? _object_spread_props(_object_spread({}, s), {
510
+ status: STATUS.COMPLETE,
511
+ patch: patch
512
+ }) : s;
513
+ });
514
+ newRootBrain = cloneTreeUpdatingDeepestSteps(rootBrain, newSteps);
377
515
  }
378
516
  }
379
517
  // Apply patch to currentState only for top-level brain
@@ -386,6 +524,8 @@ var completeStep = reduce(function(ctx, param) {
386
524
  newStepCount = topLevelStepCount + 1;
387
525
  }
388
526
  return _object_spread_props(_object_spread({}, ctx), {
527
+ rootBrain: newRootBrain,
528
+ brainStack: treeToStack(newRootBrain),
389
529
  currentState: newState,
390
530
  topLevelStepCount: newStepCount,
391
531
  currentEvent: {
@@ -429,38 +569,35 @@ var webhookResponse = reduce(function(ctx, param) {
429
569
  });
430
570
  var stepStatus = reduce(function(ctx, param) {
431
571
  var eventBrainRunId = param.brainRunId, steps = param.steps;
432
- var brainRunId = ctx.brainRunId, brainStack = ctx.brainStack, options = ctx.options;
433
- if (brainStack.length === 0) return ctx;
434
- // Only update the current (deepest) brain on the stack.
572
+ var brainRunId = ctx.brainRunId, rootBrain = ctx.rootBrain, options = ctx.options;
573
+ if (!rootBrain) return ctx;
574
+ // Only update the current (deepest) brain in the tree.
435
575
  // STEP_STATUS is emitted by the currently executing brain, which is always
436
576
  // the deepest one. We can't match by brainRunId because nested brains share
437
577
  // the same brainRunId, which would incorrectly update all nested brains.
438
- var updatedStack = brainStack.map(function(brain, index) {
439
- if (index === brainStack.length - 1) {
440
- // Create a map of existing steps to preserve their patches
441
- var existingStepsById = new Map(brain.steps.map(function(s) {
442
- return [
443
- s.id,
444
- s
445
- ];
446
- }));
447
- return _object_spread_props(_object_spread({}, brain), {
448
- steps: steps.map(function(s) {
449
- var existing = existingStepsById.get(s.id);
450
- return _object_spread({
451
- id: s.id,
452
- title: s.title,
453
- status: s.status
454
- }, (existing === null || existing === void 0 ? void 0 : existing.patch) ? {
455
- patch: existing.patch
456
- } : {});
457
- })
458
- });
459
- }
460
- return brain;
578
+ var currentBrain = getDeepestBrain(rootBrain);
579
+ if (!currentBrain) return ctx;
580
+ // Create a map of existing steps to preserve their patches
581
+ var existingStepsById = new Map(currentBrain.steps.map(function(s) {
582
+ return [
583
+ s.id,
584
+ s
585
+ ];
586
+ }));
587
+ var newSteps = steps.map(function(s) {
588
+ var existing = existingStepsById.get(s.id);
589
+ return _object_spread({
590
+ id: s.id,
591
+ title: s.title,
592
+ status: s.status
593
+ }, (existing === null || existing === void 0 ? void 0 : existing.patch) ? {
594
+ patch: existing.patch
595
+ } : {});
461
596
  });
597
+ var newRootBrain = cloneTreeUpdatingDeepestSteps(rootBrain, newSteps);
462
598
  return _object_spread_props(_object_spread({}, ctx), {
463
- brainStack: updatedStack,
599
+ rootBrain: newRootBrain,
600
+ brainStack: treeToStack(newRootBrain),
464
601
  currentEvent: {
465
602
  type: BRAIN_EVENTS.STEP_STATUS,
466
603
  brainRunId: brainRunId,
@@ -484,7 +621,6 @@ var stepRetry = reduce(function(ctx, param) {
484
621
  }
485
622
  });
486
623
  });
487
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
488
624
  var passthrough = function(eventType) {
489
625
  return reduce(function(ctx, ev) {
490
626
  var brainRunId = ctx.brainRunId, options = ctx.options;
@@ -513,51 +649,26 @@ var isInnerBrain = guard(function(ctx) {
513
649
  // ============================================================================
514
650
  // State Machine Definition
515
651
  // ============================================================================
516
- // Action names for transitions
517
- var ACTIONS = {
518
- START_BRAIN: 'startBrain',
519
- RESTART_BRAIN: 'restartBrain',
520
- COMPLETE_BRAIN: 'completeBrain',
521
- ERROR_BRAIN: 'errorBrain',
522
- CANCEL_BRAIN: 'cancelBrain',
523
- WEBHOOK: 'webhook',
524
- WEBHOOK_RESPONSE: 'webhookResponse',
525
- START_STEP: 'startStep',
526
- COMPLETE_STEP: 'completeStep',
527
- STEP_STATUS: 'stepStatus',
528
- STEP_RETRY: 'stepRetry',
529
- LOOP_START: 'loopStart',
530
- LOOP_ITERATION: 'loopIteration',
531
- LOOP_TOOL_CALL: 'loopToolCall',
532
- LOOP_TOOL_RESULT: 'loopToolResult',
533
- LOOP_ASSISTANT_MESSAGE: 'loopAssistantMessage',
534
- LOOP_COMPLETE: 'loopComplete',
535
- LOOP_TOKEN_LIMIT: 'loopTokenLimit',
536
- LOOP_WEBHOOK: 'loopWebhook',
537
- HEARTBEAT: 'heartbeat'
538
- };
539
- export { ACTIONS as BRAIN_ACTIONS };
540
- // Create machine factory - needs to be called with initial context
541
- // eslint-disable-next-line @typescript-eslint/no-explicit-any
542
- var createBrainMachine = function(initialContext) {
652
+ // Internal machine factory - called with pre-built context
653
+ var makeBrainMachine = function(initialContext) {
543
654
  return createMachine('idle', {
544
- idle: state(transition(ACTIONS.START_BRAIN, 'running', startBrain), transition(ACTIONS.RESTART_BRAIN, 'running', restartBrain)),
655
+ idle: state(transition(BRAIN_EVENTS.START, 'running', startBrain), transition(BRAIN_EVENTS.RESTART, 'running', restartBrain)),
545
656
  running: state(// Nested brain lifecycle
546
- transition(ACTIONS.START_BRAIN, 'running', startBrain), transition(ACTIONS.RESTART_BRAIN, 'running', restartBrain), // Outer brain complete -> terminal
547
- transition(ACTIONS.COMPLETE_BRAIN, 'complete', isOuterBrain, completeBrain), // Inner brain complete -> stay running
548
- transition(ACTIONS.COMPLETE_BRAIN, 'running', isInnerBrain, completeBrain), // Error (only outer brain errors are terminal)
549
- transition(ACTIONS.ERROR_BRAIN, 'error', isOuterBrain, errorBrain), // Cancelled
550
- transition(ACTIONS.CANCEL_BRAIN, 'cancelled', cancelBrain), // Webhook -> paused
551
- transition(ACTIONS.WEBHOOK, 'paused', webhookPause), // Webhook response (for resume from webhook - machine is already running)
552
- transition(ACTIONS.WEBHOOK_RESPONSE, 'running', webhookResponse), // Step events
553
- transition(ACTIONS.START_STEP, 'running', startStep), transition(ACTIONS.COMPLETE_STEP, 'running', completeStep), transition(ACTIONS.STEP_STATUS, 'running', stepStatus), transition(ACTIONS.STEP_RETRY, 'running', stepRetry), // Loop events (pass-through with event data)
554
- transition(ACTIONS.LOOP_START, 'running', passthrough(BRAIN_EVENTS.LOOP_START)), transition(ACTIONS.LOOP_ITERATION, 'running', passthrough(BRAIN_EVENTS.LOOP_ITERATION)), transition(ACTIONS.LOOP_TOOL_CALL, 'running', passthrough(BRAIN_EVENTS.LOOP_TOOL_CALL)), transition(ACTIONS.LOOP_TOOL_RESULT, 'running', passthrough(BRAIN_EVENTS.LOOP_TOOL_RESULT)), transition(ACTIONS.LOOP_ASSISTANT_MESSAGE, 'running', passthrough(BRAIN_EVENTS.LOOP_ASSISTANT_MESSAGE)), transition(ACTIONS.LOOP_COMPLETE, 'running', passthrough(BRAIN_EVENTS.LOOP_COMPLETE)), transition(ACTIONS.LOOP_TOKEN_LIMIT, 'running', passthrough(BRAIN_EVENTS.LOOP_TOKEN_LIMIT)), transition(ACTIONS.LOOP_WEBHOOK, 'running', passthrough(BRAIN_EVENTS.LOOP_WEBHOOK)), transition(ACTIONS.HEARTBEAT, 'running', passthrough(BRAIN_EVENTS.HEARTBEAT))),
555
- paused: state(transition(ACTIONS.WEBHOOK_RESPONSE, 'running', webhookResponse), transition(ACTIONS.CANCEL_BRAIN, 'cancelled', cancelBrain), // RESTART happens when resuming from webhook
556
- transition(ACTIONS.RESTART_BRAIN, 'running', restartBrain)),
657
+ transition(BRAIN_EVENTS.START, 'running', startBrain), transition(BRAIN_EVENTS.RESTART, 'running', restartBrain), // Outer brain complete -> terminal
658
+ transition(BRAIN_EVENTS.COMPLETE, 'complete', isOuterBrain, completeBrain), // Inner brain complete -> stay running
659
+ transition(BRAIN_EVENTS.COMPLETE, 'running', isInnerBrain, completeBrain), // Error (only outer brain errors are terminal)
660
+ transition(BRAIN_EVENTS.ERROR, 'error', isOuterBrain, errorBrain), // Cancelled
661
+ transition(BRAIN_EVENTS.CANCELLED, 'cancelled', cancelBrain), // Webhook -> paused
662
+ transition(BRAIN_EVENTS.WEBHOOK, 'paused', webhookPause), // Webhook response (for resume from webhook - machine is already running)
663
+ transition(BRAIN_EVENTS.WEBHOOK_RESPONSE, 'running', webhookResponse), // Step events
664
+ transition(BRAIN_EVENTS.STEP_START, 'running', startStep), transition(BRAIN_EVENTS.STEP_COMPLETE, 'running', completeStep), transition(BRAIN_EVENTS.STEP_STATUS, 'running', stepStatus), transition(BRAIN_EVENTS.STEP_RETRY, 'running', stepRetry), // Loop events (pass-through with event data)
665
+ transition(BRAIN_EVENTS.LOOP_START, 'running', passthrough(BRAIN_EVENTS.LOOP_START)), transition(BRAIN_EVENTS.LOOP_ITERATION, 'running', passthrough(BRAIN_EVENTS.LOOP_ITERATION)), transition(BRAIN_EVENTS.LOOP_TOOL_CALL, 'running', passthrough(BRAIN_EVENTS.LOOP_TOOL_CALL)), transition(BRAIN_EVENTS.LOOP_TOOL_RESULT, 'running', passthrough(BRAIN_EVENTS.LOOP_TOOL_RESULT)), transition(BRAIN_EVENTS.LOOP_ASSISTANT_MESSAGE, 'running', passthrough(BRAIN_EVENTS.LOOP_ASSISTANT_MESSAGE)), transition(BRAIN_EVENTS.LOOP_COMPLETE, 'running', passthrough(BRAIN_EVENTS.LOOP_COMPLETE)), transition(BRAIN_EVENTS.LOOP_TOKEN_LIMIT, 'running', passthrough(BRAIN_EVENTS.LOOP_TOKEN_LIMIT)), transition(BRAIN_EVENTS.LOOP_WEBHOOK, 'running', passthrough(BRAIN_EVENTS.LOOP_WEBHOOK)), transition(BRAIN_EVENTS.HEARTBEAT, 'running', passthrough(BRAIN_EVENTS.HEARTBEAT))),
666
+ paused: state(transition(BRAIN_EVENTS.WEBHOOK_RESPONSE, 'running', webhookResponse), transition(BRAIN_EVENTS.CANCELLED, 'cancelled', cancelBrain), // RESTART happens when resuming from webhook
667
+ transition(BRAIN_EVENTS.RESTART, 'running', restartBrain)),
557
668
  // Terminal states - limited outgoing transitions
558
669
  complete: state(),
559
670
  error: state(// Allow STEP_STATUS after error so we can emit the final step statuses
560
- transition(ACTIONS.STEP_STATUS, 'error', stepStatus)),
671
+ transition(BRAIN_EVENTS.STEP_STATUS, 'error', stepStatus)),
561
672
  cancelled: state()
562
673
  }, function() {
563
674
  return initialContext;
@@ -565,89 +676,48 @@ var createBrainMachine = function(initialContext) {
565
676
  };
566
677
  /**
567
678
  * Create a new brain execution state machine.
679
+ * Optionally replay events to restore state from history.
568
680
  */ export function createBrainExecutionMachine(options) {
569
681
  var initialContext = createInitialContext(options);
570
- var machine = createBrainMachine(initialContext);
571
- return interpret(machine, function() {});
572
- }
573
- /**
574
- * Send a transition action to the machine.
575
- * After calling this, read machine.context.currentEvent to get the event to yield.
576
- */ export function sendAction(machine, action, payload) {
577
- machine.send(_object_spread({
578
- type: action
579
- }, payload));
682
+ var machine = makeBrainMachine(initialContext);
683
+ var service = interpret(machine, function() {});
684
+ // Replay events if provided - just send each event directly to the machine
685
+ if (options === null || options === void 0 ? void 0 : options.events) {
686
+ var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
687
+ try {
688
+ for(var _iterator = options.events[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
689
+ var event = _step.value;
690
+ service.send(event);
691
+ }
692
+ } catch (err) {
693
+ _didIteratorError = true;
694
+ _iteratorError = err;
695
+ } finally{
696
+ try {
697
+ if (!_iteratorNormalCompletion && _iterator.return != null) {
698
+ _iterator.return();
699
+ }
700
+ } finally{
701
+ if (_didIteratorError) {
702
+ throw _iteratorError;
703
+ }
704
+ }
705
+ }
706
+ }
707
+ return service;
580
708
  }
581
709
  /**
582
- * Feed an incoming event into the machine to update state (observer mode).
583
- * Maps brain event types to machine actions.
584
- */ // eslint-disable-next-line @typescript-eslint/no-explicit-any
585
- export function sendEvent(machine, event) {
586
- var _obj;
587
- var eventToAction = (_obj = {}, _define_property(_obj, BRAIN_EVENTS.START, ACTIONS.START_BRAIN), _define_property(_obj, BRAIN_EVENTS.RESTART, ACTIONS.RESTART_BRAIN), _define_property(_obj, BRAIN_EVENTS.COMPLETE, ACTIONS.COMPLETE_BRAIN), _define_property(_obj, BRAIN_EVENTS.ERROR, ACTIONS.ERROR_BRAIN), _define_property(_obj, BRAIN_EVENTS.CANCELLED, ACTIONS.CANCEL_BRAIN), _define_property(_obj, BRAIN_EVENTS.WEBHOOK, ACTIONS.WEBHOOK), _define_property(_obj, BRAIN_EVENTS.WEBHOOK_RESPONSE, ACTIONS.WEBHOOK_RESPONSE), _define_property(_obj, BRAIN_EVENTS.STEP_START, ACTIONS.START_STEP), _define_property(_obj, BRAIN_EVENTS.STEP_COMPLETE, ACTIONS.COMPLETE_STEP), _define_property(_obj, BRAIN_EVENTS.STEP_STATUS, ACTIONS.STEP_STATUS), _define_property(_obj, BRAIN_EVENTS.STEP_RETRY, ACTIONS.STEP_RETRY), _define_property(_obj, BRAIN_EVENTS.LOOP_START, ACTIONS.LOOP_START), _define_property(_obj, BRAIN_EVENTS.LOOP_ITERATION, ACTIONS.LOOP_ITERATION), _define_property(_obj, BRAIN_EVENTS.LOOP_TOOL_CALL, ACTIONS.LOOP_TOOL_CALL), _define_property(_obj, BRAIN_EVENTS.LOOP_TOOL_RESULT, ACTIONS.LOOP_TOOL_RESULT), _define_property(_obj, BRAIN_EVENTS.LOOP_ASSISTANT_MESSAGE, ACTIONS.LOOP_ASSISTANT_MESSAGE), _define_property(_obj, BRAIN_EVENTS.LOOP_COMPLETE, ACTIONS.LOOP_COMPLETE), _define_property(_obj, BRAIN_EVENTS.LOOP_TOKEN_LIMIT, ACTIONS.LOOP_TOKEN_LIMIT), _define_property(_obj, BRAIN_EVENTS.LOOP_WEBHOOK, ACTIONS.LOOP_WEBHOOK), _define_property(_obj, BRAIN_EVENTS.HEARTBEAT, ACTIONS.HEARTBEAT), _obj);
588
- var action = eventToAction[event.type];
589
- if (action) {
590
- var payload = extractPayloadFromEvent(event);
591
- machine.send(_object_spread({
592
- type: action
593
- }, payload));
594
- }
710
+ * Create an uninterpreted brain execution machine.
711
+ * Use with robot3's interpret() or react-robot's useMachine() hook.
712
+ */ export function createBrainMachine(options) {
713
+ var initialContext = createInitialContext(options);
714
+ return makeBrainMachine(initialContext);
595
715
  }
596
716
  /**
597
- * Extract relevant payload fields from a brain event for the state machine.
598
- */ // eslint-disable-next-line @typescript-eslint/no-explicit-any
599
- function extractPayloadFromEvent(event) {
600
- switch(event.type){
601
- case BRAIN_EVENTS.START:
602
- case BRAIN_EVENTS.RESTART:
603
- return {
604
- brainRunId: event.brainRunId,
605
- brainTitle: event.brainTitle,
606
- brainDescription: event.brainDescription,
607
- initialState: event.initialState
608
- };
609
- case BRAIN_EVENTS.STEP_START:
610
- return {
611
- stepId: event.stepId,
612
- stepTitle: event.stepTitle
613
- };
614
- case BRAIN_EVENTS.STEP_COMPLETE:
615
- return {
616
- stepId: event.stepId,
617
- stepTitle: event.stepTitle,
618
- patch: event.patch
619
- };
620
- case BRAIN_EVENTS.ERROR:
621
- return {
622
- error: event.error
623
- };
624
- case BRAIN_EVENTS.WEBHOOK:
625
- return {
626
- waitFor: event.waitFor
627
- };
628
- case BRAIN_EVENTS.WEBHOOK_RESPONSE:
629
- return {
630
- response: event.response
631
- };
632
- case BRAIN_EVENTS.STEP_STATUS:
633
- return {
634
- brainRunId: event.brainRunId,
635
- steps: event.steps
636
- };
637
- case BRAIN_EVENTS.STEP_RETRY:
638
- return {
639
- stepId: event.stepId,
640
- stepTitle: event.stepTitle,
641
- error: event.error,
642
- attempt: event.attempt
643
- };
644
- default:
645
- // For pass-through events, pass all properties except type
646
- var type = event.type, rest = _object_without_properties(event, [
647
- "type"
648
- ]);
649
- return rest;
650
- }
717
+ * Send an event to the machine.
718
+ * The machine transitions use BRAIN_EVENTS types directly, so just pass the event through.
719
+ */ export function sendEvent(machine, event) {
720
+ machine.send(event);
651
721
  }
652
722
  // ============================================================================
653
723
  // Query Helpers (kept for backwards compatibility, but context is now preferred)
@@ -659,11 +729,11 @@ export function isTopLevel(machine) {
659
729
  return machine.context.isTopLevel;
660
730
  }
661
731
  export function getCurrentStep(machine) {
662
- var _machine_context = machine.context, brainStack = _machine_context.brainStack, currentStepId = _machine_context.currentStepId;
663
- if (brainStack.length === 0 || !currentStepId) return null;
664
- var currentBrain = brainStack[brainStack.length - 1];
732
+ var _machine_context = machine.context, rootBrain = _machine_context.rootBrain, currentStepId = _machine_context.currentStepId;
733
+ if (!rootBrain || !currentStepId) return null;
734
+ var currentBrain = getDeepestBrain(rootBrain);
665
735
  var _currentBrain_steps_find;
666
- return (_currentBrain_steps_find = currentBrain.steps.find(function(s) {
736
+ return (_currentBrain_steps_find = currentBrain === null || currentBrain === void 0 ? void 0 : currentBrain.steps.find(function(s) {
667
737
  return s.id === currentStepId;
668
738
  })) !== null && _currentBrain_steps_find !== void 0 ? _currentBrain_steps_find : null;
669
739
  }
@@ -684,42 +754,36 @@ export function getError(machine) {
684
754
  }
685
755
  /**
686
756
  * Get the completed steps from the state machine in the format needed for resume.
687
- * This reconstructs the nested step hierarchy from the brain stack.
757
+ * This reconstructs the nested step hierarchy from the brain tree.
688
758
  * Returns a deep copy to avoid mutating the state machine's context.
689
759
  */ export function getCompletedSteps(machine) {
690
- var brainStack = machine.context.brainStack;
691
- if (brainStack.length === 0) {
760
+ var rootBrain = machine.context.rootBrain;
761
+ if (!rootBrain) {
692
762
  return [];
693
763
  }
694
- // Deep copy the steps to avoid mutating state machine context
764
+ // Deep copy the steps, including any innerBrain's steps attached to parent step
695
765
  var copyStep = function(step) {
696
766
  var _step_innerSteps;
697
767
  return _object_spread_props(_object_spread({}, step), {
698
768
  innerSteps: (_step_innerSteps = step.innerSteps) === null || _step_innerSteps === void 0 ? void 0 : _step_innerSteps.map(copyStep)
699
769
  });
700
770
  };
701
- var copyBrainStack = brainStack.map(function(brain) {
702
- return _object_spread_props(_object_spread({}, brain), {
703
- steps: brain.steps.map(copyStep)
704
- });
705
- });
706
- // The outer brain's steps, with inner brain steps nested
707
- var outerBrain = copyBrainStack[0];
708
- // If there are nested brains still on the stack (paused mid-execution),
709
- // attach their steps to the parent step as innerSteps
710
- if (copyBrainStack.length > 1) {
711
- var _loop = function(i) {
712
- var innerBrain = copyBrainStack[i];
713
- var parentBrain = copyBrainStack[i - 1];
714
- // Find the parent step (the one that started this inner brain)
715
- var parentStep = parentBrain.steps.find(function(s) {
716
- return s.id === innerBrain.parentStepId;
717
- });
718
- if (parentStep) {
719
- parentStep.innerSteps = innerBrain.steps;
771
+ // Recursively build steps from the brain tree
772
+ var copyBrainSteps = function(brain) {
773
+ var steps = brain.steps.map(copyStep);
774
+ // If there's a running inner brain, attach its steps to the parent step
775
+ if (brain.innerBrain) {
776
+ var parentStepId = brain.innerBrain.parentStepId;
777
+ if (parentStepId) {
778
+ var parentStep = steps.find(function(s) {
779
+ return s.id === parentStepId;
780
+ });
781
+ if (parentStep) {
782
+ parentStep.innerSteps = copyBrainSteps(brain.innerBrain);
783
+ }
720
784
  }
721
- };
722
- for(var i = copyBrainStack.length - 1; i > 0; i--)_loop(i);
723
- }
724
- return outerBrain.steps;
785
+ }
786
+ return steps;
787
+ };
788
+ return copyBrainSteps(rootBrain);
725
789
  }
package/dist/src/index.js CHANGED
@@ -12,4 +12,4 @@ export { createWebhook } from './dsl/webhook.js';
12
12
  export { RESOURCE_TYPES } from './resources/resources.js';
13
13
  export { reconstructLoopContext } from './dsl/loop-messages.js';
14
14
  // Brain state machine
15
- export { createBrainExecutionMachine, sendAction, sendEvent, getDepth, isTopLevel, getCurrentStep, getBrainStack, getBrainRunId, getExecutionState, getPendingWebhooks, getError, getCompletedSteps, BRAIN_ACTIONS } from './dsl/brain-state-machine.js';
15
+ export { createBrainExecutionMachine, createBrainMachine, sendEvent, getDepth, isTopLevel, getCurrentStep, getBrainStack, getBrainRunId, getExecutionState, getPendingWebhooks, getError, getCompletedSteps } from './dsl/brain-state-machine.js';
@@ -1,3 +1,4 @@
1
+ import * as robot3 from 'robot3';
1
2
  import { STATUS } from './constants.js';
2
3
  import type { JsonPatch, JsonObject } from './types.js';
3
4
  export interface BrainStackEntry {
@@ -7,6 +8,19 @@ export interface BrainStackEntry {
7
8
  parentStepId: string | null;
8
9
  steps: StepInfo[];
9
10
  }
11
+ /**
12
+ * Represents a running brain in a nested tree structure.
13
+ * Each brain can have at most one inner brain running at a time.
14
+ */
15
+ export interface RunningBrain {
16
+ brainRunId: string;
17
+ brainTitle: string;
18
+ brainDescription?: string;
19
+ parentStepId: string | null;
20
+ steps: StepInfo[];
21
+ innerBrain: RunningBrain | null;
22
+ depth: number;
23
+ }
10
24
  export interface StepInfo {
11
25
  id: string;
12
26
  title: string;
@@ -30,6 +44,7 @@ export interface BrainEvent {
30
44
  [key: string]: unknown;
31
45
  }
32
46
  export interface BrainExecutionContext {
47
+ rootBrain: RunningBrain | null;
33
48
  brainStack: BrainStackEntry[];
34
49
  depth: number;
35
50
  brainRunId: string | null;
@@ -40,6 +55,7 @@ export interface BrainExecutionContext {
40
55
  currentState: JsonObject;
41
56
  currentEvent: BrainEvent | null;
42
57
  options: JsonObject;
58
+ status: (typeof STATUS)[keyof typeof STATUS];
43
59
  isTopLevel: boolean;
44
60
  isRunning: boolean;
45
61
  isComplete: boolean;
@@ -87,30 +103,11 @@ export interface StepRetryPayload {
87
103
  export interface CreateMachineOptions {
88
104
  initialState?: JsonObject;
89
105
  options?: JsonObject;
106
+ /** Events to replay through the machine to restore state */
107
+ events?: Array<{
108
+ type: string;
109
+ } & Record<string, unknown>>;
90
110
  }
91
- declare const ACTIONS: {
92
- readonly START_BRAIN: "startBrain";
93
- readonly RESTART_BRAIN: "restartBrain";
94
- readonly COMPLETE_BRAIN: "completeBrain";
95
- readonly ERROR_BRAIN: "errorBrain";
96
- readonly CANCEL_BRAIN: "cancelBrain";
97
- readonly WEBHOOK: "webhook";
98
- readonly WEBHOOK_RESPONSE: "webhookResponse";
99
- readonly START_STEP: "startStep";
100
- readonly COMPLETE_STEP: "completeStep";
101
- readonly STEP_STATUS: "stepStatus";
102
- readonly STEP_RETRY: "stepRetry";
103
- readonly LOOP_START: "loopStart";
104
- readonly LOOP_ITERATION: "loopIteration";
105
- readonly LOOP_TOOL_CALL: "loopToolCall";
106
- readonly LOOP_TOOL_RESULT: "loopToolResult";
107
- readonly LOOP_ASSISTANT_MESSAGE: "loopAssistantMessage";
108
- readonly LOOP_COMPLETE: "loopComplete";
109
- readonly LOOP_TOKEN_LIMIT: "loopTokenLimit";
110
- readonly LOOP_WEBHOOK: "loopWebhook";
111
- readonly HEARTBEAT: "heartbeat";
112
- };
113
- export { ACTIONS as BRAIN_ACTIONS };
114
111
  export interface BrainStateMachine {
115
112
  machine: {
116
113
  current: string;
@@ -124,16 +121,31 @@ export interface BrainStateMachine {
124
121
  }
125
122
  /**
126
123
  * Create a new brain execution state machine.
124
+ * Optionally replay events to restore state from history.
127
125
  */
128
126
  export declare function createBrainExecutionMachine(options?: CreateMachineOptions): BrainStateMachine;
129
127
  /**
130
- * Send a transition action to the machine.
131
- * After calling this, read machine.context.currentEvent to get the event to yield.
128
+ * Create an uninterpreted brain execution machine.
129
+ * Use with robot3's interpret() or react-robot's useMachine() hook.
132
130
  */
133
- export declare function sendAction(machine: BrainStateMachine, action: string, payload?: object): void;
131
+ export declare function createBrainMachine(options?: CreateMachineOptions): robot3.Machine<{
132
+ idle: robot3.MachineState<string>;
133
+ running: robot3.MachineState<string>;
134
+ paused: robot3.MachineState<string>;
135
+ complete: robot3.MachineState<any>;
136
+ error: robot3.MachineState<string>;
137
+ cancelled: robot3.MachineState<any>;
138
+ }, BrainExecutionContext, robot3.AllStateKeys<{
139
+ idle: robot3.MachineState<string>;
140
+ running: robot3.MachineState<string>;
141
+ paused: robot3.MachineState<string>;
142
+ complete: robot3.MachineState<any>;
143
+ error: robot3.MachineState<string>;
144
+ cancelled: robot3.MachineState<any>;
145
+ }>, string>;
134
146
  /**
135
- * Feed an incoming event into the machine to update state (observer mode).
136
- * Maps brain event types to machine actions.
147
+ * Send an event to the machine.
148
+ * The machine transitions use BRAIN_EVENTS types directly, so just pass the event through.
137
149
  */
138
150
  export declare function sendEvent(machine: BrainStateMachine, event: {
139
151
  type: string;
@@ -148,7 +160,7 @@ export declare function getPendingWebhooks(machine: BrainStateMachine): WebhookR
148
160
  export declare function getError(machine: BrainStateMachine): SerializedError | null;
149
161
  /**
150
162
  * Get the completed steps from the state machine in the format needed for resume.
151
- * This reconstructs the nested step hierarchy from the brain stack.
163
+ * This reconstructs the nested step hierarchy from the brain tree.
152
164
  * Returns a deep copy to avoid mutating the state machine's context.
153
165
  */
154
166
  export declare function getCompletedSteps(machine: BrainStateMachine): StepInfo[];
@@ -1 +1 @@
1
- {"version":3,"file":"brain-state-machine.d.ts","sourceRoot":"","sources":["../../../src/dsl/brain-state-machine.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"brain-state-machine.d.ts","sourceRoot":"","sources":["../../../src/dsl/brain-state-machine.ts"],"names":[],"mappings":"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"}
@@ -17,6 +17,6 @@ export { RESOURCE_TYPES } from './resources/resources.js';
17
17
  export type { LoopStartEvent, LoopIterationEvent, LoopToolCallEvent, LoopToolResultEvent, LoopAssistantMessageEvent, LoopCompleteEvent, LoopTokenLimitEvent, LoopWebhookEvent, WebhookResponseEvent, HeartbeatEvent, } from './dsl/brain.js';
18
18
  export type { LoopResumeContext } from './dsl/loop-messages.js';
19
19
  export { reconstructLoopContext } from './dsl/loop-messages.js';
20
- export { createBrainExecutionMachine, sendAction, sendEvent, getDepth, isTopLevel, getCurrentStep, getBrainStack, getBrainRunId, getExecutionState, getPendingWebhooks, getError, getCompletedSteps, BRAIN_ACTIONS, } from './dsl/brain-state-machine.js';
21
- export type { BrainStateMachine, BrainExecutionContext, BrainStackEntry, StepInfo, ExecutionState, CreateMachineOptions, } from './dsl/brain-state-machine.js';
20
+ export { createBrainExecutionMachine, createBrainMachine, sendEvent, getDepth, isTopLevel, getCurrentStep, getBrainStack, getBrainRunId, getExecutionState, getPendingWebhooks, getError, getCompletedSteps, } from './dsl/brain-state-machine.js';
21
+ export type { BrainStateMachine, BrainExecutionContext, BrainStackEntry, RunningBrain, StepInfo, ExecutionState, CreateMachineOptions, } from './dsl/brain-state-machine.js';
22
22
  //# 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,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC3D,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,cAAc,EACd,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EACV,KAAK,EACL,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,eAAe,EACf,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,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,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,YAAY,EACV,QAAQ,IAAI,gBAAgB,EAC5B,KAAK,IAAI,aAAa,EACtB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,GACf,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EACL,2BAA2B,EAC3B,UAAU,EACV,SAAS,EACT,QAAQ,EACR,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,EACjB,aAAa,GACd,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,QAAQ,EACR,cAAc,EACd,oBAAoB,GACrB,MAAM,8BAA8B,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AAC3D,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,cAAc,EACd,YAAY,GACb,MAAM,gBAAgB,CAAC;AACxB,YAAY,EAAE,eAAe,EAAE,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAChF,YAAY,EACV,KAAK,EACL,UAAU,EACV,OAAO,EACP,QAAQ,EACR,UAAU,EACV,WAAW,EACX,eAAe,EACf,oBAAoB,GACrB,MAAM,gBAAgB,CAAC;AACxB,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,EAAE,YAAY,EAAE,IAAI,EAAE,iBAAiB,EAAE,MAAM,gBAAgB,CAAC;AAC5E,YAAY,EACV,QAAQ,IAAI,gBAAgB,EAC5B,KAAK,IAAI,aAAa,EACtB,YAAY,GACb,MAAM,0BAA0B,CAAC;AAClC,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAG1D,YAAY,EACV,cAAc,EACd,kBAAkB,EAClB,iBAAiB,EACjB,mBAAmB,EACnB,yBAAyB,EACzB,iBAAiB,EACjB,mBAAmB,EACnB,gBAAgB,EAChB,oBAAoB,EACpB,cAAc,GACf,MAAM,gBAAgB,CAAC;AAGxB,YAAY,EAAE,iBAAiB,EAAE,MAAM,wBAAwB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,wBAAwB,CAAC;AAGhE,OAAO,EACL,2BAA2B,EAC3B,kBAAkB,EAClB,SAAS,EACT,QAAQ,EACR,UAAU,EACV,cAAc,EACd,aAAa,EACb,aAAa,EACb,iBAAiB,EACjB,kBAAkB,EAClB,QAAQ,EACR,iBAAiB,GAClB,MAAM,8BAA8B,CAAC;AACtC,YAAY,EACV,iBAAiB,EACjB,qBAAqB,EACrB,eAAe,EACf,YAAY,EACZ,QAAQ,EACR,cAAc,EACd,oBAAoB,GACrB,MAAM,8BAA8B,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@positronic/core",
3
- "version": "0.0.49",
3
+ "version": "0.0.52",
4
4
  "publishConfig": {
5
5
  "access": "public"
6
6
  },