@chernabog/ sdk (英语)
块 Chernabog 流和步骤来自(Implement, (中文(简体) ), Review, (中文(简体) ), Plan, (中文(简体) ), Hybrid, (中文(简体) ), Stack, (中文(简体) ), PullRequest,提示),结束 @chernabog/core,它再出口,所以流 进口所有的东西 从这个包.
一张回购单上写着 .chernabog/package.json是因为 dependencies,在它所选择的版本上,每个Repo的基分支的快照都安装它:两个在不同的版本上并排运行在一个守护进程上. 这个 chernabog 二进制供应其自己的副本 @chernabog/core 财务报告和审定财务报表 effect 在运行时,当此软件包的对等区域打开时运行 @chernabog/core 包括二进制提供的核心. chernabog recipes upgrade 将 repo 移动到其二进制发布的版本.
流量
import { Claims, defineFlow, Implement, step } from "@chernabog/sdk";
import { Effect, Schema } from "effect";
export default defineFlow({
trigger: Implement.triggerFor("auto:eligible"), // the work items to act on
gate: Implement.gate, // checked before each run starts; fail with Skip to hold it back
concurrency: 1,
workflow: (item) =>
Effect.gen(function* () {
const issue = yield* Implement.issueOf(item);
// However the run ends, its claim on the issue goes.
return yield* Effect.gen(function* () {
const { branch } = yield* Implement.claim(issue);
const checked = yield* step(
"check-scope",
{ issue },
{ output: Schema.Struct({ ok: Schema.Boolean }) },
);
// ...
}).pipe(Claims.releasing(Claims.issue(issue)));
}),
});
| 帮助 | 它会做什么 |
|---|---|
activity(name, effect, { success }) | 一个持久的步骤。 它运行一次,结果被保存;重放返回所保存的结果. 名字在跑步中是独一无二的,所以循环中的一个步骤带有它的圆: fix-ci-2。 。 。 . |
step(name, input, { output }) | 运行 .chernabog/stages/<name> 作为一种活动. |
sleep(name, duration) | 一个能活过重启的持久暂停 . |
awaitSignal(signals, { id, timeout }) | 等待其中一个信号( 触发器报告于 WorkItem.signals或时出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出入出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出出 触发器可以用 wakeOnly 唤醒等待的跑步 不开始一个新的,或与 held: "<why>" 开始不运行并显示原因 chernabog status。 。 。 . |
renderPrompt(name, values) | 填充数 .chernabog/prompts/<name>.md,或,对于从食谱包中导入的流量(FlowPackage),包裹是当repo没有. |
Skip, (中文(简体) ), NeedsHuman | 彻底结束逃亡,或者把物品交给一个人. |
Implement, (中文(简体) ), Review 财务报告和审定财务报表 PullRequest 持有审查环路的构件,每个活动流可以重新排序,省去或包装. Hybrid 持有混合路径的块,其中一个人在交互式会话中与代理处理一个问题. Plan 持有计划食谱的块,一旦一个人批准代理人的计划,将一个分题变成一个分题的史诗. Stack 通过合并,包括下层被挤压后,将拉动请求的一叠层与基数更新,并调整层以适应所撰写的会话中移动的内容。 切纳博格的 食谱 完全的流出 这些块,一个回波烤成自己的 .chernabog/flows/; 以 @chernabog/recipes,其来源是 packages/recipes/。 。 。 .
流动也可以给 item: (key) => Effect<Option<WorkItem>>,键的工作项目 一个人的名字,触发器不报告,因为 Hybrid.itemFor 找到问题 chernabog start 名称.
副作用属于活动或步骤内部,从不出现在工作流程正文中,每回放一次都会运行.
步骤
// .chernabog/stages/find-work.ts
import { defineStage, GitHub, Skip } from "@chernabog/sdk";
import { Effect, Schema } from "effect";
export default defineStage({
name: "find-work",
input: Schema.Struct({}),
output: Schema.Struct({ issue: Schema.Number }),
run: () =>
Effect.gen(function* () {
const [issue] = yield* (yield* GitHub).queuedIssuesLabelled("auto:eligible");
if (issue === undefined) return yield* new Skip({ reason: "nothing queued" });
return { issue: issue.number };
}),
});
服务
服务是核心的:每个都是二进制提供的端口.
| 服务 | 封面 |
|---|---|
Repo | Repo 合并设置: swit, Base 分支, 标签, 限制, 关口, 笔记 |
Run | 运行:流出、运行 ID 和工作项目 |
GitHub | 被排队的问题、要求、标签、评论、子问题和阻塞器、分支、拉取请求、 CI 状态 |
Agent | 通过适配器开始和恢复代理会话; withPerson 在一个人面前打开一个 |
Git, (中文(简体) ), Worktree | 提前提交, 更改文件, 推出; 每个分支一个工作树 |
Usage | 账户检查和使用闸门 |
RunLog | 运行日志 |
每个服务都是一层,因此一个团队可以用自己的执行来代替一个,测试可以使用假的.