tpmkms_4wp 9.5.1 → 9.6.0
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/common/animals.instance.json +21 -61
- package/common/asking.js +116 -106
- package/common/avatar.test.json +1001 -860
- package/common/can.instance.json +2174 -0
- package/common/can.js +254 -0
- package/common/can.test.json +51307 -0
- package/common/characters.js +5 -5
- package/common/colors.instance.json +12 -12
- package/common/comparable.instance.json +3 -3
- package/common/concept.js +25 -27
- package/common/concept.test.json +180 -144
- package/common/conjunction.js +13 -5
- package/common/conjunction.test.json +32 -42
- package/common/crew.instance.json +196 -160
- package/common/crew.js +1 -1
- package/common/crew.test.json +4148 -3324
- package/common/currency.js +1 -1
- package/common/dateTimeSelectors.instance.json +2 -2
- package/common/dateTimeSelectors.js +3 -3
- package/common/dateTimeSelectors.test.json +76935 -35739
- package/common/dates.instance.json +3 -3
- package/common/dates.test.json +284 -287
- package/common/dialogues.js +41 -119
- package/common/dialogues.test.json +1171 -996
- package/common/dimension.instance.json +21369 -557
- package/common/dimension.js +148 -54
- package/common/dimension.test.json +8753 -3495
- package/common/drone.instance.json +23712 -0
- package/common/drone.js +448 -0
- package/common/drone.test.json +66665 -0
- package/common/edible.instance.json +32 -32
- package/common/emotions.instance.json +75 -76
- package/common/emotions.js +1 -1
- package/common/emotions.test.json +242 -174
- package/common/english_helpers.js +336 -0
- package/common/errors.js +6 -6
- package/common/evaluate.js +2 -2
- package/common/events.js +8 -8
- package/common/fastfood.instance.json +389 -245
- package/common/fastfood.js +11 -11
- package/common/fastfood.test.json +6970 -6829
- package/common/formulas.instance.json +1 -1
- package/common/formulas.js +1 -1
- package/common/gdefaults.js +111 -17
- package/common/help.js +12 -12
- package/common/help.test.json +65 -11
- package/common/helpers/concept.js +1 -1
- package/common/helpers/conjunction.js +54 -44
- package/common/helpers/dateTimeSelectors.js +2 -2
- package/common/helpers/dialogues.js +7 -2
- package/common/helpers/formulas.js +13 -11
- package/common/helpers/menus.js +12 -12
- package/common/helpers/meta.js +9 -9
- package/common/helpers/properties.js +185 -62
- package/common/helpers.js +167 -48
- package/common/hierarchy.js +6 -4
- package/common/kirk.instance.json +1 -1
- package/common/kirk.test.json +600 -424
- package/common/latin.instance.json +12 -12
- package/common/latin.js +9 -9
- package/common/length.instance.json +27612 -2890
- package/common/length.js +6 -1
- package/common/length.test.json +45315 -3925
- package/common/math.instance.json +29 -29
- package/common/math.js +47 -46
- package/common/menus.instance.json +7 -10
- package/common/menus.js +2 -9
- package/common/meta.js +77 -60
- package/common/nameable.js +20 -13
- package/common/nameable.test.json +436 -0
- package/common/numbers.js +1 -1
- package/common/ordering.instance.json +87 -19
- package/common/ordering.js +1 -1
- package/common/ordering.test.json +835 -417
- package/common/people.instance.json +96 -348
- package/common/people.js +6 -4
- package/common/people.test.json +4135 -3606
- package/common/pipboy.instance.json +17 -17
- package/common/pipboy.js +2 -3
- package/common/pokemon.instance.json +13 -13
- package/common/pokemon.js +1 -1
- package/common/pressure.instance.json +3579 -1610
- package/common/pressure.test.json +433 -477
- package/common/properties.instance.json +6 -17
- package/common/properties.js +25 -7
- package/common/properties.test.json +9565 -6951
- package/common/rates.instance.json +59 -0
- package/common/rates.js +97 -0
- package/common/rates.test.json +27702 -0
- package/common/reminders.instance.json +4 -4
- package/common/reminders.js +5 -5
- package/common/reminders.test.json +64635 -25787
- package/common/reports.instance.json +3 -3
- package/common/reports.js +18 -16
- package/common/scorekeeper.js +6 -6
- package/common/sdefaults.js +22 -2
- package/common/spock.instance.json +1 -1
- package/common/spock.test.json +606 -430
- package/common/stgame.js +1 -1
- package/common/stm.js +17 -6
- package/common/tell.js +1 -1
- package/common/temperature.instance.json +3659 -1690
- package/common/temperature.test.json +433 -477
- package/common/tester.js +3 -3
- package/common/time.instance.json +24762 -0
- package/common/time.js +137 -141
- package/common/time.test.json +31876 -3757
- package/common/tokenize.js +5 -2
- package/common/ui.instance.json +2 -5
- package/common/ui.js +1 -8
- package/common/weight.instance.json +10360 -4078
- package/common/weight.test.json +2601 -2263
- package/common/words.instance.json +9 -0
- package/common/words.js +53 -0
- package/common/words.test.json +2 -0
- package/common/wp.instance.json +408 -8
- package/common/wp.js +8 -4
- package/common/wp.test.json +7385 -6906
- package/main.js +4 -2
- package/package.json +20 -5
- package/common/listener.js +0 -50
- package/common/listener.test.json +0 -142
|
@@ -86,8 +86,8 @@ function getTime(time) {
|
|
|
86
86
|
return { hour, minute, second }
|
|
87
87
|
}
|
|
88
88
|
|
|
89
|
-
instantiate
|
|
90
|
-
|
|
89
|
+
function instantiate(isA, now, context) {
|
|
90
|
+
function getType(context, type) {
|
|
91
91
|
if (context.marker == 'onDate_dates' && context.date?.marker == type) {
|
|
92
92
|
return context.date
|
|
93
93
|
} if (context.marker == type) {
|
|
@@ -86,13 +86,18 @@ class API {
|
|
|
86
86
|
return
|
|
87
87
|
}
|
|
88
88
|
// const concept = pluralize.singular(value)
|
|
89
|
-
|
|
89
|
+
let concept = this.toScopedId(context)
|
|
90
|
+
const extraTypes = []
|
|
91
|
+
if (concept == 'unit' && context.objects) {
|
|
92
|
+
concept = context.objects.map((c) => this.toScopedId(c)).join("_")
|
|
93
|
+
types.push(this.toScopedId(context.objects[0]))
|
|
94
|
+
}
|
|
90
95
|
if (config.exists(concept)) {
|
|
91
96
|
return concept
|
|
92
97
|
}
|
|
93
98
|
|
|
94
99
|
// TODO handle the general case
|
|
95
|
-
|
|
100
|
+
function fixUps(concept) {
|
|
96
101
|
if (concept == '*') {
|
|
97
102
|
return '\\*'
|
|
98
103
|
}
|
|
@@ -13,7 +13,7 @@ function getVariables(expression, isVariable = (expression) => typeof expression
|
|
|
13
13
|
return []
|
|
14
14
|
}
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
function match(values, head, value) {
|
|
17
17
|
for (const prop in head) {
|
|
18
18
|
if (head[prop] instanceof Function) {
|
|
19
19
|
if (!head[prop](value[prop])) {
|
|
@@ -33,22 +33,24 @@ const match = (values, head, value) => {
|
|
|
33
33
|
return true
|
|
34
34
|
}
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
function unify(rule, value) {
|
|
37
37
|
const values = { ...rule.values }
|
|
38
38
|
if (match(values, rule.head(values), value)) {
|
|
39
39
|
return rule.body(values)
|
|
40
40
|
}
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
43
|
+
function f(values, variable) {
|
|
44
|
+
return (value) => {
|
|
45
|
+
if (!value) {
|
|
46
|
+
throw new Error("Value not present")
|
|
47
|
+
}
|
|
48
|
+
if (values[variable] && values[variable] != value) {
|
|
49
|
+
throw new Error("Variable already set to different value")
|
|
50
|
+
}
|
|
51
|
+
values[variable] = value
|
|
52
|
+
return true
|
|
49
53
|
}
|
|
50
|
-
values[variable] = value
|
|
51
|
-
return true
|
|
52
54
|
}
|
|
53
55
|
|
|
54
56
|
const rules = [
|
|
@@ -74,7 +76,7 @@ const rules = [
|
|
|
74
76
|
]
|
|
75
77
|
|
|
76
78
|
function solveFor(expression, variable, isVariable = (expression) => typeof expression.value != 'number') {
|
|
77
|
-
|
|
79
|
+
function sameVar(c1, c2) {
|
|
78
80
|
return c1.value == c2.value
|
|
79
81
|
}
|
|
80
82
|
|
package/common/helpers/menus.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
|
|
1
|
+
function calculateLefts(defs) {
|
|
2
2
|
const lefts = {}
|
|
3
3
|
calculateLeftsHelper(defs, lefts)
|
|
4
4
|
return lefts
|
|
5
5
|
}
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
function calculateLeftsHelper(defs, lefts) {
|
|
8
8
|
if (Array.isArray(defs)) {
|
|
9
9
|
let previous
|
|
10
10
|
for (const def of defs) {
|
|
@@ -19,13 +19,13 @@ const calculateLeftsHelper = (defs, lefts) => {
|
|
|
19
19
|
return lefts
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
function calculateRights(defs) {
|
|
23
23
|
const rights = {}
|
|
24
24
|
calculateRightsHelper(defs, rights)
|
|
25
25
|
return rights
|
|
26
26
|
}
|
|
27
27
|
|
|
28
|
-
|
|
28
|
+
function calculateRightsHelper(defs, rights) {
|
|
29
29
|
if (Array.isArray(defs)) {
|
|
30
30
|
let previous
|
|
31
31
|
for (const def of defs) {
|
|
@@ -40,13 +40,13 @@ const calculateRightsHelper = (defs, rights) => {
|
|
|
40
40
|
return rights
|
|
41
41
|
}
|
|
42
42
|
|
|
43
|
-
|
|
43
|
+
function calculateDowns(defs) {
|
|
44
44
|
const downs = {}
|
|
45
45
|
calculateDownsHelper(defs, downs)
|
|
46
46
|
return downs
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
-
|
|
49
|
+
function calculateDownsHelper(defs, downs) {
|
|
50
50
|
if (Array.isArray(defs)) {
|
|
51
51
|
for (const def of defs) {
|
|
52
52
|
calculateDownsHelper(def, downs)
|
|
@@ -72,13 +72,13 @@ const calculateDownsHelper = (defs, downs) => {
|
|
|
72
72
|
return downs
|
|
73
73
|
}
|
|
74
74
|
|
|
75
|
-
|
|
75
|
+
function calculateUps(defs) {
|
|
76
76
|
const ups = {}
|
|
77
77
|
calculateUpsHelper(defs, ups)
|
|
78
78
|
return ups
|
|
79
79
|
}
|
|
80
80
|
|
|
81
|
-
|
|
81
|
+
function calculateUpsHelper(defs, ups) {
|
|
82
82
|
if (Array.isArray(defs)) {
|
|
83
83
|
for (const def of defs) {
|
|
84
84
|
calculateUpsHelper(def, ups)
|
|
@@ -100,13 +100,13 @@ const calculateUpsHelper = (defs, ups) => {
|
|
|
100
100
|
return ups
|
|
101
101
|
}
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
function calculateParents(defs) {
|
|
104
104
|
const parents = {}
|
|
105
105
|
calculateParentsHelper(defs, parents)
|
|
106
106
|
return parents
|
|
107
107
|
}
|
|
108
108
|
|
|
109
|
-
|
|
109
|
+
function calculateParentsHelper(defs, parents) {
|
|
110
110
|
if (Array.isArray(defs)) {
|
|
111
111
|
for (const def of defs) {
|
|
112
112
|
parents[def.key] = def.key
|
|
@@ -123,13 +123,13 @@ const calculateParentsHelper = (defs, parents) => {
|
|
|
123
123
|
return parents
|
|
124
124
|
}
|
|
125
125
|
|
|
126
|
-
|
|
126
|
+
function calculatePaths(defs) {
|
|
127
127
|
const paths = {}
|
|
128
128
|
calculatePathsHelper(defs, paths)
|
|
129
129
|
return paths
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
-
|
|
132
|
+
function calculatePathsHelper(defs, paths) {
|
|
133
133
|
if (Array.isArray(defs)) {
|
|
134
134
|
for (const def of defs) {
|
|
135
135
|
calculatePathsHelper(def, paths)
|
package/common/helpers/meta.js
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
const _ = require('lodash')
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
function hashIndexesGet(hash, indexes) {
|
|
4
4
|
let value = hash
|
|
5
5
|
for (const i of indexes) {
|
|
6
6
|
value = value[i]
|
|
@@ -8,7 +8,7 @@ const hashIndexesGet = (hash, indexes) => {
|
|
|
8
8
|
return value
|
|
9
9
|
}
|
|
10
10
|
|
|
11
|
-
|
|
11
|
+
function hashIndexesSet(hash, indexes, value) {
|
|
12
12
|
let currentValue = hash
|
|
13
13
|
for (const i of indexes.slice(0, -1)) {
|
|
14
14
|
if (!currentValue[i]) {
|
|
@@ -19,7 +19,7 @@ const hashIndexesSet = (hash, indexes, value) => {
|
|
|
19
19
|
currentValue[indexes[indexes.length-1]] = value
|
|
20
20
|
}
|
|
21
21
|
|
|
22
|
-
|
|
22
|
+
function isPrefix(prefix, fix) {
|
|
23
23
|
return prefix.every((element, index) => {
|
|
24
24
|
return prefix[index] === fix[index]
|
|
25
25
|
})
|
|
@@ -27,11 +27,11 @@ const isPrefix = (prefix, fix) => {
|
|
|
27
27
|
}
|
|
28
28
|
|
|
29
29
|
// assumes isPrefix is true
|
|
30
|
-
|
|
30
|
+
function replacePrefix(prefix, prefixPrime, fix) {
|
|
31
31
|
return prefixPrime.concat(fix.slice(prefix.length))
|
|
32
32
|
}
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
function compose(m1s, m2s) {
|
|
35
35
|
return m2s.map( (m2) => {
|
|
36
36
|
m1 = m1s.find( (m1) => isPrefix(m1.from, m2.from) )
|
|
37
37
|
if (m1) {
|
|
@@ -48,7 +48,7 @@ const compose = (m1s, m2s) => {
|
|
|
48
48
|
'[{"from":["two"],"to":["owner"]},{"from":["one"],"to":["ownee"]},{"from":["number"],"to":["number"]}]'
|
|
49
49
|
*/
|
|
50
50
|
|
|
51
|
-
|
|
51
|
+
function translationMapping(from, to) {
|
|
52
52
|
const mappings = []
|
|
53
53
|
if (from.atomic) {
|
|
54
54
|
return mappings
|
|
@@ -65,7 +65,7 @@ const translationMapping = (from, to) => {
|
|
|
65
65
|
if (matchField) {
|
|
66
66
|
let found = false
|
|
67
67
|
const todo = Object.keys(to).map( (key) => [key] )
|
|
68
|
-
while (!found) {
|
|
68
|
+
while (!found && todo.length > 0) {
|
|
69
69
|
const tkey = todo.shift()
|
|
70
70
|
const tvalue = hashIndexesGet(to, tkey);
|
|
71
71
|
const fvalue = hashIndexesGet(from, [fkey]);
|
|
@@ -89,7 +89,7 @@ const translationMapping = (from, to) => {
|
|
|
89
89
|
return mappings
|
|
90
90
|
}
|
|
91
91
|
|
|
92
|
-
|
|
92
|
+
function translationMappings(froms, to) {
|
|
93
93
|
const mappingss = []
|
|
94
94
|
for (const from of froms) {
|
|
95
95
|
mappingss.push(translationMapping(from, to))
|
|
@@ -97,7 +97,7 @@ const translationMappings = (froms, to) => {
|
|
|
97
97
|
return mappingss
|
|
98
98
|
}
|
|
99
99
|
|
|
100
|
-
|
|
100
|
+
function translationMappingToInstantiatorMappings(translationMapping, from , to) {
|
|
101
101
|
return translationMapping.map( (tm) => {
|
|
102
102
|
return {
|
|
103
103
|
// match: ({context}) => context.value == to[tm.to].value,
|
|
@@ -1,14 +1,33 @@
|
|
|
1
1
|
const pluralize = require('pluralize')
|
|
2
|
+
const { conjugateVerb } = require('../english_helpers')
|
|
2
3
|
const { unflatten, flattens, Digraph } = require('../runtime').theprogrammablemind
|
|
3
4
|
const _ = require('lodash')
|
|
4
5
|
const deepEqual = require('deep-equal')
|
|
5
|
-
const { chooseNumber } = require('../helpers.js')
|
|
6
|
+
const { chooseNumber, removeProp } = require('../helpers.js')
|
|
6
7
|
const { Frankenhash } = require('./frankenhash.js')
|
|
7
8
|
const { compose, translationMapping, translationMappingToInstantiatorMappings } = require('./meta.js')
|
|
8
9
|
|
|
9
10
|
class API {
|
|
10
11
|
constructor() {
|
|
11
12
|
this.digraph = new Digraph()
|
|
13
|
+
this.hierarchyWatchers = []
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
addHierarchyWatcher(watcher) {
|
|
17
|
+
this.hierarchyWatchers.push(watcher)
|
|
18
|
+
}
|
|
19
|
+
|
|
20
|
+
removeHierarchyWatcher(watcher) {
|
|
21
|
+
this.hierarchyWatchers = this.hierarchyWatchers.filter((w) => w.id == watcher.id)
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
seenHierarchyWatcher(watcherArgs) {
|
|
25
|
+
const args = { ...this.args, ...watcherArgs }
|
|
26
|
+
for (const { match, apply } of this.hierarchyWatchers) {
|
|
27
|
+
if (match(args)) {
|
|
28
|
+
apply(args)
|
|
29
|
+
}
|
|
30
|
+
}
|
|
12
31
|
}
|
|
13
32
|
|
|
14
33
|
initialize({ km, objects, config }) {
|
|
@@ -28,7 +47,7 @@ class API {
|
|
|
28
47
|
this._km = km
|
|
29
48
|
this.__config = config
|
|
30
49
|
this.digraph = new Digraph()
|
|
31
|
-
|
|
50
|
+
function toJSON(h) {
|
|
32
51
|
if (h.child && h.parent) {
|
|
33
52
|
return h
|
|
34
53
|
} else {
|
|
@@ -228,8 +247,8 @@ class API {
|
|
|
228
247
|
match: ({context, hierarchy}) => hierarchy.isA(context.marker, 'is') && context.one && context.one.marker == after[0].tag && context.one.constraints && context.one.constraints[0] && context.one.constraints[0].constraint.marker == edAble.operator && context.one.constraints[0].constraint[before[0].tag].implicit,
|
|
229
248
|
apply: async ({context, fragments, g, gs, callId}) => {
|
|
230
249
|
const isToFromM = [{"from":["one"],"to":["two"]},{"from":["two"],"to":["one"]}]
|
|
231
|
-
const fromF = fragments(whoIsWhatVerbedBy).contexts()[0]
|
|
232
|
-
const toF = fragments(thisIsVerbedByThat)
|
|
250
|
+
const fromF = (await fragments(whoIsWhatVerbedBy)).contexts()[0]
|
|
251
|
+
const toF = await fragments(thisIsVerbedByThat)
|
|
233
252
|
const to = toF.contexts()[0]
|
|
234
253
|
const tm = translationMapping(fromF, to)
|
|
235
254
|
/*
|
|
@@ -263,12 +282,35 @@ class API {
|
|
|
263
282
|
// relation -> the semantics will be implements using relations
|
|
264
283
|
// edable: "y is owned by x" edable = { operator: 'owned' }
|
|
265
284
|
createActionPrefix(args, semanticApply) {
|
|
266
|
-
const {
|
|
267
|
-
|
|
268
|
-
|
|
269
|
-
|
|
285
|
+
const {
|
|
286
|
+
operator,
|
|
287
|
+
before=[],
|
|
288
|
+
after=[],
|
|
289
|
+
create:createInit=[],
|
|
290
|
+
hierarchy=[],
|
|
291
|
+
config,
|
|
292
|
+
localHierarchy=[],
|
|
293
|
+
relation,
|
|
294
|
+
ordering,
|
|
295
|
+
doAble,
|
|
296
|
+
flatten,
|
|
297
|
+
can,
|
|
298
|
+
words = [],
|
|
299
|
+
unflatten:unflattenArgs = [],
|
|
300
|
+
focusable = [],
|
|
301
|
+
edAble } = args;
|
|
302
|
+
|
|
303
|
+
function createToCanonical(concept) {
|
|
304
|
+
if (typeof concept == 'string') {
|
|
305
|
+
return { id: concept, isA: [] }
|
|
306
|
+
} else {
|
|
307
|
+
return { isA: [], ...concept }
|
|
308
|
+
}
|
|
309
|
+
}
|
|
270
310
|
|
|
271
|
-
|
|
311
|
+
const create = createInit.map(createToCanonical)
|
|
312
|
+
|
|
313
|
+
if (doAble) {
|
|
272
314
|
if (before.length != 1) {
|
|
273
315
|
throw "Expected exactly one before argument"
|
|
274
316
|
}
|
|
@@ -287,7 +329,6 @@ class API {
|
|
|
287
329
|
pattern: `([(${beforeOperators} [${operator}|] ${afterOperators}^)])`,
|
|
288
330
|
allowDups: true,
|
|
289
331
|
})
|
|
290
|
-
// config.addOperator({ id: operator, level: 1, words: [operator] })
|
|
291
332
|
config.addBridge({
|
|
292
333
|
id: operator,
|
|
293
334
|
level: 1,
|
|
@@ -307,7 +348,6 @@ class API {
|
|
|
307
348
|
if (create.includes(argument.id)) {
|
|
308
349
|
// config.addHierarchy('unknown', argument.id)
|
|
309
350
|
// config.addHierarchy('what', argument.id)
|
|
310
|
-
// greg23 <<<<<<<<<<<< doing this
|
|
311
351
|
config.addHierarchy(argument.id, 'unknown')
|
|
312
352
|
config.addHierarchy(argument.id, 'what')
|
|
313
353
|
}
|
|
@@ -323,9 +363,9 @@ class API {
|
|
|
323
363
|
}
|
|
324
364
|
}
|
|
325
365
|
|
|
326
|
-
create.map( (id) => {
|
|
366
|
+
create.map( ({ id, isA }) => {
|
|
327
367
|
if (id === operator) {
|
|
328
|
-
|
|
368
|
+
function tagsToProps(where, args, suffix='') {
|
|
329
369
|
const i = 0;
|
|
330
370
|
let r = ''
|
|
331
371
|
for (const arg of args) {
|
|
@@ -341,13 +381,30 @@ class API {
|
|
|
341
381
|
afterArgs = tagsToProps('after', after, '*')
|
|
342
382
|
}
|
|
343
383
|
|
|
384
|
+
// const subjectContext = before[0].tag
|
|
385
|
+
// const interpolate = "[" + before.map((arg) => `{ property: '${arg.tag}' }`).concat(`{ ...operator, evaluateWord: true, number: ${subjectContext}.number }`).concat(after.map((arg) => `{ property: '${arg.tag}' }`)).join(',') + "]"
|
|
386
|
+
const imperative = (before.length == 0) ? "true" : "false"
|
|
387
|
+
// const interpolate = "[" + before.map((arg) => `{ property: '${arg.tag}' }`).concat(`{ ...operator, evaluateWord: true, imperative: ${imperative}, isVerb: true, number: 'one' }`).concat(after.map((arg) => `{ property: '${arg.tag}' }`)).join(',') + "]"
|
|
388
|
+
// const interpolateVerb = `{ property: "operator", context: { evaluateWord: true, imperative: ${imperative}, isVerb: true, number: 'one' } }`
|
|
389
|
+
let interpolateVerb
|
|
390
|
+
if (before.length > 0) {
|
|
391
|
+
interpolateVerb = `{ property: "operator", number: '${before[0].tag}' }`
|
|
392
|
+
} else {
|
|
393
|
+
interpolateVerb = `{ property: "operator" }`
|
|
394
|
+
}
|
|
395
|
+
const interpolate = "[" + before.map((arg) => `{ property: '${arg.tag}' }`).concat(interpolateVerb).concat(after.map((arg) => `{ property: '${arg.tag}' }`)).join(',') + "]"
|
|
396
|
+
|
|
344
397
|
const unflattenArgs = [ ...before.map( (arg) => arg.tag ), ...after.map( (arg) => arg.tag ) ]
|
|
345
398
|
const focusable = [ ...before.map( (arg) => arg.tag ), ...after.map( (arg) => arg.tag ) ]
|
|
399
|
+
let flattenProperty = ''
|
|
400
|
+
if (flatten) {
|
|
401
|
+
flattenProperty = ", flatten: true, relation: true "
|
|
402
|
+
}
|
|
346
403
|
config.addBridge({
|
|
347
404
|
id: operator,
|
|
348
405
|
level: 0,
|
|
349
406
|
localHierarchy: [...localHierarchy, ['object', 'unknown']],
|
|
350
|
-
bridge: `{ ... next(operator) ${doParams} ${beforeArgs} ${afterArgs}, unflatten: ${JSON.stringify(unflattenArgs)}, focusable: ${JSON.stringify(focusable)} }`,
|
|
407
|
+
bridge: `{ ... next(operator) ${flattenProperty} ${doParams} ${beforeArgs} ${afterArgs}, operator: { ...operator, evaluateWord: true, imperative: ${imperative}, isVerb: true, number: 'one' }, unflatten: ${JSON.stringify(unflattenArgs)}, focusable: ${JSON.stringify(focusable)}, interpolate: ${interpolate} }`,
|
|
351
408
|
allowDups: true
|
|
352
409
|
})
|
|
353
410
|
if (words.length > 0) {
|
|
@@ -360,13 +417,30 @@ class API {
|
|
|
360
417
|
} else {
|
|
361
418
|
config.addBridge({ id: id, allowDups: true })
|
|
362
419
|
}
|
|
420
|
+
|
|
421
|
+
for (const parentId of isA) {
|
|
422
|
+
config.addHierarchy(id, parentId)
|
|
423
|
+
}
|
|
363
424
|
})
|
|
364
425
|
|
|
365
426
|
if (words.length == 0) {
|
|
427
|
+
const createDef = createInit.find((def) => def.id == operator)
|
|
428
|
+
if (createDef && createDef.infinitive) {
|
|
429
|
+
const conjugation = conjugateVerb(createDef.infinitive)
|
|
430
|
+
if (can) {
|
|
431
|
+
const def = conjugation.find((def) => def.form == "pastParticiple")
|
|
432
|
+
config.addWord(def.word, { id: operator, initial: `{ value: '${operator}', isVerb: true, tense: '${def.tense}' }`})
|
|
433
|
+
}
|
|
434
|
+
}
|
|
435
|
+
|
|
366
436
|
const operatorPlural = pluralize.singular(operator)
|
|
367
437
|
const operatorSingular = pluralize.plural(operator)
|
|
368
|
-
config.addWord(operatorSingular, { id: operator, initial: `{ value: '${operator}', number: 'one' }`})
|
|
369
|
-
config.addWord(operatorPlural, { id: operator, initial: `{ value: '${operator}', number: 'many' }`})
|
|
438
|
+
config.addWord(operatorSingular, { id: operator, initial: `{ value: '${operator}', isVerb: true, number: 'one' }`})
|
|
439
|
+
config.addWord(operatorPlural, { id: operator, initial: `{ value: '${operator}', isVerb: true, number: 'many' }`})
|
|
440
|
+
}
|
|
441
|
+
|
|
442
|
+
for (const { child, parent } of hierarchy) {
|
|
443
|
+
config.addHierarchy(child, parent)
|
|
370
444
|
}
|
|
371
445
|
|
|
372
446
|
if (doAble) {
|
|
@@ -376,49 +450,97 @@ class API {
|
|
|
376
450
|
config.addPriority({ "context": [[operator, 0], ['means', 0], ], "choose": [0] })
|
|
377
451
|
config.addPriority({ "context": [['article', 0], [operator, 0], ], "choose": [0] })
|
|
378
452
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
}
|
|
391
|
-
const word = context.word
|
|
392
|
-
const sub = []
|
|
393
|
-
if (context.subphrase) {
|
|
394
|
-
sub.push(['that'])
|
|
395
|
-
}
|
|
396
|
-
return beforeGenerator.concat(sub).concat([word]).concat(afterGenerator).join(' ')
|
|
397
|
-
}
|
|
398
|
-
})
|
|
453
|
+
if (can) {
|
|
454
|
+
const beforeIds = before.map((def) => def.id)
|
|
455
|
+
const afterIds = after.map((def) => def.id)
|
|
456
|
+
config.addHierarchy(operator, 'canableAction')
|
|
457
|
+
config.addAssociation({ context: [[afterIds[0], 0], ['whatCanQuestion', 0], [beforeIds[0], 0], [operator, 0]], choose: 1 })
|
|
458
|
+
config.addAssociation({ context: [[afterIds[0], 1], ['whatCanQuestion', 0], [beforeIds[0], 0], [operator, 0]], choose: 1 })
|
|
459
|
+
config.addAssociation({ context: [[afterIds[0], 0], ['whatCanQuestionPassive', 0], [beforeIds[0], 0], ['beCanPassive', 0], [operator, 0], ['byCanPassive', 0]], choose: 1 })
|
|
460
|
+
config.addAssociation({ context: [[afterIds[0], 1], ['whatCanQuestionPassive', 0], [beforeIds[0], 0], ['beCanPassive', 0], [operator, 0], ['byCanPassive', 0]], choose: 1 })
|
|
461
|
+
config.addAssociation({ context: [[afterIds[0], 0], ['canPassive', 0], ['beCanPassive', 0], [operator, 0], ['byCanPassive', 0], [beforeIds[0], 0]], choose: 1 })
|
|
462
|
+
config.addAssociation({ context: [[afterIds[0], 1], ['canPassive', 0], ['beCanPassive', 0], [operator, 0], ['byCanPassive', 0], [beforeIds[0], 0]], choose: 1 })
|
|
463
|
+
}
|
|
399
464
|
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
if (!context.do.query || evalue.truthValueOnly || brief) {
|
|
409
|
-
if (evalue.truthValue) {
|
|
410
|
-
yesno = 'yes'
|
|
411
|
-
} else if (evalue.truthValue === false) {
|
|
412
|
-
yesno = 'no'
|
|
465
|
+
if (false) {
|
|
466
|
+
config.addGenerator({
|
|
467
|
+
notes: 'ordering generator for paraphrase',
|
|
468
|
+
match: ({context}) => context.marker == operator && context.paraphrase && !context.query,
|
|
469
|
+
apply: async ({context, gp, g}) => {
|
|
470
|
+
const beforeGenerator = []
|
|
471
|
+
for (const arg of before) {
|
|
472
|
+
beforeGenerator.push(await g(context[arg.tag]))
|
|
413
473
|
}
|
|
474
|
+
const afterGenerator = []
|
|
475
|
+
for (const arg of after) {
|
|
476
|
+
afterGenerator.push(await gp(context[arg.tag]))
|
|
477
|
+
}
|
|
478
|
+
const word = context.word
|
|
479
|
+
const sub = []
|
|
480
|
+
if (context.subphrase) {
|
|
481
|
+
sub.push(['that'])
|
|
482
|
+
}
|
|
483
|
+
return beforeGenerator.concat(sub).concat([word]).concat(afterGenerator).join(' ')
|
|
414
484
|
}
|
|
415
|
-
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
485
|
+
})
|
|
486
|
+
}
|
|
487
|
+
|
|
488
|
+
if (true) {
|
|
489
|
+
config.addGenerator({
|
|
490
|
+
notes: 'ordering generator for response',
|
|
491
|
+
match: ({context}) => context.marker == operator && context.evalue && context.isResponse,
|
|
492
|
+
apply: async ({context, s, g, km, flatten}) => {
|
|
493
|
+
const brief = km("dialogues").api.getBrief()
|
|
494
|
+
|
|
495
|
+
let { evalue } = context
|
|
496
|
+
let yesno = ''
|
|
497
|
+
let hasVariables = false
|
|
498
|
+
if (context.focusable) {
|
|
499
|
+
for (const f of context.focusable) {
|
|
500
|
+
if (context[f].query) {
|
|
501
|
+
hasVariables = true
|
|
502
|
+
break
|
|
503
|
+
}
|
|
504
|
+
}
|
|
505
|
+
}
|
|
506
|
+
|
|
507
|
+
// if (!context.do?.query || evalue.truthValueOnly || context.truthValueOnly || brief) {
|
|
508
|
+
if (evalue.truthValueOnly || context.truthValueOnly || context.wantsTruthValue || !hasVariables) {
|
|
509
|
+
function any(value, test) {
|
|
510
|
+
if (test(value)) {
|
|
511
|
+
return true
|
|
512
|
+
}
|
|
513
|
+
const values = flatten(['list'], value)[0]
|
|
514
|
+
for (const value of values) {
|
|
515
|
+
if (test(value)) {
|
|
516
|
+
return true
|
|
517
|
+
}
|
|
518
|
+
}
|
|
519
|
+
}
|
|
520
|
+
if (any(evalue, (value) => value.truthValue)) {
|
|
521
|
+
yesno = 'yes'
|
|
522
|
+
} else if (evalue.truthValue === false || context.truthValueOnly) {
|
|
523
|
+
yesno = 'no'
|
|
524
|
+
}
|
|
525
|
+
}
|
|
526
|
+
if (evalue.truthValueOnly) {
|
|
527
|
+
return `${yesno}`
|
|
528
|
+
} else {
|
|
529
|
+
if (context.voice) {
|
|
530
|
+
evalue = await s({ ...evalue, toVoice: context.voice, flatten: false})
|
|
531
|
+
}
|
|
532
|
+
|
|
533
|
+
const details = await g(Object.assign({}, evalue, { paraphrase: true }))
|
|
534
|
+
if (yesno) {
|
|
535
|
+
return `${yesno} ${details}`
|
|
536
|
+
}
|
|
537
|
+
else {
|
|
538
|
+
return details
|
|
539
|
+
}
|
|
540
|
+
}
|
|
419
541
|
}
|
|
420
|
-
}
|
|
421
|
-
}
|
|
542
|
+
})
|
|
543
|
+
}
|
|
422
544
|
|
|
423
545
|
if (ordering) {
|
|
424
546
|
config.addSemantic({
|
|
@@ -494,7 +616,7 @@ class API {
|
|
|
494
616
|
if (relation) {
|
|
495
617
|
config.addSemantic({
|
|
496
618
|
notes: `setter for ${operator}`,
|
|
497
|
-
match: ({context}) => context.marker == operator,
|
|
619
|
+
match: ({context}) => context.marker == operator && !context.toVoice,
|
|
498
620
|
apply: ({context, km, hierarchy, config}) => {
|
|
499
621
|
const api = km('properties').api
|
|
500
622
|
// add types for arguments
|
|
@@ -515,9 +637,8 @@ class API {
|
|
|
515
637
|
config.addSemantic({
|
|
516
638
|
notes: `getter for ${operator}`,
|
|
517
639
|
match: ({context}) => context.marker == operator && context.query,
|
|
518
|
-
apply: ({context, km}) => {
|
|
640
|
+
apply: ({context, km, callId}) => {
|
|
519
641
|
const api = km('properties').api
|
|
520
|
-
|
|
521
642
|
context.evalue = {
|
|
522
643
|
marker: 'list',
|
|
523
644
|
value: unflatten(api.relation_get(context, before.concat(after).map( (arg) => arg.tag ) ))
|
|
@@ -527,8 +648,8 @@ class API {
|
|
|
527
648
|
if (context.evalue.value.length == 0) {
|
|
528
649
|
context.evalue.marker = 'answerNotKnown';
|
|
529
650
|
context.evalue.value = [];
|
|
530
|
-
|
|
531
|
-
context.evalue.
|
|
651
|
+
} else {
|
|
652
|
+
// context.evalue.truthValue = true
|
|
532
653
|
}
|
|
533
654
|
}
|
|
534
655
|
})
|
|
@@ -552,10 +673,13 @@ class API {
|
|
|
552
673
|
}
|
|
553
674
|
|
|
554
675
|
relation_add (relations) {
|
|
676
|
+
removeProp(relations, (val, prop, obj) => prop === 'range')
|
|
677
|
+
|
|
555
678
|
if (!Array.isArray(relations)) {
|
|
556
679
|
relations = [relations]
|
|
557
680
|
}
|
|
558
681
|
for (const relation of relations) {
|
|
682
|
+
relation.truthValue = true
|
|
559
683
|
this._objects.relations.push(relation)
|
|
560
684
|
}
|
|
561
685
|
}
|
|
@@ -599,7 +723,7 @@ class API {
|
|
|
599
723
|
return value
|
|
600
724
|
}
|
|
601
725
|
|
|
602
|
-
relation_get(context, args) {
|
|
726
|
+
relation_get (context, args) {
|
|
603
727
|
const andTheAnswerIs = []
|
|
604
728
|
for (const relation of this._objects.relations) {
|
|
605
729
|
if (this.relation_match(args, context, relation)) {
|
|
@@ -703,7 +827,6 @@ class API {
|
|
|
703
827
|
}
|
|
704
828
|
|
|
705
829
|
setProperty(object, property, value, has, skipHandler) {
|
|
706
|
-
// debugger
|
|
707
830
|
if (!skipHandler) {
|
|
708
831
|
const handler = this.propertiesFH.getHandler([object, property])
|
|
709
832
|
if (handler) {
|