rdesign/frontend/node_modules/@copilotkit/shared/dist/index.umd.js

1021 lines
41 KiB
JavaScript
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

(function(global, factory) {
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports, require('graphql'), require('zod'), require('uuid'), require('@segment/analytics-node'), require('chalk')) :
typeof define === 'function' && define.amd ? define(['exports', 'graphql', 'zod', 'uuid', '@segment/analytics-node', 'chalk'], factory) :
(global = typeof globalThis !== 'undefined' ? globalThis : global || self, factory((global.CopilotKitShared = {}), global.GraphQL,global.Zod,global.UUID,global.SegmentAnalyticsNode,global.chalk));
})(this, function(exports, graphql, zod, uuid, _segment_analytics_node, chalk) {
Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });
//#region \0rolldown/runtime.js
var __create = Object.create;
var __defProp = Object.defineProperty;
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
var __getOwnPropNames = Object.getOwnPropertyNames;
var __getProtoOf = Object.getPrototypeOf;
var __hasOwnProp = Object.prototype.hasOwnProperty;
var __copyProps = (to, from, except, desc) => {
if (from && typeof from === "object" || typeof from === "function") {
for (var keys = __getOwnPropNames(from), i = 0, n = keys.length, key; i < n; i++) {
key = keys[i];
if (!__hasOwnProp.call(to, key) && key !== except) {
__defProp(to, key, {
get: ((k) => from[k]).bind(null, key),
enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable
});
}
}
}
return to;
};
var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", {
value: mod,
enumerable: true
}) : target, mod));
//#endregion
//#region src/utils/conditions.ts
function executeConditions({ conditions, value }) {
if (!(conditions === null || conditions === void 0 ? void 0 : conditions.length)) return true;
return conditions.every((condition) => executeCondition(condition, value));
}
function executeCondition(condition, value) {
const targetValue = condition.path ? getValueFromPath(value, condition.path) : value;
switch (condition.rule) {
case "AND": return condition.conditions.every((c) => executeCondition(c, value));
case "OR": return condition.conditions.some((c) => executeCondition(c, value));
case "NOT": return !condition.conditions.every((c) => executeCondition(c, value));
case "EQUALS": return targetValue === condition.value;
case "NOT_EQUALS": return targetValue !== condition.value;
case "GREATER_THAN": return targetValue > condition.value;
case "LESS_THAN": return targetValue < condition.value;
case "CONTAINS": return Array.isArray(targetValue) && targetValue.includes(condition.value);
case "NOT_CONTAINS": return Array.isArray(targetValue) && !targetValue.includes(condition.value);
case "MATCHES": return new RegExp(condition.value).test(String(targetValue));
case "STARTS_WITH": return String(targetValue).startsWith(condition.value);
case "ENDS_WITH": return String(targetValue).endsWith(condition.value);
case "EXISTS": return targetValue !== void 0 && targetValue !== null;
case "NOT_EXISTS": return targetValue === void 0 || targetValue === null;
}
}
function getValueFromPath(obj, path) {
return path.split(".").reduce((acc, part) => acc === null || acc === void 0 ? void 0 : acc[part], obj);
}
//#endregion
//#region src/utils/console-styling.ts
/**
* Console styling utilities for CopilotKit branded messages
* Provides consistent, readable colors across light and dark console themes
*/
/**
* Color palette optimized for console readability
*/
const ConsoleColors = {
primary: "#007acc",
success: "#22c55e",
feature: "#a855f7",
cta: "#ef4444",
info: "#06b6d4",
inherit: "inherit",
warning: "#f59e0b"
};
/**
* Console style templates for common patterns
*/
const ConsoleStyles = {
header: `color: ${ConsoleColors.warning}; font-weight: bold; font-size: 16px;`,
section: `color: ${ConsoleColors.success}; font-weight: bold;`,
highlight: `color: ${ConsoleColors.feature}; font-weight: bold;`,
cta: `color: ${ConsoleColors.success}; font-weight: bold;`,
info: `color: ${ConsoleColors.info}; font-weight: bold;`,
link: `color: ${ConsoleColors.primary}; text-decoration: underline;`,
body: `color: ${ConsoleColors.inherit};`,
warning: `color: ${ConsoleColors.cta}; font-weight: bold;`
};
/**
* Styled console message for CopilotKit Platform promotion
* Displays a beautiful, branded advertisement in the console
*/
function logCopilotKitPlatformMessage() {
console.log(`%cCopilotKit Warning%c
useCopilotChatHeadless_c provides full compatibility with CopilotKit's newly released Headless UI feature set. To enable this premium feature, add your public license key, available for free at:
%chttps://cloud.copilotkit.ai%c
Alternatively, useCopilotChat is available for basic programmatic control, and does not require an API key.
To learn more about premium features, read the documentation here:
%chttps://docs.copilotkit.ai/premium%c`, ConsoleStyles.header, ConsoleStyles.body, ConsoleStyles.cta, ConsoleStyles.body, ConsoleStyles.link, ConsoleStyles.body);
}
function publicApiKeyRequired(feature) {
console.log(`
%cCopilotKit Warning%c \n
In order to use ${feature}, you need to add your CopilotKit API key, available for free at https://cloud.copilotkit.ai.
`.trim(), ConsoleStyles.header, ConsoleStyles.body);
}
/**
* Create a styled console message with custom content
*
* @param template - Template string with %c placeholders
* @param styles - Array of style strings matching the %c placeholders
*
* @example
* ```typescript
* logStyled(
* '%cCopilotKit%c Welcome to the platform!',
* [ConsoleStyles.header, ConsoleStyles.body]
* );
* ```
*/
function logStyled(template, styles) {
console.log(template, ...styles);
}
/**
* Quick styled console methods for common use cases
*/
const styledConsole = {
success: (message) => logStyled(`%c✅ ${message}`, [ConsoleStyles.section]),
info: (message) => logStyled(`%c ${message}`, [ConsoleStyles.info]),
feature: (message) => logStyled(`%c✨ ${message}`, [ConsoleStyles.highlight]),
cta: (message) => logStyled(`%c🚀 ${message}`, [ConsoleStyles.cta]),
logCopilotKitPlatformMessage,
publicApiKeyRequired
};
//#endregion
//#region src/utils/errors.ts
let Severity = /* @__PURE__ */ function(Severity) {
Severity["CRITICAL"] = "critical";
Severity["WARNING"] = "warning";
Severity["INFO"] = "info";
return Severity;
}({});
let ErrorVisibility = /* @__PURE__ */ function(ErrorVisibility) {
ErrorVisibility["BANNER"] = "banner";
ErrorVisibility["TOAST"] = "toast";
ErrorVisibility["SILENT"] = "silent";
ErrorVisibility["DEV_ONLY"] = "dev_only";
return ErrorVisibility;
}({});
const ERROR_NAMES = {
COPILOT_ERROR: "CopilotError",
COPILOT_API_DISCOVERY_ERROR: "CopilotApiDiscoveryError",
COPILOT_REMOTE_ENDPOINT_DISCOVERY_ERROR: "CopilotKitRemoteEndpointDiscoveryError",
COPILOT_KIT_AGENT_DISCOVERY_ERROR: "CopilotKitAgentDiscoveryError",
COPILOT_KIT_LOW_LEVEL_ERROR: "CopilotKitLowLevelError",
COPILOT_KIT_VERSION_MISMATCH_ERROR: "CopilotKitVersionMismatchError",
RESOLVED_COPILOT_KIT_ERROR: "ResolvedCopilotKitError",
CONFIGURATION_ERROR: "ConfigurationError",
MISSING_PUBLIC_API_KEY_ERROR: "MissingPublicApiKeyError",
UPGRADE_REQUIRED_ERROR: "UpgradeRequiredError"
};
const BANNER_ERROR_NAMES = [
ERROR_NAMES.CONFIGURATION_ERROR,
ERROR_NAMES.MISSING_PUBLIC_API_KEY_ERROR,
ERROR_NAMES.UPGRADE_REQUIRED_ERROR,
ERROR_NAMES.COPILOT_API_DISCOVERY_ERROR,
ERROR_NAMES.COPILOT_REMOTE_ENDPOINT_DISCOVERY_ERROR,
ERROR_NAMES.COPILOT_KIT_AGENT_DISCOVERY_ERROR
];
const COPILOT_CLOUD_ERROR_NAMES = BANNER_ERROR_NAMES;
let CopilotKitErrorCode = /* @__PURE__ */ function(CopilotKitErrorCode) {
CopilotKitErrorCode["NETWORK_ERROR"] = "NETWORK_ERROR";
CopilotKitErrorCode["NOT_FOUND"] = "NOT_FOUND";
CopilotKitErrorCode["AGENT_NOT_FOUND"] = "AGENT_NOT_FOUND";
CopilotKitErrorCode["API_NOT_FOUND"] = "API_NOT_FOUND";
CopilotKitErrorCode["REMOTE_ENDPOINT_NOT_FOUND"] = "REMOTE_ENDPOINT_NOT_FOUND";
CopilotKitErrorCode["AUTHENTICATION_ERROR"] = "AUTHENTICATION_ERROR";
CopilotKitErrorCode["MISUSE"] = "MISUSE";
CopilotKitErrorCode["UNKNOWN"] = "UNKNOWN";
CopilotKitErrorCode["VERSION_MISMATCH"] = "VERSION_MISMATCH";
CopilotKitErrorCode["CONFIGURATION_ERROR"] = "CONFIGURATION_ERROR";
CopilotKitErrorCode["MISSING_PUBLIC_API_KEY_ERROR"] = "MISSING_PUBLIC_API_KEY_ERROR";
CopilotKitErrorCode["UPGRADE_REQUIRED_ERROR"] = "UPGRADE_REQUIRED_ERROR";
return CopilotKitErrorCode;
}({});
const BASE_URL = "https://docs.copilotkit.ai";
const getSeeMoreMarkdown = (link) => `See more: [${link}](${link})`;
const ERROR_CONFIG = {
[CopilotKitErrorCode.NETWORK_ERROR]: {
statusCode: 503,
troubleshootingUrl: `${BASE_URL}/troubleshooting/common-issues#i-am-getting-a-network-errors--api-not-found`,
visibility: ErrorVisibility.BANNER,
severity: Severity.CRITICAL
},
[CopilotKitErrorCode.NOT_FOUND]: {
statusCode: 404,
troubleshootingUrl: `${BASE_URL}/troubleshooting/common-issues#i-am-getting-a-network-errors--api-not-found`,
visibility: ErrorVisibility.BANNER,
severity: Severity.CRITICAL
},
[CopilotKitErrorCode.AGENT_NOT_FOUND]: {
statusCode: 500,
troubleshootingUrl: `${BASE_URL}/coagents/troubleshooting/common-issues#i-am-getting-agent-not-found-error`,
visibility: ErrorVisibility.BANNER,
severity: Severity.CRITICAL
},
[CopilotKitErrorCode.API_NOT_FOUND]: {
statusCode: 404,
troubleshootingUrl: `${BASE_URL}/troubleshooting/common-issues#i-am-getting-a-network-errors--api-not-found`,
visibility: ErrorVisibility.BANNER,
severity: Severity.CRITICAL
},
[CopilotKitErrorCode.REMOTE_ENDPOINT_NOT_FOUND]: {
statusCode: 404,
troubleshootingUrl: `${BASE_URL}/troubleshooting/common-issues#i-am-getting-copilotkits-remote-endpoint-not-found-error`,
visibility: ErrorVisibility.BANNER,
severity: Severity.CRITICAL
},
[CopilotKitErrorCode.AUTHENTICATION_ERROR]: {
statusCode: 401,
troubleshootingUrl: `${BASE_URL}/troubleshooting/common-issues#authentication-errors`,
visibility: ErrorVisibility.BANNER,
severity: Severity.CRITICAL
},
[CopilotKitErrorCode.MISUSE]: {
statusCode: 400,
troubleshootingUrl: null,
visibility: ErrorVisibility.DEV_ONLY,
severity: Severity.WARNING
},
[CopilotKitErrorCode.UNKNOWN]: {
statusCode: 500,
visibility: ErrorVisibility.TOAST,
severity: Severity.CRITICAL
},
[CopilotKitErrorCode.CONFIGURATION_ERROR]: {
statusCode: 400,
troubleshootingUrl: null,
severity: Severity.WARNING,
visibility: ErrorVisibility.BANNER
},
[CopilotKitErrorCode.MISSING_PUBLIC_API_KEY_ERROR]: {
statusCode: 400,
troubleshootingUrl: null,
severity: Severity.CRITICAL,
visibility: ErrorVisibility.BANNER
},
[CopilotKitErrorCode.UPGRADE_REQUIRED_ERROR]: {
statusCode: 402,
troubleshootingUrl: null,
severity: Severity.WARNING,
visibility: ErrorVisibility.BANNER
},
[CopilotKitErrorCode.VERSION_MISMATCH]: {
statusCode: 400,
troubleshootingUrl: null,
visibility: ErrorVisibility.DEV_ONLY,
severity: Severity.INFO
}
};
var CopilotKitError = class extends graphql.GraphQLError {
constructor({ message = "Unknown error occurred", code, severity, visibility }) {
var _ref;
const name = ERROR_NAMES.COPILOT_ERROR;
const config = ERROR_CONFIG[code];
const { statusCode } = config;
const resolvedVisibility = (_ref = visibility !== null && visibility !== void 0 ? visibility : config.visibility) !== null && _ref !== void 0 ? _ref : ErrorVisibility.TOAST;
const resolvedSeverity = severity !== null && severity !== void 0 ? severity : "severity" in config ? config.severity : void 0;
super(message, { extensions: {
name,
statusCode,
code,
visibility: resolvedVisibility,
severity: resolvedSeverity,
troubleshootingUrl: "troubleshootingUrl" in config ? config.troubleshootingUrl : null,
originalError: {
message,
stack: (/* @__PURE__ */ new Error()).stack
}
} });
this.code = code;
this.name = name;
this.statusCode = statusCode;
this.severity = resolvedSeverity;
this.visibility = resolvedVisibility;
}
};
/**
* Error thrown when we can identify wrong usage of our components.
* This helps us notify the developer before real errors can happen
*
* @extends CopilotKitError
*/
var CopilotKitMisuseError = class extends CopilotKitError {
constructor({ message, code = CopilotKitErrorCode.MISUSE }) {
const docsLink = "troubleshootingUrl" in ERROR_CONFIG[code] && ERROR_CONFIG[code].troubleshootingUrl ? getSeeMoreMarkdown(ERROR_CONFIG[code].troubleshootingUrl) : null;
const finalMessage = docsLink ? `${message}.\n\n${docsLink}` : message;
super({
message: finalMessage,
code
});
this.name = ERROR_NAMES.COPILOT_API_DISCOVERY_ERROR;
}
};
const getVersionMismatchErrorMessage = ({ reactCoreVersion, runtimeVersion, runtimeClientGqlVersion }) => `Version mismatch detected: @copilotkit/runtime@${runtimeVersion !== null && runtimeVersion !== void 0 ? runtimeVersion : ""} is not compatible with @copilotkit/react-core@${reactCoreVersion} and @copilotkit/runtime-client-gql@${runtimeClientGqlVersion}. Please ensure all installed copilotkit packages are on the same version.`;
/**
* Error thrown when CPK versions does not match
*
* @extends CopilotKitError
*/
var CopilotKitVersionMismatchError = class extends CopilotKitError {
constructor({ reactCoreVersion, runtimeVersion, runtimeClientGqlVersion }) {
const code = CopilotKitErrorCode.VERSION_MISMATCH;
super({
message: getVersionMismatchErrorMessage({
reactCoreVersion,
runtimeVersion,
runtimeClientGqlVersion
}),
code
});
this.name = ERROR_NAMES.COPILOT_KIT_VERSION_MISMATCH_ERROR;
}
};
/**
* Error thrown when the CopilotKit API endpoint cannot be discovered or accessed.
* This typically occurs when:
* - The API endpoint URL is invalid or misconfigured
* - The API service is not running at the expected location
* - There are network/firewall issues preventing access
*
* @extends CopilotKitError
*/
var CopilotKitApiDiscoveryError = class extends CopilotKitError {
constructor(params = {}) {
var _params$url, _params$message, _params$code;
const url = (_params$url = params.url) !== null && _params$url !== void 0 ? _params$url : "";
let operationSuffix = "";
if (url === null || url === void 0 ? void 0 : url.includes("/info")) operationSuffix = `when fetching CopilotKit info`;
else if (url.includes("/actions/execute")) operationSuffix = `when attempting to execute actions.`;
else if (url.includes("/agents/state")) operationSuffix = `when attempting to get agent state.`;
else if (url.includes("/agents/execute")) operationSuffix = `when attempting to execute agent(s).`;
const message = (_params$message = params.message) !== null && _params$message !== void 0 ? _params$message : params.url ? `Failed to find CopilotKit API endpoint at url ${params.url} ${operationSuffix}` : `Failed to find CopilotKit API endpoint.`;
const code = (_params$code = params.code) !== null && _params$code !== void 0 ? _params$code : CopilotKitErrorCode.API_NOT_FOUND;
const errorMessage = `${message}.\n\n${getSeeMoreMarkdown(ERROR_CONFIG[code].troubleshootingUrl)}`;
super({
message: errorMessage,
code
});
this.name = ERROR_NAMES.COPILOT_API_DISCOVERY_ERROR;
}
};
/**
* This error is used for endpoints specified in runtime's remote endpoints. If they cannot be contacted
* This typically occurs when:
* - The API endpoint URL is invalid or misconfigured
* - The API service is not running at the expected location
*
* @extends CopilotKitApiDiscoveryError
*/
var CopilotKitRemoteEndpointDiscoveryError = class extends CopilotKitApiDiscoveryError {
constructor(params) {
var _params$message2;
const message = (_params$message2 = params === null || params === void 0 ? void 0 : params.message) !== null && _params$message2 !== void 0 ? _params$message2 : (params === null || params === void 0 ? void 0 : params.url) ? `Failed to find or contact remote endpoint at url ${params.url}` : "Failed to find or contact remote endpoint";
const code = CopilotKitErrorCode.REMOTE_ENDPOINT_NOT_FOUND;
super({
message,
code
});
this.name = ERROR_NAMES.COPILOT_REMOTE_ENDPOINT_DISCOVERY_ERROR;
}
};
/**
* Error thrown when a LangGraph agent cannot be found or accessed.
* This typically occurs when:
* - The specified agent name does not exist in the deployment
* - The agent configuration is invalid or missing
* - The agent service is not properly deployed or initialized
*
* @extends CopilotKitError
*/
var CopilotKitAgentDiscoveryError = class extends CopilotKitError {
constructor(params) {
const { agentName, availableAgents } = params;
const code = CopilotKitErrorCode.AGENT_NOT_FOUND;
const seeMore = getSeeMoreMarkdown(ERROR_CONFIG[code].troubleshootingUrl);
let message;
if (availableAgents.length) {
const agentList = availableAgents.map((agent) => agent.name).join(", ");
if (agentName) message = `Agent '${agentName}' was not found. Available agents are: ${agentList}. Please verify the agent name in your configuration and ensure it matches one of the available agents.\n\n${seeMore}`;
else message = `The requested agent was not found. Available agents are: ${agentList}. Please verify the agent name in your configuration and ensure it matches one of the available agents.\n\n${seeMore}`;
} else message = `${agentName ? `Agent '${agentName}'` : "The requested agent"} was not found. Please set up at least one agent before proceeding. ${seeMore}`;
super({
message,
code
});
this.name = ERROR_NAMES.COPILOT_KIT_AGENT_DISCOVERY_ERROR;
}
};
/**
* Handles low-level networking errors that occur before a request reaches the server.
* These errors arise from issues in the underlying communication infrastructure rather than
* application-level logic or server responses. Typically used to handle "fetch failed" errors
* where no HTTP status code is available.
*
* Common scenarios include:
* - Connection failures (ECONNREFUSED) when server is down/unreachable
* - DNS resolution failures (ENOTFOUND) when domain can't be resolved
* - Timeouts (ETIMEDOUT) when request takes too long
* - Protocol/transport layer errors like SSL/TLS issues
*/
var CopilotKitLowLevelError = class extends CopilotKitError {
constructor({ error, url, message }) {
let code = CopilotKitErrorCode.NETWORK_ERROR;
const errorCode = error.code;
const errorMessage = message !== null && message !== void 0 ? message : resolveLowLevelErrorMessage({
errorCode,
url
});
super({
message: errorMessage,
code
});
this.name = ERROR_NAMES.COPILOT_KIT_LOW_LEVEL_ERROR;
}
};
/**
* Generic catch-all error handler for HTTP responses from the CopilotKit API where a status code is available.
* Used when we receive an HTTP error status and wish to handle broad range of them
*
* This differs from CopilotKitLowLevelError in that:
* - ResolvedCopilotKitError: Server was reached and returned an HTTP status
* - CopilotKitLowLevelError: Error occurred before reaching server (e.g. network failure)
*
* @param status - The HTTP status code received from the API response
* @param message - Optional error message to include
* @param code - Optional specific CopilotKitErrorCode to override default behavior
*
* Default behavior:
* - 400 Bad Request: Maps to CopilotKitApiDiscoveryError
* - All other status codes: Maps to UNKNOWN error code if no specific code provided
*/
var ResolvedCopilotKitError = class extends CopilotKitError {
constructor({ status, message, code, isRemoteEndpoint, url }) {
let resolvedCode = code;
if (!resolvedCode) switch (status) {
case 400: throw new CopilotKitApiDiscoveryError({
message,
url
});
case 404: throw isRemoteEndpoint ? new CopilotKitRemoteEndpointDiscoveryError({
message,
url
}) : new CopilotKitApiDiscoveryError({
message,
url
});
default:
resolvedCode = CopilotKitErrorCode.UNKNOWN;
break;
}
super({
message,
code: resolvedCode
});
this.name = ERROR_NAMES.RESOLVED_COPILOT_KIT_ERROR;
}
};
var ConfigurationError = class extends CopilotKitError {
constructor(message) {
super({
message,
code: CopilotKitErrorCode.CONFIGURATION_ERROR
});
this.name = ERROR_NAMES.CONFIGURATION_ERROR;
this.severity = Severity.WARNING;
}
};
var MissingPublicApiKeyError = class extends ConfigurationError {
constructor(message) {
super(message);
this.name = ERROR_NAMES.MISSING_PUBLIC_API_KEY_ERROR;
this.severity = Severity.CRITICAL;
}
};
var UpgradeRequiredError = class extends ConfigurationError {
constructor(message) {
super(message);
this.name = ERROR_NAMES.UPGRADE_REQUIRED_ERROR;
this.severity = Severity.WARNING;
}
};
/**
* Checks if an error is already a structured CopilotKit error.
* This utility centralizes the logic for detecting structured errors across the codebase.
*
* @param error - The error to check
* @returns true if the error is already structured, false otherwise
*/
function isStructuredCopilotKitError(error) {
var _error$extensions;
return error instanceof CopilotKitError || error instanceof CopilotKitLowLevelError || (error === null || error === void 0 ? void 0 : error.name) && error.name.includes("CopilotKit") || (error === null || error === void 0 || (_error$extensions = error.extensions) === null || _error$extensions === void 0 ? void 0 : _error$extensions.code) !== void 0;
}
/**
* Returns the error as-is if it's already structured, otherwise converts it using the provided converter function.
* This utility centralizes the pattern of preserving structured errors while converting unstructured ones.
*
* @param error - The error to process
* @param converter - Function to convert unstructured errors to structured ones
* @returns The structured error
*/
function ensureStructuredError(error, converter) {
return isStructuredCopilotKitError(error) ? error : converter(error);
}
async function getPossibleVersionMismatch({ runtimeVersion, runtimeClientGqlVersion }) {
if (!runtimeVersion || runtimeVersion === "" || !runtimeClientGqlVersion) return;
if (COPILOTKIT_VERSION !== runtimeVersion || COPILOTKIT_VERSION !== runtimeClientGqlVersion || runtimeVersion !== runtimeClientGqlVersion) return {
runtimeVersion,
runtimeClientGqlVersion,
reactCoreVersion: COPILOTKIT_VERSION,
message: getVersionMismatchErrorMessage({
runtimeVersion,
runtimeClientGqlVersion,
reactCoreVersion: COPILOTKIT_VERSION
})
};
}
const resolveLowLevelErrorMessage = ({ errorCode, url }) => {
const troubleshootingLink = ERROR_CONFIG[CopilotKitErrorCode.NETWORK_ERROR].troubleshootingUrl;
const genericMessage = (description = `Failed to fetch from url ${url}.`) => `${description}.
Possible reasons:
- -The server may have an error preventing it from returning a response (Check the server logs for more info).
- -The server might be down or unreachable
- -There might be a network issue (e.g., DNS failure, connection timeout)
- -The URL might be incorrect
- -The server is not running on the specified port
${getSeeMoreMarkdown(troubleshootingLink)}`;
if (url.includes("/info")) return genericMessage(`Failed to fetch CopilotKit agents/action information from url ${url}.`);
if (url.includes("/actions/execute")) return genericMessage(`Fetch call to ${url} to execute actions failed.`);
if (url.includes("/agents/state")) return genericMessage(`Fetch call to ${url} to get agent state failed.`);
if (url.includes("/agents/execute")) return genericMessage(`Fetch call to ${url} to execute agent(s) failed.`);
switch (errorCode) {
case "ECONNREFUSED": return `Connection to ${url} was refused. Ensure the server is running and accessible.\n\n${getSeeMoreMarkdown(troubleshootingLink)}`;
case "ENOTFOUND": return `The server on ${url} could not be found. Check the URL or your network configuration.\n\n${getSeeMoreMarkdown(ERROR_CONFIG[CopilotKitErrorCode.NOT_FOUND].troubleshootingUrl)}`;
case "ETIMEDOUT": return `The connection to ${url} timed out. The server might be overloaded or taking too long to respond.\n\n${getSeeMoreMarkdown(troubleshootingLink)}`;
default: return;
}
};
//#endregion
//#region src/utils/json-schema.ts
function actionParametersToJsonSchema(actionParameters) {
let parameters = {};
for (let parameter of actionParameters || []) parameters[parameter.name] = convertAttribute(parameter);
let requiredParameterNames = [];
for (let arg of actionParameters || []) if (arg.required !== false) requiredParameterNames.push(arg.name);
return {
type: "object",
properties: parameters,
required: requiredParameterNames
};
}
function jsonSchemaToActionParameters(jsonSchema) {
if (jsonSchema.type !== "object" || !jsonSchema.properties) return [];
const parameters = [];
const requiredFields = jsonSchema.required || [];
for (const [name, schema] of Object.entries(jsonSchema.properties)) {
const parameter = convertJsonSchemaToParameter(name, schema, requiredFields.includes(name));
parameters.push(parameter);
}
return parameters;
}
function convertJsonSchemaToParameter(name, schema, isRequired) {
const baseParameter = {
name,
description: schema.description
};
if (!isRequired) baseParameter.required = false;
switch (schema.type) {
case "string": return {
...baseParameter,
type: "string",
...schema.enum && { enum: schema.enum }
};
case "number":
case "boolean": return {
...baseParameter,
type: schema.type
};
case "object":
if (schema.properties) {
const attributes = [];
const requiredFields = schema.required || [];
for (const [propName, propSchema] of Object.entries(schema.properties)) attributes.push(convertJsonSchemaToParameter(propName, propSchema, requiredFields.includes(propName)));
return {
...baseParameter,
type: "object",
attributes
};
}
return {
...baseParameter,
type: "object"
};
case "array": if (schema.items.type === "object" && "properties" in schema.items) {
const attributes = [];
const requiredFields = schema.items.required || [];
for (const [propName, propSchema] of Object.entries(schema.items.properties || {})) attributes.push(convertJsonSchemaToParameter(propName, propSchema, requiredFields.includes(propName)));
return {
...baseParameter,
type: "object[]",
attributes
};
} else if (schema.items.type === "array") throw new Error("Nested arrays are not supported");
else return {
...baseParameter,
type: `${schema.items.type}[]`
};
default: return {
...baseParameter,
type: "string"
};
}
}
function convertAttribute(attribute) {
switch (attribute.type) {
case "string": return {
type: "string",
description: attribute.description,
...attribute.enum && { enum: attribute.enum }
};
case "number":
case "boolean": return {
type: attribute.type,
description: attribute.description
};
case "object":
case "object[]":
var _attribute$attributes, _attribute$attributes2;
const properties = (_attribute$attributes = attribute.attributes) === null || _attribute$attributes === void 0 ? void 0 : _attribute$attributes.reduce((acc, attr) => {
acc[attr.name] = convertAttribute(attr);
return acc;
}, {});
const required = (_attribute$attributes2 = attribute.attributes) === null || _attribute$attributes2 === void 0 ? void 0 : _attribute$attributes2.filter((attr) => attr.required !== false).map((attr) => attr.name);
if (attribute.type === "object[]") return {
type: "array",
items: {
type: "object",
...properties && { properties },
...required && required.length > 0 && { required }
},
description: attribute.description
};
return {
type: "object",
description: attribute.description,
...properties && { properties },
...required && required.length > 0 && { required }
};
default:
var _attribute$type;
if ((_attribute$type = attribute.type) === null || _attribute$type === void 0 ? void 0 : _attribute$type.endsWith("[]")) return {
type: "array",
items: { type: attribute.type.slice(0, -2) },
description: attribute.description
};
return {
type: "string",
description: attribute.description
};
}
}
function convertJsonSchemaToZodSchema(jsonSchema, required) {
if (jsonSchema.type === "object") {
const spec = {};
if (!jsonSchema.properties || !Object.keys(jsonSchema.properties).length) return !required ? zod.z.object(spec).optional() : zod.z.object(spec);
for (const [key, value] of Object.entries(jsonSchema.properties)) spec[key] = convertJsonSchemaToZodSchema(value, jsonSchema.required ? jsonSchema.required.includes(key) : false);
let schema = zod.z.object(spec).describe(jsonSchema.description);
return required ? schema : schema.optional();
} else if (jsonSchema.type === "string") {
if (jsonSchema.enum && jsonSchema.enum.length > 0) {
let schema = zod.z.enum(jsonSchema.enum).describe(jsonSchema.description);
return required ? schema : schema.optional();
}
let schema = zod.z.string().describe(jsonSchema.description);
return required ? schema : schema.optional();
} else if (jsonSchema.type === "number") {
let schema = zod.z.number().describe(jsonSchema.description);
return required ? schema : schema.optional();
} else if (jsonSchema.type === "boolean") {
let schema = zod.z.boolean().describe(jsonSchema.description);
return required ? schema : schema.optional();
} else if (jsonSchema.type === "array") {
let itemSchema = convertJsonSchemaToZodSchema(jsonSchema.items, true);
let schema = zod.z.array(itemSchema).describe(jsonSchema.description);
return required ? schema : schema.optional();
}
throw new Error("Invalid JSON schema");
}
function getZodParameters(parameters) {
if (!parameters) return zod.z.object({});
return convertJsonSchemaToZodSchema(actionParametersToJsonSchema(parameters), true);
}
//#endregion
//#region src/utils/random-id.ts
function randomId() {
return "ck-" + (0, uuid.v4)();
}
function randomUUID() {
return (0, uuid.v4)();
}
/**
* Recursively converts an object to a serializable form by converting functions to their string representation.
*/
function toSerializable(value) {
if (typeof value === "function") return value.toString();
if (Array.isArray(value)) return value.map(toSerializable);
if (value !== null && typeof value === "object") {
const result = {};
for (const key of Object.keys(value)) result[key] = toSerializable(value[key]);
return result;
}
return value;
}
function dataToUUID(input, namespace) {
const BASE_NAMESPACE = "e4b01160-ff74-4c6e-9b27-d53cd930fe8e";
const boundNamespace = namespace ? (0, uuid.v5)(namespace, BASE_NAMESPACE) : BASE_NAMESPACE;
return (0, uuid.v5)(typeof input === "string" ? input : JSON.stringify(toSerializable(input)), boundNamespace);
}
function isValidUUID(uuid$1) {
return (0, uuid.validate)(uuid$1);
}
//#endregion
//#region src/utils/requests.ts
/**
* Safely read a Response/Request body with sensible defaults:
* - clones the response/request to avoid consuming the original response/request
* - Skips GET/HEAD
* - Tries JSON first regardless of content-type
* - Falls back to text and optionally parses when it "looks" like JSON
*/
async function readBody(r) {
const method = "method" in r ? r.method.toUpperCase() : void 0;
if (method === "GET" || method === "HEAD") return;
if (!("body" in r) || r.body == null) return;
try {
return await r.clone().json();
} catch (_unused) {
try {
const text = await r.clone().text();
const trimmed = text.trim();
if (trimmed.length === 0) return text;
if (trimmed.startsWith("{") || trimmed.startsWith("[")) try {
return JSON.parse(trimmed);
} catch (_unused2) {
return text;
}
return text;
} catch (_unused3) {
try {
var _c$body;
const stream = (_c$body = r.clone().body) !== null && _c$body !== void 0 ? _c$body : null;
if (!stream) return void 0;
const reader = stream.getReader();
const decoder = new TextDecoder();
let out = "";
while (true) {
const { done, value } = await reader.read();
if (done) break;
if (typeof value === "string") out += value;
else out += decoder.decode(value, { stream: true });
}
out += decoder.decode();
const trimmed = out.trim();
if (trimmed.length === 0) return out;
if (trimmed.startsWith("{") || trimmed.startsWith("[")) try {
return JSON.parse(trimmed);
} catch (_unused4) {
return out;
}
return out;
} catch (_unused5) {
return;
}
}
}
}
//#endregion
//#region src/utils/index.ts
/**
* Safely parses a JSON string into an object
* @param json The JSON string to parse
* @param fallback Optional fallback value to return if parsing fails. If not provided or set to "unset", returns null
* @returns The parsed JSON object, or the fallback value (or null) if parsing fails
*/
function parseJson(json, fallback = "unset") {
try {
return JSON.parse(json);
} catch (e) {
return fallback === "unset" ? null : fallback;
}
}
/**
* Maps an array of items to a new array, skipping items that throw errors during mapping
* @param items The array to map
* @param callback The mapping function to apply to each item
* @returns A new array containing only the successfully mapped items
*/
function tryMap(items, callback) {
return items.reduce((acc, item, index, array) => {
try {
acc.push(callback(item, index, array));
} catch (error) {
console.error(error);
}
return acc;
}, []);
}
/**
* Checks if the current environment is macOS
* @returns {boolean} True if running on macOS, false otherwise
*/
function isMacOS() {
return /Mac|iMac|Macintosh/i.test(navigator.userAgent);
}
//#endregion
//#region src/constants/index.ts
const COPILOT_CLOUD_API_URL = "https://api.cloud.copilotkit.ai";
const COPILOT_CLOUD_VERSION = "v1";
const COPILOT_CLOUD_CHAT_URL = `${COPILOT_CLOUD_API_URL}/copilotkit/${COPILOT_CLOUD_VERSION}`;
const COPILOT_CLOUD_PUBLIC_API_KEY_HEADER = "X-CopilotCloud-Public-Api-Key";
//#endregion
//#region src/telemetry/utils.ts
function flattenObject(obj, parentKey = "", res = {}) {
for (let key in obj) {
const propName = parentKey ? `${parentKey}.${key}` : key;
if (typeof obj[key] === "object" && obj[key] !== null) flattenObject(obj[key], propName, res);
else res[propName] = obj[key];
}
return res;
}
//#endregion
//#region package.json
var version = "1.54.0";
//#endregion
//#region src/telemetry/scarf-client.ts
const SCARF_BASE_URL = `https://copilotkit.gateway.scarf.sh/${version}`;
var ScarfClient = class {
constructor() {}
async logEvent(properties) {
try {
const controller = new AbortController();
const timeoutId = setTimeout(() => controller.abort(), 3e3);
const queryParams = new URLSearchParams();
Object.entries(properties).forEach(([key, value]) => {
if (value !== null && value !== void 0) queryParams.append(key, String(value));
});
const url = `${SCARF_BASE_URL}?${queryParams.toString()}`;
const response = await fetch(url, {
method: "GET",
signal: controller.signal
});
clearTimeout(timeoutId);
if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);
} catch (_unused) {}
}
};
var scarf_client_default = new ScarfClient();
//#endregion
//#region src/telemetry/telemetry-client.ts
/**
* Checks if telemetry is disabled via environment variables.
* Users can opt out by setting:
* - COPILOTKIT_TELEMETRY_DISABLED=true or COPILOTKIT_TELEMETRY_DISABLED=1
* - DO_NOT_TRACK=true or DO_NOT_TRACK=1
*/
function isTelemetryDisabled() {
return process.env.COPILOTKIT_TELEMETRY_DISABLED === "true" || process.env.COPILOTKIT_TELEMETRY_DISABLED === "1" || process.env.DO_NOT_TRACK === "true" || process.env.DO_NOT_TRACK === "1";
}
var TelemetryClient = class {
constructor({ packageName, packageVersion, telemetryDisabled, telemetryBaseUrl, sampleRate }) {
this.globalProperties = {};
this.cloudConfiguration = null;
this.telemetryDisabled = false;
this.sampleRate = .05;
this.anonymousId = `anon_${(0, uuid.v4)()}`;
this.packageName = packageName;
this.packageVersion = packageVersion;
this.telemetryDisabled = telemetryDisabled || isTelemetryDisabled();
if (this.telemetryDisabled) return;
this.setSampleRate(sampleRate);
this.segment = new _segment_analytics_node.Analytics({ writeKey: process.env.COPILOTKIT_SEGMENT_WRITE_KEY || "n7XAZtQCGS2v1vvBy3LgBCv2h3Y8whja" });
this.setGlobalProperties({
"copilotkit.package.name": packageName,
"copilotkit.package.version": packageVersion
});
}
shouldSendEvent() {
return Math.random() < this.sampleRate;
}
async capture(event, properties) {
if (!this.shouldSendEvent() || !this.segment) return;
const flattenedProperties = flattenObject(properties);
const propertiesWithGlobal = {
...this.globalProperties,
...flattenedProperties
};
const orderedPropertiesWithGlobal = Object.keys(propertiesWithGlobal).sort().reduce((obj, key) => {
obj[key] = propertiesWithGlobal[key];
return obj;
}, {});
this.segment.track({
anonymousId: this.anonymousId,
event,
properties: { ...orderedPropertiesWithGlobal }
});
await scarf_client_default.logEvent({ event });
}
setGlobalProperties(properties) {
const flattenedProperties = flattenObject(properties);
this.globalProperties = {
...this.globalProperties,
...flattenedProperties
};
}
setCloudConfiguration(properties) {
this.cloudConfiguration = properties;
this.setGlobalProperties({ cloud: {
publicApiKey: properties.publicApiKey,
baseUrl: properties.baseUrl
} });
}
setSampleRate(sampleRate) {
let _sampleRate;
_sampleRate = sampleRate !== null && sampleRate !== void 0 ? sampleRate : .05;
if (process.env.COPILOTKIT_TELEMETRY_SAMPLE_RATE) _sampleRate = parseFloat(process.env.COPILOTKIT_TELEMETRY_SAMPLE_RATE);
if (_sampleRate < 0 || _sampleRate > 1) throw new Error("Sample rate must be between 0 and 1");
this.sampleRate = _sampleRate;
this.setGlobalProperties({
sampleRate: this.sampleRate,
sampleRateAdjustmentFactor: 1 - this.sampleRate,
sampleWeight: 1 / this.sampleRate
});
}
};
//#endregion
//#region src/index.ts
const COPILOTKIT_VERSION = version;
//#endregion
exports.BANNER_ERROR_NAMES = BANNER_ERROR_NAMES;
exports.COPILOTKIT_VERSION = COPILOTKIT_VERSION;
exports.COPILOT_CLOUD_API_URL = COPILOT_CLOUD_API_URL;
exports.COPILOT_CLOUD_CHAT_URL = COPILOT_CLOUD_CHAT_URL;
exports.COPILOT_CLOUD_ERROR_NAMES = COPILOT_CLOUD_ERROR_NAMES;
exports.COPILOT_CLOUD_PUBLIC_API_KEY_HEADER = COPILOT_CLOUD_PUBLIC_API_KEY_HEADER;
exports.COPILOT_CLOUD_VERSION = COPILOT_CLOUD_VERSION;
exports.ConfigurationError = ConfigurationError;
exports.ConsoleColors = ConsoleColors;
exports.ConsoleStyles = ConsoleStyles;
exports.CopilotKitAgentDiscoveryError = CopilotKitAgentDiscoveryError;
exports.CopilotKitApiDiscoveryError = CopilotKitApiDiscoveryError;
exports.CopilotKitError = CopilotKitError;
exports.CopilotKitErrorCode = CopilotKitErrorCode;
exports.CopilotKitLowLevelError = CopilotKitLowLevelError;
exports.CopilotKitMisuseError = CopilotKitMisuseError;
exports.CopilotKitRemoteEndpointDiscoveryError = CopilotKitRemoteEndpointDiscoveryError;
exports.CopilotKitVersionMismatchError = CopilotKitVersionMismatchError;
exports.ERROR_CONFIG = ERROR_CONFIG;
exports.ERROR_NAMES = ERROR_NAMES;
exports.ErrorVisibility = ErrorVisibility;
exports.MissingPublicApiKeyError = MissingPublicApiKeyError;
exports.ResolvedCopilotKitError = ResolvedCopilotKitError;
exports.Severity = Severity;
exports.TelemetryClient = TelemetryClient;
exports.UpgradeRequiredError = UpgradeRequiredError;
exports.actionParametersToJsonSchema = actionParametersToJsonSchema;
exports.convertJsonSchemaToZodSchema = convertJsonSchemaToZodSchema;
exports.dataToUUID = dataToUUID;
exports.ensureStructuredError = ensureStructuredError;
exports.executeConditions = executeConditions;
exports.getPossibleVersionMismatch = getPossibleVersionMismatch;
exports.getZodParameters = getZodParameters;
exports.isMacOS = isMacOS;
exports.isStructuredCopilotKitError = isStructuredCopilotKitError;
exports.isTelemetryDisabled = isTelemetryDisabled;
exports.isValidUUID = isValidUUID;
exports.jsonSchemaToActionParameters = jsonSchemaToActionParameters;
exports.logCopilotKitPlatformMessage = logCopilotKitPlatformMessage;
exports.logStyled = logStyled;
exports.parseJson = parseJson;
exports.publicApiKeyRequired = publicApiKeyRequired;
exports.randomId = randomId;
exports.randomUUID = randomUUID;
exports.readBody = readBody;
exports.styledConsole = styledConsole;
exports.tryMap = tryMap;
});
//# sourceMappingURL=index.umd.js.map