codebee 0.1.103 → 0.1.105

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (128) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/LICENSE +21 -21
  3. package/README.md +5 -3
  4. package/app/core/acceptance.py +100 -100
  5. package/app/core/acp_client.py +457 -457
  6. package/app/core/aiflavor.py +197 -197
  7. package/app/core/analytics.py +38 -38
  8. package/app/core/artifacts.py +148 -148
  9. package/app/core/assets.py +110 -110
  10. package/app/core/attachments.py +623 -623
  11. package/app/core/audit.py +30 -30
  12. package/app/core/backend_profiles.py +188 -188
  13. package/app/core/backup.py +470 -470
  14. package/app/core/beekeeper.py +183 -183
  15. package/app/core/benchstore.py +102 -102
  16. package/app/core/bookmeta.py +1036 -1036
  17. package/app/core/bookmeta_catalog.py +180 -180
  18. package/app/core/branching.py +137 -137
  19. package/app/core/capability.py +144 -144
  20. package/app/core/chaptersafe.py +32 -32
  21. package/app/core/checkpoints.py +48 -5
  22. package/app/core/cleanup.py +303 -303
  23. package/app/core/command_auth.py +302 -302
  24. package/app/core/compaction.py +201 -201
  25. package/app/core/contracts.py +255 -255
  26. package/app/core/covergen.py +356 -356
  27. package/app/core/defectretro.py +43 -43
  28. package/app/core/diagnostics.py +114 -114
  29. package/app/core/dispatch_log.py +128 -128
  30. package/app/core/env_scrub.py +85 -85
  31. package/app/core/errorlog.py +137 -137
  32. package/app/core/eval_matrix.py +91 -91
  33. package/app/core/evaluation.py +174 -174
  34. package/app/core/failure_notify.py +290 -290
  35. package/app/core/flow_graph.py +33 -33
  36. package/app/core/goal_service.py +167 -167
  37. package/app/core/health.py +389 -389
  38. package/app/core/history.py +38 -38
  39. package/app/core/hooks.py +162 -162
  40. package/app/core/knowledge_pipeline.py +86 -86
  41. package/app/core/manager.py +2386 -2385
  42. package/app/core/mocks.py +64 -64
  43. package/app/core/notify.py +201 -201
  44. package/app/core/novel_quality.py +285 -181
  45. package/app/core/openapi.py +246 -217
  46. package/app/core/operations.py +228 -228
  47. package/app/core/paihang.py +145 -145
  48. package/app/core/pipeline.py +81 -11
  49. package/app/core/planner.py +7 -0
  50. package/app/core/portguard.py +111 -111
  51. package/app/core/presence.py +77 -77
  52. package/app/core/preview.py +293 -293
  53. package/app/core/project_memory.py +252 -206
  54. package/app/core/prompt_guard.py +78 -78
  55. package/app/core/publish/__init__.py +7 -7
  56. package/app/core/publish/auto.py +659 -659
  57. package/app/core/publish/chaprows.py +138 -138
  58. package/app/core/publish/flows-fanqie-calibrated.json +442 -442
  59. package/app/core/publish/manager.py +1185 -1185
  60. package/app/core/publish/qimao.py +193 -193
  61. package/app/core/publish/volumes.py +108 -108
  62. package/app/core/publish/ws.py +139 -139
  63. package/app/core/quality_gate.py +201 -201
  64. package/app/core/redact.py +38 -38
  65. package/app/core/registry.py +35 -0
  66. package/app/core/repeat_guard.py +129 -129
  67. package/app/core/retrieval.py +137 -137
  68. package/app/core/review_requests.py +119 -0
  69. package/app/core/runner.py +5 -1
  70. package/app/core/sandbox_runtime.py +95 -95
  71. package/app/core/selfupdate.py +384 -384
  72. package/app/core/session_log.py +161 -161
  73. package/app/core/sessions.py +312 -312
  74. package/app/core/settings.py +215 -215
  75. package/app/core/settings_schema.py +282 -282
  76. package/app/core/share_page.py +114 -114
  77. package/app/core/skill_scan.py +139 -139
  78. package/app/core/skillpacks/market/character-bible.md +66 -66
  79. package/app/core/skillpacks/market/code-risk-checklist.md +58 -58
  80. package/app/core/skillpacks/market/git-workflow.md +57 -57
  81. package/app/core/skillpacks/market/release-notes.md +72 -72
  82. package/app/core/skillpacks/market/weekly-report.md +71 -71
  83. package/app/core/skillpacks/market/worldview-consistency.md +70 -70
  84. package/app/core/step_runner.py +132 -132
  85. package/app/core/story_tracking.py +275 -275
  86. package/app/core/task_compile.py +199 -199
  87. package/app/core/telemetry.py +292 -292
  88. package/app/core/tlsctx.py +64 -64
  89. package/app/core/token_meter.py +147 -147
  90. package/app/core/tool_outputs.py +107 -107
  91. package/app/core/tracing.py +207 -207
  92. package/app/core/upstream.py +41 -41
  93. package/app/core/usage.py +1038 -1038
  94. package/app/core/volumes.py +389 -389
  95. package/app/core/webhooks.py +89 -89
  96. package/app/core/wxdigest.py +865 -865
  97. package/app/core/zentao.py +2692 -2692
  98. package/app/main.py +43 -0
  99. package/app/mcp_server.py +244 -244
  100. package/app/pick_dialog.py +110 -110
  101. package/app/ui/app.js +21 -2
  102. package/app/ui/artdiff.js +74 -74
  103. package/app/ui/hive3d.js +54 -31
  104. package/app/ui/i18n.js +32 -1
  105. package/app/ui/icons/bee.svg +79 -79
  106. package/app/ui/index.html +1 -0
  107. package/app/ui/manifest.json +16 -16
  108. package/app/ui/qrcode.js +2297 -2297
  109. package/bin/tutti.js +147 -147
  110. package/package.json +1 -1
  111. package/tools/wx_reader.py +261 -261
  112. package/app/.playwright-cli/console-2026-09-23T08-26-03-635Z.log +0 -88
  113. package/app/.playwright-cli/page-2026-09-23T08-26-03-845Z.yml +0 -126
  114. package/app/.playwright-cli/page-2026-09-23T08-29-44-203Z.png +0 -0
  115. package/app/.playwright-cli/page-2026-09-23T08-35-42-046Z.yml +0 -210
  116. package/app/.playwright-cli/page-2026-09-23T08-36-52-858Z.png +0 -0
  117. package/app/.playwright-cli/page-2026-09-23T08-37-33-938Z.png +0 -0
  118. package/app/.playwright-cli/run-detail-after.png +0 -0
  119. package/app/output/_createbook_body.json +0 -1
  120. package/app/output/_probe_fq_click.py +0 -50
  121. package/app/output/_probe_fq_form.py +0 -42
  122. package/app/output/_probe_fq_modal.py +0 -55
  123. package/app/output/_probe_fq_points.py +0 -71
  124. package/app/output/_probe_fq_submit.py +0 -34
  125. package/app/output/_probe_fq_watch.py +0 -62
  126. package/app/output/workbench-clean-preview.jpg +0 -0
  127. package/app/output/workbench-reference-render.png +0 -0
  128. package/app/output/workbench-shell.png +0 -0
package/app/ui/i18n.js CHANGED
@@ -1024,7 +1024,7 @@
1024
1024
  "代码引擎": "Code engine",
1025
1025
  "评审引擎": "Review engine",
1026
1026
  "直连引擎": "Direct engine",
1027
- "实现 → 验证 → 评审": "Implement → verify → review",
1027
+ "实现 → 验证 →(复杂任务进)评审": "Implement → verify → review (complex tasks)",
1028
1028
  "起草 → 多维评审 → 门禁": "Draft → multi-dim review → gate",
1029
1029
  "大纲 → 逐章起草评审 → 合并(可续跑)": "Outline → per-chapter draft & review → merge (resumable)",
1030
1030
  "≈{0} tokens · {1}次": "≈{0} tokens · {1} runs",
@@ -1484,6 +1484,7 @@
1484
1484
  "已写入:": "Saved: ",
1485
1485
  "仅管理": "Management only",
1486
1486
  "参与编排": "Join orchestration",
1487
+ "支持续会话": "Session resume",
1487
1488
  "版本 ": "Version ",
1488
1489
  " → <b>": " → <b>",
1489
1490
  "(已是最新版本,无需升级)": " (already up to date — no upgrade needed)",
@@ -3219,6 +3220,36 @@
3219
3220
  "网址": "Address",
3220
3221
  "在系统浏览器打开": "Open in system browser",
3221
3222
  "CodeBee 浏览器": "CodeBee Browser",
3223
+ // —— EN 词条收尾补全(2026-10-12 落地班 G 专项:t() 字面量对账复跑发现的
3224
+ // 22 键缺口——回放审批 15 + ACP 后端配置 7,功能入库时漏配,英文界面中文裸奔;
3225
+ // 「第{0}次」系占位复合键,替代「第/次」分字拼接,中文渲染不变)——
3226
+ "有用": "Helpful",
3227
+ "无用": "Not helpful",
3228
+ "项目记忆反馈失败:": "Project memory feedback failed: ",
3229
+ "步骤回放预览": "Step replay preview",
3230
+ "未命名步骤": "Unnamed step",
3231
+ "第{0}次": "attempt {0}",
3232
+ "仅显示最近 200 个步骤,共 ": "Showing last 200 steps of ",
3233
+ "所有步骤均已完成,可人工复核后继续": "All steps completed — review manually to continue",
3234
+ "无法安全自动回放:": "Cannot auto-replay safely: ",
3235
+ "需要人工核对": "manual review required",
3236
+ "批准一次": "Approve once",
3237
+ "暂无待批准命令": "No commands pending approval",
3238
+ "授权状态加载失败:": "Failed to load auth status: ",
3239
+ "授权策略保存失败:": "Failed to save auth policy: ",
3240
+ "命令授权操作失败:": "Command auth action failed: ",
3241
+ "ACP 活动": "ACP activity",
3242
+ "暂无 ACP 后端": "No ACP backends yet",
3243
+ "ACP 配置加载失败:": "Failed to load ACP config: ",
3244
+ "参数必须是 JSON 数组": "Argument must be a JSON array",
3245
+ "ACP 后端已保存": "ACP backend saved",
3246
+ "ACP 保存失败:": "Failed to save ACP backend: ",
3247
+ "删除 ACP 失败:": "Failed to delete ACP backend: ",
3248
+ "查看注入预览": "Preview injection",
3249
+ "本次注入预览": "Injection preview",
3250
+ "暂无可注入记忆": "No memory would be injected",
3251
+ "已使用 {0}/{1} 字符": "Using {0}/{1} characters",
3252
+ "项目记忆预览失败:": "Memory preview failed: ",
3222
3253
  };
3223
3254
 
3224
3255
  // ---------- 工具 ----------
@@ -1,79 +1,79 @@
1
- <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
2
- <!-- CodeBee 写实小蜂:琥珀黑条纹腹 + 绒毛胸背 + 半透明翅脉 + 扇翅动画。
3
- 经 <img> 引用(独立文档,渐变 id 互不串扰);翅动媒体查询随系统 reduce-motion 关停。 -->
4
- <defs>
5
- <linearGradient id="cbAbd" x1="0" y1="0" x2="0" y2="1">
6
- <stop offset="0" stop-color="#ffcd66"/>
7
- <stop offset=".55" stop-color="#f0a92c"/>
8
- <stop offset="1" stop-color="#c67c12"/>
9
- </linearGradient>
10
- <radialGradient id="cbThx" cx=".38" cy=".3" r="1.05">
11
- <stop offset="0" stop-color="#7a5a26"/>
12
- <stop offset=".6" stop-color="#3d2c10"/>
13
- <stop offset="1" stop-color="#1f1505"/>
14
- </radialGradient>
15
- <linearGradient id="cbWing" x1="0" y1="0" x2="1" y2="1">
16
- <stop offset="0" stop-color="#ffffff" stop-opacity=".85"/>
17
- <stop offset="1" stop-color="#cfe0f5" stop-opacity=".16"/>
18
- </linearGradient>
19
- <clipPath id="cbAbdClip"><ellipse cx="32" cy="44" rx="11.5" ry="13.5"/></clipPath>
20
- </defs>
21
- <style>
22
- .wingL, .wingR { transform-box: view-box; }
23
- .wingL { transform-origin: 27px 21px; animation: cbFlapL .16s ease-in-out infinite alternate; }
24
- .wingR { transform-origin: 37px 21px; animation: cbFlapR .16s ease-in-out infinite alternate; }
25
- @keyframes cbFlapL { from { transform: rotate(-16deg); } to { transform: rotate(9deg); } }
26
- @keyframes cbFlapR { from { transform: rotate(16deg); } to { transform: rotate(-9deg); } }
27
- @media (prefers-reduced-motion: reduce) { .wingL, .wingR { animation: none; } }
28
- </style>
29
-
30
- <!-- 触角 -->
31
- <path d="M29.5 8C27.5 4.6 24.6 3 21.8 3.6" fill="none" stroke="#241a05" stroke-width="1.4" stroke-linecap="round"/>
32
- <path d="M34.5 8c2-3.4 4.9-5 7.7-4.4" fill="none" stroke="#241a05" stroke-width="1.4" stroke-linecap="round"/>
33
- <circle cx="21.6" cy="3.7" r="1.5" fill="#241a05"/>
34
- <circle cx="42.4" cy="3.7" r="1.5" fill="#241a05"/>
35
-
36
- <!-- 左翅(前后两片,扇翅绕胸侧基点) -->
37
- <g class="wingL">
38
- <ellipse cx="16.5" cy="19.5" rx="11.5" ry="4.8" transform="rotate(-34 26 20.5)"
39
- fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".65" stroke-width=".7"/>
40
- <ellipse cx="20" cy="24.5" rx="8.2" ry="3.5" transform="rotate(-22 26.5 24.5)"
41
- fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".55" stroke-width=".6"/>
42
- <g transform="rotate(-34 26 20.5)" fill="none" stroke="#a9c1dd" stroke-opacity=".4" stroke-width=".5">
43
- <path d="M26 20.5 8 15.5"/><path d="M26 21.5 7.5 20.5"/>
44
- </g>
45
- </g>
46
- <!-- 右翅 -->
47
- <g class="wingR">
48
- <ellipse cx="47.5" cy="19.5" rx="11.5" ry="4.8" transform="rotate(34 38 20.5)"
49
- fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".65" stroke-width=".7"/>
50
- <ellipse cx="44" cy="24.5" rx="8.2" ry="3.5" transform="rotate(22 37.5 24.5)"
51
- fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".55" stroke-width=".6"/>
52
- <g transform="rotate(34 38 20.5)" fill="none" stroke="#a9c1dd" stroke-opacity=".4" stroke-width=".5">
53
- <path d="M38 20.5 56 15.5"/><path d="M38 21.5 56.5 20.5"/>
54
- </g>
55
- </g>
56
-
57
- <!-- 腹部:琥珀底 + 黑条纹 + 高光 + 螫针 -->
58
- <ellipse cx="32" cy="44" rx="11.5" ry="13.5" fill="url(#cbAbd)"/>
59
- <g clip-path="url(#cbAbdClip)" fill="#241a05">
60
- <path d="M20 40.5 Q32 36.5 44 40.5 L44 46.5 Q32 42.5 20 46.5 Z"/>
61
- <path d="M20.5 49 Q32 45.5 43.5 49 L43.2 54.5 Q32 51.5 20.8 54.5 Z" opacity=".92"/>
62
- </g>
63
- <path d="M25.2 36q-2.6 4-2 9.5" stroke="#ffe9ad" stroke-opacity=".7" stroke-width="1.6" stroke-linecap="round" fill="none"/>
64
- <ellipse cx="32" cy="44" rx="11.5" ry="13.5" fill="none" stroke="#8a5a10" stroke-opacity=".35" stroke-width=".8"/>
65
- <path d="M32 58.5 29.8 54h4.4Z" fill="#241a05"/>
66
-
67
- <!-- 胸背:绒毛渐变 + 虚线描边模拟绒毛缘 -->
68
- <ellipse cx="32" cy="25.5" rx="9.2" ry="9.8" fill="url(#cbThx)"/>
69
- <ellipse cx="32" cy="25.5" rx="9.2" ry="9.8" fill="none" stroke="#8a6a2e" stroke-opacity=".45"
70
- stroke-width="1" stroke-dasharray="1.2 1.6"/>
71
-
72
- <!-- 头:复眼 + 高光 -->
73
- <circle cx="32" cy="12.8" r="6.3" fill="#241a05"/>
74
- <ellipse cx="28" cy="12.6" rx="2.4" ry="3" fill="#0e0a03"/>
75
- <ellipse cx="36" cy="12.6" rx="2.4" ry="3" fill="#0e0a03"/>
76
- <circle cx="28.9" cy="11.3" r=".7" fill="#7d6538" opacity=".8"/>
77
- <circle cx="36.9" cy="11.3" r=".7" fill="#7d6538" opacity=".8"/>
78
- <path d="M28.5 8.6q3.5-1.6 7 0" stroke="#8a6a2e" stroke-opacity=".55" stroke-width=".8" fill="none"/>
79
- </svg>
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
2
+ <!-- CodeBee 写实小蜂:琥珀黑条纹腹 + 绒毛胸背 + 半透明翅脉 + 扇翅动画。
3
+ 经 <img> 引用(独立文档,渐变 id 互不串扰);翅动媒体查询随系统 reduce-motion 关停。 -->
4
+ <defs>
5
+ <linearGradient id="cbAbd" x1="0" y1="0" x2="0" y2="1">
6
+ <stop offset="0" stop-color="#ffcd66"/>
7
+ <stop offset=".55" stop-color="#f0a92c"/>
8
+ <stop offset="1" stop-color="#c67c12"/>
9
+ </linearGradient>
10
+ <radialGradient id="cbThx" cx=".38" cy=".3" r="1.05">
11
+ <stop offset="0" stop-color="#7a5a26"/>
12
+ <stop offset=".6" stop-color="#3d2c10"/>
13
+ <stop offset="1" stop-color="#1f1505"/>
14
+ </radialGradient>
15
+ <linearGradient id="cbWing" x1="0" y1="0" x2="1" y2="1">
16
+ <stop offset="0" stop-color="#ffffff" stop-opacity=".85"/>
17
+ <stop offset="1" stop-color="#cfe0f5" stop-opacity=".16"/>
18
+ </linearGradient>
19
+ <clipPath id="cbAbdClip"><ellipse cx="32" cy="44" rx="11.5" ry="13.5"/></clipPath>
20
+ </defs>
21
+ <style>
22
+ .wingL, .wingR { transform-box: view-box; }
23
+ .wingL { transform-origin: 27px 21px; animation: cbFlapL .16s ease-in-out infinite alternate; }
24
+ .wingR { transform-origin: 37px 21px; animation: cbFlapR .16s ease-in-out infinite alternate; }
25
+ @keyframes cbFlapL { from { transform: rotate(-16deg); } to { transform: rotate(9deg); } }
26
+ @keyframes cbFlapR { from { transform: rotate(16deg); } to { transform: rotate(-9deg); } }
27
+ @media (prefers-reduced-motion: reduce) { .wingL, .wingR { animation: none; } }
28
+ </style>
29
+
30
+ <!-- 触角 -->
31
+ <path d="M29.5 8C27.5 4.6 24.6 3 21.8 3.6" fill="none" stroke="#241a05" stroke-width="1.4" stroke-linecap="round"/>
32
+ <path d="M34.5 8c2-3.4 4.9-5 7.7-4.4" fill="none" stroke="#241a05" stroke-width="1.4" stroke-linecap="round"/>
33
+ <circle cx="21.6" cy="3.7" r="1.5" fill="#241a05"/>
34
+ <circle cx="42.4" cy="3.7" r="1.5" fill="#241a05"/>
35
+
36
+ <!-- 左翅(前后两片,扇翅绕胸侧基点) -->
37
+ <g class="wingL">
38
+ <ellipse cx="16.5" cy="19.5" rx="11.5" ry="4.8" transform="rotate(-34 26 20.5)"
39
+ fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".65" stroke-width=".7"/>
40
+ <ellipse cx="20" cy="24.5" rx="8.2" ry="3.5" transform="rotate(-22 26.5 24.5)"
41
+ fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".55" stroke-width=".6"/>
42
+ <g transform="rotate(-34 26 20.5)" fill="none" stroke="#a9c1dd" stroke-opacity=".4" stroke-width=".5">
43
+ <path d="M26 20.5 8 15.5"/><path d="M26 21.5 7.5 20.5"/>
44
+ </g>
45
+ </g>
46
+ <!-- 右翅 -->
47
+ <g class="wingR">
48
+ <ellipse cx="47.5" cy="19.5" rx="11.5" ry="4.8" transform="rotate(34 38 20.5)"
49
+ fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".65" stroke-width=".7"/>
50
+ <ellipse cx="44" cy="24.5" rx="8.2" ry="3.5" transform="rotate(22 37.5 24.5)"
51
+ fill="url(#cbWing)" stroke="#e8f1fb" stroke-opacity=".55" stroke-width=".6"/>
52
+ <g transform="rotate(34 38 20.5)" fill="none" stroke="#a9c1dd" stroke-opacity=".4" stroke-width=".5">
53
+ <path d="M38 20.5 56 15.5"/><path d="M38 21.5 56.5 20.5"/>
54
+ </g>
55
+ </g>
56
+
57
+ <!-- 腹部:琥珀底 + 黑条纹 + 高光 + 螫针 -->
58
+ <ellipse cx="32" cy="44" rx="11.5" ry="13.5" fill="url(#cbAbd)"/>
59
+ <g clip-path="url(#cbAbdClip)" fill="#241a05">
60
+ <path d="M20 40.5 Q32 36.5 44 40.5 L44 46.5 Q32 42.5 20 46.5 Z"/>
61
+ <path d="M20.5 49 Q32 45.5 43.5 49 L43.2 54.5 Q32 51.5 20.8 54.5 Z" opacity=".92"/>
62
+ </g>
63
+ <path d="M25.2 36q-2.6 4-2 9.5" stroke="#ffe9ad" stroke-opacity=".7" stroke-width="1.6" stroke-linecap="round" fill="none"/>
64
+ <ellipse cx="32" cy="44" rx="11.5" ry="13.5" fill="none" stroke="#8a5a10" stroke-opacity=".35" stroke-width=".8"/>
65
+ <path d="M32 58.5 29.8 54h4.4Z" fill="#241a05"/>
66
+
67
+ <!-- 胸背:绒毛渐变 + 虚线描边模拟绒毛缘 -->
68
+ <ellipse cx="32" cy="25.5" rx="9.2" ry="9.8" fill="url(#cbThx)"/>
69
+ <ellipse cx="32" cy="25.5" rx="9.2" ry="9.8" fill="none" stroke="#8a6a2e" stroke-opacity=".45"
70
+ stroke-width="1" stroke-dasharray="1.2 1.6"/>
71
+
72
+ <!-- 头:复眼 + 高光 -->
73
+ <circle cx="32" cy="12.8" r="6.3" fill="#241a05"/>
74
+ <ellipse cx="28" cy="12.6" rx="2.4" ry="3" fill="#0e0a03"/>
75
+ <ellipse cx="36" cy="12.6" rx="2.4" ry="3" fill="#0e0a03"/>
76
+ <circle cx="28.9" cy="11.3" r=".7" fill="#7d6538" opacity=".8"/>
77
+ <circle cx="36.9" cy="11.3" r=".7" fill="#7d6538" opacity=".8"/>
78
+ <path d="M28.5 8.6q3.5-1.6 7 0" stroke="#8a6a2e" stroke-opacity=".55" stroke-width=".8" fill="none"/>
79
+ </svg>
package/app/ui/index.html CHANGED
@@ -744,6 +744,7 @@
744
744
  <div class="rd-checkpoints-head">
745
745
  <strong data-i18n="项目记忆治理">项目记忆治理</strong>
746
746
  <button id="rd-project-memory-refresh" type="button" class="ghost small" onclick="loadProjectMemory()" data-i18n="刷新记忆">刷新记忆</button>
747
+ <button id="rd-project-memory-preview" type="button" class="ghost small" onclick="previewProjectMemory()" data-i18n="查看注入预览">查看注入预览</button>
747
748
  </div>
748
749
  <div id="rd-project-memory-body" class="hint"></div>
749
750
  </section>
@@ -1,16 +1,16 @@
1
- {
2
- "name": "CodeBee · 多智能体编排台",
3
- "short_name": "CodeBee",
4
- "description": "All agents, one hive. 一句话目标,自动拆解、路由、执行、验证与跨厂商评审。",
5
- "start_url": "/",
6
- "scope": "/",
7
- "display": "standalone",
8
- "orientation": "portrait-primary",
9
- "background_color": "#0f1115",
10
- "theme_color": "#6d5df6",
11
- "icons": [
12
- { "src": "icons/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" },
13
- { "src": "icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" },
14
- { "src": "icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
15
- ]
16
- }
1
+ {
2
+ "name": "CodeBee · 多智能体编排台",
3
+ "short_name": "CodeBee",
4
+ "description": "All agents, one hive. 一句话目标,自动拆解、路由、执行、验证与跨厂商评审。",
5
+ "start_url": "/",
6
+ "scope": "/",
7
+ "display": "standalone",
8
+ "orientation": "portrait-primary",
9
+ "background_color": "#0f1115",
10
+ "theme_color": "#6d5df6",
11
+ "icons": [
12
+ { "src": "icons/icon-192.png", "sizes": "192x192", "type": "image/png", "purpose": "any" },
13
+ { "src": "icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "any" },
14
+ { "src": "icons/icon-512.png", "sizes": "512x512", "type": "image/png", "purpose": "maskable" }
15
+ ]
16
+ }