@inkeep/agents-sdk 0.38.3 → 0.39.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/README.md +154 -0
- package/dist/index.cjs +555 -1
- package/dist/index.d.cts +391 -1
- package/dist/index.d.ts +391 -1
- package/dist/index.js +545 -2
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -9,7 +9,12 @@ import * as yaml from 'js-yaml';
|
|
|
9
9
|
import ts from 'typescript';
|
|
10
10
|
import { z } from 'zod';
|
|
11
11
|
|
|
12
|
-
|
|
12
|
+
var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
|
|
13
|
+
get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
|
|
14
|
+
}) : x)(function(x) {
|
|
15
|
+
if (typeof require !== "undefined") return require.apply(this, arguments);
|
|
16
|
+
throw Error('Dynamic require of "' + x + '" is not supported');
|
|
17
|
+
});
|
|
13
18
|
|
|
14
19
|
// src/utils/generateIdFromName.ts
|
|
15
20
|
function generateIdFromName(name) {
|
|
@@ -3538,6 +3543,209 @@ function transfer(targetAgent, description, condition) {
|
|
|
3538
3543
|
return config;
|
|
3539
3544
|
}
|
|
3540
3545
|
|
|
3546
|
+
// src/credential-provider.ts
|
|
3547
|
+
var DEFAULT_CONFIG = {
|
|
3548
|
+
type: "memory",
|
|
3549
|
+
id: "memory-default"
|
|
3550
|
+
};
|
|
3551
|
+
var InMemoryStore = class {
|
|
3552
|
+
id;
|
|
3553
|
+
type = "memory";
|
|
3554
|
+
credentials = /* @__PURE__ */ new Map();
|
|
3555
|
+
constructor(id = "memory-default") {
|
|
3556
|
+
this.id = id;
|
|
3557
|
+
}
|
|
3558
|
+
async get(key) {
|
|
3559
|
+
const credential2 = this.credentials.get(key);
|
|
3560
|
+
if (!credential2) {
|
|
3561
|
+
const envValue = process.env[key];
|
|
3562
|
+
if (envValue) {
|
|
3563
|
+
this.credentials.set(key, envValue);
|
|
3564
|
+
return envValue;
|
|
3565
|
+
}
|
|
3566
|
+
return null;
|
|
3567
|
+
}
|
|
3568
|
+
return credential2;
|
|
3569
|
+
}
|
|
3570
|
+
async set(key, value, _metadata) {
|
|
3571
|
+
this.credentials.set(key, value);
|
|
3572
|
+
}
|
|
3573
|
+
async has(key) {
|
|
3574
|
+
return this.credentials.has(key) || !!process.env[key];
|
|
3575
|
+
}
|
|
3576
|
+
async delete(key) {
|
|
3577
|
+
return this.credentials.delete(key);
|
|
3578
|
+
}
|
|
3579
|
+
async checkAvailability() {
|
|
3580
|
+
return { available: true };
|
|
3581
|
+
}
|
|
3582
|
+
};
|
|
3583
|
+
var InkeepCredentialProvider = class {
|
|
3584
|
+
store;
|
|
3585
|
+
constructor(config = DEFAULT_CONFIG) {
|
|
3586
|
+
this.store = this.createStore(config);
|
|
3587
|
+
}
|
|
3588
|
+
/**
|
|
3589
|
+
* Create the appropriate store based on configuration
|
|
3590
|
+
*/
|
|
3591
|
+
createStore(config) {
|
|
3592
|
+
switch (config.type) {
|
|
3593
|
+
case "memory":
|
|
3594
|
+
return new InMemoryStore(config.id);
|
|
3595
|
+
case "keychain":
|
|
3596
|
+
return this.createKeychainStore(config);
|
|
3597
|
+
case "nango":
|
|
3598
|
+
return this.createNangoStore(config);
|
|
3599
|
+
case "custom":
|
|
3600
|
+
return config.store;
|
|
3601
|
+
default:
|
|
3602
|
+
throw new Error(`Unknown credential provider type: ${config.type}`);
|
|
3603
|
+
}
|
|
3604
|
+
}
|
|
3605
|
+
/**
|
|
3606
|
+
* Create keychain store with dynamic import
|
|
3607
|
+
*/
|
|
3608
|
+
createKeychainStore(config) {
|
|
3609
|
+
const storeId = config.id || "keychain-default";
|
|
3610
|
+
return {
|
|
3611
|
+
id: storeId,
|
|
3612
|
+
type: "keychain",
|
|
3613
|
+
get: async (key) => {
|
|
3614
|
+
const { createKeyChainStore } = await import('@inkeep/agents-core/credential-stores');
|
|
3615
|
+
const store = createKeyChainStore(storeId);
|
|
3616
|
+
return store.get(key);
|
|
3617
|
+
},
|
|
3618
|
+
set: async (key, value, metadata) => {
|
|
3619
|
+
const { createKeyChainStore } = await import('@inkeep/agents-core/credential-stores');
|
|
3620
|
+
const store = createKeyChainStore(storeId);
|
|
3621
|
+
return store.set(key, value, metadata);
|
|
3622
|
+
},
|
|
3623
|
+
has: async (key) => {
|
|
3624
|
+
const { createKeyChainStore } = await import('@inkeep/agents-core/credential-stores');
|
|
3625
|
+
const store = createKeyChainStore(storeId);
|
|
3626
|
+
return store.has(key);
|
|
3627
|
+
},
|
|
3628
|
+
delete: async (key) => {
|
|
3629
|
+
const { createKeyChainStore } = await import('@inkeep/agents-core/credential-stores');
|
|
3630
|
+
const store = createKeyChainStore(storeId);
|
|
3631
|
+
return store.delete(key);
|
|
3632
|
+
},
|
|
3633
|
+
checkAvailability: async () => {
|
|
3634
|
+
try {
|
|
3635
|
+
const { createKeyChainStore } = await import('@inkeep/agents-core/credential-stores');
|
|
3636
|
+
const store = createKeyChainStore(storeId);
|
|
3637
|
+
return store.checkAvailability();
|
|
3638
|
+
} catch {
|
|
3639
|
+
return {
|
|
3640
|
+
available: false,
|
|
3641
|
+
reason: "Keychain store requires keytar package to be installed"
|
|
3642
|
+
};
|
|
3643
|
+
}
|
|
3644
|
+
}
|
|
3645
|
+
};
|
|
3646
|
+
}
|
|
3647
|
+
/**
|
|
3648
|
+
* Create Nango store with dynamic import
|
|
3649
|
+
*/
|
|
3650
|
+
createNangoStore(config) {
|
|
3651
|
+
const storeId = config.id || "nango-default";
|
|
3652
|
+
const secretKey = config.secretKey;
|
|
3653
|
+
const apiUrl = config.apiUrl;
|
|
3654
|
+
return {
|
|
3655
|
+
id: storeId,
|
|
3656
|
+
type: "nango",
|
|
3657
|
+
get: async (key) => {
|
|
3658
|
+
const { createNangoCredentialStore } = await import('@inkeep/agents-core/credential-stores');
|
|
3659
|
+
const store = createNangoCredentialStore(storeId, { secretKey, apiUrl });
|
|
3660
|
+
return store.get(key);
|
|
3661
|
+
},
|
|
3662
|
+
set: async (key, value, metadata) => {
|
|
3663
|
+
const { createNangoCredentialStore } = await import('@inkeep/agents-core/credential-stores');
|
|
3664
|
+
const store = createNangoCredentialStore(storeId, { secretKey, apiUrl });
|
|
3665
|
+
return store.set(key, value, metadata);
|
|
3666
|
+
},
|
|
3667
|
+
has: async (key) => {
|
|
3668
|
+
const { createNangoCredentialStore } = await import('@inkeep/agents-core/credential-stores');
|
|
3669
|
+
const store = createNangoCredentialStore(storeId, { secretKey, apiUrl });
|
|
3670
|
+
return store.has(key);
|
|
3671
|
+
},
|
|
3672
|
+
delete: async (key) => {
|
|
3673
|
+
const { createNangoCredentialStore } = await import('@inkeep/agents-core/credential-stores');
|
|
3674
|
+
const store = createNangoCredentialStore(storeId, { secretKey, apiUrl });
|
|
3675
|
+
return store.delete(key);
|
|
3676
|
+
},
|
|
3677
|
+
checkAvailability: async () => {
|
|
3678
|
+
try {
|
|
3679
|
+
const { createNangoCredentialStore } = await import('@inkeep/agents-core/credential-stores');
|
|
3680
|
+
const store = createNangoCredentialStore(storeId, { secretKey, apiUrl });
|
|
3681
|
+
return store.checkAvailability();
|
|
3682
|
+
} catch (error) {
|
|
3683
|
+
return {
|
|
3684
|
+
available: false,
|
|
3685
|
+
reason: error instanceof Error ? error.message : "Nango store requires @nangohq/node package and NANGO_SECRET_KEY"
|
|
3686
|
+
};
|
|
3687
|
+
}
|
|
3688
|
+
}
|
|
3689
|
+
};
|
|
3690
|
+
}
|
|
3691
|
+
// Implement CredentialStore interface by delegating to internal store
|
|
3692
|
+
get id() {
|
|
3693
|
+
return this.store.id;
|
|
3694
|
+
}
|
|
3695
|
+
get type() {
|
|
3696
|
+
return this.store.type;
|
|
3697
|
+
}
|
|
3698
|
+
/**
|
|
3699
|
+
* Get a credential by key
|
|
3700
|
+
* @param key - The credential key
|
|
3701
|
+
* @returns The credential value or null if not found
|
|
3702
|
+
*/
|
|
3703
|
+
async get(key) {
|
|
3704
|
+
return this.store.get(key);
|
|
3705
|
+
}
|
|
3706
|
+
/**
|
|
3707
|
+
* Set a credential
|
|
3708
|
+
* @param key - The credential key
|
|
3709
|
+
* @param value - The credential value
|
|
3710
|
+
* @param metadata - Optional metadata
|
|
3711
|
+
*/
|
|
3712
|
+
async set(key, value, metadata) {
|
|
3713
|
+
return this.store.set(key, value, metadata);
|
|
3714
|
+
}
|
|
3715
|
+
/**
|
|
3716
|
+
* Check if a credential exists
|
|
3717
|
+
* @param key - The credential key
|
|
3718
|
+
* @returns True if the credential exists
|
|
3719
|
+
*/
|
|
3720
|
+
async has(key) {
|
|
3721
|
+
return this.store.has(key);
|
|
3722
|
+
}
|
|
3723
|
+
/**
|
|
3724
|
+
* Delete a credential
|
|
3725
|
+
* @param key - The credential key
|
|
3726
|
+
* @returns True if the credential was deleted
|
|
3727
|
+
*/
|
|
3728
|
+
async delete(key) {
|
|
3729
|
+
return this.store.delete(key);
|
|
3730
|
+
}
|
|
3731
|
+
/**
|
|
3732
|
+
* Check if the credential store is available and functional
|
|
3733
|
+
* @returns Availability status
|
|
3734
|
+
*/
|
|
3735
|
+
async checkAvailability() {
|
|
3736
|
+
return this.store.checkAvailability();
|
|
3737
|
+
}
|
|
3738
|
+
/**
|
|
3739
|
+
* Get the underlying store (for advanced use cases)
|
|
3740
|
+
*/
|
|
3741
|
+
getStore() {
|
|
3742
|
+
return this.store;
|
|
3743
|
+
}
|
|
3744
|
+
};
|
|
3745
|
+
function createCredentialProvider(config = DEFAULT_CONFIG) {
|
|
3746
|
+
return new InkeepCredentialProvider(config);
|
|
3747
|
+
}
|
|
3748
|
+
|
|
3541
3749
|
// src/credential-ref.ts
|
|
3542
3750
|
function credentialRef(id) {
|
|
3543
3751
|
return {
|
|
@@ -3964,4 +4172,339 @@ var run = Runner.run.bind(Runner);
|
|
|
3964
4172
|
var stream = Runner.stream.bind(Runner);
|
|
3965
4173
|
var raceAgents = Runner.raceAgents.bind(Runner);
|
|
3966
4174
|
|
|
3967
|
-
|
|
4175
|
+
// src/telemetry-provider.ts
|
|
4176
|
+
var SpanStatus = {
|
|
4177
|
+
OK: "ok",
|
|
4178
|
+
ERROR: "error",
|
|
4179
|
+
UNSET: "unset"
|
|
4180
|
+
};
|
|
4181
|
+
var createNoOpSpan = () => ({
|
|
4182
|
+
setAttributes: function() {
|
|
4183
|
+
return this;
|
|
4184
|
+
},
|
|
4185
|
+
setAttribute: function() {
|
|
4186
|
+
return this;
|
|
4187
|
+
},
|
|
4188
|
+
recordException: function() {
|
|
4189
|
+
return this;
|
|
4190
|
+
},
|
|
4191
|
+
setStatus: function() {
|
|
4192
|
+
return this;
|
|
4193
|
+
},
|
|
4194
|
+
addEvent: function() {
|
|
4195
|
+
return this;
|
|
4196
|
+
},
|
|
4197
|
+
end: () => {
|
|
4198
|
+
},
|
|
4199
|
+
isRecording: () => false,
|
|
4200
|
+
updateName: function() {
|
|
4201
|
+
return this;
|
|
4202
|
+
}
|
|
4203
|
+
});
|
|
4204
|
+
var createNoOpTracer = () => ({
|
|
4205
|
+
startActiveSpan(_name, arg1, arg2) {
|
|
4206
|
+
const fn = typeof arg1 === "function" ? arg1 : arg2;
|
|
4207
|
+
if (!fn) throw new Error("No callback function provided");
|
|
4208
|
+
return fn(createNoOpSpan());
|
|
4209
|
+
},
|
|
4210
|
+
startSpan(_name, _options) {
|
|
4211
|
+
return createNoOpSpan();
|
|
4212
|
+
}
|
|
4213
|
+
});
|
|
4214
|
+
var createNoOpLogger = () => ({
|
|
4215
|
+
debug: () => {
|
|
4216
|
+
},
|
|
4217
|
+
info: () => {
|
|
4218
|
+
},
|
|
4219
|
+
warn: () => {
|
|
4220
|
+
},
|
|
4221
|
+
error: () => {
|
|
4222
|
+
}
|
|
4223
|
+
});
|
|
4224
|
+
var createNoOpMetrics = () => ({
|
|
4225
|
+
increment: () => {
|
|
4226
|
+
},
|
|
4227
|
+
gauge: () => {
|
|
4228
|
+
},
|
|
4229
|
+
histogram: () => {
|
|
4230
|
+
}
|
|
4231
|
+
});
|
|
4232
|
+
var NoOpTelemetryProvider = class {
|
|
4233
|
+
getTracer(_name, _version) {
|
|
4234
|
+
return createNoOpTracer();
|
|
4235
|
+
}
|
|
4236
|
+
getLogger(_name) {
|
|
4237
|
+
return createNoOpLogger();
|
|
4238
|
+
}
|
|
4239
|
+
getMetrics(_name) {
|
|
4240
|
+
return createNoOpMetrics();
|
|
4241
|
+
}
|
|
4242
|
+
async shutdown() {
|
|
4243
|
+
}
|
|
4244
|
+
isEnabled() {
|
|
4245
|
+
return false;
|
|
4246
|
+
}
|
|
4247
|
+
};
|
|
4248
|
+
var ConsoleTelemetryProvider = class {
|
|
4249
|
+
serviceName;
|
|
4250
|
+
constructor(serviceName = "inkeep-agent") {
|
|
4251
|
+
this.serviceName = serviceName;
|
|
4252
|
+
}
|
|
4253
|
+
getTracer(name, _version) {
|
|
4254
|
+
const serviceName = this.serviceName;
|
|
4255
|
+
const createConsoleSpan = (spanName) => {
|
|
4256
|
+
const startTime = Date.now();
|
|
4257
|
+
const attributes = {};
|
|
4258
|
+
const events = [];
|
|
4259
|
+
return {
|
|
4260
|
+
setAttributes: function(attrs) {
|
|
4261
|
+
Object.assign(attributes, attrs);
|
|
4262
|
+
return this;
|
|
4263
|
+
},
|
|
4264
|
+
setAttribute: function(key, value) {
|
|
4265
|
+
attributes[key] = value;
|
|
4266
|
+
return this;
|
|
4267
|
+
},
|
|
4268
|
+
recordException: function(error) {
|
|
4269
|
+
console.error(`[${serviceName}:${name}] Exception in ${spanName}:`, error.message);
|
|
4270
|
+
return this;
|
|
4271
|
+
},
|
|
4272
|
+
setStatus: function(status, message) {
|
|
4273
|
+
if (status === SpanStatus.ERROR) {
|
|
4274
|
+
console.error(`[${serviceName}:${name}] ${spanName} ERROR:`, message);
|
|
4275
|
+
}
|
|
4276
|
+
return this;
|
|
4277
|
+
},
|
|
4278
|
+
addEvent: function(eventName, eventAttrs) {
|
|
4279
|
+
events.push({ name: eventName, attributes: eventAttrs });
|
|
4280
|
+
return this;
|
|
4281
|
+
},
|
|
4282
|
+
end: () => {
|
|
4283
|
+
const duration = Date.now() - startTime;
|
|
4284
|
+
console.log(`[${serviceName}:${name}] ${spanName} completed in ${duration}ms`, {
|
|
4285
|
+
attributes,
|
|
4286
|
+
events
|
|
4287
|
+
});
|
|
4288
|
+
},
|
|
4289
|
+
isRecording: () => true,
|
|
4290
|
+
updateName: function(newName) {
|
|
4291
|
+
console.log(`[${serviceName}:${name}] Span renamed: ${spanName} -> ${newName}`);
|
|
4292
|
+
return this;
|
|
4293
|
+
}
|
|
4294
|
+
};
|
|
4295
|
+
};
|
|
4296
|
+
return {
|
|
4297
|
+
startActiveSpan(spanName, arg1, arg2) {
|
|
4298
|
+
const fn = typeof arg1 === "function" ? arg1 : arg2;
|
|
4299
|
+
if (!fn) throw new Error("No callback function provided");
|
|
4300
|
+
const span = createConsoleSpan(spanName);
|
|
4301
|
+
try {
|
|
4302
|
+
return fn(span);
|
|
4303
|
+
} finally {
|
|
4304
|
+
span.end();
|
|
4305
|
+
}
|
|
4306
|
+
},
|
|
4307
|
+
startSpan(spanName, _options) {
|
|
4308
|
+
return createConsoleSpan(spanName);
|
|
4309
|
+
}
|
|
4310
|
+
};
|
|
4311
|
+
}
|
|
4312
|
+
getLogger(name) {
|
|
4313
|
+
const prefix = `[${this.serviceName}:${name}]`;
|
|
4314
|
+
return {
|
|
4315
|
+
debug: (message, context) => console.debug(prefix, message, context),
|
|
4316
|
+
info: (message, context) => console.info(prefix, message, context),
|
|
4317
|
+
warn: (message, context) => console.warn(prefix, message, context),
|
|
4318
|
+
error: (message, context) => console.error(prefix, message, context)
|
|
4319
|
+
};
|
|
4320
|
+
}
|
|
4321
|
+
getMetrics(name) {
|
|
4322
|
+
const prefix = `[${this.serviceName}:${name}]`;
|
|
4323
|
+
return {
|
|
4324
|
+
increment: (metricName, value = 1, attributes) => console.log(`${prefix} COUNTER ${metricName}: +${value}`, attributes),
|
|
4325
|
+
gauge: (metricName, value, attributes) => console.log(`${prefix} GAUGE ${metricName}: ${value}`, attributes),
|
|
4326
|
+
histogram: (metricName, value, attributes) => console.log(`${prefix} HISTOGRAM ${metricName}: ${value}`, attributes)
|
|
4327
|
+
};
|
|
4328
|
+
}
|
|
4329
|
+
async shutdown() {
|
|
4330
|
+
console.log(`[${this.serviceName}] Telemetry provider shutting down`);
|
|
4331
|
+
}
|
|
4332
|
+
isEnabled() {
|
|
4333
|
+
return true;
|
|
4334
|
+
}
|
|
4335
|
+
};
|
|
4336
|
+
var globalProvider = new NoOpTelemetryProvider();
|
|
4337
|
+
var InkeepTelemetryProvider = class {
|
|
4338
|
+
provider;
|
|
4339
|
+
constructor(config = {}) {
|
|
4340
|
+
if (config.provider) {
|
|
4341
|
+
this.provider = config.provider;
|
|
4342
|
+
} else if (config.enabled) {
|
|
4343
|
+
this.provider = new ConsoleTelemetryProvider(config.serviceName);
|
|
4344
|
+
} else {
|
|
4345
|
+
this.provider = new NoOpTelemetryProvider();
|
|
4346
|
+
}
|
|
4347
|
+
}
|
|
4348
|
+
/**
|
|
4349
|
+
* Get a tracer for creating spans
|
|
4350
|
+
*/
|
|
4351
|
+
getTracer(name, version) {
|
|
4352
|
+
return this.provider.getTracer(name, version);
|
|
4353
|
+
}
|
|
4354
|
+
/**
|
|
4355
|
+
* Get a logger for structured logging
|
|
4356
|
+
*/
|
|
4357
|
+
getLogger(name) {
|
|
4358
|
+
return this.provider.getLogger(name);
|
|
4359
|
+
}
|
|
4360
|
+
/**
|
|
4361
|
+
* Get metrics recorder
|
|
4362
|
+
*/
|
|
4363
|
+
getMetrics(name) {
|
|
4364
|
+
return this.provider.getMetrics(name);
|
|
4365
|
+
}
|
|
4366
|
+
/**
|
|
4367
|
+
* Check if telemetry is enabled
|
|
4368
|
+
*/
|
|
4369
|
+
isEnabled() {
|
|
4370
|
+
return this.provider.isEnabled();
|
|
4371
|
+
}
|
|
4372
|
+
/**
|
|
4373
|
+
* Shutdown the provider
|
|
4374
|
+
*/
|
|
4375
|
+
async shutdown() {
|
|
4376
|
+
return this.provider.shutdown();
|
|
4377
|
+
}
|
|
4378
|
+
/**
|
|
4379
|
+
* Get the underlying provider
|
|
4380
|
+
*/
|
|
4381
|
+
getProvider() {
|
|
4382
|
+
return this.provider;
|
|
4383
|
+
}
|
|
4384
|
+
/**
|
|
4385
|
+
* Set as the global telemetry provider
|
|
4386
|
+
*/
|
|
4387
|
+
setAsGlobal() {
|
|
4388
|
+
globalProvider = this.provider;
|
|
4389
|
+
}
|
|
4390
|
+
};
|
|
4391
|
+
function getGlobalTelemetryProvider() {
|
|
4392
|
+
return globalProvider;
|
|
4393
|
+
}
|
|
4394
|
+
function setGlobalTelemetryProvider(provider) {
|
|
4395
|
+
globalProvider = provider;
|
|
4396
|
+
}
|
|
4397
|
+
function createNoOpTelemetryProvider() {
|
|
4398
|
+
return new InkeepTelemetryProvider({ enabled: false });
|
|
4399
|
+
}
|
|
4400
|
+
function createConsoleTelemetryProvider(serviceName) {
|
|
4401
|
+
return new InkeepTelemetryProvider({
|
|
4402
|
+
enabled: true,
|
|
4403
|
+
serviceName,
|
|
4404
|
+
provider: new ConsoleTelemetryProvider(serviceName)
|
|
4405
|
+
});
|
|
4406
|
+
}
|
|
4407
|
+
function wrapOtelSpan(otelSpan) {
|
|
4408
|
+
return {
|
|
4409
|
+
setAttributes: function(attributes) {
|
|
4410
|
+
otelSpan.setAttributes(attributes);
|
|
4411
|
+
return this;
|
|
4412
|
+
},
|
|
4413
|
+
setAttribute: function(key, value) {
|
|
4414
|
+
otelSpan.setAttribute(key, value);
|
|
4415
|
+
return this;
|
|
4416
|
+
},
|
|
4417
|
+
recordException: function(error) {
|
|
4418
|
+
otelSpan.recordException(error);
|
|
4419
|
+
return this;
|
|
4420
|
+
},
|
|
4421
|
+
setStatus: function(status, message) {
|
|
4422
|
+
const statusCode = status === SpanStatus.ERROR ? 2 : status === SpanStatus.OK ? 1 : 0;
|
|
4423
|
+
otelSpan.setStatus({ code: statusCode, message });
|
|
4424
|
+
return this;
|
|
4425
|
+
},
|
|
4426
|
+
addEvent: function(name, attributes) {
|
|
4427
|
+
otelSpan.addEvent(name, attributes);
|
|
4428
|
+
return this;
|
|
4429
|
+
},
|
|
4430
|
+
end: () => otelSpan.end(),
|
|
4431
|
+
isRecording: () => otelSpan.isRecording(),
|
|
4432
|
+
updateName: function(name) {
|
|
4433
|
+
otelSpan.updateName(name);
|
|
4434
|
+
return this;
|
|
4435
|
+
}
|
|
4436
|
+
};
|
|
4437
|
+
}
|
|
4438
|
+
function isOpenTelemetryAvailable() {
|
|
4439
|
+
try {
|
|
4440
|
+
__require.resolve("@opentelemetry/api");
|
|
4441
|
+
return true;
|
|
4442
|
+
} catch {
|
|
4443
|
+
return false;
|
|
4444
|
+
}
|
|
4445
|
+
}
|
|
4446
|
+
async function loadOpenTelemetryModule() {
|
|
4447
|
+
const dynamicImport = new Function("specifier", "return import(specifier)");
|
|
4448
|
+
return dynamicImport("@opentelemetry/api");
|
|
4449
|
+
}
|
|
4450
|
+
async function createOpenTelemetryProvider(config) {
|
|
4451
|
+
if (!isOpenTelemetryAvailable()) {
|
|
4452
|
+
console.warn(
|
|
4453
|
+
"OpenTelemetry packages not installed. Install with: npm install @opentelemetry/api @opentelemetry/sdk-node"
|
|
4454
|
+
);
|
|
4455
|
+
return createNoOpTelemetryProvider();
|
|
4456
|
+
}
|
|
4457
|
+
try {
|
|
4458
|
+
const { trace } = await loadOpenTelemetryModule();
|
|
4459
|
+
const provider = {
|
|
4460
|
+
getTracer(name, version) {
|
|
4461
|
+
const otelTracer = trace.getTracer(name, version);
|
|
4462
|
+
return {
|
|
4463
|
+
startActiveSpan(spanName, arg1, arg2) {
|
|
4464
|
+
const fn = typeof arg1 === "function" ? arg1 : arg2;
|
|
4465
|
+
const options = typeof arg1 === "object" ? arg1 : void 0;
|
|
4466
|
+
if (!fn) throw new Error("No callback function provided");
|
|
4467
|
+
return otelTracer.startActiveSpan(
|
|
4468
|
+
spanName,
|
|
4469
|
+
options?.attributes ? { attributes: options.attributes } : {},
|
|
4470
|
+
(otelSpan) => {
|
|
4471
|
+
const span = wrapOtelSpan(otelSpan);
|
|
4472
|
+
return fn(span);
|
|
4473
|
+
}
|
|
4474
|
+
);
|
|
4475
|
+
},
|
|
4476
|
+
startSpan(spanName, options) {
|
|
4477
|
+
const otelSpan = otelTracer.startSpan(
|
|
4478
|
+
spanName,
|
|
4479
|
+
options?.attributes ? { attributes: options.attributes } : {}
|
|
4480
|
+
);
|
|
4481
|
+
return wrapOtelSpan(otelSpan);
|
|
4482
|
+
}
|
|
4483
|
+
};
|
|
4484
|
+
},
|
|
4485
|
+
getLogger(name) {
|
|
4486
|
+
return new ConsoleTelemetryProvider(config.serviceName).getLogger(name);
|
|
4487
|
+
},
|
|
4488
|
+
getMetrics(_name) {
|
|
4489
|
+
return createNoOpMetrics();
|
|
4490
|
+
},
|
|
4491
|
+
async shutdown() {
|
|
4492
|
+
},
|
|
4493
|
+
isEnabled() {
|
|
4494
|
+
return true;
|
|
4495
|
+
}
|
|
4496
|
+
};
|
|
4497
|
+
return new InkeepTelemetryProvider({
|
|
4498
|
+
enabled: true,
|
|
4499
|
+
provider
|
|
4500
|
+
});
|
|
4501
|
+
} catch (error) {
|
|
4502
|
+
console.warn(
|
|
4503
|
+
"Failed to initialize OpenTelemetry:",
|
|
4504
|
+
error instanceof Error ? error.message : "Unknown error"
|
|
4505
|
+
);
|
|
4506
|
+
return createNoOpTelemetryProvider();
|
|
4507
|
+
}
|
|
4508
|
+
}
|
|
4509
|
+
|
|
4510
|
+
export { ArtifactComponent, ConsoleTelemetryProvider, DataComponent, ExternalAgent, FunctionTool, InkeepCredentialProvider, InkeepTelemetryProvider, NoOpTelemetryProvider, Project, Runner, SpanStatus, StatusComponent, SubAgent, Tool, agent, agentMcp, artifactComponent, createConsoleTelemetryProvider, createCredentialProvider, createEnvironmentSettings, createFullProjectViaAPI, createNoOpTelemetryProvider, createOpenTelemetryProvider, credential, credentialRef, dataComponent, deleteFullProjectViaAPI, externalAgent, externalAgents, functionTool, getFullProjectViaAPI, getGlobalTelemetryProvider, isCredentialReference, mcpServer, mcpTool, project, raceAgents, registerEnvironmentSettings, run, setGlobalTelemetryProvider, statusComponent, stream, subAgent, transfer, updateFullProjectViaAPI };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@inkeep/agents-sdk",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.39.0",
|
|
4
4
|
"description": "Agents SDK for building and managing agents in the Inkeep Agent Framework",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
"nanoid": "^5.1.5",
|
|
13
13
|
"typescript": "^5.3.3",
|
|
14
14
|
"zod": "^4.1.11",
|
|
15
|
-
"@inkeep/agents-core": "^0.
|
|
15
|
+
"@inkeep/agents-core": "^0.39.0"
|
|
16
16
|
},
|
|
17
17
|
"devDependencies": {
|
|
18
18
|
"@types/js-yaml": "^4.0.9",
|