@inkeep/agents-sdk 0.38.3 → 0.39.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.cjs CHANGED
@@ -36,7 +36,12 @@ var lockfile__namespace = /*#__PURE__*/_interopNamespace(lockfile);
36
36
  var yaml__namespace = /*#__PURE__*/_interopNamespace(yaml);
37
37
  var ts__default = /*#__PURE__*/_interopDefault(ts);
38
38
 
39
- // src/index.ts
39
+ var __require = /* @__PURE__ */ ((x) => typeof require !== "undefined" ? require : typeof Proxy !== "undefined" ? new Proxy(x, {
40
+ get: (a, b) => (typeof require !== "undefined" ? require : a)[b]
41
+ }) : x)(function(x) {
42
+ if (typeof require !== "undefined") return require.apply(this, arguments);
43
+ throw Error('Dynamic require of "' + x + '" is not supported');
44
+ });
40
45
 
41
46
  // src/utils/generateIdFromName.ts
42
47
  function generateIdFromName(name) {
@@ -3565,6 +3570,209 @@ function transfer(targetAgent, description, condition) {
3565
3570
  return config;
3566
3571
  }
3567
3572
 
3573
+ // src/credential-provider.ts
3574
+ var DEFAULT_CONFIG = {
3575
+ type: "memory",
3576
+ id: "memory-default"
3577
+ };
3578
+ var InMemoryStore = class {
3579
+ id;
3580
+ type = "memory";
3581
+ credentials = /* @__PURE__ */ new Map();
3582
+ constructor(id = "memory-default") {
3583
+ this.id = id;
3584
+ }
3585
+ async get(key) {
3586
+ const credential2 = this.credentials.get(key);
3587
+ if (!credential2) {
3588
+ const envValue = process.env[key];
3589
+ if (envValue) {
3590
+ this.credentials.set(key, envValue);
3591
+ return envValue;
3592
+ }
3593
+ return null;
3594
+ }
3595
+ return credential2;
3596
+ }
3597
+ async set(key, value, _metadata) {
3598
+ this.credentials.set(key, value);
3599
+ }
3600
+ async has(key) {
3601
+ return this.credentials.has(key) || !!process.env[key];
3602
+ }
3603
+ async delete(key) {
3604
+ return this.credentials.delete(key);
3605
+ }
3606
+ async checkAvailability() {
3607
+ return { available: true };
3608
+ }
3609
+ };
3610
+ var InkeepCredentialProvider = class {
3611
+ store;
3612
+ constructor(config = DEFAULT_CONFIG) {
3613
+ this.store = this.createStore(config);
3614
+ }
3615
+ /**
3616
+ * Create the appropriate store based on configuration
3617
+ */
3618
+ createStore(config) {
3619
+ switch (config.type) {
3620
+ case "memory":
3621
+ return new InMemoryStore(config.id);
3622
+ case "keychain":
3623
+ return this.createKeychainStore(config);
3624
+ case "nango":
3625
+ return this.createNangoStore(config);
3626
+ case "custom":
3627
+ return config.store;
3628
+ default:
3629
+ throw new Error(`Unknown credential provider type: ${config.type}`);
3630
+ }
3631
+ }
3632
+ /**
3633
+ * Create keychain store with dynamic import
3634
+ */
3635
+ createKeychainStore(config) {
3636
+ const storeId = config.id || "keychain-default";
3637
+ return {
3638
+ id: storeId,
3639
+ type: "keychain",
3640
+ get: async (key) => {
3641
+ const { createKeyChainStore } = await import('@inkeep/agents-core/credential-stores');
3642
+ const store = createKeyChainStore(storeId);
3643
+ return store.get(key);
3644
+ },
3645
+ set: async (key, value, metadata) => {
3646
+ const { createKeyChainStore } = await import('@inkeep/agents-core/credential-stores');
3647
+ const store = createKeyChainStore(storeId);
3648
+ return store.set(key, value, metadata);
3649
+ },
3650
+ has: async (key) => {
3651
+ const { createKeyChainStore } = await import('@inkeep/agents-core/credential-stores');
3652
+ const store = createKeyChainStore(storeId);
3653
+ return store.has(key);
3654
+ },
3655
+ delete: async (key) => {
3656
+ const { createKeyChainStore } = await import('@inkeep/agents-core/credential-stores');
3657
+ const store = createKeyChainStore(storeId);
3658
+ return store.delete(key);
3659
+ },
3660
+ checkAvailability: async () => {
3661
+ try {
3662
+ const { createKeyChainStore } = await import('@inkeep/agents-core/credential-stores');
3663
+ const store = createKeyChainStore(storeId);
3664
+ return store.checkAvailability();
3665
+ } catch {
3666
+ return {
3667
+ available: false,
3668
+ reason: "Keychain store requires keytar package to be installed"
3669
+ };
3670
+ }
3671
+ }
3672
+ };
3673
+ }
3674
+ /**
3675
+ * Create Nango store with dynamic import
3676
+ */
3677
+ createNangoStore(config) {
3678
+ const storeId = config.id || "nango-default";
3679
+ const secretKey = config.secretKey;
3680
+ const apiUrl = config.apiUrl;
3681
+ return {
3682
+ id: storeId,
3683
+ type: "nango",
3684
+ get: async (key) => {
3685
+ const { createNangoCredentialStore } = await import('@inkeep/agents-core/credential-stores');
3686
+ const store = createNangoCredentialStore(storeId, { secretKey, apiUrl });
3687
+ return store.get(key);
3688
+ },
3689
+ set: async (key, value, metadata) => {
3690
+ const { createNangoCredentialStore } = await import('@inkeep/agents-core/credential-stores');
3691
+ const store = createNangoCredentialStore(storeId, { secretKey, apiUrl });
3692
+ return store.set(key, value, metadata);
3693
+ },
3694
+ has: async (key) => {
3695
+ const { createNangoCredentialStore } = await import('@inkeep/agents-core/credential-stores');
3696
+ const store = createNangoCredentialStore(storeId, { secretKey, apiUrl });
3697
+ return store.has(key);
3698
+ },
3699
+ delete: async (key) => {
3700
+ const { createNangoCredentialStore } = await import('@inkeep/agents-core/credential-stores');
3701
+ const store = createNangoCredentialStore(storeId, { secretKey, apiUrl });
3702
+ return store.delete(key);
3703
+ },
3704
+ checkAvailability: async () => {
3705
+ try {
3706
+ const { createNangoCredentialStore } = await import('@inkeep/agents-core/credential-stores');
3707
+ const store = createNangoCredentialStore(storeId, { secretKey, apiUrl });
3708
+ return store.checkAvailability();
3709
+ } catch (error) {
3710
+ return {
3711
+ available: false,
3712
+ reason: error instanceof Error ? error.message : "Nango store requires @nangohq/node package and NANGO_SECRET_KEY"
3713
+ };
3714
+ }
3715
+ }
3716
+ };
3717
+ }
3718
+ // Implement CredentialStore interface by delegating to internal store
3719
+ get id() {
3720
+ return this.store.id;
3721
+ }
3722
+ get type() {
3723
+ return this.store.type;
3724
+ }
3725
+ /**
3726
+ * Get a credential by key
3727
+ * @param key - The credential key
3728
+ * @returns The credential value or null if not found
3729
+ */
3730
+ async get(key) {
3731
+ return this.store.get(key);
3732
+ }
3733
+ /**
3734
+ * Set a credential
3735
+ * @param key - The credential key
3736
+ * @param value - The credential value
3737
+ * @param metadata - Optional metadata
3738
+ */
3739
+ async set(key, value, metadata) {
3740
+ return this.store.set(key, value, metadata);
3741
+ }
3742
+ /**
3743
+ * Check if a credential exists
3744
+ * @param key - The credential key
3745
+ * @returns True if the credential exists
3746
+ */
3747
+ async has(key) {
3748
+ return this.store.has(key);
3749
+ }
3750
+ /**
3751
+ * Delete a credential
3752
+ * @param key - The credential key
3753
+ * @returns True if the credential was deleted
3754
+ */
3755
+ async delete(key) {
3756
+ return this.store.delete(key);
3757
+ }
3758
+ /**
3759
+ * Check if the credential store is available and functional
3760
+ * @returns Availability status
3761
+ */
3762
+ async checkAvailability() {
3763
+ return this.store.checkAvailability();
3764
+ }
3765
+ /**
3766
+ * Get the underlying store (for advanced use cases)
3767
+ */
3768
+ getStore() {
3769
+ return this.store;
3770
+ }
3771
+ };
3772
+ function createCredentialProvider(config = DEFAULT_CONFIG) {
3773
+ return new InkeepCredentialProvider(config);
3774
+ }
3775
+
3568
3776
  // src/credential-ref.ts
3569
3777
  function credentialRef(id) {
3570
3778
  return {
@@ -3991,6 +4199,341 @@ var run = Runner.run.bind(Runner);
3991
4199
  var stream = Runner.stream.bind(Runner);
3992
4200
  var raceAgents = Runner.raceAgents.bind(Runner);
3993
4201
 
4202
+ // src/telemetry-provider.ts
4203
+ var SpanStatus = {
4204
+ OK: "ok",
4205
+ ERROR: "error",
4206
+ UNSET: "unset"
4207
+ };
4208
+ var createNoOpSpan = () => ({
4209
+ setAttributes: function() {
4210
+ return this;
4211
+ },
4212
+ setAttribute: function() {
4213
+ return this;
4214
+ },
4215
+ recordException: function() {
4216
+ return this;
4217
+ },
4218
+ setStatus: function() {
4219
+ return this;
4220
+ },
4221
+ addEvent: function() {
4222
+ return this;
4223
+ },
4224
+ end: () => {
4225
+ },
4226
+ isRecording: () => false,
4227
+ updateName: function() {
4228
+ return this;
4229
+ }
4230
+ });
4231
+ var createNoOpTracer = () => ({
4232
+ startActiveSpan(_name, arg1, arg2) {
4233
+ const fn = typeof arg1 === "function" ? arg1 : arg2;
4234
+ if (!fn) throw new Error("No callback function provided");
4235
+ return fn(createNoOpSpan());
4236
+ },
4237
+ startSpan(_name, _options) {
4238
+ return createNoOpSpan();
4239
+ }
4240
+ });
4241
+ var createNoOpLogger = () => ({
4242
+ debug: () => {
4243
+ },
4244
+ info: () => {
4245
+ },
4246
+ warn: () => {
4247
+ },
4248
+ error: () => {
4249
+ }
4250
+ });
4251
+ var createNoOpMetrics = () => ({
4252
+ increment: () => {
4253
+ },
4254
+ gauge: () => {
4255
+ },
4256
+ histogram: () => {
4257
+ }
4258
+ });
4259
+ var NoOpTelemetryProvider = class {
4260
+ getTracer(_name, _version) {
4261
+ return createNoOpTracer();
4262
+ }
4263
+ getLogger(_name) {
4264
+ return createNoOpLogger();
4265
+ }
4266
+ getMetrics(_name) {
4267
+ return createNoOpMetrics();
4268
+ }
4269
+ async shutdown() {
4270
+ }
4271
+ isEnabled() {
4272
+ return false;
4273
+ }
4274
+ };
4275
+ var ConsoleTelemetryProvider = class {
4276
+ serviceName;
4277
+ constructor(serviceName = "inkeep-agent") {
4278
+ this.serviceName = serviceName;
4279
+ }
4280
+ getTracer(name, _version) {
4281
+ const serviceName = this.serviceName;
4282
+ const createConsoleSpan = (spanName) => {
4283
+ const startTime = Date.now();
4284
+ const attributes = {};
4285
+ const events = [];
4286
+ return {
4287
+ setAttributes: function(attrs) {
4288
+ Object.assign(attributes, attrs);
4289
+ return this;
4290
+ },
4291
+ setAttribute: function(key, value) {
4292
+ attributes[key] = value;
4293
+ return this;
4294
+ },
4295
+ recordException: function(error) {
4296
+ console.error(`[${serviceName}:${name}] Exception in ${spanName}:`, error.message);
4297
+ return this;
4298
+ },
4299
+ setStatus: function(status, message) {
4300
+ if (status === SpanStatus.ERROR) {
4301
+ console.error(`[${serviceName}:${name}] ${spanName} ERROR:`, message);
4302
+ }
4303
+ return this;
4304
+ },
4305
+ addEvent: function(eventName, eventAttrs) {
4306
+ events.push({ name: eventName, attributes: eventAttrs });
4307
+ return this;
4308
+ },
4309
+ end: () => {
4310
+ const duration = Date.now() - startTime;
4311
+ console.log(`[${serviceName}:${name}] ${spanName} completed in ${duration}ms`, {
4312
+ attributes,
4313
+ events
4314
+ });
4315
+ },
4316
+ isRecording: () => true,
4317
+ updateName: function(newName) {
4318
+ console.log(`[${serviceName}:${name}] Span renamed: ${spanName} -> ${newName}`);
4319
+ return this;
4320
+ }
4321
+ };
4322
+ };
4323
+ return {
4324
+ startActiveSpan(spanName, arg1, arg2) {
4325
+ const fn = typeof arg1 === "function" ? arg1 : arg2;
4326
+ if (!fn) throw new Error("No callback function provided");
4327
+ const span = createConsoleSpan(spanName);
4328
+ try {
4329
+ return fn(span);
4330
+ } finally {
4331
+ span.end();
4332
+ }
4333
+ },
4334
+ startSpan(spanName, _options) {
4335
+ return createConsoleSpan(spanName);
4336
+ }
4337
+ };
4338
+ }
4339
+ getLogger(name) {
4340
+ const prefix = `[${this.serviceName}:${name}]`;
4341
+ return {
4342
+ debug: (message, context) => console.debug(prefix, message, context),
4343
+ info: (message, context) => console.info(prefix, message, context),
4344
+ warn: (message, context) => console.warn(prefix, message, context),
4345
+ error: (message, context) => console.error(prefix, message, context)
4346
+ };
4347
+ }
4348
+ getMetrics(name) {
4349
+ const prefix = `[${this.serviceName}:${name}]`;
4350
+ return {
4351
+ increment: (metricName, value = 1, attributes) => console.log(`${prefix} COUNTER ${metricName}: +${value}`, attributes),
4352
+ gauge: (metricName, value, attributes) => console.log(`${prefix} GAUGE ${metricName}: ${value}`, attributes),
4353
+ histogram: (metricName, value, attributes) => console.log(`${prefix} HISTOGRAM ${metricName}: ${value}`, attributes)
4354
+ };
4355
+ }
4356
+ async shutdown() {
4357
+ console.log(`[${this.serviceName}] Telemetry provider shutting down`);
4358
+ }
4359
+ isEnabled() {
4360
+ return true;
4361
+ }
4362
+ };
4363
+ var globalProvider = new NoOpTelemetryProvider();
4364
+ var InkeepTelemetryProvider = class {
4365
+ provider;
4366
+ constructor(config = {}) {
4367
+ if (config.provider) {
4368
+ this.provider = config.provider;
4369
+ } else if (config.enabled) {
4370
+ this.provider = new ConsoleTelemetryProvider(config.serviceName);
4371
+ } else {
4372
+ this.provider = new NoOpTelemetryProvider();
4373
+ }
4374
+ }
4375
+ /**
4376
+ * Get a tracer for creating spans
4377
+ */
4378
+ getTracer(name, version) {
4379
+ return this.provider.getTracer(name, version);
4380
+ }
4381
+ /**
4382
+ * Get a logger for structured logging
4383
+ */
4384
+ getLogger(name) {
4385
+ return this.provider.getLogger(name);
4386
+ }
4387
+ /**
4388
+ * Get metrics recorder
4389
+ */
4390
+ getMetrics(name) {
4391
+ return this.provider.getMetrics(name);
4392
+ }
4393
+ /**
4394
+ * Check if telemetry is enabled
4395
+ */
4396
+ isEnabled() {
4397
+ return this.provider.isEnabled();
4398
+ }
4399
+ /**
4400
+ * Shutdown the provider
4401
+ */
4402
+ async shutdown() {
4403
+ return this.provider.shutdown();
4404
+ }
4405
+ /**
4406
+ * Get the underlying provider
4407
+ */
4408
+ getProvider() {
4409
+ return this.provider;
4410
+ }
4411
+ /**
4412
+ * Set as the global telemetry provider
4413
+ */
4414
+ setAsGlobal() {
4415
+ globalProvider = this.provider;
4416
+ }
4417
+ };
4418
+ function getGlobalTelemetryProvider() {
4419
+ return globalProvider;
4420
+ }
4421
+ function setGlobalTelemetryProvider(provider) {
4422
+ globalProvider = provider;
4423
+ }
4424
+ function createNoOpTelemetryProvider() {
4425
+ return new InkeepTelemetryProvider({ enabled: false });
4426
+ }
4427
+ function createConsoleTelemetryProvider(serviceName) {
4428
+ return new InkeepTelemetryProvider({
4429
+ enabled: true,
4430
+ serviceName,
4431
+ provider: new ConsoleTelemetryProvider(serviceName)
4432
+ });
4433
+ }
4434
+ function wrapOtelSpan(otelSpan) {
4435
+ return {
4436
+ setAttributes: function(attributes) {
4437
+ otelSpan.setAttributes(attributes);
4438
+ return this;
4439
+ },
4440
+ setAttribute: function(key, value) {
4441
+ otelSpan.setAttribute(key, value);
4442
+ return this;
4443
+ },
4444
+ recordException: function(error) {
4445
+ otelSpan.recordException(error);
4446
+ return this;
4447
+ },
4448
+ setStatus: function(status, message) {
4449
+ const statusCode = status === SpanStatus.ERROR ? 2 : status === SpanStatus.OK ? 1 : 0;
4450
+ otelSpan.setStatus({ code: statusCode, message });
4451
+ return this;
4452
+ },
4453
+ addEvent: function(name, attributes) {
4454
+ otelSpan.addEvent(name, attributes);
4455
+ return this;
4456
+ },
4457
+ end: () => otelSpan.end(),
4458
+ isRecording: () => otelSpan.isRecording(),
4459
+ updateName: function(name) {
4460
+ otelSpan.updateName(name);
4461
+ return this;
4462
+ }
4463
+ };
4464
+ }
4465
+ function isOpenTelemetryAvailable() {
4466
+ try {
4467
+ __require.resolve("@opentelemetry/api");
4468
+ return true;
4469
+ } catch {
4470
+ return false;
4471
+ }
4472
+ }
4473
+ async function loadOpenTelemetryModule() {
4474
+ const dynamicImport = new Function("specifier", "return import(specifier)");
4475
+ return dynamicImport("@opentelemetry/api");
4476
+ }
4477
+ async function createOpenTelemetryProvider(config) {
4478
+ if (!isOpenTelemetryAvailable()) {
4479
+ console.warn(
4480
+ "OpenTelemetry packages not installed. Install with: npm install @opentelemetry/api @opentelemetry/sdk-node"
4481
+ );
4482
+ return createNoOpTelemetryProvider();
4483
+ }
4484
+ try {
4485
+ const { trace } = await loadOpenTelemetryModule();
4486
+ const provider = {
4487
+ getTracer(name, version) {
4488
+ const otelTracer = trace.getTracer(name, version);
4489
+ return {
4490
+ startActiveSpan(spanName, arg1, arg2) {
4491
+ const fn = typeof arg1 === "function" ? arg1 : arg2;
4492
+ const options = typeof arg1 === "object" ? arg1 : void 0;
4493
+ if (!fn) throw new Error("No callback function provided");
4494
+ return otelTracer.startActiveSpan(
4495
+ spanName,
4496
+ options?.attributes ? { attributes: options.attributes } : {},
4497
+ (otelSpan) => {
4498
+ const span = wrapOtelSpan(otelSpan);
4499
+ return fn(span);
4500
+ }
4501
+ );
4502
+ },
4503
+ startSpan(spanName, options) {
4504
+ const otelSpan = otelTracer.startSpan(
4505
+ spanName,
4506
+ options?.attributes ? { attributes: options.attributes } : {}
4507
+ );
4508
+ return wrapOtelSpan(otelSpan);
4509
+ }
4510
+ };
4511
+ },
4512
+ getLogger(name) {
4513
+ return new ConsoleTelemetryProvider(config.serviceName).getLogger(name);
4514
+ },
4515
+ getMetrics(_name) {
4516
+ return createNoOpMetrics();
4517
+ },
4518
+ async shutdown() {
4519
+ },
4520
+ isEnabled() {
4521
+ return true;
4522
+ }
4523
+ };
4524
+ return new InkeepTelemetryProvider({
4525
+ enabled: true,
4526
+ provider
4527
+ });
4528
+ } catch (error) {
4529
+ console.warn(
4530
+ "Failed to initialize OpenTelemetry:",
4531
+ error instanceof Error ? error.message : "Unknown error"
4532
+ );
4533
+ return createNoOpTelemetryProvider();
4534
+ }
4535
+ }
4536
+
3994
4537
  Object.defineProperty(exports, "ANTHROPIC_MODELS", {
3995
4538
  enumerable: true,
3996
4539
  get: function () { return agentsCore.ANTHROPIC_MODELS; }
@@ -4004,19 +4547,28 @@ Object.defineProperty(exports, "OPENAI_MODELS", {
4004
4547
  get: function () { return agentsCore.OPENAI_MODELS; }
4005
4548
  });
4006
4549
  exports.ArtifactComponent = ArtifactComponent;
4550
+ exports.ConsoleTelemetryProvider = ConsoleTelemetryProvider;
4007
4551
  exports.DataComponent = DataComponent;
4008
4552
  exports.ExternalAgent = ExternalAgent;
4009
4553
  exports.FunctionTool = FunctionTool;
4554
+ exports.InkeepCredentialProvider = InkeepCredentialProvider;
4555
+ exports.InkeepTelemetryProvider = InkeepTelemetryProvider;
4556
+ exports.NoOpTelemetryProvider = NoOpTelemetryProvider;
4010
4557
  exports.Project = Project;
4011
4558
  exports.Runner = Runner;
4559
+ exports.SpanStatus = SpanStatus;
4012
4560
  exports.StatusComponent = StatusComponent;
4013
4561
  exports.SubAgent = SubAgent;
4014
4562
  exports.Tool = Tool;
4015
4563
  exports.agent = agent;
4016
4564
  exports.agentMcp = agentMcp;
4017
4565
  exports.artifactComponent = artifactComponent;
4566
+ exports.createConsoleTelemetryProvider = createConsoleTelemetryProvider;
4567
+ exports.createCredentialProvider = createCredentialProvider;
4018
4568
  exports.createEnvironmentSettings = createEnvironmentSettings;
4019
4569
  exports.createFullProjectViaAPI = createFullProjectViaAPI;
4570
+ exports.createNoOpTelemetryProvider = createNoOpTelemetryProvider;
4571
+ exports.createOpenTelemetryProvider = createOpenTelemetryProvider;
4020
4572
  exports.credential = credential;
4021
4573
  exports.credentialRef = credentialRef;
4022
4574
  exports.dataComponent = dataComponent;
@@ -4025,6 +4577,7 @@ exports.externalAgent = externalAgent;
4025
4577
  exports.externalAgents = externalAgents;
4026
4578
  exports.functionTool = functionTool;
4027
4579
  exports.getFullProjectViaAPI = getFullProjectViaAPI;
4580
+ exports.getGlobalTelemetryProvider = getGlobalTelemetryProvider;
4028
4581
  exports.isCredentialReference = isCredentialReference;
4029
4582
  exports.mcpServer = mcpServer;
4030
4583
  exports.mcpTool = mcpTool;
@@ -4032,6 +4585,7 @@ exports.project = project;
4032
4585
  exports.raceAgents = raceAgents;
4033
4586
  exports.registerEnvironmentSettings = registerEnvironmentSettings;
4034
4587
  exports.run = run;
4588
+ exports.setGlobalTelemetryProvider = setGlobalTelemetryProvider;
4035
4589
  exports.statusComponent = statusComponent;
4036
4590
  exports.stream = stream;
4037
4591
  exports.subAgent = subAgent;