ekms 8.0.0 → 8.1.0-beta.1

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.
Files changed (124) hide show
  1. package/common/animals.instance.json +3055 -1651
  2. package/common/animals.js +17 -20
  3. package/common/articles.js +103 -0
  4. package/common/articles.test.json +310 -0
  5. package/common/asking.instance.json +2 -0
  6. package/common/asking.js +253 -0
  7. package/common/asking.test.json +2290 -0
  8. package/common/avatar.js +6 -10
  9. package/common/characters.js +23 -30
  10. package/common/colors.instance.json +25666 -0
  11. package/common/colors.js +67 -0
  12. package/common/colors.test.json +4425 -0
  13. package/common/comparable.instance.json +1750 -0
  14. package/common/comparable.js +36 -28
  15. package/common/comparable.test.json +1196 -2
  16. package/common/concept.js +121 -119
  17. package/common/concept.test.json +688 -0
  18. package/common/conjunction.instance.json +2 -0
  19. package/common/conjunction.js +104 -0
  20. package/common/conjunction.test.json +322 -0
  21. package/common/countable.js +20 -14
  22. package/common/countable.test.json +1050 -0
  23. package/common/crew.instance.json +16432 -9850
  24. package/common/crew.js +39 -42
  25. package/common/crew.test.json +714 -452
  26. package/common/currency.js +28 -46
  27. package/common/dialogues.js +187 -429
  28. package/common/dialogues.test.json +684 -450
  29. package/common/dimension.instance.json +517 -289
  30. package/common/dimension.js +22 -24
  31. package/common/dimension.test.json +727 -1944
  32. package/common/edible.instance.json +20506 -10664
  33. package/common/edible.js +4 -9
  34. package/common/emotions.instance.json +195 -123
  35. package/common/emotions.js +36 -39
  36. package/common/evaluate.instance.json +2 -0
  37. package/common/evaluate.js +53 -0
  38. package/common/evaluate.test.json +574 -0
  39. package/common/events.js +11 -15
  40. package/common/fastfood.instance.json +223185 -113172
  41. package/common/fastfood.js +77 -87
  42. package/common/fastfood.test.json +8205 -3733
  43. package/common/formulas.instance.json +444 -244
  44. package/common/formulas.js +20 -27
  45. package/common/formulas.test.json +1027 -955
  46. package/common/gdefaults.js +45 -32
  47. package/common/help.js +9 -14
  48. package/common/help.test.json +71 -18
  49. package/common/helpers/concept.js +37 -10
  50. package/common/helpers/dialogues.js +22 -4
  51. package/common/helpers/formulas.js +0 -14
  52. package/common/helpers/meta.js +0 -1
  53. package/common/helpers/properties.js +92 -84
  54. package/common/helpers.js +35 -24
  55. package/common/hierarchy.js +18 -25
  56. package/common/javascript.js +12 -19
  57. package/common/kirk.instance.json +583 -300
  58. package/common/kirk.js +6 -9
  59. package/common/length.instance.json +8995 -4964
  60. package/common/length.js +5 -9
  61. package/common/listener.js +48 -0
  62. package/common/listener.test.json +104 -0
  63. package/common/math.instance.json +409 -1202
  64. package/common/math.js +17 -21
  65. package/common/meta.js +24 -50
  66. package/common/nameable.instance.json +2 -0
  67. package/common/nameable.js +144 -0
  68. package/common/nameable.test.json +3191 -0
  69. package/common/negation.instance.json +2 -0
  70. package/common/negation.js +38 -0
  71. package/common/negation.test.json +308 -0
  72. package/common/numbers.js +28 -32
  73. package/common/ordering.instance.json +459 -274
  74. package/common/ordering.js +81 -87
  75. package/common/ordinals.instance.json +2 -0
  76. package/common/ordinals.js +61 -0
  77. package/common/ordinals.test.json +412 -0
  78. package/common/people.instance.json +2138 -1321
  79. package/common/people.js +9 -14
  80. package/common/people.test.json +1815 -1073
  81. package/common/percentages.instance.json +2 -0
  82. package/common/percentages.js +53 -0
  83. package/common/percentages.test.json +751 -0
  84. package/common/pipboy.instance.json +12261 -6898
  85. package/common/pipboy.js +53 -62
  86. package/common/pipboy.test.json +2835 -0
  87. package/common/pokemon.instance.json +4432 -2351
  88. package/common/pokemon.js +8 -21
  89. package/common/pos.js +16 -14
  90. package/common/pressure.instance.json +2311 -1303
  91. package/common/pressure.js +5 -9
  92. package/common/properties.instance.json +151 -87
  93. package/common/properties.js +164 -167
  94. package/common/properties.test.json +17605 -4030
  95. package/common/punctuation.js +24 -8
  96. package/common/punctuation.test.json +233 -5
  97. package/common/reports.instance.json +1037 -551
  98. package/common/reports.js +77 -103
  99. package/common/reports.test.json +15623 -10458
  100. package/common/scorekeeper.js +19 -31
  101. package/common/sdefaults.js +17 -8
  102. package/common/sizeable.js +13 -12
  103. package/common/spock.instance.json +582 -299
  104. package/common/spock.js +6 -9
  105. package/common/stgame.js +20 -20
  106. package/common/stm.js +182 -29
  107. package/common/stm.test.json +1734 -1
  108. package/common/tell.js +15 -19
  109. package/common/temperature.instance.json +2379 -1355
  110. package/common/temperature.js +5 -9
  111. package/common/tester.js +15 -4
  112. package/common/testing.js +8 -13
  113. package/common/time.js +21 -26
  114. package/common/tokenize.js +8 -8
  115. package/common/tokenize.test.json +86 -1
  116. package/common/ui.instance.json +151 -460
  117. package/common/ui.js +22 -34
  118. package/common/ui.test.json +641 -5357
  119. package/common/weight.instance.json +7957 -4350
  120. package/common/weight.js +5 -9
  121. package/common/weight.test.json +242 -238
  122. package/common/yesno.js +6 -6
  123. package/main.js +68 -45
  124. package/package.json +44 -6
@@ -1,4 +1,4 @@
1
- const { Config, knowledgeModule, ensureTestFile, where } = require('./runtime').theprogrammablemind
1
+ const { knowledgeModule, ensureTestFile, where } = require('./runtime').theprogrammablemind
2
2
  const { defaultContextCheck, propertyToArray } = require('./helpers')
3
3
  const edible = require('./edible')
4
4
  const events = require('./events')
@@ -68,7 +68,6 @@ const template = {
68
68
  "strawberry, guava, mango passion, wild berry, and strawberry banana are countable",
69
69
  "smoothie modifies ingredients",
70
70
  "strawberry, guava, mango passion, wild berry, and strawberry banana are smoothie ingredients",
71
- // { stop: true },
72
71
  "a smoothie is a drink",
73
72
  "french fries and waffle fries are fries",
74
73
  "single, double, triple, baconator, and bacon deluxe are hamburgers",
@@ -138,7 +137,7 @@ const template = {
138
137
  "((meal/* && context.comboNumber == undefined) [comboMeal] (combo/*))",
139
138
  "((combo/*) [comboNumber] (number/* || numberNumberCombo/*))",
140
139
  "((numberNumberCombo/1) [numberNumberCombo_combo|] (combo/0))",
141
- "((number/0,1 && context.instance == undefined) [numberNumberCombo] (number/0,1))",
140
+ "((number/0,1 && context.instance == false) [numberNumberCombo] (number/0,1 && instance == true))",
142
141
  "((combo/*) [([withModification|with] ([modification]))])",
143
142
  ],
144
143
  floaters: ['instance'],
@@ -217,7 +216,7 @@ const template = {
217
216
  {
218
217
  where: where(),
219
218
  match: ({context}) => false && context.marker == 'combo' && context.comboNumber,
220
- apply: ({context, g}) => g(context.comboNumber),
219
+ apply: async ({context, g}) => await g(context.comboNumber),
221
220
  }
222
221
  ],
223
222
  bridges: [
@@ -226,7 +225,7 @@ const template = {
226
225
  id: 'withModification',
227
226
  level: 0,
228
227
  before: ['preposition'],
229
- generatorp: ({context, gp}) => `with ${gp(context.modifications)}`,
228
+ generatorp: async ({context, gp}) => `with ${await gp(context.modifications)}`,
230
229
  bridge: "{ ...next(operator), modifications: after[0], flatten: false }",
231
230
  },
232
231
  {
@@ -279,6 +278,7 @@ const template = {
279
278
  { context: [['list', 0], ['articlePOS',0], ['smoothie_ingredient', 0], ['smoothie', 0]], ordered: true, choose: [1,2] },
280
279
  ]
281
280
  },
281
+ // { stop: true },
282
282
  "junior modifies crispy chicken club",
283
283
  "nuggets, junior bacon cheeseburgers, chicken go wraps and junior crispy chicken clubs are value meals",
284
284
  "combos, chili, fries and drinks are sizeable",
@@ -287,18 +287,16 @@ const template = {
287
287
  {
288
288
  // split "sprite and fanta" into separate things so the ask will pick them up
289
289
  match: ({context}) => context.marker == 'list' && context.topLevel && !context.flatten,
290
- apply: ({context, s}) => {
291
- s({...context, flatten: true})
292
- }
290
+ apply: async ({context, s}) => await s({...context, flatten: true}),
293
291
  },
294
292
  {
295
293
  where: where(),
296
294
  match: ({context, api}) => context.marker == 'controlEnd' && api.hasAskedForButNotAvailable(),
297
- apply: ({context, api, gp, toContext, verbatim}) => {
295
+ apply: async ({context, api, gp, toContext, verbatim}) => {
298
296
  const naArray = api.getAskedForButNotAvailable()
299
297
  naArray.forEach((f) => f.paraphrase = true)
300
298
  const naContext = toContext(naArray)
301
- verbatim(`The following are not menu items: ${gp(naContext)}`)
299
+ verbatim(`The following are not menu items: ${await gp(naContext)}`)
302
300
  // allow other motivation to run
303
301
  context.cascade = true
304
302
  }
@@ -306,11 +304,13 @@ const template = {
306
304
  {
307
305
  where: where(),
308
306
  match: ({context, api}) => context.marker == 'controlEnd' && api.hasAskedForButNotAvailableModification(),
309
- apply: ({context, api, gp, toContext, verbatim}) => {
310
- const naArray = api.getAskedForButNotAvailableModification().map(({ item, modification }) => {
307
+ apply: async ({context, api, gp, toContext, verbatim}) => {
308
+ const naArray = []
309
+ for (const args of api.getAskedForButNotAvailableModification()) {
310
+ const args = { item, modification }
311
311
  // return `${gp(item)} can not be modified with ${gp(modification)}.`
312
- return `XXX can not be modified with ${gp(modification)}.`
313
- })
312
+ naArray.push(`XXX can not be modified with ${await gp(modification)}.`)
313
+ }
314
314
  verbatim(naArray.join(' '))
315
315
  // allow other motivation to run
316
316
  context.cascade = true
@@ -411,13 +411,13 @@ const template = {
411
411
  bridges: [
412
412
  {
413
413
  id: "change",
414
- isA: ['verby'],
415
- localHierarchy: [ ['thisitthat', 'meal'] ],
416
- generatorp: ({context, gp}) => `change ${gp(context.from)} to ${gp(context.to)}`,
414
+ isA: ['verb'],
415
+ localHierarchy: [ ['thisitthat', 'meal'], ['thisitthat', 'drink'] ],
416
+ generatorp: async ({context, gp}) => `change ${await gp(context.from)} to ${await gp(context.to)}`,
417
417
  bridge: "{ ...next(operator), from: after[0], to: after[1].toObject }",
418
- semantic: ({context, api, e}) => {
418
+ semantic: async ({context, api, e}) => {
419
419
  const state = api.state
420
- const eFrom = e(context.from).evalue
420
+ const eFrom = (await e(context.from)).evalue
421
421
  const from = state.getIdCombo(eFrom.fromSTM ? eFrom : context.from)
422
422
  const to = state.getIdCombo(context.to)
423
423
  for (const item of api.items()) {
@@ -451,7 +451,7 @@ const template = {
451
451
  bridges: [
452
452
  {
453
453
  id: 'remove',
454
- isA: ['verby'],
454
+ isA: ['verb'],
455
455
  bridge: "{ ...next(operator), remove: after[0], postModifiers: ['remove'] }",
456
456
  semantic: ({context, api}) => {
457
457
  const state = api.state
@@ -464,7 +464,7 @@ const template = {
464
464
  },
465
465
  {
466
466
  id: 'reset',
467
- isA: ['verby'],
467
+ isA: ['verb'],
468
468
  bridge: "{ ...next(operator) }",
469
469
  semantic: ({context, api}) => {
470
470
  api.reset()
@@ -887,8 +887,8 @@ class State {
887
887
  {
888
888
  where: where(),
889
889
  match: ({context, isA}) => isA(context.marker, 'number') && !context.evaluate,
890
- apply: ({context, e}) => {
891
- food.comboNumber = { value: e(context).value }
890
+ apply: async ({context, e}) => {
891
+ food.comboNumber = { value: (await e(context)).value }
892
892
  this.add(Object.assign(food, context))
893
893
  }
894
894
  },
@@ -917,7 +917,7 @@ class State {
917
917
  }
918
918
 
919
919
  this.api.add(item)
920
- this.api.args.mentioned(food)
920
+ this.api.args.mentioned({ context: food })
921
921
 
922
922
  for (const addIt of addsInsteadOfModifications) {
923
923
  this.add(addIt)
@@ -935,75 +935,65 @@ class State {
935
935
  }
936
936
  }
937
937
 
938
- const createConfig = (additionalConfig) => {
939
- const config = new Config({
940
- name: 'fastfood',
941
- operators: [
942
- "([orderNoun|order])",
943
- "([showOrder|show] ([orderNoun/1]))",
944
- ],
945
- // flatten: ['list'],
946
- // TODO use node naming not python
947
- semantics: [
948
- {
949
- where: where(),
950
- priority: -10,
951
- match: ({context}) => context.marker == 'compound_operator',
952
- apply: ({context, s}) => {
953
- context.marker = 'list'
954
- context.flatten = true
955
- s(context)
956
- }
957
- },
958
- {
959
- where: where(),
960
- match: ({context, isAListable}) => isAListable(context, 'edible') && context.marker !== 'edible' && !context.same && !context.isResponse && !context.evaluate,
961
- apply: ({context, km, api, instance}) => {
962
- for (const element of propertyToArray(context)) {
963
- km('fastfood').api.state.add(element)
964
- }
965
- }
966
- },
967
- ],
968
- floaters: ['quantity'],
969
- bridges: [
970
- {
971
- id: 'orderNoun',
972
- parents: ['noun', 'queryable'],
973
- evaluator: ({context, api}) => {
974
- context.evalue = { marker: 'list', value: api.objects.items }
975
- api.show()
938
+ const config = {
939
+ name: 'fastfood',
940
+ operators: [
941
+ "([orderNoun|order])",
942
+ "([showOrder|show] ([orderNoun/1]))",
943
+ ],
944
+ // flatten: ['list'],
945
+ // TODO use node naming not python
946
+ semantics: [
947
+ {
948
+ where: where(),
949
+ priority: -10,
950
+ match: ({context}) => context.marker == 'compound_operator',
951
+ apply: async ({context, s}) => {
952
+ context.marker = 'list'
953
+ context.flatten = true
954
+ await s(context)
955
+ }
956
+ },
957
+ {
958
+ where: where(),
959
+ match: ({context, isAListable}) => isAListable(context, 'edible') && context.marker !== 'edible' && !context.same && !context.isResponse && !context.evaluate,
960
+ apply: ({context, km, api, instance}) => {
961
+ for (const element of propertyToArray(context)) {
962
+ km('fastfood').api.state.add(element)
976
963
  }
964
+ }
965
+ },
966
+ ],
967
+ floaters: ['quantity'],
968
+ bridges: [
969
+ {
970
+ id: 'orderNoun',
971
+ parents: ['noun', 'queryable'],
972
+ evaluator: ({context, api}) => {
973
+ context.evalue = { marker: 'list', value: api.objects.items }
974
+ api.show()
975
+ }
976
+ },
977
+ {
978
+ id: 'showOrder',
979
+ parents: ['verb'],
980
+ bridge: "{ ...next(operator), order: after[0] }",
981
+ generatorp: async ({context, g}) => `show ${await g(context.order)}`,
982
+ semantic: ({api}) => {
983
+ api.state.show()
977
984
  },
978
- {
979
- id: 'showOrder',
980
- parents: ['verby'],
981
- bridge: "{ ...next(operator), order: after[0] }",
982
- generatorp: ({context, g}) => `show ${g(context.order)}`,
983
- semantic: ({api}) => {
984
- api.state.show()
985
- },
986
- },
987
- ],
988
- }, module)
989
- config.stop_auto_rebuild()
990
- config.add(edible(), countable(), events(), sizeable())
991
- config.api = api
992
- config.initializer( ({api}) => {
993
- api.state = new State(api)
994
- })
995
- if (additionalConfig) {
996
- additionalConfig(config)
997
- }
998
- config.restart_auto_rebuild()
999
- return config
985
+ },
986
+ ],
1000
987
  }
1001
988
 
1002
989
  knowledgeModule( {
990
+ config,
991
+ includes: [edible, countable, events, sizeable],
992
+ api: () => new API(),
993
+ initializer: ({api}) => { api.state = new State(api) },
994
+
1003
995
  module,
1004
996
  description: 'fastfood related concepts',
1005
- createConfig,
1006
- acceptsAdditionalConfig: true,
1007
997
  test: {
1008
998
  name: './fastfood.test.json',
1009
999
  contents: fastfood_tests,
@@ -1031,7 +1021,7 @@ knowledgeModule( {
1031
1021
  { property: 'pieces', filter: ['marker', 'value', 'text' ] },
1032
1022
  ],
1033
1023
  context: [
1034
- ...defaultContextCheck,
1024
+ ...defaultContextCheck(),
1035
1025
  // TODO some kind of conditional selector { match: (value) => value.marker == 'count', filter: ['marker', 'value', 'text'] },
1036
1026
  { property: 'comboNumber', filter: ['marker', 'value', 'text' ] },
1037
1027
  ],