tpmkms_4wp 9.3.0-beta.1 → 9.3.0-beta.11

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 (52) hide show
  1. package/common/animals.instance.json +0 -65
  2. package/common/colors.instance.json +0 -70
  3. package/common/comparable.instance.json +0 -15
  4. package/common/concept.test.json +279 -193
  5. package/common/crew.instance.json +0 -166
  6. package/common/dateTimeSelectors.instance.json +42 -0
  7. package/common/dateTimeSelectors.js +94 -0
  8. package/common/dateTimeSelectors.test.json +4529 -0
  9. package/common/dates.instance.json +52 -27
  10. package/common/dates.js +13 -0
  11. package/common/dates.test.json +1787 -0
  12. package/common/dialogues.js +5 -2
  13. package/common/dimension.instance.json +0 -5
  14. package/common/edible.instance.json +0 -160
  15. package/common/emotions.instance.json +0 -5
  16. package/common/evaluate.js +1 -1
  17. package/common/events.js +1 -1
  18. package/common/fastfood.instance.json +326 -873
  19. package/common/fastfood.test.json +16291 -6597
  20. package/common/formulas.instance.json +0 -5
  21. package/common/helpers/dateTimeSelectors.js +71 -0
  22. package/common/helpers.js +24 -7
  23. package/common/kirk.instance.json +0 -5
  24. package/common/length.instance.json +0 -75
  25. package/common/math.instance.json +0 -5
  26. package/common/menus.instance.json +0 -35
  27. package/common/numbers.js +1 -1
  28. package/common/numbers.test.json +89 -23
  29. package/common/ordering.instance.json +0 -10
  30. package/common/people.instance.json +0 -40
  31. package/common/percentages.js +1 -1
  32. package/common/pipboy.instance.json +0 -85
  33. package/common/pipboy.test.json +4377 -3386
  34. package/common/pokemon.instance.json +0 -65
  35. package/common/pressure.instance.json +0 -20
  36. package/common/properties.instance.json +0 -5
  37. package/common/reminders.instance.json +101 -0
  38. package/common/reminders.js +221 -0
  39. package/common/reminders.test.json +13558 -0
  40. package/common/reports.instance.json +2 -12
  41. package/common/scorekeeper.test.json +3565 -7550
  42. package/common/spock.instance.json +0 -5
  43. package/common/temperature.instance.json +0 -20
  44. package/common/time.js +55 -30
  45. package/common/time.test.json +4124 -124
  46. package/common/ui.instance.json +0 -5
  47. package/common/ui.js +3 -1
  48. package/common/weight.instance.json +0 -60
  49. package/common/wp.instance.json +0 -70
  50. package/common/wp.test.json +8057 -3867
  51. package/main.js +4 -0
  52. package/package.json +12 -4
@@ -72,11 +72,6 @@
72
72
  "article",
73
73
  false
74
74
  ],
75
- [
76
- "evaluate",
77
- "verb",
78
- false
79
- ],
80
75
  [
81
76
  "every",
82
77
  "article",
@@ -619,11 +614,6 @@
619
614
  "article",
620
615
  false
621
616
  ],
622
- [
623
- "evaluate",
624
- "verb",
625
- false
626
- ],
627
617
  [
628
618
  "every",
629
619
  "article",
@@ -1495,11 +1485,6 @@
1495
1485
  "article",
1496
1486
  false
1497
1487
  ],
1498
- [
1499
- "evaluate",
1500
- "verb",
1501
- false
1502
- ],
1503
1488
  [
1504
1489
  "every",
1505
1490
  "article",
@@ -2991,11 +2976,6 @@
2991
2976
  "article",
2992
2977
  false
2993
2978
  ],
2994
- [
2995
- "evaluate",
2996
- "verb",
2997
- false
2998
- ],
2999
2979
  [
3000
2980
  "every",
3001
2981
  "article",
@@ -3838,11 +3818,6 @@
3838
3818
  "article",
3839
3819
  false
3840
3820
  ],
3841
- [
3842
- "evaluate",
3843
- "verb",
3844
- false
3845
- ],
3846
3821
  [
3847
3822
  "every",
3848
3823
  "article",
@@ -4775,11 +4750,6 @@
4775
4750
  "article",
4776
4751
  false
4777
4752
  ],
4778
- [
4779
- "evaluate",
4780
- "verb",
4781
- false
4782
- ],
4783
4753
  [
4784
4754
  "every",
4785
4755
  "article",
@@ -5892,11 +5862,6 @@
5892
5862
  "type",
5893
5863
  false
5894
5864
  ],
5895
- [
5896
- "evaluate",
5897
- "verb",
5898
- false
5899
- ],
5900
5865
  [
5901
5866
  "every",
5902
5867
  "article",
@@ -7099,11 +7064,6 @@
7099
7064
  "type",
7100
7065
  false
7101
7066
  ],
7102
- [
7103
- "evaluate",
7104
- "verb",
7105
- false
7106
- ],
7107
7067
  [
7108
7068
  "every",
7109
7069
  "article",
@@ -8620,11 +8580,6 @@
8620
8580
  "type",
8621
8581
  false
8622
8582
  ],
8623
- [
8624
- "evaluate",
8625
- "verb",
8626
- false
8627
- ],
8628
8583
  [
8629
8584
  "every",
8630
8585
  "article",
@@ -10146,11 +10101,6 @@
10146
10101
  "type",
10147
10102
  false
10148
10103
  ],
10149
- [
10150
- "evaluate",
10151
- "verb",
10152
- false
10153
- ],
10154
10104
  [
10155
10105
  "every",
10156
10106
  "article",
@@ -11682,11 +11632,6 @@
11682
11632
  "type",
11683
11633
  false
11684
11634
  ],
11685
- [
11686
- "evaluate",
11687
- "verb",
11688
- false
11689
- ],
11690
11635
  [
11691
11636
  "every",
11692
11637
  "article",
@@ -13223,11 +13168,6 @@
13223
13168
  "type",
13224
13169
  false
13225
13170
  ],
13226
- [
13227
- "evaluate",
13228
- "verb",
13229
- false
13230
- ],
13231
13171
  [
13232
13172
  "every",
13233
13173
  "article",
@@ -14729,11 +14669,6 @@
14729
14669
  "type",
14730
14670
  false
14731
14671
  ],
14732
- [
14733
- "evaluate",
14734
- "verb",
14735
- false
14736
- ],
14737
14672
  [
14738
14673
  "every",
14739
14674
  "article",
@@ -243,11 +243,6 @@
243
243
  "article",
244
244
  false
245
245
  ],
246
- [
247
- "evaluate",
248
- "verb",
249
- false
250
- ],
251
246
  [
252
247
  "every",
253
248
  "article",
@@ -1675,11 +1670,6 @@
1675
1670
  "article",
1676
1671
  false
1677
1672
  ],
1678
- [
1679
- "evaluate",
1680
- "verb",
1681
- false
1682
- ],
1683
1673
  [
1684
1674
  "every",
1685
1675
  "article",
@@ -3635,11 +3625,6 @@
3635
3625
  "article",
3636
3626
  false
3637
3627
  ],
3638
- [
3639
- "evaluate",
3640
- "verb",
3641
- false
3642
- ],
3643
3628
  [
3644
3629
  "every",
3645
3630
  "article",
@@ -5311,11 +5296,6 @@
5311
5296
  "article",
5312
5297
  false
5313
5298
  ],
5314
- [
5315
- "evaluate",
5316
- "verb",
5317
- false
5318
- ],
5319
5299
  [
5320
5300
  "every",
5321
5301
  "article",
@@ -59,11 +59,6 @@
59
59
  "article",
60
60
  false
61
61
  ],
62
- [
63
- "evaluate",
64
- "verb",
65
- false
66
- ],
67
62
  [
68
63
  "every",
69
64
  "article",
@@ -0,0 +1,101 @@
1
+ {
2
+ "configs": [
3
+ {
4
+ "operators": [
5
+ "([remind] (self/*) (!@<= 'dateTimeSelector')*)",
6
+ "([remind:withDateBridge] (self/*) (!@<= 'dateTimeSelector')* (dateTimeSelector))",
7
+ "([remind:withDateAndTimeBridge] (self/*) (!@<= 'dateTimeSelector')* (dateTimeSelector) (atTime))",
8
+ "([show] ([reminders]))",
9
+ "([delete_reminders|delete,cancel] (number/*))"
10
+ ],
11
+ "bridges": [
12
+ {
13
+ "id": "remind",
14
+ "isA": [
15
+ "verb"
16
+ ],
17
+ "bridge": "{ ...next(operator), operator: operator, who: after[0], reminder: after[1], interpolate: '${operator} ${who} ${reminder}' }",
18
+ "withDateBridge": "{ ...next(operator), operator: operator, who: after[0], reminder: after[1], date: after[2], interpolate: '${operator} ${who} ${reminder} ${date}' }",
19
+ "withDateAndTimeBridge": "{ ...next(operator), operator: operator, who: after[0], reminder: after[1], date: after[2], time: after[3], interpolate: '${operator} ${who} ${reminder} ${date} ${time}' }",
20
+ "semantic": "async ({api, gsp, gp, context}) => {\n const text = await gsp(context.reminder.slice(1));\n const reminder = { text, dateTimeSelector: context.date }\n if (context.date) {\n reminder.dateTimeSelector = context.date\n reminder.dateTimeSelectorText = await gp(context.date)\n }\n await api.instantiate(reminder)\n api.add(reminder)\n }"
21
+ },
22
+ {
23
+ "id": "reminders",
24
+ "isA": [
25
+ "noun"
26
+ ]
27
+ },
28
+ {
29
+ "id": "show",
30
+ "isA": [
31
+ "verb"
32
+ ],
33
+ "bridge": "{ ...next(operator), operator: operator, reminders: after[0], interpolate: '${operator} ${reminders}' }",
34
+ "semantic": "({context, api, verbatim}) => {\n verbatim(api.show())\n }"
35
+ },
36
+ {
37
+ "id": "delete_reminders",
38
+ "isA": [
39
+ "verb"
40
+ ],
41
+ "bridge": "{ ...next(operator), operator: operator, reminders: after[0], interpolate: '${operator} ${reminders}' }",
42
+ "semantic": "({context, api, verbatim}) => {\n const s = api.delete_reminder(context.reminders.value)\n if (s) {\n verbatim(s)\n }\n }"
43
+ }
44
+ ]
45
+ },
46
+ {
47
+ "apply": "({ask, api}) => {\n ask([\n {\n where: where(),\n oneShot: false,\n onNevermind: ({verbatim, ...args}) => {\n // this is cross km boundaries from the dialogues km to this one so the api if for dialogs.\n // i need to get the one for fastfood here.\n const api = args.kms.fastfood.api\n const needsDrink = askAbout({ args, api })\n for (const item of needsDrink) {\n api.remove(item)\n }\n },\n\n matchq: ({ api, context }) => api.askAbout().length > 0 && context.marker == 'controlEnd',\n applyq: ({ api, context }) => {\n context.cascade = false\n const items = api.askAbout()\n const item = items[0]\n return 'When should I remind you to ' + item.text;\n },\n\n matchr: ({ isA, api, context }) => {\n if (isA(context.marker, 'onDateValue_dates') && api.askAbout().length > 0) {\n return true\n }\n return false\n },\n applyr: async ({ context, api, gp }) => {\n const items = api.askAbout()\n api.update({ id: items[0].id, dateTimeSelector: context, dateTimeSelectorText: await gp(context) })\n }\n },\n ])\n }"
48
+ }
49
+ ],
50
+ "resultss": [
51
+ {
52
+ "extraConfig": true,
53
+ "operators": [
54
+ "([remind] (self/*) (!@<= 'dateTimeSelector')*)",
55
+ "([remind:withDateBridge] (self/*) (!@<= 'dateTimeSelector')* (dateTimeSelector))",
56
+ "([remind:withDateAndTimeBridge] (self/*) (!@<= 'dateTimeSelector')* (dateTimeSelector) (atTime))",
57
+ "([show] ([reminders]))",
58
+ "([delete_reminders|delete,cancel] (number/*))"
59
+ ],
60
+ "bridges": [
61
+ {
62
+ "id": "remind",
63
+ "isA": [
64
+ "verb"
65
+ ],
66
+ "bridge": "{ ...next(operator), operator: operator, who: after[0], reminder: after[1], interpolate: '${operator} ${who} ${reminder}' }",
67
+ "withDateBridge": "{ ...next(operator), operator: operator, who: after[0], reminder: after[1], date: after[2], interpolate: '${operator} ${who} ${reminder} ${date}' }",
68
+ "withDateAndTimeBridge": "{ ...next(operator), operator: operator, who: after[0], reminder: after[1], date: after[2], time: after[3], interpolate: '${operator} ${who} ${reminder} ${date} ${time}' }"
69
+ },
70
+ {
71
+ "id": "reminders",
72
+ "isA": [
73
+ "noun"
74
+ ]
75
+ },
76
+ {
77
+ "id": "show",
78
+ "isA": [
79
+ "verb"
80
+ ],
81
+ "bridge": "{ ...next(operator), operator: operator, reminders: after[0], interpolate: '${operator} ${reminders}' }"
82
+ },
83
+ {
84
+ "id": "delete_reminders",
85
+ "isA": [
86
+ "verb"
87
+ ],
88
+ "bridge": "{ ...next(operator), operator: operator, reminders: after[0], interpolate: '${operator} ${reminders}' }"
89
+ }
90
+ ]
91
+ },
92
+ {
93
+ "apply": "({ask, api}) => {\n ask([\n {\n where: where(),\n oneShot: false,\n onNevermind: ({verbatim, ...args}) => {\n // this is cross km boundaries from the dialogues km to this one so the api if for dialogs.\n // i need to get the one for fastfood here.\n const api = args.kms.fastfood.api\n const needsDrink = askAbout({ args, api })\n for (const item of needsDrink) {\n api.remove(item)\n }\n },\n\n matchq: ({ api, context }) => api.askAbout().length > 0 && context.marker == 'controlEnd',\n applyq: ({ api, context }) => {\n context.cascade = false\n const items = api.askAbout()\n const item = items[0]\n return 'When should I remind you to ' + item.text;\n },\n\n matchr: ({ isA, api, context }) => {\n if (isA(context.marker, 'onDateValue_dates') && api.askAbout().length > 0) {\n return true\n }\n return false\n },\n applyr: async ({ context, api, gp }) => {\n const items = api.askAbout()\n api.update({ id: items[0].id, dateTimeSelector: context, dateTimeSelectorText: await gp(context) })\n }\n },\n ])\n }"
94
+ }
95
+ ],
96
+ "fragments": [],
97
+ "semantics": [],
98
+ "associations": [],
99
+ "summaries": [],
100
+ "learned_contextual_priorities": []
101
+ }
@@ -0,0 +1,221 @@
1
+ const { knowledgeModule, where } = require('./runtime').theprogrammablemind
2
+ const { defaultContextCheck } = require('./helpers')
3
+ const reminders_tests = require('./reminders.test.json')
4
+ const reminders_instance = require('./reminders.instance.json')
5
+ const selfKM = require('./self')
6
+ const dateTimeSelectors = require('./dateTimeSelectors')
7
+ const helpers = require('./helpers')
8
+
9
+ /*
10
+ friday instead
11
+ change it to friday
12
+ delete it
13
+ make it friday instead
14
+ 2 sundays from now
15
+ the sunday after july 1st
16
+ */
17
+
18
+ class API {
19
+ initialize({ objects }) {
20
+ this._objects = objects
21
+ this._objects.reminders = []
22
+ this._objects.id = 0
23
+ }
24
+
25
+ add(reminder) {
26
+ const id = ++this._objects.id
27
+ reminder.id = id
28
+ this._objects.reminders.push(reminder)
29
+ this.args.mentioned({ context: reminder })
30
+ }
31
+
32
+ async instantiate(reminder) {
33
+ let now;
34
+ if (this.args.isProcess) {
35
+ // so the unit tests work consistently
36
+ now = new Date(2025, 6, 29, 14, 52, 0)
37
+ } else {
38
+ now = new Date()
39
+ }
40
+ // reminder.nextISODate = dateTimeSelectors.instantiate(now, reminder)
41
+ // TODO make the evaluate work --> const value = await this.args.e(reminder.dateTimeSelector)
42
+ const value = await this.args.e(reminder.dateTimeSelector)
43
+ reminder.nextISODate = value?.evalue
44
+ }
45
+
46
+ // the user of the KM can override this. this can be used to sync the GUI and the LUI
47
+ getCurrent() {
48
+ }
49
+
50
+ askAbout() {
51
+ const items = []
52
+ for (const item of this._objects.reminders) {
53
+ if (!item.dateTimeSelector) {
54
+ items.push({ when: true, text: item.text, id: item.id })
55
+ }
56
+ }
57
+ return items
58
+ }
59
+
60
+ show() {
61
+ if (this._objects.reminders.length == 0) {
62
+ return "There are no reminders"
63
+ }
64
+ let s = 'The reminders are\n'
65
+ let counter = 1
66
+ for (const item of this._objects.reminders) {
67
+ s += ` ${counter}. ${item.text}\n`
68
+ counter += 1
69
+ }
70
+ return s;
71
+ // -> return a table object. then have ability to talk about the table. maybe later let's focus on this for now
72
+ }
73
+
74
+ delete_reminder(ordinal) {
75
+ if (ordinal < 1 || ordinal > this._objects.reminders.length) {
76
+ return `Not possible`
77
+ }
78
+ this._objects.reminders = this._objects.reminders.splice(ordinal, 1)
79
+ }
80
+
81
+ update(update) {
82
+ for (const item of this._objects.reminders) {
83
+ if (item.id == update.id) {
84
+ Object.assign(item, update)
85
+ return
86
+ }
87
+ }
88
+
89
+ }
90
+ }
91
+
92
+ /*
93
+ remind me to go to the store tuesday
94
+ */
95
+ const template = {
96
+ configs: [
97
+ {
98
+ operators: [
99
+ "([remind] (self/*) (!@<= 'dateTimeSelector')*)",
100
+ "([remind:withDateBridge] (self/*) (!@<= 'dateTimeSelector')* (dateTimeSelector))",
101
+ "([remind:withDateAndTimeBridge] (self/*) (!@<= 'dateTimeSelector')* (dateTimeSelector) (atTime))",
102
+ "([show] ([reminders]))",
103
+ "([delete_reminders|delete,cancel] (number/*))",
104
+ ],
105
+ bridges: [
106
+ {
107
+ id: 'remind',
108
+ isA: ['verb'],
109
+ bridge: "{ ...next(operator), operator: operator, who: after[0], reminder: after[1], interpolate: '${operator} ${who} ${reminder}' }",
110
+ withDateBridge: "{ ...next(operator), operator: operator, who: after[0], reminder: after[1], date: after[2], interpolate: '${operator} ${who} ${reminder} ${date}' }",
111
+ withDateAndTimeBridge: "{ ...next(operator), operator: operator, who: after[0], reminder: after[1], date: after[2], time: after[3], interpolate: '${operator} ${who} ${reminder} ${date} ${time}' }",
112
+ semantic: async ({api, gsp, gp, context}) => {
113
+ const text = await gsp(context.reminder.slice(1));
114
+ const reminder = { text, dateTimeSelector: context.date }
115
+ if (context.date) {
116
+ reminder.dateTimeSelector = context.date
117
+ reminder.dateTimeSelectorText = await gp(context.date)
118
+ }
119
+ await api.instantiate(reminder)
120
+ api.add(reminder)
121
+ },
122
+ },
123
+ {
124
+ id: 'reminders',
125
+ isA: ['noun'],
126
+ },
127
+ {
128
+ id: 'show',
129
+ isA: ['verb'],
130
+ bridge: "{ ...next(operator), operator: operator, reminders: after[0], interpolate: '${operator} ${reminders}' }",
131
+ semantic: ({context, api, verbatim}) => {
132
+ verbatim(api.show())
133
+ }
134
+ },
135
+ {
136
+ id: 'delete_reminders',
137
+ isA: ['verb'],
138
+ bridge: "{ ...next(operator), operator: operator, reminders: after[0], interpolate: '${operator} ${reminders}' }",
139
+ semantic: ({context, api, verbatim}) => {
140
+ const s = api.delete_reminder(context.reminders.value)
141
+ if (s) {
142
+ verbatim(s)
143
+ }
144
+ }
145
+ },
146
+ ]
147
+ },
148
+ ({ask, api}) => {
149
+ ask([
150
+ {
151
+ where: where(),
152
+ oneShot: false,
153
+ onNevermind: ({verbatim, ...args}) => {
154
+ // this is cross km boundaries from the dialogues km to this one so the api if for dialogs.
155
+ // i need to get the one for fastfood here.
156
+ const api = args.kms.fastfood.api
157
+ const needsDrink = askAbout({ args, api })
158
+ for (const item of needsDrink) {
159
+ api.remove(item)
160
+ }
161
+ },
162
+
163
+ matchq: ({ api, context }) => api.askAbout().length > 0 && context.marker == 'controlEnd',
164
+ applyq: ({ api, context }) => {
165
+ context.cascade = false
166
+ const items = api.askAbout()
167
+ const item = items[0]
168
+ return 'When should I remind you to ' + item.text;
169
+ },
170
+
171
+ matchr: ({ isA, api, context }) => {
172
+ if (isA(context.marker, 'onDateValue_dates') && api.askAbout().length > 0) {
173
+ return true
174
+ }
175
+ return false
176
+ },
177
+ applyr: async ({ context, api, gp }) => {
178
+ const items = api.askAbout()
179
+ api.update({ id: items[0].id, dateTimeSelector: context, dateTimeSelectorText: await gp(context) })
180
+ }
181
+ },
182
+ ])
183
+ }
184
+ ],
185
+ }
186
+
187
+ knowledgeModule( {
188
+ config: { name: 'reminders' },
189
+ includes: [dateTimeSelectors, selfKM],
190
+ api: () => new API(),
191
+
192
+ module,
193
+ description: 'talking about reminders',
194
+ test: {
195
+ name: './reminders.test.json',
196
+ contents: reminders_tests,
197
+ checks: {
198
+ context: defaultContextCheck(['who', 'reminder']),
199
+ objects: [
200
+ {
201
+ property: 'reminders',
202
+ filter: [
203
+ 'text',
204
+ 'dateTimeSelectorText',
205
+ 'nextISODate',
206
+ 'stm',
207
+ {
208
+ property: 'dateTimeSelector',
209
+ filter: ['marker', 'text', 'value'],
210
+ }
211
+ ],
212
+ }
213
+ ],
214
+ },
215
+ },
216
+ template: {
217
+ template,
218
+ instance: reminders_instance,
219
+ },
220
+
221
+ })