@sogni-ai/sogni-intelligence-client 3.27.4 → 3.27.6
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/replay/redact.d.ts.map +1 -1
- package/dist/replay/redact.js +32 -49
- package/dist/replay/redact.js.map +1 -1
- package/dist/replay/types.d.ts.map +1 -1
- package/dist/replay/types.js.map +1 -1
- package/dist-esm/replay/redact.js +32 -49
- package/dist-esm/replay/redact.js.map +1 -1
- package/dist-esm/replay/types.js.map +1 -1
- package/package.json +3 -3
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/replay/redact.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"redact.d.ts","sourceRoot":"","sources":["../../src/replay/redact.ts"],"names":[],"mappings":"AAUA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AAE5C,QAAA,MAAM,qBAAqB,eAAe,CAAC;AAwD3C,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAmBvD;AAQD,wBAAgB,aAAa,CAC3B,KAAK,EAAE,OAAO,EACd,KAAK,SAAI,GACR,OAAO,CAET;AA8BD,wBAAgB,eAAe,CAAC,MAAM,EAAE,SAAS,GAAG,SAAS,CAK5D;AAED,OAAO,EAAE,qBAAqB,EAAE,CAAC"}
|
package/dist/replay/redact.js
CHANGED
|
@@ -6,6 +6,7 @@ exports.redactPayload = redactPayload;
|
|
|
6
6
|
exports.redactRunRecord = redactRunRecord;
|
|
7
7
|
const REDACTION_PLACEHOLDER = '[REDACTED]';
|
|
8
8
|
exports.REDACTION_PLACEHOLDER = REDACTION_PLACEHOLDER;
|
|
9
|
+
const LABELLED_CREDENTIAL = /((?:\b|_)(?:api[ _-]?key|access[ _-]?token|refresh[ _-]?token|id[ _-]?token|password|secret|private[ _-]?key|signing[ _-]?key|token)["']?\s*(?::|=|\bis\b)\s*)("(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'|`[^`\r\n]*`|[^\s"'`<>{}\[\],;&]+)/gi;
|
|
9
10
|
const SECRET_KEY_PATTERNS = [
|
|
10
11
|
/api[_-]?key$/i,
|
|
11
12
|
/access[_-]?token$/i,
|
|
@@ -24,15 +25,16 @@ const SECRET_KEY_PATTERNS = [
|
|
|
24
25
|
/^pem$/i,
|
|
25
26
|
/walletauth$/i,
|
|
26
27
|
/^x-?api-?key$/i,
|
|
28
|
+
/^credentials?$/i,
|
|
29
|
+
/^(?:x-amz|x-goog)-(?:signature|credential|security-token)$/i,
|
|
30
|
+
/^(?:signature|sig|key-pair-id)$/i,
|
|
27
31
|
];
|
|
28
32
|
const VALUE_SCRUBBERS = [
|
|
29
33
|
{ pattern: /(Authorization\s*:\s*)(Bearer|Basic)\s+\S+/gi, replacement: `$1$2 ${REDACTION_PLACEHOLDER}` },
|
|
30
|
-
{ pattern: /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}/
|
|
34
|
+
{ pattern: /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}/gi, replacement: `Bearer ${REDACTION_PLACEHOLDER}` },
|
|
31
35
|
{ pattern: /([?&](?:X-Amz-Signature|Signature|sig|Policy|Key-Pair-Id|X-Amz-Credential)=)[^&\s"']+/gi, replacement: `$1${REDACTION_PLACEHOLDER}` },
|
|
32
|
-
{ pattern: /\bsk-[A-Za-z0-
|
|
33
|
-
{ pattern:
|
|
34
|
-
{ pattern: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g, replacement: REDACTION_PLACEHOLDER },
|
|
35
|
-
{ pattern: /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g, replacement: REDACTION_PLACEHOLDER },
|
|
36
|
+
{ pattern: /\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{20,}/g, replacement: REDACTION_PLACEHOLDER },
|
|
37
|
+
{ pattern: /-----BEGIN [A-Z ]{0,64}PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z ]{0,64}PRIVATE KEY-----|$)/g, replacement: REDACTION_PLACEHOLDER },
|
|
36
38
|
];
|
|
37
39
|
function isSecretKey(key) {
|
|
38
40
|
return SECRET_KEY_PATTERNS.some((re) => re.test(key));
|
|
@@ -40,14 +42,23 @@ function isSecretKey(key) {
|
|
|
40
42
|
function redactStringValue(value) {
|
|
41
43
|
let out = value;
|
|
42
44
|
for (const { pattern, replacement } of VALUE_SCRUBBERS) {
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
out = out.replace(pattern, replacement);
|
|
46
|
-
}
|
|
45
|
+
pattern.lastIndex = 0;
|
|
46
|
+
out = out.replace(pattern, replacement);
|
|
47
47
|
}
|
|
48
|
-
|
|
48
|
+
out = out.replace(/\beyJ[A-Za-z0-9_-]{10,}(?:\.[A-Za-z0-9_-]+)*/g, (candidate) => {
|
|
49
|
+
const segments = candidate.split('.');
|
|
50
|
+
return segments.length >= 3 && segments[1].length >= 10 && segments[2].length >= 10
|
|
51
|
+
? REDACTION_PLACEHOLDER : candidate;
|
|
52
|
+
});
|
|
53
|
+
return out.replace(LABELLED_CREDENTIAL, (_match, prefix, credential) => {
|
|
54
|
+
const quote = /^["'`]/.test(credential) ? credential[0] : '';
|
|
55
|
+
return `${prefix}${quote}${REDACTION_PLACEHOLDER}${quote}`;
|
|
56
|
+
});
|
|
49
57
|
}
|
|
50
58
|
function redactPayload(value, depth = 0) {
|
|
59
|
+
return redactValue(value, depth, new WeakSet());
|
|
60
|
+
}
|
|
61
|
+
function redactValue(value, depth, ancestors) {
|
|
51
62
|
if (depth > 32)
|
|
52
63
|
return REDACTION_PLACEHOLDER;
|
|
53
64
|
if (value === null || value === undefined)
|
|
@@ -56,52 +67,24 @@ function redactPayload(value, depth = 0) {
|
|
|
56
67
|
return redactStringValue(value);
|
|
57
68
|
if (typeof value === 'number' || typeof value === 'boolean')
|
|
58
69
|
return value;
|
|
59
|
-
if (Array.isArray(value)) {
|
|
60
|
-
return value.map((item) => redactPayload(item, depth + 1));
|
|
61
|
-
}
|
|
62
70
|
if (typeof value === 'object') {
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
+
if (ancestors.has(value))
|
|
72
|
+
return REDACTION_PLACEHOLDER;
|
|
73
|
+
ancestors.add(value);
|
|
74
|
+
try {
|
|
75
|
+
if (Array.isArray(value))
|
|
76
|
+
return value.map((item) => redactValue(item, depth + 1, ancestors));
|
|
77
|
+
return Object.fromEntries(Object.entries(value).map(([key, val]) => [key, isSecretKey(key) ? REDACTION_PLACEHOLDER : redactValue(val, depth + 1, ancestors)]));
|
|
78
|
+
}
|
|
79
|
+
finally {
|
|
80
|
+
ancestors.delete(value);
|
|
71
81
|
}
|
|
72
|
-
return out;
|
|
73
82
|
}
|
|
74
83
|
return REDACTION_PLACEHOLDER;
|
|
75
84
|
}
|
|
76
|
-
function redactToolCall(call) {
|
|
77
|
-
return {
|
|
78
|
-
...call,
|
|
79
|
-
arguments: redactPayload(call.arguments),
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
function redactToolResult(result) {
|
|
83
|
-
return {
|
|
84
|
-
ok: result.ok,
|
|
85
|
-
...(result.error_type !== undefined ? { error_type: result.error_type } : {}),
|
|
86
|
-
payload: redactPayload(result.payload),
|
|
87
|
-
};
|
|
88
|
-
}
|
|
89
|
-
function redactRound(round) {
|
|
90
|
-
return {
|
|
91
|
-
round: round.round,
|
|
92
|
-
assistant_message: redactStringValue(round.assistant_message),
|
|
93
|
-
tool_calls: round.tool_calls.map(redactToolCall),
|
|
94
|
-
tool_results: round.tool_results.map(redactToolResult),
|
|
95
|
-
};
|
|
96
|
-
}
|
|
97
85
|
function redactRunRecord(record) {
|
|
98
86
|
return {
|
|
99
|
-
...record,
|
|
100
|
-
user_request: redactStringValue(record.user_request),
|
|
101
|
-
runtime_config: redactPayload(record.runtime_config),
|
|
102
|
-
tool_schemas: record.tool_schemas.map((schema) => redactPayload(schema)),
|
|
103
|
-
rounds: record.rounds.map(redactRound),
|
|
104
|
-
final_response: redactStringValue(record.final_response),
|
|
87
|
+
...redactPayload(record),
|
|
105
88
|
redacted: true,
|
|
106
89
|
};
|
|
107
90
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/replay/redact.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/replay/redact.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/replay/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/replay/types.ts"],"names":[],"mappings":"AA2BA,MAAM,WAAW,sBAAsB;IACrC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,GAAG,CAAC,EAAE,MAAM,CAAC;QAAC,KAAK,CAAC,EAAE,MAAM,CAAC;QAAC,aAAa,CAAC,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnF;AAOD,MAAM,WAAW,iBAAiB;IAChC,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAEnC,EAAE,CAAC,EAAE,MAAM,CAAC;IAIZ,UAAU,CAAC,EAAE,MAAM,CAAC;IAGpB,UAAU,CAAC,EAAE,MAAM,GAAG,MAAM,GAAG,aAAa,CAAC;CAC9C;AAOD,MAAM,WAAW,mBAAmB;IAClC,EAAE,EAAE,OAAO,CAAC;IAEZ,UAAU,CAAC,EAAE,MAAM,CAAC;IAEpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CAClC;AAMD,MAAM,WAAW,cAAc;IAE7B,KAAK,EAAE,MAAM,CAAC;IAEd,iBAAiB,EAAE,MAAM,CAAC;IAE1B,UAAU,EAAE,iBAAiB,EAAE,CAAC;IAEhC,YAAY,EAAE,mBAAmB,EAAE,CAAC;CACrC;AAOD,MAAM,WAAW,oBAAoB;IACnC,KAAK,EAAE,WAAW,GAAG,YAAY,CAAC;IAClC,YAAY,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,YAAY,EAAE,aAAa,CAAC;QAAE,EAAE,EAAE,MAAM,CAAC;QAAC,OAAO,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;IAC7D,kBAAkB,EAAE,QAAQ,GAAG,QAAQ,GAAG,YAAY,GAAG,UAAU,CAAC;IAEpE,QAAQ,EAAE,MAAM,CAAC;CAClB;AAMD,MAAM,WAAW,SAAS;IAExB,aAAa,EAAE,MAAM,CAAC;IAEtB,MAAM,EAAE,MAAM,CAAC;IAEf,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,MAAM,CAAC;IAEhB,YAAY,EAAE,MAAM,CAAC;IAErB,QAAQ,EAAE,MAAM,CAAC;IAGjB,cAAc,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;IAIxC,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,CAAC;IAErD,MAAM,EAAE,aAAa,CAAC,cAAc,CAAC,CAAC;IAEtC,cAAc,EAAE,MAAM,CAAC;IAEvB,aAAa,EAAE,aAAa,CAAC,oBAAoB,CAAC,CAAC;IAEnD,OAAO,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAE/B,SAAS,EAAE,aAAa,CAAC,MAAM,CAAC,CAAC;IAEjC,UAAU,CAAC,EAAE,sBAAsB,CAAC;IAEpC,QAAQ,EAAE,OAAO,CAAC;CACnB;AAED,eAAO,MAAM,yBAAyB,IAAI,CAAC;AAE3C,wBAAgB,cAAc,IAAI,SAAS,CAiB1C"}
|
package/dist/replay/types.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/replay/types.ts"],"names":[],"mappings":";;;
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/replay/types.ts"],"names":[],"mappings":";;;AAwIA,wCAiBC;AAnBY,QAAA,yBAAyB,GAAG,CAAC,CAAC;AAE3C,SAAgB,cAAc;IAC5B,OAAO;QACL,aAAa,EAAE,iCAAyB;QACxC,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,EAAE;QAClB,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,EAAE;QACV,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,KAAK;KAChB,CAAC;AACJ,CAAC"}
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
const REDACTION_PLACEHOLDER = '[REDACTED]';
|
|
2
|
+
const LABELLED_CREDENTIAL = /((?:\b|_)(?:api[ _-]?key|access[ _-]?token|refresh[ _-]?token|id[ _-]?token|password|secret|private[ _-]?key|signing[ _-]?key|token)["']?\s*(?::|=|\bis\b)\s*)("(?:[^"\\\r\n]|\\.)*"|'(?:[^'\\\r\n]|\\.)*'|`[^`\r\n]*`|[^\s"'`<>{}\[\],;&]+)/gi;
|
|
2
3
|
const SECRET_KEY_PATTERNS = [
|
|
3
4
|
/api[_-]?key$/i,
|
|
4
5
|
/access[_-]?token$/i,
|
|
@@ -17,15 +18,16 @@ const SECRET_KEY_PATTERNS = [
|
|
|
17
18
|
/^pem$/i,
|
|
18
19
|
/walletauth$/i,
|
|
19
20
|
/^x-?api-?key$/i,
|
|
21
|
+
/^credentials?$/i,
|
|
22
|
+
/^(?:x-amz|x-goog)-(?:signature|credential|security-token)$/i,
|
|
23
|
+
/^(?:signature|sig|key-pair-id)$/i,
|
|
20
24
|
];
|
|
21
25
|
const VALUE_SCRUBBERS = [
|
|
22
26
|
{ pattern: /(Authorization\s*:\s*)(Bearer|Basic)\s+\S+/gi, replacement: `$1$2 ${REDACTION_PLACEHOLDER}` },
|
|
23
|
-
{ pattern: /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}/
|
|
27
|
+
{ pattern: /\bBearer\s+[A-Za-z0-9._~+/=-]{20,}/gi, replacement: `Bearer ${REDACTION_PLACEHOLDER}` },
|
|
24
28
|
{ pattern: /([?&](?:X-Amz-Signature|Signature|sig|Policy|Key-Pair-Id|X-Amz-Credential)=)[^&\s"']+/gi, replacement: `$1${REDACTION_PLACEHOLDER}` },
|
|
25
|
-
{ pattern: /\bsk-[A-Za-z0-
|
|
26
|
-
{ pattern:
|
|
27
|
-
{ pattern: /\beyJ[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}\.[A-Za-z0-9_-]{10,}/g, replacement: REDACTION_PLACEHOLDER },
|
|
28
|
-
{ pattern: /-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?-----END [A-Z ]*PRIVATE KEY-----/g, replacement: REDACTION_PLACEHOLDER },
|
|
29
|
+
{ pattern: /\bsk-(?:ant-|proj-)?[A-Za-z0-9_-]{20,}/g, replacement: REDACTION_PLACEHOLDER },
|
|
30
|
+
{ pattern: /-----BEGIN [A-Z ]{0,64}PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z ]{0,64}PRIVATE KEY-----|$)/g, replacement: REDACTION_PLACEHOLDER },
|
|
29
31
|
];
|
|
30
32
|
function isSecretKey(key) {
|
|
31
33
|
return SECRET_KEY_PATTERNS.some((re) => re.test(key));
|
|
@@ -33,14 +35,23 @@ function isSecretKey(key) {
|
|
|
33
35
|
export function redactStringValue(value) {
|
|
34
36
|
let out = value;
|
|
35
37
|
for (const { pattern, replacement } of VALUE_SCRUBBERS) {
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
out = out.replace(pattern, replacement);
|
|
39
|
-
}
|
|
38
|
+
pattern.lastIndex = 0;
|
|
39
|
+
out = out.replace(pattern, replacement);
|
|
40
40
|
}
|
|
41
|
-
|
|
41
|
+
out = out.replace(/\beyJ[A-Za-z0-9_-]{10,}(?:\.[A-Za-z0-9_-]+)*/g, (candidate) => {
|
|
42
|
+
const segments = candidate.split('.');
|
|
43
|
+
return segments.length >= 3 && segments[1].length >= 10 && segments[2].length >= 10
|
|
44
|
+
? REDACTION_PLACEHOLDER : candidate;
|
|
45
|
+
});
|
|
46
|
+
return out.replace(LABELLED_CREDENTIAL, (_match, prefix, credential) => {
|
|
47
|
+
const quote = /^["'`]/.test(credential) ? credential[0] : '';
|
|
48
|
+
return `${prefix}${quote}${REDACTION_PLACEHOLDER}${quote}`;
|
|
49
|
+
});
|
|
42
50
|
}
|
|
43
51
|
export function redactPayload(value, depth = 0) {
|
|
52
|
+
return redactValue(value, depth, new WeakSet());
|
|
53
|
+
}
|
|
54
|
+
function redactValue(value, depth, ancestors) {
|
|
44
55
|
if (depth > 32)
|
|
45
56
|
return REDACTION_PLACEHOLDER;
|
|
46
57
|
if (value === null || value === undefined)
|
|
@@ -49,52 +60,24 @@ export function redactPayload(value, depth = 0) {
|
|
|
49
60
|
return redactStringValue(value);
|
|
50
61
|
if (typeof value === 'number' || typeof value === 'boolean')
|
|
51
62
|
return value;
|
|
52
|
-
if (Array.isArray(value)) {
|
|
53
|
-
return value.map((item) => redactPayload(item, depth + 1));
|
|
54
|
-
}
|
|
55
63
|
if (typeof value === 'object') {
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
if (ancestors.has(value))
|
|
65
|
+
return REDACTION_PLACEHOLDER;
|
|
66
|
+
ancestors.add(value);
|
|
67
|
+
try {
|
|
68
|
+
if (Array.isArray(value))
|
|
69
|
+
return value.map((item) => redactValue(item, depth + 1, ancestors));
|
|
70
|
+
return Object.fromEntries(Object.entries(value).map(([key, val]) => [key, isSecretKey(key) ? REDACTION_PLACEHOLDER : redactValue(val, depth + 1, ancestors)]));
|
|
71
|
+
}
|
|
72
|
+
finally {
|
|
73
|
+
ancestors.delete(value);
|
|
64
74
|
}
|
|
65
|
-
return out;
|
|
66
75
|
}
|
|
67
76
|
return REDACTION_PLACEHOLDER;
|
|
68
77
|
}
|
|
69
|
-
function redactToolCall(call) {
|
|
70
|
-
return {
|
|
71
|
-
...call,
|
|
72
|
-
arguments: redactPayload(call.arguments),
|
|
73
|
-
};
|
|
74
|
-
}
|
|
75
|
-
function redactToolResult(result) {
|
|
76
|
-
return {
|
|
77
|
-
ok: result.ok,
|
|
78
|
-
...(result.error_type !== undefined ? { error_type: result.error_type } : {}),
|
|
79
|
-
payload: redactPayload(result.payload),
|
|
80
|
-
};
|
|
81
|
-
}
|
|
82
|
-
function redactRound(round) {
|
|
83
|
-
return {
|
|
84
|
-
round: round.round,
|
|
85
|
-
assistant_message: redactStringValue(round.assistant_message),
|
|
86
|
-
tool_calls: round.tool_calls.map(redactToolCall),
|
|
87
|
-
tool_results: round.tool_results.map(redactToolResult),
|
|
88
|
-
};
|
|
89
|
-
}
|
|
90
78
|
export function redactRunRecord(record) {
|
|
91
79
|
return {
|
|
92
|
-
...record,
|
|
93
|
-
user_request: redactStringValue(record.user_request),
|
|
94
|
-
runtime_config: redactPayload(record.runtime_config),
|
|
95
|
-
tool_schemas: record.tool_schemas.map((schema) => redactPayload(schema)),
|
|
96
|
-
rounds: record.rounds.map(redactRound),
|
|
97
|
-
final_response: redactStringValue(record.final_response),
|
|
80
|
+
...redactPayload(record),
|
|
98
81
|
redacted: true,
|
|
99
82
|
};
|
|
100
83
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/replay/redact.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"redact.js","sourceRoot":"","sources":["../../src/replay/redact.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/replay/types.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/replay/types.ts"],"names":[],"mappings":"AAsIA,MAAM,CAAC,MAAM,yBAAyB,GAAG,CAAC,CAAC;AAE3C,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,aAAa,EAAE,yBAAyB;QACxC,MAAM,EAAE,EAAE;QACV,SAAS,EAAE,CAAC;QACZ,OAAO,EAAE,CAAC;QACV,YAAY,EAAE,EAAE;QAChB,QAAQ,EAAE,EAAE;QACZ,cAAc,EAAE,EAAE;QAClB,YAAY,EAAE,EAAE;QAChB,MAAM,EAAE,EAAE;QACV,cAAc,EAAE,EAAE;QAClB,aAAa,EAAE,EAAE;QACjB,OAAO,EAAE,EAAE;QACX,SAAS,EAAE,EAAE;QACb,QAAQ,EAAE,KAAK;KAChB,CAAC;AACJ,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@sogni-ai/sogni-intelligence-client",
|
|
3
|
-
"version": "3.27.
|
|
3
|
+
"version": "3.27.6",
|
|
4
4
|
"description": "Public Sogni Intelligence client — Node.js convenience wrapper for the Sogni SDK plus the public-safe subset of @sogni/creative-agent contracts (ContractRegistry, AssetManifest, RunRecord, tool envelopes). For agent builders, third-party integrations, and downstream SDKs.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -167,7 +167,7 @@
|
|
|
167
167
|
"dev": "tsc --watch",
|
|
168
168
|
"prepare": "npm run codegen && husky",
|
|
169
169
|
"prepublishOnly": "npm run build",
|
|
170
|
-
"test": "node --import tsx test/basic-tests.ts",
|
|
170
|
+
"test": "node --import tsx test/basic-tests.ts && node --import tsx --test test/replay-redaction.test.ts",
|
|
171
171
|
"test:e2e": "node --import tsx test/e2e-test.ts",
|
|
172
172
|
"test:e2e:llm": "SOGNI_E2E_SCOPE=llm node --import tsx test/e2e-test.ts",
|
|
173
173
|
"typecheck:examples": "tsc --noEmit -p tsconfig.examples.json",
|
|
@@ -205,7 +205,7 @@
|
|
|
205
205
|
},
|
|
206
206
|
"homepage": "https://github.com/Sogni-AI/sogni-intelligence-client#readme",
|
|
207
207
|
"dependencies": {
|
|
208
|
-
"@sogni-ai/sogni-client": "5.
|
|
208
|
+
"@sogni-ai/sogni-client": "5.30.0",
|
|
209
209
|
"@sogni-ai/sogni-protocol": "1.0.0-alpha.32",
|
|
210
210
|
"sharp": "^0.35.3"
|
|
211
211
|
},
|