@morsehq-dev/sdk 0.5.0-rc.3 → 0.5.0-rc.4
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 +34 -0
- package/dist/anthropic/index.cjs +11 -11
- package/dist/anthropic/index.js +4 -4
- package/dist/anthropic-agent-sdk/index.cjs +37 -37
- 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 +37 -37
- package/dist/browser/anthropic-agent-sdk/index.js +6 -6
- package/dist/{chunk-DPGUBZVO.cjs → browser/chunk-255AHH2W.cjs} +15 -15
- package/dist/browser/{chunk-XLQSSJUZ.cjs.map → chunk-255AHH2W.cjs.map} +1 -1
- package/dist/browser/{chunk-QCI2ZDQS.cjs → chunk-36QTJJT7.cjs} +12 -12
- package/dist/browser/{chunk-QCI2ZDQS.cjs.map → chunk-36QTJJT7.cjs.map} +1 -1
- package/dist/browser/{chunk-PM5D6VXF.cjs → chunk-3H2OJLC2.cjs} +4 -3
- package/dist/browser/{chunk-PM5D6VXF.cjs.map → chunk-3H2OJLC2.cjs.map} +1 -1
- package/dist/browser/{chunk-P7XWSMFX.cjs → chunk-3STFITZF.cjs} +6 -6
- package/dist/browser/{chunk-P7XWSMFX.cjs.map → chunk-3STFITZF.cjs.map} +1 -1
- package/dist/browser/{chunk-YSJVJ3Z3.cjs → chunk-6J6F5LJI.cjs} +7 -7
- package/dist/browser/{chunk-YSJVJ3Z3.cjs.map → chunk-6J6F5LJI.cjs.map} +1 -1
- package/dist/browser/{chunk-LGG5PL5U.js → chunk-E2OVLWAF.js} +3 -3
- package/dist/browser/{chunk-LGG5PL5U.js.map → chunk-E2OVLWAF.js.map} +1 -1
- package/dist/{chunk-HCEKAVDR.js → browser/chunk-JR6JN7IZ.js} +4 -4
- package/dist/browser/{chunk-KGSLJLWW.js.map → chunk-JR6JN7IZ.js.map} +1 -1
- package/dist/browser/{chunk-WUQXNRD3.js → chunk-KXVSMY6L.js} +3 -3
- package/dist/browser/{chunk-WUQXNRD3.js.map → chunk-KXVSMY6L.js.map} +1 -1
- package/dist/browser/{chunk-N4Q2WMOE.js → chunk-PIWO5L5N.js} +5 -5
- package/dist/browser/{chunk-N4Q2WMOE.js.map → chunk-PIWO5L5N.js.map} +1 -1
- package/dist/browser/{chunk-KFWCOUL3.cjs → chunk-VOZBYSWK.cjs} +5 -5
- package/dist/browser/{chunk-KFWCOUL3.cjs.map → chunk-VOZBYSWK.cjs.map} +1 -1
- package/dist/{chunk-7PGR4NJG.js → browser/chunk-VZA2EPY3.js} +4 -4
- package/dist/browser/{chunk-MOBYR3AP.js.map → chunk-VZA2EPY3.js.map} +1 -1
- package/dist/browser/{chunk-MI4OUWUZ.js → chunk-WIWUEI5Z.js} +3 -3
- package/dist/browser/{chunk-MI4OUWUZ.js.map → chunk-WIWUEI5Z.js.map} +1 -1
- package/dist/browser/{chunk-Y3BOPSM3.js → chunk-XD4VWCAC.js} +4 -4
- package/dist/browser/{chunk-Y3BOPSM3.js.map → chunk-XD4VWCAC.js.map} +1 -1
- package/dist/browser/{chunk-VSG4EWNL.cjs → chunk-YD7TO4PD.cjs} +18 -18
- package/dist/browser/{chunk-VSG4EWNL.cjs.map → chunk-YD7TO4PD.cjs.map} +1 -1
- package/dist/browser/index.cjs +91 -90
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +9 -8
- 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/{chunk-XHOLQGN6.js → chunk-2O2FFJLK.js} +5 -5
- package/dist/{chunk-XHOLQGN6.js.map → chunk-2O2FFJLK.js.map} +1 -1
- package/dist/{chunk-3XQOZXJM.cjs → chunk-7ZNGY236.cjs} +7 -7
- package/dist/{chunk-3XQOZXJM.cjs.map → chunk-7ZNGY236.cjs.map} +1 -1
- package/dist/{browser/chunk-MOBYR3AP.js → chunk-BNMTY7PE.js} +4 -4
- package/dist/{chunk-7PGR4NJG.js.map → chunk-BNMTY7PE.js.map} +1 -1
- package/dist/{chunk-XZRJXJFA.js → chunk-ELBY4SJ7.js} +4 -4
- package/dist/{chunk-XZRJXJFA.js.map → chunk-ELBY4SJ7.js.map} +1 -1
- package/dist/{chunk-E3G3IE6Y.cjs → chunk-HA5RY4N5.cjs} +4 -3
- package/dist/{chunk-E3G3IE6Y.cjs.map → chunk-HA5RY4N5.cjs.map} +1 -1
- package/dist/{chunk-NGBJJGOC.cjs → chunk-HZKXILBF.cjs} +5 -5
- package/dist/{chunk-NGBJJGOC.cjs.map → chunk-HZKXILBF.cjs.map} +1 -1
- package/dist/{chunk-ZFE75G7S.js → chunk-JFFZBCTP.js} +3 -3
- package/dist/{chunk-ZFE75G7S.js.map → chunk-JFFZBCTP.js.map} +1 -1
- package/dist/{browser/chunk-KGSLJLWW.js → chunk-MBOISGKD.js} +4 -4
- package/dist/{chunk-HCEKAVDR.js.map → chunk-MBOISGKD.js.map} +1 -1
- package/dist/{chunk-UAJO6JM7.js → chunk-Q6NQQ2LO.js} +3 -3
- package/dist/{chunk-UAJO6JM7.js.map → chunk-Q6NQQ2LO.js.map} +1 -1
- package/dist/{chunk-TGHDV5MC.cjs → chunk-RDFDPK2X.cjs} +6 -6
- package/dist/{chunk-TGHDV5MC.cjs.map → chunk-RDFDPK2X.cjs.map} +1 -1
- package/dist/{chunk-RK3JPX27.cjs → chunk-ULWGK6F5.cjs} +12 -12
- package/dist/{chunk-RK3JPX27.cjs.map → chunk-ULWGK6F5.cjs.map} +1 -1
- package/dist/{chunk-YQ6ZA7OE.cjs → chunk-VM3QM22Z.cjs} +18 -18
- package/dist/{chunk-YQ6ZA7OE.cjs.map → chunk-VM3QM22Z.cjs.map} +1 -1
- package/dist/{browser/chunk-XLQSSJUZ.cjs → chunk-WLNADB4J.cjs} +15 -15
- package/dist/{chunk-DPGUBZVO.cjs.map → chunk-WLNADB4J.cjs.map} +1 -1
- package/dist/{chunk-T2NESDMT.js → chunk-YPP5DDPO.js} +3 -3
- package/dist/{chunk-T2NESDMT.js.map → chunk-YPP5DDPO.js.map} +1 -1
- package/dist/index.cjs +98 -97
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +10 -9
- 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 +14 -13
|
@@ -1,16 +1,16 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
5
|
-
var
|
|
6
|
-
var
|
|
7
|
-
var
|
|
3
|
+
var chunkYD7TO4PD_cjs = require('../chunk-YD7TO4PD.cjs');
|
|
4
|
+
require('../chunk-VOZBYSWK.cjs');
|
|
5
|
+
var chunk6J6F5LJI_cjs = require('../chunk-6J6F5LJI.cjs');
|
|
6
|
+
var chunk255AHH2W_cjs = require('../chunk-255AHH2W.cjs');
|
|
7
|
+
var chunk3STFITZF_cjs = require('../chunk-3STFITZF.cjs');
|
|
8
8
|
var chunkSWQOPFE4_cjs = require('../chunk-SWQOPFE4.cjs');
|
|
9
9
|
require('../chunk-RBNCTHK3.cjs');
|
|
10
|
-
var
|
|
10
|
+
var chunk3H2OJLC2_cjs = require('../chunk-3H2OJLC2.cjs');
|
|
11
11
|
|
|
12
12
|
// src/anthropic-agent-sdk/client-wrapper.ts
|
|
13
|
-
|
|
13
|
+
chunk3H2OJLC2_cjs.init_tracing();
|
|
14
14
|
var WRAPPED_CLIENT = /* @__PURE__ */ Symbol.for("morse.anthropic-agent-sdk.wrapped");
|
|
15
15
|
var INSTALL_SENTINEL = /* @__PURE__ */ Symbol.for("morse.anthropic-agent-sdk.installed");
|
|
16
16
|
var ORIGINALS_SENTINEL = /* @__PURE__ */ Symbol.for("morse.anthropic-agent-sdk.originals");
|
|
@@ -36,7 +36,7 @@ function wrapClaudeAgentSDK(client, options = {}) {
|
|
|
36
36
|
});
|
|
37
37
|
return wrapper;
|
|
38
38
|
}
|
|
39
|
-
var instrumentClaudeAgentSDK =
|
|
39
|
+
var instrumentClaudeAgentSDK = chunk3STFITZF_cjs.absorbErrorsAsync(
|
|
40
40
|
async (clientOrOptions = void 0, maybeOptions = {}) => {
|
|
41
41
|
if (clientOrOptions && isClient(clientOrOptions)) {
|
|
42
42
|
const opts2 = maybeOptions ?? {};
|
|
@@ -64,7 +64,7 @@ var instrumentClaudeAgentSDK = chunkP7XWSMFX_cjs.absorbErrorsAsync(
|
|
|
64
64
|
},
|
|
65
65
|
{ fingerprint: "morse.adapters.anthropic-agent-sdk.install" }
|
|
66
66
|
);
|
|
67
|
-
var uninstallClaudeAgentSDK =
|
|
67
|
+
var uninstallClaudeAgentSDK = chunk3STFITZF_cjs.absorbErrorsSync(
|
|
68
68
|
(claudeAgentSdkModule) => {
|
|
69
69
|
if (!claudeAgentSdkModule || typeof claudeAgentSdkModule !== "object") return;
|
|
70
70
|
const mod = claudeAgentSdkModule;
|
|
@@ -116,7 +116,7 @@ function buildPatchedQuery(original, options) {
|
|
|
116
116
|
const boundOriginal = (p, o) => original.call(this, p, o);
|
|
117
117
|
const model = (callOptions && typeof callOptions.model === "string" ? callOptions.model : void 0) ?? defaultModel;
|
|
118
118
|
async function* iterateInTrace() {
|
|
119
|
-
const handle =
|
|
119
|
+
const handle = chunk255AHH2W_cjs.emitAgentSpan({
|
|
120
120
|
adapter: "anthropic-agent-sdk",
|
|
121
121
|
agentName: defaultAgentName,
|
|
122
122
|
model
|
|
@@ -139,7 +139,7 @@ function buildPatchedQuery(original, options) {
|
|
|
139
139
|
}
|
|
140
140
|
handle?.end();
|
|
141
141
|
}
|
|
142
|
-
if (
|
|
142
|
+
if (chunk3H2OJLC2_cjs.getActiveTraceState() !== null) {
|
|
143
143
|
return iterateInTrace();
|
|
144
144
|
}
|
|
145
145
|
return (async function* outerTrace() {
|
|
@@ -155,7 +155,7 @@ function buildPatchedQuery(original, options) {
|
|
|
155
155
|
};
|
|
156
156
|
}
|
|
157
157
|
});
|
|
158
|
-
const runPromise =
|
|
158
|
+
const runPromise = chunk3H2OJLC2_cjs.runAsync({ agentName: defaultAgentName }, async (runHandle) => {
|
|
159
159
|
try {
|
|
160
160
|
for await (const event of iterateInTrace()) {
|
|
161
161
|
queue.push({ kind: "value", value: event });
|
|
@@ -191,10 +191,10 @@ function buildPatchedQuery(original, options) {
|
|
|
191
191
|
}
|
|
192
192
|
|
|
193
193
|
// src/_agent-sdk-common/context-propagation.ts
|
|
194
|
-
|
|
195
|
-
var captureParentForFanOut =
|
|
194
|
+
chunk3H2OJLC2_cjs.init_tracing();
|
|
195
|
+
var captureParentForFanOut = chunk3STFITZF_cjs.absorbErrorsSync(
|
|
196
196
|
() => {
|
|
197
|
-
const state =
|
|
197
|
+
const state = chunk3H2OJLC2_cjs.getActiveTraceState();
|
|
198
198
|
if (state === null) return null;
|
|
199
199
|
const top = state.spanStack[state.spanStack.length - 1];
|
|
200
200
|
if (!top) return null;
|
|
@@ -205,13 +205,13 @@ var captureParentForFanOut = chunkP7XWSMFX_cjs.absorbErrorsSync(
|
|
|
205
205
|
},
|
|
206
206
|
{ fingerprint: "agent-sdk-common.captureParentForFanOut" }
|
|
207
207
|
);
|
|
208
|
-
var emitWithPinnedParent =
|
|
208
|
+
var emitWithPinnedParent = chunk3STFITZF_cjs.absorbErrorsSync(
|
|
209
209
|
(opts) => {
|
|
210
|
-
const state =
|
|
210
|
+
const state = chunk3H2OJLC2_cjs.getActiveTraceState();
|
|
211
211
|
if (state === null) return null;
|
|
212
212
|
const snap = opts.snapshot;
|
|
213
213
|
if (!snap || snap.traceId !== state.traceId) return null;
|
|
214
|
-
const handle =
|
|
214
|
+
const handle = chunk3H2OJLC2_cjs.startSpan({
|
|
215
215
|
name: opts.name,
|
|
216
216
|
type: opts.type,
|
|
217
217
|
metadata: opts.metadata
|
|
@@ -233,13 +233,13 @@ function findSpanById(state, spanId) {
|
|
|
233
233
|
}
|
|
234
234
|
return void 0;
|
|
235
235
|
}
|
|
236
|
-
var emitAsToolSibling =
|
|
236
|
+
var emitAsToolSibling = chunk3STFITZF_cjs.absorbErrorsSync(
|
|
237
237
|
(opts) => {
|
|
238
|
-
const state =
|
|
238
|
+
const state = chunk3H2OJLC2_cjs.getActiveTraceState();
|
|
239
239
|
if (state === null) return null;
|
|
240
240
|
const tool = findSpanById(state, opts.toolSpanId);
|
|
241
241
|
if (!tool) return null;
|
|
242
|
-
const handle =
|
|
242
|
+
const handle = chunk3H2OJLC2_cjs.startSpan({
|
|
243
243
|
name: opts.name,
|
|
244
244
|
type: opts.type,
|
|
245
245
|
metadata: opts.metadata
|
|
@@ -250,9 +250,9 @@ var emitAsToolSibling = chunkP7XWSMFX_cjs.absorbErrorsSync(
|
|
|
250
250
|
},
|
|
251
251
|
{ fingerprint: "agent-sdk-common.emitAsToolSibling" }
|
|
252
252
|
);
|
|
253
|
-
|
|
253
|
+
chunk3STFITZF_cjs.absorbErrorsSync(
|
|
254
254
|
() => {
|
|
255
|
-
const state =
|
|
255
|
+
const state = chunk3H2OJLC2_cjs.getActiveTraceState();
|
|
256
256
|
if (state === null) return null;
|
|
257
257
|
return {
|
|
258
258
|
traceId: state.traceId,
|
|
@@ -297,7 +297,7 @@ var _handleHookEvent = (payload, options) => {
|
|
|
297
297
|
return;
|
|
298
298
|
}
|
|
299
299
|
}
|
|
300
|
-
const fallback =
|
|
300
|
+
const fallback = chunk255AHH2W_cjs.emitHookSpan({
|
|
301
301
|
adapter: "anthropic-agent-sdk",
|
|
302
302
|
hookName: name,
|
|
303
303
|
hookKind: kind,
|
|
@@ -307,7 +307,7 @@ var _handleHookEvent = (payload, options) => {
|
|
|
307
307
|
fallback.end();
|
|
308
308
|
}
|
|
309
309
|
};
|
|
310
|
-
var handleHookEvent =
|
|
310
|
+
var handleHookEvent = chunk3STFITZF_cjs.absorbErrorsSync(_handleHookEvent, {
|
|
311
311
|
fingerprint: "morse.anthropic-agent-sdk.hook-instrumentation.handle"
|
|
312
312
|
});
|
|
313
313
|
function installHookInstrumentation(client, options) {
|
|
@@ -335,7 +335,7 @@ function installHookInstrumentation(client, options) {
|
|
|
335
335
|
}
|
|
336
336
|
|
|
337
337
|
// src/anthropic-agent-sdk/llm-instrumentation.ts
|
|
338
|
-
|
|
338
|
+
chunk3H2OJLC2_cjs.init_diagnostics();
|
|
339
339
|
function readInputTokens(usage) {
|
|
340
340
|
if (usage === void 0 || usage === null || typeof usage !== "object") return void 0;
|
|
341
341
|
const base = typeof usage.input_tokens === "number" && Number.isFinite(usage.input_tokens) ? usage.input_tokens : 0;
|
|
@@ -402,7 +402,7 @@ async function* instrumentLlmCalls(events, options) {
|
|
|
402
402
|
const reportedModel = typeof event.message?.model === "string" && event.message.model.length > 0 ? event.message.model : void 0;
|
|
403
403
|
const model = reportedModel ?? fallbackModel;
|
|
404
404
|
if (!model) return;
|
|
405
|
-
const handle =
|
|
405
|
+
const handle = chunk255AHH2W_cjs.emitLlmSpan({ adapter: "anthropic-agent-sdk", model });
|
|
406
406
|
if (!handle) return;
|
|
407
407
|
const usage = event.message?.usage;
|
|
408
408
|
const inputTokens = readInputTokens(usage);
|
|
@@ -419,7 +419,7 @@ async function* instrumentLlmCalls(events, options) {
|
|
|
419
419
|
applyCost(handle, model, inputTokens, outputTokens, cacheWriteTokens, cachedInputTokens);
|
|
420
420
|
if (requestParams !== void 0) {
|
|
421
421
|
try {
|
|
422
|
-
const segments =
|
|
422
|
+
const segments = chunkYD7TO4PD_cjs.extractAnthropicSegments(
|
|
423
423
|
requestParams,
|
|
424
424
|
event.message
|
|
425
425
|
);
|
|
@@ -442,7 +442,7 @@ async function* instrumentLlmCalls(events, options) {
|
|
|
442
442
|
if (model === void 0 || model.length === 0) {
|
|
443
443
|
return;
|
|
444
444
|
}
|
|
445
|
-
openSpan =
|
|
445
|
+
openSpan = chunk255AHH2W_cjs.emitLlmSpan({
|
|
446
446
|
adapter: "anthropic-agent-sdk",
|
|
447
447
|
model
|
|
448
448
|
});
|
|
@@ -484,7 +484,7 @@ async function* instrumentLlmCalls(events, options) {
|
|
|
484
484
|
}
|
|
485
485
|
if (requestParams !== void 0) {
|
|
486
486
|
try {
|
|
487
|
-
const segments =
|
|
487
|
+
const segments = chunkYD7TO4PD_cjs.extractAnthropicSegments(
|
|
488
488
|
requestParams,
|
|
489
489
|
event.message
|
|
490
490
|
);
|
|
@@ -512,13 +512,13 @@ async function* instrumentLlmCalls(events, options) {
|
|
|
512
512
|
}
|
|
513
513
|
function reportSwallowed(err, fingerprint) {
|
|
514
514
|
try {
|
|
515
|
-
|
|
515
|
+
chunk3H2OJLC2_cjs.report(err, { fingerprint });
|
|
516
516
|
} catch {
|
|
517
517
|
}
|
|
518
518
|
}
|
|
519
519
|
|
|
520
520
|
// src/anthropic-agent-sdk/tool-and-subagent.ts
|
|
521
|
-
|
|
521
|
+
chunk3H2OJLC2_cjs.init_diagnostics();
|
|
522
522
|
var ADAPTER = "anthropic-agent-sdk";
|
|
523
523
|
var TASK_TOOL_NAME = "Task";
|
|
524
524
|
function safeCloseFailed(handle, message) {
|
|
@@ -564,7 +564,7 @@ async function* instrumentTools(events, options) {
|
|
|
564
564
|
tool_use_id: toolUseId
|
|
565
565
|
};
|
|
566
566
|
if (taskPrompt !== void 0) {
|
|
567
|
-
metadata.task_description =
|
|
567
|
+
metadata.task_description = chunk6J6F5LJI_cjs.summarizeToolInput(taskPrompt, inputOpts);
|
|
568
568
|
}
|
|
569
569
|
let handle2 = null;
|
|
570
570
|
try {
|
|
@@ -586,10 +586,10 @@ async function* instrumentTools(events, options) {
|
|
|
586
586
|
}
|
|
587
587
|
let handle = null;
|
|
588
588
|
try {
|
|
589
|
-
handle =
|
|
589
|
+
handle = chunk255AHH2W_cjs.emitToolSpan({
|
|
590
590
|
adapter: ADAPTER,
|
|
591
591
|
toolName: name,
|
|
592
|
-
inputSummary:
|
|
592
|
+
inputSummary: chunk6J6F5LJI_cjs.summarizeToolInput(event.input, inputOpts),
|
|
593
593
|
attributes: { tool_use_id: toolUseId }
|
|
594
594
|
});
|
|
595
595
|
} catch {
|
|
@@ -606,7 +606,7 @@ async function* instrumentTools(events, options) {
|
|
|
606
606
|
open.delete(toolUseId);
|
|
607
607
|
const isError = event.is_error === true;
|
|
608
608
|
try {
|
|
609
|
-
const outputSummary =
|
|
609
|
+
const outputSummary = chunk6J6F5LJI_cjs.summarizeToolOutput(event.content, outputOpts);
|
|
610
610
|
entry.handle.span.metadata = {
|
|
611
611
|
...entry.handle.span.metadata ?? {},
|
|
612
612
|
tool_output_summary: outputSummary
|
|
@@ -678,7 +678,7 @@ async function* instrumentTools(events, options) {
|
|
|
678
678
|
}
|
|
679
679
|
function reportSwallowed2(err, fingerprint) {
|
|
680
680
|
try {
|
|
681
|
-
|
|
681
|
+
chunk3H2OJLC2_cjs.report(err, { fingerprint });
|
|
682
682
|
} catch {
|
|
683
683
|
}
|
|
684
684
|
}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
import { extractAnthropicSegments } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
3
|
-
import { summarizeToolInput, summarizeToolOutput } from '../chunk-
|
|
4
|
-
import { emitAgentSpan, emitHookSpan, emitLlmSpan, emitToolSpan } from '../chunk-
|
|
5
|
-
import { absorbErrorsAsync, absorbErrorsSync } from '../chunk-
|
|
1
|
+
import { extractAnthropicSegments } from '../chunk-PIWO5L5N.js';
|
|
2
|
+
import '../chunk-KXVSMY6L.js';
|
|
3
|
+
import { summarizeToolInput, summarizeToolOutput } from '../chunk-E2OVLWAF.js';
|
|
4
|
+
import { emitAgentSpan, emitHookSpan, emitLlmSpan, emitToolSpan } from '../chunk-VZA2EPY3.js';
|
|
5
|
+
import { absorbErrorsAsync, absorbErrorsSync } from '../chunk-WIWUEI5Z.js';
|
|
6
6
|
import { calculateCost } from '../chunk-4FALQMOZ.js';
|
|
7
7
|
import '../chunk-MLDVXMQD.js';
|
|
8
|
-
import { init_tracing, getActiveTraceState, runAsync, startSpan, init_diagnostics, report } from '../chunk-
|
|
8
|
+
import { init_tracing, getActiveTraceState, runAsync, startSpan, init_diagnostics, report } from '../chunk-XD4VWCAC.js';
|
|
9
9
|
|
|
10
10
|
// src/anthropic-agent-sdk/client-wrapper.ts
|
|
11
11
|
init_tracing();
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunk3STFITZF_cjs = require('./chunk-3STFITZF.cjs');
|
|
4
|
+
var chunk3H2OJLC2_cjs = require('./chunk-3H2OJLC2.cjs');
|
|
5
5
|
|
|
6
6
|
// src/_agent-sdk-common/span-emitter.ts
|
|
7
|
-
|
|
7
|
+
chunk3H2OJLC2_cjs.init_tracing();
|
|
8
8
|
var MAX_NAME_BYTES = 256;
|
|
9
9
|
var MAX_DESCRIPTION_BYTES = 2048;
|
|
10
10
|
function truncate(value, maxBytes) {
|
|
@@ -25,7 +25,7 @@ var _emitAgentSpan = (opts) => {
|
|
|
25
25
|
adapter,
|
|
26
26
|
agent_name: agentName
|
|
27
27
|
};
|
|
28
|
-
const handle =
|
|
28
|
+
const handle = chunk3H2OJLC2_cjs.startSpan({
|
|
29
29
|
name: `${adapter}.agent`,
|
|
30
30
|
type: "agent",
|
|
31
31
|
metadata
|
|
@@ -37,7 +37,7 @@ var _emitAgentSpan = (opts) => {
|
|
|
37
37
|
}
|
|
38
38
|
return handle;
|
|
39
39
|
};
|
|
40
|
-
var emitAgentSpan =
|
|
40
|
+
var emitAgentSpan = chunk3STFITZF_cjs.absorbErrorsSync(
|
|
41
41
|
_emitAgentSpan,
|
|
42
42
|
{
|
|
43
43
|
fingerprint: "morse.adapters.shared.emitAgentSpan"
|
|
@@ -54,7 +54,7 @@ var _emitLlmSpan = (opts) => {
|
|
|
54
54
|
if (typeof opts.provider === "string" && opts.provider.length > 0) {
|
|
55
55
|
metadata.provider = opts.provider;
|
|
56
56
|
}
|
|
57
|
-
const handle =
|
|
57
|
+
const handle = chunk3H2OJLC2_cjs.startSpan({
|
|
58
58
|
name: `${adapter}.llm`,
|
|
59
59
|
type: "llm",
|
|
60
60
|
metadata
|
|
@@ -80,7 +80,7 @@ var _emitLlmSpan = (opts) => {
|
|
|
80
80
|
if (opts.outputData !== void 0) span.output_data = opts.outputData;
|
|
81
81
|
return handle;
|
|
82
82
|
};
|
|
83
|
-
var emitLlmSpan =
|
|
83
|
+
var emitLlmSpan = chunk3STFITZF_cjs.absorbErrorsSync(
|
|
84
84
|
_emitLlmSpan,
|
|
85
85
|
{
|
|
86
86
|
fingerprint: "morse.adapters.shared.emitLlmSpan"
|
|
@@ -101,13 +101,13 @@ var _emitToolSpan = (opts) => {
|
|
|
101
101
|
adapter,
|
|
102
102
|
tool
|
|
103
103
|
};
|
|
104
|
-
return
|
|
104
|
+
return chunk3H2OJLC2_cjs.startSpan({
|
|
105
105
|
name: `${adapter}.tool.${toolName}`,
|
|
106
106
|
type: "tool",
|
|
107
107
|
metadata
|
|
108
108
|
});
|
|
109
109
|
};
|
|
110
|
-
var emitToolSpan =
|
|
110
|
+
var emitToolSpan = chunk3STFITZF_cjs.absorbErrorsSync(
|
|
111
111
|
_emitToolSpan,
|
|
112
112
|
{
|
|
113
113
|
fingerprint: "morse.adapters.shared.emitToolSpan"
|
|
@@ -127,13 +127,13 @@ var _emitSubagentSpan = (opts) => {
|
|
|
127
127
|
if (typeof opts.taskDescription === "string" && opts.taskDescription.length > 0) {
|
|
128
128
|
metadata.task_description = truncate(opts.taskDescription, MAX_DESCRIPTION_BYTES);
|
|
129
129
|
}
|
|
130
|
-
return
|
|
130
|
+
return chunk3H2OJLC2_cjs.startSpan({
|
|
131
131
|
name: `${adapter}.subagent.${subagentName}`,
|
|
132
132
|
type: "agent",
|
|
133
133
|
metadata
|
|
134
134
|
});
|
|
135
135
|
};
|
|
136
|
-
var emitSubagentSpan =
|
|
136
|
+
var emitSubagentSpan = chunk3STFITZF_cjs.absorbErrorsSync(_emitSubagentSpan, {
|
|
137
137
|
fingerprint: "morse.adapters.shared.emitSubagentSpan"
|
|
138
138
|
});
|
|
139
139
|
var _emitHookSpan = (opts) => {
|
|
@@ -157,13 +157,13 @@ var _emitHookSpan = (opts) => {
|
|
|
157
157
|
tool_kind: "hook",
|
|
158
158
|
hook
|
|
159
159
|
};
|
|
160
|
-
return
|
|
160
|
+
return chunk3H2OJLC2_cjs.startSpan({
|
|
161
161
|
name: `${adapter}.hook.${hookKind}.${hookName}`,
|
|
162
162
|
type: "tool",
|
|
163
163
|
metadata
|
|
164
164
|
});
|
|
165
165
|
};
|
|
166
|
-
var emitHookSpan =
|
|
166
|
+
var emitHookSpan = chunk3STFITZF_cjs.absorbErrorsSync(
|
|
167
167
|
_emitHookSpan,
|
|
168
168
|
{
|
|
169
169
|
fingerprint: "morse.adapters.shared.emitHookSpan"
|
|
@@ -175,5 +175,5 @@ exports.emitHookSpan = emitHookSpan;
|
|
|
175
175
|
exports.emitLlmSpan = emitLlmSpan;
|
|
176
176
|
exports.emitSubagentSpan = emitSubagentSpan;
|
|
177
177
|
exports.emitToolSpan = emitToolSpan;
|
|
178
|
-
//# sourceMappingURL=chunk-
|
|
179
|
-
//# sourceMappingURL=chunk-
|
|
178
|
+
//# sourceMappingURL=chunk-255AHH2W.cjs.map
|
|
179
|
+
//# sourceMappingURL=chunk-255AHH2W.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/_agent-sdk-common/span-emitter.ts"],"names":["init_tracing","startSpan","absorbErrorsSync"],"mappings":"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","file":"chunk-XLQSSJUZ.cjs","sourcesContent":["/**\n * `_agent-sdk-common/span-emitter.ts` — shared span-emission helpers used by\n * all three agent-SDK adapters (`anthropic-agent-sdk`, `openai-agents`,\n * `langgraph-js`).\n *\n * Each helper:\n *\n * 1. Validates the required metadata for its logical span type.\n * 2. Calls `startSpan(...)` from `_internal/tracing.ts` to allocate the\n * wire-format span and push it onto the active trace's span stack.\n * 3. Tags `metadata.adapter` on every span so the UI can attribute spans\n * back to their adapter origin.\n * 4. Hydrates type-specific top-level fields (`model`, `input_tokens`,\n * `output_tokens`, `total_tokens`, `context_segments`) onto `SpanData`.\n * 5. Returns the `SpanHandle` so callers can later call `.end(err?)`.\n *\n * All helpers are wrapped in `absorbErrorsSync` — telemetry MUST NOT throw\n * at the caller. If `startSpan` returns `null` (no active trace), the\n * helper also returns `null`; callers must tolerate this case.\n *\n * Logical → wire `type` mapping (per `design.md` §Span schema):\n *\n * agent → \"agent\"\n * llm → \"llm\"\n * tool → \"tool\"\n * subagent → \"agent\" + metadata.spawn_kind = \"subagent\"\n * hook → \"tool\" + metadata.tool_kind = \"hook\"\n *\n * Adapter-flavoured redaction (tool-arg truncation, base64/image\n * stripping) lives in a sibling `redaction.ts` (W1.2). This file is\n * intentionally agnostic: the only redaction it applies is a minimal\n * string-length guard on free-form fields that would otherwise blow up\n * the wire payload (task descriptions, hook names, tool names).\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { ContextSegment, SpanData } from \"../_internal/spans\";\nimport { startSpan, type SpanHandle } from \"../_internal/tracing\";\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\nexport type AdapterName = \"anthropic-agent-sdk\" | \"openai-agents\" | \"langgraph-js\" | \"vercel-ai\";\n\n/** Soft cap for free-form identifier-ish strings (tool names, hook names, etc.). */\nconst MAX_NAME_BYTES = 256;\n\n/** Soft cap for free-form description strings (task descriptions). */\nconst MAX_DESCRIPTION_BYTES = 2048;\n\n/** Trim a string to `maxBytes` bytes (UTF-8 codepoint-safe at the JS-string level). */\nfunction truncate(value: string, maxBytes: number): string {\n if (value.length <= maxBytes) return value;\n return `${value.slice(0, maxBytes)}…[truncated]`;\n}\n\nfunction requireNonEmpty(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`morse span-emitter: ${field} must be a non-empty string`);\n }\n return value;\n}\n\n/* ------------------------------------------------------------------------ */\n/* emitAgentSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitAgentSpanOptions {\n adapter: AdapterName;\n agentName: string;\n model?: string;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitAgentSpan = (opts: EmitAgentSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const agentName = requireNonEmpty(opts.agentName, \"agentName\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n agent_name: agentName,\n };\n const handle = startSpan({\n name: `${adapter}.agent`,\n type: \"agent\",\n metadata,\n });\n if (handle === null) return null;\n if (typeof opts.model === \"string\" && opts.model.length > 0) {\n handle.span.model = opts.model;\n metadata.model = opts.model;\n }\n return handle;\n};\n\n/**\n * Emit a wire `type=agent` span. Returns `null` when no active trace exists\n * (callers MUST tolerate this); never throws.\n */\nexport const emitAgentSpan: (opts: EmitAgentSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitAgentSpan,\n {\n fingerprint: \"morse.adapters.shared.emitAgentSpan\",\n },\n) as (opts: EmitAgentSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitLlmSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitLlmSpanOptions {\n adapter: AdapterName;\n model: string;\n provider?: string;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n contextSegments?: ContextSegment[];\n attributes?: Record<string, unknown>;\n // MHQ-858: prompt/response capture. Adapters pass already-truncated\n // values (see `_internal/llm-io.ts`); this emitter does not truncate.\n inputData?: unknown;\n outputData?: unknown;\n}\n\nconst _emitLlmSpan = (opts: EmitLlmSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const model = requireNonEmpty(opts.model, \"model\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n model,\n };\n if (typeof opts.provider === \"string\" && opts.provider.length > 0) {\n metadata.provider = opts.provider;\n }\n const handle = startSpan({\n name: `${adapter}.llm`,\n type: \"llm\",\n metadata,\n });\n if (handle === null) return null;\n const span: SpanData = handle.span;\n span.model = model;\n if (typeof opts.inputTokens === \"number\" && Number.isFinite(opts.inputTokens)) {\n span.input_tokens = opts.inputTokens;\n }\n if (typeof opts.outputTokens === \"number\" && Number.isFinite(opts.outputTokens)) {\n span.output_tokens = opts.outputTokens;\n }\n if (typeof opts.totalTokens === \"number\" && Number.isFinite(opts.totalTokens)) {\n span.total_tokens = opts.totalTokens;\n } else if (span.input_tokens !== undefined && span.output_tokens !== undefined) {\n span.total_tokens = span.input_tokens + span.output_tokens;\n }\n if (Array.isArray(opts.contextSegments)) {\n span.context_segments = opts.contextSegments;\n }\n if (opts.inputData !== undefined) span.input_data = opts.inputData;\n if (opts.outputData !== undefined) span.output_data = opts.outputData;\n return handle;\n};\n\n/**\n * Emit a wire `type=llm` span. Returns `null` when no active trace exists;\n * never throws. Hydrates `model`, `input_tokens`, `output_tokens`,\n * `total_tokens` (derived if absent), and `context_segments` onto the\n * underlying `SpanData` so downstream consumers see them at the top level\n * — not buried in `metadata`.\n */\nexport const emitLlmSpan: (opts: EmitLlmSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitLlmSpan,\n {\n fingerprint: \"morse.adapters.shared.emitLlmSpan\",\n },\n) as (opts: EmitLlmSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitToolSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitToolSpanOptions {\n adapter: AdapterName;\n toolName: string;\n inputSummary?: unknown;\n outputSummary?: unknown;\n durationMs?: number;\n success?: boolean;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitToolSpan = (opts: EmitToolSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const toolName = truncate(requireNonEmpty(opts.toolName, \"toolName\"), MAX_NAME_BYTES);\n const tool: Record<string, unknown> = { name: toolName };\n if (opts.inputSummary !== undefined) tool.input_summary = opts.inputSummary;\n if (opts.outputSummary !== undefined) tool.output_summary = opts.outputSummary;\n if (typeof opts.durationMs === \"number\" && Number.isFinite(opts.durationMs)) {\n tool.duration_ms = opts.durationMs;\n }\n if (typeof opts.success === \"boolean\") tool.success = opts.success;\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n tool,\n };\n return startSpan({\n name: `${adapter}.tool.${toolName}`,\n type: \"tool\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=tool` span. Returns `null` when no active trace exists;\n * never throws.\n */\nexport const emitToolSpan: (opts: EmitToolSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitToolSpan,\n {\n fingerprint: \"morse.adapters.shared.emitToolSpan\",\n },\n) as (opts: EmitToolSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitSubagentSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitSubagentSpanOptions {\n adapter: AdapterName;\n parentAgentName: string;\n subagentName: string;\n taskDescription?: string;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitSubagentSpan = (opts: EmitSubagentSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const parentAgentName = requireNonEmpty(opts.parentAgentName, \"parentAgentName\");\n const subagentName = requireNonEmpty(opts.subagentName, \"subagentName\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n spawn_kind: \"subagent\",\n parent_agent_name: parentAgentName,\n subagent_name: subagentName,\n };\n if (typeof opts.taskDescription === \"string\" && opts.taskDescription.length > 0) {\n metadata.task_description = truncate(opts.taskDescription, MAX_DESCRIPTION_BYTES);\n }\n return startSpan({\n name: `${adapter}.subagent.${subagentName}`,\n type: \"agent\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=agent` span with `metadata.spawn_kind=\"subagent\"` — the\n * UI inspects this metadata key to render subagent-spawn relationships\n * until the backend gains a native `subagent` enum value. Returns `null`\n * when no active trace exists; never throws.\n */\nexport const emitSubagentSpan: (opts: EmitSubagentSpanOptions) => SpanHandle | null =\n absorbErrorsSync(_emitSubagentSpan, {\n fingerprint: \"morse.adapters.shared.emitSubagentSpan\",\n }) as (opts: EmitSubagentSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitHookSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitHookSpanOptions {\n adapter: AdapterName;\n hookName: string;\n hookKind: \"pre_tool\" | \"post_tool\" | \"on_error\";\n durationMs?: number;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitHookSpan = (opts: EmitHookSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const hookName = truncate(requireNonEmpty(opts.hookName, \"hookName\"), MAX_NAME_BYTES);\n const hookKind = opts.hookKind;\n if (hookKind !== \"pre_tool\" && hookKind !== \"post_tool\" && hookKind !== \"on_error\") {\n throw new Error(\n `morse span-emitter: hookKind must be one of pre_tool|post_tool|on_error (got ${String(\n hookKind,\n )})`,\n );\n }\n const hook: Record<string, unknown> = { name: hookName, kind: hookKind };\n if (typeof opts.durationMs === \"number\" && Number.isFinite(opts.durationMs)) {\n hook.duration_ms = opts.durationMs;\n }\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n tool_kind: \"hook\",\n hook,\n };\n return startSpan({\n name: `${adapter}.hook.${hookKind}.${hookName}`,\n type: \"tool\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=tool` span with `metadata.tool_kind=\"hook\"` — the UI\n * inspects this metadata key to render hook spans separately from regular\n * tool spans. Returns `null` when no active trace exists; never throws.\n */\nexport const emitHookSpan: (opts: EmitHookSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitHookSpan,\n {\n fingerprint: \"morse.adapters.shared.emitHookSpan\",\n },\n) as (opts: EmitHookSpanOptions) => SpanHandle | null;\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/_agent-sdk-common/span-emitter.ts"],"names":["init_tracing","startSpan","absorbErrorsSync"],"mappings":"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","file":"chunk-255AHH2W.cjs","sourcesContent":["/**\n * `_agent-sdk-common/span-emitter.ts` — shared span-emission helpers used by\n * all three agent-SDK adapters (`anthropic-agent-sdk`, `openai-agents`,\n * `langgraph-js`).\n *\n * Each helper:\n *\n * 1. Validates the required metadata for its logical span type.\n * 2. Calls `startSpan(...)` from `_internal/tracing.ts` to allocate the\n * wire-format span and push it onto the active trace's span stack.\n * 3. Tags `metadata.adapter` on every span so the UI can attribute spans\n * back to their adapter origin.\n * 4. Hydrates type-specific top-level fields (`model`, `input_tokens`,\n * `output_tokens`, `total_tokens`, `context_segments`) onto `SpanData`.\n * 5. Returns the `SpanHandle` so callers can later call `.end(err?)`.\n *\n * All helpers are wrapped in `absorbErrorsSync` — telemetry MUST NOT throw\n * at the caller. If `startSpan` returns `null` (no active trace), the\n * helper also returns `null`; callers must tolerate this case.\n *\n * Logical → wire `type` mapping (per `design.md` §Span schema):\n *\n * agent → \"agent\"\n * llm → \"llm\"\n * tool → \"tool\"\n * subagent → \"agent\" + metadata.spawn_kind = \"subagent\"\n * hook → \"tool\" + metadata.tool_kind = \"hook\"\n *\n * Adapter-flavoured redaction (tool-arg truncation, base64/image\n * stripping) lives in a sibling `redaction.ts` (W1.2). This file is\n * intentionally agnostic: the only redaction it applies is a minimal\n * string-length guard on free-form fields that would otherwise blow up\n * the wire payload (task descriptions, hook names, tool names).\n */\n\nimport { absorbErrorsSync } from \"../_internal/errors\";\nimport type { ContextSegment, SpanData } from \"../_internal/spans\";\nimport { startSpan, type SpanHandle } from \"../_internal/tracing\";\n\n/* ------------------------------------------------------------------------ */\n/* Public types */\n/* ------------------------------------------------------------------------ */\n\nexport type AdapterName = \"anthropic-agent-sdk\" | \"openai-agents\" | \"langgraph-js\" | \"vercel-ai\";\n\n/** Soft cap for free-form identifier-ish strings (tool names, hook names, etc.). */\nconst MAX_NAME_BYTES = 256;\n\n/** Soft cap for free-form description strings (task descriptions). */\nconst MAX_DESCRIPTION_BYTES = 2048;\n\n/** Trim a string to `maxBytes` bytes (UTF-8 codepoint-safe at the JS-string level). */\nfunction truncate(value: string, maxBytes: number): string {\n if (value.length <= maxBytes) return value;\n return `${value.slice(0, maxBytes)}…[truncated]`;\n}\n\nfunction requireNonEmpty(value: unknown, field: string): string {\n if (typeof value !== \"string\" || value.length === 0) {\n throw new Error(`morse span-emitter: ${field} must be a non-empty string`);\n }\n return value;\n}\n\n/* ------------------------------------------------------------------------ */\n/* emitAgentSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitAgentSpanOptions {\n adapter: AdapterName;\n agentName: string;\n model?: string;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitAgentSpan = (opts: EmitAgentSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const agentName = requireNonEmpty(opts.agentName, \"agentName\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n agent_name: agentName,\n };\n const handle = startSpan({\n name: `${adapter}.agent`,\n type: \"agent\",\n metadata,\n });\n if (handle === null) return null;\n if (typeof opts.model === \"string\" && opts.model.length > 0) {\n handle.span.model = opts.model;\n metadata.model = opts.model;\n }\n return handle;\n};\n\n/**\n * Emit a wire `type=agent` span. Returns `null` when no active trace exists\n * (callers MUST tolerate this); never throws.\n */\nexport const emitAgentSpan: (opts: EmitAgentSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitAgentSpan,\n {\n fingerprint: \"morse.adapters.shared.emitAgentSpan\",\n },\n) as (opts: EmitAgentSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitLlmSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitLlmSpanOptions {\n adapter: AdapterName;\n model: string;\n provider?: string;\n inputTokens?: number;\n outputTokens?: number;\n totalTokens?: number;\n contextSegments?: ContextSegment[];\n attributes?: Record<string, unknown>;\n // MHQ-858: prompt/response capture. Adapters pass already-truncated\n // values (see `_internal/llm-io.ts`); this emitter does not truncate.\n inputData?: unknown;\n outputData?: unknown;\n}\n\nconst _emitLlmSpan = (opts: EmitLlmSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const model = requireNonEmpty(opts.model, \"model\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n model,\n };\n if (typeof opts.provider === \"string\" && opts.provider.length > 0) {\n metadata.provider = opts.provider;\n }\n const handle = startSpan({\n name: `${adapter}.llm`,\n type: \"llm\",\n metadata,\n });\n if (handle === null) return null;\n const span: SpanData = handle.span;\n span.model = model;\n if (typeof opts.inputTokens === \"number\" && Number.isFinite(opts.inputTokens)) {\n span.input_tokens = opts.inputTokens;\n }\n if (typeof opts.outputTokens === \"number\" && Number.isFinite(opts.outputTokens)) {\n span.output_tokens = opts.outputTokens;\n }\n if (typeof opts.totalTokens === \"number\" && Number.isFinite(opts.totalTokens)) {\n span.total_tokens = opts.totalTokens;\n } else if (span.input_tokens !== undefined && span.output_tokens !== undefined) {\n span.total_tokens = span.input_tokens + span.output_tokens;\n }\n if (Array.isArray(opts.contextSegments)) {\n span.context_segments = opts.contextSegments;\n }\n if (opts.inputData !== undefined) span.input_data = opts.inputData;\n if (opts.outputData !== undefined) span.output_data = opts.outputData;\n return handle;\n};\n\n/**\n * Emit a wire `type=llm` span. Returns `null` when no active trace exists;\n * never throws. Hydrates `model`, `input_tokens`, `output_tokens`,\n * `total_tokens` (derived if absent), and `context_segments` onto the\n * underlying `SpanData` so downstream consumers see them at the top level\n * — not buried in `metadata`.\n */\nexport const emitLlmSpan: (opts: EmitLlmSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitLlmSpan,\n {\n fingerprint: \"morse.adapters.shared.emitLlmSpan\",\n },\n) as (opts: EmitLlmSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitToolSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitToolSpanOptions {\n adapter: AdapterName;\n toolName: string;\n inputSummary?: unknown;\n outputSummary?: unknown;\n durationMs?: number;\n success?: boolean;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitToolSpan = (opts: EmitToolSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const toolName = truncate(requireNonEmpty(opts.toolName, \"toolName\"), MAX_NAME_BYTES);\n const tool: Record<string, unknown> = { name: toolName };\n if (opts.inputSummary !== undefined) tool.input_summary = opts.inputSummary;\n if (opts.outputSummary !== undefined) tool.output_summary = opts.outputSummary;\n if (typeof opts.durationMs === \"number\" && Number.isFinite(opts.durationMs)) {\n tool.duration_ms = opts.durationMs;\n }\n if (typeof opts.success === \"boolean\") tool.success = opts.success;\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n tool,\n };\n return startSpan({\n name: `${adapter}.tool.${toolName}`,\n type: \"tool\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=tool` span. Returns `null` when no active trace exists;\n * never throws.\n */\nexport const emitToolSpan: (opts: EmitToolSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitToolSpan,\n {\n fingerprint: \"morse.adapters.shared.emitToolSpan\",\n },\n) as (opts: EmitToolSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitSubagentSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitSubagentSpanOptions {\n adapter: AdapterName;\n parentAgentName: string;\n subagentName: string;\n taskDescription?: string;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitSubagentSpan = (opts: EmitSubagentSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const parentAgentName = requireNonEmpty(opts.parentAgentName, \"parentAgentName\");\n const subagentName = requireNonEmpty(opts.subagentName, \"subagentName\");\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n spawn_kind: \"subagent\",\n parent_agent_name: parentAgentName,\n subagent_name: subagentName,\n };\n if (typeof opts.taskDescription === \"string\" && opts.taskDescription.length > 0) {\n metadata.task_description = truncate(opts.taskDescription, MAX_DESCRIPTION_BYTES);\n }\n return startSpan({\n name: `${adapter}.subagent.${subagentName}`,\n type: \"agent\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=agent` span with `metadata.spawn_kind=\"subagent\"` — the\n * UI inspects this metadata key to render subagent-spawn relationships\n * until the backend gains a native `subagent` enum value. Returns `null`\n * when no active trace exists; never throws.\n */\nexport const emitSubagentSpan: (opts: EmitSubagentSpanOptions) => SpanHandle | null =\n absorbErrorsSync(_emitSubagentSpan, {\n fingerprint: \"morse.adapters.shared.emitSubagentSpan\",\n }) as (opts: EmitSubagentSpanOptions) => SpanHandle | null;\n\n/* ------------------------------------------------------------------------ */\n/* emitHookSpan */\n/* ------------------------------------------------------------------------ */\n\nexport interface EmitHookSpanOptions {\n adapter: AdapterName;\n hookName: string;\n hookKind: \"pre_tool\" | \"post_tool\" | \"on_error\";\n durationMs?: number;\n attributes?: Record<string, unknown>;\n}\n\nconst _emitHookSpan = (opts: EmitHookSpanOptions): SpanHandle | null => {\n const adapter = requireNonEmpty(opts.adapter, \"adapter\");\n const hookName = truncate(requireNonEmpty(opts.hookName, \"hookName\"), MAX_NAME_BYTES);\n const hookKind = opts.hookKind;\n if (hookKind !== \"pre_tool\" && hookKind !== \"post_tool\" && hookKind !== \"on_error\") {\n throw new Error(\n `morse span-emitter: hookKind must be one of pre_tool|post_tool|on_error (got ${String(\n hookKind,\n )})`,\n );\n }\n const hook: Record<string, unknown> = { name: hookName, kind: hookKind };\n if (typeof opts.durationMs === \"number\" && Number.isFinite(opts.durationMs)) {\n hook.duration_ms = opts.durationMs;\n }\n const metadata: Record<string, unknown> = {\n ...(opts.attributes ?? {}),\n adapter,\n tool_kind: \"hook\",\n hook,\n };\n return startSpan({\n name: `${adapter}.hook.${hookKind}.${hookName}`,\n type: \"tool\",\n metadata,\n });\n};\n\n/**\n * Emit a wire `type=tool` span with `metadata.tool_kind=\"hook\"` — the UI\n * inspects this metadata key to render hook spans separately from regular\n * tool spans. Returns `null` when no active trace exists; never throws.\n */\nexport const emitHookSpan: (opts: EmitHookSpanOptions) => SpanHandle | null = absorbErrorsSync(\n _emitHookSpan,\n {\n fingerprint: \"morse.adapters.shared.emitHookSpan\",\n },\n) as (opts: EmitHookSpanOptions) => SpanHandle | null;\n"]}
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
3
|
+
var chunk3STFITZF_cjs = require('./chunk-3STFITZF.cjs');
|
|
4
|
+
var chunk3H2OJLC2_cjs = require('./chunk-3H2OJLC2.cjs');
|
|
5
5
|
|
|
6
6
|
// src/log.ts
|
|
7
|
-
|
|
8
|
-
|
|
7
|
+
chunk3H2OJLC2_cjs.init_redaction();
|
|
8
|
+
chunk3H2OJLC2_cjs.init_tracing();
|
|
9
9
|
var DEFAULT_SERVICE_NAME = "morse-sdk-ts";
|
|
10
10
|
var ensureInitialized = () => {
|
|
11
11
|
};
|
|
@@ -14,14 +14,14 @@ function _setEnsureInitialized(fn) {
|
|
|
14
14
|
}
|
|
15
15
|
function logImpl(message, options = {}) {
|
|
16
16
|
ensureInitialized();
|
|
17
|
-
const transport =
|
|
17
|
+
const transport = chunk3H2OJLC2_cjs.getTransport();
|
|
18
18
|
if (transport === null) {
|
|
19
19
|
return;
|
|
20
20
|
}
|
|
21
21
|
let traceId = options.traceId ?? null;
|
|
22
22
|
let spanId = options.spanId ?? null;
|
|
23
23
|
if (traceId === null || spanId === null) {
|
|
24
|
-
const state =
|
|
24
|
+
const state = chunk3H2OJLC2_cjs.getActiveTraceState();
|
|
25
25
|
if (state !== null) {
|
|
26
26
|
if (traceId === null) traceId = state.traceId;
|
|
27
27
|
if (spanId === null && state.spanStack.length > 0) {
|
|
@@ -31,10 +31,10 @@ function logImpl(message, options = {}) {
|
|
|
31
31
|
}
|
|
32
32
|
const severity = (options.severity ?? "info").toUpperCase();
|
|
33
33
|
const serviceName = options.serviceName ?? DEFAULT_SERVICE_NAME;
|
|
34
|
-
const config =
|
|
34
|
+
const config = chunk3H2OJLC2_cjs.getRedactionConfig();
|
|
35
35
|
const rawAttributes = options.attributes ?? {};
|
|
36
|
-
const redactedAttributes = config.enabled ?
|
|
37
|
-
const redactedBody = config.enabled ?
|
|
36
|
+
const redactedAttributes = config.enabled ? chunk3H2OJLC2_cjs.redactValue(rawAttributes, config) : rawAttributes;
|
|
37
|
+
const redactedBody = config.enabled ? chunk3H2OJLC2_cjs.redactValue(String(message), config) : String(message);
|
|
38
38
|
const record = {
|
|
39
39
|
timestamp: (/* @__PURE__ */ new Date()).toISOString(),
|
|
40
40
|
severity,
|
|
@@ -46,11 +46,11 @@ function logImpl(message, options = {}) {
|
|
|
46
46
|
};
|
|
47
47
|
transport.track({ logs: [record] });
|
|
48
48
|
}
|
|
49
|
-
var log =
|
|
49
|
+
var log = chunk3STFITZF_cjs.absorbErrorsSync(logImpl, {
|
|
50
50
|
fingerprint: "morse.log"
|
|
51
51
|
});
|
|
52
52
|
|
|
53
53
|
exports._setEnsureInitialized = _setEnsureInitialized;
|
|
54
54
|
exports.log = log;
|
|
55
|
-
//# sourceMappingURL=chunk-
|
|
56
|
-
//# sourceMappingURL=chunk-
|
|
55
|
+
//# sourceMappingURL=chunk-36QTJJT7.cjs.map
|
|
56
|
+
//# sourceMappingURL=chunk-36QTJJT7.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/log.ts"],"names":["init_redaction","init_tracing","getTransport","getActiveTraceState","getRedactionConfig","redactValue","absorbErrorsSync"],"mappings":";;;;;;AA8BAA,gCAAA,EAAA;AACAC,8BAAA,EAAA;AA2BA,IAAM,oBAAA,GAAuB,cAAA;AAS7B,IAAI,oBAAgC,MAAM;AAE1C,CAAA;AAGO,SAAS,sBAAsB,EAAA,EAAsB;AAC1D,EAAA,iBAAA,GAAoB,EAAA;AACtB;AAEA,SAAS,OAAA,CAAQ,OAAA,EAAiB,OAAA,GAAsB,EAAC,EAAS;AAGhE,EAAA,iBAAA,EAAkB;AAClB,EAAA,MAAM,YAAkCC,8BAAA,EAAa;AACrD,EAAA,IAAI,cAAc,IAAA,EAAM;AAGtB,IAAA;AAAA,EACF;AAMA,EAAA,IAAI,OAAA,GAAyB,QAAQ,OAAA,IAAW,IAAA;AAChD,EAAA,IAAI,MAAA,GAAwB,QAAQ,MAAA,IAAU,IAAA;AAC9C,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,MAAA,KAAW,IAAA,EAAM;AACvC,IAAA,MAAM,QAAQC,qCAAA,EAAoB;AAClC,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,IAAI,OAAA,KAAY,IAAA,EAAM,OAAA,GAAU,KAAA,CAAM,OAAA;AACtC,MAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA,EAAG;AACjD,QAAA,MAAA,GAAS,MAAM,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,CAAG,OAAA;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAA,CAAY,OAAA,CAAQ,QAAA,IAAY,MAAA,EAAQ,WAAA,EAAY;AAC1D,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,oBAAA;AAK3C,EAAA,MAAM,SAASC,oCAAA,EAAmB;AAClC,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,UAAA,IAAc,EAAC;AAC7C,EAAA,MAAM,qBAAqB,MAAA,CAAO,OAAA,GAC7BC,6BAAA,CAAY,aAAA,EAAe,MAAM,CAAA,GAClC,aAAA;AACJ,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,GACvBA,6BAAA,CAAY,MAAA,CAAO,OAAO,CAAA,EAAG,MAAM,CAAA,GACpC,MAAA,CAAO,OAAO,CAAA;AAElB,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IAClC,QAAA;AAAA,IACA,YAAA,EAAc,WAAA;AAAA,IACd,IAAA,EAAM,YAAA;AAAA,IACN,UAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAU,OAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,SAAA,CAAU,MAAM,EAAE,IAAA,EAAM,CAAC,MAAM,GAAG,CAAA;AACpC;AAmCO,IAAM,GAAA,GAAMC,mCAAiB,OAAA,EAAS;AAAA,EAC3C,WAAA,EAAa;AACf,CAAC","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../../src/log.ts"],"names":["init_redaction","init_tracing","getTransport","getActiveTraceState","getRedactionConfig","redactValue","absorbErrorsSync"],"mappings":";;;;;;AA8BAA,gCAAA,EAAA;AACAC,8BAAA,EAAA;AA2BA,IAAM,oBAAA,GAAuB,cAAA;AAS7B,IAAI,oBAAgC,MAAM;AAE1C,CAAA;AAGO,SAAS,sBAAsB,EAAA,EAAsB;AAC1D,EAAA,iBAAA,GAAoB,EAAA;AACtB;AAEA,SAAS,OAAA,CAAQ,OAAA,EAAiB,OAAA,GAAsB,EAAC,EAAS;AAGhE,EAAA,iBAAA,EAAkB;AAClB,EAAA,MAAM,YAAkCC,8BAAA,EAAa;AACrD,EAAA,IAAI,cAAc,IAAA,EAAM;AAGtB,IAAA;AAAA,EACF;AAMA,EAAA,IAAI,OAAA,GAAyB,QAAQ,OAAA,IAAW,IAAA;AAChD,EAAA,IAAI,MAAA,GAAwB,QAAQ,MAAA,IAAU,IAAA;AAC9C,EAAA,IAAI,OAAA,KAAY,IAAA,IAAQ,MAAA,KAAW,IAAA,EAAM;AACvC,IAAA,MAAM,QAAQC,qCAAA,EAAoB;AAClC,IAAA,IAAI,UAAU,IAAA,EAAM;AAClB,MAAA,IAAI,OAAA,KAAY,IAAA,EAAM,OAAA,GAAU,KAAA,CAAM,OAAA;AACtC,MAAA,IAAI,MAAA,KAAW,IAAA,IAAQ,KAAA,CAAM,SAAA,CAAU,SAAS,CAAA,EAAG;AACjD,QAAA,MAAA,GAAS,MAAM,SAAA,CAAU,KAAA,CAAM,SAAA,CAAU,MAAA,GAAS,CAAC,CAAA,CAAG,OAAA;AAAA,MACxD;AAAA,IACF;AAAA,EACF;AAEA,EAAA,MAAM,QAAA,GAAA,CAAY,OAAA,CAAQ,QAAA,IAAY,MAAA,EAAQ,WAAA,EAAY;AAC1D,EAAA,MAAM,WAAA,GAAc,QAAQ,WAAA,IAAe,oBAAA;AAK3C,EAAA,MAAM,SAASC,oCAAA,EAAmB;AAClC,EAAA,MAAM,aAAA,GAAgB,OAAA,CAAQ,UAAA,IAAc,EAAC;AAC7C,EAAA,MAAM,qBAAqB,MAAA,CAAO,OAAA,GAC7BC,6BAAA,CAAY,aAAA,EAAe,MAAM,CAAA,GAClC,aAAA;AACJ,EAAA,MAAM,YAAA,GAAe,MAAA,CAAO,OAAA,GACvBA,6BAAA,CAAY,MAAA,CAAO,OAAO,CAAA,EAAG,MAAM,CAAA,GACpC,MAAA,CAAO,OAAO,CAAA;AAElB,EAAA,MAAM,MAAA,GAAS;AAAA,IACb,SAAA,EAAA,iBAAW,IAAI,IAAA,EAAK,EAAE,WAAA,EAAY;AAAA,IAClC,QAAA;AAAA,IACA,YAAA,EAAc,WAAA;AAAA,IACd,IAAA,EAAM,YAAA;AAAA,IACN,UAAA,EAAY,kBAAA;AAAA,IACZ,QAAA,EAAU,OAAA;AAAA,IACV,OAAA,EAAS;AAAA,GACX;AAEA,EAAA,SAAA,CAAU,MAAM,EAAE,IAAA,EAAM,CAAC,MAAM,GAAG,CAAA;AACpC;AAmCO,IAAM,GAAA,GAAMC,mCAAiB,OAAA,EAAS;AAAA,EAC3C,WAAA,EAAa;AACf,CAAC","file":"chunk-36QTJJT7.cjs","sourcesContent":["/**\n * Phase 12.5 Tier 1.2 — TypeScript SDK `log()` export.\n *\n * Closes the TS side of Feature #4 \"Gap A\": before this module, customers\n * using the TS SDK had no way to populate the Logs tab of a trace's\n * Correlation panel without standing up their own OTel collector. The\n * Python SDK already had `morse.log(...)` (AGE-240); this is the\n * cross-language peer.\n *\n * Semantics mirror Python's `morse.log()`\n * (`apps/sdk/python/src/morse/__init__.py:360-411`):\n *\n * - Default severity: \"info\" (case-normalised to upper on the wire).\n * - Default service_name: \"morse-sdk-ts\" (overridable).\n * - Auto-reads the active trace_id + span_id from the SDK's existing\n * `node:async_hooks.AsyncLocalStorage` context (re-uses\n * `getActiveTraceState()` — the same primitive `run()`/`span()` use).\n * - Batched: the record is enqueued on the existing `BatchTransport`,\n * which flushes it to `/api/v1/logs/ingest` (derived from the traces\n * batch endpoint) on the next tick. NO synchronous fetch per call.\n * - Internal errors are absorbed via `absorbErrorsSync` so they never\n * propagate into the customer's logging call. Mirrors the Python\n * `@absorb_errors` decorator pattern.\n *\n * Wire shape: `{ logs: [{ timestamp, severity, service_name, body,\n * attributes, trace_id, span_id }] }`. See `apps/api/apps/logs/\n * controllers.py:66-134` for the API contract.\n */\n\nimport { absorbErrorsSync } from \"./_internal/errors\";\nimport { redactValue } from \"./_internal/redaction\";\nimport {\n getActiveTraceState,\n getRedactionConfig,\n getTransport,\n type TransportLike,\n} from \"./_internal/tracing\";\n\n/** Log severity — case-insensitive on input, upper-cased on the wire. */\nexport type LogSeverity = \"trace\" | \"debug\" | \"info\" | \"warn\" | \"error\" | \"fatal\";\n\n/** Options accepted by `log()`. */\nexport interface LogOptions {\n /** Default: `\"info\"`. Upper-cased server-side. */\n severity?: LogSeverity;\n /** Free-form structured fields persisted on the record. */\n attributes?: Record<string, unknown>;\n /**\n * Override the auto-detected trace_id. Use only when emitting on\n * behalf of a known external trace (rare).\n */\n traceId?: string;\n /** Override the auto-detected span_id. Same caveat as `traceId`. */\n spanId?: string;\n /** Logical service tag. Default: `\"morse-sdk-ts\"`. */\n serviceName?: string;\n}\n\nconst DEFAULT_SERVICE_NAME = \"morse-sdk-ts\";\n\n/**\n * Lazy-init hook injected by `index.ts`. Allows `log()` to participate\n * in env-driven auto-init (matching the behaviour of `track()` /\n * `record()`) without `log.ts` reaching into the singleton state.\n *\n * @internal\n */\nlet ensureInitialized: () => void = () => {\n /* default no-op; replaced from index.ts */\n};\n\n/** @internal */\nexport function _setEnsureInitialized(fn: () => void): void {\n ensureInitialized = fn;\n}\n\nfunction logImpl(message: string, options: LogOptions = {}): void {\n // Match Python semantics: env-driven auto-init kicks in if the SDK\n // hasn't been explicitly init()'d yet but MORSE_API_KEY is set.\n ensureInitialized();\n const transport: TransportLike | null = getTransport();\n if (transport === null) {\n // SDK not initialised — silent no-op. Matches Python behaviour\n // (`_ensure_initialized()` short-circuit).\n return;\n }\n\n // Auto-pull trace + span IDs from the active context. Re-uses the\n // exact same context primitive that `track()` / `run()` / `span()`\n // use, so a `log()` call inside an `await run(...)` callback will\n // see the active trace's IDs.\n let traceId: string | null = options.traceId ?? null;\n let spanId: string | null = options.spanId ?? null;\n if (traceId === null || spanId === null) {\n const state = getActiveTraceState();\n if (state !== null) {\n if (traceId === null) traceId = state.traceId;\n if (spanId === null && state.spanStack.length > 0) {\n spanId = state.spanStack[state.spanStack.length - 1]!.span_id;\n }\n }\n }\n\n const severity = (options.severity ?? \"info\").toUpperCase();\n const serviceName = options.serviceName ?? DEFAULT_SERVICE_NAME;\n\n // PII redaction reuses the trace path's allow-list config. Mirrors\n // the Python client's `self._redaction_config.redact_value(payload)`\n // call.\n const config = getRedactionConfig();\n const rawAttributes = options.attributes ?? {};\n const redactedAttributes = config.enabled\n ? (redactValue(rawAttributes, config) as Record<string, unknown>)\n : rawAttributes;\n const redactedBody = config.enabled\n ? (redactValue(String(message), config) as string)\n : String(message);\n\n const record = {\n timestamp: new Date().toISOString(),\n severity,\n service_name: serviceName,\n body: redactedBody,\n attributes: redactedAttributes,\n trace_id: traceId,\n span_id: spanId,\n };\n\n transport.track({ logs: [record] });\n}\n\n/**\n * Emit a log record correlated to the current trace context.\n *\n * Auto-correlates to the surrounding `morse.run()` /\n * `morse.span()` if one is active. Inside a trace, the record's\n * `trace_id` + `span_id` are filled in from `AsyncLocalStorage`;\n * outside a trace, both fields are `null` and the record is still\n * accepted by the backend (it surfaces in the service-wide Logs view\n * but not on any individual trace's Correlation panel).\n *\n * Non-blocking. Batched alongside trace events on the existing\n * transport — flushes at the SDK's configured interval (default 2s).\n * Internal errors are absorbed; this call never throws.\n *\n * Silent no-op when the SDK isn't initialised (no `MORSE_API_KEY`\n * and no explicit `init()` call).\n *\n * @example\n * ```ts\n * import { init, runTraced, log } from \"@morsehq-dev/sdk\";\n *\n * init({ apiKey: process.env.MORSE_API_KEY });\n *\n * await runTraced({ agentName: \"lead-qualifier\" }, async () => {\n * log(\"starting search\", { attributes: { query: \"morse\" } });\n * const results = await search();\n * log(\"search complete\", {\n * severity: \"info\",\n * attributes: { result_count: results.length },\n * });\n * });\n * ```\n */\nexport const log = absorbErrorsSync(logImpl, {\n fingerprint: \"morse.log\",\n});\n"]}
|
|
@@ -593,7 +593,7 @@ var init_diagnostics = __esm({
|
|
|
593
593
|
"src/_internal/diagnostics.ts"() {
|
|
594
594
|
init_env();
|
|
595
595
|
init_redaction();
|
|
596
|
-
SDK_VERSION = "0.5.0-rc.
|
|
596
|
+
SDK_VERSION = "0.5.0-rc.4" ;
|
|
597
597
|
LEVEL_OFF = "off";
|
|
598
598
|
LEVEL_ERROR = "error";
|
|
599
599
|
LEVEL_DEBUG = "debug";
|
|
@@ -1262,6 +1262,7 @@ exports._resetForTesting2 = _resetForTesting2;
|
|
|
1262
1262
|
exports.buildRedactionConfig = buildRedactionConfig;
|
|
1263
1263
|
exports.buildTraceEntry = buildTraceEntry;
|
|
1264
1264
|
exports.extractTraceparent = extractTraceparent;
|
|
1265
|
+
exports.flushOnce = flushOnce;
|
|
1265
1266
|
exports.formatTraceparent = formatTraceparent;
|
|
1266
1267
|
exports.generateSpanId = generateSpanId;
|
|
1267
1268
|
exports.generateTraceId = generateTraceId;
|
|
@@ -1305,5 +1306,5 @@ exports.setTransport = setTransport;
|
|
|
1305
1306
|
exports.spanAsync = spanAsync;
|
|
1306
1307
|
exports.spanSync = spanSync;
|
|
1307
1308
|
exports.startSpan = startSpan;
|
|
1308
|
-
//# sourceMappingURL=chunk-
|
|
1309
|
-
//# sourceMappingURL=chunk-
|
|
1309
|
+
//# sourceMappingURL=chunk-3H2OJLC2.cjs.map
|
|
1310
|
+
//# sourceMappingURL=chunk-3H2OJLC2.cjs.map
|