@morsehq-dev/sdk 0.5.0-rc.5 → 0.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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-47GVOQB4.cjs → chunk-2X64OY2L.cjs} +12 -12
- package/dist/browser/{chunk-47GVOQB4.cjs.map → chunk-2X64OY2L.cjs.map} +1 -1
- package/dist/browser/{chunk-QAFFDJFK.cjs → chunk-4CMVMTFB.cjs} +6 -6
- package/dist/browser/{chunk-QAFFDJFK.cjs.map → chunk-4CMVMTFB.cjs.map} +1 -1
- package/dist/{chunk-SJ625SQS.cjs → browser/chunk-52JTU4LH.cjs} +15 -15
- package/dist/browser/{chunk-ZVVUZRG7.cjs.map → chunk-52JTU4LH.cjs.map} +1 -1
- package/dist/browser/{chunk-IHIS62VS.cjs → chunk-6BNMYEMW.cjs} +22 -14
- package/dist/browser/chunk-6BNMYEMW.cjs.map +1 -0
- package/dist/browser/{chunk-V7AUPQIJ.js → chunk-6T6ZPOKZ.js} +22 -14
- package/dist/browser/chunk-6T6ZPOKZ.js.map +1 -0
- package/dist/browser/{chunk-WR2SQLKP.cjs → chunk-BIP66M44.cjs} +7 -7
- package/dist/browser/{chunk-WR2SQLKP.cjs.map → chunk-BIP66M44.cjs.map} +1 -1
- package/dist/browser/{chunk-CI7M2GHD.js → chunk-BUCIE3DR.js} +4 -4
- package/dist/browser/{chunk-CI7M2GHD.js.map → chunk-BUCIE3DR.js.map} +1 -1
- package/dist/browser/{chunk-WGWPCVYB.cjs → chunk-ELQ4LGAS.cjs} +18 -18
- package/dist/browser/{chunk-WGWPCVYB.cjs.map → chunk-ELQ4LGAS.cjs.map} +1 -1
- package/dist/browser/{chunk-MIB3EOC4.js → chunk-KZFG23MO.js} +5 -5
- package/dist/browser/{chunk-MIB3EOC4.js.map → chunk-KZFG23MO.js.map} +1 -1
- package/dist/browser/{chunk-64YI3IZS.js → chunk-NU74H55W.js} +3 -3
- package/dist/browser/{chunk-64YI3IZS.js.map → chunk-NU74H55W.js.map} +1 -1
- package/dist/browser/{chunk-EH326H6U.js → chunk-T6Z6UIBN.js} +3 -3
- package/dist/browser/{chunk-EH326H6U.js.map → chunk-T6Z6UIBN.js.map} +1 -1
- package/dist/browser/{chunk-26Q2QD5J.cjs → chunk-TV7TRP5O.cjs} +5 -5
- package/dist/browser/{chunk-26Q2QD5J.cjs.map → chunk-TV7TRP5O.cjs.map} +1 -1
- package/dist/browser/{chunk-GLL57K7P.js → chunk-VIOT3AOP.js} +3 -3
- package/dist/browser/{chunk-GLL57K7P.js.map → chunk-VIOT3AOP.js.map} +1 -1
- package/dist/{chunk-MNV4HASC.js → browser/chunk-YYUDZTHI.js} +4 -4
- package/dist/browser/{chunk-UL5TNXQL.js.map → chunk-YYUDZTHI.js.map} +1 -1
- package/dist/browser/index.cjs +91 -91
- package/dist/browser/index.cjs.map +1 -1
- package/dist/browser/index.js +8 -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-QZDUGEIR.js → chunk-3ONFIKKC.js} +3 -3
- package/dist/{chunk-QZDUGEIR.js.map → chunk-3ONFIKKC.js.map} +1 -1
- package/dist/{chunk-YKPZQPEW.js → chunk-6FLGLD72.js} +3 -3
- package/dist/{chunk-YKPZQPEW.js.map → chunk-6FLGLD72.js.map} +1 -1
- package/dist/{chunk-RRE2LX2A.cjs → chunk-7HYFOHM3.cjs} +6 -6
- package/dist/{chunk-RRE2LX2A.cjs.map → chunk-7HYFOHM3.cjs.map} +1 -1
- package/dist/{chunk-I3P5CHBV.cjs → chunk-D5NTF54A.cjs} +12 -12
- package/dist/{chunk-I3P5CHBV.cjs.map → chunk-D5NTF54A.cjs.map} +1 -1
- package/dist/{browser/chunk-ZVVUZRG7.cjs → chunk-GTPKPUAV.cjs} +15 -15
- package/dist/{chunk-SJ625SQS.cjs.map → chunk-GTPKPUAV.cjs.map} +1 -1
- package/dist/{chunk-NR36TJMT.js → chunk-J5FEPM7L.js} +5 -5
- package/dist/{chunk-NR36TJMT.js.map → chunk-J5FEPM7L.js.map} +1 -1
- package/dist/{chunk-DQ4T2MJE.cjs → chunk-KMBKZLXH.cjs} +22 -14
- package/dist/chunk-KMBKZLXH.cjs.map +1 -0
- package/dist/{browser/chunk-UL5TNXQL.js → chunk-KWOSUW7B.js} +4 -4
- package/dist/{chunk-MNV4HASC.js.map → chunk-KWOSUW7B.js.map} +1 -1
- package/dist/{chunk-Z5MFR7UE.cjs → chunk-LPLL2OXI.cjs} +5 -5
- package/dist/{chunk-Z5MFR7UE.cjs.map → chunk-LPLL2OXI.cjs.map} +1 -1
- package/dist/{chunk-DGBQ3UI6.cjs → chunk-NMARCV3R.cjs} +7 -7
- package/dist/{chunk-DGBQ3UI6.cjs.map → chunk-NMARCV3R.cjs.map} +1 -1
- package/dist/{chunk-HONYN2OI.js → chunk-SFI36VWW.js} +3 -3
- package/dist/{chunk-HONYN2OI.js.map → chunk-SFI36VWW.js.map} +1 -1
- package/dist/{chunk-DPW4W7H7.cjs → chunk-SUEBUMHL.cjs} +18 -18
- package/dist/{chunk-DPW4W7H7.cjs.map → chunk-SUEBUMHL.cjs.map} +1 -1
- package/dist/{chunk-ELVBOJWY.js → chunk-ZIMGB7IT.js} +22 -14
- package/dist/chunk-ZIMGB7IT.js.map +1 -0
- package/dist/{chunk-7I4ILCLY.js → chunk-ZZSVPAXM.js} +4 -4
- package/dist/{chunk-7I4ILCLY.js.map → chunk-ZZSVPAXM.js.map} +1 -1
- package/dist/index.cjs +101 -101
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +9 -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 +1 -1
- package/dist/browser/chunk-IHIS62VS.cjs.map +0 -1
- package/dist/browser/chunk-V7AUPQIJ.js.map +0 -1
- package/dist/chunk-DQ4T2MJE.cjs.map +0 -1
- package/dist/chunk-ELVBOJWY.js.map +0 -1
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import { setActiveFramework, capturePrompts, captureLangChainMessages, extractLangChainOutputText } from '../chunk-
|
|
2
|
-
import { summarizeToolInput, summarizeToolOutput } from '../chunk-
|
|
3
|
-
import { emitAgentSpan, emitLlmSpan, emitToolSpan } from '../chunk-
|
|
4
|
-
import { absorbErrorsSync } from '../chunk-
|
|
1
|
+
import { setActiveFramework, capturePrompts, captureLangChainMessages, extractLangChainOutputText } from '../chunk-VIOT3AOP.js';
|
|
2
|
+
import { summarizeToolInput, summarizeToolOutput } from '../chunk-NU74H55W.js';
|
|
3
|
+
import { emitAgentSpan, emitLlmSpan, emitToolSpan } from '../chunk-YYUDZTHI.js';
|
|
4
|
+
import { absorbErrorsSync } from '../chunk-T6Z6UIBN.js';
|
|
5
5
|
import { calculateCost } from '../chunk-4FALQMOZ.js';
|
|
6
6
|
import { decomposeOpenAiMessages } from '../chunk-MLDVXMQD.js';
|
|
7
|
-
import '../chunk-
|
|
7
|
+
import '../chunk-6T6ZPOKZ.js';
|
|
8
8
|
|
|
9
9
|
// src/langgraph/callback-handler.ts
|
|
10
10
|
var ADAPTER = "langgraph-js";
|
|
@@ -1,13 +1,13 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkTV7TRP5O_cjs = require('../chunk-TV7TRP5O.cjs');
|
|
4
4
|
var chunkSWQOPFE4_cjs = require('../chunk-SWQOPFE4.cjs');
|
|
5
5
|
var chunkRBNCTHK3_cjs = require('../chunk-RBNCTHK3.cjs');
|
|
6
|
-
var
|
|
6
|
+
var chunk6BNMYEMW_cjs = require('../chunk-6BNMYEMW.cjs');
|
|
7
7
|
|
|
8
8
|
// src/openai/index.ts
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
chunk6BNMYEMW_cjs.init_tracing();
|
|
10
|
+
chunk6BNMYEMW_cjs.init_diagnostics();
|
|
11
11
|
var WRAPPED_CLIENT = /* @__PURE__ */ Symbol.for("morse.openai.wrapped");
|
|
12
12
|
function wrapOpenAI(client, options = {}) {
|
|
13
13
|
if (!client || typeof client !== "object") return client;
|
|
@@ -49,10 +49,10 @@ function isOpenAiWrapped(client) {
|
|
|
49
49
|
function buildPatchedCreate(original, options) {
|
|
50
50
|
const agentName = options.defaultAgentName ?? "openai.chat.completions.create";
|
|
51
51
|
return async function patchedCreate(params, callOptions) {
|
|
52
|
-
const inTrace =
|
|
52
|
+
const inTrace = chunk6BNMYEMW_cjs.getActiveTraceState() !== null;
|
|
53
53
|
const work = async () => {
|
|
54
|
-
|
|
55
|
-
const handle =
|
|
54
|
+
chunkTV7TRP5O_cjs.setActiveFramework("openai");
|
|
55
|
+
const handle = chunk6BNMYEMW_cjs.startSpan({
|
|
56
56
|
name: "openai.chat.completions.create",
|
|
57
57
|
type: "llm",
|
|
58
58
|
metadata: { model: params?.model }
|
|
@@ -88,9 +88,9 @@ function buildPatchedCreate(original, options) {
|
|
|
88
88
|
if (cost !== void 0) handle.span.cost_usd = cost;
|
|
89
89
|
}
|
|
90
90
|
handle.span.context_segments = segments;
|
|
91
|
-
const inputData =
|
|
91
|
+
const inputData = chunkTV7TRP5O_cjs.captureInputMessages(params?.messages);
|
|
92
92
|
if (inputData !== void 0) handle.span.input_data = inputData;
|
|
93
|
-
const outputText =
|
|
93
|
+
const outputText = chunkTV7TRP5O_cjs.extractOpenAiOutputText(response?.choices);
|
|
94
94
|
if (outputText !== void 0) handle.span.output_data = { content: outputText };
|
|
95
95
|
}
|
|
96
96
|
} catch (err) {
|
|
@@ -104,7 +104,7 @@ function buildPatchedCreate(original, options) {
|
|
|
104
104
|
}
|
|
105
105
|
let result;
|
|
106
106
|
let thrown;
|
|
107
|
-
await
|
|
107
|
+
await chunk6BNMYEMW_cjs.runAsync({ agentName }, async (runHandle) => {
|
|
108
108
|
runHandle.setOutcome(true);
|
|
109
109
|
try {
|
|
110
110
|
result = await work();
|
|
@@ -128,7 +128,7 @@ function safeExtractSegments(params) {
|
|
|
128
128
|
}
|
|
129
129
|
function reportSwallowed(err, fingerprint) {
|
|
130
130
|
try {
|
|
131
|
-
|
|
131
|
+
chunk6BNMYEMW_cjs.report(err, { fingerprint });
|
|
132
132
|
} catch {
|
|
133
133
|
}
|
|
134
134
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
|
-
import { setActiveFramework, captureInputMessages, extractOpenAiOutputText } from '../chunk-
|
|
1
|
+
import { setActiveFramework, captureInputMessages, extractOpenAiOutputText } from '../chunk-VIOT3AOP.js';
|
|
2
2
|
import { calculateCost } from '../chunk-4FALQMOZ.js';
|
|
3
3
|
import { decomposeOpenAiMessages } from '../chunk-MLDVXMQD.js';
|
|
4
|
-
import { init_tracing, init_diagnostics, getActiveTraceState, runAsync, startSpan, report } from '../chunk-
|
|
4
|
+
import { init_tracing, init_diagnostics, getActiveTraceState, runAsync, startSpan, report } from '../chunk-6T6ZPOKZ.js';
|
|
5
5
|
|
|
6
6
|
// src/openai/index.ts
|
|
7
7
|
init_tracing();
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
var
|
|
5
|
-
var
|
|
3
|
+
var chunkBIP66M44_cjs = require('../chunk-BIP66M44.cjs');
|
|
4
|
+
var chunk52JTU4LH_cjs = require('../chunk-52JTU4LH.cjs');
|
|
5
|
+
var chunk4CMVMTFB_cjs = require('../chunk-4CMVMTFB.cjs');
|
|
6
6
|
var chunkSWQOPFE4_cjs = require('../chunk-SWQOPFE4.cjs');
|
|
7
7
|
var chunkRBNCTHK3_cjs = require('../chunk-RBNCTHK3.cjs');
|
|
8
|
-
var
|
|
8
|
+
var chunk6BNMYEMW_cjs = require('../chunk-6BNMYEMW.cjs');
|
|
9
9
|
|
|
10
10
|
// src/openai-agents/runner-wrapper.ts
|
|
11
|
-
|
|
11
|
+
chunk6BNMYEMW_cjs.init_tracing();
|
|
12
12
|
var WRAPPED_RUNNER = /* @__PURE__ */ Symbol.for("morse.openai-agents.wrapped");
|
|
13
13
|
var INSTALL_SENTINEL = /* @__PURE__ */ Symbol.for("morse.openai-agents.installed");
|
|
14
14
|
var ORIGINALS_SENTINEL = /* @__PURE__ */ Symbol.for("morse.openai-agents.originals");
|
|
@@ -34,7 +34,7 @@ function wrapRunner(runner, options = {}) {
|
|
|
34
34
|
});
|
|
35
35
|
return wrapper;
|
|
36
36
|
}
|
|
37
|
-
var instrumentOpenAIAgents =
|
|
37
|
+
var instrumentOpenAIAgents = chunk4CMVMTFB_cjs.absorbErrorsAsync(
|
|
38
38
|
async (runnerOrOptions = void 0, maybeOptions = {}) => {
|
|
39
39
|
if (runnerOrOptions && isRunner(runnerOrOptions)) {
|
|
40
40
|
const opts2 = maybeOptions ?? {};
|
|
@@ -67,7 +67,7 @@ var instrumentOpenAIAgents = chunkQAFFDJFK_cjs.absorbErrorsAsync(
|
|
|
67
67
|
},
|
|
68
68
|
{ fingerprint: "morse.adapters.openai-agents.install" }
|
|
69
69
|
);
|
|
70
|
-
var uninstallOpenAIAgents =
|
|
70
|
+
var uninstallOpenAIAgents = chunk4CMVMTFB_cjs.absorbErrorsSync(
|
|
71
71
|
(openaiAgentsModule) => {
|
|
72
72
|
if (!openaiAgentsModule || typeof openaiAgentsModule !== "object") return;
|
|
73
73
|
const mod = openaiAgentsModule;
|
|
@@ -120,7 +120,7 @@ function buildPatchedRun(original, options) {
|
|
|
120
120
|
const agentName = (agent && typeof agent === "object" && typeof agent.name === "string" && agent.name.length > 0 ? agent.name : void 0) ?? options.defaultAgentName ?? "openai-agent";
|
|
121
121
|
const model = stringifyModel(agent?.model);
|
|
122
122
|
const runWithSpan = async () => {
|
|
123
|
-
const handle =
|
|
123
|
+
const handle = chunk52JTU4LH_cjs.emitAgentSpan({
|
|
124
124
|
adapter: "openai-agents",
|
|
125
125
|
agentName,
|
|
126
126
|
model
|
|
@@ -138,13 +138,13 @@ function buildPatchedRun(original, options) {
|
|
|
138
138
|
throw err;
|
|
139
139
|
}
|
|
140
140
|
};
|
|
141
|
-
if (
|
|
141
|
+
if (chunk6BNMYEMW_cjs.getActiveTraceState() !== null) {
|
|
142
142
|
return runWithSpan();
|
|
143
143
|
}
|
|
144
144
|
return (async () => {
|
|
145
145
|
let captured;
|
|
146
146
|
let caughtErr;
|
|
147
|
-
const runResult = await
|
|
147
|
+
const runResult = await chunk6BNMYEMW_cjs.runAsync({ agentName }, async (runHandle) => {
|
|
148
148
|
try {
|
|
149
149
|
captured = await runWithSpan();
|
|
150
150
|
runHandle.setOutcome(true);
|
|
@@ -173,10 +173,10 @@ function installLlmAndToolInstrumentation(runner, options) {
|
|
|
173
173
|
const opts = options ?? {};
|
|
174
174
|
const llmStack = [];
|
|
175
175
|
const toolStack = [];
|
|
176
|
-
const onLlmStart =
|
|
176
|
+
const onLlmStart = chunk4CMVMTFB_cjs.absorbErrorsSync(
|
|
177
177
|
(event) => {
|
|
178
178
|
const contextSegments = chunkRBNCTHK3_cjs.decomposeOpenAiMessages(event.llm?.messages, event.llm?.tools);
|
|
179
|
-
const handle =
|
|
179
|
+
const handle = chunk52JTU4LH_cjs.emitLlmSpan({
|
|
180
180
|
adapter: ADAPTER,
|
|
181
181
|
model: typeof event.llm?.model === "string" && event.llm.model.length > 0 ? event.llm.model : "unknown",
|
|
182
182
|
provider: typeof event.llm?.provider === "string" ? event.llm.provider : void 0,
|
|
@@ -186,7 +186,7 @@ function installLlmAndToolInstrumentation(runner, options) {
|
|
|
186
186
|
},
|
|
187
187
|
{ fingerprint: "morse.openai-agents.llm_call_start" }
|
|
188
188
|
);
|
|
189
|
-
const onLlmEnd =
|
|
189
|
+
const onLlmEnd = chunk4CMVMTFB_cjs.absorbErrorsSync(
|
|
190
190
|
(event) => {
|
|
191
191
|
const handle = llmStack.shift();
|
|
192
192
|
if (handle === void 0) return;
|
|
@@ -218,14 +218,14 @@ function installLlmAndToolInstrumentation(runner, options) {
|
|
|
218
218
|
},
|
|
219
219
|
{ fingerprint: "morse.openai-agents.llm_call_end" }
|
|
220
220
|
);
|
|
221
|
-
const onToolStart =
|
|
221
|
+
const onToolStart = chunk4CMVMTFB_cjs.absorbErrorsSync(
|
|
222
222
|
(event) => {
|
|
223
223
|
const toolName = typeof event.tool?.name === "string" && event.tool.name.length > 0 ? event.tool.name : "unknown";
|
|
224
|
-
const inputSummary =
|
|
224
|
+
const inputSummary = chunkBIP66M44_cjs.summarizeToolInput(
|
|
225
225
|
event.tool?.input,
|
|
226
226
|
opts.toolInputMaxBytes !== void 0 ? { maxBytes: opts.toolInputMaxBytes } : void 0
|
|
227
227
|
);
|
|
228
|
-
const handle =
|
|
228
|
+
const handle = chunk52JTU4LH_cjs.emitToolSpan({
|
|
229
229
|
adapter: ADAPTER,
|
|
230
230
|
toolName,
|
|
231
231
|
inputSummary
|
|
@@ -234,11 +234,11 @@ function installLlmAndToolInstrumentation(runner, options) {
|
|
|
234
234
|
},
|
|
235
235
|
{ fingerprint: "morse.openai-agents.tool_call_start" }
|
|
236
236
|
);
|
|
237
|
-
const onToolEnd =
|
|
237
|
+
const onToolEnd = chunk4CMVMTFB_cjs.absorbErrorsSync(
|
|
238
238
|
(event) => {
|
|
239
239
|
const handle = toolStack.shift();
|
|
240
240
|
if (handle === void 0) return;
|
|
241
|
-
const outputSummary =
|
|
241
|
+
const outputSummary = chunkBIP66M44_cjs.summarizeToolOutput(
|
|
242
242
|
event.tool?.output,
|
|
243
243
|
opts.toolOutputMaxBytes !== void 0 ? { maxBytes: opts.toolOutputMaxBytes } : void 0
|
|
244
244
|
);
|
|
@@ -292,7 +292,7 @@ var _handleHandoffEvent = (event) => {
|
|
|
292
292
|
handoff_from: from
|
|
293
293
|
};
|
|
294
294
|
if (reason !== void 0) attributes.handoff_reason = reason;
|
|
295
|
-
const handle =
|
|
295
|
+
const handle = chunk52JTU4LH_cjs.emitSubagentSpan({
|
|
296
296
|
adapter: "openai-agents",
|
|
297
297
|
parentAgentName: from,
|
|
298
298
|
subagentName: to,
|
|
@@ -301,7 +301,7 @@ var _handleHandoffEvent = (event) => {
|
|
|
301
301
|
});
|
|
302
302
|
handle?.end();
|
|
303
303
|
};
|
|
304
|
-
var handleHandoffEvent =
|
|
304
|
+
var handleHandoffEvent = chunk4CMVMTFB_cjs.absorbErrorsSync(_handleHandoffEvent, {
|
|
305
305
|
fingerprint: "morse.adapters.openai-agents.handoff.listener"
|
|
306
306
|
});
|
|
307
307
|
function installHandoffInstrumentation(runner) {
|
|
@@ -338,7 +338,7 @@ var _handleGuardrailEvent = (payload) => {
|
|
|
338
338
|
const guardrailMeta = { passed };
|
|
339
339
|
if (name !== void 0) guardrailMeta.name = name;
|
|
340
340
|
if (reason !== void 0) guardrailMeta.reason = reason;
|
|
341
|
-
const handle =
|
|
341
|
+
const handle = chunk52JTU4LH_cjs.emitToolSpan({
|
|
342
342
|
adapter: "openai-agents",
|
|
343
343
|
toolName: `guardrail.${name ?? "anon"}`,
|
|
344
344
|
success: passed
|
|
@@ -355,7 +355,7 @@ var _handleGuardrailEvent = (payload) => {
|
|
|
355
355
|
handle.end(new Error(`guardrail failed: ${reason ?? "no reason"}`));
|
|
356
356
|
}
|
|
357
357
|
};
|
|
358
|
-
var handleGuardrailEvent =
|
|
358
|
+
var handleGuardrailEvent = chunk4CMVMTFB_cjs.absorbErrorsSync(
|
|
359
359
|
_handleGuardrailEvent,
|
|
360
360
|
{ fingerprint: "morse.openai-agents.guardrail.handle" }
|
|
361
361
|
);
|
|
@@ -384,7 +384,7 @@ function installGuardrailInstrumentation(runner) {
|
|
|
384
384
|
}
|
|
385
385
|
|
|
386
386
|
// src/openai-agents/trace-processor.ts
|
|
387
|
-
|
|
387
|
+
chunk6BNMYEMW_cjs.init_diagnostics();
|
|
388
388
|
var ADAPTER2 = "openai-agents";
|
|
389
389
|
function safe(fn) {
|
|
390
390
|
try {
|
|
@@ -503,32 +503,32 @@ var MorseTraceProcessor = class {
|
|
|
503
503
|
const name = typeof d.name === "string" && d.name.length > 0 ? d.name : void 0;
|
|
504
504
|
switch (type) {
|
|
505
505
|
case "agent":
|
|
506
|
-
return
|
|
506
|
+
return chunk52JTU4LH_cjs.emitAgentSpan({
|
|
507
507
|
adapter: ADAPTER2,
|
|
508
508
|
agentName: name ?? "openai-agent"
|
|
509
509
|
});
|
|
510
510
|
case "generation":
|
|
511
511
|
case "response": {
|
|
512
512
|
const model = typeof d.model === "string" && d.model.length > 0 ? d.model : "unknown";
|
|
513
|
-
return
|
|
513
|
+
return chunk52JTU4LH_cjs.emitLlmSpan({ adapter: ADAPTER2, model });
|
|
514
514
|
}
|
|
515
515
|
case "function": {
|
|
516
516
|
const inputOpts = this.options.toolInputMaxBytes ? { maxBytes: this.options.toolInputMaxBytes } : void 0;
|
|
517
|
-
return
|
|
517
|
+
return chunk52JTU4LH_cjs.emitToolSpan({
|
|
518
518
|
adapter: ADAPTER2,
|
|
519
519
|
toolName: name ?? "function",
|
|
520
|
-
inputSummary: d.input !== void 0 ?
|
|
520
|
+
inputSummary: d.input !== void 0 ? chunkBIP66M44_cjs.summarizeToolInput(d.input, inputOpts) : void 0
|
|
521
521
|
});
|
|
522
522
|
}
|
|
523
523
|
case "handoff":
|
|
524
|
-
return
|
|
524
|
+
return chunk52JTU4LH_cjs.emitSubagentSpan({
|
|
525
525
|
adapter: ADAPTER2,
|
|
526
526
|
parentAgentName: typeof d.from_agent === "string" ? d.from_agent : "unknown",
|
|
527
527
|
subagentName: typeof d.to_agent === "string" ? d.to_agent : name ?? "unknown",
|
|
528
528
|
taskDescription: typeof d.reason === "string" ? d.reason : void 0
|
|
529
529
|
});
|
|
530
530
|
case "guardrail": {
|
|
531
|
-
const handle =
|
|
531
|
+
const handle = chunk52JTU4LH_cjs.emitToolSpan({
|
|
532
532
|
adapter: ADAPTER2,
|
|
533
533
|
toolName: `guardrail.${name ?? "anon"}`
|
|
534
534
|
});
|
|
@@ -546,17 +546,17 @@ var MorseTraceProcessor = class {
|
|
|
546
546
|
return handle;
|
|
547
547
|
}
|
|
548
548
|
case "mcp_list_tools":
|
|
549
|
-
return
|
|
549
|
+
return chunk52JTU4LH_cjs.emitToolSpan({
|
|
550
550
|
adapter: ADAPTER2,
|
|
551
551
|
toolName: `mcp.list_tools.${name ?? "anon"}`
|
|
552
552
|
});
|
|
553
553
|
case "custom":
|
|
554
|
-
return
|
|
554
|
+
return chunk52JTU4LH_cjs.emitToolSpan({
|
|
555
555
|
adapter: ADAPTER2,
|
|
556
556
|
toolName: `custom.${name ?? "anon"}`
|
|
557
557
|
});
|
|
558
558
|
default:
|
|
559
|
-
return
|
|
559
|
+
return chunk52JTU4LH_cjs.emitToolSpan({
|
|
560
560
|
adapter: ADAPTER2,
|
|
561
561
|
toolName: `${type || "unknown"}.${name ?? "anon"}`
|
|
562
562
|
});
|
|
@@ -585,7 +585,7 @@ var MorseTraceProcessor = class {
|
|
|
585
585
|
const outputOpts = this.options.toolOutputMaxBytes ? { maxBytes: this.options.toolOutputMaxBytes } : void 0;
|
|
586
586
|
handle.span.metadata = {
|
|
587
587
|
...handle.span.metadata ?? {},
|
|
588
|
-
tool_output_summary:
|
|
588
|
+
tool_output_summary: chunkBIP66M44_cjs.summarizeToolOutput(d.output, outputOpts)
|
|
589
589
|
};
|
|
590
590
|
}
|
|
591
591
|
}
|
|
@@ -621,7 +621,7 @@ function safeEnd(handle, err) {
|
|
|
621
621
|
}
|
|
622
622
|
function reportSwallowed(err, fingerprint) {
|
|
623
623
|
try {
|
|
624
|
-
|
|
624
|
+
chunk6BNMYEMW_cjs.report(err, { fingerprint });
|
|
625
625
|
} catch {
|
|
626
626
|
}
|
|
627
627
|
}
|
|
@@ -1,9 +1,9 @@
|
|
|
1
|
-
import { summarizeToolInput, summarizeToolOutput } from '../chunk-
|
|
2
|
-
import { emitSubagentSpan, emitToolSpan, emitAgentSpan, emitLlmSpan } from '../chunk-
|
|
3
|
-
import { absorbErrorsAsync, absorbErrorsSync } from '../chunk-
|
|
1
|
+
import { summarizeToolInput, summarizeToolOutput } from '../chunk-NU74H55W.js';
|
|
2
|
+
import { emitSubagentSpan, emitToolSpan, emitAgentSpan, emitLlmSpan } from '../chunk-YYUDZTHI.js';
|
|
3
|
+
import { absorbErrorsAsync, absorbErrorsSync } from '../chunk-T6Z6UIBN.js';
|
|
4
4
|
import { calculateCost } from '../chunk-4FALQMOZ.js';
|
|
5
5
|
import { decomposeOpenAiMessages } from '../chunk-MLDVXMQD.js';
|
|
6
|
-
import { init_tracing, init_diagnostics, getActiveTraceState, runAsync, report } from '../chunk-
|
|
6
|
+
import { init_tracing, init_diagnostics, getActiveTraceState, runAsync, report } from '../chunk-6T6ZPOKZ.js';
|
|
7
7
|
|
|
8
8
|
// src/openai-agents/runner-wrapper.ts
|
|
9
9
|
init_tracing();
|
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
4
|
-
require('../chunk-
|
|
3
|
+
var chunk52JTU4LH_cjs = require('../chunk-52JTU4LH.cjs');
|
|
4
|
+
require('../chunk-4CMVMTFB.cjs');
|
|
5
5
|
var chunkSWQOPFE4_cjs = require('../chunk-SWQOPFE4.cjs');
|
|
6
6
|
var chunkRBNCTHK3_cjs = require('../chunk-RBNCTHK3.cjs');
|
|
7
|
-
var
|
|
7
|
+
var chunk6BNMYEMW_cjs = require('../chunk-6BNMYEMW.cjs');
|
|
8
8
|
|
|
9
9
|
// src/vercel-ai/index.ts
|
|
10
|
-
|
|
11
|
-
|
|
10
|
+
chunk6BNMYEMW_cjs.init_tracing();
|
|
11
|
+
chunk6BNMYEMW_cjs.init_propagation();
|
|
12
12
|
var ADAPTER = "vercel-ai";
|
|
13
13
|
async function createTracedVercelAI(options = {}) {
|
|
14
14
|
const aiModule = await loadAiModule(options.aiModule);
|
|
@@ -71,11 +71,11 @@ function contextSegmentsFor(args) {
|
|
|
71
71
|
function wrapStreamText(original, options) {
|
|
72
72
|
const agentName = options.defaultAgentName ?? "vercel-ai.streamText";
|
|
73
73
|
return function patchedStreamText(...args) {
|
|
74
|
-
const inTrace =
|
|
74
|
+
const inTrace = chunk6BNMYEMW_cjs.getActiveTraceState() !== null;
|
|
75
75
|
const callArgs = args[0] ?? {};
|
|
76
76
|
const model = modelLabel(callArgs);
|
|
77
77
|
if (inTrace) {
|
|
78
|
-
const handle =
|
|
78
|
+
const handle = chunk52JTU4LH_cjs.emitLlmSpan({
|
|
79
79
|
adapter: ADAPTER,
|
|
80
80
|
model: model ?? "unknown",
|
|
81
81
|
attributes: { max_steps: callArgs.maxSteps ?? 1 }
|
|
@@ -94,9 +94,9 @@ function wrapStreamText(original, options) {
|
|
|
94
94
|
}
|
|
95
95
|
}
|
|
96
96
|
let result;
|
|
97
|
-
void
|
|
97
|
+
void chunk6BNMYEMW_cjs.runAsync({ agentName }, async (runHandle) => {
|
|
98
98
|
runHandle.setOutcome(true);
|
|
99
|
-
const handle =
|
|
99
|
+
const handle = chunk52JTU4LH_cjs.emitLlmSpan({
|
|
100
100
|
adapter: ADAPTER,
|
|
101
101
|
model: model ?? "unknown",
|
|
102
102
|
attributes: { max_steps: callArgs.maxSteps ?? 1 }
|
|
@@ -177,9 +177,9 @@ function wrapGenerate(original, spanName, options) {
|
|
|
177
177
|
return function patched(...args) {
|
|
178
178
|
const callArgs = args[0] ?? {};
|
|
179
179
|
const model = modelLabel(callArgs);
|
|
180
|
-
const inTrace =
|
|
180
|
+
const inTrace = chunk6BNMYEMW_cjs.getActiveTraceState() !== null;
|
|
181
181
|
const work = async () => {
|
|
182
|
-
const handle =
|
|
182
|
+
const handle = chunk52JTU4LH_cjs.emitLlmSpan({
|
|
183
183
|
adapter: ADAPTER,
|
|
184
184
|
model: model ?? "unknown",
|
|
185
185
|
attributes: { max_steps: callArgs.maxSteps ?? 1 }
|
|
@@ -204,7 +204,7 @@ function wrapGenerate(original, spanName, options) {
|
|
|
204
204
|
if (inTrace) {
|
|
205
205
|
return work();
|
|
206
206
|
}
|
|
207
|
-
return
|
|
207
|
+
return chunk6BNMYEMW_cjs.runAsync({ agentName }, async (runHandle) => {
|
|
208
208
|
runHandle.setOutcome(true);
|
|
209
209
|
return work();
|
|
210
210
|
});
|
|
@@ -212,13 +212,13 @@ function wrapGenerate(original, spanName, options) {
|
|
|
212
212
|
}
|
|
213
213
|
function wrapFetch(original) {
|
|
214
214
|
const patched = function patched2(input, init) {
|
|
215
|
-
const state =
|
|
215
|
+
const state = chunk6BNMYEMW_cjs.getActiveTraceState();
|
|
216
216
|
if (state === null) {
|
|
217
217
|
return original(input, init);
|
|
218
218
|
}
|
|
219
219
|
try {
|
|
220
220
|
const merged = new Headers(init?.headers ?? {});
|
|
221
|
-
|
|
221
|
+
chunk6BNMYEMW_cjs.injectTraceparent(merged);
|
|
222
222
|
const next = { ...init ?? {}, headers: merged };
|
|
223
223
|
return original(input, next);
|
|
224
224
|
} catch {
|
|
@@ -1,8 +1,8 @@
|
|
|
1
|
-
import { emitLlmSpan } from '../chunk-
|
|
2
|
-
import '../chunk-
|
|
1
|
+
import { emitLlmSpan } from '../chunk-YYUDZTHI.js';
|
|
2
|
+
import '../chunk-T6Z6UIBN.js';
|
|
3
3
|
import { calculateCost } from '../chunk-4FALQMOZ.js';
|
|
4
4
|
import { decomposeOpenAiMessages } from '../chunk-MLDVXMQD.js';
|
|
5
|
-
import { init_tracing, init_propagation, getActiveTraceState, runAsync, injectTraceparent } from '../chunk-
|
|
5
|
+
import { init_tracing, init_propagation, getActiveTraceState, runAsync, injectTraceparent } from '../chunk-6T6ZPOKZ.js';
|
|
6
6
|
|
|
7
7
|
// src/vercel-ai/index.ts
|
|
8
8
|
init_tracing();
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { contentToText, getContent, getRole } from './chunk-4JPZV2VZ.js';
|
|
2
|
-
import { init_tracing, getActiveTraceState } from './chunk-
|
|
2
|
+
import { init_tracing, getActiveTraceState } from './chunk-ZIMGB7IT.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-3ONFIKKC.js.map
|
|
118
|
+
//# sourceMappingURL=chunk-3ONFIKKC.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-QZDUGEIR.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-3ONFIKKC.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,4 +1,4 @@
|
|
|
1
|
-
import { init_diagnostics, report } from './chunk-
|
|
1
|
+
import { init_diagnostics, report } from './chunk-ZIMGB7IT.js';
|
|
2
2
|
|
|
3
3
|
// src/_internal/errors.ts
|
|
4
4
|
init_diagnostics();
|
|
@@ -24,5 +24,5 @@ function absorbErrorsAsync(fn, options) {
|
|
|
24
24
|
}
|
|
25
25
|
|
|
26
26
|
export { absorbErrorsAsync, absorbErrorsSync };
|
|
27
|
-
//# sourceMappingURL=chunk-
|
|
28
|
-
//# sourceMappingURL=chunk-
|
|
27
|
+
//# sourceMappingURL=chunk-6FLGLD72.js.map
|
|
28
|
+
//# sourceMappingURL=chunk-6FLGLD72.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/_internal/errors.ts"],"names":[],"mappings":";;;AAsBA,gBAAA,EAAA;AAiBO,SAAS,gBAAA,CACd,IACA,OAAA,EACyC;AACzC,EAAA,OAAO,IAAI,IAAA,KAAqC;AAC9C,IAAA,IAAI;AACF,MAAA,OAAO,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;AAOO,SAAS,iBAAA,CACd,IACA,OAAA,EACkD;AAClD,EAAA,OAAO,UAAU,IAAA,KAA8C;AAC7D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/_internal/errors.ts"],"names":[],"mappings":";;;AAsBA,gBAAA,EAAA;AAiBO,SAAS,gBAAA,CACd,IACA,OAAA,EACyC;AACzC,EAAA,OAAO,IAAI,IAAA,KAAqC;AAC9C,IAAA,IAAI;AACF,MAAA,OAAO,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;AAOO,SAAS,iBAAA,CACd,IACA,OAAA,EACkD;AAClD,EAAA,OAAO,UAAU,IAAA,KAA8C;AAC7D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAA,MAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF","file":"chunk-6FLGLD72.js","sourcesContent":["/**\n * Non-invasive error isolation — the foundational SDK guarantee.\n *\n * Mirrors Python's `_internal/errors.py` `@absorb_errors` decorator. Every\n * public SDK function and every adapter-installed wrapper is wrapped with\n * `absorbErrors()`. The wrapper catches all exceptions and reports them\n * out-of-band to Morse's own diagnostics endpoint, then returns a benign value\n * (typically `undefined`) instead of propagating.\n *\n * Foundational principle:\n *\n * Telemetry must never break the host application.\n *\n * The customer's call returns its original result (or `undefined`)\n * regardless of whether the SDK's recording path succeeded.\n *\n * Note on async: TypeScript-land has no `KeyboardInterrupt` equivalent —\n * the analogue is \"no exceptions are special\". We absorb everything,\n * and rely on Node's `process.exit` / browser navigation to tear down\n * the runtime cleanly.\n */\n\nimport { report } from \"./diagnostics\";\n\nexport interface AbsorbErrorsOptions {\n /**\n * Stable identifier for grouping. Used for server-side grouping and\n * the rate limiter (max 100 events per fingerprint per minute).\n */\n fingerprint: string;\n /** Optional metadata attached to the report; scrubbed against an allow-list. */\n extra?: Record<string, unknown>;\n}\n\n/**\n * Wrap a synchronous function so that any thrown exception is absorbed\n * (reported out-of-band) instead of propagating. Returns `undefined` on\n * absorbed error.\n */\nexport function absorbErrorsSync<TArgs extends unknown[], TReturn>(\n fn: (...args: TArgs) => TReturn,\n options: AbsorbErrorsOptions,\n): (...args: TArgs) => TReturn | undefined {\n return (...args: TArgs): TReturn | undefined => {\n try {\n return fn(...args);\n } catch (err) {\n report(err, options);\n return undefined;\n }\n };\n}\n\n/**\n * Wrap an async function so that any rejection or thrown exception is\n * absorbed (reported out-of-band) instead of propagating. Returns\n * `undefined` on absorbed error.\n */\nexport function absorbErrorsAsync<TArgs extends unknown[], TReturn>(\n fn: (...args: TArgs) => Promise<TReturn>,\n options: AbsorbErrorsOptions,\n): (...args: TArgs) => Promise<TReturn | undefined> {\n return async (...args: TArgs): Promise<TReturn | undefined> => {\n try {\n return await fn(...args);\n } catch (err) {\n report(err, options);\n return undefined;\n }\n };\n}\n\n/**\n * Higher-order alias chosen to read like the Python decorator: pass a\n * function in, get a wrapped version back. Resolves to the sync or async\n * variant based on the runtime return value (a Promise). Defaults to\n * sync at the type level; use `absorbErrorsAsync` directly for proper\n * async typing.\n */\nexport const absorbErrors = absorbErrorsSync;\n"]}
|
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
'use strict';
|
|
2
2
|
|
|
3
|
-
var
|
|
3
|
+
var chunkKMBKZLXH_cjs = require('./chunk-KMBKZLXH.cjs');
|
|
4
4
|
|
|
5
5
|
// src/_internal/errors.ts
|
|
6
|
-
|
|
6
|
+
chunkKMBKZLXH_cjs.init_diagnostics();
|
|
7
7
|
function absorbErrorsSync(fn, options) {
|
|
8
8
|
return (...args) => {
|
|
9
9
|
try {
|
|
10
10
|
return fn(...args);
|
|
11
11
|
} catch (err) {
|
|
12
|
-
|
|
12
|
+
chunkKMBKZLXH_cjs.report(err, options);
|
|
13
13
|
return void 0;
|
|
14
14
|
}
|
|
15
15
|
};
|
|
@@ -19,7 +19,7 @@ function absorbErrorsAsync(fn, options) {
|
|
|
19
19
|
try {
|
|
20
20
|
return await fn(...args);
|
|
21
21
|
} catch (err) {
|
|
22
|
-
|
|
22
|
+
chunkKMBKZLXH_cjs.report(err, options);
|
|
23
23
|
return void 0;
|
|
24
24
|
}
|
|
25
25
|
};
|
|
@@ -27,5 +27,5 @@ function absorbErrorsAsync(fn, options) {
|
|
|
27
27
|
|
|
28
28
|
exports.absorbErrorsAsync = absorbErrorsAsync;
|
|
29
29
|
exports.absorbErrorsSync = absorbErrorsSync;
|
|
30
|
-
//# sourceMappingURL=chunk-
|
|
31
|
-
//# sourceMappingURL=chunk-
|
|
30
|
+
//# sourceMappingURL=chunk-7HYFOHM3.cjs.map
|
|
31
|
+
//# sourceMappingURL=chunk-7HYFOHM3.cjs.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/_internal/errors.ts"],"names":["init_diagnostics","report"],"mappings":";;;;;AAsBAA,kCAAA,EAAA;AAiBO,SAAS,gBAAA,CACd,IACA,OAAA,EACyC;AACzC,EAAA,OAAO,IAAI,IAAA,KAAqC;AAC9C,IAAA,IAAI;AACF,MAAA,OAAO,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAAC,wBAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;AAOO,SAAS,iBAAA,CACd,IACA,OAAA,EACkD;AAClD,EAAA,OAAO,UAAU,IAAA,KAA8C;AAC7D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAAA,wBAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF","file":"chunk-
|
|
1
|
+
{"version":3,"sources":["../src/_internal/errors.ts"],"names":["init_diagnostics","report"],"mappings":";;;;;AAsBAA,kCAAA,EAAA;AAiBO,SAAS,gBAAA,CACd,IACA,OAAA,EACyC;AACzC,EAAA,OAAO,IAAI,IAAA,KAAqC;AAC9C,IAAA,IAAI;AACF,MAAA,OAAO,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACnB,SAAS,GAAA,EAAK;AACZ,MAAAC,wBAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF;AAOO,SAAS,iBAAA,CACd,IACA,OAAA,EACkD;AAClD,EAAA,OAAO,UAAU,IAAA,KAA8C;AAC7D,IAAA,IAAI;AACF,MAAA,OAAO,MAAM,EAAA,CAAG,GAAG,IAAI,CAAA;AAAA,IACzB,SAAS,GAAA,EAAK;AACZ,MAAAA,wBAAA,CAAO,KAAK,OAAO,CAAA;AACnB,MAAA,OAAO,MAAA;AAAA,IACT;AAAA,EACF,CAAA;AACF","file":"chunk-7HYFOHM3.cjs","sourcesContent":["/**\n * Non-invasive error isolation — the foundational SDK guarantee.\n *\n * Mirrors Python's `_internal/errors.py` `@absorb_errors` decorator. Every\n * public SDK function and every adapter-installed wrapper is wrapped with\n * `absorbErrors()`. The wrapper catches all exceptions and reports them\n * out-of-band to Morse's own diagnostics endpoint, then returns a benign value\n * (typically `undefined`) instead of propagating.\n *\n * Foundational principle:\n *\n * Telemetry must never break the host application.\n *\n * The customer's call returns its original result (or `undefined`)\n * regardless of whether the SDK's recording path succeeded.\n *\n * Note on async: TypeScript-land has no `KeyboardInterrupt` equivalent —\n * the analogue is \"no exceptions are special\". We absorb everything,\n * and rely on Node's `process.exit` / browser navigation to tear down\n * the runtime cleanly.\n */\n\nimport { report } from \"./diagnostics\";\n\nexport interface AbsorbErrorsOptions {\n /**\n * Stable identifier for grouping. Used for server-side grouping and\n * the rate limiter (max 100 events per fingerprint per minute).\n */\n fingerprint: string;\n /** Optional metadata attached to the report; scrubbed against an allow-list. */\n extra?: Record<string, unknown>;\n}\n\n/**\n * Wrap a synchronous function so that any thrown exception is absorbed\n * (reported out-of-band) instead of propagating. Returns `undefined` on\n * absorbed error.\n */\nexport function absorbErrorsSync<TArgs extends unknown[], TReturn>(\n fn: (...args: TArgs) => TReturn,\n options: AbsorbErrorsOptions,\n): (...args: TArgs) => TReturn | undefined {\n return (...args: TArgs): TReturn | undefined => {\n try {\n return fn(...args);\n } catch (err) {\n report(err, options);\n return undefined;\n }\n };\n}\n\n/**\n * Wrap an async function so that any rejection or thrown exception is\n * absorbed (reported out-of-band) instead of propagating. Returns\n * `undefined` on absorbed error.\n */\nexport function absorbErrorsAsync<TArgs extends unknown[], TReturn>(\n fn: (...args: TArgs) => Promise<TReturn>,\n options: AbsorbErrorsOptions,\n): (...args: TArgs) => Promise<TReturn | undefined> {\n return async (...args: TArgs): Promise<TReturn | undefined> => {\n try {\n return await fn(...args);\n } catch (err) {\n report(err, options);\n return undefined;\n }\n };\n}\n\n/**\n * Higher-order alias chosen to read like the Python decorator: pass a\n * function in, get a wrapped version back. Resolves to the sync or async\n * variant based on the runtime return value (a Promise). Defaults to\n * sync at the type level; use `absorbErrorsAsync` directly for proper\n * async typing.\n */\nexport const absorbErrors = absorbErrorsSync;\n"]}
|