codebee 0.1.18 → 0.1.20

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/app/ui/i18n.js CHANGED
@@ -172,6 +172,9 @@
172
172
  "执行结果": "Execution result",
173
173
  "执行者": "Executor",
174
174
  "未知状态": "Unknown status",
175
+ "语音输入(口述转文字填入输入框)": "Voice input (dictate into the box)",
176
+ "语音输入": "Voice input",
177
+ "语音不可用,请检查麦克风权限": "Voice unavailable — check microphone permission",
175
178
  "发送": "Send",
176
179
  "继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)": "Keep typing… (Enter to send, Shift+Enter for a new line; paste screenshots directly)",
177
180
  "成果": "Results",
@@ -432,10 +435,7 @@
432
435
  "知识库": "Knowledge base",
433
436
  "新建条目": "New entry",
434
437
  "运行产出自动整理成的可复用知识:": "Reusable knowledge distilled from run outputs:",
435
- "自动提炼(草稿)": "auto-distilled (draft)",
436
- "——每次任务结束由编排者从产出材料里提炼知识条目,你确认「转正」后才参与注入;": "— after each run the orchestrator distills knowledge entries from output material; they join prompt injection only after you approve them;",
437
- "手动新建(直接转正)": "manually created (approved)",
438
- "——也是你自己的知识管理库。转正条目按任务类型与相关性自动注入同类任务的规划与评审提示词。": "— doubles as your personal knowledge base. Approved entries are injected by task type and relevance into planning/review prompts of similar tasks.",
438
+ "任务结束由编排者从产出材料自动提炼,默认直接转正参与注入;也可以手动新建——同时是你自己的知识管理库。条目按任务类型与相关性自动注入同类任务的规划与评审提示词。": "After each run the orchestrator distills knowledge from output material — approved by default and injected right away. You can also create entries manually: this doubles as your personal knowledge base. Entries are injected by task type and relevance into planning/review prompts of similar tasks.",
439
439
  "搜索标题 / 正文 / 标签": "Search title / body / tags",
440
440
  "知识条目": "Knowledge entries",
441
441
  "全部标签": "All tags",
@@ -457,7 +457,7 @@
457
457
  "例:番茄, 签约": "e.g. fanqie, signing",
458
458
  "适用范围(任务类型,* 为通用)": "Scope (task type; * = general)",
459
459
  "标题与正文不能为空": "Title and body are required",
460
- "还没有知识条目——完成一次产出型任务后自动提炼(草稿态待转正),也可以点右上角手动新建。": "No entries yet — finish an output-producing task and entries are auto-distilled (drafts awaiting approval), or create one manually.",
460
+ "还没有知识条目——完成一次产出型任务后自动提炼并直接转正,也可以点右上角手动新建。": "No entries yet — finish an output-producing task and entries are distilled and approved automatically, or create one manually.",
461
461
  "(暂无)": "(none)",
462
462
  "皮肤": "Skins",
463
463
  "手机连接": "Phone link",
@@ -576,6 +576,8 @@
576
576
  "归档": "Archive",
577
577
  "重命名任务": "Rename task",
578
578
  "↻ 继续任务": "↻ Resume task",
579
+ "↻ 重写未达标章": "↻ Rewrite unqualified chapters",
580
+ "只重写上一遍未过线的章节,已过线章节沿用成稿与评分": "Rewrites only the chapters that missed the threshold last run; passing chapters keep their drafts and scores.",
579
581
  "再跑一次这个任务;连载任务会断点续跑,已完成章节不重写": "Run this task again; serial novels resume from the breakpoint — finished chapters are kept.",
580
582
  "✎ 编辑重试": "✎ Edit & retry",
581
583
  "最近使用的文件夹": "Recent folders",
@@ -759,6 +761,7 @@
759
761
  "手动:自行指定实现者与评审组": "Manual: pick implementer and reviewers yourself",
760
762
  "代码引擎": "Code engine",
761
763
  "评审引擎": "Review engine",
764
+ "直连引擎": "Direct engine",
762
765
  "实现 → 验证 → 评审": "Implement → verify → review",
763
766
  "起草 → 多维评审 → 门禁": "Draft → multi-dim review → gate",
764
767
  "大纲 → 逐章起草评审 → 合并(可续跑)": "Outline → per-chapter draft & review → merge (resumable)",
@@ -813,9 +816,9 @@
813
816
  "日志读取失败:": "Log read failed: ",
814
817
  "复制失败,请手动选择地址": "Copy failed, please select the URL manually",
815
818
  "确定执行安装?命令来自 data/catalog.json,可在管理页查看。": "Run install? The command comes from data/catalog.json and is shown on the management page.",
816
- "确定取消该运行?": "Cancel this run?",
819
+ "确定取消该运行?运行将立即强制终止。": "Cancel this run? It will be force-terminated immediately.",
817
820
  "取消失败:网络异常": "Cancel failed: network error",
818
- "已请求取消,运行将在当前调用停止后终止": "Cancel requested; the run will stop after the current call",
821
+ "已强制终止运行": "Run force-terminated",
819
822
  "该运行已结束,无需取消": "This run has already ended; nothing to cancel",
820
823
  "确定卸载 ": "Uninstall ",
821
824
  "新建自定义流程": "New custom flow",
@@ -958,7 +961,7 @@
958
961
  "启用中": "Enabled",
959
962
  "设为主模型": "Set as primary model",
960
963
  "单智能体直达(快)": "Single-agent direct (fast)",
961
- "抓七猫榜 → AI 选题洞察": "Scan Qimao rankings → AI topic insights",
964
+ "抓双平台榜 → AI 选题洞察": "Scan dual-platform rankings → AI topic insights",
962
965
  "新增函数补用例": "Add tests for new functions",
963
966
  "同类加函数任务,只要verify_pass=false即不得因review_pass=true或高分判定通过;必须将verify失败原因作为修复输入。": "For similar add-a-function tasks, verify_pass=false blocks acceptance regardless of review_pass or high scores; the verify failure details are the input to the next fix.",
964
967
  "凡主角获取越权信息或关键证据(系统记录、录音、账目),必须当章或前文落实来源链(人脉、留底、委托调查),并让角色当场追问一句'东西哪来的';无来源的特权查询与来历不明的证据一律禁止上稿。": "Whenever the protagonist obtains privileged information or key evidence (system records, recordings, ledgers), establish the source chain in the same or an earlier chapter and have a character ask \"where did this come from\" on the spot; unsourced privileged queries and evidence of unknown origin are banned from the manuscript.",
@@ -1910,7 +1913,7 @@
1910
1913
  "仓库·基线分支": " repo · base branch",
1911
1914
  "仓库·验证命令": " repo · verify cmd",
1912
1915
  "仓库·一句话描述": " repo · one-line hint",
1913
- "空 = 不用该端": "blank = unused side",
1916
+ "空 = 用默认保存路径": "blank = use the default save path",
1914
1917
  "如 main;空 = 直接改工作目录": "e.g. main; blank = edit worktree directly",
1915
1918
  "如 npm test;空 = 靠评审把关": "e.g. npm test; blank = review-only gate",
1916
1919
  "给 AI 排查看,如:Vue3 管理台前端": "AI triage hint, e.g. Vue3 admin frontend",
@@ -1936,9 +1939,23 @@
1936
1939
  "还没有认领过 Bug——配置好连接与产品档案后点「立即扫描」。": "No bugs claimed yet — set up connection and product profiles, then click \"Scan Now\".",
1937
1940
  "还没有产品档案——点「+ 添加产品」,填产品 ID 与两端仓库。": "No product profiles yet — click \"+ Add product\" and fill the product ID and repos.",
1938
1941
  "先填产品 ID 再拉模块清单": "Fill the product ID before fetching modules",
1942
+ "先选产品再拉模块清单": "Pick a product before fetching modules",
1939
1943
  "拉取失败": "Fetch failed",
1940
1944
  "模块清单已拉到 ": "Fetched ",
1941
1945
  " 条,输入框可下拉选择": " modules — pick from the dropdown",
1946
+ "拉取清单": "Fetch lists",
1947
+ "从禅道拉产品与账号清单:产品 ID、负责人变下拉选择(需连接可用)": "Fetch product & account lists from ZenTao: product IDs and owners become dropdowns (requires a working connection)",
1948
+ "配好连接后点「拉取清单」变下拉选择": "Once connected, click \"Fetch lists\" to get a dropdown",
1949
+ "(手填)": " (manual)",
1950
+ "— 选产品 —": "— Pick a product —",
1951
+ "(已关闭)": " (closed)",
1952
+ "已拉到 ": "Fetched ",
1953
+ "、": ", ",
1954
+ " 个产品": " products",
1955
+ " 个账号": " accounts",
1956
+ ",产品/负责人已是下拉选择": " — products/owners are now dropdowns",
1957
+ "拉取失败——先「测试连接」确认可用": "Fetch failed — run \"Test connection\" first",
1958
+ "地址已自动补全子路径,记得「保存配置」": "URL auto-completed with the subpath — remember to \"Save\"",
1942
1959
 
1943
1960
  // —— 发布上架链路(建书/发章/自动发布)——
1944
1961
  "连接平台": "Connect platform",
@@ -1953,6 +1970,15 @@
1953
1970
  "已开始探测,结果记录在发布台账(data/publish)里": "Probe started — results are recorded in the publish ledger (data/publish)",
1954
1971
  "dump 平台表单结构(校准自动填表用)": "Dump the platform form structure (for calibrating auto-fill)",
1955
1972
  "创建作品": "Create book",
1973
+ "登记已有作品": "Register existing book",
1974
+ "作品已在平台建好(建书流程没走通或手工建的)?补登记后直接发章,不会在平台新建": "Book already exists on the platform (auto-fill failed or created manually)? Register it to send chapters directly — nothing new is created",
1975
+ "若作品其实已在平台建好,点「登记已有作品」补登记,勿重复创建": "If the book actually exists on the platform already, use \"Register existing book\" — don't create a duplicate",
1976
+ "平台上的作品名(必填)": "Book title on the platform (required)",
1977
+ "作品ID(选填,管理页URL里有)": "Book ID (optional, in the manage-page URL)",
1978
+ "确认登记": "Register",
1979
+ "请填写平台上的作品名": "Enter the book title as shown on the platform",
1980
+ "已登记,可直接发章": "Registered — you can send chapters now",
1981
+ "登记失败:": "Register failed: ",
1956
1982
  "已在此平台创建的作品": "Books already created on this platform",
1957
1983
  "已建书:": "Book created: ",
1958
1984
  "建书失败:": "Book creation failed: ",
@@ -2090,6 +2116,141 @@
2090
2116
  "把任务分支自动合并回基线分支(需配置基线分支;合并失败不 resolve 不转派,留人工)": "Auto-merge the task branch back into the baseline branch (baseline branch must be configured; if the merge fails it won't resolve or reassign — stays with a human)",
2091
2117
  "按下面的间隔定时扫描;关掉后仍可手动「立即扫描」": "Scan on the interval below; when off, \"Scan now\" still works manually",
2092
2118
  "帮助目录": "Help contents",
2119
+
2120
+ // —— 桌面蜜蜂 ——
2121
+ "桌面蜜蜂": "Desktop Bee",
2122
+ "在桌面角落养一只蜜蜂,实时汇报蜂群动态": "Keep a bee in a corner of your desktop that reports hive activity in real time",
2123
+ "常驻显示": "Always visible",
2124
+ "仅任务运行时出现": "Only when tasks run",
2125
+ "蜜蜂形象": "Bee look",
2126
+ "毛绒蜜蜂": "Plush Bee",
2127
+ "机械蜜蜂": "Robo Bee",
2128
+ "蜜蜂换好新装了": "The bee has a new look",
2129
+ "左键点蜜蜂打开 CodeBee,右键有菜单(可换形象),按住可拖动;蜜蜂跑在独立小进程里,关掉服务它会自己回巢。": "Left-click the bee to open CodeBee, right-click for a menu (switch looks included), drag to move it. The bee runs in its own tiny process and flies home when the service stops.",
2130
+ "蜜蜂已放出,就落在桌面右下角": "Bee released — it lands near the bottom-right of your desktop",
2131
+ "蜜蜂已回巢": "The bee has flown back to the hive",
2132
+ "显示模式": "Display mode",
2133
+
2134
+ // —— 群摘要蜜蜂坞(wxdigest)——
2135
+ "群摘要": "Group Digests",
2136
+ "启用定时扫描": "Enable scheduled scanning",
2137
+ "监控文件夹": "Watched folder",
2138
+ "间隔(分钟)": "Interval (min)",
2139
+ "窗口字数": "Window size (chars)",
2140
+ "保存设置": "Save settings",
2141
+ "浏览…": "Browse…",
2142
+ "把导出的群聊记录 txt 放进监控文件夹(文件名=群名,每条以「2024-01-01 12:34 发送者」开头),蜜蜂定时增量生成摘要。记录只存本地;摘要请求会发给当前绑定的模型,桌面小蜜蜂会提醒新摘要。": "Drop exported chat-record .txt files into the watched folder (file name = group name; each message starts with \"2024-01-01 12:34 Sender\") and the bee summarizes new messages on schedule. Records stay local; summary requests are sent to the currently bound model, and the desktop bee will notify you of new digests.",
2143
+ "嗡!新群摘要好了:": "Buzz! New digests are ready: ",
2144
+ "上次扫描:": "Last scan: ",
2145
+ "下次:": "Next: ",
2146
+ "未配置可用模型,请先到「绑定」页设置": "No usable model configured — set one up on the Bindings page first",
2147
+ "还没有摘要": "No digests yet",
2148
+ " 条": " msg(s)",
2149
+ "群摘要设置已保存": "Digest settings saved",
2150
+ "保存失败:": "Save failed: ",
2151
+ "扫描完成,生成": "Scan finished — ",
2152
+ " 条新摘要": " new digest(s)",
2153
+ "扫描完成,暂无新内容": "Scan finished — nothing new",
2154
+ "扫描有问题:": "Scan issue: ",
2155
+ "扫描失败:": "Scan failed: ",
2156
+
2157
+ // —— 群摘要·微信直连(wx_reader sidecar)——
2158
+ "从本机微信自动拉取(微信直连)": "Pull automatically from local WeChat (direct connection)",
2159
+ "64 位 Python 路径(需装 wechatauto-replica)": "64-bit Python path (with wechatauto-replica installed)",
2160
+ "例如 C:\\Users\\HP\\anaconda3\\envs\\wxprobe\\python.exe": "e.g. C:\\Users\\HP\\anaconda3\\envs\\wxprobe\\python.exe",
2161
+ "选择要监听的群({0})": "Pick groups to watch ({0})",
2162
+ "刷新群列表": "Refresh group list",
2163
+ "搜索群名": "Search group name",
2164
+ "群列表为空,点「刷新群列表」": "Group list is empty — click \"Refresh group list\"",
2165
+ "没有匹配的群": "No matching groups",
2166
+ "刷新中…": "Refreshing…",
2167
+ "群列表已更新:": "Group list updated: ",
2168
+ "刷新失败:": "Refresh failed: ",
2169
+ "转知识库": "To Knowledge Base",
2170
+ "已转入": "Saved",
2171
+ "已转入知识库(草稿态,转正后才会注入任务提示词)": "Saved to the knowledge base (draft — it won't feed task prompts until approved)",
2172
+ "转入失败:": "Save to knowledge base failed: ",
2173
+
2174
+ // —— 数据与备份(导出/导入/每日清理)——
2175
+ "数据": "Data",
2176
+ "数据与备份": "Data & Backup",
2177
+ "备份与搬家": "Backup & Migration",
2178
+ "换电脑或换路径安装时,把全部数据打包带走:模型/密钥/绑定等全部配置、任务与运行记录、经验库、知识库、发布台账,以及各任务工作目录里的手稿与成品文件。导入时自动把旧机器的路径改写成新机器的路径。": "Moving to a new computer or a new install path? Take everything with you: all configuration (models, keys, bindings), task and run history, the experience base, knowledge base, publishing ledger, plus the manuscripts and output files inside every task workspace. On import, old machine paths are rewritten to the new ones automatically.",
2179
+ "注意:备份包含 API 密钥,请妥善保管;发布平台的浏览器登录态不在备份里(体积 GB 级),导入后发布时需重新扫码。不在默认保存路径下的外部目录(如单独指定的代码仓库)不会打包,导入后会在预览里点名提醒。": "Note: the backup contains your API keys — keep it safe. Publishing-platform browser sessions are not included (GB-scale); you'll need to re-scan the QR code after importing. External directories outside the default save path (e.g. separately chosen code repos) are not packed; the import preview will name them.",
2180
+ "导出位置(默认「下载」文件夹)": "Export location (defaults to Downloads)",
2181
+ "默认保存到「下载」文件夹": "Saved to your Downloads folder by default",
2182
+ "导出全部数据": "Export all data",
2183
+ "包含运行过程日志(备份更大,但历史日志可完整回看)": "Include run process logs (bigger backup, but full history stays reviewable)",
2184
+ "正在打包…": "Packing…",
2185
+ "已导出": "Exported",
2186
+ "以下外部目录不在备份里,需自行拷贝:": "These external directories are not in the backup — copy them yourself: ",
2187
+ "复制路径": "Copy path",
2188
+ "恢复(导入备份包)": "Restore (import a backup)",
2189
+ "选择之前导出的备份包,先预览确认再导入。导入会覆盖同名任务与配置;当前数据会先自动备份一份到数据目录 imports/ 下,导入后需重启服务生效。": "Pick a previously exported backup, preview it, then import. Import overwrites tasks and settings with the same names; your current data is auto-backed-up into imports/ inside the data directory first. Restart the service afterwards to make everything take effect.",
2190
+ "备份包 zip 路径": "Backup zip path",
2191
+ "选择备份包…": "Choose backup…",
2192
+ "选择备份包": "Choose backup",
2193
+ "导入方式": "Import mode",
2194
+ "合并导入": "Merge",
2195
+ "替换导入": "Replace",
2196
+ "合并导入:保留本机现有数据,备份包里的同名条目覆盖进来。替换导入:先清空本机数据目录再整体落入(宠物锁与历史导入备份除外)——只在想把新机器变成备份包原样时使用。": "Merge: keep local data, overlay same-name items from the backup. Replace: wipe the local data directory first, then restore the backup as-is (pet lock and past import backups excepted) — only use this to make this machine exactly match the backup.",
2197
+ "路径重映射(换电脑/换路径时把旧路径改写为新路径,推荐开启)": "Path remap (rewrite old paths to the new machine/path — recommended)",
2198
+ "确认导入": "Import now",
2199
+ "重启服务生效": "Restart to apply",
2200
+ "每日清理": "Daily cleanup",
2201
+ "每天自动清理运行过程日志、发布截图、配置备份残留等可再生数据(保留运行记录与结果报告),防止磁盘越积越满。手稿、任务记录、经验库等用户数据永不清理。": "Once a day, automatically clear regenerable clutter — run process logs, publishing screenshots, leftover config backups — while keeping run records and result reports, so the disk doesn't fill up. Manuscripts, task records, the experience base and other user data are never touched.",
2202
+ "启用每日自动清理": "Enable daily automatic cleanup",
2203
+ "保留天数": "Retention (days)",
2204
+ "立即清理": "Clean up now",
2205
+ "清理发布浏览器缓存(需重新扫码登录)": "Clear publishing browser cache (requires QR re-login)",
2206
+ "尚未清理过(每天自动一次)": "Never cleaned yet (runs once a day automatically)",
2207
+ "上次清理:": "Last cleanup: ",
2208
+ "释放": "freed ",
2209
+ "有": " ",
2210
+ "项被占用跳过": " item(s) skipped (in use)",
2211
+ "没有可清理的垃圾,很干净": "Nothing to clean — all tidy",
2212
+ "共可释放约": "Can free about ",
2213
+ "请先选择备份包": "Choose a backup zip first",
2214
+ "正在读取备份包…": "Reading backup…",
2215
+ "备份时间": "Backup time",
2216
+ "数据文件": "Data files",
2217
+ "工作目录文件": "Workspace files",
2218
+ "备份不含运行过程日志": "Backup has no run process logs",
2219
+ "路径重映射": "Path remap",
2220
+ "有任务正在运行或排队,先等它们结束再导入": "Tasks are running or queued — wait for them to finish before importing",
2221
+ "替换导入会先清空本机数据目录,再整体落入备份内容(当前数据已自动留了反悔备份)。确定继续?": "Replace-import wipes the local data directory first, then restores the backup wholesale (a regret backup of current data is saved automatically). Continue?",
2222
+ "确认导入该备份包?同名任务与配置将被覆盖。": "Import this backup? Tasks and settings with the same names will be overwritten.",
2223
+ "正在导入…": "Importing…",
2224
+ "替换导入完成": "Replace-import finished",
2225
+ "合并导入完成": "Merge-import finished",
2226
+ "已重映射": "remapped paths in",
2227
+ "个文件中的": "files —",
2228
+ "处路径": "spot(s)",
2229
+ "导入前的本机数据备份在": "Pre-import backup of local data: ",
2230
+ "请重启服务使导入的数据全部生效": "Please restart the service so imported data fully takes effect",
2231
+ "清理设置已保存": "Cleanup settings saved",
2232
+ "清理完成,释放": "Cleanup done, freed ",
2233
+ "清理发布浏览器缓存会丢失平台登录态,下次发布需要重新扫码。确定清理?": "Clearing the publishing browser cache loses platform logins — you'll need to re-scan the QR code next time. Clear it?",
2234
+ "仍然清理": "Clear anyway",
2235
+ "正在清理…": "Cleaning…",
2236
+ "文件选择仅限本机使用,请手动输入路径": "File picking only works on this machine — type the path manually",
2237
+ "本机没有可用的文件选择器,请手动输入 zip 路径": "No native file picker available — type the zip path manually",
2238
+ "运行过程日志": "Run process logs",
2239
+ "发布截图": "Publishing screenshots",
2240
+ "配置备份残留": "Leftover config backups",
2241
+ "过期指挥信箱": "Stale steering mailboxes",
2242
+ "旧版浏览器缓存残留": "Legacy browser cache remains",
2243
+ "历史备份包": "Old backup archives",
2244
+ "服务日志瘦身": "Service log trim",
2245
+ "发布浏览器缓存": "Publishing browser cache",
2246
+ "保留运行记录与结果报告,只删过程中的原始日志": "Keeps run records and result reports; only raw process logs are deleted",
2247
+ "发布过程留档截图,超期即清": "Screenshots kept as publishing evidence, removed once expired",
2248
+ "改配置时自动留的 .bak 副本,超期即清": ".bak copies taken when configs changed, removed once expired",
2249
+ "已结束任务的运行中留言附件": "Attachments from in-run steering messages of finished runs",
2250
+ "发布浏览器 profile 已迁往用户主目录,旧位置属废弃残留": "Publishing browser profiles have moved to the user home; the old location is abandoned residue",
2251
+ "导出与导入前自动备份的旧 zip": "Old zips from exports and pre-import auto-backups",
2252
+ "只保留每个日志的末尾 1MB": "Keeps only the last 1MB of each log",
2253
+ "含平台登录态,清理后发布时需重新扫码登录": "Contains platform logins; re-scan the QR code to publish after clearing",
2093
2254
  };
2094
2255
 
2095
2256
  // ---------- 工具 ----------
package/app/ui/index.html CHANGED
@@ -188,6 +188,8 @@
188
188
  <button class="set-item" data-sub="knowledge" data-i18n="知识库"><svg class="ico" aria-hidden="true"><use href="#i-sigma"></use></svg>知识库</button>
189
189
  <button class="set-item" data-sub="market" data-i18n="插件市场"><svg class="ico" aria-hidden="true"><use href="#i-blocks"></use></svg>插件市场</button>
190
190
  <button class="set-item" data-sub="orch" data-i18n="编排设置"><svg class="ico" aria-hidden="true"><use href="#i-workflow"></use></svg>编排设置</button>
191
+ <div data-i18n="数据" class="set-group">数据</div>
192
+ <button class="set-item" data-sub="data" data-i18n="数据与备份"><svg class="ico" aria-hidden="true"><use href="#i-library"></use></svg>数据与备份</button>
191
193
  <div data-i18n="外观" class="set-group">外观</div>
192
194
  <button class="set-item" data-sub="appearance" data-i18n="皮肤"><svg class="ico" aria-hidden="true"><use href="#i-palette"></use></svg>皮肤</button>
193
195
  <div data-i18n="软件" class="set-group">软件</div>
@@ -448,6 +450,7 @@
448
450
  <textarea id="rd-chat-input" rows="2" data-i18n-ph="继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)" placeholder="继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)"></textarea>
449
451
  <div class="rd-chat-tools">
450
452
  <button id="rd-chat-attach" class="ghost" data-i18n-title="添加附件" title="添加附件" data-i18n-aria="添加附件" aria-label="添加附件"><svg class="ico" aria-hidden="true"><use href="#i-plus"></use></svg></button>
453
+ <button id="rd-chat-voice" class="ghost hidden" data-i18n-title="语音输入(口述转文字填入输入框)" title="语音输入(口述转文字填入输入框)" data-i18n-aria="语音输入" aria-label="语音输入"><svg class="ico" aria-hidden="true"><use href="#i-mic"></use></svg></button>
451
454
  <span id="rd-chat-att-list" class="rd-att-list"></span>
452
455
  <span id="rd-chat-hint" class="rd-hint"></span>
453
456
  <button id="rd-chat-send" class="primary round" data-i18n-title="发送" title="发送" data-i18n-aria="发送" aria-label="发送"><svg class="ico" aria-hidden="true"><use href="#i-arrow-up"></use></svg></button>
@@ -555,7 +558,11 @@
555
558
  <h3 data-i18n="产品档案" class="sec-title">产品档案</h3>
556
559
  <p data-i18n="每个产品一份档案:我方端(自动修)、两端仓库与负责人、模块路由(模块 → 端/人,排查优先级最高)。" class="hint">每个产品一份档案:我方端(自动修)、两端仓库与负责人、模块路由(模块 → 端/人,排查优先级最高)。</p>
557
560
  <div id="zt-profiles" class="cards"></div>
558
- <div class="ops"><button id="btn-zentao-addprofile" class="ghost small"><span data-i18n="+ 添加产品">+ 添加产品</span></button></div>
561
+ <div class="ops">
562
+ <button id="btn-zentao-fetchcat" class="ghost small" title="从禅道拉产品与账号清单:产品 ID、负责人变下拉选择(需连接可用)" data-i18n-title="从禅道拉产品与账号清单:产品 ID、负责人变下拉选择(需连接可用)"><span data-i18n="拉取清单">拉取清单</span></button>
563
+ <button id="btn-zentao-addprofile" class="ghost small"><span data-i18n="+ 添加产品">+ 添加产品</span></button>
564
+ </div>
565
+ <datalist id="zt-users"></datalist>
559
566
  <h3 data-i18n="修复记录" class="sec-title">修复记录</h3>
560
567
  <div id="zentao-claims"></div>
561
568
  </div>
@@ -677,7 +684,7 @@
677
684
  <div class="panel wide">
678
685
  <div class="panel-head"><h2 data-i18n="知识库">知识库</h2>
679
686
  <button class="ghost small" onclick="kbFormOpen(null)"><svg class="ico" aria-hidden="true"><use href="#i-plus"></use></svg><span data-i18n="新建条目">新建条目</span></button></div>
680
- <p class="hint"><span data-i18n="运行产出自动整理成的可复用知识:">运行产出自动整理成的可复用知识:</span><b data-i18n="自动提炼(草稿)">自动提炼(草稿)</b><span data-i18n="——每次任务结束由编排者从产出材料里提炼知识条目,你确认「转正」后才参与注入;">——每次任务结束由编排者从产出材料里提炼知识条目,你确认「转正」后才参与注入;</span><b data-i18n="手动新建(直接转正)">手动新建(直接转正)</b><span data-i18n="——也是你自己的知识管理库。转正条目按任务类型与相关性自动注入同类任务的规划与评审提示词。">——也是你自己的知识管理库。转正条目按任务类型与相关性自动注入同类任务的规划与评审提示词。</span></p>
687
+ <p class="hint"><span data-i18n="运行产出自动整理成的可复用知识:">运行产出自动整理成的可复用知识:</span><span data-i18n="任务结束由编排者从产出材料自动提炼,默认直接转正参与注入;也可以手动新建——同时是你自己的知识管理库。条目按任务类型与相关性自动注入同类任务的规划与评审提示词。">任务结束由编排者从产出材料自动提炼,默认直接转正参与注入;也可以手动新建——同时是你自己的知识管理库。条目按任务类型与相关性自动注入同类任务的规划与评审提示词。</span></p>
681
688
  <div class="kb-toolbar">
682
689
  <input id="kb-search" data-i18n-ph="搜索标题 / 正文 / 标签" placeholder="搜索标题 / 正文 / 标签" oninput="kbSearch(this.value)">
683
690
  <div class="cat-chips" id="kb-status-chips"></div>
@@ -760,6 +767,66 @@
760
767
  </div>
761
768
  </div>
762
769
 
770
+ <!-- 数据与备份(导出/导入/每日清理) -->
771
+ <div id="sub-data" class="subpage hidden">
772
+ <div class="panel wide">
773
+ <div class="panel-head">
774
+ <h2 data-i18n="备份与搬家">备份与搬家</h2>
775
+ <button class="hhelp" data-help-topic="auto" title="这是什么?点开看帮助" data-i18n-title="这是什么?点开看帮助" aria-label="帮助" data-i18n-aria="帮助"><svg class="ico" aria-hidden="true"><use href="#i-help"></use></svg></button>
776
+ </div>
777
+ <p class="hint" data-i18n="换电脑或换路径安装时,把全部数据打包带走:模型/密钥/绑定等全部配置、任务与运行记录、经验库、知识库、发布台账,以及各任务工作目录里的手稿与成品文件。导入时自动把旧机器的路径改写成新机器的路径。">换电脑或换路径安装时,把全部数据打包带走:模型/密钥/绑定等全部配置、任务与运行记录、经验库、知识库、发布台账,以及各任务工作目录里的手稿与成品文件。导入时自动把旧机器的路径改写成新机器的路径。</p>
778
+ <p class="hint" data-i18n="注意:备份包含 API 密钥,请妥善保管;发布平台的浏览器登录态不在备份里(体积 GB 级),导入后发布时需重新扫码。不在默认保存路径下的外部目录(如单独指定的代码仓库)不会打包,导入后会在预览里点名提醒。">注意:备份包含 API 密钥,请妥善保管;发布平台的浏览器登录态不在备份里(体积 GB 级),导入后发布时需重新扫码。不在默认保存路径下的外部目录(如单独指定的代码仓库)不会打包,导入后会在预览里点名提醒。</p>
779
+ <div class="field">
780
+ <label data-i18n="导出位置(默认「下载」文件夹)">导出位置(默认「下载」文件夹)</label>
781
+ <div class="input-row">
782
+ <input id="bk-target" type="text" placeholder="默认保存到「下载」文件夹" data-i18n-ph="默认保存到「下载」文件夹">
783
+ <button class="ghost small" type="button" onclick="pickFolder('bk-target')" data-i18n="选择…">选择…</button>
784
+ <button id="bk-go" class="ghost small" type="button" onclick="exportBackup()"><svg class="ico" aria-hidden="true"><use href="#i-library"></use></svg><span data-i18n="导出全部数据">导出全部数据</span></button>
785
+ </div>
786
+ <label class="toggle" style="margin-top:6px"><input id="bk-logs" type="checkbox" checked> <span data-i18n="包含运行过程日志(备份更大,但历史日志可完整回看)">包含运行过程日志(备份更大,但历史日志可完整回看)</span></label>
787
+ <div id="bk-result" class="msg"></div>
788
+ </div>
789
+ </div>
790
+ <div class="panel wide">
791
+ <div class="panel-head"><h2 data-i18n="恢复(导入备份包)">恢复(导入备份包)</h2></div>
792
+ <p class="hint" data-i18n="选择之前导出的备份包,先预览确认再导入。导入会覆盖同名任务与配置;当前数据会先自动备份一份到数据目录 imports/ 下,导入后需重启服务生效。">选择之前导出的备份包,先预览确认再导入。导入会覆盖同名任务与配置;当前数据会先自动备份一份到数据目录 imports/ 下,导入后需重启服务生效。</p>
793
+ <div class="field">
794
+ <div class="input-row">
795
+ <input id="bi-path" type="text" placeholder="备份包 zip 路径" data-i18n-ph="备份包 zip 路径">
796
+ <button class="ghost small" type="button" onclick="pickBackupFile()" data-i18n="选择备份包…">选择备份包…</button>
797
+ <button id="bi-inspect" class="ghost small" type="button" onclick="inspectBackup()"><span data-i18n="预览">预览</span></button>
798
+ </div>
799
+ <div id="bi-mode" class="seg" style="margin-top:8px" role="group" aria-label="导入方式" data-i18n-aria="导入方式">
800
+ <button class="seg-btn active" data-bimode="merge" data-i18n="合并导入">合并导入</button>
801
+ <button class="seg-btn" data-bimode="replace" data-i18n="替换导入">替换导入</button>
802
+ </div>
803
+ <p class="hint" data-i18n="合并导入:保留本机现有数据,备份包里的同名条目覆盖进来。替换导入:先清空本机数据目录再整体落入(宠物锁与历史导入备份除外)——只在想把新机器变成备份包原样时使用。">合并导入:保留本机现有数据,备份包里的同名条目覆盖进来。替换导入:先清空本机数据目录再整体落入(宠物锁与历史导入备份除外)——只在想把新机器变成备份包原样时使用。</p>
804
+ <label class="toggle"><input id="bi-remap" type="checkbox" checked> <span data-i18n="路径重映射(换电脑/换路径时把旧路径改写为新路径,推荐开启)">路径重映射(换电脑/换路径时把旧路径改写为新路径,推荐开启)</span></label>
805
+ <div id="bi-preview" class="msg"></div>
806
+ <div class="input-row" style="margin-top:8px">
807
+ <button id="bi-apply" class="ghost small hidden" type="button" onclick="applyBackupImport()"><span data-i18n="确认导入">确认导入</span></button>
808
+ <button id="bi-restart" class="ghost small hidden" type="button" onclick="suRestart()"><span data-i18n="重启服务生效">重启服务生效</span></button>
809
+ </div>
810
+ </div>
811
+ </div>
812
+ <div class="panel wide">
813
+ <div class="panel-head"><h2 data-i18n="每日清理">每日清理</h2></div>
814
+ <p class="hint" data-i18n="每天自动清理运行过程日志、发布截图、配置备份残留等可再生数据(保留运行记录与结果报告),防止磁盘越积越满。手稿、任务记录、经验库等用户数据永不清理。">每天自动清理运行过程日志、发布截图、配置备份残留等可再生数据(保留运行记录与结果报告),防止磁盘越积越满。手稿、任务记录、经验库等用户数据永不清理。</p>
815
+ <label class="toggle"><input id="set-cleanup" type="checkbox"> <span data-i18n="启用每日自动清理">启用每日自动清理</span></label>
816
+ <div class="input-row" style="margin-top:6px">
817
+ <label data-i18n="保留天数">保留天数</label>
818
+ <input id="set-cleanup-days" type="number" min="1" max="365" style="width:80px">
819
+ <button class="ghost small" type="button" onclick="saveCleanupSettings()" data-i18n="保存">保存</button>
820
+ <button id="cl-run" class="ghost small" type="button" onclick="runCleanup(false)"><span data-i18n="立即清理">立即清理</span></button>
821
+ </div>
822
+ <div id="cl-state" class="hint"></div>
823
+ <div id="cl-plan"></div>
824
+ <div class="input-row" style="margin-top:8px">
825
+ <button class="ghost small" type="button" onclick="runCleanup(true)"><span data-i18n="清理发布浏览器缓存(需重新扫码登录)">清理发布浏览器缓存(需重新扫码登录)</span></button>
826
+ </div>
827
+ </div>
828
+ </div>
829
+
763
830
  <!-- 关于与更新(selfupdate) -->
764
831
  <div id="sub-about" class="subpage hidden">
765
832
  <div class="panel wide">
@@ -808,6 +875,17 @@
808
875
  </div>
809
876
  <h3 class="sec-title"><span data-i18n="皮肤">皮肤</span> <span class="tag" id="skin-cur"></span></h3>
810
877
  <div id="skin-grid" class="skin-grid"></div>
878
+ <h3 class="sec-title" data-i18n="桌面蜜蜂">桌面蜜蜂</h3>
879
+ <label class="toggle"><input id="set-pet" type="checkbox" onchange="savePet(this.checked)"> <span data-i18n="在桌面角落养一只蜜蜂,实时汇报蜂群动态">在桌面角落养一只蜜蜂,实时汇报蜂群动态</span></label>
880
+ <div id="pet-mode" class="seg" role="group" aria-label="显示模式" data-i18n-aria="显示模式">
881
+ <button class="seg-btn" data-pmode="always" data-i18n="常驻显示">常驻显示</button>
882
+ <button class="seg-btn" data-pmode="tasks_only" data-i18n="仅任务运行时出现">仅任务运行时出现</button>
883
+ </div>
884
+ <div id="pet-skin" class="seg" role="group" aria-label="蜜蜂形象" data-i18n-aria="蜜蜂形象">
885
+ <button class="seg-btn" data-pskin="plush" data-i18n="毛绒蜜蜂">毛绒蜜蜂</button>
886
+ <button class="seg-btn" data-pskin="robot" data-i18n="机械蜜蜂">机械蜜蜂</button>
887
+ </div>
888
+ <p class="hint" data-i18n="左键点蜜蜂打开 CodeBee,右键有菜单(可换形象),按住可拖动;蜜蜂跑在独立小进程里,关掉服务它会自己回巢。">左键点蜜蜂打开 CodeBee,右键有菜单(可换形象),按住可拖动;蜜蜂跑在独立小进程里,关掉服务它会自己回巢。</p>
811
889
  </div>
812
890
 
813
891
  <!-- 代码设置:主题/行号/换行/字号只管代码内容,存本设备(与皮肤同一套语汇) -->
@@ -1011,6 +1089,58 @@
1011
1089
  </div>
1012
1090
  </div>
1013
1091
 
1092
+ <!-- 群摘要蜜蜂坞(右下角悬浮蜜蜂):桌面蜜蜂 pet.py 的网页侧搭档。
1093
+ 未读摘要时徽章+气泡提醒,点开面板看各群摘要/配置监控文件夹;
1094
+ 未启用且无数据时整坞隐藏(不占视线)。后端 core/wxdigest.py。 -->
1095
+ <div id="bee-dock" class="hidden">
1096
+ <div id="bee-bubble" class="hidden"></div>
1097
+ <button id="bee-fab" aria-label="群摘要" data-i18n-aria="群摘要" data-i18n-title="群摘要" title="群摘要">
1098
+ <svg class="ico ico-lg" aria-hidden="true"><use href="#i-bee"></use></svg>
1099
+ <span id="bee-badge" class="hidden"></span>
1100
+ </button>
1101
+ </div>
1102
+ <div id="bee-panel" class="hidden" role="dialog" aria-label="群摘要" data-i18n-aria="群摘要">
1103
+ <div class="bee-head">
1104
+ <svg class="ico" aria-hidden="true"><use href="#i-bee"></use></svg>
1105
+ <b data-i18n="群摘要">群摘要</b>
1106
+ <span class="spacer"></span>
1107
+ <button id="bee-cfg-btn" class="icon-btn" aria-label="设置" data-i18n-aria="设置" data-i18n-title="设置" title="设置"><svg class="ico" aria-hidden="true"><use href="#i-gear"></use></svg></button>
1108
+ <button id="bee-scan-btn" class="icon-btn" aria-label="立即扫描" data-i18n-aria="立即扫描" data-i18n-title="立即扫描" title="立即扫描"><svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg></button>
1109
+ <button id="bee-x" class="icon-btn" aria-label="关闭" data-i18n-aria="关闭" data-i18n-title="关闭" title="关闭">✕</button>
1110
+ </div>
1111
+ <div id="bee-list" class="bee-list"></div>
1112
+ <div id="bee-cfg" class="bee-cfg hidden">
1113
+ <label class="toggle"><input id="bee-enabled" type="checkbox"> <span data-i18n="启用定时扫描">启用定时扫描</span></label>
1114
+ <label class="toggle"><input id="bee-reader" type="checkbox"> <span data-i18n="从本机微信自动拉取(微信直连)">从本机微信自动拉取(微信直连)</span></label>
1115
+ <div id="bee-reader-box" class="hidden">
1116
+ <span class="bee-lab" data-i18n="64 位 Python 路径(需装 wechatauto-replica)">64 位 Python 路径(需装 wechatauto-replica)</span>
1117
+ <input id="bee-reader-py" type="text" spellcheck="false" data-i18n-ph="例如 C:\Users\HP\anaconda3\envs\wxprobe\python.exe" placeholder="例如 C:\Users\HP\anaconda3\envs\wxprobe\python.exe">
1118
+ <div class="bee-dir-row">
1119
+ <button id="bee-groups-btn" class="ghost small" data-i18n="选择要监听的群(0)">选择要监听的群(0)</button>
1120
+ </div>
1121
+ <div id="bee-groups-box" class="hidden">
1122
+ <div class="bee-groups-head">
1123
+ <input id="bee-groups-search" type="text" spellcheck="false" data-i18n-ph="搜索群名" placeholder="搜索群名">
1124
+ <button id="bee-groups-refresh" class="ghost small" data-i18n="刷新群列表">刷新群列表</button>
1125
+ </div>
1126
+ <div id="bee-groups-list" class="bee-groups-list"></div>
1127
+ </div>
1128
+ </div>
1129
+ <span class="bee-lab" data-i18n="监控文件夹">监控文件夹</span>
1130
+ <div class="bee-dir-row">
1131
+ <input id="bee-dir" type="text" spellcheck="false" placeholder="D:\wx-exports">
1132
+ <button id="bee-dir-pick" class="ghost small" data-i18n-title="浏览…" title="浏览…">…</button>
1133
+ </div>
1134
+ <div class="bee-row2">
1135
+ <label><span data-i18n="间隔(分钟)">间隔(分钟)</span><input id="bee-interval" type="number" min="5" max="1440"></label>
1136
+ <label><span data-i18n="窗口字数">窗口字数</span><input id="bee-maxchars" type="number" min="4000" max="60000" step="1000"></label>
1137
+ </div>
1138
+ <div id="bee-status" class="bee-status"></div>
1139
+ <button id="bee-save" class="primary small" data-i18n="保存设置">保存设置</button>
1140
+ <p class="bee-note" data-i18n="导出 txt 丢进监控文件夹,或开启微信直连由蜜蜂自动拉取;按间隔增量生成每群摘要。记录只存本地;摘要请求会发给当前绑定的模型,桌面小蜜蜂会提醒新摘要。">导出 txt 丢进监控文件夹,或开启微信直连由蜜蜂自动拉取;按间隔增量生成每群摘要。记录只存本地;摘要请求会发给当前绑定的模型,桌面小蜜蜂会提醒新摘要。</p>
1141
+ </div>
1142
+ </div>
1143
+
1014
1144
  <script src="qrcode.js"></script>
1015
1145
  <script src="i18n.js"></script>
1016
1146
  <script src="app.js"></script>