prreviewbuddy 0.85.0 → 0.86.6
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 +82 -0
- package/dist/{delete_review-BED4mPxB.js → delete_review-CwKZQlMg.js} +306 -42
- package/dist/main.js +1 -1
- package/dist/server.js +986 -101
- package/package.json +1 -1
- package/static/chunk-BUD1RoN4.js +1 -0
- package/static/chunk-D9x9bcKf.js +1 -0
- package/static/{chunk-BL6xJoZm.js → chunk-Di41wu5k.js} +1 -1
- package/static/chunk-huqt-B16.js +1 -0
- package/static/help.js +1 -1
- package/static/notifications.js +1 -1
- package/static/reviews.js +1 -1
- package/static/runs.js +1 -1
- package/static/settings.js +1 -1
- package/static/shell.css +130 -28
- package/static/sidebar.css +15 -0
- package/static/workspace.js +68 -61
- package/static/chunk-B2vcrGTe.js +0 -1
- package/static/chunk-DWTt0jUK.js +0 -1
- package/static/chunk-DwdwtB9r.js +0 -1
package/static/shell.css
CHANGED
|
@@ -44,6 +44,8 @@
|
|
|
44
44
|
--brand: #9333ea;
|
|
45
45
|
--brand-hover: light-dark(#7427e8, #7c3aed);
|
|
46
46
|
--brand-muted: light-dark(#f3e8ff, rgba(147, 51, 234, 0.15));
|
|
47
|
+
/* A brand outline that marks a surface as the selection's without shouting: the bulk bar. */
|
|
48
|
+
--brand-border: light-dark(rgba(147, 51, 234, 0.35), rgba(167, 112, 245, 0.45));
|
|
47
49
|
/* Brand-coloured words on a light or tinted ground, where #9333ea itself is too pale to read. */
|
|
48
50
|
--brand-ink: light-dark(#6b21a8, #c4a5f5);
|
|
49
51
|
/* Text and marks on a filled --brand control. White in both, because the fill is the same. */
|
|
@@ -1831,6 +1833,36 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
1831
1833
|
.pr-helper-explain-simply-button:disabled { opacity: 0.55; cursor: default; }
|
|
1832
1834
|
.pr-helper-explain-simply-button:disabled:hover { background: transparent; }
|
|
1833
1835
|
|
|
1836
|
+
/* What a finished turn offers under its answer: Reconcile with findings, or a reconcile's Accept all.
|
|
1837
|
+
Quiet, the size of the answer's own meta, so a long conversation does not read as a column of
|
|
1838
|
+
buttons; the one sentence beside it says what the action is for. */
|
|
1839
|
+
.prb-turn-actions {
|
|
1840
|
+
display: flex;
|
|
1841
|
+
flex-wrap: wrap;
|
|
1842
|
+
align-items: baseline;
|
|
1843
|
+
gap: 4px 10px;
|
|
1844
|
+
margin: -2px 0 10px;
|
|
1845
|
+
}
|
|
1846
|
+
.prb-turn-reconcile,
|
|
1847
|
+
.prb-turn-accept-all {
|
|
1848
|
+
padding: 3px 10px;
|
|
1849
|
+
border: 1px solid var(--border);
|
|
1850
|
+
border-radius: 8px;
|
|
1851
|
+
background: transparent;
|
|
1852
|
+
color: var(--text-secondary);
|
|
1853
|
+
font: inherit;
|
|
1854
|
+
font-size: var(--t-micro);
|
|
1855
|
+
cursor: pointer;
|
|
1856
|
+
}
|
|
1857
|
+
.prb-turn-accept-all { border-color: var(--brand-hover); color: var(--text-primary); font-weight: 600; }
|
|
1858
|
+
.prb-turn-reconcile:hover:not(:disabled),
|
|
1859
|
+
.prb-turn-accept-all:hover:not(:disabled) { border-color: var(--border-strong); color: var(--text-primary); }
|
|
1860
|
+
.prb-turn-reconcile:focus-visible,
|
|
1861
|
+
.prb-turn-accept-all:focus-visible { outline: 2px solid var(--brand-hover); outline-offset: 2px; }
|
|
1862
|
+
.prb-turn-reconcile:disabled,
|
|
1863
|
+
.prb-turn-accept-all:disabled { opacity: 0.55; cursor: default; }
|
|
1864
|
+
.prb-turn-help { margin: 0; color: var(--text-secondary); font-size: var(--t-micro); }
|
|
1865
|
+
|
|
1834
1866
|
/* ── The reviewer's own prompts ──
|
|
1835
1867
|
A strip between the assistant's header and its conversation: reachable without scrolling the
|
|
1836
1868
|
log, and out of the composer, which is already carrying the scope, the field and the button.
|
|
@@ -1903,6 +1935,8 @@ a.prb-rail-item { text-decoration: none; }
|
|
|
1903
1935
|
|
|
1904
1936
|
/* The prompt editor is wider than the shutdown dialog: it holds a paragraph, not a sentence. */
|
|
1905
1937
|
.prb-prompt-dialog { max-width: 560px; width: calc(100vw - 48px); }
|
|
1938
|
+
.prb-prompt-error { margin: 0; font-size: var(--t-meta); color: var(--danger-ink); }
|
|
1939
|
+
.prb-prompt-error[hidden] { display: none; }
|
|
1906
1940
|
.prb-field { display: block; margin-bottom: 12px; }
|
|
1907
1941
|
.prb-field span {
|
|
1908
1942
|
display: block;
|
|
@@ -3421,69 +3455,125 @@ a.prb-guide-pick { text-decoration: none; }
|
|
|
3421
3455
|
|
|
3422
3456
|
/* ── The bulk bar ──
|
|
3423
3457
|
Sticky at the foot of the column rather than under the list, because a selection made on page one
|
|
3424
|
-
is acted on from wherever the reader has scrolled to. On the card surface with a brand
|
|
3425
|
-
a shadow, so it reads as sitting above the list rather than as the last row of
|
|
3458
|
+
is acted on from wherever the reader has scrolled to. On the card surface with a faint brand
|
|
3459
|
+
border and a float shadow, so it reads as sitting above the list rather than as the last row of
|
|
3460
|
+
it. Two rows: what is selected, then what to do with it, the second only once something is. */
|
|
3426
3461
|
.prb-bulk {
|
|
3427
3462
|
position: sticky;
|
|
3428
3463
|
bottom: 16px;
|
|
3429
3464
|
z-index: 3;
|
|
3430
3465
|
display: flex;
|
|
3431
|
-
flex-
|
|
3432
|
-
|
|
3433
|
-
|
|
3434
|
-
margin
|
|
3435
|
-
padding:
|
|
3436
|
-
border: 1px solid var(--brand);
|
|
3466
|
+
flex-direction: column;
|
|
3467
|
+
gap: 10px;
|
|
3468
|
+
max-width: 880px;
|
|
3469
|
+
margin: 16px auto 0;
|
|
3470
|
+
padding: 10px 10px 10px 16px;
|
|
3471
|
+
border: 1px solid var(--brand-border);
|
|
3437
3472
|
border-radius: 12px;
|
|
3438
3473
|
background: var(--surface-raised);
|
|
3439
|
-
box-shadow: 0
|
|
3474
|
+
box-shadow: 0 12px 32px var(--shadow-float), 0 2px 6px var(--shadow-soft);
|
|
3440
3475
|
}
|
|
3441
3476
|
.prb-bulk[hidden] { display: none; }
|
|
3442
|
-
.prb-bulk-
|
|
3443
|
-
|
|
3444
|
-
|
|
3445
|
-
|
|
3446
|
-
}
|
|
3477
|
+
.prb-bulk-head { display: flex; align-items: center; gap: 8px; min-height: 32px; }
|
|
3478
|
+
.prb-bulk-status { flex: 1; min-width: 0; margin: 0; font-size: var(--t-meta); color: var(--text-muted); }
|
|
3479
|
+
.prb-bulk-count { font-size: var(--t-body); font-weight: 600; color: var(--text-primary); }
|
|
3480
|
+
.prb-bulk-detail { margin-left: 4px; }
|
|
3481
|
+
.prb-bulk-detail:empty { display: none; }
|
|
3447
3482
|
/* The `display: flex` below outranks the sheet's `[hidden]` rule, so hiding this row for the
|
|
3448
3483
|
confirmation needs saying here or the buttons stay under the question they replaced. */
|
|
3449
|
-
.prb-bulk-actions[hidden]
|
|
3484
|
+
.prb-bulk-actions[hidden],
|
|
3485
|
+
.prb-bulk[data-empty] .prb-bulk-actions { display: none; }
|
|
3486
|
+
.prb-bulk-actions,
|
|
3487
|
+
.prb-bulk-confirm {
|
|
3488
|
+
padding: 10px 0 0;
|
|
3489
|
+
border-top: 1px solid var(--border);
|
|
3490
|
+
}
|
|
3450
3491
|
.prb-bulk-actions {
|
|
3451
3492
|
display: flex;
|
|
3452
3493
|
flex-wrap: wrap;
|
|
3453
3494
|
align-items: center;
|
|
3454
|
-
gap:
|
|
3455
|
-
margin-left: auto;
|
|
3495
|
+
gap: 8px;
|
|
3456
3496
|
}
|
|
3457
3497
|
.prb-bulk-button {
|
|
3458
|
-
|
|
3459
|
-
|
|
3498
|
+
display: inline-flex;
|
|
3499
|
+
align-items: center;
|
|
3500
|
+
gap: 6px;
|
|
3501
|
+
box-sizing: border-box;
|
|
3502
|
+
height: 32px;
|
|
3503
|
+
padding: 0 12px;
|
|
3504
|
+
border: 1px solid var(--border-strong);
|
|
3460
3505
|
border-radius: 8px;
|
|
3461
3506
|
background: transparent;
|
|
3462
3507
|
color: var(--text-secondary);
|
|
3463
3508
|
font: inherit;
|
|
3464
3509
|
font-size: var(--t-meta);
|
|
3510
|
+
white-space: nowrap;
|
|
3465
3511
|
cursor: pointer;
|
|
3466
3512
|
}
|
|
3467
|
-
.prb-bulk-button:hover:not(:disabled) { color: var(--text-primary);
|
|
3513
|
+
.prb-bulk-button:hover:not(:disabled) { color: var(--text-primary); background: var(--wash); }
|
|
3468
3514
|
.prb-bulk-button:disabled { opacity: 0.5; cursor: default; }
|
|
3469
|
-
|
|
3470
|
-
|
|
3471
|
-
.prb-bulk-
|
|
3472
|
-
|
|
3473
|
-
.prb-bulk-
|
|
3515
|
+
.prb-bulk-button[hidden] { display: none; }
|
|
3516
|
+
.prb-bulk-icon { display: inline-flex; flex: none; }
|
|
3517
|
+
.prb-bulk-icon svg { display: block; width: 16px; height: 16px; }
|
|
3518
|
+
/* The one filled control: what most selections are made for. */
|
|
3519
|
+
.prb-bulk-primary { border-color: var(--brand); background: var(--brand); color: var(--on-brand); font-weight: 600; }
|
|
3520
|
+
.prb-bulk-primary:hover:not(:disabled) { border-color: var(--brand-hover); background: var(--brand-hover); color: var(--on-brand); }
|
|
3521
|
+
/* The shared menu, placed as a control in the row rather than in a card's corner. Two classes,
|
|
3522
|
+
because the base `.prb-menu` rule is further down the sheet and would win a tie. */
|
|
3523
|
+
.prb-bulk .prb-bulk-more { position: relative; top: auto; right: auto; z-index: auto; }
|
|
3524
|
+
.prb-bulk-more .prb-menu-panel { top: 38px; right: auto; left: 0; width: 220px; }
|
|
3525
|
+
.prb-bulk-more .prb-menu-panel[data-menu-placement='above'] { top: auto; bottom: 38px; }
|
|
3526
|
+
/* Its trigger's end edge, when hanging from its start would run off the right (menu.ts). */
|
|
3527
|
+
.prb-bulk-more .prb-menu-panel[data-menu-align='end'] { right: 0; left: auto; }
|
|
3528
|
+
/* Last and apart, quiet until it is reached for: a word in the danger ink, no outline. */
|
|
3529
|
+
.prb-bulk-button-danger { border-color: transparent; color: var(--danger-ink); }
|
|
3530
|
+
.prb-bulk-button-danger:hover:not(:disabled) { background: var(--danger-subtle); color: var(--danger-ink-strong); }
|
|
3531
|
+
.prb-bulk-actions > [data-bulk-delete] { margin-left: auto; }
|
|
3532
|
+
/* The way out, with its key beside it. The `<kbd>` is the command layer's (`showHint`), appended
|
|
3533
|
+
after the icon and drawn before it. */
|
|
3534
|
+
.prb-bulk-exit {
|
|
3535
|
+
display: inline-flex;
|
|
3536
|
+
align-items: center;
|
|
3537
|
+
gap: 6px;
|
|
3538
|
+
height: 32px;
|
|
3539
|
+
padding: 0 6px;
|
|
3540
|
+
border: 0;
|
|
3541
|
+
border-radius: 8px;
|
|
3542
|
+
background: transparent;
|
|
3543
|
+
color: var(--text-muted);
|
|
3544
|
+
cursor: pointer;
|
|
3545
|
+
}
|
|
3546
|
+
.prb-bulk-exit:hover:not(:disabled) { background: var(--surface-2); color: var(--text-primary); }
|
|
3547
|
+
.prb-bulk-exit:disabled { opacity: 0.5; cursor: default; }
|
|
3548
|
+
.prb-bulk-exit .prb-bulk-icon svg { width: 18px; height: 18px; }
|
|
3549
|
+
.prb-bulk-exit .prb-key-hint {
|
|
3550
|
+
order: -1;
|
|
3551
|
+
margin: 0;
|
|
3552
|
+
padding: 1px 6px;
|
|
3553
|
+
border: 1px solid var(--border);
|
|
3554
|
+
border-radius: 5px;
|
|
3555
|
+
background: var(--surface-2);
|
|
3556
|
+
font: 500 var(--t-micro) / 1.5 ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;
|
|
3557
|
+
opacity: 1;
|
|
3558
|
+
}
|
|
3474
3559
|
/* A second state of the same bar, the way a card menu asks. */
|
|
3475
|
-
.prb-bulk-confirm { flex: 1 0 100%; }
|
|
3476
3560
|
.prb-bulk-confirm[hidden] { display: none; }
|
|
3477
3561
|
.prb-bulk-question { margin: 0 0 4px; font-size: var(--t-body); color: var(--text-primary); }
|
|
3478
3562
|
.prb-bulk-note { margin: 0 0 10px; font-size: var(--t-meta); color: var(--text-tertiary, var(--text-secondary)); }
|
|
3479
|
-
.prb-bulk-confirm
|
|
3563
|
+
.prb-bulk-confirm-actions { display: flex; flex-wrap: wrap; gap: 8px; }
|
|
3564
|
+
.prb-bulk-confirm .prb-bulk-button-danger { border-color: var(--danger-border); background: var(--danger-subtle); }
|
|
3480
3565
|
.prb-bulk-error {
|
|
3481
|
-
flex: 1 0 100%;
|
|
3482
3566
|
margin: 0;
|
|
3483
3567
|
font-size: var(--t-meta);
|
|
3484
3568
|
color: var(--danger);
|
|
3485
3569
|
}
|
|
3486
3570
|
.prb-bulk-error[hidden] { display: none; }
|
|
3571
|
+
/* A narrow column: the actions wrap, and Delete starts its own line's left edge rather than
|
|
3572
|
+
stranding itself at the right of a short one. */
|
|
3573
|
+
@media (max-width: 640px) {
|
|
3574
|
+
.prb-bulk { bottom: 8px; padding-left: 12px; }
|
|
3575
|
+
.prb-bulk-actions > [data-bulk-delete] { margin-left: 0; }
|
|
3576
|
+
}
|
|
3487
3577
|
/* ── A branch's history, inside its card ──
|
|
3488
3578
|
Below the card's link and separated by a rule, because it is a different kind of thing: the link
|
|
3489
3579
|
above is this branch as it stands, and this is how it got there. Folded away by default and
|
|
@@ -6552,6 +6642,18 @@ select.prb-addreview-control { padding-right: 32px; }
|
|
|
6552
6642
|
.prb-addreview code,
|
|
6553
6643
|
.prb-addreview pre { font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace; }
|
|
6554
6644
|
|
|
6645
|
+
/* A finding's readable reference (I3, Q2): the name a feedback draft and the author's reply use for
|
|
6646
|
+
it. Quiet beside the title, monospaced so I1 and I12 read as labels rather than words, and level
|
|
6647
|
+
with the title's first line. */
|
|
6648
|
+
.prb-doc .pr-helper-finding-ref {
|
|
6649
|
+
flex: none;
|
|
6650
|
+
margin-top: 1px;
|
|
6651
|
+
font-family: ui-monospace, SFMono-Regular, 'SF Mono', Menlo, monospace;
|
|
6652
|
+
font-size: var(--t-micro);
|
|
6653
|
+
line-height: 18px;
|
|
6654
|
+
color: var(--pane-ink-muted);
|
|
6655
|
+
}
|
|
6656
|
+
|
|
6555
6657
|
/* ── Feedback selection ──
|
|
6556
6658
|
Choosing the Issues and Questions to raise with the author. The checkboxes ship on every card
|
|
6557
6659
|
and show only while the body carries the mode, so entering it is a stylesheet change, as the
|
package/static/sidebar.css
CHANGED
|
@@ -5474,6 +5474,21 @@
|
|
|
5474
5474
|
.pr-helper-reassessment-evidence .pr-helper-issue-loc { margin-top: 2px; }
|
|
5475
5475
|
/* Muted, not alarming: an unverified suggestion is still a reasoned one, and can still be accepted. */
|
|
5476
5476
|
.pr-helper-reassessment-unverified { margin: 2px 0 0; font-size: 11px; font-style: italic; color: #9a6700; }
|
|
5477
|
+
/* A status accepted from later evidence, or suggested: the answer as the evidence gives it, then the
|
|
5478
|
+
words it rests on, quoted as pasted, ruled like a comment's evidence because it is someone's claim. */
|
|
5479
|
+
.pr-helper-reassessment-answer { margin: 2px 0 0; font-size: 12px; line-height: 1.5; }
|
|
5480
|
+
.pr-helper-reassessment-quote {
|
|
5481
|
+
margin: 4px 0 0;
|
|
5482
|
+
padding: 2px 0 2px 8px;
|
|
5483
|
+
border-left: 2px solid rgba(15, 23, 42, 0.18);
|
|
5484
|
+
font-size: 11px;
|
|
5485
|
+
line-height: 1.5;
|
|
5486
|
+
color: var(--color-fg-muted, #57606a);
|
|
5487
|
+
white-space: pre-wrap;
|
|
5488
|
+
overflow-wrap: anywhere;
|
|
5489
|
+
}
|
|
5490
|
+
.pr-helper-reassessment-basis { margin: 4px 0 0; font-size: 11px; color: var(--color-fg-muted, #57606a); }
|
|
5491
|
+
.pr-helper-reassessment-contradicts { margin: 2px 0 0; font-size: 11px; font-style: italic; color: #9a6700; }
|
|
5477
5492
|
/* A finding's status history reuses the grade history's disclosure and steps. The quote is the
|
|
5478
5493
|
evidence as it read when the decision was made, which may no longer be what the thread says. */
|
|
5479
5494
|
.pr-helper-status-step-headline { font-weight: 600; }
|