ekms 8.0.0-beta.6 → 8.0.0-beta.61

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. package/common/animals.instance.json +2871 -1379
  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/avatar.js +5 -9
  6. package/common/characters.js +22 -28
  7. package/common/colors.instance.json +7175 -3634
  8. package/common/colors.js +4 -8
  9. package/common/colors.test.json +345 -780
  10. package/common/comparable.instance.json +1750 -0
  11. package/common/comparable.js +36 -28
  12. package/common/comparable.test.json +438 -2
  13. package/common/concept.js +120 -118
  14. package/common/countable.js +19 -13
  15. package/common/countable.test.json +1050 -0
  16. package/common/crew.instance.json +13067 -6598
  17. package/common/crew.js +36 -41
  18. package/common/crew.test.json +714 -452
  19. package/common/currency.js +27 -45
  20. package/common/dialogues.js +161 -285
  21. package/common/dimension.instance.json +474 -253
  22. package/common/dimension.js +16 -22
  23. package/common/dimension.test.json +446 -1640
  24. package/common/edible.instance.json +20057 -10041
  25. package/common/edible.js +3 -8
  26. package/common/emotions.instance.json +147 -129
  27. package/common/emotions.js +35 -38
  28. package/common/evaluate.instance.json +2 -0
  29. package/common/evaluate.js +49 -0
  30. package/common/evaluate.test.json +574 -0
  31. package/common/events.js +10 -14
  32. package/common/fastfood.instance.json +221825 -111641
  33. package/common/fastfood.js +75 -85
  34. package/common/fastfood.test.json +268 -90
  35. package/common/formulas.instance.json +455 -249
  36. package/common/formulas.js +19 -26
  37. package/common/gdefaults.js +24 -26
  38. package/common/help.js +7 -12
  39. package/common/help.test.json +22 -22
  40. package/common/helpers/concept.js +10 -7
  41. package/common/helpers/dialogues.js +2 -3
  42. package/common/helpers/properties.js +54 -62
  43. package/common/helpers.js +6 -5
  44. package/common/hierarchy.js +16 -24
  45. package/common/javascript.js +11 -18
  46. package/common/kirk.instance.json +584 -290
  47. package/common/kirk.js +5 -8
  48. package/common/length.instance.json +8834 -4757
  49. package/common/length.js +4 -8
  50. package/common/listener.js +48 -0
  51. package/common/listener.test.json +104 -0
  52. package/common/math.instance.json +425 -1187
  53. package/common/math.js +16 -20
  54. package/common/meta.js +23 -47
  55. package/common/nameable.instance.json +2 -0
  56. package/common/nameable.js +135 -0
  57. package/common/nameable.test.json +2121 -0
  58. package/common/negation.instance.json +2 -0
  59. package/common/negation.js +38 -0
  60. package/common/negation.test.json +308 -0
  61. package/common/numbers.js +27 -31
  62. package/common/ordering.instance.json +366 -246
  63. package/common/ordering.js +80 -86
  64. package/common/people.instance.json +2134 -1022
  65. package/common/people.js +8 -13
  66. package/common/percentages.instance.json +2 -0
  67. package/common/percentages.js +53 -0
  68. package/common/percentages.test.json +751 -0
  69. package/common/pipboy.instance.json +11767 -6295
  70. package/common/pipboy.js +48 -59
  71. package/common/pokemon.instance.json +4226 -2081
  72. package/common/pokemon.js +7 -20
  73. package/common/pos.js +12 -13
  74. package/common/pressure.instance.json +2208 -1175
  75. package/common/pressure.js +4 -8
  76. package/common/properties.instance.json +131 -61
  77. package/common/properties.js +57 -134
  78. package/common/punctuation.js +6 -6
  79. package/common/reports.instance.json +1018 -530
  80. package/common/reports.js +73 -97
  81. package/common/scorekeeper.js +18 -30
  82. package/common/sdefaults.js +16 -7
  83. package/common/sizeable.js +6 -10
  84. package/common/spock.instance.json +584 -290
  85. package/common/spock.js +5 -8
  86. package/common/stgame.js +19 -19
  87. package/common/stm.js +164 -27
  88. package/common/stm.test.json +1734 -1
  89. package/common/tell.js +14 -18
  90. package/common/temperature.instance.json +2271 -1222
  91. package/common/temperature.js +4 -8
  92. package/common/tester.js +3 -3
  93. package/common/testing.js +8 -12
  94. package/common/time.js +20 -25
  95. package/common/tokenize.js +4 -5
  96. package/common/ui.instance.json +459 -240
  97. package/common/ui.js +16 -22
  98. package/common/weight.instance.json +7646 -4026
  99. package/common/weight.js +4 -8
  100. package/common/yesno.js +5 -5
  101. package/main.js +59 -46
  102. package/package.json +28 -5
@@ -1,4 +1,4 @@
1
- const { Config, knowledgeModule, where } = require('./runtime').theprogrammablemind
1
+ const { knowledgeModule, where } = require('./runtime').theprogrammablemind
2
2
  const { defaultContextCheck } = require('./helpers')
3
3
  const dialogues = require('./dialogues')
4
4
  const meta = require('./meta')
@@ -79,7 +79,7 @@ const template = {
79
79
 
80
80
  const api = new API();
81
81
 
82
- let configStruct = {
82
+ let config = {
83
83
  name: 'properties',
84
84
  operators: [
85
85
  "([hierarchyAble|])",
@@ -221,7 +221,7 @@ let configStruct = {
221
221
  notes: 'expression with constraints',
222
222
  where: where(),
223
223
  match: ({context}) => context.constraints && context.paraphrase,
224
- apply: ({context, g}) => {
224
+ apply: async ({context, g}) => {
225
225
  // TODO assume one constaints deal with more in the future
226
226
  const constraint = context.constraints[0]
227
227
  const constrained = Object.assign({}, constraint.constraint)
@@ -234,86 +234,25 @@ let configStruct = {
234
234
  paraphrase.paraphrase = true;
235
235
  paraphrase[constraint.property] = property
236
236
  if (false && context.isResponse) {
237
- return g({...constraint.paraphrase, paraphrase: true})
237
+ return await g({...constraint.paraphrase, paraphrase: true})
238
238
  } else {
239
- return g(constrained)
239
+ return await g(constrained)
240
240
  }
241
241
  },
242
242
  },
243
243
  {
244
244
  where: where(),
245
245
  match: ({context}) => context.marker == 'xfx',
246
- apply: ({context, g}) => `${context.word} between ${g(context.arguments)}`
246
+ apply: async ({context, g}) => `${context.word} between ${await g(context.arguments)}`
247
247
  },
248
- // {
249
- // notes: '"fire type, water type and earth type" to "fire water and earth type"',
250
- // tests: [
251
- // 'chicken modifies strips',
252
- // ],
253
- // /*
254
- // {
255
- // "water": {
256
- // "marker": "water",
257
- // "value": "water",
258
- // "word": "water"
259
- // },
260
- // "marker": "water_type",
261
- // "modifiers": [
262
- // "water"
263
- // ],
264
- // "types": [
265
- // "water_type"
266
- // ],
267
- // "value": "water_type",
268
- // "word": "type",
269
- // "paraphrase": true
270
- // },
271
- // */
272
- // where: where(),
273
- // match: ({context}) => {
274
- // if (!context.paraphrase) {
275
- // return
276
- // }
277
- // if (context.marker !== 'list') {
278
- // return
279
- // }
280
- // if ((context.value || []).length < 2) {
281
- // return
282
- // }
283
- // if (!context.value[0].word) {
284
- // return
285
- // }
286
- // const word = context.value[0].word
287
-
288
- // for (let value of context.value) {
289
- // if (!(value.modifiers && value.modifiers.length == 1 && value.word == word)) {
290
- // return
291
- // }
292
- // }
293
- // return true
294
- // },
295
- // apply: ({g, context}) => {
296
- // const modifiers = context.value.map( (p) => p[p.modifiers[0]] )
297
- // context.word = context.value[0].word
298
- // context.value = null
299
- // context.modifiers = ['modifier']
300
- // context.modifier = {
301
- // marker: 'list',
302
- // paraphrase: true,
303
- // value: modifiers
304
- // }
305
- // context.paraphrase = true
306
- // return g(context)
307
- // }
308
- // },
309
248
  {
310
249
  notes: 'add possession ending',
311
250
  priority: -1,
312
251
  where: where(),
313
252
  match: ({context}) => context.paraphrase && context.possessive,
314
- apply: ({context, g}) => {
253
+ apply: async ({context, g}) => {
315
254
  context.possessive = false
316
- const phrase = g(context)
255
+ const phrase = await g(context)
317
256
  context.possessive = true
318
257
  if (phrase.endsWith('s')) {
319
258
  return `${phrase}'`
@@ -322,13 +261,6 @@ let configStruct = {
322
261
  }
323
262
  }
324
263
  },
325
- /*
326
- {
327
- where: where(),
328
- match: ({context}) => context.marker == 'modifies' && context.paraphrase,
329
- apply: ({context}) => `${context.modifier.word} modifies ${context.concept.word}`,
330
- },
331
- */
332
264
  {
333
265
  where: where(),
334
266
  match: ({context}) => context.marker == 'objectPrefix' && context.value == 'other' && context.paraphrase,
@@ -353,15 +285,8 @@ let configStruct = {
353
285
  notes: 'negative do questions',
354
286
  where: where(),
355
287
  match: ({context, hierarchy}) => hierarchy.isA(context.marker, 'canBeDoQuestion') && context.paraphrase && context.negation,
356
- apply: ({context, g}) => {
357
- /*
358
- let query = ''
359
- if (context.query) {
360
- query = "?"
361
- }
362
- return `${g(context.object)} ${context.word} ${g(context.property)}${query}`
363
- */
364
- return `${g(context[context.do.left])} doesnt ${pluralize.plural(context.word)} ${g(context[context.do.right])}`
288
+ apply: async ({context, g}) => {
289
+ return `${await g(context[context.do.left])} doesnt ${pluralize.plural(context.word)} ${await g(context[context.do.right])}`
365
290
  },
366
291
  },
367
292
  {
@@ -369,23 +294,22 @@ let configStruct = {
369
294
  // debug: 'call9',
370
295
  where: where(),
371
296
  match: ({context, hierarchy}) => hierarchy.isA(context.marker, 'canBeDoQuestion') && context.paraphrase && context.query && context.do,
372
- apply: ({context, g}) => {
297
+ apply: async ({context, g}) => {
373
298
  const right = context['do'].right
374
299
  if (context[right].query) {
375
300
  const left = context['do'].left
376
- return `${g(context[right])} ${chooseNumber(context[right], "does", "do")} ${g(context[left])} ${context.word}`
301
+ return `${await g(context[right])} ${chooseNumber(context[right], "does", "do")} ${await g(context[left])} ${context.word}`
377
302
  } else {
378
- // return `does ${g(context[context.do.left])} ${pluralize.singular(context.word)} ${g(context[context.do.right])}`
379
303
  // the marker is the infinite form
380
- return `${chooseNumber(context[context.do.left], "does", "do")} ${g(context[context.do.left])} ${context.marker} ${g(context[context.do.right])}`
304
+ return `${chooseNumber(context[context.do.left], "does", "do")} ${await g(context[context.do.left])} ${context.marker} ${await g(context[context.do.right])}`
381
305
  }
382
306
  },
383
307
  },
384
308
  {
385
309
  where: where(),
386
310
  match: ({context, hierarchy}) => hierarchy.isA(context.marker, 'canBeDoQuestion') && context.paraphrase && !context.query,
387
- apply: ({context, g}) => {
388
- return `${g(context.object)} ${context.word} ${g(context.property)}`
311
+ apply: async ({context, g}) => {
312
+ return `${await g(context.object)} ${context.word} ${await g(context.property)}`
389
313
  }
390
314
  },
391
315
  {
@@ -393,17 +317,21 @@ let configStruct = {
393
317
  where: where(),
394
318
  // match: ({context}) => context.paraphrase && context.modifiers && context.object,
395
319
  match: ({context}) => context.paraphrase && !context.possession && context.object,
396
- apply: ({context, g, gs}) => {
320
+ apply: async ({context, g, gs}) => {
397
321
  const base = { ...context }
398
322
  base.object = undefined;
399
323
  if (context.object.marker == 'objectPrefix') {
400
- return `${g(context.object)} ${g(base)}`
324
+ return `${await g(context.object)} ${await g(base)}`
401
325
  } else {
402
326
  if (context.objects) {
403
- return gs(context.objects.map( (c) => g({...c, paraphrase: true}) ), ' of ')
327
+ const gObjects = []
328
+ for (const object of context.objects) {
329
+ gObjects.push(await g({...object, paraphrase: true}))
330
+ }
331
+ return await gs(gObjects, ' of ')
404
332
  } else {
405
333
  // TODO make paraphrase be a default when paraphrasing?
406
- return `${g(base)} of ${g({...context.object, paraphrase: true})}`
334
+ return `${await g(base)} of ${await g({...context.object, paraphrase: true})}`
407
335
  }
408
336
  }
409
337
  },
@@ -412,9 +340,9 @@ let configStruct = {
412
340
  // ({context, hierarchy}) => hierarchy.isA(context.marker, 'property') && context.object && !context.value && !context.evaluate,
413
341
  where: where(),
414
342
  match: ({context, hierarchy}) => hierarchy.isA(context.marker, 'property') && context.object && !context.possession && !context.evaluate && !context.object.marker == 'objectPrefix',
415
- apply: ({context, g}) => {
343
+ apply: async ({context, g}) => {
416
344
  const property = Object.assign({}, context, { object: undefined })
417
- return `${g(property)} of ${g({ ...context.object, paraphrase: true })}`
345
+ return `${await g(property)} of ${await g({ ...context.object, paraphrase: true })}`
418
346
  }
419
347
  },
420
348
  {
@@ -422,25 +350,25 @@ let configStruct = {
422
350
  where: where(),
423
351
  // match: ({context}) => context.paraphrase && !context.modifiers && context.object,
424
352
  match: ({context}) => !context.modifiers && context.object,
425
- apply: ({context, g, gs}) => {
353
+ apply: async ({context, g, gs}) => {
426
354
  if (context.objects) {
427
355
  const objects = [ ...context.objects ]
428
356
  objects.reverse()
429
357
  let phrase = ''
430
358
  let separator = ''
431
359
  for (let i = 0; i < objects.length-1; ++i) {
432
- phrase = phrase + separator + g({...objects[i], paraphrase: context.paraphrase, possessive: true})
360
+ phrase = phrase + separator + await g({...objects[i], paraphrase: context.paraphrase, possessive: true})
433
361
  separator = ' '
434
362
  }
435
- phrase = phrase + separator + g({...objects[objects.length-1], paraphrase: context.paraphrase})
363
+ phrase = phrase + separator + await g({...objects[objects.length-1], paraphrase: context.paraphrase})
436
364
  return phrase
437
365
  } else {
438
366
  const base = { ...context }
439
367
  base.object = undefined; // TODO make paraphrase be a default when paraphrasing?
440
368
  if (context.object.marker == 'objectPrefix') {
441
- return `${g(context.object)} ${g(base)}`
369
+ return `${await g(context.object)} ${await g(base)}`
442
370
  } else {
443
- return `${g({...context.object, paraphrase: context.paraphrase})}'s ${g(base)}`
371
+ return `${await g({...context.object, paraphrase: context.paraphrase})}'s ${await g(base)}`
444
372
  }
445
373
  }
446
374
  },
@@ -534,15 +462,15 @@ let configStruct = {
534
462
  notes: 'greg has eyes?',
535
463
  where: where(),
536
464
  match: ({context, hierarchy}) => hierarchy.isA(context.marker, 'have') && context.query,
537
- apply: ({context, g, api, objects}) => {
465
+ apply: async ({context, g, api, objects}) => {
538
466
  const object = pluralize.singular(context.object.value);
539
467
  const property = pluralize.singular(context.property.value);
540
468
  context.isResponse = true
541
- if (!api.knownObject(object)) {
542
- context.verbatim = `There is no object named ${g({...context.object, paraphrase: true})}`
469
+ if (!await api.knownObject(object)) {
470
+ context.verbatim = `There is no object named ${await g({...context.object, paraphrase: true})}`
543
471
  return
544
472
  }
545
- if (!api.hasProperty(object, property)) {
473
+ if (!await api.hasProperty(object, property)) {
546
474
  context.evalue = {
547
475
  marker: 'yesno',
548
476
  value: false,
@@ -561,7 +489,7 @@ let configStruct = {
561
489
  where: where(),
562
490
  // match: ({context}) => context.marker == 'property' && context.same && context.object,
563
491
  match: ({context, hierarchy, uuid}) => hierarchy.isA(context.marker, 'property') && context.same && context.objects && !context[`disable${uuid}`],
564
- apply: ({context, objects, km, api, log, s, uuid}) => {
492
+ apply: async ({context, fragments, objects, km, api, log, s, uuid}) => {
565
493
  const objectContext = context.object;
566
494
  const propertyContext = context;
567
495
  const objectId = context.object.value
@@ -576,7 +504,7 @@ let configStruct = {
576
504
  // greg HERE
577
505
  */
578
506
  propertyContext[`disable${uuid}`] = true
579
- const propertyId = km("dialogues").api.evaluateToConcept(propertyContext, context, log, s).evalue;
507
+ const propertyId = (await km("dialogues").api.evaluateToConcept(propertyContext, context, log, s)).evalue;
580
508
  try{
581
509
  // greg
582
510
  // api.makeObject({config, context: objectContext, doPluralize: false})
@@ -588,8 +516,8 @@ let configStruct = {
588
516
  } catch (e) {
589
517
  log(`Error processing set property of an object: ${e}`)
590
518
  const config = km('properties')
591
- const fragment = config.fragment("the property1 of object1 is value1")
592
- const value = api.getProperty(objectId, propertyId)
519
+ const fragment = fragments("the property1 of object1 is value1")
520
+ const value = await api.getProperty(objectId, propertyId)
593
521
  if (value.value == context.same.value) {
594
522
  context.evalue = [
595
523
  { marker: 'yesno', value: true, paraphrase: true },
@@ -620,7 +548,7 @@ let configStruct = {
620
548
  context.evalue = [
621
549
  { marker: 'yesno', value: false, paraphrase: true },
622
550
  ]
623
- context.evalue = context.evalue.concat(fragment.instantiate(mappings))
551
+ context.evalue = context.evalue.concat(await fragment.instantiate(mappings))
624
552
  context.evalue.forEach( (r) => r.paraphrase = true )
625
553
  context.isResponse = true
626
554
  context.sameWasProcessed = true
@@ -638,48 +566,47 @@ let configStruct = {
638
566
  !context.evaluate.toConcept, // && !context.value,
639
567
  // greghere
640
568
  // match: ({context, hierarchy}) => hierarchy.isA(context.marker, 'property') && context.evaluate,
641
- apply: ({context, api, kms, objects, g, s, log}) => {
569
+ apply: async ({context, api, kms, objects, g, s, log}) => {
642
570
  const toDo = [ ...context.objects ]
643
571
 
644
- const toValue = (objectContext) => {
572
+ const toValue = async (objectContext) => {
645
573
  if (!objectContext.value) {
646
574
  return objectContext;
647
575
  }
648
576
  let objectValue = kms.stm.api.getVariable(objectContext.value);
649
- if (!api.knownObject(objectValue)) {
650
- context.verbatim = `There is no object named "${g({...objectContext, paraphrase: true})}"`
577
+ if (!await api.knownObject(objectValue)) {
578
+ context.verbatim = `There is no object named "${await g({...objectContext, paraphrase: true})}"`
651
579
  return
652
580
  }
653
581
  return objectValue
654
582
  }
655
583
 
656
584
  let currentContext = toDo.pop()
657
- let currentValue = toValue(currentContext)
585
+ let currentValue = await toValue(currentContext)
658
586
  while (toDo.length > 0) {
659
587
  const nextContext = toDo.pop()
660
- const nextValue = toValue(nextContext)
588
+ const nextValue = await toValue(nextContext)
661
589
  if (!nextValue) {
662
590
  // TODO maybe this I aware so it can say "I don't know about blah..." and below
663
591
  // if (currentContext.unknown || !currentContext.value) {
664
592
  if (!api.conceptExists(currentContext.value)) {
665
593
  // api.conceptExists(currentContext)
666
- const objectPhrase = g({...currentContext, paraphrase: true})
594
+ const objectPhrase = await g({...currentContext, paraphrase: true})
667
595
  context.verbatim = `What "${objectPhrase}" means is unknown`
668
596
  return
669
597
  }
670
598
 
671
- const propertyPhrase = g({...nextContext, paraphrase: true})
672
- const objectPhrase = g({...currentContext, paraphrase: true})
599
+ const propertyPhrase = await g({...nextContext, paraphrase: true})
600
+ const objectPhrase = await g({...currentContext, paraphrase: true})
673
601
  context.verbatim = `There is no interpretation for "${propertyPhrase} of ${objectPhrase}"`
674
602
  return
675
603
  }
676
604
 
677
- if (!api.knownProperty(currentContext, nextContext)) {
678
- api.knownProperty(currentContext, nextContext)
679
- context.verbatim = `There is no property ${g({...nextContext, paraphrase: true})} of ${g({...currentContext, paraphrase: true})}`
605
+ if (!await api.knownProperty(currentContext, nextContext)) {
606
+ context.verbatim = `There is no property ${await g({...nextContext, paraphrase: true})} of ${await g({...currentContext, paraphrase: true})}`
680
607
  return
681
608
  }
682
- currentContext = api.getProperty(currentValue, nextValue, g)
609
+ currentContext = await api.getProperty(currentValue, nextValue, g)
683
610
  currentValue = currentContext.value
684
611
  }
685
612
  context.focusable = ['object[0]']
@@ -690,30 +617,26 @@ let configStruct = {
690
617
  ]
691
618
  };
692
619
 
693
- const createConfig = () => {
694
- const config = new Config(configStruct, module)
695
- config.stop_auto_rebuild()
696
- config.api = api
697
- config.add(concept(), meta(), dialogues())
698
- config.restart_auto_rebuild()
699
- return config
700
- }
701
-
702
620
  knowledgeModule( {
621
+ config,
622
+ api: () => new API(),
623
+ includes: [concept, meta, dialogues],
624
+
703
625
  module,
704
626
  description: 'properties of objects',
705
- createConfig,
706
627
  test: {
707
628
  name: './properties.test.json',
708
629
  contents: properties_tests,
709
630
  checks: {
710
631
  context: defaultContextCheck,
632
+ /*
711
633
  objects: [
712
634
  'children',
713
635
  'concept',
714
636
  'parents',
715
637
  'properties'
716
638
  ]
639
+ */
717
640
  },
718
641
  include: {
719
642
  words: true,
@@ -1,9 +1,9 @@
1
- const { Config, knowledgeModule, where } = require('./runtime').theprogrammablemind
1
+ const { knowledgeModule, where } = require('./runtime').theprogrammablemind
2
2
  const { defaultContextCheck } = require('./helpers')
3
3
  const gdefaults = require('./gdefaults')
4
4
  const punctuation_tests = require('./punctuation.test.json')
5
5
 
6
- let configStruct = {
6
+ let config = {
7
7
  name: 'punctuation',
8
8
  operators: [
9
9
  "([leftParenthesis|] (phrase) ([rightParenthesis|]))",
@@ -45,16 +45,16 @@ let configStruct = {
45
45
  where: where(),
46
46
  priority: -1,
47
47
  match: ({context}) => context.parenthesis == '(',
48
- apply: ({context, g}) => `(${g({ ...context, parenthesis: null })})`
48
+ apply: async ({context, g}) => `(${await g({ ...context, parenthesis: null })})`
49
49
  },
50
50
  ],
51
51
  };
52
52
 
53
- const createConfig = () => new Config(configStruct, module).add(gdefaults())
54
-
55
53
  knowledgeModule( {
54
+ config,
55
+ includes: [gdefaults],
56
+
56
57
  module,
57
- createConfig,
58
58
  description: 'punctuation',
59
59
  test: {
60
60
  name: './punctuation.test.json',