{"_id":"@aixianyun/sdk","_rev":"3-0490dc41d6f96119434d098df4618cf2","name":"@aixianyun/sdk","dist-tags":{"latest":"1.0.2"},"versions":{"1.0.0":{"name":"@aixianyun/sdk","version":"1.0.0","keywords":["xyai","openapi","ai","llm","skills","stream","openapi-sdk"],"author":{"name":"XYAI Team"},"license":"MIT","_id":"@aixianyun/sdk@1.0.0","maintainers":[{"name":"xyaizl","email":"kering4509@gmail.com"}],"homepage":"https://github.com/AIxianyun/xyaisdk","bugs":{"url":"https://github.com/AIxianyun/xyaisdk/issues"},"dist":{"shasum":"64f6e8bc2c5f30ab52f7177750d0ba8bbb1f2228","tarball":"https://registry.npmjs.org/@aixianyun/sdk/-/sdk-1.0.0.tgz","fileCount":6,"integrity":"sha512-O+YoOGZRA6UZQZD58dYHs1UncqHd/kUj3lEM2GRCuND1QZ4/cgQcBHHAWYBOxvplpAeLddG+ZzD50en9qfZ/IA==","signatures":[{"sig":"MEUCIQD3uUr4OmfU5txX6hLJYmA1vm+uc5oJKoB7106noB0AYAIgFG+8aBVC4c0bBW5ojodYArDTFEpF+J7zONakvWOFt0U=","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49305},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"81431a6b6d6d7b8d408085131586349d88a2441d","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","test":"vitest","build":"tsup src/index.ts --format cjs,esm --dts --clean --target node18","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"xyaizl","email":"kering4509@gmail.com"},"repository":{"url":"git+https://github.com/AIxianyun/xyaisdk.git","type":"git"},"_npmVersion":"10.9.4","description":"闲云智链开放平台 SDK - 通过 API Key 调用 AI 技能，支持非流式与流式输出","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^1.2.0","typescript":"^5.3.0","@types/node":"^20.11.0"},"peerDependencies":{"typescript":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.0_1779533936331_0.2606921666832016","host":"s3://npm-registry-packages-npm-production"}},"1.0.1":{"name":"@aixianyun/sdk","version":"1.0.1","keywords":["xyai","openapi","ai","llm","skills","stream","openapi-sdk"],"author":{"name":"XYAI Team"},"license":"MIT","_id":"@aixianyun/sdk@1.0.1","maintainers":[{"name":"xyaizl","email":"kering4509@gmail.com"}],"homepage":"https://github.com/AIxianyun/xyaisdk","bugs":{"url":"https://github.com/AIxianyun/xyaisdk/issues"},"dist":{"shasum":"84f0c91b76e190373c96cf1d63aa9ad9481c13b7","tarball":"https://registry.npmjs.org/@aixianyun/sdk/-/sdk-1.0.1.tgz","fileCount":6,"integrity":"sha512-z5kzmbl/01tZ/KRTQdBln58SBaAEZh5mRr79ngpWtu5xgA2EMM3pOH3oNvgTtkxPkT6tF50bnKR4UonhRN5uYg==","signatures":[{"sig":"MEYCIQCmSDHtxxDUGcPAjSSu9P9fxniz164/Z280fGoRc/luvAIhAPsd0/NKqTaYIolM76P9tZUEOHeXfDAf69EZjpyCB/qy","keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U"}],"unpackedSize":49103},"main":"dist/index.js","types":"dist/index.d.ts","module":"dist/index.mjs","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"gitHead":"77c6c04ab87fce6e8f3bd40cac50119a5717c6f9","scripts":{"dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","test":"vitest","build":"tsup src/index.ts --format cjs,esm --dts --clean --target node18","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"_npmUser":{"name":"xyaizl","email":"kering4509@gmail.com"},"repository":{"url":"git+https://github.com/AIxianyun/xyaisdk.git","type":"git"},"_npmVersion":"10.9.4","description":"闲云智链开放平台 SDK - 通过 API Key 调用 AI 技能，支持非流式与流式输出","directories":{},"_nodeVersion":"22.22.0","_hasShrinkwrap":false,"devDependencies":{"tsup":"^8.0.0","vitest":"^1.2.0","typescript":"^5.3.0","@types/node":"^20.11.0"},"peerDependencies":{"typescript":">=5.0.0"},"_npmOperationalInternal":{"tmp":"tmp/sdk_1.0.1_1779541669815_0.7149688514766681","host":"s3://npm-registry-packages-npm-production"}},"1.0.2":{"name":"@aixianyun/sdk","version":"1.0.2","description":"闲云智链开放平台 SDK - 通过 API Key 调用 AI 技能，支持非流式与流式输出","keywords":["xyai","openapi","ai","llm","skills","stream","openapi-sdk"],"author":{"name":"XYAI Team"},"license":"MIT","homepage":"https://github.com/AIxianyun/xyaisdk","repository":{"type":"git","url":"git+https://github.com/AIxianyun/xyaisdk.git"},"main":"dist/index.js","module":"dist/index.mjs","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","import":"./dist/index.mjs","require":"./dist/index.js"}},"scripts":{"build":"tsup src/index.ts --format cjs,esm --dts --clean --target node18","dev":"tsup src/index.ts --format cjs,esm --dts --watch","lint":"eslint src/","test":"vitest","typecheck":"tsc --noEmit","prepublishOnly":"npm run build"},"peerDependencies":{"typescript":">=5.0.0"},"devDependencies":{"@types/node":"^20.11.0","tsup":"^8.0.0","typescript":"^5.3.0","vitest":"^1.2.0"},"_id":"@aixianyun/sdk@1.0.2","gitHead":"692fad2c1356d1e636758e0d37aef3c2e022cd2c","bugs":{"url":"https://github.com/AIxianyun/xyaisdk/issues"},"_nodeVersion":"22.22.0","_npmVersion":"10.9.4","dist":{"integrity":"sha512-/LU5ljophAdNdUucaAR60xS7N/Pl1jOEs+n6Ghuy9dsX3I3e4DFf9Pn2kvNF/lYrNOvb3yl5gAZXsXj04ywCFg==","shasum":"75472a9659d7274d5cf5a3891bfedc1db7bca836","tarball":"https://registry.npmjs.org/@aixianyun/sdk/-/sdk-1.0.2.tgz","fileCount":6,"unpackedSize":49111,"signatures":[{"keyid":"SHA256:DhQ8wR5APBvFHLF/+Tc+AYvPOdTpcIDqOhxsBHRwC7U","sig":"MEUCIQD5+CAf/KjUnxg3mLUmYcCDTTOG9ddzrhUvM8tohFld4gIgQy8s+RGwwM5cxJ2+iRwdsSVmKvoYmUuHSW76BV9Oo4k="}]},"_npmUser":{"name":"xyaizl","email":"kering4509@gmail.com"},"directories":{},"maintainers":[{"name":"xyaizl","email":"kering4509@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages-npm-production","tmp":"tmp/sdk_1.0.2_1779547574356_0.9323512845447726"},"_hasShrinkwrap":false}},"time":{"created":"2026-05-23T10:58:56.230Z","modified":"2026-05-23T14:46:14.694Z","1.0.0":"2026-05-23T10:58:56.493Z","1.0.1":"2026-05-23T13:07:50.040Z","1.0.2":"2026-05-23T14:46:14.542Z"},"bugs":{"url":"https://github.com/AIxianyun/xyaisdk/issues"},"author":{"name":"XYAI Team"},"license":"MIT","homepage":"https://github.com/AIxianyun/xyaisdk","keywords":["xyai","openapi","ai","llm","skills","stream","openapi-sdk"],"repository":{"type":"git","url":"git+https://github.com/AIxianyun/xyaisdk.git"},"description":"闲云智链开放平台 SDK - 通过 API Key 调用 AI 技能，支持非流式与流式输出","maintainers":[{"name":"xyaizl","email":"kering4509@gmail.com"}],"readme":"# @aixianyun/sdk\n\n闲云智链开放平台 JavaScript/TypeScript SDK。通过 API Key 即可调用平台上的 AI 技能，支持非流式和流式输出。\n\n---\n\n## 安装\n\n```bash\nnpm install @aixianyun/sdk\n```\n\n```bash\nyarn add @aixianyun/sdk\n```\n\n```bash\npnpm add @xyai/sdk\n```\n\n---\n\n## 获取 API Key\n\n### 方式一：从开放平台控制台获取（推荐）\n\n1. 访问 [闲云智链开放平台](https://openapi.xyaichain.com) 并登录\n2. 进入 **开发者控制台** → **API Keys**\n3. 点击 **创建 API Key**，填写名称后确认\n4. 复制生成的 Key（创建后仅显示一次，请妥善保管）\n\n### 方式二：REST API 调用\n\n如果你已经有平台账号，也可以通过 API 创建 Key：\n\n```bash\n# 先登录获取 Cookie，再调用创建接口\ncurl -X POST https://openapi.xyaichain.com/api/keys \\\n  -H \"Content-Type: application/json\" \\\n  -H \"Cookie: xyai_user_id=你的用户ID\" \\\n  -d '{\"name\": \"我的SDK Key\"}'\n```\n\n返回示例：\n\n```json\n{\n  \"success\": true,\n  \"item\": {\n    \"id\": \"key_xxx\",\n    \"name\": \"我的SDK Key\",\n    \"key\": \"xyai-xxxxxxxxxxxxxxxxxxxx\",\n    \"createdAt\": \"2026-05-23T00:00:00.000Z\",\n    \"isActive\": true\n  }\n}\n```\n\n> **注意**：`key` 字段仅在创建时返回一次，请立即保存。后续查询只会返回脱敏值（如 `xyai-****xxxx`）。\n\n---\n\n## 快速开始\n\n```typescript\nimport { XYAIClient } from '@aixianyun/sdk'\n\nconst client = new XYAIClient({ apiKey: process.env.XYAI_API_KEY! })\n\n// 列出已发布的技能\nconst { items } = await client.skills.list({ page: 1, pageSize: 20 })\nconsole.log(items)\n\n// 获取技能详情（含变量定义）\nconst skill = await client.skills.info('sk_xxx')\nconsole.log(skill.variables) // 查看需要哪些输入变量\n\n// 调用技能\nconst res = await client.skills.invoke({\n  skillId: 'sk_xxx',\n  variables: { topic: 'AI写作', style: '小红书' },\n})\nconsole.log(res.result)     // AI 生成的内容\nconsole.log(res.energyCost) // 本次消耗能量\n```\n\n---\n\n## 流式调用\n\n```typescript\nfor await (const chunk of client.skills.stream({\n  skillId: 'sk_xxx',\n  variables: { topic: 'AI写作', style: '小红书' },\n})) {\n  switch (chunk.type) {\n    case 'text':\n      process.stdout.write(chunk.text)  // 逐字输出\n      break\n    case 'done':\n      console.log(`\\n完成，耗时 ${chunk.latency}ms`)\n      break\n    case 'error':\n      console.error('错误:', chunk.error)\n      break\n  }\n}\n```\n\n---\n\n## API 文档\n\n### XYAIClient\n\n```typescript\nconst client = new XYAIClient({\n  apiKey: 'your-api-key',         // 必填，平台颁发的 API Key\n  baseURL: '...',                 // 可选，默认 https://api.xyaichain.com/api/v1\n  timeout: 60000,                 // 可选，默认 60000ms\n  headers: {},                    // 可选，自定义请求头\n  defaultModel: 'Pro/...',       // 可选，默认模型\n})\n```\n\n#### client.validateKey()\n\n验证 API Key 是否有效。\n\n```typescript\nconst ok = await client.validateKey()\nif (!ok) throw new Error('API Key 无效')\n```\n\n---\n\n### client.skills\n\n#### skills.list(params?)\n\n列出已发布的技能。\n\n```typescript\nconst result = await client.skills.list({\n  page: 1,\n  pageSize: 20,\n  type: 'text_generation',       // 可选，筛选类型\n  keyword: '小红书',              // 可选，搜索关键词\n  sort: 'created_at',            // 可选，默认 created_at，可选 invocation_count\n})\n// result.items: SkillListItem[]\n// result.total: number\n// result.page: number\n// result.page_size: number\n```\n\n#### skills.info(skillId)\n\n获取技能详情。\n\n```typescript\nconst skill = await client.skills.info('sk_xxx')\n// skill.variables: SkillVariable[]  // 变量列表（含类型、是否必填等）\n// skill.model: { name, parameters }\n```\n\n#### skills.invoke(options)\n\n非流式调用技能。\n\n```typescript\nconst res = await client.skills.invoke({\n  skillId: 'sk_xxx',\n  variables: { topic: 'AI写作', style: '小红书' },\n  model: 'Pro/...',              // 可选，覆盖默认模型\n  maxTokens: 2048,               // 可选\n  temperature: 0.7,              // 可选\n})\n// res.requestId    请求 ID\n// res.logId        调用日志 ID\n// res.result       生成结果\n// res.usage        Token 使用量 { promptTokens, completionTokens, totalTokens }\n// res.latency      耗时（ms）\n// res.energyCost   本次消耗能量\n```\n\n#### skills.stream(options)\n\n流式调用技能，返回 `AsyncGenerator<StreamChunk>`。\n\n```typescript\nfor await (const chunk of client.skills.stream({\n  skillId: 'sk_xxx',\n  variables: { topic: 'AI写作', style: '小红书' },\n  model: 'Pro/...',\n  maxTokens: 2048,\n  temperature: 0.7,\n})) {\n  // chunk.type === 'start'  { requestId, logId }\n  // chunk.type === 'text'   { text, requestId }\n  // chunk.type === 'done'   { requestId, latency, logId }\n  // chunk.type === 'error'  { requestId, error }\n}\n```\n\n---\n\n## 错误处理\n\nSDK 会将服务端错误映射为 `XYAISDKError`：\n\n```typescript\nimport { XYAIClient, XYAISDKError, ErrorCodes } from '@xyai/sdk'\n\ntry {\n  const res = await client.skills.invoke({ skillId: 'sk_xxx', variables: {} })\n} catch (err) {\n  if (err instanceof XYAISDKError) {\n    console.error(err.code)      // 错误码\n    console.error(err.message)   // 错误信息\n    console.error(err.statusCode) // HTTP 状态码\n    console.error(err.requestId) // 请求 ID\n\n    switch (err.code) {\n      case ErrorCodes.INVALID_API_KEY:\n        // API Key 无效\n        break\n      case ErrorCodes.SKILL_NOT_FOUND:\n        // 技能不存在\n        break\n      case ErrorCodes.INSUFFICIENT_ENERGY:\n        // 能量不足\n        console.error('详情:', err.details) // { required, current }\n        break\n      case ErrorCodes.RATE_LIMIT_EXCEEDED:\n        // 请求过于频繁\n        break\n      default:\n        // 其他错误\n    }\n  }\n}\n```\n\n### 错误码\n\n| 错误码 | 说明 | HTTP Status |\n|--------|------|-------------|\n| `INVALID_API_KEY` | API Key 无效或已禁用 | 401 |\n| `UNAUTHORIZED` | 未提供认证信息 | 401 |\n| `SKILL_NOT_FOUND` | 技能不存在 | 404 |\n| `SKILL_NOT_PUBLISHED` | 技能未发布或已下架 | 403 |\n| `MISSING_VARIABLES` | 缺少必填变量 | 400 |\n| `INVALID_VARIABLE` | 变量类型错误 | 400 |\n| `INSUFFICIENT_ENERGY` | 能量不足 | 402 |\n| `RATE_LIMIT_EXCEEDED` | 请求过于频繁 | 429 |\n| `VALIDATION_ERROR` | 请求参数错误 | 400 |\n| `INTERNAL_ERROR` | 服务器内部错误 | 500 |\n\n---\n\n## 类型参考\n\n```typescript\n// 技能列表项\ninterface SkillListItem {\n  skill_id: string\n  name: string\n  description: string\n  author: string\n  skill_type: 'text_generation' | 'image_generation' | 'video_generation' | 'audio_generation'\n  tags: string[]\n  need_paid: boolean\n  price: number\n  version: string\n  create_time: string\n}\n\n// 技能详情\ninterface SkillDetail extends SkillListItem {\n  update_time?: string\n  variables: SkillVariable[]\n  output: { format: OutputFormat }\n  model: {\n    name: string\n    parameters: ModelParameters\n  }\n}\n\n// 调用响应\ninterface SkillResponse {\n  requestId: string\n  logId: string\n  result: string\n  usage?: TokenUsage\n  finishReason: string\n  latency: number\n  energyCost: number\n}\n\n// Token 使用量\ninterface TokenUsage {\n  promptTokens: number\n  completionTokens: number\n  totalTokens: number\n}\n```\n\n---\n\n## 能量消耗\n\n技能调用会按类型扣减能量：\n\n能量不足时会返回 `INSUFFICIENT_ENERGY` 错误，消耗的能量可在平台控制台查看。\n\n---\n\n## 兼容性\n\n- Node.js >= 18.0（原生 fetch + AbortSignal.timeout）\n- 浏览器（需支持 `fetch` 和 `AbortController`）\n- TypeScript >= 5.0（完整类型推导）\n\n---\n\n## License\n\nMIT\n","readmeFilename":"README.md"}