theprogrammablemind_4wp 7.4.0-beta.0 → 7.4.0-beta.2
Sign up to get free protection for your applications and to get access to all the features.
- package/client.js +75 -43
- package/package.json +1 -1
- package/src/config.js +53 -3
- package/src/generators.js +2 -2
- package/src/semantics.js +7 -3
package/client.js
CHANGED
@@ -12,14 +12,16 @@ const { appendNoDups, InitCalls } = require('./src/helpers')
|
|
12
12
|
const runtime = require('./runtime')
|
13
13
|
const sortJson = runtime.sortJson
|
14
14
|
|
15
|
-
const
|
15
|
+
const getAsk = (config) => (uuid) => (asks) => {
|
16
16
|
for (let ask of asks) {
|
17
17
|
config.addMotivation({
|
18
|
+
uuid,
|
18
19
|
match: (args) => ask.matchr(args),
|
19
20
|
apply: (args) => ask.applyr(args)
|
20
21
|
})
|
21
22
|
}
|
22
23
|
config.addMotivation({
|
24
|
+
uuid,
|
23
25
|
match: ({context}) => context.marker == 'controlEnd' || context.marker == 'controlBetween',
|
24
26
|
apply: (args) => {
|
25
27
|
for (let ask of asks) {
|
@@ -100,7 +102,25 @@ const setupArgs = (args, config, logs, hierarchy) => {
|
|
100
102
|
args.listable = listable(hierarchy)
|
101
103
|
args.asList = asList
|
102
104
|
args.retry = () => { throw new RetryError() }
|
103
|
-
|
105
|
+
const scopedAsk = getAsk(config)
|
106
|
+
|
107
|
+
const getAPI = (uuid) => {
|
108
|
+
if (config && config.getAPI) {
|
109
|
+
return config.getAPI(uuid)
|
110
|
+
}
|
111
|
+
}
|
112
|
+
const getAPIs = (uuid) => {
|
113
|
+
if (config && config.getAPIs) {
|
114
|
+
return config.getAPIs(uuid)
|
115
|
+
}
|
116
|
+
}
|
117
|
+
args.getUUIDScoped = (uuid) => {
|
118
|
+
return {
|
119
|
+
ask: scopedAsk(uuid),
|
120
|
+
api: getAPI(uuid),
|
121
|
+
apis: getAPIs(uuid)
|
122
|
+
}
|
123
|
+
}
|
104
124
|
args.motivation = (m) => config.addMotivation(m)
|
105
125
|
args.s = (c) => config.getSemantics(logs).apply(args, c)
|
106
126
|
args.g = (c) => config.getGenerators(logs).apply(args, c)
|
@@ -486,7 +506,7 @@ const processInstance = (config, instance) => {
|
|
486
506
|
global.transitoryMode = transitoryMode
|
487
507
|
}
|
488
508
|
|
489
|
-
const _process = async (config, query, { credentials, writeTests, isTest, saveDeveloper, testConfig, testsFN, errorHandler = defaultErrorHandler
|
509
|
+
const _process = async (config, query, { credentials, writeTests, isTest, saveDeveloper, testConfig, testsFN, errorHandler = defaultErrorHandler } = {}) => {
|
490
510
|
if (credentials) {
|
491
511
|
config.server(credentials.server, credentials.key)
|
492
512
|
}
|
@@ -499,7 +519,7 @@ const _process = async (config, query, { credentials, writeTests, isTest, saveDe
|
|
499
519
|
if (writeTests) {
|
500
520
|
config.rebuild()
|
501
521
|
const objects = getObjects(config.config.objects)(config.uuid)
|
502
|
-
beforeQuery({ query, isModule: false, objects })
|
522
|
+
config.beforeQuery({ query, isModule: false, objects })
|
503
523
|
}
|
504
524
|
} catch(error) {
|
505
525
|
throw error
|
@@ -600,7 +620,7 @@ const getConfigForTest = (config, testConfig) => {
|
|
600
620
|
return configForTest
|
601
621
|
}
|
602
622
|
|
603
|
-
const runTest = async (config, expected, { verbose,
|
623
|
+
const runTest = async (config, expected, { verbose, afterTest, testConfig, debug }) => {
|
604
624
|
const test = expected.query
|
605
625
|
// initialize in between test so state is not preserved since the test was adding without state
|
606
626
|
config.rebuild()
|
@@ -618,7 +638,7 @@ const runTest = async (config, expected, { verbose, beforeQuery, afterTest, test
|
|
618
638
|
}
|
619
639
|
|
620
640
|
const objects = getObjects(config.config.objects)(config.uuid)
|
621
|
-
beforeQuery({ query: test, isModule: false, objects })
|
641
|
+
config.beforeQuery({ query: test, isModule: false, objects })
|
622
642
|
config.resetMotivations()
|
623
643
|
try {
|
624
644
|
const result = await _process(config, test, { errorHandler, isTest: true })
|
@@ -644,8 +664,8 @@ const runTest = async (config, expected, { verbose, beforeQuery, afterTest, test
|
|
644
664
|
const failed_config = !matching(actual_config, expected_config)
|
645
665
|
let failed = failed_paraphrases || failed_responses || failed_contexts || failed_objects || failed_config
|
646
666
|
if (!failed) {
|
647
|
-
if (afterTest) {
|
648
|
-
failed = afterTest({ query: test, expected, actual: result, config })
|
667
|
+
if (config.afterTest) {
|
668
|
+
failed = config.afterTest({ query: test, expected, actual: result, config })
|
649
669
|
if (failed) {
|
650
670
|
return {
|
651
671
|
utterance: test,
|
@@ -705,21 +725,20 @@ const runTestsHelper = async (config, tests, failed, juicyBits) => {
|
|
705
725
|
|
706
726
|
const runTests = async (config, testFile, juicyBits) => {
|
707
727
|
const tests = JSON.parse(runtime.fs.readFileSync(testFile))
|
708
|
-
|
709
|
-
beforeTests()
|
728
|
+
config.beforeTests()
|
710
729
|
if (juicyBits.verbose) {
|
711
730
|
console.log('\n', testFile, '-----------------------------------------------', '\n')
|
712
731
|
}
|
713
732
|
const v = await runTestsHelper(config, [...tests], [], juicyBits)
|
714
|
-
afterTests()
|
733
|
+
config.afterTests()
|
715
734
|
return v
|
716
735
|
}
|
717
736
|
|
718
|
-
const saveTest = async (testFile, config, test, expected,
|
737
|
+
const saveTest = async (testFile, config, test, expected, testConfig, saveDeveloper) => {
|
719
738
|
config.rebuild()
|
720
739
|
const objects = getObjects(config.config.objects)(config.uuid)
|
721
740
|
config.resetMotivations()
|
722
|
-
beforeQuery({ query: test, isModule: false, objects })
|
741
|
+
config.beforeQuery({ query: test, isModule: false, objects })
|
723
742
|
console.log(test)
|
724
743
|
const result = await _process(config, test, { isTest: true })
|
725
744
|
// const actualObjects = config.config.objects
|
@@ -727,23 +746,23 @@ const saveTest = async (testFile, config, test, expected, beforeQuery, testConfi
|
|
727
746
|
writeTest(testFile, test, config.config.objects, result.generated, result.paraphrases, result.responses, result.contexts, result.associations, result.metadata, actualConfig, saveDeveloper)
|
728
747
|
}
|
729
748
|
|
730
|
-
const saveTestsHelper = async (testFile, config, tests, todo,
|
749
|
+
const saveTestsHelper = async (testFile, config, tests, todo, testConfig, saveDeveloper) => {
|
731
750
|
if (todo.length === 0) {
|
732
751
|
return
|
733
752
|
}
|
734
753
|
const test = todo.pop()
|
735
754
|
config.rebuild()
|
736
|
-
const result = await saveTest(testFile, config, test, tests[test],
|
755
|
+
const result = await saveTest(testFile, config, test, tests[test], testConfig, saveDeveloper)
|
737
756
|
// initialize in between test so state is not preserved since the test was adding without state
|
738
757
|
// config.initialize({force: true})
|
739
758
|
config.rebuild()
|
740
|
-
return saveTestsHelper(testFile, config, tests, todo,
|
759
|
+
return saveTestsHelper(testFile, config, tests, todo, testConfig, saveDeveloper)
|
741
760
|
}
|
742
761
|
|
743
|
-
const saveTests = (config, testFile,
|
762
|
+
const saveTests = (config, testFile, testConfig) => {
|
744
763
|
const tests = JSON.parse(runtime.fs.readFileSync(testFile))
|
745
764
|
console.log(testFile)
|
746
|
-
return saveTestsHelper(testFile, config, tests, tests.map( (test) => test.query ),
|
765
|
+
return saveTestsHelper(testFile, config, tests, tests.map( (test) => test.query ), testConfig)
|
747
766
|
}
|
748
767
|
|
749
768
|
/*
|
@@ -964,7 +983,7 @@ entodicton.knowledgeModule( {
|
|
964
983
|
`
|
965
984
|
*/
|
966
985
|
|
967
|
-
const build = async ({ config, target,
|
986
|
+
const build = async ({ config, target, template, errorHandler = defaultErrorHandler }) => {
|
968
987
|
const accumulators = {
|
969
988
|
resultss: [],
|
970
989
|
fragments: [],
|
@@ -1002,7 +1021,7 @@ const build = async ({ config, target, beforeQuery, template, errorHandler = def
|
|
1002
1021
|
}
|
1003
1022
|
|
1004
1023
|
try {
|
1005
|
-
const results = await _process(config, query.query, {
|
1024
|
+
const results = await _process(config, query.query, {})
|
1006
1025
|
if (config.config.debug) {
|
1007
1026
|
// TODO pass in the error handler like the other ones
|
1008
1027
|
defaultInnerProcess(config, defaultErrorHandler, results)
|
@@ -1099,11 +1118,40 @@ const knowledgeModule = async ({
|
|
1099
1118
|
afterTest = () => {}
|
1100
1119
|
} = {}) => {
|
1101
1120
|
|
1102
|
-
|
1121
|
+
config.beforeQuery = beforeQuery
|
1122
|
+
config.beforeTests = beforeTests
|
1123
|
+
config.afterTests = afterTests
|
1124
|
+
config.beforeTest = beforeTest
|
1125
|
+
config.afterTest = afterTest
|
1126
|
+
|
1103
1127
|
const testConfig = test
|
1104
1128
|
|
1129
|
+
if (!moduleFromJSFile) {
|
1130
|
+
throw "'module' is a required parameter. The value should be either 'module' or a lambda that will be called when the file is acting as a module."
|
1131
|
+
}
|
1132
|
+
if (!config) {
|
1133
|
+
throw "'config' is a required parameter. The value should the config that defines the knowledge module."
|
1134
|
+
}
|
1135
|
+
if (!config.name) {
|
1136
|
+
throw "config must have 'name' set to the knowledge module name."
|
1137
|
+
}
|
1138
|
+
if (!description) {
|
1139
|
+
throw "'description' is a required parameter. The value should the description of the knowledge module."
|
1140
|
+
}
|
1141
|
+
if (!test) {
|
1142
|
+
throw "'test' is a required parameter. The value should the path to the file used to store the tests of the knowledge module and the contents of the file in the form { name: <filePath>, contexts: <json> }."
|
1143
|
+
}
|
1144
|
+
|
1145
|
+
const isProcess = require.main === moduleFromJSFile
|
1146
|
+
let loadForTesting = false
|
1147
|
+
if (global.theprogrammablemind) {
|
1148
|
+
if (global.theprogrammablemind.loadForTesting[config.name]) {
|
1149
|
+
loadForTesting = true
|
1150
|
+
}
|
1151
|
+
}
|
1152
|
+
|
1105
1153
|
// remove test only stuff
|
1106
|
-
if (!isProcess) {
|
1154
|
+
if (!isProcess && !loadForTesting) {
|
1107
1155
|
config.config.operators = config.config.operators.filter( (operator) => {
|
1108
1156
|
if (operator.development) {
|
1109
1157
|
return false
|
@@ -1120,22 +1168,6 @@ const knowledgeModule = async ({
|
|
1120
1168
|
})
|
1121
1169
|
}
|
1122
1170
|
|
1123
|
-
if (!moduleFromJSFile) {
|
1124
|
-
throw "'module' is a required parameter. The value should be either 'module' or a lambda that will be called when the file is acting as a module."
|
1125
|
-
}
|
1126
|
-
if (!config) {
|
1127
|
-
throw "'config' is a required parameter. The value should the config that defines the knowledge module."
|
1128
|
-
}
|
1129
|
-
if (!config.name) {
|
1130
|
-
throw "config must have 'name' set to the knowledge module name."
|
1131
|
-
}
|
1132
|
-
if (!description) {
|
1133
|
-
throw "'description' is a required parameter. The value should the description of the knowledge module."
|
1134
|
-
}
|
1135
|
-
if (!test) {
|
1136
|
-
throw "'test' is a required parameter. The value should the path to the file used to store the tests of the knowledge module and the contents of the file in the form { name: <filePath>, contexts: <json> }."
|
1137
|
-
}
|
1138
|
-
|
1139
1171
|
let module
|
1140
1172
|
if (_.isFunction(moduleFromJSFile)) {
|
1141
1173
|
module = moduleFromJSFile
|
@@ -1174,6 +1206,7 @@ const knowledgeModule = async ({
|
|
1174
1206
|
description: 'Entodicton knowledge module'
|
1175
1207
|
})
|
1176
1208
|
|
1209
|
+
parser.add_argument('-tfn', '--testFileName', { help: 'Override the test file for the module when the tests are being run' })
|
1177
1210
|
parser.add_argument('-t', '--test', { action: 'store_true', help: 'Run the tests. Create tests by running with the --query + --save flag' })
|
1178
1211
|
parser.add_argument('-tv', '--testVerbose', { action: 'store_true', help: 'Run the tests in verbose mode. Create tests by running with the --query or --loop with the --save flag' })
|
1179
1212
|
parser.add_argument('-tva', '--testAllVerbose', { action: 'store_true', help: 'Run the tests in verbose mode. All the tests will be run instead of stopping at first failure. Create tests by running with the --query or --loop with the --save flag' })
|
@@ -1368,9 +1401,8 @@ const knowledgeModule = async ({
|
|
1368
1401
|
|
1369
1402
|
if (!args.query && !args.test && !args.info && (args.save || args.saveDeveloper)) {
|
1370
1403
|
global.transitoryMode = true
|
1371
|
-
saveTests(config, test,
|
1404
|
+
saveTests(config, test, testConfig, args.saveDeveloper)
|
1372
1405
|
// } else if (args.build) {
|
1373
|
-
// build({ config, target: args.build, beforeQuery, errorHandler })
|
1374
1406
|
} else if (args.info) {
|
1375
1407
|
showInfo(description, section, config)
|
1376
1408
|
} else if (args.test || args.testVerbose || args.testAllVerbose) {
|
@@ -1383,7 +1415,7 @@ const knowledgeModule = async ({
|
|
1383
1415
|
}
|
1384
1416
|
return
|
1385
1417
|
}
|
1386
|
-
runTests(config, test, { debug: args.debug, testConfig: testConfig, verbose: args.testVerbose || args.testAllVerbose, stopAtFirstError: !args.testAllVerbose
|
1418
|
+
runTests(config, args.testFileName ? `${args.testFileName}.test.json` : test, { debug: args.debug, testConfig: testConfig, verbose: args.testVerbose || args.testAllVerbose, stopAtFirstError: !args.testAllVerbose }).then((results) => {
|
1387
1419
|
if (results.length > 0 && args.vimdiff) {
|
1388
1420
|
for (const result of results) {
|
1389
1421
|
vimdiff(result.expected, result.actual)
|
@@ -1456,9 +1488,9 @@ const knowledgeModule = async ({
|
|
1456
1488
|
if (args.objectDiff) {
|
1457
1489
|
global.beforeObjects = _.cloneDeep(objects)
|
1458
1490
|
}
|
1459
|
-
beforeQuery({ query: args.query, isModule: false, objects })
|
1491
|
+
config.beforeQuery({ query: args.query, isModule: false, objects })
|
1460
1492
|
try {
|
1461
|
-
processResults(_process(config, args.query, { dontAddAssociations: args.dontAddAssociations, writeTests: args.save || args.saveDeveloper, saveDeveloper: args.saveDeveloper, testConfig, testsFN: test
|
1493
|
+
processResults(_process(config, args.query, { dontAddAssociations: args.dontAddAssociations, writeTests: args.save || args.saveDeveloper, saveDeveloper: args.saveDeveloper, testConfig, testsFN: test }))
|
1462
1494
|
} catch( error ) {
|
1463
1495
|
console.log('Error', error);
|
1464
1496
|
}
|
package/package.json
CHANGED
package/src/config.js
CHANGED
@@ -767,6 +767,23 @@ class Config {
|
|
767
767
|
}
|
768
768
|
}
|
769
769
|
|
770
|
+
getAPIs (uuid) {
|
771
|
+
let config
|
772
|
+
if (this._uuid === uuid) {
|
773
|
+
config = this
|
774
|
+
} else {
|
775
|
+
for (const km of this.configs) {
|
776
|
+
if (km._uuid === uuid) {
|
777
|
+
config = km.config
|
778
|
+
break
|
779
|
+
}
|
780
|
+
}
|
781
|
+
}
|
782
|
+
if (config && config._api && config._api.multiApi) {
|
783
|
+
return config._api.apis
|
784
|
+
}
|
785
|
+
}
|
786
|
+
|
770
787
|
getServer() {
|
771
788
|
return this._server
|
772
789
|
}
|
@@ -888,6 +905,19 @@ class Config {
|
|
888
905
|
return configs;
|
889
906
|
}
|
890
907
|
|
908
|
+
getConfigByUUID (uuid) {
|
909
|
+
if (this.uuid === uuid) {
|
910
|
+
return this
|
911
|
+
}
|
912
|
+
for (const config of this.configs) {
|
913
|
+
if (config.config instanceof Config) {
|
914
|
+
if (config.uuid === uuid) {
|
915
|
+
return config.config
|
916
|
+
}
|
917
|
+
}
|
918
|
+
}
|
919
|
+
}
|
920
|
+
|
891
921
|
getConfig (name) {
|
892
922
|
if (this.name === name) {
|
893
923
|
return this
|
@@ -932,7 +962,13 @@ class Config {
|
|
932
962
|
}
|
933
963
|
|
934
964
|
this.addedArgss = []
|
935
|
-
|
965
|
+
let isProcess = require.main === module
|
966
|
+
if (global.theprogrammablemind && config) {
|
967
|
+
if (global.theprogrammablemind.loadForTesting[config.name]) {
|
968
|
+
isProcess = true
|
969
|
+
this.loadedForTesting = true
|
970
|
+
}
|
971
|
+
}
|
936
972
|
this.isModule = !isProcess
|
937
973
|
if (this.isModule) {
|
938
974
|
this.removeDevelopmentElements(config)
|
@@ -1198,6 +1234,9 @@ class Config {
|
|
1198
1234
|
|
1199
1235
|
// motivation === { match, apply, uuid }
|
1200
1236
|
addMotivation (motivation) {
|
1237
|
+
if (!motivation.uuid) {
|
1238
|
+
motivation.uuid = this.uuid
|
1239
|
+
}
|
1201
1240
|
this.motivations.push(motivation)
|
1202
1241
|
}
|
1203
1242
|
|
@@ -1207,11 +1246,13 @@ class Config {
|
|
1207
1246
|
|
1208
1247
|
doMotivations (args, context) {
|
1209
1248
|
args = Object.assign({}, args, { context })
|
1210
|
-
|
1249
|
+
// console.log('src/config doMotivations this.uuid', this.uuid)
|
1250
|
+
// args.objects = args.getObjects(this.uuid)
|
1211
1251
|
const motivations = this.motivations
|
1212
1252
|
this.motivations = []
|
1213
1253
|
let done = false
|
1214
1254
|
for (const motivation of motivations) {
|
1255
|
+
args.objects = args.getObjects(motivation.uuid)
|
1215
1256
|
if (!done && motivation.match(args)) {
|
1216
1257
|
motivation.apply(args)
|
1217
1258
|
if (args.context.controlKeepMotivation || motivation.repeat) {
|
@@ -1255,6 +1296,7 @@ class Config {
|
|
1255
1296
|
cp.tests = this.tests
|
1256
1297
|
cp.motivations = this.motivations
|
1257
1298
|
cp.isModule = this.isModule
|
1299
|
+
cp.loadedForTesting = this.loadedForTesting
|
1258
1300
|
cp.initInstances = this.initInstances.slice()
|
1259
1301
|
cp.instances = this.instances.slice()
|
1260
1302
|
cp.configCounter = this.configCounter
|
@@ -1603,6 +1645,12 @@ class Config {
|
|
1603
1645
|
// already set
|
1604
1646
|
// this.isModule = this.isModule || mainIsModule
|
1605
1647
|
mainIsModule = (mainIsModule === undefined) ? this.isModule : mainIsModule
|
1648
|
+
if (mainIsModule !== undefined) {
|
1649
|
+
this.isModule = mainIsModule
|
1650
|
+
}
|
1651
|
+
if (this.loadedForTesting) {
|
1652
|
+
this.isModule = false
|
1653
|
+
}
|
1606
1654
|
this.config.objects.namespaced = {}
|
1607
1655
|
this.resetWasInitialized()
|
1608
1656
|
|
@@ -1640,7 +1688,9 @@ class Config {
|
|
1640
1688
|
if (!(config instanceof Config)) {
|
1641
1689
|
config = this
|
1642
1690
|
isSelf = true
|
1643
|
-
isModule = mainIsModule
|
1691
|
+
isModule = config.isModule || mainIsModule
|
1692
|
+
} else {
|
1693
|
+
isModule = config.isModule
|
1644
1694
|
}
|
1645
1695
|
if (!isSelf) {
|
1646
1696
|
config.config = _.cloneDeep(config.initConfig)
|
package/src/generators.js
CHANGED
@@ -59,7 +59,7 @@ class Generator {
|
|
59
59
|
api: this.getAPI(config),
|
60
60
|
apis: this.getAPIs(config)
|
61
61
|
}
|
62
|
-
const args = Object.assign({}, baseArgs, moreArgs)
|
62
|
+
const args = Object.assign({}, baseArgs, moreArgs, (baseArgs.getUUIDScoped || (() => { return {} }))(this.uuid))
|
63
63
|
// return this.match(args)
|
64
64
|
const matches = this.match(args)
|
65
65
|
if ((matches && (options.debug || {}).match)
|
@@ -106,7 +106,7 @@ class Generator {
|
|
106
106
|
api: this.getAPI(config),
|
107
107
|
apis: this.getAPIs(config)
|
108
108
|
}
|
109
|
-
const args = Object.assign({}, baseArgs, moreArgs)
|
109
|
+
const args = Object.assign({}, baseArgs, moreArgs, (baseArgs.getUUIDScoped || (() => { return {} }))(this.uuid))
|
110
110
|
// if (this.callId) {
|
111
111
|
// greg
|
112
112
|
/*
|
package/src/semantics.js
CHANGED
@@ -45,13 +45,16 @@ class Semantic {
|
|
45
45
|
matches (baseArgs, context, options = {}) {
|
46
46
|
const hierarchy = baseArgs.hierarchy
|
47
47
|
const config = baseArgs.config
|
48
|
+
|
48
49
|
const objects = baseArgs.getObjects(this.uuid)
|
50
|
+
// const ask = baseArgs.getAsk(this.uuid)
|
51
|
+
|
49
52
|
// return this.matcher(Object.assign({}, argsBase, {args: contextArgs(context, hierarchy), objects: objects, global: objects, context: context, hierarchy: hierarchy, api: this.getAPI(config)})
|
50
53
|
const callId = baseArgs.calls.current()
|
51
54
|
const moreArgs = {
|
52
55
|
uuid: this.uuid,
|
53
56
|
args: contextArgs(context, hierarchy),
|
54
|
-
objects
|
57
|
+
objects,
|
55
58
|
global: objects,
|
56
59
|
context: context,
|
57
60
|
// hierarchy: hierarchy,
|
@@ -59,7 +62,7 @@ class Semantic {
|
|
59
62
|
api: this.getAPI(config),
|
60
63
|
apis: this.getAPIs(config)
|
61
64
|
}
|
62
|
-
const args = Object.assign({}, baseArgs, moreArgs)
|
65
|
+
const args = Object.assign({}, baseArgs, moreArgs, (baseArgs.getUUIDScoped || (() => { return {} }))(this.uuid))
|
63
66
|
|
64
67
|
const matches = this.matcher(args)
|
65
68
|
if (matches && (options.debug || {}).match
|
@@ -74,6 +77,7 @@ class Semantic {
|
|
74
77
|
apply (baseArgs, context, s, log, options = {}) {
|
75
78
|
const { hierarchy, config, response } = baseArgs
|
76
79
|
const objects = baseArgs.getObjects(this.uuid)
|
80
|
+
// const ask = baseArgs.getAsk(this.uuid)
|
77
81
|
if (!log) {
|
78
82
|
console.trace()
|
79
83
|
throw 'log is a required argument'
|
@@ -99,7 +103,7 @@ class Semantic {
|
|
99
103
|
api: this.getAPI(config),
|
100
104
|
apis: this.getAPIs(config)
|
101
105
|
}
|
102
|
-
const args = Object.assign({}, baseArgs, moreArgs)
|
106
|
+
const args = Object.assign({}, baseArgs, moreArgs, (baseArgs.getUUIDScoped || (() => { return {} }))(this.uuid))
|
103
107
|
if ((options.debug || {}).apply
|
104
108
|
||
|
105
109
|
callId == this.callId) {
|