@positronic/core 0.0.77 → 0.0.78
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 +37 -182
- package/dist/src/dsl/brain-state-machine.js +58 -112
- package/dist/src/dsl/brain.js +1 -0
- package/dist/src/dsl/builder/brain.js +250 -412
- package/dist/src/dsl/builder/continuation.js +67 -0
- package/dist/src/dsl/constants.js +16 -17
- package/dist/src/dsl/create-brain.js +29 -45
- package/dist/src/dsl/example-webhook.js +1 -1
- package/dist/src/dsl/execution/constants.js +0 -4
- package/dist/src/dsl/execution/event-channel.js +77 -0
- package/dist/src/dsl/execution/event-stream.js +1625 -1474
- package/dist/src/dsl/signal-validation.js +0 -1
- package/dist/src/dsl/webhook.js +4 -1
- package/dist/src/files/event-wrapper.js +268 -0
- package/dist/src/files/index.js +1 -0
- package/dist/src/files/mime.js +31 -0
- package/dist/src/files/types.js +13 -0
- package/dist/src/index.js +10 -3
- package/dist/src/jsx-runtime.js +49 -0
- package/dist/src/memory/{scoped-memory.js → create-memory.js} +5 -5
- package/dist/src/plugins/collect-webhooks.js +49 -0
- package/dist/src/plugins/define-plugin.js +15 -0
- package/dist/src/plugins/index.js +1 -0
- package/dist/src/plugins/types.js +4 -0
- package/dist/src/store/types.js +2 -3
- package/dist/src/template/render-html.js +282 -0
- package/dist/src/template/render.js +357 -0
- package/dist/src/tools/index.js +88 -27
- package/dist/src/ui/generate-page-html.js +6 -6
- package/dist/src/ui/{generate-ui.js → generate-page.js} +24 -12
- package/dist/src/ui/parse-form-data.js +1 -11
- package/dist/src/ui/types.js +0 -123
- package/dist/src/yaml/data-validator.js +0 -27
- package/dist/src/yaml/type-inference.js +10 -9
- package/dist/types/clients/types.d.ts +15 -5
- package/dist/types/clients/types.d.ts.map +1 -1
- package/dist/types/dsl/brain-runner.d.ts +9 -14
- package/dist/types/dsl/brain-runner.d.ts.map +1 -1
- package/dist/types/dsl/brain-state-machine.d.ts +18 -28
- package/dist/types/dsl/brain-state-machine.d.ts.map +1 -1
- package/dist/types/dsl/brain.d.ts +3 -2
- package/dist/types/dsl/brain.d.ts.map +1 -1
- package/dist/types/dsl/builder/brain.d.ts +85 -228
- package/dist/types/dsl/builder/brain.d.ts.map +1 -1
- package/dist/types/dsl/builder/continuation.d.ts +16 -0
- package/dist/types/dsl/builder/continuation.d.ts.map +1 -0
- package/dist/types/dsl/constants.d.ts +12 -12
- package/dist/types/dsl/constants.d.ts.map +1 -1
- package/dist/types/dsl/create-brain.d.ts +17 -57
- package/dist/types/dsl/create-brain.d.ts.map +1 -1
- package/dist/types/dsl/definitions/blocks.d.ts +67 -66
- package/dist/types/dsl/definitions/blocks.d.ts.map +1 -1
- package/dist/types/dsl/definitions/brain-types.d.ts +8 -11
- package/dist/types/dsl/definitions/brain-types.d.ts.map +1 -1
- package/dist/types/dsl/definitions/events.d.ts +61 -56
- package/dist/types/dsl/definitions/events.d.ts.map +1 -1
- package/dist/types/dsl/definitions/run-params.d.ts +20 -21
- package/dist/types/dsl/definitions/run-params.d.ts.map +1 -1
- package/dist/types/dsl/definitions/steps.d.ts +1 -1
- package/dist/types/dsl/definitions/steps.d.ts.map +1 -1
- package/dist/types/dsl/example-webhook.d.ts +3 -3
- package/dist/types/dsl/example-webhook.d.ts.map +1 -1
- package/dist/types/dsl/execution/constants.d.ts +0 -5
- package/dist/types/dsl/execution/constants.d.ts.map +1 -1
- package/dist/types/dsl/execution/event-channel.d.ts +16 -0
- package/dist/types/dsl/execution/event-channel.d.ts.map +1 -0
- package/dist/types/dsl/execution/event-stream.d.ts +46 -34
- package/dist/types/dsl/execution/event-stream.d.ts.map +1 -1
- package/dist/types/dsl/signal-validation.d.ts.map +1 -1
- package/dist/types/dsl/types.d.ts +21 -83
- package/dist/types/dsl/types.d.ts.map +1 -1
- package/dist/types/dsl/webhook.d.ts +12 -2
- package/dist/types/dsl/webhook.d.ts.map +1 -1
- package/dist/types/files/event-wrapper.d.ts +20 -0
- package/dist/types/files/event-wrapper.d.ts.map +1 -0
- package/dist/types/files/index.d.ts +2 -0
- package/dist/types/files/index.d.ts.map +1 -0
- package/dist/types/files/mime.d.ts +2 -0
- package/dist/types/files/mime.d.ts.map +1 -0
- package/dist/types/files/types.d.ts +88 -0
- package/dist/types/files/types.d.ts.map +1 -0
- package/dist/types/index.d.ts +22 -13
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/jsx-runtime.d.ts +35 -0
- package/dist/types/jsx-runtime.d.ts.map +1 -0
- package/dist/types/memory/{scoped-memory.d.ts → create-memory.d.ts} +7 -7
- package/dist/types/memory/create-memory.d.ts.map +1 -0
- package/dist/types/memory/types.d.ts +4 -4
- package/dist/types/memory/types.d.ts.map +1 -1
- package/dist/types/plugins/collect-webhooks.d.ts +8 -0
- package/dist/types/plugins/collect-webhooks.d.ts.map +1 -0
- package/dist/types/plugins/define-plugin.d.ts +25 -0
- package/dist/types/plugins/define-plugin.d.ts.map +1 -0
- package/dist/types/plugins/index.d.ts +3 -0
- package/dist/types/plugins/index.d.ts.map +1 -0
- package/dist/types/plugins/types.d.ts +83 -0
- package/dist/types/plugins/types.d.ts.map +1 -0
- 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 +0 -8
- package/dist/types/store/types.d.ts.map +1 -1
- package/dist/types/template/render-html.d.ts +9 -0
- package/dist/types/template/render-html.d.ts.map +1 -0
- package/dist/types/template/render.d.ts +15 -0
- package/dist/types/template/render.d.ts.map +1 -0
- package/dist/types/tools/index.d.ts +39 -27
- package/dist/types/tools/index.d.ts.map +1 -1
- package/dist/types/ui/generate-page-html.d.ts +4 -6
- package/dist/types/ui/generate-page-html.d.ts.map +1 -1
- package/dist/types/ui/{generate-ui.d.ts → generate-page.d.ts} +6 -6
- package/dist/types/ui/generate-page.d.ts.map +1 -0
- package/dist/types/ui/parse-form-data.d.ts +1 -5
- package/dist/types/ui/parse-form-data.d.ts.map +1 -1
- package/dist/types/ui/types.d.ts +0 -49
- package/dist/types/ui/types.d.ts.map +1 -1
- package/dist/types/yaml/data-validator.d.ts +0 -5
- package/dist/types/yaml/data-validator.d.ts.map +1 -1
- package/dist/types/yaml/type-inference.d.ts +4 -2
- package/dist/types/yaml/type-inference.d.ts.map +1 -1
- package/dist/types/yaml/types.d.ts +0 -1
- package/dist/types/yaml/types.d.ts.map +1 -1
- package/package.json +5 -1
- package/dist/src/dsl/agent-messages.js +0 -5
- package/dist/src/ui/validate-form.js +0 -428
- package/dist/types/dsl/agent-messages.d.ts +0 -12
- package/dist/types/dsl/agent-messages.d.ts.map +0 -1
- package/dist/types/memory/scoped-memory.d.ts.map +0 -1
- package/dist/types/ui/generate-ui.d.ts.map +0 -1
- package/dist/types/ui/validate-form.d.ts +0 -45
- package/dist/types/ui/validate-form.d.ts.map +0 -1
|
@@ -166,6 +166,35 @@ function AsyncFromSyncIterator(s) {
|
|
|
166
166
|
}
|
|
167
167
|
}, new AsyncFromSyncIterator(s);
|
|
168
168
|
}
|
|
169
|
+
function asyncGeneratorStep(gen, resolve, reject, _next, _throw, key, arg) {
|
|
170
|
+
try {
|
|
171
|
+
var info = gen[key](arg);
|
|
172
|
+
var value = info.value;
|
|
173
|
+
} catch (error) {
|
|
174
|
+
reject(error);
|
|
175
|
+
return;
|
|
176
|
+
}
|
|
177
|
+
if (info.done) {
|
|
178
|
+
resolve(value);
|
|
179
|
+
} else {
|
|
180
|
+
Promise.resolve(value).then(_next, _throw);
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
function _async_to_generator(fn) {
|
|
184
|
+
return function() {
|
|
185
|
+
var self = this, args = arguments;
|
|
186
|
+
return new Promise(function(resolve, reject) {
|
|
187
|
+
var gen = fn.apply(self, args);
|
|
188
|
+
function _next(value) {
|
|
189
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "next", value);
|
|
190
|
+
}
|
|
191
|
+
function _throw(err) {
|
|
192
|
+
asyncGeneratorStep(gen, resolve, reject, _next, _throw, "throw", err);
|
|
193
|
+
}
|
|
194
|
+
_next(undefined);
|
|
195
|
+
});
|
|
196
|
+
};
|
|
197
|
+
}
|
|
169
198
|
function _await_async_generator(value) {
|
|
170
199
|
return new _overload_yield(value, 0);
|
|
171
200
|
}
|
|
@@ -201,6 +230,13 @@ function _define_property(obj, key, value) {
|
|
|
201
230
|
}
|
|
202
231
|
return obj;
|
|
203
232
|
}
|
|
233
|
+
function _instanceof(left, right) {
|
|
234
|
+
if (right != null && typeof Symbol !== "undefined" && right[Symbol.hasInstance]) {
|
|
235
|
+
return !!right[Symbol.hasInstance](left);
|
|
236
|
+
} else {
|
|
237
|
+
return left instanceof right;
|
|
238
|
+
}
|
|
239
|
+
}
|
|
204
240
|
function _iterable_to_array(iter) {
|
|
205
241
|
if (typeof Symbol !== "undefined" && iter[Symbol.iterator] != null || iter["@@iterator"] != null) return Array.from(iter);
|
|
206
242
|
}
|
|
@@ -437,12 +473,15 @@ import { v4 as uuidv4 } from 'uuid';
|
|
|
437
473
|
import { STATUS, BRAIN_EVENTS } from '../constants.js';
|
|
438
474
|
import { createPatch, applyPatches } from '../json-patch.js';
|
|
439
475
|
import { IterateResult } from '../iterate-result.js';
|
|
440
|
-
import {
|
|
476
|
+
import { generatePage } from '../../ui/generate-page.js';
|
|
441
477
|
import { generatePageHtml } from '../../ui/generate-page-html.js';
|
|
442
|
-
import {
|
|
478
|
+
import { guessMimeType } from '../../files/mime.js';
|
|
479
|
+
import { EventChannel } from './event-channel.js';
|
|
480
|
+
import { wrapFilesWithEvents } from '../../files/event-wrapper.js';
|
|
443
481
|
import { Step } from '../builder/step.js';
|
|
444
|
-
import { DEFAULT_ENV
|
|
445
|
-
import {
|
|
482
|
+
import { DEFAULT_ENV } from './constants.js';
|
|
483
|
+
import { resolveTemplate, buildTemplateContext } from '../../template/render.js';
|
|
484
|
+
import { renderHtml, wrapHtmlDocument } from '../../template/render-html.js';
|
|
446
485
|
var clone = function(value) {
|
|
447
486
|
return structuredClone(value);
|
|
448
487
|
};
|
|
@@ -458,54 +497,56 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
458
497
|
_define_property(this, "description", void 0);
|
|
459
498
|
_define_property(this, "client", void 0);
|
|
460
499
|
_define_property(this, "options", void 0);
|
|
461
|
-
_define_property(this, "services", void 0);
|
|
462
500
|
_define_property(this, "resources", void 0);
|
|
463
501
|
_define_property(this, "pages", void 0);
|
|
464
502
|
_define_property(this, "env", void 0);
|
|
465
503
|
_define_property(this, "currentResponse", undefined);
|
|
466
504
|
_define_property(this, "currentPage", undefined);
|
|
467
|
-
_define_property(this, "
|
|
505
|
+
_define_property(this, "resume", void 0);
|
|
468
506
|
_define_property(this, "components", void 0);
|
|
469
|
-
_define_property(this, "defaultTools", void 0);
|
|
470
|
-
_define_property(this, "extraTools", void 0);
|
|
471
507
|
_define_property(this, "signalProvider", void 0);
|
|
472
|
-
_define_property(this, "memoryProvider", void 0);
|
|
473
|
-
_define_property(this, "scopedMemory", void 0);
|
|
474
508
|
_define_property(this, "store", void 0);
|
|
509
|
+
_define_property(this, "files", void 0);
|
|
510
|
+
_define_property(this, "storeProvider", void 0);
|
|
511
|
+
_define_property(this, "pluginInjections", void 0);
|
|
512
|
+
_define_property(this, "pluginAdapters", void 0);
|
|
513
|
+
_define_property(this, "pluginConfigs", void 0);
|
|
514
|
+
_define_property(this, "templateContext", void 0);
|
|
475
515
|
_define_property(this, "governor", void 0);
|
|
476
516
|
_define_property(this, "currentUser", void 0);
|
|
477
517
|
_define_property(this, "guards", new Map());
|
|
478
518
|
_define_property(this, "waits", new Map());
|
|
479
519
|
_define_property(this, "stopped", false);
|
|
480
520
|
_define_property(this, "optionsSchema", void 0);
|
|
481
|
-
var 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,
|
|
521
|
+
var 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, _params_resources = params.resources, resources = _params_resources === void 0 ? {} : _params_resources, pages = params.pages, env = params.env, components = params.components, signalProvider = params.signalProvider, store = params.store, files = params.files, currentUser = params.currentUser;
|
|
482
522
|
// Store governor for per-step client resolution
|
|
483
523
|
this.governor = params.governor;
|
|
484
524
|
this.currentUser = currentUser;
|
|
485
525
|
// Check if this is a resume run or fresh start
|
|
486
526
|
var resumeParams = params;
|
|
487
527
|
var initialParams = params;
|
|
488
|
-
var
|
|
528
|
+
var resume = resumeParams.resume;
|
|
489
529
|
this.title = title;
|
|
490
530
|
this.description = description;
|
|
491
531
|
this.client = client;
|
|
492
532
|
this.options = options;
|
|
493
|
-
this.services = services;
|
|
494
533
|
this.resources = resources;
|
|
495
534
|
this.pages = pages;
|
|
496
535
|
this.env = env !== null && env !== void 0 ? env : DEFAULT_ENV;
|
|
497
|
-
this.
|
|
536
|
+
this.resume = resume;
|
|
498
537
|
this.components = components;
|
|
499
|
-
this.defaultTools = defaultTools;
|
|
500
|
-
this.extraTools = extraTools;
|
|
501
538
|
this.signalProvider = signalProvider;
|
|
502
|
-
this.memoryProvider = memoryProvider;
|
|
503
539
|
this.store = store;
|
|
540
|
+
this.files = files;
|
|
541
|
+
this.storeProvider = params.storeProvider;
|
|
542
|
+
var _params_pluginInjections;
|
|
543
|
+
this.pluginInjections = (_params_pluginInjections = params.pluginInjections) !== null && _params_pluginInjections !== void 0 ? _params_pluginInjections : {};
|
|
544
|
+
var _params_pluginAdapters;
|
|
545
|
+
this.pluginAdapters = (_params_pluginAdapters = params.pluginAdapters) !== null && _params_pluginAdapters !== void 0 ? _params_pluginAdapters : [];
|
|
546
|
+
var _params_pluginConfigs;
|
|
547
|
+
this.pluginConfigs = (_params_pluginConfigs = params.pluginConfigs) !== null && _params_pluginConfigs !== void 0 ? _params_pluginConfigs : [];
|
|
548
|
+
this.templateContext = buildTemplateContext(this.files, this.resources);
|
|
504
549
|
this.optionsSchema = params.optionsSchema;
|
|
505
|
-
// Create scoped memory if provider is configured
|
|
506
|
-
if (memoryProvider) {
|
|
507
|
-
this.scopedMemory = createScopedMemory(memoryProvider, title, this.currentUser.name);
|
|
508
|
-
}
|
|
509
550
|
// Initialize steps - track guard and wait blocks by index
|
|
510
551
|
this.steps = [];
|
|
511
552
|
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
@@ -535,27 +576,42 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
535
576
|
}
|
|
536
577
|
}
|
|
537
578
|
}
|
|
538
|
-
if (
|
|
539
|
-
// Resume: use state and stepIndex
|
|
540
|
-
this.currentState = clone(
|
|
541
|
-
this.currentStepIndex =
|
|
579
|
+
if (resume) {
|
|
580
|
+
// Resume: use state and stepIndex from resume params
|
|
581
|
+
this.currentState = clone(resume.state);
|
|
582
|
+
this.currentStepIndex = resume.stepIndex;
|
|
542
583
|
// Mark steps before stepIndex as complete (they won't be re-executed)
|
|
543
|
-
for(var i = 0; i <
|
|
584
|
+
for(var i = 0; i < resume.stepIndex; i++){
|
|
544
585
|
this.steps[i].withStatus(STATUS.COMPLETE);
|
|
545
586
|
}
|
|
546
|
-
//
|
|
587
|
+
// Re-wrap IterateResult instances that were serialized to plain arrays.
|
|
588
|
+
// During suspension, JSON patches call toJSON() on IterateResult, turning
|
|
589
|
+
// them into plain [item, result][] arrays. Re-wrap so downstream steps
|
|
590
|
+
// can use IterateResult methods (.map, .filter, etc.)
|
|
591
|
+
for(var i1 = 0; i1 < resume.stepIndex; i1++){
|
|
592
|
+
var block1 = this.steps[i1].block;
|
|
593
|
+
if (block1.type === 'map') {
|
|
594
|
+
var mapBlock = block1;
|
|
595
|
+
var value = this.currentState[mapBlock.stateKey];
|
|
596
|
+
if (value != null && Array.isArray(value) && !_instanceof(value, IterateResult)) {
|
|
597
|
+
this.currentState[mapBlock.stateKey] = new IterateResult(value);
|
|
598
|
+
}
|
|
599
|
+
}
|
|
600
|
+
}
|
|
601
|
+
// For inner brains (no signalProvider), check for webhookResponse
|
|
547
602
|
// The outer brain will have set this from the signal
|
|
548
|
-
if (!signalProvider &&
|
|
549
|
-
this.currentResponse =
|
|
603
|
+
if (!signalProvider && resume.webhookResponse) {
|
|
604
|
+
this.currentResponse = resume.webhookResponse;
|
|
550
605
|
}
|
|
551
|
-
// Agent webhook response is handled via agentContext (checked in executeAgent)
|
|
552
606
|
// Restore page context if available (from a preceding UI step)
|
|
553
|
-
if (
|
|
554
|
-
this.currentPage = {
|
|
555
|
-
url:
|
|
556
|
-
webhook: _object_spread_props(_object_spread({},
|
|
607
|
+
if (resume.currentPage) {
|
|
608
|
+
this.currentPage = resume.currentPage.webhook ? {
|
|
609
|
+
url: resume.currentPage.url,
|
|
610
|
+
webhook: _object_spread_props(_object_spread({}, resume.currentPage.webhook), {
|
|
557
611
|
schema: z.record(z.unknown())
|
|
558
612
|
})
|
|
613
|
+
} : {
|
|
614
|
+
url: resume.currentPage.url
|
|
559
615
|
};
|
|
560
616
|
}
|
|
561
617
|
} else {
|
|
@@ -569,20 +625,167 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
569
625
|
}
|
|
570
626
|
_create_class(BrainEventStream, [
|
|
571
627
|
{
|
|
572
|
-
key: "
|
|
573
|
-
value:
|
|
574
|
-
|
|
575
|
-
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
|
|
628
|
+
key: "next",
|
|
629
|
+
value: function next() {
|
|
630
|
+
return _wrap_async_generator(function() {
|
|
631
|
+
var _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, event, _iteratorNormalCompletion, _didIteratorError1, _iteratorError1, _iterator1, _step1, adapter, err, err1;
|
|
632
|
+
return _ts_generator(this, function(_state) {
|
|
633
|
+
switch(_state.label){
|
|
634
|
+
case 0:
|
|
635
|
+
_iteratorAbruptCompletion = false, _didIteratorError = false;
|
|
636
|
+
_state.label = 1;
|
|
637
|
+
case 1:
|
|
638
|
+
_state.trys.push([
|
|
639
|
+
1,
|
|
640
|
+
15,
|
|
641
|
+
16,
|
|
642
|
+
21
|
|
643
|
+
]);
|
|
644
|
+
_iterator = _async_iterator(this.generate());
|
|
645
|
+
_state.label = 2;
|
|
646
|
+
case 2:
|
|
647
|
+
return [
|
|
648
|
+
4,
|
|
649
|
+
_await_async_generator(_iterator.next())
|
|
650
|
+
];
|
|
651
|
+
case 3:
|
|
652
|
+
if (!(_iteratorAbruptCompletion = !(_step = _state.sent()).done)) return [
|
|
653
|
+
3,
|
|
654
|
+
14
|
|
655
|
+
];
|
|
656
|
+
_value = _step.value;
|
|
657
|
+
event = _value;
|
|
658
|
+
_iteratorNormalCompletion = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
659
|
+
_state.label = 4;
|
|
660
|
+
case 4:
|
|
661
|
+
_state.trys.push([
|
|
662
|
+
4,
|
|
663
|
+
9,
|
|
664
|
+
10,
|
|
665
|
+
11
|
|
666
|
+
]);
|
|
667
|
+
_iterator1 = this.pluginAdapters[Symbol.iterator]();
|
|
668
|
+
_state.label = 5;
|
|
669
|
+
case 5:
|
|
670
|
+
if (!!(_iteratorNormalCompletion = (_step1 = _iterator1.next()).done)) return [
|
|
671
|
+
3,
|
|
672
|
+
8
|
|
673
|
+
];
|
|
674
|
+
adapter = _step1.value;
|
|
675
|
+
return [
|
|
676
|
+
4,
|
|
677
|
+
_await_async_generator(adapter.dispatch(event))
|
|
678
|
+
];
|
|
679
|
+
case 6:
|
|
680
|
+
_state.sent();
|
|
681
|
+
_state.label = 7;
|
|
682
|
+
case 7:
|
|
683
|
+
_iteratorNormalCompletion = true;
|
|
684
|
+
return [
|
|
685
|
+
3,
|
|
686
|
+
5
|
|
687
|
+
];
|
|
688
|
+
case 8:
|
|
689
|
+
return [
|
|
690
|
+
3,
|
|
691
|
+
11
|
|
692
|
+
];
|
|
693
|
+
case 9:
|
|
694
|
+
err = _state.sent();
|
|
695
|
+
_didIteratorError1 = true;
|
|
696
|
+
_iteratorError1 = err;
|
|
697
|
+
return [
|
|
698
|
+
3,
|
|
699
|
+
11
|
|
700
|
+
];
|
|
701
|
+
case 10:
|
|
702
|
+
try {
|
|
703
|
+
if (!_iteratorNormalCompletion && _iterator1.return != null) {
|
|
704
|
+
_iterator1.return();
|
|
705
|
+
}
|
|
706
|
+
} finally{
|
|
707
|
+
if (_didIteratorError1) {
|
|
708
|
+
throw _iteratorError1;
|
|
709
|
+
}
|
|
710
|
+
}
|
|
711
|
+
return [
|
|
712
|
+
7
|
|
713
|
+
];
|
|
714
|
+
case 11:
|
|
715
|
+
return [
|
|
716
|
+
4,
|
|
717
|
+
event
|
|
718
|
+
];
|
|
719
|
+
case 12:
|
|
720
|
+
_state.sent();
|
|
721
|
+
_state.label = 13;
|
|
722
|
+
case 13:
|
|
723
|
+
_iteratorAbruptCompletion = false;
|
|
724
|
+
return [
|
|
725
|
+
3,
|
|
726
|
+
2
|
|
727
|
+
];
|
|
728
|
+
case 14:
|
|
729
|
+
return [
|
|
730
|
+
3,
|
|
731
|
+
21
|
|
732
|
+
];
|
|
733
|
+
case 15:
|
|
734
|
+
err1 = _state.sent();
|
|
735
|
+
_didIteratorError = true;
|
|
736
|
+
_iteratorError = err1;
|
|
737
|
+
return [
|
|
738
|
+
3,
|
|
739
|
+
21
|
|
740
|
+
];
|
|
741
|
+
case 16:
|
|
742
|
+
_state.trys.push([
|
|
743
|
+
16,
|
|
744
|
+
,
|
|
745
|
+
19,
|
|
746
|
+
20
|
|
747
|
+
]);
|
|
748
|
+
if (!(_iteratorAbruptCompletion && _iterator.return != null)) return [
|
|
749
|
+
3,
|
|
750
|
+
18
|
|
751
|
+
];
|
|
752
|
+
return [
|
|
753
|
+
4,
|
|
754
|
+
_await_async_generator(_iterator.return())
|
|
755
|
+
];
|
|
756
|
+
case 17:
|
|
757
|
+
_state.sent();
|
|
758
|
+
_state.label = 18;
|
|
759
|
+
case 18:
|
|
760
|
+
return [
|
|
761
|
+
3,
|
|
762
|
+
20
|
|
763
|
+
];
|
|
764
|
+
case 19:
|
|
765
|
+
if (_didIteratorError) {
|
|
766
|
+
throw _iteratorError;
|
|
767
|
+
}
|
|
768
|
+
return [
|
|
769
|
+
7
|
|
770
|
+
];
|
|
771
|
+
case 20:
|
|
772
|
+
return [
|
|
773
|
+
7
|
|
774
|
+
];
|
|
775
|
+
case 21:
|
|
776
|
+
return [
|
|
777
|
+
2
|
|
778
|
+
];
|
|
779
|
+
}
|
|
780
|
+
});
|
|
781
|
+
}).call(this);
|
|
579
782
|
}
|
|
580
783
|
},
|
|
581
784
|
{
|
|
582
|
-
key: "
|
|
583
|
-
value: function
|
|
785
|
+
key: "generate",
|
|
786
|
+
value: function generate() {
|
|
584
787
|
return _wrap_async_generator(function() {
|
|
585
|
-
var _this, steps, brainTitle, brainDescription, currentState, options, brainRunId, webhookResponse, signals, webhookSignal,
|
|
788
|
+
var _this, steps, brainTitle, brainDescription, currentState, options, brainRunId, webhookResponse, signals, webhookSignal, _this_resume, signals1, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, signal, err, step, guard, waitBlock, err1, error, currentStep;
|
|
586
789
|
return _ts_generator(this, function(_state) {
|
|
587
790
|
switch(_state.label){
|
|
588
791
|
case 0:
|
|
@@ -595,7 +798,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
595
798
|
,
|
|
596
799
|
36
|
|
597
800
|
]);
|
|
598
|
-
if (!!this.
|
|
801
|
+
if (!!this.resume) return [
|
|
599
802
|
3,
|
|
600
803
|
4
|
|
601
804
|
];
|
|
@@ -617,17 +820,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
617
820
|
// Emit initial step status after brain starts
|
|
618
821
|
return [
|
|
619
822
|
4,
|
|
620
|
-
|
|
621
|
-
type: BRAIN_EVENTS.STEP_STATUS,
|
|
622
|
-
steps: steps.map(function(step) {
|
|
623
|
-
var _step_serialized = step.serialized, patch = _step_serialized.patch, rest = _object_without_properties(_step_serialized, [
|
|
624
|
-
"patch"
|
|
625
|
-
]);
|
|
626
|
-
return rest;
|
|
627
|
-
}),
|
|
628
|
-
options: options,
|
|
629
|
-
brainRunId: brainRunId
|
|
630
|
-
}
|
|
823
|
+
this.stepStatusEvent()
|
|
631
824
|
];
|
|
632
825
|
case 3:
|
|
633
826
|
_state.sent();
|
|
@@ -635,7 +828,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
635
828
|
if (this.optionsSchema) {
|
|
636
829
|
this.options = this.optionsSchema.parse(this.options);
|
|
637
830
|
} else if (this.options && Object.keys(this.options).length > 0) {
|
|
638
|
-
throw new Error("Brain '".concat(brainTitle, "' received options but no schema was defined. Use
|
|
831
|
+
throw new Error("Brain '".concat(brainTitle, "' received options but no schema was defined. Use withOptions() to define a schema for options."));
|
|
639
832
|
}
|
|
640
833
|
return [
|
|
641
834
|
3,
|
|
@@ -657,18 +850,13 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
657
850
|
});
|
|
658
851
|
if (webhookSignal && webhookSignal.type === 'WEBHOOK_RESPONSE') {
|
|
659
852
|
webhookResponse = webhookSignal.response;
|
|
660
|
-
// Set currentResponse for step consumption
|
|
853
|
+
// Set currentResponse for step consumption
|
|
661
854
|
this.currentResponse = webhookResponse;
|
|
662
|
-
//
|
|
663
|
-
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
deepest = this.resumeContext;
|
|
668
|
-
while(deepest.innerResumeContext){
|
|
669
|
-
deepest = deepest.innerResumeContext;
|
|
670
|
-
}
|
|
671
|
-
deepest.webhookResponse = webhookResponse;
|
|
855
|
+
// Store for propagation to inner brains
|
|
856
|
+
if (this.resume) {
|
|
857
|
+
this.resume = _object_spread_props(_object_spread({}, this.resume), {
|
|
858
|
+
webhookResponse: webhookResponse
|
|
859
|
+
});
|
|
672
860
|
}
|
|
673
861
|
}
|
|
674
862
|
return [
|
|
@@ -676,9 +864,8 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
676
864
|
7
|
|
677
865
|
];
|
|
678
866
|
case 6:
|
|
679
|
-
// Inner brain (no signalProvider): check
|
|
680
|
-
|
|
681
|
-
webhookResponse = this.findWebhookResponseInResumeContext(this.resumeContext);
|
|
867
|
+
// Inner brain (no signalProvider): check for webhookResponse passed from outer brain
|
|
868
|
+
webhookResponse = (_this_resume = this.resume) === null || _this_resume === void 0 ? void 0 : _this_resume.webhookResponse;
|
|
682
869
|
_state.label = 7;
|
|
683
870
|
case 7:
|
|
684
871
|
if (!webhookResponse) return [
|
|
@@ -886,17 +1073,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
886
1073
|
// Step Status Event to indicate that the step is running
|
|
887
1074
|
return [
|
|
888
1075
|
4,
|
|
889
|
-
|
|
890
|
-
type: BRAIN_EVENTS.STEP_STATUS,
|
|
891
|
-
steps: steps.map(function(step) {
|
|
892
|
-
var _step_serialized = step.serialized, patch = _step_serialized.patch, rest = _object_without_properties(_step_serialized, [
|
|
893
|
-
"patch"
|
|
894
|
-
]);
|
|
895
|
-
return rest;
|
|
896
|
-
}),
|
|
897
|
-
options: options,
|
|
898
|
-
brainRunId: brainRunId
|
|
899
|
-
}
|
|
1076
|
+
this.stepStatusEvent()
|
|
900
1077
|
];
|
|
901
1078
|
case 28:
|
|
902
1079
|
_state.sent();
|
|
@@ -917,17 +1094,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
917
1094
|
// Step Status Event
|
|
918
1095
|
return [
|
|
919
1096
|
4,
|
|
920
|
-
|
|
921
|
-
type: BRAIN_EVENTS.STEP_STATUS,
|
|
922
|
-
steps: steps.map(function(step) {
|
|
923
|
-
var _step_serialized = step.serialized, patch = _step_serialized.patch, rest = _object_without_properties(_step_serialized, [
|
|
924
|
-
"patch"
|
|
925
|
-
]);
|
|
926
|
-
return rest;
|
|
927
|
-
}),
|
|
928
|
-
options: options,
|
|
929
|
-
brainRunId: brainRunId
|
|
930
|
-
}
|
|
1097
|
+
this.stepStatusEvent()
|
|
931
1098
|
];
|
|
932
1099
|
case 30:
|
|
933
1100
|
_state.sent();
|
|
@@ -980,17 +1147,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
980
1147
|
// Step Status Event
|
|
981
1148
|
return [
|
|
982
1149
|
4,
|
|
983
|
-
|
|
984
|
-
type: BRAIN_EVENTS.STEP_STATUS,
|
|
985
|
-
steps: steps.map(function(step) {
|
|
986
|
-
var _step_serialized = step.serialized, patch = _step_serialized.patch, rest = _object_without_properties(_step_serialized, [
|
|
987
|
-
"patch"
|
|
988
|
-
]);
|
|
989
|
-
return rest;
|
|
990
|
-
}),
|
|
991
|
-
options: options,
|
|
992
|
-
brainRunId: brainRunId
|
|
993
|
-
}
|
|
1150
|
+
this.stepStatusEvent()
|
|
994
1151
|
];
|
|
995
1152
|
case 35:
|
|
996
1153
|
_state.sent();
|
|
@@ -1004,6 +1161,39 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1004
1161
|
}).call(this);
|
|
1005
1162
|
}
|
|
1006
1163
|
},
|
|
1164
|
+
{
|
|
1165
|
+
key: "stepStatusEvent",
|
|
1166
|
+
value: function stepStatusEvent() {
|
|
1167
|
+
return {
|
|
1168
|
+
type: BRAIN_EVENTS.STEP_STATUS,
|
|
1169
|
+
steps: this.steps.map(function(s) {
|
|
1170
|
+
var _s_serialized = s.serialized, patch = _s_serialized.patch, rest = _object_without_properties(_s_serialized, [
|
|
1171
|
+
"patch"
|
|
1172
|
+
]);
|
|
1173
|
+
return rest;
|
|
1174
|
+
}),
|
|
1175
|
+
options: this.options,
|
|
1176
|
+
brainRunId: this.brainRunId
|
|
1177
|
+
};
|
|
1178
|
+
}
|
|
1179
|
+
},
|
|
1180
|
+
{
|
|
1181
|
+
key: "innerBrainParams",
|
|
1182
|
+
get: /** Params forwarded to inner brain runs (nested .brain() and .map() steps). */ function get() {
|
|
1183
|
+
return {
|
|
1184
|
+
resources: this.resources,
|
|
1185
|
+
client: this.client,
|
|
1186
|
+
currentUser: this.currentUser,
|
|
1187
|
+
env: this.env,
|
|
1188
|
+
brainRunId: this.brainRunId,
|
|
1189
|
+
governor: this.governor,
|
|
1190
|
+
files: this.files,
|
|
1191
|
+
pages: this.pages,
|
|
1192
|
+
storeProvider: this.storeProvider,
|
|
1193
|
+
pluginConfigs: this.pluginConfigs
|
|
1194
|
+
};
|
|
1195
|
+
}
|
|
1196
|
+
},
|
|
1007
1197
|
{
|
|
1008
1198
|
key: "buildStepContext",
|
|
1009
1199
|
value: function buildStepContext(step) {
|
|
@@ -1017,35 +1207,36 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1017
1207
|
page: this.currentPage,
|
|
1018
1208
|
pages: this.pages,
|
|
1019
1209
|
env: this.env,
|
|
1020
|
-
|
|
1210
|
+
components: this.components,
|
|
1021
1211
|
store: this.store,
|
|
1212
|
+
files: this.files,
|
|
1022
1213
|
currentUser: this.currentUser,
|
|
1023
1214
|
brainRunId: this.brainRunId,
|
|
1024
1215
|
stepId: step.id
|
|
1025
|
-
}, this.
|
|
1216
|
+
}, this.pluginInjections);
|
|
1026
1217
|
}
|
|
1027
1218
|
},
|
|
1028
1219
|
{
|
|
1029
1220
|
key: "executeStep",
|
|
1030
1221
|
value: function executeStep(step) {
|
|
1031
1222
|
return _wrap_async_generator(function() {
|
|
1032
|
-
var block, stepBlock,
|
|
1223
|
+
var block, stepBlock, _this_resume, brainBlock, initialState, innerOptions, innerStack, hasInnerResume, innerEntry, remainingStack, patches, innerBrainPaused, innerRun, innerDepth, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, event, err1, _innerEntry_state, baseState, innerState, prevState, prevState1, stepBlock1, stepClient, channel, context, _this_options, wrappedFiles, stepDone, stepResult, stepError, stepPromise, _iteratorNormalCompletion, _didIteratorError1, _iteratorError1, _iterator1, _step1, event1, err, _iteratorNormalCompletion1, _didIteratorError2, _iteratorError2, _iterator2, _step2, event2, err, result;
|
|
1033
1224
|
return _ts_generator(this, function(_state) {
|
|
1034
1225
|
switch(_state.label){
|
|
1035
1226
|
case 0:
|
|
1036
1227
|
block = step.block;
|
|
1037
1228
|
if (!(block.type === 'step')) return [
|
|
1038
1229
|
3,
|
|
1039
|
-
|
|
1230
|
+
2
|
|
1040
1231
|
];
|
|
1041
1232
|
stepBlock = block;
|
|
1042
|
-
if (!stepBlock.
|
|
1233
|
+
if (!stepBlock.isPageStep) return [
|
|
1043
1234
|
3,
|
|
1044
1235
|
2
|
|
1045
1236
|
];
|
|
1046
1237
|
return [
|
|
1047
1238
|
5,
|
|
1048
|
-
_ts_values(_async_generator_delegate(_async_iterator(this.
|
|
1239
|
+
_ts_values(_async_generator_delegate(_async_iterator(this.executePageStep(step, stepBlock))))
|
|
1049
1240
|
];
|
|
1050
1241
|
case 1:
|
|
1051
1242
|
_state.sent();
|
|
@@ -1053,13 +1244,13 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1053
1244
|
2
|
|
1054
1245
|
];
|
|
1055
1246
|
case 2:
|
|
1056
|
-
if (!
|
|
1247
|
+
if (!(block.type === 'prompt')) return [
|
|
1057
1248
|
3,
|
|
1058
1249
|
4
|
|
1059
1250
|
];
|
|
1060
1251
|
return [
|
|
1061
1252
|
5,
|
|
1062
|
-
_ts_values(_async_generator_delegate(_async_iterator(this.
|
|
1253
|
+
_ts_values(_async_generator_delegate(_async_iterator(this.executePrompt(step))))
|
|
1063
1254
|
];
|
|
1064
1255
|
case 3:
|
|
1065
1256
|
_state.sent();
|
|
@@ -1067,18 +1258,13 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1067
1258
|
2
|
|
1068
1259
|
];
|
|
1069
1260
|
case 4:
|
|
1070
|
-
if (!(block.type === '
|
|
1071
|
-
3,
|
|
1072
|
-
22
|
|
1073
|
-
];
|
|
1074
|
-
brainBlock = block;
|
|
1075
|
-
if (!brainBlock.iterateConfig) return [
|
|
1261
|
+
if (!(block.type === 'map')) return [
|
|
1076
1262
|
3,
|
|
1077
1263
|
6
|
|
1078
1264
|
];
|
|
1079
1265
|
return [
|
|
1080
1266
|
5,
|
|
1081
|
-
_ts_values(_async_generator_delegate(_async_iterator(this.
|
|
1267
|
+
_ts_values(_async_generator_delegate(_async_iterator(this.executeMap(step))))
|
|
1082
1268
|
];
|
|
1083
1269
|
case 5:
|
|
1084
1270
|
_state.sent();
|
|
@@ -1086,34 +1272,43 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1086
1272
|
2
|
|
1087
1273
|
];
|
|
1088
1274
|
case 6:
|
|
1089
|
-
|
|
1090
|
-
|
|
1091
|
-
|
|
1275
|
+
if (!(block.type === 'brain')) return [
|
|
1276
|
+
3,
|
|
1277
|
+
21
|
|
1278
|
+
];
|
|
1279
|
+
brainBlock = block;
|
|
1280
|
+
initialState = brainBlock.initialState ? typeof brainBlock.initialState === 'function' ? brainBlock.initialState(this.buildStepContext(step)) : brainBlock.initialState : {};
|
|
1281
|
+
innerOptions = brainBlock.options ? typeof brainBlock.options === 'function' ? brainBlock.options(this.buildStepContext(step)) : brainBlock.options : {};
|
|
1282
|
+
// Check if we're resuming an inner brain
|
|
1283
|
+
innerStack = (_this_resume = this.resume) === null || _this_resume === void 0 ? void 0 : _this_resume.innerStack;
|
|
1284
|
+
hasInnerResume = innerStack && innerStack.length > 0;
|
|
1285
|
+
innerEntry = hasInnerResume ? innerStack[0] : undefined;
|
|
1286
|
+
remainingStack = hasInnerResume ? innerStack.slice(1) : undefined;
|
|
1092
1287
|
// Run inner brain and yield all its events
|
|
1093
1288
|
// Pass brainRunId so inner brain shares outer brain's run ID
|
|
1094
1289
|
patches = [];
|
|
1095
1290
|
innerBrainPaused = false;
|
|
1096
|
-
innerRun =
|
|
1097
|
-
|
|
1098
|
-
|
|
1099
|
-
|
|
1100
|
-
|
|
1101
|
-
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
brainRunId: this.brainRunId,
|
|
1105
|
-
governor: this.governor
|
|
1106
|
-
}) : brainBlock.innerBrain.run({
|
|
1107
|
-
resources: this.resources,
|
|
1108
|
-
client: this.client,
|
|
1109
|
-
currentUser: this.currentUser,
|
|
1291
|
+
innerRun = hasInnerResume ? brainBlock.innerBrain.run(_object_spread_props(_object_spread({}, this.innerBrainParams), {
|
|
1292
|
+
resume: _object_spread_props(_object_spread({}, this.resume), {
|
|
1293
|
+
state: innerEntry.state,
|
|
1294
|
+
stepIndex: innerEntry.stepIndex,
|
|
1295
|
+
innerStack: (remainingStack === null || remainingStack === void 0 ? void 0 : remainingStack.length) ? remainingStack : undefined
|
|
1296
|
+
}),
|
|
1297
|
+
options: innerOptions
|
|
1298
|
+
})) : brainBlock.innerBrain.run(_object_spread_props(_object_spread({}, this.innerBrainParams), {
|
|
1110
1299
|
initialState: initialState,
|
|
1111
|
-
options:
|
|
1112
|
-
|
|
1113
|
-
|
|
1114
|
-
|
|
1115
|
-
|
|
1116
|
-
|
|
1300
|
+
options: innerOptions
|
|
1301
|
+
}));
|
|
1302
|
+
// Context has been forwarded to the inner brain — clear so outer
|
|
1303
|
+
// brain's later steps don't consume them.
|
|
1304
|
+
if (hasInnerResume) {
|
|
1305
|
+
this.resume = undefined;
|
|
1306
|
+
}
|
|
1307
|
+
// Track nesting depth so we only collect patches from the direct
|
|
1308
|
+
// child brain (depth 1) and ignore patches from deeper nested brains
|
|
1309
|
+
// (e.g. inner brains run by .map() or nested .brain() steps).
|
|
1310
|
+
// Resumed brains skip their START event, so start at depth 1.
|
|
1311
|
+
innerDepth = hasInnerResume ? 1 : 0;
|
|
1117
1312
|
_iteratorAbruptCompletion = false, _didIteratorError = false;
|
|
1118
1313
|
_state.label = 7;
|
|
1119
1314
|
case 7:
|
|
@@ -1143,19 +1338,29 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1143
1338
|
];
|
|
1144
1339
|
case 10:
|
|
1145
1340
|
_state.sent(); // Forward all inner brain events
|
|
1146
|
-
if (event.type === BRAIN_EVENTS.
|
|
1341
|
+
if (event.type === BRAIN_EVENTS.START) {
|
|
1342
|
+
innerDepth++;
|
|
1343
|
+
}
|
|
1344
|
+
if (event.type === BRAIN_EVENTS.STEP_COMPLETE && innerDepth === 1) {
|
|
1147
1345
|
patches.push(event.patch);
|
|
1148
1346
|
}
|
|
1149
1347
|
// If inner brain yielded a WEBHOOK event, it's pausing
|
|
1150
1348
|
if (event.type === BRAIN_EVENTS.WEBHOOK) {
|
|
1151
1349
|
innerBrainPaused = true;
|
|
1152
1350
|
}
|
|
1153
|
-
// If inner brain completed, break immediately to prevent hanging
|
|
1154
1351
|
if (event.type === BRAIN_EVENTS.COMPLETE) {
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1158
|
-
|
|
1352
|
+
innerDepth--;
|
|
1353
|
+
if (innerDepth === 0) {
|
|
1354
|
+
return [
|
|
1355
|
+
3,
|
|
1356
|
+
12
|
|
1357
|
+
];
|
|
1358
|
+
}
|
|
1359
|
+
}
|
|
1360
|
+
// Errored brains emit ERROR instead of COMPLETE, so decrement depth
|
|
1361
|
+
// to keep tracking accurate when errors are caught (e.g. by .map() error handlers)
|
|
1362
|
+
if (event.type === BRAIN_EVENTS.ERROR) {
|
|
1363
|
+
innerDepth--;
|
|
1159
1364
|
}
|
|
1160
1365
|
_state.label = 11;
|
|
1161
1366
|
case 11:
|
|
@@ -1170,9 +1375,9 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1170
1375
|
19
|
|
1171
1376
|
];
|
|
1172
1377
|
case 13:
|
|
1173
|
-
|
|
1378
|
+
err1 = _state.sent();
|
|
1174
1379
|
_didIteratorError = true;
|
|
1175
|
-
_iteratorError =
|
|
1380
|
+
_iteratorError = err1;
|
|
1176
1381
|
return [
|
|
1177
1382
|
3,
|
|
1178
1383
|
19
|
|
@@ -1221,90 +1426,187 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1221
1426
|
}
|
|
1222
1427
|
// Apply collected patches to get final inner state
|
|
1223
1428
|
// When resuming, use the resumed state as base; otherwise use initialState
|
|
1224
|
-
baseState = (
|
|
1429
|
+
baseState = (_innerEntry_state = innerEntry === null || innerEntry === void 0 ? void 0 : innerEntry.state) !== null && _innerEntry_state !== void 0 ? _innerEntry_state : initialState;
|
|
1225
1430
|
innerState = applyPatches(baseState, patches);
|
|
1226
1431
|
// Get previous state before action
|
|
1227
1432
|
prevState = this.currentState;
|
|
1228
|
-
//
|
|
1229
|
-
|
|
1230
|
-
return [
|
|
1231
|
-
4,
|
|
1232
|
-
_await_async_generator(brainBlock.action(this.currentState, innerState, this.services))
|
|
1233
|
-
];
|
|
1234
|
-
case 20:
|
|
1235
|
-
_.currentState = _state.sent();
|
|
1433
|
+
// Spread inner brain's final state onto outer state
|
|
1434
|
+
this.currentState = _object_spread({}, this.currentState, innerState);
|
|
1236
1435
|
return [
|
|
1237
1436
|
5,
|
|
1238
1437
|
_ts_values(_async_generator_delegate(_async_iterator(this.completeStep(step, prevState))))
|
|
1239
1438
|
];
|
|
1240
|
-
case
|
|
1439
|
+
case 20:
|
|
1241
1440
|
_state.sent();
|
|
1242
1441
|
return [
|
|
1243
1442
|
3,
|
|
1244
|
-
|
|
1443
|
+
42
|
|
1245
1444
|
];
|
|
1445
|
+
case 21:
|
|
1446
|
+
// Get previous state before action
|
|
1447
|
+
prevState1 = this.currentState;
|
|
1448
|
+
stepBlock1 = block;
|
|
1449
|
+
// Resolve per-step client: if the step has an override, apply governor to it;
|
|
1450
|
+
// otherwise use the default (already-governed) client
|
|
1451
|
+
stepClient = stepBlock1.client ? this.governor ? this.governor(stepBlock1.client) : stepBlock1.client : this.client;
|
|
1452
|
+
// Event channel lets file operations (and potentially other services)
|
|
1453
|
+
// emit events mid-step. The race loop yields them as they arrive.
|
|
1454
|
+
// If no events are pushed, the loop resolves immediately with the step.
|
|
1455
|
+
channel = new EventChannel();
|
|
1456
|
+
context = this.buildStepContext(step);
|
|
1457
|
+
wrappedFiles = this.files ? wrapFilesWithEvents(this.files, channel, {
|
|
1458
|
+
options: (_this_options = this.options) !== null && _this_options !== void 0 ? _this_options : {},
|
|
1459
|
+
brainRunId: this.brainRunId,
|
|
1460
|
+
stepTitle: stepBlock1.title
|
|
1461
|
+
}) : undefined;
|
|
1462
|
+
stepDone = false;
|
|
1463
|
+
stepPromise = Promise.resolve(stepBlock1.action(_object_spread(_object_spread_props(_object_spread({}, context), {
|
|
1464
|
+
client: stepClient
|
|
1465
|
+
}), wrappedFiles && {
|
|
1466
|
+
files: wrappedFiles
|
|
1467
|
+
}))).then(function(r) {
|
|
1468
|
+
stepDone = true;
|
|
1469
|
+
stepResult = r;
|
|
1470
|
+
}, function(e) {
|
|
1471
|
+
stepDone = true;
|
|
1472
|
+
stepError = e;
|
|
1473
|
+
});
|
|
1474
|
+
_state.label = 22;
|
|
1246
1475
|
case 22:
|
|
1247
|
-
if (
|
|
1248
|
-
3,
|
|
1249
|
-
27
|
|
1250
|
-
];
|
|
1251
|
-
agentBlock = block;
|
|
1252
|
-
if (!agentBlock.iterateConfig) return [
|
|
1476
|
+
if (!!stepDone) return [
|
|
1253
1477
|
3,
|
|
1254
|
-
|
|
1478
|
+
32
|
|
1255
1479
|
];
|
|
1256
1480
|
return [
|
|
1257
|
-
|
|
1258
|
-
|
|
1481
|
+
4,
|
|
1482
|
+
_await_async_generator(Promise.race([
|
|
1483
|
+
stepPromise,
|
|
1484
|
+
channel.wait()
|
|
1485
|
+
]))
|
|
1259
1486
|
];
|
|
1260
1487
|
case 23:
|
|
1261
1488
|
_state.sent();
|
|
1262
|
-
|
|
1263
|
-
|
|
1264
|
-
];
|
|
1489
|
+
_iteratorNormalCompletion = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
1490
|
+
_state.label = 24;
|
|
1265
1491
|
case 24:
|
|
1266
|
-
|
|
1492
|
+
_state.trys.push([
|
|
1493
|
+
24,
|
|
1494
|
+
29,
|
|
1495
|
+
30,
|
|
1496
|
+
31
|
|
1497
|
+
]);
|
|
1498
|
+
_iterator1 = channel.drain()[Symbol.iterator]();
|
|
1499
|
+
_state.label = 25;
|
|
1500
|
+
case 25:
|
|
1501
|
+
if (!!(_iteratorNormalCompletion = (_step1 = _iterator1.next()).done)) return [
|
|
1502
|
+
3,
|
|
1503
|
+
28
|
|
1504
|
+
];
|
|
1505
|
+
event1 = _step1.value;
|
|
1267
1506
|
return [
|
|
1268
|
-
|
|
1269
|
-
|
|
1507
|
+
4,
|
|
1508
|
+
event1
|
|
1270
1509
|
];
|
|
1271
|
-
case
|
|
1510
|
+
case 26:
|
|
1272
1511
|
_state.sent();
|
|
1273
|
-
|
|
1274
|
-
|
|
1275
|
-
|
|
1512
|
+
_state.label = 27;
|
|
1513
|
+
case 27:
|
|
1514
|
+
_iteratorNormalCompletion = true;
|
|
1515
|
+
return [
|
|
1516
|
+
3,
|
|
1517
|
+
25
|
|
1276
1518
|
];
|
|
1277
|
-
case
|
|
1278
|
-
_state.sent();
|
|
1519
|
+
case 28:
|
|
1279
1520
|
return [
|
|
1280
1521
|
3,
|
|
1281
|
-
|
|
1522
|
+
31
|
|
1282
1523
|
];
|
|
1283
|
-
case
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1524
|
+
case 29:
|
|
1525
|
+
err = _state.sent();
|
|
1526
|
+
_didIteratorError1 = true;
|
|
1527
|
+
_iteratorError1 = err;
|
|
1528
|
+
return [
|
|
1529
|
+
3,
|
|
1530
|
+
31
|
|
1531
|
+
];
|
|
1532
|
+
case 30:
|
|
1533
|
+
try {
|
|
1534
|
+
if (!_iteratorNormalCompletion && _iterator1.return != null) {
|
|
1535
|
+
_iterator1.return();
|
|
1536
|
+
}
|
|
1537
|
+
} finally{
|
|
1538
|
+
if (_didIteratorError1) {
|
|
1539
|
+
throw _iteratorError1;
|
|
1540
|
+
}
|
|
1541
|
+
}
|
|
1542
|
+
return [
|
|
1543
|
+
7
|
|
1544
|
+
];
|
|
1545
|
+
case 31:
|
|
1546
|
+
return [
|
|
1547
|
+
3,
|
|
1548
|
+
22
|
|
1549
|
+
];
|
|
1550
|
+
case 32:
|
|
1551
|
+
_iteratorNormalCompletion1 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
|
|
1552
|
+
_state.label = 33;
|
|
1553
|
+
case 33:
|
|
1554
|
+
_state.trys.push([
|
|
1555
|
+
33,
|
|
1556
|
+
38,
|
|
1557
|
+
39,
|
|
1558
|
+
40
|
|
1559
|
+
]);
|
|
1560
|
+
_iterator2 = channel.drain()[Symbol.iterator]();
|
|
1561
|
+
_state.label = 34;
|
|
1562
|
+
case 34:
|
|
1563
|
+
if (!!(_iteratorNormalCompletion1 = (_step2 = _iterator2.next()).done)) return [
|
|
1564
|
+
3,
|
|
1565
|
+
37
|
|
1566
|
+
];
|
|
1567
|
+
event2 = _step2.value;
|
|
1290
1568
|
return [
|
|
1291
1569
|
4,
|
|
1292
|
-
|
|
1293
|
-
state: this.currentState,
|
|
1294
|
-
options: (_this_options2 = this.options) !== null && _this_options2 !== void 0 ? _this_options2 : {},
|
|
1295
|
-
client: stepClient,
|
|
1296
|
-
resources: this.resources,
|
|
1297
|
-
response: this.currentResponse,
|
|
1298
|
-
page: this.currentPage,
|
|
1299
|
-
pages: this.pages,
|
|
1300
|
-
env: this.env,
|
|
1301
|
-
memory: this.scopedMemory,
|
|
1302
|
-
store: this.store,
|
|
1303
|
-
currentUser: this.currentUser
|
|
1304
|
-
}, this.services))))
|
|
1570
|
+
event2
|
|
1305
1571
|
];
|
|
1306
|
-
case
|
|
1307
|
-
|
|
1572
|
+
case 35:
|
|
1573
|
+
_state.sent();
|
|
1574
|
+
_state.label = 36;
|
|
1575
|
+
case 36:
|
|
1576
|
+
_iteratorNormalCompletion1 = true;
|
|
1577
|
+
return [
|
|
1578
|
+
3,
|
|
1579
|
+
34
|
|
1580
|
+
];
|
|
1581
|
+
case 37:
|
|
1582
|
+
return [
|
|
1583
|
+
3,
|
|
1584
|
+
40
|
|
1585
|
+
];
|
|
1586
|
+
case 38:
|
|
1587
|
+
err = _state.sent();
|
|
1588
|
+
_didIteratorError2 = true;
|
|
1589
|
+
_iteratorError2 = err;
|
|
1590
|
+
return [
|
|
1591
|
+
3,
|
|
1592
|
+
40
|
|
1593
|
+
];
|
|
1594
|
+
case 39:
|
|
1595
|
+
try {
|
|
1596
|
+
if (!_iteratorNormalCompletion1 && _iterator2.return != null) {
|
|
1597
|
+
_iterator2.return();
|
|
1598
|
+
}
|
|
1599
|
+
} finally{
|
|
1600
|
+
if (_didIteratorError2) {
|
|
1601
|
+
throw _iteratorError2;
|
|
1602
|
+
}
|
|
1603
|
+
}
|
|
1604
|
+
return [
|
|
1605
|
+
7
|
|
1606
|
+
];
|
|
1607
|
+
case 40:
|
|
1608
|
+
if (stepError) throw stepError;
|
|
1609
|
+
result = stepResult;
|
|
1308
1610
|
// Extract state from result (handles promptResponse case)
|
|
1309
1611
|
if (result && (typeof result === "undefined" ? "undefined" : _type_of(result)) === 'object' && 'promptResponse' in result) {
|
|
1310
1612
|
this.currentState = result.state;
|
|
@@ -1313,9 +1615,9 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1313
1615
|
}
|
|
1314
1616
|
return [
|
|
1315
1617
|
5,
|
|
1316
|
-
_ts_values(_async_generator_delegate(_async_iterator(this.completeStep(step,
|
|
1618
|
+
_ts_values(_async_generator_delegate(_async_iterator(this.completeStep(step, prevState1))))
|
|
1317
1619
|
];
|
|
1318
|
-
case
|
|
1620
|
+
case 41:
|
|
1319
1621
|
_state.sent();
|
|
1320
1622
|
// Handle promptResponse - set currentResponse for next step
|
|
1321
1623
|
if (result && (typeof result === "undefined" ? "undefined" : _type_of(result)) === 'object' && 'promptResponse' in result) {
|
|
@@ -1323,8 +1625,8 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1323
1625
|
}
|
|
1324
1626
|
// Reset currentPage after step consumes it (page is ephemeral)
|
|
1325
1627
|
this.currentPage = undefined;
|
|
1326
|
-
_state.label =
|
|
1327
|
-
case
|
|
1628
|
+
_state.label = 42;
|
|
1629
|
+
case 42:
|
|
1328
1630
|
return [
|
|
1329
1631
|
2
|
|
1330
1632
|
];
|
|
@@ -1334,1059 +1636,934 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
1334
1636
|
}
|
|
1335
1637
|
},
|
|
1336
1638
|
{
|
|
1337
|
-
key: "
|
|
1338
|
-
value:
|
|
1639
|
+
key: "executePrompt",
|
|
1640
|
+
value: /**
|
|
1641
|
+
* Execute a prompt step. Either single-shot (generateObject) or
|
|
1642
|
+
* iterative tool-calling loop (generateText) when `loop` is present.
|
|
1643
|
+
*/ function executePrompt(step) {
|
|
1339
1644
|
return _wrap_async_generator(function() {
|
|
1340
|
-
var
|
|
1645
|
+
var block, prevState, config, client, prompt, system, _tmp, attachments, _tmp1, result, loopGen, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, event, err;
|
|
1341
1646
|
return _ts_generator(this, function(_state) {
|
|
1342
1647
|
switch(_state.label){
|
|
1343
1648
|
case 0:
|
|
1344
1649
|
block = step.block;
|
|
1345
|
-
prevState = this.currentState;
|
|
1346
|
-
// Combine default tools and extra tools for injection into configFn
|
|
1347
|
-
allTools = _object_spread({}, (_this_defaultTools = this.defaultTools) !== null && _this_defaultTools !== void 0 ? _this_defaultTools : {}, (_this_extraTools = this.extraTools) !== null && _this_extraTools !== void 0 ? _this_extraTools : {});
|
|
1348
|
-
components = (_this_components = this.components) !== null && _this_components !== void 0 ? _this_components : {};
|
|
1650
|
+
prevState = clone(this.currentState);
|
|
1349
1651
|
return [
|
|
1350
1652
|
4,
|
|
1351
|
-
_await_async_generator(block.configFn(
|
|
1352
|
-
state: this.currentState,
|
|
1353
|
-
options: (_this_options = this.options) !== null && _this_options !== void 0 ? _this_options : {},
|
|
1354
|
-
tools: allTools,
|
|
1355
|
-
components: components,
|
|
1356
|
-
client: this.client,
|
|
1357
|
-
resources: this.resources,
|
|
1358
|
-
response: this.currentResponse,
|
|
1359
|
-
page: this.currentPage,
|
|
1360
|
-
pages: this.pages,
|
|
1361
|
-
env: this.env,
|
|
1362
|
-
memory: this.scopedMemory,
|
|
1363
|
-
store: this.store,
|
|
1364
|
-
currentUser: this.currentUser
|
|
1365
|
-
}, this.services)))
|
|
1653
|
+
_await_async_generator(block.configFn(this.buildStepContext(step)))
|
|
1366
1654
|
];
|
|
1367
1655
|
case 1:
|
|
1368
1656
|
config = _state.sent();
|
|
1369
|
-
|
|
1370
|
-
this.currentPage = undefined;
|
|
1371
|
-
// Merge tools: step tools override defaults + extras
|
|
1372
|
-
mergedTools = _object_spread({}, allTools, (_config_tools = config.tools) !== null && _config_tools !== void 0 ? _config_tools : {});
|
|
1373
|
-
// Always generate a 'done' terminal tool for every agent
|
|
1374
|
-
// If outputSchema is provided, use that schema; otherwise use defaultDoneSchema
|
|
1375
|
-
if (config.outputSchema) {
|
|
1376
|
-
_config_outputSchema = config.outputSchema, schema = _config_outputSchema.schema, name = _config_outputSchema.name;
|
|
1377
|
-
mergedTools['done'] = {
|
|
1378
|
-
description: "Signal that the task is complete and provide the final ".concat(name, " result.\n\nPURPOSE: End agent execution and return structured output to the calling system.\n\nBEHAVIOR:\n- This is a TERMINAL tool - calling it immediately ends the agent\n- No further tools will execute after this\n- No further iterations will occur\n- The input you provide becomes the agent's final output\n\nWHEN TO CALL:\n- When you have completed the assigned task\n- When you have gathered all required information\n- When you have the final answer or result ready\n\nDO NOT CALL IF:\n- You still need to gather more information\n- You are waiting for user input (use waitForWebhook instead)\n- The task is not yet complete\n\nThe schema for this result is: ").concat(name),
|
|
1379
|
-
inputSchema: schema,
|
|
1380
|
-
terminal: true
|
|
1381
|
-
};
|
|
1382
|
-
} else {
|
|
1383
|
-
mergedTools['done'] = {
|
|
1384
|
-
description: "Signal that the task is complete and provide a summary of what was accomplished.\n\nPURPOSE: End agent execution and return a result string to the calling system.\n\nBEHAVIOR:\n- This is a TERMINAL tool - calling it immediately ends the agent\n- No further tools will execute after this\n- No further iterations will occur\n- The result string you provide becomes the agent's final output\n\nWHEN TO CALL:\n- When you have completed the assigned task\n- When you have gathered all required information\n- When you have the final answer ready to report\n\nDO NOT CALL IF:\n- You still need to gather more information\n- You are waiting for user input (use waitForWebhook instead)\n- The task is not yet complete\n\nProvide a clear, concise summary of the outcome in the 'result' field.",
|
|
1385
|
-
inputSchema: defaultDoneSchema,
|
|
1386
|
-
terminal: true
|
|
1387
|
-
};
|
|
1388
|
-
}
|
|
1389
|
-
// Check if we're resuming from a previous agent execution
|
|
1390
|
-
agentContext = (_this_resumeContext = this.resumeContext) === null || _this_resumeContext === void 0 ? void 0 : _this_resumeContext.agentContext;
|
|
1391
|
-
webhookResponse = (_this_resumeContext1 = this.resumeContext) === null || _this_resumeContext1 === void 0 ? void 0 : _this_resumeContext1.webhookResponse;
|
|
1392
|
-
// Use preserved stepId from agentContext when resuming, or step.id for fresh start
|
|
1393
|
-
// This ensures all events for the same agent use the same stepId across resumes
|
|
1394
|
-
effectiveStepId = (_agentContext_stepId = agentContext === null || agentContext === void 0 ? void 0 : agentContext.stepId) !== null && _agentContext_stepId !== void 0 ? _agentContext_stepId : step.id;
|
|
1395
|
-
if (!agentContext) return [
|
|
1396
|
-
3,
|
|
1397
|
-
9
|
|
1398
|
-
];
|
|
1399
|
-
if (!(webhookResponse && agentContext.pendingToolCallId && agentContext.pendingToolName)) return [
|
|
1400
|
-
3,
|
|
1401
|
-
7
|
|
1402
|
-
];
|
|
1403
|
-
// WEBHOOK RESUME: Agent was waiting for a webhook response
|
|
1404
|
-
// Emit WEBHOOK_RESPONSE event to record the response
|
|
1657
|
+
client = config.client ? this.governor ? this.governor(config.client) : config.client : this.client;
|
|
1405
1658
|
return [
|
|
1406
1659
|
4,
|
|
1407
|
-
|
|
1408
|
-
type: BRAIN_EVENTS.WEBHOOK_RESPONSE,
|
|
1409
|
-
response: webhookResponse,
|
|
1410
|
-
options: (_this_options1 = this.options) !== null && _this_options1 !== void 0 ? _this_options1 : {},
|
|
1411
|
-
brainRunId: this.brainRunId
|
|
1412
|
-
}
|
|
1660
|
+
_await_async_generator(resolveTemplate(config.message, this.templateContext))
|
|
1413
1661
|
];
|
|
1414
1662
|
case 2:
|
|
1415
|
-
_state.sent();
|
|
1416
|
-
|
|
1663
|
+
prompt = _state.sent();
|
|
1664
|
+
if (!config.system) return [
|
|
1665
|
+
3,
|
|
1666
|
+
4
|
|
1667
|
+
];
|
|
1417
1668
|
return [
|
|
1418
1669
|
4,
|
|
1419
|
-
|
|
1420
|
-
type: BRAIN_EVENTS.AGENT_TOOL_RESULT,
|
|
1421
|
-
stepTitle: step.block.title,
|
|
1422
|
-
stepId: effectiveStepId,
|
|
1423
|
-
toolCallId: agentContext.pendingToolCallId,
|
|
1424
|
-
toolName: agentContext.pendingToolName,
|
|
1425
|
-
result: webhookResponse,
|
|
1426
|
-
options: (_this_options2 = this.options) !== null && _this_options2 !== void 0 ? _this_options2 : {},
|
|
1427
|
-
brainRunId: this.brainRunId
|
|
1428
|
-
}
|
|
1670
|
+
_await_async_generator(resolveTemplate(config.system, this.templateContext))
|
|
1429
1671
|
];
|
|
1430
1672
|
case 3:
|
|
1431
|
-
_state.sent();
|
|
1432
|
-
|
|
1433
|
-
// Prepend the user message and append the webhook response
|
|
1434
|
-
// Note: reconstructed messages don't include the placeholder (we don't emit events for it),
|
|
1435
|
-
// so we just append the real webhook response here.
|
|
1436
|
-
userMessage = {
|
|
1437
|
-
role: 'user',
|
|
1438
|
-
content: agentContext.prompt
|
|
1439
|
-
};
|
|
1440
|
-
if (!this.client.createToolResultMessage) return [
|
|
1673
|
+
_tmp = _state.sent();
|
|
1674
|
+
return [
|
|
1441
1675
|
3,
|
|
1442
1676
|
5
|
|
1443
1677
|
];
|
|
1444
|
-
toolResultMessage = this.client.createToolResultMessage(agentContext.pendingToolCallId, agentContext.pendingToolName, webhookResponse);
|
|
1445
|
-
responseMessages = [
|
|
1446
|
-
userMessage
|
|
1447
|
-
].concat(_to_consumable_array(agentContext.responseMessages), [
|
|
1448
|
-
toolResultMessage
|
|
1449
|
-
]);
|
|
1450
|
-
// Emit event for this tool result message (for reconstruction if there's another pause)
|
|
1451
|
-
return [
|
|
1452
|
-
4,
|
|
1453
|
-
{
|
|
1454
|
-
type: BRAIN_EVENTS.AGENT_RAW_RESPONSE_MESSAGE,
|
|
1455
|
-
stepTitle: step.block.title,
|
|
1456
|
-
stepId: effectiveStepId,
|
|
1457
|
-
iteration: 0,
|
|
1458
|
-
message: toolResultMessage,
|
|
1459
|
-
options: (_this_options3 = this.options) !== null && _this_options3 !== void 0 ? _this_options3 : {},
|
|
1460
|
-
brainRunId: this.brainRunId
|
|
1461
|
-
}
|
|
1462
|
-
];
|
|
1463
1678
|
case 4:
|
|
1464
|
-
|
|
1465
|
-
|
|
1679
|
+
_tmp = undefined;
|
|
1680
|
+
_state.label = 5;
|
|
1681
|
+
case 5:
|
|
1682
|
+
system = _tmp;
|
|
1683
|
+
if (!!config.loop) return [
|
|
1466
1684
|
3,
|
|
1467
|
-
|
|
1685
|
+
11
|
|
1686
|
+
];
|
|
1687
|
+
if (!config.attachments) return [
|
|
1688
|
+
3,
|
|
1689
|
+
7
|
|
1690
|
+
];
|
|
1691
|
+
return [
|
|
1692
|
+
4,
|
|
1693
|
+
_await_async_generator(Promise.all(config.attachments.map(function(handle) {
|
|
1694
|
+
return _async_to_generator(function() {
|
|
1695
|
+
var _tmp;
|
|
1696
|
+
return _ts_generator(this, function(_state) {
|
|
1697
|
+
switch(_state.label){
|
|
1698
|
+
case 0:
|
|
1699
|
+
_tmp = {
|
|
1700
|
+
name: handle.name,
|
|
1701
|
+
mimeType: guessMimeType(handle.name)
|
|
1702
|
+
};
|
|
1703
|
+
return [
|
|
1704
|
+
4,
|
|
1705
|
+
handle.readBytes()
|
|
1706
|
+
];
|
|
1707
|
+
case 1:
|
|
1708
|
+
return [
|
|
1709
|
+
2,
|
|
1710
|
+
(_tmp.data = _state.sent(), _tmp)
|
|
1711
|
+
];
|
|
1712
|
+
}
|
|
1713
|
+
});
|
|
1714
|
+
})();
|
|
1715
|
+
})))
|
|
1468
1716
|
];
|
|
1469
|
-
case 5:
|
|
1470
|
-
// Fallback if client doesn't support createToolResultMessage
|
|
1471
|
-
responseMessages = [
|
|
1472
|
-
userMessage
|
|
1473
|
-
].concat(_to_consumable_array(agentContext.responseMessages));
|
|
1474
|
-
_state.label = 6;
|
|
1475
1717
|
case 6:
|
|
1476
|
-
|
|
1477
|
-
initialMessages = [];
|
|
1718
|
+
_tmp1 = _state.sent();
|
|
1478
1719
|
return [
|
|
1479
1720
|
3,
|
|
1480
1721
|
8
|
|
1481
1722
|
];
|
|
1482
1723
|
case 7:
|
|
1483
|
-
|
|
1484
|
-
// Restore conversation history and continue from where we left off
|
|
1485
|
-
userMessage1 = {
|
|
1486
|
-
role: 'user',
|
|
1487
|
-
content: agentContext.prompt
|
|
1488
|
-
};
|
|
1489
|
-
responseMessages = [
|
|
1490
|
-
userMessage1
|
|
1491
|
-
].concat(_to_consumable_array(agentContext.responseMessages));
|
|
1492
|
-
initialMessages = [];
|
|
1724
|
+
_tmp1 = undefined;
|
|
1493
1725
|
_state.label = 8;
|
|
1494
1726
|
case 8:
|
|
1495
|
-
|
|
1496
|
-
this.resumeContext = undefined;
|
|
1727
|
+
attachments = _tmp1;
|
|
1497
1728
|
return [
|
|
1498
|
-
|
|
1499
|
-
|
|
1729
|
+
4,
|
|
1730
|
+
_await_async_generator(client.generateObject({
|
|
1731
|
+
schema: config.outputSchema,
|
|
1732
|
+
prompt: prompt,
|
|
1733
|
+
system: system,
|
|
1734
|
+
attachments: attachments
|
|
1735
|
+
}))
|
|
1500
1736
|
];
|
|
1501
1737
|
case 9:
|
|
1502
|
-
|
|
1503
|
-
|
|
1504
|
-
// Emit agent start event (only for fresh starts)
|
|
1738
|
+
result = _state.sent();
|
|
1739
|
+
this.currentState = _object_spread({}, this.currentState, result.object);
|
|
1505
1740
|
return [
|
|
1506
|
-
|
|
1507
|
-
|
|
1508
|
-
type: BRAIN_EVENTS.AGENT_START,
|
|
1509
|
-
stepTitle: step.block.title,
|
|
1510
|
-
stepId: effectiveStepId,
|
|
1511
|
-
prompt: prompt,
|
|
1512
|
-
system: config.system,
|
|
1513
|
-
tools: Object.keys(mergedTools),
|
|
1514
|
-
options: (_this_options4 = this.options) !== null && _this_options4 !== void 0 ? _this_options4 : {},
|
|
1515
|
-
brainRunId: this.brainRunId
|
|
1516
|
-
}
|
|
1741
|
+
5,
|
|
1742
|
+
_ts_values(_async_generator_delegate(_async_iterator(this.completeStep(step, prevState))))
|
|
1517
1743
|
];
|
|
1518
1744
|
case 10:
|
|
1519
1745
|
_state.sent();
|
|
1520
|
-
|
|
1521
|
-
|
|
1522
|
-
{
|
|
1523
|
-
role: 'user',
|
|
1524
|
-
content: prompt
|
|
1525
|
-
}
|
|
1746
|
+
return [
|
|
1747
|
+
2
|
|
1526
1748
|
];
|
|
1527
|
-
_state.label = 11;
|
|
1528
1749
|
case 11:
|
|
1529
|
-
//
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1750
|
+
// Loop path: tool-calling iteration
|
|
1751
|
+
loopGen = this.runPromptLoop({
|
|
1752
|
+
step: step,
|
|
1753
|
+
prompt: prompt,
|
|
1754
|
+
system: system,
|
|
1755
|
+
client: client,
|
|
1756
|
+
outputSchema: config.outputSchema,
|
|
1757
|
+
loopConfig: config.loop,
|
|
1758
|
+
allowWebhookSuspension: true,
|
|
1759
|
+
resume: this.resume
|
|
1760
|
+
});
|
|
1761
|
+
_iteratorAbruptCompletion = false, _didIteratorError = false;
|
|
1533
1762
|
_state.label = 12;
|
|
1534
1763
|
case 12:
|
|
1535
|
-
|
|
1536
|
-
|
|
1537
|
-
|
|
1538
|
-
|
|
1539
|
-
|
|
1540
|
-
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1764
|
+
_state.trys.push([
|
|
1765
|
+
12,
|
|
1766
|
+
18,
|
|
1767
|
+
19,
|
|
1768
|
+
24
|
|
1769
|
+
]);
|
|
1770
|
+
_iterator = _async_iterator(loopGen);
|
|
1771
|
+
_state.label = 13;
|
|
1772
|
+
case 13:
|
|
1544
1773
|
return [
|
|
1545
1774
|
4,
|
|
1546
|
-
_await_async_generator(
|
|
1775
|
+
_await_async_generator(_iterator.next())
|
|
1547
1776
|
];
|
|
1548
|
-
case 13:
|
|
1549
|
-
signals = _state.sent();
|
|
1550
|
-
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
1551
|
-
_state.label = 14;
|
|
1552
1777
|
case 14:
|
|
1553
|
-
_state.
|
|
1554
|
-
14,
|
|
1555
|
-
24,
|
|
1556
|
-
25,
|
|
1557
|
-
26
|
|
1558
|
-
]);
|
|
1559
|
-
_iterator = signals[Symbol.iterator]();
|
|
1560
|
-
_state.label = 15;
|
|
1561
|
-
case 15:
|
|
1562
|
-
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
1563
|
-
3,
|
|
1564
|
-
23
|
|
1565
|
-
];
|
|
1566
|
-
signal = _step.value;
|
|
1567
|
-
if (!(signal.type === 'KILL')) return [
|
|
1778
|
+
if (!(_iteratorAbruptCompletion = !(_step = _state.sent()).done)) return [
|
|
1568
1779
|
3,
|
|
1569
1780
|
17
|
|
1570
1781
|
];
|
|
1782
|
+
_value = _step.value;
|
|
1783
|
+
event = _value;
|
|
1571
1784
|
return [
|
|
1572
1785
|
4,
|
|
1573
|
-
|
|
1574
|
-
type: BRAIN_EVENTS.CANCELLED,
|
|
1575
|
-
status: STATUS.CANCELLED,
|
|
1576
|
-
brainTitle: this.title,
|
|
1577
|
-
brainDescription: this.description,
|
|
1578
|
-
brainRunId: this.brainRunId,
|
|
1579
|
-
options: this.options
|
|
1580
|
-
}
|
|
1786
|
+
event
|
|
1581
1787
|
];
|
|
1582
|
-
case
|
|
1788
|
+
case 15:
|
|
1583
1789
|
_state.sent();
|
|
1584
|
-
|
|
1790
|
+
// If the loop caused a pause/cancel/webhook, stop
|
|
1791
|
+
if (this.stopped) return [
|
|
1585
1792
|
2
|
|
1586
1793
|
];
|
|
1587
|
-
|
|
1588
|
-
|
|
1794
|
+
if (event.type === BRAIN_EVENTS.WEBHOOK) return [
|
|
1795
|
+
2
|
|
1796
|
+
];
|
|
1797
|
+
_state.label = 16;
|
|
1798
|
+
case 16:
|
|
1799
|
+
_iteratorAbruptCompletion = false;
|
|
1800
|
+
return [
|
|
1589
1801
|
3,
|
|
1590
|
-
|
|
1802
|
+
13
|
|
1591
1803
|
];
|
|
1804
|
+
case 17:
|
|
1592
1805
|
return [
|
|
1593
|
-
|
|
1594
|
-
|
|
1595
|
-
type: BRAIN_EVENTS.PAUSED,
|
|
1596
|
-
status: STATUS.PAUSED,
|
|
1597
|
-
brainTitle: this.title,
|
|
1598
|
-
brainDescription: this.description,
|
|
1599
|
-
brainRunId: this.brainRunId,
|
|
1600
|
-
options: this.options
|
|
1601
|
-
}
|
|
1806
|
+
3,
|
|
1807
|
+
24
|
|
1602
1808
|
];
|
|
1603
1809
|
case 18:
|
|
1604
|
-
_state.sent();
|
|
1810
|
+
err = _state.sent();
|
|
1811
|
+
_didIteratorError = true;
|
|
1812
|
+
_iteratorError = err;
|
|
1605
1813
|
return [
|
|
1606
|
-
|
|
1814
|
+
3,
|
|
1815
|
+
24
|
|
1607
1816
|
];
|
|
1608
1817
|
case 19:
|
|
1609
|
-
|
|
1818
|
+
_state.trys.push([
|
|
1819
|
+
19,
|
|
1820
|
+
,
|
|
1821
|
+
22,
|
|
1822
|
+
23
|
|
1823
|
+
]);
|
|
1824
|
+
if (!(_iteratorAbruptCompletion && _iterator.return != null)) return [
|
|
1610
1825
|
3,
|
|
1611
|
-
|
|
1826
|
+
21
|
|
1612
1827
|
];
|
|
1613
|
-
// Emit event for user message injection
|
|
1614
1828
|
return [
|
|
1615
1829
|
4,
|
|
1616
|
-
|
|
1617
|
-
type: BRAIN_EVENTS.AGENT_USER_MESSAGE,
|
|
1618
|
-
stepTitle: step.block.title,
|
|
1619
|
-
stepId: effectiveStepId,
|
|
1620
|
-
content: signal.content,
|
|
1621
|
-
options: this.options,
|
|
1622
|
-
brainRunId: this.brainRunId
|
|
1623
|
-
}
|
|
1830
|
+
_await_async_generator(_iterator.return())
|
|
1624
1831
|
];
|
|
1625
1832
|
case 20:
|
|
1626
1833
|
_state.sent();
|
|
1627
|
-
|
|
1628
|
-
|
|
1629
|
-
role: 'user',
|
|
1630
|
-
content: signal.content
|
|
1631
|
-
};
|
|
1632
|
-
if (responseMessages) {
|
|
1633
|
-
responseMessages = _to_consumable_array(responseMessages).concat([
|
|
1634
|
-
userMessage2
|
|
1635
|
-
]);
|
|
1636
|
-
} else {
|
|
1637
|
-
initialMessages = _to_consumable_array(initialMessages).concat([
|
|
1638
|
-
{
|
|
1639
|
-
role: 'user',
|
|
1640
|
-
content: signal.content
|
|
1641
|
-
}
|
|
1642
|
-
]);
|
|
1643
|
-
}
|
|
1644
|
-
// Emit raw response message event so it shows up in agent chat view
|
|
1834
|
+
_state.label = 21;
|
|
1835
|
+
case 21:
|
|
1645
1836
|
return [
|
|
1646
|
-
|
|
1647
|
-
|
|
1648
|
-
type: BRAIN_EVENTS.AGENT_RAW_RESPONSE_MESSAGE,
|
|
1649
|
-
stepTitle: step.block.title,
|
|
1650
|
-
stepId: effectiveStepId,
|
|
1651
|
-
iteration: iteration,
|
|
1652
|
-
message: userMessage2,
|
|
1653
|
-
options: (_this_options5 = this.options) !== null && _this_options5 !== void 0 ? _this_options5 : {},
|
|
1654
|
-
brainRunId: this.brainRunId
|
|
1655
|
-
}
|
|
1837
|
+
3,
|
|
1838
|
+
23
|
|
1656
1839
|
];
|
|
1657
|
-
case 21:
|
|
1658
|
-
_state.sent();
|
|
1659
|
-
_state.label = 22;
|
|
1660
1840
|
case 22:
|
|
1661
|
-
|
|
1841
|
+
if (_didIteratorError) {
|
|
1842
|
+
throw _iteratorError;
|
|
1843
|
+
}
|
|
1662
1844
|
return [
|
|
1663
|
-
|
|
1664
|
-
15
|
|
1845
|
+
7
|
|
1665
1846
|
];
|
|
1666
1847
|
case 23:
|
|
1667
1848
|
return [
|
|
1668
|
-
|
|
1669
|
-
26
|
|
1849
|
+
7
|
|
1670
1850
|
];
|
|
1671
1851
|
case 24:
|
|
1672
|
-
err = _state.sent();
|
|
1673
|
-
_didIteratorError = true;
|
|
1674
|
-
_iteratorError = err;
|
|
1675
1852
|
return [
|
|
1676
|
-
|
|
1677
|
-
|
|
1853
|
+
5,
|
|
1854
|
+
_ts_values(_async_generator_delegate(_async_iterator(this.completeStep(step, prevState))))
|
|
1678
1855
|
];
|
|
1679
1856
|
case 25:
|
|
1680
|
-
try {
|
|
1681
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1682
|
-
_iterator.return();
|
|
1683
|
-
}
|
|
1684
|
-
} finally{
|
|
1685
|
-
if (_didIteratorError) {
|
|
1686
|
-
throw _iteratorError;
|
|
1687
|
-
}
|
|
1688
|
-
}
|
|
1689
|
-
return [
|
|
1690
|
-
7
|
|
1691
|
-
];
|
|
1692
|
-
case 26:
|
|
1693
|
-
if (!(iteration > maxIterations)) return [
|
|
1694
|
-
3,
|
|
1695
|
-
28
|
|
1696
|
-
];
|
|
1697
|
-
return [
|
|
1698
|
-
4,
|
|
1699
|
-
{
|
|
1700
|
-
type: BRAIN_EVENTS.AGENT_ITERATION_LIMIT,
|
|
1701
|
-
stepTitle: step.block.title,
|
|
1702
|
-
stepId: effectiveStepId,
|
|
1703
|
-
iteration: iteration - 1,
|
|
1704
|
-
maxIterations: maxIterations,
|
|
1705
|
-
totalTokens: totalTokens,
|
|
1706
|
-
options: (_this_options6 = this.options) !== null && _this_options6 !== void 0 ? _this_options6 : {},
|
|
1707
|
-
brainRunId: this.brainRunId
|
|
1708
|
-
}
|
|
1709
|
-
];
|
|
1710
|
-
case 27:
|
|
1711
1857
|
_state.sent();
|
|
1712
|
-
if (config.outputSchema) {
|
|
1713
|
-
throw new Error("Agent hit iteration limit (".concat(maxIterations, ") without producing required '").concat(config.outputSchema.name, "' output"));
|
|
1714
|
-
}
|
|
1715
1858
|
return [
|
|
1716
1859
|
2
|
|
1717
1860
|
];
|
|
1718
|
-
|
|
1719
|
-
|
|
1720
|
-
|
|
1721
|
-
|
|
1722
|
-
|
|
1723
|
-
|
|
1724
|
-
|
|
1725
|
-
|
|
1861
|
+
}
|
|
1862
|
+
});
|
|
1863
|
+
}).call(this);
|
|
1864
|
+
}
|
|
1865
|
+
},
|
|
1866
|
+
{
|
|
1867
|
+
key: "runPromptLoop",
|
|
1868
|
+
value: /**
|
|
1869
|
+
* Shared prompt loop generator. Contains the core iteration logic:
|
|
1870
|
+
* resume handling, signal checks, LLM calls, tool processing, and event emission.
|
|
1871
|
+
*
|
|
1872
|
+
* Yields all PROMPT_* events. When the done tool or a terminal tool fires,
|
|
1873
|
+
* updates this.currentState, yields PROMPT_COMPLETE, and returns.
|
|
1874
|
+
* The caller is responsible for calling completeStep().
|
|
1875
|
+
*
|
|
1876
|
+
* When a webhook suspension occurs and allowWebhookSuspension is true,
|
|
1877
|
+
* yields PROMPT_WEBHOOK + WEBHOOK events and returns. If false, throws.
|
|
1878
|
+
*/ function runPromptLoop(params) {
|
|
1879
|
+
return _wrap_async_generator(function() {
|
|
1880
|
+
var step, prompt, system, client, outputSchema, loopConfig, allowWebhookSuspension, resume, userTools, _loopConfig_maxIterations, maxIterations, maxTokens, _loopConfig_toolChoice, toolChoice, toolDefs, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, _step_value, name, tool, componentList, resumeCtx, _resumeCtx_stepId, stepId, stepTitle, initialMessages, responseMessages, totalTokens, iteration, webhookResponse, toolResultMsg, _this_options, _this_options1, _this_options2, signals, _iteratorNormalCompletion1, _didIteratorError1, _iteratorError1, _iterator1, _step1, signal, _this_options3, _this_options4, err, llmResult, tokensThisIteration, _this_options5, _this_options6, _this_options7, _this_options8, pendingWebhook, _iteratorNormalCompletion2, _didIteratorError2, _iteratorError2, _iterator2, _step2, toolCall, toolCallId, toolName, args, _this_options9, parsed, errorMsg, toolResultMsg1, _this_options10, _this_options11, _this_options12, tool1, _this_options13, _this_options14, toolResult, _this_options15, placeholderMsg, toolResultMsg2, _this_options16, err, toolWaitFor, webhooks, serializedWaitFor, _this_options17, _this_options18;
|
|
1881
|
+
return _ts_generator(this, function(_state) {
|
|
1882
|
+
switch(_state.label){
|
|
1883
|
+
case 0:
|
|
1884
|
+
step = params.step, prompt = params.prompt, system = params.system, client = params.client, outputSchema = params.outputSchema, loopConfig = params.loopConfig, allowWebhookSuspension = params.allowWebhookSuspension, resume = params.resume;
|
|
1885
|
+
userTools = loopConfig.tools, _loopConfig_maxIterations = loopConfig.maxIterations, maxIterations = _loopConfig_maxIterations === void 0 ? 100 : _loopConfig_maxIterations, maxTokens = loopConfig.maxTokens, _loopConfig_toolChoice = loopConfig.toolChoice, toolChoice = _loopConfig_toolChoice === void 0 ? 'required' : _loopConfig_toolChoice;
|
|
1886
|
+
// Build tool definitions for the LLM (description + inputSchema only)
|
|
1887
|
+
toolDefs = {};
|
|
1888
|
+
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
1726
1889
|
try {
|
|
1727
|
-
for(
|
|
1728
|
-
_step_value = _sliced_to_array(
|
|
1729
|
-
|
|
1730
|
-
|
|
1731
|
-
// Enrich generateUI description with available component information
|
|
1732
|
-
if (name1 === 'generateUI' && components && Object.keys(components).length > 0) {
|
|
1733
|
-
componentList = Object.entries(components).map(function(param) {
|
|
1734
|
-
var _param = _sliced_to_array(param, 2), compName = _param[0], comp = _param[1];
|
|
1735
|
-
var desc = comp.description.split('\n')[0]; // First line only
|
|
1736
|
-
return "- ".concat(compName, ": ").concat(desc);
|
|
1737
|
-
}).join('\n');
|
|
1738
|
-
description = "Generate a web page for displaying rich content or collecting user input.\n\nSometimes you need more than simple notifications to communicate with users. This tool creates web pages that can display formatted content, dashboards, or forms to collect information.\n\nAVAILABLE COMPONENTS:\n".concat(componentList, "\n\nRETURNS: { url: string, webhook: { slug: string, identifier: string, token: string } | null }\n- url: The page URL\n- webhook: For forms (hasForm=true), contains slug, identifier, and token that must all be passed to waitForWebhook to pause execution until the user submits the form\n\nIMPORTANT: Users have no way to discover the page URL on their own. After generating a page, you must tell them the URL using whatever communication tools are available.");
|
|
1739
|
-
}
|
|
1740
|
-
toolsForClient[name1] = {
|
|
1741
|
-
description: description,
|
|
1890
|
+
for(_iterator = Object.entries(userTools)[Symbol.iterator](); !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
1891
|
+
_step_value = _sliced_to_array(_step.value, 2), name = _step_value[0], tool = _step_value[1];
|
|
1892
|
+
toolDefs[name] = {
|
|
1893
|
+
description: tool.description,
|
|
1742
1894
|
inputSchema: tool.inputSchema
|
|
1743
1895
|
};
|
|
1744
1896
|
}
|
|
1745
1897
|
} catch (err) {
|
|
1746
|
-
|
|
1747
|
-
|
|
1898
|
+
_didIteratorError = true;
|
|
1899
|
+
_iteratorError = err;
|
|
1748
1900
|
} finally{
|
|
1749
1901
|
try {
|
|
1750
|
-
if (!
|
|
1751
|
-
|
|
1902
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
1903
|
+
_iterator.return();
|
|
1752
1904
|
}
|
|
1753
1905
|
} finally{
|
|
1754
|
-
if (
|
|
1755
|
-
throw
|
|
1906
|
+
if (_didIteratorError) {
|
|
1907
|
+
throw _iteratorError;
|
|
1756
1908
|
}
|
|
1757
1909
|
}
|
|
1758
1910
|
}
|
|
1759
|
-
//
|
|
1760
|
-
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
|
|
1765
|
-
|
|
1766
|
-
|
|
1767
|
-
|
|
1768
|
-
|
|
1769
|
-
}))
|
|
1911
|
+
// Enrich generatePage description with available components so the outer
|
|
1912
|
+
// LLM (which reads tool descriptions to decide how to call them) knows what
|
|
1913
|
+
// UI components exist. This only matters in the prompt loop — it's the only
|
|
1914
|
+
// path where an LLM reads tool descriptions. Direct tool.execute() calls
|
|
1915
|
+
// (e.g., from a regular step) don't need this because they don't go through
|
|
1916
|
+
// LLM tool selection.
|
|
1917
|
+
if (toolDefs['generatePage'] && this.components) {
|
|
1918
|
+
componentList = Object.entries(this.components).map(function(param) {
|
|
1919
|
+
var _param = _sliced_to_array(param, 2), name = _param[0], comp = _param[1];
|
|
1920
|
+
return "- ".concat(name, ": ").concat(comp.description.split('\n')[0]);
|
|
1921
|
+
}).join('\n');
|
|
1922
|
+
toolDefs['generatePage'] = _object_spread_props(_object_spread({}, toolDefs['generatePage']), {
|
|
1923
|
+
description: toolDefs['generatePage'].description + "\n\nAvailable UI Components:\n".concat(componentList) + "\n\nIMPORTANT: When generating a page with a form (hasForm=true), the page generator" + " automatically creates a Form component. You do NOT need to include Form in your prompt." + " Just describe the form fields you need and the page generator handles the rest."
|
|
1924
|
+
});
|
|
1925
|
+
}
|
|
1926
|
+
// Auto-generate 'done' tool from outputSchema
|
|
1927
|
+
toolDefs['done'] = {
|
|
1928
|
+
description: "Signal that the task is complete and provide the final result.\n\nThis is a TERMINAL tool - calling it immediately ends execution.\nNo further tools will execute after this. No further iterations will occur.\nThe input you provide becomes the final output.\n\nCall this when you have completed the assigned task and have the final answer ready.\nDo NOT call if you still need to gather more information.\n\nThe output must conform to the provided schema.",
|
|
1929
|
+
inputSchema: outputSchema
|
|
1930
|
+
};
|
|
1931
|
+
if (!client.generateText) {
|
|
1932
|
+
throw new Error('Client does not support generateText, required for prompt loop in step "'.concat(step.block.title, '"'));
|
|
1933
|
+
}
|
|
1934
|
+
if (!client.createToolResultMessage) {
|
|
1935
|
+
throw new Error('Client does not support createToolResultMessage, required for prompt loop in step "'.concat(step.block.title, '"'));
|
|
1936
|
+
}
|
|
1937
|
+
resumeCtx = resume === null || resume === void 0 ? void 0 : resume.promptLoopContext;
|
|
1938
|
+
// Preserve stepId across resumes so all events correlate
|
|
1939
|
+
stepId = (_resumeCtx_stepId = resumeCtx === null || resumeCtx === void 0 ? void 0 : resumeCtx.stepId) !== null && _resumeCtx_stepId !== void 0 ? _resumeCtx_stepId : step.id;
|
|
1940
|
+
stepTitle = step.block.title;
|
|
1941
|
+
// Conversation state — restored from resume context or fresh
|
|
1942
|
+
initialMessages = [
|
|
1943
|
+
{
|
|
1944
|
+
role: 'user',
|
|
1945
|
+
content: prompt
|
|
1946
|
+
}
|
|
1770
1947
|
];
|
|
1771
|
-
|
|
1772
|
-
|
|
1773
|
-
|
|
1774
|
-
responseMessages = response.responseMessages;
|
|
1775
|
-
// Get the new assistant message (the last one added by generateText)
|
|
1776
|
-
newAssistantMessage = (_response_responseMessages = response.responseMessages) === null || _response_responseMessages === void 0 ? void 0 : _response_responseMessages.at(-1);
|
|
1777
|
-
if (!newAssistantMessage) return [
|
|
1948
|
+
totalTokens = 0;
|
|
1949
|
+
iteration = 0;
|
|
1950
|
+
if (!resumeCtx) return [
|
|
1778
1951
|
3,
|
|
1779
|
-
|
|
1952
|
+
3
|
|
1953
|
+
];
|
|
1954
|
+
// Resuming a paused/waiting prompt loop
|
|
1955
|
+
iteration = resumeCtx.iteration;
|
|
1956
|
+
totalTokens = resumeCtx.totalTokens;
|
|
1957
|
+
responseMessages = resumeCtx.responseMessages;
|
|
1958
|
+
// If resuming from webhook, inject the response as a tool result
|
|
1959
|
+
webhookResponse = resume === null || resume === void 0 ? void 0 : resume.webhookResponse;
|
|
1960
|
+
if (!(webhookResponse && resumeCtx.pendingToolCallId && resumeCtx.pendingToolName)) return [
|
|
1961
|
+
3,
|
|
1962
|
+
2
|
|
1780
1963
|
];
|
|
1964
|
+
toolResultMsg = client.createToolResultMessage(resumeCtx.pendingToolCallId, resumeCtx.pendingToolName, webhookResponse);
|
|
1965
|
+
responseMessages = _to_consumable_array(responseMessages).concat([
|
|
1966
|
+
toolResultMsg
|
|
1967
|
+
]);
|
|
1781
1968
|
return [
|
|
1782
1969
|
4,
|
|
1783
1970
|
{
|
|
1784
|
-
type: BRAIN_EVENTS.
|
|
1785
|
-
stepTitle:
|
|
1786
|
-
stepId:
|
|
1971
|
+
type: BRAIN_EVENTS.PROMPT_TOOL_RESULT,
|
|
1972
|
+
stepTitle: stepTitle,
|
|
1973
|
+
stepId: stepId,
|
|
1974
|
+
toolName: resumeCtx.pendingToolName,
|
|
1975
|
+
toolCallId: resumeCtx.pendingToolCallId,
|
|
1976
|
+
result: webhookResponse,
|
|
1787
1977
|
iteration: iteration,
|
|
1788
|
-
|
|
1789
|
-
options: (_this_options7 = this.options) !== null && _this_options7 !== void 0 ? _this_options7 : {},
|
|
1978
|
+
options: (_this_options = this.options) !== null && _this_options !== void 0 ? _this_options : {},
|
|
1790
1979
|
brainRunId: this.brainRunId
|
|
1791
1980
|
}
|
|
1792
1981
|
];
|
|
1793
|
-
case
|
|
1982
|
+
case 1:
|
|
1794
1983
|
_state.sent();
|
|
1795
|
-
_state.label =
|
|
1796
|
-
case
|
|
1797
|
-
//
|
|
1798
|
-
|
|
1799
|
-
|
|
1800
|
-
|
|
1984
|
+
_state.label = 2;
|
|
1985
|
+
case 2:
|
|
1986
|
+
// Safe to clear: only the block that caused the pause reads this.resume,
|
|
1987
|
+
// and the main loop already processed webhookResponse/resumed before here
|
|
1988
|
+
this.resume = undefined;
|
|
1989
|
+
return [
|
|
1990
|
+
3,
|
|
1991
|
+
5
|
|
1992
|
+
];
|
|
1993
|
+
case 3:
|
|
1994
|
+
// Fresh start — emit PROMPT_START
|
|
1801
1995
|
return [
|
|
1802
1996
|
4,
|
|
1803
1997
|
{
|
|
1804
|
-
type: BRAIN_EVENTS.
|
|
1805
|
-
stepTitle:
|
|
1806
|
-
stepId:
|
|
1807
|
-
|
|
1808
|
-
|
|
1809
|
-
|
|
1810
|
-
options: (
|
|
1998
|
+
type: BRAIN_EVENTS.PROMPT_START,
|
|
1999
|
+
stepTitle: stepTitle,
|
|
2000
|
+
stepId: stepId,
|
|
2001
|
+
prompt: prompt,
|
|
2002
|
+
system: system,
|
|
2003
|
+
tools: Object.keys(toolDefs),
|
|
2004
|
+
options: (_this_options1 = this.options) !== null && _this_options1 !== void 0 ? _this_options1 : {},
|
|
1811
2005
|
brainRunId: this.brainRunId
|
|
1812
2006
|
}
|
|
1813
2007
|
];
|
|
1814
|
-
case
|
|
2008
|
+
case 4:
|
|
1815
2009
|
_state.sent();
|
|
1816
|
-
|
|
2010
|
+
_state.label = 5;
|
|
2011
|
+
case 5:
|
|
2012
|
+
if (!true) return [
|
|
1817
2013
|
3,
|
|
1818
|
-
|
|
2014
|
+
51
|
|
2015
|
+
];
|
|
2016
|
+
iteration++;
|
|
2017
|
+
if (!(iteration > maxIterations)) return [
|
|
2018
|
+
3,
|
|
2019
|
+
7
|
|
1819
2020
|
];
|
|
1820
2021
|
return [
|
|
1821
2022
|
4,
|
|
1822
2023
|
{
|
|
1823
|
-
type: BRAIN_EVENTS.
|
|
1824
|
-
stepTitle:
|
|
1825
|
-
stepId:
|
|
1826
|
-
|
|
1827
|
-
|
|
1828
|
-
options: (
|
|
2024
|
+
type: BRAIN_EVENTS.PROMPT_ITERATION_LIMIT,
|
|
2025
|
+
stepTitle: stepTitle,
|
|
2026
|
+
stepId: stepId,
|
|
2027
|
+
totalIterations: iteration - 1,
|
|
2028
|
+
maxIterations: maxIterations,
|
|
2029
|
+
options: (_this_options2 = this.options) !== null && _this_options2 !== void 0 ? _this_options2 : {},
|
|
1829
2030
|
brainRunId: this.brainRunId
|
|
1830
2031
|
}
|
|
1831
2032
|
];
|
|
1832
|
-
case
|
|
2033
|
+
case 6:
|
|
1833
2034
|
_state.sent();
|
|
1834
|
-
|
|
1835
|
-
|
|
1836
|
-
|
|
1837
|
-
return [
|
|
1838
|
-
2
|
|
1839
|
-
];
|
|
1840
|
-
case 34:
|
|
1841
|
-
if (!response.text) return [
|
|
2035
|
+
throw new Error("Iteration limit (".concat(maxIterations, ') reached in prompt loop "').concat(stepTitle, '"'));
|
|
2036
|
+
case 7:
|
|
2037
|
+
if (!this.signalProvider) return [
|
|
1842
2038
|
3,
|
|
1843
|
-
|
|
2039
|
+
18
|
|
1844
2040
|
];
|
|
1845
|
-
// Log assistant messages to console as fallback (users shouldn't rely on this)
|
|
1846
|
-
console.log("[Assistant] ".concat(response.text));
|
|
1847
2041
|
return [
|
|
1848
2042
|
4,
|
|
1849
|
-
|
|
1850
|
-
type: BRAIN_EVENTS.AGENT_ASSISTANT_MESSAGE,
|
|
1851
|
-
stepTitle: step.block.title,
|
|
1852
|
-
stepId: effectiveStepId,
|
|
1853
|
-
content: response.text,
|
|
1854
|
-
options: (_this_options10 = this.options) !== null && _this_options10 !== void 0 ? _this_options10 : {},
|
|
1855
|
-
brainRunId: this.brainRunId
|
|
1856
|
-
}
|
|
2043
|
+
_await_async_generator(this.signalProvider.getSignals('CONTROL'))
|
|
1857
2044
|
];
|
|
1858
|
-
case
|
|
1859
|
-
_state.sent();
|
|
1860
|
-
|
|
1861
|
-
|
|
1862
|
-
|
|
1863
|
-
if (!response.toolCalls || response.toolCalls.length === 0) {
|
|
1864
|
-
return [
|
|
1865
|
-
2
|
|
1866
|
-
];
|
|
1867
|
-
}
|
|
1868
|
-
// Track pending webhook if any tool returns waitFor
|
|
1869
|
-
// We process ALL tool calls first, then pause for webhook at the end
|
|
1870
|
-
pendingWebhook = null;
|
|
1871
|
-
_iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
|
|
1872
|
-
_state.label = 37;
|
|
1873
|
-
case 37:
|
|
2045
|
+
case 8:
|
|
2046
|
+
signals = _state.sent();
|
|
2047
|
+
_iteratorNormalCompletion1 = true, _didIteratorError1 = false, _iteratorError1 = undefined;
|
|
2048
|
+
_state.label = 9;
|
|
2049
|
+
case 9:
|
|
1874
2050
|
_state.trys.push([
|
|
1875
|
-
|
|
1876
|
-
|
|
1877
|
-
|
|
1878
|
-
|
|
2051
|
+
9,
|
|
2052
|
+
16,
|
|
2053
|
+
17,
|
|
2054
|
+
18
|
|
1879
2055
|
]);
|
|
1880
|
-
|
|
1881
|
-
_state.label =
|
|
1882
|
-
case
|
|
1883
|
-
if (!!(
|
|
2056
|
+
_iterator1 = signals[Symbol.iterator]();
|
|
2057
|
+
_state.label = 10;
|
|
2058
|
+
case 10:
|
|
2059
|
+
if (!!(_iteratorNormalCompletion1 = (_step1 = _iterator1.next()).done)) return [
|
|
1884
2060
|
3,
|
|
1885
|
-
|
|
2061
|
+
15
|
|
1886
2062
|
];
|
|
1887
|
-
|
|
2063
|
+
signal = _step1.value;
|
|
2064
|
+
if (!(signal.type === 'KILL')) return [
|
|
2065
|
+
3,
|
|
2066
|
+
12
|
|
2067
|
+
];
|
|
2068
|
+
this.stopped = true;
|
|
1888
2069
|
return [
|
|
1889
2070
|
4,
|
|
1890
2071
|
{
|
|
1891
|
-
type: BRAIN_EVENTS.
|
|
1892
|
-
|
|
1893
|
-
|
|
1894
|
-
|
|
1895
|
-
|
|
1896
|
-
|
|
1897
|
-
options: (_this_options11 = this.options) !== null && _this_options11 !== void 0 ? _this_options11 : {},
|
|
1898
|
-
brainRunId: this.brainRunId
|
|
2072
|
+
type: BRAIN_EVENTS.CANCELLED,
|
|
2073
|
+
status: STATUS.CANCELLED,
|
|
2074
|
+
brainTitle: this.title,
|
|
2075
|
+
brainDescription: this.description,
|
|
2076
|
+
brainRunId: this.brainRunId,
|
|
2077
|
+
options: (_this_options3 = this.options) !== null && _this_options3 !== void 0 ? _this_options3 : {}
|
|
1899
2078
|
}
|
|
1900
2079
|
];
|
|
1901
|
-
case
|
|
2080
|
+
case 11:
|
|
1902
2081
|
_state.sent();
|
|
1903
|
-
|
|
1904
|
-
|
|
1905
|
-
|
|
1906
|
-
|
|
1907
|
-
if (!
|
|
2082
|
+
return [
|
|
2083
|
+
2
|
|
2084
|
+
];
|
|
2085
|
+
case 12:
|
|
2086
|
+
if (!(signal.type === 'PAUSE')) return [
|
|
1908
2087
|
3,
|
|
1909
|
-
|
|
2088
|
+
14
|
|
1910
2089
|
];
|
|
2090
|
+
this.stopped = true;
|
|
1911
2091
|
return [
|
|
1912
2092
|
4,
|
|
1913
2093
|
{
|
|
1914
|
-
type: BRAIN_EVENTS.
|
|
1915
|
-
|
|
1916
|
-
|
|
1917
|
-
|
|
1918
|
-
|
|
1919
|
-
|
|
1920
|
-
totalTokens: totalTokens,
|
|
1921
|
-
options: (_this_options12 = this.options) !== null && _this_options12 !== void 0 ? _this_options12 : {},
|
|
1922
|
-
brainRunId: this.brainRunId
|
|
2094
|
+
type: BRAIN_EVENTS.PAUSED,
|
|
2095
|
+
status: STATUS.PAUSED,
|
|
2096
|
+
brainTitle: this.title,
|
|
2097
|
+
brainDescription: this.description,
|
|
2098
|
+
brainRunId: this.brainRunId,
|
|
2099
|
+
options: (_this_options4 = this.options) !== null && _this_options4 !== void 0 ? _this_options4 : {}
|
|
1923
2100
|
}
|
|
1924
2101
|
];
|
|
1925
|
-
case
|
|
2102
|
+
case 13:
|
|
1926
2103
|
_state.sent();
|
|
1927
|
-
// Merge terminal result into state
|
|
1928
|
-
// Only namespace under outputSchema.name when 'done' tool is called with outputSchema
|
|
1929
|
-
if (config.outputSchema && toolCall.toolName === 'done') {
|
|
1930
|
-
parsed = config.outputSchema.schema.safeParse(toolCall.args);
|
|
1931
|
-
if (!parsed.success) {
|
|
1932
|
-
throw new Error("Agent output does not match outputSchema '".concat(config.outputSchema.name, "': ").concat(parsed.error.message));
|
|
1933
|
-
}
|
|
1934
|
-
// Namespace result under outputSchema.name
|
|
1935
|
-
this.currentState = _object_spread_props(_object_spread({}, this.currentState), _define_property({}, config.outputSchema.name, parsed.data));
|
|
1936
|
-
} else {
|
|
1937
|
-
// Default behavior: spread into state root (for other terminal tools)
|
|
1938
|
-
this.currentState = _object_spread({}, this.currentState, toolCall.args);
|
|
1939
|
-
}
|
|
1940
2104
|
return [
|
|
1941
2105
|
2
|
|
1942
2106
|
];
|
|
1943
|
-
case
|
|
1944
|
-
|
|
2107
|
+
case 14:
|
|
2108
|
+
_iteratorNormalCompletion1 = true;
|
|
2109
|
+
return [
|
|
1945
2110
|
3,
|
|
1946
|
-
|
|
2111
|
+
10
|
|
1947
2112
|
];
|
|
1948
|
-
|
|
1949
|
-
state: this.currentState,
|
|
1950
|
-
options: (_this_options13 = this.options) !== null && _this_options13 !== void 0 ? _this_options13 : {},
|
|
1951
|
-
client: this.client,
|
|
1952
|
-
resources: this.resources,
|
|
1953
|
-
response: this.currentResponse,
|
|
1954
|
-
page: this.currentPage,
|
|
1955
|
-
pages: this.pages,
|
|
1956
|
-
env: this.env,
|
|
1957
|
-
components: this.components,
|
|
1958
|
-
brainRunId: this.brainRunId,
|
|
1959
|
-
stepId: effectiveStepId,
|
|
1960
|
-
memory: this.scopedMemory,
|
|
1961
|
-
store: this.store,
|
|
1962
|
-
currentUser: this.currentUser
|
|
1963
|
-
};
|
|
2113
|
+
case 15:
|
|
1964
2114
|
return [
|
|
1965
|
-
4,
|
|
1966
|
-
_await_async_generator(tool1.execute(toolCall.args, toolContext))
|
|
1967
|
-
];
|
|
1968
|
-
case 42:
|
|
1969
|
-
toolResult = _state.sent();
|
|
1970
|
-
if (!(toolResult && (typeof toolResult === "undefined" ? "undefined" : _type_of(toolResult)) === 'object' && 'waitFor' in toolResult)) return [
|
|
1971
2115
|
3,
|
|
1972
|
-
|
|
1973
|
-
];
|
|
1974
|
-
waitForResult = toolResult;
|
|
1975
|
-
// Normalize waitFor to array (supports single or multiple webhooks)
|
|
1976
|
-
webhooks = Array.isArray(waitForResult.waitFor) ? waitForResult.waitFor : [
|
|
1977
|
-
waitForResult.waitFor
|
|
2116
|
+
18
|
|
1978
2117
|
];
|
|
1979
|
-
|
|
1980
|
-
|
|
1981
|
-
|
|
1982
|
-
|
|
1983
|
-
toolName: toolCall.toolName,
|
|
1984
|
-
input: toolCall.args,
|
|
1985
|
-
webhooks: webhooks.map(function(w) {
|
|
1986
|
-
return {
|
|
1987
|
-
slug: w.slug,
|
|
1988
|
-
identifier: w.identifier,
|
|
1989
|
-
token: w.token
|
|
1990
|
-
};
|
|
1991
|
-
}),
|
|
1992
|
-
timeout: waitForResult.timeout
|
|
1993
|
-
};
|
|
1994
|
-
// Emit tool result event for debugging/visibility (with pending status)
|
|
2118
|
+
case 16:
|
|
2119
|
+
err = _state.sent();
|
|
2120
|
+
_didIteratorError1 = true;
|
|
2121
|
+
_iteratorError1 = err;
|
|
1995
2122
|
return [
|
|
1996
|
-
|
|
1997
|
-
|
|
1998
|
-
|
|
1999
|
-
|
|
2000
|
-
|
|
2001
|
-
|
|
2002
|
-
|
|
2003
|
-
|
|
2004
|
-
|
|
2005
|
-
|
|
2006
|
-
|
|
2007
|
-
|
|
2123
|
+
3,
|
|
2124
|
+
18
|
|
2125
|
+
];
|
|
2126
|
+
case 17:
|
|
2127
|
+
try {
|
|
2128
|
+
if (!_iteratorNormalCompletion1 && _iterator1.return != null) {
|
|
2129
|
+
_iterator1.return();
|
|
2130
|
+
}
|
|
2131
|
+
} finally{
|
|
2132
|
+
if (_didIteratorError1) {
|
|
2133
|
+
throw _iteratorError1;
|
|
2134
|
+
}
|
|
2135
|
+
}
|
|
2136
|
+
return [
|
|
2137
|
+
7
|
|
2138
|
+
];
|
|
2139
|
+
case 18:
|
|
2140
|
+
return [
|
|
2141
|
+
4,
|
|
2142
|
+
_await_async_generator(client.generateText({
|
|
2143
|
+
system: system,
|
|
2144
|
+
messages: iteration === 1 ? initialMessages : [],
|
|
2145
|
+
responseMessages: responseMessages,
|
|
2146
|
+
tools: toolDefs,
|
|
2147
|
+
toolChoice: toolChoice
|
|
2148
|
+
}))
|
|
2149
|
+
];
|
|
2150
|
+
case 19:
|
|
2151
|
+
llmResult = _state.sent();
|
|
2152
|
+
tokensThisIteration = llmResult.usage.totalTokens;
|
|
2153
|
+
totalTokens += tokensThisIteration;
|
|
2154
|
+
responseMessages = llmResult.responseMessages;
|
|
2155
|
+
// Emit raw response message for replay
|
|
2156
|
+
return [
|
|
2157
|
+
4,
|
|
2158
|
+
{
|
|
2159
|
+
type: BRAIN_EVENTS.PROMPT_RAW_RESPONSE_MESSAGE,
|
|
2160
|
+
stepTitle: stepTitle,
|
|
2161
|
+
stepId: stepId,
|
|
2162
|
+
iteration: iteration,
|
|
2163
|
+
message: llmResult.responseMessages,
|
|
2164
|
+
options: (_this_options5 = this.options) !== null && _this_options5 !== void 0 ? _this_options5 : {},
|
|
2008
2165
|
brainRunId: this.brainRunId
|
|
2009
2166
|
}
|
|
2010
2167
|
];
|
|
2011
|
-
case
|
|
2168
|
+
case 20:
|
|
2012
2169
|
_state.sent();
|
|
2013
|
-
//
|
|
2014
|
-
// for any subsequent generateText calls in this execution.
|
|
2015
|
-
// We DON'T emit an event for it - on resume, we reconstruct from events
|
|
2016
|
-
// and append the real webhook response.
|
|
2017
|
-
if (this.client.createToolResultMessage && responseMessages) {
|
|
2018
|
-
placeholderMessage = this.client.createToolResultMessage(toolCall.toolCallId, toolCall.toolName, {
|
|
2019
|
-
status: 'waiting_for_webhook',
|
|
2020
|
-
webhooks: pendingWebhook.webhooks
|
|
2021
|
-
});
|
|
2022
|
-
responseMessages = _to_consumable_array(responseMessages).concat([
|
|
2023
|
-
placeholderMessage
|
|
2024
|
-
]);
|
|
2025
|
-
}
|
|
2026
|
-
// Continue processing other tool calls - don't return yet
|
|
2170
|
+
// Emit iteration event
|
|
2027
2171
|
return [
|
|
2172
|
+
4,
|
|
2173
|
+
{
|
|
2174
|
+
type: BRAIN_EVENTS.PROMPT_ITERATION,
|
|
2175
|
+
stepTitle: stepTitle,
|
|
2176
|
+
stepId: stepId,
|
|
2177
|
+
iteration: iteration,
|
|
2178
|
+
tokensThisIteration: tokensThisIteration,
|
|
2179
|
+
totalTokens: totalTokens,
|
|
2180
|
+
options: (_this_options6 = this.options) !== null && _this_options6 !== void 0 ? _this_options6 : {},
|
|
2181
|
+
brainRunId: this.brainRunId
|
|
2182
|
+
}
|
|
2183
|
+
];
|
|
2184
|
+
case 21:
|
|
2185
|
+
_state.sent();
|
|
2186
|
+
if (!(maxTokens && totalTokens >= maxTokens)) return [
|
|
2028
2187
|
3,
|
|
2029
|
-
|
|
2188
|
+
23
|
|
2030
2189
|
];
|
|
2031
|
-
case 44:
|
|
2032
|
-
// Emit tool result event for debugging/visibility
|
|
2033
2190
|
return [
|
|
2034
2191
|
4,
|
|
2035
2192
|
{
|
|
2036
|
-
type: BRAIN_EVENTS.
|
|
2037
|
-
stepTitle:
|
|
2038
|
-
stepId:
|
|
2039
|
-
|
|
2040
|
-
|
|
2041
|
-
|
|
2042
|
-
options: (_this_options15 = this.options) !== null && _this_options15 !== void 0 ? _this_options15 : {},
|
|
2193
|
+
type: BRAIN_EVENTS.PROMPT_TOKEN_LIMIT,
|
|
2194
|
+
stepTitle: stepTitle,
|
|
2195
|
+
stepId: stepId,
|
|
2196
|
+
totalTokens: totalTokens,
|
|
2197
|
+
maxTokens: maxTokens,
|
|
2198
|
+
options: (_this_options7 = this.options) !== null && _this_options7 !== void 0 ? _this_options7 : {},
|
|
2043
2199
|
brainRunId: this.brainRunId
|
|
2044
2200
|
}
|
|
2045
2201
|
];
|
|
2046
|
-
case
|
|
2202
|
+
case 22:
|
|
2047
2203
|
_state.sent();
|
|
2048
|
-
|
|
2204
|
+
throw new Error("Token limit (".concat(maxTokens, ') reached in prompt loop "').concat(stepTitle, '"'));
|
|
2205
|
+
case 23:
|
|
2206
|
+
if (!llmResult.text) return [
|
|
2049
2207
|
3,
|
|
2050
|
-
|
|
2208
|
+
25
|
|
2051
2209
|
];
|
|
2052
|
-
toolResultMessage1 = this.client.createToolResultMessage(toolCall.toolCallId, toolCall.toolName, toolResult);
|
|
2053
|
-
responseMessages = _to_consumable_array(responseMessages).concat([
|
|
2054
|
-
toolResultMessage1
|
|
2055
|
-
]);
|
|
2056
|
-
// Emit event for this tool result message
|
|
2057
2210
|
return [
|
|
2058
2211
|
4,
|
|
2059
2212
|
{
|
|
2060
|
-
type: BRAIN_EVENTS.
|
|
2061
|
-
stepTitle:
|
|
2062
|
-
stepId:
|
|
2213
|
+
type: BRAIN_EVENTS.PROMPT_ASSISTANT_MESSAGE,
|
|
2214
|
+
stepTitle: stepTitle,
|
|
2215
|
+
stepId: stepId,
|
|
2216
|
+
text: llmResult.text,
|
|
2063
2217
|
iteration: iteration,
|
|
2064
|
-
|
|
2065
|
-
options: (_this_options16 = this.options) !== null && _this_options16 !== void 0 ? _this_options16 : {},
|
|
2218
|
+
options: (_this_options8 = this.options) !== null && _this_options8 !== void 0 ? _this_options8 : {},
|
|
2066
2219
|
brainRunId: this.brainRunId
|
|
2067
2220
|
}
|
|
2068
2221
|
];
|
|
2069
|
-
case
|
|
2222
|
+
case 24:
|
|
2070
2223
|
_state.sent();
|
|
2071
|
-
_state.label =
|
|
2072
|
-
case
|
|
2073
|
-
|
|
2074
|
-
|
|
2224
|
+
_state.label = 25;
|
|
2225
|
+
case 25:
|
|
2226
|
+
// Check tool calls
|
|
2227
|
+
if (!llmResult.toolCalls || llmResult.toolCalls.length === 0) {
|
|
2228
|
+
if (toolChoice === 'required') {
|
|
2229
|
+
throw new Error("LLM did not call any tools with toolChoice 'required' in step \"".concat(stepTitle, '"'));
|
|
2230
|
+
}
|
|
2231
|
+
return [
|
|
2232
|
+
3,
|
|
2233
|
+
5
|
|
2234
|
+
];
|
|
2235
|
+
}
|
|
2236
|
+
// Process tool calls sequentially
|
|
2237
|
+
pendingWebhook = null;
|
|
2238
|
+
_iteratorNormalCompletion2 = true, _didIteratorError2 = false, _iteratorError2 = undefined;
|
|
2239
|
+
_state.label = 26;
|
|
2240
|
+
case 26:
|
|
2241
|
+
_state.trys.push([
|
|
2242
|
+
26,
|
|
2243
|
+
45,
|
|
2244
|
+
46,
|
|
2245
|
+
47
|
|
2246
|
+
]);
|
|
2247
|
+
_iterator2 = llmResult.toolCalls[Symbol.iterator]();
|
|
2248
|
+
_state.label = 27;
|
|
2249
|
+
case 27:
|
|
2250
|
+
if (!!(_iteratorNormalCompletion2 = (_step2 = _iterator2.next()).done)) return [
|
|
2075
2251
|
3,
|
|
2076
|
-
|
|
2252
|
+
44
|
|
2077
2253
|
];
|
|
2078
|
-
|
|
2254
|
+
toolCall = _step2.value;
|
|
2255
|
+
toolCallId = toolCall.toolCallId, toolName = toolCall.toolName, args = toolCall.args;
|
|
2256
|
+
// Emit tool call event
|
|
2079
2257
|
return [
|
|
2258
|
+
4,
|
|
2259
|
+
{
|
|
2260
|
+
type: BRAIN_EVENTS.PROMPT_TOOL_CALL,
|
|
2261
|
+
stepTitle: stepTitle,
|
|
2262
|
+
stepId: stepId,
|
|
2263
|
+
toolName: toolName,
|
|
2264
|
+
toolCallId: toolCallId,
|
|
2265
|
+
input: args,
|
|
2266
|
+
iteration: iteration,
|
|
2267
|
+
options: (_this_options9 = this.options) !== null && _this_options9 !== void 0 ? _this_options9 : {},
|
|
2268
|
+
brainRunId: this.brainRunId
|
|
2269
|
+
}
|
|
2270
|
+
];
|
|
2271
|
+
case 28:
|
|
2272
|
+
_state.sent();
|
|
2273
|
+
if (!(toolName === 'done')) return [
|
|
2080
2274
|
3,
|
|
2081
|
-
|
|
2275
|
+
33
|
|
2082
2276
|
];
|
|
2083
|
-
|
|
2084
|
-
|
|
2085
|
-
_didIteratorError2 = true;
|
|
2086
|
-
_iteratorError2 = err;
|
|
2087
|
-
return [
|
|
2277
|
+
parsed = outputSchema.safeParse(args);
|
|
2278
|
+
if (!!parsed.success) return [
|
|
2088
2279
|
3,
|
|
2089
|
-
|
|
2280
|
+
30
|
|
2090
2281
|
];
|
|
2091
|
-
|
|
2092
|
-
try
|
|
2093
|
-
|
|
2094
|
-
|
|
2095
|
-
|
|
2096
|
-
|
|
2097
|
-
if (_didIteratorError2) {
|
|
2098
|
-
throw _iteratorError2;
|
|
2099
|
-
}
|
|
2100
|
-
}
|
|
2282
|
+
// Feed validation error back to LLM so it can retry
|
|
2283
|
+
errorMsg = "Invalid output: ".concat(parsed.error.message, ". Please fix and try again.");
|
|
2284
|
+
toolResultMsg1 = client.createToolResultMessage(toolCallId, 'done', errorMsg);
|
|
2285
|
+
responseMessages = _to_consumable_array(responseMessages !== null && responseMessages !== void 0 ? responseMessages : []).concat([
|
|
2286
|
+
toolResultMsg1
|
|
2287
|
+
]);
|
|
2101
2288
|
return [
|
|
2102
|
-
|
|
2289
|
+
4,
|
|
2290
|
+
{
|
|
2291
|
+
type: BRAIN_EVENTS.PROMPT_TOOL_RESULT,
|
|
2292
|
+
stepTitle: stepTitle,
|
|
2293
|
+
stepId: stepId,
|
|
2294
|
+
toolName: 'done',
|
|
2295
|
+
toolCallId: toolCallId,
|
|
2296
|
+
result: errorMsg,
|
|
2297
|
+
iteration: iteration,
|
|
2298
|
+
options: (_this_options10 = this.options) !== null && _this_options10 !== void 0 ? _this_options10 : {},
|
|
2299
|
+
brainRunId: this.brainRunId
|
|
2300
|
+
}
|
|
2103
2301
|
];
|
|
2104
|
-
case
|
|
2105
|
-
|
|
2302
|
+
case 29:
|
|
2303
|
+
_state.sent();
|
|
2304
|
+
return [
|
|
2106
2305
|
3,
|
|
2107
|
-
|
|
2108
|
-
];
|
|
2109
|
-
|
|
2306
|
+
44
|
|
2307
|
+
]; // Break to next iteration so LLM can retry
|
|
2308
|
+
case 30:
|
|
2309
|
+
// Valid output — merge onto state and complete
|
|
2310
|
+
this.currentState = _object_spread({}, this.currentState, parsed.data);
|
|
2110
2311
|
return [
|
|
2111
2312
|
4,
|
|
2112
2313
|
{
|
|
2113
|
-
type: BRAIN_EVENTS.
|
|
2114
|
-
stepTitle:
|
|
2115
|
-
stepId:
|
|
2116
|
-
|
|
2117
|
-
|
|
2118
|
-
|
|
2119
|
-
|
|
2314
|
+
type: BRAIN_EVENTS.PROMPT_TOOL_RESULT,
|
|
2315
|
+
stepTitle: stepTitle,
|
|
2316
|
+
stepId: stepId,
|
|
2317
|
+
toolName: 'done',
|
|
2318
|
+
toolCallId: toolCallId,
|
|
2319
|
+
result: parsed.data,
|
|
2320
|
+
iteration: iteration,
|
|
2321
|
+
options: (_this_options11 = this.options) !== null && _this_options11 !== void 0 ? _this_options11 : {},
|
|
2120
2322
|
brainRunId: this.brainRunId
|
|
2121
2323
|
}
|
|
2122
2324
|
];
|
|
2123
|
-
case
|
|
2325
|
+
case 31:
|
|
2124
2326
|
_state.sent();
|
|
2125
|
-
// Emit WEBHOOK event with all webhooks (first response wins)
|
|
2126
2327
|
return [
|
|
2127
2328
|
4,
|
|
2128
|
-
|
|
2129
|
-
type: BRAIN_EVENTS.
|
|
2130
|
-
|
|
2131
|
-
|
|
2132
|
-
|
|
2133
|
-
|
|
2134
|
-
|
|
2329
|
+
{
|
|
2330
|
+
type: BRAIN_EVENTS.PROMPT_COMPLETE,
|
|
2331
|
+
stepTitle: stepTitle,
|
|
2332
|
+
stepId: stepId,
|
|
2333
|
+
result: parsed.data,
|
|
2334
|
+
terminalTool: 'done',
|
|
2335
|
+
totalIterations: iteration,
|
|
2336
|
+
totalTokens: totalTokens,
|
|
2337
|
+
options: (_this_options12 = this.options) !== null && _this_options12 !== void 0 ? _this_options12 : {},
|
|
2135
2338
|
brainRunId: this.brainRunId
|
|
2136
|
-
}
|
|
2339
|
+
}
|
|
2137
2340
|
];
|
|
2138
|
-
case
|
|
2341
|
+
case 32:
|
|
2139
2342
|
_state.sent();
|
|
2140
2343
|
return [
|
|
2141
2344
|
2
|
|
2142
2345
|
];
|
|
2143
|
-
case
|
|
2144
|
-
|
|
2346
|
+
case 33:
|
|
2347
|
+
// Handle user-defined tools
|
|
2348
|
+
tool1 = userTools[toolName];
|
|
2349
|
+
if (!tool1) {
|
|
2350
|
+
throw new Error('Unknown tool "'.concat(toolName, '" called in step "').concat(stepTitle, '"'));
|
|
2351
|
+
}
|
|
2352
|
+
if (!tool1.terminal) return [
|
|
2145
2353
|
3,
|
|
2146
|
-
|
|
2354
|
+
36
|
|
2147
2355
|
];
|
|
2148
|
-
|
|
2356
|
+
this.currentState = _object_spread({}, this.currentState, args);
|
|
2149
2357
|
return [
|
|
2150
|
-
|
|
2358
|
+
4,
|
|
2359
|
+
{
|
|
2360
|
+
type: BRAIN_EVENTS.PROMPT_TOOL_RESULT,
|
|
2361
|
+
stepTitle: stepTitle,
|
|
2362
|
+
stepId: stepId,
|
|
2363
|
+
toolName: toolName,
|
|
2364
|
+
toolCallId: toolCallId,
|
|
2365
|
+
result: args,
|
|
2366
|
+
iteration: iteration,
|
|
2367
|
+
options: (_this_options13 = this.options) !== null && _this_options13 !== void 0 ? _this_options13 : {},
|
|
2368
|
+
brainRunId: this.brainRunId
|
|
2369
|
+
}
|
|
2151
2370
|
];
|
|
2152
|
-
|
|
2153
|
-
|
|
2154
|
-
}).call(this);
|
|
2155
|
-
}
|
|
2156
|
-
},
|
|
2157
|
-
{
|
|
2158
|
-
key: "executeIteratePrompt",
|
|
2159
|
-
value: /**
|
|
2160
|
-
* Execute an iterate prompt step, yielding one ITERATE_ITEM_COMPLETE
|
|
2161
|
-
* event per item. Between items, checks for PAUSE/KILL signals so
|
|
2162
|
-
* Cloudflare backends can restart the DO to reclaim memory.
|
|
2163
|
-
*/ function executeIteratePrompt(step) {
|
|
2164
|
-
return _wrap_async_generator(function() {
|
|
2165
|
-
var _this_resumeContext, block, iterateConfig, prevState, rawClient, client, items, totalItems, iterateProgress, _iterateProgress_processedCount, startIndex, resultsMap, k, r, i, signals, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, signal, _this_options, err, item, result, _this_options1, promptText, response, error, fallback, _this_options2, finalResults;
|
|
2166
|
-
return _ts_generator(this, function(_state) {
|
|
2167
|
-
switch(_state.label){
|
|
2168
|
-
case 0:
|
|
2169
|
-
block = step.block;
|
|
2170
|
-
iterateConfig = block.iterateConfig;
|
|
2171
|
-
prevState = this.currentState;
|
|
2172
|
-
rawClient = iterateConfig.client;
|
|
2173
|
-
client = rawClient ? this.governor ? this.governor(rawClient) : rawClient : this.client;
|
|
2371
|
+
case 34:
|
|
2372
|
+
_state.sent();
|
|
2174
2373
|
return [
|
|
2175
2374
|
4,
|
|
2176
|
-
|
|
2177
|
-
|
|
2178
|
-
|
|
2179
|
-
|
|
2180
|
-
|
|
2181
|
-
|
|
2182
|
-
|
|
2183
|
-
|
|
2184
|
-
|
|
2185
|
-
|
|
2186
|
-
if (iterateProgress === null || iterateProgress === void 0 ? void 0 : iterateProgress.accumulatedResults) {
|
|
2187
|
-
for(k = 0; k < iterateProgress.accumulatedResults.length; k++){
|
|
2188
|
-
r = iterateProgress.accumulatedResults[k];
|
|
2189
|
-
if (r != null) resultsMap.set(k, r);
|
|
2375
|
+
{
|
|
2376
|
+
type: BRAIN_EVENTS.PROMPT_COMPLETE,
|
|
2377
|
+
stepTitle: stepTitle,
|
|
2378
|
+
stepId: stepId,
|
|
2379
|
+
result: args,
|
|
2380
|
+
terminalTool: toolName,
|
|
2381
|
+
totalIterations: iteration,
|
|
2382
|
+
totalTokens: totalTokens,
|
|
2383
|
+
options: (_this_options14 = this.options) !== null && _this_options14 !== void 0 ? _this_options14 : {},
|
|
2384
|
+
brainRunId: this.brainRunId
|
|
2190
2385
|
}
|
|
2191
|
-
}
|
|
2192
|
-
// Clear resumeContext after consuming iterateProgress
|
|
2193
|
-
if (iterateProgress) {
|
|
2194
|
-
this.resumeContext = undefined;
|
|
2195
|
-
}
|
|
2196
|
-
i = startIndex;
|
|
2197
|
-
_state.label = 2;
|
|
2198
|
-
case 2:
|
|
2199
|
-
if (!(i < totalItems)) return [
|
|
2200
|
-
3,
|
|
2201
|
-
20
|
|
2202
2386
|
];
|
|
2203
|
-
|
|
2387
|
+
case 35:
|
|
2388
|
+
_state.sent();
|
|
2389
|
+
return [
|
|
2390
|
+
2
|
|
2391
|
+
];
|
|
2392
|
+
case 36:
|
|
2393
|
+
// Execute non-terminal tool
|
|
2394
|
+
toolResult = void 0;
|
|
2395
|
+
if (!tool1.execute) return [
|
|
2204
2396
|
3,
|
|
2205
|
-
|
|
2397
|
+
40
|
|
2206
2398
|
];
|
|
2207
2399
|
return [
|
|
2208
2400
|
4,
|
|
2209
|
-
_await_async_generator(this.
|
|
2210
|
-
];
|
|
2211
|
-
case 3:
|
|
2212
|
-
signals = _state.sent();
|
|
2213
|
-
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2214
|
-
_state.label = 4;
|
|
2215
|
-
case 4:
|
|
2216
|
-
_state.trys.push([
|
|
2217
|
-
4,
|
|
2218
|
-
10,
|
|
2219
|
-
11,
|
|
2220
|
-
12
|
|
2221
|
-
]);
|
|
2222
|
-
_iterator = signals[Symbol.iterator]();
|
|
2223
|
-
_state.label = 5;
|
|
2224
|
-
case 5:
|
|
2225
|
-
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
2226
|
-
3,
|
|
2227
|
-
9
|
|
2401
|
+
_await_async_generator(tool1.execute(args, this.buildStepContext(step)))
|
|
2228
2402
|
];
|
|
2229
|
-
|
|
2230
|
-
|
|
2403
|
+
case 37:
|
|
2404
|
+
toolResult = _state.sent();
|
|
2405
|
+
if (!(toolResult && (typeof toolResult === "undefined" ? "undefined" : _type_of(toolResult)) === 'object' && 'waitFor' in toolResult)) return [
|
|
2231
2406
|
3,
|
|
2232
|
-
|
|
2407
|
+
39
|
|
2233
2408
|
];
|
|
2234
|
-
|
|
2409
|
+
if (!allowWebhookSuspension) {
|
|
2410
|
+
throw new Error("Webhook/wait inside .map() prompt loop is not supported. " + 'Step "'.concat(step.block.title, '" tool "').concat(toolName, '" triggered a webhook. ') + "Remove webhook-returning tools from the map prompt loop.");
|
|
2411
|
+
}
|
|
2412
|
+
pendingWebhook = {
|
|
2413
|
+
toolCallId: toolCallId,
|
|
2414
|
+
toolName: toolName,
|
|
2415
|
+
input: args,
|
|
2416
|
+
waitFor: toolResult
|
|
2417
|
+
};
|
|
2418
|
+
// Emit tool result with waiting status
|
|
2235
2419
|
return [
|
|
2236
2420
|
4,
|
|
2237
2421
|
{
|
|
2238
|
-
type: BRAIN_EVENTS.
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2422
|
+
type: BRAIN_EVENTS.PROMPT_TOOL_RESULT,
|
|
2423
|
+
stepTitle: stepTitle,
|
|
2424
|
+
stepId: stepId,
|
|
2425
|
+
toolName: toolName,
|
|
2426
|
+
toolCallId: toolCallId,
|
|
2427
|
+
result: 'Waiting for webhook response...',
|
|
2428
|
+
iteration: iteration,
|
|
2429
|
+
status: 'waiting_for_webhook',
|
|
2430
|
+
options: (_this_options15 = this.options) !== null && _this_options15 !== void 0 ? _this_options15 : {},
|
|
2431
|
+
brainRunId: this.brainRunId
|
|
2244
2432
|
}
|
|
2245
2433
|
];
|
|
2246
|
-
case
|
|
2434
|
+
case 38:
|
|
2247
2435
|
_state.sent();
|
|
2248
|
-
|
|
2249
|
-
|
|
2250
|
-
]
|
|
2251
|
-
|
|
2252
|
-
|
|
2253
|
-
|
|
2254
|
-
// implementation detail (e.g. Cloudflare DO restart for memory).
|
|
2255
|
-
// Just stop execution silently; the backend handles resume.
|
|
2256
|
-
this.stopped = true;
|
|
2257
|
-
return [
|
|
2258
|
-
2
|
|
2259
|
-
];
|
|
2260
|
-
}
|
|
2261
|
-
_state.label = 8;
|
|
2262
|
-
case 8:
|
|
2263
|
-
_iteratorNormalCompletion = true;
|
|
2264
|
-
return [
|
|
2265
|
-
3,
|
|
2266
|
-
5
|
|
2267
|
-
];
|
|
2268
|
-
case 9:
|
|
2436
|
+
// Add placeholder to conversation
|
|
2437
|
+
placeholderMsg = client.createToolResultMessage(toolCallId, toolName, 'Waiting for webhook response...');
|
|
2438
|
+
responseMessages = _to_consumable_array(responseMessages !== null && responseMessages !== void 0 ? responseMessages : []).concat([
|
|
2439
|
+
placeholderMsg
|
|
2440
|
+
]);
|
|
2441
|
+
// Continue processing remaining tool calls in this iteration
|
|
2269
2442
|
return [
|
|
2270
2443
|
3,
|
|
2271
|
-
|
|
2444
|
+
43
|
|
2272
2445
|
];
|
|
2273
|
-
case
|
|
2274
|
-
err = _state.sent();
|
|
2275
|
-
_didIteratorError = true;
|
|
2276
|
-
_iteratorError = err;
|
|
2446
|
+
case 39:
|
|
2277
2447
|
return [
|
|
2278
2448
|
3,
|
|
2279
|
-
|
|
2280
|
-
];
|
|
2281
|
-
case 11:
|
|
2282
|
-
try {
|
|
2283
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2284
|
-
_iterator.return();
|
|
2285
|
-
}
|
|
2286
|
-
} finally{
|
|
2287
|
-
if (_didIteratorError) {
|
|
2288
|
-
throw _iteratorError;
|
|
2289
|
-
}
|
|
2290
|
-
}
|
|
2291
|
-
return [
|
|
2292
|
-
7
|
|
2449
|
+
41
|
|
2293
2450
|
];
|
|
2294
|
-
case
|
|
2295
|
-
|
|
2296
|
-
|
|
2297
|
-
|
|
2298
|
-
|
|
2299
|
-
|
|
2300
|
-
|
|
2301
|
-
|
|
2302
|
-
|
|
2303
|
-
|
|
2451
|
+
case 40:
|
|
2452
|
+
toolResult = {
|
|
2453
|
+
success: true
|
|
2454
|
+
};
|
|
2455
|
+
_state.label = 41;
|
|
2456
|
+
case 41:
|
|
2457
|
+
// Feed tool result back to LLM
|
|
2458
|
+
toolResultMsg2 = client.createToolResultMessage(toolCallId, toolName, toolResult);
|
|
2459
|
+
responseMessages = _to_consumable_array(responseMessages !== null && responseMessages !== void 0 ? responseMessages : []).concat([
|
|
2460
|
+
toolResultMsg2
|
|
2304
2461
|
]);
|
|
2305
2462
|
return [
|
|
2306
2463
|
4,
|
|
2307
|
-
|
|
2308
|
-
|
|
2309
|
-
|
|
2310
|
-
|
|
2311
|
-
|
|
2312
|
-
|
|
2464
|
+
{
|
|
2465
|
+
type: BRAIN_EVENTS.PROMPT_TOOL_RESULT,
|
|
2466
|
+
stepTitle: stepTitle,
|
|
2467
|
+
stepId: stepId,
|
|
2468
|
+
toolName: toolName,
|
|
2469
|
+
toolCallId: toolCallId,
|
|
2470
|
+
result: toolResult,
|
|
2471
|
+
iteration: iteration,
|
|
2472
|
+
options: (_this_options16 = this.options) !== null && _this_options16 !== void 0 ? _this_options16 : {},
|
|
2473
|
+
brainRunId: this.brainRunId
|
|
2474
|
+
}
|
|
2313
2475
|
];
|
|
2314
|
-
case
|
|
2315
|
-
|
|
2476
|
+
case 42:
|
|
2477
|
+
_state.sent();
|
|
2478
|
+
_state.label = 43;
|
|
2479
|
+
case 43:
|
|
2480
|
+
_iteratorNormalCompletion2 = true;
|
|
2316
2481
|
return [
|
|
2317
|
-
|
|
2318
|
-
|
|
2319
|
-
schema: iterateConfig.schema,
|
|
2320
|
-
schemaName: iterateConfig.schemaName,
|
|
2321
|
-
prompt: promptText
|
|
2322
|
-
}))
|
|
2323
|
-
];
|
|
2324
|
-
case 15:
|
|
2325
|
-
response = _state.sent();
|
|
2326
|
-
result = [
|
|
2327
|
-
item,
|
|
2328
|
-
response.object
|
|
2482
|
+
3,
|
|
2483
|
+
27
|
|
2329
2484
|
];
|
|
2485
|
+
case 44:
|
|
2330
2486
|
return [
|
|
2331
2487
|
3,
|
|
2332
|
-
|
|
2488
|
+
47
|
|
2333
2489
|
];
|
|
2334
|
-
case
|
|
2335
|
-
|
|
2336
|
-
|
|
2337
|
-
|
|
2338
|
-
result = fallback !== null ? [
|
|
2339
|
-
item,
|
|
2340
|
-
fallback
|
|
2341
|
-
] : undefined;
|
|
2342
|
-
} else {
|
|
2343
|
-
throw error;
|
|
2344
|
-
}
|
|
2490
|
+
case 45:
|
|
2491
|
+
err = _state.sent();
|
|
2492
|
+
_didIteratorError2 = true;
|
|
2493
|
+
_iteratorError2 = err;
|
|
2345
2494
|
return [
|
|
2346
2495
|
3,
|
|
2347
|
-
|
|
2496
|
+
47
|
|
2348
2497
|
];
|
|
2349
|
-
case
|
|
2350
|
-
|
|
2351
|
-
|
|
2498
|
+
case 46:
|
|
2499
|
+
try {
|
|
2500
|
+
if (!_iteratorNormalCompletion2 && _iterator2.return != null) {
|
|
2501
|
+
_iterator2.return();
|
|
2502
|
+
}
|
|
2503
|
+
} finally{
|
|
2504
|
+
if (_didIteratorError2) {
|
|
2505
|
+
throw _iteratorError2;
|
|
2506
|
+
}
|
|
2352
2507
|
}
|
|
2353
|
-
|
|
2508
|
+
return [
|
|
2509
|
+
7
|
|
2510
|
+
];
|
|
2511
|
+
case 47:
|
|
2512
|
+
if (!pendingWebhook) return [
|
|
2513
|
+
3,
|
|
2514
|
+
50
|
|
2515
|
+
];
|
|
2516
|
+
toolWaitFor = pendingWebhook.waitFor;
|
|
2517
|
+
webhooks = Array.isArray(toolWaitFor.waitFor) ? toolWaitFor.waitFor : [
|
|
2518
|
+
toolWaitFor.waitFor
|
|
2519
|
+
];
|
|
2520
|
+
serializedWaitFor = webhooks.map(function(registration) {
|
|
2521
|
+
return {
|
|
2522
|
+
slug: registration.slug,
|
|
2523
|
+
identifier: registration.identifier,
|
|
2524
|
+
token: registration.token
|
|
2525
|
+
};
|
|
2526
|
+
});
|
|
2527
|
+
// Emit prompt-level webhook event
|
|
2354
2528
|
return [
|
|
2355
2529
|
4,
|
|
2356
2530
|
{
|
|
2357
|
-
type: BRAIN_EVENTS.
|
|
2358
|
-
stepTitle:
|
|
2359
|
-
stepId:
|
|
2360
|
-
|
|
2361
|
-
|
|
2362
|
-
|
|
2363
|
-
|
|
2364
|
-
|
|
2365
|
-
schemaName: iterateConfig.schemaName,
|
|
2366
|
-
options: (_this_options2 = this.options) !== null && _this_options2 !== void 0 ? _this_options2 : {},
|
|
2367
|
-
brainRunId: this.brainRunId,
|
|
2368
|
-
canRelease: !!this.signalProvider
|
|
2531
|
+
type: BRAIN_EVENTS.PROMPT_WEBHOOK,
|
|
2532
|
+
stepTitle: stepTitle,
|
|
2533
|
+
stepId: stepId,
|
|
2534
|
+
toolCallId: pendingWebhook.toolCallId,
|
|
2535
|
+
toolName: pendingWebhook.toolName,
|
|
2536
|
+
input: pendingWebhook.input,
|
|
2537
|
+
options: (_this_options17 = this.options) !== null && _this_options17 !== void 0 ? _this_options17 : {},
|
|
2538
|
+
brainRunId: this.brainRunId
|
|
2369
2539
|
}
|
|
2370
2540
|
];
|
|
2371
|
-
case
|
|
2541
|
+
case 48:
|
|
2542
|
+
_state.sent();
|
|
2543
|
+
// Emit brain-level webhook event (triggers state machine transition to waiting)
|
|
2544
|
+
return [
|
|
2545
|
+
4,
|
|
2546
|
+
_object_spread_props(_object_spread({
|
|
2547
|
+
type: BRAIN_EVENTS.WEBHOOK,
|
|
2548
|
+
waitFor: serializedWaitFor
|
|
2549
|
+
}, toolWaitFor.timeout !== undefined && {
|
|
2550
|
+
timeout: toolWaitFor.timeout
|
|
2551
|
+
}), {
|
|
2552
|
+
options: (_this_options18 = this.options) !== null && _this_options18 !== void 0 ? _this_options18 : {},
|
|
2553
|
+
brainRunId: this.brainRunId
|
|
2554
|
+
})
|
|
2555
|
+
];
|
|
2556
|
+
case 49:
|
|
2372
2557
|
_state.sent();
|
|
2373
|
-
_state.label = 19;
|
|
2374
|
-
case 19:
|
|
2375
|
-
i++;
|
|
2376
2558
|
return [
|
|
2377
|
-
3,
|
|
2378
2559
|
2
|
|
2379
2560
|
];
|
|
2380
|
-
case
|
|
2381
|
-
// All items done - update state and complete step
|
|
2382
|
-
finalResults = new IterateResult(_to_consumable_array(resultsMap.values()));
|
|
2383
|
-
this.currentState = _object_spread_props(_object_spread({}, this.currentState), _define_property({}, iterateConfig.schemaName, finalResults));
|
|
2561
|
+
case 50:
|
|
2384
2562
|
return [
|
|
2385
|
-
|
|
2386
|
-
|
|
2563
|
+
3,
|
|
2564
|
+
5
|
|
2387
2565
|
];
|
|
2388
|
-
case
|
|
2389
|
-
_state.sent();
|
|
2566
|
+
case 51:
|
|
2390
2567
|
return [
|
|
2391
2568
|
2
|
|
2392
2569
|
];
|
|
@@ -2396,30 +2573,34 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
2396
2573
|
}
|
|
2397
2574
|
},
|
|
2398
2575
|
{
|
|
2399
|
-
key: "
|
|
2576
|
+
key: "executeMap",
|
|
2400
2577
|
value: /**
|
|
2401
|
-
* Execute a
|
|
2578
|
+
* Execute a map step. Runs the inner brain once per item
|
|
2402
2579
|
* from the `over` list, collects [item, innerState] tuples under `outputKey`.
|
|
2403
|
-
*/ function
|
|
2580
|
+
*/ function executeMap(step) {
|
|
2404
2581
|
return _wrap_async_generator(function() {
|
|
2405
|
-
var
|
|
2582
|
+
var _this_resume, block, prevState, config, items, totalItems, iterateProgress, _iterateProgress_processedCount, startIndex, resultsMap, k, r, i, signals, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, signal, _this_options, err, item, result, prompt, itemSystem, _tmp, _tmp1, client, loopResult, response, initialState, _config_options, mapInnerOptions, innerRun, patches, _iteratorAbruptCompletion, _didIteratorError1, _iteratorError1, _iterator1, _step1, _value, event, err1, innerState, error, fallback, _this_options1, finalResults;
|
|
2406
2583
|
return _ts_generator(this, function(_state) {
|
|
2407
2584
|
switch(_state.label){
|
|
2408
2585
|
case 0:
|
|
2409
2586
|
block = step.block;
|
|
2410
|
-
iterateConfig = block.iterateConfig;
|
|
2411
2587
|
prevState = this.currentState;
|
|
2412
2588
|
return [
|
|
2413
2589
|
4,
|
|
2414
|
-
_await_async_generator(
|
|
2590
|
+
_await_async_generator(block.configFn(this.buildStepContext(step)))
|
|
2415
2591
|
];
|
|
2416
2592
|
case 1:
|
|
2593
|
+
config = _state.sent();
|
|
2594
|
+
return [
|
|
2595
|
+
4,
|
|
2596
|
+
_await_async_generator(config.over)
|
|
2597
|
+
];
|
|
2598
|
+
case 2:
|
|
2417
2599
|
items = _state.sent();
|
|
2418
2600
|
totalItems = items.length;
|
|
2419
2601
|
// Resume support
|
|
2420
|
-
iterateProgress = (
|
|
2602
|
+
iterateProgress = (_this_resume = this.resume) === null || _this_resume === void 0 ? void 0 : _this_resume.iterateProgress;
|
|
2421
2603
|
startIndex = (_iterateProgress_processedCount = iterateProgress === null || iterateProgress === void 0 ? void 0 : iterateProgress.processedCount) !== null && _iterateProgress_processedCount !== void 0 ? _iterateProgress_processedCount : 0;
|
|
2422
|
-
// Use a Map for results accumulation during iteration.
|
|
2423
2604
|
resultsMap = new Map();
|
|
2424
2605
|
if (iterateProgress === null || iterateProgress === void 0 ? void 0 : iterateProgress.accumulatedResults) {
|
|
2425
2606
|
for(k = 0; k < iterateProgress.accumulatedResults.length; k++){
|
|
@@ -2428,45 +2609,45 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
2428
2609
|
}
|
|
2429
2610
|
}
|
|
2430
2611
|
if (iterateProgress) {
|
|
2431
|
-
this.
|
|
2612
|
+
this.resume = undefined;
|
|
2432
2613
|
}
|
|
2433
2614
|
i = startIndex;
|
|
2434
|
-
_state.label =
|
|
2435
|
-
case
|
|
2615
|
+
_state.label = 3;
|
|
2616
|
+
case 3:
|
|
2436
2617
|
if (!(i < totalItems)) return [
|
|
2437
2618
|
3,
|
|
2438
|
-
|
|
2619
|
+
45
|
|
2439
2620
|
];
|
|
2440
2621
|
if (!this.signalProvider) return [
|
|
2441
2622
|
3,
|
|
2442
|
-
|
|
2623
|
+
13
|
|
2443
2624
|
];
|
|
2444
2625
|
return [
|
|
2445
2626
|
4,
|
|
2446
2627
|
_await_async_generator(this.signalProvider.getSignals('CONTROL'))
|
|
2447
2628
|
];
|
|
2448
|
-
case
|
|
2629
|
+
case 4:
|
|
2449
2630
|
signals = _state.sent();
|
|
2450
2631
|
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2451
|
-
_state.label =
|
|
2452
|
-
case
|
|
2632
|
+
_state.label = 5;
|
|
2633
|
+
case 5:
|
|
2453
2634
|
_state.trys.push([
|
|
2454
|
-
|
|
2455
|
-
10,
|
|
2635
|
+
5,
|
|
2456
2636
|
11,
|
|
2457
|
-
12
|
|
2637
|
+
12,
|
|
2638
|
+
13
|
|
2458
2639
|
]);
|
|
2459
2640
|
_iterator = signals[Symbol.iterator]();
|
|
2460
|
-
_state.label =
|
|
2461
|
-
case
|
|
2641
|
+
_state.label = 6;
|
|
2642
|
+
case 6:
|
|
2462
2643
|
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
2463
2644
|
3,
|
|
2464
|
-
|
|
2645
|
+
10
|
|
2465
2646
|
];
|
|
2466
2647
|
signal = _step.value;
|
|
2467
2648
|
if (!(signal.type === 'KILL')) return [
|
|
2468
2649
|
3,
|
|
2469
|
-
|
|
2650
|
+
8
|
|
2470
2651
|
];
|
|
2471
2652
|
this.stopped = true;
|
|
2472
2653
|
return [
|
|
@@ -2480,39 +2661,39 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
2480
2661
|
options: (_this_options = this.options) !== null && _this_options !== void 0 ? _this_options : {}
|
|
2481
2662
|
}
|
|
2482
2663
|
];
|
|
2483
|
-
case
|
|
2664
|
+
case 7:
|
|
2484
2665
|
_state.sent();
|
|
2485
2666
|
return [
|
|
2486
2667
|
2
|
|
2487
2668
|
];
|
|
2488
|
-
case
|
|
2669
|
+
case 8:
|
|
2489
2670
|
if (signal.type === 'PAUSE') {
|
|
2490
2671
|
this.stopped = true;
|
|
2491
2672
|
return [
|
|
2492
2673
|
2
|
|
2493
2674
|
];
|
|
2494
2675
|
}
|
|
2495
|
-
_state.label =
|
|
2496
|
-
case
|
|
2676
|
+
_state.label = 9;
|
|
2677
|
+
case 9:
|
|
2497
2678
|
_iteratorNormalCompletion = true;
|
|
2498
2679
|
return [
|
|
2499
2680
|
3,
|
|
2500
|
-
|
|
2681
|
+
6
|
|
2501
2682
|
];
|
|
2502
|
-
case
|
|
2683
|
+
case 10:
|
|
2503
2684
|
return [
|
|
2504
2685
|
3,
|
|
2505
|
-
|
|
2686
|
+
13
|
|
2506
2687
|
];
|
|
2507
|
-
case
|
|
2688
|
+
case 11:
|
|
2508
2689
|
err = _state.sent();
|
|
2509
2690
|
_didIteratorError = true;
|
|
2510
2691
|
_iteratorError = err;
|
|
2511
2692
|
return [
|
|
2512
2693
|
3,
|
|
2513
|
-
|
|
2694
|
+
13
|
|
2514
2695
|
];
|
|
2515
|
-
case
|
|
2696
|
+
case 12:
|
|
2516
2697
|
try {
|
|
2517
2698
|
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2518
2699
|
_iterator.return();
|
|
@@ -2525,62 +2706,145 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
2525
2706
|
return [
|
|
2526
2707
|
7
|
|
2527
2708
|
];
|
|
2528
|
-
case
|
|
2709
|
+
case 13:
|
|
2529
2710
|
item = items[i];
|
|
2530
2711
|
result = void 0;
|
|
2531
|
-
_state.label =
|
|
2532
|
-
case
|
|
2712
|
+
_state.label = 14;
|
|
2713
|
+
case 14:
|
|
2533
2714
|
_state.trys.push([
|
|
2534
|
-
|
|
2535
|
-
|
|
2715
|
+
14,
|
|
2716
|
+
41,
|
|
2536
2717
|
,
|
|
2537
|
-
|
|
2718
|
+
42
|
|
2538
2719
|
]);
|
|
2539
|
-
|
|
2540
|
-
|
|
2541
|
-
|
|
2542
|
-
|
|
2543
|
-
|
|
2720
|
+
if (!config.prompt) return [
|
|
2721
|
+
3,
|
|
2722
|
+
26
|
|
2723
|
+
];
|
|
2724
|
+
return [
|
|
2725
|
+
4,
|
|
2726
|
+
_await_async_generator(resolveTemplate(config.prompt.message(item), this.templateContext))
|
|
2727
|
+
];
|
|
2728
|
+
case 15:
|
|
2729
|
+
prompt = _state.sent();
|
|
2730
|
+
if (!config.prompt.system) return [
|
|
2731
|
+
3,
|
|
2732
|
+
20
|
|
2733
|
+
];
|
|
2734
|
+
if (!(typeof config.prompt.system === 'function')) return [
|
|
2735
|
+
3,
|
|
2736
|
+
17
|
|
2737
|
+
];
|
|
2738
|
+
return [
|
|
2739
|
+
4,
|
|
2740
|
+
_await_async_generator(resolveTemplate(config.prompt.system(item), this.templateContext))
|
|
2741
|
+
];
|
|
2742
|
+
case 16:
|
|
2743
|
+
_tmp1 = _state.sent();
|
|
2744
|
+
return [
|
|
2745
|
+
3,
|
|
2746
|
+
19
|
|
2747
|
+
];
|
|
2748
|
+
case 17:
|
|
2749
|
+
return [
|
|
2750
|
+
4,
|
|
2751
|
+
_await_async_generator(resolveTemplate(config.prompt.system, this.templateContext))
|
|
2752
|
+
];
|
|
2753
|
+
case 18:
|
|
2754
|
+
_tmp1 = _state.sent();
|
|
2755
|
+
_state.label = 19;
|
|
2756
|
+
case 19:
|
|
2757
|
+
_tmp = _tmp1;
|
|
2758
|
+
return [
|
|
2759
|
+
3,
|
|
2760
|
+
21
|
|
2761
|
+
];
|
|
2762
|
+
case 20:
|
|
2763
|
+
_tmp = undefined;
|
|
2764
|
+
_state.label = 21;
|
|
2765
|
+
case 21:
|
|
2766
|
+
itemSystem = _tmp;
|
|
2767
|
+
client = config.client ? this.governor ? this.governor(config.client) : config.client : this.client;
|
|
2768
|
+
if (!config.prompt.loop) return [
|
|
2769
|
+
3,
|
|
2770
|
+
23
|
|
2771
|
+
];
|
|
2772
|
+
return [
|
|
2773
|
+
4,
|
|
2774
|
+
_await_async_generator(this.runMapPromptLoop(step, prompt, itemSystem, client, config.prompt.outputSchema, config.prompt.loop))
|
|
2775
|
+
];
|
|
2776
|
+
case 22:
|
|
2777
|
+
loopResult = _state.sent();
|
|
2778
|
+
result = [
|
|
2779
|
+
item,
|
|
2780
|
+
loopResult
|
|
2781
|
+
];
|
|
2782
|
+
return [
|
|
2783
|
+
3,
|
|
2784
|
+
25
|
|
2785
|
+
];
|
|
2786
|
+
case 23:
|
|
2787
|
+
return [
|
|
2788
|
+
4,
|
|
2789
|
+
_await_async_generator(client.generateObject({
|
|
2790
|
+
schema: config.prompt.outputSchema,
|
|
2791
|
+
prompt: prompt,
|
|
2792
|
+
system: itemSystem
|
|
2793
|
+
}))
|
|
2794
|
+
];
|
|
2795
|
+
case 24:
|
|
2796
|
+
response = _state.sent();
|
|
2797
|
+
result = [
|
|
2798
|
+
item,
|
|
2799
|
+
response.object
|
|
2800
|
+
];
|
|
2801
|
+
_state.label = 25;
|
|
2802
|
+
case 25:
|
|
2803
|
+
return [
|
|
2804
|
+
3,
|
|
2805
|
+
40
|
|
2806
|
+
];
|
|
2807
|
+
case 26:
|
|
2808
|
+
// Brain mode: run inner brain per item
|
|
2809
|
+
initialState = config.initialState(item);
|
|
2810
|
+
mapInnerOptions = (_config_options = config.options) !== null && _config_options !== void 0 ? _config_options : {};
|
|
2811
|
+
innerRun = config.run.run(_object_spread_props(_object_spread({}, this.innerBrainParams), {
|
|
2544
2812
|
initialState: initialState,
|
|
2545
|
-
options:
|
|
2546
|
-
|
|
2547
|
-
env: this.env,
|
|
2548
|
-
brainRunId: this.brainRunId,
|
|
2549
|
-
governor: this.governor
|
|
2550
|
-
});
|
|
2813
|
+
options: mapInnerOptions
|
|
2814
|
+
}));
|
|
2551
2815
|
patches = [];
|
|
2552
2816
|
_iteratorAbruptCompletion = false, _didIteratorError1 = false;
|
|
2553
|
-
_state.label =
|
|
2554
|
-
case
|
|
2817
|
+
_state.label = 27;
|
|
2818
|
+
case 27:
|
|
2555
2819
|
_state.trys.push([
|
|
2556
|
-
|
|
2557
|
-
|
|
2558
|
-
|
|
2559
|
-
|
|
2820
|
+
27,
|
|
2821
|
+
33,
|
|
2822
|
+
34,
|
|
2823
|
+
39
|
|
2560
2824
|
]);
|
|
2561
2825
|
_iterator1 = _async_iterator(innerRun);
|
|
2562
|
-
_state.label =
|
|
2563
|
-
case
|
|
2826
|
+
_state.label = 28;
|
|
2827
|
+
case 28:
|
|
2564
2828
|
return [
|
|
2565
2829
|
4,
|
|
2566
2830
|
_await_async_generator(_iterator1.next())
|
|
2567
2831
|
];
|
|
2568
|
-
case
|
|
2832
|
+
case 29:
|
|
2569
2833
|
if (!(_iteratorAbruptCompletion = !(_step1 = _state.sent()).done)) return [
|
|
2570
2834
|
3,
|
|
2571
|
-
|
|
2835
|
+
32
|
|
2572
2836
|
];
|
|
2573
2837
|
_value = _step1.value;
|
|
2574
2838
|
event = _value;
|
|
2575
|
-
// Throw on WEBHOOK — not supported in
|
|
2839
|
+
// Throw on WEBHOOK — not supported in map
|
|
2576
2840
|
if (event.type === BRAIN_EVENTS.WEBHOOK) {
|
|
2577
|
-
throw new Error("Webhook/wait inside
|
|
2841
|
+
throw new Error("Webhook/wait inside .map() is not supported. " + 'Step "'.concat(block.title, '" item ').concat(i, " triggered a webhook. ") + "Remove .wait() from the inner brain or process items outside of .map().");
|
|
2578
2842
|
}
|
|
2579
2843
|
return [
|
|
2580
2844
|
4,
|
|
2581
2845
|
event
|
|
2582
2846
|
];
|
|
2583
|
-
case
|
|
2847
|
+
case 30:
|
|
2584
2848
|
_state.sent(); // Forward all inner events
|
|
2585
2849
|
if (event.type === BRAIN_EVENTS.STEP_COMPLETE) {
|
|
2586
2850
|
patches.push(event.patch);
|
|
@@ -2588,77 +2852,79 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
2588
2852
|
if (event.type === BRAIN_EVENTS.COMPLETE) {
|
|
2589
2853
|
return [
|
|
2590
2854
|
3,
|
|
2591
|
-
|
|
2855
|
+
32
|
|
2592
2856
|
];
|
|
2593
2857
|
}
|
|
2594
|
-
_state.label =
|
|
2595
|
-
case
|
|
2858
|
+
_state.label = 31;
|
|
2859
|
+
case 31:
|
|
2596
2860
|
_iteratorAbruptCompletion = false;
|
|
2597
2861
|
return [
|
|
2598
2862
|
3,
|
|
2599
|
-
|
|
2863
|
+
28
|
|
2600
2864
|
];
|
|
2601
|
-
case
|
|
2865
|
+
case 32:
|
|
2602
2866
|
return [
|
|
2603
2867
|
3,
|
|
2604
|
-
|
|
2868
|
+
39
|
|
2605
2869
|
];
|
|
2606
|
-
case
|
|
2870
|
+
case 33:
|
|
2607
2871
|
err1 = _state.sent();
|
|
2608
2872
|
_didIteratorError1 = true;
|
|
2609
2873
|
_iteratorError1 = err1;
|
|
2610
2874
|
return [
|
|
2611
2875
|
3,
|
|
2612
|
-
|
|
2876
|
+
39
|
|
2613
2877
|
];
|
|
2614
|
-
case
|
|
2878
|
+
case 34:
|
|
2615
2879
|
_state.trys.push([
|
|
2616
|
-
|
|
2880
|
+
34,
|
|
2617
2881
|
,
|
|
2618
|
-
|
|
2619
|
-
|
|
2882
|
+
37,
|
|
2883
|
+
38
|
|
2620
2884
|
]);
|
|
2621
2885
|
if (!(_iteratorAbruptCompletion && _iterator1.return != null)) return [
|
|
2622
2886
|
3,
|
|
2623
|
-
|
|
2887
|
+
36
|
|
2624
2888
|
];
|
|
2625
2889
|
return [
|
|
2626
2890
|
4,
|
|
2627
2891
|
_await_async_generator(_iterator1.return())
|
|
2628
2892
|
];
|
|
2629
|
-
case
|
|
2893
|
+
case 35:
|
|
2630
2894
|
_state.sent();
|
|
2631
|
-
_state.label =
|
|
2632
|
-
case
|
|
2895
|
+
_state.label = 36;
|
|
2896
|
+
case 36:
|
|
2633
2897
|
return [
|
|
2634
2898
|
3,
|
|
2635
|
-
|
|
2899
|
+
38
|
|
2636
2900
|
];
|
|
2637
|
-
case
|
|
2901
|
+
case 37:
|
|
2638
2902
|
if (_didIteratorError1) {
|
|
2639
2903
|
throw _iteratorError1;
|
|
2640
2904
|
}
|
|
2641
2905
|
return [
|
|
2642
2906
|
7
|
|
2643
2907
|
];
|
|
2644
|
-
case
|
|
2908
|
+
case 38:
|
|
2645
2909
|
return [
|
|
2646
2910
|
7
|
|
2647
2911
|
];
|
|
2648
|
-
case
|
|
2912
|
+
case 39:
|
|
2649
2913
|
innerState = applyPatches(initialState, patches);
|
|
2650
2914
|
result = [
|
|
2651
2915
|
item,
|
|
2652
2916
|
innerState
|
|
2653
2917
|
];
|
|
2918
|
+
_state.label = 40;
|
|
2919
|
+
case 40:
|
|
2654
2920
|
return [
|
|
2655
2921
|
3,
|
|
2656
|
-
|
|
2922
|
+
42
|
|
2657
2923
|
];
|
|
2658
|
-
case
|
|
2924
|
+
case 41:
|
|
2659
2925
|
error = _state.sent();
|
|
2660
|
-
if (
|
|
2661
|
-
fallback =
|
|
2926
|
+
if (config.error) {
|
|
2927
|
+
fallback = config.error(item, error);
|
|
2662
2928
|
result = fallback !== null ? [
|
|
2663
2929
|
item,
|
|
2664
2930
|
fallback
|
|
@@ -2668,9 +2934,9 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
2668
2934
|
}
|
|
2669
2935
|
return [
|
|
2670
2936
|
3,
|
|
2671
|
-
|
|
2937
|
+
42
|
|
2672
2938
|
];
|
|
2673
|
-
case
|
|
2939
|
+
case 42:
|
|
2674
2940
|
if (result != null) {
|
|
2675
2941
|
resultsMap.set(i, result);
|
|
2676
2942
|
}
|
|
@@ -2685,30 +2951,29 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
2685
2951
|
result: result ? result[1] : undefined,
|
|
2686
2952
|
processedCount: i + 1,
|
|
2687
2953
|
totalItems: totalItems,
|
|
2688
|
-
|
|
2689
|
-
options: (
|
|
2954
|
+
stateKey: block.stateKey,
|
|
2955
|
+
options: (_this_options1 = this.options) !== null && _this_options1 !== void 0 ? _this_options1 : {},
|
|
2690
2956
|
brainRunId: this.brainRunId,
|
|
2691
2957
|
canRelease: !!this.signalProvider
|
|
2692
2958
|
}
|
|
2693
2959
|
];
|
|
2694
|
-
case
|
|
2960
|
+
case 43:
|
|
2695
2961
|
_state.sent();
|
|
2696
|
-
_state.label =
|
|
2697
|
-
case
|
|
2962
|
+
_state.label = 44;
|
|
2963
|
+
case 44:
|
|
2698
2964
|
i++;
|
|
2699
2965
|
return [
|
|
2700
2966
|
3,
|
|
2701
|
-
|
|
2967
|
+
3
|
|
2702
2968
|
];
|
|
2703
|
-
case
|
|
2704
|
-
finalResults = _to_consumable_array(resultsMap.values());
|
|
2705
|
-
|
|
2706
|
-
this.currentState = _object_spread_props(_object_spread({}, this.currentState), _define_property({}, iterateConfig.outputKey, outputResults));
|
|
2969
|
+
case 45:
|
|
2970
|
+
finalResults = new IterateResult(_to_consumable_array(resultsMap.values()));
|
|
2971
|
+
this.currentState = _object_spread_props(_object_spread({}, this.currentState), _define_property({}, block.stateKey, finalResults));
|
|
2707
2972
|
return [
|
|
2708
2973
|
5,
|
|
2709
2974
|
_ts_values(_async_generator_delegate(_async_iterator(this.completeStep(step, prevState))))
|
|
2710
2975
|
];
|
|
2711
|
-
case
|
|
2976
|
+
case 46:
|
|
2712
2977
|
_state.sent();
|
|
2713
2978
|
return [
|
|
2714
2979
|
2
|
|
@@ -2719,310 +2984,101 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
2719
2984
|
}
|
|
2720
2985
|
},
|
|
2721
2986
|
{
|
|
2722
|
-
key: "
|
|
2723
|
-
value:
|
|
2724
|
-
|
|
2725
|
-
|
|
2726
|
-
|
|
2987
|
+
key: "buildFormAction",
|
|
2988
|
+
value: function buildFormAction(step, formSchema) {
|
|
2989
|
+
var webhookIdentifier = "".concat(this.brainRunId, "-").concat(step.id);
|
|
2990
|
+
var formToken = crypto.randomUUID();
|
|
2991
|
+
var formAction = "".concat(this.env.origin, "/webhooks/system/page-form?identifier=").concat(encodeURIComponent(webhookIdentifier), "&token=").concat(encodeURIComponent(formToken));
|
|
2992
|
+
return {
|
|
2993
|
+
formAction: formAction,
|
|
2994
|
+
webhookIdentifier: webhookIdentifier,
|
|
2995
|
+
formToken: formToken,
|
|
2996
|
+
formSchema: formSchema
|
|
2997
|
+
};
|
|
2998
|
+
}
|
|
2999
|
+
},
|
|
3000
|
+
{
|
|
3001
|
+
key: "executePageStep",
|
|
3002
|
+
value: function executePageStep(step, stepBlock) {
|
|
2727
3003
|
return _wrap_async_generator(function() {
|
|
2728
|
-
var
|
|
3004
|
+
var prevState, pageConfigFn, pageConfig, html, formInfo, body, prompt, _pageConfig_props, data, uiResult, placementCount, placementInfo, _uiResult_text, _pageConfig_persist, pageCreateOptions, page, webhook;
|
|
2729
3005
|
return _ts_generator(this, function(_state) {
|
|
2730
3006
|
switch(_state.label){
|
|
2731
3007
|
case 0:
|
|
2732
|
-
_loop = function(i) {
|
|
2733
|
-
var signals, _iteratorNormalCompletion, _didIteratorError, _iteratorError, _iterator, _step, signal, _this_options, err, item, result, savedState, itemConfigFn, tempBlock, tempStep, agentResult, error, fallback, _this_options1;
|
|
2734
|
-
return _ts_generator(this, function(_state) {
|
|
2735
|
-
switch(_state.label){
|
|
2736
|
-
case 0:
|
|
2737
|
-
if (!_this.signalProvider) return [
|
|
2738
|
-
3,
|
|
2739
|
-
10
|
|
2740
|
-
];
|
|
2741
|
-
return [
|
|
2742
|
-
4,
|
|
2743
|
-
_await_async_generator(_this.signalProvider.getSignals('CONTROL'))
|
|
2744
|
-
];
|
|
2745
|
-
case 1:
|
|
2746
|
-
signals = _state.sent();
|
|
2747
|
-
_iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
2748
|
-
_state.label = 2;
|
|
2749
|
-
case 2:
|
|
2750
|
-
_state.trys.push([
|
|
2751
|
-
2,
|
|
2752
|
-
8,
|
|
2753
|
-
9,
|
|
2754
|
-
10
|
|
2755
|
-
]);
|
|
2756
|
-
_iterator = signals[Symbol.iterator]();
|
|
2757
|
-
_state.label = 3;
|
|
2758
|
-
case 3:
|
|
2759
|
-
if (!!(_iteratorNormalCompletion = (_step = _iterator.next()).done)) return [
|
|
2760
|
-
3,
|
|
2761
|
-
7
|
|
2762
|
-
];
|
|
2763
|
-
signal = _step.value;
|
|
2764
|
-
if (!(signal.type === 'KILL')) return [
|
|
2765
|
-
3,
|
|
2766
|
-
5
|
|
2767
|
-
];
|
|
2768
|
-
_this.stopped = true;
|
|
2769
|
-
return [
|
|
2770
|
-
4,
|
|
2771
|
-
{
|
|
2772
|
-
type: BRAIN_EVENTS.CANCELLED,
|
|
2773
|
-
status: STATUS.CANCELLED,
|
|
2774
|
-
brainTitle: _this.title,
|
|
2775
|
-
brainDescription: _this.description,
|
|
2776
|
-
brainRunId: _this.brainRunId,
|
|
2777
|
-
options: (_this_options = _this.options) !== null && _this_options !== void 0 ? _this_options : {}
|
|
2778
|
-
}
|
|
2779
|
-
];
|
|
2780
|
-
case 4:
|
|
2781
|
-
_state.sent();
|
|
2782
|
-
return [
|
|
2783
|
-
2,
|
|
2784
|
-
{
|
|
2785
|
-
v: void void 0
|
|
2786
|
-
}
|
|
2787
|
-
];
|
|
2788
|
-
case 5:
|
|
2789
|
-
if (signal.type === 'PAUSE') {
|
|
2790
|
-
_this.stopped = true;
|
|
2791
|
-
return [
|
|
2792
|
-
2,
|
|
2793
|
-
{
|
|
2794
|
-
v: void void 0
|
|
2795
|
-
}
|
|
2796
|
-
];
|
|
2797
|
-
}
|
|
2798
|
-
_state.label = 6;
|
|
2799
|
-
case 6:
|
|
2800
|
-
_iteratorNormalCompletion = true;
|
|
2801
|
-
return [
|
|
2802
|
-
3,
|
|
2803
|
-
3
|
|
2804
|
-
];
|
|
2805
|
-
case 7:
|
|
2806
|
-
return [
|
|
2807
|
-
3,
|
|
2808
|
-
10
|
|
2809
|
-
];
|
|
2810
|
-
case 8:
|
|
2811
|
-
err = _state.sent();
|
|
2812
|
-
_didIteratorError = true;
|
|
2813
|
-
_iteratorError = err;
|
|
2814
|
-
return [
|
|
2815
|
-
3,
|
|
2816
|
-
10
|
|
2817
|
-
];
|
|
2818
|
-
case 9:
|
|
2819
|
-
try {
|
|
2820
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
2821
|
-
_iterator.return();
|
|
2822
|
-
}
|
|
2823
|
-
} finally{
|
|
2824
|
-
if (_didIteratorError) {
|
|
2825
|
-
throw _iteratorError;
|
|
2826
|
-
}
|
|
2827
|
-
}
|
|
2828
|
-
return [
|
|
2829
|
-
7
|
|
2830
|
-
];
|
|
2831
|
-
case 10:
|
|
2832
|
-
item = items[i];
|
|
2833
|
-
result = void 0;
|
|
2834
|
-
_state.label = 11;
|
|
2835
|
-
case 11:
|
|
2836
|
-
_state.trys.push([
|
|
2837
|
-
11,
|
|
2838
|
-
13,
|
|
2839
|
-
,
|
|
2840
|
-
14
|
|
2841
|
-
]);
|
|
2842
|
-
// Save outer state; agent will modify this.currentState
|
|
2843
|
-
savedState = _this.currentState;
|
|
2844
|
-
// Create a wrapper configFn that injects the item as the first argument
|
|
2845
|
-
itemConfigFn = function(params) {
|
|
2846
|
-
return block.configFn(item, params);
|
|
2847
|
-
};
|
|
2848
|
-
// Create a temporary agent block with the per-item configFn
|
|
2849
|
-
tempBlock = {
|
|
2850
|
-
type: 'agent',
|
|
2851
|
-
title: block.title,
|
|
2852
|
-
configFn: itemConfigFn
|
|
2853
|
-
};
|
|
2854
|
-
tempStep = new Step(tempBlock);
|
|
2855
|
-
return [
|
|
2856
|
-
5,
|
|
2857
|
-
_ts_values(_async_generator_delegate(_async_iterator(_this.executeAgent(tempStep))))
|
|
2858
|
-
];
|
|
2859
|
-
case 12:
|
|
2860
|
-
_state.sent();
|
|
2861
|
-
// Capture agent result from this.currentState, then restore outer state
|
|
2862
|
-
agentResult = _this.currentState;
|
|
2863
|
-
_this.currentState = savedState;
|
|
2864
|
-
result = [
|
|
2865
|
-
item,
|
|
2866
|
-
agentResult
|
|
2867
|
-
];
|
|
2868
|
-
return [
|
|
2869
|
-
3,
|
|
2870
|
-
14
|
|
2871
|
-
];
|
|
2872
|
-
case 13:
|
|
2873
|
-
error = _state.sent();
|
|
2874
|
-
if (iterateConfig.error) {
|
|
2875
|
-
fallback = iterateConfig.error(item, error);
|
|
2876
|
-
result = fallback !== null ? [
|
|
2877
|
-
item,
|
|
2878
|
-
fallback
|
|
2879
|
-
] : undefined;
|
|
2880
|
-
} else {
|
|
2881
|
-
throw error;
|
|
2882
|
-
}
|
|
2883
|
-
return [
|
|
2884
|
-
3,
|
|
2885
|
-
14
|
|
2886
|
-
];
|
|
2887
|
-
case 14:
|
|
2888
|
-
if (result != null) {
|
|
2889
|
-
resultsMap.set(i, result);
|
|
2890
|
-
}
|
|
2891
|
-
return [
|
|
2892
|
-
4,
|
|
2893
|
-
{
|
|
2894
|
-
type: BRAIN_EVENTS.ITERATE_ITEM_COMPLETE,
|
|
2895
|
-
stepTitle: step.block.title,
|
|
2896
|
-
stepId: step.id,
|
|
2897
|
-
itemIndex: i,
|
|
2898
|
-
item: item,
|
|
2899
|
-
result: result ? result[1] : undefined,
|
|
2900
|
-
processedCount: i + 1,
|
|
2901
|
-
totalItems: totalItems,
|
|
2902
|
-
schemaName: iterateConfig.outputKey,
|
|
2903
|
-
options: (_this_options1 = _this.options) !== null && _this_options1 !== void 0 ? _this_options1 : {},
|
|
2904
|
-
brainRunId: _this.brainRunId,
|
|
2905
|
-
canRelease: !!_this.signalProvider
|
|
2906
|
-
}
|
|
2907
|
-
];
|
|
2908
|
-
case 15:
|
|
2909
|
-
_state.sent();
|
|
2910
|
-
return [
|
|
2911
|
-
2
|
|
2912
|
-
];
|
|
2913
|
-
}
|
|
2914
|
-
});
|
|
2915
|
-
};
|
|
2916
|
-
block = step.block;
|
|
2917
|
-
iterateConfig = block.iterateConfig;
|
|
2918
3008
|
prevState = this.currentState;
|
|
3009
|
+
pageConfigFn = stepBlock.pageConfigFn;
|
|
2919
3010
|
return [
|
|
2920
3011
|
4,
|
|
2921
|
-
_await_async_generator(
|
|
3012
|
+
_await_async_generator(pageConfigFn(this.buildStepContext(step)))
|
|
2922
3013
|
];
|
|
2923
3014
|
case 1:
|
|
2924
|
-
|
|
2925
|
-
|
|
2926
|
-
// Resume support
|
|
2927
|
-
iterateProgress = (_this_resumeContext = this.resumeContext) === null || _this_resumeContext === void 0 ? void 0 : _this_resumeContext.iterateProgress;
|
|
2928
|
-
startIndex = (_iterateProgress_processedCount = iterateProgress === null || iterateProgress === void 0 ? void 0 : iterateProgress.processedCount) !== null && _iterateProgress_processedCount !== void 0 ? _iterateProgress_processedCount : 0;
|
|
2929
|
-
// Use a Map for results accumulation during iteration.
|
|
2930
|
-
resultsMap = new Map();
|
|
2931
|
-
if (iterateProgress === null || iterateProgress === void 0 ? void 0 : iterateProgress.accumulatedResults) {
|
|
2932
|
-
for(k = 0; k < iterateProgress.accumulatedResults.length; k++){
|
|
2933
|
-
r = iterateProgress.accumulatedResults[k];
|
|
2934
|
-
if (r != null) resultsMap.set(k, r);
|
|
2935
|
-
}
|
|
2936
|
-
}
|
|
2937
|
-
if (iterateProgress) {
|
|
2938
|
-
this.resumeContext = undefined;
|
|
2939
|
-
}
|
|
2940
|
-
i = startIndex;
|
|
2941
|
-
_state.label = 2;
|
|
2942
|
-
case 2:
|
|
2943
|
-
if (!(i < totalItems)) return [
|
|
2944
|
-
3,
|
|
2945
|
-
5
|
|
2946
|
-
];
|
|
2947
|
-
_this = this;
|
|
2948
|
-
return [
|
|
2949
|
-
5,
|
|
2950
|
-
_ts_values(_loop(i))
|
|
2951
|
-
];
|
|
2952
|
-
case 3:
|
|
2953
|
-
_ret = _state.sent();
|
|
2954
|
-
if (_type_of(_ret) === "object") return [
|
|
2955
|
-
2,
|
|
2956
|
-
_ret.v
|
|
2957
|
-
];
|
|
2958
|
-
_state.label = 4;
|
|
2959
|
-
case 4:
|
|
2960
|
-
i++;
|
|
2961
|
-
return [
|
|
3015
|
+
pageConfig = _state.sent();
|
|
3016
|
+
if (!(this.currentResponse && pageConfig.formSchema)) return [
|
|
2962
3017
|
3,
|
|
2963
|
-
|
|
3018
|
+
3
|
|
2964
3019
|
];
|
|
2965
|
-
|
|
2966
|
-
|
|
2967
|
-
this.currentState = _object_spread_props(_object_spread({}, this.currentState), _define_property({}, iterateConfig.outputKey, finalResults));
|
|
3020
|
+
this.currentState = _object_spread({}, this.currentState, this.currentResponse);
|
|
3021
|
+
this.currentResponse = undefined;
|
|
2968
3022
|
return [
|
|
2969
3023
|
5,
|
|
2970
3024
|
_ts_values(_async_generator_delegate(_async_iterator(this.completeStep(step, prevState))))
|
|
2971
3025
|
];
|
|
2972
|
-
case
|
|
3026
|
+
case 2:
|
|
2973
3027
|
_state.sent();
|
|
2974
3028
|
return [
|
|
2975
3029
|
2
|
|
2976
3030
|
];
|
|
2977
|
-
|
|
2978
|
-
|
|
2979
|
-
|
|
2980
|
-
|
|
2981
|
-
|
|
2982
|
-
|
|
2983
|
-
|
|
2984
|
-
value: /**
|
|
2985
|
-
* Execute a UI generation step.
|
|
2986
|
-
* Generates UI components, renders to HTML, creates page, and sets up webhook.
|
|
2987
|
-
*/ function executeUIStep(step, stepBlock) {
|
|
2988
|
-
return _wrap_async_generator(function() {
|
|
2989
|
-
var prevState, uiConfig, _this_options, prompt, uiResult, placementCount, placementInfo, _uiResult_text, webhookIdentifier, formToken, formAction, html, page, _uiConfig_responseSchema, webhook;
|
|
2990
|
-
return _ts_generator(this, function(_state) {
|
|
2991
|
-
switch(_state.label){
|
|
2992
|
-
case 0:
|
|
2993
|
-
prevState = this.currentState;
|
|
2994
|
-
// Validate required configuration
|
|
2995
|
-
if (!this.components) {
|
|
2996
|
-
throw new Error('UI step "'.concat(stepBlock.title, '" requires components to be configured via brain.withComponents()'));
|
|
3031
|
+
case 3:
|
|
3032
|
+
// Validate: exactly one of prompt or html must be present
|
|
3033
|
+
if (!pageConfig.prompt && !pageConfig.html) {
|
|
3034
|
+
throw new Error('Page step "'.concat(stepBlock.title, "\" requires either 'prompt' or 'html'"));
|
|
3035
|
+
}
|
|
3036
|
+
if (pageConfig.prompt && pageConfig.html) {
|
|
3037
|
+
throw new Error('Page step "'.concat(stepBlock.title, "\" cannot have both 'prompt' and 'html'"));
|
|
2997
3038
|
}
|
|
2998
3039
|
if (!this.pages) {
|
|
2999
|
-
throw new Error('
|
|
3040
|
+
throw new Error('Page step "'.concat(stepBlock.title, '" requires pages service to be configured'));
|
|
3041
|
+
}
|
|
3042
|
+
formInfo = pageConfig.formSchema ? this.buildFormAction(step, pageConfig.formSchema) : undefined;
|
|
3043
|
+
if (!pageConfig.html) return [
|
|
3044
|
+
3,
|
|
3045
|
+
4
|
|
3046
|
+
];
|
|
3047
|
+
body = renderHtml(pageConfig.html, formInfo ? {
|
|
3048
|
+
formAction: formInfo.formAction
|
|
3049
|
+
} : {});
|
|
3050
|
+
html = wrapHtmlDocument(body, {
|
|
3051
|
+
title: stepBlock.title
|
|
3052
|
+
});
|
|
3053
|
+
return [
|
|
3054
|
+
3,
|
|
3055
|
+
7
|
|
3056
|
+
];
|
|
3057
|
+
case 4:
|
|
3058
|
+
// LLM-generated page
|
|
3059
|
+
if (!this.components) {
|
|
3060
|
+
throw new Error('Page step "'.concat(stepBlock.title, '" requires components to be configured via brain.withComponents()'));
|
|
3000
3061
|
}
|
|
3001
|
-
uiConfig = stepBlock.uiConfig;
|
|
3002
3062
|
return [
|
|
3003
3063
|
4,
|
|
3004
|
-
_await_async_generator(
|
|
3005
|
-
state: this.currentState,
|
|
3006
|
-
options: (_this_options = this.options) !== null && _this_options !== void 0 ? _this_options : {},
|
|
3007
|
-
resources: this.resources
|
|
3008
|
-
}))
|
|
3064
|
+
_await_async_generator(resolveTemplate(pageConfig.prompt, this.templateContext))
|
|
3009
3065
|
];
|
|
3010
|
-
case
|
|
3066
|
+
case 5:
|
|
3011
3067
|
prompt = _state.sent();
|
|
3068
|
+
data = (_pageConfig_props = pageConfig.props) !== null && _pageConfig_props !== void 0 ? _pageConfig_props : {};
|
|
3012
3069
|
return [
|
|
3013
3070
|
4,
|
|
3014
|
-
_await_async_generator(
|
|
3071
|
+
_await_async_generator(generatePage({
|
|
3015
3072
|
client: this.client,
|
|
3016
3073
|
prompt: prompt,
|
|
3017
3074
|
components: this.components,
|
|
3018
|
-
schema:
|
|
3019
|
-
data:
|
|
3075
|
+
schema: pageConfig.formSchema,
|
|
3076
|
+
data: data
|
|
3020
3077
|
}))
|
|
3021
3078
|
];
|
|
3022
|
-
case
|
|
3079
|
+
case 6:
|
|
3023
3080
|
uiResult = _state.sent();
|
|
3024
3081
|
if (!uiResult.rootId) {
|
|
3025
|
-
// Provide detailed debug information
|
|
3026
3082
|
placementCount = uiResult.placements.length;
|
|
3027
3083
|
placementInfo = uiResult.placements.map(function(p) {
|
|
3028
3084
|
var _p_parentId;
|
|
@@ -3030,60 +3086,104 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
3030
3086
|
}).join(', ');
|
|
3031
3087
|
if (placementCount === 0) {
|
|
3032
3088
|
;
|
|
3033
|
-
throw new Error('
|
|
3089
|
+
throw new Error('Page generation failed for step "'.concat(stepBlock.title, '" - no components were placed. ') + "The LLM may not have called any component tools. " + "LLM response text: ".concat((_uiResult_text = uiResult.text) !== null && _uiResult_text !== void 0 ? _uiResult_text : '(none)'));
|
|
3034
3090
|
} else {
|
|
3035
|
-
throw new Error('
|
|
3091
|
+
throw new Error('Page generation failed for step "'.concat(stepBlock.title, '" - no root component found. ') + "".concat(placementCount, " component(s) were placed but all have a parentId: [").concat(placementInfo, "]. ") + "The first component should be placed without a parentId to serve as the root.");
|
|
3036
3092
|
}
|
|
3037
3093
|
}
|
|
3038
|
-
// Create unique identifier for this form submission webhook
|
|
3039
|
-
webhookIdentifier = "".concat(this.brainRunId, "-").concat(step.id);
|
|
3040
|
-
// Generate CSRF token for form submission validation
|
|
3041
|
-
formToken = crypto.randomUUID();
|
|
3042
|
-
// Construct form action URL for the webhook
|
|
3043
|
-
formAction = "".concat(this.env.origin, "/webhooks/system/ui-form?identifier=").concat(encodeURIComponent(webhookIdentifier));
|
|
3044
|
-
// Generate HTML page
|
|
3045
3094
|
html = generatePageHtml({
|
|
3046
3095
|
placements: uiResult.placements,
|
|
3047
3096
|
rootId: uiResult.rootId,
|
|
3048
|
-
data:
|
|
3097
|
+
data: data,
|
|
3049
3098
|
title: stepBlock.title,
|
|
3050
|
-
formAction: formAction
|
|
3051
|
-
formToken: formToken
|
|
3099
|
+
formAction: formInfo === null || formInfo === void 0 ? void 0 : formInfo.formAction
|
|
3052
3100
|
});
|
|
3101
|
+
_state.label = 7;
|
|
3102
|
+
case 7:
|
|
3103
|
+
// Step 2: Create page and handle form/read-only branching (shared by both paths)
|
|
3104
|
+
pageCreateOptions = {
|
|
3105
|
+
persist: (_pageConfig_persist = pageConfig.persist) !== null && _pageConfig_persist !== void 0 ? _pageConfig_persist : pageConfig.ttl ? true : false,
|
|
3106
|
+
ttl: pageConfig.ttl
|
|
3107
|
+
};
|
|
3053
3108
|
return [
|
|
3054
3109
|
4,
|
|
3055
|
-
_await_async_generator(this.pages.create(html))
|
|
3110
|
+
_await_async_generator(this.pages.create(html, pageCreateOptions))
|
|
3056
3111
|
];
|
|
3057
|
-
case
|
|
3112
|
+
case 8:
|
|
3058
3113
|
page = _state.sent();
|
|
3059
|
-
|
|
3060
|
-
|
|
3114
|
+
if (!formInfo) return [
|
|
3115
|
+
3,
|
|
3116
|
+
12
|
|
3117
|
+
];
|
|
3061
3118
|
webhook = {
|
|
3062
|
-
slug: '
|
|
3063
|
-
identifier: webhookIdentifier,
|
|
3064
|
-
schema:
|
|
3065
|
-
token: formToken
|
|
3119
|
+
slug: 'page-form',
|
|
3120
|
+
identifier: formInfo.webhookIdentifier,
|
|
3121
|
+
schema: formInfo.formSchema,
|
|
3122
|
+
token: formInfo.formToken
|
|
3066
3123
|
};
|
|
3067
|
-
// Set currentPage for the next step to access
|
|
3068
3124
|
this.currentPage = {
|
|
3069
3125
|
url: page.url,
|
|
3070
3126
|
webhook: webhook
|
|
3071
3127
|
};
|
|
3072
|
-
|
|
3073
|
-
|
|
3128
|
+
if (!pageConfig.onCreated) return [
|
|
3129
|
+
3,
|
|
3130
|
+
10
|
|
3131
|
+
];
|
|
3132
|
+
return [
|
|
3133
|
+
4,
|
|
3134
|
+
_await_async_generator(pageConfig.onCreated(this.currentPage))
|
|
3135
|
+
];
|
|
3136
|
+
case 9:
|
|
3137
|
+
_state.sent();
|
|
3138
|
+
_state.label = 10;
|
|
3139
|
+
case 10:
|
|
3140
|
+
return [
|
|
3141
|
+
4,
|
|
3142
|
+
{
|
|
3143
|
+
type: BRAIN_EVENTS.WEBHOOK,
|
|
3144
|
+
waitFor: [
|
|
3145
|
+
{
|
|
3146
|
+
slug: webhook.slug,
|
|
3147
|
+
identifier: webhook.identifier,
|
|
3148
|
+
token: webhook.token
|
|
3149
|
+
}
|
|
3150
|
+
],
|
|
3151
|
+
options: this.options,
|
|
3152
|
+
brainRunId: this.brainRunId
|
|
3153
|
+
}
|
|
3154
|
+
];
|
|
3155
|
+
case 11:
|
|
3156
|
+
_state.sent();
|
|
3157
|
+
this.currentPage = undefined;
|
|
3158
|
+
return [
|
|
3159
|
+
3,
|
|
3160
|
+
16
|
|
3161
|
+
];
|
|
3162
|
+
case 12:
|
|
3163
|
+
if (!pageConfig.onCreated) return [
|
|
3164
|
+
3,
|
|
3165
|
+
14
|
|
3166
|
+
];
|
|
3167
|
+
return [
|
|
3168
|
+
4,
|
|
3169
|
+
_await_async_generator(pageConfig.onCreated({
|
|
3170
|
+
url: page.url
|
|
3171
|
+
}))
|
|
3172
|
+
];
|
|
3173
|
+
case 13:
|
|
3174
|
+
_state.sent();
|
|
3175
|
+
_state.label = 14;
|
|
3176
|
+
case 14:
|
|
3074
3177
|
return [
|
|
3075
3178
|
5,
|
|
3076
3179
|
_ts_values(_async_generator_delegate(_async_iterator(this.completeStep(step, prevState, {
|
|
3077
|
-
url: page.url
|
|
3078
|
-
webhook: {
|
|
3079
|
-
slug: webhook.slug,
|
|
3080
|
-
identifier: webhook.identifier,
|
|
3081
|
-
token: webhook.token
|
|
3082
|
-
}
|
|
3180
|
+
url: page.url
|
|
3083
3181
|
}))))
|
|
3084
3182
|
];
|
|
3085
|
-
case
|
|
3183
|
+
case 15:
|
|
3086
3184
|
_state.sent();
|
|
3185
|
+
_state.label = 16;
|
|
3186
|
+
case 16:
|
|
3087
3187
|
return [
|
|
3088
3188
|
2
|
|
3089
3189
|
];
|
|
@@ -3096,7 +3196,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
3096
3196
|
key: "executeWait",
|
|
3097
3197
|
value: function executeWait(step, waitBlock) {
|
|
3098
3198
|
return _wrap_async_generator(function() {
|
|
3099
|
-
var _this, steps, options, brainRunId,
|
|
3199
|
+
var _this, steps, options, brainRunId, result, webhooks, serializedWaitFor;
|
|
3100
3200
|
return _ts_generator(this, function(_state) {
|
|
3101
3201
|
switch(_state.label){
|
|
3102
3202
|
case 0:
|
|
@@ -3119,33 +3219,13 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
3119
3219
|
step.withStatus(STATUS.RUNNING);
|
|
3120
3220
|
return [
|
|
3121
3221
|
4,
|
|
3122
|
-
|
|
3123
|
-
type: BRAIN_EVENTS.STEP_STATUS,
|
|
3124
|
-
steps: steps.map(function(s) {
|
|
3125
|
-
var _s_serialized = s.serialized, patch = _s_serialized.patch, rest = _object_without_properties(_s_serialized, [
|
|
3126
|
-
"patch"
|
|
3127
|
-
]);
|
|
3128
|
-
return rest;
|
|
3129
|
-
}),
|
|
3130
|
-
options: options,
|
|
3131
|
-
brainRunId: brainRunId
|
|
3132
|
-
}
|
|
3222
|
+
this.stepStatusEvent()
|
|
3133
3223
|
];
|
|
3134
3224
|
case 2:
|
|
3135
3225
|
_state.sent();
|
|
3136
3226
|
return [
|
|
3137
3227
|
4,
|
|
3138
|
-
_await_async_generator(waitBlock.action(
|
|
3139
|
-
state: this.currentState,
|
|
3140
|
-
options: (_this_options = this.options) !== null && _this_options !== void 0 ? _this_options : {},
|
|
3141
|
-
client: this.client,
|
|
3142
|
-
resources: this.resources,
|
|
3143
|
-
page: this.currentPage,
|
|
3144
|
-
pages: this.pages,
|
|
3145
|
-
env: this.env,
|
|
3146
|
-
store: this.store,
|
|
3147
|
-
currentUser: this.currentUser
|
|
3148
|
-
}, this.services)))
|
|
3228
|
+
_await_async_generator(waitBlock.action(this.buildStepContext(step)))
|
|
3149
3229
|
];
|
|
3150
3230
|
case 3:
|
|
3151
3231
|
result = _state.sent();
|
|
@@ -3158,17 +3238,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
3158
3238
|
_state.sent();
|
|
3159
3239
|
return [
|
|
3160
3240
|
4,
|
|
3161
|
-
|
|
3162
|
-
type: BRAIN_EVENTS.STEP_STATUS,
|
|
3163
|
-
steps: steps.map(function(s) {
|
|
3164
|
-
var _s_serialized = s.serialized, patch = _s_serialized.patch, rest = _object_without_properties(_s_serialized, [
|
|
3165
|
-
"patch"
|
|
3166
|
-
]);
|
|
3167
|
-
return rest;
|
|
3168
|
-
}),
|
|
3169
|
-
options: options,
|
|
3170
|
-
brainRunId: brainRunId
|
|
3171
|
-
}
|
|
3241
|
+
this.stepStatusEvent()
|
|
3172
3242
|
];
|
|
3173
3243
|
case 5:
|
|
3174
3244
|
_state.sent();
|
|
@@ -3217,10 +3287,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
3217
3287
|
switch(_state.label){
|
|
3218
3288
|
case 0:
|
|
3219
3289
|
_this = this, steps = _this.steps, options = _this.options, brainRunId = _this.brainRunId;
|
|
3220
|
-
predicateResult = guard.predicate(
|
|
3221
|
-
state: this.currentState,
|
|
3222
|
-
options: this.options
|
|
3223
|
-
});
|
|
3290
|
+
predicateResult = guard.predicate(this.buildStepContext(step));
|
|
3224
3291
|
// Emit STEP_START for the guard
|
|
3225
3292
|
return [
|
|
3226
3293
|
4,
|
|
@@ -3239,17 +3306,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
3239
3306
|
step.withStatus(STATUS.RUNNING);
|
|
3240
3307
|
return [
|
|
3241
3308
|
4,
|
|
3242
|
-
|
|
3243
|
-
type: BRAIN_EVENTS.STEP_STATUS,
|
|
3244
|
-
steps: steps.map(function(s) {
|
|
3245
|
-
var _s_serialized = s.serialized, patch = _s_serialized.patch, rest = _object_without_properties(_s_serialized, [
|
|
3246
|
-
"patch"
|
|
3247
|
-
]);
|
|
3248
|
-
return rest;
|
|
3249
|
-
}),
|
|
3250
|
-
options: options,
|
|
3251
|
-
brainRunId: brainRunId
|
|
3252
|
-
}
|
|
3309
|
+
this.stepStatusEvent()
|
|
3253
3310
|
];
|
|
3254
3311
|
case 2:
|
|
3255
3312
|
_state.sent();
|
|
@@ -3262,17 +3319,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
3262
3319
|
_state.sent();
|
|
3263
3320
|
return [
|
|
3264
3321
|
4,
|
|
3265
|
-
|
|
3266
|
-
type: BRAIN_EVENTS.STEP_STATUS,
|
|
3267
|
-
steps: steps.map(function(s) {
|
|
3268
|
-
var _s_serialized = s.serialized, patch = _s_serialized.patch, rest = _object_without_properties(_s_serialized, [
|
|
3269
|
-
"patch"
|
|
3270
|
-
]);
|
|
3271
|
-
return rest;
|
|
3272
|
-
}),
|
|
3273
|
-
options: options,
|
|
3274
|
-
brainRunId: brainRunId
|
|
3275
|
-
}
|
|
3322
|
+
this.stepStatusEvent()
|
|
3276
3323
|
];
|
|
3277
3324
|
case 4:
|
|
3278
3325
|
_state.sent();
|
|
@@ -3312,17 +3359,7 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
3312
3359
|
case 7:
|
|
3313
3360
|
return [
|
|
3314
3361
|
4,
|
|
3315
|
-
|
|
3316
|
-
type: BRAIN_EVENTS.STEP_STATUS,
|
|
3317
|
-
steps: steps.map(function(s) {
|
|
3318
|
-
var _s_serialized = s.serialized, patch = _s_serialized.patch, rest = _object_without_properties(_s_serialized, [
|
|
3319
|
-
"patch"
|
|
3320
|
-
]);
|
|
3321
|
-
return rest;
|
|
3322
|
-
}),
|
|
3323
|
-
options: options,
|
|
3324
|
-
brainRunId: brainRunId
|
|
3325
|
-
}
|
|
3362
|
+
this.stepStatusEvent()
|
|
3326
3363
|
];
|
|
3327
3364
|
case 8:
|
|
3328
3365
|
_state.sent();
|
|
@@ -3335,6 +3372,120 @@ export var BrainEventStream = /*#__PURE__*/ function() {
|
|
|
3335
3372
|
});
|
|
3336
3373
|
}
|
|
3337
3374
|
},
|
|
3375
|
+
{
|
|
3376
|
+
key: "runMapPromptLoop",
|
|
3377
|
+
value: /**
|
|
3378
|
+
* Run a prompt loop for a single map item. Delegates to the shared
|
|
3379
|
+
* runPromptLoop generator, drains events (map doesn't forward prompt events),
|
|
3380
|
+
* and extracts the result from the PROMPT_COMPLETE event.
|
|
3381
|
+
*/ function runMapPromptLoop(step, prompt, system, client, outputSchema, loopConfig) {
|
|
3382
|
+
return _async_to_generator(function() {
|
|
3383
|
+
var loopGen, result, _iteratorAbruptCompletion, _didIteratorError, _iteratorError, _iterator, _step, _value, event, err;
|
|
3384
|
+
return _ts_generator(this, function(_state) {
|
|
3385
|
+
switch(_state.label){
|
|
3386
|
+
case 0:
|
|
3387
|
+
loopGen = this.runPromptLoop({
|
|
3388
|
+
step: step,
|
|
3389
|
+
prompt: prompt,
|
|
3390
|
+
system: system,
|
|
3391
|
+
client: client,
|
|
3392
|
+
outputSchema: outputSchema,
|
|
3393
|
+
loopConfig: loopConfig,
|
|
3394
|
+
allowWebhookSuspension: false
|
|
3395
|
+
});
|
|
3396
|
+
_iteratorAbruptCompletion = false, _didIteratorError = false;
|
|
3397
|
+
_state.label = 1;
|
|
3398
|
+
case 1:
|
|
3399
|
+
_state.trys.push([
|
|
3400
|
+
1,
|
|
3401
|
+
6,
|
|
3402
|
+
7,
|
|
3403
|
+
12
|
|
3404
|
+
]);
|
|
3405
|
+
_iterator = _async_iterator(loopGen);
|
|
3406
|
+
_state.label = 2;
|
|
3407
|
+
case 2:
|
|
3408
|
+
return [
|
|
3409
|
+
4,
|
|
3410
|
+
_iterator.next()
|
|
3411
|
+
];
|
|
3412
|
+
case 3:
|
|
3413
|
+
if (!(_iteratorAbruptCompletion = !(_step = _state.sent()).done)) return [
|
|
3414
|
+
3,
|
|
3415
|
+
5
|
|
3416
|
+
];
|
|
3417
|
+
_value = _step.value;
|
|
3418
|
+
event = _value;
|
|
3419
|
+
if (event.type === BRAIN_EVENTS.PROMPT_COMPLETE) {
|
|
3420
|
+
result = event.result;
|
|
3421
|
+
}
|
|
3422
|
+
_state.label = 4;
|
|
3423
|
+
case 4:
|
|
3424
|
+
_iteratorAbruptCompletion = false;
|
|
3425
|
+
return [
|
|
3426
|
+
3,
|
|
3427
|
+
2
|
|
3428
|
+
];
|
|
3429
|
+
case 5:
|
|
3430
|
+
return [
|
|
3431
|
+
3,
|
|
3432
|
+
12
|
|
3433
|
+
];
|
|
3434
|
+
case 6:
|
|
3435
|
+
err = _state.sent();
|
|
3436
|
+
_didIteratorError = true;
|
|
3437
|
+
_iteratorError = err;
|
|
3438
|
+
return [
|
|
3439
|
+
3,
|
|
3440
|
+
12
|
|
3441
|
+
];
|
|
3442
|
+
case 7:
|
|
3443
|
+
_state.trys.push([
|
|
3444
|
+
7,
|
|
3445
|
+
,
|
|
3446
|
+
10,
|
|
3447
|
+
11
|
|
3448
|
+
]);
|
|
3449
|
+
if (!(_iteratorAbruptCompletion && _iterator.return != null)) return [
|
|
3450
|
+
3,
|
|
3451
|
+
9
|
|
3452
|
+
];
|
|
3453
|
+
return [
|
|
3454
|
+
4,
|
|
3455
|
+
_iterator.return()
|
|
3456
|
+
];
|
|
3457
|
+
case 8:
|
|
3458
|
+
_state.sent();
|
|
3459
|
+
_state.label = 9;
|
|
3460
|
+
case 9:
|
|
3461
|
+
return [
|
|
3462
|
+
3,
|
|
3463
|
+
11
|
|
3464
|
+
];
|
|
3465
|
+
case 10:
|
|
3466
|
+
if (_didIteratorError) {
|
|
3467
|
+
throw _iteratorError;
|
|
3468
|
+
}
|
|
3469
|
+
return [
|
|
3470
|
+
7
|
|
3471
|
+
];
|
|
3472
|
+
case 11:
|
|
3473
|
+
return [
|
|
3474
|
+
7
|
|
3475
|
+
];
|
|
3476
|
+
case 12:
|
|
3477
|
+
if (!result) {
|
|
3478
|
+
throw new Error('Prompt loop in map step "'.concat(step.block.title, '" did not produce a result'));
|
|
3479
|
+
}
|
|
3480
|
+
return [
|
|
3481
|
+
2,
|
|
3482
|
+
result
|
|
3483
|
+
];
|
|
3484
|
+
}
|
|
3485
|
+
});
|
|
3486
|
+
}).call(this);
|
|
3487
|
+
}
|
|
3488
|
+
},
|
|
3338
3489
|
{
|
|
3339
3490
|
key: "completeStep",
|
|
3340
3491
|
value: function completeStep(step, prevState, pageContext) {
|