openclacky 1.2.17 → 1.3.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.
- checksums.yaml +4 -4
- data/CHANGELOG.md +34 -0
- data/lib/clacky/agent/skill_manager.rb +1 -1
- data/lib/clacky/agent/time_machine.rb +256 -74
- data/lib/clacky/agent/tool_executor.rb +12 -0
- data/lib/clacky/agent.rb +21 -31
- data/lib/clacky/agent_config.rb +18 -0
- data/lib/clacky/cli.rb +55 -3
- data/lib/clacky/default_skills/media-gen/SKILL.md +173 -5
- data/lib/clacky/default_skills/skill-creator/SKILL.md +1 -0
- data/lib/clacky/media/base.rb +125 -0
- data/lib/clacky/media/dashscope.rb +243 -0
- data/lib/clacky/media/gemini.rb +10 -0
- data/lib/clacky/media/generator.rb +75 -0
- data/lib/clacky/media/openai_compat.rb +160 -0
- data/lib/clacky/message_history.rb +12 -7
- data/lib/clacky/providers.rb +28 -0
- data/lib/clacky/rich_ui_controller.rb +3 -1
- data/lib/clacky/server/backup_manager.rb +200 -0
- data/lib/clacky/server/channel/adapters/feishu/adapter.rb +10 -2
- data/lib/clacky/server/channel/adapters/feishu/bot.rb +68 -15
- data/lib/clacky/server/channel/channel_manager.rb +180 -81
- data/lib/clacky/server/http_server.rb +348 -15
- data/lib/clacky/server/scheduler.rb +19 -0
- data/lib/clacky/server/session_registry.rb +8 -4
- data/lib/clacky/session_manager.rb +40 -2
- data/lib/clacky/skill.rb +3 -1
- data/lib/clacky/tools/trash_manager.rb +14 -0
- data/lib/clacky/ui2/components/command_suggestions.rb +1 -0
- data/lib/clacky/ui2/components/modal_component.rb +34 -7
- data/lib/clacky/ui2/ui_controller.rb +150 -19
- data/lib/clacky/utils/file_processor.rb +75 -4
- data/lib/clacky/version.rb +1 -1
- data/lib/clacky/web/app.css +2038 -1147
- data/lib/clacky/web/app.js +22 -1
- data/lib/clacky/web/backup.js +119 -0
- data/lib/clacky/web/billing.js +94 -7
- data/lib/clacky/web/channels.js +81 -11
- data/lib/clacky/web/design-sample.css +247 -0
- data/lib/clacky/web/design-sample.html +127 -0
- data/lib/clacky/web/favicon.svg +16 -0
- data/lib/clacky/web/i18n.js +159 -31
- data/lib/clacky/web/index.html +175 -55
- data/lib/clacky/web/logo_nav_dark.png +0 -0
- data/lib/clacky/web/onboard.js +114 -28
- data/lib/clacky/web/sessions.js +436 -192
- data/lib/clacky/web/settings.js +21 -1
- data/lib/clacky/web/skills.js +6 -6
- data/lib/clacky/web/tasks.js +129 -61
- data/lib/clacky/web/utils.js +72 -0
- data/lib/clacky/web/ws-dispatcher.js +6 -0
- data/lib/clacky.rb +1 -0
- metadata +8 -3
- data/lib/clacky/server/channel/group_message_buffer.rb +0 -53
data/lib/clacky/web/i18n.js
CHANGED
|
@@ -30,9 +30,18 @@ const I18n = (() => {
|
|
|
30
30
|
"sidebar.billing": "Usage",
|
|
31
31
|
|
|
32
32
|
// ── Welcome screen ──
|
|
33
|
-
"welcome.title": "
|
|
34
|
-
"welcome.body": "
|
|
35
|
-
"welcome.btn": "
|
|
33
|
+
"welcome.title": "What should we build?",
|
|
34
|
+
"welcome.body": "Your agent is standing by. Pick a starting point or just type.",
|
|
35
|
+
"welcome.btn": "Start a blank session",
|
|
36
|
+
"welcome.chip.code.title": "Write code",
|
|
37
|
+
"welcome.chip.code.desc": "build, refactor, debug",
|
|
38
|
+
"welcome.chip.code.prompt": "Help me write some code. ",
|
|
39
|
+
"welcome.chip.task.title": "Automate a task",
|
|
40
|
+
"welcome.chip.task.desc": "schedule, run, repeat",
|
|
41
|
+
"welcome.chip.task.prompt": "I want to automate a recurring task. ",
|
|
42
|
+
"welcome.chip.research.title": "Research",
|
|
43
|
+
"welcome.chip.research.desc": "search, read, summarize",
|
|
44
|
+
"welcome.chip.research.prompt":"Research this for me: ",
|
|
36
45
|
|
|
37
46
|
// ── Chat panel ──
|
|
38
47
|
"chat.status.idle": "idle",
|
|
@@ -44,6 +53,7 @@ const I18n = (() => {
|
|
|
44
53
|
"chat.input.placeholderRunningMobile": "Add more info…",
|
|
45
54
|
"chat.btn.send": "Send",
|
|
46
55
|
"chat.thinking": "Thinking…",
|
|
56
|
+
"chat.vision": "Reading image…",
|
|
47
57
|
"chat.retrying": "Retrying",
|
|
48
58
|
"chat.history_load_failed": "Could not load history",
|
|
49
59
|
"chat.history_start": "No more history",
|
|
@@ -72,6 +82,8 @@ const I18n = (() => {
|
|
|
72
82
|
"sessions.search.byName": "Title matches ({{n}})",
|
|
73
83
|
"sessions.search.byContent": "Content matches ({{n}})",
|
|
74
84
|
"sessions.search.contentEmpty": "No content matches",
|
|
85
|
+
"sessions.search.hint": "Type to search your sessions by title or content.",
|
|
86
|
+
"sessions.search.loading": "Searching…",
|
|
75
87
|
"sessions.meta": "{{tasks}} tasks · ${{cost}}",
|
|
76
88
|
"sessions.metaTasks": "{{n}} tasks",
|
|
77
89
|
"sessions.deleteTitle": "Delete session",
|
|
@@ -85,6 +97,7 @@ const I18n = (() => {
|
|
|
85
97
|
"sib.dir.tooltip": "Click to change directory",
|
|
86
98
|
"sib.dir.changePrompt": "Change working directory",
|
|
87
99
|
"sib.dir.home": "Home",
|
|
100
|
+
"sib.dir.up": "Up",
|
|
88
101
|
"sib.dir.root": "Root",
|
|
89
102
|
"sib.dir.default": "Default workspace",
|
|
90
103
|
"sib.dir.current": "Current workspace", "sib.dir.inputPlaceholder": "Type or select a directory path",
|
|
@@ -92,7 +105,8 @@ const I18n = (() => {
|
|
|
92
105
|
"sib.dir.empty": "Empty directory",
|
|
93
106
|
"sib.dir.loadError": "Failed to load",
|
|
94
107
|
"sib.dir.confirm": "Confirm",
|
|
95
|
-
"sib.dir.cancel": "Cancel",
|
|
108
|
+
"sib.dir.cancel": "Cancel",
|
|
109
|
+
"sib.dir.showHidden": "Show hidden files", "workspace.title": "Workspace",
|
|
96
110
|
"workspace.expand": "Open workspace",
|
|
97
111
|
"workspace.collapse": "Collapse workspace",
|
|
98
112
|
"workspace.refresh": "Refresh",
|
|
@@ -160,6 +174,8 @@ const I18n = (() => {
|
|
|
160
174
|
"sessions.modal.model": "Model",
|
|
161
175
|
"sessions.modal.directory": "Working Directory",
|
|
162
176
|
"sessions.modal.directory.placeholder": "~/clacky_workspace",
|
|
177
|
+
"sessions.modal.directory.browse": "Browse folders",
|
|
178
|
+
"sessions.modal.dirpicker.title": "Select Working Directory",
|
|
163
179
|
"sessions.modal.initProject": "Initialize full-stack project (/new)",
|
|
164
180
|
"sessions.modal.create": "Create Session",
|
|
165
181
|
|
|
@@ -205,6 +221,7 @@ const I18n = (() => {
|
|
|
205
221
|
"tasks.btn.edit": "Edit",
|
|
206
222
|
"tasks.btn.pause": "Pause",
|
|
207
223
|
"tasks.btn.resume": "Resume",
|
|
224
|
+
"tasks.btn.delete": "Delete",
|
|
208
225
|
"tasks.paused": "Paused",
|
|
209
226
|
"tasks.toggleError": "Error updating task.",
|
|
210
227
|
"tasks.runError": "Error: ",
|
|
@@ -455,6 +472,13 @@ const I18n = (() => {
|
|
|
455
472
|
"channels.telegram.desc": "Connect via Telegram Bot API (HTTPS long-poll, token from @BotFather)",
|
|
456
473
|
"channels.dingtalk.desc": "Connect via DingTalk Stream Mode WebSocket",
|
|
457
474
|
|
|
475
|
+
"channels.section.connected": "Connected",
|
|
476
|
+
"channels.section.unconfigured": "Not Configured",
|
|
477
|
+
"channels.customDev.title": "Build Your Own Adapter",
|
|
478
|
+
"channels.customDev.desc": "Clacky's channel system has an open adapter interface. Implement a few methods and your IM platform gets first-class support — WebSocket connection, session binding, and Agent-powered chat.",
|
|
479
|
+
"channels.customDev.btn": "Develop with Agent",
|
|
480
|
+
"channels.customDev.prompt": "Read the documentation at https://www.openclacky.com/docs/extend-channel-adapter and help me develop a new IM adapter. Read the docs first to understand the adapter interface, then guide me through it.",
|
|
481
|
+
|
|
458
482
|
// ── MCP panel ──
|
|
459
483
|
"mcp.title": "MCP Servers",
|
|
460
484
|
"mcp.subtitle": "Standard Model Context Protocol servers (Claude Desktop / Cursor compatible). Edit ~/.clacky/mcp.json to add or remove servers.",
|
|
@@ -497,21 +521,21 @@ const I18n = (() => {
|
|
|
497
521
|
"settings.about.links": "Links",
|
|
498
522
|
"settings.about.website": "Website",
|
|
499
523
|
"settings.about.docs": "Documentation",
|
|
500
|
-
"settings.models.title": "
|
|
524
|
+
"settings.models.title": "Primary Model",
|
|
501
525
|
"settings.models.add": "+ Add Model",
|
|
502
526
|
"settings.models.loading": "Loading models…",
|
|
503
527
|
"settings.models.error": "Failed to load: {{msg}}",
|
|
504
528
|
"settings.models.empty": "No models configured. Click \"+ Add Model\" to add one.",
|
|
505
529
|
"settings.models.badge.default": "Default",
|
|
506
530
|
"settings.models.badge.lite": "Lite",
|
|
507
|
-
"settings.media.title": "
|
|
508
|
-
"settings.media.desc": "Optional. Image / video / audio /
|
|
531
|
+
"settings.media.title": "Secondary Models",
|
|
532
|
+
"settings.media.desc": "Optional. Image / video / audio / vision models.",
|
|
509
533
|
"settings.media.loading": "Loading…",
|
|
510
534
|
"settings.media.error": "Failed to load: {{msg}}",
|
|
511
535
|
"settings.media.kind.image": "Image",
|
|
512
536
|
"settings.media.kind.video": "Video",
|
|
513
537
|
"settings.media.kind.audio": "Audio",
|
|
514
|
-
"settings.media.kind.ocr": "
|
|
538
|
+
"settings.media.kind.ocr": "Vision",
|
|
515
539
|
"settings.media.source.off": "Off",
|
|
516
540
|
"settings.media.source.auto": "Auto",
|
|
517
541
|
"settings.media.source.custom": "Custom",
|
|
@@ -521,6 +545,7 @@ const I18n = (() => {
|
|
|
521
545
|
"settings.media.field.provider":"Provider",
|
|
522
546
|
"settings.media.off.hint": "Disabled.",
|
|
523
547
|
"settings.media.auto.followsDefault": "Auto-enabled via your default provider",
|
|
548
|
+
"settings.media.vision.primary": "Your default model supports vision — enabled automatically.",
|
|
524
549
|
"settings.media.auto.stale": "Selected model {{requested}} is unavailable on the current provider — using {{current}} instead.",
|
|
525
550
|
"settings.media.auto.noDefaultModel": "Set a default chat model first.",
|
|
526
551
|
"settings.media.auto.unsupported": "Current provider has no built-in model for this kind. Switch to Custom.",
|
|
@@ -588,15 +613,15 @@ const I18n = (() => {
|
|
|
588
613
|
"settings.models.confirmRemove": "Remove model \"{{model}}\"?",
|
|
589
614
|
"settings.personalize.title": "Personalize",
|
|
590
615
|
"settings.personalize.desc": "Re-run the onboarding to update your assistant's personality and user profile (SOUL.md & USER.md).",
|
|
591
|
-
"settings.personalize.btn": "
|
|
616
|
+
"settings.personalize.btn": "Re-run Onboard",
|
|
592
617
|
"settings.personalize.btn.starting": "Starting…",
|
|
593
|
-
"settings.personalize.btn.rerun": "
|
|
618
|
+
"settings.personalize.btn.rerun": "Re-run Onboard",
|
|
594
619
|
"settings.browser.title": "Browser",
|
|
595
620
|
"settings.browser.desc": "Connect your browser to enable browser automation.",
|
|
596
|
-
"settings.browser.configured": "
|
|
597
|
-
"settings.browser.disabled": "⏸
|
|
598
|
-
"settings.browser.btn": "
|
|
599
|
-
"settings.browser.btn.reconfigure": "
|
|
621
|
+
"settings.browser.configured": "Browser connected",
|
|
622
|
+
"settings.browser.disabled": "⏸Browser disabled",
|
|
623
|
+
"settings.browser.btn": "Configure Browser",
|
|
624
|
+
"settings.browser.btn.reconfigure": "Reconfigure Browser",
|
|
600
625
|
"settings.browser.btn.starting": "Starting…",
|
|
601
626
|
"settings.network.title": "Network",
|
|
602
627
|
"settings.network.desc": "Proxy is disabled by default. To enable, enter an HTTP/HTTPS proxy URL below (SOCKS5 is not supported).",
|
|
@@ -606,6 +631,16 @@ const I18n = (() => {
|
|
|
606
631
|
"settings.network.clear": "Clear",
|
|
607
632
|
"settings.network.cleared": "Cleared — direct connection",
|
|
608
633
|
"settings.network.invalidUrl": "Invalid URL — use http://host:port or http://user:pass@host:port",
|
|
634
|
+
"settings.backup.title": "Backup",
|
|
635
|
+
"settings.backup.desc": "Back up your ~/.clacky directory (config, skills, memories, tasks, sessions). Regenerable caches and logs are excluded.",
|
|
636
|
+
"settings.backup.includeSessions": "Include session history (larger archive)",
|
|
637
|
+
"settings.backup.autoLabel": "Automatic backup",
|
|
638
|
+
"settings.backup.autoHint": "Daily at 03:00, keeps the latest 7",
|
|
639
|
+
"settings.backup.runNow": "Download backup",
|
|
640
|
+
"settings.backup.running": "Preparing backup…",
|
|
641
|
+
"settings.backup.downloaded": "Backup downloaded.",
|
|
642
|
+
"settings.backup.lastOk": "Last backup: {{time}}",
|
|
643
|
+
"settings.backup.lastError": "Backup failed: {{msg}}",
|
|
609
644
|
"settings.brand.title": "Brand & License",
|
|
610
645
|
"settings.brand.label.brand": "Brand",
|
|
611
646
|
"settings.brand.label.status": "Status",
|
|
@@ -670,6 +705,23 @@ const I18n = (() => {
|
|
|
670
705
|
"onboard.key.docsGuide.cta": "See the guide →",
|
|
671
706
|
"onboard.key.btn.test": "Test & Continue →",
|
|
672
707
|
"onboard.key.btn.back": "← Back",
|
|
708
|
+
"onboard.device.card.title": "OpenClacky AI Keys",
|
|
709
|
+
"onboard.device.card.lead": "Sign up and get $1 free credit · no subscription · pay as you go",
|
|
710
|
+
"onboard.device.card.point1": "One key for all frontier models — Claude, Gemini, DeepSeek & more",
|
|
711
|
+
"onboard.device.card.point2": "Same pricing as official APIs, switch models instantly",
|
|
712
|
+
"onboard.device.btn": "Get started free →",
|
|
713
|
+
"onboard.device.pending": "Waiting for confirmation in your browser…",
|
|
714
|
+
"onboard.device.code": "Verification code:",
|
|
715
|
+
"onboard.device.reopen": "Open browser again →",
|
|
716
|
+
"onboard.device.cancel": "Cancel",
|
|
717
|
+
"onboard.device.success.title": "You're in!",
|
|
718
|
+
"onboard.device.success.lead": "Your account is connected. Here's what you got:",
|
|
719
|
+
"onboard.device.success.credit.label": "Free trial credit:",
|
|
720
|
+
"onboard.device.success.credit.value": "$1.00 (one-time, on us)",
|
|
721
|
+
"onboard.device.success.model.label": "Trial model:",
|
|
722
|
+
"onboard.device.success.note": "During the trial only Gemini 3.5 Flash is available — top up any amount to unlock all frontier models on this same key.",
|
|
723
|
+
"onboard.device.success.btn": "Start using Clacky →",
|
|
724
|
+
"onboard.manual.toggle": "Configure manually with your own API key",
|
|
673
725
|
"onboard.provider.custom": "Custom",
|
|
674
726
|
"provider.recommended": "Recommended",
|
|
675
727
|
"provider.promo.openclacky.title": "OpenClacky AI Keys",
|
|
@@ -706,6 +758,7 @@ const I18n = (() => {
|
|
|
706
758
|
"brand.banner.freePromptBoth": "Welcome to {{name}} — {{free}} free skill{{freePlural}} ready to use, plus {{paid}} premium skill{{paidPlural}} unlockable with a serial number.",
|
|
707
759
|
|
|
708
760
|
"header.owner.tooltip": "Creator — click to open Creator Hub",
|
|
761
|
+
"header.cmdbar.placeholder": "Search sessions…",
|
|
709
762
|
"notify.tooltip.on": "Sound on task complete: ON (click to mute)",
|
|
710
763
|
"notify.tooltip.off": "Sound on task complete: OFF (click to enable)",
|
|
711
764
|
|
|
@@ -777,6 +830,17 @@ const I18n = (() => {
|
|
|
777
830
|
"sib.bench.done": "done in {{t}}s",
|
|
778
831
|
"sib.bench.failed": "failed: {{msg}}",
|
|
779
832
|
"sib.bench.latencyTooltip": "TTFT {{ttft}} · tested {{time}}",
|
|
833
|
+
"sib.vision.ok": "vision",
|
|
834
|
+
"sib.vision.missing": "no vision",
|
|
835
|
+
"sib.vision.okTip": "This model can read images.",
|
|
836
|
+
"sib.vision.missingTip": "This model can't read images. Configure a vision model in Settings.",
|
|
837
|
+
"sib.gen.title": "Generation",
|
|
838
|
+
"sib.gen.config": "Configure",
|
|
839
|
+
"sib.gen.kind.image": "Image",
|
|
840
|
+
"sib.gen.kind.video": "Video",
|
|
841
|
+
"sib.gen.kind.audio": "Audio",
|
|
842
|
+
"sib.gen.okTip": "Configured: {{model}}",
|
|
843
|
+
"sib.gen.offTip": "Not configured — click to set up in Settings.",
|
|
780
844
|
|
|
781
845
|
"onboard.welcome": "Welcome to {{name}}",
|
|
782
846
|
|
|
@@ -849,9 +913,18 @@ const I18n = (() => {
|
|
|
849
913
|
"sidebar.billing": "用量信息",
|
|
850
914
|
|
|
851
915
|
// ── Welcome screen ──
|
|
852
|
-
"welcome.title": "
|
|
853
|
-
"welcome.body": "
|
|
854
|
-
"welcome.btn": "
|
|
916
|
+
"welcome.title": "今天想做点什么?",
|
|
917
|
+
"welcome.body": "Agent 已就绪。选一个起点,或者直接开始输入。",
|
|
918
|
+
"welcome.btn": "新建空白会话",
|
|
919
|
+
"welcome.chip.code.title": "写代码",
|
|
920
|
+
"welcome.chip.code.desc": "开发、重构、调试",
|
|
921
|
+
"welcome.chip.code.prompt": "帮我写一段代码:",
|
|
922
|
+
"welcome.chip.task.title": "自动化任务",
|
|
923
|
+
"welcome.chip.task.desc": "定时、执行、重复",
|
|
924
|
+
"welcome.chip.task.prompt": "我想把一个重复性任务自动化:",
|
|
925
|
+
"welcome.chip.research.title": "做调研",
|
|
926
|
+
"welcome.chip.research.desc": "搜索、阅读、汇总",
|
|
927
|
+
"welcome.chip.research.prompt":"帮我调研一下:",
|
|
855
928
|
|
|
856
929
|
// ── Chat panel ──
|
|
857
930
|
"chat.status.idle": "空闲",
|
|
@@ -863,6 +936,7 @@ const I18n = (() => {
|
|
|
863
936
|
"chat.input.placeholderRunningMobile": "可输入补充消息…",
|
|
864
937
|
"chat.btn.send": "发送",
|
|
865
938
|
"chat.thinking": "思考中…",
|
|
939
|
+
"chat.vision": "识别图片内容…",
|
|
866
940
|
"chat.retrying": "正在重试",
|
|
867
941
|
"chat.history_load_failed": "历史记录加载失败",
|
|
868
942
|
"chat.history_start": "没有更多历史了",
|
|
@@ -889,6 +963,8 @@ const I18n = (() => {
|
|
|
889
963
|
"sessions.search.byName": "标题匹配 ({{n}})",
|
|
890
964
|
"sessions.search.byContent": "内容匹配 ({{n}})",
|
|
891
965
|
"sessions.search.contentEmpty": "没有内容匹配",
|
|
966
|
+
"sessions.search.hint": "输入关键词,按标题或内容搜索会话。",
|
|
967
|
+
"sessions.search.loading": "正在搜索…",
|
|
892
968
|
"sessions.meta": "{{tasks}} 个任务 · ${{cost}}",
|
|
893
969
|
"sessions.metaTasks": "{{n}} 个任务",
|
|
894
970
|
"sessions.deleteTitle": "删除会话",
|
|
@@ -902,6 +978,7 @@ const I18n = (() => {
|
|
|
902
978
|
"sib.dir.tooltip": "点击切换工作目录",
|
|
903
979
|
"sib.dir.changePrompt": "切换工作目录",
|
|
904
980
|
"sib.dir.home": "主目录",
|
|
981
|
+
"sib.dir.up": "上一级",
|
|
905
982
|
"sib.dir.root": "根目录",
|
|
906
983
|
"sib.dir.default": "默认工作目录",
|
|
907
984
|
"sib.dir.current": "当前工作目录", "sib.dir.inputPlaceholder": "输入或选择目录路径",
|
|
@@ -909,7 +986,8 @@ const I18n = (() => {
|
|
|
909
986
|
"sib.dir.empty": "空目录",
|
|
910
987
|
"sib.dir.loadError": "加载失败",
|
|
911
988
|
"sib.dir.confirm": "确认",
|
|
912
|
-
"sib.dir.cancel": "取消",
|
|
989
|
+
"sib.dir.cancel": "取消",
|
|
990
|
+
"sib.dir.showHidden": "显示隐藏文件", "workspace.title": "工作区",
|
|
913
991
|
"workspace.expand": "打开工作区",
|
|
914
992
|
"workspace.collapse": "收起工作区",
|
|
915
993
|
"workspace.refresh": "刷新",
|
|
@@ -975,6 +1053,8 @@ const I18n = (() => {
|
|
|
975
1053
|
"sessions.modal.model": "模型",
|
|
976
1054
|
"sessions.modal.directory": "工作目录",
|
|
977
1055
|
"sessions.modal.directory.placeholder": "~/clacky_workspace",
|
|
1056
|
+
"sessions.modal.directory.browse": "选择文件夹",
|
|
1057
|
+
"sessions.modal.dirpicker.title": "选择工作目录",
|
|
978
1058
|
"sessions.modal.initProject": "初始化全栈项目 (/new)",
|
|
979
1059
|
"sessions.modal.create": "创建会话",
|
|
980
1060
|
|
|
@@ -1020,6 +1100,7 @@ const I18n = (() => {
|
|
|
1020
1100
|
"tasks.btn.edit": "编辑",
|
|
1021
1101
|
"tasks.btn.pause": "暂停",
|
|
1022
1102
|
"tasks.btn.resume": "启用",
|
|
1103
|
+
"tasks.btn.delete": "删除",
|
|
1023
1104
|
"tasks.paused": "已暂停",
|
|
1024
1105
|
"tasks.toggleError": "更新任务失败。",
|
|
1025
1106
|
"tasks.runError": "错误:",
|
|
@@ -1271,6 +1352,13 @@ const I18n = (() => {
|
|
|
1271
1352
|
"channels.telegram.desc": "通过 Telegram Bot API 接入(HTTPS 长轮询,token 来自 @BotFather)",
|
|
1272
1353
|
"channels.dingtalk.desc": "通过钉钉 Stream 模式 WebSocket 接入",
|
|
1273
1354
|
|
|
1355
|
+
"channels.section.connected": "已连接",
|
|
1356
|
+
"channels.section.unconfigured": "未配置",
|
|
1357
|
+
"channels.customDev.title": "开发自己的适配器",
|
|
1358
|
+
"channels.customDev.desc": "Clacky 频道系统提供开放的适配器接口,只需实现几个方法,你的 IM 平台就能获得完整支持——WebSocket 长连接、会话绑定、Agent 智能对话。",
|
|
1359
|
+
"channels.customDev.btn": "用 Agent 开发",
|
|
1360
|
+
"channels.customDev.prompt": "参考 https://www.openclacky.com/docs/extend-channel-adapter 这篇文档,帮我开发一个新的 IM 适配器。请先读取这篇文档了解适配器的接口规范,然后引导我完成开发。",
|
|
1361
|
+
|
|
1274
1362
|
// ── MCP panel ──
|
|
1275
1363
|
"mcp.title": "MCP 工具",
|
|
1276
1364
|
"mcp.subtitle": "标准 Model Context Protocol 服务(与 Claude Desktop / Cursor 兼容)。编辑 ~/.clacky/mcp.json 添加或移除服务。",
|
|
@@ -1313,21 +1401,21 @@ const I18n = (() => {
|
|
|
1313
1401
|
"settings.about.links": "链接",
|
|
1314
1402
|
"settings.about.website": "官网",
|
|
1315
1403
|
"settings.about.docs": "文档",
|
|
1316
|
-
"settings.models.title": "
|
|
1404
|
+
"settings.models.title": "配置主模型",
|
|
1317
1405
|
"settings.models.add": "+ 添加模型",
|
|
1318
1406
|
"settings.models.loading": "加载模型中…",
|
|
1319
1407
|
"settings.models.error": "加载失败:{{msg}}",
|
|
1320
1408
|
"settings.models.empty": "暂未配置模型,点击「+ 添加模型」添加。",
|
|
1321
1409
|
"settings.models.badge.default": "默认",
|
|
1322
1410
|
"settings.models.badge.lite": "轻量",
|
|
1323
|
-
"settings.media.title": "
|
|
1324
|
-
"settings.media.desc": "
|
|
1411
|
+
"settings.media.title": "配置副模型",
|
|
1412
|
+
"settings.media.desc": "可选。图片生成 / 视频生成 / 音频生成 / 视觉理解。",
|
|
1325
1413
|
"settings.media.loading": "加载中…",
|
|
1326
1414
|
"settings.media.error": "加载失败:{{msg}}",
|
|
1327
|
-
"settings.media.kind.image": "
|
|
1328
|
-
"settings.media.kind.video": "
|
|
1329
|
-
"settings.media.kind.audio": "
|
|
1330
|
-
"settings.media.kind.ocr": "
|
|
1415
|
+
"settings.media.kind.image": "图片生成",
|
|
1416
|
+
"settings.media.kind.video": "视频生成",
|
|
1417
|
+
"settings.media.kind.audio": "音频生成",
|
|
1418
|
+
"settings.media.kind.ocr": "视觉理解",
|
|
1331
1419
|
"settings.media.source.off": "关闭",
|
|
1332
1420
|
"settings.media.source.auto": "自动",
|
|
1333
1421
|
"settings.media.source.custom": "自定义",
|
|
@@ -1337,6 +1425,7 @@ const I18n = (() => {
|
|
|
1337
1425
|
"settings.media.field.provider":"服务商",
|
|
1338
1426
|
"settings.media.off.hint": "已关闭。",
|
|
1339
1427
|
"settings.media.auto.followsDefault": "该服务商已支持,已自动启用",
|
|
1428
|
+
"settings.media.vision.primary": "主模型已支持视觉,已自动启用",
|
|
1340
1429
|
"settings.media.auto.stale": "你选定的 {{requested}} 在当前服务商不可用,已临时使用 {{current}}。",
|
|
1341
1430
|
"settings.media.auto.noDefaultModel": "请先设置默认聊天模型。",
|
|
1342
1431
|
"settings.media.auto.unsupported": "当前服务商无内置模型,请切换到「自定义」。",
|
|
@@ -1404,15 +1493,15 @@ const I18n = (() => {
|
|
|
1404
1493
|
"settings.models.confirmRemove": "删除模型「{{model}}」?",
|
|
1405
1494
|
"settings.personalize.title": "个性化",
|
|
1406
1495
|
"settings.personalize.desc": "重新运行引导流程,更新助手的个性和用户档案(SOUL.md & USER.md)。",
|
|
1407
|
-
"settings.personalize.btn": "
|
|
1496
|
+
"settings.personalize.btn": "重新引导",
|
|
1408
1497
|
"settings.personalize.btn.starting": "启动中…",
|
|
1409
|
-
"settings.personalize.btn.rerun": "
|
|
1498
|
+
"settings.personalize.btn.rerun": "重新引导",
|
|
1410
1499
|
"settings.browser.title": "浏览器",
|
|
1411
1500
|
"settings.browser.desc": "连接浏览器以启用浏览器自动化功能。",
|
|
1412
|
-
"settings.browser.configured": "
|
|
1413
|
-
"settings.browser.disabled": "
|
|
1414
|
-
"settings.browser.btn": "
|
|
1415
|
-
"settings.browser.btn.reconfigure": "
|
|
1501
|
+
"settings.browser.configured": "浏览器已连接",
|
|
1502
|
+
"settings.browser.disabled": "⏸浏览器已禁用",
|
|
1503
|
+
"settings.browser.btn": "配置浏览器",
|
|
1504
|
+
"settings.browser.btn.reconfigure": "重新配置浏览器",
|
|
1416
1505
|
"settings.browser.btn.starting": "启动中…",
|
|
1417
1506
|
"settings.network.title": "网络",
|
|
1418
1507
|
"settings.network.desc": "默认不启用代理,如需启用,请填写 HTTP/HTTPS 代理地址(不支持 SOCKS5)。",
|
|
@@ -1422,6 +1511,16 @@ const I18n = (() => {
|
|
|
1422
1511
|
"settings.network.clear": "清除",
|
|
1423
1512
|
"settings.network.cleared": "已清除 — 直连",
|
|
1424
1513
|
"settings.network.invalidUrl": "地址格式不正确,请使用 http://host:port 或 http://user:pass@host:port",
|
|
1514
|
+
"settings.backup.title": "备份",
|
|
1515
|
+
"settings.backup.desc": "备份你的 ~/.clacky 目录(配置、技能、记忆、任务、会话)。可重新生成的缓存和日志会被排除。",
|
|
1516
|
+
"settings.backup.includeSessions": "包含会话历史(归档更大)",
|
|
1517
|
+
"settings.backup.autoLabel": "自动备份",
|
|
1518
|
+
"settings.backup.autoHint": "每天 03:00 自动备份,保留最近 7 份",
|
|
1519
|
+
"settings.backup.runNow": "下载备份",
|
|
1520
|
+
"settings.backup.running": "正在准备备份…",
|
|
1521
|
+
"settings.backup.downloaded": "备份已下载。",
|
|
1522
|
+
"settings.backup.lastOk": "上次备份:{{time}}",
|
|
1523
|
+
"settings.backup.lastError": "备份失败:{{msg}}",
|
|
1425
1524
|
"settings.brand.title": "品牌 & 授权",
|
|
1426
1525
|
"settings.brand.label.brand": "品牌",
|
|
1427
1526
|
"settings.brand.label.status": "状态",
|
|
@@ -1486,6 +1585,23 @@ const I18n = (() => {
|
|
|
1486
1585
|
"onboard.key.docsGuide.cta": "查看指南 →",
|
|
1487
1586
|
"onboard.key.btn.test": "测试并继续 →",
|
|
1488
1587
|
"onboard.key.btn.back": "← 返回",
|
|
1588
|
+
"onboard.device.card.title": "OpenClacky AI Keys",
|
|
1589
|
+
"onboard.device.card.lead": "注册即送 $1 额度 · 无需订阅 · 随用随充",
|
|
1590
|
+
"onboard.device.card.point1": "一个 Key 直通全球顶级模型 — Claude、Gemini、DeepSeek 等",
|
|
1591
|
+
"onboard.device.card.point2": "官方同价,模型随心切换,即开即用",
|
|
1592
|
+
"onboard.device.btn": "一键获取,免费开始 →",
|
|
1593
|
+
"onboard.device.pending": "正在等待浏览器中确认授权…",
|
|
1594
|
+
"onboard.device.code": "验证码:",
|
|
1595
|
+
"onboard.device.reopen": "重新打开浏览器 →",
|
|
1596
|
+
"onboard.device.cancel": "取消",
|
|
1597
|
+
"onboard.device.success.title": "登录成功!",
|
|
1598
|
+
"onboard.device.success.lead": "账户已连接。你已获得:",
|
|
1599
|
+
"onboard.device.success.credit.label": "免费试用额度:",
|
|
1600
|
+
"onboard.device.success.credit.value": "$1.00(一次性赠送)",
|
|
1601
|
+
"onboard.device.success.model.label": "试用模型:",
|
|
1602
|
+
"onboard.device.success.note": "试用期内仅可使用 Gemini 3.5 Flash —— 任意金额充值后,同一 Key 立即解锁全部前沿模型。",
|
|
1603
|
+
"onboard.device.success.btn": "开始使用",
|
|
1604
|
+
"onboard.manual.toggle": "使用自己的 API Key 手动配置",
|
|
1489
1605
|
"onboard.provider.custom": "自定义",
|
|
1490
1606
|
"provider.recommended": "推荐",
|
|
1491
1607
|
"provider.promo.openclacky.title": "推荐 OpenClacky AI Keys",
|
|
@@ -1522,6 +1638,7 @@ const I18n = (() => {
|
|
|
1522
1638
|
"brand.banner.freePromptBoth": "欢迎使用 {{name}} — 已自动安装 {{free}} 个免费技能,还有 {{paid}} 个增值技能可输入序列号解锁。",
|
|
1523
1639
|
|
|
1524
1640
|
"header.owner.tooltip": "创作者 — 点击进入创作者中心",
|
|
1641
|
+
"header.cmdbar.placeholder": "搜索会话…",
|
|
1525
1642
|
"notify.tooltip.on": "任务完成提示音:已开启(点击关闭)",
|
|
1526
1643
|
"notify.tooltip.off": "任务完成提示音:已关闭(点击开启)",
|
|
1527
1644
|
|
|
@@ -1593,6 +1710,17 @@ const I18n = (() => {
|
|
|
1593
1710
|
"sib.bench.done": "用时 {{t}} 秒",
|
|
1594
1711
|
"sib.bench.failed": "失败:{{msg}}",
|
|
1595
1712
|
"sib.bench.latencyTooltip": "TTFT {{ttft}} · 测试于 {{time}}",
|
|
1713
|
+
"sib.vision.ok": "可识图",
|
|
1714
|
+
"sib.vision.missing": "不可识图",
|
|
1715
|
+
"sib.vision.okTip": "当前模型可识别图片内容。",
|
|
1716
|
+
"sib.vision.missingTip": "当前模型不能识别图片,可在设置中配置视觉模型。",
|
|
1717
|
+
"sib.gen.title": "生成能力",
|
|
1718
|
+
"sib.gen.config": "去配置",
|
|
1719
|
+
"sib.gen.kind.image": "图片",
|
|
1720
|
+
"sib.gen.kind.video": "视频",
|
|
1721
|
+
"sib.gen.kind.audio": "音频",
|
|
1722
|
+
"sib.gen.okTip": "已配置:{{model}}",
|
|
1723
|
+
"sib.gen.offTip": "未配置 — 点击前往设置配置。",
|
|
1596
1724
|
|
|
1597
1725
|
"onboard.welcome": "欢迎使用 {{name}}",
|
|
1598
1726
|
|