Skip to content

29anan29/leash-cpp

Repository files navigation

Leash Logo

Leash

languages top-lang last-commit repo-size license

一门面向 AI Agent 的安全脚本语言:能力门控、最小特权、确定性执行。

Leash 把安全可控作为核心设计目标——就像给 AI Agent 拴上一根"牵绳"(leash),限制其能力范围,防止越权行为。程序默认没有任何权限——读文件、访问环境、调用 AI 模型等所有副作用都必须通过宿主显式注入的"能力(capability)"完成,并且每一步都被审计。这让 AI Agent 可以在严格受限的沙箱中自主运行,同时仍拥有完成任务所需的工具。

配套提供三种编辑器:

  • leash-studio:Vim 风格终端编辑器(零依赖 C++17,单文件实现)
  • leash-studio-qt:基于 Qt/QScintilla 的图形编辑器(Xcode 风格)
  • leash-studio-pro:Electron + Monaco + React IDE(主力推荐)

目录


特性

  • 能力安全模型:默认零权限;副作用全部走宿主注入的能力,未授权即被拒绝。
  • 最小特权 / 审计:每一次能力调用都被记录,作用域可静态追踪。
  • 确定性:无隐式并发、无未授权时钟;运行时按 fuel 限制步数、限制内存与递归深度。
  • 缩进式语法:类 Python 的缩进代码块,易读、无括号噪音。
  • 内置包file / os / ai / time / random / crypto / http / re / json / gui,开箱即用。
  • 多文件模块import "xxx.ae" 递归收集、去重、环检测。
  • 多款编辑器:终端版(零依赖单文件 C++)、Qt 图形版、Electron 版。

快速开始

make                 # 构建 leash 编译器
./leash examples/hello.ae        # 运行示例

预期输出:

Leash 语言 — 安全 Agent 脚本
hello world!
x + y = 50

构建

命令 作用
make 构建 leash(编译器)与 leash-studio(终端编辑器)
make run 运行 ./leash examples/hello.ae
make run-ide 启动 ./leash-studio
make clean 清除 obj/ 与二进制文件
make studio-qt 构建 Qt 图形版 leash-studio-qt(Xcode 风格)

终端编辑器无外部依赖:g++ -std=c++17 -O2 -o leash-studio studio/src/minivim.cpp

构建要求:支持 C++17 的 g++ / clang++


30 秒上手

hello.ae

fn main
  let name = "world"
  out("hello " + name)
  let x = 42
  let y = 8
  out("x + y = {x + y}")

运行:

./leash hello.ae

要点:

  • 代码块用缩进表示(同 Python),不要写 { }
  • 打印用 out("..."),括号内是字符串表达式;{expr} 做字符串插值。
  • //# 是行注释。

语言速查(当前已实现子集)

下面这些"看起来像 C/Python"的写法在本语言里是无效的,已被实测验证:

易错点 正确写法 错误写法
代码块 缩进(无 { } fn f() { ... }
打印 out("字符串") out -> "..." ❌ / out "..."
注释 //# 行注释
多文件引用 import "math.ae"(带引号路径) import math
package 暴露的函数 裸全局名 append(...) / env(...) / chat(...) file.append(...)
函数返回类型 fn add(a: int, b: int) -> int

已支持:

  • 变量:let x = 1 / let mut x = 1(仅 mut 可重赋值)。
  • 控制流:if / else / while / break / continue(均为缩进块)。
  • 函数:fn 名称(参数) -> 返回类型return 返回值。支持递归。
  • 运算符:+ - * / %;比较 == != < > <= >=;逻辑 and or not;字符串拼接 +;字符串字典序比较。
  • 字符串插值:"你 {x + 1} 岁"{expr} 内为任意表达式)。
  • 切片:s[1:3] / s[i:j],边界可为算术表达式或 len()
  • 映射遍历:for k, v in m;列表/字符串遍历:for i, e in xs
  • 注释://# 均支持行注释,#c 第一行等效于 -c 编译模式。
  • 模块:多文件 import "xxx.ae",跨文件函数按名字解析。
  • 能力安全:requires cap 声明所需能力;@fuel(N) 步数上限、@timeout(Nms) 超时熔断、@deterministic 禁止非确定源。
  • 入口:fn main(无参数;out 由宿主注入)。

设计稿里更多高级语法(match、泛型、agent/tool/chain 原语等)见 语法.txt,但当前编译器大多未实现,使用前请先用 ./leash 跑通验证。


内置包

通过 package X 引入,提供裸全局函数(直接用名字调用):

  • core(自动注入):sqrt / pow / floor / ceil / round / abs / parse / stringify
  • fileread / write / exists / delete / append
  • osenv / exit / cwd / is_tty
  • aichat(无 API key 时返回 mock 结果)
  • timenow / sleep
  • randomint(lo,hi) / float() / choice(xs)
  • cryptosha256
  • httpget(url) / post(url, body)
  • reismatch / find
  • json(自动注入):parse / stringify
  • guigui_available / gui_open_file / gui_save_file / gui_message / gui_input / gui_confirm

标准库:lib/ 下有 116+ 个纯 Leash 包 + 原生包(math / string / list / csvx / toml / yaml / httpx 等)。

LangChain 风格框架包(纯 Leash 实现,mock 可跑):promptx / memory / outputx / llmx / chainx / toolx / agent / textx / embedx / vector / retriever / ragx / ui


多文件模块

import "相对路径.ae" 会递归收集依赖并去重、检测环。跨文件函数按名字直接调用。参见 examples/multifile/

// main.ae
import "math.ae"
import "text.ae"
package file

fn main
  out(section("多文件协同报告"))
  let n = 100
  let primes = primes_upto(n)
  out("1.." + n + " 之间共有 " + count(primes) + " 个质数")

leash-studio 使用

Vim 风格终端编辑器,零依赖单文件 C++17,增量渲染、语法高亮、CJK 兼容。

类别 按键
移动 h j k l / 方向键、w 词后、b 词前、0 行首、$ 行尾、gg 文件头、G 文件尾
插入 i a I A o O + Esc
编辑 x 删字符、dd 删行、yy 复制行、p/P 粘贴、u 撤销、Ctrl+Y 重做
搜索 / 向下、? 向上、n 下一处、N 上一处
文件 Ctrl+S 保存、Ctrl+O 打开、Ctrl+N 新建、Ctrl+R 运行、Ctrl+Q 退出
命令模式 :w :q :wq :e <文件> :run :N(跳转行)

leash-studio-pro 使用

Electron + Monaco + React IDE,主力推荐。

启动

cd leash-studio-pro
npm install
npm run dev

快捷键

快捷键 功能
Ctrl+S 保存当前文件
Ctrl+W 关闭当前标签
Ctrl+N 新建文件
Ctrl+O 打开文件或文件夹
Ctrl+滚轮 编辑器缩放

界面

  • TitleBar:窗口标题 + 最小化/最大化/关闭
  • ActivityBar(左侧):文件浏览 / 源码管理 / 设置
  • Explorer:文件树,支持新建/重命名/删除,Seti 风格文件图标
  • Editor:Monaco 编辑器,Leash 语法高亮,实时诊断(红色波浪线标记错误行号)
  • 预览.svg / .png / .jpg / .gif / .md 等文件自动以预览模式打开
  • Output:运行输出面板
  • StatusBar:光标位置、运行状态
  • Mintlify 风格:白色底色、#18E299 绿色强调

目录结构

Makefile              构建脚本(编译器 + 各版编辑器)
语法.txt              语法设计稿(参考,非实现清单)
AGENTS.md             AI 编程助手工作约定
教程/                 完整教程
light/                TextMate 语法包(各语言高亮定义)
src/                  编译器源码
  frontend/           lexer / parser
  checker/            typecheck
  codegen/            compiler(字节码)
  vm/                 虚拟机
  host/               宿主能力(file/os/ai 等)
  main.cpp            入口 + 多文件 assemble()
studio/               终端编辑器源码
examples/             示例程序
leash-studio-pro/     Electron + Monaco + React IDE
  src/renderer/        React 前端
    components/        UI 组件
    fileIcons/         Seti 文件图标系统
    lang-leash/        Monarch tokenizer + 语言加载
    themes/            Monaco 主题
  src/main/            Electron 主进程
  public/icons/        UI 图标
native/               N-API 原生插件
lib/                  标准库(116+ 包)
icons/                VS Code 风格图标集

深入学习

  • 完整教程教程/ 目录(主教程、标准库详解、实例分析、Agent 专论、包制作)。
  • 语法设计稿语法.txt(能力类型、agent/tool/chain 原语等未来特性)。
  • 示例examples/ 下可直接 ./leash examples/<名称>.ae 运行。
  • 标准库文档教程/标准库详解.md

约定:与本仓库交互、提交信息、文档一律尽量使用中文。

About

Leash — 给 AI Agent 拴上牵绳:能力门控、最小特权、确定性执行的安全脚本语言

Topics

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages