@morsehq-dev/sdk 0.5.0-rc.6 → 0.5.1-rc.1
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/README.md +11 -10
- package/dist/anthropic/index.cjs +11 -11
- package/dist/anthropic/index.js +4 -4
- package/dist/anthropic-agent-sdk/index.cjs +40 -40
- package/dist/anthropic-agent-sdk/index.js +6 -6
- package/dist/browser/anthropic/index.cjs +11 -11
- package/dist/browser/anthropic/index.js +4 -4
- package/dist/browser/anthropic-agent-sdk/index.cjs +40 -40
- package/dist/browser/anthropic-agent-sdk/index.js +6 -6
- package/dist/browser/{chunk-PHE4P3DN.js → chunk-5IMBYZUB.js} +3 -3
- package/dist/browser/{chunk-PHE4P3DN.js.map → chunk-5IMBYZUB.js.map} +1 -1
- package/dist/browser/{chunk-MIHCAKQ2.js → chunk-7G266PKE.js} +32 -9
- package/dist/browser/chunk-7G266PKE.js.map +1 -0
- package/dist/browser/{chunk-FDWPKINR.js → chunk-AX6NEG6X.js} +4 -4
- package/dist/browser/{chunk-FDWPKINR.js.map → chunk-AX6NEG6X.js.map} +1 -1
- package/dist/browser/{chunk-ZAISDHUV.cjs → chunk-E6WORBIU.cjs} +5 -5
- package/dist/browser/{chunk-ZAISDHUV.cjs.map → chunk-E6WORBIU.cjs.map} +1 -1
- package/dist/{chunk-B3WEUUUK.cjs → browser/chunk-FYIQARMI.cjs} +7 -7
- package/dist/browser/{chunk-NK6D2G5O.cjs.map → chunk-FYIQARMI.cjs.map} +1 -1
- package/dist/browser/{chunk-WG45SF7N.cjs → chunk-HJTUPXNE.cjs} +31 -8
- package/dist/browser/chunk-HJTUPXNE.cjs.map +1 -0
- package/dist/browser/{chunk-TGN4FEKB.cjs → chunk-HNOHWDK3.cjs} +12 -12
- package/dist/browser/{chunk-TGN4FEKB.cjs.map → chunk-HNOHWDK3.cjs.map} +1 -1
- package/dist/{chunk-LEDIWC2M.js → browser/chunk-PIZVCAW7.js} +4 -4
- package/dist/browser/{chunk-TIZ5QRK2.js.map → chunk-PIZVCAW7.js.map} +1 -1
- package/dist/browser/{chunk-2LZCQD3J.js → chunk-RDNSY73W.js} +3 -3
- package/dist/browser/{chunk-2LZCQD3J.js.map → chunk-RDNSY73W.js.map} +1 -1
- package/dist/browser/{chunk-IXCAR4UA.js → chunk-TIMAH323.js} +3 -3
- package/dist/browser/{chunk-IXCAR4UA.js.map → chunk-TIMAH323.js.map} +1 -1
- package/dist/browser/{chunk-JNF26SQM.js → chunk-VSHCKROM.js} +5 -5
- package/dist/browser/{chunk-JNF26SQM.js.map → chunk-VSHCKROM.js.map} +1 -1
- package/dist/browser/{chunk-PNUCUOUA.cjs → chunk-YXCWAU36.cjs} +15 -15
- package/dist/browser/{chunk-PNUCUOUA.cjs.map → chunk-YXCWAU36.cjs.map} +1 -1
- package/dist/browser/{chunk-6YPVIGD2.cjs → chunk-Z26QGUMP.cjs} +6 -6
- package/dist/browser/{chunk-6YPVIGD2.cjs.map → chunk-Z26QGUMP.cjs.map} +1 -1
- package/dist/browser/{chunk-DQ4JWHYH.cjs → chunk-ZOOYJTDT.cjs} +18 -18
- package/dist/browser/{chunk-DQ4JWHYH.cjs.map → chunk-ZOOYJTDT.cjs.map} +1 -1
- package/dist/browser/index.cjs +189 -124
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +111 -46
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/integrations/pino.cjs +4 -4
- package/dist/browser/integrations/pino.js +3 -3
- package/dist/browser/langchain/index.cjs +17 -17
- package/dist/browser/langchain/index.js +2 -2
- package/dist/browser/langgraph/index.cjs +27 -27
- package/dist/browser/langgraph/index.js +5 -5
- package/dist/browser/openai/index.cjs +11 -11
- package/dist/browser/openai/index.js +2 -2
- package/dist/browser/openai-agents/index.cjs +34 -34
- package/dist/browser/openai-agents/index.js +4 -4
- package/dist/browser/vercel-ai/index.cjs +14 -14
- package/dist/browser/vercel-ai/index.js +3 -3
- package/dist/{browser/chunk-NK6D2G5O.cjs → chunk-2UFTRWUS.cjs} +7 -7
- package/dist/{chunk-B3WEUUUK.cjs.map → chunk-2UFTRWUS.cjs.map} +1 -1
- package/dist/{chunk-DK3RX7RS.js → chunk-4WUG3RMJ.js} +4 -4
- package/dist/{chunk-DK3RX7RS.js.map → chunk-4WUG3RMJ.js.map} +1 -1
- package/dist/{chunk-QTATKDEI.js → chunk-5MJS5ECA.js} +3 -3
- package/dist/{chunk-QTATKDEI.js.map → chunk-5MJS5ECA.js.map} +1 -1
- package/dist/{chunk-Z2AYPTB2.js → chunk-62FWHZXN.js} +5 -5
- package/dist/{chunk-Z2AYPTB2.js.map → chunk-62FWHZXN.js.map} +1 -1
- package/dist/{browser/chunk-TIZ5QRK2.js → chunk-FHQGPQFR.js} +4 -4
- package/dist/{chunk-LEDIWC2M.js.map → chunk-FHQGPQFR.js.map} +1 -1
- package/dist/{chunk-AT3YR5SP.cjs → chunk-GATTHW3X.cjs} +5 -5
- package/dist/{chunk-AT3YR5SP.cjs.map → chunk-GATTHW3X.cjs.map} +1 -1
- package/dist/{chunk-T5UFHQLZ.js → chunk-GQVNZPRF.js} +3 -3
- package/dist/{chunk-T5UFHQLZ.js.map → chunk-GQVNZPRF.js.map} +1 -1
- package/dist/{chunk-4QY5O46P.cjs → chunk-HCN6Z56N.cjs} +18 -18
- package/dist/{chunk-4QY5O46P.cjs.map → chunk-HCN6Z56N.cjs.map} +1 -1
- package/dist/{chunk-K4FHTOBB.cjs → chunk-KALB7HJ5.cjs} +12 -12
- package/dist/{chunk-K4FHTOBB.cjs.map → chunk-KALB7HJ5.cjs.map} +1 -1
- package/dist/{chunk-TEWSIQ6E.cjs → chunk-QLJAATBR.cjs} +6 -6
- package/dist/{chunk-TEWSIQ6E.cjs.map → chunk-QLJAATBR.cjs.map} +1 -1
- package/dist/{chunk-ZFZTJXIO.cjs → chunk-XBI4AMCW.cjs} +15 -15
- package/dist/{chunk-ZFZTJXIO.cjs.map → chunk-XBI4AMCW.cjs.map} +1 -1
- package/dist/{chunk-5YJXFU5U.js → chunk-YGKEP2GY.js} +32 -9
- package/dist/chunk-YGKEP2GY.js.map +1 -0
- package/dist/{chunk-2GWOF5JM.js → chunk-ZMRXUZ5L.js} +3 -3
- package/dist/{chunk-2GWOF5JM.js.map → chunk-ZMRXUZ5L.js.map} +1 -1
- package/dist/{chunk-UV5FUVNK.cjs → chunk-ZTBAMSCC.cjs} +31 -8
- package/dist/chunk-ZTBAMSCC.cjs.map +1 -0
- package/dist/index.cjs +196 -131
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +11 -0
- package/dist/index.d.ts +11 -0
- package/dist/index.js +112 -47
- package/dist/index.js.map +1 -1
- package/dist/integrations/pino.cjs +4 -4
- package/dist/integrations/pino.js +3 -3
- package/dist/langchain/index.cjs +17 -17
- package/dist/langchain/index.js +2 -2
- package/dist/langgraph/index.cjs +27 -27
- package/dist/langgraph/index.js +5 -5
- package/dist/openai/index.cjs +11 -11
- package/dist/openai/index.js +2 -2
- package/dist/openai-agents/index.cjs +34 -34
- package/dist/openai-agents/index.js +4 -4
- package/dist/vercel-ai/index.cjs +14 -14
- package/dist/vercel-ai/index.js +3 -3
- package/package.json +1 -1
- package/dist/browser/chunk-MIHCAKQ2.js.map +0 -1
- package/dist/browser/chunk-WG45SF7N.cjs.map +0 -1
- package/dist/chunk-5YJXFU5U.js.map +0 -1
- package/dist/chunk-UV5FUVNK.cjs.map +0 -1
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
3
|
+
var chunkZOOYJTDT_cjs = require('../chunk-ZOOYJTDT.cjs');
|
|
4
|
+
require('../chunk-E6WORBIU.cjs');
|
|
5
|
+
var chunkFYIQARMI_cjs = require('../chunk-FYIQARMI.cjs');
|
|
6
|
+
var chunkYXCWAU36_cjs = require('../chunk-YXCWAU36.cjs');
|
|
7
|
+
var chunkZ26QGUMP_cjs = require('../chunk-Z26QGUMP.cjs');
|
|
8
8
|
var chunkSWQOPFE4_cjs = require('../chunk-SWQOPFE4.cjs');
|
|
9
9
|
require('../chunk-RBNCTHK3.cjs');
|
|
10
|
-
var
|
|
10
|
+
var chunkHJTUPXNE_cjs = require('../chunk-HJTUPXNE.cjs');
|
|
11
11
|
|
|
12
12
|
// src/anthropic-agent-sdk/client-wrapper.ts
|
|
13
|
-
|
|
13
|
+
chunkHJTUPXNE_cjs.init_tracing();
|
|
14
14
|
var WRAPPED_CLIENT = /* @__PURE__ */ Symbol.for("morse.anthropic-agent-sdk.wrapped");
|
|
15
15
|
function wrapClaudeAgentSDK(client, options = {}) {
|
|
16
16
|
if (!client || typeof client !== "object") return client;
|
|
@@ -34,7 +34,7 @@ function wrapClaudeAgentSDK(client, options = {}) {
|
|
|
34
34
|
});
|
|
35
35
|
return wrapper;
|
|
36
36
|
}
|
|
37
|
-
var instrumentClaudeAgentSDK =
|
|
37
|
+
var instrumentClaudeAgentSDK = chunkZ26QGUMP_cjs.absorbErrorsAsync(
|
|
38
38
|
async (client = void 0, maybeOptions = {}) => {
|
|
39
39
|
if (client && isClient(client)) return wrapClaudeAgentSDK(client, maybeOptions);
|
|
40
40
|
return false;
|
|
@@ -57,7 +57,7 @@ function buildPatchedQuery(original, options) {
|
|
|
57
57
|
const boundOriginal = (p, o) => original.call(this, p, o);
|
|
58
58
|
const model = (callOptions && typeof callOptions.model === "string" ? callOptions.model : void 0) ?? defaultModel;
|
|
59
59
|
async function* iterateInTrace2() {
|
|
60
|
-
const handle =
|
|
60
|
+
const handle = chunkYXCWAU36_cjs.emitAgentSpan({
|
|
61
61
|
adapter: "anthropic-agent-sdk",
|
|
62
62
|
agentName: defaultAgentName,
|
|
63
63
|
model
|
|
@@ -80,7 +80,7 @@ function buildPatchedQuery(original, options) {
|
|
|
80
80
|
}
|
|
81
81
|
handle?.end();
|
|
82
82
|
}
|
|
83
|
-
if (
|
|
83
|
+
if (chunkHJTUPXNE_cjs.getActiveTraceState() !== null) {
|
|
84
84
|
return iterateInTrace2();
|
|
85
85
|
}
|
|
86
86
|
return (async function* outerTrace() {
|
|
@@ -96,7 +96,7 @@ function buildPatchedQuery(original, options) {
|
|
|
96
96
|
};
|
|
97
97
|
}
|
|
98
98
|
});
|
|
99
|
-
const runPromise =
|
|
99
|
+
const runPromise = chunkHJTUPXNE_cjs.runAsync({ agentName: defaultAgentName }, async (runHandle) => {
|
|
100
100
|
try {
|
|
101
101
|
for await (const event of iterateInTrace2()) {
|
|
102
102
|
queue.push({ kind: "value", value: event });
|
|
@@ -132,10 +132,10 @@ function buildPatchedQuery(original, options) {
|
|
|
132
132
|
}
|
|
133
133
|
|
|
134
134
|
// src/_agent-sdk-common/context-propagation.ts
|
|
135
|
-
|
|
136
|
-
var captureParentForFanOut =
|
|
135
|
+
chunkHJTUPXNE_cjs.init_tracing();
|
|
136
|
+
var captureParentForFanOut = chunkZ26QGUMP_cjs.absorbErrorsSync(
|
|
137
137
|
() => {
|
|
138
|
-
const state =
|
|
138
|
+
const state = chunkHJTUPXNE_cjs.getActiveTraceState();
|
|
139
139
|
if (state === null) return null;
|
|
140
140
|
const top = state.spanStack[state.spanStack.length - 1];
|
|
141
141
|
if (!top) return null;
|
|
@@ -146,13 +146,13 @@ var captureParentForFanOut = chunk6YPVIGD2_cjs.absorbErrorsSync(
|
|
|
146
146
|
},
|
|
147
147
|
{ fingerprint: "agent-sdk-common.captureParentForFanOut" }
|
|
148
148
|
);
|
|
149
|
-
var emitWithPinnedParent =
|
|
149
|
+
var emitWithPinnedParent = chunkZ26QGUMP_cjs.absorbErrorsSync(
|
|
150
150
|
(opts) => {
|
|
151
|
-
const state =
|
|
151
|
+
const state = chunkHJTUPXNE_cjs.getActiveTraceState();
|
|
152
152
|
if (state === null) return null;
|
|
153
153
|
const snap = opts.snapshot;
|
|
154
154
|
if (!snap || snap.traceId !== state.traceId) return null;
|
|
155
|
-
const handle =
|
|
155
|
+
const handle = chunkHJTUPXNE_cjs.startSpan({
|
|
156
156
|
name: opts.name,
|
|
157
157
|
type: opts.type,
|
|
158
158
|
metadata: opts.metadata
|
|
@@ -174,13 +174,13 @@ function findSpanById(state, spanId) {
|
|
|
174
174
|
}
|
|
175
175
|
return void 0;
|
|
176
176
|
}
|
|
177
|
-
var emitAsToolSibling =
|
|
177
|
+
var emitAsToolSibling = chunkZ26QGUMP_cjs.absorbErrorsSync(
|
|
178
178
|
(opts) => {
|
|
179
|
-
const state =
|
|
179
|
+
const state = chunkHJTUPXNE_cjs.getActiveTraceState();
|
|
180
180
|
if (state === null) return null;
|
|
181
181
|
const tool = findSpanById(state, opts.toolSpanId);
|
|
182
182
|
if (!tool) return null;
|
|
183
|
-
const handle =
|
|
183
|
+
const handle = chunkHJTUPXNE_cjs.startSpan({
|
|
184
184
|
name: opts.name,
|
|
185
185
|
type: opts.type,
|
|
186
186
|
metadata: opts.metadata
|
|
@@ -191,9 +191,9 @@ var emitAsToolSibling = chunk6YPVIGD2_cjs.absorbErrorsSync(
|
|
|
191
191
|
},
|
|
192
192
|
{ fingerprint: "agent-sdk-common.emitAsToolSibling" }
|
|
193
193
|
);
|
|
194
|
-
|
|
194
|
+
chunkZ26QGUMP_cjs.absorbErrorsSync(
|
|
195
195
|
() => {
|
|
196
|
-
const state =
|
|
196
|
+
const state = chunkHJTUPXNE_cjs.getActiveTraceState();
|
|
197
197
|
if (state === null) return null;
|
|
198
198
|
return {
|
|
199
199
|
traceId: state.traceId,
|
|
@@ -238,7 +238,7 @@ var _handleHookEvent = (payload, options) => {
|
|
|
238
238
|
return;
|
|
239
239
|
}
|
|
240
240
|
}
|
|
241
|
-
const fallback =
|
|
241
|
+
const fallback = chunkYXCWAU36_cjs.emitHookSpan({
|
|
242
242
|
adapter: "anthropic-agent-sdk",
|
|
243
243
|
hookName: name,
|
|
244
244
|
hookKind: kind,
|
|
@@ -248,7 +248,7 @@ var _handleHookEvent = (payload, options) => {
|
|
|
248
248
|
fallback.end();
|
|
249
249
|
}
|
|
250
250
|
};
|
|
251
|
-
var handleHookEvent =
|
|
251
|
+
var handleHookEvent = chunkZ26QGUMP_cjs.absorbErrorsSync(_handleHookEvent, {
|
|
252
252
|
fingerprint: "morse.anthropic-agent-sdk.hook-instrumentation.handle"
|
|
253
253
|
});
|
|
254
254
|
function installHookInstrumentation(client, options) {
|
|
@@ -276,7 +276,7 @@ function installHookInstrumentation(client, options) {
|
|
|
276
276
|
}
|
|
277
277
|
|
|
278
278
|
// src/anthropic-agent-sdk/llm-instrumentation.ts
|
|
279
|
-
|
|
279
|
+
chunkHJTUPXNE_cjs.init_diagnostics();
|
|
280
280
|
function readInputTokens(usage) {
|
|
281
281
|
if (usage === void 0 || usage === null || typeof usage !== "object") return void 0;
|
|
282
282
|
const base = typeof usage.input_tokens === "number" && Number.isFinite(usage.input_tokens) ? usage.input_tokens : 0;
|
|
@@ -343,7 +343,7 @@ async function* instrumentLlmCalls(events, options) {
|
|
|
343
343
|
const reportedModel = typeof event.message?.model === "string" && event.message.model.length > 0 ? event.message.model : void 0;
|
|
344
344
|
const model = reportedModel ?? fallbackModel;
|
|
345
345
|
if (!model) return;
|
|
346
|
-
const handle =
|
|
346
|
+
const handle = chunkYXCWAU36_cjs.emitLlmSpan({ adapter: "anthropic-agent-sdk", model });
|
|
347
347
|
if (!handle) return;
|
|
348
348
|
const usage = event.message?.usage;
|
|
349
349
|
const inputTokens = readInputTokens(usage);
|
|
@@ -360,7 +360,7 @@ async function* instrumentLlmCalls(events, options) {
|
|
|
360
360
|
applyCost(handle, model, inputTokens, outputTokens, cacheWriteTokens, cachedInputTokens);
|
|
361
361
|
if (requestParams !== void 0) {
|
|
362
362
|
try {
|
|
363
|
-
const segments =
|
|
363
|
+
const segments = chunkZOOYJTDT_cjs.extractAnthropicSegments(
|
|
364
364
|
requestParams,
|
|
365
365
|
event.message
|
|
366
366
|
);
|
|
@@ -383,7 +383,7 @@ async function* instrumentLlmCalls(events, options) {
|
|
|
383
383
|
if (model === void 0 || model.length === 0) {
|
|
384
384
|
return;
|
|
385
385
|
}
|
|
386
|
-
openSpan =
|
|
386
|
+
openSpan = chunkYXCWAU36_cjs.emitLlmSpan({
|
|
387
387
|
adapter: "anthropic-agent-sdk",
|
|
388
388
|
model
|
|
389
389
|
});
|
|
@@ -425,7 +425,7 @@ async function* instrumentLlmCalls(events, options) {
|
|
|
425
425
|
}
|
|
426
426
|
if (requestParams !== void 0) {
|
|
427
427
|
try {
|
|
428
|
-
const segments =
|
|
428
|
+
const segments = chunkZOOYJTDT_cjs.extractAnthropicSegments(
|
|
429
429
|
requestParams,
|
|
430
430
|
event.message
|
|
431
431
|
);
|
|
@@ -453,13 +453,13 @@ async function* instrumentLlmCalls(events, options) {
|
|
|
453
453
|
}
|
|
454
454
|
function reportSwallowed(err, fingerprint) {
|
|
455
455
|
try {
|
|
456
|
-
|
|
456
|
+
chunkHJTUPXNE_cjs.report(err, { fingerprint });
|
|
457
457
|
} catch {
|
|
458
458
|
}
|
|
459
459
|
}
|
|
460
460
|
|
|
461
461
|
// src/anthropic-agent-sdk/tool-and-subagent.ts
|
|
462
|
-
|
|
462
|
+
chunkHJTUPXNE_cjs.init_diagnostics();
|
|
463
463
|
var ADAPTER = "anthropic-agent-sdk";
|
|
464
464
|
var TASK_TOOL_NAME = "Task";
|
|
465
465
|
function safeCloseFailed(handle, message) {
|
|
@@ -505,7 +505,7 @@ async function* instrumentTools(events, options) {
|
|
|
505
505
|
tool_use_id: toolUseId
|
|
506
506
|
};
|
|
507
507
|
if (taskPrompt !== void 0) {
|
|
508
|
-
metadata.task_description =
|
|
508
|
+
metadata.task_description = chunkFYIQARMI_cjs.summarizeToolInput(taskPrompt, inputOpts);
|
|
509
509
|
}
|
|
510
510
|
let handle2 = null;
|
|
511
511
|
try {
|
|
@@ -527,10 +527,10 @@ async function* instrumentTools(events, options) {
|
|
|
527
527
|
}
|
|
528
528
|
let handle = null;
|
|
529
529
|
try {
|
|
530
|
-
handle =
|
|
530
|
+
handle = chunkYXCWAU36_cjs.emitToolSpan({
|
|
531
531
|
adapter: ADAPTER,
|
|
532
532
|
toolName: name,
|
|
533
|
-
inputSummary:
|
|
533
|
+
inputSummary: chunkFYIQARMI_cjs.summarizeToolInput(event.input, inputOpts),
|
|
534
534
|
attributes: { tool_use_id: toolUseId }
|
|
535
535
|
});
|
|
536
536
|
} catch {
|
|
@@ -547,7 +547,7 @@ async function* instrumentTools(events, options) {
|
|
|
547
547
|
open.delete(toolUseId);
|
|
548
548
|
const isError = event.is_error === true;
|
|
549
549
|
try {
|
|
550
|
-
const outputSummary =
|
|
550
|
+
const outputSummary = chunkFYIQARMI_cjs.summarizeToolOutput(event.content, outputOpts);
|
|
551
551
|
entry.handle.span.metadata = {
|
|
552
552
|
...entry.handle.span.metadata ?? {},
|
|
553
553
|
tool_output_summary: outputSummary
|
|
@@ -619,15 +619,15 @@ async function* instrumentTools(events, options) {
|
|
|
619
619
|
}
|
|
620
620
|
function reportSwallowed2(err, fingerprint) {
|
|
621
621
|
try {
|
|
622
|
-
|
|
622
|
+
chunkHJTUPXNE_cjs.report(err, { fingerprint });
|
|
623
623
|
} catch {
|
|
624
624
|
}
|
|
625
625
|
}
|
|
626
626
|
|
|
627
627
|
// src/anthropic-agent-sdk/trace-bridge.ts
|
|
628
|
-
|
|
628
|
+
chunkHJTUPXNE_cjs.init_tracing();
|
|
629
629
|
function iterateInTrace(agentName, makeGenerator) {
|
|
630
|
-
if (
|
|
630
|
+
if (chunkHJTUPXNE_cjs.getActiveTraceState() !== null) {
|
|
631
631
|
return makeGenerator();
|
|
632
632
|
}
|
|
633
633
|
return (async function* outerTrace() {
|
|
@@ -643,7 +643,7 @@ function iterateInTrace(agentName, makeGenerator) {
|
|
|
643
643
|
};
|
|
644
644
|
}
|
|
645
645
|
});
|
|
646
|
-
const runPromise =
|
|
646
|
+
const runPromise = chunkHJTUPXNE_cjs.runAsync({ agentName }, async (runHandle) => {
|
|
647
647
|
try {
|
|
648
648
|
for await (const event of makeGenerator()) {
|
|
649
649
|
queue.push({ kind: "value", value: event });
|
|
@@ -692,7 +692,7 @@ function wrapClaudeAgentQuery(query, options = {}) {
|
|
|
692
692
|
async function* withAgentSpan() {
|
|
693
693
|
if (!opened) {
|
|
694
694
|
opened = true;
|
|
695
|
-
handle =
|
|
695
|
+
handle = chunkYXCWAU36_cjs.emitAgentSpan({
|
|
696
696
|
adapter: "anthropic-agent-sdk",
|
|
697
697
|
agentName: options.defaultAgentName ?? "claude-agent-sdk",
|
|
698
698
|
model
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { extractAnthropicSegments } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import { summarizeToolInput, summarizeToolOutput } from '../chunk-
|
|
4
|
-
import { emitHookSpan, emitAgentSpan, emitLlmSpan, emitToolSpan } from '../chunk-
|
|
5
|
-
import { absorbErrorsAsync, absorbErrorsSync } from '../chunk-
|
|
1
|
+
import { extractAnthropicSegments } from '../chunk-VSHCKROM.js';
|
|
2
|
+
import '../chunk-5IMBYZUB.js';
|
|
3
|
+
import { summarizeToolInput, summarizeToolOutput } from '../chunk-TIMAH323.js';
|
|
4
|
+
import { emitHookSpan, emitAgentSpan, emitLlmSpan, emitToolSpan } from '../chunk-PIZVCAW7.js';
|
|
5
|
+
import { absorbErrorsAsync, absorbErrorsSync } from '../chunk-RDNSY73W.js';
|
|
6
6
|
import { calculateCost } from '../chunk-4FALQMOZ.js';
|
|
7
7
|
import '../chunk-MLDVXMQD.js';
|
|
8
|
-
import { init_tracing, getActiveTraceState, startSpan, init_diagnostics, runAsync, report } from '../chunk-
|
|
8
|
+
import { init_tracing, getActiveTraceState, startSpan, init_diagnostics, runAsync, report } from '../chunk-7G266PKE.js';
|
|
9
9
|
|
|
10
10
|
// src/anthropic-agent-sdk/client-wrapper.ts
|
|
11
11
|
init_tracing();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { contentToText, getContent, getRole } from './chunk-MLDVXMQD.js';
|
|
2
|
-
import { init_tracing, getActiveTraceState } from './chunk-
|
|
2
|
+
import { init_tracing, getActiveTraceState } from './chunk-7G266PKE.js';
|
|
3
3
|
|
|
4
4
|
// src/_internal/active-framework.ts
|
|
5
5
|
init_tracing();
|
|
@@ -114,5 +114,5 @@ function safeJson(value) {
|
|
|
114
114
|
}
|
|
115
115
|
|
|
116
116
|
export { captureInputMessages, captureLangChainMessages, capturePrompts, extractAnthropicOutputText, extractLangChainOutputText, extractOpenAiOutputText, setActiveFramework };
|
|
117
|
-
//# sourceMappingURL=chunk-
|
|
118
|
-
//# sourceMappingURL=chunk-
|
|
117
|
+
//# sourceMappingURL=chunk-5IMBYZUB.js.map
|
|
118
|
+
//# sourceMappingURL=chunk-5IMBYZUB.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/_internal/active-framework.ts","../../src/_internal/llm-io.ts"],"names":[],"mappings":"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","file":"chunk-PHE4P3DN.js","sourcesContent":["/**\n * MHQ-859 — active framework discovery, the TS half of AGE-240.\n *\n * Python has had this since AGE-240: each adapter marks itself active when\n * it intercepts a call, the trace stamps `morse_ai.framework` on its\n * resource, and the server uses it to disambiguate agents that share a\n * logical name but not an implementation. TypeScript had the *consumer*\n * side wired all along — `otel-provider.ts` already maps\n * `resource[\"morse_ai.framework\"]` to the `av.framework` root-span\n * attribute — but nothing ever set it, so every TS trace landed with\n * `framework` NULL and framework filtering silently excluded all TS traffic.\n *\n * Python uses a `threading.local`. The Node equivalent is per-trace state,\n * not per-thread: `AsyncLocalStorage` already scopes the active trace, and\n * concurrent traces in one process must not see each other's marker. So the\n * marker is written straight onto the active trace state and there is no\n * module-global to leak across interleaved async calls — which also removes\n * the need for Python's `clear_active_framework()` try/finally discipline.\n *\n * First framework wins per trace: when a customer mixes two adapters in one\n * trace, the first to fire defines the label. Absence is the signal — never\n * invent a default.\n */\n\nimport { getActiveTraceState } from \"./tracing\";\n\n/**\n * Mark `name` as the framework for the currently-active trace.\n *\n * No-op when no trace is active (an adapter can fire outside `run()`), and\n * no-op when a framework is already set. Never throws — telemetry must not\n * break customer code.\n */\nexport function setActiveFramework(name: string): void {\n if (typeof name !== \"string\" || name.length === 0) return;\n try {\n const state = getActiveTraceState();\n if (state !== null && !state.framework) {\n state.framework = name;\n }\n } catch {\n // swallow — never break the caller\n }\n}\n\n/** Framework recorded on the active trace, or `undefined`. */\nexport function getActiveFramework(): string | undefined {\n try {\n return getActiveTraceState()?.framework ?? undefined;\n } catch {\n return undefined;\n }\n}\n","/**\n * MHQ-858 — shared `input_data` / `output_data` capture for LLM spans.\n *\n * Python's adapters have captured prompt/response content on `llm` spans\n * since MHQ-772; no TypeScript adapter ever did, so the trace-detail\n * INPUT/OUTPUT panes were empty for every TS customer while being populated\n * for the Python customer running the identical workload.\n *\n * Mirrors `morse_ai/adapters/anthropic.py`'s `_safe_input_messages` /\n * `_extract_output_text`, including the 4096-byte cap, so the two SDKs\n * produce the same shape for the same call.\n */\n\nimport { contentToText, getContent, getRole } from \"../_agent-sdk-common/context-decomposer\";\n\n/** Bytes of text kept per field. Matches Python's `_CONTENT_BYTE_CAP`. */\nexport const CONTENT_BYTE_CAP = 4096;\n\n/**\n * Truncate on a UTF-8 *byte* budget, not a UTF-16 code-unit count — a\n * 4096-char string of emoji is 16KB on the wire. Never splits a code point.\n */\nexport function truncateText(text: string, maxBytes: number = CONTENT_BYTE_CAP): string {\n if (typeof text !== \"string\" || text.length === 0) return text;\n const encoder = new TextEncoder();\n const bytes = encoder.encode(text);\n if (bytes.length <= maxBytes) return text;\n // `fatal: false` replaces a trailing partial code point with U+FFFD\n // rather than throwing; drop it so the value stays clean.\n const sliced = new TextDecoder(\"utf-8\", { fatal: false }).decode(bytes.subarray(0, maxBytes));\n return sliced.replace(/�$/, \"\") + \"…\";\n}\n\nexport interface CapturedInput {\n messages: Array<{ role?: unknown; content?: unknown }>;\n system?: string;\n}\n\n/**\n * Build a truncated, JSON-safe `input_data` from a chat-completions-shaped\n * request. String content is truncated; block-form content (tool_use,\n * tool_result, image parts) passes through as-is — per-block truncation\n * would mean reconstructing each provider's content-block schema exactly,\n * which is not worth it for a display field.\n *\n * Returns `undefined` when there is nothing worth showing, so callers can\n * assign unconditionally without writing empty objects onto the wire.\n */\nexport function captureInputMessages(\n messages: unknown,\n system?: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n\n const safeMessages = messages\n .filter((m): m is Record<string, unknown> => typeof m === \"object\" && m !== null)\n .map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? truncateText(m.content, maxBytes) : m.content,\n }));\n if (safeMessages.length === 0) return undefined;\n\n const out: CapturedInput = { messages: safeMessages };\n const systemText = flattenSystem(system);\n if (systemText) out.system = truncateText(systemText, maxBytes);\n return out;\n}\n\n/**\n * Anthropic's `system` is either a string or an array of text blocks.\n * Returns `undefined` when neither yields text.\n */\nexport function flattenSystem(system: unknown): string | undefined {\n if (typeof system === \"string\") return system || undefined;\n if (!Array.isArray(system)) return undefined;\n const parts = system\n .map((block) =>\n typeof block === \"string\"\n ? block\n : typeof (block as { text?: unknown })?.text === \"string\"\n ? (block as { text: string }).text\n : \"\",\n )\n .filter(Boolean);\n return parts.length > 0 ? parts.join(\"\\n\") : undefined;\n}\n\n/**\n * Extract the assistant's text from an Anthropic `Message.content` array.\n * A response that only calls a tool still yields something meaningful\n * rather than nothing — same rule as Python's `_extract_output_text`.\n */\nexport function extractAnthropicOutputText(\n content: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(content) || content.length === 0) return undefined;\n const parts: string[] = [];\n for (const block of content) {\n const b = block as { type?: unknown; text?: unknown; name?: unknown; input?: unknown };\n if (b?.type === \"text\" && typeof b.text === \"string\" && b.text) {\n parts.push(b.text);\n } else if (b?.type === \"tool_use\") {\n const name = typeof b.name === \"string\" ? b.name : \"tool\";\n parts.push(b.input ? `[tool_use:${name}] ${safeJson(b.input)}` : `[tool_use:${name}]`);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * Extract the assistant's text from an OpenAI chat-completions response,\n * including a tool-call-only response.\n */\nexport function extractOpenAiOutputText(\n choices: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(choices) || choices.length === 0) return undefined;\n const parts: string[] = [];\n for (const choice of choices) {\n const message = (choice as { message?: Record<string, unknown> })?.message;\n if (!message) continue;\n if (typeof message.content === \"string\" && message.content) {\n parts.push(message.content);\n }\n const toolCalls = message.tool_calls;\n if (Array.isArray(toolCalls)) {\n for (const call of toolCalls) {\n const fn = (call as { function?: { name?: unknown; arguments?: unknown } })?.function;\n const name = typeof fn?.name === \"string\" ? fn.name : \"tool\";\n parts.push(\n fn?.arguments ? `[tool_call:${name}] ${String(fn.arguments)}` : `[tool_call:${name}]`,\n );\n }\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * `input_data` for LangChain/LangGraph callbacks, whose messages are class\n * instances with `_getType()` rather than plain `{role, content}` dicts.\n * Reuses the decomposer's duck-typing so the two never drift.\n */\nexport function captureLangChainMessages(\n messages: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n const safeMessages = messages\n .map((m) => ({ role: getRole(m) || undefined, content: contentToText(getContent(m)) }))\n .filter((m) => m.content.length > 0)\n .map((m) => ({ role: m.role, content: truncateText(m.content, maxBytes) }));\n return safeMessages.length > 0 ? { messages: safeMessages } : undefined;\n}\n\n/** `input_data` for the raw-prompt (non-chat) LangChain LLM callback. */\nexport function capturePrompts(\n prompts: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(prompts) || prompts.length === 0) return undefined;\n const messages = prompts\n .filter((p): p is string => typeof p === \"string\" && p.length > 0)\n .map((p) => ({ role: \"user\" as const, content: truncateText(p, maxBytes) }));\n return messages.length > 0 ? { messages } : undefined;\n}\n\n/**\n * `output_data` text from a LangChain `LLMResult` — `generations` is an\n * array-of-arrays (one inner array per prompt).\n */\nexport function extractLangChainOutputText(\n generations: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(generations)) return undefined;\n const parts: string[] = [];\n for (const group of generations) {\n if (!Array.isArray(group)) continue;\n for (const gen of group) {\n const text = (gen as { text?: unknown })?.text;\n if (typeof text === \"string\" && text) parts.push(text);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\nfunction safeJson(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/_internal/active-framework.ts","../../src/_internal/llm-io.ts"],"names":[],"mappings":"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","file":"chunk-5IMBYZUB.js","sourcesContent":["/**\n * MHQ-859 — active framework discovery, the TS half of AGE-240.\n *\n * Python has had this since AGE-240: each adapter marks itself active when\n * it intercepts a call, the trace stamps `morse_ai.framework` on its\n * resource, and the server uses it to disambiguate agents that share a\n * logical name but not an implementation. TypeScript had the *consumer*\n * side wired all along — `otel-provider.ts` already maps\n * `resource[\"morse_ai.framework\"]` to the `av.framework` root-span\n * attribute — but nothing ever set it, so every TS trace landed with\n * `framework` NULL and framework filtering silently excluded all TS traffic.\n *\n * Python uses a `threading.local`. The Node equivalent is per-trace state,\n * not per-thread: `AsyncLocalStorage` already scopes the active trace, and\n * concurrent traces in one process must not see each other's marker. So the\n * marker is written straight onto the active trace state and there is no\n * module-global to leak across interleaved async calls — which also removes\n * the need for Python's `clear_active_framework()` try/finally discipline.\n *\n * First framework wins per trace: when a customer mixes two adapters in one\n * trace, the first to fire defines the label. Absence is the signal — never\n * invent a default.\n */\n\nimport { getActiveTraceState } from \"./tracing\";\n\n/**\n * Mark `name` as the framework for the currently-active trace.\n *\n * No-op when no trace is active (an adapter can fire outside `run()`), and\n * no-op when a framework is already set. Never throws — telemetry must not\n * break customer code.\n */\nexport function setActiveFramework(name: string): void {\n if (typeof name !== \"string\" || name.length === 0) return;\n try {\n const state = getActiveTraceState();\n if (state !== null && !state.framework) {\n state.framework = name;\n }\n } catch {\n // swallow — never break the caller\n }\n}\n\n/** Framework recorded on the active trace, or `undefined`. */\nexport function getActiveFramework(): string | undefined {\n try {\n return getActiveTraceState()?.framework ?? undefined;\n } catch {\n return undefined;\n }\n}\n","/**\n * MHQ-858 — shared `input_data` / `output_data` capture for LLM spans.\n *\n * Python's adapters have captured prompt/response content on `llm` spans\n * since MHQ-772; no TypeScript adapter ever did, so the trace-detail\n * INPUT/OUTPUT panes were empty for every TS customer while being populated\n * for the Python customer running the identical workload.\n *\n * Mirrors `morse_ai/adapters/anthropic.py`'s `_safe_input_messages` /\n * `_extract_output_text`, including the 4096-byte cap, so the two SDKs\n * produce the same shape for the same call.\n */\n\nimport { contentToText, getContent, getRole } from \"../_agent-sdk-common/context-decomposer\";\n\n/** Bytes of text kept per field. Matches Python's `_CONTENT_BYTE_CAP`. */\nexport const CONTENT_BYTE_CAP = 4096;\n\n/**\n * Truncate on a UTF-8 *byte* budget, not a UTF-16 code-unit count — a\n * 4096-char string of emoji is 16KB on the wire. Never splits a code point.\n */\nexport function truncateText(text: string, maxBytes: number = CONTENT_BYTE_CAP): string {\n if (typeof text !== \"string\" || text.length === 0) return text;\n const encoder = new TextEncoder();\n const bytes = encoder.encode(text);\n if (bytes.length <= maxBytes) return text;\n // `fatal: false` replaces a trailing partial code point with U+FFFD\n // rather than throwing; drop it so the value stays clean.\n const sliced = new TextDecoder(\"utf-8\", { fatal: false }).decode(bytes.subarray(0, maxBytes));\n return sliced.replace(/�$/, \"\") + \"…\";\n}\n\nexport interface CapturedInput {\n messages: Array<{ role?: unknown; content?: unknown }>;\n system?: string;\n}\n\n/**\n * Build a truncated, JSON-safe `input_data` from a chat-completions-shaped\n * request. String content is truncated; block-form content (tool_use,\n * tool_result, image parts) passes through as-is — per-block truncation\n * would mean reconstructing each provider's content-block schema exactly,\n * which is not worth it for a display field.\n *\n * Returns `undefined` when there is nothing worth showing, so callers can\n * assign unconditionally without writing empty objects onto the wire.\n */\nexport function captureInputMessages(\n messages: unknown,\n system?: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n\n const safeMessages = messages\n .filter((m): m is Record<string, unknown> => typeof m === \"object\" && m !== null)\n .map((m) => ({\n role: m.role,\n content: typeof m.content === \"string\" ? truncateText(m.content, maxBytes) : m.content,\n }));\n if (safeMessages.length === 0) return undefined;\n\n const out: CapturedInput = { messages: safeMessages };\n const systemText = flattenSystem(system);\n if (systemText) out.system = truncateText(systemText, maxBytes);\n return out;\n}\n\n/**\n * Anthropic's `system` is either a string or an array of text blocks.\n * Returns `undefined` when neither yields text.\n */\nexport function flattenSystem(system: unknown): string | undefined {\n if (typeof system === \"string\") return system || undefined;\n if (!Array.isArray(system)) return undefined;\n const parts = system\n .map((block) =>\n typeof block === \"string\"\n ? block\n : typeof (block as { text?: unknown })?.text === \"string\"\n ? (block as { text: string }).text\n : \"\",\n )\n .filter(Boolean);\n return parts.length > 0 ? parts.join(\"\\n\") : undefined;\n}\n\n/**\n * Extract the assistant's text from an Anthropic `Message.content` array.\n * A response that only calls a tool still yields something meaningful\n * rather than nothing — same rule as Python's `_extract_output_text`.\n */\nexport function extractAnthropicOutputText(\n content: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(content) || content.length === 0) return undefined;\n const parts: string[] = [];\n for (const block of content) {\n const b = block as { type?: unknown; text?: unknown; name?: unknown; input?: unknown };\n if (b?.type === \"text\" && typeof b.text === \"string\" && b.text) {\n parts.push(b.text);\n } else if (b?.type === \"tool_use\") {\n const name = typeof b.name === \"string\" ? b.name : \"tool\";\n parts.push(b.input ? `[tool_use:${name}] ${safeJson(b.input)}` : `[tool_use:${name}]`);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * Extract the assistant's text from an OpenAI chat-completions response,\n * including a tool-call-only response.\n */\nexport function extractOpenAiOutputText(\n choices: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(choices) || choices.length === 0) return undefined;\n const parts: string[] = [];\n for (const choice of choices) {\n const message = (choice as { message?: Record<string, unknown> })?.message;\n if (!message) continue;\n if (typeof message.content === \"string\" && message.content) {\n parts.push(message.content);\n }\n const toolCalls = message.tool_calls;\n if (Array.isArray(toolCalls)) {\n for (const call of toolCalls) {\n const fn = (call as { function?: { name?: unknown; arguments?: unknown } })?.function;\n const name = typeof fn?.name === \"string\" ? fn.name : \"tool\";\n parts.push(\n fn?.arguments ? `[tool_call:${name}] ${String(fn.arguments)}` : `[tool_call:${name}]`,\n );\n }\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\n/**\n * `input_data` for LangChain/LangGraph callbacks, whose messages are class\n * instances with `_getType()` rather than plain `{role, content}` dicts.\n * Reuses the decomposer's duck-typing so the two never drift.\n */\nexport function captureLangChainMessages(\n messages: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(messages) || messages.length === 0) return undefined;\n const safeMessages = messages\n .map((m) => ({ role: getRole(m) || undefined, content: contentToText(getContent(m)) }))\n .filter((m) => m.content.length > 0)\n .map((m) => ({ role: m.role, content: truncateText(m.content, maxBytes) }));\n return safeMessages.length > 0 ? { messages: safeMessages } : undefined;\n}\n\n/** `input_data` for the raw-prompt (non-chat) LangChain LLM callback. */\nexport function capturePrompts(\n prompts: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): CapturedInput | undefined {\n if (!Array.isArray(prompts) || prompts.length === 0) return undefined;\n const messages = prompts\n .filter((p): p is string => typeof p === \"string\" && p.length > 0)\n .map((p) => ({ role: \"user\" as const, content: truncateText(p, maxBytes) }));\n return messages.length > 0 ? { messages } : undefined;\n}\n\n/**\n * `output_data` text from a LangChain `LLMResult` — `generations` is an\n * array-of-arrays (one inner array per prompt).\n */\nexport function extractLangChainOutputText(\n generations: unknown,\n maxBytes: number = CONTENT_BYTE_CAP,\n): string | undefined {\n if (!Array.isArray(generations)) return undefined;\n const parts: string[] = [];\n for (const group of generations) {\n if (!Array.isArray(group)) continue;\n for (const gen of group) {\n const text = (gen as { text?: unknown })?.text;\n if (typeof text === \"string\" && text) parts.push(text);\n }\n }\n if (parts.length === 0) return undefined;\n return truncateText(parts.join(\"\\n\"), maxBytes);\n}\n\nfunction safeJson(value: unknown): string {\n try {\n return JSON.stringify(value) ?? String(value);\n } catch {\n return String(value);\n }\n}\n"]}
|
|
@@ -238,7 +238,7 @@ function redactValue(value, config, depth = 0) {
|
|
|
238
238
|
}
|
|
239
239
|
return value;
|
|
240
240
|
}
|
|
241
|
-
var PATTERN_ORDER, MANDATORY_PATTERNS, DEFAULT_OFF_PATTERNS, SHORT_KEYS, PATTERNS, EXTRA_PATTERN_CAP, EXTRA_PATTERN_CHAR_CAP, MAX_DEPTH;
|
|
241
|
+
var PATTERN_ORDER, MANDATORY_PATTERNS, DEFAULT_OFF_PATTERNS, SHORT_KEYS, SECRET_ASSIGNMENT_SOURCE, PATTERNS, EXTRA_PATTERN_CAP, EXTRA_PATTERN_CHAR_CAP, MAX_DEPTH;
|
|
242
242
|
var init_redaction = __esm({
|
|
243
243
|
"src/_internal/redaction.ts"() {
|
|
244
244
|
PATTERN_ORDER = [
|
|
@@ -249,7 +249,10 @@ var init_redaction = __esm({
|
|
|
249
249
|
"phone_us",
|
|
250
250
|
"phone_e164",
|
|
251
251
|
"ssn_us",
|
|
252
|
-
"ip_address"
|
|
252
|
+
"ip_address",
|
|
253
|
+
// Last: the value-shaped patterns above are more specific, so a JWT inside
|
|
254
|
+
// `authorization: Bearer eyJ...` gets its own tag before this one runs.
|
|
255
|
+
"secret_assignment"
|
|
253
256
|
];
|
|
254
257
|
MANDATORY_PATTERNS = /* @__PURE__ */ new Set([
|
|
255
258
|
"api_key_prefixed",
|
|
@@ -266,8 +269,13 @@ var init_redaction = __esm({
|
|
|
266
269
|
phone_us: "phone",
|
|
267
270
|
phone_e164: "phone",
|
|
268
271
|
ssn_us: "ssn",
|
|
269
|
-
ip_address: "ip"
|
|
272
|
+
ip_address: "ip",
|
|
273
|
+
secret_assignment: "secret"
|
|
274
|
+
// pragma: allowlist secret — a label, not a value
|
|
270
275
|
};
|
|
276
|
+
SECRET_ASSIGNMENT_SOURCE = // Compound keys accept `=` or `:`; bare `secret` requires `=`, because with
|
|
277
|
+
// `:` it is more often a marker (`k8s-secret: mounted`) than an assignment.
|
|
278
|
+
`(?:(?:password|passwd|pwd|client[-_]?secret|secret[-_]?key|private[-_]?key|access[-_]?key|api[-_]?key|auth[-_]?token|access[-_]?token|refresh[-_]?token|id[-_]?token|session[-_]?token|authorization|credentials?)["']?\\s*[=:]|\\bsecret["']?\\s*=)\\s*(?:bearer\\s+)?(?:"[^"]*"|'[^']*'|\\S+)`;
|
|
271
279
|
PATTERNS = {
|
|
272
280
|
api_key_prefixed: new RegExp(
|
|
273
281
|
"\\b(?:sk-[A-Za-z0-9_-]{20,}|sk_(?:live|test)_[A-Za-z0-9]{20,}|mhq_[A-Za-z0-9]{20,}|av_[A-Za-z0-9]{20,}|ghp_[A-Za-z0-9]{36}|gho_[A-Za-z0-9]{36}|ghu_[A-Za-z0-9]{36}|ghs_[A-Za-z0-9]{36}|ghr_[A-Za-z0-9]{36}|xox[bopsa]-[0-9A-Za-z\\-]{10,}|(?:AKIA|ASIA|AGPA|AIDA|AROA|AIPA|ANPA|ANVA|ASCA)[0-9A-Z]{16})\\b",
|
|
@@ -298,7 +306,17 @@ var init_redaction = __esm({
|
|
|
298
306
|
ip_address: new RegExp(
|
|
299
307
|
"\\b(?:(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)(?:\\.(?:25[0-5]|2[0-4]\\d|1\\d\\d|[1-9]?\\d)){3}|(?:[A-F0-9]{1,4}:){2,7}[A-F0-9]{1,4})\\b",
|
|
300
308
|
"gi"
|
|
301
|
-
)
|
|
309
|
+
),
|
|
310
|
+
// MHQ-973 — key-context secret assignment. Every pattern above is
|
|
311
|
+
// VALUE-shaped: it recognises a credential by its own format. That cannot
|
|
312
|
+
// catch `password=hunter2` — `hunter2` is an ordinary word, and only the KEY
|
|
313
|
+
// marks it as a secret.
|
|
314
|
+
//
|
|
315
|
+
// Deliberately excludes a bare `token`: this is an LLM-observability SDK, and
|
|
316
|
+
// `input_tokens=100` / `max_tokens=4096` are core telemetry. Only unambiguous
|
|
317
|
+
// `*_token` compounds match. No leading `\\b` either, so `PGPASSWORD=` and
|
|
318
|
+
// `MYSQL_PWD=` are caught; the `[=:]` anchor is what prevents false positives.
|
|
319
|
+
secret_assignment: new RegExp(SECRET_ASSIGNMENT_SOURCE, "gi")
|
|
302
320
|
};
|
|
303
321
|
EXTRA_PATTERN_CAP = 10;
|
|
304
322
|
EXTRA_PATTERN_CHAR_CAP = 256;
|
|
@@ -393,6 +411,7 @@ function redactedMessage(error) {
|
|
|
393
411
|
const out = redactValue(raw, activeRedactionConfig);
|
|
394
412
|
raw = typeof out === "string" ? out : String(out);
|
|
395
413
|
}
|
|
414
|
+
raw = raw.replace(new RegExp(SECRET_ASSIGNMENT_SOURCE, "gi"), "[REDACTED:secret]");
|
|
396
415
|
} catch {
|
|
397
416
|
return "<redaction unavailable>";
|
|
398
417
|
}
|
|
@@ -586,12 +605,12 @@ function _resetForTesting() {
|
|
|
586
605
|
level = LEVEL_ERROR;
|
|
587
606
|
activeRedactionConfig = null;
|
|
588
607
|
}
|
|
589
|
-
var SDK_VERSION, LEVEL_OFF, LEVEL_ERROR, LEVEL_DEBUG, VALID_LEVELS, level, RATE_WINDOW_MS, RATE_LIMIT_PER_WINDOW, RATE_LIMIT_PER_WINDOW_DEBUG, rateBuckets, LOCAL_LOG_WINDOW_MS, LOCAL_LOG_LIMIT_PER_WINDOW, localLogBuckets, MAX_STACK_ENTRIES, MAX_MESSAGE_CHARS, MAX_BATCH_EVENTS, ALLOWED_EXTRA_KEYS, DIAGNOSTICS_PATH, MAX_PENDING, FLUSH_INTERVAL_MS, BREAKER_THRESHOLD, BREAKER_COOLDOWN_MS, REASON_QUEUE_FULL, REASON_RETRY_EXHAUSTED, REASON_QUOTA_REJECTED, REASON_SHUTDOWN_DROP, counters, activeRedactionConfig, pending, timer, consecutiveFailures, breakerOpenUntil, reporting, MORSE_PATH_MARKERS, clientConfig;
|
|
608
|
+
var SDK_VERSION, LEVEL_OFF, LEVEL_ERROR, LEVEL_DEBUG, VALID_LEVELS, level, RATE_WINDOW_MS, RATE_LIMIT_PER_WINDOW, RATE_LIMIT_PER_WINDOW_DEBUG, rateBuckets, LOCAL_LOG_WINDOW_MS, LOCAL_LOG_LIMIT_PER_WINDOW, localLogBuckets, MAX_STACK_ENTRIES, MAX_MESSAGE_CHARS, MAX_BATCH_EVENTS, ALLOWED_EXTRA_KEYS, DIAGNOSTICS_PATH, MAX_PENDING, FLUSH_INTERVAL_MS, BREAKER_THRESHOLD, BREAKER_COOLDOWN_MS, REASON_QUEUE_FULL, REASON_RETRY_EXHAUSTED, REASON_QUOTA_REJECTED, REASON_ENCODE_FAILED, REASON_SHUTDOWN_DROP, REASON_AUTH_REJECTED, REASON_ENDPOINT_REJECTED, REASON_SEND_FAILED, counters, activeRedactionConfig, pending, timer, consecutiveFailures, breakerOpenUntil, reporting, MORSE_PATH_MARKERS, clientConfig;
|
|
590
609
|
var init_diagnostics = __esm({
|
|
591
610
|
"src/_internal/diagnostics.ts"() {
|
|
592
611
|
init_env();
|
|
593
612
|
init_redaction();
|
|
594
|
-
SDK_VERSION = "0.5.
|
|
613
|
+
SDK_VERSION = "0.5.1-rc.1" ;
|
|
595
614
|
LEVEL_OFF = "off";
|
|
596
615
|
LEVEL_ERROR = "error";
|
|
597
616
|
LEVEL_DEBUG = "debug";
|
|
@@ -622,7 +641,11 @@ var init_diagnostics = __esm({
|
|
|
622
641
|
REASON_QUEUE_FULL = "queue_full";
|
|
623
642
|
REASON_RETRY_EXHAUSTED = "retry_exhausted";
|
|
624
643
|
REASON_QUOTA_REJECTED = "quota_rejected";
|
|
644
|
+
REASON_ENCODE_FAILED = "encode_failed";
|
|
625
645
|
REASON_SHUTDOWN_DROP = "shutdown_drop";
|
|
646
|
+
REASON_AUTH_REJECTED = "auth_rejected";
|
|
647
|
+
REASON_ENDPOINT_REJECTED = "endpoint_rejected";
|
|
648
|
+
REASON_SEND_FAILED = "send_failed";
|
|
626
649
|
counters = /* @__PURE__ */ new Map();
|
|
627
650
|
activeRedactionConfig = null;
|
|
628
651
|
pending = [];
|
|
@@ -1263,6 +1286,6 @@ var init_propagation = __esm({
|
|
|
1263
1286
|
}
|
|
1264
1287
|
});
|
|
1265
1288
|
|
|
1266
|
-
export { DEFAULT_ENDPOINT, REASON_QUEUE_FULL, REASON_QUOTA_REJECTED, REASON_RETRY_EXHAUSTED, REASON_SHUTDOWN_DROP, SpanType, W3C_TRACEPARENT_HEADER, _resetForTesting, _resetForTesting2, buildRedactionConfig, buildTraceEntry, extractTraceparent, flushOnce, formatTraceparent, generateSpanId, generateTraceId, getActiveTraceState, getApiKey, getEndpoint, getEngine, getFlushIntervalSeconds, getInternalSource, getLastTrace, getMaxBatchSize, getMaxFieldBytes, getMaxQueueSize, getRedactionConfig, getSampleRate, getTransport, init_diagnostics, init_env, init_otel_provider_browser, init_propagation, init_redaction, init_spans, init_tracing, injectIntoRequestInit, injectTraceparent, isDisabled, isValidInternalSource, nowIso, recordDrop, redactValue, report, runAsync, runSync, sendTrace, setContext, setDiagnosticsClientConfig, setLevel, setRedactionConfig2 as setRedactionConfig, setSource, setTransport, spanAsync, spanSync, startSpan };
|
|
1267
|
-
//# sourceMappingURL=chunk-
|
|
1268
|
-
//# sourceMappingURL=chunk-
|
|
1289
|
+
export { DEFAULT_ENDPOINT, REASON_AUTH_REJECTED, REASON_ENCODE_FAILED, REASON_ENDPOINT_REJECTED, REASON_QUEUE_FULL, REASON_QUOTA_REJECTED, REASON_RETRY_EXHAUSTED, REASON_SEND_FAILED, REASON_SHUTDOWN_DROP, SpanType, W3C_TRACEPARENT_HEADER, _resetForTesting, _resetForTesting2, buildRedactionConfig, buildTraceEntry, extractTraceparent, flushOnce, formatTraceparent, generateSpanId, generateTraceId, getActiveTraceState, getApiKey, getEndpoint, getEngine, getFlushIntervalSeconds, getInternalSource, getLastTrace, getMaxBatchSize, getMaxFieldBytes, getMaxQueueSize, getRedactionConfig, getSampleRate, getTransport, init_diagnostics, init_env, init_otel_provider_browser, init_propagation, init_redaction, init_spans, init_tracing, injectIntoRequestInit, injectTraceparent, isDisabled, isValidInternalSource, nowIso, recordDrop, redactValue, report, runAsync, runSync, sendTrace, setContext, setDiagnosticsClientConfig, setLevel, setRedactionConfig2 as setRedactionConfig, setSource, setTransport, spanAsync, spanSync, startSpan };
|
|
1290
|
+
//# sourceMappingURL=chunk-7G266PKE.js.map
|
|
1291
|
+
//# sourceMappingURL=chunk-7G266PKE.js.map
|