dsh-claude-style 0.16.0-dev.27 → 0.16.1-dev.31
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/CHANGELOG.md +62 -0
- package/LICENSE +3 -2
- package/README.en.md +1 -0
- package/README.md +6 -0
- package/THIRD_PARTY_NOTICES.md +2 -0
- package/docs/FEATURES.en.md +4 -3
- package/docs/FEATURES.md +4 -3
- package/docs/SETTINGS.en.md +12 -6
- package/docs/SETTINGS.md +12 -6
- package/docs/STYLE.md +40 -1
- package/lib/assets/0443f196403b.js.br +0 -0
- package/lib/assets/39f1a2e69bb7.js.br +0 -0
- package/lib/assets/4d55814bc60a.js.br +0 -0
- package/lib/assets/6c257991027d.js.br +0 -0
- package/lib/assets/9abad5da303e.js.br +0 -0
- package/lib/assets/b55a1acf34e0.js.br +0 -0
- package/lib/assets/d2064c247435.js.br +0 -0
- package/lib/assets/manifest.json +28 -28
- package/lib/client.js +37 -11
- package/lib/host/brand.js +70 -1
- package/lib/host/cache-file.js +63 -25
- package/lib/host/harness-home.js +7 -3
- package/lib/host/index.js +4 -1
- package/lib/host/package-root.js +15 -13
- package/lib/host/peakrate.js +7 -4
- package/lib/host/routes.js +164 -72
- package/lib/host/search.js +44 -2
- package/lib/host/settings.js +137 -43
- package/lib/host/usage-record.js +5 -2
- package/lib/host/usage.js +57 -5
- package/lib/model-descriptions.json +0 -1322
- package/package.json +1 -1
- package/lib/assets/1cefeb3d67c7.js.br +0 -0
- package/lib/assets/1da1959a3cb1.js.br +0 -0
- package/lib/assets/2c3bd0b6c22c.js.br +0 -0
- package/lib/assets/34d559377558.js.br +0 -0
- package/lib/assets/acf9cf79c43e.js.br +0 -0
- package/lib/assets/b7ec75cf39a7.js.br +0 -0
- package/lib/assets/dab5fb383802.js.br +0 -0
- package/lib/host/http.js +0 -74
- package/lib/host/session-events.js +0 -40
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "dsh-claude-style",
|
|
3
3
|
"description": "Claude Code Desktop theme for DeepSeek Harness (dsh) web GUI — visual & interaction overhaul",
|
|
4
|
-
"version": "0.16.
|
|
4
|
+
"version": "0.16.1-dev.31",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"main": "lib/host/index.js",
|
|
7
7
|
"icon": "lib/claude-mark.svg",
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
|
Binary file
|
package/lib/host/http.js
DELETED
|
@@ -1,74 +0,0 @@
|
|
|
1
|
-
// packages/host/src/http.ts
|
|
2
|
-
function refusalOf(ctx, req) {
|
|
3
|
-
const connection = ctx.get("connection");
|
|
4
|
-
if (typeof connection?.requestRejection === "function") return connection.requestRejection(req);
|
|
5
|
-
if (!isLoopbackPeer(req.socket.remoteAddress)) return 403;
|
|
6
|
-
const host = req.headers.host;
|
|
7
|
-
if (host !== void 0) {
|
|
8
|
-
if (!URL.canParse(`http://${host}`)) return 403;
|
|
9
|
-
const name = new URL(`http://${host}`).hostname;
|
|
10
|
-
if (name !== "localhost" && name !== "[::1]" && !/^127\.\d+\.\d+\.\d+$/.test(name)) return 403;
|
|
11
|
-
}
|
|
12
|
-
const site = req.headers["sec-fetch-site"];
|
|
13
|
-
if (site !== void 0 && site !== "same-origin" && site !== "none") return 403;
|
|
14
|
-
const origin = req.headers.origin;
|
|
15
|
-
if (origin === void 0) return void 0;
|
|
16
|
-
if (!URL.canParse(origin)) return 403;
|
|
17
|
-
return new URL(origin).host === host ? void 0 : 403;
|
|
18
|
-
}
|
|
19
|
-
function isLoopbackPeer(address) {
|
|
20
|
-
if (address === void 0) return false;
|
|
21
|
-
const plain = address.startsWith("::ffff:") ? address.slice("::ffff:".length) : address;
|
|
22
|
-
return plain === "::1" || /^127\.\d{1,3}\.\d{1,3}\.\d{1,3}$/.test(plain);
|
|
23
|
-
}
|
|
24
|
-
function sendJson(res, status, payload) {
|
|
25
|
-
const body = Buffer.from(JSON.stringify(payload));
|
|
26
|
-
res.writeHead(status, {
|
|
27
|
-
"content-type": "application/json; charset=utf-8",
|
|
28
|
-
"content-length": String(body.byteLength),
|
|
29
|
-
"cache-control": "no-store"
|
|
30
|
-
});
|
|
31
|
-
res.end(body);
|
|
32
|
-
}
|
|
33
|
-
function methodRefused(req, res, methods) {
|
|
34
|
-
if (req.method !== void 0 && methods.includes(req.method)) return false;
|
|
35
|
-
res.writeHead(405, { allow: methods.join(", ") });
|
|
36
|
-
res.end();
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
function fenceRefused(ctx, req, res) {
|
|
40
|
-
const refused = refusalOf(ctx, req);
|
|
41
|
-
if (refused === void 0) return false;
|
|
42
|
-
sendJson(res, refused, { ok: false, error: refused === 401 ? "unauthorized" : "forbidden" });
|
|
43
|
-
return true;
|
|
44
|
-
}
|
|
45
|
-
function readRequestBody(req, limit) {
|
|
46
|
-
return new Promise((settle) => {
|
|
47
|
-
const chunks = [];
|
|
48
|
-
let size = 0;
|
|
49
|
-
let over = false;
|
|
50
|
-
req.on("data", (chunk) => {
|
|
51
|
-
if (over) return;
|
|
52
|
-
size += chunk.length;
|
|
53
|
-
if (size > limit) {
|
|
54
|
-
over = true;
|
|
55
|
-
settle(null);
|
|
56
|
-
return;
|
|
57
|
-
}
|
|
58
|
-
chunks.push(Buffer.from(chunk));
|
|
59
|
-
});
|
|
60
|
-
req.on("end", () => {
|
|
61
|
-
if (!over) settle(Buffer.concat(chunks));
|
|
62
|
-
});
|
|
63
|
-
req.on("error", () => {
|
|
64
|
-
if (!over) settle(null);
|
|
65
|
-
});
|
|
66
|
-
});
|
|
67
|
-
}
|
|
68
|
-
export {
|
|
69
|
-
fenceRefused,
|
|
70
|
-
methodRefused,
|
|
71
|
-
readRequestBody,
|
|
72
|
-
refusalOf,
|
|
73
|
-
sendJson
|
|
74
|
-
};
|
|
@@ -1,40 +0,0 @@
|
|
|
1
|
-
// packages/host/src/session-events.ts
|
|
2
|
-
function eventsOf(events) {
|
|
3
|
-
return Array.isArray(events) ? events : null;
|
|
4
|
-
}
|
|
5
|
-
function unreadableLog(error) {
|
|
6
|
-
const failure = error;
|
|
7
|
-
return failure?.code === "SESSION_QUERY_CORRUPT_SESSION" || failure?.code === "SESSION_QUERY_SESSION_NOT_FOUND" ? failure : null;
|
|
8
|
-
}
|
|
9
|
-
function reportUnreadable(ctx, error, sessionId, label) {
|
|
10
|
-
ctx.logger?.warn?.(`dsh-claude-style: session ${sessionId} left out of ${label}: ${unreadableLog(error)?.message}`);
|
|
11
|
-
}
|
|
12
|
-
function releaseObservation(observation) {
|
|
13
|
-
const named = observation.dispose;
|
|
14
|
-
if (typeof named === "function") named.call(observation);
|
|
15
|
-
else if (Symbol.dispose in observation) observation[Symbol.dispose]();
|
|
16
|
-
}
|
|
17
|
-
async function readEvents(ctx, sessionId, label) {
|
|
18
|
-
const query = ctx.get("sessionQuery");
|
|
19
|
-
if (query === null || query === void 0) return null;
|
|
20
|
-
try {
|
|
21
|
-
if (typeof query.observeSession === "function") {
|
|
22
|
-
const observation = await query.observeSession(sessionId, { projectionMode: "none" });
|
|
23
|
-
try {
|
|
24
|
-
return eventsOf(observation.events);
|
|
25
|
-
} finally {
|
|
26
|
-
releaseObservation(observation);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
if (typeof query.readSession !== "function") return null;
|
|
30
|
-
const snapshot = await query.readSession(sessionId);
|
|
31
|
-
return eventsOf(snapshot?.events);
|
|
32
|
-
} catch (error) {
|
|
33
|
-
if (unreadableLog(error) === null) throw error;
|
|
34
|
-
reportUnreadable(ctx, error, sessionId, label);
|
|
35
|
-
return null;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
export {
|
|
39
|
-
readEvents
|
|
40
|
-
};
|