128 lines
4.9 KiB
JavaScript
128 lines
4.9 KiB
JavaScript
/* eslint-disable */
|
|
// DSHWatch 客户端插件:在 DSH 设置里注册一个一级「DSHWatch 设置」入口。
|
|
// 浏览器端模块(window.__ModuleLoader__ 格式),由 DSH 客户端加载。
|
|
window.__ModuleLoader__.load({
|
|
id: "dsh-watch-client",
|
|
factory: (require) => {
|
|
var module = { exports: {} };
|
|
var exports = module.exports;
|
|
Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
|
|
for (const p of ["react", "react/jsx-runtime"]) { const r = require(p); if (p.indexOf("jsx") >= 0) { module["reactJsx"] = r; } else { module["react"] = r; } }
|
|
const React = module["react"];
|
|
const { jsx, jsxs } = module["reactJsx"];
|
|
|
|
const NS = "dsh-watch";
|
|
const FIELDS = [
|
|
["mode", "模式", "relay | direct"],
|
|
["serverUrl", "服务器地址", "ws://host:port"],
|
|
["userId", "用户ID", "userId"],
|
|
["token", "Token", "token"],
|
|
["apiKey", "DeepSeek API Key", "sk-..."],
|
|
["host", "监听地址", "0.0.0.0"],
|
|
["port", "端口", "18321"],
|
|
["reconnectMs", "重连毫秒", "5000"],
|
|
["timeoutMs", "超时毫秒", "30000"]
|
|
];
|
|
|
|
function messageOf(error) {
|
|
return error instanceof Error ? error.message : String(error);
|
|
}
|
|
|
|
// 配置表单:读取/保存 dsh-watch 命名空间设置
|
|
function Section({ api }) {
|
|
const [values, setValues] = React.useState({});
|
|
const [error, setError] = React.useState(null);
|
|
const [saved, setSaved] = React.useState(false);
|
|
React.useEffect(() => {
|
|
let alive = true;
|
|
api.settings.get({ ns: NS }).then((res) => {
|
|
if (!alive) return;
|
|
if (res && res.result && res.result.ok) {
|
|
setValues(res.result.value || {});
|
|
} else {
|
|
setError(res && res.result ? res.result.error.message : "读取失败");
|
|
}
|
|
}).catch((e) => { if (alive) setError(messageOf(e)); });
|
|
return () => { alive = false; };
|
|
}, [api]);
|
|
|
|
const set = (k, v) => { setValues((prev) => ({ ...prev, [k]: v })); setSaved(false); };
|
|
|
|
const save = async () => {
|
|
setSaved(false);
|
|
try {
|
|
const res = await api.settings.update({ ns: NS, patch: values });
|
|
if (res && res.result && res.result.ok) { setSaved(true); setError(null); }
|
|
else setError(res && res.result ? res.result.error.message : "保存失败");
|
|
} catch (e) { setError(messageOf(e)); }
|
|
};
|
|
|
|
const row = ([key, label, ph]) => jsxs("label", { style: { display: "flex", flexDirection: "column", gap: 4, marginBottom: 12 }, children: [
|
|
jsx("span", { children: label, style: { fontSize: 12, color: "var(--dsw-alias-label-secondary)" } }),
|
|
jsx("input", {
|
|
value: values[key] === void 0 ? "" : String(values[key]),
|
|
placeholder: ph,
|
|
onChange: (e) => set(key, e.target.value),
|
|
style: { padding: 8, borderRadius: 6, border: "1px solid var(--dsw-alias-border-l2)", background: "var(--dsw-alias-bg-module-platform)", color: "var(--dsw-alias-label-primary)" }
|
|
})
|
|
] });
|
|
|
|
return jsxs("div", { children: [
|
|
jsx("h2", { children: "DSHWatch 设置", style: { fontSize: 16, margin: "0 0 8px" } }),
|
|
jsx("p", { children: "手机/手表远程控制 DeepSeek Harness 的配置。", style: { fontSize: 12, color: "var(--dsw-alias-label-tertiary)" } }),
|
|
jsxs("div", { children: [
|
|
...FIELDS.map((f) => row(f))
|
|
] }),
|
|
error ? jsx("p", { children: String(error), style: { color: "var(--dsw-danger)", fontSize: 12 } }) : null,
|
|
jsxs("div", { style: { display: "flex", gap: 8, alignItems: "center" }, children: [
|
|
jsxs("button", { type: "button", onClick: save, style: { padding: "8px 14px", borderRadius: 8, border: "none", background: "var(--dsw-alias-interactive-bg-default)", color: "var(--dsw-alias-label-primary)", cursor: "pointer" }, children: ["保存"] }),
|
|
saved ? jsx("span", { children: "已保存 ✓", style: { fontSize: 12, color: "var(--dsw-alias-label-secondary)" } }) : null
|
|
] })
|
|
] });
|
|
}
|
|
|
|
// 注入:连接 API 等
|
|
const inject = ["slots", "locale", "connection", "remote", "settingsScope"];
|
|
|
|
// 文案
|
|
const zh = {
|
|
nav: "DSHWatch 设置",
|
|
title: "DSHWatch 设置",
|
|
desc: "手机/手表远程控制 DeepSeek Harness 的配置。",
|
|
save: "保存",
|
|
saved: "已保存 ✓",
|
|
loading: "加载中…",
|
|
readErr: "读取失败",
|
|
saveErr: "保存失败"
|
|
};
|
|
const en = {
|
|
nav: "DSHWatch Settings",
|
|
title: "DSHWatch Settings",
|
|
desc: "Config for remote-controlling this Harness from DSHWatch phone/watch.",
|
|
save: "Save",
|
|
saved: "Saved ✓",
|
|
loading: "Loading…",
|
|
readErr: "Failed to read",
|
|
saveErr: "Failed to save"
|
|
};
|
|
|
|
function apply(ctx) {
|
|
ctx.locale.register("dsh-watch.settings", { zh, en });
|
|
const { api } = ctx.get("connection");
|
|
const injected = () => ({ api });
|
|
ctx.slots.inject("settings.section", () => ctx.slots.register({
|
|
name: "settings.section",
|
|
id: "dsh-watch",
|
|
order: 30,
|
|
label: () => ctx.locale.bind("dsh-watch.settings")("nav"),
|
|
locale: "dsh-watch.settings",
|
|
inject: injected
|
|
}, Section));
|
|
}
|
|
|
|
exports.apply = apply;
|
|
exports.inject = inject;
|
|
return module.exports;
|
|
}
|
|
});
|