@morsehq-dev/sdk 0.4.0-rc.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (161) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +294 -0
  3. package/dist/anthropic/index.cjs +39 -0
  4. package/dist/anthropic/index.cjs.map +1 -0
  5. package/dist/anthropic/index.d.cts +213 -0
  6. package/dist/anthropic/index.d.ts +213 -0
  7. package/dist/anthropic/index.js +6 -0
  8. package/dist/anthropic/index.js.map +1 -0
  9. package/dist/anthropic-agent-sdk/index.cjs +744 -0
  10. package/dist/anthropic-agent-sdk/index.cjs.map +1 -0
  11. package/dist/anthropic-agent-sdk/index.d.cts +371 -0
  12. package/dist/anthropic-agent-sdk/index.d.ts +371 -0
  13. package/dist/anthropic-agent-sdk/index.js +735 -0
  14. package/dist/anthropic-agent-sdk/index.js.map +1 -0
  15. package/dist/browser/anthropic/index.cjs +39 -0
  16. package/dist/browser/anthropic/index.cjs.map +1 -0
  17. package/dist/browser/anthropic/index.js +6 -0
  18. package/dist/browser/anthropic/index.js.map +1 -0
  19. package/dist/browser/anthropic-agent-sdk/index.cjs +744 -0
  20. package/dist/browser/anthropic-agent-sdk/index.cjs.map +1 -0
  21. package/dist/browser/anthropic-agent-sdk/index.js +735 -0
  22. package/dist/browser/anthropic-agent-sdk/index.js.map +1 -0
  23. package/dist/browser/chunk-3643DC7K.cjs +365 -0
  24. package/dist/browser/chunk-3643DC7K.cjs.map +1 -0
  25. package/dist/browser/chunk-4FALQMOZ.js +232 -0
  26. package/dist/browser/chunk-4FALQMOZ.js.map +1 -0
  27. package/dist/browser/chunk-5J2QBK75.js +884 -0
  28. package/dist/browser/chunk-5J2QBK75.js.map +1 -0
  29. package/dist/browser/chunk-7MSXWGAH.js +53 -0
  30. package/dist/browser/chunk-7MSXWGAH.js.map +1 -0
  31. package/dist/browser/chunk-A24L5N5N.js +596 -0
  32. package/dist/browser/chunk-A24L5N5N.js.map +1 -0
  33. package/dist/browser/chunk-B7DEUDP6.cjs +177 -0
  34. package/dist/browser/chunk-B7DEUDP6.cjs.map +1 -0
  35. package/dist/browser/chunk-F6CJACNH.cjs +604 -0
  36. package/dist/browser/chunk-F6CJACNH.cjs.map +1 -0
  37. package/dist/browser/chunk-JBOYFQSB.js +412 -0
  38. package/dist/browser/chunk-JBOYFQSB.js.map +1 -0
  39. package/dist/browser/chunk-KRBADE6R.cjs +183 -0
  40. package/dist/browser/chunk-KRBADE6R.cjs.map +1 -0
  41. package/dist/browser/chunk-MCJYZH6W.cjs +415 -0
  42. package/dist/browser/chunk-MCJYZH6W.cjs.map +1 -0
  43. package/dist/browser/chunk-NQG2IAQS.js +178 -0
  44. package/dist/browser/chunk-NQG2IAQS.js.map +1 -0
  45. package/dist/browser/chunk-O4HG3OSK.cjs +929 -0
  46. package/dist/browser/chunk-O4HG3OSK.cjs.map +1 -0
  47. package/dist/browser/chunk-QWRQJO57.js +363 -0
  48. package/dist/browser/chunk-QWRQJO57.js.map +1 -0
  49. package/dist/browser/chunk-SWQOPFE4.cjs +234 -0
  50. package/dist/browser/chunk-SWQOPFE4.cjs.map +1 -0
  51. package/dist/browser/chunk-TYDG747E.js +171 -0
  52. package/dist/browser/chunk-TYDG747E.js.map +1 -0
  53. package/dist/browser/chunk-TZRSDDFP.cjs +56 -0
  54. package/dist/browser/chunk-TZRSDDFP.cjs.map +1 -0
  55. package/dist/browser/index.cjs +587 -0
  56. package/dist/browser/index.cjs.map +1 -0
  57. package/dist/browser/index.js +522 -0
  58. package/dist/browser/index.js.map +1 -0
  59. package/dist/browser/integrations/pino.cjs +89 -0
  60. package/dist/browser/integrations/pino.cjs.map +1 -0
  61. package/dist/browser/integrations/pino.js +86 -0
  62. package/dist/browser/integrations/pino.js.map +1 -0
  63. package/dist/browser/langchain/index.cjs +535 -0
  64. package/dist/browser/langchain/index.cjs.map +1 -0
  65. package/dist/browser/langchain/index.js +528 -0
  66. package/dist/browser/langchain/index.js.map +1 -0
  67. package/dist/browser/langgraph/index.cjs +377 -0
  68. package/dist/browser/langgraph/index.cjs.map +1 -0
  69. package/dist/browser/langgraph/index.js +371 -0
  70. package/dist/browser/langgraph/index.js.map +1 -0
  71. package/dist/browser/openai/index.cjs +125 -0
  72. package/dist/browser/openai/index.cjs.map +1 -0
  73. package/dist/browser/openai/index.js +122 -0
  74. package/dist/browser/openai/index.js.map +1 -0
  75. package/dist/browser/openai-agents/index.cjs +689 -0
  76. package/dist/browser/openai-agents/index.cjs.map +1 -0
  77. package/dist/browser/openai-agents/index.js +678 -0
  78. package/dist/browser/openai-agents/index.js.map +1 -0
  79. package/dist/browser/vercel-ai/index.cjs +233 -0
  80. package/dist/browser/vercel-ai/index.cjs.map +1 -0
  81. package/dist/browser/vercel-ai/index.js +231 -0
  82. package/dist/browser/vercel-ai/index.js.map +1 -0
  83. package/dist/chunk-4R4SHGOK.js +363 -0
  84. package/dist/chunk-4R4SHGOK.js.map +1 -0
  85. package/dist/chunk-7EO7MQBA.cjs +183 -0
  86. package/dist/chunk-7EO7MQBA.cjs.map +1 -0
  87. package/dist/chunk-7YCENA54.cjs +604 -0
  88. package/dist/chunk-7YCENA54.cjs.map +1 -0
  89. package/dist/chunk-CKFOGDUF.js +596 -0
  90. package/dist/chunk-CKFOGDUF.js.map +1 -0
  91. package/dist/chunk-FJUNILZT.cjs +1324 -0
  92. package/dist/chunk-FJUNILZT.cjs.map +1 -0
  93. package/dist/chunk-HDAFUKQ3.js +171 -0
  94. package/dist/chunk-HDAFUKQ3.js.map +1 -0
  95. package/dist/chunk-KBWPNIH4.cjs +234 -0
  96. package/dist/chunk-KBWPNIH4.cjs.map +1 -0
  97. package/dist/chunk-KJEO52QS.cjs +365 -0
  98. package/dist/chunk-KJEO52QS.cjs.map +1 -0
  99. package/dist/chunk-KZBCOZIQ.cjs +177 -0
  100. package/dist/chunk-KZBCOZIQ.cjs.map +1 -0
  101. package/dist/chunk-ME5JALGT.js +53 -0
  102. package/dist/chunk-ME5JALGT.js.map +1 -0
  103. package/dist/chunk-PVHDEPRE.cjs +56 -0
  104. package/dist/chunk-PVHDEPRE.cjs.map +1 -0
  105. package/dist/chunk-RTL23YOQ.js +178 -0
  106. package/dist/chunk-RTL23YOQ.js.map +1 -0
  107. package/dist/chunk-TQWI4UYO.js +1277 -0
  108. package/dist/chunk-TQWI4UYO.js.map +1 -0
  109. package/dist/chunk-VXDBDPDR.cjs +415 -0
  110. package/dist/chunk-VXDBDPDR.cjs.map +1 -0
  111. package/dist/chunk-XTKMUJWI.js +232 -0
  112. package/dist/chunk-XTKMUJWI.js.map +1 -0
  113. package/dist/chunk-ZKUGOWER.js +412 -0
  114. package/dist/chunk-ZKUGOWER.js.map +1 -0
  115. package/dist/index.cjs +843 -0
  116. package/dist/index.cjs.map +1 -0
  117. package/dist/index.d.cts +464 -0
  118. package/dist/index.d.ts +464 -0
  119. package/dist/index.js +778 -0
  120. package/dist/index.js.map +1 -0
  121. package/dist/integrations/pino.cjs +89 -0
  122. package/dist/integrations/pino.cjs.map +1 -0
  123. package/dist/integrations/pino.d.cts +65 -0
  124. package/dist/integrations/pino.d.ts +65 -0
  125. package/dist/integrations/pino.js +86 -0
  126. package/dist/integrations/pino.js.map +1 -0
  127. package/dist/langchain/index.cjs +535 -0
  128. package/dist/langchain/index.cjs.map +1 -0
  129. package/dist/langchain/index.d.cts +265 -0
  130. package/dist/langchain/index.d.ts +265 -0
  131. package/dist/langchain/index.js +528 -0
  132. package/dist/langchain/index.js.map +1 -0
  133. package/dist/langgraph/index.cjs +377 -0
  134. package/dist/langgraph/index.cjs.map +1 -0
  135. package/dist/langgraph/index.d.cts +324 -0
  136. package/dist/langgraph/index.d.ts +324 -0
  137. package/dist/langgraph/index.js +371 -0
  138. package/dist/langgraph/index.js.map +1 -0
  139. package/dist/openai/index.cjs +125 -0
  140. package/dist/openai/index.cjs.map +1 -0
  141. package/dist/openai/index.d.cts +136 -0
  142. package/dist/openai/index.d.ts +136 -0
  143. package/dist/openai/index.js +122 -0
  144. package/dist/openai/index.js.map +1 -0
  145. package/dist/openai-agents/index.cjs +689 -0
  146. package/dist/openai-agents/index.cjs.map +1 -0
  147. package/dist/openai-agents/index.d.cts +502 -0
  148. package/dist/openai-agents/index.d.ts +502 -0
  149. package/dist/openai-agents/index.js +678 -0
  150. package/dist/openai-agents/index.js.map +1 -0
  151. package/dist/spans-DZtMuBvc.d.cts +73 -0
  152. package/dist/spans-DZtMuBvc.d.ts +73 -0
  153. package/dist/tracing-BYAqjT5Q.d.cts +114 -0
  154. package/dist/tracing-rz9cWQ8d.d.ts +114 -0
  155. package/dist/vercel-ai/index.cjs +233 -0
  156. package/dist/vercel-ai/index.cjs.map +1 -0
  157. package/dist/vercel-ai/index.d.cts +93 -0
  158. package/dist/vercel-ai/index.d.ts +93 -0
  159. package/dist/vercel-ai/index.js +231 -0
  160. package/dist/vercel-ai/index.js.map +1 -0
  161. package/package.json +182 -0
@@ -0,0 +1,213 @@
1
+ import { C as ContextSegment } from '../spans-DZtMuBvc.js';
2
+
3
+ /**
4
+ * `@morsehq-dev/sdk/anthropic` — Anthropic SDK instrumentation.
5
+ *
6
+ * Wraps `@anthropic-ai/sdk` `client.messages.create` so every Claude call
7
+ * emits an `llm` span carrying pre-segmented `context_segments`. The
8
+ * server-side classifier then skips its own messages-array partitioning
9
+ * and persists the SDK-supplied segments verbatim.
10
+ *
11
+ * Two entry points:
12
+ *
13
+ * - `wrapAnthropic(client)` — returns a Proxy-like wrapper that
14
+ * intercepts `messages.create`. Always succeeds. The customer keeps
15
+ * using the wrapper as if it were the real client.
16
+ *
17
+ * - `instrumentAnthropic(client?)` — top-level helper. If a client is
18
+ * passed, returns the wrapped form. If no client is passed AND the
19
+ * `@anthropic-ai/sdk` package can be loaded, attempts to patch
20
+ * `Messages.prototype.create` so every fresh `new Anthropic()` is
21
+ * instrumented automatically. The prototype path is best-effort —
22
+ * it is documented as fragile across Anthropic SDK versions, and
23
+ * `wrapAnthropic` is the recommended public entry.
24
+ *
25
+ * Idempotent. `uninstallAnthropic()` restores the prototype and clears
26
+ * the install sentinel.
27
+ *
28
+ * Wrapped under `absorbErrors*` so a tracing failure can never break the
29
+ * customer's Anthropic call — at worst, calls go untraced.
30
+ *
31
+ * Mirrors `apps/sdk/typescript/src/vercel-ai/index.ts` in shape and
32
+ * `openspec/changes/.../specs/observability/spec.md` (CTX-08) in
33
+ * segmentation contract.
34
+ */
35
+
36
+ /**
37
+ * Subset of `@anthropic-ai/sdk`'s `MessageCreateParams` we read from. We
38
+ * deliberately decline to import the real types so the SDK works even when
39
+ * `@anthropic-ai/sdk` isn't installed (it's an optional peer dep).
40
+ */
41
+ interface AnthropicMessageCreateParams {
42
+ model: string;
43
+ max_tokens?: number;
44
+ system?: string | AnthropicTextBlockParam[];
45
+ messages: AnthropicMessageParam[];
46
+ tools?: AnthropicToolParam[];
47
+ tool_choice?: unknown;
48
+ [key: string]: unknown;
49
+ }
50
+ interface AnthropicTextBlockParam {
51
+ type: "text";
52
+ text: string;
53
+ cache_control?: {
54
+ type: "ephemeral";
55
+ } | null;
56
+ }
57
+ interface AnthropicToolUseBlockParam {
58
+ type: "tool_use";
59
+ id: string;
60
+ name: string;
61
+ input: unknown;
62
+ }
63
+ interface AnthropicToolResultBlockParam {
64
+ type: "tool_result";
65
+ tool_use_id: string;
66
+ content: string | Array<{
67
+ type: string;
68
+ text?: string;
69
+ [k: string]: unknown;
70
+ }>;
71
+ is_error?: boolean;
72
+ }
73
+ type AnthropicContentBlockParam = AnthropicTextBlockParam | AnthropicToolUseBlockParam | AnthropicToolResultBlockParam | {
74
+ type: string;
75
+ [k: string]: unknown;
76
+ };
77
+ interface AnthropicMessageParam {
78
+ role: "user" | "assistant" | string;
79
+ content: string | AnthropicContentBlockParam[];
80
+ }
81
+ interface AnthropicToolParam {
82
+ name: string;
83
+ description?: string;
84
+ input_schema?: unknown;
85
+ [key: string]: unknown;
86
+ }
87
+ interface AnthropicUsage {
88
+ input_tokens?: number;
89
+ output_tokens?: number;
90
+ cache_creation_input_tokens?: number;
91
+ cache_read_input_tokens?: number;
92
+ [key: string]: unknown;
93
+ }
94
+ interface AnthropicMessageResponse {
95
+ id?: string;
96
+ model?: string;
97
+ usage?: AnthropicUsage;
98
+ content?: Array<{
99
+ type: string;
100
+ text?: string;
101
+ [k: string]: unknown;
102
+ }>;
103
+ [key: string]: unknown;
104
+ }
105
+ /**
106
+ * Structural shape of the Anthropic client we wrap. We only require that
107
+ * `client.messages.create` is a function returning a Promise.
108
+ */
109
+ interface AnthropicClientLike {
110
+ messages: {
111
+ create(params: AnthropicMessageCreateParams, options?: unknown): Promise<AnthropicMessageResponse>;
112
+ [key: string]: unknown;
113
+ };
114
+ [key: string]: unknown;
115
+ }
116
+ interface InstrumentAnthropicOptions {
117
+ /**
118
+ * When provided, used as the parent agent span's name. Defaults to
119
+ * `"anthropic.messages.create"`.
120
+ */
121
+ defaultAgentName?: string;
122
+ /**
123
+ * If a fresh Anthropic *module* import is passed (e.g.,
124
+ * `await import("@anthropic-ai/sdk")`), the adapter will best-effort
125
+ * patch `Messages.prototype.create`. Most users should prefer
126
+ * `wrapAnthropic(client)` instead.
127
+ */
128
+ anthropicModule?: unknown;
129
+ /**
130
+ * When `true` (MEM-11), every wrapped `messages.create` call also
131
+ * emits a sibling `memory`-type span with
132
+ * `metadata.memory_op_type="consolidate"`, `parent_span_id` linking
133
+ * back to the LLM span (server treats this as `producer_span_id`),
134
+ * `metadata.summary_token_count` from the response's output_tokens,
135
+ * and `metadata.summary_content_hash` (SHA-256 of the response's
136
+ * first text block).
137
+ *
138
+ * Use this flag when the customer is calling Claude to summarize
139
+ * their own conversation context (the customer-side compaction
140
+ * pattern). Default `false` — existing callers see zero behavior change.
141
+ *
142
+ * Opt-in only. The adapter never auto-detects summarization from
143
+ * system-prompt content (too many false positives).
144
+ */
145
+ summarize?: boolean;
146
+ }
147
+ /**
148
+ * Wrap an Anthropic client so every `messages.create` call records an
149
+ * `llm` span with `context_segments`. The wrapper preserves the rest of
150
+ * the client's surface (other resources, helpers, etc.) via a Proxy.
151
+ *
152
+ * Idempotent — a previously wrapped client is returned as-is.
153
+ */
154
+ declare function wrapAnthropic<C extends AnthropicClientLike>(client: C, options?: InstrumentAnthropicOptions): C;
155
+ /**
156
+ * Top-level installer. Two modes:
157
+ *
158
+ * - `instrumentAnthropic(client)` — equivalent to `wrapAnthropic(client)`.
159
+ * - `instrumentAnthropic({ anthropicModule: mod })` — best-effort
160
+ * prototype patch. Prefer the wrap form when possible.
161
+ *
162
+ * Always returns the wrapped client, or `undefined` if patching failed.
163
+ * Errors are absorbed; this function never throws back at the caller.
164
+ */
165
+ declare const instrumentAnthropic: <C extends AnthropicClientLike>(clientOrOptions?: InstrumentAnthropicOptions | C | undefined, maybeOptions?: InstrumentAnthropicOptions | undefined) => Promise<boolean | C | undefined>;
166
+ /**
167
+ * Restore the prototype patch and clear the install sentinel.
168
+ *
169
+ * Pass the same module reference that was given to `instrumentAnthropic`
170
+ * (or omit and the function will try to dynamic-import it). Calling
171
+ * `uninstallAnthropic()` on a wrapped client (vs. a module) is a no-op —
172
+ * just discard the wrapped client.
173
+ */
174
+ declare const uninstallAnthropic: (anthropicModule?: unknown) => void | undefined;
175
+ /**
176
+ * Reset module-level install state for tests. Not part of the public API.
177
+ * @internal
178
+ */
179
+ declare function _resetAnthropicInstallStateForTesting(): void;
180
+ /** True when a wrapped Anthropic client is passed in. */
181
+ declare function isAnthropicWrapped(client: unknown): boolean;
182
+ /**
183
+ * Maximum bytes of `content` we ship per segment. Long blobs are truncated
184
+ * with `content_truncated: true`. The server further enforces its own
185
+ * cap; we keep the SDK floor lower to stay friendly to mobile networks.
186
+ */
187
+ declare const MAX_SEGMENT_CONTENT_BYTES = 4096;
188
+ /**
189
+ * Extract `ContextSegment[]` from an Anthropic `messages.create` request
190
+ * + response. The ordering is:
191
+ *
192
+ * 1. `tools` → one `tool_descriptions` segment, position 0.
193
+ * 2. `system` → `system_prompt` segment.
194
+ * 3. Each prior `user` / `assistant` message → `chat_history` segment.
195
+ * `tool_result` blocks (always inside `user.content`) become their
196
+ * own `tool_observation` segments.
197
+ * `tool_use` blocks (assistant-emitted) roll into the parent
198
+ * assistant `chat_history` segment as part of the JSON content.
199
+ * 4. The final `user` message → `current_input`.
200
+ *
201
+ * Cache state heuristic:
202
+ * - `system` blocks with `cache_control.type === "ephemeral"` →
203
+ * `cache_write`.
204
+ * - If the response reports `cache_read_input_tokens > 0`, mark the
205
+ * `system_prompt` and `tool_descriptions` segments as `cache_hit`
206
+ * (overrides `cache_write` — the cache HIT is more informative
207
+ * than the cache write attempt).
208
+ *
209
+ * `tokens` is intentionally left undefined — the server tokenizes.
210
+ */
211
+ declare function extractAnthropicSegments(params: AnthropicMessageCreateParams, response?: AnthropicMessageResponse): ContextSegment[];
212
+
213
+ export { type AnthropicClientLike, type AnthropicContentBlockParam, type AnthropicMessageCreateParams, type AnthropicMessageParam, type AnthropicMessageResponse, type AnthropicTextBlockParam, type AnthropicToolParam, type AnthropicToolResultBlockParam, type AnthropicToolUseBlockParam, type AnthropicUsage, type InstrumentAnthropicOptions, MAX_SEGMENT_CONTENT_BYTES, _resetAnthropicInstallStateForTesting, extractAnthropicSegments, instrumentAnthropic, isAnthropicWrapped, uninstallAnthropic, wrapAnthropic };
@@ -0,0 +1,6 @@
1
+ export { MAX_SEGMENT_CONTENT_BYTES, _resetAnthropicInstallStateForTesting, extractAnthropicSegments, instrumentAnthropic, isAnthropicWrapped, uninstallAnthropic, wrapAnthropic } from '../chunk-CKFOGDUF.js';
2
+ import '../chunk-RTL23YOQ.js';
3
+ import '../chunk-XTKMUJWI.js';
4
+ import '../chunk-TQWI4UYO.js';
5
+ //# sourceMappingURL=index.js.map
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":[],"names":[],"mappings":"","file":"index.js"}