@blade-hq/agent-client 2610.0.0-beta.26 → 2610.0.0-beta.27

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/README.md CHANGED
@@ -82,10 +82,12 @@ new BladeClient({
82
82
  baseUrl: "https://blade.example.com", // 后端地址;同域部署可传 ""
83
83
  token: "sk-blade-xxx", // 可选:PAT。不传则用 cookie 或 login()
84
84
  tokenStorage: "local", // 可选:login() 的令牌存哪("local" 默认 / "memory")
85
- streamTokens: false, // 可选:只接收完成态内容,不订阅逐 token 增量
86
85
  })
87
86
  ```
88
87
 
88
+ SDK 会固定订阅普通聊天所需的完整实时事件。产品内置 Web 的精简/开发者展示模式不属于
89
+ 公共 SDK 契约,也没有对应的构造参数或 Socket.IO 字段。
90
+
89
91
  > **`baseUrl` 填哪个地址?** 必须是 Blade Agent 后端的地址(形如 `http://<主机>:8020`),只要域名和端口、不带路径。
90
92
  > 注意别填成你平时打开的 Blade OS 地址(同主机的 `:80`)—— 那是另一套接口,SDK 连不上。
91
93
 
@@ -23,8 +23,6 @@ export interface BladeClientOptions {
23
23
  tokenStorage?: TokenStorageMode;
24
24
  fetchImpl?: typeof fetch;
25
25
  onRefreshSuccess?: () => void | Promise<void>;
26
- /** 是否订阅逐 token 增量,默认 true。关闭后仍接收完整消息和语义事件。 */
27
- streamTokens?: boolean;
28
26
  }
29
27
  export declare class BladeClient {
30
28
  private refreshPromise;
package/dist/index.js CHANGED
@@ -352,8 +352,7 @@ var HeadlessResource = class {
352
352
  socket.on("system:error", onSystemError);
353
353
  socket.emit("session:subscribe", {
354
354
  session_id,
355
- event_format: "raw",
356
- stream_tokens: this.client.options.streamTokens !== false
355
+ event_format: "raw"
357
356
  });
358
357
  socket.emit(
359
358
  "chat:send",
@@ -1027,12 +1026,14 @@ function toolStatusFromResult(result) {
1027
1026
  var BUILTIN_CONTEXT_TITLES = {
1028
1027
  "agent-instructions": "\u9879\u76EE\u8BF4\u660E",
1029
1028
  "skill-catalog": "\u53EF\u7528\u80FD\u529B",
1030
- "runtime-context": "\u5F53\u524D\u5DE5\u4F5C\u73AF\u5883"
1029
+ "runtime-context": "\u5F53\u524D\u5DE5\u4F5C\u73AF\u5883",
1030
+ "workspace-context": "\u5F53\u524D\u5DE5\u4F5C\u533A\u73AF\u5883"
1031
1031
  };
1032
1032
  var BUILTIN_CONTEXT_DETAILS = {
1033
1033
  "agent-instructions": "\u8FD9\u4E9B\u8BF4\u660E\u4F1A\u5E2E\u52A9\u667A\u80FD\u4F53\u7406\u89E3\u5F53\u524D\u9879\u76EE\u548C\u5DE5\u4F5C\u8981\u6C42\u3002",
1034
1034
  "skill-catalog": "\u8FD9\u4E9B\u80FD\u529B\u4F1A\u5E2E\u52A9\u667A\u80FD\u4F53\u9009\u62E9\u5408\u9002\u7684\u65B9\u5F0F\u5B8C\u6210\u4EFB\u52A1\u3002",
1035
- "runtime-context": "\u8FD9\u4E9B\u4FE1\u606F\u4F1A\u5E2E\u52A9\u667A\u80FD\u4F53\u4E86\u89E3\u5F53\u524D\u6587\u4EF6\u5939\u548C\u8FD0\u884C\u6761\u4EF6\u3002"
1035
+ "runtime-context": "\u8FD9\u4E9B\u4FE1\u606F\u4F1A\u5E2E\u52A9\u667A\u80FD\u4F53\u4E86\u89E3\u5F53\u524D\u6587\u4EF6\u5939\u548C\u8FD0\u884C\u6761\u4EF6\u3002",
1036
+ "workspace-context": "\u8FD9\u4E9B\u4FE1\u606F\u4F1A\u5E2E\u52A9\u667A\u80FD\u4F53\u4E86\u89E3\u5F53\u524D\u5DE5\u4F5C\u76EE\u5F55\u3001\u6587\u4EF6\u548C\u8FD0\u884C\u73AF\u5883\u3002"
1036
1037
  };
1037
1038
  function nonEmptyString(value) {
1038
1039
  return typeof value === "string" && value.trim() ? value.trim() : null;
@@ -1060,7 +1061,7 @@ function contextProjectionData(fields) {
1060
1061
  function getContextDisplayState(context) {
1061
1062
  const title = BUILTIN_CONTEXT_TITLES[context.context_kind] ?? nonEmptyString(context.display_title) ?? "\u5BF9\u8BDD\u80CC\u666F";
1062
1063
  const isRemoved = context.context_action === "removed";
1063
- const summary = nonEmptyString(context.display_summary) ?? (isRemoved ? "\u5DF2\u505C\u6B62\u7528\u4E8E\u540E\u7EED\u5BF9\u8BDD" : context.context_action === "retained" ? "\u7EE7\u7EED\u7528\u4E8E\u540E\u7EED\u5BF9\u8BDD" : context.context_kind === "agent-instructions" ? "\u5DF2\u66F4\u65B0\u672C\u6B21\u5BF9\u8BDD\u4F7F\u7528\u7684\u9879\u76EE\u8BF4\u660E" : context.context_kind === "skill-catalog" ? "\u5DF2\u66F4\u65B0\u672C\u6B21\u53EF\u7528\u80FD\u529B" : context.context_kind === "runtime-context" ? "\u5DF2\u66F4\u65B0\u672C\u6B21\u5DE5\u4F5C\u73AF\u5883" : "\u5DF2\u66F4\u65B0\u672C\u6B21\u5BF9\u8BDD\u80CC\u666F");
1064
+ const summary = nonEmptyString(context.display_summary) ?? (isRemoved ? "\u5DF2\u505C\u6B62\u7528\u4E8E\u540E\u7EED\u5BF9\u8BDD" : context.context_action === "retained" ? "\u7EE7\u7EED\u7528\u4E8E\u540E\u7EED\u5BF9\u8BDD" : context.context_kind === "agent-instructions" ? "\u5DF2\u66F4\u65B0\u672C\u6B21\u5BF9\u8BDD\u4F7F\u7528\u7684\u9879\u76EE\u8BF4\u660E" : context.context_kind === "skill-catalog" ? "\u5DF2\u66F4\u65B0\u672C\u6B21\u53EF\u7528\u80FD\u529B" : context.context_kind === "runtime-context" ? "\u5DF2\u66F4\u65B0\u672C\u6B21\u5DE5\u4F5C\u73AF\u5883" : context.context_kind === "workspace-context" ? "\u5DF2\u66F4\u65B0\u672C\u6B21\u5DE5\u4F5C\u533A\u73AF\u5883" : "\u5DF2\u66F4\u65B0\u672C\u6B21\u5BF9\u8BDD\u80CC\u666F");
1064
1065
  const detail = isRemoved ? `${title}\u5DF2\u4E0D\u518D\u7528\u4E8E\u540E\u7EED\u5BF9\u8BDD\u3002` : BUILTIN_CONTEXT_DETAILS[context.context_kind] ?? "\u8FD9\u4E9B\u4FE1\u606F\u4F1A\u5E2E\u52A9\u667A\u80FD\u4F53\u7406\u89E3\u5F53\u524D\u4EFB\u52A1\u3002";
1065
1066
  return { title, summary, detail, isRemoved };
1066
1067
  }
@@ -1074,6 +1075,7 @@ function buildContextTurn(entry, sequence) {
1074
1075
  return null;
1075
1076
  }
1076
1077
  const display = isRecord2(entry.data.display) ? entry.data.display : {};
1078
+ const message = isRecord2(entry.message) ? entry.message : {};
1077
1079
  const context = contextProjectionData({
1078
1080
  context_kind: typeof entry.source.kind === "string" ? entry.source.kind : null,
1079
1081
  context_key: typeof entry.source.key === "string" ? entry.source.key : null,
@@ -1100,6 +1102,7 @@ function buildContextTurn(entry, sequence) {
1100
1102
  model: null,
1101
1103
  usage: null,
1102
1104
  duration_ms: 0,
1105
+ context_content: Object.hasOwn(message, "content") ? message.content : null,
1103
1106
  ...context
1104
1107
  };
1105
1108
  }
@@ -3540,7 +3543,6 @@ var AgentSession = class _AgentSession {
3540
3543
  const session = new _AgentSession(
3541
3544
  sessionId,
3542
3545
  {
3543
- streamTokens: false,
3544
3546
  emitEvent: readonlyError,
3545
3547
  emitWithAck: async () => readonlyError(),
3546
3548
  ensureConnected: readonlyError,
@@ -3695,8 +3697,7 @@ var AgentSession = class _AgentSession {
3695
3697
  thinking_override: options.thinkingOverride,
3696
3698
  whatif: options.whatif,
3697
3699
  replay_decision: options.replayDecision,
3698
- app_context: appContext,
3699
- kb_ids: options.kbIds && options.kbIds.length > 0 ? options.kbIds : void 0
3700
+ app_context: appContext
3700
3701
  };
3701
3702
  try {
3702
3703
  await this.ensureJoined();
@@ -4273,8 +4274,7 @@ var AgentSession = class _AgentSession {
4273
4274
  {
4274
4275
  session_id: this.sessionId,
4275
4276
  event_format: "raw",
4276
- resume: true,
4277
- stream_tokens: this.runtime.streamTokens
4277
+ resume: true
4278
4278
  },
4279
4279
  5e3
4280
4280
  ).then((response) => {
@@ -4411,7 +4411,6 @@ var SessionHub = class {
4411
4411
  }
4412
4412
  runtimeFor() {
4413
4413
  return {
4414
- streamTokens: this.client.options?.streamTokens !== false,
4415
4414
  emitEvent: (event, data) => {
4416
4415
  ;
4417
4416
  this.client.socket().emit(event, data);
@@ -4651,7 +4650,7 @@ function resolveAuthToken(options) {
4651
4650
 
4652
4651
  // src/version.ts
4653
4652
  var SDK_NAME = "agent-client";
4654
- var SDK_VERSION = true ? "2610.0.0-beta.26" : "1.1.1";
4653
+ var SDK_VERSION = true ? "2610.0.0-beta.27" : "1.1.1";
4655
4654
 
4656
4655
  // src/socket.ts
4657
4656
  function withSdkIdentity(auth) {