@anna-ai/ cli (韩语)
Anna App 开发者 CLI — scolfold, 验证, 运行本地 Dev 牵引, 驱动
基于固定式回归测试,以及针对来自
vitest编号 :pytest第二阶段至第九阶段已经完成.
安装
最终用户安装( 在第一个 npm 发布后):
npm i -g @anna-ai/cli
anna-app --help
这个 dev 财务报告和审定财务报表 fixture replay 命令透明地获取被绑定的 Python
运行时间通过 uvx (无需矩阵-nexus的取出). 安装
页:1 一次:
curl -LsSf https://astral.sh/uv/install.sh | sh
本地 dev( 此重播) :
pnpm install
pnpm build
node dist/cli.js --help
图标
anna-app init <dir> [--slug <slug>] [--template minimal] [--force]
脚手架 一个新的 Anna App 项目( 明显 + 捆绑 + stdio 插件)
模板). __TOOL_ID__ 变成 tool-dev-<slug>。 。 。 .
anna-app init my-app --slug my-app
cd my-app
anna-app validate
anna-app validate [--manifest manifest.json] [--bundle bundle] [--strict]
分层故障快速检查:遗产正常化(方案1 - 3显示为
折叠到计划 4 及其已退役的球场—— permissions, (中文(简体) ),
host_capabilities,则 ui.host_api 方法清单——报告为
警告——杰森·斯克马 ui 静态 — 交叉文件 tool_id 内插( 与
Evenshtein-1 typo 检测) → 浏览器版面用法 vs
ui.browser_permissions (警告:例如. getUserMedia 无
"microphone" 被 Dashboard 权限政策拒绝 – 论坛 # 395
→ --strict allowed_tools 字数对 ui.host_api.agent.tools。 。 。 .
没有方法级主机 API 允许列表: 安装 App 是
用户的同意,以及 anna.<ns>.<method> 可供安装
App. (英语). 一个表单只宣布了三种能力 涉及第二次
校长:
| 声明 | 含义 |
|---|---|
ui.host_api.credentials: ["google"] | app可能通过下列方式读取的第三方账户: credentials.* |
ui.host_api.agent.tools: ["fs_read_file"] | 主机- kit 工具( e)fs_* 编号 : exec_* 编号 : browser_*可使用沙盒代理会话; ["*"] = 总数 |
storage.scopes: {"user": "rw"} | 跨App数据(user 编号 : tool / 另一个App's app 桶; App 的自带 app 范围不需要声明 |
anna-app dev [--manifest …] [--bundle …] [--port 5180] [--matrix-nexus-root <path>] [--executa <spec>…]
搭便车:
- 喷出Python
anna-app-bridge(生产调度器通过WindowStoreProtocol) (中文(简体) ). - 模拟仪表板
http://localhost:<port>/。 。 。 . - 自动发现
<manifest-dir>/executas/<name>/插件( Python /) 节点.js / go / 预建 二进制),并在程序中注册它们ExecutaPool。见下文“多语言执行”. - 热重装入磁盘更改上的捆绑( 使用)
--no-watch用于禁用). - 嘲讽 实时语音会话 (单位:千美元)
anna.audio.session, SDK − 0.21.0) (中文(简体) ) 在仪表板页面中:通过浏览器的 ASRSpeechRecognition(Chrome) LLM通过当地agent.session通过speechSynthesis(无)tts_audio帧——应用程序的玩家保持闲置. 活动/setContext编号 :say/ 驳入/end()跟着制作 协议. - 应用 与生产相同的权限政策门: 线框
allow属性和捆绑Permissions-Policy信头都来自 运行时间( e)ui.browser_permissions隐含audio: ["session"]⇒microphone∪frame-src{\fn黑体\fs22\bord1\shad0\3aHBE\4aH00\fscx67\fscy66\2cHFFFFFF\3cH808080}请回放 一个没有记录的应用程序 声明"microphone"局部失败 完全像失败一样 盘子 -validate告诉你原因. - 镜像 主机主题/ locale (SDK = 0.24.0): iframe URL载体
?theme=&themeMode=&lang=并播放标题栏 QQ/QQ和 EN/theme.changed编号 :locale.changed事件,所以anna.onThemeChange()编号 :anna.onLocaleChange()可以在没有生产主机的情况下行使. - 前进
agent.session.run逐字到关系账户,所以 可选每次运行maxTokens(发送者为 0.30.0 / SDK 为 0.26.0) 添加剂run_meta.max_output_tokens编号 :task_complete.{stop_reason,truncated}帧的表现与生产时完全相同.
多语言执行器
每一子目录 <manifest-dir>/executas/ 根据
第一个匹配的哨兵:
| {\fn方正粗倩简体\fs12\an8\1cHFFFF00\b0} | 哨兵队 | 类型 | 默认发射 |
|---|---|---|---|
| 0 个 | executa.json | (任何一个) | command 字段,下面有其它类型的默认值 |
| 1个 | pyproject.toml | python | uv run --project <dir> <tool_id> |
| 2个 | package.json | node | node <bin[tool_id] | bin | main | module> |
| 3个 | go.mod (独行) | go | 需求 executa.json 声明 type: "go" |
| 页:1 | bin/<dirname> 执行 | binary | 直接运行可执行文件 |
executa.json (建议明确,GO和预建所需)
二进制工具 :
{
"tool_id": "tool-yourhandle-foo-abcd1234",
"type": "python" | "node" | "go" | "binary",
"command": ["…"], // optional; full override of type defaults
"enabled": true // optional; default true. Set false to skip
// (useful when shipping multiple language
// flavours of the same tool_id).
}
这个 --executa <spec> 旗帜( 可换行) 登记树外
executa,或完全覆盖运行时的自动发现. 光谱语法 :
# Auto-detect from the dir (same rules as in-tree discovery):
anna-app dev --executa dir=./vendor/external-tool
# Force type when there's no executa.json:
anna-app dev --executa dir=./executas/foo,type=go
# Fully explicit:
anna-app dev --executa dir=./executas/foo,tool_id=tool-h-foo-12345678,command="node plugin.js"
关于全部发现/ executa.json 参考文献,参见
anna-executa-examples/docs/multi-language-anna-apps.md。 。 。 .
两个运行时间模式( 自动选择) :
| 模式 | 何时 | 命令 |
|---|---|---|
uvx (默认) | 附近没有矩阵- nexus 检查 | uvx --from anna-app-runtime-local@<pinned> anna-app-bridge |
nexus-source | --matrix-nexus-root 设定, $ANNA_NEXUS_ROOT 设置, 或从内侧取出 | uv run --project <root> python -m anna_app_runtime_local.bridge |
被绑定的轮子版本导出为 PINNED_RUNTIME_VERSION 从
斜/斜/桥 - 撞上锁与
packages/VERSIONS.md 在矩阵内.
anna-app doctor [--matrix-nexus-root <path>]
环境清醒度检查 : uv 在路径上, uvx 被绑定的缓存状态
运行时间,可选矩阵-nexus取出, dev 签名密钥权限.
退出 0 如果所有需要的检查证.
anna-app fixture verify <file.jsonl>
严格合成+语义验证所记录的固定(信封) 命令 响应 请求对齐).
anna-app fixture summarize <file.jsonl>
漂亮的统计数: 计数 (ns, method),错误分解,事件总计.
anna-app fixture replay <file.jsonl> [--manifest …]
干跑重放( MVP): 重执行记录的请求序列
新鲜的 LocalDispatcherSession 并显示每个响应。 现场执行
重新召集被推迟到未来的未成年人.
程序操纵(最优)
import { mountBundle } from "@anna-ai/cli/test";
const h = await mountBundle({
manifest: "./examples/hello/manifest.json",
bundle: "./examples/hello/bundle",
});
await h.call("storage", "set", { key: "k", value: 1 });
const events = h.drainEvents();
await h.close();
见 标准/测试/指数.ts 为整个地表。 电话是
与清单中的能力申报完全相同
生产量tools.invoke * 已申报的执行、非自存范围
storage.scopes, (中文(简体) ), credentials.* → ui.host_api.credentials)没有
方法级 ACL.
Pytest 插件 (E)anna-executa-test(中文(简体) )
对于执行作者。 生活在矩阵-正数
packages/anna-executa-test/提供 executa_session 编号 :
executa_invoke 固定装置——见该包的README.
Schema 捆绑
@anna-ai/app-schema
是 npm 常规依赖。 设定 ANNA_APP_SCHEMA_DIR 指向一个
本地检出( 例如 ). matrix-nexus/packages/anna-app-schema/改为:
在协议上标注而不发布.
浏览器 SDK
终端用户应用程序捆绑装入 AnnaAppRuntime 从
/static/anna-apps/_sdk/<version>/index.js。两个矩阵-nexus
生产服务器和CLI的用具服务于来自
公共 npm 软件包 @anna-ai/app-runtime, (中文(简体) ),
被宣布为正常依赖。 没有卖出副本, 没有同步
步骤.
持续储存(APS)
Anna 1.2+ 暴露了JSON-RPC在下方的每个用户存储表面
storage/* 名称空间。 每个安装的Executa都收到一个 storage_token
为其自身服务 tool 范围——安装是同意的,并非给予什么。 还要
触摸整个用户 user 范围 :
- 在插件描述的显示中宣告它的结构
"storage": {"scopes": {"user": "rw"}}(或遗产)host_capabilities: ["aps.scope.user.read", "aps.scope.user.write"]字符串;aps.kv编号 :aps.files只有自我范围. - 谈判
client_capabilities.storage = {}期间initialize。 。 。 .
anna-app executa dev --storage real 薄荷金币 和这些
范围(tool +已声明),镜像平台薄荷.
见协议和最佳做法指南
anna-executa-examples/docs/persent-surversent-surverage.md 互联网档案馆的存檔,存档日期2013-12-02
用于线条格式、出错代码和工作过的OCR-cache示例。 这个
当地 dev lande 默认模拟 APS 所以端到端测试不
需要网络访问.
路线图
| 阶段 | 状态 | 范围 |
|---|---|---|
2 - 时间: init + 键 validate | ✅ MVP | Schema/ACL检查 |
3 - 3 (英语) dev 绳子 | ✅ MVP | Stdio桥、仪表板、热重装 |
4 - 4 (中文(简体) ) @anna-ai/cli/test | ✅ MVP | 程序化 mountBundle |
5 - 5 (英语) anna-executa-test (pystest) (英语) | ✅ MVP | 从矩阵- nexus 运出插件 |
6 - 说明 fixture {verify,summarize,replay} | QQ MVP (干跑重放) (英语) | 直播延期 |
| 7——出版发行 | 已经完成 | uvx 默认 + 满 [email protected] 取出; 最终用户不再需要矩阵- nexus 退出 |
8 - 国家 manifest.dev 块 + init 模板 + 4 文件 | 已经完成 | 见 矩阵-nexus/docs/开发商/应用程序/数字 : local-dev.md, (中文(简体) ), testing-bundle.md, (中文(简体) ), testing-plugin.md, (中文(简体) ), recording-replay.md |
| 9 — 参考实例升级 | 已经完成 | anna-executa-examples/examples/anna-app-focus-flow 船舶 tests/{bundle,plugin}/固定装置,以及 .github/workflows/anna-app.yml |
固定版本
PINNED_RUNTIME_VERSION = "0.2.0a1"(单位:千美元)斜/斜/桥(中文(简体) )- 见
matrix-nexus/packages/VERSIONS.md用于完整的工具链矩阵.
测试
pnpm test