@scout9/app 1.0.0-alpha.0.8.0 → 1.0.0-alpha.0.8.2
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-4051ca91.cjs → dev-bc9e04ca.cjs} +3 -3
- package/dist/{index-be7da4e6.cjs → index-0d4223e3.cjs} +6 -6
- package/dist/index.cjs +3 -3
- package/dist/{multipart-parser-c7246b66.cjs → multipart-parser-0717500b.cjs} +3 -3
- package/dist/{spirits-02db68e3.cjs → spirits-5dc52d64.cjs} +193 -148
- package/dist/spirits.cjs +1 -1
- package/dist/testing-tools.cjs +2 -2
- package/package.json +1 -1
- package/src/testing-tools/spirits.js +46 -15
- package/types/index.d.ts +11 -9
- package/types/index.d.ts.map +1 -1
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var spirits = require("./spirits-
|
|
3
|
+
var spirits = require("./spirits-5dc52d64.cjs");
|
|
4
4
|
var require$$0$4 = require('util');
|
|
5
5
|
var require$$0$3 = require('stream');
|
|
6
6
|
var require$$1 = require('path');
|
|
@@ -30272,7 +30272,7 @@ common.createRequestFunction = createRequestFunction;
|
|
|
30272
30272
|
var configuration = {};
|
|
30273
30273
|
|
|
30274
30274
|
var name$1 = "@scout9/admin";
|
|
30275
|
-
var version$2 = "1.0.0-alpha.0.0.
|
|
30275
|
+
var version$2 = "1.0.0-alpha.0.0.65";
|
|
30276
30276
|
var description$1 = "";
|
|
30277
30277
|
var main$2 = "./build/index.js";
|
|
30278
30278
|
var types$1 = "./build/index.d.ts";
|
|
@@ -35337,7 +35337,7 @@ function _loadUserPackageJson() {
|
|
|
35337
35337
|
targetPkgUrl = isTest ? packageTestJsonUrl : packageJsonUrl;
|
|
35338
35338
|
_context2.t0 = JSON;
|
|
35339
35339
|
_context2.next = 10;
|
|
35340
|
-
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-
|
|
35340
|
+
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-bc9e04ca.js', document.baseURI).href))), 'utf-8');
|
|
35341
35341
|
case 10:
|
|
35342
35342
|
_context2.t1 = _context2.sent;
|
|
35343
35343
|
pkg = _context2.t0.parse.call(_context2.t0, _context2.t1);
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var spirits = require("./spirits-
|
|
4
|
-
var dev = require("./dev-
|
|
3
|
+
var spirits = require("./spirits-5dc52d64.cjs");
|
|
4
|
+
var dev = require("./dev-bc9e04ca.cjs");
|
|
5
5
|
var macros = require("./macros-f62cceac.cjs");
|
|
6
6
|
var require$$0 = require('fs');
|
|
7
7
|
var require$$2$1 = require('events');
|
|
@@ -29483,7 +29483,7 @@ class Body {
|
|
|
29483
29483
|
}
|
|
29484
29484
|
const {
|
|
29485
29485
|
toFormData
|
|
29486
|
-
} = await Promise.resolve().then(function () { return require("./multipart-parser-
|
|
29486
|
+
} = await Promise.resolve().then(function () { return require("./multipart-parser-0717500b.cjs"); });
|
|
29487
29487
|
return toFormData(this.body, ct);
|
|
29488
29488
|
}
|
|
29489
29489
|
|
|
@@ -41884,7 +41884,7 @@ function _loadUserPackageJson() {
|
|
|
41884
41884
|
targetPkgUrl = isTest ? packageTestJsonUrl : packageJsonUrl;
|
|
41885
41885
|
_context.t0 = JSON;
|
|
41886
41886
|
_context.next = 10;
|
|
41887
|
-
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-
|
|
41887
|
+
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-0d4223e3.js', document.baseURI).href))), 'utf-8');
|
|
41888
41888
|
case 10:
|
|
41889
41889
|
_context.t1 = _context.sent;
|
|
41890
41890
|
pkg = _context.t0.parse.call(_context.t0, _context.t1);
|
|
@@ -43176,7 +43176,7 @@ var ProjectFiles = /*#__PURE__*/function () {
|
|
|
43176
43176
|
return ProjectFiles;
|
|
43177
43177
|
}();
|
|
43178
43178
|
|
|
43179
|
-
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-
|
|
43179
|
+
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-0d4223e3.js', document.baseURI).href)));
|
|
43180
43180
|
var __dirname$1 = path__default["default"].dirname(__filename$1);
|
|
43181
43181
|
function zipDirectory(source, out) {
|
|
43182
43182
|
var archive = archiver$1('tar', {
|
|
@@ -43391,7 +43391,7 @@ function _buildApp() {
|
|
|
43391
43391
|
case 11:
|
|
43392
43392
|
_context4.t0 = JSON;
|
|
43393
43393
|
_context4.next = 14;
|
|
43394
|
-
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-
|
|
43394
|
+
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-0d4223e3.js', document.baseURI).href))), 'utf-8');
|
|
43395
43395
|
case 14:
|
|
43396
43396
|
_context4.t1 = _context4.sent;
|
|
43397
43397
|
packageTemplate = _context4.t0.parse.call(_context4.t0, _context4.t1);
|
package/dist/index.cjs
CHANGED
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var index = require("./index-
|
|
6
|
-
var dev = require("./dev-
|
|
7
|
-
require("./spirits-
|
|
5
|
+
var index = require("./index-0d4223e3.cjs");
|
|
6
|
+
var dev = require("./dev-bc9e04ca.cjs");
|
|
7
|
+
require("./spirits-5dc52d64.cjs");
|
|
8
8
|
require("./macros-f62cceac.cjs");
|
|
9
9
|
require('fs');
|
|
10
10
|
require('events');
|
|
@@ -2,9 +2,9 @@
|
|
|
2
2
|
|
|
3
3
|
require('node:fs');
|
|
4
4
|
require('node:path');
|
|
5
|
-
var index = require("./index-
|
|
6
|
-
require("./spirits-
|
|
7
|
-
require("./dev-
|
|
5
|
+
var index = require("./index-0d4223e3.cjs");
|
|
6
|
+
require("./spirits-5dc52d64.cjs");
|
|
7
|
+
require("./dev-bc9e04ca.cjs");
|
|
8
8
|
require('util');
|
|
9
9
|
require('stream');
|
|
10
10
|
require('path');
|
|
@@ -634,8 +634,8 @@ var _excluded = ["keywords"];
|
|
|
634
634
|
* @typedef {Object} ConversationData
|
|
635
635
|
* @property {import('@scout9/app').Scout9ProjectBuildConfig} config - used to define generation and extract persona metadata
|
|
636
636
|
* @property {import('@scout9/app').Conversation} conversation
|
|
637
|
-
* @property {Array<import('@scout9/
|
|
638
|
-
* @property {import('@scout9/
|
|
637
|
+
* @property {Array<import('@scout9/admin').Message>} messages
|
|
638
|
+
* @property {import('@scout9/admin').Message} message - the message sent by the customer (should exist in messages)
|
|
639
639
|
* @property {import('@scout9/app').Customer} customer
|
|
640
640
|
* @property {import('@scout9/app').ConversationProgress} progress - progress checklist for manual/auto ingress workflows
|
|
641
641
|
* @property {any} context - event context
|
|
@@ -643,16 +643,16 @@ var _excluded = ["keywords"];
|
|
|
643
643
|
|
|
644
644
|
/**
|
|
645
645
|
* @typedef {Object} ParseOutput
|
|
646
|
-
* @property {Array<import('@scout9/
|
|
646
|
+
* @property {Array<import('@scout9/admin').Message>} messages
|
|
647
647
|
* @property {import('@scout9/app').Conversation} conversation
|
|
648
|
-
* @property {import('@scout9/
|
|
648
|
+
* @property {import('@scout9/admin').Message} message
|
|
649
649
|
* @property {any} context
|
|
650
650
|
*/
|
|
651
651
|
|
|
652
652
|
/**
|
|
653
653
|
* @typedef {Object} WorkflowOutput
|
|
654
654
|
* @property {Array<import('@scout9/app').WorkflowResponseSlot>} slots
|
|
655
|
-
* @property {Array<import('@scout9/
|
|
655
|
+
* @property {Array<import('@scout9/admin').Message>} messages
|
|
656
656
|
* @property {import('@scout9/app').Conversation} conversation
|
|
657
657
|
* @property {any} context
|
|
658
658
|
*/
|
|
@@ -660,7 +660,7 @@ var _excluded = ["keywords"];
|
|
|
660
660
|
/**
|
|
661
661
|
* @typedef {Object} GenerateOutput
|
|
662
662
|
* @property {import('@scout9/admin').GenerateResponse | undefined} generate
|
|
663
|
-
* @property {Array<import('@scout9/
|
|
663
|
+
* @property {Array<import('@scout9/admin').Message>} messages
|
|
664
664
|
* @property {import('@scout9/app').Conversation} conversation
|
|
665
665
|
* @property {any} context
|
|
666
666
|
*/
|
|
@@ -672,6 +672,12 @@ var _excluded = ["keywords"];
|
|
|
672
672
|
* @returns {Promise<import('@scout9/admin').ParseResponse>}
|
|
673
673
|
*/
|
|
674
674
|
|
|
675
|
+
/**
|
|
676
|
+
* @callback ContextualizerFun
|
|
677
|
+
* @param {Pick<import('@scout9/app').WorkflowEvent, 'messages' | 'conversation'>} args - message to send
|
|
678
|
+
* @returns {Promise<import('@scout9/app').WorkflowEvent['messages']>}
|
|
679
|
+
*/
|
|
680
|
+
|
|
675
681
|
/**
|
|
676
682
|
* @callback WorkflowFun
|
|
677
683
|
* @param {import('@scout9/app').WorkflowEvent} event - conversation data
|
|
@@ -692,7 +698,7 @@ var _excluded = ["keywords"];
|
|
|
692
698
|
|
|
693
699
|
/**
|
|
694
700
|
* @callback IdGeneratorFun
|
|
695
|
-
* @param {import('@scout9/
|
|
701
|
+
* @param {import('@scout9/admin').Message['role']} prefix
|
|
696
702
|
* @returns {string}
|
|
697
703
|
*/
|
|
698
704
|
|
|
@@ -708,6 +714,7 @@ var _excluded = ["keywords"];
|
|
|
708
714
|
/**
|
|
709
715
|
* @typedef {Object} CustomerSpiritCallbacks
|
|
710
716
|
* @property {ParseFun} parser
|
|
717
|
+
* @property {ContextualizerFun} contextualizer
|
|
711
718
|
* @property {WorkflowFun} workflow
|
|
712
719
|
* @property {GenerateFun} generator
|
|
713
720
|
* @property {TransformerFun} transformer
|
|
@@ -721,9 +728,9 @@ var _excluded = ["keywords"];
|
|
|
721
728
|
* forwardNote?: string;
|
|
722
729
|
* forward?: import('@scout9/app').WorkflowResponseSlot['forward'];
|
|
723
730
|
* })} conversation
|
|
724
|
-
* @property {Change<Array<import('@scout9/
|
|
731
|
+
* @property {Change<Array<import('@scout9/admin').Message>>} messages
|
|
725
732
|
* @property {Change<any>} context
|
|
726
|
-
* @property {Change<import('@scout9/
|
|
733
|
+
* @property {Change<import('@scout9/admin').Message>} message
|
|
727
734
|
* @property {Array<import('@scout9/app').Followup>} followup
|
|
728
735
|
* @property {Array<import('@scout9/app').EntityContextUpsert>} entityContextUpsert
|
|
729
736
|
*/
|
|
@@ -741,6 +748,7 @@ var Spirits = {
|
|
|
741
748
|
customer,
|
|
742
749
|
config,
|
|
743
750
|
parser,
|
|
751
|
+
contextualizer,
|
|
744
752
|
workflow,
|
|
745
753
|
generator,
|
|
746
754
|
transformer,
|
|
@@ -775,6 +783,10 @@ var Spirits = {
|
|
|
775
783
|
newKeyCount,
|
|
776
784
|
noNewContext,
|
|
777
785
|
_messages2,
|
|
786
|
+
newContextMessages,
|
|
787
|
+
_iterator,
|
|
788
|
+
_step,
|
|
789
|
+
contextMessage,
|
|
778
790
|
slots,
|
|
779
791
|
hasNoInstructions,
|
|
780
792
|
hasNoCustomMessage,
|
|
@@ -784,9 +796,9 @@ var Spirits = {
|
|
|
784
796
|
_forward,
|
|
785
797
|
_forwardNote,
|
|
786
798
|
_tasks,
|
|
787
|
-
|
|
788
|
-
|
|
789
|
-
|
|
799
|
+
_iterator2,
|
|
800
|
+
_step2,
|
|
801
|
+
_step2$value,
|
|
790
802
|
forward,
|
|
791
803
|
forwardNote,
|
|
792
804
|
instructions,
|
|
@@ -808,11 +820,11 @@ var Spirits = {
|
|
|
808
820
|
_slot,
|
|
809
821
|
slotId,
|
|
810
822
|
_tasks2,
|
|
811
|
-
_iterator4,
|
|
812
|
-
_step4,
|
|
813
|
-
instruction,
|
|
814
823
|
_iterator5,
|
|
815
824
|
_step5,
|
|
825
|
+
instruction,
|
|
826
|
+
_iterator6,
|
|
827
|
+
_step6,
|
|
816
828
|
_loop,
|
|
817
829
|
manualMessageObj,
|
|
818
830
|
now,
|
|
@@ -824,11 +836,11 @@ var Spirits = {
|
|
|
824
836
|
agentMessages,
|
|
825
837
|
lastAgentMessage,
|
|
826
838
|
addedMessages,
|
|
827
|
-
_iterator2,
|
|
828
|
-
_step2,
|
|
829
|
-
newMessage,
|
|
830
839
|
_iterator3,
|
|
831
840
|
_step3,
|
|
841
|
+
newMessage,
|
|
842
|
+
_iterator4,
|
|
843
|
+
_step4,
|
|
832
844
|
transformResponse,
|
|
833
845
|
_agentMessages,
|
|
834
846
|
_lastAgentMessage,
|
|
@@ -837,7 +849,7 @@ var Spirits = {
|
|
|
837
849
|
while (1) switch (_context2.prev = _context2.next) {
|
|
838
850
|
case 0:
|
|
839
851
|
onError = _args2.length > 1 && _args2[1] !== undefined ? _args2[1] : function () {};
|
|
840
|
-
customer = input.customer, config = input.config, parser = input.parser, 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, messageBefore = input.message, contextBefore = input.context, messagesBefore = input.messages, conversationBefore = input.conversation;
|
|
852
|
+
customer = input.customer, config = input.config, 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, messageBefore = input.message, contextBefore = input.context, messagesBefore = input.messages, conversationBefore = input.conversation;
|
|
841
853
|
conversation = input.conversation, messages = input.messages, context = input.context, message = input.message; // Storing post process events here
|
|
842
854
|
followup = [];
|
|
843
855
|
entityContextUpsert = []; // 0. Setup Helpers
|
|
@@ -1064,9 +1076,29 @@ var Spirits = {
|
|
|
1064
1076
|
})));
|
|
1065
1077
|
}
|
|
1066
1078
|
|
|
1067
|
-
// 3. Run the
|
|
1079
|
+
// 3. Run the contextualizer
|
|
1080
|
+
_context2.next = 46;
|
|
1081
|
+
return contextualizer({
|
|
1082
|
+
conversation: conversation,
|
|
1083
|
+
messages: messages
|
|
1084
|
+
});
|
|
1085
|
+
case 46:
|
|
1086
|
+
newContextMessages = _context2.sent;
|
|
1087
|
+
_iterator = _createForOfIteratorHelper(newContextMessages);
|
|
1088
|
+
try {
|
|
1089
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
1090
|
+
contextMessage = _step.value;
|
|
1091
|
+
messages.push(contextMessage);
|
|
1092
|
+
}
|
|
1093
|
+
|
|
1094
|
+
// 4. Run the workflow
|
|
1095
|
+
} catch (err) {
|
|
1096
|
+
_iterator.e(err);
|
|
1097
|
+
} finally {
|
|
1098
|
+
_iterator.f();
|
|
1099
|
+
}
|
|
1068
1100
|
progress('Running workflow', 'info', 'SET_PROCESSING', 'system');
|
|
1069
|
-
_context2.next =
|
|
1101
|
+
_context2.next = 52;
|
|
1070
1102
|
return workflow({
|
|
1071
1103
|
messages: messages,
|
|
1072
1104
|
conversation: conversation,
|
|
@@ -1095,7 +1127,7 @@ var Spirits = {
|
|
|
1095
1127
|
return accumulator;
|
|
1096
1128
|
}, []);
|
|
1097
1129
|
});
|
|
1098
|
-
case
|
|
1130
|
+
case 52:
|
|
1099
1131
|
slots = _context2.sent;
|
|
1100
1132
|
hasNoInstructions = slots.every(function (s) {
|
|
1101
1133
|
return !s.instructions || Array.isArray(s.instructions) && s.instructions.length === 0;
|
|
@@ -1121,21 +1153,21 @@ var Spirits = {
|
|
|
1121
1153
|
}
|
|
1122
1154
|
resettedIntent = false;
|
|
1123
1155
|
/** @type {Array<string> | undefined} */
|
|
1124
|
-
|
|
1125
|
-
_context2.prev =
|
|
1126
|
-
|
|
1127
|
-
case
|
|
1128
|
-
if ((
|
|
1129
|
-
_context2.next =
|
|
1156
|
+
_iterator2 = _createForOfIteratorHelper(slots);
|
|
1157
|
+
_context2.prev = 60;
|
|
1158
|
+
_iterator2.s();
|
|
1159
|
+
case 62:
|
|
1160
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
1161
|
+
_context2.next = 133;
|
|
1130
1162
|
break;
|
|
1131
1163
|
}
|
|
1132
|
-
|
|
1164
|
+
_step2$value = _step2.value, forward = _step2$value.forward, forwardNote = _step2$value.forwardNote, instructions = _step2$value.instructions, removeInstructions = _step2$value.removeInstructions, manualMessage = _step2$value.message, scheduled = _step2$value.scheduled, resetIntent = _step2$value.resetIntent, secondsDelay = _step2$value.secondsDelay, contextUpsert = _step2$value.contextUpsert, anticipate = _step2$value.anticipate, slotFollowup = _step2$value.followup, slotEntityContextUpsert = _step2$value.entityContextUpsert, tasks = _step2$value.tasks;
|
|
1133
1165
|
if (!anticipate) {
|
|
1134
|
-
_context2.next =
|
|
1166
|
+
_context2.next = 77;
|
|
1135
1167
|
break;
|
|
1136
1168
|
}
|
|
1137
1169
|
if (!Array.isArray(anticipate)) {
|
|
1138
|
-
_context2.next =
|
|
1170
|
+
_context2.next = 72;
|
|
1139
1171
|
break;
|
|
1140
1172
|
}
|
|
1141
1173
|
// 'literal' anticipation
|
|
@@ -1155,11 +1187,11 @@ var Spirits = {
|
|
|
1155
1187
|
slots: _slots,
|
|
1156
1188
|
map: map
|
|
1157
1189
|
});
|
|
1158
|
-
_context2.next =
|
|
1190
|
+
_context2.next = 77;
|
|
1159
1191
|
break;
|
|
1160
|
-
case
|
|
1192
|
+
case 72:
|
|
1161
1193
|
if (!('yes' in anticipate && 'no' in anticipate && 'did' in anticipate)) {
|
|
1162
|
-
_context2.next =
|
|
1194
|
+
_context2.next = 76;
|
|
1163
1195
|
break;
|
|
1164
1196
|
}
|
|
1165
1197
|
// "did" anticipation
|
|
@@ -1171,11 +1203,11 @@ var Spirits = {
|
|
|
1171
1203
|
},
|
|
1172
1204
|
did: anticipate.did
|
|
1173
1205
|
});
|
|
1174
|
-
_context2.next =
|
|
1206
|
+
_context2.next = 77;
|
|
1175
1207
|
break;
|
|
1176
|
-
case
|
|
1208
|
+
case 76:
|
|
1177
1209
|
throw new Error("Invalid anticipate payload \"".concat(JSON.stringify(anticipate), "\""));
|
|
1178
|
-
case
|
|
1210
|
+
case 77:
|
|
1179
1211
|
// tasks from auto/manual ingress to execute
|
|
1180
1212
|
if (!!tasks && Array.isArray(tasks) && !!tasks.length) {
|
|
1181
1213
|
if (!_tasks) _tasks = [];
|
|
@@ -1231,25 +1263,25 @@ var Spirits = {
|
|
|
1231
1263
|
|
|
1232
1264
|
// Insert instructions context
|
|
1233
1265
|
if (!instructions) {
|
|
1234
|
-
_context2.next =
|
|
1266
|
+
_context2.next = 96;
|
|
1235
1267
|
break;
|
|
1236
1268
|
}
|
|
1237
1269
|
if (!(typeof instructions === 'string')) {
|
|
1238
|
-
_context2.next =
|
|
1270
|
+
_context2.next = 86;
|
|
1239
1271
|
break;
|
|
1240
1272
|
}
|
|
1241
1273
|
addInstruction(instructions, previousLockAttempt);
|
|
1242
|
-
_context2.next =
|
|
1274
|
+
_context2.next = 96;
|
|
1243
1275
|
break;
|
|
1244
|
-
case
|
|
1276
|
+
case 86:
|
|
1245
1277
|
if (!Array.isArray(instructions)) {
|
|
1246
|
-
_context2.next =
|
|
1278
|
+
_context2.next = 91;
|
|
1247
1279
|
break;
|
|
1248
1280
|
}
|
|
1249
|
-
|
|
1281
|
+
_iterator5 = _createForOfIteratorHelper(instructions);
|
|
1250
1282
|
try {
|
|
1251
|
-
for (
|
|
1252
|
-
instruction =
|
|
1283
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
1284
|
+
instruction = _step5.value;
|
|
1253
1285
|
if (typeof instruction === 'string') {
|
|
1254
1286
|
addInstruction(instruction, previousLockAttempt);
|
|
1255
1287
|
} else {
|
|
@@ -1257,35 +1289,35 @@ var Spirits = {
|
|
|
1257
1289
|
}
|
|
1258
1290
|
}
|
|
1259
1291
|
} catch (err) {
|
|
1260
|
-
|
|
1292
|
+
_iterator5.e(err);
|
|
1261
1293
|
} finally {
|
|
1262
|
-
|
|
1294
|
+
_iterator5.f();
|
|
1263
1295
|
}
|
|
1264
|
-
_context2.next =
|
|
1296
|
+
_context2.next = 96;
|
|
1265
1297
|
break;
|
|
1266
|
-
case
|
|
1298
|
+
case 91:
|
|
1267
1299
|
if (!(_typeof(instructions) === 'object' && 'content' in instructions)) {
|
|
1268
|
-
_context2.next =
|
|
1300
|
+
_context2.next = 95;
|
|
1269
1301
|
break;
|
|
1270
1302
|
}
|
|
1271
1303
|
addInstruction(instructions.content, previousLockAttempt, instructions.id);
|
|
1272
|
-
_context2.next =
|
|
1304
|
+
_context2.next = 96;
|
|
1273
1305
|
break;
|
|
1274
|
-
case
|
|
1306
|
+
case 95:
|
|
1275
1307
|
throw new Error("SpiritsError: instructions must be a string or array or {content: \"<instruction>\"}, got: ".concat(JSON.stringify(instructions)));
|
|
1276
|
-
case
|
|
1308
|
+
case 96:
|
|
1277
1309
|
if (!removeInstructions) {
|
|
1278
|
-
_context2.next =
|
|
1310
|
+
_context2.next = 113;
|
|
1279
1311
|
break;
|
|
1280
1312
|
}
|
|
1281
|
-
|
|
1282
|
-
_context2.prev =
|
|
1313
|
+
_iterator6 = _createForOfIteratorHelper(removeInstructions);
|
|
1314
|
+
_context2.prev = 98;
|
|
1283
1315
|
_loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() {
|
|
1284
1316
|
var instructionId, index;
|
|
1285
1317
|
return _regeneratorRuntime().wrap(function _loop$(_context) {
|
|
1286
1318
|
while (1) switch (_context.prev = _context.next) {
|
|
1287
1319
|
case 0:
|
|
1288
|
-
instructionId =
|
|
1320
|
+
instructionId = _step6.value;
|
|
1289
1321
|
index = messages.findIndex(function (m) {
|
|
1290
1322
|
return m.id === instructionId;
|
|
1291
1323
|
});
|
|
@@ -1303,33 +1335,33 @@ var Spirits = {
|
|
|
1303
1335
|
}
|
|
1304
1336
|
}, _loop);
|
|
1305
1337
|
});
|
|
1306
|
-
|
|
1307
|
-
case
|
|
1308
|
-
if ((
|
|
1309
|
-
_context2.next =
|
|
1338
|
+
_iterator6.s();
|
|
1339
|
+
case 101:
|
|
1340
|
+
if ((_step6 = _iterator6.n()).done) {
|
|
1341
|
+
_context2.next = 105;
|
|
1310
1342
|
break;
|
|
1311
1343
|
}
|
|
1312
|
-
return _context2.delegateYield(_loop(), "t0",
|
|
1313
|
-
case
|
|
1314
|
-
_context2.next =
|
|
1315
|
-
break;
|
|
1316
|
-
case 100:
|
|
1317
|
-
_context2.next = 105;
|
|
1344
|
+
return _context2.delegateYield(_loop(), "t0", 103);
|
|
1345
|
+
case 103:
|
|
1346
|
+
_context2.next = 101;
|
|
1318
1347
|
break;
|
|
1319
|
-
case 102:
|
|
1320
|
-
_context2.prev = 102;
|
|
1321
|
-
_context2.t1 = _context2["catch"](93);
|
|
1322
|
-
_iterator5.e(_context2.t1);
|
|
1323
1348
|
case 105:
|
|
1324
|
-
_context2.
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1349
|
+
_context2.next = 110;
|
|
1350
|
+
break;
|
|
1351
|
+
case 107:
|
|
1352
|
+
_context2.prev = 107;
|
|
1353
|
+
_context2.t1 = _context2["catch"](98);
|
|
1354
|
+
_iterator6.e(_context2.t1);
|
|
1355
|
+
case 110:
|
|
1356
|
+
_context2.prev = 110;
|
|
1357
|
+
_iterator6.f();
|
|
1358
|
+
return _context2.finish(110);
|
|
1359
|
+
case 113:
|
|
1328
1360
|
if (!manualMessage) {
|
|
1329
|
-
_context2.next =
|
|
1361
|
+
_context2.next = 129;
|
|
1330
1362
|
break;
|
|
1331
1363
|
}
|
|
1332
|
-
/** @type {import('@scout9/
|
|
1364
|
+
/** @type {import('@scout9/admin').Message} */
|
|
1333
1365
|
manualMessageObj = {
|
|
1334
1366
|
id: idGenerator('persona'),
|
|
1335
1367
|
role: 'agent',
|
|
@@ -1338,25 +1370,25 @@ var Spirits = {
|
|
|
1338
1370
|
time: new Date().toISOString()
|
|
1339
1371
|
};
|
|
1340
1372
|
if (!(_typeof(manualMessage) === 'object')) {
|
|
1341
|
-
_context2.next =
|
|
1373
|
+
_context2.next = 121;
|
|
1342
1374
|
break;
|
|
1343
1375
|
}
|
|
1344
1376
|
Object.assign(manualMessageObj, manualMessage);
|
|
1345
1377
|
manualMessageObj.role = 'agent';
|
|
1346
1378
|
manualMessageObj.time = new Date().toISOString();
|
|
1347
|
-
_context2.next =
|
|
1379
|
+
_context2.next = 126;
|
|
1348
1380
|
break;
|
|
1349
|
-
case
|
|
1381
|
+
case 121:
|
|
1350
1382
|
if (!(typeof manualMessage === 'string')) {
|
|
1351
|
-
_context2.next =
|
|
1383
|
+
_context2.next = 125;
|
|
1352
1384
|
break;
|
|
1353
1385
|
}
|
|
1354
1386
|
manualMessageObj.content = manualMessage;
|
|
1355
|
-
_context2.next =
|
|
1387
|
+
_context2.next = 126;
|
|
1356
1388
|
break;
|
|
1357
|
-
case
|
|
1389
|
+
case 125:
|
|
1358
1390
|
throw new Error('Manual message must be of type "string" or "DirectMessage"');
|
|
1359
|
-
case
|
|
1391
|
+
case 126:
|
|
1360
1392
|
if (scheduled) {
|
|
1361
1393
|
manualMessageObj.time = new Date(scheduled * 1000).toISOString();
|
|
1362
1394
|
manualMessageObj.scheduled = manualMessageObj.time;
|
|
@@ -1368,7 +1400,7 @@ var Spirits = {
|
|
|
1368
1400
|
}
|
|
1369
1401
|
messages.push(manualMessageObj);
|
|
1370
1402
|
progress('Added manual message', 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
|
|
1371
|
-
case
|
|
1403
|
+
case 129:
|
|
1372
1404
|
if (contextUpsert) {
|
|
1373
1405
|
context = updateContext(context, contextUpsert);
|
|
1374
1406
|
progress('Upserted context', 'info', 'UPDATE_CONTEXT', contextUpsert);
|
|
@@ -1376,21 +1408,21 @@ var Spirits = {
|
|
|
1376
1408
|
if (resetIntent) {
|
|
1377
1409
|
resettedIntent = true;
|
|
1378
1410
|
}
|
|
1379
|
-
case
|
|
1380
|
-
_context2.next =
|
|
1381
|
-
break;
|
|
1382
|
-
case 128:
|
|
1383
|
-
_context2.next = 133;
|
|
1411
|
+
case 131:
|
|
1412
|
+
_context2.next = 62;
|
|
1384
1413
|
break;
|
|
1385
|
-
case 130:
|
|
1386
|
-
_context2.prev = 130;
|
|
1387
|
-
_context2.t2 = _context2["catch"](55);
|
|
1388
|
-
_iterator.e(_context2.t2);
|
|
1389
1414
|
case 133:
|
|
1390
|
-
_context2.
|
|
1391
|
-
|
|
1392
|
-
|
|
1393
|
-
|
|
1415
|
+
_context2.next = 138;
|
|
1416
|
+
break;
|
|
1417
|
+
case 135:
|
|
1418
|
+
_context2.prev = 135;
|
|
1419
|
+
_context2.t2 = _context2["catch"](60);
|
|
1420
|
+
_iterator2.e(_context2.t2);
|
|
1421
|
+
case 138:
|
|
1422
|
+
_context2.prev = 138;
|
|
1423
|
+
_iterator2.f();
|
|
1424
|
+
return _context2.finish(138);
|
|
1425
|
+
case 141:
|
|
1394
1426
|
if (resettedIntent && !_forward) {
|
|
1395
1427
|
conversation.intent = null;
|
|
1396
1428
|
conversation.intentScore = null;
|
|
@@ -1406,17 +1438,17 @@ var Spirits = {
|
|
|
1406
1438
|
});
|
|
1407
1439
|
}
|
|
1408
1440
|
|
|
1409
|
-
//
|
|
1441
|
+
// 5. Generate response
|
|
1410
1442
|
// If conversation previously locked, don't generate
|
|
1411
1443
|
if (input.conversation.locked) {
|
|
1412
|
-
_context2.next =
|
|
1444
|
+
_context2.next = 193;
|
|
1413
1445
|
break;
|
|
1414
1446
|
}
|
|
1415
1447
|
if (!((!conversation.locked || !hasNoInstructions) && !!hasNoCustomMessage)) {
|
|
1416
|
-
_context2.next =
|
|
1448
|
+
_context2.next = 159;
|
|
1417
1449
|
break;
|
|
1418
1450
|
}
|
|
1419
|
-
_context2.prev =
|
|
1451
|
+
_context2.prev = 144;
|
|
1420
1452
|
progress('Generating message', 'info', 'SET_PROCESSING', 'system');
|
|
1421
1453
|
|
|
1422
1454
|
/** @type {import('@scout9/admin').GenerateRequestOneOf1} */
|
|
@@ -1430,9 +1462,9 @@ var Spirits = {
|
|
|
1430
1462
|
if (!!_tasks && Array.isArray(_tasks) && !!_tasks.length) {
|
|
1431
1463
|
generatorInput.tasks = _tasks;
|
|
1432
1464
|
}
|
|
1433
|
-
_context2.next =
|
|
1465
|
+
_context2.next = 150;
|
|
1434
1466
|
return generator(generatorInput);
|
|
1435
|
-
case
|
|
1467
|
+
case 150:
|
|
1436
1468
|
generatorPayload = _context2.sent;
|
|
1437
1469
|
if (!generatorPayload.send) {
|
|
1438
1470
|
progress('Generated response', 'failed', undefined, {
|
|
@@ -1448,12 +1480,25 @@ var Spirits = {
|
|
|
1448
1480
|
});
|
|
1449
1481
|
lastAgentMessage = agentMessages[agentMessages.length - 1];
|
|
1450
1482
|
addedMessages = _toConsumableArray(((generatorPayload === null || generatorPayload === void 0 ? void 0 : generatorPayload.messages) || []).map(function (message) {
|
|
1451
|
-
var _message$
|
|
1483
|
+
var _message$entities, _message$context;
|
|
1484
|
+
var time = message.time;
|
|
1485
|
+
if (typeof time !== 'string') {
|
|
1486
|
+
// Convert the time string
|
|
1487
|
+
if (!time) {
|
|
1488
|
+
progress("Message \"".concat(message.content, "\" wasn't given a timestamp, defaulting to now"));
|
|
1489
|
+
time = new Date().toISOString();
|
|
1490
|
+
} else if (!'toDate' in time) {
|
|
1491
|
+
progress("Message \"".concat(message.content, "\" wasn't given a timestamp (").concat(JSON.stringify(time), ") without a toDate method, defaulting to now"));
|
|
1492
|
+
time = new Date().toISOString();
|
|
1493
|
+
} else {
|
|
1494
|
+
time = message.time.toDate().toISOString();
|
|
1495
|
+
}
|
|
1496
|
+
}
|
|
1452
1497
|
return {
|
|
1453
1498
|
id: idGenerator(message.role),
|
|
1454
1499
|
content: message.content,
|
|
1455
1500
|
role: message.role,
|
|
1456
|
-
time:
|
|
1501
|
+
time: time,
|
|
1457
1502
|
entities: (_message$entities = message.entities) !== null && _message$entities !== void 0 ? _message$entities : {},
|
|
1458
1503
|
context: (_message$context = message.context) !== null && _message$context !== void 0 ? _message$context : {},
|
|
1459
1504
|
mediaUrls: message.mediaUrls
|
|
@@ -1470,17 +1515,17 @@ var Spirits = {
|
|
|
1470
1515
|
// Error should not have happened
|
|
1471
1516
|
conversation = lockConversation(conversation, 'Duplicate message');
|
|
1472
1517
|
} else {
|
|
1473
|
-
|
|
1518
|
+
_iterator3 = _createForOfIteratorHelper(addedMessages);
|
|
1474
1519
|
try {
|
|
1475
|
-
for (
|
|
1476
|
-
newMessage =
|
|
1520
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
1521
|
+
newMessage = _step3.value;
|
|
1477
1522
|
messages.push(newMessage);
|
|
1478
1523
|
progress('Added agent message', 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
|
|
1479
1524
|
}
|
|
1480
1525
|
} catch (err) {
|
|
1481
|
-
|
|
1526
|
+
_iterator3.e(err);
|
|
1482
1527
|
} finally {
|
|
1483
|
-
|
|
1528
|
+
_iterator3.f();
|
|
1484
1529
|
}
|
|
1485
1530
|
}
|
|
1486
1531
|
|
|
@@ -1493,30 +1538,30 @@ var Spirits = {
|
|
|
1493
1538
|
}
|
|
1494
1539
|
}
|
|
1495
1540
|
}
|
|
1496
|
-
_context2.next =
|
|
1541
|
+
_context2.next = 159;
|
|
1497
1542
|
break;
|
|
1498
|
-
case
|
|
1499
|
-
_context2.prev =
|
|
1500
|
-
_context2.t3 = _context2["catch"](
|
|
1543
|
+
case 154:
|
|
1544
|
+
_context2.prev = 154;
|
|
1545
|
+
_context2.t3 = _context2["catch"](144);
|
|
1501
1546
|
onError(_context2.t3);
|
|
1502
1547
|
console.error("Spirits: Locking conversation, error generating response: ".concat(_context2.t3.message));
|
|
1503
1548
|
conversation = lockConversation(conversation, 'API: ' + _context2.t3.message);
|
|
1504
|
-
case
|
|
1549
|
+
case 159:
|
|
1505
1550
|
if (!(messagesToTransform.length && transformer)) {
|
|
1506
|
-
_context2.next =
|
|
1551
|
+
_context2.next = 192;
|
|
1507
1552
|
break;
|
|
1508
1553
|
}
|
|
1509
|
-
_context2.prev =
|
|
1510
|
-
|
|
1511
|
-
_context2.prev =
|
|
1512
|
-
|
|
1513
|
-
case
|
|
1514
|
-
if ((
|
|
1515
|
-
_context2.next =
|
|
1554
|
+
_context2.prev = 160;
|
|
1555
|
+
_iterator4 = _createForOfIteratorHelper(messagesToTransform);
|
|
1556
|
+
_context2.prev = 162;
|
|
1557
|
+
_iterator4.s();
|
|
1558
|
+
case 164:
|
|
1559
|
+
if ((_step4 = _iterator4.n()).done) {
|
|
1560
|
+
_context2.next = 175;
|
|
1516
1561
|
break;
|
|
1517
1562
|
}
|
|
1518
|
-
|
|
1519
|
-
_context2.next =
|
|
1563
|
+
_step4.value;
|
|
1564
|
+
_context2.next = 168;
|
|
1520
1565
|
return transformer({
|
|
1521
1566
|
message: messagesToTransform,
|
|
1522
1567
|
persona: persona,
|
|
@@ -1524,7 +1569,7 @@ var Spirits = {
|
|
|
1524
1569
|
messages: messages,
|
|
1525
1570
|
context: context
|
|
1526
1571
|
});
|
|
1527
|
-
case
|
|
1572
|
+
case 168:
|
|
1528
1573
|
transformResponse = _context2.sent;
|
|
1529
1574
|
progress('Generated response', 'success', undefined, undefined);
|
|
1530
1575
|
// Check if already had message
|
|
@@ -1544,37 +1589,37 @@ var Spirits = {
|
|
|
1544
1589
|
});
|
|
1545
1590
|
progress('Added agent message', 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
|
|
1546
1591
|
}
|
|
1547
|
-
case
|
|
1548
|
-
_context2.next =
|
|
1592
|
+
case 173:
|
|
1593
|
+
_context2.next = 164;
|
|
1549
1594
|
break;
|
|
1550
|
-
case 170:
|
|
1551
|
-
_context2.next = 175;
|
|
1552
|
-
break;
|
|
1553
|
-
case 172:
|
|
1554
|
-
_context2.prev = 172;
|
|
1555
|
-
_context2.t4 = _context2["catch"](157);
|
|
1556
|
-
_iterator3.e(_context2.t4);
|
|
1557
1595
|
case 175:
|
|
1558
|
-
_context2.
|
|
1559
|
-
_iterator3.f();
|
|
1560
|
-
return _context2.finish(175);
|
|
1561
|
-
case 178:
|
|
1562
|
-
_context2.next = 185;
|
|
1596
|
+
_context2.next = 180;
|
|
1563
1597
|
break;
|
|
1598
|
+
case 177:
|
|
1599
|
+
_context2.prev = 177;
|
|
1600
|
+
_context2.t4 = _context2["catch"](162);
|
|
1601
|
+
_iterator4.e(_context2.t4);
|
|
1564
1602
|
case 180:
|
|
1565
1603
|
_context2.prev = 180;
|
|
1566
|
-
|
|
1604
|
+
_iterator4.f();
|
|
1605
|
+
return _context2.finish(180);
|
|
1606
|
+
case 183:
|
|
1607
|
+
_context2.next = 190;
|
|
1608
|
+
break;
|
|
1609
|
+
case 185:
|
|
1610
|
+
_context2.prev = 185;
|
|
1611
|
+
_context2.t5 = _context2["catch"](160);
|
|
1567
1612
|
console.error("Locking conversation, error transforming response: ".concat(_context2.t5.message));
|
|
1568
1613
|
conversation = lockConversation(conversation, 'API: ' + _context2.t5.message);
|
|
1569
1614
|
onError(_context2.t5);
|
|
1570
|
-
case
|
|
1571
|
-
_context2.next =
|
|
1615
|
+
case 190:
|
|
1616
|
+
_context2.next = 193;
|
|
1572
1617
|
break;
|
|
1573
|
-
case
|
|
1618
|
+
case 192:
|
|
1574
1619
|
if (messagesToTransform.length) {
|
|
1575
1620
|
console.warn("No transformer provided");
|
|
1576
1621
|
}
|
|
1577
|
-
case
|
|
1622
|
+
case 193:
|
|
1578
1623
|
progress('Parsing message', 'info', 'SET_PROCESSING', null);
|
|
1579
1624
|
return _context2.abrupt("return", {
|
|
1580
1625
|
conversation: {
|
|
@@ -1598,11 +1643,11 @@ var Spirits = {
|
|
|
1598
1643
|
followup: followup,
|
|
1599
1644
|
entityContextUpsert: entityContextUpsert
|
|
1600
1645
|
});
|
|
1601
|
-
case
|
|
1646
|
+
case 195:
|
|
1602
1647
|
case "end":
|
|
1603
1648
|
return _context2.stop();
|
|
1604
1649
|
}
|
|
1605
|
-
}, _callee, null, [[
|
|
1650
|
+
}, _callee, null, [[60, 135, 138, 141], [98, 107, 110, 113], [144, 154], [160, 185], [162, 177, 180, 183]]);
|
|
1606
1651
|
}));
|
|
1607
1652
|
function customer(_x) {
|
|
1608
1653
|
return _customer.apply(this, arguments);
|
package/dist/spirits.cjs
CHANGED
package/dist/testing-tools.cjs
CHANGED
|
@@ -2,8 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
4
4
|
|
|
5
|
-
var dev = require("./dev-
|
|
6
|
-
require("./spirits-
|
|
5
|
+
var dev = require("./dev-bc9e04ca.cjs");
|
|
6
|
+
require("./spirits-5dc52d64.cjs");
|
|
7
7
|
require('util');
|
|
8
8
|
require('stream');
|
|
9
9
|
require('path');
|
package/package.json
CHANGED
|
@@ -15,8 +15,8 @@
|
|
|
15
15
|
* @typedef {Object} ConversationData
|
|
16
16
|
* @property {import('@scout9/app').Scout9ProjectBuildConfig} config - used to define generation and extract persona metadata
|
|
17
17
|
* @property {import('@scout9/app').Conversation} conversation
|
|
18
|
-
* @property {Array<import('@scout9/
|
|
19
|
-
* @property {import('@scout9/
|
|
18
|
+
* @property {Array<import('@scout9/admin').Message>} messages
|
|
19
|
+
* @property {import('@scout9/admin').Message} message - the message sent by the customer (should exist in messages)
|
|
20
20
|
* @property {import('@scout9/app').Customer} customer
|
|
21
21
|
* @property {import('@scout9/app').ConversationProgress} progress - progress checklist for manual/auto ingress workflows
|
|
22
22
|
* @property {any} context - event context
|
|
@@ -24,16 +24,16 @@
|
|
|
24
24
|
|
|
25
25
|
/**
|
|
26
26
|
* @typedef {Object} ParseOutput
|
|
27
|
-
* @property {Array<import('@scout9/
|
|
27
|
+
* @property {Array<import('@scout9/admin').Message>} messages
|
|
28
28
|
* @property {import('@scout9/app').Conversation} conversation
|
|
29
|
-
* @property {import('@scout9/
|
|
29
|
+
* @property {import('@scout9/admin').Message} message
|
|
30
30
|
* @property {any} context
|
|
31
31
|
*/
|
|
32
32
|
|
|
33
33
|
/**
|
|
34
34
|
* @typedef {Object} WorkflowOutput
|
|
35
35
|
* @property {Array<import('@scout9/app').WorkflowResponseSlot>} slots
|
|
36
|
-
* @property {Array<import('@scout9/
|
|
36
|
+
* @property {Array<import('@scout9/admin').Message>} messages
|
|
37
37
|
* @property {import('@scout9/app').Conversation} conversation
|
|
38
38
|
* @property {any} context
|
|
39
39
|
*/
|
|
@@ -41,7 +41,7 @@
|
|
|
41
41
|
/**
|
|
42
42
|
* @typedef {Object} GenerateOutput
|
|
43
43
|
* @property {import('@scout9/admin').GenerateResponse | undefined} generate
|
|
44
|
-
* @property {Array<import('@scout9/
|
|
44
|
+
* @property {Array<import('@scout9/admin').Message>} messages
|
|
45
45
|
* @property {import('@scout9/app').Conversation} conversation
|
|
46
46
|
* @property {any} context
|
|
47
47
|
*/
|
|
@@ -53,6 +53,12 @@
|
|
|
53
53
|
* @returns {Promise<import('@scout9/admin').ParseResponse>}
|
|
54
54
|
*/
|
|
55
55
|
|
|
56
|
+
/**
|
|
57
|
+
* @callback ContextualizerFun
|
|
58
|
+
* @param {Pick<import('@scout9/app').WorkflowEvent, 'messages' | 'conversation'>} args - message to send
|
|
59
|
+
* @returns {Promise<import('@scout9/app').WorkflowEvent['messages']>}
|
|
60
|
+
*/
|
|
61
|
+
|
|
56
62
|
/**
|
|
57
63
|
* @callback WorkflowFun
|
|
58
64
|
* @param {import('@scout9/app').WorkflowEvent} event - conversation data
|
|
@@ -73,7 +79,7 @@
|
|
|
73
79
|
|
|
74
80
|
/**
|
|
75
81
|
* @callback IdGeneratorFun
|
|
76
|
-
* @param {import('@scout9/
|
|
82
|
+
* @param {import('@scout9/admin').Message['role']} prefix
|
|
77
83
|
* @returns {string}
|
|
78
84
|
*/
|
|
79
85
|
|
|
@@ -89,6 +95,7 @@
|
|
|
89
95
|
/**
|
|
90
96
|
* @typedef {Object} CustomerSpiritCallbacks
|
|
91
97
|
* @property {ParseFun} parser
|
|
98
|
+
* @property {ContextualizerFun} contextualizer
|
|
92
99
|
* @property {WorkflowFun} workflow
|
|
93
100
|
* @property {GenerateFun} generator
|
|
94
101
|
* @property {TransformerFun} transformer
|
|
@@ -103,9 +110,9 @@
|
|
|
103
110
|
* forwardNote?: string;
|
|
104
111
|
* forward?: import('@scout9/app').WorkflowResponseSlot['forward'];
|
|
105
112
|
* })} conversation
|
|
106
|
-
* @property {Change<Array<import('@scout9/
|
|
113
|
+
* @property {Change<Array<import('@scout9/admin').Message>>} messages
|
|
107
114
|
* @property {Change<any>} context
|
|
108
|
-
* @property {Change<import('@scout9/
|
|
115
|
+
* @property {Change<import('@scout9/admin').Message>} message
|
|
109
116
|
* @property {Array<import('@scout9/app').Followup>} followup
|
|
110
117
|
* @property {Array<import('@scout9/app').EntityContextUpsert>} entityContextUpsert
|
|
111
118
|
*/
|
|
@@ -123,6 +130,7 @@ export const Spirits = {
|
|
|
123
130
|
customer,
|
|
124
131
|
config,
|
|
125
132
|
parser,
|
|
133
|
+
contextualizer,
|
|
126
134
|
workflow,
|
|
127
135
|
generator,
|
|
128
136
|
transformer,
|
|
@@ -352,7 +360,13 @@ export const Spirits = {
|
|
|
352
360
|
})));
|
|
353
361
|
}
|
|
354
362
|
|
|
355
|
-
// 3. Run the
|
|
363
|
+
// 3. Run the contextualizer
|
|
364
|
+
const newContextMessages = await contextualizer({conversation, messages});
|
|
365
|
+
for (const contextMessage of newContextMessages) {
|
|
366
|
+
messages.push(contextMessage);
|
|
367
|
+
}
|
|
368
|
+
|
|
369
|
+
// 4. Run the workflow
|
|
356
370
|
progress('Running workflow', 'info', 'SET_PROCESSING', 'system');
|
|
357
371
|
|
|
358
372
|
const slots = await workflow({
|
|
@@ -543,7 +557,7 @@ export const Spirits = {
|
|
|
543
557
|
|
|
544
558
|
if (manualMessage) {
|
|
545
559
|
|
|
546
|
-
/** @type {import('@scout9/
|
|
560
|
+
/** @type {import('@scout9/admin').Message} */
|
|
547
561
|
let manualMessageObj = {
|
|
548
562
|
id: idGenerator('persona'),
|
|
549
563
|
role: 'agent', // @TODO switch role to persona
|
|
@@ -598,7 +612,7 @@ export const Spirits = {
|
|
|
598
612
|
);
|
|
599
613
|
}
|
|
600
614
|
|
|
601
|
-
//
|
|
615
|
+
// 5. Generate response
|
|
602
616
|
// If conversation previously locked, don't generate
|
|
603
617
|
if (!input.conversation.locked) {
|
|
604
618
|
// If conversation is newly locked, don't generate, unless instructions were provided and no custom messages were provided
|
|
@@ -636,15 +650,32 @@ export const Spirits = {
|
|
|
636
650
|
const lastAgentMessage = agentMessages[agentMessages.length - 1];
|
|
637
651
|
const addedMessages = [
|
|
638
652
|
...(generatorPayload?.messages || [])
|
|
639
|
-
.map((message) =>
|
|
653
|
+
.map((message) => {
|
|
654
|
+
|
|
655
|
+
let time = message.time;
|
|
656
|
+
|
|
657
|
+
if (typeof time !== 'string') {
|
|
658
|
+
// Convert the time string
|
|
659
|
+
if (!time) {
|
|
660
|
+
progress(`Message "${message.content}" wasn't given a timestamp, defaulting to now`);
|
|
661
|
+
time = new Date().toISOString();
|
|
662
|
+
} else if (!'toDate' in time) {
|
|
663
|
+
progress(`Message "${message.content}" wasn't given a timestamp (${JSON.stringify(time)}) without a toDate method, defaulting to now`);
|
|
664
|
+
time = new Date().toISOString();
|
|
665
|
+
} else {
|
|
666
|
+
time = message.time.toDate().toISOString();
|
|
667
|
+
}
|
|
668
|
+
}
|
|
669
|
+
|
|
670
|
+
return ({
|
|
640
671
|
id: idGenerator(message.role),
|
|
641
672
|
content: message.content,
|
|
642
673
|
role: message.role,
|
|
643
|
-
time
|
|
674
|
+
time,
|
|
644
675
|
entities: message.entities ?? {},
|
|
645
676
|
context: message.context ?? {},
|
|
646
677
|
mediaUrls: message.mediaUrls
|
|
647
|
-
}))
|
|
678
|
+
})})
|
|
648
679
|
]
|
|
649
680
|
.reduce((accumulator, message) => {
|
|
650
681
|
if (!accumulator.find(m => m.content === message.content)) accumulator.push(message);
|
package/types/index.d.ts
CHANGED
|
@@ -930,11 +930,11 @@ declare module '@scout9/app/spirits' {
|
|
|
930
930
|
*/
|
|
931
931
|
config: any;
|
|
932
932
|
conversation: any;
|
|
933
|
-
messages: Array<
|
|
933
|
+
messages: Array<import('@scout9/admin').Message>;
|
|
934
934
|
/**
|
|
935
935
|
* - the message sent by the customer (should exist in messages)
|
|
936
936
|
*/
|
|
937
|
-
message:
|
|
937
|
+
message: import('@scout9/admin').Message;
|
|
938
938
|
customer: any;
|
|
939
939
|
/**
|
|
940
940
|
* - progress checklist for manual/auto ingress workflows
|
|
@@ -946,31 +946,33 @@ declare module '@scout9/app/spirits' {
|
|
|
946
946
|
context: any;
|
|
947
947
|
};
|
|
948
948
|
export type ParseOutput = {
|
|
949
|
-
messages: Array<
|
|
949
|
+
messages: Array<import('@scout9/admin').Message>;
|
|
950
950
|
conversation: any;
|
|
951
|
-
message:
|
|
951
|
+
message: import('@scout9/admin').Message;
|
|
952
952
|
context: any;
|
|
953
953
|
};
|
|
954
954
|
export type WorkflowOutput = {
|
|
955
955
|
slots: Array<any>;
|
|
956
|
-
messages: Array<
|
|
956
|
+
messages: Array<import('@scout9/admin').Message>;
|
|
957
957
|
conversation: any;
|
|
958
958
|
context: any;
|
|
959
959
|
};
|
|
960
960
|
export type GenerateOutput = {
|
|
961
961
|
generate: import('@scout9/admin').GenerateResponse | undefined;
|
|
962
|
-
messages: Array<
|
|
962
|
+
messages: Array<import('@scout9/admin').Message>;
|
|
963
963
|
conversation: any;
|
|
964
964
|
context: any;
|
|
965
965
|
};
|
|
966
966
|
export type ParseFun = (message: string, language: string | undefined) => Promise<import('@scout9/admin').ParseResponse>;
|
|
967
|
+
export type ContextualizerFun = (args: Pick<any, 'messages' | 'conversation'>) => Promise<any['messages']>;
|
|
967
968
|
export type WorkflowFun = (event: any) => Promise<any>;
|
|
968
969
|
export type GenerateFun = (data: import('@scout9/admin').GenerateRequestOneOf1) => Promise<import('@scout9/admin').GenerateResponse>;
|
|
969
970
|
export type TransformerFun = (data: import('@scout9/admin').PmtTransformRequest) => Promise<import('@scout9/admin').PmtTransformResponse>;
|
|
970
|
-
export type IdGeneratorFun = (prefix:
|
|
971
|
+
export type IdGeneratorFun = (prefix: import('@scout9/admin').Message['role']) => string;
|
|
971
972
|
export type StatusCallback = (message: string, level?: 'info' | 'warn' | 'error' | 'success' | undefined, type?: string | undefined, payload?: any | undefined) => void;
|
|
972
973
|
export type CustomerSpiritCallbacks = {
|
|
973
974
|
parser: ParseFun;
|
|
975
|
+
contextualizer: ContextualizerFun;
|
|
974
976
|
workflow: WorkflowFun;
|
|
975
977
|
generator: GenerateFun;
|
|
976
978
|
transformer: TransformerFun;
|
|
@@ -982,9 +984,9 @@ declare module '@scout9/app/spirits' {
|
|
|
982
984
|
forwardNote?: string;
|
|
983
985
|
forward?: any['forward'];
|
|
984
986
|
});
|
|
985
|
-
messages: Change<Array<
|
|
987
|
+
messages: Change<Array<import('@scout9/admin').Message>>;
|
|
986
988
|
context: Change<any>;
|
|
987
|
-
message: Change<
|
|
989
|
+
message: Change<import('@scout9/admin').Message>;
|
|
988
990
|
followup: Array<any>;
|
|
989
991
|
entityContextUpsert: Array<any>;
|
|
990
992
|
};
|
package/types/index.d.ts.map
CHANGED
|
@@ -167,5 +167,5 @@
|
|
|
167
167
|
null,
|
|
168
168
|
null
|
|
169
169
|
],
|
|
170
|
-
"mappings": ";;;;;kBAkBgBA,GAAGA;;;;;;;kBAYHC,IAAIA;;;;kBAUJC,SAASA;;;;;;;;;;;eAYZC,aAAaA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAoDbC,QAAQA;;;;;;;;;eAaRC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;eAyBZC,OAAOA;;;;;;;;;;;;;;;;;eAkBPC,KAAKA;;;;cAINC,eAAeA;;;;;;;;;cASfC,eAAeA;;;;;;;;;;;;;cAafC,YAAYA;;;;;;;cAOZC,cAAcA;;;;;;;;;;;;;;;;cAgBdC,WAAWA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;kBA2EPC,GAAGA;;;;;;;kBAUHC,IAAIA;;cAERC,8BAA8BA;;;;;cAK9BC,mBAAmBA;;cAEnBC,eAAeA;cACfC,aAAaA;;;;;;;;;;;;;;;;;;;kBAuBTC,OAAOA;;cAEXC,KAAKA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA2CLC,kBAAkBA;;cAElBC,mBAAmBA;;cAEnBC,MAAMA;;cAENC,cAAcA;;cAEdC,sBAAsBA;;;;;;;;;;;;;;;;cAgBtBC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAoCZC,aAAaA;;cAEbC,QAAQA;;;;;;;;;;;;;;;;;;cAkBRC,gBAAgBA;;;;;;;;;cAShBC,sBAAsBA;;;;;;;cAOtBC,UAAUA;;;;;;;;;;;;;;;cAeVC,uBAAuBA;;;cAGvBC,uBAAuBA;;;;;cAKvBC,uCAAuCA;;;;;;;;;cASvCC,8BAA8BA;;;;;;;;;;;;cAY9BC,uBAAuBA;;;;;;;;;;;;;;;;;;;;;;;cAuBvBC,mBAAmBA;;cAEnBC,sBAAsBA;;;;;;;;;cAStBC,8BAA8BA;;;;;;;cAO9BC,yBAAyBA;;cAEzBC,gCAAgCA;;;cAGhCC,iBAAiBA;;;;;;;;cAQjBC,WAAWA;;cAEXC,YAAYA;;;;;;;;;cASZC,mBAAmBA;;;;;cAKnBC,wBAAwBA;;cAExBC,QAAQA;;;;;;cAMRC,mBAAmBA;;;;;;;;;;;cAWnBC,OAAOA;;;;;;;cAOPC,mBAAmBA;;;;;;;;;;;cAWnBC,WAAWA;;;;;;cAMXC,SAASA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cA+BTC,OAAOA;;cAEPC,oBAAoBA;;cAEpBC,OAAOA;;cAEPC,qBAAqBA;;cAErBC,QAAQA;;cAERC,qBAAqBA;;;;;;cAMrBC,oBAAoBA;;;;;cAKpBC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAkCnBC,wBAAwBA;;;;;;;;;;;;;;;cAexBC,aAAaA;;;;;;;;;;;;;cAabC,aAAaA;;;;;;cAMbC,kBAAkBA;;;;cAIlBC,UAAUA;;cAEVC,aAAaA;;;;;cAKbC,wBAAwBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCxBC,oBAAoBA;;;;;;;;;;;;;;;;;;;;;;;;;cAyBpBC,gBAAgBA;;cAEhBC,gBAAgBA;;cAEhBC,iCAAiCA;;;;;;;cAOjCC,uBAAuBA;;cAEvBC,kCAAkCA;;;;;;;;;;;;;;cAclCC,sBAAsBA;;;;;;cAMtBC,WAAWA;;;;;;;;;;;;cAYXC,iBAAiBA;;cAEjBC,aAAaA;;;;;;;;;cASbC,cAAcA;;cAEdC,gBAAgBA;;;;iBCx2BfC,eAAeA;iBAWfC,kBAAkBA;iBAgBlBC,iBAAiBA;iBAkBjBC,sBAAsBA;iBAmBtBC,uBAAuBA;;;;cCvDvBC,UAAUA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCLVC,mBAAmBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cCNnBC,aAAaA;;;;;;;;;;cAKbC,cAAcA;;;;;;;;;;cCJdxE,mBAAmBA;cAanByE,4BAA4BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAU5BC,kBAAkBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC8BlBC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCzBC,8BAA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC3F9BC,4BAA4BA;;;;;;;;;;;;;;;;;;;;;;cAyC5BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAI1BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEzBC,2BAA2BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAE3BC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEZC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cClEdC,aAAaA;;;;;;;;;;;;;cAWbC,uBAAuBA;;;;;;;;;;;;;cAYvBjD,iCAAiCA;;;;;;;;;;;;;;;;;;;;cAWjCC,uBAAuBA;;;;;;;;;;;;;;;;;;;cAavBC,kCAAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuBlCgD,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"
|
|
170
|
+
"mappings": "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C8BlBC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAsCzBC,8BAA8BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cC3F9BC,4BAA4BA;;;;;;;;;;;;;;;;;;;;;;cAyC5BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;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;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAI1BC,yBAAyBA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEzBC,2BAA2BA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAE3BC,YAAYA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAEZC,cAAcA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cClEdC,aAAaA;;;;;;;;;;;;;cAWbC,uBAAuBA;;;;;;;;;;;;;cAYvBjD,iCAAiCA;;;;;;;;;;;;;;;;;;;;cAWjCC,uBAAuBA;;;;;;;;;;;;;;;;;;;cAavBC,kCAAkCA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;cAuBlCgD,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"
|
|
171
171
|
}
|