@orangepro/orangepro-mcp 0.2.17 → 0.2.19

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.
@@ -190,6 +190,18 @@ 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-hero{margin:14px 0 0;border-radius:9px;padding:14px 18px;font-size:13px;line-height:1.5}
194
+ .delta-hero.dh-alert{background:var(--rbg);border:1px solid var(--rbd);color:var(--ink)}
195
+ .delta-hero.dh-clear{background:var(--gbg);border:1px solid var(--gbd);color:var(--ink2)}
196
+ .delta-hero.dh-info{background:var(--s1);border:1px solid var(--bd);color:var(--ink2)}
197
+ .delta-hero h3{font-size:15px;font-weight:700;margin:0 0 6px}
198
+ .delta-hero .dh-list{margin:6px 0 0;padding-left:16px;font-family:var(--mono);font-size:12px;list-style:none}
199
+ .delta-hero .dh-list li{padding:2px 0}
200
+ .delta-hero .dh-new{color:var(--red)}
201
+ .delta-hero .dh-new::before{content:"\\25B2 ";font-size:9px}
202
+ .delta-hero .dh-dropped{color:var(--green)}
203
+ .delta-hero .dh-dropped::before{content:"\\2713 ";}
204
+ .delta-hero .dh-stat{display:inline-flex;gap:12px;margin-top:8px;font-size:12px;font-weight:600;color:var(--muted)}
193
205
  .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
206
  .beh-empty p{margin:0}
195
207
  .risk-ep{font-family:var(--mono);font-size:13px;margin:0 0 6px}
@@ -299,6 +311,8 @@ body[data-mode="expert"] .simple-only{display:none!important}
299
311
  <section class="kpis" id="kpis"></section>
300
312
  <p class="metric-scope" id="metric-scope"></p>
301
313
 
314
+ <div class="delta-hero simple-only" id="delta-hero"></div>
315
+
302
316
  <nav class="tabs simple-only" role="tablist">
303
317
  <button class="tab" role="tab" aria-selected="true" data-tab="risks">Fix These <span class="tc" id="t-risk-s"></span></button>
304
318
  <button class="tab" role="tab" aria-selected="false" data-tab="codebase">Your Code</button>
@@ -367,7 +381,7 @@ body[data-mode="expert"] .simple-only{display:none!important}
367
381
  <section class="panel" id="panel-risks" role="tabpanel">
368
382
  <div class="simple-intro simple-only">
369
383
  <h2>Your highest-risk blind spots</h2>
370
- <p>These methods have the most structural exposure (high fan-in, recent churn, entry points) and no test proves they work. Each card includes a generated test you can copy into your repo.</p>
384
+ <p>These are your highest-risk integration points where multiple flows converge, where recent changes landed, and where no test proves they hold. Each card includes a generated test you can copy into your repo.</p>
371
385
  </div>
372
386
  <p class="bridge expert-only">This is the <b>priority-gap worklist</b>, ranked by blast radius and test weakness. It is separate from the coverage-status cards above: <b>Reachable · no test signal</b> is one strict coverage bucket, not the number of priority gaps.</p>
373
387
  <p class="bridge" id="risk-cap-note" style="font-size:12px;opacity:.75"></p>
@@ -415,6 +429,42 @@ const D=window.DATA,$=(s)=>document.querySelector(s);
415
429
  d.droppedRisks.slice(0,2).forEach(function(p){chip('left top-20: '+p.slice(0,40),'dc-up');});
416
430
  el2.innerHTML='<div class="delta-wrap">'+chips.join('')+'</div>';
417
431
  })();
432
+ // ── Delta Hero: prominent simple-mode section ──
433
+ (function(){
434
+ var hero=document.getElementById("delta-hero");
435
+ var d=D.delta;
436
+ if(!hero||d===undefined||d===null)return;
437
+ if(!d.changed){
438
+ var when=new Date(d.baselineTs);
439
+ var ago=isNaN(when.getTime())?"last run":when.toLocaleDateString();
440
+ hero.className="delta-hero simple-only dh-clear";
441
+ hero.innerHTML='<h3>\\u2713 No new blind spots since '+ago+'</h3><p>Your risk profile is unchanged.</p>';
442
+ return;
443
+ }
444
+ var parts=[];
445
+ var headline="";
446
+ if(d.newRisks.length>0){
447
+ headline=d.newRisks.length+' new blind spot'+(d.newRisks.length>1?'s':'')+' since last scan';
448
+ hero.className="delta-hero simple-only dh-alert";
449
+ parts.push('<ul class="dh-list">');
450
+ d.newRisks.forEach(function(r){parts.push('<li class="dh-new">'+r.slice(0,60)+'</li>');});
451
+ parts.push('</ul>');
452
+ } else {
453
+ headline="Your codebase changed since last scan";
454
+ hero.className="delta-hero simple-only dh-info";
455
+ }
456
+ if(d.droppedRisks.length>0){
457
+ parts.push('<ul class="dh-list">');
458
+ d.droppedRisks.forEach(function(r){parts.push('<li class="dh-dropped">Resolved: '+r.slice(0,60)+'</li>');});
459
+ parts.push('</ul>');
460
+ }
461
+ var stats=[];
462
+ if(d.totalDelta)stats.push((d.totalDelta>0?'+':'')+d.totalDelta+' behaviors');
463
+ if(d.provenDelta)stats.push((d.provenDelta>0?'+':'')+d.provenDelta+' proven');
464
+ if(d.generatedDelta)stats.push((d.generatedDelta>0?'+':'')+d.generatedDelta+' tests generated');
465
+ if(stats.length)parts.push('<div class="dh-stat">'+stats.join(' \\u00B7 ')+'</div>');
466
+ hero.innerHTML='<h3>'+headline+'</h3>'+parts.join('');
467
+ })();
418
468
  // ── System map: deterministic hero drawn from D.mapModel ──
419
469
  (function(){
420
470
  var M=D.mapModel;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@orangepro/orangepro-mcp",
3
- "version": "0.2.17",
3
+ "version": "0.2.19",
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",