Add README, plugin citations, and multi-platform release CI.

Ship screenshots and third-party notices for the desktop shell, and
package Windows, macOS, deb, rpm, and Flatpak from GitHub Releases.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
Tommy
2026-08-15 22:02:13 +08:00
commit f8a3c2dc6f
72 changed files with 10372 additions and 0 deletions

45
ui/inject/ingest.js Normal file
View File

@@ -0,0 +1,45 @@
(function () {
const IMAGE_PATH = /^(?:file:\/\/|(?:\/|\.{1,2}\/)).+\.(?:png|jpe?g|gif|webp|bmp|tiff?)$/i;
function looksLikeImagePath(text) {
const first = (text || "").trim().split(/\s+/, 1)[0] || "";
return IMAGE_PATH.test(first);
}
document.addEventListener("paste", function (e) {
try {
const items = Array.from(e.clipboardData ? e.clipboardData.items : []);
const files = items.filter(function (item) { return item.kind === "file"; })
.map(function (item) { return item.getAsFile(); })
.filter(Boolean);
if (files.length > 0) return;
const text = e.clipboardData ? (e.clipboardData.getData("text/plain") || "") : "";
const uris = e.clipboardData ? (e.clipboardData.getData("text/uri-list") || "") : "";
if (looksLikeImagePath(text) || looksLikeImagePath(uris)) {
e.preventDefault();
e.stopImmediatePropagation();
}
} catch (err) {}
}, true);
window.__dshDesktopPasteFiles = function (items) {
try {
const dt = new DataTransfer();
for (const item of items) {
const bin = atob(item.b64);
const bytes = new Uint8Array(bin.length);
for (let i = 0; i < bin.length; i++) bytes[i] = bin.charCodeAt(i);
dt.items.add(new File([bytes], item.name, { type: item.type }));
}
const drop = new DragEvent("drop", {
bubbles: true,
cancelable: true,
dataTransfer: dt
});
try {
Object.defineProperty(drop, "dataTransfer", { value: dt, configurable: true });
} catch (e) {}
document.dispatchEvent(drop);
} catch (err) {
console.error("dsh-desktop paste image failed", err);
}
};
})();