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/CHANGELOG.md +22 -0
- package/README.md +14 -8
- package/app/core/automation.py +19 -0
- package/app/core/backup.py +470 -0
- package/app/core/bookmeta.py +4 -1
- package/app/core/builtin_agent.py +33 -1
- package/app/core/cleanup.py +303 -0
- package/app/core/flows.py +1 -1
- package/app/core/jobs.py +22 -4
- package/app/core/knowledge.py +26 -4
- package/app/core/manager.py +25 -1
- package/app/core/market.py +14 -2
- package/app/core/modelhub.py +16 -0
- package/app/core/pipeline.py +136 -13
- package/app/core/planner.py +22 -4
- package/app/core/publish/manager.py +80 -3
- package/app/core/runner.py +127 -7
- package/app/core/selfupdate.py +80 -38
- package/app/core/settings.py +32 -1
- package/app/core/skill_scan.py +86 -0
- package/app/core/store.py +62 -8
- package/app/core/wxdigest.py +710 -0
- package/app/core/zentao.py +516 -50
- package/app/main.py +263 -1
- package/app/pet.py +1323 -0
- package/app/pet_bee.png +0 -0
- package/app/pet_bee_robot.png +0 -0
- package/app/pick_dialog.py +34 -2
- package/app/ui/app.js +11083 -10389
- package/app/ui/i18n.js +170 -9
- package/app/ui/index.html +132 -2
- package/app/ui/style.css +156 -2
- package/package.json +1 -1
package/app/ui/style.css
CHANGED
|
@@ -558,7 +558,7 @@ body.side-collapsed #sidebar { border-right: none; padding-left: 0; padding-righ
|
|
|
558
558
|
|
|
559
559
|
/* 左栏的「设置」导航(设置模式下替换任务树) */
|
|
560
560
|
.side-main { display: flex; flex-direction: column; flex: 1; min-height: 0; }
|
|
561
|
-
.side-settings { display: none; flex-direction: column; flex: 1; min-height: 0; gap: 2px; overflow-y: auto; }
|
|
561
|
+
.side-settings { display: none; flex-direction: column; flex: 1; min-height: 0; gap: 2px; overflow-y: auto; overflow-x: hidden; }
|
|
562
562
|
body.settings-mode .side-main { display: none; }
|
|
563
563
|
body.settings-mode .side-settings { display: flex; }
|
|
564
564
|
.set-back {
|
|
@@ -3376,7 +3376,8 @@ body::before {
|
|
|
3376
3376
|
.side-search { min-height: 38px; border-radius: 10px; background: color-mix(in srgb, var(--panel) 68%, transparent); }
|
|
3377
3377
|
.side-quick { margin-top: 8px; }
|
|
3378
3378
|
.qitem, .set-item { border-radius: 10px; min-height: 36px; transition: background .16s ease, color .16s ease, transform .16s ease; }
|
|
3379
|
-
.qitem
|
|
3379
|
+
/* 悬停位移只留给 .qitem:.set-item 所在的设置导航是独立滚动容器,右移 2px 会顶出横向滚动条 */
|
|
3380
|
+
.qitem:hover { transform: translateX(2px); }
|
|
3380
3381
|
.qitem.active, .set-item.active { background: color-mix(in srgb, var(--accent) 13%, var(--panel)); color: var(--text); }
|
|
3381
3382
|
.side-label { font-size: 10px; text-transform: uppercase; letter-spacing: .14em; font-weight: 700; }
|
|
3382
3383
|
.side-tasks { padding-top: 3px; }
|
|
@@ -5236,3 +5237,156 @@ body.welcome-open { overflow: hidden; }
|
|
|
5236
5237
|
/* —— 知识库:工具行(搜索框 + 状态过滤 chips 同排)—— */
|
|
5237
5238
|
.kb-toolbar { display: flex; align-items: center; gap: 10px; flex-wrap: wrap; margin: 10px 0 2px; }
|
|
5238
5239
|
.kb-toolbar input { flex: 1 1 220px; min-width: 180px; }
|
|
5240
|
+
/* 工具行内的 chips 不再各带 12px 下边距(否则这一行上下不对称) */
|
|
5241
|
+
.kb-toolbar .cat-chips { margin: 0; flex: none; }
|
|
5242
|
+
|
|
5243
|
+
/* —— 知识库卡片版式(2026-09-20)——
|
|
5244
|
+
* 共用 .card 的标题为 nowrap+ellipsis(为短标题的教训卡设计),知识条目标题长、
|
|
5245
|
+
* 又带多个标签,而标签是 flex:none——它先把整行宽度吃掉,标题被压成「多AI…」。
|
|
5246
|
+
* 这里只在知识库作用域内重排,不动共用类,避免波及经验库/市场等页面。 */
|
|
5247
|
+
/* min(380px,100%):窄屏(手机端面板不足 380px)时退化为单列,不横向溢出 */
|
|
5248
|
+
#kb-cards { grid-template-columns: repeat(auto-fill, minmax(min(380px, 100%), 1fr)); }
|
|
5249
|
+
#kb-cards .card { display: flex; flex-direction: column; position: relative; overflow: hidden; }
|
|
5250
|
+
/* 卡片顶部主题色渐变发丝线:随皮肤换色,给页面一点识别度(正式克制,不做整卡重底) */
|
|
5251
|
+
#kb-cards .card::before {
|
|
5252
|
+
content: ""; position: absolute; inset: 0 0 auto 0; height: 2px;
|
|
5253
|
+
background: linear-gradient(90deg, color-mix(in srgb, var(--accent) 60%, transparent), transparent 72%);
|
|
5254
|
+
opacity: .8; pointer-events: none;
|
|
5255
|
+
}
|
|
5256
|
+
#kb-cards .card .head { display: block; margin-bottom: 8px; }
|
|
5257
|
+
/* 标题独占首行,最多两行后省略(比单行截断可读得多) */
|
|
5258
|
+
#kb-cards .card .name {
|
|
5259
|
+
display: -webkit-box; -webkit-box-orient: vertical; -webkit-line-clamp: 2;
|
|
5260
|
+
overflow: hidden; white-space: normal; text-overflow: clip;
|
|
5261
|
+
font-size: 14.5px; line-height: 1.45; margin-bottom: 8px;
|
|
5262
|
+
}
|
|
5263
|
+
/* 状态徽章与用户标签合并为标题下方的单行元信息区(换行自适应),既不让标签抢
|
|
5264
|
+
* 标题宽度,也不额外多占一行 */
|
|
5265
|
+
#kb-cards .kb-meta { display: flex; flex-wrap: wrap; gap: 6px; }
|
|
5266
|
+
/* 用户标签:淡主题色底,与灰调状态徽章区分出「可点、是检索入口」 */
|
|
5267
|
+
#kb-cards .kb-meta .tag.kt {
|
|
5268
|
+
cursor: pointer; transition: color .14s, border-color .14s, background-color .14s;
|
|
5269
|
+
color: color-mix(in srgb, var(--accent) 78%, var(--text));
|
|
5270
|
+
border-color: color-mix(in srgb, var(--accent) 32%, var(--border));
|
|
5271
|
+
background: color-mix(in srgb, var(--accent) 9%, var(--panel2));
|
|
5272
|
+
}
|
|
5273
|
+
#kb-cards .kb-meta .tag.kt:hover {
|
|
5274
|
+
color: var(--accent);
|
|
5275
|
+
border-color: var(--accent);
|
|
5276
|
+
background: color-mix(in srgb, var(--accent) 16%, var(--panel2));
|
|
5277
|
+
}
|
|
5278
|
+
/* 草稿徽章的琥珀圆点(默认直接转正后,草稿是唯一要标出来的例外态) */
|
|
5279
|
+
#kb-cards .kb-meta .tag .cdot { background: currentColor; width: 7px; height: 7px; }
|
|
5280
|
+
#kb-cards .card .note { margin-bottom: 8px; }
|
|
5281
|
+
#kb-cards .card .facts { margin-bottom: 0; }
|
|
5282
|
+
#kb-cards .card .facts .sep { margin: 0 5px; }
|
|
5283
|
+
/* 操作行钉底并加发丝分隔线:同一行卡片按钮横向对齐,网格不再参差 */
|
|
5284
|
+
#kb-cards .card .ops {
|
|
5285
|
+
margin-top: auto; padding-top: 11px; border-top: 1px solid var(--border);
|
|
5286
|
+
}
|
|
5287
|
+
/* 标签 chips 可能有几十个:限高两行内滚动,别把条目挤到屏幕外 */
|
|
5288
|
+
#kb-tag-chips { max-height: 82px; overflow-y: auto; }
|
|
5289
|
+
|
|
5290
|
+
/* —— 群摘要蜜蜂坞(右下角悬浮蜜蜂 + 面板,core/wxdigest.py 的网页侧)—— */
|
|
5291
|
+
#bee-dock { position: fixed; right: 18px; bottom: 18px; z-index: 160;
|
|
5292
|
+
display: flex; flex-direction: column; align-items: flex-end; gap: 8px; }
|
|
5293
|
+
#bee-fab { position: relative; width: 46px; height: 46px; border-radius: 50%;
|
|
5294
|
+
border: 1px solid var(--border-strong); background: var(--panel); color: var(--text);
|
|
5295
|
+
cursor: pointer; display: flex; align-items: center; justify-content: center;
|
|
5296
|
+
box-shadow: var(--shadow); animation: beeBreath 3.2s ease-in-out infinite; }
|
|
5297
|
+
#bee-fab:hover { border-color: var(--warn); }
|
|
5298
|
+
#bee-fab .ico-lg { width: 26px; height: 26px; color: var(--warn); }
|
|
5299
|
+
#bee-badge { position: absolute; top: -5px; right: -5px; min-width: 18px; height: 18px;
|
|
5300
|
+
padding: 0 4px; border-radius: 9px; background: var(--bad); color: #fff;
|
|
5301
|
+
font-size: 11px; font-weight: 700; line-height: 18px; text-align: center; }
|
|
5302
|
+
#bee-bubble { max-width: 260px; background: var(--panel); color: var(--text);
|
|
5303
|
+
border: 1px solid var(--border-strong); border-radius: 12px;
|
|
5304
|
+
padding: 8px 12px; font-size: 12.5px; box-shadow: var(--shadow); }
|
|
5305
|
+
@keyframes beeBreath { 0%, 100% { transform: translateY(0); } 50% { transform: translateY(-3px); } }
|
|
5306
|
+
@media (prefers-reduced-motion: reduce) { #bee-fab { animation: none; } }
|
|
5307
|
+
#bee-panel { position: fixed; right: 18px; bottom: 72px; width: 380px;
|
|
5308
|
+
max-width: calc(100vw - 36px); max-height: min(560px, 72vh); z-index: 161;
|
|
5309
|
+
display: flex; flex-direction: column; overflow: hidden;
|
|
5310
|
+
background: var(--panel); border: 1px solid var(--border-strong);
|
|
5311
|
+
border-radius: var(--r-lg); box-shadow: var(--shadow); }
|
|
5312
|
+
.bee-head { display: flex; align-items: center; gap: 8px; padding: 10px 12px;
|
|
5313
|
+
border-bottom: 1px solid var(--border); }
|
|
5314
|
+
.bee-head b { font-size: 14px; }
|
|
5315
|
+
.bee-head .spacer { flex: 1; }
|
|
5316
|
+
.bee-list { overflow: auto; padding: 10px 12px; display: flex;
|
|
5317
|
+
flex-direction: column; gap: 10px; min-height: 46px; }
|
|
5318
|
+
.bee-digest { border: 1px solid var(--border); border-radius: var(--r-md); padding: 8px 10px; }
|
|
5319
|
+
.bee-digest-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 6px; }
|
|
5320
|
+
.bee-tag { background: rgba(245, 185, 66, .16); color: var(--warn);
|
|
5321
|
+
border-radius: 6px; padding: 1px 8px; font-size: 12px; font-weight: 600; }
|
|
5322
|
+
.bee-meta { font-size: 11.5px; color: var(--muted); }
|
|
5323
|
+
.bee-text { font-size: 12.5px; line-height: 1.55; white-space: pre-wrap;
|
|
5324
|
+
word-break: break-word; color: var(--text); }
|
|
5325
|
+
.bee-empty { color: var(--muted); font-size: 12.5px; text-align: center; padding: 16px 0; }
|
|
5326
|
+
.bee-cfg { border-top: 1px solid var(--border); padding: 10px 12px;
|
|
5327
|
+
display: flex; flex-direction: column; gap: 8px; overflow: auto; }
|
|
5328
|
+
.bee-lab { font-size: 12.5px; color: var(--muted); }
|
|
5329
|
+
.bee-dir-row { display: flex; gap: 6px; }
|
|
5330
|
+
.bee-dir-row input { flex: 1; min-width: 0; }
|
|
5331
|
+
.bee-row2 { display: flex; gap: 12px; flex-wrap: wrap; }
|
|
5332
|
+
.bee-row2 label { display: flex; align-items: center; gap: 6px;
|
|
5333
|
+
font-size: 12.5px; color: var(--muted); }
|
|
5334
|
+
.bee-row2 input { width: 84px; }
|
|
5335
|
+
.bee-status { font-size: 11.5px; color: var(--muted); min-height: 15px; line-height: 1.5; }
|
|
5336
|
+
.bee-note { font-size: 11.5px; color: var(--muted); line-height: 1.5; margin: 0; }
|
|
5337
|
+
#bee-cfg .primary { align-self: flex-start; }
|
|
5338
|
+
|
|
5339
|
+
/* 登记已有作品:内联表单行(无书卡的补救口,2026-09-20) */
|
|
5340
|
+
.pb-reg { width: 100%; display: flex; flex-wrap: wrap; align-items: center; gap: 6px; }
|
|
5341
|
+
.pb-reg input { flex: 1 1 150px; min-width: 0; font-size: 12.5px; padding: 5px 10px; }
|
|
5342
|
+
|
|
5343
|
+
/* 数据与备份页:清理预估行 + 消息块内的警示色(2026-09-20) */
|
|
5344
|
+
.cl-row { display: flex; align-items: baseline; gap: 8px; padding: 6px 0;
|
|
5345
|
+
border-bottom: 1px solid var(--line, rgba(128,128,128,.15)); }
|
|
5346
|
+
.cl-row b { font-size: 12.5px; white-space: nowrap; }
|
|
5347
|
+
.cl-row .hint { flex: 1 1 auto; min-width: 0; margin: 0; }
|
|
5348
|
+
.cl-row .tag { white-space: nowrap; }
|
|
5349
|
+
.msg .bad { color: var(--bad); }
|
|
5350
|
+
.msg .ok { color: var(--ok, #4ade80); }
|
|
5351
|
+
|
|
5352
|
+
/* —— 群摘要·微信直连(群选择器,2026-09-20)—— */
|
|
5353
|
+
#bee-reader-box { display: flex; flex-direction: column; gap: 8px;
|
|
5354
|
+
border-left: 2px solid var(--border-strong); padding-left: 10px; }
|
|
5355
|
+
#bee-reader-box input[type="text"] { width: 100%; }
|
|
5356
|
+
.bee-groups-head { display: flex; gap: 6px; }
|
|
5357
|
+
.bee-groups-head input { flex: 1; min-width: 0; }
|
|
5358
|
+
.bee-groups-list { max-height: 220px; overflow: auto; display: flex;
|
|
5359
|
+
flex-direction: column; gap: 2px; border: 1px solid var(--border);
|
|
5360
|
+
border-radius: var(--r-sm); padding: 4px; }
|
|
5361
|
+
.bee-g { display: flex; align-items: center; gap: 8px; padding: 3px 6px;
|
|
5362
|
+
border-radius: 6px; cursor: pointer; font-size: 12.5px; }
|
|
5363
|
+
.bee-g:hover { background: var(--panel2); }
|
|
5364
|
+
.bee-g.on { background: rgba(245, 185, 66, .12); }
|
|
5365
|
+
.bee-g span:first-of-type { flex: 1; overflow: hidden; text-overflow: ellipsis;
|
|
5366
|
+
white-space: nowrap; }
|
|
5367
|
+
.bee-g input { flex: none; }
|
|
5368
|
+
|
|
5369
|
+
/* ---------------- 禅道·仓库工作目录行(追加于文件尾防并行重排) ---------------- */
|
|
5370
|
+
.zt-wd-row { display: flex; align-items: center; gap: 6px; min-width: 0; max-width: 560px; }
|
|
5371
|
+
.zt-wd-row .zt-p-wd { flex: 1; min-width: 0; }
|
|
5372
|
+
.zt-wd-row button { flex: none; }
|
|
5373
|
+
|
|
5374
|
+
/* ---------------- 群摘要·摘要卡「转知识库」按钮(追加于文件尾防并行重排) ---------------- */
|
|
5375
|
+
.bee-digest-head .bee-to-kb { margin-left: auto; flex: none; }
|
|
5376
|
+
|
|
5377
|
+
/* ---------------- 禅道·档案卡窄卡溢出修复(追加于文件尾防并行重排) ----------------
|
|
5378
|
+
* 病根:值列 minmax(240px,560px) + 标签列 150px + gap 最少 404px,档案卡实宽 ~385px,
|
|
5379
|
+
* 值列整体被卡片右缘裁掉;且仓库三件套 input 无 type 属性,吃不到 width:100% 规则。
|
|
5380
|
+
* 修法:标签列保持固定 150px(auto 会吞掉宽卡片的剩余自由空间,把禅道连接/自动化卡
|
|
5381
|
+
* 的输入框推到页面中部、开关行被拉宽——已踩,勿改回),仅把值列下限降为可收缩;
|
|
5382
|
+
* :not 排除开关行(zt-grid-toggles 有自己的 auto-fill 口径)。 */
|
|
5383
|
+
@media (min-width: 901px) {
|
|
5384
|
+
.zt-grid:not(.zt-grid-toggles) { grid-template-columns: 150px minmax(0, 560px); }
|
|
5385
|
+
}
|
|
5386
|
+
.zt-grid .zt-p-wd, .zt-grid .zt-p-rev, .zt-grid .zt-p-verify,
|
|
5387
|
+
.zt-grid .zt-p-hint, .zt-grid .zt-p-assigned, .zt-grid .zt-p-owner {
|
|
5388
|
+
width: 100%; max-width: 560px;
|
|
5389
|
+
}
|
|
5390
|
+
|
|
5391
|
+
/* 对话页语音输入按钮(借鉴 paseo voice):识别中高亮呼吸 */
|
|
5392
|
+
#rd-chat-voice.live { color: var(--bad); animation: cb-rise .6s ease infinite alternate; }
|
package/package.json
CHANGED