@execlave/sdk 1.1.5 → 1.2.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/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Rishit Mavani
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
package/README.md CHANGED
@@ -7,7 +7,7 @@ Official JavaScript/TypeScript SDK for the [Execlave](https://www.execlave.com)
7
7
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
8
8
  [![Docs](https://img.shields.io/badge/docs-execlave.com-0a84ff.svg)](https://www.execlave.com/docs)
9
9
 
10
- > **Framework integrations** — use the [LangChain callback handler](https://www.execlave.com/docs/integrations/langchain) for automatic tracing and policy enforcement, or see [all integrations](https://www.execlave.com/docs/integrations). [Get an API key](https://www.execlave.com/signup?utm_source=github&utm_medium=sdk&utm_campaign=js).
10
+ > **Framework integrations** — drop-in handlers for [LangChain](https://www.execlave.com/docs/integrations/langchain), the [OpenAI Agents SDK](https://www.execlave.com/docs/integrations/openai-agents), [CrewAI](https://www.execlave.com/docs/integrations/crewai), the [OpenAI Chat Completions API](https://www.execlave.com/docs/integrations/openai-chat), and the [Model Context Protocol](https://www.execlave.com/docs/integrations/mcp), or see [all integrations](https://www.execlave.com/docs/integrations). [Get an API key](https://www.execlave.com/signup?utm_source=github&utm_medium=sdk&utm_campaign=js).
11
11
 
12
12
  ## Installation
13
13
 
@@ -13,4 +13,8 @@ export { ExeclaveTracingProcessor } from './openai-agents';
13
13
  export type { ExeclaveTracingProcessorOptions } from './openai-agents';
14
14
  export { instrumentCrew } from './crewai';
15
15
  export type { InstrumentCrewOptions } from './crewai';
16
+ export { instrumentOpenAI } from './openai-chat';
17
+ export type { InstrumentOpenAIOptions } from './openai-chat';
18
+ export { instrumentMcpClient } from './mcp';
19
+ export type { InstrumentMcpClientOptions } from './mcp';
16
20
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,uBAAuB,EAAE,MAAM,aAAa,CAAC;AACtD,YAAY,EAAE,8BAA8B,EAAE,MAAM,aAAa,CAAC;AAElE,OAAO,EAAE,wBAAwB,EAAE,MAAM,iBAAiB,CAAC;AAC3D,YAAY,EAAE,+BAA+B,EAAE,MAAM,iBAAiB,CAAC;AAEvE,OAAO,EAAE,cAAc,EAAE,MAAM,UAAU,CAAC;AAC1C,YAAY,EAAE,qBAAqB,EAAE,MAAM,UAAU,CAAC;AAEtD,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,YAAY,EAAE,uBAAuB,EAAE,MAAM,eAAe,CAAC;AAE7D,OAAO,EAAE,mBAAmB,EAAE,MAAM,OAAO,CAAC;AAC5C,YAAY,EAAE,0BAA0B,EAAE,MAAM,OAAO,CAAC"}
@@ -9,11 +9,15 @@
9
9
  * import { ExeclaveCallbackHandler } from '@execlave/sdk/integrations/langchain';
10
10
  */
11
11
  Object.defineProperty(exports, "__esModule", { value: true });
12
- exports.instrumentCrew = exports.ExeclaveTracingProcessor = exports.ExeclaveCallbackHandler = void 0;
12
+ exports.instrumentMcpClient = exports.instrumentOpenAI = exports.instrumentCrew = exports.ExeclaveTracingProcessor = exports.ExeclaveCallbackHandler = void 0;
13
13
  var langchain_1 = require("./langchain");
14
14
  Object.defineProperty(exports, "ExeclaveCallbackHandler", { enumerable: true, get: function () { return langchain_1.ExeclaveCallbackHandler; } });
15
15
  var openai_agents_1 = require("./openai-agents");
16
16
  Object.defineProperty(exports, "ExeclaveTracingProcessor", { enumerable: true, get: function () { return openai_agents_1.ExeclaveTracingProcessor; } });
17
17
  var crewai_1 = require("./crewai");
18
18
  Object.defineProperty(exports, "instrumentCrew", { enumerable: true, get: function () { return crewai_1.instrumentCrew; } });
19
+ var openai_chat_1 = require("./openai-chat");
20
+ Object.defineProperty(exports, "instrumentOpenAI", { enumerable: true, get: function () { return openai_chat_1.instrumentOpenAI; } });
21
+ var mcp_1 = require("./mcp");
22
+ Object.defineProperty(exports, "instrumentMcpClient", { enumerable: true, get: function () { return mcp_1.instrumentMcpClient; } });
19
23
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,yCAAsD;AAA7C,oHAAA,uBAAuB,OAAA;AAGhC,iDAA2D;AAAlD,yHAAA,wBAAwB,OAAA;AAGjC,mCAA0C;AAAjC,wGAAA,cAAc,OAAA"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/integrations/index.ts"],"names":[],"mappings":";AAAA;;;;;;;;GAQG;;;AAEH,yCAAsD;AAA7C,oHAAA,uBAAuB,OAAA;AAGhC,iDAA2D;AAAlD,yHAAA,wBAAwB,OAAA;AAGjC,mCAA0C;AAAjC,wGAAA,cAAc,OAAA;AAGvB,6CAAiD;AAAxC,+GAAA,gBAAgB,OAAA;AAGzB,6BAA4C;AAAnC,0GAAA,mBAAmB,OAAA"}
@@ -0,0 +1,36 @@
1
+ /**
2
+ * Model Context Protocol (MCP) client auto-instrumentation.
3
+ *
4
+ * Wrap an `@modelcontextprotocol/sdk` `Client` so every `callTool` is
5
+ * policy-enforced (tool allowlist) and recorded as a `tool` span.
6
+ *
7
+ * ```ts
8
+ * import { Client } from '@modelcontextprotocol/sdk/client/index.js';
9
+ * import { Execlave } from '@execlave/sdk';
10
+ * import { instrumentMcpClient } from '@execlave/sdk/integrations/mcp';
11
+ *
12
+ * const exe = new Execlave({ apiKey: '...' });
13
+ * const mcp = new Client({ name: 'app', version: '1.0' });
14
+ * instrumentMcpClient(mcp, exe, { agentId: 'my-bot' });
15
+ *
16
+ * const result = await mcp.callTool({ name: 'search', arguments: { q: 'x' } });
17
+ * ```
18
+ *
19
+ * Idempotent. No compile-time dependency on the MCP SDK — the call
20
+ * surface is duck-typed.
21
+ */
22
+ import type { Execlave } from '../client';
23
+ export interface InstrumentMcpClientOptions {
24
+ /** Agent id registered with Execlave. Required for enforcement. */
25
+ agentId: string;
26
+ /** Run `enforcePolicy` on tool calls. Default true. */
27
+ enforce?: boolean;
28
+ sessionId?: string;
29
+ userId?: string;
30
+ }
31
+ /**
32
+ * Wrap `client.callTool` to enforce policies and record a tool span.
33
+ * Returns the same client for fluent chaining.
34
+ */
35
+ export declare function instrumentMcpClient<T>(client: T, exe: Execlave, opts: InstrumentMcpClientOptions): T;
36
+ //# sourceMappingURL=mcp.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.d.ts","sourceRoot":"","sources":["../../src/integrations/mcp.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAsB1C,MAAM,WAAW,0BAA0B;IACzC,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,uDAAuD;IACvD,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,CAAC,EACnC,MAAM,EAAE,CAAC,EACT,GAAG,EAAE,QAAQ,EACb,IAAI,EAAE,0BAA0B,GAC/B,CAAC,CA4EH"}
@@ -0,0 +1,167 @@
1
+ "use strict";
2
+ /**
3
+ * Model Context Protocol (MCP) client auto-instrumentation.
4
+ *
5
+ * Wrap an `@modelcontextprotocol/sdk` `Client` so every `callTool` is
6
+ * policy-enforced (tool allowlist) and recorded as a `tool` span.
7
+ *
8
+ * ```ts
9
+ * import { Client } from '@modelcontextprotocol/sdk/client/index.js';
10
+ * import { Execlave } from '@execlave/sdk';
11
+ * import { instrumentMcpClient } from '@execlave/sdk/integrations/mcp';
12
+ *
13
+ * const exe = new Execlave({ apiKey: '...' });
14
+ * const mcp = new Client({ name: 'app', version: '1.0' });
15
+ * instrumentMcpClient(mcp, exe, { agentId: 'my-bot' });
16
+ *
17
+ * const result = await mcp.callTool({ name: 'search', arguments: { q: 'x' } });
18
+ * ```
19
+ *
20
+ * Idempotent. No compile-time dependency on the MCP SDK — the call
21
+ * surface is duck-typed.
22
+ */
23
+ Object.defineProperty(exports, "__esModule", { value: true });
24
+ exports.instrumentMcpClient = instrumentMcpClient;
25
+ const errors_1 = require("../errors");
26
+ const spans_1 = require("../instrumentation/spans");
27
+ const MARKER = '_execlaveInstrumented';
28
+ function isEnforcementError(err) {
29
+ return (err instanceof errors_1.PolicyBlockedError ||
30
+ err instanceof errors_1.PolicyDeniedError ||
31
+ err instanceof errors_1.ApprovalTimeoutError ||
32
+ err instanceof errors_1.EnforcementUnavailableError ||
33
+ err instanceof errors_1.AgentPausedError);
34
+ }
35
+ /**
36
+ * Wrap `client.callTool` to enforce policies and record a tool span.
37
+ * Returns the same client for fluent chaining.
38
+ */
39
+ function instrumentMcpClient(client, exe, opts) {
40
+ if (client === null || client === undefined) {
41
+ throw new Error('instrumentMcpClient: client must not be null/undefined');
42
+ }
43
+ if (!exe)
44
+ throw new Error('instrumentMcpClient: exe must not be null/undefined');
45
+ if (!opts?.agentId)
46
+ throw new Error('instrumentMcpClient: agentId is required');
47
+ const c = client;
48
+ if (c[MARKER])
49
+ return client;
50
+ const original = c.callTool;
51
+ if (typeof original !== 'function') {
52
+ throw new TypeError('instrumentMcpClient: client.callTool is missing or not a function');
53
+ }
54
+ const enforce = opts.enforce !== false;
55
+ const tree = (0, spans_1.getSpanTree)(exe);
56
+ const boundOriginal = original.bind(c);
57
+ const wrapped = async (request, ...rest) => {
58
+ // Both `(name, args)` and `({ name, arguments })` shapes are
59
+ // supported by various MCP SDK versions.
60
+ const { name, args } = normaliseCallToolArgs(request, rest);
61
+ if (enforce && name) {
62
+ try {
63
+ await exe.enforcePolicy({
64
+ agentId: opts.agentId,
65
+ input: safeStr(args) ?? `tool:${name}`,
66
+ tools: [name],
67
+ });
68
+ }
69
+ catch (err) {
70
+ if (isEnforcementError(err))
71
+ throw err;
72
+ // eslint-disable-next-line no-console
73
+ console.warn('[execlave] MCP enforcePolicy failed (non-fatal):', err);
74
+ }
75
+ }
76
+ const span = tree.start({
77
+ kind: spans_1.SPAN_KIND_TOOL,
78
+ name: String(name ?? 'mcp.tool'),
79
+ agentId: opts.agentId,
80
+ sessionId: opts.sessionId,
81
+ userId: opts.userId,
82
+ metadata: { mcpTool: true },
83
+ });
84
+ if (args !== undefined && args !== null) {
85
+ try {
86
+ span.setInput(args);
87
+ }
88
+ catch {
89
+ /* noop */
90
+ }
91
+ }
92
+ let result;
93
+ try {
94
+ result = await boundOriginal(request, ...rest);
95
+ }
96
+ catch (err) {
97
+ span.finish('error', err?.message ?? String(err), err?.name ?? 'Error');
98
+ throw err;
99
+ }
100
+ try {
101
+ const text = extractContent(result?.content);
102
+ if (text !== null)
103
+ span.setOutput(text);
104
+ }
105
+ catch {
106
+ /* noop */
107
+ }
108
+ span.finish(result?.isError ? 'error' : 'success');
109
+ return result;
110
+ };
111
+ try {
112
+ c.callTool = wrapped;
113
+ c[MARKER] = true;
114
+ }
115
+ catch {
116
+ /* frozen object */
117
+ }
118
+ return client;
119
+ }
120
+ // ----------------------------------------------------------------------
121
+ // Helpers
122
+ // ----------------------------------------------------------------------
123
+ function normaliseCallToolArgs(request, rest) {
124
+ if (typeof request === 'string') {
125
+ return { name: request, args: rest[0] };
126
+ }
127
+ if (request && typeof request === 'object') {
128
+ const name = typeof request.name === 'string'
129
+ ? request.name
130
+ : typeof request?.params?.name === 'string'
131
+ ? request.params.name
132
+ : null;
133
+ const args = request.arguments !== undefined
134
+ ? request.arguments
135
+ : request?.params?.arguments;
136
+ return { name, args };
137
+ }
138
+ return { name: null, args: undefined };
139
+ }
140
+ function extractContent(content) {
141
+ if (!Array.isArray(content))
142
+ return safeStr(content);
143
+ const parts = [];
144
+ for (const item of content) {
145
+ const text = item?.text;
146
+ if (typeof text === 'string')
147
+ parts.push(text);
148
+ else {
149
+ const s = safeStr(item);
150
+ if (s)
151
+ parts.push(s);
152
+ }
153
+ }
154
+ return parts.length ? parts.join('\n').slice(0, 4000) : null;
155
+ }
156
+ function safeStr(value, limit = 4000) {
157
+ if (value === null || value === undefined)
158
+ return null;
159
+ try {
160
+ const s = typeof value === 'string' ? value : JSON.stringify(value);
161
+ return s.slice(0, limit);
162
+ }
163
+ catch {
164
+ return null;
165
+ }
166
+ }
167
+ //# sourceMappingURL=mcp.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mcp.js","sourceRoot":"","sources":["../../src/integrations/mcp.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,41 @@
1
+ /**
2
+ * OpenAI Chat Completions auto-instrumentation.
3
+ *
4
+ * Wrap an `openai` client so every `chat.completions.create(...)` call is
5
+ * governed by Execlave: the user prompt is enforced before the request
6
+ * leaves, and the call is recorded as an `llm` span with model + token
7
+ * usage metadata.
8
+ *
9
+ * ```ts
10
+ * import OpenAI from 'openai';
11
+ * import { Execlave } from '@execlave/sdk';
12
+ * import { instrumentOpenAI } from '@execlave/sdk/integrations/openai-chat';
13
+ *
14
+ * const exe = new Execlave({ apiKey: '...' });
15
+ * const openai = instrumentOpenAI(new OpenAI(), exe, { agentId: 'my-bot' });
16
+ *
17
+ * const resp = await openai.chat.completions.create({
18
+ * model: 'gpt-4o-mini',
19
+ * messages: [{ role: 'user', content: 'hi' }],
20
+ * });
21
+ * ```
22
+ *
23
+ * Idempotent — marker prevents double-wrapping. No compile-time
24
+ * dependency on the openai SDK — the call surface is duck-typed.
25
+ */
26
+ import type { Execlave } from '../client';
27
+ export interface InstrumentOpenAIOptions {
28
+ /** Agent id registered with Execlave. Required for enforcement. */
29
+ agentId: string;
30
+ /** Run `enforcePolicy` on the user message. Default true. */
31
+ enforce?: boolean;
32
+ sessionId?: string;
33
+ userId?: string;
34
+ }
35
+ /**
36
+ * Patch `client.chat.completions.create` to enforce policies and record
37
+ * an LLM span around every call. Returns the same client for fluent
38
+ * chaining.
39
+ */
40
+ export declare function instrumentOpenAI<T>(client: T, exe: Execlave, opts: InstrumentOpenAIOptions): T;
41
+ //# sourceMappingURL=openai-chat.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-chat.d.ts","sourceRoot":"","sources":["../../src/integrations/openai-chat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;GAwBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AAsB1C,MAAM,WAAW,uBAAuB;IACtC,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,6DAA6D;IAC7D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,uBAAuB,GAAG,CAAC,CAiF9F"}
@@ -0,0 +1,164 @@
1
+ "use strict";
2
+ /**
3
+ * OpenAI Chat Completions auto-instrumentation.
4
+ *
5
+ * Wrap an `openai` client so every `chat.completions.create(...)` call is
6
+ * governed by Execlave: the user prompt is enforced before the request
7
+ * leaves, and the call is recorded as an `llm` span with model + token
8
+ * usage metadata.
9
+ *
10
+ * ```ts
11
+ * import OpenAI from 'openai';
12
+ * import { Execlave } from '@execlave/sdk';
13
+ * import { instrumentOpenAI } from '@execlave/sdk/integrations/openai-chat';
14
+ *
15
+ * const exe = new Execlave({ apiKey: '...' });
16
+ * const openai = instrumentOpenAI(new OpenAI(), exe, { agentId: 'my-bot' });
17
+ *
18
+ * const resp = await openai.chat.completions.create({
19
+ * model: 'gpt-4o-mini',
20
+ * messages: [{ role: 'user', content: 'hi' }],
21
+ * });
22
+ * ```
23
+ *
24
+ * Idempotent — marker prevents double-wrapping. No compile-time
25
+ * dependency on the openai SDK — the call surface is duck-typed.
26
+ */
27
+ Object.defineProperty(exports, "__esModule", { value: true });
28
+ exports.instrumentOpenAI = instrumentOpenAI;
29
+ const errors_1 = require("../errors");
30
+ const spans_1 = require("../instrumentation/spans");
31
+ const MARKER = '_execlaveInstrumented';
32
+ function isEnforcementError(err) {
33
+ return (err instanceof errors_1.PolicyBlockedError ||
34
+ err instanceof errors_1.PolicyDeniedError ||
35
+ err instanceof errors_1.ApprovalTimeoutError ||
36
+ err instanceof errors_1.EnforcementUnavailableError ||
37
+ err instanceof errors_1.AgentPausedError);
38
+ }
39
+ /**
40
+ * Patch `client.chat.completions.create` to enforce policies and record
41
+ * an LLM span around every call. Returns the same client for fluent
42
+ * chaining.
43
+ */
44
+ function instrumentOpenAI(client, exe, opts) {
45
+ if (client === null || client === undefined) {
46
+ throw new Error('instrumentOpenAI: client must not be null/undefined');
47
+ }
48
+ if (!exe)
49
+ throw new Error('instrumentOpenAI: exe must not be null/undefined');
50
+ if (!opts?.agentId)
51
+ throw new Error('instrumentOpenAI: agentId is required');
52
+ const c = client;
53
+ const completions = c?.chat?.completions;
54
+ if (!completions || typeof completions.create !== 'function') {
55
+ throw new TypeError('instrumentOpenAI: client.chat.completions.create is missing');
56
+ }
57
+ if (completions[MARKER])
58
+ return client;
59
+ const enforce = opts.enforce !== false;
60
+ const tree = (0, spans_1.getSpanTree)(exe);
61
+ const originalCreate = completions.create.bind(completions);
62
+ const wrappedCreate = async (params, ...rest) => {
63
+ const model = params?.model;
64
+ const messages = params?.messages;
65
+ if (enforce) {
66
+ const userText = extractUserInput(messages) ?? 'chat.completions';
67
+ try {
68
+ await exe.enforcePolicy({ agentId: opts.agentId, input: userText });
69
+ }
70
+ catch (err) {
71
+ if (isEnforcementError(err))
72
+ throw err;
73
+ // eslint-disable-next-line no-console
74
+ console.warn('[execlave] enforcePolicy failed (non-fatal):', err);
75
+ }
76
+ }
77
+ const span = tree.start({
78
+ kind: spans_1.SPAN_KIND_LLM,
79
+ name: String(model ?? 'chat.completions'),
80
+ agentId: opts.agentId,
81
+ sessionId: opts.sessionId,
82
+ userId: opts.userId,
83
+ metadata: { provider: 'openai', endpoint: 'chat.completions' },
84
+ });
85
+ if (model)
86
+ span.setModel(String(model));
87
+ try {
88
+ span.setInput(messages);
89
+ }
90
+ catch {
91
+ /* noop */
92
+ }
93
+ let response;
94
+ try {
95
+ response = await originalCreate(params, ...rest);
96
+ }
97
+ catch (err) {
98
+ span.finish('error', err?.message ?? String(err), err?.name ?? 'Error');
99
+ throw err;
100
+ }
101
+ try {
102
+ const choices = response?.choices ?? [];
103
+ const message = choices[0]?.message;
104
+ const content = message?.content;
105
+ if (content !== undefined && content !== null)
106
+ span.setOutput(content);
107
+ const usage = response?.usage;
108
+ const p = (usage?.prompt_tokens ?? usage?.promptTokens);
109
+ const compl = (usage?.completion_tokens ?? usage?.completionTokens);
110
+ if (typeof p === 'number' && typeof compl === 'number')
111
+ span.setTokens(p, compl);
112
+ const respModel = response?.model;
113
+ if (typeof respModel === 'string' && respModel)
114
+ span.setModel(respModel);
115
+ }
116
+ catch {
117
+ /* swallow — instrumentation must not break the call */
118
+ }
119
+ span.finish('success');
120
+ return response;
121
+ };
122
+ try {
123
+ completions.create = wrappedCreate;
124
+ completions[MARKER] = true;
125
+ }
126
+ catch {
127
+ // Frozen object — double-wrap guard inactive but we've done what we can.
128
+ }
129
+ return client;
130
+ }
131
+ // ----------------------------------------------------------------------
132
+ // Helpers
133
+ // ----------------------------------------------------------------------
134
+ function extractUserInput(messages) {
135
+ if (!Array.isArray(messages))
136
+ return safeStr(messages);
137
+ for (let i = messages.length - 1; i >= 0; i--) {
138
+ const msg = messages[i];
139
+ if (msg?.role !== 'user')
140
+ continue;
141
+ const content = msg?.content;
142
+ if (Array.isArray(content)) {
143
+ const parts = content
144
+ .map((p) => (typeof p?.text === 'string' ? p.text : null))
145
+ .filter((x) => !!x);
146
+ if (parts.length)
147
+ return safeStr(parts.join('\n'));
148
+ }
149
+ return safeStr(content);
150
+ }
151
+ return null;
152
+ }
153
+ function safeStr(value, limit = 4000) {
154
+ if (value === null || value === undefined)
155
+ return null;
156
+ try {
157
+ const s = typeof value === 'string' ? value : JSON.stringify(value);
158
+ return s.slice(0, limit);
159
+ }
160
+ catch {
161
+ return null;
162
+ }
163
+ }
164
+ //# sourceMappingURL=openai-chat.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"openai-chat.js","sourceRoot":"","sources":["../../src/integrations/openai-chat.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@execlave/sdk",
3
- "version": "1.1.5",
4
- "description": "Official JavaScript/TypeScript SDK for the Execlave AI agent governance platform — tracing, policy enforcement, and framework auto-instrumentation for LangChain",
3
+ "version": "1.2.0",
4
+ "description": "Official JavaScript/TypeScript SDK for the Execlave AI agent governance platform — tracing, policy enforcement, and framework auto-instrumentation for LangChain, OpenAI Agents SDK, CrewAI, Model Context Protocol, and OpenAI Chat Completions",
5
5
  "main": "dist/index.js",
6
6
  "types": "dist/index.d.ts",
7
7
  "exports": {
@@ -13,10 +13,30 @@
13
13
  "types": "./dist/instrumentation/index.d.ts",
14
14
  "default": "./dist/instrumentation/index.js"
15
15
  },
16
+ "./integrations": {
17
+ "types": "./dist/integrations/index.d.ts",
18
+ "default": "./dist/integrations/index.js"
19
+ },
16
20
  "./integrations/langchain": {
17
21
  "types": "./dist/integrations/langchain.d.ts",
18
22
  "default": "./dist/integrations/langchain.js"
19
23
  },
24
+ "./integrations/openai-agents": {
25
+ "types": "./dist/integrations/openai-agents.d.ts",
26
+ "default": "./dist/integrations/openai-agents.js"
27
+ },
28
+ "./integrations/crewai": {
29
+ "types": "./dist/integrations/crewai.d.ts",
30
+ "default": "./dist/integrations/crewai.js"
31
+ },
32
+ "./integrations/openai-chat": {
33
+ "types": "./dist/integrations/openai-chat.d.ts",
34
+ "default": "./dist/integrations/openai-chat.js"
35
+ },
36
+ "./integrations/mcp": {
37
+ "types": "./dist/integrations/mcp.d.ts",
38
+ "default": "./dist/integrations/mcp.js"
39
+ },
20
40
  "./package.json": "./package.json"
21
41
  },
22
42
  "files": [
@@ -60,10 +80,14 @@
60
80
  "ai-compliance",
61
81
  "audit",
62
82
  "langchain",
63
- "openai-agents"
83
+ "openai-agents",
84
+ "crewai",
85
+ "mcp",
86
+ "model-context-protocol",
87
+ "openai"
64
88
  ],
65
89
  "license": "MIT",
66
- "author": "Execlave <support@execlave.com>",
90
+ "author": "Rishit Mavani <support@execlave.com>",
67
91
  "repository": {
68
92
  "type": "git",
69
93
  "url": "git+https://github.com/execlave-ai/execlave-js-sdk.git",
@@ -105,12 +129,14 @@
105
129
  }
106
130
  },
107
131
  "devDependencies": {
132
+ "@modelcontextprotocol/sdk": "^1.12.1",
108
133
  "@opentelemetry/api": "^1.9.0",
109
134
  "@opentelemetry/exporter-trace-otlp-http": "^0.213.0",
110
135
  "@opentelemetry/resources": "^2.6.0",
111
136
  "@opentelemetry/sdk-trace-base": "^2.6.0",
112
137
  "@types/jest": "^29.5.0",
113
138
  "jest": "^29.7.0",
139
+ "openai": "^4.103.0",
114
140
  "rimraf": "^5.0.0",
115
141
  "ts-jest": "^29.1.0",
116
142
  "typescript": "^5.3.0"