Skip to content

feat(mcp): compact mcp doctor output by default, add --verbose - #327

Merged
yiftach-armis merged 1 commit into
mainfrom
feat/PPSC-1499-mcp-doctor-compact-output
Sep 23, 2026
Merged

yiftach-armis merged 1 commit into
mainfrom
feat/PPSC-1499-mcp-doctor-compact-output

Conversation

@yiftach-armis

Copy link
Copy Markdown
Collaborator

Follow-up to #326. These changes were left uncommitted when #326 merged.

What

A healthy armis-cli mcp doctor run printed 24+ rows plus a Copilot troubleshooting checklist, which made a passing result look alarming. The default output is now a summary:

  ✓ scanner  v1.2.2 · starts in 400ms · 5 tools · API reachable · credentials accepted
  ✓ editors  Antigravity, Claude Code, Claude Desktop, Codex CLI, Copilot CLI, Cursor, VS Code
  ✓ vscode   MCP and Agent mode not disabled

24 passed, 0 warnings, 0 failed
Every check, plus notes on VS Code log, Copilot: armis-cli mcp doctor --verbose
  • One line per component when all its checks pass, and one line listing every healthy editor. Per-editor launch, handshake, and tool rows are folded into it.
  • Failing and warning checks are listed on their own lines with their hints. Healthy editors stay on the shared line.
  • Informational checks (Copilot checklist, VS Code log) only show with --verbose, and the footer points there.
  • New --verbose / -v flag keeps the full per-check listing.

Wording fixes (visible in --verbose)

  • server network no longer shows the unauthenticated probe's HTTP 401 next to a ✓. The status is still in the bundle's network-probe.txt.
  • authentication now says the client ID/secret in .env were accepted, so it doesn't look like it contradicts debug_config reporting SSO.
  • Deduplicated launch rows name the check they reference, e.g. same launch command as the "Antigravity live handshake" check above. Before, the text was inconsistent (scanner / live handshake vs scanner / Antigravity live handshake).

Implementation

  • DoctorCheck gets Editor (included in JSON as editor, omitted when empty) and Summary (not in JSON).
  • Editor checks go through addEditor. The probe tags its rows with the editor and sets summaries only for the server's own launch.

Testing

  • go test ./internal/install/ ./internal/cmd/ passes, including new tests for the compact view (all passing, and problems expanding) and the network, dedup, and editor-tag changes.
  • make lint: 0 issues.
  • Ran ./bin/armis-cli mcp doctor and mcp doctor -v against a real install.

The default view now prints one line per component and one for all healthy
editors, expanding only failing or warning checks with their hints.
--verbose keeps the full per-check listing. Informational notes (Copilot
checklist, VS Code log) move behind --verbose.

Also reword checks that read as errors on a pass: server network no longer
shows the probe's HTTP 401, authentication says what was verified, and
deduplicated launch rows name the check they reference.
@github-actions

Copy link
Copy Markdown

Armis AppSecArmis AppSec Security Scan Results

✅ No issues

@github-actions

Copy link
Copy Markdown

Test Coverage Report

total: (statements) 72.5%

Coverage by function
github.com/ArmisSecurity/armis-cli/cmd/armis-cli/main.go:19:				main					0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/agent.go:43:			Registry				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/agent.go:83:			RegisteredAgentDisplayNames		85.7%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/agentdetect.go:29:		FlatResults				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/agentdetect.go:45:		NewScanner				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/agentdetect.go:53:		Scan					82.4%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:12:			resolvePath				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:23:			isUnderDir				81.8%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:46:			dirExists				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:56:			fileExists				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:67:			hasExtensionPrefix			80.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:88:			findExtensionVersion			64.3%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:111:		readVersionFromPackageJSON		71.4%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:127:		hasJetBrainsPlugin			100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:140:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:142:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:147:		CheckMCP				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:151:		DetectVersion				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:159:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:161:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:171:		CheckMCP				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:175:		DetectVersion				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:183:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:185:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:189:		CheckMCP				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:193:		DetectVersion				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:201:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:203:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:216:		CheckMCP				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:224:		DetectVersion				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:232:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:234:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:241:		CheckMCP				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:245:		DetectVersion				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:253:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:255:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:262:		CheckMCP				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:268:		DetectVersion				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:276:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:278:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:285:		CheckMCP				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:289:		DetectVersion				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:297:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:299:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:306:		CheckMCP				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:310:		DetectVersion				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:318:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:320:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:324:		CheckMCP				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:328:		DetectVersion				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:336:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:338:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:342:		CheckMCP				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:346:		DetectVersion				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:354:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:356:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:366:		CheckMCP				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:370:		DetectVersion				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:378:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:380:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:395:		CheckMCP				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:399:		DetectVersion				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:407:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:409:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:417:		CheckMCP				75.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:425:		DetectVersion				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:433:		Name					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:435:		Detect					100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:439:		CheckMCP				83.3%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/detector.go:460:		DetectVersion				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/format.go:13:			FormatPlain				78.6%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/format.go:62:			anyMCPMissing				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/format.go:74:			FormatJSON				100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/mcpconfig.go:19:		HasArmisMCP				83.3%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/mcpconfig.go:40:		HasArmisMCPInClaudeSettings		86.7%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/mcpconfig.go:68:		HasArmisMCPInZedSettings		66.7%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/mcpconfig.go:98:		HasArmisMCPInVSCodeFormat		75.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/mcpconfig.go:122:		hasArmisMCPInData			100.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/platform_linux.go:13:		NewPlatform				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/platform_linux.go:17:		UserHomeDirs				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/platform_linux.go:25:		VSCodeExtensionsDir			0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/platform_linux.go:30:		JetBrainsPluginDirs			0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/platform_linux.go:35:		VSCodeUserConfigDir			0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/platform_linux.go:39:		CursorAppExists				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/platform_linux.go:43:		JunieBinaryPaths			0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/platform_linux.go:51:		ZedConfigDir				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/platform_linux.go:55:		IsRoot					0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/userprofile.go:13:		enumerateUserDirs			0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/userprofile.go:41:		currentUserOnly				0.0%
github.com/ArmisSecurity/armis-cli/internal/agentdetect/userprofile.go:56:		globJetBrainsPluginDirs			0.0%
github.com/ArmisSecurity/armis-cli/internal/api/agents.go:30:				ReportAgentInventory			78.9%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:31:				Error					0.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:63:				isLoopbackHost				100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:87:				copyWithContext				70.4%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:161:				WithHTTPClient				100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:170:				WithUploadHTTPClient			100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:178:				WithAllowLocalURLs			100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:202:				WithLocalS3Hosts			100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:220:				NewClient				100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:268:				IsDebug					100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:276:				BaseURL					0.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:290:				setAuthHeader				77.8%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:343:				StartIngest				100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:392:				createPresignedUpload			80.8%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:454:				uploadToPresignedURL			89.5%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:505:				buildMultipartEnvelope			80.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:537:				startArtifactScan			75.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:593:				GetIngestStatus				82.6%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:637:				WaitForIngest				84.6%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:688:				FetchNormalizedResults			74.2%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:743:				FetchAllNormalizedResults		91.7%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:769:				GetScanResult				68.4%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:804:				WaitForScan				90.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:825:				formatBytes				100.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:855:				SkipMessage				0.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:867:				FetchArtifactScanResults		75.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:955:				ValidatePresignedURL			95.0%
github.com/ArmisSecurity/armis-cli/internal/api/client.go:1045:				DownloadFromPresignedURL		84.2%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:90:				NewProviderFromStored			60.0%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:107:				AuthMethod				50.0%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:120:				Identity				0.0%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:131:				Expiry					0.0%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:146:				NewAuthProvider				100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:153:				NewAuthProviderWithContext		95.2%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:199:				GetAuthorizationHeader			92.3%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:228:				GetTenantID				69.2%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:254:				GetRegion				53.8%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:278:				IsLegacy				100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:291:				GetRawToken				53.8%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:331:				exchangeCredentials			89.7%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:424:				refreshIfNeeded				100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:440:				refreshOAuthIfNeeded			71.9%
github.com/ArmisSecurity/armis-cli/internal/auth/auth.go:515:				parseJWTClaims				93.3%
github.com/ArmisSecurity/armis-cli/internal/auth/browser.go:19:				SetBrowserOpener			100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/browser.go:31:				OpenBrowser				83.3%
github.com/ArmisSecurity/armis-cli/internal/auth/browser.go:45:				openBrowserCmd				0.0%
github.com/ArmisSecurity/armis-cli/internal/auth/client.go:44:				requireSecureBaseURL			100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/client.go:73:				RegionalBaseURL				100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/client.go:91:				Error					100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/client.go:103:				NewAuthClient				100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/client.go:162:				Authenticate				75.8%
github.com/ArmisSecurity/armis-cli/internal/auth/client.go:252:				annotateTransportError			100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:75:				Error					0.0%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:101:				NewDeviceClient				66.7%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:135:				RequestDeviceCode			72.2%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:168:				PollToken				60.9%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:215:				exchangeDeviceCode			100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:226:				Refresh					100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:238:				tokenRequest				76.5%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:280:				postForm				78.6%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:305:				parseError				75.0%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:314:				asOAuthError				40.0%
github.com/ArmisSecurity/armis-cli/internal/auth/device.go:348:				parseAccessTokenClaims			76.9%
github.com/ArmisSecurity/armis-cli/internal/auth/idpconfig.go:79:			Error					0.0%
github.com/ArmisSecurity/armis-cli/internal/auth/idpconfig.go:106:			NewIdpConfigClient			63.6%
github.com/ArmisSecurity/armis-cli/internal/auth/idpconfig.go:142:			Get					75.0%
github.com/ArmisSecurity/armis-cli/internal/auth/idpconfig.go:152:			Create					100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/idpconfig.go:158:			Update					75.0%
github.com/ArmisSecurity/armis-cli/internal/auth/idpconfig.go:169:			send					80.0%
github.com/ArmisSecurity/armis-cli/internal/auth/idpconfig.go:223:			parseIdpConfigError			84.6%
github.com/ArmisSecurity/armis-cli/internal/auth/idpconfig.go:256:			lastLocField				75.0%
github.com/ArmisSecurity/armis-cli/internal/auth/region_cache.go:34:			NewRegionCache				100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/region_cache.go:40:			Load					82.4%
github.com/ArmisSecurity/armis-cli/internal/auth/region_cache.go:75:			Save					76.9%
github.com/ArmisSecurity/armis-cli/internal/auth/region_cache.go:105:			Clear					75.0%
github.com/ArmisSecurity/armis-cli/internal/auth/region_cache.go:115:			getFilePath				83.3%
github.com/ArmisSecurity/armis-cli/internal/auth/region_cache.go:132:			loadCachedRegion			100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/region_cache.go:136:			saveCachedRegion			100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/region_cache.go:140:			clearCachedRegion			100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:88:			NewTokenStore				0.0%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:94:			normalizeEnv				100.0%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:99:			Save					83.3%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:131:			Load					90.9%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:151:			Clear					90.9%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:170:			ClearAll				0.0%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:175:			Environments				85.7%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:188:			Path					0.0%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:196:			read					73.7%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:227:			write					63.6%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:245:			remove					66.7%
github.com/ArmisSecurity/armis-cli/internal/auth/tokenstore.go:258:			filePath				42.9%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:60:				InitColors				85.2%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:107:				ColorsEnabled				100.0%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:113:				ColorsForced				100.0%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:119:				SetOutputToFile				100.0%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:125:				GetOutputToFile				0.0%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:129:				enableColors				100.0%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:136:				disableColors				100.0%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:151:				parseErrorMessage			92.9%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:182:				PrintError				100.0%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:195:				PrintErrorf				0.0%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:202:				PrintWarning				100.0%
github.com/ArmisSecurity/armis-cli/internal/cli/color.go:208:				PrintWarningf				100.0%
github.com/ArmisSecurity/armis-cli/internal/cli/interactive.go:11:			IsInteractive				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/agent_detection.go:20:			agentDetectionLong			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/agent_detection.go:47:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/agent_detection.go:53:			runAgentDetection			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/agent_detection_collect.go:30:		init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/agent_detection_collect.go:34:		runAgentDetectionCollect		0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/agent_detection_collect.go:100:		buildInventoryPayload			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth.go:55:				init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth.go:63:				runAuth					90.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_login.go:38:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_login.go:43:			runAuthLogin				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_login.go:56:			performDeviceLogin			85.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_login.go:108:			printVerificationInstructions		62.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_login.go:121:			printLoginSuccess			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_logout.go:28:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_logout.go:33:			runAuthLogout				78.9%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:88:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:95:			runAuthSetup				62.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:139:			detectIdentity				85.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:157:			withRequestTimeout			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:163:			runConfigFileSetup			57.9%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:203:			runInteractiveSetup			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:231:			runInteractiveCreate			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:258:			runInteractiveUpdate			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:297:			fetchExistingConfig			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:314:			sendCreate				63.2%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:349:			sendUpdate				87.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:372:			describeIdpConfigError			44.4%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:391:			detailOr				66.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:405:			printPostSetupHint			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:418:			isNonDefaultRegion			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:428:			promptSetupTenantID			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:455:			promptIdpConfig				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:535:			splitGroups				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:548:			assembleGroupMapping			91.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:574:			promptIdpConfigUpdate			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:692:			sameMapping				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:707:			printIdpConfigUpdateSummary		0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:741:			confirmSetup				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:766:			confirmUpdateExisting			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:805:			readConfigFile				80.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:818:			readBoundedConfig			83.3%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:831:			loadIdpConfigFromJSON			95.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:884:			validateIdpConfig			76.2%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:920:			printIdpConfigSummary			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:942:			groupsByRole				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:955:			maskSecret				66.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:962:			setupStrPtr				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_setup.go:963:			setupBoolPtr				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_whoami.go:23:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_whoami.go:27:			runAuthWhoami				84.2%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_whoami.go:63:			describeAuthMethod			40.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/auth_whoami.go:77:			humanizeUntil				42.9%
github.com/ArmisSecurity/armis-cli/internal/cmd/cmdutil/failon.go:15:			ValidateFailOn				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/cmdutil/failon.go:37:			GetFailOn				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/cmdutil/output.go:32:			Cleanup					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/cmdutil/output.go:58:			ResolveOutput				96.4%
github.com/ArmisSecurity/armis-cli/internal/cmd/cmdutil/theme.go:27:			armisTheme				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/cmdutil/theme.go:67:			GetInstallTheme				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/context.go:24:				NewSignalContext			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/context.go:33:				handleScanError				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/help.go:30:				SetupHelp				91.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/help.go:59:				styledUsageTemplate			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/help.go:102:				defaultUsageTemplate			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/help.go:109:				initColorsForHelp			35.3%
github.com/ArmisSecurity/armis-cli/internal/cmd/help.go:150:				styleHelpOutput				83.3%
github.com/ArmisSecurity/armis-cli/internal/cmd/hook.go:24:				init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/hook_init.go:32:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/hook_init.go:38:			runHookInit				66.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/install.go:69:				init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install.go:79:				runInstall				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install.go:120:				showInstalledVersions			81.2%
github.com/ArmisSecurity/armis-cli/internal/cmd/install.go:148:				installAll				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install.go:259:				installTargets				34.3%
github.com/ArmisSecurity/armis-cli/internal/cmd/install.go:430:				printCredentialStatus			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install.go:445:				printKnowledgeResult			25.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install_interactive.go:17:		runInteractiveInstall			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install_interactive.go:289:		confirmKnowledge			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install_interactive.go:307:		collectCredentials			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install_interactive.go:418:		validateAndReport			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install_interactive.go:449:		selectEditorsWithCodex			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install_interactive.go:523:		offerHookSetup				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install_knowledge.go:49:		init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install_knowledge.go:54:		runInstallKnowledge			17.9%
github.com/ArmisSecurity/armis-cli/internal/cmd/install_knowledge_flow.go:19:		hasWork					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/install_knowledge_flow.go:38:		installKnowledgeFor			12.1%
github.com/ArmisSecurity/armis-cli/internal/cmd/knowledge_flags.go:13:			parseKnowledgeVariant			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/knowledge_flags.go:27:			knowledgeEnvForDev			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp.go:20:				init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:81:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:92:			runMCPDoctor				51.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:150:			doctorAuthCheck				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:162:			applyDoctorFixes			79.2%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:207:			printMCPDoctorJSON			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:213:			printMCPDoctorPlain			87.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:255:			printDoctorChecksVerbose		100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:285:			printDoctorChecksCompact		100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:330:			compactServerRows			84.6%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:356:			compactEditorRows			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:380:			problemRows				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:394:			printRemediation			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_doctor.go:409:			statusSymbol				45.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_update.go:35:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_update.go:41:			runMCPUpdate				71.4%
github.com/ArmisSecurity/armis-cli/internal/cmd/mcp_update.go:56:			performMCPUpdate			5.3%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:186:				SetVersion				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:194:				Execute					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:198:				init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:267:				fixedCompletions			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:284:				formatCompletions			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:293:				failOnCompletions			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:307:				PrintUpdateNotification			81.2%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:349:				printUpdateNotificationOnce		75.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:362:				getEnvOrDefault				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:369:				getEnvOrDefaultInt			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:389:				getAPIBaseURL				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:418:				resolveDataPlaneURL			85.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:450:				getAuthProvider				84.6%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:492:				shouldAutoLoginSSO			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:505:				storedAuthProvider			83.3%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:531:				augmentNoCredentialsError		100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:570:				clientOptionsForBaseURL			92.9%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:642:				isLocalDevelopment			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:688:				getPageLimit				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/root.go:695:				validatePageLimit			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan.go:54:				defaultFailOn				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan.go:143:				warnOnUnusedSBOMVEXFlags		50.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan.go:158:				init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_image.go:189:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_repo.go:218:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_sbom.go:156:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_status.go:69:			runScanStatus				85.2%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_status.go:124:			resolveScanID				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_status.go:147:			translateStatusError			77.8%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_status.go:167:			isValidStatusFormat			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_status.go:187:			renderStatus				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_status.go:212:			renderHumanStatus			97.1%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_status.go:275:			scanStatusHint				88.9%
github.com/ArmisSecurity/armis-cli/internal/cmd/scan_status.go:296:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain.go:17:			loadConfigUpward			90.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain.go:93:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_check.go:71:		init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_check.go:123:		runSupplyChainCheck			56.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_check.go:381:		printRegistryCoverage			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_check.go:414:		isNPMFamilyEco				66.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_check.go:428:		registryViolationToFinding		0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_check.go:445:		countNoun				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_check.go:456:		countNounPlural				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_check.go:463:		buildSummary				42.9%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_check.go:480:		detectBaseLockfile			76.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_check.go:561:		resolvePolicy				63.2%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:72:		init					83.3%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:84:		runSupplyChainInit			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:120:		reportNothingInScope			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:161:		detectWrappablePMs			95.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:256:		summarizeDetectedPMs			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:310:		powerShellSkippedDottedPMs		100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:339:		promptYesNo				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:359:		confirmInteractive			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:388:		readYesNo				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:408:		runInitEnv				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:422:		runInitNpmrc				75.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:472:		runInitRC				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:604:		runInitConfig				46.9%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:704:		detectOrgScopes				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:721:		collectScopesFromFile			89.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_init.go:752:		extractScope				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:47:		resolveRegistrySettings			89.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:108:		resolveUpstreamAuth			80.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:142:		basicAuthFromIndexURL			75.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:160:		resolveCABundlePath			60.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:174:		runWrapDryRun				55.6%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:195:		printWrapDryRun				76.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:237:		effectiveRegistryHost			84.6%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:266:		urlHost					75.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:277:		npmrcDefaultRegistryHost		100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:308:		maybeWarnOffPolicyRegistry		33.3%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:345:		shouldShowRegistryWarning		0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_registry.go:359:		markRegistryWarningShown		0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_report.go:110:		buildComplianceReport			78.1%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_report.go:189:		transitivePolicyOrDefault		100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_report.go:199:		hours					66.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_report.go:215:		writeComplianceReport			44.4%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_status.go:43:		init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_status.go:54:		computeVerdict				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_status.go:88:		collapsePipVariants			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_status.go:112:		summarizePMs				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_status.go:125:		uniqueWrappedPMs			62.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_status.go:142:		runSupplyChainStatus			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_status.go:250:		printEnvStatus				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_status.go:267:		displayLockfilePath			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_status.go:322:		runSupplyChainStatusJSON		82.4%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_uninit.go:40:		init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_uninit.go:46:		runSupplyChainUninit			86.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:62:		init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:87:		runSupplyChainWrap			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:153:		canonicalPM				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:160:		runProxyWrap				59.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:350:		printWarnThroughSummary			94.1%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:386:		execPM					0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:455:		exitWithCode				60.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:500:		firstSubcommand				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:520:		actionLabel				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:541:		printBlockSummary			93.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:753:		printFailureCulprits			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:863:		skipCommand				77.8%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:882:		firstCulpritName			85.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:897:		quoteOrPlaceholder			66.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:916:		ageToken				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:924:		optionalAgeToken			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:933:		rightPad				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:965:		printPkgFilterLine			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1022:		groupBlockedByPackage			85.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1055:		verifiedClause				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1067:		checkedAllPass				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1077:		formatPolicyShort			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1095:		shouldShowRationale			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1102:		rationaleAlreadyShown			80.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1114:		markRationaleShown			66.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1129:		filterRelevantBlocked			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1149:		blockedDisplayVersion			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1162:		allResultsPrerelease			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1174:		severityDot				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1178:		formatDurationShort			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1191:		registryEnvForPM			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1233:		parseSkipPackages			75.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1275:		resolveWrapPolicy			91.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1307:		wrapConfigError				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1321:		wrapEcosystemEnforced			85.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1353:		requiresPreInstallBlock			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1373:		uvProxySafe				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1384:		runPreInstallBlock			57.1%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1510:		writePreInstallReport			37.5%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1536:		printPreInstallBlockSummary		0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1584:		blockedViolationNames			0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1608:		normalizeProxyResidue			76.2%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1666:		uvCompileOutputFile			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1685:		uvToolReceipts				72.7%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1708:		pmToEcosystem				100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/supply_chain_wrap.go:1756:		checkGradleStaleness			100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/uninstall.go:43:			init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/uninstall.go:49:			runUninstall				0.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/uninstall.go:68:			uninstallAll				36.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/uninstall.go:247:			uninstallTargets			54.8%
github.com/ArmisSecurity/armis-cli/internal/cmd/uninstall.go:365:			confirm					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/uninstall_knowledge.go:35:		init					100.0%
github.com/ArmisSecurity/armis-cli/internal/cmd/uninstall_knowledge.go:40:		runUninstallKnowledge			27.8%
github.com/ArmisSecurity/armis-cli/internal/httpclient/client.go:31:			NewClient				92.3%
github.com/ArmisSecurity/armis-cli/internal/httpclient/client.go:64:			Do					86.1%
github.com/ArmisSecurity/armis-cli/internal/httpclient/transport.go:39:			ProxyAwareTransport			83.3%
github.com/ArmisSecurity/armis-cli/internal/httpclient/transport.go:52:			systemProxyFunc				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:22:			NewClaudeInstaller			75.0%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:34:			InstalledVersion			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:39:			Install					14.3%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:71:			pluginCacheDir				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:76:			PluginCacheDir				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:81:			EnvFilePath				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:86:			GetInstalledVersion			76.2%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:118:			HasExistingEnv				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:123:			registerMarketplace			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:127:			registerPlugin				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/claude.go:132:			enablePlugin				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:15:			codexSectionHeaderFor			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:23:			CodexConfigPath				66.7%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:31:			IsCodexDetected				80.0%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:42:			RegisterCodexMCP			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:69:			RegisterCodexEntry			71.4%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:99:			DeregisterCodexMCP			83.3%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:122:			buildCodexSectionFor			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:136:			replaceTOMLSection			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:151:			removeTOMLSection			85.7%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:179:			findTOMLSectionBounds			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:233:			tomlQuote				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:239:			readFileOrEmpty				83.3%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:251:			writeFileAtomic				45.0%
github.com/ArmisSecurity/armis-cli/internal/install/codex.go:282:			removeCodexSection			0.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:96:			hint					100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:102:			short					100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:108:			forEditor				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:114:			fix					100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:136:			add					100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:143:			addEditor				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:147:			artifact				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:155:			HasFailures				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:165:			HasProblems				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:177:			Fixes					100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:212:			HasBlockedRegistration			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:230:			ApplyEnvFix				75.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:275:			workspaceDir				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:288:			newDoctorRun				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:304:			RunDoctor				84.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:345:			checkScannerPlugin			58.3%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:398:			checkVenvBase				93.8%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:424:			checkKnowledgePlugin			76.7%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:489:			checkCredentials			89.5%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:528:			checkAuth				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:555:			checkServerNetwork			87.5%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:588:			tryProxyFix				88.2%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:618:			probe					87.3%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:711:			launchHintText				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:718:			summarizeDebugConfig			87.5%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:744:			checkManifestEditors			86.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:834:			checkClaudeSection			20.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:862:			readBoundedConfigFile			77.8%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:881:			claudeRegistryStatus			95.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:919:			checkCodexSection			80.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:940:			lookupEntryCommand			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:949:			lookupEntry				92.3%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:1008:			stringSlice				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:1019:			stringMap				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:1033:			isExecutableFile			83.3%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:1047:			parseEnvFile				92.9%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:1069:			isSecretKey				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor.go:1079:			firstNonEmpty				75.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_bundle.go:18:		DefaultBundleName			0.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_bundle.go:27:		WriteSupportBundle			72.2%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:43:			key					91.7%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:63:			commandLine				83.3%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:100:		mcpHandshake				75.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:172:		runMCPSession				81.4%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:261:		notify					66.7%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:274:		call					69.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:326:		toolCallText				87.5%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:352:		Write					0.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:361:		String					100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:363:		truncate				66.7%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:371:		tail					75.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:382:		launchHint				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:454:		lookupSystemProxy			0.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:474:		hasProxyEnv				75.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:485:		isConnectFailure			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:502:		serverAPIURL				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:520:		runNetworkProbe				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_probe.go:552:		networkHint				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:76:		checkVSCode				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:107:		checkVSCodeVariant			93.3%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:208:		checkVSCodeWorkspace			93.8%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:241:		checkVSCodeSettings			90.9%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:287:		checkVSCodePolicy			13.3%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:315:		parseRegQuery				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:327:		policyProblems				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:355:		checkVSCodeLog				94.7%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:387:		latestVSCodeServerLog			88.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:430:		lastVSCodeError				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:447:		vscodeProfileNames			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:467:		readJSONCObject				84.6%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:490:		vscodeServers				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:499:		findServer				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:516:		vscodeLaunch				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:547:		expandVSCodeVars			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:571:		vscodeSnippet				83.3%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:590:		launchArtifact				83.3%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:609:		sanitizeArtifactName			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:616:		systemInfo				83.3%
github.com/ArmisSecurity/armis-cli/internal/install/doctor_vscode.go:638:		maskURLUserinfo				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:88:			EditorByID				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:101:			ConfigPath				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:112:			IsDetected				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:122:			Register				75.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:131:			RegisterEntry				75.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:140:			DetectedEditors				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:157:			NewEditorInstaller			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:167:			InstalledVersion			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:170:			PluginDir				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:173:			EnvFilePath				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:176:			HasExistingEnv				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:187:			FetchPlugin				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:213:			GetInstalledVersion			80.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:223:			RegisterJetBrains			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:229:			defaultConfigPath			83.3%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:281:			homeDir					75.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:289:			appSupportPath				29.4%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:333:			scannerEntry				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:342:			registerEditor				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:348:			registerEditorEntry			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:364:			registerMCPServersFormat		100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:381:			registerVSCodeFormat			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:403:			registerZedFormat			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:435:			registerContinueFormat			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:481:			readYAMLFileAsMap			80.0%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:502:			writeYAML				66.7%
github.com/ArmisSecurity/armis-cli/internal/install/editors.go:514:			readJSONFileAsMap			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/hooks.go:19:			InstallHooks				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/hooks.go:30:			installHooksToFile			87.1%
github.com/ArmisSecurity/armis-cli/internal/install/hooks.go:100:			RemoveHooks				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/hooks.go:111:			removeHooksFromFile			73.0%
github.com/ArmisSecurity/armis-cli/internal/install/hooks.go:173:			isArmisHookEntry			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/hooks.go:185:			isArmisHookCommand			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/jsonc.go:18:			stripJSONC				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/jsonc.go:72:			nextSignificant				50.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:75:			NewKnowledgeInstaller			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:88:			PluginName				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:103:			PluginRef				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:109:			CheckClaudeCLI				66.7%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:125:			Install					92.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:186:			sibling					75.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:201:			IsInstalled				66.7%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:218:			pluginListed				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:235:			Uninstall				54.5%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:256:			isAlreadyInstalled			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:263:			isNotInstalled				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:269:			resolveClaude				71.4%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:284:			findClaude				55.6%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:302:			runClaudeCLI				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge.go:312:			CredentialsPresent			0.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:57:		NewKnowledgeMCPInstaller		100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:71:		PluginDir				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:76:		EnvFilePath				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:81:		envSubdir				75.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:101:		EnvDir					100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:107:		envSuffix				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:119:		ServerName				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:125:		CodexServerName				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:132:		entry					100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:142:		codexEntry				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:150:		InstalledSHA				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:162:		ShortSHA				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:171:		LatestSHA				65.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:212:		Fetch					65.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:261:		PluginKey				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:268:		ClaudeCacheDir				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:273:		RegisterEditor				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:278:		RegisterCodex				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:296:		RegisterClaude				55.6%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:313:		registerClaudeMarketplace		100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:317:		registerClaudePlugin			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/knowledge_mcp.go:323:		enableClaudePlugin			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:57:			ManifestPath				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:74:			ReadManifest				80.0%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:92:			WriteManifest				66.7%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:104:			NewManifest				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:115:			AddEditor				66.7%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:123:			RemoveEditor				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:128:			SetClaude				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:133:			SetCodex				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:139:			EnsureKnowledge				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:152:			AddEditor				66.7%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:160:			SetClaude				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:165:			SetCodex				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/manifest.go:170:			ConfigFormat				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:65:			HookClientByID				75.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:75:			ConfigPath				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:80:			IsDetected				80.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:90:			DetectHookClients			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:103:		hookConfigPath				75.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:114:		InstallNativeHook			73.3%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:145:		RemoveNativeHook			83.3%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:157:		installClientHook			83.3%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:172:		removeClientHook			66.7%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:183:		cursorHooksPath				50.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:189:		codexHooksPath				50.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:195:		copilotHooksPath			50.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:201:		clineHooksPath				16.7%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:225:		readJSONFileAsMapSafe			72.7%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:246:		installMergedHook			82.4%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:277:		removeMergedHook			0.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:311:		installCursorHook			94.7%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:346:		removeCursorHook			72.2%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:382:		buildCursorHooks			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:405:		buildCodexHooks				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:436:		buildCopilotHooks			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:453:		buildClineHooks				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:471:		hasArmisHookEntries			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:480:		filterNonArmisEntries			80.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:490:		isArmisHookJSON				80.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:507:		cleanupLegacyCopilotHook		42.9%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:524:		removeLegacyFileIfArmisOnly		82.4%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:554:		posixQuote				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/native_hooks.go:558:		quotedCommand				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:56:			newPluginInstaller			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:64:			InstalledVersion			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:69:			LatestVersion				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:78:			FetchAndInstall				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:100:			fetchLatestRelease			69.6%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:140:			downloadAndExtract			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:158:			downloadAndExtractTarball		75.6%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:293:			createPluginVenv			15.8%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:336:			validateGitHubURL			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:350:			extractFile				57.1%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:362:			writeJSON				66.7%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:382:			registerDirectoryMarketplace		100.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:406:			registerInstalledPlugin			81.8%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:437:			enableInstalledPlugin			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:460:			CheckPython				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:470:			pythonNotFoundError			57.1%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:490:			findPython				84.6%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:518:			writeEnvFromEnvironment			85.7%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:550:			WriteEnvFromValues			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:564:			SetEnvFileVars				68.3%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:665:			copyFile				63.6%
github.com/ArmisSecurity/armis-cli/internal/install/plugin.go:685:			venvPython				66.7%
github.com/ArmisSecurity/armis-cli/internal/install/precommit.go:25:			InstallPreCommit			71.4%
github.com/ArmisSecurity/armis-cli/internal/install/precommit.go:81:			RemovePreCommit				79.3%
github.com/ArmisSecurity/armis-cli/internal/install/precommit.go:135:			PreCommitHookPath			0.0%
github.com/ArmisSecurity/armis-cli/internal/install/precommit.go:144:			IsPreCommitInstalled			87.5%
github.com/ArmisSecurity/armis-cli/internal/install/precommit.go:160:			resolveHooksDir				39.1%
github.com/ArmisSecurity/armis-cli/internal/install/precommit.go:201:			DetectGitRoot				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/precommit.go:210:			buildPreCommitSection			83.3%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:20:			NewUninstaller				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:29:			HasManifest				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:34:			PluginDir				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:39:			DeregisterEditor			0.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:60:			DeregisterAllEditors			83.9%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:111:			DeregisterClaude			64.7%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:145:			RemovePluginFiles			64.7%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:179:			editorConfigPath			0.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:190:			deregisterEditor			60.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:203:			deregisterFromFile			66.7%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:210:			deregisterMCPServersFormat		100.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:226:			deregisterVSCodeFormat			77.8%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:242:			deregisterZedFormat			77.8%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:263:			removeContinueEntry			90.5%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:301:			removeFromMarketplace			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:306:			removeFromInstalledPlugins		100.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:311:			removeFromSettings			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:316:			removeJSONKey				55.6%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:331:			removeNestedJSONKey			61.5%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:351:			hasArmisEntry				85.7%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:381:			continueHasEntry			75.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:397:			readAndParseJSON			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:409:			writeJSONAtomic				55.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:440:			HasKnowledge				100.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:451:			RemoveKnowledge				39.4%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:508:			knowledgeServerNames			100.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:514:			deregisterServerFromFile		85.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:552:			deregisterKnowledgeClaude		0.0%
github.com/ArmisSecurity/armis-cli/internal/install/uninstall.go:576:			removeKnowledgeFiles			46.7%
github.com/ArmisSecurity/armis-cli/internal/install/validate.go:23:			ValidateCredentials			0.0%
github.com/ArmisSecurity/armis-cli/internal/install/validate.go:27:			resolveBaseURL				0.0%
github.com/ArmisSecurity/armis-cli/internal/install/validate.go:35:			validateCredentialsWithURL		100.0%
github.com/ArmisSecurity/armis-cli/internal/output/errno_unix.go:12:			isSyncNotSupported			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:62:				wrapText				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:85:				wrapLine				91.7%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:123:			formatRecommendations			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:193:			wrapTextWithFirstLinePrefix		90.9%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:232:			write					66.7%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:263:			Write					89.5%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:293:			Format					100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:298:			FormatWithOptions			88.4%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:391:			SyncColors				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:395:			sortFindingsBySeverity			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:406:			loadSnippetFromFile			69.4%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:522:			formatCodeSnippetWithFrame		91.1%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:615:			truncatePlainLine			0.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:627:			highlightColumns			93.5%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:672:			scanDuration				89.5%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:705:			pluralize				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:714:			suppressionSummaryText			80.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:742:			renderBriefStatus			87.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:799:			renderSummaryDashboard			57.8%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:894:			renderFindings				88.9%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:923:			renderFinding				54.5%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1035:			renderGroupedFindings			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1059:			groupFindings				96.8%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1116:			severityRank				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1123:			isGitRepo				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1130:			getGitBlame				38.1%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1168:			parseGitBlame				95.2%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1204:			maskEmail				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1227:			getTopLevelDomain			75.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1239:			getHumanDisplayTitle			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1253:			wrapTitle				93.9%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1312:			maskFixForDisplay			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1347:			formatFixSection			0.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1412:			formatProposedSnippet			0.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1495:			limitHunkContext			64.7%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1571:			parseDiffHunk				91.7%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1593:			parseDiffLines				94.6%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1684:			findInlineChanges			73.5%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1755:			computeLCS				92.3%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1807:			buildTokenPositions			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1823:			tokenizeLine				92.9%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1851:			isWordChar				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1858:			formatDiffWithColorsStyled		77.1%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1932:			extractDiffFilename			80.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1954:			formatDiffHunkLine			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1974:			formatDiffContextLine			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:1985:			formatDiffRemoveLine			86.4%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2026:			formatDiffAddLine			86.4%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2068:			applyInlineHighlights			81.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2110:			truncateDiffLine			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2117:			truncateDiffLineWithFlag		66.7%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2131:			adjustHighlightSpans			83.3%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2153:			groupDiffHunks				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2184:			collectRenderOps			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2227:			renderChangeBlock			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2286:			formatDiffHunkSeparator			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2301:			formatValidationSection			0.0%
github.com/ArmisSecurity/armis-cli/internal/output/human.go:2358:			getExposureDescription			0.0%
github.com/ArmisSecurity/armis-cli/internal/output/icons.go:25:				GetConfidenceIcon			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/json.go:15:				Format					100.0%
github.com/ArmisSecurity/armis-cli/internal/output/json.go:24:				FormatWithOptions			66.7%
github.com/ArmisSecurity/armis-cli/internal/output/json.go:32:				formatWithDebug				0.0%
github.com/ArmisSecurity/armis-cli/internal/output/json.go:58:				maskScanResultForOutput			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/json.go:78:				maskFindingSecrets			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/junit.go:48:				Format					100.0%
github.com/ArmisSecurity/armis-cli/internal/output/junit.go:55:				FormatWithOptions			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/junit.go:63:				formatWithSeverities			77.8%
github.com/ArmisSecurity/armis-cli/internal/output/junit.go:92:				isFailureSeverity			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/junit.go:102:			convertToJUnitCasesWithSeverities	100.0%
github.com/ArmisSecurity/armis-cli/internal/output/junit.go:135:			countFailuresWithSeverities		100.0%
github.com/ArmisSecurity/armis-cli/internal/output/output.go:26:			Error					0.0%
github.com/ArmisSecurity/armis-cli/internal/output/output.go:37:			Error					0.0%
github.com/ArmisSecurity/armis-cli/internal/output/output.go:58:			GetFormatter				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/output.go:75:			ShouldFail				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/output.go:94:			FilterActiveFindings			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/output.go:107:			CheckExit				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:174:			normalizeCWE				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:183:			normalizeCVE				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:193:			stripMarkdown				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:205:			Format					100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:232:			firstNonEmpty				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:251:			stableRuleID				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:269:			buildRules				96.3%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:340:			convertToSarifResults			90.3%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:441:			buildMessageText			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:448:			severityToSarifLevel			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:468:			severityToSecurityScore			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:487:			generateHelpURI				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:511:			convertFixToSarif			90.5%
github.com/ArmisSecurity/armis-cli/internal/output/sarif.go:628:			FormatWithOptions			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/styles.go:148:			DefaultStyles				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/styles.go:286:			NoColorStyles				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/styles.go:363:			GetStyles				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/styles.go:371:			SyncStylesWithColorMode			100.0%
github.com/ArmisSecurity/armis-cli/internal/output/styles.go:396:			GetSeverityText				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/styles.go:423:			RenderCodeBlock				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/styles.go:448:			TerminalWidth				33.3%
github.com/ArmisSecurity/armis-cli/internal/output/syntax.go:21:			GetLexer				100.0%
github.com/ArmisSecurity/armis-cli/internal/output/syntax.go:32:			GetChromaStyle				80.0%
github.com/ArmisSecurity/armis-cli/internal/output/syntax.go:45:			HighlightCode				81.2%
github.com/ArmisSecurity/armis-cli/internal/output/syntax.go:80:			HighlightLine				75.0%
github.com/ArmisSecurity/armis-cli/internal/output/syntax.go:89:			getTerminalFormatter			60.0%
github.com/ArmisSecurity/armis-cli/internal/output/syntax.go:104:			HighlightLineWithBackground		87.5%
github.com/ArmisSecurity/armis-cli/internal/output/syntax.go:127:			getBackgroundANSI			58.3%
github.com/ArmisSecurity/armis-cli/internal/output/syntax.go:159:			rgbToANSI256				0.0%
github.com/ArmisSecurity/armis-cli/internal/output/syntax.go:172:			parseHexColor				76.9%
github.com/ArmisSecurity/armis-cli/internal/output/writer.go:51:			validateOutputPath			92.3%
github.com/ArmisSecurity/armis-cli/internal/output/writer.go:88:			NewFileOutput				88.2%
github.com/ArmisSecurity/armis-cli/internal/output/writer.go:145:			Writer					100.0%
github.com/ArmisSecurity/armis-cli/internal/output/writer.go:150:			Close					100.0%
github.com/ArmisSecurity/armis-cli/internal/output/writer.go:167:			FormatFromExtension			100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:32:			IsCI					100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:60:			isTerminalWriter			100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:68:			NewReader				100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:83:			NewWriter				50.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:117:			NewSpinner				100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:126:			NewSpinnerWithTimeout			100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:142:			NewSpinnerWithContext			100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:150:			SetWriter				100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:159:			Start					86.4%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:275:			Stop					100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:310:			Update					100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:317:			GetElapsed				100.0%
github.com/ArmisSecurity/armis-cli/internal/progress/progress.go:324:			formatDuration				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/exploitability.go:42:			ShouldFilterByExploitability		100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/exploitability.go:60:			exploitabilityLevel			80.0%
github.com/ArmisSecurity/armis-cli/internal/scan/finding_type.go:9:			DeriveFindingType			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/history/history.go:69:			NewStore				0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/history/history.go:74:			NewStoreWithDir				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/history/history.go:81:			Save					95.7%
github.com/ArmisSecurity/armis-cli/internal/scan/history/history.go:125:		Latest					94.1%
github.com/ArmisSecurity/armis-cli/internal/scan/history/history.go:152:		Path					0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/history/history.go:160:		read					73.7%
github.com/ArmisSecurity/armis-cli/internal/scan/history/history.go:203:		write					56.7%
github.com/ArmisSecurity/armis-cli/internal/scan/history/history.go:253:		filePath				42.9%
github.com/ArmisSecurity/armis-cli/internal/scan/history/history.go:268:		normalizeBaseURL			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:58:			NewScanner				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:73:			WithPollInterval			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:79:			WithFetchRetryInterval			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:85:			WithSBOMVEXOptions			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:92:			WithPullPolicy				0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:98:			ScanImage				0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:140:			ScanTarball				84.5%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:269:			exportImage				0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:352:			validateExportedTarball			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:370:			IsDockerAvailable			42.9%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:385:			getDockerCommand			75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:394:			validateDockerCommand			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:403:			imageExistsLocally			87.5%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:418:			determinePullBehavior			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:436:			isRetryableError			75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:444:			buildScanResult				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:471:			convertNormalizedFindings		85.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:594:			cleanDescription			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:613:			isEmptyFinding				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/image.go:628:			generateFindingTitle			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/image/validate.go:11:			validateImageName			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/mask.go:22:				MaskFixSecrets				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/normalized_findings.go:22:		BuildScanResult				0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/normalized_findings.go:56:		ConvertNormalizedFindings		0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/normalized_findings.go:176:		CleanDescription			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/normalized_findings.go:195:		IsEmptyFinding				0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/record.go:23:				RecordScanStarted			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/files.go:26:			ParseFileList				87.5%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/files.go:41:			addFile					87.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/files.go:94:			Files					100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/files.go:99:			RepoRoot				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/files.go:104:			ValidateExistence			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/gitchanges.go:52:			GitChangedFiles				82.6%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/gitchanges.go:113:		gitRepoRoot				80.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/gitchanges.go:138:		changedUncommitted			41.7%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/gitchanges.go:171:		changedStaged				75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/gitchanges.go:184:		validateRef				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/gitchanges.go:197:		changedSinceRef				75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/gitchanges.go:221:		filterToScanPath			95.8%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/gitchanges.go:274:		runGit					91.7%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/gitchanges.go:306:		parseNulSeparated			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/gitchanges.go:324:		combineAndDedupe			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/githints.go:35:			DetectGitHints				94.4%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/githints.go:83:			isCleanWorkingTree			75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/githints.go:97:			detectDefaultBranch			90.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/githints.go:129:			normalizeRepoName			92.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/ignore.go:28:			LoadIgnorePatterns			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/ignore.go:36:			LoadSuppressionConfig			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/ignore.go:78:			LoadArmisIgnore				96.4%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/ignore.go:138:			parseArmisIgnoreFile			92.5%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/ignore.go:204:			Match					100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/ignore.go:216:			shouldSkipDir				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/inline.go:102:			ApplyInlineSuppression			97.2%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/inline.go:231:			parseInlineComment			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/inline.go:258:			isCommentLine				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/inline.go:272:			isFuncSignature				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/inline.go:285:			containsAny				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/inline.go:299:			findCommentStart			83.3%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/inline.go:339:			parseDirectiveParams			93.9%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/inline.go:397:			matchesInlineDirective			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/inline.go:433:			buildInlineSuppressionInfo		100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/inline.go:461:			countSuppressed				0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/matcher.go:28:			MatchFinding				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/matcher.go:62:			cweMatches				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/matcher.go:78:			ApplySuppression			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/matcher.go:101:			recomputeSummary			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:47:			NewScanner				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:62:			WithPollInterval			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:68:			WithFetchRetryInterval			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:74:			WithIncludeFiles			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:80:			WithSBOMVEXOptions			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:89:			WithGitHints				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:95:			Scan					70.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:342:			tarGzDirectory				71.8%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:424:			isPathContained				75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:433:			tarGzFiles				78.6%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:524:			safeAddSize				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:531:			calculateFilesSize			78.6%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:557:			calculateDirSize			76.9%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:604:			shouldSkip				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:635:			isTestFile				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:681:			isRetryableError			75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:690:			buildScanResult				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:717:			convertNormalizedFindings		73.3%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:840:			cleanDescription			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:861:			generateFindingTitle			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/repo.go:865:			isEmptyFinding				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/suppression.go:58:		NewSuppressionConfig			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/suppression.go:63:		IsEmpty					100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/suppression.go:77:		Add					100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/suppression.go:99:		CategoryMapping				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/suppression.go:112:		parseDirectiveLine			93.5%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/suppression.go:173:		hasDirectivePrefix			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/repo/suppression.go:187:		validateCWE				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:67:			NewScanner				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:88:			WithPollInterval			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:95:			WithFetchRetryInterval			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:101:			WithRawOutput				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:108:			WithVEXOutput				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:119:			Scan					77.6%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:264:			downloadRawFindings			75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:313:			pickRawFindingsURL			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:326:			downloadVEX				73.1%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:379:			prepareUpload				40.5%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:441:			artifactName				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:451:			plural					100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:466:			countVEXStatements			85.7%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:481:			tarGzPath				70.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:532:			writeTarFile				75.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom/sbom.go:554:			isRetryableError			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom_vex.go:48:			NewSBOMVEXDownloader			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom_vex.go:65:			Download				85.7%
github.com/ArmisSecurity/armis-cli/internal/scan/sbom_vex.go:146:			downloadAndSave				77.8%
github.com/ArmisSecurity/armis-cli/internal/scan/status.go:16:				FormatScanStatus			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/status.go:35:				FormatElapsed				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/status.go:48:				MapSeverity				100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/testhelpers/findings.go:9:		CreateNormalizedFinding			0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/testhelpers/findings.go:14:		CreateNormalizedFindingWithLabels	0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/testhelpers/findings.go:19:		CreateNormalizedFindingFull		0.0%
github.com/ArmisSecurity/armis-cli/internal/scan/testhelpers/tarball.go:32:		WriteMinimalTar				64.3%
github.com/ArmisSecurity/armis-cli/internal/scan/testhelpers/tarball.go:68:		assertPathInsideTempDir			80.0%
github.com/ArmisSecurity/armis-cli/internal/scan/title.go:14:				GenerateFindingTitle			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/validate.go:21:			HasAllowedTarExtension			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/validate.go:44:			ValidateTarballFormat			89.7%
github.com/ArmisSecurity/armis-cli/internal/scan/validate.go:114:			isGzip					100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/validate.go:121:			isUstar					100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/validate.go:133:			ValidateUploadSize			100.0%
github.com/ArmisSecurity/armis-cli/internal/scan/validate.go:152:			FormatBytes				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/bun.go:18:		ParseBunLockfile			80.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/bun.go:67:		bunResolvedURL				60.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/bun.go:77:		parseBunPackageKey			80.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/bun.go:91:		shouldSkipBunPackage			83.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:58:		RunCheck				0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:68:		RunCheckWithRegistry			0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:83:		RunCheckWithRegistryClient		0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:94:		runCheck				97.1%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:176:		parseLockfile				33.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:203:		queryRegistry				0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:229:		queryRegistryWithURL			57.1%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:251:		isNPMFamily				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:266:		detectRegistryDivergence		95.2%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:315:		DetectEcosystemFromPath			0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:319:		detectEcosystemFromPath			92.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:355:		isRequirementsFile			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/check.go:367:		diffEntries				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/gradle.go:16:		ParseGradleLockfile			90.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/lockfile.go:24:		readLockfile				90.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/maven.go:38:		ParseMavenDeps				90.5%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/maven.go:79:		mavenDepToEntry				87.5%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/npm.go:43:		ParseNPMLockfile			88.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/npm.go:99:		extractPackageName			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/npm.go:107:		shouldSkipResolved			83.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pdm.go:26:		ParsePDMLockfile			85.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pdm.go:64:		shouldSkipPDMSource			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pip.go:29:		ParsePipRequirements			90.5%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pip.go:79:		parsePipRequirement			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pip.go:106:		shouldSkipPipLine			85.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pip.go:126:		normalizePipName			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pipfile.go:20:		ParsePipfileLock			94.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pipfile.go:55:		pipfileEntryToPackage			80.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pnpm.go:28:		ParsePNPMLockfile			82.4%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pnpm.go:66:		parsePnpmPackageKey			79.2%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pnpm.go:117:		stripPeerFromKey			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/pnpm.go:148:		shouldSkipPnpmPackage			87.5%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/poetry.go:26:		ParsePoetryLockfile			85.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/poetry.go:58:		shouldSkipPoetrySource			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/uv.go:26:			ParseUVLockfile				85.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/uv.go:64:			shouldSkipUVSource			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/yarn.go:15:		ParseYarnLockfile			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/yarn.go:28:		isBerryLockfile				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/yarn.go:37:		parseYarnBerry				81.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/yarn.go:79:		extractBerryPackageName			30.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/yarn.go:119:		shouldSkipYarnResolution		100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/yarn.go:139:		parseYarnClassic			97.2%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/yarn.go:219:		extractClassicPackageName		75.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/check/yarn.go:227:		shouldSkipClassicProtocol		100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/config.go:105:			KnownEcosystemsHint			0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/config.go:113:			LoadConfig				89.5%
github.com/ArmisSecurity/armis-cli/internal/supplychain/config.go:162:			validate				91.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/config.go:195:			RegistryURLFor				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/config.go:213:			HasAnyRegistry				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/config.go:225:			ToPolicy				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/config.go:256:			UnknownEcosystems			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/config.go:279:			EnforcesEcosystem			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/config.go:310:			FindConfigDir				91.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/detect.go:64:			DetectEcosystems			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/detect.go:109:			DetectEcosystemsUpward			92.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/detect.go:151:			FindEcosystemLockfile			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/detect.go:170:			FindUpward				92.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/detect.go:197:			ecosystemLockfileName			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/manifest.go:27:			DirectDependencies			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/manifest.go:54:			directDepsFromPackageJSON		86.4%
github.com/ArmisSecurity/armis-cli/internal/supplychain/normalize.go:37:		NormalizeArtifact			50.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/normalize.go:141:		DetectLoopbackRegistry			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/normalize.go:156:		FileContainsString			85.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:45:			isNpmrcMarkerLine			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:56:			HasNpmrcMarker				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:69:			NpmrcFileHasMarker			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:83:			RemoveNpmrcMarker			85.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:117:			removeNpmrcMarkerLines			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:174:			NpmrcAuthToken				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:204:			ReadNpmrcAuthToken			91.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:228:			npmrcKeyCandidates			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:241:			parseNpmrcTokens			88.2%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:272:			resolveNpmrcToken			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/npmrc.go:300:			IndexURLBasicAuth			88.9%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:219:			NewProxy				97.1%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:343:			buildAuthHeader				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:350:			modifyUpstreamResponse			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:386:			newUpstreamHTTPClient			84.2%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:446:			NewRegistryHTTPClient			83.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:457:			Start					91.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:483:			Addr					100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:502:			Upstream				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:510:			Blocked					100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:518:			Checked					100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:529:			VerifyFailed				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:540:			markVerifyFailed			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:546:			Allowed					100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:559:			Warned					100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:573:			isTransitive				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:585:			warnThroughTransitive			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:589:			Close					66.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:596:			handleRequest				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:632:			joinUpstreamURL				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:645:			handleMetadataFiltering			83.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:801:			copyCacheHeaders			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:823:			sanitizeHeaderValue			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:831:			isX509Error				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:844:			warnDegradedEnforcement			83.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:854:			filterMetadata				92.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1068:			recordConstraintData			96.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1180:			recordWarned				71.4%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1208:			filterPyPISimple			92.6%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1328:			pypiFileAge				88.9%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1346:			pypiVersionFromFilename			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1382:			jsonString				83.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1393:			reverseProxy				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1397:			extractPackageNameFromPath		91.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1431:			isMetadataRequest			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1474:			IsPrerelease				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1485:			extractPyPIPackageNameFromPath		100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy.go:1510:			isPyPIMetadataRequest			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy_constraints.go:42:	EvaluateConstraints			89.1%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy_constraints.go:133:	isWildcardRange				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy_constraints.go:145:	parseVersions				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/proxy_constraints.go:159:	anySatisfies				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/maven.go:49:		NewMavenClient				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/maven.go:61:		NewMavenClientWithHTTP			66.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/maven.go:71:		GetPublishDate				96.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/maven.go:125:		escapeSolrQueryValue			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/maven.go:131:		fetchPublishDate			76.9%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/maven.go:185:		GetPublishDates				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/npm.go:78:		NewClient				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/npm.go:98:		NewClientWithHTTP			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/npm.go:129:		WithAuthHeader				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/npm.go:134:		GetPublishDate				86.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/npm.go:165:		GetPublishDates				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/npm.go:195:		fetchMetadata				86.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:82:		NewPyPIClient				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:104:		NewPyPIClientWithHTTP			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:142:		WithAuthHeader				0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:147:		GetPublishDate				79.2%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:196:		GetPublishDates				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:229:		fetchReleases				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:259:		fetchReleasesLegacy			68.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:315:		fetchReleasesSimple			77.4%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:376:		pypiVersionFromFilename			33.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:415:		NormalizePyPIName			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:419:		normalizePyPIName			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:427:		lookupReleaseNormalized			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry/pypi.go:443:		normalizeVersion			84.6%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry_url.go:37:		ValidateRegistryURL			90.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry_url.go:94:		StripURLUserinfo			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/registry_url.go:107:		rejectNonRoutableIP			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:68:			sanitizePMNames				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:86:			DetectShells				93.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:138:			powershellProfiles			33.3%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:170:			resolveWindowsDocumentsDir		0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:192:			GenerateWrapper				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:208:			ShellReloadCommand			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:222:			IsPowerShell				0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:228:			generatePosixWrapper			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:262:			generateFishWrapper			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:299:			generatePowerShellWrapper		100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:344:			shellQuote				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:353:			shellQuotePowerShell			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:374:			resolveCliPath				77.8%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:390:			InjectFunctions				88.9%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:405:			injectIntoFile				78.9%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:441:			RemoveFunctions				87.5%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:455:			removeFromFile				86.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:483:			removeBlock				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:507:			EvalCommand				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:511:			HasInjection				75.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:535:			WrappedPMs				95.7%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:581:			HasCurrentInjection			75.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:590:			fileExists				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:606:			IsPipVariant				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:620:			CanonicalPipVariant			0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:658:			scanPathExecutables			84.6%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:744:			DetectPipVariants			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:765:			DetectInstalledPMs			0.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/shell.go:800:			IsOnPath				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/supplychain.go:37:		ParseTransitivePolicy			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/supplychain.go:54:		DefaultPolicy				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/supplychain.go:70:		ClassifySeverity			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/supplychain.go:80:		IsExcluded				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/supplychain.go:100:		ParseDuration				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/supplychain.go:144:		parseFiniteNonNegativeFloat		100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/supplychain.go:166:		scaleToDuration				100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/supplychain.go:174:		ViolationToFinding			100.0%
github.com/ArmisSecurity/armis-cli/internal/supplychain/supplychain.go:188:		formatAge				100.0%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:64:			NewChecker				100.0%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:81:			CheckCached				100.0%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:99:			CheckInBackground			100.0%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:119:			check					85.7%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:162:			fetchLatestVersion			89.5%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:196:			getCacheFilePath			66.7%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:211:			readCache				84.6%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:235:			writeCache				76.9%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:259:			IsNewer					100.0%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:282:			parseVersion				100.0%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:305:			FormatNotification			100.0%
github.com/ArmisSecurity/armis-cli/internal/update/update.go:328:			getUpdateCommand			40.0%
github.com/ArmisSecurity/armis-cli/internal/util/cache.go:21:				GetCacheDir				75.0%
github.com/ArmisSecurity/armis-cli/internal/util/cache.go:41:				GetCacheFilePath			80.0%
github.com/ArmisSecurity/armis-cli/internal/util/format.go:7:				FormatCategory				100.0%
github.com/ArmisSecurity/armis-cli/internal/util/mask.go:109:				MaskSecretInLine			86.4%
github.com/ArmisSecurity/armis-cli/internal/util/mask.go:164:				maskValue				83.3%
github.com/ArmisSecurity/armis-cli/internal/util/mask.go:190:				MaskSecretInLines			100.0%
github.com/ArmisSecurity/armis-cli/internal/util/mask.go:204:				MaskSecretInMultiLineString		100.0%
github.com/ArmisSecurity/armis-cli/internal/util/mask.go:218:				MaskSecretsInStringMap			100.0%
github.com/ArmisSecurity/armis-cli/internal/util/path.go:13:				SanitizePath				90.9%
github.com/ArmisSecurity/armis-cli/internal/util/path.go:53:				SafeJoinPath				87.5%
github.com/ArmisSecurity/armis-cli/test/sample-repo/src/main.go:6:			main					0.0%
total:											(statements)				72.5%

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Note

Copilot was unable to run its full agentic suite in this review.

Copilot review overview

Review effort: Lite
Findings: 2 Medium severity

Open (2)
What changed in this PR

This PR adds a compact/plain “doctor” output mode with a new --verbose flag, and enriches doctor checks with editor and summary metadata to support folded views and clearer reporting.

Changes:

  • Add Editor and Summary metadata to DoctorCheck, plus helper APIs to tag checks and set compact summaries.
  • Update plain output to default to a compact view (summary + attention-needed checks), with --verbose to list all checks.
  • Improve/adjust details for certain checks (probe de-dup messaging, server network OK detail) and expand tests accordingly.
File Description
internal/​install/​doctor_vscode.go Tag VS Code registration checks as editor-related via addEditor.
internal/​install/​doctor_checks_test.go Extend tests for editor tagging and refined network OK detail.
internal/​install/​doctor.go Add editor/summary fields & helpers; update probe and multiple checks to use compact summaries and editor tagging.
internal/​cmd/​mcp_doctor_test.go Update plain output tests and add coverage for the new compact output behavior and --verbose flag.
internal/​cmd/​mcp_doctor.go Implement --verbose flag, compact/plain output rendering, and new compact/verbose printers.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Comment on lines +295 to +303
var rows []doctorRow
var notes []string
for _, comp := range components {
var server, editors []install.DoctorCheck
for _, c := range byComponent[comp] {
switch {
case c.Status == install.StatusInfo:
notes = append(notes, c.Name)
case c.Editor != "":
Comment on lines +383 to +387
c := &checks[i]
if c.Status == install.StatusOK {
continue
}
rows = append(rows, doctorRow{status: c.Status, label: label, text: c.Name + ": " + c.Detail, check: c})
@yiftach-armis
yiftach-armis merged commit bef57fc into main Sep 23, 2026
13 of 14 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants