Add Suno extension diagnostics

This commit is contained in:
DESKTOP-KSVGT20\shkim
2026-05-02 00:17:43 +09:00
parent ddf6b96775
commit d508c7fc80
+52 -2
View File
@@ -1,7 +1,7 @@
// ==UserScript== // ==UserScript==
// @name ChatGPT to Suno Prompt Copier // @name ChatGPT to Suno Prompt Copier
// @namespace local.suno-helper // @namespace local.suno-helper
// @version 0.7.3 // @version 0.7.4
// @description Copy structured ChatGPT song prompt versions into Suno fields. // @description Copy structured ChatGPT song prompt versions into Suno fields.
// @author local // @author local
// @match https://chatgpt.com/* // @match https://chatgpt.com/*
@@ -27,6 +27,7 @@
(function () { (function () {
"use strict"; "use strict";
const SCRIPT_VERSION = "0.7.4";
const STORAGE_KEY = "chatgptSunoPromptSlots"; const STORAGE_KEY = "chatgptSunoPromptSlots";
const SLOT_COUNT = 2; const SLOT_COUNT = 2;
const isChatGPT = location.hostname.includes("chatgpt.com") || location.hostname.includes("chat.openai.com"); const isChatGPT = location.hostname.includes("chatgpt.com") || location.hostname.includes("chat.openai.com");
@@ -205,7 +206,7 @@
if (mode) panel.classList.add(mode); if (mode) panel.classList.add(mode);
panel.innerHTML = ` panel.innerHTML = `
<div class="cgs-head"> <div class="cgs-head">
<span>${escapeHtml(title)}</span> <span>${escapeHtml(title)} <span class="cgs-muted">v${SCRIPT_VERSION}</span></span>
<button class="cgs-btn" type="button" data-cgs-toggle>_</button> <button class="cgs-btn" type="button" data-cgs-toggle>_</button>
</div> </div>
<div class="cgs-body"></div> <div class="cgs-body"></div>
@@ -1077,6 +1078,18 @@
} }
} }
async function readCompanionHealth() {
const response = await fetch("http://127.0.0.1:17873/health", {
method: "GET",
cache: "no-store",
});
const text = await response.text();
if (!response.ok) {
throw new Error(`${response.status} ${response.statusText}: ${text.slice(0, 160)}`);
}
return tryParseJson(text) || {};
}
async function bootSuno() { async function bootSuno() {
const body = createPanel("Suno Prompt Paste"); const body = createPanel("Suno Prompt Paste");
const slots = await readSlots(); const slots = await readSlots();
@@ -1103,6 +1116,9 @@
<div class="cgs-row"> <div class="cgs-row">
<button class="cgs-btn cgs-wide" type="button" data-cgs-test-companion>연결 테스트</button> <button class="cgs-btn cgs-wide" type="button" data-cgs-test-companion>연결 테스트</button>
</div> </div>
<div class="cgs-row">
<button class="cgs-btn cgs-wide" type="button" data-cgs-copy-diagnostics>진단 복사</button>
</div>
<div class="cgs-row"> <div class="cgs-row">
<button class="cgs-btn cgs-primary cgs-wide" type="button" data-cgs-process-library>WAV + 메타데이터 다운</button> <button class="cgs-btn cgs-primary cgs-wide" type="button" data-cgs-process-library>WAV + 메타데이터 다운</button>
</div> </div>
@@ -1211,6 +1227,40 @@
body.querySelector("[data-cgs-test-companion]").addEventListener("click", async () => { body.querySelector("[data-cgs-test-companion]").addEventListener("click", async () => {
await testCompanion(body); await testCompanion(body);
}); });
body.querySelector("[data-cgs-copy-diagnostics]").addEventListener("click", async () => {
if (!libraryTracks.length) {
libraryTracks = scanSunoLibraryTracks();
renderLibraryTrackSelect();
}
const selectedIndex = Number(libraryTrackSelect.value || 0);
const selectedTrack = libraryTracks[selectedIndex];
let health = {};
let healthError = "";
try {
health = await readCompanionHealth();
} catch (error) {
healthError = error.message || String(error);
}
const payload = {
scriptVersion: SCRIPT_VERSION,
location: location.href,
detectedTracks: libraryTracks.length,
visibleRows: getVisibleLibraryRows().length,
selectedIndex,
selectedTrack: selectedTrack ? {
id: selectedTrack.id || "",
title: selectedTrack.title || "",
hasWavUrl: Boolean(selectedTrack.wavUrl),
hasImageUrl: Boolean(selectedTrack.imageUrl),
hasLyrics: Boolean(selectedTrack.lyrics),
} : null,
capturedSunoResponses: capturedSunoResponses.length,
companion: healthError ? { ok: false, error: healthError } : health,
};
GM_setClipboard(JSON.stringify(payload, null, 2), "text");
setStatus(body, `진단 복사 완료: v${SCRIPT_VERSION}, 감지 ${libraryTracks.length}곡, 로컬 ${healthError ? "실패" : "OK"}`);
});
} }
function safeBootSuno() { function safeBootSuno() {