@bike4mind/cli 0.2.29-feat-cli-websocket-streaming.18879 → 0.2.29-feat-cli-websocket-streaming.18880

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.
Files changed (2) hide show
  1. package/dist/index.js +33 -24
  2. package/package.json +6 -6
package/dist/index.js CHANGED
@@ -13484,9 +13484,10 @@ var WebSocketLlmBackend = class {
13484
13484
  this.apiClient = options.apiClient;
13485
13485
  this.currentModel = options.model;
13486
13486
  this.tokenGetter = options.tokenGetter;
13487
+ this.wsCompletionUrl = options.wsCompletionUrl;
13487
13488
  }
13488
13489
  /**
13489
- * Make LLM completion request via WebSocket.
13490
+ * Send completion request via HTTP POST, receive streaming response via WebSocket.
13490
13491
  * Collects all streamed chunks, then calls callback once at completion
13491
13492
  * with the full accumulated content.
13492
13493
  */
@@ -13500,10 +13501,6 @@ var WebSocketLlmBackend = class {
13500
13501
  throw new Error("WebSocket is not connected");
13501
13502
  }
13502
13503
  const requestId = uuidv411();
13503
- const token = await this.tokenGetter();
13504
- if (!token) {
13505
- throw new Error("No access token available");
13506
- }
13507
13504
  return new Promise((resolve3, reject) => {
13508
13505
  const isVerbose = process.env.B4M_VERBOSE === "1";
13509
13506
  const isUltraVerbose = process.env.B4M_DEBUG_STREAM === "1";
@@ -13584,10 +13581,10 @@ var WebSocketLlmBackend = class {
13584
13581
  settleReject(new Error(errorMsg));
13585
13582
  }
13586
13583
  });
13587
- try {
13588
- this.wsManager.send({
13589
- action: "cli_completion_request",
13590
- accessToken: token,
13584
+ const axiosInstance = this.apiClient.getAxiosInstance();
13585
+ axiosInstance.post(
13586
+ this.wsCompletionUrl,
13587
+ {
13591
13588
  requestId,
13592
13589
  model,
13593
13590
  messages,
@@ -13597,10 +13594,12 @@ var WebSocketLlmBackend = class {
13597
13594
  stream: true,
13598
13595
  tools: options.tools || []
13599
13596
  }
13600
- });
13601
- } catch (err) {
13602
- settleReject(err instanceof Error ? err : new Error(String(err)));
13603
- }
13597
+ },
13598
+ { signal: options.abortSignal }
13599
+ ).catch((err) => {
13600
+ const msg = err instanceof Error ? err.message : String(err);
13601
+ settleReject(new Error(`HTTP request failed: ${msg}`));
13602
+ });
13604
13603
  });
13605
13604
  }
13606
13605
  /**
@@ -13757,7 +13756,13 @@ var WebSocketConnectionManager = class {
13757
13756
  if (!this.ws || this.ws.readyState !== WebSocket.OPEN) {
13758
13757
  throw new Error("WebSocket is not connected");
13759
13758
  }
13760
- this.ws.send(JSON.stringify(data));
13759
+ const payload = JSON.stringify(data);
13760
+ const sizeKB = (payload.length / 1024).toFixed(1);
13761
+ logger.debug(`[WS] Sending ${sizeKB} KB (action: ${data.action})`);
13762
+ if (payload.length > 32e3) {
13763
+ logger.warn(`[WS] Payload ${sizeKB} KB exceeds API Gateway 32 KB frame limit \u2014 connection will be closed`);
13764
+ }
13765
+ this.ws.send(payload);
13761
13766
  }
13762
13767
  /**
13763
13768
  * Register a handler for messages matching a specific requestId.
@@ -14048,7 +14053,7 @@ import { isAxiosError as isAxiosError2 } from "axios";
14048
14053
  // package.json
14049
14054
  var package_default = {
14050
14055
  name: "@bike4mind/cli",
14051
- version: "0.2.29-feat-cli-websocket-streaming.18879+058b16fd8",
14056
+ version: "0.2.29-feat-cli-websocket-streaming.18880+855c924c8",
14052
14057
  type: "module",
14053
14058
  description: "Interactive CLI tool for Bike4Mind with ReAct agents",
14054
14059
  license: "UNLICENSED",
@@ -14158,10 +14163,10 @@ var package_default = {
14158
14163
  },
14159
14164
  devDependencies: {
14160
14165
  "@bike4mind/agents": "0.1.0",
14161
- "@bike4mind/common": "2.50.1-feat-cli-websocket-streaming.18879+058b16fd8",
14162
- "@bike4mind/mcp": "1.29.1-feat-cli-websocket-streaming.18879+058b16fd8",
14163
- "@bike4mind/services": "2.48.1-feat-cli-websocket-streaming.18879+058b16fd8",
14164
- "@bike4mind/utils": "2.5.1-feat-cli-websocket-streaming.18879+058b16fd8",
14166
+ "@bike4mind/common": "2.50.1-feat-cli-websocket-streaming.18880+855c924c8",
14167
+ "@bike4mind/mcp": "1.29.1-feat-cli-websocket-streaming.18880+855c924c8",
14168
+ "@bike4mind/services": "2.48.1-feat-cli-websocket-streaming.18880+855c924c8",
14169
+ "@bike4mind/utils": "2.5.1-feat-cli-websocket-streaming.18880+855c924c8",
14165
14170
  "@types/better-sqlite3": "^7.6.13",
14166
14171
  "@types/diff": "^5.0.9",
14167
14172
  "@types/jsonwebtoken": "^9.0.4",
@@ -14178,7 +14183,7 @@ var package_default = {
14178
14183
  optionalDependencies: {
14179
14184
  "@vscode/ripgrep": "^1.17.0"
14180
14185
  },
14181
- gitHead: "058b16fd85d5311089d30e3d8ccfbe135b3e90c6"
14186
+ gitHead: "855c924c80996fa2e1ed1f16b536416809a8b87c"
14182
14187
  };
14183
14188
 
14184
14189
  // src/config/constants.ts
@@ -16113,9 +16118,12 @@ function CliApp() {
16113
16118
  let wsManager = null;
16114
16119
  let llm;
16115
16120
  try {
16116
- const serverConfig = await apiClient.get("/api/settings/serverConfig");
16121
+ const serverConfig = await apiClient.get(
16122
+ "/api/settings/serverConfig"
16123
+ );
16117
16124
  const wsUrl = serverConfig?.websocketUrl;
16118
- if (wsUrl) {
16125
+ const wsCompletionUrl = serverConfig?.wsCompletionUrl;
16126
+ if (wsUrl && wsCompletionUrl) {
16119
16127
  wsManager = new WebSocketConnectionManager(wsUrl, tokenGetter);
16120
16128
  await wsManager.connect();
16121
16129
  const wsToolExecutor2 = new WebSocketToolExecutor(wsManager, tokenGetter);
@@ -16124,11 +16132,12 @@ function CliApp() {
16124
16132
  wsManager,
16125
16133
  apiClient,
16126
16134
  model: config.defaultModel,
16127
- tokenGetter
16135
+ tokenGetter,
16136
+ wsCompletionUrl
16128
16137
  });
16129
16138
  logger.debug("\u{1F50C} Using WebSocket transport (bypasses CloudFront timeout)");
16130
16139
  } else {
16131
- throw new Error("No websocketUrl in server config");
16140
+ throw new Error("No websocketUrl or wsCompletionUrl in server config");
16132
16141
  }
16133
16142
  } catch (wsError) {
16134
16143
  logger.debug(
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bike4mind/cli",
3
- "version": "0.2.29-feat-cli-websocket-streaming.18879+058b16fd8",
3
+ "version": "0.2.29-feat-cli-websocket-streaming.18880+855c924c8",
4
4
  "type": "module",
5
5
  "description": "Interactive CLI tool for Bike4Mind with ReAct agents",
6
6
  "license": "UNLICENSED",
@@ -110,10 +110,10 @@
110
110
  },
111
111
  "devDependencies": {
112
112
  "@bike4mind/agents": "0.1.0",
113
- "@bike4mind/common": "2.50.1-feat-cli-websocket-streaming.18879+058b16fd8",
114
- "@bike4mind/mcp": "1.29.1-feat-cli-websocket-streaming.18879+058b16fd8",
115
- "@bike4mind/services": "2.48.1-feat-cli-websocket-streaming.18879+058b16fd8",
116
- "@bike4mind/utils": "2.5.1-feat-cli-websocket-streaming.18879+058b16fd8",
113
+ "@bike4mind/common": "2.50.1-feat-cli-websocket-streaming.18880+855c924c8",
114
+ "@bike4mind/mcp": "1.29.1-feat-cli-websocket-streaming.18880+855c924c8",
115
+ "@bike4mind/services": "2.48.1-feat-cli-websocket-streaming.18880+855c924c8",
116
+ "@bike4mind/utils": "2.5.1-feat-cli-websocket-streaming.18880+855c924c8",
117
117
  "@types/better-sqlite3": "^7.6.13",
118
118
  "@types/diff": "^5.0.9",
119
119
  "@types/jsonwebtoken": "^9.0.4",
@@ -130,5 +130,5 @@
130
130
  "optionalDependencies": {
131
131
  "@vscode/ripgrep": "^1.17.0"
132
132
  },
133
- "gitHead": "058b16fd85d5311089d30e3d8ccfbe135b3e90c6"
133
+ "gitHead": "855c924c80996fa2e1ed1f16b536416809a8b87c"
134
134
  }