@inkeep/agents-sdk 0.38.2 → 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/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
- // src/index.ts
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
- export { ArtifactComponent, DataComponent, ExternalAgent, FunctionTool, Project, Runner, StatusComponent, SubAgent, Tool, agent, agentMcp, artifactComponent, createEnvironmentSettings, createFullProjectViaAPI, credential, credentialRef, dataComponent, deleteFullProjectViaAPI, externalAgent, externalAgents, functionTool, getFullProjectViaAPI, isCredentialReference, mcpServer, mcpTool, project, raceAgents, registerEnvironmentSettings, run, statusComponent, stream, subAgent, transfer, updateFullProjectViaAPI };
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.38.2",
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.38.2"
15
+ "@inkeep/agents-core": "^0.39.0"
16
16
  },
17
17
  "devDependencies": {
18
18
  "@types/js-yaml": "^4.0.9",