theprogrammablemind 8.0.0-beta.41 → 8.0.0-beta.42
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/package.json +1 -1
- package/src/config.js +0 -15
- package/src/semantics.js +52 -57
    
        package/package.json
    CHANGED
    
    
    
        package/src/config.js
    CHANGED
    
    | @@ -990,21 +990,6 @@ class Config { | |
| 990 990 |  | 
| 991 991 | 
             
              // value is in response field
         | 
| 992 992 | 
             
              // TODO maybe generalize out query+evaluate along the lines of set value and set reference
         | 
| 993 | 
            -
              /*
         | 
| 994 | 
            -
              getEvaluator (s, log, context) {
         | 
| 995 | 
            -
                const instance = s({ ...context, evaluate: true })
         | 
| 996 | 
            -
                if (!instance.evalue && !instance.verbatim && !instance.value) {
         | 
| 997 | 
            -
                  this.warningNotEvaluated(log, context);
         | 
| 998 | 
            -
                }
         | 
| 999 | 
            -
                if (!instance.evalue) {
         | 
| 1000 | 
            -
                  instance.evalue = instance.value
         | 
| 1001 | 
            -
                  instance.edefault = true
         | 
| 1002 | 
            -
                }
         | 
| 1003 | 
            -
                delete instance.evaluate
         | 
| 1004 | 
            -
                instance.instance = true;
         | 
| 1005 | 
            -
                return instance
         | 
| 1006 | 
            -
              }
         | 
| 1007 | 
            -
              */
         | 
| 1008 993 | 
             
              async getEvaluator (s, calls, log, context) {
         | 
| 1009 994 | 
             
                const instance = await s({ ...context, evaluate: true })
         | 
| 1010 995 | 
             
                calls.touch(instance)
         | 
    
        package/src/semantics.js
    CHANGED
    
    | @@ -49,76 +49,50 @@ 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 | 
            +
                debugger
         | 
| 70 | 
            +
                Object.assign(args, (args.getUUIDScoped || (() => { return {} }))(this.uuid))
         | 
| 71 | 
            +
              }
         | 
| 73 72 |  | 
| 73 | 
            +
              async matches (args, context, options = {}) {
         | 
| 74 | 
            +
                this.fixUpArgs(args, context)
         | 
| 74 75 | 
             
                const matches = await this.matcher(args)
         | 
| 75 | 
            -
                if (matches && (options.debug || {}).match ||
         | 
| 76 | 
            -
                    callId == this.callId) {
         | 
| 76 | 
            +
                if (matches && (options.debug || {}).match || args.callId == this.callId) {
         | 
| 77 77 | 
             
                  debugger // next line is the matcher
         | 
| 78 78 | 
             
                  await this.matcher(args)
         | 
| 79 79 | 
             
                }
         | 
| 80 80 | 
             
                return matches
         | 
| 81 81 | 
             
              }
         | 
| 82 82 |  | 
| 83 | 
            -
              async apply ( | 
| 84 | 
            -
                const {  | 
| 85 | 
            -
                const objects = baseArgs.getObjects(this.uuid)
         | 
| 83 | 
            +
              async apply (args, context, s, options = {}) {
         | 
| 84 | 
            +
                const { config } = args
         | 
| 86 85 | 
             
                if (config && config.debugLoops) {
         | 
| 87 86 | 
             
                  console.log('apply', this.toLabel())
         | 
| 88 87 | 
             
                }
         | 
| 89 | 
            -
                if ( | 
| 88 | 
            +
                if (args.calls && config && args.calls.stack.length > config.maxDepth) {
         | 
| 90 89 | 
             
                  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 90 | 
             
                }
         | 
| 92 91 |  | 
| 93 | 
            -
                // const ask = baseArgs.getAsk(this.uuid)
         | 
| 94 | 
            -
                if (!log) {
         | 
| 95 | 
            -
                  console.trace()
         | 
| 96 | 
            -
                  throw new Error('log is a required argument')
         | 
| 97 | 
            -
                }
         | 
| 98 92 | 
             
                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) {
         | 
| 93 | 
            +
                this.fixUpArgs(args, contextPrime)
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                if ((options.debug || {}).apply || args.callId == this.callId) {
         | 
| 122 96 | 
             
                  debugger
         | 
| 123 97 | 
             
                }
         | 
| 124 98 | 
             
                if (args.breakOnSemantics) {
         | 
| @@ -181,6 +155,7 @@ class Semantics { | |
| 181 155 | 
             
                if (!(context instanceof Array || context instanceof Object)) {
         | 
| 182 156 | 
             
                  return context
         | 
| 183 157 | 
             
                }
         | 
| 158 | 
            +
                args = { ...args }
         | 
| 184 159 | 
             
                const config = args.config
         | 
| 185 160 | 
             
                let contextPrime = Object.assign({}, context)
         | 
| 186 161 | 
             
                const s = (context, options) => this.apply(args, context, options)
         | 
| @@ -188,6 +163,8 @@ class Semantics { | |
| 188 163 | 
             
                const stack = args.calls.push()
         | 
| 189 164 | 
             
                let counter = 0
         | 
| 190 165 | 
             
                let seenQuestion = false
         | 
| 166 | 
            +
                const deferred = []
         | 
| 167 | 
            +
                args.log = (message) => { this.logs.push(message) }
         | 
| 191 168 | 
             
                for (const isemantic in this.semantics) {
         | 
| 192 169 | 
             
                  const semantic = this.semantics[isemantic]
         | 
| 193 170 | 
             
                  if (!semantic) {
         | 
| @@ -202,17 +179,28 @@ class Semantics { | |
| 202 179 | 
             
                      this.calls[counter] = 0
         | 
| 203 180 | 
             
                    }
         | 
| 204 181 | 
             
                    this.calls[counter] += 1
         | 
| 205 | 
            -
                    const log = (message) => { this.logs.push(message) }
         | 
| 206 182 | 
             
                    try {
         | 
| 207 | 
            -
                       | 
| 183 | 
            +
                      let deferWasCalled = false
         | 
| 184 | 
            +
                      const defer = (listener) => {
         | 
| 185 | 
            +
                        deferred.push({ semantic, listener })
         | 
| 186 | 
            +
                        deferWasCalled = true 
         | 
| 187 | 
            +
                      }
         | 
| 188 | 
            +
                      args.defer = defer
         | 
| 189 | 
            +
                      contextPrime = await semantic.apply(args, context, s, options)
         | 
| 190 | 
            +
                      if (deferWasCalled) {
         | 
| 191 | 
            +
                        continue
         | 
| 192 | 
            +
                      }
         | 
| 208 193 | 
             
                      if (!contextPrime.controlKeepMotivation && semantic.oneShot) {
         | 
| 209 194 | 
             
                        // semantic.tied_ids.forEach((tied_id) => args.config.removeSemantic(tied_id))
         | 
| 210 195 | 
             
                        args.config.removeSemantic(semantic)
         | 
| 211 196 | 
             
                      }
         | 
| 197 | 
            +
                      for (const { listener } of deferred) {
         | 
| 198 | 
            +
                        listener(args)
         | 
| 199 | 
            +
                      }
         | 
| 212 200 | 
             
                    } catch (e) {
         | 
| 213 201 | 
             
                      contextPrime = null
         | 
| 214 202 | 
             
                      let errorMessage
         | 
| 215 | 
            -
                      e.retryCall = () => semantic.apply(args, context, s,  | 
| 203 | 
            +
                      e.retryCall = () => semantic.apply(args, context, s, options)
         | 
| 216 204 | 
             
                      const help = 'The error has a retryCall property that will recall the function that failed.'
         | 
| 217 205 | 
             
                      if (e.stack && e.message) {
         | 
| 218 206 | 
             
                        const info = `${semantic.notes ? semantic.notes : ''}${semantic.where ? semantic.where : ''}`
         | 
| @@ -280,6 +268,13 @@ class Semantics { | |
| 280 268 | 
             
                      lines.setElement(0, 1, 'RESULT')
         | 
| 281 269 | 
             
                      lines.setElement(0, 2, `(HASHCODE ${helpers.hashCode(JSON.stringify(helpers.sortJson(contextPrime, { depth: 25 })))})`)
         | 
| 282 270 | 
             
                      lines.setElement(1, 2, JSON.stringify(contextPrime, null, 2))
         | 
| 271 | 
            +
                      for (const { semantic } of deferred) {
         | 
| 272 | 
            +
                        lines.setElement(0, 1, 'DEFERRED')
         | 
| 273 | 
            +
                        lines.setElement(0, 2, semantic.toLabel())
         | 
| 274 | 
            +
                        lines.newRow()
         | 
| 275 | 
            +
                        lines.setElement(0, 2, semantic.toString())
         | 
| 276 | 
            +
                        lines.newRow()
         | 
| 277 | 
            +
                      }
         | 
| 283 278 | 
             
                      this.logs.push(lines.toString())
         | 
| 284 279 | 
             
                    }
         | 
| 285 280 | 
             
                    applied = true
         |