claude-relay 2.4.2 → 2.5.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/bin/cli.js +1 -2350
- package/package.json +7 -42
- package/LICENSE +0 -21
- package/README.md +0 -281
- package/lib/cli-sessions.js +0 -270
- package/lib/config.js +0 -222
- package/lib/daemon.js +0 -423
- package/lib/ipc.js +0 -112
- package/lib/pages.js +0 -714
- package/lib/project.js +0 -1224
- package/lib/public/app.js +0 -2157
- package/lib/public/apple-touch-icon.png +0 -0
- package/lib/public/css/base.css +0 -145
- package/lib/public/css/diff.css +0 -128
- package/lib/public/css/filebrowser.css +0 -1076
- package/lib/public/css/highlight.css +0 -144
- package/lib/public/css/input.css +0 -512
- package/lib/public/css/menus.css +0 -683
- package/lib/public/css/messages.css +0 -1159
- package/lib/public/css/overlays.css +0 -731
- package/lib/public/css/rewind.css +0 -529
- package/lib/public/css/sidebar.css +0 -794
- package/lib/public/favicon.svg +0 -26
- package/lib/public/icon-192.png +0 -0
- package/lib/public/icon-512.png +0 -0
- package/lib/public/icon-mono.svg +0 -19
- package/lib/public/index.html +0 -460
- package/lib/public/manifest.json +0 -27
- package/lib/public/modules/diff.js +0 -398
- package/lib/public/modules/events.js +0 -21
- package/lib/public/modules/filebrowser.js +0 -1375
- package/lib/public/modules/fileicons.js +0 -172
- package/lib/public/modules/icons.js +0 -54
- package/lib/public/modules/input.js +0 -578
- package/lib/public/modules/markdown.js +0 -149
- package/lib/public/modules/notifications.js +0 -643
- package/lib/public/modules/qrcode.js +0 -70
- package/lib/public/modules/rewind.js +0 -334
- package/lib/public/modules/sidebar.js +0 -628
- package/lib/public/modules/state.js +0 -3
- package/lib/public/modules/terminal.js +0 -658
- package/lib/public/modules/theme.js +0 -622
- package/lib/public/modules/tools.js +0 -1410
- package/lib/public/modules/utils.js +0 -56
- package/lib/public/style.css +0 -10
- package/lib/public/sw.js +0 -75
- package/lib/push.js +0 -125
- package/lib/sdk-bridge.js +0 -771
- package/lib/server.js +0 -577
- package/lib/sessions.js +0 -402
- package/lib/terminal-manager.js +0 -187
- package/lib/terminal.js +0 -24
- package/lib/themes/ayu-light.json +0 -9
- package/lib/themes/catppuccin-latte.json +0 -9
- package/lib/themes/catppuccin-mocha.json +0 -9
- package/lib/themes/claude-light.json +0 -9
- package/lib/themes/claude.json +0 -9
- package/lib/themes/dracula.json +0 -9
- package/lib/themes/everforest-light.json +0 -9
- package/lib/themes/everforest.json +0 -9
- package/lib/themes/github-light.json +0 -9
- package/lib/themes/gruvbox-dark.json +0 -9
- package/lib/themes/gruvbox-light.json +0 -9
- package/lib/themes/monokai.json +0 -9
- package/lib/themes/nord-light.json +0 -9
- package/lib/themes/nord.json +0 -9
- package/lib/themes/one-dark.json +0 -9
- package/lib/themes/one-light.json +0 -9
- package/lib/themes/rose-pine-dawn.json +0 -9
- package/lib/themes/rose-pine.json +0 -9
- package/lib/themes/solarized-dark.json +0 -9
- package/lib/themes/solarized-light.json +0 -9
- package/lib/themes/tokyo-night-light.json +0 -9
- package/lib/themes/tokyo-night.json +0 -9
- package/lib/updater.js +0 -96
|
@@ -1,149 +0,0 @@
|
|
|
1
|
-
import { copyToClipboard } from './utils.js';
|
|
2
|
-
import { refreshIcons } from './icons.js';
|
|
3
|
-
import { getMermaidThemeVars } from './theme.js';
|
|
4
|
-
|
|
5
|
-
// Initialize markdown parser
|
|
6
|
-
marked.use({ gfm: true, breaks: false });
|
|
7
|
-
|
|
8
|
-
// Initialize mermaid
|
|
9
|
-
mermaid.initialize({
|
|
10
|
-
startOnLoad: false,
|
|
11
|
-
theme: "dark",
|
|
12
|
-
themeVariables: getMermaidThemeVars()
|
|
13
|
-
});
|
|
14
|
-
|
|
15
|
-
export function updateMermaidTheme(vars) {
|
|
16
|
-
mermaid.initialize({
|
|
17
|
-
startOnLoad: false,
|
|
18
|
-
theme: "dark",
|
|
19
|
-
themeVariables: vars
|
|
20
|
-
});
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
var mermaidIdCounter = 0;
|
|
24
|
-
|
|
25
|
-
export function renderMarkdown(text) {
|
|
26
|
-
return DOMPurify.sanitize(marked.parse(text));
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
export function highlightCodeBlocks(el) {
|
|
30
|
-
el.querySelectorAll("pre code:not(.hljs):not(.language-mermaid)").forEach(function (block) {
|
|
31
|
-
hljs.highlightElement(block);
|
|
32
|
-
});
|
|
33
|
-
el.querySelectorAll("pre:not(.has-copy-btn):not([data-mermaid-processed])").forEach(function (pre) {
|
|
34
|
-
// Skip non-content code blocks (tool details, diffs, etc.)
|
|
35
|
-
if (!pre.querySelector("code")) return;
|
|
36
|
-
pre.classList.add("has-copy-btn");
|
|
37
|
-
pre.style.position = "relative";
|
|
38
|
-
var btn = document.createElement("button");
|
|
39
|
-
btn.className = "code-copy-btn";
|
|
40
|
-
btn.title = "Copy";
|
|
41
|
-
btn.innerHTML = '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>';
|
|
42
|
-
btn.addEventListener("click", function (e) {
|
|
43
|
-
e.stopPropagation();
|
|
44
|
-
var code = pre.querySelector("code");
|
|
45
|
-
var text = code ? code.textContent : pre.textContent;
|
|
46
|
-
copyToClipboard(text).then(function () {
|
|
47
|
-
btn.innerHTML = '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><polyline points="20 6 9 17 4 12"/></svg>';
|
|
48
|
-
setTimeout(function () {
|
|
49
|
-
btn.innerHTML = '<svg width="14" height="14" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><rect x="9" y="9" width="13" height="13" rx="2"/><path d="M5 15H4a2 2 0 0 1-2-2V4a2 2 0 0 1 2-2h9a2 2 0 0 1 2 2v1"/></svg>';
|
|
50
|
-
}, 1500);
|
|
51
|
-
});
|
|
52
|
-
});
|
|
53
|
-
pre.appendChild(btn);
|
|
54
|
-
});
|
|
55
|
-
}
|
|
56
|
-
|
|
57
|
-
export function renderMermaidBlocks(el) {
|
|
58
|
-
var blocks = el.querySelectorAll("pre code.language-mermaid");
|
|
59
|
-
blocks.forEach(function (codeEl) {
|
|
60
|
-
var pre = codeEl.parentElement;
|
|
61
|
-
if (!pre || pre.dataset.mermaidProcessed) return;
|
|
62
|
-
pre.dataset.mermaidProcessed = "true";
|
|
63
|
-
|
|
64
|
-
var source = codeEl.textContent;
|
|
65
|
-
if (!source || !source.trim()) return;
|
|
66
|
-
|
|
67
|
-
var id = "mermaid-" + (++mermaidIdCounter);
|
|
68
|
-
var container = document.createElement("div");
|
|
69
|
-
container.className = "mermaid-diagram";
|
|
70
|
-
|
|
71
|
-
try {
|
|
72
|
-
mermaid.render(id, source.trim()).then(function (result) {
|
|
73
|
-
container.innerHTML = result.svg;
|
|
74
|
-
container.addEventListener("click", function () {
|
|
75
|
-
showMermaidModal(container.innerHTML);
|
|
76
|
-
});
|
|
77
|
-
if (pre.parentNode) pre.parentNode.replaceChild(container, pre);
|
|
78
|
-
}).catch(function (err) {
|
|
79
|
-
pre.classList.add("mermaid-error");
|
|
80
|
-
var errHint = document.createElement("div");
|
|
81
|
-
errHint.className = "mermaid-error-hint";
|
|
82
|
-
errHint.textContent = "Diagram render failed";
|
|
83
|
-
if (pre.parentNode) pre.parentNode.insertBefore(errHint, pre.nextSibling);
|
|
84
|
-
var errDiv = document.getElementById("d" + id);
|
|
85
|
-
if (errDiv) errDiv.remove();
|
|
86
|
-
});
|
|
87
|
-
} catch (err) {
|
|
88
|
-
pre.classList.add("mermaid-error");
|
|
89
|
-
}
|
|
90
|
-
});
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
export function showMermaidModal(svgHtml) {
|
|
94
|
-
var modal = document.getElementById("mermaid-modal");
|
|
95
|
-
var body = document.getElementById("mermaid-modal-body");
|
|
96
|
-
if (!modal || !body) return;
|
|
97
|
-
body.innerHTML = svgHtml;
|
|
98
|
-
modal.classList.remove("hidden");
|
|
99
|
-
refreshIcons();
|
|
100
|
-
|
|
101
|
-
var dlBtn = document.getElementById("mermaid-download-btn");
|
|
102
|
-
dlBtn.onclick = function () {
|
|
103
|
-
downloadMermaidPng(body.querySelector("svg"));
|
|
104
|
-
};
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
export function closeMermaidModal() {
|
|
108
|
-
var modal = document.getElementById("mermaid-modal");
|
|
109
|
-
if (modal) modal.classList.add("hidden");
|
|
110
|
-
}
|
|
111
|
-
|
|
112
|
-
export function downloadMermaidPng(svgEl) {
|
|
113
|
-
if (!svgEl) return;
|
|
114
|
-
var svgClone = svgEl.cloneNode(true);
|
|
115
|
-
// Ensure dimensions
|
|
116
|
-
var bbox = svgEl.getBoundingClientRect();
|
|
117
|
-
var scale = 2; // 2x for retina quality
|
|
118
|
-
var w = bbox.width * scale;
|
|
119
|
-
var h = bbox.height * scale;
|
|
120
|
-
svgClone.setAttribute("width", w);
|
|
121
|
-
svgClone.setAttribute("height", h);
|
|
122
|
-
|
|
123
|
-
var serializer = new XMLSerializer();
|
|
124
|
-
var svgStr = serializer.serializeToString(svgClone);
|
|
125
|
-
var svgBlob = new Blob([svgStr], { type: "image/svg+xml;charset=utf-8" });
|
|
126
|
-
var url = URL.createObjectURL(svgBlob);
|
|
127
|
-
|
|
128
|
-
var img = new Image();
|
|
129
|
-
img.onload = function () {
|
|
130
|
-
var canvas = document.createElement("canvas");
|
|
131
|
-
canvas.width = w;
|
|
132
|
-
canvas.height = h;
|
|
133
|
-
var ctx = canvas.getContext("2d");
|
|
134
|
-
// Dark background
|
|
135
|
-
ctx.fillStyle = "#1E1D1A";
|
|
136
|
-
ctx.fillRect(0, 0, w, h);
|
|
137
|
-
ctx.drawImage(img, 0, 0, w, h);
|
|
138
|
-
URL.revokeObjectURL(url);
|
|
139
|
-
|
|
140
|
-
canvas.toBlob(function (blob) {
|
|
141
|
-
var a = document.createElement("a");
|
|
142
|
-
a.href = URL.createObjectURL(blob);
|
|
143
|
-
a.download = "diagram.png";
|
|
144
|
-
a.click();
|
|
145
|
-
URL.revokeObjectURL(a.href);
|
|
146
|
-
}, "image/png");
|
|
147
|
-
};
|
|
148
|
-
img.src = url;
|
|
149
|
-
}
|