# @agg-build/sdk 中文文档

规范地址：https://npmcn.com/package/%40agg-build/sdk/

版本：4\.37\.0
npm 元数据更新时间：2026-11-05T18:57:15.161Z
中文译文更新时间：2026-11-06T03:06:56.021Z
软件包许可：MIT

本文由上游 README 翻译，可能存在偏差，请结合原文核对 API、命令与配置。版权与许可归原作者所有。

原始 npm 页面：https://www.npmjs.com/package/%40agg-build/sdk
原文对照：https://npmcn.com/package/%40agg-build/sdk/?lang=original
项目主页：https://docs.agg.market/
源码仓库：https://github.com/Snag-Solutions/Agg

## 关键信息（来自 npm 元数据）

- 包体积（解压后）：1.9 MB，38 个文件
- 模块格式：ESM + CJS
- TypeScript 类型：包内自带
- 运行依赖：1 个
- 首次发布：2026-04-27T19:41:56.391Z
- 最新版本发布：2026-11-05T18:57:14.996Z
- 近 30 天下载量：5933（2026-10-05 至 2026-11-03，npm 官方下载统计）
- 已发布版本数：82（近 12 个月 82 个）

## 中文简介

用于AGG预测市场聚合器的香草TypeScript客户端(自动,市场,订单簿,图表,交易,管理下执行,WebSockets). 工作于浏览器,Node.js,以及React Industrial.

## 安装

```sh
npm install @agg-build/sdk
```

也可以使用：`pnpm add @agg-build/sdk`、`yarn add @agg-build/sdk`、`bun add @agg-build/sdk`

## README

# @ agg- building/ sdk

Vanilla 类型脚本客户端 [恶作剧](https://docs.agg.market/) 预测市场聚合物—— 一个客户端,每个表面(自动,市场,订单,图表,交易,管理下的执行, 腾讯网.

## 这是什么

`@agg-build/sdk` 是安装最低级别的软件包伙伴。 它通过HTTPS和AGG API说话 WebSockets, 管理认证/ 会话状态, 并曝光每个产品端点的打入包装 (市场、订货簿、图表、贸易执行、存款/提款、管理下的钱包、 ,(增加). 它没有框架依赖性,在浏览器,Node.js和React Introduct中工作.

反应应用程序, 层 `@agg-build/hooks`, (中文(简体) ), `@agg-build/ui`,以及 `@agg-build/auth` 在顶端,他们都使用这个客户端 在引擎盖下.

## 何时使用此软件包

-   您正在构建一个 vanilla TS/JS app, React Industrial app, 或服务器侧整合 .
-   您要为 AGG REST API 和 WebSocket 网关输入一个已输入的、包含电池的客户端 .
-   您正在自编自导出反应层, 并需要基本的 认证/ 部分/ 交易原始 .
-   您需要只使用服务器的助手: SSR 配置取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取取, 或管理员 API 客户端(参见 `@agg-build/sdk/server`) (中文(简体) ).

如果您正在运送一个 React app 并且想要现成的钩子或 UI, 请安装 [`@agg-build/hooks`](https://www.npmjs.com/package/@agg-build/hooks), (中文(简体) ), [`@agg-build/ui`](https://www.npmjs.com/package/@agg-build/ui),以及 [`@agg-build/auth`](https://www.npmjs.com/package/@agg-build/auth) 相反,这些软件包是建立在 `@agg-build/sdk`。 。 。 .

## 安装

```bash
npm install @agg-build/sdk
```

## 快开始

```typescript
import { createAggClient } from "@agg-build/sdk";

const client = createAggClient({
  baseUrl: "https://api.agg.market",
  appId: "your-app-id",
});

// Health check
const hello = await client.getHello();

// Current auth state (persisted across reloads via localStorage)
console.log(client.isAuthenticated, client.user);
```

### 认证一个用户( SIWE)

```typescript
// 1. Start the auth flow
const { nonce } = await client.authStart({ provider: "siwe" });

// 2. Build the EIP-4361 message
const message = client.buildSiweMessage({
  address: "0x…",
  chainId: 1,
  nonce,
  domain: window.location.host,
  uri: window.location.origin,
});

// 3. Sign with the user's wallet (wagmi, viem, ethers, …)
const signature = await wallet.signMessage(message);

// 4. Verify → stores accessToken + user in the client
const { accessToken, user } = await client.verify({ message, signature });
```

SIWS (索拉纳语) 使用相同的流量 `buildSiwsMessage` 以及一个基数58编码的Ed25519签名.

重定向流(Google,苹果,Twitter,电子邮件magic-link)返回一个URL来导航:

```typescript
const response = await client.authStart({
  provider: "google",
  redirectUrl: "https://yourapp.com/auth/callback",
});

if (response.type === "redirect") {
  window.location.assign(response.url);
}

// …back on the callback page:
const code = new URLSearchParams(window.location.search).get("code");
if (code) {
  await client.exchangeAuthCode(code);
  window.history.replaceState(null, "", window.location.pathname);
}
```

### Http 纯饼干- 新鲜模式

对于选择一个的浏览器应用程序 `HttpOnly` 刷新饼干 存储刷新标志 在JS, 用 `authDelivery: "cookie-refresh"`数字 :

```typescript
const client = createAggClient({
  baseUrl: "https://api.agg.market",
  appId: "your-app-id",
  authDelivery: "cookie-refresh",
});
```

在这个模式下, `verify()` 财务报告和审定财务报表 `exchangeAuthCode()` 可省略 `refreshToken` 从返回 对象。 刷新饼干仍保留在 AGG API 主机下 `/auth` 从未接触过 伙伴前端域.

### 流取数据( WebSocket)

```typescript
const ws = client.createWebSocket({
  onSnapshot: (outcomeId, book) => console.log("snapshot", outcomeId, book),
  onDelta: (outcomeId, book) => console.log("delta", outcomeId, book),
  onTrade: (trade) => console.log("trade", trade.venue, trade.price, trade.size),
});

// Orderbooks are keyed by venueMarketOutcomeId (the `outcomes[].id` on REST).
const unsubscribe = ws.subscribe("venue-market-outcome-id");

// Optional: authenticate for user-scoped events (orders, balances)
ws.authenticate(accessToken);

// Cleanup
unsubscribe();
ws.destroy();
```

`createWebSocket` 需求 `wsUrl` 改为: `createAggClient`基础 `AggWebSocket` 如果想要更好的控制,也可以直接被即时处理.

### 服务器侧助手

从 `/server` 仅限节点公用事业的入口:

```typescript
import { AggAdminClient, signExternalId, verifyWebhook } from "@agg-build/sdk/server";

// Sign a partner external-ID assertion before sending to the browser
const assertion = signExternalId(process.env.AGG_APP_SECRET!, partnerUser.id);

// Verify an inbound webhook
verifyWebhook(rawBody, req.headers, process.env.AGG_WEBHOOK_SECRET!);

// Admin API client (uses x-app-api-key)
const admin = new AggAdminClient({
  baseUrl: "https://api.agg.market",
  apiKey: process.env.AGG_APP_API_KEY!,
});
const users = await admin.listUsers("your-app-id", { limit: 50 });
```

## 客户选项

| 选项 | 类型 | 需求 | 说明 |
| --- | --- | --- | --- |
| `baseUrl` | `string` | 对 | API 基础 URL( 如. `https://api.agg.market`(中文(简体) ) |
| `appId` | `string` | 应用/adminKey软件之一 | 合作伙伴应用程序标识 |
| `adminKey` | `string` | 应用/adminKey软件之一 | 管理层路由的管理员 API 密钥 |
| `wsUrl` | `string` | 用于 WebSocket | WebSocket网关 URL( 需要由 `createWebSocket`(中文(简体) ) |
| `orderbookUrl` | `string` | 没有 | 订购簿频道的第二个套接字 。 取消设置时保留命令簿 `wsUrl`。设定时,只使用订购簿的订阅 `wsUrl` 闲置 |
| `orderbookLatency` | `"conflated" | "realtime"` | 没有 | 秩序书分层. 默认 `conflated` 省略 `latency`· ; `realtime` 送来 |
| `authDelivery` | `"body" | "cookie-refresh"` | 没有 | 脚本传送模式( 默认 ): `"body"`(中文(简体) ) |
| `persistSession` | `boolean` | 没有 | 本地Storage 的 persist 认证提示( 默认 ): `true`(中文(简体) ) |
| `kalshiDemo` | `boolean` | 没有 | 折旧相容性选项; 忽略 |

打电话 `client.destroy()` 当你不再需要客户端释放内部资源时 (BroadcastChannel用于跨tab auth同步).

## 主要出口

### `AggClient` 方法

#### 认证会话( S)

| 方法 | 说明 |
| --- | --- |
| `authStart(body)` | 启动任何认证流( SIWE nonce、 OAuth 重定向等) |
| `buildSiweMessage(params)` | 构建 EIP-4361 信件字符串 |
| `buildSiwsMessage(params)` | 构建索拉纳签名消息 |
| `verify({ message, signature })` | 验证 SIWE/ SIWS 签名, 存储符牌 |
| `exchangeAuthCode(code)` | 交换令牌的重定向认证代码 |
| `refreshAccessToken()` | 使用存储的刷新符牌刷新 JWT |
| `setSession({ accessToken, refreshToken?, user? })` | 从重定向调回的种子符号 |
| `setAccessToken(token)` 编号 : `clearAccessToken()` | 直接管理 JWT |
| `signOut()` | 撤销令牌服务器侧并清除本地会话 |
| `onAuthStateChange(listener)` | 订阅认证状态更改 |
| `isAuthenticated` 编号 : `user` 编号 : `authStatus` | 当前会话状态的获取器 |

#### 用户配置文件账户( A)

| 方法 | 说明 |
| --- | --- |
| `getCurrentUser()` | 从中获取当前用户配置 `/users/me` |
| `updateUser(data)` | 更新用户名, 外观等 . |
| `createAvatarUploadUrl(contentType)` | 获得预先签名的外观上传 URL |
| `linkExternalId({ externalId, timestamp, hmac })` | 链接后端签名的伙伴用户ID |
| `disconnectAccount(provider)` | 删除链接的认证提供者 |

#### 市场数据

| 方法 | 说明 |
| --- | --- |
| `getVenueEvents(options?)` | 列表预测市场事件( cursor pagination) |
| `getVenueEventById(id)` | 通过 ID 获取单个事件 |
| `getVenueMarkets(options?)` | 列表带有过滤器的会场市场( cursor pagination) |
| `getCategories(options?)` | 清单市场类别 |

#### 相关市场

| 方法 | 说明 |
| --- | --- |
| `resolveCorrelatedMarkets(params)` | 解决市场和回报扩大/尖端思想 |
| `getCorrelatedMarketCascade(params)` | 获取已知会场的扩展/尖端想法 |
| `getMarketCorrelatedSignals(id)` | 检查产生市场信号 |
| `queryCorrelatedMarkets(params)` | 通过信号相似性搜索市场 |

#### 订单和路由

| 方法 | 说明 |
| --- | --- |
| `getOrderbooks(params)` | 获得给定的每个月的现场订单 `venueMarketIds` |
| `getSmartRoute(params)` | MILP 解析器,用于在不同地点之间优化顺序 |

#### 图表数据

| 方法 | 说明 |
| --- | --- |
| `getChartBars(params)` | 贸易View风格的OHLCV蜡烛 |
| `getPricesHistory(params)` | 地点市场结果的价格历史 |
| `getOrderbookHistory(params)` | 结果的顺序书深度历史 |

#### 贸易

| 方法 | 说明 |
| --- | --- |
| `validateTrade(body)` | 飞行前贸易验证 |
| `executeTrade(body)` | 通过后端执行所支持的预测-市场订单 |
| `computeSplits(body)` | 通过 API 计算不同地点的最佳订单 |

#### 地点键

| 方法 | 说明 |
| --- | --- |
| `listVenueKeys(venues?)` | 列出存储地点 API 密钥( 未返回秘密) |
| `upsertVenueKey(body)` | 创建或更新会场 API 密钥 |
| `deleteVenueKey(venue)` | 删除会场 API 密钥 |

#### 管理执行和结余

| 方法 | 说明 |
| --- | --- |
| `validateManaged(params)` | 平衡和过渡要求 |
| `executeManaged(params)` | 填入引号 `getSmartRoute()` - 见下注 |
| `withdrawManaged(params)` | 从管理的钱包撤回到外部地址 |
| `withdrawPreview(params)` | 预览退出收到数额和路由费 |
| `getWithdrawalQuote(params)` | 引用最高可交付提款额 |
| `syncManagedBalances()` | 触发链上平衡同步 |
| `cancelManagedOrder(orderId)` | 取消待决的管理下执行命令 |
| `getVenueBalances(venues)` | 在各地取得平衡 |
| `getManagedBalances()` | 获取每个链子和每个收入的钱包余额管理 |
| `getDepositAddresses()` | 获取管理的钱包存款地址( EVM + Solana) |

要引出并填补一个管理下的交易, 瞄准一个场地市场 **结果**. 采购预算与 `maxSpend`; 销售指定与 `sellShares`。通过返回 `quoteId` 改为 `executeManaged()`数字 :

```ts
const buyRoute = await client.getSmartRoute({
  venueMarketOutcomeId,
  tradeSide: "buy",
  maxSpend: 50,
});
await client.executeManaged({ quoteId: buyRoute.quoteId });

const sellRoute = await client.getSmartRoute({
  venueMarketOutcomeId,
  tradeSide: "sell",
  sellShares: 10,
});
await client.executeManaged({ quoteId: sellRoute.quoteId });
```

`venueMarketId`, (中文(简体) ), `outcomeId`,以及 `side: "yes" | "no"` 仍为已贬值的相容性别名; 应使用新的整合 `venueMarketOutcomeId` 财务报告和审定财务报表 `tradeSide`。 。 。 .

> **在v4中被删除.** `quoteManaged()` ——其终点, `POST /execution/quote`,在API上并不存在,所以这个电话只有 返回 404号。 取上取出两相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相相.

#### 命令和职位

| 方法 | 说明 |
| --- | --- |
| `getOrders(params?)` | 列出交易执行人命令 |
| `getExecutionOrders(params?)` | 列出执行命令( cursor pagination) |
| `getExecutionPositions(params?)` | 列出执行位置( cursor pagination) |
| `getPositions(params?)` | 按匹配的市场组合打开位置 |
| `getUserHoldings(params)` | 每个地点获得用户位置 |

#### 领导板

| 方法 | 说明 |
| --- | --- |
| `getLeaderboard(params?)` | 按已实现的 P&L 或音量( cursor pagination) 设置的交易领导板 |

#### 公用事业

| 方法 | 说明 |
| --- | --- |
| `getHello()` | 健康检查 |
| `request(path, init?)` | 401上自动重试的通用HTTP |
| `createWebSocket(callbacks?)` | 创建 WebSocket 实例( 需要) `wsUrl`(中文(简体) ) |
| `destroy()` | 发布资源(广播频道等) |

### 独立公用事业

| 导出 | 说明 |
| --- | --- |
| `AggWebSocket` | 低级 WebSocket 客户端( 由 `client.createWebSocket()`(中文(简体) ) |
| `CandleBuilder` | 图表-图书-不可知性蜡烛制造器(贸易-OHLC) |
| `computeBestSplitsByAmount` | 纯功能:最佳地在会场订货簿中分拆 |
| `applyOrderbookDelta` | 将 WS 三角形应用到模拟命令簿 |
| `computeChecksum` | CRC32 订货簿校验和(用于检测干燥剂) |
| `snapshotToOrderbook` | 将 WS 快照转换为内元件 |
| `aggregateMidpoint` | 各个地点的总结果中点 |
| `mergeCandles` | 合并活 + 历史蜡烛 碰撞时的活赢 |
| `mergeClosedCandles` | 只将蜡烛完全关闭的选项 |
| `TurnstileChallengeError` | 当一个认证端点需要 Turnstile 挑战时抛出 |
| `AggApiError` | 每一次非-2xx API 响应被丢弃——见下文 |
| `isAggApiError` | 类型守护 `AggApiError` |

### 处理错误

每一个非-2xx 反应被扔作为一个 `AggApiError` 携带 `status`,并且 -- 当API供给他们的时候—— `code`, (中文(简体) ), `retryable` 和每个外地 `errors`部门 打开 `status`编号 :`code` 而不是匹配消息文本; 消息是人为的 并可能被重新措辞.

```ts
import { isAggApiError } from "@agg-build/sdk";

try {
  await client.getPositions();
} catch (err) {
  if (isAggApiError(err)) {
    if (err.status === 401) return promptReconnect(); // session lapsed
    if (err.code === "unregistered_domain") {
      // The signed SIWE `domain` is not in the app's allowedOrigins.
      // Note this is NOT the Origin header — sign-in works with no Origin
      // at all, which is what makes Node and React Native work.
    }
  }
  throw err;
}
```

### `@agg-build/sdk/server`

| 导出 | 说明 |
| --- | --- |
| `AggAdminClient` | 使用 `x-app-api-key` (仅服务器) |
| `signExternalId(secret, userId)` | HMAC 在打电话前签名一个伙伴用户ID `linkExternalId()` |
| `verifyWebhook(payload, headers, secret)` | 验证输入的 Webhook 签名 |
| `parseWebhookEvent(payload, headers, secret)` | 校验 + 解析一个被键入的事件 |
| `WebhookVerificationError` | 丢入签名/时间戳失败 |

## WebSocket 回调

| 回电 | 当它起火时 |
| --- | --- |
| `onSnapshot(outcomeId, book)` | 收到完整的订货簿快照 |
| `onDelta(outcomeId, book)` | 应用递增式订单簿更新 |
| `onTrade(trade)` | 交易执行 |
| `onHeartbeat(hb)` | 服务器心跳( 每30s) |
| `onSubscribed` 编号 : `onUnsubscribed` | 订阅生命周期 |
| `onConnected` 编号 : `onAuthenticated` | 连接/ 认证生命周期 |
| `onOrderSubmitted` | 通过 WebSocket 设置顺序 |
| `onBalanceUpdate` | 余额变动事件 |
| `onMarketResolved` | 市场解决 |
| `onDiagnostics(event)` | 诊断事件(seq缺口、断层连接) |
| `onConnectionStateChange(connected)` | 主连接状态已更改 |
| `onOrderbookConnectionStateChange(connected)` | 订单套接字状态 。 仅在 `orderbookUrl` 设定 |
| `onError(msg)` | 服务器发送错误消息 |

命令书按结果键. `OrderbookState.outcomeId` 是一个 书;被贬损 `OrderbookState.marketId` 持有同样的结果id, **没有** 地点 市场编号,因为订货簿框架没有市场编号。 使用 REST 软件 `venueMarketId` (例如来自 `getOutcomeOrderbooks`或你自己的结果 / 当你需要市场绘图时 市场.

关键行为 :

-   与每个市场重新计算的订阅单项持续连接. `orderbookUrl` 将命令簿频道移动到第二个套接字上并报告 `onOrderbookConnectionStateChange`。只订阅订单不保留 `wsUrl` 连接。 交易、arb、目录和用户活动保持不变 `wsUrl`。 。 。 .
-   每集市内订单状态(snapshot + delta并有CRC32核查).
-   序列间隙或校验和错配会触发自动回放.
-   `snapshot_unavailable` 复试只影响活性结果,每套最多有3个紧张的复试,最多每套每秒再试20个结果。 仍然到达错误 `onError`; 成功快照、 未订阅和套接字关闭将取消等待重试 。 缺少的答复仍由可选书监督员负责.
-   以指数回放自动重联(基数1s,最大为30s).
-   活性:45s没有消息触发重接;服务器心跳每30s.
-   投标总是排序 降级,问总是排序 升级.

## 自动附加信头

-   `x-app-id` ——从 `appId` 选项
-   `Authorization: Bearer <jwt>` - 注册后
-   `x-admin-key` 如果 `adminKey` 提供
-   `x-auth-delivery: cookie-refresh` + 键 `credentials: "include"` 只有认证的请求 `authDelivery: "cookie-refresh"` 已启用

## 入境点

| 条目 | 目的 |
| --- | --- |
| `@agg-build/sdk` | `AggClient`, (中文(简体) ), `createAggClient`, (中文(简体) ), `AggWebSocket`水电费 |
| `@agg-build/sdk/server` | 只有节点的帮助者:管理客户端,外部ID/webhook签名 |

## 同伴依赖关系

无——至于v4,也没有运行时间依赖关系. 捆绑的唯一模块 进口为 `node:crypto` (使用时间: `@agg-build/sdk/server`因此,一个新的安装是 1 MB以下,无中转.

带上你的钱包库 SDK 构建 SIWE/ SIWS 消息串, 绝不 签名本身,所以 `viem`, (中文(简体) ), `ethers`,或者任何其他签名者的工作——你通过 在一个 `signMessage` 函数.

> **在v4中有所改变.** 先前版本已声明 `viem`, (中文(简体) ), `ethers@5`, (中文(简体) ), `@polymarket/clob-client` 财务报告和审定财务报表 `@polymarket/builder-signing-sdk` 作为运行时间 依赖性。 从未导入过代码路径, 但安装者仍在付费 - 大约100 MB的 `node_modules` 穿过他们的中转树 他们 在v4中被删除; SDK的行为没有任何改变.

## 链接

-   文 件 - 存档副本 [https://docs.agg.market/ 互联网档案馆的存檔,存档日期2013-12-02](https://docs.agg.market/)
-   Demo app - 软件 [https://agg.market/ (中文(简体) )](https://agg.market/)
-   反应钩- [`@agg-build/hooks`](https://www.npmjs.com/package/@agg-build/hooks)
-   贸易UI - [`@agg-build/ui`](https://www.npmjs.com/package/@agg-build/ui)
-   连接/ 登录 UX —— [`@agg-build/auth`](https://www.npmjs.com/package/@agg-build/auth)

## 许可证

麻省理工学院

### 地点活动读取录取

`getVenueEventById` 共享同时在每一个客户端内读取和认证 届会(包括常会) `cluster` 财务报告和审定财务报表 `minVolume` 查询值). 它保留 没有完成结果缓存。 最多四个不同的活动同时进行; 最多128 等待FIFO顺序。 全队拒绝方式 `AggApiError` 状态429, 代码 `client_read_queue_full`,并重试延迟提示.

一个服务器429仍然拒绝原调用,而没有自动重试. 新员额 已队列事件读取其荣誉 `Retry-After` 延迟加最多250ms正焦; 缺少提示使用一秒钟。 呼叫者可以独立取消; 共享抓取 只有在所有来电者离开后才取消。 队列读取拒绝 `AbortError` 如果在录取前认证更改. `destroy()` 取消待读 . 其他读取方法和写取方法保留了现有的再试行为.

## 常见问题

### @agg-build/sdk 是什么？

用于AGG预测市场聚合器的香草TypeScript客户端\(自动,市场,订单簿,图表,交易,管理下执行,WebSockets\)\. 工作于浏览器,Node\.js,以及React Industrial\.

### 如何安装 @agg-build/sdk？

在项目目录运行 npm install @agg-build/sdk，或使用 pnpm add / yarn add / bun add。

### @agg-build/sdk 支持 TypeScript 吗？

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

### @agg-build/sdk 支持 ESM 还是 CommonJS？

同时提供 ES Module 与 CommonJS 入口，import 和 require\(\) 都可以使用，打包工具会自动选择合适的版本。

### @agg-build/sdk 可以商用吗？

@agg-build/sdk 使用 MIT 许可。宽松许可：允许商业使用、修改和再分发，通常只需在分发时保留原版权与许可声明。以上为概括，不构成法律意见，请以许可原文为准。

### @agg-build/sdk 的下载量有多少？

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

### @agg-build/sdk 还在维护吗？

最新版本 4\.37\.0 发布于 2026/11/06（今天）；至今共发布 82 个版本，其中过去 12 个月发布了 82 个；首次发布于 2026/04/28。发布频率只是参考信号：功能稳定的工具可能很少需要更新，建议结合源码仓库的 issue 和提交记录判断。

