// This file has been generated by Tauri Specta. Do not edit this file manually.

import { invoke as __TAURI_INVOKE } from "@tauri-apps/api/core";

/** Commands */
export const commands = {
	environmentLanguage: () => __TAURI_INVOKE<string>("environment_language"),
	environmentSetLanguage: (language: string) => __TAURI_INVOKE<null>("environment_set_language", { language }),
	environmentTheme: () => __TAURI_INVOKE<string>("environment_theme"),
	environmentSetTheme: (theme: string) => __TAURI_INVOKE<null>("environment_set_theme", { theme }),
	environmentGetProjectSorting: () => __TAURI_INVOKE<string>("environment_get_project_sorting"),
	environmentSetProjectSorting: (sorting: string) => __TAURI_INVOKE<null>("environment_set_project_sorting", { sorting }),
	environmentGetFinishedSetupPages: () => __TAURI_INVOKE<SetupPages[]>("environment_get_finished_setup_pages"),
	environmentFinishedSetupPage: (page: SetupPages) => __TAURI_INVOKE<null>("environment_finished_setup_page", { page }),
	environmentClearSetupProcess: () => __TAURI_INVOKE<null>("environment_clear_setup_process"),
	environmentLogsLevel: () => __TAURI_INVOKE<LogLevel[]>("environment_logs_level"),
	environmentSetLogsLevel: (logsLevel: LogLevel[]) => __TAURI_INVOKE<null>("environment_set_logs_level", { logsLevel }),
	environmentGuiAnimation: () => __TAURI_INVOKE<boolean>("environment_gui_animation"),
	environmentSetGuiAnimation: (guiAnimation: boolean) => __TAURI_INVOKE<null>("environment_set_gui_animation", { guiAnimation }),
	environmentGuiCompact: () => __TAURI_INVOKE<boolean>("environment_gui_compact"),
	environmentSetGuiCompact: (guiCompact: boolean) => __TAURI_INVOKE<null>("environment_set_gui_compact", { guiCompact }),
	environmentHideSidebarLinks: () => __TAURI_INVOKE<boolean>("environment_hide_sidebar_links"),
	environmentSetHideSidebarLinks: (hideSidebarLinks: boolean) => __TAURI_INVOKE<null>("environment_set_hide_sidebar_links", { hideSidebarLinks }),
	environmentProjectViewMode: () => __TAURI_INVOKE<string>("environment_project_view_mode"),
	environmentSetProjectViewMode: (projectViewMode: string) => __TAURI_INVOKE<null>("environment_set_project_view_mode", { projectViewMode }),
	environmentSetUnityHubAccessMethod: (unityHubAccessMethod: UnityHubAccessMethod) => __TAURI_INVOKE<null>("environment_set_unity_hub_access_method", { unityHubAccessMethod }),
	environmentSetTemplateFavorite: (templateId: string, favorite: boolean) => __TAURI_INVOKE<null>("environment_set_template_favorite", { templateId, favorite }),
	mcpStatus: () => __TAURI_INVOKE<McpStatus>("mcp_status"),
	mcpSetEnabled: (enabled: boolean) => __TAURI_INVOKE<McpStatus>("mcp_set_enabled", { enabled }),
	environmentProjects: () => __TAURI_INVOKE<TauriProject[]>("environment_projects"),
	environmentAddProjectWithPicker: () => __TAURI_INVOKE<TauriAddProjectWithPickerResult>("environment_add_project_with_picker"),
	environmentRestoreProjectFromBackup: (channel: string) => __TAURI_INVOKE<AsyncCallResult<TauriRestoreProjectFromBackupProgress, TauriRestoreProjectFromBackupResult>>("environment_restore_project_from_backup", { channel }),
	environmentRemoveProjectByPath: (projectPath: string, directory: boolean) => __TAURI_INVOKE<null>("environment_remove_project_by_path", { projectPath, directory }),
	environmentCopyProjectForMigration: (channel: string, sourcePath: string) => __TAURI_INVOKE<AsyncCallResult<TauriCopyProjectProgress, string>>("environment_copy_project_for_migration", { channel, sourcePath }),
	environmentCopyProject: (channel: string, sourcePath: string, newPath: string) => __TAURI_INVOKE<AsyncCallResult<TauriCopyProjectProgress, string>>("environment_copy_project", { channel, sourcePath, newPath }),
	environmentSetFavoriteProject: (projectPath: string, favorite: boolean) => __TAURI_INVOKE<null>("environment_set_favorite_project", { projectPath, favorite }),
	environmentProjectCreationInformation: () => __TAURI_INVOKE<TauriProjectCreationInformation>("environment_project_creation_information"),
	environmentCheckProjectName: (basePath: string, projectName: string) => __TAURI_INVOKE<TauriProjectDirCheckResult>("environment_check_project_name", { basePath, projectName }),
	environmentCreateProject: (basePath: string, projectName: string, templateId: string, templateVersion: number, unityVersion: string) => __TAURI_INVOKE<TauriCreateProjectResult>("environment_create_project", { basePath, projectName, templateId, templateVersion, unityVersion }),
	environmentRefetchPackages: () => __TAURI_INVOKE<null>("environment_refetch_packages"),
	environmentPackages: () => __TAURI_INVOKE<TauriPackage[]>("environment_packages"),
	environmentRepositoriesInfo: () => __TAURI_INVOKE<TauriRepositoriesInfo>("environment_repositories_info"),
	environmentHideRepository: (repository: string) => __TAURI_INVOKE<null>("environment_hide_repository", { repository }),
	environmentShowRepository: (repository: string) => __TAURI_INVOKE<null>("environment_show_repository", { repository }),
	environmentSetHideLocalUserPackages: (value: boolean) => __TAURI_INVOKE<null>("environment_set_hide_local_user_packages", { value }),
	environmentDownloadRepository: (url: string, headers: { [key in string]: string }) => __TAURI_INVOKE<TauriDownloadRepository>("environment_download_repository", { url, headers }),
	environmentAddRepository: (url: string, headers: { [key in string]: string }) => __TAURI_INVOKE<TauriAddRepositoryResult>("environment_add_repository", { url, headers }),
	environmentRemoveRepository: (index: number, expectedId: string) => __TAURI_INVOKE<null>("environment_remove_repository", { index, expectedId }),
	environmentReorderRepositories: (repos: TauriUserRepositoryRef[]) => __TAURI_INVOKE<null>("environment_reorder_repositories", { repos }),
	environmentImportRepositoryPick: () => __TAURI_INVOKE<TauriImportRepositoryPickResult>("environment_import_repository_pick"),
	environmentImportDownloadRepositories: (channel: string, repositories: TauriRepositoryDescriptor[]) => __TAURI_INVOKE<AsyncCallResult<number, ([TauriRepositoryDescriptor, TauriDownloadRepository])[]>>("environment_import_download_repositories", { channel, repositories }),
	environmentImportAddRepositories: (repositories: TauriRepositoryDescriptor[]) => __TAURI_INVOKE<null>("environment_import_add_repositories", { repositories }),
	environmentExportRepositories: () => __TAURI_INVOKE<null>("environment_export_repositories"),
	environmentClearPackageCache: () => __TAURI_INVOKE<null>("environment_clear_package_cache"),
	environmentGetUserPackages: () => __TAURI_INVOKE<TauriUserPackage[]>("environment_get_user_packages"),
	environmentAddUserPackageWithPicker: () => __TAURI_INVOKE<TauriAddUserPackageWithPickerResult>("environment_add_user_package_with_picker"),
	environmentRemoveUserPackages: (path: string) => __TAURI_INVOKE<null>("environment_remove_user_packages", { path }),
	environmentUnityVersions: () => __TAURI_INVOKE<TauriUnityVersions>("environment_unity_versions"),
	environmentGetSettings: () => __TAURI_INVOKE<TauriEnvironmentSettings>("environment_get_settings"),
	environmentPickUnityHub: () => __TAURI_INVOKE<TauriPickUnityHubResult>("environment_pick_unity_hub"),
	environmentPickUnity: () => __TAURI_INVOKE<TauriPickUnityResult>("environment_pick_unity"),
	environmentPickProjectDefaultPath: () => __TAURI_INVOKE<TauriPickProjectDefaultPathResult>("environment_pick_project_default_path"),
	environmentPickProjectBackupPath: () => __TAURI_INVOKE<TauriPickProjectBackupPathResult>("environment_pick_project_backup_path"),
	environmentSetShowPrereleasePackages: (value: boolean) => __TAURI_INVOKE<null>("environment_set_show_prerelease_packages", { value }),
	environmentSetBackupFormat: (backupFormat: string) => __TAURI_INVOKE<null>("environment_set_backup_format", { backupFormat }),
	environmentSetExcludeVpmPackagesFromBackup: (excludeVpmPackagesFromBackup: boolean) => __TAURI_INVOKE<null>("environment_set_exclude_vpm_packages_from_backup", { excludeVpmPackagesFromBackup }),
	environmentSetReleaseChannel: (releaseChannel: string) => __TAURI_INVOKE<null>("environment_set_release_channel", { releaseChannel }),
	environmentSetUseAlcomForVccProtocol: (useAlcomForVccProtocol: boolean) => __TAURI_INVOKE<null>("environment_set_use_alcom_for_vcc_protocol", { useAlcomForVccProtocol }),
	environmentGetDefaultUnityArguments: () => __TAURI_INVOKE<string[]>("environment_get_default_unity_arguments"),
	environmentSetDefaultUnityArguments: (defaultUnityArguments: string[] | null) => __TAURI_INVOKE<null>("environment_set_default_unity_arguments", { defaultUnityArguments }),
	environmentExportTemplate: (id: string) => __TAURI_INVOKE<null>("environment_export_template", { id }),
	environmentGetAlcomTemplate: (id: string) => __TAURI_INVOKE<TauriAlcomTemplate>("environment_get_alcom_template", { id }),
	environmentPickUnityPackages: () => __TAURI_INVOKE<string[]>("environment_pick_unity_packages"),
	environmentPickUnityPackage: (current: string) => __TAURI_INVOKE<TauriPickUnityPackageResult>("environment_pick_unity_package", { current }),
	environmentSaveTemplate: (id: string | null, base: string, name: string, unityRange: string, vpmPackages: ([string, string])[], unityPackages: string[]) => __TAURI_INVOKE<null>("environment_save_template", { id, base, name, unityRange, vpmPackages, unityPackages }),
	environmentRemoveTemplate: (id: string) => __TAURI_INVOKE<null>("environment_remove_template", { id }),
	environmentImportTemplate: () => __TAURI_INVOKE<TauriImportTemplateResult_Serialize>("environment_import_template"),
	environmentImportTemplateOverride: (importOverride: TauriImportDuplicated_Deserialize[]) => __TAURI_INVOKE<number>("environment_import_template_override", { importOverride }),
	environmentUpdateUnityPathsFromUnityHub: () => __TAURI_INVOKE<boolean>("environment_update_unity_paths_from_unity_hub"),
	environmentIsLoadingFromUnityHubInProgress: () => __TAURI_INVOKE<boolean>("environment_is_loading_from_unity_hub_in_progress"),
	environmentWaitForUnityHubUpdate: () => __TAURI_INVOKE<void>("environment_wait_for_unity_hub_update"),
	projectDetails: (projectPath: string) => __TAURI_INVOKE<TauriProjectDetails>("project_details", { projectPath }),
	projectInstallPackages: (projectPath: string, installs: ([string, string])[]) => __TAURI_INVOKE<TauriPendingProjectChanges>("project_install_packages", { projectPath, installs }),
	projectReinstallPackages: (projectPath: string, packageIds: string[]) => __TAURI_INVOKE<TauriPendingProjectChanges>("project_reinstall_packages", { projectPath, packageIds }),
	projectResolve: (projectPath: string) => __TAURI_INVOKE<TauriPendingProjectChanges>("project_resolve", { projectPath }),
	projectRemovePackages: (projectPath: string, names: string[]) => __TAURI_INVOKE<TauriPendingProjectChanges>("project_remove_packages", { projectPath, names }),
	projectApplyPendingChanges: (channel: string, projectPath: string, changesVersion: number) => __TAURI_INVOKE<null>("project_apply_pending_changes", { channel, projectPath, changesVersion }),
	projectCancelApplyPendingChanges: () => __TAURI_INVOKE<boolean>("project_cancel_apply_pending_changes"),
	projectClearPendingChanges: () => __TAURI_INVOKE<null>("project_clear_pending_changes"),
	projectMigrateProjectTo2022: (projectPath: string) => __TAURI_INVOKE<null>("project_migrate_project_to_2022", { projectPath }),
	projectCallUnityForMigration: (channel: string, projectPath: string, unityPath: string) => __TAURI_INVOKE<AsyncCallResult<string, TauriCallUnityForMigrationResult>>("project_call_unity_for_migration", { channel, projectPath, unityPath }),
	projectMigrateProjectToVpm: (projectPath: string) => __TAURI_INVOKE<null>("project_migrate_project_to_vpm", { projectPath }),
	projectOpenUnity: (projectPath: string, unityPath: string) => __TAURI_INVOKE<boolean>("project_open_unity", { projectPath, unityPath }),
	projectIsUnityLaunching: (projectPath: string) => __TAURI_INVOKE<boolean>("project_is_unity_launching", { projectPath }),
	projectCreateBackup: (channel: string, projectPath: string) => __TAURI_INVOKE<AsyncCallResult<TauriCreateBackupProgress, null>>("project_create_backup", { channel, projectPath }),
	projectGetCustomUnityArgs: (projectPath: string) => __TAURI_INVOKE<string[] | null>("project_get_custom_unity_args", { projectPath }),
	projectSetCustomUnityArgs: (projectPath: string, args: string[] | null) => __TAURI_INVOKE<boolean>("project_set_custom_unity_args", { projectPath, args }),
	projectGetUnityPath: (projectPath: string) => __TAURI_INVOKE<string | null>("project_get_unity_path", { projectPath }),
	projectSetUnityPath: (projectPath: string, unityPath: string | null) => __TAURI_INVOKE<boolean>("project_set_unity_path", { projectPath, unityPath }),
	utilOpen: (path: string, ifNotExists: OpenOptions) => __TAURI_INVOKE<null>("util_open", { path, ifNotExists }),
	utilOpenUrl: (url: string) => __TAURI_INVOKE<null>("util_open_url", { url }),
	utilOpenUrlNocheck: (url: string) => __TAURI_INVOKE<null>("util_open_url_nocheck", { url }),
	utilGetLogEntries: () => __TAURI_INVOKE<LogEntry_Serialize[]>("util_get_log_entries"),
	utilGetVersion: () => __TAURI_INVOKE<string>("util_get_version"),
	utilFrontendReady: () => __TAURI_INVOKE<null>("util_frontend_ready"),
	utilCheckForUpdate: (manual: boolean) => __TAURI_INVOKE<{
	version: number,
	current_version: string,
	latest_version: string,
	updater_status: UpdaterStatus,
	update_description: string | null,
	updater_disabled_messages: { [key in string]: string } | null,
} | null>("util_check_for_update", { manual }),
	utilInstallAndUpgrade: (channel: string, version: number) => __TAURI_INVOKE<AsyncCallResult<InstallUpgradeProgress, null>>("util_install_and_upgrade", { channel, version }),
	utilIsBadHostname: () => __TAURI_INVOKE<boolean>("util_is_bad_hostname"),
	utilPickDirectory: (current: string) => __TAURI_INVOKE<TauriPickProjectDefaultPathResult>("util_pick_directory", { current }),
	deepLinkHasAddRepository: () => __TAURI_INVOKE<boolean>("deep_link_has_add_repository"),
	deepLinkTakeAddRepository: () => __TAURI_INVOKE<{
	url: string,
	headers: { [key in string]: string },
} | null>("deep_link_take_add_repository"),
	deepLinkInstallVcc: () => __TAURI_INVOKE<void>("deep_link_install_vcc"),
	deepLinkImportedClearNonToastedCount: () => __TAURI_INVOKE<number>("deep_link_imported_clear_non_toasted_count"),
	deepLinkReduceImportedClearNonToastedCount: (reduce: number) => __TAURI_INVOKE<void>("deep_link_reduce_imported_clear_non_toasted_count", { reduce }),
};

/* Types */
export type AddRepositoryInfo = {
	url: string,
	headers: { [key in string]: string },
};

export type AsyncCallResult<P, R> = { type: "Result"; value: R } | { type: "Started" } | { type: "UnusedProgress"; progress: P };

export type CheckForUpdateResponse = {
	version: number,
	current_version: string,
	latest_version: string,
	updater_status: UpdaterStatus,
	update_description: string | null,
	updater_disabled_messages: { [key in string]: string } | null,
};

export type GlobalInfo = {
	language: string,
	theme: string,
	version: string | null,
	commitHash: string | null,
	osType: string,
	arch: string,
	osInfo: string,
	webviewVersion: string,
	appData: string,
	defaultUnityArguments: string[],
	vpmHomeFolder: string,
	checkForUpdates: boolean,
	shouldInstallDeepLink: boolean,
};

// Errors that is expected to be handled on the GUI side
export type HandleableRustError = { type: "MissingDependencies"; dependencies: ([string, string])[] };

export type InstallUpgradeProgress = { type: "DownloadProgress"; received: number; total: number | null } | { type: "DownloadComplete" };

export type LocalizableRustError = {
	id: string,
	args: { [key in string]: string },
};

export type LogEntry = LogEntry_Serialize | LogEntry_Deserialize;

export type LogEntry_Deserialize = {
	time: string,
	level: LogLevel,
	target: string,
	message: string,
	gui_toast: boolean | null,
};

export type LogEntry_Serialize = {
	time: string,
	level: LogLevel,
	target: string,
	message: string,
	gui_toast: boolean | null,
};

export type LogLevel = "Error" | "Warn" | "Info" | "Debug" | "Trace";

export type McpRecentClientStatus = {
	sessionId: string,
	name: string,
	version: string | null,
	lastSeenUnixMs: number,
};

export type McpStatus = {
	enabled: boolean,
	running: boolean,
	protocolVersion: number,
	transport: string,
	host: string | null,
	port: number | null,
	pid: number,
	endpointFile: string,
	bridgeCommand: string,
	recentClients: McpRecentClientStatus[],
};

export type McpToolCallEvent = {
	requestId: string,
	toolName: string,
	phase: McpToolCallPhase,
};

export type McpToolCallPhase = "started" | "finished" | "failed";

export type OpenOptions = "ErrorIfNotExists" | "CreateFolderIfNotExists" | "OpenParentIfNotExists";

export type RustError = { type: "Unrecoverable"; message: string } | { type: "Localizable" } & (LocalizableRustError) | { type: "Handleable"; message: string; body: HandleableRustError };

export type SetupPages = "Appearance" | "UnityHub" | "ProjectPath" | "Backups" | "SystemSetting";

export type TauriAddProjectWithPickerResult = "NoFolderSelected" | "InvalidSelection" | "AlreadyAdded" | "Successful";

export type TauriAddRepositoryResult = "BadUrl" | "Success";

export type TauriAddUserPackageWithPickerResult = "NoFolderSelected" | "InvalidSelection" | "AlreadyAdded" | "Successful";

export type TauriAlcomTemplate = {
	display_name: string,
	base: string,
	unity_version: string | null,
	vpm_dependencies: { [key in string]: string },
	unity_packages: string[],
};

export type TauriBasePackageInfo = {
	name: string,
	display_name: string | null,
	description: string | null,
	keywords: string[],
	version: TauriVersion,
	unity: [number, number] | null,
	changelog_url: string | null,
	documentation_url: string | null,
	vpm_dependencies: string[],
	legacy_packages: string[],
	is_yanked: boolean,
};

export type TauriCallUnityForMigrationResult = { type: "ExistsWithNonZero"; status: string } | { type: "FinishedSuccessfully" };

export type TauriConflictInfo = {
	packages: string[],
	unity_conflict: boolean,
	unlocked_names: string[],
};

export type TauriCopyProjectProgress = {
	total: number,
	proceed: number,
	last_proceed: string,
};

export type TauriCreateBackupProgress = {
	total: number,
	proceed: number,
	last_proceed: string,
};

export type TauriCreateProjectResult = "AlreadyExists" | "TemplateNotFound" | "Successful";

export type TauriDownloadRepository = { type: "BadUrl" } | { type: "Duplicated"; reason: TauriDuplicatedReason; duplicated_name: string } | { type: "DownloadError"; message: string } | { type: "Success"; value: TauriRemoteRepositoryInfo };

export type TauriDuplicatedReason = "URLDuplicated" | "IDDuplicated";

export type TauriEnvironmentSettings = {
	default_project_path: string,
	project_backup_path: string,
	unity_hub: string,
	unity_paths: ([string, string, boolean])[],
	show_prerelease_packages: boolean,
	backup_format: string,
	release_channel: string,
	use_alcom_for_vcc_protocol: boolean,
	default_unity_arguments: string[] | null,
	gui_animation: boolean,
	gui_compact: boolean,
	unity_hub_access_method: UnityHubAccessMethod,
	exclude_vpm_packages_from_backup: boolean,
};

export type TauriImportDuplicated = TauriImportDuplicated_Serialize | TauriImportDuplicated_Deserialize;

export type TauriImportDuplicated_Deserialize = {
	id: string,
	existing_path: string,
	existing_name: string,
	existing_update_date: string | null,
	importing_name: string,
	importing_update_date: string | null,
	data: string,
};

export type TauriImportDuplicated_Serialize = {
	id: string,
	existing_path: string,
	existing_name: string,
	existing_update_date: string | null,
	importing_name: string,
	importing_update_date: string | null,
	data: string,
};

export type TauriImportRepositoryPickResult = { type: "NoFilePicked" } | { type: "ParsedRepositories"; repositories: TauriRepositoryDescriptor[]; unparsable_lines: string[] };

export type TauriImportTemplateResult = TauriImportTemplateResult_Serialize | TauriImportTemplateResult_Deserialize;

export type TauriImportTemplateResult_Deserialize = {
	imported: number,
	duplicates: TauriImportDuplicated_Deserialize[],
};

export type TauriImportTemplateResult_Serialize = {
	imported: number,
	duplicates: TauriImportDuplicated_Serialize[],
};

export type TauriPackage = {
	source: TauriPackageSource,
} & (TauriBasePackageInfo);

export type TauriPackageChange = ({ InstallNew: TauriBasePackageInfo }) & { Remove?: never } | ({ Remove: TauriRemoveReason }) & { InstallNew?: never };

export type TauriPackageSource = "LocalUser" | { Remote: {
	id: string,
	display_name: string,
} };

export type TauriPendingProjectChanges = {
	changes_version: number,
	package_changes: ([string, TauriPackageChange])[],
	remove_legacy_files: string[],
	remove_legacy_folders: string[],
	conflicts: ([string, TauriConflictInfo])[],
};

export type TauriPickProjectBackupPathResult = { type: "NoFolderSelected" } | { type: "InvalidSelection" } | { type: "Successful" };

export type TauriPickProjectDefaultPathResult = { type: "NoFolderSelected" } | { type: "InvalidSelection" } | { type: "Successful"; new_path: string };

export type TauriPickUnityHubResult = { type: "NoFolderSelected" } | { type: "InvalidSelection" } | { type: "Successful" };

export type TauriPickUnityPackageResult = { type: "NoFolderSelected" } | { type: "InvalidSelection" } | { type: "Successful"; new_path: string };

export type TauriPickUnityResult = "NoFolderSelected" | "InvalidSelection" | "AlreadyAdded" | "Successful";

export type TauriProject = {
	name: string,
	path: string,
	project_type: TauriProjectType,
	unity: string,
	unity_revision: string | null,
	last_modified: number,
	created_at: number,
	favorite: boolean,
	is_exists: boolean,
	is_valid: boolean | null,
};

export type TauriProjectApplyProgress = { type: "DownloadStarted"; package_name: string } | { type: "DownloadFinished"; package_name: string } | { type: "ExtractStarted"; package_name: string } | { type: "ExtractFinished"; package_name: string } | { type: "RemoveStarted"; package_name: string } | { type: "RemoveFinished"; package_name: string } | { type: "InstallStarted"; package_name: string } | { type: "InstallFinished"; package_name: string } | { type: "Failed"; package_name: string; message: string };

export type TauriProjectCreationInformation = {
	templates: TauriProjectTemplateInfo[],
	recent_project_locations: string[],
	favorite_templates: string[],
	last_used_template: string | null,
	templates_version: number,
	default_path: string,
};

export type TauriProjectDetails = {
	unity: [number, number],
	unity_str: string,
	unity_revision: string | null,
	installed_packages: ([string, TauriBasePackageInfo])[],
	should_resolve: boolean,
};

export type TauriProjectDirCheckResult = "InvalidNameForFolderName" | "MayCompatibilityProblem" | "WideChar" | "AlreadyExists" | "Ok";

export type TauriProjectTemplateInfo = {
	display_name: string,
	id: string,
	unity_versions: string[],
	update_date: string | null,
	has_unitypackage: boolean,
	source_path: string | null,
	available: boolean,
};

export type TauriProjectType = "Unknown" | "LegacySdk2" | "LegacyWorlds" | "LegacyAvatars" | "UpmWorlds" | "UpmAvatars" | "UpmStarter" | "Worlds" | "Avatars" | "VpmStarter";

export type TauriRemoteRepositoryInfo = {
	display_name: string,
	id: string,
	url: string,
	packages: TauriBasePackageInfo[],
};

export type TauriRemoveReason = "Requested" | "Legacy" | "Unused";

export type TauriRepositoriesInfo = {
	user_repositories: TauriUserRepository[],
	hidden_user_repositories: string[],
	hide_local_user_packages: boolean,
	show_prerelease_packages: boolean,
};

export type TauriRepositoryDescriptor = {
	url: string,
	headers: { [key in string]: string },
};

export type TauriRestoreProjectFromBackupProgress = {
	total: number,
	proceed: number,
	last_proceed: string,
};

export type TauriRestoreProjectFromBackupResult = "NoFileSelected" | "InvalidSelection" | "AlreadyExists" | "AlreadyAdded" | "Successful";

export type TauriUnityVersions = {
	unity_paths: ([string, string, boolean])[],
	recommended_version: string,
	install_recommended_version_link: string,
};

export type TauriUpdatedRealProjectInfo = {
	path: string,
	is_valid: boolean,
	project_type: TauriProjectType,
	unity: string,
	unity_revision: string | null,
};

export type TauriUserPackage = {
	path: string,
	package: TauriBasePackageInfo,
};

export type TauriUserRepository = {
	index: number,
	id: string,
	url: string | null,
	display_name: string,
};

export type TauriUserRepositoryRef = {
	index: number,
	id: string,
};

export type TauriVersion = {
	major: number,
	minor: number,
	patch: number,
	pre: string,
	build: string,
};

export type UnityHubAccessMethod = 
// Reads config files of Unity Hub
"ReadConfig" | 
// Launches headless Unity Hub in background
"CallHub";

export type UpdaterStatus = 
/**
 *  Update is found and can be updated automatically. UpdaterInformation is available
 * 
 *  User will proceed update.
 */
"Updatable" | 
/**
 *  Update is found, but installer or package for current architecture does not found.
 *  This can happen if platform support is removed.
 *  x86_64 macOS will become this state in near future, but other platforms may if new arch is expanded enough.
 * 
 *  Inform only
 */
"NoPlatform" | 
/**
 *  Update is found and installer is found, but current installation is different from
 *  the previous (detected) installation, or we failed to detect current installation path.
 * 
 *  Inform user to install update manually to prevent problem.
 */
"NotUpdatable" | 
/**
 *  Updater is disabled at build time. generally the installation is managed by package manager.
 * 
 *  Inform user to upgrade through package manager.
 *  Packager may customize information message by defining
 *  `VRC_GET_GUI_UPDATER_UPDATE_SUGGESTION_MESSAGE` environment variable at build time.
 */
"UpdaterDisabled";
