export class RumiloError extends Error {
  readonly code: string;

  constructor(message: string, code: string) {
    super(message);
    this.name = this.constructor.name;
    this.code = code;
  }
}

export class ConfigError extends RumiloError {
  constructor(message: string) {
    super(message, "CONFIG_ERROR");
  }
}

export class FetchError extends RumiloError {
  constructor(url: string, reason: string) {
    super(`Failed to fetch ${url}: ${reason}`, "FETCH_ERROR");
  }
}

export class CloneError extends RumiloError {
  constructor(uri: string, reason: string) {
    super(`Failed to clone ${uri}: ${reason}`, "CLONE_ERROR");
  }
}

export class WorkspaceError extends RumiloError {
  constructor(message: string) {
    super(message, "WORKSPACE_ERROR");
  }
}

export class ToolInputError extends RumiloError {
  constructor(message: string) {
    super(message, "TOOL_INPUT_ERROR");
  }
}
