@chatcode/cco-market 1.45.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.
Files changed (177) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +146 -0
  3. package/README.zh.md +143 -0
  4. package/UPDATE-API-V1.md +132 -0
  5. package/client/client.js +11534 -0
  6. package/cordis.patch.yml +5 -0
  7. package/lib/accelerate.js +184 -0
  8. package/lib/agents.js +36 -0
  9. package/lib/backup.js +572 -0
  10. package/lib/catalog-local-match.js +126 -0
  11. package/lib/catalog-npm.js +111 -0
  12. package/lib/changelog.js +242 -0
  13. package/lib/channels.js +64 -0
  14. package/lib/check.js +1067 -0
  15. package/lib/compatibility.js +198 -0
  16. package/lib/diagnostics.js +49 -0
  17. package/lib/discovery-compatibility.js +260 -0
  18. package/lib/dsh-cli.js +949 -0
  19. package/lib/dsh-install.js +108 -0
  20. package/lib/gist.js +352 -0
  21. package/lib/groups.js +97 -0
  22. package/lib/home-paths.js +42 -0
  23. package/lib/hot.js +519 -0
  24. package/lib/http.js +39 -0
  25. package/lib/index.js +97 -0
  26. package/lib/install.js +387 -0
  27. package/lib/log.js +197 -0
  28. package/lib/ndjson.js +154 -0
  29. package/lib/net.js +98 -0
  30. package/lib/order.js +284 -0
  31. package/lib/patch.js +521 -0
  32. package/lib/pnpm-compat.js +490 -0
  33. package/lib/presets.js +278 -0
  34. package/lib/profile.js +911 -0
  35. package/lib/region-probe.js +93 -0
  36. package/lib/regions.js +253 -0
  37. package/lib/registry.js +204 -0
  38. package/lib/restart.js +373 -0
  39. package/lib/routes.js +4372 -0
  40. package/lib/settings.js +109 -0
  41. package/lib/skill-market/api.js +119 -0
  42. package/lib/skill-market/config.js +29 -0
  43. package/lib/skill-market/installer.js +352 -0
  44. package/lib/skill-market/runtime.js +13 -0
  45. package/lib/skill-market/tui.js +119 -0
  46. package/lib/skill-market/types.js +1 -0
  47. package/lib/skill-market/web-routes.js +123 -0
  48. package/lib/snapshot.js +500 -0
  49. package/lib/source-migration.js +54 -0
  50. package/lib/sources.js +596 -0
  51. package/lib/store.js +91 -0
  52. package/lib/themes.js +102 -0
  53. package/lib/trial.js +116 -0
  54. package/lib/types/accelerate.d.ts +85 -0
  55. package/lib/types/agents.d.ts +22 -0
  56. package/lib/types/backup.d.ts +131 -0
  57. package/lib/types/catalog-local-match.d.ts +50 -0
  58. package/lib/types/catalog-npm.d.ts +47 -0
  59. package/lib/types/changelog.d.ts +102 -0
  60. package/lib/types/channels.d.ts +56 -0
  61. package/lib/types/check.d.ts +266 -0
  62. package/lib/types/compatibility.d.ts +64 -0
  63. package/lib/types/diagnostics.d.ts +29 -0
  64. package/lib/types/discovery-compatibility.d.ts +80 -0
  65. package/lib/types/dsh-cli.d.ts +324 -0
  66. package/lib/types/dsh-install.d.ts +46 -0
  67. package/lib/types/gist.d.ts +53 -0
  68. package/lib/types/groups.d.ts +34 -0
  69. package/lib/types/home-paths.d.ts +16 -0
  70. package/lib/types/hot.d.ts +221 -0
  71. package/lib/types/http.d.ts +12 -0
  72. package/lib/types/index.d.ts +14 -0
  73. package/lib/types/install.d.ts +172 -0
  74. package/lib/types/log.d.ts +43 -0
  75. package/lib/types/ndjson.d.ts +52 -0
  76. package/lib/types/net.d.ts +58 -0
  77. package/lib/types/order.d.ts +100 -0
  78. package/lib/types/patch.d.ts +129 -0
  79. package/lib/types/pnpm-compat.d.ts +93 -0
  80. package/lib/types/presets.d.ts +90 -0
  81. package/lib/types/profile.d.ts +253 -0
  82. package/lib/types/region-probe.d.ts +50 -0
  83. package/lib/types/regions.d.ts +122 -0
  84. package/lib/types/registry.d.ts +86 -0
  85. package/lib/types/restart.d.ts +194 -0
  86. package/lib/types/routes.d.ts +67 -0
  87. package/lib/types/settings.d.ts +78 -0
  88. package/lib/types/skill-market/api.d.ts +10 -0
  89. package/lib/types/skill-market/config.d.ts +3 -0
  90. package/lib/types/skill-market/installer.d.ts +23 -0
  91. package/lib/types/skill-market/runtime.d.ts +10 -0
  92. package/lib/types/skill-market/tui.d.ts +4 -0
  93. package/lib/types/skill-market/types.d.ts +71 -0
  94. package/lib/types/skill-market/web-routes.d.ts +19 -0
  95. package/lib/types/snapshot.d.ts +93 -0
  96. package/lib/types/source-migration.d.ts +11 -0
  97. package/lib/types/sources.d.ts +216 -0
  98. package/lib/types/store.d.ts +30 -0
  99. package/lib/types/themes.d.ts +40 -0
  100. package/lib/types/trial.d.ts +61 -0
  101. package/lib/types/update-api-v1.d.ts +66 -0
  102. package/lib/types/updates.d.ts +123 -0
  103. package/lib/types/verify.d.ts +139 -0
  104. package/lib/update-api-v1.js +215 -0
  105. package/lib/updates.js +361 -0
  106. package/lib/verify.js +453 -0
  107. package/package.json +121 -0
  108. package/src/accelerate.ts +213 -0
  109. package/src/agents.ts +43 -0
  110. package/src/backup.ts +583 -0
  111. package/src/catalog-local-match.ts +144 -0
  112. package/src/catalog-npm.ts +120 -0
  113. package/src/changelog.ts +282 -0
  114. package/src/channels.ts +70 -0
  115. package/src/check.ts +1239 -0
  116. package/src/client/CommentsModal.tsx +119 -0
  117. package/src/client/Diagnostics.tsx +907 -0
  118. package/src/client/ErrorBoundary.tsx +111 -0
  119. package/src/client/InstallToast.tsx +31 -0
  120. package/src/client/Market.module.css +830 -0
  121. package/src/client/MarketSection.tsx +5301 -0
  122. package/src/client/OperationsPanel.tsx +365 -0
  123. package/src/client/SettingsCard.tsx +621 -0
  124. package/src/client/SkillMarket.module.css +21 -0
  125. package/src/client/SkillMarketSection.tsx +162 -0
  126. package/src/client/comments.ts +54 -0
  127. package/src/client/globals.d.ts +13 -0
  128. package/src/client/index.ts +180 -0
  129. package/src/client/locales.ts +1112 -0
  130. package/src/client/market-data.ts +1321 -0
  131. package/src/client/operations.ts +201 -0
  132. package/src/client/preset-panel.tsx +263 -0
  133. package/src/client/primitives.d.ts +140 -0
  134. package/src/client/self-check.ts +147 -0
  135. package/src/client/snapshot-panel.tsx +244 -0
  136. package/src/compatibility.ts +237 -0
  137. package/src/diagnostics.ts +84 -0
  138. package/src/discovery-compatibility.ts +315 -0
  139. package/src/dsh-cli.ts +1126 -0
  140. package/src/dsh-install.ts +118 -0
  141. package/src/gist.ts +362 -0
  142. package/src/groups.ts +111 -0
  143. package/src/home-paths.ts +53 -0
  144. package/src/hot.ts +628 -0
  145. package/src/http.ts +41 -0
  146. package/src/index.ts +128 -0
  147. package/src/install.ts +420 -0
  148. package/src/log.ts +206 -0
  149. package/src/ndjson.ts +185 -0
  150. package/src/net.ts +106 -0
  151. package/src/order.ts +303 -0
  152. package/src/patch.ts +522 -0
  153. package/src/pnpm-compat.ts +527 -0
  154. package/src/presets.ts +344 -0
  155. package/src/profile.ts +940 -0
  156. package/src/region-probe.ts +97 -0
  157. package/src/regions.ts +310 -0
  158. package/src/registry.ts +250 -0
  159. package/src/restart.ts +396 -0
  160. package/src/routes.ts +4506 -0
  161. package/src/settings.ts +141 -0
  162. package/src/skill-market/api.ts +130 -0
  163. package/src/skill-market/config.ts +32 -0
  164. package/src/skill-market/installer.ts +337 -0
  165. package/src/skill-market/runtime.ts +14 -0
  166. package/src/skill-market/tui.ts +157 -0
  167. package/src/skill-market/types.ts +80 -0
  168. package/src/skill-market/web-routes.ts +132 -0
  169. package/src/snapshot.ts +532 -0
  170. package/src/source-migration.ts +61 -0
  171. package/src/sources.ts +565 -0
  172. package/src/store.ts +89 -0
  173. package/src/themes.ts +125 -0
  174. package/src/trial.ts +156 -0
  175. package/src/update-api-v1.ts +277 -0
  176. package/src/updates.ts +400 -0
  177. package/src/verify.ts +492 -0
@@ -0,0 +1,1112 @@
1
+ /** zh/en dictionaries for the Market settings section and install toast. */
2
+
3
+ export const zh = {
4
+ nav: '插件市场',
5
+ title: 'ChatCode CLI',
6
+ skillNav: '技能市场',
7
+ skillSubtitle: '浏览并安装可由 Agent 按需调用的技能',
8
+ skillSearch: '搜索技能…',
9
+ skillNeedSession: '请先打开一个本地会话。技能安装目录由该会话的工作区决定。',
10
+ skillWorkspace: '当前工作区:',
11
+ skillTrustWarning: '技能会向 Agent 提供指令,也可能包含脚本和资源文件。安装前请确认你信任发布者。',
12
+ skillLoading: '正在加载技能目录…',
13
+ skillEmpty: '没有找到匹配的技能。',
14
+ skillRetry: '重试',
15
+ skillInstalled: '已安装',
16
+ skillNoDescription: '暂无简介',
17
+ skillDownloads: '次下载',
18
+ skillInstallProject: '安装到项目',
19
+ skillInstallUser: '安装到个人目录',
20
+ skillInstalling: '安装中…',
21
+ skillInstalledAt: '技能已安装到:',
22
+ skillPrevious: '上一页',
23
+ skillNext: '下一页',
24
+ setCardDesc: '查看插件市场版本与设置。',
25
+ setSelfUpToDate: '已是最新版本',
26
+ setSelfUpdateReady: '有新版本',
27
+ setSelfUpdateHint: '更新会下载新版本,重启后生效。',
28
+ setSelfUpToDateHint: '',
29
+ setSelfUpdate: '更新',
30
+ setSelfUpdatedHint: '已下载完成。重启 ChatCode CLI 后新版本才会生效——前端页面会立即更新,服务端不会。',
31
+ setRegion: '下载区域',
32
+ setRegionGlobal: '全球',
33
+ setRegionChina: '中国大陆',
34
+ setRegionGlobalHint: '从 npm 和 GitHub 官方源下载。',
35
+ setRegionChinaHint: '中国大陆访问更快。仅改变下载线路,插件来源不变。',
36
+ setRegionAuto: '已根据网络状况自动选择,可随时切换。',
37
+ setGithubProxy: 'GitHub 加速',
38
+ setGithubProxyAutoHint: '自动选择可用线路,失败时才切换。',
39
+ setGithubProxyCustom: '自定义',
40
+ setGithubProxyCustomHint: '优先使用自定义线路,失败后仍会尝试直连。',
41
+ setGithubProxyManagedHint: '由环境变量 CHATCODE_CLI_MARKET_GITHUB_PROXY 管理,界面中不可修改。',
42
+ setGithubProxyEdit: '编辑',
43
+ setGithubProxyAuto: '恢复自动',
44
+ setGithubProxyInput: 'HTTPS 加速前缀',
45
+ setGithubProxySave: '保存',
46
+ setChannel: '更新通道',
47
+ setChannelStable: '稳定版',
48
+ setChannelBeta: 'Beta',
49
+ setChannelStableHint: '仅接收正式发布版本。',
50
+ setChannelBetaHint: '提前获取待验证版本,可能不稳定。仅影响插件市场自身。',
51
+ setChannelDev: '开发版',
52
+ setChannelDevHint: '开发分支构建,未经验证,不建议普通用户使用。',
53
+ setChannelSwitch: '切换至',
54
+ setChannelSwitchHint: '该版本低于当前已安装版本。',
55
+ setSelfRemove: '卸载插件市场',
56
+ setSelfRemoveHint: '从这个 profile 卸载市场。已装的其它插件不受影响。',
57
+ setSelfConfirm: '确定要卸载插件市场吗?卸载后需使用命令行重新安装。',
58
+ setSelfPurge: '同时清除市场自己的数据',
59
+ setSelfPurgeOn: '将删除:市场的停用清单与自定义分组,以及市场写进 profile 补丁文件的停用行——被市场停用的插件将恢复运行。不涉及密码或令牌,市场从不把它们存在磁盘上。',
60
+ setSelfPurgeOff: '保留市场数据。注意:被市场停用的插件会保持停用,且移除后将没有界面可将其重新启用。',
61
+ setSelfRemoveConfirm: '确认卸载',
62
+ setSelfCancel: '取消',
63
+ setSelfWorking: '正在卸载…',
64
+ setSelfRemoved: '已卸载',
65
+ setSelfRemovedHint: '重启 ChatCode CLI 后完全清理。',
66
+ setSelfFailed: '操作失败',
67
+ versionHint: '插件市场版本 — 反馈问题时请附上',
68
+ subtitle: '发现社区为 ChatCode CLI 开发的插件',
69
+ submitPlugin: '申请收录插件 ↗',
70
+ descExpand: '展开',
71
+ descCollapse: '收起',
72
+ searchPh: '搜索插件,例如:通知、终端、记忆…',
73
+ searchFavoritesPh: '搜索收藏…',
74
+ favoriteAdd: '加入收藏',
75
+ favoriteRemove: '取消收藏',
76
+ favoritesEmpty: '还没有收藏。在「发现」或「主题」里点书签图标即可加入。',
77
+ favoritesResultCount: '共 {0} 个收藏',
78
+ favoritesPluginsSection: '插件({0})',
79
+ favoritesThemesSection: '主题({0})',
80
+ favoritesStaleEmpty: '收藏的条目已不在目录中。',
81
+ favoritesStaleNote: '{0} 个收藏已不在目录中',
82
+ favoritesClearStale: '清除失效收藏',
83
+ favoritesClearingStale: '清除中…',
84
+ tabDiscover: '发现',
85
+ tabFavorites: '收藏',
86
+ tabInstalled: '已安装',
87
+ tabAdvanced: '高级',
88
+ all: '全部',
89
+ install: '安装',
90
+ installing: '安装中…',
91
+ installedBadge: '✓ 已安装',
92
+ alreadyInstalled: '✓ 已安装',
93
+ restartBanner: '项变更完成,重启 ChatCode CLI 后生效',
94
+ uninstall: '卸载',
95
+ confirmRemove: '确认卸载?',
96
+ uninstalling: '卸载中…',
97
+ uninstallConfirmDesc: '将从当前 profile 中移除该插件。',
98
+ restartHint: '重启方式:关闭当前 ChatCode CLI 进程后重新运行(例如 chatcode-cli web)',
99
+ restartHintSupervised: '本进程是 {0} 服务的主进程,重启交给它负责——市场自己重启会连带杀掉 cgroup 里的接管进程,服务将起不来。请执行 systemctl restart <你的 unit>。确认你的配置能承受市场自行重启(如 KillMode=process),可在本插件配置里手动打开「允许重启」。',
100
+ restartHintDebugged: '当前 ChatCode CLI 进程正在被调试器附着。请从 IDE 或终端停止该进程后重新启动,市场不能从 UI 里杀掉正在调试的宿主。',
101
+ confirmTitle: '安装',
102
+ confirmWarn: '插件是社区第三方代码。安装即表示你信任该来源;构建脚本默认被禁止执行。',
103
+ cancel: '取消',
104
+ empty: '没有匹配的插件',
105
+ installedEmpty: '尚未安装社区插件,可前往「发现」页浏览',
106
+ loadFail: '插件目录加载失败,请稍后重试',
107
+ loadRetry: '重试',
108
+ installFail: '安装失败',
109
+ viewSource: '源码',
110
+ refreshBanner: '项变更需刷新页面生效',
111
+ refresh: '刷新页面',
112
+ update: '更新',
113
+ updating: '更新中…',
114
+ updated: '✓ 已更新,重启后生效',
115
+ cancelOp: '取消',
116
+ cancelled: '已取消',
117
+ busyWait: '已有操作正在进行,请等待其完成(同一时间只执行一个安装/更新/卸载)',
118
+ agentBusyUpdate: '有 agent 正在运行,请等待其完成或将其取消后再更新——更新会直接替换插件文件,运行中的 agent 可能中途报错或新旧版本混用。',
119
+ agentBusyInstall: '有 agent 正在运行,请等待其完成或将其取消后再安装——安装会修改插件文件,运行中的 agent 可能中途报错。',
120
+ favoriteFailed: '收藏失败,请稍后重试',
121
+ favoriteUnavailable: '收藏功能暂不可用。请刷新页面或重启 chatcode-cli web。',
122
+ favoriteBusy: '插件操作进行中,收藏已排队,请稍候再试',
123
+ compatRiskBanner: '检测到兼容性风险,建议重启前到诊断页处理,或一键回滚本次操作。',
124
+ compatRiskBannerNoRollback: '检测到兼容性风险,建议重启前到诊断页处理。',
125
+ shadowNameBanner: '本次操作让同一个插件名在两个层里同时存在,重启后只有一个会生效:',
126
+ brokenBundleBanner: '下列插件的前端文件已损坏、无法解析,刷新后界面可能空白,建议回滚:',
127
+ goDiagnose: '前往诊断页修复',
128
+ rollbackNow: '回滚本次操作',
129
+ rollingBack: '回滚中…',
130
+ rollbackUnavailable: '无法确认更新前的准确来源,自动回滚不可用。',
131
+ approveBuilds: '放行构建脚本并重试',
132
+ buildsSkipped: '该插件需要运行构建脚本才能工作,出于安全考虑已默认阻止。确认来源可信后,可放行并重新安装:',
133
+ restartNow: '立即重启',
134
+ dismiss: '关闭提示',
135
+ dismissNotice: '关闭此提示',
136
+ restarting: '正在重启…',
137
+ restartFail: '重启失败',
138
+ restartTimeout: '等待 ChatCode CLI 启动超时',
139
+ updateNow: '立即更新',
140
+ updateFail: '更新失败',
141
+ upToDate: '已是最新',
142
+ linkedDev: '本地开发',
143
+ notesLink: '更新内容',
144
+ notesRelease: '版本说明',
145
+ notesCommits: '提交记录',
146
+ notesCommitsRecent: '最近提交(未能对齐你当前安装的版本,仅供参考)',
147
+ notesNpm: '版本发布时间',
148
+ notesNone: '该插件未提供更新说明。',
149
+ notesLoadFail: '暂时读不到更新说明,稍后再试。',
150
+ migrateNpm: '换用 npm 版本',
151
+ migrateTitle: '换用 npm 版本?',
152
+ migrateDescription: '这会更改插件的安装来源,而不是普通版本更新。',
153
+ migrateCurrentSource: '当前来源',
154
+ migrateTargetSource: '新的 npm 来源',
155
+ migrateWarning: 'npm 包可能由不同发布者维护;仅在确认该目录映射可信时继续。',
156
+ migrateContinue: '确认换用 npm',
157
+ migrateFail: '来源迁移失败',
158
+ restore: '恢复',
159
+ restoreOnline: '换用线上版本',
160
+ restoreHint: '会卸载本地版本,重新安装线上版本,并保持更新检测。无法回退,请二次确认。',
161
+ hostIncompatibleTitle: '这个新版本要求更新的 ChatCode CLI',
162
+ hostIncompatibleBody: '{plugin} 声明它需要 ChatCode CLI {requirement},而你现在运行的是 {host}。装上去多半会直接报错,只能手动装回旧版。\n已经停下了,插件还是原来的版本。\n如果你确定这个版本号不准(例如桌面端捆绑的 ChatCode CLI 不报告版本),也可以继续更新。',
163
+ hostIncompatibleUnknown: '未知版本',
164
+ hostIncompatibleKeep: '保持现在的版本',
165
+ hostIncompatibleAnyway: '仍然更新',
166
+ restoreNameOnlyHint: '你本地这份没有写明来自哪个仓库,市场只能按包名去精选目录里找,找到的是下面这一个——它可能是同名的另一个作者写的插件,不是你这份的来源。确认前请先核对下面的作者和仓库地址。会卸载本地版本并安装它,无法回退。',
167
+ restoreContinue: '继续更新',
168
+ restoreProceed: '确认恢复',
169
+ restoreNoCatalogTitle: '无法恢复',
170
+ restoreNoCatalog: '精选目录里没有这个插件,无法恢复到线上版本。可以卸载本地版,或继续用本地开发。',
171
+ restoreNoMatch: '精选目录里有同名插件,但与你本地仓库不一致,无法安全恢复。可以卸载本地版,或继续用本地开发。',
172
+ restoreFail: '恢复失败',
173
+ exportLog: '导出日志',
174
+ crashTitle: '插件市场界面出错了',
175
+ crashHint: '市场没能正常显示,但你的插件都没有受影响,什么都没有被改动。\n点「重新加载」通常就能恢复;如果反复出现,请导出日志发到 issue 里——日志里会带上这次出错的具体位置。\n另外:如果你开了浏览器的网页翻译,请关掉它再试一次,那是已知会让界面出错的一个原因。',
176
+ crashReload: '重新加载',
177
+ crashDetails: '错误详情',
178
+ exportingLog: '导出中…',
179
+ exportedLog: '日志已导出:chatcode-cli-market-log.txt,请将其附在 issue 中',
180
+ exportLogFail: '日志导出失败',
181
+ readme: '使用说明',
182
+ comments: '评论',
183
+ commentsTitle: '评论',
184
+ commentsNote: '评论来自 GitHub Discussions。打开后会连接 giscus.app 与 GitHub;发表评论需要 GitHub 账号。',
185
+ commentsLoginHint: '在这里登录 GitHub 会离开本页,返回后需要重新打开 ChatCode CLI Web——这不是故障。请直接到 GitHub 上登录和发表评论,本页继续用来阅读。',
186
+ commentsLoading: '正在加载评论…',
187
+ commentsError: '评论加载失败。请检查网络连接后重试。',
188
+ commentsRetry: '重试',
189
+ commentsOnGitHub: '在 GitHub 登录并参与讨论',
190
+ terminalWarn: '这看起来是终端/命令行插件:安装到网页版 profile 可能不会生效,甚至导致 ChatCode CLI 无法启动。建议先阅读其使用说明,并按说明安装到对应的 profile。',
191
+ conflictTitle: '无法安装:与已安装的插件冲突',
192
+ conflictBody: '和已安装的插件冲突,只能留一个:',
193
+ conflictReverted: '已自动撤销,未改动任何插件',
194
+ conflictKeep: '保留已安装的插件',
195
+ conflictKeepNote: '',
196
+ conflictSwap: '改为安装这个',
197
+ conflictSwapNote: '被卸载的插件配置会保留,可以再装回来',
198
+ conflictDetails: '详情',
199
+ conflictOutcomeInstall: '安装',
200
+ conflictOutcomeSkip: '不安装',
201
+ conflictOutcomeKeep: '保留',
202
+ conflictOutcomeRemove: '卸载',
203
+ conflictWhy: 'cordis 不接受包含重复条目 id 的插件树,保留该插件将导致 ChatCode CLI 下次启动失败。',
204
+ opTitle: '任务',
205
+ opInstalling: '正在安装',
206
+ opNeedsYou: '项需处理',
207
+ opQueued: '排队中',
208
+ opQueuedAhead: '前面还有',
209
+ opRunning: '正在处理',
210
+ opNeedsChoice: '无法安装 · 已自动撤销,未改动任何插件',
211
+ opDone: '已完成',
212
+ opDoneRefresh: '已安装 · 刷新页面后生效',
213
+ opLeaveHint: '可离开本页面,完成后将通知你',
214
+ opEmpty: '暂无进行中的操作',
215
+ opEmptyHint: '安装、更新与卸载的进度将显示在这里',
216
+ opClose: '收起',
217
+ opClear: '清空已完成',
218
+ opDequeue: '移出队列',
219
+ opRetry: '重试',
220
+ opKind_install: '安装',
221
+ opKind_update: '更新',
222
+ opKind_uninstall: '卸载',
223
+ opBlockedCard: '无法安装 · 查看详情',
224
+ conflictDeclined: '已选择保留现有插件,未安装',
225
+ conflictReplacing: '正在替换…',
226
+ conflictReplaceFailed: '替换未完成。下列插件已卸载且未自动恢复,请手动确认:',
227
+ lightboxClose: '关闭预览',
228
+ lightboxPrev: '上一张',
229
+ lightboxNext: '下一张',
230
+ envMissing: '安装插件前需要先配置 pnpm 环境',
231
+ envFix: '自动配置',
232
+ envFixing: '正在配置…',
233
+ envFixFail: '自动配置失败。请使用「导出日志」,并将文件附在 issue 中',
234
+ loading: '正在加载插件目录…',
235
+ backTop: '回到顶部',
236
+ confirm: '确认',
237
+ confirmInstall: '确认安装',
238
+ cmdDetails: '安装命令',
239
+ catsMore: '更多分类',
240
+ catsLess: '收起',
241
+ filter: '筛选',
242
+ filterSort: '排序字段',
243
+ filterDir: '排序方向',
244
+ filterTime: '发布时间范围',
245
+ filterHost: '宿主版本',
246
+ hostAll: '显示全部',
247
+ hostCompatible: '适配当前 ChatCode CLI {0}',
248
+ hostDetecting: '正在识别宿主版本…',
249
+ hostUnknown: '宿主版本未知',
250
+ hostFilterLoading: '正在检查宿主要求 {0}/{1};未声明或无法确认的插件仍会显示',
251
+ hostFilterActive: '正在筛选适配 ChatCode CLI {0} 的插件;未声明或无法确认的插件仍会显示',
252
+ hostRequirement: 'ChatCode CLI {0}',
253
+ hostRequirementLoading: '正在读取宿主要求…',
254
+ hostRequirementUndeclared: '未声明宿主要求',
255
+ hostRequirementUnavailable: '宿主要求未知',
256
+ sortDownloads: 'npm 下载量(近 30 天)',
257
+ sortStars: 'Star 数',
258
+ sortAdded: '发布时间',
259
+ sortDesc: '降序',
260
+ sortAsc: '升序',
261
+ sortNewest: '最新',
262
+ sortOldest: '最旧',
263
+ timeAll: '全部时间',
264
+ timeDay: '最近 1 天',
265
+ timeWeek: '最近 7 天',
266
+ timeMonth: '最近 30 天',
267
+ timeQuarter: '最近 90 天',
268
+ timeYear: '最近 1 年',
269
+ published: '发布于',
270
+ prevPage: '上一页',
271
+ nextPage: '下一页',
272
+ pageInfo: '第 {0} / {1} 页',
273
+ perPage: '每页',
274
+ marketUpdate: '更新插件市场',
275
+ updateAll: '全部更新',
276
+ ignoreUpdateNotice: '本次不再提醒',
277
+ ignoreAllUpdateNotices: '本次全部忽略',
278
+ updateNoticeIgnored: '本次已忽略提醒',
279
+ tabThemes: '主题',
280
+ tabBackup: '备份与恢复',
281
+ backupLocal: '本地文件',
282
+ backupDownload: '导出备份',
283
+ backupImport: '导入并预览',
284
+ backupHint: '仅包含插件清单和 profile 配置,不包含 node_modules;恢复会按清单重新安装插件。',
285
+ webdav: 'WebDAV',
286
+ webdavPreset: '服务商预设',
287
+ webdavUrl: '备份文件 URL',
288
+ webdavUser: '用户名(可选)',
289
+ webdavPassword: '密码(可选)',
290
+ webdavUpload: '上传备份',
291
+ webdavRestore: '从 WebDAV 恢复',
292
+ autoBackup: '每天自动备份(打开市场时)',
293
+ webdavNote: 'WebDAV 地址与用户名仅保存在当前浏览器;密码只存于服务端,每次会话需重新输入。',
294
+ localOnly: 'WebDAV 地址和凭证仅保存在当前浏览器。',
295
+ credsWarning: '请注意:备份包含 profile 配置,以及可能含密钥的文件(config.toml、.env 等)。本地导出的文件会原样包含这些内容,上传 WebDAV 前请确认目标可信。',
296
+ gist: 'GitHub Gist',
297
+ gistToken: 'GitHub token(仅本次会话内存,刷新后需重新输入;留空则使用服务端 CHATCODE_CLI_MARKET_GITHUB_TOKEN 或已登录的 gh CLI)',
298
+ gistId: 'Gist ID 或链接(导出留空则新建私有 Gist)',
299
+ gistVerify: '验证连接',
300
+ gistExport: '导出到 Gist…',
301
+ gistImport: '从 Gist 导入',
302
+ gistExportDone: '已导出到 Gist',
303
+ gistVerifySource: '验证通过(Token 来源:{0})',
304
+ gistSrcToken: '手动输入',
305
+ gistSrcEnv: '环境变量 CHATCODE_CLI_MARKET_GITHUB_TOKEN',
306
+ gistSrcGh: 'gh CLI',
307
+ gistExportSelect: '选择要导出的插件',
308
+ gistExportHint: '全部勾选 = 完整备份(含配置文件);取消勾选 = 仅导出所选插件,可另行勾选「包含配置文件」。',
309
+ gistSelectAll: '全选',
310
+ gistSelectNone: '全不选',
311
+ gistIncludeConfig: '包含配置文件(可能含密钥,请确认)',
312
+ gistNoPlugins: '当前 profile 没有可导出的插件',
313
+ gistSpecLocal: '本地',
314
+ gistExportGo: '导出',
315
+ gistCreated: '已导出:',
316
+ gistErrTimeout: 'GitHub 请求超时,请检查网络后重试',
317
+ gistErrNetwork: '无法连接 GitHub,请检查网络或代理设置',
318
+ gistErrAuth: 'GitHub 认证失败:Token 无效、已过期,或 gh CLI 未登录',
319
+ gistErrNotFound: '未找到该 Gist,请检查 ID 或链接',
320
+ gistErrRateLimit: 'GitHub 限流或 Token 权限不足',
321
+ gistErrInvalid: 'Gist 内容无效或备份格式不受支持',
322
+ gistModeUpdate: '更新到输入框中的 Gist',
323
+ gistModeCreate: '新建一个私有 Gist',
324
+ gistErrNoId: '更新模式需要 Gist ID:请填写,或切换为「新建」',
325
+ gistNote: '与本地导出(本机存档)不同,Gist 用于跨机器同步:导出到私有 Gist 后,可在其他电脑用同一账号导入复用。Token 仅保存在本次会话内存中,绝不写入浏览器存储;已登录 gh CLI 或设置 CHATCODE_CLI_MARKET_GITHUB_TOKEN 则无需输入。Gist 为私有,单文件上限 1 MB。',
326
+ backupWorking: '处理中…',
327
+ backupDone: '备份已上传',
328
+ restoreDone: '恢复完成,请重启 ChatCode CLI',
329
+ restorePartial: '恢复已完成,但下列插件安装失败:',
330
+ restoreUnportable: '依赖指向另一台机器上的绝对路径,本机不存在。请手动改为本机路径,或重新安装该插件',
331
+ restoreBootError: '恢复后仍无法启动:',
332
+ orphanBundle: '⚠️ 下次启动会失败:profile 声明了这些 bundle,但它们没有安装。请重新安装,或从 profile 的 package.json 的 dsh.profile.bundles 中删除:',
333
+ restoreConfirm: '恢复将覆盖当前 profile 配置并重新安装插件,确定继续吗?',
334
+ restorePreviewDone: '备份已导入,请在「已安装」中确认后开始恢复',
335
+ restoreMissing: '备份中有 {0} 个插件尚未安装',
336
+ restoreStart: '开始恢复',
337
+ notInstalled: '未安装',
338
+ themeApply: '使用',
339
+ themeActive: '使用中',
340
+ themeDeactivate: '停用',
341
+ themeEmpty: '目录中暂无主题',
342
+ themePreview: '预览',
343
+ themePreviewLoading: '正在查找预览…',
344
+ themePreviewMissing: '暂无预览',
345
+ themePreviewCount: '{0} 张预览',
346
+ themeResultCount: '{0} 款主题',
347
+ themeFullscreen: '全屏浏览',
348
+ themeExitFullscreen: '退出全屏',
349
+ progressHint: '首次安装需要下载与解析依赖,大型插件可能需要 1-3 分钟',
350
+ toastReady: '已安装并已生效',
351
+ toastTheme: '已启用。可在 设置 → 插件市场 → 主题 中随时切换',
352
+ toastToggledOn: '已启用',
353
+ toastToggledOff: '已停用,相关功能立即停止',
354
+ gotIt: '关闭',
355
+ stateLive: '已生效',
356
+ stateRestart: '已安装,重启后生效',
357
+ stateInert: '已安装,未生效',
358
+ stateBroken: '已安装,校验未通过',
359
+ stateDisabled: '已停用',
360
+ phaseResolving: '解析依赖',
361
+ phaseDownloading: '下载中',
362
+ phaseLinking: '链接依赖',
363
+ phaseBuilding: '运行构建脚本',
364
+ cancelling: '正在取消…',
365
+ packagesDone: '已处理 {0} 个包',
366
+ updatedLive: '✓ 已更新,已生效',
367
+ partialNote: '已取消,部分变更已写入',
368
+ reconciledNote: '已卸载,但 pnpm 在收尾阶段报错(通常是文件被占用);配置已同步,无需重试',
369
+ actWhy: '为什么未生效?',
370
+ tabList: '列表',
371
+ tabGroups: '分组',
372
+ repoLink: '在 GitHub 上查看仓库',
373
+ disabledState: '已停用',
374
+ noteAdd: '添加备注',
375
+ noteEdit: '编辑备注',
376
+ noteTheirs: '原文',
377
+ noteMine: '我的备注',
378
+ noteSave: '保存',
379
+ notePlaceholder: '用你自己的话描述这个插件,将代替作者简介显示',
380
+ noteSeeTheirs: '查看作者写的简介',
381
+ noteSeeMine: '返回我的备注',
382
+ switchOnLabel: '启用中',
383
+ enable: '启用',
384
+ disable: '停用',
385
+ toggleFail: '切换失败',
386
+ deprecatedBadge: '已废弃',
387
+ deprecatedWarn: '该插件已被目录标记为废弃,不建议新用户安装。',
388
+ viewReplacement: '查看替代品',
389
+ installReplacement: '安装替代品',
390
+ replacementHint: '目录建议改用',
391
+ groupNew: '新建分组',
392
+ groupNamePh: '分组名称',
393
+ groupRename: '重命名',
394
+ groupDelete: '删除分组',
395
+ groupConfirmDelete: '确认删除?',
396
+ ungrouped: '未分组',
397
+ groupAssign: '分配',
398
+ groupRemove: '移出',
399
+ groupEmpty: '该组暂无成员',
400
+ groupMixed: '部分启用',
401
+ noGroups: '尚无分组,请先新建',
402
+ groupCreate: '创建',
403
+ groupAdd: '加入插件',
404
+ groupAddTheme: '加入主题',
405
+ groupAddEmpty: '所有已安装插件都已在该组中',
406
+ tabDiagnostics: '诊断',
407
+ checkIssues: '发现问题',
408
+ checkErrors: '错误',
409
+ checkWarnings: '警告',
410
+ checkLoading: '正在分析 profile…',
411
+ checkLoadFail: '诊断加载失败:',
412
+ checkProfile: 'profile',
413
+ checkErrorsEmpty: '没有错误',
414
+ checkWarningsEmpty: '没有警告',
415
+ checkBundles: '插件加载顺序(bundle)',
416
+ checkBundlesEmpty: '未声明任何插件层',
417
+ checkOfficial: '官方',
418
+ checkCommunity: '社区',
419
+ checkSource: '来源',
420
+ checkEntries: '加载条目(loader id)',
421
+ checkPatch: 'patch 文件',
422
+ checkDir: '目录',
423
+ checkDuplicates: '重复的插件条目',
424
+ checkDuplicatesEmpty: '没有重复的插件条目',
425
+ checkHoisted: '顶层',
426
+ checkPeerMismatches: '依赖版本不匹配',
427
+ checkPeerEmpty: '没有依赖版本不匹配',
428
+ checkPeerInfo: '另有 {0} 条信息(未确认问题)',
429
+ checkPeerOverview: '{0} 不匹配 · {1} 条信息',
430
+ checkRange: '声明范围',
431
+ checkResolved: '实际版本',
432
+ checkSatisfied: '满足',
433
+ checkUnsatisfied: '不满足',
434
+ checkUnknown: '未知',
435
+ checkPeerRisk: '依赖风险',
436
+ checkPeerRiskEmpty: '没有风险级依赖不匹配',
437
+ checkPeerWarning: '依赖警告',
438
+ checkPeerWarningEmpty: '没有警告级依赖不匹配',
439
+ checkPeerInfoTier: '依赖信息',
440
+ checkPeerInfoTierEmpty: '没有信息级依赖条目',
441
+ checkPeerSatisfied: '已满足的依赖',
442
+ checkPeerSatisfiedEmpty: '没有已满足的依赖条目',
443
+ peerRiskBelowMin: '低于声明下界',
444
+ peerRiskAboveMax: '高于显式上界',
445
+ peerWarnOptional: '可选依赖',
446
+ peerWarnAboveMax: '超出声明上界',
447
+ peerInfoUnverified: '未达判定',
448
+ checkMultiVersion: '核心包多版本',
449
+ checkMultiEmpty: '没有多版本核心包',
450
+ checkOverrides: '覆盖关系',
451
+ checkOverridesEmpty: '没有覆盖关系',
452
+ checkOverridden: '覆盖了',
453
+ checkOrphans: '无效的配置条目',
454
+ checkOrphansEmpty: '没有无效配置条目',
455
+ // Orphan patch reason → badge label (issue #98 supplement).
456
+ orphanInsertNotArray: '格式错误',
457
+ orphanInsertTargetMissing: '目标不存在',
458
+ orphanInsertTargetNotGroup: '目标不是分组',
459
+ orphanIdRequired: '缺少标识',
460
+ orphanPatchTargetMissing: '目标不存在',
461
+ orphanNameMismatch: '名称不匹配',
462
+ orphanReasonOther: '其他',
463
+ // Plain-language explainer for the diagnostics page (issue #98 UX).
464
+ diagExplain: '术语说明',
465
+ diagExplainText: '本页检查插件之间的冲突、依赖版本不匹配与加载顺序问题。常用术语:',
466
+ diagTermBundle: 'bundle = 一个插件包,会按顺序叠加加载',
467
+ diagTermEntry: '加载条目 = 插件在运行组合里注册的每一项',
468
+ diagTermPeer: '对等依赖 = 插件要求宿主环境提供的另一个包',
469
+ diagTermShadow: '遮蔽 = 插件自带的旧版包盖住了宿主的新版',
470
+ diagTermOrphan: '无效条目 = 配置里引用了不存在的东西',
471
+ diagTermOrder: '加载顺序 = 插件被激活的先后,后加载者可能覆盖先加载者',
472
+ // issue #98 phase 2 (step 1): minimal community-bundle ordering
473
+ orderSection: '排序',
474
+ orderUp: '↑',
475
+ orderDown: '↓',
476
+ orderApply: '应用顺序',
477
+ orderDrag: '拖拽排序',
478
+ orderDragHint: '拖动 ⠿ 调整顺序,选择「应用顺序」后才会保存',
479
+ orderConflicts: '当前顺序的 before/after 冲突',
480
+ orderApplied: '✓ 已应用,重启后生效',
481
+ orderSuggestApply: '采用建议顺序',
482
+ orderSuggestHint: '建议顺序(按 before/after 规则自动排序):',
483
+ orderAutoSort: '自动排序',
484
+ orderAlreadyOptimal: '当前顺序已满足全部规则与插件依赖,无需调整',
485
+ orderTrialFail: '静态组合校验未通过:{0}',
486
+ orderDiffHint: '该顺序会改变组合:{0} 处覆盖、{1} 个无效条目、{2} 个重复条目',
487
+ duplicateNames: '同名插件(仅信息展示,不视为冲突)',
488
+ orderReset: '重置草稿',
489
+ checkRefresh: '重新检查',
490
+ aiFix: 'AI 修复',
491
+ aiFixHint: '将诊断问题交由新对话中的 Agent 修复(内容已复制到剪贴板,由你决定是否发送)',
492
+ aiFixIntro: '请帮我修复 ChatCode CLI 的插件问题(profile:{0})。诊断发现如下:',
493
+ aiFixDetect: '【第一步·先判断身份】开始前先判断:当前 Agent 所运行的进程,是否就是这个 profile 对应的 ChatCode CLI 本机实例(即:诊断出的这套组合,就是你现在运行中的组合)?判断依据:当前工作目录 / $CHATCODE_CLI_HOME / 进程命令行是否指向该 profile,或你是否运行在 ChatCode CLI 进程内。若无法确定,一律按【是你】处理(更安全)。',
494
+ aiFixIfSelf: '【是 → 你就是这个 ChatCode CLI 实例】严禁原地改动组合、ChatCode CLI 或核心包:不修改 cordis.patch.yml、不调整 bundle 顺序或启停、不安装/卸载/升级插件、不重新安装依赖、不升级或重启 chatcode-cli。三步:① 先只读分析,不改任何东西;② 给出 apply.sh/.bat(本次修复的改动)与 rollback.sh/.bat(完整撤销 apply);两者都幂等——apply 仅在无已有快照时才创建快照(否则不覆盖;已存在说明 apply 跑过,先回滚或确认再重跑),rollback 从这份快照恢复,因此 apply 跑到一半失败也能回滚、重复回滚也安全;③ 由我在外部终端执行 apply,并将 stdout/stderr 回贴给你判断。每步先说明理由、等我确认;绝不自行执行。',
495
+ aiFixScope: '【否 → 保守执行】你要是判定自己并非运行在目标 ChatCode CLI 实例内(独立进程),才可考虑:修改 dsh.profile.bundles 顺序、停用/启用插件、调整 cordis.patch.yml。注意:官方 bundle 不可移动;动手前先说明计划。',
496
+ aiFixConservative: '请保持保守:只修复上面列出的明确错误(启动失败/重复条目/风险级依赖不匹配)。警告和信息级问题(如可选依赖、未确认的依赖范围)仅在它们与明确错误相关时处理。不要做不必要的升级或重新排序;每项改动前说明理由并等待确认。',
497
+ aiFixCopied: '已复制修复提示词,请粘贴到新对话后发送',
498
+ aiFixFail: '无法访问剪贴板,请手动复制下面的诊断内容',
499
+ catConflict: '冲突',
500
+ catDeps: '依赖',
501
+ catRisk: '风险',
502
+ catWarn: '警告',
503
+ catInfo: '信息',
504
+ catOrder: '顺序',
505
+ /** Summary-strip tooltip for the order count (before/after rule conflicts). */
506
+ checkOrderTip: '社区 bundle 加载顺序与插件声明的 before/after 规则冲突',
507
+ diagOkAll: '未发现冲突、依赖或加载顺序问题',
508
+ // issue #98 phase 3: snapshots & rollback panel
509
+ presetSection: '插件组合',
510
+ presetHint: '把当前的 bundle 顺序与停用列表保存为组合,随时切换;应用前会做试启动校验并自动创建快照。',
511
+ presetName: '组合名称',
512
+ presetSave: '保存当前状态',
513
+ presetSaving: '保存中…',
514
+ presetSaved: '组合已保存',
515
+ presetApply: '应用',
516
+ presetApplied: '已应用,重启后生效',
517
+ presetDelete: '删除',
518
+ presetDeleted: '组合已删除',
519
+ presetEmpty: '还没有保存过组合',
520
+ presetNameEmpty: '请输入组合名称',
521
+ presetFail: '组合操作失败:',
522
+ presetListFail: '组合列表加载失败:',
523
+ presetBundleCount: '{0} 个 bundle',
524
+ presetPreview: '预览',
525
+ presetPreviewTitle: '应用此组合将:',
526
+ presetReorder: '重排 {0} 个 bundle 的位置',
527
+ presetEnable: '启用 {0} 个插件',
528
+ presetDisable: '停用 {0} 个插件',
529
+ presetNoop: '无变更',
530
+ presetPreviewFail: '预览失败:',
531
+ snapSection: '快照与回滚',
532
+ snapHint: '应用变更前会自动创建快照;也可以手动创建快照,随时回滚到任意状态。',
533
+ snapCreate: '创建快照',
534
+ snapCreating: '创建中…',
535
+ snapCreated: '快照已创建',
536
+ snapEmpty: '还没有快照',
537
+ snapListFail: '快照列表加载失败:',
538
+ snapCreateFail: '创建快照失败:',
539
+ snapRestore: '回滚',
540
+ snapRestoring: '回滚中…',
541
+ snapRestored: '已回滚,重启后生效',
542
+ snapRestoreFail: '回滚失败:',
543
+ snapRestoreConfirm: '确认回滚',
544
+ snapRestoreConfirmText: '回滚会用快照覆盖当前 profile 的 package.json 与配置,且不可撤销(可先创建新快照再回滚)。',
545
+ snapFiles: '包含文件',
546
+ snapDelete: '删除',
547
+ snapDeleting: '删除中…',
548
+ snapDeleted: '快照已删除',
549
+ snapDeleteFail: '删除快照失败:',
550
+ snapDeleteConfirm: '确认删除',
551
+ snapDeleteConfirmText: '删除后该快照将无法恢复。',
552
+ marketNoToggle: '市场自身不能停用',
553
+ hostDependencyWarning: '插件在 dependencies 中声明了已知的旧版 DSH 兼容宿主包,可能遮蔽宿主版本(仅依据清单,未确认运行时重复):',
554
+ hostDependencyMore: '另有 {0} 条,已省略',
555
+ }
556
+
557
+ /** A dictionary key; zh is the source of truth, en mirrors it 1:1. */
558
+ export type MarketKey = keyof typeof zh
559
+
560
+ export const en: Record<MarketKey, string> = {
561
+ nav: 'Plugin Market',
562
+ title: 'ChatCode CLI',
563
+ skillNav: 'Skill Market',
564
+ skillSubtitle: 'Browse and install skills that agents can invoke when needed',
565
+ skillSearch: 'Search skills…',
566
+ skillNeedSession: 'Open a local session first. Its workspace determines where project skills are installed.',
567
+ skillWorkspace: 'Current workspace:',
568
+ skillTrustWarning: 'Skills provide instructions to agents and may include scripts or resources. Install only from publishers you trust.',
569
+ skillLoading: 'Loading the skill catalog…',
570
+ skillEmpty: 'No matching skills.',
571
+ skillRetry: 'Retry',
572
+ skillInstalled: 'Installed',
573
+ skillNoDescription: 'No description',
574
+ skillDownloads: 'downloads',
575
+ skillInstallProject: 'Install for project',
576
+ skillInstallUser: 'Install for user',
577
+ skillInstalling: 'Installing…',
578
+ skillInstalledAt: 'Skill installed at:',
579
+ skillPrevious: 'Previous',
580
+ skillNext: 'Next',
581
+ setCardDesc: 'View the plugin market version and settings.',
582
+ setSelfUpToDate: 'Up to date',
583
+ setSelfUpdateReady: 'New version available:',
584
+ setSelfUpdateHint: 'Updating downloads the new version; it takes effect after a restart.',
585
+ setSelfUpToDateHint: '',
586
+ setSelfUpdate: 'Update',
587
+ setSelfUpdatedHint: 'Downloaded. Restart ChatCode CLI for it to take effect — the frontend updates at once, the server does not.',
588
+ setRegion: 'Download region',
589
+ setRegionGlobal: 'Global',
590
+ setRegionChina: 'China mainland',
591
+ setRegionGlobalHint: 'Downloads directly from npm and GitHub.',
592
+ setRegionChinaHint: 'Faster in mainland China. Changes the download route, not the source.',
593
+ setRegionAuto: 'Selected from a network check. Change it anytime.',
594
+ setGithubProxy: 'GitHub acceleration',
595
+ setGithubProxyAutoHint: 'Chooses a working route automatically and switches only after a failure.',
596
+ setGithubProxyCustom: 'Custom',
597
+ setGithubProxyCustomHint: 'Tries your custom route first, then falls back to GitHub directly.',
598
+ setGithubProxyManagedHint: 'Managed by CHATCODE_CLI_MARKET_GITHUB_PROXY and cannot be changed here.',
599
+ setGithubProxyEdit: 'Edit',
600
+ setGithubProxyAuto: 'Restore automatic',
601
+ setGithubProxyInput: 'HTTPS acceleration prefix',
602
+ setGithubProxySave: 'Save',
603
+ setChannel: 'Update channel',
604
+ setChannelStable: 'Stable',
605
+ setChannelBeta: 'Beta',
606
+ setChannelStableHint: 'Released versions only.',
607
+ setChannelBetaHint: 'Early access to unverified versions. Affects the plugin market only.',
608
+ setChannelDev: 'Dev',
609
+ setChannelDevHint: 'Unverified builds from a development branch. Not recommended for general use.',
610
+ setChannelSwitch: 'Switch to',
611
+ setChannelSwitchHint: 'This version is lower than the one installed.',
612
+ setSelfRemove: 'Uninstall the plugin market',
613
+ setSelfRemoveHint: 'Uninstall the market from this profile. Your other plugins are untouched.',
614
+ setSelfConfirm: 'Uninstall the plugin market? Reinstalling it requires the command line.',
615
+ setSelfPurge: 'Also clear the market\'s own data',
616
+ setSelfPurgeOn: 'Will delete: the market\'s disable list and custom groups, and the disable rows it wrote into the profile patch file — plugins the market switched off start running again. No passwords or tokens are involved; the market never stores those on disk.',
617
+ setSelfPurgeOff: 'Keeps the market\'s data. Note: plugins the market switched off stay off, and once it is removed there is no UI left to switch them back on.',
618
+ setSelfRemoveConfirm: 'Uninstall',
619
+ setSelfCancel: 'Cancel',
620
+ setSelfWorking: 'Uninstalling…',
621
+ setSelfRemoved: 'Uninstalled',
622
+ setSelfRemovedHint: 'Restart ChatCode CLI to finish cleaning up.',
623
+ setSelfFailed: 'The operation failed',
624
+ versionHint: 'Plugin market version — include it when reporting an issue',
625
+ subtitle: 'Discover community plugins for ChatCode CLI',
626
+ submitPlugin: 'Submit a plugin ↗',
627
+ descExpand: 'Show more',
628
+ descCollapse: 'Show less',
629
+ searchPh: 'Search plugins: notify, terminal, memory…',
630
+ searchFavoritesPh: 'Search favorites…',
631
+ favoriteAdd: 'Add to favorites',
632
+ favoriteRemove: 'Remove from favorites',
633
+ favoritesEmpty: 'No favorites yet. Bookmark plugins in Discover or Themes to save them here.',
634
+ favoritesResultCount: '{0} favorites',
635
+ favoritesPluginsSection: 'Plugins ({0})',
636
+ favoritesThemesSection: 'Themes ({0})',
637
+ favoritesStaleEmpty: 'Bookmarked entries are no longer in the catalog.',
638
+ favoritesStaleNote: '{0} favorites are no longer in the catalog',
639
+ favoritesClearStale: 'Remove stale favorites',
640
+ favoritesClearingStale: 'Removing…',
641
+ tabDiscover: 'Discover',
642
+ tabFavorites: 'Favorites',
643
+ tabInstalled: 'Installed',
644
+ tabAdvanced: 'Advanced',
645
+ all: 'All',
646
+ install: 'Install',
647
+ installing: 'Installing…',
648
+ installedBadge: '✓ Installed',
649
+ alreadyInstalled: '✓ Installed',
650
+ restartBanner: 'change(s) done — restart ChatCode CLI to apply',
651
+ uninstall: 'Uninstall',
652
+ confirmRemove: 'Uninstall?',
653
+ uninstalling: 'Uninstalling…',
654
+ uninstallConfirmDesc: 'This removes the plugin from the current profile.',
655
+ restartHint: 'To restart: stop the current ChatCode CLI process and run it again (e.g. chatcode-cli web)',
656
+ restartHintSupervised: 'This process is {0}\'s own service process, so restarts belong to it — restarting from here would kill the takeover process along with the cgroup and the service would not come back. Use systemctl restart &lt;your unit&gt;. If your unit can survive a self-restart (KillMode=process), turn Allow restart on in this plugin\'s configuration.',
657
+ restartHintDebugged: 'This ChatCode CLI process is under a debugger. Stop it from your IDE or terminal and start it again — the market cannot kill a debug-attached host from the UI.',
658
+ confirmTitle: 'Install',
659
+ confirmWarn: 'Plugins are third-party community code. Installing means you trust this source; build scripts are blocked by default.',
660
+ cancel: 'Cancel',
661
+ empty: 'No plugins match',
662
+ installedEmpty: 'No community plugins yet — browse the Discover tab',
663
+ loadFail: 'The plugin catalog failed to load. Try again later.',
664
+ loadRetry: 'Retry',
665
+ installFail: 'Install failed',
666
+ viewSource: 'Source',
667
+ refreshBanner: 'change(s) applied — refresh the page to see them',
668
+ refresh: 'Refresh',
669
+ update: 'Update',
670
+ updating: 'Updating…',
671
+ updated: '✓ Updated — restart to apply',
672
+ cancelOp: 'Cancel',
673
+ cancelled: 'Cancelled',
674
+ busyWait: 'Another operation is already running — please wait for it to finish (one install/update/uninstall at a time)',
675
+ agentBusyUpdate: 'An agent is currently working — wait for it to finish (or cancel it) before updating. Updates replace plugin files in place, so a working agent can fail or mix versions mid-turn.',
676
+ agentBusyInstall: 'An agent is currently working — wait for it to finish (or cancel it) before installing. Installing changes plugin files, so a working agent can fail mid-turn.',
677
+ favoriteFailed: 'Could not update favorites. Try again.',
678
+ favoriteUnavailable: 'Favorites are unavailable. Refresh the page or restart chatcode-cli web.',
679
+ favoriteBusy: 'A plugin operation is running. Your favorite change is queued — try again in a moment.',
680
+ compatRiskBanner: 'Compatibility risk detected — open Diagnostics before restarting, or roll this operation back.',
681
+ compatRiskBannerNoRollback: 'Compatibility risk detected — open Diagnostics before restarting.',
682
+ shadowNameBanner: 'This operation left one plugin name defined in two layers; only one will load after a restart:',
683
+ brokenBundleBanner: 'These plugins now have a client bundle that will not parse; the page may come up blank after a refresh — rolling back is recommended:',
684
+ goDiagnose: 'Open Diagnostics',
685
+ rollbackNow: 'Roll back',
686
+ rollingBack: 'Rolling back…',
687
+ rollbackUnavailable: 'Automatic rollback is unavailable because the previous exact source could not be verified.',
688
+ approveBuilds: 'Allow build scripts and retry',
689
+ buildsSkipped: 'This plugin needs its build scripts to run; they are blocked by default for safety. If you trust the source, allow them and reinstall:',
690
+ restartNow: 'Restart now',
691
+ dismiss: 'Dismiss',
692
+ dismissNotice: 'Dismiss this notice',
693
+ restarting: 'Restarting…',
694
+ restartFail: 'Restart failed',
695
+ restartTimeout: 'Timed out waiting for ChatCode CLI to start',
696
+ updateNow: 'Update now',
697
+ updateFail: 'Update failed',
698
+ upToDate: 'Up to date',
699
+ linkedDev: 'local',
700
+ notesLink: 'What changed',
701
+ notesRelease: 'Release notes',
702
+ notesCommits: 'Commits',
703
+ notesCommitsRecent: 'Recent commits (could not be aligned with your installed version — for reference only)',
704
+ notesNpm: 'Version publish times',
705
+ notesNone: 'This plugin does not publish update notes.',
706
+ notesLoadFail: 'Update notes are unavailable right now — try again later.',
707
+ migrateNpm: 'Use npm version',
708
+ migrateTitle: 'Use npm version?',
709
+ migrateDescription: 'This changes the plugin installation source, not just its version.',
710
+ migrateCurrentSource: 'Current source',
711
+ migrateTargetSource: 'New npm source',
712
+ migrateWarning: 'The npm package may be maintained by a different publisher. Continue only if you trust this catalog mapping.',
713
+ migrateContinue: 'Confirm npm source',
714
+ migrateFail: 'Source migration failed',
715
+ restore: 'Restore',
716
+ restoreOnline: 'Use online version',
717
+ restoreHint: 'This will uninstall the local version, reinstall the catalog version, and keep update checks. This cannot be undone — please confirm again.',
718
+ hostIncompatibleTitle: 'This release needs a newer ChatCode CLI',
719
+ hostIncompatibleBody: '{plugin} declares that it needs ChatCode CLI {requirement}, and you are running {host}. Installing it would most likely break the plugin, leaving a manual downgrade as the only way back.\nNothing was changed — the plugin is still on its current version.\nIf you know the version number is wrong (a bundled ChatCode CLI that does not report one, for example), you can update anyway.',
720
+ hostIncompatibleUnknown: 'an unknown version',
721
+ hostIncompatibleKeep: 'Keep the current version',
722
+ hostIncompatibleAnyway: 'Update anyway',
723
+ restoreNameOnlyHint: 'Your local copy does not say which repository it came from, so the market could only match it by package name. The catalog entry below is what that found — it may be a different author\'s plugin that happens to share the name, not the source of your copy. Check the owner and repository below before confirming. This uninstalls the local version and installs that one, and cannot be undone.',
724
+ restoreContinue: 'Continue update',
725
+ restoreProceed: 'Confirm restore',
726
+ restoreNoCatalogTitle: 'Cannot restore',
727
+ restoreNoCatalog: 'This plugin is not in the curated catalog, so it cannot be restored. Uninstall the local copy, or keep developing it locally.',
728
+ restoreNoMatch: 'A same-named plugin exists in the catalog, but it does not match your local repository, so restore is not safe. Uninstall the local copy, or keep developing it locally.',
729
+ restoreFail: 'Restore failed',
730
+ exportLog: 'Export log',
731
+ crashTitle: 'The plugin market could not be displayed',
732
+ crashHint: "Something went wrong rendering the market. Your plugins are unaffected and nothing was changed.\nReload usually recovers it. If it keeps happening, export the log and attach it to an issue — it now carries where this crash happened.\nAlso worth trying: if your browser is translating this page, turn that off and reload. It is a known cause.",
733
+ crashReload: 'Reload',
734
+ crashDetails: 'Error details',
735
+ exportingLog: 'Exporting…',
736
+ exportedLog: 'Log exported: chatcode-cli-market-log.txt — please attach it to your issue',
737
+ exportLogFail: 'Log export failed',
738
+ readme: 'README',
739
+ comments: 'Comments',
740
+ commentsTitle: 'Comments',
741
+ commentsNote: 'Comments come from GitHub Discussions. Opening this connects to giscus.app and GitHub; posting needs a GitHub account.',
742
+ commentsLoginHint: 'Signing in here would leave this page, and coming back needs the ChatCode CLI Web link again — nothing is broken. Sign in and post on GitHub; keep reading here.',
743
+ commentsLoading: 'Loading comments…',
744
+ commentsError: 'Comments could not be loaded. Check your connection and try again.',
745
+ commentsRetry: 'Try again',
746
+ commentsOnGitHub: 'Sign in and join on GitHub',
747
+ terminalWarn: 'This looks like a terminal/CLI plugin: installing it into the web profile may do nothing, or even break ChatCode CLI startup. Read its README and install it into the profile it targets.',
748
+ conflictTitle: 'Cannot install: conflicts with an installed plugin',
749
+ conflictBody: 'It conflicts with an installed plugin — only one can stay:',
750
+ conflictReverted: 'Reverted automatically; nothing was changed',
751
+ conflictKeep: 'Keep the installed plugin',
752
+ conflictKeepNote: '',
753
+ conflictSwap: 'Switch to this one',
754
+ conflictSwapNote: 'Settings of the uninstalled plugins are kept, so you can reinstall later',
755
+ conflictDetails: 'Details',
756
+ conflictOutcomeInstall: 'install',
757
+ conflictOutcomeSkip: 'skip',
758
+ conflictOutcomeKeep: 'keep',
759
+ conflictOutcomeRemove: 'uninstall',
760
+ conflictWhy: 'cordis refuses a plugin tree that contains duplicate entry ids; keeping this plugin would stop ChatCode CLI from starting.',
761
+ opTitle: 'Tasks',
762
+ opInstalling: 'Installing',
763
+ opNeedsYou: 'need attention',
764
+ opQueued: 'Queued',
765
+ opQueuedAhead: 'ahead:',
766
+ opRunning: 'In progress',
767
+ opNeedsChoice: 'Cannot install · reverted automatically, nothing changed',
768
+ opDone: 'Done',
769
+ opDoneRefresh: 'Installed · refresh the page to apply',
770
+ opLeaveHint: 'You can leave this page; you will be notified when it finishes',
771
+ opEmpty: 'No operations in progress',
772
+ opEmptyHint: 'Install, update and uninstall progress appears here',
773
+ opClose: 'Collapse',
774
+ opClear: 'Clear finished',
775
+ opDequeue: 'Remove from queue',
776
+ opRetry: 'Retry',
777
+ opKind_install: 'Install',
778
+ opKind_update: 'Update',
779
+ opKind_uninstall: 'Uninstall',
780
+ opBlockedCard: 'Cannot install · details',
781
+ conflictDeclined: 'You kept the installed plugins; this one was not installed',
782
+ conflictReplacing: 'Replacing…',
783
+ conflictReplaceFailed: 'Replace did not finish. The plugins below were uninstalled and not restored — please check them:',
784
+ lightboxClose: 'Close preview',
785
+ lightboxPrev: 'Previous',
786
+ lightboxNext: 'Next',
787
+ envMissing: 'pnpm needs to be set up before installing plugins',
788
+ envFix: 'Set up automatically',
789
+ envFixing: 'Setting up…',
790
+ envFixFail: 'Automatic setup failed — export the log and attach it to your issue',
791
+ loading: 'Loading the catalog…',
792
+ backTop: 'Back to top',
793
+ confirm: 'Confirm',
794
+ confirmInstall: 'Confirm install',
795
+ cmdDetails: 'Install command',
796
+ catsMore: 'More',
797
+ catsLess: 'Less',
798
+ filter: 'Filter',
799
+ filterSort: 'Sort field',
800
+ filterDir: 'Order',
801
+ filterTime: 'Released within',
802
+ filterHost: 'Host version',
803
+ hostAll: 'Show all',
804
+ hostCompatible: 'Compatible with current ChatCode CLI {0}',
805
+ hostDetecting: 'Detecting host version…',
806
+ hostUnknown: 'Host version unknown',
807
+ hostFilterLoading: 'Checking host requirements {0}/{1}; undeclared or unavailable plugins remain visible',
808
+ hostFilterActive: 'Filtering for ChatCode CLI {0}; undeclared or unavailable plugins remain visible',
809
+ hostRequirement: 'ChatCode CLI {0}',
810
+ hostRequirementLoading: 'Reading host requirement…',
811
+ hostRequirementUndeclared: 'Host requirement undeclared',
812
+ hostRequirementUnavailable: 'Host requirement unknown',
813
+ sortDownloads: 'npm downloads (30d)',
814
+ sortStars: 'Stars',
815
+ sortAdded: 'Release date',
816
+ sortDesc: 'Descending',
817
+ sortAsc: 'Ascending',
818
+ sortNewest: 'Newest',
819
+ sortOldest: 'Oldest',
820
+ timeAll: 'Any time',
821
+ timeDay: 'Last day',
822
+ timeWeek: 'Last 7 days',
823
+ timeMonth: 'Last 30 days',
824
+ timeQuarter: 'Last 90 days',
825
+ timeYear: 'Last year',
826
+ published: 'released',
827
+ prevPage: 'Previous',
828
+ nextPage: 'Next',
829
+ pageInfo: 'Page {0} of {1}',
830
+ perPage: 'Per page',
831
+ marketUpdate: 'Update the plugin market',
832
+ updateAll: 'Update all',
833
+ ignoreUpdateNotice: 'Ignore for this boot',
834
+ ignoreAllUpdateNotices: 'Ignore all for this boot',
835
+ updateNoticeIgnored: 'Reminder ignored for this boot',
836
+ tabThemes: 'Themes',
837
+ tabBackup: 'Backup & Restore',
838
+ backupLocal: 'Local file',
839
+ backupDownload: 'Export backup',
840
+ backupImport: 'Import and preview',
841
+ backupHint: 'Includes the plugin list and profile configuration, never node_modules. Restore reinstalls plugins from the list.',
842
+ webdav: 'WebDAV',
843
+ webdavPreset: 'Provider preset',
844
+ webdavUrl: 'Backup file URL',
845
+ webdavUser: 'Username (optional)',
846
+ webdavPassword: 'Password (optional)',
847
+ webdavUpload: 'Upload backup',
848
+ webdavRestore: 'Restore from WebDAV',
849
+ autoBackup: 'Back up daily (when the market opens)',
850
+ webdavNote: 'The WebDAV URL and username stay in this browser only; the password is kept server-side and must be re-entered each session.',
851
+ localOnly: 'The WebDAV URL and credentials stay in this browser only.',
852
+ credsWarning: 'Note: backups include profile configuration and files that may hold secrets (config.toml, .env, …). Local exports are unmodified, so upload only to a WebDAV target you trust.',
853
+ gist: 'GitHub Gist',
854
+ gistToken: 'GitHub token (session memory only — re-enter after refresh; leave empty to use server-side CHATCODE_CLI_MARKET_GITHUB_TOKEN or a logged-in gh CLI)',
855
+ gistId: 'Gist ID or URL (leave empty on export to create a new private Gist)',
856
+ gistVerify: 'Verify connection',
857
+ gistExport: 'Export to Gist…',
858
+ gistImport: 'Import from Gist',
859
+ gistExportDone: 'Exported to Gist',
860
+ gistVerifySource: 'Verified — token source: {0}',
861
+ gistSrcToken: 'manually entered',
862
+ gistSrcEnv: 'CHATCODE_CLI_MARKET_GITHUB_TOKEN env var',
863
+ gistSrcGh: 'gh CLI',
864
+ gistExportSelect: 'Select plugins to export',
865
+ gistExportHint: 'All checked = full backup (config included); unchecking any exports only the selected plugins, with an optional “include config” flag.',
866
+ gistSelectAll: 'Select all',
867
+ gistSelectNone: 'Select none',
868
+ gistIncludeConfig: 'Include config files (may contain secrets)',
869
+ gistNoPlugins: 'This profile has no plugins to export',
870
+ gistSpecLocal: 'local',
871
+ gistExportGo: 'Export',
872
+ gistCreated: 'Exported:',
873
+ gistErrTimeout: 'GitHub request timed out — check your network and retry',
874
+ gistErrNetwork: 'Cannot reach GitHub — check your network or proxy',
875
+ gistErrAuth: 'GitHub authentication failed: invalid/expired token, or gh CLI not logged in',
876
+ gistErrNotFound: 'Gist not found — check the ID or URL',
877
+ gistErrRateLimit: 'GitHub rate limit hit, or the token lacks the gist scope',
878
+ gistErrInvalid: 'Gist content is invalid or uses an unsupported backup format',
879
+ gistModeUpdate: 'Update the Gist in the field',
880
+ gistModeCreate: 'Create a new private Gist',
881
+ gistErrNoId: 'Update mode needs a Gist ID — fill it in, or switch to “Create”',
882
+ gistNote: "Unlike local export (this-machine archive), Gist is for cross-machine sync: export to a private Gist, then import it on another computer with the same account to reuse your plugins. The token lives in this session's memory only and is never written to browser storage; a logged-in gh CLI or CHATCODE_CLI_MARKET_GITHUB_TOKEN skips entering it. Gists are private, 1 MB per file.",
883
+ backupWorking: 'In progress…',
884
+ backupDone: 'Backup uploaded',
885
+ restoreDone: 'Restore complete — restart ChatCode CLI',
886
+ restorePartial: 'Restore completed, but these plugins failed to install:',
887
+ restoreUnportable: 'points at an absolute path from another machine that does not exist here — repoint it locally or reinstall the plugin',
888
+ restoreBootError: 'Still cannot boot after the restore:',
889
+ orphanBundle: '⚠️ The next start will fail: the profile declares these bundles but they are not installed. Reinstall them, or remove them from dsh.profile.bundles in the profile package.json:',
890
+ restoreConfirm: 'Restore will overwrite this profile configuration and reinstall plugins. Continue?',
891
+ restorePreviewDone: 'Backup imported. Review Installed, then start restore.',
892
+ restoreMissing: '{0} plugins from this backup are not installed',
893
+ restoreStart: 'Start restore',
894
+ notInstalled: 'Not installed',
895
+ themeApply: 'Use',
896
+ themeActive: 'Active',
897
+ themeDeactivate: 'Deactivate',
898
+ themeEmpty: 'No themes in the catalog yet',
899
+ themePreview: 'Preview',
900
+ themePreviewLoading: 'Finding preview…',
901
+ themePreviewMissing: 'Preview unavailable',
902
+ themePreviewCount: '{0} previews',
903
+ themeResultCount: '{0} themes',
904
+ themeFullscreen: 'Browse full screen',
905
+ themeExitFullscreen: 'Exit full screen',
906
+ progressHint: 'First installs download and resolve dependencies — large plugins can take 1-3 minutes',
907
+ toastReady: 'installed and live',
908
+ toastTheme: 'is now active. Switch any time in Settings → Plugin Market → Themes',
909
+ toastToggledOn: 'is now on',
910
+ toastToggledOff: 'is now off; it stopped working immediately',
911
+ gotIt: 'Dismiss',
912
+ stateLive: 'Active',
913
+ stateRestart: 'Installed — restart to apply',
914
+ stateInert: 'Installed, not active',
915
+ stateBroken: 'Installed, verification failed',
916
+ stateDisabled: 'Disabled',
917
+ phaseResolving: 'Resolving dependencies',
918
+ phaseDownloading: 'Downloading',
919
+ phaseLinking: 'Linking',
920
+ phaseBuilding: 'Running build scripts',
921
+ cancelling: 'Cancelling…',
922
+ packagesDone: '{0} packages processed',
923
+ updatedLive: '✓ Updated — live',
924
+ partialNote: 'Cancelled — some changes were applied',
925
+ reconciledNote: 'Removed, but pnpm reported an error while finishing up (usually a locked file). The profile is already reconciled — no retry needed.',
926
+ actWhy: 'Why not live?',
927
+ tabList: 'List',
928
+ tabGroups: 'Groups',
929
+ repoLink: 'View the repository on GitHub',
930
+ disabledState: 'Disabled',
931
+ noteAdd: 'Add note',
932
+ noteEdit: 'Edit note',
933
+ noteTheirs: 'Original',
934
+ noteMine: 'My note',
935
+ noteSave: 'Save',
936
+ notePlaceholder: 'Describe it in your own words. This replaces the author description.',
937
+ noteSeeTheirs: 'Show the author description',
938
+ noteSeeMine: 'Back to my note',
939
+ switchOnLabel: 'Enabled',
940
+ enable: 'Enable',
941
+ disable: 'Disable',
942
+ toggleFail: 'Toggle failed',
943
+ deprecatedBadge: 'Deprecated',
944
+ deprecatedWarn: 'This plugin is marked as deprecated by the catalog; new users are advised against installing it.',
945
+ viewReplacement: 'View replacement',
946
+ installReplacement: 'Install replacement',
947
+ replacementHint: 'Catalog suggests',
948
+ groupNew: 'New group',
949
+ groupNamePh: 'Group name',
950
+ groupRename: 'Rename',
951
+ groupDelete: 'Delete group',
952
+ groupConfirmDelete: 'Delete group?',
953
+ ungrouped: 'Ungrouped',
954
+ groupAssign: 'Assign',
955
+ groupRemove: 'Remove',
956
+ groupEmpty: 'No members yet',
957
+ groupMixed: 'Partially enabled',
958
+ noGroups: 'No groups yet. Create one to begin.',
959
+ groupCreate: 'Create',
960
+ groupAdd: 'Add plugin',
961
+ groupAddTheme: 'Add theme',
962
+ groupAddEmpty: 'Every installed plugin is already in this group',
963
+ tabDiagnostics: 'Diagnostics',
964
+ checkIssues: 'Issues found',
965
+ checkErrors: 'Errors',
966
+ checkWarnings: 'Warnings',
967
+ checkLoading: 'Analyzing the profile…',
968
+ checkLoadFail: 'Failed to load diagnostics: ',
969
+ checkProfile: 'profile',
970
+ checkErrorsEmpty: 'No errors',
971
+ checkWarningsEmpty: 'No warnings',
972
+ checkBundles: 'Plugin load order (bundles)',
973
+ checkBundlesEmpty: 'No plugin layers declared',
974
+ checkOfficial: 'official',
975
+ checkCommunity: 'community',
976
+ checkSource: 'source',
977
+ checkEntries: 'entries (loader ids)',
978
+ checkPatch: 'patch file',
979
+ checkDir: 'directory',
980
+ checkDuplicates: 'Duplicate plugin entries',
981
+ checkDuplicatesEmpty: 'No duplicate plugin entries',
982
+ checkHoisted: 'hoisted',
983
+ checkPeerMismatches: 'Dependency version mismatches',
984
+ checkPeerEmpty: 'No dependency version mismatches',
985
+ checkPeerInfo: '{0} informational entries (unconfirmed)',
986
+ checkPeerOverview: '{0} mismatch(es) · {1} informational',
987
+ checkRange: 'declared range',
988
+ checkResolved: 'resolved version',
989
+ checkSatisfied: 'satisfied',
990
+ checkUnsatisfied: 'not satisfied',
991
+ checkUnknown: 'unknown',
992
+ checkPeerRisk: 'Dependency risks',
993
+ checkPeerRiskEmpty: 'No risk-level dependency mismatches',
994
+ checkPeerWarning: 'Dependency warnings',
995
+ checkPeerWarningEmpty: 'No warning-level dependency mismatches',
996
+ checkPeerInfoTier: 'Dependency info',
997
+ checkPeerInfoTierEmpty: 'No informational dependency entries',
998
+ checkPeerSatisfied: 'Satisfied dependencies',
999
+ checkPeerSatisfiedEmpty: 'No satisfied dependency entries',
1000
+ peerRiskBelowMin: 'below declared minimum',
1001
+ peerRiskAboveMax: 'above explicit maximum',
1002
+ peerWarnOptional: 'optional peer',
1003
+ peerWarnAboveMax: 'above declared upper bound',
1004
+ peerInfoUnverified: 'unverified',
1005
+ checkMultiVersion: 'Multi-version core packages',
1006
+ checkMultiEmpty: 'No multi-version core packages',
1007
+ checkOverrides: 'Overrides',
1008
+ checkOverridesEmpty: 'No overrides',
1009
+ checkOverridden: 'overrides',
1010
+ checkOrphans: 'Invalid config entries',
1011
+ checkOrphansEmpty: 'No invalid config entries',
1012
+ // Orphan patch reason → badge label (issue #98 supplement).
1013
+ orphanInsertNotArray: 'malformed',
1014
+ orphanInsertTargetMissing: 'target not found',
1015
+ orphanInsertTargetNotGroup: 'target is not a group',
1016
+ orphanIdRequired: 'missing id',
1017
+ orphanPatchTargetMissing: 'target not found',
1018
+ orphanNameMismatch: 'name mismatch',
1019
+ orphanReasonOther: 'other',
1020
+ // Plain-language explainer for the diagnostics page (issue #98 UX).
1021
+ diagExplain: 'About this page',
1022
+ diagExplainText: 'This page checks for plugins that conflict with each other, mismatched dependencies, or wrong load order. Terms used:',
1023
+ diagTermBundle: 'bundle = one plugin package, applied in order',
1024
+ diagTermEntry: 'entry = one item a plugin registers in the running composition',
1025
+ diagTermPeer: 'peer dependency = another package a plugin requires from the host',
1026
+ diagTermShadow: 'shadowing = a plugin\u2019s old copy covers the host\u2019s newer one',
1027
+ diagTermOrphan: 'invalid entry = config references something that does not exist',
1028
+ diagTermOrder: 'load order = the order plugins activate; the later one may override the earlier',
1029
+ // issue #98 phase 2 (step 1): minimal community-bundle ordering
1030
+ orderSection: 'Ordering',
1031
+ orderUp: '↑',
1032
+ orderDown: '↓',
1033
+ orderApply: 'Apply order',
1034
+ orderDrag: 'Drag to reorder',
1035
+ orderDragHint: 'Drag ⠿ to reorder. Changes are saved when you apply the order.',
1036
+ orderConflicts: 'before/after conflicts in the current order',
1037
+ orderApplied: '✓ Applied — restart to apply',
1038
+ orderSuggestApply: 'Apply suggested order',
1039
+ orderSuggestHint: 'Suggested order (auto-sorted by before/after rules):',
1040
+ orderAutoSort: 'Auto-sort',
1041
+ orderAlreadyOptimal: 'Current order already satisfies every rule and plugin dependency — nothing to reorder',
1042
+ orderTrialFail: 'Static composition validation failed: {0}',
1043
+ orderDiffHint: 'This order would change the composition: {0} override(s), {1} orphan(s), {2} duplicate(s)',
1044
+ duplicateNames: 'Same-name plugins (informational only, not a conflict)',
1045
+ orderReset: 'Reset draft',
1046
+ checkRefresh: 'Re-check',
1047
+ aiFix: 'AI fix',
1048
+ aiFixHint: 'Hand the diagnostics to a new Agent session (copied to the clipboard; you decide whether to send)',
1049
+ aiFixIntro: 'Please help me fix the plugin issues of ChatCode CLI (profile: {0}). Diagnostics found:',
1050
+ aiFixDetect: 'Step 1 — identify yourself first. Before touching anything, determine whether the process you are running in IS the ChatCode CLI instance this profile belongs to (i.e. this diagnosed composition is the one you are running in right now). Check whether the cwd / $CHATCODE_CLI_HOME / command line points at this profile, or whether you are running inside a ChatCode CLI process. If you cannot tell, assume the answer is "yes" (the safe choice).',
1051
+ aiFixIfSelf: 'If YES — you are this ChatCode CLI instance: never change the live composition, ChatCode CLI or core packages in place (don\'t edit cordis.patch.yml, don\'t reorder/enable/disable bundles, don\'t install/remove/upgrade a plugin, don\'t reinstall deps, don\'t upgrade/restart chatcode-cli). Three steps: 1) read-only analysis only, change nothing; 2) produce apply.sh/.bat (this fix\'s changes) and rollback.sh/.bat (fully reverts it); both are idempotent — apply snapshots only when none exists yet and never overwrites an existing snapshot (an existing one means apply already ran, so roll back or confirm before re-running), while rollback restores from that snapshot, so a half-run apply can still be rolled back and repeated rollback is safe; 3) have me run apply in an external terminal and paste the stdout/stderr back to you. State the reason and wait for my confirmation at each step — never run these yourself.',
1052
+ aiFixScope: 'If NO — you are a process outside the target ChatCode CLI instance: you may then consider reordering dsh.profile.bundles, disabling / enabling plugins, or adjusting cordis.patch.yml. Note: official bundles are fixed; state your plan before changing anything.',
1053
+ aiFixConservative: 'Be conservative: only fix the clear errors listed above (boot failures / duplicate entries / risk-level dependency mismatches). Treat warnings and informational entries (e.g. optional or unconfirmed peer ranges) only when they relate to a clear error. Do not perform unnecessary upgrades or reordering; explain each change and wait for confirmation.',
1054
+ aiFixCopied: 'Fix prompt copied — paste it into a new conversation and send when ready',
1055
+ aiFixFail: 'Clipboard unavailable — copy the diagnostics below manually',
1056
+ catConflict: 'Conflicts',
1057
+ catDeps: 'Dependencies',
1058
+ catRisk: 'Risk',
1059
+ catWarn: 'Warning',
1060
+ catInfo: 'Info',
1061
+ catOrder: 'Order',
1062
+ /** Summary-strip tooltip for the order count (before/after rule conflicts). */
1063
+ checkOrderTip: 'community bundle load order conflicts with declared before/after rules',
1064
+ diagOkAll: 'No conflict, dependency or ordering issues found',
1065
+ // issue #98 phase 3: snapshots & rollback panel
1066
+ presetSection: 'Plugin presets',
1067
+ presetHint: 'Save the current bundle order and disabled list as a preset and switch anytime; applying runs a trial-start check and creates a snapshot first.',
1068
+ presetName: 'Preset name',
1069
+ presetSave: 'Save current state',
1070
+ presetSaving: 'Saving…',
1071
+ presetSaved: 'Preset saved',
1072
+ presetApply: 'Apply',
1073
+ presetApplied: 'Applied — restart to apply',
1074
+ presetDelete: 'Delete',
1075
+ presetDeleted: 'Preset deleted',
1076
+ presetEmpty: 'No presets saved yet',
1077
+ presetNameEmpty: 'Enter a preset name',
1078
+ presetFail: 'Preset operation failed: ',
1079
+ presetListFail: 'Failed to load presets: ',
1080
+ presetBundleCount: '{0} bundles',
1081
+ presetPreview: 'Preview',
1082
+ presetPreviewTitle: 'Applying this preset will:',
1083
+ presetReorder: 'reorder {0} bundles',
1084
+ presetEnable: 'enable {0} plugins',
1085
+ presetDisable: 'disable {0} plugins',
1086
+ presetNoop: 'no changes',
1087
+ presetPreviewFail: 'Preview failed: ',
1088
+ snapSection: 'Snapshots & Rollback',
1089
+ snapHint: 'Snapshots are taken automatically before applying changes; you can also create one manually and roll back anytime.',
1090
+ snapCreate: 'Create snapshot',
1091
+ snapCreating: 'Creating…',
1092
+ snapCreated: 'Snapshot created',
1093
+ snapEmpty: 'No snapshots yet',
1094
+ snapListFail: 'Failed to load snapshots: ',
1095
+ snapCreateFail: 'Failed to create snapshot: ',
1096
+ snapRestore: 'Restore',
1097
+ snapRestoring: 'Restoring…',
1098
+ snapRestored: 'Restored — restart to apply',
1099
+ snapRestoreFail: 'Failed to restore: ',
1100
+ snapRestoreConfirm: 'Confirm restore',
1101
+ snapRestoreConfirmText: 'Restoring overwrites the current profile package.json and configuration from the snapshot; this cannot be undone (create a fresh snapshot first if unsure).',
1102
+ snapFiles: 'files',
1103
+ snapDelete: 'Delete',
1104
+ snapDeleting: 'Deleting…',
1105
+ snapDeleted: 'Snapshot deleted',
1106
+ snapDeleteFail: 'Failed to delete snapshot: ',
1107
+ snapDeleteConfirm: 'Confirm delete',
1108
+ snapDeleteConfirmText: 'This snapshot cannot be recovered after deletion.',
1109
+ marketNoToggle: 'The market itself cannot be disabled',
1110
+ hostDependencyWarning: 'A plugin lists known legacy DSH compatibility host packages in dependencies. This may shadow the host version; the check is manifest-only and does not confirm a duplicate runtime instance:',
1111
+ hostDependencyMore: '{0} more finding(s) omitted',
1112
+ }