@uipath/common 1.199.0-preview.99 → 1.199.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.
@@ -26,7 +26,7 @@ export * from "./telemetry/command-attribution.js";
26
26
  export * from "./telemetry/command-terminal.js";
27
27
  export { ConsoleTelemetryProvider } from "./telemetry/console-telemetry-provider.js";
28
28
  export type { IContextStorage } from "./telemetry/context-storage.js";
29
- export { getConfiguredTelemetrySessionId, getTelemetrySessionId, resolveTelemetrySessionId, TELEMETRY_SESSION_ID_ENV, TELEMETRY_SESSION_ID_PROPERTY, } from "./telemetry/session-id.js";
29
+ export { getConfiguredTelemetrySessionId, getTelemetrySessionId, getTelemetrySessionSource, TELEMETRY_SESSION_ID_ENV, TELEMETRY_SESSION_SOURCE_PROPERTY, } from "./telemetry/session-id.js";
30
30
  export * from "./telemetry/telemetry-events.js";
31
31
  export type { ITelemetryProvider } from "./telemetry/telemetry-provider.js";
32
32
  export type { ITelemetryService, TelemetryContext, TelemetryProperties, } from "./telemetry/telemetry-service.js";
@@ -22842,8 +22842,18 @@ function getInboundTraceContext() {
22842
22842
 
22843
22843
  // src/telemetry/session-id.ts
22844
22844
  var TELEMETRY_SESSION_ID_ENV = "UIPATH_SESSION_ID";
22845
- var TELEMETRY_SESSION_ID_PROPERTY = "session_id";
22846
- var telemetrySessionIdSlot = singleton("TelemetrySessionId");
22845
+ var SESSION_ID_MAX_LENGTH = 64;
22846
+ var RANDOM_SESSION_ID_LENGTH = 32;
22847
+ var TELEMETRY_SESSION_SOURCE_PROPERTY = "session_id_source";
22848
+ var CONTROL_CHARACTERS = /\p{Cc}/gu;
22849
+ var INHERITED_SESSION_SOURCES = [
22850
+ { envVar: "CLAUDE_CODE_SESSION_ID", source: "claude-code" },
22851
+ { envVar: "CODEX_THREAD_ID", source: "codex" },
22852
+ { envVar: "ANTIGRAVITY_TRAJECTORY_ID", source: "antigravity" },
22853
+ { envVar: "TERM_SESSION_ID", source: "terminal" },
22854
+ { envVar: "WT_SESSION", source: "terminal" }
22855
+ ];
22856
+ var telemetrySessionSlot = singleton("TelemetrySession");
22847
22857
  var telemetryOperationIdSlot = singleton("TelemetryOperationId");
22848
22858
  function getProcessEnv2() {
22849
22859
  return globalThis.process?.env;
@@ -22852,27 +22862,45 @@ function normalizeSessionId(value) {
22852
22862
  if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") {
22853
22863
  return;
22854
22864
  }
22855
- const trimmed = String(value).trim();
22856
- return trimmed || undefined;
22865
+ const cleaned = String(value).replace(CONTROL_CHARACTERS, "").trim().slice(0, SESSION_ID_MAX_LENGTH);
22866
+ return cleaned || undefined;
22857
22867
  }
22858
22868
  function getConfiguredTelemetrySessionId() {
22859
22869
  return normalizeSessionId(getProcessEnv2()?.[TELEMETRY_SESSION_ID_ENV]);
22860
22870
  }
22861
- function getTelemetrySessionId() {
22862
- const envSessionId = getConfiguredTelemetrySessionId();
22863
- if (envSessionId) {
22864
- return envSessionId;
22871
+ function getInheritedSession(env2) {
22872
+ for (const candidate of INHERITED_SESSION_SOURCES) {
22873
+ const handle = normalizeSessionId(env2[candidate.envVar]);
22874
+ if (handle) {
22875
+ return { id: handle, source: candidate.source };
22876
+ }
22877
+ }
22878
+ return;
22879
+ }
22880
+ function generateRandomSession() {
22881
+ const bytes = new Uint8Array(RANDOM_SESSION_ID_LENGTH / 2);
22882
+ crypto.getRandomValues(bytes);
22883
+ let hex = "";
22884
+ for (const byte of bytes) {
22885
+ hex += byte.toString(16).padStart(2, "0");
22865
22886
  }
22866
- const existing = telemetrySessionIdSlot.get();
22887
+ return { id: hex, source: "random" };
22888
+ }
22889
+ function resolveTelemetrySession() {
22890
+ const existing = telemetrySessionSlot.get();
22867
22891
  if (existing) {
22868
22892
  return existing;
22869
22893
  }
22870
- const generated = crypto.randomUUID();
22871
- telemetrySessionIdSlot.set(generated);
22872
- return generated;
22894
+ const declaredHandle = getConfiguredTelemetrySessionId();
22895
+ const resolved = declaredHandle ? { id: declaredHandle, source: "declared" } : getInheritedSession(getProcessEnv2() ?? {}) ?? generateRandomSession();
22896
+ telemetrySessionSlot.set(resolved);
22897
+ return resolved;
22898
+ }
22899
+ function getTelemetrySessionId() {
22900
+ return resolveTelemetrySession().id;
22873
22901
  }
22874
- function resolveTelemetrySessionId(existingSessionId) {
22875
- return getConfiguredTelemetrySessionId() ?? normalizeSessionId(existingSessionId);
22902
+ function getTelemetrySessionSource() {
22903
+ return resolveTelemetrySession().source;
22876
22904
  }
22877
22905
  function getTelemetryOperationId() {
22878
22906
  const existing = telemetryOperationIdSlot.get();
@@ -23278,24 +23306,18 @@ class TelemetryService {
23278
23306
  }
23279
23307
  enrichPropertiesWithContext(properties, context) {
23280
23308
  const globalProperties = getGlobalTelemetryProperties();
23281
- const existingSessionId = properties?.[TELEMETRY_SESSION_ID_PROPERTY] ?? this.defaultProperties?.[TELEMETRY_SESSION_ID_PROPERTY] ?? globalProperties?.[TELEMETRY_SESSION_ID_PROPERTY];
23282
- const sessionId = resolveTelemetrySessionId(existingSessionId);
23283
23309
  const enriched = {
23284
23310
  ...getExecutionContextTelemetryProperties(),
23285
23311
  ...globalProperties,
23286
23312
  ...this.defaultProperties,
23287
23313
  ...redactProperties(properties ?? {}),
23314
+ [TELEMETRY_SESSION_SOURCE_PROPERTY]: getTelemetrySessionSource(),
23288
23315
  ...context ? {
23289
23316
  [TELEMETRY_OPERATION_ID_PROPERTY]: context.operationId,
23290
23317
  ...context.parentId !== undefined ? { [TELEMETRY_PARENT_ID_PROPERTY]: context.parentId } : {},
23291
23318
  [TELEMETRY_SPAN_ID_PROPERTY]: context.id
23292
23319
  } : {}
23293
23320
  };
23294
- if (sessionId === undefined) {
23295
- delete enriched[TELEMETRY_SESSION_ID_PROPERTY];
23296
- } else {
23297
- enriched[TELEMETRY_SESSION_ID_PROPERTY] = sessionId;
23298
- }
23299
23321
  return enriched;
23300
23322
  }
23301
23323
  generateId() {
@@ -23337,7 +23359,6 @@ export {
23337
23359
  setGlobalLogFilePath,
23338
23360
  runWithSink,
23339
23361
  restoreConsole,
23340
- resolveTelemetrySessionId,
23341
23362
  resolveEnvReference,
23342
23363
  resetLoggerInstance,
23343
23364
  registerPackageMetadataOptions,
@@ -23363,6 +23384,7 @@ export {
23363
23384
  installSdkCodingAgentHeader,
23364
23385
  installConsoleGuard,
23365
23386
  hashContent,
23387
+ getTelemetrySessionSource,
23366
23388
  getTelemetrySessionId,
23367
23389
  getSdkUserAgentToken,
23368
23390
  getRecordedCommandFailureTelemetry,
@@ -23399,7 +23421,7 @@ export {
23399
23421
  addSdkCodingAgentHeader,
23400
23422
  UIPATH_HOME_DIR,
23401
23423
  TelemetryService,
23402
- TELEMETRY_SESSION_ID_PROPERTY,
23424
+ TELEMETRY_SESSION_SOURCE_PROPERTY,
23403
23425
  TELEMETRY_SESSION_ID_ENV,
23404
23426
  ScreenLogger,
23405
23427
  PollOutcome,
@@ -23421,4 +23443,4 @@ export {
23421
23443
  AUTH_FILENAME
23422
23444
  };
23423
23445
 
23424
- //# debugId=5714488353CEE82464756E2164756E21
23446
+ //# debugId=04886234C3E93F8264756E2164756E21
package/dist/index.js CHANGED
@@ -6454,7 +6454,7 @@ function requireOmap() {
6454
6454
  function resolveYamlOmap(data) {
6455
6455
  if (data === null)
6456
6456
  return true;
6457
- const objectKeys = [];
6457
+ const objectKeys = {};
6458
6458
  const object = data;
6459
6459
  for (let index = 0, length = object.length;index < length; index += 1) {
6460
6460
  const pair = object[index];
@@ -6472,10 +6472,9 @@ function requireOmap() {
6472
6472
  }
6473
6473
  if (!pairHasKey)
6474
6474
  return false;
6475
- if (objectKeys.indexOf(pairKey) === -1)
6476
- objectKeys.push(pairKey);
6477
- else
6475
+ if (_hasOwnProperty.call(objectKeys, pairKey))
6478
6476
  return false;
6477
+ Object.defineProperty(objectKeys, pairKey, { value: true });
6479
6478
  }
6480
6479
  return true;
6481
6480
  }
@@ -9476,8 +9475,18 @@ function getInboundTraceContext() {
9476
9475
 
9477
9476
  // src/telemetry/session-id.ts
9478
9477
  var TELEMETRY_SESSION_ID_ENV = "UIPATH_SESSION_ID";
9479
- var TELEMETRY_SESSION_ID_PROPERTY = "session_id";
9480
- var telemetrySessionIdSlot = singleton("TelemetrySessionId");
9478
+ var SESSION_ID_MAX_LENGTH = 64;
9479
+ var RANDOM_SESSION_ID_LENGTH = 32;
9480
+ var TELEMETRY_SESSION_SOURCE_PROPERTY = "session_id_source";
9481
+ var CONTROL_CHARACTERS = /\p{Cc}/gu;
9482
+ var INHERITED_SESSION_SOURCES = [
9483
+ { envVar: "CLAUDE_CODE_SESSION_ID", source: "claude-code" },
9484
+ { envVar: "CODEX_THREAD_ID", source: "codex" },
9485
+ { envVar: "ANTIGRAVITY_TRAJECTORY_ID", source: "antigravity" },
9486
+ { envVar: "TERM_SESSION_ID", source: "terminal" },
9487
+ { envVar: "WT_SESSION", source: "terminal" }
9488
+ ];
9489
+ var telemetrySessionSlot = singleton("TelemetrySession");
9481
9490
  var telemetryOperationIdSlot = singleton("TelemetryOperationId");
9482
9491
  function getProcessEnv2() {
9483
9492
  return globalThis.process?.env;
@@ -9486,27 +9495,45 @@ function normalizeSessionId(value) {
9486
9495
  if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") {
9487
9496
  return;
9488
9497
  }
9489
- const trimmed = String(value).trim();
9490
- return trimmed || undefined;
9498
+ const cleaned = String(value).replace(CONTROL_CHARACTERS, "").trim().slice(0, SESSION_ID_MAX_LENGTH);
9499
+ return cleaned || undefined;
9491
9500
  }
9492
9501
  function getConfiguredTelemetrySessionId() {
9493
9502
  return normalizeSessionId(getProcessEnv2()?.[TELEMETRY_SESSION_ID_ENV]);
9494
9503
  }
9495
- function getTelemetrySessionId() {
9496
- const envSessionId = getConfiguredTelemetrySessionId();
9497
- if (envSessionId) {
9498
- return envSessionId;
9504
+ function getInheritedSession(env) {
9505
+ for (const candidate of INHERITED_SESSION_SOURCES) {
9506
+ const handle = normalizeSessionId(env[candidate.envVar]);
9507
+ if (handle) {
9508
+ return { id: handle, source: candidate.source };
9509
+ }
9510
+ }
9511
+ return;
9512
+ }
9513
+ function generateRandomSession() {
9514
+ const bytes = new Uint8Array(RANDOM_SESSION_ID_LENGTH / 2);
9515
+ crypto.getRandomValues(bytes);
9516
+ let hex = "";
9517
+ for (const byte of bytes) {
9518
+ hex += byte.toString(16).padStart(2, "0");
9499
9519
  }
9500
- const existing = telemetrySessionIdSlot.get();
9520
+ return { id: hex, source: "random" };
9521
+ }
9522
+ function resolveTelemetrySession() {
9523
+ const existing = telemetrySessionSlot.get();
9501
9524
  if (existing) {
9502
9525
  return existing;
9503
9526
  }
9504
- const generated = crypto.randomUUID();
9505
- telemetrySessionIdSlot.set(generated);
9506
- return generated;
9527
+ const declaredHandle = getConfiguredTelemetrySessionId();
9528
+ const resolved = declaredHandle ? { id: declaredHandle, source: "declared" } : getInheritedSession(getProcessEnv2() ?? {}) ?? generateRandomSession();
9529
+ telemetrySessionSlot.set(resolved);
9530
+ return resolved;
9507
9531
  }
9508
- function resolveTelemetrySessionId(existingSessionId) {
9509
- return getConfiguredTelemetrySessionId() ?? normalizeSessionId(existingSessionId);
9532
+ function getTelemetrySessionId() {
9533
+ return resolveTelemetrySession().id;
9534
+ }
9535
+ function getTelemetrySessionSource() {
9536
+ return resolveTelemetrySession().source;
9510
9537
  }
9511
9538
  function getTelemetryOperationId() {
9512
9539
  const existing = telemetryOperationIdSlot.get();
@@ -9787,24 +9814,18 @@ class TelemetryService {
9787
9814
  }
9788
9815
  enrichPropertiesWithContext(properties, context) {
9789
9816
  const globalProperties = getGlobalTelemetryProperties();
9790
- const existingSessionId = properties?.[TELEMETRY_SESSION_ID_PROPERTY] ?? this.defaultProperties?.[TELEMETRY_SESSION_ID_PROPERTY] ?? globalProperties?.[TELEMETRY_SESSION_ID_PROPERTY];
9791
- const sessionId = resolveTelemetrySessionId(existingSessionId);
9792
9817
  const enriched = {
9793
9818
  ...getExecutionContextTelemetryProperties(),
9794
9819
  ...globalProperties,
9795
9820
  ...this.defaultProperties,
9796
9821
  ...redactProperties(properties ?? {}),
9822
+ [TELEMETRY_SESSION_SOURCE_PROPERTY]: getTelemetrySessionSource(),
9797
9823
  ...context ? {
9798
9824
  [TELEMETRY_OPERATION_ID_PROPERTY]: context.operationId,
9799
9825
  ...context.parentId !== undefined ? { [TELEMETRY_PARENT_ID_PROPERTY]: context.parentId } : {},
9800
9826
  [TELEMETRY_SPAN_ID_PROPERTY]: context.id
9801
9827
  } : {}
9802
9828
  };
9803
- if (sessionId === undefined) {
9804
- delete enriched[TELEMETRY_SESSION_ID_PROPERTY];
9805
- } else {
9806
- enriched[TELEMETRY_SESSION_ID_PROPERTY] = sessionId;
9807
- }
9808
9829
  return enriched;
9809
9830
  }
9810
9831
  generateId() {
@@ -10042,16 +10063,6 @@ class NodeAppInsightsTelemetryProvider {
10042
10063
  }
10043
10064
  return { operationId, parentId, spanId };
10044
10065
  }
10045
- promoteSessionTag(merged, tags) {
10046
- const client = this.client;
10047
- if (!client || !merged)
10048
- return;
10049
- const sessionId = merged[TELEMETRY_SESSION_ID_PROPERTY];
10050
- delete merged[TELEMETRY_SESSION_ID_PROPERTY];
10051
- if (sessionId) {
10052
- tags[client.context.keys.sessionId] = sessionId;
10053
- }
10054
- }
10055
10066
  leafTagOverrides(properties) {
10056
10067
  const client = this.client;
10057
10068
  if (!client)
@@ -10064,7 +10075,6 @@ class NodeAppInsightsTelemetryProvider {
10064
10075
  if (spanId) {
10065
10076
  tags[keys.operationParentId] = spanId;
10066
10077
  }
10067
- this.promoteSessionTag(properties, tags);
10068
10078
  return tags;
10069
10079
  }
10070
10080
  operationCorrelation(properties) {
@@ -10079,7 +10089,6 @@ class NodeAppInsightsTelemetryProvider {
10079
10089
  if (parentId) {
10080
10090
  tagOverrides[keys.operationParentId] = parentId;
10081
10091
  }
10082
- this.promoteSessionTag(properties, tagOverrides);
10083
10092
  return { tagOverrides, id: spanId };
10084
10093
  }
10085
10094
  async trackEvent(eventName, properties) {
@@ -12346,7 +12355,6 @@ export {
12346
12355
  runValidators,
12347
12356
  runChecks,
12348
12357
  restoreConsole,
12349
- resolveTelemetrySessionId,
12350
12358
  resolveEnvReference,
12351
12359
  resolveDeprecatedOptionAlias,
12352
12360
  resolveAttachmentInputs,
@@ -12391,6 +12399,7 @@ export {
12391
12399
  installSdkCodingAgentHeader,
12392
12400
  installConsoleGuard,
12393
12401
  hashContent,
12402
+ getTelemetrySessionSource,
12394
12403
  getTelemetrySessionId,
12395
12404
  getSdkUserAgentToken,
12396
12405
  getRecordedCommandFailureTelemetry,
@@ -12444,7 +12453,7 @@ export {
12444
12453
  TelemetryService,
12445
12454
  TELEMETRY_TRACEPARENT_ENV,
12446
12455
  TELEMETRY_SPAN_ID_PROPERTY,
12447
- TELEMETRY_SESSION_ID_PROPERTY,
12456
+ TELEMETRY_SESSION_SOURCE_PROPERTY,
12448
12457
  TELEMETRY_SESSION_ID_ENV,
12449
12458
  TELEMETRY_PARENT_ID_PROPERTY,
12450
12459
  TELEMETRY_OPERATION_ID_PROPERTY,
@@ -12483,4 +12492,4 @@ export {
12483
12492
  ATTACHMENT_INSTRUCTIONS
12484
12493
  };
12485
12494
 
12486
- //# debugId=0104AD30EA6F6A7264756E2164756E21
12495
+ //# debugId=A6FFEE2DBE9CEE7564756E2164756E21
@@ -5,7 +5,7 @@ export type { IContextStorage } from "./context-storage.js";
5
5
  export { buildEnvironmentProperties, type NormalizedEnvironment, normalizeBaseUrl, normalizeEnvironment, } from "./environment-info.js";
6
6
  export { type CiProvider, detectExecutionContext, EXECUTION_CONTEXT_VALUES, type ExecutionContext, type ExecutionContextDetection, type ExecutionContextDetectionOptions, getExecutionContextTelemetryProperties, setExecutionContextAuthSignal, } from "./execution-context.js";
7
7
  export { redactError, redactProperties, redactProperty, redactValue, } from "./pii-redactor.js";
8
- export { getConfiguredTelemetrySessionId, getTelemetrySessionId, resolveTelemetrySessionId, TELEMETRY_SESSION_ID_ENV, TELEMETRY_SESSION_ID_PROPERTY, } from "./session-id.js";
8
+ export { getConfiguredTelemetrySessionId, getTelemetrySessionId, getTelemetrySessionSource, TELEMETRY_SESSION_ID_ENV, TELEMETRY_SESSION_SOURCE_PROPERTY, } from "./session-id.js";
9
9
  export type { ITelemetryProvider } from "./telemetry-provider.js";
10
10
  export type { ITelemetryService, TelemetryContext, TelemetryProperties, } from "./telemetry-service.js";
11
11
  export { TELEMETRY_OPERATION_ID_PROPERTY, TELEMETRY_PARENT_ID_PROPERTY, TELEMETRY_SPAN_ID_PROPERTY, TelemetryService, } from "./telemetry-service.js";
@@ -588,8 +588,18 @@ function getInboundTraceContext() {
588
588
 
589
589
  // src/telemetry/session-id.ts
590
590
  var TELEMETRY_SESSION_ID_ENV = "UIPATH_SESSION_ID";
591
- var TELEMETRY_SESSION_ID_PROPERTY = "session_id";
592
- var telemetrySessionIdSlot = singleton("TelemetrySessionId");
591
+ var SESSION_ID_MAX_LENGTH = 64;
592
+ var RANDOM_SESSION_ID_LENGTH = 32;
593
+ var TELEMETRY_SESSION_SOURCE_PROPERTY = "session_id_source";
594
+ var CONTROL_CHARACTERS = /\p{Cc}/gu;
595
+ var INHERITED_SESSION_SOURCES = [
596
+ { envVar: "CLAUDE_CODE_SESSION_ID", source: "claude-code" },
597
+ { envVar: "CODEX_THREAD_ID", source: "codex" },
598
+ { envVar: "ANTIGRAVITY_TRAJECTORY_ID", source: "antigravity" },
599
+ { envVar: "TERM_SESSION_ID", source: "terminal" },
600
+ { envVar: "WT_SESSION", source: "terminal" }
601
+ ];
602
+ var telemetrySessionSlot = singleton("TelemetrySession");
593
603
  var telemetryOperationIdSlot = singleton("TelemetryOperationId");
594
604
  function getProcessEnv2() {
595
605
  return globalThis.process?.env;
@@ -598,27 +608,45 @@ function normalizeSessionId(value) {
598
608
  if (typeof value !== "string" && typeof value !== "number" && typeof value !== "boolean") {
599
609
  return;
600
610
  }
601
- const trimmed = String(value).trim();
602
- return trimmed || undefined;
611
+ const cleaned = String(value).replace(CONTROL_CHARACTERS, "").trim().slice(0, SESSION_ID_MAX_LENGTH);
612
+ return cleaned || undefined;
603
613
  }
604
614
  function getConfiguredTelemetrySessionId() {
605
615
  return normalizeSessionId(getProcessEnv2()?.[TELEMETRY_SESSION_ID_ENV]);
606
616
  }
607
- function getTelemetrySessionId() {
608
- const envSessionId = getConfiguredTelemetrySessionId();
609
- if (envSessionId) {
610
- return envSessionId;
617
+ function getInheritedSession(env) {
618
+ for (const candidate of INHERITED_SESSION_SOURCES) {
619
+ const handle = normalizeSessionId(env[candidate.envVar]);
620
+ if (handle) {
621
+ return { id: handle, source: candidate.source };
622
+ }
623
+ }
624
+ return;
625
+ }
626
+ function generateRandomSession() {
627
+ const bytes = new Uint8Array(RANDOM_SESSION_ID_LENGTH / 2);
628
+ crypto.getRandomValues(bytes);
629
+ let hex = "";
630
+ for (const byte of bytes) {
631
+ hex += byte.toString(16).padStart(2, "0");
611
632
  }
612
- const existing = telemetrySessionIdSlot.get();
633
+ return { id: hex, source: "random" };
634
+ }
635
+ function resolveTelemetrySession() {
636
+ const existing = telemetrySessionSlot.get();
613
637
  if (existing) {
614
638
  return existing;
615
639
  }
616
- const generated = crypto.randomUUID();
617
- telemetrySessionIdSlot.set(generated);
618
- return generated;
640
+ const declaredHandle = getConfiguredTelemetrySessionId();
641
+ const resolved = declaredHandle ? { id: declaredHandle, source: "declared" } : getInheritedSession(getProcessEnv2() ?? {}) ?? generateRandomSession();
642
+ telemetrySessionSlot.set(resolved);
643
+ return resolved;
644
+ }
645
+ function getTelemetrySessionId() {
646
+ return resolveTelemetrySession().id;
619
647
  }
620
- function resolveTelemetrySessionId(existingSessionId) {
621
- return getConfiguredTelemetrySessionId() ?? normalizeSessionId(existingSessionId);
648
+ function getTelemetrySessionSource() {
649
+ return resolveTelemetrySession().source;
622
650
  }
623
651
  function getTelemetryOperationId() {
624
652
  const existing = telemetryOperationIdSlot.get();
@@ -762,24 +790,18 @@ class TelemetryService {
762
790
  }
763
791
  enrichPropertiesWithContext(properties, context) {
764
792
  const globalProperties = getGlobalTelemetryProperties();
765
- const existingSessionId = properties?.[TELEMETRY_SESSION_ID_PROPERTY] ?? this.defaultProperties?.[TELEMETRY_SESSION_ID_PROPERTY] ?? globalProperties?.[TELEMETRY_SESSION_ID_PROPERTY];
766
- const sessionId = resolveTelemetrySessionId(existingSessionId);
767
793
  const enriched = {
768
794
  ...getExecutionContextTelemetryProperties(),
769
795
  ...globalProperties,
770
796
  ...this.defaultProperties,
771
797
  ...redactProperties(properties ?? {}),
798
+ [TELEMETRY_SESSION_SOURCE_PROPERTY]: getTelemetrySessionSource(),
772
799
  ...context ? {
773
800
  [TELEMETRY_OPERATION_ID_PROPERTY]: context.operationId,
774
801
  ...context.parentId !== undefined ? { [TELEMETRY_PARENT_ID_PROPERTY]: context.parentId } : {},
775
802
  [TELEMETRY_SPAN_ID_PROPERTY]: context.id
776
803
  } : {}
777
804
  };
778
- if (sessionId === undefined) {
779
- delete enriched[TELEMETRY_SESSION_ID_PROPERTY];
780
- } else {
781
- enriched[TELEMETRY_SESSION_ID_PROPERTY] = sessionId;
782
- }
783
805
  return enriched;
784
806
  }
785
807
  generateId() {
@@ -797,7 +819,6 @@ class TelemetryService {
797
819
  }
798
820
  export {
799
821
  setExecutionContextAuthSignal,
800
- resolveTelemetrySessionId,
801
822
  redactValue,
802
823
  redactProperty,
803
824
  redactProperties,
@@ -805,6 +826,7 @@ export {
805
826
  normalizeSkillName,
806
827
  normalizeEnvironment,
807
828
  normalizeBaseUrl,
829
+ getTelemetrySessionSource,
808
830
  getTelemetrySessionId,
809
831
  getExecutionContextTelemetryProperties,
810
832
  getConfiguredTelemetrySessionId,
@@ -814,7 +836,7 @@ export {
814
836
  buildCommandTelemetryAttribution,
815
837
  TelemetryService,
816
838
  TELEMETRY_SPAN_ID_PROPERTY,
817
- TELEMETRY_SESSION_ID_PROPERTY,
839
+ TELEMETRY_SESSION_SOURCE_PROPERTY,
818
840
  TELEMETRY_SESSION_ID_ENV,
819
841
  TELEMETRY_PARENT_ID_PROPERTY,
820
842
  TELEMETRY_OPERATION_ID_PROPERTY,
@@ -823,4 +845,4 @@ export {
823
845
  BrowserContextStorage
824
846
  };
825
847
 
826
- //# debugId=0CFD50D10461DCC664756E2164756E21
848
+ //# debugId=F57500BAC82BA8E664756E2164756E21
@@ -43,18 +43,6 @@ export declare class NodeAppInsightsTelemetryProvider implements ITelemetryProvi
43
43
  * inside a scope.
44
44
  */
45
45
  private consumeCorrelation;
46
- /**
47
- * Promote a `session_id` custom dimension onto the native `ai.session.id`
48
- * context tag and strip it from the dimension bag. Session belongs in the
49
- * native session tag — the App Insights Sessions blade reads it there — so
50
- * shipping it as a custom dimension too is redundant and drifts (the raw
51
- * tag vs. a redactor-hashed dimension). Only the AppInsights provider does
52
- * this; fallback providers (logger/console) keep `session_id` as a
53
- * dimension, since they have no native session field.
54
- *
55
- * `merged` is a fresh per-call object, so deleting in place is safe.
56
- */
57
- private promoteSessionTag;
58
46
  /**
59
47
  * Native correlation tags for a LEAF item (event/exception). It has no item
60
48
  * id of its own, so it nests under the current operation: `operation_Id` is
@@ -4,7 +4,7 @@ export { detectAgent, detectAgentVersion } from "./detect-agent.js";
4
4
  export { buildEnvironmentProperties, type NormalizedEnvironment, normalizeBaseUrl, normalizeEnvironment, } from "./environment-info.js";
5
5
  export { type CiProvider, detectExecutionContext, EXECUTION_CONTEXT_VALUES, type ExecutionContext, type ExecutionContextDetection, type ExecutionContextDetectionOptions, getExecutionContextTelemetryProperties, setExecutionContextAuthSignal, } from "./execution-context.js";
6
6
  export { NodeContextStorage } from "./node-context-storage.js";
7
- export { getConfiguredTelemetrySessionId, getTelemetrySessionId, resolveTelemetrySessionId, TELEMETRY_SESSION_ID_ENV, TELEMETRY_SESSION_ID_PROPERTY, } from "./session-id.js";
7
+ export { getConfiguredTelemetrySessionId, getTelemetrySessionId, getTelemetrySessionSource, TELEMETRY_SESSION_ID_ENV, TELEMETRY_SESSION_SOURCE_PROPERTY, } from "./session-id.js";
8
8
  export type { ITelemetryProvider } from "./telemetry-provider.js";
9
9
  export type { ITelemetryService, TelemetryContext, TelemetryProperties, } from "./telemetry-service.js";
10
10
  export { TELEMETRY_OPERATION_ID_PROPERTY, TELEMETRY_PARENT_ID_PROPERTY, TELEMETRY_SPAN_ID_PROPERTY, TelemetryService, } from "./telemetry-service.js";
@@ -1,15 +1,61 @@
1
1
  export declare const TELEMETRY_SESSION_ID_ENV = "UIPATH_SESSION_ID";
2
- export declare const TELEMETRY_SESSION_ID_PROPERTY = "session_id";
2
+ /**
3
+ * Hard ceiling on the emitted session id. App Insights caps `ai.session.id` at
4
+ * 64 characters and truncates past it silently, so the CLI cuts to the same
5
+ * limit itself rather than shipping a value the backend will quietly reshape.
6
+ *
7
+ * Two handles that share their first 64 characters therefore collapse into one
8
+ * session. Accepted: no observed host exports a handle anywhere near this long
9
+ * (every one of them is a UUID or shorter), and hashing to dodge it would make
10
+ * every id opaque — a host could no longer find its own `UIPATH_SESSION_ID` in
11
+ * the data.
12
+ */
13
+ export declare const SESSION_ID_MAX_LENGTH = 64;
14
+ /** Width of the minted fallback id when no host handle exists. */
15
+ export declare const RANDOM_SESSION_ID_LENGTH = 32;
16
+ /**
17
+ * Custom dimension naming which handle the session id came from. A `terminal`
18
+ * session is not comparable to a `claude-code` one (see the Session Id section
19
+ * of TELEMETRY_GUIDE.md), and the id alone does not say which it is — the
20
+ * handles pass through as the host exported them, with no source marker. Low
21
+ * cardinality by construction: one of {@link TelemetrySessionSource}.
22
+ */
23
+ export declare const TELEMETRY_SESSION_SOURCE_PROPERTY = "session_id_source";
24
+ /**
25
+ * Where a session id came from — the value of the
26
+ * {@link TELEMETRY_SESSION_SOURCE_PROPERTY} dimension.
27
+ *
28
+ * - `declared`: the host set `UIPATH_SESSION_ID` on purpose. The only boundary
29
+ * someone chose; everything else is inferred.
30
+ * - `claude-code` / `codex` / `antigravity`: one agent conversation.
31
+ * - `terminal`: a terminal tab or pane, which can stay open for weeks and
32
+ * splits when the user splits a pane.
33
+ * - `random`: no host handle at all, so one CLI process.
34
+ */
35
+ export type TelemetrySessionSource = "declared" | "claude-code" | "codex" | "antigravity" | "terminal" | "random";
36
+ /**
37
+ * The `UIPATH_SESSION_ID` handle as the host exported it (trimmed, control
38
+ * characters stripped, cut to {@link SESSION_ID_MAX_LENGTH}), or undefined when
39
+ * unset. Same value {@link getTelemetrySessionId} emits when it is set.
40
+ */
3
41
  export declare function getConfiguredTelemetrySessionId(): string | undefined;
4
42
  /**
5
- * Resolve the telemetry session id used by App Insights session tags.
43
+ * Resolve the session id for App Insights' native `ai.session.id` tag. Session
44
+ * lives on that tag and nowhere else — no custom dimension mirrors it.
6
45
  *
7
- * Coding-agent hosts can set UIPATH_SESSION_ID to correlate separate CLI
8
- * invocations. When unset, use one process-local fallback shared across
9
- * bundled copies of @uipath/common.
46
+ * The id is the host's handle verbatim, so a host that exports
47
+ * `UIPATH_SESSION_ID` can find its own sessions by that literal value. Which
48
+ * handle produced it rides the {@link TELEMETRY_SESSION_SOURCE_PROPERTY}
49
+ * dimension, since the id itself carries no source marker — the same string
50
+ * exported as `TERM_SESSION_ID` and as `UIPATH_SESSION_ID` is one id on two
51
+ * sources.
10
52
  */
11
53
  export declare function getTelemetrySessionId(): string;
12
- export declare function resolveTelemetrySessionId(existingSessionId: unknown): string | undefined;
54
+ /**
55
+ * Which handle this process's session id came from — emitted on every telemetry
56
+ * item as {@link TELEMETRY_SESSION_SOURCE_PROPERTY}.
57
+ */
58
+ export declare function getTelemetrySessionSource(): TelemetrySessionSource;
13
59
  /**
14
60
  * Resolve the per-invocation operation id used for App Insights' native
15
61
  * `operation_Id` tag.
@@ -24,8 +70,7 @@ export declare function resolveTelemetrySessionId(existingSessionId: unknown): s
24
70
  * transaction and with the API telemetry it triggers.
25
71
  *
26
72
  * The value is a 32-hex string (a UUID with dashes stripped). That is the shape
27
- * App Insights expects for `operation_Id`, and unlike the UUID-shaped session
28
- * id — it is left untouched by the PII redactor, so the emitted value matches
29
- * raw on every path.
73
+ * App Insights expects for `operation_Id`, and it is left untouched by the PII
74
+ * redactor, so the emitted value matches raw on every path.
30
75
  */
31
76
  export declare function getTelemetryOperationId(): string;
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@uipath/common",
3
3
  "license": "MIT",
4
- "version": "1.199.0-preview.99",
4
+ "version": "1.199.0",
5
5
  "description": "Common infrastructure needed by uip tools.",
6
6
  "repository": {
7
7
  "type": "git",
@@ -67,5 +67,5 @@
67
67
  "mihaigirleanu",
68
68
  "vlad-uipath"
69
69
  ],
70
- "gitHead": "6ba217cddceb86e3fa39ed82e49c5062878a85c6"
70
+ "gitHead": "723e6801b77b5926ba75e75b6a756cc38b1b7adc"
71
71
  }