plugin-scanner 3.4.3__py3-none-any.whl → 3.4.4__py3-none-any.whl

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.
@@ -14353,14 +14353,18 @@ function resolveActionTitle(receipt) {
14353
14353
  if (type === "Tool call" && mcpTool && mcpTool.length > 0) {
14354
14354
  return mcpTool;
14355
14355
  }
14356
- const packageName = envelope?.package_name?.trim();
14357
- if (type === "Package" && packageName && packageName.length > 0) {
14358
- return packageName;
14359
- }
14360
14356
  const signals = (receipt.scanner_evidence ?? []).filter(isRiskSignalEvidence);
14361
14357
  if (signals.length > 0 && signals[0]?.title) {
14362
14358
  return signals[0].title;
14363
14359
  }
14360
+ const rawCommand = receipt.raw_command_text?.trim();
14361
+ if (rawCommand) {
14362
+ return truncate(rawCommand, 80);
14363
+ }
14364
+ const packageName = envelope?.package_name?.trim();
14365
+ if (type === "Package" && packageName && packageName.length > 0) {
14366
+ return packageName;
14367
+ }
14364
14368
  const provenance = receipt.provenance_summary?.trim();
14365
14369
  const artifactName = receipt.artifact_name?.trim();
14366
14370
  if (provenance && provenance.toLowerCase().startsWith("hook event for") && artifactName && provenance.toLowerCase().endsWith(artifactName.toLowerCase())) {
@@ -14382,6 +14386,18 @@ function resolveActionTitle(receipt) {
14382
14386
  }
14383
14387
  return type;
14384
14388
  }
14389
+ function resolveActionTitleTooltip(receipt) {
14390
+ const title = resolveActionTitle(receipt);
14391
+ const envelopeCommand = getEnvelope(receipt)?.command?.trim();
14392
+ if (resolveActionType(receipt) === "Shell command" && envelopeCommand) {
14393
+ return envelopeCommand;
14394
+ }
14395
+ const rawCommand = receipt.raw_command_text?.trim();
14396
+ if (rawCommand && title === truncate(rawCommand, 80)) {
14397
+ return rawCommand;
14398
+ }
14399
+ return title;
14400
+ }
14385
14401
  function resolveActionSubtitle(receipt) {
14386
14402
  const signals = (receipt.scanner_evidence ?? []).filter(isRiskSignalEvidence);
14387
14403
  const firstSignal = signals[0];
@@ -14404,9 +14420,13 @@ function resolveActionSubtitle(receipt) {
14404
14420
  const provenance = receipt.provenance_summary?.trim();
14405
14421
  const isCapsUseful = caps && caps !== "hook artifact · codex" && !caps.toLowerCase().startsWith("guard local daemon completed");
14406
14422
  const isProvenanceUseful = provenance && provenance !== "hook artifact · codex" && !provenance.toLowerCase().startsWith("guard local daemon completed");
14407
- if (isCapsUseful) {
14423
+ const actionTitle = resolveActionTitle(receipt);
14424
+ const fullActionTitle = resolveActionTitleTooltip(receipt);
14425
+ const rawCommand = receipt.raw_command_text?.trim();
14426
+ const capsRepeatsRawCommand = Boolean(rawCommand && caps?.toLowerCase() === rawCommand.toLowerCase());
14427
+ if (isCapsUseful && caps?.toLowerCase() !== actionTitle.toLowerCase() && caps?.toLowerCase() !== fullActionTitle.toLowerCase() && !capsRepeatsRawCommand) {
14408
14428
  parts.push(caps);
14409
- } else if (isProvenanceUseful && provenance?.toLowerCase() !== caps?.toLowerCase() && provenance !== resolveActionTitle(receipt)) {
14429
+ } else if (isProvenanceUseful && provenance?.toLowerCase() !== caps?.toLowerCase() && provenance !== actionTitle) {
14410
14430
  parts.push(provenance);
14411
14431
  }
14412
14432
  if (parts.length > 0) {
@@ -22217,6 +22237,7 @@ function ActionRow({
22217
22237
  const category = detectCategory(receipt);
22218
22238
  const catInfo = getCategoryInfo(category);
22219
22239
  const actionTitle = resolveActionTitle(receipt);
22240
+ const actionTitleTooltip = resolveActionTitleTooltip(receipt);
22220
22241
  const actionType = resolveActionType(receipt);
22221
22242
  const actionSubtitle = resolveActionSubtitle(receipt);
22222
22243
  const handleClick = reactExports.useCallback(() => {
@@ -22257,8 +22278,28 @@ function ActionRow({
22257
22278
  children: [
22258
22279
  /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "px-3 py-2.5", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `${catInfo.color}`, "aria-hidden": "true", children: catInfo.icon }) }),
22259
22280
  /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "px-3 py-2.5", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col min-w-0", children: [
22260
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-medium text-brand-dark truncate block max-w-[260px]", children: actionTitle }),
22261
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-slate-400 truncate block max-w-[260px]", children: actionSubtitle ?? actionType })
22281
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
22282
+ "span",
22283
+ {
22284
+ className: "text-sm font-medium text-brand-dark line-clamp-2 break-words block max-w-[70vw] sm:max-w-[420px] lg:max-w-[520px]",
22285
+ title: actionTitleTooltip,
22286
+ children: [
22287
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { "aria-hidden": "true", children: actionTitle }),
22288
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sr-only", children: actionTitleTooltip })
22289
+ ]
22290
+ }
22291
+ ),
22292
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
22293
+ "span",
22294
+ {
22295
+ className: "text-[11px] text-slate-400 truncate block max-w-[70vw] sm:max-w-[420px] lg:max-w-[520px]",
22296
+ title: actionSubtitle ?? actionType,
22297
+ children: [
22298
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { "aria-hidden": "true", children: actionSubtitle ?? actionType }),
22299
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sr-only", children: actionSubtitle ?? actionType })
22300
+ ]
22301
+ }
22302
+ )
22262
22303
  ] }) }),
22263
22304
  !hideHarnessColumn && /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "px-3 py-2.5 hidden sm:table-cell", children: /* @__PURE__ */ jsxRuntimeExports.jsx(
22264
22305
  "button",
@@ -25868,13 +25909,34 @@ function CategoryTabRaw({ receipts, onFilterCategory }) {
25868
25909
  const category = detectCategory(receipt);
25869
25910
  const catInfo = getCategoryInfo(category);
25870
25911
  const actionTitle = resolveActionTitle(receipt);
25912
+ const actionTitleTooltip = resolveActionTitleTooltip(receipt);
25871
25913
  const actionType = resolveActionType(receipt);
25872
25914
  const actionSubtitle = resolveActionSubtitle(receipt);
25873
25915
  return /* @__PURE__ */ jsxRuntimeExports.jsxs("tr", { className: "border-b border-slate-100 last:border-0 hover:bg-slate-50 transition-colors", children: [
25874
25916
  /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "px-3 py-2.5", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: `${catInfo.color}`, "aria-hidden": "true", children: catInfo.icon }) }),
25875
25917
  /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "px-3 py-2.5", children: /* @__PURE__ */ jsxRuntimeExports.jsxs("div", { className: "flex flex-col min-w-0", children: [
25876
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-sm font-medium text-brand-dark truncate block max-w-[260px]", children: actionTitle }),
25877
- /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-[11px] text-slate-400 truncate block max-w-[260px]", children: actionSubtitle ?? actionType })
25918
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
25919
+ "span",
25920
+ {
25921
+ className: "text-sm font-medium text-brand-dark line-clamp-2 break-words block max-w-[70vw] sm:max-w-[420px] lg:max-w-[520px]",
25922
+ title: actionTitleTooltip,
25923
+ children: [
25924
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { "aria-hidden": "true", children: actionTitle }),
25925
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sr-only", children: actionTitleTooltip })
25926
+ ]
25927
+ }
25928
+ ),
25929
+ /* @__PURE__ */ jsxRuntimeExports.jsxs(
25930
+ "span",
25931
+ {
25932
+ className: "text-[11px] text-slate-400 truncate block max-w-[70vw] sm:max-w-[420px] lg:max-w-[520px]",
25933
+ title: actionSubtitle ?? actionType,
25934
+ children: [
25935
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { "aria-hidden": "true", children: actionSubtitle ?? actionType }),
25936
+ /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "sr-only", children: actionSubtitle ?? actionType })
25937
+ ]
25938
+ }
25939
+ )
25878
25940
  ] }) }),
25879
25941
  /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "px-3 py-2.5 hidden md:table-cell", children: /* @__PURE__ */ jsxRuntimeExports.jsx("span", { className: "text-xs text-slate-500", children: harnessDisplayName(receipt.harness) }) }),
25880
25942
  /* @__PURE__ */ jsxRuntimeExports.jsx("td", { className: "px-3 py-2.5", children: /* @__PURE__ */ jsxRuntimeExports.jsx(DecisionBadge, { decision: receipt.policy_decision }) }),
@@ -1435,8 +1435,8 @@
1435
1435
  max-width: 28rem;
1436
1436
  }
1437
1437
 
1438
- .max-w-\[260px\] {
1439
- max-width: 260px;
1438
+ .max-w-\[70vw\] {
1439
+ max-width: 70vw;
1440
1440
  }
1441
1441
 
1442
1442
  .max-w-\[320px\] {
@@ -6293,6 +6293,10 @@
6293
6293
  max-width: 9rem;
6294
6294
  }
6295
6295
 
6296
+ .sm\:max-w-\[420px\] {
6297
+ max-width: 420px;
6298
+ }
6299
+
6296
6300
  .sm\:max-w-sm {
6297
6301
  max-width: var(--container-sm);
6298
6302
  }
@@ -6685,6 +6689,10 @@
6685
6689
  width: calc(var(--spacing) * 60);
6686
6690
  }
6687
6691
 
6692
+ .lg\:max-w-\[520px\] {
6693
+ max-width: 520px;
6694
+ }
6695
+
6688
6696
  .lg\:grid-cols-1 {
6689
6697
  grid-template-columns: repeat(1, minmax(0, 1fr));
6690
6698
  }
@@ -1,3 +1,3 @@
1
1
  """Single source of truth for tool version."""
2
2
 
3
- __version__ = "3.4.3" # x-release-please-version
3
+ __version__ = "3.4.4" # x-release-please-version
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: plugin-scanner
3
- Version: 3.4.3
3
+ Version: 3.4.4
4
4
  Summary: Lint, verify, and gate plugin ecosystems for maintainers, CI, and publish workflows.
5
5
  Project-URL: Homepage, https://hol.org/guard
6
6
  Project-URL: Security, https://hol.org/guard/security
@@ -41,7 +41,7 @@ codex_plugin_scanner/trust_scoring.py,sha256=t_Lw13HZ766UCJzTtNNwllZK_k2ks_x-8St
41
41
  codex_plugin_scanner/trust_skill_scoring.py,sha256=e-SrMBgAruzFn4RD0pGpP9rtPXxc2ji_CKpcnFPRh3M,12542
42
42
  codex_plugin_scanner/trust_specs.py,sha256=aYGSB8M9RQp1uwhsRaWlVa1M9Vk51kUIxmBXkW8noZU,10729
43
43
  codex_plugin_scanner/verification.py,sha256=iVYDMyqjLQjD2KlnROTu4_sPLb_WyH8kFN-BOqR2kWM,33689
44
- codex_plugin_scanner/version.py,sha256=uPqIDoYI2D48o5mkRHDEqgAtLhiBRJLLUeaaMPEHg4o,98
44
+ codex_plugin_scanner/version.py,sha256=TJPiRm42wDMfOuyzSg7bo97ZhQaR5KhZN0Pci6Ct9r4,98
45
45
  codex_plugin_scanner/checks/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
46
46
  codex_plugin_scanner/checks/best_practices.py,sha256=uB3DXLggqxjfyBMH_1yvX4nyFhpIvaRHjTyyueoO-GQ,8473
47
47
  codex_plugin_scanner/checks/claude.py,sha256=DeKUbGPt2McSGhijzXLPL_SzjG_15WAB35_7mk8LU5A,10938
@@ -726,8 +726,8 @@ codex_plugin_scanner/guard/daemon/static/favicon-16x16.png,sha256=jcclKW2ZXshOJU
726
726
  codex_plugin_scanner/guard/daemon/static/favicon-32x32.png,sha256=kFgVF3ZorfAwCCc5BlCL6GYaoPilCf3m5H4elkPUeso,1352
727
727
  codex_plugin_scanner/guard/daemon/static/favicon.ico,sha256=NyHUlCArXLJQJYu7qpTb89I5q4e2lUwwa858YRSvVM0,4270
728
728
  codex_plugin_scanner/guard/daemon/static/index.html,sha256=r6C56uWqarR_ER8vLbBMIdnbK-0I4LKALCTJK0-CyJQ,1513
729
- codex_plugin_scanner/guard/daemon/static/assets/guard-dashboard.js,sha256=ZkEZFAH4VdNZw9z5n7F5-W2wxDZghG4b2MfbWrWVM74,1484300
730
- codex_plugin_scanner/guard/daemon/static/assets/index.css,sha256=5GUOO2Mgi4OCbst_aZtHbho0BbhvcUAUDY3vzpjjKRk,207259
729
+ codex_plugin_scanner/guard/daemon/static/assets/guard-dashboard.js,sha256=S3plnZrP4-VWHhGGc9nKV4sMnLofWBIAIX7Krt6khSg,1487072
730
+ codex_plugin_scanner/guard/daemon/static/assets/index.css,sha256=AoAELrxc6r7TDvCNgd85xZlDjrBn1KgZ9CnCmgJdgsI,207373
731
731
  codex_plugin_scanner/guard/daemon/static/assets/chunks/about-workspace.js,sha256=XZMkZ_ixS25l0ck3oiYTFJoKwmZ5-767UVTwisR41Fc,32410
732
732
  codex_plugin_scanner/guard/daemon/static/assets/chunks/app-catalog.js,sha256=FFIWlbkUNRTpWmOTP0m8NL8atgRiy9SirmSbNomKIq0,9181
733
733
  codex_plugin_scanner/guard/daemon/static/assets/chunks/app-detail-workspace.js,sha256=m8k6h_W4RCStNC20ldAPwCxeDW61mV1LKC7uNso-OL0,93425
@@ -1300,8 +1300,8 @@ codex_plugin_scanner/guard/contracts/data/guard-cloud-review/v2/contract.json,sh
1300
1300
  codex_plugin_scanner/guard/contracts/data/guard-cloud-review/v2/fixtures.json,sha256=vpf8NvLxmgI9ISG_mnSo5bBGYsegO4cZDwOIXmictfk,20769
1301
1301
  codex_plugin_scanner/guard/contracts/data/mcp_servers/contributions/mcp.filesystem.json,sha256=dgKScdJ07v8m_7S028oAKd_D0awf8tmKXWtdWWjtICc,1270
1302
1302
  codex_plugin_scanner/guard/contracts/data/mcp_servers/contributions/mcp.instapods.json,sha256=4pfklIwGN3vg3PHEW-aDr2Bql6sCv_oApQMmgk5SzlY,1449
1303
- plugin_scanner-3.4.3.dist-info/METADATA,sha256=KtFMZOZYvU-5t8Z7tD-_MgUCYGedBkCgzBqlHxxUOlA,35798
1304
- plugin_scanner-3.4.3.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
1305
- plugin_scanner-3.4.3.dist-info/entry_points.txt,sha256=SLGKi3GvvSsPwave-k2JQt2meG0pM7aaC6VlUy47Crg,122
1306
- plugin_scanner-3.4.3.dist-info/licenses/LICENSE,sha256=UbiP0-niTtzc4d0UWk_KLc0SkRQH8AsG36b_YA-XM8E,11358
1307
- plugin_scanner-3.4.3.dist-info/RECORD,,
1303
+ plugin_scanner-3.4.4.dist-info/METADATA,sha256=acWgbld3LxvnBiUBZZt6eATEgmsxg74BPnrko_dEJnU,35798
1304
+ plugin_scanner-3.4.4.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
1305
+ plugin_scanner-3.4.4.dist-info/entry_points.txt,sha256=SLGKi3GvvSsPwave-k2JQt2meG0pM7aaC6VlUy47Crg,122
1306
+ plugin_scanner-3.4.4.dist-info/licenses/LICENSE,sha256=UbiP0-niTtzc4d0UWk_KLc0SkRQH8AsG36b_YA-XM8E,11358
1307
+ plugin_scanner-3.4.4.dist-info/RECORD,,