@opperai/agents 0.4.0 → 0.5.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.d.cts CHANGED
@@ -574,7 +574,9 @@ declare class AgentContext {
574
574
  */
575
575
  cleanupBreakdownIfOnlyParent(parentAgentName: string): void;
576
576
  addCycle(cycle: ExecutionCycle): ExecutionCycle;
577
- recordToolCall(call: Omit<ToolCallRecord, "id">): ToolCallRecord;
577
+ recordToolCall(call: Omit<ToolCallRecord, "id"> & {
578
+ id?: string;
579
+ }): ToolCallRecord;
578
580
  getContextSize(): number;
579
581
  getLastNCycles(count?: number): ExecutionCycle[];
580
582
  getLastIterationsSummary(count?: number): IterationSummary[];
@@ -706,6 +708,7 @@ interface HookPayloadMap {
706
708
  context: AgentContext;
707
709
  tool: Tool<unknown, unknown>;
708
710
  input: unknown;
711
+ toolCallId: string;
709
712
  };
710
713
  [HookEvents.AfterTool]: {
711
714
  context: AgentContext;
@@ -718,6 +721,7 @@ interface HookPayloadMap {
718
721
  toolName: string;
719
722
  tool?: Tool<unknown, unknown>;
720
723
  error: unknown;
724
+ toolCallId: string;
721
725
  };
722
726
  [HookEvents.MemoryRead]: {
723
727
  context: AgentContext;
@@ -1557,6 +1561,12 @@ declare class OpperClient {
1557
1561
  constructor(apiKey?: string, options?: {
1558
1562
  logger?: AgentLogger;
1559
1563
  retryConfig?: Partial<RetryConfig>;
1564
+ /**
1565
+ * Override the default Opper API server URL.
1566
+ * Useful for local development or self-hosted deployments.
1567
+ * Example: "http://127.0.0.1:8000/v2"
1568
+ */
1569
+ baseUrl?: string;
1560
1570
  });
1561
1571
  /**
1562
1572
  * Make a call to Opper with retry logic
@@ -1607,6 +1617,12 @@ declare class OpperClient {
1607
1617
  declare function createOpperClient(apiKey?: string, options?: {
1608
1618
  logger?: AgentLogger;
1609
1619
  retryConfig?: Partial<RetryConfig>;
1620
+ /**
1621
+ * Override the default Opper API server URL.
1622
+ * Useful for local development or self-hosted deployments.
1623
+ * Example: "http://127.0.0.1:8000/v2"
1624
+ */
1625
+ baseUrl?: string;
1610
1626
  }): OpperClient;
1611
1627
 
1612
1628
  /**
package/dist/index.d.ts CHANGED
@@ -574,7 +574,9 @@ declare class AgentContext {
574
574
  */
575
575
  cleanupBreakdownIfOnlyParent(parentAgentName: string): void;
576
576
  addCycle(cycle: ExecutionCycle): ExecutionCycle;
577
- recordToolCall(call: Omit<ToolCallRecord, "id">): ToolCallRecord;
577
+ recordToolCall(call: Omit<ToolCallRecord, "id"> & {
578
+ id?: string;
579
+ }): ToolCallRecord;
578
580
  getContextSize(): number;
579
581
  getLastNCycles(count?: number): ExecutionCycle[];
580
582
  getLastIterationsSummary(count?: number): IterationSummary[];
@@ -706,6 +708,7 @@ interface HookPayloadMap {
706
708
  context: AgentContext;
707
709
  tool: Tool<unknown, unknown>;
708
710
  input: unknown;
711
+ toolCallId: string;
709
712
  };
710
713
  [HookEvents.AfterTool]: {
711
714
  context: AgentContext;
@@ -718,6 +721,7 @@ interface HookPayloadMap {
718
721
  toolName: string;
719
722
  tool?: Tool<unknown, unknown>;
720
723
  error: unknown;
724
+ toolCallId: string;
721
725
  };
722
726
  [HookEvents.MemoryRead]: {
723
727
  context: AgentContext;
@@ -1557,6 +1561,12 @@ declare class OpperClient {
1557
1561
  constructor(apiKey?: string, options?: {
1558
1562
  logger?: AgentLogger;
1559
1563
  retryConfig?: Partial<RetryConfig>;
1564
+ /**
1565
+ * Override the default Opper API server URL.
1566
+ * Useful for local development or self-hosted deployments.
1567
+ * Example: "http://127.0.0.1:8000/v2"
1568
+ */
1569
+ baseUrl?: string;
1560
1570
  });
1561
1571
  /**
1562
1572
  * Make a call to Opper with retry logic
@@ -1607,6 +1617,12 @@ declare class OpperClient {
1607
1617
  declare function createOpperClient(apiKey?: string, options?: {
1608
1618
  logger?: AgentLogger;
1609
1619
  retryConfig?: Partial<RetryConfig>;
1620
+ /**
1621
+ * Override the default Opper API server URL.
1622
+ * Useful for local development or self-hosted deployments.
1623
+ * Example: "http://127.0.0.1:8000/v2"
1624
+ */
1625
+ baseUrl?: string;
1610
1626
  }): OpperClient;
1611
1627
 
1612
1628
  /**
package/dist/index.js CHANGED
@@ -1007,7 +1007,7 @@ var BaseAgent = class {
1007
1007
  }
1008
1008
  this.opperConfig = {
1009
1009
  apiKey: config.opperConfig?.apiKey ?? process.env["OPPER_API_KEY"],
1010
- baseUrl: config.opperConfig?.baseUrl,
1010
+ baseUrl: config.opperConfig?.baseUrl ?? process.env["OPPER_BASE_URL"],
1011
1011
  ...config.opperConfig
1012
1012
  };
1013
1013
  this.memory = this.initializeMemory(config);
@@ -1270,6 +1270,7 @@ var BaseAgent = class {
1270
1270
  * @returns Tool execution result
1271
1271
  */
1272
1272
  async executeTool(toolName, input, context, options) {
1273
+ const toolCallId = randomUUID();
1273
1274
  const tool2 = this.tools.get(toolName);
1274
1275
  if (!tool2) {
1275
1276
  const failure = ToolResultFactory.failure(
@@ -1278,6 +1279,7 @@ var BaseAgent = class {
1278
1279
  );
1279
1280
  const timestamp = Date.now();
1280
1281
  context.recordToolCall({
1282
+ id: toolCallId,
1281
1283
  toolName,
1282
1284
  input,
1283
1285
  success: false,
@@ -1289,7 +1291,8 @@ var BaseAgent = class {
1289
1291
  await this.triggerHook(HookEvents.ToolError, {
1290
1292
  context,
1291
1293
  toolName,
1292
- error: failure.error
1294
+ error: failure.error,
1295
+ toolCallId
1293
1296
  });
1294
1297
  return failure;
1295
1298
  }
@@ -1304,11 +1307,13 @@ var BaseAgent = class {
1304
1307
  await this.triggerHook(HookEvents.BeforeTool, {
1305
1308
  context,
1306
1309
  tool: tool2,
1307
- input
1310
+ input,
1311
+ toolCallId
1308
1312
  });
1309
1313
  const result = await tool2.execute(input, executionContext);
1310
1314
  const finishedAt = Date.now();
1311
1315
  const record = context.recordToolCall({
1316
+ id: toolCallId,
1312
1317
  toolName: tool2.name,
1313
1318
  input,
1314
1319
  ...result.success && { output: result.output },
@@ -1320,6 +1325,15 @@ var BaseAgent = class {
1320
1325
  finishedAt,
1321
1326
  metadata: {}
1322
1327
  });
1328
+ if (!result.success) {
1329
+ await this.triggerHook(HookEvents.ToolError, {
1330
+ context,
1331
+ tool: tool2,
1332
+ toolName: tool2.name,
1333
+ error: result.error,
1334
+ toolCallId
1335
+ });
1336
+ }
1323
1337
  await this.triggerHook(HookEvents.AfterTool, {
1324
1338
  context,
1325
1339
  tool: tool2,
@@ -1337,6 +1351,7 @@ var BaseAgent = class {
1337
1351
  }
1338
1352
  );
1339
1353
  const record = context.recordToolCall({
1354
+ id: toolCallId,
1340
1355
  toolName: tool2.name,
1341
1356
  input,
1342
1357
  success: false,
@@ -1349,7 +1364,8 @@ var BaseAgent = class {
1349
1364
  context,
1350
1365
  tool: tool2,
1351
1366
  toolName: tool2.name,
1352
- error
1367
+ error,
1368
+ toolCallId
1353
1369
  });
1354
1370
  await this.triggerHook(HookEvents.AfterTool, {
1355
1371
  context,
@@ -1618,7 +1634,7 @@ var mergeSchemaDefaults = (schema, value) => {
1618
1634
 
1619
1635
  // package.json
1620
1636
  var package_default = {
1621
- version: "0.4.0"};
1637
+ version: "0.5.0"};
1622
1638
 
1623
1639
  // src/utils/version.ts
1624
1640
  var SDK_NAME = "@opperai/agents";
@@ -1666,7 +1682,8 @@ var OpperClient = class {
1666
1682
  constructor(apiKey, options = {}) {
1667
1683
  this.client = new Opper({
1668
1684
  httpBearer: apiKey ?? process.env["OPPER_HTTP_BEARER"] ?? "",
1669
- userAgent: getUserAgent()
1685
+ userAgent: getUserAgent(),
1686
+ ...options.baseUrl && { serverURL: options.baseUrl }
1670
1687
  });
1671
1688
  this.logger = options.logger ?? getDefaultLogger();
1672
1689
  this.retryConfig = {
@@ -2111,7 +2128,8 @@ var Agent = class extends BaseAgent {
2111
2128
  }
2112
2129
  }
2113
2130
  this.opperClient = config.opperClient ?? new OpperClient(this.opperConfig.apiKey, {
2114
- logger: this.logger
2131
+ logger: this.logger,
2132
+ ...this.opperConfig.baseUrl && { baseUrl: this.opperConfig.baseUrl }
2115
2133
  });
2116
2134
  }
2117
2135
  /**
@@ -3379,6 +3397,11 @@ var mcp = (...configs) => {
3379
3397
 
3380
3398
  // src/utils/tool-decorators.ts
3381
3399
  init_tool();
3400
+ var isToolResult = (value) => {
3401
+ if (typeof value !== "object" || value === null) return false;
3402
+ const obj = value;
3403
+ return typeof obj["success"] === "boolean" && typeof obj["toolName"] === "string" && ("output" in obj || "error" in obj);
3404
+ };
3382
3405
  var reflectWithMetadata = Reflect;
3383
3406
  var ReflectMetadata = {
3384
3407
  define: (metadataKey, metadataValue, target, propertyKey) => {
@@ -3508,6 +3531,9 @@ function createFunctionTool(fn, options = {}) {
3508
3531
  } else {
3509
3532
  result = await Promise.resolve(fn(input, context));
3510
3533
  }
3534
+ if (isToolResult(result)) {
3535
+ return result;
3536
+ }
3511
3537
  return ToolResultFactory.success(name, result, {
3512
3538
  startedAt,
3513
3539
  finishedAt: Date.now(),