@factiii/runner 0.2.0 → 0.2.1

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/cli.js +110 -44
  2. package/package.json +3 -3
package/dist/cli.js CHANGED
@@ -30,9 +30,9 @@ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__ge
30
30
  mod
31
31
  ));
32
32
 
33
- // ../../node_modules/commander/lib/error.js
33
+ // node_modules/commander/lib/error.js
34
34
  var require_error = __commonJS({
35
- "../../node_modules/commander/lib/error.js"(exports2) {
35
+ "node_modules/commander/lib/error.js"(exports2) {
36
36
  var CommanderError2 = class extends Error {
37
37
  /**
38
38
  * Constructs the CommanderError class
@@ -65,9 +65,9 @@ var require_error = __commonJS({
65
65
  }
66
66
  });
67
67
 
68
- // ../../node_modules/commander/lib/argument.js
68
+ // node_modules/commander/lib/argument.js
69
69
  var require_argument = __commonJS({
70
- "../../node_modules/commander/lib/argument.js"(exports2) {
70
+ "node_modules/commander/lib/argument.js"(exports2) {
71
71
  var { InvalidArgumentError: InvalidArgumentError2 } = require_error();
72
72
  var Argument2 = class {
73
73
  /**
@@ -192,9 +192,9 @@ var require_argument = __commonJS({
192
192
  }
193
193
  });
194
194
 
195
- // ../../node_modules/commander/lib/help.js
195
+ // node_modules/commander/lib/help.js
196
196
  var require_help = __commonJS({
197
- "../../node_modules/commander/lib/help.js"(exports2) {
197
+ "node_modules/commander/lib/help.js"(exports2) {
198
198
  var { humanReadableArgName } = require_argument();
199
199
  var Help2 = class {
200
200
  constructor() {
@@ -606,9 +606,9 @@ var require_help = __commonJS({
606
606
  }
607
607
  });
608
608
 
609
- // ../../node_modules/commander/lib/option.js
609
+ // node_modules/commander/lib/option.js
610
610
  var require_option = __commonJS({
611
- "../../node_modules/commander/lib/option.js"(exports2) {
611
+ "node_modules/commander/lib/option.js"(exports2) {
612
612
  var { InvalidArgumentError: InvalidArgumentError2 } = require_error();
613
613
  var Option2 = class {
614
614
  /**
@@ -878,9 +878,9 @@ var require_option = __commonJS({
878
878
  }
879
879
  });
880
880
 
881
- // ../../node_modules/commander/lib/suggestSimilar.js
881
+ // node_modules/commander/lib/suggestSimilar.js
882
882
  var require_suggestSimilar = __commonJS({
883
- "../../node_modules/commander/lib/suggestSimilar.js"(exports2) {
883
+ "node_modules/commander/lib/suggestSimilar.js"(exports2) {
884
884
  var maxDistance = 3;
885
885
  function editDistance(a, b) {
886
886
  if (Math.abs(a.length - b.length) > maxDistance)
@@ -958,9 +958,9 @@ var require_suggestSimilar = __commonJS({
958
958
  }
959
959
  });
960
960
 
961
- // ../../node_modules/commander/lib/command.js
961
+ // node_modules/commander/lib/command.js
962
962
  var require_command = __commonJS({
963
- "../../node_modules/commander/lib/command.js"(exports2) {
963
+ "node_modules/commander/lib/command.js"(exports2) {
964
964
  var EventEmitter = require("node:events").EventEmitter;
965
965
  var childProcess = require("node:child_process");
966
966
  var path7 = require("node:path");
@@ -3001,9 +3001,9 @@ Expecting one of '${allowedValues.join("', '")}'`);
3001
3001
  }
3002
3002
  });
3003
3003
 
3004
- // ../../node_modules/commander/index.js
3004
+ // node_modules/commander/index.js
3005
3005
  var require_commander = __commonJS({
3006
- "../../node_modules/commander/index.js"(exports2) {
3006
+ "node_modules/commander/index.js"(exports2) {
3007
3007
  var { Argument: Argument2 } = require_argument();
3008
3008
  var { Command: Command2 } = require_command();
3009
3009
  var { CommanderError: CommanderError2, InvalidArgumentError: InvalidArgumentError2 } = require_error();
@@ -4260,9 +4260,9 @@ var require_src = __commonJS({
4260
4260
  }
4261
4261
  });
4262
4262
 
4263
- // ../../node_modules/engine.io-client/node_modules/ws/lib/constants.js
4263
+ // ../../node_modules/ws/lib/constants.js
4264
4264
  var require_constants = __commonJS({
4265
- "../../node_modules/engine.io-client/node_modules/ws/lib/constants.js"(exports2, module2) {
4265
+ "../../node_modules/ws/lib/constants.js"(exports2, module2) {
4266
4266
  "use strict";
4267
4267
  var BINARY_TYPES = ["nodebuffer", "arraybuffer", "fragments"];
4268
4268
  var hasBlob = typeof Blob !== "undefined";
@@ -4283,9 +4283,9 @@ var require_constants = __commonJS({
4283
4283
  }
4284
4284
  });
4285
4285
 
4286
- // ../../node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js
4286
+ // ../../node_modules/ws/lib/buffer-util.js
4287
4287
  var require_buffer_util = __commonJS({
4288
- "../../node_modules/engine.io-client/node_modules/ws/lib/buffer-util.js"(exports2, module2) {
4288
+ "../../node_modules/ws/lib/buffer-util.js"(exports2, module2) {
4289
4289
  "use strict";
4290
4290
  var { EMPTY_BUFFER } = require_constants();
4291
4291
  var FastBuffer = Buffer[Symbol.species];
@@ -4358,9 +4358,9 @@ var require_buffer_util = __commonJS({
4358
4358
  }
4359
4359
  });
4360
4360
 
4361
- // ../../node_modules/engine.io-client/node_modules/ws/lib/limiter.js
4361
+ // ../../node_modules/ws/lib/limiter.js
4362
4362
  var require_limiter = __commonJS({
4363
- "../../node_modules/engine.io-client/node_modules/ws/lib/limiter.js"(exports2, module2) {
4363
+ "../../node_modules/ws/lib/limiter.js"(exports2, module2) {
4364
4364
  "use strict";
4365
4365
  var kDone = Symbol("kDone");
4366
4366
  var kRun = Symbol("kRun");
@@ -4408,9 +4408,9 @@ var require_limiter = __commonJS({
4408
4408
  }
4409
4409
  });
4410
4410
 
4411
- // ../../node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js
4411
+ // ../../node_modules/ws/lib/permessage-deflate.js
4412
4412
  var require_permessage_deflate = __commonJS({
4413
- "../../node_modules/engine.io-client/node_modules/ws/lib/permessage-deflate.js"(exports2, module2) {
4413
+ "../../node_modules/ws/lib/permessage-deflate.js"(exports2, module2) {
4414
4414
  "use strict";
4415
4415
  var zlib = require("zlib");
4416
4416
  var bufferUtil = require_buffer_util();
@@ -4791,9 +4791,9 @@ var require_permessage_deflate = __commonJS({
4791
4791
  }
4792
4792
  });
4793
4793
 
4794
- // ../../node_modules/engine.io-client/node_modules/ws/lib/validation.js
4794
+ // ../../node_modules/ws/lib/validation.js
4795
4795
  var require_validation = __commonJS({
4796
- "../../node_modules/engine.io-client/node_modules/ws/lib/validation.js"(exports2, module2) {
4796
+ "../../node_modules/ws/lib/validation.js"(exports2, module2) {
4797
4797
  "use strict";
4798
4798
  var { isUtf8 } = require("buffer");
4799
4799
  var { hasBlob } = require_constants();
@@ -4992,9 +4992,9 @@ var require_validation = __commonJS({
4992
4992
  }
4993
4993
  });
4994
4994
 
4995
- // ../../node_modules/engine.io-client/node_modules/ws/lib/receiver.js
4995
+ // ../../node_modules/ws/lib/receiver.js
4996
4996
  var require_receiver = __commonJS({
4997
- "../../node_modules/engine.io-client/node_modules/ws/lib/receiver.js"(exports2, module2) {
4997
+ "../../node_modules/ws/lib/receiver.js"(exports2, module2) {
4998
4998
  "use strict";
4999
4999
  var { Writable } = require("stream");
5000
5000
  var PerMessageDeflate2 = require_permessage_deflate();
@@ -5027,6 +5027,10 @@ var require_receiver = __commonJS({
5027
5027
  * extensions
5028
5028
  * @param {Boolean} [options.isServer=false] Specifies whether to operate in
5029
5029
  * client or server mode
5030
+ * @param {Number} [options.maxBufferedChunks=0] The maximum number of
5031
+ * buffered data chunks
5032
+ * @param {Number} [options.maxFragments=0] The maximum number of message
5033
+ * fragments
5030
5034
  * @param {Number} [options.maxPayload=0] The maximum allowed message length
5031
5035
  * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or
5032
5036
  * not to skip UTF-8 validation for text and close messages
@@ -5037,6 +5041,8 @@ var require_receiver = __commonJS({
5037
5041
  this._binaryType = options.binaryType || BINARY_TYPES[0];
5038
5042
  this._extensions = options.extensions || {};
5039
5043
  this._isServer = !!options.isServer;
5044
+ this._maxBufferedChunks = options.maxBufferedChunks | 0;
5045
+ this._maxFragments = options.maxFragments | 0;
5040
5046
  this._maxPayload = options.maxPayload | 0;
5041
5047
  this._skipUTF8Validation = !!options.skipUTF8Validation;
5042
5048
  this[kWebSocket] = void 0;
@@ -5066,6 +5072,18 @@ var require_receiver = __commonJS({
5066
5072
  */
5067
5073
  _write(chunk, encoding, cb) {
5068
5074
  if (this._opcode === 8 && this._state == GET_INFO) return cb();
5075
+ if (this._maxBufferedChunks > 0 && this._buffers.length >= this._maxBufferedChunks) {
5076
+ cb(
5077
+ this.createError(
5078
+ RangeError,
5079
+ "Too many buffered chunks",
5080
+ false,
5081
+ 1008,
5082
+ "WS_ERR_TOO_MANY_BUFFERED_PARTS"
5083
+ )
5084
+ );
5085
+ return;
5086
+ }
5069
5087
  this._bufferedBytes += chunk.length;
5070
5088
  this._buffers.push(chunk);
5071
5089
  this.startLoop(cb);
@@ -5395,6 +5413,17 @@ var require_receiver = __commonJS({
5395
5413
  return;
5396
5414
  }
5397
5415
  if (data.length) {
5416
+ if (this._maxFragments > 0 && this._fragments.length >= this._maxFragments) {
5417
+ const error = this.createError(
5418
+ RangeError,
5419
+ "Too many message fragments",
5420
+ false,
5421
+ 1008,
5422
+ "WS_ERR_TOO_MANY_BUFFERED_PARTS"
5423
+ );
5424
+ cb(error);
5425
+ return;
5426
+ }
5398
5427
  this._messageLength = this._totalPayloadLength;
5399
5428
  this._fragments.push(data);
5400
5429
  }
@@ -5424,6 +5453,17 @@ var require_receiver = __commonJS({
5424
5453
  cb(error);
5425
5454
  return;
5426
5455
  }
5456
+ if (this._maxFragments > 0 && this._fragments.length >= this._maxFragments) {
5457
+ const error = this.createError(
5458
+ RangeError,
5459
+ "Too many message fragments",
5460
+ false,
5461
+ 1008,
5462
+ "WS_ERR_TOO_MANY_BUFFERED_PARTS"
5463
+ );
5464
+ cb(error);
5465
+ return;
5466
+ }
5427
5467
  this._fragments.push(buf);
5428
5468
  }
5429
5469
  this.dataMessage(cb);
@@ -5584,9 +5624,9 @@ var require_receiver = __commonJS({
5584
5624
  }
5585
5625
  });
5586
5626
 
5587
- // ../../node_modules/engine.io-client/node_modules/ws/lib/sender.js
5627
+ // ../../node_modules/ws/lib/sender.js
5588
5628
  var require_sender = __commonJS({
5589
- "../../node_modules/engine.io-client/node_modules/ws/lib/sender.js"(exports2, module2) {
5629
+ "../../node_modules/ws/lib/sender.js"(exports2, module2) {
5590
5630
  "use strict";
5591
5631
  var { Duplex } = require("stream");
5592
5632
  var { randomFillSync } = require("crypto");
@@ -6077,9 +6117,9 @@ var require_sender = __commonJS({
6077
6117
  }
6078
6118
  });
6079
6119
 
6080
- // ../../node_modules/engine.io-client/node_modules/ws/lib/event-target.js
6120
+ // ../../node_modules/ws/lib/event-target.js
6081
6121
  var require_event_target = __commonJS({
6082
- "../../node_modules/engine.io-client/node_modules/ws/lib/event-target.js"(exports2, module2) {
6122
+ "../../node_modules/ws/lib/event-target.js"(exports2, module2) {
6083
6123
  "use strict";
6084
6124
  var { kForOnEventAttribute, kListener } = require_constants();
6085
6125
  var kCode = Symbol("kCode");
@@ -6306,9 +6346,9 @@ var require_event_target = __commonJS({
6306
6346
  }
6307
6347
  });
6308
6348
 
6309
- // ../../node_modules/engine.io-client/node_modules/ws/lib/extension.js
6349
+ // ../../node_modules/ws/lib/extension.js
6310
6350
  var require_extension = __commonJS({
6311
- "../../node_modules/engine.io-client/node_modules/ws/lib/extension.js"(exports2, module2) {
6351
+ "../../node_modules/ws/lib/extension.js"(exports2, module2) {
6312
6352
  "use strict";
6313
6353
  var { tokenChars } = require_validation();
6314
6354
  function push(dest, name, elem) {
@@ -6459,9 +6499,9 @@ var require_extension = __commonJS({
6459
6499
  }
6460
6500
  });
6461
6501
 
6462
- // ../../node_modules/engine.io-client/node_modules/ws/lib/websocket.js
6502
+ // ../../node_modules/ws/lib/websocket.js
6463
6503
  var require_websocket = __commonJS({
6464
- "../../node_modules/engine.io-client/node_modules/ws/lib/websocket.js"(exports2, module2) {
6504
+ "../../node_modules/ws/lib/websocket.js"(exports2, module2) {
6465
6505
  "use strict";
6466
6506
  var EventEmitter = require("events");
6467
6507
  var https = require("https");
@@ -6630,6 +6670,10 @@ var require_websocket = __commonJS({
6630
6670
  * multiple times in the same tick
6631
6671
  * @param {Function} [options.generateMask] The function used to generate the
6632
6672
  * masking key
6673
+ * @param {Number} [options.maxBufferedChunks=0] The maximum number of
6674
+ * buffered data chunks
6675
+ * @param {Number} [options.maxFragments=0] The maximum number of message
6676
+ * fragments
6633
6677
  * @param {Number} [options.maxPayload=0] The maximum allowed message size
6634
6678
  * @param {Boolean} [options.skipUTF8Validation=false] Specifies whether or
6635
6679
  * not to skip UTF-8 validation for text and close messages
@@ -6641,6 +6685,8 @@ var require_websocket = __commonJS({
6641
6685
  binaryType: this.binaryType,
6642
6686
  extensions: this._extensions,
6643
6687
  isServer: this._isServer,
6688
+ maxBufferedChunks: options.maxBufferedChunks,
6689
+ maxFragments: options.maxFragments,
6644
6690
  maxPayload: options.maxPayload,
6645
6691
  skipUTF8Validation: options.skipUTF8Validation
6646
6692
  });
@@ -6940,6 +6986,8 @@ var require_websocket = __commonJS({
6940
6986
  autoPong: true,
6941
6987
  closeTimeout: CLOSE_TIMEOUT,
6942
6988
  protocolVersion: protocolVersions[1],
6989
+ maxBufferedChunks: 1024 * 1024,
6990
+ maxFragments: 128 * 1024,
6943
6991
  maxPayload: 100 * 1024 * 1024,
6944
6992
  skipUTF8Validation: false,
6945
6993
  perMessageDeflate: true,
@@ -7182,6 +7230,8 @@ var require_websocket = __commonJS({
7182
7230
  websocket.setSocket(socket, head, {
7183
7231
  allowSynchronousEvents: opts.allowSynchronousEvents,
7184
7232
  generateMask: opts.generateMask,
7233
+ maxBufferedChunks: opts.maxBufferedChunks,
7234
+ maxFragments: opts.maxFragments,
7185
7235
  maxPayload: opts.maxPayload,
7186
7236
  skipUTF8Validation: opts.skipUTF8Validation
7187
7237
  });
@@ -7345,9 +7395,9 @@ var require_websocket = __commonJS({
7345
7395
  }
7346
7396
  });
7347
7397
 
7348
- // ../../node_modules/engine.io-client/node_modules/ws/lib/stream.js
7398
+ // ../../node_modules/ws/lib/stream.js
7349
7399
  var require_stream = __commonJS({
7350
- "../../node_modules/engine.io-client/node_modules/ws/lib/stream.js"(exports2, module2) {
7400
+ "../../node_modules/ws/lib/stream.js"(exports2, module2) {
7351
7401
  "use strict";
7352
7402
  var WebSocket2 = require_websocket();
7353
7403
  var { Duplex } = require("stream");
@@ -7443,9 +7493,9 @@ var require_stream = __commonJS({
7443
7493
  }
7444
7494
  });
7445
7495
 
7446
- // ../../node_modules/engine.io-client/node_modules/ws/lib/subprotocol.js
7496
+ // ../../node_modules/ws/lib/subprotocol.js
7447
7497
  var require_subprotocol = __commonJS({
7448
- "../../node_modules/engine.io-client/node_modules/ws/lib/subprotocol.js"(exports2, module2) {
7498
+ "../../node_modules/ws/lib/subprotocol.js"(exports2, module2) {
7449
7499
  "use strict";
7450
7500
  var { tokenChars } = require_validation();
7451
7501
  function parse3(header) {
@@ -7488,9 +7538,9 @@ var require_subprotocol = __commonJS({
7488
7538
  }
7489
7539
  });
7490
7540
 
7491
- // ../../node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js
7541
+ // ../../node_modules/ws/lib/websocket-server.js
7492
7542
  var require_websocket_server = __commonJS({
7493
- "../../node_modules/engine.io-client/node_modules/ws/lib/websocket-server.js"(exports2, module2) {
7543
+ "../../node_modules/ws/lib/websocket-server.js"(exports2, module2) {
7494
7544
  "use strict";
7495
7545
  var EventEmitter = require("events");
7496
7546
  var http = require("http");
@@ -7524,6 +7574,10 @@ var require_websocket_server = __commonJS({
7524
7574
  * called
7525
7575
  * @param {Function} [options.handleProtocols] A hook to handle protocols
7526
7576
  * @param {String} [options.host] The hostname where to bind the server
7577
+ * @param {Number} [options.maxBufferedChunks=1048576] The maximum number of
7578
+ * buffered data chunks
7579
+ * @param {Number} [options.maxFragments=131072] The maximum number of message
7580
+ * fragments
7527
7581
  * @param {Number} [options.maxPayload=104857600] The maximum allowed message
7528
7582
  * size
7529
7583
  * @param {Boolean} [options.noServer=false] Enable no server mode
@@ -7545,6 +7599,8 @@ var require_websocket_server = __commonJS({
7545
7599
  options = {
7546
7600
  allowSynchronousEvents: true,
7547
7601
  autoPong: true,
7602
+ maxBufferedChunks: 1024 * 1024,
7603
+ maxFragments: 128 * 1024,
7548
7604
  maxPayload: 100 * 1024 * 1024,
7549
7605
  skipUTF8Validation: false,
7550
7606
  perMessageDeflate: false,
@@ -7824,6 +7880,8 @@ var require_websocket_server = __commonJS({
7824
7880
  socket.removeListener("error", socketOnError);
7825
7881
  ws.setSocket(socket, head, {
7826
7882
  allowSynchronousEvents: this.options.allowSynchronousEvents,
7883
+ maxBufferedChunks: this.options.maxBufferedChunks,
7884
+ maxFragments: this.options.maxFragments,
7827
7885
  maxPayload: this.options.maxPayload,
7828
7886
  skipUTF8Validation: this.options.skipUTF8Validation
7829
7887
  });
@@ -7884,7 +7942,7 @@ var require_websocket_server = __commonJS({
7884
7942
  // src/cli.ts
7885
7943
  var import_node_dns = __toESM(require("node:dns"));
7886
7944
 
7887
- // ../../node_modules/commander/esm.mjs
7945
+ // node_modules/commander/esm.mjs
7888
7946
  var import_index = __toESM(require_commander(), 1);
7889
7947
  var {
7890
7948
  program,
@@ -8210,6 +8268,12 @@ function pipeClaudeStream(proc, callbacks) {
8210
8268
  for (const line of lines) {
8211
8269
  const trimmed = line.trim();
8212
8270
  if (!trimmed) continue;
8271
+ if (trimmed[0] !== "{" && trimmed[0] !== "[") {
8272
+ state.isError = true;
8273
+ state.fullText = state.fullText ? `${state.fullText}
8274
+ ${trimmed}` : trimmed;
8275
+ continue;
8276
+ }
8213
8277
  try {
8214
8278
  const raw = JSON.parse(trimmed);
8215
8279
  if (processStreamEvent(raw, state, callbacks)) continue;
@@ -9766,6 +9830,7 @@ var ClaudeModeEngine = class _ClaudeModeEngine {
9766
9830
  );
9767
9831
  }
9768
9832
  const containerName = this.core.containerName;
9833
+ await execInContainer(containerName, "mkdir -p /home/claude/workspace");
9769
9834
  this.board.messages.push({ role: "user", content: params.question });
9770
9835
  let prompt2;
9771
9836
  if (this.board.sessionId) {
@@ -12229,7 +12294,7 @@ var XHR = class extends BaseXHR {
12229
12294
  }
12230
12295
  };
12231
12296
 
12232
- // ../../node_modules/engine.io-client/node_modules/ws/wrapper.mjs
12297
+ // ../../node_modules/ws/wrapper.mjs
12233
12298
  var import_stream = __toESM(require_stream(), 1);
12234
12299
  var import_extension = __toESM(require_extension(), 1);
12235
12300
  var import_permessage_deflate = __toESM(require_permessage_deflate(), 1);
@@ -13085,11 +13150,12 @@ var SocketWithUpgrade = class extends SocketWithoutUpgrade {
13085
13150
  };
13086
13151
  var Socket = class extends SocketWithUpgrade {
13087
13152
  constructor(uri, opts = {}) {
13088
- const o = typeof uri === "object" ? uri : opts;
13153
+ const isOptionsOnly = typeof uri === "object";
13154
+ const o = isOptionsOnly ? { ...uri } : { ...opts };
13089
13155
  if (!o.transports || o.transports && typeof o.transports[0] === "string") {
13090
13156
  o.transports = (o.transports || ["polling", "websocket", "webtransport"]).map((transportName) => transports[transportName]).filter((t) => !!t);
13091
13157
  }
13092
- super(uri, o);
13158
+ super(isOptionsOnly ? o : uri, o);
13093
13159
  }
13094
13160
  };
13095
13161
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@factiii/runner",
3
- "version": "0.2.0",
3
+ "version": "0.2.1",
4
4
  "description": "Factiii Runner, run Board AI agents on a machine you control. Pairs with the Factiii web/mobile clients over WebRTC.",
5
5
  "license": "ISC",
6
6
  "keywords": [
@@ -38,7 +38,7 @@
38
38
  "prepublishOnly": "node build.mjs && bash scripts/fetch-frpc.sh"
39
39
  },
40
40
  "dependencies": {
41
- "dockerode": "^4.0.2",
41
+ "dockerode": "^5.0.0",
42
42
  "node-datachannel": "^0.12.0"
43
43
  },
44
44
  "devDependencies": {
@@ -48,7 +48,7 @@
48
48
  "commander": "^12.1.0",
49
49
  "esbuild": "*",
50
50
  "socket.io-client": "^4.8.1",
51
- "tsx": "^4.0.0",
51
+ "tsx": "^4.22.4",
52
52
  "typescript": "catalog:"
53
53
  }
54
54
  }