@ouraihub/aether-ui 0.0.0-stage → 0.1.0

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 (179) hide show
  1. package/LICENSE +789 -0
  2. package/fixtures/model-classify.json +42 -0
  3. package/fixtures/pricing-cost.json +56 -0
  4. package/fixtures/reasoning-infer.json +44 -0
  5. package/fixtures/sse/anthropic-messages/chinese.sse +24 -0
  6. package/fixtures/sse/anthropic-messages/multi-tool.sse +33 -0
  7. package/fixtures/sse/anthropic-messages/single-tool.sse +39 -0
  8. package/fixtures/sse/anthropic-messages/text.sse +27 -0
  9. package/fixtures/sse/anthropic-messages/truncated.sse +21 -0
  10. package/fixtures/sse/anthropic-messages/upstream-error.sse +12 -0
  11. package/fixtures/sse/expect.json +20 -0
  12. package/fixtures/sse/openai-chat/chinese.sse +14 -0
  13. package/fixtures/sse/openai-chat/multi-tool.sse +18 -0
  14. package/fixtures/sse/openai-chat/single-tool.sse +22 -0
  15. package/fixtures/sse/openai-chat/text.sse +14 -0
  16. package/fixtures/sse/openai-chat/truncated.sse +12 -0
  17. package/fixtures/sse/openai-chat/upstream-error.sse +6 -0
  18. package/fixtures/sse/openai-responses/chinese.sse +33 -0
  19. package/fixtures/sse/openai-responses/multi-tool.sse +36 -0
  20. package/fixtures/sse/openai-responses/single-tool.sse +27 -0
  21. package/fixtures/sse/openai-responses/text.sse +33 -0
  22. package/fixtures/sse/openai-responses/truncated.sse +30 -0
  23. package/fixtures/sse/openai-responses/upstream-error.sse +9 -0
  24. package/package.json +71 -3
  25. package/src/CopyInput.svelte +33 -0
  26. package/src/KitNotifier.svelte +33 -0
  27. package/src/chat/ApprovalCard.svelte +23 -0
  28. package/src/chat/ChatPanel.svelte +2097 -0
  29. package/src/chat/MessageItem.svelte +583 -0
  30. package/src/chat/SkillPicker.svelte +126 -0
  31. package/src/chat/ToolCallItem.svelte +23 -0
  32. package/src/chat/UsageDetails.svelte +138 -0
  33. package/src/chat/index.ts +2 -0
  34. package/src/chat/run-session.svelte.ts +556 -0
  35. package/src/components/ui/alert/alert-action.svelte +20 -0
  36. package/src/components/ui/alert/alert-description.svelte +23 -0
  37. package/src/components/ui/alert/alert-title.svelte +23 -0
  38. package/src/components/ui/alert/alert.svelte +43 -0
  39. package/src/components/ui/alert/index.ts +17 -0
  40. package/src/components/ui/alert-dialog/alert-dialog-action.svelte +27 -0
  41. package/src/components/ui/alert-dialog/alert-dialog-cancel.svelte +27 -0
  42. package/src/components/ui/alert-dialog/alert-dialog-content.svelte +32 -0
  43. package/src/components/ui/alert-dialog/alert-dialog-description.svelte +17 -0
  44. package/src/components/ui/alert-dialog/alert-dialog-footer.svelte +23 -0
  45. package/src/components/ui/alert-dialog/alert-dialog-header.svelte +20 -0
  46. package/src/components/ui/alert-dialog/alert-dialog-media.svelte +20 -0
  47. package/src/components/ui/alert-dialog/alert-dialog-overlay.svelte +17 -0
  48. package/src/components/ui/alert-dialog/alert-dialog-portal.svelte +7 -0
  49. package/src/components/ui/alert-dialog/alert-dialog-title.svelte +17 -0
  50. package/src/components/ui/alert-dialog/alert-dialog-trigger.svelte +7 -0
  51. package/src/components/ui/alert-dialog/alert-dialog.svelte +7 -0
  52. package/src/components/ui/alert-dialog/index.ts +40 -0
  53. package/src/components/ui/button/button.svelte +81 -0
  54. package/src/components/ui/button/index.ts +17 -0
  55. package/src/components/ui/dialog/dialog-close.svelte +11 -0
  56. package/src/components/ui/dialog/dialog-content.svelte +48 -0
  57. package/src/components/ui/dialog/dialog-description.svelte +17 -0
  58. package/src/components/ui/dialog/dialog-footer.svelte +32 -0
  59. package/src/components/ui/dialog/dialog-header.svelte +20 -0
  60. package/src/components/ui/dialog/dialog-overlay.svelte +17 -0
  61. package/src/components/ui/dialog/dialog-portal.svelte +7 -0
  62. package/src/components/ui/dialog/dialog-title.svelte +17 -0
  63. package/src/components/ui/dialog/dialog-trigger.svelte +11 -0
  64. package/src/components/ui/dialog/dialog.svelte +7 -0
  65. package/src/components/ui/dialog/index.ts +34 -0
  66. package/src/components/ui/dropdown-menu/dropdown-menu-checkbox-group.svelte +16 -0
  67. package/src/components/ui/dropdown-menu/dropdown-menu-checkbox-item.svelte +46 -0
  68. package/src/components/ui/dropdown-menu/dropdown-menu-content.svelte +31 -0
  69. package/src/components/ui/dropdown-menu/dropdown-menu-group-heading.svelte +22 -0
  70. package/src/components/ui/dropdown-menu/dropdown-menu-group.svelte +7 -0
  71. package/src/components/ui/dropdown-menu/dropdown-menu-item.svelte +27 -0
  72. package/src/components/ui/dropdown-menu/dropdown-menu-label.svelte +24 -0
  73. package/src/components/ui/dropdown-menu/dropdown-menu-portal.svelte +7 -0
  74. package/src/components/ui/dropdown-menu/dropdown-menu-radio-group.svelte +17 -0
  75. package/src/components/ui/dropdown-menu/dropdown-menu-radio-item.svelte +36 -0
  76. package/src/components/ui/dropdown-menu/dropdown-menu-separator.svelte +17 -0
  77. package/src/components/ui/dropdown-menu/dropdown-menu-shortcut.svelte +20 -0
  78. package/src/components/ui/dropdown-menu/dropdown-menu-sub-content.svelte +31 -0
  79. package/src/components/ui/dropdown-menu/dropdown-menu-sub-trigger.svelte +29 -0
  80. package/src/components/ui/dropdown-menu/dropdown-menu-sub.svelte +7 -0
  81. package/src/components/ui/dropdown-menu/dropdown-menu-trigger.svelte +7 -0
  82. package/src/components/ui/dropdown-menu/dropdown-menu.svelte +7 -0
  83. package/src/components/ui/dropdown-menu/index.ts +54 -0
  84. package/src/components/ui/empty/empty-content.svelte +23 -0
  85. package/src/components/ui/empty/empty-description.svelte +23 -0
  86. package/src/components/ui/empty/empty-header.svelte +20 -0
  87. package/src/components/ui/empty/empty-media.svelte +41 -0
  88. package/src/components/ui/empty/empty-title.svelte +20 -0
  89. package/src/components/ui/empty/empty.svelte +23 -0
  90. package/src/components/ui/empty/index.ts +22 -0
  91. package/src/components/ui/field/field-content.svelte +20 -0
  92. package/src/components/ui/field/field-description.svelte +25 -0
  93. package/src/components/ui/field/field-error.svelte +58 -0
  94. package/src/components/ui/field/field-group.svelte +23 -0
  95. package/src/components/ui/field/field-label.svelte +25 -0
  96. package/src/components/ui/field/field-legend.svelte +24 -0
  97. package/src/components/ui/field/field-separator.svelte +35 -0
  98. package/src/components/ui/field/field-set.svelte +20 -0
  99. package/src/components/ui/field/field-title.svelte +20 -0
  100. package/src/components/ui/field/field.svelte +47 -0
  101. package/src/components/ui/field/index.ts +33 -0
  102. package/src/components/ui/input/index.ts +7 -0
  103. package/src/components/ui/input/input.svelte +48 -0
  104. package/src/components/ui/label/index.ts +7 -0
  105. package/src/components/ui/label/label.svelte +20 -0
  106. package/src/components/ui/select/index.ts +40 -0
  107. package/src/components/ui/select/select-content.svelte +45 -0
  108. package/src/components/ui/select/select-group-heading.svelte +21 -0
  109. package/src/components/ui/select/select-group.svelte +17 -0
  110. package/src/components/ui/select/select-item.svelte +43 -0
  111. package/src/components/ui/select/select-label.svelte +20 -0
  112. package/src/components/ui/select/select-portal.svelte +7 -0
  113. package/src/components/ui/select/select-scroll-down-button.svelte +20 -0
  114. package/src/components/ui/select/select-scroll-up-button.svelte +20 -0
  115. package/src/components/ui/select/select-separator.svelte +18 -0
  116. package/src/components/ui/select/select-trigger.svelte +29 -0
  117. package/src/components/ui/select/select-value.svelte +7 -0
  118. package/src/components/ui/select/select.svelte +11 -0
  119. package/src/components/ui/separator/index.ts +7 -0
  120. package/src/components/ui/separator/separator.svelte +21 -0
  121. package/src/components/ui/sonner/index.ts +1 -0
  122. package/src/components/ui/sonner/sonner.svelte +40 -0
  123. package/src/components/ui/switch/index.ts +7 -0
  124. package/src/components/ui/switch/switch.svelte +34 -0
  125. package/src/components/ui/textarea/index.ts +7 -0
  126. package/src/components/ui/textarea/textarea.svelte +22 -0
  127. package/src/context.ts +34 -0
  128. package/src/dev/Demo.svelte +45 -0
  129. package/src/dev/main.ts +7 -0
  130. package/src/i18n/en.ts +617 -0
  131. package/src/i18n/index.ts +23 -0
  132. package/src/i18n/zh-CN.ts +599 -0
  133. package/src/index.ts +10 -0
  134. package/src/logs/LogPanel.svelte +97 -0
  135. package/src/logs/LogSettings.svelte +56 -0
  136. package/src/logs/index.ts +5 -0
  137. package/src/logs/logger.ts +96 -0
  138. package/src/markdown.ts +8 -0
  139. package/src/mcp/McpClientSettings.svelte +491 -0
  140. package/src/mcp/McpServerSettings.svelte +327 -0
  141. package/src/mcp/config.ts +26 -0
  142. package/src/mcp/index.ts +3 -0
  143. package/src/mcp/input.ts +73 -0
  144. package/src/notify.svelte.ts +43 -0
  145. package/src/ports/contract.ts +165 -0
  146. package/src/ports/fake.ts +484 -0
  147. package/src/ports/index.ts +7 -0
  148. package/src/ports/search.ts +47 -0
  149. package/src/ports/skill-sources.ts +45 -0
  150. package/src/providers/EndpointKeysDialog.svelte +343 -0
  151. package/src/providers/EndpointPanel.svelte +491 -0
  152. package/src/providers/ModelPickerDialog.svelte +187 -0
  153. package/src/providers/ModelSelect.svelte +434 -0
  154. package/src/providers/ModelSettingsDialog.svelte +453 -0
  155. package/src/providers/ProvidersSettings.svelte +631 -0
  156. package/src/providers/RequestConfigDialog.svelte +250 -0
  157. package/src/providers/SecretInput.svelte +276 -0
  158. package/src/providers/draft.ts +329 -0
  159. package/src/providers/edit-session.ts +146 -0
  160. package/src/providers/index.ts +5 -0
  161. package/src/providers/reasoning.ts +41 -0
  162. package/src/providers/revision.svelte.ts +4 -0
  163. package/src/search/SearchSettings.svelte +703 -0
  164. package/src/search/index.ts +13 -0
  165. package/src/search/settings-flow.ts +62 -0
  166. package/src/session.ts +20 -0
  167. package/src/skills/SkillAdd.svelte +347 -0
  168. package/src/skills/SkillAuthoring.svelte +381 -0
  169. package/src/skills/SkillEditor.svelte +94 -0
  170. package/src/skills/SkillPreviewDialog.svelte +122 -0
  171. package/src/skills/SkillsSettings.svelte +140 -0
  172. package/src/skills/error.ts +32 -0
  173. package/src/skills/index.ts +4 -0
  174. package/src/styles/kit.css +137 -0
  175. package/src/styles/tokens.css +22 -0
  176. package/src/tauri/index.ts +282 -0
  177. package/src/utils.ts +22 -0
  178. package/src/web/index.ts +376 -0
  179. package/README.md +0 -3
@@ -0,0 +1,599 @@
1
+ import type { Messages } from './en'
2
+
3
+ export const zhCN: Messages = {
4
+ 'common.confirm': '确定',
5
+ 'common.cancel': '取消',
6
+ 'skills.add.title': '添加技能',
7
+ 'skills.add.agent': '通过 Agent 创建',
8
+ 'skills.add.online': '在线搜索',
9
+ 'skills.add.system': '系统搜索',
10
+ 'skills.add.local': '本地文件或目录导入',
11
+ 'skills.add.review_notice': '查看完整技能并确认后才会安装,不会自动运行脚本。',
12
+ 'skills.add.query': '关键词或 GitHub URL',
13
+ 'skills.add.query_hint': '搜索技能,或粘贴 GitHub 仓库 / 技能链接',
14
+ 'skills.add.search': '搜索',
15
+ 'skills.add.results': '可用技能',
16
+ 'skills.add.preview': '预览技能',
17
+ 'skills.add.system_hint': '扫描用户目录中已知 CLI 技能文件夹,也可选择项目目录进行搜索。',
18
+ 'skills.add.rescan': '扫描用户目录',
19
+ 'skills.add.pick_search_directory': '选择技能目录',
20
+ 'skills.add.local_hint': '选择 SKILL.md、.zip 技能包或技能目录,包内参考文件和脚本将一并展示以供确认。',
21
+ 'skills.add.pick_directory': '选择目录',
22
+ 'skills.add.model': '模型',
23
+ 'skills.add.choose_model': '请先选择已配置的对话模型再发送',
24
+ 'skills.add.authoring_notice':
25
+ '助手可使用工具创建、测试技能文件,工具以当前用户权限运行,工作目录不是沙箱。请逐项审查权限请求;只有预览技能包并确认后才会安装。',
26
+ 'skills.add.creator_review': '开始前请查看内置 skill-creator',
27
+ 'skills.add.review_creator': '查看 skill-creator',
28
+ 'skills.add.confirm_creator': '确认 skill-creator 并开始',
29
+ 'skills.add.conversation': '技能创作对话',
30
+ 'skills.add.authoring_input': '发送给技能创作助手的消息',
31
+ 'skills.add.preview_artifact': '预览产物',
32
+ 'skills.add.tool_warning':
33
+ '以下为参数预览。允许工具将授予当前用户级文件和网络访问权限,并非沙箱权限。请仅允许可信调用。',
34
+ 'skills.add.working': '处理中…',
35
+ 'skills.add.no_results': '未找到技能。',
36
+ 'skills.add.ignored': '未导入文件',
37
+ 'chat.networkOn': '联网搜索已开启 · 点击关闭',
38
+ 'chat.networkOff': '联网搜索已关闭 · 点击开启',
39
+ 'chat.title': '对话',
40
+ 'chat.history': '会话',
41
+ 'chat.historyFailed': '读取会话失败',
42
+ 'chat.newConversation': '新对话',
43
+ 'chat.close': '关闭',
44
+ 'chat.messages': '消息',
45
+ 'chat.input': '消息',
46
+ 'chat.placeholder': '输入消息,Ctrl/Cmd+Enter 发送',
47
+ 'chat.send': '发送',
48
+ 'chat.stop': '停止',
49
+ 'chat.regenerate': '重新生成',
50
+ 'chat.stopped': '已停止',
51
+ 'chat.interrupted': '已中断:回复过程中应用被关闭',
52
+ 'chat.exhausted': '已达到工具调用轮数上限',
53
+ 'chat.copy': '复制',
54
+ 'chat.copied': '已复制',
55
+ 'chat.copyFailed': '复制失败',
56
+ 'chat.insert': '插入',
57
+ 'chat.retry': '重试',
58
+ 'chat.more': '更多操作',
59
+ 'chat.translationReply': '译文',
60
+ 'chat.noSourceModel': '来源模型未知',
61
+ 'chat.switchModel': '切换模型',
62
+ 'chat.translate': '翻译',
63
+ 'chat.editReply': '编辑',
64
+ 'chat.replyText': '回复 Markdown',
65
+ 'chat.replyModel': '回复模型',
66
+ 'chat.targetLanguage': '目标语言',
67
+ 'chat.branch': '分支',
68
+ 'chat.copyConversation': '复制为新对话',
69
+ 'chat.save': '保存',
70
+ 'chat.saveFile': '保存到本地文件',
71
+ 'chat.export': '导出',
72
+ 'chat.exportMarkdown': '导出为 Markdown',
73
+ 'chat.exportFailed': '下载 Markdown 失败',
74
+ 'chat.saveNote': '保存到笔记',
75
+ 'chat.saveNoteFailed': '保存笔记失败',
76
+ 'chat.useContext': '设置为上下文',
77
+ 'chat.deleteReply': '删除',
78
+ 'chat.deleteReplyTitle': '确定要删除此消息吗?',
79
+ 'chat.deleteReparentBody': '后续对话会接到上一条回复上。此操作无法撤销。',
80
+ 'chat.sourceModelUnavailable': '来源模型已不可用,请点 @ 选择其他模型。',
81
+ 'chat.candidateHint': '原回复将保留。点 👍 设置为上下文后,可从候选回复继续对话。',
82
+ 'chat.editReplyHint': '编辑只替换此回复。若回复被同时修改,将拒绝保存并保留你的草稿。',
83
+ 'chat.replyRefreshFailed': '重新加载已保存回复失败。',
84
+ 'chat.delete': '删除对话',
85
+ 'chat.network': '联网搜索',
86
+ 'chat.sources': '来源',
87
+ 'chat.networkPrivacy': '外部搜索只发送本轮问题;原生搜索优先时,可能向模型服务商发送会话及附带笔记上下文。',
88
+ 'chat.searching': '正在搜索网页…',
89
+ 'chat.searchResults': '找到 {count} 条结果',
90
+ 'chat.reasoning': '思考',
91
+ 'chat.reasoningEffort': '思考强度',
92
+ 'chat.reasoningStrength': '强度',
93
+ 'chat.reasoningFaster': '更快',
94
+ 'chat.reasoningSmarter': '更智能',
95
+ 'chat.resetReasoning': '恢复默认',
96
+ 'chat.reasoningDefaultHint': '默认不发送思考参数,由服务商决定。选择档位可指定强度。',
97
+ 'chat.reasoningUnconfigured': '此模型尚未配置思考能力。在模型设置中打开“推理”能力并选择支持的档位后,即可使用滑块。',
98
+ 'chat.unknown': '未知',
99
+ 'chat.contextUsage': '上下文用量',
100
+ 'chat.usage': 'Token 用量',
101
+ 'chat.reported': '实测',
102
+ 'chat.estimated': '估算',
103
+ 'chat.modelsFailed': '无法加载模型能力',
104
+ 'chat.modelsLoading': '正在加载模型…',
105
+ 'chat.retryModels': '重新加载模型',
106
+ 'chat.historyLoading': '正在加载会话…',
107
+ 'chat.retryHistory': '重试会话操作',
108
+ 'chat.rename': '重命名对话',
109
+ 'chat.conversationTitle': '对话标题',
110
+ 'chat.expandInput': '展开输入框',
111
+ 'chat.collapseInput': '收起输入框',
112
+ 'chat.backToBottom': '回到底部',
113
+ 'chat.draftRecoverable': '未发送的消息已保留,清空当前草稿后可恢复。',
114
+ 'chat.restoreDraft': '恢复未发送消息',
115
+ 'chat.tools': '更多工具',
116
+ 'chat.uploadAttachment': '上传附件',
117
+ 'chat.generateImage': '生成图片',
118
+ 'chat.generateImageOff': '关闭生成图片',
119
+ 'chat.quickPanel': '输入快捷面板',
120
+ 'chat.toolbarCustomize': '自定义工具栏',
121
+ 'chat.toolbarRestore': '恢复默认',
122
+ 'chat.toolbarDrag': '拖动或按 ↑/↓ 调整 {name} 的顺序',
123
+ 'chat.paintingUnconfigured': '请先在设置中选择绘图模型',
124
+ 'chat.toolsUnsupported': '当前模型不支持工具',
125
+ 'chat.generatedImages': '生成的图片',
126
+ 'chat.openGeneratedImage': '打开生成的第 {index} 张图片',
127
+ 'chat.removeImage': '移除第 {index} 张图片',
128
+ 'chat.openImage': '打开第 {index} 张图片',
129
+ 'chat.imageExpired': '图片已过期',
130
+ 'chat.visionUnsupported': '当前模型不支持图片',
131
+ 'chat.imageLimit': '每条消息最多 {max} 张图片',
132
+ 'chat.imageType': '仅支持 PNG、JPEG、WebP 和 GIF 图片',
133
+ 'chat.imageSize': '单张图片不能超过 4 MiB',
134
+ 'chat.currentUsage': '本轮',
135
+ 'chat.totalUsage': '会话已知累计',
136
+ 'chat.usage.inputTokens': '输入',
137
+ 'chat.usage.outputTokens': '输出',
138
+ 'chat.usage.cacheReadTokens': '缓存读取',
139
+ 'chat.usage.cacheWriteTokens': '缓存写入',
140
+ 'chat.usage.reasoningTokens': '思考 tokens',
141
+ 'chat.usageHint': '缓存计入输入,思考计入输出;未知数量不当作零。',
142
+ 'chat.cost': '费用',
143
+ 'chat.effort.default': '默认',
144
+ 'chat.effort.none': '关闭',
145
+ 'chat.effort.auto': '自动',
146
+ 'chat.effort.minimal': '最低',
147
+ 'chat.effort.low': '低',
148
+ 'chat.effort.medium': '中',
149
+ 'chat.effort.high': '高',
150
+ 'chat.effort.xhigh': '很高',
151
+ 'chat.effort.max': '最大',
152
+ 'chat.mode.label': '权限模式',
153
+ 'chat.mode.default': '逐次确认',
154
+ 'chat.mode.defaultHint': '按工具设置逐次确认。',
155
+ 'chat.mode.plan': '仅规划',
156
+ 'chat.mode.planHint': '只读与规划,不执行改动。',
157
+ 'chat.mode.accept_edits': '自动接受编辑',
158
+ 'chat.mode.accept_editsHint': '自动批准编辑,其他操作按规则确认。',
159
+ 'chat.mode.auto': '智能批准',
160
+ 'chat.mode.autoHint': '自动批准应用工具,规则可要求确认。',
161
+ 'chat.mode.full_access': '完全访问',
162
+ 'chat.mode.full_accessHint': '本次运行免确认,禁用工具除外。',
163
+ 'chat.mode.planBadge': '仅规划',
164
+ 'chat.mode.fullAccessTitle': '本次运行允许完全访问?',
165
+ 'chat.mode.fullAccessBody': '仅本次运行,工具可不经确认改动数据和执行命令;已禁止的工具仍不执行。此选择不会保存。',
166
+ 'chat.mode.ruleNotice': '规则检查可能漏判,不是安全沙箱;MCP 工具保留各自审批设置。',
167
+ 'chat.mode.navigate': '选择',
168
+ 'chat.mode.confirm': '确认',
169
+ 'chat.mode.close': '关闭',
170
+ 'providers.max_output': '最大输出(tokens)',
171
+ 'search.search': '网页搜索',
172
+ 'search.fetch': '读取网页',
173
+ 'search.searchHint': '你的问题会发送给选定的搜索服务商。',
174
+ 'search.fetchHint': '通过选定服务商读取 URL。',
175
+ 'search.defaultProvider': '默认服务商',
176
+ 'search.baseUrl': '基础地址',
177
+ 'search.username': 'Basic 用户名',
178
+ 'search.apiKey': 'API 密钥',
179
+ 'search.keyCleared': '保存时将清除密钥',
180
+ 'search.keyNotSet': '未配置',
181
+ 'search.clearKey': '清除',
182
+ 'search.replaceKey': '替换',
183
+ 'search.reveal': '显示',
184
+ 'search.currentPassword': '当前密码',
185
+ 'search.website': '网站',
186
+ 'search.apiKeyWebsite': '获取密钥',
187
+ 'search.save': '保存',
188
+ 'search.saved': '已保存',
189
+ 'search.check': '检测',
190
+ 'search.checking': '检测中…',
191
+ 'search.resultCount': '{count} 条结果',
192
+ 'search.maxResults': '最多结果数(1–50)',
193
+ 'search.loading': '加载中…',
194
+ 'search.unavailable': '此宿主未提供搜索能力',
195
+ 'search.tools': '搜索与读取 URL',
196
+ 'search.query': '搜索词',
197
+ 'search.runSearch': '搜索',
198
+ 'search.pageUrl': 'URL',
199
+ 'search.password': '密码',
200
+ 'search.read': '读取',
201
+ 'chat.deleteTitle': '删除这个对话?',
202
+ 'chat.deleteBody': '删除后消息无法恢复。',
203
+ 'search.manageKeys': '管理密钥',
204
+ 'search.newKey': '新密钥',
205
+ 'search.addKey': '添加密钥',
206
+ 'search.copy': '复制',
207
+ 'search.delete': '删除',
208
+ 'search.copied': '已复制',
209
+ 'search.copyFailed': '密钥复制失败',
210
+ 'search.advanced': '高级搜索设置',
211
+ 'search.compression': '压缩',
212
+ 'search.compressionNone': '不压缩',
213
+ 'search.compressionCutoff': '截断',
214
+ 'search.editKey': '修改密钥',
215
+ 'search.cutoffLimit': '截断字符数',
216
+ 'search.blacklist': '黑名单(每行一条规则)',
217
+ 'search.nativePreferred': '优先使用模型原生联网搜索',
218
+ 'search.nativePrivacy':
219
+ '已声明能力的兼容模型可使用原生搜索,其余使用选定的外部服务商。原生搜索可能将会话和笔记上下文发送给模型服务商;本地黑名单和截断不控制供应商原生搜索。',
220
+ 'providers.nativeWebSearch': '模型支持原生联网搜索',
221
+ 'chat.deleteFailed': '删除对话失败',
222
+ 'chat.empty': '输入问题开始对话',
223
+ 'chat.noModels': '还没有对话模型,请先添加服务商和模型。',
224
+ 'chat.openSettings': '打开设置',
225
+ 'chat.context.remove': '下一条消息不附带 {label}',
226
+ 'chat.tool.calling': '正在调用 {name}',
227
+ 'chat.tool.ok': '{name}:{summary}',
228
+ 'chat.tool.error': '{name} 失败:{summary}',
229
+ 'chat.tool.denied': '{name}:已拒绝',
230
+ 'chat.tool.unknown': '{name}:结果未知,可能已执行',
231
+ 'chat.approval.title': '允许调用 {name}?',
232
+ 'chat.approval.host': '应用工具',
233
+ 'chat.approval.mcp': 'MCP 服务 {server}',
234
+ 'chat.approval.allow': '允许本次',
235
+ 'chat.approval.deny': '拒绝',
236
+ 'logs.title': '日志',
237
+ 'logs.problemsOnly': '只看问题',
238
+ 'logs.openDir': '打开目录',
239
+ 'logs.empty': '暂无日志',
240
+ 'logs.loadFailed': '读取日志失败',
241
+ 'logs.level': '日志级别',
242
+ 'logs.levelHint': '修改后立即生效。',
243
+ 'logs.unavailable': '日志文件写入失败,最近的日志可能缺失。',
244
+ 'errors.bad_request': '请求无效',
245
+ 'errors.not_found': '未找到',
246
+ 'errors.conflict': '与现有数据冲突',
247
+ 'errors.unsupported': '不支持的操作',
248
+ 'errors.cancelled': '已取消',
249
+ 'errors.unauthorized': '认证失败,请检查密钥',
250
+ 'errors.forbidden': '没有权限',
251
+ 'errors.rate_limited': '请求过于频繁,请稍后再试',
252
+ 'errors.upstream': '上游服务出错',
253
+ 'errors.timeout': '请求超时',
254
+ 'errors.network': '网络连接失败',
255
+ 'errors.needs_config': '需要先完成配置',
256
+ 'errors.budget_exceeded': '超出预算上限',
257
+ 'errors.incompatible_db': '数据文件版本不兼容',
258
+ 'errors.internal': '内部错误',
259
+ 'providers.title': '服务商',
260
+ 'providers.add': '新建服务商',
261
+ 'providers.empty': '还没有服务商',
262
+ 'providers.empty_hint': '新建一个服务商,然后获取模型。',
263
+ 'providers.name': '名称',
264
+ 'providers.enabled': '启用',
265
+ 'providers.endpoints': '线路',
266
+ 'providers.add_endpoint': '添加线路',
267
+ 'providers.remove_endpoint': '删除线路',
268
+ 'providers.base_url': 'API 地址',
269
+ 'providers.protocol': '协议',
270
+ 'providers.protocol.openai-chat': 'OpenAI 兼容(Chat Completions)',
271
+ 'providers.protocol.openai-responses': 'OpenAI Responses',
272
+ 'providers.protocol.anthropic-messages': 'Anthropic 兼容(Messages)',
273
+ 'providers.search': '搜索模型平台…',
274
+ 'providers.filter': '筛选服务商',
275
+ 'providers.filter_all': '全部',
276
+ 'providers.filter_enabled': '启用',
277
+ 'providers.filter_disabled': '停用',
278
+ 'providers.no_matches': '没有匹配的服务商',
279
+ 'providers.api_key': 'API 密钥',
280
+ 'providers.key_show': '显示密钥',
281
+ 'providers.key_hide': '隐藏密钥',
282
+ 'providers.key_copy': '复制密钥',
283
+ 'providers.key_edit': '编辑密钥',
284
+ 'providers.key_delete': '删除密钥',
285
+ 'providers.key_copied': '密钥已复制',
286
+ 'providers.key_copy_failed': '密钥复制失败',
287
+ 'providers.key_current_password': '当前密码',
288
+ 'providers.key_reveal_failed': '密钥显示失败',
289
+ 'providers.models': '模型',
290
+ 'providers.no_models': '未选择模型',
291
+ 'providers.model_invalid': '所选模型不可用',
292
+ 'providers.model_placeholder': '选择模型',
293
+ 'providers.model_search': '搜索模型…',
294
+ 'providers.model_no_match': '没有匹配的模型',
295
+ 'providers.model_configure': '配置模型',
296
+ 'providers.cap_vision': '视觉',
297
+ 'providers.cap_reasoning': '推理',
298
+ 'providers.cap_tools': '工具',
299
+ 'providers.cap_web': '联网',
300
+ 'providers.save': '保存',
301
+ 'providers.delete': '删除服务商',
302
+ 'providers.delete_confirm': '删除"{name}"及其全部线路?',
303
+ 'providers.model_type': '模型类型',
304
+ 'providers.picker_title': '挑选模型',
305
+ 'providers.picker_hint': '点 + 添加模型,点 − 移除。',
306
+ 'providers.search_models': '搜索模型 id',
307
+ 'providers.all_types': '全部',
308
+ 'providers.add_all': '全部添加',
309
+ 'providers.remove_all': '全部移除',
310
+ 'providers.no_model_matches': '没有匹配的模型',
311
+ 'providers.picked': '已选',
312
+ 'providers.picked_count': '已选 {count} 个',
313
+ 'providers.add_model': '添加 {id}',
314
+ 'providers.remove_model': '移除 {id}',
315
+ 'providers.type_for': '{id} 的模型类型',
316
+ 'providers.vision': '可看图',
317
+ 'providers.no_group': '其他',
318
+ 'providers.model_settings': '模型设置',
319
+ 'providers.reasoning_dialect': '思考协议',
320
+ 'providers.dialect.openai': 'OpenAI 思考强度(reasoning_effort)',
321
+ 'providers.dialect.anthropic-budget': 'Anthropic 思考预算(budget_tokens)',
322
+ 'providers.dialect.anthropic-adaptive': 'Anthropic 自适应思考(effort)',
323
+ 'providers.dialect.thinking-type': '思考开关(thinking.type;DeepSeek、GLM、豆包、Kimi)',
324
+ 'providers.dialect.qwen': '通义千问思考(enable_thinking + thinking_budget)',
325
+ 'providers.reasoning_efforts': '允许的思考档位',
326
+ 'providers.reasoning_budget': '思考预算(tokens)',
327
+ 'providers.context_window': '上下文窗口(tokens)',
328
+ 'providers.type.chat': '对话',
329
+ 'providers.type.image': '图像',
330
+ 'providers.type.video': '视频',
331
+ 'providers.type.tts': '语音合成',
332
+ 'providers.type.stt': '语音识别',
333
+ 'providers.type.embedding': '向量',
334
+ 'providers.type.rerank': '重排',
335
+ 'providers.type.unknown': '未知',
336
+ 'providers.type_other': '其他',
337
+ 'providers.type_in_use': '{roles} 正在使用此模型,修改类型后需重新选择',
338
+ 'providers.list_separator': '、',
339
+ 'providers.edit_model': '编辑模型',
340
+ 'providers.model_name': '模型名称',
341
+ 'providers.group_name': '分组名称',
342
+ 'providers.purpose': '模型用途',
343
+ 'providers.purpose.chat': '对话',
344
+ 'providers.purpose.image': '图像生成',
345
+ 'providers.purpose.edit': '图像编辑',
346
+ 'providers.more_settings': '更多设置',
347
+ 'providers.capabilities': '模型能力',
348
+ 'providers.tools_state.unknown': '未探测',
349
+ 'providers.tools_state.true': '支持工具',
350
+ 'providers.tools_state.false': '不支持工具',
351
+ 'providers.input_modalities': '输入模态',
352
+ 'providers.pricing': '价格',
353
+ 'providers.pricing_add': '设置价格',
354
+ 'providers.pricing_clear': '清除价格',
355
+ 'providers.pricing_unit': '每百万 Token 的价格',
356
+ 'providers.currency': '币种',
357
+ 'providers.currency.USD': '美元',
358
+ 'providers.currency.CNY': '人民币',
359
+ 'providers.tier': '档位 {n}',
360
+ 'providers.tier_add': '添加档位',
361
+ 'providers.tier_remove': '删除档位 {n}',
362
+ 'providers.tier_start': '起始输入 Token',
363
+ 'providers.price.input': '输入',
364
+ 'providers.price.output': '输出',
365
+ 'providers.price.cacheRead': '缓存读取',
366
+ 'providers.price.cacheWrite': '缓存写入',
367
+ 'providers.price_same_as_input': '同输入',
368
+ 'providers.applies_next': '保存后从下一条消息开始生效;正在生成的回复不受影响。',
369
+ 'providers.save_model_invalid': '模型 {model} 的设置无效:{error}',
370
+ 'providers.error.name.too_long': '最多 80 个字符',
371
+ 'providers.error.groupName.too_long': '最多 80 个字符',
372
+ 'providers.error.contextWindow.invalid': '请输入正整数',
373
+ 'providers.error.maxOutput.invalid': '请输入正整数',
374
+ 'providers.error.maxOutput.exceeds_context': '最大输出必须小于上下文窗口',
375
+ 'providers.error.reasoning.invalid_efforts': '至少选择一个档位',
376
+ 'providers.error.reasoning.protocol_mismatch': '思考协议与线路协议不匹配',
377
+ 'providers.error.reasoning.invalid_budget': '预算至少 1024,且必须小于最大输出(默认 4096)',
378
+ 'providers.error.reasoning.unexpected_budget': '此思考协议不使用预算',
379
+ 'providers.error.pricing.invalid': '价格须为 0 到 1000000 之间的数字,首档从 0 开始且起点递增,最多 8 档',
380
+ 'providers.probe.missing_key': '需要密钥',
381
+ 'providers.probe.unauthorized': '认证失败',
382
+ 'providers.probe.not_found': '找不到模型列表(404)',
383
+ 'providers.probe.rate_limited': '请求过于频繁',
384
+ 'providers.probe.status': '上游返回 HTTP {status}',
385
+ 'providers.probe.timeout': '请求超时',
386
+ 'providers.probe.connect': '无法连接',
387
+ 'providers.probe.blocked_address': '不允许访问该地址',
388
+ 'providers.probe.invalid_body': '无法识别的模型列表',
389
+ 'providers.hint.missing_v1': '地址可能需要以 /v1 结尾',
390
+ 'providers.hint.check_network': '请检查网络与地址',
391
+ 'providers.hint.check_key': '请检查密钥',
392
+ 'providers.settings': '服务商设置',
393
+ 'providers.row_menu': '{name} 的更多操作',
394
+ 'providers.edit': '编辑',
395
+ 'providers.remove': '删除',
396
+ 'providers.notes': '模型备注',
397
+ 'providers.notes_placeholder': '请输入 Markdown 格式内容...',
398
+ 'providers.get_key': '获取密钥',
399
+ 'providers.needs_setup': '需要密钥',
400
+ 'providers.save_failed': '保存失败,修改已保留。',
401
+ 'providers.retry': '重试',
402
+ 'providers.discard_title': '放弃未保存的修改?',
403
+ 'providers.discard_body': '上一次修改没有保存成功,仍要切换吗?',
404
+ 'providers.endpoint_new': '新线路',
405
+ 'providers.remove_endpoint_confirm': '删除这条线路及其模型?',
406
+ 'providers.url_invalid': '请输入以 http:// 或 https:// 开头的地址',
407
+ 'providers.request_config': '请求配置',
408
+ 'providers.request_config_tip': '配置 API 地址与自定义请求头',
409
+ 'providers.default': '默认',
410
+ 'providers.base_url_hint': '自定义 API 请求地址:{url}',
411
+ 'providers.image_base_url': '图像生成 Base URL',
412
+ 'providers.image_base_url_hint': '用于 /images/generations;留空时使用 API 地址',
413
+ 'providers.image_edit_base_url': '图像编辑 Base URL',
414
+ 'providers.image_edit_base_url_hint': '用于 /images/edits;留空时使用 API 地址',
415
+ 'providers.headers': '自定义请求头',
416
+ 'providers.headers_add': '添加请求头',
417
+ 'providers.header_name': '请求头名称',
418
+ 'providers.header_value': '请求头取值',
419
+ 'providers.header_remove': '删除请求头 {name}',
420
+ 'providers.headers_to_json': '切换为 JSON 编辑',
421
+ 'providers.headers_to_list': '切换为键值列表',
422
+ 'providers.headers_invalid_json': 'JSON 格式错误',
423
+ 'providers.headers_invalid': '请求头名称或取值无效',
424
+ 'providers.headers_reserved': '{name} 由系统设置,不能自定义',
425
+ 'providers.headers_too_many': '最多 20 个请求头',
426
+ 'providers.check': '检测',
427
+ 'providers.check_ok': '连接正常 · 可用 {count} 个模型',
428
+ 'providers.suggest_protocol': '这条线路支持 Anthropic 原生协议(Messages),Claude 模型的图片和思考走原生格式更稳定',
429
+ 'providers.suggest_protocol_apply': '改用 Anthropic 协议',
430
+ 'providers.sync_models': '同步模型',
431
+ 'providers.add_model_manual': '添加模型',
432
+ 'providers.model_id': '模型 ID',
433
+ 'providers.remove_group': '移除整组',
434
+ 'providers.model_settings_for': '{id} 的设置',
435
+ 'providers.cap_filter': '按能力筛选',
436
+ 'providers.expand_all': '全部展开',
437
+ 'providers.collapse_all': '全部折叠',
438
+ 'providers.key_unreadable': '本机无法读取已保存的密钥',
439
+ 'providers.key_placeholder': '输入 API 密钥',
440
+ 'providers.key_delete_confirm': '删除已保存的 API 密钥?',
441
+ 'providers.keys_manage': 'API 密钥管理',
442
+ 'providers.keys_desc': '管理当前线路的多个 API 密钥,失败时自动换下一个',
443
+ 'providers.key_strategy': '密钥使用方式',
444
+ 'providers.key_strategy_round_robin': '轮流使用',
445
+ 'providers.key_strategy_round_robin_desc': '每次请求从下一个密钥开始,把限流分摊到各个密钥',
446
+ 'providers.key_strategy_fill_first': '用完再换',
447
+ 'providers.key_strategy_fill_first_desc': '总是从第一个密钥开始,用完的密钥在恢复前跳过',
448
+ 'providers.key_exhausted': '暂停使用,{time} 恢复',
449
+ 'providers.key_restore': '恢复',
450
+ 'providers.keys_add': '添加 API 密钥',
451
+ 'providers.keys_enabled_count': '{enabled} / {total} 已启用',
452
+ 'providers.keys_empty': '暂无 API 密钥',
453
+ 'providers.keys_label': '标签',
454
+ 'providers.keys_keep': '留空则不修改密钥',
455
+ 'providers.keys_enable_for': '启用 {name}',
456
+ 'providers.keys_save': '保存',
457
+ 'providers.keys_cancel': '取消',
458
+ 'providers.keys_err_empty': 'API 密钥不能为空',
459
+ 'providers.keys_err_duplicate': 'API 密钥已存在',
460
+ 'providers.keys_err_too_many': '每条线路最多 16 个密钥',
461
+ 'providers.keys_err_label': '标签最多 40 个字符',
462
+ 'providers.keys_save_failed': 'API 密钥保存失败',
463
+ 'mcp.server.title': 'MCP 服务',
464
+ 'mcp.server.running': '运行中:{url}',
465
+ 'mcp.server.stopped': '已停止',
466
+ 'mcp.server.toolCount': '{count} 个工具',
467
+ 'mcp.server.start': '启动',
468
+ 'mcp.server.stop': '停止',
469
+ 'mcp.server.port': '端口',
470
+ 'mcp.server.savePort': '保存端口',
471
+ 'mcp.server.scopes': '启用的作用域',
472
+ 'mcp.server.scopesHint': 'token 只能调用其被授予且在此启用的作用域中的工具。',
473
+ 'mcp.server.destructiveTitle': '启用破坏性作用域?',
474
+ 'mcp.server.destructiveBody': '外部 AI 客户端将能通过“{scope}”修改数据。',
475
+ 'mcp.server.newToken': '新建 token',
476
+ 'mcp.server.tokenName': '名称',
477
+ 'mcp.server.issue': '发放 token',
478
+ 'mcp.server.issuedTitle': '已发放 token“{name}”',
479
+ 'mcp.server.issuedOnce': '请立即复制:它只显示这一次。',
480
+ 'mcp.server.copyClaude': '复制 Claude Code 命令(POSIX shell)',
481
+ 'mcp.server.copyJson': '复制通用 JSON 配置',
482
+ 'mcp.server.copied': '已复制',
483
+ 'mcp.server.dismiss': '完成',
484
+ 'mcp.server.tokens': 'Token 列表',
485
+ 'mcp.server.noTokens': '尚无 token',
486
+ 'mcp.server.lastUsed': '最近使用',
487
+ 'mcp.server.revoke': '撤销',
488
+ 'mcp.server.revoked': '已撤销',
489
+ 'mcp.server.revokeTitle': '撤销该 token?',
490
+ 'mcp.server.revokeBody': '使用“{name}”的客户端将立即失去访问权。',
491
+ 'mcp.client.title': '外部 MCP 服务',
492
+ 'mcp.client.hint': '已启用且已信任的服务的工具会提供给应用内 AI;每次调用按工具的审批设置执行。',
493
+ 'mcp.client.add': '添加服务',
494
+ 'mcp.client.editTitle': '编辑服务',
495
+ 'mcp.client.empty': '还没有 MCP 服务',
496
+ 'mcp.client.emptyHint': '添加一个远程(HTTP)服务或本地命令(stdio),测试连接后再信任它。',
497
+ 'mcp.client.secretKeys': '凭据:{keys}',
498
+ 'mcp.client.test': '测试连接',
499
+ 'mcp.client.testFailed': '连接失败:{error}',
500
+ 'mcp.client.edit': '编辑',
501
+ 'mcp.client.delete': '删除',
502
+ 'mcp.client.deleteTitle': '删除该服务?',
503
+ 'mcp.client.deleteBody': '“{name}”及其保存的凭据将被删除。',
504
+ 'mcp.client.enabled': '启用',
505
+ 'mcp.client.trusted': '信任',
506
+ 'mcp.client.allowPrivate': '允许内网地址',
507
+ 'mcp.client.trustTitle': '信任该服务?',
508
+ 'mcp.client.trustBody': 'AI 将看到“{name}”的工具并可能调用它们;每次调用仍按工具的审批设置执行。',
509
+ 'mcp.client.privateTitle': '允许内网地址?',
510
+ 'mcp.client.privateBody': '将允许访问位于本地网络的 {url}。',
511
+ 'mcp.client.tools': '工具',
512
+ 'mcp.client.noTools': '尚未发现工具:请测试连接。',
513
+ 'mcp.client.readOnlyHint': '只读,可设为自动',
514
+ 'mcp.client.approvalFor': '{tool} 的审批',
515
+ 'mcp.client.approval.auto': '自动',
516
+ 'mcp.client.approval.ask': '询问',
517
+ 'mcp.client.approval.deny': '禁止',
518
+ 'mcp.client.name': '名称',
519
+ 'mcp.client.slug': '工具前缀',
520
+ 'mcp.client.transport': '连接方式',
521
+ 'mcp.client.transport.http': '远程(HTTP)',
522
+ 'mcp.client.transport.stdio': '本地命令(stdio)',
523
+ 'mcp.client.command': '命令',
524
+ 'mcp.client.args': '参数,每行一个',
525
+ 'mcp.client.argsHint': '原样传给程序,不经过 shell。令牌请填在下方环境变量中。',
526
+ 'mcp.client.cwd': '工作目录',
527
+ 'mcp.client.cwdHint': '绝对路径;留空则沿用应用的目录。',
528
+ 'mcp.client.env': '环境变量,每行一个“NAME=value”',
529
+ 'mcp.client.envHint': '加密保存,不再显示。应用自身的密钥与令牌不会传给该程序。',
530
+ 'mcp.client.url': '地址',
531
+ 'mcp.client.urlHint': '不含凭据:密钥请填在下方请求头或 query 中。',
532
+ 'mcp.client.replaceSecret': '替换凭据(当前:{keys})',
533
+ 'mcp.client.headers': '请求头,每行一个“名称: 值”',
534
+ 'mcp.client.query': 'query 参数,每行一个“名称=值”',
535
+ 'mcp.client.secretHint': '加密保存,之后不再显示。两项都留空则不发送凭据。',
536
+ 'mcp.client.save': '保存',
537
+ 'mcp.client.err.credentialQuery': '地址中含凭据:请移到下方 query 参数中',
538
+ 'mcp.client.err.duplicateSlug': '已有服务使用该前缀',
539
+ 'mcp.client.err.secretLine': '每行凭据都需要名称和值',
540
+ 'mcp.client.err.credentialArg': '有参数看起来是凭据:请改填到环境变量中',
541
+ 'mcp.client.err.transportChanged': '连接方式已变化:请同时替换凭据',
542
+ 'skills.title': '技能',
543
+ 'skills.list': '已安装的技能',
544
+ 'skills.import': '导入 SKILL.md 或 .zip',
545
+ 'skills.new': '新建技能',
546
+ 'skills.empty': '还没有技能',
547
+ 'skills.empty_hint': '导入 SKILL.md 或 .zip,或手写一个。',
548
+ 'skills.name': '名称',
549
+ 'skills.version': '版本',
550
+ 'skills.unversioned': '未版本化',
551
+ 'skills.description': '描述',
552
+ 'skills.body': '全文',
553
+ 'skills.license': '许可',
554
+ 'skills.origin.imported': '导入',
555
+ 'skills.origin.manual': '手写',
556
+ 'skills.origin.builtin': '内置',
557
+ 'skills.revision': '修订 {revision}',
558
+ 'skills.chars': '{count} 字',
559
+ 'skills.view': '查看',
560
+ 'skills.edit': '编辑',
561
+ 'skills.edit_title': '编辑 {name}',
562
+ 'skills.save': '保存',
563
+ 'skills.duplicate': '复制为自定义',
564
+ 'skills.delete': '删除',
565
+ 'skills.delete_confirm': '删除技能“{name}”?历史对话不受影响。',
566
+ 'skills.up': '上移 {name}',
567
+ 'skills.down': '下移 {name}',
568
+ 'skills.preview_title': '安装前确认',
569
+ 'skills.preview_desc': '请阅读全文。技能只是给模型的指引,不授予任何工具或访问权限。',
570
+ 'skills.replace': '替换已安装的版本({version},修订 {revision})',
571
+ 'skills.install': '安装',
572
+ 'skills.installed': '已安装 {name}',
573
+ 'skills.content_changed': '预览后文件已变化,请查看新内容并重新确认。',
574
+ 'skills.picker': '本条消息使用的技能',
575
+ 'skills.picker_none': '不使用技能',
576
+ 'skills.picker_count': '{count} 个技能',
577
+ 'skills.budget': '{chars} / {budget} 字',
578
+ 'skills.changed_title': '技能已更新,请重新确认',
579
+ 'skills.use': '使用此版本',
580
+ 'skills.removed': '所选技能已被删除,已移出选择',
581
+ 'skills.err.exists': '已有同名技能',
582
+ 'skills.err.builtin_name': '该名称为内置技能保留',
583
+ 'skills.err.revision_changed': '技能已在别处修改,请重新打开后再编辑',
584
+ 'skills.err.secret_detected': '{field} 处疑似凭据,请先删除',
585
+ 'skills.err.unsupported_files': '包中有不支持的文件:{field}',
586
+ 'skills.err.too_large': '{field} 过大(上限 {limit})',
587
+ 'skills.err.frontmatter': 'frontmatter 第 {field} 行不受支持',
588
+ 'skills.err.invalid_name': '包中文件名不合法:{field}(只允许字母、数字、"."、"_"、"-")',
589
+ 'skills.err.too_deep': '{field} 目录层级过深(最多 {limit} 层)',
590
+ 'skills.err.not_utf8': '{field} 不是 UTF-8 文本',
591
+ 'skills.has_scripts': '含脚本',
592
+ 'skills.file_count': '{count} 个文件',
593
+ 'skills.files': '包内文件({count})',
594
+ 'skills.file_kind.script': '脚本',
595
+ 'skills.file_kind.reference': '参考',
596
+ 'skills.file_kind.asset': '资源',
597
+ 'skills.file_size': '{size} 字节',
598
+ 'skills.scripts_notice': '包含脚本,本应用不会自动执行;宿主可能在你批准后运行。',
599
+ }
package/src/index.ts ADDED
@@ -0,0 +1,10 @@
1
+ // Root entry: host wiring shared by every capability (docs/16 §3, §5). Capabilities live under subpaths.
2
+ export { getKitContext, setKitContext } from './context'
3
+ export type { ConfirmOptions, KitContext, KitLogger, KitNotify, LogFields } from './context'
4
+ export { createI18n } from './i18n'
5
+ export type { KitI18n, Messages } from './i18n'
6
+ export { renderMarkdown } from './markdown'
7
+ export { createDefaultNotify, DefaultNotify } from './notify.svelte'
8
+ export { default as KitNotifier } from './KitNotifier.svelte'
9
+ export { default as CopyInput } from './CopyInput.svelte'
10
+ export { default as SearchSettings } from './search/SearchSettings.svelte'