@cerebro-labs/agentnava-sdk

中文文档
0.80.0发布于 2026/11/08Apache-2.0TypeScriptES Module零依赖近 30 天下载 1813

纳瓦SDK探员 配置代理,开始交谈,并与之合作.

中文使用文档
文档目录20 节
  1. 连接账户, 结束到结束
  2. 0.80:一个代理可以记住每个终端用户
  3. 0.79.0是一个突破性更改:一个终端用户属于一个代理
  4. 0.44.0是一个突破性变化:应用程序和账户
  5. 0.2.0是一个突破性的变化。 从0.1.1升级,不要留在上面.
  6. 持有物体是自由的
  7. 问:一种方法,两种形状
  8. 更改代理发布一个版本
  9. 一个对话会贴上它的版本
  10. 两个驱动器
  11. 代理人使用的账户
  12. 您已经描述的 API 的起草工具
  13. HTTP 工具响应限制
  14. 错误
  15. 配置
  16. 指向不同的部署
  17. 许可证
  18. 回复中的部件( 0. 50)
  19. 代理人居住的地方(0.41)
  20. 企业HTTP合同(0.34)

@ cerebro- labs/ agentnava- sdk

配置代理,开始谈话,与之合作.

npm install @cerebro-labs/agentnava-sdk

18号或以后,或Bun, 或任何运行时间与 fetch两者 import 财务报告和审定财务报表 require 工作,和TypeScript类型 船与之.

import { AgentNava } from '@cerebro-labs/agentnava-sdk';

const ws = AgentNava.getWorkspace(); // reads AGENTNAVA_API_KEY

const agent = await ws.agents.create({
  name: 'Refund checker',
  instructions: 'Decide whether a late delivery qualifies for a refund.',
});

const conversation = await agent.start({ endUserId: 'u_ananya' });
console.log(await conversation.ask('Order 4471 arrived nine days late.'));

全文见 https://docs.agentnava.com (中文(简体) ). (它曾经在这里指向 在我们自己的仓库内的文件路径, 没有人安装此软件包 已经。 ) 此读取母覆盖 只有容易出错的东西.

连接账户, 结束到结束

一个 账户 一个被保存的登录到一个应用程序。 A 类 连接 是条目 代理商的设置 名字之一, 所以代理完全使用 该账户,从来没有 另一个. ws.accounts.connect() 给你一个URL,一个人可以访问,和 waitUntilConnected() 告诉你什么时候完成.

import { App, Connection } from '@cerebro-labs/agentnava-sdk';

const { account, url } = await ws.accounts.connect({ app: App.GMAIL, nickname: 'Support inbox' });
showToUser(url);                      // popup, redirect, QR code, your choice
await account.waitUntilConnected();   // resolves once they have signed in
await agent.connections.add(Connection.creatorAccount(App.GMAIL, account));

您如何显示 URL 是您的: 此 SDK 认证带有 API 密钥, 所以它 运行在您的服务器上,浏览器的一半是您的应用程序.

超时就扔了 account_not_connected 和信件名称 和它现在的位置。 再打个电话是安全的 还没打完的人 签名可能只是需要更长的时间。 之后 account.reconnect() 它等待着 也新建登录:账户同时工作,使用 reconnecting 没错.

对于一个应用程序,你的每个用户 自己签名,连接使用 终端用户账户。 每个人签一次字, 记住他们 每一次谈话都没有附加任何内容:

await agent.connections.add(Connection.endUserAccount(App.GOOGLE_CALENDAR));

const conversation = await agent.start({ endUserId: user.id });
for (const { app, url } of await conversation.accountsNeeded()) {
  showToUser(app, url);               // the ones this person has not connected yet
}

终端用户的账户是普通的 Account数字 : agent.endUser(id).accounts.connect() 返回一个,并 waitUntilConnected(), (中文(简体) ), ws.account(id) 和所有其他账户 要求工作的方式一样. account.data.owner 说是谁的.

建造者创造许多明亮的物体, { app, account: '<id>' } 财务报告和审定财务报表 { app, endUser: true },其中任何一个手写对象也被接受. App.GMAIL 是字符串 'gmail',所以一个平整的字符串在常数的任何地方起作用 ,包括用于您 SDK 版本后添加的应用程序.

0.80:一个代理可以记住每个终端用户

直到你打开它 0.79个课间休息 才有变化.

await agent.update({ memorySettings: { on: true } });
const conversation = await agent.start({ endUserId: 'u_ananya' });

闲聊之后,一个背景特工 保持一个简短的记忆 用户,仅在该代理上,之后聊天使用. 你的团队可以读取和改变 这个 它需要一个团队计划或更高.

0.80 新设它会做什么
memorySettings 打开 agent.update 财务报告和审定财务报表 ws.agents.create打开它,加入你自己的指令,设定保存时间
(await agent.get()).memorySettings.notice如果您绘制了自己的聊天内容, 可以在您的信息框附近显示行
agent.endUser(id).memoryget, (中文(简体) ), set, (中文(简体) ), delete 财务报告和审定财务报表 stop
agent.memories()谁有这个特工的记忆, 最新变化第一
agent.start({ endUserId, memory: false })一次没有记忆的谈话 没有增加任何东西

你通过的ID决定谁的记忆, 所以用一个稳定的ID一个人。 这个 指南,当您需要同意时: https://docs.agentnava.com/memory (中文(简体) )

0.79.0是一个突破性更改:一个终端用户属于一个代理

每个代理都是自己的应用程序,有自己的终端用户. 两名探员的同一身份是 两个不同的人, 分别的账户,秘密和谈话。 一个人 他们使用两个你的特工 标志每个.

直到现在,一个人的连通账户 被工作空间和ID单独发现,所以 代理B可以使用一个账户,该账户中不同的人与同一ID连接 通过特工A。 这就是这个结局.

不超过0.78美元从0.79
ws.endUser(id)agent.endUser(id)。 。 。 . ws.endUser 不见了
ws.endUser(id).accounts.connect({ app })agent.endUser(id).accounts.connect({ app }),每名探员每人一次
ws.endUser(id).secrets.create({ name, value, agentId? })agent.endUser(id).secrets.create({ name, value })
ws.secrets.create({ name, value, endUserId })agent.endUser(endUserId).secrets.create({ name, value })
ws.endUser(id).conversations(),每个代理agent.endUser(id).conversations()这个特工 询问每个代理
accounts.disconnectAll() 给机外的人agent.endUser(id).erase():他们的账户,秘密和谈话 在这个代理,它返回 多少每个

年长的SDK会怎样. ws.endUser(id).accounts.* 财务报告和审定财务报表 ws.endUser(id).secrets.* 拒绝使用410(end_users_are_per_agent上面写着该怎么称呼. 一个空列表会读作"没有连接",所以他们从来不回答一个. agent.start, (中文(简体) ), conversation.ask,以及 conversation.accountsNeeded() 联合国 签入链接继续研究更古老的SDK:对话知道它的代理人.

现有账户 被提交到使用它们的代理人,没有新的 注册。 几个特工用过的一个没有去, 因为同样的身份可能 两个人 所以每个探员都请当事人签字. 工作空间成员 为: 不变:成员自己的账户不属于任何代理人.

0.44.0是一个突破性变化:应用程序和账户

现在两个词意味着两个东西。 一个 账户 一个被保存的登录到一个应用程序. A 类 连接 是一个代理商设置的条目: 一个名字,一个应用程序,以及其 账户,使用 Connection.creatorAccount(app, account) 联 合 国 代理创建者的账户或 Connection.endUserAccount(app) 每个终端用户 拥有的。 转弯完全使用账户设置名称 。 没有附着在 继续谈话,没有什么可以回溯到 与同一说法 应用.

升级与为新路线服务的生产发布: 0.44个电话 /v1/accounts, (中文(简体) ), /v1/end-users/:id/accounts 和代理连接 和连接路线0.43的电话在同一版中被删除. 没有兼容 shim: 这个软件包是发射前的, 所以旧名称 被删除,而不是贬值.

0.43 (中文(简体) )0.44 (中文(简体) )
ws.connections.create({ provider })ws.accounts.connect({ app, nickname? })返回 { account, url }
ws.connections.create({ provider, agentId })ws.accounts.connect({ app }),则 agent.connections.add(Connection.creatorAccount(app, account))
ws.connections.create({ provider, endUserId })ws.endUser(id).accounts.connect({ app })
ws.connections.list()ws.accounts.list({ app? }),每个带 usedBy
ws.connections.list({ endUserId })ws.endUser(id).accounts.list()
ws.connection(id)ws.account(id)
Connection (类):已签入的账户Account (类). 名称 Connection 现在建立一个代理设置的条目
connection.get()时,返回 ConnectionStatusaccount.get()返回 AccountData; 缺少的账户丢出 account_not_found
connection.waitUntilConnected()account.waitUntilConnected(); 时间与 account_not_connected
connection.revoke()account.disconnect()返回 { agents }:失去它的特工
connection.provider, (中文(简体) ), .connected, (中文(简体) ), .owner, (中文(简体) ), .endUserIdaccount.app, (中文(简体) ), .status, (中文(简体) ), .data.owner, (中文(简体) ), .data.endUserId
connection.url页:1 url 那个 connect 返回时
无account.reconnect(), (中文(简体) ), account.rename(nickname), (中文(简体) ), account.check(), (中文(简体) ), account.label, (中文(简体) ), account.nickname, (中文(简体) ), account.usedBy, (中文(简体) ), account.data.reconnecting
agent.authorize(provider)ws.accounts.connect({ app }),则 agent.connections.add(Connection.creatorAccount(app, account))
agent.attach(connection)agent.connections.add(Connection.creatorAccount(app, account, { name? }))
无agent.connections.add(Connection.endUserAccount(app, { name? }))
无agent.connections.change(name, { account }) 或者说 (name, { endUser: true })
无agent.connections.change(name, { tools }): 该应用程序可能使用哪些工具, ids from ws.apps.tools(app)· ; null 对于应用程序的默认
agent.disconnect(provider),删除了共享账户agent.connections.remove(name),从不触及账户
agent.connections()agent.connections.list()
agent.attach(secret),它被接受,却什么也没做拒绝使用 not_a_secret; 将存储的秘密附加到对话中
agent.start({ attach: connection })agent.start({ endUserId }): 账户的设置名称
conversation.authorize(provider)conversation.accountsNeeded(): 终端用户仍须在
conversation.attach(connection)无:代理商的设置决定了
endUser.connections.create({ provider })endUser.accounts.connect({ app })
endUser.connections.list()endUser.accounts.list()
endUser.revokeConnections()endUser.accounts.disconnectAll()返回 { disconnected }
设置 connections: [{ provider, scope: 'fixed', connectionId }]Connection.creatorAccount(app, account, { name?, tools? }),这是 { name?, app, account: '<id>', tools? }
设置 connections: [{ provider, scope: 'conversation' }]Connection.endUserAccount(app, { name?, tools? }),这是 { name?, app, endUser: true, tools? }
类型 ConnectionRequirementAgentConnection (回读)和 Connection (如您所发) CreatorAccountConnection 财务报告和审定财务报表 EndUserAccountConnection
类型 ConnectionStatus键 providerConnectionStatus键 name数字 : { name, app, account?, endUser?, status, inDraft, removedInDraft }
类型 CredentialOwner删除 : AccountData.owner 实值 'workspace' 或者说 'end-user'
Bindings.connections删除 : Bindings 携带 secrets 仅限
无App: 每个app id作为常数(App.GMAIL类型 AppId

新建分支错误代码 : account_not_found, (中文(简体) ), connection_name_taken, (中文(简体) ), account_app_mismatch, (中文(简体) ), connection_not_found (从) agent.connections.change, (中文(简体) ), account_not_connected (从) waitUntilConnected, (中文(简体) ), account_required (从) Connection.creatorAccount 并且没有帐户 not_a_secret (已交给 attach) (中文(简体) ).

秘密没有移动 : agent.attach({ secrets }), (中文(简体) ), conversation.attach(secret), (中文(简体) ), conversation.attach({ secrets }) 财务报告和审定财务报表 agent.start({ attach: secret, secrets }) 像以前一样工作.

0.2.0是一个突破性的变化。 从0.1.1升级,不要留在上面.

"会议"从你触摸的一切中消失。 它只在我们的仓库里生存, 你永远也看不见.

0.1.1 国家0.2.0 (中文(简体) )
GET /v1/sessionsGET /v1/conversations (现在的老道404)
ConnectionStatus.sessionIdConnectionStatus.conversationId
conversation.authorize() 发送 sessionId发送 conversationId
scope: 'session' 从API回来的scope: 'conversation',总是声明的类型值

0.1.1 停止工作 一旦它们到达生产, 因为API只读 新字段名称。 没有兼容 shim: 此软件包是私有的 因此旧的拼写被删除而不是被贬低.

如果你在0.1.1上,变化是机械的:重命名 sessionId 改为 conversationId 无论你读还是通过 没有别的形状 移动.

持有物体是自由的

ws.agent(id), (中文(简体) ), agent.conversation(id), (中文(简体) ), ws.project(id) 财务报告和审定财务报表 ws.account(id) 生产 没有网络呼叫。得到一些可以调用的方法,第一个请求会发生 当你打电话给一个.

存储 id,不是对象。 返回的对象是一个手柄,而不是JSON.

问:一种方法,两种形状

const reply = await conversation.ask('...');          // just the answer
for await (const e of conversation.ask('...')) {      // as it happens
  if (e.type === 'progress') showSteps(e.steps);       // the whole list, each time
  if (e.type === 'text') append(e.text);
  if (e.type === 'file') show(await conversation.readFile(e.path));
  if (e.type === 'done') save(e.reply);
}

progress 列表 AgentNava 应用程序在代理工作时显示的步骤, 在 相同词句("围网:钢铁关税"),每句 active, (中文(简体) ), done 或者说 error。将显示的内容替换为每个. file 命名代理文件 写了,每个文件一次.

留言在打电话时发出 ask而不是当你等待或提炼它. 通话 ask 两次生成两个提交密钥并两次询问。 如果你需要的话 ,在发送前保存密钥:

const idempotencyKey = crypto.randomUUID();
const reply = await conversation.ask('...', { idempotencyKey });

在同一次谈话中只用相同的内容重新使用该密钥. API (英语) 拒绝已经接受的回合 turn_already_accepted 而不是运行 又来了 一个新的有意问题需要一个新的关键。 错误包括: 用于检查状态的原始密钥和指示; a retryable: false 错误 不得作为新的呈文重新审理.

你们或许不止等待一次,这是应许,你们也得等待一次 答话 可能你不会用两下或混在一起 因为事情是 活流而不是存储列表,第二个消费者会收到 什么都没有。 换句话说.

轮不到你的要求了. 服务器一接受,就掉下来 连接, 中止 AskOptions.signal,或离开 for await 提前循环 停止接收回复。 接受的工作可以继续进行,正常收费 应用; 断开不会取消服务器工作或自动退款 转 已经放弃的信号传递给 ask() 阻止提交,所以没有 转弯被接受 或为这个电话收取费用.

使用信号限制应用程序等待时间 :

const controller = new AbortController();
const timer = setTimeout(() => controller.abort(), 10_000);
try {
  const reply = await conversation.ask('Summarize the report.', {
    signal: controller.signal,
  });
  save(reply);
} catch (error) {
  if (!controller.signal.aborted) throw error;
  // We stopped waiting. A turn already accepted by the server can still run.
} finally {
  clearTimeout(timer);
}

中断后读取 await conversation.messages() 在另一个之前 ask()。答案可能还在,所以稍后再检查历史 而不是再次提出同样的问题.

一个成功的 await 或者说 done 事件需要服务器的完成标记. 如果溪流提前关闭, SDK 报告一个不可重复的中断甚至 当回复文本已经到达时; 使用原始提交密钥检查其 在开始更多工作之前,请先确认身份.

更改代理发布一个版本

没有单独的保存. agent.update(), (中文(简体) ), setWorkflow, (中文(简体) ), removeWorkflow 财务报告和审定财务报表 setTriggers 每个版本发布新版本.

只发送什么变化. 你没有寄的都是继承的 当前版本。 这使得改变一个领域是安全的,它不是一个 方便:一个重建并重新发送整个配置的调用器 不管它忘了什么, 这已经造成了四个不同的数据丢失bug 密码库.

await agent.update({ instructions: 'Be brief.' });    // keeps everything else

一个对话会贴上它的版本

它在代理机的版本开始并保存时会固定. 之后出版 不移动已经打开的对话.

知识是例外,是故意的,是读的 参考文献这样 替换一个知识文件, 更改打开的对白中看到的内容 转 价格表,你无法纠正 不重写代理是 没用的.

两个驱动器

特工看见了属于你写探员写道:
知识/knowledge代理人对没有
对话/workspace一次谈话对对

一份申请材料,在询问前写入:

await conversation.writeFile('/input/contract.pdf', bytes);
await conversation.ask('What are the payment terms?');

根下之所为. input/ 这儿是公约 什么都没有 执行它,因为代理和您的应用程序共享一个命名空间.

代理人使用的账户

每个连接在一个代理的设置名称 一个账户,一个转弯 准确使用 那个:

与谁谁签入
Connection.creatorAccount(app, account)代理创建者你或同事,一次;每次谈话都用它
Connection.endUserAccount(app)终端用户的每个人,每名探员都记得

没有退路。 未签名的账户与其关联 找不到 代理商说 而不是找另一个 同样的应用程序.

秘密仍然分两层,不能替代: fixed 设置一次 经纪人, conversation 每次谈话都提供。 检查 conversation.ready 财务报告和审定财务报表 conversation.requires 来看看什么是杰出的.

您已经描述的 API 的起草工具

importTools 打开 OpenAPI 文档、 Postman 收藏或工作卷轴 命令为草稿 httpTools因此,没有人手写一个声明 终点.

import { importTools } from '@cerebro-labs/agentnava-sdk';

const draft = importTools({ openapi }, { include: (c) => !c.url.includes('/admin/') });
await ws.agents.create({ id: 'support', instructions, httpTools: draft.tools });

它完全运行在你的机器上。 没有任何关于源 发送到 Agent Nava, 这很重要, 因为这些文件通常包含活符 : 任何证书都用 {{secrets.NAME}} 占位符和 列入清单 draft.secrets,没有数值横跨。 每个起草的工具也 宣布它自己的秘密 secrets 字段,这是允许 运行时间装入他们转弯.

他们是草稿. draft.warnings 说出人类要决定什么 最大的一个是 description-missing: 三种格式中没有包含 句子 一个模型读取一个工具, 一个不好的描述不会失败,它 使特工打错了电话.

OpenAPI 文档中的规则(最小值、长度、模式、格式、格式) oneOf)并不花费你的手术。 它被写入参数的 说明, Rules: at least 1; at most 100.,而你的API 执行它作为它 对于任何呼叫者来说都是无效的;由于失败的结果,其400人到达了代理者 没错 确定一个安全计划的文件,但从未列在 security 每一个操作都有一个计划 security-choice 警告;有几种办法,没有一种办法,警告是这样说的.

HTTP 工具响应限制

声明式 HTTP 工具最多保留 64 KiB 响应数据并停止读取 当发现溢出。 限制数为UTF-8字节,而不是字符. 答复过多 返回时 ok: false, (中文(简体) ), truncated: true,则a response_too_large 错误正文 带有页码/过滤指导; HTTP 状态仍然是上游 状态。 部分JSON从未作为完整结果呈现. 使用 API 软件 过滤器和页码以获取链接页面中的大数据集.

错误

每一次失败 AgentNavaError。 。 。 .

catch (err) {
  if (err instanceof AgentNavaError) {
    err.code;       // 'agent_not_found', branch on THIS
    err.status;     // 404
    err.retryable;  // 5xx, 429, and network failures
    err.retryAfter; // seconds, on a 429
  }
}

分会 code,没有打开 message。代码是稳定的; 信件是为 阅读日志的人.

retryable 唯一值得自动化的东西: 400 将同样失败 永远,一个404将无法找到.

404既包括"没有这样的事",也包括"不是你的",所以一个叫人调查的id不能 告诉另一个客户的经纪人 从不存在。 没有403个.

配置

AgentNava.getWorkspace();                                   // AGENTNAVA_API_KEY
AgentNava.getWorkspace({ apiKey, baseURL, timeout });
AgentNava.getWorkspace({ fetch: myFetch });                 // a proxy, or a test

到处跑 fetch 已存在:节点, Bun, Deno, Cloudflare Workers, 浏览器. loadWorkflows 是一个例外; 它从磁盘上读取一个目录, 所以需要 节点或邦.

指向不同的部署

SDK的谈话 https://api.agentnava.com 除非你另有说法 两种方式 以改变它,明确的选项胜过环境变量.

// a dedicated enterprise endpoint
const ws = AgentNava.getWorkspace({ apiKey, baseURL: 'https://acme.agentnava.example' });
# staging, which is where a test key works
AGENTNAVA_BASE_URL=https://api-staging.agentnava.com

生产 URL 的中键失败 invalid api key,哪个 读起来像一个糟糕的密钥 而不是错误的宿主。 如果你得到了一个测试钥匙, 上方设置 URL 。 后面的斜线很好,有路径的基地 前缀也有效,用于坐在我们面前的API网关.

许可证

阿帕奇许可证2.0. 见 LICENSE,以及 NOTICE 归属问题 第4(d)节请您继续.

自由使用、修改和再分配,包括商业用途 明确授予专利权。 第6条不赋予姓名权利:“AgentNava” 而"Cerebro Labs"仍然是Cerebro Labs股份有限公司的商标.

回复中的部件( 0. 50)

agent.start({ endUserId, widgets: true }) 说你的屏幕可以画出牌,表和图表. 每回转一回 widget 事件(每次有一个完整的部件,替换为 surfaceId, (中文(简体) ), done 携带最终 widgets,以及 messages() 返回每个回复。 继续一个 agent.conversation(id, { widgets: true }). 部件使用Google开放的A2UI格式,并配有AgentNava自己的一组部件(AgentNava)Widget, (中文(简体) ), WidgetPart: 以您自己的组件绘制每个组件, 从其部分开始 id root,或使用下面的现成反应视图. placeWidgets(text, widgets) 按读取顺序将回复分为单词和部件,用于任何框架.

import { ReplyView } from '@cerebro-labs/agentnava-sdk/react'
import '@cerebro-labs/agentnava-sdk/react/styles.css'

<ReplyView text={reply} widgets={widgets} onAsk={send} />

反应是可选的对等点:只有 @cerebro-labs/agentnava-sdk/react 进口 每一部分都有一个默认的外观 --an-w-* CSS变量; parts={{ Stat: MyStat }} 以任何种类交换自己的组件, renderText 画出词来, currency 财务报告和审定财务报表 locale 格式编号,和 allowUrl 缩小链接和图片打开的位置(https://仅默认)。 经纪人自己的 widgets: false 把他们关了 代理字段的旧意义,一个没有读到的部件类型的列表,已经消失了,同样 widgets.json 文件 loadAgentDir 用来装入.

代理人居住的地方(0.41)

agent.get() 财务报告和审定财务报表 ws.agents.list() 带只读 status: 经纪人居住的地方, 按规则 API 运行它通过,并在 needs 任何需要的账户或尚未建立的秘密(它仍然运行;使用它们的工具失效直到它们失效).

企业HTTP合同(0.34)

需要相应的 API 和运行时间更新 。 参数类型包括对象和阵列,嵌入属性/物品,需要的每件财产,可失效,整数和附加物. 使用选择原始的enums. 向paramsJson提供本地的JSON值;对象体不是JSON-encoded字符串.

OpenAPI进口商尊重操作安全,文档安全和安全:[] (公有). 当文档精确定义了一个支持的方案而无 security 数组任意名称之一,此方案适用于不表示的每个操作 security: [],带有 security-choice 警告 ; 有多个方案, 或一个进口商无法设置( Outh, cookie) , 没有应用, 警告说工具没有发送证书 。 支持Bearer, Basic和header/query API密钥. 它保存了被继承的参数,解决了循环本地的 schema 引用,以及 URL-encodes path/query 值. 未发送 Omited 的可选查询/标题值和一个可选的全正文; 缺少所需的值在 HTTP 之前仍然失败 。 查询值中的秘密使用已编码的秘密 .

这个 secretName 每个操作仅代表一个证书。 进口商将每个安全选项与操作的证书头参数一起检查,并选择第一个相容的选项. 如果没有人能够使用单一的证书,进口商会以警告跳过操作,而不是重用同样的秘密来获取独立证书. 关闭覆盖以生成独立的秘密名称, 或者明确配置操作 .

审查进口警告。 Schema规则从不跳过一个操作:将边框,长度,图案,字符串格式和项目或字段计数写入参数的描述,被叫作API的API执行. oneOf编号 :anyOf 成为接受每一种替代品的参数,并列出各种替代品(One of: Card (with type, token); BankTransfer (with type, iban).); “ X 或 无效” 成为无效的 X 和 地图 (additionalProperties 持有 schema)对任意密钥保持开放. 当替代品不能共享一个形状(列表或对象)时,第一个形状将保留,一个形状 unsupported-body 警告字段名称. allOf 成员合并,包括除类型外的只规则成员。 在安全备选办法中作出选择会产生警告。 仍然跳过一个操作,有一个 unsupported-operation 警告:一个自相矛盾的 allOf, tuple 阵列(prefixItems),递归性或外部引用,一种没有类型,结构化的查询序列化,cookie认证和OAuth获取/再生的图案. Schemas 无法声明一个财产命名 __proto__工人计划适配器无法保存.

计划旁边的关键词 $ref 如OpenAPI 3.1所定义的,在参考链的每一个步骤中,与被引用的策略一起应用:一个描述取代被引用的策略,一个规则被描述,一个enum会缩小选择. 仅标出响应属性 readOnly: true 在导入其请求计划之前仍然省略.

所有三个执行路径都共享一个HTTP执行器. 结果包括小写 Link, Retry-after, request ID,ETag, Last-Modified, Content-Type和速率限制头. 具有信誉的头被排除在外,元数据中已知的秘密值被修改. HTTP 错误和大小过大的响应也不错: 外出工具信封也是假的 。 响应字节限制仍为64 KiB:过滤或活化较大记录.

版本与发布记录

@cerebro-labs/agentnava-sdk 共发布 12 个版本,首次发布于 2026/09/21;过去 12 个月发布了 12 个版本。

版本发布日期距今
0.80.0latest2026/11/081 天前
0.79.02026/11/063 天前
0.75.12026/11/018 天前
0.75.02026/11/018 天前
0.74.02026/10/3010 天前
0.53.22026/10/2218 天前

关于 @cerebro-labs/agentnava-sdk 的常见问题

@cerebro-labs/agentnava-sdk 是什么?

纳瓦SDK探员 配置代理,开始交谈,并与之合作.

如何安装 @cerebro-labs/agentnava-sdk?

在项目目录运行 npm install @cerebro-labs/agentnava-sdk,或使用 pnpm add / yarn add / bun add。

@cerebro-labs/agentnava-sdk 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@cerebro-labs/agentnava-sdk 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cerebro-labs/agentnava-sdk 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=18。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cerebro-labs/agentnava-sdk 可以商用吗?

@cerebro-labs/agentnava-sdk 使用 Apache-2.0 许可。宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@cerebro-labs/agentnava-sdk 的下载量有多少?

根据 npm 官方下载统计,@cerebro-labs/agentnava-sdk 在 2026/10/10 – 2026/11/08 这 30 天内被下载 1,813 次,日均约 60 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cerebro-labs/agentnava-sdk 还在维护吗?

最新版本 0.80.0 发布于 2026/11/08(1 天前);至今共发布 12 个版本,其中过去 12 个月发布了 12 个;首次发布于 2026/09/21。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。