@scout9/app 1.0.0-alpha.1.0.4 → 1.0.0-alpha.1.0.6
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/{dev-f90cd1c1.cjs → dev-767919ab.cjs} +2 -2
- package/dist/{index-4c616320.cjs → index-81dce472.cjs} +6 -6
- package/dist/index.cjs +3 -3
- package/dist/{multipart-parser-0ade7cec.cjs → multipart-parser-3054b741.cjs} +3 -3
- package/dist/{spirits-68b90dec.cjs → spirits-b3f15e97.cjs} +114 -110
- package/dist/spirits.cjs +1 -1
- package/dist/testing-tools.cjs +2 -2
- package/package.json +1 -1
- package/src/testing-tools/spirits.js +42 -40
- package/types/index.d.ts +0 -1
- package/types/index.d.ts.map +1 -1
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _rollupPluginBabelHelpers = require("./_rollupPluginBabelHelpers-9c73c95c.cjs");
|
|
4
|
-
var spirits = require("./spirits-
|
|
4
|
+
var spirits = require("./spirits-b3f15e97.cjs");
|
|
5
5
|
var require$$0$4 = require('util');
|
|
6
6
|
var require$$0$3 = require('stream');
|
|
7
7
|
var require$$1 = require('path');
|
|
@@ -35307,7 +35307,7 @@ function _loadUserPackageJson() {
|
|
|
35307
35307
|
targetPkgUrl = isTest ? packageTestJsonUrl : packageJsonUrl;
|
|
35308
35308
|
_context2.t0 = JSON;
|
|
35309
35309
|
_context2.next = 10;
|
|
35310
|
-
return fs__default["default"].readFile(new URL(targetPkgUrl, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('dev-
|
|
35310
|
+
return fs__default["default"].readFile(new URL(targetPkgUrl, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('dev-767919ab.js', document.baseURI).href))), 'utf-8');
|
|
35311
35311
|
case 10:
|
|
35312
35312
|
_context2.t1 = _context2.sent;
|
|
35313
35313
|
pkg = _context2.t0.parse.call(_context2.t0, _context2.t1);
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
3
|
var _rollupPluginBabelHelpers = require("./_rollupPluginBabelHelpers-9c73c95c.cjs");
|
|
4
|
-
var dev = require("./dev-
|
|
4
|
+
var dev = require("./dev-767919ab.cjs");
|
|
5
5
|
var macros = require("./macros-c0acaa02.cjs");
|
|
6
|
-
var spirits = require("./spirits-
|
|
6
|
+
var spirits = require("./spirits-b3f15e97.cjs");
|
|
7
7
|
var require$$0 = require('fs');
|
|
8
8
|
var require$$2$1 = require('events');
|
|
9
9
|
var require$$1 = require('path');
|
|
@@ -29484,7 +29484,7 @@ class Body {
|
|
|
29484
29484
|
}
|
|
29485
29485
|
const {
|
|
29486
29486
|
toFormData
|
|
29487
|
-
} = await Promise.resolve().then(function () { return require("./multipart-parser-
|
|
29487
|
+
} = await Promise.resolve().then(function () { return require("./multipart-parser-3054b741.cjs"); });
|
|
29488
29488
|
return toFormData(this.body, ct);
|
|
29489
29489
|
}
|
|
29490
29490
|
|
|
@@ -41885,7 +41885,7 @@ function _loadUserPackageJson() {
|
|
|
41885
41885
|
targetPkgUrl = isTest ? packageTestJsonUrl : packageJsonUrl;
|
|
41886
41886
|
_context.t0 = JSON;
|
|
41887
41887
|
_context.next = 10;
|
|
41888
|
-
return fs__default["default"].readFile(new URL(targetPkgUrl, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-
|
|
41888
|
+
return fs__default["default"].readFile(new URL(targetPkgUrl, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-81dce472.js', document.baseURI).href))), 'utf-8');
|
|
41889
41889
|
case 10:
|
|
41890
41890
|
_context.t1 = _context.sent;
|
|
41891
41891
|
pkg = _context.t0.parse.call(_context.t0, _context.t1);
|
|
@@ -43177,7 +43177,7 @@ var ProjectFiles = /*#__PURE__*/function () {
|
|
|
43177
43177
|
return ProjectFiles;
|
|
43178
43178
|
}();
|
|
43179
43179
|
|
|
43180
|
-
var __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-
|
|
43180
|
+
var __filename$1 = node_url.fileURLToPath((typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-81dce472.js', document.baseURI).href)));
|
|
43181
43181
|
var __dirname$1 = path__default["default"].dirname(__filename$1);
|
|
43182
43182
|
function zipDirectory(source, out) {
|
|
43183
43183
|
var archive = archiver$1('tar', {
|
|
@@ -43392,7 +43392,7 @@ function _buildApp() {
|
|
|
43392
43392
|
case 11:
|
|
43393
43393
|
_context4.t0 = JSON;
|
|
43394
43394
|
_context4.next = 14;
|
|
43395
|
-
return fs__default["default"].readFile(new URL(templatePackagePath, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-
|
|
43395
|
+
return fs__default["default"].readFile(new URL(templatePackagePath, (typeof document === 'undefined' ? new (require('u' + 'rl').URL)('file:' + __filename).href : (document.currentScript && document.currentScript.src || new URL('index-81dce472.js', document.baseURI).href))), 'utf-8');
|
|
43396
43396
|
case 14:
|
|
43397
43397
|
_context4.t1 = _context4.sent;
|
|
43398
43398
|
packageTemplate = _context4.t0.parse.call(_context4.t0, _context4.t1);
|
package/dist/index.cjs
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var index = require("./index-
|
|
6
|
-
var dev = require("./dev-
|
|
5
|
+
var index = require("./index-81dce472.cjs");
|
|
6
|
+
var dev = require("./dev-767919ab.cjs");
|
|
7
7
|
require("./_rollupPluginBabelHelpers-9c73c95c.cjs");
|
|
8
8
|
require("./macros-c0acaa02.cjs");
|
|
9
|
-
require("./spirits-
|
|
9
|
+
require("./spirits-b3f15e97.cjs");
|
|
10
10
|
require('fs');
|
|
11
11
|
require('events');
|
|
12
12
|
require('path');
|
|
@@ -2,10 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
require('node:fs');
|
|
4
4
|
require('node:path');
|
|
5
|
-
var index = require("./index-
|
|
5
|
+
var index = require("./index-81dce472.cjs");
|
|
6
6
|
require("./_rollupPluginBabelHelpers-9c73c95c.cjs");
|
|
7
|
-
require("./dev-
|
|
8
|
-
require("./spirits-
|
|
7
|
+
require("./dev-767919ab.cjs");
|
|
8
|
+
require("./spirits-b3f15e97.cjs");
|
|
9
9
|
require('util');
|
|
10
10
|
require('stream');
|
|
11
11
|
require('path');
|
|
@@ -4797,7 +4797,7 @@ var _excluded = ["keywords"];
|
|
|
4797
4797
|
* @property {(conversationPatch: Partial<import('@scout9/app').Conversation>) => void} [onUpdateConversation]
|
|
4798
4798
|
*
|
|
4799
4799
|
* // MUST match ConversationRunnerState.chunkMessage input shape
|
|
4800
|
-
* @property {(args: { text: string; conversationId: string;
|
|
4800
|
+
* @property {(args: { text: string; conversationId: string; source?: string; mode?: 'generation' | 'transformation' }) => void} [onChunkMessage]
|
|
4801
4801
|
*
|
|
4802
4802
|
* @property {(message: import('@scout9/admin').Message) => void} [onAddMessage]
|
|
4803
4803
|
* @property {(messagePatch: Partial<import('@scout9/admin').Message> & { id: string }) => void} [onUpdateMessage]
|
|
@@ -4934,6 +4934,8 @@ var Spirits = {
|
|
|
4934
4934
|
messages,
|
|
4935
4935
|
context,
|
|
4936
4936
|
message,
|
|
4937
|
+
elapsedSeconds,
|
|
4938
|
+
rootStart,
|
|
4937
4939
|
err,
|
|
4938
4940
|
followup,
|
|
4939
4941
|
entityContextUpsert,
|
|
@@ -5038,6 +5040,11 @@ var Spirits = {
|
|
|
5038
5040
|
onError = _args6.length > 1 && _args6[1] !== undefined ? _args6[1] : function () {};
|
|
5039
5041
|
customer = input.customer, config = input.config, messageBefore = input.message, contextBefore = input.context, messagesBefore = input.messages, conversationBefore = input.conversation, parser = input.parser, contextualizer = input.contextualizer, workflow = input.workflow, generator = input.generator, transformer = input.transformer, idGenerator = input.idGenerator, _input$progress = input.progress, progress = _input$progress === void 0 ? function (message, level, type, payload) {} : _input$progress, _input$onSetContext = input.onSetContext, onSetContext = _input$onSetContext === void 0 ? function (_ctx) {} : _input$onSetContext, _input$onUpdateContex = input.onUpdateContext, onUpdateContext = _input$onUpdateContex === void 0 ? function (_patch) {} : _input$onUpdateContex, _input$onSetConversat = input.onSetConversation, onSetConversation = _input$onSetConversat === void 0 ? function (_conv) {} : _input$onSetConversat, _input$onUpdateConver = input.onUpdateConversation, onUpdateConversation = _input$onUpdateConver === void 0 ? function (_patch) {} : _input$onUpdateConver, input.onChunkMessage, _input$onAddMessage = input.onAddMessage, onAddMessage = _input$onAddMessage === void 0 ? function (_msg) {} : _input$onAddMessage, _input$onUpdateMessag = input.onUpdateMessage, onUpdateMessage = _input$onUpdateMessag === void 0 ? function (_patch) {} : _input$onUpdateMessag, _input$onDeleteMessag = input.onDeleteMessage, onDeleteMessage = _input$onDeleteMessag === void 0 ? function (_id) {} : _input$onDeleteMessag;
|
|
5040
5042
|
conversation = input.conversation, messages = input.messages, context = input.context, message = input.message;
|
|
5043
|
+
elapsedSeconds = function elapsedSeconds(start) {
|
|
5044
|
+
return ((performance.now() - start) / 1000).toFixed(2);
|
|
5045
|
+
};
|
|
5046
|
+
rootStart = performance.now();
|
|
5047
|
+
progress("Spirits.customer start", 'info', undefined, undefined);
|
|
5041
5048
|
if (typeof message.content !== 'string') {
|
|
5042
5049
|
err = new Error("Spirits: customer message.content is not string (id=".concat(message.id, ", type=").concat(_rollupPluginBabelHelpers._typeof(message.content), ")"));
|
|
5043
5050
|
progress('customer message.content is not string', 'error', 'INVALID_CUSTOMER_MESSAGE', {
|
|
@@ -5210,16 +5217,7 @@ var Spirits = {
|
|
|
5210
5217
|
patch.locked = true;
|
|
5211
5218
|
patch.lockedReason = "Max lock attempts exceeded (".concat(next, " > ").concat(max, ")");
|
|
5212
5219
|
}
|
|
5213
|
-
|
|
5214
|
-
// ✅ emits UPDATE_CONVERSATION via updateConversation()
|
|
5215
5220
|
var updated = updateConversation(_conversation, patch);
|
|
5216
|
-
|
|
5217
|
-
// optional: keep your existing progress payload shape if you want
|
|
5218
|
-
progress("Incremented lock attempt", "info", "UPDATE_CONVERSATION", {
|
|
5219
|
-
lockAttempts: updated.lockAttempts,
|
|
5220
|
-
locked: updated.locked,
|
|
5221
|
-
lockedReason: updated.lockedReason || ""
|
|
5222
|
-
});
|
|
5223
5221
|
return updated;
|
|
5224
5222
|
};
|
|
5225
5223
|
_addInstruction = function _addInstruction(instruction, _messages, _conversation, _config, previousLockAttempt, id) {
|
|
@@ -5280,75 +5278,88 @@ var Spirits = {
|
|
|
5280
5278
|
};
|
|
5281
5279
|
onStatus = function onStatus(statusType) {
|
|
5282
5280
|
var completeOrError = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true;
|
|
5283
|
-
|
|
5281
|
+
var level = completeOrError === true ? 'success' : completeOrError === 'ignored' ? 'info' : 'error';
|
|
5282
|
+
progress("".concat(statusType, ": ").concat(completeOrError), level, 'STATUS', _rollupPluginBabelHelpers._defineProperty({}, statusType, completeOrError));
|
|
5284
5283
|
};
|
|
5285
5284
|
/**
|
|
5286
|
-
*
|
|
5287
|
-
* @param {
|
|
5285
|
+
* Wraps a step, handling performance,
|
|
5286
|
+
* @param {Promise<any>} prom - the operation
|
|
5287
|
+
* @param {string} step - the step name
|
|
5288
|
+
* @param {string} stepAction - overrides step name in logs
|
|
5288
5289
|
*/
|
|
5289
5290
|
wrapStep = /*#__PURE__*/function () {
|
|
5290
5291
|
var _ref2 = _rollupPluginBabelHelpers._asyncToGenerator( /*#__PURE__*/_rollupPluginBabelHelpers._regeneratorRuntime().mark(function _callee(prom, step) {
|
|
5291
|
-
var
|
|
5292
|
+
var stepAction,
|
|
5293
|
+
stepStart,
|
|
5294
|
+
result,
|
|
5295
|
+
msg,
|
|
5296
|
+
_args2 = arguments;
|
|
5292
5297
|
return _rollupPluginBabelHelpers._regeneratorRuntime().wrap(function _callee$(_context) {
|
|
5293
5298
|
while (1) switch (_context.prev = _context.next) {
|
|
5294
5299
|
case 0:
|
|
5295
|
-
|
|
5296
|
-
|
|
5300
|
+
stepAction = _args2.length > 2 && _args2[2] !== undefined ? _args2[2] : step;
|
|
5301
|
+
stepStart = performance.now();
|
|
5302
|
+
_context.prev = 2;
|
|
5303
|
+
progress("".concat(stepAction, " start"), 'info', undefined, undefined);
|
|
5304
|
+
_context.next = 6;
|
|
5297
5305
|
return prom;
|
|
5298
|
-
case
|
|
5306
|
+
case 6:
|
|
5299
5307
|
result = _context.sent;
|
|
5300
|
-
|
|
5308
|
+
progress("".concat(stepAction, " succeeded in ").concat(elapsedSeconds(stepStart), "s"), 'success', undefined, undefined);
|
|
5301
5309
|
return _context.abrupt("return", result);
|
|
5302
|
-
case
|
|
5303
|
-
_context.prev =
|
|
5304
|
-
_context.t0 = _context["catch"](
|
|
5305
|
-
|
|
5310
|
+
case 11:
|
|
5311
|
+
_context.prev = 11;
|
|
5312
|
+
_context.t0 = _context["catch"](2);
|
|
5313
|
+
msg = (_context.t0 === null || _context.t0 === void 0 ? void 0 : _context.t0.message) || 'UNHANDLED ERROR';
|
|
5314
|
+
progress("".concat(stepAction, " failed in ").concat(elapsedSeconds(stepStart), "s"), 'error', undefined, {
|
|
5315
|
+
error: msg
|
|
5316
|
+
});
|
|
5306
5317
|
throw SpiritError.fromError(_context.t0, step);
|
|
5307
|
-
case
|
|
5318
|
+
case 16:
|
|
5308
5319
|
case "end":
|
|
5309
5320
|
return _context.stop();
|
|
5310
5321
|
}
|
|
5311
|
-
}, _callee, null, [[
|
|
5322
|
+
}, _callee, null, [[2, 11]]);
|
|
5312
5323
|
}));
|
|
5313
5324
|
return function wrapStep(_x2, _x3) {
|
|
5314
5325
|
return _ref2.apply(this, arguments);
|
|
5315
5326
|
};
|
|
5316
5327
|
}(); // 1. Check inputs
|
|
5317
5328
|
if (conversation.$agent) {
|
|
5318
|
-
_context5.next =
|
|
5329
|
+
_context5.next = 33;
|
|
5319
5330
|
break;
|
|
5320
5331
|
}
|
|
5321
5332
|
throw new Error("SpiritsError: No agent found in conversation, must define \".$agent\" in the conversation");
|
|
5322
|
-
case
|
|
5333
|
+
case 33:
|
|
5323
5334
|
persona = (config.persona || config.personas || config.agents).find(function (p) {
|
|
5324
5335
|
return p.id === conversation.$agent;
|
|
5325
5336
|
});
|
|
5326
5337
|
if (persona) {
|
|
5327
|
-
_context5.next =
|
|
5338
|
+
_context5.next = 38;
|
|
5328
5339
|
break;
|
|
5329
5340
|
}
|
|
5330
5341
|
if (!(config.persona || config.personas || config.agents).some(function (a) {
|
|
5331
5342
|
return !a.id;
|
|
5332
5343
|
})) {
|
|
5333
|
-
_context5.next =
|
|
5344
|
+
_context5.next = 37;
|
|
5334
5345
|
break;
|
|
5335
5346
|
}
|
|
5336
5347
|
throw new Error("SpiritsError: No persona found (\"".concat(conversation.$agent, "\") in provided config, some persona's did not contain an \"id\" (Internal Mapping Error)"));
|
|
5337
|
-
case
|
|
5348
|
+
case 37:
|
|
5338
5349
|
throw new Error("SpiritsError: No persona found (\"".concat(conversation.$agent, "\") in provided config"));
|
|
5339
|
-
case
|
|
5350
|
+
case 38:
|
|
5340
5351
|
if (messages.every(function (m) {
|
|
5341
5352
|
return !!m.id;
|
|
5342
5353
|
})) {
|
|
5343
|
-
_context5.next =
|
|
5354
|
+
_context5.next = 40;
|
|
5344
5355
|
break;
|
|
5345
5356
|
}
|
|
5346
5357
|
throw new Error("SpiritsError: Every message must have an \".id\", ensure all messages have an id assigned before running");
|
|
5347
|
-
case
|
|
5358
|
+
case 40:
|
|
5348
5359
|
if (messages.every(function (m) {
|
|
5349
5360
|
return m.role === 'customer' || m.role === 'agent' || m.role === 'system' || m.role === 'tool';
|
|
5350
5361
|
})) {
|
|
5351
|
-
_context5.next =
|
|
5362
|
+
_context5.next = 43;
|
|
5352
5363
|
break;
|
|
5353
5364
|
}
|
|
5354
5365
|
invalidRoles = messages.filter(function (m) {
|
|
@@ -5357,7 +5368,7 @@ var Spirits = {
|
|
|
5357
5368
|
throw new Error("SpiritsError: Every message must have a role of \"customer\", \"agent\", or \"system\". Got invalid roles: ".concat(invalidRoles.map(function (m) {
|
|
5358
5369
|
return m.role;
|
|
5359
5370
|
}).join(', ')));
|
|
5360
|
-
case
|
|
5371
|
+
case 43:
|
|
5361
5372
|
// Normalize existing message times ONCE at the start
|
|
5362
5373
|
enforceMonotonicWithEmits(messages, 1);
|
|
5363
5374
|
|
|
@@ -5373,10 +5384,9 @@ var Spirits = {
|
|
|
5373
5384
|
}
|
|
5374
5385
|
|
|
5375
5386
|
// 2. Parse the message
|
|
5376
|
-
|
|
5377
|
-
|
|
5378
|
-
|
|
5379
|
-
case 47:
|
|
5387
|
+
_context5.next = 49;
|
|
5388
|
+
return wrapStep(parser(message.content, 'en'), 'parse', 'parsing message');
|
|
5389
|
+
case 49:
|
|
5380
5390
|
parsePayload = _context5.sent;
|
|
5381
5391
|
if (parsePayload.intent) {
|
|
5382
5392
|
message.intent = parsePayload.intent;
|
|
@@ -5498,16 +5508,16 @@ var Spirits = {
|
|
|
5498
5508
|
}
|
|
5499
5509
|
|
|
5500
5510
|
// 3. Run the contextualizer
|
|
5501
|
-
progress('Running contextualizer', 'info', 'SET_PROCESSING', 'system');
|
|
5502
|
-
_context5.next =
|
|
5511
|
+
// progress('Running contextualizer', 'info', 'SET_PROCESSING', 'system');
|
|
5512
|
+
_context5.next = 66;
|
|
5503
5513
|
return wrapStep(contextualizer({
|
|
5504
5514
|
conversation: conversation,
|
|
5505
5515
|
messages: messages
|
|
5506
|
-
}), 'contextualize');
|
|
5507
|
-
case
|
|
5516
|
+
}), 'contextualize', 'contextualizing');
|
|
5517
|
+
case 66:
|
|
5508
5518
|
newContextMessages = _context5.sent;
|
|
5509
5519
|
_iterator6 = _rollupPluginBabelHelpers._createForOfIteratorHelper(newContextMessages);
|
|
5510
|
-
_context5.prev =
|
|
5520
|
+
_context5.prev = 68;
|
|
5511
5521
|
_loop2 = /*#__PURE__*/_rollupPluginBabelHelpers._regeneratorRuntime().mark(function _loop2() {
|
|
5512
5522
|
var contextMessage;
|
|
5513
5523
|
return _rollupPluginBabelHelpers._regeneratorRuntime().wrap(function _loop2$(_context3) {
|
|
@@ -5534,29 +5544,27 @@ var Spirits = {
|
|
|
5534
5544
|
}, _loop2);
|
|
5535
5545
|
});
|
|
5536
5546
|
_iterator6.s();
|
|
5537
|
-
case
|
|
5547
|
+
case 71:
|
|
5538
5548
|
if ((_step6 = _iterator6.n()).done) {
|
|
5539
|
-
_context5.next =
|
|
5549
|
+
_context5.next = 75;
|
|
5540
5550
|
break;
|
|
5541
5551
|
}
|
|
5542
|
-
return _context5.delegateYield(_loop2(), "t0",
|
|
5543
|
-
case
|
|
5544
|
-
_context5.next =
|
|
5552
|
+
return _context5.delegateYield(_loop2(), "t0", 73);
|
|
5553
|
+
case 73:
|
|
5554
|
+
_context5.next = 71;
|
|
5545
5555
|
break;
|
|
5546
|
-
case
|
|
5547
|
-
_context5.next =
|
|
5556
|
+
case 75:
|
|
5557
|
+
_context5.next = 80;
|
|
5548
5558
|
break;
|
|
5549
|
-
case
|
|
5550
|
-
_context5.prev =
|
|
5551
|
-
_context5.t1 = _context5["catch"](
|
|
5559
|
+
case 77:
|
|
5560
|
+
_context5.prev = 77;
|
|
5561
|
+
_context5.t1 = _context5["catch"](68);
|
|
5552
5562
|
_iterator6.e(_context5.t1);
|
|
5553
|
-
case
|
|
5554
|
-
_context5.prev =
|
|
5563
|
+
case 80:
|
|
5564
|
+
_context5.prev = 80;
|
|
5555
5565
|
_iterator6.f();
|
|
5556
|
-
return _context5.finish(
|
|
5557
|
-
case
|
|
5558
|
-
// 4. Run the workflow
|
|
5559
|
-
progress('Running workflow', 'info', 'SET_PROCESSING', 'system');
|
|
5566
|
+
return _context5.finish(80);
|
|
5567
|
+
case 83:
|
|
5560
5568
|
_context5.next = 85;
|
|
5561
5569
|
return wrapStep(workflow({
|
|
5562
5570
|
messages: messages,
|
|
@@ -5635,7 +5643,7 @@ var Spirits = {
|
|
|
5635
5643
|
adjusted.delayInSeconds = slot.secondsDelay;
|
|
5636
5644
|
}
|
|
5637
5645
|
if (!adjusted.content && !adjusted.tool_calls) {
|
|
5638
|
-
progress("Slot ".concat(index, " input error"), '
|
|
5646
|
+
progress("Slot ".concat(index, " input error"), 'error', 'SLOT_INPUT_ERROR', {
|
|
5639
5647
|
error: "Expected slots[".concat(index, "].message.content to exist (unless tool_calls provided)")
|
|
5640
5648
|
});
|
|
5641
5649
|
return acc;
|
|
@@ -5944,16 +5952,15 @@ var Spirits = {
|
|
|
5944
5952
|
// 5. Generate response
|
|
5945
5953
|
// If conversation previously locked, don't generate
|
|
5946
5954
|
if (input.conversation.locked) {
|
|
5947
|
-
_context5.next =
|
|
5955
|
+
_context5.next = 214;
|
|
5948
5956
|
break;
|
|
5949
5957
|
}
|
|
5950
5958
|
if (!((!conversation.locked || !hasNoInstructions) && !!hasNoCustomMessage)) {
|
|
5951
|
-
_context5.next =
|
|
5959
|
+
_context5.next = 179;
|
|
5952
5960
|
break;
|
|
5953
5961
|
}
|
|
5954
5962
|
_context5.prev = 163;
|
|
5955
|
-
progress('Generating message', 'info', 'SET_PROCESSING', 'system');
|
|
5956
|
-
|
|
5963
|
+
// progress('Generating message', 'info', 'SET_PROCESSING', 'system');
|
|
5957
5964
|
/** @type {import('@scout9/admin').GenerateRequestOneOf1} */
|
|
5958
5965
|
generatorInput = {
|
|
5959
5966
|
messages: messages,
|
|
@@ -5965,18 +5972,17 @@ var Spirits = {
|
|
|
5965
5972
|
if (!!_tasks && Array.isArray(_tasks) && !!_tasks.length) {
|
|
5966
5973
|
generatorInput.tasks = _tasks;
|
|
5967
5974
|
}
|
|
5968
|
-
_context5.next =
|
|
5975
|
+
_context5.next = 168;
|
|
5969
5976
|
return wrapStep(generator(generatorInput), 'generate');
|
|
5970
|
-
case
|
|
5977
|
+
case 168:
|
|
5971
5978
|
generatorPayload = _context5.sent;
|
|
5972
5979
|
if (!generatorPayload.send) {
|
|
5973
|
-
progress('Generated response', '
|
|
5980
|
+
progress('Generated response send rejected', 'error', undefined, {
|
|
5974
5981
|
error: ((_generatorPayload$err = generatorPayload.errors) === null || _generatorPayload$err === void 0 ? void 0 : _generatorPayload$err.join('\n\n')) || 'Unknown Reason'
|
|
5975
5982
|
});
|
|
5976
5983
|
console.error("Spirits: Locking conversation, api returned send false: ".concat(generatorPayload.messages), ((_generatorPayload$err2 = generatorPayload.errors) === null || _generatorPayload$err2 === void 0 ? void 0 : _generatorPayload$err2.join('\n\n')) || generatorPayload.forwardNote || 'Unknown Reason');
|
|
5977
5984
|
conversation = lockConversation(conversation, 'API: ' + ((_generatorPayload$err3 = generatorPayload.errors) === null || _generatorPayload$err3 === void 0 ? void 0 : _generatorPayload$err3.join('\n\n')) || generatorPayload.forwardNote || 'Unknown Reason');
|
|
5978
5985
|
} else {
|
|
5979
|
-
progress('Generated response', 'success', undefined, undefined);
|
|
5980
5986
|
// Check if already had message
|
|
5981
5987
|
agentMessages = messages.filter(function (m) {
|
|
5982
5988
|
return m.role === 'agent';
|
|
@@ -6073,26 +6079,26 @@ var Spirits = {
|
|
|
6073
6079
|
}
|
|
6074
6080
|
}
|
|
6075
6081
|
}
|
|
6076
|
-
_context5.next =
|
|
6082
|
+
_context5.next = 177;
|
|
6077
6083
|
break;
|
|
6078
|
-
case
|
|
6079
|
-
_context5.prev =
|
|
6084
|
+
case 172:
|
|
6085
|
+
_context5.prev = 172;
|
|
6080
6086
|
_context5.t5 = _context5["catch"](163);
|
|
6081
6087
|
onError(_context5.t5);
|
|
6082
6088
|
console.error("Spirits: Locking conversation, error generating response: ".concat(_context5.t5.message));
|
|
6083
6089
|
conversation = lockConversation(conversation, 'API: ' + _context5.t5.message);
|
|
6084
|
-
case
|
|
6085
|
-
_context5.next =
|
|
6090
|
+
case 177:
|
|
6091
|
+
_context5.next = 180;
|
|
6086
6092
|
break;
|
|
6087
|
-
case
|
|
6093
|
+
case 179:
|
|
6088
6094
|
onStatus('generate', 'ignored');
|
|
6089
|
-
case
|
|
6095
|
+
case 180:
|
|
6090
6096
|
if (!(messagesToTransform.length && transformer)) {
|
|
6091
|
-
_context5.next =
|
|
6097
|
+
_context5.next = 211;
|
|
6092
6098
|
break;
|
|
6093
6099
|
}
|
|
6094
|
-
_context5.prev =
|
|
6095
|
-
_context5.next =
|
|
6100
|
+
_context5.prev = 181;
|
|
6101
|
+
_context5.next = 184;
|
|
6096
6102
|
return wrapStep(transformer({
|
|
6097
6103
|
// message: messagesToTransform,
|
|
6098
6104
|
addedMessages: messagesToTransform,
|
|
@@ -6101,17 +6107,15 @@ var Spirits = {
|
|
|
6101
6107
|
messages: messages,
|
|
6102
6108
|
context: context
|
|
6103
6109
|
}), 'transform');
|
|
6104
|
-
case
|
|
6110
|
+
case 184:
|
|
6105
6111
|
transformResponse = _context5.sent;
|
|
6106
|
-
progress('Generated response', 'success', undefined, undefined);
|
|
6107
|
-
|
|
6108
6112
|
// @TODO check for duplicates, or have already sent the message
|
|
6109
6113
|
transformedMessages = (_transformResponse$me = transformResponse.messages) !== null && _transformResponse$me !== void 0 && _transformResponse$me.length ? transformResponse.messages : [{
|
|
6110
6114
|
role: 'agent',
|
|
6111
6115
|
content: transformResponse.message
|
|
6112
6116
|
}];
|
|
6113
6117
|
_iterator9 = _rollupPluginBabelHelpers._createForOfIteratorHelper(transformedMessages);
|
|
6114
|
-
_context5.prev =
|
|
6118
|
+
_context5.prev = 187;
|
|
6115
6119
|
_loop = /*#__PURE__*/_rollupPluginBabelHelpers._regeneratorRuntime().mark(function _loop() {
|
|
6116
6120
|
var message, adjusted, prior, _adjusted$contentGene2, _adjusted$contentTran, appended;
|
|
6117
6121
|
return _rollupPluginBabelHelpers._regeneratorRuntime().wrap(function _loop$(_context2) {
|
|
@@ -6137,7 +6141,7 @@ var Spirits = {
|
|
|
6137
6141
|
}
|
|
6138
6142
|
}
|
|
6139
6143
|
if (adjusted.role === 'agent' && adjusted.content && !adjusted.ignoreTransform && !adjusted.tool_calls && !adjusted.contentTransformed) {
|
|
6140
|
-
progress('missing contentTransformed on a generated message', '
|
|
6144
|
+
progress('missing contentTransformed on a generated message', 'warn', undefined, adjusted);
|
|
6141
6145
|
adjusted.contentTransformed = adjusted.content;
|
|
6142
6146
|
}
|
|
6143
6147
|
appended = pushMessage(messages, adjusted);
|
|
@@ -6150,53 +6154,52 @@ var Spirits = {
|
|
|
6150
6154
|
}, _loop);
|
|
6151
6155
|
});
|
|
6152
6156
|
_iterator9.s();
|
|
6153
|
-
case
|
|
6157
|
+
case 190:
|
|
6154
6158
|
if ((_step9 = _iterator9.n()).done) {
|
|
6155
|
-
_context5.next =
|
|
6159
|
+
_context5.next = 194;
|
|
6156
6160
|
break;
|
|
6157
6161
|
}
|
|
6158
|
-
return _context5.delegateYield(_loop(), "t6",
|
|
6162
|
+
return _context5.delegateYield(_loop(), "t6", 192);
|
|
6163
|
+
case 192:
|
|
6164
|
+
_context5.next = 190;
|
|
6165
|
+
break;
|
|
6159
6166
|
case 194:
|
|
6160
|
-
_context5.next =
|
|
6167
|
+
_context5.next = 199;
|
|
6161
6168
|
break;
|
|
6162
6169
|
case 196:
|
|
6163
|
-
_context5.
|
|
6164
|
-
|
|
6165
|
-
case 198:
|
|
6166
|
-
_context5.prev = 198;
|
|
6167
|
-
_context5.t7 = _context5["catch"](189);
|
|
6170
|
+
_context5.prev = 196;
|
|
6171
|
+
_context5.t7 = _context5["catch"](187);
|
|
6168
6172
|
_iterator9.e(_context5.t7);
|
|
6169
|
-
case
|
|
6170
|
-
_context5.prev =
|
|
6173
|
+
case 199:
|
|
6174
|
+
_context5.prev = 199;
|
|
6171
6175
|
_iterator9.f();
|
|
6172
|
-
return _context5.finish(
|
|
6173
|
-
case
|
|
6174
|
-
_context5.next =
|
|
6176
|
+
return _context5.finish(199);
|
|
6177
|
+
case 202:
|
|
6178
|
+
_context5.next = 209;
|
|
6175
6179
|
break;
|
|
6176
|
-
case
|
|
6177
|
-
_context5.prev =
|
|
6178
|
-
_context5.t8 = _context5["catch"](
|
|
6180
|
+
case 204:
|
|
6181
|
+
_context5.prev = 204;
|
|
6182
|
+
_context5.t8 = _context5["catch"](181);
|
|
6179
6183
|
console.error("Spirits: Locking conversation, error transforming response: ".concat(_context5.t8.message));
|
|
6180
6184
|
conversation = lockConversation(conversation, 'API: ' + _context5.t8.message);
|
|
6181
6185
|
onError(_context5.t8);
|
|
6182
|
-
case
|
|
6183
|
-
_context5.next =
|
|
6186
|
+
case 209:
|
|
6187
|
+
_context5.next = 212;
|
|
6184
6188
|
break;
|
|
6185
|
-
case
|
|
6189
|
+
case 211:
|
|
6186
6190
|
if (messagesToTransform.length) {
|
|
6187
6191
|
console.warn("Spirits: No transformer provided");
|
|
6188
6192
|
onStatus('transform', 'ignored');
|
|
6189
6193
|
} else {
|
|
6190
6194
|
onStatus('transform', 'ignored');
|
|
6191
6195
|
}
|
|
6192
|
-
case
|
|
6193
|
-
_context5.next =
|
|
6196
|
+
case 212:
|
|
6197
|
+
_context5.next = 216;
|
|
6194
6198
|
break;
|
|
6195
|
-
case
|
|
6199
|
+
case 214:
|
|
6196
6200
|
onStatus('generate', 'ignored');
|
|
6197
6201
|
onStatus('transform', 'ignored');
|
|
6198
|
-
case
|
|
6199
|
-
progress('Parsing message', 'info', 'SET_PROCESSING', null);
|
|
6202
|
+
case 216:
|
|
6200
6203
|
emptySystemMessages = messages.filter(isEmptySystemMessage);
|
|
6201
6204
|
if (emptySystemMessages.length) {
|
|
6202
6205
|
progress('Empty system messages detected post-run', 'error', 'EMPTY_SYSTEM_MESSAGE_FINAL', {
|
|
@@ -6208,6 +6211,7 @@ var Spirits = {
|
|
|
6208
6211
|
console.error('Spirits: Empty system messages detected', emptySystemMessages);
|
|
6209
6212
|
}
|
|
6210
6213
|
logToolPairingIssues(messages, 'final');
|
|
6214
|
+
progress("Spirits.customer start ended in ".concat(elapsedSeconds(rootStart), "s"), 'success', undefined, undefined);
|
|
6211
6215
|
return _context5.abrupt("return", {
|
|
6212
6216
|
conversation: {
|
|
6213
6217
|
before: conversationBefore,
|
|
@@ -6230,11 +6234,11 @@ var Spirits = {
|
|
|
6230
6234
|
followup: followup,
|
|
6231
6235
|
entityContextUpsert: entityContextUpsert
|
|
6232
6236
|
});
|
|
6233
|
-
case
|
|
6237
|
+
case 221:
|
|
6234
6238
|
case "end":
|
|
6235
6239
|
return _context5.stop();
|
|
6236
6240
|
}
|
|
6237
|
-
}, _callee2, null, [[
|
|
6241
|
+
}, _callee2, null, [[68, 77, 80, 83], [94, 153, 156, 159], [132, 141, 144, 147], [163, 172], [181, 204], [187, 196, 199, 202]]);
|
|
6238
6242
|
}));
|
|
6239
6243
|
function customer(_x) {
|
|
6240
6244
|
return _customer.apply(this, arguments);
|
package/dist/spirits.cjs
CHANGED
package/dist/testing-tools.cjs
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var dev = require("./dev-
|
|
5
|
+
var dev = require("./dev-767919ab.cjs");
|
|
6
6
|
require("./_rollupPluginBabelHelpers-9c73c95c.cjs");
|
|
7
|
-
require("./spirits-
|
|
7
|
+
require("./spirits-b3f15e97.cjs");
|
|
8
8
|
require('util');
|
|
9
9
|
require('stream');
|
|
10
10
|
require('path');
|
package/package.json
CHANGED
|
@@ -107,7 +107,7 @@ import {
|
|
|
107
107
|
* @property {(conversationPatch: Partial<import('@scout9/app').Conversation>) => void} [onUpdateConversation]
|
|
108
108
|
*
|
|
109
109
|
* // MUST match ConversationRunnerState.chunkMessage input shape
|
|
110
|
-
* @property {(args: { text: string; conversationId: string;
|
|
110
|
+
* @property {(args: { text: string; conversationId: string; source?: string; mode?: 'generation' | 'transformation' }) => void} [onChunkMessage]
|
|
111
111
|
*
|
|
112
112
|
* @property {(message: import('@scout9/admin').Message) => void} [onAddMessage]
|
|
113
113
|
* @property {(messagePatch: Partial<import('@scout9/admin').Message> & { id: string }) => void} [onUpdateMessage]
|
|
@@ -232,6 +232,9 @@ export const Spirits = {
|
|
|
232
232
|
onDeleteMessage = (_id) => { },
|
|
233
233
|
} = input;
|
|
234
234
|
let { conversation, messages, context, message } = input;
|
|
235
|
+
const elapsedSeconds = (start) => ((performance.now() - start) / 1000).toFixed(2);
|
|
236
|
+
const rootStart = performance.now();
|
|
237
|
+
progress(`Spirits.customer start`, 'info', undefined, undefined);
|
|
235
238
|
|
|
236
239
|
if (typeof message.content !== 'string') {
|
|
237
240
|
const err = new Error(
|
|
@@ -284,9 +287,9 @@ export const Spirits = {
|
|
|
284
287
|
for (const m of arr || []) {
|
|
285
288
|
if (m?.id) before.set(m.id, m.time);
|
|
286
289
|
}
|
|
287
|
-
|
|
290
|
+
|
|
288
291
|
enforceMonotonicInPlace(arr, minStepSeconds);
|
|
289
|
-
|
|
292
|
+
|
|
290
293
|
// emit patches for changed times
|
|
291
294
|
for (const m of arr || []) {
|
|
292
295
|
if (!m?.id) continue;
|
|
@@ -364,25 +367,15 @@ export const Spirits = {
|
|
|
364
367
|
const max = _config?.maxLockAttempts || 3;
|
|
365
368
|
const prev = typeof _conversation.lockAttempts === "number" ? _conversation.lockAttempts : 0;
|
|
366
369
|
const next = prev + 1;
|
|
367
|
-
|
|
370
|
+
|
|
368
371
|
/** @type {any} */
|
|
369
372
|
const patch = { lockAttempts: next };
|
|
370
|
-
|
|
373
|
+
|
|
371
374
|
if (next > max) {
|
|
372
375
|
patch.locked = true;
|
|
373
376
|
patch.lockedReason = `Max lock attempts exceeded (${next} > ${max})`;
|
|
374
377
|
}
|
|
375
|
-
|
|
376
|
-
// ✅ emits UPDATE_CONVERSATION via updateConversation()
|
|
377
378
|
const updated = updateConversation(_conversation, patch);
|
|
378
|
-
|
|
379
|
-
// optional: keep your existing progress payload shape if you want
|
|
380
|
-
progress("Incremented lock attempt", "info", "UPDATE_CONVERSATION", {
|
|
381
|
-
lockAttempts: updated.lockAttempts,
|
|
382
|
-
locked: updated.locked,
|
|
383
|
-
lockedReason: updated.lockedReason || "",
|
|
384
|
-
});
|
|
385
|
-
|
|
386
379
|
return updated;
|
|
387
380
|
};
|
|
388
381
|
|
|
@@ -450,24 +443,38 @@ export const Spirits = {
|
|
|
450
443
|
};
|
|
451
444
|
|
|
452
445
|
const onStatus = (statusType, completeOrError = true) => {
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
446
|
+
const level = completeOrError === true ? 'success'
|
|
447
|
+
: completeOrError === 'ignored' ? 'info'
|
|
448
|
+
: 'error';
|
|
449
|
+
progress(`${statusType}: ${completeOrError}`, level, 'STATUS', { [statusType]: completeOrError });
|
|
450
|
+
};
|
|
451
|
+
|
|
456
452
|
|
|
457
453
|
/**
|
|
458
|
-
*
|
|
459
|
-
* @param {
|
|
454
|
+
* Wraps a step, handling performance,
|
|
455
|
+
* @param {Promise<any>} prom - the operation
|
|
456
|
+
* @param {string} step - the step name
|
|
457
|
+
* @param {string} stepAction - overrides step name in logs
|
|
460
458
|
*/
|
|
461
|
-
const wrapStep = async (prom, step) => {
|
|
459
|
+
const wrapStep = async (prom, step, stepAction = step) => {
|
|
460
|
+
const stepStart = performance.now();
|
|
461
|
+
|
|
462
462
|
try {
|
|
463
|
+
progress(`${stepAction} start`, 'info', undefined, undefined);
|
|
463
464
|
const result = await prom;
|
|
464
|
-
|
|
465
|
+
progress(`${stepAction} succeeded in ${elapsedSeconds(stepStart)}s`, 'success', undefined, undefined);
|
|
465
466
|
return result;
|
|
466
467
|
} catch (error) {
|
|
467
|
-
|
|
468
|
+
const msg = error?.message || 'UNHANDLED ERROR';
|
|
469
|
+
progress(
|
|
470
|
+
`${stepAction} failed in ${elapsedSeconds(stepStart)}s`,
|
|
471
|
+
'error',
|
|
472
|
+
undefined,
|
|
473
|
+
{ error: msg }
|
|
474
|
+
);
|
|
468
475
|
throw SpiritError.fromError(error, step);
|
|
469
476
|
}
|
|
470
|
-
}
|
|
477
|
+
};
|
|
471
478
|
|
|
472
479
|
// 1. Check inputs
|
|
473
480
|
if (!conversation.$agent) {
|
|
@@ -502,8 +509,7 @@ export const Spirits = {
|
|
|
502
509
|
}
|
|
503
510
|
|
|
504
511
|
// 2. Parse the message
|
|
505
|
-
|
|
506
|
-
const parsePayload = await wrapStep(parser(message.content, 'en'), 'parse');
|
|
512
|
+
const parsePayload = await wrapStep(parser(message.content, 'en'), 'parse', 'parsing message');
|
|
507
513
|
|
|
508
514
|
if (parsePayload.intent) {
|
|
509
515
|
message.intent = parsePayload.intent;
|
|
@@ -610,8 +616,8 @@ export const Spirits = {
|
|
|
610
616
|
}
|
|
611
617
|
|
|
612
618
|
// 3. Run the contextualizer
|
|
613
|
-
progress('Running contextualizer', 'info', 'SET_PROCESSING', 'system');
|
|
614
|
-
const newContextMessages = await wrapStep(contextualizer({ conversation, messages }), 'contextualize');
|
|
619
|
+
// progress('Running contextualizer', 'info', 'SET_PROCESSING', 'system');
|
|
620
|
+
const newContextMessages = await wrapStep(contextualizer({ conversation, messages }), 'contextualize', 'contextualizing');
|
|
615
621
|
for (const contextMessage of newContextMessages) {
|
|
616
622
|
if (isEmptySystemMessage(contextMessage)) {
|
|
617
623
|
progress('Empty contextualizer system message blocked', 'warn', 'EMPTY_SYSTEM_MESSAGE', {
|
|
@@ -627,8 +633,7 @@ export const Spirits = {
|
|
|
627
633
|
}
|
|
628
634
|
|
|
629
635
|
// 4. Run the workflow
|
|
630
|
-
progress('Running workflow', 'info', 'SET_PROCESSING', 'system');
|
|
631
|
-
|
|
636
|
+
// progress('Running workflow', 'info', 'SET_PROCESSING', 'system');
|
|
632
637
|
const slots = await wrapStep(workflow({
|
|
633
638
|
messages,
|
|
634
639
|
conversation,
|
|
@@ -700,7 +705,7 @@ export const Spirits = {
|
|
|
700
705
|
}
|
|
701
706
|
|
|
702
707
|
if (!adjusted.content && !adjusted.tool_calls) {
|
|
703
|
-
progress(`Slot ${index} input error`, '
|
|
708
|
+
progress(`Slot ${index} input error`, 'error', 'SLOT_INPUT_ERROR', {
|
|
704
709
|
error: `Expected slots[${index}].message.content to exist (unless tool_calls provided)`,
|
|
705
710
|
});
|
|
706
711
|
return acc;
|
|
@@ -942,7 +947,7 @@ export const Spirits = {
|
|
|
942
947
|
// If conversation is newly locked, don't generate, unless instructions were provided and no custom messages were provided
|
|
943
948
|
if ((!conversation.locked || !hasNoInstructions) && !!hasNoCustomMessage) {
|
|
944
949
|
try {
|
|
945
|
-
progress('Generating message', 'info', 'SET_PROCESSING', 'system');
|
|
950
|
+
// progress('Generating message', 'info', 'SET_PROCESSING', 'system');
|
|
946
951
|
|
|
947
952
|
/** @type {import('@scout9/admin').GenerateRequestOneOf1} */
|
|
948
953
|
const generatorInput = {
|
|
@@ -959,8 +964,8 @@ export const Spirits = {
|
|
|
959
964
|
const generatorPayload = await wrapStep(generator(generatorInput), 'generate');
|
|
960
965
|
if (!generatorPayload.send) {
|
|
961
966
|
progress(
|
|
962
|
-
'Generated response',
|
|
963
|
-
'
|
|
967
|
+
'Generated response send rejected',
|
|
968
|
+
'error',
|
|
964
969
|
undefined,
|
|
965
970
|
{ error: generatorPayload.errors?.join('\n\n') || 'Unknown Reason' }
|
|
966
971
|
);
|
|
@@ -973,7 +978,6 @@ export const Spirits = {
|
|
|
973
978
|
'API: ' + generatorPayload.errors?.join('\n\n') || generatorPayload.forwardNote || 'Unknown Reason'
|
|
974
979
|
);
|
|
975
980
|
} else {
|
|
976
|
-
progress('Generated response', 'success', undefined, undefined);
|
|
977
981
|
// Check if already had message
|
|
978
982
|
const agentMessages = messages.filter(m => m.role === 'agent');
|
|
979
983
|
const lastAgentMessage = agentMessages[agentMessages.length - 1];
|
|
@@ -1093,8 +1097,6 @@ export const Spirits = {
|
|
|
1093
1097
|
context
|
|
1094
1098
|
}), 'transform');
|
|
1095
1099
|
|
|
1096
|
-
progress('Generated response', 'success', undefined, undefined);
|
|
1097
|
-
|
|
1098
1100
|
// @TODO check for duplicates, or have already sent the message
|
|
1099
1101
|
const transformedMessages =
|
|
1100
1102
|
transformResponse.messages?.length
|
|
@@ -1122,7 +1124,7 @@ export const Spirits = {
|
|
|
1122
1124
|
}
|
|
1123
1125
|
|
|
1124
1126
|
if (adjusted.role === 'agent' && adjusted.content && !adjusted.ignoreTransform && !adjusted.tool_calls && !adjusted.contentTransformed) {
|
|
1125
|
-
progress('missing contentTransformed on a generated message', '
|
|
1127
|
+
progress('missing contentTransformed on a generated message', 'warn', undefined, adjusted);
|
|
1126
1128
|
adjusted.contentTransformed = adjusted.content;
|
|
1127
1129
|
}
|
|
1128
1130
|
|
|
@@ -1147,8 +1149,6 @@ export const Spirits = {
|
|
|
1147
1149
|
onStatus('transform', 'ignored');
|
|
1148
1150
|
}
|
|
1149
1151
|
|
|
1150
|
-
progress('Parsing message', 'info', 'SET_PROCESSING', null);
|
|
1151
|
-
|
|
1152
1152
|
const emptySystemMessages = messages.filter(isEmptySystemMessage);
|
|
1153
1153
|
if (emptySystemMessages.length) {
|
|
1154
1154
|
progress('Empty system messages detected post-run', 'error', 'EMPTY_SYSTEM_MESSAGE_FINAL', {
|
|
@@ -1159,6 +1159,8 @@ export const Spirits = {
|
|
|
1159
1159
|
}
|
|
1160
1160
|
|
|
1161
1161
|
logToolPairingIssues(messages, 'final');
|
|
1162
|
+
|
|
1163
|
+
progress(`Spirits.customer start ended in ${elapsedSeconds(rootStart)}s`, 'success', undefined, undefined);
|
|
1162
1164
|
|
|
1163
1165
|
return {
|
|
1164
1166
|
conversation: {
|
package/types/index.d.ts
CHANGED
package/types/index.d.ts.map
CHANGED
|
@@ -171,5 +171,5 @@
|
|
|
171
171
|
null,
|
|
172
172
|
null
|
|
173
173
|
],
|
|
174
|
-
"mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC8BlBC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCzBC,8BAA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC3F9BC,4BAA4BA;;;;;;;;;;;;;;;;;;;;;;cA0C5BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;cAIxBC,0BAA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAI1BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEzBC,2BAA2BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAE3BC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEZC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cClEdC,aAAaA;;;;;;;;;;;;;cAWbC,uBAAuBA;;;;;;;;;;;;;cAYvBnD,iCAAiCA;;;;;;;;;;;;;;;;;;;;cAWjCC,uBAAuBA;;;;;;;;;;;;;;;;;;;cAavBC,kCAAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuBlCkD,iBAAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;cASjBC,kBAAkBA;;;;;;;;;;;;;;;;cAUlBC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAUdC,2BAA2BA;;;;;;;;;;cAU3BC,4BAA4BA;;;;;;;;;;cAE5BC,yBAAyBA;;;;;;;;;;;;;cAMzBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoBnBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKnBC,8BAA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqC9BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAQzBC,0BAA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqB1BC,sBAAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKtBC,sBAAsBA"
|
|
174
|
+
"mappings": "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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC8BlBC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCzBC,8BAA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC3F9BC,4BAA4BA;;;;;;;;;;;;;;;;;;;;;;cA0C5BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;cAIxBC,0BAA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAI1BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEzBC,2BAA2BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAE3BC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEZC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cClEdC,aAAaA;;;;;;;;;;;;;cAWbC,uBAAuBA;;;;;;;;;;;;;cAYvBnD,iCAAiCA;;;;;;;;;;;;;;;;;;;;cAWjCC,uBAAuBA;;;;;;;;;;;;;;;;;;;cAavBC,kCAAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuBlCkD,iBAAiBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;cASjBC,kBAAkBA;;;;;;;;;;;;;;;;cAUlBC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAUdC,2BAA2BA;;;;;;;;;;cAU3BC,4BAA4BA;;;;;;;;;;cAE5BC,yBAAyBA;;;;;;;;;;;;;cAMzBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoBnBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKnBC,8BAA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqC9BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAQzBC,0BAA0BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAqB1BC,sBAAsBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAKtBC,sBAAsBA"
|
|
175
175
|
}
|