@uipath/llmgw-tool 1.199.0-preview.91 → 1.199.0-preview.97
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.
- package/dist/tool.js +257 -150
- package/package.json +2 -2
package/dist/tool.js
CHANGED
|
@@ -4,7 +4,7 @@ var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
|
4
4
|
var package_default = {
|
|
5
5
|
name: "@uipath/llmgw-tool",
|
|
6
6
|
license: "MIT",
|
|
7
|
-
version: "1.199.0-preview.
|
|
7
|
+
version: "1.199.0-preview.97",
|
|
8
8
|
description: "CLI plugin for UiPath AI Trust Layer Bring-Your-Own LLM connections.",
|
|
9
9
|
private: false,
|
|
10
10
|
repository: {
|
|
@@ -7010,11 +7010,36 @@ class NodeContextStorage {
|
|
|
7010
7010
|
return this.storage.getStore();
|
|
7011
7011
|
}
|
|
7012
7012
|
}
|
|
7013
|
+
// ../../common/src/telemetry/trace-context.ts
|
|
7014
|
+
var TELEMETRY_TRACEPARENT_ENV = "TRACEPARENT";
|
|
7015
|
+
var TRACEPARENT_PATTERN = /^00-([0-9a-f]{32})-([0-9a-f]{16})-[0-9a-f]{2}$/;
|
|
7016
|
+
function getProcessEnv() {
|
|
7017
|
+
return globalThis.process?.env;
|
|
7018
|
+
}
|
|
7019
|
+
function parseInboundTraceparent(value) {
|
|
7020
|
+
if (!value) {
|
|
7021
|
+
return;
|
|
7022
|
+
}
|
|
7023
|
+
const match = TRACEPARENT_PATTERN.exec(value.trim().toLowerCase());
|
|
7024
|
+
if (!match) {
|
|
7025
|
+
return;
|
|
7026
|
+
}
|
|
7027
|
+
const [, traceId, parentSpanId] = match;
|
|
7028
|
+
if (/^0+$/.test(traceId) || /^0+$/.test(parentSpanId)) {
|
|
7029
|
+
return;
|
|
7030
|
+
}
|
|
7031
|
+
return { traceId, parentSpanId };
|
|
7032
|
+
}
|
|
7033
|
+
function getInboundTraceContext() {
|
|
7034
|
+
return parseInboundTraceparent(getProcessEnv()?.[TELEMETRY_TRACEPARENT_ENV]);
|
|
7035
|
+
}
|
|
7036
|
+
|
|
7013
7037
|
// ../../common/src/telemetry/session-id.ts
|
|
7014
7038
|
var TELEMETRY_SESSION_ID_ENV = "UIPATH_SESSION_ID";
|
|
7015
7039
|
var TELEMETRY_SESSION_ID_PROPERTY = "session_id";
|
|
7016
7040
|
var telemetrySessionIdSlot = singleton("TelemetrySessionId");
|
|
7017
|
-
|
|
7041
|
+
var telemetryOperationIdSlot = singleton("TelemetryOperationId");
|
|
7042
|
+
function getProcessEnv2() {
|
|
7018
7043
|
return globalThis.process?.env;
|
|
7019
7044
|
}
|
|
7020
7045
|
function normalizeSessionId(value) {
|
|
@@ -7025,18 +7050,165 @@ function normalizeSessionId(value) {
|
|
|
7025
7050
|
return trimmed || undefined;
|
|
7026
7051
|
}
|
|
7027
7052
|
function getConfiguredTelemetrySessionId() {
|
|
7028
|
-
return normalizeSessionId(
|
|
7053
|
+
return normalizeSessionId(getProcessEnv2()?.[TELEMETRY_SESSION_ID_ENV]);
|
|
7029
7054
|
}
|
|
7030
7055
|
function resolveTelemetrySessionId(existingSessionId) {
|
|
7031
7056
|
return getConfiguredTelemetrySessionId() ?? normalizeSessionId(existingSessionId);
|
|
7032
7057
|
}
|
|
7058
|
+
function getTelemetryOperationId() {
|
|
7059
|
+
const existing = telemetryOperationIdSlot.get();
|
|
7060
|
+
if (existing) {
|
|
7061
|
+
return existing;
|
|
7062
|
+
}
|
|
7063
|
+
const inboundTraceId = getInboundTraceContext()?.traceId;
|
|
7064
|
+
const generated = inboundTraceId ?? crypto.randomUUID().replaceAll("-", "");
|
|
7065
|
+
telemetryOperationIdSlot.set(generated);
|
|
7066
|
+
return generated;
|
|
7067
|
+
}
|
|
7033
7068
|
// ../../common/src/telemetry/global-telemetry-properties.ts
|
|
7034
7069
|
var telemetryPropsSlot = singleton("TelemetryDefaultProps");
|
|
7035
7070
|
function getGlobalTelemetryProperties() {
|
|
7036
7071
|
return telemetryPropsSlot.get();
|
|
7037
7072
|
}
|
|
7038
7073
|
|
|
7074
|
+
// ../../common/src/telemetry/pii-redactor.ts
|
|
7075
|
+
var REDACTED = "[REDACTED]";
|
|
7076
|
+
var MAX_VALUE_LENGTH = 200;
|
|
7077
|
+
var SENSITIVE_NAME_TOKENS = new Set([
|
|
7078
|
+
"token",
|
|
7079
|
+
"tokens",
|
|
7080
|
+
"secret",
|
|
7081
|
+
"secrets",
|
|
7082
|
+
"password",
|
|
7083
|
+
"passwords",
|
|
7084
|
+
"pwd",
|
|
7085
|
+
"credential",
|
|
7086
|
+
"credentials",
|
|
7087
|
+
"auth",
|
|
7088
|
+
"authentication",
|
|
7089
|
+
"authorization",
|
|
7090
|
+
"authority",
|
|
7091
|
+
"cert",
|
|
7092
|
+
"certificate",
|
|
7093
|
+
"certificates"
|
|
7094
|
+
]);
|
|
7095
|
+
var SENSITIVE_KEY_PREFIXES = new Set([
|
|
7096
|
+
"api",
|
|
7097
|
+
"access",
|
|
7098
|
+
"client",
|
|
7099
|
+
"private",
|
|
7100
|
+
"public",
|
|
7101
|
+
"signing",
|
|
7102
|
+
"encryption",
|
|
7103
|
+
"session",
|
|
7104
|
+
"master",
|
|
7105
|
+
"shared",
|
|
7106
|
+
"root",
|
|
7107
|
+
"ssh",
|
|
7108
|
+
"rsa",
|
|
7109
|
+
"aes",
|
|
7110
|
+
"hmac",
|
|
7111
|
+
"oauth"
|
|
7112
|
+
]);
|
|
7113
|
+
var UUID_PATTERN = /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi;
|
|
7114
|
+
var EMAIL_PATTERN = /\b[^\s@]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g;
|
|
7115
|
+
var JWT_PATTERN = /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g;
|
|
7116
|
+
var LONG_TOKEN_PATTERN = /\b[A-Za-z0-9_-]{40,}\b/g;
|
|
7117
|
+
var USER_HOME_PATTERN = /([/\\])(Users|home)([/\\])([^/\\]+)/gi;
|
|
7118
|
+
var URL_PATTERN = /\bhttps?:\/\/[^\s,;]+/gi;
|
|
7119
|
+
var URL_TRAILING_PUNCT = /[.,;:!?)\]}>'"]+$/;
|
|
7120
|
+
function shortHash(input) {
|
|
7121
|
+
let hash = 2166136261;
|
|
7122
|
+
for (let i = 0;i < input.length; i++) {
|
|
7123
|
+
hash ^= input.charCodeAt(i);
|
|
7124
|
+
hash = Math.imul(hash, 16777619);
|
|
7125
|
+
}
|
|
7126
|
+
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
7127
|
+
}
|
|
7128
|
+
function redactUrl(raw) {
|
|
7129
|
+
try {
|
|
7130
|
+
const url = new URL(raw);
|
|
7131
|
+
return `${url.protocol}//${url.host}`;
|
|
7132
|
+
} catch {
|
|
7133
|
+
return `url#${shortHash(raw)}`;
|
|
7134
|
+
}
|
|
7135
|
+
}
|
|
7136
|
+
function redactValueDetectors(value) {
|
|
7137
|
+
let out = value;
|
|
7138
|
+
out = out.replace(JWT_PATTERN, () => REDACTED);
|
|
7139
|
+
out = out.replace(URL_PATTERN, (match) => {
|
|
7140
|
+
const trailing = match.match(URL_TRAILING_PUNCT)?.[0] ?? "";
|
|
7141
|
+
const core2 = trailing ? match.slice(0, -trailing.length) : match;
|
|
7142
|
+
return `${redactUrl(core2)}${trailing}`;
|
|
7143
|
+
});
|
|
7144
|
+
out = out.replace(USER_HOME_PATTERN, (_match, sep1, folder, sep2) => `${sep1}${folder}${sep2}<user>`);
|
|
7145
|
+
out = out.replace(EMAIL_PATTERN, (match) => `email#${shortHash(match)}`);
|
|
7146
|
+
out = out.replace(UUID_PATTERN, (match) => `uuid#${shortHash(match)}`);
|
|
7147
|
+
out = out.replace(LONG_TOKEN_PATTERN, () => REDACTED);
|
|
7148
|
+
if (out.length > MAX_VALUE_LENGTH) {
|
|
7149
|
+
out = `${out.slice(0, MAX_VALUE_LENGTH)}…`;
|
|
7150
|
+
}
|
|
7151
|
+
return out;
|
|
7152
|
+
}
|
|
7153
|
+
function redactValue(value) {
|
|
7154
|
+
return redactValueDetectors(value);
|
|
7155
|
+
}
|
|
7156
|
+
function redactError(error) {
|
|
7157
|
+
const safe = new Error(redactValueDetectors(error.message ?? ""));
|
|
7158
|
+
safe.name = error.name;
|
|
7159
|
+
safe.stack = typeof error.stack === "string" ? redactValueDetectors(error.stack) : undefined;
|
|
7160
|
+
return safe;
|
|
7161
|
+
}
|
|
7162
|
+
function nameTokens(name) {
|
|
7163
|
+
return name.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").split(/[\s._-]+/).map((t) => t.toLowerCase()).filter(Boolean);
|
|
7164
|
+
}
|
|
7165
|
+
function isSensitiveName(name) {
|
|
7166
|
+
const tokens = nameTokens(name);
|
|
7167
|
+
for (let i = 0;i < tokens.length; i++) {
|
|
7168
|
+
const token = tokens[i];
|
|
7169
|
+
if (SENSITIVE_NAME_TOKENS.has(token)) {
|
|
7170
|
+
return true;
|
|
7171
|
+
}
|
|
7172
|
+
if (token === "key" || token === "keys") {
|
|
7173
|
+
const prev = tokens[i - 1];
|
|
7174
|
+
if (prev && SENSITIVE_KEY_PREFIXES.has(prev)) {
|
|
7175
|
+
return true;
|
|
7176
|
+
}
|
|
7177
|
+
}
|
|
7178
|
+
}
|
|
7179
|
+
return false;
|
|
7180
|
+
}
|
|
7181
|
+
function redactProperty(name, value) {
|
|
7182
|
+
if (value === undefined || value === null) {
|
|
7183
|
+
return;
|
|
7184
|
+
}
|
|
7185
|
+
if (isSensitiveName(name)) {
|
|
7186
|
+
return REDACTED;
|
|
7187
|
+
}
|
|
7188
|
+
if (typeof value === "boolean" || typeof value === "number") {
|
|
7189
|
+
return value;
|
|
7190
|
+
}
|
|
7191
|
+
if (typeof value !== "string") {
|
|
7192
|
+
return "[OBJECT]";
|
|
7193
|
+
}
|
|
7194
|
+
return redactValueDetectors(value);
|
|
7195
|
+
}
|
|
7196
|
+
function redactProperties(properties) {
|
|
7197
|
+
const out = {};
|
|
7198
|
+
for (const [name, value] of Object.entries(properties)) {
|
|
7199
|
+
const redacted = redactProperty(name, value);
|
|
7200
|
+
if (redacted !== undefined) {
|
|
7201
|
+
out[name] = redacted;
|
|
7202
|
+
}
|
|
7203
|
+
}
|
|
7204
|
+
return out;
|
|
7205
|
+
}
|
|
7206
|
+
|
|
7039
7207
|
// ../../common/src/telemetry/telemetry-service.ts
|
|
7208
|
+
var TELEMETRY_OPERATION_ID_PROPERTY = "uip.trace.operation_id";
|
|
7209
|
+
var TELEMETRY_PARENT_ID_PROPERTY = "uip.trace.parent_id";
|
|
7210
|
+
var TELEMETRY_SPAN_ID_PROPERTY = "uip.trace.span_id";
|
|
7211
|
+
|
|
7040
7212
|
class TelemetryService {
|
|
7041
7213
|
telemetryProvider;
|
|
7042
7214
|
contextStorage;
|
|
@@ -7063,11 +7235,15 @@ class TelemetryService {
|
|
|
7063
7235
|
trackException(error, properties) {
|
|
7064
7236
|
const context = this.getCurrentContext();
|
|
7065
7237
|
const enrichedProperties = this.enrichPropertiesWithContext(properties, context);
|
|
7066
|
-
this.telemetryProvider.trackException(error, enrichedProperties);
|
|
7238
|
+
this.telemetryProvider.trackException(redactError(error), enrichedProperties);
|
|
7067
7239
|
}
|
|
7068
7240
|
async trackRequest(name, fn, properties) {
|
|
7241
|
+
const parentContext = this.getCurrentContext();
|
|
7242
|
+
const operationId = parentContext?.operationId ?? this.operationId ?? getTelemetryOperationId();
|
|
7243
|
+
const parentId = parentContext ? parentContext.id : this.inboundParentIdFor(operationId);
|
|
7069
7244
|
const context = {
|
|
7070
|
-
operationId
|
|
7245
|
+
operationId,
|
|
7246
|
+
...parentId !== undefined ? { parentId } : {},
|
|
7071
7247
|
id: this.generateId()
|
|
7072
7248
|
};
|
|
7073
7249
|
const startTime = performance.now();
|
|
@@ -7085,6 +7261,45 @@ class TelemetryService {
|
|
|
7085
7261
|
throw error;
|
|
7086
7262
|
}
|
|
7087
7263
|
}
|
|
7264
|
+
trackRequestResult(name, durationMs, success, properties, context) {
|
|
7265
|
+
const requestContext = context ?? {
|
|
7266
|
+
operationId: this.operationId ?? getTelemetryOperationId(),
|
|
7267
|
+
id: this.generateId()
|
|
7268
|
+
};
|
|
7269
|
+
const enrichedProperties = this.enrichPropertiesWithContext(properties, requestContext);
|
|
7270
|
+
this.telemetryProvider.trackRequest(name, durationMs, success, enrichedProperties);
|
|
7271
|
+
}
|
|
7272
|
+
createRequestContext() {
|
|
7273
|
+
const operationId = this.operationId ?? getTelemetryOperationId();
|
|
7274
|
+
const parentId = this.inboundParentIdFor(operationId);
|
|
7275
|
+
return {
|
|
7276
|
+
operationId,
|
|
7277
|
+
...parentId !== undefined ? { parentId } : {},
|
|
7278
|
+
id: this.generateId()
|
|
7279
|
+
};
|
|
7280
|
+
}
|
|
7281
|
+
inboundParentIdFor(operationId) {
|
|
7282
|
+
const inbound = getInboundTraceContext();
|
|
7283
|
+
return inbound && inbound.traceId === operationId ? inbound.parentSpanId : undefined;
|
|
7284
|
+
}
|
|
7285
|
+
runWithContext(context, fn) {
|
|
7286
|
+
return this.contextStorage.run(context, fn);
|
|
7287
|
+
}
|
|
7288
|
+
createDependencyContext() {
|
|
7289
|
+
const parentContext = this.getCurrentContext();
|
|
7290
|
+
if (!parentContext) {
|
|
7291
|
+
return;
|
|
7292
|
+
}
|
|
7293
|
+
return {
|
|
7294
|
+
operationId: parentContext.operationId,
|
|
7295
|
+
parentId: parentContext.id,
|
|
7296
|
+
id: this.generateId()
|
|
7297
|
+
};
|
|
7298
|
+
}
|
|
7299
|
+
trackDependencyResult(name, type2, durationMs, success, properties, context, resultCode) {
|
|
7300
|
+
const enrichedProperties = this.enrichPropertiesWithContext(properties, context);
|
|
7301
|
+
this.telemetryProvider.trackDependency(redactValue(name), type2, durationMs, success, enrichedProperties, resultCode);
|
|
7302
|
+
}
|
|
7088
7303
|
async trackDependencyOperation(name, type2, fn, properties) {
|
|
7089
7304
|
const parentContext = this.getCurrentContext();
|
|
7090
7305
|
if (!parentContext) {
|
|
@@ -7121,8 +7336,12 @@ class TelemetryService {
|
|
|
7121
7336
|
...getExecutionContextTelemetryProperties(),
|
|
7122
7337
|
...globalProperties,
|
|
7123
7338
|
...this.defaultProperties,
|
|
7124
|
-
...properties,
|
|
7125
|
-
...context
|
|
7339
|
+
...redactProperties(properties ?? {}),
|
|
7340
|
+
...context ? {
|
|
7341
|
+
[TELEMETRY_OPERATION_ID_PROPERTY]: context.operationId,
|
|
7342
|
+
...context.parentId !== undefined ? { [TELEMETRY_PARENT_ID_PROPERTY]: context.parentId } : {},
|
|
7343
|
+
[TELEMETRY_SPAN_ID_PROPERTY]: context.id
|
|
7344
|
+
} : {}
|
|
7126
7345
|
};
|
|
7127
7346
|
if (sessionId === undefined) {
|
|
7128
7347
|
delete enriched[TELEMETRY_SESSION_ID_PROPERTY];
|
|
@@ -7132,7 +7351,16 @@ class TelemetryService {
|
|
|
7132
7351
|
return enriched;
|
|
7133
7352
|
}
|
|
7134
7353
|
generateId() {
|
|
7135
|
-
|
|
7354
|
+
const bytes = new Uint8Array(8);
|
|
7355
|
+
let hex = "";
|
|
7356
|
+
do {
|
|
7357
|
+
crypto.getRandomValues(bytes);
|
|
7358
|
+
hex = "";
|
|
7359
|
+
for (const byte of bytes) {
|
|
7360
|
+
hex += byte.toString(16).padStart(2, "0");
|
|
7361
|
+
}
|
|
7362
|
+
} while (/^0+$/.test(hex));
|
|
7363
|
+
return hex;
|
|
7136
7364
|
}
|
|
7137
7365
|
}
|
|
7138
7366
|
// ../../common/src/telemetry/node-appinsights-telemetry-provider.ts
|
|
@@ -7838,134 +8066,11 @@ function buildCommandTelemetryAttribution(commandPath, skillSource) {
|
|
|
7838
8066
|
};
|
|
7839
8067
|
}
|
|
7840
8068
|
|
|
7841
|
-
// ../../common/src/telemetry/pii-redactor.ts
|
|
7842
|
-
var REDACTED = "[REDACTED]";
|
|
7843
|
-
var MAX_VALUE_LENGTH = 200;
|
|
7844
|
-
var SENSITIVE_NAME_TOKENS = new Set([
|
|
7845
|
-
"token",
|
|
7846
|
-
"tokens",
|
|
7847
|
-
"secret",
|
|
7848
|
-
"secrets",
|
|
7849
|
-
"password",
|
|
7850
|
-
"passwords",
|
|
7851
|
-
"pwd",
|
|
7852
|
-
"credential",
|
|
7853
|
-
"credentials",
|
|
7854
|
-
"auth",
|
|
7855
|
-
"authentication",
|
|
7856
|
-
"authorization",
|
|
7857
|
-
"authority",
|
|
7858
|
-
"cert",
|
|
7859
|
-
"certificate",
|
|
7860
|
-
"certificates"
|
|
7861
|
-
]);
|
|
7862
|
-
var SENSITIVE_KEY_PREFIXES = new Set([
|
|
7863
|
-
"api",
|
|
7864
|
-
"access",
|
|
7865
|
-
"client",
|
|
7866
|
-
"private",
|
|
7867
|
-
"public",
|
|
7868
|
-
"signing",
|
|
7869
|
-
"encryption",
|
|
7870
|
-
"session",
|
|
7871
|
-
"master",
|
|
7872
|
-
"shared",
|
|
7873
|
-
"root",
|
|
7874
|
-
"ssh",
|
|
7875
|
-
"rsa",
|
|
7876
|
-
"aes",
|
|
7877
|
-
"hmac",
|
|
7878
|
-
"oauth"
|
|
7879
|
-
]);
|
|
7880
|
-
var UUID_PATTERN = /\b[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}\b/gi;
|
|
7881
|
-
var EMAIL_PATTERN = /\b[^\s@]+@[A-Za-z0-9.-]+\.[A-Za-z]{2,}\b/g;
|
|
7882
|
-
var JWT_PATTERN = /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]+\.[A-Za-z0-9_-]+/g;
|
|
7883
|
-
var LONG_TOKEN_PATTERN = /\b[A-Za-z0-9_-]{40,}\b/g;
|
|
7884
|
-
var USER_HOME_PATTERN = /([/\\])(Users|home)([/\\])([^/\\]+)/gi;
|
|
7885
|
-
var URL_PATTERN = /\bhttps?:\/\/[^\s,;]+/gi;
|
|
7886
|
-
var URL_TRAILING_PUNCT = /[.,;:!?)\]}>'"]+$/;
|
|
7887
|
-
function shortHash(input) {
|
|
7888
|
-
let hash = 2166136261;
|
|
7889
|
-
for (let i = 0;i < input.length; i++) {
|
|
7890
|
-
hash ^= input.charCodeAt(i);
|
|
7891
|
-
hash = Math.imul(hash, 16777619);
|
|
7892
|
-
}
|
|
7893
|
-
return (hash >>> 0).toString(16).padStart(8, "0");
|
|
7894
|
-
}
|
|
7895
|
-
function redactUrl(raw) {
|
|
7896
|
-
try {
|
|
7897
|
-
const url = new URL(raw);
|
|
7898
|
-
return `${url.protocol}//${url.host}`;
|
|
7899
|
-
} catch {
|
|
7900
|
-
return `url#${shortHash(raw)}`;
|
|
7901
|
-
}
|
|
7902
|
-
}
|
|
7903
|
-
function redactValueDetectors(value) {
|
|
7904
|
-
let out = value;
|
|
7905
|
-
out = out.replace(JWT_PATTERN, () => REDACTED);
|
|
7906
|
-
out = out.replace(URL_PATTERN, (match) => {
|
|
7907
|
-
const trailing = match.match(URL_TRAILING_PUNCT)?.[0] ?? "";
|
|
7908
|
-
const core2 = trailing ? match.slice(0, -trailing.length) : match;
|
|
7909
|
-
return `${redactUrl(core2)}${trailing}`;
|
|
7910
|
-
});
|
|
7911
|
-
out = out.replace(USER_HOME_PATTERN, (_match, sep1, folder, sep2) => `${sep1}${folder}${sep2}<user>`);
|
|
7912
|
-
out = out.replace(EMAIL_PATTERN, (match) => `email#${shortHash(match)}`);
|
|
7913
|
-
out = out.replace(UUID_PATTERN, (match) => `uuid#${shortHash(match)}`);
|
|
7914
|
-
out = out.replace(LONG_TOKEN_PATTERN, () => REDACTED);
|
|
7915
|
-
if (out.length > MAX_VALUE_LENGTH) {
|
|
7916
|
-
out = `${out.slice(0, MAX_VALUE_LENGTH)}…`;
|
|
7917
|
-
}
|
|
7918
|
-
return out;
|
|
7919
|
-
}
|
|
7920
|
-
function nameTokens(name) {
|
|
7921
|
-
return name.replace(/([a-z0-9])([A-Z])/g, "$1 $2").replace(/([A-Z]+)([A-Z][a-z])/g, "$1 $2").split(/[\s_-]+/).map((t) => t.toLowerCase()).filter(Boolean);
|
|
7922
|
-
}
|
|
7923
|
-
function isSensitiveName(name) {
|
|
7924
|
-
const tokens = nameTokens(name);
|
|
7925
|
-
for (let i = 0;i < tokens.length; i++) {
|
|
7926
|
-
const token = tokens[i];
|
|
7927
|
-
if (SENSITIVE_NAME_TOKENS.has(token)) {
|
|
7928
|
-
return true;
|
|
7929
|
-
}
|
|
7930
|
-
if (token === "key" || token === "keys") {
|
|
7931
|
-
const prev = tokens[i - 1];
|
|
7932
|
-
if (prev && SENSITIVE_KEY_PREFIXES.has(prev)) {
|
|
7933
|
-
return true;
|
|
7934
|
-
}
|
|
7935
|
-
}
|
|
7936
|
-
}
|
|
7937
|
-
return false;
|
|
7938
|
-
}
|
|
7939
|
-
function redactProperty(name, value) {
|
|
7940
|
-
if (value === undefined || value === null) {
|
|
7941
|
-
return;
|
|
7942
|
-
}
|
|
7943
|
-
if (isSensitiveName(name)) {
|
|
7944
|
-
return REDACTED;
|
|
7945
|
-
}
|
|
7946
|
-
if (typeof value === "boolean" || typeof value === "number") {
|
|
7947
|
-
return value;
|
|
7948
|
-
}
|
|
7949
|
-
if (typeof value !== "string") {
|
|
7950
|
-
return "[OBJECT]";
|
|
7951
|
-
}
|
|
7952
|
-
return redactValueDetectors(value);
|
|
7953
|
-
}
|
|
7954
|
-
function redactProperties(properties) {
|
|
7955
|
-
const out = {};
|
|
7956
|
-
for (const [name, value] of Object.entries(properties)) {
|
|
7957
|
-
const redacted = redactProperty(name, value);
|
|
7958
|
-
if (redacted !== undefined) {
|
|
7959
|
-
out[name] = redacted;
|
|
7960
|
-
}
|
|
7961
|
-
}
|
|
7962
|
-
return out;
|
|
7963
|
-
}
|
|
7964
|
-
|
|
7965
8069
|
// ../../common/src/trackedAction.ts
|
|
7966
8070
|
var pollSignalSlot = singleton("PollSignal");
|
|
7967
8071
|
var cliErrorCodeValues = new Set(CLI_ERROR_CODES);
|
|
7968
8072
|
var retryHintValues = new Set(RETRY_HINTS);
|
|
8073
|
+
var TELEMETRY_COMMAND_ARG_PREFIX = "uip.cmd.arg.";
|
|
7969
8074
|
var processContext = {
|
|
7970
8075
|
exit: (code) => {
|
|
7971
8076
|
process.exitCode = code;
|
|
@@ -7976,22 +8081,18 @@ var processContext = {
|
|
|
7976
8081
|
};
|
|
7977
8082
|
function extractCommandParams(cmd) {
|
|
7978
8083
|
const params = {};
|
|
8084
|
+
const add2 = (name, value) => {
|
|
8085
|
+
if (name && value !== undefined) {
|
|
8086
|
+
params[`${TELEMETRY_COMMAND_ARG_PREFIX}${name}`] = value;
|
|
8087
|
+
}
|
|
8088
|
+
};
|
|
7979
8089
|
const registered = cmd.registeredArguments ?? [];
|
|
7980
8090
|
const processed = cmd.processedArgs ?? [];
|
|
7981
8091
|
for (let i = 0;i < registered.length; i++) {
|
|
7982
|
-
|
|
7983
|
-
if (value === undefined) {
|
|
7984
|
-
continue;
|
|
7985
|
-
}
|
|
7986
|
-
const name = registered[i].name();
|
|
7987
|
-
if (name) {
|
|
7988
|
-
params[name] = value;
|
|
7989
|
-
}
|
|
8092
|
+
add2(registered[i].name(), processed[i]);
|
|
7990
8093
|
}
|
|
7991
8094
|
for (const [key, value] of Object.entries(cmd.opts())) {
|
|
7992
|
-
|
|
7993
|
-
params[key] = value;
|
|
7994
|
-
}
|
|
8095
|
+
add2(key, value);
|
|
7995
8096
|
}
|
|
7996
8097
|
return params;
|
|
7997
8098
|
}
|
|
@@ -8034,11 +8135,12 @@ Command2.prototype.trackedAction = function(context, fn, properties) {
|
|
|
8034
8135
|
return this.action(async (...args) => {
|
|
8035
8136
|
const telemetryName = deriveCommandPath(command);
|
|
8036
8137
|
const props = typeof properties === "function" ? properties(...args) : properties;
|
|
8138
|
+
const requestContext = telemetry.createRequestContext();
|
|
8037
8139
|
const startTime = performance.now();
|
|
8038
8140
|
let errorMessage;
|
|
8039
8141
|
let fallbackExitCode = EXIT_CODES.Success;
|
|
8040
8142
|
clearRecordedCommandFailureTelemetry();
|
|
8041
|
-
const [error] = await catchError(fn(...args));
|
|
8143
|
+
const [error] = await catchError(telemetry.runWithContext(requestContext, () => fn(...args)));
|
|
8042
8144
|
if (error) {
|
|
8043
8145
|
errorMessage = error instanceof Error ? error.message : String(error);
|
|
8044
8146
|
logger.debug(`[trackedAction] ${telemetryName} failed: ${errorMessage}`);
|
|
@@ -8074,16 +8176,21 @@ Command2.prototype.trackedAction = function(context, fn, properties) {
|
|
|
8074
8176
|
recordedFailure,
|
|
8075
8177
|
pollSignal: context.pollSignal
|
|
8076
8178
|
});
|
|
8077
|
-
|
|
8078
|
-
|
|
8179
|
+
const commandParams = extractCommandParams(command);
|
|
8180
|
+
if (props) {
|
|
8181
|
+
for (const key of Object.keys(props)) {
|
|
8182
|
+
delete commandParams[`${TELEMETRY_COMMAND_ARG_PREFIX}${key}`];
|
|
8183
|
+
}
|
|
8184
|
+
}
|
|
8185
|
+
const baseProperties = redactProperties({
|
|
8186
|
+
...commandParams,
|
|
8079
8187
|
...props,
|
|
8080
8188
|
...buildCommandTelemetryAttribution(telemetryName, process.env.UIPATH_SKILL),
|
|
8081
8189
|
command: "true",
|
|
8082
|
-
duration: String(durationMs),
|
|
8083
|
-
success: String(success),
|
|
8084
8190
|
...terminalTelemetry,
|
|
8085
8191
|
...errorMessage ? { errorMessage } : {}
|
|
8086
|
-
})
|
|
8192
|
+
});
|
|
8193
|
+
telemetry.trackRequestResult(telemetryName, durationMs, success, baseProperties, requestContext);
|
|
8087
8194
|
});
|
|
8088
8195
|
};
|
|
8089
8196
|
// ../../common/src/console-guard.ts
|
|
@@ -29431,4 +29538,4 @@ export {
|
|
|
29431
29538
|
metadata
|
|
29432
29539
|
};
|
|
29433
29540
|
|
|
29434
|
-
//# debugId=
|
|
29541
|
+
//# debugId=37FD8082A5FC03A064756E2164756E21
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@uipath/llmgw-tool",
|
|
3
3
|
"license": "MIT",
|
|
4
|
-
"version": "1.199.0-preview.
|
|
4
|
+
"version": "1.199.0-preview.97",
|
|
5
5
|
"description": "CLI plugin for UiPath AI Trust Layer Bring-Your-Own LLM connections.",
|
|
6
6
|
"private": false,
|
|
7
7
|
"repository": {
|
|
@@ -23,5 +23,5 @@
|
|
|
23
23
|
"files": [
|
|
24
24
|
"dist"
|
|
25
25
|
],
|
|
26
|
-
"gitHead": "
|
|
26
|
+
"gitHead": "087ae21e842f27bde5eb0013892c9487bfe60568"
|
|
27
27
|
}
|