From 92fb4236cbfe7f43d1b6285031355e51743a7fcf Mon Sep 17 00:00:00 2001 From: jiangchen <1703935164@qq.com> Date: Wed, 2 Sep 2026 01:47:29 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20standard=20plugin=20client=20module=20?= =?UTF-8?q?=E2=80=94=20standalone=20DSHWatch=20settings=20section=20(setti?= =?UTF-8?q?ngs.section)=20+=20./client=20export=20+=20dsh.client?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- dist/dsh-watch-0.1.0.tgz | Bin 7084 -> 8897 bytes lib/client.js | 106 +++++++++++++++++++++++++++++++++++++++ package.json | 23 ++++++++- 3 files changed, 127 insertions(+), 2 deletions(-) create mode 100644 lib/client.js diff --git a/dist/dsh-watch-0.1.0.tgz b/dist/dsh-watch-0.1.0.tgz index 2a19614a03cab425d486a05b52bb72c204ef12c4..4f683812d1418527b10832799644ad55e44ece94 100644 GIT binary patch literal 8897 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 P%+G%Ud2p)v0CWHVwkB{f literal 7084 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 W^Yrud^YrsGKmP-ENP27lUH}02NCss9 diff --git a/lib/client.js b/lib/client.js new file mode 100644 index 0000000..d2e4b93 --- /dev/null +++ b/lib/client.js @@ -0,0 +1,106 @@ +/* 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"]; + + function apply(ctx) { + ctx.inject(["slots", "locale", "connection", "remote", "settingsScope"], (scope) => { + const api = scope.get("connection").api; + const injected = () => ({ api }); + scope.slots.register({ + name: "settings.section", + id: "dsh-watch", + order: 30, + label: () => "DSHWatch 设置", + locale: "dsh-watch.settings", + inject: injected + }, Section); + }); + } + + exports.apply = apply; + exports.inject = inject; + return module.exports; + } +}); diff --git a/package.json b/package.json index 57631a1..71a4a00 100644 --- a/package.json +++ b/package.json @@ -8,7 +8,8 @@ "lib", "cordis.patch.yml", "README.md", - "LICENSE" + "LICENSE", + "lib/client.js" ], "keywords": [ "dsh", @@ -21,6 +22,16 @@ "dsh": { "bundle": { "patch": "./cordis.patch.yml" + }, + "client": { + "inject": [ + "@deepseek-ai/dsh-client-runtime", + "@deepseek-ai/dsh-client-locale", + "@deepseek-ai/dsh-client-ui-slots", + "@deepseek-ai/dsh-client-ui-conversation", + "@deepseek-ai/dsh-client-modules" + ], + "platform": "web" } }, "dependencies": { @@ -35,5 +46,13 @@ "engines": { "node": ">=18" }, - "license": "MIT" + "license": "MIT", + "exports": { + ".": { + "default": "lib/index.js" + }, + "./client": { + "default": "lib/client.js" + } + } }