@cotal-ai/lang (英语)
Cotal Lang, 工作流程语言 a 持久 Cotal 运行执行: JavaScript 在 每一次与世界的互动都是十几个效应之一 其他的都是纯净的 这个 软件包是验证器、解释器、步骤日记、效果界面一个主机 执行,以及模拟和模拟运行,运行一个没有经纪人的程序.
等级 : packages/ (标准). 取决于收押金中其他的什么, 它知道效果,
不是关于NATS。 在网格上运行程序的主机是 @cotal-ai/runtime。 。 。 .
两个引擎. run编号 :resume 是树行者,语言版本 1,它会保持回放
用于记录在其下的每一次运行的引擎. engine/ 是一个版本 2:一种不同的语言,而不是更快
一个,一个新的司机运行 执行。 每个引擎都印着它用自己的钉子
将录制的版本与自己的版本相比较,这就是为什么 WALKER_LANGUAGE_VERSION 财务报告和审定财务报表
ENGINE_LANGUAGE_VERSION 是两个常数 LANGUAGE_VERSION 是当前
语言,引擎的。 记录只在写作的引擎下绑定(L5008). 发动机
要求节点22或更新并拒绝在下方 EngineUnavailable,执行限制
没有 L 代码,因为错误目录只列出一个程序可以导致的条件. A 类
主机在引擎的工人线条中运行一个程序. 处理器要么在线条内建
从可复制的配置,或者当它是作为驱动器的活对象时,保留在主机中
连接在信件端口上的效果接合( e)engine/bridge.ts) (中文(简体) ).
该语言由 spec/cotal-lang.md (规范
js 块由这个包的表面套件验证),其有线脚印由
SPEC.md 第14节。指南是
文件/工作流程(mdx)。 。 。 .
使用
import { validate, run, dryRun, SimHandler, Journal } from "@cotal-ai/lang";
const source = `
const builder = await spawn("builder")
const r = await turn(builder, { name: "build", deadline: "30m" })
log(r.status)
`;
validate(source); // throws LangErrors, every refusal with code, cause, fix
const script = { turns: { build: { status: "done" } } };
const plan = await dryRun(source, script); // what it would do, with no agent touched
const first = await run(source, { runId: "r-1", handler: new SimHandler(script) });
// first.journal.entries() is the step journal; first.pins is what a resume must be handed back.
const again = await run(source, {
runId: "r-1",
pins: first.pins,
journal: new Journal({ run: "r-1", entries: first.journal.entries() }),
handler: new SimHandler({}), // nothing is scripted: every step replays
});
run 通过 EffectHandler 你通过和记录 每个人在 Journal· ;
将同一日记和针接回,并恢复同一程序。 操作器在飞行中绑起
等待前的外部工作; 恢复时重放一次失败, 而待决约束
效应可以重接. 内部待决步骤 once 不再发送: 它打开一个控件
holdRequestId 并且答案成为结果. SimHandler 剧本翻转,问,
检查点和事件,拒绝任何没有记录的事物(L6001),因此模拟不能沉默
发明一答. 时间是一个虚拟时钟模拟的离散事件:时间效应公园
他们的觉醒时间, 并按顺序交付, 所以并行的树枝 积累自己的
会期和a race 在模拟下由规则本身决定(记录最少的时钟,带子)
根据声明令,而不是命令的效力。 模拟器还执行 ask
schema shortwitch:一个无法读取的 schema 被拒绝(L4022),不符合要求的回复被消耗
attempts 在L4006飞机之前.
诉讼
pnpm test 在这个目录中,每个烟雾:语法,钥匙,日记,模糊的日记,针,
范围、图像、解释、燃料、干燥、实例、选项、通知-事实、迁移、语义(纯度)
对节点的片段),表面(语法表,库表,以及每个实例
参考和指南验证、符合、转换、差分、引擎和
根-切变.
smoke/mutations/*.json 这是 pnpm mutation-proof 目标.
pnpm test 不进行类型检查而释放构件( e)build:emit,则 smoke/_run.ts 运行 21
已声明 smoke/*.smoke.ts 文档,每个文件在自己的进程中平行进行。 每个文件的全部输出是
按宣布的顺序打印,并打印文件
只有当它退出0时通过,并且它的输出带有非零计数且没有故障时,它才会通过. 每个文件
运行即使一个失败, 而运行然后失败。 A 类 smoke/*.smoke.ts 既不是文件
被宣布或排除在外,或被宣布的失踪档案被拒绝. wait-until.smoke.ts 实值
被故意排除:它从未是这个链条的一部分,CI作为自己的套房运行.
| 变量 | 默认 | 含义 |
|---|---|---|
COTAL_TEST_JOBS | max(1, min(6, cpus - 1)) | 文件马上运行. 1 一次开一次. |
COTAL_TEST_TIMEOUT_MS | 120000 | 个人文件限制。 有关它的文件, 和它的孩子的过程, 被杀死和失败. |
二者之一的错位值都是错误 。 抓取的输出上限为每个文件32 MiB; 多于
失败的文件。 在 Linux 上,每个文件都有自己的进程组,所以中断运行时没有
孩子们在后面 在 Windows 上,进程树被杀死 taskkill。该路径尚未运行.