@schoolai/shipyard 3.26.0-rc.20260821.0 → 3.26.0

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 (26) hide show
  1. package/dist/capability-detector-worker.js +4 -4
  2. package/dist/{chunk-PZ5HELSE.js → chunk-ASN6META.js} +2 -2
  3. package/dist/{chunk-YANUTYUV.js → chunk-KAA6A3YV.js} +2 -2
  4. package/dist/{chunk-3PS6R44Z.js → chunk-LLRLVCL4.js} +4 -4
  5. package/dist/{chunk-WOF2CNLX.js → chunk-OPMLQQWV.js} +49 -19
  6. package/dist/chunk-OPMLQQWV.js.map +1 -0
  7. package/dist/{chunk-OW66JVRI.js → chunk-UUE4MBYJ.js} +2 -2
  8. package/dist/{chunk-6Y627GV2.js → chunk-WUGADZYC.js} +2 -2
  9. package/dist/cursor-runner.js +3 -3
  10. package/dist/electron-utility.js +1 -1
  11. package/dist/index.js +4 -4
  12. package/dist/{login-G6KSXZYX.js → login-HS7TO3GQ.js} +3 -3
  13. package/dist/{plan-backfill-SIEOKGBX.js → plan-backfill-OM7ZKGCR.js} +4 -4
  14. package/dist/{serve-FAK2T3TT.js → serve-32BIUHWA.js} +39 -7
  15. package/dist/{serve-FAK2T3TT.js.map → serve-32BIUHWA.js.map} +1 -1
  16. package/dist/{start-WIWKZY7L.js → start-NAUZF4JP.js} +4 -4
  17. package/package.json +1 -1
  18. package/dist/chunk-WOF2CNLX.js.map +0 -1
  19. /package/dist/{chunk-PZ5HELSE.js.map → chunk-ASN6META.js.map} +0 -0
  20. /package/dist/{chunk-YANUTYUV.js.map → chunk-KAA6A3YV.js.map} +0 -0
  21. /package/dist/{chunk-3PS6R44Z.js.map → chunk-LLRLVCL4.js.map} +0 -0
  22. /package/dist/{chunk-OW66JVRI.js.map → chunk-UUE4MBYJ.js.map} +0 -0
  23. /package/dist/{chunk-6Y627GV2.js.map → chunk-WUGADZYC.js.map} +0 -0
  24. /package/dist/{login-G6KSXZYX.js.map → login-HS7TO3GQ.js.map} +0 -0
  25. /package/dist/{plan-backfill-SIEOKGBX.js.map → plan-backfill-OM7ZKGCR.js.map} +0 -0
  26. /package/dist/{start-WIWKZY7L.js.map → start-NAUZF4JP.js.map} +0 -0
@@ -3,7 +3,7 @@ import {
3
3
  detectCapabilities,
4
4
  refreshMcpServers,
5
5
  registerBuiltInProfiles
6
- } from "./chunk-3PS6R44Z.js";
6
+ } from "./chunk-LLRLVCL4.js";
7
7
  import "./chunk-VSRWL5SP.js";
8
8
  import {
9
9
  getRepoMetadata
@@ -15,9 +15,9 @@ import {
15
15
  import "./chunk-RR6V6SNM.js";
16
16
  import "./chunk-ROEOOZOW.js";
17
17
  import "./chunk-ZFKJAYAN.js";
18
- import "./chunk-YANUTYUV.js";
19
- import "./chunk-OW66JVRI.js";
20
- import "./chunk-WOF2CNLX.js";
18
+ import "./chunk-KAA6A3YV.js";
19
+ import "./chunk-UUE4MBYJ.js";
20
+ import "./chunk-OPMLQQWV.js";
21
21
  import "./chunk-EHQITHQX.js";
22
22
  import "./chunk-X3MULCV5.js";
23
23
  import {
@@ -15,7 +15,7 @@ import {
15
15
  DevicePollResponseSchema,
16
16
  DeviceStartResponseSchema,
17
17
  ROUTES
18
- } from "./chunk-WOF2CNLX.js";
18
+ } from "./chunk-OPMLQQWV.js";
19
19
  import {
20
20
  isDevMode,
21
21
  validateEnv
@@ -223,4 +223,4 @@ export {
223
223
  ensureAuthenticated,
224
224
  loginCommand
225
225
  };
226
- //# sourceMappingURL=chunk-PZ5HELSE.js.map
226
+ //# sourceMappingURL=chunk-ASN6META.js.map
@@ -2,7 +2,7 @@
2
2
  import {
3
3
  isImageMimeType,
4
4
  parseAssetUri
5
- } from "./chunk-OW66JVRI.js";
5
+ } from "./chunk-UUE4MBYJ.js";
6
6
  import {
7
7
  assertNever
8
8
  } from "./chunk-X3MULCV5.js";
@@ -588,4 +588,4 @@ export {
588
588
  toRecord,
589
589
  buildCursorUserPrompt
590
590
  };
591
- //# sourceMappingURL=chunk-YANUTYUV.js.map
591
+ //# sourceMappingURL=chunk-KAA6A3YV.js.map
@@ -38,7 +38,7 @@ import {
38
38
  formatTaskFeedback,
39
39
  toRecord,
40
40
  toSdkContent
41
- } from "./chunk-YANUTYUV.js";
41
+ } from "./chunk-KAA6A3YV.js";
42
42
  import {
43
43
  AGENT_IDS,
44
44
  AGENT_SYSTEM_CLAUDE_CODE,
@@ -50,14 +50,14 @@ import {
50
50
  REASONING_EFFORTS,
51
51
  inflateToolResultContent,
52
52
  isImageMimeType
53
- } from "./chunk-OW66JVRI.js";
53
+ } from "./chunk-UUE4MBYJ.js";
54
54
  import {
55
55
  AnthropicAuthStatusSchema,
56
56
  CodexAuthStatusSchema,
57
57
  CursorAuthStatusSchema,
58
58
  PermissionModeSchema,
59
59
  TESTED_CODEX_VERSION
60
- } from "./chunk-WOF2CNLX.js";
60
+ } from "./chunk-OPMLQQWV.js";
61
61
  import {
62
62
  logger
63
63
  } from "./chunk-CA5PKTNJ.js";
@@ -8364,4 +8364,4 @@ export {
8364
8364
  refreshInstalledAgents,
8365
8365
  refreshCodexAuthSlice
8366
8366
  };
8367
- //# sourceMappingURL=chunk-3PS6R44Z.js.map
8367
+ //# sourceMappingURL=chunk-LLRLVCL4.js.map
@@ -974,9 +974,11 @@ function classifyCodexCompatibility(detected, tested = TESTED_CODEX_VERSION) {
974
974
  return { status: "untested", detected, tested };
975
975
  }
976
976
 
977
- // ../../packages/session/src/collab-room-connection.ts
977
+ // ../../packages/session/src/signaling-keepalive.ts
978
978
  var PING_BASE_DELAY_MS = 2e4;
979
979
  var PING_JITTER_MS = 1e4;
980
+
981
+ // ../../packages/session/src/collab-room-connection.ts
980
982
  var CollabRoomConnection = class {
981
983
  state = "disconnected";
982
984
  ws = null;
@@ -1172,7 +1174,6 @@ function extractCloseCode(ev) {
1172
1174
  // ../../packages/session/src/personal-room-connection.ts
1173
1175
  var DEFAULT_BACKOFF_SCHEDULE = [1e3, 2e3, 4e3, 8e3, 15e3, 3e4];
1174
1176
  var DEFAULT_SLOW_RETRY_DELAY_MS = 3e5;
1175
- var DEFAULT_PING_INTERVAL_MS = 3e4;
1176
1177
  var DEFAULT_PONG_TIMEOUT_MS = 6e4;
1177
1178
  var DEFAULT_PROBE_TIMEOUT_MS = 3e3;
1178
1179
  var PersonalRoomConnection = class {
@@ -1180,6 +1181,7 @@ var PersonalRoomConnection = class {
1180
1181
  ws = null;
1181
1182
  messageHandlers = /* @__PURE__ */ new Set();
1182
1183
  stateChangeHandlers = /* @__PURE__ */ new Set();
1184
+ closeInfoHandlers = /* @__PURE__ */ new Set();
1183
1185
  rttSampleHandlers = /* @__PURE__ */ new Set();
1184
1186
  config;
1185
1187
  retryCount = 0;
@@ -1188,15 +1190,13 @@ var PersonalRoomConnection = class {
1188
1190
  * Timestamp (ms) of the most recent outbound 'ping'. Cleared on the first
1189
1191
  * pong-shaped reply that arrives afterwards. RTT = now - lastPingSentAt.
1190
1192
  * Approximate when more than one ping is in flight at once (pong always
1191
- * matches the latest send), but the proactive interval (30s) is two orders
1193
+ * matches the latest send), but the proactive interval (20-30s) is two orders
1192
1194
  * of magnitude slower than typical RTTs so the approximation is fine.
1193
1195
  */
1194
1196
  lastPingSentAt = null;
1195
1197
  /**
1196
- * Cluster A3: proactive interval timer. Fires every `pingIntervalMs`
1197
- * regardless of whether messages have been received. Today's reactive
1198
- * timer (reset on every `onmessage`) hides half-open WS death until
1199
- * kernel TCP RST (~30s on residential ISP).
1198
+ * Proactive one-shot timer. Each tick schedules the next with fresh jitter,
1199
+ * spreading client wakeups without drifting beyond the DO idle-close window.
1200
1200
  */
1201
1201
  pingTimer = null;
1202
1202
  /**
@@ -1214,14 +1214,14 @@ var PersonalRoomConnection = class {
1214
1214
  intentionalDisconnect = false;
1215
1215
  backoffSchedule;
1216
1216
  slowRetryDelayMs;
1217
- pingIntervalMs;
1217
+ pingBaseDelayMs;
1218
1218
  pongTimeoutMs;
1219
1219
  probeTimeoutMs;
1220
1220
  constructor(config) {
1221
1221
  this.config = config;
1222
1222
  this.backoffSchedule = config.backoffSchedule ?? DEFAULT_BACKOFF_SCHEDULE;
1223
1223
  this.slowRetryDelayMs = config.slowRetryDelayMs ?? DEFAULT_SLOW_RETRY_DELAY_MS;
1224
- this.pingIntervalMs = config.pingIntervalMs ?? DEFAULT_PING_INTERVAL_MS;
1224
+ this.pingBaseDelayMs = config.pingIntervalMs ?? PING_BASE_DELAY_MS;
1225
1225
  this.pongTimeoutMs = config.pongTimeoutMs ?? DEFAULT_PONG_TIMEOUT_MS;
1226
1226
  this.probeTimeoutMs = config.probeTimeoutMs ?? DEFAULT_PROBE_TIMEOUT_MS;
1227
1227
  }
@@ -1256,8 +1256,26 @@ var PersonalRoomConnection = class {
1256
1256
  this.setState("connected");
1257
1257
  this.startPingTimer();
1258
1258
  };
1259
- this.ws.onclose = () => {
1259
+ this.ws.onclose = (event) => {
1260
1260
  this.stopPingTimer();
1261
+ const closeCode = extractCloseCode2(event);
1262
+ const closeInfo = {
1263
+ code: event.code,
1264
+ reason: event.reason,
1265
+ wasClean: event.wasClean
1266
+ };
1267
+ for (const handler of [...this.closeInfoHandlers]) {
1268
+ handler(closeInfo);
1269
+ }
1270
+ if (closeCode === 4001) {
1271
+ if (this.retryTimer !== null) {
1272
+ clearTimeout(this.retryTimer);
1273
+ this.retryTimer = null;
1274
+ }
1275
+ this.retryCount = 0;
1276
+ this.setState("disconnected");
1277
+ return;
1278
+ }
1261
1279
  if (this.state !== "error" && this.state !== "reconnecting") {
1262
1280
  this.setState("disconnected");
1263
1281
  }
@@ -1319,6 +1337,12 @@ var PersonalRoomConnection = class {
1319
1337
  this.stateChangeHandlers.delete(handler);
1320
1338
  };
1321
1339
  }
1340
+ onCloseInfo(handler) {
1341
+ this.closeInfoHandlers.add(handler);
1342
+ return () => {
1343
+ this.closeInfoHandlers.delete(handler);
1344
+ };
1345
+ }
1322
1346
  /**
1323
1347
  * Register a listener for ping/pong RTT samples. Fires once per pong
1324
1348
  * received from the server with the round-trip duration in milliseconds.
@@ -1402,25 +1426,26 @@ var PersonalRoomConnection = class {
1402
1426
  handler(rttMs);
1403
1427
  }
1404
1428
  }
1405
- /**
1406
- * Cluster A3: start the proactive ping interval. Fires every `pingIntervalMs`
1407
- * regardless of message receipt — half-open WS death is detected by the
1408
- * absence of an inbound pong, not by the absence of inbound messages.
1409
- */
1410
1429
  startPingTimer() {
1411
1430
  this.stopPingTimer();
1412
- this.pingTimer = setInterval(() => {
1431
+ this.schedulePing();
1432
+ }
1433
+ schedulePing() {
1434
+ const delay = this.pingBaseDelayMs + Math.floor(Math.random() * PING_JITTER_MS);
1435
+ this.pingTimer = setTimeout(() => {
1436
+ this.pingTimer = null;
1413
1437
  try {
1414
1438
  this.ws?.send("ping");
1415
1439
  this.lastPingSentAt = Date.now();
1416
1440
  } catch {
1417
1441
  }
1418
1442
  this.armPongWatchdog();
1419
- }, this.pingIntervalMs);
1443
+ this.schedulePing();
1444
+ }, delay);
1420
1445
  }
1421
1446
  stopPingTimer() {
1422
1447
  if (this.pingTimer !== null) {
1423
- clearInterval(this.pingTimer);
1448
+ clearTimeout(this.pingTimer);
1424
1449
  this.pingTimer = null;
1425
1450
  }
1426
1451
  this.clearPongWatchdog();
@@ -1526,6 +1551,11 @@ var PersonalRoomConnection = class {
1526
1551
  }
1527
1552
  }
1528
1553
  };
1554
+ function extractCloseCode2(ev) {
1555
+ if (typeof ev !== "object" || ev === null || !("code" in ev)) return void 0;
1556
+ const code = ev.code;
1557
+ return typeof code === "number" ? code : void 0;
1558
+ }
1529
1559
 
1530
1560
  // ../../packages/session/src/publish-constants.ts
1531
1561
  var PUBLISHED_PREVIEW_KINDS = [
@@ -1633,4 +1663,4 @@ export {
1633
1663
  PublishCreateResponseSchema,
1634
1664
  ROUTES
1635
1665
  };
1636
- //# sourceMappingURL=chunk-WOF2CNLX.js.map
1666
+ //# sourceMappingURL=chunk-OPMLQQWV.js.map