@execlave/sdk 1.0.2 → 1.1.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +65 -48
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +5 -1
- package/dist/client.js.map +1 -1
- package/dist/errors.d.ts +17 -0
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +24 -1
- package/dist/errors.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +2 -1
- package/dist/index.js.map +1 -1
- package/dist/instrumentation/events.d.ts +35 -0
- package/dist/instrumentation/events.d.ts.map +1 -0
- package/dist/instrumentation/events.js +137 -0
- package/dist/instrumentation/events.js.map +1 -0
- package/dist/instrumentation/index.d.ts +11 -0
- package/dist/instrumentation/index.d.ts.map +1 -0
- package/dist/instrumentation/index.js +28 -0
- package/dist/instrumentation/index.js.map +1 -0
- package/dist/instrumentation/spans.d.ts +72 -0
- package/dist/instrumentation/spans.d.ts.map +1 -0
- package/dist/instrumentation/spans.js +136 -0
- package/dist/instrumentation/spans.js.map +1 -0
- package/dist/integrations/crewai.d.ts +44 -0
- package/dist/integrations/crewai.d.ts.map +1 -0
- package/dist/integrations/crewai.js +224 -0
- package/dist/integrations/crewai.js.map +1 -0
- package/dist/integrations/index.d.ts +16 -0
- package/dist/integrations/index.d.ts.map +1 -0
- package/dist/integrations/index.js +19 -0
- package/dist/integrations/index.js.map +1 -0
- package/dist/integrations/langchain.d.ts +90 -0
- package/dist/integrations/langchain.d.ts.map +1 -0
- package/dist/integrations/langchain.js +240 -0
- package/dist/integrations/langchain.js.map +1 -0
- package/dist/integrations/openai-agents.d.ts +60 -0
- package/dist/integrations/openai-agents.d.ts.map +1 -0
- package/dist/integrations/openai-agents.js +247 -0
- package/dist/integrations/openai-agents.js.map +1 -0
- package/dist/trace.d.ts +21 -2
- package/dist/trace.d.ts.map +1 -1
- package/dist/trace.js +34 -4
- package/dist/trace.js.map +1 -1
- package/dist/types.d.ts +10 -0
- package/dist/types.d.ts.map +1 -1
- package/package.json +38 -5
|
@@ -0,0 +1,224 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* CrewAI auto-instrumentation.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { Crew } from 'crewai';
|
|
9
|
+
* import { Execlave } from '@execlave/sdk';
|
|
10
|
+
* import { instrumentCrew } from '@execlave/sdk/integrations/crewai';
|
|
11
|
+
*
|
|
12
|
+
* const exe = new Execlave({ apiKey: '...' });
|
|
13
|
+
* const crew = new Crew({ agents: [...], tasks: [...] });
|
|
14
|
+
* instrumentCrew(crew, exe, { agentId: 'my-crew' });
|
|
15
|
+
* await crew.kickoff();
|
|
16
|
+
* ```
|
|
17
|
+
*
|
|
18
|
+
* Implementation: CrewAI exposes `stepCallback` and `taskCallback` hooks
|
|
19
|
+
* on `Agent` and `Crew` objects. We chain our callbacks in front of any
|
|
20
|
+
* existing user callbacks so attaching the instrumentation never
|
|
21
|
+
* overrides user-supplied hooks.
|
|
22
|
+
*
|
|
23
|
+
* Idempotent — `_execlaveInstrumented` marker prevents double-wrapping.
|
|
24
|
+
*
|
|
25
|
+
* Note: CrewAI's first-class JS implementation is still emerging; this
|
|
26
|
+
* helper duck-types the callback shape so it works with both the
|
|
27
|
+
* official package and community ports. No compile-time dependency.
|
|
28
|
+
*/
|
|
29
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
30
|
+
exports.instrumentCrew = instrumentCrew;
|
|
31
|
+
const errors_1 = require("../errors");
|
|
32
|
+
const spans_1 = require("../instrumentation/spans");
|
|
33
|
+
const MARKER = '_execlaveInstrumented';
|
|
34
|
+
function isEnforcementError(err) {
|
|
35
|
+
return (err instanceof errors_1.PolicyBlockedError ||
|
|
36
|
+
err instanceof errors_1.PolicyDeniedError ||
|
|
37
|
+
err instanceof errors_1.ApprovalTimeoutError ||
|
|
38
|
+
err instanceof errors_1.EnforcementUnavailableError ||
|
|
39
|
+
err instanceof errors_1.AgentPausedError);
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* Attach Execlave instrumentation to a CrewAI `Crew` instance.
|
|
43
|
+
*
|
|
44
|
+
* Idempotent: calling twice on the same crew is a no-op. Returns the
|
|
45
|
+
* same crew for fluent chaining.
|
|
46
|
+
*/
|
|
47
|
+
function instrumentCrew(crew, exe, opts) {
|
|
48
|
+
if (crew === null || crew === undefined) {
|
|
49
|
+
throw new Error('instrumentCrew: crew must not be null/undefined');
|
|
50
|
+
}
|
|
51
|
+
if (!exe)
|
|
52
|
+
throw new Error('instrumentCrew: exe must not be null/undefined');
|
|
53
|
+
if (!opts?.agentId)
|
|
54
|
+
throw new Error('instrumentCrew: agentId is required');
|
|
55
|
+
const c = crew;
|
|
56
|
+
if (c[MARKER])
|
|
57
|
+
return crew;
|
|
58
|
+
const tree = (0, spans_1.getSpanTree)(exe);
|
|
59
|
+
const stepCallback = async (step) => {
|
|
60
|
+
try {
|
|
61
|
+
await recordStep(tree, exe, step, opts);
|
|
62
|
+
}
|
|
63
|
+
catch (err) {
|
|
64
|
+
if (isEnforcementError(err))
|
|
65
|
+
throw err;
|
|
66
|
+
// eslint-disable-next-line no-console
|
|
67
|
+
console.warn('[execlave] crewai stepCallback failed:', err);
|
|
68
|
+
}
|
|
69
|
+
};
|
|
70
|
+
const taskCallback = (taskOutput) => {
|
|
71
|
+
try {
|
|
72
|
+
recordTask(tree, taskOutput, opts);
|
|
73
|
+
}
|
|
74
|
+
catch (err) {
|
|
75
|
+
// eslint-disable-next-line no-console
|
|
76
|
+
console.warn('[execlave] crewai taskCallback failed:', err);
|
|
77
|
+
}
|
|
78
|
+
};
|
|
79
|
+
// Chain rather than replace — preserve user-supplied callbacks.
|
|
80
|
+
chainCallback(c, 'stepCallback', stepCallback);
|
|
81
|
+
chainCallback(c, 'step_callback', stepCallback);
|
|
82
|
+
chainCallback(c, 'taskCallback', taskCallback);
|
|
83
|
+
chainCallback(c, 'task_callback', taskCallback);
|
|
84
|
+
// Crew also exposes a list of Agent objects each with their own
|
|
85
|
+
// stepCallback. Instrument them too so tool calls from sub-agents
|
|
86
|
+
// are captured.
|
|
87
|
+
const agents = (c.agents ?? []);
|
|
88
|
+
for (const inner of agents) {
|
|
89
|
+
chainCallback(inner, 'stepCallback', stepCallback);
|
|
90
|
+
chainCallback(inner, 'step_callback', stepCallback);
|
|
91
|
+
}
|
|
92
|
+
try {
|
|
93
|
+
c[MARKER] = true;
|
|
94
|
+
}
|
|
95
|
+
catch {
|
|
96
|
+
/* frozen object — double-wrap guard inactive */
|
|
97
|
+
}
|
|
98
|
+
return crew;
|
|
99
|
+
}
|
|
100
|
+
// ----------------------------------------------------------------------
|
|
101
|
+
// Internal: chaining + recording
|
|
102
|
+
// ----------------------------------------------------------------------
|
|
103
|
+
function chainCallback(obj, attr, newCb) {
|
|
104
|
+
if (!obj || typeof obj !== 'object')
|
|
105
|
+
return;
|
|
106
|
+
const existing = obj[attr];
|
|
107
|
+
if (existing === undefined || existing === null) {
|
|
108
|
+
try {
|
|
109
|
+
obj[attr] = newCb;
|
|
110
|
+
}
|
|
111
|
+
catch {
|
|
112
|
+
/* noop */
|
|
113
|
+
}
|
|
114
|
+
return;
|
|
115
|
+
}
|
|
116
|
+
const chained = async (payload) => {
|
|
117
|
+
try {
|
|
118
|
+
await newCb(payload);
|
|
119
|
+
}
|
|
120
|
+
catch (err) {
|
|
121
|
+
if (isEnforcementError(err))
|
|
122
|
+
throw err;
|
|
123
|
+
// eslint-disable-next-line no-console
|
|
124
|
+
console.warn(`[execlave] ${attr} failed:`, err);
|
|
125
|
+
}
|
|
126
|
+
try {
|
|
127
|
+
await existing(payload);
|
|
128
|
+
}
|
|
129
|
+
catch (err) {
|
|
130
|
+
// eslint-disable-next-line no-console
|
|
131
|
+
console.warn(`[execlave] user-provided ${attr} raised:`, err);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
try {
|
|
135
|
+
obj[attr] = chained;
|
|
136
|
+
}
|
|
137
|
+
catch {
|
|
138
|
+
/* noop */
|
|
139
|
+
}
|
|
140
|
+
}
|
|
141
|
+
async function recordStep(tree, exe, step, opts) {
|
|
142
|
+
// CrewAI step shapes vary across versions; attribute-detect rather than
|
|
143
|
+
// rely on a particular structure.
|
|
144
|
+
const tool = step?.tool ?? step?.toolName ?? null;
|
|
145
|
+
const toolInput = step?.toolInput ?? step?.tool_input ?? step?.input ?? null;
|
|
146
|
+
const isTool = Boolean(tool);
|
|
147
|
+
const kind = isTool ? spans_1.SPAN_KIND_TOOL : spans_1.SPAN_KIND_AGENT;
|
|
148
|
+
const name = isTool ? String(tool) : 'step';
|
|
149
|
+
if (isTool && opts.enforce !== false) {
|
|
150
|
+
try {
|
|
151
|
+
await exe.enforcePolicy({
|
|
152
|
+
agentId: opts.agentId,
|
|
153
|
+
input: toolInput !== null && toolInput !== undefined ? safeStr(toolInput) : `tool:${tool}`,
|
|
154
|
+
tools: [String(tool)],
|
|
155
|
+
});
|
|
156
|
+
}
|
|
157
|
+
catch (err) {
|
|
158
|
+
if (isEnforcementError(err))
|
|
159
|
+
throw err;
|
|
160
|
+
// eslint-disable-next-line no-console
|
|
161
|
+
console.warn('[execlave] enforcePolicy failed (non-fatal):', err);
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
const span = tree.start({
|
|
165
|
+
kind,
|
|
166
|
+
name,
|
|
167
|
+
agentId: opts.agentId,
|
|
168
|
+
sessionId: opts.sessionId,
|
|
169
|
+
userId: opts.userId,
|
|
170
|
+
metadata: { crewaiStep: true },
|
|
171
|
+
});
|
|
172
|
+
if (toolInput !== null && toolInput !== undefined) {
|
|
173
|
+
try {
|
|
174
|
+
span.setInput(toolInput);
|
|
175
|
+
}
|
|
176
|
+
catch {
|
|
177
|
+
/* noop */
|
|
178
|
+
}
|
|
179
|
+
}
|
|
180
|
+
const output = step?.output ?? step?.result ?? null;
|
|
181
|
+
if (output !== null && output !== undefined) {
|
|
182
|
+
try {
|
|
183
|
+
span.setOutput(output);
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
/* noop */
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
span.finish('success');
|
|
190
|
+
}
|
|
191
|
+
function recordTask(tree, taskOutput, opts) {
|
|
192
|
+
const description = taskOutput?.description ??
|
|
193
|
+
taskOutput?.task ??
|
|
194
|
+
taskOutput?.name ??
|
|
195
|
+
'task';
|
|
196
|
+
const span = tree.start({
|
|
197
|
+
kind: spans_1.SPAN_KIND_AGENT,
|
|
198
|
+
name: String(description).slice(0, 80),
|
|
199
|
+
agentId: opts.agentId,
|
|
200
|
+
sessionId: opts.sessionId,
|
|
201
|
+
userId: opts.userId,
|
|
202
|
+
metadata: { crewaiTask: true },
|
|
203
|
+
});
|
|
204
|
+
const raw = taskOutput?.raw ?? taskOutput?.output ?? taskOutput?.result ?? null;
|
|
205
|
+
if (raw !== null && raw !== undefined) {
|
|
206
|
+
try {
|
|
207
|
+
span.setOutput(raw);
|
|
208
|
+
}
|
|
209
|
+
catch {
|
|
210
|
+
/* noop */
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
span.finish('success');
|
|
214
|
+
}
|
|
215
|
+
function safeStr(value, limit = 4000) {
|
|
216
|
+
try {
|
|
217
|
+
const s = typeof value === 'string' ? value : JSON.stringify(value);
|
|
218
|
+
return s.slice(0, limit);
|
|
219
|
+
}
|
|
220
|
+
catch {
|
|
221
|
+
return String(value).slice(0, limit);
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
//# sourceMappingURL=crewai.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"crewai.js","sourceRoot":"","sources":["../../src/integrations/crewai.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Framework adapters for @execlave/sdk.
|
|
3
|
+
*
|
|
4
|
+
* Each integration is intentionally not re-exported from the SDK root
|
|
5
|
+
* so installing `@execlave/sdk` does not pull framework peerDeps.
|
|
6
|
+
* Import directly:
|
|
7
|
+
*
|
|
8
|
+
* import { ExeclaveCallbackHandler } from '@execlave/sdk/integrations/langchain';
|
|
9
|
+
*/
|
|
10
|
+
export { ExeclaveCallbackHandler } from './langchain';
|
|
11
|
+
export type { ExeclaveCallbackHandlerOptions } from './langchain';
|
|
12
|
+
export { ExeclaveTracingProcessor } from './openai-agents';
|
|
13
|
+
export type { ExeclaveTracingProcessorOptions } from './openai-agents';
|
|
14
|
+
export { instrumentCrew } from './crewai';
|
|
15
|
+
export type { InstrumentCrewOptions } from './crewai';
|
|
16
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* Framework adapters for @execlave/sdk.
|
|
4
|
+
*
|
|
5
|
+
* Each integration is intentionally not re-exported from the SDK root
|
|
6
|
+
* so installing `@execlave/sdk` does not pull framework peerDeps.
|
|
7
|
+
* Import directly:
|
|
8
|
+
*
|
|
9
|
+
* import { ExeclaveCallbackHandler } from '@execlave/sdk/integrations/langchain';
|
|
10
|
+
*/
|
|
11
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
12
|
+
exports.instrumentCrew = exports.ExeclaveTracingProcessor = exports.ExeclaveCallbackHandler = void 0;
|
|
13
|
+
var langchain_1 = require("./langchain");
|
|
14
|
+
Object.defineProperty(exports, "ExeclaveCallbackHandler", { enumerable: true, get: function () { return langchain_1.ExeclaveCallbackHandler; } });
|
|
15
|
+
var openai_agents_1 = require("./openai-agents");
|
|
16
|
+
Object.defineProperty(exports, "ExeclaveTracingProcessor", { enumerable: true, get: function () { return openai_agents_1.ExeclaveTracingProcessor; } });
|
|
17
|
+
var crewai_1 = require("./crewai");
|
|
18
|
+
Object.defineProperty(exports, "instrumentCrew", { enumerable: true, get: function () { return crewai_1.instrumentCrew; } });
|
|
19
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +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"}
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* LangChain JS auto-instrumentation.
|
|
3
|
+
*
|
|
4
|
+
* Usage:
|
|
5
|
+
*
|
|
6
|
+
* ```ts
|
|
7
|
+
* import { Execlave } from '@execlave/sdk';
|
|
8
|
+
* import { ExeclaveCallbackHandler } from '@execlave/sdk/integrations/langchain';
|
|
9
|
+
*
|
|
10
|
+
* const exe = new Execlave({ apiKey: '...' });
|
|
11
|
+
* const handler = new ExeclaveCallbackHandler(exe, { agentId: 'my-bot' });
|
|
12
|
+
* await chain.invoke({ q }, { callbacks: [handler] });
|
|
13
|
+
* ```
|
|
14
|
+
*
|
|
15
|
+
* Uses LangChain's `BaseCallbackHandler` (soft-imported so
|
|
16
|
+
* `@execlave/sdk` has no compile-time dependency on langchain).
|
|
17
|
+
* Consumers must install `@langchain/core` >= 0.3 themselves.
|
|
18
|
+
*
|
|
19
|
+
* Only TypeScript types are duck-typed here; at runtime the handler
|
|
20
|
+
* implements the method names LangChain expects.
|
|
21
|
+
*/
|
|
22
|
+
import type { Execlave } from '../client';
|
|
23
|
+
export interface ExeclaveCallbackHandlerOptions {
|
|
24
|
+
/** Agent id registered with Execlave. Required for enforcement. */
|
|
25
|
+
agentId: string;
|
|
26
|
+
/** Run `enforcePolicy` on chain/tool starts. Default true. */
|
|
27
|
+
enforce?: boolean;
|
|
28
|
+
sessionId?: string;
|
|
29
|
+
userId?: string;
|
|
30
|
+
}
|
|
31
|
+
/**
|
|
32
|
+
* LangChain callback handler that streams into Execlave.
|
|
33
|
+
*
|
|
34
|
+
* This class does not `extends BaseCallbackHandler` at compile time —
|
|
35
|
+
* we duck-type the interface so the SDK package does not require
|
|
36
|
+
* `@langchain/core` to be installed. When registered with
|
|
37
|
+
* `config.callbacks`, LangChain invokes matching methods by name.
|
|
38
|
+
*/
|
|
39
|
+
export declare class ExeclaveCallbackHandler {
|
|
40
|
+
readonly name = "ExeclaveCallbackHandler";
|
|
41
|
+
readonly raiseError = true;
|
|
42
|
+
readonly awaitHandlers = true;
|
|
43
|
+
private _exe;
|
|
44
|
+
private _agentId;
|
|
45
|
+
private _enforce;
|
|
46
|
+
private _sessionId?;
|
|
47
|
+
private _userId?;
|
|
48
|
+
private _tree;
|
|
49
|
+
private _spans;
|
|
50
|
+
constructor(exe: Execlave, opts: ExeclaveCallbackHandlerOptions);
|
|
51
|
+
private _open;
|
|
52
|
+
private _close;
|
|
53
|
+
private _enforceCall;
|
|
54
|
+
handleChainStart(chain: {
|
|
55
|
+
name?: string;
|
|
56
|
+
id?: string[];
|
|
57
|
+
} | undefined, inputs: Record<string, unknown>, runId: string, parentRunId?: string): Promise<void>;
|
|
58
|
+
handleChainEnd(outputs: unknown, runId: string): Promise<void>;
|
|
59
|
+
handleChainError(error: Error, runId: string): Promise<void>;
|
|
60
|
+
handleLLMStart(llm: {
|
|
61
|
+
name?: string;
|
|
62
|
+
id?: string[];
|
|
63
|
+
} | undefined, prompts: string[], runId: string, parentRunId?: string, extraParams?: Record<string, unknown>): Promise<void>;
|
|
64
|
+
handleChatModelStart(llm: {
|
|
65
|
+
name?: string;
|
|
66
|
+
id?: string[];
|
|
67
|
+
} | undefined, messages: unknown[], runId: string, parentRunId?: string, extraParams?: Record<string, unknown>): Promise<void>;
|
|
68
|
+
handleLLMEnd(output: any, runId: string): Promise<void>;
|
|
69
|
+
handleLLMError(error: Error, runId: string): Promise<void>;
|
|
70
|
+
handleToolStart(tool: {
|
|
71
|
+
name?: string;
|
|
72
|
+
id?: string[];
|
|
73
|
+
} | undefined, input: string, runId: string, parentRunId?: string): Promise<void>;
|
|
74
|
+
handleToolEnd(output: unknown, runId: string): Promise<void>;
|
|
75
|
+
handleToolError(error: Error, runId: string): Promise<void>;
|
|
76
|
+
handleAgentAction(action: {
|
|
77
|
+
tool?: string;
|
|
78
|
+
toolInput?: unknown;
|
|
79
|
+
}, runId: string, parentRunId?: string): Promise<void>;
|
|
80
|
+
handleAgentEnd(action: {
|
|
81
|
+
returnValues?: unknown;
|
|
82
|
+
log?: unknown;
|
|
83
|
+
}, runId: string): Promise<void>;
|
|
84
|
+
handleRetrieverStart(retriever: {
|
|
85
|
+
name?: string;
|
|
86
|
+
} | undefined, query: string, runId: string, parentRunId?: string): Promise<void>;
|
|
87
|
+
handleRetrieverEnd(documents: any[], runId: string): Promise<void>;
|
|
88
|
+
handleRetrieverError(error: Error, runId: string): Promise<void>;
|
|
89
|
+
}
|
|
90
|
+
//# sourceMappingURL=langchain.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.d.ts","sourceRoot":"","sources":["../../src/integrations/langchain.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;GAoBG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,WAAW,CAAC;AA4B1C,MAAM,WAAW,8BAA8B;IAC7C,mEAAmE;IACnE,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;;;;;;GAOG;AACH,qBAAa,uBAAuB;IAElC,QAAQ,CAAC,IAAI,6BAA6B;IAC1C,QAAQ,CAAC,UAAU,QAAQ;IAC3B,QAAQ,CAAC,aAAa,QAAQ;IAE9B,OAAO,CAAC,IAAI,CAAW;IACvB,OAAO,CAAC,QAAQ,CAAS;IACzB,OAAO,CAAC,QAAQ,CAAU;IAC1B,OAAO,CAAC,UAAU,CAAC,CAAS;IAC5B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,KAAK,CAAiC;IAC9C,OAAO,CAAC,MAAM,CAA2B;gBAE7B,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,8BAA8B;IAc/D,OAAO,CAAC,KAAK;IAuBb,OAAO,CAAC,MAAM;YAoBA,YAAY;IAkBpB,gBAAgB,CACpB,KAAK,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,EACnD,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IASV,cAAc,CAAC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI9D,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO5D,cAAc,CAClB,GAAG,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,EACjD,OAAO,EAAE,MAAM,EAAE,EACjB,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAQV,oBAAoB,CACxB,GAAG,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,EACjD,QAAQ,EAAE,OAAO,EAAE,EACnB,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,EACpB,WAAW,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACpC,OAAO,CAAC,IAAI,CAAC;IAQV,YAAY,CAAC,MAAM,EAAE,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAqBvD,cAAc,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO1D,eAAe,CACnB,IAAI,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,EAAE,CAAC,EAAE,MAAM,EAAE,CAAA;KAAE,GAAG,SAAS,EAClD,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAMV,aAAa,CAAC,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAI5D,eAAe,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO3D,iBAAiB,CAAC,MAAM,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAC;QAAC,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,KAAK,EAAE,MAAM,EAAE,WAAW,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAWrH,cAAc,CAAC,MAAM,EAAE;QAAE,YAAY,CAAC,EAAE,OAAO,CAAC;QAAC,GAAG,CAAC,EAAE,OAAO,CAAA;KAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/F,oBAAoB,CACxB,SAAS,EAAE;QAAE,IAAI,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,SAAS,EACxC,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,MAAM,EACb,WAAW,CAAC,EAAE,MAAM,GACnB,OAAO,CAAC,IAAI,CAAC;IAKV,kBAAkB,CAAC,SAAS,EAAE,GAAG,EAAE,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAalE,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;CAGvE"}
|
|
@@ -0,0 +1,240 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* LangChain JS auto-instrumentation.
|
|
4
|
+
*
|
|
5
|
+
* Usage:
|
|
6
|
+
*
|
|
7
|
+
* ```ts
|
|
8
|
+
* import { Execlave } from '@execlave/sdk';
|
|
9
|
+
* import { ExeclaveCallbackHandler } from '@execlave/sdk/integrations/langchain';
|
|
10
|
+
*
|
|
11
|
+
* const exe = new Execlave({ apiKey: '...' });
|
|
12
|
+
* const handler = new ExeclaveCallbackHandler(exe, { agentId: 'my-bot' });
|
|
13
|
+
* await chain.invoke({ q }, { callbacks: [handler] });
|
|
14
|
+
* ```
|
|
15
|
+
*
|
|
16
|
+
* Uses LangChain's `BaseCallbackHandler` (soft-imported so
|
|
17
|
+
* `@execlave/sdk` has no compile-time dependency on langchain).
|
|
18
|
+
* Consumers must install `@langchain/core` >= 0.3 themselves.
|
|
19
|
+
*
|
|
20
|
+
* Only TypeScript types are duck-typed here; at runtime the handler
|
|
21
|
+
* implements the method names LangChain expects.
|
|
22
|
+
*/
|
|
23
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
24
|
+
exports.ExeclaveCallbackHandler = void 0;
|
|
25
|
+
const errors_1 = require("../errors");
|
|
26
|
+
const spans_1 = require("../instrumentation/spans");
|
|
27
|
+
function isEnforcementError(err) {
|
|
28
|
+
return (err instanceof errors_1.PolicyBlockedError ||
|
|
29
|
+
err instanceof errors_1.PolicyDeniedError ||
|
|
30
|
+
err instanceof errors_1.ApprovalTimeoutError ||
|
|
31
|
+
err instanceof errors_1.EnforcementUnavailableError ||
|
|
32
|
+
err instanceof errors_1.AgentPausedError);
|
|
33
|
+
}
|
|
34
|
+
/**
|
|
35
|
+
* LangChain callback handler that streams into Execlave.
|
|
36
|
+
*
|
|
37
|
+
* This class does not `extends BaseCallbackHandler` at compile time —
|
|
38
|
+
* we duck-type the interface so the SDK package does not require
|
|
39
|
+
* `@langchain/core` to be installed. When registered with
|
|
40
|
+
* `config.callbacks`, LangChain invokes matching methods by name.
|
|
41
|
+
*/
|
|
42
|
+
class ExeclaveCallbackHandler {
|
|
43
|
+
constructor(exe, opts) {
|
|
44
|
+
// LangChain inspects these. `name` is used for trace metadata.
|
|
45
|
+
this.name = 'ExeclaveCallbackHandler';
|
|
46
|
+
this.raiseError = true;
|
|
47
|
+
this.awaitHandlers = true;
|
|
48
|
+
this._spans = new Map();
|
|
49
|
+
if (!exe)
|
|
50
|
+
throw new Error('ExeclaveCallbackHandler requires an Execlave client');
|
|
51
|
+
if (!opts?.agentId)
|
|
52
|
+
throw new Error('ExeclaveCallbackHandler requires agentId');
|
|
53
|
+
this._exe = exe;
|
|
54
|
+
this._agentId = opts.agentId;
|
|
55
|
+
this._enforce = opts.enforce !== false;
|
|
56
|
+
this._sessionId = opts.sessionId;
|
|
57
|
+
this._userId = opts.userId;
|
|
58
|
+
this._tree = (0, spans_1.getSpanTree)(exe);
|
|
59
|
+
}
|
|
60
|
+
// --------------------------------------------------------------
|
|
61
|
+
// Helpers
|
|
62
|
+
// --------------------------------------------------------------
|
|
63
|
+
_open(runId, parentRunId, kind, name, input, metadata) {
|
|
64
|
+
const parent = parentRunId ? this._spans.get(parentRunId) : null;
|
|
65
|
+
const span = this._tree.start({
|
|
66
|
+
kind,
|
|
67
|
+
name,
|
|
68
|
+
parent,
|
|
69
|
+
agentId: this._agentId,
|
|
70
|
+
sessionId: this._sessionId,
|
|
71
|
+
userId: this._userId,
|
|
72
|
+
metadata,
|
|
73
|
+
});
|
|
74
|
+
if (input !== undefined)
|
|
75
|
+
span.setInput(input);
|
|
76
|
+
this._spans.set(runId, span);
|
|
77
|
+
return span;
|
|
78
|
+
}
|
|
79
|
+
_close(runId, output, status = 'success', errorMessage, errorType) {
|
|
80
|
+
const span = this._spans.get(runId);
|
|
81
|
+
if (!span)
|
|
82
|
+
return;
|
|
83
|
+
this._spans.delete(runId);
|
|
84
|
+
if (output !== undefined) {
|
|
85
|
+
try {
|
|
86
|
+
span.setOutput(output);
|
|
87
|
+
}
|
|
88
|
+
catch {
|
|
89
|
+
/* noop */
|
|
90
|
+
}
|
|
91
|
+
}
|
|
92
|
+
span.finish(status, errorMessage, errorType);
|
|
93
|
+
}
|
|
94
|
+
async _enforceCall(input, tools) {
|
|
95
|
+
if (!this._enforce)
|
|
96
|
+
return;
|
|
97
|
+
try {
|
|
98
|
+
await this._exe.enforcePolicy({
|
|
99
|
+
agentId: this._agentId,
|
|
100
|
+
input,
|
|
101
|
+
tools,
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
catch (err) {
|
|
105
|
+
if (isEnforcementError(err))
|
|
106
|
+
throw err;
|
|
107
|
+
// eslint-disable-next-line no-console
|
|
108
|
+
console.warn('[execlave] enforcePolicy failed (non-fatal):', err);
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
// --------------------------------------------------------------
|
|
112
|
+
// Chain callbacks
|
|
113
|
+
// --------------------------------------------------------------
|
|
114
|
+
async handleChainStart(chain, inputs, runId, parentRunId) {
|
|
115
|
+
const name = chain?.name ?? chain?.id?.[chain.id.length - 1] ?? 'chain';
|
|
116
|
+
if (!parentRunId) {
|
|
117
|
+
const inputText = extractInputText(inputs);
|
|
118
|
+
if (inputText)
|
|
119
|
+
await this._enforceCall(inputText);
|
|
120
|
+
}
|
|
121
|
+
this._open(runId, parentRunId, spans_1.SPAN_KIND_CHAIN, name, inputs);
|
|
122
|
+
}
|
|
123
|
+
async handleChainEnd(outputs, runId) {
|
|
124
|
+
this._close(runId, outputs, 'success');
|
|
125
|
+
}
|
|
126
|
+
async handleChainError(error, runId) {
|
|
127
|
+
this._close(runId, undefined, 'error', error?.message, error?.name);
|
|
128
|
+
}
|
|
129
|
+
// --------------------------------------------------------------
|
|
130
|
+
// LLM callbacks
|
|
131
|
+
// --------------------------------------------------------------
|
|
132
|
+
async handleLLMStart(llm, prompts, runId, parentRunId, extraParams) {
|
|
133
|
+
const name = llm?.name ?? llm?.id?.[llm.id.length - 1] ?? 'llm';
|
|
134
|
+
const span = this._open(runId, parentRunId, spans_1.SPAN_KIND_LLM, name, prompts);
|
|
135
|
+
const invocation = (extraParams?.invocation_params ?? {});
|
|
136
|
+
const model = (invocation.model ?? invocation.model_name);
|
|
137
|
+
if (model)
|
|
138
|
+
span.setModel(model);
|
|
139
|
+
}
|
|
140
|
+
async handleChatModelStart(llm, messages, runId, parentRunId, extraParams) {
|
|
141
|
+
const name = llm?.name ?? llm?.id?.[llm.id.length - 1] ?? 'chat_model';
|
|
142
|
+
const span = this._open(runId, parentRunId, spans_1.SPAN_KIND_LLM, name, messages);
|
|
143
|
+
const invocation = (extraParams?.invocation_params ?? {});
|
|
144
|
+
const model = (invocation.model ?? invocation.model_name);
|
|
145
|
+
if (model)
|
|
146
|
+
span.setModel(model);
|
|
147
|
+
}
|
|
148
|
+
async handleLLMEnd(output, runId) {
|
|
149
|
+
const span = this._spans.get(runId);
|
|
150
|
+
if (span) {
|
|
151
|
+
const usage = output?.llmOutput?.tokenUsage ?? output?.llmOutput?.usage;
|
|
152
|
+
if (usage) {
|
|
153
|
+
const p = usage.promptTokens ?? usage.prompt_tokens ?? usage.input_tokens;
|
|
154
|
+
const c = usage.completionTokens ?? usage.completion_tokens ?? usage.output_tokens;
|
|
155
|
+
if (typeof p === 'number' && typeof c === 'number')
|
|
156
|
+
span.setTokens(p, c);
|
|
157
|
+
}
|
|
158
|
+
const texts = [];
|
|
159
|
+
for (const batch of output?.generations ?? []) {
|
|
160
|
+
for (const gen of batch ?? []) {
|
|
161
|
+
if (typeof gen.text === 'string')
|
|
162
|
+
texts.push(gen.text);
|
|
163
|
+
else if (gen.message?.content)
|
|
164
|
+
texts.push(String(gen.message.content));
|
|
165
|
+
}
|
|
166
|
+
}
|
|
167
|
+
if (texts.length)
|
|
168
|
+
span.setOutput(texts.length === 1 ? texts[0] : texts);
|
|
169
|
+
}
|
|
170
|
+
this._close(runId, undefined, 'success');
|
|
171
|
+
}
|
|
172
|
+
async handleLLMError(error, runId) {
|
|
173
|
+
this._close(runId, undefined, 'error', error?.message, error?.name);
|
|
174
|
+
}
|
|
175
|
+
// --------------------------------------------------------------
|
|
176
|
+
// Tool callbacks
|
|
177
|
+
// --------------------------------------------------------------
|
|
178
|
+
async handleToolStart(tool, input, runId, parentRunId) {
|
|
179
|
+
const toolName = tool?.name ?? tool?.id?.[tool.id.length - 1] ?? 'tool';
|
|
180
|
+
await this._enforceCall(input ?? `tool:${toolName}`, [toolName]);
|
|
181
|
+
this._open(runId, parentRunId, spans_1.SPAN_KIND_TOOL, toolName, input, { toolName });
|
|
182
|
+
}
|
|
183
|
+
async handleToolEnd(output, runId) {
|
|
184
|
+
this._close(runId, output, 'success');
|
|
185
|
+
}
|
|
186
|
+
async handleToolError(error, runId) {
|
|
187
|
+
this._close(runId, undefined, 'error', error?.message, error?.name);
|
|
188
|
+
}
|
|
189
|
+
// --------------------------------------------------------------
|
|
190
|
+
// Agent callbacks
|
|
191
|
+
// --------------------------------------------------------------
|
|
192
|
+
async handleAgentAction(action, runId, parentRunId) {
|
|
193
|
+
this._open(runId, parentRunId, spans_1.SPAN_KIND_AGENT, String(action?.tool ?? 'agent_action'), action?.toolInput, { agentAction: String(action?.tool ?? 'agent_action') });
|
|
194
|
+
}
|
|
195
|
+
async handleAgentEnd(action, runId) {
|
|
196
|
+
this._close(runId, action?.returnValues ?? action?.log, 'success');
|
|
197
|
+
}
|
|
198
|
+
// --------------------------------------------------------------
|
|
199
|
+
// Retriever callbacks
|
|
200
|
+
// --------------------------------------------------------------
|
|
201
|
+
async handleRetrieverStart(retriever, query, runId, parentRunId) {
|
|
202
|
+
const name = retriever?.name ?? 'retriever';
|
|
203
|
+
this._open(runId, parentRunId, spans_1.SPAN_KIND_RETRIEVER, name, query);
|
|
204
|
+
}
|
|
205
|
+
async handleRetrieverEnd(documents, runId) {
|
|
206
|
+
const span = this._spans.get(runId);
|
|
207
|
+
if (span && Array.isArray(documents)) {
|
|
208
|
+
span.addMetadata({
|
|
209
|
+
retrievedDocs: documents.map((d) => ({
|
|
210
|
+
id: d?.metadata?.id ?? d?.metadata?.source,
|
|
211
|
+
length: typeof d?.pageContent === 'string' ? d.pageContent.length : 0,
|
|
212
|
+
})),
|
|
213
|
+
});
|
|
214
|
+
}
|
|
215
|
+
this._close(runId, undefined, 'success');
|
|
216
|
+
}
|
|
217
|
+
async handleRetrieverError(error, runId) {
|
|
218
|
+
this._close(runId, undefined, 'error', error?.message, error?.name);
|
|
219
|
+
}
|
|
220
|
+
}
|
|
221
|
+
exports.ExeclaveCallbackHandler = ExeclaveCallbackHandler;
|
|
222
|
+
// ------------------------------------------------------------------
|
|
223
|
+
// Helpers
|
|
224
|
+
// ------------------------------------------------------------------
|
|
225
|
+
function extractInputText(inputs) {
|
|
226
|
+
if (!inputs || typeof inputs !== 'object')
|
|
227
|
+
return null;
|
|
228
|
+
for (const key of ['input', 'question', 'query', 'q', 'prompt', 'text']) {
|
|
229
|
+
const v = inputs[key];
|
|
230
|
+
if (typeof v === 'string' && v)
|
|
231
|
+
return v;
|
|
232
|
+
}
|
|
233
|
+
const parts = [];
|
|
234
|
+
for (const v of Object.values(inputs)) {
|
|
235
|
+
if (typeof v === 'string')
|
|
236
|
+
parts.push(v);
|
|
237
|
+
}
|
|
238
|
+
return parts.length ? parts.join(' ') : null;
|
|
239
|
+
}
|
|
240
|
+
//# sourceMappingURL=langchain.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"langchain.js","sourceRoot":"","sources":["../../src/integrations/langchain.ts"],"names":[],"mappings":"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"}
|