dsh-config-manager 0.1.40 → 0.1.42
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/lib/client.d.ts +134 -10
- package/lib/client.js +2252 -1177
- package/lib/client.js.map +1 -1
- package/lib/core/cache-cleaner.d.ts +39 -0
- package/lib/core/cache-cleaner.js +164 -0
- package/lib/core/cache-cleaner.js.map +1 -0
- package/lib/index.js +265 -5
- package/lib/index.js.map +1 -1
- package/lib/market/github-repos.d.ts +37 -8
- package/lib/market/github-repos.js +113 -33
- package/lib/market/github-repos.js.map +1 -1
- package/lib/market/my-repo.d.ts +113 -4
- package/lib/market/my-repo.js +313 -29
- package/lib/market/my-repo.js.map +1 -1
- package/lib/market/prepare.js +3 -2
- package/lib/market/prepare.js.map +1 -1
- package/lib/market/repo-url.d.ts +24 -0
- package/lib/market/repo-url.js +30 -0
- package/lib/market/repo-url.js.map +1 -0
- package/lib/market/star-cache.d.ts +48 -0
- package/lib/market/star-cache.js +57 -0
- package/lib/market/star-cache.js.map +1 -0
- package/lib/market/types.d.ts +4 -0
- package/lib/security/secret-scanner.d.ts +15 -3
- package/lib/security/secret-scanner.js +139 -54
- package/lib/security/secret-scanner.js.map +1 -1
- package/lib/sync/ui-prefs.d.ts +14 -0
- package/lib/sync/ui-prefs.js +32 -4
- package/lib/sync/ui-prefs.js.map +1 -1
- package/lib/ui/star-prompt.d.ts +37 -0
- package/lib/ui/star-prompt.js +36 -0
- package/lib/ui/star-prompt.js.map +1 -0
- package/package.json +2 -1
- package/src/client/ConfigManagerSection.tsx +75 -1
- package/src/client/api.ts +51 -0
- package/src/client/common/ConfirmDialog.tsx +144 -0
- package/src/client/common/ui.tsx +4 -2
- package/src/client/config-manager.module.css +101 -0
- package/src/client/locales.ts +11 -0
- package/src/client/market/MarketPanel.tsx +180 -47
- package/src/client/market/MyConfigsView.tsx +516 -128
- package/src/client/market/disclaimer.test.ts +57 -0
- package/src/client/market/disclaimer.ts +43 -0
- package/src/client/market/market-api.test.ts +3 -0
- package/src/client/market/market-locales.ts +56 -17
- package/src/client/market/market-view.test.ts +74 -3
- package/src/client/market/market-view.ts +56 -0
- package/src/client/market/my-configs-api.ts +20 -2
- package/src/client/market/my-configs-view.test.ts +160 -2
- package/src/client/market/my-configs-view.ts +173 -0
- package/src/client/run-store.test.ts +40 -2
- package/src/client/run-store.ts +78 -10
- package/src/client/sync/SyncConfirmView.tsx +28 -22
- package/src/client/sync/SyncSettingsView.tsx +175 -65
- package/src/client/sync/sync-api.ts +19 -0
- package/src/client/sync/sync-locales.ts +14 -2
- package/src/core/cache-cleaner.test.ts +333 -0
- package/src/core/cache-cleaner.ts +196 -0
- package/src/index.ts +253 -5
- package/src/market/github-repos.test.ts +163 -8
- package/src/market/github-repos.ts +122 -35
- package/src/market/my-repo.test.ts +188 -27
- package/src/market/my-repo.ts +407 -33
- package/src/market/prepare.test.ts +71 -1
- package/src/market/prepare.ts +3 -2
- package/src/market/repo-url.test.ts +60 -0
- package/src/market/repo-url.ts +45 -0
- package/src/market/star-cache.test.ts +102 -0
- package/src/market/star-cache.ts +91 -0
- package/src/market/types.ts +4 -0
- package/src/security/secret-scanner.ts +134 -50
- package/src/security/security.test.ts +82 -2
- package/src/sync/ui-prefs.test.ts +58 -2
- package/src/sync/ui-prefs.ts +42 -4
- package/src/ui/star-prompt.test.ts +53 -0
- package/src/ui/star-prompt.ts +55 -0
package/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 xiajiajun516
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/lib/client.d.ts
CHANGED
|
@@ -568,6 +568,31 @@ interface RestoreResponse {
|
|
|
568
568
|
plan?: RestorePlan;
|
|
569
569
|
report?: RestoreReport;
|
|
570
570
|
}
|
|
571
|
+
/** Star 引导弹窗状态(GET /star-prompt;纯偏好,无 secret) */
|
|
572
|
+
interface StarPromptStatus {
|
|
573
|
+
ok: boolean;
|
|
574
|
+
/** 引导用户点 Star 的 GitHub 仓库地址(Host 提供,硬编码常量) */
|
|
575
|
+
repoUrl: string;
|
|
576
|
+
/** 首次进入页面时间(ms 时间戳);undefined = 尚未进入过页面 */
|
|
577
|
+
firstSeenAt?: number;
|
|
578
|
+
/** 用户点过「不再提示」 */
|
|
579
|
+
dismissed: boolean;
|
|
580
|
+
/** 用户点过「去点 Star」(方案 A:引导完成) */
|
|
581
|
+
clicked: boolean;
|
|
582
|
+
}
|
|
583
|
+
/** Star 引导弹窗状态的局部更新补丁(POST /star-prompt;全部可选) */
|
|
584
|
+
interface StarPromptPatch {
|
|
585
|
+
firstSeenAt?: number;
|
|
586
|
+
dismissed?: boolean;
|
|
587
|
+
clicked?: boolean;
|
|
588
|
+
}
|
|
589
|
+
/** POST /star-prompt 响应(更新后的最新状态) */
|
|
590
|
+
interface StarPromptSaveResponse {
|
|
591
|
+
ok: boolean;
|
|
592
|
+
firstSeenAt?: number;
|
|
593
|
+
dismissed: boolean;
|
|
594
|
+
clicked: boolean;
|
|
595
|
+
}
|
|
571
596
|
/** 携带路由 JSON error 消息的错误类型 */
|
|
572
597
|
declare class ConfigManagerApiError extends Error {
|
|
573
598
|
constructor(message: string);
|
|
@@ -599,6 +624,11 @@ declare class ConfigManagerApi {
|
|
|
599
624
|
constructor(t?: UiT);
|
|
600
625
|
/** 健康/版本检查(主页横幅:插件版本 / DSH 版本 / 平台) */
|
|
601
626
|
status(): Promise<ServiceStatus>;
|
|
627
|
+
/** Star 引导弹窗状态(进入页面时判定是否展示 / 是否补记首次使用时间)。 */
|
|
628
|
+
starPromptStatus(): Promise<StarPromptStatus>;
|
|
629
|
+
/** 保存 Star 引导弹窗状态(局部更新:firstSeenAt / dismissed / clicked)。
|
|
630
|
+
* 纯偏好无 secret;失败由调用方静默降级(本次不弹/不记,下次再判)。 */
|
|
631
|
+
saveStarPrompt(patch: StarPromptPatch): Promise<StarPromptSaveResponse>;
|
|
602
632
|
/** ExportPort.export:调用 Host 侧导出编排(core Exporter)。加密密码随请求体传输(仅内存)。
|
|
603
633
|
* 带 AbortController 超时:宿主若卡死,客户端得到明确错误而不是永远停在进度条。 */
|
|
604
634
|
export(options: ExportOptions): Promise<ExportResponse>;
|
|
@@ -962,6 +992,17 @@ interface GithubPollResponse {
|
|
|
962
992
|
/** success 时恒 true(凭据已配置);便于 UI 直接刷新状态 */
|
|
963
993
|
credentialConfigured?: boolean;
|
|
964
994
|
}
|
|
995
|
+
/** POST /sync/github/validate 响应:token 是否已配置 + 是否有效(GET /user;
|
|
996
|
+
* 401 → 无效)。只回布尔 + 登录名(非敏感),token 值永不回传浏览器。 */
|
|
997
|
+
interface GithubValidateResponse {
|
|
998
|
+
ok: boolean;
|
|
999
|
+
/** token 是否存在于 DSH credentials */
|
|
1000
|
+
configured: boolean;
|
|
1001
|
+
/** token 是否有效(GitHub GET /user 成功;configured=false 时恒 false) */
|
|
1002
|
+
valid: boolean;
|
|
1003
|
+
/** GitHub 登录名(valid=true 时;非敏感展示位) */
|
|
1004
|
+
login?: string;
|
|
1005
|
+
}
|
|
965
1006
|
/** 远程同步浏览器半数据入口(备份与迁移页第 4 个 tab 的注入业务面) */
|
|
966
1007
|
declare class SyncApi {
|
|
967
1008
|
readonly t: UiT;
|
|
@@ -980,6 +1021,9 @@ declare class SyncApi {
|
|
|
980
1021
|
githubCancel(flowId: string): Promise<{
|
|
981
1022
|
ok: boolean;
|
|
982
1023
|
}>;
|
|
1024
|
+
/** GitHub token 有效性校验(判定「是否已登录」:token 存在且 GitHub API 接受;
|
|
1025
|
+
* 401 → valid:false 引导重新登录;非 401 错误向上抛,UI 兜底不误判登出) */
|
|
1026
|
+
githubValidate(): Promise<GithubValidateResponse>;
|
|
983
1027
|
/** 同步历史:列出本地祖先快照 + 自动同步执行记录(按 createdAt 倒序合并)。 */
|
|
984
1028
|
history(): Promise<SyncHistoryResponse>;
|
|
985
1029
|
/** 远端历史快照列表(供「选择历史快照」下拉)。 */
|
|
@@ -1071,6 +1115,8 @@ interface MarketListItem {
|
|
|
1071
1115
|
categories?: string[];
|
|
1072
1116
|
/** 条目来源仓库 URL(来自 index 条目;UI 据此显示来源徽章);缺省 = 市场仓库自身 */
|
|
1073
1117
|
repo?: string;
|
|
1118
|
+
/** 条目来源仓库的 star 数(仓库级,非条目级;undefined = 无数据——查询失败/非 GitHub 仓库) */
|
|
1119
|
+
stars?: number;
|
|
1074
1120
|
/** 本地缓存状态:cached | fresh | none(UI 徽章) */
|
|
1075
1121
|
cacheState: 'cached' | 'fresh' | 'none';
|
|
1076
1122
|
}
|
|
@@ -1110,6 +1156,8 @@ interface MarketStatusResponse {
|
|
|
1110
1156
|
/** 是否已添加过至少一个市场 */
|
|
1111
1157
|
configured: boolean;
|
|
1112
1158
|
markets: MarketSummary[];
|
|
1159
|
+
/** 本次 dsh 启动后市场是否已刷新过(首次打开市场页自动更新一次的依据;进程内存,dsh 重启后重置) */
|
|
1160
|
+
bootAutoRefreshed?: boolean;
|
|
1113
1161
|
}
|
|
1114
1162
|
/** POST /market/refresh 响应:{ ok, items, market } */
|
|
1115
1163
|
interface MarketRefreshResponse {
|
|
@@ -1190,7 +1238,15 @@ interface MyRepoForm {
|
|
|
1190
1238
|
description?: string;
|
|
1191
1239
|
categories?: string[];
|
|
1192
1240
|
}
|
|
1193
|
-
/**
|
|
1241
|
+
/** 收录流程状态:pending=已提交、后台处理中;done=已提交收录(PR 已开/复用);failed=收录失败可重试 */
|
|
1242
|
+
type ListingState = 'pending' | 'done' | 'failed';
|
|
1243
|
+
/**
|
|
1244
|
+
* upload / update 返回(ok=false 时携带已脱敏 error + errorCode)。
|
|
1245
|
+
* 流程拆分(2026-08-20 优化):upload/update 只同步执行「推用户仓库」并立即返回
|
|
1246
|
+
* (listing='pending'),「收录流程」(fork + 官方 index + PR)在后台异步执行,
|
|
1247
|
+
* 避免 GitHub fork 排队时整个上传请求长时间挂起;收录结果经 listingStatus /
|
|
1248
|
+
* /me/items 状态徽章查询。
|
|
1249
|
+
*/
|
|
1194
1250
|
interface UploadResult {
|
|
1195
1251
|
ok: boolean;
|
|
1196
1252
|
itemId: string;
|
|
@@ -1199,14 +1255,47 @@ interface UploadResult {
|
|
|
1199
1255
|
sections: SectionId[];
|
|
1200
1256
|
/** 用户公开仓库 URL(https://github.com/<login>/dsh-configs) */
|
|
1201
1257
|
repoUrl: string;
|
|
1258
|
+
/** 收录 PR 编号(异步模式下收起完成前为 null;完成经 listingStatus 查询) */
|
|
1202
1259
|
prNumber: number | null;
|
|
1260
|
+
/** 收录 PR 链接(同上) */
|
|
1203
1261
|
prUrl: string | null;
|
|
1204
1262
|
warnings: string[];
|
|
1263
|
+
/** 收录流程状态:ok=true 且上传成功后为 'pending'(后台进行中);失败无收录流程时 'done' 无意义 */
|
|
1264
|
+
listing: ListingState;
|
|
1265
|
+
/** listing='failed' 时:收录失败原因(已脱敏,含重试指引) */
|
|
1266
|
+
listingError?: string;
|
|
1205
1267
|
/** ok=false 时:可展示错误(已脱敏,无 token 形态) */
|
|
1206
1268
|
error?: string;
|
|
1207
1269
|
/** ok=false 时:错误分类码(unauthorized/prepare_failed/...;无则 'internal') */
|
|
1208
1270
|
errorCode?: string;
|
|
1209
1271
|
}
|
|
1272
|
+
/** POST /me/listing 响应:收录任务状态(结果卡轮询用,比拉全列表更轻) */
|
|
1273
|
+
interface ListingStatusResponse {
|
|
1274
|
+
itemId: string;
|
|
1275
|
+
listing: ListingState;
|
|
1276
|
+
/** listing='done' 时:PR 编号 */
|
|
1277
|
+
prNumber: number | null;
|
|
1278
|
+
/** listing='done' 时:PR 链接 */
|
|
1279
|
+
prUrl: string | null;
|
|
1280
|
+
/** listing='failed' 时:失败原因(已脱敏) */
|
|
1281
|
+
error?: string;
|
|
1282
|
+
}
|
|
1283
|
+
/** POST /me/delete 响应:删除条目结果 */
|
|
1284
|
+
interface DeleteResult {
|
|
1285
|
+
ok: boolean;
|
|
1286
|
+
itemId: string;
|
|
1287
|
+
/** 是否已异步提交「下架 PR」(条目此前已收录进官方市场时 true) */
|
|
1288
|
+
delisted: boolean;
|
|
1289
|
+
/** 被关闭的收录 PR(条目处于待审核、有 open PR 时关闭它) */
|
|
1290
|
+
prNumber: number | null;
|
|
1291
|
+
/** 被关闭 PR 的链接(同上) */
|
|
1292
|
+
prUrl: string | null;
|
|
1293
|
+
warnings: string[];
|
|
1294
|
+
/** ok=false 时:可展示错误(已脱敏) */
|
|
1295
|
+
error?: string;
|
|
1296
|
+
/** ok=false 时:错误分类码(item_not_found/unauthorized/...) */
|
|
1297
|
+
errorCode?: string;
|
|
1298
|
+
}
|
|
1210
1299
|
/** listItems 条目:用户仓库 index.json 条目 + 收录状态 */
|
|
1211
1300
|
interface MyItemEntry {
|
|
1212
1301
|
id: string;
|
|
@@ -1221,6 +1310,8 @@ interface MyItemEntry {
|
|
|
1221
1310
|
prUrl?: string;
|
|
1222
1311
|
/** 用户公开仓库 URL */
|
|
1223
1312
|
repoUrl: string;
|
|
1313
|
+
/** 用户公开仓库(<login>/dsh-configs)的 star 数(仓库级;undefined = 无数据) */
|
|
1314
|
+
stars?: number;
|
|
1224
1315
|
}
|
|
1225
1316
|
//#endregion
|
|
1226
1317
|
//#region src/client/market/my-configs-api.d.ts
|
|
@@ -1276,6 +1367,12 @@ declare class MyConfigsApi {
|
|
|
1276
1367
|
zipPath: string;
|
|
1277
1368
|
form: MyConfigsFormPayload;
|
|
1278
1369
|
}): Promise<MyUploadResult>;
|
|
1370
|
+
/** 查询收录/下架任务状态(结果卡轮询;任务表未命中时 Host 回退 GitHub 实况推导;无任务无实况 → null) */
|
|
1371
|
+
meListing(itemId: string): Promise<ListingStatusResponse | null>;
|
|
1372
|
+
/** 重新提交收录(失败/重启丢失后重试;幂等复用已存在 fork/open PR) */
|
|
1373
|
+
meRelist(itemId: string): Promise<ListingStatusResponse>;
|
|
1374
|
+
/** 删除条目(同步删本地索引+文件;已收录自动后台提下架 PR;待审核自动关闭收录 PR) */
|
|
1375
|
+
meDelete(itemId: string): Promise<DeleteResult>;
|
|
1279
1376
|
}
|
|
1280
1377
|
//#endregion
|
|
1281
1378
|
//#region src/client/client-types.d.ts
|
|
@@ -1426,6 +1523,10 @@ declare const zh$2: {
|
|
|
1426
1523
|
readonly 'report.needsRestart': "插件 / MCP 变更将在重启 DSH 后生效。";
|
|
1427
1524
|
readonly 'error.title': "操作失败";
|
|
1428
1525
|
readonly 'error.hint': "错误消息已自动脱敏,不会泄露任何密钥信息。";
|
|
1526
|
+
readonly 'starPrompt.title': "喜欢 Config Manager 吗?";
|
|
1527
|
+
readonly 'starPrompt.body': "如果你觉得这个插件有用,欢迎到 GitHub 点个 ⭐ Star 支持一下——你的支持是持续维护的最大动力!";
|
|
1528
|
+
readonly 'starPrompt.star': "去点 Star";
|
|
1529
|
+
readonly 'starPrompt.dismiss': "不再提示";
|
|
1429
1530
|
readonly 'about.title': "关于 DSH Config Manager";
|
|
1430
1531
|
readonly 'about.subtitle': "插件信息、作者与反馈入口";
|
|
1431
1532
|
readonly 'about.official': "官方";
|
|
@@ -1464,10 +1565,14 @@ declare const zh$1: {
|
|
|
1464
1565
|
readonly 'config.saving': "保存中…";
|
|
1465
1566
|
readonly 'config.saveHint': "表单改动会自动保存(密码/token 安全写入 DSH credentials,不会写入同步文件或日志);也可点击按钮立即保存。";
|
|
1466
1567
|
readonly 'channel.title': "同步通道";
|
|
1467
|
-
readonly 'channel.hint': "选择远程同步通道:Git 私有仓库或 WebDAV 服务器。";
|
|
1468
1568
|
readonly 'channel.git': "Git 私有仓库";
|
|
1469
1569
|
readonly 'channel.webdav': "WebDAV 服务器";
|
|
1470
1570
|
readonly 'channel.perChannelHint': "GitHub 与 WebDAV 通道的自动同步、同步模式、加密与远端快照各自独立配置。";
|
|
1571
|
+
readonly 'channel.open': "配置同步通道";
|
|
1572
|
+
readonly 'channel.openHint': "远程同步通过「同步通道」进行:Git 私有仓库或 WebDAV 服务器。点击按钮在弹窗中配置或修改。";
|
|
1573
|
+
readonly 'channel.configured': "已配置";
|
|
1574
|
+
readonly 'channel.notConfigured': "未配置";
|
|
1575
|
+
readonly 'channel.currentUrl': "当前地址";
|
|
1471
1576
|
readonly 'webdav.title': "WebDAV 配置";
|
|
1472
1577
|
readonly 'webdav.url': "服务器地址";
|
|
1473
1578
|
readonly 'webdav.urlHint': "WebDAV 服务器根地址(https://…)。同步快照与索引存放于该地址的 snapshots/ 子目录下。请勿在地址中包含用户名/密码。";
|
|
@@ -1483,6 +1588,7 @@ declare const zh$1: {
|
|
|
1483
1588
|
readonly 'github.login': "使用 GitHub 登录";
|
|
1484
1589
|
readonly 'github.retry': "重新登录";
|
|
1485
1590
|
readonly 'github.cancel': "取消";
|
|
1591
|
+
readonly 'github.tokenInvalid': "GitHub 登录已失效,请重新登录。";
|
|
1486
1592
|
readonly 'github.userCode': "一次性授权代码";
|
|
1487
1593
|
readonly 'github.openAuth': "打开 GitHub 授权页面";
|
|
1488
1594
|
readonly 'github.clientIdHint': "需要插件配置 githubClientId(GitHub OAuth App 的 client_id)才能使用 GitHub 登录。";
|
|
@@ -1631,27 +1737,28 @@ declare const zh: {
|
|
|
1631
1737
|
readonly 'section.label': "配置市场";
|
|
1632
1738
|
readonly 'section.description': "浏览并下载社区共享的配置(公开 Git 仓库;下载内容一律视为不可信,导入前必经校验与确认)";
|
|
1633
1739
|
readonly 'config.title': "市场仓库";
|
|
1634
|
-
readonly 'config.builtinHint': "内置官方市场,只读、不可编辑(由创建者维护的公开 Git 仓库)。";
|
|
1635
|
-
readonly 'config.official': "内置官方市场";
|
|
1636
|
-
readonly 'config.custom': "自定义市场地址";
|
|
1637
|
-
readonly 'config.repoUrlHint': "内置公开 Git 仓库地址。市场只读拉取(绝不推送)。";
|
|
1638
1740
|
readonly 'config.refresh': "拉取最新";
|
|
1639
1741
|
readonly 'config.refreshing': "拉取中…";
|
|
1640
|
-
readonly 'config.addedAt': "更新于:{time}";
|
|
1641
|
-
readonly 'config.itemCount': "{count} 个条目";
|
|
1642
1742
|
readonly 'list.empty': "内置市场尚未加载。请先「拉取最新」。";
|
|
1643
1743
|
readonly 'list.browse': "浏览";
|
|
1644
1744
|
readonly 'list.loading': "正在读取市场…";
|
|
1645
1745
|
readonly 'list.noItems': "该市场暂无条目。";
|
|
1646
1746
|
readonly 'list.searchPlaceholder': "搜索名称 / 作者 / 描述…";
|
|
1647
1747
|
readonly 'list.categoriesAll': "全部类别";
|
|
1748
|
+
readonly 'list.sourceAll': "全部来源";
|
|
1749
|
+
readonly 'list.sourceOfficial': "官方配置";
|
|
1750
|
+
readonly 'list.sourcePersonal': "个人配置";
|
|
1751
|
+
readonly 'list.sortDefault': "默认排序";
|
|
1752
|
+
readonly 'list.sortUpdated': "最新更新";
|
|
1753
|
+
readonly 'list.sortStars': "⭐ 最多";
|
|
1754
|
+
readonly 'list.sortName': "名称 A–Z";
|
|
1755
|
+
readonly 'list.stars': "⭐ {count}";
|
|
1756
|
+
readonly 'list.starsHint': "来源仓库 star 数(仓库级,非本条目)";
|
|
1648
1757
|
readonly 'list.count': "共 {count} 个条目";
|
|
1649
1758
|
readonly 'list.filtered': "(筛选后 {count} 个)";
|
|
1650
1759
|
readonly 'list.cacheCached': "已缓存";
|
|
1651
1760
|
readonly 'list.cacheFresh': "刚刚拉取";
|
|
1652
1761
|
readonly 'list.cacheNone': "未缓存";
|
|
1653
|
-
readonly 'list.sourceOfficial': "官方来源";
|
|
1654
|
-
readonly 'list.sourceThirdParty': "第三方来源";
|
|
1655
1762
|
readonly 'list.download': "查看详情";
|
|
1656
1763
|
readonly 'detail.title': "条目详情";
|
|
1657
1764
|
readonly 'detail.downloadedAt': "下载时间:{time}";
|
|
@@ -1705,6 +1812,8 @@ declare const zh: {
|
|
|
1705
1812
|
readonly 'myconfigs.update.hint': "版本将自动 +1,已预填原条目信息(名称可改)。";
|
|
1706
1813
|
readonly 'myconfigs.update.run': "一键更新";
|
|
1707
1814
|
readonly 'myconfigs.update.running': "更新中…";
|
|
1815
|
+
readonly 'myconfigs.update.zipHint': "更新需要新的配置包:选择新 zip 后自动校验,通过后即可一键更新。";
|
|
1816
|
+
readonly 'myconfigs.update.selectZip': "选择新 ZIP…";
|
|
1708
1817
|
readonly 'myconfigs.result.title': "上传/更新完成";
|
|
1709
1818
|
readonly 'myconfigs.result.version': "版本 {version}";
|
|
1710
1819
|
readonly 'myconfigs.result.sha256': "SHA-256:{hash}";
|
|
@@ -1713,6 +1822,9 @@ declare const zh: {
|
|
|
1713
1822
|
readonly 'myconfigs.result.openRepo': "打开仓库";
|
|
1714
1823
|
readonly 'myconfigs.result.pr': "收录 PR #{number}";
|
|
1715
1824
|
readonly 'myconfigs.result.openPr': "查看 PR";
|
|
1825
|
+
readonly 'myconfigs.result.listingPending': "已上传 ✓ 正在后台提交收录(fork + 收录 PR),稍后列表状态自动更新";
|
|
1826
|
+
readonly 'myconfigs.result.listingFailed': "收录失败";
|
|
1827
|
+
readonly 'myconfigs.result.relist': "重新提交收录";
|
|
1716
1828
|
readonly 'myconfigs.list.title': "已上传";
|
|
1717
1829
|
readonly 'myconfigs.list.empty': "尚未上传任何配置";
|
|
1718
1830
|
readonly 'myconfigs.list.loading': "正在读取…";
|
|
@@ -1722,6 +1834,18 @@ declare const zh: {
|
|
|
1722
1834
|
readonly 'myconfigs.item.update': "更新";
|
|
1723
1835
|
readonly 'myconfigs.item.install': "装回本地";
|
|
1724
1836
|
readonly 'myconfigs.item.openPr': "查看收录 PR";
|
|
1837
|
+
readonly 'myconfigs.delete.run': "删除";
|
|
1838
|
+
readonly 'myconfigs.delete.confirm': "确认删除";
|
|
1839
|
+
readonly 'myconfigs.delete.confirmTitle': "删除条目";
|
|
1840
|
+
readonly 'myconfigs.delete.confirmText': "确认删除?该操作会从配置仓库永久删除该条目的索引与文件(不可恢复)";
|
|
1841
|
+
readonly 'myconfigs.delete.delistStarted': "已删除本地条目,并自动提交「下架 PR」(官方市场移除需人工合并,期间市场可能仍显示该条目)";
|
|
1842
|
+
readonly 'myconfigs.delete.prClosed': "已删除本地条目,并关闭该条目的待审核收录 PR";
|
|
1843
|
+
readonly 'disclaimer.title': "免责声明";
|
|
1844
|
+
readonly 'disclaimer.upload.text': "你即将把配置上传到你的公开仓库(<login>/dsh-configs)并提交官方市场收录申请。\n\n上传后内容将对所有人公开可见,且需经过人工审核才能进入官方市场。请确保:\n· 内容不包含任何真实密钥 / 凭据(环境变量引用如 $VAR 是安全的);\n· 内容不包含个人隐私或本地环境信息;\n· 你有权分享这些配置。";
|
|
1845
|
+
readonly 'disclaimer.download.text': "你即将从公共网络市场下载配置并导入本地。\n\n下载内容属于不可信输入:未经官方审核、可能包含风险(安装插件 / 写入文件 / 修改设置)。\n· 导入前会逐项展示并校验,高风险分区默认不导入、需逐项批准;\n· 导入会先自动创建快照,失败可回滚;\n· 请核对来源与内容后再确认导入。";
|
|
1846
|
+
readonly 'disclaimer.install.text': "你即将把配置从你的公开仓库装回本地。\n\n该内容属于你此前上传的配置,但同样会经过安全校验与逐分区批准:\n· 高风险分区默认不导入、需逐项批准;\n· 导入前自动创建快照,失败可回滚。";
|
|
1847
|
+
readonly 'disclaimer.confirm': "我已了解,继续";
|
|
1848
|
+
readonly 'disclaimer.dontAsk': "不再提示(该操作以后不再显示免责声明)";
|
|
1725
1849
|
readonly 'myconfigs.error.loadStatus': "登录状态读取失败";
|
|
1726
1850
|
readonly 'myconfigs.error.loadItems': "已上传列表读取失败";
|
|
1727
1851
|
readonly 'common.cancel': "取消";
|