@glasstrace/sdk 1.15.0 → 1.16.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 (74) hide show
  1. package/README.md +117 -8
  2. package/dist/async-context/index.cjs +21 -2
  3. package/dist/async-context/index.cjs.map +1 -1
  4. package/dist/async-context/index.js +2 -2
  5. package/dist/{capture-error-03qDnC5v.d.cts → capture-error-B0txjNut.d.cts} +2 -2
  6. package/dist/{capture-error-CAfFUyIU.d.ts → capture-error-Dc01rYNR.d.ts} +2 -2
  7. package/dist/{chunk-F7A3QXCT.js → chunk-774XIOZG.js} +2 -2
  8. package/dist/{chunk-VMK2G6QR.js → chunk-AFTCLH77.js} +2 -2
  9. package/dist/{chunk-XMD5OYD6.js → chunk-BGJKEFBN.js} +2 -2
  10. package/dist/{chunk-LQZRGBN5.js → chunk-DW3CZDS6.js} +2 -2
  11. package/dist/{chunk-PSMSSLQY.js → chunk-EWW3TZ52.js} +123 -12
  12. package/dist/{chunk-PSMSSLQY.js.map → chunk-EWW3TZ52.js.map} +1 -1
  13. package/dist/{chunk-7LE2O4ZJ.js → chunk-GBVMPMVV.js} +54 -5
  14. package/dist/{chunk-7LE2O4ZJ.js.map → chunk-GBVMPMVV.js.map} +1 -1
  15. package/dist/{chunk-HMEHYSTS.js → chunk-KM4UNN3Q.js} +2 -2
  16. package/dist/{chunk-MP3QNDXQ.js → chunk-OHSX224U.js} +2 -2
  17. package/dist/{chunk-6ST4QV7T.js → chunk-T7B752NF.js} +3 -3
  18. package/dist/{chunk-ZIYT2Y4B.js → chunk-WOYJAG7H.js} +3 -3
  19. package/dist/cli/init.cjs +18 -5
  20. package/dist/cli/init.cjs.map +1 -1
  21. package/dist/cli/init.js +7 -7
  22. package/dist/cli/mcp-add.cjs +15 -2
  23. package/dist/cli/mcp-add.cjs.map +1 -1
  24. package/dist/cli/mcp-add.js +3 -3
  25. package/dist/cli/uninit.js +3 -3
  26. package/dist/cli/upgrade-instructions.cjs +1 -1
  27. package/dist/cli/upgrade-instructions.js +3 -3
  28. package/dist/cli/validate.cjs +14 -1
  29. package/dist/cli/validate.cjs.map +1 -1
  30. package/dist/cli/validate.js +2 -2
  31. package/dist/{correlation-id-YcfcqOru.d.ts → correlation-id-B9YYmoZw.d.ts} +1 -1
  32. package/dist/{correlation-id-CZ2bstzA.d.cts → correlation-id-CelUvw7j.d.cts} +1 -1
  33. package/dist/edge-entry.cjs +21 -2
  34. package/dist/edge-entry.cjs.map +1 -1
  35. package/dist/edge-entry.d.cts +2 -2
  36. package/dist/edge-entry.d.ts +2 -2
  37. package/dist/edge-entry.js +4 -4
  38. package/dist/import-graph-DBLGNjcI.d.cts +238 -0
  39. package/dist/import-graph-Dka_Fm7j.d.ts +238 -0
  40. package/dist/index.cjs +165 -12
  41. package/dist/index.cjs.map +1 -1
  42. package/dist/{index.d-BQIJ5Dvc.d.cts → index.d-3-cJoY8y.d.cts} +10 -2
  43. package/dist/{index.d-BQIJ5Dvc.d.ts → index.d-3-cJoY8y.d.ts} +10 -2
  44. package/dist/index.d.cts +28 -4
  45. package/dist/index.d.ts +28 -4
  46. package/dist/index.js +5 -5
  47. package/dist/middleware/index.cjs +21 -2
  48. package/dist/middleware/index.cjs.map +1 -1
  49. package/dist/middleware/index.js +2 -2
  50. package/dist/node-entry.cjs +56 -9
  51. package/dist/node-entry.cjs.map +1 -1
  52. package/dist/node-entry.d.cts +4 -4
  53. package/dist/node-entry.d.ts +4 -4
  54. package/dist/node-entry.js +7 -7
  55. package/dist/node-subpath.cjs +27 -1
  56. package/dist/node-subpath.cjs.map +1 -1
  57. package/dist/node-subpath.d.cts +51 -235
  58. package/dist/node-subpath.d.ts +51 -235
  59. package/dist/node-subpath.js +16 -3
  60. package/dist/node-subpath.js.map +1 -1
  61. package/dist/{source-map-uploader-NUONOEJG.js → source-map-uploader-UJPZCUFN.js} +3 -3
  62. package/dist/trpc/index.cjs +21 -2
  63. package/dist/trpc/index.cjs.map +1 -1
  64. package/dist/trpc/index.js +1 -1
  65. package/package.json +1 -1
  66. /package/dist/{chunk-F7A3QXCT.js.map → chunk-774XIOZG.js.map} +0 -0
  67. /package/dist/{chunk-VMK2G6QR.js.map → chunk-AFTCLH77.js.map} +0 -0
  68. /package/dist/{chunk-XMD5OYD6.js.map → chunk-BGJKEFBN.js.map} +0 -0
  69. /package/dist/{chunk-LQZRGBN5.js.map → chunk-DW3CZDS6.js.map} +0 -0
  70. /package/dist/{chunk-HMEHYSTS.js.map → chunk-KM4UNN3Q.js.map} +0 -0
  71. /package/dist/{chunk-MP3QNDXQ.js.map → chunk-OHSX224U.js.map} +0 -0
  72. /package/dist/{chunk-6ST4QV7T.js.map → chunk-T7B752NF.js.map} +0 -0
  73. /package/dist/{chunk-ZIYT2Y4B.js.map → chunk-WOYJAG7H.js.map} +0 -0
  74. /package/dist/{source-map-uploader-NUONOEJG.js.map → source-map-uploader-UJPZCUFN.js.map} +0 -0
package/dist/index.cjs CHANGED
@@ -15338,7 +15338,11 @@ function isSideEffectSemanticFieldKey(key) {
15338
15338
  key
15339
15339
  ) || SIDE_EFFECT_SEMANTIC_FIELD_OPEN_PATTERN.test(key);
15340
15340
  }
15341
- var DevApiKeySchema, AnonApiKeySchema, SessionIdSchema, BuildHashSchema, SdkDiagnosticCodeSchema, CaptureConfigSchema, SdkCachedConfigSchema, GlasstraceOptionsSchema, GlasstraceEnvVarsSchema, GLASSTRACE_ATTRIBUTE_NAMES, DEFAULT_CAPTURE_CONFIG, MAX_SOURCE_MAP_FILE_PATH_LENGTH, MAX_SOURCE_MAP_FILE_SIZE, MAX_SOURCE_MAP_FILE_COUNT, MAX_PRESIGNED_CLIENT_TOKEN_LENGTH, MAX_PRESIGNED_PATHNAME_LENGTH, ImportGraphPayloadSchema, SdkHealthReportSchema, TierLimitsSchema, SdkInitResponseSchema, DiscoveryResponseSchema, SourceMapUploadResponseSchema, PresignedUploadRequestSchema, PresignedUploadResponseSchema, SourceMapManifestRequestSchema, SourceMapManifestResponseSchema, K, SIDE_EFFECT_OPERATION_KINDS, SIDE_EFFECT_SEMANTIC_FIELD_STABLE_CORE_KEYS, SIDE_EFFECT_SEMANTIC_FIELD_OPEN_PATTERN, MAX_SIDE_EFFECT_SEMANTIC_FIELD_KEY_LENGTH, SIDE_EFFECT_OMISSION_REASONS, SIDE_EFFECT_OPERATION_STATUSES, SIDE_EFFECT_OPERATION_PHASES;
15341
+ function isSideEffectScalarKey(key) {
15342
+ if (key.length > MAX_SIDE_EFFECT_SEMANTIC_FIELD_KEY_LENGTH) return false;
15343
+ return SIDE_EFFECT_SCALAR_KEY_PATTERN.test(key);
15344
+ }
15345
+ var DevApiKeySchema, AnonApiKeySchema, SessionIdSchema, BuildHashSchema, SdkDiagnosticCodeSchema, CaptureConfigSchema, SdkCachedConfigSchema, GlasstraceOptionsSchema, GlasstraceEnvVarsSchema, GLASSTRACE_ATTRIBUTE_NAMES, DEFAULT_CAPTURE_CONFIG, MAX_SOURCE_MAP_FILE_PATH_LENGTH, MAX_SOURCE_MAP_FILE_SIZE, MAX_SOURCE_MAP_FILE_COUNT, MAX_PRESIGNED_CLIENT_TOKEN_LENGTH, MAX_PRESIGNED_PATHNAME_LENGTH, ImportGraphPayloadSchema, SdkHealthReportSchema, TierLimitsSchema, SdkInitResponseSchema, DiscoveryResponseSchema, SourceMapUploadResponseSchema, PresignedUploadRequestSchema, PresignedUploadResponseSchema, SourceMapManifestRequestSchema, SourceMapManifestResponseSchema, K, SIDE_EFFECT_OPERATION_KINDS, SIDE_EFFECT_SEMANTIC_FIELD_STABLE_CORE_KEYS, SIDE_EFFECT_SEMANTIC_FIELD_OPEN_PATTERN, MAX_SIDE_EFFECT_SEMANTIC_FIELD_KEY_LENGTH, SIDE_EFFECT_OMISSION_REASONS, SIDE_EFFECT_SCALAR_KEY_PATTERN, SIDE_EFFECT_SCALAR_PREFIX, MAX_SIDE_EFFECT_SCALARS_PER_OPERATION, SIDE_EFFECT_HASHED_ID_PREFIX, SIDE_EFFECT_HASHED_ID_HEX_LENGTH, SIDE_EFFECT_OPERATION_STATUSES, SIDE_EFFECT_OPERATION_PHASES;
15342
15346
  var init_dist = __esm({
15343
15347
  "../protocol/dist/index.js"() {
15344
15348
  "use strict";
@@ -15377,7 +15381,20 @@ var init_dist = __esm({
15377
15381
  * client-side allowlist enforcement layered with the product's
15378
15382
  * storage-time filter as defense-in-depth.
15379
15383
  */
15380
- sideEffectEvidence: external_exports.boolean().optional().default(false)
15384
+ sideEffectEvidence: external_exports.boolean().optional().default(false),
15385
+ /**
15386
+ * Per-account value-fidelity capture posture (server-pushed).
15387
+ *
15388
+ * `strict` (default) is fail-closed: the SDK rejects raw wall-clock
15389
+ * timestamps and unhashed identifiers from the `scalar.*` channel at
15390
+ * emit time. `full` relaxes those rejections so raw magnitudes can be
15391
+ * surfaced — but only in conjunction with an explicit producer opt-in
15392
+ * (so a `full`-configured account still emits strict-shaped scalars
15393
+ * unless the producer also opts in). The operator owns this flag; it
15394
+ * is never derived from producer or request input. Absent on the wire
15395
+ * ⇒ `strict`.
15396
+ */
15397
+ captureFidelity: external_exports.enum(["strict", "full"]).optional().default("strict")
15381
15398
  });
15382
15399
  SdkCachedConfigSchema = external_exports.object({
15383
15400
  response: external_exports.record(external_exports.string(), external_exports.unknown()),
@@ -15568,7 +15585,13 @@ var init_dist = __esm({
15568
15585
  SIDE_EFFECT_OMITTED_UNSUPPORTED_KEY: "glasstrace.side_effect.omitted.unsupported_key",
15569
15586
  SIDE_EFFECT_OMITTED_VALUE_TOO_LONG: "glasstrace.side_effect.omitted.value_too_long",
15570
15587
  SIDE_EFFECT_OMITTED_NOT_EMITTED: "glasstrace.side_effect.omitted.not_emitted",
15571
- SIDE_EFFECT_OMITTED_CAPTURE_DISABLED: "glasstrace.side_effect.omitted.capture_disabled"
15588
+ SIDE_EFFECT_OMITTED_CAPTURE_DISABLED: "glasstrace.side_effect.omitted.capture_disabled",
15589
+ // Value-fidelity scalar-channel omission reasons. Counts only; the
15590
+ // rejected raw value (timestamp, unhashed id, non-finite number) is
15591
+ // never echoed. Mirror the product omission enum verbatim.
15592
+ SIDE_EFFECT_OMITTED_RAW_TIMESTAMP: "glasstrace.side_effect.omitted.raw_timestamp",
15593
+ SIDE_EFFECT_OMITTED_UNHASHED_ID: "glasstrace.side_effect.omitted.unhashed_id",
15594
+ SIDE_EFFECT_OMITTED_NON_FINITE: "glasstrace.side_effect.omitted.non_finite"
15572
15595
  };
15573
15596
  DEFAULT_CAPTURE_CONFIG = {
15574
15597
  requestBodies: false,
@@ -15578,7 +15601,8 @@ var init_dist = __esm({
15578
15601
  importGraph: false,
15579
15602
  consoleErrors: false,
15580
15603
  errorResponseBodies: false,
15581
- sideEffectEvidence: false
15604
+ sideEffectEvidence: false,
15605
+ captureFidelity: "strict"
15582
15606
  };
15583
15607
  MAX_SOURCE_MAP_FILE_PATH_LENGTH = 512;
15584
15608
  MAX_SOURCE_MAP_FILE_SIZE = 50 * 1024 * 1024;
@@ -15793,8 +15817,28 @@ var init_dist = __esm({
15793
15817
  "unsupported_key",
15794
15818
  "value_too_long",
15795
15819
  "not_emitted",
15796
- "capture_disabled"
15820
+ "capture_disabled",
15821
+ // Value-fidelity scalar channel reasons. A scalar is dropped under
15822
+ // `raw_timestamp` when a wall-clock value (a `Date` instance, or a
15823
+ // numeric epoch on a `*Ms` key) is rejected in favor of a bounded
15824
+ // delta; `unhashed_id` when an `*Id` scalar is not the `gthid_<hex>`
15825
+ // output of `hashId`; `non_finite` when a number is NaN/±Infinity.
15826
+ // (A type-mismatched value — e.g. a date *string* on a numeric key —
15827
+ // is dropped under `raw_payload`, not `raw_timestamp`, since the
15828
+ // scalar channel only carries native numbers/booleans plus `gthid_`
15829
+ // ids.) These mirror the product `SideEffectOmissionReasonSchema`
15830
+ // tuple verbatim (hand-maintained on both sides; see @drift-check
15831
+ // above). `non_finite` is SDK-emit-time only — JSON cannot carry
15832
+ // NaN/Infinity to the wire.
15833
+ "raw_timestamp",
15834
+ "unhashed_id",
15835
+ "non_finite"
15797
15836
  ];
15837
+ SIDE_EFFECT_SCALAR_KEY_PATTERN = /^[a-z][A-Za-z0-9]*(Ms|Amount|Bytes|Ratio|Id|Value|Flag)$/;
15838
+ SIDE_EFFECT_SCALAR_PREFIX = "glasstrace.side_effect.scalar.";
15839
+ MAX_SIDE_EFFECT_SCALARS_PER_OPERATION = 16;
15840
+ SIDE_EFFECT_HASHED_ID_PREFIX = "gthid_";
15841
+ SIDE_EFFECT_HASHED_ID_HEX_LENGTH = 32;
15798
15842
  SIDE_EFFECT_OPERATION_STATUSES = [
15799
15843
  "scheduled",
15800
15844
  "started",
@@ -23685,6 +23729,13 @@ async function tryImport(moduleId) {
23685
23729
  return null;
23686
23730
  }
23687
23731
  }
23732
+ function warnPrismaInstrumentationUnavailable(verbose, detail) {
23733
+ if (!verbose) return;
23734
+ sdkLog(
23735
+ "warn",
23736
+ `[glasstrace] @prisma/instrumentation ${detail}; Prisma query spans will not be captured. If you use Prisma and expect database spans, add @prisma/instrumentation as a direct dependency (some package managers, e.g. pnpm, do not expose transitive copies).`
23737
+ );
23738
+ }
23688
23739
  async function configureOtel(config2, sessionManager) {
23689
23740
  setOtelState(OtelState.CONFIGURING);
23690
23741
  await new Promise((resolve3) => {
@@ -23792,7 +23843,14 @@ async function runRegistrationPath(config2, sessionManager) {
23792
23843
  const PrismaInstrumentation = prismaModule2.PrismaInstrumentation;
23793
23844
  if (PrismaInstrumentation) {
23794
23845
  otelConfig.instrumentations = [new PrismaInstrumentation()];
23846
+ } else {
23847
+ warnPrismaInstrumentationUnavailable(
23848
+ config2.verbose,
23849
+ "was loaded but did not export PrismaInstrumentation"
23850
+ );
23795
23851
  }
23852
+ } else {
23853
+ warnPrismaInstrumentationUnavailable(config2.verbose, "could not be loaded");
23796
23854
  }
23797
23855
  vercelOtel.registerOTel(otelConfig);
23798
23856
  const vercelProxy = trace.getTracerProvider();
@@ -23847,9 +23905,22 @@ async function runRegistrationPath(config2, sessionManager) {
23847
23905
  const inst = new PrismaInstrumentation();
23848
23906
  inst.setTracerProvider(provider);
23849
23907
  inst.enable();
23850
- } catch {
23908
+ } catch (err) {
23909
+ if (config2.verbose) {
23910
+ sdkLog(
23911
+ "warn",
23912
+ `[glasstrace] @prisma/instrumentation failed to initialize: ${err instanceof Error ? err.message : String(err)}. Prisma query spans will not be captured.`
23913
+ );
23914
+ }
23851
23915
  }
23916
+ } else {
23917
+ warnPrismaInstrumentationUnavailable(
23918
+ config2.verbose,
23919
+ "was loaded but did not export PrismaInstrumentation"
23920
+ );
23852
23921
  }
23922
+ } else {
23923
+ warnPrismaInstrumentationUnavailable(config2.verbose, "could not be loaded");
23853
23924
  }
23854
23925
  setOtelState(OtelState.OWNS_PROVIDER);
23855
23926
  emitLifecycleEvent("otel:configured", { state: OtelState.OWNS_PROVIDER, scenario: "A" });
@@ -24063,6 +24134,9 @@ function registerHeartbeatShutdownHook(config2, anonKey, sdkVersion) {
24063
24134
  });
24064
24135
  }
24065
24136
 
24137
+ // src/side-effect/index.ts
24138
+ init_dist();
24139
+
24066
24140
  // src/side-effect/allowlist.ts
24067
24141
  init_dist();
24068
24142
  var MAX_SIDE_EFFECT_OPERATION_LABEL_LENGTH = 96;
@@ -24154,6 +24228,59 @@ function checkSemanticFieldValue(key, value) {
24154
24228
  }
24155
24229
  return { accepted: true, value };
24156
24230
  }
24231
+ var GTHID_STRICT_REGEX = new RegExp(
24232
+ `^${SIDE_EFFECT_HASHED_ID_PREFIX}[0-9a-f]{${SIDE_EFFECT_HASHED_ID_HEX_LENGTH}}$`
24233
+ );
24234
+ var SCALAR_EPOCH_MS_MIN = 1e12;
24235
+ function isTimestampShapedScalarKey(key) {
24236
+ return key.endsWith("Ms");
24237
+ }
24238
+ function checkScalarField(key, value, mode = "strict") {
24239
+ if (typeof key !== "string" || !isSideEffectScalarKey(key)) {
24240
+ return { accepted: false, reason: "unsupported_key" };
24241
+ }
24242
+ if (value instanceof Date) {
24243
+ return { accepted: false, reason: "raw_timestamp" };
24244
+ }
24245
+ if (key.endsWith("Id")) {
24246
+ if (typeof value !== "string") {
24247
+ return { accepted: false, reason: "unhashed_id" };
24248
+ }
24249
+ if (mode === "strict") {
24250
+ if (!GTHID_STRICT_REGEX.test(value)) {
24251
+ return { accepted: false, reason: "unhashed_id" };
24252
+ }
24253
+ return { accepted: true, value };
24254
+ }
24255
+ if (value.length === 0) {
24256
+ return { accepted: false, reason: "raw_payload" };
24257
+ }
24258
+ const unsafe = detectUnsafePattern(value);
24259
+ if (unsafe) {
24260
+ return { accepted: false, reason: unsafe };
24261
+ }
24262
+ if (value.length > MAX_SIDE_EFFECT_FIELD_VALUE_LENGTH) {
24263
+ return { accepted: false, reason: "value_too_long" };
24264
+ }
24265
+ return { accepted: true, value };
24266
+ }
24267
+ if (key.endsWith("Flag")) {
24268
+ if (typeof value !== "boolean") {
24269
+ return { accepted: false, reason: "raw_payload" };
24270
+ }
24271
+ return { accepted: true, value };
24272
+ }
24273
+ if (typeof value !== "number") {
24274
+ return { accepted: false, reason: "raw_payload" };
24275
+ }
24276
+ if (!Number.isFinite(value)) {
24277
+ return { accepted: false, reason: "non_finite" };
24278
+ }
24279
+ if (mode === "strict" && isTimestampShapedScalarKey(key) && value >= SCALAR_EPOCH_MS_MIN) {
24280
+ return { accepted: false, reason: "raw_timestamp" };
24281
+ }
24282
+ return { accepted: true, value };
24283
+ }
24157
24284
  function checkSemanticFieldKey(key) {
24158
24285
  return typeof key === "string" && isSideEffectSemanticFieldKey(key);
24159
24286
  }
@@ -24219,7 +24346,10 @@ var OMISSION_ATTRIBUTE_BY_REASON = {
24219
24346
  unsupported_key: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_UNSUPPORTED_KEY,
24220
24347
  value_too_long: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_VALUE_TOO_LONG,
24221
24348
  not_emitted: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_NOT_EMITTED,
24222
- capture_disabled: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_CAPTURE_DISABLED
24349
+ capture_disabled: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_CAPTURE_DISABLED,
24350
+ raw_timestamp: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_RAW_TIMESTAMP,
24351
+ unhashed_id: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_UNHASHED_ID,
24352
+ non_finite: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_OMITTED_NON_FINITE
24223
24353
  };
24224
24354
  var FIELD_ATTRIBUTE_BY_KEY = {
24225
24355
  templateKey: GLASSTRACE_ATTRIBUTE_NAMES.SIDE_EFFECT_FIELD_TEMPLATE_KEY,
@@ -24278,6 +24408,12 @@ function attachField(span, key, value) {
24278
24408
  } catch {
24279
24409
  }
24280
24410
  }
24411
+ function attachScalar(span, key, value) {
24412
+ try {
24413
+ span.setAttribute(`${SIDE_EFFECT_SCALAR_PREFIX}${key}`, value);
24414
+ } catch {
24415
+ }
24416
+ }
24281
24417
  function recordOmission(span, reason) {
24282
24418
  recordOmissionOnSpan(span, reason);
24283
24419
  }
@@ -24408,6 +24544,23 @@ function runRecordSideEffect(input) {
24408
24544
  attachField(outcome.span, rawKey, valueOutcome.value);
24409
24545
  }
24410
24546
  }
24547
+ const scalars = candidate.scalars;
24548
+ if (scalars && typeof scalars === "object") {
24549
+ let scalarCount = 0;
24550
+ for (const [rawKey, rawValue] of Object.entries(scalars)) {
24551
+ if (scalarCount >= MAX_SIDE_EFFECT_SCALARS_PER_OPERATION) {
24552
+ recordOmission(outcome.span, "value_too_long");
24553
+ break;
24554
+ }
24555
+ scalarCount += 1;
24556
+ const scalarOutcome = checkScalarField(rawKey, rawValue);
24557
+ if (!scalarOutcome.accepted) {
24558
+ recordOmission(outcome.span, scalarOutcome.reason);
24559
+ continue;
24560
+ }
24561
+ attachScalar(outcome.span, rawKey, scalarOutcome.value);
24562
+ }
24563
+ }
24411
24564
  }
24412
24565
 
24413
24566
  // src/runtime-state.ts
@@ -24710,11 +24863,11 @@ function registerGlasstrace(options) {
24710
24863
  setCoreState(CoreState.REGISTERING);
24711
24864
  maybeWarnStaleAgentInstructions({
24712
24865
  projectRoot: process.cwd(),
24713
- sdkVersion: "1.15.0"
24866
+ sdkVersion: "1.16.0"
24714
24867
  });
24715
24868
  startRuntimeStateWriter({
24716
24869
  projectRoot: process.cwd(),
24717
- sdkVersion: "1.15.0"
24870
+ sdkVersion: "1.16.0"
24718
24871
  });
24719
24872
  const config2 = resolveConfig(options);
24720
24873
  setSideEffectVerboseFlag(config2.verbose);
@@ -24882,8 +25035,8 @@ async function backgroundInit(config2, anonKeyForInit, generation) {
24882
25035
  if (config2.verbose) {
24883
25036
  console.info("[glasstrace] Background init firing.");
24884
25037
  }
24885
- const healthReport = collectHealthReport("1.15.0");
24886
- const initResult = await performInit(config2, anonKeyForInit, "1.15.0", healthReport);
25038
+ const healthReport = collectHealthReport("1.16.0");
25039
+ const initResult = await performInit(config2, anonKeyForInit, "1.16.0", healthReport);
24887
25040
  if (generation !== registrationGeneration) return;
24888
25041
  const currentState = getCoreState();
24889
25042
  if (currentState === CoreState.SHUTTING_DOWN || currentState === CoreState.SHUTDOWN) {
@@ -24906,7 +25059,7 @@ async function backgroundInit(config2, anonKeyForInit, generation) {
24906
25059
  }
24907
25060
  maybeInstallConsoleCapture();
24908
25061
  if (didLastInitSucceed()) {
24909
- startHeartbeat(config2, anonKeyForInit, "1.15.0", generation, (newApiKey, accountId) => {
25062
+ startHeartbeat(config2, anonKeyForInit, "1.16.0", generation, (newApiKey, accountId) => {
24910
25063
  setAuthState(AuthState.CLAIMING);
24911
25064
  emitLifecycleEvent("auth:claim_started", { accountId });
24912
25065
  setResolvedApiKey(newApiKey);