@bendyline/gezel-script-runtime (英语)
可移植、 能力介导的脚本执行 格泽尔。 。 。 .
此软件包定义一个独立的平台 ScriptExecutor 合同,共享
便携式跑车,以及运行 Gezel 脚本的快速JS-WASM执行器
真正的格泽尔SDK。 无法使用节点沙盒的主机——浏览器和Web Views——
运行相同的捆绑标准脚本, SDK 并在专用 Web 内检查
劳工. Gezel服务仍然默认选择了它的节点沙盒.
npm install @bendyline/gezel-script-runtime
需要节点24或从节点使用时更新.
| 导入 | 它提供的东西 |
|---|---|
@bendyline/gezel-script-runtime | PortableScriptRunner 编辑 ScriptExecutor 合同 |
@bendyline/gezel-script-runtime/quickjs | QuickJSScriptExecutor,用于专职工人内部 |
@bendyline/gezel-script-runtime/web-worker | WebWorkerScriptExecutor,快速JS网络工作员的东道方 |
@bendyline/gezel-script-runtime/worker-protocol | 主机和工人共享的信息类型和限制 |
@bendyline/gezel-script-runtime/compile | compilePortableScript,沙盒型号的脚本转接步骤 |
@bendyline/gezel-script-runtime/source | 脚本诊断、手书脚本验证和脚手架 |
@bendyline/gezel-script-runtime/meta | parseScriptMeta,脚本元数据解析 |
东道国一体化
信任的主机选择执行器 。 脚本和模型生成的元数据 无法改变 在桌面上, 服务输出一个适配器, 每个都放置 快JS嘉宾专注工作者:
import { QuickJSWorkerExecutor, ScriptRunner, Store } from '@bendyline/gezel-service';
const store = new Store({ home: '/path/to/gezel-home' });
await store.ensureLayout();
const runner = new ScriptRunner({
store,
executor: new QuickJSWorkerExecutor(),
// Add chat, memory, tasks, … for the capabilities your scripts use.
});
使用运行器执行产品:它拥有元数据/输入验证, aI 活动设置、能力调度、输出验证、运行历史以及 秘密编辑。 执行者自己没有提供这些许可. 返回成功的 VM 结果不能确定脚本是否有效 产品产出。 以上建筑为嵌入器和符合性 测试; 没有 UI 偏好、 API 参数或自动倒置 选择它.
对于另一个主机,导入 QuickJSScriptExecutor 从
@bendyline/gezel-script-runtime/quickjs 一个忠于职守的工人 供应
信任的 SDK 来源为 sdkModuleSource,一个同步 compile 函数, a
now() 时钟,并调回主机的能力调度器。 SDK 来源
是自成一体的 portable 盖起它 @bendyline/gezel-sdk - 船舶
Gezel服务读取相同的文件, dist/portable.js。在建设时装入
用于浏览器,或在节点读取:
import { readFile } from 'node:fs/promises';
import { fileURLToPath } from 'node:url';
const sdkModuleSource = await readFile(
fileURLToPath(import.meta.resolve('@bendyline/gezel-sdk/portable')),
'utf8',
);
允许脚本导入 @bendyline/gezel-sdk/checks 也读一下这个模块
一样的方式,并通过它像 modules: { '@bendyline/gezel-sdk/checks': source }。 。 。 .
如果电脑在运行中能入睡,请做 now() 放弃花的时间
睡着了,所以跑步没有时间 它永远不会使用的时间。 东道主必须
还执行一个期限,并独立终止工人。 便携
执行器使用标准主机定时器来泵出承诺;其来宾不接收定时器
或平台API.
执行者使用 quickjs-emscripten WASM 软件包, 所以需要 WebView 主机
没有土生土长的快JS桥. 浏览器主机可以编译和验证所支持的内容
构建时标准库的子集。 项目和用户类型Script
源编译为运行 TypeScript 的单独的编译器工作
节点主机的浏览器编译器已禁用;它只使用剖析器和转接器.
编译程序在 QuickJS 中执行, 在编译器工作或主机中从未执行
JavaScript域 (英语). 汇编有25.6万个特征源和
东道方执行10秒期限。 只有捆绑的SDK和检查模块可以
进口.
源保存保存无效编辑并返回共享元数据、语法和 运行时间相容性诊断. 以哈什为基础的冲突探测是原子. 工程/用户范围明确,经编辑的代码永远不能获得不可改变的 标准范围。 手动运行和任务钩/出入口具有相同的能力, 政策和审计检查。 任务说明业务仍限于目前 项目,对于任务自主运行,当前的任务和积极步骤.
盖茨可以持有升级;经批准的过渡运行普通出站钩和
将持续的任务与他们所检查的快照进行比较。 门/出门儿童
保留其步骤触发器和记录 parentRunId,同时继承父权
取消、余下预算以及实际政策上限。 信任的主机召回
包含此权限; 序列化的 SDK 输入不能提供回调、 绕行
门,或部队完成。 任务控制电话从生命周期/门拒绝
保留永久检查站的脚本。 从脚本创建任务
不启动背景模型工作。 手工业手册的资料来源是逐字取景
任务,所以以后的编辑不能改变运行的配方 。 审计记录范围,
来源 SHA-256 和模板身份;工艺手册来源从未获得过
标准图书馆信任.
PortableScriptRunner 选择主机解析器、调度器、配置读取器和
原子运行记录作家. 它共享桌面输入/输出验证器, 方法
能力、元数据分析和执行政策检查。 一个主机记录录制
在任何效果之前并使用普通存储已完成的运行
projects/<id>/scripts/runs/<date>/<runId>.json 公约。 两人之间,
进度快照组合为每张1 checkpointIntervalMs (违约1 s);
当最近没有这种快照时,呼吁的意图就写在它的效应之前.
无效的输出和失败的审计书写不能报告成功, 也不能报告
门,没有判决。 声明的任何其他脚本 outputs 但从不
电话 gezel.output() 结束 ok 在其日志中没有任何输出和警告.
跑者停止跑步 超过250 000个主机呼叫
(单位:千美元)DEFAULT_MAX_HOST_CALLS,设置为 limits.maxHostCalls这是一个后站
与出走的回路相对,大小为能触及上万的脚本
记录。 标准范围和来源信任的脚本没有呼叫限制
默认( e)limits.maxTrustedHostCalls),并被其超时限制. 这个
QuickJS 执行器有自己的一个单独的,小得多的预算: 1000个主机
每次执行的电话和通知 maxCalls 选项,以及
QUICKJS_MAX_CALLS 在网络工人主机中). 两者都适用,所以快速JS运行停止
以先到达的为准。 截止时间省去电脑花费的时间
睡着了。 取消从主机运行 甚至在最后期限之前生效,
等待已经开始的东道方效应和儿童审计的解决.
脚本简介(实验)
脚本导入 gezel 财务报告和审定财务报表 defineScript 从 @bendyline/gezel-sdk 和往常一样.
服务适配器也捆绑 @bendyline/gezel-sdk/checks。从
文件系统/网络和其他SDK子路径被拒绝。 节点全局, 原始
文件系统、原始网络、定时器、子进程 API 或软件包解析器
安装在来宾中。 SDK行动跨越JSON边界进入正常状态
主机调度器 . console 方法使用SDK的日志通知.
等待模块级别上的所有同步工作,然后写入输出 . 例如:
import { gezel } from '@bendyline/gezel-sdk';
const files = await gezel.artifacts.list();
gezel.output({ count: files.length });
运行时间拒绝模块完成并等待主机调用并拒绝输出
当主机呼叫等待。 抓住等待的能力否定得到支持,
包括类型 code。分离同步函数和浮动承诺
不支持 : QuickJS 绑定不显示未处理的拒绝
追踪器,所以无法可靠地报告解开的承诺失败。 这不是
完全节点脚本兼容性.
QuickJS 执行器默认为 32 MiB 来宾堆放, 512 KiB 来宾堆放, 1000个主机 电话和通知,32个待拨电话,每台100万个UTF-16代码单位 源或消息,和400万总单位。 服务人员还限制JSON的交通,并拥有 拥有 V8 堆积限制 。 这些是独立的界限,不是全部的应用程序内存 限制。 被打断的工人忽略了迟到的答复 跑者冻结了它 审计记录在修订和持续前.
终止终止停止了来宾行刑和未来通话. 它不能撤销或取消一个 已启动主机写入或网络请求; 运行记录待定 操作仍有可能完成。 脚本不能将超时视为 交易回滚。 取消会取消新电话并等待 已经发送的文件操作,然后才释放录入。 一个东道主 关闭中跑标记未完成的记录在重开时中断, 并且永远不再播放 他们.
稳定
以上出口为上市API. 软件包是新的: Gezel 服务是其第一个主机,执行者合同可能会随着其他主机增长 通过它.
文档
麻省理工学院