@cef-ai/ cli (英语)
cef ——建设,打字,检查指挥线的特务. 镜像
agent Runtime合同(ADR-001):捆绑安装平面处理器地图于
globalThis.__handlers,列表中标注了管弦乐手的路由表
读取.
安装
pnpm add -D @cef-ai/cli
这增加了 cef 二进制为 node_modules/.bin在一个工作空间项目中,
通过它引用 pnpm exec cef <subcommand>。 。 。 .
子命令
| 子命令 | 状态 | 说明 |
|---|---|---|
cef init [dir] | 已运出 | 脚手架,一个Hello-world代理项目(代理+cubby+部件+测试),取决于发布内容 @cef-ai/* 软件包。 与 --yes/flags; 撰写方便AI的文件, 自动连接 cef Claude 代码插件 (--no-ai 跳过). |
cef deploy | 已运出 | 让代理人活下来: 应用 repo 的 deployments/ 文件夹(或单个集文件)到平台. --endpoint <url> (或 $CEF_ENDPOINT; 默认为 dev , --deployments <file|dir>, (中文(简体) ), --version, (中文(简体) ), --as-pubkey, (中文(简体) ), --dry-run. 要求部署记录+可到达端点. |
cef build | 已运出 | 打开代理条目, 装入 Esbuild (捆绑导入 SDK 运行时间 shims并安装) globalThis.__handlers),发射 dist/<agentId>/{bundle.js,manifest.json}。 。 。 . |
cef typegen | 已运出 | 生成 .cef/generated.d.ts (声明合并) KnownEventTypes)并刷新 cef.lock.json。 。 。 . |
cef inspect <agentDir> | 已运出 | 读取已建 manifest.json,运行捆绑 node:vm,并报告打开的处理器名称 __handlers 加上任何路由 目标显示的参考 但捆绑不暴露. |
cef publish | 已运出 | POST 已建代理卡到市场API(--as-pubkey, (中文(简体) ), --access-token编号 :$CEF_ACCESS_TOKEN ——同一CLI访问符 cef deploy (a) 使用. |
cef push | 已运出 | 上传代理到 DDC . --kind internal (默认)上传已建代理 bundle.js (+ 部件 dirs) 和盖章 货单的捆绑回放 —— 直接装入你控制的桶中 (--bucket),或者通过"金库-api"进入组织"金库范围"("金库")--vault <id> --vault-scope <scope>) (中文(简体) ). --kind external 注册运行的代理 外部 平台,从其 A2A 对 代理卡:取出卡片,获得一张清单(kind: "external", (中文(简体) ), a2aCard: <url>,没有捆绑)并写到同一个桶注册处. 外部旗帜 : --card <url>, (中文(简体) ), --alias, (中文(简体) ), --agent-version, (中文(简体) ), --scope, (中文(简体) ), --idle-timeout。 。 。 . |
cef eval <sub> | 已运出 | 工作流程评价,一次一个工作流程--workflow默认值: cef.config.ts 或者说 dist/ 声明). datasets, (中文(简体) ), create <dataset>, (中文(简体) ), pull <dataset> 编号 : push <dataset> (雷波语) datasets/<dataset>/ - 保险库; push --cut, (中文(简体) ), --force, (中文(简体) ), --prune, (中文(简体) ), --restore· ; pull --force, (中文(简体) ), run <dataset> (单位:千美元)--workflow-version, (中文(简体) ), --dataset-version, (中文(简体) ), --repeats, (中文(简体) ), --baseline, (中文(简体) ), --resume, (中文(简体) ), experiments [dataset], (中文(简体) ), compare <a> <b>工作流程(包括:--vault编号 :$CEF_VAULT_ID,默认钱包本身),其范围(--scope,默认其 requiredScopes); 需要钱包(--keystore编号 :--password 或者说 --secret-phrase)或(或) --access-token编号 :$CEF_ACCESS_TOKEN和金库的拨款 在那个范围. run 需求 --as-pubkey编号 :$CEF_AS_PUBKEY。见 @cef-ai/eval。 。 。 . |
cef test | 树枝 | 占位符 - 使用 vitest 直接与 @cef-ai/testing 直至综合跑道降落. |
cef dev | 树枝 | 占位符——待被打包的平台图像. |
cef build 每个已声明代理撰写一个目录 :
dist/
<agentId>/
bundle.js # IIFE that installs globalThis.__handlers — a flat map
# of handler functions the runtime dispatches as
# __handlers[name](event, context). Event handlers are
# keyed "<engagementId>::<method>"; lifecycle hooks under
# the fixed keys onStart / onClose.
manifest.json # AgentManifest body — bundle embedded inline; each
# engagement carries handles{eventType -> handlerName}
# (namespaced) and hooks[] ("start"/"close"). Identity /
# signature fields are blank until `cef publish` signs.
处理器名称命名间隔( E)<engagementId>::<method>) 保持平地状态
__handlers 当多个任务宣布某一方法时,地图无相撞
名称; 乐团从
HandlerFor,所以AR直接检查。 生命周期钩子不是
名称空格——管弦乐手硬码 onStart 编号 : onClose - 如此的方法 - 对 - so a method
名称可以重复使用,作为跨业务约定的活动处理器,但只有一个
每个代理商可能拥有每个生命周期钩(cef build a 的错误
碰撞).
cef typegen 读取 cef.config.ts (和 publishes 声明)和
写入 .cef/generated.d.ts输入 KnownEventTypes 所以作者们
获得字符串- 升自动补全 @OnEvent 财务报告和审定财务报表 ctx.publish编辑
cef.lock.json 在每次运行时都会重写快照, 所以 VCS diffs 表面
类型漂移.
DDC 证书cef push, (中文(简体) ), cef widget push, (中文(简体) ), cef cubby push(中文(简体) )
向桶上写字完全由以下之一授权: 1
--secret-phrase编号 :$CEF_DDC_SECRET_PHRASE- 拥有钥匙的短语 桶头.--access-token编号 :$CEF_DDC_ACCESS_TOKEN- 由DDC公司授予的DDC访问令牌 桶主来.
访问令牌要么没有标的(无记名令牌:按原样发送),要么是
发给一个钥匙,它的主体——在ROC代理服务邀请函中的标志是:
发给受邀成员。 存储节点接受标的符号
仅根据该密钥签名的请求,所以CLI也需要其短语:
--subject-phrase 编号 : $CEF_DDC_SUBJECT_PHRASE。CLI检查该短语
在连接前生成对象(sr25519或ed25519),并拒绝
没有它,而不是让节点回答
issuer doesn't match subject in parent token。没有该短语,使用
在ROC的代理服务成员面板上的"Copy DDC sord for the CLI"——它
用你的钱包来签名,一个在您邀请下没有标出主题的标志——或者
向桶主询问一个没有标注对象的标志 .
装腔作势的特工
桶推( 推出)cef push --bucket也宣布,在水桶的幼崽
登记(cubbies/<alias>每立方公尺,上面写着:
尚未命名 — at 0.1.0,该版本 cef cubby push 使用,与
明显是移民 这就是ROC在部署工作流程执行者时所做的
runs cuby; 没有它, 工作流程只能通过 CLI 失败
第一步与 cubby: lookup schema: … Failed to get cns record。别名
注册名称从未被触动( 用
cef cubby push如果登记处无法阅读,则不宣布任何内容。 A 类
在代理被推后声明未写入命令;
重试一遍. cef push --vault 不这样做——金库-api做
也没有宣布幼崽.
快速启动
pnpm add -D @cef-ai/cli
pnpm exec cef build
pnpm exec cef inspect dist/<agentId>
注册在别处运行的代理是同一个命令, 不同
--kind,而且根本不需要建设步骤——我们没有编译的代码:
pnpm exec cef push --kind external \
--card https://ai.example/.well-known/agent-card.json \
--bucket 1338 --as-pubkey 0x<agent-service-pubkey> --env dev
它和任何其他代理人一样出现在ROC的注册簿上,可以连接到一个 保险库和从沙盒发送事件.
出版到组织金库
一个组织金库的特工 住在金库自己的登记桶里 还有 (原始内容存档于2018-03-27) (英语). vault-api write it——而不是CLI. 命名金库和发布范围 从一桶取出 :
pnpm exec cef push --vault <vaultId> --vault-scope gtm \
--secret-phrase "<your wallet phrase>" --as-pubkey 0x<agent-service-pubkey> --env dev
库- api 检查您持有在瞄准镜( 库主, 或
拥有成员一级补助金的成员),并将代理人的别名与
范围是首先公布的,因此另一个范围无法取而代之。 国家行动倡议
上传该版本的文件, 并附有未加标记的显示; 保险库- api 印出
捆绑和部件 CID 并返回存储的运算表,其中 cef push
写回 dist/<id>/manifest.json。 。 。 .
全权证书: --secret-phrase 编号 : $CEF_VAULT_SECRET_PHRASE 使用自己的符号
钱包密钥, 生成为 ed25519( 唯一的方案金库- api 接受), 或 --vault-token
编号 : $CEF_VAULT_TOKEN 发送钱包- api 令牌 . $CEF_DDC_SECRET_PHRASE 没有
这里使用的:它取出一个桶主的名字,而不是你. --bucket, (中文(简体) ), --access-token, (中文(简体) ),
--preset, (中文(简体) ), --endpoint 财务报告和审定财务报表 --cdn 不适用,并被拒绝.
一个金库的答案 REGISTRY_NOT_CONFIGURED 直到它的主人记录
登记桶并封存登记代表团
(单位:千美元)PUT /api/v1/vaults/<vaultId>/delegations) (中文(简体) ). 店主这样做
在ROC的组织网页上,或与
sdk.vault.delegations.grant 从 @cef-ai/vault-sdk。 。 。 .
这些种类使用不相干旗帜——捆绑没有卡片,卡片没有
dist/ - 所以通过一种旗帜和另一种旗帜 --kind 被拒绝
名称而不是被忽略。 它所防止的失败是沉默的: --card 无
--kind external 否则,会推 任何最后建造和报告
成功吗.
程序化 API
每个子命令都有从软件包导出的相应函数 根, 从测试和脚本中有用 :
import { cefBuild, cefTypegen, cefInspect } from "@cef-ai/cli";
const build = await cefBuild({ cwd: process.cwd(), outDir: "dist" });
for (const a of build.agents) {
console.log(a.agentId, a.bundlePath, a.bundleBytes);
}
await cefTypegen({ configPath: "./cef.config.ts" });
const inspected = await cefInspect({
agentDir: "dist/echo",
print: false,
});
for (const e of inspected.engagements) {
console.log(e.id, e.handles, e.hooks, e.exposedMethods, e.missingMethods);
}
构建时间线
cef build 在代理服务器的条目文件之前运行一个合成插件
捆绑. 失败以单个可操作消息中止构建 。 这个
规则反射其中 @cef-ai/eslint-plugin 所以编辑器
警告与CI失败一致.
@OnEvent(...)参数必须是字符串文字.ctx.publish(t, ...)第一个参数必须是字符串字元.ctx.cubby("alias")参数必须是文字和宣布的别名cef.config.tscubbies[].alias。 。 。 .ctx.models.X成员必须参考已宣布的模型别名.- 导入不得针对被禁模块列表(节点内置像
fs, (中文(简体) ),net, (中文(简体) ),http, (中文(简体) ),child_process,加同步 DB / 网络 npm 软件包)。 特工们使用全球fetch用于HTTP和ctx.cubby页:1 状态;globalThis.crypto(网络晶体)替换node:crypto。 。 。 .
完整的被禁单元清单和理由在 agent-sdk.md 7节.
配套软件包
@cef-ai/agent-sdk装饰者们,Context,以及defineAgent由正在构建的代理代码消耗.@cef-ai/testing- 模拟装置cef test一旦它着陆.@cef-ai/eslint-plugin- 编辑时间插图 匹配构建时间执行.
参考资料
- SDK Spec探员:
../../../company-memory-bank/specs/platform/03-components/agent-sdk.md - 运行时间整合合同 :
../../../company-memory-bank/specs/platform/03-components/sdk-runtime-integration-contract.md
这个 ../company-memory-bank/... 路径指向内部兄弟重播
并且不能从新克隆人那里浏览.