codebee 0.1.96 → 0.1.98

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/style.css CHANGED
@@ -415,8 +415,6 @@ body.side-collapsed #app { grid-template-columns: 0 1fr; }
415
415
  background: var(--sidebar); border-right: 1px solid var(--border);
416
416
  padding: 14px 12px 12px; min-width: 0; overflow: hidden;
417
417
  transition: opacity .15s;
418
- } padding: 14px 12px 12px; min-width: 0; overflow: hidden;
419
- transition: opacity .15s;
420
418
  position: relative;
421
419
  }
422
420
  body.side-collapsed #sidebar { border-right: none; padding-left: 0; padding-right: 0; opacity: 0; pointer-events: none; }
@@ -1281,9 +1279,8 @@ body.inspector-open #inspector { display: flex; }
1281
1279
  /* 手机抽屉遮罩:抽屉展开时盖住内容区,点击关闭抽屉 */
1282
1280
  #drawer-mask { display: none; }
1283
1281
  @media (max-width: 900px) {
1284
- #app { grid-template-columns: 1fr; }
1285
- body.side-collapsed #app { grid-template-columns: 1fr; }
1286
- body.side-collapsed #app { grid-template-columns: 1fr; }
1282
+ /* 保留 42px 导航轨列:纯 1fr 单列会让 .side-rail(grid 首子)独占一行变顶部横条 */
1283
+ #app { grid-template-columns: 42px minmax(0, 1fr); }
1287
1284
  #side-resizer { display: none; }
1288
1285
  #sidebar {
1289
1286
  position: fixed; z-index: 60; top: 0; left: 0; bottom: 0;
@@ -3529,7 +3526,9 @@ button.primary:hover { filter: brightness(.96); }
3529
3526
 
3530
3527
  @media (max-width: 860px) {
3531
3528
  #app { grid-template-columns: 42px minmax(0, 1fr); }
3532
- #sidebar { position: fixed; z-index: 30; left: 42px; top: 0; bottom: 0; width: 228px; transform: translateX(0); box-shadow: 16px 0 34px rgba(30,40,50,.12); }
3529
+ /* z-index 必须压过 #drawer-mask(55):低于遮罩时抽屉整层被半透明遮罩盖住,
3530
+ * 抽屉里点什么都是点到遮罩(=关抽屉),主区也同时被盖——手机端「无法操作」实案 */
3531
+ #sidebar { position: fixed; z-index: 60; left: 42px; top: 0; bottom: 0; width: 228px; transform: translateX(0); box-shadow: 16px 0 34px rgba(30,40,50,.12); }
3533
3532
  body.side-collapsed #app { grid-template-columns: 42px minmax(0, 1fr); }
3534
3533
  body.side-collapsed #sidebar { transform: translateX(-110%); opacity: 0; }
3535
3534
  main { padding: 20px 16px 58px; }
@@ -3882,6 +3881,21 @@ body.inspector-open #run-detail #rd-log.rd-logdrawer {
3882
3881
  #run-detail .rd-pane[data-pane="bookmeta"] #rd-bookmeta {
3883
3882
  padding-top: 4px;
3884
3883
  }
3884
+ .rd-checkpoints, .rd-project-memory {
3885
+ margin: 8px 0 14px; padding: 12px 14px; border: 1px solid var(--border);
3886
+ border-radius: 12px; background: color-mix(in srgb, var(--panel) 72%, transparent);
3887
+ }
3888
+ .rd-checkpoints-head { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; margin-bottom: 8px; }
3889
+ .rd-checkpoints-head strong { margin-right: auto; }
3890
+ .rd-checkpoint-row, .rd-memory-row { padding: 9px 0; border-top: 1px solid var(--border); }
3891
+ .rd-checkpoint-row > strong { margin-right: 8px; overflow-wrap: anywhere; }
3892
+ .rd-checkpoint-row pre, .rd-memory-row pre {
3893
+ max-height: 240px; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere;
3894
+ margin: 8px 0 0; padding: 9px; border-radius: 8px; background: var(--bg);
3895
+ color: var(--text); font: 12px/1.5 ui-monospace, Consolas, monospace;
3896
+ }
3897
+ .rd-memory-row > div:first-child { display: flex; align-items: center; gap: 8px; flex-wrap: wrap; }
3898
+ .rd-memory-actions { display: flex; gap: 6px; margin-top: 8px; }
3885
3899
  #run-detail .rd-pane[data-pane="git"] #rd-git,
3886
3900
  #run-detail .rd-pane[data-pane="bible"] #rd-bible,
3887
3901
  #run-detail .rd-pane[data-pane="bookmeta"] #rd-bookmeta {
@@ -5158,6 +5172,9 @@ main.chat-fill #run-detail.chat-mode > .rd-main { overflow: hidden; }
5158
5172
  max-height: none;
5159
5173
  margin-bottom: 12px;
5160
5174
  }
5175
+ /* 浮卡让位 padding 只属于 ≥980 的桌面浮卡布局:窄屏对话态吃满主区,
5176
+ 32px 左右留白在 390 视口里白吃 64px(对话列只剩 284px)实案 */
5177
+ main.chat-fill { padding: 12px 14px; }
5161
5178
  #rd-rail > .detail-head > .rd-actions #btn-delete {
5162
5179
  grid-column: auto;
5163
5180
  justify-self: stretch;
@@ -6632,7 +6649,8 @@ button.primary { background:var(--accent); box-shadow:0 3px 10px color-mix(in sr
6632
6649
  button.primary:hover { filter:brightness(.96); }
6633
6650
  @media (max-width:860px) {
6634
6651
  #app, body.side-collapsed #app { grid-template-columns:42px minmax(0,1fr); }
6635
- #sidebar { position:fixed; z-index:30; left:42px; top:0; bottom:0; width:228px; transform:translateX(0); box-shadow:16px 0 34px rgba(30,40,50,.12); }
6652
+ /* z-index 必须压过 #drawer-mask(55):低于遮罩时抽屉整层被盖、手机端无法操作(同 3528 层注释) */
6653
+ #sidebar { position:fixed; z-index:60; left:42px; top:0; bottom:0; width:228px; transform:translateX(0); box-shadow:16px 0 34px rgba(30,40,50,.12); }
6636
6654
  body.side-collapsed #sidebar { transform:translateX(-110%); opacity:0; }
6637
6655
  main { padding:20px 16px 58px; }
6638
6656
  .topbar { padding:9px 14px; }
@@ -7156,125 +7174,92 @@ main.browser-page-active #page-settings > #sub-browser .browser-shell {
7156
7174
  .qr-card img { display: block; width: 132px; height: auto; border-radius: 6px; }
7157
7175
  .qr-card .hint { margin: 4px 0 2px; color: var(--muted); max-width: 140px; }
7158
7176
 
7159
- /* 蜂巢流程场景:阶段平台布置在透视空间里,页面操作仍保持原生 DOM。 */
7177
+ /* Reference office: artwork and live screens always share one aspect ratio. */
7160
7178
  #rd-hive .sec-title { margin-bottom: 10px; }
7161
- .hive-scene-tools {
7162
- display: flex; align-items: center; gap: 7px; min-height: 38px; margin-bottom: 8px;
7163
- color: var(--muted); font-size: 11px;
7164
- }
7179
+ .hive-scene-tools { display: flex; align-items: center; gap: 7px; min-height: 38px; margin-bottom: 8px; color: var(--muted); font-size: 11px; }
7165
7180
  .hive-view-switch { display: inline-flex; gap: 2px; padding: 3px; border: 1px solid var(--border); border-radius: 9px; background: var(--panel); }
7166
7181
  .hive-view-btn, .hive-scene-btn {
7167
7182
  min-height: 28px; padding: 4px 10px; border: 1px solid transparent; border-radius: 6px;
7168
7183
  background: transparent; color: var(--muted); font: inherit; cursor: pointer;
7169
- transition: color .16s ease, background .16s ease, border-color .16s ease;
7170
7184
  }
7171
7185
  .hive-view-btn:hover, .hive-scene-btn:hover { color: var(--text); background: color-mix(in srgb, var(--accent) 8%, transparent); }
7172
7186
  .hive-view-btn.active { border-color: color-mix(in srgb, var(--accent) 32%, var(--border)); background: color-mix(in srgb, var(--accent) 12%, var(--panel)); color: var(--accent); }
7173
7187
  .hive-scene-hint { margin-left: 8px; }
7174
7188
  .hive-scene-spacer { flex: 1; }
7175
- .hive-scene-btn { min-width: 31px; padding-inline: 8px; border-color: var(--border); background: var(--panel); font-size: 13px; }
7176
- .hive-scene-reset { padding-inline: 10px; font-size: 11px; }
7189
+ .hive-scene-btn { min-width: 31px; border-color: var(--border); background: var(--panel); font-size: 13px; }
7190
+ .hive-scene-btn:disabled { opacity: .4; cursor: default; }
7191
+ .hive-scene-reset { font-size: 11px; }
7192
+ .hive-scene-pager { display: flex; align-items: center; gap: 5px; }
7193
+ .hive-scene-pager[hidden] { display: none; }
7194
+ .hive-scene-page-label { white-space: nowrap; font-family: var(--mono); }
7177
7195
  .hive-viewport {
7178
- position: relative; min-height: 420px; max-height: min(72vh, 820px); overflow: auto;
7179
- perspective: 1500px; perspective-origin: 50% 12%; transform-style: preserve-3d;
7180
- overscroll-behavior: contain; border: 1px solid color-mix(in srgb, var(--accent) 15%, var(--border));
7181
- border-radius: 16px; background:
7182
- radial-gradient(ellipse at 50% 0%, color-mix(in srgb, var(--accent) 10%, transparent), transparent 56%),
7183
- linear-gradient(145deg, color-mix(in srgb, var(--panel) 96%, var(--accent)), var(--panel) 70%);
7184
- box-shadow: inset 0 1px color-mix(in srgb, white 7%, transparent), 0 16px 34px color-mix(in srgb, #000 12%, transparent);
7185
- scrollbar-color: color-mix(in srgb, var(--accent) 32%, var(--border)) transparent;
7186
- }
7187
- .hive-viewport::before {
7188
- content: ""; position: absolute; inset: 0; pointer-events: none; opacity: .2;
7189
- background-image: radial-gradient(color-mix(in srgb, var(--accent) 45%, transparent) .7px, transparent .7px);
7190
- background-size: 18px 18px; mask-image: linear-gradient(180deg, #000, transparent 80%);
7191
- }
7192
- .hive-viewport.is-dragging { cursor: grabbing; user-select: none; }
7193
- #rd-hive-cells {
7194
- --scene-x: 0px; --scene-y: 0px; --scene-zoom: 1;
7195
- position: relative;
7196
- isolation: isolate; display: flex; flex-direction: column; gap: 3px;
7197
- width: min(100%, 1040px); min-height: 100%; margin: 0 auto; padding: 22px 24px 28px;
7198
- transform: translate3d(var(--scene-x), var(--scene-y), 0) rotateX(18deg) rotateZ(-1deg) scale(var(--scene-zoom));
7199
- transform-origin: 50% 12%; transform-style: preserve-3d; cursor: grab;
7200
- transition: transform .14s ease-out; will-change: transform;
7201
- }
7202
- .hive-viewport.is-dragging #rd-hive-cells { transition: none; }
7203
- #rd-hive-cells .hive-lane {
7204
- transform: translateZ(var(--lane-z, 0px));
7205
- transform-style: preserve-3d;
7206
- border: 1px solid color-mix(in srgb, var(--accent) 16%, var(--border));
7207
- border-radius: 13px;
7208
- padding: 11px 14px 12px;
7209
- background: linear-gradient(115deg,
7210
- color-mix(in srgb, var(--accent) 4%, var(--panel)),
7211
- color-mix(in srgb, var(--panel) 96%, transparent) 44%, var(--panel));
7212
- box-shadow: 0 5px 0 color-mix(in srgb, var(--border-strong) 48%, transparent),
7213
- 0 10px 20px color-mix(in srgb, #000 10%, transparent),
7214
- inset 0 1px color-mix(in srgb, white 7%, transparent);
7215
- transition: transform .22s ease, box-shadow .22s ease, border-color .22s ease;
7216
- }
7217
- #rd-hive-cells .hive-lane:nth-child(4n + 1) { --lane-z: 16px; }
7218
- #rd-hive-cells .hive-lane:nth-child(4n + 3) { --lane-z: 8px; }
7219
- #rd-hive-cells .hive-lane.lane-active {
7220
- border-color: color-mix(in srgb, var(--accent) 58%, var(--border));
7221
- box-shadow: 0 6px 0 color-mix(in srgb, var(--accent) 22%, var(--border-strong)),
7222
- 0 15px 28px color-mix(in srgb, var(--accent) 13%, #000),
7223
- inset 0 1px color-mix(in srgb, white 10%, transparent);
7224
- }
7225
- #rd-hive-cells .lane-flow {
7226
- transform: translateZ(6px);
7227
- filter: drop-shadow(0 2px 3px color-mix(in srgb, var(--accent) 24%, transparent));
7228
- }
7229
- #rd-hive-cells .lane-cells { gap: 8px 10px; }
7230
- #rd-hive-cells .hive-cell {
7231
- position: relative;
7232
- min-height: 82px;
7233
- padding: 11px 12px 9px 15px;
7234
- border: 1px solid color-mix(in srgb, var(--accent) 14%, var(--border));
7235
- border-radius: 9px;
7236
- background: linear-gradient(145deg, color-mix(in srgb, var(--panel) 96%, var(--accent)), var(--panel) 78%);
7237
- box-shadow: 0 3px 0 color-mix(in srgb, var(--border-strong) 40%, transparent),
7238
- 0 7px 13px color-mix(in srgb, #000 12%, transparent),
7239
- inset 0 1px color-mix(in srgb, white 6%, transparent);
7240
- transition: transform .18s ease, box-shadow .18s ease, border-color .18s ease, background-color .18s ease;
7241
- }
7242
- #rd-hive-cells .hive-cell::before {
7243
- top: 0; bottom: 0; left: 0; right: auto; width: 3px; height: auto;
7244
- border-radius: 9px 0 0 9px;
7245
- }
7246
- #rd-hive-cells .hive-cell:hover,
7247
- #rd-hive-cells .hive-cell:focus-visible {
7248
- transform: translateY(-3px) translateZ(8px);
7249
- border-color: color-mix(in srgb, var(--accent) 50%, var(--border));
7250
- background: linear-gradient(145deg, color-mix(in srgb, var(--accent) 8%, var(--panel)), var(--panel) 78%);
7251
- box-shadow: 0 5px 0 color-mix(in srgb, var(--accent) 25%, var(--border-strong)),
7252
- 0 13px 20px color-mix(in srgb, var(--accent) 12%, #000);
7253
- }
7254
- #rd-hive-cells .hive-cell.st-running {
7255
- border-color: color-mix(in srgb, var(--accent) 45%, var(--border));
7256
- background: linear-gradient(145deg, color-mix(in srgb, var(--accent) 9%, var(--panel)), var(--panel) 78%);
7257
- }
7258
- .hive-viewport.hive-2d { min-height: 0; max-height: none; overflow: visible; perspective: none; border: 0; border-radius: 0; background: transparent; box-shadow: none; }
7259
- #rd-hive-cells.hive-2d {
7260
- width: 100%; padding: 0; transform: none; cursor: default; gap: 2px;
7261
- }
7262
- #rd-hive-cells.hive-2d .hive-lane,
7263
- #rd-hive-cells.hive-2d .hive-lane:nth-child(n) { --lane-z: 0px; transform: none; }
7264
- #rd-hive-cells.hive-2d .hive-cell:hover,
7265
- #rd-hive-cells.hive-2d .hive-cell:focus-visible { transform: translateY(-1px); }
7266
- .hive-scene-tools.hive-2d .hive-scene-hint { display: none; }
7196
+ position: relative; width: 100%; aspect-ratio: 2848 / 1600; overflow: hidden;
7197
+ container-type: inline-size; border: 1px solid var(--border); border-radius: 12px;
7198
+ background: #d4e7f7; cursor: grab; touch-action: pan-y;
7199
+ }
7200
+ .hive-viewport.is-dragging { cursor: grabbing; }
7201
+ .hive-reference-layer { position: absolute; inset: 0; transform-origin: center; }
7202
+ .hive-reference-layer[hidden] { display: none; }
7203
+ .hive-reference { position: absolute; inset: 0; display: block; width: 100%; height: 100%; user-select: none; pointer-events: none; }
7204
+ .hive-gl { display: none; }
7205
+ .hive-gl-overlay { position: absolute; inset: 0; pointer-events: none; }
7206
+ #rd-hive-viewport.hive-mode-3d #rd-hive-cells { display: none; }
7207
+ #rd-hive-viewport.hive-mode-2d { height: auto; aspect-ratio: auto; overflow: visible; border: 0; border-radius: 0; background: transparent; cursor: auto; }
7208
+ #rd-hive-viewport.hive-mode-2d .hive-reference-layer { display: none; }
7209
+ .hg-badge {
7210
+ position: absolute; transform: translate(-50%, -50%); width: 10.8%; height: 7.6%;
7211
+ display: flex; flex-direction: column; align-items: center; justify-content: center; gap: .4cqw;
7212
+ padding: .3cqw; border: 0; border-radius: 1.4cqw; pointer-events: auto; cursor: pointer;
7213
+ color: #101c29; background: rgba(255,255,255,.98); box-shadow: 0 .35cqw .9cqw rgba(14,55,88,.22);
7214
+ text-align: center; font-family: "Microsoft YaHei", sans-serif;
7215
+ }
7216
+ .hg-badge .hg-name { font-size: 1.25cqw; font-weight: 800; line-height: 1.15; white-space: nowrap; }
7217
+ .hg-badge .hg-meta { font-size: .58cqw; color: #536d7d; line-height: 1; white-space: nowrap; }
7218
+ .hg-badge:disabled { cursor: default; opacity: 1; }
7219
+ .hg-badge:hover:not(:disabled), .hg-badge:focus-visible { outline: .12cqw solid #71eaf9; outline-offset: .2cqw; }
7220
+ .hg-badge.hg-active { box-shadow: 0 0 1.1cqw rgba(0, 236, 255, .65); }
7221
+ .hg-monitor {
7222
+ position: absolute; display: grid; grid-template-columns: 1fr auto; grid-template-rows: auto auto 1fr;
7223
+ padding: .12cqw .3cqw; gap: .08cqw .18cqw; overflow: hidden; border: 0; border-radius: 0;
7224
+ pointer-events: auto; cursor: pointer; text-align: left; color: #d8f9ff; background: #06244a;
7225
+ font-family: var(--mono); font-size: .57cqw; line-height: 1.15;
7226
+ }
7227
+ .hg-monitor:disabled { opacity: 1; cursor: default; }
7228
+ .hg-monitor:hover:not(:disabled), .hg-monitor:focus-visible { outline: .12cqw solid #91f6ff; outline-offset: .1cqw; z-index: 1; }
7229
+ .hg-monitor-role { grid-column: 1 / -1; font-size: .69cqw; line-height: 1.16; font-weight: 700; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
7230
+ .hg-monitor-status { color: #94deee; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
7231
+ .hg-monitor-time { grid-column: 2; grid-row: 2; color: #9dd8e4; white-space: nowrap; }
7232
+ .hg-monitor-tail { grid-column: 1 / -1; color: #b3e7f2; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; }
7233
+ .hg-monitor.st-running { box-shadow: inset 0 -.1cqw #52edf5; }
7234
+ .hg-monitor.st-running .hg-monitor-status { color: #5cf5fc; }
7235
+ .hg-monitor.st-done .hg-monitor-status { color: #99f3bf; }
7236
+ .hg-monitor.st-failed .hg-monitor-status, .hg-monitor.st-timeout .hg-monitor-status { color: #ffa2a2; }
7237
+ .hg-monitor.st-idle { color: #9abccf; }
7238
+ .hive-scene-tools.hive-2d .hive-scene-hint, .hive-scene-tools.hive-2d .hive-scene-pager { display: none; }
7239
+ .hg-chip, .hg-tip { display: none; }
7240
+ @media (prefers-reduced-motion: reduce) {
7241
+ .hive-reference-layer { transition: none; }
7242
+ }
7243
+
7244
+ .hive-detail-dialog {
7245
+ width: min(800px, calc(100vw - 32px)); max-height: 84vh; padding: 0; overflow: hidden;
7246
+ border: 1px solid var(--border); border-radius: 14px; color: var(--text); background: var(--panel);
7247
+ box-shadow: 0 24px 90px #0005;
7248
+ }
7249
+ .hive-detail-dialog::backdrop { background: #04182c66; backdrop-filter: blur(3px); }
7250
+ .hive-detail-head { display: flex; align-items: center; gap: 12px; padding: 18px 22px; border-bottom: 1px solid var(--border); }
7251
+ .hive-detail-head h3 { margin: 0; flex: 1; overflow-wrap: anywhere; font-size: 17px; }
7252
+ .hive-detail-close { min-width: 32px; min-height: 32px; border: 1px solid var(--border); border-radius: 6px; background: var(--panel2); color: var(--text); cursor: pointer; }
7253
+ .hive-detail-meta { display: flex; flex-wrap: wrap; gap: 8px 16px; padding: 12px 22px; font-size: 12px; color: var(--muted); }
7254
+ .hive-detail-status { color: var(--accent); font-weight: 600; }
7255
+ .hive-detail-log { margin: 0; padding: 18px 22px; min-height: 160px; max-height: 56vh; overflow: auto; white-space: pre-wrap; overflow-wrap: anywhere; color: var(--log-text); background: var(--log-bg); font: 12px/1.7 var(--mono); }
7256
+ .hive-detail-error { margin: 0; padding: 8px 22px; color: var(--bad); font-size: 12px; }
7257
+ .hive-detail-error:empty { display: none; }
7267
7258
  @media (max-width: 720px) {
7268
7259
  .hive-scene-tools { flex-wrap: wrap; }
7269
7260
  .hive-scene-hint { order: 2; width: 100%; margin: 0 0 3px; }
7270
7261
  .hive-scene-spacer { flex: 1 1 0; }
7271
- .hive-viewport { min-height: 340px; max-height: 64vh; }
7272
- #rd-hive-cells { padding: 12px 14px 18px; }
7273
- }
7274
- @media (prefers-reduced-motion: reduce) {
7275
- #rd-hive-cells { transition: none; }
7276
- #rd-hive-cells .hive-lane,
7277
- #rd-hive-cells .hive-cell { transition: none; }
7262
+ .hive-detail-head, .hive-detail-meta, .hive-detail-log { padding-inline: 14px; }
7278
7263
  }
7279
7264
 
7280
7265
  /* ---- 发布台·批量选择(pb-pend):待发章号 chips + 全选/清空 + 发布所选/直发所选 ---- */
@@ -7290,3 +7275,4 @@ main.browser-page-active #page-settings > #sub-browser .browser-shell {
7290
7275
  .pb-chip.on { border-color: var(--accent, #4a7dbe); color: var(--text); }
7291
7276
  .pb-chip input { margin: 0; }
7292
7277
  .pb-pend-btns { display: flex; gap: 8px; margin-top: 6px; }
7278
+ .pb-vol { font-size: 11px; color: var(--accent, #4a7dbe); margin-top: 5px; font-weight: 600; }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "codebee",
3
- "version": "0.1.96",
3
+ "version": "0.1.98",
4
4
  "description": "CodeBee · 多智能体编排台 — 统一编排本机 AI 编码 CLI(Codex / Claude Code / QwenCode / OpenCode / Aider…):目标→拆解→路由→执行→验证→跨厂商评审→修复→报告。纯 Python 标准库实现,本地 Web UI。",
5
5
  "license": "MIT",
6
6
  "bin": {
@@ -36,7 +36,8 @@
36
36
  "release:gate": "python scripts/release_gate.py",
37
37
  "release": "python scripts/release_gate.py --publish",
38
38
  "prepublishOnly": "python scripts/release_gate.py",
39
- "release:clean": "python scripts/prune_release_debris.py"
39
+ "release:clean": "python scripts/prune_release_debris.py",
40
+ "postpublish": "node scripts/postpublish_tag.cjs"
40
41
  },
41
42
  "repository": {
42
43
  "type": "git",