@androidsup/dsh-plugin-updates 0.0.0-stage → 0.1.1

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.
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../src/client.jsx", "../package.json", "../src/panel.jsx", "../src/styles.mjs", "../src/intro.jsx"],
4
+ "sourcesContent": ["import { useEffect, useState } from 'react';\nimport { name as pluginName, version } from '../package.json';\nimport { PluginUpdatesPanel, Modal } from './panel.jsx';\nimport { styles } from './styles.mjs';\nimport { UpdatesIntro } from './intro.jsx';\nexport { UpdatesIntro };\n\nexport const name = 'dsh-plugin-updates-client';\nexport const inject = ['slots'];\nconst ENDPOINT = '/.well-known/dsh-plugin-updates';\nconst updateListeners = new Set();\nlet openUpdates;\nexport function apply(ctx) {\n openUpdates = () => ctx.get('pluginNavigation')?.openBundle(pluginName);\n ctx.slots.inject('plugins.bundle.config', () => ctx.slots.register({ name: 'plugins.bundle.config', key: pluginName }, UpdatesPage));\n ctx.slots.inject('shell.overlay', () => ctx.slots.register({ name: 'shell.overlay', id: 'dsh-plugin-updates-reminder' }, UpdateReminder));\n}\nasync function readResponse(response) {\n let value;\n try { value = await response.json(); } catch { throw Error('\u66F4\u65B0\u7BA1\u7406\u540E\u53F0\u5C1A\u672A\u8FDE\u63A5\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5'); }\n if (!response.ok) throw Error(value.error || '\u64CD\u4F5C\u672A\u5B8C\u6210');\n if (!value?.pluginUpdates || value.pluginVersion !== version) throw Error('\u66F4\u65B0\u7BA1\u7406\u524D\u540E\u53F0\u7248\u672C\u672A\u540C\u6B65\uFF0C\u8BF7\u5B8C\u5168\u9000\u51FA\u5E76\u91CD\u65B0\u6253\u5F00 DSH');\n return value;\n}\nfunction useUpdates() {\n const [data, setData] = useState(null), [error, setError] = useState(''), [busy, setBusy] = useState(false);\n const running = data?.pluginUpdates.job?.state === 'running';\n useEffect(() => {\n let live = true, pending = false;\n const abort = new AbortController();\n async function poll() {\n if (document.hidden || pending) return;\n pending = true;\n try {\n const value = await readResponse(await fetch(ENDPOINT, { cache: 'no-store', signal: AbortSignal.any([abort.signal, AbortSignal.timeout(8000)]) }));\n if (live) { setData(value); setError(''); }\n } catch (e) { if (live) setError(e.message); }\n finally { pending = false; }\n }\n void poll(); const timer = setInterval(poll, running ? 2000 : 60000);\n const sync = value => { if (live) { setData(value); setError(''); } };\n updateListeners.add(sync);\n document.addEventListener('visibilitychange', poll);\n return () => { live = false; abort.abort(); clearInterval(timer); updateListeners.delete(sync); document.removeEventListener('visibilitychange', poll); };\n }, [running]);\n async function act(action) {\n if (busy || !data) return false;\n setBusy(true); setError('');\n try {\n const value = await readResponse(await fetch(ENDPOINT, { method: 'POST',\n headers: { 'Content-Type': 'application/json', 'X-Plugin-Updates-Key': data.key }, body: JSON.stringify(action), signal: AbortSignal.timeout(15000) }));\n setData(value);\n for (const listener of updateListeners) listener(value);\n return value;\n } catch (e) { setError(e.message); return false; }\n finally { setBusy(false); }\n }\n return { data, error, busy, act };\n}\nexport function UpdatesPage() {\n const { data, error, busy, act } = useUpdates();\n return <main className=\"pu stack\"><style>{styles}</style><UpdatesIntro />\n {error && <p className=\"error\" role=\"alert\">{error}</p>}\n {data ? <PluginUpdatesPanel data={data.pluginUpdates} busy={busy} act={act} /> : <p role=\"status\">\u6B63\u5728\u8FDE\u63A5\u66F4\u65B0\u7BA1\u7406\u540E\u53F0\u2026</p>}\n </main>;\n}\nexport function UpdateReminder() {\n const { data, busy, act } = useUpdates();\n const [opened, setOpened] = useState(null), [error, setError] = useState('');\n const reminders = data?.pluginUpdates.reminders;\n useEffect(() => {\n setOpened(current => {\n if (!reminders?.length) return null;\n if (!current?.length) return document.querySelector('dialog[open]') ? null : reminders;\n const remaining = current.filter(row => reminders.some(next => next.key === row.key));\n return remaining.length ? remaining : null;\n });\n }, [reminders]);\n async function ignore(rows) {\n const result = await act({ action: 'plugins.ignore', keys: rows.map(row => row.targetKey) });\n if (!result) { setError('\u5FFD\u7565\u7248\u672C\u672A\u4FDD\u5B58\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5'); return; }\n setError('');\n setOpened(current => {\n const remaining = current?.filter(row => !rows.some(ignored => ignored.key === row.key));\n return remaining?.length ? remaining : null;\n });\n }\n async function dismiss(open = false) {\n const result = await act({ action: 'plugins.dismiss', keys: opened.map(row => row.key) });\n if (!result) { setError('\u63D0\u9192\u5904\u7406\u672A\u4FDD\u5B58\uFF0C\u8BF7\u7A0D\u540E\u91CD\u8BD5'); return; }\n setOpened(null);\n if (open) openUpdates?.();\n }\n if (!opened?.length || !data) return null;\n return <div className=\"pu\"><style>{styles}</style><Modal title=\"\u5DF2\u5B89\u88C5\u63D2\u4EF6\u6709\u66F4\u65B0\" busy={busy} close={() => { void dismiss(); }}>\n <div className=\"modal-body stack\"><p>{opened.length} \u4E2A\u63D2\u4EF6\u53EF\u66F4\u65B0\u3002\u4E0D\u4F1A\u81EA\u52A8\u5B89\u88C5\uFF0C\u8BF7\u5148\u67E5\u770B\u76EE\u6807\u7248\u672C\u3002</p>\n {error && <p role=\"alert\" className=\"error\">{error}</p>}\n <ul className=\"reminder-list\">{opened.map(row => <li key={row.key}><div className=\"bar\"><span className=\"mono\">{row.name} \u00B7 {row.version || '\u672A\u77E5\u7248\u672C'} \u2192 {row.latestCommit?.slice(0, 8) || row.latestVersion}</span><button disabled={busy} aria-label={`\u5FFD\u7565 ${row.name} \u6B64\u7248\u672C\u63D0\u9192`} onClick={() => { void ignore([row]); }}>\u5FFD\u7565\u6B64\u7248\u672C</button></div></li>)}</ul>\n <p className=\"notice\">\u5FFD\u7565\u4EC5\u5C4F\u853D\u5BF9\u5E94\u7248\u672C / \u63D0\u4EA4\u7684\u63D0\u9192\uFF0C\u91CD\u542F\u540E\u4FDD\u7559\uFF1B\u65B0\u7248\u672C\u4ECD\u63D0\u9192\u3002\u5728\u66F4\u65B0\u6E05\u5355\u53EF\u6062\u590D\u63D0\u9192\u6216\u624B\u52A8\u66F4\u65B0\u3002</p>\n <div className=\"row\"><button className=\"primary\" disabled={busy} onClick={() => { void dismiss(true); }}>\u67E5\u770B\u66F4\u65B0\u7BA1\u7406</button><button disabled={busy} onClick={() => { void ignore(opened); }}>\u5FFD\u7565\u4EE5\u4E0A\u7248\u672C</button><button disabled={busy} onClick={() => { void dismiss(); }}>\u7A0D\u540E\u5904\u7406</button></div>\n </div></Modal></div>;\n}\n", "{\n \"name\": \"@androidsup/dsh-plugin-updates\",\n \"version\": \"0.1.1\",\n \"repository\": {\n \"type\": \"git\",\n \"url\": \"https://github.com/AndroidSix/dsh-plugin-updates.git\"\n },\n \"description\": \"DSH \u63D2\u4EF6\u66F4\u65B0\u7BA1\u7406\uFF1A\u53EA\u7BA1\u5DF2\u5B89\u88C5\u63D2\u4EF6\uFF0C\u66F4\u65B0\u5148\u786E\u8BA4\u3001\u7ED3\u679C\u53EF\u6838\u9A8C\u3001\u53EF\u5FFD\u7565\u6307\u5B9A\u7248\u672C\u63D0\u9192\uFF0C\u4E0D\u662F\u63D2\u4EF6\u5E02\u573A\u3002 User-controlled, verified updates for installed DSH plugins, with per-release notification ignores. Not a marketplace.\",\n \"type\": \"module\",\n \"license\": \"MIT\",\n \"main\": \"lib/index.js\",\n \"exports\": {\n \".\": \"./lib/index.js\",\n \"./client\": \"./lib/client.js\",\n \"./package.json\": \"./package.json\",\n \"./cordis.patch.yml\": \"./cordis.patch.yml\"\n },\n \"engines\": {\n \"node\": \"^22.19.0 || >=24.0.0\"\n },\n \"files\": [\n \"lib\",\n \"cordis.patch.yml\",\n \"README.md\",\n \"README.en.md\",\n \"LICENSE\",\n \"THIRD_PARTY_NOTICES.md\",\n \"CHANGELOG.md\"\n ],\n \"dsh\": {\n \"bundle\": {\n \"patch\": \"./cordis.patch.yml\"\n },\n \"client\": {\n \"inject\": [\n \"@deepseek-ai/dsh-client-ui-renderer\"\n ],\n \"platform\": \"web\"\n }\n },\n \"scripts\": {\n \"build\": \"node scripts/build.mjs\",\n \"test\": \"node --test tests/*.test.mjs\",\n \"check\": \"npm run build && npm test\",\n \"pack:release\": \"npm run build && npm pack --ignore-scripts\",\n \"prepublishOnly\": \"npm run check\"\n },\n \"dependencies\": {\n \"yaml\": \"2.9.1\"\n },\n \"peerDependencies\": {\n \"@deepseek-ai/cordis\": \"^4.0.4\",\n \"@deepseek-ai/dsh-atomic-write\": \"^0.2.0-rc.2\",\n \"react\": \"^18.2.0\"\n },\n \"devDependencies\": {\n \"esbuild\": \"^0.25.0\",\n \"react-dom\": \"^18.2.0\"\n },\n \"keywords\": [\n \"dsh-plugin\",\n \"deepseek-harness\",\n \"plugin-updates\",\n \"update-management\"\n ],\n \"homepage\": \"https://github.com/AndroidSix/dsh-plugin-updates#readme\",\n \"bugs\": {\n \"url\": \"https://github.com/AndroidSix/dsh-plugin-updates/issues\"\n },\n \"publishConfig\": {\n \"access\": \"public\",\n \"registry\": \"https://registry.npmjs.org/\"\n }\n}\n", "import { useEffect, useRef, useState } from 'react';\nconst when = n => n ? new Date(n).toLocaleString('zh-CN', { hour12: false }) : '\u5C1A\u672A\u83B7\u53D6';\nexport function Modal({ title, close, children, busy }) {\n const ref = useRef(null);\n useEffect(() => { const dialog = ref.current; dialog.showModal(); return () => dialog.close(); }, []);\n return <dialog ref={ref} aria-label={title} onCancel={e => { e.preventDefault(); if (!busy) close(); }}>\n <div className=\"modal-head bar\"><h2>{title}</h2><button type=\"button\" disabled={busy} onClick={close}>\u5173\u95ED</button></div>{children}\n </dialog>;\n}\nconst updateNames = { unchecked: '\u5F85\u68C0\u67E5', available: '\u53EF\u66F4\u65B0', current: '\u5DF2\u540C\u6B65', pinned: '\u56FA\u5B9A\u63D0\u4EA4', unsupported: '\u672C\u5730\u6765\u6E90', failed: '\u68C0\u67E5 / \u5B89\u88C5\u5931\u8D25', installed: '\u5DF2\u5B89\u88C5' };\nexport function PluginUpdatesPanel({ data, busy, act }) {\n const [selected, setSelected] = useState([]), [plan, setPlan] = useState(null), [registry, setRegistry] = useState(''), [filter, setFilter] = useState('all'), [pluginSearch, setPluginSearch] = useState('');\n const [diagnostic, setDiagnostic] = useState(null), [copied, setCopied] = useState(false), [reminderNotice, setReminderNotice] = useState(null);\n const running = data?.job?.state === 'running', blocked = busy || running;\n const rows = (data?.rows ?? []).filter(r => r.source.kind !== 'builtin'), available = rows.filter(r => r.status === 'available' || r.status === 'failed' && r.target);\n useEffect(() => { if (data?.available && !running) void act({ action: !data.checkedAt || Date.now() - data.checkedAt > 86400000 ? 'plugins.check' : 'plugins.list' }); }, []);\n const notIgnored = available.filter(r => !r.ignored), ignored = available.filter(r => r.ignored);\n const chosen = available.filter(r => selected.includes(r.name));\n const freshVersions = plan ? [...new Set(plan.rows.filter(r => r.source.kind === 'npm' && r.latestVersion).map(r => `${r.source.package}@${r.latestVersion}`))] : [];\n const visibleRows = rows.filter(r => r.name.toLowerCase().includes(pluginSearch.toLowerCase()) && (filter === 'all' || (filter === 'updates' ? notIgnored.includes(r) : filter === 'ignored' ? ignored.includes(r) : r.source.kind === filter)));\n async function toggleReminder(row) {\n setReminderNotice(null);\n if (await act({ action: row.ignored ? 'plugins.unignore' : 'plugins.ignore', keys: [row.targetKey] })) {\n setReminderNotice({ name: row.name, targetKey: row.targetKey, ignored: !row.ignored, message: `${row.name}\uFF1A${row.ignored ? '\u5DF2\u6062\u590D\u6B64\u7248\u672C\u63D0\u9192' : '\u5DF2\u5FFD\u7565\u6B64\u7248\u672C\u63D0\u9192\uFF1B\u65B0\u7248\u672C\u4ECD\u4F1A\u63D0\u9192\uFF0C\u53EF\u968F\u65F6\u6062\u590D\u6216\u624B\u52A8\u66F4\u65B0'}` });\n if (!row.ignored) setSelected(names => names.filter(name => name !== row.name));\n }\n }\n async function submitPlan() {\n if (await act({ action: 'plugins.update', names: plan.rows.map(r => r.name), registry: registry || undefined, allowFreshVersions: plan.allowFresh === true ? freshVersions : [] })) { setPlan(null); setSelected([]); }\n }\n if (!data?.available) return <section className=\"box stack\"><h3>\u5F53\u524D DSH \u672A\u63D0\u4F9B\u63D2\u4EF6\u7BA1\u7406\u63A5\u53E3</h3><p>\u8BF7\u5347\u7EA7 DeepSeek Harness \u540E\u91CD\u8BD5\u3002\u672C\u9875\u7BA1\u7406\u5F53\u524D DSH \u914D\u7F6E\u4E2D\u7531\u7528\u6237\u5B89\u88C5\u7684\u63D2\u4EF6\u3002</p></section>;\n return <div className=\"stack\"><section className=\"box stack\"><div className=\"bar\"><div><h3>\u5DF2\u5B89\u88C5\u63D2\u4EF6</h3><p className=\"notice\">{rows.length} \u4E2A\u7528\u6237\u5B89\u88C5\u63D2\u4EF6 \u00B7 {available.length} \u4E2A\u53EF\u66F4\u65B0 \u00B7 {ignored.length} \u4E2A\u5DF2\u5FFD\u7565\u63D0\u9192</p></div><button className=\"primary\" disabled={blocked} onClick={() => { void act({ action: 'plugins.check' }); }}>\u68C0\u67E5\u5168\u90E8\u66F4\u65B0</button></div>\n <p className=\"notice\">\u4E0A\u6B21\u68C0\u67E5 {when(data.checkedAt)} \u00B7 \u6BCF\u5929\u81EA\u52A8\u68C0\u67E5\u5E76\u63D0\u9192</p>\n <p className=\"notice\">\u5FFD\u7565\u4EC5\u5C4F\u853D\u6307\u5B9A\u7248\u672C / \u63D0\u4EA4\u7684\u63D0\u9192\uFF0C\u91CD\u542F\u540E\u4FDD\u7559\uFF1B\u65B0\u7248\u672C\u4ECD\u63D0\u9192\u3002\u5DF2\u5FFD\u7565\u9879\u4E0D\u53C2\u4E0E\u5168\u9009\uFF0C\u4ECD\u53EF\u624B\u52A8\u66F4\u65B0\u6216\u6062\u590D\u63D0\u9192\u3002</p>\n {reminderNotice && rows.some(row => row.name === reminderNotice.name && row.targetKey === reminderNotice.targetKey && row.ignored === reminderNotice.ignored) && <p role=\"status\">{reminderNotice.message}</p>}\n <details className=\"help\"><summary>\u5B89\u88C5\u6E90\u4E0E\u68C0\u67E5\u89C4\u5219</summary><div className=\"stack\"><label className=\"filter\">npm \u5B89\u88C5\u6E90<select value={registry} disabled={blocked} onChange={e => setRegistry(e.target.value)}><option value=\"\">DSH \u8BBE\u7F6E\uFF08\u542B\u56DE\u9000\u6765\u6E90\uFF09</option><option value=\"https://registry.npmjs.org/\">npm \u5B98\u65B9</option><option value=\"https://registry.npmmirror.com/\">npmmirror</option></select></label><p className=\"notice\">npm \u6309\u7248\u672C / \u53D1\u5E03\u9891\u9053\u68C0\u67E5\uFF0CGitHub \u6309\u5206\u652F\u63D0\u4EA4\u68C0\u67E5\uFF1B\u4FDD\u7559\u542F\u7528\u72B6\u6001\uFF0C\u56FA\u5B9A Git \u63D0\u4EA4\u4FDD\u6301\u4E0D\u52A8\u3002</p></div></details>\n </section>\n {data.error && <p className=\"error\" role=\"alert\">{data.error}</p>}\n {data.job && !(data.job.kind === 'check' && data.job.state === 'done') && <section className=\"box stack\" aria-live=\"polite\"><div className=\"bar\"><h3>{running ? data.job.kind === 'check' ? '\u6B63\u5728\u68C0\u67E5\u66F4\u65B0\u2026' : '\u6B63\u5728\u5B89\u88C5\u63D2\u4EF6\u2026' : data.job.state === 'cancelled' ? '\u64CD\u4F5C\u5DF2\u53D6\u6D88' : data.job.state === 'failed' || data.job.results.some(r => r.status === 'failed') ? '\u6709\u63D2\u4EF6\u672A\u5B8C\u6210\u5B89\u88C5' : '\u64CD\u4F5C\u5DF2\u5B8C\u6210'}</h3>{running && <button disabled={busy} onClick={() => { void act({ action: 'plugins.cancel' }); }}>\u53D6\u6D88</button>}</div><progress max={Math.max(1, data.job.total)} value={data.job.results.length} aria-label=\"\u63D2\u4EF6\u64CD\u4F5C\u8FDB\u5EA6\" /><p className=\"notice\">{data.job.results.length} / {data.job.total}{data.job.current ? ` \u00B7 ${data.job.current}` : ''}</p>\n {data.job.message && <p className=\"error\">{data.job.message}</p>}{data.job.results.map((r, i) => <div key={r.name + i} className=\"item\"><strong>{r.name}</strong><p className={r.status === 'failed' ? 'error' : 'notice'}>{r.message || updateNames[r.status] || r.status}</p>{r.diagnostic && <button type=\"button\" onClick={() => { setCopied(false); setDiagnostic(JSON.stringify({ plugin: r.name, targetVersion: r.expectedVersion, ...r.diagnostic }, null, 2)); }}>\u67E5\u770B\u8131\u654F\u8BCA\u65AD</button>}{r.pendingBuilds?.length > 0 && <p className=\"notice\">\u5F85\u6388\u6743\u811A\u672C\uFF1A{r.pendingBuilds.join('\u3001')}\u3002\u8BF7\u5728 DSH \u539F\u63D2\u4EF6\u5B89\u88C5\u9875\u6388\u6743\u540E\u91CD\u8BD5\u3002</p>}</div>)}\n {data.job.results.some(r => r.restartRequired) && <p className=\"steps\">\u66F4\u65B0\u6587\u4EF6\u5DF2\u5B89\u88C5\u3002macOS \u4F7F\u7528 \u2318Q \u5B8C\u5168\u9000\u51FA DSH \u540E\u91CD\u5F00\uFF1BWindows \u9000\u51FA\u6258\u76D8\u5E94\u7528\u540E\u91CD\u5F00\uFF1B\u7F51\u9875\u7248\u91CD\u542F\u670D\u52A1\u3002\u5173\u95ED\u7A97\u53E3\u548C\u300C\u5237\u65B0\u9762\u677F\u300D\u4E0D\u4F1A\u91CD\u8F7D\u540E\u53F0\u3002</p>}\n </section>}\n <section className=\"box table-shell\"><div className=\"bar section-pad\"><div className=\"row\"><button disabled={blocked || !notIgnored.length} onClick={() => setSelected(notIgnored.map(r => r.name))}>\u9009\u62E9\u5168\u90E8\u672A\u5FFD\u7565</button><button disabled={blocked || !selected.length} onClick={() => setSelected([])}>\u6E05\u7A7A\u9009\u62E9</button></div><button className=\"primary\" disabled={blocked || !chosen.length} onClick={() => setPlan({ kind: 'update', rows: chosen })}>\u66F4\u65B0\u6240\u9009\uFF08{chosen.length}\uFF09</button></div>\n <div className=\"row section-pad\"><label style={{ flex: 1 }}>\u641C\u7D22\u5DF2\u5B89\u88C5\u63D2\u4EF6<input value={pluginSearch} onChange={e => setPluginSearch(e.target.value)} placeholder=\"\u6309\u63D2\u4EF6\u540D\u79F0\u7B5B\u9009\" /></label><label className=\"filter\">\u663E\u793A\u8303\u56F4<select value={filter} onChange={e => setFilter(e.target.value)}><option value=\"all\">\u5168\u90E8\u7528\u6237\u5B89\u88C5\u63D2\u4EF6</option><option value=\"updates\">\u53EF\u66F4\u65B0 / \u91CD\u8BD5\uFF08\u672A\u5FFD\u7565\uFF09</option><option value=\"ignored\">\u5DF2\u5FFD\u7565\u63D0\u9192</option><option value=\"npm\">npm \u6765\u6E90</option><option value=\"github\">GitHub \u6765\u6E90</option></select></label></div>\n <div className=\"scroll\" role=\"region\" aria-label=\"\u7528\u6237\u5B89\u88C5\u63D2\u4EF6\u5217\u8868\" tabIndex=\"0\"><table className=\"table\"><thead><tr><th scope=\"col\">\u63D2\u4EF6 / \u9009\u62E9</th><th scope=\"col\">\u6765\u6E90\u4E0E\u7248\u672C</th><th scope=\"col\">\u72B6\u6001</th><th scope=\"col\" className=\"cell-actions\">\u64CD\u4F5C</th></tr></thead><tbody>{visibleRows.map(r => <tr key={r.name} className={selected.includes(r.name) ? 'selected' : ''}><td><label className=\"check\"><input aria-label={`\u9009\u62E9\u66F4\u65B0 ${r.name}`} type=\"checkbox\" disabled={blocked || !available.includes(r)} checked={selected.includes(r.name)} onChange={e => setSelected(e.target.checked ? [...selected, r.name] : selected.filter(n => n !== r.name))} /><strong className=\"mono\">{r.name}</strong></label><small className=\"muted\">{r.enabled ? '\u542F\u7528' : '\u505C\u7528'}</small></td><td>{r.source.kind === 'npm' ? `npm \u00B7 ${r.version || '\u672A\u77E5'}${r.latestVersion ? ' \u2192 ' + r.latestVersion : ''}` : r.source.kind === 'github' ? `GitHub \u00B7 ${r.version || '\u672A\u77E5\u7248\u672C'}` : '\u672C\u5730\u6587\u4EF6 / \u5F00\u53D1\u94FE\u63A5'}<small className=\"muted mono\">{r.source.kind === 'npm' ? `\u5B89\u88C5\u58F0\u660E ${r.source.source} \u00B7 \u68C0\u67E5 ${r.source.tag}` : r.source.kind === 'github' ? `${r.commit?.slice(0, 8) || '\u672A\u77E5\u63D0\u4EA4'}${r.latestCommit ? ' \u2192 ' + r.latestCommit.slice(0, 8) : ''}` : ''}</small></td><td><span className={r.status === 'failed' ? 'error' : r.status === 'available' ? 'good' : 'muted'}>{updateNames[r.status]}</span>{r.ignored && <small className=\"muted\">\u5DF2\u5FFD\u7565\u6B64\u7248\u672C\u63D0\u9192</small>}{r.message && <small className={r.status === 'failed' ? 'error' : 'muted'}>{r.message}</small>}</td><td className=\"cell-actions\">{available.includes(r) ? <div className=\"stack row-actions\"><button disabled={blocked} onClick={() => setPlan({ kind: 'update', rows: [r] })}>\u67E5\u770B\u5E76\u66F4\u65B0</button><button disabled={blocked} aria-label={`${r.ignored ? '\u6062\u590D' : '\u5FFD\u7565'} ${r.name} \u6B64\u7248\u672C\u63D0\u9192`} onClick={() => { void toggleReminder(r); }}>{r.ignored ? '\u6062\u590D\u6B64\u7248\u672C\u63D0\u9192' : '\u5FFD\u7565\u6B64\u7248\u672C\u63D0\u9192'}</button></div> : '\u2014'}</td></tr>)}</tbody></table>{!visibleRows.length && <p className=\"empty\">{running ? '\u6B63\u5728\u8BFB\u53D6\u63D2\u4EF6\u6E05\u5355\u2026' : rows.length ? '\u6CA1\u6709\u5339\u914D\u7684\u5DF2\u5B89\u88C5\u63D2\u4EF6\uFF0C\u8BF7\u8C03\u6574\u7B5B\u9009\u3002' : '\u5F53\u524D\u914D\u7F6E\u5C1A\u672A\u8BFB\u53D6\u63D2\u4EF6\uFF0C\u8BF7\u68C0\u67E5\u66F4\u65B0\u3002'}</p>}</div>\n </section>\n {diagnostic && <Modal title=\"\u63D2\u4EF6\u5B89\u88C5\u8BCA\u65AD\" close={() => setDiagnostic(null)}><div className=\"modal-body stack\"><p className=\"notice\">\u4EE5\u4E0B\u4FE1\u606F\u53EA\u542B\u63D2\u4EF6\u540D\u3001\u7248\u672C\u3001\u7CFB\u7EDF\u548C\u9519\u8BEF\u5206\u7C7B\uFF0C\u53EF\u590D\u5236\u7528\u4E8E\u6392\u67E5\uFF1B\u672A\u5305\u542B\u539F\u59CB\u65E5\u5FD7\u3001\u7528\u6237\u540D\u8DEF\u5F84\u6216\u51ED\u8BC1\u3002\u82E5\u539F\u56E0\u672A\u77E5\uFF0C\u8BF7\u5728 DSH \u539F\u751F\u63D2\u4EF6\u9875\u83B7\u53D6\u5B89\u88C5\u65E5\u5FD7\u3002</p><textarea aria-label=\"\u8131\u654F\u5B89\u88C5\u8BCA\u65AD\" readOnly rows=\"9\" value={diagnostic} onFocus={e => e.currentTarget.select()} /><button onClick={async () => { try { await navigator.clipboard.writeText(diagnostic); setCopied(true); } catch { setCopied(false); } }}>{copied ? '\u5DF2\u590D\u5236' : '\u590D\u5236\u8BCA\u65AD'}</button></div></Modal>}\n {plan && <Modal title=\"\u786E\u8BA4\u66F4\u65B0\u63D2\u4EF6\" close={() => setPlan(null)} busy={blocked}><div className=\"modal-body stack\"><p>\u8FD9\u4E9B\u64CD\u4F5C\u4F5C\u7528\u4E8E\u5F53\u524D DSH \u914D\u7F6E\u7684\u6240\u6709\u4F1A\u8BDD\u3002\u5B89\u88C5\u540E\u662F\u5426\u9700\u8981\u91CD\u542F\uFF0C\u4F1A\u5728\u7ED3\u679C\u4E2D\u8BF4\u660E\u3002</p>{plan.rows.map(r => <div className=\"steps\" key={r.name}><strong>{r.name}</strong><p className=\"mono\">{r.target}</p><p>{r.source.kind === 'npm' ? `${r.version || '\u672A\u77E5'} \u2192 ${r.latestVersion}` : `${r.commit?.slice(0, 8) || '\u672A\u77E5\u63D0\u4EA4'} \u2192 ${r.latestCommit?.slice(0, 8) || '\u672A\u77E5\u63D0\u4EA4'}`}</p><p className=\"notice\">\u4FDD\u7559\u4E3A{r.enabled ? '\u542F\u7528' : '\u505C\u7528'}\uFF1B{r.source.kind === 'github' ? '\u7EE7\u7EED\u8DDF\u968F\u539F\u5206\u652F / \u6807\u7B7E\uFF0C\u5E76\u6838\u9A8C\u63D0\u4EA4' : '\u6309\u539F\u9891\u9053\u66F4\u65B0\uFF0C\u5E76\u6838\u9A8C\u6240\u793A npm \u7248\u672C'}\u3002</p></div>)}{freshVersions.length > 0 && <section className=\"steps stack\"><label className=\"check\"><input type=\"checkbox\" disabled={blocked} checked={plan.allowFresh === true} onChange={e => setPlan(p => ({ ...p, allowFresh: e.target.checked }))} />\u5141\u8BB8\u672C\u6B21\u6307\u5B9A\u7248\u672C\u7ACB\u5373\u5B89\u88C5\uFF08\u4E0D\u7B49\u5F85 24 \u5C0F\u65F6\uFF09</label><p className=\"notice\">\u786E\u8BA4\u66F4\u65B0\u540E\uFF0C\u4EC5\u4E3A\u4EE5\u4E0B\u7248\u672C\u4FDD\u5B58\u7B49\u5F85\u671F\u4F8B\u5916\uFF1A{freshVersions.join('\u3001')}\u3002\u65B0\u5305\u7B49\u5F85\u671F\u7528\u4E8E\u964D\u4F4E\u4F9B\u5E94\u94FE\u98CE\u9669\uFF1B\u5176\u4ED6\u7248\u672C\u3001\u4F9D\u8D56\u548C\u811A\u672C\u6388\u6743\u4ECD\u9075\u5B88 DSH \u7B56\u7565\u3002\u9ED8\u8BA4\u9075\u5B88\u7B49\u5F85\u671F\uFF0C\u4EC5\u5728\u660E\u786E\u77E5\u6089\u98CE\u9669\u540E\u52FE\u9009\u3002</p></section>}<p className=\"notice\">npm \u5B89\u88C5\u6E90\uFF1A{registry || '\u6CBF\u7528 DSH \u8BBE\u7F6E'}</p></div><div className=\"modal-foot row\"><button className=\"primary\" disabled={blocked} onClick={() => { void submitPlan(); }}>\u786E\u8BA4\u66F4\u65B0</button><button disabled={blocked} onClick={() => setPlan(null)}>\u53D6\u6D88</button></div></Modal>}\n </div>;\n}\n", "export const styles = `\n.pu{--pu-accent:var(--dsw-alias-state-active-primary,#3a71db);--pu-border:var(--dsw-alias-border-l2,#555);--pu-bg:var(--dsw-alias-bg-layer-1,#202020);--pu-card:var(--dsw-alias-bg-module-platform,#282828);--pu-text:var(--dsw-alias-label-primary,#f4f4f4);--pu-muted:var(--dsw-alias-label-secondary,#b8b8b8);--pu-soft:color-mix(in srgb,var(--pu-text) 4%,var(--pu-card));color:var(--pu-text);font:inherit;font-size:14px;line-height:1.6;max-width:1280px;min-width:0}\n.pu *{box-sizing:border-box}.pu h2,.pu h3,.pu p{margin:0}.pu h2{font-size:24px;font-weight:650;letter-spacing:-.4px}.pu h3{font-size:16px}.pu small,.pu .muted,.pu .notice{color:var(--pu-muted)}.pu .notice{font-size:13px}.pu .mono{font:12px ui-monospace,monospace;overflow-wrap:anywhere}\n.pu .bar,.pu .row{display:flex;gap:12px;align-items:center;flex-wrap:wrap}.pu .bar{justify-content:space-between}.pu.stack,.pu .stack{display:flex;flex-direction:column;gap:20px}.pu .box{border:1px solid var(--pu-border);border-radius:14px;padding:20px;background:var(--pu-card)}.pu header.box{background:linear-gradient(130deg,var(--pu-soft),var(--pu-card))}.pu .principles{display:grid;grid-template-columns:repeat(3,minmax(0,1fr));gap:20px}.pu .principles h3{margin-bottom:4px}\n.pu .community{padding:10px 14px;border:1px solid var(--pu-border);border-radius:8px;background:var(--pu-card);font-size:13px;column-gap:16px;row-gap:8px}.pu .community a{display:inline-flex;align-items:center;min-height:44px;color:var(--pu-accent);font-weight:500;text-decoration:underline;text-underline-offset:3px}.pu .community a:hover{opacity:.8}.pu .community a:focus-visible{outline:2px solid var(--pu-accent);outline-offset:4px;border-radius:2px}.pu .community span{min-width:0;overflow-wrap:anywhere}\n.pu button,.pu input,.pu select,.pu textarea{font:inherit;color:inherit;border:1px solid var(--pu-border);border-radius:8px;background:var(--pu-bg);min-height:44px;padding:9px 12px}.pu button{cursor:pointer;transition:background .15s}.pu button:hover{background:var(--pu-soft)}.pu button:disabled{opacity:.45;cursor:default}.pu button.primary{background:var(--pu-text);color:var(--pu-card);border-color:var(--pu-text)}.pu :is(button,input,select,textarea,summary):focus-visible{outline:2px solid var(--pu-accent);outline-offset:3px}.pu input:not([type=checkbox]),.pu select,.pu textarea{width:100%;min-width:0}.pu input[type=checkbox]{width:18px;height:18px;min-height:0;accent-color:var(--pu-accent)}.pu label{display:flex;flex-direction:column;gap:6px;font-size:13px}.pu label.check{flex-direction:row;align-items:center;gap:8px;min-height:44px}.pu .filter{min-width:170px;max-width:240px}\n.pu .error{color:var(--dsw-alias-state-error-primary,#ef9393)}.pu .good{color:var(--dsw-alias-state-success-primary,#77ca9d)}.pu summary{cursor:pointer;color:var(--pu-muted);min-height:44px;display:flex;align-items:center}.pu details>div{padding-top:12px}.pu progress{width:100%;height:8px;accent-color:var(--pu-accent)}.pu .item{padding:16px 0;border-top:1px solid var(--pu-border)}.pu .empty{padding:24px;text-align:center;color:var(--pu-muted)}.pu .steps{padding:14px 16px;border:1px solid var(--pu-border);background:var(--pu-soft);border-radius:10px}\n.pu .row-actions{gap:8px;align-items:stretch}.pu .reminder-list{list-style:none;padding:0;margin:0}.pu .reminder-list li{padding:12px 0;border-bottom:1px solid var(--pu-border)}.pu .reminder-list .mono{flex:1;min-width:180px}.pu .reminder-list button{flex-shrink:0}\n.pu .table-shell{padding:0;overflow:hidden}.pu .section-pad{padding:16px 20px}.pu .scroll{overflow:auto;max-width:100%}.pu .scroll:focus-visible{outline:2px solid var(--pu-accent);outline-offset:-3px}.pu .table{width:100%;min-width:760px;border-collapse:collapse;font-size:14px}.pu th,.pu td{text-align:left;border-bottom:1px solid var(--pu-border);padding:16px 20px;vertical-align:middle}.pu th{background:var(--pu-soft);font-size:12px;color:var(--pu-muted)}.pu .table td small{display:block;font-size:12px;margin-top:3px}.pu .table tr:last-child td{border-bottom:0}.pu .table tr.selected,.pu .table tbody tr:hover{background:var(--pu-soft)}.pu .cell-actions{text-align:right;white-space:nowrap}\n.pu dialog{color:var(--pu-text);background:var(--pu-bg);border:1px solid var(--pu-border);border-radius:16px;width:min(900px,calc(100vw - 32px));max-height:calc(100dvh - 40px);padding:0;box-shadow:0 24px 80px #0008}.pu dialog::backdrop{background:#000a}.pu .modal-head,.pu .modal-foot{padding:18px 24px;background:var(--pu-bg);position:sticky;z-index:1}.pu .modal-head{top:0;border-bottom:1px solid var(--pu-border)}.pu .modal-foot{bottom:0;border-top:1px solid var(--pu-border)}.pu .modal-body{padding:24px}\n@media(max-width:600px){.pu .principles{grid-template-columns:1fr;gap:12px}.pu .box,.pu .section-pad,.pu .modal-body,.pu .modal-head,.pu .modal-foot{padding:16px}.pu .box.table-shell{padding:0}.pu .filter{max-width:none;flex:1}.pu h2{font-size:22px}}\n@media(prefers-reduced-motion:reduce){.pu *{transition:none!important}}\n`;\n", "import { useState } from 'react';\nimport { repository, version } from '../package.json';\n\nconst descriptions = {\n zh: {\n title: '\u63D2\u4EF6\u66F4\u65B0\u7BA1\u7406', language: '\u4ECB\u7ECD\u8BED\u8A00 / Introduction language', community: '\u9879\u76EE\u4EA4\u6D41\u4E0E\u652F\u6301',\n qq: '\u52A0\u5165 QQ \u4EA4\u6D41\u7FA4 \u2197', group: 'AndroidSix \u7684\u5F00\u6E90\u9879\u76EE\u4EA4\u6D41\u7FA4 \u00B7 \u7FA4\u53F7', repository: 'GitHub \u4ED3\u5E93 \u2197', star: '\u89C9\u5F97\u597D\u7528\uFF1F\u70B9\u4E2A Star \u9F13\u52B1\u4E00\u4E0B',\n tagline: '\u53EA\u7BA1\u5DF2\u5B89\u88C5\u63D2\u4EF6\uFF0C\u8BA9\u6BCF\u4E00\u6B21\u66F4\u65B0\u6709\u636E\u53EF\u67E5\u3002',\n principles: [\n ['\u6765\u6E90\u4E0D\u4E71\u6362', 'npm \u9891\u9053\u4E0E GitHub \u63D0\u4EA4\u5206\u522B\u68C0\u67E5\uFF0C\u4FDD\u7559\u542F\u7528\u72B6\u6001\u3002'],\n ['\u66F4\u65B0\u5148\u786E\u8BA4', '\u6BCF\u5929\u68C0\u67E5\u3001\u786E\u8BA4\u540E\u5B89\u88C5\uFF1B\u53EF\u5FFD\u7565\u6307\u5B9A\u7248\u672C\u63D0\u9192\uFF0C\u65B0\u7248\u672C\u4ECD\u4F1A\u63D0\u9192\u3002'],\n ['\u7ED3\u679C\u8981\u6838\u9A8C', '\u6838\u5BF9\u5B9E\u9645\u7248\u672C\u6216\u9501\u6587\u4EF6\u63D0\u4EA4\uFF0C\u5B89\u88C5\u4E0E\u751F\u6548\u5206\u5F00\u8BF4\u660E\u3002'],\n ],\n boundary: '\u4E0D\u662F\u63D2\u4EF6\u5E02\u573A\uFF1A\u4E0D\u63D0\u4F9B\u53D1\u73B0\u3001\u63A8\u8350\u3001\u6392\u884C\u6216\u65B0\u63D2\u4EF6\u5B89\u88C5\u3002\u5B89\u88C5\u3001\u5378\u8F7D\u548C\u811A\u672C\u6388\u6743\u4ECD\u5728 DSH \u539F\u751F\u63D2\u4EF6\u9875\u5904\u7406\u3002',\n },\n en: {\n title: 'Plugin Update Manager', language: '\u4ECB\u7ECD\u8BED\u8A00 / Introduction language', community: 'Community and support',\n qq: 'Join the QQ group \u2197', group: 'AndroidSix community \u00B7 QQ group', repository: 'GitHub repository \u2197', star: 'Find it useful? Give us a Star!',\n tagline: 'Only installed plugins. Every update checked and accounted for.',\n principles: [\n ['Keep the source', 'Check npm channels and GitHub commits separately. Preserve enabled and disabled states.'],\n ['You decide', 'Check daily, install only after confirmation. Ignore a specific release; newer releases still notify you.'],\n ['Verify the result', 'Verify the installed version or locked commit. Distinguish installation from activation.'],\n ],\n boundary: 'Not a plugin marketplace: no discovery, recommendations, rankings, or new plugin installs. Use the native DSH plugin page for installation, removal, and build-script approval.',\n },\n};\n\nexport function UpdatesIntro({ initialLanguage = 'zh' }) {\n const [language, setLanguage] = useState(initialLanguage === 'en' ? 'en' : 'zh');\n const text = descriptions[language];\n return <header className=\"box stack\" lang={language === 'zh' ? 'zh-CN' : 'en'}>\n <div className=\"bar\"><div className=\"row\"><h2>{text.title}</h2><span className=\"notice\">v{version}</span></div>\n <label className=\"filter\">{text.language}<select value={language} onChange={e => setLanguage(e.target.value)}><option value=\"zh\">\u4E2D\u6587</option><option value=\"en\">English</option></select></label>\n </div>\n <div className=\"row community\" aria-label={text.community}>\n <a href=\"https://qm.qq.com/q/eQC7OQXQe4\" target=\"_blank\" rel=\"noopener noreferrer\">{text.qq}</a>\n <span className=\"muted\">{text.group} <strong>1124103038</strong></span>\n <a href={repository.url.replace(/^git\\+/, '').replace(/\\.git$/, '')} target=\"_blank\" rel=\"noopener noreferrer\">{text.repository}</a>\n <span className=\"muted\">{text.star}</span>\n </div>\n <p>{text.tagline}</p>\n <div className=\"principles\">{text.principles.map(([title, detail]) => <section key={title}><h3>{title}</h3><p className=\"notice\">{detail}</p></section>)}</div>\n <p className=\"notice\">{text.boundary}</p>\n </header>;\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["name", "import_react", "name", "import_react", "import_jsx_runtime", "import_jsx_runtime", "name"]
7
+ }