@orangepro/orangepro-mcp 0.2.18 → 0.2.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/local/operations.js
CHANGED
|
@@ -1825,7 +1825,7 @@ export async function opGenerate(root, opts = {}, deps = defaultDeps()) {
|
|
|
1825
1825
|
// the only command that can surface them. Display-only refresh; a render
|
|
1826
1826
|
// failure must never fail generate.
|
|
1827
1827
|
try {
|
|
1828
|
-
opBehaviorCoverageHtml(root, `${WORKSPACE_DIR}/behavior-coverage.html
|
|
1828
|
+
opBehaviorCoverageHtml(root, `${WORKSPACE_DIR}/behavior-coverage.html`, undefined, { persistBaseline: false });
|
|
1829
1829
|
}
|
|
1830
1830
|
catch {
|
|
1831
1831
|
/* best-effort report refresh */
|
|
@@ -190,6 +190,26 @@ nav.tabs{display:flex;gap:2px;margin:18px 0 0;border-bottom:1px solid var(--bd)}
|
|
|
190
190
|
.delta-chip.dc-up{border-color:var(--green);color:var(--green)}
|
|
191
191
|
.delta-chip.dc-risk{border-color:var(--red);color:var(--red)}
|
|
192
192
|
.delta-chip.dc-none{color:var(--muted)}
|
|
193
|
+
.delta-chip.dc-click{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px;transition:opacity .15s}
|
|
194
|
+
.delta-chip.dc-click:hover{opacity:.7}
|
|
195
|
+
.delta-hero{margin:14px 0 0;border-radius:9px;padding:14px 18px;font-size:13px;line-height:1.5}
|
|
196
|
+
.delta-hero.dh-alert{background:var(--rbg);border:1px solid var(--rbd);color:var(--ink)}
|
|
197
|
+
.delta-hero.dh-clear{background:var(--gbg);border:1px solid var(--gbd);color:var(--ink2)}
|
|
198
|
+
.delta-hero.dh-info{background:var(--s1);border:1px solid var(--bd);color:var(--ink2)}
|
|
199
|
+
.delta-hero h3{font-size:15px;font-weight:700;margin:0 0 6px}
|
|
200
|
+
.delta-hero .dh-list{margin:6px 0 0;padding-left:16px;font-family:var(--mono);font-size:12px;list-style:none}
|
|
201
|
+
.delta-hero .dh-list li{padding:2px 0}
|
|
202
|
+
.delta-hero .dh-new{color:var(--red)}
|
|
203
|
+
.delta-hero .dh-new::before{content:"\\25B2 ";font-size:9px}
|
|
204
|
+
.delta-hero .dh-dropped{color:var(--green)}
|
|
205
|
+
.delta-hero .dh-dropped::before{content:"\\2713 ";}
|
|
206
|
+
.delta-hero .dh-stat{display:inline-flex;gap:12px;margin-top:8px;font-size:12px;font-weight:600;color:var(--muted)}
|
|
207
|
+
.delta-hero .dh-link{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px;transition:color .15s}
|
|
208
|
+
.delta-hero .dh-link:hover{color:var(--orange)}
|
|
209
|
+
.delta-hero .dh-stat .dh-stat-link{cursor:pointer;text-decoration:underline;text-decoration-style:dotted;text-underline-offset:2px;transition:color .15s}
|
|
210
|
+
.delta-hero .dh-stat .dh-stat-link:hover{color:var(--orange)}
|
|
211
|
+
.risk-card.highlight-pulse{animation:riskPulse .6s ease 2}
|
|
212
|
+
@keyframes riskPulse{0%,100%{box-shadow:none}50%{box-shadow:0 0 0 3px var(--orange)}}
|
|
193
213
|
.beh-empty{grid-column:1/-1;padding:22px;border:1px dashed var(--bd2);border-radius:10px;color:var(--muted);font-size:12.5px;display:flex;flex-direction:column;gap:10px;align-items:flex-start}
|
|
194
214
|
.beh-empty p{margin:0}
|
|
195
215
|
.risk-ep{font-family:var(--mono);font-size:13px;margin:0 0 6px}
|
|
@@ -299,6 +319,8 @@ body[data-mode="expert"] .simple-only{display:none!important}
|
|
|
299
319
|
<section class="kpis" id="kpis"></section>
|
|
300
320
|
<p class="metric-scope" id="metric-scope"></p>
|
|
301
321
|
|
|
322
|
+
<div class="delta-hero simple-only" id="delta-hero"></div>
|
|
323
|
+
|
|
302
324
|
<nav class="tabs simple-only" role="tablist">
|
|
303
325
|
<button class="tab" role="tab" aria-selected="true" data-tab="risks">Fix These <span class="tc" id="t-risk-s"></span></button>
|
|
304
326
|
<button class="tab" role="tab" aria-selected="false" data-tab="codebase">Your Code</button>
|
|
@@ -404,16 +426,77 @@ const D=window.DATA,$=(s)=>document.querySelector(s);
|
|
|
404
426
|
return;
|
|
405
427
|
}
|
|
406
428
|
var chips=[];
|
|
407
|
-
function chip(txt,cls){chips.push('<span class="delta-chip '+(cls||'')+'">'+txt+'</span>');}
|
|
429
|
+
function chip(txt,cls,dataAttr){chips.push('<span class="delta-chip '+(cls||'')+(dataAttr?' dc-click':'')+'"'+(dataAttr?' '+dataAttr:'')+'>'+txt+'</span>');}
|
|
408
430
|
chip('Since '+ago+':','dc-none');
|
|
409
431
|
if(d.totalDelta)chip((d.totalDelta>0?'+':'')+d.totalDelta+' behaviors');
|
|
410
|
-
if(d.provenDelta)chip((d.provenDelta>0?'+':'')+d.provenDelta+' proven',d.provenDelta>0?'dc-up':'dc-risk');
|
|
411
|
-
if(d.associatedDelta)chip((d.associatedDelta>0?'+':'')+d.associatedDelta+' test signal');
|
|
432
|
+
if(d.provenDelta)chip((d.provenDelta>0?'+':'')+d.provenDelta+' proven',d.provenDelta>0?'dc-up':'dc-risk','data-action="proven"');
|
|
433
|
+
if(d.associatedDelta)chip((d.associatedDelta>0?'+':'')+d.associatedDelta+' test signal','','data-action="signal"');
|
|
412
434
|
if(d.generatedDelta)chip((d.generatedDelta>0?'+':'')+d.generatedDelta+' generated tests',d.generatedDelta>0?'dc-up':'');
|
|
413
|
-
d.newRisks.slice(0,3).forEach(function(p){chip('new in top-20: '+p.slice(0,40),'dc-risk');});
|
|
435
|
+
d.newRisks.slice(0,3).forEach(function(p){chip('new in top-20: '+p.slice(0,40),'dc-risk','data-path="'+p.replace(/"/g,'"')+'"');});
|
|
414
436
|
if(d.newRisks.length>3)chip('+'+(d.newRisks.length-3)+' more new risks','dc-risk');
|
|
415
437
|
d.droppedRisks.slice(0,2).forEach(function(p){chip('left top-20: '+p.slice(0,40),'dc-up');});
|
|
416
438
|
el2.innerHTML='<div class="delta-wrap">'+chips.join('')+'</div>';
|
|
439
|
+
el2.addEventListener('click',function(e){
|
|
440
|
+
var c=e.target.closest('[data-path]');
|
|
441
|
+
if(c){scrollToRisk(c.getAttribute('data-path'));return;}
|
|
442
|
+
var a=e.target.closest('[data-action]');
|
|
443
|
+
if(a){
|
|
444
|
+
var act=a.getAttribute('data-action');
|
|
445
|
+
var t=D.risks.find(function(r){return r.tags&&r.tags.some(function(tg){return act==='proven'?(tg[0]==='Proven'||tg[0]==='Dynamically Proven'):(tg[0]==='Has tests'||tg[0]==='Test signal');});});
|
|
446
|
+
if(t)scrollToRisk(t.path);
|
|
447
|
+
}
|
|
448
|
+
});
|
|
449
|
+
})();
|
|
450
|
+
// ── Delta Hero: prominent simple-mode section (clickable) ──
|
|
451
|
+
function scrollToRisk(path){
|
|
452
|
+
var id='risk-'+path.replace(/[^a-zA-Z0-9]/g,'-');
|
|
453
|
+
var tab=document.querySelector('[data-tab="risks"]');
|
|
454
|
+
if(tab)tab.click();
|
|
455
|
+
setTimeout(function(){
|
|
456
|
+
var el=document.getElementById(id);
|
|
457
|
+
if(el){el.scrollIntoView({behavior:'smooth',block:'center'});el.classList.add('highlight-pulse');setTimeout(function(){el.classList.remove('highlight-pulse')},2400);}
|
|
458
|
+
},150);
|
|
459
|
+
}
|
|
460
|
+
(function(){
|
|
461
|
+
var hero=document.getElementById("delta-hero");
|
|
462
|
+
var d=D.delta;
|
|
463
|
+
if(!hero||d===undefined||d===null)return;
|
|
464
|
+
if(!d.changed){
|
|
465
|
+
var when=new Date(d.baselineTs);
|
|
466
|
+
var ago=isNaN(when.getTime())?"last run":when.toLocaleDateString();
|
|
467
|
+
hero.className="delta-hero simple-only dh-clear";
|
|
468
|
+
hero.innerHTML='<h3>\\u2713 No new blind spots since '+ago+'</h3><p>Your risk profile is unchanged.</p>';
|
|
469
|
+
return;
|
|
470
|
+
}
|
|
471
|
+
var parts=[];
|
|
472
|
+
var headline="";
|
|
473
|
+
if(d.newRisks.length>0){
|
|
474
|
+
headline=d.newRisks.length+' new blind spot'+(d.newRisks.length>1?'s':'')+' since last scan';
|
|
475
|
+
hero.className="delta-hero simple-only dh-alert";
|
|
476
|
+
parts.push('<ul class="dh-list">');
|
|
477
|
+
d.newRisks.forEach(function(r){parts.push('<li class="dh-new dh-link" data-path="'+r.replace(/"/g,'"')+'">' +r.slice(0,60)+'</li>');});
|
|
478
|
+
parts.push('</ul>');
|
|
479
|
+
} else {
|
|
480
|
+
headline="Your codebase changed since last scan";
|
|
481
|
+
hero.className="delta-hero simple-only dh-info";
|
|
482
|
+
}
|
|
483
|
+
if(d.droppedRisks.length>0){
|
|
484
|
+
parts.push('<ul class="dh-list">');
|
|
485
|
+
d.droppedRisks.forEach(function(r){parts.push('<li class="dh-dropped">\\u2713 Resolved: '+r.slice(0,60)+'</li>');});
|
|
486
|
+
parts.push('</ul>');
|
|
487
|
+
}
|
|
488
|
+
var stats=[];
|
|
489
|
+
if(d.totalDelta)stats.push((d.totalDelta>0?'+':'')+d.totalDelta+' behaviors');
|
|
490
|
+
if(d.provenDelta)stats.push('<span class="dh-stat-link" data-action="proven">'+((d.provenDelta>0?'+':'')+d.provenDelta+' proven')+'</span>');
|
|
491
|
+
if(d.generatedDelta)stats.push((d.generatedDelta>0?'+':'')+d.generatedDelta+' tests generated');
|
|
492
|
+
if(stats.length)parts.push('<div class="dh-stat">'+stats.join(' \\u00B7 ')+'</div>');
|
|
493
|
+
hero.innerHTML='<h3>'+headline+'</h3>'+parts.join('');
|
|
494
|
+
hero.addEventListener('click',function(e){
|
|
495
|
+
var li=e.target.closest('[data-path]');
|
|
496
|
+
if(li){scrollToRisk(li.getAttribute('data-path'));return;}
|
|
497
|
+
var stat=e.target.closest('[data-action="proven"]');
|
|
498
|
+
if(stat){var pr=D.risks.find(function(r){return r.tags&&r.tags.some(function(t){return t[0]==='Proven'||t[0]==='Dynamically Proven'});});if(pr)scrollToRisk(pr.path);}
|
|
499
|
+
});
|
|
417
500
|
})();
|
|
418
501
|
// ── System map: deterministic hero drawn from D.mapModel ──
|
|
419
502
|
(function(){
|
|
@@ -826,7 +909,7 @@ function riskCardHtml(r){
|
|
|
826
909
|
}
|
|
827
910
|
function renderRisks(){
|
|
828
911
|
riskList.innerHTML="";
|
|
829
|
-
D.risks.filter(riskMatchesFilter).forEach(r=>
|
|
912
|
+
D.risks.filter(riskMatchesFilter).forEach(r=>{const card=el("div","risk-card",riskCardHtml(r));card.setAttribute("data-path",r.path);card.id="risk-"+r.path.replace(/[^a-zA-Z0-9]/g,"-");riskList.append(card);});
|
|
830
913
|
if(activeRiskFilter==="all"&&D.generatedTotal){
|
|
831
914
|
const hiddenGeneratedFlows=Math.max(0,generatedRiskCount-D.risks.filter(riskMatchesFilter).length);
|
|
832
915
|
const remainingRiskFlows=Math.max(0,D.risks.length-generatedRiskCount);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orangepro/orangepro-mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.20",
|
|
4
4
|
"private": false,
|
|
5
5
|
"description": "OrangePro (`opro`) — a local-first, BYOK CLI + MCP server that builds an evidence graph from a local checkout, ingests runtime coverage, and generates grounded tests. Metadata-only exports; no source upload; generated tests stay local.",
|
|
6
6
|
"license": "MIT",
|