@schoolai/shipyard 3.30.0-rc.20260913.0 → 3.30.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.
@@ -40,7 +40,7 @@ import {
40
40
  startPlanBackfillForDaemon,
41
41
  sync,
42
42
  validatePeerId
43
- } from "./chunk-VE2ZAUIM.js";
43
+ } from "./chunk-JM2E5QZ5.js";
44
44
  import {
45
45
  loadAuthToken
46
46
  } from "./chunk-XPYW5WQS.js";
@@ -188,7 +188,7 @@ import {
188
188
  unresolveReviewThread,
189
189
  withLabelAsync,
190
190
  writeCursorApiKeyToVault
191
- } from "./chunk-NNNYGFSQ.js";
191
+ } from "./chunk-ZSMWOXEN.js";
192
192
  import {
193
193
  classifySkill,
194
194
  detectSkills,
@@ -232,7 +232,7 @@ import {
232
232
  resolveStdioEnv,
233
233
  setTelemetrySink,
234
234
  telemeter
235
- } from "./chunk-XJVXQA7C.js";
235
+ } from "./chunk-42SK2S4V.js";
236
236
  import {
237
237
  atomicWriteFile,
238
238
  findProjectRoot,
@@ -256,7 +256,7 @@ import {
256
256
  createAssetResolver,
257
257
  toSdkContent,
258
258
  toSdkPermissionMode
259
- } from "./chunk-JQFAXWT5.js";
259
+ } from "./chunk-CW2PKTA6.js";
260
260
  import {
261
261
  AGENT_IDS,
262
262
  AGENT_SYSTEM_CLAUDE_CODE,
@@ -465,7 +465,7 @@ import {
465
465
  unsafeAssertSourceId,
466
466
  vizFileExtension,
467
467
  withPreferredRuntimeAuthMethod
468
- } from "./chunk-KFCIZHQW.js";
468
+ } from "./chunk-22TVFTWD.js";
469
469
  import {
470
470
  AuthGitHubCallbackRequestSchema,
471
471
  AuthGitHubCallbackResponseSchema,
@@ -14421,6 +14421,8 @@ function buildBrowserMetricsTelemetry(msg) {
14421
14421
  runtimeTransport: msg.runtime?.transport ?? null,
14422
14422
  visibility: m2.visibility,
14423
14423
  tabAgeMs: m2.tabAgeMs,
14424
+ heapPressureLevel: m2.heapPressureLevel ?? null,
14425
+ heapPressureAction: m2.heapPressureAction ?? null,
14424
14426
  heapUsedBytes: m2.heap?.usedBytes ?? null,
14425
14427
  heapTotalBytes: m2.heap?.totalBytes ?? null,
14426
14428
  heapLimitBytes: m2.heap?.limitBytes ?? null,
@@ -14685,6 +14687,42 @@ function flattenControlChannel(v2) {
14685
14687
  controlChannelByType: v2?.byType ?? null
14686
14688
  };
14687
14689
  }
14690
+ function buildHeapPressureTelemetry(msg, controlPeerId) {
14691
+ const level = msg.metrics.heapPressureLevel;
14692
+ if (level !== "shed" && level !== "critical") return null;
14693
+ const heap = msg.metrics.heap;
14694
+ return {
14695
+ level,
14696
+ /** What the renderer DID about it, reported one sample late by design. */
14697
+ action: msg.metrics.heapPressureAction ?? null,
14698
+ controlPeerId,
14699
+ heapUsedBytes: heap?.usedBytes ?? null,
14700
+ heapLimitBytes: heap?.limitBytes ?? null,
14701
+ heapUsedRatio: heap && heap.limitBytes > 0 ? Number((heap.usedBytes / heap.limitBytes).toFixed(4)) : null,
14702
+ visibility: msg.metrics.visibility,
14703
+ tabAgeMs: msg.metrics.tabAgeMs
14704
+ };
14705
+ }
14706
+ function forwardBrowserMetricsSample(msg, controlPeerId, sinks) {
14707
+ try {
14708
+ sinks.logAdapter(buildBrowserMetricsLogEntry(msg, controlPeerId));
14709
+ sinks.captureBrowserMetricsSample(buildBrowserMetricsTelemetry(msg));
14710
+ const heapPressure = buildHeapPressureTelemetry(msg, controlPeerId);
14711
+ if (heapPressure) {
14712
+ sinks.logAdapter({ event: "renderer_heap_pressure", ...heapPressure });
14713
+ sinks.telemeterHeapPressure(heapPressure);
14714
+ }
14715
+ } catch (err3) {
14716
+ try {
14717
+ sinks.logAdapter({
14718
+ event: "browser_metrics_sample_failed",
14719
+ controlPeerId,
14720
+ error: err3 instanceof Error ? err3.message : String(err3)
14721
+ });
14722
+ } catch {
14723
+ }
14724
+ }
14725
+ }
14688
14726
 
14689
14727
  // src/services/channels/auth/agent-auth-verifier.ts
14690
14728
  var AUTH_CONVERGENCE_RUNTIMES = /* @__PURE__ */ new Set(["codex", "cursor", "claude-code", "devin"]);
@@ -17923,7 +17961,7 @@ async function refreshPluginCapabilities(daemon, tokenStore) {
17923
17961
  const userSettings = await daemon.userSettingsStore.getSettings();
17924
17962
  const [updatedMarketplace, updatedMcp, updatedSkills] = await Promise.all([
17925
17963
  detectMarketplacePlugins(daemon.capabilities.marketplacePlugins),
17926
- import("./mcp-servers-DUHUR7NY.js").then(
17964
+ import("./mcp-servers-LTYMM2F2.js").then(
17927
17965
  (m2) => m2.detectMCPServers(
17928
17966
  daemon.capabilities.environments,
17929
17967
  tokenStore,
@@ -28066,11 +28104,11 @@ function wireControlChannel(rawChannel, daemon, logAdapter, deps) {
28066
28104
  * signals are queryable across the fleet, not just in one machine's log.
28067
28105
  */
28068
28106
  onBrowserMetricsSample: (msg) => {
28069
- logAdapter(buildBrowserMetricsLogEntry(msg, controlPeerId));
28070
- daemon.metricsCollector.capture(
28071
- "browser_metrics_sample",
28072
- buildBrowserMetricsTelemetry(msg)
28073
- );
28107
+ forwardBrowserMetricsSample(msg, controlPeerId, {
28108
+ logAdapter,
28109
+ captureBrowserMetricsSample: (payload) => daemon.metricsCollector.capture("browser_metrics_sample", payload),
28110
+ telemeterHeapPressure: (payload) => telemeter("renderer_heap_pressure", payload)
28111
+ });
28074
28112
  },
28075
28113
  onBrowserThrottledDetected: (msg) => {
28076
28114
  logAdapter({ event: "browser_throttled_detected", controlPeerId, ...msg });
@@ -31404,6 +31442,33 @@ async function setupLocalDirect(deps) {
31404
31442
  }
31405
31443
 
31406
31444
  // src/services/metrics/electron-app-metrics-rpc.ts
31445
+ var APP_METRICS_MIRROR_INTERVAL_MS = 6e4;
31446
+ var APP_METRICS_MIRROR_BYTES_STEP = 1024 * 1024 * 1024;
31447
+ var INITIAL_APP_METRICS_MIRROR_STATE = {
31448
+ lastMirrorAtMs: null,
31449
+ lastLargestGiB: null
31450
+ };
31451
+ function decideAppMetricsMirror(state, largestProcessWorkingSetBytes, nowMs) {
31452
+ const largestGiB = largestProcessWorkingSetBytes === null || !Number.isFinite(largestProcessWorkingSetBytes) ? null : Math.floor(largestProcessWorkingSetBytes / APP_METRICS_MIRROR_BYTES_STEP);
31453
+ const carriedGiB = largestGiB === null ? state.lastLargestGiB : Math.max(largestGiB, state.lastLargestGiB ?? largestGiB);
31454
+ const crossed = largestGiB !== null && largestGiB >= 1 && (state.lastLargestGiB === null || largestGiB > state.lastLargestGiB);
31455
+ if (crossed) {
31456
+ return {
31457
+ mirror: true,
31458
+ reason: "gib_crossing",
31459
+ next: { lastMirrorAtMs: nowMs, lastLargestGiB: largestGiB }
31460
+ };
31461
+ }
31462
+ const dueForHeartbeat = state.lastMirrorAtMs === null || nowMs - state.lastMirrorAtMs >= APP_METRICS_MIRROR_INTERVAL_MS;
31463
+ if (dueForHeartbeat) {
31464
+ return {
31465
+ mirror: true,
31466
+ reason: "heartbeat",
31467
+ next: { lastMirrorAtMs: nowMs, lastLargestGiB: carriedGiB }
31468
+ };
31469
+ }
31470
+ return { mirror: false, next: { ...state, lastLargestGiB: carriedGiB } };
31471
+ }
31407
31472
  var FORWARDABLE_TELEMETER_EVENTS = [
31408
31473
  "squirrel_install_stuck_recovered",
31409
31474
  "electron_renderer_process_gone",
@@ -31411,12 +31476,23 @@ var FORWARDABLE_TELEMETER_EVENTS = [
31411
31476
  "electron_renderer_reload_circuit_open"
31412
31477
  ];
31413
31478
  var FORWARDABLE_EVENT_NAMES = new Set(FORWARDABLE_TELEMETER_EVENTS);
31414
- function registerElectronAppMetricsRpc(parentPort2, log) {
31479
+ function registerElectronAppMetricsRpc(parentPort2, log, now = Date.now) {
31480
+ let mirrorState = INITIAL_APP_METRICS_MIRROR_STATE;
31415
31481
  parentPort2.on("message", (event) => {
31416
31482
  const data = event.data;
31417
31483
  const metricsPayload = readAppMetricsPayload(data);
31418
31484
  if (metricsPayload) {
31419
31485
  telemeter("electron_app_metrics", metricsPayload);
31486
+ const largest = metricsPayload.largestProcessWorkingSetBytes;
31487
+ const decision = decideAppMetricsMirror(
31488
+ mirrorState,
31489
+ typeof largest === "number" ? largest : null,
31490
+ now()
31491
+ );
31492
+ mirrorState = decision.next;
31493
+ if (decision.mirror) {
31494
+ log({ event: "electron_app_metrics", mirrorReason: decision.reason, ...metricsPayload });
31495
+ }
31420
31496
  return;
31421
31497
  }
31422
31498
  const telemeterPayload = readTelemeterPayload(data);
@@ -117334,4 +117410,4 @@ export {
117334
117410
  decideWorkspaceScope,
117335
117411
  serve
117336
117412
  };
117337
- //# sourceMappingURL=serve-4ZPHPIJQ.js.map
117413
+ //# sourceMappingURL=serve-3TQOIJID.js.map