byollm 0.1.0-alpha.95 → 0.1.0-alpha.97

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
@@ -1,5 +1,5 @@
1
1
  > [!WARNING]
2
- > **Alpha (`0.1.0-alpha.95`) — under active development. Don't use this yet.**
2
+ > **Alpha (`0.1.0-alpha.97`) — under active development. Don't use this yet.**
3
3
  >
4
4
  > Install it deliberately: `npx byollm@latest`, or `npm install byollm@latest`.
5
5
  >
package/dist/bin.js CHANGED
@@ -1,7 +1,7 @@
1
1
  #!/usr/bin/env node
2
2
  import {
3
3
  main
4
- } from "./chunk-AK7GZTGR.js";
4
+ } from "./chunk-R3WK5X6Q.js";
5
5
 
6
6
  // src/bin.ts
7
7
  process.exitCode = await main(process.argv.slice(2));
@@ -5118,6 +5118,34 @@ var deviceHeaders = (keys, runnerId, now) => {
5118
5118
  "x-byollm-signature": signed.signature
5119
5119
  };
5120
5120
  };
5121
+ var dialControlSocket = (url, headers) => new Promise((resolve, reject) => {
5122
+ const socket = new WebSocket(url, { headers });
5123
+ socket.addEventListener("open", () => {
5124
+ resolve({
5125
+ send: (text) => {
5126
+ socket.send(text);
5127
+ },
5128
+ onMessage: (handler) => {
5129
+ socket.addEventListener("message", (event) => {
5130
+ handler(String(event.data));
5131
+ });
5132
+ },
5133
+ onClose: (handler) => {
5134
+ socket.addEventListener("close", (event) => {
5135
+ handler(
5136
+ `${String(event.code)}${event.reason === "" ? "" : ` ${event.reason}`}`
5137
+ );
5138
+ });
5139
+ },
5140
+ close: () => {
5141
+ socket.close();
5142
+ }
5143
+ });
5144
+ });
5145
+ socket.addEventListener("error", () => {
5146
+ reject(new Error(`could not reach the console broker at ${url}`));
5147
+ });
5148
+ });
5121
5149
  function consoleListener(deps) {
5122
5150
  const now = deps.now ?? Date.now;
5123
5151
  let stopped = false;
@@ -5156,26 +5184,50 @@ function consoleListener(deps) {
5156
5184
  running = false;
5157
5185
  });
5158
5186
  };
5187
+ const alive = (deps.keepalive ?? defaultKeepalive)();
5188
+ let backoffMs = 1e3;
5189
+ const wait = deps.wait ?? ((ms) => new Promise((r) => setTimeout(r, ms)));
5190
+ const redial = (why, detail) => {
5191
+ if (stopped) return;
5192
+ const delay = backoffMs;
5193
+ backoffMs = Math.min(backoffMs * 2, 3e4);
5194
+ deps.log("the console control socket is gone \u2014 reconnecting", {
5195
+ why,
5196
+ ...detail === void 0 ? {} : { detail },
5197
+ inMs: delay
5198
+ });
5199
+ wait(delay).then(() => {
5200
+ if (stopped) return void 0;
5201
+ return dial();
5202
+ }).catch((cause) => {
5203
+ deps.log("the reconnect itself failed", {
5204
+ reason: cause instanceof Error ? cause.message : String(cause)
5205
+ });
5206
+ });
5207
+ };
5159
5208
  const dial = async () => {
5160
- if (deps.connect === void 0) return;
5209
+ const connect2 = deps.connect ?? dialControlSocket;
5161
5210
  try {
5162
- socket = await deps.connect(
5211
+ socket = await connect2(
5163
5212
  deps.url,
5164
5213
  deviceHeaders(deps.keys, deps.runnerId, now())
5165
5214
  );
5166
5215
  } catch (cause) {
5167
- deps.log("could not reach the console broker", {
5168
- reason: cause instanceof Error ? cause.message : String(cause)
5169
- });
5216
+ redial(
5217
+ "the broker refused or could not be reached",
5218
+ cause instanceof Error ? cause.message : String(cause)
5219
+ );
5170
5220
  return;
5171
5221
  }
5172
5222
  if (stopped) {
5173
5223
  socket.close();
5174
5224
  return;
5175
5225
  }
5226
+ backoffMs = 1e3;
5227
+ deps.log("holding the console control socket");
5176
5228
  socket.onMessage(handle);
5177
5229
  socket.onClose((reason) => {
5178
- deps.log("the console broker closed the control socket", { reason });
5230
+ redial("the broker closed it", reason);
5179
5231
  });
5180
5232
  };
5181
5233
  dial().catch(() => {
@@ -5186,10 +5238,19 @@ function consoleListener(deps) {
5186
5238
  },
5187
5239
  stop() {
5188
5240
  stopped = true;
5241
+ alive.stop();
5189
5242
  socket?.close();
5190
5243
  }
5191
5244
  };
5192
5245
  }
5246
+ function defaultKeepalive() {
5247
+ const handle = setInterval(() => void 0, 6e4);
5248
+ return {
5249
+ stop() {
5250
+ clearInterval(handle);
5251
+ }
5252
+ };
5253
+ }
5193
5254
  function ConsoleAnnouncement(value) {
5194
5255
  const parsed = ConsoleAgentSpec.pick({
5195
5256
  sessionId: true,
@@ -10442,7 +10503,7 @@ async function exists(path) {
10442
10503
  }
10443
10504
 
10444
10505
  // src/index.ts
10445
- var DAEMON_VERSION = "0.1.0-alpha.95";
10506
+ var DAEMON_VERSION = "0.1.0-alpha.97";
10446
10507
  function daemonVersion() {
10447
10508
  return {
10448
10509
  daemon: DAEMON_VERSION,
@@ -10501,4 +10562,4 @@ export {
10501
10562
  runCli,
10502
10563
  main
10503
10564
  };
10504
- //# sourceMappingURL=chunk-AK7GZTGR.js.map
10565
+ //# sourceMappingURL=chunk-R3WK5X6Q.js.map