@positronic/core 0.0.75 → 0.0.77
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/src/dsl/brain-runner.js +7 -6
- package/dist/src/dsl/brain-state-machine.js +43 -14
- package/dist/src/dsl/builder/brain.js +98 -32
- package/dist/src/dsl/constants.js +2 -2
- package/dist/src/dsl/execution/event-stream.js +937 -358
- package/dist/src/dsl/iterate-result.js +161 -0
- package/dist/src/dsl/signal-validation.js +5 -5
- package/dist/src/index.js +1 -0
- package/dist/src/tools/index.js +0 -3
- package/dist/types/dsl/brain-runner.d.ts.map +1 -1
- package/dist/types/dsl/brain-state-machine.d.ts +11 -4
- package/dist/types/dsl/brain-state-machine.d.ts.map +1 -1
- package/dist/types/dsl/brain.d.ts +1 -1
- package/dist/types/dsl/brain.d.ts.map +1 -1
- package/dist/types/dsl/builder/brain.d.ts +66 -13
- package/dist/types/dsl/builder/brain.d.ts.map +1 -1
- package/dist/types/dsl/constants.d.ts +1 -1
- package/dist/types/dsl/create-brain.d.ts +14 -14
- package/dist/types/dsl/create-brain.d.ts.map +1 -1
- package/dist/types/dsl/definitions/blocks.d.ts +27 -6
- package/dist/types/dsl/definitions/blocks.d.ts.map +1 -1
- package/dist/types/dsl/definitions/events.d.ts +9 -6
- package/dist/types/dsl/definitions/events.d.ts.map +1 -1
- package/dist/types/dsl/definitions/run-params.d.ts +3 -1
- package/dist/types/dsl/definitions/run-params.d.ts.map +1 -1
- package/dist/types/dsl/duration.d.ts.map +1 -1
- package/dist/types/dsl/example-webhook.d.ts.map +1 -1
- package/dist/types/dsl/execution/event-stream.d.ts +19 -3
- package/dist/types/dsl/execution/event-stream.d.ts.map +1 -1
- package/dist/types/dsl/iterate-result.d.ts +13 -0
- package/dist/types/dsl/iterate-result.d.ts.map +1 -0
- package/dist/types/dsl/pages.d.ts.map +1 -1
- package/dist/types/dsl/signal-validation.d.ts.map +1 -1
- package/dist/types/dsl/types.d.ts +1 -3
- package/dist/types/dsl/types.d.ts.map +1 -1
- package/dist/types/dsl/webhook.d.ts +4 -0
- package/dist/types/dsl/webhook.d.ts.map +1 -1
- package/dist/types/index.d.ts +7 -5
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/store/index.d.ts +1 -1
- package/dist/types/store/index.d.ts.map +1 -1
- package/dist/types/store/types.d.ts +2 -2
- package/dist/types/store/types.d.ts.map +1 -1
- package/dist/types/tools/index.d.ts.map +1 -1
- package/dist/types/ui/generate-page-html.d.ts.map +1 -1
- package/dist/types/ui/generate-ui.d.ts.map +1 -1
- package/dist/types/ui/parse-form-data.d.ts.map +1 -1
- package/dist/types/ui/types.d.ts.map +1 -1
- package/dist/types/ui/validate-form.d.ts.map +1 -1
- package/dist/types/yaml/data-validator.d.ts.map +1 -1
- package/dist/types/yaml/parser.d.ts.map +1 -1
- package/dist/types/yaml/type-inference.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -281,7 +281,7 @@ import { DEFAULT_ENV } from './brain.js';
|
|
|
281
281
|
* Adds agent context to the deepest level.
|
|
282
282
|
* Webhook response is no longer passed here - it comes from signals during execution.
|
|
283
283
|
* This is internal to BrainRunner - external consumers don't need to know about ResumeContext.
|
|
284
|
-
*/ function executionStackToResumeContext(stack, agentContext,
|
|
284
|
+
*/ function executionStackToResumeContext(stack, agentContext, iterateContext, currentPage) {
|
|
285
285
|
if (stack.length === 0) {
|
|
286
286
|
throw new Error('Cannot convert empty execution stack to ResumeContext');
|
|
287
287
|
}
|
|
@@ -290,12 +290,13 @@ import { DEFAULT_ENV } from './brain.js';
|
|
|
290
290
|
for(var i = stack.length - 1; i >= 0; i--){
|
|
291
291
|
var entry = stack[i];
|
|
292
292
|
if (i === stack.length - 1) {
|
|
293
|
-
// Deepest level - add agent context
|
|
293
|
+
// Deepest level - add agent context, iterate progress, and page context
|
|
294
294
|
context = {
|
|
295
295
|
stepIndex: entry.stepIndex,
|
|
296
296
|
state: entry.state,
|
|
297
297
|
agentContext: agentContext !== null && agentContext !== void 0 ? agentContext : undefined,
|
|
298
|
-
|
|
298
|
+
iterateProgress: iterateContext !== null && iterateContext !== void 0 ? iterateContext : undefined,
|
|
299
|
+
currentPage: currentPage !== null && currentPage !== void 0 ? currentPage : undefined
|
|
299
300
|
};
|
|
300
301
|
} else {
|
|
301
302
|
// Outer level - wrap inner context
|
|
@@ -427,13 +428,13 @@ export var BrainRunner = /*#__PURE__*/ function() {
|
|
|
427
428
|
* Webhook response data comes from signals, not as a parameter.
|
|
428
429
|
*/ function resume(brain, options) {
|
|
429
430
|
return _async_to_generator(function() {
|
|
430
|
-
var machine, brainRunId, brainOptions, endAfter, signal, currentUser, _machine_context, executionStack, agentContext,
|
|
431
|
+
var machine, brainRunId, brainOptions, endAfter, signal, currentUser, _machine_context, executionStack, agentContext, iterateContext, currentPage, resumeContext;
|
|
431
432
|
return _ts_generator(this, function(_state) {
|
|
432
433
|
machine = options.machine, brainRunId = options.brainRunId, brainOptions = options.options, endAfter = options.endAfter, signal = options.signal, currentUser = options.currentUser;
|
|
433
434
|
// Build ResumeContext from machine's execution stack
|
|
434
435
|
// Webhook response comes from signals during execution, not from resume parameters
|
|
435
|
-
_machine_context = machine.context, executionStack = _machine_context.executionStack, agentContext = _machine_context.agentContext,
|
|
436
|
-
resumeContext = executionStackToResumeContext(executionStack, agentContext,
|
|
436
|
+
_machine_context = machine.context, executionStack = _machine_context.executionStack, agentContext = _machine_context.agentContext, iterateContext = _machine_context.iterateContext, currentPage = _machine_context.currentPage;
|
|
437
|
+
resumeContext = executionStackToResumeContext(executionStack, agentContext, iterateContext, currentPage);
|
|
437
438
|
return [
|
|
438
439
|
2,
|
|
439
440
|
this.execute(brain, {
|
|
@@ -101,6 +101,7 @@ import { applyPatches } from './json-patch.js';
|
|
|
101
101
|
brainRunId: entry.brainRunId,
|
|
102
102
|
brainTitle: entry.brainTitle,
|
|
103
103
|
brainDescription: entry.brainDescription,
|
|
104
|
+
options: entry.options,
|
|
104
105
|
parentStepId: entry.parentStepId,
|
|
105
106
|
steps: entry.steps,
|
|
106
107
|
innerBrain: innerBrain,
|
|
@@ -125,7 +126,8 @@ var createInitialContext = function(opts) {
|
|
|
125
126
|
currentState: (_opts_initialState = opts === null || opts === void 0 ? void 0 : opts.initialState) !== null && _opts_initialState !== void 0 ? _opts_initialState : {},
|
|
126
127
|
options: (_opts_options = opts === null || opts === void 0 ? void 0 : opts.options) !== null && _opts_options !== void 0 ? _opts_options : {},
|
|
127
128
|
agentContext: null,
|
|
128
|
-
|
|
129
|
+
iterateContext: null,
|
|
130
|
+
currentPage: null,
|
|
129
131
|
status: STATUS.PENDING,
|
|
130
132
|
isTopLevel: false,
|
|
131
133
|
isRunning: false,
|
|
@@ -190,7 +192,7 @@ var updateDerivedState = function(ctx, executionState) {
|
|
|
190
192
|
// Reducers - Update context on transitions
|
|
191
193
|
// ============================================================================
|
|
192
194
|
var startBrain = reduce(function(ctx, param) {
|
|
193
|
-
var brainRunId = param.brainRunId, brainTitle = param.brainTitle, brainDescription = param.brainDescription, initialState = param.initialState;
|
|
195
|
+
var brainRunId = param.brainRunId, brainTitle = param.brainTitle, brainDescription = param.brainDescription, options = param.options, initialState = param.initialState;
|
|
194
196
|
var currentStepId = ctx.currentStepId, depth = ctx.depth, existingBrainRunId = ctx.brainRunId, currentState = ctx.currentState, brains = ctx.brains, brainIdStack = ctx.brainIdStack, executionStack = ctx.executionStack;
|
|
195
197
|
var newDepth = depth + 1;
|
|
196
198
|
var brainInitialState = initialState !== null && initialState !== void 0 ? initialState : currentState;
|
|
@@ -200,6 +202,7 @@ var startBrain = reduce(function(ctx, param) {
|
|
|
200
202
|
brainRunId: brainRunId,
|
|
201
203
|
brainTitle: brainTitle,
|
|
202
204
|
brainDescription: brainDescription,
|
|
205
|
+
options: options,
|
|
203
206
|
parentStepId: currentStepId,
|
|
204
207
|
parentBrainId: parentBrainId,
|
|
205
208
|
steps: [],
|
|
@@ -276,6 +279,19 @@ var errorBrain = reduce(function(ctx, param) {
|
|
|
276
279
|
});
|
|
277
280
|
return updateDerivedState(newCtx, 'error');
|
|
278
281
|
});
|
|
282
|
+
var completeInnerBrainError = reduce(function(ctx, param) {
|
|
283
|
+
var error = param.error;
|
|
284
|
+
var depth = ctx.depth, brainIdStack = ctx.brainIdStack, executionStack = ctx.executionStack;
|
|
285
|
+
if (brainIdStack.length === 0) return ctx;
|
|
286
|
+
var newCtx = _object_spread_props(_object_spread({}, ctx), {
|
|
287
|
+
brainIdStack: brainIdStack.slice(0, -1),
|
|
288
|
+
executionStack: executionStack.slice(0, -1),
|
|
289
|
+
depth: depth - 1,
|
|
290
|
+
error: error,
|
|
291
|
+
agentContext: null
|
|
292
|
+
});
|
|
293
|
+
return updateDerivedState(newCtx, 'running');
|
|
294
|
+
});
|
|
279
295
|
var cancelBrain = reduce(function(ctx) {
|
|
280
296
|
return updateDerivedState(ctx, 'cancelled');
|
|
281
297
|
});
|
|
@@ -319,7 +335,8 @@ var startStep = reduce(function(ctx, param) {
|
|
|
319
335
|
});
|
|
320
336
|
});
|
|
321
337
|
var completeStep = reduce(function(ctx, param) {
|
|
322
|
-
var stepId = param.stepId, stepTitle = param.stepTitle, patch = param.patch, halted = param.halted;
|
|
338
|
+
var stepId = param.stepId, stepTitle = param.stepTitle, patch = param.patch, halted = param.halted, pageContext = param.pageContext;
|
|
339
|
+
var _ctx_iterateContext;
|
|
323
340
|
var brains = ctx.brains, brainIdStack = ctx.brainIdStack, executionStack = ctx.executionStack, depth = ctx.depth, currentState = ctx.currentState, topLevelStepCount = ctx.topLevelStepCount;
|
|
324
341
|
if (brainIdStack.length === 0) return ctx;
|
|
325
342
|
// === NEW: Update flat structures ===
|
|
@@ -374,12 +391,19 @@ var completeStep = reduce(function(ctx, param) {
|
|
|
374
391
|
]);
|
|
375
392
|
newStepCount = topLevelStepCount + 1;
|
|
376
393
|
}
|
|
394
|
+
// Only clear iterateContext when the iterate step itself completes,
|
|
395
|
+
// not when inner brain steps complete during iteration
|
|
396
|
+
var newIterateContext = ((_ctx_iterateContext = ctx.iterateContext) === null || _ctx_iterateContext === void 0 ? void 0 : _ctx_iterateContext.stepId) === stepId ? null : ctx.iterateContext;
|
|
397
|
+
// Track page context: set when UI step completes (has pageContext),
|
|
398
|
+
// clear when the next step completes (page is ephemeral)
|
|
399
|
+
var newCurrentPage = pageContext !== null && pageContext !== void 0 ? pageContext : null;
|
|
377
400
|
return _object_spread_props(_object_spread({}, ctx), {
|
|
378
401
|
brains: newBrains,
|
|
379
402
|
executionStack: newExecutionStack,
|
|
380
403
|
currentState: newState1,
|
|
381
404
|
topLevelStepCount: newStepCount,
|
|
382
|
-
|
|
405
|
+
iterateContext: newIterateContext,
|
|
406
|
+
currentPage: newCurrentPage
|
|
383
407
|
});
|
|
384
408
|
});
|
|
385
409
|
var webhookPause = reduce(function(ctx, param) {
|
|
@@ -442,15 +466,17 @@ var passthrough = function() {
|
|
|
442
466
|
return ctx;
|
|
443
467
|
});
|
|
444
468
|
};
|
|
445
|
-
// Reducer for
|
|
446
|
-
var
|
|
447
|
-
var existing = ctx.
|
|
469
|
+
// Reducer for ITERATE_ITEM_COMPLETE - appends a single item result into iterateContext
|
|
470
|
+
var iterateItemComplete = reduce(function(ctx, payload) {
|
|
471
|
+
var existing = ctx.iterateContext;
|
|
448
472
|
var newResults = (existing === null || existing === void 0 ? void 0 : existing.accumulatedResults) ? _to_consumable_array(existing.accumulatedResults) : [];
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
473
|
+
newResults[payload.itemIndex] = payload.result != null ? [
|
|
474
|
+
payload.item,
|
|
475
|
+
payload.result
|
|
476
|
+
] : undefined;
|
|
452
477
|
return _object_spread_props(_object_spread({}, ctx), {
|
|
453
|
-
|
|
478
|
+
iterateContext: {
|
|
479
|
+
stepId: payload.stepId,
|
|
454
480
|
accumulatedResults: newResults,
|
|
455
481
|
processedCount: payload.processedCount,
|
|
456
482
|
totalItems: payload.totalItems,
|
|
@@ -559,13 +585,14 @@ var makeBrainMachine = function(initialContext) {
|
|
|
559
585
|
transition(BRAIN_EVENTS.START, 'running', startBrain), // Outer brain complete -> terminal
|
|
560
586
|
transition(BRAIN_EVENTS.COMPLETE, 'complete', isOuterBrain, completeBrain), // Inner brain complete -> stay running
|
|
561
587
|
transition(BRAIN_EVENTS.COMPLETE, 'running', isInnerBrain, completeBrain), // Error (only outer brain errors are terminal)
|
|
562
|
-
transition(BRAIN_EVENTS.ERROR, 'error', isOuterBrain, errorBrain), //
|
|
588
|
+
transition(BRAIN_EVENTS.ERROR, 'error', isOuterBrain, errorBrain), // Inner brain error -> stay running (pop the inner brain off the stack)
|
|
589
|
+
transition(BRAIN_EVENTS.ERROR, 'running', isInnerBrain, completeInnerBrainError), // Cancelled
|
|
563
590
|
transition(BRAIN_EVENTS.CANCELLED, 'cancelled', cancelBrain), // Paused (by signal)
|
|
564
591
|
transition(BRAIN_EVENTS.PAUSED, 'paused', pauseBrain), // Webhook -> waiting (for non-agent webhooks)
|
|
565
592
|
transition(BRAIN_EVENTS.WEBHOOK, 'waiting', webhookPause), // Webhook response (for resume from non-agent webhook)
|
|
566
593
|
transition(BRAIN_EVENTS.WEBHOOK_RESPONSE, 'running', webhookResponse), // Step events
|
|
567
|
-
transition(BRAIN_EVENTS.STEP_START, 'running', startStep), transition(BRAIN_EVENTS.STEP_COMPLETE, 'running', completeStep), transition(BRAIN_EVENTS.STEP_STATUS, 'running', stepStatus), //
|
|
568
|
-
transition(BRAIN_EVENTS.
|
|
594
|
+
transition(BRAIN_EVENTS.STEP_START, 'running', startStep), transition(BRAIN_EVENTS.STEP_COMPLETE, 'running', completeStep), transition(BRAIN_EVENTS.STEP_STATUS, 'running', stepStatus), // Iterate item complete - stays in running, accumulates results
|
|
595
|
+
transition(BRAIN_EVENTS.ITERATE_ITEM_COMPLETE, 'running', iterateItemComplete), // AGENT_START transitions to the agentLoop state
|
|
569
596
|
transition(BRAIN_EVENTS.AGENT_START, 'agentLoop', agentStart)),
|
|
570
597
|
// Explicit agent loop state - isolates agent execution logic
|
|
571
598
|
agentLoop: state.apply(void 0, // Spread agent micro-transitions
|
|
@@ -579,6 +606,8 @@ var makeBrainMachine = function(initialContext) {
|
|
|
579
606
|
transition(BRAIN_EVENTS.WEBHOOK, 'waiting', webhookPause),
|
|
580
607
|
// Error handling
|
|
581
608
|
transition(BRAIN_EVENTS.ERROR, 'error', isOuterBrain, errorBrain),
|
|
609
|
+
// Inner brain error -> back to running (pop inner brain, clear agentContext)
|
|
610
|
+
transition(BRAIN_EVENTS.ERROR, 'running', isInnerBrain, completeInnerBrainError),
|
|
582
611
|
transition(BRAIN_EVENTS.CANCELLED, 'cancelled', cancelBrain)
|
|
583
612
|
])),
|
|
584
613
|
paused: state(transition(BRAIN_EVENTS.CANCELLED, 'cancelled', cancelBrain), // RESUMED transitions out of paused state without creating a new brain
|
|
@@ -388,6 +388,7 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
388
388
|
_define_property(this, "optionsSchema", void 0);
|
|
389
389
|
_define_property(this, "components", void 0);
|
|
390
390
|
_define_property(this, "defaultTools", void 0);
|
|
391
|
+
_define_property(this, "extraTools", void 0);
|
|
391
392
|
_define_property(this, "memoryProvider", void 0);
|
|
392
393
|
_define_property(this, "storeSchema", void 0);
|
|
393
394
|
this.title = title;
|
|
@@ -447,6 +448,7 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
447
448
|
nextBrain.optionsSchema = this.optionsSchema;
|
|
448
449
|
nextBrain.components = this.components;
|
|
449
450
|
nextBrain.defaultTools = this.defaultTools;
|
|
451
|
+
nextBrain.extraTools = this.extraTools;
|
|
450
452
|
nextBrain.memoryProvider = this.memoryProvider;
|
|
451
453
|
nextBrain.storeSchema = this.storeSchema;
|
|
452
454
|
return nextBrain;
|
|
@@ -460,6 +462,7 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
460
462
|
nextBrain.services = this.services;
|
|
461
463
|
nextBrain.components = this.components;
|
|
462
464
|
nextBrain.defaultTools = this.defaultTools;
|
|
465
|
+
nextBrain.extraTools = this.extraTools;
|
|
463
466
|
nextBrain.memoryProvider = this.memoryProvider;
|
|
464
467
|
nextBrain.storeSchema = this.storeSchema;
|
|
465
468
|
return nextBrain;
|
|
@@ -486,6 +489,7 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
486
489
|
nextBrain.services = this.services;
|
|
487
490
|
nextBrain.components = components;
|
|
488
491
|
nextBrain.defaultTools = this.defaultTools;
|
|
492
|
+
nextBrain.extraTools = this.extraTools;
|
|
489
493
|
nextBrain.memoryProvider = this.memoryProvider;
|
|
490
494
|
nextBrain.storeSchema = this.storeSchema;
|
|
491
495
|
return nextBrain;
|
|
@@ -520,6 +524,31 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
520
524
|
},
|
|
521
525
|
{
|
|
522
526
|
/**
|
|
527
|
+
* Add extra tools on top of whatever default tools are already configured.
|
|
528
|
+
* Unlike `withTools()` which replaces defaults, this merges additively.
|
|
529
|
+
*
|
|
530
|
+
* @param tools - Record of additional tool definitions
|
|
531
|
+
*
|
|
532
|
+
* @example
|
|
533
|
+
* ```typescript
|
|
534
|
+
* const myBrain = createBrain({ defaultTools })
|
|
535
|
+
* ('my-brain')
|
|
536
|
+
* .withExtraTools({ myCustomTool })
|
|
537
|
+
* .brain('agent', ({ tools }) => ({
|
|
538
|
+
* system: 'You are helpful',
|
|
539
|
+
* prompt: 'Do something',
|
|
540
|
+
* tools // includes both defaults and myCustomTool
|
|
541
|
+
* }));
|
|
542
|
+
* ```
|
|
543
|
+
*/ key: "withExtraTools",
|
|
544
|
+
value: function withExtraTools(tools) {
|
|
545
|
+
var next = this.nextBrain();
|
|
546
|
+
next.extraTools = tools;
|
|
547
|
+
return next;
|
|
548
|
+
}
|
|
549
|
+
},
|
|
550
|
+
{
|
|
551
|
+
/**
|
|
523
552
|
* Configure a memory provider for this brain.
|
|
524
553
|
* When configured, steps receive a scoped memory instance in their context.
|
|
525
554
|
*
|
|
@@ -573,6 +602,7 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
573
602
|
nextBrain.services = this.services;
|
|
574
603
|
nextBrain.components = this.components;
|
|
575
604
|
nextBrain.defaultTools = this.defaultTools;
|
|
605
|
+
nextBrain.extraTools = this.extraTools;
|
|
576
606
|
nextBrain.memoryProvider = this.memoryProvider;
|
|
577
607
|
nextBrain.storeSchema = storeSchema;
|
|
578
608
|
return nextBrain;
|
|
@@ -619,10 +649,32 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
619
649
|
{
|
|
620
650
|
// Implementation
|
|
621
651
|
key: "brain",
|
|
622
|
-
value: function brain(title, innerBrainOrConfig,
|
|
652
|
+
value: function brain(title, innerBrainOrConfig, actionOrIterateConfig, initialState) {
|
|
653
|
+
// Detect iterate config: 3rd arg is an object with `over` property
|
|
654
|
+
var isIterateConfig = actionOrIterateConfig && (typeof actionOrIterateConfig === "undefined" ? "undefined" : _type_of(actionOrIterateConfig)) === 'object' && 'over' in actionOrIterateConfig;
|
|
623
655
|
// Case 1: Nested brain instance
|
|
624
656
|
if (innerBrainOrConfig && (typeof innerBrainOrConfig === "undefined" ? "undefined" : _type_of(innerBrainOrConfig)) === 'object' && 'type' in innerBrainOrConfig && innerBrainOrConfig.type === 'brain') {
|
|
625
|
-
|
|
657
|
+
if (isIterateConfig) {
|
|
658
|
+
// Case 1b: Nested brain with iterate
|
|
659
|
+
var iterateConfig = actionOrIterateConfig;
|
|
660
|
+
var nestedBlock = {
|
|
661
|
+
type: 'brain',
|
|
662
|
+
title: title,
|
|
663
|
+
innerBrain: innerBrainOrConfig,
|
|
664
|
+
initialState: function() {
|
|
665
|
+
return {};
|
|
666
|
+
},
|
|
667
|
+
action: function() {
|
|
668
|
+
return {};
|
|
669
|
+
},
|
|
670
|
+
iterateConfig: iterateConfig
|
|
671
|
+
};
|
|
672
|
+
this.blocks.push(nestedBlock);
|
|
673
|
+
return this.nextBrain();
|
|
674
|
+
}
|
|
675
|
+
// Case 1a: Single nested brain (existing behavior)
|
|
676
|
+
var action = actionOrIterateConfig;
|
|
677
|
+
var nestedBlock1 = {
|
|
626
678
|
type: 'brain',
|
|
627
679
|
title: title,
|
|
628
680
|
innerBrain: innerBrainOrConfig,
|
|
@@ -637,26 +689,39 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
637
689
|
});
|
|
638
690
|
}
|
|
639
691
|
};
|
|
640
|
-
this.blocks.push(
|
|
692
|
+
this.blocks.push(nestedBlock1);
|
|
641
693
|
return this.nextBrain();
|
|
642
694
|
}
|
|
643
695
|
// Case 2 & 3: Agent config (object or function)
|
|
644
|
-
|
|
696
|
+
if (isIterateConfig) {
|
|
697
|
+
// Agent config with iterate — configFn receives (item, params)
|
|
698
|
+
var iterateConfig1 = actionOrIterateConfig;
|
|
699
|
+
var configFn = innerBrainOrConfig;
|
|
700
|
+
var agentBlock = {
|
|
701
|
+
type: 'agent',
|
|
702
|
+
title: title,
|
|
703
|
+
configFn: configFn,
|
|
704
|
+
iterateConfig: iterateConfig1
|
|
705
|
+
};
|
|
706
|
+
this.blocks.push(agentBlock);
|
|
707
|
+
return this.nextBrain();
|
|
708
|
+
}
|
|
709
|
+
var configFn1 = typeof innerBrainOrConfig === 'function' ? innerBrainOrConfig : function() {
|
|
645
710
|
return innerBrainOrConfig;
|
|
646
711
|
};
|
|
647
|
-
var
|
|
712
|
+
var agentBlock1 = {
|
|
648
713
|
type: 'agent',
|
|
649
714
|
title: title,
|
|
650
|
-
configFn:
|
|
715
|
+
configFn: configFn1
|
|
651
716
|
};
|
|
652
|
-
this.blocks.push(
|
|
717
|
+
this.blocks.push(agentBlock1);
|
|
653
718
|
return this.nextBrain();
|
|
654
719
|
}
|
|
655
720
|
},
|
|
656
721
|
{
|
|
657
722
|
// Implementation
|
|
658
723
|
key: "prompt",
|
|
659
|
-
value: function prompt(title, config,
|
|
724
|
+
value: function prompt(title, config, iterateConfig) {
|
|
660
725
|
// Schema-less prompt - returns text response for next step
|
|
661
726
|
if (!config.outputSchema) {
|
|
662
727
|
var textSchema = z.object({
|
|
@@ -667,7 +732,7 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
667
732
|
title: title,
|
|
668
733
|
client: config.client,
|
|
669
734
|
action: function(param) {
|
|
670
|
-
var state = param.state, client = param.client, resources = param.resources;
|
|
735
|
+
var state = param.state, options = param.options, client = param.client, resources = param.resources;
|
|
671
736
|
return _async_to_generator(function() {
|
|
672
737
|
var prompt, result;
|
|
673
738
|
return _ts_generator(this, function(_state) {
|
|
@@ -675,7 +740,11 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
675
740
|
case 0:
|
|
676
741
|
return [
|
|
677
742
|
4,
|
|
678
|
-
config.template(
|
|
743
|
+
config.template({
|
|
744
|
+
state: state,
|
|
745
|
+
options: options,
|
|
746
|
+
resources: resources
|
|
747
|
+
})
|
|
679
748
|
];
|
|
680
749
|
case 1:
|
|
681
750
|
prompt = _state.sent();
|
|
@@ -706,8 +775,8 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
706
775
|
}
|
|
707
776
|
// At this point, outputSchema is guaranteed to exist (schema-less case returned early)
|
|
708
777
|
var outputSchema = config.outputSchema;
|
|
709
|
-
if (
|
|
710
|
-
//
|
|
778
|
+
if (iterateConfig) {
|
|
779
|
+
// Iterate mode - store config on block for event-stream to execute with per-item events
|
|
711
780
|
var promptBlock1 = {
|
|
712
781
|
type: 'step',
|
|
713
782
|
title: title,
|
|
@@ -722,14 +791,13 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
722
791
|
});
|
|
723
792
|
})();
|
|
724
793
|
},
|
|
725
|
-
|
|
726
|
-
over:
|
|
727
|
-
error:
|
|
794
|
+
iterateConfig: {
|
|
795
|
+
over: iterateConfig.over,
|
|
796
|
+
error: iterateConfig.error,
|
|
728
797
|
template: config.template,
|
|
729
798
|
schema: outputSchema.schema,
|
|
730
799
|
schemaName: outputSchema.name,
|
|
731
|
-
client: config.client
|
|
732
|
-
concurrency: batchConfig.concurrency
|
|
800
|
+
client: config.client
|
|
733
801
|
}
|
|
734
802
|
};
|
|
735
803
|
this.blocks.push(promptBlock1);
|
|
@@ -741,7 +809,7 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
741
809
|
title: title,
|
|
742
810
|
client: config.client,
|
|
743
811
|
action: function(param) {
|
|
744
|
-
var state = param.state, client = param.client, resources = param.resources;
|
|
812
|
+
var state = param.state, options = param.options, client = param.client, resources = param.resources;
|
|
745
813
|
return _async_to_generator(function() {
|
|
746
814
|
var schema, schemaName, prompt, result;
|
|
747
815
|
return _ts_generator(this, function(_state) {
|
|
@@ -750,7 +818,11 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
750
818
|
schema = outputSchema.schema, schemaName = outputSchema.name;
|
|
751
819
|
return [
|
|
752
820
|
4,
|
|
753
|
-
config.template(
|
|
821
|
+
config.template({
|
|
822
|
+
state: state,
|
|
823
|
+
options: options,
|
|
824
|
+
resources: resources
|
|
825
|
+
})
|
|
754
826
|
];
|
|
755
827
|
case 1:
|
|
756
828
|
prompt = _state.sent();
|
|
@@ -801,7 +873,7 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
801
873
|
* brain('feedback-form')
|
|
802
874
|
* .step('Initialize', () => ({ userName: 'John' }))
|
|
803
875
|
* .ui('Create Form', {
|
|
804
|
-
* template: (state) => `Create a feedback form for ${state.userName}`,
|
|
876
|
+
* template: ({ state }) => `Create a feedback form for ${state.userName}`,
|
|
805
877
|
* responseSchema: z.object({
|
|
806
878
|
* rating: z.number().min(1).max(5),
|
|
807
879
|
* comments: z.string(),
|
|
@@ -849,21 +921,11 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
849
921
|
value: // Implementation signature
|
|
850
922
|
function run(params) {
|
|
851
923
|
return _wrap_async_generator(function() {
|
|
852
|
-
var _this, title, description, blocks,
|
|
924
|
+
var _this, title, description, blocks, store, stream;
|
|
853
925
|
return _ts_generator(this, function(_state) {
|
|
854
926
|
switch(_state.label){
|
|
855
927
|
case 0:
|
|
856
928
|
_this = this, title = _this.title, description = _this.description, blocks = _this.blocks;
|
|
857
|
-
if (this.optionsSchema) {
|
|
858
|
-
// Just call parse - Zod handles defaults automatically
|
|
859
|
-
validatedOptions = this.optionsSchema.parse(params.options || {});
|
|
860
|
-
} else {
|
|
861
|
-
// If no schema is defined but options are provided, throw error
|
|
862
|
-
if (params.options && Object.keys(params.options).length > 0) {
|
|
863
|
-
throw new Error("Brain '".concat(this.title, "' received options but no schema was defined. Use withOptionsSchema() to define a schema for options."));
|
|
864
|
-
}
|
|
865
|
-
validatedOptions = {};
|
|
866
|
-
}
|
|
867
929
|
// Build store if withStore() was called and a store provider is given
|
|
868
930
|
store = this.storeSchema && params.storeProvider ? params.storeProvider({
|
|
869
931
|
schema: this.storeSchema,
|
|
@@ -875,10 +937,12 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
875
937
|
description: description,
|
|
876
938
|
blocks: blocks
|
|
877
939
|
}, params), {
|
|
878
|
-
options:
|
|
940
|
+
options: params.options || {},
|
|
941
|
+
optionsSchema: this.optionsSchema,
|
|
879
942
|
services: this.services,
|
|
880
943
|
components: this.components,
|
|
881
944
|
defaultTools: this.defaultTools,
|
|
945
|
+
extraTools: this.extraTools,
|
|
882
946
|
memoryProvider: this.memoryProvider,
|
|
883
947
|
store: store
|
|
884
948
|
}));
|
|
@@ -916,6 +980,8 @@ export var Brain = /*#__PURE__*/ function() {
|
|
|
916
980
|
nextBrain.components = this.components;
|
|
917
981
|
// Copy defaultTools to the next brain
|
|
918
982
|
nextBrain.defaultTools = this.defaultTools;
|
|
983
|
+
// Copy extraTools to the next brain
|
|
984
|
+
nextBrain.extraTools = this.extraTools;
|
|
919
985
|
// Copy memoryProvider to the next brain
|
|
920
986
|
nextBrain.memoryProvider = this.memoryProvider;
|
|
921
987
|
// Copy store schema to the next brain
|
|
@@ -25,8 +25,8 @@ export var BRAIN_EVENTS = {
|
|
|
25
25
|
AGENT_WEBHOOK: 'agent:webhook',
|
|
26
26
|
AGENT_RAW_RESPONSE_MESSAGE: 'agent:raw_response_message',
|
|
27
27
|
AGENT_USER_MESSAGE: 'agent:user_message',
|
|
28
|
-
//
|
|
29
|
-
|
|
28
|
+
// Iterate events (prompt/brain with `over`)
|
|
29
|
+
ITERATE_ITEM_COMPLETE: 'iterate:item_complete'
|
|
30
30
|
};
|
|
31
31
|
export var STATUS = {
|
|
32
32
|
PENDING: 'pending',
|