eklavya 1.73.0 → 1.74.0
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/README.md +5 -2
- package/dist/assets/dashboard.html +304 -67
- package/dist/assets/tokens.css +2 -0
- package/dist/feedback-review.js +25 -3
- package/dist/feedback-review.js.map +1 -1
- package/dist/feedback.js +3 -1
- package/dist/feedback.js.map +1 -1
- package/dist/plugin/.claude-plugin/plugin.json +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -147,8 +147,11 @@ covers retrieval, processing, providers, privacy and sync.
|
|
|
147
147
|
State is local under `~/.eklavya/`, including `knowledge.db` (SQLite, WAL).
|
|
148
148
|
`EKLAVYA_HOME` and `EKLAVYA_DB` override those paths. Questions and memory have
|
|
149
149
|
independent switches. Set `providers.observer` to `null` for local memory
|
|
150
|
-
summaries and no prompt feedback. Each feedback item
|
|
151
|
-
|
|
150
|
+
summaries and no prompt feedback. Each feedback item leads with a verdict that
|
|
151
|
+
says, in words and never a score, whether the prompt left each area clear, left
|
|
152
|
+
it out or did not need it (an older item says "Not flagged" for an area it
|
|
153
|
+
did not name), and shows the project, host, session and time it came
|
|
154
|
+
from, read from memory when you open it;
|
|
152
155
|
see [your data](https://eklavya-run.web.app/docs/your-data/). Anonymous daily
|
|
153
156
|
usage counts are on by default and never include paths, names or text;
|
|
154
157
|
[usage analytics](https://eklavya-run.web.app/docs/usage-analytics/) lists every
|
|
@@ -718,37 +718,146 @@
|
|
|
718
718
|
.fb__rule { border:1px solid var(--line-2); border-left:2px solid var(--spot); background:var(--panel);
|
|
719
719
|
padding:var(--space-4) var(--space-5); }
|
|
720
720
|
.fb__rule p { margin:0; color:var(--ink); font-size:14px; max-width:72ch; }
|
|
721
|
-
|
|
722
|
-
.fb { display:grid; gap:var(--space-6); }
|
|
723
|
-
.
|
|
721
|
+
/* The item: a story column and a decision rail that stays in view; a fixed bar replaces the rail's button at 900px and below. */
|
|
722
|
+
.fb { display:grid; grid-template-columns:minmax(0, 1fr) 300px; gap:var(--space-6); align-items:start; }
|
|
723
|
+
.fb__story { display:grid; gap:var(--space-6); min-width:0; }
|
|
724
|
+
.fb__rail { position:sticky; top:var(--space-6); display:grid; gap:var(--space-4); min-width:0; }
|
|
725
|
+
.fb__rail.is-tall { position:static; }
|
|
726
|
+
.fb__card { padding:var(--space-5); }
|
|
724
727
|
.fb__h { font-family:var(--font-mono); font-size:10.5px; letter-spacing:var(--tracking-caps); text-transform:uppercase;
|
|
725
728
|
color:var(--faint); font-weight:var(--weight-semibold); margin:0 0 var(--space-2); }
|
|
726
|
-
.
|
|
727
|
-
|
|
729
|
+
.fb__cap { margin:var(--space-1) 0 0; color:var(--faint); font-size:12.5px; }
|
|
730
|
+
.fb__note { margin:0; color:var(--dim); font-size:13.5px; overflow-wrap:anywhere; }
|
|
731
|
+
/* ① The verdict */
|
|
732
|
+
.fb__verdict { display:flex; gap:var(--space-5); align-items:flex-start; }
|
|
733
|
+
.fb__verdict > eklavya-mascot { flex:none; }
|
|
734
|
+
.fb__vb { flex:1; min-width:0; }
|
|
735
|
+
.fb__vh { font-family:var(--font-disp); font-weight:800; font-size:var(--text-xl); line-height:1.15; letter-spacing:-0.02em;
|
|
736
|
+
margin:0; color:var(--ink); overflow-wrap:anywhere; }
|
|
737
|
+
.fb__vh--old { font-size:var(--text-md); }
|
|
738
|
+
.fb__vs { margin:var(--space-2) 0 0; color:var(--dim); font-size:13.5px; }
|
|
739
|
+
.fb__cover { list-style:none; margin:var(--space-5) 0 0; padding:0; display:grid; grid-template-columns:repeat(4, minmax(0, 1fr));
|
|
740
|
+
border:1px solid var(--line-2); background:var(--bg); }
|
|
741
|
+
.fb__cell { display:grid; grid-template-columns:auto minmax(0, 1fr); column-gap:var(--space-2); align-items:center;
|
|
742
|
+
padding:var(--space-3) var(--space-4); color:var(--faint); }
|
|
743
|
+
.fb__cell + .fb__cell { border-left:1px solid var(--line-2); }
|
|
744
|
+
.fb__cell svg { width:16px; height:16px; grid-row:span 2; }
|
|
745
|
+
.fb__cn { color:var(--ink); font-size:13px; font-weight:var(--weight-semibold); }
|
|
746
|
+
.fb__cs { font-family:var(--font-mono); font-size:11px; letter-spacing:0.04em; }
|
|
747
|
+
.fb__cell.is-miss { color:var(--warning); box-shadow:inset 0 -2px 0 var(--warning); }
|
|
748
|
+
.fb__cell.is-ok { color:var(--spot); box-shadow:inset 0 -2px 0 var(--spot); }
|
|
749
|
+
/* ② The two prompts, one block */
|
|
750
|
+
.fb__grid { display:grid; grid-template-columns:repeat(2, minmax(0, 1fr)); border:1px solid var(--line-2); }
|
|
751
|
+
.fb__grid > section { padding:var(--space-5); min-width:0; }
|
|
752
|
+
.fb__mine { background:var(--panel); border-right:1px solid var(--line-2); }
|
|
753
|
+
.fb__better { background:var(--bg); }
|
|
754
|
+
.fb__ch { display:flex; align-items:center; justify-content:space-between; gap:var(--space-3); min-height:32px; margin-bottom:var(--space-2); }
|
|
755
|
+
.fb__ch .fb__h { margin:0; }
|
|
756
|
+
.fb__better .fb__h { color:var(--spot); }
|
|
757
|
+
.fb__quote { margin:0; color:var(--ink); white-space:pre-wrap; overflow-wrap:anywhere; font-size:14px; }
|
|
758
|
+
.fb__mine .fb__quote { color:var(--dim); }
|
|
728
759
|
.cmd--block { margin-top:0; align-items:flex-start; }
|
|
729
760
|
.cmd--block code { white-space:pre-wrap; overflow-wrap:anywhere; overflow-x:visible; }
|
|
730
|
-
.
|
|
731
|
-
.
|
|
732
|
-
.
|
|
733
|
-
.
|
|
734
|
-
.
|
|
735
|
-
|
|
736
|
-
.
|
|
737
|
-
.
|
|
738
|
-
|
|
739
|
-
|
|
740
|
-
.
|
|
761
|
+
.fb__better .cmd--block code { background:none; border:0; padding:0; color:var(--ink); font-size:13px; }
|
|
762
|
+
.fb__ph { background:var(--spot-soft); color:inherit; padding:0 2px; }
|
|
763
|
+
.fb__clamp { position:relative; overflow:hidden; transition:max-height var(--duration-base) var(--ease); }
|
|
764
|
+
.fb__clamp.is-clamped { max-height:15.5em; }
|
|
765
|
+
.fb__clamp.is-clamped::after { content:''; position:absolute; inset:auto 0 0; height:4em; pointer-events:none;
|
|
766
|
+
background:linear-gradient(transparent, var(--bg)); }
|
|
767
|
+
.fb__mine .fb__clamp.is-clamped::after { background:linear-gradient(transparent, var(--panel)); }
|
|
768
|
+
.fb__copy, .fb__more, .fb__del { font:inherit; font-size:13px; cursor:pointer; background:none; color:var(--dim);
|
|
769
|
+
border:1px solid transparent; display:inline-flex; align-items:center; gap:var(--space-2);
|
|
770
|
+
padding:var(--space-1) var(--space-2); }
|
|
771
|
+
.fb__copy svg { width:14px; height:14px; }
|
|
772
|
+
.fb__copy:hover, .fb__more:hover { color:var(--spot); border-color:var(--spot); }
|
|
773
|
+
.fb__more { margin-top:var(--space-2); padding-inline:0; color:var(--spot); }
|
|
774
|
+
.fb__more:hover { border-color:transparent; text-decoration:underline; }
|
|
775
|
+
.fb__copy:focus-visible, .fb__more:focus-visible, .fb__del:focus-visible { outline:none; box-shadow:var(--ring); }
|
|
776
|
+
/* ③ What worked */
|
|
777
|
+
.fb__worked { display:flex; gap:var(--space-4); align-items:flex-start; padding:var(--space-4) var(--space-5);
|
|
778
|
+
background:var(--panel); border:1px solid var(--line-2); border-left:2px solid var(--spot); }
|
|
779
|
+
.fb__worked > eklavya-mascot, .fb__sh > eklavya-mascot, .fb__tip > eklavya-mascot, .fb__dh > eklavya-mascot { flex:none; }
|
|
780
|
+
.fb__worked .fb__h { color:var(--spot); margin-bottom:var(--space-1); }
|
|
781
|
+
.fb__worked p { margin:0; color:var(--ink); font-size:14px; overflow-wrap:anywhere; }
|
|
782
|
+
/* ④ What it left out and ⑤ next time */
|
|
783
|
+
.fb__sec { display:grid; gap:var(--space-4); }
|
|
784
|
+
.fb__sh { display:flex; gap:var(--space-3); align-items:center; }
|
|
785
|
+
.fb__sh h3, .fb__dh h3 { font-family:var(--font-disp); font-weight:800; font-size:var(--text-md); margin:0; color:var(--ink); }
|
|
786
|
+
.fb__ds, .fb__tips { list-style:none; margin:0; padding:0; }
|
|
787
|
+
.fb__ds { border:1px solid var(--line-2); background:var(--panel); }
|
|
788
|
+
.fb__ds li { display:grid; grid-template-columns:44px minmax(0, 1fr); gap:var(--space-4); padding:var(--space-5) var(--space-6); }
|
|
789
|
+
.fb__ds li + li { border-top:1px solid var(--line); }
|
|
790
|
+
.fb__tile { width:44px; height:44px; display:grid; place-items:center; background:var(--warning-soft); color:var(--warning); }
|
|
791
|
+
.fb__tile svg { width:20px; height:20px; }
|
|
792
|
+
.fb__gb { display:grid; gap:var(--space-1); min-width:0; }
|
|
793
|
+
.fb__gt { margin:0; color:var(--ink); font-weight:var(--weight-semibold); font-size:14px; }
|
|
794
|
+
.fb__gt small { font-family:var(--font-mono); font-weight:400; font-size:11px; color:var(--faint); margin-left:var(--space-2); }
|
|
795
|
+
.fb__ev { display:flex; gap:var(--space-3); align-items:baseline; flex-wrap:wrap; margin:var(--space-2) 0 0; font-size:13px; }
|
|
796
|
+
.fb__evl { font-family:var(--font-mono); font-size:10.5px; letter-spacing:var(--tracking-caps); text-transform:uppercase; color:var(--faint); }
|
|
797
|
+
.fb__ev q { background:var(--mass); color:var(--ink); padding:var(--space-1) var(--space-2); overflow-wrap:anywhere; quotes:'“' '”'; }
|
|
798
|
+
.fb__tips { display:grid; gap:var(--space-3); counter-reset:t; }
|
|
799
|
+
.fb__tips li { counter-increment:t; display:grid; grid-template-columns:auto minmax(0, 1fr); gap:var(--space-4); align-items:baseline;
|
|
800
|
+
background:var(--panel); border:1px solid var(--line-2); padding:var(--space-4) var(--space-5);
|
|
801
|
+
color:var(--ink); font-size:14px; overflow-wrap:anywhere; }
|
|
802
|
+
.fb__tips li::before { content:'0' counter(t); font-family:var(--font-disp); font-weight:900; font-size:var(--text-2xl);
|
|
803
|
+
line-height:1; color:var(--spot); }
|
|
804
|
+
@media (min-width:1100px) {
|
|
805
|
+
.fb__tips[data-n="2"] { grid-template-columns:repeat(2, minmax(0, 1fr)); }
|
|
806
|
+
.fb__tips[data-n="3"] { grid-template-columns:repeat(3, minmax(0, 1fr)); }
|
|
807
|
+
.fb__tips[data-n="2"] li, .fb__tips[data-n="3"] li { grid-template-columns:minmax(0, 1fr); align-content:start; }
|
|
808
|
+
}
|
|
809
|
+
/* ⑥ Found a problem */
|
|
810
|
+
.fb__tip { display:flex; gap:var(--space-3); align-items:center; flex-wrap:wrap; padding-top:var(--space-4); border-top:1px solid var(--line-2); }
|
|
811
|
+
.fb__tip p { flex:1 1 260px; margin:0; color:var(--dim); font-size:13px; }
|
|
812
|
+
.fb__tip code { background:var(--mass); padding:1px 6px; font-size:12px; color:var(--ink); }
|
|
813
|
+
/* The rail */
|
|
814
|
+
.fb__ctx { display:grid; gap:var(--space-3); margin:0; font-size:13px; }
|
|
815
|
+
.fb__ctx dt { font-family:var(--font-mono); font-size:10.5px; letter-spacing:var(--tracking-caps); text-transform:uppercase; color:var(--faint); }
|
|
816
|
+
.fb__ctx dd { margin:var(--space-1) 0 0; color:var(--ink); overflow-wrap:anywhere; }
|
|
817
|
+
.fb__ctx .slug { display:block; font-family:var(--font-mono); font-size:11px; color:var(--faint); overflow-wrap:anywhere; }
|
|
818
|
+
.fb__decide { border-color:var(--spot); display:grid; gap:var(--space-3); }
|
|
819
|
+
.fb__dh { display:flex; gap:var(--space-3); align-items:center; }
|
|
820
|
+
.fb__dp { margin:0; color:var(--dim); font-size:13.5px; }
|
|
821
|
+
.fb__actions { display:grid; gap:var(--space-2); }
|
|
822
|
+
.fb__ack { width:100%; min-height:44px; justify-content:center; display:inline-flex; align-items:center; gap:var(--space-2); }
|
|
823
|
+
.fb__ack svg { width:16px; height:16px; }
|
|
824
|
+
.fb__del { color:var(--faint); justify-content:center; min-height:32px; }
|
|
825
|
+
.fb__del:hover { color:var(--error); }
|
|
741
826
|
.fb__ask { display:inline-flex; gap:var(--space-3); flex-wrap:wrap; align-items:center; color:var(--dim); font-size:13.5px; }
|
|
742
827
|
.fb__msg { margin:0; color:var(--warning); font-size:13px; }
|
|
828
|
+
.fb__msg:empty { display:none; }
|
|
829
|
+
.fb__foot { display:flex; justify-content:space-between; margin:0; padding-top:var(--space-3); border-top:1px solid var(--line);
|
|
830
|
+
font-family:var(--font-mono); font-size:11px; color:var(--faint); }
|
|
831
|
+
.fb__acked { margin:0; font-family:var(--font-mono); font-size:12px; color:var(--faint); }
|
|
832
|
+
.fb__bar { display:none; }
|
|
743
833
|
.fb__sts { display:flex; gap:var(--space-2); flex-wrap:wrap; }
|
|
744
|
-
.fb__tip h2 { font-family:var(--font-disp); font-size:var(--text-md); font-weight:var(--weight-semibold); margin:0 0 var(--space-2); }
|
|
745
|
-
.fb__tip p { margin:0 0 var(--space-4); color:var(--dim); max-width:70ch; }
|
|
746
|
-
.fb__tip .fb__quote { margin-bottom:var(--space-4); }
|
|
747
834
|
.fb__why p { margin:0 0 var(--space-3); color:var(--dim); max-width:70ch; }
|
|
835
|
+
@media (max-width:900px) {
|
|
836
|
+
.fb { grid-template-columns:minmax(0, 1fr); }
|
|
837
|
+
.fb__rail { position:static; }
|
|
838
|
+
.fb__ctx { grid-template-columns:repeat(2, minmax(0, 1fr)); column-gap:var(--space-5); }
|
|
839
|
+
/* The bar holds Acknowledge here; the rail card keeps Delete and the message. */
|
|
840
|
+
.fb__decide .fb__ack { display:none; }
|
|
841
|
+
.fb__bar { display:flex; align-items:center; gap:var(--space-4); position:fixed; inset:auto 0 0; z-index:20;
|
|
842
|
+
background:var(--panel); border-top:1px solid var(--spot); padding:var(--space-3) var(--space-5); }
|
|
843
|
+
.fb__bar p { flex:1; margin:0; color:var(--dim); font-size:13.5px; }
|
|
844
|
+
.fb__bar .fb__ack { width:auto; flex:none; }
|
|
845
|
+
main:has(.fb__bar) { padding-bottom:120px; }
|
|
846
|
+
}
|
|
748
847
|
@media (max-width:560px) {
|
|
848
|
+
.fb__verdict > eklavya-mascot { display:none; }
|
|
749
849
|
.fb__grid { grid-template-columns:minmax(0, 1fr); }
|
|
750
|
-
.
|
|
751
|
-
.
|
|
850
|
+
.fb__mine { border-right:0; border-bottom:1px solid var(--line-2); }
|
|
851
|
+
.fb__cover { grid-template-columns:repeat(2, minmax(0, 1fr)); }
|
|
852
|
+
.fb__cell + .fb__cell { border-left:0; }
|
|
853
|
+
.fb__cell:nth-child(even) { border-left:1px solid var(--line-2); }
|
|
854
|
+
.fb__cell:nth-child(n+3) { border-top:1px solid var(--line-2); }
|
|
855
|
+
.fb__ds li { padding:var(--space-4); gap:var(--space-3); }
|
|
856
|
+
.fb__ctx { grid-template-columns:minmax(0, 1fr); }
|
|
857
|
+
.fb__bar p { display:none; }
|
|
858
|
+
.fb__bar .fb__ack { flex:1; width:100%; }
|
|
859
|
+
.fb__copy, .fb__del, .fb__tip .set__btn { min-height:44px; }
|
|
860
|
+
.fb__del { width:100%; }
|
|
752
861
|
.fb__ask > button { flex:1 1 40%; min-height:44px; }
|
|
753
862
|
}
|
|
754
863
|
.starts__more > summary { cursor:pointer; color:var(--dim); font-size:13px; padding:var(--space-2) 0; }
|
|
@@ -1557,12 +1666,14 @@ function startBlocks(title, cmds) {
|
|
|
1557
1666
|
|
|
1558
1667
|
/** Copies a block's command; if the clipboard refuses, selects it for the keyboard shortcut instead. */
|
|
1559
1668
|
function copyCommand(btn) {
|
|
1560
|
-
|
|
1669
|
+
// `data-copy` may name the text it copies, for a button that is not beside it; its text is plain, without the marks.
|
|
1670
|
+
const code = btn.dataset.copy ? $(btn.dataset.copy) : btn.parentElement.querySelector('code');
|
|
1671
|
+
const label = btn.querySelector('span') ?? btn;
|
|
1561
1672
|
const live = $('copy-live');
|
|
1562
1673
|
Promise.resolve().then(() => navigator.clipboard.writeText(code.textContent)).then(() => {
|
|
1563
|
-
|
|
1674
|
+
label.textContent = 'Copied';
|
|
1564
1675
|
live.textContent = 'Command copied';
|
|
1565
|
-
setTimeout(() => {
|
|
1676
|
+
setTimeout(() => { label.textContent = 'Copy'; }, 1500);
|
|
1566
1677
|
}, () => {
|
|
1567
1678
|
getSelection().selectAllChildren(code);
|
|
1568
1679
|
live.textContent = `Press ${/Mac|iPhone|iPad/.test(navigator.userAgent) ? '⌘C' : 'Ctrl+C'} to copy`;
|
|
@@ -4282,9 +4393,13 @@ function drawSettings(d, scope) {
|
|
|
4282
4393
|
============================================================ */
|
|
4283
4394
|
const FB = {
|
|
4284
4395
|
ruleEmpty: 'Eklavya reviews one prompt at a time. When one is ready it appears here, and the next waits until you press Acknowledge.',
|
|
4285
|
-
rulePending: '
|
|
4396
|
+
rulePending: 'The next review waits until you acknowledge this one. It moves to History.',
|
|
4397
|
+
barRule: 'The next review waits until you acknowledge this one.',
|
|
4286
4398
|
announce: 'Acknowledged. Feedback resumes at your next session.',
|
|
4287
4399
|
areas: { outcome: 'Outcome', context: 'Context', scope: 'Scope', check: 'Check' },
|
|
4400
|
+
hints: { outcome: 'what done looks like', context: 'files, systems, prior facts', scope: 'the limits', check: 'how the agent proves it worked' },
|
|
4401
|
+
// `unknown` is an item from rubric 2 or older, which named only its gaps.
|
|
4402
|
+
status: { left_out: 'Left out', clear: 'Clear', not_needed: 'Not needed', unknown: 'Not flagged' },
|
|
4288
4403
|
counted: false,
|
|
4289
4404
|
observerCmd: 'eklavya config set providers.observer <model>',
|
|
4290
4405
|
about: `Your prompts are already recorded by memory. After a session ends, in the background and never in the middle of your work,
|
|
@@ -4319,16 +4434,17 @@ function fbEmpty(F) {
|
|
|
4319
4434
|
return `<div class="card fb__why" id="fb-empty"><div class="ek-mascot-message"><eklavya-mascot state="${state}" size="72"></eklavya-mascot><div>${body}</div></div></div>`;
|
|
4320
4435
|
}
|
|
4321
4436
|
|
|
4437
|
+
/** With no item, the rule is said above the reason; with one, it sits beside Acknowledge in the rail. */
|
|
4438
|
+
const fbNone = (F) => `<div class="fb__rule" id="fb-rule"><p>${esc(FB.ruleEmpty)}</p></div>${fbEmpty(F)}${fbTip()}`;
|
|
4439
|
+
|
|
4322
4440
|
function viewFeedbackDashboard() {
|
|
4323
4441
|
const F = S.feedback;
|
|
4324
|
-
const item = F.pending ? slot('fb-item', '/api/feedback', (d) => d.item ? drawFbItem(d.item) :
|
|
4442
|
+
const item = F.pending ? slot('fb-item', '/api/feedback', (d) => d.item ? drawFbItem(d.item) : fbNone(S.feedback), { label: 'Loading your feedback…' }) : '';
|
|
4325
4443
|
if (F.pending && !FB.counted) { FB.counted = true; AFTER.push(fbOpened); }
|
|
4326
4444
|
const counts = [F.pending ? '1 waiting' : 'nothing waiting', plural(F.acknowledged, 'acknowledged item')];
|
|
4327
4445
|
return [
|
|
4328
4446
|
pageHead('Feedback', counts, FB.about),
|
|
4329
|
-
|
|
4330
|
-
F.pending ? item : fbEmpty(F),
|
|
4331
|
-
fbTip(),
|
|
4447
|
+
F.pending ? item : fbNone(F),
|
|
4332
4448
|
`<span class="sr" id="copy-live" aria-live="polite"></span>`,
|
|
4333
4449
|
].join('');
|
|
4334
4450
|
}
|
|
@@ -4342,10 +4458,10 @@ function viewFeedbackDashboard() {
|
|
|
4342
4458
|
const FB_TIP_KEY = 'eklavya-dash-feedback-tip';
|
|
4343
4459
|
function fbTip() {
|
|
4344
4460
|
try { if (localStorage.getItem(FB_TIP_KEY) === '1') return ''; } catch (e) { /* shown */ }
|
|
4345
|
-
return `<aside class="
|
|
4346
|
-
<
|
|
4347
|
-
<
|
|
4348
|
-
<
|
|
4461
|
+
return `<aside class="fb__tip" id="fb-tip" aria-labelledby="fb-tip-h">
|
|
4462
|
+
<eklavya-mascot state="info" variant="face" size="28"></eklavya-mascot>
|
|
4463
|
+
<h2 class="sr" id="fb-tip-h">Found a problem with Eklavya?</h2>
|
|
4464
|
+
<p>Found a problem with Eklavya itself? Tell Claude <code>File feedback for Eklavya</code>; it shows you the issue before posting.</p>
|
|
4349
4465
|
<button type="button" class="set__btn" data-fb-tip-dismiss>Dismiss</button>
|
|
4350
4466
|
</aside>`;
|
|
4351
4467
|
}
|
|
@@ -4366,57 +4482,162 @@ function viewFeedbackItem(id) {
|
|
|
4366
4482
|
].join('');
|
|
4367
4483
|
}
|
|
4368
4484
|
|
|
4485
|
+
const fbAck = (id) => `<button type="button" class="btn fb__ack" data-fb-ack="${id}">${svg(ICONS.ack)}Acknowledge</button>`;
|
|
4369
4486
|
const fbActions = (id) => `<div class="fb__actions" id="fb-actions">
|
|
4370
|
-
|
|
4371
|
-
<button type="button" class="
|
|
4487
|
+
${fbAck(id)}
|
|
4488
|
+
<button type="button" class="fb__del" data-fb-del="${id}">Delete this feedback</button>
|
|
4372
4489
|
<p class="fb__msg" id="fb-msg" role="alert"></p></div>`;
|
|
4373
4490
|
|
|
4374
4491
|
const fmtWhen = (ts) => { const d = parse(ts); return d ? d.toLocaleString(undefined, { month:'short', day:'numeric', hour:'numeric', minute:'2-digit' }) : null; };
|
|
4375
4492
|
|
|
4376
|
-
/** Where the prompt was written: project, checkout,
|
|
4493
|
+
/** Where the prompt was written: project, checkout, session, when and from which host, so the note is not blind. */
|
|
4377
4494
|
function fbContext(it) {
|
|
4378
4495
|
const c = it.context ?? {};
|
|
4379
|
-
const
|
|
4380
|
-
|
|
4496
|
+
const line = (html) => `<span class="slug">${html}</span>`;
|
|
4497
|
+
const sent = [fmtWhen(c.prompted_at), c.host].filter(Boolean).join(' · ');
|
|
4381
4498
|
const rows = [
|
|
4382
|
-
['Project', `${esc(pname(it.project))}
|
|
4499
|
+
['Project', `${esc(pname(it.project))}${line(esc(it.project))}`],
|
|
4383
4500
|
c.checkout && c.checkout !== it.project ? ['Checkout', esc(c.checkout)] : null,
|
|
4501
|
+
c.session_id ? ['Session', `<a data-go="${esc(MH('session', c.session_id))}">${esc(c.session_id.slice(0, 8))}</a>`
|
|
4502
|
+
+ (c.prompts ? esc(' · ' + plural(c.prompts, 'prompt')) : '')
|
|
4503
|
+
+ (c.began && c.ended ? line(esc(`${fmtWhen(c.began)} – ${fmtWhen(c.ended)}`)) : '')] : null,
|
|
4504
|
+
sent ? ['Sent', esc(sent)] : null,
|
|
4384
4505
|
c.topic ? ['About', esc(c.topic)] : null,
|
|
4385
|
-
c.host ? ['Host', esc(c.host)] : null,
|
|
4386
|
-
fmtWhen(c.prompted_at) ? ['Sent', esc(fmtWhen(c.prompted_at))] : null,
|
|
4387
|
-
c.session_id ? ['Session', `<a data-go="${esc(MH('session', c.session_id))}">${esc(c.session_id.slice(0, 8))}</a>${esc(sessionTail)}`] : null,
|
|
4388
4506
|
].filter(Boolean);
|
|
4389
|
-
return `<section><h2 class="fb__h">Where you said it</h2
|
|
4507
|
+
return `<section class="card fb__card" aria-labelledby="fb-ctx-h"><h2 class="fb__h" id="fb-ctx-h">Where you said it</h2>
|
|
4508
|
+
<dl class="fb__ctx">${rows.map(([k, v]) => `<div><dt>${k}</dt><dd>${v}</dd></div>`).join('')}</dl></section>`;
|
|
4390
4509
|
}
|
|
4391
4510
|
|
|
4392
|
-
/**
|
|
4511
|
+
/** The order of the coverage strip. The headline lists gaps in the review's own order, costliest first. */
|
|
4512
|
+
const AREA_ORDER = ['outcome', 'context', 'scope', 'check'];
|
|
4513
|
+
const fbList = (xs) => xs.length < 2 ? xs.join('') : `${xs.slice(0, -1).join(', ')} and ${xs[xs.length - 1]}`;
|
|
4514
|
+
|
|
4515
|
+
/** An area's status: the review's word since rubric 3; before it, a gap is "left out" and anything else was never said. */
|
|
4516
|
+
const fbStatus = (review, a) => review.areas?.[a] ?? (review.gaps.some((g) => g.area === a) ? 'left_out' : 'unknown');
|
|
4517
|
+
const FB_CLS = { left_out: 'is-miss', clear: 'is-ok', not_needed: 'is-na', unknown: 'is-na' };
|
|
4518
|
+
|
|
4519
|
+
/** The conclusion first. Every word of it comes from the gap areas, never from model text, and none is a number. */
|
|
4520
|
+
function fbVerdict(it) {
|
|
4521
|
+
const { worked, gaps } = it.review;
|
|
4522
|
+
const date = it.context?.prompted_at ? fmtDate(it.context.prompted_at) : '';
|
|
4523
|
+
const label = `<p class="fb__h">Review of one prompt${date ? ' · ' + esc(date) : ''}</p>`;
|
|
4524
|
+
// Only an item cleared by migration 029 has no `worked` (parseReview requires one).
|
|
4525
|
+
if (!worked) {
|
|
4526
|
+
return `<section class="card fb__verdict" aria-labelledby="fb-verdict-h"><eklavya-mascot state="info" size="88"></eklavya-mascot>
|
|
4527
|
+
<div>${label}<h2 class="fb__vh fb__vh--old" id="fb-verdict-h">An older review: the prompt, the rewrite and the tips are below.</h2></div></section>`;
|
|
4528
|
+
}
|
|
4529
|
+
const areas = [...new Set(gaps.map((g) => g.area))].map((a) => 'the ' + (FB.areas[a] ?? a).toLowerCase());
|
|
4530
|
+
const head = areas.length ? `The agent had to guess ${fbList(areas)}.` : 'Nothing here left the agent guessing.';
|
|
4531
|
+
const cells = AREA_ORDER.map((a) => {
|
|
4532
|
+
const st = fbStatus(it.review, a);
|
|
4533
|
+
return `<li role="listitem" class="fb__cell ${FB_CLS[st]}">${svg(ICONS[a])}<span class="fb__cn">${esc(FB.areas[a])}</span> <span class="fb__cs">${esc(FB.status[st])}</span></li>`;
|
|
4534
|
+
}).join('');
|
|
4535
|
+
return `<section class="card fb__verdict" aria-labelledby="fb-verdict-h">
|
|
4536
|
+
<eklavya-mascot state="${gaps.length ? 'review' : 'complete'}" size="88"></eklavya-mascot>
|
|
4537
|
+
<div class="fb__vb">${label}<h2 class="fb__vh" id="fb-verdict-h">${esc(head)}</h2>
|
|
4538
|
+
${gaps.length ? '<p class="fb__vs">Of the prompts in that session, this one cost the most rework.</p>' : ''}
|
|
4539
|
+
<ul class="fb__cover" role="list" aria-label="What the prompt covered">${cells}</ul></div></section>`;
|
|
4540
|
+
}
|
|
4541
|
+
|
|
4542
|
+
/** A long text is clamped with its own toggle; `id` names the text the toggle controls. */
|
|
4543
|
+
const FB_CLAMP = { better: 600, mine: 1500 };
|
|
4544
|
+
const fbMore = (key, id, text) => text.length > FB_CLAMP[key]
|
|
4545
|
+
? `<button type="button" class="fb__more" data-fb-more="${id}" data-focus="more:${key}" aria-expanded="false" aria-controls="${id}">Show the whole prompt</button>` : '';
|
|
4546
|
+
|
|
4547
|
+
function fbToggle(btn) {
|
|
4548
|
+
const el = $(btn.dataset.fbMore);
|
|
4549
|
+
const open = btn.getAttribute('aria-expanded') !== 'true';
|
|
4550
|
+
if (open) {
|
|
4551
|
+
el.classList.remove('is-clamped');
|
|
4552
|
+
// A height to move to, so the expansion is a transition; then no cap, so a resize cannot cut it.
|
|
4553
|
+
el.style.maxHeight = el.scrollHeight + 'px';
|
|
4554
|
+
setTimeout(() => { if (!el.classList.contains('is-clamped')) el.style.maxHeight = 'none'; }, 400);
|
|
4555
|
+
} else {
|
|
4556
|
+
el.style.maxHeight = el.scrollHeight + 'px';
|
|
4557
|
+
el.getBoundingClientRect();
|
|
4558
|
+
el.style.maxHeight = '';
|
|
4559
|
+
el.classList.add('is-clamped');
|
|
4560
|
+
}
|
|
4561
|
+
btn.setAttribute('aria-expanded', String(open));
|
|
4562
|
+
btn.textContent = open ? 'Show less' : 'Show the whole prompt';
|
|
4563
|
+
}
|
|
4564
|
+
|
|
4565
|
+
/** The rewrite, escaped first; each [placeholder] it left for a detail only the developer knows is then marked. */
|
|
4566
|
+
const FB_PH = /\[[^\]\n]{2,200}\]/g;
|
|
4567
|
+
|
|
4568
|
+
function fbCompare(it) {
|
|
4569
|
+
const better = esc(it.better);
|
|
4570
|
+
const marked = better.replace(FB_PH, (m) => `<mark class="fb__ph">${m}</mark>`);
|
|
4571
|
+
const clamp = (key, text) => text.length > FB_CLAMP[key] ? ' is-clamped' : '';
|
|
4572
|
+
return `<div class="fb__grid">
|
|
4573
|
+
<section class="fb__mine" aria-labelledby="fb-mine-h"><div class="fb__ch"><h2 class="fb__h" id="fb-mine-h">Your prompt</h2></div>
|
|
4574
|
+
<div class="fb__clamp${clamp('mine', it.prompt)}" id="fb-mine-t"><blockquote class="fb__quote">${esc(it.prompt)}</blockquote></div>${fbMore('mine', 'fb-mine-t', it.prompt)}</section>
|
|
4575
|
+
<section class="fb__better" aria-labelledby="fb-better-h"><div class="fb__ch"><h2 class="fb__h" id="fb-better-h">A better prompt</h2>
|
|
4576
|
+
<button type="button" class="fb__copy" data-copy="fb-better-c" data-focus="copy:better">${svg(ICONS.copy)}<span>Copy</span></button></div>
|
|
4577
|
+
<div class="cmd cmd--block fb__clamp${clamp('better', it.better)}" id="fb-better-t"><code id="fb-better-c">${marked}</code></div>${fbMore('better', 'fb-better-t', it.better)}
|
|
4578
|
+
${marked !== better ? '<p class="fb__cap">Highlighted: details only you know. Fill them in before you reuse it.</p>' : ''}</section>
|
|
4579
|
+
</div>`;
|
|
4580
|
+
}
|
|
4581
|
+
|
|
4582
|
+
/** A section's head: its mascot, its heading and one quiet line. */
|
|
4583
|
+
const fbHead = (state, id, title, cap) => `<div class="fb__sh"><eklavya-mascot state="${state}" variant="face" size="40"></eklavya-mascot>
|
|
4584
|
+
<div><h3 id="${id}">${title}</h3>${cap ? `<p class="fb__cap">${cap}</p>` : ''}</div></div>`;
|
|
4585
|
+
|
|
4586
|
+
function fbGaps(gaps) {
|
|
4587
|
+
if (!gaps.length) {
|
|
4588
|
+
return `<section class="fb__sec" aria-labelledby="fb-gaps-h">${fbHead('success', 'fb-gaps-h', 'What it left out', '')}
|
|
4589
|
+
<p class="fb__note">Nothing the agent had to guess.</p></section>`;
|
|
4590
|
+
}
|
|
4591
|
+
const rows = gaps.map((g) => `<li><span class="fb__tile">${svg(ICONS[g.area] ?? '')}</span><div class="fb__gb">
|
|
4592
|
+
<p class="fb__gt">${esc(FB.areas[g.area] ?? g.area)} <small>${esc(FB.hints[g.area] ?? '')}</small></p>
|
|
4593
|
+
<p class="fb__note">${esc(g.missing)}</p>
|
|
4594
|
+
${g.evidence ? `<p class="fb__ev"><span class="fb__evl" aria-hidden="true">You, later</span><span class="sr">You said later: </span><q>${esc(g.evidence)}</q></p>` : ''}</div></li>`).join('');
|
|
4595
|
+
return `<section class="fb__sec" aria-labelledby="fb-gaps-h">${fbHead('warning', 'fb-gaps-h', 'What it left out', 'What the agent had to guess, costliest first')}
|
|
4596
|
+
<ol class="fb__ds">${rows}</ol></section>`;
|
|
4597
|
+
}
|
|
4598
|
+
|
|
4599
|
+
/** The decision, beside the item: the rule, Acknowledge and Delete. Only while it is pending. */
|
|
4600
|
+
const fbDecide = (it) => `<section class="card fb__card fb__decide" aria-labelledby="fb-decide-h">
|
|
4601
|
+
<div class="fb__dh"><eklavya-mascot state="info" variant="face" size="32"></eklavya-mascot><h3 id="fb-decide-h">Done reading?</h3></div>
|
|
4602
|
+
<p class="fb__dp">${esc(FB.rulePending)}</p>
|
|
4603
|
+
${fbActions(it.id)}
|
|
4604
|
+
<p class="fb__foot"><span>1 waiting</span><span>${esc(S.feedback.acknowledged + ' in history')}</span></p></section>`;
|
|
4605
|
+
|
|
4606
|
+
/**
|
|
4607
|
+
* One item: the verdict, the two prompts, what worked, what it left out and the
|
|
4608
|
+
* habits for next time, with the decision held in view beside them (a fixed bar
|
|
4609
|
+
* at 900px and below). Acknowledge only while it is pending.
|
|
4610
|
+
*/
|
|
4393
4611
|
function drawFbItem(it) {
|
|
4394
4612
|
const pending = !it.acknowledged_at;
|
|
4395
4613
|
const { worked, gaps } = it.review;
|
|
4396
|
-
|
|
4397
|
-
|
|
4398
|
-
|
|
4399
|
-
|
|
4400
|
-
|
|
4401
|
-
|
|
4402
|
-
|
|
4403
|
-
|
|
4404
|
-
|
|
4405
|
-
|
|
4406
|
-
|
|
4407
|
-
return `<article class="card fb" aria-label="Feedback on one of your prompts">
|
|
4408
|
-
${fbContext(it)}
|
|
4409
|
-
<div class="fb__grid">
|
|
4410
|
-
<section><h2 class="fb__h">Your prompt</h2><blockquote class="fb__quote">${esc(it.prompt)}</blockquote></section>
|
|
4411
|
-
<section><h2 class="fb__h">A better prompt</h2>
|
|
4412
|
-
<div class="cmd cmd--block"><code>${esc(it.better)}</code><button type="button" class="cmd__copy" data-copy data-focus="copy:better">Copy</button></div></section>
|
|
4614
|
+
chart('fb-rail', fbRailFit);
|
|
4615
|
+
return `<article class="fb" aria-label="Feedback on one of your prompts">
|
|
4616
|
+
<div class="fb__story">
|
|
4617
|
+
${fbVerdict(it)}
|
|
4618
|
+
${fbCompare(it)}
|
|
4619
|
+
${worked ? `<section class="fb__worked" aria-labelledby="fb-worked-h"><eklavya-mascot state="success" variant="face" size="40"></eklavya-mascot>
|
|
4620
|
+
<div><h3 class="fb__h" id="fb-worked-h">What worked</h3><p>${esc(worked)}</p></div></section>` : ''}
|
|
4621
|
+
${worked ? fbGaps(gaps) : ''}
|
|
4622
|
+
<section class="fb__sec" aria-labelledby="fb-tips-h">${fbHead('tip', 'fb-tips-h', 'Next time', worked ? 'Habits that would have saved those follow-ups' : 'Habits for next time')}
|
|
4623
|
+
<ol class="fb__tips" data-n="${Math.min(it.tips.length, 3)}">${it.tips.map((t) => `<li>${esc(t)}</li>`).join('')}</ol></section>
|
|
4624
|
+
${pending ? fbTip() : ''}
|
|
4413
4625
|
</div>
|
|
4414
|
-
|
|
4415
|
-
|
|
4416
|
-
|
|
4626
|
+
<aside class="fb__rail" id="fb-rail" aria-label="About this prompt">
|
|
4627
|
+
${fbContext(it)}
|
|
4628
|
+
${pending ? fbDecide(it) : `<p class="fb__acked">Acknowledged ${esc(fmtDate(it.acknowledged_at))}</p>`}
|
|
4629
|
+
</aside>
|
|
4630
|
+
${pending ? `<div class="fb__bar" role="region" aria-label="Acknowledge this feedback"><p>${esc(FB.barRule)}</p>${fbAck(it.id)}</div>` : ''}
|
|
4417
4631
|
</article>`;
|
|
4418
4632
|
}
|
|
4419
4633
|
|
|
4634
|
+
/** The rail stays in view while it fits the window; one taller than that would hide its own end, so it scrolls with the page. */
|
|
4635
|
+
function fbRailFit() {
|
|
4636
|
+
const rail = $('fb-rail');
|
|
4637
|
+
if (rail) rail.classList.toggle('is-tall', rail.offsetHeight > innerHeight - 48);
|
|
4638
|
+
}
|
|
4639
|
+
addEventListener('resize', fbRailFit);
|
|
4640
|
+
|
|
4420
4641
|
function viewFeedbackHistory() {
|
|
4421
4642
|
const p = new URLSearchParams();
|
|
4422
4643
|
if (PROJECT !== null) p.set('project', PROJECT);
|
|
@@ -4472,11 +4693,18 @@ function fbFail(e) {
|
|
|
4472
4693
|
|
|
4473
4694
|
function fbAcknowledge(btn) {
|
|
4474
4695
|
if (btn.disabled) return;
|
|
4475
|
-
|
|
4696
|
+
// The rail's button and the bar's are one action: pressing either holds both.
|
|
4697
|
+
const both = [...document.querySelectorAll('[data-fb-ack]')];
|
|
4698
|
+
both.forEach((b) => { b.disabled = true; });
|
|
4476
4699
|
postJson('/api/feedback/acknowledge', { id: +btn.dataset.fbAck })
|
|
4477
4700
|
// The item, its history row and the next one waiting all changed: what was read of them is gone.
|
|
4478
4701
|
.then((d) => { S.feedback = d.state; respForget('/api/feedback'); fbDone(FB.announce); })
|
|
4479
|
-
.catch((e) => {
|
|
4702
|
+
.catch((e) => {
|
|
4703
|
+
both.forEach((b) => { b.disabled = false; });
|
|
4704
|
+
fbFail(e);
|
|
4705
|
+
// Under the bar the message is in the rail card, after the story.
|
|
4706
|
+
if (innerWidth <= 900) $('fb-msg')?.scrollIntoView({ block: 'nearest' });
|
|
4707
|
+
});
|
|
4480
4708
|
}
|
|
4481
4709
|
|
|
4482
4710
|
function fbAskDelete(btn) {
|
|
@@ -4610,6 +4838,13 @@ const ICONS = {
|
|
|
4610
4838
|
history: '<circle cx="12" cy="12" r="9"/><path d="M12 7v5l3 2"/>',
|
|
4611
4839
|
user: '<circle cx="12" cy="8" r="4"/><path d="M4 21a8 8 0 0 1 16 0"/>',
|
|
4612
4840
|
project: '<path d="M3 7l9-4 9 4-9 4-9-4z"/><path d="M3 12l9 4 9-4M3 17l9 4 9-4"/>',
|
|
4841
|
+
// The four areas a prompt can leave the agent to guess, and the Feedback item's two actions.
|
|
4842
|
+
outcome: '<circle cx="12" cy="12" r="10"/><circle cx="12" cy="12" r="6"/><circle cx="12" cy="12" r="2"/>',
|
|
4843
|
+
context: '<path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"/><path d="M14 2v4a2 2 0 0 0 2 2h4"/>',
|
|
4844
|
+
scope: '<path d="M3 7V5a2 2 0 0 1 2-2h2"/><path d="M17 3h2a2 2 0 0 1 2 2v2"/><path d="M21 17v2a2 2 0 0 1-2 2h-2"/><path d="M7 21H5a2 2 0 0 1-2-2v-2"/>',
|
|
4845
|
+
check: '<circle cx="12" cy="12" r="10"/><path d="m9 12 2 2 4-4"/>',
|
|
4846
|
+
copy: '<rect width="14" height="14" x="8" y="8"/><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"/>',
|
|
4847
|
+
ack: '<path d="M20 6 9 17l-5-5"/>',
|
|
4613
4848
|
};
|
|
4614
4849
|
const svg = (paths, cls = '') =>
|
|
4615
4850
|
`<svg${cls ? ` class="${cls}"` : ''} viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="1.7"
|
|
@@ -5703,7 +5938,7 @@ function catchUp() {
|
|
|
5703
5938
|
* opens (`detailSelector`). A control with none is not carried over a redraw, so every control the reader can Tab to has one.
|
|
5704
5939
|
*/
|
|
5705
5940
|
const FOCUS_KEYS = ['data-focus', 'data-tab', 'data-tab-id', 'data-state', 'data-unset', 'data-go',
|
|
5706
|
-
'data-fb-ack', 'data-fb-del', 'data-fb-yes', 'data-fb-no', 'data-fb-tip-dismiss'];
|
|
5941
|
+
'data-fb-ack', 'data-fb-del', 'data-fb-more', 'data-fb-yes', 'data-fb-no', 'data-fb-tip-dismiss'];
|
|
5707
5942
|
function focusKey(el) {
|
|
5708
5943
|
if (el.id) return `#${CSS.escape(el.id)}`;
|
|
5709
5944
|
for (const a of FOCUS_KEYS) {
|
|
@@ -5811,6 +6046,8 @@ function onActivate(e) {
|
|
|
5811
6046
|
if (e.target.closest('[data-slot][aria-busy="true"][data-kept]')) return;
|
|
5812
6047
|
const copy = e.target.closest('[data-copy]');
|
|
5813
6048
|
if (copy) return copyCommand(copy);
|
|
6049
|
+
const more = e.target.closest('[data-fb-more]');
|
|
6050
|
+
if (more) return fbToggle(more);
|
|
5814
6051
|
if (e.target.closest('[data-fb-tip-dismiss]')) return fbTipDismiss();
|
|
5815
6052
|
const ack = e.target.closest('[data-fb-ack]');
|
|
5816
6053
|
if (ack) return fbAcknowledge(ack);
|
package/dist/assets/tokens.css
CHANGED
|
@@ -161,6 +161,7 @@
|
|
|
161
161
|
--spot: var(--vd-300);
|
|
162
162
|
--spot-ink: #17171a; /* text ON a --spot fill */
|
|
163
163
|
--spot-soft: color-mix(in srgb, var(--spot) 14%, transparent);
|
|
164
|
+
--warning-soft: color-mix(in srgb, var(--warning) 14%, transparent);
|
|
164
165
|
|
|
165
166
|
--grid: #1f1f23; /* background rule grid */
|
|
166
167
|
--glow: rgba(25,150,136,.22); /* the terminal's halo */
|
|
@@ -197,6 +198,7 @@
|
|
|
197
198
|
--spot: var(--vd-700);
|
|
198
199
|
--spot-ink: #ffffff;
|
|
199
200
|
--spot-soft: color-mix(in srgb, var(--spot) 10%, transparent);
|
|
201
|
+
--warning-soft: color-mix(in srgb, var(--warning) 10%, transparent);
|
|
200
202
|
|
|
201
203
|
--grid: #e5e1d7;
|
|
202
204
|
/* a light ground carries far less glow before it reads as a stain, and
|
package/dist/feedback-review.js
CHANGED
|
@@ -19,6 +19,8 @@ export const AREAS = {
|
|
|
19
19
|
check: 'How the agent proves it worked: the test, command or observation that says done.',
|
|
20
20
|
};
|
|
21
21
|
const AREA_KEYS = Object.keys(AREAS);
|
|
22
|
+
/** What the review says of each area: the prompt made it clear, left it to guess, or the task did not need it. */
|
|
23
|
+
export const AREA_STATUS = ['clear', 'left_out', 'not_needed'];
|
|
22
24
|
/** One source for the limits: the validator, the clip and the prompt all read these. */
|
|
23
25
|
export const REVIEW_LIMIT = {
|
|
24
26
|
note: 240,
|
|
@@ -41,9 +43,15 @@ export const REVIEW_SCHEMA = {
|
|
|
41
43
|
review: {
|
|
42
44
|
type: 'object',
|
|
43
45
|
additionalProperties: false,
|
|
44
|
-
required: ['worked', 'gaps'],
|
|
46
|
+
required: ['worked', 'gaps', 'areas'],
|
|
45
47
|
properties: {
|
|
46
48
|
worked: { type: 'string' },
|
|
49
|
+
areas: {
|
|
50
|
+
type: 'object',
|
|
51
|
+
additionalProperties: false,
|
|
52
|
+
required: AREA_KEYS,
|
|
53
|
+
properties: Object.fromEntries(AREA_KEYS.map((k) => [k, { type: 'string', enum: AREA_STATUS }])),
|
|
54
|
+
},
|
|
47
55
|
gaps: {
|
|
48
56
|
type: 'array',
|
|
49
57
|
items: {
|
|
@@ -78,6 +86,7 @@ export const REVIEW_SYSTEM = [
|
|
|
78
86
|
`Name its gaps, at most ${REVIEW_LIMIT.gaps}, the most costly first, each in one area:`,
|
|
79
87
|
...AREA_KEYS.map((k) => `- ${k}: ${AREAS[k]}`),
|
|
80
88
|
'Name only gaps that mattered for this task: a one-line fix needs no test plan. No gaps is a valid answer for a prompt that left nothing to guess.',
|
|
89
|
+
'"areas" says, for each of the four areas, whether the chosen prompt made it clear ("clear"), left it for the agent to guess ("left_out") or did not need it for this task ("not_needed"). Every area you name in gaps is "left_out". Words only.',
|
|
81
90
|
`"missing" says in one or two plain sentences, under ${REVIEW_LIMIT.note} characters, what the prompt left out and what that cost.`,
|
|
82
91
|
`When a later prompt supplied it, "evidence" is a quote of fewer than ${REVIEW_LIMIT.evidenceWords} words copied exactly, character for character, from one prompt after the chosen one. Otherwise leave evidence out: never paraphrase or invent a quote.`,
|
|
83
92
|
`"worked" is one plain sentence, under ${REVIEW_LIMIT.note} characters, on what the prompt did well.`,
|
|
@@ -99,11 +108,16 @@ export function renderPrompts(prompts) {
|
|
|
99
108
|
const Gap = z
|
|
100
109
|
.object({ area: z.enum(AREA_KEYS), missing: z.string().min(1).max(REVIEW_LIMIT.note), evidence: z.string().optional() })
|
|
101
110
|
.strict();
|
|
111
|
+
const Status = z.enum(AREA_STATUS);
|
|
102
112
|
const ReviewResult = z
|
|
103
113
|
.object({
|
|
104
114
|
chosen: z.number().int().min(1),
|
|
105
115
|
review: z
|
|
106
|
-
.object({
|
|
116
|
+
.object({
|
|
117
|
+
worked: z.string().min(1).max(REVIEW_LIMIT.note),
|
|
118
|
+
gaps: z.array(Gap).max(REVIEW_LIMIT.gaps),
|
|
119
|
+
areas: z.object({ outcome: Status, context: Status, scope: Status, check: Status }).strict(),
|
|
120
|
+
})
|
|
107
121
|
.strict(),
|
|
108
122
|
better: z.string().min(1).max(REVIEW_LIMIT.better),
|
|
109
123
|
tips: z.array(z.string().min(1).max(REVIEW_LIMIT.tip)).min(1).max(REVIEW_LIMIT.tips),
|
|
@@ -144,6 +158,11 @@ const normal = (s) => s.toLowerCase().replace(/\s+/g, ' ').trim();
|
|
|
144
158
|
* still the model's reading, only the proof is gone, and failing the whole
|
|
145
159
|
* review for it throws away a paid call. A score, or any key the schema does
|
|
146
160
|
* not name, is a rejection: the review has no numbers.
|
|
161
|
+
*
|
|
162
|
+
* `areas` is reconciled with the gaps, and the gaps win: an area named in a gap
|
|
163
|
+
* is `left_out` whatever `areas` said, because the gap carries the reason. An
|
|
164
|
+
* area marked `left_out` with no gap stays so (the gaps are capped). A
|
|
165
|
+
* disagreement is corrected, never a rejection, for the same paid-call reason.
|
|
147
166
|
*/
|
|
148
167
|
export function parseReview(raw, prompts) {
|
|
149
168
|
const result = ReviewResult.safeParse(clip(raw));
|
|
@@ -159,7 +178,10 @@ export function parseReview(raw, prompts) {
|
|
|
159
178
|
return quote && quote.split(' ').length < REVIEW_LIMIT.evidenceWords && later.some((p) => p.includes(quote));
|
|
160
179
|
};
|
|
161
180
|
const gaps = review.gaps.map(({ area, missing, evidence }) => quoted(evidence) ? { area, missing, evidence: evidence.trim() } : { area, missing });
|
|
162
|
-
|
|
181
|
+
const areas = { ...review.areas };
|
|
182
|
+
for (const g of gaps)
|
|
183
|
+
areas[g.area] = 'left_out';
|
|
184
|
+
return { chosen, review: { worked: review.worked, gaps, areas }, better, tips };
|
|
163
185
|
}
|
|
164
186
|
/** One review of one session's prompts, on the developer's subscription. Throws `ProviderError`. */
|
|
165
187
|
export async function reviewPrompts(model, prompts, opts = {}) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback-review.js","sourceRoot":"","sources":["../src/feedback-review.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAClD,OAAO,EAAE,aAAa,EAAE,UAAU,EAAE,SAAS,EAAiB,MAAM,sBAAsB,CAAC;AAG3F;;;;;;GAMG;AAEH;;;GAGG;AACH,MAAM,CAAC,MAAM,KAAK,GAAG;IACnB,OAAO,EAAE,+DAA+D;IACxE,OAAO,EAAE,kFAAkF;IAC3F,KAAK,EAAE,4FAA4F;IACnG,KAAK,EAAE,kFAAkF;CACjF,CAAC;AAGX,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAAC,KAAK,CAA4B,CAAC;AAEhE,wFAAwF;AACxF,MAAM,CAAC,MAAM,YAAY,GAAG;IAC1B,IAAI,EAAE,GAAG;IACT,MAAM,EAAE,IAAI;IACZ,GAAG,EAAE,GAAG;IACR,IAAI,EAAE,CAAC;IACP,IAAI,EAAE,CAAC;IACP,kEAAkE;IAClE,OAAO,EAAE,CAAC;IACV,WAAW,EAAE,IAAI;IACjB,wCAAwC;IACxC,aAAa,EAAE,EAAE;CACT,CAAC;AAEX,MAAM,CAAC,MAAM,aAAa,GAAG;IAC3B,IAAI,EAAE,QAAQ;IACd,oBAAoB,EAAE,KAAK;IAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,CAAC;IAChD,UAAU,EAAE;QACV,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE;QAC3B,MAAM,EAAE;YACN,IAAI,EAAE,QAAQ;YACd,oBAAoB,EAAE,KAAK;YAC3B,QAAQ,EAAE,CAAC,QAAQ,EAAE,MAAM,CAAC;
|
|
1
|
+
{"version":3,"file":"feedback-review.js","sourceRoot":"","sources":["../src/feedback-review.ts"],"names":[],"mappings":"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"}
|
package/dist/feedback.js
CHANGED
|
@@ -11,8 +11,10 @@ import { HELPERS, HOST_PROMPT, SLASH, TASK_PROMPT_CHARS } from './prompt-text.js
|
|
|
11
11
|
/**
|
|
12
12
|
* Which wording of the review an item was written against. Items from rubric 1
|
|
13
13
|
* had their notes cleared by migration 029; their prompt, rewrite and tips stay.
|
|
14
|
+
* Rubric 3 adds `review.areas`; older items have none and the page says
|
|
15
|
+
* "Not flagged" for an area their gaps do not name.
|
|
14
16
|
*/
|
|
15
|
-
export const FEEDBACK_RUBRIC =
|
|
17
|
+
export const FEEDBACK_RUBRIC = 3;
|
|
16
18
|
const parse = (r) => ({ ...r, review: JSON.parse(r.review), tips: JSON.parse(r.tips) });
|
|
17
19
|
/**
|
|
18
20
|
* The single place the switch and its dependency are combined. Feedback reads
|
package/dist/feedback.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"feedback.js","sourceRoot":"","sources":["../src/feedback.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "eklavya",
|
|
3
3
|
"displayName": "Eklavya",
|
|
4
|
-
"version": "1.
|
|
4
|
+
"version": "1.74.0",
|
|
5
5
|
"description": "Learn while your agent works. Turns coding-agent generation time into adaptive, Socratic learning grounded in the code being written.",
|
|
6
6
|
"author": {
|
|
7
7
|
"name": "Ajay Kumar"
|
package/package.json
CHANGED