@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.
Files changed (101) hide show
  1. package/dist/anthropic/index.cjs +11 -11
  2. package/dist/anthropic/index.js +4 -4
  3. package/dist/anthropic-agent-sdk/index.cjs +40 -40
  4. package/dist/anthropic-agent-sdk/index.js +6 -6
  5. package/dist/browser/anthropic/index.cjs +11 -11
  6. package/dist/browser/anthropic/index.js +4 -4
  7. package/dist/browser/anthropic-agent-sdk/index.cjs +40 -40
  8. package/dist/browser/anthropic-agent-sdk/index.js +6 -6
  9. package/dist/browser/{chunk-47GVOQB4.cjs → chunk-2X64OY2L.cjs} +12 -12
  10. package/dist/browser/{chunk-47GVOQB4.cjs.map → chunk-2X64OY2L.cjs.map} +1 -1
  11. package/dist/browser/{chunk-QAFFDJFK.cjs → chunk-4CMVMTFB.cjs} +6 -6
  12. package/dist/browser/{chunk-QAFFDJFK.cjs.map → chunk-4CMVMTFB.cjs.map} +1 -1
  13. package/dist/{chunk-SJ625SQS.cjs → browser/chunk-52JTU4LH.cjs} +15 -15
  14. package/dist/browser/{chunk-ZVVUZRG7.cjs.map → chunk-52JTU4LH.cjs.map} +1 -1
  15. package/dist/browser/{chunk-IHIS62VS.cjs → chunk-6BNMYEMW.cjs} +22 -14
  16. package/dist/browser/chunk-6BNMYEMW.cjs.map +1 -0
  17. package/dist/browser/{chunk-V7AUPQIJ.js → chunk-6T6ZPOKZ.js} +22 -14
  18. package/dist/browser/chunk-6T6ZPOKZ.js.map +1 -0
  19. package/dist/browser/{chunk-WR2SQLKP.cjs → chunk-BIP66M44.cjs} +7 -7
  20. package/dist/browser/{chunk-WR2SQLKP.cjs.map → chunk-BIP66M44.cjs.map} +1 -1
  21. package/dist/browser/{chunk-CI7M2GHD.js → chunk-BUCIE3DR.js} +4 -4
  22. package/dist/browser/{chunk-CI7M2GHD.js.map → chunk-BUCIE3DR.js.map} +1 -1
  23. package/dist/browser/{chunk-WGWPCVYB.cjs → chunk-ELQ4LGAS.cjs} +18 -18
  24. package/dist/browser/{chunk-WGWPCVYB.cjs.map → chunk-ELQ4LGAS.cjs.map} +1 -1
  25. package/dist/browser/{chunk-MIB3EOC4.js → chunk-KZFG23MO.js} +5 -5
  26. package/dist/browser/{chunk-MIB3EOC4.js.map → chunk-KZFG23MO.js.map} +1 -1
  27. package/dist/browser/{chunk-64YI3IZS.js → chunk-NU74H55W.js} +3 -3
  28. package/dist/browser/{chunk-64YI3IZS.js.map → chunk-NU74H55W.js.map} +1 -1
  29. package/dist/browser/{chunk-EH326H6U.js → chunk-T6Z6UIBN.js} +3 -3
  30. package/dist/browser/{chunk-EH326H6U.js.map → chunk-T6Z6UIBN.js.map} +1 -1
  31. package/dist/browser/{chunk-26Q2QD5J.cjs → chunk-TV7TRP5O.cjs} +5 -5
  32. package/dist/browser/{chunk-26Q2QD5J.cjs.map → chunk-TV7TRP5O.cjs.map} +1 -1
  33. package/dist/browser/{chunk-GLL57K7P.js → chunk-VIOT3AOP.js} +3 -3
  34. package/dist/browser/{chunk-GLL57K7P.js.map → chunk-VIOT3AOP.js.map} +1 -1
  35. package/dist/{chunk-MNV4HASC.js → browser/chunk-YYUDZTHI.js} +4 -4
  36. package/dist/browser/{chunk-UL5TNXQL.js.map → chunk-YYUDZTHI.js.map} +1 -1
  37. package/dist/browser/index.cjs +91 -91
  38. package/dist/browser/index.cjs.map +1 -1
  39. package/dist/browser/index.js +8 -8
  40. package/dist/browser/index.js.map +1 -1
  41. package/dist/browser/integrations/pino.cjs +4 -4
  42. package/dist/browser/integrations/pino.js +3 -3
  43. package/dist/browser/langchain/index.cjs +17 -17
  44. package/dist/browser/langchain/index.js +2 -2
  45. package/dist/browser/langgraph/index.cjs +27 -27
  46. package/dist/browser/langgraph/index.js +5 -5
  47. package/dist/browser/openai/index.cjs +11 -11
  48. package/dist/browser/openai/index.js +2 -2
  49. package/dist/browser/openai-agents/index.cjs +34 -34
  50. package/dist/browser/openai-agents/index.js +4 -4
  51. package/dist/browser/vercel-ai/index.cjs +14 -14
  52. package/dist/browser/vercel-ai/index.js +3 -3
  53. package/dist/{chunk-QZDUGEIR.js → chunk-3ONFIKKC.js} +3 -3
  54. package/dist/{chunk-QZDUGEIR.js.map → chunk-3ONFIKKC.js.map} +1 -1
  55. package/dist/{chunk-YKPZQPEW.js → chunk-6FLGLD72.js} +3 -3
  56. package/dist/{chunk-YKPZQPEW.js.map → chunk-6FLGLD72.js.map} +1 -1
  57. package/dist/{chunk-RRE2LX2A.cjs → chunk-7HYFOHM3.cjs} +6 -6
  58. package/dist/{chunk-RRE2LX2A.cjs.map → chunk-7HYFOHM3.cjs.map} +1 -1
  59. package/dist/{chunk-I3P5CHBV.cjs → chunk-D5NTF54A.cjs} +12 -12
  60. package/dist/{chunk-I3P5CHBV.cjs.map → chunk-D5NTF54A.cjs.map} +1 -1
  61. package/dist/{browser/chunk-ZVVUZRG7.cjs → chunk-GTPKPUAV.cjs} +15 -15
  62. package/dist/{chunk-SJ625SQS.cjs.map → chunk-GTPKPUAV.cjs.map} +1 -1
  63. package/dist/{chunk-NR36TJMT.js → chunk-J5FEPM7L.js} +5 -5
  64. package/dist/{chunk-NR36TJMT.js.map → chunk-J5FEPM7L.js.map} +1 -1
  65. package/dist/{chunk-DQ4T2MJE.cjs → chunk-KMBKZLXH.cjs} +22 -14
  66. package/dist/chunk-KMBKZLXH.cjs.map +1 -0
  67. package/dist/{browser/chunk-UL5TNXQL.js → chunk-KWOSUW7B.js} +4 -4
  68. package/dist/{chunk-MNV4HASC.js.map → chunk-KWOSUW7B.js.map} +1 -1
  69. package/dist/{chunk-Z5MFR7UE.cjs → chunk-LPLL2OXI.cjs} +5 -5
  70. package/dist/{chunk-Z5MFR7UE.cjs.map → chunk-LPLL2OXI.cjs.map} +1 -1
  71. package/dist/{chunk-DGBQ3UI6.cjs → chunk-NMARCV3R.cjs} +7 -7
  72. package/dist/{chunk-DGBQ3UI6.cjs.map → chunk-NMARCV3R.cjs.map} +1 -1
  73. package/dist/{chunk-HONYN2OI.js → chunk-SFI36VWW.js} +3 -3
  74. package/dist/{chunk-HONYN2OI.js.map → chunk-SFI36VWW.js.map} +1 -1
  75. package/dist/{chunk-DPW4W7H7.cjs → chunk-SUEBUMHL.cjs} +18 -18
  76. package/dist/{chunk-DPW4W7H7.cjs.map → chunk-SUEBUMHL.cjs.map} +1 -1
  77. package/dist/{chunk-ELVBOJWY.js → chunk-ZIMGB7IT.js} +22 -14
  78. package/dist/chunk-ZIMGB7IT.js.map +1 -0
  79. package/dist/{chunk-7I4ILCLY.js → chunk-ZZSVPAXM.js} +4 -4
  80. package/dist/{chunk-7I4ILCLY.js.map → chunk-ZZSVPAXM.js.map} +1 -1
  81. package/dist/index.cjs +101 -101
  82. package/dist/index.cjs.map +1 -1
  83. package/dist/index.js +9 -9
  84. package/dist/index.js.map +1 -1
  85. package/dist/integrations/pino.cjs +4 -4
  86. package/dist/integrations/pino.js +3 -3
  87. package/dist/langchain/index.cjs +17 -17
  88. package/dist/langchain/index.js +2 -2
  89. package/dist/langgraph/index.cjs +27 -27
  90. package/dist/langgraph/index.js +5 -5
  91. package/dist/openai/index.cjs +11 -11
  92. package/dist/openai/index.js +2 -2
  93. package/dist/openai-agents/index.cjs +34 -34
  94. package/dist/openai-agents/index.js +4 -4
  95. package/dist/vercel-ai/index.cjs +14 -14
  96. package/dist/vercel-ai/index.js +3 -3
  97. package/package.json +1 -1
  98. package/dist/browser/chunk-IHIS62VS.cjs.map +0 -1
  99. package/dist/browser/chunk-V7AUPQIJ.js.map +0 -1
  100. package/dist/chunk-DQ4T2MJE.cjs.map +0 -1
  101. package/dist/chunk-ELVBOJWY.js.map +0 -1
@@ -1,10 +1,10 @@
1
- import { setActiveFramework, capturePrompts, captureLangChainMessages, extractLangChainOutputText } from '../chunk-GLL57K7P.js';
2
- import { summarizeToolInput, summarizeToolOutput } from '../chunk-64YI3IZS.js';
3
- import { emitAgentSpan, emitLlmSpan, emitToolSpan } from '../chunk-UL5TNXQL.js';
4
- import { absorbErrorsSync } from '../chunk-EH326H6U.js';
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-V7AUPQIJ.js';
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 chunk26Q2QD5J_cjs = require('../chunk-26Q2QD5J.cjs');
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 chunkIHIS62VS_cjs = require('../chunk-IHIS62VS.cjs');
6
+ var chunk6BNMYEMW_cjs = require('../chunk-6BNMYEMW.cjs');
7
7
 
8
8
  // src/openai/index.ts
9
- chunkIHIS62VS_cjs.init_tracing();
10
- chunkIHIS62VS_cjs.init_diagnostics();
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 = chunkIHIS62VS_cjs.getActiveTraceState() !== null;
52
+ const inTrace = chunk6BNMYEMW_cjs.getActiveTraceState() !== null;
53
53
  const work = async () => {
54
- chunk26Q2QD5J_cjs.setActiveFramework("openai");
55
- const handle = chunkIHIS62VS_cjs.startSpan({
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 = chunk26Q2QD5J_cjs.captureInputMessages(params?.messages);
91
+ const inputData = chunkTV7TRP5O_cjs.captureInputMessages(params?.messages);
92
92
  if (inputData !== void 0) handle.span.input_data = inputData;
93
- const outputText = chunk26Q2QD5J_cjs.extractOpenAiOutputText(response?.choices);
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 chunkIHIS62VS_cjs.runAsync({ agentName }, async (runHandle) => {
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
- chunkIHIS62VS_cjs.report(err, { fingerprint });
131
+ chunk6BNMYEMW_cjs.report(err, { fingerprint });
132
132
  } catch {
133
133
  }
134
134
  }
@@ -1,7 +1,7 @@
1
- import { setActiveFramework, captureInputMessages, extractOpenAiOutputText } from '../chunk-GLL57K7P.js';
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-V7AUPQIJ.js';
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 chunkWR2SQLKP_cjs = require('../chunk-WR2SQLKP.cjs');
4
- var chunkZVVUZRG7_cjs = require('../chunk-ZVVUZRG7.cjs');
5
- var chunkQAFFDJFK_cjs = require('../chunk-QAFFDJFK.cjs');
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 chunkIHIS62VS_cjs = require('../chunk-IHIS62VS.cjs');
8
+ var chunk6BNMYEMW_cjs = require('../chunk-6BNMYEMW.cjs');
9
9
 
10
10
  // src/openai-agents/runner-wrapper.ts
11
- chunkIHIS62VS_cjs.init_tracing();
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 = chunkQAFFDJFK_cjs.absorbErrorsAsync(
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 = chunkQAFFDJFK_cjs.absorbErrorsSync(
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 = chunkZVVUZRG7_cjs.emitAgentSpan({
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 (chunkIHIS62VS_cjs.getActiveTraceState() !== null) {
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 chunkIHIS62VS_cjs.runAsync({ agentName }, async (runHandle) => {
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 = chunkQAFFDJFK_cjs.absorbErrorsSync(
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 = chunkZVVUZRG7_cjs.emitLlmSpan({
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 = chunkQAFFDJFK_cjs.absorbErrorsSync(
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 = chunkQAFFDJFK_cjs.absorbErrorsSync(
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 = chunkWR2SQLKP_cjs.summarizeToolInput(
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 = chunkZVVUZRG7_cjs.emitToolSpan({
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 = chunkQAFFDJFK_cjs.absorbErrorsSync(
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 = chunkWR2SQLKP_cjs.summarizeToolOutput(
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 = chunkZVVUZRG7_cjs.emitSubagentSpan({
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 = chunkQAFFDJFK_cjs.absorbErrorsSync(_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 = chunkZVVUZRG7_cjs.emitToolSpan({
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 = chunkQAFFDJFK_cjs.absorbErrorsSync(
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
- chunkIHIS62VS_cjs.init_diagnostics();
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 chunkZVVUZRG7_cjs.emitAgentSpan({
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 chunkZVVUZRG7_cjs.emitLlmSpan({ adapter: ADAPTER2, model });
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 chunkZVVUZRG7_cjs.emitToolSpan({
517
+ return chunk52JTU4LH_cjs.emitToolSpan({
518
518
  adapter: ADAPTER2,
519
519
  toolName: name ?? "function",
520
- inputSummary: d.input !== void 0 ? chunkWR2SQLKP_cjs.summarizeToolInput(d.input, inputOpts) : 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 chunkZVVUZRG7_cjs.emitSubagentSpan({
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 = chunkZVVUZRG7_cjs.emitToolSpan({
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 chunkZVVUZRG7_cjs.emitToolSpan({
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 chunkZVVUZRG7_cjs.emitToolSpan({
554
+ return chunk52JTU4LH_cjs.emitToolSpan({
555
555
  adapter: ADAPTER2,
556
556
  toolName: `custom.${name ?? "anon"}`
557
557
  });
558
558
  default:
559
- return chunkZVVUZRG7_cjs.emitToolSpan({
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: chunkWR2SQLKP_cjs.summarizeToolOutput(d.output, outputOpts)
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
- chunkIHIS62VS_cjs.report(err, { fingerprint });
624
+ chunk6BNMYEMW_cjs.report(err, { fingerprint });
625
625
  } catch {
626
626
  }
627
627
  }
@@ -1,9 +1,9 @@
1
- import { summarizeToolInput, summarizeToolOutput } from '../chunk-64YI3IZS.js';
2
- import { emitSubagentSpan, emitToolSpan, emitAgentSpan, emitLlmSpan } from '../chunk-UL5TNXQL.js';
3
- import { absorbErrorsAsync, absorbErrorsSync } from '../chunk-EH326H6U.js';
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-V7AUPQIJ.js';
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 chunkZVVUZRG7_cjs = require('../chunk-ZVVUZRG7.cjs');
4
- require('../chunk-QAFFDJFK.cjs');
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 chunkIHIS62VS_cjs = require('../chunk-IHIS62VS.cjs');
7
+ var chunk6BNMYEMW_cjs = require('../chunk-6BNMYEMW.cjs');
8
8
 
9
9
  // src/vercel-ai/index.ts
10
- chunkIHIS62VS_cjs.init_tracing();
11
- chunkIHIS62VS_cjs.init_propagation();
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 = chunkIHIS62VS_cjs.getActiveTraceState() !== null;
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 = chunkZVVUZRG7_cjs.emitLlmSpan({
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 chunkIHIS62VS_cjs.runAsync({ agentName }, async (runHandle) => {
97
+ void chunk6BNMYEMW_cjs.runAsync({ agentName }, async (runHandle) => {
98
98
  runHandle.setOutcome(true);
99
- const handle = chunkZVVUZRG7_cjs.emitLlmSpan({
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 = chunkIHIS62VS_cjs.getActiveTraceState() !== null;
180
+ const inTrace = chunk6BNMYEMW_cjs.getActiveTraceState() !== null;
181
181
  const work = async () => {
182
- const handle = chunkZVVUZRG7_cjs.emitLlmSpan({
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 chunkIHIS62VS_cjs.runAsync({ agentName }, async (runHandle) => {
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 = chunkIHIS62VS_cjs.getActiveTraceState();
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
- chunkIHIS62VS_cjs.injectTraceparent(merged);
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-UL5TNXQL.js';
2
- import '../chunk-EH326H6U.js';
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-V7AUPQIJ.js';
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-ELVBOJWY.js';
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-QZDUGEIR.js.map
118
- //# sourceMappingURL=chunk-QZDUGEIR.js.map
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-ELVBOJWY.js';
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-YKPZQPEW.js.map
28
- //# sourceMappingURL=chunk-YKPZQPEW.js.map
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-YKPZQPEW.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
+ {"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 chunkDQ4T2MJE_cjs = require('./chunk-DQ4T2MJE.cjs');
3
+ var chunkKMBKZLXH_cjs = require('./chunk-KMBKZLXH.cjs');
4
4
 
5
5
  // src/_internal/errors.ts
6
- chunkDQ4T2MJE_cjs.init_diagnostics();
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
- chunkDQ4T2MJE_cjs.report(err, options);
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
- chunkDQ4T2MJE_cjs.report(err, options);
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-RRE2LX2A.cjs.map
31
- //# sourceMappingURL=chunk-RRE2LX2A.cjs.map
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-RRE2LX2A.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"]}
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"]}