File size: 2,941 Bytes
119e586
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
var LispExpand = {
  expansions: {
    '(agent trust audit)': [
      '(progn',
      '  (let ((agent-state (agent-status)))',
      '    (let ((trust-score (trust-score)))',
      '      (let ((audit-data (audit-log)))',
      '        (list agent-state trust-score audit-data)))))'
    ].join('\n'),
    '(agent status)':     '(agent-status)',
    '(trust score)':      '(trust-score)',
    '(seal state)':       '(seal-state)',
    '(vault count)':      '(woz-vault-count)',
    '(boot system)':      '(boot)',
    '(run debate topic)': '(debate topic)',
    '(export snapshot)':  '(export-snapshot)',
    '(draw agent)':       '(draw-agent)',
    '(eval expr)':        '(eval expr)'
  },

  expand: function(exprStr) {
    var key = exprStr.toLowerCase().trim();
    var expansion = this.expansions[key];
    if (expansion) {
      return {
        input: exprStr,
        expansion: expansion,
        steps: expansion.split('\n').length,
        safe: true
      };
    }
    // Try generic expansion
    var parsed = SExprParser.parse(exprStr);
    if (parsed && Array.isArray(parsed)) {
      var expanded = this._expandForm(parsed);
      return {
        input: exprStr,
        expansion: expanded,
        steps: 1,
        safe: true
      };
    }
    return {
      input: exprStr,
      expansion: exprStr,
      steps: 1,
      safe: true
    };
  },

  _expandForm: function(form) {
    if (!Array.isArray(form) || form.length === 0) return SExprParser.toString(form);
    var op = form[0];
    var args = form.slice(1);

    if (op === '+' || op === '-' || op === '*' || op === '/') {
      return '(calc ' + op + ' ' + args.map(SExprParser.toString).join(' ') + ')';
    }
    if (op === 'agent-status' || op === 'trust-score' || op === 'seal-state' || op === 'woz-vault-count' || op === 'draw-agent') {
      return '(' + op + ')';
    }
    return SExprParser.toString(form);
  },

  render: function(r) {
    return [
      '╔══════════════════════════════════════════════════════════╗',
      'β•‘  LISP EXPAND                                            β•‘',
      '╠══════════════════════════════════════════════════════════╣',
      'β•‘  INPUT:     ' + r.input.padEnd(45) + 'β•‘',
      'β•‘  EXPANSION: ' + r.expansion.substring(0, 45).padEnd(45) + 'β•‘',
      'β•‘  STEPS:     ' + String(r.steps).padEnd(45) + 'β•‘',
      'β•‘  SAFE:      ' + String(r.safe).padEnd(45) + 'β•‘',
      'β•šβ•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•β•'
    ].join('\n');
  }
};