dsh-skill-hub 0.3.7 → 0.3.8

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.
Files changed (109) hide show
  1. package/README.md +40 -50
  2. package/README.zh.md +38 -48
  3. package/lib/client.js +2209 -1820
  4. package/lib/client.js.map +1 -1
  5. package/lib/index.js +653 -419
  6. package/lib/types/client/SkillHubSettingsCard.d.ts +1 -0
  7. package/lib/types/client/api.d.ts +12 -6
  8. package/lib/types/client/helpers.d.ts +0 -1
  9. package/lib/types/client/locales/common.d.ts +52 -0
  10. package/lib/types/client/locales/detail.d.ts +16 -0
  11. package/lib/types/client/locales/market.d.ts +73 -0
  12. package/lib/types/client/locales/settings.d.ts +41 -0
  13. package/lib/types/client/locales/skills.d.ts +65 -0
  14. package/lib/types/client/locales/sources.d.ts +35 -0
  15. package/lib/types/client/locales.d.ts +124 -118
  16. package/lib/types/client/panel/MarketSourceRow.d.ts +12 -0
  17. package/lib/types/client/panel/MarketView.d.ts +1 -0
  18. package/lib/types/client/panel/RepoScanCard.d.ts +10 -0
  19. package/lib/types/client/panel/hooks/shared.d.ts +72 -0
  20. package/lib/types/client/panel/hooks/useCatalogFlow.d.ts +62 -0
  21. package/lib/types/client/panel/hooks/useGroupFlow.d.ts +41 -0
  22. package/lib/types/client/panel/hooks/useMarketFlow.d.ts +73 -0
  23. package/lib/types/client/panel/hooks/useMetaFlow.d.ts +18 -0
  24. package/lib/types/client/panel/hooks/useSourceFlow.d.ts +44 -0
  25. package/lib/types/client/panel/market-format.d.ts +6 -0
  26. package/lib/types/client/panel/useSkillHub.d.ts +45 -73
  27. package/lib/types/client/settings-card.d.ts +20 -0
  28. package/lib/types/client/settings-form.d.ts +6 -0
  29. package/lib/types/protocol/api.d.ts +38 -0
  30. package/lib/types/protocol/catalog.d.ts +155 -0
  31. package/lib/types/protocol/config.d.ts +113 -0
  32. package/lib/types/protocol/groups.d.ts +95 -0
  33. package/lib/types/protocol/market.d.ts +94 -0
  34. package/lib/types/protocol/repo.d.ts +107 -0
  35. package/lib/types/protocol/sources.d.ts +139 -0
  36. package/lib/types/protocol/stats.d.ts +46 -0
  37. package/lib/types/protocol.d.ts +13 -743
  38. package/lib/types/repo/github-client.d.ts +42 -0
  39. package/lib/types/repo.d.ts +6 -17
  40. package/lib/types/routes/catalog.d.ts +7 -0
  41. package/lib/types/routes/config.d.ts +7 -0
  42. package/lib/types/routes/groups.d.ts +7 -0
  43. package/lib/types/routes/helpers.d.ts +145 -0
  44. package/lib/types/routes/market.d.ts +8 -0
  45. package/lib/types/routes/repo-import.d.ts +7 -0
  46. package/lib/types/routes/route-state.d.ts +55 -0
  47. package/lib/types/routes/sources.d.ts +8 -0
  48. package/lib/types/routes.d.ts +5 -34
  49. package/lib/types/stats.d.ts +3 -2
  50. package/lib/types/store/errors.d.ts +10 -0
  51. package/lib/types/store/migrate.d.ts +44 -0
  52. package/lib/types/store/paths.d.ts +32 -0
  53. package/lib/types/store/store.d.ts +133 -0
  54. package/lib/types/store.d.ts +7 -146
  55. package/package.json +28 -27
  56. package/src/client/SkillHubSettingsCard.tsx +17 -3
  57. package/src/client/api.ts +101 -195
  58. package/src/client/helpers.ts +10 -1
  59. package/src/client/locales/common.ts +102 -0
  60. package/src/client/locales/detail.ts +30 -0
  61. package/src/client/locales/market.ts +144 -0
  62. package/src/client/locales/settings.ts +80 -0
  63. package/src/client/locales/skills.ts +128 -0
  64. package/src/client/locales/sources.ts +68 -0
  65. package/src/client/locales.ts +26 -512
  66. package/src/client/panel/MarketSourceRow.tsx +108 -0
  67. package/src/client/panel/MarketView.tsx +12 -253
  68. package/src/client/panel/RepoScanCard.tsx +171 -0
  69. package/src/client/panel/hooks/shared.ts +81 -0
  70. package/src/client/panel/hooks/useCatalogFlow.ts +211 -0
  71. package/src/client/panel/hooks/useGroupFlow.ts +240 -0
  72. package/src/client/panel/hooks/useMarketFlow.ts +421 -0
  73. package/src/client/panel/hooks/useMetaFlow.ts +58 -0
  74. package/src/client/panel/hooks/useSourceFlow.ts +193 -0
  75. package/src/client/panel/market-format.ts +22 -0
  76. package/src/client/panel/useSkillHub.ts +141 -1032
  77. package/src/client/settings-card.tsx +51 -0
  78. package/src/client/settings-form.ts +18 -0
  79. package/src/index.ts +14 -4
  80. package/src/protocol/api.ts +38 -0
  81. package/src/protocol/catalog.ts +168 -0
  82. package/src/protocol/config.ts +145 -0
  83. package/src/protocol/groups.ts +106 -0
  84. package/src/protocol/market.ts +100 -0
  85. package/src/protocol/repo.ts +104 -0
  86. package/src/protocol/sources.ts +146 -0
  87. package/src/protocol/stats.ts +42 -0
  88. package/src/protocol.ts +83 -809
  89. package/src/repo/github-client.ts +131 -0
  90. package/src/repo.test.ts +24 -1
  91. package/src/repo.ts +50 -170
  92. package/src/routes/catalog.ts +309 -0
  93. package/src/routes/config.ts +119 -0
  94. package/src/routes/groups.ts +133 -0
  95. package/src/routes/helpers.ts +489 -0
  96. package/src/routes/market.ts +255 -0
  97. package/src/routes/repo-import.ts +267 -0
  98. package/src/routes/route-state.ts +89 -0
  99. package/src/routes/sources.ts +318 -0
  100. package/src/routes.test.ts +20 -0
  101. package/src/routes.ts +21 -1699
  102. package/src/stats.test.ts +58 -3
  103. package/src/stats.ts +45 -16
  104. package/src/store/errors.ts +14 -0
  105. package/src/store/migrate.ts +272 -0
  106. package/src/store/paths.ts +43 -0
  107. package/src/store/store.ts +532 -0
  108. package/src/store.test.ts +18 -0
  109. package/src/store.ts +7 -737
@@ -0,0 +1,144 @@
1
+ /** 市场与仓库扫描导入。从 locales.ts 按前缀拆出,键集合不变。 */
2
+ export const zhMarket = {
3
+ 'market.addPlaceholder': 'owner/repo 或 https://github.com/…',
4
+ 'market.addSource': '添加源',
5
+ 'market.noSources': '还没有市场源。从下方内置市场添加,或输入一个 GitHub 仓库。',
6
+ 'market.title': '市场',
7
+ 'market.catalogHint': '精选技能仓库,添加后即可扫描安装,并持续检查更新。',
8
+ 'market.catalog.anthropics': 'Anthropic 官方技能合集(Claude Skills)',
9
+ 'market.catalog.superpowers': 'Superpowers 社区技能合集',
10
+ 'market.catalog.mattpocock': 'Matt Pocock 技能集',
11
+ 'market.catalog.openDesign': '设计技能合集(design-templates)',
12
+ 'market.add': '添加',
13
+ 'market.installed': '已装 {count}',
14
+ 'market.updatable': '可更新 {count}',
15
+ 'market.deletedUpstream': '上游已删 {count}',
16
+ 'market.checkAll': '检查全部',
17
+ 'market.updateAll': '全部更新',
18
+ 'market.updateAllConfirmTitle': '批量更新全部技能?',
19
+ 'market.updateAllConfirmText': '将把以下来源的可更新技能更新到上游最新版本(覆盖本地修改):',
20
+ 'market.updateAllItem': '{repo}({count} 个技能)',
21
+ 'market.updateAllDone': '已更新 {count} 个来源',
22
+ 'market.deleteSource': '移除源',
23
+ 'market.scan': '扫描',
24
+ 'market.scanning': '扫描中…',
25
+ 'market.check': '检查',
26
+ 'market.checkUpdate': '检查更新',
27
+ 'market.checking': '检查中…',
28
+ 'market.upToDate': '已是最新',
29
+ 'market.update': '更新',
30
+ 'market.updateCount': '更新 {count} 个',
31
+ 'market.sync': '同步',
32
+ 'market.syncing': '同步中…',
33
+ 'market.updated': '有更新',
34
+ 'market.newRelease': '新版本 v{version}',
35
+ 'market.branchTitle': '选择分支',
36
+ 'market.branchHint': '该仓库没有正式发布,选择要跟踪的分支(默认为 main):',
37
+ 'market.branchConfirm': '确定',
38
+ 'market.versionTitle': '切换跟踪版本',
39
+ 'market.versionText': '选择 {repo} 要跟踪的版本,切换后建议重新扫描并同步已装技能',
40
+ 'market.versionCurrent': '当前 {ref}',
41
+ 'market.versionReleases': '发布版',
42
+ 'market.versionBranches': '分支',
43
+ 'market.versionCustom': '自定义(tag / 分支 / commit)',
44
+ 'market.versionConfirm': '切换到 {ref}',
45
+ 'market.versionHint': '点击切换跟踪版本',
46
+ 'market.unpinned': '未定版',
47
+ 'market.starsHint': 'GitHub 星标 {count} 个',
48
+ 'market.downloadsHint': '发布附件累计下载 {count} 次',
49
+ 'market.syncTitle': '同步本地技能',
50
+ 'market.syncText': '市场源已对齐到 {ref},要同步更新以下本地技能吗?',
51
+ 'market.syncNone': '该来源还没有导入本地技能。',
52
+ 'market.syncCancel': '跳过',
53
+ 'market.removeHint': '移除源不影响已安装的技能。',
54
+ 'repo.ready': '发现 {count} 个可导入技能',
55
+ 'repo.truncated': '⚠ 仓库过大,仅展示部分技能(GitHub 截断),可缩小仓库或指定子目录',
56
+ 'repo.empty': '没有找到可导入技能。',
57
+ 'repo.selectAll': '全选',
58
+ 'repo.clearAll': '清空',
59
+ 'repo.import': '导入所选 ({count})',
60
+ 'repo.importing': '导入中…',
61
+ 'repo.existing': '已存在',
62
+ 'repo.files': '{count} 个文件 · {size}',
63
+ 'repo.imported': '导入成功 {count} 个',
64
+ 'repo.skippedExisting': '跳过已存在 {count} 个',
65
+ 'repo.failed': '失败 {count} 个',
66
+ 'repo.cancel': '取消',
67
+ 'repo.cancelled': '已取消 · 已导入 {imported}/{total} 已保留,临时文件已清理',
68
+ 'repo.importingCurrent': '正在导入: {name} ({done}/{total})',
69
+ 'repo.root.skills': '技能 skills',
70
+ 'repo.root.designTemplates': '模板 design-templates',
71
+ 'repo.root.generic': '{root}',
72
+ } as const
73
+
74
+ export const enMarket: Record<keyof typeof zhMarket, string> = {
75
+ 'market.addPlaceholder': 'owner/repo or https://github.com/…',
76
+ 'market.addSource': 'Add source',
77
+ 'market.noSources': 'No market sources yet. Add one from the built-in catalog below, or enter a GitHub repo.',
78
+ 'market.title': 'Market',
79
+ 'market.catalogHint': 'Curated skill repos — add one to scan and install, with ongoing update checks.',
80
+ 'market.catalog.anthropics': 'Official Anthropic skill collection (Claude Skills)',
81
+ 'market.catalog.superpowers': 'Superpowers community skill collection',
82
+ 'market.catalog.mattpocock': 'Matt Pocock skill collection',
83
+ 'market.catalog.openDesign': 'Design skill collection (design-templates)',
84
+ 'market.add': 'Add',
85
+ 'market.installed': '{count} installed',
86
+ 'market.updatable': '{count} updatable',
87
+ 'market.deletedUpstream': '{count} deleted upstream',
88
+ 'market.checkAll': 'Check all',
89
+ 'market.updateAll': 'Update all',
90
+ 'market.updateAllConfirmTitle': 'Update every skill?',
91
+ 'market.updateAllConfirmText': 'The updatable skills of these sources will be overwritten with their latest upstream versions:',
92
+ 'market.updateAllItem': '{repo} ({count} skills)',
93
+ 'market.updateAllDone': 'Updated {count} sources',
94
+ 'market.deleteSource': 'Remove source',
95
+ 'market.scan': 'Scan',
96
+ 'market.scanning': 'Scanning…',
97
+ 'market.check': 'Check',
98
+ 'market.checkUpdate': 'Check for updates',
99
+ 'market.checking': 'Checking…',
100
+ 'market.upToDate': 'Up to date',
101
+ 'market.update': 'Update',
102
+ 'market.updateCount': 'Update {count}',
103
+ 'market.sync': 'Sync',
104
+ 'market.syncing': 'Syncing…',
105
+ 'market.updated': 'Updates available',
106
+ 'market.newRelease': 'New release v{version}',
107
+ 'market.branchTitle': 'Choose a branch',
108
+ 'market.branchHint': 'This repo has no releases. Pick a branch to track (main by default):',
109
+ 'market.branchConfirm': 'Confirm',
110
+ 'market.versionTitle': 'Switch tracked version',
111
+ 'market.versionText': 'Pick the version for {repo} to track; rescan and sync installed skills afterwards',
112
+ 'market.versionCurrent': 'current {ref}',
113
+ 'market.versionReleases': 'Releases',
114
+ 'market.versionBranches': 'Branches',
115
+ 'market.versionCustom': 'Custom (tag / branch / commit)',
116
+ 'market.versionConfirm': 'Switch to {ref}',
117
+ 'market.versionHint': 'Click to switch the tracked version',
118
+ 'market.unpinned': 'unpinned',
119
+ 'market.starsHint': '{count} GitHub stars',
120
+ 'market.downloadsHint': '{count} release asset downloads',
121
+ 'market.syncTitle': 'Update local skills',
122
+ 'market.syncText': 'Market source aligned to {ref}. Update these local skills?',
123
+ 'market.syncNone': 'No local skills tracked from this repo yet.',
124
+ 'market.syncCancel': 'Skip',
125
+ 'market.removeHint': 'Removing a source does not affect installed skills.',
126
+ 'repo.ready': '{count} importable skills found',
127
+ 'repo.truncated': '⚠ Repo too large, only partial skills shown (GitHub truncated)',
128
+ 'repo.empty': 'No importable skills found.',
129
+ 'repo.selectAll': 'Select all',
130
+ 'repo.clearAll': 'Clear',
131
+ 'repo.import': 'Import selected ({count})',
132
+ 'repo.importing': 'Importing…',
133
+ 'repo.existing': 'Existing',
134
+ 'repo.files': '{count} files · {size}',
135
+ 'repo.imported': 'Imported {count}',
136
+ 'repo.skippedExisting': 'Skipped existing {count}',
137
+ 'repo.failed': 'Failed {count}',
138
+ 'repo.cancel': 'Cancel',
139
+ 'repo.cancelled': 'Cancelled · {imported}/{total} kept, temp files cleaned',
140
+ 'repo.importingCurrent': 'Importing: {name} ({done}/{total})',
141
+ 'repo.root.skills': 'Skills',
142
+ 'repo.root.designTemplates': 'Templates design-templates',
143
+ 'repo.root.generic': '{root}',
144
+ }
@@ -0,0 +1,80 @@
1
+ /** 设置卡。从 locales.ts 按前缀拆出,键集合不变。 */
2
+ export const zhSettings = {
3
+ 'settings.title': '技能中枢',
4
+ 'settings.description': '管理 dsh 本地技能目录:浏览、分组、来源同步与新建。',
5
+ 'settings.enabled': '启用插件',
6
+ 'settings.enabledHint': '关闭后技能中枢的路由、入口与公告全部下线。',
7
+ 'settings.announceToAgent': '向 Agent 公告',
8
+ 'settings.announceToAgentHint': '在系统提示中加入本插件说明,用户提到技能管理时 Agent 知道如何协作。',
9
+ 'settings.dotModelColor': '模型可调圆点颜色',
10
+ 'settings.dotModelColorHint': '技能行/聊天 / 菜单中「模型可调」蓝色圆点的颜色(#rrggbb)。',
11
+ 'settings.dotUserColor': '用户可调圆点颜色',
12
+ 'settings.dotUserColorHint': '技能行/聊天 / 菜单中「仅用户可调」绿色圆点的颜色(#rrggbb)。',
13
+ 'settings.showUseCount': '显示调用次数',
14
+ 'settings.showUseCountHint': '在技能名旁显示琥珀色调用次数。',
15
+ 'settings.showUseTime': '显示最近调用时间',
16
+ 'settings.showUseTimeHint': '在技能名行右侧显示相对时间(如「3 天前」)。',
17
+ 'settings.showGroupSummary': '显示分组汇总',
18
+ 'settings.showGroupSummaryHint': '在分组标题后汇总调用次数与最近调用时间。',
19
+ 'settings.statsWindowDays': '统计窗口(天)',
20
+ 'settings.statsWindowDaysHint': '只统计最近 N 天的使用次数,默认 14 天;0 = 全部历史。改动立即生效。',
21
+ 'settings.statsScanMinutes': '自动统计间隔(分钟)',
22
+ 'settings.statsScanMinutesHint': '后台扫描会话日志的间隔,最小 1 分钟;扫描耗时会自动拉长间隔。',
23
+ 'settings.githubToken': 'GitHub Token',
24
+ 'settings.githubTokenHint': '市场/来源走 GitHub API,匿名每小时 60 次,填 token 后 5000 次。细粒度 token 无需任何权限。明文存本地设置,仅回环可读;留空即匿名(或跟随 GITHUB_TOKEN 环境变量)。',
25
+ 'settings.githubTokenPlaceholder': 'ghp_… / github_pat_…(留空为匿名)',
26
+ 'settings.inherit': '继承',
27
+ 'settings.on': '开',
28
+ 'settings.off': '关',
29
+ 'settings.overridden': '已覆盖',
30
+ 'settings.reset': '恢复默认',
31
+ 'settings.unsaved': '未保存',
32
+ 'settings.save': '保存',
33
+ 'settings.saving': '保存中…',
34
+ 'settings.discard': '放弃修改',
35
+ 'settings.saveFailed': '本部署没有接受这些值,已保留供你修改。',
36
+ 'settings.readOnly': '本部署的设置为只读。',
37
+ 'settings.notExposed': '本部署没有挂载该设置命名空间。',
38
+ 'settings.collapse': '收起设置',
39
+ 'settings.expand': '展开设置',
40
+ } as const
41
+
42
+ export const enSettings: Record<keyof typeof zhSettings, string> = {
43
+ 'settings.title': 'Skill Hub',
44
+ 'settings.description': 'Manage the local dsh skill catalog: browse, group, sync, and scaffold skills.',
45
+ 'settings.enabled': 'Enable plugin',
46
+ 'settings.enabledHint': 'Disables the hub routes, entries, and announcement.',
47
+ 'settings.announceToAgent': 'Announce to agent',
48
+ 'settings.announceToAgentHint': 'Adds a system-prompt section so agents know how to collaborate when users mention skill management.',
49
+ 'settings.dotModelColor': 'Model-invocable dot color',
50
+ 'settings.dotModelColorHint': 'Color of the blue "model-callable" dot in the skill panel and the chat / menu (#rrggbb).',
51
+ 'settings.dotUserColor': 'User-invocable dot color',
52
+ 'settings.dotUserColorHint': 'Color of the green "user-only" dot in the skill panel and the chat / menu (#rrggbb).',
53
+ 'settings.showUseCount': 'Show invocation count',
54
+ 'settings.showUseCountHint': 'Show the amber invocation count beside each skill name.',
55
+ 'settings.showUseTime': 'Show last-used time',
56
+ 'settings.showUseTimeHint': 'Show relative last-used time on the name row (e.g. "3 d ago").',
57
+ 'settings.showGroupSummary': 'Show group summaries',
58
+ 'settings.showGroupSummaryHint': 'Summarize invocation count and last-used time after group titles.',
59
+ 'settings.statsWindowDays': 'Stats window (days)',
60
+ 'settings.statsWindowDaysHint': 'Count only usage within the last N days (default 14); 0 = full history. Changes apply immediately.',
61
+ 'settings.statsScanMinutes': 'Auto stats interval (minutes)',
62
+ 'settings.statsScanMinutesHint': 'How often the background session-log scan runs (min 1); heavy scans automatically stretch it.',
63
+ 'settings.githubToken': 'GitHub token',
64
+ 'settings.githubTokenHint': 'Market/sources use the GitHub API: 60 req/h anonymous, 5000/hr with a token. A fine-grained token needs no permissions. Stored plaintext in local settings, loopback-only; empty means anonymous (or GITHUB_TOKEN env).',
65
+ 'settings.githubTokenPlaceholder': 'ghp_… / github_pat_… (empty = anonymous)',
66
+ 'settings.inherit': 'Inherit',
67
+ 'settings.on': 'On',
68
+ 'settings.off': 'Off',
69
+ 'settings.overridden': 'Overridden',
70
+ 'settings.reset': 'Reset to default',
71
+ 'settings.unsaved': 'Unsaved',
72
+ 'settings.save': 'Save',
73
+ 'settings.saving': 'Saving…',
74
+ 'settings.discard': 'Discard',
75
+ 'settings.saveFailed': 'The deployment did not accept these values; they were left for you to correct.',
76
+ 'settings.readOnly': 'This deployment stores settings read-only.',
77
+ 'settings.notExposed': 'This deployment does not expose the settings namespace.',
78
+ 'settings.collapse': 'Hide settings',
79
+ 'settings.expand': 'Show settings',
80
+ }
@@ -0,0 +1,128 @@
1
+ /** 技能浏览:行徽章/分组/场景/过滤排序/相对时间。从 locales.ts 按前缀拆出,键集合不变。 */
2
+ export const zhSkills = {
3
+ 'group.project-dsh': '项目 .dsh/skills',
4
+ 'group.project-agents': '项目 .agents/skills',
5
+ 'group.custom': '自定义目录',
6
+ 'group.runtime': '运行时',
7
+ 'group.user-dsh': '用户 ~/.dsh/skills',
8
+ 'group.user-agents': '用户 ~/.agents/skills',
9
+ 'group.bundled': '内置',
10
+ 'group.other': '其他来源',
11
+ 'groups.new': '新建场景',
12
+ 'groups.namePlaceholder': '场景名',
13
+ 'groups.edit': '编辑',
14
+ 'groups.rename': '保存名称',
15
+ 'groups.delete': '删除场景',
16
+ 'groups.saveMembers': '保存成员',
17
+ 'groups.membersHint': '勾选技能加入此场景(含已禁用)。',
18
+ 'groups.empty': '还没有场景。先新建一个,再把技能归类。',
19
+ 'groups.noCollections': '暂无来源组。从市场导入技能后自动按来源聚合。',
20
+ 'groups.personal': '个人',
21
+ 'groups.project': '项目级',
22
+ 'groups.subdivide': '细分',
23
+ 'groups.merge': '合并',
24
+ 'groups.noWritable': '该组没有可写技能(只读技能无法由中枢开关)',
25
+ 'groups.closeAll': '全部关闭',
26
+ 'groups.keepOn': '保留开启',
27
+ 'groups.conflictTitle': '关闭此组?',
28
+ 'groups.conflictText': '以下技能也在其他组中开启,关闭它们会影响那些组:',
29
+ 'filter.allSources': '全部来源',
30
+ 'filter.private': '个人',
31
+ 'sort.name': '按名称',
32
+ 'sort.added': '按添加时间',
33
+ 'sort.uses': '按调用次数',
34
+ 'time.justNow': '刚刚',
35
+ 'time.minutesAgo': '{value} 分钟前',
36
+ 'time.hoursAgo': '{value} 小时前',
37
+ 'time.daysAgo': '{value} 天前',
38
+ 'time.weeksAgo': '{value} 周前',
39
+ 'badge.source.project-dsh': '项目 .dsh',
40
+ 'badge.source.project-agents': '项目 .agents',
41
+ 'badge.source.custom': '自定义',
42
+ 'badge.source.runtime': '运行时',
43
+ 'badge.source.user-dsh': '用户 .dsh',
44
+ 'badge.source.user-agents': '用户 .agents',
45
+ 'badge.source.bundled': '内置',
46
+ 'row.readonly': '只读',
47
+ 'row.disable': '禁用',
48
+ 'row.enable': '启用',
49
+ 'row.delete': '移入回收站',
50
+ 'row.open': '查看 {name} 详情(回车)',
51
+ 'row.duplicate': '重名',
52
+ 'row.duplicateHint': '同名技能存在多个来源,当前显示为优先级最高的版本',
53
+ 'row.copy': '复制',
54
+ 'row.copyMention': '复制 $mention',
55
+ 'row.copied': '已复制',
56
+ 'row.copyPath': '复制路径',
57
+ 'filter.invocation': '调用',
58
+ 'filter.invocationAll': '全部调用',
59
+ 'filter.modelOnly': '模型可调',
60
+ 'filter.userOnly': '用户可调',
61
+ 'filter.showing': '显示 {shown}/{total}(已启用){filtered}',
62
+ 'filter.filteredSuffix': ' · 已筛选',
63
+ 'filter.shortened': '短描述 {count} 条,悬浮看全文',
64
+ } as const
65
+
66
+ export const enSkills: Record<keyof typeof zhSkills, string> = {
67
+ 'group.project-dsh': 'Project .dsh/skills',
68
+ 'group.project-agents': 'Project .agents/skills',
69
+ 'group.custom': 'Custom directories',
70
+ 'group.runtime': 'Runtime',
71
+ 'group.user-dsh': 'User ~/.dsh/skills',
72
+ 'group.user-agents': 'User ~/.agents/skills',
73
+ 'group.bundled': 'Bundled',
74
+ 'group.other': 'Other sources',
75
+ 'groups.new': 'New scene',
76
+ 'groups.namePlaceholder': 'Scene name',
77
+ 'groups.edit': 'Edit',
78
+ 'groups.rename': 'Save name',
79
+ 'groups.delete': 'Delete scene',
80
+ 'groups.saveMembers': 'Save members',
81
+ 'groups.membersHint': 'Check skills to add to this scene (disabled skills included).',
82
+ 'groups.empty': 'No scenes yet. Create one and start categorizing skills.',
83
+ 'groups.noCollections': 'No source groups yet. Import skills from the market to group them by source.',
84
+ 'groups.personal': 'Personal',
85
+ 'groups.project': 'Project',
86
+ 'groups.subdivide': 'Split',
87
+ 'groups.merge': 'Merge',
88
+ 'groups.noWritable': 'No writable skills in this group (read-only skills cannot be switched from the hub)',
89
+ 'groups.closeAll': 'Close all',
90
+ 'groups.keepOn': 'Keep on',
91
+ 'groups.conflictTitle': 'Close this group?',
92
+ 'groups.conflictText': 'These skills are also enabled in other groups; closing them affects those groups:',
93
+ 'filter.allSources': 'All sources',
94
+ 'filter.private': 'Personal',
95
+ 'sort.name': 'By name',
96
+ 'sort.added': 'By added',
97
+ 'sort.uses': 'By uses',
98
+ 'time.justNow': 'just now',
99
+ 'time.minutesAgo': '{value} min ago',
100
+ 'time.hoursAgo': '{value} h ago',
101
+ 'time.daysAgo': '{value} d ago',
102
+ 'time.weeksAgo': '{value} w ago',
103
+ 'badge.source.project-dsh': 'project .dsh',
104
+ 'badge.source.project-agents': 'project .agents',
105
+ 'badge.source.custom': 'custom',
106
+ 'badge.source.runtime': 'runtime',
107
+ 'badge.source.user-dsh': 'user .dsh',
108
+ 'badge.source.user-agents': 'user .agents',
109
+ 'badge.source.bundled': 'bundled',
110
+ 'row.readonly': 'read-only',
111
+ 'row.disable': 'Disable',
112
+ 'row.enable': 'Enable',
113
+ 'row.delete': 'Move to trash',
114
+ 'row.open': 'View {name} details (Enter)',
115
+ 'row.duplicate': 'duplicate',
116
+ 'row.duplicateHint': 'Multiple sources provide this name; the highest-priority one is shown',
117
+ 'row.copy': 'Copy',
118
+ 'row.copyMention': 'Copy $mention',
119
+ 'row.copied': 'Copied',
120
+ 'row.copyPath': 'Copy path',
121
+ 'filter.invocation': 'Invocation',
122
+ 'filter.invocationAll': 'All',
123
+ 'filter.modelOnly': 'Model',
124
+ 'filter.userOnly': 'User',
125
+ 'filter.showing': 'Showing {shown}/{total} (enabled){filtered}',
126
+ 'filter.filteredSuffix': ' · filtered',
127
+ 'filter.shortened': '{count} short descriptions, hover for full text',
128
+ }
@@ -0,0 +1,68 @@
1
+ /** 来源跟踪与回收站(含删除确认)。从 locales.ts 按前缀拆出,键集合不变。 */
2
+ export const zhSources = {
3
+ 'delete.confirmTitle': '移入回收站?',
4
+ 'delete.confirmText': '确定把「{name}」移入回收站吗?可随时恢复。',
5
+ 'delete.confirm': '移入回收站',
6
+ 'source.private': '个人技能(未绑定上游,不检查更新)',
7
+ 'source.commit': '已同步版本',
8
+ 'source.unverified': '尚未核对上游',
9
+ 'source.check': '检查更新',
10
+ 'source.checkHint': '点击检查上游更新',
11
+ 'source.checking': '检查中…',
12
+ 'source.upToDate': '已是最新',
13
+ 'source.updated': '有更新 {count} 个',
14
+ 'source.deleted': '上游已删除 {count} 个',
15
+ 'source.error': '检查失败',
16
+ 'source.throttled': '刚刚检查过',
17
+ 'source.sync': '同步',
18
+ 'source.syncing': '同步中…',
19
+ 'source.syncConfirmTitle': '同步技能?',
20
+ 'source.syncConfirmText': '将用上游最新版本覆盖本地对以下技能的所有修改:',
21
+ 'source.followDelete': '跟进删除',
22
+ 'source.deleteConfirmTitle': '跟进上游删除?',
23
+ 'source.deleteConfirmText': '以下技能已从上游仓库移除,本地目录将移入回收站(可恢复):',
24
+ 'source.deleteGroup': '删除整组',
25
+ 'source.deleteGroupHint': '删除该分组下的全部 {count} 个技能',
26
+ 'source.deleteGroupTitle': '删除整组?',
27
+ 'source.deleteGroupText': '将把分组“{name}”下的全部 {count} 个技能移入回收站(可恢复),只读技能会跳过:',
28
+ 'source.trash': '回收站',
29
+ 'source.restore': '恢复',
30
+ 'source.clearTrash': '清空回收站',
31
+ 'source.clearTrashConfirmTitle': '清空回收站?',
32
+ 'source.clearTrashConfirmText': '回收站里的技能会被永久删除,无法恢复。此操作不可撤销。',
33
+ 'source.clearTrashConfirm': '永久删除',
34
+ } as const
35
+
36
+ export const enSources: Record<keyof typeof zhSources, string> = {
37
+ 'delete.confirmTitle': 'Move to trash?',
38
+ 'delete.confirmText': 'Move "{name}" to trash? It can be restored anytime.',
39
+ 'delete.confirm': 'Move to trash',
40
+ 'source.private': 'Personal skill (not bound to an upstream; no update checks)',
41
+ 'source.commit': 'Synced commit',
42
+ 'source.unverified': 'upstream not verified yet',
43
+ 'source.check': 'Check for updates',
44
+ 'source.checkHint': 'Click to check the upstream for updates',
45
+ 'source.checking': 'Checking…',
46
+ 'source.upToDate': 'Up to date',
47
+ 'source.updated': '{count} updates',
48
+ 'source.deleted': '{count} deleted upstream',
49
+ 'source.error': 'Check failed',
50
+ 'source.throttled': 'Checked recently',
51
+ 'source.sync': 'Sync',
52
+ 'source.syncing': 'Syncing…',
53
+ 'source.syncConfirmTitle': 'Sync skills?',
54
+ 'source.syncConfirmText': 'This overwrites local changes to these skills with the latest upstream version:',
55
+ 'source.followDelete': 'Follow deletion',
56
+ 'source.deleteConfirmTitle': 'Follow upstream deletion?',
57
+ 'source.deleteConfirmText': 'These skills were removed upstream; their local directories move to trash (restorable):',
58
+ 'source.deleteGroup': 'Delete group',
59
+ 'source.deleteGroupHint': 'Delete all {count} skills in this group',
60
+ 'source.deleteGroupTitle': 'Delete group?',
61
+ 'source.deleteGroupText': 'All {count} skills in group "{name}" will be moved to trash (restorable); read-only skills will be skipped:',
62
+ 'source.trash': 'Trash',
63
+ 'source.restore': 'Restore',
64
+ 'source.clearTrash': 'Empty trash',
65
+ 'source.clearTrashConfirmTitle': 'Empty the trash?',
66
+ 'source.clearTrashConfirmText': 'Skills in the trash will be permanently deleted and cannot be restored.',
67
+ 'source.clearTrashConfirm': 'Delete permanently',
68
+ }