@orangepro/orangepro-mcp 0.2.21 → 0.2.23
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.
|
@@ -264,6 +264,18 @@ nav.tabs{display:flex;gap:2px;margin:18px 0 0;border-bottom:1px solid var(--bd)}
|
|
|
264
264
|
.paywall-btn:hover{opacity:.85}
|
|
265
265
|
|
|
266
266
|
|
|
267
|
+
/* PLATFORM CTA: STICKY FOOTER */
|
|
268
|
+
.platform-footer{position:fixed;bottom:0;left:0;right:0;background:linear-gradient(135deg,#1a0a02 0%,#2a1508 100%);border-top:1px solid var(--obd);padding:8px 20px;display:flex;align-items:center;justify-content:center;gap:12px;z-index:999;font-size:12px}
|
|
269
|
+
.platform-footer-text{color:var(--muted);font-size:12px}
|
|
270
|
+
.platform-footer-text b{color:var(--orange);font-weight:700}
|
|
271
|
+
.platform-footer-btn{display:inline-flex;align-items:center;gap:5px;background:var(--orange);color:#1a0a02;font-size:11px;font-weight:700;padding:5px 12px;border-radius:5px;text-decoration:none;transition:opacity .12s;white-space:nowrap}
|
|
272
|
+
.platform-footer-btn:hover{opacity:.85}
|
|
273
|
+
/* PLATFORM CTA: TOP BANNER (inside risk panel) */
|
|
274
|
+
.platform-top-banner{background:linear-gradient(135deg,rgba(240,136,62,.06),rgba(240,136,62,.02));border:1px solid var(--obd);border-radius:8px;padding:10px 14px;margin-bottom:12px;display:flex;align-items:center;justify-content:space-between;gap:12px}
|
|
275
|
+
.platform-top-banner-text{font-size:12px;color:var(--muted)}
|
|
276
|
+
.platform-top-banner-text b{color:var(--ink)}
|
|
277
|
+
/* Add bottom padding to body so sticky footer doesn't overlap content */
|
|
278
|
+
body{padding-bottom:48px}
|
|
267
279
|
/* === OPTION A: MODE TOGGLE (SEGMENTED PILL) === */
|
|
268
280
|
.mode-switch{display:inline-flex;align-items:center;background:var(--s2);border-radius:7px;padding:3px;gap:2px;border:1px solid var(--bd)}
|
|
269
281
|
.mode-btn{padding:5px 14px;font:650 11px var(--sans);border-radius:5px;cursor:pointer;border:none;background:transparent;color:var(--muted);transition:all .15s;letter-spacing:.01em}
|
|
@@ -852,6 +864,12 @@ if(cf&&cf.flows.length){
|
|
|
852
864
|
});
|
|
853
865
|
}
|
|
854
866
|
|
|
867
|
+
// Platform CTA: after flows
|
|
868
|
+
const flowCta=el("div","paywall",
|
|
869
|
+
\`<div class="paywall-num">\${D.flows.length} flows mapped locally</div>
|
|
870
|
+
<div class="paywall-txt">Track flow regressions across commits, correlate with production incidents, and set merge gates on OrangePro Platform.</div>
|
|
871
|
+
<a class="paywall-btn" href="https://orangepro.ai/get-started" target="_blank">Unlock Full Analysis →</a>\`);
|
|
872
|
+
fl.after(flowCta);
|
|
855
873
|
// risks + generated test samples
|
|
856
874
|
const riskList=$("#risk-list"),riskTools=$("#risk-tools");
|
|
857
875
|
if(D.viewMeta){
|
|
@@ -859,6 +877,11 @@ if(D.viewMeta){
|
|
|
859
877
|
if(rm&&rm.scored>rm.shown)$("#risk-cap-note").textContent="Showing the top "+rm.shown+" of "+rm.scored.toLocaleString()+" scored behaviors — every behavior is scored; only the highest-risk are surfaced here. Full ranking: opro gaps --limit N, or .orangepro/graph.json.";
|
|
860
878
|
if(fm&&fm.shown>0&&fm.prunedByCaps>0)$("#flow-cap-note").textContent="Showing "+fm.shown.toLocaleString()+" flows, endpoint-anchored first. "+fm.prunedByCaps.toLocaleString()+" additional branch expansions were pruned by depth/branch/global rendering caps — pruning affects display only, not scoring.";
|
|
861
879
|
}
|
|
880
|
+
// Platform CTA: top banner in risk panel
|
|
881
|
+
const riskTopBanner=el("div","platform-top-banner",
|
|
882
|
+
\`<span class="platform-top-banner-text">Local scan shows <b>\${D.risks.length}</b> priority gaps. Full ranked list, incident correlation, and CI merge gate on Platform.</span>
|
|
883
|
+
<a class="platform-footer-btn" href="https://orangepro.ai/get-started" target="_blank">Unlock Full Analysis →</a>\`);
|
|
884
|
+
riskList.before(riskTopBanner);
|
|
862
885
|
const generatedRiskCount=D.risks.filter(r=>r.generatedTests&&r.generatedTests.length).length;
|
|
863
886
|
let activeRiskFilter=generatedRiskCount?"generated":"all";
|
|
864
887
|
function riskMatchesFilter(r){
|
|
@@ -918,18 +941,18 @@ function riskCardHtml(r){
|
|
|
918
941
|
function renderRisks(){
|
|
919
942
|
riskList.innerHTML="";
|
|
920
943
|
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);});
|
|
921
|
-
if(
|
|
944
|
+
if(D.generatedTotal){
|
|
922
945
|
const hiddenGeneratedFlows=Math.max(0,generatedRiskCount-D.risks.filter(riskMatchesFilter).length);
|
|
923
946
|
const remainingRiskFlows=Math.max(0,D.risks.length-generatedRiskCount);
|
|
924
947
|
riskList.append(el("div","paywall",
|
|
925
948
|
hiddenGeneratedFlows
|
|
926
949
|
? \`<div class="paywall-num">\${hiddenGeneratedFlows} more flows with tests</div>
|
|
927
950
|
<div class="paywall-txt">OrangePro accepted \${D.generatedTotal} runnable generated test\${D.generatedTotal===1?"":"s"} across \${generatedRiskCount} high-risk flow\${generatedRiskCount===1?"":"s"}. Use the “Flows with tests” filter to review them first.</div>
|
|
928
|
-
<a class="paywall-btn" href="https://
|
|
951
|
+
<a class="paywall-btn" href="https://orangepro.ai/get-started" target="_blank">View all on OrangePro Platform →</a>\`
|
|
929
952
|
: remainingRiskFlows
|
|
930
953
|
? \`<div class="paywall-num">\${remainingRiskFlows} high-risk flows left</div>
|
|
931
954
|
<div class="paywall-txt">The local MCP accepted \${D.generatedTotal} runnable generated test\${D.generatedTotal===1?"":"s"} across \${generatedRiskCount} high-risk flow\${generatedRiskCount===1?"":"s"}. Generate the remaining high-risk flow tests on OrangePro Platform.</div>
|
|
932
|
-
<a class="paywall-btn" href="https://
|
|
955
|
+
<a class="paywall-btn" href="https://orangepro.ai/get-started" target="_blank">Generate remaining tests on Platform →</a>\`
|
|
933
956
|
: \`<div class="paywall-num">All generated tests are shown</div>
|
|
934
957
|
<div class="paywall-txt">OrangePro generated tests for every high-risk flow in this report, and every generated test is visible here.</div>\`));
|
|
935
958
|
}
|
|
@@ -954,8 +977,19 @@ const tabs=[...document.querySelectorAll(".tab")];
|
|
|
954
977
|
tabs.forEach(t=>t.onclick=()=>activateTab(t.dataset.tab));
|
|
955
978
|
// Set initial tab based on mode
|
|
956
979
|
activateTab(viewMode==="simple"?"risks":"codebase");
|
|
980
|
+
// Update platform footer with real numbers
|
|
981
|
+
const pf=document.getElementById("platform-cta-footer");
|
|
982
|
+
if(pf&&D.viewMeta&&D.viewMeta.risks){
|
|
983
|
+
const rm=D.viewMeta.risks;
|
|
984
|
+
pf.querySelector(".platform-footer-text").innerHTML=
|
|
985
|
+
\`Showing top <b>\${rm.shown}</b> of <b>\${rm.scored.toLocaleString()}</b> scored behaviors. Full risk ranking + incident correlation + CI gate on Platform.\`;
|
|
986
|
+
}
|
|
957
987
|
})();
|
|
958
988
|
</script>
|
|
989
|
+
<div class="platform-footer" id="platform-cta-footer">
|
|
990
|
+
<span class="platform-footer-text">Showing top <b>20</b> blind spots. Full risk ranking + incident correlation + CI gate on Platform.</span>
|
|
991
|
+
<a class="platform-footer-btn" href="https://orangepro.ai/get-started" target="_blank">Unlock Full Analysis →</a>
|
|
992
|
+
</div>
|
|
959
993
|
</body>
|
|
960
994
|
</html>
|
|
961
995
|
`;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@orangepro/orangepro-mcp",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.23",
|
|
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",
|