Skip to content

SDK 总览 —— 作为项目服务的客户端

SDK 是 AgentWorkShop 的编程客户端与扩展基座:外部项目经它消费平台 REST 服务; 插件经它获得宿主注入的运行时上下文。零第三方运行时依赖,Node ≥ 23.4 与现代浏览器双端可用。

两种身份,一个 SDK

身份形态SDK 的角色
外部集成者普通依赖直接调用 createPlatformClient() 消费平台 REST 面
插件作者导出 { name, setup(ctx) }ctx 即宿主注入的 SDK 上下文 —— 零导入依赖

为什么插件不直接 import SDK?全局安装的插件目录不在 node_modules 解析链上, 宿主注入是唯一零坑形态(VSCode activate(context) 同范式)。

获取与导入

bash
npm install -g agentworkshop     # 全局(含 CLI 与平台本体)
npm install agentworkshop        # 或作为你项目的依赖(集成形态)
js
import { createPlatformClient, definePlugin, HookBus } from 'agentworkshop/sdk'
import { createClientContext } from 'agentworkshop/sdk/client'   // 仅浏览器端

导入路径与版本

package.jsonexports 只开放四个入口;深路径(如 agentworkshop/sdk/api.mjs) 没有导出,导入会抛 ERR_PACKAGE_PATH_NOT_EXPORTED

导入解析到内容
agentworkshopsdk/index.mjsagentworkshop/sdk 同一个门面
agentworkshop/sdksdk/index.mjs全部门面(服务端 + 浏览器端 + REST 客户端 + 类型)
agentworkshop/sdk/clientsdk/client.mjs仅浏览器端(createClientContext)
agentworkshop/package.jsonpackage.json包元数据

版本:SDK 自带常量 SDK_VERSION = '0.3.0'(服务端)与 CLIENT_SDK_VERSION = '0.3.0'(浏览器端)。 它们是 SDK 自身接口的版本号,与 npm 包版本(当前 0.7.36)独立演进,不同步是预期行为。

自带 index.d.mts / client.d.mts 类型声明,TS 项目零配置获得 IntelliSense (声明覆盖范围的现状见完整指南 §7)。

快速示例:外部项目集成产线

js
import { createPlatformClient } from 'agentworkshop/sdk'

const api = createPlatformClient({ baseUrl: 'http://plant.local:3001' })
const { token } = await api.users.login('you@example.com', 'secret')
api.setToken(token)

await api.lines.create({ name: '一号产线' })

// 产线列表是 { lines, states },不是数组
const { lines } = await api.lines.list()
const line = lines[0]

// 数采节点列表同样是对象,取 .nodes
const { nodes } = await api.daqNodes.list()
console.log(`产线 ${line?.name ?? '(无)'},节点 ${nodes.length} 个`)

// 产线授权面(admin):overview() 全量,set() 批量写
// const { lines: all, users } = await api.permissions.overview()
// await api.permissions.set({ userId: users[0].id, grants: [{ lineId: all[0].id, mode: 'readonly' }] })

快速示例:插件(宿主注入 ctx)

js
// ~/.AgentWorkShop/plugins/my-plugin/index.mjs —— 零导入依赖
export default {
  name: 'my-plugin',
  auth: 'user',                 // 插件路由的声明式鉴权
  async setup(ctx) {
    const { lines } = await ctx.api.lines.list()                // 平台 REST 客户端(默认无 token)
    ctx.hooks.on('daq:sample', () => ctx.kv.bump('samples'))    // 生命周期钩子
    ctx.events.on('daq.reading', r => ctx.logger.debug(r.nodeId))  // scene 事件(自动补 event: 前缀)
    ctx.route('GET', '/stats', () => ctx.kv.all())              // 插件自有 API → /api/plugins/my-plugin/stats
  },
}

子页导航

依据 PolyForm Noncommercial 1.0.0 开源 · Source-available, noncommercial