@scout9/app 1.0.0-alpha.0.8.1 → 1.0.0-alpha.0.8.3
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-6ed916b0.cjs → dev-0102b73f.cjs} +3 -3
- package/dist/{index-5e8f21d8.cjs → index-5f4f222f.cjs} +6 -6
- package/dist/index.cjs +3 -3
- package/dist/{multipart-parser-fdd44ec3.cjs → multipart-parser-22a1e9f6.cjs} +3 -3
- package/dist/{spirits-8325bcf4.cjs → spirits-6abaf567.cjs} +179 -145
- package/dist/spirits.cjs +1 -1
- package/dist/testing-tools.cjs +2 -2
- package/package.json +1 -1
- package/src/testing-tools/spirits.js +28 -12
- 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-6abaf567.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-0102b73f.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-6abaf567.cjs");
|
|
4
|
+
var dev = require("./dev-0102b73f.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-22a1e9f6.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-5f4f222f.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-5f4f222f.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-5f4f222f.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-5f4f222f.cjs");
|
|
6
|
+
var dev = require("./dev-0102b73f.cjs");
|
|
7
|
+
require("./spirits-6abaf567.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-5f4f222f.cjs");
|
|
6
|
+
require("./spirits-6abaf567.cjs");
|
|
7
|
+
require("./dev-0102b73f.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,31 @@ var Spirits = {
|
|
|
1064
1076
|
})));
|
|
1065
1077
|
}
|
|
1066
1078
|
|
|
1067
|
-
// 3. Run the
|
|
1068
|
-
progress('Running
|
|
1079
|
+
// 3. Run the contextualizer
|
|
1080
|
+
progress('Running contextualizer', 'info', 'SET_PROCESSING', 'system');
|
|
1069
1081
|
_context2.next = 47;
|
|
1082
|
+
return contextualizer({
|
|
1083
|
+
conversation: conversation,
|
|
1084
|
+
messages: messages
|
|
1085
|
+
});
|
|
1086
|
+
case 47:
|
|
1087
|
+
newContextMessages = _context2.sent;
|
|
1088
|
+
_iterator = _createForOfIteratorHelper(newContextMessages);
|
|
1089
|
+
try {
|
|
1090
|
+
for (_iterator.s(); !(_step = _iterator.n()).done;) {
|
|
1091
|
+
contextMessage = _step.value;
|
|
1092
|
+
messages.push(contextMessage);
|
|
1093
|
+
progress("Added context", 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
|
|
1094
|
+
}
|
|
1095
|
+
|
|
1096
|
+
// 4. Run the workflow
|
|
1097
|
+
} catch (err) {
|
|
1098
|
+
_iterator.e(err);
|
|
1099
|
+
} finally {
|
|
1100
|
+
_iterator.f();
|
|
1101
|
+
}
|
|
1102
|
+
progress('Running workflow', 'info', 'SET_PROCESSING', 'system');
|
|
1103
|
+
_context2.next = 53;
|
|
1070
1104
|
return workflow({
|
|
1071
1105
|
messages: messages,
|
|
1072
1106
|
conversation: conversation,
|
|
@@ -1095,7 +1129,7 @@ var Spirits = {
|
|
|
1095
1129
|
return accumulator;
|
|
1096
1130
|
}, []);
|
|
1097
1131
|
});
|
|
1098
|
-
case
|
|
1132
|
+
case 53:
|
|
1099
1133
|
slots = _context2.sent;
|
|
1100
1134
|
hasNoInstructions = slots.every(function (s) {
|
|
1101
1135
|
return !s.instructions || Array.isArray(s.instructions) && s.instructions.length === 0;
|
|
@@ -1121,21 +1155,21 @@ var Spirits = {
|
|
|
1121
1155
|
}
|
|
1122
1156
|
resettedIntent = false;
|
|
1123
1157
|
/** @type {Array<string> | undefined} */
|
|
1124
|
-
|
|
1125
|
-
_context2.prev =
|
|
1126
|
-
|
|
1127
|
-
case
|
|
1128
|
-
if ((
|
|
1129
|
-
_context2.next =
|
|
1158
|
+
_iterator2 = _createForOfIteratorHelper(slots);
|
|
1159
|
+
_context2.prev = 61;
|
|
1160
|
+
_iterator2.s();
|
|
1161
|
+
case 63:
|
|
1162
|
+
if ((_step2 = _iterator2.n()).done) {
|
|
1163
|
+
_context2.next = 134;
|
|
1130
1164
|
break;
|
|
1131
1165
|
}
|
|
1132
|
-
|
|
1166
|
+
_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
1167
|
if (!anticipate) {
|
|
1134
|
-
_context2.next =
|
|
1168
|
+
_context2.next = 78;
|
|
1135
1169
|
break;
|
|
1136
1170
|
}
|
|
1137
1171
|
if (!Array.isArray(anticipate)) {
|
|
1138
|
-
_context2.next =
|
|
1172
|
+
_context2.next = 73;
|
|
1139
1173
|
break;
|
|
1140
1174
|
}
|
|
1141
1175
|
// 'literal' anticipation
|
|
@@ -1155,11 +1189,11 @@ var Spirits = {
|
|
|
1155
1189
|
slots: _slots,
|
|
1156
1190
|
map: map
|
|
1157
1191
|
});
|
|
1158
|
-
_context2.next =
|
|
1192
|
+
_context2.next = 78;
|
|
1159
1193
|
break;
|
|
1160
|
-
case
|
|
1194
|
+
case 73:
|
|
1161
1195
|
if (!('yes' in anticipate && 'no' in anticipate && 'did' in anticipate)) {
|
|
1162
|
-
_context2.next =
|
|
1196
|
+
_context2.next = 77;
|
|
1163
1197
|
break;
|
|
1164
1198
|
}
|
|
1165
1199
|
// "did" anticipation
|
|
@@ -1171,11 +1205,11 @@ var Spirits = {
|
|
|
1171
1205
|
},
|
|
1172
1206
|
did: anticipate.did
|
|
1173
1207
|
});
|
|
1174
|
-
_context2.next =
|
|
1208
|
+
_context2.next = 78;
|
|
1175
1209
|
break;
|
|
1176
|
-
case
|
|
1210
|
+
case 77:
|
|
1177
1211
|
throw new Error("Invalid anticipate payload \"".concat(JSON.stringify(anticipate), "\""));
|
|
1178
|
-
case
|
|
1212
|
+
case 78:
|
|
1179
1213
|
// tasks from auto/manual ingress to execute
|
|
1180
1214
|
if (!!tasks && Array.isArray(tasks) && !!tasks.length) {
|
|
1181
1215
|
if (!_tasks) _tasks = [];
|
|
@@ -1231,25 +1265,25 @@ var Spirits = {
|
|
|
1231
1265
|
|
|
1232
1266
|
// Insert instructions context
|
|
1233
1267
|
if (!instructions) {
|
|
1234
|
-
_context2.next =
|
|
1268
|
+
_context2.next = 97;
|
|
1235
1269
|
break;
|
|
1236
1270
|
}
|
|
1237
1271
|
if (!(typeof instructions === 'string')) {
|
|
1238
|
-
_context2.next =
|
|
1272
|
+
_context2.next = 87;
|
|
1239
1273
|
break;
|
|
1240
1274
|
}
|
|
1241
1275
|
addInstruction(instructions, previousLockAttempt);
|
|
1242
|
-
_context2.next =
|
|
1276
|
+
_context2.next = 97;
|
|
1243
1277
|
break;
|
|
1244
|
-
case
|
|
1278
|
+
case 87:
|
|
1245
1279
|
if (!Array.isArray(instructions)) {
|
|
1246
|
-
_context2.next =
|
|
1280
|
+
_context2.next = 92;
|
|
1247
1281
|
break;
|
|
1248
1282
|
}
|
|
1249
|
-
|
|
1283
|
+
_iterator5 = _createForOfIteratorHelper(instructions);
|
|
1250
1284
|
try {
|
|
1251
|
-
for (
|
|
1252
|
-
instruction =
|
|
1285
|
+
for (_iterator5.s(); !(_step5 = _iterator5.n()).done;) {
|
|
1286
|
+
instruction = _step5.value;
|
|
1253
1287
|
if (typeof instruction === 'string') {
|
|
1254
1288
|
addInstruction(instruction, previousLockAttempt);
|
|
1255
1289
|
} else {
|
|
@@ -1257,35 +1291,35 @@ var Spirits = {
|
|
|
1257
1291
|
}
|
|
1258
1292
|
}
|
|
1259
1293
|
} catch (err) {
|
|
1260
|
-
|
|
1294
|
+
_iterator5.e(err);
|
|
1261
1295
|
} finally {
|
|
1262
|
-
|
|
1296
|
+
_iterator5.f();
|
|
1263
1297
|
}
|
|
1264
|
-
_context2.next =
|
|
1298
|
+
_context2.next = 97;
|
|
1265
1299
|
break;
|
|
1266
|
-
case
|
|
1300
|
+
case 92:
|
|
1267
1301
|
if (!(_typeof(instructions) === 'object' && 'content' in instructions)) {
|
|
1268
|
-
_context2.next =
|
|
1302
|
+
_context2.next = 96;
|
|
1269
1303
|
break;
|
|
1270
1304
|
}
|
|
1271
1305
|
addInstruction(instructions.content, previousLockAttempt, instructions.id);
|
|
1272
|
-
_context2.next =
|
|
1306
|
+
_context2.next = 97;
|
|
1273
1307
|
break;
|
|
1274
|
-
case
|
|
1308
|
+
case 96:
|
|
1275
1309
|
throw new Error("SpiritsError: instructions must be a string or array or {content: \"<instruction>\"}, got: ".concat(JSON.stringify(instructions)));
|
|
1276
|
-
case
|
|
1310
|
+
case 97:
|
|
1277
1311
|
if (!removeInstructions) {
|
|
1278
|
-
_context2.next =
|
|
1312
|
+
_context2.next = 114;
|
|
1279
1313
|
break;
|
|
1280
1314
|
}
|
|
1281
|
-
|
|
1282
|
-
_context2.prev =
|
|
1315
|
+
_iterator6 = _createForOfIteratorHelper(removeInstructions);
|
|
1316
|
+
_context2.prev = 99;
|
|
1283
1317
|
_loop = /*#__PURE__*/_regeneratorRuntime().mark(function _loop() {
|
|
1284
1318
|
var instructionId, index;
|
|
1285
1319
|
return _regeneratorRuntime().wrap(function _loop$(_context) {
|
|
1286
1320
|
while (1) switch (_context.prev = _context.next) {
|
|
1287
1321
|
case 0:
|
|
1288
|
-
instructionId =
|
|
1322
|
+
instructionId = _step6.value;
|
|
1289
1323
|
index = messages.findIndex(function (m) {
|
|
1290
1324
|
return m.id === instructionId;
|
|
1291
1325
|
});
|
|
@@ -1303,33 +1337,33 @@ var Spirits = {
|
|
|
1303
1337
|
}
|
|
1304
1338
|
}, _loop);
|
|
1305
1339
|
});
|
|
1306
|
-
|
|
1307
|
-
case
|
|
1308
|
-
if ((
|
|
1309
|
-
_context2.next =
|
|
1340
|
+
_iterator6.s();
|
|
1341
|
+
case 102:
|
|
1342
|
+
if ((_step6 = _iterator6.n()).done) {
|
|
1343
|
+
_context2.next = 106;
|
|
1310
1344
|
break;
|
|
1311
1345
|
}
|
|
1312
|
-
return _context2.delegateYield(_loop(), "t0",
|
|
1313
|
-
case
|
|
1314
|
-
_context2.next =
|
|
1346
|
+
return _context2.delegateYield(_loop(), "t0", 104);
|
|
1347
|
+
case 104:
|
|
1348
|
+
_context2.next = 102;
|
|
1315
1349
|
break;
|
|
1316
|
-
case
|
|
1317
|
-
_context2.next =
|
|
1350
|
+
case 106:
|
|
1351
|
+
_context2.next = 111;
|
|
1318
1352
|
break;
|
|
1319
|
-
case 102:
|
|
1320
|
-
_context2.prev = 102;
|
|
1321
|
-
_context2.t1 = _context2["catch"](93);
|
|
1322
|
-
_iterator5.e(_context2.t1);
|
|
1323
|
-
case 105:
|
|
1324
|
-
_context2.prev = 105;
|
|
1325
|
-
_iterator5.f();
|
|
1326
|
-
return _context2.finish(105);
|
|
1327
1353
|
case 108:
|
|
1354
|
+
_context2.prev = 108;
|
|
1355
|
+
_context2.t1 = _context2["catch"](99);
|
|
1356
|
+
_iterator6.e(_context2.t1);
|
|
1357
|
+
case 111:
|
|
1358
|
+
_context2.prev = 111;
|
|
1359
|
+
_iterator6.f();
|
|
1360
|
+
return _context2.finish(111);
|
|
1361
|
+
case 114:
|
|
1328
1362
|
if (!manualMessage) {
|
|
1329
|
-
_context2.next =
|
|
1363
|
+
_context2.next = 130;
|
|
1330
1364
|
break;
|
|
1331
1365
|
}
|
|
1332
|
-
/** @type {import('@scout9/
|
|
1366
|
+
/** @type {import('@scout9/admin').Message} */
|
|
1333
1367
|
manualMessageObj = {
|
|
1334
1368
|
id: idGenerator('persona'),
|
|
1335
1369
|
role: 'agent',
|
|
@@ -1338,25 +1372,25 @@ var Spirits = {
|
|
|
1338
1372
|
time: new Date().toISOString()
|
|
1339
1373
|
};
|
|
1340
1374
|
if (!(_typeof(manualMessage) === 'object')) {
|
|
1341
|
-
_context2.next =
|
|
1375
|
+
_context2.next = 122;
|
|
1342
1376
|
break;
|
|
1343
1377
|
}
|
|
1344
1378
|
Object.assign(manualMessageObj, manualMessage);
|
|
1345
1379
|
manualMessageObj.role = 'agent';
|
|
1346
1380
|
manualMessageObj.time = new Date().toISOString();
|
|
1347
|
-
_context2.next =
|
|
1381
|
+
_context2.next = 127;
|
|
1348
1382
|
break;
|
|
1349
|
-
case
|
|
1383
|
+
case 122:
|
|
1350
1384
|
if (!(typeof manualMessage === 'string')) {
|
|
1351
|
-
_context2.next =
|
|
1385
|
+
_context2.next = 126;
|
|
1352
1386
|
break;
|
|
1353
1387
|
}
|
|
1354
1388
|
manualMessageObj.content = manualMessage;
|
|
1355
|
-
_context2.next =
|
|
1389
|
+
_context2.next = 127;
|
|
1356
1390
|
break;
|
|
1357
|
-
case
|
|
1391
|
+
case 126:
|
|
1358
1392
|
throw new Error('Manual message must be of type "string" or "DirectMessage"');
|
|
1359
|
-
case
|
|
1393
|
+
case 127:
|
|
1360
1394
|
if (scheduled) {
|
|
1361
1395
|
manualMessageObj.time = new Date(scheduled * 1000).toISOString();
|
|
1362
1396
|
manualMessageObj.scheduled = manualMessageObj.time;
|
|
@@ -1368,7 +1402,7 @@ var Spirits = {
|
|
|
1368
1402
|
}
|
|
1369
1403
|
messages.push(manualMessageObj);
|
|
1370
1404
|
progress('Added manual message', 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
|
|
1371
|
-
case
|
|
1405
|
+
case 130:
|
|
1372
1406
|
if (contextUpsert) {
|
|
1373
1407
|
context = updateContext(context, contextUpsert);
|
|
1374
1408
|
progress('Upserted context', 'info', 'UPDATE_CONTEXT', contextUpsert);
|
|
@@ -1376,21 +1410,21 @@ var Spirits = {
|
|
|
1376
1410
|
if (resetIntent) {
|
|
1377
1411
|
resettedIntent = true;
|
|
1378
1412
|
}
|
|
1379
|
-
case
|
|
1380
|
-
_context2.next =
|
|
1413
|
+
case 132:
|
|
1414
|
+
_context2.next = 63;
|
|
1381
1415
|
break;
|
|
1382
|
-
case
|
|
1383
|
-
_context2.next =
|
|
1416
|
+
case 134:
|
|
1417
|
+
_context2.next = 139;
|
|
1384
1418
|
break;
|
|
1385
|
-
case 130:
|
|
1386
|
-
_context2.prev = 130;
|
|
1387
|
-
_context2.t2 = _context2["catch"](55);
|
|
1388
|
-
_iterator.e(_context2.t2);
|
|
1389
|
-
case 133:
|
|
1390
|
-
_context2.prev = 133;
|
|
1391
|
-
_iterator.f();
|
|
1392
|
-
return _context2.finish(133);
|
|
1393
1419
|
case 136:
|
|
1420
|
+
_context2.prev = 136;
|
|
1421
|
+
_context2.t2 = _context2["catch"](61);
|
|
1422
|
+
_iterator2.e(_context2.t2);
|
|
1423
|
+
case 139:
|
|
1424
|
+
_context2.prev = 139;
|
|
1425
|
+
_iterator2.f();
|
|
1426
|
+
return _context2.finish(139);
|
|
1427
|
+
case 142:
|
|
1394
1428
|
if (resettedIntent && !_forward) {
|
|
1395
1429
|
conversation.intent = null;
|
|
1396
1430
|
conversation.intentScore = null;
|
|
@@ -1406,17 +1440,17 @@ var Spirits = {
|
|
|
1406
1440
|
});
|
|
1407
1441
|
}
|
|
1408
1442
|
|
|
1409
|
-
//
|
|
1443
|
+
// 5. Generate response
|
|
1410
1444
|
// If conversation previously locked, don't generate
|
|
1411
1445
|
if (input.conversation.locked) {
|
|
1412
|
-
_context2.next =
|
|
1446
|
+
_context2.next = 194;
|
|
1413
1447
|
break;
|
|
1414
1448
|
}
|
|
1415
1449
|
if (!((!conversation.locked || !hasNoInstructions) && !!hasNoCustomMessage)) {
|
|
1416
|
-
_context2.next =
|
|
1450
|
+
_context2.next = 160;
|
|
1417
1451
|
break;
|
|
1418
1452
|
}
|
|
1419
|
-
_context2.prev =
|
|
1453
|
+
_context2.prev = 145;
|
|
1420
1454
|
progress('Generating message', 'info', 'SET_PROCESSING', 'system');
|
|
1421
1455
|
|
|
1422
1456
|
/** @type {import('@scout9/admin').GenerateRequestOneOf1} */
|
|
@@ -1430,9 +1464,9 @@ var Spirits = {
|
|
|
1430
1464
|
if (!!_tasks && Array.isArray(_tasks) && !!_tasks.length) {
|
|
1431
1465
|
generatorInput.tasks = _tasks;
|
|
1432
1466
|
}
|
|
1433
|
-
_context2.next =
|
|
1467
|
+
_context2.next = 151;
|
|
1434
1468
|
return generator(generatorInput);
|
|
1435
|
-
case
|
|
1469
|
+
case 151:
|
|
1436
1470
|
generatorPayload = _context2.sent;
|
|
1437
1471
|
if (!generatorPayload.send) {
|
|
1438
1472
|
progress('Generated response', 'failed', undefined, {
|
|
@@ -1483,17 +1517,17 @@ var Spirits = {
|
|
|
1483
1517
|
// Error should not have happened
|
|
1484
1518
|
conversation = lockConversation(conversation, 'Duplicate message');
|
|
1485
1519
|
} else {
|
|
1486
|
-
|
|
1520
|
+
_iterator3 = _createForOfIteratorHelper(addedMessages);
|
|
1487
1521
|
try {
|
|
1488
|
-
for (
|
|
1489
|
-
newMessage =
|
|
1522
|
+
for (_iterator3.s(); !(_step3 = _iterator3.n()).done;) {
|
|
1523
|
+
newMessage = _step3.value;
|
|
1490
1524
|
messages.push(newMessage);
|
|
1491
1525
|
progress('Added agent message', 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
|
|
1492
1526
|
}
|
|
1493
1527
|
} catch (err) {
|
|
1494
|
-
|
|
1528
|
+
_iterator3.e(err);
|
|
1495
1529
|
} finally {
|
|
1496
|
-
|
|
1530
|
+
_iterator3.f();
|
|
1497
1531
|
}
|
|
1498
1532
|
}
|
|
1499
1533
|
|
|
@@ -1506,30 +1540,30 @@ var Spirits = {
|
|
|
1506
1540
|
}
|
|
1507
1541
|
}
|
|
1508
1542
|
}
|
|
1509
|
-
_context2.next =
|
|
1543
|
+
_context2.next = 160;
|
|
1510
1544
|
break;
|
|
1511
|
-
case
|
|
1512
|
-
_context2.prev =
|
|
1513
|
-
_context2.t3 = _context2["catch"](
|
|
1545
|
+
case 155:
|
|
1546
|
+
_context2.prev = 155;
|
|
1547
|
+
_context2.t3 = _context2["catch"](145);
|
|
1514
1548
|
onError(_context2.t3);
|
|
1515
1549
|
console.error("Spirits: Locking conversation, error generating response: ".concat(_context2.t3.message));
|
|
1516
1550
|
conversation = lockConversation(conversation, 'API: ' + _context2.t3.message);
|
|
1517
|
-
case
|
|
1551
|
+
case 160:
|
|
1518
1552
|
if (!(messagesToTransform.length && transformer)) {
|
|
1519
|
-
_context2.next =
|
|
1553
|
+
_context2.next = 193;
|
|
1520
1554
|
break;
|
|
1521
1555
|
}
|
|
1522
|
-
_context2.prev =
|
|
1523
|
-
|
|
1524
|
-
_context2.prev =
|
|
1525
|
-
|
|
1526
|
-
case
|
|
1527
|
-
if ((
|
|
1528
|
-
_context2.next =
|
|
1556
|
+
_context2.prev = 161;
|
|
1557
|
+
_iterator4 = _createForOfIteratorHelper(messagesToTransform);
|
|
1558
|
+
_context2.prev = 163;
|
|
1559
|
+
_iterator4.s();
|
|
1560
|
+
case 165:
|
|
1561
|
+
if ((_step4 = _iterator4.n()).done) {
|
|
1562
|
+
_context2.next = 176;
|
|
1529
1563
|
break;
|
|
1530
1564
|
}
|
|
1531
|
-
|
|
1532
|
-
_context2.next =
|
|
1565
|
+
_step4.value;
|
|
1566
|
+
_context2.next = 169;
|
|
1533
1567
|
return transformer({
|
|
1534
1568
|
message: messagesToTransform,
|
|
1535
1569
|
persona: persona,
|
|
@@ -1537,7 +1571,7 @@ var Spirits = {
|
|
|
1537
1571
|
messages: messages,
|
|
1538
1572
|
context: context
|
|
1539
1573
|
});
|
|
1540
|
-
case
|
|
1574
|
+
case 169:
|
|
1541
1575
|
transformResponse = _context2.sent;
|
|
1542
1576
|
progress('Generated response', 'success', undefined, undefined);
|
|
1543
1577
|
// Check if already had message
|
|
@@ -1557,37 +1591,37 @@ var Spirits = {
|
|
|
1557
1591
|
});
|
|
1558
1592
|
progress('Added agent message', 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
|
|
1559
1593
|
}
|
|
1560
|
-
case
|
|
1561
|
-
_context2.next =
|
|
1594
|
+
case 174:
|
|
1595
|
+
_context2.next = 165;
|
|
1562
1596
|
break;
|
|
1563
|
-
case
|
|
1564
|
-
_context2.next =
|
|
1597
|
+
case 176:
|
|
1598
|
+
_context2.next = 181;
|
|
1565
1599
|
break;
|
|
1566
|
-
case 172:
|
|
1567
|
-
_context2.prev = 172;
|
|
1568
|
-
_context2.t4 = _context2["catch"](157);
|
|
1569
|
-
_iterator3.e(_context2.t4);
|
|
1570
|
-
case 175:
|
|
1571
|
-
_context2.prev = 175;
|
|
1572
|
-
_iterator3.f();
|
|
1573
|
-
return _context2.finish(175);
|
|
1574
1600
|
case 178:
|
|
1575
|
-
_context2.
|
|
1601
|
+
_context2.prev = 178;
|
|
1602
|
+
_context2.t4 = _context2["catch"](163);
|
|
1603
|
+
_iterator4.e(_context2.t4);
|
|
1604
|
+
case 181:
|
|
1605
|
+
_context2.prev = 181;
|
|
1606
|
+
_iterator4.f();
|
|
1607
|
+
return _context2.finish(181);
|
|
1608
|
+
case 184:
|
|
1609
|
+
_context2.next = 191;
|
|
1576
1610
|
break;
|
|
1577
|
-
case
|
|
1578
|
-
_context2.prev =
|
|
1579
|
-
_context2.t5 = _context2["catch"](
|
|
1611
|
+
case 186:
|
|
1612
|
+
_context2.prev = 186;
|
|
1613
|
+
_context2.t5 = _context2["catch"](161);
|
|
1580
1614
|
console.error("Locking conversation, error transforming response: ".concat(_context2.t5.message));
|
|
1581
1615
|
conversation = lockConversation(conversation, 'API: ' + _context2.t5.message);
|
|
1582
1616
|
onError(_context2.t5);
|
|
1583
|
-
case
|
|
1584
|
-
_context2.next =
|
|
1617
|
+
case 191:
|
|
1618
|
+
_context2.next = 194;
|
|
1585
1619
|
break;
|
|
1586
|
-
case
|
|
1620
|
+
case 193:
|
|
1587
1621
|
if (messagesToTransform.length) {
|
|
1588
1622
|
console.warn("No transformer provided");
|
|
1589
1623
|
}
|
|
1590
|
-
case
|
|
1624
|
+
case 194:
|
|
1591
1625
|
progress('Parsing message', 'info', 'SET_PROCESSING', null);
|
|
1592
1626
|
return _context2.abrupt("return", {
|
|
1593
1627
|
conversation: {
|
|
@@ -1611,11 +1645,11 @@ var Spirits = {
|
|
|
1611
1645
|
followup: followup,
|
|
1612
1646
|
entityContextUpsert: entityContextUpsert
|
|
1613
1647
|
});
|
|
1614
|
-
case
|
|
1648
|
+
case 196:
|
|
1615
1649
|
case "end":
|
|
1616
1650
|
return _context2.stop();
|
|
1617
1651
|
}
|
|
1618
|
-
}, _callee, null, [[
|
|
1652
|
+
}, _callee, null, [[61, 136, 139, 142], [99, 108, 111, 114], [145, 155], [161, 186], [163, 178, 181, 184]]);
|
|
1619
1653
|
}));
|
|
1620
1654
|
function customer(_x) {
|
|
1621
1655
|
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-0102b73f.cjs");
|
|
6
|
+
require("./spirits-6abaf567.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,15 @@ export const Spirits = {
|
|
|
352
360
|
})));
|
|
353
361
|
}
|
|
354
362
|
|
|
355
|
-
// 3. Run the
|
|
363
|
+
// 3. Run the contextualizer
|
|
364
|
+
progress('Running contextualizer', 'info', 'SET_PROCESSING', 'system')
|
|
365
|
+
const newContextMessages = await contextualizer({conversation, messages});
|
|
366
|
+
for (const contextMessage of newContextMessages) {
|
|
367
|
+
messages.push(contextMessage);
|
|
368
|
+
progress(`Added context`, 'info', 'ADD_MESSAGE', messages[messages.length - 1]);
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
// 4. Run the workflow
|
|
356
372
|
progress('Running workflow', 'info', 'SET_PROCESSING', 'system');
|
|
357
373
|
|
|
358
374
|
const slots = await workflow({
|
|
@@ -543,7 +559,7 @@ export const Spirits = {
|
|
|
543
559
|
|
|
544
560
|
if (manualMessage) {
|
|
545
561
|
|
|
546
|
-
/** @type {import('@scout9/
|
|
562
|
+
/** @type {import('@scout9/admin').Message} */
|
|
547
563
|
let manualMessageObj = {
|
|
548
564
|
id: idGenerator('persona'),
|
|
549
565
|
role: 'agent', // @TODO switch role to persona
|
|
@@ -598,7 +614,7 @@ export const Spirits = {
|
|
|
598
614
|
);
|
|
599
615
|
}
|
|
600
616
|
|
|
601
|
-
//
|
|
617
|
+
// 5. Generate response
|
|
602
618
|
// If conversation previously locked, don't generate
|
|
603
619
|
if (!input.conversation.locked) {
|
|
604
620
|
// If conversation is newly locked, don't generate, unless instructions were provided and no custom messages were provided
|
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": "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BlBC,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
|
}
|