llmist 1.0.0 → 1.1.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.
@@ -9,7 +9,7 @@ import {
9
9
  init_constants,
10
10
  init_gadget,
11
11
  init_logger
12
- } from "./chunk-T24KLXY4.js";
12
+ } from "./chunk-VXPZQZF5.js";
13
13
 
14
14
  // src/gadgets/validation.ts
15
15
  function validateAndApplyDefaults(schema, params) {
@@ -935,4 +935,4 @@ export {
935
935
  MockGadgetBuilder,
936
936
  mockGadget
937
937
  };
938
- //# sourceMappingURL=chunk-53MM55JS.js.map
938
+ //# sourceMappingURL=chunk-OIPLYP7M.js.map
@@ -1346,21 +1346,107 @@ var init_exceptions = __esm({
1346
1346
  }
1347
1347
  });
1348
1348
 
1349
+ // src/gadgets/error-formatter.ts
1350
+ var GadgetErrorFormatter;
1351
+ var init_error_formatter = __esm({
1352
+ "src/gadgets/error-formatter.ts"() {
1353
+ "use strict";
1354
+ init_constants();
1355
+ GadgetErrorFormatter = class {
1356
+ argPrefix;
1357
+ startPrefix;
1358
+ endPrefix;
1359
+ constructor(options = {}) {
1360
+ this.argPrefix = options.argPrefix ?? GADGET_ARG_PREFIX;
1361
+ this.startPrefix = options.startPrefix ?? GADGET_START_PREFIX;
1362
+ this.endPrefix = options.endPrefix ?? GADGET_END_PREFIX;
1363
+ }
1364
+ /**
1365
+ * Format a Zod validation error with full gadget instructions.
1366
+ *
1367
+ * @param gadgetName - Name of the gadget that was called
1368
+ * @param zodError - The Zod validation error
1369
+ * @param gadget - The gadget instance (for generating instructions)
1370
+ * @returns Formatted error message with usage instructions
1371
+ */
1372
+ formatValidationError(gadgetName, zodError, gadget) {
1373
+ const parts = [];
1374
+ parts.push(`Error: Invalid parameters for '${gadgetName}':`);
1375
+ for (const issue of zodError.issues) {
1376
+ const path = issue.path.join(".") || "root";
1377
+ parts.push(` - ${path}: ${issue.message}`);
1378
+ }
1379
+ parts.push("");
1380
+ parts.push("Gadget Usage:");
1381
+ parts.push(gadget.getInstruction(this.argPrefix));
1382
+ return parts.join("\n");
1383
+ }
1384
+ /**
1385
+ * Format a parse error with block format reference.
1386
+ *
1387
+ * @param gadgetName - Name of the gadget that was called
1388
+ * @param parseError - The parse error message
1389
+ * @param gadget - The gadget instance if found (for generating instructions)
1390
+ * @returns Formatted error message with format reference
1391
+ */
1392
+ formatParseError(gadgetName, parseError, gadget) {
1393
+ const parts = [];
1394
+ parts.push(`Error: Failed to parse parameters for '${gadgetName}':`);
1395
+ parts.push(` ${parseError}`);
1396
+ if (gadget) {
1397
+ parts.push("");
1398
+ parts.push("Gadget Usage:");
1399
+ parts.push(gadget.getInstruction(this.argPrefix));
1400
+ }
1401
+ parts.push("");
1402
+ parts.push("Block Format Reference:");
1403
+ parts.push(` ${this.startPrefix}${gadgetName}`);
1404
+ parts.push(` ${this.argPrefix}parameterName`);
1405
+ parts.push(" parameter value here");
1406
+ parts.push(` ${this.endPrefix}`);
1407
+ return parts.join("\n");
1408
+ }
1409
+ /**
1410
+ * Format a registry error (gadget not found) with available gadgets list.
1411
+ *
1412
+ * @param gadgetName - Name of the gadget that was not found
1413
+ * @param availableGadgets - List of available gadget names
1414
+ * @returns Formatted error message with available gadgets
1415
+ */
1416
+ formatRegistryError(gadgetName, availableGadgets) {
1417
+ const parts = [];
1418
+ parts.push(`Error: Gadget '${gadgetName}' not found.`);
1419
+ if (availableGadgets.length > 0) {
1420
+ parts.push("");
1421
+ parts.push(`Available gadgets: ${availableGadgets.join(", ")}`);
1422
+ } else {
1423
+ parts.push("");
1424
+ parts.push("No gadgets are currently registered.");
1425
+ }
1426
+ return parts.join("\n");
1427
+ }
1428
+ };
1429
+ }
1430
+ });
1431
+
1349
1432
  // src/gadgets/executor.ts
1350
1433
  var GadgetExecutor;
1351
1434
  var init_executor = __esm({
1352
1435
  "src/gadgets/executor.ts"() {
1353
1436
  "use strict";
1354
1437
  init_logger();
1438
+ init_error_formatter();
1355
1439
  init_exceptions();
1356
1440
  GadgetExecutor = class {
1357
- constructor(registry, onHumanInputRequired, logger, defaultGadgetTimeoutMs) {
1441
+ constructor(registry, onHumanInputRequired, logger, defaultGadgetTimeoutMs, errorFormatterOptions) {
1358
1442
  this.registry = registry;
1359
1443
  this.onHumanInputRequired = onHumanInputRequired;
1360
1444
  this.defaultGadgetTimeoutMs = defaultGadgetTimeoutMs;
1361
1445
  this.logger = logger ?? createLogger({ name: "llmist:executor" });
1446
+ this.errorFormatter = new GadgetErrorFormatter(errorFormatterOptions);
1362
1447
  }
1363
1448
  logger;
1449
+ errorFormatter;
1364
1450
  /**
1365
1451
  * Creates a promise that rejects with a TimeoutException after the specified timeout.
1366
1452
  */
@@ -1385,11 +1471,12 @@ var init_executor = __esm({
1385
1471
  const gadget = this.registry.get(call.gadgetName);
1386
1472
  if (!gadget) {
1387
1473
  this.logger.error("Gadget not found", { gadgetName: call.gadgetName });
1474
+ const availableGadgets = this.registry.getNames();
1388
1475
  return {
1389
1476
  gadgetName: call.gadgetName,
1390
1477
  invocationId: call.invocationId,
1391
1478
  parameters: call.parameters ?? {},
1392
- error: `Gadget '${call.gadgetName}' not found in registry`,
1479
+ error: this.errorFormatter.formatRegistryError(call.gadgetName, availableGadgets),
1393
1480
  executionTimeMs: Date.now() - startTime
1394
1481
  };
1395
1482
  }
@@ -1399,25 +1486,26 @@ var init_executor = __esm({
1399
1486
  parseError: call.parseError,
1400
1487
  rawParameters: call.parametersRaw
1401
1488
  });
1489
+ const parseErrorMessage = call.parseError ?? "Failed to parse parameters";
1402
1490
  return {
1403
1491
  gadgetName: call.gadgetName,
1404
1492
  invocationId: call.invocationId,
1405
1493
  parameters: {},
1406
- error: call.parseError ?? "Failed to parse parameters",
1494
+ error: this.errorFormatter.formatParseError(call.gadgetName, parseErrorMessage, gadget),
1407
1495
  executionTimeMs: Date.now() - startTime
1408
1496
  };
1409
1497
  }
1410
1498
  if (gadget.parameterSchema) {
1411
1499
  const validationResult = gadget.parameterSchema.safeParse(rawParameters);
1412
1500
  if (!validationResult.success) {
1413
- const formattedIssues = validationResult.error.issues.map((issue) => {
1414
- const path = issue.path.join(".") || "root";
1415
- return `${path}: ${issue.message}`;
1416
- }).join("; ");
1417
- const validationError = `Invalid parameters: ${formattedIssues}`;
1501
+ const validationError = this.errorFormatter.formatValidationError(
1502
+ call.gadgetName,
1503
+ validationResult.error,
1504
+ gadget
1505
+ );
1418
1506
  this.logger.error("Gadget parameter validation failed", {
1419
1507
  gadgetName: call.gadgetName,
1420
- error: validationError
1508
+ issueCount: validationResult.error.issues.length
1421
1509
  });
1422
1510
  return {
1423
1511
  gadgetName: call.gadgetName,
@@ -1706,17 +1794,12 @@ var init_parser = __esm({
1706
1794
  return { actualName: gadgetName, invocationId: `gadget_${++globalInvocationCounter}` };
1707
1795
  }
1708
1796
  /**
1709
- * Truncate verbose parse errors to avoid context overflow.
1710
- * Keeps first meaningful line and limits total length.
1797
+ * Extract the error message from a parse error.
1798
+ * Preserves full message since the error formatter adds contextual help
1799
+ * that benefits from precise, detailed error information.
1711
1800
  */
1712
- truncateParseError(error, format) {
1713
- const message = error instanceof Error ? error.message : String(error);
1714
- const firstLine = message.split("\n")[0];
1715
- const maxLen = 200;
1716
- if (firstLine.length <= maxLen) {
1717
- return firstLine;
1718
- }
1719
- return `${firstLine.slice(0, maxLen)}... (${message.length} chars total)`;
1801
+ extractParseError(error) {
1802
+ return error instanceof Error ? error.message : String(error);
1720
1803
  }
1721
1804
  /**
1722
1805
  * Parse parameter string using block format
@@ -1726,7 +1809,7 @@ var init_parser = __esm({
1726
1809
  try {
1727
1810
  return { parameters: parseBlockParams(cleaned, { argPrefix: this.argPrefix }) };
1728
1811
  } catch (error) {
1729
- return { parseError: this.truncateParseError(error, "block") };
1812
+ return { parseError: this.extractParseError(error) };
1730
1813
  }
1731
1814
  }
1732
1815
  // Feed a chunk of text and get parsed events
@@ -5498,6 +5581,8 @@ export {
5498
5581
  getProvider,
5499
5582
  getModelId,
5500
5583
  init_model_shortcuts,
5584
+ validateGadgetSchema,
5585
+ init_schema_validator,
5501
5586
  GadgetRegistry,
5502
5587
  init_registry,
5503
5588
  DEFAULT_PROMPTS,
@@ -5509,6 +5594,8 @@ export {
5509
5594
  createLogger,
5510
5595
  defaultLogger,
5511
5596
  init_logger,
5597
+ schemaToJSONSchema,
5598
+ init_schema_to_json,
5512
5599
  BaseGadget,
5513
5600
  init_gadget,
5514
5601
  createGadget,
@@ -5557,4 +5644,4 @@ export {
5557
5644
  AgentBuilder,
5558
5645
  init_builder
5559
5646
  };
5560
- //# sourceMappingURL=chunk-T24KLXY4.js.map
5647
+ //# sourceMappingURL=chunk-VXPZQZF5.js.map