codebee 0.1.55 → 0.1.56

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/board.css CHANGED
@@ -388,3 +388,263 @@ button, input { font: inherit; }
388
388
  @media (prefers-reduced-motion: reduce) {
389
389
  *, *::before, *::after { animation-duration: .001ms !important; animation-iteration-count: 1 !important; scroll-behavior: auto !important; }
390
390
  }
391
+
392
+ /* ---------------------------------------------------------------- v2:克制的运营控制台
393
+ 旧版的问题是装饰密度高于信息密度。这里保留现有 DOM 和动态行为,
394
+ 重置为更温暖的石墨蓝色板、少量强调色和更清晰的字号层级。 */
395
+ :root {
396
+ --bg: #081116;
397
+ --bg-deep: #050b0e;
398
+ --panel: #101b20;
399
+ --panel-hi: #16252b;
400
+ --panel-soft: #192a30;
401
+ --line: #304249;
402
+ --line-soft: #24353b;
403
+ --text: #f4efe5;
404
+ --muted: #98aaa9;
405
+ --muted-2: #657a7d;
406
+ --amber: #e8ad4d;
407
+ --amber-hot: #ffd071;
408
+ --cyan: #78c9c0;
409
+ --blue: #9db9ad;
410
+ --violet: #9aafa7;
411
+ --green: #82d3a2;
412
+ --red: #ea7e78;
413
+ }
414
+
415
+ body {
416
+ background:
417
+ radial-gradient(900px 460px at 84% -18%, #31545a26, transparent 68%),
418
+ radial-gradient(720px 520px at -14% 108%, #6b4c2420, transparent 72%),
419
+ linear-gradient(145deg, #09151a, var(--bg) 54%, #0a1418);
420
+ }
421
+ body::before {
422
+ opacity: .07;
423
+ background-size: 72px 72px;
424
+ }
425
+ body::after { box-shadow: inset 0 0 100px #020708aa; }
426
+
427
+ .panel {
428
+ background: linear-gradient(145deg, #1a2c3214, transparent 44%), var(--panel);
429
+ border-color: #385058;
430
+ border-radius: 11px;
431
+ box-shadow: 0 12px 28px #02070845, inset 0 1px #ffffff07;
432
+ }
433
+ .panel::after { display: none; }
434
+
435
+ #hd {
436
+ height: 64px;
437
+ padding: 0 28px;
438
+ border-bottom-color: #26383e;
439
+ background: #081217e8;
440
+ }
441
+ #hd::after {
442
+ left: 28px;
443
+ right: 28px;
444
+ background: linear-gradient(90deg, var(--amber), #78c9c055 48%, transparent 80%);
445
+ opacity: .5;
446
+ }
447
+ .hd-brand { min-width: 270px; }
448
+ .brand-mark { filter: none; }
449
+ .brand-mark::before, .brand-mark::after { border-color: #e8ad4d88; background: #e8ad4d12; }
450
+ .brand-mark i { background: linear-gradient(90deg, #e8ad4d 0 28%, #17252a 28% 44%, #e8ad4d 44% 70%, #17252a 70% 86%, #e8ad4d 86%); }
451
+ .brand-mark i:nth-child(2) { background: var(--amber-hot); box-shadow: 15px 0 var(--amber-hot); }
452
+ .brand-kicker { color: var(--amber-hot); letter-spacing: 2.2px; }
453
+ .hd-name { color: var(--text); font-size: 20px; letter-spacing: .5px; }
454
+ .hd-center { color: var(--muted); font-size: 11px; letter-spacing: .6px; }
455
+ .live-pip { background: var(--green); box-shadow: 0 0 0 4px #82d3a214, 0 0 10px #82d3a266; }
456
+ .hd-updated { color: var(--cyan); }
457
+ .hd-pill { color: var(--muted); border-color: #344950; background: #ffffff04; }
458
+ .hd-clock { color: var(--cyan); text-shadow: none; font-size: 22px; white-space: nowrap; }
459
+
460
+ #board {
461
+ height: calc(100vh - 64px);
462
+ padding: 18px 28px 22px;
463
+ grid-template-rows: 164px 96px minmax(0, 1fr);
464
+ gap: 12px;
465
+ }
466
+ .eyebrow { color: var(--muted); font-size: 10px; letter-spacing: 1.5px; }
467
+ .eyebrow > span:first-child { width: 5px; height: 5px; box-shadow: none; }
468
+
469
+ .overview {
470
+ grid-template-columns: minmax(0, 1fr) 300px 230px;
471
+ border-radius: 11px;
472
+ background: linear-gradient(110deg, #17282e, #13232a 58%, #101e23);
473
+ }
474
+ .overview::before { content: "OPERATIONS / STATUS"; right: 20px; top: 14px; color: #98aaa91e; letter-spacing: 1.4px; }
475
+ .overview-copy { padding: 24px 26px 20px; }
476
+ .overview-line { align-items: center; gap: 28px; }
477
+ .overview-line h1 { color: var(--text); font-size: clamp(28px, 2.4vw, 39px); letter-spacing: -.8px; }
478
+ .overview-line p { max-width: 610px; margin-top: 11px; color: var(--muted); font-size: 13px; }
479
+ .hero-count { padding-right: 0; }
480
+ .hero-count strong { color: var(--amber-hot); font-size: 48px; text-shadow: none; }
481
+ .hero-count span { color: var(--muted); font-size: 10px; letter-spacing: .7px; }
482
+ .overview-foot { gap: 20px; }
483
+ .signal-chip { color: var(--green); font-size: 12px; }
484
+ .signal-chip i { width: 6px; height: 6px; box-shadow: none; }
485
+ .overview-note { color: var(--muted-2); font-size: 10px; }
486
+ .overview-visual {
487
+ border-left-color: #304249;
488
+ border-right-color: #304249;
489
+ background: radial-gradient(circle at center, #78c9c014, transparent 63%);
490
+ }
491
+ .overview-visual::before { opacity: .25; }
492
+ .orbit { border-color: #78c9c070; }
493
+ .orbit-b { border-color: #e8ad4d66; }
494
+ .orbit-dot { box-shadow: none; }
495
+ .dot-b { box-shadow: none; }
496
+ .dot-c { background: var(--violet); box-shadow: none; }
497
+ .core-glow { background: #78c9c010; filter: blur(12px); }
498
+ .overview-core {
499
+ width: 82px;
500
+ height: 82px;
501
+ border-color: #78c9c0aa;
502
+ background: #0c191de8;
503
+ box-shadow: inset 0 0 20px #78c9c010;
504
+ }
505
+ .overview-core strong { color: var(--cyan); font-size: 29px; }
506
+ .overview-core span { color: var(--muted); letter-spacing: .8px; }
507
+ .overview-aside { padding: 24px 20px 18px; background: #0b171b44; }
508
+ .aside-label { color: var(--muted); letter-spacing: 1.5px; }
509
+ .pool-meter { height: 6px; background: #294048; margin-top: 12px; }
510
+ .pool-meter i { background: linear-gradient(90deg, var(--cyan), var(--green)); box-shadow: none; }
511
+ .pool-readout { color: var(--muted); }
512
+ .pool-readout strong { color: var(--text); font-size: 25px; }
513
+ .aside-divider { background: #304249; margin: 16px 0 10px; }
514
+ .aside-row { color: var(--muted); font-size: 12px; padding: 4px 0; }
515
+ .aside-row b { color: var(--text); font-size: 13px; }
516
+
517
+ #kpis { gap: 10px; }
518
+ .kpi {
519
+ padding: 14px 17px 12px;
520
+ border-color: #30464c;
521
+ border-radius: 9px;
522
+ background: #122128;
523
+ box-shadow: inset 0 1px #ffffff08;
524
+ }
525
+ .kpi::before { width: 3px; box-shadow: none; }
526
+ .kpi-head { color: var(--muted); font-size: 11px; letter-spacing: .6px; }
527
+ .kpi-icon { width: 6px; height: 6px; opacity: .8; }
528
+ .k-num { margin-top: 8px; color: var(--text); font-size: 28px; }
529
+ .k-run .k-num { color: var(--amber-hot); }
530
+ .k-fail .k-num { color: var(--red); }
531
+ .k-tok .k-num { color: #d3e0d7; }
532
+ .kpi-foot { margin-top: 9px; color: var(--muted-2); font-size: 11px; }
533
+ .kpi-foot b { color: var(--kc); font-size: 9px; letter-spacing: 1px; }
534
+
535
+ #main { grid-template-columns: minmax(0, 1fr) 360px; gap: 12px; }
536
+ #wall { border-radius: 11px; }
537
+ .panel-head { padding: 18px 20px 15px; border-bottom-color: #304249; }
538
+ .panel-head h2, .rail-head h3 { color: var(--text); font-size: 18px; letter-spacing: 0; }
539
+ .panel-head h2 { margin-top: 6px; }
540
+ .panel-head-right { gap: 12px; }
541
+ .live-count { color: var(--amber-hot); border-color: #e8ad4d80; background: #e8ad4d12; border-radius: 5px; padding: 5px 9px; font-size: 10px; letter-spacing: .8px; }
542
+ .mode-label { color: var(--muted-2); font-size: 10px; letter-spacing: .5px; }
543
+ #wall-cards {
544
+ gap: 14px;
545
+ padding: 17px 18px 16px;
546
+ background: linear-gradient(180deg, #0e1b20, #0c181d);
547
+ }
548
+ #wall-cards::-webkit-scrollbar, #recent::-webkit-scrollbar { width: 6px; }
549
+ #wall-cards::-webkit-scrollbar-thumb, #recent::-webkit-scrollbar-thumb { background: #4d656b66; }
550
+ .card {
551
+ min-height: 145px;
552
+ padding: 16px 17px 15px 19px;
553
+ border-color: #3a565c;
554
+ border-radius: 9px;
555
+ background: #0b181d;
556
+ box-shadow: 0 8px 18px #02070826;
557
+ }
558
+ .card::before { top: 16px; bottom: 16px; width: 3px; box-shadow: none; }
559
+ .card::after { color: #e8ad4d88; top: 15px; right: 16px; }
560
+ .card-top { gap: 9px; padding-right: 42px; }
561
+ .c-type { color: var(--amber-hot); border-color: #e8ad4d66; background: #e8ad4d12; font-size: 10px; }
562
+ .c-title { color: var(--text); font-size: 15px; font-weight: 650; }
563
+ .c-elapsed { color: var(--cyan); font-size: 12px; }
564
+ .c-meta { gap: 6px; margin-top: 13px; }
565
+ .b { max-width: 170px; padding: 4px 7px; border-color: #3b555b; background: #ffffff04; color: var(--muted); font-size: 10px; }
566
+ .b-model { color: #a8d6d0; border-color: #78c9c066; background: #78c9c00c; }
567
+ .b-prov { color: #c2d0c8; border-color: #9aafa766; background: #9aafa70b; }
568
+ .b-agent { color: #b1c3c2; }
569
+ .c-run-tok { color: var(--green); }
570
+ .c-steps { gap: 5px; margin-top: 15px; }
571
+ .c-steps i { height: 5px; background: #294148; }
572
+ .c-steps i.d { background: var(--green); box-shadow: none; }
573
+ .c-steps i.r { background: var(--amber); box-shadow: none; }
574
+ .c-stepinfo { gap: 9px; margin-top: 9px; }
575
+ .c-stepinfo .no { color: var(--amber); }
576
+ .c-stepinfo .ag { color: var(--muted); }
577
+ .c-stepinfo .sm { color: #c2d0ce; font-size: 12px; }
578
+ .c-live { margin-top: 12px; padding: 9px 11px; border-color: #2d454a; background: #071216; }
579
+ .c-live-tag { color: var(--cyan); }
580
+ .c-live-text { color: #9ab8b4; font-size: 10px; }
581
+ .c-pct { margin-top: 10px; color: var(--muted-2); font-size: 10px; }
582
+
583
+ .wall-empty::before { color: #98aaa914; letter-spacing: 2px; }
584
+ .empty-orbit::before, .empty-orbit::after { border-color: #78c9c060; }
585
+ .empty-orbit::after { border-color: #e8ad4d55; }
586
+ .empty-orbit i { box-shadow: none; }
587
+ .empty-orbit i:nth-child(2) { box-shadow: none; }
588
+ .idle-t1 { color: var(--text); font-size: 21px; }
589
+ .idle-t2 { color: var(--muted); font-size: 13px; }
590
+ .empty-meta { color: var(--muted-2); font-size: 10px; }
591
+ .empty-meta i { box-shadow: none; }
592
+ .queue-row { min-height: 51px; padding: 0 18px; border-top-color: #304249; background: #0c191d; }
593
+ .q-label { color: var(--cyan); font-size: 11px; }
594
+ .q-label b { border-color: #78c9c066; background: #78c9c010; }
595
+ #queue-chips .chip { border-color: #3b5a5f; background: #78c9c008; color: #b9d1cd; }
596
+
597
+ #rail { gap: 12px; }
598
+ .rail-card { border-radius: 11px; padding: 16px 17px; }
599
+ .rail-trend { flex: 0 0 153px; }
600
+ .rail-models { flex: 0 0 174px; }
601
+ .rail-head h3 { margin-top: 6px; font-size: 15px; }
602
+ .rail-badge { border-color: #3a555b; color: var(--muted); border-radius: 4px; }
603
+ .trend { height: 84px; gap: 9px; padding-top: 13px; }
604
+ .trend .bar i { background: linear-gradient(180deg, var(--cyan), #6aa9a2); box-shadow: none; }
605
+ .trend .bar.zero i { background: #294148; }
606
+ .trend .bar b { color: var(--muted-2); }
607
+ .models { gap: 10px; margin-top: 15px; }
608
+ .model-row { grid-template-columns: 108px minmax(0, 1fr) 50px; gap: 8px; }
609
+ .model-row .nm { color: #c5d5d2; font-size: 11px; }
610
+ .model-row .tk { height: 6px; background: #294148; }
611
+ .model-row .tk i { background: linear-gradient(90deg, var(--cyan), var(--blue)); box-shadow: none; }
612
+ .model-row .vl { color: var(--muted); }
613
+ #recent { margin-top: 14px; }
614
+ .r-row { padding: 9px 0; border-bottom-color: #2d424733; }
615
+ .r-dot.done { box-shadow: none; }
616
+ .r-dot.failed { box-shadow: none; }
617
+ .r-t { color: #cad8d5; font-size: 12px; }
618
+ .r-d { color: var(--muted-2); }
619
+
620
+ @media (max-width: 1280px) {
621
+ #board { padding-left: 20px; padding-right: 20px; }
622
+ #hd { padding-left: 20px; padding-right: 20px; }
623
+ #hd::after { left: 20px; right: 20px; }
624
+ .overview { grid-template-columns: minmax(0, 1fr) 230px 205px; }
625
+ #main { grid-template-columns: minmax(0, 1fr) 330px; }
626
+ }
627
+ @media (max-width: 1050px) {
628
+ #board { grid-template-rows: 164px auto minmax(520px, auto); }
629
+ #main { grid-template-columns: minmax(0, 1fr); }
630
+ #rail { grid-template-columns: repeat(2, minmax(0, 1fr)); }
631
+ }
632
+ @media (max-width: 720px) {
633
+ #hd { height: 60px; padding: 0 14px; }
634
+ #hd::after { left: 14px; right: 14px; }
635
+ .hd-right { min-width: 0; width: auto; flex-shrink: 0; }
636
+ #board { height: auto; min-height: calc(100vh - 60px); padding: 14px; grid-template-rows: 260px auto auto; gap: 12px; }
637
+ .overview { grid-template-columns: 1fr 130px; grid-template-rows: 1fr 86px; }
638
+ .overview-copy { padding: 20px 17px; }
639
+ .overview-line h1 { font-size: 28px; }
640
+ .hero-count strong { font-size: 40px; }
641
+ .overview-visual { border-right: none; }
642
+ .overview-aside { padding: 14px; }
643
+ #kpis { grid-template-columns: repeat(2, minmax(0, 1fr)); }
644
+ #main { display: block; }
645
+ #wall { min-height: 560px; }
646
+ #wall-cards { grid-template-columns: 1fr; }
647
+ #rail { margin-top: 12px; display: flex; }
648
+ .rail-trend, .rail-models { flex-basis: auto; min-height: 166px; }
649
+ .rail-recent { min-height: 300px; }
650
+ }
package/app/ui/i18n.js CHANGED
@@ -2056,6 +2056,7 @@
2056
2056
  "记录丢失": "Record lost",
2057
2057
  "修复任务:": "Fix task: ",
2058
2058
  "认领于 ": "Claimed at ",
2059
+ "在禅道中打开 Bug 详情": "Open bug details in ZenTao",
2059
2060
  "还没有认领过 Bug——配置好连接与产品 ID 后点「立即扫描」。": "No bugs claimed yet — set up the connection and product IDs, then click \"Scan Now\".",
2060
2061
  "禅道配置已保存": "ZenTao settings saved",
2061
2062
  "连接成功": "Connected",
package/app/ui/style.css CHANGED
@@ -4809,6 +4809,11 @@ main.chat-fill #run-detail.chat-mode > .rd-main { overflow: hidden; }
4809
4809
  max-height: none;
4810
4810
  margin-bottom: 12px;
4811
4811
  }
4812
+ #rd-rail > .detail-head > .rd-actions #btn-delete {
4813
+ grid-column: auto;
4814
+ justify-self: stretch;
4815
+ width: 100%;
4816
+ }
4812
4817
  #run-detail > .rd-main {
4813
4818
  width: 100%;
4814
4819
  overflow: visible;
@@ -5562,8 +5567,8 @@ button.request-busy > * { opacity: .18; }
5562
5567
  .zt-prof .head .zt-p-product {
5563
5568
  width: min(360px, 100%); min-width: 180px; flex: 1 1 240px;
5564
5569
  }
5565
- /* 禅道自动化开关行:四个开关做成并列胶囊(选中态用强调色淡染,一眼看出开了哪些),
5566
- 扫描间隔靠右成组「标签 + 圆角输入框(内嵌单位)」。窄屏自动换行、间隔独占一行。
5570
+ /* 禅道自动化开关行:四个开关与扫描间隔紧凑排列,避免间隔被推到行尾留下大片空白。
5571
+ 窄屏自动换行,手机上间隔独占一行。
5567
5572
  (此前 grid 版与 flex 版叠了两层,后者已全量覆盖前者,此处合并成单块) */
5568
5573
  /* 禅道页小节标题收边距(全局 24px/12px 在这块 12px 高的小标题上下显得空) */
5569
5574
  #sub-zentao .sec-title { margin: 14px 0 8px; }
@@ -5592,7 +5597,7 @@ button.request-busy > * { opacity: .18; }
5592
5597
  .zt-auto-options .zt-interval-field {
5593
5598
  display: inline-flex; align-items: center; gap: 8px;
5594
5599
  grid-template-columns: none; min-width: 0;
5595
- margin-left: auto; color: var(--muted); font-size: 12.5px;
5600
+ margin-left: 0; color: var(--muted); font-size: 12.5px;
5596
5601
  }
5597
5602
  .zt-auto-options .zt-iv-box {
5598
5603
  display: inline-flex; align-items: center;
@@ -5608,9 +5613,6 @@ button.request-busy > * { opacity: .18; }
5608
5613
  }
5609
5614
  .zt-auto-options .zt-iv-box input:focus { border-color: transparent; }
5610
5615
  .zt-auto-options .zt-iv-unit { font-size: 12px; padding-right: 11px; }
5611
- @media (max-width: 900px) {
5612
- .zt-auto-options .zt-interval-field { margin-left: 0; }
5613
- }
5614
5616
  @media (max-width: 640px) {
5615
5617
  .zt-prof .head .zt-p-product { min-width: 0; }
5616
5618
  .zt-auto-options .zt-interval-field { width: 100%; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebee",
3
- "version": "0.1.55",
3
+ "version": "0.1.56",
4
4
  "description": "CodeBee · 多智能体编排台 — 统一编排本机 AI 编码 CLI(Codex / Claude Code / QwenCode / OpenCode / Aider…):目标→拆解→路由→执行→验证→跨厂商评审→修复→报告。纯 Python 标准库实现,本地 Web UI。",
5
5
  "license": "MIT",
6
6
  "bin": {