@inkeep/agents-sdk 0.39.4 → 0.40.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/_virtual/rolldown_runtime.js +7 -0
- package/dist/agent.d.ts +186 -0
- package/dist/agent.js +720 -0
- package/dist/agentFullClient.d.ts +22 -0
- package/dist/agentFullClient.js +120 -0
- package/dist/artifact-component.d.ts +34 -0
- package/dist/artifact-component.js +104 -0
- package/dist/builderFunctions.d.ts +283 -0
- package/dist/builderFunctions.js +327 -0
- package/dist/builderFunctionsExperimental.d.ts +24 -0
- package/dist/builderFunctionsExperimental.js +27 -0
- package/dist/builders.d.ts +111 -0
- package/dist/builders.js +52 -0
- package/dist/credential-provider.d.ts +176 -0
- package/dist/credential-provider.js +237 -0
- package/dist/credential-ref.d.ts +60 -0
- package/dist/credential-ref.js +33 -0
- package/dist/data-component.d.ts +39 -0
- package/dist/data-component.js +109 -0
- package/dist/environment-settings.d.ts +27 -0
- package/dist/environment-settings.js +41 -0
- package/dist/external-agent.d.ts +64 -0
- package/dist/external-agent.js +156 -0
- package/dist/function-tool.d.ts +37 -0
- package/dist/function-tool.js +66 -0
- package/dist/index.d.ts +19 -1825
- package/dist/index.js +19 -4058
- package/dist/module-hosted-tool-manager.d.ts +40 -0
- package/dist/module-hosted-tool-manager.js +359 -0
- package/dist/project.d.ts +214 -0
- package/dist/project.js +615 -0
- package/dist/projectFullClient.d.ts +23 -0
- package/dist/projectFullClient.js +162 -0
- package/dist/runner.d.ts +41 -0
- package/dist/runner.js +145 -0
- package/dist/status-component.d.ts +22 -0
- package/dist/status-component.js +36 -0
- package/dist/subAgent.d.ts +52 -0
- package/dist/subAgent.js +616 -0
- package/dist/telemetry-provider.d.ts +218 -0
- package/dist/telemetry-provider.js +390 -0
- package/dist/tool.d.ts +53 -0
- package/dist/tool.js +130 -0
- package/dist/types.d.ts +296 -0
- package/dist/types.js +39 -0
- package/dist/utils/generateIdFromName.d.ts +9 -0
- package/dist/utils/generateIdFromName.js +12 -0
- package/dist/utils/getFunctionToolDeps.d.ts +17 -0
- package/dist/utils/getFunctionToolDeps.js +131 -0
- package/dist/utils/tool-normalization.d.ts +42 -0
- package/dist/utils/tool-normalization.js +41 -0
- package/dist/utils/validateFunction.d.ts +10 -0
- package/dist/utils/validateFunction.js +13 -0
- package/package.json +11 -16
- package/dist/index.cjs +0 -4147
- package/dist/index.d.cts +0 -1825
- package/dist/index.d.cts.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/index.js.map +0 -1
|
@@ -0,0 +1,218 @@
|
|
|
1
|
+
//#region src/telemetry-provider.d.ts
|
|
2
|
+
/**
|
|
3
|
+
* TelemetryProvider - Abstraction for Telemetry/Observability
|
|
4
|
+
*
|
|
5
|
+
* This module provides a clean abstraction over telemetry implementations.
|
|
6
|
+
* Cloud customers can use this without needing to install or configure
|
|
7
|
+
* OpenTelemetry or Signoz directly.
|
|
8
|
+
*
|
|
9
|
+
* Telemetry is OPT-IN - if not configured, a no-op provider is used.
|
|
10
|
+
*
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* // Opt-in to telemetry with default console logger
|
|
14
|
+
* import { InkeepTelemetryProvider, createConsoleTelemetryProvider } from '@inkeep/agents-sdk'
|
|
15
|
+
*
|
|
16
|
+
* const telemetry = createConsoleTelemetryProvider()
|
|
17
|
+
*
|
|
18
|
+
* // Or with OpenTelemetry (requires @opentelemetry packages)
|
|
19
|
+
* const telemetry = createOpenTelemetryProvider({
|
|
20
|
+
* serviceName: 'my-agent',
|
|
21
|
+
* endpoint: 'http://localhost:4318'
|
|
22
|
+
* })
|
|
23
|
+
* ```
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Span status codes
|
|
27
|
+
*/
|
|
28
|
+
declare const SpanStatus: {
|
|
29
|
+
readonly OK: "ok";
|
|
30
|
+
readonly ERROR: "error";
|
|
31
|
+
readonly UNSET: "unset";
|
|
32
|
+
};
|
|
33
|
+
type SpanStatusType = (typeof SpanStatus)[keyof typeof SpanStatus];
|
|
34
|
+
/**
|
|
35
|
+
* Span interface for tracing
|
|
36
|
+
*/
|
|
37
|
+
interface TelemetrySpan {
|
|
38
|
+
/** Set span attributes */
|
|
39
|
+
setAttributes(attributes: Record<string, unknown>): TelemetrySpan;
|
|
40
|
+
/** Set a single attribute */
|
|
41
|
+
setAttribute(key: string, value: unknown): TelemetrySpan;
|
|
42
|
+
/** Record an exception */
|
|
43
|
+
recordException(error: Error): TelemetrySpan;
|
|
44
|
+
/** Set span status */
|
|
45
|
+
setStatus(status: SpanStatusType, message?: string): TelemetrySpan;
|
|
46
|
+
/** Add an event to the span */
|
|
47
|
+
addEvent(name: string, attributes?: Record<string, unknown>): TelemetrySpan;
|
|
48
|
+
/** End the span */
|
|
49
|
+
end(): void;
|
|
50
|
+
/** Check if span is recording */
|
|
51
|
+
isRecording(): boolean;
|
|
52
|
+
/** Update span name */
|
|
53
|
+
updateName(name: string): TelemetrySpan;
|
|
54
|
+
}
|
|
55
|
+
/**
|
|
56
|
+
* Span options
|
|
57
|
+
*/
|
|
58
|
+
interface SpanOptions {
|
|
59
|
+
/** Span attributes */
|
|
60
|
+
attributes?: Record<string, unknown>;
|
|
61
|
+
/** Parent span (for context propagation) */
|
|
62
|
+
parent?: TelemetrySpan;
|
|
63
|
+
}
|
|
64
|
+
/**
|
|
65
|
+
* Tracer interface for creating spans
|
|
66
|
+
*/
|
|
67
|
+
interface TelemetryTracer {
|
|
68
|
+
/** Start a new active span and execute callback */
|
|
69
|
+
startActiveSpan<T>(name: string, fn: (span: TelemetrySpan) => T): T;
|
|
70
|
+
startActiveSpan<T>(name: string, options: SpanOptions, fn: (span: TelemetrySpan) => T): T;
|
|
71
|
+
/** Start a new span without making it active */
|
|
72
|
+
startSpan(name: string, options?: SpanOptions): TelemetrySpan;
|
|
73
|
+
}
|
|
74
|
+
/**
|
|
75
|
+
* Logger interface for structured logging
|
|
76
|
+
*/
|
|
77
|
+
interface TelemetryLogger {
|
|
78
|
+
debug(message: string, context?: Record<string, unknown>): void;
|
|
79
|
+
info(message: string, context?: Record<string, unknown>): void;
|
|
80
|
+
warn(message: string, context?: Record<string, unknown>): void;
|
|
81
|
+
error(message: string, context?: Record<string, unknown>): void;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Metrics interface for recording measurements
|
|
85
|
+
*/
|
|
86
|
+
interface TelemetryMetrics {
|
|
87
|
+
/** Increment a counter */
|
|
88
|
+
increment(name: string, value?: number, attributes?: Record<string, unknown>): void;
|
|
89
|
+
/** Record a gauge value */
|
|
90
|
+
gauge(name: string, value: number, attributes?: Record<string, unknown>): void;
|
|
91
|
+
/** Record a histogram value */
|
|
92
|
+
histogram(name: string, value: number, attributes?: Record<string, unknown>): void;
|
|
93
|
+
}
|
|
94
|
+
/**
|
|
95
|
+
* Main telemetry provider interface
|
|
96
|
+
*/
|
|
97
|
+
interface TelemetryProvider {
|
|
98
|
+
/** Get a tracer for creating spans */
|
|
99
|
+
getTracer(name: string, version?: string): TelemetryTracer;
|
|
100
|
+
/** Get a logger for structured logging */
|
|
101
|
+
getLogger(name: string): TelemetryLogger;
|
|
102
|
+
/** Get metrics for recording measurements */
|
|
103
|
+
getMetrics(name: string): TelemetryMetrics;
|
|
104
|
+
/** Shutdown the telemetry provider */
|
|
105
|
+
shutdown(): Promise<void>;
|
|
106
|
+
/** Check if telemetry is enabled */
|
|
107
|
+
isEnabled(): boolean;
|
|
108
|
+
}
|
|
109
|
+
/**
|
|
110
|
+
* Configuration for telemetry provider
|
|
111
|
+
*/
|
|
112
|
+
interface TelemetryConfig {
|
|
113
|
+
/** Whether telemetry is enabled (default: false) */
|
|
114
|
+
enabled?: boolean;
|
|
115
|
+
/** Service name for identifying the source */
|
|
116
|
+
serviceName?: string;
|
|
117
|
+
/** Service version */
|
|
118
|
+
serviceVersion?: string;
|
|
119
|
+
/** Custom provider implementation */
|
|
120
|
+
provider?: TelemetryProvider;
|
|
121
|
+
}
|
|
122
|
+
/**
|
|
123
|
+
* No-op telemetry provider (default)
|
|
124
|
+
*/
|
|
125
|
+
declare class NoOpTelemetryProvider implements TelemetryProvider {
|
|
126
|
+
getTracer(_name: string, _version?: string): TelemetryTracer;
|
|
127
|
+
getLogger(_name: string): TelemetryLogger;
|
|
128
|
+
getMetrics(_name: string): TelemetryMetrics;
|
|
129
|
+
shutdown(): Promise<void>;
|
|
130
|
+
isEnabled(): boolean;
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Console-based telemetry provider for development/debugging
|
|
134
|
+
*/
|
|
135
|
+
declare class ConsoleTelemetryProvider implements TelemetryProvider {
|
|
136
|
+
private serviceName;
|
|
137
|
+
constructor(serviceName?: string);
|
|
138
|
+
getTracer(name: string, _version?: string): TelemetryTracer;
|
|
139
|
+
getLogger(name: string): TelemetryLogger;
|
|
140
|
+
getMetrics(name: string): TelemetryMetrics;
|
|
141
|
+
shutdown(): Promise<void>;
|
|
142
|
+
isEnabled(): boolean;
|
|
143
|
+
}
|
|
144
|
+
/**
|
|
145
|
+
* InkeepTelemetryProvider - Main telemetry management class
|
|
146
|
+
*
|
|
147
|
+
* Provides a unified interface for telemetry across the SDK.
|
|
148
|
+
* Telemetry is OPT-IN - by default, a no-op provider is used.
|
|
149
|
+
*/
|
|
150
|
+
declare class InkeepTelemetryProvider {
|
|
151
|
+
private provider;
|
|
152
|
+
constructor(config?: TelemetryConfig);
|
|
153
|
+
/**
|
|
154
|
+
* Get a tracer for creating spans
|
|
155
|
+
*/
|
|
156
|
+
getTracer(name: string, version?: string): TelemetryTracer;
|
|
157
|
+
/**
|
|
158
|
+
* Get a logger for structured logging
|
|
159
|
+
*/
|
|
160
|
+
getLogger(name: string): TelemetryLogger;
|
|
161
|
+
/**
|
|
162
|
+
* Get metrics recorder
|
|
163
|
+
*/
|
|
164
|
+
getMetrics(name: string): TelemetryMetrics;
|
|
165
|
+
/**
|
|
166
|
+
* Check if telemetry is enabled
|
|
167
|
+
*/
|
|
168
|
+
isEnabled(): boolean;
|
|
169
|
+
/**
|
|
170
|
+
* Shutdown the provider
|
|
171
|
+
*/
|
|
172
|
+
shutdown(): Promise<void>;
|
|
173
|
+
/**
|
|
174
|
+
* Get the underlying provider
|
|
175
|
+
*/
|
|
176
|
+
getProvider(): TelemetryProvider;
|
|
177
|
+
/**
|
|
178
|
+
* Set as the global telemetry provider
|
|
179
|
+
*/
|
|
180
|
+
setAsGlobal(): void;
|
|
181
|
+
}
|
|
182
|
+
/**
|
|
183
|
+
* Get the global telemetry provider
|
|
184
|
+
*/
|
|
185
|
+
declare function getGlobalTelemetryProvider(): TelemetryProvider;
|
|
186
|
+
/**
|
|
187
|
+
* Set the global telemetry provider
|
|
188
|
+
*/
|
|
189
|
+
declare function setGlobalTelemetryProvider(provider: TelemetryProvider): void;
|
|
190
|
+
/**
|
|
191
|
+
* Create a no-op telemetry provider (default, does nothing)
|
|
192
|
+
*/
|
|
193
|
+
declare function createNoOpTelemetryProvider(): InkeepTelemetryProvider;
|
|
194
|
+
/**
|
|
195
|
+
* Create a console-based telemetry provider for development
|
|
196
|
+
*/
|
|
197
|
+
declare function createConsoleTelemetryProvider(serviceName?: string): InkeepTelemetryProvider;
|
|
198
|
+
/**
|
|
199
|
+
* Configuration for OpenTelemetry provider
|
|
200
|
+
*/
|
|
201
|
+
interface OpenTelemetryConfig {
|
|
202
|
+
/** Service name */
|
|
203
|
+
serviceName: string;
|
|
204
|
+
/** Service version */
|
|
205
|
+
serviceVersion?: string;
|
|
206
|
+
/** OTLP endpoint URL */
|
|
207
|
+
endpoint?: string;
|
|
208
|
+
/** Additional resource attributes */
|
|
209
|
+
resourceAttributes?: Record<string, string>;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Create an OpenTelemetry-based provider
|
|
213
|
+
*
|
|
214
|
+
* Note: Requires @opentelemetry packages to be installed
|
|
215
|
+
*/
|
|
216
|
+
declare function createOpenTelemetryProvider(config: OpenTelemetryConfig): Promise<InkeepTelemetryProvider>;
|
|
217
|
+
//#endregion
|
|
218
|
+
export { ConsoleTelemetryProvider, InkeepTelemetryProvider, NoOpTelemetryProvider, OpenTelemetryConfig, SpanOptions, SpanStatus, SpanStatusType, TelemetryConfig, TelemetryLogger, TelemetryMetrics, TelemetryProvider, TelemetrySpan, TelemetryTracer, createConsoleTelemetryProvider, createNoOpTelemetryProvider, createOpenTelemetryProvider, getGlobalTelemetryProvider, setGlobalTelemetryProvider };
|
|
@@ -0,0 +1,390 @@
|
|
|
1
|
+
import { __require } from "./_virtual/rolldown_runtime.js";
|
|
2
|
+
|
|
3
|
+
//#region src/telemetry-provider.ts
|
|
4
|
+
/**
|
|
5
|
+
* TelemetryProvider - Abstraction for Telemetry/Observability
|
|
6
|
+
*
|
|
7
|
+
* This module provides a clean abstraction over telemetry implementations.
|
|
8
|
+
* Cloud customers can use this without needing to install or configure
|
|
9
|
+
* OpenTelemetry or Signoz directly.
|
|
10
|
+
*
|
|
11
|
+
* Telemetry is OPT-IN - if not configured, a no-op provider is used.
|
|
12
|
+
*
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* // Opt-in to telemetry with default console logger
|
|
16
|
+
* import { InkeepTelemetryProvider, createConsoleTelemetryProvider } from '@inkeep/agents-sdk'
|
|
17
|
+
*
|
|
18
|
+
* const telemetry = createConsoleTelemetryProvider()
|
|
19
|
+
*
|
|
20
|
+
* // Or with OpenTelemetry (requires @opentelemetry packages)
|
|
21
|
+
* const telemetry = createOpenTelemetryProvider({
|
|
22
|
+
* serviceName: 'my-agent',
|
|
23
|
+
* endpoint: 'http://localhost:4318'
|
|
24
|
+
* })
|
|
25
|
+
* ```
|
|
26
|
+
*/
|
|
27
|
+
/**
|
|
28
|
+
* Span status codes
|
|
29
|
+
*/
|
|
30
|
+
const SpanStatus = {
|
|
31
|
+
OK: "ok",
|
|
32
|
+
ERROR: "error",
|
|
33
|
+
UNSET: "unset"
|
|
34
|
+
};
|
|
35
|
+
/**
|
|
36
|
+
* No-op span implementation
|
|
37
|
+
*/
|
|
38
|
+
const createNoOpSpan = () => ({
|
|
39
|
+
setAttributes: function() {
|
|
40
|
+
return this;
|
|
41
|
+
},
|
|
42
|
+
setAttribute: function() {
|
|
43
|
+
return this;
|
|
44
|
+
},
|
|
45
|
+
recordException: function() {
|
|
46
|
+
return this;
|
|
47
|
+
},
|
|
48
|
+
setStatus: function() {
|
|
49
|
+
return this;
|
|
50
|
+
},
|
|
51
|
+
addEvent: function() {
|
|
52
|
+
return this;
|
|
53
|
+
},
|
|
54
|
+
end: () => {},
|
|
55
|
+
isRecording: () => false,
|
|
56
|
+
updateName: function() {
|
|
57
|
+
return this;
|
|
58
|
+
}
|
|
59
|
+
});
|
|
60
|
+
/**
|
|
61
|
+
* No-op tracer implementation
|
|
62
|
+
*/
|
|
63
|
+
const createNoOpTracer = () => ({
|
|
64
|
+
startActiveSpan(_name, arg1, arg2) {
|
|
65
|
+
const fn = typeof arg1 === "function" ? arg1 : arg2;
|
|
66
|
+
if (!fn) throw new Error("No callback function provided");
|
|
67
|
+
return fn(createNoOpSpan());
|
|
68
|
+
},
|
|
69
|
+
startSpan(_name, _options) {
|
|
70
|
+
return createNoOpSpan();
|
|
71
|
+
}
|
|
72
|
+
});
|
|
73
|
+
/**
|
|
74
|
+
* No-op logger implementation
|
|
75
|
+
*/
|
|
76
|
+
const createNoOpLogger = () => ({
|
|
77
|
+
debug: () => {},
|
|
78
|
+
info: () => {},
|
|
79
|
+
warn: () => {},
|
|
80
|
+
error: () => {}
|
|
81
|
+
});
|
|
82
|
+
/**
|
|
83
|
+
* No-op metrics implementation
|
|
84
|
+
*/
|
|
85
|
+
const createNoOpMetrics = () => ({
|
|
86
|
+
increment: () => {},
|
|
87
|
+
gauge: () => {},
|
|
88
|
+
histogram: () => {}
|
|
89
|
+
});
|
|
90
|
+
/**
|
|
91
|
+
* No-op telemetry provider (default)
|
|
92
|
+
*/
|
|
93
|
+
var NoOpTelemetryProvider = class {
|
|
94
|
+
getTracer(_name, _version) {
|
|
95
|
+
return createNoOpTracer();
|
|
96
|
+
}
|
|
97
|
+
getLogger(_name) {
|
|
98
|
+
return createNoOpLogger();
|
|
99
|
+
}
|
|
100
|
+
getMetrics(_name) {
|
|
101
|
+
return createNoOpMetrics();
|
|
102
|
+
}
|
|
103
|
+
async shutdown() {}
|
|
104
|
+
isEnabled() {
|
|
105
|
+
return false;
|
|
106
|
+
}
|
|
107
|
+
};
|
|
108
|
+
/**
|
|
109
|
+
* Console-based telemetry provider for development/debugging
|
|
110
|
+
*/
|
|
111
|
+
var ConsoleTelemetryProvider = class {
|
|
112
|
+
serviceName;
|
|
113
|
+
constructor(serviceName = "inkeep-agent") {
|
|
114
|
+
this.serviceName = serviceName;
|
|
115
|
+
}
|
|
116
|
+
getTracer(name, _version) {
|
|
117
|
+
const serviceName = this.serviceName;
|
|
118
|
+
const createConsoleSpan = (spanName) => {
|
|
119
|
+
const startTime = Date.now();
|
|
120
|
+
const attributes = {};
|
|
121
|
+
const events = [];
|
|
122
|
+
return {
|
|
123
|
+
setAttributes: function(attrs) {
|
|
124
|
+
Object.assign(attributes, attrs);
|
|
125
|
+
return this;
|
|
126
|
+
},
|
|
127
|
+
setAttribute: function(key, value) {
|
|
128
|
+
attributes[key] = value;
|
|
129
|
+
return this;
|
|
130
|
+
},
|
|
131
|
+
recordException: function(error) {
|
|
132
|
+
console.error(`[${serviceName}:${name}] Exception in ${spanName}:`, error.message);
|
|
133
|
+
return this;
|
|
134
|
+
},
|
|
135
|
+
setStatus: function(status, message) {
|
|
136
|
+
if (status === SpanStatus.ERROR) console.error(`[${serviceName}:${name}] ${spanName} ERROR:`, message);
|
|
137
|
+
return this;
|
|
138
|
+
},
|
|
139
|
+
addEvent: function(eventName, eventAttrs) {
|
|
140
|
+
events.push({
|
|
141
|
+
name: eventName,
|
|
142
|
+
attributes: eventAttrs
|
|
143
|
+
});
|
|
144
|
+
return this;
|
|
145
|
+
},
|
|
146
|
+
end: () => {
|
|
147
|
+
const duration = Date.now() - startTime;
|
|
148
|
+
console.log(`[${serviceName}:${name}] ${spanName} completed in ${duration}ms`, {
|
|
149
|
+
attributes,
|
|
150
|
+
events
|
|
151
|
+
});
|
|
152
|
+
},
|
|
153
|
+
isRecording: () => true,
|
|
154
|
+
updateName: function(newName) {
|
|
155
|
+
console.log(`[${serviceName}:${name}] Span renamed: ${spanName} -> ${newName}`);
|
|
156
|
+
return this;
|
|
157
|
+
}
|
|
158
|
+
};
|
|
159
|
+
};
|
|
160
|
+
return {
|
|
161
|
+
startActiveSpan(spanName, arg1, arg2) {
|
|
162
|
+
const fn = typeof arg1 === "function" ? arg1 : arg2;
|
|
163
|
+
if (!fn) throw new Error("No callback function provided");
|
|
164
|
+
const span = createConsoleSpan(spanName);
|
|
165
|
+
try {
|
|
166
|
+
return fn(span);
|
|
167
|
+
} finally {
|
|
168
|
+
span.end();
|
|
169
|
+
}
|
|
170
|
+
},
|
|
171
|
+
startSpan(spanName, _options) {
|
|
172
|
+
return createConsoleSpan(spanName);
|
|
173
|
+
}
|
|
174
|
+
};
|
|
175
|
+
}
|
|
176
|
+
getLogger(name) {
|
|
177
|
+
const prefix = `[${this.serviceName}:${name}]`;
|
|
178
|
+
return {
|
|
179
|
+
debug: (message, context) => console.debug(prefix, message, context),
|
|
180
|
+
info: (message, context) => console.info(prefix, message, context),
|
|
181
|
+
warn: (message, context) => console.warn(prefix, message, context),
|
|
182
|
+
error: (message, context) => console.error(prefix, message, context)
|
|
183
|
+
};
|
|
184
|
+
}
|
|
185
|
+
getMetrics(name) {
|
|
186
|
+
const prefix = `[${this.serviceName}:${name}]`;
|
|
187
|
+
return {
|
|
188
|
+
increment: (metricName, value = 1, attributes) => console.log(`${prefix} COUNTER ${metricName}: +${value}`, attributes),
|
|
189
|
+
gauge: (metricName, value, attributes) => console.log(`${prefix} GAUGE ${metricName}: ${value}`, attributes),
|
|
190
|
+
histogram: (metricName, value, attributes) => console.log(`${prefix} HISTOGRAM ${metricName}: ${value}`, attributes)
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
async shutdown() {
|
|
194
|
+
console.log(`[${this.serviceName}] Telemetry provider shutting down`);
|
|
195
|
+
}
|
|
196
|
+
isEnabled() {
|
|
197
|
+
return true;
|
|
198
|
+
}
|
|
199
|
+
};
|
|
200
|
+
let globalProvider = new NoOpTelemetryProvider();
|
|
201
|
+
/**
|
|
202
|
+
* InkeepTelemetryProvider - Main telemetry management class
|
|
203
|
+
*
|
|
204
|
+
* Provides a unified interface for telemetry across the SDK.
|
|
205
|
+
* Telemetry is OPT-IN - by default, a no-op provider is used.
|
|
206
|
+
*/
|
|
207
|
+
var InkeepTelemetryProvider = class {
|
|
208
|
+
provider;
|
|
209
|
+
constructor(config = {}) {
|
|
210
|
+
if (config.provider) this.provider = config.provider;
|
|
211
|
+
else if (config.enabled) this.provider = new ConsoleTelemetryProvider(config.serviceName);
|
|
212
|
+
else this.provider = new NoOpTelemetryProvider();
|
|
213
|
+
}
|
|
214
|
+
/**
|
|
215
|
+
* Get a tracer for creating spans
|
|
216
|
+
*/
|
|
217
|
+
getTracer(name, version) {
|
|
218
|
+
return this.provider.getTracer(name, version);
|
|
219
|
+
}
|
|
220
|
+
/**
|
|
221
|
+
* Get a logger for structured logging
|
|
222
|
+
*/
|
|
223
|
+
getLogger(name) {
|
|
224
|
+
return this.provider.getLogger(name);
|
|
225
|
+
}
|
|
226
|
+
/**
|
|
227
|
+
* Get metrics recorder
|
|
228
|
+
*/
|
|
229
|
+
getMetrics(name) {
|
|
230
|
+
return this.provider.getMetrics(name);
|
|
231
|
+
}
|
|
232
|
+
/**
|
|
233
|
+
* Check if telemetry is enabled
|
|
234
|
+
*/
|
|
235
|
+
isEnabled() {
|
|
236
|
+
return this.provider.isEnabled();
|
|
237
|
+
}
|
|
238
|
+
/**
|
|
239
|
+
* Shutdown the provider
|
|
240
|
+
*/
|
|
241
|
+
async shutdown() {
|
|
242
|
+
return this.provider.shutdown();
|
|
243
|
+
}
|
|
244
|
+
/**
|
|
245
|
+
* Get the underlying provider
|
|
246
|
+
*/
|
|
247
|
+
getProvider() {
|
|
248
|
+
return this.provider;
|
|
249
|
+
}
|
|
250
|
+
/**
|
|
251
|
+
* Set as the global telemetry provider
|
|
252
|
+
*/
|
|
253
|
+
setAsGlobal() {
|
|
254
|
+
globalProvider = this.provider;
|
|
255
|
+
}
|
|
256
|
+
};
|
|
257
|
+
/**
|
|
258
|
+
* Get the global telemetry provider
|
|
259
|
+
*/
|
|
260
|
+
function getGlobalTelemetryProvider() {
|
|
261
|
+
return globalProvider;
|
|
262
|
+
}
|
|
263
|
+
/**
|
|
264
|
+
* Set the global telemetry provider
|
|
265
|
+
*/
|
|
266
|
+
function setGlobalTelemetryProvider(provider) {
|
|
267
|
+
globalProvider = provider;
|
|
268
|
+
}
|
|
269
|
+
/**
|
|
270
|
+
* Create a no-op telemetry provider (default, does nothing)
|
|
271
|
+
*/
|
|
272
|
+
function createNoOpTelemetryProvider() {
|
|
273
|
+
return new InkeepTelemetryProvider({ enabled: false });
|
|
274
|
+
}
|
|
275
|
+
/**
|
|
276
|
+
* Create a console-based telemetry provider for development
|
|
277
|
+
*/
|
|
278
|
+
function createConsoleTelemetryProvider(serviceName) {
|
|
279
|
+
return new InkeepTelemetryProvider({
|
|
280
|
+
enabled: true,
|
|
281
|
+
serviceName,
|
|
282
|
+
provider: new ConsoleTelemetryProvider(serviceName)
|
|
283
|
+
});
|
|
284
|
+
}
|
|
285
|
+
/**
|
|
286
|
+
* Wrap an OpenTelemetry span in our TelemetrySpan interface
|
|
287
|
+
*/
|
|
288
|
+
function wrapOtelSpan(otelSpan) {
|
|
289
|
+
return {
|
|
290
|
+
setAttributes: function(attributes) {
|
|
291
|
+
otelSpan.setAttributes(attributes);
|
|
292
|
+
return this;
|
|
293
|
+
},
|
|
294
|
+
setAttribute: function(key, value) {
|
|
295
|
+
otelSpan.setAttribute(key, value);
|
|
296
|
+
return this;
|
|
297
|
+
},
|
|
298
|
+
recordException: function(error) {
|
|
299
|
+
otelSpan.recordException(error);
|
|
300
|
+
return this;
|
|
301
|
+
},
|
|
302
|
+
setStatus: function(status, message) {
|
|
303
|
+
const statusCode = status === SpanStatus.ERROR ? 2 : status === SpanStatus.OK ? 1 : 0;
|
|
304
|
+
otelSpan.setStatus({
|
|
305
|
+
code: statusCode,
|
|
306
|
+
message
|
|
307
|
+
});
|
|
308
|
+
return this;
|
|
309
|
+
},
|
|
310
|
+
addEvent: function(name, attributes) {
|
|
311
|
+
otelSpan.addEvent(name, attributes);
|
|
312
|
+
return this;
|
|
313
|
+
},
|
|
314
|
+
end: () => otelSpan.end(),
|
|
315
|
+
isRecording: () => otelSpan.isRecording(),
|
|
316
|
+
updateName: function(name) {
|
|
317
|
+
otelSpan.updateName(name);
|
|
318
|
+
return this;
|
|
319
|
+
}
|
|
320
|
+
};
|
|
321
|
+
}
|
|
322
|
+
/**
|
|
323
|
+
* Check if OpenTelemetry is available
|
|
324
|
+
*/
|
|
325
|
+
function isOpenTelemetryAvailable() {
|
|
326
|
+
try {
|
|
327
|
+
/** @lintignore Skip report as unlisted dependencies by Knip */
|
|
328
|
+
__require.resolve("@opentelemetry/api");
|
|
329
|
+
return true;
|
|
330
|
+
} catch {
|
|
331
|
+
return false;
|
|
332
|
+
}
|
|
333
|
+
}
|
|
334
|
+
/**
|
|
335
|
+
* Load OpenTelemetry module dynamically
|
|
336
|
+
*/
|
|
337
|
+
async function loadOpenTelemetryModule() {
|
|
338
|
+
return new Function("specifier", "return import(specifier)")("@opentelemetry/api");
|
|
339
|
+
}
|
|
340
|
+
/**
|
|
341
|
+
* Create an OpenTelemetry-based provider
|
|
342
|
+
*
|
|
343
|
+
* Note: Requires @opentelemetry packages to be installed
|
|
344
|
+
*/
|
|
345
|
+
async function createOpenTelemetryProvider(config) {
|
|
346
|
+
if (!isOpenTelemetryAvailable()) {
|
|
347
|
+
console.warn("OpenTelemetry packages not installed. Install with: npm install @opentelemetry/api @opentelemetry/sdk-node");
|
|
348
|
+
return createNoOpTelemetryProvider();
|
|
349
|
+
}
|
|
350
|
+
try {
|
|
351
|
+
const { trace } = await loadOpenTelemetryModule();
|
|
352
|
+
return new InkeepTelemetryProvider({
|
|
353
|
+
enabled: true,
|
|
354
|
+
provider: {
|
|
355
|
+
getTracer(name, version) {
|
|
356
|
+
const otelTracer = trace.getTracer(name, version);
|
|
357
|
+
return {
|
|
358
|
+
startActiveSpan(spanName, arg1, arg2) {
|
|
359
|
+
const fn = typeof arg1 === "function" ? arg1 : arg2;
|
|
360
|
+
const options = typeof arg1 === "object" ? arg1 : void 0;
|
|
361
|
+
if (!fn) throw new Error("No callback function provided");
|
|
362
|
+
return otelTracer.startActiveSpan(spanName, options?.attributes ? { attributes: options.attributes } : {}, (otelSpan) => {
|
|
363
|
+
return fn(wrapOtelSpan(otelSpan));
|
|
364
|
+
});
|
|
365
|
+
},
|
|
366
|
+
startSpan(spanName, options) {
|
|
367
|
+
return wrapOtelSpan(otelTracer.startSpan(spanName, options?.attributes ? { attributes: options.attributes } : {}));
|
|
368
|
+
}
|
|
369
|
+
};
|
|
370
|
+
},
|
|
371
|
+
getLogger(name) {
|
|
372
|
+
return new ConsoleTelemetryProvider(config.serviceName).getLogger(name);
|
|
373
|
+
},
|
|
374
|
+
getMetrics(_name) {
|
|
375
|
+
return createNoOpMetrics();
|
|
376
|
+
},
|
|
377
|
+
async shutdown() {},
|
|
378
|
+
isEnabled() {
|
|
379
|
+
return true;
|
|
380
|
+
}
|
|
381
|
+
}
|
|
382
|
+
});
|
|
383
|
+
} catch (error) {
|
|
384
|
+
console.warn("Failed to initialize OpenTelemetry:", error instanceof Error ? error.message : "Unknown error");
|
|
385
|
+
return createNoOpTelemetryProvider();
|
|
386
|
+
}
|
|
387
|
+
}
|
|
388
|
+
|
|
389
|
+
//#endregion
|
|
390
|
+
export { ConsoleTelemetryProvider, InkeepTelemetryProvider, NoOpTelemetryProvider, SpanStatus, createConsoleTelemetryProvider, createNoOpTelemetryProvider, createOpenTelemetryProvider, getGlobalTelemetryProvider, setGlobalTelemetryProvider };
|
package/dist/tool.d.ts
ADDED
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { AgentMcpConfig, AgentMcpConfigInput } from "./builders.js";
|
|
2
|
+
import { MCPToolConfig } from "@inkeep/agents-core";
|
|
3
|
+
|
|
4
|
+
//#region src/tool.d.ts
|
|
5
|
+
interface ToolInterface {
|
|
6
|
+
config: MCPToolConfig;
|
|
7
|
+
init(): Promise<void>;
|
|
8
|
+
getId(): string;
|
|
9
|
+
getName(): string;
|
|
10
|
+
getDescription(): string;
|
|
11
|
+
getServerUrl(): string;
|
|
12
|
+
getActiveTools(): string[] | undefined;
|
|
13
|
+
getCredentialReferenceId(): string | null | undefined;
|
|
14
|
+
with(config: AgentMcpConfigInput): AgentMcpConfig;
|
|
15
|
+
}
|
|
16
|
+
declare class Tool implements ToolInterface {
|
|
17
|
+
config: MCPToolConfig;
|
|
18
|
+
private baseURL;
|
|
19
|
+
private tenantId;
|
|
20
|
+
private initialized;
|
|
21
|
+
private projectId;
|
|
22
|
+
constructor(config: Omit<MCPToolConfig, 'tenantId' | 'projectId'>);
|
|
23
|
+
setContext(tenantId: string, projectId: string, baseURL?: string): void;
|
|
24
|
+
getId(): string;
|
|
25
|
+
getName(): string;
|
|
26
|
+
getDescription(): string;
|
|
27
|
+
getServerUrl(): string;
|
|
28
|
+
getActiveTools(): string[] | undefined;
|
|
29
|
+
getCredentialReferenceId(): string | null | undefined;
|
|
30
|
+
init(options?: {
|
|
31
|
+
skipDatabaseRegistration?: boolean;
|
|
32
|
+
}): Promise<void>;
|
|
33
|
+
private upsertTool;
|
|
34
|
+
/**
|
|
35
|
+
* Creates a new AgentMcpConfig with the given configuration.
|
|
36
|
+
*
|
|
37
|
+
* @param config - The configuration for the AgentMcpConfig
|
|
38
|
+
* @returns A new AgentMcpConfig
|
|
39
|
+
*
|
|
40
|
+
* example:
|
|
41
|
+
* ```typescript
|
|
42
|
+
* const tool = new Tool({
|
|
43
|
+
* id: 'tool-id',
|
|
44
|
+
* name: 'Tool Name',
|
|
45
|
+
* serverUrl: 'https://example.com/mcp',
|
|
46
|
+
* });
|
|
47
|
+
* const agentMcpConfig = tool.with({ selectedTools: ['tool-1', 'tool-2'], headers: { 'Authorization': 'Bearer token' } });
|
|
48
|
+
* ```
|
|
49
|
+
*/
|
|
50
|
+
with(config: AgentMcpConfigInput): AgentMcpConfig;
|
|
51
|
+
}
|
|
52
|
+
//#endregion
|
|
53
|
+
export { Tool, ToolInterface };
|