Files
CC-Switch/src/lib/api/deeplink.ts
T
YoVinchen 0f959112b1 refactor(skill): remove skillsPath configuration (#310)
Remove the skillsPath field from SkillRepo and Skill structs since
recursive scanning now automatically discovers skills in all directories.
Simplify the UI by removing the path input field.
2025-11-28 16:26:28 +08:00

96 lines
2.2 KiB
TypeScript

import { invoke } from "@tauri-apps/api/core";
export type ResourceType = "provider" | "prompt" | "mcp" | "skill";
export interface DeepLinkImportRequest {
version: string;
resource: ResourceType;
// Common fields
app?: "claude" | "codex" | "gemini";
name?: string;
enabled?: boolean;
// Provider fields
homepage?: string;
endpoint?: string;
apiKey?: string;
icon?: string;
model?: string;
notes?: string;
haikuModel?: string;
sonnetModel?: string;
opusModel?: string;
// Prompt fields
content?: string;
description?: string;
// MCP fields
apps?: string; // "claude,codex,gemini"
// Skill fields
repo?: string;
directory?: string;
branch?: string;
// Config file fields
config?: string;
configFormat?: string;
configUrl?: string;
}
export interface McpImportResult {
importedCount: number;
importedIds: string[];
failed: Array<{
id: string;
error: string;
}>;
}
export type ImportResult =
| { type: "provider"; id: string }
| { type: "prompt"; id: string }
| {
type: "mcp";
importedCount: number;
importedIds: string[];
failed: Array<{ id: string; error: string }>;
}
| { type: "skill"; key: string };
export const deeplinkApi = {
/**
* Parse a deep link URL
* @param url The ccswitch:// URL to parse
* @returns Parsed deep link request
*/
parseDeeplink: async (url: string): Promise<DeepLinkImportRequest> => {
return invoke("parse_deeplink", { url });
},
/**
* Merge configuration from Base64/URL into a deep link request
* This is used to show the complete configuration in the confirmation dialog
* @param request The deep link import request
* @returns Merged deep link request with config fields populated
*/
mergeDeeplinkConfig: async (
request: DeepLinkImportRequest,
): Promise<DeepLinkImportRequest> => {
return invoke("merge_deeplink_config", { request });
},
/**
* Import a resource from a deep link request (unified handler)
* @param request The deep link import request
* @returns Import result based on resource type
*/
importFromDeeplink: async (
request: DeepLinkImportRequest,
): Promise<ImportResult> => {
return invoke("import_from_deeplink_unified", { request });
},
};