MCPcopy Create free account
hub / github.com/scriptscat/scriptcat / useInstallData

Function useInstallData

src/pages/install/hooks.tsx:34–715  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

32type ScriptOrSubscribe = Script | Subscribe;
33
34export function useInstallData() {
35 const [enable, setEnable] = useState<boolean>(false);
36 const [btnText, setBtnText] = useState<string>("");
37 const [scriptCode, setScriptCode] = useState<string>("");
38 const [scriptInfo, setScriptInfo] = useState<ScriptInfo>();
39 const [upsertScript, setUpsertScript] = useState<ScriptOrSubscribe | undefined>(undefined);
40 const [diffCode, setDiffCode] = useState<string>();
41 const [oldScriptVersion, setOldScriptVersion] = useState<string | null>(null);
42 const [isUpdate, setIsUpdate] = useState<boolean>(false);
43 const [localFileHandle, setLocalFileHandle] = useState<FileSystemFileHandle | null>(null);
44 const [showBackgroundPrompt, setShowBackgroundPrompt] = useState<boolean>(false);
45 const { t } = useTranslation();
46 const [searchParams, setSearchParams] = useSearchParams();
47 const [loaded, setLoaded] = useState<boolean>(false);
48 const [doBackwards, setDoBackwards] = useState<boolean>(false);
49 const [skillScriptMetadata, setSkillScriptMetadata] = useState<SkillScriptMetadata | null>(null);
50 const [watchFile, setWatchFile] = useState(false);
51 const closingWindowRef = useRef(false);
52
53 // Skill 安装相关状态(agent 关闭时不识别 skill 入口)
54 const skillInstallUuid = EnableAgent ? searchParams.get("skill") : null;
55 const [skillPreview, setSkillPreview] = useState<{
56 metadata: { name: string; description: string; version?: string };
57 prompt: string;
58 scripts: Array<{ name: string; code: string }>;
59 references: Array<{ name: string; content: string }>;
60 isUpdate: boolean;
61 installUrl?: string;
62 } | null>(null);
63
64 const installOrUpdateScript = async (newScript: Script, code: string) => {
65 if (newScript.ignoreVersion) newScript.ignoreVersion = "";
66 await scriptClient.install({ script: newScript, code });
67 const metadata = newScript.metadata;
68 setScriptInfo((prev) => (prev ? { ...prev, code, metadata } : prev));
69 const scriptVersion = metadata.version?.[0];
70 const oldScriptVersion = typeof scriptVersion === "string" ? scriptVersion : "N/A";
71 setOldScriptVersion(oldScriptVersion);
72 setUpsertScript(newScript);
73 setDiffCode(code);
74 };
75
76 const getUpdatedNewScript = async (uuid: string, code: string) => {
77 const oldScript = await scriptClient.info(uuid);
78 if (!oldScript || oldScript.uuid !== uuid) {
79 throw new Error("uuid is mismatched");
80 }
81 const { script } = await prepareScriptByCode(code, oldScript.origin || "", uuid);
82 script.origin = oldScript.origin || script.origin || "";
83 if (!script.name) {
84 throw new Error(t("script_name_cannot_be_set_to_empty"));
85 }
86 return script;
87 };
88
89 const checkBackgroundPrompt = async (script: Script) => {
90 if (!script.metadata.background && !script.metadata.crontab) {
91 return false;

Callers 1

AppFunction · 0.90

Calls 10

nextTimeDisplayFunction · 0.90
i18nNameFunction · 0.90
unmountFileTrackFunction · 0.90
initSkillFromCacheFunction · 0.85
initAsyncFunction · 0.85
setupWatchFileFunction · 0.85
handleUrlChangeAndFetchFunction · 0.85
pushMethod · 0.80
getMethod · 0.65
sliceMethod · 0.45

Tested by

no test coverage detected