@shnitzel/plugscout 0.3.17 → 0.3.18

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.
@@ -11,7 +11,8 @@ export async function writeWebReport(options) {
11
11
  loadSecurityPolicy(),
12
12
  loadItemInsights()
13
13
  ]);
14
- const filtered = filterByKinds(items, options.kinds).slice(0, options.limit);
14
+ const allFiltered = filterByKinds(items, options.kinds);
15
+ const filtered = allFiltered.slice(0, options.limit);
15
16
  const quarantineIds = new Set(quarantine.map((entry) => entry.id));
16
17
  const rows = filtered.map((item) => {
17
18
  const assessment = buildAssessment(item, policy);
@@ -19,8 +20,9 @@ export async function writeWebReport(options) {
19
20
  const blocked = blockedByPolicy || quarantineIds.has(item.id);
20
21
  return { item, assessment, blocked, approved: whitelist.has(item.id), insight: insights.get(item.id) };
21
22
  });
22
- const html = renderHtml(rows, {
23
- totalItems: filtered.length,
23
+ const html = renderHtml(rows, allFiltered, {
24
+ totalItems: allFiltered.length,
25
+ shownItems: filtered.length,
24
26
  whitelist: whitelist.size,
25
27
  quarantined: quarantine.length
26
28
  }, policy);
@@ -36,8 +38,8 @@ function filterByKinds(items, kinds) {
36
38
  const set = new Set(kinds);
37
39
  return items.filter((item) => set.has(item.kind));
38
40
  }
39
- function renderHtml(rows, stats, policy) {
40
- const kindCounts = countByKind(rows.map((entry) => entry.item));
41
+ function renderHtml(rows, allItems, stats, policy) {
42
+ const kindCounts = countByKind(allItems);
41
43
  const riskScale = escapeHtml(formatRiskScale(policy));
42
44
  const cardsJson = rows.map((entry) => renderDetailCard(entry, policy)).join('\n');
43
45
  return `<!doctype html>
@@ -206,9 +208,10 @@ function renderHtml(rows, stats, policy) {
206
208
  <div class="wrap">
207
209
  <h1>PlugScout Web Report</h1>
208
210
  <p class="sub">Claude plugins · Claude connectors · Copilot extensions · Cursor extensions · Gemini extensions · Skills · MCP servers</p>
211
+ ${stats.shownItems < stats.totalItems ? `<p class="sub" style="color:var(--muted)">Showing ${stats.shownItems.toLocaleString()} of ${stats.totalItems.toLocaleString()} catalog items · counts below reflect full catalog</p>` : ''}
209
212
 
210
213
  <div class="stat-cards">
211
- <div class="stat-card"><div class="k">Total</div><div class="v">${stats.totalItems}</div></div>
214
+ <div class="stat-card"><div class="k">Total</div><div class="v">${stats.totalItems.toLocaleString()}</div></div>
212
215
  <div class="stat-card"><div class="k">Plugins</div><div class="v">${kindCounts['claude-plugin']}</div></div>
213
216
  <div class="stat-card"><div class="k">Connectors</div><div class="v">${kindCounts['claude-connector']}</div></div>
214
217
  <div class="stat-card"><div class="k">Copilot Ext</div><div class="v">${kindCounts['copilot-extension']}</div></div>
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@shnitzel/plugscout",
3
- "version": "0.3.17",
3
+ "version": "0.3.18",
4
4
  "description": "Claude plugins + Claude connectors + Copilot extensions + Skills + MCP security intelligence framework",
5
5
  "private": false,
6
6
  "type": "module",