lashlang 0.1.0-alpha.1

Lashlang: compact CodeAct language for model-authored REPL blocks in the lash agent runtime.
Documentation
---
source: crates/lashlang/src/runtime/tests.rs
expression: "serde_json::to_string_pretty(&program).expect(\"program should serialize\")"
---
{
  "statements": [
    {
      "Assign": {
        "target": {
          "root": "source"
        },
        "expr": {
          "BuiltinCall": {
            "name": "join",
            "args": [
              {
                "Variable": "history"
              },
              {
                "String": ","
              }
            ]
          }
        }
      }
    },
    {
      "Assign": {
        "target": {
          "root": "beta_index"
        },
        "expr": {
          "BuiltinCall": {
            "name": "find",
            "args": [
              {
                "Variable": "source"
              },
              {
                "String": "beta"
              }
            ]
          }
        }
      }
    },
    {
      "Assign": {
        "target": {
          "root": "matches"
        },
        "expr": {
          "BuiltinCall": {
            "name": "grep_text",
            "args": [
              {
                "Variable": "source"
              },
              {
                "String": "beta"
              }
            ]
          }
        }
      }
    },
    {
      "Assign": {
        "target": {
          "root": "counts"
        },
        "expr": {
          "Record": []
        }
      }
    },
    {
      "For": {
        "binding": "token",
        "iterable": {
          "BuiltinCall": {
            "name": "split",
            "args": [
              {
                "Variable": "source"
              },
              {
                "String": ","
              }
            ]
          }
        },
        "body": [
          {
            "Assign": {
              "target": {
                "root": "counts",
                "steps": [
                  {
                    "Index": {
                      "Variable": "token"
                    }
                  }
                ]
              },
              "expr": {
                "Binary": {
                  "left": {
                    "Index": {
                      "target": {
                        "Variable": "counts"
                      },
                      "index": {
                        "Variable": "token"
                      }
                    }
                  },
                  "op": "Add",
                  "right": {
                    "Number": 1.0
                  }
                }
              }
            }
          }
        ]
      }
    },
    {
      "Assign": {
        "target": {
          "root": "Payload"
        },
        "expr": {
          "TypeLiteral": {
            "Object": [
              {
                "name": "beta_index",
                "ty": {
                  "Union": [
                    "Int",
                    "Null"
                  ]
                },
                "optional": false
              },
              {
                "name": "matches",
                "ty": {
                  "List": "Dict"
                },
                "optional": false
              },
              {
                "name": "counts",
                "ty": "Dict",
                "optional": false
              }
            ]
          }
        }
      }
    },
    {
      "Submit": {
        "BuiltinCall": {
          "name": "validate",
          "args": [
            {
              "Record": [
                [
                  "beta_index",
                  {
                    "Variable": "beta_index"
                  }
                ],
                [
                  "matches",
                  {
                    "Variable": "matches"
                  }
                ],
                [
                  "counts",
                  {
                    "Variable": "counts"
                  }
                ]
              ]
            },
            {
              "Variable": "Payload"
            }
          ]
        }
      }
    }
  ],
  "statement_spans": [
    {
      "start": 1,
      "end": 28
    },
    {
      "start": 29,
      "end": 62
    },
    {
      "start": 63,
      "end": 98
    },
    {
      "start": 99,
      "end": 110
    },
    {
      "start": 111,
      "end": 182
    },
    {
      "start": 183,
      "end": 265
    },
    {
      "start": 266,
      "end": 358
    }
  ]
}