@blade-ai/agent-sdk 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -2,6 +2,9 @@
2
2
 
3
3
  本文件记录 @blade-ai/agent-sdk 的所有重要变更。
4
4
 
5
+ ## [0.1.5] - 2026-02-08
6
+
7
+ - 无相关变更
5
8
  ## [0.1.4] - 2026-02-08
6
9
 
7
10
  - e65fad4 feat(session): 添加会话分叉功能
package/dist/index.js CHANGED
@@ -144,7 +144,7 @@ ${b.important.map((V)=>`⚠️ ${V}`).join(`
144
144
  `;else if(G.type==="resource")O+=`[资源: ${G.mimeType||"unknown"}]
145
145
  `,X+=`[resource: ${G.mimeType||"unknown"}]
146
146
  `}if(J.isError)return{success:!1,llmContent:X||"MCP tool execution failed",displayContent:`❌ ${O||"MCP工具执行失败"}`,error:{type:"execution_error",message:X||"MCP tool execution failed"}};return{success:!0,llmContent:X||"Execution succeeded",displayContent:`✅ MCP工具 ${w.name} 执行成功
147
- ${O}`,metadata:{serverName:b,toolName:w.name,mcpResult:J}}}catch(J){return{success:!1,llmContent:`MCP tool execution failed: ${J.message}`,displayContent:`❌ ${J.message}`,error:{type:"execution_error",message:J.message}}}}})}function p0($){if($.type==="object"||$.properties){let b={},w=$.required||[];if($.properties){for(let[V,W]of Object.entries($.properties))if(typeof W==="object"&&W!==null){let Q=p0(W);if(!w.includes(V))Q=Q.optional();b[V]=Q}}return H$.object(b)}if($.type==="array"&&$.items){if(typeof $.items==="object"&&!Array.isArray($.items)&&$.items!==null)return H$.array(p0($.items));return H$.array(H$.any())}if($.type==="string"){let b=H$.string();if($.minLength!==void 0)b=b.min($.minLength);if($.maxLength!==void 0)b=b.max($.maxLength);if($.pattern)b=b.regex(new RegExp($.pattern));if($.enum)return H$.enum($.enum);return b}if($.type==="number"||$.type==="integer"){let b=H$.number();if($.minimum!==void 0)b=b.min($.minimum);if($.maximum!==void 0)b=b.max($.maximum);return b}if($.type==="boolean")return H$.boolean();if($.oneOf&&$.oneOf.length>0){let b=$.oneOf.filter((w)=>typeof w==="object"&&w!==null).map((w)=>p0(w));if(b.length>=2)return H$.union(b)}if($.anyOf&&$.anyOf.length>0){let b=$.anyOf.filter((w)=>typeof w==="object"&&w!==null).map((w)=>p0(w));if(b.length>=2)return H$.union(b)}return H$.any()}import{Client as h5}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as x5}from"@modelcontextprotocol/sdk/client/sse.js";import{StdioClientTransport as p5}from"@modelcontextprotocol/sdk/client/stdio.js";import{EventEmitter as d5}from"events";var L1={name:"@blade-ai/agent-sdk",version:"0.1.4",private:!1,description:"Blade AI Agent SDK",type:"module",main:"./dist/index.js",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"}},files:["dist","vendor/ripgrep/**","README.md","CHANGELOG.md"],scripts:{build:"bun run scripts/build.ts",test:"bun test",lint:"biome lint src","lint:fix":"biome lint --write src","type-check":"bun x tsc --noEmit",release:"bun run scripts/release.js","release:dry":"bun run scripts/release.js --dry-run","release:major":"bun run scripts/release.js --major","release:minor":"bun run scripts/release.js --minor","release:patch":"bun run scripts/release.js --patch"},keywords:["sdk","blade","ai","assistant","agent","llm","bun"],author:"echoVic",license:"MIT",optionalDependencies:{"@vscode/ripgrep":"^1.17.0","bun-pty":"^0.4.8","node-pty":"1.0.0"},dependencies:{"@agentclientprotocol/sdk":"^0.12.0","@ai-sdk/anthropic":"^3.0.7","@ai-sdk/azure":"^3.0.5","@ai-sdk/deepseek":"^2.0.4","@ai-sdk/google":"^3.0.4","@ai-sdk/openai-compatible":"^2.0.4","@modelcontextprotocol/sdk":"^1.17.4",ai:"^6.0.39","async-mutex":"^0.5.0",axios:"^1.12.2",chalk:"^5.4.1",diff:"^8.0.2","fast-glob":"^3.3.3","fuse.js":"^7.1.0","gray-matter":"^4.0.3",hono:"^4.7.10","js-tiktoken":"^1.0.21","lodash-es":"^4.17.21","lru-cache":"^11.2.4",nanoid:"^5.1.6",open:"^10.1.2",openai:"^6.2.0",picomatch:"^4.0.3",semver:"^7.7.3",undici:"^7.16.0","write-file-atomic":"^7.0.0",ws:"^8.18.0",yaml:"^2.8.1",zod:"^3.24.2","zod-to-json-schema":"^3.24.6",zustand:"^5.0.9"},devDependencies:{"@biomejs/biome":"^2.2.4","@types/json-schema":"^7.0.15","@types/lodash-es":"^4.17.12","@types/picomatch":"^4.0.2","@types/semver":"^7.7.1","@types/write-file-atomic":"^4.0.3","@types/ws":"^8.5.12","bun-types":"latest",typescript:"^5.9.2"}};function b4(){return L1.version}function w4(){return L1.name}import{spawn as I5}from"child_process";import*as g0 from"crypto";import*as Q4 from"http";import{URL as V4}from"url";import{promises as D1}from"fs";import f5 from"os";import j1 from"path";class N1{tokenFilePath;constructor(){let $=f5.homedir(),b=j1.join($,".blade");this.tokenFilePath=j1.join(b,"mcp-oauth-tokens.json")}async ensureConfigDir(){let $=j1.dirname(this.tokenFilePath);try{await D1.mkdir($,{recursive:!0,mode:493})}catch{}}async loadAllCredentials(){let $=new Map;try{let b=await D1.readFile(this.tokenFilePath,"utf-8"),w=JSON.parse(b);for(let V of w)$.set(V.serverName,V)}catch(b){if(b.code!=="ENOENT")console.warn("[OAuthTokenStorage] 加载令牌失败:",b)}return $}async saveAllCredentials($){await this.ensureConfigDir();let b=Array.from($.values());await D1.writeFile(this.tokenFilePath,JSON.stringify(b,null,2),{mode:384})}async saveToken($,b,w,V){let W=await this.loadAllCredentials(),Q={serverName:$,token:b,clientId:w,tokenUrl:V,updatedAt:Date.now()};W.set($,Q),await this.saveAllCredentials(W)}async getCredentials($){return(await this.loadAllCredentials()).get($)||null}async deleteCredentials($){let b=await this.loadAllCredentials();b.delete($),await this.saveAllCredentials(b)}async listServers(){let $=await this.loadAllCredentials();return Array.from($.keys())}isTokenExpired($){if(!$.expiresAt)return!1;let b=300000;return Date.now()>=$.expiresAt-b}}var u0=7777,S1="/oauth/callback",W4=200;class Ab{tokenStorage;constructor($=new N1){this.tokenStorage=$}generatePKCEParams(){let $=g0.randomBytes(32).toString("base64url"),b=g0.createHash("sha256").update($).digest("base64url"),w=g0.randomBytes(16).toString("base64url");return{codeVerifier:$,codeChallenge:b,state:w}}buildAuthorizationUrl($,b){let w=$.redirectUri||`http://localhost:${u0}${S1}`,V=new URLSearchParams({client_id:$.clientId,response_type:"code",redirect_uri:w,state:b.state,code_challenge:b.codeChallenge,code_challenge_method:"S256"});if($.scopes&&$.scopes.length>0)V.append("scope",$.scopes.join(" "));let W=new V4($.authorizationUrl);return V.forEach((Q,Z)=>{W.searchParams.append(Z,Q)}),W.toString()}async startCallbackServer($){return new Promise((b,w)=>{let V=Q4.createServer((W,Q)=>{try{let Z=new V4(W.url,`http://localhost:${u0}`);if(Z.pathname!==S1){Q.writeHead(404),Q.end("Not found");return}let Y=Z.searchParams.get("code"),J=Z.searchParams.get("state"),X=Z.searchParams.get("error");if(X){Q.writeHead(W4,{"Content-Type":"text/html"}),Q.end(`
147
+ ${O}`,metadata:{serverName:b,toolName:w.name,mcpResult:J}}}catch(J){return{success:!1,llmContent:`MCP tool execution failed: ${J.message}`,displayContent:`❌ ${J.message}`,error:{type:"execution_error",message:J.message}}}}})}function p0($){if($.type==="object"||$.properties){let b={},w=$.required||[];if($.properties){for(let[V,W]of Object.entries($.properties))if(typeof W==="object"&&W!==null){let Q=p0(W);if(!w.includes(V))Q=Q.optional();b[V]=Q}}return H$.object(b)}if($.type==="array"&&$.items){if(typeof $.items==="object"&&!Array.isArray($.items)&&$.items!==null)return H$.array(p0($.items));return H$.array(H$.any())}if($.type==="string"){let b=H$.string();if($.minLength!==void 0)b=b.min($.minLength);if($.maxLength!==void 0)b=b.max($.maxLength);if($.pattern)b=b.regex(new RegExp($.pattern));if($.enum)return H$.enum($.enum);return b}if($.type==="number"||$.type==="integer"){let b=H$.number();if($.minimum!==void 0)b=b.min($.minimum);if($.maximum!==void 0)b=b.max($.maximum);return b}if($.type==="boolean")return H$.boolean();if($.oneOf&&$.oneOf.length>0){let b=$.oneOf.filter((w)=>typeof w==="object"&&w!==null).map((w)=>p0(w));if(b.length>=2)return H$.union(b)}if($.anyOf&&$.anyOf.length>0){let b=$.anyOf.filter((w)=>typeof w==="object"&&w!==null).map((w)=>p0(w));if(b.length>=2)return H$.union(b)}return H$.any()}import{Client as h5}from"@modelcontextprotocol/sdk/client/index.js";import{SSEClientTransport as x5}from"@modelcontextprotocol/sdk/client/sse.js";import{StdioClientTransport as p5}from"@modelcontextprotocol/sdk/client/stdio.js";import{EventEmitter as d5}from"events";var L1={name:"@blade-ai/agent-sdk",version:"0.1.5",private:!1,description:"Blade AI Agent SDK",type:"module",main:"./dist/index.js",types:"./dist/index.d.ts",exports:{".":{types:"./dist/index.d.ts",import:"./dist/index.js"}},files:["dist","vendor/ripgrep/**","README.md","CHANGELOG.md"],scripts:{build:"bun run scripts/build.ts",test:"bun test",lint:"biome lint src","lint:fix":"biome lint --write src","type-check":"bun x tsc --noEmit",release:"bun run scripts/release.js","release:dry":"bun run scripts/release.js --dry-run","release:major":"bun run scripts/release.js --major","release:minor":"bun run scripts/release.js --minor","release:patch":"bun run scripts/release.js --patch"},keywords:["sdk","blade","ai","assistant","agent","llm","bun"],author:"echoVic",license:"MIT",optionalDependencies:{"@vscode/ripgrep":"^1.17.0","bun-pty":"^0.4.8","node-pty":"1.0.0"},dependencies:{"@agentclientprotocol/sdk":"^0.12.0","@ai-sdk/anthropic":"^3.0.7","@ai-sdk/azure":"^3.0.5","@ai-sdk/deepseek":"^2.0.4","@ai-sdk/google":"^3.0.4","@ai-sdk/openai-compatible":"^2.0.4","@modelcontextprotocol/sdk":"^1.17.4",ai:"^6.0.39","async-mutex":"^0.5.0",axios:"^1.12.2",chalk:"^5.4.1",diff:"^8.0.2","fast-glob":"^3.3.3","fuse.js":"^7.1.0","gray-matter":"^4.0.3",hono:"^4.7.10","js-tiktoken":"^1.0.21","lodash-es":"^4.17.21","lru-cache":"^11.2.4",nanoid:"^5.1.6",open:"^10.1.2",openai:"^6.2.0",picomatch:"^4.0.3",semver:"^7.7.3",undici:"^7.16.0","write-file-atomic":"^7.0.0",ws:"^8.18.0",yaml:"^2.8.1",zod:"^3.24.2","zod-to-json-schema":"^3.24.6",zustand:"^5.0.9"},devDependencies:{"@biomejs/biome":"^2.2.4","@types/json-schema":"^7.0.15","@types/lodash-es":"^4.17.12","@types/picomatch":"^4.0.2","@types/semver":"^7.7.1","@types/write-file-atomic":"^4.0.3","@types/ws":"^8.5.12","bun-types":"latest",typescript:"^5.9.2"}};function b4(){return L1.version}function w4(){return L1.name}import{spawn as I5}from"child_process";import*as g0 from"crypto";import*as Q4 from"http";import{URL as V4}from"url";import{promises as D1}from"fs";import f5 from"os";import j1 from"path";class N1{tokenFilePath;constructor(){let $=f5.homedir(),b=j1.join($,".blade");this.tokenFilePath=j1.join(b,"mcp-oauth-tokens.json")}async ensureConfigDir(){let $=j1.dirname(this.tokenFilePath);try{await D1.mkdir($,{recursive:!0,mode:493})}catch{}}async loadAllCredentials(){let $=new Map;try{let b=await D1.readFile(this.tokenFilePath,"utf-8"),w=JSON.parse(b);for(let V of w)$.set(V.serverName,V)}catch(b){if(b.code!=="ENOENT")console.warn("[OAuthTokenStorage] 加载令牌失败:",b)}return $}async saveAllCredentials($){await this.ensureConfigDir();let b=Array.from($.values());await D1.writeFile(this.tokenFilePath,JSON.stringify(b,null,2),{mode:384})}async saveToken($,b,w,V){let W=await this.loadAllCredentials(),Q={serverName:$,token:b,clientId:w,tokenUrl:V,updatedAt:Date.now()};W.set($,Q),await this.saveAllCredentials(W)}async getCredentials($){return(await this.loadAllCredentials()).get($)||null}async deleteCredentials($){let b=await this.loadAllCredentials();b.delete($),await this.saveAllCredentials(b)}async listServers(){let $=await this.loadAllCredentials();return Array.from($.keys())}isTokenExpired($){if(!$.expiresAt)return!1;let b=300000;return Date.now()>=$.expiresAt-b}}var u0=7777,S1="/oauth/callback",W4=200;class Ab{tokenStorage;constructor($=new N1){this.tokenStorage=$}generatePKCEParams(){let $=g0.randomBytes(32).toString("base64url"),b=g0.createHash("sha256").update($).digest("base64url"),w=g0.randomBytes(16).toString("base64url");return{codeVerifier:$,codeChallenge:b,state:w}}buildAuthorizationUrl($,b){let w=$.redirectUri||`http://localhost:${u0}${S1}`,V=new URLSearchParams({client_id:$.clientId,response_type:"code",redirect_uri:w,state:b.state,code_challenge:b.codeChallenge,code_challenge_method:"S256"});if($.scopes&&$.scopes.length>0)V.append("scope",$.scopes.join(" "));let W=new V4($.authorizationUrl);return V.forEach((Q,Z)=>{W.searchParams.append(Z,Q)}),W.toString()}async startCallbackServer($){return new Promise((b,w)=>{let V=Q4.createServer((W,Q)=>{try{let Z=new V4(W.url,`http://localhost:${u0}`);if(Z.pathname!==S1){Q.writeHead(404),Q.end("Not found");return}let Y=Z.searchParams.get("code"),J=Z.searchParams.get("state"),X=Z.searchParams.get("error");if(X){Q.writeHead(W4,{"Content-Type":"text/html"}),Q.end(`
148
148
  <html>
149
149
  <body>
150
150
  <h1>Authentication Failed</h1>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@blade-ai/agent-sdk",
3
- "version": "0.1.4",
3
+ "version": "0.1.5",
4
4
  "private": false,
5
5
  "description": "Blade AI Agent SDK",
6
6
  "type": "module",