@githolon/runtime 0.112.12 → 0.113.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.
@@ -1,6 +1,22 @@
1
1
  "use strict";
2
2
  (() => {
3
3
  // ../../platform-shells/browser/worker_page_entry.ts
4
+ var workerDigest = true ? "ade4b5cad661abe236e62493f1fae81a32cf1ff3275da2b4f2938a5eb3ae9754" : "";
5
+ var SLOW_OPERATION_MICROS = 1e6;
6
+ var slowOperationsReported = 0;
7
+ var bootStages = [];
8
+ var reportSlowOperation = (line) => {
9
+ const report = window.__nomosSlowOperation;
10
+ if (!report || slowOperationsReported >= 50) return;
11
+ try {
12
+ const json = line.slice(line.indexOf("{"));
13
+ const perf = JSON.parse(json);
14
+ if (perf.failed !== true && (typeof perf.totalUs !== "number" || perf.totalUs < SLOW_OPERATION_MICROS)) return;
15
+ slowOperationsReported++;
16
+ report(json);
17
+ } catch {
18
+ }
19
+ };
4
20
  var worker;
5
21
  var booting;
6
22
  var bootResolve;
@@ -30,9 +46,22 @@
30
46
  switch (message.kind) {
31
47
  case "boot-progress":
32
48
  console.debug("[nomos-peer-boot]", message.stage);
49
+ bootStages.push(message.stage);
50
+ if (/^\d+ms peer ready$/.test(message.stage) && Number.parseInt(message.stage, 10) >= 2e3) {
51
+ reportSlowOperation(JSON.stringify({ op: "peer_boot", totalUs: Number.parseInt(message.stage, 10) * 1e3, stages: bootStages }));
52
+ }
33
53
  break;
34
54
  case "custody-perf":
35
55
  console.debug("[nomos-custody-perf]", JSON.stringify(message.timing));
56
+ {
57
+ const timing = message.timing;
58
+ const totalMs = (timing.snapshotMs ?? 0) + (timing.commitMs ?? 0);
59
+ if (totalMs >= 500) reportSlowOperation(JSON.stringify({ op: "custody_checkpoint", totalUs: Math.round(totalMs * 1e3), ...message.timing }));
60
+ }
61
+ break;
62
+ case "kernel-perf":
63
+ console.debug("[nomos-worker]", message.line);
64
+ reportSlowOperation(message.line);
36
65
  break;
37
66
  case "booted":
38
67
  bootResolve?.();
@@ -40,7 +69,11 @@
40
69
  bootReject = void 0;
41
70
  break;
42
71
  case "boot-failed":
72
+ console.warn("[nomos-peer-boot] failed:", message.error);
73
+ reportSlowOperation(JSON.stringify({ op: "peer_boot_failure", failed: true, error: message.error, stages: bootStages }));
43
74
  fail(new Error(message.error));
75
+ worker?.terminate();
76
+ worker = void 0;
44
77
  break;
45
78
  case "disposed":
46
79
  if (message.error) closeReject?.(new Error(message.error));
@@ -89,10 +122,18 @@
89
122
  if (closing) return closing.then(() => window.__nomosBootRuntime(base));
90
123
  if (worker && !bootResolve) return booting ?? Promise.resolve();
91
124
  if (booting) return booting;
92
- const url = window.__nomosWorkerUrl;
93
- if (!url) return Promise.reject(new Error("Nomos Web Worker URL is not configured"));
125
+ const configured = window.__nomosWorkerUrl;
126
+ if (!configured) return Promise.reject(new Error("Nomos Web Worker URL is not configured"));
127
+ const url = workerDigest ? `${configured}${configured.includes("?") ? "&" : "?"}v=${workerDigest}` : configured;
94
128
  try {
95
129
  console.debug("[nomos-peer-boot]", "starting worker", url);
130
+ bootStages = [`${Math.round(performance.now())}ms page time: starting worker`];
131
+ const watched = bootStages;
132
+ setTimeout(() => {
133
+ if (watched === bootStages && !watched.some((stage) => / peer ready$/.test(stage))) {
134
+ reportSlowOperation(JSON.stringify({ op: "peer_boot_stalled", failed: true, stages: watched }));
135
+ }
136
+ }, 1e4);
96
137
  worker = new Worker(url);
97
138
  worker.onmessage = (event) => receive(event.data);
98
139
  worker.onerror = (event) => {
@@ -116,7 +157,7 @@
116
157
  const id = ++nextId;
117
158
  return new Promise((resolve, reject) => {
118
159
  pending.set(id, { resolve, reject });
119
- send({ kind: "invoke", id, frame: frameBase64 });
160
+ send({ kind: "invoke", id, frame: frameBase64, sentAt: Date.now() });
120
161
  });
121
162
  };
122
163
  window.__nomosKernelWorkSnapshot = () => lastSnapshot;