@botpress/adk-cli
Version:
Command-line interface for the Botpress Agent Development Kit (ADK)
102 lines (99 loc) • 3.61 kB
JavaScript
// @bun
import {
isJsonSchema,
isValidIdentifier,
isZuiSchema
} from "./chunk-na956zz3.js";
import {
transforms_exports,
uniq_default
} from "./chunk-54qt5g7m.js";
// ../../node_modules/.bun/llmz@0.0.79+b49d396f5ed96e7f/node_modules/llmz/dist/chunk-E5YW5YQN.js
var Exit = class _Exit {
name;
aliases = [];
description;
metadata;
schema;
get zSchema() {
return this.schema ? transforms_exports.fromJSONSchemaLegacy(this.schema) : undefined;
}
rename(name) {
const before = this.name;
if (!isValidIdentifier(name)) {
throw new Error(`Invalid name for exit ${name}. An exit name must start with a letter and contain only letters, numbers, and underscores. It must be 1-50 characters long.`);
}
this.name = name;
this.aliases = uniq_default([name, ...this.aliases.map((alias) => alias === before ? name : alias)]);
return this;
}
clone() {
return new _Exit({
name: this.name,
aliases: [...this.aliases],
description: this.description,
metadata: JSON.parse(JSON.stringify(this.metadata)),
schema: this.zSchema
});
}
is(exit) {
return this.name === exit.name;
}
match(result) {
return result.exit instanceof _Exit && this.name === result.exit.name;
}
toJSON() {
return {
name: this.name,
aliases: [...this.aliases],
description: this.description,
metadata: { ...this.metadata },
schema: this.schema
};
}
constructor(props) {
if (!isValidIdentifier(props.name)) {
throw new Error(`Invalid name for exit ${props.name}. A exit name must start with a letter and contain only letters, numbers, and underscores. It must be 1-50 characters long.`);
}
if (typeof props.description !== "string" || props.description.trim().length === 0) {
throw new Error(`Invalid description for exit ${props.name}. Expected a non-empty string, but got type "${typeof props.description}"`);
}
if (props.metadata !== undefined && typeof props.metadata !== "object") {
throw new Error(`Invalid metadata for exit ${props.name}. Expected an object, but got type "${typeof props.metadata}"`);
}
if (props.aliases !== undefined && !Array.isArray(props.aliases)) {
throw new Error(`Invalid aliases for exit ${props.name}. Expected an array, but got type "${typeof props.aliases}"`);
}
if (props.aliases && props.aliases.some((alias) => !isValidIdentifier(alias))) {
throw new Error(`Invalid aliases for exit ${props.name}. Expected an array of valid identifiers.`);
}
if (typeof props.schema !== "undefined") {
if (isZuiSchema(props.schema)) {
this.schema = transforms_exports.toJSONSchemaLegacy(props.schema);
} else if (isJsonSchema(props.schema)) {
this.schema = props.schema;
} else {
throw new Error(`Invalid input schema for exit ${props.name}. Expected a ZodType or JSONSchema, but got type "${typeof props.schema}"`);
}
}
this.name = props.name;
this.aliases = uniq_default([props.name, ...props.aliases ?? []]);
this.description = props.description;
this.metadata = props.metadata ?? {};
}
static withUniqueNames = (exits) => {
const names = /* @__PURE__ */ new Set;
return exits.map((exit) => {
if (exits.filter((t) => t.name === exit.name).length === 1) {
return exit;
}
let counter = 1;
let exitName = exit.name + counter;
while (names.has(exitName)) {
exitName = `${exit.name}${++counter}`;
}
return exit.rename(exitName);
});
};
};
export { Exit };