theprogrammablemind 8.0.0-beta.8 → 8.0.0-beta.80
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/client.js +563 -947
- package/index.js +3 -2
- package/package.json +2 -1
- package/src/config.js +231 -251
- package/src/configHelpers.js +455 -0
- package/src/generators.js +8 -8
- package/src/helpers.js +34 -1
- package/src/project.js +1 -1
- package/src/semantics.js +63 -69
package/src/semantics.js
CHANGED
@@ -49,82 +49,55 @@ class Semantic {
|
|
49
49
|
}
|
50
50
|
}
|
51
51
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
context: context,
|
67
|
-
// hierarchy: hierarchy,
|
68
|
-
callId,
|
69
|
-
api: this.getAPI(config),
|
70
|
-
apis: this.getAPIs(config)
|
52
|
+
fixUpArgs (args, context) {
|
53
|
+
args.uuid = this.uuid
|
54
|
+
args.callId = args.calls.current()
|
55
|
+
const objects = args.getObjects(this.uuid)
|
56
|
+
args.objects = objects
|
57
|
+
args.global = objects
|
58
|
+
const config = args.config
|
59
|
+
args.api = this.getAPI(config)
|
60
|
+
args.apis = this.getAPIs(config)
|
61
|
+
args.args = contextArgs(context, args.hierarchy)
|
62
|
+
args.context = context
|
63
|
+
let n = (id) => id
|
64
|
+
if (config && 'nsToString' in config) {
|
65
|
+
n = (id) => config.nsToString(id)
|
71
66
|
}
|
72
|
-
|
67
|
+
args.n = n
|
68
|
+
args.uuid = this.uuid
|
69
|
+
Object.assign(args, (args.getUUIDScoped || (() => { return {} }))(this.uuid))
|
70
|
+
}
|
73
71
|
|
74
|
-
|
75
|
-
|
76
|
-
|
72
|
+
async matches (args, context, options = {}) {
|
73
|
+
this.fixUpArgs(args, context)
|
74
|
+
const matches = await this.matcher(args)
|
75
|
+
if (matches && (options.debug || {}).match || args.callId == this.callId) {
|
77
76
|
debugger // next line is the matcher
|
78
|
-
this.matcher(args)
|
77
|
+
await this.matcher(args)
|
79
78
|
}
|
80
79
|
return matches
|
81
80
|
}
|
82
81
|
|
83
|
-
apply (
|
84
|
-
const {
|
85
|
-
const objects = baseArgs.getObjects(this.uuid)
|
82
|
+
async apply (args, context, s, options = {}) {
|
83
|
+
const { config } = args
|
86
84
|
if (config && config.debugLoops) {
|
87
85
|
console.log('apply', this.toLabel())
|
88
86
|
}
|
89
|
-
if (
|
87
|
+
if (args.calls && config && args.calls.stack.length > config.maxDepth) {
|
90
88
|
throw new Error(`Max depth of ${config.maxDepth} for calls has been exceeded. maxDepth can be set on the config object. To see the calls run with the --dl or set the debugLoops property on the config`)
|
91
89
|
}
|
92
90
|
|
93
|
-
// const ask = baseArgs.getAsk(this.uuid)
|
94
|
-
if (!log) {
|
95
|
-
console.trace()
|
96
|
-
throw new Error('log is a required argument')
|
97
|
-
}
|
98
91
|
const contextPrime = Object.assign({}, context)
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
}
|
103
|
-
const callId = baseArgs.calls.current()
|
104
|
-
const moreArgs = {
|
105
|
-
uuid: this.uuid,
|
106
|
-
callId,
|
107
|
-
args: contextArgs(context, hierarchy),
|
108
|
-
objects,
|
109
|
-
log,
|
110
|
-
global: objects,
|
111
|
-
n,
|
112
|
-
context: contextPrime,
|
113
|
-
uuid: this.uuid,
|
114
|
-
// config,
|
115
|
-
response,
|
116
|
-
api: this.getAPI(config),
|
117
|
-
apis: this.getAPIs(config)
|
118
|
-
}
|
119
|
-
const args = Object.assign({}, baseArgs, moreArgs, (baseArgs.getUUIDScoped || (() => { return {} }))(this.uuid))
|
120
|
-
if ((options.debug || {}).apply ||
|
121
|
-
callId == this.callId) {
|
92
|
+
this.fixUpArgs(args, contextPrime)
|
93
|
+
|
94
|
+
if ((options.debug || {}).apply || args.callId == this.callId) {
|
122
95
|
debugger
|
123
96
|
}
|
124
97
|
if (args.breakOnSemantics) {
|
125
98
|
debugger
|
126
99
|
}
|
127
|
-
this._apply(args)
|
100
|
+
await this._apply(args)
|
128
101
|
return contextPrime
|
129
102
|
}
|
130
103
|
}
|
@@ -176,11 +149,12 @@ class Semantics {
|
|
176
149
|
return this.semantics[maxOrdinal]
|
177
150
|
}
|
178
151
|
|
179
|
-
applyToContext (args, context, options) {
|
152
|
+
async applyToContext (args, context, options) {
|
180
153
|
// let context_prime = {}
|
181
154
|
if (!(context instanceof Array || context instanceof Object)) {
|
182
155
|
return context
|
183
156
|
}
|
157
|
+
args = { ...args }
|
184
158
|
const config = args.config
|
185
159
|
let contextPrime = Object.assign({}, context)
|
186
160
|
const s = (context, options) => this.apply(args, context, options)
|
@@ -188,6 +162,8 @@ class Semantics {
|
|
188
162
|
const stack = args.calls.push()
|
189
163
|
let counter = 0
|
190
164
|
let seenQuestion = false
|
165
|
+
const deferred = []
|
166
|
+
args.log = (message) => { this.logs.push(message) }
|
191
167
|
for (const isemantic in this.semantics) {
|
192
168
|
const semantic = this.semantics[isemantic]
|
193
169
|
if (!semantic) {
|
@@ -197,22 +173,33 @@ class Semantics {
|
|
197
173
|
if (semantic.isQuestion && seenQuestion) {
|
198
174
|
continue
|
199
175
|
}
|
200
|
-
if (semantic.matches(args, context, options)) {
|
176
|
+
if (await semantic.matches(args, context, options)) {
|
201
177
|
if (!this.calls[counter]) {
|
202
178
|
this.calls[counter] = 0
|
203
179
|
}
|
204
180
|
this.calls[counter] += 1
|
205
|
-
const log = (message) => { this.logs.push(message) }
|
206
181
|
try {
|
207
|
-
|
182
|
+
let deferWasCalled = false
|
183
|
+
const defer = (listener) => {
|
184
|
+
deferred.push({ semantic, listener })
|
185
|
+
deferWasCalled = true
|
186
|
+
}
|
187
|
+
args.defer = defer
|
188
|
+
contextPrime = await semantic.apply(args, context, s, options)
|
189
|
+
if (deferWasCalled) {
|
190
|
+
continue
|
191
|
+
}
|
208
192
|
if (!contextPrime.controlKeepMotivation && semantic.oneShot) {
|
209
193
|
// semantic.tied_ids.forEach((tied_id) => args.config.removeSemantic(tied_id))
|
210
194
|
args.config.removeSemantic(semantic)
|
211
195
|
}
|
196
|
+
for (const { listener } of deferred) {
|
197
|
+
listener(args)
|
198
|
+
}
|
212
199
|
} catch (e) {
|
213
200
|
contextPrime = null
|
214
201
|
let errorMessage
|
215
|
-
e.retryCall = () => semantic.apply(args, context, s,
|
202
|
+
e.retryCall = () => semantic.apply(args, context, s, options)
|
216
203
|
const help = 'The error has a retryCall property that will recall the function that failed.'
|
217
204
|
if (e.stack && e.message) {
|
218
205
|
const info = `${semantic.notes ? semantic.notes : ''}${semantic.where ? semantic.where : ''}`
|
@@ -280,6 +267,13 @@ class Semantics {
|
|
280
267
|
lines.setElement(0, 1, 'RESULT')
|
281
268
|
lines.setElement(0, 2, `(HASHCODE ${helpers.hashCode(JSON.stringify(helpers.sortJson(contextPrime, { depth: 25 })))})`)
|
282
269
|
lines.setElement(1, 2, JSON.stringify(contextPrime, null, 2))
|
270
|
+
for (const { semantic } of deferred) {
|
271
|
+
lines.setElement(0, 1, 'DEFERRED')
|
272
|
+
lines.setElement(0, 2, semantic.toLabel())
|
273
|
+
lines.newRow()
|
274
|
+
lines.setElement(0, 2, semantic.toString())
|
275
|
+
lines.newRow()
|
276
|
+
}
|
283
277
|
this.logs.push(lines.toString())
|
284
278
|
}
|
285
279
|
applied = true
|
@@ -310,19 +304,19 @@ class Semantics {
|
|
310
304
|
return contextPrime
|
311
305
|
}
|
312
306
|
|
313
|
-
applyToContexts (args, contexts, options) {
|
307
|
+
async applyToContexts (args, contexts, options) {
|
314
308
|
const contextsPrime = []
|
315
|
-
|
316
|
-
contextsPrime.push(this.applyToContext(args, context, options))
|
317
|
-
}
|
309
|
+
for (const context of contexts) {
|
310
|
+
contextsPrime.push(await this.applyToContext(args, context, options))
|
311
|
+
}
|
318
312
|
return contextsPrime
|
319
313
|
}
|
320
314
|
|
321
|
-
apply (args, context, options) {
|
315
|
+
async apply (args, context, options) {
|
322
316
|
if (Array.isArray(context)) {
|
323
|
-
return this.applyToContexts(args, context, options)
|
317
|
+
return await this.applyToContexts(args, context, options)
|
324
318
|
} else if (context instanceof Object) {
|
325
|
-
return this.applyToContext(args, context, options)
|
319
|
+
return await this.applyToContext(args, context, options)
|
326
320
|
} else {
|
327
321
|
return context
|
328
322
|
}
|