codebee 0.1.6 → 0.1.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/app/ui/i18n.js CHANGED
@@ -146,8 +146,32 @@
146
146
  "查看内容": "View content",
147
147
  "预览": "Preview",
148
148
  "点击查看": "Click to view",
149
+ "任务操作": "Task actions",
149
150
  "蜂巢": "Hive",
150
151
  "对话": "Chat",
152
+ "CLI 日志": "CLI log",
153
+ "打开 CLI 日志": "Open CLI log",
154
+ "点击步骤卡片查看 CLI 日志": "Click a step card to view its CLI log",
155
+ "任务完成": "Task completed",
156
+ "任务失败": "Task failed",
157
+ "轮对话": "turns",
158
+ "产出文件": "Output files",
159
+ "无文件产出": "No output files",
160
+ "查看执行步骤": "View execution steps",
161
+ "查看步骤": "View steps",
162
+ "查看成果": "View results",
163
+ "任务概览": "Task overview",
164
+ "任务信息": "Task info",
165
+ "更多任务信息": "More task info",
166
+ "当前状态": "Current status",
167
+ "步骤已完成": "steps complete",
168
+ "最近一步": "Latest step",
169
+ "描述目标即可,CodeBee 会自动拆解并执行": "Describe the goal and CodeBee will break it down and run it",
170
+ "秒": "sec",
171
+ "分": "min",
172
+ "执行结果": "Execution result",
173
+ "执行者": "Executor",
174
+ "未知状态": "Unknown status",
151
175
  "发送": "Send",
152
176
  "继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)": "Keep typing… (Enter to send, Shift+Enter for a new line; paste screenshots directly)",
153
177
  "成果": "Results",
@@ -207,6 +231,7 @@
207
231
  "读取失败:": "Failed to read: ",
208
232
  "请先进入一个具体目录": "Enter a concrete folder first",
209
233
  "浏览本机目录选择": "Browse local folders",
234
+ "已有一个选择窗口正在等待": "A folder picker window is already open",
210
235
  "检出失败": "Checkout failed",
211
236
  "未创建": "not created",
212
237
  "处理后点「继续任务」,运行会重新检出任务分支。": "After fixing, click Resume — the run will check out the task branch again.",
@@ -256,6 +281,10 @@
256
281
  "指令已撤回,不会送达执行": "Directive retracted — it will not reach the agent",
257
282
  "撤回失败:": "Retract failed: ",
258
283
  "蜂巢工作台": "Hive workbench",
284
+ "初始故事圣经": "Initial story bible",
285
+ "可选": "Optional",
286
+ "人物、世界观、主线冲突、伏笔和不能违背的设定;会在开跑前写入 story-bible.md": "Characters, world rules, main conflict, foreshadowing, and non-negotiable canon; saved to story-bible.md before the run starts",
287
+ "连载任务会在每章起草与评审时自动注入;工作目录已有 story-bible.md 时请留空,避免覆盖已有设定。": "Serial tasks inject it into every drafting and review step; leave this blank when the workdir already has story-bible.md to avoid overwriting existing canon.",
259
288
  "在岗": "busy",
260
289
  "全部空闲": "all idle",
261
290
  "工作中": "working",
@@ -292,7 +321,10 @@
292
321
  "还没有可展示的任务详情": "No task details to show yet",
293
322
  "已归档任务:先在右键菜单里取消归档,再看任务详情": "Archived task — unarchive it from the right-click menu to view details",
294
323
  "任务不存在或已删除": "Task not found or deleted",
295
- "该任务还没跑过(或排队中),还没有任务详情": "This task hasn't run yet (or is queued) — no details to show",
324
+ "该任务还没跑过,还没有任务详情": "This task hasn't run yet — no details to show",
325
+ "将于 ": "Auto-resume at ",
326
+ " 自动续跑(第 ": " (attempt ",
327
+ " 次)": ")",
296
328
  " 个": " plugins",
297
329
  " 个任务": " tasks",
298
330
  " 个任务目录": " task directories",
@@ -433,6 +465,30 @@
433
465
  "(未知)": "(unknown)",
434
466
  "保存": "Save",
435
467
  "关闭": "Close",
468
+
469
+ // —— 首次启动欢迎引导 ——
470
+ "首次启动": "First launch",
471
+ "欢迎使用 CodeBee": "Welcome to CodeBee",
472
+ "一群 AI 智能体自动分工:规划、实现、评审、打磨,直到交付成果。": "A crew of AI agents splits up the work — plan, build, review, polish — until the result is delivered.",
473
+ "添加模型供应商:设置 → 模型接入,填入 API Key": "Add a model provider: Settings → Models, paste your API key",
474
+ "绑定 CLI 智能体:点「一键推荐绑定」自动配好": "Bind CLI agents: one click on Recommended binding configures them",
475
+ "新建任务:选工作目录、写目标,蜂群开工": "Create a task: pick a work folder, describe the goal, and the hive gets going",
476
+ "开始配置模型": "Set up models",
477
+ "绑定 CLI 智能体": "Bind CLI agents",
478
+ "先跳过,直接体验": "Skip and explore",
479
+ "可随时在「设置 → 关于与更新」重新打开本引导。": "You can reopen this guide anytime in Settings → About & updates.",
480
+ "把任务交给蜂群": "Hand the job to the hive",
481
+ "多智能体分工协作,成果自动落盘。": "Agents divide the work; finished results land in your folder automatically.",
482
+ "多智能体编排": "Multi-agent orchestration",
483
+ "规划 · 实现 · 评审 · 打磨,接棒交付": "Planner, builders, reviewer and polisher relay the work to done",
484
+ "连载写作": "Serialized writing",
485
+ "断点续跑 · 经验沉淀 · 作品资料": "Resume from checkpoints, distilled lessons, book metadata",
486
+ "600+ 技能,一键安装": "600+ skills, one-click install",
487
+ "版本工作台": "Version workbench",
488
+ "任务分支隔离,改动可审可合": "Task branches stay isolated; review and merge the changes",
489
+ "定时任务,无人值守": "Scheduled runs, unattended",
490
+ "使用引导": "User guide",
491
+
436
492
  "取消": "Cancel",
437
493
  "确定": "OK",
438
494
  "确认": "Confirm",
@@ -469,9 +525,9 @@
469
525
  "↻ 继续任务": "↻ Resume task",
470
526
  "再跑一次这个任务;连载任务会断点续跑,已完成章节不重写": "Run this task again; serial novels resume from the breakpoint — finished chapters are kept.",
471
527
  "✎ 编辑重试": "✎ Edit & retry",
472
- "✨ 向导创建": " Guided setup",
473
- "三问一确认:目标 → 类型 → 目录,预填进表单": "Three quick questions goal, type, directory — then it prefills the form",
474
- "新建任务向导": "New task wizard",
528
+ "最近使用的文件夹": "Recent folders",
529
+ "浏览本机目录…": "Browse folders on this machine…",
530
+ "用默认路径": "Use default path",
475
531
  "下一步": "Next",
476
532
  "上一步": "Back",
477
533
  "目标还不能为空": "Goal can't be empty",
@@ -522,7 +578,6 @@
522
578
  "首选密钥(填了=替换 #1;备用号在下方密钥区添加)": "Primary key (typing replaces #1; add spares in the keys section below)",
523
579
  "填入表单": "Fill form",
524
580
  "填入表单后可继续:加附件、选实现者、改评审设置": "After filling the form you can still add attachments, pick implementers, or adjust review settings",
525
- "已按向导预填,检查或补充后点「创建并运行」": "Prefilled by the wizard — review it, then click Create & Run",
526
581
  "超时": "Timeout",
527
582
  "取回原任务的目标/目录/评审设置,修改后提交即重新开跑": "Reload this task's goal/directory/review settings into the form — edit and submit to run again",
528
583
  "打开详情": "Open detail",
@@ -604,16 +659,36 @@
604
659
  "评审组": "Reviewers",
605
660
  "管理": "Manage",
606
661
  "管理任务类型:新增/编辑自定义流程": "Manage task types: add/edit custom flows",
662
+ "管理任务类型…": "Manage task types…",
663
+ "拖拽调整高度;双击复位": "Drag to resize; double-click to reset",
664
+ "✉ 继续对话": "✉ Continue chat",
665
+ "人工检查有问题?告诉主智能体,由它判断怎么引导执行": "Spotted issues yourself? Tell the lead agent — it decides how to steer the run",
666
+ "递话": "Send note",
667
+ "哪里不对、要改哪里?主智能体会据此判断并引导执行": "What's wrong, what to change? The lead agent will judge and steer the execution",
668
+ "运行中:下一个步骤开始前送达主智能体": "Running: delivered to the lead agent before the next step starts",
669
+ "已结束:发送后自动断点续跑,主智能体带着反馈重新规划": "Finished: auto-resumes from the checkpoint with your note — the lead agent re-plans",
670
+ "已递话:主智能体在下一个步骤开始前会看到": "Note delivered: the lead agent will see it before the next step",
671
+ "已转交:带着你的反馈断点续跑,主智能体会重新规划": "Handed over: resuming from checkpoint with your note — the lead agent re-plans",
607
672
  "要完成什么,一句话即可": "What's the goal? One sentence is enough.",
608
673
  "上午好呀,有什么想让我帮忙的吗": "Good morning — what can I help you with?",
609
674
  "下午好呀,有什么想让我帮忙的吗": "Good afternoon — what can I help you with?",
610
675
  "晚上好呀,有什么想让我帮忙的吗": "Good evening — what can I help you with?",
611
676
  "常用类型": "Common types",
677
+ "预估:≈{0}{1}": "Est: ≈{0}{1}",
678
+ "近{0}天 · {1}次同类": "last {0}d · {1} similar runs",
679
+ "候选并发数(单稿赛马,1=关)": "Best-of-N candidates (1=off)",
680
+ "同时起草多份候选稿,终审择优并吸收落选稿优点;每多一路多一份起草开销": "Draft several candidates in parallel; a final selector picks the best and harvests the losers' strengths. Each extra candidate costs one more draft",
681
+ "建 PR": "Create PR",
682
+ "推送当前分支并用 gh 创建 PR(目标分支自动取 main/master)": "Push current branch and create a PR with gh (base auto-detected: main/master)",
683
+ "把当前分支推送到远程并用 gh 创建 PR?(目标分支自动取 main/master)": "Push current branch and create a PR with gh? (base auto-detected: main/master)",
684
+ "PR 已创建:": "PR created: ",
685
+ "PR 已创建": "PR created",
612
686
  "背景信息、约束、相关文件(可空)": "Background, constraints, related files (optional)",
613
687
  "留空则保存到:": "Leave blank to save to: ",
614
688
  "选择…": "Browse…",
615
689
  "保存并运行": "Save and run",
616
690
  "创建并运行": "Create and run",
691
+ "更多选项": "More options",
617
692
  "高级选项(默认全智能,无需改动)": "Advanced (smart defaults — leave as-is)",
618
693
  "智能": "Smart",
619
694
  "手动": "Manual",
@@ -623,6 +698,7 @@
623
698
  "评审引擎": "Review engine",
624
699
  "实现 → 验证 → 评审": "Implement → verify → review",
625
700
  "起草 → 多维评审 → 门禁": "Draft → multi-dim review → gate",
701
+ "大纲 → 逐章起草评审 → 合并(可续跑)": "Outline → per-chapter draft & review → merge (resumable)",
626
702
  "实现": "Implement",
627
703
  "起草": "Draft",
628
704
  "大纲": "Outline",
@@ -807,6 +883,8 @@
807
883
  "运行中:新消息会排队,本轮回答完后依次送达": "Running: new messages queue up and are delivered after this turn",
808
884
  "已开新一轮,接着做…": "New round started — continuing…",
809
885
  "已结束:发送后将自动开新一轮接着做": "Run finished — sending will start a new round and continue",
886
+ "本轮已完成,可以继续对话": "This round is complete — you can continue the conversation",
887
+ "继续对话": "Continue conversation",
810
888
  "待送达": "pending delivery",
811
889
  "运行中:消息随下一步送达(插不进正在跑的这一步)": "Running: messages are delivered with the next step (they can't interrupt the one in progress)",
812
890
  "还没有对话内容": "No messages yet",
@@ -880,6 +958,7 @@
880
958
  "未安装": "Not installed",
881
959
  "有新版本 ": "New version ",
882
960
  "已是最新": "Up to date",
961
+ "该条目已有进行中的任务,已转为跟踪该任务": "A task is already running for this CLI — tracking it instead",
883
962
  "该渠道无法自动检查": "Cannot auto-check this channel",
884
963
  "检查更新中…": "Checking for updates…",
885
964
  "预置": "Built-in",
@@ -900,6 +979,13 @@
900
979
  "完整运行": "Full run",
901
980
  "编辑供应商配置(地址 / 协议 / 难度模型)": "Edit provider config (endpoint / protocol / difficulty models)",
902
981
  "尚未获取模型列表——点上方「获取模型列表」。": "Model list not fetched — click \"Fetch model list\" above.",
982
+ "厂商列表接口调不通?直接手工添加模型名也能用。": "Vendor's list API not working? Just add the model name manually.",
983
+ "手工添加模型名(列表接口调不通时用),回车添加": "Model name to add manually (for vendors whose list API fails); press Enter to add",
984
+ "厂商列表接口调不通时,直接把模型名加进列表": "Add a model name to the list directly when the vendor's list API is not working",
985
+ "添加": "Add",
986
+ "先填模型名": "Enter a model name first",
987
+ "已添加模型 ": "Model added: ",
988
+ "添加失败:": "Add failed: ",
903
989
  "按名称过滤模型…": "Filter models by name…",
904
990
  " 协议 · ": " protocol · ",
905
991
  "API 地址必须以 http:// 或 https:// 开头": "API endpoint must start with http:// or https://",
@@ -1249,7 +1335,7 @@
1249
1335
  "留空 = 内容, 结构, 表达": "empty = content, structure, style",
1250
1336
  "留空 = 内置通用模板": "empty = built-in template",
1251
1337
  "留空 = 按流程 ID 生成": "empty = derived from flow ID",
1252
- "留空则保存到默认路径;或填绝对路径,例 E:\\GoOut\\my-project": "Leave empty to save to the default path, or enter an absolute path, e.g. E:\\GoOut\\my-project",
1338
+ "工作目录 · 留空用默认": "Workspace · leave blank for default",
1253
1339
  "自定义流程只需填名称与引擎,其余留空走默认。": "Custom flows only need a name and engine — leave the rest empty for defaults.",
1254
1340
  "预置流程可直接编辑(阈值/轮数/维度/章节数/提示词),改动随时可「恢复默认」;": "Built-in flows are editable (threshold / rounds / dimensions / chapters / prompts) — \"Reset\" restores defaults anytime;",
1255
1341
  "语言 / Language": "Language",
@@ -1656,6 +1742,20 @@
1656
1742
  "验证不通过不得通过:即使评审通过或分数高,只要 verify_pass=false 就判未通过;修复后必须提交新的验证日志与失败归因。": "Failed verification blocks acceptance: even with a passing or high-scoring review, verify_pass=false means not accepted; after fixing, submit fresh verification logs and failure attribution.",
1657
1743
  "多轮修复未变要停:同一验证失败连续2轮未消除时,停止盲改,切换排查环境、测试夹具、依赖版本或验收命令;记录最小复现。": "Stop when multiple fixes change nothing: when the same verification failure survives two consecutive rounds, stop blind changes and switch to investigating the environment, fixtures, dependency versions or the acceptance command; record a minimal reproduction.",
1658
1744
  "切换前保留失败诊断 / 修复绑定失败证据 / 修复不重复空转": "Keep failure diagnostics before switching / capture bind-failure evidence / no idle repair loops",
1745
+
1746
+ // —— 帮助改进(遥测/诊断包)——
1747
+ "帮助改进 CodeBee": "Help Improve CodeBee",
1748
+ "发送匿名错误报告(帮助我们发现和修复问题)": "Send anonymous error reports (helps us find and fix issues)",
1749
+ "只上报失败原因码、供应商/模型名与脱敏后的错误摘录——绝不上传任务内容、章节正文、API 密钥和本机路径;关闭后立即停止一切上报。": "Only failure reason codes, provider/model names and sanitized error excerpts are reported — never task content, chapter text, API keys or local paths; turning it off stops all reporting immediately.",
1750
+ "导出诊断包": "Export diagnostics bundle",
1751
+ "生成一个 zip(近 30 天错误记录 + 用量统计 + 版本环境信息,已剥离敏感数据),反馈问题时可附在 Issue 里。": "Generates a zip (last 30 days of error records + usage stats + version/environment info, sensitive data stripped) that you can attach to an Issue when reporting problems.",
1752
+ "已开启匿名错误报告,感谢帮助改进 CodeBee": "Anonymous error reporting enabled — thanks for helping improve CodeBee",
1753
+ "已关闭匿名错误报告,数据不再离开本机": "Anonymous error reporting disabled — no data leaves this machine",
1754
+ "诊断包已开始下载,反馈问题时可附在 Issue 里": "Diagnostics bundle download started — attach it to an Issue when reporting problems",
1755
+ "诊断包导出失败:": "Failed to export diagnostics bundle: ",
1756
+ "一键反馈 Issue": "Report Issue",
1757
+ "已打开 GitHub 反馈页,内容已预填,可直接提交(也可附上诊断包 zip)": "GitHub issue page opened with the report pre-filled — submit it, and feel free to attach the diagnostics zip",
1758
+ "反馈摘要生成失败:": "Failed to build issue summary: ",
1659
1759
  };
1660
1760
 
1661
1761
  // ---------- 工具 ----------
@@ -1752,4 +1852,4 @@
1752
1852
  } else {
1753
1853
  applyI18n();
1754
1854
  }
1755
- })();
1855
+ })();
package/app/ui/index.html CHANGED
@@ -79,6 +79,7 @@
79
79
  <circle cx="19.9" cy="4.3" r="2" fill="currentColor" stroke="none"/>
80
80
  <circle cx="21.6" cy="8.9" r="2.3" fill="currentColor" stroke="none"/>
81
81
  </symbol>
82
+ <symbol id="i-rocket" viewBox="0 0 24 24"><path d="M4.5 16.5c-1.5 1.26-2 5-2 5s3.74-.5 5-2c.71-.84.7-2.13-.09-2.91a2.18 2.18 0 0 0-2.91-.09z"/><path d="m12 15-3-3a22 22 0 0 1 2-3.95A12.88 12.88 0 0 1 22 2c0 2.72-.78 7.5-6 11a22.35 22.35 0 0 1-4 2z"/><path d="M9 12H4s.55-3.03 2-4c1.62-1.08 5 0 5 0"/><path d="M12 15v5s3.03-.55 4-2c1.08-1.62 0-5 0-5"/></symbol>
82
83
  <!-- 任务类型图标(flows.py 预置流程 icon 字段引用;stroke=currentColor 黑白随主题) -->
83
84
  <symbol id="i-code" viewBox="0 0 24 24"><path d="m4 17 6-5-6-5"/><path d="M12 19h8"/></symbol>
84
85
  <symbol id="i-book-open" viewBox="0 0 24 24"><path d="M2 4h6a4 4 0 0 1 4 4v13a3 3 0 0 0-3-3H2z"/><path d="M22 4h-6a4 4 0 0 0-4 4v13a3 3 0 0 1 3-3h7z"/></symbol>
@@ -187,6 +188,7 @@
187
188
  <div data-i18n="外观" class="set-group">外观</div>
188
189
  <button class="set-item" data-sub="appearance" data-i18n="皮肤"><svg class="ico" aria-hidden="true"><use href="#i-palette"></use></svg>皮肤</button>
189
190
  <div data-i18n="软件" class="set-group">软件</div>
191
+ <button id="btn-guide" class="set-item" data-sub="__guide" data-i18n="使用引导"><svg class="ico" aria-hidden="true"><use href="#i-rocket"></use></svg>使用引导</button>
190
192
  <button id="btn-about" class="set-item" data-sub="about" data-i18n="关于与更新"><svg class="ico" aria-hidden="true"><use href="#i-gauge"></use></svg>关于与更新</button>
191
193
  <div data-i18n="远程" class="set-group">远程</div>
192
194
  <button id="btn-phone" class="set-item" data-sub="__phone" data-i18n="手机连接"><svg class="ico" aria-hidden="true"><use href="#i-phone"></use></svg>手机连接</button>
@@ -230,46 +232,52 @@
230
232
  <div class="panel wide composer">
231
233
  <div class="hero-row">
232
234
  <h2 class="hero" id="cmp-greet">上午好呀,有什么想让我帮忙的吗</h2>
233
- <button type="button" id="btn-wizard" class="ghost small" data-i18n="✨ 向导创建" data-i18n-title="三问一确认:目标 → 类型 → 目录,预填进表单" title="三问一确认:目标 → 类型 → 目录,预填进表单" onclick="openTaskWizard()">✨ 向导创建</button>
234
235
  </div>
235
- <p data-i18n="一句话目标即可 —— CodeBee 自动拆解、智能路由、执行、验证并跨厂商评审。" class="hint hero-sub">一句话目标即可 —— CodeBee 自动拆解、智能路由、执行、验证并跨厂商评审。</p>
236
236
  <div class="form">
237
- <!-- 胶囊行(ZCode 式):类型 / 工作目录一眼可见、点胶囊就地改。
238
- 值真源仍是 #f-type / #f-workdir(既有 ID,联动与测试锚点全兼容)。 -->
237
+ <!-- Composer 大输入框:工作目录作为框内首行上下文;值真源仍是
238
+ #f-type / #f-workdir(既有 ID,联动与测试锚点全兼容)。
239
+ 附件在左下、发送在右下;Enter 发送,Shift+Enter 换行 -->
240
+ <div class="cmp-box">
239
241
  <div class="cmp-pills">
240
- <div class="type-wrap">
241
- <select id="f-type" class="hidden" tabindex="-1" aria-hidden="true"></select>
242
- <button type="button" id="f-type-btn" class="type-pick" onclick="toggleTypeMenu()" aria-haspopup="listbox" aria-controls="type-menu">
243
- <span class="tp-ico" id="f-type-ico" aria-hidden="true"></span>
244
- <span class="tp-name" id="f-type-name"></span>
245
- <svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
246
- </button>
247
- <div id="type-menu" class="type-menu hidden" role="listbox" aria-label="任务类型" data-i18n-aria="任务类型"></div>
248
- </div>
249
- <button type="button" class="ghost small" id="btn-flows-mgr" data-i18n="管理" data-i18n-title="管理任务类型:新增/编辑自定义流程" title="管理任务类型:新增/编辑自定义流程" onclick="openFlowsManager()">管理</button>
250
242
  <div class="cmp-wd">
251
243
  <svg class="ico" aria-hidden="true"><use href="#i-folder"></use></svg>
252
244
  <div class="input-row">
253
- <input id="f-workdir" placeholder="留空则保存到默认路径;或填绝对路径,例 E:\GoOut\my-project" data-i18n-ph="留空则保存到默认路径;或填绝对路径,例 E:\GoOut\my-project">
254
- <button data-i18n="选择…" class="ghost small" type="button" title="浏览本机目录选择" data-i18n-title="浏览本机目录选择" onclick="pickFolder('f-workdir')">选择…</button>
245
+ <input id="f-workdir" placeholder="工作目录 · 留空用默认" data-i18n-ph="工作目录 · 留空用默认">
246
+ <button data-i18n="选择…" class="ghost small wd-pick-btn" type="button" title="浏览本机目录选择" data-i18n-title="浏览本机目录选择" onclick="pickFolder('f-workdir')">选择…</button>
247
+ <button type="button" id="f-workdir-menu-btn" class="ghost small wd-menu-btn" aria-haspopup="listbox" aria-controls="wd-menu" title="最近使用的文件夹" data-i18n-title="最近使用的文件夹" onclick="toggleWdMenu(event)">
248
+ <svg class="ico" aria-hidden="true"><use href="#i-chevrons-d"></use></svg>
249
+ </button>
255
250
  </div>
251
+ <!-- 最近文件夹下拉:点 ▾ 展开(toggleWdMenu 渲染),含浏览与「用默认路径」 -->
252
+ <div id="wd-menu" class="wd-menu hidden" role="listbox" aria-label="最近使用的文件夹" data-i18n-aria="最近使用的文件夹"></div>
253
+ </div>
254
+ <!-- 工作目录指向 git 仓库时出现(probeGit 显隐):分支以小胶囊挂同一条上下文条,
255
+ 悬停看当前分支/脏区/检出说明(renderGitHint 写 title);运行时检出任务分支 -->
256
+ <div class="field hidden" id="row-git">
257
+ <label data-i18n="代码版本"><svg class="ico" aria-hidden="true"><use href="#i-git-branch"></use></svg>代码版本</label>
258
+ <select id="f-git-rev"></select>
259
+ <p class="hint" id="git-hint"></p>
256
260
  </div>
257
261
  </div>
262
+ <!-- 平时空(默认路径提示由 JS 写进占位符);继续会话/克隆任务预填时这里落覆盖警告 -->
258
263
  <p class="hint cmp-hint" id="f-workdir-hint"></p>
259
- <!-- 工作目录指向 git 仓库时出现(probeGit 显隐):运行时检出任务分支 -->
260
- <div class="field hidden" id="row-git">
261
- <label data-i18n="代码版本"><svg class="ico" aria-hidden="true"><use href="#i-git-branch"></use></svg>代码版本</label>
262
- <select id="f-git-rev"></select>
263
- <p class="hint" id="git-hint"></p>
264
- </div>
265
- <!-- Composer 大输入框:附件在左下、发送在右下;Enter 发送,Shift+Enter 换行 -->
266
- <div class="cmp-box">
264
+ <div class="cmp-context-note"><svg class="ico" aria-hidden="true"><use href="#i-chat"></use></svg><span data-i18n="描述目标即可,CodeBee 会自动拆解并执行">描述目标即可,CodeBee 会自动拆解并执行</span></div>
265
+ <div id="att-chips" class="att-chips" aria-live="polite"></div>
267
266
  <textarea id="f-goal" rows="3" placeholder="要完成什么,一句话即可" required data-i18n-ph="要完成什么,一句话即可"></textarea>
268
267
  <div class="cmp-bar">
268
+ <div class="cmp-mode">
269
+ <div class="type-wrap">
270
+ <select id="f-type" class="hidden" tabindex="-1" aria-hidden="true"></select>
271
+ <button type="button" id="f-type-btn" class="type-pick" onclick="toggleTypeMenu()" aria-haspopup="listbox" aria-controls="type-menu">
272
+ <span class="tp-ico" id="f-type-ico" aria-hidden="true"></span>
273
+ <span class="tp-name" id="f-type-name"></span>
274
+ <svg class="ico chev" aria-hidden="true"><use href="#i-chevron-r"></use></svg>
275
+ </button>
276
+ <div id="type-menu" class="type-menu hidden" role="listbox" aria-label="任务类型" data-i18n-aria="任务类型"></div>
277
+ </div>
278
+ </div>
269
279
  <div class="att-strip">
270
- <button type="button" class="ghost small" id="btn-attach" title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB),创建任务时落盘到工作目录 _attachments/" data-i18n-title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB),创建任务时落盘到工作目录 _attachments/"><svg class="ico" aria-hidden="true"><use href="#i-paperclip"></use></svg><span data-i18n="附件">附件</span></button>
271
- <span class="att-hint" data-i18n="也可直接粘贴截图">也可直接粘贴截图</span>
272
- <div id="att-chips" class="att-chips"></div>
280
+ <button type="button" class="ghost small" id="btn-attach" title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB),创建任务时落盘到工作目录 _attachments/;也可直接粘贴截图" data-i18n-title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB),创建任务时落盘到工作目录 _attachments/;也可直接粘贴截图"><svg class="ico" aria-hidden="true"><use href="#i-paperclip"></use></svg><span data-i18n="附件">附件</span></button>
273
281
  </div>
274
282
  <div class="cmp-send">
275
283
  <span id="create-msg" class="msg"></span>
@@ -280,6 +288,8 @@
280
288
  </div>
281
289
  <!-- 快捷类型:点一个即选定并聚焦目标框(renderQuickChips 渲染) -->
282
290
  <div id="cmp-quick" class="cmp-quick" role="group" aria-label="常用类型" data-i18n-aria="常用类型"></div>
291
+ <!-- 开跑前成本预估(refreshEstimate 填充;无同类样本时保持隐藏) -->
292
+ <p class="hint cmp-estimate hidden" id="cmp-estimate"></p>
283
293
  <div class="field hidden" id="row-resume-session">
284
294
  <label data-i18n="选择会话">选择会话</label>
285
295
  <select id="f-resume-session"><option data-i18n="(加载中…)">(加载中…)</option></select>
@@ -287,7 +297,7 @@
287
297
  </div>
288
298
 
289
299
  <details id="f-advanced">
290
- <summary data-i18n="高级选项(默认全智能,无需改动)">高级选项(默认全智能,无需改动)</summary>
300
+ <summary data-i18n="更多选项">更多选项</summary>
291
301
  <div class="adv-body">
292
302
  <div class="grid-2">
293
303
  <div class="field">
@@ -311,10 +321,16 @@
311
321
  <div class="field"><label data-i18n="验证命令">验证命令</label><input id="f-verify" placeholder="例:python -m pytest -q(可空=只评审)" data-i18n-ph="例:python -m pytest -q(可空=只评审)"></div>
312
322
  </div>
313
323
  <div id="f-review-only" class="hidden">
324
+ <div id="bible-create-field" class="field hidden">
325
+ <label><svg class="ico" aria-hidden="true"><use href="#i-book"></use></svg><span data-i18n="初始故事圣经">初始故事圣经</span><span class="field-optional" data-i18n="可选">可选</span></label>
326
+ <textarea id="f-bible" rows="5" placeholder="人物、世界观、主线冲突、伏笔和不能违背的设定;会在开跑前写入 story-bible.md" data-i18n-ph="人物、世界观、主线冲突、伏笔和不能违背的设定;会在开跑前写入 story-bible.md"></textarea>
327
+ <p class="hint" data-i18n="连载任务会在每章起草与评审时自动注入;工作目录已有 story-bible.md 时请留空,避免覆盖已有设定。">连载任务会在每章起草与评审时自动注入;工作目录已有 story-bible.md 时请留空,避免覆盖已有设定。</p>
328
+ </div>
314
329
  <div class="grid-3">
315
330
  <div class="field"><label data-i18n="稿件文件(合并稿)">稿件文件(合并稿)</label><input id="f-manuscript" value="manuscript.md" placeholder="工作目录内的文件名" data-i18n-ph="工作目录内的文件名"></div>
316
331
  <div class="field"><label data-i18n="评审轮数">评审轮数</label><input id="f-rounds" type="number" value="2" min="1" max="5"></div>
317
332
  <div class="field"><label data-i18n="发布阈值(全书)">发布阈值(全书)</label><input id="f-threshold" type="number" value="7.0" min="1" max="10" step="0.5"></div>
333
+ <div class="field"><label data-i18n="候选并发数(单稿赛马,1=关)">候选并发数(单稿赛马,1=关)</label><input id="f-bestof" type="number" value="1" min="1" max="3" title="同时起草多份候选稿,终审择优并吸收落选稿优点;每多一路多一份起草开销" data-i18n-title="同时起草多份候选稿,终审择优并吸收落选稿优点;每多一路多一份起草开销"></div>
318
334
  </div>
319
335
  <div class="field"><label data-i18n="评审维度(逗号分隔,可自定义)">评审维度(逗号分隔,可自定义)</label><input id="f-rubric" placeholder="例:情节, 人物, 文笔" data-i18n-ph="例:情节, 人物, 文笔"></div>
320
336
  <div class="grid-2">
@@ -350,6 +366,10 @@
350
366
  <!-- 运行详情:头部(标题/状态/操作/统计)+ 标签分区 + 贴底日志抽屉。
351
367
  分区内容的 hidden 语义不变(没数据整块收起);标签页只切外层 pane。 -->
352
368
  <div id="run-detail" class="panel wide hidden">
369
+ <!-- 右栏一张卡:任务信息(返回/标题/状态/操作)+ 分区导航,发丝线分区;
370
+ 日志控制台停靠卡片下方,不再横向盖住主区内容 -->
371
+ <div id="rd-railcol">
372
+ <div id="rd-rail">
353
373
  <div class="detail-head">
354
374
  <button id="btn-back" class="ghost" data-i18n="返回"><svg class="ico" aria-hidden="true"><use href="#i-arrow-left"></use></svg>返回</button>
355
375
  <h2 id="rd-title"></h2>
@@ -362,28 +382,63 @@
362
382
  <button data-i18n="继续连载" id="btn-continue" class="ghost hidden">继续连载</button>
363
383
  <button data-i18n="基于此任务新建" id="btn-newfrom" class="ghost hidden">基于此任务新建</button>
364
384
  <button data-i18n="删除记录" id="btn-delete" class="danger hidden">删除记录</button>
385
+ <button data-i18n="✉ 继续对话" id="btn-talk" class="ghost hidden" data-i18n-title="人工检查有问题?告诉主智能体,由它判断怎么引导执行" title="人工检查有问题?告诉主智能体,由它判断怎么引导执行">✉ 继续对话</button>
386
+ <button id="rd-more-toggle" class="rd-more-toggle" type="button" aria-label="更多任务信息" data-i18n-aria="更多任务信息" aria-expanded="false" aria-controls="rd-meta-popover" title="更多任务信息" data-i18n-title="更多任务信息">•••</button>
387
+ </div>
388
+ <!-- 人工干预(非直连任务):运行中=递话入箱,下一步开始前送达主智能体;
389
+ 已结束=发送后自动断点续跑,主智能体带着反馈重新规划/引导执行 -->
390
+ <div id="rd-talk" class="rd-talk hidden">
391
+ <div id="rd-talk-atts" class="rd-talk-atts"></div>
392
+ <textarea id="rd-talk-input" rows="3" placeholder="哪里不对、要改哪里?主智能体会据此判断并引导执行" data-i18n-ph="哪里不对、要改哪里?主智能体会据此判断并引导执行"></textarea>
393
+ <div class="rd-talk-bar">
394
+ <button id="rd-talk-attach" class="ghost" data-i18n="附件" data-i18n-title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB);也可直接粘贴截图" title="添加附件:截图 / 文本 / Word·Excel·PPT / PDF 等(普通 8MB,Office 24MB);也可直接粘贴截图">附件</button>
395
+ <span id="rd-talk-hint" class="hint"></span>
396
+ <button id="rd-talk-send" class="primary small" data-i18n="递话">递话</button>
397
+ </div>
398
+ <input id="rd-talk-file" type="file" multiple accept=".png,.jpg,.jpeg,.gif,.webp,.bmp,.svg,.txt,.md,.markdown,.csv,.json,.log,.py,.js,.ts,.html,.css,.xml,.yml,.yaml,.toml,.pdf,.docx,.xlsx,.pptx" class="hidden">
399
+ </div>
400
+ <div id="rd-meta-popover" class="rd-meta-popover hidden" role="dialog" aria-label="任务信息" data-i18n-aria="任务信息">
401
+ <div class="rd-meta-popover-head"><span data-i18n="任务信息">任务信息</span><button id="rd-more-close" type="button" class="ghost" aria-label="关闭" data-i18n-aria="关闭">×</button></div>
402
+ <div id="rd-meta" class="stats rd-meta-strip"></div>
403
+ <div id="rd-overview" class="rd-overview hidden" aria-live="polite"></div>
365
404
  </div>
366
405
  </div>
367
- <div id="rd-meta" class="stats rd-meta-strip"></div>
368
406
  <div id="rd-tabs" class="rd-tabs" role="tablist" data-i18n-aria="详情分区">
369
- <button class="rd-tab" data-tab="chat" data-i18n="对话">对话<span class="rd-badge hidden"></span></button>
370
- <button class="rd-tab" data-tab="hive" data-i18n="蜂巢">蜂巢<span class="rd-badge hidden"></span></button>
371
- <button class="rd-tab" data-tab="steps" data-i18n="步骤">步骤<span class="rd-badge hidden"></span></button>
372
- <button class="rd-tab" data-tab="result" data-i18n="成果">成果<span class="rd-badge hidden"></span></button>
373
- <button class="rd-tab" data-tab="git" data-i18n="Git">Git<span class="rd-badge hidden"></span></button>
374
- <button class="rd-tab" data-tab="bible" data-i18n="圣经">圣经<span class="rd-badge hidden"></span></button>
375
- <button class="rd-tab" data-tab="bookmeta" data-i18n="作品信息">作品信息<span class="rd-badge hidden"></span></button>
407
+ <button id="rd-tab-chat" class="rd-tab" role="tab" aria-controls="rd-pane-chat" aria-selected="false" tabindex="-1" data-tab="chat" data-i18n="对话"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-chat"></use></svg>对话<span class="rd-badge hidden"></span></button>
408
+ <button id="rd-tab-hive" class="rd-tab" role="tab" aria-controls="rd-pane-hive" aria-selected="false" tabindex="-1" data-tab="hive" data-i18n="蜂巢"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-bee"></use></svg>蜂巢<span class="rd-badge hidden"></span></button>
409
+ <button id="rd-tab-steps" class="rd-tab" role="tab" aria-controls="rd-pane-steps" aria-selected="false" tabindex="-1" data-tab="steps" data-i18n="步骤"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-tasks"></use></svg>步骤<span class="rd-badge hidden"></span></button>
410
+ <button id="rd-tab-result" class="rd-tab" role="tab" aria-controls="rd-pane-result" aria-selected="false" tabindex="-1" data-tab="result" data-i18n="成果"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-file-text"></use></svg>成果<span class="rd-badge hidden"></span></button>
411
+ <button id="rd-tab-git" class="rd-tab" role="tab" aria-controls="rd-pane-git" aria-selected="false" tabindex="-1" data-tab="git" data-i18n="Git"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-git-branch"></use></svg>Git<span class="rd-badge hidden"></span></button>
412
+ <button id="rd-tab-bible" class="rd-tab" role="tab" aria-controls="rd-pane-bible" aria-selected="false" tabindex="-1" data-tab="bible" data-i18n="圣经"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-book"></use></svg>圣经<span class="rd-badge hidden"></span></button>
413
+ <button id="rd-tab-bookmeta" class="rd-tab" role="tab" aria-controls="rd-pane-bookmeta" aria-selected="false" tabindex="-1" data-tab="bookmeta" data-i18n="作品信息"><svg class="ico tab-ico" aria-hidden="true"><use href="#i-idcard"></use></svg>作品信息<span class="rd-badge hidden"></span></button>
376
414
  </div>
377
415
  <!-- 直连任务「对话为主」导航:常规页签条收起(chat-mode),这里给按需打开
378
416
  其它分区的小按钮 + 非对话分区时的「返回对话」入口 -->
379
417
  <div id="rd-chat-nav" class="hidden"></div>
418
+ </div><!-- /rd-rail -->
419
+ <!-- 日志控制台:停靠右栏卡片下方(窄侧栏),点击蜂巢格/步骤的 CLI 日志在此展开;
420
+ 顶边手柄可拖拽调高度(双击复位),运行中自动贴底跟随最新输出 -->
421
+ <div id="rd-log" class="logbox rd-logdrawer hidden">
422
+ <div id="rd-log-grip" class="rd-log-grip" data-i18n-title="拖拽调整高度;双击复位" title="拖拽调整高度;双击复位"></div>
423
+ <div class="log-live-bar">
424
+ <svg class="ico" aria-hidden="true"><use href="#i-gauge"></use></svg>
425
+ <span id="rd-log-step" class="rd-log-step" data-i18n-title="当前日志所属的步骤" title="当前日志所属的步骤"></span>
426
+ <span id="rd-log-live" class="log-live"></span>
427
+ <span id="rd-log-at" class="log-at"></span>
428
+ <span class="spacer"></span>
429
+ <button class="ghost rd-log-x" onclick="rdLogClose()" data-i18n-title="关闭日志" title="关闭日志"><svg class="ico" aria-hidden="true"><use href="#i-chevrons-d"></use></svg></button>
430
+ </div>
431
+ <pre id="rd-log-text"></pre>
432
+ </div>
433
+ </div><!-- /rd-railcol -->
380
434
  <div class="rd-main">
381
435
  <!-- 对话分区(直连任务默认):用户消息与 CLI 输出混排的时间线 + 贴底追话框。
382
436
  运行中发出去走信箱(下一步送达);已结束发出去走 /chat 自动续跑新一轮。 -->
383
- <div class="rd-pane" data-pane="chat">
437
+ <div id="rd-pane-chat" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-chat" data-pane="chat">
384
438
  <div id="rd-chat" class="rd-chat hidden">
385
439
  <div id="rd-chat-flow" class="rd-chat-flow"></div>
386
440
  <div class="rd-chat-bar">
441
+ <div id="rd-chat-continue-note" class="rd-chat-continue-note hidden"><span class="continue-dot"></span><span data-i18n="本轮已完成,可以继续对话">本轮已完成,可以继续对话</span><button id="rd-chat-focus" type="button" class="ghost small" data-i18n="继续对话">继续对话</button></div>
387
442
  <textarea id="rd-chat-input" rows="2" data-i18n-ph="继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)" placeholder="继续说…(Enter 发送,Shift+Enter 换行;可直接粘贴截图)"></textarea>
388
443
  <div class="rd-chat-tools">
389
444
  <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>
@@ -395,7 +450,7 @@
395
450
  </div>
396
451
  </div>
397
452
  </div>
398
- <div class="rd-pane" data-pane="hive">
453
+ <div id="rd-pane-hive" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-hive" data-pane="hive">
399
454
  <div id="rd-hive" class="rd-hive hidden">
400
455
  <div class="sec-title"><svg class="ico" aria-hidden="true"><use href="#i-bee"></use></svg><span data-i18n="蜂巢工作台">蜂巢工作台</span><span id="rd-hive-sub" class="tag"></span></div>
401
456
  <div id="rd-hive-cells" class="hive-cells"></div>
@@ -417,36 +472,25 @@
417
472
  </div>
418
473
  </div>
419
474
  </div>
420
- <div class="rd-pane" data-pane="steps">
475
+ <div id="rd-pane-steps" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-steps" data-pane="steps">
421
476
  <div id="rd-plan" class="hidden"></div>
422
477
  <div id="rd-steps" class="steps"></div>
423
478
  </div>
424
- <div class="rd-pane" data-pane="result">
479
+ <div id="rd-pane-result" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-result" data-pane="result">
480
+ <div id="rd-outcome" class="rd-outcome hidden"></div>
425
481
  <h3 data-i18n="报告" class="sec-title">报告</h3>
426
482
  <div id="rd-report" class="report"></div>
427
483
  <div id="rd-arts" class="rd-arts hidden"></div>
428
484
  </div>
429
- <div class="rd-pane" data-pane="git">
485
+ <div id="rd-pane-git" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-git" data-pane="git">
430
486
  <div id="rd-git" class="rd-git hidden"></div>
431
487
  </div>
432
- <div class="rd-pane" data-pane="bible">
488
+ <div id="rd-pane-bible" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-bible" data-pane="bible">
433
489
  <div id="rd-bible" class="rd-bible hidden"></div>
434
490
  </div>
435
- <div class="rd-pane" data-pane="bookmeta">
491
+ <div id="rd-pane-bookmeta" class="rd-pane" role="tabpanel" aria-labelledby="rd-tab-bookmeta" data-pane="bookmeta">
436
492
  <div id="rd-bookmeta" class="rd-bookmeta hidden"></div>
437
493
  </div>
438
- <div id="rd-log" class="logbox rd-logdrawer hidden">
439
- <div class="log-live-bar">
440
- <svg class="ico" aria-hidden="true"><use href="#i-gauge"></use></svg>
441
- <span id="rd-log-step" class="rd-log-step" data-i18n-title="当前日志所属的步骤" title="当前日志所属的步骤"></span>
442
- <span id="rd-log-live" class="log-live"></span>
443
- <span id="rd-log-at" class="log-at"></span>
444
- <span class="spacer"></span>
445
- <span class="hint" data-i18n="停在底部自动跟随新输出;上翻回看时不动">停在底部自动跟随新输出;上翻回看时不动</span>
446
- <button class="ghost rd-log-x" onclick="rdLogClose()" data-i18n-title="关闭日志" title="关闭日志"><svg class="ico" aria-hidden="true"><use href="#i-chevrons-d"></use></svg></button>
447
- </div>
448
- <pre id="rd-log-text"></pre>
449
- </div>
450
494
  </div>
451
495
  </div>
452
496
  </div>
@@ -655,6 +699,7 @@
655
699
  <div class="panel-head"><h2 data-i18n="关于与更新">关于与更新</h2></div>
656
700
  <div id="su-info" class="empty" data-i18n="加载中…">加载中…</div>
657
701
  <div class="input-row" style="margin-top:10px">
702
+ <button id="btn-welcome-replay" class="ghost small" onclick="welcomeOpen()"><svg class="ico" aria-hidden="true"><use href="#i-bee"></use></svg><span data-i18n="使用引导">使用引导</span></button>
658
703
  <button id="su-check" class="ghost small" onclick="suCheck()"><svg class="ico" aria-hidden="true"><use href="#i-refresh"></use></svg><span data-i18n="检查更新">检查更新</span></button>
659
704
  <button id="su-apply" class="ghost small hidden" onclick="suApply()"><span data-i18n="升级到新版">升级到新版</span></button>
660
705
  <button id="su-restart" class="ghost small hidden" onclick="suRestart()"><span data-i18n="重启服务生效">重启服务生效</span></button>
@@ -662,6 +707,14 @@
662
707
  <p id="su-note" class="hint"></p>
663
708
  <p id="su-progress" class="hint"></p>
664
709
  <p class="hint" data-i18n="升级会通过 npm 拉取最新版并自动执行(日志可在运行记录里实时查看);完成后点「重启服务生效」,页面会自动重连。开发仓库(git clone)模式不提供自动升级,请用 git pull。">升级会通过 npm 拉取最新版并自动执行(日志可在运行记录里实时查看);完成后点「重启服务生效」,页面会自动重连。开发仓库(git clone)模式不提供自动升级,请用 git pull。</p>
710
+ <h3 data-i18n="帮助改进 CodeBee" class="sec-title">帮助改进 CodeBee</h3>
711
+ <label class="toggle"><input id="set-telemetry" type="checkbox" onchange="saveTelemetry(this.checked)"> <span data-i18n="发送匿名错误报告(帮助我们发现和修复问题)">发送匿名错误报告(帮助我们发现和修复问题)</span></label>
712
+ <p data-i18n="只上报失败原因码、供应商/模型名与脱敏后的错误摘录——绝不上传任务内容、章节正文、API 密钥和本机路径;关闭后立即停止一切上报。" class="hint">只上报失败原因码、供应商/模型名与脱敏后的错误摘录——绝不上传任务内容、章节正文、API 密钥和本机路径;关闭后立即停止一切上报。</p>
713
+ <div class="input-row" style="margin-top:8px">
714
+ <button id="diag-export" class="ghost small" onclick="exportDiagBundle()"><svg class="ico" aria-hidden="true"><use href="#i-file-search"></use></svg><span data-i18n="导出诊断包">导出诊断包</span></button>
715
+ <button id="issue-report" class="ghost small" onclick="reportIssue()"><svg class="ico" aria-hidden="true"><use href="#i-mail"></use></svg><span data-i18n="一键反馈 Issue">一键反馈 Issue</span></button>
716
+ </div>
717
+ <p data-i18n="生成一个 zip(近 30 天错误记录 + 用量统计 + 版本环境信息,已剥离敏感数据),反馈问题时可附在 Issue 里。" class="hint">生成一个 zip(近 30 天错误记录 + 用量统计 + 版本环境信息,已剥离敏感数据),反馈问题时可附在 Issue 里。</p>
665
718
  </div>
666
719
  </div>
667
720
 
@@ -867,6 +920,46 @@
867
920
  </div>
868
921
  </div>
869
922
 
923
+ <!-- 首次启动欢迎引导:产品能做什么 + 装完三步开工;「设置 → 关于与更新」可重开。
924
+ localStorage orch.welcomed 记账,只自动弹一次;令牌门在场时让位(见 maybeWelcome)。 -->
925
+ <div id="welcome" class="welcome-wrap hidden">
926
+ <div class="welcome-mask" onclick="welcomeClose()"></div>
927
+ <div class="welcome-card" role="dialog" aria-modal="true" aria-labelledby="welcome-title">
928
+ <button class="welcome-x icon-btn" title="关闭" aria-label="关闭" data-i18n-title="关闭" data-i18n-aria="关闭" onclick="welcomeClose()">✕</button>
929
+ <div class="welcome-left">
930
+ <span class="welcome-badge" data-i18n="首次启动">首次启动</span>
931
+ <div class="welcome-brand">
932
+ <svg class="ico welcome-bee" aria-hidden="true"><use href="#i-bee"></use></svg>
933
+ <span class="brand-name">CodeBee</span>
934
+ </div>
935
+ <h1 id="welcome-title" data-i18n="欢迎使用 CodeBee">欢迎使用 CodeBee</h1>
936
+ <p class="welcome-sub" data-i18n="一群 AI 智能体自动分工:规划、实现、评审、打磨,直到交付成果。">一群 AI 智能体自动分工:规划、实现、评审、打磨,直到交付成果。</p>
937
+ <div class="welcome-steps">
938
+ <div class="wstep"><b>1</b><span data-i18n="添加模型供应商:设置 → 模型接入,填入 API Key">添加模型供应商:设置 → 模型接入,填入 API Key</span></div>
939
+ <div class="wstep"><b>2</b><span data-i18n="绑定 CLI 智能体:点「一键推荐绑定」自动配好">绑定 CLI 智能体:点「一键推荐绑定」自动配好</span></div>
940
+ <div class="wstep"><b>3</b><span data-i18n="新建任务:选工作目录、写目标,蜂群开工">新建任务:选工作目录、写目标,蜂群开工</span></div>
941
+ </div>
942
+ <div class="welcome-acts">
943
+ <button class="wl-btn primary" onclick="welcomeGo('models')"><span data-i18n="开始配置模型">开始配置模型</span><svg class="ico" aria-hidden="true"><use href="#i-chevron-r"></use></svg></button>
944
+ <button class="wl-btn" onclick="welcomeGo('bindings')"><span data-i18n="绑定 CLI 智能体">绑定 CLI 智能体</span><svg class="ico" aria-hidden="true"><use href="#i-chevron-r"></use></svg></button>
945
+ <button class="wl-btn ghost" onclick="welcomeClose()"><span data-i18n="先跳过,直接体验">先跳过,直接体验</span></button>
946
+ </div>
947
+ <p class="welcome-foot" data-i18n="可随时在「设置 → 关于与更新」重新打开本引导。">可随时在「设置 → 关于与更新」重新打开本引导。</p>
948
+ </div>
949
+ <div class="welcome-right">
950
+ <h2 data-i18n="把任务交给蜂群">把任务交给蜂群</h2>
951
+ <p class="wr-sub" data-i18n="多智能体分工协作,成果自动落盘。">多智能体分工协作,成果自动落盘。</p>
952
+ <ul class="wr-feats">
953
+ <li><svg class="ico" aria-hidden="true"><use href="#i-workflow"></use></svg><div><b data-i18n="多智能体编排">多智能体编排</b><span data-i18n="规划 · 实现 · 评审 · 打磨,接棒交付">规划 · 实现 · 评审 · 打磨,接棒交付</span></div></li>
954
+ <li><svg class="ico" aria-hidden="true"><use href="#i-book-open"></use></svg><div><b data-i18n="连载写作">连载写作</b><span data-i18n="断点续跑 · 经验沉淀 · 作品资料">断点续跑 · 经验沉淀 · 作品资料</span></div></li>
955
+ <li><svg class="ico" aria-hidden="true"><use href="#i-blocks"></use></svg><div><b data-i18n="插件市场">插件市场</b><span data-i18n="600+ 技能,一键安装">600+ 技能,一键安装</span></div></li>
956
+ <li><svg class="ico" aria-hidden="true"><use href="#i-git-branch"></use></svg><div><b data-i18n="版本工作台">版本工作台</b><span data-i18n="任务分支隔离,改动可审可合">任务分支隔离,改动可审可合</span></div></li>
957
+ <li><svg class="ico" aria-hidden="true"><use href="#i-calendar-days"></use></svg><div><b data-i18n="自动化">自动化</b><span data-i18n="定时任务,无人值守">定时任务,无人值守</span></div></li>
958
+ </ul>
959
+ </div>
960
+ </div>
961
+ </div>
962
+
870
963
  <script src="qrcode.js"></script>
871
964
  <script src="i18n.js"></script>
872
965
  <script src="app.js"></script>