clay-server 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/LICENSE +21 -0
- package/README.md +281 -0
- package/bin/cli.js +2385 -0
- package/lib/cli-sessions.js +270 -0
- package/lib/config.js +237 -0
- package/lib/daemon.js +489 -0
- package/lib/ipc.js +112 -0
- package/lib/notes.js +120 -0
- package/lib/pages.js +664 -0
- package/lib/project.js +1433 -0
- package/lib/public/app.js +2795 -0
- package/lib/public/apple-touch-icon-dark.png +0 -0
- package/lib/public/apple-touch-icon.png +0 -0
- package/lib/public/css/base.css +264 -0
- package/lib/public/css/diff.css +128 -0
- package/lib/public/css/filebrowser.css +1114 -0
- package/lib/public/css/highlight.css +144 -0
- package/lib/public/css/icon-strip.css +296 -0
- package/lib/public/css/input.css +573 -0
- package/lib/public/css/menus.css +856 -0
- package/lib/public/css/messages.css +1445 -0
- package/lib/public/css/mobile-nav.css +354 -0
- package/lib/public/css/overlays.css +697 -0
- package/lib/public/css/rewind.css +505 -0
- package/lib/public/css/server-settings.css +761 -0
- package/lib/public/css/sidebar.css +936 -0
- package/lib/public/css/sticky-notes.css +358 -0
- package/lib/public/css/title-bar.css +314 -0
- package/lib/public/favicon-dark.svg +1 -0
- package/lib/public/favicon.svg +1 -0
- package/lib/public/icon-192-dark.png +0 -0
- package/lib/public/icon-192.png +0 -0
- package/lib/public/icon-512-dark.png +0 -0
- package/lib/public/icon-512.png +0 -0
- package/lib/public/icon-mono.svg +1 -0
- package/lib/public/index.html +762 -0
- package/lib/public/manifest.json +27 -0
- package/lib/public/modules/diff.js +398 -0
- package/lib/public/modules/events.js +21 -0
- package/lib/public/modules/filebrowser.js +1411 -0
- package/lib/public/modules/fileicons.js +172 -0
- package/lib/public/modules/icons.js +54 -0
- package/lib/public/modules/input.js +584 -0
- package/lib/public/modules/markdown.js +356 -0
- package/lib/public/modules/notifications.js +649 -0
- package/lib/public/modules/qrcode.js +70 -0
- package/lib/public/modules/rewind.js +345 -0
- package/lib/public/modules/server-settings.js +510 -0
- package/lib/public/modules/sidebar.js +1083 -0
- package/lib/public/modules/state.js +3 -0
- package/lib/public/modules/sticky-notes.js +688 -0
- package/lib/public/modules/terminal.js +697 -0
- package/lib/public/modules/theme.js +738 -0
- package/lib/public/modules/tools.js +1608 -0
- package/lib/public/modules/utils.js +56 -0
- package/lib/public/style.css +15 -0
- package/lib/public/sw.js +75 -0
- package/lib/push.js +124 -0
- package/lib/sdk-bridge.js +989 -0
- package/lib/server.js +582 -0
- package/lib/sessions.js +424 -0
- package/lib/terminal-manager.js +187 -0
- package/lib/terminal.js +24 -0
- package/lib/themes/ayu-light.json +9 -0
- package/lib/themes/catppuccin-latte.json +9 -0
- package/lib/themes/catppuccin-mocha.json +9 -0
- package/lib/themes/clay-light.json +10 -0
- package/lib/themes/clay.json +10 -0
- package/lib/themes/dracula.json +9 -0
- package/lib/themes/everforest-light.json +9 -0
- package/lib/themes/everforest.json +9 -0
- package/lib/themes/github-light.json +9 -0
- package/lib/themes/gruvbox-dark.json +9 -0
- package/lib/themes/gruvbox-light.json +9 -0
- package/lib/themes/monokai.json +9 -0
- package/lib/themes/nord-light.json +9 -0
- package/lib/themes/nord.json +9 -0
- package/lib/themes/one-dark.json +9 -0
- package/lib/themes/one-light.json +9 -0
- package/lib/themes/rose-pine-dawn.json +9 -0
- package/lib/themes/rose-pine.json +9 -0
- package/lib/themes/solarized-dark.json +9 -0
- package/lib/themes/solarized-light.json +9 -0
- package/lib/themes/tokyo-night-light.json +9 -0
- package/lib/themes/tokyo-night.json +9 -0
- package/lib/updater.js +97 -0
- package/package.json +47 -0
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Everforest Light",
|
|
3
|
+
"author": "Sainnhe Park",
|
|
4
|
+
"variant": "light",
|
|
5
|
+
"base00": "fdf6e3", "base01": "f4f0d9", "base02": "e6e2cc", "base03": "a6b0a0",
|
|
6
|
+
"base04": "829181", "base05": "5c6a72", "base06": "3a464c", "base07": "272e33",
|
|
7
|
+
"base08": "f85552", "base09": "f57d26", "base0A": "dfa000", "base0B": "8da101",
|
|
8
|
+
"base0C": "35a77c", "base0D": "3a94c5", "base0E": "df69ba", "base0F": "9da9a0"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Everforest",
|
|
3
|
+
"author": "Sainnhe Park",
|
|
4
|
+
"variant": "dark",
|
|
5
|
+
"base00": "272e33", "base01": "2e383c", "base02": "414b50", "base03": "859289",
|
|
6
|
+
"base04": "9da9a0", "base05": "d3c6aa", "base06": "edeada", "base07": "fffbef",
|
|
7
|
+
"base08": "e67e80", "base09": "e69875", "base0A": "dbbc7f", "base0B": "a7c080",
|
|
8
|
+
"base0C": "83c092", "base0D": "7fbbb3", "base0E": "d699b6", "base0F": "9da9a0"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "GitHub Light",
|
|
3
|
+
"author": "GitHub",
|
|
4
|
+
"variant": "light",
|
|
5
|
+
"base00": "ffffff", "base01": "f6f8fa", "base02": "d8dee4", "base03": "afb8c1",
|
|
6
|
+
"base04": "6e7781", "base05": "424a53", "base06": "24292f", "base07": "1b1f24",
|
|
7
|
+
"base08": "cf222e", "base09": "bc4c00", "base0A": "9a6700", "base0B": "1a7f37",
|
|
8
|
+
"base0C": "0969da", "base0D": "0550ae", "base0E": "8250df", "base0F": "6e7781"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Gruvbox Dark",
|
|
3
|
+
"author": "Dawid Kurek, morhetz",
|
|
4
|
+
"variant": "dark",
|
|
5
|
+
"base00": "282828", "base01": "3c3836", "base02": "504945", "base03": "665c54",
|
|
6
|
+
"base04": "bdae93", "base05": "d5c4a1", "base06": "ebdbb2", "base07": "fbf1c7",
|
|
7
|
+
"base08": "fb4934", "base09": "fe8019", "base0A": "fabd2f", "base0B": "b8bb26",
|
|
8
|
+
"base0C": "8ec07c", "base0D": "83a598", "base0E": "d3869b", "base0F": "d65d0e"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Gruvbox Light",
|
|
3
|
+
"author": "Dawid Kurek, morhetz",
|
|
4
|
+
"variant": "light",
|
|
5
|
+
"base00": "fbf1c7", "base01": "ebdbb2", "base02": "d5c4a1", "base03": "a89984",
|
|
6
|
+
"base04": "7c6f64", "base05": "504945", "base06": "3c3836", "base07": "282828",
|
|
7
|
+
"base08": "9d0006", "base09": "af3a03", "base0A": "b57614", "base0B": "79740e",
|
|
8
|
+
"base0C": "427b58", "base0D": "076678", "base0E": "8f3f71", "base0F": "d65d0e"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Monokai",
|
|
3
|
+
"author": "Wimer Hazenberg",
|
|
4
|
+
"variant": "dark",
|
|
5
|
+
"base00": "272822", "base01": "383830", "base02": "49483e", "base03": "75715e",
|
|
6
|
+
"base04": "a59f85", "base05": "f8f8f2", "base06": "f5f4f1", "base07": "f9f8f5",
|
|
7
|
+
"base08": "f92672", "base09": "fd971f", "base0A": "f4bf75", "base0B": "a6e22e",
|
|
8
|
+
"base0C": "a1efe4", "base0D": "66d9ef", "base0E": "ae81ff", "base0F": "cc6633"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Nord Light",
|
|
3
|
+
"author": "threddast",
|
|
4
|
+
"variant": "light",
|
|
5
|
+
"base00": "E5E9F0", "base01": "C2D0E7", "base02": "B8C5DB", "base03": "AEBACF",
|
|
6
|
+
"base04": "60728C", "base05": "2E3440", "base06": "3B4252", "base07": "29838D",
|
|
7
|
+
"base08": "99324B", "base09": "AC4426", "base0A": "9A7500", "base0B": "4F894C",
|
|
8
|
+
"base0C": "398EAC", "base0D": "3B6EA8", "base0E": "97365B", "base0F": "5272AF"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Nord",
|
|
3
|
+
"author": "arcticicestudio",
|
|
4
|
+
"variant": "dark",
|
|
5
|
+
"base00": "2E3440", "base01": "3B4252", "base02": "434C5E", "base03": "4C566A",
|
|
6
|
+
"base04": "D8DEE9", "base05": "E5E9F0", "base06": "ECEFF4", "base07": "8FBCBB",
|
|
7
|
+
"base08": "BF616A", "base09": "D08770", "base0A": "EBCB8B", "base0B": "A3BE8C",
|
|
8
|
+
"base0C": "88C0D0", "base0D": "81A1C1", "base0E": "B48EAD", "base0F": "5E81AC"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "One Dark",
|
|
3
|
+
"author": "Lalit Magant",
|
|
4
|
+
"variant": "dark",
|
|
5
|
+
"base00": "282c34", "base01": "353b45", "base02": "3e4451", "base03": "545862",
|
|
6
|
+
"base04": "565c64", "base05": "abb2bf", "base06": "b6bdca", "base07": "c8ccd4",
|
|
7
|
+
"base08": "e06c75", "base09": "d19a66", "base0A": "e5c07b", "base0B": "98c379",
|
|
8
|
+
"base0C": "56b6c2", "base0D": "61afef", "base0E": "c678dd", "base0F": "be5046"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "One Light",
|
|
3
|
+
"author": "Daniel Pfeifer",
|
|
4
|
+
"variant": "light",
|
|
5
|
+
"base00": "FAFAFA", "base01": "F0F0F1", "base02": "E5E5E6", "base03": "A0A1A7",
|
|
6
|
+
"base04": "696C77", "base05": "383A42", "base06": "202227", "base07": "090A0B",
|
|
7
|
+
"base08": "CA1243", "base09": "D75F00", "base0A": "C18401", "base0B": "50A14F",
|
|
8
|
+
"base0C": "0184BC", "base0D": "4078F2", "base0E": "A626A4", "base0F": "986801"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Rosé Pine Dawn",
|
|
3
|
+
"author": "Emilia Dunfelt",
|
|
4
|
+
"variant": "light",
|
|
5
|
+
"base00": "faf4ed", "base01": "fffaf3", "base02": "dfdad9", "base03": "9893a5",
|
|
6
|
+
"base04": "797593", "base05": "575279", "base06": "26233a", "base07": "191724",
|
|
7
|
+
"base08": "b4637a", "base09": "ea9d34", "base0A": "d7827e", "base0B": "286983",
|
|
8
|
+
"base0C": "56949f", "base0D": "907aa9", "base0E": "ea9d34", "base0F": "cecacd"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Rosé Pine",
|
|
3
|
+
"author": "Emilia Dunfelt",
|
|
4
|
+
"variant": "dark",
|
|
5
|
+
"base00": "191724", "base01": "1f1d2e", "base02": "26233a", "base03": "6e6a86",
|
|
6
|
+
"base04": "908caa", "base05": "e0def4", "base06": "e0def4", "base07": "524f67",
|
|
7
|
+
"base08": "eb6f92", "base09": "f6c177", "base0A": "ebbcba", "base0B": "31748f",
|
|
8
|
+
"base0C": "9ccfd8", "base0D": "c4a7e7", "base0E": "f6c177", "base0F": "524f67"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Solarized Dark",
|
|
3
|
+
"author": "Ethan Schoonover",
|
|
4
|
+
"variant": "dark",
|
|
5
|
+
"base00": "002b36", "base01": "073642", "base02": "586e75", "base03": "657b83",
|
|
6
|
+
"base04": "839496", "base05": "93a1a1", "base06": "eee8d5", "base07": "fdf6e3",
|
|
7
|
+
"base08": "dc322f", "base09": "cb4b16", "base0A": "b58900", "base0B": "859900",
|
|
8
|
+
"base0C": "2aa198", "base0D": "268bd2", "base0E": "6c71c4", "base0F": "d33682"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Solarized Light",
|
|
3
|
+
"author": "Ethan Schoonover",
|
|
4
|
+
"variant": "light",
|
|
5
|
+
"base00": "fdf6e3", "base01": "eee8d5", "base02": "d3cbb7", "base03": "93a1a1",
|
|
6
|
+
"base04": "839496", "base05": "586e75", "base06": "073642", "base07": "002b36",
|
|
7
|
+
"base08": "dc322f", "base09": "cb4b16", "base0A": "b58900", "base0B": "859900",
|
|
8
|
+
"base0C": "2aa198", "base0D": "268bd2", "base0E": "6c71c4", "base0F": "d33682"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Tokyo Night Light",
|
|
3
|
+
"author": "folke",
|
|
4
|
+
"variant": "light",
|
|
5
|
+
"base00": "D5D6DB", "base01": "CBCCD1", "base02": "DFE0E5", "base03": "9699A3",
|
|
6
|
+
"base04": "4C505E", "base05": "343B59", "base06": "1A1B26", "base07": "1A1B26",
|
|
7
|
+
"base08": "8C4351", "base09": "965027", "base0A": "8F5E15", "base0B": "33635C",
|
|
8
|
+
"base0C": "0F4B6E", "base0D": "34548A", "base0E": "5A4A78", "base0F": "655259"
|
|
9
|
+
}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Tokyo Night",
|
|
3
|
+
"author": "Michaël Ball",
|
|
4
|
+
"variant": "dark",
|
|
5
|
+
"base00": "1A1B26", "base01": "16161E", "base02": "2F3549", "base03": "444B6A",
|
|
6
|
+
"base04": "787C99", "base05": "A9B1D6", "base06": "CBCCD1", "base07": "D5D6DB",
|
|
7
|
+
"base08": "C0CAF5", "base09": "A9B1D6", "base0A": "0DB9D7", "base0B": "9ECE6A",
|
|
8
|
+
"base0C": "B4F9F8", "base0D": "2AC3DE", "base0E": "BB9AF7", "base0F": "F7768E"
|
|
9
|
+
}
|
package/lib/updater.js
ADDED
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
const https = require("https");
|
|
2
|
+
const { execSync, spawn } = require("child_process");
|
|
3
|
+
|
|
4
|
+
// ANSI helpers (mirrors cli.js)
|
|
5
|
+
var isBasicTerm = process.env.TERM_PROGRAM === "Apple_Terminal";
|
|
6
|
+
var a = {
|
|
7
|
+
reset: "\x1b[0m",
|
|
8
|
+
bold: "\x1b[1m",
|
|
9
|
+
dim: "\x1b[2m",
|
|
10
|
+
clay: isBasicTerm ? "\x1b[34m" : "\x1b[38;2;88;87;252m", // #5857FC Indigo — active interaction
|
|
11
|
+
green: "\x1b[32m",
|
|
12
|
+
yellow: "\x1b[33m",
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
var sym = {
|
|
16
|
+
pointer: a.clay + "\u25C6" + a.reset,
|
|
17
|
+
done: a.green + "\u25C7" + a.reset,
|
|
18
|
+
bar: a.dim + "\u2502" + a.reset,
|
|
19
|
+
warn: a.yellow + "\u25B2" + a.reset,
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
function log(s) { console.log(" " + s); }
|
|
23
|
+
|
|
24
|
+
function fetchLatestVersion() {
|
|
25
|
+
return new Promise(function (resolve) {
|
|
26
|
+
var req = https.get("https://registry.npmjs.org/clay-server/latest", function (res) {
|
|
27
|
+
var data = "";
|
|
28
|
+
res.on("data", function (chunk) { data += chunk; });
|
|
29
|
+
res.on("end", function () {
|
|
30
|
+
try {
|
|
31
|
+
resolve(JSON.parse(data).version || null);
|
|
32
|
+
} catch (e) {
|
|
33
|
+
resolve(null);
|
|
34
|
+
}
|
|
35
|
+
});
|
|
36
|
+
});
|
|
37
|
+
req.on("error", function () { resolve(null); });
|
|
38
|
+
req.setTimeout(3000, function () {
|
|
39
|
+
req.destroy();
|
|
40
|
+
resolve(null);
|
|
41
|
+
});
|
|
42
|
+
});
|
|
43
|
+
}
|
|
44
|
+
|
|
45
|
+
function isNewer(latest, current) {
|
|
46
|
+
if (!latest || !current) return false;
|
|
47
|
+
var lp = latest.split(".").map(Number);
|
|
48
|
+
var cp = current.split(".").map(Number);
|
|
49
|
+
for (var i = 0; i < 3; i++) {
|
|
50
|
+
var l = lp[i] || 0;
|
|
51
|
+
var c = cp[i] || 0;
|
|
52
|
+
if (l > c) return true;
|
|
53
|
+
if (l < c) return false;
|
|
54
|
+
}
|
|
55
|
+
return false;
|
|
56
|
+
}
|
|
57
|
+
|
|
58
|
+
function performUpdate() {
|
|
59
|
+
try {
|
|
60
|
+
execSync("npm install -g clay-server@latest", { stdio: "pipe" });
|
|
61
|
+
return true;
|
|
62
|
+
} catch (e) {
|
|
63
|
+
return false;
|
|
64
|
+
}
|
|
65
|
+
}
|
|
66
|
+
|
|
67
|
+
function reExec() {
|
|
68
|
+
var args = process.argv.slice(1).concat("--no-update");
|
|
69
|
+
var child = spawn(process.execPath, args, { stdio: "inherit" });
|
|
70
|
+
child.on("exit", function (code) {
|
|
71
|
+
process.exit(code);
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
|
|
75
|
+
async function checkAndUpdate(currentVersion, skipUpdate) {
|
|
76
|
+
if (skipUpdate) return false;
|
|
77
|
+
|
|
78
|
+
var latest = await fetchLatestVersion();
|
|
79
|
+
if (!latest || !isNewer(latest, currentVersion)) return false;
|
|
80
|
+
|
|
81
|
+
log(sym.pointer + " " + a.bold + "Update available" + a.reset + " " + a.dim + currentVersion + " -> " + latest + a.reset);
|
|
82
|
+
log(sym.bar + " Installing...");
|
|
83
|
+
|
|
84
|
+
if (performUpdate()) {
|
|
85
|
+
log(sym.done + " Updated to " + a.green + latest + a.reset);
|
|
86
|
+
log("");
|
|
87
|
+
reExec();
|
|
88
|
+
return true;
|
|
89
|
+
}
|
|
90
|
+
|
|
91
|
+
log(sym.warn + " " + a.yellow + "Update failed" + a.reset + a.dim + " (permission denied?)" + a.reset);
|
|
92
|
+
log(sym.bar + " " + a.dim + "Run manually: npm install -g clay-server@latest" + a.reset);
|
|
93
|
+
log("");
|
|
94
|
+
return false;
|
|
95
|
+
}
|
|
96
|
+
|
|
97
|
+
module.exports = { checkAndUpdate, fetchLatestVersion, isNewer };
|
package/package.json
ADDED
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "clay-server",
|
|
3
|
+
"version": "2.5.0",
|
|
4
|
+
"description": "Web UI for Claude Code. Any device. Push notifications.",
|
|
5
|
+
"bin": {
|
|
6
|
+
"clay-server": "./bin/cli.js"
|
|
7
|
+
},
|
|
8
|
+
"scripts": {
|
|
9
|
+
"dev": "node bin/cli.js --dev",
|
|
10
|
+
"prepack": "npm pkg delete bin.clay-dev",
|
|
11
|
+
"postpack": "npm pkg set bin.clay-dev=./bin/cli.js"
|
|
12
|
+
},
|
|
13
|
+
"files": [
|
|
14
|
+
"bin/",
|
|
15
|
+
"lib/"
|
|
16
|
+
],
|
|
17
|
+
"keywords": [
|
|
18
|
+
"claude",
|
|
19
|
+
"claude-code",
|
|
20
|
+
"cli",
|
|
21
|
+
"mobile",
|
|
22
|
+
"remote",
|
|
23
|
+
"relay",
|
|
24
|
+
"web-ui",
|
|
25
|
+
"tailscale"
|
|
26
|
+
],
|
|
27
|
+
"repository": {
|
|
28
|
+
"type": "git",
|
|
29
|
+
"url": "git+https://github.com/chadbyte/claude-relay.git"
|
|
30
|
+
},
|
|
31
|
+
"bugs": {
|
|
32
|
+
"url": "https://github.com/chadbyte/claude-relay/issues"
|
|
33
|
+
},
|
|
34
|
+
"homepage": "https://github.com/chadbyte/claude-relay#readme",
|
|
35
|
+
"author": "Chad",
|
|
36
|
+
"dependencies": {
|
|
37
|
+
"@anthropic-ai/claude-agent-sdk": "^0.2.63",
|
|
38
|
+
"@lydell/node-pty": "^1.2.0-beta.3",
|
|
39
|
+
"qrcode-terminal": "^0.12.0",
|
|
40
|
+
"web-push": "^3.6.7",
|
|
41
|
+
"ws": "^8.18.0"
|
|
42
|
+
},
|
|
43
|
+
"license": "MIT",
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=20.0.0"
|
|
46
|
+
}
|
|
47
|
+
}
|