ekms 7.12.3 → 7.12.4-beta.1
Sign up to get free protection for your applications and to get access to all the features.
- package/common/animals.instance.json +52 -0
- package/common/avatar.js +1 -2
- package/common/comparable.js +1 -1
- package/common/concept.js +2 -0
- package/common/countable.js +1 -1
- package/common/crew.instance.json +348 -0
- package/common/crew.js +3 -2
- package/common/currency.js +2 -0
- package/common/dialogues.js +7 -3
- package/common/dimension.js +3 -1
- package/common/dimension.test.json +170 -26
- package/common/dimensionTemplate.instance.json +4 -0
- package/common/edible.instance.json +128 -0
- package/common/edible.js +1 -2
- package/common/emotions.instance.json +4 -0
- package/common/emotions.js +2 -0
- package/common/fastfood.instance.json +939 -435
- package/common/fastfood.js +149 -62
- package/common/fastfood.test.json +36474 -985
- package/common/formulas.js +3 -1
- package/common/formulasTemplate.instance.json +4 -0
- package/common/formulasTemplate.js +1 -1
- package/common/help.js +2 -0
- package/common/hierarchy.js +2 -0
- package/common/javascript.js +2 -0
- package/common/kirk.instance.json +4 -0
- package/common/length.instance.json +60 -0
- package/common/math.js +1 -4
- package/common/mathTemplate.instance.json +8 -0
- package/common/mathTemplate.js +1 -1
- package/common/ordering.instance.json +8 -0
- package/common/ordering.js +2 -0
- package/common/people.instance.json +32 -60
- package/common/people.js +2 -0
- package/common/pipboy.js +3 -1
- package/common/pipboy.test.json +13 -5
- package/common/pipboyTemplate.js +1 -1
- package/common/pokemon.instance.json +52 -0
- package/common/pokemon.js +2 -0
- package/common/pressure.instance.json +16 -0
- package/common/properties.instance.json +4 -0
- package/common/properties.js +3 -3
- package/common/reports.instance.json +9 -1
- package/common/reports.js +7 -3
- package/common/scorekeeper.js +3 -3
- package/common/sizeable.js +1 -1
- package/common/spock.instance.json +4 -0
- package/common/stgame.js +2 -0
- package/common/stm.js +21 -6
- package/common/tell.js +2 -0
- package/common/temperature.instance.json +16 -84
- package/common/time.js +2 -0
- package/common/ui.instance.json +4 -0
- package/common/ui.js +3 -1
- package/common/weight.instance.json +48 -0
- package/package.json +2 -2
package/common/fastfood.js
CHANGED
@@ -160,7 +160,6 @@ const template = {
|
|
160
160
|
{ "context": [['smoothie_ingredient', 1], ['list', 0], ['smoothie_ingredient', 1], ['smoothie', 1]], ordered: true, choose: [1] },
|
161
161
|
|
162
162
|
{ "context": [['list', 0], ['number', 1], ['combo', 1], ['number', 1]], ordered: true, choose: [2,3] },
|
163
|
-
{ "context": [['withModification', 0], ['modification', 1], ['list', 0], ['modification', 1]], ordered: true, choose: [2] },
|
164
163
|
|
165
164
|
|
166
165
|
{ context: [['comboNumber', 0], ['counting',0]], choose: [0] },
|
@@ -224,7 +223,7 @@ const template = {
|
|
224
223
|
{
|
225
224
|
id: 'withModification',
|
226
225
|
level: 0,
|
227
|
-
|
226
|
+
before: ['preposition'],
|
228
227
|
generatorp: ({context, gp}) => `with ${gp(context.modifications)}`,
|
229
228
|
bridge: "{ ...next(operator), modifications: after[0], flatten: false }",
|
230
229
|
},
|
@@ -250,7 +249,7 @@ const template = {
|
|
250
249
|
{
|
251
250
|
id: 'comboNumber',
|
252
251
|
convolution: true,
|
253
|
-
before: ['combo'],
|
252
|
+
before: ['combo', 'preposition'],
|
254
253
|
bridge: "{ ...next(before[0]), postModifiers: append(before[0].postModifiers, ['comboNumber']), comboNumber: after[0], instance: true, flatten: true }",
|
255
254
|
},
|
256
255
|
{
|
@@ -297,17 +296,24 @@ const template = {
|
|
297
296
|
const naArray = api.getAskedForButNotAvailable()
|
298
297
|
naArray.forEach((f) => f.paraphrase = true)
|
299
298
|
const naContext = toContext(naArray)
|
300
|
-
/*
|
301
|
-
naContext.isResponse = true
|
302
|
-
naContext.marker = 'verbatim'
|
303
|
-
naContext.verbatim = `The following are not menu items: ${gp(naContext)}`
|
304
|
-
insert(naContext)
|
305
|
-
*/
|
306
299
|
verbatim(`The following are not menu items: ${gp(naContext)}`)
|
307
300
|
// allow other motivation to run
|
308
301
|
context.cascade = true
|
309
302
|
}
|
310
303
|
},
|
304
|
+
{
|
305
|
+
where: where(),
|
306
|
+
match: ({context, api}) => context.marker == 'controlEnd' && api.hasAskedForButNotAvailableModification(),
|
307
|
+
apply: ({context, api, gp, toContext, verbatim}) => {
|
308
|
+
const naArray = api.getAskedForButNotAvailableModification().map(({ item, modification }) => {
|
309
|
+
// return `${gp(item)} can not be modified with ${gp(modification)}.`
|
310
|
+
return `XXX can not be modified with ${gp(modification)}.`
|
311
|
+
})
|
312
|
+
verbatim(naArray.join(' '))
|
313
|
+
// allow other motivation to run
|
314
|
+
context.cascade = true
|
315
|
+
}
|
316
|
+
},
|
311
317
|
]
|
312
318
|
},
|
313
319
|
({ask, api}) => {
|
@@ -342,17 +348,26 @@ const template = {
|
|
342
348
|
{
|
343
349
|
where: where(),
|
344
350
|
oneShot: false,
|
345
|
-
matchq: (args) => askAbout(args).length > 0,
|
351
|
+
matchq: (args) => askAbout(args).length > 0 && args.context.marker == 'controlEnd',
|
346
352
|
applyq: (args) => {
|
347
353
|
args.context.cascade = true
|
348
354
|
const needsDrink = askAbout(args)
|
355
|
+
// const details = args.gp({ marker: 'list', value: needsDrink.map((item) => item.food)})
|
349
356
|
if (needsDrink.length > 1) {
|
350
357
|
return `What drinks do you want?`
|
351
358
|
} else {
|
352
359
|
return `What drink do you want?`
|
353
360
|
}
|
354
361
|
},
|
355
|
-
matchr: (args) =>
|
362
|
+
matchr: (args) => {
|
363
|
+
if (args.isA(args.context.marker, 'drink') && askAbout(args).length > 0) {
|
364
|
+
const needsDrink = askAbout(args)
|
365
|
+
if (args.api.isAvailableModification(needsDrink[0].food, { ...args.context , id: args.context.value })) {
|
366
|
+
return true
|
367
|
+
}
|
368
|
+
}
|
369
|
+
return false
|
370
|
+
},
|
356
371
|
applyr: (args) => {
|
357
372
|
// TODO check for is available for all modifications
|
358
373
|
const needsDrink = askAbout(args)
|
@@ -375,6 +390,33 @@ const template = {
|
|
375
390
|
])
|
376
391
|
},
|
377
392
|
{
|
393
|
+
operators: [
|
394
|
+
"([change] (meal/* || drink/*) (to/1))",
|
395
|
+
],
|
396
|
+
hierarchy: [
|
397
|
+
['meal', 'toAble'],
|
398
|
+
['drink', 'toAble'],
|
399
|
+
],
|
400
|
+
bridges: [
|
401
|
+
{
|
402
|
+
id: "change",
|
403
|
+
isA: ['verby'],
|
404
|
+
localHierarchy: [ ['thisitthat', 'meal'] ],
|
405
|
+
generatorp: ({context, gp}) => `change ${gp(context.from)} to ${gp(context.to)}`,
|
406
|
+
bridge: "{ ...next(operator), from: after[0], to: after[1].toObject }",
|
407
|
+
semantic: ({context, api, e}) => {
|
408
|
+
const state = api.state
|
409
|
+
const eFrom = e(context.from).evalue
|
410
|
+
const from = state.getIdCombo(eFrom.fromSTM ? eFrom : context.from)
|
411
|
+
const to = state.getIdCombo(context.to)
|
412
|
+
for (const item of api.items()) {
|
413
|
+
if (item.id == from.id) {
|
414
|
+
api.modify(item, { id: to.id })
|
415
|
+
}
|
416
|
+
}
|
417
|
+
}
|
418
|
+
},
|
419
|
+
],
|
378
420
|
priorities: [
|
379
421
|
{ context: [['combo', 0], ['number',1], ['list', 0], ['combo', 0]], ordered: true, choose: [0,1] },
|
380
422
|
{ context: [['list', 0], ['combo',0], ['number',1]], ordered: true, choose: [1,2] },
|
@@ -382,6 +424,12 @@ const template = {
|
|
382
424
|
{ context: [['mango', 0], ['passion',0], ['list', 0]], ordered: true, choose: [0,1] },
|
383
425
|
{ context: [['number', 1], ['mango_passion',1], ['list', 0]], ordered: true, choose: [0,1] },
|
384
426
|
{ context: [['mango', 0], ['mango_passion',0], ['passion',0], ['list', 0]], ordered: true, choose: [0,1,2] },
|
427
|
+
|
428
|
+
{ context: [['drink', 0], ['list',0], ['combo',0], ['number', 0]], ordered: true, choose: [2,3] },
|
429
|
+
{ context: [['drink', 1], ['list',0], ['combo',0], ['number', 0]], ordered: true, choose: [2,3] },
|
430
|
+
{ context: [['withModification', 0], ['modification', 1], ['list', 0], ['modification', 1]], ordered: true, choose: [2] },
|
431
|
+
{ context: [['withModification', 0], ['modification', 1], ['list', 0], ['combo', 1]], ordered: true, choose: [0] },
|
432
|
+
{ context: [['combo', 2], ['list', 0], ['combo', 1], ['withModification', 1]], ordered: true, choose: [3] },
|
385
433
|
],
|
386
434
|
},
|
387
435
|
],
|
@@ -392,6 +440,7 @@ class API {
|
|
392
440
|
this._objects = objects
|
393
441
|
this._objects.items = []
|
394
442
|
this._objects.notAvailable = []
|
443
|
+
this._objects.notAvailableModification = []
|
395
444
|
}
|
396
445
|
|
397
446
|
show() {
|
@@ -412,8 +461,12 @@ class API {
|
|
412
461
|
return this._objects.items[item_id]
|
413
462
|
}
|
414
463
|
|
464
|
+
modify(item, changes) {
|
465
|
+
Object.assign(this._objects.items[item.item_id], changes)
|
466
|
+
}
|
467
|
+
|
415
468
|
items() {
|
416
|
-
return this._objects.items
|
469
|
+
return [...this._objects.items]
|
417
470
|
}
|
418
471
|
|
419
472
|
addDrink(item_id, drink) {
|
@@ -430,17 +483,40 @@ class API {
|
|
430
483
|
return this._objects.notAvailable.length > 0
|
431
484
|
}
|
432
485
|
|
486
|
+
hasAskedForButNotAvailableModification(item) {
|
487
|
+
return this._objects.notAvailableModification.length > 0
|
488
|
+
}
|
489
|
+
|
433
490
|
getAskedForButNotAvailable(item) {
|
434
491
|
const na = this._objects.notAvailable
|
435
492
|
this._objects.notAvailable = []
|
436
493
|
return na
|
437
494
|
}
|
438
495
|
|
496
|
+
getAskedForButNotAvailableModification(item) {
|
497
|
+
const na = this._objects.notAvailableModification
|
498
|
+
this._objects.notAvailableModification = []
|
499
|
+
return na
|
500
|
+
}
|
501
|
+
|
439
502
|
addAskedForButNotAvailable(item) {
|
440
503
|
this._objects.notAvailable.push(item)
|
441
504
|
}
|
442
505
|
|
506
|
+
addAskedForButNotAvailableModification(item, modification) {
|
507
|
+
this._objects.notAvailableModification.push({item, modification})
|
508
|
+
}
|
509
|
+
|
510
|
+
isAvailableModification(food, modification) {
|
511
|
+
if (this.isAvailable(modification)) {
|
512
|
+
if (this.args.isA(modification.id, 'fry') || this.args.isA(modification.id, 'pop')) {
|
513
|
+
return true
|
514
|
+
}
|
515
|
+
}
|
516
|
+
}
|
517
|
+
|
443
518
|
isAvailable(item) {
|
519
|
+
item.id = item.id || item.value
|
444
520
|
if (item.id == 'chicken_nugget') {
|
445
521
|
if (![4,5,6,10].includes(item.pieces)) {
|
446
522
|
return false
|
@@ -468,6 +544,10 @@ class API {
|
|
468
544
|
item.id = 'coca_cola'
|
469
545
|
}
|
470
546
|
|
547
|
+
if (item.id == 'fry') {
|
548
|
+
item.id = 'french_fry'
|
549
|
+
}
|
550
|
+
|
471
551
|
return [
|
472
552
|
"hamburger",
|
473
553
|
"cheeseburger",
|
@@ -567,17 +647,13 @@ class State {
|
|
567
647
|
this.api = api
|
568
648
|
}
|
569
649
|
|
570
|
-
|
571
|
-
let quantity = 1
|
572
|
-
if (food.quantity) {
|
573
|
-
quantity = food.quantity.value
|
574
|
-
}
|
650
|
+
getIdCombo(food) {
|
575
651
|
let id, combo
|
576
652
|
if (food.comboNumber?.marker == 'numberNumberCombo') {
|
577
653
|
id = this.api.getCombo(food.comboNumber.comboNumber.value)
|
578
654
|
if (!id) {
|
579
655
|
this.api.addAskedForButNotAvailable(food)
|
580
|
-
return
|
656
|
+
return { done: true }
|
581
657
|
}
|
582
658
|
combo = true
|
583
659
|
}
|
@@ -585,7 +661,7 @@ class State {
|
|
585
661
|
id = this.api.getCombo(food.comboNumber.value)
|
586
662
|
if (!id) {
|
587
663
|
this.api.addAskedForButNotAvailable(food)
|
588
|
-
return
|
664
|
+
return { done: true }
|
589
665
|
}
|
590
666
|
combo = true
|
591
667
|
} else if (food.marker == 'combo') {
|
@@ -600,6 +676,20 @@ class State {
|
|
600
676
|
id = 'chicken_nugget'
|
601
677
|
}
|
602
678
|
|
679
|
+
return { id, combo }
|
680
|
+
}
|
681
|
+
|
682
|
+
add(food) {
|
683
|
+
let quantity = 1
|
684
|
+
if (food.quantity) {
|
685
|
+
quantity = food.quantity.value
|
686
|
+
}
|
687
|
+
|
688
|
+
const { id, combo, done } = this.getIdCombo(food)
|
689
|
+
if (done) {
|
690
|
+
return
|
691
|
+
}
|
692
|
+
|
603
693
|
const addSize = (item, data) => {
|
604
694
|
if (item.size) {
|
605
695
|
data.size = item.size.value
|
@@ -607,15 +697,39 @@ class State {
|
|
607
697
|
return data
|
608
698
|
}
|
609
699
|
|
700
|
+
const getAvailableChildren = (item) => {
|
701
|
+
// see if this is a categories of items
|
702
|
+
const descendants = this.api.args.hierarchy.descendants(item.id)
|
703
|
+
const available = []
|
704
|
+
for (const descendant of descendants) {
|
705
|
+
if (this.api.isAvailable({ id: descendant})) {
|
706
|
+
available.push(descendant)
|
707
|
+
}
|
708
|
+
}
|
709
|
+
return available
|
710
|
+
}
|
711
|
+
|
610
712
|
let modifications
|
713
|
+
const addsInsteadOfModifications = []
|
611
714
|
if (food.modifications) {
|
612
715
|
modifications = []
|
613
716
|
for (const modification of propertyToArray(food.modifications.modifications)) {
|
614
717
|
if (modification.size) {
|
615
718
|
food.size = modification.size
|
616
719
|
}
|
617
|
-
|
618
|
-
|
720
|
+
|
721
|
+
// if not a modification treat as top level request
|
722
|
+
if (!this.api.isAvailableModification(food, { ...modification, id: modification.value })) {
|
723
|
+
if (this.api.isAvailable(modification)) {
|
724
|
+
//this.add(modification)
|
725
|
+
addsInsteadOfModifications.push(modification)
|
726
|
+
} else {
|
727
|
+
this.api.addAskedForButNotAvailable(modification)
|
728
|
+
}
|
729
|
+
} else {
|
730
|
+
addSize(modification, { id: modification.value })
|
731
|
+
modifications.push(addSize(modification, { id: modification.value }))
|
732
|
+
}
|
619
733
|
}
|
620
734
|
}
|
621
735
|
|
@@ -636,42 +750,11 @@ class State {
|
|
636
750
|
return
|
637
751
|
}
|
638
752
|
|
639
|
-
|
640
|
-
|
641
|
-
if (false) {
|
642
|
-
// see if followup for drink is needed
|
753
|
+
this.api.add(item)
|
754
|
+
this.api.args.mentioned(food)
|
643
755
|
|
644
|
-
|
645
|
-
|
646
|
-
let hasDrink = false
|
647
|
-
for (let modification of (item.modifications || [])) {
|
648
|
-
if (!this.api.args.isA(modification.id, 'drink')) {
|
649
|
-
hasDrink = true
|
650
|
-
break
|
651
|
-
}
|
652
|
-
}
|
653
|
-
return hasDrink
|
654
|
-
}
|
655
|
-
const needsDrink = (item_id) => {
|
656
|
-
const item = this.api.get(item_id)
|
657
|
-
return item.needsDrink
|
658
|
-
}
|
659
|
-
|
660
|
-
if (!hasDrink(item_id) && needsDrink(item_id)) {
|
661
|
-
this.api.args.ask([
|
662
|
-
{
|
663
|
-
where: where(),
|
664
|
-
matchq: ({objects}) => !hasDrink(item_id) && needsDrink(item_id),
|
665
|
-
applyq: () => `What drink do you want?`,
|
666
|
-
matchr: ({context, isA}) => isA(context.marker, 'drink'),
|
667
|
-
applyr: ({context, objects, api}) => {
|
668
|
-
// TODO check for is available for all modifications
|
669
|
-
this.api.addDrink(item_id, { id: context.value })
|
670
|
-
}
|
671
|
-
},
|
672
|
-
]
|
673
|
-
)
|
674
|
-
}
|
756
|
+
for (const addIt of addsInsteadOfModifications) {
|
757
|
+
this.add(addIt)
|
675
758
|
}
|
676
759
|
}
|
677
760
|
}
|
@@ -686,7 +769,7 @@ class State {
|
|
686
769
|
}
|
687
770
|
}
|
688
771
|
|
689
|
-
const createConfig = () => {
|
772
|
+
const createConfig = (additionalConfig) => {
|
690
773
|
const config = new Config({
|
691
774
|
name: 'fastfood',
|
692
775
|
operators: [
|
@@ -708,7 +791,7 @@ const createConfig = () => {
|
|
708
791
|
},
|
709
792
|
{
|
710
793
|
where: where(),
|
711
|
-
match: ({context, isAListable}) => isAListable(context, 'edible') && context.marker !== 'edible' && !context.same && !context.isResponse,
|
794
|
+
match: ({context, isAListable}) => isAListable(context, 'edible') && context.marker !== 'edible' && !context.same && !context.isResponse && !context.evaluate,
|
712
795
|
apply: ({context, km, api, instance}) => {
|
713
796
|
for (const element of propertyToArray(context)) {
|
714
797
|
km('fastfood').api.state.add(element)
|
@@ -737,14 +820,16 @@ const createConfig = () => {
|
|
737
820
|
},
|
738
821
|
],
|
739
822
|
}, module)
|
740
|
-
config.
|
741
|
-
config.add(countable())
|
742
|
-
config.add(events())
|
743
|
-
config.add(sizeable())
|
823
|
+
config.stop_auto_rebuild()
|
824
|
+
config.add(edible(), countable(), events(), sizeable())
|
744
825
|
config.api = api
|
745
826
|
config.initializer( ({api}) => {
|
746
827
|
api.state = new State(api)
|
747
828
|
})
|
829
|
+
if (additionalConfig) {
|
830
|
+
additionalConfig(config)
|
831
|
+
}
|
832
|
+
config.restart_auto_rebuild()
|
748
833
|
return config
|
749
834
|
}
|
750
835
|
|
@@ -752,6 +837,7 @@ knowledgeModule( {
|
|
752
837
|
module,
|
753
838
|
description: 'fastfood related concepts',
|
754
839
|
createConfig,
|
840
|
+
acceptsAdditionalConfig: true,
|
755
841
|
test: {
|
756
842
|
name: './fastfood.test.json',
|
757
843
|
contents: fastfood_tests,
|
@@ -762,6 +848,7 @@ knowledgeModule( {
|
|
762
848
|
'changes',
|
763
849
|
'response',
|
764
850
|
{ property: 'notAvailable', filter: [ 'marker', 'value', 'text' ] },
|
851
|
+
{ property: 'notAvailableModification', filter: [ 'marker', 'value', 'text' ] },
|
765
852
|
{ property: 'quantity', filter: ['marker', 'value', 'text' ] },
|
766
853
|
{ property: 'pieces', filter: ['marker', 'value', 'text' ] },
|
767
854
|
],
|